[7297] Fixed profession spells sorting in trainer spell list at client.
[getmangos.git] / src / game / WorldSession.h
blob59ee0d9cff2250d939e1102b04290a5f85594024
1 /*
2 * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 /// \addtogroup u2w
20 /// @{
21 /// \file
23 #ifndef __WORLDSESSION_H
24 #define __WORLDSESSION_H
26 #include "Common.h"
27 #include "SharedDefines.h"
29 class MailItemsInfo;
30 struct ItemPrototype;
31 struct AuctionEntry;
32 struct DeclinedName;
33 struct MovementInfo;
35 class Creature;
36 class Item;
37 class Object;
38 class Player;
39 class Unit;
40 class WorldPacket;
41 class WorldSocket;
42 class WorldSession;
43 class QueryResult;
44 class LoginQueryHolder;
45 class CharacterHandler;
47 #define CHECK_PACKET_SIZE(P,S) if((P).size() < (S)) return SizeError((P),(S));
49 #define NUM_ACCOUNT_DATA_TYPES 8
51 struct AccountData
53 AccountData() : Time(0), Data("") {}
55 time_t Time;
56 std::string Data;
59 enum PartyOperation
61 PARTY_OP_INVITE = 0,
62 PARTY_OP_LEAVE = 2
65 enum PartyResult
67 PARTY_RESULT_OK = 0,
68 PARTY_RESULT_CANT_FIND_TARGET = 1,
69 PARTY_RESULT_NOT_IN_YOUR_PARTY = 2,
70 PARTY_RESULT_NOT_IN_YOUR_INSTANCE = 3,
71 PARTY_RESULT_PARTY_FULL = 4,
72 PARTY_RESULT_ALREADY_IN_GROUP = 5,
73 PARTY_RESULT_YOU_NOT_IN_GROUP = 6,
74 PARTY_RESULT_YOU_NOT_LEADER = 7,
75 PARTY_RESULT_TARGET_UNFRIENDLY = 8,
76 PARTY_RESULT_TARGET_IGNORE_YOU = 9,
77 PARTY_RESULT_INVITE_RESTRICTED = 13
80 /// Player session in the World
81 class MANGOS_DLL_SPEC WorldSession
83 friend class CharacterHandler;
84 public:
85 WorldSession(uint32 id, WorldSocket *sock, uint32 sec, uint8 expansion, time_t mute_time, LocaleConstant locale);
86 ~WorldSession();
88 bool PlayerLoading() const { return m_playerLoading; }
89 bool PlayerLogout() const { return m_playerLogout; }
91 void SizeError(WorldPacket const& packet, uint32 size) const;
93 void ReadMovementInfo(WorldPacket &data, MovementInfo *mi);
95 void SendPacket(WorldPacket const* packet);
96 void SendNotification(const char *format,...) ATTR_PRINTF(2,3);
97 void SendNotification(int32 string_id,...);
98 void SendPetNameInvalid(uint32 error, const std::string& name, DeclinedName *declinedName);
99 void SendLfgResult(uint32 type, uint32 entry, uint8 lfg_type);
100 void SendPartyResult(PartyOperation operation, const std::string& member, PartyResult res);
101 void SendAreaTriggerMessage(const char* Text, ...) ATTR_PRINTF(2,3);
102 void SendSetPhaseShift(uint32 phaseShift);
104 uint32 GetSecurity() const { return _security; }
105 uint32 GetAccountId() const { return _accountId; }
106 Player* GetPlayer() const { return _player; }
107 char const* GetPlayerName() const;
108 void SetSecurity(uint32 security) { _security = security; }
109 std::string const& GetRemoteAddress() { return m_Address; }
110 void SetPlayer(Player *plr) { _player = plr; }
111 uint8 Expansion() const { return m_expansion; }
113 /// Session in auth.queue currently
114 void SetInQueue(bool state) { m_inQueue = state; }
116 /// Is the user engaged in a log out process?
117 bool isLogingOut() const { return _logoutTime || m_playerLogout; }
119 /// Engage the logout process for the user
120 void LogoutRequest(time_t requestTime)
122 _logoutTime = requestTime;
125 /// Is logout cooldown expired?
126 bool ShouldLogOut(time_t currTime) const
128 return (_logoutTime > 0 && currTime >= _logoutTime + 20);
131 void LogoutPlayer(bool Save);
132 void KickPlayer();
134 void QueuePacket(WorldPacket* new_packet);
135 bool Update(uint32 diff);
137 /// Handle the authentication waiting queue (to be completed)
138 void SendAuthWaitQue(uint32 position);
140 //void SendTestCreatureQueryOpcode( uint32 entry, uint64 guid, uint32 testvalue );
141 void SendNameQueryOpcode(Player* p);
142 void SendNameQueryOpcodeFromDB(uint64 guid);
143 static void SendNameQueryOpcodeFromDBCallBack(QueryResult *result, uint32 accountId);
145 void SendTrainerList( uint64 guid );
146 void SendTrainerList( uint64 guid, const std::string& strTitle );
147 void SendListInventory( uint64 guid );
148 void SendShowBank( uint64 guid );
149 void SendTabardVendorActivate( uint64 guid );
150 void SendSpiritResurrect();
151 void SendBindPoint(Creature* npc);
152 void SendGMTicketGetTicket(uint32 status, char const* text);
154 void SendAttackStop(Unit const* enemy);
156 void SendBattlegGroundList( uint64 guid, BattleGroundTypeId bgTypeId );
158 void SendTradeStatus(uint32 status);
159 void SendCancelTrade();
161 void SendStablePet(uint64 guid );
162 void SendPetitionQueryOpcode( uint64 petitionguid);
163 void SendUpdateTrade();
165 //pet
166 void SendPetNameQuery(uint64 guid, uint32 petnumber);
168 // Account Data
169 AccountData *GetAccountData(uint32 type) { return &m_accountData[type]; }
170 void SetAccountData(uint32 type, time_t time_, std::string data);
171 void LoadAccountData();
173 //mail
174 //used with item_page table
175 bool SendItemInfo( uint32 itemid, WorldPacket data );
176 static void SendReturnToSender(uint8 messageType, uint32 sender_acc, uint32 sender_guid, uint32 receiver_guid, const std::string& subject, uint32 itemTextId, MailItemsInfo *mi, uint32 money, uint16 mailTemplateId = 0);
177 static void SendMailTo(Player* receiver, uint8 messageType, uint8 stationery, uint32 sender_guidlow_or_entry, uint32 received_guidlow, std::string subject, uint32 itemTextId, MailItemsInfo* mi, uint32 money, uint32 COD, uint32 checked, uint32 deliver_delay = 0, uint16 mailTemplateId = 0);
179 //auction
180 void SendAuctionHello( uint64 guid, Creature * unit );
181 void SendAuctionCommandResult( uint32 auctionId, uint32 Action, uint32 ErrorCode, uint32 bidError = 0);
182 void SendAuctionBidderNotification( uint32 location, uint32 auctionId, uint64 bidder, uint32 bidSum, uint32 diff, uint32 item_template);
183 void SendAuctionOwnerNotification( AuctionEntry * auction );
184 void SendAuctionOutbiddedMail( AuctionEntry * auction, uint32 newPrice );
185 void SendAuctionCancelledToBidderMail( AuctionEntry* auction );
187 //Item Enchantment
188 void SendEnchantmentLog(uint64 Target, uint64 Caster,uint32 ItemID,uint32 SpellID);
189 void SendItemEnchantTimeUpdate(uint64 Playerguid, uint64 Itemguid,uint32 slot,uint32 Duration);
191 //Taxi
192 void SendTaxiStatus( uint64 guid );
193 void SendTaxiMenu( Creature* unit );
194 void SendDoFlight( uint16 MountId, uint32 path, uint32 pathNode = 0 );
195 bool SendLearnNewTaxiNode( Creature* unit );
197 // Guild/Arena Team
198 void SendGuildCommandResult(uint32 typecmd, const std::string& str, uint32 cmdresult);
199 void SendArenaTeamCommandResult(uint32 team_action, const std::string& team, const std::string& player, uint32 error_id);
200 void BuildArenaTeamEventPacket(WorldPacket *data, uint8 eventid, uint8 str_count, const std::string& str1, const std::string& str2, const std::string& str3);
201 void SendNotInArenaTeamPacket(uint8 type);
202 void SendPetitionShowList( uint64 guid );
203 void SendSaveGuildEmblem( uint32 msg );
204 void SendBattleGroundOrArenaJoinError(uint8 err);
206 // Looking For Group
207 // TRUE values set by client sending CMSG_LFG_SET_AUTOJOIN and CMSG_LFM_CLEAR_AUTOFILL before player login
208 bool LookingForGroup_auto_join;
209 bool LookingForGroup_auto_add;
211 void BuildPartyMemberStatsChangedPacket(Player *player, WorldPacket *data);
213 void DoLootRelease( uint64 lguid );
215 // Account mute time
216 time_t m_muteTime;
218 // Locales
219 LocaleConstant GetSessionDbcLocale() const { return m_sessionDbcLocale; }
220 int GetSessionDbLocaleIndex() const { return m_sessionDbLocaleIndex; }
221 const char *GetMangosString(int32 entry) const;
223 uint32 GetLatency() const { return m_latency; }
224 void SetLatency(uint32 latency) { m_latency = latency; }
225 uint32 getDialogStatus(Player *pPlayer, Object* questgiver, uint32 defstatus);
227 public: // opcodes handlers
229 void Handle_NULL(WorldPacket& recvPacket); // not used
230 void Handle_EarlyProccess( WorldPacket& recvPacket);// just mark packets processed in WorldSocket::OnRead
231 void Handle_ServerSide(WorldPacket& recvPacket); // sever side only, can't be accepted from client
232 void Handle_Deprecated(WorldPacket& recvPacket); // never used anymore by client
234 void HandleCharEnumOpcode(WorldPacket& recvPacket);
235 void HandleCharDeleteOpcode(WorldPacket& recvPacket);
236 void HandleCharCreateOpcode(WorldPacket& recvPacket);
237 void HandlePlayerLoginOpcode(WorldPacket& recvPacket);
238 void HandleCharEnum(QueryResult * result);
239 void HandlePlayerLogin(LoginQueryHolder * holder);
241 // played time
242 void HandlePlayedTime(WorldPacket& recvPacket);
244 // new
245 void HandleMoveUnRootAck(WorldPacket& recvPacket);
246 void HandleMoveRootAck(WorldPacket& recvPacket);
247 void HandleLookingForGroup(WorldPacket& recvPacket);
249 // new inspect
250 void HandleInspectOpcode(WorldPacket& recvPacket);
252 // new party stats
253 void HandleInspectHonorStatsOpcode(WorldPacket& recvPacket);
255 void HandleMoveWaterWalkAck(WorldPacket& recvPacket);
256 void HandleFeatherFallAck(WorldPacket &recv_data);
258 void HandleMoveHoverAck( WorldPacket & recv_data );
260 void HandleMountSpecialAnimOpcode(WorldPacket &recvdata);
262 // character view
263 void HandleToggleHelmOpcode(WorldPacket& recv_data);
264 void HandleToggleCloakOpcode(WorldPacket& recv_data);
266 // repair
267 void HandleRepairItemOpcode(WorldPacket& recvPacket);
269 // Knockback
270 void HandleMoveKnockBackAck(WorldPacket& recvPacket);
272 void HandleMoveTeleportAck(WorldPacket& recvPacket);
273 void HandleForceSpeedChangeAck( WorldPacket & recv_data );
275 void HandlePingOpcode(WorldPacket& recvPacket);
276 void HandleAuthSessionOpcode(WorldPacket& recvPacket);
277 void HandleRepopRequestOpcode(WorldPacket& recvPacket);
278 void HandleAutostoreLootItemOpcode(WorldPacket& recvPacket);
279 void HandleLootMoneyOpcode(WorldPacket& recvPacket);
280 void HandleLootOpcode(WorldPacket& recvPacket);
281 void HandleLootReleaseOpcode(WorldPacket& recvPacket);
282 void HandleLootMasterGiveOpcode(WorldPacket& recvPacket);
283 void HandleWhoOpcode(WorldPacket& recvPacket);
284 void HandleLogoutRequestOpcode(WorldPacket& recvPacket);
285 void HandlePlayerLogoutOpcode(WorldPacket& recvPacket);
286 void HandleLogoutCancelOpcode(WorldPacket& recvPacket);
287 void HandleGMTicketGetTicketOpcode(WorldPacket& recvPacket);
288 void HandleGMTicketCreateOpcode(WorldPacket& recvPacket);
289 void HandleGMTicketSystemStatusOpcode(WorldPacket& recvPacket);
291 void HandleGMTicketDeleteOpcode(WorldPacket& recvPacket);
292 void HandleGMTicketUpdateTextOpcode(WorldPacket& recvPacket);
294 void HandleGMSurveySubmit(WorldPacket& recvPacket);
296 void HandleTogglePvP(WorldPacket& recvPacket);
298 void HandleZoneUpdateOpcode(WorldPacket& recvPacket);
299 void HandleSetTargetOpcode(WorldPacket& recvPacket);
300 void HandleSetSelectionOpcode(WorldPacket& recvPacket);
301 void HandleStandStateChangeOpcode(WorldPacket& recvPacket);
302 void HandleEmoteOpcode(WorldPacket& recvPacket);
303 void HandleFriendListOpcode(WorldPacket& recvPacket);
304 void HandleAddFriendOpcode(WorldPacket& recvPacket);
305 static void HandleAddFriendOpcodeCallBack(QueryResult *result, uint32 accountId, std::string friendNote);
306 void HandleDelFriendOpcode(WorldPacket& recvPacket);
307 void HandleAddIgnoreOpcode(WorldPacket& recvPacket);
308 static void HandleAddIgnoreOpcodeCallBack(QueryResult *result, uint32 accountId);
309 void HandleDelIgnoreOpcode(WorldPacket& recvPacket);
310 void HandleSetFriendNoteOpcode(WorldPacket& recvPacket);
311 void HandleBugOpcode(WorldPacket& recvPacket);
312 void HandleSetAmmoOpcode(WorldPacket& recvPacket);
313 void HandleItemNameQueryOpcode(WorldPacket& recvPacket);
315 void HandleAreaTriggerOpcode(WorldPacket& recvPacket);
317 void HandleSetFactionAtWar( WorldPacket & recv_data );
318 void HandleSetFactionCheat( WorldPacket & recv_data );
319 void HandleSetWatchedFactionIndexOpcode(WorldPacket & recv_data);
320 void HandleSetWatchedFactionInactiveOpcode(WorldPacket & recv_data);
322 void HandleUpdateAccountData(WorldPacket& recvPacket);
323 void HandleRequestAccountData(WorldPacket& recvPacket);
324 void HandleSetActionButtonOpcode(WorldPacket& recvPacket);
326 void HandleGameObjectUseOpcode(WorldPacket& recPacket);
327 void HandleMeetingStoneInfo(WorldPacket& recPacket);
328 void HandleGameobjectReportUse(WorldPacket& recvPacket);
330 void HandleNameQueryOpcode(WorldPacket& recvPacket);
332 void HandleQueryTimeOpcode(WorldPacket& recvPacket);
334 void HandleCreatureQueryOpcode(WorldPacket& recvPacket);
336 void HandleGameObjectQueryOpcode(WorldPacket& recvPacket);
338 void HandleMoveWorldportAckOpcode(WorldPacket& recvPacket);
339 void HandleMoveWorldportAckOpcode(); // for server-side calls
341 void HandleMovementOpcodes(WorldPacket& recvPacket);
342 void HandleSetActiveMoverOpcode(WorldPacket &recv_data);
343 void HandleMoveNotActiveMover(WorldPacket &recv_data);
344 void HandleDismissControlledVehicle(WorldPacket &recv_data);
345 void HandleMoveTimeSkippedOpcode(WorldPacket &recv_data);
347 void HandleRequestRaidInfoOpcode( WorldPacket & recv_data );
349 void HandleBattlefieldStatusOpcode(WorldPacket &recv_data);
350 void HandleBattleMasterHelloOpcode(WorldPacket &recv_data);
352 void HandleGroupInviteOpcode(WorldPacket& recvPacket);
353 //void HandleGroupCancelOpcode(WorldPacket& recvPacket);
354 void HandleGroupAcceptOpcode(WorldPacket& recvPacket);
355 void HandleGroupDeclineOpcode(WorldPacket& recvPacket);
356 void HandleGroupUninviteNameOpcode(WorldPacket& recvPacket);
357 void HandleGroupUninviteGuidOpcode(WorldPacket& recvPacket);
358 void HandleGroupSetLeaderOpcode(WorldPacket& recvPacket);
359 void HandleGroupLeaveOpcode(WorldPacket& recvPacket);
360 void HandleGroupPassOnLootOpcode( WorldPacket &recv_data );
361 void HandleLootMethodOpcode(WorldPacket& recvPacket);
362 void HandleLootRoll( WorldPacket &recv_data );
363 void HandleRequestPartyMemberStatsOpcode( WorldPacket &recv_data );
364 void HandleRaidIconTargetOpcode( WorldPacket & recv_data );
365 void HandleRaidReadyCheckOpcode( WorldPacket & recv_data );
366 void HandleRaidReadyCheckFinishOpcode( WorldPacket & recv_data );
367 void HandleRaidConvertOpcode( WorldPacket & recv_data );
368 void HandleGroupChangeSubGroupOpcode( WorldPacket & recv_data );
369 void HandleGroupAssistantOpcode( WorldPacket & recv_data );
370 void HandleGroupPromoteOpcode( WorldPacket & recv_data );
372 void HandlePetitionBuyOpcode(WorldPacket& recv_data);
373 void HandlePetitionShowSignOpcode(WorldPacket& recv_data);
374 void HandlePetitionQueryOpcode(WorldPacket& recv_data);
375 void HandlePetitionRenameOpcode(WorldPacket& recv_data);
376 void HandlePetitionSignOpcode(WorldPacket& recv_data);
377 void HandlePetitionDeclineOpcode(WorldPacket& recv_data);
378 void HandleOfferPetitionOpcode(WorldPacket& recv_data);
379 void HandleTurnInPetitionOpcode(WorldPacket& recv_data);
381 void HandleGuildQueryOpcode(WorldPacket& recvPacket);
382 void HandleGuildCreateOpcode(WorldPacket& recvPacket);
383 void HandleGuildInviteOpcode(WorldPacket& recvPacket);
384 void HandleGuildRemoveOpcode(WorldPacket& recvPacket);
385 void HandleGuildAcceptOpcode(WorldPacket& recvPacket);
386 void HandleGuildDeclineOpcode(WorldPacket& recvPacket);
387 void HandleGuildInfoOpcode(WorldPacket& recvPacket);
388 void HandleGuildEventLogOpcode(WorldPacket& recvPacket);
389 void HandleGuildRosterOpcode(WorldPacket& recvPacket);
390 void HandleGuildPromoteOpcode(WorldPacket& recvPacket);
391 void HandleGuildDemoteOpcode(WorldPacket& recvPacket);
392 void HandleGuildLeaveOpcode(WorldPacket& recvPacket);
393 void HandleGuildDisbandOpcode(WorldPacket& recvPacket);
394 void HandleGuildLeaderOpcode(WorldPacket& recvPacket);
395 void HandleGuildMOTDOpcode(WorldPacket& recvPacket);
396 void HandleGuildSetPublicNoteOpcode(WorldPacket& recvPacket);
397 void HandleGuildSetOfficerNoteOpcode(WorldPacket& recvPacket);
398 void HandleGuildRankOpcode(WorldPacket& recvPacket);
399 void HandleGuildAddRankOpcode(WorldPacket& recvPacket);
400 void HandleGuildDelRankOpcode(WorldPacket& recvPacket);
401 void HandleGuildChangeInfoOpcode(WorldPacket& recvPacket);
402 void HandleGuildSaveEmblemOpcode(WorldPacket& recvPacket);
404 void HandleTaxiNodeStatusQueryOpcode(WorldPacket& recvPacket);
405 void HandleTaxiQueryAvailableNodes(WorldPacket& recvPacket);
406 void HandleActivateTaxiOpcode(WorldPacket& recvPacket);
407 void HandleActivateTaxiFarOpcode(WorldPacket& recvPacket);
408 void HandleTaxiNextDestinationOpcode(WorldPacket& recvPacket);
410 void HandleTabardVendorActivateOpcode(WorldPacket& recvPacket);
411 void HandleBankerActivateOpcode(WorldPacket& recvPacket);
412 void HandleBuyBankSlotOpcode(WorldPacket& recvPacket);
413 void HandleTrainerListOpcode(WorldPacket& recvPacket);
414 void HandleTrainerBuySpellOpcode(WorldPacket& recvPacket);
415 void HandlePetitionShowListOpcode(WorldPacket& recvPacket);
416 void HandleGossipHelloOpcode(WorldPacket& recvPacket);
417 void HandleGossipSelectOptionOpcode(WorldPacket& recvPacket);
418 void HandleSpiritHealerActivateOpcode(WorldPacket& recvPacket);
419 void HandleNpcTextQueryOpcode(WorldPacket& recvPacket);
420 void HandleBinderActivateOpcode(WorldPacket& recvPacket);
421 void HandleListStabledPetsOpcode(WorldPacket& recvPacket);
422 void HandleStablePet(WorldPacket& recvPacket);
423 void HandleUnstablePet(WorldPacket& recvPacket);
424 void HandleBuyStableSlot(WorldPacket& recvPacket);
425 void HandleStableRevivePet(WorldPacket& recvPacket);
426 void HandleStableSwapPet(WorldPacket& recvPacket);
428 void HandleDuelAcceptedOpcode(WorldPacket& recvPacket);
429 void HandleDuelCancelledOpcode(WorldPacket& recvPacket);
431 void HandleAcceptTradeOpcode(WorldPacket& recvPacket);
432 void HandleBeginTradeOpcode(WorldPacket& recvPacket);
433 void HandleBusyTradeOpcode(WorldPacket& recvPacket);
434 void HandleCancelTradeOpcode(WorldPacket& recvPacket);
435 void HandleClearTradeItemOpcode(WorldPacket& recvPacket);
436 void HandleIgnoreTradeOpcode(WorldPacket& recvPacket);
437 void HandleInitiateTradeOpcode(WorldPacket& recvPacket);
438 void HandleSetTradeGoldOpcode(WorldPacket& recvPacket);
439 void HandleSetTradeItemOpcode(WorldPacket& recvPacket);
440 void HandleUnacceptTradeOpcode(WorldPacket& recvPacket);
442 void HandleAuctionHelloOpcode(WorldPacket& recvPacket);
443 void HandleAuctionListItems( WorldPacket & recv_data );
444 void HandleAuctionListBidderItems( WorldPacket & recv_data );
445 void HandleAuctionSellItem( WorldPacket & recv_data );
446 void HandleAuctionRemoveItem( WorldPacket & recv_data );
447 void HandleAuctionListOwnerItems( WorldPacket & recv_data );
448 void HandleAuctionPlaceBid( WorldPacket & recv_data );
449 void HandleAuctionListPendingSales( WorldPacket & recv_data );
451 void HandleGetMail( WorldPacket & recv_data );
452 void HandleSendMail( WorldPacket & recv_data );
453 void HandleTakeMoney( WorldPacket & recv_data );
454 void HandleTakeItem( WorldPacket & recv_data );
455 void HandleMarkAsRead( WorldPacket & recv_data );
456 void HandleReturnToSender( WorldPacket & recv_data );
457 void HandleMailDelete( WorldPacket & recv_data );
458 void HandleItemTextQuery( WorldPacket & recv_data);
459 void HandleMailCreateTextItem(WorldPacket & recv_data );
460 void HandleMsgQueryNextMailtime(WorldPacket & recv_data );
461 void HandleCancelChanneling(WorldPacket & recv_data );
463 void SendItemPageInfo( ItemPrototype *itemProto );
464 void HandleSplitItemOpcode(WorldPacket& recvPacket);
465 void HandleSwapInvItemOpcode(WorldPacket& recvPacket);
466 void HandleDestroyItemOpcode(WorldPacket& recvPacket);
467 void HandleAutoEquipItemOpcode(WorldPacket& recvPacket);
468 void HandleItemQuerySingleOpcode(WorldPacket& recvPacket);
469 void HandleSellItemOpcode(WorldPacket& recvPacket);
470 void HandleBuyItemInSlotOpcode(WorldPacket& recvPacket);
471 void HandleBuyItemOpcode(WorldPacket& recvPacket);
472 void HandleListInventoryOpcode(WorldPacket& recvPacket);
473 void HandleAutoStoreBagItemOpcode(WorldPacket& recvPacket);
474 void HandleReadItem(WorldPacket& recvPacket);
475 void HandleAutoEquipItemSlotOpcode(WorldPacket & recvPacket);
476 void HandleSwapItem( WorldPacket & recvPacket);
477 void HandleBuybackItem(WorldPacket & recvPacket);
478 void HandleAutoBankItemOpcode(WorldPacket& recvPacket);
479 void HandleAutoStoreBankItemOpcode(WorldPacket& recvPacket);
480 void HandleWrapItemOpcode(WorldPacket& recvPacket);
482 void HandleAttackSwingOpcode(WorldPacket& recvPacket);
483 void HandleAttackStopOpcode(WorldPacket& recvPacket);
484 void HandleSetSheathedOpcode(WorldPacket& recvPacket);
486 void HandleUseItemOpcode(WorldPacket& recvPacket);
487 void HandleOpenItemOpcode(WorldPacket& recvPacket);
488 void HandleCastSpellOpcode(WorldPacket& recvPacket);
489 void HandleCancelCastOpcode(WorldPacket& recvPacket);
490 void HandleCancelAuraOpcode(WorldPacket& recvPacket);
491 void HandleCancelGrowthAuraOpcode(WorldPacket& recvPacket);
492 void HandleCancelAutoRepeatSpellOpcode(WorldPacket& recvPacket);
494 void HandleLearnTalentOpcode(WorldPacket& recvPacket);
495 void HandleTalentWipeOpcode(WorldPacket& recvPacket);
496 void HandleUnlearnSkillOpcode(WorldPacket& recvPacket);
498 void HandleQuestgiverStatusQueryOpcode(WorldPacket& recvPacket);
499 void HandleQuestgiverStatusQueryMultipleOpcode(WorldPacket& recvPacket);
500 void HandleQuestgiverHelloOpcode(WorldPacket& recvPacket);
501 void HandleQuestgiverAcceptQuestOpcode(WorldPacket& recvPacket);
502 void HandleQuestgiverQuestQueryOpcode(WorldPacket& recvPacket);
503 void HandleQuestgiverChooseRewardOpcode(WorldPacket& recvPacket);
504 void HandleQuestgiverRequestRewardOpcode(WorldPacket& recvPacket);
505 void HandleQuestQueryOpcode(WorldPacket& recvPacket);
506 void HandleQuestgiverCancel(WorldPacket& recv_data );
507 void HandleQuestLogSwapQuest(WorldPacket& recv_data );
508 void HandleQuestLogRemoveQuest(WorldPacket& recv_data);
509 void HandleQuestConfirmAccept(WorldPacket& recv_data);
510 void HandleQuestComplete(WorldPacket& recv_data);
511 void HandleQuestAutoLaunch(WorldPacket& recvPacket);
512 void HandleQuestPushToParty(WorldPacket& recvPacket);
513 void HandleQuestPushResult(WorldPacket& recvPacket);
515 void HandleMessagechatOpcode(WorldPacket& recvPacket);
516 void HandleTextEmoteOpcode(WorldPacket& recvPacket);
517 void HandleChatIgnoredOpcode(WorldPacket& recvPacket);
519 void HandleCorpseReclaimOpcode( WorldPacket& recvPacket );
520 void HandleCorpseQueryOpcode( WorldPacket& recvPacket );
521 void HandleResurrectResponseOpcode(WorldPacket& recvPacket);
522 void HandleSummonResponseOpcode(WorldPacket& recv_data);
524 void HandleChannelJoin(WorldPacket& recvPacket);
525 void HandleChannelLeave(WorldPacket& recvPacket);
526 void HandleChannelList(WorldPacket& recvPacket);
527 void HandleChannelPassword(WorldPacket& recvPacket);
528 void HandleChannelSetOwner(WorldPacket& recvPacket);
529 void HandleChannelOwner(WorldPacket& recvPacket);
530 void HandleChannelModerator(WorldPacket& recvPacket);
531 void HandleChannelUnmoderator(WorldPacket& recvPacket);
532 void HandleChannelMute(WorldPacket& recvPacket);
533 void HandleChannelUnmute(WorldPacket& recvPacket);
534 void HandleChannelInvite(WorldPacket& recvPacket);
535 void HandleChannelKick(WorldPacket& recvPacket);
536 void HandleChannelBan(WorldPacket& recvPacket);
537 void HandleChannelUnban(WorldPacket& recvPacket);
538 void HandleChannelAnnounce(WorldPacket& recvPacket);
539 void HandleChannelModerate(WorldPacket& recvPacket);
540 void HandleChannelRosterQuery(WorldPacket& recvPacket);
541 void HandleChannelInfoQuery(WorldPacket& recvPacket);
542 void HandleChannelJoinNotify(WorldPacket& recvPacket);
544 void HandleCompleteCinema(WorldPacket& recvPacket);
545 void HandleNextCinematicCamera(WorldPacket& recvPacket);
547 void HandlePageQuerySkippedOpcode(WorldPacket& recvPacket);
548 void HandlePageQueryOpcode(WorldPacket& recvPacket);
550 void HandleTutorialFlag ( WorldPacket & recv_data );
551 void HandleTutorialClear( WorldPacket & recv_data );
552 void HandleTutorialReset( WorldPacket & recv_data );
554 //Pet
555 void HandlePetAction( WorldPacket & recv_data );
556 void HandlePetNameQuery( WorldPacket & recv_data );
557 void HandlePetSetAction( WorldPacket & recv_data );
558 void HandlePetAbandon( WorldPacket & recv_data );
559 void HandlePetRename( WorldPacket & recv_data );
560 void HandlePetCancelAuraOpcode( WorldPacket& recvPacket );
561 void HandlePetUnlearnOpcode( WorldPacket& recvPacket );
562 void HandlePetSpellAutocastOpcode( WorldPacket& recvPacket );
563 void HandlePetCastSpellOpcode( WorldPacket& recvPacket );
564 void HandlePetLearnTalent( WorldPacket& recvPacket );
566 void HandleSetActionBar(WorldPacket& recv_data);
568 void HandleChangePlayerNameOpcode(WorldPacket& recv_data);
569 static void HandleChangePlayerNameOpcodeCallBack(QueryResult *result, uint32 accountId, std::string newname);
570 void HandleDeclinedPlayerNameOpcode(WorldPacket& recv_data);
572 void HandleTotemDestroy(WorldPacket& recv_data);
574 //BattleGround
575 void HandleBattleGroundHelloOpcode(WorldPacket &recv_data);
576 void HandleBattleGroundJoinOpcode(WorldPacket &recv_data);
577 void HandleBattleGroundPlayerPositionsOpcode(WorldPacket& recv_data);
578 void HandleBattleGroundPVPlogdataOpcode( WorldPacket &recv_data );
579 void HandleBattleGroundPlayerPortOpcode( WorldPacket &recv_data );
580 void HandleBattleGroundListOpcode( WorldPacket &recv_data );
581 void HandleBattleGroundLeaveOpcode( WorldPacket &recv_data );
582 void HandleBattleGroundArenaJoin( WorldPacket &recv_data );
583 void HandleBattleGroundReportAFK( WorldPacket &recv_data );
585 void HandleWardenDataOpcode(WorldPacket& recv_data);
586 void HandleWorldTeleportOpcode(WorldPacket& recv_data);
587 void HandleMinimapPingOpcode(WorldPacket& recv_data);
588 void HandleRandomRollOpcode(WorldPacket& recv_data);
589 void HandleFarSightOpcode(WorldPacket& recv_data);
590 void HandleSetLfgOpcode(WorldPacket& recv_data);
591 void HandleDungeonDifficultyOpcode(WorldPacket& recv_data);
592 void HandleMoveFlyModeChangeAckOpcode(WorldPacket& recv_data);
593 void HandleLfgAutoJoinOpcode(WorldPacket& recv_data);
594 void HandleLfgCancelAutoJoinOpcode(WorldPacket& recv_data);
595 void HandleLfmAutoAddMembersOpcode(WorldPacket& recv_data);
596 void HandleLfmCancelAutoAddmembersOpcode(WorldPacket& recv_data);
597 void HandleLfgClearOpcode(WorldPacket& recv_data);
598 void HandleLfmSetNoneOpcode(WorldPacket& recv_data);
599 void HandleLfmSetOpcode(WorldPacket& recv_data);
600 void HandleLfgSetCommentOpcode(WorldPacket& recv_data);
601 void HandleChooseTitleOpcode(WorldPacket& recv_data);
602 void HandleRealmStateRequestOpcode(WorldPacket& recv_data);
603 void HandleTimeSyncResp(WorldPacket& recv_data);
604 void HandleWhoisOpcode(WorldPacket& recv_data);
605 void HandleResetInstancesOpcode(WorldPacket& recv_data);
607 // Arena Team
608 void HandleInspectArenaStatsOpcode(WorldPacket& recv_data);
609 void HandleArenaTeamQueryOpcode(WorldPacket& recv_data);
610 void HandleArenaTeamRosterOpcode(WorldPacket& recv_data);
611 void HandleArenaTeamAddMemberOpcode(WorldPacket& recv_data);
612 void HandleArenaTeamInviteAcceptOpcode(WorldPacket& recv_data);
613 void HandleArenaTeamInviteDeclineOpcode(WorldPacket& recv_data);
614 void HandleArenaTeamLeaveOpcode(WorldPacket& recv_data);
615 void HandleArenaTeamRemoveFromTeamOpcode(WorldPacket& recv_data);
616 void HandleArenaTeamDisbandOpcode(WorldPacket& recv_data);
617 void HandleArenaTeamPromoteToCaptainOpcode(WorldPacket& recv_data);
619 void HandleAreaSpiritHealerQueryOpcode(WorldPacket& recv_data);
620 void HandleAreaSpiritHealerQueueOpcode(WorldPacket& recv_data);
621 void HandleDismountOpcode(WorldPacket& recv_data);
622 void HandleSelfResOpcode(WorldPacket& recv_data);
623 void HandleReportSpamOpcode(WorldPacket& recv_data);
624 void HandleRequestPetInfoOpcode(WorldPacket& recv_data);
626 // Socket gem
627 void HandleSocketOpcode(WorldPacket& recv_data);
629 void HandleCancelTempItemEnchantmentOpcode(WorldPacket& recv_data);
631 void HandleChannelEnableVoiceOpcode(WorldPacket & recv_data);
632 void HandleVoiceSettingsOpcode(WorldPacket& recv_data);
633 void HandleChannelVoiceChatQuery(WorldPacket& recv_data);
634 void HandleSetTaxiBenchmarkOpcode(WorldPacket& recv_data);
636 // Guild Bank
637 void HandleGuildBankGetRights(WorldPacket& recv_data);
638 void HandleGuildBankGetMoneyAmount(WorldPacket& recv_data);
639 void HandleGuildBankQuery(WorldPacket& recv_data);
640 void HandleGuildBankTabColon(WorldPacket& recv_data);
641 void HandleGuildBankLog(WorldPacket& recv_data);
642 void HandleGuildBankDeposit(WorldPacket& recv_data);
643 void HandleGuildBankWithdraw(WorldPacket& recv_data);
644 void HandleGuildBankDepositItem(WorldPacket& recv_data);
645 void HandleGuildBankModifyTab(WorldPacket& recv_data);
646 void HandleGuildBankBuyTab(WorldPacket& recv_data);
647 void HandleGuildBankTabText(WorldPacket& recv_data);
648 void HandleGuildBankSetTabText(WorldPacket& recv_data);
650 // Calendar
651 void HandleCalendarGetCalendar(WorldPacket& recv_data);
652 void HandleCalendarGetEvent(WorldPacket& recv_data);
653 void HandleCalendarGuildFilter(WorldPacket& recv_data);
654 void HandleCalendarArenaTeam(WorldPacket& recv_data);
655 void HandleCalendarAddEvent(WorldPacket& recv_data);
656 void HandleCalendarUpdateEvent(WorldPacket& recv_data);
657 void HandleCalendarRemoveEvent(WorldPacket& recv_data);
658 void HandleCalendarCopyEvent(WorldPacket& recv_data);
659 void HandleCalendarEventInvite(WorldPacket& recv_data);
660 void HandleCalendarEventRsvp(WorldPacket& recv_data);
661 void HandleCalendarEventRemoveInvite(WorldPacket& recv_data);
662 void HandleCalendarEventStatus(WorldPacket& recv_data);
663 void HandleCalendarEventModeratorStatus(WorldPacket& recv_data);
664 void HandleCalendarComplain(WorldPacket& recv_data);
665 void HandleCalendarGetNumPending(WorldPacket& recv_data);
667 void HandleSpellClick(WorldPacket& recv_data);
668 void HandleAlterAppearance(WorldPacket& recv_data);
669 void HandleRemoveGlyph(WorldPacket& recv_data);
670 void HandleCharCustomize(WorldPacket& recv_data);
671 void HandleInspectAchievements(WorldPacket& recv_data);
672 private:
673 // private trade methods
674 void moveItems(Item* myItems[], Item* hisItems[]);
676 // logging helper
677 void logUnexpectedOpcode(WorldPacket *packet, const char * reason);
679 Player *_player;
680 WorldSocket *m_Socket;
681 std::string m_Address;
683 uint32 _security;
684 uint32 _accountId;
685 uint8 m_expansion;
687 time_t _logoutTime;
688 bool m_inQueue; // session wait in auth.queue
689 bool m_playerLoading; // code processed in LoginPlayer
690 bool m_playerLogout; // code processed in LogoutPlayer
691 bool m_playerRecentlyLogout;
692 LocaleConstant m_sessionDbcLocale;
693 int m_sessionDbLocaleIndex;
694 uint32 m_latency;
695 AccountData m_accountData[NUM_ACCOUNT_DATA_TYPES];
697 ZThread::LockedQueue<WorldPacket*,ZThread::FastMutex> _recvQueue;
699 #endif
700 /// @}