Exemplo n.º 1
0
        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();
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
            }
        }