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; } }
public void PlayerOpenBox(GPlayer player, Packet packet) { TRewardInfo Reward; TBoxInfo BoxInfo; AddData RemoveItemData; AddData AddItemData; AddItem Item; string Param = ""; List <object> Lists; object APoint; MailSender MailSender; Lists = new List <object>(); try { if (!packet.ReadUInt32(out uint BoxIffTypeID)) { return; } AddItemData = new AddData(); BoxInfo = BoxItem.GetBoxInfo(BoxIffTypeID); // # Box doens't exist if ((BoxInfo == null)) { player.Write(OPEN_BOX_NULL); WriteConsole.WriteLine($"HandlePlayerOpenBox: Cannot find system\'s box to open { BoxIffTypeID }", ConsoleColor.Red); return; } // # Player does not have this box if (!player.Inventory.IsExist(BoxInfo.BoxTypeID)) { player.Write(OPEN_BOX_NULL); WriteConsole.WriteLine($"HandlePlayerOpenBox: Player hasn\'t had this box { BoxIffTypeID }", ConsoleColor.Red); return; } // # Special item to delete # use for openned cube if ((BoxInfo.SupplyTypeID > 0)) { if (!player.Inventory.IsExist(BoxInfo.SupplyTypeID)) { player.Write(OPEN_BOX_NULL); WriteConsole.WriteLine($"HandlePlayerOpenBox: Can\'t find player\'s supply { BoxInfo.SupplyTypeID }", ConsoleColor.Red); return; } } // # delete box RemoveItemData = player.Inventory.Remove(BoxInfo.BoxTypeID, BoxInfo.BoxQuantity, false); // # add to list APoint = new TItemData(); ((TItemData)APoint).TypeID = RemoveItemData.ItemTypeID; ((TItemData)APoint).ItemIndex = RemoveItemData.ItemIndex; ((TItemData)APoint).ItemQuantity = RemoveItemData.ItemNewQty; Lists.Add((TItemData)APoint); // # end // # if supply typeid is specified if (BoxInfo.SupplyTypeID > 0) { // # delete supplyment # use for key's spin cube RemoveItemData = player.Inventory.Remove(BoxInfo.SupplyTypeID, BoxInfo.SupplyQuantity, false); // # add to list APoint = new TItemData(); ((TItemData)APoint).TypeID = RemoveItemData.ItemTypeID; ((TItemData)APoint).ItemIndex = RemoveItemData.ItemIndex; ((TItemData)APoint).ItemQuantity = RemoveItemData.ItemNewQty; Lists.Add((TItemData)APoint); // # end } // # if special reward is specified if ((BoxInfo.SpecialRewardTypeID > 0)) { Item = new AddItem() { ItemIffId = BoxInfo.SpecialRewardTypeID, Quantity = BoxInfo.SpecialRewardQuantity, Transaction = false, Day = 0 }; AddItemData = player.AddItem(Item); if ((AddItemData.ItemNewQty > 1)) { // # add to list APoint = new TItemData(); ((TItemData)APoint).TypeID = AddItemData.ItemTypeID; ((TItemData)APoint).ItemIndex = AddItemData.ItemIndex; ((TItemData)APoint).ItemQuantity = AddItemData.ItemNewQty; Lists.Add((TItemData)APoint); // # end } } // # send data to player player.Write(ShowBoxItem(Lists)); // # clear Lists.Clear(); // # send #$AA if ((AddItemData.ItemNewQty == 1)) { APoint = new TItemData(); ((TItemData)(APoint)).TypeID = AddItemData.ItemTypeID; ((TItemData)(APoint)).ItemIndex = AddItemData.ItemIndex; ((TItemData)(APoint)).ItemQuantity = AddItemData.ItemNewQty; Lists.Add((TItemData)APoint); } // send result player.Write(ShowBoxNewItem(Lists, player.GetPang, player.GetCookie)); while (true) { Reward = BoxItem.GetItemBox(BoxIffTypeID); if (!Reward.Duplicated) { // if this item can have only one ea if (!player.Inventory.IsExist(Reward.TypeId)) { break; } } else if (Reward.Duplicated) { break; } } if (Reward.TypeId <= 0) { player.Write(BOX_REWARD_NIL); WriteConsole.WriteLine($"HandlePlayerOpenBox: Reward is nil with box typeid: { BoxIffTypeID }"); return; } if (Reward.Announce) { // generate param Param = string.Format(" You got items from !! BoxAnnounce = <PARAMS> <BOX_TYPEID> {0} </ BOX_TYPEID> <NICKNAME> {1} </ NICKNAME> <TYPEID> {2}</ TYPEID> <QTY> {3} </ QTY>", new object[] { BoxIffTypeID, player.GetNickname, Reward.TypeId, Reward.Quantity }); var Auth = MainServer.Program._server.AuthServer; if (Auth != null) { Auth.Send(new AuthPacket() { ID = AuthPacketEnum.SERVER_RELEASE_BOXRANDOM, Message = new { GetMessage = Param } }); } else { player.Server.Notice(Param); } } try { MailSender = new MailSender { Sender = "@BoxSystem" }; MailSender.AddText(BoxInfo.BoxParam); MailSender.AddItem(Reward.TypeId, Reward.Quantity); MailSender.Send(player.GetUID); player.SendMailPopup(); } finally { MailSender = null; } player.Write(ShowBoxItem(BoxIffTypeID, Reward.TypeId, Reward.Quantity)); } catch { player.Close(); } finally { Lists.Clear(); } }