* Update to 2.3.0 client version, big thx to bLuma for patch!

* fixed minor bug with uninitialized scenestate in gui
* added some debug output to the WorldSession connection process, thx to visagalis for reporting a problem with it. real problem source yet unknown.
*** please report any bugs!
This commit is contained in:
false_genesis 2007-12-23 16:36:59 +00:00
parent d1d5ec309c
commit 02df5d5261
16 changed files with 3049 additions and 2839 deletions

View File

@ -58,8 +58,8 @@ charname=Pseuwow
// Client emulation configuration // Client emulation configuration
ClientVersion=2.1.3 ClientVersion=2.3.0
ClientBuild=6898 ClientBuild=7561
ClientLanguage=enUS ClientLanguage=enUS
// or change to enGB, deDE, ... // or change to enGB, deDE, ...
@ -114,3 +114,4 @@ rmcontrolhost=localhost
useMaps=0 useMaps=0

View File

@ -14,7 +14,7 @@ SET,color ${@0}
DEFAULT,i 0 DEFAULT,i 0
TOINT,i ${i} TOINT,i ${i}
DEFAULT,color 6679FF DEFAULT,color 6679FF
SET,link |cff${color}|Hitem:${i}:0:0:0|h[Item ${i}]|h|r SET,link |cff${color}|Hitem:${i}:0:0:0:0:0:0:0|h[Item ${i}]|h|r
UNSET i UNSET i
UNSET color UNSET color

View File

@ -21,9 +21,10 @@ SAY [${@version_short}] login successful.
EMOTE 126 EMOTE 126
// join some channels... // join some channels...
JOINCHANNEL generalchat //JOINCHANNEL generalchat
JOINCHANNEL help //JOINCHANNEL help
JOINCHANNEL tradee //JOINCHANNEL tradee
//listchannel generalchat
// ... // ...
// Spell 836 = LoginEffect // Spell 836 = LoginEffect

View File

@ -37,7 +37,7 @@ PseuGUI::PseuGUI()
_initialized = false; _initialized = false;
_mustdie = false; _mustdie = false;
_driverType = video::EDT_BURNINGSVIDEO; // nulldevice makes not really a sense to display stuff _driverType = video::EDT_BURNINGSVIDEO; // nulldevice makes not really a sense to display stuff
_scenestate = SCENESTATE_NULL; _scenestate = _scenestate_new = SCENESTATE_NULL;
_smgr = NULL; _smgr = NULL;
_device = NULL; _device = NULL;
_guienv = NULL; _guienv = NULL;
@ -49,19 +49,20 @@ PseuGUI::~PseuGUI()
{ {
this->Cancel(); this->Cancel();
_instance->DeleteGUI(); // this makes the instance set its gui ptr to NULL _instance->DeleteGUI(); // this makes the instance set its gui ptr to NULL
logdebug("PseuGUI::~PseuGUI()");
} }
void PseuGUI::SetDriver(uint8 driverId) void PseuGUI::SetDriver(uint8 driverId)
{ {
switch(driverId) switch(driverId)
{ {
case DIRECTX9: _driverType = video::EDT_DIRECT3D9;break; case DIRECTX9: _driverType = video::EDT_DIRECT3D9; break;
case DIRECTX8: _driverType = video::EDT_DIRECT3D8;break; case DIRECTX8: _driverType = video::EDT_DIRECT3D8; break;
case OPENGL: _driverType = video::EDT_OPENGL; break; case OPENGL: _driverType = video::EDT_OPENGL; break;
case SOFTWARE: _driverType = video::EDT_SOFTWARE; break; case SOFTWARE: _driverType = video::EDT_SOFTWARE; break;
case BURNINGSVIDEO: _driverType = video::EDT_BURNINGSVIDEO;break; case BURNINGSVIDEO: _driverType = video::EDT_BURNINGSVIDEO; break;
case NULLDEVICE: _driverType = video::EDT_NULL; break; case NULLDEVICE: _driverType = video::EDT_NULL; break;
default: _driverType = video::EDT_BURNINGSVIDEO; // if no valid driver detected, use software default: _driverType = video::EDT_BURNINGSVIDEO; // if no valid driver detected, use software
} }
// TODO: add support for changing driver during runtime? // TODO: add support for changing driver during runtime?

View File

@ -140,6 +140,7 @@ void RealmSession::ClearSocket(void)
void RealmSession::SetMustDie(void) void RealmSession::SetMustDie(void)
{ {
_mustdie = true; _mustdie = true;
logdebug("RealmSession: Must die now.");
} }
bool RealmSession::MustDie(void) bool RealmSession::MustDie(void)

View File

@ -118,6 +118,7 @@ void WorldSession::SendCastSpell(uint32 spellid, bool nocheck)
ByteBuffer temp; ByteBuffer temp;
uint16 flags=TARGET_FLAG_SELF; // target mask. spellcast implementeation needs to be changed if TARGET_MASK_SELF is != 0 uint16 flags=TARGET_FLAG_SELF; // target mask. spellcast implementeation needs to be changed if TARGET_MASK_SELF is != 0
packet << spellid; packet << spellid;
packet << (uint8)0; // unk
if(my->GetTarget() != GetGuid()) // self cast? if(my->GetTarget() != GetGuid()) // self cast?
{ {
if(target->GetTypeId() == TYPEID_PLAYER || target->GetTypeId() == TYPEID_UNIT) if(target->GetTypeId() == TYPEID_PLAYER || target->GetTypeId() == TYPEID_UNIT)
@ -180,3 +181,4 @@ void WorldSession::SendWhoListRequest(uint32 minlvl, uint32 maxlvl, uint32 racem

View File

@ -11,7 +11,7 @@
#include "Item.h" #include "Item.h"
// increase this number whenever you change something that makes old files unusable // increase this number whenever you change something that makes old files unusable
uint32 ITEMPROTOTYPES_CACHE_VERSION = 0x00000001; uint32 ITEMPROTOTYPES_CACHE_VERSION = 0x00000002;
PlayerNameCache::~PlayerNameCache() PlayerNameCache::~PlayerNameCache()
{ {
@ -261,6 +261,7 @@ void ItemProtoCache_InsertDataToSession(WorldSession *session)
buf >> proto->socketBonus; buf >> proto->socketBonus;
buf >> proto->GemProperties; buf >> proto->GemProperties;
buf >> proto->ExtendedCost; buf >> proto->ExtendedCost;
buf >> proto->RequiredArenaRank;
buf >> proto->RequiredDisenchantSkill; buf >> proto->RequiredDisenchantSkill;
buf >> proto->ArmorDamageModifier; buf >> proto->ArmorDamageModifier;
@ -378,6 +379,7 @@ void ItemProtoCache_WriteDataToCache(WorldSession *session)
buf << proto->socketBonus; buf << proto->socketBonus;
buf << proto->GemProperties; buf << proto->GemProperties;
buf << proto->ExtendedCost; buf << proto->ExtendedCost;
buf << proto->RequiredArenaRank;
buf << proto->RequiredDisenchantSkill; buf << proto->RequiredDisenchantSkill;
buf << proto->ArmorDamageModifier; buf << proto->ArmorDamageModifier;

View File

@ -218,22 +218,25 @@ enum INVENTORY_CLASS
// but this value used in code as implementation workaround // but this value used in code as implementation workaround
enum ITEM_SUBCLASS_CONSUMABLE enum ITEM_SUBCLASS_CONSUMABLE
{ {
ITEM_SUBCLASS_FOOD = 1, ITEM_SUBCLASS_POTION = 1,
ITEM_SUBCLASS_LIQUID = 2, ITEM_SUBCLASS_ELIXIR = 2,
ITEM_SUBCLASS_POTION = 3, ITEM_SUBCLASS_FLASK = 3,
ITEM_SUBCLASS_SCROLL = 4, ITEM_SUBCLASS_SCROLL = 4,
ITEM_SUBCLASS_BANDAGE = 5, ITEM_SUBCLASS_FOOD = 5,
ITEM_SUBCLASS_HEALTHSTONE = 6, ITEM_SUBCLASS_ITEM_ENHANCEMENT = 6,
ITEM_SUBCLASS_COMBAT_EFFECT = 7 ITEM_SUBCLASS_BANDAGE = 7
}; };
enum ITEM_SUBCLASS_CONTAINER enum ITEM_SUBCLASS_CONTAINER
{ {
ITEM_SUBCLASS_CONTAINER = 0, ITEM_SUBCLASS_CONTAINER = 0,
ITEM_SUBCLASS_SOUL_CONTAINER = 1, ITEM_SUBCLASS_SOUL_CONTAINER = 1,
ITEM_SUBCLASS_HERB_CONTAINER = 2, ITEM_SUBCLASS_HERB_CONTAINER = 2,
ITEM_SUBCLASS_ENCHANTING_CONTAINER = 3, ITEM_SUBCLASS_ENCHANTING_CONTAINER = 3,
ITEM_SUBCLASS_ENGINEERING_CONTAINER = 4 ITEM_SUBCLASS_ENGINEERING_CONTAINER = 4,
ITEM_SUBCLASS_GEM_CONTAINER = 5,
ITEM_SUBCLASS_MINING_CONTAINER = 6,
ITEM_SUBCLASS_LEATHERWORKING_CONTAINER = 7
}; };
enum INVENTORY_SUBCLASS_WEAPON enum INVENTORY_SUBCLASS_WEAPON
@ -283,7 +286,16 @@ enum ITEM_SUBCLASS_TRADE_GOODS
ITEM_SUBCLASS_TRADE_GOODS = 0, ITEM_SUBCLASS_TRADE_GOODS = 0,
ITEM_SUBCLASS_PARTS = 1, ITEM_SUBCLASS_PARTS = 1,
ITEM_SUBCLASS_EXPLOSIVES = 2, ITEM_SUBCLASS_EXPLOSIVES = 2,
ITEM_SUBCLASS_DEVICES = 3 ITEM_SUBCLASS_DEVICES = 3,
ITEM_SUBCLASS_JEWELCRAFTING = 4,
ITEM_SUBCLASS_CLOTH = 5,
ITEM_SUBCLASS_LEATHER = 6,
ITEM_SUBCLASS_METAL_STONE = 7,
ITEM_SUBCLASS_MEAT = 8,
ITEM_SUBCLASS_HERB = 9,
ITEM_SUBCLASS_ELEMENTAZL = 10,
ITEM_SUBCLASS_TRADE_GOODS_OTHER = 11,
ITEM_SUBCLASS_ENCHANTING = 12
}; };
enum ITEM_SUBCLASS_BOOK enum ITEM_SUBCLASS_BOOK
@ -399,6 +411,7 @@ struct ItemProto
uint32 socketBonus; uint32 socketBonus;
uint32 GemProperties; uint32 GemProperties;
uint32 ExtendedCost; uint32 ExtendedCost;
uint32 RequiredArenaRank;
uint32 RequiredDisenchantSkill; uint32 RequiredDisenchantSkill;
float ArmorDamageModifier; float ArmorDamageModifier;
}; };

File diff suppressed because it is too large Load Diff

View File

@ -50,8 +50,6 @@ enum OpCodes
CMSG_DESTROYMONSTER = 18, CMSG_DESTROYMONSTER = 18,
CMSG_CREATEITEM = 19, CMSG_CREATEITEM = 19,
CMSG_CREATEGAMEOBJECT = 20, CMSG_CREATEGAMEOBJECT = 20,
//CMSG_MAKEMONSTERATTACKME = 21, //OBSOLETE
CMSG_MAKEMONSTERATTACKME_OBSOLETE = 21, CMSG_MAKEMONSTERATTACKME_OBSOLETE = 21,
CMSG_MAKEMONSTERATTACKGUID = 22, CMSG_MAKEMONSTERATTACKGUID = 22,
CMSG_ENABLEDEBUGCOMBATLOGGING_OBSOLETE = 23, CMSG_ENABLEDEBUGCOMBATLOGGING_OBSOLETE = 23,
@ -96,7 +94,7 @@ enum OpCodes
SMSG_NEW_WORLD = 62, SMSG_NEW_WORLD = 62,
SMSG_TRANSFER_PENDING = 63, SMSG_TRANSFER_PENDING = 63,
SMSG_TRANSFER_ABORTED = 64, SMSG_TRANSFER_ABORTED = 64,
SMSG_CHARACTER_LOGIN_FAILED = 65, // kick client to character select screen and show "World server is down". SMSG_CHARACTER_LOGIN_FAILED = 65, // kick client to character select screen and show "World server is down".
SMSG_LOGIN_SETTIMESPEED = 66, SMSG_LOGIN_SETTIMESPEED = 66,
SMSG_GAMETIME_UPDATE = 67, SMSG_GAMETIME_UPDATE = 67,
CMSG_GAMETIME_SET = 68, CMSG_GAMETIME_SET = 68,
@ -343,14 +341,12 @@ enum OpCodes
SMSG_COOLDOWN_EVENT = 309, SMSG_COOLDOWN_EVENT = 309,
CMSG_CANCEL_AURA = 310, CMSG_CANCEL_AURA = 310,
SMSG_UPDATE_AURA_DURATION = 311, SMSG_UPDATE_AURA_DURATION = 311,
SMSG_PET_CAST_FAILED = 312, // Your pet is in combat SMSG_PET_CAST_FAILED = 312, // Your pet is in combat
MSG_CHANNEL_START = 313, MSG_CHANNEL_START = 313,
MSG_CHANNEL_UPDATE = 314, MSG_CHANNEL_UPDATE = 314,
CMSG_CANCEL_CHANNELLING = 315, CMSG_CANCEL_CHANNELLING = 315,
SMSG_AI_REACTION = 316, SMSG_AI_REACTION = 316, // may be monser attack sound?
CMSG_SET_SELECTION = 317, CMSG_SET_SELECTION = 317,
//CMSG_SET_TARGET = 318, //OBSOLETE
CMSG_SET_TARGET_OBSOLETE = 318, CMSG_SET_TARGET_OBSOLETE = 318,
CMSG_UNUSED = 319, CMSG_UNUSED = 319,
CMSG_UNUSED2 = 320, CMSG_UNUSED2 = 320,
@ -399,21 +395,19 @@ enum OpCodes
SMSG_DUEL_WINNER = 363, SMSG_DUEL_WINNER = 363,
CMSG_DUEL_ACCEPTED = 364, CMSG_DUEL_ACCEPTED = 364,
CMSG_DUEL_CANCELLED = 365, CMSG_DUEL_CANCELLED = 365,
SMSG_MOUNTRESULT = 366, // 0 - can't mount that unit, 1 - mount too far away, 2 - already mounted, 3 - that unit can't be mounted, 4 - that mount is not our pet, 5 - unknown mount error, 6 - can't mount while looting, 7 - cant mount because your race, 8 - shapeshifted, 9 - you dismount before continuing SMSG_MOUNTRESULT = 366, // 0 - can't mount that unit, 1 - mount too far away, 2 - already mounted, 3 - that unit can't be mounted, 4 - that mount is not our pet, 5 - unknown mount error, 6 - can't mount while looting, 7 - cant mount because your race, 8 - shapeshifted, 9 - you dismount before continuing
SMSG_DISMOUNTRESULT = 367, // 0 - int err, don't have pet to dismount, 1 - not mounted, 2 - int err, dismounting a non-pet SMSG_DISMOUNTRESULT = 367, // 0 - int err, don't have pet to dismount, 1 - not mounted, 2 - int err, dismounting a non-pet
SMSG_PUREMOUNT_CANCELLED_OBSOLETE = 368, SMSG_PUREMOUNT_CANCELLED_OBSOLETE = 368,
CMSG_MOUNTSPECIAL_ANIM = 369, CMSG_MOUNTSPECIAL_ANIM = 369,
SMSG_MOUNTSPECIAL_ANIM = 370, SMSG_MOUNTSPECIAL_ANIM = 370,
SMSG_PET_TAME_FAILURE = 371, // uint32: 0 - Unknown taming error, 1 - Creature not found, 2 - too many pets, 3 - creature already controlled, 4 - creature not tameable, 5 - have active summon, 6 - can't tame, 7 - don't have pet to summon, 8 - internal pet error, 9 - high level, 10 - your pet is dead, 11 - your pet is not dead SMSG_PET_TAME_FAILURE = 371, // uint32: 0 - Unknown taming error, 1 - Creature not found, 2 - too many pets, 3 - creature already controlled, 4 - creature not tameable, 5 - have active summon, 6 - can't tame, 7 - don't have pet to summon, 8 - internal pet error, 9 - high level, 10 - your pet is dead, 11 - your pet is not dead
CMSG_PET_SET_ACTION = 372, CMSG_PET_SET_ACTION = 372,
CMSG_PET_ACTION = 373, CMSG_PET_ACTION = 373,
CMSG_PET_ABANDON = 374, CMSG_PET_ABANDON = 374,
CMSG_PET_RENAME = 375, CMSG_PET_RENAME = 375,
SMSG_PET_NAME_INVALID = 376, // Error, invalid name entered. SMSG_PET_NAME_INVALID = 376, // Error, invalid name entered.
SMSG_PET_SPELLS = 377, SMSG_PET_SPELLS = 377,
SMSG_PET_MODE = 378, // uint64 pet_guid + uint32 flags?
//CMSG_PET_CAST_SPELL_OBSOLETE = 378, //OBSOLETE
SMSG_PET_MODE = 378, // uint64 pet_guid + uint32 flags?
CMSG_GOSSIP_HELLO = 379, CMSG_GOSSIP_HELLO = 379,
CMSG_GOSSIP_SELECT_OPTION = 380, CMSG_GOSSIP_SELECT_OPTION = 380,
SMSG_GOSSIP_MESSAGE = 381, SMSG_GOSSIP_MESSAGE = 381,
@ -473,7 +467,7 @@ enum OpCodes
SMSG_TRAINER_BUY_SUCCEEDED = 435, SMSG_TRAINER_BUY_SUCCEEDED = 435,
SMSG_TRAINER_BUY_FAILED = 436, SMSG_TRAINER_BUY_FAILED = 436,
CMSG_BINDER_ACTIVATE = 437, CMSG_BINDER_ACTIVATE = 437,
SMSG_PLAYERBINDERROR = 438, // You already bound there. SMSG_PLAYERBINDERROR = 438, // You already bound there.
CMSG_BANKER_ACTIVATE = 439, CMSG_BANKER_ACTIVATE = 439,
SMSG_SHOW_BANK = 440, SMSG_SHOW_BANK = 440,
CMSG_BUY_BANK_SLOT = 441, CMSG_BUY_BANK_SLOT = 441,
@ -514,7 +508,7 @@ enum OpCodes
CMSG_PING = 476, CMSG_PING = 476,
SMSG_PONG = 477, SMSG_PONG = 477,
SMSG_CLEAR_COOLDOWN = 478, SMSG_CLEAR_COOLDOWN = 478,
SMSG_GAMEOBJECT_PAGETEXT = 479, // uint64 guid SMSG_GAMEOBJECT_PAGETEXT = 479, // uint64 guid
CMSG_SETSHEATHED = 480, CMSG_SETSHEATHED = 480,
SMSG_COOLDOWN_CHEAT = 481, SMSG_COOLDOWN_CHEAT = 481,
SMSG_SPELL_DELAYED = 482, SMSG_SPELL_DELAYED = 482,
@ -522,19 +516,15 @@ enum OpCodes
SMSG_PLAYER_MACRO_OBSOLETE = 484, SMSG_PLAYER_MACRO_OBSOLETE = 484,
CMSG_GHOST = 485, CMSG_GHOST = 485,
CMSG_GM_INVIS = 486, CMSG_GM_INVIS = 486,
SMSG_INVALID_PROMOTION_CODE = 487, // Couldn't validate code, please try again.
//CMSG_SCREENSHOT = 487, //OBSOLETE
SMSG_INVALID_PROMOTION_CODE = 487, // Couldn't validate code, please try again.
MSG_GM_BIND_OTHER = 488, MSG_GM_BIND_OTHER = 488,
MSG_GM_SUMMON = 489, MSG_GM_SUMMON = 489,
SMSG_ITEM_TIME_UPDATE = 490, // uint64 guid + uint32 time SMSG_ITEM_TIME_UPDATE = 490, // uint64 guid + uint32 time
SMSG_ITEM_ENCHANT_TIME_UPDATE = 491, SMSG_ITEM_ENCHANT_TIME_UPDATE = 491,
SMSG_AUTH_CHALLENGE = 492, SMSG_AUTH_CHALLENGE = 492,
CMSG_AUTH_SESSION = 493, CMSG_AUTH_SESSION = 493,
SMSG_AUTH_RESPONSE = 494, SMSG_AUTH_RESPONSE = 494,
MSG_GM_SHOWLABEL = 495, MSG_GM_SHOWLABEL = 495,
//MSG_ADD_DYNAMIC_TARGET = 496, //OBSOLETE
MSG_ADD_DYNAMIC_TARGET_OBSOLETE = 496, MSG_ADD_DYNAMIC_TARGET_OBSOLETE = 496,
MSG_SAVE_GUILD_EMBLEM = 497, MSG_SAVE_GUILD_EMBLEM = 497,
MSG_TABARDVENDOR_ACTIVATE = 498, MSG_TABARDVENDOR_ACTIVATE = 498,
@ -576,7 +566,7 @@ enum OpCodes
MSG_CORPSE_QUERY = 534, MSG_CORPSE_QUERY = 534,
CMSG_GMTICKET_DELETETICKET = 535, CMSG_GMTICKET_DELETETICKET = 535,
SMSG_GMTICKET_DELETETICKET = 536, SMSG_GMTICKET_DELETETICKET = 536,
SMSG_CHAT_WRONG_FACTION = 537, // You can only whisper to the members of your alliance. SMSG_CHAT_WRONG_FACTION = 537, // You can only whisper to the members of your alliance.
CMSG_GMTICKET_SYSTEMSTATUS = 538, CMSG_GMTICKET_SYSTEMSTATUS = 538,
SMSG_GMTICKET_SYSTEMSTATUS = 539, SMSG_GMTICKET_SYSTEMSTATUS = 539,
CMSG_SPIRIT_HEALER_ACTIVATE = 540, CMSG_SPIRIT_HEALER_ACTIVATE = 540,
@ -634,8 +624,6 @@ enum OpCodes
SMSG_SPELLNONMELEEDAMAGELOG = 592, SMSG_SPELLNONMELEEDAMAGELOG = 592,
CMSG_LEARN_TALENT = 593, CMSG_LEARN_TALENT = 593,
SMSG_RESURRECT_FAILED = 594, SMSG_RESURRECT_FAILED = 594,
//CMSG_ENABLE_PVP = 595, //OBSOLETE
CMSG_TOGGLE_PVP = 595, CMSG_TOGGLE_PVP = 595,
SMSG_ZONE_UNDER_ATTACK = 596, SMSG_ZONE_UNDER_ATTACK = 596,
MSG_AUCTION_HELLO = 597, MSG_AUCTION_HELLO = 597,
@ -680,8 +668,6 @@ enum OpCodes
SMSG_DAMAGE_CALC_LOG = 636, SMSG_DAMAGE_CALC_LOG = 636,
CMSG_ENABLE_DAMAGE_LOG = 637, CMSG_ENABLE_DAMAGE_LOG = 637,
CMSG_GROUP_CHANGE_SUB_GROUP = 638, CMSG_GROUP_CHANGE_SUB_GROUP = 638,
//SMSG_RAID_MEMBER_STATS = 639, //OBSOLETE
CMSG_REQUEST_PARTY_MEMBER_STATS = 639, CMSG_REQUEST_PARTY_MEMBER_STATS = 639,
CMSG_GROUP_SWAP_SUB_GROUP = 640, CMSG_GROUP_SWAP_SUB_GROUP = 640,
CMSG_RESET_FACTION_CHEAT = 641, CMSG_RESET_FACTION_CHEAT = 641,
@ -689,7 +675,7 @@ enum OpCodes
CMSG_AUTOBANK_ITEM = 643, CMSG_AUTOBANK_ITEM = 643,
MSG_QUERY_NEXT_MAIL_TIME = 644, MSG_QUERY_NEXT_MAIL_TIME = 644,
SMSG_RECEIVED_MAIL = 645, SMSG_RECEIVED_MAIL = 645,
SMSG_RAID_GROUP_ONLY = 646, // You are not in this instance group. You will be teleported to %s in %u Minites. uint32 time(milliseconds)+uint32 unk SMSG_RAID_GROUP_ONLY = 646, // You are not in this instance group. You will be teleported to %s in %u Minites. uint32 time(milliseconds)+uint32 unk
CMSG_SET_DURABILITY_CHEAT = 647, CMSG_SET_DURABILITY_CHEAT = 647,
CMSG_SET_PVP_RANK_CHEAT = 648, CMSG_SET_PVP_RANK_CHEAT = 648,
CMSG_ADD_PVP_MEDAL_CHEAT = 649, CMSG_ADD_PVP_MEDAL_CHEAT = 649,
@ -704,11 +690,11 @@ enum OpCodes
CMSG_MEETINGSTONE_JOIN = 658, CMSG_MEETINGSTONE_JOIN = 658,
CMSG_MEETINGSTONE_LEAVE = 659, CMSG_MEETINGSTONE_LEAVE = 659,
CMSG_MEETINGSTONE_CHEAT = 660, CMSG_MEETINGSTONE_CHEAT = 660,
SMSG_MEETINGSTONE_SETQUEUE = 661, // You have left the queue to join a party for %s. SMSG_MEETINGSTONE_SETQUEUE = 661, // You have left the queue to join a party for %s.
CMSG_MEETINGSTONE_INFO = 662, CMSG_MEETINGSTONE_INFO = 662,
SMSG_MEETINGSTONE_COMPLETE = 663, // Your group is complete, you have left the LFG matchmaking system. SMSG_MEETINGSTONE_COMPLETE = 663, // Your group is complete, you have left the LFG matchmaking system.
SMSG_MEETINGSTONE_IN_PROGRESS = 664, // You still seeking more members through LFG matchmaking system., empty? SMSG_MEETINGSTONE_IN_PROGRESS = 664, // You still seeking more members through LFG matchmaking system., empty?
SMSG_MEETINGSTONE_MEMBER_ADDED = 665, // %s has been added to the group by the LFG matchmaking system. SMSG_MEETINGSTONE_MEMBER_ADDED = 665, // %s has been added to the group by the LFG matchmaking system.
CMSG_GMTICKETSYSTEM_TOGGLE = 666, CMSG_GMTICKETSYSTEM_TOGGLE = 666,
CMSG_CANCEL_GROWTH_AURA = 667, CMSG_CANCEL_GROWTH_AURA = 667,
SMSG_CANCEL_AUTO_REPEAT = 668, SMSG_CANCEL_AUTO_REPEAT = 668,
@ -722,30 +708,28 @@ enum OpCodes
SMSG_LOOT_MASTER_LIST = 676, SMSG_LOOT_MASTER_LIST = 676,
SMSG_SET_FORCED_REACTIONS = 677, SMSG_SET_FORCED_REACTIONS = 677,
SMSG_SPELL_FAILED_OTHER = 678, SMSG_SPELL_FAILED_OTHER = 678,
SMSG_GAMEOBJECT_RESET_STATE = 679, // uint64 guid SMSG_GAMEOBJECT_RESET_STATE = 679, // uint64 guid
CMSG_REPAIR_ITEM = 680, CMSG_REPAIR_ITEM = 680,
SMSG_CHAT_PLAYER_NOT_FOUND = 681, SMSG_CHAT_PLAYER_NOT_FOUND = 681,
MSG_TALENT_WIPE_CONFIRM = 682, MSG_TALENT_WIPE_CONFIRM = 682,
SMSG_SUMMON_REQUEST = 683, // uint64 guid + uint32 area/zoneid + uint32 time(milliseconds?) SMSG_SUMMON_REQUEST = 683, // uint64 guid + uint32 area/zoneid + uint32 time(milliseconds?)
CMSG_SUMMON_RESPONSE = 684, CMSG_SUMMON_RESPONSE = 684,
MSG_MOVE_TOGGLE_GRAVITY_CHEAT = 685, MSG_MOVE_TOGGLE_GRAVITY_CHEAT = 685,
SMSG_MONSTER_MOVE_TRANSPORT = 686, SMSG_MONSTER_MOVE_TRANSPORT = 686,
SMSG_PET_BROKEN = 687, // Your pet has run away (:D) SMSG_PET_BROKEN = 687, // Your pet has run away (:D)
MSG_MOVE_FEATHER_FALL = 688, MSG_MOVE_FEATHER_FALL = 688,
MSG_MOVE_WATER_WALK = 689, MSG_MOVE_WATER_WALK = 689,
CMSG_SERVER_BROADCAST = 690, CMSG_SERVER_BROADCAST = 690,
CMSG_SELF_RES = 691, // only if PLAYER_SELF_RES_SPELL field != 0 CMSG_SELF_RES = 691, // only if PLAYER_SELF_RES_SPELL field != 0
SMSG_FEIGN_DEATH_RESISTED = 692, // Resisted SMSG_FEIGN_DEATH_RESISTED = 692, // Resisted
CMSG_RUN_SCRIPT = 693, CMSG_RUN_SCRIPT = 693,
SMSG_SCRIPT_MESSAGE = 694, SMSG_SCRIPT_MESSAGE = 694,
SMSG_DUEL_COUNTDOWN = 695, SMSG_DUEL_COUNTDOWN = 695,
SMSG_AREA_TRIGGER_MESSAGE = 696, SMSG_AREA_TRIGGER_MESSAGE = 696,
CMSG_TOGGLE_HELM = 697, CMSG_TOGGLE_HELM = 697,
CMSG_TOGGLE_CLOAK = 698, CMSG_TOGGLE_CLOAK = 698,
SMSG_MEETINGSTONE_JOINFAILED = 699, // 1 - must be party leader, 3 - can't use while in raid
//SMSG_SPELL_REFLECTED = 699, //OBSOLETE SMSG_PLAYER_SKINNED = 700, // uint8 0x00 Insignia taken - You can only resurrect at the graveyard
SMSG_MEETINGSTONE_JOINFAILED = 699, // 1 - must be party leader, 3 - can't use while in raid
SMSG_PLAYER_SKINNED = 700, // uint8 0x00 Insignia taken - You can only resurrect at the graveyard
SMSG_DURABILITY_DAMAGE_DEATH = 701, SMSG_DURABILITY_DAMAGE_DEATH = 701,
CMSG_SET_EXPLORATION = 702, CMSG_SET_EXPLORATION = 702,
CMSG_SET_ACTIONBAR_TOGGLES = 703, CMSG_SET_ACTIONBAR_TOGGLES = 703,
@ -755,12 +739,12 @@ enum OpCodes
SMSG_UPDATE_WORLD_STATE = 707, SMSG_UPDATE_WORLD_STATE = 707,
CMSG_ITEM_NAME_QUERY = 708, CMSG_ITEM_NAME_QUERY = 708,
SMSG_ITEM_NAME_QUERY_RESPONSE = 709, SMSG_ITEM_NAME_QUERY_RESPONSE = 709,
SMSG_PET_ACTION_FEEDBACK = 710, // uint8 0x04 - unk, 0x01 - pet dead, 0x2 - no target, 0x3 can't attack SMSG_PET_ACTION_FEEDBACK = 710, // uint8 0x04 - unk, 0x01 - pet dead, 0x2 - no target, 0x3 can't attack
CMSG_CHAR_RENAME = 711, CMSG_CHAR_RENAME = 711,
SMSG_CHAR_RENAME = 712, SMSG_CHAR_RENAME = 712,
CMSG_MOVE_SPLINE_DONE = 713, CMSG_MOVE_SPLINE_DONE = 713,
CMSG_MOVE_FALL_RESET = 714, CMSG_MOVE_FALL_RESET = 714,
SMSG_INSTANCE_SAVE_CREATED = 715, // You are now saved to this instance SMSG_INSTANCE_SAVE_CREATED = 715, // You are now saved to this instance
SMSG_RAID_INSTANCE_INFO = 716, SMSG_RAID_INSTANCE_INFO = 716,
CMSG_REQUEST_RAID_INFO = 717, CMSG_REQUEST_RAID_INFO = 717,
CMSG_MOVE_TIME_SKIPPED = 718, CMSG_MOVE_TIME_SKIPPED = 718,
@ -784,14 +768,12 @@ enum OpCodes
MSG_PVP_LOG_DATA = 736, MSG_PVP_LOG_DATA = 736,
CMSG_LEAVE_BATTLEFIELD = 737, CMSG_LEAVE_BATTLEFIELD = 737,
CMSG_AREA_SPIRIT_HEALER_QUERY = 738, CMSG_AREA_SPIRIT_HEALER_QUERY = 738,
CMSG_AREA_SPIRIT_HEALER_QUEUE = 739, // WTF? CMSG_AREA_SPIRIT_HEALER_QUEUE = 739,
SMSG_AREA_SPIRIT_HEALER_TIME = 740, // uint64 guid+uint32 time? SMSG_AREA_SPIRIT_HEALER_TIME = 740, // uint64 guid+uint32 time
//CMSG_GM_UNTEACH = 739, // WTF? CMSG_GM_UNTEACH = 741,
//SMSG_HARDWARE_SURVEY_REQUEST = 740, // WTF?
CMSG_HARDWARE_SURVEY_RESULTS = 741,
SMSG_WARDEN_DATA = 742, SMSG_WARDEN_DATA = 742,
CMSG_WARDEN_DATA = 743, CMSG_WARDEN_DATA = 743,
SMSG_GROUP_JOINED_BATTLEGROUND = 744, // uint32 0xfffffffc, probably different error messages... SMSG_GROUP_JOINED_BATTLEGROUND = 744, // uint32 0xfffffffc, probably different error messages...
MSG_BATTLEGROUND_PLAYER_POSITIONS = 745, MSG_BATTLEGROUND_PLAYER_POSITIONS = 745,
CMSG_PET_STOP_ATTACK = 746, CMSG_PET_STOP_ATTACK = 746,
SMSG_BINDER_CONFIRM = 747, SMSG_BINDER_CONFIRM = 747,
@ -809,27 +791,27 @@ enum OpCodes
SMSG_MINIGAME_STATE = 759, SMSG_MINIGAME_STATE = 759,
CMSG_MINIGAME_MOVE = 760, CMSG_MINIGAME_MOVE = 760,
SMSG_MINIGAME_MOVE_FAILED = 761, SMSG_MINIGAME_MOVE_FAILED = 761,
SMSG_INSTANCE_RESET_SCHEDULED = 762, // WARNING! %s is scheduled to reset in %u minutes! and other messages... SMSG_INSTANCE_RESET_SCHEDULED = 762, // WARNING! %s is scheduled to reset in %u minutes! and other messages...
SMSG_COMPRESSED_MOVE = 763, SMSG_COMPRESSED_MOVE = 763,
CMSG_GUILD_CHANGEINFO = 764, CMSG_GUILD_CHANGEINFO = 764,
SMSG_UNKNOWN_765 = 765, // Trial accounts can not send unlimited tells, you must wait before you can send tells to more players. SMSG_TRIAL_RESTRICTED = 765, // Trial accounts cannot send unlimited tells, you must wait before you can send tells to more players.
SMSG_SET_MOVE_SPEED = 766, // GUID + float speed, move speed, except swim/turn/fly SMSG_SET_MOVE_SPEED = 766, // GUID + float speed, move speed, except swim/turn/fly
SMSG_SET_RUN_BACK_SPEED = 767, // GUID + float speed, run back speed SMSG_SET_RUN_BACK_SPEED = 767, // GUID + float speed, run back speed
SMSG_SET_SWIM_SPEED = 768, // GUID + float speed, swim and swim back speed SMSG_SET_SWIM_SPEED = 768, // GUID + float speed, swim and swim back speed
// 769 // 769
SMSG_SET_SWIM_BACK_SPEED = 770, // swim back speed SMSG_SET_SWIM_BACK_SPEED = 770, // swim back speed
SMSG_SET_TURN_RATE = 771, // turn rate (note: client crashes if fly mode enabled, and turn rate = 0) SMSG_SET_TURN_RATE = 771, // turn rate (note: client crashes if fly mode enabled, and turn rate = 0)
SMSG_UNKNOWN_772 = 772, // packed GUID SMSG_UNKNOWN_772 = 772, // packed GUID
SMSG_UNKNOWN_773 = 773, // set movement flag 0x20000000 SMSG_UNKNOWN_773 = 773, // set movement flag 0x20000000 (safe fall)
SMSG_UNKNOWN_774 = 774, // stop effect of 773 opcode SMSG_UNKNOWN_774 = 774, // stop effect of 773 opcode
SMSG_UNKNOWN_775 = 775, // movement related, looks like hover, movement flag 0x40000000, we can't jump if we are lands SMSG_UNKNOWN_775 = 775, // movement related, looks like hover, movement flag 0x40000000, we can't jump if we are lands
SMSG_UNKNOWN_776 = 776, // stop effect of 775 opcode SMSG_UNKNOWN_776 = 776, // stop effect of 775 opcode
SMSG_MOVE_SET_WATERWALK = 777, // packed GUID, set movement flag 0x10000000, waterwalking... SMSG_MOVE_SET_WATERWALK = 777, // packed GUID, set movement flag 0x10000000, waterwalking...
SMSG_MOVE_STOP_WATERWALK = 778, // packed GUID, stop effect of 777 opcode SMSG_MOVE_STOP_WATERWALK = 778, // packed GUID, stop effect of 777 opcode
SMSG_UNKNOWN_779 = 779, // packed guid, change animation to swim/fly like SMSG_UNKNOWN_779 = 779, // packed guid, change animation to swim/fly like
SMSG_UNKNOWN_780 = 780, // packed guid SMSG_UNKNOWN_780 = 780, // packed guid
SMSG_MOVE_STOP_WALK = 781, // packed guid, remove 0x100 movement flag (walk) SMSG_MOVE_STOP_WALK = 781, // packed guid, remove 0x100 movement flag (walk)
SMSG_MOVE_START_WALK = 782, // set 0x100 movement flag (walk) SMSG_MOVE_START_WALK = 782, // set 0x100 movement flag (walk)
// 783 // 783
// 784 // 784
// 785 // 785
@ -840,32 +822,32 @@ enum OpCodes
// 790 // 790
CMSG_FIELD_WATCHED_FACTION_INACTIVE = 791, CMSG_FIELD_WATCHED_FACTION_INACTIVE = 791,
CMSG_FIELD_WATCHED_FACTION_SHOW_BAR = 792, CMSG_FIELD_WATCHED_FACTION_SHOW_BAR = 792,
SMSG_UNKNOWN_793 = 793, // packed guid + uint32 SMSG_UNKNOWN_793 = 793, // packed guid + uint32 unk
SMSG_UNKNOWN_794 = 794, // packed guid, movement related, set 0x1000 movement flag, all speed to 0, except turn rate SMSG_UNKNOWN_794 = 794, // packed guid, movement related, set 0x1000 movement flag, all speed to 0, except turn rate
// 795 // 795
SMSG_UNKNOWN_796 = 796, // uint64, guid? SMSG_UNKNOWN_796 = 796, // uint64, guid, chat related?
CMSG_RESET_INSTANCES = 797, // reset instances, empty CMSG_RESET_INSTANCES = 797, // reset instances, empty
SMSG_RESET_INSTANCES_RESULT = 798, // uint32 mapid, chat message: %s has been reset. SMSG_RESET_INSTANCES_SUCCESS = 798, // uint32 mapid, chat message: %s has been reset.
// 799 SMSG_RESET_INSTANCES_FAILED = 799, // uint32 reason, uint32 mapid
SMSG_UNKNOWN_800 = 800, // uint32 mapid, instance related SMSG_UNKNOWN_800 = 800, // uint32 mapid, instance related (save?)
MSG_RAID_ICON_TARGET = 801, // uint8+uint8+uint64 guid MSG_RAID_ICON_TARGET = 801, // uint8+uint8+uint64 guid or only uint8(0x01)
MSG_RAID_READY_CHECK = 802, // uint64+uint8 MSG_RAID_READY_CHECK = 802, // uint64+uint8
// 803 // 803
SMSG_AI_UNKNOWN = 804, // GUID + uint32, looks like SMSG_AI_REACTION SMSG_PET_ACTION_SOUND = 804, // GUID + uint32, looks like SMSG_AI_REACTION (pet action sound?)
SMSG_UNKNOWN_805 = 805, // uint32 unk + x, y, z SMSG_PET_DISMISS_SOUND = 805, // uint32 unk + x, y, z (pet dismiss sound?)
// 806 // 806
// 807 // 807
SMSG_GM_SURVEY_REQUEST = 808, // uint32, 1 - causes client get ticket request, 2 - hide, 3 - show SMSG_GM_SURVEY_REQUEST = 808, // uint32, 1 - causes client get ticket request, 2 - hide, 3 - show
MSG_SET_DUNGEON_DIFFICULTY = 809, // uint32+uint32+uint32 MSG_SET_DUNGEON_DIFFICULTY = 809, // uint32+uint32+uint32
CMSG_GM_SURVEY_RESULTS = 810, CMSG_GM_SURVEY_RESULTS = 810, // script function named GMSurveySubmit()
SMSG_UNKNOWN_811 = 811, // uint32, 0x0, SMSG_INSTANCE_RESET_ACTIVATE ? SMSG_UNKNOWN_811 = 811, // uint32, 0x0, SMSG_INSTANCE_RESET_ACTIVATE ?
// 812 // 812
// 813 // 813
// 814 // 814
SMSG_UNKNOWN_815 = 815, // spell related, uint64 guid + spellid SMSG_SPELL_INSTA_KILL_SELF = 815, // spell related, uint64 guid + spellid (You are killed by %s(spell_name))
SMSG_UNKNOWN_816 = 816, // spell related, uint64 guid + spellid + uint32 unk + uint64 guid (target?) SMSG_UNKNOWN_816 = 816, // spell related, uint64 guid + spellid + uint32 count + for(count) uint64 guid (target?)
// 817 // 817
SMSG_UNKNOWN_818 = 818, // 2.0.8, received before server MOTD, strange regexp sequence, looks like anti spam filter for chat messages... SMSG_ANTISPAM = 818, // 2.0.8, received before server MOTD, strange regexp sequence, looks like anti spam filter for chat messages...
// 819 // 819
// 820 // 820
// 821 // 821
@ -873,39 +855,39 @@ enum OpCodes
// 823 // 823
// 824 // 824
// 825 // 825
SMSG_OUTDOORPVP_NOTIFY = 826, // looks like chat packets SMSG_OUTDOORPVP_NOTIFY = 826, // looks like chat packets
SMSG_OUTDOORPVP_NOTIFY2 = 827, // may be it's changed to 826? // 827
// 828 // 828
SMSG_MOTD = 829, // server MOTD message, uint32 + message SMSG_MOTD = 829, // server MOTD message, uint32 + message
// 830 // 830
// 831 // 831
// 832 // 832
SMSG_UNKNOWN_833 = 833, // teleport SMSG_UNKNOWN_833 = 833, // teleport/movement opcode
SMSG_UNKNOWN_834 = 834, // teleport SMSG_UNKNOWN_834 = 834, // teleport/movement opcode
SMSG_FLY_MODE_START = 835, // packed guid + uint32, start fly SMSG_FLY_MODE_START = 835, // packed guid + uint32, start fly
SMSG_FLY_MODE_STOP = 836, // packed guid + uint32, stop fly SMSG_FLY_MODE_STOP = 836, // packed guid + uint32, stop fly
CMSG_MOVE_FLY_MODE_CHANGE_ACK = 837, // movement related, fly on/off ack CMSG_MOVE_FLY_MODE_CHANGE_ACK = 837, // movement related, fly on/off ack
CMSG_MOVE_FLY_STATE_CHANGE = 838, // movement related, fly start/stop(land) ack, may be MSG MSG_MOVE_FLY_STATE_CHANGE = 838, // movement related, fly start/stop(land) ack, may be MSG
CMSG_SOCKET_ITEM = 839, // click on "Socket Gems" button in Jewelcrafting UI, contains uint64 item guid + 3 x uint64 gems guid's CMSG_SOCKET_ITEM = 839, // click on "Socket Gems" button in Jewelcrafting UI, contains uint64 item guid + 3 x uint64 gems guid's
// 840 // 840, CMSG?
SMSG_ARENA_TEAM_COMMAND_RESULT = 841, // uint32(5)+uint16(0)+uint32(9) You not in arena team that size SMSG_ARENA_TEAM_COMMAND_RESULT = 841, // uint32 command, name1, name2, uint32 errorcode
// 842 // 842
CMSG_ARENA_TEAM_QUERY = 843, CMSG_ARENA_TEAM_QUERY = 843,
SMSG_ARENA_TEAM_QUERY_RESPONSE = 844, SMSG_ARENA_TEAM_QUERY_RESPONSE = 844,
CMSG_ARENA_TEAM_ROSTER = 845, CMSG_ARENA_TEAM_ROSTER = 845,
SMSG_ARENA_TEAM_ROSTER = 846, SMSG_ARENA_TEAM_ROSTER = 846,
CMSG_ARENA_TEAM_ADD_MEMBER = 847, CMSG_ARENA_TEAM_INVITE_BYNAME = 847,
SMSG_ARENA_TEAM_INVITE = 848, SMSG_ARENA_TEAM_INVITE = 848,
CMSG_ARENA_TEAM_INVITE_ACCEPT = 849, CMSG_ARENA_TEAM_ACCEPT = 849,
CMSG_ARENA_TEAM_INVITE_DECLINE = 850, CMSG_ARENA_TEAM_DECLINE = 850,
CMSG_ARENA_TEAM_LEAVE = 851, CMSG_ARENA_TEAM_LEAVE = 851,
CMSG_ARENA_TEAM_REMOVE_FROM_TEAM = 852, CMSG_ARENA_TEAM_UNINVITE_BYNAME = 852,
CMSG_ARENA_TEAM_DISBAND = 853, CMSG_ARENA_TEAM_DISBAND = 853,
CMSG_ARENA_TEAM_PROMOTE_TO_CAPTAIN = 854, // also must be demote opcode... CMSG_ARENA_TEAM_SET_LEADER_BYNAME = 854, // also must be demote opcode...
SMSG_UNKNOWN_855 = 855, // guild related... SMSG_ARENA_TEAM_EVENT = 855, // arena team event
// 856 CMSG_ARENAMASTER_JOIN = 856,
MSG_MOVE_START_FLY_UP = 857, // movement related, fly up, possible MSG MSG_MOVE_START_FLY_UP = 857, // movement related, fly up, possible MSG
MSG_MOVE_STOP_FLY_UP = 858, // movement related, stop fly up, possible MSG MSG_MOVE_STOP_FLY_UP = 858, // movement related, stop fly up, possible MSG
SMSG_ARENA_TEAM_STATS = 859, SMSG_ARENA_TEAM_STATS = 859,
CMSG_LFG_SET_AUTOJOIN = 860, CMSG_LFG_SET_AUTOJOIN = 860,
CMSG_LFG_UNSET_AUTOJOIN = 861, CMSG_LFG_UNSET_AUTOJOIN = 861,
@ -913,116 +895,167 @@ enum OpCodes
CMSG_LFM_UNSET_AUTOADD = 863, CMSG_LFM_UNSET_AUTOADD = 863,
CMSG_LFG_INVITE_ACCEPT = 864, CMSG_LFG_INVITE_ACCEPT = 864,
CMSG_LFG_INVITE_CANCEL = 865, CMSG_LFG_INVITE_CANCEL = 865,
// 866 // 866, CMSG?
CMSG_LOOKING_FOR_GROUP_CLEAR = 867, CMSG_LOOKING_FOR_GROUP_CLEAR = 867,
CMSG_SET_LOOKING_FOR_NONE = 868, CMSG_SET_LOOKING_FOR_NONE = 868,
CMSG_SET_LOOKING_FOR_MORE = 869, CMSG_SET_LOOKING_FOR_MORE = 869,
CMSG_SET_COMMENTARY = 870, CMSG_SET_COMMENTARY = 870,
SMSG_LFG_871 = 871, // Matchmaking timed out. SMSG_LFG_MATCHMAKING_TIMEDOUT = 871, // Matchmaking timed out.
SMSG_LFG_872 = 872, // Matchmaking timed out waiting for other player. SMSG_LFG_MATCHMAKING_OTHER_TIMEDOUT = 872, // Matchmaking timed out waiting for other player.
SMSG_LFG_873 = 873, // Group no longer available. SMSG_LFG_MATCHMAKING_AUTOJOIN_FAILED = 873, // Group no longer available.
SMSG_LFG_874 = 974, // Matched Player(s) have gone offline. SMSG_LFG_MATCHMAKING_AUTOJOIN_FAILED_NO_PLAYER = 874, // Matched Player(s) have gone offline.
// 875 // 875
SMSG_LFG_876 = 876, // LFM eye, in progress, uint16+uint32+uint8?, 3 x uint8(0x0) SMSG_LFG_876 = 876, // LFM eye, in progress, uint16+uint32+uint8?, 3 x uint8(0x0)
SMSG_LFG_877 = 877, // cause client send CMSG_SET_LOOKING_FOR_GROUP, uint32+uint8? SMSG_LFG_877 = 877, // cause client send CMSG_SET_LOOKING_FOR_GROUP, uint32+uint8?
SMSG_LFG_878 = 878, // cause client send CMSG_SET_LOOKING_FOR_GROUP SMSG_LFG_878 = 878, // cause client send CMSG_SET_LOOKING_FOR_GROUP
SMSG_LFG_879 = 879, // LFG eye, cause client send CMSG_SET_LOOKING_FOR_GROUP SMSG_LFG_879 = 879, // LFG eye, cause client send CMSG_SET_LOOKING_FOR_GROUP
SMSG_LFG_INVITE = 880, // show invite dialog: The LFG system has matched you to a group for %s. SMSG_LFG_MATCHMAKING_PENDING_INVITE = 880, // The LFG system has matched you to a group for %s.
SMSG_LFG_881 = 881, // The LFG system is waiting to complete match for %s. SMSG_LFG_MATCHMAKING_PENDING_MATCH = 881, // The LFG system is waiting to complete match for %s.
// 882 // 882
SMSG_CHANGE_TITLE = 883, // uint32 title_id, causes message and visual effect SMSG_CHANGE_TITLE = 883, // uint32 title_id, causes message and visual effect
CMSG_CHOOSE_TITLE = 884, // uint32 title_id CMSG_CHOOSE_TITLE = 884, // uint32 title_id
CMSG_DISMOUNT = 885, // /dismount command CMSG_DISMOUNT = 885, // /dismount command
SMSG_ARENA_TEAM_UNK = 886, SMSG_ARENA_NO_TEAM = 886, // uint32(0) + team type
MSG_INSPECT_ARENA_STATS = 887, MSG_INSPECT_ARENA_STATS = 887,
SMSG_SH_POSITION = 888, // spirit healer position, map/x/y/z, at player death... SMSG_SH_POSITION = 888, // spirit healer position, map/x/y/z, at player death...
CMSG_CANCEL_TEMP_ITEM_ENCHANTMENT = 889, // cancel temporary item enchantment CMSG_CANCEL_TEMP_ITEM_ENCHANTMENT = 889, // cancel temporary item enchantment
// 890 // 890
// 891 // 891
// 892 // 892
// 893 // 893
SMSG_MOVE_SET_FLY_SPEED = 894, // all fly speed, packed guid, uint32 movement_flags, time, x,y,z,o,unk,speed... MSG_MOVE_SET_FLY_SPEED = 894, // all fly speed, packed guid, uint32 movement_flags, time, x,y,z,o,unk,speed...
// 895 // 895
SMSG_MOVE_SET_FLY_BACK_SPEED = 896, MSG_MOVE_SET_FLY_BACK_SPEED = 896,
SMSG_FORCE_FLY_SPEED_CHANGE = 897, // packed guid, uint32, speed SMSG_FORCE_FLY_SPEED_CHANGE = 897, // packed guid, uint32, speed
CMSG_FORCE_FLY_SPEED_CHANGE_ACK = 898, CMSG_FORCE_FLY_SPEED_CHANGE_ACK = 898,
SMSG_FORCE_FLY_BACK_SPEED_CHANGE = 899, SMSG_FORCE_FLY_BACK_SPEED_CHANGE = 899,
CMSG_FORCE_FLY_BACK_SPEED_CHANGE_ACK = 900, CMSG_FORCE_FLY_BACK_SPEED_CHANGE_ACK = 900,
SMSG_MOVE_SET_FLY_SPEED2 = 901, // same as 894, strange, packed guid+speed SMSG_MOVE_SET_FLY_SPEED2 = 901, // same as 894, strange, packed guid+speed
SMSG_MOVE_SET_FLY_BACK_SPEED2 = 902, // same as 896, strange, SMSG_MOVE_SET_FLY_BACK_SPEED2 = 902, // same as 896, strange,
// 903 // 903
// 904 SMSG_FLIGHT_SPLINE_SYNC? SMSG_FLIGHT_SPLINE_SYNC = 904, // uint32 + packed_guid
// 905 CMSG_SET_TAXI_BENCHMARK_MODE = 905,
// 906 // 906
SMSG_REALM_STATE_RESPONSE = 907, // response to 908 opcode, 4 x uint32 + uint8 SMSG_REALM_SPLIT_INFO_RESPONSE = 907, // response to 908 opcode, uint32+uint32+string(date)
CMSG_REALM_STATE_REQUEST = 908, // realm related, uint32+uint32+3*(uint16+uint8), appears at select character screen, uint32 0xFFFFFFFF CMSG_REALM_SPLIT_INFO_REQUEST = 908, // realm related, uint32, appears at select character screen, uint32 0xFFFFFFFF by default
CMSG_MOVE_SHIP_909 = 909, // movement related, transport related(ships) MSG_MOVE_SHIP_909 = 909, // movement related, transport related(ships)
CMSG_GROUP_PROMOTE = 910, // make main-tank / main-assistant CMSG_GROUP_PROMOTE = 910, // make main-tank / main-assistant
// 911 SMSG_ALREADY_IN_ARENA_TEAM = 911, // %s is already in an arena team of that size (uint64 guid)
SMSG_ALLOW_MOVE = 912, // uint32, allow player movement, value increments every time and reset to 0 after far teleport, used for client-server synchronization SMSG_ALLOW_MOVE = 912, // uint32, allow player movement, value increments every time and reset to 0 after far teleport, used for client-server synchronization
CMSG_ALLOW_MOVE_ACK = 913, // client response to SMSG_ALLOW_MOVE CMSG_ALLOW_MOVE_ACK = 913, // client response to SMSG_ALLOW_MOVE (counter + client time)
// 914 // 914
// 915 // 915
// 916 // 916
// 917 // 917
SMSG_UNKNOWN_918 = 918, // chat message: The party leader has attempted to reset the instance you are in. Please zone out to allow the instance to reset. SMSG_RESET_INSTANCE_FAILED_NOTIFY = 918, // chat message: The party leader has attempted to reset the instance you are in. Please zone out to allow the instance to reset.
SMSG_UNKNOWN_919 = 919, // uint8(0)+uint32(0/1)+uint64(unk/guid) SMSG_UNKNOWN_919 = 919, // uint8(0)+uint32(0/1)+uint64(unk/guid)
SMSG_UNKNOWN_920 = 920, // notify message: This system is currently disabled. SMSG_SYSTEM_DISABLED = 920, // notify message: This system is currently disabled.
// 921 // 921
// 922 // 922
// 923 // 923
// 924 // 924
SMSG_SET_COMBO_POINTS = 925, // set combo points SMSG_SET_COMBO_POINTS = 925, // set combo points
// 926 SMSG_VOICE_SESSION = 926,
// 927 SMSG_UNKNOWN_927 = 927, // uint64 guid + uint32 + float?, received after leave voice channel
// 928 // 928
// 929 // 929
// 930 // 930
SMSG_SET_AURA_MULTIPLY = 931, SMSG_SET_AURA_MULTIPLY = 931, // packed_guid + n * (uint8 slot + uint32 spellid + uint32 duration1 + uint32 duration2)
/* SMSG_SET_AURA_SINGLE = 932, // packed_guid + uint8 slot + uint32 spellid + uint32 duration1 + uint32 duration2
packed_guid
block (can repeat):
uint8 index may be it's aura slot? (increments)
uint32 spellid
uint32 duration1 (full?)
uint32 duration2 (remaining?)
*/
SMSG_SET_AURA_SINGLE = 932,
/*
packed_guid
uint8 index may be it's aura slot? (increments)
uint32 spellid
uint32 duration1 (full?)
uint32 duration2 (remaining?)
*/
// 933 // 933
SMSG_CAST_SUCCESS = 934, SMSG_CAST_SUCCESS = 934,
SMSG_UNKNOWN_935 = 935, // teleport/movement opcode MSG_UNKNOWN_935 = 935, // teleport/movement opcode
// 936 // 936
// 937 // 937
// 938 SMSG_UNKNOWN_938 = 938, // uint64, uint64, uint32 spellid, uint32, uint32
// 939 // 939
// 940 SMSG_UNKNOWN_940 = 940, // packed guid (received at spell cast)
SMSG_UNKNOWN_941 = 941, // teleport/movement opcode SMSG_UNKNOWN_941 = 941, // teleport/movement opcode
SMSG_UNKNOWN_942 = 942, // Everyone is Ready! (message) SMSG_READY_CHECK_ALL_READY = 942, // Everyone is Ready! (message)
// 943 CMSG_VOICE_SETTINGS = 943, // uint8 isVoiceEnabled, uint8 isMicrophoneEnabled (id correct for 2.3.0)
// 944 SMSG_VOICE_CHAT_PARENTAL_DISABLE_ALL = 944, // Voice chat has been disabled by parental control
// 945 // 945
// 946 // 946
// 947 // 947
// 948 CMSG_COMMENTATOR_SET_MODE = 948,
// 949 // 949
// 950 CMSG_COMMENTATOR_UPDATE_MAP_INFO = 950,
// 951 // 951
CMSG_UNKNOWN_952 = 952, // response to 942 opcode CMSG_COMMENTATOR_UPDATE_PLAYER_INFO = 952,
CMSG_REPORT_SPAM = 953, // Report Spam chat button CMSG_UNKNOWN_953 = 953, // response to 942 opcode
SMSG_REPORT_SPAM_RESPONSE = 954, // Complaint Registered. (message) //CMSG_REPORT_SPAM = 954, // now(2.3.0) CMSG_COMPLAINT_CHAT
SMSG_ACTIVATE_SPAM_REPORTING = 955, // unk uint8 //SMSG_REPORT_SPAM_RESPONSE = 955, // now(2.3.0) SMSG_COMPLAINT_ADDED
CMSG_COMMENTATOR_EXIT_INSTANCE = 956, // unk uint8
// 957
// 958 clear selection?
// 959
SMSG_UNKNOWN_960 = 960, // uint64 guid, uint32, uint32 (client sedn CMSG_ITEM_QUERY_SINGLE)
// 961
// 962
//SMSG_DISCONNECT_CLIENT = 963, // really?? not
// 964
// 965
CMSG_COMPLAINT_CHAT = 966, // Report Spam chat button
SMSG_COMPLAINT_ADDED = 967, // Complaint Registered. (message)
SMSG_VOICE_SYSTEM_STATUS = 968, // uint8, uint8 (id correct for 2.3.0)
// 969
// 970
CMSG_CHANNEL_SILENT_VOICE = 971,
CMSG_CHANNEL_SILENT_ALL = 972,
CMSG_CHANNEL_UNSILENT_VOICE = 973,
CMSG_CHANNEL_UNSILENT_ALL = 974,
// 975
// 976
CMSG_CHANNEL_ROSTER_QUERY = 977, // string channel name (channel list?)
CMSG_CHANNEL_VOICE_CHAT_QUERY = 978, // uint32, string
CMSG_CHANNEL_INFO_QUERY = 979, // string channel name
SMSG_CHANNEL_INFO_QUERY_RESPONSE = 980, // string channel name, uint8 flags, uint32 count
CMSG_CHANNEL_VOICE_ON = 981, // Enable Voice button in channel context menu
CMSG_CHANNEL_VOICE_OFF = 982, // ??
// 983
// 984
SMSG_CHANNEL_NOTIFY_AVAILABLE_VOICE_SESSION = 985, // 9 bytes unk's + string channel name + uint64 guid, received after join voice channel
CMSG_MUTE_PLAYER = 986, // ??
CMSG_UNMUTE_PLAYER = 987, // ??
CMSG_SILENCE_MEMBER = 988, // ??
CMSG_UNSILENCE_MEMBER = 989, // ??
SMSG_PLAYER_UNSILENCED = 990, // A group leader has restored your voice privileges
SMSG_COMSAT_RECONNECT_ATTEMPT = 991, // Voice chat service restored!
SMSG_COMSAT_DISCONNECT = 992, // Connection lost to voice chat service.
SMSG_COMSAT_CONNECT_FAIL = 993, // Cannot connect to voice chat service.
// 994
// 995
// 996
CMSG_GUILD_BANK = 997, // click on guildbank object, uint64 guid + uint8 unk
CMSG_GUILDBANK_TAB_COLON = 998, // response to 999, uint64 guid + uint8 + uint8
SMSG_GUILD_BANK_LIST = 999, // uint32 + uint32 + uint8 + uint8 + uint16 count1 + uint8 + uint8 count2 + for (count2) { uint8 unk } + uint16 + for(count1) { uint32 counter + uint8 unk }
CMSG_UNKNOWN_1000 = 1000, // uint64 guid, uint8, uint8, uint8 count, for(count) uint8 unk
CMSG_BUY_GUILDBANK_TAB = 1001, // uint64 guid + uint8 unk
// 1002
CMSG_GUILDBANK_DEPOSIT = 1003, // uint64 guid + uint32
CMSG_GUILDBANK_WITHDRAW = 1004, // uint64 guid + uint32
MSG_GUILDBANK_LOG = 1005, // guild bank log? client: empty, server: uint8 count, for count (uint8 unk(type?), uint64 guid, uint32 unk(amount?))
CMSG_CHANNEL_WATCH = 1006, // string channel name
SMSG_PLAYER_JOINED_CHANNEL = 1007, // uint64, uint8, uint8, uint32, string channel name
SMSG_PLAYER_LEFT_CHANNEL = 1008, // uint64, uint8, uint32, string channel name
SMSG_PLAYER_JOINED_CUSTOM_CHANNEL = 1009, // guessed
CMSG_CLEAR_CHANNEL_WATCH = 1010,
SMSG_INSPECT_TALENTS = 1011, // uint32 count, for(count) uint8 unk
// 1012
// 1013
// 1014
CMSG_UNKNOWN_1015 = 1015, // click on NPC with 0x1000000 npc_flag
// 1016
// 1017
// 1018
SMSG_VOICESESSION_FULL = 1019, // The voice session you are attempting to join is full.
MSG_UNKNOWN_1020 = 1020, // probably guild related, client: empty, server: uint32, uint32, uint8, uint32, uint32
MSG_UNKNOWN_1021 = 1021, // guild related
MSG_GUILD_EVENT_LOG = 1022
}; };
//if you add new opcode .. Do NOT forget to change the following define MAX_OPCODE_ID and also add new opcode to table in opcodes.cpp //if you add new opcode .. Do NOT forget to change the following define MAX_OPCODE_ID and also add new opcode to table in opcodes.cpp
#define MAX_OPCODE_ID 955 #define MAX_OPCODE_ID 1023
/// Results of friend related commands /// Results of friend related commands
enum FriendsResult enum FriendsResult
@ -1043,28 +1076,46 @@ enum FriendsResult
FRIEND_IGNORE_NOT_FOUND = 0x0D, FRIEND_IGNORE_NOT_FOUND = 0x0D,
FRIEND_IGNORE_ALREADY = 0x0E, FRIEND_IGNORE_ALREADY = 0x0E,
FRIEND_IGNORE_ADDED = 0x0F, FRIEND_IGNORE_ADDED = 0x0F,
FRIEND_IGNORE_REMOVED = 0x10 FRIEND_IGNORE_REMOVED = 0x10,
// 0x11
// 0x12
// 0x13
// 0x14
// 0x15
FRIEND_MUTE_ADDED = 0x16,
FRIEND_MUTE_REMOVED = 0x17
}; };
/// Non Player Character flags /// Non Player Character flags
enum NPCFlags enum NPCFlags
{ {
UNIT_NPC_FLAG_NONE = 0, UNIT_NPC_FLAG_NONE = 0x00000000,
UNIT_NPC_FLAG_GOSSIP = 1, UNIT_NPC_FLAG_GOSSIP = 0x00000001, // 100%
UNIT_NPC_FLAG_QUESTGIVER = 2, UNIT_NPC_FLAG_QUESTGIVER = 0x00000002, // guessed, probably ok
UNIT_NPC_FLAG_VENDOR = 4, UNIT_NPC_FLAG_UNK1 = 0x00000004,
UNIT_NPC_FLAG_TAXIVENDOR = 8, UNIT_NPC_FLAG_UNK2 = 0x00000008,
UNIT_NPC_FLAG_TRAINER = 16, UNIT_NPC_FLAG_TRAINER = 0x00000010, // 100%
UNIT_NPC_FLAG_SPIRITHEALER = 32, UNIT_NPC_FLAG_TRAINER_CLASS = 0x00000020, // 100%
UNIT_NPC_FLAG_GUARD = 64, //UQ1: ??? We can use as guard flag?, used by blizz for BattleGround spirit guides... (entry 13116 and 13117) UNIT_NPC_FLAG_TRAINER_PROFESSION = 0x00000040, // 100%
UNIT_NPC_FLAG_INNKEEPER = 128, UNIT_NPC_FLAG_VENDOR = 0x00000080, // 100%
UNIT_NPC_FLAG_BANKER = 256, UNIT_NPC_FLAG_VENDOR_AMMO = 0x00000100, // 100%, general goods vendor
UNIT_NPC_FLAG_PETITIONER = 512, // 1024+512 = guild petitions, 512 = arena team petitions UNIT_NPC_FLAG_VENDOR_FOOD = 0x00000200, // 100%
UNIT_NPC_FLAG_TABARDVENDOR = 1024, UNIT_NPC_FLAG_VENDOR_POISON = 0x00000400, // guessed
UNIT_NPC_FLAG_BATTLEFIELDPERSON = 2048, UNIT_NPC_FLAG_VENDOR_REAGENT = 0x00000800, // 100%
UNIT_NPC_FLAG_AUCTIONEER = 4096, UNIT_NPC_FLAG_REPAIR = 0x00001000, // 100%
UNIT_NPC_FLAG_STABLE = 8192, UNIT_NPC_FLAG_FLIGHTMASTER = 0x00002000, // 100%
UNIT_NPC_FLAG_ARMORER = 16384, UNIT_NPC_FLAG_SPIRITHEALER = 0x00004000, // guessed
UNIT_NPC_FLAG_SPIRITGUIDE = 0x00008000, // guessed
UNIT_NPC_FLAG_INNKEEPER = 0x00010000, // 100%
UNIT_NPC_FLAG_BANKER = 0x00020000, // 100%
UNIT_NPC_FLAG_PETITIONER = 0x00040000, // 100% 0xC0000 = guild petitions, 0x40000 = arena team petitions
UNIT_NPC_FLAG_TABARDDESIGNER = 0x00080000, // 100%
UNIT_NPC_FLAG_BATTLEMASTER = 0x00100000, // 100%
UNIT_NPC_FLAG_AUCTIONEER = 0x00200000, // 100%
UNIT_NPC_FLAG_STABLEMASTER = 0x00400000, // 100%
UNIT_NPC_FLAG_GUILD_BANKER = 0x00800000, // cause client to send 997 opcode
UNIT_NPC_FLAG_UNK3 = 0x01000000, // cause client to send 1015 opcode
UNIT_NPC_FLAG_GUARD = 0x10000000, // custom flag for guards
}; };
#endif #endif
/// @} /// @}

View File

@ -346,7 +346,13 @@ enum SpellEffects
SPELL_EFFECT_141 = 141, SPELL_EFFECT_141 = 141,
SPELL_EFFECT_142 = 142, SPELL_EFFECT_142 = 142,
SPELL_EFFECT_143 = 143, SPELL_EFFECT_143 = 143,
TOTAL_SPELL_EFFECTS = 144 SPELL_EFFECT_144 = 144,
SPELL_EFFECT_145 = 145,
SPELL_EFFECT_146 = 146,
SPELL_EFFECT_147 = 147,
SPELL_EFFECT_148 = 148,
SPELL_EFFECT_149 = 149,
TOTAL_SPELL_EFFECTS = 150
}; };
enum CharacterStates enum CharacterStates
@ -395,7 +401,10 @@ enum GameobjectTypes
GAMEOBJECT_TYPE_CAPTURE_POINT = 29, GAMEOBJECT_TYPE_CAPTURE_POINT = 29,
GAMEOBJECT_TYPE_AURA_GENERATOR = 30, GAMEOBJECT_TYPE_AURA_GENERATOR = 30,
GAMEOBJECT_TYPE_DUNGEON_DIFFICULTY = 31, GAMEOBJECT_TYPE_DUNGEON_DIFFICULTY = 31,
MAX_GAMEOBJECT_TYPE = 32 // sending to client this or greater value can crash client. GAMEOBJECT_TYPE_DO_NOT_USE_YET = 32,
GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING = 33,
GAMEOBJECT_TYPE_GUILD_BANK = 34,
MAX_GAMEOBJECT_TYPE = 35 // sending to client this or greater value can crash client.
}; };
enum TextEmote enum TextEmote
@ -658,7 +667,28 @@ enum Emote
EMOTE_ONESHOT_ATTACKOFFPIERCE = 390, EMOTE_ONESHOT_ATTACKOFFPIERCE = 390,
EMOTE_STATE_ROAR = 391, EMOTE_STATE_ROAR = 391,
EMOTE_STATE_LAUGH = 392, EMOTE_STATE_LAUGH = 392,
EMOTE_ONESHOT_CREATURE_SPECIAL = 393 EMOTE_ONESHOT_CREATURE_SPECIAL = 393,
EMOTE_ONESHOT_JUMPLANDRUN = 394,
EMOTE_ONESHOT_JUMPEND = 395,
EMOTE_ONESHOT_TALK_NOSHEATHE = 396,
EMOTE_ONESHOT_POINT_NOSHEATHE = 397,
EMOTE_STATE_CANNIBALIZE = 398,
EMOTE_ONESHOT_JUMPSTART = 399,
EMOTE_STATE_DANCESPECIAL = 400,
EMOTE_ONESHOT_DANCESPECIAL = 401,
EMOTE_ONESHOT_CUSTOMSPELL01 = 402,
EMOTE_ONESHOT_CUSTOMSPELL02 = 403,
EMOTE_ONESHOT_CUSTOMSPELL03 = 404,
EMOTE_ONESHOT_CUSTOMSPELL04 = 405,
EMOTE_ONESHOT_CUSTOMSPELL05 = 406,
EMOTE_ONESHOT_CUSTOMSPELL06 = 407,
EMOTE_ONESHOT_CUSTOMSPELL07 = 408,
EMOTE_ONESHOT_CUSTOMSPELL08 = 409,
EMOTE_ONESHOT_CUSTOMSPELL09 = 410,
EMOTE_ONESHOT_CUSTOMSPELL10 = 411,
EMOTE_STATE_EXCLAIM = 412,
EMOTE_STATE_SIT_CHAIR_MED = 415,
EMOTE_STATE_SPELLEFFECT_HOLD = 422
}; };
enum Anim enum Anim
@ -953,7 +983,8 @@ enum CreatureFamily
CREATURE_FAMILY_WARP_STALKER = 32, CREATURE_FAMILY_WARP_STALKER = 32,
CREATURE_FAMILY_SPOREBAT = 33, CREATURE_FAMILY_SPOREBAT = 33,
CREATURE_FAMILY_NETHER_RAY = 34, CREATURE_FAMILY_NETHER_RAY = 34,
CREATURE_FAMILY_SERPENT = 35 CREATURE_FAMILY_SERPENT = 35,
CREATURE_FAMILY_SEA_LION = 36
}; };
enum CreatureEliteType enum CreatureEliteType
@ -1176,13 +1207,14 @@ enum SkillType
enum SkillCategory enum SkillCategory
{ {
SKILL_CATEGORY_ATTRIBUTES = 5, SKILL_CATEGORY_ATTRIBUTES = 5,
SKILL_CATEGORY_WEAPON = 6, SKILL_CATEGORY_WEAPON = 6,
SKILL_CATEGORY_CLASS = 7, SKILL_CATEGORY_CLASS = 7,
SKILL_CATEGORY_ARMOR = 8, SKILL_CATEGORY_ARMOR = 8,
SKILL_CATEGORY_SECONDARY = 9, // secondary professions SKILL_CATEGORY_SECONDARY = 9, // secondary professions
SKILL_CATEGORY_LANGUAGES = 10, SKILL_CATEGORY_LANGUAGES = 10,
SKILL_CATEGORY_PROFESSION = 11 // primary professions SKILL_CATEGORY_PROFESSION = 11, // primary professions
SKILL_CATEGORY_NOT_DISPLAYED = 12
}; };
enum TotemCategory enum TotemCategory

View File

@ -208,7 +208,7 @@ void WorldSession::_HandleUpdateObjectOpcode(WorldPacket& recvPacket)
void WorldSession::_MovementUpdate(uint8 objtypeid, uint64 uguid, WorldPacket& recvPacket) void WorldSession::_MovementUpdate(uint8 objtypeid, uint64 uguid, WorldPacket& recvPacket)
{ {
uint8 flags; uint8 flags,unk8;
uint32 unk32,flags2,time,transtime,higuid; uint32 unk32,flags2,time,transtime,higuid;
float unkfx,unkfy,unkfz,x,y,z,o,tx,ty,tz,to; float unkfx,unkfy,unkfz,x,y,z,o,tx,ty,tz,to;
uint64 transguid; uint64 transguid;
@ -223,7 +223,7 @@ void WorldSession::_MovementUpdate(uint8 objtypeid, uint64 uguid, WorldPacket& r
if(flags & UPDATEFLAG_LIVING) if(flags & UPDATEFLAG_LIVING)
{ {
recvPacket >> flags2 >> time; recvPacket >> flags2 >> unk8 >> time;
} }
logdev("MovementUpdate TypeID=%u GUID="I64FMT" pObj=%X flags=%u flags2=%u",objtypeid,uguid,obj,flags,flags2); logdev("MovementUpdate TypeID=%u GUID="I64FMT" pObj=%X flags=%u flags2=%u",objtypeid,uguid,obj,flags,flags2);

View File

@ -19,308 +19,302 @@
#ifndef _UPDATEFIELDS_AUTO_H #ifndef _UPDATEFIELDS_AUTO_H
#define _UPDATEFIELDS_AUTO_H #define _UPDATEFIELDS_AUTO_H
// Auto generated for version 2.1.3, build 6898 // Auto generated for version 0, 3, 2, 7655
enum EObjectFields enum EObjectFields
{ {
OBJECT_FIELD_GUID = 0x0000, // 2 4 1 OBJECT_FIELD_GUID = 0x0000, // Size: 2, Type: LONG, Flags: PUBLIC
OBJECT_FIELD_TYPE = 0x0002, // 1 1 1 OBJECT_FIELD_TYPE = 0x0002, // Size: 1, Type: INT, Flags: PUBLIC
OBJECT_FIELD_ENTRY = 0x0003, // 1 1 1 OBJECT_FIELD_ENTRY = 0x0003, // Size: 1, Type: INT, Flags: PUBLIC
OBJECT_FIELD_SCALE_X = 0x0004, // 1 3 1 OBJECT_FIELD_SCALE_X = 0x0004, // Size: 1, Type: FLOAT, Flags: PUBLIC
OBJECT_FIELD_PADDING = 0x0005, // 1 1 0 OBJECT_FIELD_PADDING = 0x0005, // Size: 1, Type: INT, Flags: NONE
OBJECT_END = 0x0006, OBJECT_END = 0x0006,
}; };
enum EItemFields enum EItemFields
{ {
ITEM_FIELD_OWNER = 0x0006, // 2 4 1 ITEM_FIELD_OWNER = OBJECT_END + 0x0000, // Size: 2, Type: LONG, Flags: PUBLIC
ITEM_FIELD_CONTAINED = 0x0008, // 2 4 1 ITEM_FIELD_CONTAINED = OBJECT_END + 0x0002, // Size: 2, Type: LONG, Flags: PUBLIC
ITEM_FIELD_CREATOR = 0x000A, // 2 4 1 ITEM_FIELD_CREATOR = OBJECT_END + 0x0004, // Size: 2, Type: LONG, Flags: PUBLIC
ITEM_FIELD_GIFTCREATOR = 0x000C, // 2 4 1 ITEM_FIELD_GIFTCREATOR = OBJECT_END + 0x0006, // Size: 2, Type: LONG, Flags: PUBLIC
ITEM_FIELD_STACK_COUNT = 0x000E, // 1 1 20 ITEM_FIELD_STACK_COUNT = OBJECT_END + 0x0008, // Size: 1, Type: INT, Flags: OWNER_ONLY, UNK2
ITEM_FIELD_DURATION = 0x000F, // 1 1 20 ITEM_FIELD_DURATION = OBJECT_END + 0x0009, // Size: 1, Type: INT, Flags: OWNER_ONLY, UNK2
ITEM_FIELD_SPELL_CHARGES = 0x0010, // 5 1 20 ITEM_FIELD_SPELL_CHARGES = OBJECT_END + 0x000A, // Size: 5, Type: INT, Flags: OWNER_ONLY, UNK2
ITEM_FIELD_FLAGS = 0x0015, // 1 1 1 ITEM_FIELD_FLAGS = OBJECT_END + 0x000F, // Size: 1, Type: INT, Flags: PUBLIC
/* ITEM_FIELD_ENCHANTMENT = OBJECT_END + 0x0010, // Size: 33, Type: INT, Flags: PUBLIC
There is two types of enchantments: property based and suffix based. ITEM_FIELD_PROPERTY_SEED = OBJECT_END + 0x0031, // Size: 1, Type: INT, Flags: PUBLIC
Item can have only one of the two.
Suffix based linked to item.randomproperty_2 field and property based // custom
to item.randomproperty_1 field (item prototype). ITEM_FIELD_SUFFIX_FACTOR = ITEM_FIELD_PROPERTY_SEED,
Suffix based enchantments sent to the client as negative value, in
addition they require ITEM_FIELD_SUFFIX_FACTOR field to be send in ITEM_FIELD_RANDOM_PROPERTIES_ID = OBJECT_END + 0x0032, // Size: 1, Type: INT, Flags: PUBLIC
order to calculate the bonus value. Property based enchantments are send ITEM_FIELD_ITEM_TEXT_ID = OBJECT_END + 0x0033, // Size: 1, Type: INT, Flags: OWNER_ONLY
as positive values and do not require any aditional values since the bonuses ITEM_FIELD_DURABILITY = OBJECT_END + 0x0034, // Size: 1, Type: INT, Flags: OWNER_ONLY, UNK2
are already stored inside spellitemenchantment. Suffix based enchantments uses ITEM_FIELD_MAXDURABILITY = OBJECT_END + 0x0035, // Size: 1, Type: INT, Flags: OWNER_ONLY, UNK2
6-8 fields in EnchantmentSlot while property based uses 8-10 in EnchantmentSlot. ITEM_END = OBJECT_END + 0x0036,
*/
ITEM_FIELD_ENCHANTMENT = 0x0016, // 33 1 1
ITEM_FIELD_PROPERTY_SEED = 0x0037, // 1 1 1
ITEM_FIELD_SUFFIX_FACTOR = ITEM_FIELD_PROPERTY_SEED, //custom
ITEM_FIELD_RANDOM_PROPERTIES_ID = 0x0038, // 1 1 1
ITEM_FIELD_ITEM_TEXT_ID = 0x0039, // 1 1 4
ITEM_FIELD_DURABILITY = 0x003A, // 1 1 20
ITEM_FIELD_MAXDURABILITY = 0x003B, // 1 1 20
ITEM_END = 0x003C,
}; };
enum EContainerFields enum EContainerFields
{ {
CONTAINER_FIELD_NUM_SLOTS = 0x003C, // 1 1 1 CONTAINER_FIELD_NUM_SLOTS = ITEM_END + 0x0000, // Size: 1, Type: INT, Flags: PUBLIC
CONTAINER_ALIGN_PAD = 0x003D, // 1 5 0 CONTAINER_ALIGN_PAD = ITEM_END + 0x0001, // Size: 1, Type: BYTES, Flags: NONE
CONTAINER_FIELD_SLOT_1 = 0x003E, // 72 4 1 CONTAINER_FIELD_SLOT_1 = ITEM_END + 0x0002, // Size: 72, Type: LONG, Flags: PUBLIC
CONTAINER_END = 0x0086, CONTAINER_END = ITEM_END + 0x004A,
}; };
enum EUnitFields enum EUnitFields
{ {
UNIT_FIELD_CHARM = 0x0006, // 2 4 1 UNIT_FIELD_CHARM = OBJECT_END + 0x0000, // Size: 2, Type: LONG, Flags: PUBLIC
UNIT_FIELD_SUMMON = 0x0008, // 2 4 1 UNIT_FIELD_SUMMON = OBJECT_END + 0x0002, // Size: 2, Type: LONG, Flags: PUBLIC
UNIT_FIELD_CHARMEDBY = 0x000A, // 2 4 1 UNIT_FIELD_CHARMEDBY = OBJECT_END + 0x0004, // Size: 2, Type: LONG, Flags: PUBLIC
UNIT_FIELD_SUMMONEDBY = 0x000C, // 2 4 1 UNIT_FIELD_SUMMONEDBY = OBJECT_END + 0x0006, // Size: 2, Type: LONG, Flags: PUBLIC
UNIT_FIELD_CREATEDBY = 0x000E, // 2 4 1 UNIT_FIELD_CREATEDBY = OBJECT_END + 0x0008, // Size: 2, Type: LONG, Flags: PUBLIC
UNIT_FIELD_TARGET = 0x0010, // 2 4 1 UNIT_FIELD_TARGET = OBJECT_END + 0x000A, // Size: 2, Type: LONG, Flags: PUBLIC
UNIT_FIELD_PERSUADED = 0x0012, // 2 4 1 UNIT_FIELD_PERSUADED = OBJECT_END + 0x000C, // Size: 2, Type: LONG, Flags: PUBLIC
UNIT_FIELD_CHANNEL_OBJECT = 0x0014, // 2 4 1 UNIT_FIELD_CHANNEL_OBJECT = OBJECT_END + 0x000E, // Size: 2, Type: LONG, Flags: PUBLIC
UNIT_FIELD_HEALTH = 0x0016, // 1 1 256 UNIT_FIELD_HEALTH = OBJECT_END + 0x0010, // Size: 1, Type: INT, Flags: DYNAMIC
UNIT_FIELD_POWER1 = 0x0017, // 1 1 1 UNIT_FIELD_POWER1 = OBJECT_END + 0x0011, // Size: 1, Type: INT, Flags: PUBLIC
UNIT_FIELD_POWER2 = 0x0018, // 1 1 1 UNIT_FIELD_POWER2 = OBJECT_END + 0x0012, // Size: 1, Type: INT, Flags: PUBLIC
UNIT_FIELD_POWER3 = 0x0019, // 1 1 1 UNIT_FIELD_POWER3 = OBJECT_END + 0x0013, // Size: 1, Type: INT, Flags: PUBLIC
UNIT_FIELD_POWER4 = 0x001A, // 1 1 1 UNIT_FIELD_POWER4 = OBJECT_END + 0x0014, // Size: 1, Type: INT, Flags: PUBLIC
UNIT_FIELD_POWER5 = 0x001B, // 1 1 1 UNIT_FIELD_POWER5 = OBJECT_END + 0x0015, // Size: 1, Type: INT, Flags: PUBLIC
UNIT_FIELD_MAXHEALTH = 0x001C, // 1 1 256 UNIT_FIELD_MAXHEALTH = OBJECT_END + 0x0016, // Size: 1, Type: INT, Flags: DYNAMIC
UNIT_FIELD_MAXPOWER1 = 0x001D, // 1 1 1 UNIT_FIELD_MAXPOWER1 = OBJECT_END + 0x0017, // Size: 1, Type: INT, Flags: PUBLIC
UNIT_FIELD_MAXPOWER2 = 0x001E, // 1 1 1 UNIT_FIELD_MAXPOWER2 = OBJECT_END + 0x0018, // Size: 1, Type: INT, Flags: PUBLIC
UNIT_FIELD_MAXPOWER3 = 0x001F, // 1 1 1 UNIT_FIELD_MAXPOWER3 = OBJECT_END + 0x0019, // Size: 1, Type: INT, Flags: PUBLIC
UNIT_FIELD_MAXPOWER4 = 0x0020, // 1 1 1 UNIT_FIELD_MAXPOWER4 = OBJECT_END + 0x001A, // Size: 1, Type: INT, Flags: PUBLIC
UNIT_FIELD_MAXPOWER5 = 0x0021, // 1 1 1 UNIT_FIELD_MAXPOWER5 = OBJECT_END + 0x001B, // Size: 1, Type: INT, Flags: PUBLIC
UNIT_FIELD_LEVEL = 0x0022, // 1 1 1 UNIT_FIELD_LEVEL = OBJECT_END + 0x001C, // Size: 1, Type: INT, Flags: PUBLIC
UNIT_FIELD_FACTIONTEMPLATE = 0x0023, // 1 1 1 UNIT_FIELD_FACTIONTEMPLATE = OBJECT_END + 0x001D, // Size: 1, Type: INT, Flags: PUBLIC
UNIT_FIELD_BYTES_0 = 0x0024, // 1 5 1 UNIT_FIELD_BYTES_0 = OBJECT_END + 0x001E, // Size: 1, Type: BYTES, Flags: PUBLIC
UNIT_VIRTUAL_ITEM_SLOT_DISPLAY = 0x0025, // 3 1 1 UNIT_VIRTUAL_ITEM_SLOT_DISPLAY = OBJECT_END + 0x001F, // Size: 3, Type: INT, Flags: PUBLIC
UNIT_VIRTUAL_ITEM_INFO = 0x0028, // 6 5 1 UNIT_VIRTUAL_ITEM_INFO = OBJECT_END + 0x0022, // Size: 6, Type: BYTES, Flags: PUBLIC
UNIT_FIELD_FLAGS = 0x002E, // 1 1 1 UNIT_FIELD_FLAGS = OBJECT_END + 0x0028, // Size: 1, Type: INT, Flags: PUBLIC
UNIT_FIELD_FLAGS_2 = 0x002F, // 1 1 1 UNIT_FIELD_FLAGS_2 = OBJECT_END + 0x0029, // Size: 1, Type: INT, Flags: PUBLIC
UNIT_FIELD_AURA = 0x0030, // 56 1 1 UNIT_FIELD_AURA = OBJECT_END + 0x002A, // Size: 56, Type: INT, Flags: PUBLIC
UNIT_FIELD_AURAFLAGS = 0x0068, // 7 5 1 UNIT_FIELD_AURAFLAGS = OBJECT_END + 0x0062, // Size: 14, Type: BYTES, Flags: PUBLIC
UNIT_FIELD_AURALEVELS = 0x006F, // 14 5 1 UNIT_FIELD_AURALEVELS = OBJECT_END + 0x0070, // Size: 14, Type: BYTES, Flags: PUBLIC
UNIT_FIELD_AURAAPPLICATIONS = 0x007D, // 14 5 1 UNIT_FIELD_AURAAPPLICATIONS = OBJECT_END + 0x007E, // Size: 14, Type: BYTES, Flags: PUBLIC
UNIT_FIELD_AURASTATE = 0x008B, // 1 1 1 UNIT_FIELD_AURASTATE = OBJECT_END + 0x008C, // Size: 1, Type: INT, Flags: PUBLIC
UNIT_FIELD_BASEATTACKTIME = 0x008C, // 2 1 1 UNIT_FIELD_BASEATTACKTIME = OBJECT_END + 0x008D, // Size: 2, Type: INT, Flags: PUBLIC
UNIT_FIELD_OFFHANDATTACKTIME = UNIT_FIELD_BASEATTACKTIME + 1, // custom
UNIT_FIELD_RANGEDATTACKTIME = 0x008E, // 1 1 2
UNIT_FIELD_BOUNDINGRADIUS = 0x008F, // 1 3 1
UNIT_FIELD_COMBATREACH = 0x0090, // 1 3 1
UNIT_FIELD_DISPLAYID = 0x0091, // 1 1 1
UNIT_FIELD_NATIVEDISPLAYID = 0x0092, // 1 1 1
UNIT_FIELD_MOUNTDISPLAYID = 0x0093, // 1 1 1
UNIT_FIELD_MINDAMAGE = 0x0094, // 1 3 38
UNIT_FIELD_MAXDAMAGE = 0x0095, // 1 3 38
UNIT_FIELD_MINOFFHANDDAMAGE = 0x0096, // 1 3 38
UNIT_FIELD_MAXOFFHANDDAMAGE = 0x0097, // 1 3 38
UNIT_FIELD_BYTES_1 = 0x0098, // 1 5 1
UNIT_FIELD_PETNUMBER = 0x0099, // 1 1 1
UNIT_FIELD_PET_NAME_TIMESTAMP = 0x009A, // 1 1 1
UNIT_FIELD_PETEXPERIENCE = 0x009B, // 1 1 4
UNIT_FIELD_PETNEXTLEVELEXP = 0x009C, // 1 1 4
UNIT_DYNAMIC_FLAGS = 0x009D, // 1 1 256
UNIT_CHANNEL_SPELL = 0x009E, // 1 1 1
UNIT_MOD_CAST_SPEED = 0x009F, // 1 3 1
UNIT_CREATED_BY_SPELL = 0x00A0, // 1 1 1
UNIT_NPC_FLAGS = 0x00A1, // 1 1 1
UNIT_NPC_EMOTESTATE = 0x00A2, // 1 1 1
UNIT_TRAINING_POINTS = 0x00A3, // 1 2 4
UNIT_FIELD_STAT0 = 0x00A4, // 1 1 6
UNIT_FIELD_STAT1 = 0x00A5, // 1 1 6
UNIT_FIELD_STAT2 = 0x00A6, // 1 1 6
UNIT_FIELD_STAT3 = 0x00A7, // 1 1 6
UNIT_FIELD_STAT4 = 0x00A8, // 1 1 6
UNIT_FIELD_POSSTAT0 = 0x00A9, // 1 1 6
UNIT_FIELD_POSSTAT1 = 0x00AA, // 1 1 6
UNIT_FIELD_POSSTAT2 = 0x00AB, // 1 1 6
UNIT_FIELD_POSSTAT3 = 0x00AC, // 1 1 6
UNIT_FIELD_POSSTAT4 = 0x00AD, // 1 1 6
UNIT_FIELD_NEGSTAT0 = 0x00AE, // 1 1 6
UNIT_FIELD_NEGSTAT1 = 0x00AF, // 1 1 6
UNIT_FIELD_NEGSTAT2 = 0x00B0, // 1 1 6
UNIT_FIELD_NEGSTAT3 = 0x00B1, // 1 1 6
UNIT_FIELD_NEGSTAT4 = 0x00B2, // 1 1 6
UNIT_FIELD_RESISTANCES = 0x00B3, // 7 1 38
UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE = 0x00BA, // 7 1 6
UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE = 0x00C1, // 7 1 6
UNIT_FIELD_BASE_MANA = 0x00C8, // 1 1 6
UNIT_FIELD_BASE_HEALTH = 0x00C9, // 1 1 6
UNIT_FIELD_BYTES_2 = 0x00CA, // 1 5 1
UNIT_FIELD_ATTACK_POWER = 0x00CB, // 1 1 6
UNIT_FIELD_ATTACK_POWER_MODS = 0x00CC, // 1 2 6
UNIT_FIELD_ATTACK_POWER_MULTIPLIER = 0x00CD, // 1 3 6
UNIT_FIELD_RANGED_ATTACK_POWER = 0x00CE, // 1 1 6
UNIT_FIELD_RANGED_ATTACK_POWER_MODS = 0x00CF, // 1 2 6
UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER = 0x00D0, // 1 3 6
UNIT_FIELD_MINRANGEDDAMAGE = 0x00D1, // 1 3 6
UNIT_FIELD_MAXRANGEDDAMAGE = 0x00D2, // 1 3 6
UNIT_FIELD_POWER_COST_MODIFIER = 0x00D3, // 7 1 6
UNIT_FIELD_POWER_COST_MULTIPLIER = 0x00DA, // 7 3 6
UNIT_FIELD_PADDING = 0x00E1, // 1 1 0
UNIT_END = 0x00E2,
PLAYER_DUEL_ARBITER = 0x00E2, // 2 4 1 // custom
PLAYER_FLAGS = 0x00E4, // 1 1 1 UNIT_FIELD_OFFHANDATTACKTIME = UNIT_FIELD_BASEATTACKTIME + 1,
PLAYER_GUILDID = 0x00E5, // 1 1 1
PLAYER_GUILDRANK = 0x00E6, // 1 1 1 UNIT_FIELD_RANGEDATTACKTIME = OBJECT_END + 0x008F, // Size: 1, Type: INT, Flags: PRIVATE
PLAYER_BYTES = 0x00E7, // 1 5 1 UNIT_FIELD_BOUNDINGRADIUS = OBJECT_END + 0x0090, // Size: 1, Type: FLOAT, Flags: PUBLIC
PLAYER_BYTES_2 = 0x00E8, // 1 5 1 UNIT_FIELD_COMBATREACH = OBJECT_END + 0x0091, // Size: 1, Type: FLOAT, Flags: PUBLIC
PLAYER_BYTES_3 = 0x00E9, // 1 5 1 UNIT_FIELD_DISPLAYID = OBJECT_END + 0x0092, // Size: 1, Type: INT, Flags: PUBLIC
PLAYER_DUEL_TEAM = 0x00EA, // 1 1 1 UNIT_FIELD_NATIVEDISPLAYID = OBJECT_END + 0x0093, // Size: 1, Type: INT, Flags: PUBLIC
PLAYER_GUILD_TIMESTAMP = 0x00EB, // 1 1 1 UNIT_FIELD_MOUNTDISPLAYID = OBJECT_END + 0x0094, // Size: 1, Type: INT, Flags: PUBLIC
PLAYER_QUEST_LOG_1_1 = 0x00EC, // 1 1 64 UNIT_FIELD_MINDAMAGE = OBJECT_END + 0x0095, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY, UNK3
PLAYER_QUEST_LOG_1_2 = 0x00ED, // 2 1 2 UNIT_FIELD_MAXDAMAGE = OBJECT_END + 0x0096, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY, UNK3
PLAYER_QUEST_LOG_2_1 = 0x00EF, // 1 1 64 UNIT_FIELD_MINOFFHANDDAMAGE = OBJECT_END + 0x0097, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY, UNK3
PLAYER_QUEST_LOG_2_2 = 0x00F0, // 2 1 2 UNIT_FIELD_MAXOFFHANDDAMAGE = OBJECT_END + 0x0098, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY, UNK3
PLAYER_QUEST_LOG_3_1 = 0x00F2, // 1 1 64 UNIT_FIELD_BYTES_1 = OBJECT_END + 0x0099, // Size: 1, Type: BYTES, Flags: PUBLIC
PLAYER_QUEST_LOG_3_2 = 0x00F3, // 2 1 2 UNIT_FIELD_PETNUMBER = OBJECT_END + 0x009A, // Size: 1, Type: INT, Flags: PUBLIC
PLAYER_QUEST_LOG_4_1 = 0x00F5, // 1 1 64 UNIT_FIELD_PET_NAME_TIMESTAMP = OBJECT_END + 0x009B, // Size: 1, Type: INT, Flags: PUBLIC
PLAYER_QUEST_LOG_4_2 = 0x00F6, // 2 1 2 UNIT_FIELD_PETEXPERIENCE = OBJECT_END + 0x009C, // Size: 1, Type: INT, Flags: OWNER_ONLY
PLAYER_QUEST_LOG_5_1 = 0x00F8, // 1 1 64 UNIT_FIELD_PETNEXTLEVELEXP = OBJECT_END + 0x009D, // Size: 1, Type: INT, Flags: OWNER_ONLY
PLAYER_QUEST_LOG_5_2 = 0x00F9, // 2 1 2 UNIT_DYNAMIC_FLAGS = OBJECT_END + 0x009E, // Size: 1, Type: INT, Flags: DYNAMIC
PLAYER_QUEST_LOG_6_1 = 0x00FB, // 1 1 64 UNIT_CHANNEL_SPELL = OBJECT_END + 0x009F, // Size: 1, Type: INT, Flags: PUBLIC
PLAYER_QUEST_LOG_6_2 = 0x00FC, // 2 1 2 UNIT_MOD_CAST_SPEED = OBJECT_END + 0x00A0, // Size: 1, Type: FLOAT, Flags: PUBLIC
PLAYER_QUEST_LOG_7_1 = 0x00FE, // 1 1 64 UNIT_CREATED_BY_SPELL = OBJECT_END + 0x00A1, // Size: 1, Type: INT, Flags: PUBLIC
PLAYER_QUEST_LOG_7_2 = 0x00FF, // 2 1 2 UNIT_NPC_FLAGS = OBJECT_END + 0x00A2, // Size: 1, Type: INT, Flags: DYNAMIC
PLAYER_QUEST_LOG_8_1 = 0x0101, // 1 1 64 UNIT_NPC_EMOTESTATE = OBJECT_END + 0x00A3, // Size: 1, Type: INT, Flags: PUBLIC
PLAYER_QUEST_LOG_8_2 = 0x0102, // 2 1 2 UNIT_TRAINING_POINTS = OBJECT_END + 0x00A4, // Size: 1, Type: TWO_SHORT, Flags: OWNER_ONLY
PLAYER_QUEST_LOG_9_1 = 0x0104, // 1 1 64 UNIT_FIELD_STAT0 = OBJECT_END + 0x00A5, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
PLAYER_QUEST_LOG_9_2 = 0x0105, // 2 1 2 UNIT_FIELD_STAT1 = OBJECT_END + 0x00A6, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
PLAYER_QUEST_LOG_10_1 = 0x0107, // 1 1 64 UNIT_FIELD_STAT2 = OBJECT_END + 0x00A7, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
PLAYER_QUEST_LOG_10_2 = 0x0108, // 2 1 2 UNIT_FIELD_STAT3 = OBJECT_END + 0x00A8, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
PLAYER_QUEST_LOG_11_1 = 0x010A, // 1 1 64 UNIT_FIELD_STAT4 = OBJECT_END + 0x00A9, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
PLAYER_QUEST_LOG_11_2 = 0x010B, // 2 1 2 UNIT_FIELD_POSSTAT0 = OBJECT_END + 0x00AA, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
PLAYER_QUEST_LOG_12_1 = 0x010D, // 1 1 64 UNIT_FIELD_POSSTAT1 = OBJECT_END + 0x00AB, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
PLAYER_QUEST_LOG_12_2 = 0x010E, // 2 1 2 UNIT_FIELD_POSSTAT2 = OBJECT_END + 0x00AC, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
PLAYER_QUEST_LOG_13_1 = 0x0110, // 1 1 64 UNIT_FIELD_POSSTAT3 = OBJECT_END + 0x00AD, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
PLAYER_QUEST_LOG_13_2 = 0x0111, // 2 1 2 UNIT_FIELD_POSSTAT4 = OBJECT_END + 0x00AE, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
PLAYER_QUEST_LOG_14_1 = 0x0113, // 1 1 64 UNIT_FIELD_NEGSTAT0 = OBJECT_END + 0x00AF, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
PLAYER_QUEST_LOG_14_2 = 0x0114, // 2 1 2 UNIT_FIELD_NEGSTAT1 = OBJECT_END + 0x00B0, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
PLAYER_QUEST_LOG_15_1 = 0x0116, // 1 1 64 UNIT_FIELD_NEGSTAT2 = OBJECT_END + 0x00B1, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
PLAYER_QUEST_LOG_15_2 = 0x0117, // 2 1 2 UNIT_FIELD_NEGSTAT3 = OBJECT_END + 0x00B2, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
PLAYER_QUEST_LOG_16_1 = 0x0119, // 1 1 64 UNIT_FIELD_NEGSTAT4 = OBJECT_END + 0x00B3, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
PLAYER_QUEST_LOG_16_2 = 0x011A, // 2 1 2 UNIT_FIELD_RESISTANCES = OBJECT_END + 0x00B4, // Size: 7, Type: INT, Flags: PRIVATE, OWNER_ONLY, UNK3
PLAYER_QUEST_LOG_17_1 = 0x011C, // 1 1 64 UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE = OBJECT_END + 0x00BB, // Size: 7, Type: INT, Flags: PRIVATE, OWNER_ONLY
PLAYER_QUEST_LOG_17_2 = 0x011D, // 2 1 2 UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE = OBJECT_END + 0x00C2, // Size: 7, Type: INT, Flags: PRIVATE, OWNER_ONLY
PLAYER_QUEST_LOG_18_1 = 0x011F, // 1 1 64 UNIT_FIELD_BASE_MANA = OBJECT_END + 0x00C9, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
PLAYER_QUEST_LOG_18_2 = 0x0120, // 2 1 2 UNIT_FIELD_BASE_HEALTH = OBJECT_END + 0x00CA, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
PLAYER_QUEST_LOG_19_1 = 0x0122, // 1 1 64 UNIT_FIELD_BYTES_2 = OBJECT_END + 0x00CB, // Size: 1, Type: BYTES, Flags: PUBLIC
PLAYER_QUEST_LOG_19_2 = 0x0123, // 2 1 2 UNIT_FIELD_ATTACK_POWER = OBJECT_END + 0x00CC, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
PLAYER_QUEST_LOG_20_1 = 0x0125, // 1 1 64 UNIT_FIELD_ATTACK_POWER_MODS = OBJECT_END + 0x00CD, // Size: 1, Type: TWO_SHORT, Flags: PRIVATE, OWNER_ONLY
PLAYER_QUEST_LOG_20_2 = 0x0126, // 2 1 2 UNIT_FIELD_ATTACK_POWER_MULTIPLIER = OBJECT_END + 0x00CE, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY
PLAYER_QUEST_LOG_21_1 = 0x0128, // 1 1 64 UNIT_FIELD_RANGED_ATTACK_POWER = OBJECT_END + 0x00CF, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
PLAYER_QUEST_LOG_21_2 = 0x0129, // 2 1 2 UNIT_FIELD_RANGED_ATTACK_POWER_MODS = OBJECT_END + 0x00D0, // Size: 1, Type: TWO_SHORT, Flags: PRIVATE, OWNER_ONLY
PLAYER_QUEST_LOG_22_1 = 0x012B, // 1 1 64 UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER = OBJECT_END + 0x00D1, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY
PLAYER_QUEST_LOG_22_2 = 0x012C, // 2 1 2 UNIT_FIELD_MINRANGEDDAMAGE = OBJECT_END + 0x00D2, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY
PLAYER_QUEST_LOG_23_1 = 0x012E, // 1 1 64 UNIT_FIELD_MAXRANGEDDAMAGE = OBJECT_END + 0x00D3, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY
PLAYER_QUEST_LOG_23_2 = 0x012F, // 2 1 2 UNIT_FIELD_POWER_COST_MODIFIER = OBJECT_END + 0x00D4, // Size: 7, Type: INT, Flags: PRIVATE, OWNER_ONLY
PLAYER_QUEST_LOG_24_1 = 0x0131, // 1 1 64 UNIT_FIELD_POWER_COST_MULTIPLIER = OBJECT_END + 0x00DB, // Size: 7, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY
PLAYER_QUEST_LOG_24_2 = 0x0132, // 2 1 2 UNIT_END = OBJECT_END + 0x00E2,
PLAYER_QUEST_LOG_25_1 = 0x0134, // 1 1 64
PLAYER_QUEST_LOG_25_2 = 0x0135, // 2 1 2 PLAYER_DUEL_ARBITER = UNIT_END + 0x0000, // Size: 2, Type: LONG, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_1_CREATOR = 0x0137, // 2 4 1 PLAYER_FLAGS = UNIT_END + 0x0002, // Size: 1, Type: INT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_1_0 = 0x0139, // 12 1 1 PLAYER_GUILDID = UNIT_END + 0x0003, // Size: 1, Type: INT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_1_PROPERTIES = 0x0145, // 1 2 1 PLAYER_GUILDRANK = UNIT_END + 0x0004, // Size: 1, Type: INT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_1_PAD = 0x0146, // 1 1 1 PLAYER_BYTES = UNIT_END + 0x0005, // Size: 1, Type: BYTES, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_2_CREATOR = 0x0147, // 2 4 1 PLAYER_BYTES_2 = UNIT_END + 0x0006, // Size: 1, Type: BYTES, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_2_0 = 0x0149, // 12 1 1 PLAYER_BYTES_3 = UNIT_END + 0x0007, // Size: 1, Type: BYTES, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_2_PROPERTIES = 0x0155, // 1 2 1 PLAYER_DUEL_TEAM = UNIT_END + 0x0008, // Size: 1, Type: INT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_2_PAD = 0x0156, // 1 1 1 PLAYER_GUILD_TIMESTAMP = UNIT_END + 0x0009, // Size: 1, Type: INT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_3_CREATOR = 0x0157, // 2 4 1 PLAYER_QUEST_LOG_1_1 = UNIT_END + 0x000A, // Size: 1, Type: INT, Flags: GROUP_ONLY
PLAYER_VISIBLE_ITEM_3_0 = 0x0159, // 12 1 1 PLAYER_QUEST_LOG_1_2 = UNIT_END + 0x000B, // Size: 2, Type: INT, Flags: PRIVATE
PLAYER_VISIBLE_ITEM_3_PROPERTIES = 0x0165, // 1 2 1 PLAYER_QUEST_LOG_2_1 = UNIT_END + 0x000D, // Size: 1, Type: INT, Flags: GROUP_ONLY
PLAYER_VISIBLE_ITEM_3_PAD = 0x0166, // 1 1 1 PLAYER_QUEST_LOG_2_2 = UNIT_END + 0x000E, // Size: 2, Type: INT, Flags: PRIVATE
PLAYER_VISIBLE_ITEM_4_CREATOR = 0x0167, // 2 4 1 PLAYER_QUEST_LOG_3_1 = UNIT_END + 0x0010, // Size: 1, Type: INT, Flags: GROUP_ONLY
PLAYER_VISIBLE_ITEM_4_0 = 0x0169, // 12 1 1 PLAYER_QUEST_LOG_3_2 = UNIT_END + 0x0011, // Size: 2, Type: INT, Flags: PRIVATE
PLAYER_VISIBLE_ITEM_4_PROPERTIES = 0x0175, // 1 2 1 PLAYER_QUEST_LOG_4_1 = UNIT_END + 0x0013, // Size: 1, Type: INT, Flags: GROUP_ONLY
PLAYER_VISIBLE_ITEM_4_PAD = 0x0176, // 1 1 1 PLAYER_QUEST_LOG_4_2 = UNIT_END + 0x0014, // Size: 2, Type: INT, Flags: PRIVATE
PLAYER_VISIBLE_ITEM_5_CREATOR = 0x0177, // 2 4 1 PLAYER_QUEST_LOG_5_1 = UNIT_END + 0x0016, // Size: 1, Type: INT, Flags: GROUP_ONLY
PLAYER_VISIBLE_ITEM_5_0 = 0x0179, // 12 1 1 PLAYER_QUEST_LOG_5_2 = UNIT_END + 0x0017, // Size: 2, Type: INT, Flags: PRIVATE
PLAYER_VISIBLE_ITEM_5_PROPERTIES = 0x0185, // 1 2 1 PLAYER_QUEST_LOG_6_1 = UNIT_END + 0x0019, // Size: 1, Type: INT, Flags: GROUP_ONLY
PLAYER_VISIBLE_ITEM_5_PAD = 0x0186, // 1 1 1 PLAYER_QUEST_LOG_6_2 = UNIT_END + 0x001A, // Size: 2, Type: INT, Flags: PRIVATE
PLAYER_VISIBLE_ITEM_6_CREATOR = 0x0187, // 2 4 1 PLAYER_QUEST_LOG_7_1 = UNIT_END + 0x001C, // Size: 1, Type: INT, Flags: GROUP_ONLY
PLAYER_VISIBLE_ITEM_6_0 = 0x0189, // 12 1 1 PLAYER_QUEST_LOG_7_2 = UNIT_END + 0x001D, // Size: 2, Type: INT, Flags: PRIVATE
PLAYER_VISIBLE_ITEM_6_PROPERTIES = 0x0195, // 1 2 1 PLAYER_QUEST_LOG_8_1 = UNIT_END + 0x001F, // Size: 1, Type: INT, Flags: GROUP_ONLY
PLAYER_VISIBLE_ITEM_6_PAD = 0x0196, // 1 1 1 PLAYER_QUEST_LOG_8_2 = UNIT_END + 0x0020, // Size: 2, Type: INT, Flags: PRIVATE
PLAYER_VISIBLE_ITEM_7_CREATOR = 0x0197, // 2 4 1 PLAYER_QUEST_LOG_9_1 = UNIT_END + 0x0022, // Size: 1, Type: INT, Flags: GROUP_ONLY
PLAYER_VISIBLE_ITEM_7_0 = 0x0199, // 12 1 1 PLAYER_QUEST_LOG_9_2 = UNIT_END + 0x0023, // Size: 2, Type: INT, Flags: PRIVATE
PLAYER_VISIBLE_ITEM_7_PROPERTIES = 0x01A5, // 1 2 1 PLAYER_QUEST_LOG_10_1 = UNIT_END + 0x0025, // Size: 1, Type: INT, Flags: GROUP_ONLY
PLAYER_VISIBLE_ITEM_7_PAD = 0x01A6, // 1 1 1 PLAYER_QUEST_LOG_10_2 = UNIT_END + 0x0026, // Size: 2, Type: INT, Flags: PRIVATE
PLAYER_VISIBLE_ITEM_8_CREATOR = 0x01A7, // 2 4 1 PLAYER_QUEST_LOG_11_1 = UNIT_END + 0x0028, // Size: 1, Type: INT, Flags: GROUP_ONLY
PLAYER_VISIBLE_ITEM_8_0 = 0x01A9, // 12 1 1 PLAYER_QUEST_LOG_11_2 = UNIT_END + 0x0029, // Size: 2, Type: INT, Flags: PRIVATE
PLAYER_VISIBLE_ITEM_8_PROPERTIES = 0x01B5, // 1 2 1 PLAYER_QUEST_LOG_12_1 = UNIT_END + 0x002B, // Size: 1, Type: INT, Flags: GROUP_ONLY
PLAYER_VISIBLE_ITEM_8_PAD = 0x01B6, // 1 1 1 PLAYER_QUEST_LOG_12_2 = UNIT_END + 0x002C, // Size: 2, Type: INT, Flags: PRIVATE
PLAYER_VISIBLE_ITEM_9_CREATOR = 0x01B7, // 2 4 1 PLAYER_QUEST_LOG_13_1 = UNIT_END + 0x002E, // Size: 1, Type: INT, Flags: GROUP_ONLY
PLAYER_VISIBLE_ITEM_9_0 = 0x01B9, // 12 1 1 PLAYER_QUEST_LOG_13_2 = UNIT_END + 0x002F, // Size: 2, Type: INT, Flags: PRIVATE
PLAYER_VISIBLE_ITEM_9_PROPERTIES = 0x01C5, // 1 2 1 PLAYER_QUEST_LOG_14_1 = UNIT_END + 0x0031, // Size: 1, Type: INT, Flags: GROUP_ONLY
PLAYER_VISIBLE_ITEM_9_PAD = 0x01C6, // 1 1 1 PLAYER_QUEST_LOG_14_2 = UNIT_END + 0x0032, // Size: 2, Type: INT, Flags: PRIVATE
PLAYER_VISIBLE_ITEM_10_CREATOR = 0x01C7, // 2 4 1 PLAYER_QUEST_LOG_15_1 = UNIT_END + 0x0034, // Size: 1, Type: INT, Flags: GROUP_ONLY
PLAYER_VISIBLE_ITEM_10_0 = 0x01C9, // 12 1 1 PLAYER_QUEST_LOG_15_2 = UNIT_END + 0x0035, // Size: 2, Type: INT, Flags: PRIVATE
PLAYER_VISIBLE_ITEM_10_PROPERTIES = 0x01D5, // 1 2 1 PLAYER_QUEST_LOG_16_1 = UNIT_END + 0x0037, // Size: 1, Type: INT, Flags: GROUP_ONLY
PLAYER_VISIBLE_ITEM_10_PAD = 0x01D6, // 1 1 1 PLAYER_QUEST_LOG_16_2 = UNIT_END + 0x0038, // Size: 2, Type: INT, Flags: PRIVATE
PLAYER_VISIBLE_ITEM_11_CREATOR = 0x01D7, // 2 4 1 PLAYER_QUEST_LOG_17_1 = UNIT_END + 0x003A, // Size: 1, Type: INT, Flags: GROUP_ONLY
PLAYER_VISIBLE_ITEM_11_0 = 0x01D9, // 12 1 1 PLAYER_QUEST_LOG_17_2 = UNIT_END + 0x003B, // Size: 2, Type: INT, Flags: PRIVATE
PLAYER_VISIBLE_ITEM_11_PROPERTIES = 0x01E5, // 1 2 1 PLAYER_QUEST_LOG_18_1 = UNIT_END + 0x003D, // Size: 1, Type: INT, Flags: GROUP_ONLY
PLAYER_VISIBLE_ITEM_11_PAD = 0x01E6, // 1 1 1 PLAYER_QUEST_LOG_18_2 = UNIT_END + 0x003E, // Size: 2, Type: INT, Flags: PRIVATE
PLAYER_VISIBLE_ITEM_12_CREATOR = 0x01E7, // 2 4 1 PLAYER_QUEST_LOG_19_1 = UNIT_END + 0x0040, // Size: 1, Type: INT, Flags: GROUP_ONLY
PLAYER_VISIBLE_ITEM_12_0 = 0x01E9, // 12 1 1 PLAYER_QUEST_LOG_19_2 = UNIT_END + 0x0041, // Size: 2, Type: INT, Flags: PRIVATE
PLAYER_VISIBLE_ITEM_12_PROPERTIES = 0x01F5, // 1 2 1 PLAYER_QUEST_LOG_20_1 = UNIT_END + 0x0043, // Size: 1, Type: INT, Flags: GROUP_ONLY
PLAYER_VISIBLE_ITEM_12_PAD = 0x01F6, // 1 1 1 PLAYER_QUEST_LOG_20_2 = UNIT_END + 0x0044, // Size: 2, Type: INT, Flags: PRIVATE
PLAYER_VISIBLE_ITEM_13_CREATOR = 0x01F7, // 2 4 1 PLAYER_QUEST_LOG_21_1 = UNIT_END + 0x0046, // Size: 1, Type: INT, Flags: GROUP_ONLY
PLAYER_VISIBLE_ITEM_13_0 = 0x01F9, // 12 1 1 PLAYER_QUEST_LOG_21_2 = UNIT_END + 0x0047, // Size: 2, Type: INT, Flags: PRIVATE
PLAYER_VISIBLE_ITEM_13_PROPERTIES = 0x0205, // 1 2 1 PLAYER_QUEST_LOG_22_1 = UNIT_END + 0x0049, // Size: 1, Type: INT, Flags: GROUP_ONLY
PLAYER_VISIBLE_ITEM_13_PAD = 0x0206, // 1 1 1 PLAYER_QUEST_LOG_22_2 = UNIT_END + 0x004A, // Size: 2, Type: INT, Flags: PRIVATE
PLAYER_VISIBLE_ITEM_14_CREATOR = 0x0207, // 2 4 1 PLAYER_QUEST_LOG_23_1 = UNIT_END + 0x004C, // Size: 1, Type: INT, Flags: GROUP_ONLY
PLAYER_VISIBLE_ITEM_14_0 = 0x0209, // 12 1 1 PLAYER_QUEST_LOG_23_2 = UNIT_END + 0x004D, // Size: 2, Type: INT, Flags: PRIVATE
PLAYER_VISIBLE_ITEM_14_PROPERTIES = 0x0215, // 1 2 1 PLAYER_QUEST_LOG_24_1 = UNIT_END + 0x004F, // Size: 1, Type: INT, Flags: GROUP_ONLY
PLAYER_VISIBLE_ITEM_14_PAD = 0x0216, // 1 1 1 PLAYER_QUEST_LOG_24_2 = UNIT_END + 0x0050, // Size: 2, Type: INT, Flags: PRIVATE
PLAYER_VISIBLE_ITEM_15_CREATOR = 0x0217, // 2 4 1 PLAYER_QUEST_LOG_25_1 = UNIT_END + 0x0052, // Size: 1, Type: INT, Flags: GROUP_ONLY
PLAYER_VISIBLE_ITEM_15_0 = 0x0219, // 12 1 1 PLAYER_QUEST_LOG_25_2 = UNIT_END + 0x0053, // Size: 2, Type: INT, Flags: PRIVATE
PLAYER_VISIBLE_ITEM_15_PROPERTIES = 0x0225, // 1 2 1 PLAYER_VISIBLE_ITEM_1_CREATOR = UNIT_END + 0x0055, // Size: 2, Type: LONG, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_15_PAD = 0x0226, // 1 1 1 PLAYER_VISIBLE_ITEM_1_0 = UNIT_END + 0x0057, // Size: 12, Type: INT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_16_CREATOR = 0x0227, // 2 4 1 PLAYER_VISIBLE_ITEM_1_PROPERTIES = UNIT_END + 0x0063, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_16_0 = 0x0229, // 12 1 1 PLAYER_VISIBLE_ITEM_1_PAD = UNIT_END + 0x0064, // Size: 1, Type: INT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_16_PROPERTIES = 0x0235, // 1 2 1 PLAYER_VISIBLE_ITEM_2_CREATOR = UNIT_END + 0x0065, // Size: 2, Type: LONG, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_16_PAD = 0x0236, // 1 1 1 PLAYER_VISIBLE_ITEM_2_0 = UNIT_END + 0x0067, // Size: 12, Type: INT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_17_CREATOR = 0x0237, // 2 4 1 PLAYER_VISIBLE_ITEM_2_PROPERTIES = UNIT_END + 0x0073, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_17_0 = 0x0239, // 12 1 1 PLAYER_VISIBLE_ITEM_2_PAD = UNIT_END + 0x0074, // Size: 1, Type: INT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_17_PROPERTIES = 0x0245, // 1 2 1 PLAYER_VISIBLE_ITEM_3_CREATOR = UNIT_END + 0x0075, // Size: 2, Type: LONG, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_17_PAD = 0x0246, // 1 1 1 PLAYER_VISIBLE_ITEM_3_0 = UNIT_END + 0x0077, // Size: 12, Type: INT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_18_CREATOR = 0x0247, // 2 4 1 PLAYER_VISIBLE_ITEM_3_PROPERTIES = UNIT_END + 0x0083, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_18_0 = 0x0249, // 12 1 1 PLAYER_VISIBLE_ITEM_3_PAD = UNIT_END + 0x0084, // Size: 1, Type: INT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_18_PROPERTIES = 0x0255, // 1 2 1 PLAYER_VISIBLE_ITEM_4_CREATOR = UNIT_END + 0x0085, // Size: 2, Type: LONG, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_18_PAD = 0x0256, // 1 1 1 PLAYER_VISIBLE_ITEM_4_0 = UNIT_END + 0x0087, // Size: 12, Type: INT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_19_CREATOR = 0x0257, // 2 4 1 PLAYER_VISIBLE_ITEM_4_PROPERTIES = UNIT_END + 0x0093, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_19_0 = 0x0259, // 12 1 1 PLAYER_VISIBLE_ITEM_4_PAD = UNIT_END + 0x0094, // Size: 1, Type: INT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_19_PROPERTIES = 0x0265, // 1 2 1 PLAYER_VISIBLE_ITEM_5_CREATOR = UNIT_END + 0x0095, // Size: 2, Type: LONG, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_19_PAD = 0x0266, // 1 1 1 PLAYER_VISIBLE_ITEM_5_0 = UNIT_END + 0x0097, // Size: 12, Type: INT, Flags: PUBLIC
PLAYER_CHOSEN_TITLE = 0x0267, // 1 1 1 PLAYER_VISIBLE_ITEM_5_PROPERTIES = UNIT_END + 0x00A3, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
PLAYER_FIELD_INV_SLOT_HEAD = 0x0268, // 46 4 2 PLAYER_VISIBLE_ITEM_5_PAD = UNIT_END + 0x00A4, // Size: 1, Type: INT, Flags: PUBLIC
PLAYER_FIELD_PACK_SLOT_1 = 0x0296, // 32 4 2 PLAYER_VISIBLE_ITEM_6_CREATOR = UNIT_END + 0x00A5, // Size: 2, Type: LONG, Flags: PUBLIC
PLAYER_FIELD_BANK_SLOT_1 = 0x02B6, // 56 4 2 PLAYER_VISIBLE_ITEM_6_0 = UNIT_END + 0x00A7, // Size: 12, Type: INT, Flags: PUBLIC
PLAYER_FIELD_BANKBAG_SLOT_1 = 0x02EE, // 14 4 2 PLAYER_VISIBLE_ITEM_6_PROPERTIES = UNIT_END + 0x00B3, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
PLAYER_FIELD_VENDORBUYBACK_SLOT_1 = 0x02FC, // 24 4 2 PLAYER_VISIBLE_ITEM_6_PAD = UNIT_END + 0x00B4, // Size: 1, Type: INT, Flags: PUBLIC
PLAYER_FIELD_KEYRING_SLOT_1 = 0x0314, // 64 4 2 PLAYER_VISIBLE_ITEM_7_CREATOR = UNIT_END + 0x00B5, // Size: 2, Type: LONG, Flags: PUBLIC
PLAYER_FARSIGHT = 0x0354, // 2 4 2 PLAYER_VISIBLE_ITEM_7_0 = UNIT_END + 0x00B7, // Size: 12, Type: INT, Flags: PUBLIC
PLAYER__FIELD_KNOWN_TITLES = 0x0356, // 2 4 2 PLAYER_VISIBLE_ITEM_7_PROPERTIES = UNIT_END + 0x00C3, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
PLAYER_XP = 0x0358, // 1 1 2 PLAYER_VISIBLE_ITEM_7_PAD = UNIT_END + 0x00C4, // Size: 1, Type: INT, Flags: PUBLIC
PLAYER_NEXT_LEVEL_XP = 0x0359, // 1 1 2 PLAYER_VISIBLE_ITEM_8_CREATOR = UNIT_END + 0x00C5, // Size: 2, Type: LONG, Flags: PUBLIC
PLAYER_SKILL_INFO_1_1 = 0x035A, // 384 2 2 PLAYER_VISIBLE_ITEM_8_0 = UNIT_END + 0x00C7, // Size: 12, Type: INT, Flags: PUBLIC
PLAYER_CHARACTER_POINTS1 = 0x04DA, // 1 1 2 PLAYER_VISIBLE_ITEM_8_PROPERTIES = UNIT_END + 0x00D3, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
PLAYER_CHARACTER_POINTS2 = 0x04DB, // 1 1 2 PLAYER_VISIBLE_ITEM_8_PAD = UNIT_END + 0x00D4, // Size: 1, Type: INT, Flags: PUBLIC
PLAYER_TRACK_CREATURES = 0x04DC, // 1 1 2 PLAYER_VISIBLE_ITEM_9_CREATOR = UNIT_END + 0x00D5, // Size: 2, Type: LONG, Flags: PUBLIC
PLAYER_TRACK_RESOURCES = 0x04DD, // 1 1 2 PLAYER_VISIBLE_ITEM_9_0 = UNIT_END + 0x00D7, // Size: 12, Type: INT, Flags: PUBLIC
PLAYER_BLOCK_PERCENTAGE = 0x04DE, // 1 3 2 PLAYER_VISIBLE_ITEM_9_PROPERTIES = UNIT_END + 0x00E3, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
PLAYER_DODGE_PERCENTAGE = 0x04DF, // 1 3 2 PLAYER_VISIBLE_ITEM_9_PAD = UNIT_END + 0x00E4, // Size: 1, Type: INT, Flags: PUBLIC
PLAYER_PARRY_PERCENTAGE = 0x04E0, // 1 3 2 PLAYER_VISIBLE_ITEM_10_CREATOR = UNIT_END + 0x00E5, // Size: 2, Type: LONG, Flags: PUBLIC
PLAYER_CRIT_PERCENTAGE = 0x04E1, // 1 3 2 PLAYER_VISIBLE_ITEM_10_0 = UNIT_END + 0x00E7, // Size: 12, Type: INT, Flags: PUBLIC
PLAYER_RANGED_CRIT_PERCENTAGE = 0x04E2, // 1 3 2 PLAYER_VISIBLE_ITEM_10_PROPERTIES = UNIT_END + 0x00F3, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
PLAYER_OFFHAND_CRIT_PERCENTAGE = 0x04E3, // 1 3 2 PLAYER_VISIBLE_ITEM_10_PAD = UNIT_END + 0x00F4, // Size: 1, Type: INT, Flags: PUBLIC
PLAYER_SPELL_CRIT_PERCENTAGE1 = 0x04E4, // 7 3 2 PLAYER_VISIBLE_ITEM_11_CREATOR = UNIT_END + 0x00F5, // Size: 2, Type: LONG, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_11_0 = UNIT_END + 0x00F7, // Size: 12, Type: INT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_11_PROPERTIES = UNIT_END + 0x0103, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_11_PAD = UNIT_END + 0x0104, // Size: 1, Type: INT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_12_CREATOR = UNIT_END + 0x0105, // Size: 2, Type: LONG, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_12_0 = UNIT_END + 0x0107, // Size: 12, Type: INT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_12_PROPERTIES = UNIT_END + 0x0113, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_12_PAD = UNIT_END + 0x0114, // Size: 1, Type: INT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_13_CREATOR = UNIT_END + 0x0115, // Size: 2, Type: LONG, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_13_0 = UNIT_END + 0x0117, // Size: 12, Type: INT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_13_PROPERTIES = UNIT_END + 0x0123, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_13_PAD = UNIT_END + 0x0124, // Size: 1, Type: INT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_14_CREATOR = UNIT_END + 0x0125, // Size: 2, Type: LONG, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_14_0 = UNIT_END + 0x0127, // Size: 12, Type: INT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_14_PROPERTIES = UNIT_END + 0x0133, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_14_PAD = UNIT_END + 0x0134, // Size: 1, Type: INT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_15_CREATOR = UNIT_END + 0x0135, // Size: 2, Type: LONG, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_15_0 = UNIT_END + 0x0137, // Size: 12, Type: INT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_15_PROPERTIES = UNIT_END + 0x0143, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_15_PAD = UNIT_END + 0x0144, // Size: 1, Type: INT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_16_CREATOR = UNIT_END + 0x0145, // Size: 2, Type: LONG, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_16_0 = UNIT_END + 0x0147, // Size: 12, Type: INT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_16_PROPERTIES = UNIT_END + 0x0153, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_16_PAD = UNIT_END + 0x0154, // Size: 1, Type: INT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_17_CREATOR = UNIT_END + 0x0155, // Size: 2, Type: LONG, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_17_0 = UNIT_END + 0x0157, // Size: 12, Type: INT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_17_PROPERTIES = UNIT_END + 0x0163, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_17_PAD = UNIT_END + 0x0164, // Size: 1, Type: INT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_18_CREATOR = UNIT_END + 0x0165, // Size: 2, Type: LONG, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_18_0 = UNIT_END + 0x0167, // Size: 12, Type: INT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_18_PROPERTIES = UNIT_END + 0x0173, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_18_PAD = UNIT_END + 0x0174, // Size: 1, Type: INT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_19_CREATOR = UNIT_END + 0x0175, // Size: 2, Type: LONG, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_19_0 = UNIT_END + 0x0177, // Size: 12, Type: INT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_19_PROPERTIES = UNIT_END + 0x0183, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
PLAYER_VISIBLE_ITEM_19_PAD = UNIT_END + 0x0184, // Size: 1, Type: INT, Flags: PUBLIC
PLAYER_CHOSEN_TITLE = UNIT_END + 0x0185, // Size: 1, Type: INT, Flags: PUBLIC
PLAYER_FIELD_INV_SLOT_HEAD = UNIT_END + 0x0186, // Size: 46, Type: LONG, Flags: PRIVATE
PLAYER_FIELD_PACK_SLOT_1 = UNIT_END + 0x01B4, // Size: 32, Type: LONG, Flags: PRIVATE
PLAYER_FIELD_BANK_SLOT_1 = UNIT_END + 0x01D4, // Size: 56, Type: LONG, Flags: PRIVATE
PLAYER_FIELD_BANKBAG_SLOT_1 = UNIT_END + 0x020C, // Size: 14, Type: LONG, Flags: PRIVATE
PLAYER_FIELD_VENDORBUYBACK_SLOT_1 = UNIT_END + 0x021A, // Size: 24, Type: LONG, Flags: PRIVATE
PLAYER_FIELD_KEYRING_SLOT_1 = UNIT_END + 0x0232, // Size: 64, Type: LONG, Flags: PRIVATE
PLAYER_FARSIGHT = UNIT_END + 0x0272, // Size: 2, Type: LONG, Flags: PRIVATE
PLAYER__FIELD_KNOWN_TITLES = UNIT_END + 0x0274, // Size: 2, Type: LONG, Flags: PRIVATE
PLAYER_XP = UNIT_END + 0x0276, // Size: 1, Type: INT, Flags: PRIVATE
PLAYER_NEXT_LEVEL_XP = UNIT_END + 0x0277, // Size: 1, Type: INT, Flags: PRIVATE
PLAYER_SKILL_INFO_1_1 = UNIT_END + 0x0278, // Size: 384, Type: TWO_SHORT, Flags: PRIVATE
PLAYER_CHARACTER_POINTS1 = UNIT_END + 0x03F8, // Size: 1, Type: INT, Flags: PRIVATE
PLAYER_CHARACTER_POINTS2 = UNIT_END + 0x03F9, // Size: 1, Type: INT, Flags: PRIVATE
PLAYER_TRACK_CREATURES = UNIT_END + 0x03FA, // Size: 1, Type: INT, Flags: PRIVATE
PLAYER_TRACK_RESOURCES = UNIT_END + 0x03FB, // Size: 1, Type: INT, Flags: PRIVATE
PLAYER_BLOCK_PERCENTAGE = UNIT_END + 0x03FC, // Size: 1, Type: FLOAT, Flags: PRIVATE
PLAYER_DODGE_PERCENTAGE = UNIT_END + 0x03FD, // Size: 1, Type: FLOAT, Flags: PRIVATE
PLAYER_PARRY_PERCENTAGE = UNIT_END + 0x03FE, // Size: 1, Type: FLOAT, Flags: PRIVATE
PLAYER_EXPERTISE = UNIT_END + 0x03FF, // Size: 1, Type: INT, Flags: PRIVATE
PLAYER_CRIT_PERCENTAGE = UNIT_END + 0x0400, // Size: 1, Type: FLOAT, Flags: PRIVATE
PLAYER_RANGED_CRIT_PERCENTAGE = UNIT_END + 0x0401, // Size: 1, Type: FLOAT, Flags: PRIVATE
PLAYER_OFFHAND_CRIT_PERCENTAGE = UNIT_END + 0x0402, // Size: 1, Type: FLOAT, Flags: PRIVATE
PLAYER_SPELL_CRIT_PERCENTAGE1 = UNIT_END + 0x0403, // Size: 7, Type: FLOAT, Flags: PRIVATE
// custom // custom
PLAYER_HOLY_SPELL_CRIT_PERCENTAGE = PLAYER_SPELL_CRIT_PERCENTAGE1+1, PLAYER_HOLY_SPELL_CRIT_PERCENTAGE = PLAYER_SPELL_CRIT_PERCENTAGE1+1,
@ -330,120 +324,146 @@ enum EUnitFields
PLAYER_SHADOW_SPELL_CRIT_PERCENTAGE = PLAYER_SPELL_CRIT_PERCENTAGE1+5, PLAYER_SHADOW_SPELL_CRIT_PERCENTAGE = PLAYER_SPELL_CRIT_PERCENTAGE1+5,
PLAYER_ARCANE_SPELL_CRIT_PERCENTAGE = PLAYER_SPELL_CRIT_PERCENTAGE1+6, PLAYER_ARCANE_SPELL_CRIT_PERCENTAGE = PLAYER_SPELL_CRIT_PERCENTAGE1+6,
PLAYER_EXPLORED_ZONES_1 = 0x04EB, // 64 5 2 PLAYER_SHIELD_BLOCK = UNIT_END + 0x040A, // Size: 1, Type: INT, Flags: PRIVATE
PLAYER_REST_STATE_EXPERIENCE = 0x052B, // 1 1 2 PLAYER_EXPLORED_ZONES_1 = UNIT_END + 0x040B, // Size: 64, Type: BYTES, Flags: PRIVATE
PLAYER_FIELD_COINAGE = 0x052C, // 1 1 2 PLAYER_REST_STATE_EXPERIENCE = UNIT_END + 0x044B, // Size: 1, Type: INT, Flags: PRIVATE
PLAYER_FIELD_MOD_DAMAGE_DONE_POS = 0x052D, // 7 1 2 PLAYER_FIELD_COINAGE = UNIT_END + 0x044C, // Size: 1, Type: INT, Flags: PRIVATE
PLAYER_FIELD_MOD_DAMAGE_DONE_NEG = 0x0534, // 7 1 2 PLAYER_FIELD_MOD_DAMAGE_DONE_POS = UNIT_END + 0x044D, // Size: 7, Type: INT, Flags: PRIVATE
PLAYER_FIELD_MOD_DAMAGE_DONE_PCT = 0x053B, // 7 1 2 PLAYER_FIELD_MOD_DAMAGE_DONE_NEG = UNIT_END + 0x0454, // Size: 7, Type: INT, Flags: PRIVATE
PLAYER_FIELD_MOD_HEALING_DONE_POS = 0x0542, // 1 1 2 PLAYER_FIELD_MOD_DAMAGE_DONE_PCT = UNIT_END + 0x045B, // Size: 7, Type: INT, Flags: PRIVATE
PLAYER_FIELD_MOD_TARGET_RESISTANCE = 0x0543, // 1 1 2 PLAYER_FIELD_MOD_HEALING_DONE_POS = UNIT_END + 0x0462, // Size: 1, Type: INT, Flags: PRIVATE
PLAYER_FIELD_BYTES = 0x0544, // 1 5 2 PLAYER_FIELD_MOD_TARGET_RESISTANCE = UNIT_END + 0x0463, // Size: 1, Type: INT, Flags: PRIVATE
PLAYER_AMMO_ID = 0x0545, // 1 1 2 PLAYER_FIELD_BYTES = UNIT_END + 0x0464, // Size: 1, Type: BYTES, Flags: PRIVATE
PLAYER_SELF_RES_SPELL = 0x0546, // 1 1 2 PLAYER_AMMO_ID = UNIT_END + 0x0465, // Size: 1, Type: INT, Flags: PRIVATE
PLAYER_FIELD_PVP_MEDALS = 0x0547, // 1 1 2 PLAYER_SELF_RES_SPELL = UNIT_END + 0x0466, // Size: 1, Type: INT, Flags: PRIVATE
PLAYER_FIELD_BUYBACK_PRICE_1 = 0x0548, // 12 1 2 PLAYER_FIELD_PVP_MEDALS = UNIT_END + 0x0467, // Size: 1, Type: INT, Flags: PRIVATE
PLAYER_FIELD_BUYBACK_TIMESTAMP_1 = 0x0554, // 12 1 2 PLAYER_FIELD_BUYBACK_PRICE_1 = UNIT_END + 0x0468, // Size: 12, Type: INT, Flags: PRIVATE
PLAYER_FIELD_KILLS = 0x0560, // 1 2 2 PLAYER_FIELD_BUYBACK_TIMESTAMP_1 = UNIT_END + 0x0474, // Size: 12, Type: INT, Flags: PRIVATE
PLAYER_FIELD_TODAY_CONTRIBUTION = 0x0561, // 1 1 2 PLAYER_FIELD_KILLS = UNIT_END + 0x0480, // Size: 1, Type: TWO_SHORT, Flags: PRIVATE
PLAYER_FIELD_YESTERDAY_CONTRIBUTION = 0x0562, // 1 1 2 PLAYER_FIELD_TODAY_CONTRIBUTION = UNIT_END + 0x0481, // Size: 1, Type: INT, Flags: PRIVATE
PLAYER_FIELD_LIFETIME_HONORBALE_KILLS = 0x0563, // 1 1 2 PLAYER_FIELD_YESTERDAY_CONTRIBUTION = UNIT_END + 0x0482, // Size: 1, Type: INT, Flags: PRIVATE
PLAYER_FIELD_BYTES2 = 0x0564, // 1 5 2 PLAYER_FIELD_LIFETIME_HONORBALE_KILLS = UNIT_END + 0x0483, // Size: 1, Type: INT, Flags: PRIVATE
PLAYER_FIELD_WATCHED_FACTION_INDEX = 0x0565, // 1 1 2 PLAYER_FIELD_BYTES2 = UNIT_END + 0x0484, // Size: 1, Type: BYTES, Flags: PRIVATE
PLAYER_FIELD_COMBAT_RATING_1 = 0x0566, // 23 1 2 PLAYER_FIELD_WATCHED_FACTION_INDEX = UNIT_END + 0x0485, // Size: 1, Type: INT, Flags: PRIVATE
PLAYER_FIELD_COMBAT_RATING_1 = UNIT_END + 0x0486, // Size: 24, Type: INT, Flags: PRIVATE
// custom // custom // client names:
// CR_WEAPON_SKILL
PLAYER_FIELD_ALL_WEAPONS_SKILL_RATING = PLAYER_FIELD_COMBAT_RATING_1, PLAYER_FIELD_ALL_WEAPONS_SKILL_RATING = PLAYER_FIELD_COMBAT_RATING_1,
// CR_DEFENSE_SKILL
PLAYER_FIELD_DEFENCE_RATING = PLAYER_FIELD_COMBAT_RATING_1+1, PLAYER_FIELD_DEFENCE_RATING = PLAYER_FIELD_COMBAT_RATING_1+1,
// CR_DODGE
PLAYER_FIELD_DODGE_RATING = PLAYER_FIELD_COMBAT_RATING_1+2, PLAYER_FIELD_DODGE_RATING = PLAYER_FIELD_COMBAT_RATING_1+2,
// CR_PARRY
PLAYER_FIELD_PARRY_RATING = PLAYER_FIELD_COMBAT_RATING_1+3, PLAYER_FIELD_PARRY_RATING = PLAYER_FIELD_COMBAT_RATING_1+3,
// CR_BLOCK
PLAYER_FIELD_BLOCK_RATING = PLAYER_FIELD_COMBAT_RATING_1+4, PLAYER_FIELD_BLOCK_RATING = PLAYER_FIELD_COMBAT_RATING_1+4,
// CR_HIT_MELEE
PLAYER_FIELD_MELEE_HIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+5, PLAYER_FIELD_MELEE_HIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+5,
// CR_HIT_RANGED
PLAYER_FIELD_RANGED_HIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+6, PLAYER_FIELD_RANGED_HIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+6,
// CR_HIT_SPELL
PLAYER_FIELD_SPELL_HIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+7, PLAYER_FIELD_SPELL_HIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+7,
// CR_CRIT_MELEE
PLAYER_FIELD_MELEE_CRIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+8, PLAYER_FIELD_MELEE_CRIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+8,
// CR_CRIT_RANGED
PLAYER_FIELD_RANGED_CRIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+9, PLAYER_FIELD_RANGED_CRIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+9,
// CR_CRIT_SPELL
PLAYER_FIELD_SPELL_CRIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+10, PLAYER_FIELD_SPELL_CRIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+10,
PLAYER_FIELD_HIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+11, // unsure, was PLAYER_FIELD_UNK1_RATING // CR_HIT_TAKEN_MELEE
PLAYER_FIELD_CRIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+12, // unsure, was PLAYER_FIELD_UNK2_RATING PLAYER_FIELD_HIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+11,
// CR_HIT_TAKEN_RANGED
PLAYER_FIELD_CRIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+12,
// CR_HIT_TAKEN_SPELL
PLAYER_FIELD_UNK3_RATING = PLAYER_FIELD_COMBAT_RATING_1+13, PLAYER_FIELD_UNK3_RATING = PLAYER_FIELD_COMBAT_RATING_1+13,
// CR_CRIT_TAKEN_MELEE
PLAYER_FIELD_UNK4_RATING = PLAYER_FIELD_COMBAT_RATING_1+14, PLAYER_FIELD_UNK4_RATING = PLAYER_FIELD_COMBAT_RATING_1+14,
// CR_CRIT_TAKEN_RANGED
PLAYER_FIELD_UNK5_RATING = PLAYER_FIELD_COMBAT_RATING_1+15, PLAYER_FIELD_UNK5_RATING = PLAYER_FIELD_COMBAT_RATING_1+15,
// CR_CRIT_TAKEN_SPELL
PLAYER_FIELD_RESILIENCE_RATING = PLAYER_FIELD_COMBAT_RATING_1+16, PLAYER_FIELD_RESILIENCE_RATING = PLAYER_FIELD_COMBAT_RATING_1+16,
// CR_HASTE_MELEE
PLAYER_FIELD_MELEE_HASTE_RATING = PLAYER_FIELD_COMBAT_RATING_1+17, PLAYER_FIELD_MELEE_HASTE_RATING = PLAYER_FIELD_COMBAT_RATING_1+17,
PLAYER_FIELD_RANGED_HASTE_RATING = PLAYER_FIELD_COMBAT_RATING_1+19, // CR_HASTE_RANGED
PLAYER_FIELD_SPELL_HASTE_RATING = PLAYER_FIELD_COMBAT_RATING_1+20, PLAYER_FIELD_RANGED_HASTE_RATING = PLAYER_FIELD_COMBAT_RATING_1+18,
PLAYER_FIELD_MELEE_WEAPON_SKILL_RATING = PLAYER_FIELD_COMBAT_RATING_1+21, // CR_HASTE_SPELL
PLAYER_FIELD_OFFHAND_WEAPON_SKILL_RATING = PLAYER_FIELD_COMBAT_RATING_1+22, PLAYER_FIELD_SPELL_HASTE_RATING = PLAYER_FIELD_COMBAT_RATING_1+19,
PLAYER_FIELD_RANGED_WEAPON_SKILL_RATING = PLAYER_FIELD_COMBAT_RATING_1+23, // CR_WEAPON_SKILL_MAINHAND
PLAYER_FIELD_MELEE_WEAPON_SKILL_RATING = PLAYER_FIELD_COMBAT_RATING_1+20,
// CR_WEAPON_SKILL_OFFHAND
PLAYER_FIELD_OFFHAND_WEAPON_SKILL_RATING = PLAYER_FIELD_COMBAT_RATING_1+21,
// CR_WEAPON_SKILL_RANGED
PLAYER_FIELD_RANGED_WEAPON_SKILL_RATING = PLAYER_FIELD_COMBAT_RATING_1+22,
// CR_EXPERTISE
PLAYER_FIELD_EXPERTISE_RATING = PLAYER_FIELD_COMBAT_RATING_1+23,
PLAYER_FIELD_ARENA_TEAM_INFO_1_1 = 0x057D, // 15 1 2 PLAYER_FIELD_ARENA_TEAM_INFO_1_1 = UNIT_END + 0x049E, // Size: 18, Type: INT, Flags: PRIVATE
// custom // custom
PLAYER_FIELD_ARENA_TEAM_ID_2v2 = PLAYER_FIELD_ARENA_TEAM_INFO_1_1, PLAYER_FIELD_ARENA_TEAM_ID_2v2 = PLAYER_FIELD_ARENA_TEAM_INFO_1_1,
PLAYER_FIELD_ARENA_TEAM_ID_3v3 = PLAYER_FIELD_ARENA_TEAM_INFO_1_1+5, PLAYER_FIELD_ARENA_TEAM_ID_3v3 = PLAYER_FIELD_ARENA_TEAM_INFO_1_1+6,
PLAYER_FIELD_ARENA_TEAM_ID_5v5 = PLAYER_FIELD_ARENA_TEAM_INFO_1_1+10, PLAYER_FIELD_ARENA_TEAM_ID_5v5 = PLAYER_FIELD_ARENA_TEAM_INFO_1_1+12,
PLAYER_FIELD_HONOR_CURRENCY = 0x058C, // 1 1 2 PLAYER_FIELD_HONOR_CURRENCY = UNIT_END + 0x04B0, // Size: 1, Type: INT, Flags: PRIVATE
PLAYER_FIELD_ARENA_CURRENCY = 0x058D, // 1 1 2 PLAYER_FIELD_ARENA_CURRENCY = UNIT_END + 0x04B1, // Size: 1, Type: INT, Flags: PRIVATE
PLAYER_FIELD_MOD_MANA_REGEN = 0x058E, // 1 3 2 PLAYER_FIELD_MOD_MANA_REGEN = UNIT_END + 0x04B2, // Size: 1, Type: FLOAT, Flags: PRIVATE
PLAYER_FIELD_MOD_MANA_REGEN_INTERRUPT = 0x058F, // 1 3 2 PLAYER_FIELD_MOD_MANA_REGEN_INTERRUPT = UNIT_END + 0x04B3, // Size: 1, Type: FLOAT, Flags: PRIVATE
PLAYER_FIELD_MAX_LEVEL = 0x0590, // 1 1 2 PLAYER_FIELD_MAX_LEVEL = UNIT_END + 0x04B4, // Size: 1, Type: INT, Flags: PRIVATE
PLAYER_FIELD_DAILY_QUESTS_1 = 0x0591, // 10 1 2 PLAYER_FIELD_DAILY_QUESTS_1 = UNIT_END + 0x04B5, // Size: 10, Type: INT, Flags: PRIVATE
PLAYER_FIELD_PADDING = 0x059B, // 1 1 0 PLAYER_FIELD_PADDING = UNIT_END + 0x04BF, // Size: 1, Type: INT, Flags: NONE
PLAYER_END = 0x059C, PLAYER_END = UNIT_END + 0x04C0,
}; };
enum EGameObjectFields enum EGameObjectFields
{ {
OBJECT_FIELD_CREATED_BY = 0x0006, // 2 4 1 OBJECT_FIELD_CREATED_BY = OBJECT_END + 0x0000, // Size: 2, Type: LONG, Flags: PUBLIC
GAMEOBJECT_DISPLAYID = 0x0008, // 1 1 1 GAMEOBJECT_DISPLAYID = OBJECT_END + 0x0002, // Size: 1, Type: INT, Flags: PUBLIC
GAMEOBJECT_FLAGS = 0x0009, // 1 1 1 GAMEOBJECT_FLAGS = OBJECT_END + 0x0003, // Size: 1, Type: INT, Flags: PUBLIC
GAMEOBJECT_ROTATION = 0x000A, // 4 3 1 GAMEOBJECT_ROTATION = OBJECT_END + 0x0004, // Size: 4, Type: FLOAT, Flags: PUBLIC
GAMEOBJECT_STATE = 0x000E, // 1 1 1 GAMEOBJECT_STATE = OBJECT_END + 0x0008, // Size: 1, Type: INT, Flags: PUBLIC
GAMEOBJECT_POS_X = 0x000F, // 1 3 1 GAMEOBJECT_POS_X = OBJECT_END + 0x0009, // Size: 1, Type: FLOAT, Flags: PUBLIC
GAMEOBJECT_POS_Y = 0x0010, // 1 3 1 GAMEOBJECT_POS_Y = OBJECT_END + 0x000A, // Size: 1, Type: FLOAT, Flags: PUBLIC
GAMEOBJECT_POS_Z = 0x0011, // 1 3 1 GAMEOBJECT_POS_Z = OBJECT_END + 0x000B, // Size: 1, Type: FLOAT, Flags: PUBLIC
GAMEOBJECT_FACING = 0x0012, // 1 3 1 GAMEOBJECT_FACING = OBJECT_END + 0x000C, // Size: 1, Type: FLOAT, Flags: PUBLIC
GAMEOBJECT_DYN_FLAGS = 0x0013, // 1 1 256 GAMEOBJECT_DYN_FLAGS = OBJECT_END + 0x000D, // Size: 1, Type: INT, Flags: DYNAMIC
GAMEOBJECT_FACTION = 0x0014, // 1 1 1 GAMEOBJECT_FACTION = OBJECT_END + 0x000E, // Size: 1, Type: INT, Flags: PUBLIC
GAMEOBJECT_TYPE_ID = 0x0015, // 1 1 1 GAMEOBJECT_TYPE_ID = OBJECT_END + 0x000F, // Size: 1, Type: INT, Flags: PUBLIC
GAMEOBJECT_LEVEL = 0x0016, // 1 1 1 GAMEOBJECT_LEVEL = OBJECT_END + 0x0010, // Size: 1, Type: INT, Flags: PUBLIC
GAMEOBJECT_ARTKIT = 0x0017, // 1 1 1 GAMEOBJECT_ARTKIT = OBJECT_END + 0x0011, // Size: 1, Type: INT, Flags: PUBLIC
GAMEOBJECT_ANIMPROGRESS = 0x0018, // 1 1 256 GAMEOBJECT_ANIMPROGRESS = OBJECT_END + 0x0012, // Size: 1, Type: INT, Flags: DYNAMIC
GAMEOBJECT_PADDING = 0x0019, // 1 1 0 GAMEOBJECT_PADDING = OBJECT_END + 0x0013, // Size: 1, Type: INT, Flags: NONE
GAMEOBJECT_END = 0x001A, GAMEOBJECT_END = OBJECT_END + 0x0014,
}; };
enum EDynamicObjectFields enum EDynamicObjectFields
{ {
DYNAMICOBJECT_CASTER = 0x0006, // 2 4 1 DYNAMICOBJECT_CASTER = OBJECT_END + 0x0000, // Size: 2, Type: LONG, Flags: PUBLIC
DYNAMICOBJECT_BYTES = 0x0008, // 1 5 1 DYNAMICOBJECT_BYTES = OBJECT_END + 0x0002, // Size: 1, Type: BYTES, Flags: PUBLIC
DYNAMICOBJECT_SPELLID = 0x0009, // 1 1 1 DYNAMICOBJECT_SPELLID = OBJECT_END + 0x0003, // Size: 1, Type: INT, Flags: PUBLIC
DYNAMICOBJECT_RADIUS = 0x000A, // 1 3 1 DYNAMICOBJECT_RADIUS = OBJECT_END + 0x0004, // Size: 1, Type: FLOAT, Flags: PUBLIC
DYNAMICOBJECT_POS_X = 0x000B, // 1 3 1 DYNAMICOBJECT_POS_X = OBJECT_END + 0x0005, // Size: 1, Type: FLOAT, Flags: PUBLIC
DYNAMICOBJECT_POS_Y = 0x000C, // 1 3 1 DYNAMICOBJECT_POS_Y = OBJECT_END + 0x0006, // Size: 1, Type: FLOAT, Flags: PUBLIC
DYNAMICOBJECT_POS_Z = 0x000D, // 1 3 1 DYNAMICOBJECT_POS_Z = OBJECT_END + 0x0007, // Size: 1, Type: FLOAT, Flags: PUBLIC
DYNAMICOBJECT_FACING = 0x000E, // 1 3 1 DYNAMICOBJECT_FACING = OBJECT_END + 0x0008, // Size: 1, Type: FLOAT, Flags: PUBLIC
DYNAMICOBJECT_PAD = 0x000F, // 1 5 1 DYNAMICOBJECT_PAD = OBJECT_END + 0x0009, // Size: 1, Type: BYTES, Flags: PUBLIC
DYNAMICOBJECT_END = 0x0010, DYNAMICOBJECT_END = OBJECT_END + 0x000A,
}; };
enum ECorpseFields enum ECorpseFields
{ {
CORPSE_FIELD_OWNER = 0x0006, // 2 4 1 CORPSE_FIELD_OWNER = OBJECT_END + 0x0000, // Size: 2, Type: LONG, Flags: PUBLIC
CORPSE_FIELD_FACING = 0x0008, // 1 3 1 CORPSE_FIELD_FACING = OBJECT_END + 0x0002, // Size: 1, Type: FLOAT, Flags: PUBLIC
CORPSE_FIELD_POS_X = 0x0009, // 1 3 1 CORPSE_FIELD_POS_X = OBJECT_END + 0x0003, // Size: 1, Type: FLOAT, Flags: PUBLIC
CORPSE_FIELD_POS_Y = 0x000A, // 1 3 1 CORPSE_FIELD_POS_Y = OBJECT_END + 0x0004, // Size: 1, Type: FLOAT, Flags: PUBLIC
CORPSE_FIELD_POS_Z = 0x000B, // 1 3 1 CORPSE_FIELD_POS_Z = OBJECT_END + 0x0005, // Size: 1, Type: FLOAT, Flags: PUBLIC
CORPSE_FIELD_DISPLAY_ID = 0x000C, // 1 1 1 CORPSE_FIELD_DISPLAY_ID = OBJECT_END + 0x0006, // Size: 1, Type: INT, Flags: PUBLIC
CORPSE_FIELD_ITEM = 0x000D, // 19 1 1 CORPSE_FIELD_ITEM = OBJECT_END + 0x0007, // Size: 19, Type: INT, Flags: PUBLIC
CORPSE_FIELD_BYTES_1 = 0x0020, // 1 5 1 CORPSE_FIELD_BYTES_1 = OBJECT_END + 0x001A, // Size: 1, Type: BYTES, Flags: PUBLIC
CORPSE_FIELD_BYTES_2 = 0x0021, // 1 5 1 CORPSE_FIELD_BYTES_2 = OBJECT_END + 0x001B, // Size: 1, Type: BYTES, Flags: PUBLIC
CORPSE_FIELD_GUILD = 0x0022, // 1 1 1 CORPSE_FIELD_GUILD = OBJECT_END + 0x001C, // Size: 1, Type: INT, Flags: PUBLIC
CORPSE_FIELD_FLAGS = 0x0023, // 1 1 1 CORPSE_FIELD_FLAGS = OBJECT_END + 0x001D, // Size: 1, Type: INT, Flags: PUBLIC
CORPSE_FIELD_DYNAMIC_FLAGS = 0x0024, // 1 1 256 CORPSE_FIELD_DYNAMIC_FLAGS = OBJECT_END + 0x001E, // Size: 1, Type: INT, Flags: DYNAMIC
CORPSE_FIELD_PAD = 0x0025, // 1 1 0 CORPSE_FIELD_PAD = OBJECT_END + 0x001F, // Size: 1, Type: INT, Flags: NONE
CORPSE_END = 0x0026, CORPSE_END = OBJECT_END + 0x0020,
}; };
#endif #endif

View File

@ -56,6 +56,12 @@ WorldSession::~WorldSession()
DEBUG(logdebug("~WorldSession() this=0x%X _instance=0x%X",this,_instance)); DEBUG(logdebug("~WorldSession() this=0x%X _instance=0x%X",this,_instance));
} }
void WorldSession::SetMustDie(void)
{
_mustdie = true;
logdebug("WorldSession: Must die now.");
}
void WorldSession::Start(void) void WorldSession::Start(void)
{ {
log("Connecting to '%s' on port %u",GetInstance()->GetConf()->worldhost.c_str(),GetInstance()->GetConf()->worldport); log("Connecting to '%s' on port %u",GetInstance()->GetConf()->worldhost.c_str(),GetInstance()->GetConf()->worldport);
@ -70,9 +76,11 @@ void WorldSession::Start(void)
// if we cant connect, wait until the socket gives up (after 5 secs) // if we cant connect, wait until the socket gives up (after 5 secs)
while( (!MustDie()) && (!_socket->IsOk()) && (!GetInstance()->Stopped()) ) while( (!MustDie()) && (!_socket->IsOk()) && (!GetInstance()->Stopped()) )
{ {
logdev("WorldSession::Start(): Socket not ok, waiting...");
_sh.Select(3,0); _sh.Select(3,0);
GetInstance()->Sleep(100); GetInstance()->Sleep(100);
} }
logdev("WorldSession::Start() done, mustdie:%u, socket_ok:%u stopped:%u",MustDie(),_socket->IsOk(),GetInstance()->Stopped());
} }
void WorldSession::_LoadCache(void) void WorldSession::_LoadCache(void)
@ -169,7 +177,7 @@ void WorldSession::HandleWorldPacket(WorldPacket *packet)
(this->*table[hpos].handler)(*packet); (this->*table[hpos].handler)(*packet);
// if there is a script attached to that opcode, call it now. // if there is a script attached to that opcode, call it now.
// note: the pkt rpos needs to be reset in by the scripts! // note: the pkt rpos needs to be reset by the scripts!
std::string scname = "opcode::"; std::string scname = "opcode::";
scname += stringToLower(GetOpcodeName(packet->GetOpcode())); scname += stringToLower(GetOpcodeName(packet->GetOpcode()));
if(sc->ScriptExists(scname)) if(sc->ScriptExists(scname))
@ -186,6 +194,8 @@ void WorldSession::HandleWorldPacket(WorldPacket *packet)
{ {
logerror("Exception while handling opcode %u!",packet->GetOpcode()); logerror("Exception while handling opcode %u!",packet->GetOpcode());
logerror("Data: pktsize=%u, handler=0x%X queuesize=%u",packet->size(),table[hpos].handler,pktQueue.size()); logerror("Data: pktsize=%u, handler=0x%X queuesize=%u",packet->size(),table[hpos].handler,pktQueue.size());
logerror("Packet Hexdump:");
logerror("%s",toHexDump((uint8*)packet->contents(),packet->size(),true).c_str());
} }
delete packet; delete packet;
@ -229,6 +239,7 @@ OpcodeHandler *WorldSession::_GetOpcodeHandlerTable() const
{SMSG_COMPRESSED_UPDATE_OBJECT, &WorldSession::_HandleCompressedUpdateObjectOpcode}, {SMSG_COMPRESSED_UPDATE_OBJECT, &WorldSession::_HandleCompressedUpdateObjectOpcode},
{SMSG_UPDATE_OBJECT, &WorldSession::_HandleUpdateObjectOpcode}, {SMSG_UPDATE_OBJECT, &WorldSession::_HandleUpdateObjectOpcode},
{SMSG_CAST_RESULT, &WorldSession::_HandleCastResultOpcode}, {SMSG_CAST_RESULT, &WorldSession::_HandleCastResultOpcode},
{SMSG_CAST_SUCCESS, &WorldSession::_HandleCastSuccessOpcode},
{SMSG_ITEM_QUERY_SINGLE_RESPONSE, &WorldSession::_HandleItemQuerySingleResponseOpcode}, {SMSG_ITEM_QUERY_SINGLE_RESPONSE, &WorldSession::_HandleItemQuerySingleResponseOpcode},
{SMSG_DESTROY_OBJECT, &WorldSession::_HandleDestroyObjectOpcode}, {SMSG_DESTROY_OBJECT, &WorldSession::_HandleDestroyObjectOpcode},
{SMSG_INITIAL_SPELLS, &WorldSession::_HandleInitialSpellsOpcode}, {SMSG_INITIAL_SPELLS, &WorldSession::_HandleInitialSpellsOpcode},
@ -756,15 +767,15 @@ void WorldSession::_HandleMovementOpcode(WorldPacket& recvPacket)
void WorldSession::_HandleTelePortAckOpcode(WorldPacket& recvPacket) void WorldSession::_HandleTelePortAckOpcode(WorldPacket& recvPacket)
{ {
uint32 unk32,time; uint32 unk32,time;
uint64 guid; uint64 guid;
uint8 unk8;
float x, y, z, o; float x, y, z, o;
guid = recvPacket.GetPackedGuid(); guid = recvPacket.GetPackedGuid();
recvPacket >> unk32 >> unk32 >> time >> x >> y >> z >> o >> unk32; recvPacket >> unk32 >> unk32 >> unk8 >> time >> x >> y >> z >> o >> unk32;
logdetail("Got teleported, data: x: %f, y: %f, z: %f, o: %f, guid: "I64FMT, x, y, z, o, guid); logdetail("Got teleported, data: x: %f, y: %f, z: %f, o: %f, guid: "I64FMT, x, y, z, o, guid);
// TODO: put this into a capsule class later, that autodetects movement flags etc. // TODO: put this into a capsule class later, that autodetects movement flags etc.
WorldPacket response; WorldPacket response;
@ -816,18 +827,23 @@ void WorldSession::_HandleChannelNotifyOpcode(WorldPacket& recvPacket)
void WorldSession::_HandleCastResultOpcode(WorldPacket& recvPacket) void WorldSession::_HandleCastResultOpcode(WorldPacket& recvPacket)
{ {
uint32 spellid; uint32 spellid,otherr = 0;
uint8 flag,result; uint8 result;
recvPacket >> spellid >> flag; recvPacket >> spellid >> result;
if(flag) if (recvPacket.rpos()+1 < recvPacket.size())
{ recvPacket >> otherr;
recvPacket >> result; logdetail("Cast of spell %u failed. result=%u, additional info=%u",spellid,result,otherr);
logdetail("Cast of spell %u failed. flag=%u, result=%u",spellid,flag,result); }
}
else void WorldSession::_HandleCastSuccessOpcode(WorldPacket& recvPacket)
{ {
logdetail("Cast of spell %u successful.",spellid); uint32 spellId;
} uint64 casterGuid;
casterGuid = recvPacket.GetPackedGuid();
recvPacket >> spellId;
logdetail("Cast of spell %u successful.",spellId);
} }
void WorldSession::_HandleInitialSpellsOpcode(WorldPacket& recvPacket) void WorldSession::_HandleInitialSpellsOpcode(WorldPacket& recvPacket)
@ -881,7 +897,8 @@ void WorldSession::_HandleEmoteOpcode(WorldPacket& recvPacket)
if(plrname.empty()) if(plrname.empty())
{ {
SendQueryPlayerName(guid); SendQueryPlayerName(guid);
plrname="Unknown Entity"; _DelayWorldPacket(recvPacket, GetLagMS() * 1.2f);
return;
} }
} }
@ -1066,3 +1083,4 @@ void WorldSession::_HandleWhoOpcode(WorldPacket& recvPacket)
// TODO: delete world on LogoutComplete once implemented // TODO: delete world on LogoutComplete once implemented

View File

@ -54,7 +54,7 @@ public:
void Update(void); void Update(void);
void Start(void); void Start(void);
inline bool MustDie(void) { return _mustdie; } inline bool MustDie(void) { return _mustdie; }
inline void SetMustDie(void) { _mustdie = true; } void SetMustDie(void);
void SendWorldPacket(WorldPacket&); void SendWorldPacket(WorldPacket&);
inline bool InWorld(void) { return _logged; } inline bool InWorld(void) { return _logged; }
inline uint32 GetLagMS(void) { return _lag_ms; } inline uint32 GetLagMS(void) { return _lag_ms; }
@ -107,6 +107,7 @@ private:
void _HandleTelePortAckOpcode(WorldPacket& recvPacket); void _HandleTelePortAckOpcode(WorldPacket& recvPacket);
void _HandleChannelNotifyOpcode(WorldPacket& recvPacket); void _HandleChannelNotifyOpcode(WorldPacket& recvPacket);
void _HandleCastResultOpcode(WorldPacket& recvPacket); void _HandleCastResultOpcode(WorldPacket& recvPacket);
void _HandleCastSuccessOpcode(WorldPacket& recvPacket);
void _HandleCompressedUpdateObjectOpcode(WorldPacket& recvPacket); void _HandleCompressedUpdateObjectOpcode(WorldPacket& recvPacket);
void _HandleUpdateObjectOpcode(WorldPacket& recvPacket); void _HandleUpdateObjectOpcode(WorldPacket& recvPacket);
void _HandleItemQuerySingleResponseOpcode(WorldPacket& recvPacket); void _HandleItemQuerySingleResponseOpcode(WorldPacket& recvPacket);

View File

@ -2,6 +2,7 @@
#include "WorldPacket.h" #include "WorldPacket.h"
#include "WorldSession.h" #include "WorldSession.h"
#include "WorldSocket.h" #include "WorldSocket.h"
#include "Opcodes.h"
WorldSocket::WorldSocket(SocketHandler &h, WorldSession *s) : TcpSocket(h) WorldSocket::WorldSocket(SocketHandler &h, WorldSession *s) : TcpSocket(h)
{ {
@ -81,7 +82,7 @@ void WorldSocket::OnRead()
_crypt.DecryptRecv((uint8*)&hdr,sizeof(ServerPktHeader)); _crypt.DecryptRecv((uint8*)&hdr,sizeof(ServerPktHeader));
_remaining = ntohs(hdr.size)-2; _remaining = ntohs(hdr.size)-2;
_opcode = hdr.cmd; _opcode = hdr.cmd;
if(_opcode > 1000) // no opcode has yet a number over 1000 if(_opcode > MAX_OPCODE_ID) // no opcode has yet a number over 1000
{ {
logcritical("CRYPT ERROR: opcode=%u, remain=%u",_opcode,_remaining); // this should never be the case! logcritical("CRYPT ERROR: opcode=%u, remain=%u",_opcode,_remaining); // this should never be the case!
GetSession()->GetInstance()->SetError(); // no way to recover the crypt, must exit GetSession()->GetInstance()->SetError(); // no way to recover the crypt, must exit