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); } }
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); } }
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); } }
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); } }
public static void SendCloseCharacterTradeShopToOwnerResponse(IRealmClient client, Asda2PrivateShopClosedToOwnerResult status) { using (RealmPacketOut shopToOwnerResponse = Asda2PrivateShopHandler.CreateCloseCharacterTradeShopToOwnerResponse(status)) client.Send(shopToOwnerResponse, false); }
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); } }
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); } }
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); } }
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); } }
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); }
public static void SendWarTeamListEndedResponse(IRealmClient client) { using (var packet = new RealmPacketOut(RealmServerOpCode.WarTeamListEnded))//6716 { client.Send(packet); } }
/// <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); } }
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); } }
public static void SendStartMoveCommonToOneClienResponset(Character movingChr, IRealmClient recievingClient, bool instant) { using (RealmPacketOut startComonMovePacket = Asda2MovmentHandler.CreateStartComonMovePacket(movingChr, instant)) recievingClient.Send(startComonMovePacket, true); }
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); } }
public static void SendTaxiPathActivated(IRealmClient client) { using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_NEW_TAXI_PATH, 0)) { client.Send(packet); } }
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); } }
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); }
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); } }
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); } }
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); } }
public static void SendQuestConfirmAccept(IRealmClient client) { using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_QUEST_CONFIRM_ACCEPT)) { packet.Write(0); client.Send(packet); } }
/// <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); } }
/// <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(); } }
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); } } }
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; }
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); } }
/// <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); }
/// <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]" : ""); } }
/// <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); } }
/// <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); } }
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); } }
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); } }
public static void SendRessurectFailed(IRealmClient client, int error) { using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_RESURRECT_FAILED, 4)) { packet.Write(error); client.Send(packet); } }
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); } }
/// <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; } }
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); } }
/// <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); } }
/// <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); } }
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); }
/// <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); } }
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); } }
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); } }
/// <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); } }
/// <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); } }
/// <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); } }
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); } }
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); } }
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); }