Exemple #1
0
        static public void F_REQUEST_WORLD_LARGE(BaseClient client, PacketIn packet)
        {
            GameClient cclient = client as GameClient;

            if (cclient.Plr == null)
                return;

            if (!cclient.Plr.IsLoad())
                return;

            PacketOut Out = new PacketOut((byte)Opcodes.F_SET_TIME);
            Out.WriteUInt32((uint)TCPServer.GetTimeStamp());
            Out.WriteUInt32(7);
            cclient.Plr.SendPacket(Out);

            Out = new PacketOut((byte)Opcodes.S_WORLD_SENT);
            Out.WriteByte(0);
            cclient.Plr.SendPacket(Out);
        }
Exemple #2
0
        public void BuildMail(PacketIn packet)
        {
            Player Plr = GetPlayer();

            if (Plr == null)
            {
                return;
            }

            if (nextSend >= TCPServer.GetTimeStamp())
            {
                SendResult(GameData.MailResult.TEXT_MAIL_RESULT6);
                return;
            }

            // Recipient read
            packet.Skip(1);
            byte   NameSize = packet.GetUint8();
            string Name     = packet.GetString(NameSize);

            Character Receiver = CharMgr.GetCharacter(Name);

            if (Receiver == null || Receiver.Realm != (byte)Plr.Realm)
            {
                SendResult(GameData.MailResult.TEXT_MAIL_RESULT7);
                return;
            }

            if (Receiver.Name == Plr.Name) // You cannot mail yourself
            {
                Plr.SendLocalizeString("", GameData.Localized_text.TEXT_PLAYER_CANT_MAIL_YOURSELF);
                return;
            }

            // Subject
            byte SubjectSize = packet.GetUint8();

            packet.Skip(1);
            string Subject = packet.GetString(SubjectSize);

            // Message
            byte MessageSize = packet.GetUint8();

            packet.Skip(1);
            string Message = packet.GetString(MessageSize);

            // Money
            UInt32 money = ByteOperations.ByteSwap.Swap(packet.GetUint32());

            // COD?
            byte cr = packet.GetUint8();

            // Item
            byte itemcounts = packet.GetUint8();

            if (!Plr.RemoveMoney((cr == 0 ? money : 0) + MAIL_PRICE))
            {
                SendResult(MailResult.TEXT_MAIL_RESULT8);
                return;
            }

            // Make a Mail
            Character_mail CMail = new Character_mail();

            CMail.Guid              = CharMgr.GenerateMailGUID();
            CMail.CharacterId       = Receiver.CharacterId;
            CMail.CharacterIdSender = Plr._Info.CharacterId;
            CMail.SenderName        = Plr._Info.Name;
            CMail.ReceiverName      = Name;
            CMail.SendDate          = (uint)TCPManager.GetTimeStamp();
            CMail.Title             = Subject;
            CMail.Content           = Message;
            CMail.Money             = money;
            CMail.Cr     = true;
            CMail.Opened = false;

            Log.Debug("Mail", "Itemcount: " + itemcounts + "");


            for (byte i = 0; i < itemcounts; ++i)
            {
                UInt16 itmslot = ByteOperations.ByteSwap.Swap(packet.GetUint16());
                packet.Skip(2);

                ByteOperations.ByteSwap.Swap(itmslot);

                Item itm = Plr.ItmInterface.GetItemInSlot(itmslot);
                if (itm != null)
                {
                    CMail.Items.Add(new KeyValuePair <uint, ushort>(itm.Info.Entry, itm.CharItem.Counts));
                    Plr.ItmInterface.DeleteItem(itmslot, itm.CharItem.Counts, true);
                    itm.Owner = null;
                }
            }

            SendResult(MailResult.TEXT_MAIL_RESULT4);
            CharMgr.Database.AddObject(CMail);

            //If player exists let them know they have mail.
            Player mailToPlayer = Player.GetPlayer(Name);

            if (mailToPlayer != null)
            {
                mailToPlayer.MlInterface.AddMail(CMail);
            }


            nextSend = (uint)TCPServer.GetTimeStamp() + 5;
        }