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

FREE StaminaControl : 1.3.4 1.3.4

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

namespace Oxide.Plugins
{
    [Info("StaminaControl", "sdapro", "1.3.4")]
    [Description("Manage stamina for sprinting players using thirst.")]
    class StaminaControl : RustPlugin
    {
        private const string StaminaPermission = "staminacontrol.use";
        private const float ThirstCostPerSecond = 15f; // Снижение жажды в секунду при беге
        private const float ThirstRecoveryRate = 15f; // Восстановление жажды в секунду
        private const float MinHydration = -200f; // Минимальное значение жажды
        private const float MaxHydration = 200f; // Максимальное значение жажды
        private const float JumpThirstCost = 50f; // Жажда за прыжок
        private const float RecoveryDelay = 4f; // Задержка восстановления жажды после остановки

        private Dictionary<ulong, StaminaData> playerData = new Dictionary<ulong, StaminaData>();

        class StaminaData
        {
            public bool isSprinting;
            public bool wasOnGround;
            public float lastUpdateTime;
            public float lastJumpTime;
            public float lastStopTime;

            public StaminaData()
            {
                isSprinting = false;
                wasOnGround = true;
                lastUpdateTime = Time.realtimeSinceStartup;
                lastJumpTime = 0f;
                lastStopTime = 0f;
            }
        }

        private void Init()
        {
            permission.RegisterPermission(StaminaPermission, this);
        }

        private void OnPlayerTick(BasePlayer player)
        {
            if (player == null || player.IsDead() || !player.IsConnected)
                return;

            if (!permission.UserHasPermission(player.UserIDString, StaminaPermission))
                return;

            if (!playerData.ContainsKey(player.userID))
            {
                playerData[player.userID] = new StaminaData();
            }

            var data = playerData[player.userID];
            bool isCurrentlySprinting = player.modelState.sprinting;
            bool isOnGround = player.IsOnGround();
            float currentTime = Time.realtimeSinceStartup;
            float deltaTime = currentTime - data.lastUpdateTime;

            if (!isOnGround && data.wasOnGround && currentTime - data.lastJumpTime > 0.1f)
            {
                player.metabolism.hydration.value -= JumpThirstCost;
                data.lastJumpTime = currentTime;

                if (player.metabolism.hydration.value < MinHydration)
                {
                    player.metabolism.hydration.value = MinHydration;
                }
            }

            if (isCurrentlySprinting)
            {
                player.metabolism.hydration.value -= ThirstCostPerSecond * deltaTime;

                if (player.metabolism.hydration.value < MinHydration)
                {
                    player.metabolism.hydration.value = MinHydration;
                }
                data.lastStopTime = currentTime;
            }
            else
            {
                if (currentTime - data.lastStopTime >= RecoveryDelay)
                {
                    player.metabolism.hydration.value += ThirstRecoveryRate * deltaTime;

                    if (player.metabolism.hydration.value > MaxHydration)
                    {
                        player.metabolism.hydration.value = MaxHydration;
                    }
                }
            }
            data.wasOnGround = isOnGround;
            data.isSprinting = isCurrentlySprinting;
            data.lastUpdateTime = currentTime;
        }

        private void OnPlayerDisconnected(BasePlayer player, string reason)
        {
            if (playerData.ContainsKey(player.userID))
            {
                playerData.Remove(player.userID);
            }
        }
    }
}

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