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

FREE XPSystem : 0.0.1 0.0.1

Нет прав для скачивания
C#:
using System;
using System.Globalization;
using Oxide.Core.Plugins;
using Oxide.Core.Configuration;
using Oxide.Core.Libraries;
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Oxide.Core;
using UnityEngine;
using VLB;
namespace Oxide.Plugins {
    [Info("XPSystem", "mabe", "0.0.1")]
    class XPSystem : RustPlugin {
        private static Configuration Settings = new Configuration();
#region Configuration [Конфиг]
        private class Configuration {
            public class API {
                [JsonProperty("APIKey (Секретный ключ)")]
                public string SecretKey = "";
                [JsonProperty("ServerID (ИД сервера в сервисе)")]
                public string ShopID = "";
            }
            public class Balance {
                [JsonProperty("Сколько денег на баланс магазина будет выдаваться")]
                public int Money = 5;
            }
            public class Gather {
                [JsonProperty("Сколько игроку будет выдаваться XP за подбирание ресурсов")]
                public float CollectiblePickup = 0.15f;
                //Settings.GatherSettings.CollectiblePickup
                [JsonProperty("Сколько игроку будет выдаваться XP за подбирание плантации")]
                public float CropGather = 0.15f;
                //Settings.GatherSettings.CropGather
                [JsonProperty("Сколько игроку будет выдаваться XP за фарм камней/дерева")]
                public float DispenserGather = 0.5f;
                //Settings.GatherSettings.DispenserGather
            }
            [JsonProperty("Настройки API плагина")]
            public API APISettings = new API();
            [JsonProperty("Настройка кол-ва выдачи баланса игроку")]
            public Balance BalanceSettings = new Balance();
            [JsonProperty("Настройка кол-ва выдачи XP с фарма ресурсов")]
            public Gather GatherSettings = new Gather();
        }
#endregion
#region ConfigLoad / DataFiles [Загрузка конфига и информация в дате]
        protected override void LoadConfig() {
            base.LoadConfig();
            try {
                Settings = Config.ReadObject<Configuration>();
                if (Settings?.APISettings == null) LoadDefaultConfig();
            }
            catch {
                PrintWarning($"Ошибка в конфиге...Создаю новую конфигурацию!");
                LoadDefaultConfig();
            }
            NextTick(SaveConfig);
        }
        protected override void LoadDefaultConfig() {
            Settings = new Configuration();
        }
        protected override void SaveConfig() => Config.WriteObject(Settings);
        public class Xp {
            [JsonProperty("Количество XP у игрока:")]
            public float XP {
                get;
                set;
            }
        }
        private Dictionary<ulong, Xp> XPS {
            get;
            set;
        }
#endregion
#region GameStores [Запрос в GameStores для обмена XP на рубли]
        bool LogsPlayer = true;
        void MoneyPlus(ulong userId, int amount) {
            ApiRequestBalance(new Dictionary<string, string>() {
                {
                    "action", "moneys"
                }
                , {
                    "type", "plus"
                }
                , {
                    "steam_id", userId.ToString()
                }
                , {
                    "amount", amount.ToString()
                }
            }
            );
        }
        void ApiRequestBalance(Dictionary<string, string> args) {
            string url = $"http://panel.gamestores.ru/api?shop_id={Settings.APISettings.ShopID}&secret={Settings.APISettings.SecretKey}{string.Join("", args.Select(arg => $"& {
                arg.Key
            }
            = {
                arg.Value
            }
            ").ToArray())}";
            webrequest.EnqueueGet(url, (i, s) => {
                if (i != 200 && i != 201) {
                    PrintError($"{url}\nCODE {i}: {s}");
                    if (LogsPlayer) {
                        LogToFile("logError", $"({DateTime.Now.ToShortTimeString()}): {url}\nCODE {i}: {s}", this);
                    }
                }
                else {
                    if (LogsPlayer) {
                        LogToFile("logWEB", $"({DateTime.Now.ToShortTimeString()}): " + "Пополнение счета:" + $"{string.Join(" ", args.Select(arg => $" {
                            arg.Value
                        }
                        ").ToArray()).Replace("moneys", "").Replace("plus", "")}", this);
                    }
                }
                if (i == 201) {
                    PrintWarning("Плагин не работает!");
                    Interface.Oxide.UnloadPlugin(Title);
                }
            }
            , this);
        }
#endregion
#region XPFromGather [Добыча]
        object OnCollectiblePickup(Item item, BasePlayer player) {
            XPS[player.userID].XP += Settings.GatherSettings.CollectiblePickup;
            return null;
        }
        object OnCropGather(PlantEntity plant, Item item, BasePlayer player) {
            XPS[player.userID].XP += Settings.GatherSettings.CropGather;
            return null;
        }
        object OnDispenserBonus(ResourceDispenser dispenser, BasePlayer player, Item item) {
            XPS[player.userID].XP += Settings.GatherSettings.DispenserGather;
            return null;
        }
#endregion
#region Hooks [Хуки/проверка]
        private void OnServerInitialized() {
            if (Interface.Oxide.DataFileSystem.ExistsDatafile("XPSystem/Data")) {
                XPS = Interface.Oxide.DataFileSystem.ReadObject<Dictionary<ulong, Xp>>("XPTrade/Database");
            }
            else {
                XPS = new Dictionary<ulong, Xp>();
            }
            BasePlayer.activePlayerList.ForEach(OnPlayerInit);
            timer.Every(60, SaveData);
            SaveConfig();
        }
        private void OnPlayerInit(BasePlayer player) {
            if (!XPS.ContainsKey(player.userID)) XPS.Add(player.userID, new Xp {
                XP = 0
            }
            );
        }
        private void SaveData() {
            Interface.Oxide.DataFileSystem.WriteObject("XPSystem/Database", XPS);
        }
#endregion
#region Commands [Команды]
        [ChatCommand("xp")]
        private void CmdXp(BasePlayer player, string command, string[] args) {
            if (args.Length == 0) {
                SendReply(player, $"<size=16>На вашем счету <color=#a5e664>{XPS[player.userID].XP} XP</color></size>\nДля того, чтобы обменять XP - введите: <color=#a5e664>/xp sell</color>\nДля обмена <color=#a5e664>XP</color> требуется <color=#a5e664>100 единиц</color>, за которые вы получите <color=#a5e664>5 рублей</color> на ваш баланс в магазине.");
            }
            else if (args.Length == 1) {
                switch (args[0].ToLower()) {
                    case "sell" : {
                        if (XPS[player.userID].XP >= 100) {
                            SendReply(player, $"<size=14>Ваши <color=#a5e664>XP</color> были переведены в деньги на баланс магазина</size>\nВы получили <color=#a5e664>5 руб.</color> на ваш баланс в магазине!\n<color=#a5e664>В случае не поступления средств сообщите администрации!</color>");
                            XPS[player.userID].XP -= 100;
                            MoneyPlus(player.userID, Settings.BalanceSettings.Money);
                            return;
                        }
                        else {
                            SendReply(player, $"<size=14>Произошла ошибка!</size>\nДля обмена нужно иметь <color=#a5e664>100</color> XP!\nНа вашем счету <color=#a5e664>{XPS[player.userID].XP} XP</color>!");
                            return;
                        }
                    }
                }
            }
        }
        [ConsoleCommand("xp.give")]
        private void CmdXpgv(ConsoleSystem.Arg args) {
            BasePlayer player = args.Player();
            BasePlayer target = BasePlayer.Find(args.Args[0]);
            if (target != null) {
                if (XPS.ContainsKey(target.userID)) {
                    XPS[target.userID].XP += int.Parse(args.Args[1]);
                    Puts("Баланс успешно изменен");
                }
            }
        }
#endregion
#region Helpers [Хелперы]
        private static string HexToRustFormat(string hex) {
            if (string.IsNullOrEmpty(hex)) {
                hex = "#FFFFFFFF";
            }
            var str = hex.Trim('#');
            if (str.Length == 6) str += "FF";
            if (str.Length != 8) {
                throw new Exception(hex);
                throw new InvalidOperationException("Cannot convert a wrong format.");
            }
            var r = byte.Parse(str.Substring(0, 2), NumberStyles.HexNumber);
            var g = byte.Parse(str.Substring(2, 2), NumberStyles.HexNumber);
            var b = byte.Parse(str.Substring(4, 2), NumberStyles.HexNumber);
            var a = byte.Parse(str.Substring(6, 2), NumberStyles.HexNumber);
            Color color = new Color32(r, g, b, a);
            return $"{color.r:F2} {color.g:F2} {color.b:F2} {color.a:F2}";
        }
#endregion
    }
}

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