* Update to 2.3.0 client version, big thx to bLuma for patch!
* fixed minor bug with uninitialized scenestate in gui * added some debug output to the WorldSession connection process, thx to visagalis for reporting a problem with it. real problem source yet unknown. *** please report any bugs!
This commit is contained in:
parent
d1d5ec309c
commit
02df5d5261
@ -58,8 +58,8 @@ charname=Pseuwow
|
||||
|
||||
|
||||
// Client emulation configuration
|
||||
ClientVersion=2.1.3
|
||||
ClientBuild=6898
|
||||
ClientVersion=2.3.0
|
||||
ClientBuild=7561
|
||||
ClientLanguage=enUS
|
||||
// or change to enGB, deDE, ...
|
||||
|
||||
@ -114,3 +114,4 @@ rmcontrolhost=localhost
|
||||
useMaps=0
|
||||
|
||||
|
||||
|
||||
|
||||
@ -14,7 +14,7 @@ SET,color ${@0}
|
||||
DEFAULT,i 0
|
||||
TOINT,i ${i}
|
||||
DEFAULT,color 6679FF
|
||||
SET,link |cff${color}|Hitem:${i}:0:0:0|h[Item ${i}]|h|r
|
||||
SET,link |cff${color}|Hitem:${i}:0:0:0:0:0:0:0|h[Item ${i}]|h|r
|
||||
|
||||
UNSET i
|
||||
UNSET color
|
||||
|
||||
@ -21,9 +21,10 @@ SAY [${@version_short}] login successful.
|
||||
EMOTE 126
|
||||
|
||||
// join some channels...
|
||||
JOINCHANNEL generalchat
|
||||
JOINCHANNEL help
|
||||
JOINCHANNEL tradee
|
||||
//JOINCHANNEL generalchat
|
||||
//JOINCHANNEL help
|
||||
//JOINCHANNEL tradee
|
||||
//listchannel generalchat
|
||||
// ...
|
||||
|
||||
// Spell 836 = LoginEffect
|
||||
|
||||
@ -37,7 +37,7 @@ PseuGUI::PseuGUI()
|
||||
_initialized = false;
|
||||
_mustdie = false;
|
||||
_driverType = video::EDT_BURNINGSVIDEO; // nulldevice makes not really a sense to display stuff
|
||||
_scenestate = SCENESTATE_NULL;
|
||||
_scenestate = _scenestate_new = SCENESTATE_NULL;
|
||||
_smgr = NULL;
|
||||
_device = NULL;
|
||||
_guienv = NULL;
|
||||
@ -49,19 +49,20 @@ PseuGUI::~PseuGUI()
|
||||
{
|
||||
this->Cancel();
|
||||
_instance->DeleteGUI(); // this makes the instance set its gui ptr to NULL
|
||||
logdebug("PseuGUI::~PseuGUI()");
|
||||
}
|
||||
|
||||
void PseuGUI::SetDriver(uint8 driverId)
|
||||
{
|
||||
switch(driverId)
|
||||
{
|
||||
case DIRECTX9: _driverType = video::EDT_DIRECT3D9;break;
|
||||
case DIRECTX8: _driverType = video::EDT_DIRECT3D8;break;
|
||||
case OPENGL: _driverType = video::EDT_OPENGL; break;
|
||||
case SOFTWARE: _driverType = video::EDT_SOFTWARE; break;
|
||||
case BURNINGSVIDEO: _driverType = video::EDT_BURNINGSVIDEO;break;
|
||||
case NULLDEVICE: _driverType = video::EDT_NULL; break;
|
||||
default: _driverType = video::EDT_BURNINGSVIDEO; // if no valid driver detected, use software
|
||||
case DIRECTX9: _driverType = video::EDT_DIRECT3D9; break;
|
||||
case DIRECTX8: _driverType = video::EDT_DIRECT3D8; break;
|
||||
case OPENGL: _driverType = video::EDT_OPENGL; break;
|
||||
case SOFTWARE: _driverType = video::EDT_SOFTWARE; break;
|
||||
case BURNINGSVIDEO: _driverType = video::EDT_BURNINGSVIDEO; break;
|
||||
case NULLDEVICE: _driverType = video::EDT_NULL; break;
|
||||
default: _driverType = video::EDT_BURNINGSVIDEO; // if no valid driver detected, use software
|
||||
}
|
||||
|
||||
// TODO: add support for changing driver during runtime?
|
||||
|
||||
@ -140,6 +140,7 @@ void RealmSession::ClearSocket(void)
|
||||
void RealmSession::SetMustDie(void)
|
||||
{
|
||||
_mustdie = true;
|
||||
logdebug("RealmSession: Must die now.");
|
||||
}
|
||||
|
||||
bool RealmSession::MustDie(void)
|
||||
|
||||
@ -118,6 +118,7 @@ void WorldSession::SendCastSpell(uint32 spellid, bool nocheck)
|
||||
ByteBuffer temp;
|
||||
uint16 flags=TARGET_FLAG_SELF; // target mask. spellcast implementeation needs to be changed if TARGET_MASK_SELF is != 0
|
||||
packet << spellid;
|
||||
packet << (uint8)0; // unk
|
||||
if(my->GetTarget() != GetGuid()) // self cast?
|
||||
{
|
||||
if(target->GetTypeId() == TYPEID_PLAYER || target->GetTypeId() == TYPEID_UNIT)
|
||||
@ -180,3 +181,4 @@ void WorldSession::SendWhoListRequest(uint32 minlvl, uint32 maxlvl, uint32 racem
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
#include "Item.h"
|
||||
|
||||
// increase this number whenever you change something that makes old files unusable
|
||||
uint32 ITEMPROTOTYPES_CACHE_VERSION = 0x00000001;
|
||||
uint32 ITEMPROTOTYPES_CACHE_VERSION = 0x00000002;
|
||||
|
||||
PlayerNameCache::~PlayerNameCache()
|
||||
{
|
||||
@ -261,6 +261,7 @@ void ItemProtoCache_InsertDataToSession(WorldSession *session)
|
||||
buf >> proto->socketBonus;
|
||||
buf >> proto->GemProperties;
|
||||
buf >> proto->ExtendedCost;
|
||||
buf >> proto->RequiredArenaRank;
|
||||
buf >> proto->RequiredDisenchantSkill;
|
||||
buf >> proto->ArmorDamageModifier;
|
||||
|
||||
@ -378,6 +379,7 @@ void ItemProtoCache_WriteDataToCache(WorldSession *session)
|
||||
buf << proto->socketBonus;
|
||||
buf << proto->GemProperties;
|
||||
buf << proto->ExtendedCost;
|
||||
buf << proto->RequiredArenaRank;
|
||||
buf << proto->RequiredDisenchantSkill;
|
||||
buf << proto->ArmorDamageModifier;
|
||||
|
||||
|
||||
@ -218,22 +218,25 @@ enum INVENTORY_CLASS
|
||||
// but this value used in code as implementation workaround
|
||||
enum ITEM_SUBCLASS_CONSUMABLE
|
||||
{
|
||||
ITEM_SUBCLASS_FOOD = 1,
|
||||
ITEM_SUBCLASS_LIQUID = 2,
|
||||
ITEM_SUBCLASS_POTION = 3,
|
||||
ITEM_SUBCLASS_POTION = 1,
|
||||
ITEM_SUBCLASS_ELIXIR = 2,
|
||||
ITEM_SUBCLASS_FLASK = 3,
|
||||
ITEM_SUBCLASS_SCROLL = 4,
|
||||
ITEM_SUBCLASS_BANDAGE = 5,
|
||||
ITEM_SUBCLASS_HEALTHSTONE = 6,
|
||||
ITEM_SUBCLASS_COMBAT_EFFECT = 7
|
||||
ITEM_SUBCLASS_FOOD = 5,
|
||||
ITEM_SUBCLASS_ITEM_ENHANCEMENT = 6,
|
||||
ITEM_SUBCLASS_BANDAGE = 7
|
||||
};
|
||||
|
||||
enum ITEM_SUBCLASS_CONTAINER
|
||||
{
|
||||
ITEM_SUBCLASS_CONTAINER = 0,
|
||||
ITEM_SUBCLASS_SOUL_CONTAINER = 1,
|
||||
ITEM_SUBCLASS_HERB_CONTAINER = 2,
|
||||
ITEM_SUBCLASS_ENCHANTING_CONTAINER = 3,
|
||||
ITEM_SUBCLASS_ENGINEERING_CONTAINER = 4
|
||||
ITEM_SUBCLASS_CONTAINER = 0,
|
||||
ITEM_SUBCLASS_SOUL_CONTAINER = 1,
|
||||
ITEM_SUBCLASS_HERB_CONTAINER = 2,
|
||||
ITEM_SUBCLASS_ENCHANTING_CONTAINER = 3,
|
||||
ITEM_SUBCLASS_ENGINEERING_CONTAINER = 4,
|
||||
ITEM_SUBCLASS_GEM_CONTAINER = 5,
|
||||
ITEM_SUBCLASS_MINING_CONTAINER = 6,
|
||||
ITEM_SUBCLASS_LEATHERWORKING_CONTAINER = 7
|
||||
};
|
||||
|
||||
enum INVENTORY_SUBCLASS_WEAPON
|
||||
@ -283,7 +286,16 @@ enum ITEM_SUBCLASS_TRADE_GOODS
|
||||
ITEM_SUBCLASS_TRADE_GOODS = 0,
|
||||
ITEM_SUBCLASS_PARTS = 1,
|
||||
ITEM_SUBCLASS_EXPLOSIVES = 2,
|
||||
ITEM_SUBCLASS_DEVICES = 3
|
||||
ITEM_SUBCLASS_DEVICES = 3,
|
||||
ITEM_SUBCLASS_JEWELCRAFTING = 4,
|
||||
ITEM_SUBCLASS_CLOTH = 5,
|
||||
ITEM_SUBCLASS_LEATHER = 6,
|
||||
ITEM_SUBCLASS_METAL_STONE = 7,
|
||||
ITEM_SUBCLASS_MEAT = 8,
|
||||
ITEM_SUBCLASS_HERB = 9,
|
||||
ITEM_SUBCLASS_ELEMENTAZL = 10,
|
||||
ITEM_SUBCLASS_TRADE_GOODS_OTHER = 11,
|
||||
ITEM_SUBCLASS_ENCHANTING = 12
|
||||
};
|
||||
|
||||
enum ITEM_SUBCLASS_BOOK
|
||||
@ -399,6 +411,7 @@ struct ItemProto
|
||||
uint32 socketBonus;
|
||||
uint32 GemProperties;
|
||||
uint32 ExtendedCost;
|
||||
uint32 RequiredArenaRank;
|
||||
uint32 RequiredDisenchantSkill;
|
||||
float ArmorDamageModifier;
|
||||
};
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -50,8 +50,6 @@ enum OpCodes
|
||||
CMSG_DESTROYMONSTER = 18,
|
||||
CMSG_CREATEITEM = 19,
|
||||
CMSG_CREATEGAMEOBJECT = 20,
|
||||
|
||||
//CMSG_MAKEMONSTERATTACKME = 21, //OBSOLETE
|
||||
CMSG_MAKEMONSTERATTACKME_OBSOLETE = 21,
|
||||
CMSG_MAKEMONSTERATTACKGUID = 22,
|
||||
CMSG_ENABLEDEBUGCOMBATLOGGING_OBSOLETE = 23,
|
||||
@ -96,7 +94,7 @@ enum OpCodes
|
||||
SMSG_NEW_WORLD = 62,
|
||||
SMSG_TRANSFER_PENDING = 63,
|
||||
SMSG_TRANSFER_ABORTED = 64,
|
||||
SMSG_CHARACTER_LOGIN_FAILED = 65, // kick client to character select screen and show "World server is down".
|
||||
SMSG_CHARACTER_LOGIN_FAILED = 65, // kick client to character select screen and show "World server is down".
|
||||
SMSG_LOGIN_SETTIMESPEED = 66,
|
||||
SMSG_GAMETIME_UPDATE = 67,
|
||||
CMSG_GAMETIME_SET = 68,
|
||||
@ -343,14 +341,12 @@ enum OpCodes
|
||||
SMSG_COOLDOWN_EVENT = 309,
|
||||
CMSG_CANCEL_AURA = 310,
|
||||
SMSG_UPDATE_AURA_DURATION = 311,
|
||||
SMSG_PET_CAST_FAILED = 312, // Your pet is in combat
|
||||
SMSG_PET_CAST_FAILED = 312, // Your pet is in combat
|
||||
MSG_CHANNEL_START = 313,
|
||||
MSG_CHANNEL_UPDATE = 314,
|
||||
CMSG_CANCEL_CHANNELLING = 315,
|
||||
SMSG_AI_REACTION = 316,
|
||||
SMSG_AI_REACTION = 316, // may be monser attack sound?
|
||||
CMSG_SET_SELECTION = 317,
|
||||
|
||||
//CMSG_SET_TARGET = 318, //OBSOLETE
|
||||
CMSG_SET_TARGET_OBSOLETE = 318,
|
||||
CMSG_UNUSED = 319,
|
||||
CMSG_UNUSED2 = 320,
|
||||
@ -399,21 +395,19 @@ enum OpCodes
|
||||
SMSG_DUEL_WINNER = 363,
|
||||
CMSG_DUEL_ACCEPTED = 364,
|
||||
CMSG_DUEL_CANCELLED = 365,
|
||||
SMSG_MOUNTRESULT = 366, // 0 - can't mount that unit, 1 - mount too far away, 2 - already mounted, 3 - that unit can't be mounted, 4 - that mount is not our pet, 5 - unknown mount error, 6 - can't mount while looting, 7 - cant mount because your race, 8 - shapeshifted, 9 - you dismount before continuing
|
||||
SMSG_DISMOUNTRESULT = 367, // 0 - int err, don't have pet to dismount, 1 - not mounted, 2 - int err, dismounting a non-pet
|
||||
SMSG_MOUNTRESULT = 366, // 0 - can't mount that unit, 1 - mount too far away, 2 - already mounted, 3 - that unit can't be mounted, 4 - that mount is not our pet, 5 - unknown mount error, 6 - can't mount while looting, 7 - cant mount because your race, 8 - shapeshifted, 9 - you dismount before continuing
|
||||
SMSG_DISMOUNTRESULT = 367, // 0 - int err, don't have pet to dismount, 1 - not mounted, 2 - int err, dismounting a non-pet
|
||||
SMSG_PUREMOUNT_CANCELLED_OBSOLETE = 368,
|
||||
CMSG_MOUNTSPECIAL_ANIM = 369,
|
||||
SMSG_MOUNTSPECIAL_ANIM = 370,
|
||||
SMSG_PET_TAME_FAILURE = 371, // uint32: 0 - Unknown taming error, 1 - Creature not found, 2 - too many pets, 3 - creature already controlled, 4 - creature not tameable, 5 - have active summon, 6 - can't tame, 7 - don't have pet to summon, 8 - internal pet error, 9 - high level, 10 - your pet is dead, 11 - your pet is not dead
|
||||
SMSG_PET_TAME_FAILURE = 371, // uint32: 0 - Unknown taming error, 1 - Creature not found, 2 - too many pets, 3 - creature already controlled, 4 - creature not tameable, 5 - have active summon, 6 - can't tame, 7 - don't have pet to summon, 8 - internal pet error, 9 - high level, 10 - your pet is dead, 11 - your pet is not dead
|
||||
CMSG_PET_SET_ACTION = 372,
|
||||
CMSG_PET_ACTION = 373,
|
||||
CMSG_PET_ABANDON = 374,
|
||||
CMSG_PET_RENAME = 375,
|
||||
SMSG_PET_NAME_INVALID = 376, // Error, invalid name entered.
|
||||
SMSG_PET_NAME_INVALID = 376, // Error, invalid name entered.
|
||||
SMSG_PET_SPELLS = 377,
|
||||
|
||||
//CMSG_PET_CAST_SPELL_OBSOLETE = 378, //OBSOLETE
|
||||
SMSG_PET_MODE = 378, // uint64 pet_guid + uint32 flags?
|
||||
SMSG_PET_MODE = 378, // uint64 pet_guid + uint32 flags?
|
||||
CMSG_GOSSIP_HELLO = 379,
|
||||
CMSG_GOSSIP_SELECT_OPTION = 380,
|
||||
SMSG_GOSSIP_MESSAGE = 381,
|
||||
@ -473,7 +467,7 @@ enum OpCodes
|
||||
SMSG_TRAINER_BUY_SUCCEEDED = 435,
|
||||
SMSG_TRAINER_BUY_FAILED = 436,
|
||||
CMSG_BINDER_ACTIVATE = 437,
|
||||
SMSG_PLAYERBINDERROR = 438, // You already bound there.
|
||||
SMSG_PLAYERBINDERROR = 438, // You already bound there.
|
||||
CMSG_BANKER_ACTIVATE = 439,
|
||||
SMSG_SHOW_BANK = 440,
|
||||
CMSG_BUY_BANK_SLOT = 441,
|
||||
@ -514,7 +508,7 @@ enum OpCodes
|
||||
CMSG_PING = 476,
|
||||
SMSG_PONG = 477,
|
||||
SMSG_CLEAR_COOLDOWN = 478,
|
||||
SMSG_GAMEOBJECT_PAGETEXT = 479, // uint64 guid
|
||||
SMSG_GAMEOBJECT_PAGETEXT = 479, // uint64 guid
|
||||
CMSG_SETSHEATHED = 480,
|
||||
SMSG_COOLDOWN_CHEAT = 481,
|
||||
SMSG_SPELL_DELAYED = 482,
|
||||
@ -522,19 +516,15 @@ enum OpCodes
|
||||
SMSG_PLAYER_MACRO_OBSOLETE = 484,
|
||||
CMSG_GHOST = 485,
|
||||
CMSG_GM_INVIS = 486,
|
||||
|
||||
//CMSG_SCREENSHOT = 487, //OBSOLETE
|
||||
SMSG_INVALID_PROMOTION_CODE = 487, // Couldn't validate code, please try again.
|
||||
SMSG_INVALID_PROMOTION_CODE = 487, // Couldn't validate code, please try again.
|
||||
MSG_GM_BIND_OTHER = 488,
|
||||
MSG_GM_SUMMON = 489,
|
||||
SMSG_ITEM_TIME_UPDATE = 490, // uint64 guid + uint32 time
|
||||
SMSG_ITEM_TIME_UPDATE = 490, // uint64 guid + uint32 time
|
||||
SMSG_ITEM_ENCHANT_TIME_UPDATE = 491,
|
||||
SMSG_AUTH_CHALLENGE = 492,
|
||||
CMSG_AUTH_SESSION = 493,
|
||||
SMSG_AUTH_RESPONSE = 494,
|
||||
MSG_GM_SHOWLABEL = 495,
|
||||
|
||||
//MSG_ADD_DYNAMIC_TARGET = 496, //OBSOLETE
|
||||
MSG_ADD_DYNAMIC_TARGET_OBSOLETE = 496,
|
||||
MSG_SAVE_GUILD_EMBLEM = 497,
|
||||
MSG_TABARDVENDOR_ACTIVATE = 498,
|
||||
@ -576,7 +566,7 @@ enum OpCodes
|
||||
MSG_CORPSE_QUERY = 534,
|
||||
CMSG_GMTICKET_DELETETICKET = 535,
|
||||
SMSG_GMTICKET_DELETETICKET = 536,
|
||||
SMSG_CHAT_WRONG_FACTION = 537, // You can only whisper to the members of your alliance.
|
||||
SMSG_CHAT_WRONG_FACTION = 537, // You can only whisper to the members of your alliance.
|
||||
CMSG_GMTICKET_SYSTEMSTATUS = 538,
|
||||
SMSG_GMTICKET_SYSTEMSTATUS = 539,
|
||||
CMSG_SPIRIT_HEALER_ACTIVATE = 540,
|
||||
@ -634,8 +624,6 @@ enum OpCodes
|
||||
SMSG_SPELLNONMELEEDAMAGELOG = 592,
|
||||
CMSG_LEARN_TALENT = 593,
|
||||
SMSG_RESURRECT_FAILED = 594,
|
||||
|
||||
//CMSG_ENABLE_PVP = 595, //OBSOLETE
|
||||
CMSG_TOGGLE_PVP = 595,
|
||||
SMSG_ZONE_UNDER_ATTACK = 596,
|
||||
MSG_AUCTION_HELLO = 597,
|
||||
@ -680,8 +668,6 @@ enum OpCodes
|
||||
SMSG_DAMAGE_CALC_LOG = 636,
|
||||
CMSG_ENABLE_DAMAGE_LOG = 637,
|
||||
CMSG_GROUP_CHANGE_SUB_GROUP = 638,
|
||||
|
||||
//SMSG_RAID_MEMBER_STATS = 639, //OBSOLETE
|
||||
CMSG_REQUEST_PARTY_MEMBER_STATS = 639,
|
||||
CMSG_GROUP_SWAP_SUB_GROUP = 640,
|
||||
CMSG_RESET_FACTION_CHEAT = 641,
|
||||
@ -689,7 +675,7 @@ enum OpCodes
|
||||
CMSG_AUTOBANK_ITEM = 643,
|
||||
MSG_QUERY_NEXT_MAIL_TIME = 644,
|
||||
SMSG_RECEIVED_MAIL = 645,
|
||||
SMSG_RAID_GROUP_ONLY = 646, // You are not in this instance group. You will be teleported to %s in %u Minites. uint32 time(milliseconds)+uint32 unk
|
||||
SMSG_RAID_GROUP_ONLY = 646, // You are not in this instance group. You will be teleported to %s in %u Minites. uint32 time(milliseconds)+uint32 unk
|
||||
CMSG_SET_DURABILITY_CHEAT = 647,
|
||||
CMSG_SET_PVP_RANK_CHEAT = 648,
|
||||
CMSG_ADD_PVP_MEDAL_CHEAT = 649,
|
||||
@ -704,11 +690,11 @@ enum OpCodes
|
||||
CMSG_MEETINGSTONE_JOIN = 658,
|
||||
CMSG_MEETINGSTONE_LEAVE = 659,
|
||||
CMSG_MEETINGSTONE_CHEAT = 660,
|
||||
SMSG_MEETINGSTONE_SETQUEUE = 661, // You have left the queue to join a party for %s.
|
||||
SMSG_MEETINGSTONE_SETQUEUE = 661, // You have left the queue to join a party for %s.
|
||||
CMSG_MEETINGSTONE_INFO = 662,
|
||||
SMSG_MEETINGSTONE_COMPLETE = 663, // Your group is complete, you have left the LFG matchmaking system.
|
||||
SMSG_MEETINGSTONE_IN_PROGRESS = 664, // You still seeking more members through LFG matchmaking system., empty?
|
||||
SMSG_MEETINGSTONE_MEMBER_ADDED = 665, // %s has been added to the group by the LFG matchmaking system.
|
||||
SMSG_MEETINGSTONE_COMPLETE = 663, // Your group is complete, you have left the LFG matchmaking system.
|
||||
SMSG_MEETINGSTONE_IN_PROGRESS = 664, // You still seeking more members through LFG matchmaking system., empty?
|
||||
SMSG_MEETINGSTONE_MEMBER_ADDED = 665, // %s has been added to the group by the LFG matchmaking system.
|
||||
CMSG_GMTICKETSYSTEM_TOGGLE = 666,
|
||||
CMSG_CANCEL_GROWTH_AURA = 667,
|
||||
SMSG_CANCEL_AUTO_REPEAT = 668,
|
||||
@ -722,30 +708,28 @@ enum OpCodes
|
||||
SMSG_LOOT_MASTER_LIST = 676,
|
||||
SMSG_SET_FORCED_REACTIONS = 677,
|
||||
SMSG_SPELL_FAILED_OTHER = 678,
|
||||
SMSG_GAMEOBJECT_RESET_STATE = 679, // uint64 guid
|
||||
SMSG_GAMEOBJECT_RESET_STATE = 679, // uint64 guid
|
||||
CMSG_REPAIR_ITEM = 680,
|
||||
SMSG_CHAT_PLAYER_NOT_FOUND = 681,
|
||||
MSG_TALENT_WIPE_CONFIRM = 682,
|
||||
SMSG_SUMMON_REQUEST = 683, // uint64 guid + uint32 area/zoneid + uint32 time(milliseconds?)
|
||||
SMSG_SUMMON_REQUEST = 683, // uint64 guid + uint32 area/zoneid + uint32 time(milliseconds?)
|
||||
CMSG_SUMMON_RESPONSE = 684,
|
||||
MSG_MOVE_TOGGLE_GRAVITY_CHEAT = 685,
|
||||
SMSG_MONSTER_MOVE_TRANSPORT = 686,
|
||||
SMSG_PET_BROKEN = 687, // Your pet has run away (:D)
|
||||
SMSG_PET_BROKEN = 687, // Your pet has run away (:D)
|
||||
MSG_MOVE_FEATHER_FALL = 688,
|
||||
MSG_MOVE_WATER_WALK = 689,
|
||||
CMSG_SERVER_BROADCAST = 690,
|
||||
CMSG_SELF_RES = 691, // only if PLAYER_SELF_RES_SPELL field != 0
|
||||
SMSG_FEIGN_DEATH_RESISTED = 692, // Resisted
|
||||
CMSG_SELF_RES = 691, // only if PLAYER_SELF_RES_SPELL field != 0
|
||||
SMSG_FEIGN_DEATH_RESISTED = 692, // Resisted
|
||||
CMSG_RUN_SCRIPT = 693,
|
||||
SMSG_SCRIPT_MESSAGE = 694,
|
||||
SMSG_DUEL_COUNTDOWN = 695,
|
||||
SMSG_AREA_TRIGGER_MESSAGE = 696,
|
||||
CMSG_TOGGLE_HELM = 697,
|
||||
CMSG_TOGGLE_CLOAK = 698,
|
||||
|
||||
//SMSG_SPELL_REFLECTED = 699, //OBSOLETE
|
||||
SMSG_MEETINGSTONE_JOINFAILED = 699, // 1 - must be party leader, 3 - can't use while in raid
|
||||
SMSG_PLAYER_SKINNED = 700, // uint8 0x00 Insignia taken - You can only resurrect at the graveyard
|
||||
SMSG_MEETINGSTONE_JOINFAILED = 699, // 1 - must be party leader, 3 - can't use while in raid
|
||||
SMSG_PLAYER_SKINNED = 700, // uint8 0x00 Insignia taken - You can only resurrect at the graveyard
|
||||
SMSG_DURABILITY_DAMAGE_DEATH = 701,
|
||||
CMSG_SET_EXPLORATION = 702,
|
||||
CMSG_SET_ACTIONBAR_TOGGLES = 703,
|
||||
@ -755,12 +739,12 @@ enum OpCodes
|
||||
SMSG_UPDATE_WORLD_STATE = 707,
|
||||
CMSG_ITEM_NAME_QUERY = 708,
|
||||
SMSG_ITEM_NAME_QUERY_RESPONSE = 709,
|
||||
SMSG_PET_ACTION_FEEDBACK = 710, // uint8 0x04 - unk, 0x01 - pet dead, 0x2 - no target, 0x3 can't attack
|
||||
SMSG_PET_ACTION_FEEDBACK = 710, // uint8 0x04 - unk, 0x01 - pet dead, 0x2 - no target, 0x3 can't attack
|
||||
CMSG_CHAR_RENAME = 711,
|
||||
SMSG_CHAR_RENAME = 712,
|
||||
CMSG_MOVE_SPLINE_DONE = 713,
|
||||
CMSG_MOVE_FALL_RESET = 714,
|
||||
SMSG_INSTANCE_SAVE_CREATED = 715, // You are now saved to this instance
|
||||
SMSG_INSTANCE_SAVE_CREATED = 715, // You are now saved to this instance
|
||||
SMSG_RAID_INSTANCE_INFO = 716,
|
||||
CMSG_REQUEST_RAID_INFO = 717,
|
||||
CMSG_MOVE_TIME_SKIPPED = 718,
|
||||
@ -784,14 +768,12 @@ enum OpCodes
|
||||
MSG_PVP_LOG_DATA = 736,
|
||||
CMSG_LEAVE_BATTLEFIELD = 737,
|
||||
CMSG_AREA_SPIRIT_HEALER_QUERY = 738,
|
||||
CMSG_AREA_SPIRIT_HEALER_QUEUE = 739, // WTF?
|
||||
SMSG_AREA_SPIRIT_HEALER_TIME = 740, // uint64 guid+uint32 time?
|
||||
//CMSG_GM_UNTEACH = 739, // WTF?
|
||||
//SMSG_HARDWARE_SURVEY_REQUEST = 740, // WTF?
|
||||
CMSG_HARDWARE_SURVEY_RESULTS = 741,
|
||||
CMSG_AREA_SPIRIT_HEALER_QUEUE = 739,
|
||||
SMSG_AREA_SPIRIT_HEALER_TIME = 740, // uint64 guid+uint32 time
|
||||
CMSG_GM_UNTEACH = 741,
|
||||
SMSG_WARDEN_DATA = 742,
|
||||
CMSG_WARDEN_DATA = 743,
|
||||
SMSG_GROUP_JOINED_BATTLEGROUND = 744, // uint32 0xfffffffc, probably different error messages...
|
||||
SMSG_GROUP_JOINED_BATTLEGROUND = 744, // uint32 0xfffffffc, probably different error messages...
|
||||
MSG_BATTLEGROUND_PLAYER_POSITIONS = 745,
|
||||
CMSG_PET_STOP_ATTACK = 746,
|
||||
SMSG_BINDER_CONFIRM = 747,
|
||||
@ -809,27 +791,27 @@ enum OpCodes
|
||||
SMSG_MINIGAME_STATE = 759,
|
||||
CMSG_MINIGAME_MOVE = 760,
|
||||
SMSG_MINIGAME_MOVE_FAILED = 761,
|
||||
SMSG_INSTANCE_RESET_SCHEDULED = 762, // WARNING! %s is scheduled to reset in %u minutes! and other messages...
|
||||
SMSG_INSTANCE_RESET_SCHEDULED = 762, // WARNING! %s is scheduled to reset in %u minutes! and other messages...
|
||||
SMSG_COMPRESSED_MOVE = 763,
|
||||
CMSG_GUILD_CHANGEINFO = 764,
|
||||
SMSG_UNKNOWN_765 = 765, // Trial accounts can not send unlimited tells, you must wait before you can send tells to more players.
|
||||
SMSG_SET_MOVE_SPEED = 766, // GUID + float speed, move speed, except swim/turn/fly
|
||||
SMSG_SET_RUN_BACK_SPEED = 767, // GUID + float speed, run back speed
|
||||
SMSG_SET_SWIM_SPEED = 768, // GUID + float speed, swim and swim back speed
|
||||
SMSG_TRIAL_RESTRICTED = 765, // Trial accounts cannot send unlimited tells, you must wait before you can send tells to more players.
|
||||
SMSG_SET_MOVE_SPEED = 766, // GUID + float speed, move speed, except swim/turn/fly
|
||||
SMSG_SET_RUN_BACK_SPEED = 767, // GUID + float speed, run back speed
|
||||
SMSG_SET_SWIM_SPEED = 768, // GUID + float speed, swim and swim back speed
|
||||
// 769
|
||||
SMSG_SET_SWIM_BACK_SPEED = 770, // swim back speed
|
||||
SMSG_SET_TURN_RATE = 771, // turn rate (note: client crashes if fly mode enabled, and turn rate = 0)
|
||||
SMSG_UNKNOWN_772 = 772, // packed GUID
|
||||
SMSG_UNKNOWN_773 = 773, // set movement flag 0x20000000
|
||||
SMSG_UNKNOWN_774 = 774, // stop effect of 773 opcode
|
||||
SMSG_UNKNOWN_775 = 775, // movement related, looks like hover, movement flag 0x40000000, we can't jump if we are lands
|
||||
SMSG_UNKNOWN_776 = 776, // stop effect of 775 opcode
|
||||
SMSG_MOVE_SET_WATERWALK = 777, // packed GUID, set movement flag 0x10000000, waterwalking...
|
||||
SMSG_MOVE_STOP_WATERWALK = 778, // packed GUID, stop effect of 777 opcode
|
||||
SMSG_UNKNOWN_779 = 779, // packed guid, change animation to swim/fly like
|
||||
SMSG_UNKNOWN_780 = 780, // packed guid
|
||||
SMSG_MOVE_STOP_WALK = 781, // packed guid, remove 0x100 movement flag (walk)
|
||||
SMSG_MOVE_START_WALK = 782, // set 0x100 movement flag (walk)
|
||||
SMSG_SET_SWIM_BACK_SPEED = 770, // swim back speed
|
||||
SMSG_SET_TURN_RATE = 771, // turn rate (note: client crashes if fly mode enabled, and turn rate = 0)
|
||||
SMSG_UNKNOWN_772 = 772, // packed GUID
|
||||
SMSG_UNKNOWN_773 = 773, // set movement flag 0x20000000 (safe fall)
|
||||
SMSG_UNKNOWN_774 = 774, // stop effect of 773 opcode
|
||||
SMSG_UNKNOWN_775 = 775, // movement related, looks like hover, movement flag 0x40000000, we can't jump if we are lands
|
||||
SMSG_UNKNOWN_776 = 776, // stop effect of 775 opcode
|
||||
SMSG_MOVE_SET_WATERWALK = 777, // packed GUID, set movement flag 0x10000000, waterwalking...
|
||||
SMSG_MOVE_STOP_WATERWALK = 778, // packed GUID, stop effect of 777 opcode
|
||||
SMSG_UNKNOWN_779 = 779, // packed guid, change animation to swim/fly like
|
||||
SMSG_UNKNOWN_780 = 780, // packed guid
|
||||
SMSG_MOVE_STOP_WALK = 781, // packed guid, remove 0x100 movement flag (walk)
|
||||
SMSG_MOVE_START_WALK = 782, // set 0x100 movement flag (walk)
|
||||
// 783
|
||||
// 784
|
||||
// 785
|
||||
@ -840,32 +822,32 @@ enum OpCodes
|
||||
// 790
|
||||
CMSG_FIELD_WATCHED_FACTION_INACTIVE = 791,
|
||||
CMSG_FIELD_WATCHED_FACTION_SHOW_BAR = 792,
|
||||
SMSG_UNKNOWN_793 = 793, // packed guid + uint32
|
||||
SMSG_UNKNOWN_794 = 794, // packed guid, movement related, set 0x1000 movement flag, all speed to 0, except turn rate
|
||||
SMSG_UNKNOWN_793 = 793, // packed guid + uint32 unk
|
||||
SMSG_UNKNOWN_794 = 794, // packed guid, movement related, set 0x1000 movement flag, all speed to 0, except turn rate
|
||||
// 795
|
||||
SMSG_UNKNOWN_796 = 796, // uint64, guid?
|
||||
CMSG_RESET_INSTANCES = 797, // reset instances, empty
|
||||
SMSG_RESET_INSTANCES_RESULT = 798, // uint32 mapid, chat message: %s has been reset.
|
||||
// 799
|
||||
SMSG_UNKNOWN_800 = 800, // uint32 mapid, instance related
|
||||
MSG_RAID_ICON_TARGET = 801, // uint8+uint8+uint64 guid
|
||||
MSG_RAID_READY_CHECK = 802, // uint64+uint8
|
||||
SMSG_UNKNOWN_796 = 796, // uint64, guid, chat related?
|
||||
CMSG_RESET_INSTANCES = 797, // reset instances, empty
|
||||
SMSG_RESET_INSTANCES_SUCCESS = 798, // uint32 mapid, chat message: %s has been reset.
|
||||
SMSG_RESET_INSTANCES_FAILED = 799, // uint32 reason, uint32 mapid
|
||||
SMSG_UNKNOWN_800 = 800, // uint32 mapid, instance related (save?)
|
||||
MSG_RAID_ICON_TARGET = 801, // uint8+uint8+uint64 guid or only uint8(0x01)
|
||||
MSG_RAID_READY_CHECK = 802, // uint64+uint8
|
||||
// 803
|
||||
SMSG_AI_UNKNOWN = 804, // GUID + uint32, looks like SMSG_AI_REACTION
|
||||
SMSG_UNKNOWN_805 = 805, // uint32 unk + x, y, z
|
||||
SMSG_PET_ACTION_SOUND = 804, // GUID + uint32, looks like SMSG_AI_REACTION (pet action sound?)
|
||||
SMSG_PET_DISMISS_SOUND = 805, // uint32 unk + x, y, z (pet dismiss sound?)
|
||||
// 806
|
||||
// 807
|
||||
SMSG_GM_SURVEY_REQUEST = 808, // uint32, 1 - causes client get ticket request, 2 - hide, 3 - show
|
||||
MSG_SET_DUNGEON_DIFFICULTY = 809, // uint32+uint32+uint32
|
||||
CMSG_GM_SURVEY_RESULTS = 810,
|
||||
SMSG_UNKNOWN_811 = 811, // uint32, 0x0, SMSG_INSTANCE_RESET_ACTIVATE ?
|
||||
SMSG_GM_SURVEY_REQUEST = 808, // uint32, 1 - causes client get ticket request, 2 - hide, 3 - show
|
||||
MSG_SET_DUNGEON_DIFFICULTY = 809, // uint32+uint32+uint32
|
||||
CMSG_GM_SURVEY_RESULTS = 810, // script function named GMSurveySubmit()
|
||||
SMSG_UNKNOWN_811 = 811, // uint32, 0x0, SMSG_INSTANCE_RESET_ACTIVATE ?
|
||||
// 812
|
||||
// 813
|
||||
// 814
|
||||
SMSG_UNKNOWN_815 = 815, // spell related, uint64 guid + spellid
|
||||
SMSG_UNKNOWN_816 = 816, // spell related, uint64 guid + spellid + uint32 unk + uint64 guid (target?)
|
||||
SMSG_SPELL_INSTA_KILL_SELF = 815, // spell related, uint64 guid + spellid (You are killed by %s(spell_name))
|
||||
SMSG_UNKNOWN_816 = 816, // spell related, uint64 guid + spellid + uint32 count + for(count) uint64 guid (target?)
|
||||
// 817
|
||||
SMSG_UNKNOWN_818 = 818, // 2.0.8, received before server MOTD, strange regexp sequence, looks like anti spam filter for chat messages...
|
||||
SMSG_ANTISPAM = 818, // 2.0.8, received before server MOTD, strange regexp sequence, looks like anti spam filter for chat messages...
|
||||
// 819
|
||||
// 820
|
||||
// 821
|
||||
@ -873,39 +855,39 @@ enum OpCodes
|
||||
// 823
|
||||
// 824
|
||||
// 825
|
||||
SMSG_OUTDOORPVP_NOTIFY = 826, // looks like chat packets
|
||||
SMSG_OUTDOORPVP_NOTIFY2 = 827, // may be it's changed to 826?
|
||||
SMSG_OUTDOORPVP_NOTIFY = 826, // looks like chat packets
|
||||
// 827
|
||||
// 828
|
||||
SMSG_MOTD = 829, // server MOTD message, uint32 + message
|
||||
SMSG_MOTD = 829, // server MOTD message, uint32 + message
|
||||
// 830
|
||||
// 831
|
||||
// 832
|
||||
SMSG_UNKNOWN_833 = 833, // teleport
|
||||
SMSG_UNKNOWN_834 = 834, // teleport
|
||||
SMSG_FLY_MODE_START = 835, // packed guid + uint32, start fly
|
||||
SMSG_FLY_MODE_STOP = 836, // packed guid + uint32, stop fly
|
||||
CMSG_MOVE_FLY_MODE_CHANGE_ACK = 837, // movement related, fly on/off ack
|
||||
CMSG_MOVE_FLY_STATE_CHANGE = 838, // movement related, fly start/stop(land) ack, may be MSG
|
||||
CMSG_SOCKET_ITEM = 839, // click on "Socket Gems" button in Jewelcrafting UI, contains uint64 item guid + 3 x uint64 gems guid's
|
||||
// 840
|
||||
SMSG_ARENA_TEAM_COMMAND_RESULT = 841, // uint32(5)+uint16(0)+uint32(9) You not in arena team that size
|
||||
SMSG_UNKNOWN_833 = 833, // teleport/movement opcode
|
||||
SMSG_UNKNOWN_834 = 834, // teleport/movement opcode
|
||||
SMSG_FLY_MODE_START = 835, // packed guid + uint32, start fly
|
||||
SMSG_FLY_MODE_STOP = 836, // packed guid + uint32, stop fly
|
||||
CMSG_MOVE_FLY_MODE_CHANGE_ACK = 837, // movement related, fly on/off ack
|
||||
MSG_MOVE_FLY_STATE_CHANGE = 838, // movement related, fly start/stop(land) ack, may be MSG
|
||||
CMSG_SOCKET_ITEM = 839, // click on "Socket Gems" button in Jewelcrafting UI, contains uint64 item guid + 3 x uint64 gems guid's
|
||||
// 840, CMSG?
|
||||
SMSG_ARENA_TEAM_COMMAND_RESULT = 841, // uint32 command, name1, name2, uint32 errorcode
|
||||
// 842
|
||||
CMSG_ARENA_TEAM_QUERY = 843,
|
||||
SMSG_ARENA_TEAM_QUERY_RESPONSE = 844,
|
||||
CMSG_ARENA_TEAM_ROSTER = 845,
|
||||
SMSG_ARENA_TEAM_ROSTER = 846,
|
||||
CMSG_ARENA_TEAM_ADD_MEMBER = 847,
|
||||
CMSG_ARENA_TEAM_INVITE_BYNAME = 847,
|
||||
SMSG_ARENA_TEAM_INVITE = 848,
|
||||
CMSG_ARENA_TEAM_INVITE_ACCEPT = 849,
|
||||
CMSG_ARENA_TEAM_INVITE_DECLINE = 850,
|
||||
CMSG_ARENA_TEAM_ACCEPT = 849,
|
||||
CMSG_ARENA_TEAM_DECLINE = 850,
|
||||
CMSG_ARENA_TEAM_LEAVE = 851,
|
||||
CMSG_ARENA_TEAM_REMOVE_FROM_TEAM = 852,
|
||||
CMSG_ARENA_TEAM_UNINVITE_BYNAME = 852,
|
||||
CMSG_ARENA_TEAM_DISBAND = 853,
|
||||
CMSG_ARENA_TEAM_PROMOTE_TO_CAPTAIN = 854, // also must be demote opcode...
|
||||
SMSG_UNKNOWN_855 = 855, // guild related...
|
||||
// 856
|
||||
MSG_MOVE_START_FLY_UP = 857, // movement related, fly up, possible MSG
|
||||
MSG_MOVE_STOP_FLY_UP = 858, // movement related, stop fly up, possible MSG
|
||||
CMSG_ARENA_TEAM_SET_LEADER_BYNAME = 854, // also must be demote opcode...
|
||||
SMSG_ARENA_TEAM_EVENT = 855, // arena team event
|
||||
CMSG_ARENAMASTER_JOIN = 856,
|
||||
MSG_MOVE_START_FLY_UP = 857, // movement related, fly up, possible MSG
|
||||
MSG_MOVE_STOP_FLY_UP = 858, // movement related, stop fly up, possible MSG
|
||||
SMSG_ARENA_TEAM_STATS = 859,
|
||||
CMSG_LFG_SET_AUTOJOIN = 860,
|
||||
CMSG_LFG_UNSET_AUTOJOIN = 861,
|
||||
@ -913,116 +895,167 @@ enum OpCodes
|
||||
CMSG_LFM_UNSET_AUTOADD = 863,
|
||||
CMSG_LFG_INVITE_ACCEPT = 864,
|
||||
CMSG_LFG_INVITE_CANCEL = 865,
|
||||
// 866
|
||||
// 866, CMSG?
|
||||
CMSG_LOOKING_FOR_GROUP_CLEAR = 867,
|
||||
CMSG_SET_LOOKING_FOR_NONE = 868,
|
||||
CMSG_SET_LOOKING_FOR_MORE = 869,
|
||||
CMSG_SET_COMMENTARY = 870,
|
||||
SMSG_LFG_871 = 871, // Matchmaking timed out.
|
||||
SMSG_LFG_872 = 872, // Matchmaking timed out waiting for other player.
|
||||
SMSG_LFG_873 = 873, // Group no longer available.
|
||||
SMSG_LFG_874 = 974, // Matched Player(s) have gone offline.
|
||||
SMSG_LFG_MATCHMAKING_TIMEDOUT = 871, // Matchmaking timed out.
|
||||
SMSG_LFG_MATCHMAKING_OTHER_TIMEDOUT = 872, // Matchmaking timed out waiting for other player.
|
||||
SMSG_LFG_MATCHMAKING_AUTOJOIN_FAILED = 873, // Group no longer available.
|
||||
SMSG_LFG_MATCHMAKING_AUTOJOIN_FAILED_NO_PLAYER = 874, // Matched Player(s) have gone offline.
|
||||
// 875
|
||||
SMSG_LFG_876 = 876, // LFM eye, in progress, uint16+uint32+uint8?, 3 x uint8(0x0)
|
||||
SMSG_LFG_877 = 877, // cause client send CMSG_SET_LOOKING_FOR_GROUP, uint32+uint8?
|
||||
SMSG_LFG_878 = 878, // cause client send CMSG_SET_LOOKING_FOR_GROUP
|
||||
SMSG_LFG_879 = 879, // LFG eye, cause client send CMSG_SET_LOOKING_FOR_GROUP
|
||||
SMSG_LFG_INVITE = 880, // show invite dialog: The LFG system has matched you to a group for %s.
|
||||
SMSG_LFG_881 = 881, // The LFG system is waiting to complete match for %s.
|
||||
SMSG_LFG_876 = 876, // LFM eye, in progress, uint16+uint32+uint8?, 3 x uint8(0x0)
|
||||
SMSG_LFG_877 = 877, // cause client send CMSG_SET_LOOKING_FOR_GROUP, uint32+uint8?
|
||||
SMSG_LFG_878 = 878, // cause client send CMSG_SET_LOOKING_FOR_GROUP
|
||||
SMSG_LFG_879 = 879, // LFG eye, cause client send CMSG_SET_LOOKING_FOR_GROUP
|
||||
SMSG_LFG_MATCHMAKING_PENDING_INVITE = 880, // The LFG system has matched you to a group for %s.
|
||||
SMSG_LFG_MATCHMAKING_PENDING_MATCH = 881, // The LFG system is waiting to complete match for %s.
|
||||
// 882
|
||||
SMSG_CHANGE_TITLE = 883, // uint32 title_id, causes message and visual effect
|
||||
CMSG_CHOOSE_TITLE = 884, // uint32 title_id
|
||||
CMSG_DISMOUNT = 885, // /dismount command
|
||||
SMSG_ARENA_TEAM_UNK = 886,
|
||||
SMSG_CHANGE_TITLE = 883, // uint32 title_id, causes message and visual effect
|
||||
CMSG_CHOOSE_TITLE = 884, // uint32 title_id
|
||||
CMSG_DISMOUNT = 885, // /dismount command
|
||||
SMSG_ARENA_NO_TEAM = 886, // uint32(0) + team type
|
||||
MSG_INSPECT_ARENA_STATS = 887,
|
||||
SMSG_SH_POSITION = 888, // spirit healer position, map/x/y/z, at player death...
|
||||
CMSG_CANCEL_TEMP_ITEM_ENCHANTMENT = 889, // cancel temporary item enchantment
|
||||
SMSG_SH_POSITION = 888, // spirit healer position, map/x/y/z, at player death...
|
||||
CMSG_CANCEL_TEMP_ITEM_ENCHANTMENT = 889, // cancel temporary item enchantment
|
||||
// 890
|
||||
// 891
|
||||
// 892
|
||||
// 893
|
||||
SMSG_MOVE_SET_FLY_SPEED = 894, // all fly speed, packed guid, uint32 movement_flags, time, x,y,z,o,unk,speed...
|
||||
MSG_MOVE_SET_FLY_SPEED = 894, // all fly speed, packed guid, uint32 movement_flags, time, x,y,z,o,unk,speed...
|
||||
// 895
|
||||
SMSG_MOVE_SET_FLY_BACK_SPEED = 896,
|
||||
SMSG_FORCE_FLY_SPEED_CHANGE = 897, // packed guid, uint32, speed
|
||||
MSG_MOVE_SET_FLY_BACK_SPEED = 896,
|
||||
SMSG_FORCE_FLY_SPEED_CHANGE = 897, // packed guid, uint32, speed
|
||||
CMSG_FORCE_FLY_SPEED_CHANGE_ACK = 898,
|
||||
SMSG_FORCE_FLY_BACK_SPEED_CHANGE = 899,
|
||||
CMSG_FORCE_FLY_BACK_SPEED_CHANGE_ACK = 900,
|
||||
SMSG_MOVE_SET_FLY_SPEED2 = 901, // same as 894, strange, packed guid+speed
|
||||
SMSG_MOVE_SET_FLY_BACK_SPEED2 = 902, // same as 896, strange,
|
||||
SMSG_MOVE_SET_FLY_SPEED2 = 901, // same as 894, strange, packed guid+speed
|
||||
SMSG_MOVE_SET_FLY_BACK_SPEED2 = 902, // same as 896, strange,
|
||||
// 903
|
||||
// 904 SMSG_FLIGHT_SPLINE_SYNC?
|
||||
// 905
|
||||
SMSG_FLIGHT_SPLINE_SYNC = 904, // uint32 + packed_guid
|
||||
CMSG_SET_TAXI_BENCHMARK_MODE = 905,
|
||||
// 906
|
||||
SMSG_REALM_STATE_RESPONSE = 907, // response to 908 opcode, 4 x uint32 + uint8
|
||||
CMSG_REALM_STATE_REQUEST = 908, // realm related, uint32+uint32+3*(uint16+uint8), appears at select character screen, uint32 0xFFFFFFFF
|
||||
CMSG_MOVE_SHIP_909 = 909, // movement related, transport related(ships)
|
||||
CMSG_GROUP_PROMOTE = 910, // make main-tank / main-assistant
|
||||
// 911
|
||||
SMSG_ALLOW_MOVE = 912, // uint32, allow player movement, value increments every time and reset to 0 after far teleport, used for client-server synchronization
|
||||
CMSG_ALLOW_MOVE_ACK = 913, // client response to SMSG_ALLOW_MOVE
|
||||
SMSG_REALM_SPLIT_INFO_RESPONSE = 907, // response to 908 opcode, uint32+uint32+string(date)
|
||||
CMSG_REALM_SPLIT_INFO_REQUEST = 908, // realm related, uint32, appears at select character screen, uint32 0xFFFFFFFF by default
|
||||
MSG_MOVE_SHIP_909 = 909, // movement related, transport related(ships)
|
||||
CMSG_GROUP_PROMOTE = 910, // make main-tank / main-assistant
|
||||
SMSG_ALREADY_IN_ARENA_TEAM = 911, // %s is already in an arena team of that size (uint64 guid)
|
||||
SMSG_ALLOW_MOVE = 912, // uint32, allow player movement, value increments every time and reset to 0 after far teleport, used for client-server synchronization
|
||||
CMSG_ALLOW_MOVE_ACK = 913, // client response to SMSG_ALLOW_MOVE (counter + client time)
|
||||
// 914
|
||||
// 915
|
||||
// 916
|
||||
// 917
|
||||
SMSG_UNKNOWN_918 = 918, // chat message: The party leader has attempted to reset the instance you are in. Please zone out to allow the instance to reset.
|
||||
SMSG_UNKNOWN_919 = 919, // uint8(0)+uint32(0/1)+uint64(unk/guid)
|
||||
SMSG_UNKNOWN_920 = 920, // notify message: This system is currently disabled.
|
||||
SMSG_RESET_INSTANCE_FAILED_NOTIFY = 918, // chat message: The party leader has attempted to reset the instance you are in. Please zone out to allow the instance to reset.
|
||||
SMSG_UNKNOWN_919 = 919, // uint8(0)+uint32(0/1)+uint64(unk/guid)
|
||||
SMSG_SYSTEM_DISABLED = 920, // notify message: This system is currently disabled.
|
||||
// 921
|
||||
// 922
|
||||
// 923
|
||||
// 924
|
||||
SMSG_SET_COMBO_POINTS = 925, // set combo points
|
||||
// 926
|
||||
// 927
|
||||
SMSG_SET_COMBO_POINTS = 925, // set combo points
|
||||
SMSG_VOICE_SESSION = 926,
|
||||
SMSG_UNKNOWN_927 = 927, // uint64 guid + uint32 + float?, received after leave voice channel
|
||||
// 928
|
||||
// 929
|
||||
// 930
|
||||
SMSG_SET_AURA_MULTIPLY = 931,
|
||||
/*
|
||||
packed_guid
|
||||
block (can repeat):
|
||||
uint8 index may be it's aura slot? (increments)
|
||||
uint32 spellid
|
||||
uint32 duration1 (full?)
|
||||
uint32 duration2 (remaining?)
|
||||
*/
|
||||
SMSG_SET_AURA_SINGLE = 932,
|
||||
/*
|
||||
packed_guid
|
||||
uint8 index may be it's aura slot? (increments)
|
||||
uint32 spellid
|
||||
uint32 duration1 (full?)
|
||||
uint32 duration2 (remaining?)
|
||||
*/
|
||||
SMSG_SET_AURA_MULTIPLY = 931, // packed_guid + n * (uint8 slot + uint32 spellid + uint32 duration1 + uint32 duration2)
|
||||
SMSG_SET_AURA_SINGLE = 932, // packed_guid + uint8 slot + uint32 spellid + uint32 duration1 + uint32 duration2
|
||||
// 933
|
||||
SMSG_CAST_SUCCESS = 934,
|
||||
SMSG_UNKNOWN_935 = 935, // teleport/movement opcode
|
||||
MSG_UNKNOWN_935 = 935, // teleport/movement opcode
|
||||
// 936
|
||||
// 937
|
||||
// 938
|
||||
SMSG_UNKNOWN_938 = 938, // uint64, uint64, uint32 spellid, uint32, uint32
|
||||
// 939
|
||||
// 940
|
||||
SMSG_UNKNOWN_941 = 941, // teleport/movement opcode
|
||||
SMSG_UNKNOWN_942 = 942, // Everyone is Ready! (message)
|
||||
// 943
|
||||
// 944
|
||||
SMSG_UNKNOWN_940 = 940, // packed guid (received at spell cast)
|
||||
SMSG_UNKNOWN_941 = 941, // teleport/movement opcode
|
||||
SMSG_READY_CHECK_ALL_READY = 942, // Everyone is Ready! (message)
|
||||
CMSG_VOICE_SETTINGS = 943, // uint8 isVoiceEnabled, uint8 isMicrophoneEnabled (id correct for 2.3.0)
|
||||
SMSG_VOICE_CHAT_PARENTAL_DISABLE_ALL = 944, // Voice chat has been disabled by parental control
|
||||
// 945
|
||||
// 946
|
||||
// 947
|
||||
// 948
|
||||
CMSG_COMMENTATOR_SET_MODE = 948,
|
||||
// 949
|
||||
// 950
|
||||
CMSG_COMMENTATOR_UPDATE_MAP_INFO = 950,
|
||||
// 951
|
||||
CMSG_UNKNOWN_952 = 952, // response to 942 opcode
|
||||
CMSG_REPORT_SPAM = 953, // Report Spam chat button
|
||||
SMSG_REPORT_SPAM_RESPONSE = 954, // Complaint Registered. (message)
|
||||
SMSG_ACTIVATE_SPAM_REPORTING = 955, // unk uint8
|
||||
|
||||
CMSG_COMMENTATOR_UPDATE_PLAYER_INFO = 952,
|
||||
CMSG_UNKNOWN_953 = 953, // response to 942 opcode
|
||||
//CMSG_REPORT_SPAM = 954, // now(2.3.0) CMSG_COMPLAINT_CHAT
|
||||
//SMSG_REPORT_SPAM_RESPONSE = 955, // now(2.3.0) SMSG_COMPLAINT_ADDED
|
||||
CMSG_COMMENTATOR_EXIT_INSTANCE = 956, // unk uint8
|
||||
// 957
|
||||
// 958 clear selection?
|
||||
// 959
|
||||
SMSG_UNKNOWN_960 = 960, // uint64 guid, uint32, uint32 (client sedn CMSG_ITEM_QUERY_SINGLE)
|
||||
// 961
|
||||
// 962
|
||||
//SMSG_DISCONNECT_CLIENT = 963, // really?? not
|
||||
// 964
|
||||
// 965
|
||||
CMSG_COMPLAINT_CHAT = 966, // Report Spam chat button
|
||||
SMSG_COMPLAINT_ADDED = 967, // Complaint Registered. (message)
|
||||
SMSG_VOICE_SYSTEM_STATUS = 968, // uint8, uint8 (id correct for 2.3.0)
|
||||
// 969
|
||||
// 970
|
||||
CMSG_CHANNEL_SILENT_VOICE = 971,
|
||||
CMSG_CHANNEL_SILENT_ALL = 972,
|
||||
CMSG_CHANNEL_UNSILENT_VOICE = 973,
|
||||
CMSG_CHANNEL_UNSILENT_ALL = 974,
|
||||
// 975
|
||||
// 976
|
||||
CMSG_CHANNEL_ROSTER_QUERY = 977, // string channel name (channel list?)
|
||||
CMSG_CHANNEL_VOICE_CHAT_QUERY = 978, // uint32, string
|
||||
CMSG_CHANNEL_INFO_QUERY = 979, // string channel name
|
||||
SMSG_CHANNEL_INFO_QUERY_RESPONSE = 980, // string channel name, uint8 flags, uint32 count
|
||||
CMSG_CHANNEL_VOICE_ON = 981, // Enable Voice button in channel context menu
|
||||
CMSG_CHANNEL_VOICE_OFF = 982, // ??
|
||||
// 983
|
||||
// 984
|
||||
SMSG_CHANNEL_NOTIFY_AVAILABLE_VOICE_SESSION = 985, // 9 bytes unk's + string channel name + uint64 guid, received after join voice channel
|
||||
CMSG_MUTE_PLAYER = 986, // ??
|
||||
CMSG_UNMUTE_PLAYER = 987, // ??
|
||||
CMSG_SILENCE_MEMBER = 988, // ??
|
||||
CMSG_UNSILENCE_MEMBER = 989, // ??
|
||||
SMSG_PLAYER_UNSILENCED = 990, // A group leader has restored your voice privileges
|
||||
SMSG_COMSAT_RECONNECT_ATTEMPT = 991, // Voice chat service restored!
|
||||
SMSG_COMSAT_DISCONNECT = 992, // Connection lost to voice chat service.
|
||||
SMSG_COMSAT_CONNECT_FAIL = 993, // Cannot connect to voice chat service.
|
||||
// 994
|
||||
// 995
|
||||
// 996
|
||||
CMSG_GUILD_BANK = 997, // click on guildbank object, uint64 guid + uint8 unk
|
||||
CMSG_GUILDBANK_TAB_COLON = 998, // response to 999, uint64 guid + uint8 + uint8
|
||||
SMSG_GUILD_BANK_LIST = 999, // uint32 + uint32 + uint8 + uint8 + uint16 count1 + uint8 + uint8 count2 + for (count2) { uint8 unk } + uint16 + for(count1) { uint32 counter + uint8 unk }
|
||||
CMSG_UNKNOWN_1000 = 1000, // uint64 guid, uint8, uint8, uint8 count, for(count) uint8 unk
|
||||
CMSG_BUY_GUILDBANK_TAB = 1001, // uint64 guid + uint8 unk
|
||||
// 1002
|
||||
CMSG_GUILDBANK_DEPOSIT = 1003, // uint64 guid + uint32
|
||||
CMSG_GUILDBANK_WITHDRAW = 1004, // uint64 guid + uint32
|
||||
MSG_GUILDBANK_LOG = 1005, // guild bank log? client: empty, server: uint8 count, for count (uint8 unk(type?), uint64 guid, uint32 unk(amount?))
|
||||
CMSG_CHANNEL_WATCH = 1006, // string channel name
|
||||
SMSG_PLAYER_JOINED_CHANNEL = 1007, // uint64, uint8, uint8, uint32, string channel name
|
||||
SMSG_PLAYER_LEFT_CHANNEL = 1008, // uint64, uint8, uint32, string channel name
|
||||
SMSG_PLAYER_JOINED_CUSTOM_CHANNEL = 1009, // guessed
|
||||
CMSG_CLEAR_CHANNEL_WATCH = 1010,
|
||||
SMSG_INSPECT_TALENTS = 1011, // uint32 count, for(count) uint8 unk
|
||||
// 1012
|
||||
// 1013
|
||||
// 1014
|
||||
CMSG_UNKNOWN_1015 = 1015, // click on NPC with 0x1000000 npc_flag
|
||||
// 1016
|
||||
// 1017
|
||||
// 1018
|
||||
SMSG_VOICESESSION_FULL = 1019, // The voice session you are attempting to join is full.
|
||||
MSG_UNKNOWN_1020 = 1020, // probably guild related, client: empty, server: uint32, uint32, uint8, uint32, uint32
|
||||
MSG_UNKNOWN_1021 = 1021, // guild related
|
||||
MSG_GUILD_EVENT_LOG = 1022
|
||||
};
|
||||
|
||||
//if you add new opcode .. Do NOT forget to change the following define MAX_OPCODE_ID and also add new opcode to table in opcodes.cpp
|
||||
#define MAX_OPCODE_ID 955
|
||||
#define MAX_OPCODE_ID 1023
|
||||
|
||||
/// Results of friend related commands
|
||||
enum FriendsResult
|
||||
@ -1043,28 +1076,46 @@ enum FriendsResult
|
||||
FRIEND_IGNORE_NOT_FOUND = 0x0D,
|
||||
FRIEND_IGNORE_ALREADY = 0x0E,
|
||||
FRIEND_IGNORE_ADDED = 0x0F,
|
||||
FRIEND_IGNORE_REMOVED = 0x10
|
||||
FRIEND_IGNORE_REMOVED = 0x10,
|
||||
// 0x11
|
||||
// 0x12
|
||||
// 0x13
|
||||
// 0x14
|
||||
// 0x15
|
||||
FRIEND_MUTE_ADDED = 0x16,
|
||||
FRIEND_MUTE_REMOVED = 0x17
|
||||
};
|
||||
|
||||
/// Non Player Character flags
|
||||
enum NPCFlags
|
||||
{
|
||||
UNIT_NPC_FLAG_NONE = 0,
|
||||
UNIT_NPC_FLAG_GOSSIP = 1,
|
||||
UNIT_NPC_FLAG_QUESTGIVER = 2,
|
||||
UNIT_NPC_FLAG_VENDOR = 4,
|
||||
UNIT_NPC_FLAG_TAXIVENDOR = 8,
|
||||
UNIT_NPC_FLAG_TRAINER = 16,
|
||||
UNIT_NPC_FLAG_SPIRITHEALER = 32,
|
||||
UNIT_NPC_FLAG_GUARD = 64, //UQ1: ??? We can use as guard flag?, used by blizz for BattleGround spirit guides... (entry 13116 and 13117)
|
||||
UNIT_NPC_FLAG_INNKEEPER = 128,
|
||||
UNIT_NPC_FLAG_BANKER = 256,
|
||||
UNIT_NPC_FLAG_PETITIONER = 512, // 1024+512 = guild petitions, 512 = arena team petitions
|
||||
UNIT_NPC_FLAG_TABARDVENDOR = 1024,
|
||||
UNIT_NPC_FLAG_BATTLEFIELDPERSON = 2048,
|
||||
UNIT_NPC_FLAG_AUCTIONEER = 4096,
|
||||
UNIT_NPC_FLAG_STABLE = 8192,
|
||||
UNIT_NPC_FLAG_ARMORER = 16384,
|
||||
UNIT_NPC_FLAG_NONE = 0x00000000,
|
||||
UNIT_NPC_FLAG_GOSSIP = 0x00000001, // 100%
|
||||
UNIT_NPC_FLAG_QUESTGIVER = 0x00000002, // guessed, probably ok
|
||||
UNIT_NPC_FLAG_UNK1 = 0x00000004,
|
||||
UNIT_NPC_FLAG_UNK2 = 0x00000008,
|
||||
UNIT_NPC_FLAG_TRAINER = 0x00000010, // 100%
|
||||
UNIT_NPC_FLAG_TRAINER_CLASS = 0x00000020, // 100%
|
||||
UNIT_NPC_FLAG_TRAINER_PROFESSION = 0x00000040, // 100%
|
||||
UNIT_NPC_FLAG_VENDOR = 0x00000080, // 100%
|
||||
UNIT_NPC_FLAG_VENDOR_AMMO = 0x00000100, // 100%, general goods vendor
|
||||
UNIT_NPC_FLAG_VENDOR_FOOD = 0x00000200, // 100%
|
||||
UNIT_NPC_FLAG_VENDOR_POISON = 0x00000400, // guessed
|
||||
UNIT_NPC_FLAG_VENDOR_REAGENT = 0x00000800, // 100%
|
||||
UNIT_NPC_FLAG_REPAIR = 0x00001000, // 100%
|
||||
UNIT_NPC_FLAG_FLIGHTMASTER = 0x00002000, // 100%
|
||||
UNIT_NPC_FLAG_SPIRITHEALER = 0x00004000, // guessed
|
||||
UNIT_NPC_FLAG_SPIRITGUIDE = 0x00008000, // guessed
|
||||
UNIT_NPC_FLAG_INNKEEPER = 0x00010000, // 100%
|
||||
UNIT_NPC_FLAG_BANKER = 0x00020000, // 100%
|
||||
UNIT_NPC_FLAG_PETITIONER = 0x00040000, // 100% 0xC0000 = guild petitions, 0x40000 = arena team petitions
|
||||
UNIT_NPC_FLAG_TABARDDESIGNER = 0x00080000, // 100%
|
||||
UNIT_NPC_FLAG_BATTLEMASTER = 0x00100000, // 100%
|
||||
UNIT_NPC_FLAG_AUCTIONEER = 0x00200000, // 100%
|
||||
UNIT_NPC_FLAG_STABLEMASTER = 0x00400000, // 100%
|
||||
UNIT_NPC_FLAG_GUILD_BANKER = 0x00800000, // cause client to send 997 opcode
|
||||
UNIT_NPC_FLAG_UNK3 = 0x01000000, // cause client to send 1015 opcode
|
||||
UNIT_NPC_FLAG_GUARD = 0x10000000, // custom flag for guards
|
||||
};
|
||||
#endif
|
||||
/// @}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -208,7 +208,7 @@ void WorldSession::_HandleUpdateObjectOpcode(WorldPacket& recvPacket)
|
||||
|
||||
void WorldSession::_MovementUpdate(uint8 objtypeid, uint64 uguid, WorldPacket& recvPacket)
|
||||
{
|
||||
uint8 flags;
|
||||
uint8 flags,unk8;
|
||||
uint32 unk32,flags2,time,transtime,higuid;
|
||||
float unkfx,unkfy,unkfz,x,y,z,o,tx,ty,tz,to;
|
||||
uint64 transguid;
|
||||
@ -223,7 +223,7 @@ void WorldSession::_MovementUpdate(uint8 objtypeid, uint64 uguid, WorldPacket& r
|
||||
|
||||
if(flags & UPDATEFLAG_LIVING)
|
||||
{
|
||||
recvPacket >> flags2 >> time;
|
||||
recvPacket >> flags2 >> unk8 >> time;
|
||||
}
|
||||
|
||||
logdev("MovementUpdate TypeID=%u GUID="I64FMT" pObj=%X flags=%u flags2=%u",objtypeid,uguid,obj,flags,flags2);
|
||||
|
||||
@ -19,308 +19,302 @@
|
||||
#ifndef _UPDATEFIELDS_AUTO_H
|
||||
#define _UPDATEFIELDS_AUTO_H
|
||||
|
||||
// Auto generated for version 2.1.3, build 6898
|
||||
// Auto generated for version 0, 3, 2, 7655
|
||||
|
||||
enum EObjectFields
|
||||
{
|
||||
OBJECT_FIELD_GUID = 0x0000, // 2 4 1
|
||||
OBJECT_FIELD_TYPE = 0x0002, // 1 1 1
|
||||
OBJECT_FIELD_ENTRY = 0x0003, // 1 1 1
|
||||
OBJECT_FIELD_SCALE_X = 0x0004, // 1 3 1
|
||||
OBJECT_FIELD_PADDING = 0x0005, // 1 1 0
|
||||
OBJECT_FIELD_GUID = 0x0000, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
OBJECT_FIELD_TYPE = 0x0002, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
OBJECT_FIELD_ENTRY = 0x0003, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
OBJECT_FIELD_SCALE_X = 0x0004, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
OBJECT_FIELD_PADDING = 0x0005, // Size: 1, Type: INT, Flags: NONE
|
||||
OBJECT_END = 0x0006,
|
||||
};
|
||||
|
||||
enum EItemFields
|
||||
{
|
||||
ITEM_FIELD_OWNER = 0x0006, // 2 4 1
|
||||
ITEM_FIELD_CONTAINED = 0x0008, // 2 4 1
|
||||
ITEM_FIELD_CREATOR = 0x000A, // 2 4 1
|
||||
ITEM_FIELD_GIFTCREATOR = 0x000C, // 2 4 1
|
||||
ITEM_FIELD_STACK_COUNT = 0x000E, // 1 1 20
|
||||
ITEM_FIELD_DURATION = 0x000F, // 1 1 20
|
||||
ITEM_FIELD_SPELL_CHARGES = 0x0010, // 5 1 20
|
||||
ITEM_FIELD_FLAGS = 0x0015, // 1 1 1
|
||||
/*
|
||||
There is two types of enchantments: property based and suffix based.
|
||||
Item can have only one of the two.
|
||||
Suffix based linked to item.randomproperty_2 field and property based
|
||||
to item.randomproperty_1 field (item prototype).
|
||||
Suffix based enchantments sent to the client as negative value, in
|
||||
addition they require ITEM_FIELD_SUFFIX_FACTOR field to be send in
|
||||
order to calculate the bonus value. Property based enchantments are send
|
||||
as positive values and do not require any aditional values since the bonuses
|
||||
are already stored inside spellitemenchantment. Suffix based enchantments uses
|
||||
6-8 fields in EnchantmentSlot while property based uses 8-10 in EnchantmentSlot.
|
||||
*/
|
||||
ITEM_FIELD_ENCHANTMENT = 0x0016, // 33 1 1
|
||||
ITEM_FIELD_PROPERTY_SEED = 0x0037, // 1 1 1
|
||||
ITEM_FIELD_SUFFIX_FACTOR = ITEM_FIELD_PROPERTY_SEED, //custom
|
||||
ITEM_FIELD_RANDOM_PROPERTIES_ID = 0x0038, // 1 1 1
|
||||
ITEM_FIELD_ITEM_TEXT_ID = 0x0039, // 1 1 4
|
||||
ITEM_FIELD_DURABILITY = 0x003A, // 1 1 20
|
||||
ITEM_FIELD_MAXDURABILITY = 0x003B, // 1 1 20
|
||||
ITEM_END = 0x003C,
|
||||
ITEM_FIELD_OWNER = OBJECT_END + 0x0000, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
ITEM_FIELD_CONTAINED = OBJECT_END + 0x0002, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
ITEM_FIELD_CREATOR = OBJECT_END + 0x0004, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
ITEM_FIELD_GIFTCREATOR = OBJECT_END + 0x0006, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
ITEM_FIELD_STACK_COUNT = OBJECT_END + 0x0008, // Size: 1, Type: INT, Flags: OWNER_ONLY, UNK2
|
||||
ITEM_FIELD_DURATION = OBJECT_END + 0x0009, // Size: 1, Type: INT, Flags: OWNER_ONLY, UNK2
|
||||
ITEM_FIELD_SPELL_CHARGES = OBJECT_END + 0x000A, // Size: 5, Type: INT, Flags: OWNER_ONLY, UNK2
|
||||
ITEM_FIELD_FLAGS = OBJECT_END + 0x000F, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
ITEM_FIELD_ENCHANTMENT = OBJECT_END + 0x0010, // Size: 33, Type: INT, Flags: PUBLIC
|
||||
ITEM_FIELD_PROPERTY_SEED = OBJECT_END + 0x0031, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
|
||||
// custom
|
||||
ITEM_FIELD_SUFFIX_FACTOR = ITEM_FIELD_PROPERTY_SEED,
|
||||
|
||||
ITEM_FIELD_RANDOM_PROPERTIES_ID = OBJECT_END + 0x0032, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
ITEM_FIELD_ITEM_TEXT_ID = OBJECT_END + 0x0033, // Size: 1, Type: INT, Flags: OWNER_ONLY
|
||||
ITEM_FIELD_DURABILITY = OBJECT_END + 0x0034, // Size: 1, Type: INT, Flags: OWNER_ONLY, UNK2
|
||||
ITEM_FIELD_MAXDURABILITY = OBJECT_END + 0x0035, // Size: 1, Type: INT, Flags: OWNER_ONLY, UNK2
|
||||
ITEM_END = OBJECT_END + 0x0036,
|
||||
};
|
||||
|
||||
enum EContainerFields
|
||||
{
|
||||
CONTAINER_FIELD_NUM_SLOTS = 0x003C, // 1 1 1
|
||||
CONTAINER_ALIGN_PAD = 0x003D, // 1 5 0
|
||||
CONTAINER_FIELD_SLOT_1 = 0x003E, // 72 4 1
|
||||
CONTAINER_END = 0x0086,
|
||||
CONTAINER_FIELD_NUM_SLOTS = ITEM_END + 0x0000, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
CONTAINER_ALIGN_PAD = ITEM_END + 0x0001, // Size: 1, Type: BYTES, Flags: NONE
|
||||
CONTAINER_FIELD_SLOT_1 = ITEM_END + 0x0002, // Size: 72, Type: LONG, Flags: PUBLIC
|
||||
CONTAINER_END = ITEM_END + 0x004A,
|
||||
};
|
||||
|
||||
enum EUnitFields
|
||||
{
|
||||
UNIT_FIELD_CHARM = 0x0006, // 2 4 1
|
||||
UNIT_FIELD_SUMMON = 0x0008, // 2 4 1
|
||||
UNIT_FIELD_CHARMEDBY = 0x000A, // 2 4 1
|
||||
UNIT_FIELD_SUMMONEDBY = 0x000C, // 2 4 1
|
||||
UNIT_FIELD_CREATEDBY = 0x000E, // 2 4 1
|
||||
UNIT_FIELD_TARGET = 0x0010, // 2 4 1
|
||||
UNIT_FIELD_PERSUADED = 0x0012, // 2 4 1
|
||||
UNIT_FIELD_CHANNEL_OBJECT = 0x0014, // 2 4 1
|
||||
UNIT_FIELD_HEALTH = 0x0016, // 1 1 256
|
||||
UNIT_FIELD_POWER1 = 0x0017, // 1 1 1
|
||||
UNIT_FIELD_POWER2 = 0x0018, // 1 1 1
|
||||
UNIT_FIELD_POWER3 = 0x0019, // 1 1 1
|
||||
UNIT_FIELD_POWER4 = 0x001A, // 1 1 1
|
||||
UNIT_FIELD_POWER5 = 0x001B, // 1 1 1
|
||||
UNIT_FIELD_MAXHEALTH = 0x001C, // 1 1 256
|
||||
UNIT_FIELD_MAXPOWER1 = 0x001D, // 1 1 1
|
||||
UNIT_FIELD_MAXPOWER2 = 0x001E, // 1 1 1
|
||||
UNIT_FIELD_MAXPOWER3 = 0x001F, // 1 1 1
|
||||
UNIT_FIELD_MAXPOWER4 = 0x0020, // 1 1 1
|
||||
UNIT_FIELD_MAXPOWER5 = 0x0021, // 1 1 1
|
||||
UNIT_FIELD_LEVEL = 0x0022, // 1 1 1
|
||||
UNIT_FIELD_FACTIONTEMPLATE = 0x0023, // 1 1 1
|
||||
UNIT_FIELD_BYTES_0 = 0x0024, // 1 5 1
|
||||
UNIT_VIRTUAL_ITEM_SLOT_DISPLAY = 0x0025, // 3 1 1
|
||||
UNIT_VIRTUAL_ITEM_INFO = 0x0028, // 6 5 1
|
||||
UNIT_FIELD_FLAGS = 0x002E, // 1 1 1
|
||||
UNIT_FIELD_FLAGS_2 = 0x002F, // 1 1 1
|
||||
UNIT_FIELD_AURA = 0x0030, // 56 1 1
|
||||
UNIT_FIELD_AURAFLAGS = 0x0068, // 7 5 1
|
||||
UNIT_FIELD_AURALEVELS = 0x006F, // 14 5 1
|
||||
UNIT_FIELD_AURAAPPLICATIONS = 0x007D, // 14 5 1
|
||||
UNIT_FIELD_AURASTATE = 0x008B, // 1 1 1
|
||||
UNIT_FIELD_BASEATTACKTIME = 0x008C, // 2 1 1
|
||||
UNIT_FIELD_OFFHANDATTACKTIME = UNIT_FIELD_BASEATTACKTIME + 1, // custom
|
||||
UNIT_FIELD_RANGEDATTACKTIME = 0x008E, // 1 1 2
|
||||
UNIT_FIELD_BOUNDINGRADIUS = 0x008F, // 1 3 1
|
||||
UNIT_FIELD_COMBATREACH = 0x0090, // 1 3 1
|
||||
UNIT_FIELD_DISPLAYID = 0x0091, // 1 1 1
|
||||
UNIT_FIELD_NATIVEDISPLAYID = 0x0092, // 1 1 1
|
||||
UNIT_FIELD_MOUNTDISPLAYID = 0x0093, // 1 1 1
|
||||
UNIT_FIELD_MINDAMAGE = 0x0094, // 1 3 38
|
||||
UNIT_FIELD_MAXDAMAGE = 0x0095, // 1 3 38
|
||||
UNIT_FIELD_MINOFFHANDDAMAGE = 0x0096, // 1 3 38
|
||||
UNIT_FIELD_MAXOFFHANDDAMAGE = 0x0097, // 1 3 38
|
||||
UNIT_FIELD_BYTES_1 = 0x0098, // 1 5 1
|
||||
UNIT_FIELD_PETNUMBER = 0x0099, // 1 1 1
|
||||
UNIT_FIELD_PET_NAME_TIMESTAMP = 0x009A, // 1 1 1
|
||||
UNIT_FIELD_PETEXPERIENCE = 0x009B, // 1 1 4
|
||||
UNIT_FIELD_PETNEXTLEVELEXP = 0x009C, // 1 1 4
|
||||
UNIT_DYNAMIC_FLAGS = 0x009D, // 1 1 256
|
||||
UNIT_CHANNEL_SPELL = 0x009E, // 1 1 1
|
||||
UNIT_MOD_CAST_SPEED = 0x009F, // 1 3 1
|
||||
UNIT_CREATED_BY_SPELL = 0x00A0, // 1 1 1
|
||||
UNIT_NPC_FLAGS = 0x00A1, // 1 1 1
|
||||
UNIT_NPC_EMOTESTATE = 0x00A2, // 1 1 1
|
||||
UNIT_TRAINING_POINTS = 0x00A3, // 1 2 4
|
||||
UNIT_FIELD_STAT0 = 0x00A4, // 1 1 6
|
||||
UNIT_FIELD_STAT1 = 0x00A5, // 1 1 6
|
||||
UNIT_FIELD_STAT2 = 0x00A6, // 1 1 6
|
||||
UNIT_FIELD_STAT3 = 0x00A7, // 1 1 6
|
||||
UNIT_FIELD_STAT4 = 0x00A8, // 1 1 6
|
||||
UNIT_FIELD_POSSTAT0 = 0x00A9, // 1 1 6
|
||||
UNIT_FIELD_POSSTAT1 = 0x00AA, // 1 1 6
|
||||
UNIT_FIELD_POSSTAT2 = 0x00AB, // 1 1 6
|
||||
UNIT_FIELD_POSSTAT3 = 0x00AC, // 1 1 6
|
||||
UNIT_FIELD_POSSTAT4 = 0x00AD, // 1 1 6
|
||||
UNIT_FIELD_NEGSTAT0 = 0x00AE, // 1 1 6
|
||||
UNIT_FIELD_NEGSTAT1 = 0x00AF, // 1 1 6
|
||||
UNIT_FIELD_NEGSTAT2 = 0x00B0, // 1 1 6
|
||||
UNIT_FIELD_NEGSTAT3 = 0x00B1, // 1 1 6
|
||||
UNIT_FIELD_NEGSTAT4 = 0x00B2, // 1 1 6
|
||||
UNIT_FIELD_RESISTANCES = 0x00B3, // 7 1 38
|
||||
UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE = 0x00BA, // 7 1 6
|
||||
UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE = 0x00C1, // 7 1 6
|
||||
UNIT_FIELD_BASE_MANA = 0x00C8, // 1 1 6
|
||||
UNIT_FIELD_BASE_HEALTH = 0x00C9, // 1 1 6
|
||||
UNIT_FIELD_BYTES_2 = 0x00CA, // 1 5 1
|
||||
UNIT_FIELD_ATTACK_POWER = 0x00CB, // 1 1 6
|
||||
UNIT_FIELD_ATTACK_POWER_MODS = 0x00CC, // 1 2 6
|
||||
UNIT_FIELD_ATTACK_POWER_MULTIPLIER = 0x00CD, // 1 3 6
|
||||
UNIT_FIELD_RANGED_ATTACK_POWER = 0x00CE, // 1 1 6
|
||||
UNIT_FIELD_RANGED_ATTACK_POWER_MODS = 0x00CF, // 1 2 6
|
||||
UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER = 0x00D0, // 1 3 6
|
||||
UNIT_FIELD_MINRANGEDDAMAGE = 0x00D1, // 1 3 6
|
||||
UNIT_FIELD_MAXRANGEDDAMAGE = 0x00D2, // 1 3 6
|
||||
UNIT_FIELD_POWER_COST_MODIFIER = 0x00D3, // 7 1 6
|
||||
UNIT_FIELD_POWER_COST_MULTIPLIER = 0x00DA, // 7 3 6
|
||||
UNIT_FIELD_PADDING = 0x00E1, // 1 1 0
|
||||
UNIT_END = 0x00E2,
|
||||
UNIT_FIELD_CHARM = OBJECT_END + 0x0000, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
UNIT_FIELD_SUMMON = OBJECT_END + 0x0002, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
UNIT_FIELD_CHARMEDBY = OBJECT_END + 0x0004, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
UNIT_FIELD_SUMMONEDBY = OBJECT_END + 0x0006, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
UNIT_FIELD_CREATEDBY = OBJECT_END + 0x0008, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
UNIT_FIELD_TARGET = OBJECT_END + 0x000A, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
UNIT_FIELD_PERSUADED = OBJECT_END + 0x000C, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
UNIT_FIELD_CHANNEL_OBJECT = OBJECT_END + 0x000E, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
UNIT_FIELD_HEALTH = OBJECT_END + 0x0010, // Size: 1, Type: INT, Flags: DYNAMIC
|
||||
UNIT_FIELD_POWER1 = OBJECT_END + 0x0011, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_POWER2 = OBJECT_END + 0x0012, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_POWER3 = OBJECT_END + 0x0013, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_POWER4 = OBJECT_END + 0x0014, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_POWER5 = OBJECT_END + 0x0015, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MAXHEALTH = OBJECT_END + 0x0016, // Size: 1, Type: INT, Flags: DYNAMIC
|
||||
UNIT_FIELD_MAXPOWER1 = OBJECT_END + 0x0017, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MAXPOWER2 = OBJECT_END + 0x0018, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MAXPOWER3 = OBJECT_END + 0x0019, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MAXPOWER4 = OBJECT_END + 0x001A, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MAXPOWER5 = OBJECT_END + 0x001B, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_LEVEL = OBJECT_END + 0x001C, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_FACTIONTEMPLATE = OBJECT_END + 0x001D, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_BYTES_0 = OBJECT_END + 0x001E, // Size: 1, Type: BYTES, Flags: PUBLIC
|
||||
UNIT_VIRTUAL_ITEM_SLOT_DISPLAY = OBJECT_END + 0x001F, // Size: 3, Type: INT, Flags: PUBLIC
|
||||
UNIT_VIRTUAL_ITEM_INFO = OBJECT_END + 0x0022, // Size: 6, Type: BYTES, Flags: PUBLIC
|
||||
UNIT_FIELD_FLAGS = OBJECT_END + 0x0028, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_FLAGS_2 = OBJECT_END + 0x0029, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_AURA = OBJECT_END + 0x002A, // Size: 56, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_AURAFLAGS = OBJECT_END + 0x0062, // Size: 14, Type: BYTES, Flags: PUBLIC
|
||||
UNIT_FIELD_AURALEVELS = OBJECT_END + 0x0070, // Size: 14, Type: BYTES, Flags: PUBLIC
|
||||
UNIT_FIELD_AURAAPPLICATIONS = OBJECT_END + 0x007E, // Size: 14, Type: BYTES, Flags: PUBLIC
|
||||
UNIT_FIELD_AURASTATE = OBJECT_END + 0x008C, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_BASEATTACKTIME = OBJECT_END + 0x008D, // Size: 2, Type: INT, Flags: PUBLIC
|
||||
|
||||
PLAYER_DUEL_ARBITER = 0x00E2, // 2 4 1
|
||||
PLAYER_FLAGS = 0x00E4, // 1 1 1
|
||||
PLAYER_GUILDID = 0x00E5, // 1 1 1
|
||||
PLAYER_GUILDRANK = 0x00E6, // 1 1 1
|
||||
PLAYER_BYTES = 0x00E7, // 1 5 1
|
||||
PLAYER_BYTES_2 = 0x00E8, // 1 5 1
|
||||
PLAYER_BYTES_3 = 0x00E9, // 1 5 1
|
||||
PLAYER_DUEL_TEAM = 0x00EA, // 1 1 1
|
||||
PLAYER_GUILD_TIMESTAMP = 0x00EB, // 1 1 1
|
||||
PLAYER_QUEST_LOG_1_1 = 0x00EC, // 1 1 64
|
||||
PLAYER_QUEST_LOG_1_2 = 0x00ED, // 2 1 2
|
||||
PLAYER_QUEST_LOG_2_1 = 0x00EF, // 1 1 64
|
||||
PLAYER_QUEST_LOG_2_2 = 0x00F0, // 2 1 2
|
||||
PLAYER_QUEST_LOG_3_1 = 0x00F2, // 1 1 64
|
||||
PLAYER_QUEST_LOG_3_2 = 0x00F3, // 2 1 2
|
||||
PLAYER_QUEST_LOG_4_1 = 0x00F5, // 1 1 64
|
||||
PLAYER_QUEST_LOG_4_2 = 0x00F6, // 2 1 2
|
||||
PLAYER_QUEST_LOG_5_1 = 0x00F8, // 1 1 64
|
||||
PLAYER_QUEST_LOG_5_2 = 0x00F9, // 2 1 2
|
||||
PLAYER_QUEST_LOG_6_1 = 0x00FB, // 1 1 64
|
||||
PLAYER_QUEST_LOG_6_2 = 0x00FC, // 2 1 2
|
||||
PLAYER_QUEST_LOG_7_1 = 0x00FE, // 1 1 64
|
||||
PLAYER_QUEST_LOG_7_2 = 0x00FF, // 2 1 2
|
||||
PLAYER_QUEST_LOG_8_1 = 0x0101, // 1 1 64
|
||||
PLAYER_QUEST_LOG_8_2 = 0x0102, // 2 1 2
|
||||
PLAYER_QUEST_LOG_9_1 = 0x0104, // 1 1 64
|
||||
PLAYER_QUEST_LOG_9_2 = 0x0105, // 2 1 2
|
||||
PLAYER_QUEST_LOG_10_1 = 0x0107, // 1 1 64
|
||||
PLAYER_QUEST_LOG_10_2 = 0x0108, // 2 1 2
|
||||
PLAYER_QUEST_LOG_11_1 = 0x010A, // 1 1 64
|
||||
PLAYER_QUEST_LOG_11_2 = 0x010B, // 2 1 2
|
||||
PLAYER_QUEST_LOG_12_1 = 0x010D, // 1 1 64
|
||||
PLAYER_QUEST_LOG_12_2 = 0x010E, // 2 1 2
|
||||
PLAYER_QUEST_LOG_13_1 = 0x0110, // 1 1 64
|
||||
PLAYER_QUEST_LOG_13_2 = 0x0111, // 2 1 2
|
||||
PLAYER_QUEST_LOG_14_1 = 0x0113, // 1 1 64
|
||||
PLAYER_QUEST_LOG_14_2 = 0x0114, // 2 1 2
|
||||
PLAYER_QUEST_LOG_15_1 = 0x0116, // 1 1 64
|
||||
PLAYER_QUEST_LOG_15_2 = 0x0117, // 2 1 2
|
||||
PLAYER_QUEST_LOG_16_1 = 0x0119, // 1 1 64
|
||||
PLAYER_QUEST_LOG_16_2 = 0x011A, // 2 1 2
|
||||
PLAYER_QUEST_LOG_17_1 = 0x011C, // 1 1 64
|
||||
PLAYER_QUEST_LOG_17_2 = 0x011D, // 2 1 2
|
||||
PLAYER_QUEST_LOG_18_1 = 0x011F, // 1 1 64
|
||||
PLAYER_QUEST_LOG_18_2 = 0x0120, // 2 1 2
|
||||
PLAYER_QUEST_LOG_19_1 = 0x0122, // 1 1 64
|
||||
PLAYER_QUEST_LOG_19_2 = 0x0123, // 2 1 2
|
||||
PLAYER_QUEST_LOG_20_1 = 0x0125, // 1 1 64
|
||||
PLAYER_QUEST_LOG_20_2 = 0x0126, // 2 1 2
|
||||
PLAYER_QUEST_LOG_21_1 = 0x0128, // 1 1 64
|
||||
PLAYER_QUEST_LOG_21_2 = 0x0129, // 2 1 2
|
||||
PLAYER_QUEST_LOG_22_1 = 0x012B, // 1 1 64
|
||||
PLAYER_QUEST_LOG_22_2 = 0x012C, // 2 1 2
|
||||
PLAYER_QUEST_LOG_23_1 = 0x012E, // 1 1 64
|
||||
PLAYER_QUEST_LOG_23_2 = 0x012F, // 2 1 2
|
||||
PLAYER_QUEST_LOG_24_1 = 0x0131, // 1 1 64
|
||||
PLAYER_QUEST_LOG_24_2 = 0x0132, // 2 1 2
|
||||
PLAYER_QUEST_LOG_25_1 = 0x0134, // 1 1 64
|
||||
PLAYER_QUEST_LOG_25_2 = 0x0135, // 2 1 2
|
||||
PLAYER_VISIBLE_ITEM_1_CREATOR = 0x0137, // 2 4 1
|
||||
PLAYER_VISIBLE_ITEM_1_0 = 0x0139, // 12 1 1
|
||||
PLAYER_VISIBLE_ITEM_1_PROPERTIES = 0x0145, // 1 2 1
|
||||
PLAYER_VISIBLE_ITEM_1_PAD = 0x0146, // 1 1 1
|
||||
PLAYER_VISIBLE_ITEM_2_CREATOR = 0x0147, // 2 4 1
|
||||
PLAYER_VISIBLE_ITEM_2_0 = 0x0149, // 12 1 1
|
||||
PLAYER_VISIBLE_ITEM_2_PROPERTIES = 0x0155, // 1 2 1
|
||||
PLAYER_VISIBLE_ITEM_2_PAD = 0x0156, // 1 1 1
|
||||
PLAYER_VISIBLE_ITEM_3_CREATOR = 0x0157, // 2 4 1
|
||||
PLAYER_VISIBLE_ITEM_3_0 = 0x0159, // 12 1 1
|
||||
PLAYER_VISIBLE_ITEM_3_PROPERTIES = 0x0165, // 1 2 1
|
||||
PLAYER_VISIBLE_ITEM_3_PAD = 0x0166, // 1 1 1
|
||||
PLAYER_VISIBLE_ITEM_4_CREATOR = 0x0167, // 2 4 1
|
||||
PLAYER_VISIBLE_ITEM_4_0 = 0x0169, // 12 1 1
|
||||
PLAYER_VISIBLE_ITEM_4_PROPERTIES = 0x0175, // 1 2 1
|
||||
PLAYER_VISIBLE_ITEM_4_PAD = 0x0176, // 1 1 1
|
||||
PLAYER_VISIBLE_ITEM_5_CREATOR = 0x0177, // 2 4 1
|
||||
PLAYER_VISIBLE_ITEM_5_0 = 0x0179, // 12 1 1
|
||||
PLAYER_VISIBLE_ITEM_5_PROPERTIES = 0x0185, // 1 2 1
|
||||
PLAYER_VISIBLE_ITEM_5_PAD = 0x0186, // 1 1 1
|
||||
PLAYER_VISIBLE_ITEM_6_CREATOR = 0x0187, // 2 4 1
|
||||
PLAYER_VISIBLE_ITEM_6_0 = 0x0189, // 12 1 1
|
||||
PLAYER_VISIBLE_ITEM_6_PROPERTIES = 0x0195, // 1 2 1
|
||||
PLAYER_VISIBLE_ITEM_6_PAD = 0x0196, // 1 1 1
|
||||
PLAYER_VISIBLE_ITEM_7_CREATOR = 0x0197, // 2 4 1
|
||||
PLAYER_VISIBLE_ITEM_7_0 = 0x0199, // 12 1 1
|
||||
PLAYER_VISIBLE_ITEM_7_PROPERTIES = 0x01A5, // 1 2 1
|
||||
PLAYER_VISIBLE_ITEM_7_PAD = 0x01A6, // 1 1 1
|
||||
PLAYER_VISIBLE_ITEM_8_CREATOR = 0x01A7, // 2 4 1
|
||||
PLAYER_VISIBLE_ITEM_8_0 = 0x01A9, // 12 1 1
|
||||
PLAYER_VISIBLE_ITEM_8_PROPERTIES = 0x01B5, // 1 2 1
|
||||
PLAYER_VISIBLE_ITEM_8_PAD = 0x01B6, // 1 1 1
|
||||
PLAYER_VISIBLE_ITEM_9_CREATOR = 0x01B7, // 2 4 1
|
||||
PLAYER_VISIBLE_ITEM_9_0 = 0x01B9, // 12 1 1
|
||||
PLAYER_VISIBLE_ITEM_9_PROPERTIES = 0x01C5, // 1 2 1
|
||||
PLAYER_VISIBLE_ITEM_9_PAD = 0x01C6, // 1 1 1
|
||||
PLAYER_VISIBLE_ITEM_10_CREATOR = 0x01C7, // 2 4 1
|
||||
PLAYER_VISIBLE_ITEM_10_0 = 0x01C9, // 12 1 1
|
||||
PLAYER_VISIBLE_ITEM_10_PROPERTIES = 0x01D5, // 1 2 1
|
||||
PLAYER_VISIBLE_ITEM_10_PAD = 0x01D6, // 1 1 1
|
||||
PLAYER_VISIBLE_ITEM_11_CREATOR = 0x01D7, // 2 4 1
|
||||
PLAYER_VISIBLE_ITEM_11_0 = 0x01D9, // 12 1 1
|
||||
PLAYER_VISIBLE_ITEM_11_PROPERTIES = 0x01E5, // 1 2 1
|
||||
PLAYER_VISIBLE_ITEM_11_PAD = 0x01E6, // 1 1 1
|
||||
PLAYER_VISIBLE_ITEM_12_CREATOR = 0x01E7, // 2 4 1
|
||||
PLAYER_VISIBLE_ITEM_12_0 = 0x01E9, // 12 1 1
|
||||
PLAYER_VISIBLE_ITEM_12_PROPERTIES = 0x01F5, // 1 2 1
|
||||
PLAYER_VISIBLE_ITEM_12_PAD = 0x01F6, // 1 1 1
|
||||
PLAYER_VISIBLE_ITEM_13_CREATOR = 0x01F7, // 2 4 1
|
||||
PLAYER_VISIBLE_ITEM_13_0 = 0x01F9, // 12 1 1
|
||||
PLAYER_VISIBLE_ITEM_13_PROPERTIES = 0x0205, // 1 2 1
|
||||
PLAYER_VISIBLE_ITEM_13_PAD = 0x0206, // 1 1 1
|
||||
PLAYER_VISIBLE_ITEM_14_CREATOR = 0x0207, // 2 4 1
|
||||
PLAYER_VISIBLE_ITEM_14_0 = 0x0209, // 12 1 1
|
||||
PLAYER_VISIBLE_ITEM_14_PROPERTIES = 0x0215, // 1 2 1
|
||||
PLAYER_VISIBLE_ITEM_14_PAD = 0x0216, // 1 1 1
|
||||
PLAYER_VISIBLE_ITEM_15_CREATOR = 0x0217, // 2 4 1
|
||||
PLAYER_VISIBLE_ITEM_15_0 = 0x0219, // 12 1 1
|
||||
PLAYER_VISIBLE_ITEM_15_PROPERTIES = 0x0225, // 1 2 1
|
||||
PLAYER_VISIBLE_ITEM_15_PAD = 0x0226, // 1 1 1
|
||||
PLAYER_VISIBLE_ITEM_16_CREATOR = 0x0227, // 2 4 1
|
||||
PLAYER_VISIBLE_ITEM_16_0 = 0x0229, // 12 1 1
|
||||
PLAYER_VISIBLE_ITEM_16_PROPERTIES = 0x0235, // 1 2 1
|
||||
PLAYER_VISIBLE_ITEM_16_PAD = 0x0236, // 1 1 1
|
||||
PLAYER_VISIBLE_ITEM_17_CREATOR = 0x0237, // 2 4 1
|
||||
PLAYER_VISIBLE_ITEM_17_0 = 0x0239, // 12 1 1
|
||||
PLAYER_VISIBLE_ITEM_17_PROPERTIES = 0x0245, // 1 2 1
|
||||
PLAYER_VISIBLE_ITEM_17_PAD = 0x0246, // 1 1 1
|
||||
PLAYER_VISIBLE_ITEM_18_CREATOR = 0x0247, // 2 4 1
|
||||
PLAYER_VISIBLE_ITEM_18_0 = 0x0249, // 12 1 1
|
||||
PLAYER_VISIBLE_ITEM_18_PROPERTIES = 0x0255, // 1 2 1
|
||||
PLAYER_VISIBLE_ITEM_18_PAD = 0x0256, // 1 1 1
|
||||
PLAYER_VISIBLE_ITEM_19_CREATOR = 0x0257, // 2 4 1
|
||||
PLAYER_VISIBLE_ITEM_19_0 = 0x0259, // 12 1 1
|
||||
PLAYER_VISIBLE_ITEM_19_PROPERTIES = 0x0265, // 1 2 1
|
||||
PLAYER_VISIBLE_ITEM_19_PAD = 0x0266, // 1 1 1
|
||||
PLAYER_CHOSEN_TITLE = 0x0267, // 1 1 1
|
||||
PLAYER_FIELD_INV_SLOT_HEAD = 0x0268, // 46 4 2
|
||||
PLAYER_FIELD_PACK_SLOT_1 = 0x0296, // 32 4 2
|
||||
PLAYER_FIELD_BANK_SLOT_1 = 0x02B6, // 56 4 2
|
||||
PLAYER_FIELD_BANKBAG_SLOT_1 = 0x02EE, // 14 4 2
|
||||
PLAYER_FIELD_VENDORBUYBACK_SLOT_1 = 0x02FC, // 24 4 2
|
||||
PLAYER_FIELD_KEYRING_SLOT_1 = 0x0314, // 64 4 2
|
||||
PLAYER_FARSIGHT = 0x0354, // 2 4 2
|
||||
PLAYER__FIELD_KNOWN_TITLES = 0x0356, // 2 4 2
|
||||
PLAYER_XP = 0x0358, // 1 1 2
|
||||
PLAYER_NEXT_LEVEL_XP = 0x0359, // 1 1 2
|
||||
PLAYER_SKILL_INFO_1_1 = 0x035A, // 384 2 2
|
||||
PLAYER_CHARACTER_POINTS1 = 0x04DA, // 1 1 2
|
||||
PLAYER_CHARACTER_POINTS2 = 0x04DB, // 1 1 2
|
||||
PLAYER_TRACK_CREATURES = 0x04DC, // 1 1 2
|
||||
PLAYER_TRACK_RESOURCES = 0x04DD, // 1 1 2
|
||||
PLAYER_BLOCK_PERCENTAGE = 0x04DE, // 1 3 2
|
||||
PLAYER_DODGE_PERCENTAGE = 0x04DF, // 1 3 2
|
||||
PLAYER_PARRY_PERCENTAGE = 0x04E0, // 1 3 2
|
||||
PLAYER_CRIT_PERCENTAGE = 0x04E1, // 1 3 2
|
||||
PLAYER_RANGED_CRIT_PERCENTAGE = 0x04E2, // 1 3 2
|
||||
PLAYER_OFFHAND_CRIT_PERCENTAGE = 0x04E3, // 1 3 2
|
||||
PLAYER_SPELL_CRIT_PERCENTAGE1 = 0x04E4, // 7 3 2
|
||||
// custom
|
||||
UNIT_FIELD_OFFHANDATTACKTIME = UNIT_FIELD_BASEATTACKTIME + 1,
|
||||
|
||||
UNIT_FIELD_RANGEDATTACKTIME = OBJECT_END + 0x008F, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
UNIT_FIELD_BOUNDINGRADIUS = OBJECT_END + 0x0090, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
UNIT_FIELD_COMBATREACH = OBJECT_END + 0x0091, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
UNIT_FIELD_DISPLAYID = OBJECT_END + 0x0092, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_NATIVEDISPLAYID = OBJECT_END + 0x0093, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MOUNTDISPLAYID = OBJECT_END + 0x0094, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MINDAMAGE = OBJECT_END + 0x0095, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY, UNK3
|
||||
UNIT_FIELD_MAXDAMAGE = OBJECT_END + 0x0096, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY, UNK3
|
||||
UNIT_FIELD_MINOFFHANDDAMAGE = OBJECT_END + 0x0097, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY, UNK3
|
||||
UNIT_FIELD_MAXOFFHANDDAMAGE = OBJECT_END + 0x0098, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY, UNK3
|
||||
UNIT_FIELD_BYTES_1 = OBJECT_END + 0x0099, // Size: 1, Type: BYTES, Flags: PUBLIC
|
||||
UNIT_FIELD_PETNUMBER = OBJECT_END + 0x009A, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_PET_NAME_TIMESTAMP = OBJECT_END + 0x009B, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_PETEXPERIENCE = OBJECT_END + 0x009C, // Size: 1, Type: INT, Flags: OWNER_ONLY
|
||||
UNIT_FIELD_PETNEXTLEVELEXP = OBJECT_END + 0x009D, // Size: 1, Type: INT, Flags: OWNER_ONLY
|
||||
UNIT_DYNAMIC_FLAGS = OBJECT_END + 0x009E, // Size: 1, Type: INT, Flags: DYNAMIC
|
||||
UNIT_CHANNEL_SPELL = OBJECT_END + 0x009F, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_MOD_CAST_SPEED = OBJECT_END + 0x00A0, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
UNIT_CREATED_BY_SPELL = OBJECT_END + 0x00A1, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_NPC_FLAGS = OBJECT_END + 0x00A2, // Size: 1, Type: INT, Flags: DYNAMIC
|
||||
UNIT_NPC_EMOTESTATE = OBJECT_END + 0x00A3, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_TRAINING_POINTS = OBJECT_END + 0x00A4, // Size: 1, Type: TWO_SHORT, Flags: OWNER_ONLY
|
||||
UNIT_FIELD_STAT0 = OBJECT_END + 0x00A5, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_STAT1 = OBJECT_END + 0x00A6, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_STAT2 = OBJECT_END + 0x00A7, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_STAT3 = OBJECT_END + 0x00A8, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_STAT4 = OBJECT_END + 0x00A9, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_POSSTAT0 = OBJECT_END + 0x00AA, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_POSSTAT1 = OBJECT_END + 0x00AB, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_POSSTAT2 = OBJECT_END + 0x00AC, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_POSSTAT3 = OBJECT_END + 0x00AD, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_POSSTAT4 = OBJECT_END + 0x00AE, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_NEGSTAT0 = OBJECT_END + 0x00AF, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_NEGSTAT1 = OBJECT_END + 0x00B0, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_NEGSTAT2 = OBJECT_END + 0x00B1, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_NEGSTAT3 = OBJECT_END + 0x00B2, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_NEGSTAT4 = OBJECT_END + 0x00B3, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_RESISTANCES = OBJECT_END + 0x00B4, // Size: 7, Type: INT, Flags: PRIVATE, OWNER_ONLY, UNK3
|
||||
UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE = OBJECT_END + 0x00BB, // Size: 7, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE = OBJECT_END + 0x00C2, // Size: 7, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_BASE_MANA = OBJECT_END + 0x00C9, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_BASE_HEALTH = OBJECT_END + 0x00CA, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_BYTES_2 = OBJECT_END + 0x00CB, // Size: 1, Type: BYTES, Flags: PUBLIC
|
||||
UNIT_FIELD_ATTACK_POWER = OBJECT_END + 0x00CC, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_ATTACK_POWER_MODS = OBJECT_END + 0x00CD, // Size: 1, Type: TWO_SHORT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_ATTACK_POWER_MULTIPLIER = OBJECT_END + 0x00CE, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_RANGED_ATTACK_POWER = OBJECT_END + 0x00CF, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_RANGED_ATTACK_POWER_MODS = OBJECT_END + 0x00D0, // Size: 1, Type: TWO_SHORT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER = OBJECT_END + 0x00D1, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_MINRANGEDDAMAGE = OBJECT_END + 0x00D2, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_MAXRANGEDDAMAGE = OBJECT_END + 0x00D3, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_POWER_COST_MODIFIER = OBJECT_END + 0x00D4, // Size: 7, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_POWER_COST_MULTIPLIER = OBJECT_END + 0x00DB, // Size: 7, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_END = OBJECT_END + 0x00E2,
|
||||
|
||||
PLAYER_DUEL_ARBITER = UNIT_END + 0x0000, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_FLAGS = UNIT_END + 0x0002, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_GUILDID = UNIT_END + 0x0003, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_GUILDRANK = UNIT_END + 0x0004, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_BYTES = UNIT_END + 0x0005, // Size: 1, Type: BYTES, Flags: PUBLIC
|
||||
PLAYER_BYTES_2 = UNIT_END + 0x0006, // Size: 1, Type: BYTES, Flags: PUBLIC
|
||||
PLAYER_BYTES_3 = UNIT_END + 0x0007, // Size: 1, Type: BYTES, Flags: PUBLIC
|
||||
PLAYER_DUEL_TEAM = UNIT_END + 0x0008, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_GUILD_TIMESTAMP = UNIT_END + 0x0009, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_QUEST_LOG_1_1 = UNIT_END + 0x000A, // Size: 1, Type: INT, Flags: GROUP_ONLY
|
||||
PLAYER_QUEST_LOG_1_2 = UNIT_END + 0x000B, // Size: 2, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_2_1 = UNIT_END + 0x000D, // Size: 1, Type: INT, Flags: GROUP_ONLY
|
||||
PLAYER_QUEST_LOG_2_2 = UNIT_END + 0x000E, // Size: 2, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_3_1 = UNIT_END + 0x0010, // Size: 1, Type: INT, Flags: GROUP_ONLY
|
||||
PLAYER_QUEST_LOG_3_2 = UNIT_END + 0x0011, // Size: 2, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_4_1 = UNIT_END + 0x0013, // Size: 1, Type: INT, Flags: GROUP_ONLY
|
||||
PLAYER_QUEST_LOG_4_2 = UNIT_END + 0x0014, // Size: 2, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_5_1 = UNIT_END + 0x0016, // Size: 1, Type: INT, Flags: GROUP_ONLY
|
||||
PLAYER_QUEST_LOG_5_2 = UNIT_END + 0x0017, // Size: 2, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_6_1 = UNIT_END + 0x0019, // Size: 1, Type: INT, Flags: GROUP_ONLY
|
||||
PLAYER_QUEST_LOG_6_2 = UNIT_END + 0x001A, // Size: 2, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_7_1 = UNIT_END + 0x001C, // Size: 1, Type: INT, Flags: GROUP_ONLY
|
||||
PLAYER_QUEST_LOG_7_2 = UNIT_END + 0x001D, // Size: 2, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_8_1 = UNIT_END + 0x001F, // Size: 1, Type: INT, Flags: GROUP_ONLY
|
||||
PLAYER_QUEST_LOG_8_2 = UNIT_END + 0x0020, // Size: 2, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_9_1 = UNIT_END + 0x0022, // Size: 1, Type: INT, Flags: GROUP_ONLY
|
||||
PLAYER_QUEST_LOG_9_2 = UNIT_END + 0x0023, // Size: 2, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_10_1 = UNIT_END + 0x0025, // Size: 1, Type: INT, Flags: GROUP_ONLY
|
||||
PLAYER_QUEST_LOG_10_2 = UNIT_END + 0x0026, // Size: 2, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_11_1 = UNIT_END + 0x0028, // Size: 1, Type: INT, Flags: GROUP_ONLY
|
||||
PLAYER_QUEST_LOG_11_2 = UNIT_END + 0x0029, // Size: 2, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_12_1 = UNIT_END + 0x002B, // Size: 1, Type: INT, Flags: GROUP_ONLY
|
||||
PLAYER_QUEST_LOG_12_2 = UNIT_END + 0x002C, // Size: 2, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_13_1 = UNIT_END + 0x002E, // Size: 1, Type: INT, Flags: GROUP_ONLY
|
||||
PLAYER_QUEST_LOG_13_2 = UNIT_END + 0x002F, // Size: 2, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_14_1 = UNIT_END + 0x0031, // Size: 1, Type: INT, Flags: GROUP_ONLY
|
||||
PLAYER_QUEST_LOG_14_2 = UNIT_END + 0x0032, // Size: 2, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_15_1 = UNIT_END + 0x0034, // Size: 1, Type: INT, Flags: GROUP_ONLY
|
||||
PLAYER_QUEST_LOG_15_2 = UNIT_END + 0x0035, // Size: 2, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_16_1 = UNIT_END + 0x0037, // Size: 1, Type: INT, Flags: GROUP_ONLY
|
||||
PLAYER_QUEST_LOG_16_2 = UNIT_END + 0x0038, // Size: 2, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_17_1 = UNIT_END + 0x003A, // Size: 1, Type: INT, Flags: GROUP_ONLY
|
||||
PLAYER_QUEST_LOG_17_2 = UNIT_END + 0x003B, // Size: 2, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_18_1 = UNIT_END + 0x003D, // Size: 1, Type: INT, Flags: GROUP_ONLY
|
||||
PLAYER_QUEST_LOG_18_2 = UNIT_END + 0x003E, // Size: 2, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_19_1 = UNIT_END + 0x0040, // Size: 1, Type: INT, Flags: GROUP_ONLY
|
||||
PLAYER_QUEST_LOG_19_2 = UNIT_END + 0x0041, // Size: 2, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_20_1 = UNIT_END + 0x0043, // Size: 1, Type: INT, Flags: GROUP_ONLY
|
||||
PLAYER_QUEST_LOG_20_2 = UNIT_END + 0x0044, // Size: 2, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_21_1 = UNIT_END + 0x0046, // Size: 1, Type: INT, Flags: GROUP_ONLY
|
||||
PLAYER_QUEST_LOG_21_2 = UNIT_END + 0x0047, // Size: 2, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_22_1 = UNIT_END + 0x0049, // Size: 1, Type: INT, Flags: GROUP_ONLY
|
||||
PLAYER_QUEST_LOG_22_2 = UNIT_END + 0x004A, // Size: 2, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_23_1 = UNIT_END + 0x004C, // Size: 1, Type: INT, Flags: GROUP_ONLY
|
||||
PLAYER_QUEST_LOG_23_2 = UNIT_END + 0x004D, // Size: 2, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_24_1 = UNIT_END + 0x004F, // Size: 1, Type: INT, Flags: GROUP_ONLY
|
||||
PLAYER_QUEST_LOG_24_2 = UNIT_END + 0x0050, // Size: 2, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_25_1 = UNIT_END + 0x0052, // Size: 1, Type: INT, Flags: GROUP_ONLY
|
||||
PLAYER_QUEST_LOG_25_2 = UNIT_END + 0x0053, // Size: 2, Type: INT, Flags: PRIVATE
|
||||
PLAYER_VISIBLE_ITEM_1_CREATOR = UNIT_END + 0x0055, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_1_0 = UNIT_END + 0x0057, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_1_PROPERTIES = UNIT_END + 0x0063, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_1_PAD = UNIT_END + 0x0064, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_2_CREATOR = UNIT_END + 0x0065, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_2_0 = UNIT_END + 0x0067, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_2_PROPERTIES = UNIT_END + 0x0073, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_2_PAD = UNIT_END + 0x0074, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_3_CREATOR = UNIT_END + 0x0075, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_3_0 = UNIT_END + 0x0077, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_3_PROPERTIES = UNIT_END + 0x0083, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_3_PAD = UNIT_END + 0x0084, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_4_CREATOR = UNIT_END + 0x0085, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_4_0 = UNIT_END + 0x0087, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_4_PROPERTIES = UNIT_END + 0x0093, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_4_PAD = UNIT_END + 0x0094, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_5_CREATOR = UNIT_END + 0x0095, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_5_0 = UNIT_END + 0x0097, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_5_PROPERTIES = UNIT_END + 0x00A3, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_5_PAD = UNIT_END + 0x00A4, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_6_CREATOR = UNIT_END + 0x00A5, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_6_0 = UNIT_END + 0x00A7, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_6_PROPERTIES = UNIT_END + 0x00B3, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_6_PAD = UNIT_END + 0x00B4, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_7_CREATOR = UNIT_END + 0x00B5, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_7_0 = UNIT_END + 0x00B7, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_7_PROPERTIES = UNIT_END + 0x00C3, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_7_PAD = UNIT_END + 0x00C4, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_8_CREATOR = UNIT_END + 0x00C5, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_8_0 = UNIT_END + 0x00C7, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_8_PROPERTIES = UNIT_END + 0x00D3, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_8_PAD = UNIT_END + 0x00D4, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_9_CREATOR = UNIT_END + 0x00D5, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_9_0 = UNIT_END + 0x00D7, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_9_PROPERTIES = UNIT_END + 0x00E3, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_9_PAD = UNIT_END + 0x00E4, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_10_CREATOR = UNIT_END + 0x00E5, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_10_0 = UNIT_END + 0x00E7, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_10_PROPERTIES = UNIT_END + 0x00F3, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_10_PAD = UNIT_END + 0x00F4, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_11_CREATOR = UNIT_END + 0x00F5, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_11_0 = UNIT_END + 0x00F7, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_11_PROPERTIES = UNIT_END + 0x0103, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_11_PAD = UNIT_END + 0x0104, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_12_CREATOR = UNIT_END + 0x0105, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_12_0 = UNIT_END + 0x0107, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_12_PROPERTIES = UNIT_END + 0x0113, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_12_PAD = UNIT_END + 0x0114, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_13_CREATOR = UNIT_END + 0x0115, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_13_0 = UNIT_END + 0x0117, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_13_PROPERTIES = UNIT_END + 0x0123, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_13_PAD = UNIT_END + 0x0124, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_14_CREATOR = UNIT_END + 0x0125, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_14_0 = UNIT_END + 0x0127, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_14_PROPERTIES = UNIT_END + 0x0133, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_14_PAD = UNIT_END + 0x0134, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_15_CREATOR = UNIT_END + 0x0135, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_15_0 = UNIT_END + 0x0137, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_15_PROPERTIES = UNIT_END + 0x0143, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_15_PAD = UNIT_END + 0x0144, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_16_CREATOR = UNIT_END + 0x0145, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_16_0 = UNIT_END + 0x0147, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_16_PROPERTIES = UNIT_END + 0x0153, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_16_PAD = UNIT_END + 0x0154, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_17_CREATOR = UNIT_END + 0x0155, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_17_0 = UNIT_END + 0x0157, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_17_PROPERTIES = UNIT_END + 0x0163, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_17_PAD = UNIT_END + 0x0164, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_18_CREATOR = UNIT_END + 0x0165, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_18_0 = UNIT_END + 0x0167, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_18_PROPERTIES = UNIT_END + 0x0173, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_18_PAD = UNIT_END + 0x0174, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_19_CREATOR = UNIT_END + 0x0175, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_19_0 = UNIT_END + 0x0177, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_19_PROPERTIES = UNIT_END + 0x0183, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_19_PAD = UNIT_END + 0x0184, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_CHOSEN_TITLE = UNIT_END + 0x0185, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_FIELD_INV_SLOT_HEAD = UNIT_END + 0x0186, // Size: 46, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FIELD_PACK_SLOT_1 = UNIT_END + 0x01B4, // Size: 32, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FIELD_BANK_SLOT_1 = UNIT_END + 0x01D4, // Size: 56, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FIELD_BANKBAG_SLOT_1 = UNIT_END + 0x020C, // Size: 14, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FIELD_VENDORBUYBACK_SLOT_1 = UNIT_END + 0x021A, // Size: 24, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FIELD_KEYRING_SLOT_1 = UNIT_END + 0x0232, // Size: 64, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FARSIGHT = UNIT_END + 0x0272, // Size: 2, Type: LONG, Flags: PRIVATE
|
||||
PLAYER__FIELD_KNOWN_TITLES = UNIT_END + 0x0274, // Size: 2, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_XP = UNIT_END + 0x0276, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_NEXT_LEVEL_XP = UNIT_END + 0x0277, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_SKILL_INFO_1_1 = UNIT_END + 0x0278, // Size: 384, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_CHARACTER_POINTS1 = UNIT_END + 0x03F8, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_CHARACTER_POINTS2 = UNIT_END + 0x03F9, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_TRACK_CREATURES = UNIT_END + 0x03FA, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_TRACK_RESOURCES = UNIT_END + 0x03FB, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_BLOCK_PERCENTAGE = UNIT_END + 0x03FC, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_DODGE_PERCENTAGE = UNIT_END + 0x03FD, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_PARRY_PERCENTAGE = UNIT_END + 0x03FE, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_EXPERTISE = UNIT_END + 0x03FF, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_CRIT_PERCENTAGE = UNIT_END + 0x0400, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_RANGED_CRIT_PERCENTAGE = UNIT_END + 0x0401, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_OFFHAND_CRIT_PERCENTAGE = UNIT_END + 0x0402, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_SPELL_CRIT_PERCENTAGE1 = UNIT_END + 0x0403, // Size: 7, Type: FLOAT, Flags: PRIVATE
|
||||
|
||||
// custom
|
||||
PLAYER_HOLY_SPELL_CRIT_PERCENTAGE = PLAYER_SPELL_CRIT_PERCENTAGE1+1,
|
||||
@ -330,120 +324,146 @@ enum EUnitFields
|
||||
PLAYER_SHADOW_SPELL_CRIT_PERCENTAGE = PLAYER_SPELL_CRIT_PERCENTAGE1+5,
|
||||
PLAYER_ARCANE_SPELL_CRIT_PERCENTAGE = PLAYER_SPELL_CRIT_PERCENTAGE1+6,
|
||||
|
||||
PLAYER_EXPLORED_ZONES_1 = 0x04EB, // 64 5 2
|
||||
PLAYER_REST_STATE_EXPERIENCE = 0x052B, // 1 1 2
|
||||
PLAYER_FIELD_COINAGE = 0x052C, // 1 1 2
|
||||
PLAYER_FIELD_MOD_DAMAGE_DONE_POS = 0x052D, // 7 1 2
|
||||
PLAYER_FIELD_MOD_DAMAGE_DONE_NEG = 0x0534, // 7 1 2
|
||||
PLAYER_FIELD_MOD_DAMAGE_DONE_PCT = 0x053B, // 7 1 2
|
||||
PLAYER_FIELD_MOD_HEALING_DONE_POS = 0x0542, // 1 1 2
|
||||
PLAYER_FIELD_MOD_TARGET_RESISTANCE = 0x0543, // 1 1 2
|
||||
PLAYER_FIELD_BYTES = 0x0544, // 1 5 2
|
||||
PLAYER_AMMO_ID = 0x0545, // 1 1 2
|
||||
PLAYER_SELF_RES_SPELL = 0x0546, // 1 1 2
|
||||
PLAYER_FIELD_PVP_MEDALS = 0x0547, // 1 1 2
|
||||
PLAYER_FIELD_BUYBACK_PRICE_1 = 0x0548, // 12 1 2
|
||||
PLAYER_FIELD_BUYBACK_TIMESTAMP_1 = 0x0554, // 12 1 2
|
||||
PLAYER_FIELD_KILLS = 0x0560, // 1 2 2
|
||||
PLAYER_FIELD_TODAY_CONTRIBUTION = 0x0561, // 1 1 2
|
||||
PLAYER_FIELD_YESTERDAY_CONTRIBUTION = 0x0562, // 1 1 2
|
||||
PLAYER_FIELD_LIFETIME_HONORBALE_KILLS = 0x0563, // 1 1 2
|
||||
PLAYER_FIELD_BYTES2 = 0x0564, // 1 5 2
|
||||
PLAYER_FIELD_WATCHED_FACTION_INDEX = 0x0565, // 1 1 2
|
||||
PLAYER_FIELD_COMBAT_RATING_1 = 0x0566, // 23 1 2
|
||||
PLAYER_SHIELD_BLOCK = UNIT_END + 0x040A, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_EXPLORED_ZONES_1 = UNIT_END + 0x040B, // Size: 64, Type: BYTES, Flags: PRIVATE
|
||||
PLAYER_REST_STATE_EXPERIENCE = UNIT_END + 0x044B, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_COINAGE = UNIT_END + 0x044C, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_DAMAGE_DONE_POS = UNIT_END + 0x044D, // Size: 7, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_DAMAGE_DONE_NEG = UNIT_END + 0x0454, // Size: 7, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_DAMAGE_DONE_PCT = UNIT_END + 0x045B, // Size: 7, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_HEALING_DONE_POS = UNIT_END + 0x0462, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_TARGET_RESISTANCE = UNIT_END + 0x0463, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_BYTES = UNIT_END + 0x0464, // Size: 1, Type: BYTES, Flags: PRIVATE
|
||||
PLAYER_AMMO_ID = UNIT_END + 0x0465, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_SELF_RES_SPELL = UNIT_END + 0x0466, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_PVP_MEDALS = UNIT_END + 0x0467, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_BUYBACK_PRICE_1 = UNIT_END + 0x0468, // Size: 12, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_BUYBACK_TIMESTAMP_1 = UNIT_END + 0x0474, // Size: 12, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_KILLS = UNIT_END + 0x0480, // Size: 1, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_FIELD_TODAY_CONTRIBUTION = UNIT_END + 0x0481, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_YESTERDAY_CONTRIBUTION = UNIT_END + 0x0482, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_LIFETIME_HONORBALE_KILLS = UNIT_END + 0x0483, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_BYTES2 = UNIT_END + 0x0484, // Size: 1, Type: BYTES, Flags: PRIVATE
|
||||
PLAYER_FIELD_WATCHED_FACTION_INDEX = UNIT_END + 0x0485, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_COMBAT_RATING_1 = UNIT_END + 0x0486, // Size: 24, Type: INT, Flags: PRIVATE
|
||||
|
||||
// custom
|
||||
// custom // client names:
|
||||
// CR_WEAPON_SKILL
|
||||
PLAYER_FIELD_ALL_WEAPONS_SKILL_RATING = PLAYER_FIELD_COMBAT_RATING_1,
|
||||
// CR_DEFENSE_SKILL
|
||||
PLAYER_FIELD_DEFENCE_RATING = PLAYER_FIELD_COMBAT_RATING_1+1,
|
||||
// CR_DODGE
|
||||
PLAYER_FIELD_DODGE_RATING = PLAYER_FIELD_COMBAT_RATING_1+2,
|
||||
// CR_PARRY
|
||||
PLAYER_FIELD_PARRY_RATING = PLAYER_FIELD_COMBAT_RATING_1+3,
|
||||
// CR_BLOCK
|
||||
PLAYER_FIELD_BLOCK_RATING = PLAYER_FIELD_COMBAT_RATING_1+4,
|
||||
// CR_HIT_MELEE
|
||||
PLAYER_FIELD_MELEE_HIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+5,
|
||||
// CR_HIT_RANGED
|
||||
PLAYER_FIELD_RANGED_HIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+6,
|
||||
// CR_HIT_SPELL
|
||||
PLAYER_FIELD_SPELL_HIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+7,
|
||||
// CR_CRIT_MELEE
|
||||
PLAYER_FIELD_MELEE_CRIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+8,
|
||||
// CR_CRIT_RANGED
|
||||
PLAYER_FIELD_RANGED_CRIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+9,
|
||||
// CR_CRIT_SPELL
|
||||
PLAYER_FIELD_SPELL_CRIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+10,
|
||||
PLAYER_FIELD_HIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+11, // unsure, was PLAYER_FIELD_UNK1_RATING
|
||||
PLAYER_FIELD_CRIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+12, // unsure, was PLAYER_FIELD_UNK2_RATING
|
||||
// CR_HIT_TAKEN_MELEE
|
||||
PLAYER_FIELD_HIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+11,
|
||||
// CR_HIT_TAKEN_RANGED
|
||||
PLAYER_FIELD_CRIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+12,
|
||||
// CR_HIT_TAKEN_SPELL
|
||||
PLAYER_FIELD_UNK3_RATING = PLAYER_FIELD_COMBAT_RATING_1+13,
|
||||
// CR_CRIT_TAKEN_MELEE
|
||||
PLAYER_FIELD_UNK4_RATING = PLAYER_FIELD_COMBAT_RATING_1+14,
|
||||
// CR_CRIT_TAKEN_RANGED
|
||||
PLAYER_FIELD_UNK5_RATING = PLAYER_FIELD_COMBAT_RATING_1+15,
|
||||
// CR_CRIT_TAKEN_SPELL
|
||||
PLAYER_FIELD_RESILIENCE_RATING = PLAYER_FIELD_COMBAT_RATING_1+16,
|
||||
// CR_HASTE_MELEE
|
||||
PLAYER_FIELD_MELEE_HASTE_RATING = PLAYER_FIELD_COMBAT_RATING_1+17,
|
||||
PLAYER_FIELD_RANGED_HASTE_RATING = PLAYER_FIELD_COMBAT_RATING_1+19,
|
||||
PLAYER_FIELD_SPELL_HASTE_RATING = PLAYER_FIELD_COMBAT_RATING_1+20,
|
||||
PLAYER_FIELD_MELEE_WEAPON_SKILL_RATING = PLAYER_FIELD_COMBAT_RATING_1+21,
|
||||
PLAYER_FIELD_OFFHAND_WEAPON_SKILL_RATING = PLAYER_FIELD_COMBAT_RATING_1+22,
|
||||
PLAYER_FIELD_RANGED_WEAPON_SKILL_RATING = PLAYER_FIELD_COMBAT_RATING_1+23,
|
||||
// CR_HASTE_RANGED
|
||||
PLAYER_FIELD_RANGED_HASTE_RATING = PLAYER_FIELD_COMBAT_RATING_1+18,
|
||||
// CR_HASTE_SPELL
|
||||
PLAYER_FIELD_SPELL_HASTE_RATING = PLAYER_FIELD_COMBAT_RATING_1+19,
|
||||
// CR_WEAPON_SKILL_MAINHAND
|
||||
PLAYER_FIELD_MELEE_WEAPON_SKILL_RATING = PLAYER_FIELD_COMBAT_RATING_1+20,
|
||||
// CR_WEAPON_SKILL_OFFHAND
|
||||
PLAYER_FIELD_OFFHAND_WEAPON_SKILL_RATING = PLAYER_FIELD_COMBAT_RATING_1+21,
|
||||
// CR_WEAPON_SKILL_RANGED
|
||||
PLAYER_FIELD_RANGED_WEAPON_SKILL_RATING = PLAYER_FIELD_COMBAT_RATING_1+22,
|
||||
// CR_EXPERTISE
|
||||
PLAYER_FIELD_EXPERTISE_RATING = PLAYER_FIELD_COMBAT_RATING_1+23,
|
||||
|
||||
PLAYER_FIELD_ARENA_TEAM_INFO_1_1 = 0x057D, // 15 1 2
|
||||
PLAYER_FIELD_ARENA_TEAM_INFO_1_1 = UNIT_END + 0x049E, // Size: 18, Type: INT, Flags: PRIVATE
|
||||
|
||||
// custom
|
||||
PLAYER_FIELD_ARENA_TEAM_ID_2v2 = PLAYER_FIELD_ARENA_TEAM_INFO_1_1,
|
||||
PLAYER_FIELD_ARENA_TEAM_ID_3v3 = PLAYER_FIELD_ARENA_TEAM_INFO_1_1+5,
|
||||
PLAYER_FIELD_ARENA_TEAM_ID_5v5 = PLAYER_FIELD_ARENA_TEAM_INFO_1_1+10,
|
||||
PLAYER_FIELD_ARENA_TEAM_ID_3v3 = PLAYER_FIELD_ARENA_TEAM_INFO_1_1+6,
|
||||
PLAYER_FIELD_ARENA_TEAM_ID_5v5 = PLAYER_FIELD_ARENA_TEAM_INFO_1_1+12,
|
||||
|
||||
PLAYER_FIELD_HONOR_CURRENCY = 0x058C, // 1 1 2
|
||||
PLAYER_FIELD_ARENA_CURRENCY = 0x058D, // 1 1 2
|
||||
PLAYER_FIELD_MOD_MANA_REGEN = 0x058E, // 1 3 2
|
||||
PLAYER_FIELD_MOD_MANA_REGEN_INTERRUPT = 0x058F, // 1 3 2
|
||||
PLAYER_FIELD_MAX_LEVEL = 0x0590, // 1 1 2
|
||||
PLAYER_FIELD_DAILY_QUESTS_1 = 0x0591, // 10 1 2
|
||||
PLAYER_FIELD_PADDING = 0x059B, // 1 1 0
|
||||
PLAYER_END = 0x059C,
|
||||
PLAYER_FIELD_HONOR_CURRENCY = UNIT_END + 0x04B0, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_ARENA_CURRENCY = UNIT_END + 0x04B1, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_MANA_REGEN = UNIT_END + 0x04B2, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_MANA_REGEN_INTERRUPT = UNIT_END + 0x04B3, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MAX_LEVEL = UNIT_END + 0x04B4, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_DAILY_QUESTS_1 = UNIT_END + 0x04B5, // Size: 10, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_PADDING = UNIT_END + 0x04BF, // Size: 1, Type: INT, Flags: NONE
|
||||
PLAYER_END = UNIT_END + 0x04C0,
|
||||
};
|
||||
|
||||
enum EGameObjectFields
|
||||
{
|
||||
OBJECT_FIELD_CREATED_BY = 0x0006, // 2 4 1
|
||||
GAMEOBJECT_DISPLAYID = 0x0008, // 1 1 1
|
||||
GAMEOBJECT_FLAGS = 0x0009, // 1 1 1
|
||||
GAMEOBJECT_ROTATION = 0x000A, // 4 3 1
|
||||
GAMEOBJECT_STATE = 0x000E, // 1 1 1
|
||||
GAMEOBJECT_POS_X = 0x000F, // 1 3 1
|
||||
GAMEOBJECT_POS_Y = 0x0010, // 1 3 1
|
||||
GAMEOBJECT_POS_Z = 0x0011, // 1 3 1
|
||||
GAMEOBJECT_FACING = 0x0012, // 1 3 1
|
||||
GAMEOBJECT_DYN_FLAGS = 0x0013, // 1 1 256
|
||||
GAMEOBJECT_FACTION = 0x0014, // 1 1 1
|
||||
GAMEOBJECT_TYPE_ID = 0x0015, // 1 1 1
|
||||
GAMEOBJECT_LEVEL = 0x0016, // 1 1 1
|
||||
GAMEOBJECT_ARTKIT = 0x0017, // 1 1 1
|
||||
GAMEOBJECT_ANIMPROGRESS = 0x0018, // 1 1 256
|
||||
GAMEOBJECT_PADDING = 0x0019, // 1 1 0
|
||||
GAMEOBJECT_END = 0x001A,
|
||||
OBJECT_FIELD_CREATED_BY = OBJECT_END + 0x0000, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
GAMEOBJECT_DISPLAYID = OBJECT_END + 0x0002, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
GAMEOBJECT_FLAGS = OBJECT_END + 0x0003, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
GAMEOBJECT_ROTATION = OBJECT_END + 0x0004, // Size: 4, Type: FLOAT, Flags: PUBLIC
|
||||
GAMEOBJECT_STATE = OBJECT_END + 0x0008, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
GAMEOBJECT_POS_X = OBJECT_END + 0x0009, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
GAMEOBJECT_POS_Y = OBJECT_END + 0x000A, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
GAMEOBJECT_POS_Z = OBJECT_END + 0x000B, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
GAMEOBJECT_FACING = OBJECT_END + 0x000C, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
GAMEOBJECT_DYN_FLAGS = OBJECT_END + 0x000D, // Size: 1, Type: INT, Flags: DYNAMIC
|
||||
GAMEOBJECT_FACTION = OBJECT_END + 0x000E, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
GAMEOBJECT_TYPE_ID = OBJECT_END + 0x000F, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
GAMEOBJECT_LEVEL = OBJECT_END + 0x0010, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
GAMEOBJECT_ARTKIT = OBJECT_END + 0x0011, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
GAMEOBJECT_ANIMPROGRESS = OBJECT_END + 0x0012, // Size: 1, Type: INT, Flags: DYNAMIC
|
||||
GAMEOBJECT_PADDING = OBJECT_END + 0x0013, // Size: 1, Type: INT, Flags: NONE
|
||||
GAMEOBJECT_END = OBJECT_END + 0x0014,
|
||||
};
|
||||
|
||||
enum EDynamicObjectFields
|
||||
{
|
||||
DYNAMICOBJECT_CASTER = 0x0006, // 2 4 1
|
||||
DYNAMICOBJECT_BYTES = 0x0008, // 1 5 1
|
||||
DYNAMICOBJECT_SPELLID = 0x0009, // 1 1 1
|
||||
DYNAMICOBJECT_RADIUS = 0x000A, // 1 3 1
|
||||
DYNAMICOBJECT_POS_X = 0x000B, // 1 3 1
|
||||
DYNAMICOBJECT_POS_Y = 0x000C, // 1 3 1
|
||||
DYNAMICOBJECT_POS_Z = 0x000D, // 1 3 1
|
||||
DYNAMICOBJECT_FACING = 0x000E, // 1 3 1
|
||||
DYNAMICOBJECT_PAD = 0x000F, // 1 5 1
|
||||
DYNAMICOBJECT_END = 0x0010,
|
||||
DYNAMICOBJECT_CASTER = OBJECT_END + 0x0000, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
DYNAMICOBJECT_BYTES = OBJECT_END + 0x0002, // Size: 1, Type: BYTES, Flags: PUBLIC
|
||||
DYNAMICOBJECT_SPELLID = OBJECT_END + 0x0003, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
DYNAMICOBJECT_RADIUS = OBJECT_END + 0x0004, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
DYNAMICOBJECT_POS_X = OBJECT_END + 0x0005, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
DYNAMICOBJECT_POS_Y = OBJECT_END + 0x0006, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
DYNAMICOBJECT_POS_Z = OBJECT_END + 0x0007, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
DYNAMICOBJECT_FACING = OBJECT_END + 0x0008, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
DYNAMICOBJECT_PAD = OBJECT_END + 0x0009, // Size: 1, Type: BYTES, Flags: PUBLIC
|
||||
DYNAMICOBJECT_END = OBJECT_END + 0x000A,
|
||||
};
|
||||
|
||||
enum ECorpseFields
|
||||
{
|
||||
CORPSE_FIELD_OWNER = 0x0006, // 2 4 1
|
||||
CORPSE_FIELD_FACING = 0x0008, // 1 3 1
|
||||
CORPSE_FIELD_POS_X = 0x0009, // 1 3 1
|
||||
CORPSE_FIELD_POS_Y = 0x000A, // 1 3 1
|
||||
CORPSE_FIELD_POS_Z = 0x000B, // 1 3 1
|
||||
CORPSE_FIELD_DISPLAY_ID = 0x000C, // 1 1 1
|
||||
CORPSE_FIELD_ITEM = 0x000D, // 19 1 1
|
||||
CORPSE_FIELD_BYTES_1 = 0x0020, // 1 5 1
|
||||
CORPSE_FIELD_BYTES_2 = 0x0021, // 1 5 1
|
||||
CORPSE_FIELD_GUILD = 0x0022, // 1 1 1
|
||||
CORPSE_FIELD_FLAGS = 0x0023, // 1 1 1
|
||||
CORPSE_FIELD_DYNAMIC_FLAGS = 0x0024, // 1 1 256
|
||||
CORPSE_FIELD_PAD = 0x0025, // 1 1 0
|
||||
CORPSE_END = 0x0026,
|
||||
CORPSE_FIELD_OWNER = OBJECT_END + 0x0000, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
CORPSE_FIELD_FACING = OBJECT_END + 0x0002, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
CORPSE_FIELD_POS_X = OBJECT_END + 0x0003, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
CORPSE_FIELD_POS_Y = OBJECT_END + 0x0004, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
CORPSE_FIELD_POS_Z = OBJECT_END + 0x0005, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
CORPSE_FIELD_DISPLAY_ID = OBJECT_END + 0x0006, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
CORPSE_FIELD_ITEM = OBJECT_END + 0x0007, // Size: 19, Type: INT, Flags: PUBLIC
|
||||
CORPSE_FIELD_BYTES_1 = OBJECT_END + 0x001A, // Size: 1, Type: BYTES, Flags: PUBLIC
|
||||
CORPSE_FIELD_BYTES_2 = OBJECT_END + 0x001B, // Size: 1, Type: BYTES, Flags: PUBLIC
|
||||
CORPSE_FIELD_GUILD = OBJECT_END + 0x001C, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
CORPSE_FIELD_FLAGS = OBJECT_END + 0x001D, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
CORPSE_FIELD_DYNAMIC_FLAGS = OBJECT_END + 0x001E, // Size: 1, Type: INT, Flags: DYNAMIC
|
||||
CORPSE_FIELD_PAD = OBJECT_END + 0x001F, // Size: 1, Type: INT, Flags: NONE
|
||||
CORPSE_END = OBJECT_END + 0x0020,
|
||||
};
|
||||
#endif
|
||||
|
||||
@ -56,6 +56,12 @@ WorldSession::~WorldSession()
|
||||
DEBUG(logdebug("~WorldSession() this=0x%X _instance=0x%X",this,_instance));
|
||||
}
|
||||
|
||||
void WorldSession::SetMustDie(void)
|
||||
{
|
||||
_mustdie = true;
|
||||
logdebug("WorldSession: Must die now.");
|
||||
}
|
||||
|
||||
void WorldSession::Start(void)
|
||||
{
|
||||
log("Connecting to '%s' on port %u",GetInstance()->GetConf()->worldhost.c_str(),GetInstance()->GetConf()->worldport);
|
||||
@ -70,9 +76,11 @@ void WorldSession::Start(void)
|
||||
// if we cant connect, wait until the socket gives up (after 5 secs)
|
||||
while( (!MustDie()) && (!_socket->IsOk()) && (!GetInstance()->Stopped()) )
|
||||
{
|
||||
logdev("WorldSession::Start(): Socket not ok, waiting...");
|
||||
_sh.Select(3,0);
|
||||
GetInstance()->Sleep(100);
|
||||
}
|
||||
logdev("WorldSession::Start() done, mustdie:%u, socket_ok:%u stopped:%u",MustDie(),_socket->IsOk(),GetInstance()->Stopped());
|
||||
}
|
||||
|
||||
void WorldSession::_LoadCache(void)
|
||||
@ -169,7 +177,7 @@ void WorldSession::HandleWorldPacket(WorldPacket *packet)
|
||||
(this->*table[hpos].handler)(*packet);
|
||||
|
||||
// if there is a script attached to that opcode, call it now.
|
||||
// note: the pkt rpos needs to be reset in by the scripts!
|
||||
// note: the pkt rpos needs to be reset by the scripts!
|
||||
std::string scname = "opcode::";
|
||||
scname += stringToLower(GetOpcodeName(packet->GetOpcode()));
|
||||
if(sc->ScriptExists(scname))
|
||||
@ -186,6 +194,8 @@ void WorldSession::HandleWorldPacket(WorldPacket *packet)
|
||||
{
|
||||
logerror("Exception while handling opcode %u!",packet->GetOpcode());
|
||||
logerror("Data: pktsize=%u, handler=0x%X queuesize=%u",packet->size(),table[hpos].handler,pktQueue.size());
|
||||
logerror("Packet Hexdump:");
|
||||
logerror("%s",toHexDump((uint8*)packet->contents(),packet->size(),true).c_str());
|
||||
}
|
||||
|
||||
delete packet;
|
||||
@ -229,6 +239,7 @@ OpcodeHandler *WorldSession::_GetOpcodeHandlerTable() const
|
||||
{SMSG_COMPRESSED_UPDATE_OBJECT, &WorldSession::_HandleCompressedUpdateObjectOpcode},
|
||||
{SMSG_UPDATE_OBJECT, &WorldSession::_HandleUpdateObjectOpcode},
|
||||
{SMSG_CAST_RESULT, &WorldSession::_HandleCastResultOpcode},
|
||||
{SMSG_CAST_SUCCESS, &WorldSession::_HandleCastSuccessOpcode},
|
||||
{SMSG_ITEM_QUERY_SINGLE_RESPONSE, &WorldSession::_HandleItemQuerySingleResponseOpcode},
|
||||
{SMSG_DESTROY_OBJECT, &WorldSession::_HandleDestroyObjectOpcode},
|
||||
{SMSG_INITIAL_SPELLS, &WorldSession::_HandleInitialSpellsOpcode},
|
||||
@ -756,15 +767,15 @@ void WorldSession::_HandleMovementOpcode(WorldPacket& recvPacket)
|
||||
|
||||
void WorldSession::_HandleTelePortAckOpcode(WorldPacket& recvPacket)
|
||||
{
|
||||
uint32 unk32,time;
|
||||
uint64 guid;
|
||||
|
||||
float x, y, z, o;
|
||||
uint32 unk32,time;
|
||||
uint64 guid;
|
||||
uint8 unk8;
|
||||
float x, y, z, o;
|
||||
|
||||
guid = recvPacket.GetPackedGuid();
|
||||
recvPacket >> unk32 >> unk32 >> time >> x >> y >> z >> o >> unk32;
|
||||
recvPacket >> unk32 >> unk32 >> unk8 >> time >> x >> y >> z >> o >> unk32;
|
||||
|
||||
logdetail("Got teleported, data: x: %f, y: %f, z: %f, o: %f, guid: "I64FMT, x, y, z, o, guid);
|
||||
logdetail("Got teleported, data: x: %f, y: %f, z: %f, o: %f, guid: "I64FMT, x, y, z, o, guid);
|
||||
|
||||
// TODO: put this into a capsule class later, that autodetects movement flags etc.
|
||||
WorldPacket response;
|
||||
@ -816,18 +827,23 @@ void WorldSession::_HandleChannelNotifyOpcode(WorldPacket& recvPacket)
|
||||
|
||||
void WorldSession::_HandleCastResultOpcode(WorldPacket& recvPacket)
|
||||
{
|
||||
uint32 spellid;
|
||||
uint8 flag,result;
|
||||
recvPacket >> spellid >> flag;
|
||||
if(flag)
|
||||
{
|
||||
recvPacket >> result;
|
||||
logdetail("Cast of spell %u failed. flag=%u, result=%u",spellid,flag,result);
|
||||
}
|
||||
else
|
||||
{
|
||||
logdetail("Cast of spell %u successful.",spellid);
|
||||
}
|
||||
uint32 spellid,otherr = 0;
|
||||
uint8 result;
|
||||
recvPacket >> spellid >> result;
|
||||
if (recvPacket.rpos()+1 < recvPacket.size())
|
||||
recvPacket >> otherr;
|
||||
logdetail("Cast of spell %u failed. result=%u, additional info=%u",spellid,result,otherr);
|
||||
}
|
||||
|
||||
void WorldSession::_HandleCastSuccessOpcode(WorldPacket& recvPacket)
|
||||
{
|
||||
uint32 spellId;
|
||||
uint64 casterGuid;
|
||||
|
||||
casterGuid = recvPacket.GetPackedGuid();
|
||||
|
||||
recvPacket >> spellId;
|
||||
logdetail("Cast of spell %u successful.",spellId);
|
||||
}
|
||||
|
||||
void WorldSession::_HandleInitialSpellsOpcode(WorldPacket& recvPacket)
|
||||
@ -881,7 +897,8 @@ void WorldSession::_HandleEmoteOpcode(WorldPacket& recvPacket)
|
||||
if(plrname.empty())
|
||||
{
|
||||
SendQueryPlayerName(guid);
|
||||
plrname="Unknown Entity";
|
||||
_DelayWorldPacket(recvPacket, GetLagMS() * 1.2f);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1066,3 +1083,4 @@ void WorldSession::_HandleWhoOpcode(WorldPacket& recvPacket)
|
||||
// TODO: delete world on LogoutComplete once implemented
|
||||
|
||||
|
||||
|
||||
|
||||
@ -54,7 +54,7 @@ public:
|
||||
void Update(void);
|
||||
void Start(void);
|
||||
inline bool MustDie(void) { return _mustdie; }
|
||||
inline void SetMustDie(void) { _mustdie = true; }
|
||||
void SetMustDie(void);
|
||||
void SendWorldPacket(WorldPacket&);
|
||||
inline bool InWorld(void) { return _logged; }
|
||||
inline uint32 GetLagMS(void) { return _lag_ms; }
|
||||
@ -107,6 +107,7 @@ private:
|
||||
void _HandleTelePortAckOpcode(WorldPacket& recvPacket);
|
||||
void _HandleChannelNotifyOpcode(WorldPacket& recvPacket);
|
||||
void _HandleCastResultOpcode(WorldPacket& recvPacket);
|
||||
void _HandleCastSuccessOpcode(WorldPacket& recvPacket);
|
||||
void _HandleCompressedUpdateObjectOpcode(WorldPacket& recvPacket);
|
||||
void _HandleUpdateObjectOpcode(WorldPacket& recvPacket);
|
||||
void _HandleItemQuerySingleResponseOpcode(WorldPacket& recvPacket);
|
||||
@ -143,4 +144,4 @@ private:
|
||||
uint32 _lag_ms;
|
||||
};
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
#include "WorldPacket.h"
|
||||
#include "WorldSession.h"
|
||||
#include "WorldSocket.h"
|
||||
#include "Opcodes.h"
|
||||
|
||||
WorldSocket::WorldSocket(SocketHandler &h, WorldSession *s) : TcpSocket(h)
|
||||
{
|
||||
@ -81,7 +82,7 @@ void WorldSocket::OnRead()
|
||||
_crypt.DecryptRecv((uint8*)&hdr,sizeof(ServerPktHeader));
|
||||
_remaining = ntohs(hdr.size)-2;
|
||||
_opcode = hdr.cmd;
|
||||
if(_opcode > 1000) // no opcode has yet a number over 1000
|
||||
if(_opcode > MAX_OPCODE_ID) // no opcode has yet a number over 1000
|
||||
{
|
||||
logcritical("CRYPT ERROR: opcode=%u, remain=%u",_opcode,_remaining); // this should never be the case!
|
||||
GetSession()->GetInstance()->SetError(); // no way to recover the crypt, must exit
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user