diff --git a/src/Client/DefScriptInterface.cpp b/src/Client/DefScriptInterface.cpp index a0ad102..193ff33 100644 --- a/src/Client/DefScriptInterface.cpp +++ b/src/Client/DefScriptInterface.cpp @@ -861,11 +861,11 @@ DefReturnResult DefScriptPackage::SCGetObjectValue(CmdSet &Set) else { if(DefScriptTools::stringToLower(Set.arg[1]) == "f") - return toString((ldbl)o->GetFloatValue(v)); + return toString((ldbl)o->GetFloatValue((UpdateFieldName)v)); else if(DefScriptTools::stringToLower(Set.arg[1]) == "i64") - return toString(o->GetUInt64Value(v)); + return toString(o->GetUInt64Value((UpdateFieldName)v)); else - return toString((uint64)o->GetUInt32Value(v)); + return toString((uint64)o->GetUInt32Value((UpdateFieldName)v)); } } return ""; diff --git a/src/Client/World/Makefile.am b/src/Client/World/Makefile.am index 52cc27e..7c1eb74 100644 --- a/src/Client/World/Makefile.am +++ b/src/Client/World/Makefile.am @@ -9,7 +9,7 @@ CacheHandler.h GameObject.h ObjectDefines.h Unit.cpp WorldP Channel.cpp Item.cpp Object.h Unit.h WorldSession.cpp\ Channel.h Item.h ObjMgr.cpp UpdateData.cpp WorldSession.h\ CMSGConstructor.cpp ObjMgr.h UpdateData.h WorldSocket.cpp\ -Corpse.cpp MapMgr.cpp Opcodes.cpp UpdateFields.h WorldSocket.h\ +Corpse.cpp MapMgr.cpp Opcodes.cpp UpdateFields.cpp WorldSocket.h\ Corpse.h MapMgr.h Opcodes.h UpdateMask.h libworld_a_LIBADD = ../../shared/libshared.a ../../shared/Auth/libauth.a ../../shared/Network/libnetwork.a diff --git a/src/Client/World/Object.h b/src/Client/World/Object.h index 537e044..94088b4 100644 --- a/src/Client/World/Object.h +++ b/src/Client/World/Object.h @@ -7,6 +7,14 @@ #include "HelperDefs.h" #include "World.h" +struct UpdateField +{ + UpdateField(){}; + UpdateField(uint16 o, uint16 t):offset(o),type(t){}; + uint16 offset; + uint16 type; +}; + enum TYPE { TYPE_OBJECT = 1, @@ -40,9 +48,9 @@ class Object { public: virtual ~Object(); - inline const uint64 GetGUID() const { return GetUInt64Value(0); } - inline const uint32 GetGUIDLow() const { return GetUInt32Value(0); } - inline const uint32 GetGUIDHigh() const { return GetUInt32Value(1); } + inline const uint64 GetGUID() const { return GetUInt64Value(OBJECT_FIELD_GUID); } + inline const uint32 GetGUIDLow() const { return GetUInt32Value(OBJECT_FIELD_GUID_LOW); } + inline const uint32 GetGUIDHigh() const { return GetUInt32Value(OBJECT_FIELD_GUID_HIGH); } inline uint32 GetEntry() const { return GetUInt32Value(OBJECT_FIELD_ENTRY); } inline uint16 GetValuesCount(void) { return _valuescount; } @@ -58,35 +66,39 @@ public: inline bool IsDynObject(void) { return _typeid == TYPEID_DYNAMICOBJECT; } // specific inline bool IsGameObject(void) { return _typeid == TYPEID_GAMEOBJECT; } // specific inline bool IsWorldObject(void) { return _type & (TYPE_PLAYER | TYPE_UNIT | TYPE_CORPSE | TYPE_DYNAMICOBJECT | TYPE_GAMEOBJECT); } - inline const uint32 GetUInt32Value( uint16 index ) const + inline const uint32 GetUInt32Value( UpdateFieldName index ) const { - return _uint32values[ index ]; + return _uint32values[ Object::updatefields[index].offset ]; } - inline const uint64 GetUInt64Value( uint16 index ) const + inline const uint64 GetUInt64Value( UpdateFieldName index ) const { - return *((uint64*)&(_uint32values[ index ])); + return *((uint64*)&(_uint32values[ Object::updatefields[index].offset ])); } - inline bool HasFlag( uint16 index, uint32 flag ) const + inline bool HasFlag( UpdateFieldName index, uint32 flag ) const { - return (_uint32values[ index ] & flag) != 0; + return (_uint32values[ Object::updatefields[index].offset ] & flag) != 0; } - inline const float GetFloatValue( uint16 index ) const + inline const float GetFloatValue( UpdateFieldName index ) const { - return _floatvalues[ index ]; + return _floatvalues[ Object::updatefields[index].offset ]; } - inline void SetFloatValue( uint16 index, float value ) + inline void SetFloatValue( UpdateFieldName index, float value ) { - _floatvalues[ index ] = value; + _floatvalues[ Object::updatefields[index].offset ] = value; } - inline void SetUInt32Value( uint16 index, uint32 value ) + inline void SetUInt32Value( UpdateFieldName index, uint32 value ) { - _uint32values[ index ] = value; + _uint32values[ Object::updatefields[index].offset ] = value; } - inline void SetUInt64Value( uint16 index, uint64 value ) + inline void SetUInt32Value( uint16 offset, uint32 value ) { - *((uint64*)&(_uint32values[ index ])) = value; + _uint32values[ offset ] = value; + } + inline void SetUInt64Value( UpdateFieldName index, uint64 value ) + { + *((uint64*)&(_uint32values[ Object::updatefields[index].offset ])) = value; } inline void SetName(std::string name) { _name = name; } @@ -94,7 +106,7 @@ public: inline float GetObjectSize() const { - return ( _valuescount > UNIT_FIELD_BOUNDINGRADIUS ) ? _floatvalues[UNIT_FIELD_BOUNDINGRADIUS] : 0.39f; + return ( _valuescount > Object::updatefields[UNIT_FIELD_BOUNDINGRADIUS].offset ) ? _floatvalues[Object::updatefields[UNIT_FIELD_BOUNDINGRADIUS].offset] : 0.39f; } void Create(uint64 guid); @@ -102,6 +114,7 @@ public: inline void _SetDepleted(void) { _depleted = true; } static uint32 maxvalues[]; + static UpdateField updatefields[]; protected: Object(); diff --git a/src/Client/World/UpdateData.cpp b/src/Client/World/UpdateData.cpp index 74ede6b..f74c5f0 100644 --- a/src/Client/World/UpdateData.cpp +++ b/src/Client/World/UpdateData.cpp @@ -128,6 +128,7 @@ void WorldSession::_HandleUpdateObjectOpcode(WorldPacket& recvPacket) Unit *unit = new Unit(); unit->Create(uguid); objmgr.Add(unit); + logdebug("Created Unit with guid "I64FMT,uguid); break; } case TYPEID_PLAYER: @@ -137,6 +138,7 @@ void WorldSession::_HandleUpdateObjectOpcode(WorldPacket& recvPacket) Player *player = new Player(); player->Create(uguid); objmgr.Add(player); + logdebug("Created Player with guid "I64FMT,uguid); break; } case TYPEID_GAMEOBJECT: @@ -144,6 +146,7 @@ void WorldSession::_HandleUpdateObjectOpcode(WorldPacket& recvPacket) GameObject *go = new GameObject(); go->Create(uguid); objmgr.Add(go); + logdebug("Created GO with guid "I64FMT,uguid); break; } case TYPEID_CORPSE: @@ -151,6 +154,7 @@ void WorldSession::_HandleUpdateObjectOpcode(WorldPacket& recvPacket) Corpse *corpse = new Corpse(); corpse->Create(uguid); objmgr.Add(corpse); + logdebug("Created Corpse with guid "I64FMT,uguid); break; } case TYPEID_DYNAMICOBJECT: @@ -158,6 +162,7 @@ void WorldSession::_HandleUpdateObjectOpcode(WorldPacket& recvPacket) DynamicObject *dobj = new DynamicObject(); dobj->Create(uguid); objmgr.Add(dobj); + logdebug("Created DynObj with guid "I64FMT,uguid); break; } } @@ -181,6 +186,7 @@ void WorldSession::_HandleUpdateObjectOpcode(WorldPacket& recvPacket) Set.defaultarg = toString(uguid); Set.arg[0] = toString(objtypeid); GetInstance()->GetScripts()->RunScript("_onobjectcreate", &Set); + } // if our own character got finally created, we have successfully entered the world, @@ -428,8 +434,6 @@ void WorldSession::_ValuesUpdate(uint64 uguid, WorldPacket& recvPacket) Object *obj = objmgr.GetObj(uguid); uint8 blockcount,tyid; uint32 value, masksize, valuesCount; - float fvalue; - uint64 value64; if(obj) { @@ -454,7 +458,6 @@ void WorldSession::_ValuesUpdate(uint64 uguid, WorldPacket& recvPacket) umask.SetMask(updateMask); //delete [] updateMask; // will be deleted at ~UpdateMask() !!!! logdev("ValuesUpdate TypeId=%u GUID="I64FMT" pObj=%X Blocks=%u Masksize=%u",tyid,uguid,obj,blockcount,masksize); - // just in case the object does not exist, and we have really a container instead of an item, and a value in // the container fields is set, THEN we have a problem. this should never be the case; it can be fixed in a // more correct way if there is the need. @@ -465,25 +468,9 @@ void WorldSession::_ValuesUpdate(uint64 uguid, WorldPacket& recvPacket) { if(obj) { - if(IsFloatField(obj->GetTypeMask(),i)) - { - recvPacket >> fvalue; - obj->SetFloatValue(i, fvalue); - logdev("-> Field[%u] = %f",i,fvalue); - } - else if(IsUInt64Field(obj->GetTypeMask(),i) && umask.GetBit(i+1)) - { - recvPacket >> value64; - obj->SetUInt64Value(i, value64); - logdev("-> Field[%u] = "I64FMT,i,value64); - i++; - } - else - { - recvPacket >> value; - obj->SetUInt32Value(i, value); - logdev("-> Field[%u] = %u",i,value); - } + recvPacket >> value; + obj->SetUInt32Value(i, value); //It does not matter what type of value we are setting, just copy the bytes + logdev("%u %u",i,value); } else { @@ -548,222 +535,3 @@ void WorldSession::_QueryObjectInfo(uint64 guid) } } -// helper to determine if an updatefield should store float or int values, depending on TypeId -bool IsFloatField(uint8 ty, uint32 f) -{ - static uint32 floats_object[] = - { - (uint32)OBJECT_FIELD_SCALE_X, - (uint32)-1 - }; - /* - static uint32 floats_item[] = - { - (uint32)-1 - }; - static uint32 floats_container[] = - { - (uint32)-1 - }; - */ - static uint32 floats_unit[] = - { - (uint32)UNIT_FIELD_BOUNDINGRADIUS, - (uint32)UNIT_FIELD_COMBATREACH, - (uint32)UNIT_FIELD_MINDAMAGE, - (uint32)UNIT_FIELD_MAXDAMAGE, - (uint32)UNIT_FIELD_MINOFFHANDDAMAGE, - (uint32)UNIT_FIELD_MINOFFHANDDAMAGE, - (uint32)UNIT_MOD_CAST_SPEED, - (uint32)UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER, - (uint32)UNIT_FIELD_ATTACK_POWER_MULTIPLIER, - (uint32)UNIT_FIELD_MINRANGEDDAMAGE, - (uint32)UNIT_FIELD_MAXRANGEDDAMAGE, - (uint32)UNIT_FIELD_POWER_COST_MULTIPLIER, - (uint32)UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER, - (uint32)UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER, - (uint32)UNIT_FIELD_MAXHEALTHMODIFIER, - (uint32)UNIT_FIELD_HOVERHEIGHT, - (uint32)-1 - }; - static uint32 floats_player[] = - { - (uint32)PLAYER_BLOCK_PERCENTAGE, - (uint32)PLAYER_DODGE_PERCENTAGE, - (uint32)PLAYER_PARRY_PERCENTAGE, - (uint32)PLAYER_RANGED_CRIT_PERCENTAGE, - (uint32)PLAYER_OFFHAND_CRIT_PERCENTAGE, - (uint32)PLAYER_SPELL_CRIT_PERCENTAGE1, - (uint32)PLAYER_CRIT_PERCENTAGE, - (uint32)PLAYER_SHIELD_BLOCK_CRIT_PERCENTAGE, - (uint32)PLAYER_FIELD_MOD_HEALING_PCT, - (uint32)PLAYER_FIELD_MOD_HEALING_DONE_PCT, - (uint32)PLAYER_RUNE_REGEN_1, - (uint32)-1 - }; - static uint32 floats_gameobject[] = - { - (uint32)GAMEOBJECT_PARENTROTATION, - (uint32)(GAMEOBJECT_PARENTROTATION + 1), - (uint32)(GAMEOBJECT_PARENTROTATION + 2), - (uint32)(GAMEOBJECT_PARENTROTATION + 3), - (uint32)-1 - }; - static uint32 floats_dynobject[] = - { - (uint32)DYNAMICOBJECT_RADIUS, - (uint32)-1 - }; - /* - static uint32 floats_corpse[] = - { - (uint32)-1 - }; - */ - - if(ty & TYPE_OBJECT) - for(uint32 i = 0; floats_object[i] != (uint32)(-1); i++) - if(floats_object[i] == f) - return true; - /* - if(ty & TYPE_ITEM) - for(uint32 i = 0; floats_item[i] != (-1); i++) - if(floats_object[i] == f) - return true; - if(ty & TYPE_CONTAINER) - for(uint32 i = 0; floats_container[i] != (-1); i++) - if(floats_object[i] == f) - return true; - */ - if(ty & TYPE_UNIT) - for(uint32 i = 0; floats_unit[i] != (uint32)(-1); i++) - if(floats_unit[i] == f) - return true; - if(ty & TYPE_PLAYER) - for(uint32 i = 0; floats_player[i] != (uint32)(-1); i++) - if(floats_player[i] == f) - return true; - if(ty & TYPE_GAMEOBJECT) - for(uint32 i = 0; floats_gameobject[i] != (uint32)(-1); i++) - if(floats_gameobject[i] == f) - return true; - if(ty & TYPE_DYNAMICOBJECT) - for(uint32 i = 0; floats_dynobject[i] != (uint32)(-1); i++) - if(floats_dynobject[i] == f) - return true; - /* - if(ty & TYPE_CORPSE) - for(uint32 i = 0; floats_corpse[i] != (uint32)(-1); i++) - if(floats_corpse[i] == f) - return true; - */ - return false; -} - -bool IsUInt64Field(uint8 ty, uint32 f) -{ - static uint32 u64_object[] = - { - (uint32)OBJECT_FIELD_GUID, - (uint32)-1 - }; - - static uint32 u64_item[] = - { - (uint32)ITEM_FIELD_OWNER, - (uint32)ITEM_FIELD_CONTAINED, - (uint32)ITEM_FIELD_CREATOR, - (uint32)ITEM_FIELD_GIFTCREATOR, - (uint32)-1 - }; - static uint32 u64_container[] = - { - (uint32)CONTAINER_FIELD_SLOT_1, - (uint32)-1 - }; - - static uint32 u64_unit[] = - { - (uint32)UNIT_FIELD_CHARM, - (uint32)UNIT_FIELD_SUMMON, - (uint32)UNIT_FIELD_CRITTER, - (uint32)UNIT_FIELD_CHARMEDBY, - (uint32)UNIT_FIELD_SUMMONEDBY, - (uint32)UNIT_FIELD_CREATEDBY, - (uint32)UNIT_FIELD_TARGET, - (uint32)UNIT_FIELD_CHANNEL_OBJECT, - (uint32)-1 - }; - static uint32 u64_player[] = - { - (uint32)PLAYER_DUEL_ARBITER, - (uint32)PLAYER_FIELD_INV_SLOT_HEAD, - (uint32)PLAYER_FIELD_PACK_SLOT_1, - (uint32)PLAYER_FIELD_BANK_SLOT_1, - (uint32)PLAYER_FIELD_BANKBAG_SLOT_1, - (uint32)PLAYER_FIELD_VENDORBUYBACK_SLOT_1, - (uint32)PLAYER_FIELD_KEYRING_SLOT_1, - (uint32)PLAYER_FIELD_CURRENCYTOKEN_SLOT_1, - (uint32)PLAYER_FARSIGHT, - (uint32)PLAYER__FIELD_KNOWN_TITLES, - (uint32)PLAYER__FIELD_KNOWN_TITLES1, - (uint32)PLAYER__FIELD_KNOWN_TITLES2, - (uint32)PLAYER_FIELD_KNOWN_CURRENCIES, - (uint32)-1 - }; - static uint32 u64_gameobject[] = - { - (uint32)OBJECT_FIELD_CREATED_BY, - (uint32)-1 - }; - static uint32 u64_dynobject[] = - { - (uint32)DYNAMICOBJECT_CASTER, - (uint32)-1 - }; - - static uint32 u64_corpse[] = - { - (uint32)CORPSE_FIELD_OWNER, - (uint32)CORPSE_FIELD_PARTY, - (uint32)-1 - }; - - if(ty & TYPE_OBJECT) - for(uint32 i = 0; u64_object[i] != (uint32)(-1); i++) - if(u64_object[i] == f) - return true; - - if(ty & TYPE_ITEM) - for(uint32 i = 0; u64_item[i] != (uint32)(-1); i++) - if(u64_item[i] == f) - return true; - if(ty & TYPE_CONTAINER) - for(uint32 i = 0; u64_container[i] != (uint32)(-1); i++) - if(u64_container[i] == f) - return true; - - if(ty & TYPE_UNIT) - for(uint32 i = 0; u64_unit[i] != (uint32)(-1); i++) - if(u64_unit[i] == f) - return true; - if(ty & TYPE_PLAYER) - for(uint32 i = 0; u64_player[i] != (uint32)(-1); i++) - if(u64_player[i] == f) - return true; - if(ty & TYPE_GAMEOBJECT) - for(uint32 i = 0; u64_gameobject[i] != (uint32)(-1); i++) - if(u64_gameobject[i] == f) - return true; - if(ty & TYPE_DYNAMICOBJECT) - for(uint32 i = 0; u64_dynobject[i] != (uint32)(-1); i++) - if(u64_dynobject[i] == f) - return true; - - if(ty & TYPE_CORPSE) - for(uint32 i = 0; u64_corpse[i] != (uint32)(-1); i++) - if(u64_corpse[i] == f) - return true; - - return false; -} diff --git a/src/Client/World/UpdateFields.cpp b/src/Client/World/UpdateFields.cpp new file mode 100644 index 0000000..fe980d0 --- /dev/null +++ b/src/Client/World/UpdateFields.cpp @@ -0,0 +1,697 @@ +#include "PseuWoW.h" +#include "Object.h" +#include "WorldSession.h" + +void WorldSession::_SetupObjectFields() +{ + switch(_instance->GetConf()->client)//TODO: Add TBC/WOTLK cases + { + case CLIENT_CLASSIC_WOW: + { + uint32 mv[]={ + OBJECT_END, + ITEM_END_6005, + CONTAINER_END_6005, + UNIT_END_6005, + PLAYER_END_6005, + GAMEOBJECT_END_6005, + DYNAMICOBJECT_END, + CORPSE_END + }; + memcpy(Object::maxvalues,mv,sizeof(mv)); + + Object::updatefields[ OBJECT_FIELD_GUID ] = UpdateField( 0x0000 , UF_UINT64 ); // Size:2 + Object::updatefields[ OBJECT_FIELD_GUID_LOW ] = UpdateField( 0x0000 , UF_UINT32 ); + Object::updatefields[ OBJECT_FIELD_GUID_HIGH ] = UpdateField( 0x0001 , UF_UINT32 ); + Object::updatefields[ OBJECT_FIELD_TYPE ] = UpdateField( 0x0002 , UF_UINT32 ); // Size:1 + Object::updatefields[ OBJECT_FIELD_ENTRY ] = UpdateField( 0x0003 , UF_UINT32 ); // Size:1 + Object::updatefields[ OBJECT_FIELD_SCALE_X ] = UpdateField( 0x0004 , UF_FLOAT ); // Size:1 + Object::updatefields[ OBJECT_FIELD_PADDING ] = UpdateField( 0x0005 , UF_UINT32 ); // Size:1 + + Object::updatefields[ ITEM_FIELD_OWNER ] = UpdateField( mv[TYPEID_OBJECT] + 0x0000 , UF_UINT64 ); // Size:2 + Object::updatefields[ ITEM_FIELD_CONTAINED ] = UpdateField( mv[TYPEID_OBJECT] + 0x0002 , UF_UINT64 ); // Size:2 + Object::updatefields[ ITEM_FIELD_CREATOR ] = UpdateField( mv[TYPEID_OBJECT] + 0x0004 , UF_UINT64 ); // Size:2 + Object::updatefields[ ITEM_FIELD_GIFTCREATOR ] = UpdateField( mv[TYPEID_OBJECT] + 0x0006 , UF_UINT64 ); // Size:2 + Object::updatefields[ ITEM_FIELD_STACK_COUNT ] = UpdateField( mv[TYPEID_OBJECT] + 0x0008 , UF_UINT32 ); // Size:1 + Object::updatefields[ ITEM_FIELD_DURATION ] = UpdateField( mv[TYPEID_OBJECT] + 0x0009 , UF_UINT32 ); // Size:1 + Object::updatefields[ ITEM_FIELD_SPELL_CHARGES ] = UpdateField( mv[TYPEID_OBJECT] + 0x000A , UF_UINT32 ); // Size:5 + Object::updatefields[ ITEM_FIELD_SPELL_CHARGES_01 ] = UpdateField( mv[TYPEID_OBJECT] + 0x000B , UF_UINT32 ); + Object::updatefields[ ITEM_FIELD_SPELL_CHARGES_02 ] = UpdateField( mv[TYPEID_OBJECT] + 0x000C , UF_UINT32 ); + Object::updatefields[ ITEM_FIELD_SPELL_CHARGES_03 ] = UpdateField( mv[TYPEID_OBJECT] + 0x000D , UF_UINT32 ); + Object::updatefields[ ITEM_FIELD_SPELL_CHARGES_04 ] = UpdateField( mv[TYPEID_OBJECT] + 0x000E , UF_UINT32 ); + Object::updatefields[ ITEM_FIELD_FLAGS ] = UpdateField( mv[TYPEID_OBJECT] + 0x000F , UF_UINT32 ); // Size:1 + Object::updatefields[ ITEM_FIELD_ENCHANTMENT ] = UpdateField( mv[TYPEID_OBJECT] + 0x0010 , UF_UINT32 ); // Count=21 + Object::updatefields[ ITEM_FIELD_PROPERTY_SEED ] = UpdateField( mv[TYPEID_OBJECT] + 0x0025 , UF_UINT32 ); // Size:1 + Object::updatefields[ ITEM_FIELD_RANDOM_PROPERTIES_ID ] = UpdateField( mv[TYPEID_OBJECT] + 0x0026 , UF_UINT32 ); // Size:1 + Object::updatefields[ ITEM_FIELD_ITEM_TEXT_ID ] = UpdateField( mv[TYPEID_OBJECT] + 0x0027 , UF_UINT32 ); // Size:1 + Object::updatefields[ ITEM_FIELD_DURABILITY ] = UpdateField( mv[TYPEID_OBJECT] + 0x0028 , UF_UINT32 ); // Size:1 + Object::updatefields[ ITEM_FIELD_MAXDURABILITY ] = UpdateField( mv[TYPEID_OBJECT] + 0x0029 , UF_UINT32 ); // Size:1 + + Object::updatefields[ CONTAINER_FIELD_NUM_SLOTS ] = UpdateField( mv[TYPEID_UNIT] + 0x0000 , UF_UINT32 ); // Size:1 + Object::updatefields[ CONTAINER_ALIGN_PAD ] = UpdateField( mv[TYPEID_UNIT] + 0x0001 , UF_UINT32 ); // Size:1 + Object::updatefields[ CONTAINER_FIELD_SLOT_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x0002 , UF_UINT32 ); // Count=56 + Object::updatefields[ CONTAINER_FIELD_SLOT_LAST ] = UpdateField( mv[TYPEID_UNIT] + 0x0038 , UF_UINT32 ); + + Object::updatefields[ UNIT_FIELD_CHARM ] = UpdateField( mv[TYPEID_OBJECT] + 0x0000 , UF_UINT64 ); // Size:2 + Object::updatefields[ UNIT_FIELD_SUMMON ] = UpdateField( mv[TYPEID_OBJECT] + 0x0002 , UF_UINT64 ); // Size:2 + Object::updatefields[ UNIT_FIELD_CHARMEDBY ] = UpdateField( mv[TYPEID_OBJECT] + 0x0004 , UF_UINT64 ); // Size:2 + Object::updatefields[ UNIT_FIELD_SUMMONEDBY ] = UpdateField( mv[TYPEID_OBJECT] + 0x0006 , UF_UINT64 ); // Size:2 + Object::updatefields[ UNIT_FIELD_CREATEDBY ] = UpdateField( mv[TYPEID_OBJECT] + 0x0008 , UF_UINT64 ); // Size:2 + Object::updatefields[ UNIT_FIELD_TARGET ] = UpdateField( mv[TYPEID_OBJECT] + 0x000A , UF_UINT64 ); // Size:2 + Object::updatefields[ UNIT_FIELD_PERSUADED ] = UpdateField( mv[TYPEID_OBJECT] + 0x000C , UF_UINT64 ); // Size:2 + Object::updatefields[ UNIT_FIELD_CHANNEL_OBJECT ] = UpdateField( mv[TYPEID_OBJECT] + 0x000E , UF_UINT64 ); // Size:2 + Object::updatefields[ UNIT_FIELD_HEALTH ] = UpdateField( mv[TYPEID_OBJECT] + 0x0010 , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_POWER1 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0011 , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_POWER2 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0012 , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_POWER3 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0013 , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_POWER4 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0014 , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_POWER5 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0015 , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_MAXHEALTH ] = UpdateField( mv[TYPEID_OBJECT] + 0x0016 , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_MAXPOWER1 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0017 , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_MAXPOWER2 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0018 , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_MAXPOWER3 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0019 , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_MAXPOWER4 ] = UpdateField( mv[TYPEID_OBJECT] + 0x001A , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_MAXPOWER5 ] = UpdateField( mv[TYPEID_OBJECT] + 0x001B , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_LEVEL ] = UpdateField( mv[TYPEID_OBJECT] + 0x001C , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_FACTIONTEMPLATE ] = UpdateField( mv[TYPEID_OBJECT] + 0x001D , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_BYTES_0 ] = UpdateField( mv[TYPEID_OBJECT] + 0x001E , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_VIRTUAL_ITEM_SLOT_DISPLAY ] = UpdateField( mv[TYPEID_OBJECT] + 0x001F , UF_UINT32 ); // Size:3 + Object::updatefields[ UNIT_VIRTUAL_ITEM_SLOT_DISPLAY_01 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0020 , UF_UINT32 ); + Object::updatefields[ UNIT_VIRTUAL_ITEM_SLOT_DISPLAY_02 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0021 , UF_UINT32 ); + Object::updatefields[ UNIT_VIRTUAL_ITEM_INFO ] = UpdateField( mv[TYPEID_OBJECT] + 0x0022 , UF_UINT32 ); // Size:6 + Object::updatefields[ UNIT_VIRTUAL_ITEM_INFO_01 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0023 , UF_UINT32 ); + Object::updatefields[ UNIT_VIRTUAL_ITEM_INFO_02 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0024 , UF_UINT32 ); + Object::updatefields[ UNIT_VIRTUAL_ITEM_INFO_03 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0025 , UF_UINT32 ); + Object::updatefields[ UNIT_VIRTUAL_ITEM_INFO_04 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0026 , UF_UINT32 ); + Object::updatefields[ UNIT_VIRTUAL_ITEM_INFO_05 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0027 , UF_UINT32 ); + Object::updatefields[ UNIT_FIELD_FLAGS ] = UpdateField( mv[TYPEID_OBJECT] + 0x0028 , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_AURA ] = UpdateField( mv[TYPEID_OBJECT] + 0x0029 , UF_UINT32 ); // Size:48 + Object::updatefields[ UNIT_FIELD_AURA_LAST ] = UpdateField( mv[TYPEID_OBJECT] + 0x0058 , UF_UINT32 ); + Object::updatefields[ UNIT_FIELD_AURAFLAGS ] = UpdateField( mv[TYPEID_OBJECT] + 0x0059 , UF_UINT32 ); // Size:6 + Object::updatefields[ UNIT_FIELD_AURAFLAGS_01 ] = UpdateField( mv[TYPEID_OBJECT] + 0x005A , UF_UINT32 ); + Object::updatefields[ UNIT_FIELD_AURAFLAGS_02 ] = UpdateField( mv[TYPEID_OBJECT] + 0x005B , UF_UINT32 ); + Object::updatefields[ UNIT_FIELD_AURAFLAGS_03 ] = UpdateField( mv[TYPEID_OBJECT] + 0x005C , UF_UINT32 ); + Object::updatefields[ UNIT_FIELD_AURAFLAGS_04 ] = UpdateField( mv[TYPEID_OBJECT] + 0x005D , UF_UINT32 ); + Object::updatefields[ UNIT_FIELD_AURAFLAGS_05 ] = UpdateField( mv[TYPEID_OBJECT] + 0x005E , UF_UINT32 ); + Object::updatefields[ UNIT_FIELD_AURALEVELS ] = UpdateField( mv[TYPEID_OBJECT] + 0x005F , UF_UINT32 ); // Size:12 + Object::updatefields[ UNIT_FIELD_AURALEVELS_LAST ] = UpdateField( mv[TYPEID_OBJECT] + 0x006A , UF_UINT32 ); + Object::updatefields[ UNIT_FIELD_AURAAPPLICATIONS ] = UpdateField( mv[TYPEID_OBJECT] + 0x006B , UF_UINT32 ); // Size:12 + Object::updatefields[ UNIT_FIELD_AURAAPPLICATIONS_LAST ] = UpdateField( mv[TYPEID_OBJECT] + 0x0076 , UF_UINT32 ); + Object::updatefields[ UNIT_FIELD_AURASTATE ] = UpdateField( mv[TYPEID_OBJECT] + 0x0077 , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_BASEATTACKTIME ] = UpdateField( mv[TYPEID_OBJECT] + 0x0078 , UF_UINT64 ); // Size:2 + Object::updatefields[ UNIT_FIELD_OFFHANDATTACKTIME ] = UpdateField( mv[TYPEID_OBJECT] + 0x0079 , UF_UINT64 ); // Size:2 + Object::updatefields[ UNIT_FIELD_RANGEDATTACKTIME ] = UpdateField( mv[TYPEID_OBJECT] + 0x007A , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_BOUNDINGRADIUS ] = UpdateField( mv[TYPEID_OBJECT] + 0x007B , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_COMBATREACH ] = UpdateField( mv[TYPEID_OBJECT] + 0x007C , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_DISPLAYID ] = UpdateField( mv[TYPEID_OBJECT] + 0x007D , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_NATIVEDISPLAYID ] = UpdateField( mv[TYPEID_OBJECT] + 0x007E , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_MOUNTDISPLAYID ] = UpdateField( mv[TYPEID_OBJECT] + 0x007F , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_MINDAMAGE ] = UpdateField( mv[TYPEID_OBJECT] + 0x0080 , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_MAXDAMAGE ] = UpdateField( mv[TYPEID_OBJECT] + 0x0081 , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_MINOFFHANDDAMAGE ] = UpdateField( mv[TYPEID_OBJECT] + 0x0082 , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_MAXOFFHANDDAMAGE ] = UpdateField( mv[TYPEID_OBJECT] + 0x0083 , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_BYTES_1 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0084 , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_PETNUMBER ] = UpdateField( mv[TYPEID_OBJECT] + 0x0085 , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_PET_NAME_TIMESTAMP ] = UpdateField( mv[TYPEID_OBJECT] + 0x0086 , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_PETEXPERIENCE ] = UpdateField( mv[TYPEID_OBJECT] + 0x0087 , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_PETNEXTLEVELEXP ] = UpdateField( mv[TYPEID_OBJECT] + 0x0088 , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_DYNAMIC_FLAGS ] = UpdateField( mv[TYPEID_OBJECT] + 0x0089 , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_CHANNEL_SPELL ] = UpdateField( mv[TYPEID_OBJECT] + 0x008A , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_MOD_CAST_SPEED ] = UpdateField( mv[TYPEID_OBJECT] + 0x008B , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_CREATED_BY_SPELL ] = UpdateField( mv[TYPEID_OBJECT] + 0x008C , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_NPC_FLAGS ] = UpdateField( mv[TYPEID_OBJECT] + 0x008D , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_NPC_EMOTESTATE ] = UpdateField( mv[TYPEID_OBJECT] + 0x008E , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_TRAINING_POINTS ] = UpdateField( mv[TYPEID_OBJECT] + 0x008F , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_STAT0 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0090 , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_STAT1 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0091 , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_STAT2 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0092 , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_STAT3 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0093 , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_STAT4 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0094 , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_RESISTANCES ] = UpdateField( mv[TYPEID_OBJECT] + 0x0095 , UF_UINT32 ); // Size:7 + Object::updatefields[ UNIT_FIELD_RESISTANCES_01 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0096 , UF_UINT32 ); + Object::updatefields[ UNIT_FIELD_RESISTANCES_02 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0097 , UF_UINT32 ); + Object::updatefields[ UNIT_FIELD_RESISTANCES_03 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0098 , UF_UINT32 ); + Object::updatefields[ UNIT_FIELD_RESISTANCES_04 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0099 , UF_UINT32 ); + Object::updatefields[ UNIT_FIELD_RESISTANCES_05 ] = UpdateField( mv[TYPEID_OBJECT] + 0x009A , UF_UINT32 ); + Object::updatefields[ UNIT_FIELD_RESISTANCES_06 ] = UpdateField( mv[TYPEID_OBJECT] + 0x009B , UF_UINT32 ); + Object::updatefields[ UNIT_FIELD_BASE_MANA ] = UpdateField( mv[TYPEID_OBJECT] + 0x009C , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_BASE_HEALTH ] = UpdateField( mv[TYPEID_OBJECT] + 0x009D , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_BYTES_2 ] = UpdateField( mv[TYPEID_OBJECT] + 0x009E , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_ATTACK_POWER ] = UpdateField( mv[TYPEID_OBJECT] + 0x009F , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_ATTACK_POWER_MODS ] = UpdateField( mv[TYPEID_OBJECT] + 0x00A0 , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_ATTACK_POWER_MULTIPLIER ] = UpdateField( mv[TYPEID_OBJECT] + 0x00A1 , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_RANGED_ATTACK_POWER ] = UpdateField( mv[TYPEID_OBJECT] + 0x00A2 , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_RANGED_ATTACK_POWER_MODS ] = UpdateField( mv[TYPEID_OBJECT] + 0x00A3 , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER ] = UpdateField( mv[TYPEID_OBJECT] + 0x00A4 , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_MINRANGEDDAMAGE ] = UpdateField( mv[TYPEID_OBJECT] + 0x00A5 , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_MAXRANGEDDAMAGE ] = UpdateField( mv[TYPEID_OBJECT] + 0x00A6 , UF_UINT32 ); // Size:1 + Object::updatefields[ UNIT_FIELD_POWER_COST_MODIFIER ] = UpdateField( mv[TYPEID_OBJECT] + 0x00A7 , UF_UINT32 ); // Size:7 + Object::updatefields[ UNIT_FIELD_POWER_COST_MODIFIER_01 ] = UpdateField( mv[TYPEID_OBJECT] + 0x00A8 , UF_UINT32 ); + Object::updatefields[ UNIT_FIELD_POWER_COST_MODIFIER_02 ] = UpdateField( mv[TYPEID_OBJECT] + 0x00A9 , UF_UINT32 ); + Object::updatefields[ UNIT_FIELD_POWER_COST_MODIFIER_03 ] = UpdateField( mv[TYPEID_OBJECT] + 0x00AA , UF_UINT32 ); + Object::updatefields[ UNIT_FIELD_POWER_COST_MODIFIER_04 ] = UpdateField( mv[TYPEID_OBJECT] + 0x00AB , UF_UINT32 ); + Object::updatefields[ UNIT_FIELD_POWER_COST_MODIFIER_05 ] = UpdateField( mv[TYPEID_OBJECT] + 0x00AC , UF_UINT32 ); + Object::updatefields[ UNIT_FIELD_POWER_COST_MODIFIER_06 ] = UpdateField( mv[TYPEID_OBJECT] + 0x00AD , UF_UINT32 ); + Object::updatefields[ UNIT_FIELD_POWER_COST_MULTIPLIER ] = UpdateField( mv[TYPEID_OBJECT] + 0x00AE , UF_UINT32 ); // Size:7 + Object::updatefields[ UNIT_FIELD_POWER_COST_MULTIPLIER_01 ] = UpdateField( mv[TYPEID_OBJECT] + 0x00AF , UF_UINT32 ); + Object::updatefields[ UNIT_FIELD_POWER_COST_MULTIPLIER_02 ] = UpdateField( mv[TYPEID_OBJECT] + 0x00B0 , UF_UINT32 ); + Object::updatefields[ UNIT_FIELD_POWER_COST_MULTIPLIER_03 ] = UpdateField( mv[TYPEID_OBJECT] + 0x00B1 , UF_UINT32 ); + Object::updatefields[ UNIT_FIELD_POWER_COST_MULTIPLIER_04 ] = UpdateField( mv[TYPEID_OBJECT] + 0x00B2 , UF_UINT32 ); + Object::updatefields[ UNIT_FIELD_POWER_COST_MULTIPLIER_05 ] = UpdateField( mv[TYPEID_OBJECT] + 0x00B3 , UF_UINT32 ); + Object::updatefields[ UNIT_FIELD_POWER_COST_MULTIPLIER_06 ] = UpdateField( mv[TYPEID_OBJECT] + 0x00B4 , UF_UINT32 ); + Object::updatefields[ UNIT_FIELD_PADDING ] = UpdateField( mv[TYPEID_OBJECT] + 0x00B5 , UF_UINT32 ); + + Object::updatefields[ PLAYER_DUEL_ARBITER ] = UpdateField( mv[TYPEID_UNIT] + 0x0000 , UF_UINT64 ); // Size:2 + Object::updatefields[ PLAYER_FLAGS ] = UpdateField( mv[TYPEID_UNIT] + 0x0002 , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_GUILDID ] = UpdateField( mv[TYPEID_UNIT] + 0x0003 , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_GUILDRANK ] = UpdateField( mv[TYPEID_UNIT] + 0x0004 , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_BYTES ] = UpdateField( mv[TYPEID_UNIT] + 0x0005 , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_BYTES_2 ] = UpdateField( mv[TYPEID_UNIT] + 0x0006 , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_BYTES_3 ] = UpdateField( mv[TYPEID_UNIT] + 0x0007 , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_DUEL_TEAM ] = UpdateField( mv[TYPEID_UNIT] + 0x0008 , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_GUILD_TIMESTAMP ] = UpdateField( mv[TYPEID_UNIT] + 0x0009 , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_QUEST_LOG_1_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x000A , UF_UINT32 ); // Count = 20 + Object::updatefields[ PLAYER_QUEST_LOG_1_2 ] = UpdateField( mv[TYPEID_UNIT] + 0x000B , UF_UINT32 ); + Object::updatefields[ PLAYER_QUEST_LOG_1_3 ] = UpdateField( mv[TYPEID_UNIT] + 0x000C , UF_UINT32 ); + Object::updatefields[ PLAYER_QUEST_LOG_LAST_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x0043 , UF_UINT32 ); + Object::updatefields[ PLAYER_QUEST_LOG_LAST_2 ] = UpdateField( mv[TYPEID_UNIT] + 0x0044 , UF_UINT32 ); + Object::updatefields[ PLAYER_QUEST_LOG_LAST_3 ] = UpdateField( mv[TYPEID_UNIT] + 0x0045 , UF_UINT32 ); + Object::updatefields[ PLAYER_VISIBLE_ITEM_1_CREATOR ] = UpdateField( mv[TYPEID_UNIT] + 0x0046 , UF_UINT64 ); // Size:2, Count = 19 + Object::updatefields[ PLAYER_VISIBLE_ITEM_1_0 ] = UpdateField( mv[TYPEID_UNIT] + 0x0048 , UF_UINT64 ); // Size:8 + Object::updatefields[ PLAYER_VISIBLE_ITEM_1_PROPERTIES ] = UpdateField( mv[TYPEID_UNIT] + 0x0050 , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_VISIBLE_ITEM_1_PAD ] = UpdateField( mv[TYPEID_UNIT] + 0x0051 , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_VISIBLE_ITEM_LAST_CREATOR ] = UpdateField( mv[TYPEID_UNIT] + 0x011E , UF_UINT32 ); + Object::updatefields[ PLAYER_VISIBLE_ITEM_LAST_0 ] = UpdateField( mv[TYPEID_UNIT] + 0x0120 , UF_UINT32 ); + Object::updatefields[ PLAYER_VISIBLE_ITEM_LAST_PROPERTIES ] = UpdateField( mv[TYPEID_UNIT] + 0x0128 , UF_UINT32 ); + Object::updatefields[ PLAYER_VISIBLE_ITEM_LAST_PAD ] = UpdateField( mv[TYPEID_UNIT] + 0x0129 , UF_UINT32 ); + Object::updatefields[ PLAYER_FIELD_INV_SLOT_HEAD ] = UpdateField( mv[TYPEID_UNIT] + 0x012A , UF_UINT32 ); // Size:46 + Object::updatefields[ PLAYER_FIELD_PACK_SLOT_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x0158 , UF_UINT32 ); // Size:32 + Object::updatefields[ PLAYER_FIELD_PACK_SLOT_LAST ] = UpdateField( mv[TYPEID_UNIT] + 0x0176 , UF_UINT32 ); + Object::updatefields[ PLAYER_FIELD_BANK_SLOT_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x0178 , UF_UINT32 ); // Size:48 + Object::updatefields[ PLAYER_FIELD_BANK_SLOT_LAST ] = UpdateField( mv[TYPEID_UNIT] + 0x01A6 , UF_UINT32 ); + Object::updatefields[ PLAYER_FIELD_BANKBAG_SLOT_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x01A8 , UF_UINT32 ); // Size:12 + Object::updatefields[ PLAYER_FIELD_BANKBAG_SLOT_LAST ] = UpdateField( mv[TYPEID_UNIT] + 0x0AB2 , UF_UINT32 ); + Object::updatefields[ PLAYER_FIELD_VENDORBUYBACK_SLOT_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x01B4 , UF_UINT32 ); // Size:24 + Object::updatefields[ PLAYER_FIELD_VENDORBUYBACK_SLOT_LAST ] = UpdateField( mv[TYPEID_UNIT] + 0x01CA , UF_UINT32 ); + Object::updatefields[ PLAYER_FIELD_KEYRING_SLOT_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x01CC , UF_UINT32 ); // Size:64 + Object::updatefields[ PLAYER_FIELD_KEYRING_SLOT_LAST ] = UpdateField( mv[TYPEID_UNIT] + 0x020A , UF_UINT32 ); + Object::updatefields[ PLAYER_FARSIGHT ] = UpdateField( mv[TYPEID_UNIT] + 0x020C , UF_UINT64 ); // Size:2 + Object::updatefields[ PLAYER_FIELD_COMBO_TARGET ] = UpdateField( mv[TYPEID_UNIT] + 0x020E , UF_UINT64 ); // Size:2 + Object::updatefields[ PLAYER_XP ] = UpdateField( mv[TYPEID_UNIT] + 0x0210 , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_NEXT_LEVEL_XP ] = UpdateField( mv[TYPEID_UNIT] + 0x0211 , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_SKILL_INFO_1_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x0212 , UF_UINT32 ); // Size:384 + Object::updatefields[ PLAYER_CHARACTER_POINTS1 ] = UpdateField( mv[TYPEID_UNIT] + 0x0392 , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_CHARACTER_POINTS2 ] = UpdateField( mv[TYPEID_UNIT] + 0x0393 , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_TRACK_CREATURES ] = UpdateField( mv[TYPEID_UNIT] + 0x0394 , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_TRACK_RESOURCES ] = UpdateField( mv[TYPEID_UNIT] + 0x0395 , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_BLOCK_PERCENTAGE ] = UpdateField( mv[TYPEID_UNIT] + 0x0396 , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_DODGE_PERCENTAGE ] = UpdateField( mv[TYPEID_UNIT] + 0x0397 , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_PARRY_PERCENTAGE ] = UpdateField( mv[TYPEID_UNIT] + 0x0398 , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_CRIT_PERCENTAGE ] = UpdateField( mv[TYPEID_UNIT] + 0x0399 , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_RANGED_CRIT_PERCENTAGE ] = UpdateField( mv[TYPEID_UNIT] + 0x039A , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_EXPLORED_ZONES_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x039B , UF_UINT32 ); // Size:64 + Object::updatefields[ PLAYER_REST_STATE_EXPERIENCE ] = UpdateField( mv[TYPEID_UNIT] + 0x03DB , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_FIELD_COINAGE ] = UpdateField( mv[TYPEID_UNIT] + 0x03DC , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_FIELD_POSSTAT0 ] = UpdateField( mv[TYPEID_UNIT] + 0x03DD , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_FIELD_POSSTAT1 ] = UpdateField( mv[TYPEID_UNIT] + 0x03DE , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_FIELD_POSSTAT2 ] = UpdateField( mv[TYPEID_UNIT] + 0x03DF , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_FIELD_POSSTAT3 ] = UpdateField( mv[TYPEID_UNIT] + 0x03E0 , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_FIELD_POSSTAT4 ] = UpdateField( mv[TYPEID_UNIT] + 0x03E1 , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_FIELD_NEGSTAT0 ] = UpdateField( mv[TYPEID_UNIT] + 0x03E2 , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_FIELD_NEGSTAT1 ] = UpdateField( mv[TYPEID_UNIT] + 0x03E3 , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_FIELD_NEGSTAT2 ] = UpdateField( mv[TYPEID_UNIT] + 0x03E4 , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_FIELD_NEGSTAT3 ] = UpdateField( mv[TYPEID_UNIT] + 0x03E5 , UF_UINT32 ); // Size:1, + Object::updatefields[ PLAYER_FIELD_NEGSTAT4 ] = UpdateField( mv[TYPEID_UNIT] + 0x03E6 , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_FIELD_RESISTANCEBUFFMODSPOSITIVE ] = UpdateField( mv[TYPEID_UNIT] + 0x03E7 , UF_UINT32 ); // Size:7 + Object::updatefields[ PLAYER_FIELD_RESISTANCEBUFFMODSNEGATIVE ] = UpdateField( mv[TYPEID_UNIT] + 0x03EE , UF_UINT32 ); // Size:7 + Object::updatefields[ PLAYER_FIELD_MOD_DAMAGE_DONE_POS ] = UpdateField( mv[TYPEID_UNIT] + 0x03F5 , UF_UINT32 ); // Size:7 + Object::updatefields[ PLAYER_FIELD_MOD_DAMAGE_DONE_NEG ] = UpdateField( mv[TYPEID_UNIT] + 0x03FC , UF_UINT32 ); // Size:7 + Object::updatefields[ PLAYER_FIELD_MOD_DAMAGE_DONE_PCT ] = UpdateField( mv[TYPEID_UNIT] + 0x0403 , UF_UINT32 ); // Size:7 + Object::updatefields[ PLAYER_FIELD_BYTES ] = UpdateField( mv[TYPEID_UNIT] + 0x040A , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_AMMO_ID ] = UpdateField( mv[TYPEID_UNIT] + 0x040B , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_SELF_RES_SPELL ] = UpdateField( mv[TYPEID_UNIT] + 0x040C , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_FIELD_PVP_MEDALS ] = UpdateField( mv[TYPEID_UNIT] + 0x040D , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_FIELD_BUYBACK_PRICE_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x040E , UF_UINT32 ); // Count=12 + Object::updatefields[ PLAYER_FIELD_BUYBACK_PRICE_LAST ] = UpdateField( mv[TYPEID_UNIT] + 0x0419 , UF_UINT32 ); + Object::updatefields[ PLAYER_FIELD_BUYBACK_TIMESTAMP_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x041A , UF_UINT32 ); // Count=12 + Object::updatefields[ PLAYER_FIELD_BUYBACK_TIMESTAMP_LAST ] = UpdateField( mv[TYPEID_UNIT] + 0x0425 , UF_UINT32 ); + Object::updatefields[ PLAYER_FIELD_SESSION_KILLS ] = UpdateField( mv[TYPEID_UNIT] + 0x0426 , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_FIELD_YESTERDAY_KILLS ] = UpdateField( mv[TYPEID_UNIT] + 0x0427 , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_FIELD_LAST_WEEK_KILLS ] = UpdateField( mv[TYPEID_UNIT] + 0x0428 , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_FIELD_THIS_WEEK_KILLS ] = UpdateField( mv[TYPEID_UNIT] + 0x0429 , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_FIELD_THIS_WEEK_CONTRIBUTION ] = UpdateField( mv[TYPEID_UNIT] + 0x042A , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_FIELD_LIFETIME_HONORABLE_KILLS ] = UpdateField( mv[TYPEID_UNIT] + 0x042B , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_FIELD_LIFETIME_DISHONORABLE_KILLS ] = UpdateField( mv[TYPEID_UNIT] + 0x042C , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_FIELD_YESTERDAY_CONTRIBUTION ] = UpdateField( mv[TYPEID_UNIT] + 0x042D , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_FIELD_LAST_WEEK_CONTRIBUTION ] = UpdateField( mv[TYPEID_UNIT] + 0x042E , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_FIELD_LAST_WEEK_RANK ] = UpdateField( mv[TYPEID_UNIT] + 0x042F , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_FIELD_BYTES2 ] = UpdateField( mv[TYPEID_UNIT] + 0x0430 , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_FIELD_WATCHED_FACTION_INDEX ] = UpdateField( mv[TYPEID_UNIT] + 0x0431 , UF_UINT32 ); // Size:1 + Object::updatefields[ PLAYER_FIELD_COMBAT_RATING_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x0432 , UF_UINT32 ); // Size:20 + + Object::updatefields[ OBJECT_FIELD_CREATED_BY ] = UpdateField( mv[TYPEID_OBJECT] + 0x0000 , UF_UINT64 ); + Object::updatefields[ GAMEOBJECT_DISPLAYID ] = UpdateField( mv[TYPEID_OBJECT] + 0x0002 , UF_UINT32 ); + Object::updatefields[ GAMEOBJECT_FLAGS ] = UpdateField( mv[TYPEID_OBJECT] + 0x0003 , UF_UINT32 ); + Object::updatefields[ GAMEOBJECT_ROTATION ] = UpdateField( mv[TYPEID_OBJECT] + 0x0004 , UF_UINT32 ); + Object::updatefields[ GAMEOBJECT_STATE ] = UpdateField( mv[TYPEID_OBJECT] + 0x0008 , UF_UINT32 ); + Object::updatefields[ GAMEOBJECT_POS_X ] = UpdateField( mv[TYPEID_OBJECT] + 0x0009 , UF_FLOAT ); + Object::updatefields[ GAMEOBJECT_POS_Y ] = UpdateField( mv[TYPEID_OBJECT] + 0x000A , UF_FLOAT ); + Object::updatefields[ GAMEOBJECT_POS_Z ] = UpdateField( mv[TYPEID_OBJECT] + 0x000B , UF_FLOAT ); + Object::updatefields[ GAMEOBJECT_FACING ] = UpdateField( mv[TYPEID_OBJECT] + 0x000C , UF_UINT32 ); + Object::updatefields[ GAMEOBJECT_DYN_FLAGS ] = UpdateField( mv[TYPEID_OBJECT] + 0x000D , UF_UINT32 ); + Object::updatefields[ GAMEOBJECT_FACTION ] = UpdateField( mv[TYPEID_OBJECT] + 0x000E , UF_UINT32 ); + Object::updatefields[ GAMEOBJECT_TYPE_ID ] = UpdateField( mv[TYPEID_OBJECT] + 0x000F , UF_UINT32 ); + Object::updatefields[ GAMEOBJECT_LEVEL ] = UpdateField( mv[TYPEID_OBJECT] + 0x0010 , UF_UINT32 ); + Object::updatefields[ GAMEOBJECT_ARTKIT ] = UpdateField( mv[TYPEID_OBJECT] + 0x0011 , UF_UINT32 ); + Object::updatefields[ GAMEOBJECT_ANIMPROGRESS ] = UpdateField( mv[TYPEID_OBJECT] + 0x0012 , UF_UINT32 ); + Object::updatefields[ GAMEOBJECT_PADDING ] = UpdateField( mv[TYPEID_OBJECT] + 0x0013 , UF_UINT32 ); + + Object::updatefields[ DYNAMICOBJECT_CASTER ] = UpdateField( mv[TYPEID_OBJECT] + 0x0000 , UF_UINT64 ); + Object::updatefields[ DYNAMICOBJECT_BYTES ] = UpdateField( mv[TYPEID_OBJECT] + 0x0002 , UF_UINT32 ); + Object::updatefields[ DYNAMICOBJECT_SPELLID ] = UpdateField( mv[TYPEID_OBJECT] + 0x0003 , UF_UINT32 ); + Object::updatefields[ DYNAMICOBJECT_RADIUS ] = UpdateField( mv[TYPEID_OBJECT] + 0x0004 , UF_UINT32 ); + Object::updatefields[ DYNAMICOBJECT_POS_X ] = UpdateField( mv[TYPEID_OBJECT] + 0x0005 , UF_UINT32 ); + Object::updatefields[ DYNAMICOBJECT_POS_Y ] = UpdateField( mv[TYPEID_OBJECT] + 0x0006 , UF_UINT32 ); + Object::updatefields[ DYNAMICOBJECT_POS_Z ] = UpdateField( mv[TYPEID_OBJECT] + 0x0007 , UF_UINT32 ); + Object::updatefields[ DYNAMICOBJECT_FACING ] = UpdateField( mv[TYPEID_OBJECT] + 0x0008 , UF_UINT32 ); + Object::updatefields[ DYNAMICOBJECT_PAD ] = UpdateField( mv[TYPEID_OBJECT] + 0x0009 , UF_UINT32 ); + + Object::updatefields[ CORPSE_FIELD_OWNER ] = UpdateField( mv[TYPEID_OBJECT] + 0x0000 , UF_UINT64 ); + Object::updatefields[ CORPSE_FIELD_FACING ] = UpdateField( mv[TYPEID_OBJECT] + 0x0002 , UF_UINT32 ); + Object::updatefields[ CORPSE_FIELD_POS_X ] = UpdateField( mv[TYPEID_OBJECT] + 0x0003 , UF_UINT32 ); + Object::updatefields[ CORPSE_FIELD_POS_Y ] = UpdateField( mv[TYPEID_OBJECT] + 0x0004 , UF_UINT32 ); + Object::updatefields[ CORPSE_FIELD_POS_Z ] = UpdateField( mv[TYPEID_OBJECT] + 0x0005 , UF_UINT32 ); + Object::updatefields[ CORPSE_FIELD_DISPLAY_ID ] = UpdateField( mv[TYPEID_OBJECT] + 0x0006 , UF_UINT32 ); + Object::updatefields[ CORPSE_FIELD_ITEM ] = UpdateField( mv[TYPEID_OBJECT] + 0x0007 , UF_UINT32 ); // 19 + Object::updatefields[ CORPSE_FIELD_BYTES_1 ] = UpdateField( mv[TYPEID_OBJECT] + 0x001A , UF_UINT32 ); + Object::updatefields[ CORPSE_FIELD_BYTES_2 ] = UpdateField( mv[TYPEID_OBJECT] + 0x001B , UF_UINT32 ); + Object::updatefields[ CORPSE_FIELD_GUILD ] = UpdateField( mv[TYPEID_OBJECT] + 0x001C , UF_UINT32 ); + Object::updatefields[ CORPSE_FIELD_FLAGS ] = UpdateField( mv[TYPEID_OBJECT] + 0x001D , UF_UINT32 ); + Object::updatefields[ CORPSE_FIELD_DYNAMIC_FLAGS ] = UpdateField( mv[TYPEID_OBJECT] + 0x001E , UF_UINT32 ); + Object::updatefields[ CORPSE_FIELD_PAD ] = UpdateField( mv[TYPEID_OBJECT] + 0x001F , UF_UINT32 ); + + break; + } + case CLIENT_TBC: //2.4.3 + { + break; //TODO: ADD DATA + } + case CLIENT_WOTLK://3.3.5 + { + uint32 mv[]={ + OBJECT_END, + ITEM_END, + CONTAINER_END, + UNIT_END, + PLAYER_END, + GAMEOBJECT_END, + DYNAMICOBJECT_END, + CORPSE_END + }; + memcpy(Object::maxvalues,mv,sizeof(mv)); + + Object::updatefields[ OBJECT_FIELD_GUID ] = UpdateField( 0x0000 , UF_UINT64); + Object::updatefields[ OBJECT_FIELD_GUID_LOW ] = UpdateField( 0x0000 , UF_UINT32); + Object::updatefields[ OBJECT_FIELD_GUID_HIGH ] = UpdateField( 0x0001 , UF_UINT32); + Object::updatefields[ OBJECT_FIELD_TYPE ] = UpdateField( 0x0002 , UF_UINT32); + Object::updatefields[ OBJECT_FIELD_ENTRY ] = UpdateField( 0x0003 , UF_UINT32); + Object::updatefields[ OBJECT_FIELD_SCALE_X ] = UpdateField( 0x0004 , UF_FLOAT); + Object::updatefields[ OBJECT_FIELD_PADDING ] = UpdateField( 0x0005 , UF_UINT32); + + Object::updatefields[ ITEM_FIELD_OWNER ] = UpdateField( mv[TYPEID_OBJECT] + 0x0000 , UF_UINT64); + Object::updatefields[ ITEM_FIELD_CONTAINED ] = UpdateField( mv[TYPEID_OBJECT] + 0x0002 , UF_UINT64); + Object::updatefields[ ITEM_FIELD_CREATOR ] = UpdateField( mv[TYPEID_OBJECT] + 0x0004 , UF_UINT64); + Object::updatefields[ ITEM_FIELD_GIFTCREATOR ] = UpdateField( mv[TYPEID_OBJECT] + 0x0006 , UF_UINT64); + Object::updatefields[ ITEM_FIELD_STACK_COUNT ] = UpdateField( mv[TYPEID_OBJECT] + 0x0008 , UF_UINT32); + Object::updatefields[ ITEM_FIELD_DURATION ] = UpdateField( mv[TYPEID_OBJECT] + 0x0009 , UF_UINT32); + Object::updatefields[ ITEM_FIELD_SPELL_CHARGES ] = UpdateField( mv[TYPEID_OBJECT] + 0x000A , UF_UINT32); + Object::updatefields[ ITEM_FIELD_FLAGS ] = UpdateField( mv[TYPEID_OBJECT] + 0x000F , UF_UINT32); + Object::updatefields[ ITEM_FIELD_ENCHANTMENT_1_1 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0010 , UF_UINT32); + Object::updatefields[ ITEM_FIELD_ENCHANTMENT_1_3 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0012 , UF_UINT32); + Object::updatefields[ ITEM_FIELD_ENCHANTMENT_2_1 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0013 , UF_UINT32); + Object::updatefields[ ITEM_FIELD_ENCHANTMENT_2_3 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0015 , UF_UINT32); + Object::updatefields[ ITEM_FIELD_ENCHANTMENT_3_1 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0016 , UF_UINT32); + Object::updatefields[ ITEM_FIELD_ENCHANTMENT_3_3 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0018 , UF_UINT32); + Object::updatefields[ ITEM_FIELD_ENCHANTMENT_4_1 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0019 , UF_UINT32); + Object::updatefields[ ITEM_FIELD_ENCHANTMENT_4_3 ] = UpdateField( mv[TYPEID_OBJECT] + 0x001B , UF_UINT32); + Object::updatefields[ ITEM_FIELD_ENCHANTMENT_5_1 ] = UpdateField( mv[TYPEID_OBJECT] + 0x001C , UF_UINT32); + Object::updatefields[ ITEM_FIELD_ENCHANTMENT_5_3 ] = UpdateField( mv[TYPEID_OBJECT] + 0x001E , UF_UINT32); + Object::updatefields[ ITEM_FIELD_ENCHANTMENT_6_1 ] = UpdateField( mv[TYPEID_OBJECT] + 0x001F , UF_UINT32); + Object::updatefields[ ITEM_FIELD_ENCHANTMENT_6_3 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0021 , UF_UINT32); + Object::updatefields[ ITEM_FIELD_ENCHANTMENT_7_1 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0022 , UF_UINT32); + Object::updatefields[ ITEM_FIELD_ENCHANTMENT_7_3 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0024 , UF_UINT32); + Object::updatefields[ ITEM_FIELD_ENCHANTMENT_8_1 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0025 , UF_UINT32); + Object::updatefields[ ITEM_FIELD_ENCHANTMENT_8_3 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0027 , UF_UINT32); + Object::updatefields[ ITEM_FIELD_ENCHANTMENT_9_1 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0028 , UF_UINT32); + Object::updatefields[ ITEM_FIELD_ENCHANTMENT_9_3 ] = UpdateField( mv[TYPEID_OBJECT] + 0x002A , UF_UINT32); + Object::updatefields[ ITEM_FIELD_ENCHANTMENT_10_1 ] = UpdateField( mv[TYPEID_OBJECT] + 0x002B , UF_UINT32); + Object::updatefields[ ITEM_FIELD_ENCHANTMENT_10_3 ] = UpdateField( mv[TYPEID_OBJECT] + 0x002D , UF_UINT32); + Object::updatefields[ ITEM_FIELD_ENCHANTMENT_11_1 ] = UpdateField( mv[TYPEID_OBJECT] + 0x002E , UF_UINT32); + Object::updatefields[ ITEM_FIELD_ENCHANTMENT_11_3 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0030 , UF_UINT32); + Object::updatefields[ ITEM_FIELD_ENCHANTMENT_12_1 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0031 , UF_UINT32); + Object::updatefields[ ITEM_FIELD_ENCHANTMENT_12_3 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0033 , UF_UINT32); + Object::updatefields[ ITEM_FIELD_PROPERTY_SEED ] = UpdateField( mv[TYPEID_OBJECT] + 0x0034 , UF_UINT32); + Object::updatefields[ ITEM_FIELD_RANDOM_PROPERTIES_ID ] = UpdateField( mv[TYPEID_OBJECT] + 0x0035 , UF_UINT32); + Object::updatefields[ ITEM_FIELD_DURABILITY ] = UpdateField( mv[TYPEID_OBJECT] + 0x0036 , UF_UINT32); + Object::updatefields[ ITEM_FIELD_MAXDURABILITY ] = UpdateField( mv[TYPEID_OBJECT] + 0x0037 , UF_UINT32); + Object::updatefields[ ITEM_FIELD_CREATE_PLAYED_TIME ] = UpdateField( mv[TYPEID_OBJECT] + 0x0038 , UF_UINT32); + Object::updatefields[ ITEM_FIELD_PAD ] = UpdateField( mv[TYPEID_OBJECT] + 0x0039 , UF_UINT32); + + Object::updatefields[ CONTAINER_FIELD_NUM_SLOTS ] = UpdateField( mv[TYPEID_ITEM] + 0x0000 , UF_UINT32); + Object::updatefields[ CONTAINER_ALIGN_PAD ] = UpdateField( mv[TYPEID_ITEM] + 0x0001 , UF_UINT32); + Object::updatefields[ CONTAINER_FIELD_SLOT_1 ] = UpdateField( mv[TYPEID_ITEM] + 0x0002 , UF_UINT64); + + Object::updatefields[ UNIT_FIELD_CHARM ] = UpdateField( mv[TYPEID_OBJECT] + 0x0000 , UF_UINT64); + Object::updatefields[ UNIT_FIELD_SUMMON ] = UpdateField( mv[TYPEID_OBJECT] + 0x0002 , UF_UINT64); + Object::updatefields[ UNIT_FIELD_CRITTER ] = UpdateField( mv[TYPEID_OBJECT] + 0x0004 , UF_UINT64); + Object::updatefields[ UNIT_FIELD_CHARMEDBY ] = UpdateField( mv[TYPEID_OBJECT] + 0x0006 , UF_UINT64); + Object::updatefields[ UNIT_FIELD_SUMMONEDBY ] = UpdateField( mv[TYPEID_OBJECT] + 0x0008 , UF_UINT64); + Object::updatefields[ UNIT_FIELD_CREATEDBY ] = UpdateField( mv[TYPEID_OBJECT] + 0x000A , UF_UINT64); + Object::updatefields[ UNIT_FIELD_TARGET ] = UpdateField( mv[TYPEID_OBJECT] + 0x000C , UF_UINT64); + Object::updatefields[ UNIT_FIELD_CHANNEL_OBJECT ] = UpdateField( mv[TYPEID_OBJECT] + 0x000E , UF_UINT64); + Object::updatefields[ UNIT_CHANNEL_SPELL ] = UpdateField( mv[TYPEID_OBJECT] + 0x0010 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_BYTES_0 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0011 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_HEALTH ] = UpdateField( mv[TYPEID_OBJECT] + 0x0012 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_POWER1 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0013 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_POWER2 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0014 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_POWER3 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0015 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_POWER4 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0016 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_POWER5 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0017 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_POWER6 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0018 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_POWER7 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0019 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_MAXHEALTH ] = UpdateField( mv[TYPEID_OBJECT] + 0x001A , UF_UINT32); + Object::updatefields[ UNIT_FIELD_MAXPOWER1 ] = UpdateField( mv[TYPEID_OBJECT] + 0x001B , UF_UINT32); + Object::updatefields[ UNIT_FIELD_MAXPOWER2 ] = UpdateField( mv[TYPEID_OBJECT] + 0x001C , UF_UINT32); + Object::updatefields[ UNIT_FIELD_MAXPOWER3 ] = UpdateField( mv[TYPEID_OBJECT] + 0x001D , UF_UINT32); + Object::updatefields[ UNIT_FIELD_MAXPOWER4 ] = UpdateField( mv[TYPEID_OBJECT] + 0x001E , UF_UINT32); + Object::updatefields[ UNIT_FIELD_MAXPOWER5 ] = UpdateField( mv[TYPEID_OBJECT] + 0x001F , UF_UINT32); + Object::updatefields[ UNIT_FIELD_MAXPOWER6 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0020 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_MAXPOWER7 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0021 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER ] = UpdateField( mv[TYPEID_OBJECT] + 0x0022 , UF_FLOAT); + Object::updatefields[ UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER] = UpdateField( mv[TYPEID_OBJECT] + 0x0029 , UF_FLOAT); + Object::updatefields[ UNIT_FIELD_LEVEL ] = UpdateField( mv[TYPEID_OBJECT] + 0x0030 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_FACTIONTEMPLATE ] = UpdateField( mv[TYPEID_OBJECT] + 0x0031 , UF_UINT32); + Object::updatefields[ UNIT_VIRTUAL_ITEM_SLOT_ID ] = UpdateField( mv[TYPEID_OBJECT] + 0x0032 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_FLAGS ] = UpdateField( mv[TYPEID_OBJECT] + 0x0035 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_FLAGS_2 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0036 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_AURASTATE ] = UpdateField( mv[TYPEID_OBJECT] + 0x0037 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_BASEATTACKTIME ] = UpdateField( mv[TYPEID_OBJECT] + 0x0038 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_RANGEDATTACKTIME ] = UpdateField( mv[TYPEID_OBJECT] + 0x003A , UF_UINT32); + Object::updatefields[ UNIT_FIELD_BOUNDINGRADIUS ] = UpdateField( mv[TYPEID_OBJECT] + 0x003B , UF_FLOAT); + Object::updatefields[ UNIT_FIELD_COMBATREACH ] = UpdateField( mv[TYPEID_OBJECT] + 0x003C , UF_FLOAT); + Object::updatefields[ UNIT_FIELD_DISPLAYID ] = UpdateField( mv[TYPEID_OBJECT] + 0x003D , UF_UINT32); + Object::updatefields[ UNIT_FIELD_NATIVEDISPLAYID ] = UpdateField( mv[TYPEID_OBJECT] + 0x003E , UF_UINT32); + Object::updatefields[ UNIT_FIELD_MOUNTDISPLAYID ] = UpdateField( mv[TYPEID_OBJECT] + 0x003F , UF_UINT32); + Object::updatefields[ UNIT_FIELD_MINDAMAGE ] = UpdateField( mv[TYPEID_OBJECT] + 0x0040 , UF_FLOAT); + Object::updatefields[ UNIT_FIELD_MAXDAMAGE ] = UpdateField( mv[TYPEID_OBJECT] + 0x0041 , UF_FLOAT); + Object::updatefields[ UNIT_FIELD_MINOFFHANDDAMAGE ] = UpdateField( mv[TYPEID_OBJECT] + 0x0042 , UF_FLOAT); + Object::updatefields[ UNIT_FIELD_MAXOFFHANDDAMAGE ] = UpdateField( mv[TYPEID_OBJECT] + 0x0043 , UF_FLOAT); + Object::updatefields[ UNIT_FIELD_BYTES_1 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0044 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_PETNUMBER ] = UpdateField( mv[TYPEID_OBJECT] + 0x0045 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_PET_NAME_TIMESTAMP ] = UpdateField( mv[TYPEID_OBJECT] + 0x0046 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_PETEXPERIENCE ] = UpdateField( mv[TYPEID_OBJECT] + 0x0047 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_PETNEXTLEVELEXP ] = UpdateField( mv[TYPEID_OBJECT] + 0x0048 , UF_UINT32); + Object::updatefields[ UNIT_DYNAMIC_FLAGS ] = UpdateField( mv[TYPEID_OBJECT] + 0x0049 , UF_UINT32); + Object::updatefields[ UNIT_MOD_CAST_SPEED ] = UpdateField( mv[TYPEID_OBJECT] + 0x004A , UF_FLOAT); + Object::updatefields[ UNIT_CREATED_BY_SPELL ] = UpdateField( mv[TYPEID_OBJECT] + 0x004B , UF_UINT32); + Object::updatefields[ UNIT_NPC_FLAGS ] = UpdateField( mv[TYPEID_OBJECT] + 0x004C , UF_UINT32); + Object::updatefields[ UNIT_NPC_EMOTESTATE ] = UpdateField( mv[TYPEID_OBJECT] + 0x004D , UF_UINT32); + Object::updatefields[ UNIT_FIELD_STAT0 ] = UpdateField( mv[TYPEID_OBJECT] + 0x004E , UF_UINT32); + Object::updatefields[ UNIT_FIELD_STAT1 ] = UpdateField( mv[TYPEID_OBJECT] + 0x004F , UF_UINT32); + Object::updatefields[ UNIT_FIELD_STAT2 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0050 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_STAT3 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0051 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_STAT4 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0052 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_POSSTAT0 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0053 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_POSSTAT1 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0054 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_POSSTAT2 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0055 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_POSSTAT3 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0056 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_POSSTAT4 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0057 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_NEGSTAT0 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0058 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_NEGSTAT1 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0059 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_NEGSTAT2 ] = UpdateField( mv[TYPEID_OBJECT] + 0x005A , UF_UINT32); + Object::updatefields[ UNIT_FIELD_NEGSTAT3 ] = UpdateField( mv[TYPEID_OBJECT] + 0x005B , UF_UINT32); + Object::updatefields[ UNIT_FIELD_NEGSTAT4 ] = UpdateField( mv[TYPEID_OBJECT] + 0x005C , UF_UINT32); + Object::updatefields[ UNIT_FIELD_RESISTANCES ] = UpdateField( mv[TYPEID_OBJECT] + 0x005D , UF_UINT32); + Object::updatefields[ UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE ] = UpdateField( mv[TYPEID_OBJECT] + 0x0064 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE ] = UpdateField( mv[TYPEID_OBJECT] + 0x006B , UF_UINT32); + Object::updatefields[ UNIT_FIELD_BASE_MANA ] = UpdateField( mv[TYPEID_OBJECT] + 0x0072 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_BASE_HEALTH ] = UpdateField( mv[TYPEID_OBJECT] + 0x0073 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_BYTES_2 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0074 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_ATTACK_POWER ] = UpdateField( mv[TYPEID_OBJECT] + 0x0075 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_ATTACK_POWER_MODS ] = UpdateField( mv[TYPEID_OBJECT] + 0x0076 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_ATTACK_POWER_MULTIPLIER ] = UpdateField( mv[TYPEID_OBJECT] + 0x0077 , UF_FLOAT); + Object::updatefields[ UNIT_FIELD_RANGED_ATTACK_POWER ] = UpdateField( mv[TYPEID_OBJECT] + 0x0078 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_RANGED_ATTACK_POWER_MODS ] = UpdateField( mv[TYPEID_OBJECT] + 0x0079 , UF_UINT32); + Object::updatefields[ UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER] = UpdateField( mv[TYPEID_OBJECT] + 0x007A , UF_FLOAT); + Object::updatefields[ UNIT_FIELD_MINRANGEDDAMAGE ] = UpdateField( mv[TYPEID_OBJECT] + 0x007B , UF_FLOAT); + Object::updatefields[ UNIT_FIELD_MAXRANGEDDAMAGE ] = UpdateField( mv[TYPEID_OBJECT] + 0x007C , UF_FLOAT); + Object::updatefields[ UNIT_FIELD_POWER_COST_MODIFIER ] = UpdateField( mv[TYPEID_OBJECT] + 0x007D , UF_UINT32); + Object::updatefields[ UNIT_FIELD_POWER_COST_MULTIPLIER ] = UpdateField( mv[TYPEID_OBJECT] + 0x0084 , UF_FLOAT); + Object::updatefields[ UNIT_FIELD_MAXHEALTHMODIFIER ] = UpdateField( mv[TYPEID_OBJECT] + 0x008B , UF_FLOAT); + Object::updatefields[ UNIT_FIELD_HOVERHEIGHT ] = UpdateField( mv[TYPEID_OBJECT] + 0x008C , UF_FLOAT); + Object::updatefields[ UNIT_FIELD_PADDING ] = UpdateField( mv[TYPEID_OBJECT] + 0x008D , UF_UINT32); + + Object::updatefields[ PLAYER_DUEL_ARBITER ] = UpdateField( mv[TYPEID_UNIT] + 0x0000 , UF_UINT64); + Object::updatefields[ PLAYER_FLAGS ] = UpdateField( mv[TYPEID_UNIT] + 0x0002 , UF_UINT32); + Object::updatefields[ PLAYER_GUILDID ] = UpdateField( mv[TYPEID_UNIT] + 0x0003 , UF_UINT32); + Object::updatefields[ PLAYER_GUILDRANK ] = UpdateField( mv[TYPEID_UNIT] + 0x0004 , UF_UINT32); + Object::updatefields[ PLAYER_BYTES ] = UpdateField( mv[TYPEID_UNIT] + 0x0005 , UF_UINT32); + Object::updatefields[ PLAYER_BYTES_2 ] = UpdateField( mv[TYPEID_UNIT] + 0x0006 , UF_UINT32); + Object::updatefields[ PLAYER_BYTES_3 ] = UpdateField( mv[TYPEID_UNIT] + 0x0007 , UF_UINT32); + Object::updatefields[ PLAYER_DUEL_TEAM ] = UpdateField( mv[TYPEID_UNIT] + 0x0008 , UF_UINT32); + Object::updatefields[ PLAYER_GUILD_TIMESTAMP ] = UpdateField( mv[TYPEID_UNIT] + 0x0009 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_1_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x000A , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_1_2 ] = UpdateField( mv[TYPEID_UNIT] + 0x000B , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_1_3 ] = UpdateField( mv[TYPEID_UNIT] + 0x000C , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_1_4 ] = UpdateField( mv[TYPEID_UNIT] + 0x000E , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_2_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x000F , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_2_2 ] = UpdateField( mv[TYPEID_UNIT] + 0x0010 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_2_3 ] = UpdateField( mv[TYPEID_UNIT] + 0x0011 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_2_5 ] = UpdateField( mv[TYPEID_UNIT] + 0x0013 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_3_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x0014 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_3_2 ] = UpdateField( mv[TYPEID_UNIT] + 0x0015 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_3_3 ] = UpdateField( mv[TYPEID_UNIT] + 0x0016 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_3_5 ] = UpdateField( mv[TYPEID_UNIT] + 0x0018 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_4_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x0019 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_4_2 ] = UpdateField( mv[TYPEID_UNIT] + 0x001A , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_4_3 ] = UpdateField( mv[TYPEID_UNIT] + 0x001B , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_4_5 ] = UpdateField( mv[TYPEID_UNIT] + 0x001D , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_5_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x001E , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_5_2 ] = UpdateField( mv[TYPEID_UNIT] + 0x001F , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_5_3 ] = UpdateField( mv[TYPEID_UNIT] + 0x0020 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_5_5 ] = UpdateField( mv[TYPEID_UNIT] + 0x0022 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_6_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x0023 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_6_2 ] = UpdateField( mv[TYPEID_UNIT] + 0x0024 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_6_3 ] = UpdateField( mv[TYPEID_UNIT] + 0x0025 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_6_5 ] = UpdateField( mv[TYPEID_UNIT] + 0x0027 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_7_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x0028 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_7_2 ] = UpdateField( mv[TYPEID_UNIT] + 0x0029 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_7_3 ] = UpdateField( mv[TYPEID_UNIT] + 0x002A , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_7_5 ] = UpdateField( mv[TYPEID_UNIT] + 0x002C , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_8_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x002D , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_8_2 ] = UpdateField( mv[TYPEID_UNIT] + 0x002E , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_8_3 ] = UpdateField( mv[TYPEID_UNIT] + 0x002F , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_8_5 ] = UpdateField( mv[TYPEID_UNIT] + 0x0031 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_9_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x0032 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_9_2 ] = UpdateField( mv[TYPEID_UNIT] + 0x0033 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_9_3 ] = UpdateField( mv[TYPEID_UNIT] + 0x0034 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_9_5 ] = UpdateField( mv[TYPEID_UNIT] + 0x0036 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_10_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x0037 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_10_2 ] = UpdateField( mv[TYPEID_UNIT] + 0x0038 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_10_3 ] = UpdateField( mv[TYPEID_UNIT] + 0x0039 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_10_5 ] = UpdateField( mv[TYPEID_UNIT] + 0x003B , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_11_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x003C , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_11_2 ] = UpdateField( mv[TYPEID_UNIT] + 0x003D , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_11_3 ] = UpdateField( mv[TYPEID_UNIT] + 0x003E , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_11_5 ] = UpdateField( mv[TYPEID_UNIT] + 0x0040 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_12_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x0041 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_12_2 ] = UpdateField( mv[TYPEID_UNIT] + 0x0042 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_12_3 ] = UpdateField( mv[TYPEID_UNIT] + 0x0043 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_12_5 ] = UpdateField( mv[TYPEID_UNIT] + 0x0045 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_13_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x0046 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_13_2 ] = UpdateField( mv[TYPEID_UNIT] + 0x0047 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_13_3 ] = UpdateField( mv[TYPEID_UNIT] + 0x0048 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_13_5 ] = UpdateField( mv[TYPEID_UNIT] + 0x004A , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_14_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x004B , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_14_2 ] = UpdateField( mv[TYPEID_UNIT] + 0x004C , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_14_3 ] = UpdateField( mv[TYPEID_UNIT] + 0x004D , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_14_5 ] = UpdateField( mv[TYPEID_UNIT] + 0x004F , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_15_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x0050 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_15_2 ] = UpdateField( mv[TYPEID_UNIT] + 0x0051 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_15_3 ] = UpdateField( mv[TYPEID_UNIT] + 0x0052 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_15_5 ] = UpdateField( mv[TYPEID_UNIT] + 0x0054 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_16_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x0055 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_16_2 ] = UpdateField( mv[TYPEID_UNIT] + 0x0056 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_16_3 ] = UpdateField( mv[TYPEID_UNIT] + 0x0057 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_16_5 ] = UpdateField( mv[TYPEID_UNIT] + 0x0059 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_17_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x005A , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_17_2 ] = UpdateField( mv[TYPEID_UNIT] + 0x005B , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_17_3 ] = UpdateField( mv[TYPEID_UNIT] + 0x005C , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_17_5 ] = UpdateField( mv[TYPEID_UNIT] + 0x005E , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_18_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x005F , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_18_2 ] = UpdateField( mv[TYPEID_UNIT] + 0x0060 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_18_3 ] = UpdateField( mv[TYPEID_UNIT] + 0x0061 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_18_5 ] = UpdateField( mv[TYPEID_UNIT] + 0x0063 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_19_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x0064 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_19_2 ] = UpdateField( mv[TYPEID_UNIT] + 0x0065 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_19_3 ] = UpdateField( mv[TYPEID_UNIT] + 0x0066 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_19_5 ] = UpdateField( mv[TYPEID_UNIT] + 0x0068 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_20_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x0069 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_20_2 ] = UpdateField( mv[TYPEID_UNIT] + 0x006A , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_20_3 ] = UpdateField( mv[TYPEID_UNIT] + 0x006B , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_20_5 ] = UpdateField( mv[TYPEID_UNIT] + 0x006D , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_21_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x006E , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_21_2 ] = UpdateField( mv[TYPEID_UNIT] + 0x006F , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_21_3 ] = UpdateField( mv[TYPEID_UNIT] + 0x0070 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_21_5 ] = UpdateField( mv[TYPEID_UNIT] + 0x0072 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_22_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x0073 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_22_2 ] = UpdateField( mv[TYPEID_UNIT] + 0x0074 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_22_3 ] = UpdateField( mv[TYPEID_UNIT] + 0x0075 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_22_5 ] = UpdateField( mv[TYPEID_UNIT] + 0x0077 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_23_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x0078 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_23_2 ] = UpdateField( mv[TYPEID_UNIT] + 0x0079 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_23_3 ] = UpdateField( mv[TYPEID_UNIT] + 0x007A , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_23_5 ] = UpdateField( mv[TYPEID_UNIT] + 0x007C , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_24_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x007D , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_24_2 ] = UpdateField( mv[TYPEID_UNIT] + 0x007E , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_24_3 ] = UpdateField( mv[TYPEID_UNIT] + 0x007F , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_24_5 ] = UpdateField( mv[TYPEID_UNIT] + 0x0081 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_25_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x0082 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_25_2 ] = UpdateField( mv[TYPEID_UNIT] + 0x0083 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_25_3 ] = UpdateField( mv[TYPEID_UNIT] + 0x0084 , UF_UINT32); + Object::updatefields[ PLAYER_QUEST_LOG_25_5 ] = UpdateField( mv[TYPEID_UNIT] + 0x0086 , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_1_ENTRYID ] = UpdateField( mv[TYPEID_UNIT] + 0x0087 , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_1_ENCHANTMENT ] = UpdateField( mv[TYPEID_UNIT] + 0x0088 , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_2_ENTRYID ] = UpdateField( mv[TYPEID_UNIT] + 0x0089 , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_2_ENCHANTMENT ] = UpdateField( mv[TYPEID_UNIT] + 0x008A , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_3_ENTRYID ] = UpdateField( mv[TYPEID_UNIT] + 0x008B , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_3_ENCHANTMENT ] = UpdateField( mv[TYPEID_UNIT] + 0x008C , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_4_ENTRYID ] = UpdateField( mv[TYPEID_UNIT] + 0x008D , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_4_ENCHANTMENT ] = UpdateField( mv[TYPEID_UNIT] + 0x008E , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_5_ENTRYID ] = UpdateField( mv[TYPEID_UNIT] + 0x008F , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_5_ENCHANTMENT ] = UpdateField( mv[TYPEID_UNIT] + 0x0090 , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_6_ENTRYID ] = UpdateField( mv[TYPEID_UNIT] + 0x0091 , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_6_ENCHANTMENT ] = UpdateField( mv[TYPEID_UNIT] + 0x0092 , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_7_ENTRYID ] = UpdateField( mv[TYPEID_UNIT] + 0x0093 , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_7_ENCHANTMENT ] = UpdateField( mv[TYPEID_UNIT] + 0x0094 , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_8_ENTRYID ] = UpdateField( mv[TYPEID_UNIT] + 0x0095 , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_8_ENCHANTMENT ] = UpdateField( mv[TYPEID_UNIT] + 0x0096 , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_9_ENTRYID ] = UpdateField( mv[TYPEID_UNIT] + 0x0097 , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_9_ENCHANTMENT ] = UpdateField( mv[TYPEID_UNIT] + 0x0098 , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_10_ENTRYID ] = UpdateField( mv[TYPEID_UNIT] + 0x0099 , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_10_ENCHANTMENT ] = UpdateField( mv[TYPEID_UNIT] + 0x009A , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_11_ENTRYID ] = UpdateField( mv[TYPEID_UNIT] + 0x009B , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_11_ENCHANTMENT ] = UpdateField( mv[TYPEID_UNIT] + 0x009C , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_12_ENTRYID ] = UpdateField( mv[TYPEID_UNIT] + 0x009D , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_12_ENCHANTMENT ] = UpdateField( mv[TYPEID_UNIT] + 0x009E , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_13_ENTRYID ] = UpdateField( mv[TYPEID_UNIT] + 0x009F , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_13_ENCHANTMENT ] = UpdateField( mv[TYPEID_UNIT] + 0x00A0 , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_14_ENTRYID ] = UpdateField( mv[TYPEID_UNIT] + 0x00A1 , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_14_ENCHANTMENT ] = UpdateField( mv[TYPEID_UNIT] + 0x00A2 , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_15_ENTRYID ] = UpdateField( mv[TYPEID_UNIT] + 0x00A3 , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_15_ENCHANTMENT ] = UpdateField( mv[TYPEID_UNIT] + 0x00A4 , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_16_ENTRYID ] = UpdateField( mv[TYPEID_UNIT] + 0x00A5 , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_16_ENCHANTMENT ] = UpdateField( mv[TYPEID_UNIT] + 0x00A6 , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_17_ENTRYID ] = UpdateField( mv[TYPEID_UNIT] + 0x00A7 , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_17_ENCHANTMENT ] = UpdateField( mv[TYPEID_UNIT] + 0x00A8 , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_18_ENTRYID ] = UpdateField( mv[TYPEID_UNIT] + 0x00A9 , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_18_ENCHANTMENT ] = UpdateField( mv[TYPEID_UNIT] + 0x00AA , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_19_ENTRYID ] = UpdateField( mv[TYPEID_UNIT] + 0x00AB , UF_UINT32); + Object::updatefields[ PLAYER_VISIBLE_ITEM_19_ENCHANTMENT ] = UpdateField( mv[TYPEID_UNIT] + 0x00AC , UF_UINT32); + Object::updatefields[ PLAYER_CHOSEN_TITLE ] = UpdateField( mv[TYPEID_UNIT] + 0x00AD , UF_UINT32); + Object::updatefields[ PLAYER_FAKE_INEBRIATION ] = UpdateField( mv[TYPEID_UNIT] + 0x00AE , UF_UINT32); + Object::updatefields[ PLAYER_FIELD_PAD_0 ] = UpdateField( mv[TYPEID_UNIT] + 0x00AF , UF_UINT32); + Object::updatefields[ PLAYER_FIELD_INV_SLOT_HEAD ] = UpdateField( mv[TYPEID_UNIT] + 0x00B0 , UF_UINT64); + Object::updatefields[ PLAYER_FIELD_PACK_SLOT_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x00DE , UF_UINT64); + Object::updatefields[ PLAYER_FIELD_BANK_SLOT_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x00FE , UF_UINT64); + Object::updatefields[ PLAYER_FIELD_BANKBAG_SLOT_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x0136 , UF_UINT64); + Object::updatefields[ PLAYER_FIELD_VENDORBUYBACK_SLOT_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x0144 , UF_UINT64); + Object::updatefields[ PLAYER_FIELD_KEYRING_SLOT_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x015C , UF_UINT64); + Object::updatefields[ PLAYER_FIELD_CURRENCYTOKEN_SLOT_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x019C , UF_UINT64); + Object::updatefields[ PLAYER_FARSIGHT ] = UpdateField( mv[TYPEID_UNIT] + 0x01DC , UF_UINT64); + Object::updatefields[ PLAYER__FIELD_KNOWN_TITLES ] = UpdateField( mv[TYPEID_UNIT] + 0x01DE , UF_UINT64); + Object::updatefields[ PLAYER__FIELD_KNOWN_TITLES1 ] = UpdateField( mv[TYPEID_UNIT] + 0x01E0 , UF_UINT64); + Object::updatefields[ PLAYER__FIELD_KNOWN_TITLES2 ] = UpdateField( mv[TYPEID_UNIT] + 0x01E2 , UF_UINT64); + Object::updatefields[ PLAYER_FIELD_KNOWN_CURRENCIES ] = UpdateField( mv[TYPEID_UNIT] + 0x01E4 , UF_UINT64); + Object::updatefields[ PLAYER_XP ] = UpdateField( mv[TYPEID_UNIT] + 0x01E6 , UF_UINT32); + Object::updatefields[ PLAYER_NEXT_LEVEL_XP ] = UpdateField( mv[TYPEID_UNIT] + 0x01E7 , UF_UINT32); + Object::updatefields[ PLAYER_SKILL_INFO_1_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x01E8 , UF_UINT32); + Object::updatefields[ PLAYER_CHARACTER_POINTS1 ] = UpdateField( mv[TYPEID_UNIT] + 0x0368 , UF_UINT32); + Object::updatefields[ PLAYER_CHARACTER_POINTS2 ] = UpdateField( mv[TYPEID_UNIT] + 0x0369 , UF_UINT32); + Object::updatefields[ PLAYER_TRACK_CREATURES ] = UpdateField( mv[TYPEID_UNIT] + 0x036A , UF_UINT32); + Object::updatefields[ PLAYER_TRACK_RESOURCES ] = UpdateField( mv[TYPEID_UNIT] + 0x036B , UF_UINT32); + Object::updatefields[ PLAYER_BLOCK_PERCENTAGE ] = UpdateField( mv[TYPEID_UNIT] + 0x036C , UF_FLOAT); + Object::updatefields[ PLAYER_DODGE_PERCENTAGE ] = UpdateField( mv[TYPEID_UNIT] + 0x036D , UF_FLOAT); + Object::updatefields[ PLAYER_PARRY_PERCENTAGE ] = UpdateField( mv[TYPEID_UNIT] + 0x036E , UF_FLOAT); + Object::updatefields[ PLAYER_EXPERTISE ] = UpdateField( mv[TYPEID_UNIT] + 0x036F , UF_UINT32); + Object::updatefields[ PLAYER_OFFHAND_EXPERTISE ] = UpdateField( mv[TYPEID_UNIT] + 0x0370 , UF_UINT32); + Object::updatefields[ PLAYER_CRIT_PERCENTAGE ] = UpdateField( mv[TYPEID_UNIT] + 0x0371 , UF_FLOAT); + Object::updatefields[ PLAYER_RANGED_CRIT_PERCENTAGE ] = UpdateField( mv[TYPEID_UNIT] + 0x0372 , UF_FLOAT); + Object::updatefields[ PLAYER_OFFHAND_CRIT_PERCENTAGE ] = UpdateField( mv[TYPEID_UNIT] + 0x0373 , UF_FLOAT); + Object::updatefields[ PLAYER_SPELL_CRIT_PERCENTAGE1 ] = UpdateField( mv[TYPEID_UNIT] + 0x0374 , UF_FLOAT); + Object::updatefields[ PLAYER_SHIELD_BLOCK ] = UpdateField( mv[TYPEID_UNIT] + 0x037B , UF_UINT32); + Object::updatefields[ PLAYER_SHIELD_BLOCK_CRIT_PERCENTAGE ] = UpdateField( mv[TYPEID_UNIT] + 0x037C , UF_FLOAT); + Object::updatefields[ PLAYER_EXPLORED_ZONES_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x037D , UF_UINT32); + Object::updatefields[ PLAYER_REST_STATE_EXPERIENCE ] = UpdateField( mv[TYPEID_UNIT] + 0x03FD , UF_UINT32); + Object::updatefields[ PLAYER_FIELD_COINAGE ] = UpdateField( mv[TYPEID_UNIT] + 0x03FE , UF_UINT32); + Object::updatefields[ PLAYER_FIELD_MOD_DAMAGE_DONE_POS ] = UpdateField( mv[TYPEID_UNIT] + 0x03FF , UF_UINT32); + Object::updatefields[ PLAYER_FIELD_MOD_DAMAGE_DONE_NEG ] = UpdateField( mv[TYPEID_UNIT] + 0x0406 , UF_UINT32); + Object::updatefields[ PLAYER_FIELD_MOD_DAMAGE_DONE_PCT ] = UpdateField( mv[TYPEID_UNIT] + 0x040D , UF_UINT32); + Object::updatefields[ PLAYER_FIELD_MOD_HEALING_DONE_POS ] = UpdateField( mv[TYPEID_UNIT] + 0x0414 , UF_UINT32); + Object::updatefields[ PLAYER_FIELD_MOD_HEALING_PCT ] = UpdateField( mv[TYPEID_UNIT] + 0x0415 , UF_FLOAT); + Object::updatefields[ PLAYER_FIELD_MOD_HEALING_DONE_PCT ] = UpdateField( mv[TYPEID_UNIT] + 0x0416 , UF_FLOAT); + Object::updatefields[ PLAYER_FIELD_MOD_TARGET_RESISTANCE ] = UpdateField( mv[TYPEID_UNIT] + 0x0417 , UF_UINT32); + Object::updatefields[ PLAYER_FIELD_MOD_TARGET_PHYSICAL_RESISTANCE] = UpdateField(mv[TYPEID_UNIT] + 0x0418 , UF_UINT32); + Object::updatefields[ PLAYER_FIELD_BYTES ] = UpdateField( mv[TYPEID_UNIT] + 0x0419 , UF_UINT32); + Object::updatefields[ PLAYER_AMMO_ID ] = UpdateField( mv[TYPEID_UNIT] + 0x041A , UF_UINT32); + Object::updatefields[ PLAYER_SELF_RES_SPELL ] = UpdateField( mv[TYPEID_UNIT] + 0x041B , UF_UINT32); + Object::updatefields[ PLAYER_FIELD_PVP_MEDALS ] = UpdateField( mv[TYPEID_UNIT] + 0x041C , UF_UINT32); + Object::updatefields[ PLAYER_FIELD_BUYBACK_PRICE_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x041D , UF_UINT32); + Object::updatefields[ PLAYER_FIELD_BUYBACK_TIMESTAMP_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x0429 , UF_UINT32); + Object::updatefields[ PLAYER_FIELD_KILLS ] = UpdateField( mv[TYPEID_UNIT] + 0x0435 , UF_UINT32); + Object::updatefields[ PLAYER_FIELD_TODAY_CONTRIBUTION ] = UpdateField( mv[TYPEID_UNIT] + 0x0436 , UF_UINT32); + Object::updatefields[ PLAYER_FIELD_YESTERDAY_CONTRIBUTION ] = UpdateField( mv[TYPEID_UNIT] + 0x0437 , UF_UINT32); + Object::updatefields[ PLAYER_FIELD_LIFETIME_HONORBALE_KILLS ] = UpdateField( mv[TYPEID_UNIT] + 0x0438 , UF_UINT32); + Object::updatefields[ PLAYER_FIELD_BYTES2 ] = UpdateField( mv[TYPEID_UNIT] + 0x0439 , UF_UINT32); + Object::updatefields[ PLAYER_FIELD_WATCHED_FACTION_INDEX ] = UpdateField( mv[TYPEID_UNIT] + 0x043A , UF_UINT32); + Object::updatefields[ PLAYER_FIELD_COMBAT_RATING_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x043B , UF_UINT32); + Object::updatefields[ PLAYER_FIELD_ARENA_TEAM_INFO_1_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x0454 , UF_UINT32); + Object::updatefields[ PLAYER_FIELD_HONOR_CURRENCY ] = UpdateField( mv[TYPEID_UNIT] + 0x0469 , UF_UINT32); + Object::updatefields[ PLAYER_FIELD_ARENA_CURRENCY ] = UpdateField( mv[TYPEID_UNIT] + 0x046A , UF_UINT32); + Object::updatefields[ PLAYER_FIELD_MAX_LEVEL ] = UpdateField( mv[TYPEID_UNIT] + 0x046B , UF_UINT32); + Object::updatefields[ PLAYER_FIELD_DAILY_QUESTS_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x046C , UF_UINT32); + Object::updatefields[ PLAYER_RUNE_REGEN_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x0485 , UF_FLOAT); + Object::updatefields[ PLAYER_NO_REAGENT_COST_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x0489 , UF_UINT32); + Object::updatefields[ PLAYER_FIELD_GLYPH_SLOTS_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x048C , UF_UINT32); + Object::updatefields[ PLAYER_FIELD_GLYPHS_1 ] = UpdateField( mv[TYPEID_UNIT] + 0x0492 , UF_UINT32); + Object::updatefields[ PLAYER_GLYPHS_ENABLED ] = UpdateField( mv[TYPEID_UNIT] + 0x0498 , UF_UINT32); + Object::updatefields[ PLAYER_PET_SPELL_POWER ] = UpdateField( mv[TYPEID_UNIT] + 0x0499 , UF_UINT32); + Object::updatefields[ OBJECT_FIELD_CREATED_BY ] = UpdateField( mv[TYPEID_OBJECT] + 0x0000 , UF_UINT64); + Object::updatefields[ GAMEOBJECT_DISPLAYID ] = UpdateField( mv[TYPEID_OBJECT] + 0x0002 , UF_UINT32); + Object::updatefields[ GAMEOBJECT_FLAGS ] = UpdateField( mv[TYPEID_OBJECT] + 0x0003 , UF_UINT32); + Object::updatefields[ GAMEOBJECT_PARENTROTATION ] = UpdateField( mv[TYPEID_OBJECT] + 0x0004 , UF_FLOAT); + Object::updatefields[ GAMEOBJECT_DYNAMIC ] = UpdateField( mv[TYPEID_OBJECT] + 0x0008 , UF_UINT32); + Object::updatefields[ GAMEOBJECT_FACTION ] = UpdateField( mv[TYPEID_OBJECT] + 0x0009 , UF_UINT32); + Object::updatefields[ GAMEOBJECT_LEVEL ] = UpdateField( mv[TYPEID_OBJECT] + 0x000A , UF_UINT32); + Object::updatefields[ GAMEOBJECT_BYTES_1 ] = UpdateField( mv[TYPEID_OBJECT] + 0x000B , UF_UINT32); + Object::updatefields[ DYNAMICOBJECT_CASTER ] = UpdateField( mv[TYPEID_OBJECT] + 0x0000 , UF_UINT64); + Object::updatefields[ DYNAMICOBJECT_BYTES ] = UpdateField( mv[TYPEID_OBJECT] + 0x0002 , UF_UINT32); + Object::updatefields[ DYNAMICOBJECT_SPELLID ] = UpdateField( mv[TYPEID_OBJECT] + 0x0003 , UF_UINT32); + Object::updatefields[ DYNAMICOBJECT_RADIUS ] = UpdateField( mv[TYPEID_OBJECT] + 0x0004 , UF_FLOAT); + Object::updatefields[ DYNAMICOBJECT_CASTTIME ] = UpdateField( mv[TYPEID_OBJECT] + 0x0005 , UF_UINT32); + Object::updatefields[ CORPSE_FIELD_OWNER ] = UpdateField( mv[TYPEID_OBJECT] + 0x0000 , UF_UINT64); + Object::updatefields[ CORPSE_FIELD_PARTY ] = UpdateField( mv[TYPEID_OBJECT] + 0x0002 , UF_UINT64); + Object::updatefields[ CORPSE_FIELD_DISPLAY_ID ] = UpdateField( mv[TYPEID_OBJECT] + 0x0004 , UF_UINT32); + Object::updatefields[ CORPSE_FIELD_ITEM ] = UpdateField( mv[TYPEID_OBJECT] + 0x0005 , UF_UINT32); + Object::updatefields[ CORPSE_FIELD_BYTES_1 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0018 , UF_UINT32); + Object::updatefields[ CORPSE_FIELD_BYTES_2 ] = UpdateField( mv[TYPEID_OBJECT] + 0x0019 , UF_UINT32); + Object::updatefields[ CORPSE_FIELD_GUILD ] = UpdateField( mv[TYPEID_OBJECT] + 0x001A , UF_UINT32); + Object::updatefields[ CORPSE_FIELD_FLAGS ] = UpdateField( mv[TYPEID_OBJECT] + 0x001B , UF_UINT32); + Object::updatefields[ CORPSE_FIELD_DYNAMIC_FLAGS ] = UpdateField( mv[TYPEID_OBJECT] + 0x001C , UF_UINT32); + Object::updatefields[ CORPSE_FIELD_PAD ] = UpdateField( mv[TYPEID_OBJECT] + 0x001D , UF_UINT32); + + + break; + } + } +} diff --git a/src/Client/World/UpdateFields.h b/src/Client/World/UpdateFields.h index c321d39..b7fc6fe 100644 --- a/src/Client/World/UpdateFields.h +++ b/src/Client/World/UpdateFields.h @@ -1,439 +1,531 @@ -/* - * Copyright (C) 2005-2010 MaNGOS - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ +#ifndef _UPDATEFIELDS_H +#define _UPDATEFIELDS_H -#ifndef _UPDATEFIELDS_AUTO_H -#define _UPDATEFIELDS_AUTO_H - -// Auto generated for version 3, 3, 5, 12340 - -enum EObjectFields +enum UpdateFieldTypes { - 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, + UF_UNDEFINED = 0, + UF_UINT32, + UF_UINT64, + UF_FLOAT }; -enum EItemFields +enum UpdateFieldLimits { - 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, ITEM_OWNER - ITEM_FIELD_DURATION = OBJECT_END + 0x0009, // Size: 1, Type: INT, Flags: OWNER, ITEM_OWNER - ITEM_FIELD_SPELL_CHARGES = OBJECT_END + 0x000A, // Size: 5, Type: INT, Flags: OWNER, ITEM_OWNER - ITEM_FIELD_FLAGS = OBJECT_END + 0x000F, // Size: 1, Type: INT, Flags: PUBLIC - ITEM_FIELD_ENCHANTMENT_1_1 = OBJECT_END + 0x0010, // Size: 2, Type: INT, Flags: PUBLIC - ITEM_FIELD_ENCHANTMENT_1_3 = OBJECT_END + 0x0012, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC - ITEM_FIELD_ENCHANTMENT_2_1 = OBJECT_END + 0x0013, // Size: 2, Type: INT, Flags: PUBLIC - ITEM_FIELD_ENCHANTMENT_2_3 = OBJECT_END + 0x0015, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC - ITEM_FIELD_ENCHANTMENT_3_1 = OBJECT_END + 0x0016, // Size: 2, Type: INT, Flags: PUBLIC - ITEM_FIELD_ENCHANTMENT_3_3 = OBJECT_END + 0x0018, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC - ITEM_FIELD_ENCHANTMENT_4_1 = OBJECT_END + 0x0019, // Size: 2, Type: INT, Flags: PUBLIC - ITEM_FIELD_ENCHANTMENT_4_3 = OBJECT_END + 0x001B, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC - ITEM_FIELD_ENCHANTMENT_5_1 = OBJECT_END + 0x001C, // Size: 2, Type: INT, Flags: PUBLIC - ITEM_FIELD_ENCHANTMENT_5_3 = OBJECT_END + 0x001E, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC - ITEM_FIELD_ENCHANTMENT_6_1 = OBJECT_END + 0x001F, // Size: 2, Type: INT, Flags: PUBLIC - ITEM_FIELD_ENCHANTMENT_6_3 = OBJECT_END + 0x0021, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC - ITEM_FIELD_ENCHANTMENT_7_1 = OBJECT_END + 0x0022, // Size: 2, Type: INT, Flags: PUBLIC - ITEM_FIELD_ENCHANTMENT_7_3 = OBJECT_END + 0x0024, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC - ITEM_FIELD_ENCHANTMENT_8_1 = OBJECT_END + 0x0025, // Size: 2, Type: INT, Flags: PUBLIC - ITEM_FIELD_ENCHANTMENT_8_3 = OBJECT_END + 0x0027, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC - ITEM_FIELD_ENCHANTMENT_9_1 = OBJECT_END + 0x0028, // Size: 2, Type: INT, Flags: PUBLIC - ITEM_FIELD_ENCHANTMENT_9_3 = OBJECT_END + 0x002A, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC - ITEM_FIELD_ENCHANTMENT_10_1 = OBJECT_END + 0x002B, // Size: 2, Type: INT, Flags: PUBLIC - ITEM_FIELD_ENCHANTMENT_10_3 = OBJECT_END + 0x002D, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC - ITEM_FIELD_ENCHANTMENT_11_1 = OBJECT_END + 0x002E, // Size: 2, Type: INT, Flags: PUBLIC - ITEM_FIELD_ENCHANTMENT_11_3 = OBJECT_END + 0x0030, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC - ITEM_FIELD_ENCHANTMENT_12_1 = OBJECT_END + 0x0031, // Size: 2, Type: INT, Flags: PUBLIC - ITEM_FIELD_ENCHANTMENT_12_3 = OBJECT_END + 0x0033, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC - ITEM_FIELD_PROPERTY_SEED = OBJECT_END + 0x0034, // Size: 1, Type: INT, Flags: PUBLIC - ITEM_FIELD_RANDOM_PROPERTIES_ID = OBJECT_END + 0x0035, // Size: 1, Type: INT, Flags: PUBLIC - ITEM_FIELD_DURABILITY = OBJECT_END + 0x0036, // Size: 1, Type: INT, Flags: OWNER, ITEM_OWNER - ITEM_FIELD_MAXDURABILITY = OBJECT_END + 0x0037, // Size: 1, Type: INT, Flags: OWNER, ITEM_OWNER - ITEM_FIELD_CREATE_PLAYED_TIME = OBJECT_END + 0x0038, // Size: 1, Type: INT, Flags: PUBLIC - ITEM_FIELD_PAD = OBJECT_END + 0x0039, // Size: 1, Type: INT, Flags: NONE + OBJECT_END = 0x0006, ITEM_END = OBJECT_END + 0x003A, - ITEM_END_6005 = OBJECT_END + 0x2A, -}; - -enum EContainerFields -{ - 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, - CONTAINER_END_6005 = ITEM_END + 0x003A, -}; - -enum EUnitFields -{ - 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_CRITTER = OBJECT_END + 0x0004, // Size: 2, Type: LONG, Flags: PRIVATE - UNIT_FIELD_CHARMEDBY = OBJECT_END + 0x0006, // Size: 2, Type: LONG, Flags: PUBLIC - UNIT_FIELD_SUMMONEDBY = OBJECT_END + 0x0008, // Size: 2, Type: LONG, Flags: PUBLIC - UNIT_FIELD_CREATEDBY = OBJECT_END + 0x000A, // Size: 2, Type: LONG, Flags: PUBLIC - UNIT_FIELD_TARGET = OBJECT_END + 0x000C, // Size: 2, Type: LONG, Flags: PUBLIC - UNIT_FIELD_CHANNEL_OBJECT = OBJECT_END + 0x000E, // Size: 2, Type: LONG, Flags: PUBLIC - UNIT_CHANNEL_SPELL = OBJECT_END + 0x0010, // Size: 1, Type: INT, Flags: PUBLIC - UNIT_FIELD_BYTES_0 = OBJECT_END + 0x0011, // Size: 1, Type: BYTES, Flags: PUBLIC - UNIT_FIELD_HEALTH = OBJECT_END + 0x0012, // Size: 1, Type: INT, Flags: PUBLIC - UNIT_FIELD_POWER1 = OBJECT_END + 0x0013, // Size: 1, Type: INT, Flags: PUBLIC - UNIT_FIELD_POWER2 = OBJECT_END + 0x0014, // Size: 1, Type: INT, Flags: PUBLIC - UNIT_FIELD_POWER3 = OBJECT_END + 0x0015, // Size: 1, Type: INT, Flags: PUBLIC - UNIT_FIELD_POWER4 = OBJECT_END + 0x0016, // Size: 1, Type: INT, Flags: PUBLIC - UNIT_FIELD_POWER5 = OBJECT_END + 0x0017, // Size: 1, Type: INT, Flags: PUBLIC - UNIT_FIELD_POWER6 = OBJECT_END + 0x0018, // Size: 1, Type: INT, Flags: PUBLIC - UNIT_FIELD_POWER7 = OBJECT_END + 0x0019, // Size: 1, Type: INT, Flags: PUBLIC - UNIT_FIELD_MAXHEALTH = OBJECT_END + 0x001A, // Size: 1, Type: INT, Flags: PUBLIC - UNIT_FIELD_MAXPOWER1 = OBJECT_END + 0x001B, // Size: 1, Type: INT, Flags: PUBLIC - UNIT_FIELD_MAXPOWER2 = OBJECT_END + 0x001C, // Size: 1, Type: INT, Flags: PUBLIC - UNIT_FIELD_MAXPOWER3 = OBJECT_END + 0x001D, // Size: 1, Type: INT, Flags: PUBLIC - UNIT_FIELD_MAXPOWER4 = OBJECT_END + 0x001E, // Size: 1, Type: INT, Flags: PUBLIC - UNIT_FIELD_MAXPOWER5 = OBJECT_END + 0x001F, // Size: 1, Type: INT, Flags: PUBLIC - UNIT_FIELD_MAXPOWER6 = OBJECT_END + 0x0020, // Size: 1, Type: INT, Flags: PUBLIC - UNIT_FIELD_MAXPOWER7 = OBJECT_END + 0x0021, // Size: 1, Type: INT, Flags: PUBLIC - UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER = OBJECT_END + 0x0022, // Size: 7, Type: FLOAT, Flags: PRIVATE, OWNER - UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER = OBJECT_END + 0x0029, // Size: 7, Type: FLOAT, Flags: PRIVATE, OWNER - UNIT_FIELD_LEVEL = OBJECT_END + 0x0030, // Size: 1, Type: INT, Flags: PUBLIC - UNIT_FIELD_FACTIONTEMPLATE = OBJECT_END + 0x0031, // Size: 1, Type: INT, Flags: PUBLIC - UNIT_VIRTUAL_ITEM_SLOT_ID = OBJECT_END + 0x0032, // Size: 3, Type: INT, Flags: PUBLIC - UNIT_FIELD_FLAGS = OBJECT_END + 0x0035, // Size: 1, Type: INT, Flags: PUBLIC - UNIT_FIELD_FLAGS_2 = OBJECT_END + 0x0036, // Size: 1, Type: INT, Flags: PUBLIC - UNIT_FIELD_AURASTATE = OBJECT_END + 0x0037, // Size: 1, Type: INT, Flags: PUBLIC - UNIT_FIELD_BASEATTACKTIME = OBJECT_END + 0x0038, // Size: 2, Type: INT, Flags: PUBLIC - UNIT_FIELD_RANGEDATTACKTIME = OBJECT_END + 0x003A, // Size: 1, Type: INT, Flags: PRIVATE - UNIT_FIELD_BOUNDINGRADIUS = OBJECT_END + 0x003B, // Size: 1, Type: FLOAT, Flags: PUBLIC - UNIT_FIELD_COMBATREACH = OBJECT_END + 0x003C, // Size: 1, Type: FLOAT, Flags: PUBLIC - UNIT_FIELD_DISPLAYID = OBJECT_END + 0x003D, // Size: 1, Type: INT, Flags: PUBLIC - UNIT_FIELD_NATIVEDISPLAYID = OBJECT_END + 0x003E, // Size: 1, Type: INT, Flags: PUBLIC - UNIT_FIELD_MOUNTDISPLAYID = OBJECT_END + 0x003F, // Size: 1, Type: INT, Flags: PUBLIC - UNIT_FIELD_MINDAMAGE = OBJECT_END + 0x0040, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER, PARTY_LEADER - UNIT_FIELD_MAXDAMAGE = OBJECT_END + 0x0041, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER, PARTY_LEADER - UNIT_FIELD_MINOFFHANDDAMAGE = OBJECT_END + 0x0042, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER, PARTY_LEADER - UNIT_FIELD_MAXOFFHANDDAMAGE = OBJECT_END + 0x0043, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER, PARTY_LEADER - UNIT_FIELD_BYTES_1 = OBJECT_END + 0x0044, // Size: 1, Type: BYTES, Flags: PUBLIC - UNIT_FIELD_PETNUMBER = OBJECT_END + 0x0045, // Size: 1, Type: INT, Flags: PUBLIC - UNIT_FIELD_PET_NAME_TIMESTAMP = OBJECT_END + 0x0046, // Size: 1, Type: INT, Flags: PUBLIC - UNIT_FIELD_PETEXPERIENCE = OBJECT_END + 0x0047, // Size: 1, Type: INT, Flags: OWNER - UNIT_FIELD_PETNEXTLEVELEXP = OBJECT_END + 0x0048, // Size: 1, Type: INT, Flags: OWNER - UNIT_DYNAMIC_FLAGS = OBJECT_END + 0x0049, // Size: 1, Type: INT, Flags: DYNAMIC - UNIT_MOD_CAST_SPEED = OBJECT_END + 0x004A, // Size: 1, Type: FLOAT, Flags: PUBLIC - UNIT_CREATED_BY_SPELL = OBJECT_END + 0x004B, // Size: 1, Type: INT, Flags: PUBLIC - UNIT_NPC_FLAGS = OBJECT_END + 0x004C, // Size: 1, Type: INT, Flags: DYNAMIC - UNIT_NPC_EMOTESTATE = OBJECT_END + 0x004D, // Size: 1, Type: INT, Flags: PUBLIC - UNIT_FIELD_STAT0 = OBJECT_END + 0x004E, // Size: 1, Type: INT, Flags: PRIVATE, OWNER - UNIT_FIELD_STAT1 = OBJECT_END + 0x004F, // Size: 1, Type: INT, Flags: PRIVATE, OWNER - UNIT_FIELD_STAT2 = OBJECT_END + 0x0050, // Size: 1, Type: INT, Flags: PRIVATE, OWNER - UNIT_FIELD_STAT3 = OBJECT_END + 0x0051, // Size: 1, Type: INT, Flags: PRIVATE, OWNER - UNIT_FIELD_STAT4 = OBJECT_END + 0x0052, // Size: 1, Type: INT, Flags: PRIVATE, OWNER - UNIT_FIELD_POSSTAT0 = OBJECT_END + 0x0053, // Size: 1, Type: INT, Flags: PRIVATE, OWNER - UNIT_FIELD_POSSTAT1 = OBJECT_END + 0x0054, // Size: 1, Type: INT, Flags: PRIVATE, OWNER - UNIT_FIELD_POSSTAT2 = OBJECT_END + 0x0055, // Size: 1, Type: INT, Flags: PRIVATE, OWNER - UNIT_FIELD_POSSTAT3 = OBJECT_END + 0x0056, // Size: 1, Type: INT, Flags: PRIVATE, OWNER - UNIT_FIELD_POSSTAT4 = OBJECT_END + 0x0057, // Size: 1, Type: INT, Flags: PRIVATE, OWNER - UNIT_FIELD_NEGSTAT0 = OBJECT_END + 0x0058, // Size: 1, Type: INT, Flags: PRIVATE, OWNER - UNIT_FIELD_NEGSTAT1 = OBJECT_END + 0x0059, // Size: 1, Type: INT, Flags: PRIVATE, OWNER - UNIT_FIELD_NEGSTAT2 = OBJECT_END + 0x005A, // Size: 1, Type: INT, Flags: PRIVATE, OWNER - UNIT_FIELD_NEGSTAT3 = OBJECT_END + 0x005B, // Size: 1, Type: INT, Flags: PRIVATE, OWNER - UNIT_FIELD_NEGSTAT4 = OBJECT_END + 0x005C, // Size: 1, Type: INT, Flags: PRIVATE, OWNER - UNIT_FIELD_RESISTANCES = OBJECT_END + 0x005D, // Size: 7, Type: INT, Flags: PRIVATE, OWNER, PARTY_LEADER - UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE = OBJECT_END + 0x0064, // Size: 7, Type: INT, Flags: PRIVATE, OWNER - UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE = OBJECT_END + 0x006B, // Size: 7, Type: INT, Flags: PRIVATE, OWNER - UNIT_FIELD_BASE_MANA = OBJECT_END + 0x0072, // Size: 1, Type: INT, Flags: PUBLIC - UNIT_FIELD_BASE_HEALTH = OBJECT_END + 0x0073, // Size: 1, Type: INT, Flags: PRIVATE, OWNER - UNIT_FIELD_BYTES_2 = OBJECT_END + 0x0074, // Size: 1, Type: BYTES, Flags: PUBLIC - UNIT_FIELD_ATTACK_POWER = OBJECT_END + 0x0075, // Size: 1, Type: INT, Flags: PRIVATE, OWNER - UNIT_FIELD_ATTACK_POWER_MODS = OBJECT_END + 0x0076, // Size: 1, Type: TWO_SHORT, Flags: PRIVATE, OWNER - UNIT_FIELD_ATTACK_POWER_MULTIPLIER = OBJECT_END + 0x0077, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER - UNIT_FIELD_RANGED_ATTACK_POWER = OBJECT_END + 0x0078, // Size: 1, Type: INT, Flags: PRIVATE, OWNER - UNIT_FIELD_RANGED_ATTACK_POWER_MODS = OBJECT_END + 0x0079, // Size: 1, Type: TWO_SHORT, Flags: PRIVATE, OWNER - UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER = OBJECT_END + 0x007A, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER - UNIT_FIELD_MINRANGEDDAMAGE = OBJECT_END + 0x007B, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER - UNIT_FIELD_MAXRANGEDDAMAGE = OBJECT_END + 0x007C, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER - UNIT_FIELD_POWER_COST_MODIFIER = OBJECT_END + 0x007D, // Size: 7, Type: INT, Flags: PRIVATE, OWNER - UNIT_FIELD_POWER_COST_MULTIPLIER = OBJECT_END + 0x0084, // Size: 7, Type: FLOAT, Flags: PRIVATE, OWNER - UNIT_FIELD_MAXHEALTHMODIFIER = OBJECT_END + 0x008B, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER - UNIT_FIELD_HOVERHEIGHT = OBJECT_END + 0x008C, // Size: 1, Type: FLOAT, Flags: PUBLIC - UNIT_FIELD_PADDING = OBJECT_END + 0x008D, // Size: 1, Type: INT, Flags: NONE UNIT_END = OBJECT_END + 0x008E, - - UNIT_END_6005 = OBJECT_END + 0x00B6, - - 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: PARTY_MEMBER - PLAYER_QUEST_LOG_1_2 = UNIT_END + 0x000B, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_1_3 = UNIT_END + 0x000C, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE - PLAYER_QUEST_LOG_1_4 = UNIT_END + 0x000E, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_2_1 = UNIT_END + 0x000F, // Size: 1, Type: INT, Flags: PARTY_MEMBER - PLAYER_QUEST_LOG_2_2 = UNIT_END + 0x0010, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_2_3 = UNIT_END + 0x0011, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE - PLAYER_QUEST_LOG_2_5 = UNIT_END + 0x0013, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_3_1 = UNIT_END + 0x0014, // Size: 1, Type: INT, Flags: PARTY_MEMBER - PLAYER_QUEST_LOG_3_2 = UNIT_END + 0x0015, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_3_3 = UNIT_END + 0x0016, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE - PLAYER_QUEST_LOG_3_5 = UNIT_END + 0x0018, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_4_1 = UNIT_END + 0x0019, // Size: 1, Type: INT, Flags: PARTY_MEMBER - PLAYER_QUEST_LOG_4_2 = UNIT_END + 0x001A, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_4_3 = UNIT_END + 0x001B, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE - PLAYER_QUEST_LOG_4_5 = UNIT_END + 0x001D, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_5_1 = UNIT_END + 0x001E, // Size: 1, Type: INT, Flags: PARTY_MEMBER - PLAYER_QUEST_LOG_5_2 = UNIT_END + 0x001F, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_5_3 = UNIT_END + 0x0020, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE - PLAYER_QUEST_LOG_5_5 = UNIT_END + 0x0022, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_6_1 = UNIT_END + 0x0023, // Size: 1, Type: INT, Flags: PARTY_MEMBER - PLAYER_QUEST_LOG_6_2 = UNIT_END + 0x0024, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_6_3 = UNIT_END + 0x0025, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE - PLAYER_QUEST_LOG_6_5 = UNIT_END + 0x0027, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_7_1 = UNIT_END + 0x0028, // Size: 1, Type: INT, Flags: PARTY_MEMBER - PLAYER_QUEST_LOG_7_2 = UNIT_END + 0x0029, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_7_3 = UNIT_END + 0x002A, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE - PLAYER_QUEST_LOG_7_5 = UNIT_END + 0x002C, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_8_1 = UNIT_END + 0x002D, // Size: 1, Type: INT, Flags: PARTY_MEMBER - PLAYER_QUEST_LOG_8_2 = UNIT_END + 0x002E, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_8_3 = UNIT_END + 0x002F, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE - PLAYER_QUEST_LOG_8_5 = UNIT_END + 0x0031, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_9_1 = UNIT_END + 0x0032, // Size: 1, Type: INT, Flags: PARTY_MEMBER - PLAYER_QUEST_LOG_9_2 = UNIT_END + 0x0033, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_9_3 = UNIT_END + 0x0034, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE - PLAYER_QUEST_LOG_9_5 = UNIT_END + 0x0036, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_10_1 = UNIT_END + 0x0037, // Size: 1, Type: INT, Flags: PARTY_MEMBER - PLAYER_QUEST_LOG_10_2 = UNIT_END + 0x0038, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_10_3 = UNIT_END + 0x0039, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE - PLAYER_QUEST_LOG_10_5 = UNIT_END + 0x003B, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_11_1 = UNIT_END + 0x003C, // Size: 1, Type: INT, Flags: PARTY_MEMBER - PLAYER_QUEST_LOG_11_2 = UNIT_END + 0x003D, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_11_3 = UNIT_END + 0x003E, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE - PLAYER_QUEST_LOG_11_5 = UNIT_END + 0x0040, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_12_1 = UNIT_END + 0x0041, // Size: 1, Type: INT, Flags: PARTY_MEMBER - PLAYER_QUEST_LOG_12_2 = UNIT_END + 0x0042, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_12_3 = UNIT_END + 0x0043, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE - PLAYER_QUEST_LOG_12_5 = UNIT_END + 0x0045, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_13_1 = UNIT_END + 0x0046, // Size: 1, Type: INT, Flags: PARTY_MEMBER - PLAYER_QUEST_LOG_13_2 = UNIT_END + 0x0047, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_13_3 = UNIT_END + 0x0048, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE - PLAYER_QUEST_LOG_13_5 = UNIT_END + 0x004A, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_14_1 = UNIT_END + 0x004B, // Size: 1, Type: INT, Flags: PARTY_MEMBER - PLAYER_QUEST_LOG_14_2 = UNIT_END + 0x004C, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_14_3 = UNIT_END + 0x004D, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE - PLAYER_QUEST_LOG_14_5 = UNIT_END + 0x004F, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_15_1 = UNIT_END + 0x0050, // Size: 1, Type: INT, Flags: PARTY_MEMBER - PLAYER_QUEST_LOG_15_2 = UNIT_END + 0x0051, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_15_3 = UNIT_END + 0x0052, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE - PLAYER_QUEST_LOG_15_5 = UNIT_END + 0x0054, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_16_1 = UNIT_END + 0x0055, // Size: 1, Type: INT, Flags: PARTY_MEMBER - PLAYER_QUEST_LOG_16_2 = UNIT_END + 0x0056, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_16_3 = UNIT_END + 0x0057, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE - PLAYER_QUEST_LOG_16_5 = UNIT_END + 0x0059, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_17_1 = UNIT_END + 0x005A, // Size: 1, Type: INT, Flags: PARTY_MEMBER - PLAYER_QUEST_LOG_17_2 = UNIT_END + 0x005B, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_17_3 = UNIT_END + 0x005C, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE - PLAYER_QUEST_LOG_17_5 = UNIT_END + 0x005E, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_18_1 = UNIT_END + 0x005F, // Size: 1, Type: INT, Flags: PARTY_MEMBER - PLAYER_QUEST_LOG_18_2 = UNIT_END + 0x0060, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_18_3 = UNIT_END + 0x0061, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE - PLAYER_QUEST_LOG_18_5 = UNIT_END + 0x0063, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_19_1 = UNIT_END + 0x0064, // Size: 1, Type: INT, Flags: PARTY_MEMBER - PLAYER_QUEST_LOG_19_2 = UNIT_END + 0x0065, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_19_3 = UNIT_END + 0x0066, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE - PLAYER_QUEST_LOG_19_5 = UNIT_END + 0x0068, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_20_1 = UNIT_END + 0x0069, // Size: 1, Type: INT, Flags: PARTY_MEMBER - PLAYER_QUEST_LOG_20_2 = UNIT_END + 0x006A, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_20_3 = UNIT_END + 0x006B, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE - PLAYER_QUEST_LOG_20_5 = UNIT_END + 0x006D, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_21_1 = UNIT_END + 0x006E, // Size: 1, Type: INT, Flags: PARTY_MEMBER - PLAYER_QUEST_LOG_21_2 = UNIT_END + 0x006F, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_21_3 = UNIT_END + 0x0070, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE - PLAYER_QUEST_LOG_21_5 = UNIT_END + 0x0072, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_22_1 = UNIT_END + 0x0073, // Size: 1, Type: INT, Flags: PARTY_MEMBER - PLAYER_QUEST_LOG_22_2 = UNIT_END + 0x0074, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_22_3 = UNIT_END + 0x0075, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE - PLAYER_QUEST_LOG_22_5 = UNIT_END + 0x0077, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_23_1 = UNIT_END + 0x0078, // Size: 1, Type: INT, Flags: PARTY_MEMBER - PLAYER_QUEST_LOG_23_2 = UNIT_END + 0x0079, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_23_3 = UNIT_END + 0x007A, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE - PLAYER_QUEST_LOG_23_5 = UNIT_END + 0x007C, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_24_1 = UNIT_END + 0x007D, // Size: 1, Type: INT, Flags: PARTY_MEMBER - PLAYER_QUEST_LOG_24_2 = UNIT_END + 0x007E, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_24_3 = UNIT_END + 0x007F, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE - PLAYER_QUEST_LOG_24_5 = UNIT_END + 0x0081, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_25_1 = UNIT_END + 0x0082, // Size: 1, Type: INT, Flags: PARTY_MEMBER - PLAYER_QUEST_LOG_25_2 = UNIT_END + 0x0083, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_QUEST_LOG_25_3 = UNIT_END + 0x0084, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE - PLAYER_QUEST_LOG_25_5 = UNIT_END + 0x0086, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_VISIBLE_ITEM_1_ENTRYID = UNIT_END + 0x0087, // Size: 1, Type: INT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_1_ENCHANTMENT = UNIT_END + 0x0088, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_2_ENTRYID = UNIT_END + 0x0089, // Size: 1, Type: INT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_2_ENCHANTMENT = UNIT_END + 0x008A, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_3_ENTRYID = UNIT_END + 0x008B, // Size: 1, Type: INT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_3_ENCHANTMENT = UNIT_END + 0x008C, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_4_ENTRYID = UNIT_END + 0x008D, // Size: 1, Type: INT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_4_ENCHANTMENT = UNIT_END + 0x008E, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_5_ENTRYID = UNIT_END + 0x008F, // Size: 1, Type: INT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_5_ENCHANTMENT = UNIT_END + 0x0090, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_6_ENTRYID = UNIT_END + 0x0091, // Size: 1, Type: INT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_6_ENCHANTMENT = UNIT_END + 0x0092, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_7_ENTRYID = UNIT_END + 0x0093, // Size: 1, Type: INT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_7_ENCHANTMENT = UNIT_END + 0x0094, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_8_ENTRYID = UNIT_END + 0x0095, // Size: 1, Type: INT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_8_ENCHANTMENT = UNIT_END + 0x0096, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_9_ENTRYID = UNIT_END + 0x0097, // Size: 1, Type: INT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_9_ENCHANTMENT = UNIT_END + 0x0098, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_10_ENTRYID = UNIT_END + 0x0099, // Size: 1, Type: INT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_10_ENCHANTMENT = UNIT_END + 0x009A, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_11_ENTRYID = UNIT_END + 0x009B, // Size: 1, Type: INT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_11_ENCHANTMENT = UNIT_END + 0x009C, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_12_ENTRYID = UNIT_END + 0x009D, // Size: 1, Type: INT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_12_ENCHANTMENT = UNIT_END + 0x009E, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_13_ENTRYID = UNIT_END + 0x009F, // Size: 1, Type: INT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_13_ENCHANTMENT = UNIT_END + 0x00A0, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_14_ENTRYID = UNIT_END + 0x00A1, // Size: 1, Type: INT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_14_ENCHANTMENT = UNIT_END + 0x00A2, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_15_ENTRYID = UNIT_END + 0x00A3, // Size: 1, Type: INT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_15_ENCHANTMENT = UNIT_END + 0x00A4, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_16_ENTRYID = UNIT_END + 0x00A5, // Size: 1, Type: INT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_16_ENCHANTMENT = UNIT_END + 0x00A6, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_17_ENTRYID = UNIT_END + 0x00A7, // Size: 1, Type: INT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_17_ENCHANTMENT = UNIT_END + 0x00A8, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_18_ENTRYID = UNIT_END + 0x00A9, // Size: 1, Type: INT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_18_ENCHANTMENT = UNIT_END + 0x00AA, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_19_ENTRYID = UNIT_END + 0x00AB, // Size: 1, Type: INT, Flags: PUBLIC - PLAYER_VISIBLE_ITEM_19_ENCHANTMENT = UNIT_END + 0x00AC, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC - PLAYER_CHOSEN_TITLE = UNIT_END + 0x00AD, // Size: 1, Type: INT, Flags: PUBLIC - PLAYER_FAKE_INEBRIATION = UNIT_END + 0x00AE, // Size: 1, Type: INT, Flags: PUBLIC - PLAYER_FIELD_PAD_0 = UNIT_END + 0x00AF, // Size: 1, Type: INT, Flags: NONE - PLAYER_FIELD_INV_SLOT_HEAD = UNIT_END + 0x00B0, // Size: 46, Type: LONG, Flags: PRIVATE - PLAYER_FIELD_PACK_SLOT_1 = UNIT_END + 0x00DE, // Size: 32, Type: LONG, Flags: PRIVATE - PLAYER_FIELD_BANK_SLOT_1 = UNIT_END + 0x00FE, // Size: 56, Type: LONG, Flags: PRIVATE - PLAYER_FIELD_BANKBAG_SLOT_1 = UNIT_END + 0x0136, // Size: 14, Type: LONG, Flags: PRIVATE - PLAYER_FIELD_VENDORBUYBACK_SLOT_1 = UNIT_END + 0x0144, // Size: 24, Type: LONG, Flags: PRIVATE - PLAYER_FIELD_KEYRING_SLOT_1 = UNIT_END + 0x015C, // Size: 64, Type: LONG, Flags: PRIVATE - PLAYER_FIELD_CURRENCYTOKEN_SLOT_1 = UNIT_END + 0x019C, // Size: 64, Type: LONG, Flags: PRIVATE - PLAYER_FARSIGHT = UNIT_END + 0x01DC, // Size: 2, Type: LONG, Flags: PRIVATE - PLAYER__FIELD_KNOWN_TITLES = UNIT_END + 0x01DE, // Size: 2, Type: LONG, Flags: PRIVATE - PLAYER__FIELD_KNOWN_TITLES1 = UNIT_END + 0x01E0, // Size: 2, Type: LONG, Flags: PRIVATE - PLAYER__FIELD_KNOWN_TITLES2 = UNIT_END + 0x01E2, // Size: 2, Type: LONG, Flags: PRIVATE - PLAYER_FIELD_KNOWN_CURRENCIES = UNIT_END + 0x01E4, // Size: 2, Type: LONG, Flags: PRIVATE - PLAYER_XP = UNIT_END + 0x01E6, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_NEXT_LEVEL_XP = UNIT_END + 0x01E7, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_SKILL_INFO_1_1 = UNIT_END + 0x01E8, // Size: 384, Type: TWO_SHORT, Flags: PRIVATE - PLAYER_CHARACTER_POINTS1 = UNIT_END + 0x0368, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_CHARACTER_POINTS2 = UNIT_END + 0x0369, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_TRACK_CREATURES = UNIT_END + 0x036A, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_TRACK_RESOURCES = UNIT_END + 0x036B, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_BLOCK_PERCENTAGE = UNIT_END + 0x036C, // Size: 1, Type: FLOAT, Flags: PRIVATE - PLAYER_DODGE_PERCENTAGE = UNIT_END + 0x036D, // Size: 1, Type: FLOAT, Flags: PRIVATE - PLAYER_PARRY_PERCENTAGE = UNIT_END + 0x036E, // Size: 1, Type: FLOAT, Flags: PRIVATE - PLAYER_EXPERTISE = UNIT_END + 0x036F, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_OFFHAND_EXPERTISE = UNIT_END + 0x0370, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_CRIT_PERCENTAGE = UNIT_END + 0x0371, // Size: 1, Type: FLOAT, Flags: PRIVATE - PLAYER_RANGED_CRIT_PERCENTAGE = UNIT_END + 0x0372, // Size: 1, Type: FLOAT, Flags: PRIVATE - PLAYER_OFFHAND_CRIT_PERCENTAGE = UNIT_END + 0x0373, // Size: 1, Type: FLOAT, Flags: PRIVATE - PLAYER_SPELL_CRIT_PERCENTAGE1 = UNIT_END + 0x0374, // Size: 7, Type: FLOAT, Flags: PRIVATE - PLAYER_SHIELD_BLOCK = UNIT_END + 0x037B, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_SHIELD_BLOCK_CRIT_PERCENTAGE = UNIT_END + 0x037C, // Size: 1, Type: FLOAT, Flags: PRIVATE - PLAYER_EXPLORED_ZONES_1 = UNIT_END + 0x037D, // Size: 128, Type: BYTES, Flags: PRIVATE - PLAYER_REST_STATE_EXPERIENCE = UNIT_END + 0x03FD, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_FIELD_COINAGE = UNIT_END + 0x03FE, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_FIELD_MOD_DAMAGE_DONE_POS = UNIT_END + 0x03FF, // Size: 7, Type: INT, Flags: PRIVATE - PLAYER_FIELD_MOD_DAMAGE_DONE_NEG = UNIT_END + 0x0406, // Size: 7, Type: INT, Flags: PRIVATE - PLAYER_FIELD_MOD_DAMAGE_DONE_PCT = UNIT_END + 0x040D, // Size: 7, Type: INT, Flags: PRIVATE - PLAYER_FIELD_MOD_HEALING_DONE_POS = UNIT_END + 0x0414, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_FIELD_MOD_HEALING_PCT = UNIT_END + 0x0415, // Size: 1, Type: FLOAT, Flags: PRIVATE - PLAYER_FIELD_MOD_HEALING_DONE_PCT = UNIT_END + 0x0416, // Size: 1, Type: FLOAT, Flags: PRIVATE - PLAYER_FIELD_MOD_TARGET_RESISTANCE = UNIT_END + 0x0417, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_FIELD_MOD_TARGET_PHYSICAL_RESISTANCE = UNIT_END + 0x0418, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_FIELD_BYTES = UNIT_END + 0x0419, // Size: 1, Type: BYTES, Flags: PRIVATE - PLAYER_AMMO_ID = UNIT_END + 0x041A, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_SELF_RES_SPELL = UNIT_END + 0x041B, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_FIELD_PVP_MEDALS = UNIT_END + 0x041C, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_FIELD_BUYBACK_PRICE_1 = UNIT_END + 0x041D, // Size: 12, Type: INT, Flags: PRIVATE - PLAYER_FIELD_BUYBACK_TIMESTAMP_1 = UNIT_END + 0x0429, // Size: 12, Type: INT, Flags: PRIVATE - PLAYER_FIELD_KILLS = UNIT_END + 0x0435, // Size: 1, Type: TWO_SHORT, Flags: PRIVATE - PLAYER_FIELD_TODAY_CONTRIBUTION = UNIT_END + 0x0436, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_FIELD_YESTERDAY_CONTRIBUTION = UNIT_END + 0x0437, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_FIELD_LIFETIME_HONORBALE_KILLS = UNIT_END + 0x0438, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_FIELD_BYTES2 = UNIT_END + 0x0439, // Size: 1, Type: 6, Flags: PRIVATE - PLAYER_FIELD_WATCHED_FACTION_INDEX = UNIT_END + 0x043A, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_FIELD_COMBAT_RATING_1 = UNIT_END + 0x043B, // Size: 25, Type: INT, Flags: PRIVATE - PLAYER_FIELD_ARENA_TEAM_INFO_1_1 = UNIT_END + 0x0454, // Size: 21, Type: INT, Flags: PRIVATE - PLAYER_FIELD_HONOR_CURRENCY = UNIT_END + 0x0469, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_FIELD_ARENA_CURRENCY = UNIT_END + 0x046A, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_FIELD_MAX_LEVEL = UNIT_END + 0x046B, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_FIELD_DAILY_QUESTS_1 = UNIT_END + 0x046C, // Size: 25, Type: INT, Flags: PRIVATE - PLAYER_RUNE_REGEN_1 = UNIT_END + 0x0485, // Size: 4, Type: FLOAT, Flags: PRIVATE - PLAYER_NO_REAGENT_COST_1 = UNIT_END + 0x0489, // Size: 3, Type: INT, Flags: PRIVATE - PLAYER_FIELD_GLYPH_SLOTS_1 = UNIT_END + 0x048C, // Size: 6, Type: INT, Flags: PRIVATE - PLAYER_FIELD_GLYPHS_1 = UNIT_END + 0x0492, // Size: 6, Type: INT, Flags: PRIVATE - PLAYER_GLYPHS_ENABLED = UNIT_END + 0x0498, // Size: 1, Type: INT, Flags: PRIVATE - PLAYER_PET_SPELL_POWER = UNIT_END + 0x0499, // Size: 1, Type: INT, Flags: PRIVATE PLAYER_END = UNIT_END + 0x049A, - PLAYER_END_6005 = UNIT_END + 0x0446, -}; - -enum EGameObjectFields -{ - 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_PARENTROTATION = OBJECT_END + 0x0004, // Size: 4, Type: FLOAT, Flags: PUBLIC - GAMEOBJECT_DYNAMIC = OBJECT_END + 0x0008, // Size: 1, Type: TWO_SHORT, Flags: DYNAMIC - GAMEOBJECT_FACTION = OBJECT_END + 0x0009, // Size: 1, Type: INT, Flags: PUBLIC - GAMEOBJECT_LEVEL = OBJECT_END + 0x000A, // Size: 1, Type: INT, Flags: PUBLIC - GAMEOBJECT_BYTES_1 = OBJECT_END + 0x000B, // Size: 1, Type: BYTES, Flags: PUBLIC GAMEOBJECT_END = OBJECT_END + 0x000C, - GAMEOBJECT_END_6005 = OBJECT_END + 0x0014, -}; - -enum EDynamicObjectFields -{ - 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_CASTTIME = OBJECT_END + 0x0005, // Size: 1, Type: INT, Flags: PUBLIC DYNAMICOBJECT_END = OBJECT_END + 0x0006, + CORPSE_END = OBJECT_END + 0x001E, + + ITEM_END_6005 = OBJECT_END + 0x002A, + CONTAINER_END_6005 = ITEM_END_6005 + 0x003A, + UNIT_END_6005 = OBJECT_END + 0x00B6, + PLAYER_END_6005 = UNIT_END_6005 + 0x0446, + GAMEOBJECT_END_6005 = OBJECT_END + 0x0014, + }; -enum ECorpseFields + +enum UpdateFieldName { - CORPSE_FIELD_OWNER = OBJECT_END + 0x0000, // Size: 2, Type: LONG, Flags: PUBLIC - CORPSE_FIELD_PARTY = OBJECT_END + 0x0002, // Size: 2, Type: LONG, Flags: PUBLIC - CORPSE_FIELD_DISPLAY_ID = OBJECT_END + 0x0004, // Size: 1, Type: INT, Flags: PUBLIC - CORPSE_FIELD_ITEM = OBJECT_END + 0x0005, // Size: 19, Type: INT, Flags: PUBLIC - CORPSE_FIELD_BYTES_1 = OBJECT_END + 0x0018, // Size: 1, Type: BYTES, Flags: PUBLIC - CORPSE_FIELD_BYTES_2 = OBJECT_END + 0x0019, // Size: 1, Type: BYTES, Flags: PUBLIC - CORPSE_FIELD_GUILD = OBJECT_END + 0x001A, // Size: 1, Type: INT, Flags: PUBLIC - CORPSE_FIELD_FLAGS = OBJECT_END + 0x001B, // Size: 1, Type: INT, Flags: PUBLIC - CORPSE_FIELD_DYNAMIC_FLAGS = OBJECT_END + 0x001C, // Size: 1, Type: INT, Flags: DYNAMIC - CORPSE_FIELD_PAD = OBJECT_END + 0x001D, // Size: 1, Type: INT, Flags: NONE - CORPSE_END = OBJECT_END + 0x001E, + //This is just an list of updatefield names. sorted alphabetically + //ToDo: Sort in a way that makes sense!!! (All, WoW, TBC, WoTLK) + OBJECT_FIELD_ENTRY, + OBJECT_FIELD_GUID, + OBJECT_FIELD_GUID_LOW, + OBJECT_FIELD_GUID_HIGH, + OBJECT_FIELD_PADDING, + OBJECT_FIELD_SCALE_X, + OBJECT_FIELD_TYPE, + + ITEM_FIELD_CONTAINED, + ITEM_FIELD_CREATE_PLAYED_TIME, + ITEM_FIELD_CREATOR, + ITEM_FIELD_DURABILITY, + ITEM_FIELD_DURATION, + ITEM_FIELD_ENCHANTMENT, + ITEM_FIELD_ENCHANTMENT_1_1, + ITEM_FIELD_ENCHANTMENT_1_3, + ITEM_FIELD_ENCHANTMENT_10_1, + ITEM_FIELD_ENCHANTMENT_10_3, + ITEM_FIELD_ENCHANTMENT_11_1, + ITEM_FIELD_ENCHANTMENT_11_3, + ITEM_FIELD_ENCHANTMENT_12_1, + ITEM_FIELD_ENCHANTMENT_12_3, + ITEM_FIELD_ENCHANTMENT_2_1, + ITEM_FIELD_ENCHANTMENT_2_3, + ITEM_FIELD_ENCHANTMENT_3_1, + ITEM_FIELD_ENCHANTMENT_3_3, + ITEM_FIELD_ENCHANTMENT_4_1, + ITEM_FIELD_ENCHANTMENT_4_3, + ITEM_FIELD_ENCHANTMENT_5_1, + ITEM_FIELD_ENCHANTMENT_5_3, + ITEM_FIELD_ENCHANTMENT_6_1, + ITEM_FIELD_ENCHANTMENT_6_3, + ITEM_FIELD_ENCHANTMENT_7_1, + ITEM_FIELD_ENCHANTMENT_7_3, + ITEM_FIELD_ENCHANTMENT_8_1, + ITEM_FIELD_ENCHANTMENT_8_3, + ITEM_FIELD_ENCHANTMENT_9_1, + ITEM_FIELD_ENCHANTMENT_9_3, + ITEM_FIELD_FLAGS, + ITEM_FIELD_GIFTCREATOR, + ITEM_FIELD_ITEM_TEXT_ID, + ITEM_FIELD_MAXDURABILITY, + ITEM_FIELD_OWNER, + ITEM_FIELD_PAD, + ITEM_FIELD_PROPERTY_SEED, + ITEM_FIELD_RANDOM_PROPERTIES_ID, + ITEM_FIELD_SPELL_CHARGES, + ITEM_FIELD_SPELL_CHARGES_01, + ITEM_FIELD_SPELL_CHARGES_02, + ITEM_FIELD_SPELL_CHARGES_03, + ITEM_FIELD_SPELL_CHARGES_04, + ITEM_FIELD_STACK_COUNT, + + CONTAINER_ALIGN_PAD, + CONTAINER_FIELD_NUM_SLOTS, + CONTAINER_FIELD_SLOT_1, + CONTAINER_FIELD_SLOT_LAST, + + UNIT_CHANNEL_SPELL, + UNIT_CREATED_BY_SPELL, + UNIT_DYNAMIC_FLAGS, + UNIT_FIELD_ATTACK_POWER, + UNIT_FIELD_ATTACK_POWER_MODS, + UNIT_FIELD_ATTACK_POWER_MULTIPLIER, + UNIT_FIELD_AURA, + UNIT_FIELD_AURA_LAST, + UNIT_FIELD_AURAAPPLICATIONS, + UNIT_FIELD_AURAAPPLICATIONS_LAST, + UNIT_FIELD_AURAFLAGS, + UNIT_FIELD_AURAFLAGS_01, + UNIT_FIELD_AURAFLAGS_02, + UNIT_FIELD_AURAFLAGS_03, + UNIT_FIELD_AURAFLAGS_04, + UNIT_FIELD_AURAFLAGS_05, + UNIT_FIELD_AURALEVELS, + UNIT_FIELD_AURALEVELS_LAST, + UNIT_FIELD_AURASTATE, + UNIT_FIELD_BASE_HEALTH, + UNIT_FIELD_BASE_MANA, + UNIT_FIELD_BASEATTACKTIME, + UNIT_FIELD_BOUNDINGRADIUS, + UNIT_FIELD_BYTES_0, + UNIT_FIELD_BYTES_1, + UNIT_FIELD_BYTES_2, + UNIT_FIELD_CHANNEL_OBJECT, + UNIT_FIELD_CHARM, + UNIT_FIELD_CHARMEDBY, + UNIT_FIELD_COMBATREACH, + UNIT_FIELD_CREATEDBY, + UNIT_FIELD_CRITTER, + UNIT_FIELD_DISPLAYID, + UNIT_FIELD_FACTIONTEMPLATE, + UNIT_FIELD_FLAGS, + UNIT_FIELD_FLAGS_2, + UNIT_FIELD_HEALTH, + UNIT_FIELD_HOVERHEIGHT, + UNIT_FIELD_LEVEL, + UNIT_FIELD_MAXDAMAGE, + UNIT_FIELD_MAXHEALTH, + UNIT_FIELD_MAXHEALTHMODIFIER, + UNIT_FIELD_MAXOFFHANDDAMAGE, + UNIT_FIELD_MAXPOWER1, + UNIT_FIELD_MAXPOWER2, + UNIT_FIELD_MAXPOWER3, + UNIT_FIELD_MAXPOWER4, + UNIT_FIELD_MAXPOWER5, + UNIT_FIELD_MAXPOWER6, + UNIT_FIELD_MAXPOWER7, + UNIT_FIELD_MAXRANGEDDAMAGE, + UNIT_FIELD_MINDAMAGE, + UNIT_FIELD_MINOFFHANDDAMAGE, + UNIT_FIELD_MINRANGEDDAMAGE, + UNIT_FIELD_MOUNTDISPLAYID, + UNIT_FIELD_NATIVEDISPLAYID, + UNIT_FIELD_NEGSTAT0, + UNIT_FIELD_NEGSTAT1, + UNIT_FIELD_NEGSTAT2, + UNIT_FIELD_NEGSTAT3, + UNIT_FIELD_NEGSTAT4, + UNIT_FIELD_OFFHANDATTACKTIME, + UNIT_FIELD_PADDING, + UNIT_FIELD_PERSUADED, + UNIT_FIELD_PET_NAME_TIMESTAMP, + UNIT_FIELD_PETEXPERIENCE, + UNIT_FIELD_PETNEXTLEVELEXP, + UNIT_FIELD_PETNUMBER, + UNIT_FIELD_POSSTAT0, + UNIT_FIELD_POSSTAT1, + UNIT_FIELD_POSSTAT2, + UNIT_FIELD_POSSTAT3, + UNIT_FIELD_POSSTAT4, + UNIT_FIELD_POWER_COST_MODIFIER, + UNIT_FIELD_POWER_COST_MODIFIER_01, + UNIT_FIELD_POWER_COST_MODIFIER_02, + UNIT_FIELD_POWER_COST_MODIFIER_03, + UNIT_FIELD_POWER_COST_MODIFIER_04, + UNIT_FIELD_POWER_COST_MODIFIER_05, + UNIT_FIELD_POWER_COST_MODIFIER_06, + UNIT_FIELD_POWER_COST_MULTIPLIER, + UNIT_FIELD_POWER_COST_MULTIPLIER_01, + UNIT_FIELD_POWER_COST_MULTIPLIER_02, + UNIT_FIELD_POWER_COST_MULTIPLIER_03, + UNIT_FIELD_POWER_COST_MULTIPLIER_04, + UNIT_FIELD_POWER_COST_MULTIPLIER_05, + UNIT_FIELD_POWER_COST_MULTIPLIER_06, + UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER, + UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER, + UNIT_FIELD_POWER1, + UNIT_FIELD_POWER2, + UNIT_FIELD_POWER3, + UNIT_FIELD_POWER4, + UNIT_FIELD_POWER5, + UNIT_FIELD_POWER6, + UNIT_FIELD_POWER7, + UNIT_FIELD_RANGED_ATTACK_POWER, + UNIT_FIELD_RANGED_ATTACK_POWER_MODS, + UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER, + UNIT_FIELD_RANGEDATTACKTIME, + UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE, + UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE, + UNIT_FIELD_RESISTANCES, + UNIT_FIELD_RESISTANCES_01, + UNIT_FIELD_RESISTANCES_02, + UNIT_FIELD_RESISTANCES_03, + UNIT_FIELD_RESISTANCES_04, + UNIT_FIELD_RESISTANCES_05, + UNIT_FIELD_RESISTANCES_06, + UNIT_FIELD_STAT0, + UNIT_FIELD_STAT1, + UNIT_FIELD_STAT2, + UNIT_FIELD_STAT3, + UNIT_FIELD_STAT4, + UNIT_FIELD_SUMMON, + UNIT_FIELD_SUMMONEDBY, + UNIT_FIELD_TARGET, + UNIT_MOD_CAST_SPEED, + UNIT_NPC_EMOTESTATE, + UNIT_NPC_FLAGS, + UNIT_TRAINING_POINTS, + UNIT_VIRTUAL_ITEM_INFO, + UNIT_VIRTUAL_ITEM_INFO_01, + UNIT_VIRTUAL_ITEM_INFO_02, + UNIT_VIRTUAL_ITEM_INFO_03, + UNIT_VIRTUAL_ITEM_INFO_04, + UNIT_VIRTUAL_ITEM_INFO_05, + UNIT_VIRTUAL_ITEM_SLOT_DISPLAY, + UNIT_VIRTUAL_ITEM_SLOT_DISPLAY_01, + UNIT_VIRTUAL_ITEM_SLOT_DISPLAY_02, + UNIT_VIRTUAL_ITEM_SLOT_ID, + + PLAYER__FIELD_KNOWN_TITLES, + PLAYER__FIELD_KNOWN_TITLES1, + PLAYER__FIELD_KNOWN_TITLES2, + PLAYER_AMMO_ID, + PLAYER_BLOCK_PERCENTAGE, + PLAYER_BYTES, + PLAYER_BYTES_2, + PLAYER_BYTES_3, + PLAYER_CHARACTER_POINTS1, + PLAYER_CHARACTER_POINTS2, + PLAYER_CHOSEN_TITLE, + PLAYER_CRIT_PERCENTAGE, + PLAYER_DODGE_PERCENTAGE, + PLAYER_DUEL_ARBITER, + PLAYER_DUEL_TEAM, + PLAYER_EXPERTISE, + PLAYER_EXPLORED_ZONES_1, + PLAYER_FAKE_INEBRIATION, + PLAYER_FARSIGHT, + PLAYER_FIELD_ARENA_CURRENCY, + PLAYER_FIELD_ARENA_TEAM_INFO_1_1, + PLAYER_FIELD_BANK_SLOT_1, + PLAYER_FIELD_BANK_SLOT_LAST, + PLAYER_FIELD_BANKBAG_SLOT_1, + PLAYER_FIELD_BANKBAG_SLOT_LAST, + PLAYER_FIELD_BUYBACK_PRICE_1, + PLAYER_FIELD_BUYBACK_PRICE_LAST, + PLAYER_FIELD_BUYBACK_TIMESTAMP_1, + PLAYER_FIELD_BUYBACK_TIMESTAMP_LAST, + PLAYER_FIELD_BYTES, + PLAYER_FIELD_BYTES2, + PLAYER_FIELD_COINAGE, + PLAYER_FIELD_COMBAT_RATING_1, + PLAYER_FIELD_COMBO_TARGET, + PLAYER_FIELD_CURRENCYTOKEN_SLOT_1, + PLAYER_FIELD_DAILY_QUESTS_1, + PLAYER_FIELD_GLYPH_SLOTS_1, + PLAYER_FIELD_GLYPHS_1, + PLAYER_FIELD_HONOR_CURRENCY, + PLAYER_FIELD_INV_SLOT_HEAD, + PLAYER_FIELD_KEYRING_SLOT_1, + PLAYER_FIELD_KEYRING_SLOT_LAST, + PLAYER_FIELD_KILLS, + PLAYER_FIELD_KNOWN_CURRENCIES, + PLAYER_FIELD_LAST_WEEK_CONTRIBUTION, + PLAYER_FIELD_LAST_WEEK_KILLS, + PLAYER_FIELD_LAST_WEEK_RANK, + PLAYER_FIELD_LIFETIME_DISHONORABLE_KILLS, + PLAYER_FIELD_LIFETIME_HONORABLE_KILLS, + PLAYER_FIELD_LIFETIME_HONORBALE_KILLS, + PLAYER_FIELD_MAX_LEVEL, + PLAYER_FIELD_MOD_DAMAGE_DONE_NEG, + PLAYER_FIELD_MOD_DAMAGE_DONE_PCT, + PLAYER_FIELD_MOD_DAMAGE_DONE_POS, + PLAYER_FIELD_MOD_HEALING_DONE_PCT, + PLAYER_FIELD_MOD_HEALING_DONE_POS, + PLAYER_FIELD_MOD_HEALING_PCT, + PLAYER_FIELD_MOD_TARGET_PHYSICAL_RESISTANCE, + PLAYER_FIELD_MOD_TARGET_RESISTANCE, + PLAYER_FIELD_NEGSTAT0, + PLAYER_FIELD_NEGSTAT1, + PLAYER_FIELD_NEGSTAT2, + PLAYER_FIELD_NEGSTAT3, + PLAYER_FIELD_NEGSTAT4, + PLAYER_FIELD_PACK_SLOT_1, + PLAYER_FIELD_PACK_SLOT_LAST, + PLAYER_FIELD_PAD_0, + PLAYER_FIELD_POSSTAT0, + PLAYER_FIELD_POSSTAT1, + PLAYER_FIELD_POSSTAT2, + PLAYER_FIELD_POSSTAT3, + PLAYER_FIELD_POSSTAT4, + PLAYER_FIELD_PVP_MEDALS, + PLAYER_FIELD_RESISTANCEBUFFMODSNEGATIVE, + PLAYER_FIELD_RESISTANCEBUFFMODSPOSITIVE, + PLAYER_FIELD_SESSION_KILLS, + PLAYER_FIELD_THIS_WEEK_CONTRIBUTION, + PLAYER_FIELD_THIS_WEEK_KILLS, + PLAYER_FIELD_TODAY_CONTRIBUTION, + PLAYER_FIELD_VENDORBUYBACK_SLOT_1, + PLAYER_FIELD_VENDORBUYBACK_SLOT_LAST, + PLAYER_FIELD_WATCHED_FACTION_INDEX, + PLAYER_FIELD_YESTERDAY_CONTRIBUTION, + PLAYER_FIELD_YESTERDAY_KILLS, + PLAYER_FLAGS, + PLAYER_GLYPHS_ENABLED, + PLAYER_GUILD_TIMESTAMP, + PLAYER_GUILDID, + PLAYER_GUILDRANK, + PLAYER_NEXT_LEVEL_XP, + PLAYER_NO_REAGENT_COST_1, + PLAYER_OFFHAND_CRIT_PERCENTAGE, + PLAYER_OFFHAND_EXPERTISE, + PLAYER_PARRY_PERCENTAGE, + PLAYER_PET_SPELL_POWER, + PLAYER_QUEST_LOG_1_1, + PLAYER_QUEST_LOG_1_2, + PLAYER_QUEST_LOG_1_3, + PLAYER_QUEST_LOG_1_4, + PLAYER_QUEST_LOG_10_1, + PLAYER_QUEST_LOG_10_2, + PLAYER_QUEST_LOG_10_3, + PLAYER_QUEST_LOG_10_5, + PLAYER_QUEST_LOG_11_1, + PLAYER_QUEST_LOG_11_2, + PLAYER_QUEST_LOG_11_3, + PLAYER_QUEST_LOG_11_5, + PLAYER_QUEST_LOG_12_1, + PLAYER_QUEST_LOG_12_2, + PLAYER_QUEST_LOG_12_3, + PLAYER_QUEST_LOG_12_5, + PLAYER_QUEST_LOG_13_1, + PLAYER_QUEST_LOG_13_2, + PLAYER_QUEST_LOG_13_3, + PLAYER_QUEST_LOG_13_5, + PLAYER_QUEST_LOG_14_1, + PLAYER_QUEST_LOG_14_2, + PLAYER_QUEST_LOG_14_3, + PLAYER_QUEST_LOG_14_5, + PLAYER_QUEST_LOG_15_1, + PLAYER_QUEST_LOG_15_2, + PLAYER_QUEST_LOG_15_3, + PLAYER_QUEST_LOG_15_5, + PLAYER_QUEST_LOG_16_1, + PLAYER_QUEST_LOG_16_2, + PLAYER_QUEST_LOG_16_3, + PLAYER_QUEST_LOG_16_5, + PLAYER_QUEST_LOG_17_1, + PLAYER_QUEST_LOG_17_2, + PLAYER_QUEST_LOG_17_3, + PLAYER_QUEST_LOG_17_5, + PLAYER_QUEST_LOG_18_1, + PLAYER_QUEST_LOG_18_2, + PLAYER_QUEST_LOG_18_3, + PLAYER_QUEST_LOG_18_5, + PLAYER_QUEST_LOG_19_1, + PLAYER_QUEST_LOG_19_2, + PLAYER_QUEST_LOG_19_3, + PLAYER_QUEST_LOG_19_5, + PLAYER_QUEST_LOG_2_1, + PLAYER_QUEST_LOG_2_2, + PLAYER_QUEST_LOG_2_3, + PLAYER_QUEST_LOG_2_5, + PLAYER_QUEST_LOG_20_1, + PLAYER_QUEST_LOG_20_2, + PLAYER_QUEST_LOG_20_3, + PLAYER_QUEST_LOG_20_5, + PLAYER_QUEST_LOG_21_1, + PLAYER_QUEST_LOG_21_2, + PLAYER_QUEST_LOG_21_3, + PLAYER_QUEST_LOG_21_5, + PLAYER_QUEST_LOG_22_1, + PLAYER_QUEST_LOG_22_2, + PLAYER_QUEST_LOG_22_3, + PLAYER_QUEST_LOG_22_5, + PLAYER_QUEST_LOG_23_1, + PLAYER_QUEST_LOG_23_2, + PLAYER_QUEST_LOG_23_3, + PLAYER_QUEST_LOG_23_5, + PLAYER_QUEST_LOG_24_1, + PLAYER_QUEST_LOG_24_2, + PLAYER_QUEST_LOG_24_3, + PLAYER_QUEST_LOG_24_5, + PLAYER_QUEST_LOG_25_1, + PLAYER_QUEST_LOG_25_2, + PLAYER_QUEST_LOG_25_3, + PLAYER_QUEST_LOG_25_5, + PLAYER_QUEST_LOG_3_1, + PLAYER_QUEST_LOG_3_2, + PLAYER_QUEST_LOG_3_3, + PLAYER_QUEST_LOG_3_5, + PLAYER_QUEST_LOG_4_1, + PLAYER_QUEST_LOG_4_2, + PLAYER_QUEST_LOG_4_3, + PLAYER_QUEST_LOG_4_5, + PLAYER_QUEST_LOG_5_1, + PLAYER_QUEST_LOG_5_2, + PLAYER_QUEST_LOG_5_3, + PLAYER_QUEST_LOG_5_5, + PLAYER_QUEST_LOG_6_1, + PLAYER_QUEST_LOG_6_2, + PLAYER_QUEST_LOG_6_3, + PLAYER_QUEST_LOG_6_5, + PLAYER_QUEST_LOG_7_1, + PLAYER_QUEST_LOG_7_2, + PLAYER_QUEST_LOG_7_3, + PLAYER_QUEST_LOG_7_5, + PLAYER_QUEST_LOG_8_1, + PLAYER_QUEST_LOG_8_2, + PLAYER_QUEST_LOG_8_3, + PLAYER_QUEST_LOG_8_5, + PLAYER_QUEST_LOG_9_1, + PLAYER_QUEST_LOG_9_2, + PLAYER_QUEST_LOG_9_3, + PLAYER_QUEST_LOG_9_5, + PLAYER_QUEST_LOG_LAST_1, + PLAYER_QUEST_LOG_LAST_2, + PLAYER_QUEST_LOG_LAST_3, + PLAYER_RANGED_CRIT_PERCENTAGE, + PLAYER_REST_STATE_EXPERIENCE, + PLAYER_RUNE_REGEN_1, + PLAYER_SELF_RES_SPELL, + PLAYER_SHIELD_BLOCK, + PLAYER_SHIELD_BLOCK_CRIT_PERCENTAGE, + PLAYER_SKILL_INFO_1_1, + PLAYER_SPELL_CRIT_PERCENTAGE1, + PLAYER_TRACK_CREATURES, + PLAYER_TRACK_RESOURCES, + PLAYER_VISIBLE_ITEM_1_0, + PLAYER_VISIBLE_ITEM_1_CREATOR, + PLAYER_VISIBLE_ITEM_1_ENCHANTMENT, + PLAYER_VISIBLE_ITEM_1_ENTRYID, + PLAYER_VISIBLE_ITEM_1_PAD, + PLAYER_VISIBLE_ITEM_1_PROPERTIES, + PLAYER_VISIBLE_ITEM_10_ENCHANTMENT, + PLAYER_VISIBLE_ITEM_10_ENTRYID, + PLAYER_VISIBLE_ITEM_11_ENCHANTMENT, + PLAYER_VISIBLE_ITEM_11_ENTRYID, + PLAYER_VISIBLE_ITEM_12_ENCHANTMENT, + PLAYER_VISIBLE_ITEM_12_ENTRYID, + PLAYER_VISIBLE_ITEM_13_ENCHANTMENT, + PLAYER_VISIBLE_ITEM_13_ENTRYID, + PLAYER_VISIBLE_ITEM_14_ENCHANTMENT, + PLAYER_VISIBLE_ITEM_14_ENTRYID, + PLAYER_VISIBLE_ITEM_15_ENCHANTMENT, + PLAYER_VISIBLE_ITEM_15_ENTRYID, + PLAYER_VISIBLE_ITEM_16_ENCHANTMENT, + PLAYER_VISIBLE_ITEM_16_ENTRYID, + PLAYER_VISIBLE_ITEM_17_ENCHANTMENT, + PLAYER_VISIBLE_ITEM_17_ENTRYID, + PLAYER_VISIBLE_ITEM_18_ENCHANTMENT, + PLAYER_VISIBLE_ITEM_18_ENTRYID, + PLAYER_VISIBLE_ITEM_19_ENCHANTMENT, + PLAYER_VISIBLE_ITEM_19_ENTRYID, + PLAYER_VISIBLE_ITEM_2_ENCHANTMENT, + PLAYER_VISIBLE_ITEM_2_ENTRYID, + PLAYER_VISIBLE_ITEM_3_ENCHANTMENT, + PLAYER_VISIBLE_ITEM_3_ENTRYID, + PLAYER_VISIBLE_ITEM_4_ENCHANTMENT, + PLAYER_VISIBLE_ITEM_4_ENTRYID, + PLAYER_VISIBLE_ITEM_5_ENCHANTMENT, + PLAYER_VISIBLE_ITEM_5_ENTRYID, + PLAYER_VISIBLE_ITEM_6_ENCHANTMENT, + PLAYER_VISIBLE_ITEM_6_ENTRYID, + PLAYER_VISIBLE_ITEM_7_ENCHANTMENT, + PLAYER_VISIBLE_ITEM_7_ENTRYID, + PLAYER_VISIBLE_ITEM_8_ENCHANTMENT, + PLAYER_VISIBLE_ITEM_8_ENTRYID, + PLAYER_VISIBLE_ITEM_9_ENCHANTMENT, + PLAYER_VISIBLE_ITEM_9_ENTRYID, + PLAYER_VISIBLE_ITEM_LAST_0, + PLAYER_VISIBLE_ITEM_LAST_CREATOR, + PLAYER_VISIBLE_ITEM_LAST_PAD, + PLAYER_VISIBLE_ITEM_LAST_PROPERTIES, + PLAYER_XP, + + OBJECT_FIELD_CREATED_BY, + GAMEOBJECT_ANIMPROGRESS, + GAMEOBJECT_ARTKIT, + GAMEOBJECT_BYTES_1, + GAMEOBJECT_DISPLAYID, + GAMEOBJECT_DYN_FLAGS, + GAMEOBJECT_DYNAMIC, + GAMEOBJECT_FACING, + GAMEOBJECT_FACTION, + GAMEOBJECT_FLAGS, + GAMEOBJECT_LEVEL, + GAMEOBJECT_PADDING, + GAMEOBJECT_PARENTROTATION, + GAMEOBJECT_POS_X, + GAMEOBJECT_POS_Y, + GAMEOBJECT_POS_Z, + GAMEOBJECT_ROTATION, + GAMEOBJECT_STATE, + GAMEOBJECT_TYPE_ID, + + DYNAMICOBJECT_BYTES, + DYNAMICOBJECT_CASTER, + DYNAMICOBJECT_CASTTIME, + DYNAMICOBJECT_FACING, + DYNAMICOBJECT_PAD, + DYNAMICOBJECT_POS_X, + DYNAMICOBJECT_POS_Y, + DYNAMICOBJECT_POS_Z, + DYNAMICOBJECT_RADIUS, + DYNAMICOBJECT_SPELLID, + + CORPSE_FIELD_BYTES_1, + CORPSE_FIELD_BYTES_2, + CORPSE_FIELD_DISPLAY_ID, + CORPSE_FIELD_DYNAMIC_FLAGS, + CORPSE_FIELD_FACING, + CORPSE_FIELD_FLAGS, + CORPSE_FIELD_GUILD, + CORPSE_FIELD_ITEM, + CORPSE_FIELD_OWNER, + CORPSE_FIELD_PAD, + CORPSE_FIELD_PARTY, + CORPSE_FIELD_POS_X, + CORPSE_FIELD_POS_Y, + CORPSE_FIELD_POS_Z, + + UPDATEFIELDS_NAME_COUNT + }; #endif diff --git a/src/Client/World/WorldSession.cpp b/src/Client/World/WorldSession.cpp index 6aa6206..f3cf3ff 100644 --- a/src/Client/World/WorldSession.cpp +++ b/src/Client/World/WorldSession.cpp @@ -23,6 +23,7 @@ struct OpcodeHandler }; uint32 Object::maxvalues[TYPEID_MAX]; +UpdateField Object::updatefields[UPDATEFIELDS_NAME_COUNT]; WorldSession::WorldSession(PseuInstance *in) { @@ -38,33 +39,8 @@ WorldSession::WorldSession(PseuInstance *in) objmgr.SetInstance(in); _lag_ms = 0; //... - switch(in->GetConf()->client)//TODO: Add TBC/WOTLK cases - { - case CLIENT_CLASSIC_WOW: - { - Object::maxvalues[TYPEID_OBJECT]=OBJECT_END; - Object::maxvalues[TYPEID_ITEM]=ITEM_END_6005; - Object::maxvalues[TYPEID_CONTAINER]=CONTAINER_END_6005; - Object::maxvalues[TYPEID_UNIT]=UNIT_END_6005; - Object::maxvalues[TYPEID_PLAYER]=PLAYER_END_6005; - Object::maxvalues[TYPEID_GAMEOBJECT]=GAMEOBJECT_END_6005; - Object::maxvalues[TYPEID_DYNAMICOBJECT]=DYNAMICOBJECT_END; - Object::maxvalues[TYPEID_CORPSE]=CORPSE_END; - break; - } - default: - { - Object::maxvalues[TYPEID_OBJECT]=OBJECT_END; - Object::maxvalues[TYPEID_ITEM]=ITEM_END; - Object::maxvalues[TYPEID_CONTAINER]=CONTAINER_END; - Object::maxvalues[TYPEID_UNIT]=UNIT_END; - Object::maxvalues[TYPEID_PLAYER]=PLAYER_END; - Object::maxvalues[TYPEID_GAMEOBJECT]=GAMEOBJECT_END; - Object::maxvalues[TYPEID_DYNAMICOBJECT]=DYNAMICOBJECT_END; - Object::maxvalues[TYPEID_CORPSE]=CORPSE_END; - break; - } - } + + _SetupObjectFields(); in->GetScripts()->RunScriptIfExists("_onworldsessioncreate"); diff --git a/src/Client/World/WorldSession.h b/src/Client/World/WorldSession.h index 1945427..4b0ee07 100644 --- a/src/Client/World/WorldSession.h +++ b/src/Client/World/WorldSession.h @@ -126,6 +126,7 @@ private: void _DoTimedActions(void); void _DelayWorldPacket(WorldPacket&, uint32); void _HandleDelayedPackets(void); + void _SetupObjectFields(void); // Opcode Handlers void _HandleAuthChallengeOpcode(WorldPacket& recvPacket);