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

FREE GamblingStats : 1.3.0 1.3.0

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

namespace Oxide.Plugins
{
    [Info("GamblingStats", "herbs.acab", "1.3.0")]
    [Description("Records and displays gambling statistics for players.")]

    class GamblingStats : CovalencePlugin
    {
        class PlayerStats
        {
            public int ScrapSpent { get; set; }
            public int ScrapLost { get; set; }
            public int ScrapEarned { get; set; }
        }

        private Dictionary<string, PlayerStats> playerStats = new Dictionary<string, PlayerStats>();
        private const int BackupCount = 5;
        private const float SaveInterval = 600f; // Save every 10 minutes

        protected override void LoadDefaultConfig()
        {
            // No configuration needed for local storage
        }

        void Init()
        {
            LoadData();
            timer.Every(SaveInterval, SaveData);
            Puts("GamblingStats plugin loaded.");
            permission.RegisterPermission("gamblingstats.admin", this);
        }

        void Unload()
        {
            SaveData();
            Puts("GamblingStats plugin unloaded.");
        }

        void OnServerSave()
        {
            SaveData();
        }

        void OnServerShutdown()
        {
            SaveData();
        }

        void OnPlayerInit(BasePlayer player)
        {
            var stats = GetPlayerStats(player.UserIDString);
            int profitLoss = stats.ScrapEarned - (stats.ScrapSpent - stats.ScrapLost);
            player.ChatMessage($"Welcome! Your current gambling profit/loss is: {profitLoss} scrap.");
        }

        // Commands
        [Command("help")]
        void HelpCommand(IPlayer player, string command, string[] args)
        {
            player.Message("<color=red>/mystats</color> - View your gambling statistics.");
            player.Message("<color=red>/topstats</color> - View the top 10 gamblers.");
            player.Message("<color=red>/searchstats <PlayerName or Steam64ID></color> - View gambling statistics for a specific player.");
        }

        [Command("mystats")]
        void MyStatsCommand(IPlayer player, string command, string[] args)
        {
            var stats = GetPlayerStats(player.Id);
            player.Message($"You have spent {stats.ScrapSpent} scrap, lost {stats.ScrapLost} scrap, and earned {stats.ScrapEarned} scrap through gambling.");
        }

        [Command("topstats")]
        void TopStatsCommand(IPlayer player, string command, string[] args)
        {
            var topStats = GetTopStats();
            foreach (var stat in topStats)
            {
                var targetPlayer = covalence.Players.FindPlayerById(stat.Key);
                if (targetPlayer != null)
                {
                    player.Message($"{targetPlayer.Name}: Spent {stat.Value.ScrapSpent}, Lost {stat.Value.ScrapLost}, Earned {stat.Value.ScrapEarned}");
                }
            }
        }

        [Command("searchstats")]
        void SearchStatsCommand(IPlayer player, string command, string[] args)
        {
            if (args.Length == 0)
            {
                player.Message("Usage: /searchstats <PlayerName or Steam64ID>");
                return;
            }

            var targetPlayer = FindPlayer(args[0]);
            if (targetPlayer == null)
            {
                player.Message("Player not found.");
                return;
            }

            var stats = GetPlayerStats(targetPlayer.Id);
            player.Message($"{targetPlayer.Name} has spent {stats.ScrapSpent} scrap, lost {stats.ScrapLost} scrap, and earned {stats.ScrapEarned} scrap through gambling.");
        }

        [Command("deldata"), Permission("gamblingstats.admin")]
        void DelDataCommand(IPlayer player, string command, string[] args)
        {
            if (args.Length == 0)
            {
                player.Message("Usage: /deldata <Steam64ID>");
                return;
            }

            string playerId = args[0];
            if (playerStats.Remove(playerId))
            {
                player.Message($"Player data for {playerId} has been removed.");
            }
            else
            {
                player.Message($"Player data for {playerId} not found.");
            }

            SaveData();
        }

        // Hook into specific gambling events
        void OnScrapSpent(BasePlayer player, int amount)
        {
            var stats = GetPlayerStats(player.UserIDString);
            stats.ScrapSpent += amount;
            SaveData();
        }

        void OnScrapLost(BasePlayer player, int amount)
        {
            var stats = GetPlayerStats(player.UserIDString);
            stats.ScrapLost += amount;
            SaveData();
        }

        void OnScrapEarned(BasePlayer player, int amount)
        {
            var stats = GetPlayerStats(player.UserIDString);
            stats.ScrapEarned += amount;
            SaveData();
        }

        // Helper methods to load, save, and get player stats
        void LoadData()
        {
            playerStats = Interface.Oxide.DataFileSystem.ReadObject<Dictionary<string, PlayerStats>>(Name);
        }

        void SaveData()
        {
            CreateBackup();
            Interface.Oxide.DataFileSystem.WriteObject(Name, playerStats);
        }

        void CreateBackup()
        {
            string backupDir = $"{Interface.Oxide.DataDirectory}/{Name}/backups";
            string backupFile = $"{backupDir}/{Name}_{DateTime.Now:yyyy-MM-dd_HH-mm-ss}.json";

            if (!Directory.Exists(backupDir))
                Directory.CreateDirectory(backupDir);

            File.Copy($"{Interface.Oxide.DataDirectory}/{Name}.json", backupFile, true);

            var backupFiles = new DirectoryInfo(backupDir).GetFiles().OrderByDescending(f => f.CreationTime).ToList();

            if (backupFiles.Count > BackupCount)
            {
                for (int i = BackupCount; i < backupFiles.Count; i++)
                {
                    backupFiles[i].Delete();
                }
            }
        }

        PlayerStats GetPlayerStats(string playerId)
        {
            if (!playerStats.TryGetValue(playerId, out var stats))
            {
                stats = new PlayerStats();
                playerStats[playerId] = stats;
            }
            return stats;
        }

        Dictionary<string, PlayerStats> GetTopStats()
        {
            return playerStats.OrderByDescending(s => s.Value.ScrapEarned).Take(10).ToDictionary(pair => pair.Key, pair => pair.Value);
        }

        IPlayer FindPlayer(string identifier)
        {
            return covalence.Players.FindPlayer(identifier);
        }
    }
}

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