public static void initTCP() { packets[0x01] = new x01PINGFROMHOST(); packets[0x04] = new x04SLOTINFOJOIN(); packets[0x05] = new x05REJECTJOIN(); packets[0x06] = new x06PLAYERINFO(); packets[0x07] = new x07PLAYERLEAVE(); packets[0x08] = new x08OTHERGAMELOADED(); packets[0x09] = new x09SLOTINFO(); packets[0x0A] = new x0aCOUNTDOWNSTART(); packets[0x0B] = new x0bCOUNTDOWNEND(); packets[0x0c] = new x0cACTIONBROADCAST(); packets[0x0F] = new x0fCHATFROMHOST(); packets[0x1E] = new x1eJOINREQUEST(); packets[0x21] = new x21PLAYERLEAVEREQ(); packets[0x23] = new x23OWNGAMELOADED(); packets[0x26] = new x26CLIENTACTION(); packets[0x27] = new x27CLIENTKEEPALIVE(); packets[0x28] = new x28CHATTOHOST(); packets[0x3d] = new x3dMAPCHECK(); packets[0x42] = new x42MAPSIZEVERIFY(); packets[0x46] = new x46PONGTOHOST(); packets[0x48] = new x48EXTRAACTIONBROADCAST(); }
public void HostSendChat(string msg, byte[] toPIDs = null, byte fromPID = 255, byte ingamechannel = 0) { if (toPIDs == null) { var pidList = new List <byte>(); foreach (var p in players) { pidList.Add(p.pid); } toPIDs = pidList.ToArray(); } if (fromPID == 255) { fromPID = GetHostPid(); } if (ingamechannel == 3) { fromPID = toPIDs[0]; } x0fCHATFROMHOST cfh = new x0fCHATFROMHOST(); if (gameState == GameState.LOBBY) { cfh.command = (byte)CHATTOHOSTCOMMANDS.MESSAGE; cfh.extra = null; } else if (gameState == GameState.INGAME) { cfh.fromPID = fromPID; cfh.command = (byte)CHATTOHOSTCOMMANDS.MESSAGEEXTRA; cfh.extra = new byte[] { ingamechannel, 0, 0, 0 }; } cfh.fromPID = fromPID; cfh.toPIDs = toPIDs; cfh.args = msg; SendTo(toPIDs, cfh); }
public void HandleClientChat(ConnectedPlayer p, x28CHATTOHOST cc) { if (p.pid != cc.fromPID) { return; } if (cc.command == (byte)CHATTOHOSTCOMMANDS.MESSAGE || cc.command == (byte)CHATTOHOSTCOMMANDS.MESSAGEEXTRA) { bool hidden = false; string msg = (string)cc.args; if (cc.extra == null) //lobby message { Console.WriteLine("[LOBBY] " + p.name + ": " + msg); if (msg[0] == '!') { hidden = HandleClientCommand(p, msg); } } else { byte[] extra = (byte[])cc.extra; if (extra.Length != 4) //malformed somehow { return; } Console.WriteLine("INGAME CHAT FROM " + extra[0] + ": " + msg); if (extra[0] == 0) //ingame message to ALL { Console.WriteLine("[ALL] " + p.name + ": " + msg); } else if (extra[0] == 2) //ingame message to OBSERVERS //Unfortunately, this does not fire when there is a single observer. Really a shame, since that observer can only talk in observer chat... { Console.WriteLine("[OBS] " + p.name + ": " + msg); } else if (extra[0] == 3) { Console.WriteLine("[PM " + cc.fromPID + "->" + cc.toPIDs[0] + "] " + p.name + ": " + msg); } if (msg[0] == '!') { hidden = HandleClientCommand(p, msg, extra[0]); } } if (!hidden) { x0fCHATFROMHOST cfh = new x0fCHATFROMHOST(); cfh.toPIDs = cc.toPIDs; cfh.fromPID = cc.fromPID; cfh.extra = cc.extra; cfh.command = cc.command; cfh.args = cc.args; SendTo(cc.toPIDs, cfh); } } if (gameState != GameState.LOBBY) { return; //the rest can only happen in lobby. } if (cc.command == (byte)CHATTOHOSTCOMMANDS.CHANGECOLOR) { HandleClientColorChange(p, (byte)cc.args); } if (cc.command == (byte)CHATTOHOSTCOMMANDS.CHANGETEAM) { HandleClientTeamChange(p, (byte)cc.args); } if (cc.command == (byte)CHATTOHOSTCOMMANDS.CHANGERACE) { HandleClientRaceChange(p, (byte)cc.args); } if (cc.command == (byte)CHATTOHOSTCOMMANDS.CHANGEHANDICAP) { HandleClientHandicapChange(p, (byte)cc.args); } }