void OnIncomingData(Player p, PacketEventArgs args) { if (args.Data.Length < 0) { return; } if (args.Data[0] != (byte)'G') { return; } args.Cancel(); var netStream = p.Client.GetStream(); using (var Writer = new StreamWriter(netStream)) { var line = Encoding.UTF8.GetString(args.Data, 0, args.Data.Length).Split('\n')[0]; var match = Parser.Match(line); if (match.Success) { var lvl = Level.FindLevel(match.Groups[1].Value); var versionLine = Encoding.UTF8.GetString(args.Data, 0, args.Data.Length).Split('\n')[2]; var userNameLine = Encoding.UTF8.GetString(args.Data, 0, args.Data.Length).Split('\n')[3]; var version = versionLine.Remove(0, "X-WoM-Version: ".Length).Replace("\r", ""); var username = userNameLine.Remove(0, "X-WoM-Username: "******"\r", ""); Thread.Sleep(1500); //Trying to find player before it loads so wait. var player = Player.Find(username); if (player != null) { player.ExtraData.ChangeOrCreate <object, object>("UsingWoM", true); if (!String.IsNullOrWhiteSpace(version)) { player.ExtraData.ChangeOrCreate <object, object>("WoMVersion", version); if (PluginSettings.GetSettingBoolean("notify-ops") == true) { Player.UniversalChatOps(username + " joined using " + version); Logger.Log(username + " joined using " + version); } } } if (lvl == null) { Writer.Write("HTTP/1.1 404 Not Found"); Writer.Flush(); } else { if (!lvl.ExtraData.ContainsKey("WoMConfig")) { Writer.Write("HTTP/1.1 500 Internal Server Error"); Writer.Flush(); } else { var config = (string[])lvl.ExtraData["WoMConfig"]; var bytes = Encoding.UTF8.GetBytes(config.ToString <string>()); Writer.WriteLine("HTTP/1.1 200 OK"); Writer.WriteLine("Date: " + DateTime.UtcNow.ToString("R")); Writer.WriteLine("Server: Apache/2.2.21 (CentOS)"); Writer.WriteLine("Last-Modified: " + DateTime.UtcNow.ToString("R")); Writer.WriteLine("Accept-Ranges: bytes"); Writer.WriteLine("Content-Length: " + bytes.Length); Writer.WriteLine("Connection: close"); Writer.WriteLine("Content-Type: text/plain"); Writer.WriteLine(); foreach (var entry in config) { Writer.WriteLine(entry); } } CFGSettings a = (CFGSettings)CFGDict.GetIfExist <Level, CFGSettings>(p.Level); WOM.SendDetail(player, a.GetSetting("detail.user")); //Send the detail with parsed variables. } } else { Writer.Write("HTTP/1.1 400 Bad Request"); Writer.Flush(); } } }
void DeactiveMessage(Player p) { CFGSettings a = (CFGSettings)PluginWoMTextures.CFGDict.GetIfExist <Level, CFGSettings>(p.Level); WOM.SendDetail(p, a.GetSetting("detail.user")); }