* upgrade to 2.1.3 support. thx to bLuma for patch!!

* corrected and extended SharedDefines.h
* added handlers for SMSG_MOTD and SMSG_NOTIFICATION
* added values created by stuffextract to map.scp/race.scp before it supports 2.1.3 also.
This commit is contained in:
False.Genesis 2007-08-21 16:59:34 +00:00
parent 12b508fc9f
commit 49338c6e6a
15 changed files with 2800 additions and 2019 deletions

View File

@ -58,8 +58,8 @@ charname=Pseuwow
// Client emulation configuration
ClientVersion=2.0.12
ClientBuild=6546
ClientVersion=2.1.3
ClientBuild=6898
ClientLanguage=enUS
// or change to enGB, deDE, ...
@ -113,3 +113,4 @@ rmcontrolhost=localhost
// PseuWoW will need more memory with maps enabled!
useMaps=0

View File

@ -1,130 +1,280 @@
[0]
name=Azeroth
name_general=Azeroth
name=Eastern Kingdoms
[1]
name_general=Kalimdor
name=Kalimdor
[2]
name=UnderMine
[13]
name=Test zone
name_general=test
name=Testing
[17]
name=Kalidar
[25]
name_general=ScottTest
name=Scott Test
[29]
name_general=Test
name=CashTest
[30]
name_general=PVPZone01
name=Alterac Valley
[33]
name=Shadowfang Keep Instance
name_general=Shadowfang
name=Shadowfang Keep
[34]
name=The Stockade Instance
name_general=StormwindJail
name=Stormwind Stockade
[35]
name=Stormwind Prizon
name_general=StormwindPrison
name=<unused>StormwindPrison
[36]
name=Deadmines Instance
name_general=DeadminesInstance
name=Deadmines
[37]
name=Plains of Snow
name_general=PVPZone02
name=Azshara Crater
[42]
name_general=Collin
name=Collin's Test
[43]
name=Wailing Caverns Instance
name_general=WailingCaverns
name=Wailing Caverns
[44]
name=Monastery Interior
name_general=Monastery
name=<unused> Monastery
[47]
name=Razorfen Kraul Instance
name_general=RazorfenKraulInstance
name=Razorfen Kraul
[48]
name=Blackfathom Deeps Instance
name_general=Blackfathom
name=Blackfathom Deeps
[70]
name=Uldaman Instance
name_general=Uldaman
name=Uldaman
[90]
name=Gnomeregan Instance
name_general=GnomeragonInstance
name=Gnomeregan
[109]
name=Sunken Temple Instance
name_general=SunkenTemple
name=Sunken Temple
[129]
name=Razorfen Downs Instance
[150]
name=Outland
name_general=RazorfenDowns
name=Razorfen Downs
[169]
name=Emerald Forest
name_general=EmeraldDream
name=Emerald Dream
[189]
name=Scarlet Monastery Instance
name_general=MonasteryInstances
name=Scarlet Monastery
[209]
name=Zul\'Farrak Instance
name_general=TanarisInstance
name=Zul'Farrak
[229]
name=Blackrock Spire Instance
name_general=BlackRockSpire
name=Blackrock Spire
[230]
name=Blackrock Depths Instance
name_general=BlackrockDepths
name=Blackrock Depths
[249]
name=Onyxia\'s Lair Instance
name_general=OnyxiaLairInstance
name=Onyxia's Lair
[269]
name=Caverns of Time
name_general=CavernsOfTime
name=Opening of the Dark Portal
[289]
name=Scholomance Instance
name_general=SchoolofNecromancy
name=Scholomance
[309]
name=Zul'Gurub Instance
name_general=Zul'gurub
name=Zul'Gurub
[329]
name=Stratholme Instance
name_general=Stratholme
name=Stratholme
[349]
name=Mauradon Instance
name_general=Mauradon
name=Maraudon
[369]
name_general=DeeprunTram
name=Deeprun Tram
[389]
name=Ragefire Chasm Instance
name_general=OrgrimmarInstance
name=Ragefire Chasm
[409]
name=The Molten Core Instance
name_general=MoltenCore
name=Molten Core
[429]
name=Dire Maul Instance
name_general=DireMaul
name=Dire Maul
[449]
name_general=AlliancePVPBarracks
name=Alliance PVP Barracks
[450]
name_general=HordePVPBarracks
name=Horde PVP Barracks
[451]
name_general=development
name=Development Land
[469]
name=Blackwing Lair Instance
name_general=BlackwingLair
name=Blackwing Lair
[489]
name_general=PVPZone03
name=Warsong Gulch
[509]
name=Ruins of Ahn'Qiraj Instance
name_general=AhnQiraj
name=Ruins of Ahn'Qiraj
[529]
name_general=PVPZone04
name=Arathi Basin
[530]
name_general=Expansion01
name=Outland
[531]
name=Temple of Ahn'Qiraj Instance
name_general=AhnQirajTemple
name=Ahn'Qiraj Temple
[532]
name_general=Karazahn
name=Karazhan
[533]
name=Naxxramas Instance
name_general=Stratholme Raid
name=Naxxramas
[534]
name_general=HyjalPast
name=The Battle for Mount Hyjal
[540]
name_general=HellfireMilitary
name=Hellfire Citadel: The Shattered Halls
[542]
name_general=HellfireDemon
name=Hellfire Citadel: The Blood Furnace
[543]
name_general=HellfireRampart
name=Hellfire Citadel: Ramparts
[544]
name_general=HellfireRaid
name=Magtheridon's Lair
[545]
name_general=CoilfangPumping
name=Coilfang: The Steamvault
[546]
name_general=CoilfangMarsh
name=Coilfang: The Underbog
[547]
name_general=CoilfangDraenei
name=Coilfang: The Slave Pens
[548]
name_general=CoilfangRaid
name=Coilfang: Serpentshrine Cavern
[550]
name_general=TempestKeepRaid
name=Tempest Keep
[552]
name_general=TempestKeepArcane
name=Tempest Keep: The Arcatraz
[553]
name_general=TempestKeepAtrium
name=Tempest Keep: The Botanica
[554]
name_general=TempestKeepFactory
name=Tempest Keep: The Mechanar
[555]
name_general=AuchindounShadow
name=Auchindoun: Shadow Labyrinth
[556]
name_general=AuchindounDemon
name=Auchindoun: Sethekk Halls
[557]
name_general=AuchindounEthereal
name=Auchindoun: Mana-Tombs
[558]
name_general=AuchindounDraenei
name=Auchindoun: Auchenai Crypts
[559]
name_general=PVPZone05
name=Nagrand Arena
[560]
name_general=HillsbradPast
name=The Escape From Durnholde
[562]
name_general=bladesedgearena
name=Blade's Edge Arena
[564]
name_general=BlackTemple
name=Black Temple
[565]
name_general=GruulsLair
name=Gruul's Lair
[566]
name_general=NetherstormBG
name=Eye of the Storm
[568]
name_general=ZulAman
name=Zul'Aman

View File

@ -1,35 +1,120 @@
// note that the faction is equal to the default language id:
// 1: Horde, Orcish
// 7: Alliance, Common
[1]
model_m=49
model_f=50
name_short=Hu
faction=7
name_general=Human
name=Human
[2]
model_m=51
model_f=52
name_short=Or
faction=1
name_general=Orc
name=Orc
[3]
model_m=53
model_f=54
name_short=Dw
faction=7
name_general=Dwarf
name=Dwarf
[4]
model_m=55
model_f=56
name_short=Ni
faction=7
name_general=NightElf
name=Night Elf
[5]
model_m=57
model_f=58
name_short=Sc
faction=1
name_general=Scourge
name=Undead
[6]
model_m=59
model_f=60
name_short=Ta
faction=1
name_general=Tauren
name=Tauren
[7]
model_m=1563
model_f=1564
name_short=Gn
faction=7
name_general=Gnome
name=Gnome
[8]
model_m=1478
model_f=1479
name_short=Tr
faction=1
name_general=Troll
name=Troll
[9]
model_m=6894
model_f=6895
name_short=Gb
faction=7
name_general=Goblin
name=Goblin
[10]
model_m=15476
model_f=15475
name_short=Be
faction=1
name_general=BloodElf
name=Blood Elf
[11]
model_m=16125
model_f=16126
name_short=Dr
faction=7
name_general=Draenei
name=Draenei
[12]
model_m=16981
model_f=16980
name_short=Fo
faction=7
name_general=FelOrc
name=Fel Orc
[13]
model_m=17402
model_f=17403
name_short=Na
faction=7
name_general=Naga_
name=Naga
[14]
model_m=17576
model_f=17577
name_short=Br
faction=7
name_general=Broken
name=Broken
[15]
model_m=17578
model_f=17579
name_short=Sk
faction=7
name_general=Skeleton
name=Skeleton

View File

@ -745,9 +745,9 @@ DefReturnResult DefScriptPackage::SCGetFileList(CmdSet& Set)
for(DefList::iterator i = l->begin(); i != l->end(); )
{
std::string tmp = stringToLower(i->c_str() + (i->length() - ext.length()));
if( stringToLower(i->c_str() + (i->length() - ext.length())) != ext )
if( tmp != ext )
{
l->erase(i);
i = l->erase(i);
continue;
}
i++;
@ -828,3 +828,4 @@ void DefScriptPackage::My_Run(std::string line, std::string username)
}

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 = 0x00000000;
uint32 ITEMPROTOTYPES_CACHE_VERSION = 0x00000001;
bool PlayerNameCache::AddInfo(uint64 guid, std::string name){
PlayerNameCacheItem *cacheItem=new PlayerNameCacheItem;
@ -246,6 +246,8 @@ void ItemProtoCache_InsertDataToSession(WorldSession *session)
buf >> proto->GemProperties;
buf >> proto->ExtendedCost;
buf >> proto->RequiredDisenchantSkill;
buf >> proto->ArmorDamageModifier;
if(proto->Id)
{
//DEBUG(logdebug("ItemProtoCache: Loaded %u [%s]",proto->Id, proto->Name[0].c_str()));
@ -360,6 +362,7 @@ void ItemProtoCache_WriteDataToCache(WorldSession *session)
buf << proto->GemProperties;
buf << proto->ExtendedCost;
buf << proto->RequiredDisenchantSkill;
buf << proto->ArmorDamageModifier;
//DEBUG(logdebug("ItemProtoCache: Saved %u [%s]",proto->Id, proto->Name[0].c_str()));
uint32 size = buf.size();

View File

@ -110,7 +110,7 @@ void Channel::HandleNotifyOpcode(WorldPacket &packet)
switch (code)
{
// Player joined channel you are on
case 0x00:
case JOINED:
packet >> guid;
if(guid){
name = _worldSession->plrNameCache.GetName(guid);
@ -227,3 +227,4 @@ void Channel::HandleListRequest(WorldPacket& recvPacket)

View File

@ -95,6 +95,7 @@ void WorldSession::_HandleItemQuerySingleResponseOpcode(WorldPacket& recvPacket)
recvPacket >> proto->GemProperties;
recvPacket >> proto->ExtendedCost;
recvPacket >> proto->RequiredDisenchantSkill;
recvPacket >> proto->ArmorDamageModifier;
logdetail("Got Item Info: Id=%u Name='%s' ReqLevel=%u Armor=%u Desc='%s'",
proto->Id, proto->Name[0].c_str(), proto->RequiredLevel, proto->Armor, proto->Description.c_str());

View File

@ -400,6 +400,7 @@ struct ItemProto
uint32 GemProperties;
uint32 ExtendedCost;
uint32 RequiredDisenchantSkill;
float ArmorDamageModifier;
};
class Item : public Object

View File

@ -3,6 +3,7 @@
#include "UpdateFields.h"
#include "ObjectDefines.h"
#include "common.h"
enum TYPE
{

View File

@ -951,8 +951,43 @@ const char* worldOpcodeNames[] =
"SMSG_UNKNOWN_918", // 918
"SMSG_UNKNOWN_919", // 919
"SMSG_UNKNOWN_920", // 920
//there would be declared new opcode, id 921
//do not forget to change MAX_OPCODE_ID, if you add a line here!
"UNKNOWN921", // 921
"UNKNOWN922", // 922
"UNKNOWN923", // 923
"UNKNOWN924", // 924
"SMSG_SET_COMBO_POINTS", // 925
"UNKNOWN926", // 926
"UNKNOWN927", // 927
"UNKNOWN928", // 928
"UNKNOWN929", // 929
"UNKNOWN930", // 930
"SMSG_SET_AURA_MULTIPLY", // 931
"SMSG_SET_AURA_SINGLE", // 932
"UNKNOWN933", // 933
"SMSG_CAST_SUCCESS", // 934
"SMSG_UNKNOWN_935", // 935
"UNKNOWN936", // 936
"UNKNOWN937", // 937
"UNKNOWN938", // 938
"UNKNOWN939", // 939
"UNKNOWN940", // 940
"SMSG_UNKNOWN_941", // 941
"SMSG_UNKNOWN_942", // 942
"UNKNOWN943", // 943
"UNKNOWN944", // 944
"UNKNOWN945", // 945
"UNKNOWN946", // 946
"UNKNOWN947", // 947
"UNKNOWN948", // 948
"UNKNOWN949", // 949
"UNKNOWN950", // 950
"UNKNOWN951", // 951
"CMSG_UNKNOWN_952", // 952
"UNKNOWN953", // 953
"SMSG_UNKNOWN_954", // 954
"SMSG_UNKNOWN_955", // 955
//there would be declared new opcode, id 956
//do not forget to change MAX_OPCODE_ID, if you add a line here!
};
const char *GetOpcodeName(unsigned int id)

View File

@ -967,10 +967,61 @@ enum OpCodes
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.
// 921
// 922
// 923
// 924
SMSG_SET_COMBO_POINTS = 925, // set combo points
// 926
// 927
// 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?)
*/
// 933
SMSG_CAST_SUCCESS = 934,
SMSG_UNKNOWN_935 = 935, // teleport/movement opcode
// 936
// 937
// 938
// 939
// 940
SMSG_UNKNOWN_941 = 941, // teleport/movement opcode
SMSG_UNKNOWN_942 = 942, // Everyone is Ready! (message)
// 943
// 944
// 945
// 946
// 947
// 948
// 949
// 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
};
//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 920
#define MAX_OPCODE_ID 955
/// Results of friend related commands
enum FriendsResult

File diff suppressed because it is too large Load Diff

View File

@ -16,346 +16,434 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "Common.h"
#ifndef _UPDATEFIELDS_AUTO_H
#define _UPDATEFIELDS_AUTO_H
// Auto generated for version 2.1.3, build 6898
enum EObjectFields
{
OBJECT_FIELD_GUID = 0x00, // Size:2
OBJECT_FIELD_TYPE = 0x02, // Size:1
OBJECT_FIELD_ENTRY = 0x03, // Size:1
OBJECT_FIELD_SCALE_X = 0x04, // Size:1
OBJECT_FIELD_PADDING = 0x05, // Size:1
OBJECT_END = 0x06,
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_END = 0x0006,
};
enum EItemFields
{
ITEM_FIELD_OWNER = OBJECT_END + 0x00, // Size:2
ITEM_FIELD_CONTAINED = OBJECT_END + 0x02, // Size:2
ITEM_FIELD_CREATOR = OBJECT_END + 0x04, // Size:2
ITEM_FIELD_GIFTCREATOR = OBJECT_END + 0x06, // Size:2
ITEM_FIELD_STACK_COUNT = OBJECT_END + 0x08, // Size:1
ITEM_FIELD_DURATION = OBJECT_END + 0x09, // Size:1
ITEM_FIELD_SPELL_CHARGES = OBJECT_END + 0x0A, // Size:5
ITEM_FIELD_SPELL_CHARGES_01 = OBJECT_END + 0x0B,
ITEM_FIELD_SPELL_CHARGES_02 = OBJECT_END + 0x0C,
ITEM_FIELD_SPELL_CHARGES_03 = OBJECT_END + 0x0D,
ITEM_FIELD_SPELL_CHARGES_04 = OBJECT_END + 0x0E,
ITEM_FIELD_FLAGS = OBJECT_END + 0x0F, // Size:1
ITEM_FIELD_ENCHANTMENT = OBJECT_END + 0x10, // count=33 This is 21 past
ITEM_FIELD_SOCKETS_ENCHANTMENT = OBJECT_END + 0x25, // + (3 sockets + 1 bonus) * 3 uint32 = 12
ITEM_FIELD_ENCHANTMENT_LAST = OBJECT_END + 0x30,
ITEM_FIELD_PROPERTY_SEED = OBJECT_END + 0x31, // Size:1
ITEM_FIELD_RANDOM_PROPERTIES_ID = OBJECT_END + 0x32, // Size:1
ITEM_FIELD_ITEM_TEXT_ID = OBJECT_END + 0x33, // Size:1
ITEM_FIELD_DURABILITY = OBJECT_END + 0x34, // Size:1
ITEM_FIELD_MAXDURABILITY = OBJECT_END + 0x35, // Size:1
ITEM_END = OBJECT_END + 0x36,
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,
};
enum EContainerFields
{
CONTAINER_FIELD_NUM_SLOTS = ITEM_END + 0x00, // Size:1
CONTAINER_ALIGN_PAD = ITEM_END + 0x01, // Size:1
CONTAINER_FIELD_SLOT_1 = ITEM_END + 0x02, // count=72
CONTAINER_FIELD_SLOT_LAST = ITEM_END + 0x49,
CONTAINER_END = ITEM_END + 0x4A,
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,
};
enum EUnitFields
{
UNIT_FIELD_CHARM = 0x00 + OBJECT_END, // Size:2
UNIT_FIELD_SUMMON = 0x02 + OBJECT_END, // Size:2
UNIT_FIELD_CHARMEDBY = 0x04 + OBJECT_END, // Size:2
UNIT_FIELD_SUMMONEDBY = 0x06 + OBJECT_END, // Size:2
UNIT_FIELD_CREATEDBY = 0x08 + OBJECT_END, // Size:2
UNIT_FIELD_TARGET = 0x0A + OBJECT_END, // Size:2
UNIT_FIELD_PERSUADED = 0x0C + OBJECT_END, // Size:2
UNIT_FIELD_CHANNEL_OBJECT = 0x0E + OBJECT_END, // Size:2
UNIT_FIELD_HEALTH = 0x10 + OBJECT_END, // Size:1
UNIT_FIELD_POWER1 = 0x11 + OBJECT_END, // Size:1
UNIT_FIELD_POWER2 = 0x12 + OBJECT_END, // Size:1
UNIT_FIELD_POWER3 = 0x13 + OBJECT_END, // Size:1
UNIT_FIELD_POWER4 = 0x14 + OBJECT_END, // Size:1
UNIT_FIELD_POWER5 = 0x15 + OBJECT_END, // Size:1
UNIT_FIELD_MAXHEALTH = 0x16 + OBJECT_END, // Size:1
UNIT_FIELD_MAXPOWER1 = 0x17 + OBJECT_END, // Size:1
UNIT_FIELD_MAXPOWER2 = 0x18 + OBJECT_END, // Size:1
UNIT_FIELD_MAXPOWER3 = 0x19 + OBJECT_END, // Size:1
UNIT_FIELD_MAXPOWER4 = 0x1A + OBJECT_END, // Size:1
UNIT_FIELD_MAXPOWER5 = 0x1B + OBJECT_END, // Size:1
UNIT_FIELD_LEVEL = 0x1C + OBJECT_END, // Size:1
UNIT_FIELD_FACTIONTEMPLATE = 0x1D + OBJECT_END, // Size:1
UNIT_FIELD_BYTES_0 = 0x1E + OBJECT_END, // Size:1
UNIT_VIRTUAL_ITEM_SLOT_DISPLAY = 0x1F + OBJECT_END, // Size:3
UNIT_VIRTUAL_ITEM_SLOT_DISPLAY_01 = 0x20 + OBJECT_END,
UNIT_VIRTUAL_ITEM_SLOT_DISPLAY_02 = 0x21 + OBJECT_END,
UNIT_VIRTUAL_ITEM_INFO = 0x22 + OBJECT_END, // Size:6
UNIT_VIRTUAL_ITEM_INFO_01 = 0x23 + OBJECT_END,
UNIT_VIRTUAL_ITEM_INFO_02 = 0x24 + OBJECT_END,
UNIT_VIRTUAL_ITEM_INFO_03 = 0x25 + OBJECT_END,
UNIT_VIRTUAL_ITEM_INFO_04 = 0x26 + OBJECT_END,
UNIT_VIRTUAL_ITEM_INFO_05 = 0x27 + OBJECT_END,
UNIT_FIELD_FLAGS = 0x28 + OBJECT_END, // Size:1
UNIT_FIELD_FLAGS_2 = 0x29 + OBJECT_END, // Size:1
UNIT_FIELD_AURA = 0x2A + OBJECT_END, // Size:56
UNIT_FIELD_AURA_LAST = 0x63 + OBJECT_END,
UNIT_FIELD_AURAFLAGS = 0x62 + OBJECT_END, // Size:7
UNIT_FIELD_AURAFLAGS_01 = 0x63 + OBJECT_END,
UNIT_FIELD_AURAFLAGS_02 = 0x64 + OBJECT_END,
UNIT_FIELD_AURAFLAGS_03 = 0x65 + OBJECT_END,
UNIT_FIELD_AURAFLAGS_04 = 0x66 + OBJECT_END,
UNIT_FIELD_AURAFLAGS_05 = 0x67 + OBJECT_END,
UNIT_FIELD_AURAFLAGS_06 = 0x68 + OBJECT_END,
UNIT_FIELD_AURALEVELS = 0x69 + OBJECT_END, // Size:14
UNIT_FIELD_AURALEVELS_LAST = 0x76 + OBJECT_END,
UNIT_FIELD_AURAAPPLICATIONS = 0x77 + OBJECT_END, // Size:14
UNIT_FIELD_AURAAPPLICATIONS_LAST = 0x84 + OBJECT_END,
UNIT_FIELD_AURASTATE = 0x85 + OBJECT_END, // Size:1
UNIT_FIELD_BASEATTACKTIME = 0x86 + OBJECT_END, // Size:2
UNIT_FIELD_BASEATTACKTIME_01 = 0x87 + OBJECT_END,
UNIT_FIELD_OFFHANDATTACKTIME = 0x87 + OBJECT_END, // Size:2
UNIT_FIELD_RANGEDATTACKTIME = 0x88 + OBJECT_END, // Size:1
UNIT_FIELD_BOUNDINGRADIUS = 0x89 + OBJECT_END, // Size:1
UNIT_FIELD_COMBATREACH = 0x8A + OBJECT_END, // Size:1
UNIT_FIELD_DISPLAYID = 0x8B + OBJECT_END, // Size:1
UNIT_FIELD_NATIVEDISPLAYID = 0x8C + OBJECT_END, // Size:1
UNIT_FIELD_MOUNTDISPLAYID = 0x8D + OBJECT_END, // Size:1
UNIT_FIELD_MINDAMAGE = 0x8E + OBJECT_END, // Size:1
UNIT_FIELD_MAXDAMAGE = 0x8F + OBJECT_END, // Size:1
UNIT_FIELD_MINOFFHANDDAMAGE = 0x90 + OBJECT_END, // Size:1
UNIT_FIELD_MAXOFFHANDDAMAGE = 0x91 + OBJECT_END, // Size:1
UNIT_FIELD_BYTES_1 = 0x92 + OBJECT_END, // Size:1
UNIT_FIELD_PETNUMBER = 0x93 + OBJECT_END, // Size:1
UNIT_FIELD_PET_NAME_TIMESTAMP = 0x94 + OBJECT_END, // Size:1
UNIT_FIELD_PETEXPERIENCE = 0x95 + OBJECT_END, // Size:1
UNIT_FIELD_PETNEXTLEVELEXP = 0x96 + OBJECT_END, // Size:1
UNIT_DYNAMIC_FLAGS = 0x97 + OBJECT_END, // Size:1
UNIT_CHANNEL_SPELL = 0x98 + OBJECT_END, // Size:1
UNIT_MOD_CAST_SPEED = 0x99 + OBJECT_END, // Size:1
UNIT_CREATED_BY_SPELL = 0x9A + OBJECT_END, // Size:1
UNIT_NPC_FLAGS = 0x9B + OBJECT_END, // Size:1
UNIT_NPC_EMOTESTATE = 0x9C + OBJECT_END, // Size:1
UNIT_TRAINING_POINTS = 0x9D + OBJECT_END, // Size:1
UNIT_FIELD_STAT0 = 0x9E + OBJECT_END, // Size:1
UNIT_FIELD_STAT1 = 0x9F + OBJECT_END, // Size:1
UNIT_FIELD_STAT2 = 0xA0 + OBJECT_END, // Size:1
UNIT_FIELD_STAT3 = 0xA1 + OBJECT_END, // Size:1
UNIT_FIELD_STAT4 = 0xA2 + OBJECT_END, // Size:1
UNIT_FIELD_POSSTAT0 = 0xA3 + OBJECT_END, // Size:1
UNIT_FIELD_POSSTAT1 = 0xA4 + OBJECT_END, // Size:1
UNIT_FIELD_POSSTAT2 = 0xA5 + OBJECT_END, // Size:1
UNIT_FIELD_POSSTAT3 = 0xA6 + OBJECT_END, // Size:1
UNIT_FIELD_POSSTAT4 = 0xA7 + OBJECT_END, // Size:1
UNIT_FIELD_NEGSTAT0 = 0xA8 + OBJECT_END, // Size:1
UNIT_FIELD_NEGSTAT1 = 0xA9 + OBJECT_END, // Size:1
UNIT_FIELD_NEGSTAT2 = 0xAA + OBJECT_END, // Size:1
UNIT_FIELD_NEGSTAT3 = 0xAB + OBJECT_END, // Size:1
UNIT_FIELD_NEGSTAT4 = 0xAC + OBJECT_END, // Size:1
UNIT_FIELD_RESISTANCES = 0xAD + OBJECT_END, // Size:7
UNIT_FIELD_RESISTANCES_01 = 0xAE + OBJECT_END,
UNIT_FIELD_RESISTANCES_02 = 0xAF + OBJECT_END,
UNIT_FIELD_RESISTANCES_03 = 0xB0 + OBJECT_END,
UNIT_FIELD_RESISTANCES_04 = 0xB1 + OBJECT_END,
UNIT_FIELD_RESISTANCES_05 = 0xB2 + OBJECT_END,
UNIT_FIELD_RESISTANCES_06 = 0xB3 + OBJECT_END,
UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE = 0xB4 + OBJECT_END, // Size:7
UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE = 0xBB + OBJECT_END, // Size:7
UNIT_FIELD_BASE_MANA = 0xC2 + OBJECT_END, // Size:1
UNIT_FIELD_BASE_HEALTH = 0xC3 + OBJECT_END, // Size:1
UNIT_FIELD_BYTES_2 = 0xC4 + OBJECT_END, // Size:1
UNIT_FIELD_ATTACK_POWER = 0xC5 + OBJECT_END, // Size:1
UNIT_FIELD_ATTACK_POWER_MODS = 0xC6 + OBJECT_END, // Size:1
UNIT_FIELD_ATTACK_POWER_MULTIPLIER = 0xC7 + OBJECT_END, // Size:1
UNIT_FIELD_RANGED_ATTACK_POWER = 0xC8 + OBJECT_END, // Size:1
UNIT_FIELD_RANGED_ATTACK_POWER_MODS = 0xC9 + OBJECT_END, // Size:1
UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER = 0xCA + OBJECT_END, // Size:1
UNIT_FIELD_MINRANGEDDAMAGE = 0xCB + OBJECT_END, // Size:1
UNIT_FIELD_MAXRANGEDDAMAGE = 0xCC + OBJECT_END, // Size:1
UNIT_FIELD_POWER_COST_MODIFIER = 0xCD + OBJECT_END, // Size:7
UNIT_FIELD_POWER_COST_MODIFIER_01 = 0xCE + OBJECT_END,
UNIT_FIELD_POWER_COST_MODIFIER_02 = 0xCF + OBJECT_END,
UNIT_FIELD_POWER_COST_MODIFIER_03 = 0xD0 + OBJECT_END,
UNIT_FIELD_POWER_COST_MODIFIER_04 = 0xD1 + OBJECT_END,
UNIT_FIELD_POWER_COST_MODIFIER_05 = 0xD2 + OBJECT_END,
UNIT_FIELD_POWER_COST_MODIFIER_06 = 0xD3 + OBJECT_END,
UNIT_FIELD_POWER_COST_MULTIPLIER = 0xD4 + OBJECT_END, // Size:7
UNIT_FIELD_POWER_COST_MULTIPLIER_01 = 0xD5 + OBJECT_END,
UNIT_FIELD_POWER_COST_MULTIPLIER_02 = 0xD6 + OBJECT_END,
UNIT_FIELD_POWER_COST_MULTIPLIER_03 = 0xD7 + OBJECT_END,
UNIT_FIELD_POWER_COST_MULTIPLIER_04 = 0xD8 + OBJECT_END,
UNIT_FIELD_POWER_COST_MULTIPLIER_05 = 0xD9 + OBJECT_END,
UNIT_FIELD_POWER_COST_MULTIPLIER_06 = 0xDA + OBJECT_END,
UNIT_FIELD_PADDING = 0xDB + OBJECT_END,
UNIT_END = 0xDC + OBJECT_END,
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,
PLAYER_DUEL_ARBITER = 0x00 + UNIT_END, // Size:2
PLAYER_FLAGS = 0x02 + UNIT_END, // Size:1
PLAYER_GUILDID = 0x03 + UNIT_END, // Size:1
PLAYER_GUILDRANK = 0x04 + UNIT_END, // Size:1
PLAYER_BYTES = 0x05 + UNIT_END, // Size:1
PLAYER_BYTES_2 = 0x06 + UNIT_END, // Size:1
PLAYER_BYTES_3 = 0x07 + UNIT_END, // Size:1
PLAYER_DUEL_TEAM = 0x08 + UNIT_END, // Size:1
PLAYER_GUILD_TIMESTAMP = 0x09 + UNIT_END, // Size:1
PLAYER_QUEST_LOG_1_1 = 0x0A + UNIT_END, // count = 25
PLAYER_QUEST_LOG_1_2 = 0x0B + UNIT_END,
PLAYER_QUEST_LOG_1_3 = 0x0C + UNIT_END,
PLAYER_QUEST_LOG_LAST_1 = 0x52 + UNIT_END,
PLAYER_QUEST_LOG_LAST_2 = 0x53 + UNIT_END,
PLAYER_QUEST_LOG_LAST_3 = 0x54 + UNIT_END,
PLAYER_VISIBLE_ITEM_1_CREATOR = 0x55 + UNIT_END, // Size:2, count = 19
PLAYER_VISIBLE_ITEM_1_0 = 0x57 + UNIT_END, // Size:12
PLAYER_VISIBLE_ITEM_1_PROPERTIES = 0x63 + UNIT_END, // Size:1
PLAYER_VISIBLE_ITEM_1_PAD = 0x64 + UNIT_END, // Size:1
PLAYER_VISIBLE_ITEM_LAST_CREATOR = 0x175 + UNIT_END,
PLAYER_VISIBLE_ITEM_LAST_0 = 0x177 + UNIT_END,
PLAYER_VISIBLE_ITEM_LAST_PROPERTIES = 0x183 + UNIT_END,
PLAYER_VISIBLE_ITEM_LAST_PAD = 0x184 + UNIT_END,
PLAYER_CHOSEN_TITLE = 0x185 + UNIT_END, // Size:1
PLAYER_FIELD_INV_SLOT_HEAD = 0x186 + UNIT_END, // Size:46
PLAYER_FIELD_PACK_SLOT_1 = 0x1B4 + UNIT_END, // Size:32
PLAYER_FIELD_PACK_SLOT_LAST = 0x1D3 + UNIT_END,
PLAYER_FIELD_BANK_SLOT_1 = 0x1D4 + UNIT_END, // Size:56
PLAYER_FIELD_BANK_SLOT_LAST = 0x20B + UNIT_END,
PLAYER_FIELD_BANKBAG_SLOT_1 = 0x20C + UNIT_END, // Size:14
PLAYER_FIELD_BANKBAG_SLOT_LAST = 0x219 + UNIT_END,
PLAYER_FIELD_VENDORBUYBACK_SLOT_1 = 0x21A + UNIT_END, // Size:24
PLAYER_FIELD_VENDORBUYBACK_SLOT_LAST = 0x231 + UNIT_END,
PLAYER_FIELD_KEYRING_SLOT_1 = 0x232 + UNIT_END, // Size:64
PLAYER_FIELD_KEYRING_SLOT_LAST = 0x271 + UNIT_END,
PLAYER_FARSIGHT = 0x272 + UNIT_END, // Size:2
PLAYER_FIELD_COMBO_TARGET = 0x274 + UNIT_END, // Size:2
PLAYER_FIELD_KNOWN_TITLES = 0x276 + UNIT_END, // Size:2
PLAYER_XP = 0x278 + UNIT_END, // Size:1
PLAYER_NEXT_LEVEL_XP = 0x279 + UNIT_END, // Size:1
PLAYER_SKILL_INFO_1_1 = 0x27A + UNIT_END, // Size:384
PLAYER_CHARACTER_POINTS1 = 0x3FA + UNIT_END, // Size:1
PLAYER_CHARACTER_POINTS2 = 0x3FB + UNIT_END, // Size:1
PLAYER_TRACK_CREATURES = 0x3FC + UNIT_END, // Size:1
PLAYER_TRACK_RESOURCES = 0x3FD + UNIT_END, // Size:1
PLAYER_BLOCK_PERCENTAGE = 0x3FE + UNIT_END, // Size:1
PLAYER_DODGE_PERCENTAGE = 0x3FF + UNIT_END, // Size:1
PLAYER_PARRY_PERCENTAGE = 0x400 + UNIT_END, // Size:1
PLAYER_CRIT_PERCENTAGE = 0x401 + UNIT_END, // Size:1
PLAYER_RANGED_CRIT_PERCENTAGE = 0x402 + UNIT_END, // Size:1
PLAYER_OFFHAND_CRIT_PERCENTAGE = 0x403 + UNIT_END, // Size:1
PLAYER_SPELL_CRIT_PERCENTAGE1 = 0x404 + UNIT_END, // Size:7
PLAYER_HOLY_SPELL_CRIT_PERCENTAGE = 0x405 + UNIT_END, // custom
PLAYER_FIRE_SPELL_CRIT_PERCENTAGE = 0x406 + UNIT_END, // custom
PLAYER_NATURE_SPELL_CRIT_PERCENTAGE = 0x407 + UNIT_END, // custom
PLAYER_FROST_SPELL_CRIT_PERCENTAGE = 0x408 + UNIT_END, // custom
PLAYER_SHADOW_SPELL_CRIT_PERCENTAGE = 0x409 + UNIT_END, // custom
PLAYER_ARCANE_SPELL_CRIT_PERCENTAGE = 0x40A + UNIT_END, // custom
PLAYER_EXPLORED_ZONES_1 = 0x40B + UNIT_END, // Size:64
PLAYER_REST_STATE_EXPERIENCE = 0x44B + UNIT_END, // Size:1
PLAYER_FIELD_COINAGE = 0x44C + UNIT_END, // Size:1
PLAYER_FIELD_MOD_DAMAGE_DONE_POS = 0x44D + UNIT_END, // Size:7
PLAYER_FIELD_MOD_DAMAGE_DONE_NEG = 0x454 + UNIT_END, // Size:7
PLAYER_FIELD_MOD_DAMAGE_DONE_PCT = 0x45B + UNIT_END, // Size:7
PLAYER_FIELD_MOD_HEALING_DONE_POS = 0x462 + UNIT_END, // Size:1
PLAYER_FIELD_MOD_TARGET_RESISTANCE = 0x463 + UNIT_END, // Size:1
PLAYER_FIELD_BYTES = 0x464 + UNIT_END, // Size:1
PLAYER_AMMO_ID = 0x465 + UNIT_END, // Size:1
PLAYER_SELF_RES_SPELL = 0x466 + UNIT_END, // Size:1
PLAYER_FIELD_PVP_MEDALS = 0x467 + UNIT_END, // Size:1
PLAYER_FIELD_BUYBACK_PRICE_1 = 0x468 + UNIT_END, // count=12
PLAYER_FIELD_BUYBACK_PRICE_LAST = 0x473 + UNIT_END,
PLAYER_FIELD_BUYBACK_TIMESTAMP_1 = 0x474 + UNIT_END, // count=12
PLAYER_FIELD_BUYBACK_TIMESTAMP_LAST = 0x47A + UNIT_END,
PLAYER_FIELD_KILLS = 0x480 + UNIT_END, // Size:1 // ((uint16)kills_today<<16) | (uint16)kills_yesterday)
PLAYER_FIELD_HONOR_TODAY = 0x481 + UNIT_END, // Size:1
PLAYER_FIELD_HONOR_YESTERDAY = 0x482 + UNIT_END, // Size:1
PLAYER_FIELD_KILLS_LIFETIME = 0x483 + UNIT_END, // Size:1
PLAYER_FIELD_BYTES2 = 0x484 + UNIT_END, // Size:1
PLAYER_FIELD_WATCHED_FACTION_INDEX = 0x485 + UNIT_END, // Size:1
PLAYER_FIELD_COMBAT_RATING_1 = 0x486 + UNIT_END, // Size:23
PLAYER_FIELD_ALL_WEAPONS_SKILL_RATING = 0x486 + UNIT_END, // custom
PLAYER_FIELD_DEFENCE_RATING = 0x487 + UNIT_END, // custom
PLAYER_FIELD_DODGE_RATING = 0x488 + UNIT_END, // custom
PLAYER_FIELD_PARRY_RATING = 0x489 + UNIT_END, // custom
PLAYER_FIELD_BLOCK_RATING = 0x48A + UNIT_END, // custom
PLAYER_FIELD_MELEE_HIT_RATING = 0x48B + UNIT_END, // custom
PLAYER_FIELD_RANGED_HIT_RATING = 0x48C + UNIT_END, // custom
PLAYER_FIELD_SPELL_HIT_RATING = 0x48D + UNIT_END, // custom
PLAYER_FIELD_MELEE_CRIT_RATING = 0x48E + UNIT_END, // custom
PLAYER_FIELD_RANGED_CRIT_RATING = 0x48F + UNIT_END, // custom
PLAYER_FIELD_SPELL_CRIT_RATING = 0x490 + UNIT_END, // custom
PLAYER_FIELD_HIT_RATING = 0x491 + UNIT_END, // unsure, was PLAYER_FIELD_UNK1_RATING
PLAYER_FIELD_CRIT_RATING = 0x492 + UNIT_END, // unsure, was PLAYER_FIELD_UNK2_RATING
PLAYER_FIELD_UNK3_RATING = 0x493 + UNIT_END, // custom
PLAYER_FIELD_UNK4_RATING = 0x494 + UNIT_END, // custom
PLAYER_FIELD_UNK5_RATING = 0x495 + UNIT_END, // custom
PLAYER_FIELD_RESILIENCE_RATING = 0x496 + UNIT_END, // custom
PLAYER_FIELD_MELEE_HASTE_RATING = 0x497 + UNIT_END, // custom
PLAYER_FIELD_RANGED_HASTE_RATING = 0x498 + UNIT_END, // custom
PLAYER_FIELD_UNK6_RATING = 0x499 + UNIT_END, // custom
PLAYER_FIELD_MELEE_WEAPON_SKILL_RATING = 0x49A + UNIT_END, // custom
PLAYER_FIELD_UNK7_RATING = 0x49B + UNIT_END, // custom
PLAYER_FIELD_RANGED_WEAPON_SKILL_RATING = 0x49C + UNIT_END, // custom
PLAYER_FIELD_ARENA_TEAM_INFO_1_1 = 0x49D + UNIT_END, // Size:9
PLAYER_FIELD_HONOR_CURRENCY = 0x4A6 + UNIT_END, // Size:1
PLAYER_FIELD_ARENA_CURRENCY = 0x4A7 + UNIT_END, // Size:1
PLAYER_FIELD_MOD_MANA_REGEN = 0x4A8 + UNIT_END, // Size:1
PLAYER_FIELD_MOD_MANA_REGEN_INTERRUPT = 0x4A9 + UNIT_END, // Size:1
PLAYER_FIELD_MAX_LEVEL = 0x4AA + UNIT_END, // Size:1
PLAYER_FIELD_PADDING = 0x4AB + UNIT_END, // Size:1
PLAYER_END = 0x4AC + UNIT_END,
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
PLAYER_HOLY_SPELL_CRIT_PERCENTAGE = PLAYER_SPELL_CRIT_PERCENTAGE1+1,
PLAYER_FIRE_SPELL_CRIT_PERCENTAGE = PLAYER_SPELL_CRIT_PERCENTAGE1+2,
PLAYER_NATURE_SPELL_CRIT_PERCENTAGE = PLAYER_SPELL_CRIT_PERCENTAGE1+3,
PLAYER_FROST_SPELL_CRIT_PERCENTAGE = PLAYER_SPELL_CRIT_PERCENTAGE1+4,
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
// custom
PLAYER_FIELD_ALL_WEAPONS_SKILL_RATING = PLAYER_FIELD_COMBAT_RATING_1,
PLAYER_FIELD_DEFENCE_RATING = PLAYER_FIELD_COMBAT_RATING_1+1,
PLAYER_FIELD_DODGE_RATING = PLAYER_FIELD_COMBAT_RATING_1+2,
PLAYER_FIELD_PARRY_RATING = PLAYER_FIELD_COMBAT_RATING_1+3,
PLAYER_FIELD_BLOCK_RATING = PLAYER_FIELD_COMBAT_RATING_1+4,
PLAYER_FIELD_MELEE_HIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+5,
PLAYER_FIELD_RANGED_HIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+6,
PLAYER_FIELD_SPELL_HIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+7,
PLAYER_FIELD_MELEE_CRIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+8,
PLAYER_FIELD_RANGED_CRIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+9,
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
PLAYER_FIELD_UNK3_RATING = PLAYER_FIELD_COMBAT_RATING_1+13,
PLAYER_FIELD_UNK4_RATING = PLAYER_FIELD_COMBAT_RATING_1+14,
PLAYER_FIELD_UNK5_RATING = PLAYER_FIELD_COMBAT_RATING_1+15,
PLAYER_FIELD_RESILIENCE_RATING = PLAYER_FIELD_COMBAT_RATING_1+16,
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,
PLAYER_FIELD_ARENA_TEAM_INFO_1_1 = 0x057D, // 15 1 2
// 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_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,
};
enum EGameObjectFields
{
OBJECT_FIELD_CREATED_BY = OBJECT_END + 0x00,
GAMEOBJECT_DISPLAYID = OBJECT_END + 0x02,
GAMEOBJECT_FLAGS = OBJECT_END + 0x03,
GAMEOBJECT_ROTATION = OBJECT_END + 0x04,
GAMEOBJECT_STATE = OBJECT_END + 0x08,
GAMEOBJECT_POS_X = OBJECT_END + 0x09,
GAMEOBJECT_POS_Y = OBJECT_END + 0x0A,
GAMEOBJECT_POS_Z = OBJECT_END + 0x0B,
GAMEOBJECT_FACING = OBJECT_END + 0x0C,
GAMEOBJECT_DYN_FLAGS = OBJECT_END + 0x0D,
GAMEOBJECT_FACTION = OBJECT_END + 0x0E,
GAMEOBJECT_TYPE_ID = OBJECT_END + 0x0F,
GAMEOBJECT_LEVEL = OBJECT_END + 0x10,
GAMEOBJECT_ARTKIT = OBJECT_END + 0x11,
GAMEOBJECT_ANIMPROGRESS = OBJECT_END + 0x12,
GAMEOBJECT_PADDING = OBJECT_END + 0x13,
GAMEOBJECT_END = OBJECT_END + 0x14,
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,
};
enum EDynamicObjectFields
{
DYNAMICOBJECT_CASTER = OBJECT_END + 0x00,
DYNAMICOBJECT_BYTES = OBJECT_END + 0x02,
DYNAMICOBJECT_SPELLID = OBJECT_END + 0x03,
DYNAMICOBJECT_RADIUS = OBJECT_END + 0x04,
DYNAMICOBJECT_POS_X = OBJECT_END + 0x05,
DYNAMICOBJECT_POS_Y = OBJECT_END + 0x06,
DYNAMICOBJECT_POS_Z = OBJECT_END + 0x07,
DYNAMICOBJECT_FACING = OBJECT_END + 0x08,
DYNAMICOBJECT_PAD = OBJECT_END + 0x09,
DYNAMICOBJECT_END = OBJECT_END + 0x0A,
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,
};
enum ECorpseFields
{
CORPSE_FIELD_OWNER = OBJECT_END + 0x00,
CORPSE_FIELD_FACING = OBJECT_END + 0x02,
CORPSE_FIELD_POS_X = OBJECT_END + 0x03,
CORPSE_FIELD_POS_Y = OBJECT_END + 0x04,
CORPSE_FIELD_POS_Z = OBJECT_END + 0x05,
CORPSE_FIELD_DISPLAY_ID = OBJECT_END + 0x06,
CORPSE_FIELD_ITEM = OBJECT_END + 0x07, // 19
CORPSE_FIELD_BYTES_1 = OBJECT_END + 0x1A,
CORPSE_FIELD_BYTES_2 = OBJECT_END + 0x1B,
CORPSE_FIELD_GUILD = OBJECT_END + 0x1C,
CORPSE_FIELD_FLAGS = OBJECT_END + 0x1D,
CORPSE_FIELD_DYNAMIC_FLAGS = OBJECT_END + 0x1E,
CORPSE_FIELD_PAD = OBJECT_END + 0x1F,
CORPSE_END = OBJECT_END + 0x20,
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,
};
#endif

View File

@ -203,21 +203,22 @@ OpcodeHandler *WorldSession::_GetOpcodeHandlerTable() const
{MSG_MOVE_STOP_SWIM, &WorldSession::_HandleMovementOpcode},
{MSG_MOVE_HEARTBEAT, &WorldSession::_HandleMovementOpcode},
{MSG_MOVE_FALL_LAND, &WorldSession::_HandleMovementOpcode},
{MSG_MOVE_TELEPORT_ACK, &WorldSession::_HandleTelePortAckOpcode},
{MSG_MOVE_TELEPORT_ACK, &WorldSession::_HandleTelePortAckOpcode},
{SMSG_COMPRESSED_UPDATE_OBJECT, &WorldSession::_HandleCompressedUpdateObjectOpcode},
{SMSG_UPDATE_OBJECT, &WorldSession::_HandleUpdateObjectOpcode},
{SMSG_CAST_RESULT, &WorldSession::_HandleCastResultOpcode},
{SMSG_UPDATE_OBJECT, &WorldSession::_HandleUpdateObjectOpcode},
{SMSG_CAST_RESULT, &WorldSession::_HandleCastResultOpcode},
{SMSG_ITEM_QUERY_SINGLE_RESPONSE, &WorldSession::_HandleItemQuerySingleResponseOpcode},
{SMSG_DESTROY_OBJECT, &WorldSession::_HandleDestroyObjectOpcode},
{SMSG_INITIAL_SPELLS, &WorldSession::_HandleInitialSpellsOpcode},
{SMSG_LEARNED_SPELL, &WorldSession::_HandleLearnedSpellOpcode},
{SMSG_REMOVED_SPELL, &WorldSession::_HandleLearnedSpellOpcode},
{SMSG_CHANNEL_LIST, &WorldSession::_HandleChannelListOpcode},
{SMSG_LEARNED_SPELL, &WorldSession::_HandleLearnedSpellOpcode},
{SMSG_REMOVED_SPELL, &WorldSession::_HandleLearnedSpellOpcode},
{SMSG_CHANNEL_LIST, &WorldSession::_HandleChannelListOpcode},
{SMSG_EMOTE, &WorldSession::_HandleEmoteOpcode},
{SMSG_TEXT_EMOTE, &WorldSession::_HandleTextEmoteOpcode},
{SMSG_NEW_WORLD, &WorldSession::_HandleNewWorldOpcode},
{SMSG_LOGIN_VERIFY_WORLD, &WorldSession::_HandleLoginVerifyWorldOpcode},
{SMSG_MOTD, &WorldSession::_HandleMotdOpcode},
{SMSG_NOTIFICATION, &WorldSession::_HandleNotificationOpcode},
// table termination
{ 0, NULL }
@ -434,30 +435,31 @@ void WorldSession::_HandleMessageChatOpcode(WorldPacket& recvPacket)
{
uint8 type=0;
uint32 lang=0;
uint64 source_guid=0;
uint64 target_guid=0;
uint32 msglen=0;
uint32 unk=0;
std::string msg,channel="";
bool isCmd=false;
recvPacket >> type >> lang;
std::string langname = GetDBMgr().GetLangName(lang);
const char* ln = langname.c_str();
recvPacket >> source_guid >> unk; // added in 2.1.0
if (type == CHAT_MSG_CHANNEL)
{
recvPacket >> channel; // extract channel name
}
recvPacket >> target_guid >> msglen >> msg;
std::string langname = GetDBMgr().GetLangName(lang);
const char* ln = langname.c_str();
recvPacket >> target_guid;
std::string plrname;
if(target_guid)
if(source_guid)
{
plrname=plrNameCache.GetName(target_guid);
plrname=plrNameCache.GetName(source_guid);
if(plrname.empty())
{
SendQueryPlayerName(target_guid);
SendQueryPlayerName(source_guid);
plrname="Unknown Entity";
}
}
@ -465,10 +467,9 @@ void WorldSession::_HandleMessageChatOpcode(WorldPacket& recvPacket)
GetInstance()->GetScripts()->variables.Set("@thismsg",toString(target_guid));
if(type == CHAT_MSG_SAY || type == CHAT_MSG_YELL || type == CHAT_MSG_PARTY)
recvPacket >> target_guid;
DEBUG(logdebug("Chat packet recieved, type=%u lang=%u src="I64FMT" dst="I64FMT" chn='%s' len=%u",
type,lang,source_guid,target_guid,channel.c_str(),msglen));
recvPacket >> msglen >> msg;
if (type == CHAT_MSG_SYSTEM)
{
logcustom(0,WHITE,"SYSMSG: \"%s\"",msg.c_str());
@ -584,8 +585,27 @@ void WorldSession::_HandleMessageChatOpcode(WorldPacket& recvPacket)
}
}
}
}
void WorldSession::_HandleMotdOpcode(WorldPacket& recvPacket)
{
uint32 lines;
std::string line;
recvPacket >> lines;
for(uint32 i = 0; i < lines; i++)
{
recvPacket >> line;
logcustom(0,YELLOW,"MOTD: %s",line.c_str());
}
}
void WorldSession::_HandleNotificationOpcode(WorldPacket& recvPacket)
{
std::string text;
recvPacket >> text;
logcustom(0,YELLOW,"NOTIFY: %s",text.c_str());
}
void WorldSession::_HandleNameQueryResponseOpcode(WorldPacket& recvPacket)
{
uint64 pguid;
@ -887,3 +907,4 @@ void WorldSession::_HandleLoginVerifyWorldOpcode(WorldPacket& recvPacket)
// TODO: delete world on LogoutComplete once implemented

View File

@ -91,6 +91,8 @@ private:
void _HandleTextEmoteOpcode(WorldPacket& recvPacket);
void _HandleNewWorldOpcode(WorldPacket& recvPacket);
void _HandleLoginVerifyWorldOpcode(WorldPacket& recvPacket);
void _HandleMotdOpcode(WorldPacket& recvPacket);
void _HandleNotificationOpcode(WorldPacket& recvPacket);
void _MovementUpdate(uint8 objtypeid, uint64 guid, WorldPacket& recvPacket); // Helper for _HandleUpdateObjectOpcode
void _ValuesUpdate(uint64 uguid, WorldPacket& recvPacket); // ...