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

FREE RustySheriffAlertSystem : 1.0.4 1.0.4

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System.Collections.Generic;
using System;
using System.Reflection;
using System.Data;
using UnityEngine;
using Oxide.Core;
using System.IO;
using Oxide.Core.Libraries;
using System.Linq;
namespace Oxide.Plugins {
    [Info("RaidAlert", "By JV", "1.0.4")]
    class RustySheriffAlertSystem : RustPlugin {
        List<BasePlayer> allBasePlayer;
        List<Auth> authList = new List<Auth>();
        List<DrawListEntry> drawList = new List<DrawListEntry>();
        List<IgnoreListEntry> ignoreList = new List<IgnoreListEntry>();
        List<ulong> muteList = new List<ulong>();
        List<Trespasser> newTrespassers = new List<Trespasser>();
        List<Trespasser> oldTrespassers = new List<Trespasser>();
        List<Perimeter> perimeters = new List<Perimeter>();
        List<TestAlert> testAlerts = new List<TestAlert>();
        List<ValReq> valReqs = new List<ValReq>();
        List<ulong> validated = new List<ulong>();
        Dictionary<ulong, int> authDict = new Dictionary<ulong, int>();
        Dictionary<ulong, int> ignoreDict = new Dictionary<ulong, int>();
        Dictionary<ulong, int> perimeterDict = new Dictionary<ulong, int>();
        private static DateTime epoch;
        string url = "http://jvetech.co.uk";
        double drawCheck = 0;
        double nextCheck = 0;
        double playerUpdateCheck = 0;
        int maxPerimeterDelta = 75;
        int maxPerimeterPoints = 50;
        int maxPerimetersPerPlayer = 4;
        int playerCheckIndex = 0;
        int timeBetweenChecks = 30;
        bool alertsVisibleInGame = true;
        bool alertTriggeredOnlyWhenSleepingInPerimeter = false;
        bool automaticCheckingEnabled = true;
        bool enabledForAuthorisedUsersOnly = false;
        bool sendAnon = false;
        bool syncWithRustySheriffServer = true;
        bool updatedOldData = false;
        bool useCupboards = false;
        bool adminsAuthed = false;
        private FieldInfo buildingPrivlidges;
        float perimeterHeightDelta = 1.5f;
        System.Random rnd = new System.Random(DateTime.Now.Millisecond);
        [ChatCommand("rs")]
        void cmdChatRS(BasePlayer player, string command, string[] args) {
            if (getAuthLevel(player.userID) >= 0 || !enabledForAuthorisedUsersOnly) {
                if (args == null || args.Length == 0) {
                    showMainMenu(player);
                    return;
                }
                else {
                    if (args[0] == "set") {
                        set(player, args);
                        return;
                    }
                    if (args[0] == "view") {
                        viewPerimeters(player, args);
                        return;
                    }
                    if (args[0] == "start") {
                        startPerimeter(player, args);
                        return;
                    }
                    if (args[0] == "add") {
                        addPerimeterEntry(player, false);
                        return;
                    }
                    if (args[0] == "stop") {
                        stopPerimeter(player);
                        return;
                    }
                    if (args[0] == "cancel") {
                        cancelPerimeter(player);
                        return;
                    }
                    if (args[0] == "clear") {
                        clearPerimeters(player);
                        return;
                    }
                    if (args[0] == "delete") {
                        deletePerimeter(player, args);
                        return;
                    }
                    if (args[0] == "validate") {
                        validatePlayer(player, false);
                        return;
                    }
                    if (args[0] == "validatenew") {
                        validatePlayer(player, true);
                        return;
                    }
                    if (args[0] == "ignore") {
                        ignorePlayer(player, args);
                        return;
                    }
                    if (args[0] == "unignore") {
                        unignorePlayer(player, args);
                        return;
                    }
                    if (args[0] == "clearignores") {
                        clearIgnoreList(player);
                        return;
                    }
                    if (args[0] == "ignores") {
                        viewIgnoreList(player);
                        return;
                    }
                    if (args[0] == "ignoredetect") {
                        ignoreDetect(player);
                        return;
                    }
                    if (args[0] == "mute") {
                        muteIngameAlerts(player, true);
                        return;
                    }
                    if (args[0] == "unmute") {
                        muteIngameAlerts(player, false);
                        return;
                    }
                    if (args[0] == "help") {
                        showHelpMenu(player);
                        return;
                    }
                    if (args[0] == "undo") {
                        undoLastPoint(player);
                        return;
                    }
                    if (args[0] == "test") {
                        testPerimeter(player);
                        return;
                    }
                    if (args[0] == "adv") {
                        showAdvancedMenu(player);
                        return;
                    }
                    if (getAuthLevel(player.userID) == 2) {
                        if (args[0] == "time") {
                            setTimeBetweenChecks(player, args);
                            return;
                        }
                        if (args[0] == "adduser") {
                            addUser(player, args);
                            return;
                        }
                        if (args[0] == "deluser") {
                            delUser(player, args);
                            return;
                        }
                        if (args[0] == "enable") {
                            toggleAutoCheck(player, true);
                            return;
                        }
                        if (args[0] == "disable") {
                            toggleAutoCheck(player, false);
                            return;
                        }
                        if (args[0] == "save") {
                            saveAllData(player);
                            return;
                        }
                        if (args[0] == "auths") {
                            showAuthorisedUsers(player);
                            return;
                        }
                        if (args[0] == "secure") {
                            toggleSecureMode(player);
                            return;
                        }
                        if (args[0] == "chatmute") {
                            toggleChatMute(player);
                            return;
                        }
                        if (args[0] == "sleepers") {
                            toggleSleepers(player);
                            return;
                        }
                        if (args[0] == "maxperim") {
                            setMaxPerimeters(player, args);
                            return;
                        }
                        if (args[0] == "maxsize") {
                            setMaxSize(player, args);
                            return;
                        }
                        if (args[0] == "maxpoints") {
                            setMaxPoints(player, args);
                            return;
                        }
                        if (args[0] == "checkinterval") {
                            setCheckInterval(player, args);
                            return;
                        }
                        if (args[0] == "sync") {
                            toggleSync(player);
                            return;
                        }
                        if (args[0] == "status") {
                            showStatus(player);
                            return;
                        }
                        if (args[0] == "anon") {
                            toggleAnon(player);
                            return;
                        }
                        if (args[0] == "cupboard") {
                            toggleUseCupboard(player);
                            return;
                        }
                        if (args[0] == "admin") {
                            showAdminMenu(player);
                            Puts("|{}+*#");
                            Puts("CLEAN - " + cleanString("|{}+*#"));
                            return;
                        }
                        if (args[0] == "auth") {
                            showAuthMenu(player);
                            return;
                        }
                    }
                    SendReply(player, "Please enter a valid command.Do /rs for a list.");
                }
            }
        }
        [ConsoleCommand("rs.adduser")]
        void cmdRSAddUser(ConsoleSystem.Arg arg) {
            addUser(null, arg.Args);
        }
        [ConsoleCommand("rs.auths")]
        void cmdRSAuths(ConsoleSystem.Arg arg) {
            showAuthorisedUsers(null);
        }
        [ConsoleCommand("rs.deluser")]
        void cmdRSDelUser(ConsoleSystem.Arg arg) {
            delUser(null, arg.Args);
        }
        [ConsoleCommand("rs.save")]
        void cmdRSSave(ConsoleSystem.Arg arg) {
            saveAllData(null);
            Puts("Config and data saved.");
        }
        void addPerimeter(BasePlayer player, string perimeterName) {
            if (isInProgress(player.userID)) {
                SendReply(player, "You already have a perimeter in progress.Do /rs cancel to remove it.");
                return;
            }
            perimeterName = cleanString(perimeterName);
            int perimeterIndex = getPerimeterIndex(player.userID);
            if (perimeterIndex == -1) {
                Perimeter per = new Perimeter();
                per.steamid = player.userID;
                perimeters.Add(per);
                perimeterDict.Add(player.userID, perimeters.Count - 1);
                perimeterIndex = perimeters.Count - 1;
            }
            if (!isPerimeterNameInUse(player.userID, perimeterName)) {
                PlayerPerimeter pl = new PlayerPerimeter();
                pl.name = perimeterName;
                Vector3 v = new Vector3();
                v.x = player.transform.position.x;
                v.y = player.transform.position.y;
                // +perimeterHeightDelta;
                v.z = player.transform.position.z;
                pl.coords.Add(v);
                pl.finished = false;
                pl.id = (uint)rnd.Next(1000, 999999999);
                perimeters[perimeterIndex].playerPerimeters.Add(pl);
                SendReply(player, "Started perimeter entry for perimeter " + perimeterName + ".Do /rs add to enter, and /rs stop for the last waypoint.");
                //*** ENSURE ANY PLAYER TIMERS ARE DESTROYED HERE ***//
                plotPerimeter(player, perimeterIndex, perimeters[perimeterIndex].playerPerimeters.Count - 1);
                DrawListEntry d = new DrawListEntry();
                d.basePlayer = player;
                d.perimeterIndex = perimeterIndex;
                d.playerPerimeterIndex = perimeters[perimeterIndex].playerPerimeters.Count - 1;
                drawList.Add(d);
            }
            else {
                SendReply(player, "You already have a perimeter called " + perimeterName + ".Do /rs delete <index> to remove it, or choose another name.");
            }
        }
        int addPerimeterEntry(BasePlayer player, bool stop) {
            PerimeterPosition pPos = getInProgress(player.userID);
            if (pPos.perimeterIndex == -1) {
                SendReply(player, "You need to start a perimeter first.Do /rs start <name>, or /rs set for auto-creation.");
                return -1;
            }
            string perimeterName = perimeters[pPos.perimeterIndex].playerPerimeters[pPos.playerPerimeterIndex].name;
            int perimeterCount = perimeters[pPos.perimeterIndex].playerPerimeters[pPos.playerPerimeterIndex].coords.Count;
            int authLevel = getAuthLevel(player.userID);
            if (!stop) {
                if ((perimeterCount > maxPerimeterPoints - 1) && authLevel < 1) {
                    SendReply(player, "You cannot enter any more waypoints for perimeter " + perimeterName + ".Do /rs stop to finalise this perimeter or /rs cancel discard it.");
                    return -1;
                }
            }
            Vector3 ePoint = player.transform.position;
            //ePoint.y += perimeterHeightDelta;
            perimeters[pPos.perimeterIndex].playerPerimeters[pPos.playerPerimeterIndex].coords.Add(ePoint);
            if (!findTolerances(pPos) && authLevel < 1) {
                SendReply(player, "You cannot add this waypoint as the resulting perimeter will be larger than permitted.(" + maxPerimeterDelta.ToString() + " x " + maxPerimeterDelta.ToString() + ")");
                perimeters[pPos.perimeterIndex].playerPerimeters[pPos.playerPerimeterIndex].coords.RemoveAt(perimeters[pPos.perimeterIndex].playerPerimeters[pPos.playerPerimeterIndex].coords.Count - 1);
                return -1;
            }
            if (authLevel < 1) {
                SendReply(player, "Added current location to perimeter " + perimeterName + ".- " + (perimeterCount + 1).ToString() + "/" + maxPerimeterPoints.ToString() + ".");
            }
            else {
                SendReply(player, "Added current location to perimeter " + perimeterName + ".");
            }
            plotPerimeter(player, pPos.perimeterIndex, pPos.playerPerimeterIndex);
            return perimeterCount + 1;
        }
        void addUser(BasePlayer initPlayer, string[] args) {
            int argIndexDelta = 0;
            if (initPlayer != null) {
                //called from ingame
                argIndexDelta = 1;
            }
            string name = "";
            if ((args == null && initPlayer == null) || (args.Length == 1 && initPlayer != null)) {
                if (args != null) {
                    SendReply(initPlayer, "Do /rs adduser followed by either <steamid> <authlevel> or <name> <authlevel> if the player's online.");
                    SendReply(initPlayer, "Or /rs <steamid> <name> <authLevel> if they're offline.");
                    SendReply(initPlayer, "0 = Normal User, 1 = Privileged user, 2 = Admin.");
                    return;
                }
                else {
                    Puts("Do /rs adduser followed by either <steamid> <authlevel> or <name> <authlevel> if the player's online.");
                    Puts("Or /rs <steamid> <name> <authLevel> if they're offline.");
                    Puts("0 = Normal User, 1 = Privileged user, 2 = Admin.");
                    return;
                }
            }
            if (args.Length < 2) {
                if (initPlayer != null) {
                    SendReply(initPlayer, "Do /rs adduser followed by either <steamid> <authlevel> or <name> <authlevel> if the player's online.Or /rs <steamid> <name> <authLevel> if they're offline.0 = Normal User, 1 = Privileged user, 2 = Admin.");
                    return;
                }
                else {
                    Puts("Do /rs adduser followed by either <steamid> <authlevel> or <name> <authlevel> if the player's online.");
                    Puts("Or /rs <steamid> <name> <authLevel> if they're offline.");
                    Puts("0 = Normal User, 1 = Privileged user, 2 = Admin.");
                    return;
                }
            }
            //check authLevel
            int argIndex = -1;
            if (args.Length == 2 + argIndexDelta) {
                argIndex = 1 + argIndexDelta;
            }
            else {
                argIndex = 2 + argIndexDelta;
            }
            int authLevel;
            try {
                authLevel = Convert.ToInt32(args[argIndex]);
            }
            catch (Exception e) {
                if (initPlayer != null) {
                    SendReply(initPlayer, "Invalid auth level entered.0 = Normal User, 1 = Privileged User, 2 = Admin.");
                }
                else {
                    Puts("Invalid auth level entered.0 = Normal User, 1 = Privileged User, 2 = Admin.");
                }
                return;
            }
            ulong steamid = 0;
            if (args.Length == 2 + argIndexDelta) {
                //can be steamid or playername + authlevel
                //check if steamid
                bool match = false;
                if (args[argIndexDelta].Length == 17) {
                    match = false;
                    name = "";
                    if (args[argIndexDelta].Substring(0, 6) == "765611") {
                        try {
                            steamid = Convert.ToUInt64(args[argIndexDelta]);
                        }
                        catch (Exception e) {
                            if (initPlayer != null) {
                                SendReply(initPlayer, "Invalid SteamID entered.");
                            }
                            else {
                                Puts("Invalid SteamID entered.");
                            }
                            return;
                        }
                        for (int i = 0; i < allBasePlayer.Count; i++) {
                            if (allBasePlayer[i].userID == (ulong)steamid) {
                                name = allBasePlayer[i].displayName;
                                match = true;
                                break;
                            }
                        }
                    }
                }
                if (!match) {
                    //check for playername instead
                    int r = checkDupes(args[argIndexDelta]);
                    if (r >= 0) {
                        for (int i = 0; i < allBasePlayer.Count; i++) {
                            if (allBasePlayer[i].displayName.Length >= args[argIndexDelta].Length) {
                                if (allBasePlayer[i].displayName.Substring(0, args[argIndexDelta].Length) == args[argIndexDelta]) {
                                    steamid = allBasePlayer[i].userID;
                                    name = allBasePlayer[i].displayName;
                                    match = true;
                                    break;
                                }
                            }
                        }
                    }
                    else {
                        if (initPlayer != null) {
                            if (r == -2) {
                                SendReply(initPlayer, "There is more than 1 player with that name.");
                            }
                            else {
                                SendReply(initPlayer, "There are no players with that name.");
                            }
                        }
                        else {
                            if (r == -2) {
                                Puts("There is more than 1 player with that name.");
                            }
                            else {
                                Puts("There are no players with that name.");
                            }
                        }
                        return;
                    }
                }
                if (match) {
                    int aIndex = -1;
                    if (getPlayerIndex(steamid) != -1) {
                        setAuthLevel(steamid, authLevel, name, initPlayer, false);
                    }
                }
                else {
                    if (initPlayer != null) {
                        SendReply(initPlayer, "No players with that name or SteamID are currently online.Try /rs adduser <steamid> <name> <authlevl> to add an offline player.");
                    }
                    else {
                        Puts("No players with that name or SteamID are currently online.Try /rs adduser <steamid> <name> <authlevl> to add an offline player.");
                    }
                }
            }
            if (args.Length == 3 + argIndexDelta) {
                //<steamid> <name> <level>
                try {
                    steamid = Convert.ToUInt64(args[argIndexDelta]);
                }
                catch (Exception e) {
                    if (initPlayer != null) {
                        SendReply(initPlayer, "Invalid SteamID entered.");
                    }
                    else {
                        Puts("Invalid SteamID entered.");
                    }
                    return;
                }
                name = args[1 + argIndexDelta];
                setAuthLevel(steamid, authLevel, name, initPlayer, false);
            }
        }
        void addValidationRequest(ulong steamid, bool newCode) {
            for (int i = 0; i < valReqs.Count; i++) {
                if (valReqs[i].steamid == steamid) {
                    valReqs.RemoveAt(i);
                    break;
                }
            }
            ValReq v = new ValReq();
            v.steamid = steamid;
            v.newCode = newCode;
            valReqs.Add(v);
        }
        void cancelPerimeter(BasePlayer player) {
            stopPerimeter(player, true);
        }
        void checkAdminsAuthed() {
            for (int i = 0; i < allBasePlayer.Count; i++) {
                if (isServerModerator(allBasePlayer[i])) {
                    setAuthLevel(allBasePlayer[i].userID, 2, allBasePlayer[i].displayName, null, true);
                }
            }
        }
        int checkDupes(string playerName) {
            int count = 0;
            int index = 0;
            for (int i = 0; i < allBasePlayer.Count; i++) {
                if (allBasePlayer[i].displayName.Length >= playerName.Length) {
                    if (allBasePlayer[i].displayName.Substring(0, playerName.Length) == playerName) {
                        count++;
                        index = i;
                    }
                }
            }
            if (count == 0) {
                return -1;
            }
            if (count == 1) {
                return index;
            }
            //count must be > 1 so
            return -2;
        }
        void checkTrespass() {
            if (allBasePlayer.Count > playerCheckIndex) {
                BasePlayer serverPlayer = allBasePlayer[playerCheckIndex];
                int authLevel = getAuthLevel(serverPlayer.userID);
                if (authLevel < 2) {
                    string serverPlayerName = serverPlayer.displayName;
                    serverPlayerName = cleanString(serverPlayerName);
                    Vector3 serverPlayerPos = serverPlayer.transform.position;
                    for (int i = 0; i < perimeters.Count; i++) {
                        for (int p = 0; p < perimeters[i].playerPerimeters.Count; p++) {
                            bool doCheck = false;
                            if (enabledForAuthorisedUsersOnly) {
                                if (authLevel == 0) {
                                    if (alertTriggeredOnlyWhenSleepingInPerimeter) {
                                        if (perimeters[i].playerPerimeters[p].sleeperPresent) {
                                            doCheck = true;
                                        }
                                    }
                                    else {
                                        doCheck = true;
                                    }
                                }
                                if (authLevel > 0) {
                                    doCheck = true;
                                }
                            }
                            else {
                                if (alertTriggeredOnlyWhenSleepingInPerimeter) {
                                    if (perimeters[i].playerPerimeters[p].sleeperPresent) {
                                        doCheck = true;
                                    }
                                }
                                else {
                                    doCheck = true;
                                }
                            }
                            if (doCheck) {
                                doCheck = false;
                                if (perimeters[i].playerPerimeters[p].finished) {
                                    int wn = 0;
                                    if (serverPlayerPos.x >= perimeters[i].playerPerimeters[p].minX && serverPlayerPos.x <= perimeters[i].playerPerimeters[p].maxX) {
                                        if (serverPlayerPos.z >= perimeters[i].playerPerimeters[p].minY && serverPlayerPos.z <= perimeters[i].playerPerimeters[p].maxY) {
                                            PerimeterPosition pPos = new PerimeterPosition();
                                            pPos.perimeterIndex = i;
                                            pPos.playerPerimeterIndex = p;
                                            wn = windingPoly(serverPlayerPos, pPos);
                                        }
                                    }
                                    if (wn != 0) {
                                        if (syncWithRustySheriffServer && isValidated(serverPlayer.userID)) {
                                            if (!isPlayerIgnored(perimeters[i].steamid, serverPlayer.userID)) {
                                                Trespasser t = new Trespasser();
                                                t.id = perimeters[i].playerPerimeters[p].id;
                                                t.steamid = perimeters[i].steamid;
                                                t.name = cleanString(perimeters[i].playerPerimeters[p].name);
                                                t.trespasserSteamID = serverPlayer.userID;
                                                t.alertText = "|" + perimeters[i].playerPerimeters[p].id + "|" + cleanString(serverPlayerName) + "|" + serverPlayerPos.x.ToString() + "|" + serverPlayerPos.z.ToString();
                                                newTrespassers.Add(t);
                                            }
                                        }
                                        if (alertsVisibleInGame) {
                                            doCheck = true;
                                        }
                                        else {
                                            if (authLevel > 0) {
                                                doCheck = true;
                                            }
                                        }
                                        if (doCheck) {
                                            for (int t = 0; t < allBasePlayer.Count; t++) {
                                                if (perimeters[i].steamid == allBasePlayer[t].userID) {
                                                    if (!muteList.Contains(perimeters[i].steamid)) {
                                                        if (!isPlayerIgnored(perimeters[i].steamid, serverPlayer.userID)) {
                                                            bool isValid = true;
                                                            //if (authLevel == 2 && perimeters[i].steamid != serverPlayer.userID)
                                                            //{
                                                            //    isValid = false;
                                                            //}
                                                            //if (isValid)
                                                            //{
                                                            if (!sendAnon || getAuthLevel(perimeters[i].steamid) == 2) {
                                                                SendReply(allBasePlayer[t], serverPlayerName + " " + serverPlayer.userID.ToString() + " has breached perimeter " + perimeters[i].playerPerimeters[p].name + ".");
                                                            }
                                                            else {
                                                                SendReply(allBasePlayer[t], "Perimeter " + perimeters[i].playerPerimeters[p].name + " has been breached.");
                                                            }
                                                            // }
                                                            break;
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        string cleanString(string msg) {
            string newMsg = "";
            for (int i = 0; i < msg.Length; i++) {
                if (msg.Substring(i, 1) != "|") {
                    if (msg.Substring(i, 1) != "{") {
                        if (msg.Substring(i, 1) != "}") {
                            if (msg.Substring(i, 1) != "+") {
                                if (msg.Substring(i, 1) != "*") {
                                    if (msg.Substring(i, 1) != "#") {
                                        newMsg += msg.Substring(i, 1);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return newMsg;
        }
        void clearIgnoreList(BasePlayer player) {
            int count = 0;
            int ignoreListIndex = getIgnoreListIndex(player.userID);
            if (ignoreListIndex != -1) {
                count = ignoreList[ignoreListIndex].ignores.Count;
                ignoreList[ignoreListIndex].ignores.Clear();
            }
            else {
                SendReply(player, "Your ignore list is already empty.");
            }
            if (count == 0) {
                SendReply(player, "Your ignore list is already empty.");
            }
            else {
                SendReply(player, "Removed " + count.ToString() + " players from your ignore list.");
            }
        }
        void clearPerimeters(BasePlayer player) {
            int perimeterIndex = getPerimeterIndex(player.userID);
            if (perimeterIndex == -1) {
                SendReply(player, "You have no perimeters to remove.Do /rs set <name> to create one.");
            }
            else {
                if (perimeters[perimeterIndex].playerPerimeters.Count == 0) {
                    SendReply(player, "You have no perimeters to remove.Do /rs set <name> to create one.");
                    return;
                }
                if (isInProgress(player.userID)) {
                    stopDrawing(player);
                }
                SendReply(player, "Removed " + perimeters[perimeterIndex].playerPerimeters.Count.ToString() + " perimeters on this server.");
                perimeters[perimeterIndex].playerPerimeters.Clear();
            }
        }
        void convertOldAlertsObj(OldAlertsObjectDict oldAlertsObj) {
            //Puts("Converting perimeters");
            //key is steamid to which perimeter belongs
            var keyArray = oldAlertsObj.alerts.Keys.ToArray();
            //for each steamid
            for (int i = 0; i < keyArray.Length; i++) {
                //Puts(keyArray[i]);
                int pIndex = getPerimeterIndex(Convert.ToUInt64(keyArray[i]));
                //key is alert name
                var pKeyArray = oldAlertsObj.alerts[keyArray[i]].Keys.ToArray();
                //for each alert name
                for (int p = 0; p < pKeyArray.Length; p++) {
                    //Puts(pKeyArray[p]);
                    int count = oldAlertsObj.alerts[keyArray[i]][pKeyArray[p]].count;
                    bool finished = oldAlertsObj.alerts[keyArray[i]][pKeyArray[p]].finished;
                    uint id = oldAlertsObj.alerts[keyArray[i]][pKeyArray[p]].id;
                    double maxx = oldAlertsObj.alerts[keyArray[i]][pKeyArray[p]].maxx;
                    double maxy = oldAlertsObj.alerts[keyArray[i]][pKeyArray[p]].maxy;
                    double minx = oldAlertsObj.alerts[keyArray[i]][pKeyArray[p]].minx;
                    double miny = oldAlertsObj.alerts[keyArray[i]][pKeyArray[p]].miny;
                    bool sleeperPresent = oldAlertsObj.alerts[keyArray[i]][pKeyArray[p]].SleeperPresent;
                    PlayerPerimeter pp = new PlayerPerimeter();
                    pp.name = pKeyArray[p];
                    pp.finished = finished;
                    pp.id = id;
                    pp.minX = minx;
                    pp.minY = miny;
                    pp.maxX = maxx;
                    pp.maxY = maxy;
                    pp.sleeperPresent = sleeperPresent;
                    Vector3 vec;
                    for (int c = 0; c < count; c++) {
                        vec = new Vector3();
                        vec.x = (float)oldAlertsObj.alerts[keyArray[i]][pKeyArray[p]].coords[c.ToString()]["0"];
                        vec.y = (float)oldAlertsObj.alerts[keyArray[i]][pKeyArray[p]].coords[c.ToString()]["2"];
                        vec.z = (float)oldAlertsObj.alerts[keyArray[i]][pKeyArray[p]].coords[c.ToString()]["1"];
                        pp.coords.Add(vec);
                    }
                    if (pIndex == -1) {
                        Perimeter per = new Perimeter();
                        per.steamid = Convert.ToUInt64(keyArray[i]);
                        per.playerPerimeters.Add(pp);
                        perimeters.Add(per);
                        pIndex = perimeters.Count - 1;
                        perimeterDict.Add(perimeters[pIndex].steamid, pIndex);
                    }
                    else {
                        perimeters[pIndex].playerPerimeters.Add(pp);
                    }
                }
            }
        }
        void convertOldAuthObjs(OldAuthObjectDict oldAuthObj) {
            //Puts("Converting auths");
            var steamIDs = oldAuthObj.authorised.Keys.ToArray();
            for (int i = 0; i < steamIDs.Length; i++) {
                //Puts(steamIDs[i]);
                Auth a = new Auth();
                a.steamid = Convert.ToUInt64(steamIDs[i]);
                a.name = oldAuthObj.authNames[steamIDs[i]];
                a.level = Convert.ToInt32(oldAuthObj.authorised[steamIDs[i]]);
                authList.Add(a);
                authDict.Add(a.steamid, authList.Count - 1);
            }
        }
        void convertOldIgnoresObjs(OldIgnoresObjectDict oldIgnoresObj) {
            //Puts("Converting ignores");
            var keyArray = oldIgnoresObj.ignores.Keys.ToArray();
            for (int i = 0; i < keyArray.Length; i++) {
                IgnoreListEntry ie = new IgnoreListEntry();
                ie.steamid = Convert.ToUInt64(keyArray[i]);
                var pKeyArray = oldIgnoresObj.ignores[keyArray[i]].Keys.ToArray();
                for (int p = 0; p < pKeyArray.Length; p++) {
                    IgnoredPlayer ip = new IgnoredPlayer();
                    ip.steamid = Convert.ToUInt64(pKeyArray[p]);
                    ip.name = oldIgnoresObj.ignores[keyArray[i]][pKeyArray[p]];
                    ie.ignores.Add(ip);
                }
                ignoreList.Add(ie);
                ignoreDict.Add(ie.steamid, ignoreList.Count - 1);
            }
        }
        void convertOldMuteList(OldMuteList oldMuteList) {
            var steamIDs = oldMuteList.muted.Keys.ToArray();
            //Puts("Converting mute list");
            for (int i = 0; i < oldMuteList.muted.Count; i++) {
                muteList.Add(Convert.ToUInt64(steamIDs[i]));
            }
        }
        void convertOldValObjs(OldValidatedObjectDict oldValObj) {
            //Puts("Converting validations");
            var steamIDs = oldValObj.validated.Keys.ToArray();
            for (int i = 0; i < steamIDs.Length; i++) {
                validated.Add(Convert.ToUInt64(steamIDs[i]));
            }
        }
        int countPerimeters(ulong steamid) {
            int cnt = 0;
            if (perimeterDict.ContainsKey(steamid)) {
                return perimeters[perimeterDict[steamid]].playerPerimeters.Count;
            }
            return cnt;
        }
        double currentTime() {
            return System.DateTime.UtcNow.Subtract(epoch).TotalSeconds;
        }
        void deletePerimeter(BasePlayer player, string[] args) {
            if (args.Length > 1) {
                int perimeterIndex = getPerimeterIndex(player.userID);
                if (perimeterIndex == -1) {
                    SendReply(player, "You have no perimeters to delete.Do /rs set <name> to create one.");
                }
                if (perimeters[perimeterIndex].playerPerimeters.Count == 0) {
                    SendReply(player, "You have no perimeters to delete.Do /rs set <name> to create one.");
                }
                else {
                    int index;
                    try {
                        index = Convert.ToInt32(args[1]);
                    }
                    catch (Exception e) {
                        SendReply(player, "Invalid index.Do /rs view to get a valid index.");
                        return;
                    }
                    bool inProgress = false;
                    if (isInProgress(player.userID)) {
                        inProgress = true;
                        for (int i = 0; i < drawList.Count; i++) {
                            if (drawList[i].basePlayer.userID == player.userID) {
                                if (drawList[i].playerPerimeterIndex != index - 1) {
                                    SendReply(player, "You have a perimeter in progress.Complete or cancel it first.");
                                    return;
                                }
                            }
                        }
                    }
                    if (index > perimeters[perimeterIndex].playerPerimeters.Count || index < 0) {
                        SendReply(player, "Invalid index.Do /rs view to get a valid index.");
                        return;
                    }
                    SendReply(player, "Removed " + perimeters[perimeterIndex].playerPerimeters[index - 1].name + " from your perimeter list.");
                    if (inProgress) {
                        stopDrawing(player);
                    }
                    perimeters[perimeterIndex].playerPerimeters.RemoveAt(index - 1);
                }
            }
            else {
                SendReply(player, "Enter a perimeter index to delete.");
            }
        }
        void delUser(BasePlayer player, string[] args) {
            int argIndexDelta = 0;
            if (player != null) {
                argIndexDelta = 1;
            }
            int index = -1;
            if (args.Length > argIndexDelta) {
                try {
                    index = Convert.ToInt32(args[argIndexDelta]);
                }
                catch (Exception e) {
                    if (player != null) {
                        SendReply(player, "Invalid index entered.Do /rs auths for a list of authorised users, and their indices.");
                    }
                    else {
                        Puts("Invalid index entered.Do rs.auths for a list of authorised users, and their indices.");
                    }
                    return;
                }
            }
            if (index < 1 || index > authList.Count) {
                if (player != null) {
                    SendReply(player, "Invalid index entered.Do /rs auths for a list of authorised users, and their indices.");
                }
                else {
                    Puts("Invalid index entered.Do rs.auths for a list of authorised users, and their indices.");
                }
                return;
            }
            string name = authList[index - 1].name;
            ulong steamid = authList[index - 1].steamid;
            int level = authList[index - 1].level;
            string levelText = "";
            if (level == 0) {
                levelText = "Basic User ";
            }
            if (level == 1) {
                levelText = "Privileged User ";
            }
            if (level == 2) {
                levelText = "Raid Alert Admin ";
            }
            if (player != null) {
                if (steamid == player.userID) {
                    SendReply(player, "You cannot remove yourself.");
                    return;
                }
            }
            authList.RemoveAt(index - 1);
            hashAuths();
            for (int i = 0; i < allBasePlayer.Count; i++) {
                if (allBasePlayer[i].userID == steamid) {
                    SendReply(allBasePlayer[i], "You have been removed from the authorised users list.");
                }
            }
            if (player != null) {
                SendReply(player, levelText + name + " " + steamid.ToString() + " has been removed from the authorised users list.");
            }
            else {
                Puts(levelText + name + " " + steamid.ToString() + " has been removed from the authorised users list.");
            }
        }
        Point doFacesJoinTogether(List<Point> perimeterPoints, int facesIndex2, List<Face> faces) {
            double delta = 0.5;
            Point nextPnt = new Point();
            int cnt = perimeterPoints.Count - 1;
            if (Math.Abs(perimeterPoints[cnt].x - faces[facesIndex2].sx) < delta) {
                if (Math.Abs(perimeterPoints[cnt].y - faces[facesIndex2].sy) < delta) {
                    nextPnt.x = faces[facesIndex2].ex;
                    nextPnt.y = faces[facesIndex2].ey;
                    return nextPnt;
                }
            }
            if (Math.Abs(perimeterPoints[cnt].x - faces[facesIndex2].ex) < delta) {
                if (Math.Abs(perimeterPoints[cnt].y - faces[facesIndex2].ey) < delta) {
                    nextPnt.x = faces[facesIndex2].sx;
                    nextPnt.y = faces[facesIndex2].sy;
                    return nextPnt;
                }
            }
            //if (Math.Abs(faces[facesIndex].ex - faces[facesIndex2].sx) < 0.1)
            //{
            //    if (Math.Abs(faces[facesIndex].ey - faces[facesIndex2].sy) < 0.1)
            //    {
            //        nextPnt.x = faces[facesIndex2].ex;
            //        nextPnt.y = faces[facesIndex2].ey;
            //        return nextPnt;
            //    }
            //}
            //if (Math.Abs(faces[facesIndex].ex - faces[facesIndex2].ex) < 0.1)
            //{
            //    if (Math.Abs(faces[facesIndex].ey - faces[facesIndex2].ey) < 0.1)
            //    {
            //        nextPnt.x = faces[facesIndex2].sx;
            //        nextPnt.y = faces[facesIndex2].sy;
            //        return nextPnt;
            //    }
            //}
            nextPnt.x = -65535;
            nextPnt.y = -65535;
            return nextPnt;
        }
        bool doFacesOverlap(int facesIndex, int facesIndex2, List<Face> faces) {
            double pntX, pntY, pntX2, pntY2;
            double pnt2X, pnt2Y, pnt2X2, pnt2Y2;
            pntX = faces[facesIndex].sx;
            pntY = faces[facesIndex].sy;
            pntX2 = faces[facesIndex].ex;
            pntY2 = faces[facesIndex].ey;
            pnt2X = faces[facesIndex2].sx;
            pnt2Y = faces[facesIndex2].sy;
            pnt2X2 = faces[facesIndex2].ex;
            pnt2Y2 = faces[facesIndex2].ey;
            //Puts(pntX.ToString() + "," + pntY.ToString()+ "," + pntX2.ToString() + "," + pntY2.ToString() + "," + pnt2X.ToString() + "," + pnt2Y.ToString() + "," + pnt2X2.ToString() + "," + pnt2Y2.ToString());
            if (Math.Abs(pntX - pnt2X) < 0.1) {
                if (Math.Abs(pntY - pnt2Y) < 0.1) {
                    if (Math.Abs(pntX2 - pnt2X2) < 0.1) {
                        if (Math.Abs(pntY2 - pnt2Y2) < 0.1) {
                            return true;
                        }
                    }
                }
            }
            if (Math.Abs(pntX - pnt2X2) < 0.1) {
                if (Math.Abs(pntY - pnt2Y2) < 0.1) {
                    if (Math.Abs(pntX2 - pnt2X) < 0.1) {
                        if (Math.Abs(pntY2 - pnt2Y) < 0.1) {
                            return true;
                        }
                    }
                }
            }
            return false;
        }
        void drawFaces(BasePlayer player, List<Face> faces, double height) {
            //Puts("Drawing " + faces.Count.ToString() + " faces!");
            int persistSeconds = 10;
            Vector3 lastPos;
            Vector3 thisPos;
            height += 1;
            int triCount = 1;
            float delta = 0;
            for (int f = 0; f < faces.Count; f++) {
                delta +=.025f;
                lastPos = new Vector3();
                thisPos = new Vector3();
                lastPos.x = (float)faces[f].sx;
                lastPos.z = (float)faces[f].sy;
                thisPos.x = (float)faces[f].ex;
                thisPos.z = (float)faces[f].ey;
                UnityEngine.Color col;
                lastPos.y = (float)height + delta;
                thisPos.y = (float)height + delta;
                col = UnityEngine.Color.red;
                player.SendConsoleCommand("ddraw.arrow", persistSeconds, col, lastPos, thisPos, 0.25);
            }
        }
        void drawPerimeterPoints(BasePlayer player, List<Point> perimeterPoints, double height) {
            //Puts("Drawing perimeter points!");
            int persistSeconds = 10;
            Vector3 lastPos;
            Vector3 thisPos;
            height += perimeterHeightDelta;
            for (int p = 0; p < perimeterPoints.Count - 1; p++) {
                lastPos = new Vector3();
                thisPos = new Vector3();
        
// ... [Code preview truncated due to length. Full source in attached file] ...

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