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

FREE Rewards : 1.3.2 1.3.2

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System;
using System.Collections.Generic;
using System.Linq;
using Oxide.Core.Plugins;
using Oxide.Core;
namespace Oxide.Plugins {
    [Info ("Rewards", "Tarek", "1.3.2")]
    [Description ("Rewards players for activities using Economic and/or ServerRewards")]
    public class Rewards : RustPlugin {
        [PluginReference]
        Plugin Economics, ServerRewards, Friends, Clans, HumanNPC;
        bool IsFriendsLoaded;
        bool IsEconomicsLoaded;
        bool IsServerRewardsLoaded;
        bool IsClansLoaded;
        bool HappyHourActive;
        TimeSpan hhstart;
        TimeSpan hhend;
        StoredData storedData;
        public List<string> Options_itemList = new List<string> {
            "NPCReward_Enabled", "Permission_Multiplier_Enabled", "ActivityReward_Enabled", "WelcomeMoney_Enabled", "WeaponMultiplier_Enabled", "DistanceMultiplier_Enabled", "UseEconomicsPlugin", "UseServerRewardsPlugin", "UseFriendsPlugin", "UseClansPlugin", "Economincs_TakeMoneyFromVictim", "ServerRewards_TakeMoneyFromVictim", "PrintToConsole", "HappyHour_Enabled"
        }
        ;
        public List<string> Multipliers_itemList = new List<string> {
            "LR300", "HuntingBow", "Crossbow", "AssaultRifle", "PumpShotgun", "SemiAutomaticRifle", "Thompson", "CustomSMG", "BoltActionRifle", "TimedExplosiveCharge", "M249", "EokaPistol", "Revolver", "WaterpipeShotgun", "SemiAutomaticPistol", "DoubleBarrelShotgun", "SatchelCharge", "distance_50", "distance_100", "distance_200", "distance_300", "distance_400", "HappyHourMultiplier", "M92Pistol", "MP5A4", "RocketLauncher", "BeancanGrenade", "F1Grenade", "Machete", "Longsword", "Mace", "SalvagedCleaver", "SalvagedSword", "StoneSpear", "WoodenSpear"
        }
        ;
        public List<string> Rewards_itemList = new List<string> {
            "human", "bear", "wolf", "chicken", "horse", "boar", "stag", "helicopter", "autoturret", "ActivityRewardRate_minutes", "ActivityReward", "WelcomeMoney", "HappyHour_BeginHour", "HappyHour_EndHour", "NPCKill_Reward"
        }
        ;
        RewardRates rewardrates = new RewardRates ();
        Options options = new Options ();
        Multipliers multipliers = new Multipliers ();
        Dictionary<BasePlayer, int> LastReward = new Dictionary<BasePlayer, int> ();
        void OnServerInitialized () {
            if (options.UseEconomicsPlugin && Economics != null) IsEconomicsLoaded = true;
            else if (options.UseEconomicsPlugin && Economics == null) PrintWarning ("Economics plugin was not found! Can't reward players using Economics.");
            if (options.UseServerRewardsPlugin && ServerRewards != null) IsServerRewardsLoaded = true;
            else if (options.UseServerRewardsPlugin && ServerRewards == null) PrintWarning ("ServerRewards plugin was not found! Can't reward players using ServerRewards.");
            if (options.UseFriendsPlugin && Friends != null) IsFriendsLoaded = true;
            else if (options.UseFriendsPlugin && Friends == null) PrintWarning ("Friends plugin was not found! Can't check if victim is friend to killer.");
            if (options.UseClansPlugin && Clans != null) IsClansLoaded = true;
            else if (options.UseClansPlugin && Clans == null) PrintWarning ("Clans plugin was not found! Can't check if victim is in the same clan of killer.");
        }
        protected override void LoadDefaultConfig () {
            PrintWarning ("Creating a new configuration file");
            Config ["Version"] = Version.ToString ();
            Config ["Rewards"] = GetDefaultRewardRate ();
            Config ["Multipliers"] = GetDefaultMultipliers ();
            Config ["Options"] = GetDefaultOptions ();
            SaveConfig ();
            LoadConfig ();
        }
        protected override void LoadDefaultMessages () {
            lang.RegisterMessages (new Dictionary<string, string> {
                ["KillReward"]
                = "You received {0}.Reward for killing {1}", ["ActivityReward"] = "You received {0}.Reward for activity", ["WelcomeReward"] = "Welcome to server! You received {0} as a welcome reward", ["VictimNoMoney"] = "{0} doesn't have enough money.", ["SetRewards"] = "Variables you can set:", ["RewardSet"] = "Reward was set", ["stag"] = "a stag", ["boar"] = "a boar", ["horse"] = "a horse", ["bear"] = "a bear", ["wolf"] = "a wolf", ["chicken"] = "a chicken", ["autoturret"] = "an autoturret", ["helicopter"] = "a helicopter", ["Prefix"] = "Rewards", ["HappyHourStart"] = "Happy hour started", ["HappyHourEnd"] = "Happy hour ended"
            }
            , this);
        }
        void SaveData () {
            Interface.Oxide.DataFileSystem.WriteObject ("Rewards", storedData);
            Puts ("Data saved");
        }
        RewardRates GetDefaultRewardRate () {
            return new RewardRates {
                human = 50, bear = 35, wolf = 30, chicken = 15, horse = 15, boar = 15, stag = 10, helicopter = 250, autoturret = 150, ActivityRewardRate_minutes = 30, ActivityReward = 25, WelcomeMoney = 250, HappyHour_BeginHour = 20, HappyHour_EndHour = 23, NPCKill_Reward = 50
            }
            ;
        }
        Multipliers GetDefaultMultipliers () {
            return new Multipliers {
                AssaultRifle = 1.5, BoltActionRifle = 1.5, HuntingBow = 1, PumpShotgun = 1, Thompson = 1.3, SemiAutomaticRifle = 1.3, Crossbow = 1.3, CustomSMG = 1.5, M249 = 1.5, SemiAutomaticPistol = 1, WaterpipeShotgun = 1.4, EokaPistol = 1.1, Revolver = 1.2, TimedExplosiveCharge = 2, SatchelCharge = 2, DoubleBarrelShotgun = 1.5, distance_50 = 1, distance_100 = 1.3, distance_200 = 1.5, distance_300 = 2, distance_400 = 3, HappyHourMultiplier = 2, LR300 = 1.5, M92Pistol = 1, MP5A4 = 1.5, RocketLauncher = 2, BeancanGrenade = 1.5, F1Grenade = 1.5, Machete = 2, Longsword = 1.5, Mace = 1, SalvagedCleaver = 1, SalvagedSword = 1, StoneSpear = 1, WoodenSpear = 1, Permissions = new Dictionary<string, int> {
                    {
                        "rewards.vip", 2
                    }
                }
            }
            ;
        }
        Options GetDefaultOptions () {
            return new Options {
                ActivityReward_Enabled = true, WelcomeMoney_Enabled = true, UseEconomicsPlugin = true, UseServerRewardsPlugin = false, UseFriendsPlugin = true, UseClansPlugin = true, Economincs_TakeMoneyFromVictim = true, ServerRewards_TakeMoneyFromVictim = false, WeaponMultiplier_Enabled = true, DistanceMultiplier_Enabled = true, PrintToConsole = true, HappyHour_Enabled = true, Permission_Multiplier_Enabled = false, NPCReward_Enabled = false
            }
            ;
        }
        void FixConfig () {
            try {
                Dictionary<string, object> temp;
                Dictionary<string, object> temp2;
                Dictionary<string, object> temp3;
                var rr = GetDefaultRewardRate ();
                var o = GetDefaultOptions ();
                var m = GetDefaultMultipliers ();
                try {
                    temp = (Dictionary<string, object>)Config ["Rewards"];
                }
                catch {
                    Config ["Rewards"] = rr;
                    SaveConfig ();
                    temp = (Dictionary<string, object>)Config ["Rewards"];
                }
                try {
                    temp2 = (Dictionary<string, object>)Config ["Options"];
                }
                catch {
                    Config ["Options"] = o;
                    SaveConfig ();
                    temp2 = (Dictionary<string, object>)Config ["Options"];
                }
                try {
                    temp3 = (Dictionary<string, object>)Config ["Multipliers"];
                }
                catch {
                    Config ["Multipliers"] = m;
                    SaveConfig ();
                    temp3 = (Dictionary<string, object>)Config ["Multipliers"];
                }
                foreach (var s in Rewards_itemList) {
                    if (!temp.ContainsKey (s)) {
                        Config ["Rewards", s] = rr.GetItemByString (s);
                    }
                }
                foreach (var s in Options_itemList) {
                    if (!temp2.ContainsKey (s)) {
                        Config ["Options", s] = o.GetItemByString (s);
                    }
                }
                foreach (var s in Multipliers_itemList) {
                    if (!temp3.ContainsKey (s)) {
                        Config ["Multipliers", s] = m.GetItemByString (s);
                    }
                }
                if (!temp3.ContainsKey ("Permissions")) {
                    Config ["Multipliers", "Permissions"] = new Dictionary<string, object> {
                        {
                            "rewards.vip", 2
                        }
                    }
                    ;
                }
                Config ["Version"] = Version.ToString ();
                SaveConfig ();
            }
            catch (Exception ex) {
                Puts (ex.Message);
                Puts ("Couldn't fix.Creating new config file");
                Config.Clear ();
                LoadDefaultConfig ();
                Loadcfg ();
            }
        }
        void Loadcfg () {
            try {
                if (Version.ToString () != Config ["Version"].ToString ()) {
                    Puts ("Outdated config file.Fixing");
                    FixConfig ();
                }
            }
            catch (Exception e) {
                Puts ("Outdated config file.Fixing");
                FixConfig ();
            }
            try {
                Dictionary<string, object> temp = (Dictionary<string, object>)Config ["Rewards"];
                rewardrates.ActivityReward = Convert.ToDouble (temp ["ActivityReward"]);
                rewardrates.ActivityRewardRate_minutes = Convert.ToDouble (temp ["ActivityRewardRate_minutes"]);
                rewardrates.autoturret = Convert.ToDouble (temp ["autoturret"]);
                rewardrates.bear = Convert.ToDouble (temp ["bear"]);
                rewardrates.boar = Convert.ToDouble (temp ["boar"]);
                rewardrates.chicken = Convert.ToDouble (temp ["chicken"]);
                rewardrates.helicopter = Convert.ToDouble (temp ["helicopter"]);
                rewardrates.horse = Convert.ToDouble (temp ["horse"]);
                rewardrates.human = Convert.ToDouble (temp ["human"]);
                rewardrates.stag = Convert.ToDouble (temp ["stag"]);
                rewardrates.WelcomeMoney = Convert.ToDouble (temp ["WelcomeMoney"]);
                rewardrates.wolf = Convert.ToDouble (temp ["wolf"]);
                rewardrates.HappyHour_BeginHour = Convert.ToDouble (temp ["HappyHour_BeginHour"]);
                rewardrates.HappyHour_EndHour = Convert.ToDouble (temp ["HappyHour_EndHour"]);
                rewardrates.NPCKill_Reward = Convert.ToDouble (temp ["NPCKill_Reward"]);
                Dictionary<string, object> temp2 = (Dictionary<string, object>)Config ["Options"];
                options.ActivityReward_Enabled = (bool)temp2 ["ActivityReward_Enabled"];
                options.DistanceMultiplier_Enabled = (bool)temp2 ["DistanceMultiplier_Enabled"];
                options.Economincs_TakeMoneyFromVictim = (bool)temp2 ["Economincs_TakeMoneyFromVictim"];
                options.ServerRewards_TakeMoneyFromVictim = (bool)temp2 ["ServerRewards_TakeMoneyFromVictim"];
                options.UseClansPlugin = (bool)temp2 ["UseClansPlugin"];
                options.UseEconomicsPlugin = (bool)temp2 ["UseEconomicsPlugin"];
                options.UseFriendsPlugin = (bool)temp2 ["UseFriendsPlugin"];
                options.UseServerRewardsPlugin = (bool)temp2 ["UseServerRewardsPlugin"];
                options.WeaponMultiplier_Enabled = (bool)temp2 ["WeaponMultiplier_Enabled"];
                options.WelcomeMoney_Enabled = (bool)temp2 ["WelcomeMoney_Enabled"];
                options.PrintToConsole = (bool)temp2 ["PrintToConsole"];
                options.Permission_Multiplier_Enabled = (bool)temp2 ["Permission_Multiplier_Enabled"];
                options.NPCReward_Enabled = (bool)temp2 ["NPCReward_Enabled"];
                options.HappyHour_Enabled = (bool)temp2 ["HappyHour_Enabled"];
                Dictionary<string, object> temp3 = (Dictionary<string, object>)Config ["Multipliers"];
                multipliers.AssaultRifle = Convert.ToDouble (temp3 ["AssaultRifle"]);
                multipliers.BoltActionRifle = Convert.ToDouble (temp3 ["BoltActionRifle"]);
                multipliers.HuntingBow = Convert.ToDouble (temp3 ["HuntingBow"]);
                multipliers.PumpShotgun = Convert.ToDouble (temp3 ["PumpShotgun"]);
                multipliers.Thompson = Convert.ToDouble (temp3 ["Thompson"]);
                multipliers.SemiAutomaticRifle = Convert.ToDouble (temp3 ["SemiAutomaticRifle"]);
                multipliers.Crossbow = Convert.ToDouble (temp3 ["Crossbow"]);
                multipliers.CustomSMG = Convert.ToDouble (temp3 ["CustomSMG"]);
                multipliers.M249 = Convert.ToDouble (temp3 ["M249"]);
                multipliers.TimedExplosiveCharge = Convert.ToDouble (temp3 ["TimedExplosiveCharge"]);
                multipliers.EokaPistol = Convert.ToDouble (temp3 ["EokaPistol"]);
                multipliers.Revolver = Convert.ToDouble (temp3 ["Revolver"]);
                multipliers.SemiAutomaticPistol = Convert.ToDouble (temp3 ["SemiAutomaticPistol"]);
                multipliers.WaterpipeShotgun = Convert.ToDouble (temp3 ["WaterpipeShotgun"]);
                multipliers.DoubleBarrelShotgun = Convert.ToDouble (temp3 ["DoubleBarrelShotgun"]);
                multipliers.SatchelCharge = Convert.ToDouble (temp3 ["SatchelCharge"]);
                multipliers.distance_50 = Convert.ToDouble (temp3 ["distance_50"]);
                multipliers.distance_100 = Convert.ToDouble (temp3 ["distance_100"]);
                multipliers.distance_200 = Convert.ToDouble (temp3 ["distance_200"]);
                multipliers.distance_300 = Convert.ToDouble (temp3 ["distance_300"]);
                multipliers.distance_400 = Convert.ToDouble (temp3 ["distance_400"]);
                multipliers.HappyHourMultiplier = Convert.ToDouble (temp3 ["HappyHourMultiplier"]);
                multipliers.LR300 = Convert.ToDouble (temp3 ["LR300"]);
                //NEW
                multipliers.M92Pistol = Convert.ToDouble (temp3 ["M92Pistol"]);
                multipliers.MP5A4 = Convert.ToDouble (temp3 ["MP5A4"]);
                multipliers.RocketLauncher = Convert.ToDouble (temp3 ["RocketLauncher"]);
                multipliers.BeancanGrenade = Convert.ToDouble (temp3 ["BeancanGrenade"]);
                multipliers.F1Grenade = Convert.ToDouble (temp3 ["F1Grenade"]);
                multipliers.Machete = Convert.ToDouble (temp3 ["Machete"]);
                multipliers.Longsword = Convert.ToDouble (temp3 ["Longsword"]);
                multipliers.Mace = Convert.ToDouble (temp3 ["Mace"]);
                multipliers.SalvagedCleaver = Convert.ToDouble (temp3 ["SalvagedCleaver"]);
                multipliers.SalvagedSword = Convert.ToDouble (temp3 ["SalvagedSword"]);
                multipliers.StoneSpear = Convert.ToDouble (temp3 ["StoneSpear"]);
                multipliers.WoodenSpear = Convert.ToDouble (temp3 ["WoodenSpear"]);
                if (!temp3.ContainsKey ("Permissions")) {
                    multipliers.Permissions = new Dictionary<string, int> {
                        {
                            "rewards.vip", 2
                        }
                    }
                    ;
                    permission.RegisterPermission ("rewards.vip", this);
                }
                else {
                    Dictionary<string, object> temp4 = (Dictionary<string, object>)temp3 ["Permissions"];
                    if (multipliers.Permissions == null) {
                        multipliers.Permissions = new Dictionary<string, int> ();
                    }
                    foreach (KeyValuePair<string, object> kvp in temp4) {
                        multipliers.Permissions.Add (kvp.Key, Convert.ToInt32 (kvp.Value));
                        permission.RegisterPermission (kvp.Key, this);
                    }
                }
            }
            catch (Exception ex) {
                Interface.Oxide.LogException ("Could not load config", ex);
            }
        }
        void Init () {
            permission.RegisterPermission ("rewards.admin", this);
            permission.RegisterPermission ("rewards.showrewards", this);
            storedData = Interface.Oxide.DataFileSystem.ReadObject<StoredData> (Name);
            Loadcfg ();
            if (options.HappyHour_Enabled) {
                hhstart = new TimeSpan (Convert.ToInt32 (rewardrates.HappyHour_BeginHour), 0, 0);
                hhend = new TimeSpan (Convert.ToInt32 (rewardrates.HappyHour_EndHour), 0, 0);
            }
#region Activity Check
            if (options.ActivityReward_Enabled || options.HappyHour_Enabled) {
                timer.Repeat (60, 0, () => {
                    if (options.ActivityReward_Enabled) {
                        foreach (var p in BasePlayer.activePlayerList) {
                            if (Convert.ToDouble (p.secondsConnected) / 60 > rewardrates.ActivityRewardRate_minutes) {
                                if (LastReward.ContainsKey (p)) {
                                    if (Convert.ToDouble (p.secondsConnected - LastReward [p]) / 60 > rewardrates.ActivityRewardRate_minutes) {
                                        RewardPlayer (p, rewardrates.ActivityReward);
                                        LastReward [p] = p.secondsConnected;
                                    }
                                }
                                else {
                                    RewardPlayer (p, rewardrates.ActivityReward);
                                    LastReward.Add (p, p.secondsConnected);
                                }
                            }
                        }
                    }
                    if (options.HappyHour_Enabled) {
                        var gameTime = GameTime ();
                        if (!HappyHourActive) {
                            if (gameTime >= rewardrates.HappyHour_BeginHour) {
                                HappyHourActive = true;
                                Puts ("Happy hour started.Ending at " + rewardrates.HappyHour_EndHour);
                                BroadcastMessage (Lang ("HappyHourStart"), Lang ("Prefix"));
                            }
                        }
                        else {
                            if (gameTime > rewardrates.HappyHour_EndHour || gameTime < rewardrates.HappyHour_BeginHour) {
                                HappyHourActive = false;
                                Puts ("Happy hour ended");
                                BroadcastMessage (Lang ("HappyHourEnd"), Lang ("Prefix"));
                            }
                        }
                    }
                }
                );
            }
#endregion
        }
        bool checktime (float gtime, double cfgtime) {
            return false;
        }
        void OnPlayerInit (BasePlayer player) {
            if (options.WelcomeMoney_Enabled) {
                if (!storedData.Players.Contains (player.UserIDString)) {
                    RewardPlayer (player, rewardrates.WelcomeMoney, 1, null, true);
                    storedData.Players.Add (player.UserIDString);
                    SaveData ();
                }
            }
        }
        string Lang (string key, string id = null, params object [] args) => string.Format (lang.GetMessage (key, this, id), args);
        bool HasPerm (BasePlayer p, string pe) => permission.UserHasPermission (p.userID.ToString (), pe);
        void SendChatMessage (BasePlayer player, string msg, string prefix = null, object uid = null) => rust.SendChatMessage (player, prefix == null ? msg : "<color=#C4FF00>" + prefix + "</color>: ", msg, uid?.ToString () ?? "0");
        void BroadcastMessage (string msg, string prefix = null, object uid = null) => rust.BroadcastChat (prefix == null ? msg : "<color=#C4FF00>" + prefix + "</color>: ", msg);
        double GetMultiplier (BasePlayer attacker, BaseCombatEntity victim, string weapon) {
            double multiplier = 1;
            if (options.DistanceMultiplier_Enabled) {
                multiplier *= multipliers.GetDistanceM (victim.Distance2D (attacker));
            }
            if (options.WeaponMultiplier_Enabled) {
                multiplier *= multipliers.GetWeaponM (weapon);
            }
            if (HappyHourActive) {
                multiplier *= multipliers.HappyHourMultiplier;
            }
            if (options.Permission_Multiplier_Enabled) {
                var permissions = multipliers.Permissions.Where (x => permission.UserHasPermission (attacker.UserIDString, x.Key)).ToArray ();
                multiplier *= (permissions.Any () ? permissions.OrderByDescending (x => x.Value).First ().Value : 1);
            }
            return multiplier;
        }
        void OnKillNPC (BasePlayer victim, HitInfo info) {
            if (options.NPCReward_Enabled) {
                if (info?.Initiator?.ToPlayer () == null) return;
                double totalmultiplier = GetMultiplier (info?.Initiator?.ToPlayer (), victim, info?.Weapon?.GetItem ()?.info?.displayName?.english);
                RewardPlayer (info?.Initiator?.ToPlayer (), rewardrates.NPCKill_Reward, totalmultiplier, victim.displayName);
            }
        }
        void OnEntityDeath (BaseCombatEntity victim, HitInfo info) {
            if (victim == null) return;
            if (info?.Initiator?.ToPlayer () == null) return;
            double totalmultiplier = GetMultiplier (info?.Initiator?.ToPlayer (), victim, info?.Weapon?.GetItem ()?.info?.displayName?.english);
            if (options.NPCReward_Enabled && victim is NPCPlayer) {
                RewardPlayer (info?.Initiator?.ToPlayer (), rewardrates.NPCKill_Reward, totalmultiplier, (victim as NPCPlayer).displayName);
            }
            else if (victim.ToPlayer () != null) {
                if (victim.ToPlayer ().userID <= 2147483647) return;
                if (info?.Initiator?.ToPlayer ().userID == victim.ToPlayer ().userID) return;
                RewardForPlayerKill (info?.Initiator?.ToPlayer (), victim.ToPlayer (), totalmultiplier);
            }
            else if (victim.name.Contains ("assets/rust.ai/agents/")) {
                try {
                    var AnimalName = victim.name.Split (new [] {
                        "assets/rust.ai/agents/"
                    }
                    , StringSplitOptions.None) [1].Split ('/') [0];
                    double rewardmoney = 0;
                    switch (AnimalName) {
                        case "stag" : rewardmoney = rewardrates.stag;
                        break;
                        case "boar" : rewardmoney = rewardrates.boar;
                        break;
                        case "horse" : rewardmoney = rewardrates.horse;
                        break;
                        case "bear" : rewardmoney = rewardrates.bear;
                        break;
                        case "wolf" : rewardmoney = rewardrates.wolf;
                        break;
                        case "chicken" : rewardmoney = rewardrates.chicken;
                        break;
                        default : return;
                    }
                    RewardPlayer (info?.Initiator?.ToPlayer (), rewardmoney, totalmultiplier, Lang (AnimalName, info?.Initiator?.ToPlayer ().UserIDString));
                }
                catch {
                }
            }
            else if (victim.name.Contains ("helicopter/patrolhelicopter.prefab")) {
                RewardPlayer (info?.Initiator?.ToPlayer (), rewardrates.helicopter, totalmultiplier, Lang ("helicopter", info?.Initiator?.ToPlayer ().UserIDString));
            }
            else if (victim.name == "assets/prefabs/npc/autoturret/autoturret_deployed.prefab") {
                RewardPlayer (info?.Initiator?.ToPlayer (), rewardrates.autoturret, totalmultiplier, Lang ("autoturret", info?.Initiator?.ToPlayer ().UserIDString));
            }
        }
        void RewardPlayer (BasePlayer player, double amount, double multiplier = 1, string reason = null, bool isWelcomeReward = false) {
            if (amount > 0) {
                amount = amount * multiplier;
                if (options.UseEconomicsPlugin) Economics?.Call ("Deposit", player.UserIDString, amount);
                if (options.UseServerRewardsPlugin) ServerRewards?.Call ("AddPoints", player.userID, (int)amount);
                if (!isWelcomeReward) {
                    SendChatMessage (player, reason == null ? Lang ("ActivityReward", player.UserIDString, amount) : Lang ("KillReward", player.UserIDString, amount, reason), Lang ("Prefix"));
                    LogToFile (Name, $"[{DateTime.Now}] " + player.displayName + " got " + amount + " for " + (reason == null ? "activity" : "killing " + reason), this);
                    if (options.PrintToConsole) Puts (player.displayName + " got " + amount + " for " + (reason == null ? "activity" : "killing " + reason));
                }
                else {
                    SendChatMessage (player, Lang ("WelcomeReward", player.UserIDString, amount), Lang ("Prefix"));
                    LogToFile (Name, $"[{DateTime.Now}] " + player.displayName + " got " + amount + " as a welcome reward", this);
                    if (options.PrintToConsole) Puts (player.displayName + " got " + amount + " as a welcome reward");
                }
            }
        }
        static float GameTime () {
            return TOD_Sky.Instance.Cycle.Hour;
        }
        void RewardForPlayerKill (BasePlayer player, BasePlayer victim, double multiplier = 1) {
            if (rewardrates.human > 0) {
                bool success = true;
                bool isFriend = false;
                if (IsFriendsLoaded) isFriend = (bool)Friends?.CallHook ("HasFriend", player.userID, victim.userID);
                if (!isFriend && IsClansLoaded) {
                    string pclan = (string)Clans?.CallHook ("GetClanOf", player);
                    string vclan = (string)Clans?.CallHook ("GetClanOf", victim);
                    if (pclan == vclan) isFriend = true;
                }
                if (!isFriend) {
                    var reward = rewardrates.human * multiplier;
                    if (IsEconomicsLoaded)  //Eco
                    {
                        if (options.Economincs_TakeMoneyFromVictim) {
                            if (!(bool)Economics?.Call ("Transfer", victim.UserIDString, player.UserIDString, rewardrates.human * multiplier)) {
                                SendChatMessage (player, Lang ("VictimNoMoney", player.UserIDString, victim.displayName), Lang ("Prefix"));
                                success = false;
                            }
                        }
                        else Economics?.Call ("Deposit", player.UserIDString, reward);
                    }
                    if (IsServerRewardsLoaded)  //ServerRewards
                    {
                        if (options.ServerRewards_TakeMoneyFromVictim) ServerRewards?.Call ("TakePoints", new object [] {
                            victim.userID, rewardrates.human * multiplier
                        }
                        );
                        ServerRewards?.Call ("AddPoints", player.userID, (int)(reward));
                        success = true;
                    }
                    if (success)  //Send message if transaction was successful
                    {
                        SendChatMessage (player, Lang ("KillReward", player.UserIDString, rewardrates.human * multiplier, victim.displayName), Lang ("Prefix"));
                        LogToFile (Name, $"[{DateTime.Now}] " + player.displayName + " got " + rewardrates.human * multiplier + " for killing " + victim.displayName, this);
                        if (options.PrintToConsole) Puts (player.displayName + " got " + reward + " for killing " + victim.displayName);
                    }
                }
            }
        }
        [ConsoleCommand ("setreward")]
        void setreward (ConsoleSystem.Arg arg) {
            if (arg.IsAdmin) {
                try {
                    var args = arg.Args;
                    Config ["Rewards", args [0]] = Convert.ToDouble (args [1]);
                    SaveConfig ();
                    try {
                        Loadcfg ();
                    }
                    catch {
                        FixConfig ();
                    }
                    arg.ReplyWith ("Reward set");
                }
                catch {
                    arg.ReplyWith ("Variables you can set: 'human', 'horse', 'wolf', 'chicken', 'bear', 'boar', 'stag', 'helicopter', 'autoturret', 'ActivityReward' 'ActivityRewardRate_minutes', 'WelcomeMoney'");
                }
            }
        }
        [ConsoleCommand ("showrewards")]
        void showrewards (ConsoleSystem.Arg arg) {
            if (arg.IsAdmin) arg.ReplyWith (string.Format ("human = {0}, horse = {1}, wolf = {2}, chicken = {3}, bear = {4}, boar = {5}, stag = {6}, helicopter = {7}, autoturret = {8} Activity Reward Rate (minutes) = {9}, Activity Reward = {10}, WelcomeMoney = {11}", rewardrates.human, rewardrates.horse, rewardrates.wolf, rewardrates.chicken, rewardrates.bear, rewardrates.boar, rewardrates.stag, rewardrates.helicopter, rewardrates.autoturret, rewardrates.ActivityRewardRate_minutes, rewardrates.ActivityReward, rewardrates.WelcomeMoney));
        }
        [ChatCommand ("setreward")]
        void setrewardCommand (BasePlayer player, string command, string [] args) {
            if (HasPerm (player, "rewards.admin")) {
                try {
                    Config ["Rewards", args [0]] = Convert.ToDouble (args [1]);
                    SaveConfig ();
                    try {
                        Loadcfg ();
                    }
                    catch {
                        FixConfig ();
                    }
                    SendChatMessage (player, Lang ("RewardSet", player.UserIDString), Lang ("Prefix"));
                }
                catch {
                    SendChatMessage (player, Lang ("SetRewards", player.UserIDString) + " 'human', 'horse', 'wolf', 'chicken', 'bear', 'boar', 'stag', 'helicopter', 'autoturret', 'ActivityReward', 'ActivityRewardRate_minutes', 'WelcomeMoney'", Lang ("Prefix"));
                }
            }
        }
        [ChatCommand ("showrewards")]
        void showrewardsCommand (BasePlayer player, string command, string [] args) {
            if (HasPerm (player, "rewards.showrewards")) SendChatMessage (player, string.Format ("human = {0}, horse = {1}, wolf = {2}, chicken = {3}, bear = {4}, boar = {5}, stag = {6}, helicopter = {7}, autoturret = {8} Activity Reward Rate (minutes) = {9}, Activity Reward = {10}, WelcomeMoney = {11}", rewardrates.human, rewardrates.horse, rewardrates.wolf, rewardrates.chicken, rewardrates.bear, rewardrates.boar, rewardrates.stag, rewardrates.helicopter, rewardrates.autoturret, rewardrates.ActivityRewardRate_minutes, rewardrates.ActivityReward, rewardrates.WelcomeMoney), Lang ("Prefix"));
        }
        class StoredData {
            public HashSet<string> Players = new HashSet<string> ();
        }
        class RewardRates {
            public double human {
                get;
                set;
            }
            public double bear {
                get;
                set;
            }
            public double wolf {
                get;
                set;
            }
            public double chicken {
                get;
                set;
            }
            public double horse {
                get;
                set;
            }
            public double boar {
                get;
                set;
            }
            public double stag {
                get;
                set;
            }
            public double helicopter {
                get;
                set;
            }
            public double autoturret {
                get;
                set;
            }
            public double ActivityRewardRate_minutes {
                get;
                set;
            }
            public double ActivityReward {
                get;
                set;
            }
            public double WelcomeMoney {
                get;
                set;
            }
            public double HappyHour_BeginHour {
                get;
                set;
            }
            public double HappyHour_EndHour {
                get;
                set;
            }
            public double NPCKill_Reward {
                get;
                set;
            }
            public double GetItemByString (string itemName) {
                switch (itemName) {
                    case "human" : return human;
                    case "bear" : return bear;
                    case "wolf" : return wolf;
                    case "chicken" : return chicken;
                    case "horse" : return horse;
                    case "boar" : return boar;
                    case "stag" : return stag;
                    case "helicopter" : return helicopter;
                    case "autoturret" : return autoturret;
                    case "ActivityRewardRate_minutes" : return ActivityRewardRate_minutes;
                    case "ActivityReward" : return ActivityReward;
                    case "WelcomeMoney" : return WelcomeMoney;
                    case "HappyHour_BeginHour" : return HappyHour_BeginHour;
                    case "HappyHour_EndHour" : return HappyHour_EndHour;
                    case "NPCKill_Reward" : return NPCKill_Reward;
                    default : return 0;
                }
            }
        }
        class Multipliers {
            public double HuntingBow {
                get;
                set;
            }
            public double Crossbow {
                get;
                set;
            }
            public double AssaultRifle {
                get;
                set;
            }
            public double PumpShotgun {
                get;
                set;
            }
            public double SemiAutomaticRifle {
                get;
                set;
            }
            public double Thompson {
                get;
                set;
            }
            public double CustomSMG {
                get;
                set;
            }
            public double BoltActionRifle {
                get;
                set;
            }
            public double TimedExplosiveCharge {
                get;
                set;
            }
            public double M249 {
                get;
                set;
            }
            public double EokaPistol {
                get;
                set;
            }
            public double Revolver {
                get;
                set;
            }
            public double WaterpipeShotgun {
                get;
                set;
            }
            public double SemiAutomaticPistol {
                get;
                set;
            }
            public double DoubleBarrelShotgun {
                get;
                set;
            }
            public double SatchelCharge {
                get;
                set;
            }
            public double distance_50 {
                get;
                set;
            }
            public double distance_100 {
                get;
                set;
            }
            public double distance_200 {
                get;
                set;
            }
            public double distance_300 {
                get;
                set;
            }
            public double distance_400 {
                get;
                set;
            }
            public double HappyHourMultiplier {
                get;
                set;
            }
            public double LR300 {
                get;
                set;
            }
            public double M92Pistol {
                get;
                set;
            }
            public double MP5A4 {
                get;
                set;
            }
            public double RocketLauncher {
                get;
                set;
            }
            public double BeancanGrenade {
                get;
                set;
            }
            public double F1Grenade {
                get;
                set;
            }
            public double Machete {
                get;
                set;
            }
            public double Longsword {
                get;
                set;
            }
            public double Mace {
                get;
                set;
            }
            public double SalvagedCleaver {
                get;
                set;
            }
            public double SalvagedSword {
                get;
                set;
            }
            public double StoneSpear {
                get;
                set;
            }
            public double WoodenSpear {
                get;
                set;
            }
            public Dictionary<string, int> Permissions;
            public double GetWeaponM (string wn) {
                switch (wn) {
                    case "Assault Rifle" : return AssaultRifle;
                    case "Hunting Bow" : return HuntingBow;
                    case "Bolt Action Rifle" : return BoltActionRifle;
                    case "Crossbow" : return Crossbow;
                    case "Thompson" : return Thompson;
                    case "Eoka Pistol" : return EokaPistol;
                    case "Revolver" : return Revolver;
                    case "Custom SMG" : return CustomSMG;
                    case "Semi-Automatic Rifle" : return SemiAutomaticRifle;
                    case "Semi-Automatic Pistol" : return SemiAutomaticPistol;
                    case "Pump Shotgun" : return PumpShotgun;
                    case "Waterpipe Shotgun" : return WaterpipeShotgun;
                    case "M249" : return M249;
                    case "Explosivetimed" : return TimedExplosiveCharge;
                    case "Explosivesatchel" : return SatchelCharge;
                    case "Double Barrel Shotgun" : return DoubleBarrelShotgun;
                    case "LR-300 Assault Rifle" : return LR300;
                    case "M92 Pistol" : return M92Pistol;
                    case "MP5A4" : return MP5A4;
                    case "Rocket Launcher" : return RocketLauncher;
                    case "Beancan Grenade" : return BeancanGrenade;
                    case "F1 Grenade" : return F1Grenade;
                    case "Machete" : return Machete;
                    case "Longsword" : return Longsword;
                    case "Mace" : return Mace;
                    case "Salvaged Cleaver" : return SalvagedCleaver;
                    case "Salvaged Sword" : return SalvagedSword;
                    case "Stone Spear" : return StoneSpear;
                    case "Wooden Spear" : return WoodenSpear;
                    default : return 1;
                }
            }
            public double GetDistanceM (float distance) {
                if (distance >= 400) return distance_400;
                if (distance >= 300) return distance_300;
                if (distance >= 200) return distance_200;
                if (distance >= 100) return distance_100;
                if (distance >= 50) return distance_50;
                return 1;
            }
            public double GetItemByString (string itemName) {
                switch (itemName) {
                    case "HuntingBow" : return HuntingBow;
                    case "Crossbow" : return Crossbow;
                    case "AssaultRifle" : return AssaultRifle;
                    case "PumpShotgun" : return PumpShotgun;
                    case "SemiAutomaticRifle" : return SemiAutomaticRifle;
                    case "Thompson" : return Thompson;
                    case "CustomSMG" : return CustomSMG;
                    case "BoltActionRifle" : return BoltActionRifle;
                    case "TimedExplosiveCharge" : return TimedExplosiveCharge;
                    case "M249" : return M249;
                    case "EokaPistol" : return EokaPistol;
                    case "Revolver" : return Revolver;
                    case "WaterpipeShotgun" : return WaterpipeShotgun;
                    case "SemiAutomaticPistol" : return SemiAutomaticPistol;
                    case "DoubleBarrelShotgun" : return DoubleBarrelShotgun;
                    case "SatchelCharge" : return SatchelCharge;
                    case "distance_50" : return distance_50;
                    case "distance_100" : return distance_100;
                    case "distance_200" : return distance_200;
                    case "distance_300" : return distance_300;
                    case "distance_400" : return distance_400;
                    case "HappyHourMultiplier" : return HappyHourMultiplier;
                    case "LR300" : return LR300;
                    case "M92 Pistol" : return M92Pistol;
                    case "MP5A4" : return MP5A4;
                    case "Rocket Launcher" : return RocketLauncher;
                    case "Beancan Grenade" : return BeancanGrenade;
                    case "F1 Grenade" : return F1Grenade;
                    case "Machete" : return Machete;
                    case "Longsword" : return Longsword;
                    case "Mace" : return Mace;
                    case "Salvaged Cleaver" : return SalvagedCleaver;
                    case "Salvaged Sword" : return SalvagedSword;
                    case "Stone Spear" : return StoneSpear;
                    case "Wooden Spear" : return WoodenSpear;
                    default : return 0;
                }
            }
        }
        class Options {
            public bool ActivityReward_Enabled {
                get;
                set;
            }
            public bool WelcomeMoney_Enabled {
                get;
                set;
            }
            public bool WeaponMultiplier_Enabled {
                get;
                set;
            }
            public bool DistanceMultiplier_Enabled {
                get;
                set;
            }
            public bool HappyHour_Enabled {
                get;
                set;
            }
            public bool Permission_Multiplier_Enabled {
                get;
                set;
            }
            public bool UseEconomicsPlugin {
                get;
                set;
            }
            public bool UseServerRewardsPlugin {
                get;
                set;
            }
            public bool UseFriendsPlugin {
                get;
                set;
            }
            public bool UseClansPlugin {
                get;
                set;
            }
            public bool Economincs_TakeMoneyFromVictim {
                get;
                set;
            }
            public bool ServerRewards_TakeMoneyFromVictim {
                get;
                set;
            }
            public bool PrintToConsole {
                get;
                set;
            }
            public bool NPCReward_Enabled {
                get;
                set;
            }
            public bool GetItemByString (string itemName) {
                switch (itemName) {
                    case "ActivityReward_Enabled" : return ActivityReward_Enabled;
                    case "WelcomeMoney_Enabled" : return WelcomeMoney_Enabled;
                    case "WeaponMultiplier_Enabled" : return WeaponMultiplier_Enabled;
                    case "DistanceMultiplier_Enabled" : return DistanceMultiplier_Enabled;
                    case "UseEconomicsPlugin" : return UseEconomicsPlugin;
                    case "UseServerRewardsPlugin" : return UseServerRewardsPlugin;
                    case "UseFriendsPlugin" : return UseFriendsPlugin;
                    case "UseClansPlugin" : return UseClansPlugin;
                    case "Economincs_TakeMoneyFromVictim" : return Economincs_TakeMoneyFromVictim;
                    case "ServerRewards_TakeMoneyFromVictim" : return ServerRewards_TakeMoneyFromVictim;
                    case "PrintToConsole" : return PrintToConsole;
                    case "HappyHour_Enabled" : return HappyHour_Enabled;
                    case "Permission_Multiplier_Enabled" : return Permission_Multiplier_Enabled;
                    case "NPCReward_Enabled" : return NPCReward_Enabled;
                    default : return false;
                }
            }
        }
    }
}

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