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

FREE ConnectionDB : 0.2.1 0.2.1

Нет прав для скачивания
C#:
using System;
using System.Collections.Generic;
using Oxide.Core;
namespace Oxide.Plugins {
    [Info("ConnectionDB", "Norn", "0.2.1", ResourceId = 1459)]
    [Description("Connection database for devs.")]
    public class ConnectionDB : RustPlugin {
        class StoredData {
            public Dictionary<ulong, PlayerInfo> PlayerInfo = new Dictionary<ulong, PlayerInfo>();
            public StoredData() {
            }
        }
        class PlayerInfo {
            public ulong uUserID;
            public string tFirstName;
            public string tLastName;
            public int iInitTimestamp;
            public int iLastSeen;
            public string tInitIP;
            public string tLastIP;
            public int iSecondsPlayed;
            public int iConnections;
            public string tReason;
            public bool bAlive;
            public PlayerInfo() {
            }
        }
        StoredData DB_Connection;
        void Unload() {
            SaveData();
            if (SecondsCount != null) SecondsCount.Destroy();
        }
        void SaveData() {
            Interface.Oxide.DataFileSystem.WriteObject(this.Title, DB_Connection);
        }
        private bool InitPlayer(BasePlayer player) {
            if (player == null || !player.IsConnected) return false;
            PlayerInfo p = null;
            if (!DB_Connection.PlayerInfo.TryGetValue(player.userID, out p)) {
                var info = new PlayerInfo();
                int firstseen = UnixTimeStampUTC();
                string name = player.displayName;
                string ip = player.net.connection.ipaddress;
                info.uUserID = player.userID;
                info.iInitTimestamp = firstseen;
                info.iLastSeen = firstseen;
                info.iSecondsPlayed = 0;
                info.tFirstName = name;
                info.tLastName = name;
                info.tInitIP = ip;
                info.tLastIP = ip;
                info.iConnections = 1;
                info.bAlive = player.IsAlive();
                info.tReason = "null";
                DB_Connection.PlayerInfo.Add(info.uUserID, info);
                Interface.GetMod().DataFileSystem.WriteObject(this.Title, DB_Connection);
                int current_connections = Convert.ToInt32(Config["DB", "UniqueConnections"]);
                current_connections++;
                Config["DB", "UniqueConnections"] = current_connections;
                SaveConfig();
                if(Convert.ToBoolean(Config["General", "Debug"])) Puts("Registering " + info.tFirstName + " [ " + info.uUserID + " ].");
                return true;
            }
            else {
                p.iLastSeen = UnixTimeStampUTC();
                p.tLastName = player.displayName;
                p.tLastIP = player.net.connection.ipaddress;
                p.bAlive = player.IsAlive();
                p.iConnections++;
                if (Convert.ToBoolean(Config["General", "Debug"])) Puts("Updating " + p.tFirstName + " [ " + p.uUserID + " ].");
            }
            return false;
        }
        private void SyncAlive(BasePlayer player) {
            if (player != null && player.IsConnected) {
                if (ConnectionDataExists(player)) {
                    DB_Connection.PlayerInfo[player.userID].bAlive = player.IsAlive();
                }
            }
        }
        void OnPlayerInit(BasePlayer player) {
            InitPlayer(player);
        }
        private bool SaveConnectionDataFromID(ulong steamid, string reason = "") {
            if (ConnectionDataExistsFromID(steamid)) {
                BasePlayer player = BasePlayer.FindByID(steamid);
                if(player != null && player.IsConnected) {
                    DB_Connection.PlayerInfo[steamid].tLastName = player.displayName;
                    DB_Connection.PlayerInfo[steamid].tLastIP = player.net.connection.ipaddress;
                    DB_Connection.PlayerInfo[steamid].bAlive = player.IsAlive();
                }
                DB_Connection.PlayerInfo[steamid].iLastSeen = UnixTimeStampUTC();
                if (reason != "") {
                    DB_Connection.PlayerInfo[player.userID].tReason = reason;
                }
                return true;
            }
            return false;
        }
        private void SaveConnectionData(BasePlayer player, string reason = "") {
            if (ConnectionDataExists(player)) {
                DB_Connection.PlayerInfo[player.userID].tLastName = player.displayName;
                DB_Connection.PlayerInfo[player.userID].tLastIP = player.net.connection.ipaddress;
                DB_Connection.PlayerInfo[player.userID].iLastSeen = UnixTimeStampUTC();
                DB_Connection.PlayerInfo[player.userID].bAlive = player.IsAlive();
                if (reason != "") {
                    DB_Connection.PlayerInfo[player.userID].tReason = reason;
                }
            }
            else {
                InitPlayer(player);
                SaveConnectionData(player, reason);
            }
        }
        void OnPlayerDisconnected(BasePlayer player, string reason) {
            SaveConnectionData(player, reason);
        }
        private Int32 UnixTimeStampUTC() {
            Int32 unixTimeStamp;
            DateTime currentTime = DateTime.Now;
            DateTime zuluTime = currentTime.ToUniversalTime();
            DateTime unixEpoch = new DateTime(1970, 1, 1);
            unixTimeStamp = (Int32)(zuluTime.Subtract(unixEpoch)).TotalSeconds;
            return unixTimeStamp;
        }
        static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
        static readonly double MaxUnixSeconds = (DateTime.MaxValue - UnixEpoch).TotalSeconds;
        private static DateTime UnixTimeStampToDateTime(double unixTimeStamp) {
            return unixTimeStamp > MaxUnixSeconds ? UnixEpoch.AddMilliseconds(unixTimeStamp) : UnixEpoch.AddSeconds(unixTimeStamp);
        }
        private DateTime FirstSeenFromID(ulong steamid) {
            DateTime date = System.DateTime.Now;
            if (ConnectionDataExistsFromID(steamid)) date = UnixTimeStampToDateTime(DB_Connection.PlayerInfo[steamid].iInitTimestamp);
            return date;
        }
        private int Connections(BasePlayer player) {
            int connections = 0;
            if (ConnectionDataExistsFromID(player.userID)) connections = DB_Connection.PlayerInfo[player.userID].iConnections;
            return connections;
        }
        private int ConnectionsFromID(ulong steamid) {
            int connections = 0;
            if (ConnectionDataExistsFromID(steamid)) connections = DB_Connection.PlayerInfo[steamid].iConnections;
            return connections;
        }
        private int SecondsPlayed(BasePlayer player) {
            int seconds = 0;
            if (ConnectionDataExistsFromID(player.userID)) seconds = DB_Connection.PlayerInfo[player.userID].iSecondsPlayed;
            return seconds;
        }
        private int SecondsPlayedFromID(ulong steamid) {
            int seconds = 0;
            if (ConnectionDataExistsFromID(steamid)) seconds = DB_Connection.PlayerInfo[steamid].iSecondsPlayed;
            return seconds;
        }
        private string FirstIP(BasePlayer player) {
            if (ConnectionDataExistsFromID(player.userID)) return DB_Connection.PlayerInfo[player.userID].tInitIP;
            return "null";
        }
        private string FirstIPFromID(ulong steamid) {
            if (ConnectionDataExistsFromID(steamid)) return DB_Connection.PlayerInfo[steamid].tInitIP;
            return "null";
        }
        private string LastIP(BasePlayer player) {
            if (ConnectionDataExistsFromID(player.userID)) return DB_Connection.PlayerInfo[player.userID].tLastIP;
            return "null";
        }
        private string LastIPFromID(ulong steamid) {
            if (ConnectionDataExistsFromID(steamid)) return DB_Connection.PlayerInfo[steamid].tLastIP;
            return "null";
        }
        private string LastName(BasePlayer player) {
            if (ConnectionDataExistsFromID(player.userID)) return DB_Connection.PlayerInfo[player.userID].tLastName;
            return "null";
        }
        private string LastNameFromID(ulong steamid) {
            if (ConnectionDataExistsFromID(steamid)) return DB_Connection.PlayerInfo[steamid].tLastName;
            return "null";
        }
        private string FirstName(BasePlayer player) {
            if (ConnectionDataExistsFromID(player.userID)) return DB_Connection.PlayerInfo[player.userID].tFirstName;
            return "null";
        }
        private string FirstNameFromID(ulong steamid) {
            if (ConnectionDataExistsFromID(steamid)) return DB_Connection.PlayerInfo[steamid].tFirstName;
            return "null";
        }
        private string DisconnectReasonFromID(ulong steamid) {
            if (ConnectionDataExistsFromID(steamid)) {
                if(DB_Connection.PlayerInfo[steamid].tReason.Length >= 1) {
                    return DB_Connection.PlayerInfo[steamid].tReason;
                }
            }
            return "null";
        }
        private string DisconnectReason(BasePlayer player) {
            if (ConnectionDataExistsFromID(player.userID)) {
                if (DB_Connection.PlayerInfo[player.userID].tReason.Length >= 1) {
                    return DB_Connection.PlayerInfo[player.userID].tReason;
                }
            }
            return "null";
        }
        private bool IsPlayerAliveFromID(ulong steamid) {
            if (ConnectionDataExistsFromID(steamid)) {
                return DB_Connection.PlayerInfo[steamid].bAlive;
            }
            return false;
        }
        private DateTime FirstSeen(BasePlayer player) {
            DateTime date = System.DateTime.Now;
            if (ConnectionDataExistsFromID(player.userID)) date = UnixTimeStampToDateTime(DB_Connection.PlayerInfo[player.userID].iInitTimestamp);
            return date;
        }
        private DateTime LastSeen(BasePlayer player) {
            DateTime date = System.DateTime.Now;
            if (ConnectionDataExistsFromID(player.userID)) date = UnixTimeStampToDateTime(DB_Connection.PlayerInfo[player.userID].iLastSeen);
            return date;
        }
        private DateTime ConfigInitTimestamp() {
            return UnixTimeStampToDateTime(Convert.ToInt32(Config["General", "ConfigInit"]));
        }
        private DateTime LastSeenFromID(ulong steamid) {
            DateTime date = System.DateTime.Now;
            if (ConnectionDataExistsFromID(steamid)) date = UnixTimeStampToDateTime(DB_Connection.PlayerInfo[steamid].iLastSeen);
            return date;
        }
        protected override void LoadDefaultConfig() {
            Puts("No configuration file found, generating...");
            Config.Clear();
            // --- [ GENERAL SETTINGS ] ---
            Config["General", "Debug"] = true;
            Config["General", "ConfigInit"] = UnixTimeStampUTC();
            Config["Admin", "AuthLevel"] = 2;
            Config["DB", "UniqueConnections"] = 0;
            Config["Timers", "SecondsInterval"] = 10;
            SaveConfig();
        }
        System.Random rnd = new System.Random();
        protected int GetRandomInt(int min, int max) {
            return rnd.Next(min, max);
        }
        void Loaded() {
            DB_Connection = Interface.GetMod().DataFileSystem.ReadObject<StoredData>(this.Title);
        }
        private bool ConnectionDataExistsFromID(ulong steamid) {
            if (DB_Connection.PlayerInfo.ContainsKey(steamid)) {
                return true;
            }
            return false;
        }
        private bool ConnectionDataExists(BasePlayer player) {
            if (player == null || !player.IsConnected) return false;
            if (DB_Connection.PlayerInfo.ContainsKey(player.userID)) {
                return true;
            }
            return false;
        }
        private int UniqueConnections() {
            return Convert.ToInt32(Config["DB", "UniqueConnections"]);
        }
        private int ConnectionPlayerCount() {
            return DB_Connection.PlayerInfo.Count;
        }
        private void UpdateSeconds() {
            foreach (BasePlayer player in BasePlayer.activePlayerList) {
                if (ConnectionDataExists(player)) {
                    DB_Connection.PlayerInfo[player.userID].iSecondsPlayed += Convert.ToInt32(Config["Timers", "SecondsInterval"]);
                    SyncAlive(player);
                }
                else {
                    InitPlayer(player);
                }
            }
        }
        Timer SecondsCount;
        void OnServerInitialized() {
            Puts("Loaded " + ConnectionPlayerCount().ToString() + " profiles.[Unique Connections: " + UniqueConnections().ToString() + "]");
            int seconds = Convert.ToInt32(Config["Timers", "SecondsInterval"]);
            SecondsCount = timer.Repeat(seconds, 0, () => UpdateSeconds());
        }
    }
}

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