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

FREE VIPPlaytime : 1.4.1 1.4.1

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

namespace Oxide.Plugins
{
    [Info("VIP Playtime", "CodeFlow", "1.4.1")]
    [Description("Otorga el grupo VIP a los jugadores después de cierto tiempo de juego.")]
    public class VIPPlaytime : CovalencePlugin
    {
        private PluginConfig config;
        private Dictionary<string, PlayerData> playerData;

        private class PluginConfig
        {
            [JsonProperty("VIPHours")]
            public double VIPHours { get; set; } = 20;

            [JsonProperty("VIPGroup")]
            public string VIPGroup { get; set; } = "vip";

            [JsonProperty("SaveInterval")]
            public int SaveInterval { get; set; } = 900;

            [JsonProperty("ViptimeCommand")]
            public string ViptimeCommand { get; set; } = "viptime";
        }

        private class PlayerData
        {
            public double Playtime { get; set; }
            public DateTime LastLogin { get; set; }
        }

        private void Init()
        {
            LoadConfig();
            LoadData();
            timer.Every(config.SaveInterval, SaveData);
            AddCovalenceCommand(config.ViptimeCommand, "CmdPlaytime");

            foreach (var player in players.Connected)
            {
                OnUserConnected(player);
            }
        }

        private void OnServerSave() => SaveData();

        private void OnUserConnected(IPlayer player)
        {
            var userId = player.Id;

            if (!playerData.ContainsKey(userId))
            {
                playerData[userId] = new PlayerData { Playtime = 0, LastLogin = DateTime.UtcNow };
                Puts($"Nuevo jugador agregado: {userId}");
            }
            else
            {
                playerData[userId].LastLogin = DateTime.UtcNow;
                Puts($"Jugador {userId} ha iniciado sesión.Último inicio de sesión actualizado.");
            }

            SaveData();
        }

        private void OnUserDisconnected(IPlayer player)
        {
            var userId = player.Id;

            if (playerData.ContainsKey(userId))
            {
                var sessionTime = DateTime.UtcNow - playerData[userId].LastLogin;
                playerData[userId].Playtime += sessionTime.TotalSeconds;
                Puts($"Jugador {userId} se ha desconectado.Tiempo de juego actualizado: {playerData[userId].Playtime} segundos.");
                CheckPlaytime(userId, player);
            }
            else
            {
                Puts($"No se encontraron datos de juego para el jugador {userId} al desconectar.");
            }

            SaveData();
        }

        private void CheckPlaytime(string userId, IPlayer player)
        {
            if (playerData[userId].Playtime / 3600 >= config.VIPHours && !permission.UserHasGroup(userId, config.VIPGroup))
            {
                permission.AddUserGroup(userId, config.VIPGroup);
                player.Message("¡Felicidades! Ahora eres VIP.");
                Puts($"Jugador {userId} ha sido añadido al grupo VIP.");
            }
        }

        private void CmdPlaytime(IPlayer player, string command, string[] args)
        {
            var userId = player.Id;

            if (playerData.ContainsKey(userId))
            {
                var playtimeSeconds = playerData[userId].Playtime;
                var hoursPlayed = Math.Floor(playtimeSeconds / 3600);
                var minutesPlayed = Math.Floor((playtimeSeconds % 3600) / 60);
                var secondsPlayed = Math.Floor(playtimeSeconds % 60);

                var remainingSeconds = (config.VIPHours * 3600) - playtimeSeconds;
                var remainingHours = Math.Floor(remainingSeconds / 3600);
                var remainingMinutes = Math.Floor((remainingSeconds % 3600) / 60);
                var remainingSecs = Math.Floor(remainingSeconds % 60);

                if (playtimeSeconds >= config.VIPHours * 3600)
                {
                    player.Message("¡Ya eres VIP!");
                }
                else
                {
                    player.Message($"Has jugado {hoursPlayed:F0} horas, {minutesPlayed:F0} minutos y {secondsPlayed:F0} segundos.");
                    player.Message($"Te faltan {remainingHours:F0} horas, {remainingMinutes:F0} minutos y {remainingSecs:F0} segundos para ser VIP.");
                }

                Puts($"Jugador {userId} ha consultado su tiempo de juego: {hoursPlayed:F0} horas, {minutesPlayed:F0} minutos y {secondsPlayed:F0} segundos.");
            }
            else
            {
                player.Message("No se encontraron datos de juego.Intenta nuevamente más tarde.");
                Puts($"No se encontraron datos de juego para el jugador {userId}.");
            }
        }

        private void LoadConfig()
        {
            var configPath = Path.Combine(Interface.Oxide.ConfigDirectory, "VIPPlaytime.json");
            config = File.Exists(configPath)
                ? JsonConvert.DeserializeObject<PluginConfig>(File.ReadAllText(configPath))
                : new PluginConfig();

            if (!File.Exists(configPath))
            {
                SaveConfig();
            }
        }

        private void SaveConfig()
        {
            var configPath = Path.Combine(Interface.Oxide.ConfigDirectory, "VIPPlaytime.json");
            File.WriteAllText(configPath, JsonConvert.SerializeObject(config, Formatting.Indented));
        }

        private void LoadData()
        {
            try
            {
                playerData = Interface.Oxide.DataFileSystem.ReadObject<Dictionary<string, PlayerData>>("VIPPlaytimeData")
                            ?? new Dictionary<string, PlayerData>();
            }
            catch (Exception ex)
            {
                Puts($"Error al cargar datos de juego: {ex.Message}");
                playerData = new Dictionary<string, PlayerData>();
            }
        }

        private void SaveData()
        {
            try
            {
                Interface.Oxide.DataFileSystem.WriteObject("VIPPlaytimeData", playerData);
                Puts("Datos de juego guardados correctamente.");
            }
            catch (Exception ex)
            {
                Puts($"Error al guardar datos de juego: {ex.Message}");
            }
        }
    }
}

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