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); } }
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); }
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); } } }
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); } }