Иконка ресурса

FREE SkillRates : 2.0.1 2.0.1

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
using UnityEngine;
using Random = UnityEngine.Random;
using System;
using Oxide.Core;
using Rust;
using Oxide.Core.Plugins;
using System.Collections;
using ru = Oxide.Game.Rust;
namespace Oxide.Plugins {
    [Info("SkillRates", "fermens", "2.0.1")]
    class SkillRates : RustPlugin {
        const bool fermensEN = true;
        // true - config in english | false - конфиг на русском
#region Images
        [PluginReference]
        private Plugin ImageLibrary, HaxBot, LootDefender;
        public string GetImage(string shortname, ulong skin = 0) => (string)ImageLibrary.Call("GetImage", shortname, skin);
        public bool AddImage(string url, string shortname, ulong skin = 0) => (bool)ImageLibrary?.Call("AddImage", url, shortname, skin);
#endregion
#region Lang
        private string GetLang(string key, string userid) {
            return lang.GetMessage(key, this, userid);
        }
#endregion
#region X2Rates
        class modificator {
            public float gather;
            public float xp;
        }
        Dictionary<string, modificator> modificators = new Dictionary<string, modificator>();
        void OnGroupPermissionGranted(string name, string perm) {
            foreach (BasePlayer player in BasePlayer.allPlayerList) {
                if (permission.UserHasGroup(player.UserIDString, name)) {
                    UPDATEMOD(player.UserIDString);
                }
            }
        }
        void OnGroupPermissionRevoked(string name, string perm) {
            foreach (BasePlayer player in BasePlayer.allPlayerList) {
                if (permission.UserHasGroup(player.UserIDString, name)) {
                    UPDATEMOD(player.UserIDString);
                }
            }
        }
        void OnUserGroupRemoved(string id, string groupName) {
            NextTick(() => {
                UPDATEMOD(id);
            }
            );
        }
        void OnUserGroupAdded(string id, string groupName) {
            NextTick(() => {
                UPDATEMOD(id);
            }
            );
        }
        void OnUserPermissionGranted(string id, string permName) {
            UPDATEMOD(id);
            TermLevelADD(id, permName);
        }
        void OnUserPermissionRevoked(string id, string permName) {
            UPDATEMOD(id);
            TermLevelRemove(id, permName);
        }
        private void TermLevelADD(string id, string permName) {
            string perm = permName.ToLower();
            if (!config.settings.Keys.Any(x => perm == "skillrates." + x)) return;
            BasePlayer player = BasePlayer.FindByID(Convert.ToUInt64(id)) ?? BasePlayer.FindAwakeOrSleeping(id);
            if(player == null) {
                Debug.LogError($"[SkillRates] {id} player not found! <set max lvl>");
                return;
            }
            string skill = perm.Replace("skillrates.", "");
            SetMaxLvl(player, skill);
        }
        private void TermLevelRemove(string id, string permName) {
            string perm = permName.ToLower();
            if (!config.settings.Keys.Any(x => perm == "skillrates." + x)) return;
            string skill = perm.Replace("skillrates.", "");
            DelMaxLvl(id, skill);
        }
#endregion
#region Cash
        static string maxlevelstring;
        class mod {
            public float exp;
            public Dictionary<MODIFICATOR, float> modificator;
        }
        Dictionary<int, mod> levels = new Dictionary<int, mod>();
        enum SKILL {
            miner, alchemist, woodcutter, hunter, marauder, technicist, jeweler, dustman, farmer
        }
        ;
        enum MODIFICATOR {
            HQM, STONE, METAL, SULFUR, REMELTINGSPEED, REFINERYSPEED, WOOD, COALSHANCE, ANIMAL, ANIMALARMOR, ANIMALDAMAGE, NPC, NPCARMOR, NPCDAMAGE, MECH, MECHARMOR, MECHDAMAGE, AIR, LOCKEDCRATE, ELITE, BARREL, CRATE, GROWABLEVEGETABLES, GROWABLEBERRY
        }
        ;
        Dictionary<ulong, Dictionary<SKILL, mainskill>> players = new Dictionary<ulong, Dictionary<SKILL, mainskill>>();
        class mainskill {
            public float exp;
            public int lvl;
            public int lastlvl;
        }
        const string prefabstone = "stone";
        const string prefabmetal = "metal";
        const string prefabsulfur = "sulfur";
#endregion
#region Config
        private PluginConfig config;
        protected override void LoadDefaultConfig() {
            config = new PluginConfig();
        }
        protected override void LoadConfig() {
            base.LoadConfig();
            config = Config.ReadObject<PluginConfig>();
        }
        protected override void SaveConfig() {
            Config.WriteObject(config);
        }
        class INITLVLS {
            [JsonProperty(fermensEN ? "Maximal lvl" : "Максимальный уровень")]
            public int maxlevel;
            [JsonProperty(fermensEN ? "Exp - 0 lvl" : "Опыт - 0 уровень")]
            public float modificator_start;
            [JsonProperty(fermensEN ? "Magnification" : "Увеличение")]
            public float modificator_multiplication;
        }
        class EXPERIMENT {
            [JsonProperty(fermensEN ? "Enable?" : "Включено?")]
            public bool enable;
            [JsonProperty(fermensEN ? "Amount crates" : "Количество ящиков")]
            public int amount;
        }
        class setting2 {
            [JsonProperty(fermensEN ? "First lvl" : "Первый уровень")]
            public float first;
            [JsonProperty(fermensEN ? "Last lvl" : "Последний уровень")]
            public float last;
        }
        class setting {
            [JsonProperty(fermensEN ? "Background" : "Фон")]
            public string background;
            [JsonProperty(fermensEN ? "Color - lvl" : "Цвет уровня")]
            public string lvlcolor;
            [JsonProperty(fermensEN ? "Color - progress, main" : "Цвет прогресса - Основной")]
            public string mainbar;
            [JsonProperty(fermensEN ? "Color - progress, background" : "Цвет прогресса - Фон")]
            public string backbar;
            [JsonProperty(fermensEN ? "Bonuses" : "Бонусы - настройка")]
            public Dictionary<MODIFICATOR, setting2> mod;
            [JsonProperty(fermensEN ? "Reward for reaching a certain level" : "Награда за достижение определенного уровня")]
            public Dictionary<int, List<string>> reward;
        }
        class expelement {
            [JsonProperty(fermensEN ? "Barrel" : "Бочка")]
            public float barrel;
            [JsonProperty(fermensEN ? "Regular box" : "Обычный ящик")]
            public float crate;
            [JsonProperty(fermensEN ? "Stone - mined" : "Камень - добытый")]
            public float ore_stone;
            [JsonProperty(fermensEN ? "Metal - mined" : "Метал - добытый")]
            public float ore_metal;
            [JsonProperty(fermensEN ? "Sulfur - mined" : "Сульфур - добытый")]
            public float ore_sulfur;
            [JsonProperty(fermensEN ? "Tree - downed" : "Дерево - поваленное")]
            public float wood;
            [JsonProperty(fermensEN ? "Helicopter - downed" : "Вертолет - сбитый")]
            public float heli;
            [JsonProperty(fermensEN ? "Stone - picked up" : "Камень - поднятый")]
            public float grab_stone;
            [JsonProperty(fermensEN ? "Metal - picked up" : "Метал - поднятый")]
            public float grab_metal;
            [JsonProperty(fermensEN ? "Sulfur - picked up" : "Сульфур - поднятый")]
            public float grab_sulfur;
            [JsonProperty(fermensEN ? "Wood - picked up" : "Дерево - поднятое")]
            public float grab_wood;
            [JsonProperty(fermensEN ? "Bradley - exploded" : "Танк - взорванный")]
            public float tank;
            [JsonProperty(fermensEN ? "Bradley - mining parts" : "Танк - добыча частей")]
            public float tank_fleshed;
            [JsonProperty(fermensEN ? "Helicopter - mining parts" : "Вертолет - добыча частей")]
            public float heli_fleshed;
            [JsonProperty(fermensEN ? "Helicopter - crate" : "Вертолет - ящик")]
            public float heli_cont;
            [JsonProperty(fermensEN ? "Bradley - crate" : "Танк - ящик")]
            public float tank_cont;
            [JsonProperty(fermensEN ? "Wolf - killed" : "Волк - убитый")]
            public float wolf;
            [JsonProperty(fermensEN ? "Boar - killed" : "Кабан - убитый")]
            public float boar;
            [JsonProperty(fermensEN ? "Horse - killed" : "Лошадь - убитая")]
            public float horse;
            [JsonProperty(fermensEN ? "Riding horse - killed" : "Верховая лошадь - убитая")]
            public float ridablehorse;
            [JsonProperty(fermensEN ? "Stag - killed" : "Олень - убитый")]
            public float stag;
            [JsonProperty(fermensEN ? "Chicken - killed" : "Курица - убитая")]
            public float chicken;
            [JsonProperty(fermensEN ? "Bear - killed" : "Медведь - убитый")]
            public float bear;
            [JsonProperty(fermensEN ? "Supply crate" : "Аир дроп")]
            public float air;
            [JsonProperty(fermensEN ? "Locked crate" : "Закрытый ящик")]
            public float lockedcrate;
            [JsonProperty(fermensEN ? "Elit crate" : "Элитный ящик")]
            public float elite;
            [JsonProperty(fermensEN ? "Wolf - fleshed" : "Волк - добытый")]
            public float wolf_fleshed;
            [JsonProperty(fermensEN ? "Horse - fleshed" : "Лошадь - добытая")]
            public float horse_fleshed;
            [JsonProperty(fermensEN ? "Boar - fleshed" : "Кабан - добытый")]
            public float boar_fleshed;
            [JsonProperty(fermensEN ? "Stag - fleshed" : "Олень - добытый")]
            public float stag_fleshed;
            [JsonProperty(fermensEN ? "Chicken - fleshed" : "Курица - добытая")]
            public float chicken_fleshed;
            [JsonProperty(fermensEN ? "Bear - fleshed" : "Медведь - добытый")]
            public float bear_fleshed;
            [JsonProperty(fermensEN ? "NPC - killed" : "Бот - убитый")]
            public float npc;
            [JsonProperty(fermensEN ? "NPC - looted" : "Бот - залутаный")]
            public float npc_looted;
            [JsonProperty(fermensEN ? "Vegetables - crop" : "Овощи - урожай")]
            public float grow_vegetables;
            [JsonProperty(fermensEN ? "Berry - harvest" : "Ягоды - урожай")]
            public float grow_berrys;
            [JsonProperty(fermensEN ? "Vegetables - planting" : "Овощи - посадка")]
            public float planting_vegetables;
            [JsonProperty(fermensEN ? "Berry - planting" : "Ягоды - посадка")]
            public float planting_berrys;
        }
        class EXPBar {
            [JsonProperty(fermensEN ? "Enable experience bar?" : "Включить полосу опыта?")]
            public bool enable;
        }
        class UI {
            public string anchor_min;
            public string anchor_max;
            public string offset_min;
            public string offset_max;
            public string fadein;
            public string backgroundcolor;
        }
        private class PluginConfig {
            public string chatcommand {
                get;
                set;
            }
            = "skill";
#region Exp bar
            public EXPBar eXPBar {
                get;
                set;
            }
            = new EXPBar {
                enable = true
            }
            ;
#endregion
#region ui
            [JsonProperty("UI")]
            public UI uI {
                get;
                set;
            }
            = new UI {
                fadein = "0.5", offset_min = "0 0", offset_max = "0 0", anchor_min = "0 0", anchor_max = "1 1", backgroundcolor = "0 0 0 0.9960784"
            }
            ;
#endregion
#region lvl
            [JsonProperty(fermensEN ? "Level generation" : "Генерация уровней")]
            public INITLVLS lvl {
                get;
                set;
            }
            = new INITLVLS {
                maxlevel = 100, modificator_start = 1f, modificator_multiplication = 1.05f
            }
            ;
#endregion
#region carier
            [JsonProperty(fermensEN ? "Quary rates - static" : "Рейты карьера - статика")]
            public float carier {
                get;
                set;
            }
            = 5f;
#endregion
#region loottoheli
            [JsonProperty(fermensEN ? "Additional boxes from helicopter and tank" : "Экспериментально - [доп ящики для вертолета с танка]")]
            public EXPERIMENT loottoheli {
                get;
                set;
            }
            = new EXPERIMENT {
                enable = true, amount = 2
            }
            ;
#endregion
#region settings
            [JsonProperty(fermensEN ? "Skills - setting" : "Навыки - настройка")]
            public Dictionary<SKILL, setting> settings {
                get;
                set;
            }
            = new Dictionary<SKILL, setting> {
                {
                    SKILL.miner, new setting {
                        lvlcolor = "0.73 0.87 0.745 1", mainbar = "0.21 0.42 0.26 1", backbar = "0.16 0.16 0.16 1", mod = new Dictionary<MODIFICATOR, setting2> {
                            {
                                MODIFICATOR.STONE, new setting2 {
                                    first = 10f, last = 20f
                                }
                            }
                            , {
                                MODIFICATOR.METAL, new setting2 {
                                    first = 10f, last = 20f
                                }
                            }
                            , {
                                MODIFICATOR.HQM, new setting2 {
                                    first = 10f, last = 20f
                                }
                            }
                        }
                    }
                }
                , {
                    SKILL.alchemist, new setting {
                        lvlcolor = "0.73 0.87 0.745 1", mainbar = "0.21 0.42 0.26 1", backbar = "0.16 0.16 0.16 1", mod = new Dictionary<MODIFICATOR, setting2> {
                            {
                                MODIFICATOR.SULFUR, new setting2 {
                                    first = 5f, last = 10f
                                }
                            }
                            , {
                                MODIFICATOR.REMELTINGSPEED, new setting2 {
                                    first = 5f, last = 20f
                                }
                            }
                        }
                    }
                }
                , {
                    SKILL.woodcutter, new setting {
                        lvlcolor = "0.73 0.87 0.745 1", mainbar = "0.21 0.42 0.26 1", backbar = "0.16 0.16 0.16 1", mod = new Dictionary<MODIFICATOR, setting2> {
                            {
                                MODIFICATOR.WOOD, new setting2 {
                                    first = 10f, last = 20f
                                }
                            }
                            , {
                                MODIFICATOR.COALSHANCE, new setting2 {
                                    first = 0.75f, last = 1f
                                }
                            }
                            , {
                                MODIFICATOR.REFINERYSPEED, new setting2 {
                                    first = 5f, last = 20f
                                }
                            }
                        }
                    }
                }
                , {
                    SKILL.hunter, new setting {
                        lvlcolor = "0.91 0.75 0.75 1", mainbar = "0.51 0.25 0.25 1", backbar = "0.16 0.16 0.16 1", mod = new Dictionary<MODIFICATOR, setting2> {
                            {
                                MODIFICATOR.ANIMAL, new setting2 {
                                    first = 10f, last = 20f
                                }
                            }
                            , {
                                MODIFICATOR.ANIMALARMOR, new setting2 {
                                    first = 0f, last = 0.25f
                                }
                            }
                        }
                    }
                }
                , {
                    SKILL.marauder, new setting {
                        lvlcolor = "0.91 0.75 0.75 1", mainbar = "0.51 0.25 0.25 1", backbar = "0.16 0.16 0.16 1", mod = new Dictionary<MODIFICATOR, setting2> {
                            {
                                MODIFICATOR.NPC, new setting2 {
                                    first = 10f, last = 20f
                                }
                            }
                            , {
                                MODIFICATOR.NPCARMOR, new setting2 {
                                    first = 0f, last = 0.1f
                                }
                            }
                            , {
                                MODIFICATOR.NPCDAMAGE, new setting2 {
                                    first = 0f, last = 0.25f
                                }
                            }
                        }
                    }
                }
                , {
                    SKILL.technicist, new setting {
                        lvlcolor = "0.91 0.75 0.75 1", mainbar = "0.51 0.25 0.25 1", backbar = "0.16 0.16 0.16 1", mod = new Dictionary<MODIFICATOR, setting2> {
                            {
                                MODIFICATOR.MECH, new setting2 {
                                    first = 10f, last = 20f
                                }
                            }
                            , {
                                MODIFICATOR.MECHARMOR, new setting2 {
                                    first = 0f, last = 0.25f
                                }
                            }
                            , {
                                MODIFICATOR.MECHDAMAGE, new setting2 {
                                    first = 0f, last = 0.1f
                                }
                            }
                        }
                    }
                }
                , {
                    SKILL.jeweler, new setting {
                        lvlcolor = "0.756 0.75 0.87 1", mainbar = "0.26 0.25 0.46 1", backbar = "0.16 0.16 0.16 1", mod = new Dictionary<MODIFICATOR, setting2> {
                            {
                                MODIFICATOR.AIR, new setting2 {
                                    first = 10f, last = 20f
                                }
                            }
                            , {
                                MODIFICATOR.LOCKEDCRATE, new setting2 {
                                    first = 10f, last = 20f
                                }
                            }
                            , {
                                MODIFICATOR.ELITE, new setting2 {
                                    first = 10f, last = 20f
                                }
                            }
                        }
                    }
                }
                , {
                    SKILL.dustman, new setting {
                        lvlcolor = "0.756 0.75 0.87 1", mainbar = "0.26 0.25 0.46 1", backbar = "0.16 0.16 0.16 1", mod = new Dictionary<MODIFICATOR, setting2> {
                            {
                                MODIFICATOR.BARREL, new setting2 {
                                    first = 10f, last = 20f
                                }
                            }
                            , {
                                MODIFICATOR.CRATE, new setting2 {
                                    first = 10f, last = 20f
                                }
                            }
                        }
                    }
                }
                , {
                    SKILL.farmer, new setting {
                        lvlcolor = "0.756 0.75 0.87 1", mainbar = "0.26 0.25 0.46 1", backbar = "0.16 0.16 0.16 1", mod = new Dictionary<MODIFICATOR, setting2> {
                            {
                                MODIFICATOR.GROWABLEVEGETABLES, new setting2 {
                                    first = 1f, last = 5f
                                }
                            }
                            , {
                                MODIFICATOR.GROWABLEBERRY, new setting2 {
                                    first = 1f, last = 5f
                                }
                            }
                        }
                    }
                }
            }
            ;
#endregion
#region exp
            [JsonProperty(fermensEN ? "Exp" : "Опыт")]
            public expelement exp {
                get;
                set;
            }
            = new expelement {
                barrel = 1.5f, crate = 2f, ore_stone = 1.5f, ore_metal = 1.5f, ore_sulfur = 2f, wood = 2f, grab_stone = 0.1f, grab_metal = 0.1f, grab_sulfur = 0.1f, grab_wood = 0.1f, heli = 50f, tank = 25f, tank_fleshed = 0.5f, heli_fleshed = 0.5f, heli_cont = 2f, tank_cont = 2f, wolf = 1f, stag = 0.75f, horse = 0.75f, ridablehorse = 0.1f, boar = 0.75f, chicken = 0.2f, bear = 1.5f, air = 2f, lockedcrate = 10f, elite = 3.5f, wolf_fleshed = 1.5f, horse_fleshed = 1.25f, boar_fleshed = 1.25f, stag_fleshed = 1.25f, chicken_fleshed = 0.4f, bear_fleshed = 3f, npc = 1.5f, npc_looted = 1f, grow_berrys = 0.75f, grow_vegetables = 0.5f
            }
            ;
#endregion
#region broadcast
            [JsonProperty(fermensEN ? "Show progress of other players in global chat" : "Отображать повышения уровней у других")]
            public bool broadcast {
                get;
                set;
            }
            = false;
#endregion
#region boosters
            [JsonProperty(fermensEN ? "Exp boosters : permissions" : "Бустеры - пермишены")]
            public Dictionary<string, float> boosters {
                get;
                set;
            }
            = new Dictionary<string, float> {
                {
                    "skillrates.x3boost", 3f
                }
                , {
                    "skillrates.x2boost", 2f
                }
            }
            ;
#endregion
#region gathers
            [JsonProperty(fermensEN ? "Gather/loot boosters : permissions" : "Увеличители добычи - пермишены")]
            public Dictionary<string, float> gathers {
                get;
                set;
            }
            = new Dictionary<string, float> {
                {
                    "skillrates.x3", 3f
                }
                , {
                    "skillrates.x2", 2f
                }
            }
            ;
#endregion
        }
#endregion
#region DAMAGETOMECH
        Dictionary<BaseCombatEntity, Dictionary<BasePlayer, float>> mechdamage = new Dictionary<BaseCombatEntity, Dictionary<BasePlayer, float>>();
        private void DAMAGETOMECH(BaseCombatEntity entity, BasePlayer player, float damage) {
            if (!mechdamage.ContainsKey(entity)) mechdamage.Add(entity, new Dictionary<BasePlayer, float>());
            if (!mechdamage[entity].ContainsKey(player)) mechdamage[entity].Add(player, damage);
            else mechdamage[entity][player] += damage;
        }
#endregion
#region SSS
        private void OnPlayerDisconnected(BasePlayer player) {
            if (modificators.ContainsKey(player.UserIDString)) modificators.Remove(player.UserIDString);
            if (players.ContainsKey(player.userID)) Interface.Oxide.DataFileSystem.WriteObject("SKILLS/" + player.UserIDString, players[player.userID]);
        }
        private static SkillRates ins;
        private void Init() {
            ins = this;
        }
        private void OnContainerDropItems(ItemContainer container) {
            LootContainer lootcont = container.entityOwner as LootContainer;
            if (lootcont == null || lootcont.OwnerID != 0) return;
            var player = lootcont?.lastAttacker?.ToPlayer();
            if (lootcont.HasFlag(BaseEntity.Flags.Reserved7) || !lootcont.PrefabName.Contains("barrel")) return;
            if (player != null) {
                Dictionary<SKILL, mainskill> skill;
                if (!players.TryGetValue(player.userID, out skill)) {
                    //   Debug.Log("[OnContainerDropItems] skill id:" + player.UserIDString + " mini-error");
                    return;
                }
                UPRATELOOT(player, lootcont, MODGET(skill[SKILL.dustman].lvl, MODIFICATOR.BARREL));
                ADDEXP(player, config.exp.barrel, SKILL.dustman);
            }
            else {
                foreach (var item in lootcont.inventory.itemList.Where(x => x.info.stackable > 1)) {
                    item.amount = (int)(item.amount * MODGET(0, MODIFICATOR.BARREL));
                }
            }
        }
        private void OnEntityTakeDamage(BaseCombatEntity entity, HitInfo info) {
            if (info == null || info.Initiator == null) return;
            if (info.InitiatorPlayer != null) {
                if (!IsNPC(info.InitiatorPlayer)) {
                    Dictionary<SKILL, mainskill> skill;
                    if (!players.TryGetValue(info.InitiatorPlayer.userID, out skill)) {
                        //      Debug.Log("[OnEntityTakeDamage] skill id:" + info.InitiatorPlayer.UserIDString + " mini-error");
                        return;
                    }
                    if (entity is BaseAnimalNPC) {
                        info.damageTypes.ScaleAll(1f + MODGET(skill[SKILL.hunter].lvl, MODIFICATOR.ANIMALDAMAGE));
                    }
                    else if (entity is BaseHelicopter || entity is BradleyAPC) {
                        info.damageTypes.ScaleAll(1f + MODGET(skill[SKILL.technicist].lvl, MODIFICATOR.MECHDAMAGE));
                        DAMAGETOMECH(entity, info.InitiatorPlayer, info.damageTypes.Total());
                    }
                    else if (entity is BasePlayer) {
                        BasePlayer player = entity.ToPlayer();
                        if (player != null && IsNPC(player)) {
                            info.damageTypes.ScaleAll(1f + MODGET(skill[SKILL.marauder].lvl, MODIFICATOR.NPCDAMAGE));
                        }
                    }
                }
                else {
                    if (entity is BasePlayer) {
                        BasePlayer player = entity.ToPlayer();
                        if (player != null && !IsNPC(player)) {
                            Dictionary<SKILL, mainskill> skill;
                            if (!players.TryGetValue(player.userID, out skill)) {
                                //     Debug.Log("[OnEntityTakeDamage] skill id:" + player.UserIDString + " mini-error");
                                return;
                            }
                            info.damageTypes.ScaleAll(1f - MODGET(skill[SKILL.marauder].lvl, MODIFICATOR.NPCARMOR));
                        }
                    }
                }
            }
            else if (entity is BasePlayer) {
                BasePlayer player = entity.ToPlayer();
                if (player == null || IsNPC(player)) return;
                Dictionary<SKILL, mainskill> skill;
                if (!players.TryGetValue(player.userID, out skill)) {
                    //Debug.Log("[OnEntityTakeDamage] entity skill id:" + player.UserIDString + " mini-error");
                    return;
                }
                if (info.Initiator is BaseAnimalNPC) {
                    info.damageTypes.ScaleAll(1f - MODGET(skill[SKILL.hunter].lvl, MODIFICATOR.ANIMALARMOR));
                }
                else if (info.Initiator is BaseHelicopter || info.Initiator is BradleyAPC) {
                    info.damageTypes.ScaleAll(1f - MODGET(skill[SKILL.technicist].lvl, MODIFICATOR.MECHARMOR));
                }
            }
        }
        private void OnPlayerConnected(BasePlayer player) {
            if (IsNewPlayer(player)) {
                player.ChatMessage(GetLang("chat_welcome", player.UserIDString));
            }
            foreach (var x in config.settings) {
                SetMaxLvl(player, x.Key.ToString());
            }
            UIRand(player);
        }
        private void UIRand(BasePlayer player) {
            if (!config.eXPBar.enable) return;
            int count = config.settings.Count;
            int rand = Random.Range(0, count);
            var x = config.settings.ElementAtOrDefault(rand);
            Dictionary<SKILL, mainskill> skill;
            if (!players.TryGetValue(player.userID, out skill)) {
                IsNewPlayer(player);
                skill = players[player.userID];
            }
            int mylevel = skill[x.Key].lvl;
            mod level;
            if (!levels.TryGetValue(mylevel, out level)) level = levels.LastOrDefault().Value;
            UISkillBar(player, x.Key.ToString(), skill[x.Key].exp, level.exp, skill[x.Key].lvl);
            UPDATEMOD(player.UserIDString);
        }
        private void UPDATEMOD(string id) {
            modificator modificator;
            if (!modificators.TryGetValue(id, out modificator)) {
                modificators.Add(id, new modificator {
                    gather = GETGATHER(id), xp = GETBOOST(id)
                }
                );
                return;
            }
            modificator.xp = GETBOOST(id);
            modificator.gather = GETGATHER(id);
        }
        private float GETBOOST(string id) {
            float value = 1f;
            foreach (var z in config.boosters) {
                if (permission.UserHasPermission(id, z.Key)) value *= z.Value;
            }
            return value;
        }
        private float GETGATHER(string id) {
            foreach (var z in config.gathers) {
                if (permission.UserHasPermission(id, z.Key)) return z.Value;
            }
            return 1f;
        }
        private string token = "030320221715fermens";
        private string namer = "SkillRates";
        private string UITEST = "[{\"name\":\"SkillBar\",\"parent\":\"Hud\",\"components\":[{\"type\":\"UnityEngine.UI.Image\",\"color\":\"0.1753284 0.1753284 0.1753284 0.4970338\"},{\"type\":\"RectTransform\",\"anchormin\":\"0 0\",\"anchormax\":\"1 0\",\"offsetmin\":\"0 0\",\"offsetmax\":\"0 10\"}]},{\"name\":\"LTSK\",\"parent\":\"SkillBar\",\"components\":[{\"type\":\"UnityEngine.UI.RawImage\",\"sprite\":\"assets/content/textures/generic/fulltransparent.tga\",\"color\":\"1 0.9058824 0.2039216 0.7843137\",\"png\":\"{png}\"},{\"type\":\"RectTransform\",\"anchormin\":\"0 0\",\"anchormax\":\"0 0\",\"offsetmin\":\"2 -8\",\"offsetmax\":\"37 27\"}]},{\"name\":\"TextLTSK\",\"parent\":\"LTSK\",\"components\":[{\"type\":\"UnityEngine.UI.Text\",\"text\":\"{lv}\",\"fontSize\":16,\"align\":\"MiddleCenter\"},{\"type\":\"RectTransform\",\"anchormin\":\"0 0\",\"anchormax\":\"1 1\",\"offsetmax\":\"0 0\"}]},{\"name\":\"ERrrq\",\"parent\":\"SkillBar\",\"components\":[{\"type\":\"UnityEngine.UI.Text\",\"text\":\"{text}\",\"fontSize\":16, \"color\":\"1 1 1 0.7\",\"align\":\"MiddleLeft\"},{\"type\":\"RectTransform\",\"anchormin\":\"0 0\",\"anchormax\":\"0 0\",\"offsetmin\":\"43 0\",\"offsetmax\":\"300 39\"}]},{\"name\":\"_bar\",\"parent\":\"SkillBar\",\"components\":[{\"type\":\"UnityEngine.UI.Image\",\"color\":\"1 1 1 0\"},{\"type\":\"RectTransform\",\"anchormin\":\"0 0.2\",\"anchormax\":\"1 0.7\",\"offsetmin\":\"43 0\",\"offsetmax\":\"0 0\"}]}]";
        string barpanel = "{\"name\":\"barpanel\",\"parent\":\"_bar\",\"components\":[{\"type\":\"UnityEngine.UI.Image\",\"color\":\"{color}\"},{\"type\":\"RectTransform\",\"anchormin\":\"{min} 0\",\"anchormax\":\"{max} 1\",\"offsetmin\":\"0 0\",\"offsetmax\":\"0 0\"}]}";
        void DoBar(ref float x, ref string xx, float b = 0.095f) {
            float max = x + b;
            xx += (string.IsNullOrEmpty(xx) ? "" : ",") + barpanel.Replace("{color}", "1 0.9372549 0.4666667 " + max).Replace("{min}", x.ToString()).Replace("{max}", max.ToString());
            x = max + 0.005f;
        }
        private void UISkillBar(BasePlayer player, string key, float exp, float needexp, int lvl) {
            if (!config.eXPBar.enable) return;
            CommunityEntity.ServerInstance.ClientRPCEx(new Network.SendInfo {
                connection = player.net.connection
            }
            , null, "DestroyUI", "SkillBar");
            CommunityEntity.ServerInstance.ClientRPCEx(new Network.SendInfo {
                connection = player.net.connection
            }
            , null, "AddUI", UITEST.Replace("{text}", GetLang("expbar_main", player.UserIDString).Replace("{skillname}", GetLang(key, player.UserIDString)).Replace("{exp}", exp.ToString("0.0")).Replace("{needexp}", needexp.ToString("0.0"))).Replace("{png}", GetImage("https://i.ibb.co/jhXTp9f/b.png")).Replace("{lv}", lvl.ToString()));
            float calculeted = (exp / needexp) * 10;
            int rov = (int)Math.Floor(calculeted);
            float ost = (calculeted - rov) / 10f;
            float x = 0;
            string xx = "";
            for (int a = 0; a < rov; a++) DoBar(ref x, ref xx);
            if (ost > 0f) DoBar(ref x, ref xx, ost);
            CommunityEntity.ServerInstance.ClientRPCEx(new Network.SendInfo {
                connection = player.net.connection
            }
            , null, "AddUI", "[" + xx + "]");
        }
        private void OnServerInitialized() {
            permission.RegisterPermission("skillrates.instant", this);
            ServerMgr.Instance.StartCoroutine(GetCallback());
        }
#region START
        public string mainGui = "[{\"name\":\"TokenMenu\",\"parent\":\"Overlay\",\"components\":[{\"type\":\"UnityEngine.UI.Image\",\"color\":\"1 1 1 0\"},{\"type\":\"RectTransform\",\"anchormin\":\"{anchormin}\",\"anchormax\":\"{anchormax}\",\"offsetmin\":\"{offsetmin}\",\"offsetmax\":\"{offsetmax}\"},{\"type\":\"NeedsCursor\"}]},{\"name\":\"TokenCLOSE2\",\"parent\":\"TokenMenu\",\"components\":[{\"type\":\"UnityEngine.UI.Button\",\"close\":\"TokenMenu\",\"color\":\"0 0 0 0\"},{\"type\":\"RectTransform\",\"anchormin\":\"-2000 -2000\",\"anchormax\":\"2000 2000\",\"offsetmin\":\"0 0\",\"offsetmax\":\"0 0\"}]},{\"name\":\"cui\",\"parent\":\"TokenMenu\",\"components\":[{\"type\":\"UnityEngine.UI.Image\",\"color\":\"{backgroundcolor}\",\"fadeIn\":{fadein}},{\"type\":\"RectTransform\",\"anchormin\":\"0 0\",\"anchormax\":\"1 1\",\"offsetmin\":\"0 0\",\"offsetmax\":\"0 0\"}]},{\"name\":\"TokenHEADER\",\"parent\":\"cui\",\"components\":[{\"type\":\"UnityEngine.UI.Image\",\"color\":\"0.7490196 0.7490196 0.7490196 0.1647059\"},{\"type\":\"RectTransform\",\"anchormin\":\"0 0.93\",\"anchormax\":\"1 1\",\"offsetmin\":\"0 0\",\"offsetmax\":\"0 0\"}]},{\"name\":\"TokenHEADERTEXT\",\"parent\":\"TokenHEADER\",\"components\":[{\"type\":\"UnityEngine.UI.Text\",\"text\":\"{header}\",\"fontSize\":26,\"align\":\"MiddleCenter\"},{\"type\":\"RectTransform\",\"anchormin\":\"0 0\",\"anchormax\":\"1 1\",\"offsetmin\":\"0 0\",\"offsetmax\":\"0 0\"}]},{\"name\":\"TokenCLOSE\",\"parent\":\"TokenHEADER\",\"components\":[{\"type\":\"UnityEngine.UI.Button\",\"close\":\"TokenMenu\",\"color\":\"0 0 0 0\"},{\"type\":\"RectTransform\",\"anchormin\":\"0.9 0\",\"anchormax\":\"1 1\",\"offsetmin\":\"0 0\",\"offsetmax\":\"0 0\"}]},{\"name\":\"TokenTEXT\",\"parent\":\"TokenCLOSE\",\"components\":[{\"type\":\"UnityEngine.UI.Text\",\"fontSize\":16,\"color\":\"1 1 1 0.5\",\"text\":\"{closetext}\",\"align\":\"MiddleRight\"},{\"type\":\"RectTransform\",\"anchormin\":\"0 0\",\"anchormax\":\"1 1\",\"offsetmin\":\"0 0\",\"offsetmax\":\"-10 0\"}]}{main}]";
        public string mainGui2 = "[{\"name\":\"TokenMenu\",\"parent\":\"Overlay\",\"components\":[{\"type\":\"UnityEngine.UI.Image\",\"color\":\"1 1 1 0\"},{\"type\":\"RectTransform\",\"anchormin\":\"{anchormin}\",\"anchormax\":\"{anchormax}\",\"offsetmin\":\"{offsetmin}\",\"offsetmax\":\"{offsetmax}\"},{\"type\":\"NeedsCursor\"}]},{\"name\":\"cui\",\"parent\":\"TokenMenu\",\"components\":[{\"type\":\"UnityEngine.UI.Image\",\"color\":\"{backgroundcolor}\",\"fadeIn\":{fadein}},{\"type\":\"RectTransform\",\"anchormin\":\"0 0\",\"anchormax\":\"1 1\",\"offsetmin\":\"0 0\",\"offsetmax\":\"0 0\"}]}{main}]";
        public string mainBar = ",{\"name\":\"MAIN\",\"parent\":\"cui\",\"components\":[{\"type\":\"UnityEngine.UI.Image\",\"color\":\"0 0 0 0\"},{\"type\":\"RectTransform\",\"anchormin\":\"{minx} {miny}\",\"anchormax\":\"{maxx} {maxy}\",\"offsetmax\":\"0 0\"}]},{\"name\":\"MAINBAR\",\"parent\":\"MAIN\",\"components\":[{\"type\":\"UnityEngine.UI.Image\",\"color\":\"{backbar}\"},{\"type\":\"RectTransform\",\"anchormin\":\"0.055 0.09\",\"anchormax\":\"0.945 0.235\",\"offsetmax\":\"0 0\"}]},{\"name\":\"MAIIMAGE\",\"parent\":\"MAIN\",\"components\":[{\"type\":\"UnityEngine.UI.RawImage\",\"sprite\":\"assets/content/textures/generic/fulltransparent.tga\",\"png\":\"{png}\",\"color\":\"1 1 1 1\"},{\"type\":\"RectTransform\",\"anchormin\":\"0 0\",\"anchormax\":\"1 1\",\"offsetmax\":\"0 0\"}]},{\"name\":\"NAMEFRAG\",\"parent\":\"MAIN\",\"components\":[{\"type\":\"UnityEngine.UI.Text\",\"text\":\"{NAME}\",\"fontSize\":26,\"align\":\"MiddleLeft\"},{\"type\":\"RectTransform\",\"anchormin\":\"0.02 0.7\",\"anchormax\":\"1 0.98\",\"offsetmin\":\"10 0\",\"offsetmax\":\"0 0\"}]},{\"name\":\"LEVEL\",\"parent\":\"MAIN\",\"components\":[{\"type\":\"UnityEngine.UI.Text\",\"text\":\"{LVL}/{MAXLVL}\",\"fontSize\":26,\"align\":\"MiddleRight\",\"color\":\"{lvlcolor}\"},{\"type\":\"RectTransform\",\"anchormin\":\"0 0.6\",\"anchormax\":\"0.98 1\",\"offsetmax\":\"-10 0\"}]},{\"name\":\"ACTIVEBAR\",\"parent\":\"MAINBAR\",\"components\":[{\"type\":\"UnityEngine.UI.Image\",\"color\":\"{mainbar}\"},{\"type\":\"RectTransform\",\"anchormin\":\"0 0\",\"anchormax\":\"{bar} 1\",\"offsetmax\":\"0 0\"}]},{\"name\":\"BONUSE\",\"parent\":\"MAIN\",\"components\":[{\"type\":\"UnityEngine.UI.Text\",\"text\":\"{info}\",\"align\":\"MiddleLeft\",\"fontSize\":14,\"color\":\"1 1 1 0.787812\"},{\"type\":\"RectTransform\",\"anchormin\":\"0.07 0.25\",\"anchormax\":\"1 0.65\",\"offsetmin\":\"10 0\",\"offsetmax\":\"0 0\"}]},{\"name\":\"SMALLINFO\",\"parent\":\"MAIN\",\"components\":[{\"type\":\"UnityEngine.UI.Text\",\"text\":\"{smallinfo}\",\"fontSize\":12,\"align\":\"LowerLeft\",\"color\":\"1 1 1 0.4\"},{\"type\":\"RectTransform\",\"anchormin\":\"0.02 0.68\",\"anchormax\":\"1 0.8\",\"offsetmin\":\"10 0\",\"offsetmax\":\"0 0\"}]},{\"name\":\"EXP\",\"parent\":\"MAIN\",\"components\":[{\"type\":\"UnityEngine.UI.Text\",\"text\":\"{exp}\",\"fontSize\":12,\"align\":\"LowerLeft\",\"color\":\"1 1 1 0.4\"},{\"type\":\"RectTransform\",\"anchormin\":\"0.07 0.127\",\"anchormax\":\"0.5 0.25\",\"offsetmin\":\"5 0\",\"offsetmax\":\"0 0\"}]},{\"name\":\"MAXEXP\",\"parent\":\"MAIN\",\"components\":[{\"type\":\"UnityEngine.UI.Text\",\"text\":\"{maxexp}\",\"fontSize\":12,\"align\":\"LowerRight\",\"color\":\"1 1 1 0.4\"},{\"type\":\"RectTransform\",\"anchormin\":\"0.5 0.127\",\"anchormax\":\"0.92 0.25\",\"offsetmax\":\"-5 0\"}]}";
        public string mainBar2 = ",{\"name\":\"MAIN\",\"parent\":\"cui\",\"components\":[{\"type\":\"UnityEngine.UI.Image\",\"color\":\"0 0 0 0\"},{\"type\":\"RectTransform\",\"anchormin\":\"{minx} {miny}\",\"anchormax\":\"{maxx} {maxy}\",\"offsetmax\":\"0 0\"}]},{\"name\":\"MAINBAR\",\"parent\":\"MAIN\",\"components\":[{\"type\":\"UnityEngine.UI.Image\",\"color\":\"{backbar}\"},{\"type\":\"RectTransform\",\"anchormin\":\"0.055 0.09\",\"anchormax\":\"0.945 0.235\",\"offsetmax\":\"0 0\"}]},{\"name\":\"MAIIMAGE\",\"parent\":\"MAIN\",\"components\":[{\"type\":\"UnityEngine.UI.RawImage\",\"sprite\":\"assets/content/textures/generic/fulltransparent.tga\",\"png\":\"{png}\",\"color\":\"1 1 1 1\"},{\"type\":\"RectTransform\",\"anchormin\":\"0 0\",\"anchormax\":\"1 1\",\"offsetmax\":\"0 0\"}]},{\"name\":\"NAMEFRAG\",\"parent\":\"MAIN\",\"components\":[{\"type\":\"UnityEngine.UI.Text\",\"text\":\"{NAME}\",\"fontSize\":18,\"align\":\"MiddleLeft\"},{\"type\":\"RectTransform\",\"anchormin\":\"0.02 0.7\",\"anchormax\":\"1 0.98\",\"offsetmin\":\"10 0\",\"offsetmax\":\"0 0\"}]},{\"name\":\"LEVEL\",\"parent\":\"MAIN\",\"components\":[{\"type\":\"UnityEngine.UI.Text\",\"text\":\"{LVL}/{MAXLVL}\",\"fontSize\":18,\"align\":\"MiddleRight\",\"color\":\"{lvlcolor}\"},{\"type\":\"RectTransform\",\"anchormin\":\"0 0.7\",\"anchormax\":\"0.98 1\",\"offsetmax\":\"-10 0\"}]},{\"name\":\"ACTIVEBAR\",\"parent\":\"MAINBAR\",\"components\":[{\"type\":\"UnityEngine.UI.Image\",\"color\":\"{mainbar}\"},{\"type\":\"RectTransform\",\"anchormin\":\"0 0\",\"anchormax\":\"{bar} 1\",\"offsetmax\":\"0 0\"}]},{\"name\":\"BONUSE\",\"parent\":\"MAIN\",\"components\":[{\"type\":\"UnityEngine.UI.Text\",\"text\":\"{info}\",\"align\":\"MiddleLeft\",\"fontSize\":10,\"color\":\"1 1 1 0.787812\"},{\"type\":\"RectTransform\",\"anchormin\":\"0.07 0.25\",\"anchormax\":\"1 0.65\",\"offsetmin\":\"10 0\",\"offsetmax\":\"0 0\"}]},{\"name\":\"SMALLINFO\",\"parent\":\"MAIN\",\"components\":[{\"type\":\"UnityEngine.UI.Text\",\"text\":\"{smallinfo}\",\"fontSize\":8,\"align\":\"LowerLeft\",\"color\":\"1 1 1 0.4\"},{\"type\":\"RectTransform\",\"anchormin\":\"0.02 0.68\",\"anchormax\":\"1 0.8\",\"offsetmin\":\"10 0\",\"offsetmax\":\"0 0\"}]},{\"name\":\"EXP\",\"parent\":\"MAIN\",\"components\":[{\"type\":\"UnityEngine.UI.Text\",\"text\":\"{exp}\",\"fontSize\":8,\"align\":\"LowerLeft\",\"color\":\"1 1 1 0.4\"},{\"type\":\"RectTransform\",\"anchormin\":\"0.07 0.127\",\"anchormax\":\"0.5 0.25\",\"offsetmin\":\"5 0\",\"offsetmax\":\"0 0\"}]},{\"name\":\"MAXEXP\",\"parent\":\"MAIN\",\"components\":[{\"type\":\"UnityEngine.UI.Text\",\"text\":\"{maxexp}\",\"fontSize\":8,\"align\":\"LowerRight\",\"color\":\"1 1 1 0.4\"},{\"type\":\"RectTransform\",\"anchormin\":\"0.5 0.127\",\"anchormax\":\"0.92 0.25\",\"offsetmax\":\"-5 0\"}]}";
        public Dictionary<string, string> messagesRU = new Dictionary<string, string> {
            {
                "miner", "ШАХТЕР"
            }
            , {
                "miner_hint", "добывай камень и железную руду"
            }
            , {
                "miner_description", "<color=#5da86c>x{0}</color> добыча камня\n<color=#5da86c>x{1}</color> добыча железной руды\n<color=#5da86c>x{2}</color> добыча высококачественной железной руды"
            }
            , {
                "alchemist", "АЛХИМИК"
            }
            , {
                "alchemist_hint", "добывай сульфурную руду"
            }
            , {
                "alchemist_description", "<color=#5da86c>x{0}</color> добыча сульфура\n<color=#5da86c>x{1}</color> скорость переплавки в печах"
            }
            , {
                "woodcutter", "ДРОВОСЕК"
            }
            , {
                "woodcutter_hint", "добывай дерево"
            }
            , {
                "woodcutter_description_new", "<color=#5da86c>x{0}</color> добыча дерева\n<color=#5da86c>{1}%</color> шанс угля с дерева\n<color=#5da86c>x{2}</color> cкорость производства в НПЗ"
            }
            , {
                "hunter", "ОХОТНИК"
            }
            , {
                "hunter_hint", "убивай животных и потроши их"
            }
            , {
                "hunter_description", "<color=#b76c6c>x{0}</color> получаемые ресурсы при потрошении\n<color=#b76c6c>{1}%</color> уменьшение урона от животных\n<color=#b76c6c>{2}%</color> увеличение урона по животным"
            }
            , {
                "marauder", "МАРОДЕР"
            }
            , {
                "marauder_hint", "убивай ботов и лутай их"
            }
            , {
                "marauder_description", "<color=#b76c6c>x{0}</color> лут с ботов\n<color=#b76c6c>{1}%</color> уменьшение урона от ботов\n<color=#b76c6c>{2}%</color> увеличение урона по ботам"
            }
            , {
                "technicist", "ТЕХНИК"
            }
            , {
                "technicist_hint", "уничтожай технику и лутай ее"
            }
            , {
                "technicist_description", "<color=#b76c6c>x{0}</color> лут с танка и вертолета\n<color=#b76c6c>{1}%</color> уменьшение урона от танка и вертолета\n<color=#b76c6c>{2}%</color> увеличение урона по танку и вертолету"
            }
            , {
                "jeweler", "ЮВЕЛИР"
            }
            , {
                "jeweler_hint", "облутывай аирдропы, закрытые и элитные ящики"
            }
            , {
                "jeweler_description", "<color=#7773b4>x{0}</color> лут с аирдропов\n<color=#7773b4>x{1}</color> лут с закрытых ящиков\n<color=#7773b4>x{2}</color> лут с элитных ящиков"
            }
            , {
                "dustman", "МУСОРЩИК"
            }
            , {
                "dustman_hint", "лутай бочки, мусорки и обычные ящики"
            }
            , {
                "dustman_description", "<color=#7773b4>x{0}</color> лут с бочек\n<color=#7773b4>x{1}</color> лут с обычных ящиков и мусорок"
            }
            , {
                "farmer", "ФЕРМЕР"
            }
            , {
                "farmer_hint", "собирай урожай"
            }
            , {
                "farmer_description", "<color=#7773b4>x{0}</color> урожай овощей\n<color=#7773b4>x{1}</color> урожай ягод"
            }
            , {
                "ui_exit", "ЗАКРЫТЬ"
            }
            , {
                "ui_header", "НАВЫКИ"
            }
            , {
                "expbar_main", "{skillname} ◉ EXP {exp}/{needexp}"
            }
            , {
                "chat_uplevel", "Навык <color=#ccff66>{skill}</color> прокачался до <color=#ccff66>{level} ур.</color>\nВаши новые бонусы:\n{bonuses}\n\n<color=#ccff66>/skill</color> - список доступных навыков и их бонусы"
            }
            , {
                "chat_welcome", "Добро пожаловать на сервер.\nНа сервере присутствует система прокачки навыков, команда <color=#ccff66>/skill</color>."
            }
            , {
                "chat_broadcast", "<size=11>Игрок <color=#ccff99>{name}</color> повысил навык <color=#ccff66>{skill}</color> до <color=#ccff66>{level} ур.</color>\n<color=#ccff66>/skill</color></size>"
            }
        }
        ;
        public Dictionary<string, string> messagesEN = new Dictionary<string, string> {
            {
                "miner", "MINER"
            }
            , {
                "miner_hint", "mine stone and iron ore"
            }
            , {
                "miner_description", "<color=#5da86c>x{0}</color> stone mining\n<color=#5da86c>x{1}</color> iron ore mining\n<color=#5da86c>x{2}</color> mining of high quality iron ore"
            }
            , {
                "alchemist", "ALCHEMIS
// ... [Code preview truncated due to length. Full source in attached file] ...

Автор
15FPS
Скачиваний
0
Просмотры
1
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок
Сверху