Пример #1
0
            private void SetSignImages(Signage signage)
            {
                string hex = Team == EventManager.Team.B ? captureTheFlagEvent.TeamBColor : captureTheFlagEvent.TeamAColor;

                if (signImageCRC == 0)
                {
                    hex = hex.TrimStart('#');

                    int red   = int.Parse(hex.Substring(0, 2), NumberStyles.AllowHexSpecifier);
                    int green = int.Parse(hex.Substring(2, 2), NumberStyles.AllowHexSpecifier);
                    int blue  = int.Parse(hex.Substring(4, 2), NumberStyles.AllowHexSpecifier);

                    Color color = new Color((float)red / 255f, (float)green / 255f, (float)blue / 255f);

                    Color[] array = new Color[256 * 256];
                    for (int i = 0; i < array.Length; i++)
                    {
                        array[i] = color;
                    }

                    Texture2D texture2D = new Texture2D(256, 256);
                    texture2D.SetPixels(array);
                    byte[] bytes = texture2D.EncodeToPNG();

                    Destroy(texture2D);

                    signImageCRC = FileStorage.server.Store(bytes, FileStorage.Type.png, CommunityEntity.ServerInstance.net.ID);
                }

                Array.Resize <uint>(ref signage.textureIDs, 1);

                signage.textureIDs[0] = signImageCRC;
                signage.SetFlag(BaseEntity.Flags.Locked, true);
            }
Пример #2
0
        private void CheckChatCommand(BasePlayer player, string command, string[] args)
        {
            //Check for the Use Permission
            if (!hasPermissionUse(player, PERMISSION_USE))
            {
                player.ChatMessage(string.Format(GetLangValue("NoPermission", player.UserIDString)));
                return;
            }
            Signage    sign = null;
            RaycastHit hit;

            // Get the object that is in front of the player within the maximum distance set in the config.
            if (Physics.Raycast(player.eyes.HeadRay(), out hit, 3))
            {
                // Attempt to grab the Signage entity, if there is none this will set the sign to null,
                // otherwise this will set it to the sign the player is looking at.
                sign = hit.GetEntity() as Signage;
            }
            else
            {
                player.ChatMessage(string.Format(GetLangValue("NothingFound", player.UserIDString)));
                return;
            }
            //If everything is ok, here we actually get the needed Values
            player.ChatMessage(string.Format(GetLangValue("LastEdit", player.UserIDString), getPlayerDataForSign(sign, player.UserIDString)));
        }
 void Awake()
 {
     entity     = GetComponent <Signage>();
     initialRot = entity.transform.eulerAngles.y;
     secsToTake = instance.configData.RotationSpeed;
     isRotating = false;
 }
Пример #4
0
 public QueueItem(string ur, BasePlayer se, Signage si, bool raw)
 {
     url      = ur;
     sender   = se;
     sign     = si;
     this.raw = raw;
 }
Пример #5
0
        void OnSignUpdated(Signage sign, BasePlayer player, string text)
        {
            uint signId = sign.net.ID;

            SignItem signItem;

            if (m_signsLogs.SignItems.ContainsKey(signId))
            {
                signItem = m_signsLogs.SignItems[signId];
            }
            else
            {
                signItem = new SignItem();
                m_signsLogs.SignItems[signId] = signItem;
            }

            AccessItem accessItem;

            if (signItem.AccessItems.ContainsKey(player.userID))
            {
                accessItem = signItem.AccessItems[player.userID];
            }
            else
            {
                accessItem = new AccessItem();
                signItem.AccessItems[player.userID] = accessItem;
            }

            accessItem.dateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
        }
Пример #6
0
 public QueueItem(string ur, IPlayer se, Signage si, string ty)
 {
     url    = ur;
     sender = se;
     sign   = si;
     type   = ty;
 }
Пример #7
0
        private void DynamicSignCommand(IPlayer player, string command, string[] args)
        {
            if (!player.HasPermission(permAdmin))
            {
                player.Reply(Lang("Not allowed", player.Id, command));
                return;
            }

            RaycastHit hit;
            Signage    sign       = null;
            var        basePlayer = player.Object as BasePlayer;

            if (Physics.Raycast(basePlayer.eyes.HeadRay(), out hit, 2f))
            {
                sign = hit.transform.GetComponentInParent <Signage>();
            }
            if (sign == null)
            {
                player.Reply(Lang("No signs found", player.Id));
                return;
            }

            if (storedData.Signs.ContainsKey(sign.net.ID))
            {
                player.Reply(Lang("Already a dynamic sign", player.Id));
                return;
            }

            CreateSign(player, sign, args.Length >= 1 ? args[0] : "death");
            var info = new SignData(sign);

            storedData.Signs.Add(sign.net.ID, info);
            Interface.Oxide.DataFileSystem.WriteObject(Name, storedData);
        }
Пример #8
0
 public void Add(string url, IPlayer player, Signage sign, string type)
 {
     QueueList.Add(new QueueItem(url, player, sign, type));
     if (activeLoads < maxActiveLoads)
     {
         Next();
     }
 }
Пример #9
0
 public void Add(string url, BasePlayer player, Signage s, bool raw)
 {
     QueueList.Enqueue(new QueueItem(url, player, s, raw));
     if (ActiveLoads < SignArtist.MaxActiveLoads)
     {
         Next();
     }
 }
Пример #10
0
 public void Add(string url, BasePlayer player, Signage sign)
 {
     QueueList.Add(new QueueItem(url, player, sign));
     if (activeLoads < MaxActiveLoads)
     {
         Next();
     }
 }
Пример #11
0
 void Awake()
 {
     entity     = GetComponent <Signage>();
     initialRot = entity.transform.eulerAngles;
     secsToTake = instance.configData.RotationSpeed;
     startRot   = new Vector3(entity.transform.eulerAngles.x, 0.01f, entity.transform.eulerAngles.z);
     endRot     = new Vector3(entity.transform.eulerAngles.x, 359.99f, entity.transform.eulerAngles.z);
     isRotating = false;
 }
Пример #12
0
            public SignData(Signage sign)
            {
                TextureId = sign.textureID;

                /*SignColor = "ffffff";
                 * TextColor = "000000";
                 * Width = 0;
                 * Height = 0;*/
            }
Пример #13
0
        private void UpdateSignImage(Signage signage, string text, bool hideText = false)
        {
            if (!configData.Sign.GenerateImage)
            {
                return;
            }

            imageStorage.AddQueueItem(new ImageStorage.QueueItem(text, signage, hideText));
        }
Пример #14
0
        void sil(BasePlayer player, string command, string[] args)
        {
            if (args.Length == 0)
            {
                player.ChatMessage(Syntax);
                return;
            }

            if (!HasPerm(player, "signartist.url"))
            {
                player.ChatMessage(NoPerm);
                return;
            }

            float cd;

            if (CoolDowns.TryGetValue(player, out cd) && cd > Time.realtimeSinceStartup && !HasPerm(player, "signartist.cd"))
            {
                player.ChatMessage(string.Format(CooldownMsg, ToReadableString(cd - Time.realtimeSinceStartup)));
                return;
            }

            RaycastHit hit;
            Signage    sign = null;

            if (Physics.Raycast(player.eyes.HeadRay(), out hit, MaxDist))
            {
                sign = hit.transform.GetComponentInParent <Signage>();
            }

            if (sign == null)
            {
                player.ChatMessage(NoSignFound);
                return;
            }

            if (!sign.CanUpdateSign(player) && !HasPerm(player, "signartist.owner"))
            {
                player.ChatMessage(NotYourSign);
                return;
            }

            var raw = args.Length > 1 && args[1].Equals("raw", StringComparison.OrdinalIgnoreCase);

            if (raw && !HasPerm(player, "signartist.raw"))
            {
                player.ChatMessage(NoPerm);
                return;
            }
            UWeb.Add(args[0], player, sign, raw);
            player.ChatMessage(AddedToQueue);
            if (UrlCooldown > 0)
            {
                CoolDowns[player] = Time.realtimeSinceStartup + UrlCooldown;
            }
        }
Пример #15
0
 object CanUpdateSign(BasePlayer player, Signage sign)
 {
     if (usingCTF && hasStarted)
     {
         if (sign == FlagA?.flag || sign == FlagB?.flag)
         {
             return(false);
         }
     }
     return(null);
 }
Пример #16
0
            internal static FlagController Create(CaptureTheFlagEvent captureTheFlagEvent, EventManager.Team team, Vector3 position)
            {
                Signage        signage        = Spawn(position);
                FlagController flagController = signage.gameObject.AddComponent <FlagController>();

                flagController.captureTheFlagEvent = captureTheFlagEvent;
                flagController.Team         = team;
                flagController.basePosition = position;

                return(flagController);
            }
Пример #17
0
 bool CanUpdateSign(Signage sign, BasePlayer player)
 {
     if (m_configData.SignBlocks.ContainsKey(player.userID))
     {
         SignBlock signBlock = m_configData.SignBlocks[player.userID];
         player.ChatMessage(m_configData.Messages["forbidden"].Replace("%reason", signBlock.reason).Replace("%player_name", player.displayName));
         sign.Kill();
         return(false);
     }
     return(true);
 }
Пример #18
0
        private void CreateSign(IPlayer player, Signage sign, string type)
        {
            uWeb.Add(SignImage(), player, sign, type);
            if (!autoLock)
            {
                return;
            }

            sign.SetFlag(BaseEntity.Flags.Locked, true);
            sign.SendNetworkUpdate();
        }
Пример #19
0
        private void OnEntityKill(BaseNetworkable networkable)
        {
            Signage signage = networkable.GetComponent <Signage>();

            if (signage != null)
            {
                if (signRegisteredSkulls.ContainsKey(signage))
                {
                    signRegisteredSkulls.Remove(signage);
                }
            }
        }
Пример #20
0
        void CreateSign(BasePlayer player, Signage sign)
        {
            uWeb.Add(SignImage(), player, sign);

            // Prevent player edits
            if (!LockSigns)
            {
                return;
            }
            sign.SetFlag(BaseEntity.Flags.Locked, true);
            sign.SendNetworkUpdate();
        }
Пример #21
0
            private static Signage Spawn(Vector3 position)
            {
                Signage signage = GameManager.server.CreateEntity(SIGN_PREFAB, position) as Signage;

                signage.enableSaving = false;
                signage.Spawn();

                Destroy(signage.GetComponent <MeshCollider>());
                Destroy(signage.GetComponent <DestroyOnGroundMissing>());
                Destroy(signage.GetComponent <GroundWatch>());

                return(signage);
            }
Пример #22
0
        void SignChatCmd(BasePlayer player)
        {
            if (!HasPermission(player, "deathsigns.admin"))
            {
                PrintToChat(player, NoPermission);
                return;
            }

            // Check for sign to use
            RaycastHit hit;
            Signage    sign = null;

            if (Physics.Raycast(player.eyes.HeadRay(), out hit, 2f))
            {
                sign = hit.transform.GetComponentInParent <Signage>();
            }

            if (sign == null)
            {
                PrintToChat(player, NoSignsFound);
                return;
            }

            if (storedData.Signs.ContainsKey(sign.net.ID))
            {
                PrintToChat(player, "Already a death sign!");
                return;
            }

            // Create sign image
            var          text      = $"{storedData.Deaths}+{(storedData.Deaths == 1 ? "death" : "deaths")}";
            const string bgColor   = "ffffff";
            const string textColor = "000000";
            const int    textSize  = 80;
            const int    width     = 350;
            const int    height    = 150;
            var          url       = $"http://placeholdit.imgix.net/~text?txtsize={textSize}&txt={text}&w={width}&h={height}";

            uWeb.Add(url, player, sign);

            // Store updated data
            var info = new SignData(sign);

            storedData.Signs.Add(sign.net.ID, info);
            Interface.Oxide.DataFileSystem.WriteObject(Name, storedData);

            // Lock sign to prevent player edits
            sign.SetFlag(BaseEntity.Flags.Locked, true);
            sign.SendNetworkUpdate();
        }
Пример #23
0
        void sil(BasePlayer player, string command, string[] args)
        {
            if (args.Length == 0)
            {
                player.ChatMessage(Syntax);
                return;
            }

            float cd;

            if (CoolDowns.TryGetValue(player, out cd) && cd > Time.realtimeSinceStartup && !HasPerm(player, "sil_cd"))
            {
                player.ChatMessage(String.Format(CooldownMsg, ToReadableString(cd - Time.realtimeSinceStartup)));
                return;
            }

            RaycastHit hit;
            Signage    sign = null;

            if (Physics.Raycast(player.eyes.HeadRay(), out hit, MaxDist))
            {
                sign = hit.transform.GetComponentInParent <Signage>();
            }

            if (sign == null)
            {
                player.ChatMessage(NoSignFound);
                return;
            }

            if (!(player.CanBuild() || HasPerm(player, "sil_owner")))
            {
                player.ChatMessage(NotYourSign);
                return;
            }

            if (HasPerm(player, "sil_url"))
            {
                UWeb.Add(args[0], player, sign);
                player.ChatMessage(AddedToQueue);
                if (UrlCooldown > 0)
                {
                    CoolDowns[player] = Time.realtimeSinceStartup + UrlCooldown;
                }
            }
            else
            {
                player.ChatMessage(NoPerm);
            }
        }
Пример #24
0
        public BluemTransactionResponse DoTest()
        {
            var store   = new X509Store(StoreName.My, StoreLocation.LocalMachine);
            var logger  = new LogFactory().GetCurrentClassLogger(typeof(TestClass));
            var signage = new Signage(store, logger);

            var paymentRequest = new BluemRequestFactory().CreateRequest(new BluemPaymentRequestType()) as IBluePaymentRequest;

            paymentRequest.AddPaymentData(new EntranceCode(), "foobar", "qooxdoo", "Such description", 12.34, DateTime.Today.AddMonths(1).AddMinutes(10).AddSeconds(21));

            BluemClient client        = new BluemClient(logger);
            var         signedRequest = signage.SignRequest(paymentRequest);
            var         response      = (BluemTransactionResponse)client.SendRequest(signedRequest);

            return(response);
        }
Пример #25
0
        void OnSignUpdated(Signage sign, BasePlayer player)
        {
            if (signs.ContainsKey(sign.textureID))
            {
                signs[sign.textureID] = $"{player.displayName}, {player.userID}, {DateTime.Now}";
            }
            else
            {
                signs.Add(sign.textureID, $"{player.displayName}, {player.userID}, {DateTime.Now}");
            }

            if (logUpdates)
            {
                Log(Lang("SignUpdated", null, sign.textureID, sign.OwnerID, DateTime.Now, player.displayName, player.userID));
            }
        }
Пример #26
0
 /// <summary>
 /// Gets the Last editor for a given Signage
 /// </summary>
 /// <param name="sign"></param>
 /// <param name="caller"></param>
 /// <returns></returns>
 private string getPlayerDataForSign(Signage sign, string caller)
 {
     if (sign != null)
     {
         string playerData = "";
         foreach (SignCheckerData data in FindSignById(sign.ToString()))
         {
             playerData = data.ToString();
         }
         if (!string.IsNullOrEmpty(playerData))
         {
             return(playerData);
         }
     }
     return(string.Format(GetLangValue("NoOne", caller)));
 }
Пример #27
0
        private bool CanUpdateSign(BasePlayer player, Signage sign)
        {
            if (SignBanInfo.IsSignBanned(player.IPlayer))
            {
                SendChatMessage(player.IPlayer, Lang("Player Try Update", player.UserIDString));
                return(false);
            }

            if (ZoneManager != null && ZMNoSignUpdates(player) == true)
            {
                return(false);
            }
            else
            {
                return(true);
            }
        }
Пример #28
0
            IEnumerator WaitForRequest(WWW www, QueueItem info)
            {
                yield return(www);

                BasePlayer player = info.sender;

                if (www.error == null)
                {
                    if (www.size <= MaxSize)
                    {
                        Signage sign = info.sign;
                        if (sign.textureID > 0U)
                        {
                            FileStorage.server.Remove(sign.textureID, FileStorage.Type.png);
                        }
                        sign.textureID = FileStorage.server.Store(www.bytes, FileStorage.Type.png);
                        sign.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
                        player.ChatMessage(Loaded);
                        if (ConsoleLog)
                        {
                            ServerConsole.PrintColoured(System.ConsoleColor.DarkYellow, ConsoleLogMsg
                                                        .Replace("{steam}", player.userID.ToString())
                                                        .Replace("{name}", player.displayName)
                                                        .Replace("{id}", sign.textureID.ToString())
                                                        .Replace("{url}", info.url));
                        }
                    }
                    else
                    {
                        player.ChatMessage(SizeError);
                        CoolDowns.Remove(player);
                    }
                }
                else
                {
                    player.ChatMessage(Error.Replace("{error}", www.error));
                    CoolDowns.Remove(player);
                }
                ActiveLoads--;
                if (QueueList.Count > 0)
                {
                    Next();
                }
            }
Пример #29
0
        object OnEntityTakeDamage(BaseCombatEntity entity, HitInfo hitInfo)
        {
            if (hitInfo == null || entity == null)
            {
                return(null);
            }

            BasePlayer player = hitInfo.Initiator as BasePlayer;
            Signage    sign   = entity as Signage;

            if (player && sign && m_signsShowInfo.Contains(player.userID))
            {
                if (player.net.connection.authLevel == 0 && !permission.UserHasPermission(player.userID.ToString(), "SSNSigns.signs"))
                {
                    return(null);
                }

                uint signId = sign.net.ID;

                player.ChatMessage("Sign: <color=cyan>" + signId + "</color>");

                if (m_signsLogs.SignItems.ContainsKey(signId))
                {
                    List <ulong> contextPlayers = new List <ulong>();
                    SignItem     signItem       = m_signsLogs.SignItems[signId];
                    int          i = 0;
                    foreach (ulong userID in sortedByDatetime(signItem.AccessItems))
                    {
                        contextPlayers.Add(userID);

                        AccessItem accessItem = m_signsLogs.SignItems[signId].AccessItems[userID];

                        string message = m_configData.Messages["player_access"];
                        message = message.Replace("%player_steamid", userID.ToString());
                        message = message.Replace("%player_name", SSNNotifier.Call <string>("PlayerName", userID));
                        message = message.Replace("%timestamp", accessItem.dateTime);
                        player.ChatMessage((++i).ToString() + ") " + message);
                    }
                    SSNNotifier.Call("SetContextPlayers", player.userID, contextPlayers);
                }
                return("handled");
            }
            return(null);
        }
Пример #30
0
        private void InitializeSign(Signage sign, string name, Vector3 localPosition, Vector3 localRotation)
        {
            BaseEntity[] children = sign.children.Where(x => x.GetComponent <DroppedItem>())?.ToArray() ?? null;

            if (children != null)
            {
                for (int i = 0; i < children.Length; i++)
                {
                    sign.RemoveChild(children[i]);
                    children[i].Kill();
                }
            }

            DroppedItem skullItem = CreateSkullItem(name, sign, localPosition, localRotation);

            UpdateSignImage(sign, name);

            signRegisteredSkulls.Add(sign, skullItem);
        }
Пример #31
0
 private object IOnSignUpdated(Signage sign, BaseEntity.RPCMessage msg)
 {
     return Interface.CallHook("OnSignUpdated", sign, msg.player);
 }