* 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
ClientVersion=2.1.3
ClientBuild=6898
ClientVersion=2.3.0
ClientBuild=7561
ClientLanguage=enUS
// or change to enGB, deDE, ...
@ -114,3 +114,4 @@ rmcontrolhost=localhost
useMaps=0

View File

@ -14,7 +14,7 @@ SET,color ${@0}
DEFAULT,i 0
TOINT,i ${i}
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 color

View File

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

View File

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

View File

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

View File

@ -118,6 +118,7 @@ void WorldSession::SendCastSpell(uint32 spellid, bool nocheck)
ByteBuffer temp;
uint16 flags=TARGET_FLAG_SELF; // target mask. spellcast implementeation needs to be changed if TARGET_MASK_SELF is != 0
packet << spellid;
packet << (uint8)0; // unk
if(my->GetTarget() != GetGuid()) // self cast?
{
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"
// increase this number whenever you change something that makes old files unusable
uint32 ITEMPROTOTYPES_CACHE_VERSION = 0x00000001;
uint32 ITEMPROTOTYPES_CACHE_VERSION = 0x00000002;
PlayerNameCache::~PlayerNameCache()
{
@ -261,6 +261,7 @@ void ItemProtoCache_InsertDataToSession(WorldSession *session)
buf >> proto->socketBonus;
buf >> proto->GemProperties;
buf >> proto->ExtendedCost;
buf >> proto->RequiredArenaRank;
buf >> proto->RequiredDisenchantSkill;
buf >> proto->ArmorDamageModifier;
@ -378,6 +379,7 @@ void ItemProtoCache_WriteDataToCache(WorldSession *session)
buf << proto->socketBonus;
buf << proto->GemProperties;
buf << proto->ExtendedCost;
buf << proto->RequiredArenaRank;
buf << proto->RequiredDisenchantSkill;
buf << proto->ArmorDamageModifier;

View File

@ -218,22 +218,25 @@ enum INVENTORY_CLASS
// but this value used in code as implementation workaround
enum ITEM_SUBCLASS_CONSUMABLE
{
ITEM_SUBCLASS_FOOD = 1,
ITEM_SUBCLASS_LIQUID = 2,
ITEM_SUBCLASS_POTION = 3,
ITEM_SUBCLASS_POTION = 1,
ITEM_SUBCLASS_ELIXIR = 2,
ITEM_SUBCLASS_FLASK = 3,
ITEM_SUBCLASS_SCROLL = 4,
ITEM_SUBCLASS_BANDAGE = 5,
ITEM_SUBCLASS_HEALTHSTONE = 6,
ITEM_SUBCLASS_COMBAT_EFFECT = 7
ITEM_SUBCLASS_FOOD = 5,
ITEM_SUBCLASS_ITEM_ENHANCEMENT = 6,
ITEM_SUBCLASS_BANDAGE = 7
};
enum ITEM_SUBCLASS_CONTAINER
{
ITEM_SUBCLASS_CONTAINER = 0,
ITEM_SUBCLASS_SOUL_CONTAINER = 1,
ITEM_SUBCLASS_HERB_CONTAINER = 2,
ITEM_SUBCLASS_ENCHANTING_CONTAINER = 3,
ITEM_SUBCLASS_ENGINEERING_CONTAINER = 4
ITEM_SUBCLASS_CONTAINER = 0,
ITEM_SUBCLASS_SOUL_CONTAINER = 1,
ITEM_SUBCLASS_HERB_CONTAINER = 2,
ITEM_SUBCLASS_ENCHANTING_CONTAINER = 3,
ITEM_SUBCLASS_ENGINEERING_CONTAINER = 4,
ITEM_SUBCLASS_GEM_CONTAINER = 5,
ITEM_SUBCLASS_MINING_CONTAINER = 6,
ITEM_SUBCLASS_LEATHERWORKING_CONTAINER = 7
};
enum INVENTORY_SUBCLASS_WEAPON
@ -283,7 +286,16 @@ enum ITEM_SUBCLASS_TRADE_GOODS
ITEM_SUBCLASS_TRADE_GOODS = 0,
ITEM_SUBCLASS_PARTS = 1,
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
@ -399,6 +411,7 @@ struct ItemProto
uint32 socketBonus;
uint32 GemProperties;
uint32 ExtendedCost;
uint32 RequiredArenaRank;
uint32 RequiredDisenchantSkill;
float ArmorDamageModifier;
};

File diff suppressed because it is too large Load Diff

View File

@ -50,8 +50,6 @@ enum OpCodes
CMSG_DESTROYMONSTER = 18,
CMSG_CREATEITEM = 19,
CMSG_CREATEGAMEOBJECT = 20,
//CMSG_MAKEMONSTERATTACKME = 21, //OBSOLETE
CMSG_MAKEMONSTERATTACKME_OBSOLETE = 21,
CMSG_MAKEMONSTERATTACKGUID = 22,
CMSG_ENABLEDEBUGCOMBATLOGGING_OBSOLETE = 23,
@ -96,7 +94,7 @@ enum OpCodes
SMSG_NEW_WORLD = 62,
SMSG_TRANSFER_PENDING = 63,
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_GAMETIME_UPDATE = 67,
CMSG_GAMETIME_SET = 68,
@ -343,14 +341,12 @@ enum OpCodes
SMSG_COOLDOWN_EVENT = 309,
CMSG_CANCEL_AURA = 310,
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_UPDATE = 314,
CMSG_CANCEL_CHANNELLING = 315,
SMSG_AI_REACTION = 316,
SMSG_AI_REACTION = 316, // may be monser attack sound?
CMSG_SET_SELECTION = 317,
//CMSG_SET_TARGET = 318, //OBSOLETE
CMSG_SET_TARGET_OBSOLETE = 318,
CMSG_UNUSED = 319,
CMSG_UNUSED2 = 320,
@ -399,21 +395,19 @@ enum OpCodes
SMSG_DUEL_WINNER = 363,
CMSG_DUEL_ACCEPTED = 364,
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_DISMOUNTRESULT = 367, // 0 - int err, don't have pet to dismount, 1 - not mounted, 2 - int err, dismounting a non-pet
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_PUREMOUNT_CANCELLED_OBSOLETE = 368,
CMSG_MOUNTSPECIAL_ANIM = 369,
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_ACTION = 373,
CMSG_PET_ABANDON = 374,
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,
//CMSG_PET_CAST_SPELL_OBSOLETE = 378, //OBSOLETE
SMSG_PET_MODE = 378, // uint64 pet_guid + uint32 flags?
SMSG_PET_MODE = 378, // uint64 pet_guid + uint32 flags?
CMSG_GOSSIP_HELLO = 379,
CMSG_GOSSIP_SELECT_OPTION = 380,
SMSG_GOSSIP_MESSAGE = 381,
@ -473,7 +467,7 @@ enum OpCodes
SMSG_TRAINER_BUY_SUCCEEDED = 435,
SMSG_TRAINER_BUY_FAILED = 436,
CMSG_BINDER_ACTIVATE = 437,
SMSG_PLAYERBINDERROR = 438, // You already bound there.
SMSG_PLAYERBINDERROR = 438, // You already bound there.
CMSG_BANKER_ACTIVATE = 439,
SMSG_SHOW_BANK = 440,
CMSG_BUY_BANK_SLOT = 441,
@ -514,7 +508,7 @@ enum OpCodes
CMSG_PING = 476,
SMSG_PONG = 477,
SMSG_CLEAR_COOLDOWN = 478,
SMSG_GAMEOBJECT_PAGETEXT = 479, // uint64 guid
SMSG_GAMEOBJECT_PAGETEXT = 479, // uint64 guid
CMSG_SETSHEATHED = 480,
SMSG_COOLDOWN_CHEAT = 481,
SMSG_SPELL_DELAYED = 482,
@ -522,19 +516,15 @@ enum OpCodes
SMSG_PLAYER_MACRO_OBSOLETE = 484,
CMSG_GHOST = 485,
CMSG_GM_INVIS = 486,
//CMSG_SCREENSHOT = 487, //OBSOLETE
SMSG_INVALID_PROMOTION_CODE = 487, // Couldn't validate code, please try again.
SMSG_INVALID_PROMOTION_CODE = 487, // Couldn't validate code, please try again.
MSG_GM_BIND_OTHER = 488,
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_AUTH_CHALLENGE = 492,
CMSG_AUTH_SESSION = 493,
SMSG_AUTH_RESPONSE = 494,
MSG_GM_SHOWLABEL = 495,
//MSG_ADD_DYNAMIC_TARGET = 496, //OBSOLETE
MSG_ADD_DYNAMIC_TARGET_OBSOLETE = 496,
MSG_SAVE_GUILD_EMBLEM = 497,
MSG_TABARDVENDOR_ACTIVATE = 498,
@ -576,7 +566,7 @@ enum OpCodes
MSG_CORPSE_QUERY = 534,
CMSG_GMTICKET_DELETETICKET = 535,
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,
SMSG_GMTICKET_SYSTEMSTATUS = 539,
CMSG_SPIRIT_HEALER_ACTIVATE = 540,
@ -634,8 +624,6 @@ enum OpCodes
SMSG_SPELLNONMELEEDAMAGELOG = 592,
CMSG_LEARN_TALENT = 593,
SMSG_RESURRECT_FAILED = 594,
//CMSG_ENABLE_PVP = 595, //OBSOLETE
CMSG_TOGGLE_PVP = 595,
SMSG_ZONE_UNDER_ATTACK = 596,
MSG_AUCTION_HELLO = 597,
@ -680,8 +668,6 @@ enum OpCodes
SMSG_DAMAGE_CALC_LOG = 636,
CMSG_ENABLE_DAMAGE_LOG = 637,
CMSG_GROUP_CHANGE_SUB_GROUP = 638,
//SMSG_RAID_MEMBER_STATS = 639, //OBSOLETE
CMSG_REQUEST_PARTY_MEMBER_STATS = 639,
CMSG_GROUP_SWAP_SUB_GROUP = 640,
CMSG_RESET_FACTION_CHEAT = 641,
@ -689,7 +675,7 @@ enum OpCodes
CMSG_AUTOBANK_ITEM = 643,
MSG_QUERY_NEXT_MAIL_TIME = 644,
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_PVP_RANK_CHEAT = 648,
CMSG_ADD_PVP_MEDAL_CHEAT = 649,
@ -704,11 +690,11 @@ enum OpCodes
CMSG_MEETINGSTONE_JOIN = 658,
CMSG_MEETINGSTONE_LEAVE = 659,
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,
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_MEMBER_ADDED = 665, // %s has been added to the group by 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_MEMBER_ADDED = 665, // %s has been added to the group by the LFG matchmaking system.
CMSG_GMTICKETSYSTEM_TOGGLE = 666,
CMSG_CANCEL_GROWTH_AURA = 667,
SMSG_CANCEL_AUTO_REPEAT = 668,
@ -722,30 +708,28 @@ enum OpCodes
SMSG_LOOT_MASTER_LIST = 676,
SMSG_SET_FORCED_REACTIONS = 677,
SMSG_SPELL_FAILED_OTHER = 678,
SMSG_GAMEOBJECT_RESET_STATE = 679, // uint64 guid
SMSG_GAMEOBJECT_RESET_STATE = 679, // uint64 guid
CMSG_REPAIR_ITEM = 680,
SMSG_CHAT_PLAYER_NOT_FOUND = 681,
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,
MSG_MOVE_TOGGLE_GRAVITY_CHEAT = 685,
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_WATER_WALK = 689,
CMSG_SERVER_BROADCAST = 690,
CMSG_SELF_RES = 691, // only if PLAYER_SELF_RES_SPELL field != 0
SMSG_FEIGN_DEATH_RESISTED = 692, // Resisted
CMSG_SELF_RES = 691, // only if PLAYER_SELF_RES_SPELL field != 0
SMSG_FEIGN_DEATH_RESISTED = 692, // Resisted
CMSG_RUN_SCRIPT = 693,
SMSG_SCRIPT_MESSAGE = 694,
SMSG_DUEL_COUNTDOWN = 695,
SMSG_AREA_TRIGGER_MESSAGE = 696,
CMSG_TOGGLE_HELM = 697,
CMSG_TOGGLE_CLOAK = 698,
//SMSG_SPELL_REFLECTED = 699, //OBSOLETE
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_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,
CMSG_SET_EXPLORATION = 702,
CMSG_SET_ACTIONBAR_TOGGLES = 703,
@ -755,12 +739,12 @@ enum OpCodes
SMSG_UPDATE_WORLD_STATE = 707,
CMSG_ITEM_NAME_QUERY = 708,
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,
SMSG_CHAR_RENAME = 712,
CMSG_MOVE_SPLINE_DONE = 713,
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,
CMSG_REQUEST_RAID_INFO = 717,
CMSG_MOVE_TIME_SKIPPED = 718,
@ -784,14 +768,12 @@ enum OpCodes
MSG_PVP_LOG_DATA = 736,
CMSG_LEAVE_BATTLEFIELD = 737,
CMSG_AREA_SPIRIT_HEALER_QUERY = 738,
CMSG_AREA_SPIRIT_HEALER_QUEUE = 739, // WTF?
SMSG_AREA_SPIRIT_HEALER_TIME = 740, // uint64 guid+uint32 time?
//CMSG_GM_UNTEACH = 739, // WTF?
//SMSG_HARDWARE_SURVEY_REQUEST = 740, // WTF?
CMSG_HARDWARE_SURVEY_RESULTS = 741,
CMSG_AREA_SPIRIT_HEALER_QUEUE = 739,
SMSG_AREA_SPIRIT_HEALER_TIME = 740, // uint64 guid+uint32 time
CMSG_GM_UNTEACH = 741,
SMSG_WARDEN_DATA = 742,
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,
CMSG_PET_STOP_ATTACK = 746,
SMSG_BINDER_CONFIRM = 747,
@ -809,27 +791,27 @@ enum OpCodes
SMSG_MINIGAME_STATE = 759,
CMSG_MINIGAME_MOVE = 760,
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,
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_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_SWIM_SPEED = 768, // GUID + float speed, swim and swim back speed
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_RUN_BACK_SPEED = 767, // GUID + float speed, run back speed
SMSG_SET_SWIM_SPEED = 768, // GUID + float speed, swim and swim back speed
// 769
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_UNKNOWN_772 = 772, // packed GUID
SMSG_UNKNOWN_773 = 773, // set movement flag 0x20000000
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_776 = 776, // stop effect of 775 opcode
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_UNKNOWN_779 = 779, // packed guid, change animation to swim/fly like
SMSG_UNKNOWN_780 = 780, // packed guid
SMSG_MOVE_STOP_WALK = 781, // packed guid, remove 0x100 movement flag (walk)
SMSG_MOVE_START_WALK = 782, // set 0x100 movement flag (walk)
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_UNKNOWN_772 = 772, // packed GUID
SMSG_UNKNOWN_773 = 773, // set movement flag 0x20000000 (safe fall)
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_776 = 776, // stop effect of 775 opcode
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_UNKNOWN_779 = 779, // packed guid, change animation to swim/fly like
SMSG_UNKNOWN_780 = 780, // packed guid
SMSG_MOVE_STOP_WALK = 781, // packed guid, remove 0x100 movement flag (walk)
SMSG_MOVE_START_WALK = 782, // set 0x100 movement flag (walk)
// 783
// 784
// 785
@ -840,32 +822,32 @@ enum OpCodes
// 790
CMSG_FIELD_WATCHED_FACTION_INACTIVE = 791,
CMSG_FIELD_WATCHED_FACTION_SHOW_BAR = 792,
SMSG_UNKNOWN_793 = 793, // packed guid + uint32
SMSG_UNKNOWN_794 = 794, // packed guid, movement related, set 0x1000 movement flag, all speed to 0, except turn rate
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
// 795
SMSG_UNKNOWN_796 = 796, // uint64, guid?
CMSG_RESET_INSTANCES = 797, // reset instances, empty
SMSG_RESET_INSTANCES_RESULT = 798, // uint32 mapid, chat message: %s has been reset.
// 799
SMSG_UNKNOWN_800 = 800, // uint32 mapid, instance related
MSG_RAID_ICON_TARGET = 801, // uint8+uint8+uint64 guid
MSG_RAID_READY_CHECK = 802, // uint64+uint8
SMSG_UNKNOWN_796 = 796, // uint64, guid, chat related?
CMSG_RESET_INSTANCES = 797, // reset instances, empty
SMSG_RESET_INSTANCES_SUCCESS = 798, // uint32 mapid, chat message: %s has been reset.
SMSG_RESET_INSTANCES_FAILED = 799, // uint32 reason, uint32 mapid
SMSG_UNKNOWN_800 = 800, // uint32 mapid, instance related (save?)
MSG_RAID_ICON_TARGET = 801, // uint8+uint8+uint64 guid or only uint8(0x01)
MSG_RAID_READY_CHECK = 802, // uint64+uint8
// 803
SMSG_AI_UNKNOWN = 804, // GUID + uint32, looks like SMSG_AI_REACTION
SMSG_UNKNOWN_805 = 805, // uint32 unk + x, y, z
SMSG_PET_ACTION_SOUND = 804, // GUID + uint32, looks like SMSG_AI_REACTION (pet action sound?)
SMSG_PET_DISMISS_SOUND = 805, // uint32 unk + x, y, z (pet dismiss sound?)
// 806
// 807
SMSG_GM_SURVEY_REQUEST = 808, // uint32, 1 - causes client get ticket request, 2 - hide, 3 - show
MSG_SET_DUNGEON_DIFFICULTY = 809, // uint32+uint32+uint32
CMSG_GM_SURVEY_RESULTS = 810,
SMSG_UNKNOWN_811 = 811, // uint32, 0x0, SMSG_INSTANCE_RESET_ACTIVATE ?
SMSG_GM_SURVEY_REQUEST = 808, // uint32, 1 - causes client get ticket request, 2 - hide, 3 - show
MSG_SET_DUNGEON_DIFFICULTY = 809, // uint32+uint32+uint32
CMSG_GM_SURVEY_RESULTS = 810, // script function named GMSurveySubmit()
SMSG_UNKNOWN_811 = 811, // uint32, 0x0, SMSG_INSTANCE_RESET_ACTIVATE ?
// 812
// 813
// 814
SMSG_UNKNOWN_815 = 815, // spell related, uint64 guid + spellid
SMSG_UNKNOWN_816 = 816, // spell related, uint64 guid + spellid + uint32 unk + uint64 guid (target?)
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 count + for(count) uint64 guid (target?)
// 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
// 820
// 821
@ -873,39 +855,39 @@ enum OpCodes
// 823
// 824
// 825
SMSG_OUTDOORPVP_NOTIFY = 826, // looks like chat packets
SMSG_OUTDOORPVP_NOTIFY2 = 827, // may be it's changed to 826?
SMSG_OUTDOORPVP_NOTIFY = 826, // looks like chat packets
// 827
// 828
SMSG_MOTD = 829, // server MOTD message, uint32 + message
SMSG_MOTD = 829, // server MOTD message, uint32 + message
// 830
// 831
// 832
SMSG_UNKNOWN_833 = 833, // teleport
SMSG_UNKNOWN_834 = 834, // teleport
SMSG_FLY_MODE_START = 835, // packed guid + uint32, start 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_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
// 840
SMSG_ARENA_TEAM_COMMAND_RESULT = 841, // uint32(5)+uint16(0)+uint32(9) You not in arena team that size
SMSG_UNKNOWN_833 = 833, // teleport/movement opcode
SMSG_UNKNOWN_834 = 834, // teleport/movement opcode
SMSG_FLY_MODE_START = 835, // packed guid + uint32, start fly
SMSG_FLY_MODE_STOP = 836, // packed guid + uint32, stop fly
CMSG_MOVE_FLY_MODE_CHANGE_ACK = 837, // movement related, fly on/off ack
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
// 840, CMSG?
SMSG_ARENA_TEAM_COMMAND_RESULT = 841, // uint32 command, name1, name2, uint32 errorcode
// 842
CMSG_ARENA_TEAM_QUERY = 843,
SMSG_ARENA_TEAM_QUERY_RESPONSE = 844,
CMSG_ARENA_TEAM_ROSTER = 845,
SMSG_ARENA_TEAM_ROSTER = 846,
CMSG_ARENA_TEAM_ADD_MEMBER = 847,
CMSG_ARENA_TEAM_INVITE_BYNAME = 847,
SMSG_ARENA_TEAM_INVITE = 848,
CMSG_ARENA_TEAM_INVITE_ACCEPT = 849,
CMSG_ARENA_TEAM_INVITE_DECLINE = 850,
CMSG_ARENA_TEAM_ACCEPT = 849,
CMSG_ARENA_TEAM_DECLINE = 850,
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_PROMOTE_TO_CAPTAIN = 854, // also must be demote opcode...
SMSG_UNKNOWN_855 = 855, // guild related...
// 856
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
CMSG_ARENA_TEAM_SET_LEADER_BYNAME = 854, // also must be demote opcode...
SMSG_ARENA_TEAM_EVENT = 855, // arena team event
CMSG_ARENAMASTER_JOIN = 856,
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
SMSG_ARENA_TEAM_STATS = 859,
CMSG_LFG_SET_AUTOJOIN = 860,
CMSG_LFG_UNSET_AUTOJOIN = 861,
@ -913,116 +895,167 @@ enum OpCodes
CMSG_LFM_UNSET_AUTOADD = 863,
CMSG_LFG_INVITE_ACCEPT = 864,
CMSG_LFG_INVITE_CANCEL = 865,
// 866
// 866, CMSG?
CMSG_LOOKING_FOR_GROUP_CLEAR = 867,
CMSG_SET_LOOKING_FOR_NONE = 868,
CMSG_SET_LOOKING_FOR_MORE = 869,
CMSG_SET_COMMENTARY = 870,
SMSG_LFG_871 = 871, // Matchmaking timed out.
SMSG_LFG_872 = 872, // Matchmaking timed out waiting for other player.
SMSG_LFG_873 = 873, // Group no longer available.
SMSG_LFG_874 = 974, // Matched Player(s) have gone offline.
SMSG_LFG_MATCHMAKING_TIMEDOUT = 871, // Matchmaking timed out.
SMSG_LFG_MATCHMAKING_OTHER_TIMEDOUT = 872, // Matchmaking timed out waiting for other player.
SMSG_LFG_MATCHMAKING_AUTOJOIN_FAILED = 873, // Group no longer available.
SMSG_LFG_MATCHMAKING_AUTOJOIN_FAILED_NO_PLAYER = 874, // Matched Player(s) have gone offline.
// 875
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_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_INVITE = 880, // show invite dialog: 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_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_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_MATCHMAKING_PENDING_INVITE = 880, // The LFG system has matched you to a group for %s.
SMSG_LFG_MATCHMAKING_PENDING_MATCH = 881, // The LFG system is waiting to complete match for %s.
// 882
SMSG_CHANGE_TITLE = 883, // uint32 title_id, causes message and visual effect
CMSG_CHOOSE_TITLE = 884, // uint32 title_id
CMSG_DISMOUNT = 885, // /dismount command
SMSG_ARENA_TEAM_UNK = 886,
SMSG_CHANGE_TITLE = 883, // uint32 title_id, causes message and visual effect
CMSG_CHOOSE_TITLE = 884, // uint32 title_id
CMSG_DISMOUNT = 885, // /dismount command
SMSG_ARENA_NO_TEAM = 886, // uint32(0) + team type
MSG_INSPECT_ARENA_STATS = 887,
SMSG_SH_POSITION = 888, // spirit healer position, map/x/y/z, at player death...
CMSG_CANCEL_TEMP_ITEM_ENCHANTMENT = 889, // cancel temporary item enchantment
SMSG_SH_POSITION = 888, // spirit healer position, map/x/y/z, at player death...
CMSG_CANCEL_TEMP_ITEM_ENCHANTMENT = 889, // cancel temporary item enchantment
// 890
// 891
// 892
// 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
SMSG_MOVE_SET_FLY_BACK_SPEED = 896,
SMSG_FORCE_FLY_SPEED_CHANGE = 897, // packed guid, uint32, speed
MSG_MOVE_SET_FLY_BACK_SPEED = 896,
SMSG_FORCE_FLY_SPEED_CHANGE = 897, // packed guid, uint32, speed
CMSG_FORCE_FLY_SPEED_CHANGE_ACK = 898,
SMSG_FORCE_FLY_BACK_SPEED_CHANGE = 899,
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_BACK_SPEED2 = 902, // same as 896, strange,
SMSG_MOVE_SET_FLY_SPEED2 = 901, // same as 894, strange, packed guid+speed
SMSG_MOVE_SET_FLY_BACK_SPEED2 = 902, // same as 896, strange,
// 903
// 904 SMSG_FLIGHT_SPLINE_SYNC?
// 905
SMSG_FLIGHT_SPLINE_SYNC = 904, // uint32 + packed_guid
CMSG_SET_TAXI_BENCHMARK_MODE = 905,
// 906
SMSG_REALM_STATE_RESPONSE = 907, // response to 908 opcode, 4 x uint32 + uint8
CMSG_REALM_STATE_REQUEST = 908, // realm related, uint32+uint32+3*(uint16+uint8), appears at select character screen, uint32 0xFFFFFFFF
CMSG_MOVE_SHIP_909 = 909, // movement related, transport related(ships)
CMSG_GROUP_PROMOTE = 910, // make main-tank / main-assistant
// 911
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
SMSG_REALM_SPLIT_INFO_RESPONSE = 907, // response to 908 opcode, uint32+uint32+string(date)
CMSG_REALM_SPLIT_INFO_REQUEST = 908, // realm related, uint32, appears at select character screen, uint32 0xFFFFFFFF by default
MSG_MOVE_SHIP_909 = 909, // movement related, transport related(ships)
CMSG_GROUP_PROMOTE = 910, // make main-tank / main-assistant
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
CMSG_ALLOW_MOVE_ACK = 913, // client response to SMSG_ALLOW_MOVE (counter + client time)
// 914
// 915
// 916
// 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_UNKNOWN_919 = 919, // uint8(0)+uint32(0/1)+uint64(unk/guid)
SMSG_UNKNOWN_920 = 920, // notify message: This system is currently disabled.
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_SYSTEM_DISABLED = 920, // notify message: This system is currently disabled.
// 921
// 922
// 923
// 924
SMSG_SET_COMBO_POINTS = 925, // set combo points
// 926
// 927
SMSG_SET_COMBO_POINTS = 925, // set combo points
SMSG_VOICE_SESSION = 926,
SMSG_UNKNOWN_927 = 927, // uint64 guid + uint32 + float?, received after leave voice channel
// 928
// 929
// 930
SMSG_SET_AURA_MULTIPLY = 931,
/*
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?)
*/
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
// 933
SMSG_CAST_SUCCESS = 934,
SMSG_UNKNOWN_935 = 935, // teleport/movement opcode
MSG_UNKNOWN_935 = 935, // teleport/movement opcode
// 936
// 937
// 938
SMSG_UNKNOWN_938 = 938, // uint64, uint64, uint32 spellid, uint32, uint32
// 939
// 940
SMSG_UNKNOWN_941 = 941, // teleport/movement opcode
SMSG_UNKNOWN_942 = 942, // Everyone is Ready! (message)
// 943
// 944
SMSG_UNKNOWN_940 = 940, // packed guid (received at spell cast)
SMSG_UNKNOWN_941 = 941, // teleport/movement opcode
SMSG_READY_CHECK_ALL_READY = 942, // Everyone is Ready! (message)
CMSG_VOICE_SETTINGS = 943, // uint8 isVoiceEnabled, uint8 isMicrophoneEnabled (id correct for 2.3.0)
SMSG_VOICE_CHAT_PARENTAL_DISABLE_ALL = 944, // Voice chat has been disabled by parental control
// 945
// 946
// 947
// 948
CMSG_COMMENTATOR_SET_MODE = 948,
// 949
// 950
CMSG_COMMENTATOR_UPDATE_MAP_INFO = 950,
// 951
CMSG_UNKNOWN_952 = 952, // response to 942 opcode
CMSG_REPORT_SPAM = 953, // Report Spam chat button
SMSG_REPORT_SPAM_RESPONSE = 954, // Complaint Registered. (message)
SMSG_ACTIVATE_SPAM_REPORTING = 955, // unk uint8
CMSG_COMMENTATOR_UPDATE_PLAYER_INFO = 952,
CMSG_UNKNOWN_953 = 953, // response to 942 opcode
//CMSG_REPORT_SPAM = 954, // now(2.3.0) CMSG_COMPLAINT_CHAT
//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
#define MAX_OPCODE_ID 955
#define MAX_OPCODE_ID 1023
/// Results of friend related commands
enum FriendsResult
@ -1043,28 +1076,46 @@ enum FriendsResult
FRIEND_IGNORE_NOT_FOUND = 0x0D,
FRIEND_IGNORE_ALREADY = 0x0E,
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
enum NPCFlags
{
UNIT_NPC_FLAG_NONE = 0,
UNIT_NPC_FLAG_GOSSIP = 1,
UNIT_NPC_FLAG_QUESTGIVER = 2,
UNIT_NPC_FLAG_VENDOR = 4,
UNIT_NPC_FLAG_TAXIVENDOR = 8,
UNIT_NPC_FLAG_TRAINER = 16,
UNIT_NPC_FLAG_SPIRITHEALER = 32,
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_INNKEEPER = 128,
UNIT_NPC_FLAG_BANKER = 256,
UNIT_NPC_FLAG_PETITIONER = 512, // 1024+512 = guild petitions, 512 = arena team petitions
UNIT_NPC_FLAG_TABARDVENDOR = 1024,
UNIT_NPC_FLAG_BATTLEFIELDPERSON = 2048,
UNIT_NPC_FLAG_AUCTIONEER = 4096,
UNIT_NPC_FLAG_STABLE = 8192,
UNIT_NPC_FLAG_ARMORER = 16384,
UNIT_NPC_FLAG_NONE = 0x00000000,
UNIT_NPC_FLAG_GOSSIP = 0x00000001, // 100%
UNIT_NPC_FLAG_QUESTGIVER = 0x00000002, // guessed, probably ok
UNIT_NPC_FLAG_UNK1 = 0x00000004,
UNIT_NPC_FLAG_UNK2 = 0x00000008,
UNIT_NPC_FLAG_TRAINER = 0x00000010, // 100%
UNIT_NPC_FLAG_TRAINER_CLASS = 0x00000020, // 100%
UNIT_NPC_FLAG_TRAINER_PROFESSION = 0x00000040, // 100%
UNIT_NPC_FLAG_VENDOR = 0x00000080, // 100%
UNIT_NPC_FLAG_VENDOR_AMMO = 0x00000100, // 100%, general goods vendor
UNIT_NPC_FLAG_VENDOR_FOOD = 0x00000200, // 100%
UNIT_NPC_FLAG_VENDOR_POISON = 0x00000400, // guessed
UNIT_NPC_FLAG_VENDOR_REAGENT = 0x00000800, // 100%
UNIT_NPC_FLAG_REPAIR = 0x00001000, // 100%
UNIT_NPC_FLAG_FLIGHTMASTER = 0x00002000, // 100%
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
/// @}

File diff suppressed because it is too large Load Diff

View File

@ -208,7 +208,7 @@ void WorldSession::_HandleUpdateObjectOpcode(WorldPacket& recvPacket)
void WorldSession::_MovementUpdate(uint8 objtypeid, uint64 uguid, WorldPacket& recvPacket)
{
uint8 flags;
uint8 flags,unk8;
uint32 unk32,flags2,time,transtime,higuid;
float unkfx,unkfy,unkfz,x,y,z,o,tx,ty,tz,to;
uint64 transguid;
@ -223,7 +223,7 @@ void WorldSession::_MovementUpdate(uint8 objtypeid, uint64 uguid, WorldPacket& r
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);

View File

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

View File

@ -56,6 +56,12 @@ WorldSession::~WorldSession()
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)
{
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)
while( (!MustDie()) && (!_socket->IsOk()) && (!GetInstance()->Stopped()) )
{
logdev("WorldSession::Start(): Socket not ok, waiting...");
_sh.Select(3,0);
GetInstance()->Sleep(100);
}
logdev("WorldSession::Start() done, mustdie:%u, socket_ok:%u stopped:%u",MustDie(),_socket->IsOk(),GetInstance()->Stopped());
}
void WorldSession::_LoadCache(void)
@ -169,7 +177,7 @@ void WorldSession::HandleWorldPacket(WorldPacket *packet)
(this->*table[hpos].handler)(*packet);
// 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::";
scname += stringToLower(GetOpcodeName(packet->GetOpcode()));
if(sc->ScriptExists(scname))
@ -186,6 +194,8 @@ void WorldSession::HandleWorldPacket(WorldPacket *packet)
{
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("Packet Hexdump:");
logerror("%s",toHexDump((uint8*)packet->contents(),packet->size(),true).c_str());
}
delete packet;
@ -229,6 +239,7 @@ OpcodeHandler *WorldSession::_GetOpcodeHandlerTable() const
{SMSG_COMPRESSED_UPDATE_OBJECT, &WorldSession::_HandleCompressedUpdateObjectOpcode},
{SMSG_UPDATE_OBJECT, &WorldSession::_HandleUpdateObjectOpcode},
{SMSG_CAST_RESULT, &WorldSession::_HandleCastResultOpcode},
{SMSG_CAST_SUCCESS, &WorldSession::_HandleCastSuccessOpcode},
{SMSG_ITEM_QUERY_SINGLE_RESPONSE, &WorldSession::_HandleItemQuerySingleResponseOpcode},
{SMSG_DESTROY_OBJECT, &WorldSession::_HandleDestroyObjectOpcode},
{SMSG_INITIAL_SPELLS, &WorldSession::_HandleInitialSpellsOpcode},
@ -756,15 +767,15 @@ void WorldSession::_HandleMovementOpcode(WorldPacket& recvPacket)
void WorldSession::_HandleTelePortAckOpcode(WorldPacket& recvPacket)
{
uint32 unk32,time;
uint64 guid;
float x, y, z, o;
uint32 unk32,time;
uint64 guid;
uint8 unk8;
float x, y, z, o;
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.
WorldPacket response;
@ -816,18 +827,23 @@ void WorldSession::_HandleChannelNotifyOpcode(WorldPacket& recvPacket)
void WorldSession::_HandleCastResultOpcode(WorldPacket& recvPacket)
{
uint32 spellid;
uint8 flag,result;
recvPacket >> spellid >> flag;
if(flag)
{
recvPacket >> result;
logdetail("Cast of spell %u failed. flag=%u, result=%u",spellid,flag,result);
}
else
{
logdetail("Cast of spell %u successful.",spellid);
}
uint32 spellid,otherr = 0;
uint8 result;
recvPacket >> spellid >> result;
if (recvPacket.rpos()+1 < recvPacket.size())
recvPacket >> otherr;
logdetail("Cast of spell %u failed. result=%u, additional info=%u",spellid,result,otherr);
}
void WorldSession::_HandleCastSuccessOpcode(WorldPacket& recvPacket)
{
uint32 spellId;
uint64 casterGuid;
casterGuid = recvPacket.GetPackedGuid();
recvPacket >> spellId;
logdetail("Cast of spell %u successful.",spellId);
}
void WorldSession::_HandleInitialSpellsOpcode(WorldPacket& recvPacket)
@ -881,7 +897,8 @@ void WorldSession::_HandleEmoteOpcode(WorldPacket& recvPacket)
if(plrname.empty())
{
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

View File

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

View File

@ -2,6 +2,7 @@
#include "WorldPacket.h"
#include "WorldSession.h"
#include "WorldSocket.h"
#include "Opcodes.h"
WorldSocket::WorldSocket(SocketHandler &h, WorldSession *s) : TcpSocket(h)
{
@ -81,7 +82,7 @@ void WorldSocket::OnRead()
_crypt.DecryptRecv((uint8*)&hdr,sizeof(ServerPktHeader));
_remaining = ntohs(hdr.size)-2;
_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!
GetSession()->GetInstance()->SetError(); // no way to recover the crypt, must exit