[7915] Implement more stricted checks and limitations at loading creature addon data.
[getmangos.git] / src / game / WorldSession.h
blobcffe5872e985d16424be0654dce65514e65f88d7
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 struct AddonInfo
61 AddonInfo(std::string name, uint8 enabled, uint32 crc)
63 Name = name;
64 Enabled = enabled;
65 CRC = crc;
68 std::string Name;
69 uint8 Enabled;
70 uint32 CRC;
73 typedef std::list<AddonInfo> AddonsList;
75 enum PartyOperation
77 PARTY_OP_INVITE = 0,
78 PARTY_OP_LEAVE = 2
81 enum PartyResult
83 PARTY_RESULT_OK = 0,
84 PARTY_RESULT_CANT_FIND_TARGET = 1,
85 PARTY_RESULT_NOT_IN_YOUR_PARTY = 2,
86 PARTY_RESULT_NOT_IN_YOUR_INSTANCE = 3,
87 PARTY_RESULT_PARTY_FULL = 4,
88 PARTY_RESULT_ALREADY_IN_GROUP = 5,
89 PARTY_RESULT_YOU_NOT_IN_GROUP = 6,
90 PARTY_RESULT_YOU_NOT_LEADER = 7,
91 PARTY_RESULT_TARGET_UNFRIENDLY = 8,
92 PARTY_RESULT_TARGET_IGNORE_YOU = 9,
93 PARTY_RESULT_INVITE_RESTRICTED = 13
96 /// Player session in the World
97 class MANGOS_DLL_SPEC WorldSession
99 friend class CharacterHandler;
100 public:
101 WorldSession(uint32 id, WorldSocket *sock, AccountTypes sec, uint8 expansion, time_t mute_time, LocaleConstant locale);
102 ~WorldSession();
104 bool PlayerLoading() const { return m_playerLoading; }
105 bool PlayerLogout() const { return m_playerLogout; }
107 void SizeError(WorldPacket const& packet, uint32 size) const;
109 void ReadAddonsInfo(WorldPacket &data);
110 void SendAddonsInfo();
112 void ReadMovementInfo(WorldPacket &data, MovementInfo *mi);
114 void SendPacket(WorldPacket const* packet);
115 void SendNotification(const char *format,...) ATTR_PRINTF(2,3);
116 void SendNotification(int32 string_id,...);
117 void SendPetNameInvalid(uint32 error, const std::string& name, DeclinedName *declinedName);
118 void SendLfgResult(uint32 type, uint32 entry, uint8 lfg_type);
119 void SendPartyResult(PartyOperation operation, const std::string& member, PartyResult res);
120 void SendAreaTriggerMessage(const char* Text, ...) ATTR_PRINTF(2,3);
121 void SendSetPhaseShift(uint32 phaseShift);
123 AccountTypes GetSecurity() const { return _security; }
124 uint32 GetAccountId() const { return _accountId; }
125 Player* GetPlayer() const { return _player; }
126 char const* GetPlayerName() const;
127 void SetSecurity(AccountTypes security) { _security = security; }
128 std::string const& GetRemoteAddress() { return m_Address; }
129 void SetPlayer(Player *plr) { _player = plr; }
130 uint8 Expansion() const { return m_expansion; }
132 /// Session in auth.queue currently
133 void SetInQueue(bool state) { m_inQueue = state; }
135 /// Is the user engaged in a log out process?
136 bool isLogingOut() const { return _logoutTime || m_playerLogout; }
138 /// Engage the logout process for the user
139 void LogoutRequest(time_t requestTime)
141 _logoutTime = requestTime;
144 /// Is logout cooldown expired?
145 bool ShouldLogOut(time_t currTime) const
147 return (_logoutTime > 0 && currTime >= _logoutTime + 20);
150 void LogoutPlayer(bool Save);
151 void KickPlayer();
153 void QueuePacket(WorldPacket* new_packet);
154 bool Update(uint32 diff);
156 /// Handle the authentication waiting queue (to be completed)
157 void SendAuthWaitQue(uint32 position);
159 //void SendTestCreatureQueryOpcode( uint32 entry, uint64 guid, uint32 testvalue );
160 void SendNameQueryOpcode(Player* p);
161 void SendNameQueryOpcodeFromDB(uint64 guid);
162 static void SendNameQueryOpcodeFromDBCallBack(QueryResult *result, uint32 accountId);
164 void SendTrainerList( uint64 guid );
165 void SendTrainerList( uint64 guid, const std::string& strTitle );
166 void SendListInventory( uint64 guid );
167 void SendShowBank( uint64 guid );
168 void SendTabardVendorActivate( uint64 guid );
169 void SendSpiritResurrect();
170 void SendBindPoint(Creature* npc);
171 void SendGMTicketGetTicket(uint32 status, char const* text);
173 void SendAttackStop(Unit const* enemy);
175 void SendBattlegGroundList( uint64 guid, BattleGroundTypeId bgTypeId );
177 void SendTradeStatus(uint32 status);
178 void SendCancelTrade();
180 void SendStablePet(uint64 guid );
181 void SendPetitionQueryOpcode( uint64 petitionguid);
182 void SendUpdateTrade();
184 //pet
185 void SendPetNameQuery(uint64 guid, uint32 petnumber);
187 // Account Data
188 AccountData *GetAccountData(uint32 type) { return &m_accountData[type]; }
189 void SetAccountData(uint32 type, time_t time_, std::string data);
190 void LoadAccountData();
192 //mail
193 //used with item_page table
194 bool SendItemInfo( uint32 itemid, WorldPacket data );
195 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);
196 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);
198 //auction
199 void SendAuctionHello( uint64 guid, Creature * unit );
200 void SendAuctionCommandResult( uint32 auctionId, uint32 Action, uint32 ErrorCode, uint32 bidError = 0);
201 void SendAuctionBidderNotification( uint32 location, uint32 auctionId, uint64 bidder, uint32 bidSum, uint32 diff, uint32 item_template);
202 void SendAuctionOwnerNotification( AuctionEntry * auction );
203 void SendAuctionOutbiddedMail( AuctionEntry * auction, uint32 newPrice );
204 void SendAuctionCancelledToBidderMail( AuctionEntry* auction );
206 //Item Enchantment
207 void SendEnchantmentLog(uint64 Target, uint64 Caster,uint32 ItemID,uint32 SpellID);
208 void SendItemEnchantTimeUpdate(uint64 Playerguid, uint64 Itemguid,uint32 slot,uint32 Duration);
210 //Taxi
211 void SendTaxiStatus( uint64 guid );
212 void SendTaxiMenu( Creature* unit );
213 void SendDoFlight( uint16 MountId, uint32 path, uint32 pathNode = 0 );
214 bool SendLearnNewTaxiNode( Creature* unit );
216 // Guild/Arena Team
217 void SendGuildCommandResult(uint32 typecmd, const std::string& str, uint32 cmdresult);
218 void SendArenaTeamCommandResult(uint32 team_action, const std::string& team, const std::string& player, uint32 error_id);
219 void BuildArenaTeamEventPacket(WorldPacket *data, uint8 eventid, uint8 str_count, const std::string& str1, const std::string& str2, const std::string& str3);
220 void SendNotInArenaTeamPacket(uint8 type);
221 void SendPetitionShowList( uint64 guid );
222 void SendSaveGuildEmblem( uint32 msg );
223 void SendBattleGroundOrArenaJoinError(uint8 err);
225 // Looking For Group
226 // TRUE values set by client sending CMSG_LFG_SET_AUTOJOIN and CMSG_LFM_CLEAR_AUTOFILL before player login
227 bool LookingForGroup_auto_join;
228 bool LookingForGroup_auto_add;
230 void BuildPartyMemberStatsChangedPacket(Player *player, WorldPacket *data);
232 void DoLootRelease( uint64 lguid );
234 // Account mute time
235 time_t m_muteTime;
237 // Locales
238 LocaleConstant GetSessionDbcLocale() const { return m_sessionDbcLocale; }
239 int GetSessionDbLocaleIndex() const { return m_sessionDbLocaleIndex; }
240 const char *GetMangosString(int32 entry) const;
242 uint32 GetLatency() const { return m_latency; }
243 void SetLatency(uint32 latency) { m_latency = latency; }
244 uint32 getDialogStatus(Player *pPlayer, Object* questgiver, uint32 defstatus);
246 public: // opcodes handlers
248 void Handle_NULL(WorldPacket& recvPacket); // not used
249 void Handle_EarlyProccess( WorldPacket& recvPacket);// just mark packets processed in WorldSocket::OnRead
250 void Handle_ServerSide(WorldPacket& recvPacket); // sever side only, can't be accepted from client
251 void Handle_Deprecated(WorldPacket& recvPacket); // never used anymore by client
253 void HandleCharEnumOpcode(WorldPacket& recvPacket);
254 void HandleCharDeleteOpcode(WorldPacket& recvPacket);
255 void HandleCharCreateOpcode(WorldPacket& recvPacket);
256 void HandlePlayerLoginOpcode(WorldPacket& recvPacket);
257 void HandleCharEnum(QueryResult * result);
258 void HandlePlayerLogin(LoginQueryHolder * holder);
260 // played time
261 void HandlePlayedTime(WorldPacket& recvPacket);
263 // new
264 void HandleMoveUnRootAck(WorldPacket& recvPacket);
265 void HandleMoveRootAck(WorldPacket& recvPacket);
266 void HandleLookingForGroup(WorldPacket& recvPacket);
268 // new inspect
269 void HandleInspectOpcode(WorldPacket& recvPacket);
271 // new party stats
272 void HandleInspectHonorStatsOpcode(WorldPacket& recvPacket);
274 void HandleMoveWaterWalkAck(WorldPacket& recvPacket);
275 void HandleFeatherFallAck(WorldPacket &recv_data);
277 void HandleMoveHoverAck( WorldPacket & recv_data );
279 void HandleMountSpecialAnimOpcode(WorldPacket &recvdata);
281 // character view
282 void HandleShowingHelmOpcode(WorldPacket& recv_data);
283 void HandleShowingCloakOpcode(WorldPacket& recv_data);
285 // repair
286 void HandleRepairItemOpcode(WorldPacket& recvPacket);
288 // Knockback
289 void HandleMoveKnockBackAck(WorldPacket& recvPacket);
291 void HandleMoveTeleportAck(WorldPacket& recvPacket);
292 void HandleForceSpeedChangeAck( WorldPacket & recv_data );
294 void HandlePingOpcode(WorldPacket& recvPacket);
295 void HandleAuthSessionOpcode(WorldPacket& recvPacket);
296 void HandleRepopRequestOpcode(WorldPacket& recvPacket);
297 void HandleAutostoreLootItemOpcode(WorldPacket& recvPacket);
298 void HandleLootMoneyOpcode(WorldPacket& recvPacket);
299 void HandleLootOpcode(WorldPacket& recvPacket);
300 void HandleLootReleaseOpcode(WorldPacket& recvPacket);
301 void HandleLootMasterGiveOpcode(WorldPacket& recvPacket);
302 void HandleWhoOpcode(WorldPacket& recvPacket);
303 void HandleLogoutRequestOpcode(WorldPacket& recvPacket);
304 void HandlePlayerLogoutOpcode(WorldPacket& recvPacket);
305 void HandleLogoutCancelOpcode(WorldPacket& recvPacket);
306 void HandleGMTicketGetTicketOpcode(WorldPacket& recvPacket);
307 void HandleGMTicketCreateOpcode(WorldPacket& recvPacket);
308 void HandleGMTicketSystemStatusOpcode(WorldPacket& recvPacket);
310 void HandleGMTicketDeleteTicketOpcode(WorldPacket& recvPacket);
311 void HandleGMTicketUpdateTextOpcode(WorldPacket& recvPacket);
313 void HandleGMSurveySubmit(WorldPacket& recvPacket);
315 void HandleTogglePvP(WorldPacket& recvPacket);
317 void HandleZoneUpdateOpcode(WorldPacket& recvPacket);
318 void HandleSetTargetOpcode(WorldPacket& recvPacket);
319 void HandleSetSelectionOpcode(WorldPacket& recvPacket);
320 void HandleStandStateChangeOpcode(WorldPacket& recvPacket);
321 void HandleEmoteOpcode(WorldPacket& recvPacket);
322 void HandleContactListOpcode(WorldPacket& recvPacket);
323 void HandleAddFriendOpcode(WorldPacket& recvPacket);
324 static void HandleAddFriendOpcodeCallBack(QueryResult *result, uint32 accountId, std::string friendNote);
325 void HandleDelFriendOpcode(WorldPacket& recvPacket);
326 void HandleAddIgnoreOpcode(WorldPacket& recvPacket);
327 static void HandleAddIgnoreOpcodeCallBack(QueryResult *result, uint32 accountId);
328 void HandleDelIgnoreOpcode(WorldPacket& recvPacket);
329 void HandleSetContactNotesOpcode(WorldPacket& recvPacket);
330 void HandleBugOpcode(WorldPacket& recvPacket);
331 void HandleSetAmmoOpcode(WorldPacket& recvPacket);
332 void HandleItemNameQueryOpcode(WorldPacket& recvPacket);
334 void HandleAreaTriggerOpcode(WorldPacket& recvPacket);
336 void HandleSetFactionAtWar( WorldPacket & recv_data );
337 void HandleSetFactionCheat( WorldPacket & recv_data );
338 void HandleSetWatchedFactionOpcode(WorldPacket & recv_data);
339 void HandleSetFactionInactiveOpcode(WorldPacket & recv_data);
341 void HandleUpdateAccountData(WorldPacket& recvPacket);
342 void HandleRequestAccountData(WorldPacket& recvPacket);
343 void HandleSetActionButtonOpcode(WorldPacket& recvPacket);
345 void HandleGameObjectUseOpcode(WorldPacket& recPacket);
346 void HandleMeetingStoneInfo(WorldPacket& recPacket);
347 void HandleGameobjectReportUse(WorldPacket& recvPacket);
349 void HandleNameQueryOpcode(WorldPacket& recvPacket);
351 void HandleQueryTimeOpcode(WorldPacket& recvPacket);
353 void HandleCreatureQueryOpcode(WorldPacket& recvPacket);
355 void HandleGameObjectQueryOpcode(WorldPacket& recvPacket);
357 void HandleMoveWorldportAckOpcode(WorldPacket& recvPacket);
358 void HandleMoveWorldportAckOpcode(); // for server-side calls
360 void HandleMovementOpcodes(WorldPacket& recvPacket);
361 void HandleSetActiveMoverOpcode(WorldPacket &recv_data);
362 void HandleMoveNotActiveMover(WorldPacket &recv_data);
363 void HandleDismissControlledVehicle(WorldPacket &recv_data);
364 void HandleMoveTimeSkippedOpcode(WorldPacket &recv_data);
366 void HandleRequestRaidInfoOpcode( WorldPacket & recv_data );
368 void HandleBattlefieldStatusOpcode(WorldPacket &recv_data);
369 void HandleBattleMasterHelloOpcode(WorldPacket &recv_data);
371 void HandleGroupInviteOpcode(WorldPacket& recvPacket);
372 //void HandleGroupCancelOpcode(WorldPacket& recvPacket);
373 void HandleGroupAcceptOpcode(WorldPacket& recvPacket);
374 void HandleGroupDeclineOpcode(WorldPacket& recvPacket);
375 void HandleGroupUninviteOpcode(WorldPacket& recvPacket);
376 void HandleGroupUninviteGuidOpcode(WorldPacket& recvPacket);
377 void HandleGroupSetLeaderOpcode(WorldPacket& recvPacket);
378 void HandleGroupDisbandOpcode(WorldPacket& recvPacket);
379 void HandleOptOutOfLootOpcode( WorldPacket &recv_data );
380 void HandleLootMethodOpcode(WorldPacket& recvPacket);
381 void HandleLootRoll( WorldPacket &recv_data );
382 void HandleRequestPartyMemberStatsOpcode( WorldPacket &recv_data );
383 void HandleRaidTargetUpdateOpcode( WorldPacket & recv_data );
384 void HandleRaidReadyCheckOpcode( WorldPacket & recv_data );
385 void HandleRaidReadyCheckFinishedOpcode( WorldPacket & recv_data );
386 void HandleGroupRaidConvertOpcode( WorldPacket & recv_data );
387 void HandleGroupChangeSubGroupOpcode( WorldPacket & recv_data );
388 void HandleGroupAssistantLeaderOpcode( WorldPacket & recv_data );
389 void HandlePartyAssignmentOpcode( WorldPacket & recv_data );
391 void HandlePetitionBuyOpcode(WorldPacket& recv_data);
392 void HandlePetitionShowSignOpcode(WorldPacket& recv_data);
393 void HandlePetitionQueryOpcode(WorldPacket& recv_data);
394 void HandlePetitionRenameOpcode(WorldPacket& recv_data);
395 void HandlePetitionSignOpcode(WorldPacket& recv_data);
396 void HandlePetitionDeclineOpcode(WorldPacket& recv_data);
397 void HandleOfferPetitionOpcode(WorldPacket& recv_data);
398 void HandleTurnInPetitionOpcode(WorldPacket& recv_data);
400 void HandleGuildQueryOpcode(WorldPacket& recvPacket);
401 void HandleGuildCreateOpcode(WorldPacket& recvPacket);
402 void HandleGuildInviteOpcode(WorldPacket& recvPacket);
403 void HandleGuildRemoveOpcode(WorldPacket& recvPacket);
404 void HandleGuildAcceptOpcode(WorldPacket& recvPacket);
405 void HandleGuildDeclineOpcode(WorldPacket& recvPacket);
406 void HandleGuildInfoOpcode(WorldPacket& recvPacket);
407 void HandleGuildEventLogQueryOpcode(WorldPacket& recvPacket);
408 void HandleGuildRosterOpcode(WorldPacket& recvPacket);
409 void HandleGuildPromoteOpcode(WorldPacket& recvPacket);
410 void HandleGuildDemoteOpcode(WorldPacket& recvPacket);
411 void HandleGuildLeaveOpcode(WorldPacket& recvPacket);
412 void HandleGuildDisbandOpcode(WorldPacket& recvPacket);
413 void HandleGuildLeaderOpcode(WorldPacket& recvPacket);
414 void HandleGuildMOTDOpcode(WorldPacket& recvPacket);
415 void HandleGuildSetPublicNoteOpcode(WorldPacket& recvPacket);
416 void HandleGuildSetOfficerNoteOpcode(WorldPacket& recvPacket);
417 void HandleGuildRankOpcode(WorldPacket& recvPacket);
418 void HandleGuildAddRankOpcode(WorldPacket& recvPacket);
419 void HandleGuildDelRankOpcode(WorldPacket& recvPacket);
420 void HandleGuildChangeInfoTextOpcode(WorldPacket& recvPacket);
421 void HandleSaveGuildEmblemOpcode(WorldPacket& recvPacket);
423 void HandleTaxiNodeStatusQueryOpcode(WorldPacket& recvPacket);
424 void HandleTaxiQueryAvailableNodes(WorldPacket& recvPacket);
425 void HandleActivateTaxiOpcode(WorldPacket& recvPacket);
426 void HandleActivateTaxiExpressOpcode(WorldPacket& recvPacket);
427 void HandleMoveSplineDoneOpcode(WorldPacket& recvPacket);
429 void HandleTabardVendorActivateOpcode(WorldPacket& recvPacket);
430 void HandleBankerActivateOpcode(WorldPacket& recvPacket);
431 void HandleBuyBankSlotOpcode(WorldPacket& recvPacket);
432 void HandleTrainerListOpcode(WorldPacket& recvPacket);
433 void HandleTrainerBuySpellOpcode(WorldPacket& recvPacket);
434 void HandlePetitionShowListOpcode(WorldPacket& recvPacket);
435 void HandleGossipHelloOpcode(WorldPacket& recvPacket);
436 void HandleGossipSelectOptionOpcode(WorldPacket& recvPacket);
437 void HandleSpiritHealerActivateOpcode(WorldPacket& recvPacket);
438 void HandleNpcTextQueryOpcode(WorldPacket& recvPacket);
439 void HandleBinderActivateOpcode(WorldPacket& recvPacket);
440 void HandleListStabledPetsOpcode(WorldPacket& recvPacket);
441 void HandleStablePet(WorldPacket& recvPacket);
442 void HandleUnstablePet(WorldPacket& recvPacket);
443 void HandleBuyStableSlot(WorldPacket& recvPacket);
444 void HandleStableRevivePet(WorldPacket& recvPacket);
445 void HandleStableSwapPet(WorldPacket& recvPacket);
447 void HandleDuelAcceptedOpcode(WorldPacket& recvPacket);
448 void HandleDuelCancelledOpcode(WorldPacket& recvPacket);
450 void HandleAcceptTradeOpcode(WorldPacket& recvPacket);
451 void HandleBeginTradeOpcode(WorldPacket& recvPacket);
452 void HandleBusyTradeOpcode(WorldPacket& recvPacket);
453 void HandleCancelTradeOpcode(WorldPacket& recvPacket);
454 void HandleClearTradeItemOpcode(WorldPacket& recvPacket);
455 void HandleIgnoreTradeOpcode(WorldPacket& recvPacket);
456 void HandleInitiateTradeOpcode(WorldPacket& recvPacket);
457 void HandleSetTradeGoldOpcode(WorldPacket& recvPacket);
458 void HandleSetTradeItemOpcode(WorldPacket& recvPacket);
459 void HandleUnacceptTradeOpcode(WorldPacket& recvPacket);
461 void HandleAuctionHelloOpcode(WorldPacket& recvPacket);
462 void HandleAuctionListItems( WorldPacket & recv_data );
463 void HandleAuctionListBidderItems( WorldPacket & recv_data );
464 void HandleAuctionSellItem( WorldPacket & recv_data );
465 void HandleAuctionRemoveItem( WorldPacket & recv_data );
466 void HandleAuctionListOwnerItems( WorldPacket & recv_data );
467 void HandleAuctionPlaceBid( WorldPacket & recv_data );
468 void HandleAuctionListPendingSales( WorldPacket & recv_data );
470 void HandleGetMailList( WorldPacket & recv_data );
471 void HandleSendMail( WorldPacket & recv_data );
472 void HandleMailTakeMoney( WorldPacket & recv_data );
473 void HandleMailTakeItem( WorldPacket & recv_data );
474 void HandleMailMarkAsRead( WorldPacket & recv_data );
475 void HandleMailReturnToSender( WorldPacket & recv_data );
476 void HandleMailDelete( WorldPacket & recv_data );
477 void HandleItemTextQuery( WorldPacket & recv_data);
478 void HandleMailCreateTextItem(WorldPacket & recv_data );
479 void HandleQueryNextMailTime(WorldPacket & recv_data );
480 void HandleCancelChanneling(WorldPacket & recv_data );
482 void SendItemPageInfo( ItemPrototype *itemProto );
483 void HandleSplitItemOpcode(WorldPacket& recvPacket);
484 void HandleSwapInvItemOpcode(WorldPacket& recvPacket);
485 void HandleDestroyItemOpcode(WorldPacket& recvPacket);
486 void HandleAutoEquipItemOpcode(WorldPacket& recvPacket);
487 void HandleItemQuerySingleOpcode(WorldPacket& recvPacket);
488 void HandleSellItemOpcode(WorldPacket& recvPacket);
489 void HandleBuyItemInSlotOpcode(WorldPacket& recvPacket);
490 void HandleBuyItemOpcode(WorldPacket& recvPacket);
491 void HandleListInventoryOpcode(WorldPacket& recvPacket);
492 void HandleAutoStoreBagItemOpcode(WorldPacket& recvPacket);
493 void HandleReadItem(WorldPacket& recvPacket);
494 void HandleAutoEquipItemSlotOpcode(WorldPacket & recvPacket);
495 void HandleSwapItem( WorldPacket & recvPacket);
496 void HandleBuybackItem(WorldPacket & recvPacket);
497 void HandleAutoBankItemOpcode(WorldPacket& recvPacket);
498 void HandleAutoStoreBankItemOpcode(WorldPacket& recvPacket);
499 void HandleWrapItemOpcode(WorldPacket& recvPacket);
501 void HandleAttackSwingOpcode(WorldPacket& recvPacket);
502 void HandleAttackStopOpcode(WorldPacket& recvPacket);
503 void HandleSetSheathedOpcode(WorldPacket& recvPacket);
505 void HandleUseItemOpcode(WorldPacket& recvPacket);
506 void HandleOpenItemOpcode(WorldPacket& recvPacket);
507 void HandleCastSpellOpcode(WorldPacket& recvPacket);
508 void HandleCancelCastOpcode(WorldPacket& recvPacket);
509 void HandleCancelAuraOpcode(WorldPacket& recvPacket);
510 void HandleCancelGrowthAuraOpcode(WorldPacket& recvPacket);
511 void HandleCancelAutoRepeatSpellOpcode(WorldPacket& recvPacket);
513 void HandleLearnTalentOpcode(WorldPacket& recvPacket);
514 void HandleTalentWipeConfirmOpcode(WorldPacket& recvPacket);
515 void HandleUnlearnSkillOpcode(WorldPacket& recvPacket);
517 void HandleQuestgiverStatusQueryOpcode(WorldPacket& recvPacket);
518 void HandleQuestgiverStatusMultipleQuery(WorldPacket& recvPacket);
519 void HandleQuestgiverHelloOpcode(WorldPacket& recvPacket);
520 void HandleQuestgiverAcceptQuestOpcode(WorldPacket& recvPacket);
521 void HandleQuestgiverQueryQuestOpcode(WorldPacket& recvPacket);
522 void HandleQuestgiverChooseRewardOpcode(WorldPacket& recvPacket);
523 void HandleQuestgiverRequestRewardOpcode(WorldPacket& recvPacket);
524 void HandleQuestQueryOpcode(WorldPacket& recvPacket);
525 void HandleQuestgiverCancel(WorldPacket& recv_data );
526 void HandleQuestLogSwapQuest(WorldPacket& recv_data );
527 void HandleQuestLogRemoveQuest(WorldPacket& recv_data);
528 void HandleQuestConfirmAccept(WorldPacket& recv_data);
529 void HandleQuestgiverCompleteQuest(WorldPacket& recv_data);
530 void HandleQuestgiverQuestAutoLaunch(WorldPacket& recvPacket);
531 void HandlePushQuestToParty(WorldPacket& recvPacket);
532 void HandleQuestPushResult(WorldPacket& recvPacket);
534 void HandleMessagechatOpcode(WorldPacket& recvPacket);
535 void HandleTextEmoteOpcode(WorldPacket& recvPacket);
536 void HandleChatIgnoredOpcode(WorldPacket& recvPacket);
538 void HandleReclaimCorpseOpcode( WorldPacket& recvPacket );
539 void HandleCorpseQueryOpcode( WorldPacket& recvPacket );
540 void HandleResurrectResponseOpcode(WorldPacket& recvPacket);
541 void HandleSummonResponseOpcode(WorldPacket& recv_data);
543 void HandleJoinChannel(WorldPacket& recvPacket);
544 void HandleLeaveChannel(WorldPacket& recvPacket);
545 void HandleChannelList(WorldPacket& recvPacket);
546 void HandleChannelPassword(WorldPacket& recvPacket);
547 void HandleChannelSetOwner(WorldPacket& recvPacket);
548 void HandleChannelOwner(WorldPacket& recvPacket);
549 void HandleChannelModerator(WorldPacket& recvPacket);
550 void HandleChannelUnmoderator(WorldPacket& recvPacket);
551 void HandleChannelMute(WorldPacket& recvPacket);
552 void HandleChannelUnmute(WorldPacket& recvPacket);
553 void HandleChannelInvite(WorldPacket& recvPacket);
554 void HandleChannelKick(WorldPacket& recvPacket);
555 void HandleChannelBan(WorldPacket& recvPacket);
556 void HandleChannelUnban(WorldPacket& recvPacket);
557 void HandleChannelAnnouncements(WorldPacket& recvPacket);
558 void HandleChannelModerate(WorldPacket& recvPacket);
559 void HandleChannelDisplayListQuery(WorldPacket& recvPacket);
560 void HandleGetChannelMemberCount(WorldPacket& recvPacket);
561 void HandleSetChannelWatch(WorldPacket& recvPacket);
563 void HandleCompleteCinematic(WorldPacket& recvPacket);
564 void HandleNextCinematicCamera(WorldPacket& recvPacket);
566 void HandlePageQuerySkippedOpcode(WorldPacket& recvPacket);
567 void HandlePageTextQueryOpcode(WorldPacket& recvPacket);
569 void HandleTutorialFlag ( WorldPacket & recv_data );
570 void HandleTutorialClear( WorldPacket & recv_data );
571 void HandleTutorialReset( WorldPacket & recv_data );
573 //Pet
574 void HandlePetAction( WorldPacket & recv_data );
575 void HandlePetNameQuery( WorldPacket & recv_data );
576 void HandlePetSetAction( WorldPacket & recv_data );
577 void HandlePetAbandon( WorldPacket & recv_data );
578 void HandlePetRename( WorldPacket & recv_data );
579 void HandlePetCancelAuraOpcode( WorldPacket& recvPacket );
580 void HandlePetUnlearnOpcode( WorldPacket& recvPacket );
581 void HandlePetSpellAutocastOpcode( WorldPacket& recvPacket );
582 void HandlePetCastSpellOpcode( WorldPacket& recvPacket );
583 void HandlePetLearnTalent( WorldPacket& recvPacket );
585 void HandleSetActionBarToggles(WorldPacket& recv_data);
587 void HandleCharRenameOpcode(WorldPacket& recv_data);
588 static void HandleChangePlayerNameOpcodeCallBack(QueryResult *result, uint32 accountId, std::string newname);
589 void HandleSetPlayerDeclinedNames(WorldPacket& recv_data);
591 void HandleTotemDestroyed(WorldPacket& recv_data);
593 //BattleGround
594 void HandleBattlemasterHelloOpcode(WorldPacket &recv_data);
595 void HandleBattlemasterJoinOpcode(WorldPacket &recv_data);
596 void HandleBattleGroundPlayerPositionsOpcode(WorldPacket& recv_data);
597 void HandlePVPLogDataOpcode( WorldPacket &recv_data );
598 void HandleBattleFieldPortOpcode( WorldPacket &recv_data );
599 void HandleBattlefieldListOpcode( WorldPacket &recv_data );
600 void HandleLeaveBattlefieldOpcode( WorldPacket &recv_data );
601 void HandleBattlemasterJoinArena( WorldPacket &recv_data );
602 void HandleReportPvPAFK( WorldPacket &recv_data );
604 void HandleWardenDataOpcode(WorldPacket& recv_data);
605 void HandleWorldTeleportOpcode(WorldPacket& recv_data);
606 void HandleMinimapPingOpcode(WorldPacket& recv_data);
607 void HandleRandomRollOpcode(WorldPacket& recv_data);
608 void HandleFarSightOpcode(WorldPacket& recv_data);
609 void HandleSetLfgOpcode(WorldPacket& recv_data);
610 void HandleSetDungeonDifficultyOpcode(WorldPacket& recv_data);
611 void HandleMoveSetCanFlyAckOpcode(WorldPacket& recv_data);
612 void HandleLfgSetAutoJoinOpcode(WorldPacket& recv_data);
613 void HandleLfgClearAutoJoinOpcode(WorldPacket& recv_data);
614 void HandleLfmSetAutoFillOpcode(WorldPacket& recv_data);
615 void HandleLfmClearAutoFillOpcode(WorldPacket& recv_data);
616 void HandleLfgClearOpcode(WorldPacket& recv_data);
617 void HandleLfmClearOpcode(WorldPacket& recv_data);
618 void HandleSetLfmOpcode(WorldPacket& recv_data);
619 void HandleSetLfgCommentOpcode(WorldPacket& recv_data);
620 void HandleSetTitleOpcode(WorldPacket& recv_data);
621 void HandleRealmSplitOpcode(WorldPacket& recv_data);
622 void HandleTimeSyncResp(WorldPacket& recv_data);
623 void HandleWhoisOpcode(WorldPacket& recv_data);
624 void HandleResetInstancesOpcode(WorldPacket& recv_data);
626 // Arena Team
627 void HandleInspectArenaTeamsOpcode(WorldPacket& recv_data);
628 void HandleArenaTeamQueryOpcode(WorldPacket& recv_data);
629 void HandleArenaTeamRosterOpcode(WorldPacket& recv_data);
630 void HandleArenaTeamInviteOpcode(WorldPacket& recv_data);
631 void HandleArenaTeamAcceptOpcode(WorldPacket& recv_data);
632 void HandleArenaTeamDeclineOpcode(WorldPacket& recv_data);
633 void HandleArenaTeamLeaveOpcode(WorldPacket& recv_data);
634 void HandleArenaTeamRemoveOpcode(WorldPacket& recv_data);
635 void HandleArenaTeamDisbandOpcode(WorldPacket& recv_data);
636 void HandleArenaTeamLeaderOpcode(WorldPacket& recv_data);
638 void HandleAreaSpiritHealerQueryOpcode(WorldPacket& recv_data);
639 void HandleAreaSpiritHealerQueueOpcode(WorldPacket& recv_data);
640 void HandleCancelMountAuraOpcode(WorldPacket& recv_data);
641 void HandleSelfResOpcode(WorldPacket& recv_data);
642 void HandleComplainOpcode(WorldPacket& recv_data);
643 void HandleRequestPetInfoOpcode(WorldPacket& recv_data);
645 // Socket gem
646 void HandleSocketOpcode(WorldPacket& recv_data);
648 void HandleCancelTempEnchantmentOpcode(WorldPacket& recv_data);
650 void HandleChannelVoiceOnOpcode(WorldPacket & recv_data);
651 void HandleVoiceSessionEnableOpcode(WorldPacket& recv_data);
652 void HandleSetActiveVoiceChannel(WorldPacket& recv_data);
653 void HandleSetTaxiBenchmarkOpcode(WorldPacket& recv_data);
655 // Guild Bank
656 void HandleGuildPermissions(WorldPacket& recv_data);
657 void HandleGuildBankMoneyWithdrawn(WorldPacket& recv_data);
658 void HandleGuildBankerActivate(WorldPacket& recv_data);
659 void HandleGuildBankQueryTab(WorldPacket& recv_data);
660 void HandleGuildBankLogQuery(WorldPacket& recv_data);
661 void HandleGuildBankDepositMoney(WorldPacket& recv_data);
662 void HandleGuildBankWithdrawMoney(WorldPacket& recv_data);
663 void HandleGuildBankSwapItems(WorldPacket& recv_data);
664 void HandleGuildBankUpdateTab(WorldPacket& recv_data);
665 void HandleGuildBankBuyTab(WorldPacket& recv_data);
666 void HandleQueryGuildBankTabText(WorldPacket& recv_data);
667 void HandleSetGuildBankTabText(WorldPacket& recv_data);
669 // Calendar
670 void HandleCalendarGetCalendar(WorldPacket& recv_data);
671 void HandleCalendarGetEvent(WorldPacket& recv_data);
672 void HandleCalendarGuildFilter(WorldPacket& recv_data);
673 void HandleCalendarArenaTeam(WorldPacket& recv_data);
674 void HandleCalendarAddEvent(WorldPacket& recv_data);
675 void HandleCalendarUpdateEvent(WorldPacket& recv_data);
676 void HandleCalendarRemoveEvent(WorldPacket& recv_data);
677 void HandleCalendarCopyEvent(WorldPacket& recv_data);
678 void HandleCalendarEventInvite(WorldPacket& recv_data);
679 void HandleCalendarEventRsvp(WorldPacket& recv_data);
680 void HandleCalendarEventRemoveInvite(WorldPacket& recv_data);
681 void HandleCalendarEventStatus(WorldPacket& recv_data);
682 void HandleCalendarEventModeratorStatus(WorldPacket& recv_data);
683 void HandleCalendarComplain(WorldPacket& recv_data);
684 void HandleCalendarGetNumPending(WorldPacket& recv_data);
686 void HandleSpellClick(WorldPacket& recv_data);
687 void HandleAlterAppearance(WorldPacket& recv_data);
688 void HandleRemoveGlyph(WorldPacket& recv_data);
689 void HandleCharCustomize(WorldPacket& recv_data);
690 void HandleQueryInspectAchievements(WorldPacket& recv_data);
691 private:
692 // private trade methods
693 void moveItems(Item* myItems[], Item* hisItems[]);
695 // logging helper
696 void logUnexpectedOpcode(WorldPacket *packet, const char * reason);
698 Player *_player;
699 WorldSocket *m_Socket;
700 std::string m_Address;
702 AccountTypes _security;
703 uint32 _accountId;
704 uint8 m_expansion;
706 time_t _logoutTime;
707 bool m_inQueue; // session wait in auth.queue
708 bool m_playerLoading; // code processed in LoginPlayer
709 bool m_playerLogout; // code processed in LogoutPlayer
710 bool m_playerRecentlyLogout;
711 LocaleConstant m_sessionDbcLocale;
712 int m_sessionDbLocaleIndex;
713 uint32 m_latency;
714 AccountData m_accountData[NUM_ACCOUNT_DATA_TYPES];
715 AddonsList m_addonsList;
716 ACE_Based::LockedQueue<WorldPacket*, ACE_Thread_Mutex> _recvQueue;
718 #endif
719 /// @}