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; } }
/// <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); }
// 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); } } }
/// <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); } } }
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; } }