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

FREE EventManager : 1.2.12 1.2.12

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System.Reflection;
using System;
using System.Data;
using System.Collections.Generic;
using UnityEngine;
using Oxide.Core;
using Oxide.Core.Plugins;
using Rust;
namespace Oxide.Plugins {
    [Info("Event Manager", "Reneb", "1.2.12", ResourceId = 740)]
    class EventManager : RustPlugin {
        ////////////////////////////////////////////////////////////
        // Setting all fields //////////////////////////////////////
        ////////////////////////////////////////////////////////////
        [PluginReference]
        Plugin Spawns;
        [PluginReference]
        Plugin Kits;
        [PluginReference]
        Plugin ZoneManager;
        [PluginReference]
        Plugin DeadPlayersList;
        [PluginReference]
        Plugin FriendlyFire;
        private string EventSpawnFile;
        private string EventGameName;
        private string itemname;
        private bool EventOpen;
        private bool EventStarted;
        private bool EventEnded;
        private bool EventPending;
        private int EventMaxPlayers = 0;
        private int EventMinPlayers = 0;
        private int EventAutoNum = -1;
        private bool isBP;
        private bool Changed;
        private List<string> EventGames;
        private List<EventPlayer> EventPlayers;
        private ItemDefinition itemdefinition;
        private int stackable;
        private int giveamount;
        public List<Oxide.Plugins.Timer> AutoArenaTimers = new List<Oxide.Plugins.Timer>();
        public float LastAnnounce;
        public bool AutoEventLaunched = false;
        public static FieldInfo lastPositionValue;
        ////////////////////////////////////////////////////////////
        // EventPlayer class to store informations /////////////////
        ////////////////////////////////////////////////////////////
        class EventInvItem {
            public string itemid;
            public string bp;
            public string skinid;
            public string container;
            public string amount;
            public EventInvItem() {
            }
            public EventInvItem(int itemid, bool bp, string container, int amount, int skinid = 0) {
                this.itemid = itemid.ToString();
                this.bp = bp.ToString();
                this.skinid = skinid.ToString();
                this.amount = amount.ToString();
                this.container = container;
            }
        }
        class EventPlayer : MonoBehaviour {
            public BasePlayer player;
            public bool inEvent;
            public bool savedInventory;
            public bool savedHome;
            public string zone;
            public List<EventInvItem> InvItems = new List<EventInvItem>();
            public Vector3 Home;
            void Awake() {
                inEvent = true;
                savedInventory = false;
                savedHome = false;
                player = GetComponent<BasePlayer>();
            }
            public void SaveHome() {
                if (!savedHome) Home = player.transform.position;
                savedHome = true;
            }
            public void TeleportHome() {
                if (!savedHome) return;
                ForcePlayerPosition(player, Home);
                savedHome = false;
            }
            public void SaveInventory() {
                if (savedInventory) return;
                InvItems.Clear();
                foreach (Item item in player.inventory.containerWear.itemList) {
                    InvItems.Add(new EventInvItem(item.info.itemid, item.IsBlueprint(), "wear", item.amount, item.skin));
                }
                foreach (Item item in player.inventory.containerMain.itemList) {
                    InvItems.Add(new EventInvItem(item.info.itemid, item.IsBlueprint(), "main", item.amount, item.skin));
                }
                foreach (Item item in player.inventory.containerBelt.itemList) {
                    InvItems.Add(new EventInvItem(item.info.itemid, item.IsBlueprint(), "belt", item.amount, item.skin));
                }
                savedInventory = true;
            }
            public void RestoreInventory() {
                foreach (EventInvItem kitem in InvItems) {
                    Item item = ItemManager.CreateByItemID(int.Parse(kitem.itemid), int.Parse(kitem.amount), Convert.ToBoolean(kitem.bp));
                    item.skin = int.Parse(kitem.skinid);
                    player.inventory.GiveItem(item, kitem.container == "belt" ? player.inventory.containerBelt : kitem.container == "wear" ? player.inventory.containerWear : player.inventory.containerMain);
                }
                savedInventory = false;
            }
        }
        //////////////////////////////////////////////////////////////////////////////////////
        // Some Static methods that can be called from the EventPlayer Class /////////////////
        //////////////////////////////////////////////////////////////////////////////////////
        static void PutToSleep(BasePlayer player) {
            if (!player.IsSleeping()) {
                player.SetPlayerFlag(BasePlayer.PlayerFlags.Sleeping, true);
                if (!BasePlayer.sleepingPlayerList.Contains(player)) {
                    BasePlayer.sleepingPlayerList.Add(player);
                }
                player.CancelInvoke("InventoryUpdate");
                player.inventory.crafting.CancelAll(true);
            }
        }
        static void ForcePlayerPosition(BasePlayer player, Vector3 destination) {
            PutToSleep(player);
            player.transform.position = destination;
            lastPositionValue.SetValue(player, player.transform.position);
            player.ClientRPCPlayer(null, player, "ForcePositionTo", new object[] {
                destination
            }
            );
            player.TransformChanged();
            player.SetPlayerFlag(BasePlayer.PlayerFlags.ReceivingSnapshot, true);
            player.UpdateNetworkGroup();
            player.SendNetworkUpdateImmediate(false);
            player.ClientRPCPlayer(null, player, "StartLoading");
            player.SendFullSnapshot();
            player.SetPlayerFlag(BasePlayer.PlayerFlags.ReceivingSnapshot, false);
            player.ClientRPCPlayer(null, player, "FinishLoading");
        }
        //////////////////////////////////////////////////////////////////////////////////////
        // Oxide Hooks ///////////////////////////////////////////////////////////////////////
        //////////////////////////////////////////////////////////////////////////////////////
        void Loaded() {
            Changed = false;
            EventGames = new List<string>();
            EventPlayers = new List<EventPlayer>();
            lastPositionValue = typeof(BasePlayer).GetField("lastPositionValue", (BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic));
            LoadData();
        }
        void OnServerInitialized() {
            EventOpen = false;
            EventStarted = false;
            EventEnded = true;
            EventPending = false;
            EventGameName = defaultGame;
            InitializeTable();
            timer.Once(0.1f, () => InitializeZones());
            timer.Once(0.2f, () => InitializeGames());
        }
        void InitializeGames() {
            Interface.CallHook("RegisterGame");
            SelectSpawnfile(defaultSpawnfile);
        }
        void Unload() {
            EndEvent();
            var objects = GameObject.FindObjectsOfType(typeof(EventPlayer));
            if (objects != null) foreach (var gameObj in objects) GameObject.Destroy(gameObj);
        }
        void OnPlayerRespawned(BasePlayer player) {
            if (!(player.GetComponent<EventPlayer>())) return;
            if (player.GetComponent<EventPlayer>().inEvent) {
                if (!EventStarted) return;
                Interface.CallHook("OnEventPlayerSpawn", new object[] {
                    player
                }
                );
            }
            else {
                RedeemInventory(player);
                TeleportPlayerHome(player);
                TryErasePlayer(player);
            }
        }
        void OnPlayerAttack(BasePlayer player, HitInfo hitinfo) {
            if (!EventStarted) return;
            if (player.GetComponent<EventPlayer>() == null || !(player.GetComponent<EventPlayer>().inEvent)) {
                return;
            }
            else if (hitinfo.HitEntity != null) {
                Interface.CallHook("OnEventPlayerAttack", new object[] {
                    player, hitinfo
                }
                );
            }
            return;
        }
        void OnEntityDeath(BaseEntity entity, HitInfo hitinfo) {
            if (!EventStarted) return;
            if (!(entity is BasePlayer)) return;
            if ((entity as BasePlayer).GetComponent<EventPlayer>() == null) return;
            Interface.CallHook("OnEventPlayerDeath", new object[] {
                (entity as BasePlayer), hitinfo
            }
            );
            return;
        }
        void OnPlayerDisconnected(BasePlayer player) {
            if (player.GetComponent<EventPlayer>() != null) {
                LeaveEvent(player);
            }
        }
        ////////////////////////////////////////////////////////////
        // Zone Management
        ////////////////////////////////////////////////////////////
        void InitializeZones() {
            foreach (KeyValuePair<string, EventZone> pair in zonelogs) {
                InitializeZone(pair.Key);
            }
        }
        void InitializeZone(string name) {
            if (zonelogs[name] == null) return;
            ZoneManager?.Call("CreateOrUpdateZone", name, new string[] {
                "radius", zonelogs[name].radius
            }
            , zonelogs[name].GetPosition());
            if (EventGames.Contains(name)) Interface.CallHook("OnPostZoneCreate", name);
        }
        void UpdateZone(string name, string[] args) {
            ZoneManager?.Call("CreateOrUpdateZone", name, args);
        }
        public class EventZone {
            public string name;
            public string x;
            public string y;
            public string z;
            public string radius;
            Vector3 position;
            public EventZone(string name, Vector3 position, float radius) {
                this.name = name;
                this.x = position.x.ToString();
                this.y = position.y.ToString();
                this.z = position.z.ToString();
                this.radius = radius.ToString();
            }
            public Vector3 GetPosition() {
                if (position == default(Vector3)) position = new Vector3(float.Parse(this.x), float.Parse(this.y), float.Parse(this.z));
                return position;
            }
        }
        static StoredData storedData;
        static Hash<string, EventZone> zonelogs = new Hash<string, EventZone>();
        static Hash<string, Reward> rewards = new Hash<string, Reward>();
        class StoredData {
            public HashSet<EventZone> ZoneLogs = new HashSet<EventZone>();
            public Hash<string, string> Tokens = new Hash<string, string>();
            public HashSet<Reward> Rewards = new HashSet<Reward>();
            public StoredData() {
            }
        }
        void OnServerSave() {
            SaveData();
        }
        void SaveData() {
            Interface.GetMod().DataFileSystem.WriteObject("EventManager", storedData);
        }
        void LoadData() {
            zonelogs.Clear();
            try {
                storedData = Interface.GetMod().DataFileSystem.ReadObject<StoredData>("EventManager");
            }
            catch {
                storedData = new StoredData();
            }
            foreach (var thelog in storedData.ZoneLogs) {
                zonelogs[thelog.name] = thelog;
            }
            foreach (var thelog in storedData.Rewards) {
                rewards[thelog.name] = thelog;
            }
        }
        //////////////////////////////////////////////////////////////////////////////////////
        // Tokens Manager
        //////////////////////////////////////////////////////////////////////////////////////
        Dictionary<string, string> displaynameToShortname = new Dictionary<string, string>();
        private void InitializeTable() {
            displaynameToShortname.Clear();
            List<ItemDefinition> ItemsDefinition = ItemManager.GetItemDefinitions() as List<ItemDefinition>;
            foreach (ItemDefinition itemdef in ItemsDefinition) {
                displaynameToShortname.Add(itemdef.displayName.english.ToString().ToLower(), itemdef.shortname.ToString());
            }
        }
        object GiveReward(BasePlayer player, string rewardname, int amount) {
            if (rewards[rewardname] == null) return "This reward doesn't exist";
            amount = amount * (rewards[rewardname]).GetAmount();
            if (rewards[rewardname].IsKit()) {
                if (Kits == null) return "Kits plugin couldn't be found";
                if (!(bool)Kits.Call("isKit", rewards[rewardname].item)) return "The kit doesn't exist anymore";
                for (int i = 1; i < amount; i++) {
                    Kits.Call("GiveKit", player, rewards[rewardname].item);
                }
                return (bool)Kits.Call("GiveKit", player, rewards[rewardname].item);
            }
            var definition = ItemManager.FindItemDefinition(rewards[rewardname].item);
            if (definition == null) return string.Format("Item not found {0}", rewards[rewardname].item);
            if (definition.stackable > 1) player.inventory.GiveItem(ItemManager.CreateByItemID((int)definition.itemid, amount, false), player.inventory.containerMain);
            else {
                for (int i = 0; i < amount; i++) {
                    player.inventory.GiveItem(ItemManager.CreateByItemID((int)definition.itemid, 1, false), player.inventory.containerMain);
                }
            }
            return true;
        }
        public class Reward {
            public string name;
            public string cost;
            public string kit;
            public string item;
            public string amount;
            public Reward() {
            }
            public Reward(string name, int cost, bool kit, string item, int amount) {
                this.name = name;
                this.cost = cost.ToString();
                this.kit = kit.ToString();
                this.item = item;
                this.amount = amount.ToString();
            }
            public int GetCost() {
                return int.Parse(cost);
            }
            public int GetAmount() {
                return int.Parse(amount);
            }
            public bool IsKit() {
                return Convert.ToBoolean(kit);
            }
        }
        void AddTokens(string userid, int amount) {
            storedData.Tokens[userid] = (GetTokens(userid) + amount).ToString();
        }
        int GetTokens(string userid) {
            if (storedData.Tokens[userid] == null) return 0;
            return int.Parse(storedData.Tokens[userid]);
        }
        void RemoveTokens(string userid, int amount) {
            storedData.Tokens[userid] = (GetTokens(userid) - amount).ToString();
        }
        void SetTokens(string userid, int amount) {
            storedData.Tokens[userid] = amount.ToString();
        }
        public string tokenoverlay = @"[  
		                { 
							""name"": ""EventManagerOverlay"",
                            ""parent"": ""Overlay"",
                            ""components"":
                            [
                                {
                                     ""type"":""UnityEngine.UI.Image"",
                                     ""color"":""0.1 0.1 0.1 1"",
                                },
                                {
                                    ""type"":""RectTransform"",
                                    ""anchormin"": ""0 0"",
                                    ""anchormax"": ""1 1""
                                },
                                {
                                    ""type"":""NeedsCursor"",
                                }
                            ]
                        },
                        {
                            ""parent"": ""EventManagerOverlay"",
                            ""components"":
                            [
                                {
                                    ""type"":""UnityEngine.UI.Text"",
                                    ""text"":""Event Manager"",
                                    ""fontSize"":30,
                                    ""align"": ""MiddleCenter"",
                                },
                                {
                                    ""type"":""RectTransform"",
                                    ""anchormin"": ""0.3 0.80"",
                                    ""anchormax"": ""0.7 0.90""
                                }
                            ]
                        },
                        {
                            ""parent"": ""EventManagerOverlay"",
                            ""components"":
                            [
                                {
                                    ""type"":""UnityEngine.UI.Text"",
                                    ""text"":""{msg}"",
                                    ""fontSize"":15,
                                    ""align"": ""MiddleCenter"",
                                },
                                {
                                    ""type"":""RectTransform"",
                                    ""anchormin"": ""0.3 0.70"",
                                    ""anchormax"": ""0.7 0.79""
                                }
                            ]
                        },
                        {
                            ""parent"": ""EventManagerOverlay"",
                            ""components"":
                            [
                                {
                                    ""type"":""UnityEngine.UI.Text"",
                                    ""text"":""Reward"",
                                    ""fontSize"":20,
                                    ""align"": ""MiddleLeft"",
                                },
                                {
                                    ""type"":""RectTransform"",
                                    ""anchormin"": ""0.2 0.60"",
                                    ""anchormax"": ""0.4 0.65""
                                }
                            ]
                        },
                        {
                            ""parent"": ""EventManagerOverlay"",
                            ""components"":
                            [
                                {
                                    ""type"":""UnityEngine.UI.Text"",
                                    ""text"":""Amount"",
                                    ""fontSize"":20,
                                    ""align"": ""MiddleLeft"",
                                },
                                {
                                    ""type"":""RectTransform"",
                                    ""anchormin"": ""0.49 0.60"",
                                    ""anchormax"": ""0.54 0.65""
                                }
                            ]
                        },
                        {
                            ""parent"": ""EventManagerOverlay"",
                            ""components"":
                            [
                                {
                                    ""type"":""UnityEngine.UI.Text"",
                                    ""text"":""Cost"",
                                    ""fontSize"":20,
                                    ""align"": ""MiddleLeft"",
                                },
                                {
                                    ""type"":""RectTransform"",
                                    ""anchormin"": ""0.55 0.60"",
                                    ""anchormax"": ""0.6 0.65""
                                }
                            ]
                        },
                        {
                            ""parent"": ""EventManagerOverlay"",
                            ""components"":
                            [
                                {
                                    ""type"":""UnityEngine.UI.Text"",
                                    ""text"":""Claim"",
                                    ""fontSize"":20,
                                    ""align"": ""MiddleLeft"",
                                },
                                {
                                    ""type"":""RectTransform"",
                                    ""anchormin"": ""0.65 0.60"",
                                    ""anchormax"": ""0.75 0.65""
                                }
                            ]
                        },
                        {
                            ""parent"": ""EventManagerOverlay"",
                            ""components"":
                            [
                                {
                                    ""type"":""UnityEngine.UI.Text"",
                                    ""text"":""Close"",
                                    ""fontSize"":20,
                                    ""align"": ""MiddleCenter"",
                                },
                                {
                                    ""type"":""RectTransform"",
                                    ""anchormin"": ""0.5 0.20"",
                                    ""anchormax"": ""0.7 0.25""
                                }
                            ]
                        },
                        {
                            ""parent"": ""EventManagerOverlay"",
                            ""components"":
                            [
                                {
                                    ""type"":""UnityEngine.UI.Button"",
                                    ""close"":""EventManagerOverlay"",
                                    ""color"": ""0.5 0.5 0.5 0.2"",
                                    ""imagetype"": ""Tiled""
                                },
                                {
                                    ""type"":""RectTransform"",
                                    ""anchormin"": ""0.5 0.20"",
                                    ""anchormax"": ""0.7 0.25""
                                }
                            ]
                        },
                        {
                            ""parent"": ""EventManagerOverlay"",
                            ""components"":
                            [
                                {
                                    ""type"":""UnityEngine.UI.Text"",
                                    ""text"":""<<"",
                                    ""fontSize"":20,
                                    ""align"": ""MiddleCenter"",
                                },
                                {
                                    ""type"":""RectTransform"",
                                    ""anchormin"": ""0.2 0.20"",
                                    ""anchormax"": ""0.3 0.25""
                                }
                            ]
                        },
                        {
                            ""parent"": ""EventManagerOverlay"",
                            ""components"":
                            [
                                {
                                    ""type"":""UnityEngine.UI.Button"",
                                    ""color"": ""0.5 0.5 0.5 0.2"",
                                    ""command"":""reward.show {rewardpageminus}"",
                                    ""imagetype"": ""Tiled""
                                },
                                {
                                    ""type"":""RectTransform"",
                                    ""anchormin"": ""0.2 0.20"",
                                    ""anchormax"": ""0.3 0.25""
                                }
                            ]
                        },
                        {
                            ""parent"": ""EventManagerOverlay"",
                            ""components"":
                            [
                                {
                                    ""type"":""UnityEngine.UI.Text"",
                                    ""text"":"">>"",
                                    ""fontSize"":20,
                                    ""align"": ""MiddleCenter"",
                                },
                                {
                                    ""type"":""RectTransform"",
                                    ""anchormin"": ""0.35 0.20"",
                                    ""anchormax"": ""0.45 0.25""
                                }
                            ]
                        },
                        {
                            ""parent"": ""EventManagerOverlay"",
                            ""components"":
                            [
                                {
                                    ""type"":""UnityEngine.UI.Button"",
                                    ""color"": ""0.5 0.5 0.5 0.2"",
                                    ""command"":""reward.show {rewardpageplus}"",
                                    ""imagetype"": ""Tiled""
                                },
                                {
                                    ""type"":""RectTransform"",
                                    ""anchormin"": ""0.35 0.20"",
                                    ""anchormax"": ""0.45 0.25""
                                }
                            ]
                        },
                        
                    ]
                    ";
        string tokenjson = @"[
        				{
                            ""parent"": ""EventManagerOverlay"",
                            ""components"":
                            [
                                {
                                    ""type"":""UnityEngine.UI.Text"",
                                    ""text"":""{rewardname}"",
                                    ""fontSize"":15,
                                    ""align"": ""MiddleLeft"",
                                },
                                {
                                    ""type"":""RectTransform"",
                                    ""anchormin"": ""0.2 {ymin}"",
                                    ""anchormax"": ""0.4 {ymax}""
                                }
                            ]
                        },
                        {
                            ""parent"": ""EventManagerOverlay"",
                            ""components"":
                            [
                                {
                                    ""type"":""UnityEngine.UI.Text"",
                                    ""text"":""{rewardamount}"",
                                    ""fontSize"":15,
                                    ""align"": ""MiddleLeft"",
                                },
                                {
                                    ""type"":""RectTransform"",
                                    ""anchormin"": ""0.49 {ymin}"",
                                    ""anchormax"": ""0.54 {ymax}""
                                }
                            ]
                        },
                        {
                            ""parent"": ""EventManagerOverlay"",
                            ""components"":
                            [
                                {
                                    ""type"":""UnityEngine.UI.Text"",
                                    ""text"":""{rewardcost}"",
                                    ""fontSize"":15,
                                    ""align"": ""MiddleLeft"",
                                },
                                {
                                    ""type"":""RectTransform"",
                                    ""anchormin"": ""0.55 {ymin}"",
                                    ""anchormax"": ""0.6 {ymax}""
                                }
                            ]
                        },
                        {
                            ""parent"": ""EventManagerOverlay"",
                            ""components"":
                            [
                                {
                                    ""type"":""UnityEngine.UI.Button"",
                                    ""close"":""EventManagerOverlay"",
                                    ""command"":""reward.claim {rewardcmd}"",
                                    ""color"": ""{color}"",
                                    ""imagetype"": ""Tiled""
                                },
                                {
                                    ""type"":""RectTransform"",
                                    ""anchormin"": ""0.65 {ymin}"",
                                    ""anchormax"": ""0.69 {ymax}""
                                }
                            ]
                        }
                    ]
                    ";
        void ShowRewards(BasePlayer player, double from) {
            if (from < 0) return;
            if (from >= rewards.Count) return;
            CommunityEntity.ServerInstance.ClientRPCEx(new Network.SendInfo() {
                connection = player.net.connection
            }
            , null, "DestroyUI", "EventManagerOverlay");
            int currenttokens = GetTokens(player.userID.ToString());
            var ctoverlay = tokenoverlay.Replace("{msg}", string.Format(OverlayGUIMsg, currenttokens.ToString())).Replace("{rewardpageplus}", (from + 6).ToString()).Replace("{rewardpageminus}", (from - 6).ToString());
            CommunityEntity.ServerInstance.ClientRPCEx(new Network.SendInfo() {
                connection = player.net.connection
            }
            , null, "AddUI", ctoverlay);
            double current = 0;
            foreach (KeyValuePair<string, Reward> pair in rewards) {
                if (current >= from && current < from + 6) {
                    string color = (pair.Value.GetCost() <= currenttokens) ? "0 0.6 0 0.2" : "1 0 0 0.2";
                    double pos = 0.55 - 0.05 * (current - from);
                    var tokenline = tokenjson.Replace("{ymin}", pos.ToString()).Replace("{ymax}", (pos + 0.05).ToString()).Replace("{color}", color).Replace("{rewardname}", pair.Key).Replace("{rewardcmd}", string.Format("'{0}' {1}", pair.Key, from.ToString())).Replace("{rewardcost}", pair.Value.cost).Replace("{rewardamount}", pair.Value.amount);
                    CommunityEntity.ServerInstance.ClientRPCEx(new Network.SendInfo() {
                        connection = player.net.connection
                    }
                    , null, "AddUI", tokenline);
                    //SendReply(player, string.Format(MessageRewardItem, pair.Value.name, pair.Value.cost, (Convert.ToBoolean(pair.Value.kit) ? "Kit : " : "Item : ") + pair.Value.item, pair.Value.amount, color.ToString()));
                }
                current++;
            }
        }
        [ConsoleCommand("reward.show")]
        void ccmdRewardShow(ConsoleSystem.Arg arg) {
            if (arg.Args == null || arg.Args.Length == 0) return;
            if (arg.connection == null) return;
            BasePlayer player = arg.connection.player as BasePlayer;
            if (player == null) return;
            string rewardpage = arg.Args[0].Replace("'", "");
            double rewardp = Convert.ToDouble(rewardpage);
            ShowRewards(player, rewardp);
        }
        [ConsoleCommand("reward.claim")]
        void ccmdRewardClaim(ConsoleSystem.Arg arg) {
            if (arg.Args == null || arg.Args.Length < 2) return;
            if (arg.connection == null) return;
            BasePlayer player = arg.connection.player as BasePlayer;
            if (player == null) return;
            string rewardname = arg.Args[0].Replace("'", "");
            if (rewards[rewardname] == null) {
                SendReply(player, MessageRewardWrong);
                return;
            }
            int currenttokens = GetTokens(player.userID.ToString());
            int amount = 1;
            if (rewards[rewardname].GetCost() * amount > currenttokens) {
                SendReply(player, string.Format(MessageRewardNotEnoughTokens, rewardname, amount.ToString()));
                return;
            }
            var success = GiveReward(player, rewardname, amount);
            if (success is string) {
                SendReply(player, success.ToString());
                return;
            }
            if (success is bool && (bool)success) RemoveTokens(player.userID.ToString(), rewards[rewardname].GetCost() * amount);
            ShowRewards(player, Convert.ToDouble(arg.Args[1]));
        }
        [ChatCommand("reward")]
        void cmdEventReward(BasePlayer player, string command, string[] args) {
            ShowRewards(player, 0.0);
        }
        //////////////////////////////////////////////////////////////////////////////////////
        // Configs Manager ///////////////////////////////////////////////////////////////////
        //////////////////////////////////////////////////////////////////////////////////////
        void LoadDefaultConfig() {
        }
        private void CheckCfg<T>(string Key, ref T var) {
            if (Config[Key] is T) var = (T)Config[Key];
            else Config[Key] = var;
        }
        private static string MessagesPermissionsNotAllowed = "You are not allowed to use this command";
        private static string MessagesEventNotSet = "An Event game must first be chosen.";
        private static string MessagesErrorSpawnfileIsNull = "The spawnfile can't be set to null";
        private static string MessagesEventNoSpawnFile = "A spawn file must first be loaded.";
        private static string MessagesEventAlreadyOpened = "The Event is already open.";
        private static string MessagesEventAlreadyClosed = "The Event is already closed.";
        private static string MessagesEventAlreadyStarted = "An Event game has already started.";
        private static string MessagesEventOpen = "The Event is now open for : {0} !  Type /event_join to join!";
        private static string MessagesEventClose = "The Event entrance is now closed!";
        private static string MessagesEventCancel = "The Event was cancelled!";
        private static string MessagesEventNoGamePlaying = "An Event game is not underway.";
        private static string MessagesEventEnd = "Event: {0} is now over!";
        private static string MessagesEventAlreadyJoined = "You are already in the Event.";
        private static string MessagesEventJoined = "{0} has joined the Event!  (Total Players: {1})";
        private static string MessagesEventLeft = "{0} has left the Event! (Total Players: {1})";
        private static string MessagesEventBegin = "Event: {0} is about to begin!";
        private static string MessagesEventNotInEvent = "You are not currently in the Event.";
        private static string MessagesEventNotAnEvent = "This Game {0} isn't registered, did you reload the game after loading Event - Core?";
        private static string MessagesEventCloseAndEnd = "The Event needs to be closed and ended before using this command.";
        private static string MessagesEventStatusOpen = "The Event {0} is currently opened for registration: /event_join";
        private static string MessagesEventStatusOpenStarted = "The Event {0} has started, but is still opened: /event_join";
        private static string MessagesEventStatusClosedEnd = "There is currently no event";
        private static string MessagesEventStatusClosedStarted = "The Event {0} has already started, it's too late to join.";
        private static string MessagesEventMaxPlayers = "The Event {0} has reached max players.You may not join for the moment";
        private static string MessagesEventMinPlayers = "The Event {0} has reached min players and will start in {1} seconds";
        private static bool EventAutoEvents = false;
        private static int EventAutoInterval = 600;
        private static int EventAutoAnnounceInterval = 30;
        private static Dictionary<string, object> EventAutoConfig = CreateDefaultAutoConfig();
        private static string MessageRewardCurrentReward = "You currently have {0} for the /reward shop";
        private static string MessageRewardCurrent = "You have {0} tokens";
        private static string MessageRewardHelp = "/reward \"RewardName\" Amount";
        private static string MessageRewardItem = "Reward Name: {0} - Cost: <color={4}>{1}</color> - {2} - Amount: {3}";
        private static string MessageRewardWrong = "This reward doesn't exist";
        private static string MessageRewardNegative = "The amount to buy can't be 0 or negative.";
        private static string MessageRewardNotEnoughTokens = "You don't have enough tokens to buy {1} of {0}.";
        private static string noPlayerFound = "No players found";
        private static string multipleNames = "Multiple players found";
        private static string defaultGame = "Deathmatch";
        private static string defaultSpawnfile = "deathmatchspawns";
        private static int eventAuth = 1;
        public string OverlayGUIMsg = "You currently have <color=green>{0}</color> tokens.";
        void Init() {
            CheckCfg<int>("Settings - authLevel", ref eventAuth);
            CheckCfg<string>("Default - Game", ref defaultGame);
            CheckCfg<string>("Default - Spawnfile", ref defaultSpawnfile);
            CheckCfg<bool>("AutoEvents - Activate", ref EventAutoEvents);
            CheckCfg<int>("AutoEvents - Interval between 2 events", ref EventAutoInterval);
            CheckCfg<int>("AutoEvents - Announce Open Interval", ref EventAutoAnnounceInterval);
            CheckCfg<Dictionary<string, object>>("AutoEvents - Config", ref EventAutoConfig);
            CheckCfg<string>("Messages - Permissions - Not Allowed", ref MessagesPermissionsNotAllowed);
            CheckCfg<string>("Messages - Event Error - Not Set", ref MessagesEventNotSet);
            CheckCfg<string>("Messages - Event Error - No SpawnFile", ref MessagesEventNoSpawnFile);
            CheckCfg<string>("Messages - Event Error - SpawnFile Is Null", ref MessagesErrorSpawnfileIsNull);
            CheckCfg<string>("Messages - Event Error - Already Opened", ref MessagesEventAlreadyOpened);
            CheckCfg<string>("Messages - Event Error - Already Closed", ref MessagesEventAlreadyClosed);
            CheckCfg<string>("Messages - Event Error - No Games Undergoing", ref MessagesEventNoGamePlaying);
            CheckCfg<string>("Messages - Event Error - Already Joined", ref MessagesEventAlreadyJoined);
            CheckCfg<string>("Messages - Event Error - Already Started", ref MessagesEventAlreadyStarted);
            CheckCfg<string>("Messages - Event Error - Not In Event", ref MessagesEventNotInEvent);
            CheckCfg<string>("Messages - Event Error - Not Registered Event", ref MessagesEventNotAnEvent);
            CheckCfg<string>("Messages - Event Error - Close&End", ref MessagesEventCloseAndEnd);
            CheckCfg<string>("Messages - Error - No players found", ref noPlayerFound);
            CheckCfg<string>("Messages - Error - Multiple players found", ref multipleNames);
            CheckCfg<string>("Messages - Status - Closed & End", ref MessagesEventStatusClosedEnd);
            CheckCfg<string>("Messages - Status - Closed & Started", ref MessagesEventStatusClosedStarted);
            CheckCfg<string>("Messages - Status - Open", ref MessagesEventStatusOpen);
            CheckCfg<string>("Messages - Status - Open & Started", ref MessagesEventStatusOpenStarted);
            CheckCfg<string>("Messages - Event - Opened", ref MessagesEventOpen);
            CheckCfg<string>("Messages - Event - Closed", ref MessagesEventClose);
            CheckCfg<string>("Messages - Event - Cancelled", ref MessagesEventCancel);
            CheckCfg<string>("Messages - Event - End", ref MessagesEventEnd);
            CheckCfg<string>("Messages - Event - Join", ref MessagesEventJoined);
            CheckCfg<string>("Messages - Event - Begin", ref MessagesEventBegin);
            CheckCfg<string>("Messages - Event - Left", ref MessagesEventLeft);
            CheckCfg<string>("Messages - Event - MaxPlayersReached", ref MessagesEventMaxPlayers);
            CheckCfg<string>("Messages - Event - MinPlayersReached", ref MessagesEventMinPlayers);
            CheckCfg<string>("Messages - Reward - Message", ref MessageRewardCurrentReward);
            CheckCfg<string>("Messages - Reward - GUI Message", ref OverlayGUIMsg);
            CheckCfg<string>("Messages - Reward - Current", ref MessageRewardCurrent);
            CheckCfg<string>("Messages - Reward - Help", ref MessageRewardHelp);
            CheckCfg<string>("Messages - Reward - Reward Description", ref MessageRewardItem);
            CheckCfg<string>("Messages - Reward - Doesnt Exist", ref MessageRewardWrong);
            CheckCfg<string>("Messages - Reward - Negative Amount", ref MessageRewardNegative);
            CheckCfg<string>("Messages - Reward - Not Enough Tokens", ref MessageRewardNotEnoughTokens);
            SaveConfig();
        }
        static Dictionary<string, object> CreateDefaultAutoConfig() {
            var newautoconfiglist = new Dictionary<string, object>();
            var AutoDM = new Dictionary<string, object>();
            AutoDM.Add("gametype", "Deathmatch");
            AutoDM.Add("spawnfile", "deathmatchspawnfile");
            AutoDM.Add("closeonstart", "false");
            AutoDM.Add("timetojoin", "30");
            AutoDM.Add("minplayers", "1");
            AutoDM.Add("maxplayers", "10");
            AutoDM.Add("timelimit", "1800");
            var AutoBF = new Dictionary<string, object>();
            AutoBF.Add("gametype", "Battlefield");
            AutoBF.Add("spawnfile", "battlefieldspawnfile");
            AutoBF.Add("closeonstart", "false");
            AutoBF.Add("timetojoin", "0");
            AutoBF.Add("timelimit", null);
            AutoBF.Add("minplayers", "0");
            AutoBF.Add("maxplayers", "30");
            newautoconfiglist.Add("0", AutoDM);
            newautoconfiglist.Add("1", AutoBF);
            return newautoconfiglist;
        }
        //////////////////////////////////////////////////////////////////////////////////////
        // Some global methods ///////////////////////////////////////////////////////////////
        //////////////////////////////////////////////////////////////////////////////////////
        // hasAccess /////////////////////////////////////////////////////////////////////////
        bool hasAccess(ConsoleSystem.Arg arg) {
            if (arg.connection != null) {
                if (arg.connection.authLevel < 1) {
                    SendReply(arg, MessagesPermissionsNotAllowed);
                    return false;
                }
            }
            return true;
        }
        // Broadcast To The General Chat /////////////////////////////////////////////////////
        void BroadcastToChat(string msg) {
            Debug.Log(msg);
            ConsoleSystem.Broadcast("chat.add", new object[] {
                0, "<color=orange>Event:</color> " + msg
            }
            );
        }
        // Broadcast To Players in Event /////////////////////////////////////////////////////
        void BroadcastEvent(string msg) {
            foreach (EventPlayer eventplayer in EventPlayers) {
                SendReply(eventplayer.player, msg.QuoteSafe());
            }
        }
        void TeleportAllPlayersToEvent() {
            foreach (EventPlayer eventplayer in EventPlayers) {
                Interface.CallHook("OnEventPlayerSpawn", new object[] {
                    eventplayer.player
                }
                );
            }
        }
        void OnEventPlayerSpawn(BasePlayer player) {
            TeleportPlayerToEvent(player);
        }
        void TeleportPlayerToEvent(BasePlayer player) {
            if (!(player.GetComponent<EventPlayer>())) return;
            var targetpos = Spawns.Call("GetRandomSpawn", new object[] {
                EventSpawnFile
            }
            );
            if (targetpos is string) return;
            var newpos = Interface.Call("EventChooseSpawn", new object[] {
                player, targetpos
            }
            );
            if (newpos is Vector3) targetpos = newpos;
            var zonen = Interface.Call("OnRequestZoneName");
            string zonename = zonen is string ? (string)zonen : EventGameName;
            ZoneManager?.Call("AddPlayerToZoneKeepinlist", zonename, player);
            player.GetComponent<EventPlayer>().zone = zonename;
            ForcePlayerPosition(player, (Vector3)targetpos);
        }
        void SaveAllInventories() {
            foreach (EventPlayer player in EventPlayers) {
                player.SaveInventory();
            }
        }
        void SaveAllHomeLocations() {
            foreach (EventPlayer player in EventPlayers) {
                player.SaveHome();
            }
        }
        void SaveInventory(BasePlayer player) {
            var eventplayer = player.GetComponent<EventPlayer>();
            if (eventplayer == null) return;
            eventplayer.SaveInventory();
        }
        void SaveHomeLocation(BasePlayer player) {
            EventPlayer eventplayer = player.GetComponent<EventPlayer>();
            if (eventplayer == null) return;
            eventplayer.SaveHome();
        }
        void RedeemInventory(BasePlayer player) {
            EventPlayer eventplayer = player.GetComponent<EventPlayer>();
            if (eventplayer == null) return;
            if (player.IsDead() || player.health < 1) return;
            if (eventplayer.savedInventory) {
                eventplayer.player.inventory.Strip();
                eventplayer.RestoreInventory();
            }
        }
        void TeleportPlayerHome(BasePlayer player) {
            EventPlayer eventplayer = player.GetComponent<EventPlayer>();
            if (eventplayer == null) return;
            if (player.IsDead() || player.health < 1) return;
            if (eventplayer.savedHome) {
                eventplayer.TeleportHome();
            }
        }
        void TryErasePlayer(BasePlayer player) {
            var eventplayer = player.GetComponent<EventPlayer>();
            if (eventplayer == null) return;
            if (!(eventplayer.inEvent) && !(eventplayer.savedHome) && !(eventplayer.savedInventory)) GameObject.Destroy(eventplayer);
        }
        void GivePlayerKit(BasePlayer player, string GiveK
// ... [Code preview truncated due to length. Full source in attached file] ...

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