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

FREE GatherPlus : 1.0.0 1.0.0

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
// Reference: Oxide.Core.RustyCore
using System;
using System.Collections.Generic;
using System.Linq;
using Oxide.Core.Libraries;
using Oxide.Core;
using RustyCore;
using RustyCore.Utils;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("GatherPlus", "bazuka5801", "1.0.0")]
    class GatherPlus : RustPlugin
    {


        #region CONFIGURATION

        Dictionary<string, Dictionary<string, float>> privileges;

        const string DISPENSER_GATHER = "Рейт добываемых ресурсов";
        const string COLLECTIBLE_PICKUP = "Рейт поднимаемых ресурсов";
        const string QUARRY_GATHER = "Рейт добываемых ресурсов в карьере";

        protected override void LoadDefaultConfig()
        {
            Config["Привилегии"] = privileges = GetConfig("Привилегии", new Dictionary<string, object>()
                {
                    {
                        "gather.vip", new Dictionary<string, object>()
                        {
                            {DISPENSER_GATHER, 1f},
                            {COLLECTIBLE_PICKUP, 1f},
                            {QUARRY_GATHER, 1f}
                        }
                    }
                }).ToDictionary(p => p.Key,
                    p =>
                        ((Dictionary<string, object>) p.Value).ToDictionary(k => k.Key,
                            k => (float) Convert.ChangeType(k.Value, typeof(float))));

            SaveConfig();
        }

        T GetConfig<T>(string name, T defaultValue)
            => Config[name] == null ? defaultValue : (T) Convert.ChangeType(Config[name], typeof(T));

        #endregion

        #region VARIABLES

        private RCore core = Interface.Oxide.GetLibrary<RCore>();

        #endregion

        #region OXIDE HOOKS

        void OnServerInitialized()
        {
            LoadDefaultConfig();
            PermissionService.RegisterPermissions(this, privileges.Keys.ToList());
            core.AddHook(this, nameof(OnDispenserGather), 1000);
            if (!permission.GroupHasPermission("default", "gatherplus.default"))
                permission.GrantGroupPermission("default", "gatherplus.default", this);
        }

        void OnDispenserGather(ResourceDispenser dispenser, BaseEntity entity, Item item)
        {
            if (dispenser == null) return;
            if (entity == null) return;
            BasePlayer player = entity as BasePlayer;
            if (player == null) return;
            DoGather(player.userID, DISPENSER_GATHER, item);
        }

        void OnCollectiblePickup(Item item, BasePlayer player)
        {
            DoGather(player.userID, COLLECTIBLE_PICKUP, item);
        }

        void OnQuarryGather(MiningQuarry quarry, Item item)
        {
            var uid = quarry.OwnerID;
            if (!uid.IsSteamId()) return;
            DoGather(uid, QUARRY_GATHER, item);
        }

        void OnAssignFinishBonus(BasePlayer player, Item item)
        {
            var uid = player.userID;
            if (!uid.IsSteamId()) return;
            DoGather( uid, DISPENSER_GATHER, item );
        }

        private void OnSurveyGather(SurveyCharge surveyCharge, Item item)
        {
            item.amount = (int) (item.amount * privileges["gatherplus.defualt"][QUARRY_GATHER]);
        }

        void OnEntitySpawned(BaseNetworkable entity)
        {
            if (entity is OreResourceEntity)
            {
                if (UnityEngine.Random.Range(0, 5) == 3)
                {
                    entity.Kill();
                }
            }
        }

        #endregion

            #region CORE

            void DoGather(ulong uid, string type, Item item)
        {
            if (item.info.shortname == "cloth")
                item.amount = item.amount > 1 ? (int)(item.amount / 1.5f) : 1;
            float multiplier = GetMultiplier(uid, type);
            item.amount = (int) (item.amount * multiplier);
        }

        float GetMultiplier(ulong uid, string type)
        {
            float multiplier = 1;
            foreach (var privilege in privileges)
                if (PermissionService.HasPermission(uid, privilege.Key))
                    multiplier = Mathf.Max(multiplier, privilege.Value[type]);
            return multiplier;
        }

        #endregion

    }
}

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