public static void SendInventoryInfoResponse(IRealmClient client)
        {
            var inventory      = client.ActiveCharacter.Asda2Inventory;
            var inventoryPacks = new List <List <Asda2Item> >();
            var itemIndex      = 0;
            var allItems       = inventory.RegularItems.Where(it => it != null).ToArray();

            while (itemIndex < allItems.Length)
            {
                inventoryPacks.Add(new List <Asda2Item>(allItems.Skip(itemIndex).Take(9)));
                itemIndex += 9;
            }
            foreach (var inventoryPack in inventoryPacks)
            {
                using (var packet = new RealmPacketOut(RealmServerOpCode.RegularInventoryInfo))//4048
                {
                    for (int i = 0; i < inventoryPack.Count; i += 1)
                    {
                        var item = inventoryPack[i];
                        if (item != null)
                        {
                            Asda2InventoryHandler.WriteItemInfoToPacket(packet, item, false);
                        }
                        //WriteItemDataToPacket(item, packet, 2);
                    }
                    client.Send(packet, addEnd: false);
                }
            }
            inventoryPacks.Clear();
            itemIndex = 0;
            allItems  = inventory.ShopItems.Where(it => it != null).ToArray();
            while (itemIndex < allItems.Length)
            {
                inventoryPacks.Add(new List <Asda2Item>(allItems.Skip(itemIndex).Take(9)));
                itemIndex += 9;
            }
            foreach (var inventoryPack in inventoryPacks)
            {
                using (var packet = new RealmPacketOut(RealmServerOpCode.ShopInventoryInfo))//4045
                {
                    for (int i = 0; i < inventoryPack.Count; i += 1)
                    {
                        var item = inventoryPack[i];
                        if (item != null)
                        {
                            Asda2InventoryHandler.WriteItemInfoToPacket(packet, item, false);
                        }
                        //WriteItemDataToPacket(item, packet, 1);
                    }
                    client.Send(packet, addEnd: false);
                }
            }
        }
        public static void SendAuthChallengeSuccessReply(IRealmClient client)
        {
            client.AuthAccount.OnLogin(client);
            using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.AuthorizeResponse))
            {
                packet.Write((short)1);
                packet.WriteInt32(client.AuthAccount.AccountId);
                packet.WriteByte(1);
                client.Send(packet, false);
            }

            using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.ChanelInfoResponse))
            {
                packet.WriteByte(244);
                packet.WriteInt16(2049);
                packet.WriteInt16(100);
                packet.WriteInt16(-1);
                packet.WriteInt16(-1);
                packet.WriteInt16(-1);
                packet.WriteInt16(-1);
                packet.WriteInt64(-1L);
                packet.WriteInt64(-1L);
                packet.WriteInt64(-1L);
                packet.WriteInt64(-1L);
                packet.WriteInt64(-1L);
                packet.WriteInt64(-1L);
                packet.WriteInt16(-1);
                client.Send(packet, false);
            }

            using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.ChanelInfoResponse))
            {
                packet.WriteByte(244);
                packet.WriteInt16(2049);
                packet.WriteInt16(100);
                packet.WriteInt16(-1);
                packet.WriteInt16(-1);
                packet.WriteInt16(-1);
                packet.WriteInt16(-1);
                packet.WriteInt64(-1L);
                packet.WriteInt64(-1L);
                packet.WriteInt64(-1L);
                packet.WriteInt64(-1L);
                packet.WriteInt64(-1L);
                packet.WriteInt64(-1L);
                packet.WriteInt16(-1);
                client.Send(packet, false);
            }
        }
        public static void SendAuthChallengeSuccessReply(IRealmClient client)
        {
            client.AuthAccount.OnLogin(client);

            using (var packet = new RealmPacketOut(RealmServerOpCode.AuthorizeResponse))
            {
                packet.Write((Int16)AccountStatus.Success);      //status
                packet.WriteInt32(client.AuthAccount.AccountId); //unknown
                packet.WriteByte(1);                             //avalible
                client.Send(packet, addEnd: false);
            }
            using (var packet = new RealmPacketOut(RealmServerOpCode.ChanelInfoResponse)) //1013
            {
                packet.WriteByte(0xF4);                                                   // unknown
                packet.WriteInt16(2049);                                                  //unknown
                packet.WriteInt16(100);                                                   //chanel1
                packet.WriteInt16(-1);                                                    //chanel2
                packet.WriteInt16(-1);                                                    //chanel3
                packet.WriteInt16(-1);                                                    //chanel4
                packet.WriteInt16(-1);                                                    //chanel5
                packet.WriteInt64(-1);                                                    //unknown
                packet.WriteInt64(-1);                                                    //unknown
                packet.WriteInt64(-1);                                                    //unknown
                packet.WriteInt64(-1);                                                    //unknown
                packet.WriteInt64(-1);                                                    //unknown
                packet.WriteInt64(-1);                                                    //unknown
                packet.WriteInt16(-1);                                                    //unknown
                client.Send(packet, addEnd: false);
            }
            using (var packet = new RealmPacketOut(RealmServerOpCode.ChanelInfoResponse)) //1013
            {
                packet.WriteByte(0xF4);                                                   // unknown
                packet.WriteInt16(2049);                                                  //unknown
                packet.WriteInt16(100);                                                   //chanel1
                packet.WriteInt16(-1);                                                    //chanel2
                packet.WriteInt16(-1);                                                    //chanel3
                packet.WriteInt16(-1);                                                    //chanel4
                packet.WriteInt16(-1);                                                    //chanel5
                packet.WriteInt64(-1);                                                    //unknown
                packet.WriteInt64(-1);                                                    //unknown
                packet.WriteInt64(-1);                                                    //unknown
                packet.WriteInt64(-1);                                                    //unknown
                packet.WriteInt64(-1);                                                    //unknown
                packet.WriteInt64(-1);                                                    //unknown
                packet.WriteInt16(-1);                                                    //unknown
                client.Send(packet, addEnd: false);
            }
        }
Exemple #4
0
 public static void SendQuestsListResponse(IRealmClient client)
 {
     using (var packet = new RealmPacketOut(RealmServerOpCode.QuestsList))//5047
     {
         for (int i = 0; i < 12; i += 1)
         {
             packet.WriteInt32(-1); //{questId}default value : -1 Len : 4
             packet.WriteByte(0);   //value name : unk1 default value : 0Len : 1
             packet.WriteInt16(-1); //{questSlot}default value : -1 Len : 2
             packet.WriteByte(0);   //{questStage}default value : 0 Len : 1 2 - in progress 1 - completed
             packet.WriteInt16(-1); //{oneMoreQuestId}default value : -1 Len : 2
             packet.WriteInt16(0);  //{IsCompleted}default value : 2 Len : 2  0 or 1
             packet.WriteInt16(-1); //value name : unk2 default value : -1Len : 2
             packet.WriteInt32(-1); //{questItemId}default value : -1 Len : 4
             packet.WriteInt16(0);  //{questItemAmount}default value : 0 Len : 2
             packet.WriteInt32(-1); //{questItemId}default value : -1 Len : 4
             packet.WriteInt16(0);  //{questItemAmount}default value : 0 Len : 2
             packet.WriteInt32(-1); //{questItemId}default value : -1 Len : 4
             packet.WriteInt16(0);  //{questItemAmount}default value : 0 Len : 2
             packet.WriteInt32(-1); //{questItemId}default value : -1 Len : 4
             packet.WriteInt16(0);  //{questItemAmount}default value : 0 Len : 2
             packet.WriteInt32(-1); //{questItemId}default value : -1 Len : 4
             packet.WriteInt16(0);  //{questItemAmount}default value : 0 Len : 2*/
         }
         for (int i = 0; i < 1; i++)
         {
             packet.WriteByte(254);
         }
         for (int i = 0; i < 149; i++)
         {
             packet.WriteByte(255);
         }
         client.Send(packet, addEnd: false);
     }
 }
Exemple #5
0
        public static void SendGameObjectInfo(IRealmClient client, GOEntry entry)
        {
            string str = entry.Names.Localize(client);

            using (RealmPacketOut packet =
                       new RealmPacketOut(RealmServerOpCode.SMSG_GAMEOBJECT_QUERY_RESPONSE, 19 + str.Length + 96))
            {
                packet.Write(entry.Id);
                packet.Write((uint)entry.Type);
                packet.Write(entry.DisplayId);
                packet.Write(str);
                packet.Write((byte)0);
                packet.Write((byte)0);
                packet.Write((byte)0);
                packet.Write((byte)0);
                packet.Write((byte)0);
                packet.Write((byte)0);
                int index1;
                for (index1 = 0; index1 < entry.Fields.Length; ++index1)
                {
                    packet.Write(entry.Fields[index1]);
                }
                for (; index1 < 24; ++index1)
                {
                    packet.Write(0);
                }
                packet.Write(entry.Scale);
                for (int index2 = 0; index2 < 4; ++index2)
                {
                    packet.Write(0);
                }
                client.Send(packet, false);
            }
        }
Exemple #6
0
 public static void SendPetResurectedResponse(IRealmClient client, Asda2PetRecord pet, Asda2Item resurectPetItem)
 {
     using (var packet = new RealmPacketOut(RealmServerOpCode.PetResurected)) //6109
     {
         packet.WriteInt32(client.ActiveCharacter.AccId);                     //{accId}default value : 361343 Len : 4
         packet.WriteInt32(pet.Guid);                                         //{petGuid}default value : 68412 Len : 4
         packet.WriteInt32(resurectPetItem.ItemId);                           //{itemId}default value : 31981 Len : 4
         packet.WriteByte(2);                                                 //{inv}default value : 2 Len : 1
         packet.WriteInt16(resurectPetItem.Slot);                             //{slot}default value : 8 Len : 2
         packet.WriteInt16(resurectPetItem.IsDeleted ? -1 : 0);               //{minusOneIfDelete}default value : -1 Len : 2
         packet.WriteInt32(resurectPetItem.Amount);                           //{amount}default value : 0 Len : 4
         packet.WriteByte(0);                                                 //value name : stab25 default value : stab25Len : 1
         packet.WriteInt16(resurectPetItem.Amount);                           //{amount0}default value : 0 Len : 2
         packet.WriteSkip(stab28);                                            //value name : stab28 default value : stab28Len : 41
         packet.WriteByte(1);                                                 //value name : unk1 default value : 1Len : 1
         packet.WriteByte(pet.HungerPrc);                                     //{HungerPrc}default value : 58 Len : 1
         packet.WriteInt32(client.ActiveCharacter.Asda2Inventory.Weight);     //{invWeight}default value : 0 Len : 4
         packet.WriteInt16((short)pet.Stat1Type);                             //{stat1Type}default value : 2 Len : 2
         packet.WriteInt32(pet.Stat1Value);                                   //{stat1Value}default value : 31 Len : 4
         packet.WriteInt16((short)pet.Stat2Type);                             //{stat1Type}default value : 2 Len : 2
         packet.WriteInt32(pet.Stat2Value);                                   //{stat1Value}default value : 31 Len : 4
         packet.WriteInt16((short)pet.Stat2Type);                             //{stat1Type}default value : 2 Len : 2
         packet.WriteInt32(pet.Stat2Value);                                   //{stat1Value}default value : 31 Len : 4
         client.Send(packet, addEnd: true);
     }
 }
Exemple #7
0
 public static void SendCloseCharacterTradeShopToOwnerResponse(IRealmClient client,
                                                               Asda2PrivateShopClosedToOwnerResult status)
 {
     using (RealmPacketOut shopToOwnerResponse =
                Asda2PrivateShopHandler.CreateCloseCharacterTradeShopToOwnerResponse(status))
         client.Send(shopToOwnerResponse, false);
 }
Exemple #8
0
        public static void SendMailsListResponse(IRealmClient client, IEnumerable <Asda2MailMessage> mailMsgs)
        {
            var msgs = new Asda2MailMessage[10];
            var ii   = 0;

            foreach (var m in mailMsgs)
            {
                if (m.DeleteTime < DateTime.Now)
                {
                    client.ActiveCharacter.MailMessages.Remove(m.Guid);
                    m.DeleteLater();
                }
                else
                {
                    msgs[ii] = m;
                }
                ii++;
            }
            using (var packet = new RealmPacketOut(RealmServerOpCode.MailsList)) //6619
            {
                packet.WriteByte(0);                                             //{page}default value : 1 Len : 1
                for (int i = 0; i < 10; i += 1)
                {
                    var msg = msgs[i];
                    packet.WriteInt32((int)(msg == null?-1:msg.Guid));                                        //{guidRec}default value : 379808 Len : 4
                    packet.WriteByte(msg == null?0:msg.IsReaded?1:0);                                         //{taked}default value : 0 Len : 1
                    packet.WriteInt32((int)(msg == null ? 0 : (msg.DeleteTime - DateTime.Now).TotalMinutes)); //{timeTodeletemins}default value : 10061 Len : 4
                    packet.WriteFixedAsciiString(msg == null?"":msg.SenderName, 20);                          //{senderName}default value :  Len : 20
                    packet.WriteFixedAsciiString(msg == null ? "" : msg.Subject, 32);                         //{title}default value :  Len : 32
                }
                client.Send(packet, addEnd: true);
            }
        }
 public static void SendRegularTradeCompleteResponse(IRealmClient client, Asda2Item[] items)
 {
     using (var packet = new RealmPacketOut(RealmServerOpCode.RegularTradeComplete)) //5295
     {
         packet.WriteByte(5);                                                        //{status}default value : 5 Len : 1
         packet.WriteInt32(client.ActiveCharacter.Asda2Inventory.Weight);            //{invWeight}default value : 2381 Len : 4
         for (int i = 0; i < 5; i += 1)
         {
             var item = items[i];
             if (item == null)
             {
                 packet.WriteInt32(-1); //{itemId}default value : 31850 Len : 4
                 packet.WriteByte(0);   //{invNum}default value : 2 Len : 1
                 packet.WriteInt16(-1); //{slot}default value : 1 Len : 2
                 packet.WriteInt32(0);  //{amount}default value : 5 Len : 4
                 packet.WriteInt16(0);  //{weight}default value : 60 Len : 2
             }
             else
             {
                 packet.WriteInt32(item.ItemId);             //{itemId}default value : 31850 Len : 4
                 packet.WriteByte((byte)item.InventoryType); //{invNum}default value : 2 Len : 1
                 packet.WriteInt16(item.Slot);               //{slot}default value : 1 Len : 2
                 packet.WriteInt32(item.Amount);             //{amount}default value : 5 Len : 4
                 packet.WriteInt16(item.Weight);             //{weight}default value : 60 Len : 2
             }
         }
         client.Send(packet, addEnd: false);
     }
 }
Exemple #10
0
        public static void SendPlayerInfo(IRealmClient client)
        {
            using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.SMSG_LFG_PARTY_INFO))
            {
                byte num1 = 0;
                packet.Write(num1);
                uint num2 = 0;
                packet.Write(num2);
                packet.WriteByte(false);
                packet.WriteUInt(0);
                packet.WriteUInt(0);
                packet.WriteUInt(0);
                packet.WriteUInt(0);
                int val = 0;
                packet.WriteByte(val);
                for (byte index = 0; (int)index < val; ++index)
                {
                    packet.WriteUInt(0);
                    packet.WriteUInt(0);
                    packet.WriteUInt(0);
                }

                uint num3 = 0;
                packet.Write(num3);
                for (uint index = 0; index < num3; ++index)
                {
                    packet.Write(num2);
                    packet.Write(6U);
                }

                client.Send(packet, false);
            }
        }
Exemple #11
0
 public static void SendRegisterItemToAukCancelWindowResponse(IRealmClient client, List <Asda2ItemTradeRef> items = null)
 {
     using (var packet = new RealmPacketOut(RealmServerOpCode.RegisterItemToAukCancelWindow))//9902
     {
         if (items != null)
         {
             foreach (var item in items)
             {
                 packet.WriteByte(0);                                             //{status}default value : 0 Len : 1
                 packet.WriteInt32(item.Item.ItemId);                             //{itemId}default value : 31855 Len : 4
                 packet.WriteByte((byte)item.Item.InventoryType);                 //{invNum}default value : 2 Len : 1
                 packet.WriteInt16(item.Item.Slot);                               //{cell}default value : 5 Len : 2
                 packet.WriteSkip(stab15);                                        //value name : stab15 default value : stab15Len : 12
                 packet.WriteInt32(item.Amount);                                  //{registeredAmount}default value : 250 Len : 4
                 packet.WriteInt32(item.Item.Amount);                             //{beforeAmount}default value : 250 Len : 4
                 packet.WriteInt16(item.Item.Weight);                             //{weight}default value : 0 Len : 2
                 packet.WriteSkip(stab37);                                        //value name : stab37 default value : stab37Len : 21
                 packet.WriteInt32(client.ActiveCharacter.Asda2Inventory.Weight); //{invWeight}default value : 315 Len : 4
                 packet.WriteInt32(client.ActiveCharacter.Money);                 //{money}default value : 8503216 Len : 4
                 packet.WriteInt64(-1);                                           //value name : unk8 default value : -1Len : 8
             }
         }
         client.Send(packet);
     }
 }
Exemple #12
0
        public static void SendPetRemovedResponse(IRealmClient client, int petGuid)
        {
            AchievementProgressRecord progressRecord =
                client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(168U);

            switch (++progressRecord.Counter)
            {
            case 5:
                client.ActiveCharacter.Map.CallDelayed(500,
                                                       (Action)(() => client.ActiveCharacter.DiscoverTitle(Asda2TitleId.Abandoned363)));
                break;

            case 10:
                client.ActiveCharacter.Map.CallDelayed(500,
                                                       (Action)(() => client.ActiveCharacter.GetTitle(Asda2TitleId.Abandoned363)));
                break;
            }

            progressRecord.SaveAndFlush();
            using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.PetRemoved))
            {
                packet.WriteInt32(client.ActiveCharacter.AccId);
                packet.WriteInt32(petGuid);
                packet.WriteByte(1);
                client.Send(packet, true);
            }
        }
Exemple #13
0
        public static void SendAuthSuccessful(IRealmClient client)
        {
            using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_AUTH_RESPONSE, 11))
            {
                packet.WriteByte((byte)LoginErrorCode.AUTH_OK);

                //BillingTimeRemaining
                packet.Write(0);

                packet.Write((byte)0x02);                // BillingPlan Flags
                // 0x2, 0x4, 0x10 mutually exclusive. Order of Precedence: 0x2 > 0x4 > 0x10
                // 0x2 -> No Time left?
                // 0x20
                // 0x8

                // BillingTimeRested
                packet.Write(0);
                packet.Write((byte)client.Account.ClientId);

                client.Send(packet, addEnd: false);
            }

            ClientAddonHandler.SendAddOnInfoPacket(client);

            RealmServer.Instance.OnClientAccepted(null, null);
        }
Exemple #14
0
 public static void SendWarTeamListEndedResponse(IRealmClient client)
 {
     using (var packet = new RealmPacketOut(RealmServerOpCode.WarTeamListEnded))//6716
     {
         client.Send(packet);
     }
 }
Exemple #15
0
        /// <summary>
        /// Sends the packet to show the battleground window
        /// </summary>
        /// <param name="client"></param>
        /// <param name="speaker"></param>
        /// <param name="character"></param>
        /// <returns></returns>
        public bool SendBattlegroundWindow(IRealmClient client, NPC speaker, Character character)
        {
            using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_BATTLEFIELD_LIST))
            {
                packet.WriteULong(speaker != null ? speaker.EntityId.Full : 0);
                packet.WriteUInt((uint)m_bgqueue.Template.BgID);
                packet.WriteByte(m_battlegroupId); //Battle group
                // TODO: Add sync'ing?
                //m_syncLock.EnterReadLock();
                try
                {
                    packet.WriteUInt(m_battlegrounds.Count); //Count

                    foreach (var bg in m_battlegrounds.Values)
                    {
                        packet.WriteUInt(bg.InstanceId);
                    }
                }
                finally
                {
                    //m_syncLock.ExitReadLock();
                }
                client.Send(packet);
                return(true);
            }
        }
Exemple #16
0
 public static void SendUpdateWarManagerScreenDataResponse(IRealmClient client, Asda2Battleground btlgrnd)
 {
     using (var packet = new RealmPacketOut(RealmServerOpCode.UpdateWarManagerScreenData)) //6701
     {
         packet.WriteByte(1);                                                              //{status}default value : 1 Len : 1
         packet.WriteByte(0);                                                              //value name : unk6 default value : 0Len : 1
         packet.WriteInt16(btlgrnd.StartTime.Hour);                                        //{startTimeHours}default value : 8 Len : 2
         packet.WriteInt16(btlgrnd.StartTime.Minute);                                      //{startTimeMins}default value : 0 Len : 2
         packet.WriteInt16(btlgrnd.EndTime.Hour);                                          //{endTimeHours}default value : 8 Len : 2
         packet.WriteInt16(btlgrnd.EndTime.Minute);                                        //{endTimeMins}default value : 25 Len : 2
         packet.WriteInt16(btlgrnd.AmountOfBattleGroundsInList);                           //{battlesInListCount}default value : 1 Len : 2
         packet.WriteInt16(btlgrnd.LightTeam.Count);                                       //{forLitePeople}default value : 1 Len : 2
         packet.WriteInt16(btlgrnd.DarkTeam.Count);                                        //{forDarkPeople}default value : 0 Len : 2
         packet.WriteByte(0);                                                              //{mustBe0}default value : 0 Len : 1
         packet.WriteInt32(0);                                                             //{canBe0}default value : 586427422 Len : 4
         packet.WriteInt16(btlgrnd.LightWins);                                             //{winWarsLight}default value : 639 Len : 2
         packet.WriteInt16(btlgrnd.DarkWins);                                              //{winWarsDark}default value : 548 Len : 2
         packet.WriteInt16(btlgrnd.LightLooses);                                           //{lightLoses}default value : 548 Len : 2
         packet.WriteInt16(btlgrnd.DarkLooses);                                            //{darkLoses}default value : 639 Len : 2
         packet.WriteInt16(btlgrnd.LightWins + btlgrnd.LightLooses);                       //{totalWars}default value : 1187 Len : 2
         packet.WriteByte(0);                                                              //{dailyWarsMinusOne}default value : 0 Len : 1
         packet.WriteInt16(btlgrnd.MinEntryLevel);                                         //{minEnterLevel}default value : 10 Len : 2
         packet.WriteInt16(btlgrnd.MaxEntryLevel);                                         //{maxEnterLevel}default value : 29 Len : 2
         packet.WriteByte((byte)btlgrnd.WarType);
         client.Send(packet, addEnd: true);
     }
 }
 public static void SendUpdateWarManagerScreenDataResponse(IRealmClient client, Asda2Battleground btlgrnd)
 {
     using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.UpdateWarManagerScreenData))
     {
         packet.WriteByte(1);
         packet.WriteByte(0);
         packet.WriteInt16(btlgrnd.StartTime.Hour);
         packet.WriteInt16(btlgrnd.StartTime.Minute);
         packet.WriteInt16(btlgrnd.EndTime.Hour);
         packet.WriteInt16(btlgrnd.EndTime.Minute);
         packet.WriteInt16(btlgrnd.AmountOfBattleGroundsInList);
         packet.WriteInt16(btlgrnd.LightTeam.Count);
         packet.WriteInt16(btlgrnd.DarkTeam.Count);
         packet.WriteByte(0);
         packet.WriteInt32(0);
         packet.WriteInt16(btlgrnd.LightWins);
         packet.WriteInt16(btlgrnd.DarkWins);
         packet.WriteInt16(btlgrnd.LightLooses);
         packet.WriteInt16(btlgrnd.DarkLooses);
         packet.WriteInt16((int)btlgrnd.LightWins + (int)btlgrnd.LightLooses);
         packet.WriteByte(0);
         packet.WriteInt16(btlgrnd.MinEntryLevel);
         packet.WriteInt16(btlgrnd.MaxEntryLevel);
         packet.WriteByte((byte)btlgrnd.WarType);
         client.Send(packet, true);
     }
 }
        public static void SendRegularTradeCompleteResponse(IRealmClient client, Asda2Item[] items)
        {
            using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.RegularTradeComplete))
            {
                packet.WriteByte(5);
                packet.WriteInt32(client.ActiveCharacter.Asda2Inventory.Weight);
                for (int index = 0; index < 5; ++index)
                {
                    Asda2Item asda2Item = items[index];
                    if (asda2Item == null)
                    {
                        packet.WriteInt32(-1);
                        packet.WriteByte(0);
                        packet.WriteInt16(-1);
                        packet.WriteInt32(0);
                        packet.WriteInt16(0);
                    }
                    else
                    {
                        packet.WriteInt32(asda2Item.ItemId);
                        packet.WriteByte((byte)asda2Item.InventoryType);
                        packet.WriteInt16(asda2Item.Slot);
                        packet.WriteInt32(asda2Item.Amount);
                        packet.WriteInt16(asda2Item.Weight);
                    }
                }

                client.Send(packet, false);
            }
        }
Exemple #19
0
 public static void SendStartMoveCommonToOneClienResponset(Character movingChr, IRealmClient recievingClient,
                                                           bool instant)
 {
     using (RealmPacketOut startComonMovePacket =
                Asda2MovmentHandler.CreateStartComonMovePacket(movingChr, instant))
         recievingClient.Send(startComonMovePacket, true);
 }
Exemple #20
0
        public static void SendPlayerInfo(IRealmClient client)
        {
            // SMSG_LFG_PLAYER_INFO
            using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_LFG_PARTY_INFO))
            {
                byte dungeonsCount = 0;
                packet.Write(dungeonsCount);
                uint packedDungeonId = 0;
                packet.Write(packedDungeonId);
                //something to do with quests! :\
                packet.WriteByte(false);             // is quest complete?
                packet.WriteUInt(0);                 //quest reward/required money
                packet.WriteUInt(0);                 //quest reward xp
                packet.WriteUInt(0);                 //lfg dungeon reward cash
                packet.WriteUInt(0);                 //lfg dungeon reward xp
                var questItemsCount = 0;
                packet.WriteByte(questItemsCount);
                for (byte i = 0; i < questItemsCount; i++)
                {
                    packet.WriteUInt(0);                     //item id
                    packet.WriteUInt(0);                     //display id
                    packet.WriteUInt(0);                     //count of items
                }

                uint lockCount = 0;
                packet.Write(lockCount);
                for (uint i = 0; i < lockCount; i++)
                {
                    packet.Write(packedDungeonId);
                    packet.Write((uint)LFGLockStatusType.RaidLocked);
                }

                client.Send(packet, addEnd: false);
            }
        }
Exemple #21
0
 public static void SendTaxiPathActivated(IRealmClient client)
 {
     using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_NEW_TAXI_PATH, 0))
     {
         client.Send(packet);
     }
 }
Exemple #22
0
 public static void SendEnterChatRoomResultResponse(IRealmClient client, EnterChatRoomStatus status,
                                                    Asda2Chatroom room)
 {
     using (var packet = new RealmPacketOut(RealmServerOpCode.EnterChatRoomResult)) //6243
     {
         packet.WriteByte((byte)status);                                            //{status}default value : 1 Len : 1
         packet.WriteByte(room == null ? 0 : room.IsPrivate ? 1 : 2);
         //{privateOnePublicTwo}default value : 0 Len : 1
         packet.WriteByte(room == null ? 0 : room.MaxMembersCount); //{maxMembers}default value : 15 Len : 1
         packet.WriteByte(room == null ? 0 : room.Members.Count);   //{currentMembers}default value : 2 Len : 1
         packet.WriteFixedAsciiString(room == null ? "" : room.Name, 28);
         //{roomName}default value :  Len : 28
         packet.WriteByte(0);  //value name : unk10 default value : 0Len : 1
         packet.WriteByte(99); //value name : unk11 default value : 99Len : 1
         var mombers = room == null ? new Character[0] : room.Members.Values.ToArray();
         for (int i = 0; i < 20; i += 1)
         {
             var chr = mombers.Length <= i ? null : mombers[i];
             packet.WriteByte(chr == null ? 0 : room != null && (chr == room.Owner) ? 1 : 0);
             //{isLeader}default value : 1 Len : 1
             packet.WriteInt32(chr == null ? -1 : (int)chr.AccId); //{accId}default value : 361343 Len : 4
             packet.WriteInt16(chr == null ? -1 : chr.SessionId);  //{sessId}default value : 28 Len : 2
         }
         client.Send(packet, addEnd: true);
     }
 }
Exemple #23
0
 public static void SendMoveToPacketToSingleClient <T>(IRealmClient client, Unit movingUnit, uint moveTime,
                                                       MonsterMoveFlags moveFlags, IEnumerable <T> waypoints) where T : IPathVertex
 {
     using (RealmPacketOut packet =
                MovementHandler.ConstructMultiWaypointMovePacket <T>(movingUnit, moveTime, moveFlags, waypoints))
         client.Send(packet, false);
 }
Exemple #24
0
        public static void SendFaceOrHairChangedResponse(IRealmClient client, bool isHair, bool success = false,
                                                         Asda2Item usedItem = null)
        {
            using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.FaceOrHairChanged))
            {
                packet.WriteByte(success ? 1 : 0);
                packet.WriteByte(isHair ? 1 : 2);
                packet.WriteByte(client.ActiveCharacter.HairStyle);
                packet.WriteByte(client.ActiveCharacter.HairColor);
                packet.WriteByte(client.ActiveCharacter.Record.Face);
                packet.WriteInt32(client.ActiveCharacter.Asda2Inventory.Weight);
                packet.WriteInt32(client.ActiveCharacter.Money);
                Asda2InventoryHandler.WriteItemInfoToPacket(packet, usedItem, false);
                client.Send(packet, true);
                if (!success)
                {
                    return;
                }
                AchievementProgressRecord progressRecord =
                    client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(9U);
                switch (++progressRecord.Counter)
                {
                case 50:
                    client.ActiveCharacter.DiscoverTitle(Asda2TitleId.Beautiful47);
                    break;

                case 100:
                    client.ActiveCharacter.GetTitle(Asda2TitleId.Beautiful47);
                    break;
                }

                progressRecord.SaveAndFlush();
            }
        }
 public static void SendFishingBooksInfoResponse(IRealmClient client, Asda2FishingBook book)
 {
     using (var packet = new RealmPacketOut(RealmServerOpCode.FishingBooksInfo)) //6174
     {
         packet.WriteByte(book.Num);                                             //{fishBookNum}default value : 0 Len : 1
         packet.WriteInt32(0);                                                   //value name : unk4 default value : 0Len : 4
         for (int i = 0; i < 30; i += 1)
         {
             packet.WriteInt32(book.FishIds[i]); //{fishId}default value : 0 Len : 4
         }
         for (int i = 0; i < 30; i += 1)
         {
             packet.WriteInt16(book.Amounts[i]); //{amounts}default value : 0 Len : 2
         }
         for (int i = 0; i < 30; i += 1)
         {
             packet.WriteInt16(book.MaxLength[i]); //{maxLength}default value : 0 Len : 2
         }
         for (int i = 0; i < 30; i += 1)
         {
             packet.WriteInt16(book.MinLengths[i]); //{minLength}default value : 0 Len : 2
         }
         client.Send(packet, addEnd: true);
     }
 }
Exemple #26
0
        public static void SendRegisterItemToAukCancelWindowResponse(IRealmClient client,
                                                                     List <Asda2ItemTradeRef> items = null)
        {
            using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.RegisterItemToAukCancelWindow))
            {
                if (items != null)
                {
                    foreach (Asda2ItemTradeRef asda2ItemTradeRef in items)
                    {
                        packet.WriteByte(0);
                        packet.WriteInt32(asda2ItemTradeRef.Item.ItemId);
                        packet.WriteByte((byte)asda2ItemTradeRef.Item.InventoryType);
                        packet.WriteInt16(asda2ItemTradeRef.Item.Slot);
                        packet.WriteSkip(Asda2AuctionHandler.stab15);
                        packet.WriteInt32(asda2ItemTradeRef.Amount);
                        packet.WriteInt32(asda2ItemTradeRef.Item.Amount);
                        packet.WriteInt16(asda2ItemTradeRef.Item.Weight);
                        packet.WriteSkip(Asda2AuctionHandler.stab37);
                        packet.WriteInt32(client.ActiveCharacter.Asda2Inventory.Weight);
                        packet.WriteInt32(client.ActiveCharacter.Money);
                        packet.WriteInt64(-1L);
                    }
                }

                client.Send(packet, false);
            }
        }
 public static void SendFishingBookListEndedResponse(IRealmClient client)
 {
     using (var packet = new RealmPacketOut(RealmServerOpCode.FishingBookListEnded))//6175
     {
         client.Send(packet, addEnd: true);
     }
 }
        /// <summary>
        /// Send the unix timestamps of each AccountDataType to the client.
        /// </summary>
        /// <param name="client"></param>
        public static void SendAccountDataTimes(IRealmClient client, CacheMask mask)
        {
            using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_ACCOUNT_DATA_TIMES))
            {
                var now = Utility.GetEpochTimeFromDT(DateTime.Now);
                packet.Write(now);                      // current server time
                packet.Write((byte)1);                  // unknown
                packet.Write((uint)mask);

                if (client.Account != null &&
                    client.Account.AccountData != null &&
                    client.Account.AccountData.TimeStamps != null)
                {
                    for (var i = 0; i < 8; i++)
                    {
                        if ((((uint)mask) & (1 << i)) != 0)
                        {
                            packet.Write(client.Account.AccountData.TimeStamps[i]);
                        }
                    }
                }
                else
                {
                    LogManager.GetCurrentClassLogger().Debug("Client was not properly logged in when sending ACCOUNT_DATA_TIMES: " + client);
                }

                client.Send(packet);
            }
        }
 public static void SendPreResurectResponse(IRealmClient client)
 {
     using (var packet = new RealmPacketOut(RealmServerOpCode.PreResurect))//5306
     {
         client.Send(packet);
     }
 }
 public static void SendAllSkillsResetedResponse(IRealmClient client)
 {
     using (var packet = new RealmPacketOut(RealmServerOpCode.AllSkillsReseted))//6057
     {
         client.Send(packet);
     }
 }
Exemple #31
0
		public static void HandleSystemStatusPacket(IRealmClient client, RealmPacketIn packet)
		{
			using (var repPacket = new RealmPacketOut(RealmServerOpCode.SMSG_GMTICKET_SYSTEMSTATUS, 4))
			{
				// TODO: Add indicator to Account for whether person may use ticket system
				repPacket.Write(1);
				client.Send(repPacket);
			}
		}
Exemple #32
0
        public static void SendQuestConfirmAccept(IRealmClient client)
        {
            using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_QUEST_CONFIRM_ACCEPT))
            {
                packet.Write(0);

                client.Send(packet);
            }
        }
Exemple #33
0
		/// <summary>
		/// Send a "time query" reply to the client.
		/// </summary>
		/// <param name="client">the client to send to</param>
		public static void SendQueryTimeReply(IRealmClient client)
		{
			using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_QUERY_TIME_RESPONSE, 4))
			{
				packet.Write(Utility.GetEpochTime());
				//packet.Write(Utility.GetSystemTime());

				client.Send(packet);
			}
		}
		public static void SendMirrorImageData(IRealmClient client, NPC mirrorimage)
		{
			var owner = mirrorimage.PlayerOwner;

			using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_MIRRORIMAGE_DATA, 68))
			{
				packet.Write(mirrorimage.EntityId);
				packet.Write(owner.DisplayId);
				if (owner != null) //player
				{
					packet.Write((byte)owner.Race);
					packet.Write((byte)owner.Gender);
					packet.Write((byte)owner.Class);
					packet.Write(owner.Skin);
					packet.Write(owner.Facial);
					packet.Write(owner.HairStyle);
					packet.Write(owner.HairColor);
					packet.Write(owner.FacialHair);
					packet.Write(owner.GuildId);

					foreach(VisibleEquipmentSlot slot in Enum.GetValues(typeof(VisibleEquipmentSlot)))
					{
						var item = owner.Inventory.Equipment[(EquipmentSlot)slot];
						if (slot == VisibleEquipmentSlot.Head && ((owner.PlayerFlags & PlayerFlags.HideHelm) != 0))
						{
							packet.Write(0);
						}
						else if (slot == VisibleEquipmentSlot.Back && ((owner.PlayerFlags & PlayerFlags.HideCloak) != 0))
						{
							packet.Write(0);
						}
						else if (item != null)
						{
							packet.Write(item.Template.DisplayId);
						}
						else
							packet.Write(0);
					}
					
				}
				else //creature
				{
					for (int i = 0; i < 14; i++)
					{
						packet.Write(0);
					}

				}
				client.Send(packet);
			}
		}
Exemple #35
0
		/// <summary>
		/// Sends packet (might be compressed)
		/// </summary>
		/// <returns></returns>
		public void SendTo(IRealmClient client)
		{
			if (TotalLength <= WCellDef.MAX_UNCOMPRESSED_UPDATE_PACKET)
			{
				client.Send(GetFinalizedPacket());
			}
			else
			{
				var segment = ((SegmentStream)BaseStream).Segment;
				//var input = ((MemoryStream)BaseStream).ToArray();
				var inputOffset = HeaderSize;
				//Compression.CompressZLib(packetBuffer, outputBuffer, RealmServer.Instance.Configuration.CompressionLevel, out deflatedLength);

				var length = ContentLength;
				if (length > 0x7FFF)
				{
					log.Warn("Sent UpdatePacket with Length {0} to {1} in {2}", length, client,
						client.ActiveCharacter.Zone as IWorldSpace ?? client.ActiveCharacter.Region);
				}

				var maxOutputLength = length + FullUpdatePacketHeaderSize;

				var outSegment = BufferManager.GetSegment(maxOutputLength);

				var deflater = new Deflater(RealmServerConfiguration.CompressionLevel);
				deflater.SetInput(segment.Buffer.Array, segment.Offset + inputOffset, length);
				//deflater.SetInput(input, 0 + inputOffset, length);
				deflater.Finish();
				int deflatedLength = deflater.Deflate(outSegment.Buffer.Array,
					outSegment.Offset + FullUpdatePacketHeaderSize, length);

				var totalLength = deflatedLength + FullUpdatePacketHeaderSize;

				if (totalLength > MaxPacketSize)
				{
					//TODO: Split up packet if packet size exceeds max length
					throw new Exception("Compressed Update packet exceeded max length: " + totalLength);
				}
				SendPacket(client, outSegment, totalLength, length);

				outSegment.DecrementUsage();
			}
		}
Exemple #36
0
        public static void HandleAuctionListPendingSales(IRealmClient client, RealmPacketIn packet)
        {
            var chr = client.ActiveCharacter;
            var auctioneerId = packet.ReadEntityId();
            var auctioneer = chr.Map.GetObject(auctioneerId) as NPC;

            var count = 1u;
            using (var packetOut = new RealmPacketOut(RealmServerOpCode.SMSG_AUCTION_LIST_PENDING_SALES, 14 * (int)count))
            {
                packetOut.Write(count);
                for (var i = 0; i < count; ++i)
                {
                    packetOut.Write("");
                    packetOut.Write("");
                    packetOut.WriteUInt(0);
                    packetOut.WriteUInt(0);
                    packetOut.WriteFloat(0f);
                    client.Send(packetOut);
                }
            }
        }
Exemple #37
0
		public static void SendAddOnInfoPacket(IRealmClient client)
		{
			using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_ADDON_INFO))
			{
				int unk;
				using (var binReader = new BinaryReader(new MemoryStream(client.Addons)))
				{
					ClientAddOn addon;
					var addonCount = binReader.ReadInt32();
					for (var i = 0; i < addonCount; i++)
					{
						addon = ReadAddOn(binReader);
						WriteAddOnInfo(packet, addon);
					}

					unk = binReader.ReadInt32();
				}

				Console.WriteLine("CMSG ADDON Unk: " + unk);

				const int count = 0;
				packet.Write(count);

				for (int i = 0; i < count; i++)
				{
					packet.Write(0);
					packet.Write(new byte[16]);
					packet.Write(new byte[16]);
					packet.Write(0);
					packet.Write(0);
				}

				client.Send(packet);
			}

			client.Addons = null;
		}
Exemple #38
0
 public static void SendWorldStateUITimerUpdate(IRealmClient client)
 {
     using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_WORLD_STATE_UI_TIMER_UPDATE, 0))
     {
         packet.WriteDateTime(DateTime.Now); // unk?
         client.Send(packet);
     }
 }
Exemple #39
0
        /// <summary>
        /// Sends a character delete reply to the client.
        /// </summary>
        /// <param name="client">the client to send to</param>
        /// <param name="error">the rror code</param>
        public static void SendCharDeleteReply(IRealmClient client, LoginErrorCode error)
        {
            using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_CHAR_DELETE, 1))
            {
                packet.WriteByte((byte)error);

                client.Send(packet);
            }

            SendCharEnum(client);
        }
Exemple #40
0
        /// <summary>
        /// Sends the character list to the client.
        /// </summary>
        /// <param name="client">the client to send to</param>
        /// <remarks>They probably meant 'enumeration,' but 'list' would have made so much more sense. :)</remarks>
        public static void SendCharEnum(IRealmClient client)
        {
            CharacterRecord curRecord = null;
            try
            {
                using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_CHAR_ENUM))
                {
                    var chrs = client.Account.Characters;

                    packet.WriteByte(chrs.Count);

                    foreach (var record in chrs)
                    {
                        curRecord = record;

                        packet.Write(EntityId.GetPlayerId(record.EntityLowId)); // 8
                        packet.WriteCString(record.Name); // 9 + namelength
                        packet.Write((byte)record.Race); // 10 + namelength
                        packet.Write((byte)record.Class); // 11 + namelength
                        packet.Write((byte)record.Gender); // 12 + namelength
                        packet.Write(record.Skin); // 13 + namelength
                        packet.Write(record.Face); // 14 + namelength
                        packet.Write(record.HairStyle); // 15 + namelength
                        packet.Write(record.HairColor); // 16 + namelength
                        packet.Write(record.FacialHair); // 17 + namelength
                        packet.Write((byte)record.Level); // 18 + namelength
                        packet.Write((int)record.Zone); // 22 + namelength
                        packet.Write((int)record.MapId); // 26 + namelength

                        packet.Write(record.PositionX); // 30 + namelength
                        packet.Write(record.PositionY); // 34 + namelength
                        packet.Write(record.PositionZ); // 38 + namelength

                        packet.WriteUInt(record.GuildId); // guild id							// 42 + namelength
                        packet.Write((int)record.CharacterFlags); // 46 + namelength

                        packet.Write(0); // TOOD: Customization flags

                        packet.Write((byte)1); // NEW 3.2.0 - first login y/n - set to 1 for now

                        // Deprecated: Rest State
                        // var restState = record.RestXp > 0 ? RestState.Resting : RestState.Normal;
                        // packet.WriteByte((byte)restState); // 47 + namelength

                        // pet info (51 - 63)
                        var petEntry = record.PetEntry;
                        if (petEntry != null)
                        {
                            packet.Write(petEntry.DisplayIds[0]);
                            packet.Write(record.Level);				// liars!
                            packet.Write((int)petEntry.FamilyId);
                        }
                        else
                        {
                            packet.Write(0); // 51 + namelength
                            packet.Write(0); // 55 + namelength
                            packet.Write(0); // 59 + namelength
                        }

                        var itemOffset = packet.Position;
                        //packet.TotalLength += CharEnumItemCount * CharEnumItemBytes; // 239 + namelength
                        packet.Zero(CharEnumItemCount * CharEnumItemBytes);
                        packet.Position = itemOffset;

                        if (record.JustCreated)
                        {
                            var archetype = ArchetypeMgr.GetArchetype(record.Race, record.Class);
                            if (archetype != null)
                            {
                                var items = archetype.GetInitialItems(record.Gender);
                                foreach (var item in items)
                                {
                                    var template = item.Template;
                                    if (template.EquipmentSlots != null)
                                    {
                                        packet.Position = itemOffset + ((int)template.EquipmentSlots[0] * CharEnumItemBytes);

                                        packet.Write(template.DisplayId);
                                        packet.Write((byte)template.InventorySlotType);
                                        packet.Write(0);
                                    }
                                }
                            }
                            else
                            {
                                log.Warn("Invalid Race/Class combination " +
                                         "({0} {1}) in CharacterRecord {2}.",
                                         record.Race, record.Class, record);
                            }
                        }
                        else
                        {
                            foreach (var item in record.GetOrLoadItems())
                            {
                                if (!item.IsOwned)
                                {
                                    continue;
                                }

                                var template = item.Template;
                                if (item.ContainerSlot == BaseInventory.INVALID_SLOT && item.Slot <= (int)EquipmentSlot.Bag4)
                                {
                                    packet.Position = itemOffset + (item.Slot * CharEnumItemBytes);
                                    if (template != null)
                                    {
                                        var enchant = item.GetEnchant(EnchantSlot.Permanent);

                                        packet.Write(template.DisplayId);
                                        packet.Write((byte)template.InventorySlotType);
                                        packet.Write(enchant != null ? enchant.Visual : 0);
                                    }
                                    else
                                    {
                                        packet.Write(0);
                                        packet.Write((byte)0);
                                        packet.Write(0);
                                    }
                                }
                            }
                        }

                        packet.Position = itemOffset + (CharEnumItemCount * CharEnumItemBytes);
                    }

                    client.Send(packet);
                }
            }
            catch (Exception e)
            {
                if (curRecord == null)
                {
                    throw e;
                }

                LogUtil.ErrorException(e,
                                       "Could not create Char-Enum " +
                                       "for Character \"{0}\" (Race: {1}, Class: {2}, Level: {3}, Map: {4}{5}).",
                                       curRecord, curRecord.Race, curRecord.Class, curRecord.Level, curRecord.MapId,
                                       curRecord.IsNew ? ", [New]" : "");
            }
        }
Exemple #41
0
        /// <summary>
        /// Sends a "tick count" packet to the client.
        /// </summary>
        /// <param name="client">the client to send to</param>
        public static void SendTickQuery(IRealmClient client)
        {
            using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_TIME_SYNC_REQ, 4))
            {
                packet.WriteUInt(client.TickCount);

                client.Send(packet);
            }
        }
Exemple #42
0
 /// <summary>
 /// Notifies the Client that there is new mail
 /// </summary>
 public static void SendNotify(IRealmClient client)
 {
     using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_RECEIVED_MAIL, 4))
     {
         packet.Write(0);
         client.Send(packet);
     }
 }
Exemple #43
0
        public static void SendQuestPOIResponse(IRealmClient client, uint count, IEnumerable<uint> questIds)
        {
            using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_QUEST_POI_QUERY_RESPONSE))
            {
                packet.Write(count);
                foreach (var questId in questIds)
                {
                    List<QuestPOI> poiList;
                    QuestMgr.POIs.TryGetValue(questId, out poiList);
                    if (poiList != null)
                    {
                        packet.Write(questId);                  // quest ID
                        packet.Write((uint)poiList.Count);      // POI count

                        foreach (var poi in poiList)
                        {
                            packet.Write(poi.PoiId);            // POI index
                            packet.Write(poi.ObjectiveIndex);   // objective index
                            packet.Write((uint)poi.MapID);     // mapid
                            packet.Write((uint)poi.ZoneId);    // world map area id
                            packet.Write(poi.FloorId);          // floor id
                            packet.Write(poi.Unk3);             // unknown
                            packet.Write(poi.Unk4);             // unknown
                            packet.Write((uint)poi.Points.Count); // POI points count

                            foreach (var questPOIPoints in poi.Points)
                            {
                                packet.Write(questPOIPoints.X); // POI point x
                                packet.Write(questPOIPoints.Y); // POI point y
                            }
                        }
                    }
                    else
                    {
                        packet.Write(questId); // quest ID
                        packet.Write(0u); // POI count
                    }
                }

                client.Send(packet);
            }
        }
Exemple #44
0
 public static void SendQuestForceRemoved(IRealmClient client, QuestTemplate quest)
 {
     using (var pkt = new RealmPacketOut(RealmServerOpCode.SMSG_QUEST_FORCE_REMOVE, 4))
     {
         pkt.Write((uint)quest.Id);
         client.Send(pkt);
     }
 }
Exemple #45
0
        public static void SendRessurectFailed(IRealmClient client, int error)
        {
            using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_RESURRECT_FAILED, 4))
            {
                packet.Write(error);

                client.Send(packet);
            }
        }
Exemple #46
0
        public static void SendCorpseMapQueryResponse(IRealmClient client)
        {
            using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_CORPSE_MAP_POSITION_QUERY_RESPONSE, 16))
            {
                for (var i = 0; i < 4; i++)
                    packet.WriteFloat(0.0f); // unk

                client.Send(packet);
            }
        }
Exemple #47
0
        /// <summary>
        /// Sends the packet to show the battleground window
        /// </summary>
        /// <param name="client"></param>
        /// <param name="speaker"></param>
        /// <param name="character"></param>
        /// <returns></returns>
        public bool SendBattlegroundWindow(IRealmClient client, NPC speaker, Character character)
        {
            using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_BATTLEFIELD_LIST))
            {
                packet.WriteULong(speaker != null ? speaker.EntityId.Full : 0);
                packet.WriteUInt((uint)m_bgqueue.Template.BgID);
                packet.WriteByte(m_battlegroupId); //Battle group
				// TODO: Add sync'ing?
                //m_syncLock.EnterReadLock();
                try
                {
                    packet.WriteUInt(m_battlegrounds.Count); //Count

                    foreach (var bg in m_battlegrounds.Values)
                    {
                        packet.WriteUInt(bg.InstanceId);
                    }
                }
                finally
                {
                    //m_syncLock.ExitReadLock();
                }
                client.Send(packet);
                return true;
            }
        }
Exemple #48
0
 public static void SendDeclinedNamesResult(IRealmClient client, EntityId chr, bool failed)
 {
     using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_SET_PLAYER_DECLINED_NAMES_RESULT, 9))
     {
         packet.Write(failed ? 1 : 0);
         packet.Write(chr);
         client.Send(packet);
     }
 }
Exemple #49
0
		/// <summary>
		/// Send packet generated by the server to initialize authentification
		/// </summary>
		/// <param name="client">the client to send to</param>
		public static void SendAuthChallenge(IRealmClient client)
		{
			using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_AUTH_CHALLENGE))
			{
				packet.Write(1); // 1...31
				packet.Write(RealmServer.Instance.AuthSeed);

				// new 3.2.2 random data
				packet.WriteUInt(0xF3539DA3);
				packet.WriteUInt(0x6E8547B9);
				packet.WriteUInt(0x9A6AA2F8);
				packet.WriteUInt(0xA4F170F4);
				packet.WriteUInt(0xF3539DA3);
				packet.WriteUInt(0x6E8547B9);
				packet.WriteUInt(0x9A6AA2F8);
				packet.WriteUInt(0xA4F170F4);

				client.Send(packet);
			}
		}
Exemple #50
0
		/// <summary>
		/// Sends the number of currently queued clients.
		/// </summary>
		/// <param name="client">the client to send to</param>
		public static void SendAuthQueueStatus(IRealmClient client)
		{
			using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_AUTH_RESPONSE))
			{
				packet.WriteByte((byte)LoginErrorCode.AUTH_WAIT_QUEUE);
				packet.Write(AuthQueue.QueuedClients + 1);

				client.Send(packet);
			}
		}
Exemple #51
0
		public static void SendAuthSuccessful(IRealmClient client)
		{
			using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_AUTH_RESPONSE, 11))
			{
				packet.WriteByte((byte)LoginErrorCode.AUTH_OK);

				//BillingTimeRemaining
				packet.Write(0);

				packet.Write((byte)0x02);// BillingPlan Flags
				// 0x2, 0x4, 0x10 mutually exclusive. Order of Precedence: 0x2 > 0x4 > 0x10
				// 0x2 -> No Time left?
				// 0x20
				// 0x8

				// BillingTimeRested
				packet.Write(0);
				packet.Write((byte)client.Account.ClientId);

				client.Send(packet);
			}

			ClientAddonHandler.SendAddOnInfoPacket(client);

			RealmServer.Instance.OnClientAccepted(null, null);
		}
Exemple #52
0
 /// <summary>
 /// Sends a "logout cancel" reply to the client.
 /// </summary>
 /// <param name="client">the client to send to</param>
 public static void SendLogoutCancelReply(IRealmClient client)
 {
     using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_LOGOUT_CANCEL_ACK, 0))
     {
         client.Send(packet);
     }
 }
Exemple #53
0
        public static void SendItemQueryResponse(IRealmClient client, ItemTemplate item)
        {
            var locale = client.Info.Locale;
            using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_ITEM_QUERY_SINGLE_RESPONSE, 630))
            {
                packet.Write(item.Id);
                packet.Write((uint)item.Class);
                packet.Write((uint)item.SubClass);
                packet.Write(item.Unk0); // unknown

                packet.WriteCString(item.Names.Localize(locale));
                packet.Write((byte)0);// name2
                packet.Write((byte)0);// name3
                packet.Write((byte)0);// name4

                packet.Write(item.DisplayId);
                packet.Write((uint)item.Quality);
                packet.Write((uint)item.Flags);
                packet.Write((uint)item.Flags2);		// new 3.2.0
                packet.Write(item.BuyPrice);
                packet.Write(item.SellPrice);
                packet.Write((uint)item.InventorySlotType);
                packet.Write((uint)item.RequiredClassMask);
                packet.Write((uint)item.RequiredRaceMask);
                packet.Write(item.Level);
                packet.Write(item.RequiredLevel);
                packet.Write(item.RequiredSkill != null ? (int)item.RequiredSkill.Id : 0);
                packet.Write(item.RequiredSkillValue);
                packet.Write(item.RequiredProfession != null ? item.RequiredProfession.Id : 0);
                packet.Write(item.RequiredPvPRank);
                packet.Write(item.UnknownRank);// PVP Medal
                packet.Write(item.RequiredFaction != null ? (int)item.RequiredFaction.Id : 0);
                packet.Write((uint)item.RequiredFactionStanding);
                packet.Write(item.UniqueCount);
                packet.Write(item.MaxAmount);
                packet.Write(item.ContainerSlots);

                packet.Write(item.Mods.Length);
                for (var m = 0; m < item.Mods.Length; m++)
                {
                    packet.Write((uint)item.Mods[m].Type);
                    packet.Write(item.Mods[m].Value);
                }

                packet.Write(item.ScalingStatDistributionId);// NEW 3.0.2 ScalingStatDistribution.dbc
                packet.Write(item.ScalingStatValueFlags);// NEW 3.0.2 ScalingStatFlags

                // In 3.1 there are only 2 damages instead of 5
                for (var i = 0; i < ItemConstants.MaxDmgCount; i++)
                {
                    if(i >= item.Damages.Length)
                    {
                        packet.WriteFloat(0f);
                        packet.WriteFloat(0f);
                        packet.WriteUInt(0u);
                        continue;
                    }

                    var dmg = item.Damages[i];

                    packet.Write(dmg.Minimum);
                    packet.Write(dmg.Maximum);
                    packet.Write((uint)dmg.School);
                }

                for (var i = 0; i < ItemConstants.MaxResCount; i++)
                {
                    var res = item.Resistances[i];
                    packet.Write(res);
                }

                packet.Write(item.AttackTime);
                packet.Write((uint)item.ProjectileType);
                packet.Write(item.RangeModifier);

                for (var s = 0; s < ItemConstants.MaxSpellCount; s++)
                {
                    ItemSpell spell;
                    if(s < item.Spells.Length && (spell = item.Spells[s]) != null)
                    {
                        packet.Write((uint)spell.Id);
                        packet.Write((uint)spell.Trigger);
                        packet.Write((uint)Math.Abs(spell.Charges));
                        packet.Write(spell.Cooldown);
                        packet.Write(spell.CategoryId);
                        packet.Write(spell.CategoryCooldown);
                    }
                    else
                    {
                        packet.WriteUInt(0u);
                        packet.WriteUInt(0u);
                        packet.WriteUInt(0u);
                        packet.Write(-1);
                        packet.WriteUInt(0u);
                        packet.Write(-1);
                    }
                }

                packet.Write((uint)item.BondType);
                packet.WriteCString(item.Descriptions.Localize(locale));

                packet.Write(item.PageTextId);
                packet.Write((uint)item.LanguageId);
                packet.Write((uint)item.PageMaterial);
                packet.Write(item.QuestId);
                packet.Write(item.LockId);
                packet.Write((int)item.Material);
                packet.Write((uint)item.SheathType);
                packet.Write(item.RandomPropertiesId);
                packet.Write(item.RandomSuffixId);
                packet.Write(item.BlockValue);
                packet.Write((uint)item.SetId);
                packet.Write(item.MaxDurability);
                packet.Write((uint)item.ZoneId);
                packet.Write((uint)item.MapId);
                packet.Write((uint)item.BagFamily);
                packet.Write((uint)item.ToolCategory);

                for (var i = 0; i < ItemConstants.MaxSocketCount; i++)
                {
                    packet.Write((uint)item.Sockets[i].Color);
                    packet.Write(item.Sockets[i].Content);
                }

                packet.Write(item.SocketBonusEnchantId);
                packet.Write(item.GemPropertiesId);
                packet.Write(item.RequiredDisenchantingLevel);
                packet.Write(item.ArmorModifier);

                packet.Write(item.Duration);// Exisiting duration in seconds
                packet.Write(item.ItemLimitCategoryId);// NEW 3.0.2 ItemLimitCategory.dbc

                packet.Write(item.HolidayId); // NEW 3.1.0 Holidays.dbc

                client.Send(packet);
            }
        }
Exemple #54
0
        public static void SendUnitCastStart(IRealmClient client, SpellCast cast, WorldObject target)
        {
            // TODO: research and implement this.
            // maybe sent for all targets in SpellCast object?

            using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_UNIT_SPELLCAST_START, 28))
            {
                cast.Caster.EntityId.WritePacked(packet);   // caster pguid
                target.EntityId.WritePacked(packet);        // target pguid
                packet.Write(cast.Spell.Id);                // spell id
                packet.Write(cast.Spell.CastDelay);         // cast time?
                packet.Write(cast.Spell.CastDelay);         // cast time mod?

                client.Send(packet);
            }
        }
Exemple #55
0
		/// <summary>
		/// Send a custom cooldown time to the client
		/// </summary>
		public static void SendSpellCooldown(WorldObject caster, IRealmClient client, uint spellId, ushort cooldown)
		{
			using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_SPELL_COOLDOWN, 14))
			{
				packet.Write(caster.EntityId.Full);
				packet.WriteByte(0x00);// 1 = use category cooldown
				packet.Write(spellId);
				packet.Write((uint)cooldown); // if > 0, use this. If 0, use spell.RecoveryTime

				client.Send(packet);
			}
		}
Exemple #56
0
		/// <summary>
		/// Send a custom cooldown time to the client
		/// </summary>
		public static void SendItemCooldown(IRealmClient client, uint spellId, IEntity item)
		{
			using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_ITEM_COOLDOWN, 14))
			{
				packet.Write(item.EntityId.Full);
				packet.Write(spellId);

				client.Send(packet);
			}
		}
Exemple #57
0
 /// <summary>
 /// Stops the kick timer
 /// </summary>
 public static void SendRaidTimerReset(IRealmClient client)
 {
     using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_RAID_GROUP_ONLY, 8))
     {
         packet.Write(0);
         packet.Write(0);
         client.Send(packet);
     }
 }
Exemple #58
0
        public static void SendGameObjectInfo(IRealmClient client, GOEntry entry)
        {
            var name = entry.Names.Localize(client);
            using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_GAMEOBJECT_QUERY_RESPONSE,
                                                   13 + 6 + name.Length + (24 * 4)))
            {
                packet.Write(entry.Id);
                packet.Write((uint)entry.Type);
                packet.Write(entry.DisplayId);
                packet.Write(name);
                packet.Write((byte)0); // Name2
                packet.Write((byte)0); // Name3
                packet.Write((byte)0); // Name4
                packet.Write((byte)0); // string IconName
                packet.Write((byte)0); // string. Casting bar text
                packet.Write((byte)0); // string

                int i = 0;
                for (; i < entry.Fields.Length; i++)
                {
                    packet.Write(entry.Fields[i]);
                }

                // must be 24 fields
                while (i < GOConstants.EntryFieldCount)
                {
                    packet.Write(0);
                    i++;
                }

                packet.Write(entry.Scale); // size

                for (i = 0; i < 4; i++)
                {
                    packet.Write(0); // new 3.1
                }

                client.Send(packet);
            }
        }
Exemple #59
0
        public static void SendPlayedTime(IRealmClient client, byte display)
        {
            using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_PLAYED_TIME, 8))
            {
                packet.WriteUInt(client.ActiveCharacter.TotalPlayTime);
                packet.WriteUInt(client.ActiveCharacter.LevelPlayTime);
                packet.WriteByte(display);

                client.Send(packet);
            }
        }
Exemple #60
0
        private static void SendPacket(IRealmClient client, BufferSegment outputBuffer, int totalLength, int actualLength)
        {
            var offset = (uint)outputBuffer.Offset;
            outputBuffer.Buffer.Array.SetUShortBE(offset, (ushort)(totalLength - 2));
            outputBuffer.Buffer.Array.SetBytes(offset + 2,
                BitConverter.GetBytes((ushort)RealmServerOpCode.SMSG_COMPRESSED_UPDATE_OBJECT));

            // original length
            outputBuffer.Buffer.Array.SetBytes(offset + HEADER_SIZE, BitConverter.GetBytes((uint)actualLength));

            client.Send(outputBuffer, totalLength);
        }