Example #1
0
        public void OnAddingInventoryItems(Events.General.AddingInventoryItemsEventArgs ev)
        {
            Log.Debug($"Giving Inventory Items of the subclass {ev.Subteam.Name}, to {ev.Player.Nickname}", this.plugin.Config.Debug);
            if (ev.IsAllowed == false)
            {
                return;
            }

            ev.Player.ClearInventory();

            foreach (string i in ev.Subteam.Inventory)
            {
                if (int.TryParse(i, out int citem))
                {
                    CustomItem.TryGive(ev.Player, citem, plugin.Config.DisplayDescription);
                }
                else if (ItemType.TryParse <ItemType>(i, out ItemType item))
                {
                    ev.Player.AddItem(item);
                }
                else
                {
                    Log.Error($"The config item {i} of the subteam {ev.Subteam.Name} isn't valid");
                }
            }

            foreach (KeyValuePair <AmmoType, uint> a in ev.Subteam.Ammo)
            {
                ev.Player.Ammo[(int)a.Key] = a.Value;
            }
        }
Example #2
0
        /// <inheritdoc/>
        public bool Execute(ArraySegment <string> arguments, ICommandSender sender, out string response)
        {
            if (!sender.CheckPermission("customitems.give"))
            {
                response = "Permission Denied, required: customitems.give";
                return(false);
            }

            if (arguments.Count < 2)
            {
                response = "give [Custom item name/Custom item ID] [Nickname/PlayerID/UserID]";
                return(false);
            }

            string identifier = string.Join(" ", arguments.Skip(1));

            if (!(Player.Get(identifier) is Player player))
            {
                response = $"Unable to find player: {identifier}.";
                return(false);
            }

            if (player.IsDead || player.Team == Team.SCP)
            {
                response = $"{player.Nickname}'s \"{player.Role}\" role cannot receive custom items!";
                return(false);
            }

            if (player.Inventory.items.Count >= 8)
            {
                response = $"{player.Nickname}'s inventory is full!";
                return(false);
            }

            if (int.TryParse(arguments.At(0), out int id) && CustomItem.TryGive(player, id))
            {
                response = $"Custom item with ID {arguments.At(0)} given to {player.Nickname} ({player.UserId})";
                return(true);
            }
            else if (CustomItem.TryGive(player, arguments.At(0)))
            {
                response = $"Custom item {arguments.At(0)} given to {player.Nickname} ({player.UserId})";
                return(true);
            }

            response = $"custom item {arguments.At(0)} not found.";
            return(false);
        }
Example #3
0
        // TEMP!!!
        internal static void GiveCustomInventory(List <string> inventory, Player player)
        {
            player.ClearInventory();

            foreach (string item in inventory)
            {
                if (Enum.TryParse(item, out ItemType parsedItem))
                {
                    player.AddItem(parsedItem);
                }
                else
                {
                    CustomItem.TryGive(player, item, false);
                }
            }
        }
Example #4
0
        /// <summary>
        /// Resets the player's inventory to the provided list of items and/or customitems names, clearing any items it already possess.
        /// </summary>
        /// <param name="player">The player to which items will be given.</param>
        /// <param name="newItems">The new items that have to be added to the inventory.</param>
        /// <param name="displayMessage">Indicates a value whether <see cref="CustomItem.ShowPickedUpMessage"/> will be called when the player receives the <see cref="CustomItem"/> or not.</param>
        public static void ResetInventory(this Player player, List <string> newItems, bool displayMessage = false)
        {
            foreach (Item item in player.Items)
            {
                if (CustomItem.TryGet(item, out CustomItem customItem))
                {
                    customItem.TrackedSerials.Remove(item.Serial);
                }
            }

            player.ClearInventory();

            foreach (string item in newItems)
            {
                if (Enum.TryParse(item, true, out ItemType parsedItem))
                {
                    player.AddItem(parsedItem);
                }
                else if (!CustomItem.TryGive(player, item, displayMessage))
                {
                    Log.Debug($"\"{item}\" is not a valid item name, nor a custom item name.", CustomItems.Instance.Config.Debug);
                }
            }
        }
Example #5
0
        public void Server_SendingConsoleCommand(Exiled.Events.EventArgs.SendingConsoleCommandEventArgs ev)
        {
            switch (ev.Name.ToUpper())
            {
            case "GAMESTORE":
                ev.IsAllowed = false;
                if (ev.Arguments.Count == 0)
                {
                    ev.Player.SendConsoleMessage(Config.messages["GAMESTORE_CMD"].Replace("%bal%", $"{ecoController.GetPlayerBalance(ev.Player)}"), "green");
                }
                else if (ev.Arguments.Count == 1)
                {
                    switch (ev.Arguments[0].ToUpper())
                    {
                    case "BALANCE":
                    case "BAL":
                        ev.Player.SendConsoleMessage(Config.messages["BALANCE_CMD"].Replace("%bal%", $"{ecoController.GetPlayerBalance(ev.Player)}"), "green");
                        break;

                    case "BUY":
                        ev.Player.SendConsoleMessage(Config.messages["BUY_LIST_CMD"], "green");
                        var cats3 = Config.categories.Where(p => p.Value.restrictedTeam != Team.RIP && p.Value.restrictedTeam != ev.Player.Team).ToList();
                        if (cats3.Count == 0)
                        {
                            ev.Player.SendConsoleMessage(Config.messages["BUY_LIST_ITEM_EMPTY_CMD"], "green");
                        }
                        else
                        {
                            foreach (var cat in cats3)
                            {
                                ev.Player.SendConsoleMessage(Config.messages["BUY_LIST_ITEM_CMD"].Replace("%categoryid%", $"{cat.Key}").Replace("%categoryname%", cat.Value.CategoryName).Replace("%categorydesc%", cat.Value.CategoryDescription), "green");
                            }
                        }
                        ev.Player.SendConsoleMessage(Config.messages["BUY_LIST_FOOTER_CMD"], "green");
                        break;
                    }
                }
                else if (ev.Arguments.Count == 2)
                {
                    switch (ev.Arguments[0].ToUpper())
                    {
                    case "BUY":
                        if (int.TryParse(ev.Arguments[1], out int categoryId))
                        {
                            foreach (var cat in Config.categories)
                            {
                                if (cat.Key == categoryId)
                                {
                                    if (cat.Value.BuyableItems.Count == 0)
                                    {
                                        ev.Player.SendConsoleMessage(Config.messages["BUY_CATEGORY_EMPTY_CMD"], "green");
                                        return;
                                    }
                                    ev.Player.SendConsoleMessage(Config.messages["BUY_CATEGORY_CMD"].Replace("%categoryname%", cat.Value.CategoryName), "green");
                                    foreach (var item in cat.Value.BuyableItems)
                                    {
                                        ev.Player.SendConsoleMessage(Config.messages["BUY_CATEGORY_ITEM_CMD"].Replace("%itemid%", $"{item.Key}").Replace("%itemname%", item.Value.ItemName).Replace("%itemprice%", $"{item.Value.CoinsCost}").Replace("%itemdesc%", item.Value.ItemDesc), "green");
                                    }
                                    ev.Player.SendConsoleMessage(Config.messages["BUY_CATEGORY_FOOTER_CMD"].Replace("%categoryid%", $"{cat.Key}"), "green");
                                    return;
                                }
                            }
                            List <string> cats = new List <string>();
                            foreach (var t in Config.categories)
                            {
                                cats.Add($"[{t.Key}] {t.Value.CategoryName}");
                            }
                            ev.Player.SendConsoleMessage(Config.messages["BUY_CATEGORY_NOTFOUND_CMD"].Replace("%id%", $"{categoryId}").Replace("%categories%", string.Join(", ", cats)), "green");
                        }
                        else
                        {
                            ev.Player.SendConsoleMessage(Config.messages["BUY_CATEGORY_SYNTAX_CMD"], "green");
                        }
                        break;
                    }
                }
                else if (ev.Arguments.Count == 3)
                {
                    switch (ev.Arguments[0].ToUpper())
                    {
                    case "BUY":
                        if (int.TryParse(ev.Arguments[1], out int categoryId))
                        {
                            if (int.TryParse(ev.Arguments[2], out int itemId))
                            {
                                foreach (var cat in Config.categories)
                                {
                                    if (cat.Key == categoryId)
                                    {
                                        if (cat.Value.restrictedTeam != Team.RIP && cat.Value.restrictedTeam != ev.Player.Team)
                                        {
                                            foreach (var item in cat.Value.BuyableItems)
                                            {
                                                if (item.Key == itemId)
                                                {
                                                    if (item.Value.MaxPerRound != plugin.GetUsesLeft(ev.Player, categoryId, itemId))
                                                    {
                                                        if (ecoController.GetPlayerBalance(ev.Player) >= item.Value.CoinsCost)
                                                        {
                                                            plugin.UsesLeftAdd(ev.Player, categoryId, itemId);
                                                            ecoController.RemovePlayerBalance(ev.Player, item.Value.CoinsCost);
                                                            if (Config.rewards.ContainsKey(item.Value.RewardName))
                                                            {
                                                                var reward = Config.rewards[item.Value.RewardName];

                                                                foreach (var itemReward in reward.Items)
                                                                {
                                                                    if (plugin.IsInChance(itemReward.Chance))
                                                                    {
                                                                        if (itemReward.ClassRole != RoleType.None)
                                                                        {
                                                                            if (itemReward.InventorySetup.Count != 0)
                                                                            {
                                                                                ev.Player.SessionVariables.Add("STP", itemReward.InventorySetup);
                                                                            }
                                                                            ev.Player.Role = itemReward.ClassRole;
                                                                        }
                                                                        else
                                                                        {
                                                                            if (itemReward.HPAmount != -1)
                                                                            {
                                                                                ev.Player.Health = itemReward.HPAmount;
                                                                            }
                                                                            if (itemReward.InventorySetup.Count != 0)
                                                                            {
                                                                                ev.Player.ClearInventory();
                                                                                foreach (var item4 in itemReward.InventorySetup)
                                                                                {
                                                                                    ev.Player.AddItem(item4);
                                                                                }
                                                                            }
                                                                        }
                                                                        if (itemReward.AmmoSetup.Count != 0)
                                                                        {
                                                                            foreach (var ammo in itemReward.AmmoSetup)
                                                                            {
                                                                                ev.Player.Ammo[(int)ammo.Key] = ammo.Value;
                                                                            }
                                                                        }
                                                                        if (itemReward.HPAmount != -1 && itemReward.ClassRole != RoleType.None)
                                                                        {
                                                                            ev.Player.MaxHealth = (int)itemReward.HPAmount;
                                                                            ev.Player.Health    = itemReward.HPAmount;
                                                                        }
                                                                        for (int x = 0; x < itemReward.Amount; x++)
                                                                        {
                                                                            if (itemReward.CustomItemID != -1)
                                                                            {
                                                                                try
                                                                                {
                                                                                    CustomItem.TryGive(ev.Player, itemReward.CustomItemID);
                                                                                }
                                                                                catch (Exception)
                                                                                {
                                                                                    Log.Info("Failed to give player customitem, Exiled.Customitems not installed");
                                                                                }
                                                                            }
                                                                            else if (!string.IsNullOrEmpty(itemReward.CustomReward))
                                                                            {
                                                                                switch (itemReward.CustomReward)
                                                                                {
                                                                                case "CONTRACT":
                                                                                    var playersuserids = Player.List.Where(p => p.UserId != ev.Player.UserId && p.Team != ev.Player.Team && p.Team != Team.RIP).SelectMany(p2 => p2.UserId).ToList();
                                                                                    var us             = playersuserids[UnityEngine.Random.Range(0, playersuserids.Count - 1)];
                                                                                    var targetPlayer   = Player.Get(us);
                                                                                    if (targetPlayer != null)
                                                                                    {
                                                                                        ev.Player.SendConsoleMessage(Config.messages["BUY_CONTRACT_CMD"].Replace("%playername%", targetPlayer.Nickname), "green");
                                                                                        ev.Player.Broadcast(item.Value.BroadcastTime, Config.messages["BUY_CONTRACT_BC"].Replace("%playername%", targetPlayer.Nickname));
                                                                                        targetPlayer.SendConsoleMessage(Config.messages["BUY_CONTRACT_TARGET_CMD"].Replace("%playername%", targetPlayer.Nickname), "green");
                                                                                        targetPlayer.Broadcast(item.Value.BroadcastTime, Config.messages["BUY_CONTRACT_TARGET_BC"].Replace("%playername%", ev.Player.Nickname));
                                                                                    }
                                                                                    break;
                                                                                }
                                                                            }
                                                                            else if (itemReward.ItemType != ItemType.None)
                                                                            {
                                                                                ev.Player.AddItem(new Inventory.SyncItemInfo()
                                                                                {
                                                                                    durability = 30f,
                                                                                    id         = itemReward.ItemType,
                                                                                    modBarrel  = itemReward.WeaponMods.Barrel,
                                                                                    modSight   = itemReward.WeaponMods.Sight,
                                                                                    modOther   = itemReward.WeaponMods.Other
                                                                                });
                                                                            }
                                                                        }
                                                                    }
                                                                }
                                                            }
                                                            if (item.Value.SendBroadcastAfterBuy)
                                                            {
                                                                ev.Player.Broadcast(item.Value.BroadcastTime, Config.messages["BUY_ITEM_BC"].Replace("%itemprice%", $"{item.Value.CoinsCost}").Replace("%itemname%", item.Value.ItemName).Replace("%playeritemlimit%", $"{plugin.GetUsesLeft(ev.Player, categoryId, itemId)}").Replace("%itemlimit%", $"{item.Value.MaxPerRound}"), Broadcast.BroadcastFlags.Normal);
                                                            }
                                                            ev.Player.SendConsoleMessage(Config.messages["BUY_ITEM_CMD"].Replace("%itemprice%", $"{item.Value.CoinsCost}").Replace("%itemname%", item.Value.ItemName).Replace("%playeritemlimit%", $"{plugin.GetUsesLeft(ev.Player, categoryId, itemId)}").Replace("%itemlimit%", $"{item.Value.MaxPerRound}"), "green");
                                                        }
                                                        else
                                                        {
                                                            ev.Player.SendConsoleMessage(Config.messages["BUY_ITEM_MISSINGMONEY_CMD"].Replace("%itemprice%", $"{item.Value.CoinsCost}").Replace("%itemname%", item.Value.ItemName).Replace("%bal%", $"{ecoController.GetPlayerBalance(ev.Player)}"), "green");
                                                        }
                                                    }
                                                    else
                                                    {
                                                        ev.Player.SendConsoleMessage(Config.messages["BUY_ITEM_LIMIT_CMD"].Replace("%itemname%", item.Value.ItemName).Replace("%itemlimit%", $"{item.Value.MaxPerRound}"), "green");
                                                    }
                                                    return;
                                                }
                                            }
                                            List <string> its = new List <string>();
                                            foreach (var t in Config.categories[categoryId].BuyableItems)
                                            {
                                                its.Add($"[{t.Key}] {t.Value.ItemName}");
                                            }
                                            ev.Player.SendConsoleMessage(Config.messages["BUY_ITEM_NOTFOUND_CMD"].Replace("%itemid%", $"{itemId}").Replace("%items%", string.Join(", ", its)), "green");
                                            return;
                                        }
                                        else
                                        {
                                            ev.Player.SendConsoleMessage(Config.messages["BUY_ITEM_RESTRICTED_CMD"].Replace("%classname%", $"{ev.Player.Role}"), "green");
                                            return;
                                        }
                                    }
                                }
                                List <string> cats = new List <string>();
                                foreach (var t in Config.categories)
                                {
                                    cats.Add($"[{t.Key}] {t.Value.CategoryName}");
                                }
                                ev.Player.SendConsoleMessage(Config.messages["BUY_CATEGORY_NOTFOUND_CMD"].Replace("%id%", $"{categoryId}").Replace("%categories%", string.Join(", ", cats)), "green");
                            }
                            else
                            {
                                ev.Player.SendConsoleMessage(Config.messages["BUY_ITEM_SYNTAX_CMD"], "green");
                            }
                        }
                        else
                        {
                            ev.Player.SendConsoleMessage(Config.messages["BUY_ITEM_SYNTAX_CMD"], "green");
                        }
                        break;
                    }
                }
                break;

            case "BALANCE":
            case "BAL":
                ev.IsAllowed = false;
                ev.Player.SendConsoleMessage(Config.messages["BALANCE_CMD"].Replace("%bal%", $"{ecoController.GetPlayerBalance(ev.Player)}"), "green");
                break;
            }
        }