Exemple #1
0
        public void Invoke(ShPlayer player, string target = null)
        {
            if (target != null && !player.svPlayer.HasPermission($"{Core.Instance.Info.GroupNamespace}.{nameof(WarnList)}.viewotherplayers"))
            {
                player.TS("warns_noPermission_viewOtherPlayers");
                return;
            }

            if (target == null)
            {
                SendWarnList(player, player.username, player.GetWarns());
                return;
            }

            if (EntityCollections.TryGetPlayerByNameOrID(target, out var shTarget))
            {
                SendWarnList(player, shTarget.username, shTarget.GetWarns());
                return;
            }

            if (Core.Instance.SvManager.TryGetUserData(target, out var user))
            {
                SendWarnList(player, user.ID, user.GetWarns());
                return;
            }

            player.TS("user_not_found", target.CleanerMessage());
        }
Exemple #2
0
        public void PlaceBounty(int sourceID, string bountyName)
        {
            ShPlayer requester = EntityCollections.FindByID <ShPlayer>(sourceID);

            if (!requester)
            {
                Debug.LogError("[SVR] Requester not found");
                return;
            }

            if (bounties.ContainsKey(bountyName))
            {
                requester.svPlayer.SendGameMessage("Bounty already exists for " + bountyName);
            }
            else if (requester.MyMoneyCount < placeCost)
            {
                requester.svPlayer.SendGameMessage("Not enough money");
            }
            else
            {
                AddBounty(bountyName);
                requester.TransferMoney(DeltaInv.RemoveFromMe, placeCost);
                OnEmployeeAction(requester, null);
            }
        }
Exemple #3
0
        public void CancelBounty(int sourceID, string bountyName)
        {
            ShPlayer requester = EntityCollections.FindByID <ShPlayer>(sourceID);

            if (!requester)
            {
                Debug.LogError("[SVR] Requester not found");
                return;
            }

            if (!bounties.ContainsKey(bountyName))
            {
                requester.svPlayer.SendGameMessage("No Bounty for " + bountyName);
            }
            else if (requester.MyMoneyCount < cancelCost)
            {
                requester.svPlayer.SendGameMessage("Not enough money");
            }
            else
            {
                bounties.Remove(bountyName);
                ChatHandler.SendToAll("Bounty Canceled on " + bountyName);
                requester.TransferMoney(DeltaInv.RemoveFromMe, cancelCost);
                OnEmployeeAction(requester, null);

                if (aiTarget && bountyName == aiTarget.username)
                {
                    aiTarget = null;
                }
            }
        }
Exemple #4
0
        public void Invoke(ShPlayer player, string target, int warnId)
        {
            if (warnId < 1)
            {
                player.TS("warn_remove_error_null_or_negative", warnId.ToString());
                return;
            }

            if (EntityCollections.TryGetPlayerByNameOrID(target, out var shTarget))
            {
                if (CheckWarnCount(player, warnId, shTarget.GetWarns()))
                {
                    return;
                }
                shTarget.RemoveWarn(warnId - 1);
                return;
            }

            if (Core.Instance.SvManager.TryGetUserData(target, out var user))
            {
                if (CheckWarnCount(player, warnId, user.GetWarns()))
                {
                    return;
                }
                user.RemoveWarn(warnId - 1);
                Core.Instance.SvManager.database.Users.Upsert(user);
                return;
            }

            player.TS("user_not_found", target.CleanerMessage());
        }
Exemple #5
0
        public void GetItemType()
        {
            var ec = new EntityCollections();

            var array = new int?[0];

            Assert.AreEqual(typeof(int?), ec.GetItemType(array.GetType()));

            var collection = new Collection <object>();

            Assert.AreEqual(typeof(object), ec.GetItemType(collection.GetType()));

            Assert.ThrowsException <ArgumentException>(() => ec.GetItemType(typeof(string)));
        }
Exemple #6
0
        public void OnOptionAction(ShPlayer player, int targetID, string menuID, string optionID, string actionID)
        {
            if (targetID >= 0)
            {
                player.svPlayer.job.OnOptionMenuAction(targetID, menuID, optionID, actionID);
                return;
            }

            ShPlayer target = EntityCollections.FindByID <ShPlayer>(-targetID);

            if (target)
            {
                target.svPlayer.job.OnOptionMenuAction(player.ID, menuID, optionID, actionID);
            }
        }
Exemple #7
0
        public void RequestAdd(int sourceID, string itemName)
        {
            if (!requestItems.Contains(itemName))
            {
                Debug.LogError("[SVR] Item not valid: " + itemName);
                return;
            }

            ShItem item = SceneManager.Instance.GetEntity <ShItem>(itemName);

            if (!item)
            {
                Debug.LogError("[SVR] Item not found: " + itemName);
                return;
            }

            ShPlayer requester = EntityCollections.FindByID <ShPlayer>(sourceID);

            if (!requester)
            {
                Debug.LogError("[SVR] Requester not found");
                return;
            }

            if (requester.HasItem(item.index))
            {
                requester.svPlayer.SendGameMessage("Already own item");
            }
            else if (requester.MyMoneyCount < item.value)
            {
                requester.svPlayer.SendGameMessage("Not enough money");
            }
            else if (requests.ContainsKey(requester.username))
            {
                requester.svPlayer.SendGameMessage("Previous request still pending");
            }
            else
            {
                requests[requester.username] = itemName;
                requester.svPlayer.SendGameMessage("Request successfully sent");
                ShPlayer mayor = info.members.FirstOrDefault();
                if (mayor)
                {
                    mayor.svPlayer.SendGameMessage(requester.username + " requesting a " + item.itemName);
                }
            }
        }
Exemple #8
0
        public void CreateCollection()
        {
            var ec = new EntityCollections();

            var items = new int[] { 1, 2, 3 };

            var arrayType = typeof(int).MakeArrayType();
            var array     = ec.CreateCollection(arrayType, items);

            Assert.IsInstanceOfType(array, typeof(int[]));
            Assert.AreEqual(3, ((int[])array).Length);

            var listType = typeof(ICollection <>).MakeGenericType(new[] { typeof(int) });
            var list     = ec.CreateCollection(listType, items);

            Assert.IsInstanceOfType(list, typeof(List <>).MakeGenericType(new[] { typeof(int) }));
            Assert.AreEqual(3, ((List <int>)list).Count);
        }
Exemple #9
0
        public void IsCollection()
        {
            var ec = new EntityCollections();

            var arrayType = new int[0].GetType();

            Assert.IsTrue(ec.IsCollection(arrayType));

            arrayType = typeof(object).MakeArrayType();
            Assert.IsTrue(ec.IsCollection(arrayType));

            var collectionType = typeof(IList <>);

            Assert.IsTrue(ec.IsCollection(collectionType));

            collectionType = typeof(IList <>).MakeGenericType(typeof(object));
            Assert.IsTrue(ec.IsCollection(collectionType));
        }
Exemple #10
0
        public void Invoke(ShPlayer player, string targetStr)
        {
            StringBuilder sb;

            if (EntityCollections.TryGetPlayerByNameOrId(targetStr, out ShPlayer target))
            {
                sb = GetOnlineInfo(target);
            }
            else
            {
                sb = GetOfflineInfo(player, targetStr);
            }
            if (sb == null)
            {
                return;
            }

            // TODO: send as server info or CEF (pref server info to limit footprint)
        }
Exemple #11
0
        public void Invoke(ShPlayer player, string targetStr)
        {
            StringBuilder sb;
            var           target = Core.Instance.SvManager.database.Users.FindById(targetStr);

            if (target != null)
            {
                sb = GetOfflineInfo(target);
            }
            else if (EntityCollections.TryGetPlayerByNameOrID(targetStr, out ShPlayer shPlayer))
            {
                sb = GetOnlineInfo(shPlayer);
            }
            else
            {
                player.SendChatMessage($"No account found with the id '{targetStr}'.");
                return;
            }
            player.svPlayer.Send(SvSendType.Self, Channel.Reliable, ClPacket.ServerInfo, sb.ToString());
        }
Exemple #12
0
        public void Invoke(ShPlayer player, string target, string reason)
        {
            if (EntityCollections.TryGetPlayerByNameOrID(target, out var shTarget))
            {
                shTarget.AddWarn(player, reason);
                ChatUtils.SendToAllEnabledChatT("all_warned", player.username.CleanerMessage(), shTarget.username.CleanerMessage(), reason.CleanerMessage());
                player.TS("player_warn", shTarget.username.CleanerMessage(), reason.CleanerMessage());
                shTarget.TS("target_warn", shTarget.username.CleanerMessage(), reason.CleanerMessage());
                return;
            }

            if (Core.Instance.SvManager.TryGetUserData(target, out var user))
            {
                user.AddWarn(player, reason);
                ChatUtils.SendToAllEnabledChatT("all_warned", player.username.CleanerMessage(), target.CleanerMessage(), reason.CleanerMessage());
                player.TS("player_warn", target.CleanerMessage(), reason.CleanerMessage());
                Core.Instance.SvManager.database.Users.Upsert(user);
                return;
            }

            player.TS("user_not_found", target.CleanerMessage());
        }
Exemple #13
0
        public void Invoke(ShPlayer player, string targetStr)
        {
            StringBuilder sb;

            if (EntityCollections.TryGetPlayerByNameOrID(targetStr, out ShPlayer shPlayer))
            {
                sb = GetOnlineInfo(shPlayer);
            }
            else
            {
                var target = Core.Instance.SvManager.database.Users.FindById(targetStr);
                if (target != null)
                {
                    sb = GetOfflineInfo(target);
                }
                else
                {
                    player.SendChatMessage($"No account found with the id '{targetStr}'.");
                    return;
                }
            }
            player.svPlayer.SendTextMenu(player.T("info_title"), sb.ToString());
        }
Exemple #14
0
 public MinigameContainer(ShPlayer player, int entityID)
 {
     this.player  = player;
     targetEntity = EntityCollections.FindByID(entityID);
 }
Exemple #15
0
 public HackingContainer(ShPlayer player, int apartmentID, string username) : base(player, apartmentID)
 {
     targetApartment = targetEntity as ShApartment;
     EntityCollections.TryGetPlayerByNameOrID(username, out targetPlayer);
 }
Exemple #16
0
 public HackingContainer(ShPlayer player, int apartmentID, string username)
 {
     this.player     = player;
     targetApartment = EntityCollections.FindByID <ShApartment>(apartmentID);
     EntityCollections.TryGetPlayerByNameOrID(username, out targetPlayer);
 }
Exemple #17
0
        public void LoadFile(string fileName)
        {
            if (File.Exists(fileName))
            {
                Filename = fileName;

                var xml = new XmlDocument();
                xml.Load(fileName);

                // Map
                var mapNode = xml.ChildNodes[0];
                ID     = mapNode.Attributes["id"].ToValue <int>();
                Name   = mapNode.Attributes["name"].Value;
                Width  = mapNode.Attributes["width"].ToValue <int>();
                Height = mapNode.Attributes["height"].ToValue <int>();

                // Map->Tilesets
                if (mapNode.ChildNodes.HasNode("tilesets"))
                {
                    var tilesetsNode = mapNode.ChildNodes.FindNode("tilesets");
                    foreach (XmlNode tilesetNode in tilesetsNode.ChildNodes)
                    {
                        var tileset = Tileset.ParseFile(Path.Combine(ResourceUtils.GetResourcePath(ResourceUtils.AssetsType.Gfx),
                                                                     tilesetNode.Attributes["file"].Value));
                        Tilesets.Add(tileset);
                    }
                }

                // Map->Entities
                if (mapNode.ChildNodes.HasNode("objects"))
                {
                    var entityCollectionNodes = mapNode.ChildNodes.FindNode("objects");
                    foreach (XmlNode entityCollectionNode in entityCollectionNodes)
                    {
                        var entityCollection = EntityCollection.ParseFile(Path.Combine(ResourceUtils.GetResourcePath(ResourceUtils.AssetsType.Gfx),
                                                                                       entityCollectionNode.Attributes["file"].Value));
                        EntityCollections.Add(entityCollection);
                    }
                }

                // Map->Transitions
                if (mapNode.ChildNodes.HasNode("transitions"))
                {
                    var transitionsNode = mapNode.ChildNodes.FindNode("transitions");
                    foreach (XmlNode transitionNode in transitionsNode.ChildNodes)
                    {
                        var transition = new Transition()
                        {
                            X      = transitionNode.Attributes["x"].ToValue <int>(),
                            Y      = transitionNode.Attributes["y"].ToValue <int>(),
                            Target = new Transition.TransitionTarget()
                            {
                                ID = transitionNode.ChildNodes[0].Attributes["mapid"].ToValue <int>(),
                                X  = transitionNode.ChildNodes[0].Attributes["x"].ToValue <int>(),
                                Y  = transitionNode.ChildNodes[0].Attributes["y"].ToValue <int>(),
                            }
                        };

                        Transitions.Add(transition);
                    }
                }

                // Map->Spawn
                if (mapNode.ChildNodes.HasNode("spawn"))
                {
                    Spawn = new System.Drawing.Point(mapNode.ChildNodes.FindNode("spawn").Attributes["x"].ToValue <int>(),
                                                     mapNode.ChildNodes.FindNode("spawn").Attributes["y"].ToValue <int>());
                }

                // Map->Tiles
                foreach (XmlNode node in mapNode.ChildNodes)
                {
                    if (node.Name.ToLower().Equals("tile"))
                    {
                        var tile = new Tile()
                        {
                            X      = node.Attributes["x"].ToValue <int>(),
                            Y      = node.Attributes["y"].ToValue <int>(),
                            Sprite = FindSpriteByID(node.Attributes["spriteid"].ToValue <int>())
                        };

                        Tiles.Add(tile);
                    }
                }
            }
        }