Guest User

Untitled

a guest
Dec 5th, 2017
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 14.68 KB | None | 0 0
  1. namespace Evolve
  2. {
  3.     using Meebey.SmartIrc4net;
  4.     using System;
  5.     using System.Runtime.InteropServices;
  6.     using System.Threading;
  7.  
  8.     internal class IRC_Global
  9.     {
  10.         private static string globalchannel = "#EvolveGlobal";
  11.         private static string globalnick = Server.name;
  12.         private static string globalopchannel = "NULL";
  13.         private static string globalserver = "irc.uk.mibbit.net";
  14.         private static IrcClient irc = new IrcClient();
  15.         private static Thread ircThread;
  16.         private static string[] names;
  17.  
  18.         public IRC_Global()
  19.         {
  20.             ThreadStart start = null;
  21.             if (start == null)
  22.             {
  23.                 start = delegate {
  24.                     irc.OnConnecting += new EventHandler(this.OnConnecting);
  25.                     irc.OnConnected += new EventHandler(this.OnConnected);
  26.                     irc.OnChannelMessage += new IrcEventHandler(this.OnChanMessage);
  27.                     irc.OnJoin += new JoinEventHandler(this.OnJoin);
  28.                     irc.OnPart += new PartEventHandler(this.OnPart);
  29.                     irc.OnQuit += new QuitEventHandler(this.OnQuit);
  30.                     irc.OnNickChange += new NickChangeEventHandler(this.OnNickChange);
  31.                     irc.OnDisconnected += new EventHandler(this.OnDisconnected);
  32.                     irc.OnQueryMessage += new IrcEventHandler(this.OnPrivMsg);
  33.                     irc.OnNames += new NamesEventHandler(this.OnNames);
  34.                     irc.OnChannelAction += new ActionEventHandler(this.OnAction);
  35.                     try
  36.                     {
  37.                         irc.Connect(globalserver, Server.ircPort);
  38.                     }
  39.                     catch (Exception exception)
  40.                     {
  41.                         Console.WriteLine("Failed to connect to other Evolve Servers!", exception.Message);
  42.                     }
  43.                 };
  44.             }
  45.             ircThread = new Thread(start);
  46.             ircThread.Start();
  47.         }
  48.  
  49.         public static string[] GetConnectedUsers()
  50.         {
  51.             return names;
  52.         }
  53.  
  54.         public static bool IsConnected()
  55.         {
  56.             return irc.IsConnected;
  57.         }
  58.  
  59.         private void OnAction(object sender, ActionEventArgs e)
  60.         {
  61.             Server.s.OwnerChat("* " + e.Data.Nick + " " + e.ActionMessage, false);
  62.         }
  63.  
  64.         private void OnChanMessage(object sender, IrcEventArgs e)
  65.         {
  66.             string message = e.Data.Message;
  67.             string nick = e.Data.Nick;
  68.             string str2 = "1234567890-=qwertyuiop[]\\asdfghjkl;'zxcvbnm,./!@#$%^*()_+QWERTYUIOPASDFGHJKL:\"ZXCVBNM<>? ";
  69.             foreach (char ch in message)
  70.             {
  71.                 if (str2.IndexOf(ch) == -1)
  72.                 {
  73.                     message = message.Replace(ch.ToString(), "*");
  74.                 }
  75.             }
  76.             if (e.Data.Channel == globalopchannel)
  77.             {
  78.                 Server.s.EvolveGlobalChat(e.Data.Nick + ": " + message, false);
  79.                 Player.GlobalEvolve("&b[Global] &c" + e.Data.Nick + ": &f" + message);
  80.             }
  81.             else
  82.             {
  83.                 Server.s.EvolveGlobalChat(e.Data.Nick + ": " + message, false);
  84.                 Player.GlobalEvolve("&b[Global] &c" + e.Data.Nick + ": &f" + message);
  85.             }
  86.         }
  87.  
  88.         private void OnConnected(object sender, EventArgs e)
  89.         {
  90.             irc.Login(globalnick, globalnick, 0, globalnick);
  91.             if (Server.ircIdentify && (Server.ircPassword != string.Empty))
  92.             {
  93.                 irc.SendMessage(SendType.Message, "nickserv", "IDENTIFY " + Server.ircPassword);
  94.             }
  95.             irc.RfcJoin(globalchannel);
  96.             irc.RfcJoin(globalopchannel);
  97.             irc.Listen();
  98.         }
  99.  
  100.         private void OnConnecting(object sender, EventArgs e)
  101.         {
  102.         }
  103.  
  104.         private void OnDisconnected(object sender, EventArgs e)
  105.         {
  106.             try
  107.             {
  108.                 irc.Connect(globalserver, 0x1a0b);
  109.             }
  110.             catch
  111.             {
  112.                 Console.WriteLine("Failed to connect to mainstream Evolve Servers!");
  113.             }
  114.         }
  115.  
  116.         private void OnJoin(object sender, JoinEventArgs e)
  117.         {
  118.             irc.RfcNames(globalchannel);
  119.             irc.RfcNames(globalopchannel);
  120.         }
  121.  
  122.         private void OnNames(object sender, NamesEventArgs e)
  123.         {
  124.             names = e.UserList;
  125.         }
  126.  
  127.         private void OnNickChange(object sender, NickChangeEventArgs e)
  128.         {
  129.             if (e.NewNickname.Split(new char[] { '|' }).Length != 2)
  130.             {
  131.                 if (Server.afkset.Contains(e.NewNickname))
  132.                 {
  133.                     Server.s.EvolveGlobalChat(e.NewNickname + " is no longer away", false);
  134.                     Server.afkset.Remove(e.NewNickname);
  135.                 }
  136.                 else
  137.                 {
  138.                     Server.s.OwnerChat(e.OldNickname + " is now known as " + e.NewNickname, false);
  139.                 }
  140.             }
  141.             else
  142.             {
  143.                 string str2;
  144.                 string str = e.NewNickname.Split(new char[] { '|' })[1];
  145.                 if (((str != null) && (str != "")) && ((str2 = str) != null))
  146.                 {
  147.                     if (!(str2 == "AFK"))
  148.                     {
  149.                         if (str2 == "Away")
  150.                         {
  151.                             Server.s.EvolveGlobalChat(e.OldNickname + " is Away", false);
  152.                             Server.afkset.Add(e.OldNickname);
  153.                         }
  154.                     }
  155.                     else
  156.                     {
  157.                         Server.s.EvolveGlobalChat(e.OldNickname + " is AFK", false);
  158.                         Server.afkset.Add(e.OldNickname);
  159.                     }
  160.                 }
  161.             }
  162.             irc.RfcNames(globalchannel);
  163.             irc.RfcNames(globalopchannel);
  164.         }
  165.  
  166.         private void OnPart(object sender, PartEventArgs e)
  167.         {
  168.             Player.GlobalEvolve(e.Data.Nick + " has left globalchat.");
  169.             if (e.Data.Channel == globalopchannel)
  170.             {
  171.                 Server.s.EvolveGlobalChat(e.Data.Nick + " has left the operator channel", false);
  172.             }
  173.             else
  174.             {
  175.                 Server.s.EvolveGlobalChat(e.Data.Nick + " has left the channel", false);
  176.             }
  177.             irc.RfcNames(globalchannel);
  178.             irc.RfcNames(globalopchannel);
  179.         }
  180.  
  181.         private void OnPrivMsg(object sender, IrcEventArgs e)
  182.         {
  183.             if (Server.ircControllers.Contains(e.Data.Nick))
  184.             {
  185.                 string str2;
  186.                 int length = e.Data.Message.Split(new char[] { ' ' }).Length;
  187.                 string str = e.Data.Message.Split(new char[] { ' ' })[0];
  188.                 if (length > 1)
  189.                 {
  190.                     str2 = e.Data.Message.Substring(e.Data.Message.IndexOf(' ')).Trim();
  191.                 }
  192.                 else
  193.                 {
  194.                     str2 = "";
  195.                 }
  196.                 if ((!(str2 != "") && !(str == "restart")) && !(str == "update"))
  197.                 {
  198.                     irc.SendMessage(SendType.Message, e.Data.Nick, "Invalid command format.");
  199.                 }
  200.                 else
  201.                 {
  202.                     Server.s.OwnerChat(str + " : " + str2, false);
  203.                     switch (str)
  204.                     {
  205.                         case "kick":
  206.                             if (Player.Find(str2.Split(new char[0])[0]) == null)
  207.                             {
  208.                                 irc.SendMessage(SendType.Message, e.Data.Nick, "Player not found.");
  209.                                 return;
  210.                             }
  211.                             Command.all.Find("kick").Use(null, str2, false);
  212.                             return;
  213.  
  214.                         case "ban":
  215.                             if (Player.Find(str2) == null)
  216.                             {
  217.                                 irc.SendMessage(SendType.Message, e.Data.Nick, "Player not found.");
  218.                                 return;
  219.                             }
  220.                             Command.all.Find("ban").Use(null, str2, false);
  221.                             return;
  222.  
  223.                         case "banip":
  224.                             if (Player.Find(str2) == null)
  225.                             {
  226.                                 irc.SendMessage(SendType.Message, e.Data.Nick, "Player not found.");
  227.                                 return;
  228.                             }
  229.                             Command.all.Find("banip").Use(null, str2, false);
  230.                             return;
  231.  
  232.                         case "say":
  233.                             irc.SendMessage(SendType.Message, globalchannel, str2);
  234.                             return;
  235.  
  236.                         case "setrank":
  237.                             if (Player.Find(str2.Split(new char[] { ' ' })[0]) == null)
  238.                             {
  239.                                 irc.SendMessage(SendType.Message, e.Data.Nick, "Player not found.");
  240.                                 return;
  241.                             }
  242.                             Command.all.Find("setrank").Use(null, str2, false);
  243.                             return;
  244.  
  245.                         case "mute":
  246.                             if (Player.Find(str2) == null)
  247.                             {
  248.                                 irc.SendMessage(SendType.Message, e.Data.Nick, "Player not found.");
  249.                                 return;
  250.                             }
  251.                             Command.all.Find("mute").Use(null, str2, false);
  252.                             return;
  253.  
  254.                         case "joker":
  255.                             if (Player.Find(str2) == null)
  256.                             {
  257.                                 irc.SendMessage(SendType.Message, e.Data.Nick, "Player not found.");
  258.                                 return;
  259.                             }
  260.                             Command.all.Find("joker").Use(null, str2, false);
  261.                             return;
  262.  
  263.                         case "physics":
  264.                             if (Level.Find(str2.Split(new char[] { ' ' })[0]) == null)
  265.                             {
  266.                                 irc.SendMessage(SendType.Message, e.Data.Nick, "Map not found.");
  267.                                 return;
  268.                             }
  269.                             Command.all.Find("physics").Use(null, str2, false);
  270.                             return;
  271.  
  272.                         case "load":
  273.                             if (Level.Find(str2.Split(new char[] { ' ' })[0]) == null)
  274.                             {
  275.                                 irc.SendMessage(SendType.Message, e.Data.Nick, "Map not found.");
  276.                                 return;
  277.                             }
  278.                             Command.all.Find("load").Use(null, str2, false);
  279.                             return;
  280.  
  281.                         case "unload":
  282.                             if ((Level.Find(str2) == null) && !(str2 == "empty"))
  283.                             {
  284.                                 irc.SendMessage(SendType.Message, e.Data.Nick, "Map not found.");
  285.                                 return;
  286.                             }
  287.                             Command.all.Find("unload").Use(null, str2, false);
  288.                             return;
  289.  
  290.                         case "save":
  291.                             if (Level.Find(str2) == null)
  292.                             {
  293.                                 irc.SendMessage(SendType.Message, e.Data.Nick, "Map not found.");
  294.                                 return;
  295.                             }
  296.                             Command.all.Find("save").Use(null, str2, false);
  297.                             return;
  298.  
  299.                         case "map":
  300.                             if (Level.Find(str2.Split(new char[] { ' ' })[0]) == null)
  301.                             {
  302.                                 irc.SendMessage(SendType.Message, e.Data.Nick, "Map not found.");
  303.                                 return;
  304.                             }
  305.                             Command.all.Find("map").Use(null, str2, false);
  306.                             return;
  307.  
  308.                         case "restart":
  309.                             Server.s.EvolveGlobalChat("Restart initiated by " + e.Data.Nick, false);
  310.                             IRC_Owners.Say("Restart initiated by " + e.Data.Nick, false);
  311.                             Command.all.Find("restart").Use(null, "", false);
  312.                             return;
  313.  
  314.                         case "update":
  315.                             Server.s.EvolveGlobalChat("Update check initiated by " + e.Data.Nick, false);
  316.                             IRC_Owners.Say("Update check initiated by " + e.Data.Nick, false);
  317.                             Command.all.Find("update").Use(null, "", false);
  318.                             return;
  319.  
  320.                         default:
  321.                             irc.SendMessage(SendType.Message, e.Data.Nick, "Invalid command.");
  322.                             return;
  323.                     }
  324.                 }
  325.             }
  326.         }
  327.  
  328.         private void OnQuit(object sender, QuitEventArgs e)
  329.         {
  330.             Server.s.EvolveGlobalChat(e.Data.Nick + " has left IRC", false);
  331.             Player.GlobalEvolve(e.Data.Nick + " has left globalchat.");
  332.             irc.RfcNames(globalchannel);
  333.             irc.RfcNames(globalopchannel);
  334.         }
  335.  
  336.         public static void Reset()
  337.         {
  338.             if (irc.IsConnected)
  339.             {
  340.                 irc.Disconnect();
  341.             }
  342.             ircThread = new Thread(delegate {
  343.                 try
  344.                 {
  345.                     irc.Connect(globalserver, Server.ircPort);
  346.                 }
  347.                 catch (Exception exception)
  348.                 {
  349.                     Server.s.Log("Error Connecting to IRC", false);
  350.                     Server.s.Log(exception.ToString(), false);
  351.                 }
  352.             });
  353.             ircThread.Start();
  354.         }
  355.  
  356.         public static void Say(string msg, bool opchat = false)
  357.         {
  358.             if ((irc != null) && irc.IsConnected)
  359.             {
  360.                 if (!opchat)
  361.                 {
  362.                     irc.SendMessage(SendType.Message, globalchannel, msg);
  363.                 }
  364.                 else
  365.                 {
  366.                     irc.SendMessage(SendType.Message, globalopchannel, msg);
  367.                 }
  368.             }
  369.         }
  370.  
  371.         public static void ShutDown()
  372.         {
  373.             irc.Disconnect();
  374.             ircThread.Abort();
  375.         }
  376.     }
  377. }
Add Comment
Please, Sign In to add comment