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

FREE FatigueGather : 0.0.1 0.0.1

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

namespace Oxide.Plugins
{

    [Info("FatigueGather", "Default", "0.0.1")]
    class FatigueGather : RustPlugin
    {
        // TODO - add chat command to show current gather rate.private const float OverallMultiplier = 1.0f;
        private Dictionary<string, int> playerFatigueLevels = new Dictionary<string, int>();

        private Dictionary<int, float> fatigueLevelsToMultipliers = new Dictionary<int, float>
        {
            [0] = 1.00f,
            [1] = 1.00f,
            [2] = 0.87f,
            [3] = 0.74f,
            [4] = 0.61f,
            [5] = 0.49f,
            [6] = 0.36f,
            [7] = 0.23f,
            [8] = 0.10f
        };

        private Dictionary<int, float> GetFatigueGatherTable()
        {
            return fatigueLevelsToMultipliers;
        }

        private float getModifierForPlayer(BaseEntity entity)
        {
            var steamId = entity?.ToPlayer()?.IPlayer?.Id;
            if( steamId == null )
            {
                Debug.LogWarning("Entity not a player");
                return OverallMultiplier;
            } 

            var playerFatigueLevel = -1;
            if (!playerFatigueLevels.TryGetValue(steamId, out playerFatigueLevel))
            {
                Debug.LogWarning($"Count not find steam ID {steamId} in fatigueLevel store");
                return OverallMultiplier;
            }
            return OverallMultiplier * fatigueLevelsToMultipliers[playerFatigueLevel];
        }

        private int handlePartial(float value)
        {
            int whole = (int)Math.Floor(value);
            float partial = value - whole;
            int roundedPartial = 
                partial > UnityEngine.Random.value ?
                    1 :
                    0;
            return whole + roundedPartial;
        }

        private void OnFatigueLevel( BasePlayer player, int value)
        {
            if( value < 0 || value > 8)
            {
                Debug.LogWarning($"Value provided ({value}) was outside allowed range  [0 - 8]");
                return;
            }
            if(player?.IPlayer?.Id == null)
            {
                Debug.LogWarning($"Not a valid player");
            }
            playerFatigueLevels[player.IPlayer.Id] = value;
        }

        private void OnDispenserGather(ResourceDispenser dispenser, BaseEntity entity, Item item)
        {
            if (!entity.ToPlayer()) return;
            
            var modifier = getModifierForPlayer(entity);
            var amount = item.amount;
            item.amount = handlePartial(item.amount * modifier);

            try
            {
                dispenser.containedItems.Single(x => x.itemid == item.info.itemid).amount += amount - item.amount / modifier;

                if (dispenser.containedItems.Single(x => x.itemid == item.info.itemid).amount < 0)
                {
                    item.amount += (int)dispenser.containedItems.Single(x => x.itemid == item.info.itemid).amount;
                }
            }
            catch ( Exception e )
            { 
                Debug.LogException( e );
            }
        }

        private void OnDispenserBonus(ResourceDispenser dispenser, BaseEntity entity, Item item) => 
            OnDispenserGather(dispenser, entity, item);
 

        private void OnGrowableGather(GrowableEntity growable, Item item, BasePlayer player)
        {
            item.amount = handlePartial(item.amount * getModifierForPlayer(player));
        }

        private void OnQuarryGather(MiningQuarry quarry, List<ResourceDepositManager.ResourceDeposit.ResourceDepositEntry> items)
        {
            for (var i = 0; i < items.Count; i++)
            {
                items[i].amount = handlePartial(items[i].amount * OverallMultiplier);
            }
        }

        private void OnExcavatorGather(ExcavatorArm excavator, Item item)
        {
            item.amount = handlePartial(item.amount * OverallMultiplier);
        }

        private void OnCollectiblePickup(Item item, BasePlayer player)
        {
            item.amount = handlePartial(item.amount * getModifierForPlayer(player));
        }

        private void OnSurveyGather(SurveyCharge surveyCharge, Item item)
        {
            item.amount = handlePartial(item.amount * OverallMultiplier);
        }
    }
}

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