Example #1
0
    public void OnReceiveLobby(PLobby packet, NetPeer peer)
    {
        LobbyMenu.instance.OpenLobby(packet.serverName);

        for (int i = 0; i < packet.players.Length; i++)
        {
            LobbyMenu.instance.CreatePlayer(packet.players[i].id, packet.players[i].name);
        }
    }
Example #2
0
        public void PlayerWhisper(GPlayer player, Packet packet)
        {
            Channel PLobby;

            PLobby = player.Lobby;
            if (PLobby == null)
            {
                return;
            }

            if (!packet.ReadPStr(out string Nickname))
            {
            }

            if (!packet.ReadPStr(out string Messages))
            {
            }

            PLobby.PlayerSendWhisper(player, Nickname, Messages);
        }
Example #3
0
    public void OnReceiveHandshake(PClientHandshake packet, NetPeer peer)
    {
        int id = LobbyMenu.instance.Players.Count;

        LobbyMenu.instance.CreatePlayer(peer, packet.clientName, false);

        PLobby lobbyPacket             = new PLobby();
        List <SerializedLobbyPlayer> S = new List <SerializedLobbyPlayer>();

        for (int i = 0; i < LobbyMenu.instance.Players.Count; i++)
        {
            LobbyPlayer           p   = LobbyMenu.instance.Players[i];
            SerializedLobbyPlayer slp = new SerializedLobbyPlayer();
            slp.id   = p.id;
            slp.name = p.playerName;

            S.Add(slp);
        }

        lobbyPacket.serverName = serverName;
        lobbyPacket.players    = S.ToArray();

        peer.Send(serializer.Serialize(lobbyPacket), SendOptions.ReliableOrdered);

        PLobbyPlayer lp = new PLobbyPlayer();

        lp.id     = id;
        lp.name   = packet.clientName;
        lp.action = true;

        for (int i = 0; i < Peers.Count; i++)
        {
            if (Peers[i] != peer)
            {
                Peers[i].Send(serializer.Serialize(lp), SendOptions.ReliableOrdered);
            }
        }
    }
Example #4
0
        public void PlayerGMCommand(GPlayer player, Packet packet)
        {
            GameBase   Game;
            MailSender AddMail;
            Channel    PLobby;
            uint       ItemTypeID, Quantity, PlayerConnectionID;
            string     Nick;
            byte       Arg1;

            if (!(player.GetCapability == 4))
            {
                WriteConsole.WriteLine("HandleGMCommands: Player has requested gm command but he is not an admin");
                return;
            }

            if (!packet.ReadUInt16(out ushort CommandId))
            {
                return;
            }

            PLobby = player.Lobby;

            if (PLobby == null)
            {
                return;
            }
            switch ((GM_COMMAND)CommandId)
            {
            case GM_COMMAND.GM_Visibility:     //command /visible [on/off] (Ficar Visivel Ou Invisivel)
            {
                packet.ReadByte(out Arg1);
                switch ((TVISIBLE_ACTION)Arg1)
                {
                case TVISIBLE_ACTION.Enable:             //visibilidade: on
                {
                    player.Visible = 4;
                }
                break;

                case TVISIBLE_ACTION.Disable:            //visibilidade: off
                {
                    player.Visible = 0;
                }
                break;
                }
                PLobby.UpdatePlayerLobbyInfo(player);
                break;
            }

            case GM_COMMAND.Player_Whisper:     //command /whisper  [on/off]
            {
                packet.ReadByte(out Arg1);
                switch ((TWHISPER_ACTION)Arg1)
                {
                case TWHISPER_ACTION.Disable:             //whisper: off
                {
                }
                break;

                case TWHISPER_ACTION.Enable:            //whiper: on
                {
                }
                break;
                }
                player.SendResponse(new byte[] { 0x0F, 0x00 });
            }
            break;

            case GM_COMMAND.Player_Lobby:     //command /TLobby  [on/off]
            {
                packet.ReadByte(out Arg1);
                switch (Arg1)
                {
                case 0:             //lobby: off
                {
                }
                break;

                case 2:            //lobby: on
                {
                }
                break;
                }
                player.SendResponse(new byte[] { 0x0F, 0x00 });
            }
            break;

            case GM_COMMAND.Player_Open:     //command /open [nick]
            {
                packet.ReadPStr(out Nick);
                WriteConsole.WriteLine("test =>" + Nick);
            }
            break;

            case GM_COMMAND.Player_Close:     //command /close [nick]
            {
                packet.ReadPStr(out Nick);
                WriteConsole.WriteLine("test =>" + Nick);
            }
            break;

            case GM_COMMAND.Player_Kick:     //command /kick [nick] [op]
            {
                if (!packet.ReadUInt32(out PlayerConnectionID))
                {
                    return;
                }

                var client = PLobby.GetPlayerByConnectionId(PlayerConnectionID);

                if (client == null)
                {
                    return;
                }

                player.SendResponse(new byte[] { 0x0F, 0x00 });

                client.Close();
            }
            break;

            case GM_COMMAND.Player_Disconnect_By_UID:     //command /discon_uid [uid]
            {
                if (!packet.ReadUInt32(out PlayerConnectionID))
                {
                    return;
                }

                var client = PLobby.GetPlayerByConnectionId(PlayerConnectionID);

                if (client == null)
                {
                    return;
                }

                client.SendResponse(new byte[] { 0x76, 0x02, 0xFA, 0x00, 0x00, 0x00 });

                client.Close();
            }
            break;

            case GM_COMMAND.Player_Change_GameWind:     //Command /wind [spd] [dir]
            {
                packet.ReadByte(out byte WP);

                packet.ReadByte(out byte WD);

                Game = PLobby.GetGameHandle(player);

                if (Game == null)
                {
                    return;
                }

                if (Game != null && Game.GameType != GAME_TYPE.CHAT_ROOM)
                {
                    Game.Send(ShowWind(WP, WD));
                }
            }
            break;

            case GM_COMMAND.Player_Change_GameWeather:     //Command /weather [type] 'fine', 'rain', 'snow', 'cloud' (Chuva, Neve ...)
            {
                packet.ReadByte(out Arg1);

                Game = PLobby.GetGameHandle(player);

                if (Game == null)
                {
                    return;
                }

                Game.Send(ShowWeather(Arg1));
            }
            break;

            case GM_COMMAND.Player_GiveItem:               //giveitem: /giveitem [nick][typeid][num]
            {
                packet.ReadUInt32(out PlayerConnectionID); //meu id de conexão ou do client
                packet.ReadUInt32(out ItemTypeID);         //id do item enviado
                packet.ReadUInt32(out Quantity);           //quantidade de itens enviado

                if (!IffEntry.IsExist(ItemTypeID))
                {
                    return;
                }

                var Client = (GPlayer)(player.Server).GetClientByConnectionId(PlayerConnectionID);

                if (null == Client)
                {
                    return;
                }
                AddMail = new MailSender();

                try
                {
                    AddMail.Sender = "@GM";
                    AddMail.AddText("GM presents you");
                    AddMail.AddItem(ItemTypeID, Quantity, true);
                    // Add to db
                    AddMail.Send(Client.GetUID);
                    Client.SendMailPopup();

                    player.SendResponse(new byte[] { 0x0F, 0x00 });
                }
                finally
                {
                    AddMail.Dispose();
                }
            }
            break;

            case GM_COMMAND.Player_GoldenBell:     //Command goldenbell ID (enviar item para todos da sala)
            {
                //id do item enviado
                if (!packet.ReadUInt32(out ItemTypeID))
                {
                    return;
                }
                //quantidade de itens enviado
                if (!packet.ReadUInt32(out Quantity))
                {
                    return;
                }
                //Checagem do item
                if (!IffEntry.IsExist(ItemTypeID))
                {
                    return;
                }

                Game = PLobby.GetGameHandle(player);

                if (Game == null)
                {
                    return;
                }
                AddMail = new MailSender();

                try
                {
                    foreach (var Client in Game.Players)
                    {
                        AddMail.Sender = "@GM";
                        AddMail.AddText("GM presents you");
                        AddMail.AddItem(ItemTypeID, Quantity, true);
                        // Add to db
                        AddMail.Send(Client.GetUID);
                        Client.SendMailPopup();
                    }
                }
                finally
                {
                    AddMail.Dispose();
                }
            }
            break;

            case GM_COMMAND.HioHoleCupScale:
            {
            }
            break;

            case GM_COMMAND.SetMission:     //Command /setmission [MISSION_NUM]
            {
                packet.ReadByte(out byte MissionID);

                WriteConsole.WriteLine("SetMission => " + MissionID);
            }
            break;

            case GM_COMMAND.MatchMap:    //Command /matchmap [mapcount]
            {
                packet.ReadUInt32(out uint MapCount);

                WriteConsole.WriteLine("MatchMap => " + MapCount);
            }
            break;

            case GM_COMMAND.Notice_Prize:
            {
                //List<TNoticePrize> itens;
                if (!packet.ReadByte(out Arg1))
                {
                    return;
                }
                switch (Arg1)
                {
                case 0:             //lobby: off
                {
                    if (!packet.ReadUInt32(out uint Count))
                    {
                        return;
                    }
                    for (int i = 0; i < Count; i++)
                    {
                        var item = (TNoticePrize)packet.Read(new TNoticePrize());
                    }
                }
                break;

                case 2:            //lobby: on
                {
                }
                break;
                }
                player.SendResponse(new byte[] { 0x0F, 0x00 });
            }
            break;

            default:
            {
                WriteConsole.WriteLine("Command ID UNK => " + CommandId);
                packet.Save();
            }
            break;
            }
        }
        //02 : The Room is full
        //03 : The Room is not exist
        //04 : wrong password
        //05 : you cannot get in this room level
        //07 : can not create game
        //08 : game is in progress
        public void CreateGame(GPlayer player, Packet packet)
        {
            GameInformation GameData;
            Channel         PLobby;

            PLobby = player.Lobby;
            if (PLobby == null && player.Game != null)
            {
                return;
            }

            //read first 18 bytes values
            GameData = new GameInformation
            {
                Unknown1    = packet.ReadByte(),            //1
                VSTime      = packet.ReadUInt32(),          //5/
                GameTime    = packet.ReadUInt32(),          //9
                MaxPlayer   = packet.ReadByte(),            //10
                GameType    = (GAME_TYPE)packet.ReadByte(), //11
                HoleTotal   = packet.ReadByte(),            //12
                Map         = packet.ReadByte(),            //13
                Mode        = packet.ReadByte(),            //14
                NaturalMode = packet.ReadUInt32(),          //18
            };
            //Course = 63, hole repeted = 68, chip-in = 73
            if (GameData.GameType == GAME_TYPE.HOLE_REPEAT && packet.GetSize == 68)
            {
                packet.Skip(5);
                GameData.HoleNumber  = 1;
                GameData.LockHole    = 7;
                GameData.NaturalMode = 0;
                GameData.Mode        = (byte)TGAME_MODE.GAME_MODE_REPEAT;
            }
            if (GameData.GameType == GAME_TYPE.HOLE_REPEAT && packet.GetSize == 63)
            {
                GameData.HoleNumber = 0;
                GameData.LockHole   = 0;
            }
            packet.ReadPStr(out GameData.Name);
            packet.ReadPStr(out GameData.Password);
            packet.ReadUInt32(out GameData.Artifact);

            GameData.GP        = false;
            GameData.GPTypeID  = 0;
            GameData.GPTypeIDA = 0;
            GameData.GPTime    = 0;
            // { GM Event } && { Chat Room }
            if (player.GetCapability == 4 && GameData.MaxPlayer >= 100 || GameData.GameType == GAME_TYPE.CHAT_ROOM && player.GetCapability == 4)
            {
                GameData.GMEvent = true;
            }

            var GameHandle = PLobby.CreateGame(player, GameData);

            if (GameHandle != null)
            {
                WriteConsole.WriteLine($"[CREATE ROOM]: GAMERESULT = Sucess, Type: {GameData.GameType}", ConsoleColor.Green);
            }
            else
            {
                WriteConsole.WriteLine($"[CREATE ROOM]: GAMERESULT = Failed, Type: {GameData.GameType} ", ConsoleColor.Red);
            }
        }