コード例 #1
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;
            }
        }
コード例 #2
0
        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();
            }
        }