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

FREE MagazinBoost : 1.6.2 1.6.2

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Reflection;
namespace Oxide.Plugins {
    [Info("MagazinBoost", "Fujikura", "1.6.2", ResourceId = 1962)]
    [Description("Can change magazines, ammo and condition for most projectile weapons")]
    public class MagazinBoost : RustPlugin {
        bool Changed;
        Dictionary<string, object> weaponContainer = new Dictionary <string, object>();
        Dictionary<string, string> guidToPath;
#region Config
        string permissionAll;
        string permissionMaxAmmo;
        string permissionPreLoad;
        string permissionMaxCondition;
        string permissionAmmoType;
        bool checkPermission;
        bool removeSkinIfNoRights;
        object GetConfig(string menu, string datavalue, object defaultValue) {
            var data = Config[menu] as Dictionary<string, object>;
            if (data == null) {
                data = new Dictionary<string, object>();
                Config[menu] = data;
                Changed = true;
            }
            object value;
            if (!data.TryGetValue(datavalue, out value)) {
                value = defaultValue;
                data[datavalue] = value;
                Changed = true;
            }
            return value;
        }
        void LoadVariables() {
            permissionAll = Convert.ToString(GetConfig("Permissions", "permissionAll", "magazinboost.canall"));
            permissionMaxAmmo = Convert.ToString(GetConfig("Permissions", "permissionMaxAmmo", "magazinboost.canmaxammo"));
            permissionPreLoad = Convert.ToString(GetConfig("Permissions", "permissionPreLoad", "magazinboost.canpreload"));
            permissionMaxCondition = Convert.ToString(GetConfig("Permissions", "permissionMaxCondition", "magazinboost.canmaxcondition"));
            permissionAmmoType = Convert.ToString(GetConfig("Permissions", "permissionAmmoType", "magazinboost.canammotype"));
            checkPermission = Convert.ToBoolean(GetConfig("CheckRights", "checkForRightsInBelt", true));
            removeSkinIfNoRights = Convert.ToBoolean(GetConfig("CheckRights", "removeSkinIfNoRights", true));
            weaponContainer = (Dictionary<string, object>)GetConfig("Weapons", "Data", new Dictionary<string, object>());
            if (!Changed) return;
            SaveConfig();
            Changed = false;
        }
        protected override void LoadDefaultConfig() {
            Config.Clear();
            LoadVariables();
        }
#endregion Config
        void GetWeapons() {
            weaponContainer = (Dictionary <string, object>)Config["Weapons", "Data"];
            var weapons = ItemManager.GetItemDefinitions().Where(p => p.category == ItemCategory.Weapon && p.GetComponent<ItemModEntity>() != null);
            if (weaponContainer != null && weaponContainer.Count() > 0) {
                int countLoadedServerStats = 0;
                foreach (var weapon in weapons) {
                    if (!guidToPath.ContainsKey(weapon.GetComponent<ItemModEntity>().entityPrefab.guid) || weapon.GetComponent<ItemModEntity>().entityPrefab.Get().GetComponent<BaseProjectile>() == null) continue;
                    if (weaponContainer.ContainsKey(weapon.shortname)) {
                        Dictionary <string, object> serverDefaults = weaponContainer[weapon.shortname] as Dictionary <string, object>;
                        if(!serverDefaults.ContainsKey("givemaxammo")) {
                            serverDefaults.Add("givemaxammo", serverDefaults["servermaxammo"]);
                            serverDefaults.Add("givepreload", serverDefaults["serverpreload"]);
                            serverDefaults.Add("giveammotype", serverDefaults["serverammotype"]);
                            serverDefaults.Add("givemaxcondition", serverDefaults["servermaxcondition"]);
                            serverDefaults.Add("giveskinid", 0);
                        }
                        if ((bool)serverDefaults["serveractive"]) {
                            ItemDefinition weaponDef = ItemManager.FindItemDefinition(weapon.shortname);
                            weaponDef.GetComponent<ItemModEntity>().entityPrefab.Get().GetComponent<BaseProjectile>().primaryMagazine.definition.builtInSize = (int)serverDefaults["servermaxammo"];
                            weaponDef.GetComponent<ItemModEntity>().entityPrefab.Get().GetComponent<BaseProjectile>().primaryMagazine.contents = (int)serverDefaults["serverpreload"];
                            ItemDefinition ammo = ItemManager.FindItemDefinition((string)serverDefaults["serverammotype"]);
                            if (ammo != null) weaponDef.GetComponent<ItemModEntity>().entityPrefab.Get().GetComponent<BaseProjectile>().primaryMagazine.ammoType = ammo;
                            weaponDef.condition.max = Convert.ToSingle(serverDefaults["servermaxcondition"]);
                            countLoadedServerStats++;
                        }
                        continue;
                    }
                    Dictionary <string, object> weaponStats = new Dictionary <string, object>();
                    weaponStats.Add("displayname", weapon.displayName.english);
                    weaponStats.Add("maxammo", weapon.GetComponent<ItemModEntity>().entityPrefab.Get().GetComponent<BaseProjectile>().primaryMagazine.definition.builtInSize);
                    weaponStats.Add("preload", weapon.GetComponent<ItemModEntity>().entityPrefab.Get().GetComponent<BaseProjectile>().primaryMagazine.contents);
                    weaponStats.Add("maxcondition", weapon.condition.max);
                    weaponStats.Add("ammotype", weapon.GetComponent<ItemModEntity>().entityPrefab.Get().GetComponent<BaseProjectile>().primaryMagazine.ammoType.shortname);
                    weaponStats.Add("skinid", 0);
                    weaponStats.Add("settingactive", true);
                    weaponStats.Add("servermaxammo", weapon.GetComponent<ItemModEntity>().entityPrefab.Get().GetComponent<BaseProjectile>().primaryMagazine.definition.builtInSize);
                    weaponStats.Add("serverpreload", weapon.GetComponent<ItemModEntity>().entityPrefab.Get().GetComponent<BaseProjectile>().primaryMagazine.contents);
                    weaponStats.Add("serverammotype", weapon.GetComponent<ItemModEntity>().entityPrefab.Get().GetComponent<BaseProjectile>().primaryMagazine.ammoType.shortname);
                    weaponStats.Add("servermaxcondition", weapon.condition.max);
                    weaponStats.Add("serveractive", false);
                    weaponStats.Add("givemaxammo", weapon.GetComponent<ItemModEntity>().entityPrefab.Get().GetComponent<BaseProjectile>().primaryMagazine.definition.builtInSize);
                    weaponStats.Add("givepreload", weapon.GetComponent<ItemModEntity>().entityPrefab.Get().GetComponent<BaseProjectile>().primaryMagazine.contents);
                    weaponStats.Add("giveammotype", weapon.GetComponent<ItemModEntity>().entityPrefab.Get().GetComponent<BaseProjectile>().primaryMagazine.ammoType.shortname);
                    weaponStats.Add("givemaxcondition", weapon.condition.max);
                    weaponContainer.Add(weapon.shortname, weaponStats);
                    Puts($"Added NEW weapon '{weapon.displayName.english} ({weapon.shortname})' to weapons list");
                }
                if (countLoadedServerStats > 0) Puts($"Changed server default values for '{countLoadedServerStats}' weapons");
                Config["Weapons", "Data"] = weaponContainer;
                Config.Save();
                return;
            }
            else {
                int counter = 0;
                foreach (var weapon in weapons) {
                    if (!guidToPath.ContainsKey(weapon.GetComponent<ItemModEntity>().entityPrefab.guid)) continue;
                    if (weapon.GetComponent<ItemModEntity>().entityPrefab.Get().GetComponent<BaseProjectile>() == null) continue;
                    Dictionary <string, object> weaponStats = new Dictionary <string, object>();
                    weaponStats.Add("displayname", weapon.displayName.english);
                    weaponStats.Add("maxammo", weapon.GetComponent<ItemModEntity>().entityPrefab.Get().GetComponent<BaseProjectile>().primaryMagazine.definition.builtInSize);
                    weaponStats.Add("preload", weapon.GetComponent<ItemModEntity>().entityPrefab.Get().GetComponent<BaseProjectile>().primaryMagazine.contents);
                    weaponStats.Add("maxcondition", weapon.condition.max);
                    weaponStats.Add("ammotype", weapon.GetComponent<ItemModEntity>().entityPrefab.Get().GetComponent<BaseProjectile>().primaryMagazine.ammoType.shortname);
                    weaponStats.Add("skinid", 0);
                    weaponStats.Add("settingactive", true);
                    weaponStats.Add("servermaxammo", weapon.GetComponent<ItemModEntity>().entityPrefab.Get().GetComponent<BaseProjectile>().primaryMagazine.definition.builtInSize);
                    weaponStats.Add("serverpreload", weapon.GetComponent<ItemModEntity>().entityPrefab.Get().GetComponent<BaseProjectile>().primaryMagazine.contents);
                    weaponStats.Add("serverammotype", weapon.GetComponent<ItemModEntity>().entityPrefab.Get().GetComponent<BaseProjectile>().primaryMagazine.ammoType.shortname);
                    weaponStats.Add("servermaxcondition", weapon.condition.max);
                    weaponStats.Add("serveractive", false);
                    weaponStats.Add("givemaxammo", weapon.GetComponent<ItemModEntity>().entityPrefab.Get().GetComponent<BaseProjectile>().primaryMagazine.definition.builtInSize);
                    weaponStats.Add("givepreload", weapon.GetComponent<ItemModEntity>().entityPrefab.Get().GetComponent<BaseProjectile>().primaryMagazine.contents);
                    weaponStats.Add("giveammotype", weapon.GetComponent<ItemModEntity>().entityPrefab.Get().GetComponent<BaseProjectile>().primaryMagazine.ammoType.shortname);
                    weaponStats.Add("givemaxcondition", weapon.condition.max);
                    weaponStats.Add("giveskinid", 0);
                    weaponContainer.Add(weapon.shortname, weaponStats);
                    counter++;
                }
                Puts($"Created initial weaponlist with '{counter}' projectile weapons.");
                Config["Weapons", "Data"] = weaponContainer;
                Config.Save();
                return;
            }
        }
        bool hasAnyRight(BasePlayer player) {
            if (permission.UserHasPermission(player.UserIDString, permissionAll)) return true;
            if (permission.UserHasPermission(player.UserIDString, permissionMaxAmmo)) return true;
            if (permission.UserHasPermission(player.UserIDString, permissionPreLoad)) return true;
            if (permission.UserHasPermission(player.UserIDString, permissionMaxCondition)) return true;
            if (permission.UserHasPermission(player.UserIDString, permissionAmmoType)) return true;
            return false;
        }
        bool hasRight(BasePlayer player, string perm) {
            bool right = false;
            switch (perm) {
                case "all" : if (permission.UserHasPermission(player.UserIDString, permissionAll)) {
                    right = true;
                }
                break;
                case "maxammo" : if (permission.UserHasPermission(player.UserIDString, permissionMaxAmmo)) {
                    right = true;
                }
                break;
                case "preload" : if (permission.UserHasPermission(player.UserIDString, permissionPreLoad)) {
                    right = true;
                }
                break;
                case "maxcondition" : if (permission.UserHasPermission(player.UserIDString, permissionMaxCondition)) {
                    right = true;
                }
                break;
                case "ammotype" : if (permission.UserHasPermission(player.UserIDString, permissionAmmoType)) {
                    right = true;
                }
                break;
                default : break;
            }
            return right;
        }
        void OnServerInitialized() {
            LoadVariables();
            guidToPath = GameManifest.guidToPath;
            GetWeapons();
            permission.RegisterPermission(permissionAll, this);
            permission.RegisterPermission(permissionMaxAmmo, this);
            permission.RegisterPermission(permissionPreLoad, this);
            permission.RegisterPermission(permissionMaxCondition, this);
            permission.RegisterPermission(permissionAmmoType, this);
        }
        void OnItemCraftFinished(ItemCraftTask task, Item item) {
            if(!(item.GetHeldEntity() is BaseProjectile)) return;
            if(!hasAnyRight(task.owner)) return;
            Dictionary <string, object> weaponStats = null;
            if (weaponContainer.ContainsKey(item.info.shortname)) weaponStats = weaponContainer[item.info.shortname] as Dictionary <string, object>;
            if (!(bool)weaponStats["settingactive"]) return;
            if (hasRight(task.owner, "maxammo") || hasRight(task.owner, "all")) (item.GetHeldEntity() as BaseProjectile).primaryMagazine.capacity = (int)weaponStats["maxammo"];
            if (hasRight(task.owner, "preload") || hasRight(task.owner, "all")) (item.GetHeldEntity() as BaseProjectile).primaryMagazine.contents = (int)weaponStats["preload"];
            if (hasRight(task.owner, "ammotype") || hasRight(task.owner, "all")) {
                var ammo = ItemManager.FindItemDefinition((string)weaponStats["ammotype"]);
                if (ammo != null) (item.GetHeldEntity() as BaseProjectile).primaryMagazine.ammoType = ammo;
            }
            if (hasRight(task.owner, "maxcondition") || hasRight(task.owner, "all")) {
                item._maxCondition = Convert.ToSingle(weaponStats["maxcondition"]);
                item._condition = Convert.ToSingle(weaponStats["maxcondition"]);
            }
            if((int)weaponStats["skinid"] > 0) {
                item.skin = Convert.ToUInt64(weaponStats["skinid"]);
                item.GetHeldEntity().skinID = Convert.ToUInt64(weaponStats["skinid"]);
            }
        }
        private void OnItemAddedToContainer(ItemContainer container, Item item) {
            if(!checkPermission) return;
            if(item.GetHeldEntity() is BaseProjectile && container.HasFlag(ItemContainer.Flag.Belt)) {
                Dictionary <string, object> weaponStats = null;
                object checkStats;
                if (weaponContainer.TryGetValue(item.info.shortname, out checkStats)) {
                    weaponStats = checkStats as Dictionary <string, object>;
                    if (!(bool)weaponStats["settingactive"]) return;
                }
                else return;
                if ((item.GetHeldEntity() as BaseProjectile).primaryMagazine.capacity > item.info.GetComponent<ItemModEntity>().entityPrefab.Get().GetComponent<BaseProjectile>().primaryMagazine.definition.builtInSize && !(hasRight(container.playerOwner, "maxammo") || hasRight(container.playerOwner, "all"))) {
                    (item.GetHeldEntity() as BaseProjectile).primaryMagazine.capacity = item.info.GetComponent<ItemModEntity>().entityPrefab.Get().GetComponent<BaseProjectile>().primaryMagazine.definition.builtInSize;
                    if ((item.GetHeldEntity() as BaseProjectile).primaryMagazine.contents > (item.GetHeldEntity() as BaseProjectile).primaryMagazine.capacity) (item.GetHeldEntity() as BaseProjectile).primaryMagazine.contents = (item.GetHeldEntity() as BaseProjectile).primaryMagazine.capacity;
                }
                if (item.maxCondition > item.info.condition.max && !(hasRight(container.playerOwner, "maxcondition") || hasRight(container.playerOwner, "all"))) {
                    var newCon = item.condition * (item.info.condition.max / item.maxCondition);
                    item._maxCondition = Convert.ToSingle(item.info.condition.max);
                    item._condition = Convert.ToSingle(newCon);
                }
                if (removeSkinIfNoRights && !hasAnyRight(container.playerOwner) && item.GetHeldEntity().skinID == Convert.ToUInt64(weaponStats["skinid"]) && item.GetHeldEntity().skinID != 0uL) {
                    item.skin = 0uL;
                    item.GetHeldEntity().skinID = 0uL;
                }
            }
        }
        [ConsoleCommand("mb.giveplayer")]
        void BoostGive(ConsoleSystem.Arg arg) {
            if (arg.Connection != null && arg.Connection.authLevel < 2) return;
            if (arg.Args == null || arg.Args.Length < 2) {
                SendReply(arg, "Usage: magazinboost.give playername|id weaponshortname (optional: skinid)");
                return;
            }
            ulong skinid = 0;
            if (arg.Args.Length > 2) {
                if (!ulong.TryParse(arg.Args[2], out skinid)) {
                    SendReply(arg, "Skin has to be a number");
                    return;
                }
                if (arg.Args[2].Length != 9) {
                    SendReply(arg, "Skin has to be a 9-digit number");
                    return;
                }
            }
            BasePlayer target = BasePlayer.Find(arg.Args[0]);
            if (target == null) {
                SendReply(arg, $"Player '{arg.Args[0]}' not found");
                return;
            }
            Dictionary <string, object> weaponStats = null;
            object checkStats;
            if (weaponContainer.TryGetValue(arg.Args[1], out checkStats)) weaponStats = checkStats as Dictionary <string, object>;
            else {
                SendReply(arg, "Weapon '{arg.Args[0]}' not included/supported");
                return;
            }
            Item item = ItemManager.Create(ItemManager.FindItemDefinition(arg.Args[1]), 1, skinid);
            if (item == null) {
                SendReply(arg, "Weapon for unknown reason not created");
                return;
            }
            (item.GetHeldEntity() as BaseProjectile).primaryMagazine.capacity = (int)weaponStats["givemaxammo"];
            (item.GetHeldEntity() as BaseProjectile).primaryMagazine.contents = (int)weaponStats["givepreload"];
            var ammo = ItemManager.FindItemDefinition((string)weaponStats["giveammotype"]);
            if (ammo != null) (item.GetHeldEntity() as BaseProjectile).primaryMagazine.ammoType = ammo;
            item._maxCondition = Convert.ToSingle(weaponStats["givemaxcondition"]);
            item._condition = Convert.ToSingle(weaponStats["givemaxcondition"]);
            if (skinid == 0 && Convert.ToUInt64(weaponStats["giveskinid"]) > 0) skinid = Convert.ToUInt64(weaponStats["giveskinid"]);
            if(skinid > 0) {
                item.skin = Convert.ToUInt64(weaponStats["giveskinid"]);
                item.GetHeldEntity().skinID = Convert.ToUInt64(weaponStats["giveskinid"]);
            }
            target.GiveItem(item);
            SendReply(arg, $"Weapon '{arg.Args[1]}' given to Player '{target.displayName}'");
        }
    }
}

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