C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using ConVar;
using Newtonsoft.Json;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEngine;
namespace Oxide.Plugins {
[Info("IQCraftSystem", "Mercury", "1.2.12")]
[Description("Convenient crafting system")]
internal class IQCraftSystem : RustPlugin {
private System.Collections.Generic.IEnumerable<Item> EnumerateAllItems(BasePlayer player) {
if (player == null || player.inventory == null) yield break;
var inv = player.inventory;
var containers = new ItemContainer[] {
inv.containerMain, inv.containerBelt, inv.containerWear
}
;
foreach (var c in containers) {
var list = c == null ? null : c.itemList;
if (list == null) continue;
for (int i = 0; i < list.Count; i++) {
var it = list[i];
if (it != null) yield return it;
}
}
}
/// <summary>
/// Обновление 1.2.12
/// - Исправление после обновления игры
private const Boolean LanguageEn = true;
#region Reference
[PluginReference]
private readonly Plugin ImageLibrary, IQEconomic, IQPlagueSkill, IQRankSystem, IQChat, Economics, IQTurret;
#region IQChat
public void SendChat(BasePlayer player, String Message, Chat.ChatChannel channel = Chat.ChatChannel.Global) {
Configuration.ReferencePlugin.ChatSettings Chat = config.ReferencePlugins.chatSettings;
if (IQChat) IQChat?.Call("API_ALERT_PLAYER", player, Message, Chat.CustomPrefix, Chat.CustomAvatar);
else player.SendConsoleCommand("chat.add", channel, 0, Message);
}
#endregion
#region ImageLibrary
private String GetImage(String fileName, UInt64 skin = 0) {
String imageId = (String)plugins.Find("ImageLibrary").CallHook("GetImage", fileName, skin);
if (!String.IsNullOrEmpty(imageId)) return imageId;
return String.Empty;
}
public Boolean AddImage(String url, String shortname, UInt64 skin = 0) {
return (Boolean)ImageLibrary?.Call("AddImage", url, shortname, skin);
}
public void SendImage(BasePlayer player, String imageName, UInt64 imageId = 0) {
ImageLibrary?.Call("SendImage", player, imageName, imageId);
}
public Boolean HasImage(String imageName) {
return (Boolean)ImageLibrary?.Call("HasImage", imageName);
}
#endregion
#region IQEconomic
private Int32 GetBalance(UInt64 userID) {
if (IQEconomic != null) return (Int32)IQEconomic?.Call("API_GET_BALANCE", userID);
else if (Economics != null) return Convert.ToInt32((Double)Economics?.Call("Balance", userID));
return 0;
}
private Boolean IsRemovedBalance(UInt64 userID, Int32 Amount) {
if (IQEconomic != null) return (Boolean)IQEconomic?.Call("API_IS_REMOVED_BALANCE", userID, Amount);
else if (Economics != null) return GetBalance(userID) >= Amount;
return false;
}
private void RemoveBalance(UInt64 userID, Int32 Balance) {
if (IQEconomic != null) IQEconomic?.Call("API_REMOVE_BALANCE", userID, Balance);
else if (Economics != null) Economics?.Call("Withdraw", userID, Convert.ToDouble(Balance));
}
#endregion
#region IQPlagueSkill
private Boolean IQPlagueSkillISAdvanced(BasePlayer player) {
return (Boolean)IQPlagueSkill?.Call("API_IS_ADVANCED_CRAFT", player);
}
#endregion
#region IQRankSystem
private Boolean IQRankSystemAvaliability(BasePlayer player, String RankKey) {
return (Boolean)IQRankSystem?.Call("API_GET_AVAILABILITY_RANK_USER", player.userID, RankKey);
}
private String IQRankSystemGetName(String RankKey) {
return (String)IQRankSystem?.Call("API_GET_RANK_NAME", RankKey);
}
private Boolean IQRankRankReality(String RankKey) {
return (Boolean)IQRankSystem?.Call("API_IS_RANK_REALITY", RankKey);
}
#endregion
#endregion
#region Vars
private readonly String CustomItemShortname = "box.wooden";
public Dictionary<UInt64, Int32> HealthCustom = new Dictionary<UInt64, Int32>();
public Dictionary<BasePlayer, Int32> PagePlayers = new Dictionary<BasePlayer, Int32>();
private readonly Dictionary<BasePlayer, CategoryItem> CategoryActive = new Dictionary<BasePlayer, CategoryItem>();
public enum CategoryItem {
Weapon, Tools, Construction, Items, Attirie, Electrical, Transport, Fun, Custom, Entity, All
}
#endregion
#region Data
[JsonProperty(LanguageEn ? "Craft Information" : "Информация о крафте")]
public Hash<UInt64, DataCraft> DataCrafts = new Hash<UInt64, DataCraft>();
public class DataCraft {
[JsonProperty(LanguageEn ? "Item Information" : "Информация о предметах")]
public Dictionary<String, Int32> CooldownCraft = new Dictionary<String, Int32>();
}
private void ReadData() {
DataCrafts = Oxide.Core.Interface.Oxide.DataFileSystem.ReadObject<Hash<UInt64, DataCraft>>("IQCraftSystem/CraftUsers");
HealthCustom = Oxide.Core.Interface.Oxide.DataFileSystem.ReadObject<Dictionary<UInt64, Int32>>("IQCraftSystem/CraftHealth");
}
private void WriteData() {
Oxide.Core.Interface.Oxide.DataFileSystem.WriteObject("IQCraftSystem/CraftUsers", DataCrafts);
Oxide.Core.Interface.Oxide.DataFileSystem.WriteObject("IQCraftSystem/CraftHealth", HealthCustom);
}
private void RegisteredDataUser(UInt64 player) {
Boolean IsUsedCooldonw = config.ItemSetting.Count(x => x.Value.Cooldown > 0) != 0;
if (!IsUsedCooldonw) return;
if (!DataCrafts.ContainsKey(player)) DataCrafts.Add(player, new DataCraft {
CooldownCraft = new Dictionary<String, Int32> {
}
}
);
}
#endregion
#region Configuration
private static Configuration config = new Configuration();
private class Configuration {
[JsonProperty(LanguageEn ? "Plugin interface customization" : "Настройка интерфейса плагина")]
public InterfaceSettings InterfaceSetting = new InterfaceSettings();
[JsonProperty(LanguageEn ? "Setting up compatible plugins" : "Настройка совместимых плагинов")]
public ReferencePlugin ReferencePlugins = new ReferencePlugin();
[JsonProperty(LanguageEn ? "Customization of items that can be crafted" : "Настройка предметов, которые возможно скрафтить")]
public Dictionary<String, ItemSettings> ItemSetting = new Dictionary<String, ItemSettings>();
#region ItemSettings
internal class ItemSettings {
[JsonProperty(LanguageEn ? "Cooldown for crafting an item (If it is not needed, set the value to 0" : "Перезарядка на крафт предмета (Если она не нужна, поставьте значение 0")]
public Int32 Cooldown;
[JsonProperty(LanguageEn ? "Permissions to access this craft (leave the field blank - it will be available to everyone)" : "Права для доступа к этому крафту (оставьте поле пустым - будет доступно всем)")]
public String Permission;
[JsonProperty(LanguageEn ? "What category does this item belong to: 0 - Weapons, 1 - Tools, 2 - Structures, 3 - Items, 4 - Clothing, 5 - Electricity, 6 - Vehicles, 7 - Fun, 8 - Custom (commands), 9 - Other ( Crafts prefabs and items like Recycler)" : "К какой категории относится данный предмет : 0 - Оружие, 1 - Инструменты, 2 - Конструкции, 3 - Итемы, 4 - Одежда, 5 - Электричество, 6 - Транспорт, 7 - Фановые, 8 - Кастомные(команды), 9 - Иные(Крафтит префабы и предметы по типу Переработчика)")]
public CategoryItem CategoryItems;
[JsonProperty(LanguageEn ? "Display name" : "Отображаемое имя")]
public String DisplayName;
[JsonProperty(LanguageEn ? "Description (Optional)" : "Описание (Необязательно)")]
public String Description;
[JsonProperty(LanguageEn ? "Number of items" : "Количество предметов")]
public Int32 AmountCraft;
[JsonProperty(LanguageEn ? "Item HP (Suitable for category: 9 - Other (Crafts prefabs and items like Refiner) and 6 - Vehicles)" : "ХП предмета (Подходит к категории : 9 - Иные(Крафтит префабы и предметы по типу Переработчика) и 6 - Транспорт)")]
public Int32 HealthItem;
[JsonProperty(LanguageEn ? "The ability to pick up an item in inventory (true - yes / false - no) (Suitable for category: 9 - Other(Crafts prefabs and items like Recycler))" : "Возможность забрать предмет в инвентарь (true - да/false - нет) (Подходит к категории : 9 - Иные(Крафтит префабы и предметы по типу Переработчика))")]
public Boolean UsePickUp;
[JsonProperty(LanguageEn ? "Shortname (Suitable for all categories EXCEPT: 6 - Vehicles and 8 - Custom (commands) and 9 - Others (Crafts prefabs and items like Recycler)" : "Shortname (Подходит ко всем категориям КРОМЕ : 6 - Транспорт и 8 - Кастомные(команды) и 9 - Иные(Крафтит префабы и предметы по типу Переработчика)")]
public String Shortname;
[JsonProperty(LanguageEn ? "Skin ID (Suitable for all categories (If you use category 6 - Transport or - 9 - Other, be sure to set the Skin ID for the icon)" : "SkinID (Подходит ко всем категориям (Если вы используете категорию 6 - Транспорт или - 9 - Иные , обязательно устанавливайте SkinID для иконки)")]
public UInt64 SkinID;
[JsonProperty(LanguageEn ? "PNG (Only suitable for the category: 6 - Vehicles and 8 - Custom (commands) and 9 - Others (Crafts prefabs and items like Recycler))" : "PNG (Подходит только к категории : 6 - Транспорт и 8 - Кастомные(команды) и 9 - Иные(Крафтит префабы и предметы по типу Переработчика))")]
public String PNG;
[JsonProperty(LanguageEn ? "Team (Only applies to category: 8 - Custom (teams) %STEAMID% - will be replaced by the player's Steam64ID)" : "Команда (Подходит только к категории : 8 - Кастомные(команды) %STEAMID% - заменится на Steam64ID игрока)")]
public String Command;
[JsonProperty(LanguageEn ? "Vehicle prefab (Only applies to category 6 - Vehicles)" : "Префаб для транспорта (Подходит только к категории 6 - Транспорт)")]
public String PrefabNameTransport;
[JsonProperty(LanguageEn ? "Prefab for items (Only suitable for category 9 - Other (Crafts prefabs and items like Recycler))" : "Префаб для предметов (Подходит только к категории 9 - Иные(Крафтит префабы и предметы по типу Переработчика))")]
public String PrefabEntity;
[JsonProperty(LanguageEn ? "What level of workbench is required for crafting, if no workbench is required, set to 0" : "Какой уровень верстака требуется для крафта нужен, если верстак не требуется, установите 0")]
public Int32 WorkBenchLevel;
[JsonProperty(LanguageEn ? "IQEconomic/Economics : How much currency is required to craft this item (Set to 0 if not required)" : "IQEconomic/Economics : Сколько требуется валюты для крафта данного предмета(Устновите 0 если не требуется)")]
public Int32 IQEconomicPrice;
[JsonProperty(LanguageEn ? "IQPlague Skill : Whether a neutral IQPlague Skill is required to craft this item (true - yes/false - no)" : "IQPlagueSkill : Требуется ли нейтральный навык в IQPlagueSkill для крафта данного предмета(true - да/false - нет)")]
public Boolean IQPlagueSkillCraft;
[JsonProperty(LanguageEn ? "IQRank System : Specify the rank required to craft this item (Leave blank if not required)" : "IQRankSystem : Укажите ранг, который требуется для крафта данного предмета(Если не нужно, оставьте поле пустым)")]
public String IQRankSystemRank;
[JsonProperty(LanguageEn ? "List of items required for crafting" : "Список предметов требующихся для крафта")]
public List<ItemForCraft> ItemListForCraft = new List<ItemForCraft>();
internal class ItemForCraft {
[JsonProperty("Shortname")]
public String Shortname;
[JsonProperty(LanguageEn ? "Amount" : "Количество")]
public Int32 Amount;
[JsonProperty(LanguageEn ? "Skin ID if required" : "SkinID если требуется")]
public UInt64 SkinID;
[JsonProperty(LanguageEn ? "PNG for custom items (don't forget to set Skin ID)" : "PNG для кастомных предметов (не забудьте установить SkinID)")]
public String PNG;
}
}
#endregion
#region Interface
internal class InterfaceSettings {
[JsonProperty(LanguageEn ? "General settings" : "Основные настройки")]
public GeneralSettings GeneralSetting = new GeneralSettings();
[JsonProperty(LanguageEn ? "Category settings" : "Настройка категорий")]
public CategorySettings CategorySetting = new CategorySettings();
[JsonProperty(LanguageEn ? "Requirements setup" : "Настройка требований")]
public RequiresSettings RequiresSetting = new RequiresSettings();
internal class GeneralSettings {
[JsonProperty(LanguageEn ? "Link to the picture of the selected item" : "Ссылка на картинку выбранного предмета")]
public String PNGActive;
[JsonProperty(LanguageEn ? "Link to a picture of an unselected item" : "Ссылка на картинку не выбранного предмета")]
public String PNGInActive;
[JsonProperty(LanguageEn ? "Link to the logo in the crafting menu" : "Ссылка на логотип в меню крафта")]
public String PNGLogo;
[JsonProperty(LanguageEn ? "Link to closing image" : "Ссылка на картинку закрытия")]
public String PNGCloseButton;
[JsonProperty(LanguageEn ? "HEX Main menu background" : "HEX Заднего фона главного меню")]
public String HexBackground;
[JsonProperty(LanguageEn ? "HEX Buttons CREATE" : "HEX Кнопки СОЗДАТЬ")]
public String HexButtonCreate;
}
internal class RequiresSettings {
[JsonProperty(LanguageEn ? "HEX : Color if requirement is met" : "HEX : Цвет если требование выполнено")]
public String RequiresDoTrueColor;
[JsonProperty(LanguageEn ? "HEX : Color if requirement is not met" : "HEX : Цвет если требование не выполнено")]
public String RequiresDoFalseColor;
[JsonProperty(LanguageEn ? "Complied symbol" : "Символ выполненного требования")]
public String RequiresDoTrue;
[JsonProperty(LanguageEn ? "HEX : Color if condition is not required" : "HEX : Цвет если условие не требования")]
public String RequiresDoFalse;
[JsonProperty(LanguageEn ? "PNG : Icon for workbench requirement" : "PNG : Иконка для требования верстака")]
public String PNGRequiresWorckbench;
[JsonProperty(LanguageEn ? "PNG : Icon for currency requirement from IQEconomic" : "PNG : Иконка для требования валюты с IQEconomic")]
public String PNGRequiresIQEconomic;
[JsonProperty(LanguageEn ? "PNG : Icon for rank requirement from IQRank System" : "PNG : Иконка для требования ранга с IQRankSystem")]
public String PNGRequiresIQRankSystem;
[JsonProperty(LanguageEn ? "PNG : Icon for skill requirement with IQPlague Skill" : "PNG : Иконка для требования навыка с IQPlagueSkill")]
public String PNGRequiresIQPlagueSkill;
}
internal class CategorySettings {
[JsonProperty(LanguageEn ? "Adjusting the colors of unselected icons for each category" : "Настройка цветов не выбранных иконок под каждую категорию")]
public ColorCategoryIcon ColorCategoryIcons = new ColorCategoryIcon();
[JsonProperty(LanguageEn ? "Customize PNG category icons" : "Настройка PNG иконок категорий")]
public PNGCategoryIcon PNGCategoryIcons = new PNGCategoryIcon();
[JsonProperty(LanguageEn ? "Enabling and disabling categories" : "Включения и отключения категорий")]
public TurnedCategory TurnedCategorys = new TurnedCategory();
internal class PNGCategoryIcon {
[JsonProperty(LanguageEn ? "PNG : All items category icon" : "PNG : Иконка категории всех предметов")]
public String PNGAll;
[JsonProperty(LanguageEn ? "PNG : Weapon category icon" : "PNG : Иконка категории оружия")]
public String PNGWeapon;
[JsonProperty(LanguageEn ? "PNG : Tools category icon" : "PNG : Иконка категории инструментов")]
public String PNGTools;
[JsonProperty(LanguageEn ? "PNG : Design category icon" : "PNG : Иконка категории конструкций")]
public String PNGConstruction;
[JsonProperty(LanguageEn ? "PNG : Item category icon" : "PNG : Иконка категории предметов")]
public String PNGItems;
[JsonProperty(LanguageEn ? "PNG : Clothing category icon" : "PNG : Иконка категории одежды")]
public String PNGAttirie;
[JsonProperty(LanguageEn ? "PNG : Electrical category icon" : "PNG : Иконка категории электрики")]
public String PNGElectrical;
[JsonProperty(LanguageEn ? "PNG : Transport category icon" : "PNG : Иконка категории транспорта")]
public String PNGTransport;
[JsonProperty(LanguageEn ? "PNG : Fun category icon" : "PNG : Иконка категории фана")]
public String PNGFun;
[JsonProperty(LanguageEn ? "PNG : Custom item icon" : "PNG : Иконка кастомных предметов")]
public String PNGCustom;
}
internal class ColorCategoryIcon {
[JsonProperty(LanguageEn ? "HEX : The color of the panel with the item category of all items" : "HEX : Цвет панели с предметом категории всех предметов")]
public String AllItemsColor;
[JsonProperty(LanguageEn ? "HEX : The color of the item panel of the weapon category" : "HEX : Цвет панели с предметом категории оружий")]
public String WeaponColor;
[JsonProperty(LanguageEn ? "HEX : Color of toolbar item" : "HEX : Цвет панели с предметом категории интсрументов")]
public String ToolsColor;
[JsonProperty(LanguageEn ? "HEX : Color bar with item category designs" : "HEX : Цвет панели с предметом категории конструкций")]
public String ConstructionColor;
[JsonProperty(LanguageEn ? "HEX : The color of the bar with the subject of the item category" : "HEX : Цвет панели с предметом категории предметов")]
public String ItemsColor;
[JsonProperty(LanguageEn ? "HEX : The color of the bar with the garment category item" : "HEX : Цвет панели с предметом категории одежды")]
public String AttirieColor;
[JsonProperty(LanguageEn ? "HEX : The color of the panel with the electrical category item" : "HEX : Цвет панели с предметом категории электрики")]
public String ElectricalColor;
[JsonProperty(LanguageEn ? "HEX : The color of the vehicle category item bar" : "HEX : Цвет панели с предметом категории транспорта")]
public String TransportColor;
[JsonProperty(LanguageEn ? "HEX : The color of the panel with the fan category item" : "HEX : Цвет панели с предметом категории фана")]
public String FunColor;
[JsonProperty(LanguageEn ? "HEX : Custom item bar color" : "HEX : Цвет панели с предметом категории кастомных предметов")]
public String CustomColor;
}
internal class TurnedCategory {
[JsonProperty(LanguageEn ? "Enable weapon category" : "Включить категорию оружие")]
public Boolean TurnWeapon;
[JsonProperty(LanguageEn ? "Enable tool categories" : "Включить категории инструментов")]
public Boolean TurnTools;
[JsonProperty(LanguageEn ? "Enable design categories" : "Включить категории конструкций")]
public Boolean TurnConstruction;
[JsonProperty(LanguageEn ? "Enable item categories" : "Включить категории предметов")]
public Boolean TurnItems;
[JsonProperty(LanguageEn ? "Enable clothing categories" : "Включить категории одежды")]
public Boolean TurnAttirie;
[JsonProperty(LanguageEn ? "Enable electrical categories" : "Включить категории электрики")]
public Boolean TurnElectrical;
[JsonProperty(LanguageEn ? "Enable transport categories" : "Включить категории транспорта")]
public Boolean TurnTransport;
[JsonProperty(LanguageEn ? "Enable fun categories" : "Включить категории фана")]
public Boolean TurnFun;
[JsonProperty(LanguageEn ? "Enable custom items" : "Включить кастомных предметов")]
public Boolean TurnCustom;
}
}
}
#endregion
internal class ReferencePlugin {
[JsonProperty(LanguageEn ? "IQChat : Setting up a chat" : "IQChat : Настройка чата")]
public ChatSettings chatSettings = new ChatSettings();
internal class ChatSettings {
[JsonProperty(LanguageEn ? "IQChat : Custom prefix in the chat" : "IQChat : Кастомный префикс в чате")]
public String CustomPrefix = "[IQCraftSystem]";
[JsonProperty(LanguageEn ? "IQChat : Custom avatar in the chat(If required)" : "IQChat : Кастомный аватар в чате(Если требуется)")]
public String CustomAvatar = "0";
}
}
public static Configuration GetNewConfiguration() {
return new Configuration {
#region Interface
InterfaceSetting = new InterfaceSettings {
GeneralSetting = new InterfaceSettings.GeneralSettings {
PNGActive = "https://i.imgur.com/46KFe3X.png", PNGInActive = "https://i.imgur.com/31iuKXn.png", PNGLogo = "https://i.imgur.com/K29MfYR.png", PNGCloseButton = "https://i.imgur.com/mirRxLy.png", HexBackground = "#0C0C0C95", HexButtonCreate = "#C35F2FFF",
}
, RequiresSetting = new InterfaceSettings.RequiresSettings {
RequiresDoFalse = "×", RequiresDoTrue = "✓", RequiresDoFalseColor = "#FF3366", RequiresDoTrueColor = "#CCFFCC", PNGRequiresIQEconomic = "https://i.imgur.com/q0UjhJJ.png", PNGRequiresIQPlagueSkill = "https://i.imgur.com/f3isgi4.png", PNGRequiresIQRankSystem = "https://i.imgur.com/0ZFPmrZ.png", PNGRequiresWorckbench = "https://i.imgur.com/bxG5ofY.png",
}
, CategorySetting = new InterfaceSettings.CategorySettings {
PNGCategoryIcons = new InterfaceSettings.CategorySettings.PNGCategoryIcon {
PNGAll = "https://i.imgur.com/V1dUiuy.png", PNGWeapon = "https://i.imgur.com/XwDBNoW.png", PNGAttirie = "https://i.imgur.com/F25qevg.png", PNGConstruction = "https://i.imgur.com/WPG9YMb.png", PNGCustom = "https://i.imgur.com/jyobxIs.png", PNGElectrical = "https://i.imgur.com/7bYVThO.png", PNGFun = "https://i.imgur.com/iWQLRa5.png", PNGItems = "https://i.imgur.com/Rucen7r.png", PNGTools = "https://i.imgur.com/XJzPl6z.png", PNGTransport = "https://i.imgur.com/M9BsGiI.png",
}
, ColorCategoryIcons = new InterfaceSettings.CategorySettings.ColorCategoryIcon {
AllItemsColor = "#DECADEFF", AttirieColor = "#59A27AFF", ConstructionColor = "#B4D455FF", CustomColor = "#9077E2FF", ElectricalColor = "#00DDDDFF", FunColor = "#FFAABBFF", ItemsColor = "#FF2288FF", ToolsColor = "#EE3B00FF", TransportColor = "#D395FFFF", WeaponColor = "#7F4EFFFF",
}
,
}
,
}
,
#endregion
#region ItemSetting
ItemSetting = new Dictionary<String, ItemSettings> {
["ak47"]
= new ItemSettings {
CategoryItems = CategoryItem.Weapon, Permission = "iqcraftsystem.ak47", Cooldown = 0, Command = "", AmountCraft = 1, Description = LanguageEn ? "A good weapon for shooting at long and medium distances" : "Хорошее оружие для стрельбы на дальние и средние дистанции", DisplayName = "АК-47", PNG = "", HealthItem = 0, UsePickUp = false, PrefabEntity = "", PrefabNameTransport = "", Shortname = "rifle.ak", SkinID = 0, WorkBenchLevel = 0, IQEconomicPrice = 0, IQRankSystemRank = "", IQPlagueSkillCraft = false, ItemListForCraft = new List<ItemSettings.ItemForCraft> {
new ItemSettings.ItemForCraft {
Shortname = "wood", Amount = 500, PNG = "", SkinID = 0
}
, new ItemSettings.ItemForCraft {
Shortname = "scrap", Amount = 15, PNG = "", SkinID = 0
}
, new ItemSettings.ItemForCraft {
Shortname = "explosives", Amount = 1, PNG = "", SkinID = 0
}
, new ItemSettings.ItemForCraft {
Shortname = "metal.refined", Amount = 100, PNG = "", SkinID = 0
}
,
}
}
, ["jackhammer"] = new ItemSettings {
CategoryItems = CategoryItem.Tools, Permission = "", Cooldown = 5000, Command = "", Description = "", AmountCraft = 1, DisplayName = "Jackhammer", PNG = "", HealthItem = 0, UsePickUp = false, PrefabEntity = "", PrefabNameTransport = "", Shortname = "jackhammer", SkinID = 0, WorkBenchLevel = 1, IQEconomicPrice = 0, IQRankSystemRank = "", IQPlagueSkillCraft = false, ItemListForCraft = new List<ItemSettings.ItemForCraft> {
new ItemSettings.ItemForCraft {
Shortname = "wood", Amount = 500, PNG = "", SkinID = 0
}
, new ItemSettings.ItemForCraft {
Shortname = "scrap", Amount = 15, PNG = "", SkinID = 0
}
, new ItemSettings.ItemForCraft {
Shortname = "explosives", Amount = 1, PNG = "", SkinID = 0
}
, new ItemSettings.ItemForCraft {
Shortname = "metal.refined", Amount = 100, PNG = "", SkinID = 0
}
,
}
}
, ["hazmatsuit"] = new ItemSettings {
CategoryItems = CategoryItem.Attirie, Permission = "", Cooldown = 0, Command = "", AmountCraft = 1, Description = "", HealthItem = 0, UsePickUp = false, DisplayName = LanguageEn ? "Hazmatsuit" : "Хазмат", PNG = "", PrefabEntity = "", PrefabNameTransport = "", Shortname = "hazmatsuit", SkinID = 0, WorkBenchLevel = 3, IQEconomicPrice = 0, IQRankSystemRank = "", IQPlagueSkillCraft = false, ItemListForCraft = new List<ItemSettings.ItemForCraft> {
new ItemSettings.ItemForCraft {
Shortname = "metal.refined", Amount = 100, PNG = "", SkinID = 0
}
,
}
}
, ["floor.ladder.hatch"] = new ItemSettings {
CategoryItems = CategoryItem.Construction, Permission = "", Cooldown = 0, Command = "", HealthItem = 0, AmountCraft = 1, UsePickUp = false, Description = LanguageEn ? "It's convenient to jump off and not come back" : "Удобно спргынуть и не вернуться", DisplayName = LanguageEn ? "Hatchway" : "Люк", PNG = "", PrefabEntity = "", PrefabNameTransport = "", Shortname = "floor.ladder.hatch", SkinID = 0, WorkBenchLevel = 1, IQEconomicPrice = 0, IQRankSystemRank = "", IQPlagueSkillCraft = false, ItemListForCraft = new List<ItemSettings.ItemForCraft> {
new ItemSettings.ItemForCraft {
Shortname = "metal.refined", Amount = 100, PNG = "", SkinID = 0
}
,
}
}
, ["privilegy3d"] = new ItemSettings {
CategoryItems = CategoryItem.Custom, Permission = "", Cooldown = 0, Command = "say GivePrivilegy", Description = LanguageEn ? "A whole privilege for 3 whole days, the best option" : "Целая привилегия на 3 целых дня, самый лучший вариант", DisplayName = LanguageEn ? "VIP 3 DAYS" : "ПРИВИЛЕГИЯ 3 ДНЯ", PNG = "https://i.imgur.com/vLCj3kO.png", PrefabEntity = "", HealthItem = 0, AmountCraft = 1, UsePickUp = false, PrefabNameTransport = "", Shortname = "", SkinID = 0, WorkBenchLevel = 1, IQEconomicPrice = 0, IQRankSystemRank = "", IQPlagueSkillCraft = false, ItemListForCraft = new List<ItemSettings.ItemForCraft> {
new ItemSettings.ItemForCraft {
Shortname = "metal.refined", Amount = 100, PNG = "", SkinID = 0
}
, new ItemSettings.ItemForCraft {
Shortname = "metal.refined", Amount = 100, PNG = "", SkinID = 0
}
, new ItemSettings.ItemForCraft {
Shortname = "metal.refined", Amount = 100, PNG = "", SkinID = 0
}
, new ItemSettings.ItemForCraft {
Shortname = "metal.refined", Amount = 100, PNG = "", SkinID = 0
}
,
}
}
, ["turret"] = new ItemSettings {
CategoryItems = CategoryItem.Electrical, Permission = "", Cooldown = 0, Command = "", Description = "", DisplayName = LanguageEn ? "Turret" : "Турель", PNG = "", AmountCraft = 1, HealthItem = 0, UsePickUp = false, PrefabEntity = "", PrefabNameTransport = "", Shortname = "autoturret", SkinID = 0, WorkBenchLevel = 1, IQEconomicPrice = 0, IQRankSystemRank = "", IQPlagueSkillCraft = false, ItemListForCraft = new List<ItemSettings.ItemForCraft> {
new ItemSettings.ItemForCraft {
Shortname = "metal.refined", Amount = 100, PNG = "", SkinID = 0
}
,
}
}
, ["tree"] = new ItemSettings {
CategoryItems = CategoryItem.Entity, Permission = "", Cooldown = 0, AmountCraft = 1, Command = "", HealthItem = 100, UsePickUp = true, Description = LanguageEn ? "Take and plant a tree" : "Возьми и всади дерево", DisplayName = LanguageEn ? "Wood" : "Дерево", PNG = "https://i.imgur.com/XnuUmyZ.png", PrefabEntity = "assets/bundled/prefabs/autospawn/resource/v3_temp_forest_pine/pine_a.prefab", PrefabNameTransport = "", Shortname = "", SkinID = 1337, WorkBenchLevel = 1, IQEconomicPrice = 0, IQRankSystemRank = "", IQPlagueSkillCraft = false, ItemListForCraft = new List<ItemSettings.ItemForCraft> {
new ItemSettings.ItemForCraft {
Shortname = "wood", Amount = 100, PNG = "", SkinID = 0
}
,
}
}
, ["firewerk"] = new ItemSettings {
CategoryItems = CategoryItem.Fun, Permission = "", Cooldown = 0, HealthItem = 0, AmountCraft = 1, UsePickUp = false, Command = "", Description = LanguageEn ? "Blow up the sky" : "Взорвик небо", DisplayName = LanguageEn ? "Firework" : "Фейверк", PNG = "", PrefabEntity = "", PrefabNameTransport = "", Shortname = "firework.romancandle.red", SkinID = 0, WorkBenchLevel = 1, IQEconomicPrice = 0, IQRankSystemRank = "", IQPlagueSkillCraft = false, ItemListForCraft = new List<ItemSettings.ItemForCraft> {
new ItemSettings.ItemForCraft {
Shortname = "wood", Amount = 100, PNG = "", SkinID = 0
}
,
}
}
, ["swetilnik"] = new ItemSettings {
CategoryItems = CategoryItem.Items, Permission = "", HealthItem = 0, UsePickUp = false, Cooldown = 0, Command = "", Description = "", AmountCraft = 1, DisplayName = LanguageEn ? "Lamp on the wall" : "Светилка на стенку", PNG = "", PrefabEntity = "", PrefabNameTransport = "", Shortname = "xmas.lightstring", SkinID = 0, WorkBenchLevel = 1, IQEconomicPrice = 0, IQRankSystemRank = "", IQPlagueSkillCraft = false, ItemListForCraft = new List<ItemSettings.ItemForCraft> {
new ItemSettings.ItemForCraft {
Shortname = "wood", Amount = 100, PNG = "", SkinID = 0
}
,
}
}
, ["copter"] = new ItemSettings {
CategoryItems = CategoryItem.Transport, Permission = "", HealthItem = 0, UsePickUp = false, Cooldown = 0, Command = "", AmountCraft = 1, Description = "", DisplayName = LanguageEn ? "Minicopter" : "Коптер", PNG = "https://i.imgur.com/kC8tfXF.png", PrefabEntity = "", PrefabNameTransport = "assets/content/vehicles/minicopter/minicopter.entity.prefab", Shortname = "", SkinID = 3333, WorkBenchLevel = 1, IQEconomicPrice = 0, IQRankSystemRank = "", IQPlagueSkillCraft = false, ItemListForCraft = new List<ItemSettings.ItemForCraft> {
new ItemSettings.ItemForCraft {
Shortname = "wood", Amount = 100, PNG = "", SkinID = 0
}
,
}
}
,
}
,
#endregion
#region Reference Plugins
ReferencePlugins = new ReferencePlugin {
chatSettings = new ReferencePlugin.ChatSettings {
CustomAvatar = "0", CustomPrefix = "[IQCraftSystem]"
}
}
#endregion
}
;
}
}
protected override void LoadConfig() {
base.LoadConfig();
try {
config = Config.ReadObject<Configuration>();
if (config == null) LoadDefaultConfig();
}
catch {
PrintWarning(LanguageEn ? "Error reading #57 configuration 'oxide/config/{Name}', creating a new configuration!!" : $"Ошибка чтения #57 конфигурации 'oxide/config/{Name}', создаём новую конфигурацию!!");
LoadDefaultConfig();
}
NextTick(SaveConfig);
}
protected override void LoadDefaultConfig() {
config = Configuration.GetNewConfiguration();
}
protected override void SaveConfig() {
Config.WriteObject(config);
}
#endregion
#region Metods
#region Cooldown Craft
public void SetCooldown(BasePlayer player, String KeyItem) {
Int32 Cooldown = Convert.ToInt32(config.ItemSetting[KeyItem].Cooldown + CurrentTime());
if (Cooldown - CurrentTime() <= 1) return;
if (!DataCrafts.ContainsKey(player.userID)) RegisteredDataUser(player.userID);
if (!DataCrafts[player.userID].CooldownCraft.ContainsKey(KeyItem)) DataCrafts[player.userID].CooldownCraft.Add(KeyItem, Cooldown);
else DataCrafts[player.userID].CooldownCraft[KeyItem] = Cooldown;
}
public String GetCooldown(BasePlayer player, String KeyItem) {
String ResultCooldown = FormatTime(TimeSpan.FromSeconds(GetCooldownTime(DataCrafts[player.userID].CooldownCraft[KeyItem])), player.UserIDString);
return ResultCooldown;
}
public Boolean IsCooldown(BasePlayer player, String KeyItem) {
if (!DataCrafts.ContainsKey(player.userID)) {
RegisteredDataUser(player.userID);
return false;
}
if (!DataCrafts[player.userID].CooldownCraft.ContainsKey(KeyItem)) return false;
if (GetCooldownTime(DataCrafts[player.userID].CooldownCraft[KeyItem]) > 0) {
return true;
}
else {
DataCrafts[player.userID].CooldownCraft.Remove(KeyItem);
return false;
}
}
public Double GetCooldownTime(Int32 Cooldown) {
return (Cooldown - CurrentTime());
}
private static readonly DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0);
private static Double CurrentTime() {
return DateTime.UtcNow.Subtract(epoch).TotalSeconds;
}
public String FormatTime(TimeSpan time, String UserID) {
String Result = String.Empty;
String Days = GetLang("TITLE_FORMAT_LOCKED_DAYS", UserID);
String Hourse = GetLang("TITLE_FORMAT_LOCKED_HOURSE", UserID);
String Minutes = GetLang("TITLE_FORMAT_LOCKED_MINUTES", UserID);
String Seconds = GetLang("TITLE_FORMAT_LOCKED_SECONDS", UserID);
if (time.Seconds != 0) Result = $"{Format(time.Seconds, Seconds, Seconds, Seconds)}";
if (time.Minutes != 0) Result = $"{Format(time.Minutes, Minutes, Minutes, Minutes)}";
if (time.Hours != 0) Result = $"{Format(time.Hours, Hourse, Hourse, Hourse)}";
if (time.Days != 0) Result = $"{Format(time.Days, Days, Days, Days)}";
return Result;
}
private String Format(Int32 units, String form1, String form2, String form3) {
Int32 tmp = units % 10;
if (units >= 5 && units <= 20 || tmp >= 5 && tmp <= 9) return $"{units}{form1}";
if (tmp >= 2 && tmp <= 4) return $"{units}{form2}";
return $"{units}{form3}";
}
#endregion
#region Loaded Icons
private void LoadedIcon() {
PrintWarning(LanguageEn ? "I start loading icons.." : "Начинаю загрузку иконок..");
Configuration.InterfaceSettings Interface = config.InterfaceSetting;
Configuration.InterfaceSettings.CategorySettings.PNGCategoryIcon Category = Interface.CategorySetting.PNGCategoryIcons;
Dictionary<String, Configuration.ItemSettings> Items = config.ItemSetting;
Configuration.InterfaceSettings.RequiresSettings Requires = Interface.RequiresSetting;
if (!HasImage($"LOGO_{Interface.GeneralSetting.PNGLogo}")) AddImage(Interface.GeneralSetting.PNGLogo, $"LOGO_{Interface.GeneralSetting.PNGLogo}");
if (!HasImage($"ACTIVE_ITEM_{Interface.GeneralSetting.PNGActive}")) AddImage(Interface.GeneralSetting.PNGActive, $"ACTIVE_ITEM_{Interface.GeneralSetting.PNGActive}");
if (!HasImage($"IN_ACTIVE_ITEM_{Interface.GeneralSetting.PNGInActive}")) AddImage(Interface.GeneralSetting.PNGInActive, $"IN_ACTIVE_ITEM_{Interface.GeneralSetting.PNGInActive}");
if (!HasImage($"CLOSE_BUTTON_{Interface.GeneralSetting.PNGCloseButton}")) AddImage(Interface.GeneralSetting.PNGCloseButton, $"CLOSE_BUTTON_{Interface.GeneralSetting.PNGCloseButton}");
if (!HasImage($"CATEGORY_{Category.PNGAll}")) AddImage(Category.PNGAll, $"CATEGORY_{Category.PNGAll}");
if (!HasImage($"CATEGORY_{Category.PNGAttirie}")) AddImage(Category.PNGAttirie, $"CATEGORY_{Category.PNGAttirie}");
if (!HasImage($"CATEGORY_{Category.PNGConstruction}")) AddImage(Category.PNGConstruction, $"CATEGORY_{Category.PNGConstruction}");
if (!HasImage($"CATEGORY_{Category.PNGCustom}")) AddImage(Category.PNGCustom, $"CATEGORY_{Category.PNGCustom}");
if (!HasImage($"CATEGORY_{Category.PNGElectrical}")) AddImage(Category.PNGElectrical, $"CATEGORY_{Category.PNGElectrical}");
if (!HasImage($"CATEGORY_{Category.PNGFun}")) AddImage(Category.PNGFun, $"CATEGORY_{Category.PNGFun}");
if (!HasImage($"CATEGORY_{Category.PNGItems}")) AddImage(Category.PNGItems, $"CATEGORY_{Category.PNGItems}");
if (!HasImage($"CATEGORY_{Category.PNGTools}")) AddImage(Category.PNGTools, $"CATEGORY_{Category.PNGTools}");
if (!HasImage($"CATEGORY_{Category.PNGTransport}")) AddImage(Category.PNGTransport, $"CATEGORY_{Category.PNGTransport}");
if (!HasImage($"CATEGORY_{Category.PNGWeapon}")) AddImage(Category.PNGWeapon, $"CATEGORY_{Category.PNGWeapon}");
if (!HasImage($"REQUIRES_WORKBENCH_{Requires.PNGRequiresWorckbench}")) AddImage(Requires.PNGRequiresWorckbench, $"REQUIRES_WORKBENCH_{Requires.PNGRequiresWorckbench}");
if (!HasImage($"REQUIRES_IQRANKSYSTEM_{Requires.PNGRequiresIQRankSystem}")) AddImage(Requires.PNGRequiresIQRankSystem, $"REQUIRES_IQRANKSYSTEM_{Requires.PNGRequiresIQRankSystem}");
if (!HasImage($"REQUIRES_IQPLAGUESKILL_{Requires.PNGRequiresIQPlagueSkill}")) AddImage(Requires.PNGRequiresIQPlagueSkill, $"REQUIRES_IQPLAGUESKILL_{Requires.PNGRequiresIQPlagueSkill}");
if (!HasImage($"REQUIRES_IQECONOMIC_{Requires.PNGRequiresIQEconomic}")) AddImage(Requires.PNGRequiresIQEconomic, $"REQUIRES_IQECONOMIC_{Requires.PNGRequiresIQEconomic}");
foreach (KeyValuePair<String, Configuration.ItemSettings> Icon in Items.Where(x => x.Value.CategoryItems == CategoryItem.Custom || x.Value.CategoryItems == CategoryItem.Transport || x.Value.CategoryItems == CategoryItem.Entity)) {
if (!HasImage($"ITEM_{Icon.Value.PNG}")) AddImage(Icon.Value.PNG, $"ITEM_{Icon.Value.PNG}");
}
foreach (KeyValuePair<String, Configuration.ItemSettings> Item in Items) {
foreach (Configuration.ItemSettings.ItemForCraft ItemCraft in Item.Value.ItemListForCraft) {
if (!HasImage($"ITEM_CRAFT_{ItemCraft.PNG}")) AddImage(ItemCraft.PNG, $"ITEM_CRAFT_{ItemCraft.PNG}");
}
}
PrintWarning(LanguageEn ? "Icon loading is complete" : "Загрузка иконок завершена");
}
#endregion
#region Check Metods
public Boolean DoWorkbenchLevel(BasePlayer player, Int32 NeededWorkbenchLevel) {
return player.currentCraftLevel >= NeededWorkbenchLevel;
}
public Boolean DoBalanceIQEconomic(BasePlayer player, Int32 NeededBalance) {
return GetBalance(player.userID) >= NeededBalance;
}
public Boolean DoSkillIQPlagueSkill(BasePlayer player) {
return IQPlagueSkillISAdvanced(player);
}
public Boolean DoRankIQRankSystem(BasePlayer player, String RankKey) {
return IQRankSystemAvaliability(player, RankKey);
}
public Boolean IS_Item_Player(BasePlayer player, String Shortname, Int32 Amount, UInt64 SkinID = 0) {
Int32 ItemAmount = 0;
foreach (Item ItemRequires in EnumerateAllItems(player)) {
if (ItemRequires == null) continue;
if (ItemRequires.info.shortname != Shortname) continue;
if (ItemRequires.skin != SkinID) continue;
ItemAmount += ItemRequires.amount;
}
return ItemAmount >= Amount;
}
private Boolean Is_Full_Item_Pack(BasePlayer player, List<Configuration.ItemSettings.ItemForCraft> itemForCraftList) {
Int32 TrueItem = 0;
for (Int32 i = 0; i < itemForCraftList.Count; i++) {
Configuration.ItemSettings.ItemForCraft Item = itemForCraftList[i];
if (IS_Item_Player(player, Item.Shortname, Item.Amount, Item.SkinID)) TrueItem++;
}
return TrueItem >= itemForCraftList.Count;
}
#endregion
public void Register(String Permissions) {
if (!String.IsNullOrWhiteSpace(Permissions)) {
if (!permission.PermissionExists(Permissions, this)) permission.RegisterPermission(Permissions, this);
}
}
private void GiveItemUser(UInt64 userID, String ItemKey) {
Configuration.ItemSettings Item = config.ItemSetting[ItemKey];
BasePlayer player = BasePlayer.FindByID(userID);
switch (Item.CategoryItems) {
case CategoryItem.Weapon : case CategoryItem.Attirie : case CategoryItem.Construction : case CategoryItem.Electrical : case CategoryItem.Fun : case CategoryItem.Items : case CategoryItem.Tools : // ITEM
{
Item item = ItemManager.CreateByName(Item.Shortname, 1, Item.SkinID);
if (!String.IsNullOrWhiteSpace(Item.DisplayName)) item.
// ... [Code preview truncated due to length. Full source in attached file] ...