示例#1
0
 public static void Start()
 {
     if (File.Exists(Vars.whiteListFile))
     {
         Vars.startTimer();
         readWhitelist();
         TimerPlus t = new TimerPlus();
         t.AutoReset = true;
         t.Interval  = Vars.refreshInterval;
         t.Elapsed  += readWhitelistElapsed;
         t.Start();
     }
     else
     {
         Vars.conLog.Error("Whitelist file was not found!");
     }
 }
示例#2
0
 public static void loopRequestSaving()
 {
     TimerPlus t = new TimerPlus();
     t.AutoReset = true;
     t.Interval = 5000;
     t.Elapsed += ((sender, e) => saveRequestsPer());
     t.Start();
     TimerPlus t1 = new TimerPlus();
     t1.AutoReset = true;
     t1.Interval = 5000;
     t1.Elapsed += ((sender, e) => saveRequestsAll());
     t1.Start();
 }
示例#3
0
 public static void loopNudity()
 {
     TimerPlus t = new TimerPlus();
     t.AutoReset = true;
     t.Interval = 1000;
     t.Elapsed += ((sender, e) => sendNudity());
     t.Start();
 }
示例#4
0
 public static void loopKitSaving()
 {
     TimerPlus t = new TimerPlus();
     t.AutoReset = true;
     t.Interval = 5000;
     t.Elapsed += ((sender, e) => saveCooldowns());
     t.Start();
 }
示例#5
0
        public static void teleportRequest(PlayerClient senderClient, string[] args)
        {
            if (teleportRequestOn)
            {
                if (args.Count() > 1)
                {
                    List<string> playerNameList = new List<string>();
                    int curIndex = 0;
                    foreach (string s in args)
                    {
                        if (curIndex > 0)
                        {
                            playerNameList.Add(s);
                        }
                        curIndex++;
                    }

                    string playerName = string.Join(" ", playerNameList.ToArray());

                    PlayerClient[] possibleTargets = Array.FindAll(PlayerClient.All.ToArray(), (PlayerClient pc) => pc.userName.Contains(playerName));
                    if (possibleTargets.Count() == 0)
                        Broadcast.broadcastTo(senderClient.netPlayer, "No player names equal or contain \"" + playerName + "\".");
                    else if (possibleTargets.Count() > 1)
                        Broadcast.broadcastTo(senderClient.netPlayer, "Too many player names contain \"" + playerName + "\".");
                    else
                    {
                        PlayerClient targetClient = possibleTargets[0];
                        if (!teleportRequests[targetClient].ContainsKey(senderClient))
                        {
                            TimerPlus t = new TimerPlus();
                            t.AutoReset = false;
                            t.Interval = 30000;
                            t.Elapsed += (sender, e) => requestTimeout(targetClient, senderClient);
                            t.Start();
                            teleportRequests[targetClient].Add(senderClient, t);
                            latestRequests[targetClient] = senderClient;
                            Broadcast.broadcastTo(senderClient.netPlayer, "Teleport request sent to " + targetClient.userName + ".");
                            Broadcast.broadcastTo(targetClient.netPlayer, senderClient.userName + " requested to teleport to you. Type /tpaccept <name> or /tpdeny <name>.");
                        }
                        else
                        {
                            Broadcast.broadcastTo(senderClient.netPlayer, "You already sent a teleport request to " + targetClient.userName + ".");
                        }
                    }
                }
            }
            else
            {
                Broadcast.broadcastTo(senderClient.netPlayer, "Teleport requesting is disabled.");
            }
        }
示例#6
0
        public static void teleport(PlayerClient senderClient, string[] args)
        {
            if (args.Count() > 1)
            {
                RustServerManagement serverManagement = RustServerManagement.Get();
                List<string> playerNameList = new List<string>();
                int quotedNames = 0;
                bool searchingQuotes = false;
                int curIndex = 0;
                foreach (string s in args)
                {
                    if (curIndex > 0)
                    {
                        playerNameList.Add(s);

                        if (s.StartsWith("\"") && !searchingQuotes)
                            searchingQuotes = true;

                        if (playerNameList.Count > 1 && searchingQuotes && s.EndsWith("\""))
                        {
                            quotedNames++;
                        }
                    }

                    curIndex++;
                }
                string playerName = string.Join(" ", playerNameList.ToArray());

                if (args.Count() == 2 || quotedNames == 1)
                {
                    if (playerName.StartsWith("\"") && playerName.EndsWith("\""))
                    {
                        playerName = playerName.Substring(1, playerName.Length - 2);

                        PlayerClient[] possibleTargets = Array.FindAll(AllPlayerClients.ToArray(), (PlayerClient pc) => pc.userName.Equals(playerName));
                        if (possibleTargets.Count() == 0)
                            Broadcast.broadcastTo(senderClient.netPlayer, "No player names equal \"" + playerName + "\".");
                        else if (possibleTargets.Count() > 1)
                            Broadcast.broadcastTo(senderClient.netPlayer, "Too many player names equal \"" + playerName + "\".");
                        else
                        {
                            PlayerClient targetClient = possibleTargets[0];
                            Character senderChar;
                            Character.FindByUser(senderClient.userID, out senderChar);
                            Character targetChar;
                            Character.FindByUser(targetClient.userID, out targetChar);
                            Vector3 destination = targetChar.transform.position;

                            Vector3 oldDest = destination;
                            oldDest.y += 1;
                            if (Vector3.Distance(destination, senderChar.transform.position) > 375)
                                destination.y += 8;

                            serverManagement.TeleportPlayerToWorld(senderClient.netPlayer, destination);
                            TimerPlus tp = new TimerPlus();
                            tp.AutoReset = false;
                            tp.Interval = 500;
                            tp.Elapsed += ((sender, e) => teleportToWorldElapsed(senderClient.netPlayer, oldDest));
                            tp.Start();
                            Broadcast.broadcastTo(senderClient.netPlayer, "Teleporting to " + targetClient.userName + "...");
                        }
                    }
                    else
                    {
                        PlayerClient[] possibleTargets = Array.FindAll(AllPlayerClients.ToArray(), (PlayerClient pc) => pc.userName.Contains(playerName));
                        if (possibleTargets.Count() == 0)
                            Broadcast.broadcastTo(senderClient.netPlayer, "No player names equal or contain \"" + playerName + "\".");
                        else if (possibleTargets.Count() > 1)
                            Broadcast.broadcastTo(senderClient.netPlayer, "Too many player names contain \"" + playerName + "\".");
                        else
                        {
                            PlayerClient targetClient = possibleTargets[0];
                            Character senderChar;
                            Character.FindByUser(senderClient.userID, out senderChar);
                            Character targetChar;
                            Character.FindByUser(targetClient.userID, out targetChar);
                            Vector3 destination = targetChar.transform.position;

                            Vector3 oldDest = destination;
                            oldDest.y += 1;
                            if (Vector3.Distance(destination, senderChar.transform.position) > 375)
                                destination.y += 8;

                            serverManagement.TeleportPlayerToWorld(senderClient.netPlayer, destination);
                            TimerPlus tp = new TimerPlus();
                            tp.AutoReset = false;
                            tp.Interval = 500;
                            tp.Elapsed += ((sender, e) => teleportToWorldElapsed(senderClient.netPlayer, oldDest));
                            tp.Start();
                            Broadcast.broadcastTo(senderClient.netPlayer, "Teleporting to " + targetClient.userName + "...");
                        }
                    }
                }
                else
                {
                    playerNameList.Clear();
                    curIndex = 0;

                    int lastIndex = -1;
                    if (args[1].Contains("\""))
                    {
                        bool hadQuote = false;
                        foreach (string s in args)
                        {
                            lastIndex++;
                            if (s.StartsWith("\"")) hadQuote = true;
                            if (hadQuote)
                            {
                                playerNameList.Add(s.Replace("\"", ""));
                            }
                            if (s.EndsWith("\""))
                            {
                                hadQuote = false;
                                break;
                            }
                        }
                    }
                    else
                    {
                        playerNameList.Add(args[1]);
                        lastIndex = 1;
                    }
                    playerName = string.Join(" ", playerNameList.ToArray());
                    PlayerClient[] possibleTargets = Array.FindAll(AllPlayerClients.ToArray(), (PlayerClient pc) => pc.userName.Contains(playerName));
                    if (possibleTargets.Count() == 0)
                        Broadcast.broadcastTo(senderClient.netPlayer, "No player names equal or contain \"" + playerName + "\".");
                    else if (possibleTargets.Count() > 1)
                        Broadcast.broadcastTo(senderClient.netPlayer, "Too many player names contain \"" + playerName + "\".");
                    else
                    {
                        PlayerClient targetClient = possibleTargets[0];
                        playerNameList.Clear();
                        if (args[lastIndex + 1].Contains("\""))
                        {
                            bool hadQuote = false;
                            curIndex = 0;
                            foreach (string s in args)
                            {
                                if (curIndex > lastIndex)
                                {
                                    if (s.StartsWith("\"")) hadQuote = true;
                                    if (hadQuote)
                                    {
                                        playerNameList.Add(s.Replace("\"", ""));
                                    }
                                    if (s.EndsWith("\""))
                                    {
                                        hadQuote = false;
                                        break;
                                    }
                                }
                                curIndex++;
                            }
                        }
                        else
                        {
                            playerNameList.Add(args[lastIndex + 1]);
                        }
                        playerName = string.Join(" ", playerNameList.ToArray());
                        PlayerClient[] otherTargets = Array.FindAll(AllPlayerClients.ToArray(), (PlayerClient pc) => pc.userName.Contains(playerName));
                        if (otherTargets.Count() == 0)
                            Broadcast.broadcastTo(senderClient.netPlayer, "No player names equal or contain \"" + playerName + "\".");
                        else if (otherTargets.Count() > 1)
                            Broadcast.broadcastTo(senderClient.netPlayer, "Too many player names contain \"" + playerName + "\".");
                        else
                        {
                            PlayerClient targetClient2 = otherTargets[0];
                            Character targetChar;
                            Character.FindByUser(targetClient.userID, out targetChar);
                            Character targetChar2;
                            Character.FindByUser(targetClient2.userID, out targetChar2);
                            Vector3 destination = targetChar2.transform.position;

                            Vector3 oldDest = destination;
                            oldDest.y += 1;
                            if (Vector3.Distance(destination, targetChar.transform.position) > 375)
                                destination.y += 8;

                            serverManagement.TeleportPlayerToWorld(targetClient.netPlayer, destination);
                            TimerPlus tp = new TimerPlus();
                            tp.AutoReset = false;
                            tp.Interval = 500;
                            tp.Elapsed += ((sender, e) => teleportToWorldElapsed(targetClient.netPlayer, oldDest));
                            tp.Start();
                            Broadcast.broadcastTo(senderClient.netPlayer, "Teleporting \"" + targetClient.userName + "\" to \"" + targetClient2.userName + "\"...");
                        }
                    }
                }
            }
        }
示例#7
0
        public static void readRequestData()
        {
            List<string> cooldownFileData = File.ReadAllLines(requestCooldownsFile).ToList();
            foreach (string s in cooldownFileData)
            {
                string UID = s.Split('=')[0];
                string requestsString = s.Split('=')[1];

                foreach (string s2 in requestsString.Split(';'))
                {
                    string otherUID = s2.Split(':')[0];
                    string cooldown = s2.Split(':')[1];

                    TimerPlus t = new TimerPlus();
                    t.AutoReset = false;
                    t.Interval = Convert.ToInt32(cooldown);
                    t.Elapsed += (sender, e) => unblockRequests(otherUID, UID);
                    t.Start();
                    if (!blockedRequestsPer.ContainsKey(UID))
                        blockedRequestsPer.Add(UID, new Dictionary<string, TimerPlus>());

                    blockedRequestsPer[UID].Add(otherUID, t);
                }
            }
        }
示例#8
0
        public static void readCooldownData()
        {
            try
            {
                List<string> cooldownFileData = File.ReadAllLines(cooldownsFile).ToList();
                foreach (string s in cooldownFileData)
                {
                    string UID = s.Split('=')[0];
                    string kitsString = s.Split('=')[1];

                    foreach (string s2 in kitsString.Split(';'))
                    {
                        string kitName = s2.Split(':')[0].ToLower();
                        string cooldown = s2.Split(':')[1];
                        if (!cooldown.Contains("-"))
                        {
                            TimerPlus t = new TimerPlus();
                            t.AutoReset = false;
                            t.Interval = Convert.ToInt32(cooldown);
                            t.Elapsed += (sender, e) => restoreKit(sender, e, kitName, UID);
                            t.Start();

                            if (!playerCooldowns.ContainsKey(UID))
                            {
                                playerCooldowns.Add(UID, new Dictionary<TimerPlus, string>() { { t, kitName } });
                            }
                            else
                            {
                                if (!playerCooldowns[UID].ContainsValue(kitName))
                                    playerCooldowns[UID].Add(t, kitName);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                conLog.Error("RCDD: " + ex.ToString());
            }
        }
示例#9
0
 public static void updateRequestAllData(string UID, int cooldown, TimerPlus t)
 {
     List<string> cooldownFileData = File.ReadAllLines(requestCooldownsAllFile).ToList();
     List<string> UIDs = new List<string>();
     foreach (string str in cooldownFileData)
     {
         UIDs.Add(str.Split('=')[0]);
     }
     if (UIDs.Contains(UID))
     {
         int indexOfUID = Array.FindIndex(cooldownFileData.ToArray(), (string s) => s.StartsWith(UID));
         cooldownFileData[indexOfUID] = UID + "=" + cooldown;
     }
     else
     {
         cooldownFileData.Add(UID + "=" + cooldown);
     }
     using (StreamWriter sw = new StreamWriter(requestCooldownsAllFile, false))
     {
         foreach (string s in cooldownFileData)
         {
             sw.WriteLine(s);
         }
     }
 }
示例#10
0
        public static void updateCooldownData(string UID, string kitName, string cooldown, TimerPlus t)
        {
            try
            {
                List<string> cooldownFileData = File.ReadAllLines(cooldownsFile).ToList();
                List<string> UIDs = new List<string>();
                foreach (string str in cooldownFileData)
                {
                    UIDs.Add(str.Split('=')[0]);
                }
                if (UIDs.Contains(UID)) // If I have any kits currenty cooling down
                {
                    string fullString = "";
                    string currentKits = Array.Find(cooldownFileData.ToArray(), (string s) => s.StartsWith(UID)).Split('=')[1];
                    if (currentKits.Contains(kitName)) // If the kit I am updating is currently cooling down, update the cooldown
                    {
                        List<string> allKits = currentKits.Split(';').ToList();
                        int index = Array.FindIndex(allKits.ToArray(), (string s) => s.StartsWith(kitName));

                        if (t.TimeLeft > 0)
                            allKits[index] = kitName + ":" + t.TimeLeft;
                        else
                            allKits.RemoveAt(index);

                        if (allKits.Count > 0)
                            fullString = UID + "=" + string.Join(";", allKits.ToArray());
                    }
                    else
                    {
                        fullString = UID + "=" + currentKits;

                        fullString += ";" + kitName + ":" + cooldown;
                    }

                    int indexOfUID = Array.FindIndex(cooldownFileData.ToArray(), (string s) => s.StartsWith(UID));
                    if (fullString.Length > 0)
                        cooldownFileData[indexOfUID] = fullString;
                    else
                        cooldownFileData.RemoveAt(indexOfUID);
                }
                else
                {
                    cooldownFileData.Add(UID + "=" + kitName + ":" + cooldown);
                }
                using (StreamWriter sw = new StreamWriter(cooldownsFile, false))
                {
                    foreach (string s in cooldownFileData)
                    {
                        sw.WriteLine(s);
                    }
                }
            }
            catch (Exception ex)
            {
                conLog.Error("UCDD: " + ex.ToString());
            }
        }
示例#11
0
        public static void teleportRequest(PlayerClient senderClient, string[] args)
        {
            if (teleportRequestOn)
            {
                bool b = true;
                if (denyRequestWarzone && inWarZone.ContainsKey(senderClient))
                    b = false;

                if (b)
                {
                    if (args.Count() > 1)
                    {
                        List<string> playerNameList = new List<string>();
                        int curIndex = 0;
                        foreach (string s in args)
                        {
                            if (curIndex > 0)
                            {
                                playerNameList.Add(s);
                            }
                            curIndex++;
                        }

                        string playerName = string.Join(" ", playerNameList.ToArray());

                        if (playerName.StartsWith("\"") && playerName.EndsWith("\""))
                        {
                            playerName = playerName.Substring(1, playerName.Length - 2);

                            PlayerClient[] possibleTargets = Array.FindAll(AllPlayerClients.ToArray(), (PlayerClient pc) => pc.userName.Equals(playerName));
                            if (possibleTargets.Count() == 0)
                                Broadcast.broadcastTo(senderClient.netPlayer, "No player names equal \"" + playerName + "\".");
                            else if (possibleTargets.Count() > 1)
                                Broadcast.broadcastTo(senderClient.netPlayer, "Too many player names equal \"" + playerName + "\".");
                            else
                            {
                                PlayerClient targetClient = possibleTargets[0];
                                if (requestCooldownType == 1 && blockedRequestsPer[senderClient.userID.ToString()].ContainsKey(targetClient.userID.ToString()))
                                {
                                    double timeLeft = Math.Round((blockedRequestsPer[senderClient.userID.ToString()][targetClient.userID.ToString()].TimeLeft / 1000));
                                    if (timeLeft > 0)
                                    {
                                        Broadcast.broadcastTo(senderClient.netPlayer, "You cannot teleport to that player for " + timeLeft + " second(s).");
                                        return;
                                    }
                                }
                                if (requestCooldownType == 2 && blockedRequestsAll.ContainsKey(senderClient.userID.ToString()))
                                {
                                    double timeLeft = Math.Round((blockedRequestsAll[senderClient.userID.ToString()].TimeLeft / 1000));
                                    if (timeLeft > 0)
                                    {
                                        Broadcast.broadcastTo(senderClient.netPlayer, "You cannot teleport to anyone for " + timeLeft + " second(s).");
                                        return;
                                    }
                                }
                                if (!teleportRequests[targetClient].ContainsKey(senderClient))
                                {
                                    TimerPlus t = new TimerPlus();
                                    t.AutoReset = false;
                                    t.Interval = 30000;
                                    t.Elapsed += (sender, e) => requestTimeout(targetClient, senderClient);
                                    t.Start();
                                    teleportRequests[targetClient].Add(senderClient, t);
                                    latestRequests[targetClient] = senderClient;

                                    Broadcast.broadcastTo(senderClient.netPlayer, "Teleport request sent to " + targetClient.userName + ".");
                                    Broadcast.broadcastTo(targetClient.netPlayer, senderClient.userName + " requested to teleport to you. Type /tpaccept <name> or /tpdeny <name>.");
                                }
                                else
                                {
                                    Broadcast.broadcastTo(senderClient.netPlayer, "You already sent a teleport request to " + targetClient.userName + ".");
                                }
                            }
                        }
                        else
                        {
                            PlayerClient[] possibleTargets = Array.FindAll(AllPlayerClients.ToArray(), (PlayerClient pc) => pc.userName.Contains(playerName));
                            if (possibleTargets.Count() == 0)
                                Broadcast.broadcastTo(senderClient.netPlayer, "No player names equal or contain \"" + playerName + "\".");
                            else if (possibleTargets.Count() > 1)
                                Broadcast.broadcastTo(senderClient.netPlayer, "Too many player names contain \"" + playerName + "\".");
                            else
                            {
                                PlayerClient targetClient = possibleTargets[0];
                                if (requestCooldownType == 1 && blockedRequestsPer[senderClient.userID.ToString()].ContainsKey(targetClient.userID.ToString()))
                                {
                                    double timeLeft = Math.Round((blockedRequestsPer[senderClient.userID.ToString()][targetClient.userID.ToString()].TimeLeft / 1000));
                                    if (timeLeft > 0)
                                    {
                                        Broadcast.broadcastTo(senderClient.netPlayer, "You cannot teleport to that player for " + timeLeft + " second(s).");
                                        return;
                                    }
                                }
                                if (requestCooldownType == 2 && blockedRequestsAll.ContainsKey(senderClient.userID.ToString()))
                                {
                                    double timeLeft = Math.Round((blockedRequestsAll[senderClient.userID.ToString()].TimeLeft / 1000));
                                    if (timeLeft > 0)
                                    {
                                        Broadcast.broadcastTo(senderClient.netPlayer, "You cannot teleport to anyone for " + timeLeft + " second(s).");
                                        return;
                                    }
                                }
                                if (!teleportRequests[targetClient].ContainsKey(senderClient))
                                {
                                    TimerPlus t = new TimerPlus();
                                    t.AutoReset = false;
                                    t.Interval = 30000;
                                    t.Elapsed += (sender, e) => requestTimeout(targetClient, senderClient);
                                    t.Start();
                                    teleportRequests[targetClient].Add(senderClient, t);
                                    latestRequests[targetClient] = senderClient;

                                    Broadcast.broadcastTo(senderClient.netPlayer, "Teleport request sent to " + targetClient.userName + ".");
                                    Broadcast.broadcastTo(targetClient.netPlayer, senderClient.userName + " requested to teleport to you. Type /tpaccept <name> or /tpdeny <name>.");
                                }
                                else
                                {
                                    Broadcast.broadcastTo(senderClient.netPlayer, "You already sent a teleport request to " + targetClient.userName + ".");
                                }
                            }
                        }
                    }
                }
                else
                {
                    Broadcast.broadcastTo(senderClient.netPlayer, "You cannot teleport while in a war zone!");
                }
            }
            else
            {
                Broadcast.broadcastTo(senderClient.netPlayer, "Teleport requesting is disabled on this server.");
            }
        }
示例#12
0
        public static void teleporting(PlayerClient targetClient, PlayerClient senderClient)
        {
            Character targetChar;
            Character.FindByUser(targetClient.userID, out targetChar);
            Vector3 oldPos = targetChar.transform.position;
            bool b = true;
            int timeElapsed = 0;
            RustServerManagement serverManagement = RustServerManagement.Get();
            while (b)
            {
                if (wasHit.Contains(targetClient))
                {
                    teleportRequests[senderClient][targetClient].Close();
                    teleportRequests[senderClient].Remove(targetClient);
                    latestRequests[senderClient] = null;
                    isTeleporting.Remove(targetClient);
                    isAccepting.Remove(senderClient);
                    wasHit.Remove(targetClient);
                    Broadcast.broadcastTo(senderClient.netPlayer, "Teleport request from " + targetClient.userName + " was interrupted due to damage.");
                    Broadcast.broadcastTo(targetClient.netPlayer, "Teleport request to " + senderClient.userName + " was interrupted due to damage.");
                    b = false;
                    break;
                }
                if (wasHit.Contains(senderClient))
                {
                    teleportRequests[senderClient][targetClient].Close();
                    teleportRequests[senderClient].Remove(targetClient);
                    latestRequests[senderClient] = null;
                    isTeleporting.Remove(targetClient);
                    isAccepting.Remove(senderClient);
                    wasHit.Remove(senderClient);
                    Broadcast.broadcastTo(senderClient.netPlayer, "Teleport request from " + targetClient.userName + " was interrupted due to damage.");
                    Broadcast.broadcastTo(targetClient.netPlayer, "Teleport request to " + senderClient.userName + " was interrupted due to damage.");
                    b = false;
                    break;
                }
                if (timeElapsed >= requestDelay)
                {
                    Character senderChar;
                    Character.FindByUser(senderClient.userID, out senderChar);

                    Vector3 destinationPos = senderChar.transform.position;

                    Vector3 oldDest = destinationPos;
                    oldDest.y += 1;
                    if (Vector3.Distance(destinationPos, oldPos) > 375)
                        destinationPos.y += 8;

                    serverManagement.TeleportPlayerToWorld(targetClient.netPlayer, destinationPos);
                    TimerPlus tp = new TimerPlus();
                    tp.AutoReset = false;
                    tp.Interval = 500;
                    tp.Elapsed += ((sender, e) => teleportToWorldElapsed(targetClient.netPlayer, oldDest));
                    tp.Start();
                    teleportRequests[senderClient][targetClient].Close();
                    teleportRequests[senderClient].Remove(targetClient);
                    latestRequests[senderClient] = null;
                    isTeleporting.Remove(targetClient);
                    isAccepting.Remove(senderClient);
                    b = false;
                    break;
                }
                Vector3 newPos = targetChar.transform.position;
                if (Vector3.Distance(oldPos, newPos) > 3)
                {
                    Broadcast.broadcastTo(senderClient.netPlayer, targetClient.userName + " moved. Teleportation cancelled.");
                    Broadcast.broadcastTo(targetClient.netPlayer, "Teleportation cancelled.");
                    teleportRequests[senderClient][targetClient].Close();
                    teleportRequests[senderClient].Remove(targetClient);
                    latestRequests[senderClient] = null;
                    isTeleporting.Remove(targetClient);
                    isAccepting.Remove(senderClient);
                    b = false;
                    break;
                }
                Thread.Sleep(1000);
                timeElapsed++;
            }
        }
示例#13
0
        public static void teleportHere(PlayerClient senderClient, string[] args)
        {
            if (args.Count() > 1)
            {
                RustServerManagement serverManagement = RustServerManagement.Get();
                if (args.Count() == 2)
                {
                    List<string> playerNameList = new List<string>();
                    int curIndex = 0;
                    foreach (string s in args)
                    {
                        if (curIndex > 0)
                            playerNameList.Add(s);
                        curIndex++;
                    }
                    string playerName = string.Join(" ", playerNameList.ToArray());
                    if (playerName.StartsWith("\"") && playerName.EndsWith("\""))
                    {
                        playerName = playerName.Substring(1, playerName.Length - 2);

                        PlayerClient[] possibleTargets = Array.FindAll(AllPlayerClients.ToArray(), (PlayerClient pc) => pc.userName.Equals(playerName));
                        if (possibleTargets.Count() == 0)
                            Broadcast.broadcastTo(senderClient.netPlayer, "No player names equal \"" + playerName + "\".");
                        else if (possibleTargets.Count() > 1)
                            Broadcast.broadcastTo(senderClient.netPlayer, "Too many player names equal \"" + playerName + "\".");
                        else
                        {
                            PlayerClient targetClient = possibleTargets[0];
                            Character senderChar;
                            Character.FindByUser(senderClient.userID, out senderChar);
                            Character targetChar;
                            Character.FindByUser(targetClient.userID, out targetChar);
                            Vector3 destination = senderChar.transform.position;

                            Vector3 oldDest = destination;
                            oldDest.y += 1;
                            if (Vector3.Distance(destination, targetChar.transform.position) > 375)
                                destination.y += 8;
                            serverManagement.TeleportPlayerToWorld(targetClient.netPlayer, destination);
                            TimerPlus tp = new TimerPlus();
                            tp.AutoReset = false;
                            tp.Interval = 500;
                            tp.Elapsed += ((sender, e) => teleportToWorldElapsed(targetClient.netPlayer, oldDest));
                            tp.Start();
                            Broadcast.broadcastTo(senderClient.netPlayer, "Teleporting " + targetClient.userName + " here...");
                        }
                    }
                    else
                    {
                        PlayerClient[] possibleTargets = Array.FindAll(AllPlayerClients.ToArray(), (PlayerClient pc) => pc.userName.Contains(playerName));
                        if (possibleTargets.Count() == 0)
                            Broadcast.broadcastTo(senderClient.netPlayer, "No player names equal or contain \"" + playerName + "\".");
                        else if (possibleTargets.Count() > 1)
                            Broadcast.broadcastTo(senderClient.netPlayer, "Too many player names contain \"" + playerName + "\".");
                        else
                        {
                            PlayerClient targetClient = possibleTargets[0];
                            Character senderChar;
                            Character.FindByUser(senderClient.userID, out senderChar);
                            Character targetChar;
                            Character.FindByUser(targetClient.userID, out targetChar);
                            Vector3 destination = senderChar.transform.position;

                            Vector3 oldDest = destination;
                            oldDest.y += 1;
                            if (Vector3.Distance(destination, targetChar.transform.position) > 375)
                                destination.y += 8;
                            serverManagement.TeleportPlayerToWorld(targetClient.netPlayer, destination);
                            TimerPlus tp = new TimerPlus();
                            tp.AutoReset = false;
                            tp.Interval = 500;
                            tp.Elapsed += ((sender, e) => teleportToWorldElapsed(targetClient.netPlayer, oldDest));
                            tp.Start();
                            Broadcast.broadcastTo(senderClient.netPlayer, "Teleporting " + targetClient.userName + " here...");
                        }
                    }
                }
            }
        }
示例#14
0
        public static void teleportAccept(PlayerClient senderClient, string[] args)
        {
            if (args.Count() > 1)
            {
                List<string> playerNameList = new List<string>();
                int curIndex = 0;
                foreach (string s in args)
                {
                    if (curIndex > 0)
                    {
                        playerNameList.Add(s);
                    }
                    curIndex++;
                }

                string playerName = string.Join(" ", playerNameList.ToArray());

                if (playerName.StartsWith("\"") && playerName.EndsWith("\""))
                {
                    playerName = playerName.Substring(1, playerName.Length - 2);

                    PlayerClient[] possibleTargets = Array.FindAll(AllPlayerClients.ToArray(), (PlayerClient pc) => pc.userName.Equals(playerName));
                    if (possibleTargets.Count() == 0)
                        Broadcast.broadcastTo(senderClient.netPlayer, "No player names equal \"" + playerName + "\".");
                    else if (possibleTargets.Count() > 1)
                        Broadcast.broadcastTo(senderClient.netPlayer, "Too many player names equal \"" + playerName + "\".");
                    else
                    {
                        PlayerClient targetClient = possibleTargets[0];

                        if (teleportRequests[senderClient].ContainsKey(targetClient))
                        {
                            Broadcast.broadcastTo(senderClient.netPlayer, "Teleporting " + targetClient.userName + " in " + requestDelay + " seconds...");
                            Broadcast.broadcastTo(targetClient.netPlayer, "Teleporting to " + senderClient.userName + " in " + requestDelay + " seconds. Do not move...");
                            Thread t = new Thread(() => teleporting(targetClient, senderClient));
                            t.Start();
                            isTeleporting.Add(targetClient);
                            isAccepting.Add(senderClient);
                            if (requestCooldownType == 1 && !blockedRequestsPer[targetClient.userID.ToString()].ContainsKey(senderClient.userID.ToString()))
                            {
                                TimerPlus t1 = new TimerPlus();
                                t1.AutoReset = false;
                                t1.Interval = requestCooldown;
                                t1.Elapsed += (sender, e) => unblockRequests(senderClient.userID.ToString(), targetClient.userID.ToString());
                                t1.Start();
                                blockedRequestsPer[targetClient.userID.ToString()].Add(senderClient.userID.ToString(), t1);
                            }
                            if (requestCooldownType == 2 && !blockedRequestsAll.ContainsKey(targetClient.userID.ToString()))
                            {
                                TimerPlus t1 = new TimerPlus();
                                t1.AutoReset = false;
                                t1.Interval = requestCooldown;
                                t1.Elapsed += (sender, e) => unblockRequests(senderClient.userID.ToString(), targetClient.userID.ToString());
                                t1.Start();
                                blockedRequestsAll.Add(targetClient.userID.ToString(), t1);
                            }
                        }
                        else
                        {
                            Broadcast.broadcastTo(senderClient.netPlayer, "You do not have a teleport request from " + targetClient.userName + ".");
                        }
                    }
                }
                else
                {
                    PlayerClient[] possibleTargets = Array.FindAll(AllPlayerClients.ToArray(), (PlayerClient pc) => pc.userName.Contains(playerName));
                    if (possibleTargets.Count() == 0)
                        Broadcast.broadcastTo(senderClient.netPlayer, "No player names equal or contain \"" + playerName + "\".");
                    else if (possibleTargets.Count() > 1)
                        Broadcast.broadcastTo(senderClient.netPlayer, "Too many player names contain \"" + playerName + "\".");
                    else
                    {
                        PlayerClient targetClient = possibleTargets[0];

                        if (teleportRequests[senderClient].ContainsKey(targetClient))
                        {
                            Broadcast.broadcastTo(senderClient.netPlayer, "Teleporting " + targetClient.userName + " in " + requestDelay + " seconds...");
                            Broadcast.broadcastTo(targetClient.netPlayer, "Teleporting to " + senderClient.userName + " in " + requestDelay + " seconds. Do not move...");
                            Thread t = new Thread(() => teleporting(targetClient, senderClient));
                            t.Start();
                            isTeleporting.Add(targetClient);
                            isAccepting.Add(senderClient);

                            if (requestCooldownType == 1 && !blockedRequestsPer[targetClient.userID.ToString()].ContainsKey(senderClient.userID.ToString()))
                            {
                                TimerPlus t1 = new TimerPlus();
                                t1.AutoReset = false;
                                t1.Interval = requestCooldown;
                                t1.Elapsed += (sender, e) => unblockRequests(senderClient.userID.ToString(), targetClient.userID.ToString());
                                t1.Start();
                                blockedRequestsPer[targetClient.userID.ToString()].Add(senderClient.userID.ToString(), t1);
                            }
                            if (requestCooldownType == 2 && !blockedRequestsAll.ContainsKey(targetClient.userID.ToString()))
                            {
                                TimerPlus t1 = new TimerPlus();
                                t1.AutoReset = false;
                                t1.Interval = requestCooldown;
                                t1.Elapsed += (sender, e) => unblockRequests(senderClient.userID.ToString(), targetClient.userID.ToString());
                                t1.Start();
                                blockedRequestsAll.Add(targetClient.userID.ToString(), t1);
                            }
                        }
                        else
                        {
                            Broadcast.broadcastTo(senderClient.netPlayer, "You do not have a teleport request from " + targetClient.userName + ".");
                        }
                    }
                }
            }
            else
            {
                if (latestRequests[senderClient] != null)
                {
                    PlayerClient targetClient = latestRequests[senderClient];
                    Broadcast.broadcastTo(senderClient.netPlayer, "Teleporting " + targetClient.userName + " in " + requestDelay + " seconds...");
                    Broadcast.broadcastTo(targetClient.netPlayer, "Teleporting to " + senderClient.userName + " in " + requestDelay + " seconds. Do not move...");
                    Thread t = new Thread(() => teleporting(targetClient, senderClient));
                    t.Start();
                    isTeleporting.Add(targetClient);
                    if (requestCooldownType == 1 && !blockedRequestsPer[targetClient.userID.ToString()].ContainsKey(senderClient.userID.ToString()))
                    {
                        TimerPlus t1 = new TimerPlus();
                        t1.AutoReset = false;
                        t1.Interval = requestCooldown;
                        t1.Elapsed += (sender, e) => unblockRequests(senderClient.userID.ToString(), targetClient.userID.ToString());
                        t1.Start();
                        blockedRequestsPer[targetClient.userID.ToString()].Add(senderClient.userID.ToString(), t1);
                    }
                    if (requestCooldownType == 2 && !blockedRequestsAll.ContainsKey(targetClient.userID.ToString()))
                    {
                        TimerPlus t1 = new TimerPlus();
                        t1.AutoReset = false;
                        t1.Interval = requestCooldown;
                        t1.Elapsed += (sender, e) => unblockRequests(senderClient.userID.ToString(), targetClient.userID.ToString());
                        t1.Start();
                        blockedRequestsAll.Add(targetClient.userID.ToString(), t1);
                    }
                }
                else
                    Broadcast.broadcastTo(senderClient.netPlayer, "You have no teleport requests to accept!");
            }
        }
示例#15
0
 public static void Start()
 {
     if (File.Exists(Vars.whiteListFile))
     {
         Vars.startTimer();
         readWhitelist();
         TimerPlus t = new TimerPlus();
         t.AutoReset = true;
         t.Interval = Vars.refreshInterval;
         t.Elapsed += readWhitelistElapsed;
         t.Start();
     }
     else
     {
         Vars.conLog.Error("Whitelist file was not found!");
     }
 }
示例#16
0
        public static void mute(PlayerClient senderClient, string[] args, bool mode)
        {
            if (args.Count() > 1)
            {
                int time;
                if (mode && int.TryParse(args.Last().Remove(args.Last().Length - 1), out time) && (args.Last().EndsWith("s") || args.Last().EndsWith("m") || args.Last().EndsWith("h")))
                {
                    string timeString = args.Last().Remove(args.Last().Length - 1);
                    string timeMode = args.Last().Substring(args.Last().Length - 1, 1);
                    time *= 1000;
                    if (timeMode == "s")
                        timeMode = " second(s).";
                    if (timeMode == "m")
                    {
                        timeMode = " minute(s).";
                        time *= 60;
                    }
                    if (timeMode == "h")
                    {
                        timeMode = " hour(s).";
                        time *= 3600;
                    }

                    List<string> playerNameList = new List<string>();
                    int curIndex = 0;
                    foreach (string s in args)
                    {
                        if (curIndex > 0 && curIndex < args.Count() - 1)
                            playerNameList.Add(s);
                        curIndex++;
                    }
                    string playerName = string.Join(" ", playerNameList.ToArray());

                    if (playerName.StartsWith("\"") && playerName.EndsWith("\""))
                    {
                        playerName = playerName.Substring(1, playerName.Length - 2);

                        PlayerClient[] possibleTargets = Array.FindAll(AllPlayerClients.ToArray(), (PlayerClient pc) => pc.userName.Equals(playerName));
                        if (possibleTargets.Count() == 0)
                            Broadcast.broadcastTo(senderClient.netPlayer, "No player names equal \"" + playerName + "\".");
                        else if (possibleTargets.Count() > 1)
                            Broadcast.broadcastTo(senderClient.netPlayer, "Too many player names equal \"" + playerName + "\".");
                        else
                        {
                            PlayerClient targetClient = possibleTargets[0];
                            if (!mutedUsers.Contains(targetClient.userID.ToString()))
                            {
                                Broadcast.broadcastAll("Player \"" + targetClient.userName + "\" has been muted on global chat for " + timeString + timeMode);
                                mutedUsers.Add(targetClient.userID.ToString());
                                TimerPlus tp = new TimerPlus();
                                tp.AutoReset = false;
                                tp.Interval = time;
                                tp.Elapsed += (sender, e) => unmuteElapsed(sender, e, targetClient.userID.ToString());
                                tp.Start();
                                muteTimes.Add(targetClient.userID.ToString(), tp);
                            }
                            else
                            {
                                Broadcast.broadcastTo(senderClient.netPlayer, targetClient.userName + " is already muted for " + timeString + timeMode);
                            }
                        }
                    }
                    else
                    {
                        PlayerClient[] possibleTargets = Array.FindAll(AllPlayerClients.ToArray(), (PlayerClient pc) => pc.userName.Contains(playerName));
                        if (possibleTargets.Count() == 0)
                            Broadcast.broadcastTo(senderClient.netPlayer, "No player names equal or contain \"" + playerName + "\".");
                        else if (possibleTargets.Count() > 1)
                            Broadcast.broadcastTo(senderClient.netPlayer, "Too many player names contain \"" + playerName + "\".");
                        else
                        {
                            PlayerClient targetClient = possibleTargets[0];
                            if (!mutedUsers.Contains(targetClient.userID.ToString()))
                            {
                                Broadcast.broadcastAll("Player \"" + targetClient.userName + "\" has been muted on global chat for " + timeString + timeMode);
                                mutedUsers.Add(targetClient.userID.ToString());
                                TimerPlus tp = new TimerPlus();
                                tp.AutoReset = false;
                                tp.Interval = time;
                                tp.Elapsed += (sender, e) => unmuteElapsed(sender, e, targetClient.userID.ToString());
                                tp.Start();
                                muteTimes.Add(targetClient.userID.ToString(), tp);
                            }
                            else
                            {
                                Broadcast.broadcastTo(senderClient.netPlayer, targetClient.userName + " is already muted for " + timeString + timeMode);
                            }
                        }
                    }
                }
                else
                {
                    List<string> playerNameList = new List<string>();
                    int curIndex = 0;
                    foreach (string s in args)
                    {
                        if (curIndex > 0)
                            playerNameList.Add(s);
                        curIndex++;
                    }

                    string playerName = string.Join(" ", playerNameList.ToArray());

                    if (playerName.StartsWith("\"") && playerName.EndsWith("\""))
                    {
                        playerName = playerName.Substring(1, playerName.Length - 2);

                        PlayerClient[] possibleTargets = Array.FindAll(AllPlayerClients.ToArray(), (PlayerClient pc) => pc.userName.Equals(playerName));
                        if (possibleTargets.Count() == 0)
                            Broadcast.broadcastTo(senderClient.netPlayer, "No player names equal \"" + playerName + "\".");
                        else if (possibleTargets.Count() > 1)
                            Broadcast.broadcastTo(senderClient.netPlayer, "Too many player names equal \"" + playerName + "\".");
                        else
                        {
                            PlayerClient targetClient = possibleTargets[0];
                            if (mode)
                            {
                                if (!mutedUsers.Contains(targetClient.userID.ToString()))
                                {
                                    Broadcast.broadcastAll("Player \"" + targetClient.userName + "\" has been muted on global chat.");
                                    mutedUsers.Add(targetClient.userID.ToString());
                                }
                                else
                                {
                                    Broadcast.broadcastTo(senderClient.netPlayer, targetClient.userName + " is already muted.");
                                }
                            }
                            else
                            {
                                if (mutedUsers.Contains(targetClient.userID.ToString()))
                                {
                                    Broadcast.broadcastAll("Player \"" + targetClient.userName + "\" has been unmuted on global chat.");
                                    mutedUsers.Remove(targetClient.userID.ToString());
                                }
                                else
                                {
                                    Broadcast.broadcastTo(senderClient.netPlayer, targetClient.userName + " is not muted.");
                                }
                            }
                        }
                    }
                    else
                    {
                        PlayerClient[] possibleTargets = Array.FindAll(AllPlayerClients.ToArray(), (PlayerClient pc) => pc.userName.Contains(playerName));
                        if (possibleTargets.Count() == 0)
                            Broadcast.broadcastTo(senderClient.netPlayer, "No player names equal or contain \"" + playerName + "\".");
                        else if (possibleTargets.Count() > 1)
                            Broadcast.broadcastTo(senderClient.netPlayer, "Too many player names contain \"" + playerName + "\".");
                        else
                        {
                            PlayerClient targetClient = possibleTargets[0];
                            if (mode)
                            {
                                if (!mutedUsers.Contains(targetClient.userID.ToString()))
                                {
                                    Broadcast.broadcastAll("Player \"" + targetClient.userName + "\" has been muted on global chat.");
                                    mutedUsers.Add(targetClient.userID.ToString());
                                }
                                else
                                {
                                    Broadcast.broadcastTo(senderClient.netPlayer, targetClient.userName + " is already muted.");
                                }
                            }
                            else
                            {
                                if (mutedUsers.Contains(targetClient.userID.ToString()))
                                {
                                    Broadcast.broadcastAll("Player \"" + targetClient.userName + "\" has been unmuted on global chat.");
                                    mutedUsers.Remove(targetClient.userID.ToString());
                                }
                                else
                                {
                                    Broadcast.broadcastTo(senderClient.netPlayer, targetClient.userName + " is not muted.");
                                }
                            }
                        }
                    }
                }
            }
        }
示例#17
0
 public static void onceMOTD()
 {
     foreach (KeyValuePair<string, Dictionary<string, List<string>>> kv in onceMOTDList)
     {
         TimerPlus t = new TimerPlus();
         t.AutoReset = false;
         t.Interval = Convert.ToInt32(kv.Value.ElementAt(0).Key);
         t.Elapsed += ((sender, e) => onceMOTDElapsed(kv.Key));
         t.Start();
     }
 }
示例#18
0
        public static void updateRequestData(string UID, string otherUID, int cooldown, TimerPlus t)
        {
            List<string> cooldownFileData = File.ReadAllLines(requestCooldownsFile).ToList();
            List<string> UIDs = new List<string>();
            foreach (string str in cooldownFileData)
            {
                UIDs.Add(str.Split('=')[0]);
            }
            if (UIDs.Contains(UID))
            {
                string fullString = "";
                string currentRequests = Array.Find(cooldownFileData.ToArray(), (string s) => s.StartsWith(UID)).Split('=')[1];
                if (currentRequests.Contains(otherUID))
                {
                    List<string> allRequests = currentRequests.Split(';').ToList();
                    int index = Array.FindIndex(allRequests.ToArray(), (string s) => s.StartsWith(otherUID));

                    allRequests[index] = otherUID + ":" + t.TimeLeft;

                    fullString = UID + "=" + string.Join(";", allRequests.ToArray());
                }
                else
                {
                    fullString = UID + "=" + currentRequests;

                    fullString += ";" + otherUID + ":" + cooldown;
                }

                int indexOfUID = Array.FindIndex(cooldownFileData.ToArray(), (string s) => s.StartsWith(UID));
                cooldownFileData[indexOfUID] = fullString;
            }
            else
            {
                cooldownFileData.Add(UID + "=" + otherUID + ":" + cooldown);
            }
            using (StreamWriter sw = new StreamWriter(requestCooldownsFile, false))
            {
                foreach (string s in cooldownFileData)
                {
                    sw.WriteLine(s);
                }
            }
        }
示例#19
0
        public static void readRequestAllData()
        {
            List<string> cooldownFileData = File.ReadAllLines(requestCooldownsAllFile).ToList();
            foreach (string s in cooldownFileData)
            {
                string UID = s.Split('=')[0];
                string cooldown = s.Split('=')[1];

                TimerPlus t = new TimerPlus();
                t.AutoReset = false;
                t.Interval = Convert.ToInt32(cooldown);
                t.Elapsed += (sender, e) => unblockRequests("", UID);
                t.Start();
                if (!blockedRequestsAll.ContainsKey(UID))
                    blockedRequestsAll.Add(UID, t);
            }
        }
示例#20
0
        public static void warping(PlayerClient senderClient, Vector3 destination)
        {
            bool b = true;
            int timeElapsed = 0;
            RustServerManagement serverManagement = RustServerManagement.Get();
            Character senderChar;
            Character.FindByUser(senderClient.userID, out senderChar);

            Vector3 oldPos = senderChar.transform.position;
            while (b)
            {
                if (wasHit.Contains(senderClient))
                {
                    isTeleporting.Remove(senderClient);
                    wasHit.Remove(senderClient);
                    Broadcast.broadcastTo(senderClient.netPlayer, "Warp was interrupted due to damage.");
                    b = false;
                    break;
                }
                if (timeElapsed >= warpDelay)
                {
                    Vector3 oldDest = destination;
                    oldDest.y += 1;
                    if (Vector3.Distance(oldPos, destination) > 375)
                        destination.y += 8;

                    serverManagement.TeleportPlayerToWorld(senderClient.netPlayer, destination);
                    TimerPlus tp = new TimerPlus();
                    tp.AutoReset = false;
                    tp.Interval = 500;
                    tp.Elapsed += ((sender, e) => teleportToWorldElapsed(senderClient.netPlayer, oldDest));
                    tp.Start();
                    isTeleporting.Remove(senderClient);
                    b = false;
                    break;
                }
                Vector3 newPos = senderChar.transform.position;
                if (Vector3.Distance(oldPos, newPos) > 3)
                {
                    Broadcast.broadcastTo(senderClient.netPlayer, "You moved. Warp cancelled.");
                    isTeleporting.Remove(senderClient);
                    b = false;
                    break;
                }
                Thread.Sleep(1000);
                timeElapsed++;
            }
        }
示例#21
0
 public static void startTimer()
 {
     TimerPlus timer = new TimerPlus();
     timer.AutoReset = true;
     timer.Interval = refreshInterval;
     timer.Elapsed += ((sender, e) => grabGroupMembers());
     timer.Start();
 }
示例#22
0
        public static void giveKit(PlayerClient senderClient, string[] args, string message)
        {
            try
            {
                if (args.Count() > 1)
                {
                    string kitName = args[1];
                    string kitNameToLower = kitName.ToLower();
                    Dictionary<string, int> kitItems = new Dictionary<string,int>();
                    if (kits.Keys.Contains(kitNameToLower)) // If kit exists
                    {
                        if (kitsForRanks.Keys.Contains(findRank(senderClient.userID.ToString()))) // If kit exist for my rank
                        {
                            if (kitsForRanks[findRank(senderClient.userID.ToString())].Contains(kitNameToLower)) // If the kit I requested is permitted for my rank
                            {
                                bool b = true;
                                if (playerCooldowns.Keys.Contains(senderClient.userID.ToString()))
                                {
                                    if (playerCooldowns[senderClient.userID.ToString()].Values.Contains(kitNameToLower))
                                    {
                                        foreach (KeyValuePair<TimerPlus, string> kv in playerCooldowns[senderClient.userID.ToString()])
                                        {
                                            if (kv.Value == kitNameToLower)
                                            {
                                                if (Math.Round((kv.Key.TimeLeft / 1000)) > 0)
                                                    b = false;
                                            }
                                        }
                                    }
                                }

                                if (b) // If I am not on cool down for this kit
                                {
                                    kitItems = kits[kitNameToLower];
                                    Broadcast.noticeTo(senderClient.netPlayer, "☻", "You were given the " + kitName + " kit.");

                                    if (kitCooldowns.Keys.Contains(kitNameToLower)) // If a cooldown is set for this kit, set my cool down
                                    {
                                        TimerPlus t = new TimerPlus();
                                        t.AutoReset = false;
                                        t.Interval = kitCooldowns[kitNameToLower];
                                        t.Elapsed += (sender, e) => restoreKit(sender, e, kitNameToLower, senderClient.userID.ToString());
                                        t.Start();

                                        if (!playerCooldowns.Keys.Contains(senderClient.userID.ToString()))
                                            playerCooldowns.Add(senderClient.userID.ToString(), new Dictionary<TimerPlus, string>() { { t, kitNameToLower } });
                                        else
                                            playerCooldowns[senderClient.userID.ToString()].Add(t, kitNameToLower);
                                    }
                                }
                                else // If I am on cool down
                                {
                                    foreach (KeyValuePair<TimerPlus, string> kv in playerCooldowns[senderClient.userID.ToString()])
                                    {
                                        if (kv.Value == kitNameToLower)
                                        {
                                            // Return how long I have to wait
                                            double timeLeft = Math.Round((kv.Key.TimeLeft / 1000));
                                            Broadcast.noticeTo(senderClient.netPlayer, "✯", "You must wait " + (timeLeft > 999999999 ? "forever" : timeLeft.ToString() + " seconds") + " before using this.");
                                        }
                                    }
                                }
                            }
                            else // If I am not allowed to use this kit
                            {
                                if (kitsForUIDs.ContainsKey(senderClient.userID.ToString()))
                                {
                                    if (kitsForUIDs[senderClient.userID.ToString()].Contains(kitNameToLower))
                                    {
                                        bool b = true;
                                        if (playerCooldowns.Keys.Contains(senderClient.userID.ToString()))
                                        {
                                            if (playerCooldowns[senderClient.userID.ToString()].Values.Contains(kitNameToLower))
                                                b = false;
                                        }

                                        if (b) // If I am not on cool down for this kit
                                        {
                                            kitItems = kits[kitNameToLower];
                                            Broadcast.noticeTo(senderClient.netPlayer, "☻", "You were given the " + kitName + " kit.");

                                            if (kitCooldowns.Keys.Contains(kitNameToLower)) // If a cooldown is set for this kit, set my cool down
                                            {
                                                TimerPlus t = new TimerPlus();
                                                t.AutoReset = false;
                                                t.Interval = kitCooldowns[kitNameToLower];
                                                t.Elapsed += (sender, e) => restoreKit(sender, e, kitNameToLower, senderClient.userID.ToString());
                                                t.Start();

                                                if (!playerCooldowns.Keys.Contains(senderClient.userID.ToString()))
                                                    playerCooldowns.Add(senderClient.userID.ToString(), new Dictionary<TimerPlus, string>() { { t, kitNameToLower } });
                                                else
                                                    playerCooldowns[senderClient.userID.ToString()].Add(t, kitNameToLower);
                                            }
                                        }
                                        else // If I am on cool down
                                        {
                                            foreach (KeyValuePair<TimerPlus, string> kv in playerCooldowns[senderClient.userID.ToString()])
                                            {
                                                if (kv.Value == kitNameToLower)
                                                {
                                                    // Return how long I have to wait
                                                    double timeLeft = Math.Round((kv.Key.TimeLeft / 1000));
                                                    Broadcast.noticeTo(senderClient.netPlayer, "✯", "You must wait " + (timeLeft > 999999999 ? "forever" : timeLeft.ToString() + " seconds") + " before using this.");
                                                }
                                            }
                                        }
                                    }
                                    else
                                    {
                                        Broadcast.noticeTo(senderClient.netPlayer, ":(", "You do not have permission to do this.");
                                    }
                                }
                                else
                                {
                                    Broadcast.noticeTo(senderClient.netPlayer, ":(", "You do not have permission to do this.");
                                }
                            }
                        }
                        else // If I do not have any kits assigned to my rank
                        {
                            if (unassignedKits.Contains(kitNameToLower)) // If the kit is actually unassigned to a rank
                            {
                                bool b = true;
                                if (playerCooldowns.Keys.Contains(senderClient.userID.ToString()))
                                {
                                    if (playerCooldowns[senderClient.userID.ToString()].Values.Contains(kitNameToLower))
                                        b = false;
                                }

                                if (b) // If I am not on cool down for this kit
                                {
                                    kitItems = kits[kitNameToLower];
                                    Broadcast.noticeTo(senderClient.netPlayer, "☻", "You were given the " + kitName + " kit.");

                                    if (kitCooldowns.Keys.Contains(kitNameToLower)) // If a cooldown is set for this kit, set my cool down
                                    {
                                        TimerPlus t = new TimerPlus();
                                        t.AutoReset = false;
                                        t.Interval = kitCooldowns[kitNameToLower];
                                        t.Elapsed += (sender, e) => restoreKit(sender, e, kitNameToLower, senderClient.userID.ToString());
                                        t.Start();

                                        if (!playerCooldowns.Keys.Contains(senderClient.userID.ToString()))
                                            playerCooldowns.Add(senderClient.userID.ToString(), new Dictionary<TimerPlus, string>() { { t, kitNameToLower } });
                                        else
                                            playerCooldowns[senderClient.userID.ToString()].Add(t, kitNameToLower);
                                    }
                                }
                                else // If I am on cool down
                                {
                                    foreach (KeyValuePair<TimerPlus, string> kv in playerCooldowns[senderClient.userID.ToString()])
                                    {
                                        if (kv.Value == kitNameToLower)
                                        {
                                            // Return how long I have to wait
                                            double timeLeft = Math.Round((kv.Key.TimeLeft / 1000));
                                            Broadcast.noticeTo(senderClient.netPlayer, "✯", "You must wait " + (timeLeft > 999999999 ? "forever" : timeLeft.ToString() + " seconds") + " before using this.");
                                        }
                                    }
                                }
                            }
                            else // If the kit is truly assigned to rank, just not mine
                            {
                                if (kitsForUIDs.ContainsKey(senderClient.userID.ToString()))
                                {
                                    if (kitsForUIDs[senderClient.userID.ToString()].Contains(kitNameToLower))
                                    {
                                        bool b = true;
                                        if (playerCooldowns.Keys.Contains(senderClient.userID.ToString()))
                                        {
                                            if (playerCooldowns[senderClient.userID.ToString()].Values.Contains(kitNameToLower))
                                                b = false;
                                        }

                                        if (b) // If I am not on cool down for this kit
                                        {
                                            kitItems = kits[kitNameToLower];
                                            Broadcast.noticeTo(senderClient.netPlayer, "☻", "You were given the " + kitName + " kit.");

                                            if (kitCooldowns.Keys.Contains(kitNameToLower)) // If a cooldown is set for this kit, set my cool down
                                            {
                                                TimerPlus t = new TimerPlus();
                                                t.AutoReset = false;
                                                t.Interval = kitCooldowns[kitNameToLower];
                                                t.Elapsed += (sender, e) => restoreKit(sender, e, kitNameToLower, senderClient.userID.ToString());
                                                t.Start();

                                                if (!playerCooldowns.Keys.Contains(senderClient.userID.ToString()))
                                                    playerCooldowns.Add(senderClient.userID.ToString(), new Dictionary<TimerPlus, string>() { { t, kitNameToLower } });
                                                else
                                                    playerCooldowns[senderClient.userID.ToString()].Add(t, kitNameToLower);
                                            }
                                        }
                                        else // If I am on cool down
                                        {
                                            foreach (KeyValuePair<TimerPlus, string> kv in playerCooldowns[senderClient.userID.ToString()])
                                            {
                                                if (kv.Value == kitNameToLower)
                                                {
                                                    // Return how long I have to wait
                                                    double timeLeft = Math.Round((kv.Key.TimeLeft / 1000));
                                                    Broadcast.noticeTo(senderClient.netPlayer, "✯", "You must wait " + (timeLeft > 999999999 ? "forever" : timeLeft.ToString() + " seconds") + " before using this.");
                                                }
                                            }
                                        }
                                    }
                                    else
                                    {
                                        Broadcast.noticeTo(senderClient.netPlayer, ":(", "You do not have permission to do this.");
                                    }
                                }
                                else
                                {
                                    Broadcast.noticeTo(senderClient.netPlayer, ":(", "You do not have permission to do this.");
                                }
                            }
                        }
                    }
                    List<string> parameters;
                    foreach (KeyValuePair<string, int> kv in kitItems)
                    {
                        parameters = new List<string>()
                        {
                            { "/i" },
                            { "\"" + kv.Key + "\"" },
                            { kv.Value.ToString() }
                        };
                        createItem(senderClient, senderClient, parameters.ToArray(), string.Join(" ", parameters.ToArray()), false);
                    }
                }
            } catch (Exception ex)
            {
                Broadcast.broadcastTo(senderClient.netPlayer, ex.ToString());
            }
        }
示例#23
0
 public static void loopItems()
 {
     TimerPlus t = new TimerPlus();
     t.AutoReset = true;
     t.Interval = 5000;
     t.Elapsed += ((sender, e) => checkItems());
     t.Start();
 }
示例#24
0
 public static void cycleMOTD()
 {
     TimerPlus t = new TimerPlus();
     t.AutoReset = true;
     t.Interval = cycleInterval;
     t.Elapsed += cycleMOTDElapsed;
     t.Start();
 }