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

FREE DeadPlayersList : 2.0.5 2.0.5

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

namespace Oxide.Plugins
{
    [Info("Dead Players List", "Mughisi", "2.0.5", ResourceId = 696)]
    class DeadPlayersList : RustPlugin
    {

        class LocationInfo
        {
            public string x;
            public string y;
            public string z;
            Vector3 position;

            public LocationInfo(Vector3 position)
            {
                x = position.x.ToString();
                y = position.y.ToString();
                z = position.z.ToString();
                this.position = position;
            }

            public Vector3 GetPosition()
            {
                if (position == Vector3.zero)
                    position = new Vector3(float.Parse(x), float.Parse(y), float.Parse(z));
                return position;
            }
        }

        class DeadPlayerInfo
        {
            public string UserId;
            public string Name;
            public string Reason;
            public LocationInfo Position;

            public DeadPlayerInfo()
            {
            }

            public DeadPlayerInfo(BasePlayer victim, HitInfo info)
            {
                UserId = victim.userID.ToString();
                Name = victim.displayName;
                Reason = victim.lastDamage.ToString();
                if (info != null)
                {
                    var attacker = info.Initiator as BasePlayer;
                    if (info.Initiator)
                    {
                        Reason = info.Initiator.LookupPrefabName();
                        if (attacker && attacker != victim) Reason = attacker.displayName;
                    }
                }
                Position = new LocationInfo(victim.transform.position);
            }

            public ulong GetUserId()
            {
                ulong user_id;
                if (!ulong.TryParse(UserId, out user_id)) return 0;
                return user_id;
            }
        }

        class StoredData
        {
            public HashSet<DeadPlayerInfo> DeadPlayers = new HashSet<DeadPlayerInfo>();

            public StoredData()
            {
            }
        }

        StoredData storedData;

        Hash<ulong, DeadPlayerInfo> deadPlayers = new Hash<ulong, DeadPlayerInfo>();

        bool dataChanged;

        void Loaded() => LoadData();

        void Unloaded() => SaveData();

        void LoadData()
        {
            deadPlayers.Clear();
            try
            {
                storedData = Interface.GetMod().DataFileSystem.ReadObject<StoredData>("DeadPlayersList");
            }
            catch
            {
                storedData = new StoredData();
            }
            foreach (var dead_player in storedData.DeadPlayers)
                deadPlayers[dead_player.GetUserId()] = dead_player;
        }

        void SaveData() => Interface.GetMod().DataFileSystem.WriteObject("DeadPlayersList", storedData);

        void OnPlayerInit(BasePlayer player)
        {
            if (deadPlayers.Remove(player.userID) && storedData.DeadPlayers.RemoveWhere(info => info.GetUserId() == player.userID) > 0)
                dataChanged = true;
        }

        void OnPlayerRespawned(BasePlayer player)
        {
            if (deadPlayers.Remove(player.userID) && storedData.DeadPlayers.RemoveWhere(info => info.GetUserId() == player.userID) > 0)
                dataChanged = true;
        }

        void OnEntityDeath(BaseEntity entity, HitInfo info)
        {
            var player = entity as BasePlayer;
            if (!player) return;

            var dead_player = deadPlayers[player.userID];
            if (dead_player != null) storedData.DeadPlayers.Remove(dead_player);
            dead_player = new DeadPlayerInfo(player, info);
            deadPlayers[player.userID] = dead_player;
            storedData.DeadPlayers.Add(dead_player);

            dataChanged = true;
        }

        void OnServerSave()
        {
            if (!dataChanged) return;
            SaveData();
            dataChanged = false;
        }

        Dictionary<string, string> GetPlayerList()
        {
            Dictionary<string, string> deadPlayerList = new Dictionary<string, string>();
            foreach (var deadPlayer in deadPlayers)
                deadPlayerList.Add(deadPlayer.Key.ToString(), deadPlayer.Value.Name);

            return deadPlayerList;
        }

        string GetPlayerName(object userID) => deadPlayers[Convert.ToUInt64(userID)]?.Name;

        string GetPlayerDeathReason(object userID) => deadPlayers[Convert.ToUInt64(userID)]?.Reason;

        Vector3 GetPlayerDeathPosition(object userID) => deadPlayers[Convert.ToUInt64(userID)]?.Position.GetPosition() ?? Vector3.zero;
    }
}

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