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

FREE HookParser : 0.0.2 0.0.2

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

namespace Oxide.Plugins;

[Info("Hook Parser", "Takaro", "0.0.2")]
internal class HookParser : RustPlugin
{
    #region Oxide Hooks

    private void OnPlayerConnected(BasePlayer player)
    {
        Hook hook = new(Type.PLAYER_CONNECTED, new PlayerConnected
        {
            Player = GetTakaroPlayer(player)
        });

        LogParsedJson(hook);
    }

    private void OnPlayerDisconnected(BasePlayer player, string reason)
    {
        Hook hook = new(Type.PLAYER_DISCONNECTED, new PlayerDisconnected
        {
            Player = GetTakaroPlayer(player)
        });

        LogParsedJson(hook);
    }

    private void OnPlayerChat(BasePlayer player, string? message, Chat.ChatChannel channel)
    {
        if (player == null || message == null) return;

        Hook hook = new(Type.CHAT_MESSAGE, new ChatMessage
        {
            Player = GetTakaroPlayer(player),
            Message = message,
            Channel = channel.ToString()
        });

        LogParsedJson(hook);
    }

    private void OnPlayerDeath(BasePlayer player, HitInfo? info)
    {
        if (player == null) return;

        if (info == null)
        {
            Hook hook = new(Type.PLAYER_DEATH, new PlayerDeath
            {
                Player = GetTakaroPlayer(player),
                Position = player.transform.position,
            });
            LogParsedJson(hook);

        }
        else
        {
            BasePlayer attacker = info.InitiatorPlayer;
            if (attacker == null)
            {
                Hook hook = new(Type.PLAYER_DEATH, new PlayerDeath
                {
                    Player = GetTakaroPlayer(player),
                    Position = player.transform.position,
                });
                LogParsedJson(hook);
            }
            else
            {
                Hook hook = new(Type.PLAYER_DEATH, new PlayerDeath
                {
                    Player = GetTakaroPlayer(player),
                    Attacker = GetTakaroPlayer(attacker),
                    Position = player.transform.position,
                    Weapon = info.WeaponPrefab.ShortPrefabName ?? "Unknown"
                });
                LogParsedJson(hook);
            }

        }

    }

    private void OnEntityDeath(BaseCombatEntity entity, HitInfo? info)
    {
        if (entity == null || info == null) return;

        if (entity is BasePlayer) return;

        BasePlayer player = info.InitiatorPlayer;
        if (player == null) return;

        Hook hook = new(Type.ENTITY_KILLED, new EntityKilled
        {
            Player = GetTakaroPlayer(player),
            Entity = entity.ShortPrefabName,
            Weapon = info.WeaponPrefab.ShortPrefabName
        });

        LogParsedJson(hook);
    }

    #endregion

    #region Helpers
    private TakaroPlayer GetTakaroPlayer(BasePlayer player)
    {
        return new()
        {
            Name = player.displayName,
            SteamId = player.userID.ToString(),
            Ip = player.net.connection.ipaddress,
            Ping = Network.Net.sv.GetAveragePing(player.net.connection)
        };
    }

    private void LogParsedJson(Hook hook)
    {
        string stringifyJson = JsonConvert.SerializeObject(hook, Formatting.None);
        Puts(stringifyJson);
    }
    #endregion

    #region Classes
    private enum Type
    {
        PLAYER_CONNECTED = 0,
        PLAYER_DISCONNECTED = 1,
        CHAT_MESSAGE = 2,
        PLAYER_DEATH = 3,
        ENTITY_KILLED = 4
    }

    private class TakaroPlayer
    {
        [JsonProperty("name")]
        public string? Name { get; set; }

        [JsonProperty("steamId")]
        public string SteamId { get; set; }

        [JsonProperty("ip")]
        public string? Ip { get; set; }

        [JsonProperty("ping")]
        public int Ping { get; set; }
    }

    private class Hook
    {
        [JsonProperty("type")]
        public Type Type { get; set; }

        [JsonProperty("data")]
        public object Data { get; set; }

        public Hook(Type type, object data)
        {
            Type = type;
            Data = data;
        }
    }

    private class PlayerConnected
    {
        [JsonProperty("player")]
        public TakaroPlayer? Player { get; set; }
    }

    private class PlayerDisconnected
    {
        [JsonProperty("player")]
        public TakaroPlayer? Player { get; set; }
    }

    private class ChatMessage
    {
        [JsonProperty("player")]
        public TakaroPlayer? Player { get; set; }

        [JsonProperty("msg")]
        public string? Message { get; set; }

        [JsonProperty("channel")]
        public string? Channel { get; set; }
    }

    private class PlayerDeath
    {
        [JsonProperty("player")]
        public TakaroPlayer? Player { get; set; }

        [JsonProperty("attacker")]
        public TakaroPlayer? Attacker { get; set; }

        [JsonProperty("position")]
        public Vector3 Position { get; set; }

        [JsonProperty("weapon")]
        public string? Weapon { get; set; }
    }

    private class EntityKilled
    {
        [JsonProperty("player")]
        public TakaroPlayer? Player { get; set; }

        [JsonProperty("entity")]
        public string? Entity { get; set; }

        [JsonProperty("weapon")]
        public string? Weapon { get; set; }
    }
    #endregion
}

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