diff --git a/bin/conf/PseuWoW.conf.default b/bin/conf/PseuWoW.conf.default index d9e7194..d8d21e7 100644 --- a/bin/conf/PseuWoW.conf.default +++ b/bin/conf/PseuWoW.conf.default @@ -58,8 +58,8 @@ charname=Pseuwow // Client emulation configuration -ClientVersion=2.0.12 -ClientBuild=6546 +ClientVersion=2.1.3 +ClientBuild=6898 ClientLanguage=enUS // or change to enGB, deDE, ... @@ -113,3 +113,4 @@ rmcontrolhost=localhost // PseuWoW will need more memory with maps enabled! useMaps=0 + diff --git a/bin/data/scp/map.scp b/bin/data/scp/map.scp index fe8af55..ac504ed 100644 --- a/bin/data/scp/map.scp +++ b/bin/data/scp/map.scp @@ -1,130 +1,280 @@ [0] -name=Azeroth +name_general=Azeroth +name=Eastern Kingdoms [1] -name=Kalimdor - -[2] -name=UnderMine +name_general=Kalimdor +name=Kalimdor [13] -name=Test zone +name_general=test +name=Testing -[17] -name=Kalidar +[25] +name_general=ScottTest +name=Scott Test + +[29] +name_general=Test +name=CashTest [30] +name_general=PVPZone01 name=Alterac Valley [33] -name=Shadowfang Keep Instance +name_general=Shadowfang +name=Shadowfang Keep [34] -name=The Stockade Instance +name_general=StormwindJail +name=Stormwind Stockade [35] -name=Stormwind Prizon +name_general=StormwindPrison +name=StormwindPrison [36] -name=Deadmines Instance +name_general=DeadminesInstance +name=Deadmines [37] -name=Plains of Snow +name_general=PVPZone02 +name=Azshara Crater + +[42] +name_general=Collin +name=Collin's Test [43] -name=Wailing Caverns Instance +name_general=WailingCaverns +name=Wailing Caverns + [44] -name=Monastery Interior +name_general=Monastery +name= Monastery [47] -name=Razorfen Kraul Instance +name_general=RazorfenKraulInstance +name=Razorfen Kraul [48] -name=Blackfathom Deeps Instance +name_general=Blackfathom +name=Blackfathom Deeps [70] -name=Uldaman Instance +name_general=Uldaman +name=Uldaman [90] -name=Gnomeregan Instance +name_general=GnomeragonInstance +name=Gnomeregan [109] -name=Sunken Temple Instance +name_general=SunkenTemple +name=Sunken Temple [129] -name=Razorfen Downs Instance - -[150] -name=Outland +name_general=RazorfenDowns +name=Razorfen Downs [169] -name=Emerald Forest +name_general=EmeraldDream +name=Emerald Dream [189] -name=Scarlet Monastery Instance +name_general=MonasteryInstances +name=Scarlet Monastery [209] -name=Zul\'Farrak Instance +name_general=TanarisInstance +name=Zul'Farrak [229] -name=Blackrock Spire Instance +name_general=BlackRockSpire +name=Blackrock Spire [230] -name=Blackrock Depths Instance +name_general=BlackrockDepths +name=Blackrock Depths [249] -name=Onyxia\'s Lair Instance +name_general=OnyxiaLairInstance +name=Onyxia's Lair [269] -name=Caverns of Time +name_general=CavernsOfTime +name=Opening of the Dark Portal [289] -name=Scholomance Instance +name_general=SchoolofNecromancy +name=Scholomance [309] -name=Zul'Gurub Instance +name_general=Zul'gurub +name=Zul'Gurub [329] -name=Stratholme Instance +name_general=Stratholme +name=Stratholme [349] -name=Mauradon Instance +name_general=Mauradon +name=Maraudon [369] +name_general=DeeprunTram name=Deeprun Tram [389] -name=Ragefire Chasm Instance +name_general=OrgrimmarInstance +name=Ragefire Chasm [409] -name=The Molten Core Instance +name_general=MoltenCore +name=Molten Core [429] -name=Dire Maul Instance +name_general=DireMaul +name=Dire Maul [449] +name_general=AlliancePVPBarracks name=Alliance PVP Barracks [450] +name_general=HordePVPBarracks name=Horde PVP Barracks [451] +name_general=development name=Development Land [469] -name=Blackwing Lair Instance +name_general=BlackwingLair +name=Blackwing Lair [489] +name_general=PVPZone03 name=Warsong Gulch [509] -name=Ruins of Ahn'Qiraj Instance +name_general=AhnQiraj +name=Ruins of Ahn'Qiraj [529] +name_general=PVPZone04 name=Arathi Basin +[530] +name_general=Expansion01 +name=Outland + [531] -name=Temple of Ahn'Qiraj Instance +name_general=AhnQirajTemple +name=Ahn'Qiraj Temple + +[532] +name_general=Karazahn +name=Karazhan [533] -name=Naxxramas Instance +name_general=Stratholme Raid +name=Naxxramas + +[534] +name_general=HyjalPast +name=The Battle for Mount Hyjal + +[540] +name_general=HellfireMilitary +name=Hellfire Citadel: The Shattered Halls + +[542] +name_general=HellfireDemon +name=Hellfire Citadel: The Blood Furnace + +[543] +name_general=HellfireRampart +name=Hellfire Citadel: Ramparts + +[544] +name_general=HellfireRaid +name=Magtheridon's Lair + +[545] +name_general=CoilfangPumping +name=Coilfang: The Steamvault + +[546] +name_general=CoilfangMarsh +name=Coilfang: The Underbog + +[547] +name_general=CoilfangDraenei +name=Coilfang: The Slave Pens + +[548] +name_general=CoilfangRaid +name=Coilfang: Serpentshrine Cavern + +[550] +name_general=TempestKeepRaid +name=Tempest Keep + +[552] +name_general=TempestKeepArcane +name=Tempest Keep: The Arcatraz + +[553] +name_general=TempestKeepAtrium +name=Tempest Keep: The Botanica + +[554] +name_general=TempestKeepFactory +name=Tempest Keep: The Mechanar + +[555] +name_general=AuchindounShadow +name=Auchindoun: Shadow Labyrinth + +[556] +name_general=AuchindounDemon +name=Auchindoun: Sethekk Halls + +[557] +name_general=AuchindounEthereal +name=Auchindoun: Mana-Tombs + +[558] +name_general=AuchindounDraenei +name=Auchindoun: Auchenai Crypts + +[559] +name_general=PVPZone05 +name=Nagrand Arena + +[560] +name_general=HillsbradPast +name=The Escape From Durnholde + +[562] +name_general=bladesedgearena +name=Blade's Edge Arena + +[564] +name_general=BlackTemple +name=Black Temple + +[565] +name_general=GruulsLair +name=Gruul's Lair + +[566] +name_general=NetherstormBG +name=Eye of the Storm + +[568] +name_general=ZulAman +name=Zul'Aman + diff --git a/bin/data/scp/race.scp b/bin/data/scp/race.scp index c05fed9..a4ce8c5 100644 --- a/bin/data/scp/race.scp +++ b/bin/data/scp/race.scp @@ -1,35 +1,120 @@ -// note that the faction is equal to the default language id: -// 1: Horde, Orcish -// 7: Alliance, Common - [1] +model_m=49 +model_f=50 +name_short=Hu faction=7 +name_general=Human name=Human [2] +model_m=51 +model_f=52 +name_short=Or faction=1 +name_general=Orc name=Orc [3] +model_m=53 +model_f=54 +name_short=Dw faction=7 +name_general=Dwarf name=Dwarf [4] +model_m=55 +model_f=56 +name_short=Ni faction=7 +name_general=NightElf name=Night Elf [5] +model_m=57 +model_f=58 +name_short=Sc faction=1 +name_general=Scourge name=Undead [6] +model_m=59 +model_f=60 +name_short=Ta faction=1 +name_general=Tauren name=Tauren [7] +model_m=1563 +model_f=1564 +name_short=Gn faction=7 +name_general=Gnome name=Gnome [8] +model_m=1478 +model_f=1479 +name_short=Tr faction=1 +name_general=Troll name=Troll + +[9] +model_m=6894 +model_f=6895 +name_short=Gb +faction=7 +name_general=Goblin +name=Goblin + +[10] +model_m=15476 +model_f=15475 +name_short=Be +faction=1 +name_general=BloodElf +name=Blood Elf + +[11] +model_m=16125 +model_f=16126 +name_short=Dr +faction=7 +name_general=Draenei +name=Draenei + +[12] +model_m=16981 +model_f=16980 +name_short=Fo +faction=7 +name_general=FelOrc +name=Fel Orc + +[13] +model_m=17402 +model_f=17403 +name_short=Na +faction=7 +name_general=Naga_ +name=Naga + +[14] +model_m=17576 +model_f=17577 +name_short=Br +faction=7 +name_general=Broken +name=Broken + +[15] +model_m=17578 +model_f=17579 +name_short=Sk +faction=7 +name_general=Skeleton +name=Skeleton + diff --git a/src/Client/DefScriptInterface.cpp b/src/Client/DefScriptInterface.cpp index a5d3ee3..bca3711 100644 --- a/src/Client/DefScriptInterface.cpp +++ b/src/Client/DefScriptInterface.cpp @@ -745,9 +745,9 @@ DefReturnResult DefScriptPackage::SCGetFileList(CmdSet& Set) for(DefList::iterator i = l->begin(); i != l->end(); ) { std::string tmp = stringToLower(i->c_str() + (i->length() - ext.length())); - if( stringToLower(i->c_str() + (i->length() - ext.length())) != ext ) + if( tmp != ext ) { - l->erase(i); + i = l->erase(i); continue; } i++; @@ -828,3 +828,4 @@ void DefScriptPackage::My_Run(std::string line, std::string username) } + diff --git a/src/Client/World/CacheHandler.cpp b/src/Client/World/CacheHandler.cpp index 2666010..8fdd94b 100644 --- a/src/Client/World/CacheHandler.cpp +++ b/src/Client/World/CacheHandler.cpp @@ -11,7 +11,7 @@ #include "Item.h" // increase this number whenever you change something that makes old files unusable -uint32 ITEMPROTOTYPES_CACHE_VERSION = 0x00000000; +uint32 ITEMPROTOTYPES_CACHE_VERSION = 0x00000001; bool PlayerNameCache::AddInfo(uint64 guid, std::string name){ PlayerNameCacheItem *cacheItem=new PlayerNameCacheItem; @@ -162,93 +162,95 @@ void ItemProtoCache_InsertDataToSession(WorldSession *session) buf.resize(datasize); fh.read((char*)buf.contents(),datasize); ItemProto *proto = new ItemProto; - buf >> proto->Id; - buf >> proto->Class; - buf >> proto->SubClass; - buf >> unk; - for(uint8 i=0;i<4;i++) - buf >> proto->Name[i]; - buf >> proto->DisplayInfoID; - buf >> proto->Quality; - buf >> proto->Flags; - buf >> proto->BuyPrice; - buf >> proto->SellPrice; - buf >> proto->InventoryType; - buf >> proto->AllowableClass; - buf >> proto->AllowableRace; - buf >> proto->ItemLevel; - buf >> proto->RequiredLevel; - buf >> proto->RequiredSkill; - buf >> proto->RequiredSkillRank; - buf >> proto->RequiredSpell; - buf >> proto->RequiredHonorRank; - buf >> proto->RequiredCityRank; - buf >> proto->RequiredReputationFaction; - buf >> proto->RequiredReputationRank; - buf >> proto->MaxCount; - buf >> proto->Stackable; - buf >> proto->ContainerSlots; - for(int i = 0; i < 10; i++) - { - buf >> proto->ItemStat[i].ItemStatType; - buf >> proto->ItemStat[i].ItemStatValue; - } - for(int i = 0; i < 5; i++) - { - buf >> proto->Damage[i].DamageMin; - buf >> proto->Damage[i].DamageMax; - buf >> proto->Damage[i].DamageType; - } - buf >> proto->Armor; - buf >> proto->HolyRes; - buf >> proto->FireRes; - buf >> proto->NatureRes; - buf >> proto->FrostRes; - buf >> proto->ShadowRes; - buf >> proto->ArcaneRes; - buf >> proto->Delay; - buf >> proto->Ammo_type; - - buf >> (float)proto->RangedModRange; - for(int s = 0; s < 5; s++) - { - buf >> proto->Spells[s].SpellId; - buf >> proto->Spells[s].SpellTrigger; - buf >> proto->Spells[s].SpellCharges; - buf >> proto->Spells[s].SpellCooldown; - buf >> proto->Spells[s].SpellCategory; - buf >> proto->Spells[s].SpellCategoryCooldown; - } - buf >> proto->Bonding; - buf >> proto->Description; - buf >> proto->PageText; - buf >> proto->LanguageID; - buf >> proto->PageMaterial; - buf >> proto->StartQuest; - buf >> proto->LockID; - buf >> proto->Material; - buf >> proto->Sheath; - buf >> proto->Extra; - buf >> proto->Unk1; // added in 2.0.3 - buf >> proto->Block; - buf >> proto->ItemSet; - buf >> proto->MaxDurability; - buf >> proto->Area; - buf >> proto->Map; - buf >> proto->BagFamily; - buf >> proto->TotemCategory; // Added in 1.12.x client branch - for(uint32 s = 0; s < 3; s++) - { - buf >> proto->Socket[s].Color; - buf >> proto->Socket[s].Content; - } + buf >> proto->Id; + buf >> proto->Class; + buf >> proto->SubClass; + buf >> unk; + for(uint8 i=0;i<4;i++) + buf >> proto->Name[i]; + buf >> proto->DisplayInfoID; + buf >> proto->Quality; + buf >> proto->Flags; + buf >> proto->BuyPrice; + buf >> proto->SellPrice; + buf >> proto->InventoryType; + buf >> proto->AllowableClass; + buf >> proto->AllowableRace; + buf >> proto->ItemLevel; + buf >> proto->RequiredLevel; + buf >> proto->RequiredSkill; + buf >> proto->RequiredSkillRank; + buf >> proto->RequiredSpell; + buf >> proto->RequiredHonorRank; + buf >> proto->RequiredCityRank; + buf >> proto->RequiredReputationFaction; + buf >> proto->RequiredReputationRank; + buf >> proto->MaxCount; + buf >> proto->Stackable; + buf >> proto->ContainerSlots; + for(int i = 0; i < 10; i++) + { + buf >> proto->ItemStat[i].ItemStatType; + buf >> proto->ItemStat[i].ItemStatValue; + } + for(int i = 0; i < 5; i++) + { + buf >> proto->Damage[i].DamageMin; + buf >> proto->Damage[i].DamageMax; + buf >> proto->Damage[i].DamageType; + } + buf >> proto->Armor; + buf >> proto->HolyRes; + buf >> proto->FireRes; + buf >> proto->NatureRes; + buf >> proto->FrostRes; + buf >> proto->ShadowRes; + buf >> proto->ArcaneRes; + buf >> proto->Delay; + buf >> proto->Ammo_type; + + buf >> (float)proto->RangedModRange; + for(int s = 0; s < 5; s++) + { + buf >> proto->Spells[s].SpellId; + buf >> proto->Spells[s].SpellTrigger; + buf >> proto->Spells[s].SpellCharges; + buf >> proto->Spells[s].SpellCooldown; + buf >> proto->Spells[s].SpellCategory; + buf >> proto->Spells[s].SpellCategoryCooldown; + } + buf >> proto->Bonding; + buf >> proto->Description; + buf >> proto->PageText; + buf >> proto->LanguageID; + buf >> proto->PageMaterial; + buf >> proto->StartQuest; + buf >> proto->LockID; + buf >> proto->Material; + buf >> proto->Sheath; + buf >> proto->Extra; + buf >> proto->Unk1; // added in 2.0.3 + buf >> proto->Block; + buf >> proto->ItemSet; + buf >> proto->MaxDurability; + buf >> proto->Area; + buf >> proto->Map; + buf >> proto->BagFamily; + buf >> proto->TotemCategory; // Added in 1.12.x client branch + for(uint32 s = 0; s < 3; s++) + { + buf >> proto->Socket[s].Color; + buf >> proto->Socket[s].Content; + } buf >> proto->socketBonus; buf >> proto->GemProperties; buf >> proto->ExtendedCost; - buf >> proto->RequiredDisenchantSkill; - if(proto->Id) - { - //DEBUG(logdebug("ItemProtoCache: Loaded %u [%s]",proto->Id, proto->Name[0].c_str())); + buf >> proto->RequiredDisenchantSkill; + buf >> proto->ArmorDamageModifier; + + if(proto->Id) + { + //DEBUG(logdebug("ItemProtoCache: Loaded %u [%s]",proto->Id, proto->Name[0].c_str())); session->objmgr.Add(proto); counter++; } @@ -277,96 +279,97 @@ void ItemProtoCache_WriteDataToCache(WorldSession *session) { buf.clear(); ItemProto *proto = session->objmgr.GetItemProtoByPos(i); - buf << proto->Id; - buf << proto->Class; - buf << proto->SubClass; - for(uint8 i=0;i<4;i++) - buf << proto->Name[i]; - buf << proto->DisplayInfoID; - buf << proto->Quality; - buf << proto->Flags; - buf << proto->BuyPrice; - buf << proto->SellPrice; - buf << proto->InventoryType; - buf << proto->AllowableClass; - buf << proto->AllowableRace; - buf << proto->ItemLevel; - buf << proto->RequiredLevel; - buf << proto->RequiredSkill; - buf << proto->RequiredSkillRank; - buf << proto->RequiredSpell; - buf << proto->RequiredHonorRank; - buf << proto->RequiredCityRank; - buf << proto->RequiredReputationFaction; - buf << proto->RequiredReputationRank; - buf << proto->MaxCount; - buf << proto->Stackable; - buf << proto->ContainerSlots; - for(int i = 0; i < 10; i++) - { - buf << proto->ItemStat[i].ItemStatType; - buf << proto->ItemStat[i].ItemStatValue; - } - for(int i = 0; i < 5; i++) - { - buf << proto->Damage[i].DamageMin; - buf << proto->Damage[i].DamageMax; - buf << proto->Damage[i].DamageType; - } - buf << proto->Armor; - buf << proto->HolyRes; - buf << proto->FireRes; - buf << proto->NatureRes; - buf << proto->FrostRes; - buf << proto->ShadowRes; - buf << proto->ArcaneRes; - buf << proto->Delay; - buf << proto->Ammo_type; - - buf << (float)proto->RangedModRange; - for(int s = 0; s < 5; s++) - { - buf << proto->Spells[s].SpellId; - buf << proto->Spells[s].SpellTrigger; - buf << proto->Spells[s].SpellCharges; - buf << proto->Spells[s].SpellCooldown; - buf << proto->Spells[s].SpellCategory; - buf << proto->Spells[s].SpellCategoryCooldown; - } - buf << proto->Bonding; - buf << proto->Description; - buf << proto->PageText; - buf << proto->LanguageID; - buf << proto->PageMaterial; - buf << proto->StartQuest; - buf << proto->LockID; - buf << proto->Material; - buf << proto->Sheath; - buf << proto->Extra; - buf << proto->Unk1; // added in 2.0.3 - buf << proto->Block; - buf << proto->ItemSet; - buf << proto->MaxDurability; - buf << proto->Area; - buf << proto->Map; - buf << proto->BagFamily; - buf << proto->TotemCategory; // Added in 1.12.x client branch - for(uint32 s = 0; s < 3; s++) - { - buf << proto->Socket[s].Color; - buf << proto->Socket[s].Content; - } + buf << proto->Id; + buf << proto->Class; + buf << proto->SubClass; + for(uint8 i=0;i<4;i++) + buf << proto->Name[i]; + buf << proto->DisplayInfoID; + buf << proto->Quality; + buf << proto->Flags; + buf << proto->BuyPrice; + buf << proto->SellPrice; + buf << proto->InventoryType; + buf << proto->AllowableClass; + buf << proto->AllowableRace; + buf << proto->ItemLevel; + buf << proto->RequiredLevel; + buf << proto->RequiredSkill; + buf << proto->RequiredSkillRank; + buf << proto->RequiredSpell; + buf << proto->RequiredHonorRank; + buf << proto->RequiredCityRank; + buf << proto->RequiredReputationFaction; + buf << proto->RequiredReputationRank; + buf << proto->MaxCount; + buf << proto->Stackable; + buf << proto->ContainerSlots; + for(int i = 0; i < 10; i++) + { + buf << proto->ItemStat[i].ItemStatType; + buf << proto->ItemStat[i].ItemStatValue; + } + for(int i = 0; i < 5; i++) + { + buf << proto->Damage[i].DamageMin; + buf << proto->Damage[i].DamageMax; + buf << proto->Damage[i].DamageType; + } + buf << proto->Armor; + buf << proto->HolyRes; + buf << proto->FireRes; + buf << proto->NatureRes; + buf << proto->FrostRes; + buf << proto->ShadowRes; + buf << proto->ArcaneRes; + buf << proto->Delay; + buf << proto->Ammo_type; + + buf << (float)proto->RangedModRange; + for(int s = 0; s < 5; s++) + { + buf << proto->Spells[s].SpellId; + buf << proto->Spells[s].SpellTrigger; + buf << proto->Spells[s].SpellCharges; + buf << proto->Spells[s].SpellCooldown; + buf << proto->Spells[s].SpellCategory; + buf << proto->Spells[s].SpellCategoryCooldown; + } + buf << proto->Bonding; + buf << proto->Description; + buf << proto->PageText; + buf << proto->LanguageID; + buf << proto->PageMaterial; + buf << proto->StartQuest; + buf << proto->LockID; + buf << proto->Material; + buf << proto->Sheath; + buf << proto->Extra; + buf << proto->Unk1; // added in 2.0.3 + buf << proto->Block; + buf << proto->ItemSet; + buf << proto->MaxDurability; + buf << proto->Area; + buf << proto->Map; + buf << proto->BagFamily; + buf << proto->TotemCategory; // Added in 1.12.x client branch + for(uint32 s = 0; s < 3; s++) + { + buf << proto->Socket[s].Color; + buf << proto->Socket[s].Content; + } buf << proto->socketBonus; buf << proto->GemProperties; buf << proto->ExtendedCost; - buf << proto->RequiredDisenchantSkill; - - //DEBUG(logdebug("ItemProtoCache: Saved %u [%s]",proto->Id, proto->Name[0].c_str())); - uint32 size = buf.size(); + buf << proto->RequiredDisenchantSkill; + buf << proto->ArmorDamageModifier; + + //DEBUG(logdebug("ItemProtoCache: Saved %u [%s]",proto->Id, proto->Name[0].c_str())); + uint32 size = buf.size(); fh.write((char*)&size,sizeof(uint32)); fh.write((char*)buf.contents(),buf.size()); counter++; } fh.close(); log("ItemProtoCache: Saved %u Item Prototypes",counter); -} \ No newline at end of file +} diff --git a/src/Client/World/Channel.cpp b/src/Client/World/Channel.cpp index 4d0825b..6e23aec 100644 --- a/src/Client/World/Channel.cpp +++ b/src/Client/World/Channel.cpp @@ -110,7 +110,7 @@ void Channel::HandleNotifyOpcode(WorldPacket &packet) switch (code) { // Player joined channel you are on - case 0x00: + case JOINED: packet >> guid; if(guid){ name = _worldSession->plrNameCache.GetName(guid); @@ -227,3 +227,4 @@ void Channel::HandleListRequest(WorldPacket& recvPacket) + diff --git a/src/Client/World/Item.cpp b/src/Client/World/Item.cpp index 1208970..6c33a11 100644 --- a/src/Client/World/Item.cpp +++ b/src/Client/World/Item.cpp @@ -12,114 +12,115 @@ void WorldSession::_HandleItemQuerySingleResponseOpcode(WorldPacket& recvPacket) uint32 unk; memset(field,0,64); if(memcmp(recvPacket.contents()+sizeof(uint32),field,64)) - { - recvPacket >> proto->Class; - recvPacket >> proto->SubClass; - recvPacket >> unk; // dont need that value? - for(uint8 i=0;i<4;i++) - recvPacket >> proto->Name[i]; - recvPacket >> proto->DisplayInfoID; - recvPacket >> proto->Quality; - recvPacket >> proto->Flags; - recvPacket >> proto->BuyPrice; - recvPacket >> proto->SellPrice; - recvPacket >> proto->InventoryType; - recvPacket >> proto->AllowableClass; - recvPacket >> proto->AllowableRace; - recvPacket >> proto->ItemLevel; - recvPacket >> proto->RequiredLevel; - recvPacket >> proto->RequiredSkill; - recvPacket >> proto->RequiredSkillRank; - recvPacket >> proto->RequiredSpell; - recvPacket >> proto->RequiredHonorRank; - recvPacket >> proto->RequiredCityRank; - recvPacket >> proto->RequiredReputationFaction; - recvPacket >> proto->RequiredReputationRank; - recvPacket >> proto->MaxCount; - recvPacket >> proto->Stackable; - recvPacket >> proto->ContainerSlots; - for(int i = 0; i < 10; i++) - { - recvPacket >> proto->ItemStat[i].ItemStatType; - recvPacket >> proto->ItemStat[i].ItemStatValue; - } - for(int i = 0; i < 5; i++) - { - recvPacket >> proto->Damage[i].DamageMin; - recvPacket >> proto->Damage[i].DamageMax; - recvPacket >> proto->Damage[i].DamageType; - } - recvPacket >> proto->Armor; - recvPacket >> proto->HolyRes; - recvPacket >> proto->FireRes; - recvPacket >> proto->NatureRes; - recvPacket >> proto->FrostRes; - recvPacket >> proto->ShadowRes; - recvPacket >> proto->ArcaneRes; - recvPacket >> proto->Delay; - recvPacket >> proto->Ammo_type; - - recvPacket >> (float)proto->RangedModRange; - for(int s = 0; s < 5; s++) - { - recvPacket >> proto->Spells[s].SpellId; - recvPacket >> proto->Spells[s].SpellTrigger; - recvPacket >> proto->Spells[s].SpellCharges; - recvPacket >> proto->Spells[s].SpellCooldown; - recvPacket >> proto->Spells[s].SpellCategory; - recvPacket >> proto->Spells[s].SpellCategoryCooldown; - } - recvPacket >> proto->Bonding; - recvPacket >> proto->Description; - recvPacket >> proto->PageText; - recvPacket >> proto->LanguageID; - recvPacket >> proto->PageMaterial; - recvPacket >> proto->StartQuest; - recvPacket >> proto->LockID; - recvPacket >> proto->Material; - recvPacket >> proto->Sheath; - recvPacket >> proto->Extra; - recvPacket >> proto->Block; - recvPacket >> proto->ItemSet; - recvPacket >> proto->MaxDurability; - recvPacket >> proto->Area; - recvPacket >> proto->Map; - recvPacket >> proto->BagFamily; - recvPacket >> proto->TotemCategory; // Added in 1.12.x client branch - for(uint32 s = 0; s < 3; s++) - { - recvPacket >> proto->Socket[s].Color; - recvPacket >> proto->Socket[s].Content; - } + { + recvPacket >> proto->Class; + recvPacket >> proto->SubClass; + recvPacket >> unk; // dont need that value? + for(uint8 i=0;i<4;i++) + recvPacket >> proto->Name[i]; + recvPacket >> proto->DisplayInfoID; + recvPacket >> proto->Quality; + recvPacket >> proto->Flags; + recvPacket >> proto->BuyPrice; + recvPacket >> proto->SellPrice; + recvPacket >> proto->InventoryType; + recvPacket >> proto->AllowableClass; + recvPacket >> proto->AllowableRace; + recvPacket >> proto->ItemLevel; + recvPacket >> proto->RequiredLevel; + recvPacket >> proto->RequiredSkill; + recvPacket >> proto->RequiredSkillRank; + recvPacket >> proto->RequiredSpell; + recvPacket >> proto->RequiredHonorRank; + recvPacket >> proto->RequiredCityRank; + recvPacket >> proto->RequiredReputationFaction; + recvPacket >> proto->RequiredReputationRank; + recvPacket >> proto->MaxCount; + recvPacket >> proto->Stackable; + recvPacket >> proto->ContainerSlots; + for(int i = 0; i < 10; i++) + { + recvPacket >> proto->ItemStat[i].ItemStatType; + recvPacket >> proto->ItemStat[i].ItemStatValue; + } + for(int i = 0; i < 5; i++) + { + recvPacket >> proto->Damage[i].DamageMin; + recvPacket >> proto->Damage[i].DamageMax; + recvPacket >> proto->Damage[i].DamageType; + } + recvPacket >> proto->Armor; + recvPacket >> proto->HolyRes; + recvPacket >> proto->FireRes; + recvPacket >> proto->NatureRes; + recvPacket >> proto->FrostRes; + recvPacket >> proto->ShadowRes; + recvPacket >> proto->ArcaneRes; + recvPacket >> proto->Delay; + recvPacket >> proto->Ammo_type; + + recvPacket >> (float)proto->RangedModRange; + for(int s = 0; s < 5; s++) + { + recvPacket >> proto->Spells[s].SpellId; + recvPacket >> proto->Spells[s].SpellTrigger; + recvPacket >> proto->Spells[s].SpellCharges; + recvPacket >> proto->Spells[s].SpellCooldown; + recvPacket >> proto->Spells[s].SpellCategory; + recvPacket >> proto->Spells[s].SpellCategoryCooldown; + } + recvPacket >> proto->Bonding; + recvPacket >> proto->Description; + recvPacket >> proto->PageText; + recvPacket >> proto->LanguageID; + recvPacket >> proto->PageMaterial; + recvPacket >> proto->StartQuest; + recvPacket >> proto->LockID; + recvPacket >> proto->Material; + recvPacket >> proto->Sheath; + recvPacket >> proto->Extra; + recvPacket >> proto->Block; + recvPacket >> proto->ItemSet; + recvPacket >> proto->MaxDurability; + recvPacket >> proto->Area; + recvPacket >> proto->Map; + recvPacket >> proto->BagFamily; + recvPacket >> proto->TotemCategory; // Added in 1.12.x client branch + for(uint32 s = 0; s < 3; s++) + { + recvPacket >> proto->Socket[s].Color; + recvPacket >> proto->Socket[s].Content; + } recvPacket >> proto->socketBonus; recvPacket >> proto->GemProperties; recvPacket >> proto->ExtendedCost; - recvPacket >> proto->RequiredDisenchantSkill; - - logdetail("Got Item Info: Id=%u Name='%s' ReqLevel=%u Armor=%u Desc='%s'", - proto->Id, proto->Name[0].c_str(), proto->RequiredLevel, proto->Armor, proto->Description.c_str()); - objmgr.Add(proto); - } - else - { - logdetail("Got info of nonexistent Item %u",proto->Id); - objmgr.AddNonexistentItem(proto->Id); - delete proto; - } + recvPacket >> proto->RequiredDisenchantSkill; + recvPacket >> proto->ArmorDamageModifier; + + logdetail("Got Item Info: Id=%u Name='%s' ReqLevel=%u Armor=%u Desc='%s'", + proto->Id, proto->Name[0].c_str(), proto->RequiredLevel, proto->Armor, proto->Description.c_str()); + objmgr.Add(proto); + } + else + { + logdetail("Got info of nonexistent Item %u",proto->Id); + objmgr.AddNonexistentItem(proto->Id); + delete proto; + } } Item::Item() { - _type |= TYPE_ITEM; - _typeid = TYPEID_ITEM; - - _valuescount = ITEM_END; - _slot = 0; - //_bag = NULL; // not yet implemented -} - -void Item::Create(uint64 guid) -{ - Object::Create(guid); - // what else? -} \ No newline at end of file + _type |= TYPE_ITEM; + _typeid = TYPEID_ITEM; + + _valuescount = ITEM_END; + _slot = 0; + //_bag = NULL; // not yet implemented +} + +void Item::Create(uint64 guid) +{ + Object::Create(guid); + // what else? +} diff --git a/src/Client/World/Item.h b/src/Client/World/Item.h index f235749..4746f7c 100644 --- a/src/Client/World/Item.h +++ b/src/Client/World/Item.h @@ -6,321 +6,321 @@ class Bag; -enum InventoryChangeFailure -{ - EQUIP_ERR_OK = 0, - EQUIP_ERR_YOU_MUST_REACH_LEVEL_N = 1, - EQUIP_ERR_SKILL_ISNT_HIGH_ENOUGH = 2, - EQUIP_ERR_ITEM_DOESNT_GO_TO_SLOT = 3, - EQUIP_ERR_BAG_FULL = 4, - EQUIP_ERR_NONEMPTY_BAG_OVER_OTHER_BAG = 5, - EQUIP_ERR_CANT_TRADE_EQUIP_BAGS = 6, - EQUIP_ERR_ONLY_AMMO_CAN_GO_HERE = 7, - EQUIP_ERR_NO_REQUIRED_PROFICIENCY = 8, - EQUIP_ERR_NO_EQUIPMENT_SLOT_AVAILABLE = 9, - EQUIP_ERR_YOU_CAN_NEVER_USE_THAT_ITEM = 10, - EQUIP_ERR_YOU_CAN_NEVER_USE_THAT_ITEM2 = 11, - EQUIP_ERR_NO_EQUIPMENT_SLOT_AVAILABLE2 = 12, - EQUIP_ERR_CANT_EQUIP_WITH_TWOHANDED = 13, - EQUIP_ERR_CANT_DUAL_WIELD = 14, - EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG = 15, - EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG2 = 16, - EQUIP_ERR_CANT_CARRY_MORE_OF_THIS = 17, - EQUIP_ERR_NO_EQUIPMENT_SLOT_AVAILABLE3 = 18, - EQUIP_ERR_ITEM_CANT_STACK = 19, - EQUIP_ERR_ITEM_CANT_BE_EQUIPPED = 20, - EQUIP_ERR_ITEMS_CANT_BE_SWAPPED = 21, - EQUIP_ERR_SLOT_IS_EMPTY = 22, - EQUIP_ERR_ITEM_NOT_FOUND = 23, - EQUIP_ERR_CANT_DROP_SOULBOUND = 24, - EQUIP_ERR_OUT_OF_RANGE = 25, - EQUIP_ERR_TRIED_TO_SPLIT_MORE_THAN_COUNT = 26, - EQUIP_ERR_COULDNT_SPLIT_ITEMS = 27, - EQUIP_ERR_MISSING_REAGENT = 28, - EQUIP_ERR_NOT_ENOUGH_MONEY = 29, - EQUIP_ERR_NOT_A_BAG = 30, - EQUIP_ERR_CAN_ONLY_DO_WITH_EMPTY_BAGS = 31, - EQUIP_ERR_DONT_OWN_THAT_ITEM = 32, - EQUIP_ERR_CAN_EQUIP_ONLY1_QUIVER = 33, - EQUIP_ERR_MUST_PURCHASE_THAT_BAG_SLOT = 34, - EQUIP_ERR_TOO_FAR_AWAY_FROM_BANK = 35, - EQUIP_ERR_ITEM_LOCKED = 36, - EQUIP_ERR_YOU_ARE_STUNNED = 37, - EQUIP_ERR_YOU_ARE_DEAD = 38, - EQUIP_ERR_CANT_DO_RIGHT_NOW = 39, - EQUIP_ERR_BAG_FULL2 = 40, - EQUIP_ERR_CAN_EQUIP_ONLY1_QUIVER2 = 41, - EQUIP_ERR_CAN_EQUIP_ONLY1_AMMOPOUCH = 42, - EQUIP_ERR_STACKABLE_CANT_BE_WRAPPED = 43, - EQUIP_ERR_EQUIPPED_CANT_BE_WRAPPED = 44, - EQUIP_ERR_WRAPPED_CANT_BE_WRAPPED = 45, - EQUIP_ERR_BOUND_CANT_BE_WRAPPED = 46, - EQUIP_ERR_UNIQUE_CANT_BE_WRAPPED = 47, - EQUIP_ERR_BAGS_CANT_BE_WRAPPED = 48, - EQUIP_ERR_ALREADY_LOOTED = 49, - EQUIP_ERR_INVENTORY_FULL = 50, - EQUIP_ERR_BANK_FULL = 51, - EQUIP_ERR_ITEM_IS_CURRENTLY_SOLD_OUT = 52, - EQUIP_ERR_BAG_FULL3 = 53, - EQUIP_ERR_ITEM_NOT_FOUND2 = 54, - EQUIP_ERR_ITEM_CANT_STACK2 = 55, - EQUIP_ERR_BAG_FULL4 = 56, - EQUIP_ERR_ITEM_SOLD_OUT = 57, - EQUIP_ERR_OBJECT_IS_BUSY = 58, - EQUIP_ERR_NONE = 59, - EQUIP_ERR_CANT_DO_IN_COMBAT = 60, - EQUIP_CANT_DO_WHILE_DISARMED = 61, - EQUIP_ERR_BAG_FULL6 = 62, - EQUIP_ITEM_RANK_NOT_ENOUGH = 63, - EQUIP_ITEM_REPUTATION_NOT_ENOUGH = 64, - EQUIP_MORE_THAN1_SPECIAL_BAG = 65 -}; - -enum BuyFailure -{ - BUY_ERR_CANT_FIND_ITEM = 0, - BUY_ERR_ITEM_ALREADY_SOLD = 1, - BUY_ERR_NOT_ENOUGHT_MONEY = 2, - BUY_ERR_SELLER_DONT_LIKE_YOU = 4, - BUY_ERR_DISTANCE_TOO_FAR = 5, - BUY_ERR_CANT_CARRY_MORE = 8, - BUY_ERR_LEVEL_REQUIRE = 11, - BUY_ERR_REPUTATION_REQUIRE = 12 -}; - -enum SellFailure -{ - SELL_ERR_CANT_FIND_ITEM = 1, - SELL_ERR_CANT_SELL_ITEM = 2, - SELL_ERR_CANT_FIND_VENDOR = 3 +enum InventoryChangeFailure +{ + EQUIP_ERR_OK = 0, + EQUIP_ERR_YOU_MUST_REACH_LEVEL_N = 1, + EQUIP_ERR_SKILL_ISNT_HIGH_ENOUGH = 2, + EQUIP_ERR_ITEM_DOESNT_GO_TO_SLOT = 3, + EQUIP_ERR_BAG_FULL = 4, + EQUIP_ERR_NONEMPTY_BAG_OVER_OTHER_BAG = 5, + EQUIP_ERR_CANT_TRADE_EQUIP_BAGS = 6, + EQUIP_ERR_ONLY_AMMO_CAN_GO_HERE = 7, + EQUIP_ERR_NO_REQUIRED_PROFICIENCY = 8, + EQUIP_ERR_NO_EQUIPMENT_SLOT_AVAILABLE = 9, + EQUIP_ERR_YOU_CAN_NEVER_USE_THAT_ITEM = 10, + EQUIP_ERR_YOU_CAN_NEVER_USE_THAT_ITEM2 = 11, + EQUIP_ERR_NO_EQUIPMENT_SLOT_AVAILABLE2 = 12, + EQUIP_ERR_CANT_EQUIP_WITH_TWOHANDED = 13, + EQUIP_ERR_CANT_DUAL_WIELD = 14, + EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG = 15, + EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG2 = 16, + EQUIP_ERR_CANT_CARRY_MORE_OF_THIS = 17, + EQUIP_ERR_NO_EQUIPMENT_SLOT_AVAILABLE3 = 18, + EQUIP_ERR_ITEM_CANT_STACK = 19, + EQUIP_ERR_ITEM_CANT_BE_EQUIPPED = 20, + EQUIP_ERR_ITEMS_CANT_BE_SWAPPED = 21, + EQUIP_ERR_SLOT_IS_EMPTY = 22, + EQUIP_ERR_ITEM_NOT_FOUND = 23, + EQUIP_ERR_CANT_DROP_SOULBOUND = 24, + EQUIP_ERR_OUT_OF_RANGE = 25, + EQUIP_ERR_TRIED_TO_SPLIT_MORE_THAN_COUNT = 26, + EQUIP_ERR_COULDNT_SPLIT_ITEMS = 27, + EQUIP_ERR_MISSING_REAGENT = 28, + EQUIP_ERR_NOT_ENOUGH_MONEY = 29, + EQUIP_ERR_NOT_A_BAG = 30, + EQUIP_ERR_CAN_ONLY_DO_WITH_EMPTY_BAGS = 31, + EQUIP_ERR_DONT_OWN_THAT_ITEM = 32, + EQUIP_ERR_CAN_EQUIP_ONLY1_QUIVER = 33, + EQUIP_ERR_MUST_PURCHASE_THAT_BAG_SLOT = 34, + EQUIP_ERR_TOO_FAR_AWAY_FROM_BANK = 35, + EQUIP_ERR_ITEM_LOCKED = 36, + EQUIP_ERR_YOU_ARE_STUNNED = 37, + EQUIP_ERR_YOU_ARE_DEAD = 38, + EQUIP_ERR_CANT_DO_RIGHT_NOW = 39, + EQUIP_ERR_BAG_FULL2 = 40, + EQUIP_ERR_CAN_EQUIP_ONLY1_QUIVER2 = 41, + EQUIP_ERR_CAN_EQUIP_ONLY1_AMMOPOUCH = 42, + EQUIP_ERR_STACKABLE_CANT_BE_WRAPPED = 43, + EQUIP_ERR_EQUIPPED_CANT_BE_WRAPPED = 44, + EQUIP_ERR_WRAPPED_CANT_BE_WRAPPED = 45, + EQUIP_ERR_BOUND_CANT_BE_WRAPPED = 46, + EQUIP_ERR_UNIQUE_CANT_BE_WRAPPED = 47, + EQUIP_ERR_BAGS_CANT_BE_WRAPPED = 48, + EQUIP_ERR_ALREADY_LOOTED = 49, + EQUIP_ERR_INVENTORY_FULL = 50, + EQUIP_ERR_BANK_FULL = 51, + EQUIP_ERR_ITEM_IS_CURRENTLY_SOLD_OUT = 52, + EQUIP_ERR_BAG_FULL3 = 53, + EQUIP_ERR_ITEM_NOT_FOUND2 = 54, + EQUIP_ERR_ITEM_CANT_STACK2 = 55, + EQUIP_ERR_BAG_FULL4 = 56, + EQUIP_ERR_ITEM_SOLD_OUT = 57, + EQUIP_ERR_OBJECT_IS_BUSY = 58, + EQUIP_ERR_NONE = 59, + EQUIP_ERR_CANT_DO_IN_COMBAT = 60, + EQUIP_CANT_DO_WHILE_DISARMED = 61, + EQUIP_ERR_BAG_FULL6 = 62, + EQUIP_ITEM_RANK_NOT_ENOUGH = 63, + EQUIP_ITEM_REPUTATION_NOT_ENOUGH = 64, + EQUIP_MORE_THAN1_SPECIAL_BAG = 65 }; -enum ITEM_STAT_TYPE -{ - ITEM_STAT_POWER = 0, - ITEM_STAT_HEALTH = 1, - ITEM_STAT_UNKNOWN = 2, - ITEM_STAT_AGILITY = 3, - ITEM_STAT_STRENGTH = 4, - ITEM_STAT_INTELLECT = 5, - ITEM_STAT_SPIRIT = 6, - ITEM_STAT_STAMINA = 7 -}; - -enum ITEM_DAMAGE_TYPE -{ - NORMAL_DAMAGE = 0, - HOLY_DAMAGE = 1, - FIRE_DAMAGE = 2, - NATURE_DAMAGE = 3, - FROST_DAMAGE = 4, - SHADOW_DAMAGE = 5, - ARCANE_DAMAGE = 6 -}; - -enum ITEM_SPELLTRIGGER_TYPE -{ - USE = 0, - ON_EQUIP = 1, - CHANCE_ON_HIT = 2, - SOULSTONE = 4 -}; - -enum ITEM_BONDING_TYPE -{ - NO_BIND = 0, - BIND_WHEN_PICKED_UP = 1, - BIND_WHEN_EQUIPED = 2, - BIND_WHEN_USE = 3, - //TODO: Better name these - QUEST_ITEM = 4, - QUEST_ITEM1 = 5 -}; - -// masks for ITEM_FIELD_FLAGS field -enum ITEM_FLAGS -{ - ITEM_FLAGS_BINDED = 1 -}; - -enum BAG_FAMILY -{ - BAG_FAMILY_NONE = 0, - BAG_FAMILY_ARROWS = 1, - BAG_FAMILY_BULLETS = 2, - BAG_FAMILY_SOUL_SHARDS = 3, - //BAG_FAMILY_UNK1 = 4, - //BAG_FAMILY_UNK1 = 5, - BAG_FAMILY_HERBS = 6, - BAG_FAMILY_ENCHANTING_SUPP = 7, - BAG_FAMILY_ENGINEERING_SUPP = 8, - BAG_FAMILY_KEYS = 9, - BAG_FAMILY_GEMS = 10, - //BAG_FAMILY_UNK3 = 11, - BAG_FAMILY_MINING_SUPP = 12 -}; - -enum INVENTORY_TYPES -{ - INVTYPE_NON_EQUIP = 0, - INVTYPE_HEAD = 1, - INVTYPE_NECK = 2, - INVTYPE_SHOULDERS = 3, - INVTYPE_BODY = 4, - INVTYPE_CHEST = 5, - INVTYPE_WAIST = 6, - INVTYPE_LEGS = 7, - INVTYPE_FEET = 8, - INVTYPE_WRISTS = 9, - INVTYPE_HANDS = 10, - INVTYPE_FINGER = 11, - INVTYPE_TRINKET = 12, - INVTYPE_WEAPON = 13, - INVTYPE_SHIELD = 14, - INVTYPE_RANGED = 15, - INVTYPE_CLOAK = 16, - INVTYPE_2HWEAPON = 17, - INVTYPE_BAG = 18, - INVTYPE_TABARD = 19, - INVTYPE_ROBE = 20, - INVTYPE_WEAPONMAINHAND = 21, - INVTYPE_WEAPONOFFHAND = 22, - INVTYPE_HOLDABLE = 23, - INVTYPE_AMMO = 24, - INVTYPE_THROWN = 25, - INVTYPE_RANGEDRIGHT = 26, - INVTYPE_SLOT_ITEM = 27, - INVTYPE_RELIC = 28, - NUM_INVENTORY_TYPES = 29 -}; - -enum INVENTORY_CLASS -{ - ITEM_CLASS_CONSUMABLE = 0, - ITEM_CLASS_CONTAINER = 1, - ITEM_CLASS_WEAPON = 2, - ITEM_CLASS_JEWELRY = 3, - ITEM_CLASS_ARMOR = 4, - ITEM_CLASS_REAGENT = 5, - ITEM_CLASS_PROJECTILE = 6, - ITEM_CLASS_TRADE_GOODS = 7, - ITEM_CLASS_GENERIC = 8, - ITEM_CLASS_BOOK = 9, - ITEM_CLASS_MONEY = 10, - ITEM_CLASS_QUIVER = 11, - ITEM_CLASS_QUEST = 12, - ITEM_CLASS_KEY = 13, - ITEM_CLASS_PERMANENT = 14, - ITEM_CLASS_JUNK = 15 -}; - -// Client understand only 0 subclass for ITEM_CLASS_CONSUMABLE -// 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_SCROLL = 4, - ITEM_SUBCLASS_BANDAGE = 5, - ITEM_SUBCLASS_HEALTHSTONE = 6, - ITEM_SUBCLASS_COMBAT_EFFECT = 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 -}; - -enum INVENTORY_SUBCLASS_WEAPON -{ - ITEM_SUBCLASS_WEAPON_AXE = 0, - ITEM_SUBCLASS_WEAPON_AXE2 = 1, - ITEM_SUBCLASS_WEAPON_BOW = 2, - ITEM_SUBCLASS_WEAPON_GUN = 3, - ITEM_SUBCLASS_WEAPON_MACE = 4, - ITEM_SUBCLASS_WEAPON_MACE2 = 5, - ITEM_SUBCLASS_WEAPON_POLEARM = 6, - ITEM_SUBCLASS_WEAPON_SWORD = 7, - ITEM_SUBCLASS_WEAPON_SWORD2 = 8, - ITEM_SUBCLASS_WEAPON_obsolete = 9, - ITEM_SUBCLASS_WEAPON_STAFF = 10, - ITEM_SUBCLASS_WEAPON_EXOTIC = 11, - ITEM_SUBCLASS_WEAPON_EXOTIC2 = 12, - ITEM_SUBCLASS_WEAPON_UNARMED = 13, - ITEM_SUBCLASS_WEAPON_GENERIC = 14, - ITEM_SUBCLASS_WEAPON_DAGGER = 15, - ITEM_SUBCLASS_WEAPON_THROWN = 16, - ITEM_SUBCLASS_WEAPON_SPEAR = 17, - ITEM_SUBCLASS_WEAPON_CROSSBOW = 18, - ITEM_SUBCLASS_WEAPON_WAND = 19, - ITEM_SUBCLASS_WEAPON_FISHING_POLE = 20 -}; - -enum ITEM_SUBCLASS_ARMOR -{ - ITEM_SUBCLASS_ARMOR_GENERIC = 0, - ITEM_SUBCLASS_ARMOR_CLOTH = 1, - ITEM_SUBCLASS_ARMOR_LEATHER = 2, - ITEM_SUBCLASS_ARMOR_MAIL = 3, - ITEM_SUBCLASS_ARMOR_PLATE = 4, - ITEM_SUBCLASS_ARMOR_BUCKLER = 5, - ITEM_SUBCLASS_ARMOR_SHIELD = 6 -}; - -enum ITEM_SUBCLASS_PROJECTILE -{ - ITEM_SUBCLASS_ARROW = 2, - ITEM_SUBCLASS_BULLET = 3 -}; - -enum ITEM_SUBCLASS_TRADE_GOODS -{ - ITEM_SUBCLASS_TRADE_GOODS = 0, - ITEM_SUBCLASS_PARTS = 1, - ITEM_SUBCLASS_EXPLOSIVES = 2, - ITEM_SUBCLASS_DEVICES = 3 -}; - -enum ITEM_SUBCLASS_BOOK -{ - ITEM_SUBCLASS_BOOK = 0, - ITEM_SUBCLASS_LEATHERWORKING_PATTERN = 1, - ITEM_SUBCLASS_TAILORING_PATTERN = 2, - ITEM_SUBCLASS_ENGINEERING_SCHEMATIC = 3, - ITEM_SUBCLASS_COOKING_RECIPE = 5, - ITEM_SUBCLASS_ALCHEMY_RECIPE = 6, - ITEM_SUBCLASS_FIRST_AID_MANUAL = 7, - ITEM_SUBCLASS_ENCHANTING_FORMULA = 8, - ITEM_SUBCLASS_FISHING_MANUAL = 9 -}; - -enum ITEM_SUBCLASS_QUIVER -{ - ITEM_SUBCLASS_QUIVER = 2, - ITEM_SUBCLASS_AMMO_POUCH = 3 +enum BuyFailure +{ + BUY_ERR_CANT_FIND_ITEM = 0, + BUY_ERR_ITEM_ALREADY_SOLD = 1, + BUY_ERR_NOT_ENOUGHT_MONEY = 2, + BUY_ERR_SELLER_DONT_LIKE_YOU = 4, + BUY_ERR_DISTANCE_TOO_FAR = 5, + BUY_ERR_CANT_CARRY_MORE = 8, + BUY_ERR_LEVEL_REQUIRE = 11, + BUY_ERR_REPUTATION_REQUIRE = 12 }; -struct _ItemStat -{ - uint32 ItemStatType; - uint32 ItemStatValue; - +enum SellFailure +{ + SELL_ERR_CANT_FIND_ITEM = 1, + SELL_ERR_CANT_SELL_ITEM = 2, + SELL_ERR_CANT_FIND_VENDOR = 3 }; -struct _ItemSpell -{ - uint32 SpellId; - uint32 SpellTrigger; - uint32 SpellCharges; - uint32 SpellCooldown; - uint32 SpellCategory; - uint32 SpellCategoryCooldown; - +enum ITEM_STAT_TYPE +{ + ITEM_STAT_POWER = 0, + ITEM_STAT_HEALTH = 1, + ITEM_STAT_UNKNOWN = 2, + ITEM_STAT_AGILITY = 3, + ITEM_STAT_STRENGTH = 4, + ITEM_STAT_INTELLECT = 5, + ITEM_STAT_SPIRIT = 6, + ITEM_STAT_STAMINA = 7 +}; + +enum ITEM_DAMAGE_TYPE +{ + NORMAL_DAMAGE = 0, + HOLY_DAMAGE = 1, + FIRE_DAMAGE = 2, + NATURE_DAMAGE = 3, + FROST_DAMAGE = 4, + SHADOW_DAMAGE = 5, + ARCANE_DAMAGE = 6 +}; + +enum ITEM_SPELLTRIGGER_TYPE +{ + USE = 0, + ON_EQUIP = 1, + CHANCE_ON_HIT = 2, + SOULSTONE = 4 +}; + +enum ITEM_BONDING_TYPE +{ + NO_BIND = 0, + BIND_WHEN_PICKED_UP = 1, + BIND_WHEN_EQUIPED = 2, + BIND_WHEN_USE = 3, + //TODO: Better name these + QUEST_ITEM = 4, + QUEST_ITEM1 = 5 +}; + +// masks for ITEM_FIELD_FLAGS field +enum ITEM_FLAGS +{ + ITEM_FLAGS_BINDED = 1 +}; + +enum BAG_FAMILY +{ + BAG_FAMILY_NONE = 0, + BAG_FAMILY_ARROWS = 1, + BAG_FAMILY_BULLETS = 2, + BAG_FAMILY_SOUL_SHARDS = 3, + //BAG_FAMILY_UNK1 = 4, + //BAG_FAMILY_UNK1 = 5, + BAG_FAMILY_HERBS = 6, + BAG_FAMILY_ENCHANTING_SUPP = 7, + BAG_FAMILY_ENGINEERING_SUPP = 8, + BAG_FAMILY_KEYS = 9, + BAG_FAMILY_GEMS = 10, + //BAG_FAMILY_UNK3 = 11, + BAG_FAMILY_MINING_SUPP = 12 +}; + +enum INVENTORY_TYPES +{ + INVTYPE_NON_EQUIP = 0, + INVTYPE_HEAD = 1, + INVTYPE_NECK = 2, + INVTYPE_SHOULDERS = 3, + INVTYPE_BODY = 4, + INVTYPE_CHEST = 5, + INVTYPE_WAIST = 6, + INVTYPE_LEGS = 7, + INVTYPE_FEET = 8, + INVTYPE_WRISTS = 9, + INVTYPE_HANDS = 10, + INVTYPE_FINGER = 11, + INVTYPE_TRINKET = 12, + INVTYPE_WEAPON = 13, + INVTYPE_SHIELD = 14, + INVTYPE_RANGED = 15, + INVTYPE_CLOAK = 16, + INVTYPE_2HWEAPON = 17, + INVTYPE_BAG = 18, + INVTYPE_TABARD = 19, + INVTYPE_ROBE = 20, + INVTYPE_WEAPONMAINHAND = 21, + INVTYPE_WEAPONOFFHAND = 22, + INVTYPE_HOLDABLE = 23, + INVTYPE_AMMO = 24, + INVTYPE_THROWN = 25, + INVTYPE_RANGEDRIGHT = 26, + INVTYPE_SLOT_ITEM = 27, + INVTYPE_RELIC = 28, + NUM_INVENTORY_TYPES = 29 +}; + +enum INVENTORY_CLASS +{ + ITEM_CLASS_CONSUMABLE = 0, + ITEM_CLASS_CONTAINER = 1, + ITEM_CLASS_WEAPON = 2, + ITEM_CLASS_JEWELRY = 3, + ITEM_CLASS_ARMOR = 4, + ITEM_CLASS_REAGENT = 5, + ITEM_CLASS_PROJECTILE = 6, + ITEM_CLASS_TRADE_GOODS = 7, + ITEM_CLASS_GENERIC = 8, + ITEM_CLASS_BOOK = 9, + ITEM_CLASS_MONEY = 10, + ITEM_CLASS_QUIVER = 11, + ITEM_CLASS_QUEST = 12, + ITEM_CLASS_KEY = 13, + ITEM_CLASS_PERMANENT = 14, + ITEM_CLASS_JUNK = 15 +}; + +// Client understand only 0 subclass for ITEM_CLASS_CONSUMABLE +// 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_SCROLL = 4, + ITEM_SUBCLASS_BANDAGE = 5, + ITEM_SUBCLASS_HEALTHSTONE = 6, + ITEM_SUBCLASS_COMBAT_EFFECT = 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 +}; + +enum INVENTORY_SUBCLASS_WEAPON +{ + ITEM_SUBCLASS_WEAPON_AXE = 0, + ITEM_SUBCLASS_WEAPON_AXE2 = 1, + ITEM_SUBCLASS_WEAPON_BOW = 2, + ITEM_SUBCLASS_WEAPON_GUN = 3, + ITEM_SUBCLASS_WEAPON_MACE = 4, + ITEM_SUBCLASS_WEAPON_MACE2 = 5, + ITEM_SUBCLASS_WEAPON_POLEARM = 6, + ITEM_SUBCLASS_WEAPON_SWORD = 7, + ITEM_SUBCLASS_WEAPON_SWORD2 = 8, + ITEM_SUBCLASS_WEAPON_obsolete = 9, + ITEM_SUBCLASS_WEAPON_STAFF = 10, + ITEM_SUBCLASS_WEAPON_EXOTIC = 11, + ITEM_SUBCLASS_WEAPON_EXOTIC2 = 12, + ITEM_SUBCLASS_WEAPON_UNARMED = 13, + ITEM_SUBCLASS_WEAPON_GENERIC = 14, + ITEM_SUBCLASS_WEAPON_DAGGER = 15, + ITEM_SUBCLASS_WEAPON_THROWN = 16, + ITEM_SUBCLASS_WEAPON_SPEAR = 17, + ITEM_SUBCLASS_WEAPON_CROSSBOW = 18, + ITEM_SUBCLASS_WEAPON_WAND = 19, + ITEM_SUBCLASS_WEAPON_FISHING_POLE = 20 +}; + +enum ITEM_SUBCLASS_ARMOR +{ + ITEM_SUBCLASS_ARMOR_GENERIC = 0, + ITEM_SUBCLASS_ARMOR_CLOTH = 1, + ITEM_SUBCLASS_ARMOR_LEATHER = 2, + ITEM_SUBCLASS_ARMOR_MAIL = 3, + ITEM_SUBCLASS_ARMOR_PLATE = 4, + ITEM_SUBCLASS_ARMOR_BUCKLER = 5, + ITEM_SUBCLASS_ARMOR_SHIELD = 6 +}; + +enum ITEM_SUBCLASS_PROJECTILE +{ + ITEM_SUBCLASS_ARROW = 2, + ITEM_SUBCLASS_BULLET = 3 +}; + +enum ITEM_SUBCLASS_TRADE_GOODS +{ + ITEM_SUBCLASS_TRADE_GOODS = 0, + ITEM_SUBCLASS_PARTS = 1, + ITEM_SUBCLASS_EXPLOSIVES = 2, + ITEM_SUBCLASS_DEVICES = 3 +}; + +enum ITEM_SUBCLASS_BOOK +{ + ITEM_SUBCLASS_BOOK = 0, + ITEM_SUBCLASS_LEATHERWORKING_PATTERN = 1, + ITEM_SUBCLASS_TAILORING_PATTERN = 2, + ITEM_SUBCLASS_ENGINEERING_SCHEMATIC = 3, + ITEM_SUBCLASS_COOKING_RECIPE = 5, + ITEM_SUBCLASS_ALCHEMY_RECIPE = 6, + ITEM_SUBCLASS_FIRST_AID_MANUAL = 7, + ITEM_SUBCLASS_ENCHANTING_FORMULA = 8, + ITEM_SUBCLASS_FISHING_MANUAL = 9 +}; + +enum ITEM_SUBCLASS_QUIVER +{ + ITEM_SUBCLASS_QUIVER = 2, + ITEM_SUBCLASS_AMMO_POUCH = 3 +}; + +struct _ItemStat +{ + uint32 ItemStatType; + uint32 ItemStatValue; + +}; + +struct _ItemSpell +{ + uint32 SpellId; + uint32 SpellTrigger; + uint32 SpellCharges; + uint32 SpellCooldown; + uint32 SpellCategory; + uint32 SpellCategoryCooldown; + }; struct _ItemSocket @@ -329,68 +329,68 @@ struct _ItemSocket uint32 Content; }; -struct _ItemDamage -{ - float DamageMin; - float DamageMax; - uint32 DamageType; - +struct _ItemDamage +{ + float DamageMin; + float DamageMax; + uint32 DamageType; + }; -struct ItemProto -{ - uint32 Id; - uint32 Class; - uint32 SubClass; - std::string Name[4]; - uint32 DisplayInfoID; - uint32 Quality; - uint32 Flags; - uint32 BuyCount; - uint32 BuyPrice; - uint32 SellPrice; - uint32 InventoryType; - uint32 AllowableClass; - uint32 AllowableRace; - uint32 ItemLevel; - uint32 RequiredLevel; - uint32 RequiredSkill; - uint32 RequiredSkillRank; - uint32 RequiredSpell; - uint32 RequiredHonorRank; - uint32 RequiredCityRank; - uint32 RequiredReputationFaction; - uint32 RequiredReputationRank; - uint32 MaxCount; - uint32 Stackable; - uint32 ContainerSlots; - _ItemStat ItemStat[10]; - _ItemDamage Damage[5]; - uint32 Armor; - uint32 HolyRes; - uint32 FireRes; - uint32 NatureRes; - uint32 FrostRes; - uint32 ShadowRes; - uint32 ArcaneRes; - uint32 Delay; - uint32 Ammo_type; - float RangedModRange; - _ItemSpell Spells[5]; - uint32 Bonding; - std::string Description; - uint32 PageText; - uint32 LanguageID; - uint32 PageMaterial; - uint32 StartQuest; - uint32 LockID; - uint32 Material; - uint32 Sheath; - uint32 Extra; - uint32 Unk1; - uint32 Block; - uint32 ItemSet; - uint32 MaxDurability; +struct ItemProto +{ + uint32 Id; + uint32 Class; + uint32 SubClass; + std::string Name[4]; + uint32 DisplayInfoID; + uint32 Quality; + uint32 Flags; + uint32 BuyCount; + uint32 BuyPrice; + uint32 SellPrice; + uint32 InventoryType; + uint32 AllowableClass; + uint32 AllowableRace; + uint32 ItemLevel; + uint32 RequiredLevel; + uint32 RequiredSkill; + uint32 RequiredSkillRank; + uint32 RequiredSpell; + uint32 RequiredHonorRank; + uint32 RequiredCityRank; + uint32 RequiredReputationFaction; + uint32 RequiredReputationRank; + uint32 MaxCount; + uint32 Stackable; + uint32 ContainerSlots; + _ItemStat ItemStat[10]; + _ItemDamage Damage[5]; + uint32 Armor; + uint32 HolyRes; + uint32 FireRes; + uint32 NatureRes; + uint32 FrostRes; + uint32 ShadowRes; + uint32 ArcaneRes; + uint32 Delay; + uint32 Ammo_type; + float RangedModRange; + _ItemSpell Spells[5]; + uint32 Bonding; + std::string Description; + uint32 PageText; + uint32 LanguageID; + uint32 PageMaterial; + uint32 StartQuest; + uint32 LockID; + uint32 Material; + uint32 Sheath; + uint32 Extra; + uint32 Unk1; + uint32 Block; + uint32 ItemSet; + uint32 MaxDurability; uint32 Area; uint32 Map; uint32 BagFamily; @@ -399,7 +399,8 @@ struct ItemProto uint32 socketBonus; uint32 GemProperties; uint32 ExtendedCost; - uint32 RequiredDisenchantSkill; + uint32 RequiredDisenchantSkill; + float ArmorDamageModifier; }; class Item : public Object @@ -409,7 +410,7 @@ public: void Create(uint64); uint8 GetSlot(void) { return _slot; } void SetSlot(uint8 nr) { _slot = nr; } - uint32 GetEntry() const { return GetUInt32Value(OBJECT_FIELD_ENTRY); } + uint32 GetEntry() const { return GetUInt32Value(OBJECT_FIELD_ENTRY); } uint32 GetCount() const { return GetUInt32Value(ITEM_FIELD_STACK_COUNT); } Bag *GetBag(void) { return _bag; } bool IsInBag() const { return _bag != NULL; } @@ -423,4 +424,4 @@ protected: -#endif \ No newline at end of file +#endif diff --git a/src/Client/World/Object.h b/src/Client/World/Object.h index 3c8f837..e4a80d6 100644 --- a/src/Client/World/Object.h +++ b/src/Client/World/Object.h @@ -3,71 +3,72 @@ #include "UpdateFields.h" #include "ObjectDefines.h" +#include "common.h" -enum TYPE -{ - TYPE_OBJECT = 1, - TYPE_ITEM = 2, - TYPE_CONTAINER = 6, - TYPE_UNIT = 8, - TYPE_PLAYER = 16, - TYPE_GAMEOBJECT = 32, - TYPE_DYNAMICOBJECT = 64, - TYPE_CORPSE = 128, - TYPE_AIGROUP = 256, - TYPE_AREATRIGGER = 512 -}; - -enum TYPEID -{ - TYPEID_OBJECT = 0, - TYPEID_ITEM = 1, - TYPEID_CONTAINER = 2, - TYPEID_UNIT = 3, - TYPEID_PLAYER = 4, - TYPEID_GAMEOBJECT = 5, - TYPEID_DYNAMICOBJECT = 6, - TYPEID_CORPSE = 7, - TYPEID_AIGROUP = 8, - TYPEID_AREATRIGGER = 9 +enum TYPE +{ + TYPE_OBJECT = 1, + TYPE_ITEM = 2, + TYPE_CONTAINER = 6, + TYPE_UNIT = 8, + TYPE_PLAYER = 16, + TYPE_GAMEOBJECT = 32, + TYPE_DYNAMICOBJECT = 64, + TYPE_CORPSE = 128, + TYPE_AIGROUP = 256, + TYPE_AREATRIGGER = 512 +}; + +enum TYPEID +{ + TYPEID_OBJECT = 0, + TYPEID_ITEM = 1, + TYPEID_CONTAINER = 2, + TYPEID_UNIT = 3, + TYPEID_PLAYER = 4, + TYPEID_GAMEOBJECT = 5, + TYPEID_DYNAMICOBJECT = 6, + TYPEID_CORPSE = 7, + TYPEID_AIGROUP = 8, + TYPEID_AREATRIGGER = 9 }; class Object { public: virtual ~Object(); - inline const uint64 GetGUID() const { return GetUInt64Value(0); } - inline const uint32 GetGUIDLow() const { return GetUInt32Value(0); } - inline const uint32 GetGUIDHigh() const { return GetUInt32Value(1); } - inline uint32 GetEntry() const { return GetUInt32Value(OBJECT_FIELD_ENTRY); } - inline uint16 GetValuesCount(void) { return _valuescount; } - - inline const uint8 GetTypeId() { return _typeid; } + inline const uint64 GetGUID() const { return GetUInt64Value(0); } + inline const uint32 GetGUIDLow() const { return GetUInt32Value(0); } + inline const uint32 GetGUIDHigh() const { return GetUInt32Value(1); } + inline uint32 GetEntry() const { return GetUInt32Value(OBJECT_FIELD_ENTRY); } + inline uint16 GetValuesCount(void) { return _valuescount; } + + inline const uint8 GetTypeId() { return _typeid; } inline bool isType(uint8 mask) { return (mask & _type) ? true : false; } - inline const uint32 GetUInt32Value( uint16 index ) const - { - return _uint32values[ index ]; - } - - inline const uint64 GetUInt64Value( uint16 index ) const - { - return *((uint64*)&(_uint32values[ index ])); + inline const uint32 GetUInt32Value( uint16 index ) const + { + return _uint32values[ index ]; } - inline bool HasFlag( uint16 index, uint32 flag ) const - { - return (_uint32values[ index ] & flag) != 0; + inline const uint64 GetUInt64Value( uint16 index ) const + { + return *((uint64*)&(_uint32values[ index ])); } - inline const float GetFloatValue( uint16 index ) const - { - return _floatvalues[ index ]; + + inline bool HasFlag( uint16 index, uint32 flag ) const + { + return (_uint32values[ index ] & flag) != 0; } - inline void SetFloatValue( uint16 index, float value ) - { + inline const float GetFloatValue( uint16 index ) const + { + return _floatvalues[ index ]; + } + inline void SetFloatValue( uint16 index, float value ) + { _floatvalues[ index ] = value; } - inline void SetUInt32Value( uint16 index, uint32 value ) - { + inline void SetUInt32Value( uint16 index, uint32 value ) + { _uint32values[ index ] = value; } diff --git a/src/Client/World/Opcodes.cpp b/src/Client/World/Opcodes.cpp index d766113..afdacea 100644 --- a/src/Client/World/Opcodes.cpp +++ b/src/Client/World/Opcodes.cpp @@ -950,9 +950,44 @@ const char* worldOpcodeNames[] = "UNKNOWN", // 917 "SMSG_UNKNOWN_918", // 918 "SMSG_UNKNOWN_919", // 919 - "SMSG_UNKNOWN_920", // 920 - //there would be declared new opcode, id 921 - //do not forget to change MAX_OPCODE_ID, if you add a line here! + "SMSG_UNKNOWN_920", // 920 + "UNKNOWN921", // 921 + "UNKNOWN922", // 922 + "UNKNOWN923", // 923 + "UNKNOWN924", // 924 + "SMSG_SET_COMBO_POINTS", // 925 + "UNKNOWN926", // 926 + "UNKNOWN927", // 927 + "UNKNOWN928", // 928 + "UNKNOWN929", // 929 + "UNKNOWN930", // 930 + "SMSG_SET_AURA_MULTIPLY", // 931 + "SMSG_SET_AURA_SINGLE", // 932 + "UNKNOWN933", // 933 + "SMSG_CAST_SUCCESS", // 934 + "SMSG_UNKNOWN_935", // 935 + "UNKNOWN936", // 936 + "UNKNOWN937", // 937 + "UNKNOWN938", // 938 + "UNKNOWN939", // 939 + "UNKNOWN940", // 940 + "SMSG_UNKNOWN_941", // 941 + "SMSG_UNKNOWN_942", // 942 + "UNKNOWN943", // 943 + "UNKNOWN944", // 944 + "UNKNOWN945", // 945 + "UNKNOWN946", // 946 + "UNKNOWN947", // 947 + "UNKNOWN948", // 948 + "UNKNOWN949", // 949 + "UNKNOWN950", // 950 + "UNKNOWN951", // 951 + "CMSG_UNKNOWN_952", // 952 + "UNKNOWN953", // 953 + "SMSG_UNKNOWN_954", // 954 + "SMSG_UNKNOWN_955", // 955 + //there would be declared new opcode, id 956 + //do not forget to change MAX_OPCODE_ID, if you add a line here! }; const char *GetOpcodeName(unsigned int id) diff --git a/src/Client/World/Opcodes.h b/src/Client/World/Opcodes.h index ef556a2..1f514c4 100644 --- a/src/Client/World/Opcodes.h +++ b/src/Client/World/Opcodes.h @@ -967,10 +967,61 @@ enum OpCodes SMSG_UNKNOWN_918 = 918, // chat message: The party leader has attempted to reset the instance you are in. Please zone out to allow the instance to reset. SMSG_UNKNOWN_919 = 919, // uint8(0)+uint32(0/1)+uint64(unk/guid) SMSG_UNKNOWN_920 = 920, // notify message: This system is currently disabled. + // 921 + // 922 + // 923 + // 924 + SMSG_SET_COMBO_POINTS = 925, // set combo points + // 926 + // 927 + // 928 + // 929 + // 930 + SMSG_SET_AURA_MULTIPLY = 931, + /* + packed_guid + block (can repeat): + uint8 index may be it's aura slot? (increments) + uint32 spellid + uint32 duration1 (full?) + uint32 duration2 (remaining?) + */ + SMSG_SET_AURA_SINGLE = 932, + /* + packed_guid + uint8 index may be it's aura slot? (increments) + uint32 spellid + uint32 duration1 (full?) + uint32 duration2 (remaining?) + */ + // 933 + SMSG_CAST_SUCCESS = 934, + SMSG_UNKNOWN_935 = 935, // teleport/movement opcode + // 936 + // 937 + // 938 + // 939 + // 940 + SMSG_UNKNOWN_941 = 941, // teleport/movement opcode + SMSG_UNKNOWN_942 = 942, // Everyone is Ready! (message) + // 943 + // 944 + // 945 + // 946 + // 947 + // 948 + // 949 + // 950 + // 951 + CMSG_UNKNOWN_952 = 952, // response to 942 opcode + CMSG_REPORT_SPAM = 953, // Report Spam chat button + SMSG_REPORT_SPAM_RESPONSE = 954, // Complaint Registered. (message) + SMSG_ACTIVATE_SPAM_REPORTING = 955, // unk uint8 + }; //if you add new opcode .. Do NOT forget to change the following define MAX_OPCODE_ID and also add new opcode to table in opcodes.cpp -#define MAX_OPCODE_ID 920 +#define MAX_OPCODE_ID 955 /// Results of friend related commands enum FriendsResult diff --git a/src/Client/World/SharedDefines.h b/src/Client/World/SharedDefines.h index 571e818..0cf0c9e 100644 --- a/src/Client/World/SharedDefines.h +++ b/src/Client/World/SharedDefines.h @@ -16,699 +16,894 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#ifndef MANGOS_SHAREDDEFINES_H -#define MANGOS_SHAREDDEFINES_H +#ifndef SHAREDDEFINES_H +#define SHAREDDEFINES_H -#define GENDER_MALE 0 -#define GENDER_FEMALE 1 -#define GENDER_NONE 2 +enum Gender +{ + GENDER_MALE = 0, + GENDER_FEMALE = 1, + GENDER_NONE = 2 +}; + +// Race value is index in ChrRaces.dbc +enum Races +{ + RACE_HUMAN = 1, + RACE_ORC = 2, + RACE_DWARF = 3, + RACE_NIGHTELF = 4, + RACE_UNDEAD_PLAYER = 5, + RACE_TAUREN = 6, + RACE_GNOME = 7, + RACE_TROLL = 8, + RACE_GOBLIN = 9, + RACE_BLOODELF = 10, + RACE_DRAENEI = 11, + RACE_FEL_ORC = 12, + RACE_NAGA = 13, + RACE_BROKEN = 14, + RACE_SKELETON = 15, + MAX_RACES = 16 +}; + +// Class value is index in ChrClasses.dbc +enum Classes +{ + CLASS_WARRIOR = 1, + CLASS_PALADIN = 2, + CLASS_HUNTER = 3, + CLASS_ROGUE = 4, + CLASS_PRIEST = 5, + // CLASS_UNK1 = 6, unused + CLASS_SHAMAN = 7, + CLASS_MAGE = 8, + CLASS_WARLOCK = 9, + // CLASS_UNK2 = 10,unused + CLASS_DRUID = 11, + MAX_CLASSES = 12 +}; + +#define CLASSMASK_WAND_USERS ((1<<(CLASS_PRIEST-1))|(1<<(CLASS_MAGE-1))|(1<<(CLASS_WARLOCK-1))) + +enum ReputationRank +{ + REP_HATED = 0, + REP_HOSTILE = 1, + REP_UNFRIENDLY = 2, + REP_NEUTRAL = 3, + REP_FRIENDLY = 4, + REP_HONORED = 5, + REP_REVERED = 6, + REP_EXALTED = 7 +}; + +#define MIN_REPUTATION_RANK (REP_HATED) +#define MAX_REPUTATION_RANK 8 -#define RACE_HUMAN 1 -#define RACE_ORC 2 -#define RACE_DWARF 3 -#define RACE_NIGHT_ELF 4 -#define RACE_UNDEAD 5 -#define RACE_TAUREN 6 -#define RACE_GNOME 7 -#define RACE_TROLL 8 - -#define CLASS_WARRIOR 1 -#define CLASS_PALADIN 2 -#define CLASS_HUNTER 3 -#define CLASS_ROGUE 4 -#define CLASS_PRIEST 5 -#define CLASS_UNK1 6 -#define CLASS_SHAMAN 7 -#define CLASS_MAGE 8 -#define CLASS_WARLOCK 9 -#define CLASS_UNK2 10 -#define CLASS_DRUID 11 - -enum Stats -{ - STAT_STRENGTH = 0, - STAT_AGILITY = 1, - STAT_STAMINA = 2, - STAT_INTELLECT = 3, - STAT_SPIRIT = 4 +enum MapTypes +{ + MAP_COMMON = 0, + MAP_INSTANCE = 1, + MAP_RAID = 2, + MAP_BATTLEGROUND = 3, + MAP_ARENA = 4 +}; + +enum MoneyConstants +{ + COPPER = 1, + SILVER = COPPER*100, + GOLD = SILVER*100 +}; + +enum Stats +{ + STAT_STRENGTH = 0, + STAT_AGILITY = 1, + STAT_STAMINA = 2, + STAT_INTELLECT = 3, + STAT_SPIRIT = 4 +}; + +#define MAX_STATS 5 + +enum Powers +{ + POWER_MANA = 0, + POWER_RAGE = 1, + POWER_FOCUS = 2, + POWER_ENERGY = 3, + POWER_HAPPINESS = 4 +}; + +#define MAX_POWERS 5 + +enum SpellSchools +{ + SPELL_SCHOOL_NORMAL = 0, + SPELL_SCHOOL_HOLY = 1, + SPELL_SCHOOL_FIRE = 2, + SPELL_SCHOOL_NATURE = 3, + SPELL_SCHOOL_FROST = 4, + SPELL_SCHOOL_SHADOW = 5, + SPELL_SCHOOL_ARCANE = 6 +}; + +#define MAX_SPELL_SCHOOL 7 + +enum ItemQualities +{ + ITEM_QUALITY_POOR = 0, //GREY + ITEM_QUALITY_NORMAL = 1, //WHITE + ITEM_QUALITY_UNCOMMON = 2, //GREEN + ITEM_QUALITY_RARE = 3, //BLUE + ITEM_QUALITY_EPIC = 4, //PURPLE + ITEM_QUALITY_LEGENDARY = 5, //ORANGE + ITEM_QUALITY_ARTIFACT = 6 //LIGHT YELLOW +}; + +enum sheathTypes +{ + SHEATHETYPE_NONE = 0, + SHEATHETYPE_MAINHAND = 1, + SHEATHETYPE_OFFHAND = 2, + SHEATHETYPE_LARGEWEAPONLEFT = 3, + SHEATHETYPE_LARGEWEAPONRIGHT = 4, + SHEATHETYPE_HIPWEAPONLEFT = 5, + SHEATHETYPE_HIPWEAPONRIGHT = 6, + SHEATHETYPE_SHIELD = 7 +}; + +enum CharacterSlot +{ + SLOT_HEAD = 0, + SLOT_NECK = 1, + SLOT_SHOULDERS = 2, + SLOT_SHIRT = 3, + SLOT_CHEST = 4, + SLOT_WAIST = 5, + SLOT_LEGS = 6, + SLOT_FEET = 7, + SLOT_WRISTS = 8, + SLOT_HANDS = 9, + SLOT_FINGER1 = 10, + SLOT_FINGER2 = 11, + SLOT_TRINKET1 = 12, + SLOT_TRINKET2 = 13, + SLOT_BACK = 14, + SLOT_MAIN_HAND = 15, + SLOT_OFF_HAND = 16, + SLOT_RANGED = 17, + SLOT_TABARD = 18, + SLOT_EMPTY = 19 }; -enum Powers -{ - POWER_MANA = 0, - POWER_RAGE = 1, - POWER_FOCUS = 2, - POWER_ENERGY = 3, - POWER_HAPPINESS = 4 +enum Language +{ + LANG_GLOBAL = 0, + LANG_UNIVERSAL = 0, + LANG_ORCISH = 1, + LANG_DARNASSIAN = 2, + LANG_TAURAHE = 3, + LANG_DWARVISH = 6, + LANG_COMMON = 7, + LANG_DEMONIC = 8, + LANG_TITAN = 9, + LANG_THALASSIAN = 10, + LANG_DRACONIC = 11, + LANG_KALIMAG = 12, + LANG_GNOMISH = 13, + LANG_TROLL = 14, + LANG_GUTTERSPEAK = 33, + LANG_DRAENEI = 35, + LANG_ADDON = 0xFFFFFFFF // used by addons }; -enum SpellSchools -{ - SPELL_SCHOOL_NORMAL = 0, - SPELL_SCHOOL_HOLY = 1, - SPELL_SCHOOL_FIRE = 2, - SPELL_SCHOOL_NATURE = 3, - SPELL_SCHOOL_FROST = 4, - SPELL_SCHOOL_SHADOW = 5, - SPELL_SCHOOL_ARCANE = 6 +enum SpellEffects +{ + SPELL_EFFECT_INSTAKILL = 1, + SPELL_EFFECT_SCHOOL_DAMAGE = 2, + SPELL_EFFECT_DUMMY = 3, + SPELL_EFFECT_PORTAL_TELEPORT = 4, + SPELL_EFFECT_TELEPORT_UNITS = 5, + SPELL_EFFECT_APPLY_AURA = 6, + SPELL_EFFECT_ENVIRONMENTAL_DAMAGE = 7, + SPELL_EFFECT_MANA_DRAIN = 8, + SPELL_EFFECT_HEALTH_LEECH = 9, + SPELL_EFFECT_HEAL = 10, + SPELL_EFFECT_BIND = 11, + SPELL_EFFECT_PORTAL = 12, + SPELL_EFFECT_RITUAL_BASE = 13, + SPELL_EFFECT_RITUAL_SPECIALIZE = 14, + SPELL_EFFECT_RITUAL_ACTIVATE_PORTAL = 15, + SPELL_EFFECT_QUEST_COMPLETE = 16, + SPELL_EFFECT_WEAPON_DAMAGE_NOSCHOOL = 17, + SPELL_EFFECT_RESURRECT = 18, + SPELL_EFFECT_ADD_EXTRA_ATTACKS = 19, + SPELL_EFFECT_DODGE = 20, + SPELL_EFFECT_EVADE = 21, + SPELL_EFFECT_PARRY = 22, + SPELL_EFFECT_BLOCK = 23, + SPELL_EFFECT_CREATE_ITEM = 24, + SPELL_EFFECT_WEAPON = 25, + SPELL_EFFECT_DEFENSE = 26, + SPELL_EFFECT_PERSISTENT_AREA_AURA = 27, + SPELL_EFFECT_SUMMON = 28, + SPELL_EFFECT_LEAP = 29, + SPELL_EFFECT_ENERGIZE = 30, + SPELL_EFFECT_WEAPON_PERCENT_DAMAGE = 31, + SPELL_EFFECT_TRIGGER_MISSILE = 32, + SPELL_EFFECT_OPEN_LOCK = 33, + SPELL_EFFECT_SUMMON_CHANGE_ITEM = 34, + SPELL_EFFECT_APPLY_AREA_AURA = 35, + SPELL_EFFECT_LEARN_SPELL = 36, + SPELL_EFFECT_SPELL_DEFENSE = 37, + SPELL_EFFECT_DISPEL = 38, + SPELL_EFFECT_LANGUAGE = 39, + SPELL_EFFECT_DUAL_WIELD = 40, + SPELL_EFFECT_SUMMON_WILD = 41, + SPELL_EFFECT_SUMMON_GUARDIAN = 42, + SPELL_EFFECT_TELEPORT_UNITS_FACE_CASTER= 43, + SPELL_EFFECT_SKILL_STEP = 44, + SPELL_EFFECT_UNDEFINED_45 = 45, + SPELL_EFFECT_SPAWN = 46, + SPELL_EFFECT_TRADE_SKILL = 47, + SPELL_EFFECT_STEALTH = 48, + SPELL_EFFECT_DETECT = 49, + // SPELL_EFFECT_SUMMON_OBJECT = 50, + SPELL_EFFECT_TRANS_DOOR = 50, + SPELL_EFFECT_FORCE_CRITICAL_HIT = 51, + SPELL_EFFECT_GUARANTEE_HIT = 52, + SPELL_EFFECT_ENCHANT_ITEM = 53, + SPELL_EFFECT_ENCHANT_ITEM_TEMPORARY = 54, + SPELL_EFFECT_TAMECREATURE = 55, + SPELL_EFFECT_SUMMON_PET = 56, + SPELL_EFFECT_LEARN_PET_SPELL = 57, + SPELL_EFFECT_WEAPON_DAMAGE = 58, + SPELL_EFFECT_OPEN_LOCK_ITEM = 59, + SPELL_EFFECT_PROFICIENCY = 60, + SPELL_EFFECT_SEND_EVENT = 61, + SPELL_EFFECT_POWER_BURN = 62, + SPELL_EFFECT_THREAT = 63, + SPELL_EFFECT_TRIGGER_SPELL = 64, + SPELL_EFFECT_HEALTH_FUNNEL = 65, + SPELL_EFFECT_POWER_FUNNEL = 66, + SPELL_EFFECT_HEAL_MAX_HEALTH = 67, + SPELL_EFFECT_INTERRUPT_CAST = 68, + SPELL_EFFECT_DISTRACT = 69, + SPELL_EFFECT_PULL = 70, + SPELL_EFFECT_PICKPOCKET = 71, + SPELL_EFFECT_ADD_FARSIGHT = 72, + SPELL_EFFECT_SUMMON_POSSESSED = 73, + SPELL_EFFECT_SUMMON_TOTEM = 74, + SPELL_EFFECT_HEAL_MECHANICAL = 75, + SPELL_EFFECT_SUMMON_OBJECT_WILD = 76, + SPELL_EFFECT_SCRIPT_EFFECT = 77, + SPELL_EFFECT_ATTACK = 78, + SPELL_EFFECT_SANCTUARY = 79, + SPELL_EFFECT_ADD_COMBO_POINTS = 80, + SPELL_EFFECT_CREATE_HOUSE = 81, + SPELL_EFFECT_BIND_SIGHT = 82, + SPELL_EFFECT_DUEL = 83, + SPELL_EFFECT_STUCK = 84, + SPELL_EFFECT_SUMMON_PLAYER = 85, + SPELL_EFFECT_ACTIVATE_OBJECT = 86, + SPELL_EFFECT_SUMMON_TOTEM_SLOT1 = 87, + SPELL_EFFECT_SUMMON_TOTEM_SLOT2 = 88, + SPELL_EFFECT_SUMMON_TOTEM_SLOT3 = 89, + SPELL_EFFECT_SUMMON_TOTEM_SLOT4 = 90, + SPELL_EFFECT_THREAT_ALL = 91, + SPELL_EFFECT_ENCHANT_HELD_ITEM = 92, + SPELL_EFFECT_SUMMON_PHANTASM = 93, + SPELL_EFFECT_SELF_RESURRECT = 94, + SPELL_EFFECT_SKINNING = 95, + SPELL_EFFECT_CHARGE = 96, + SPELL_EFFECT_SUMMON_CRITTER = 97, + SPELL_EFFECT_KNOCK_BACK = 98, + SPELL_EFFECT_DISENCHANT = 99, + SPELL_EFFECT_INEBRIATE = 100, + SPELL_EFFECT_FEED_PET = 101, + SPELL_EFFECT_DISMISS_PET = 102, + SPELL_EFFECT_REPUTATION = 103, + SPELL_EFFECT_SUMMON_OBJECT_SLOT1 = 104, + SPELL_EFFECT_SUMMON_OBJECT_SLOT2 = 105, + SPELL_EFFECT_SUMMON_OBJECT_SLOT3 = 106, + SPELL_EFFECT_SUMMON_OBJECT_SLOT4 = 107, + SPELL_EFFECT_DISPEL_MECHANIC = 108, + SPELL_EFFECT_SUMMON_DEAD_PET = 109, + SPELL_EFFECT_DESTROY_ALL_TOTEMS = 110, + SPELL_EFFECT_DURABILITY_DAMAGE = 111, + SPELL_EFFECT_SUMMON_DEMON = 112, + SPELL_EFFECT_RESURRECT_NEW = 113, + SPELL_EFFECT_ATTACK_ME = 114, + SPELL_EFFECT_DURABILITY_DAMAGE_PCT = 115, + SPELL_EFFECT_SKIN_PLAYER_CORPSE = 116, + SPELL_EFFECT_SPIRIT_HEAL = 117, + SPELL_EFFECT_SKILL = 118, + SPELL_EFFECT_APPLY_AURA_NEW = 119, + SPELL_EFFECT_TELEPORT_GRAVEYARD = 120, + SPELL_EFFECT_NORMALIZED_WEAPON_DMG = 121, + SPELL_EFFECT_122 = 122, + SPELL_EFFECT_123 = 123, + SPELL_EFFECT_124 = 124, + SPELL_EFFECT_REDUCE_THREAT_PERCENT = 125, + SPELL_EFFECT_126 = 126, + SPELL_EFFECT_PROSPECTING = 127, + SPELL_EFFECT_128 = 128, + SPELL_EFFECT_129 = 129, + SPELL_EFFECT_130 = 130, + SPELL_EFFECT_131 = 131, + SPELL_EFFECT_132 = 132, + SPELL_EFFECT_133 = 133, + SPELL_EFFECT_134 = 134, + SPELL_EFFECT_135 = 135, + SPELL_EFFECT_136 = 136, + SPELL_EFFECT_137 = 137, + SPELL_EFFECT_138 = 138, + SPELL_EFFECT_139 = 139, + SPELL_EFFECT_140 = 140, + SPELL_EFFECT_141 = 141, + SPELL_EFFECT_142 = 142, + SPELL_EFFECT_143 = 143, + TOTAL_SPELL_EFFECTS = 144 }; -#define ITEM_QUALITY_POOR 0 //GREY -#define ITEM_QUALITY_NORMAL 1 //WHITE -#define ITEM_QUALITY_UNCOMMON 2 //GREEN -#define ITEM_QUALITY_RARE 3 //BLUE -#define ITEM_QUALITY_EPIC 4 //PURPLE -#define ITEM_QUALITY_LEGENDARY 5 //ORANGE -#define ITEM_QUALITY_ARTIFACT 6 //LIGHT YELLOW +enum CharacterStates +{ + STATE_SITTING = 1, + STATE_SITTINGCHAIR = 2, + STATE_SLEEPING = 3, + STATE_SITTINGCHAIRLOW = 4, + STATE_SITTINGCHAIRMEDIUM = 5, + STATE_SITTINGCHAIRHIGH = 6, + STATE_DEAD = 7, + STATE_KNEEL = 8 +}; + +enum GameobjectTypes +{ + GAMEOBJECT_TYPE_DOOR = 0, + GAMEOBJECT_TYPE_BUTTON = 1, + GAMEOBJECT_TYPE_QUESTGIVER = 2, + GAMEOBJECT_TYPE_CHEST = 3, + GAMEOBJECT_TYPE_BINDER = 4, + GAMEOBJECT_TYPE_GENERIC = 5, + GAMEOBJECT_TYPE_TRAP = 6, + GAMEOBJECT_TYPE_CHAIR = 7, + GAMEOBJECT_TYPE_SPELL_FOCUS = 8, + GAMEOBJECT_TYPE_TEXT = 9, + GAMEOBJECT_TYPE_GOOBER = 10, + GAMEOBJECT_TYPE_TRANSPORT = 11, + GAMEOBJECT_TYPE_AREADAMAGE = 12, + GAMEOBJECT_TYPE_CAMERA = 13, + GAMEOBJECT_TYPE_MAP_OBJECT = 14, + GAMEOBJECT_TYPE_MO_TRANSPORT = 15, + GAMEOBJECT_TYPE_DUEL_ARBITER = 16, + GAMEOBJECT_TYPE_FISHINGNODE = 17, + GAMEOBJECT_TYPE_SUMMONING_RITUAL = 18, + GAMEOBJECT_TYPE_MAILBOX = 19, + GAMEOBJECT_TYPE_AUCTIONHOUSE = 20, + GAMEOBJECT_TYPE_GUARDPOST = 21, + GAMEOBJECT_TYPE_SPELLCASTER = 22, + GAMEOBJECT_TYPE_MEETINGSTONE = 23, + GAMEOBJECT_TYPE_FLAGSTAND = 24, + GAMEOBJECT_TYPE_FISHINGHOLE = 25, + GAMEOBJECT_TYPE_FLAGDROP = 26, + GAMEOBJECT_TYPE_MINI_GAME = 27, + GAMEOBJECT_TYPE_LOTTERY_KIOSK = 28, + GAMEOBJECT_TYPE_CAPTURE_POINT = 29, + GAMEOBJECT_TYPE_AURA_GENERATOR = 30, + GAMEOBJECT_TYPE_DUNGEON_DIFFICULTY = 31, + MAX_GAMEOBJECT_TYPE = 32 // sending to client this or greater value can crash client. +}; -#define SHEATHETYPE_NONE 0 -#define SHEATHETYPE_MAINHAND 1 -#define SHEATHETYPE_OFFHAND 2 -#define SHEATHETYPE_LARGEWEAPONLEFT 3 -#define SHEATHETYPE_LARGEWEAPONRIGHT 4 -#define SHEATHETYPE_HIPWEAPONLEFT 5 -#define SHEATHETYPE_HIPWEAPONRIGHT 6 -#define SHEATHETYPE_SHIELD 7 +enum TextEmote +{ + TEXTEMOTE_AGREE = 1, + TEXTEMOTE_AMAZE = 2, + TEXTEMOTE_ANGRY = 3, + TEXTEMOTE_APOLOGIZE = 4, + TEXTEMOTE_APPLAUD = 5, + TEXTEMOTE_BASHFUL = 6, + TEXTEMOTE_BECKON = 7, + TEXTEMOTE_BEG = 8, + TEXTEMOTE_BITE = 9, + TEXTEMOTE_BLEED = 10, + TEXTEMOTE_BLINK = 11, + TEXTEMOTE_BLUSH = 12, + TEXTEMOTE_BONK = 13, + TEXTEMOTE_BORED = 14, + TEXTEMOTE_BOUNCE = 15, + TEXTEMOTE_BRB = 16, + TEXTEMOTE_BOW = 17, + TEXTEMOTE_BURP = 18, + TEXTEMOTE_BYE = 19, + TEXTEMOTE_CACKLE = 20, + TEXTEMOTE_CHEER = 21, + TEXTEMOTE_CHICKEN = 22, + TEXTEMOTE_CHUCKLE = 23, + TEXTEMOTE_CLAP = 24, + TEXTEMOTE_CONFUSED = 25, + TEXTEMOTE_CONGRATULATE = 26, + TEXTEMOTE_COUGH = 27, + TEXTEMOTE_COWER = 28, + TEXTEMOTE_CRACK = 29, + TEXTEMOTE_CRINGE = 30, + TEXTEMOTE_CRY = 31, + TEXTEMOTE_CURIOUS = 32, + TEXTEMOTE_CURTSEY = 33, + TEXTEMOTE_DANCE = 34, + TEXTEMOTE_DRINK = 35, + TEXTEMOTE_DROOL = 36, + TEXTEMOTE_EAT = 37, + TEXTEMOTE_EYE = 38, + TEXTEMOTE_FART = 39, + TEXTEMOTE_FIDGET = 40, + TEXTEMOTE_FLEX = 41, + TEXTEMOTE_FROWN = 42, + TEXTEMOTE_GASP = 43, + TEXTEMOTE_GAZE = 44, + TEXTEMOTE_GIGGLE = 45, + TEXTEMOTE_GLARE = 46, + TEXTEMOTE_GLOAT = 47, + TEXTEMOTE_GREET = 48, + TEXTEMOTE_GRIN = 49, + TEXTEMOTE_GROAN = 50, + TEXTEMOTE_GROVEL = 51, + TEXTEMOTE_GUFFAW = 52, + TEXTEMOTE_HAIL = 53, + TEXTEMOTE_HAPPY = 54, + TEXTEMOTE_HELLO = 55, + TEXTEMOTE_HUG = 56, + TEXTEMOTE_HUNGRY = 57, + TEXTEMOTE_KISS = 58, + TEXTEMOTE_KNEEL = 59, + TEXTEMOTE_LAUGH = 60, + TEXTEMOTE_LAYDOWN = 61, + TEXTEMOTE_MESSAGE = 62, + TEXTEMOTE_MOAN = 63, + TEXTEMOTE_MOON = 64, + TEXTEMOTE_MOURN = 65, + TEXTEMOTE_NO = 66, + TEXTEMOTE_NOD = 67, + TEXTEMOTE_NOSEPICK = 68, + TEXTEMOTE_PANIC = 69, + TEXTEMOTE_PEER = 70, + TEXTEMOTE_PLEAD = 71, + TEXTEMOTE_POINT = 72, + TEXTEMOTE_POKE = 73, + TEXTEMOTE_PRAY = 74, + TEXTEMOTE_ROAR = 75, + TEXTEMOTE_ROFL = 76, + TEXTEMOTE_RUDE = 77, + TEXTEMOTE_SALUTE = 78, + TEXTEMOTE_SCRATCH = 79, + TEXTEMOTE_SEXY = 80, + TEXTEMOTE_SHAKE = 81, + TEXTEMOTE_SHOUT = 82, + TEXTEMOTE_SHRUG = 83, + TEXTEMOTE_SHY = 84, + TEXTEMOTE_SIGH = 85, + TEXTEMOTE_SIT = 86, + TEXTEMOTE_SLEEP = 87, + TEXTEMOTE_SNARL = 88, + TEXTEMOTE_SPIT = 89, + TEXTEMOTE_STARE = 90, + TEXTEMOTE_SURPRISED = 91, + TEXTEMOTE_SURRENDER = 92, + TEXTEMOTE_TALK = 93, + TEXTEMOTE_TALKEX = 94, + TEXTEMOTE_TALKQ = 95, + TEXTEMOTE_TAP = 96, + TEXTEMOTE_THANK = 97, + TEXTEMOTE_THREATEN = 98, + TEXTEMOTE_TIRED = 99, + TEXTEMOTE_VICTORY = 100, + TEXTEMOTE_WAVE = 101, + TEXTEMOTE_WELCOME = 102, + TEXTEMOTE_WHINE = 103, + TEXTEMOTE_WHISTLE = 104, + TEXTEMOTE_WORK = 105, + TEXTEMOTE_YAWN = 106, + TEXTEMOTE_BOGGLE = 107, + TEXTEMOTE_CALM = 108, + TEXTEMOTE_COLD = 109, + TEXTEMOTE_COMFORT = 110, + TEXTEMOTE_CUDDLE = 111, + TEXTEMOTE_DUCK = 112, + TEXTEMOTE_INSULT = 113, + TEXTEMOTE_INTRODUCE = 114, + TEXTEMOTE_JK = 115, + TEXTEMOTE_LICK = 116, + TEXTEMOTE_LISTEN = 117, + TEXTEMOTE_LOST = 118, + TEXTEMOTE_MOCK = 119, + TEXTEMOTE_PONDER = 120, + TEXTEMOTE_POUNCE = 121, + TEXTEMOTE_PRAISE = 122, + TEXTEMOTE_PURR = 123, + TEXTEMOTE_PUZZLE = 124, + TEXTEMOTE_RAISE = 125, + TEXTEMOTE_READY = 126, + TEXTEMOTE_SHIMMY = 127, + TEXTEMOTE_SHIVER = 128, + TEXTEMOTE_SHOO = 129, + TEXTEMOTE_SLAP = 130, + TEXTEMOTE_SMIRK = 131, + TEXTEMOTE_SNIFF = 132, + TEXTEMOTE_SNUB = 133, + TEXTEMOTE_SOOTHE = 134, + TEXTEMOTE_STINK = 135, + TEXTEMOTE_TAUNT = 136, + TEXTEMOTE_TEASE = 137, + TEXTEMOTE_THIRSTY = 138, + TEXTEMOTE_VETO = 139, + TEXTEMOTE_SNICKER = 140, + TEXTEMOTE_STAND = 141, + TEXTEMOTE_TICKLE = 142, + TEXTEMOTE_VIOLIN = 143, + TEXTEMOTE_SMILE = 163, + TEXTEMOTE_RASP = 183, + TEXTEMOTE_PITY = 203, + TEXTEMOTE_GROWL = 204, + TEXTEMOTE_BARK = 205, + TEXTEMOTE_SCARED = 223, + TEXTEMOTE_FLOP = 224, + TEXTEMOTE_LOVE = 225, + TEXTEMOTE_MOO = 226, + TEXTEMOTE_OPENFIRE = 327, + TEXTEMOTE_FLIRT = 328, + TEXTEMOTE_JOKE = 329, + TEXTEMOTE_COMMEND = 243, + TEXTEMOTE_WINK = 363, + TEXTEMOTE_PAT = 364, + TEXTEMOTE_SERIOUS = 365, + TEXTEMOTE_MOUNTSPECIAL = 366 +}; + +enum Emote +{ + EMOTE_ONESHOT_NONE = 0, + EMOTE_ONESHOT_TALK = 1, + EMOTE_ONESHOT_BOW = 2, + EMOTE_ONESHOT_WAVE = 3, + EMOTE_ONESHOT_CHEER = 4, + EMOTE_ONESHOT_EXCLAMATION = 5, + EMOTE_ONESHOT_QUESTION = 6, + EMOTE_ONESHOT_EAT = 7, + EMOTE_STATE_DANCE = 10, + EMOTE_ONESHOT_LAUGH = 11, + EMOTE_STATE_SLEEP = 12, + EMOTE_STATE_SIT = 13, + EMOTE_ONESHOT_RUDE = 14, + EMOTE_ONESHOT_ROAR = 15, + EMOTE_ONESHOT_KNEEL = 16, + EMOTE_ONESHOT_KISS = 17, + EMOTE_ONESHOT_CRY = 18, + EMOTE_ONESHOT_CHICKEN = 19, + EMOTE_ONESHOT_BEG = 20, + EMOTE_ONESHOT_APPLAUD = 21, + EMOTE_ONESHOT_SHOUT = 22, + EMOTE_ONESHOT_FLEX = 23, + EMOTE_ONESHOT_SHY = 24, + EMOTE_ONESHOT_POINT = 25, + EMOTE_STATE_STAND = 26, + EMOTE_STATE_READYUNARMED = 27, + EMOTE_STATE_WORK = 28, + EMOTE_STATE_POINT = 29, + EMOTE_STATE_NONE = 30, + EMOTE_ONESHOT_WOUND = 33, + EMOTE_ONESHOT_WOUNDCRITICAL = 34, + EMOTE_ONESHOT_ATTACKUNARMED = 35, + EMOTE_ONESHOT_ATTACK1H = 36, + EMOTE_ONESHOT_ATTACK2HTIGHT = 37, + EMOTE_ONESHOT_ATTACK2HLOOSE = 38, + EMOTE_ONESHOT_PARRYUNARMED = 39, + EMOTE_ONESHOT_PARRYSHIELD = 43, + EMOTE_ONESHOT_READYUNARMED = 44, + EMOTE_ONESHOT_READY1H = 45, + EMOTE_ONESHOT_READYBOW = 48, + EMOTE_ONESHOT_SPELLPRECAST = 50, + EMOTE_ONESHOT_SPELLCAST = 51, + EMOTE_ONESHOT_BATTLEROAR = 53, + EMOTE_ONESHOT_SPECIALATTACK1H = 54, + EMOTE_ONESHOT_KICK = 60, + EMOTE_ONESHOT_ATTACKTHROWN = 61, + EMOTE_STATE_STUN = 64, + EMOTE_STATE_DEAD = 65, + EMOTE_ONESHOT_SALUTE = 66, + EMOTE_STATE_KNEEL = 68, + EMOTE_STATE_USESTANDING = 69, + EMOTE_ONESHOT_WAVE_NOSHEATHE = 70, + EMOTE_ONESHOT_CHEER_NOSHEATHE = 71, + EMOTE_ONESHOT_EAT_NOSHEATHE = 92, + EMOTE_STATE_STUN_NOSHEATHE = 93, + EMOTE_ONESHOT_DANCE = 94, + EMOTE_ONESHOT_SALUTE_NOSHEATH = 113, + EMOTE_STATE_USESTANDING_NOSHEATHE = 133, + EMOTE_ONESHOT_LAUGH_NOSHEATHE = 153, + EMOTE_STATE_WORK_NOSHEATHE = 173, + EMOTE_STATE_SPELLPRECAST = 193, + EMOTE_ONESHOT_READYRIFLE = 213, + EMOTE_STATE_READYRIFLE = 214, + EMOTE_STATE_WORK_NOSHEATHE_MINING = 233, + EMOTE_STATE_WORK_NOSHEATHE_CHOPWOOD= 234, + EMOTE_zzOLDONESHOT_LIFTOFF = 253, + EMOTE_ONESHOT_LIFTOFF = 254, + EMOTE_ONESHOT_YES = 273, + EMOTE_ONESHOT_NO = 274, + EMOTE_ONESHOT_TRAIN = 275, + EMOTE_ONESHOT_LAND = 293, + EMOTE_STATE_AT_EASE = 313, + EMOTE_STATE_READY1H = 333, + EMOTE_STATE_SPELLKNEELSTART = 353, + EMOTE_STATE_SUBMERGED = 373, + EMOTE_ONESHOT_SUBMERGE = 374, + EMOTE_STATE_READY2H = 375, + EMOTE_STATE_READYBOW = 376, + EMOTE_ONESHOT_MOUNTSPECIAL = 377, + EMOTE_STATE_TALK = 378, + EMOTE_STATE_FISHING = 379, + EMOTE_ONESHOT_FISHING = 380, + EMOTE_ONESHOT_LOOT = 381, + EMOTE_STATE_WHIRLWIND = 382, + EMOTE_STATE_DROWNED = 383, + EMOTE_STATE_HOLD_BOW = 384, + EMOTE_STATE_HOLD_RIFLE = 385, + EMOTE_STATE_HOLD_THROWN = 386, + EMOTE_ONESHOT_DROWN = 387, + EMOTE_ONESHOT_STOMP = 388, + EMOTE_ONESHOT_ATTACKOFF = 389, + EMOTE_ONESHOT_ATTACKOFFPIERCE = 390, + EMOTE_STATE_ROAR = 391, + EMOTE_STATE_LAUGH = 392, + EMOTE_ONESHOT_CREATURE_SPECIAL = 393 +}; + +enum Anim +{ + ANIM_STAND = 0x0, + ANIM_DEATH = 0x1, + ANIM_SPELL = 0x2, + ANIM_STOP = 0x3, + ANIM_WALK = 0x4, + ANIM_RUN = 0x5, + ANIM_DEAD = 0x6, + ANIM_RISE = 0x7, + ANIM_STANDWOUND = 0x8, + ANIM_COMBATWOUND = 0x9, + ANIM_COMBATCRITICAL = 0xA, + ANIM_SHUFFLE_LEFT = 0xB, + ANIM_SHUFFLE_RIGHT = 0xC, + ANIM_WALK_BACKWARDS = 0xD, + ANIM_STUN = 0xE, + ANIM_HANDS_CLOSED = 0xF, + ANIM_ATTACKUNARMED = 0x10, + ANIM_ATTACK1H = 0x11, + ANIM_ATTACK2HTIGHT = 0x12, + ANIM_ATTACK2HLOOSE = 0x13, + ANIM_PARRYUNARMED = 0x14, + ANIM_PARRY1H = 0x15, + ANIM_PARRY2HTIGHT = 0x16, + ANIM_PARRY2HLOOSE = 0x17, + ANIM_PARRYSHIELD = 0x18, + ANIM_READYUNARMED = 0x19, + ANIM_READY1H = 0x1A, + ANIM_READY2HTIGHT = 0x1B, + ANIM_READY2HLOOSE = 0x1C, + ANIM_READYBOW = 0x1D, + ANIM_DODGE = 0x1E, + ANIM_SPELLPRECAST = 0x1F, + ANIM_SPELLCAST = 0x20, + ANIM_SPELLCASTAREA = 0x21, + ANIM_NPCWELCOME = 0x22, + ANIM_NPCGOODBYE = 0x23, + ANIM_BLOCK = 0x24, + ANIM_JUMPSTART = 0x25, + ANIM_JUMP = 0x26, + ANIM_JUMPEND = 0x27, + ANIM_FALL = 0x28, + ANIM_SWIMIDLE = 0x29, + ANIM_SWIM = 0x2A, + ANIM_SWIM_LEFT = 0x2B, + ANIM_SWIM_RIGHT = 0x2C, + ANIM_SWIM_BACKWARDS = 0x2D, + ANIM_ATTACKBOW = 0x2E, + ANIM_FIREBOW = 0x2F, + ANIM_READYRIFLE = 0x30, + ANIM_ATTACKRIFLE = 0x31, + ANIM_LOOT = 0x32, + ANIM_SPELL_PRECAST_DIRECTED = 0x33, + ANIM_SPELL_PRECAST_OMNI = 0x34, + ANIM_SPELL_CAST_DIRECTED = 0x35, + ANIM_SPELL_CAST_OMNI = 0x36, + ANIM_SPELL_BATTLEROAR = 0x37, + ANIM_SPELL_READYABILITY = 0x38, + ANIM_SPELL_SPECIAL1H = 0x39, + ANIM_SPELL_SPECIAL2H = 0x3A, + ANIM_SPELL_SHIELDBASH = 0x3B, + ANIM_EMOTE_TALK = 0x3C, + ANIM_EMOTE_EAT = 0x3D, + ANIM_EMOTE_WORK = 0x3E, + ANIM_EMOTE_USE_STANDING = 0x3F, + ANIM_EMOTE_EXCLAMATION = 0x40, + ANIM_EMOTE_QUESTION = 0x41, + ANIM_EMOTE_BOW = 0x42, + ANIM_EMOTE_WAVE = 0x43, + ANIM_EMOTE_CHEER = 0x44, + ANIM_EMOTE_DANCE = 0x45, + ANIM_EMOTE_LAUGH = 0x46, + ANIM_EMOTE_SLEEP = 0x47, + ANIM_EMOTE_SIT_GROUND = 0x48, + ANIM_EMOTE_RUDE = 0x49, + ANIM_EMOTE_ROAR = 0x4A, + ANIM_EMOTE_KNEEL = 0x4B, + ANIM_EMOTE_KISS = 0x4C, + ANIM_EMOTE_CRY = 0x4D, + ANIM_EMOTE_CHICKEN = 0x4E, + ANIM_EMOTE_BEG = 0x4F, + ANIM_EMOTE_APPLAUD = 0x50, + ANIM_EMOTE_SHOUT = 0x51, + ANIM_EMOTE_FLEX = 0x52, + ANIM_EMOTE_SHY = 0x53, + ANIM_EMOTE_POINT = 0x54, + ANIM_ATTACK1HPIERCE = 0x55, + ANIM_ATTACK2HLOOSEPIERCE = 0x56, + ANIM_ATTACKOFF = 0x57, + ANIM_ATTACKOFFPIERCE = 0x58, + ANIM_SHEATHE = 0x59, + ANIM_HIPSHEATHE = 0x5A, + ANIM_MOUNT = 0x5B, + ANIM_RUN_LEANRIGHT = 0x5C, + ANIM_RUN_LEANLEFT = 0x5D, + ANIM_MOUNT_SPECIAL = 0x5E, + ANIM_KICK = 0x5F, + ANIM_SITDOWN = 0x60, + ANIM_SITTING = 0x61, + ANIM_SITUP = 0x62, + ANIM_SLEEPDOWN = 0x63, + ANIM_SLEEPING = 0x64, + ANIM_SLEEPUP = 0x65, + ANIM_SITCHAIRLOW = 0x66, + ANIM_SITCHAIRMEDIUM = 0x67, + ANIM_SITCHAIRHIGH = 0x68, + ANIM_LOADBOW = 0x69, + ANIM_LOADRIFLE = 0x6A, + ANIM_ATTACKTHROWN = 0x6B, + ANIM_READYTHROWN = 0x6C, + ANIM_HOLDBOW = 0x6D, + ANIM_HOLDRIFLE = 0x6E, + ANIM_HOLDTHROWN = 0x6F, + ANIM_LOADTHROWN = 0x70, + ANIM_EMOTE_SALUTE = 0x71, + ANIM_KNEELDOWN = 0x72, + ANIM_KNEELING = 0x73, + ANIM_KNEELUP = 0x74, + ANIM_ATTACKUNARMEDOFF = 0x75, + ANIM_SPECIALUNARMED = 0x76, + ANIM_STEALTHWALK = 0x77, + ANIM_STEALTHSTAND = 0x78, + ANIM_KNOCKDOWN = 0x79, + ANIM_EATING = 0x7A, + ANIM_USESTANDINGLOOP = 0x7B, + ANIM_CHANNELCASTDIRECTED = 0x7C, + ANIM_CHANNELCASTOMNI = 0x7D, + ANIM_WHIRLWIND = 0x7E, + ANIM_BIRTH = 0x7F, + ANIM_USESTANDINGSTART = 0x80, + ANIM_USESTANDINGEND = 0x81, + ANIM_HOWL = 0x82, + ANIM_DROWN = 0x83, + ANIM_DROWNED = 0x84, + ANIM_FISHINGCAST = 0x85, + ANIM_FISHINGLOOP = 0x86, + ANIM_FLY = 0x87, + ANIM_EMOTE_WORK_NO_SHEATHE = 0x88, + ANIM_EMOTE_STUN_NO_SHEATHE = 0x89, + ANIM_EMOTE_USE_STANDING_NO_SHEATHE= 0x8A, + ANIM_SPELL_SLEEP_DOWN = 0x8B, + ANIM_SPELL_KNEEL_START = 0x8C, + ANIM_SPELL_KNEEL_LOOP = 0x8D, + ANIM_SPELL_KNEEL_END = 0x8E, + ANIM_SPRINT = 0x8F, + ANIM_IN_FIGHT = 0x90, + + ANIM_GAMEOBJ_SPAWN = 145, + ANIM_GAMEOBJ_CLOSE = 146, + ANIM_GAMEOBJ_CLOSED = 147, + ANIM_GAMEOBJ_OPEN = 148, + ANIM_GAMEOBJ_OPENED = 149, + ANIM_GAMEOBJ_DESTROY = 150, + ANIM_GAMEOBJ_DESTROYED = 151, + ANIM_GAMEOBJ_REBUILD = 152, + ANIM_GAMEOBJ_CUSTOM0 = 153, + ANIM_GAMEOBJ_CUSTOM1 = 154, + ANIM_GAMEOBJ_CUSTOM2 = 155, + ANIM_GAMEOBJ_CUSTOM3 = 156, + ANIM_GAMEOBJ_DESPAWN = 157, + ANIM_HOLD = 158, + ANIM_DECAY = 159, + ANIM_BOWPULL = 160, + ANIM_BOWRELEASE = 161, + ANIM_SHIPSTART = 162, + ANIM_SHIPMOVEING = 163, + ANIM_SHIPSTOP = 164, + ANIM_GROUPARROW = 165, + ANIM_ARROW = 166, + ANIM_CORPSEARROW = 167, + ANIM_GUIDEARROW = 168, + ANIM_SWAY = 169, + ANIM_DRUIDCATPOUNCE = 170, + ANIM_DRUIDCATRIP = 171, + ANIM_DRUIDCATRAKE = 172, + ANIM_DRUIDCATRAVAGE = 173, + ANIM_DRUIDCATCLAW = 174, + ANIM_DRUIDCATCOWER = 175, + ANIM_DRUIDBEARSWIPE = 176, + ANIM_DRUIDBEARBITE = 177, + ANIM_DRUIDBEARMAUL = 178, + ANIM_DRUIDBEARBASH = 179, + ANIM_DRAGONTAIL = 180, + ANIM_DRAGONSTOMP = 181, + ANIM_DRAGONSPIT = 182, + ANIM_DRAGONSPITHOVER = 183, + ANIM_DRAGONSPITFLY = 184, + ANIM_EMOTEYES = 185, + ANIM_EMOTENO = 186, + ANIM_JUMPLANDRUN = 187, + ANIM_LOOTHOLD = 188, + ANIM_LOOTUP = 189, + ANIM_STANDHIGH = 190, + ANIM_IMPACT = 191, + ANIM_LIFTOFF = 192, + ANIM_HOVER = 193, + ANIM_SUCCUBUSENTICE = 194, + ANIM_EMOTETRAIN = 195, + ANIM_EMOTEDEAD = 196, + ANIM_EMOTEDANCEONCE = 197, + ANIM_DEFLECT = 198, + ANIM_EMOTEEATNOSHEATHE = 199, + ANIM_LAND = 200, + ANIM_SUBMERGE = 201, + ANIM_SUBMERGED = 202, + ANIM_CANNIBALIZE = 203, + ANIM_ARROWBIRTH = 204, + ANIM_GROURARROWBIRTH = 205, + ANIM_CORPSEARROWBIRTH = 206, + ANIM_GUIDEARROWBIRTH = 207 +}; -#define SLOT_HEAD 0 -#define SLOT_NECK 1 -#define SLOT_SHOULDERS 2 -#define SLOT_SHIRT 3 -#define SLOT_CHEST 4 -#define SLOT_WAIST 5 -#define SLOT_LEGS 6 -#define SLOT_FEET 7 -#define SLOT_WRISTS 8 -#define SLOT_HANDS 9 -#define SLOT_FINGER1 10 -#define SLOT_FINGER2 11 -#define SLOT_TRINKET1 12 -#define SLOT_TRINKET2 13 -#define SLOT_BACK 14 -#define SLOT_MAIN_HAND 15 -#define SLOT_OFF_HAND 16 -#define SLOT_RANGED 17 -#define SLOT_TABARD 18 -#define SLOT_EMPTY 19 +enum LockType +{ + LOCKTYPE_PICKLOCK = 1, + LOCKTYPE_HERBALISM = 2, + LOCKTYPE_MINING = 3, + LOCKTYPE_DISARM_TRAP = 4, + LOCKTYPE_OPEN = 5, + LOCKTYPE_TREASURE = 6, + LOCKTYPE_CALCIFIED_ELVEN_GEMS = 7, + LOCKTYPE_CLOSE = 8, + LOCKTYPE_ARM_TRAP = 9, + LOCKTYPE_QUICK_OPEN = 10, + LOCKTYPE_QUICK_CLOSE = 11, + LOCKTYPE_OPEN_TINKERING = 12, + LOCKTYPE_OPEN_KNEELING = 13, + LOCKTYPE_OPEN_ATTACKING = 14, + LOCKTYPE_GAHZRIDIAN = 15, + LOCKTYPE_BLASTING = 16, + LOCKTYPE_SLOW_OPEN = 17, + LOCKTYPE_SLOW_CLOSE = 18, + LOCKTYPE_FISHING = 19 +}; -#define LANG_GLOBAL 0 -#define LANG_UNIVERSAL 0 -#define LANG_ORCISH 1 -#define LANG_DARNASSIAN 2 -#define LANG_TAURAHE 3 -#define LANG_DWARVISH 6 -#define LANG_COMMON 7 -#define LANG_DEMONIC 8 -#define LANG_TITAN 9 -#define LANG_THELASSIAN 10 -#define LANG_DRACONIC 11 -#define LANG_KALIMAG 12 -#define LANG_GNOMISH 13 -#define LANG_TROLL 14 -#define LANG_GUTTERSPEAK 33 - -// Spell Effects - -#define SPELL_EFFECT_INSTAKILL 1 -#define SPELL_EFFECT_SCHOOL_DAMAGE 2 -#define SPELL_EFFECT_DUMMY 3 -#define SPELL_EFFECT_PORTAL_TELEPORT 4 -#define SPELL_EFFECT_TELEPORT_UNITS 5 -#define SPELL_EFFECT_APPLY_AURA 6 -#define SPELL_EFFECT_ENVIRONMENTAL_DAMAGE 7 -#define SPELL_EFFECT_MANA_DRAIN 8 -#define SPELL_EFFECT_HEALTH_LEECH 9 -#define SPELL_EFFECT_HEAL 10 -#define SPELL_EFFECT_BIND 11 -#define SPELL_EFFECT_PORTAL 12 -#define SPELL_EFFECT_RITUAL_BASE 13 -#define SPELL_EFFECT_RITUAL_SPECIALIZE 14 -#define SPELL_EFFECT_RITUAL_ACTIVATE_PORTAL 15 -#define SPELL_EFFECT_QUEST_COMPLETE 16 -#define SPELL_EFFECT_WEAPON_DAMAGE_NOSCHOOL 17 -#define SPELL_EFFECT_RESURRECT 18 -#define SPELL_EFFECT_ADD_EXTRA_ATTACKS 19 -#define SPELL_EFFECT_DODGE 20 -#define SPELL_EFFECT_EVADE 21 -#define SPELL_EFFECT_PARRY 22 -#define SPELL_EFFECT_BLOCK 23 -#define SPELL_EFFECT_CREATE_ITEM 24 -#define SPELL_EFFECT_WEAPON 25 -#define SPELL_EFFECT_DEFENSE 26 -#define SPELL_EFFECT_PERSISTENT_AREA_AURA 27 -#define SPELL_EFFECT_SUMMON 28 -#define SPELL_EFFECT_LEAP 29 -#define SPELL_EFFECT_ENERGIZE 30 -#define SPELL_EFFECT_WEAPON_PERCENT_DAMAGE 31 -#define SPELL_EFFECT_TRIGGER_MISSILE 32 -#define SPELL_EFFECT_OPEN_LOCK 33 -#define SPELL_EFFECT_SUMMON_CHANGE_ITEM 34 -#define SPELL_EFFECT_APPLY_AREA_AURA 35 -#define SPELL_EFFECT_LEARN_SPELL 36 -#define SPELL_EFFECT_SPELL_DEFENSE 37 -#define SPELL_EFFECT_DISPEL 38 -#define SPELL_EFFECT_LANGUAGE 39 -#define SPELL_EFFECT_DUAL_WIELD 40 -#define SPELL_EFFECT_SUMMON_WILD 41 -#define SPELL_EFFECT_SUMMON_GUARDIAN 42 -#define SPELL_EFFECT_TELEPORT_UNITS_FACE_CASTER 43 -#define SPELL_EFFECT_SKILL_STEP 44 -#define SPELL_EFFECT_UNDEFINED_45 45 -#define SPELL_EFFECT_SPAWN 46 -#define SPELL_EFFECT_TRADE_SKILL 47 -#define SPELL_EFFECT_STEALTH 48 -#define SPELL_EFFECT_DETECT 49 -//#define SPELL_EFFECT_SUMMON_OBJECT 50 -#define SPELL_EFFECT_TRANS_DOOR 50 -#define SPELL_EFFECT_FORCE_CRITICAL_HIT 51 -#define SPELL_EFFECT_GUARANTEE_HIT 52 -#define SPELL_EFFECT_ENCHANT_ITEM 53 -#define SPELL_EFFECT_ENCHANT_ITEM_TEMPORARY 54 -#define SPELL_EFFECT_TAMECREATURE 55 -#define SPELL_EFFECT_SUMMON_PET 56 -#define SPELL_EFFECT_LEARN_PET_SPELL 57 -#define SPELL_EFFECT_WEAPON_DAMAGE 58 -#define SPELL_EFFECT_OPEN_LOCK_ITEM 59 -#define SPELL_EFFECT_PROFICIENCY 60 -#define SPELL_EFFECT_SEND_EVENT 61 -#define SPELL_EFFECT_POWER_BURN 62 -#define SPELL_EFFECT_THREAT 63 -#define SPELL_EFFECT_TRIGGER_SPELL 64 -#define SPELL_EFFECT_HEALTH_FUNNEL 65 -#define SPELL_EFFECT_POWER_FUNNEL 66 -#define SPELL_EFFECT_HEAL_MAX_HEALTH 67 -#define SPELL_EFFECT_INTERRUPT_CAST 68 -#define SPELL_EFFECT_DISTRACT 69 -#define SPELL_EFFECT_PULL 70 -#define SPELL_EFFECT_PICKPOCKET 71 -#define SPELL_EFFECT_ADD_FARSIGHT 72 -#define SPELL_EFFECT_SUMMON_POSSESSED 73 -#define SPELL_EFFECT_SUMMON_TOTEM 74 -#define SPELL_EFFECT_HEAL_MECHANICAL 75 -#define SPELL_EFFECT_SUMMON_OBJECT_WILD 76 -#define SPELL_EFFECT_SCRIPT_EFFECT 77 -#define SPELL_EFFECT_ATTACK 78 -#define SPELL_EFFECT_SANCTUARY 79 -#define SPELL_EFFECT_ADD_COMBO_POINTS 80 -#define SPELL_EFFECT_CREATE_HOUSE 81 -#define SPELL_EFFECT_BIND_SIGHT 82 -#define SPELL_EFFECT_DUEL 83 -#define SPELL_EFFECT_STUCK 84 -#define SPELL_EFFECT_SUMMON_PLAYER 85 -#define SPELL_EFFECT_ACTIVATE_OBJECT 86 -#define SPELL_EFFECT_SUMMON_TOTEM_SLOT1 87 -#define SPELL_EFFECT_SUMMON_TOTEM_SLOT2 88 -#define SPELL_EFFECT_SUMMON_TOTEM_SLOT3 89 -#define SPELL_EFFECT_SUMMON_TOTEM_SLOT4 90 -#define SPELL_EFFECT_THREAT_ALL 91 -#define SPELL_EFFECT_ENCHANT_HELD_ITEM 92 -#define SPELL_EFFECT_SUMMON_PHANTASM 93 -#define SPELL_EFFECT_SELF_RESURRECT 94 -#define SPELL_EFFECT_SKINNING 95 -#define SPELL_EFFECT_CHARGE 96 -#define SPELL_EFFECT_SUMMON_CRITTER 97 -#define SPELL_EFFECT_KNOCK_BACK 98 -#define SPELL_EFFECT_DISENCHANT 99 -#define SPELL_EFFECT_INEBRIATE 100 -#define SPELL_EFFECT_FEED_PET 101 -#define SPELL_EFFECT_DISMISS_PET 102 -#define SPELL_EFFECT_REPUTATION 103 -#define SPELL_EFFECT_SUMMON_OBJECT_SLOT1 104 -#define SPELL_EFFECT_SUMMON_OBJECT_SLOT2 105 -#define SPELL_EFFECT_SUMMON_OBJECT_SLOT3 106 -#define SPELL_EFFECT_SUMMON_OBJECT_SLOT4 107 -#define SPELL_EFFECT_DISPEL_MECHANIC 108 -#define SPELL_EFFECT_SUMMON_DEAD_PET 109 -#define SPELL_EFFECT_DESTROY_ALL_TOTEMS 110 -#define SPELL_EFFECT_DURABILITY_DAMAGE 111 -#define SPELL_EFFECT_SUMMON_DEMON 112 -#define SPELL_EFFECT_RESURRECT_NEW 113 -#define SPELL_EFFECT_ATTACK_ME 114 -#define SPELL_EFFECT_DURABILITY_DAMAGE_PCT 115 -#define SPELL_EFFECT_SKIN_PLAYER_CORPSE 116 -#define SPELL_EFFECT_SPIRIT_HEAL 117 -#define SPELL_EFFECT_SKILL 118 -#define SPELL_EFFECT_APPLY_AURA_NEW 119 -#define SPELL_EFFECT_TELEPORT_GRAVEYARD 120 -#define SPELL_EFFECT_NORMALIZED_WEAPON_DMG 121 -#define TOTAL_SPELL_EFFECTS 122 - -#define STATE_STANDING 0 -#define STATE_SITTING 1 -#define STATE_SITTINGCHAIR 2 -#define STATE_SLEEPING 3 -#define STATE_SITTINGCHAIRLOW 4 -#define STATE_SITTINGCHAIRMEDIUM 5 -#define STATE_SITTINGCHAIRHIGH 6 -#define STATE_DEAD 7 -#define STATE_KNEEL 8 - -#define GAMEOBJECT_TYPE_DOOR 0 -#define GAMEOBJECT_TYPE_BUTTON 1 -#define GAMEOBJECT_TYPE_QUESTGIVER 2 -#define GAMEOBJECT_TYPE_CHEST 3 -#define GAMEOBJECT_TYPE_BINDER 4 -#define GAMEOBJECT_TYPE_GENERIC 5 -#define GAMEOBJECT_TYPE_TRAP 6 -#define GAMEOBJECT_TYPE_CHAIR 7 -#define GAMEOBJECT_TYPE_SPELL_FOCUS 8 -#define GAMEOBJECT_TYPE_TEXT 9 -#define GAMEOBJECT_TYPE_GOOBER 10 -#define GAMEOBJECT_TYPE_TRANSPORT 11 -#define GAMEOBJECT_TYPE_AREADAMAGE 12 -#define GAMEOBJECT_TYPE_CAMERA 13 -#define GAMEOBJECT_TYPE_MAP_OBJECT 14 -#define GAMEOBJECT_TYPE_MO_TRANSPORT 15 -#define GAMEOBJECT_TYPE_DUEL_ARBITER 16 -#define GAMEOBJECT_TYPE_FISHINGNODE 17 -#define GAMEOBJECT_TYPE_RITUAL 18 -#define GAMEOBJECT_TYPE_MAILBOX 19 -#define GAMEOBJECT_TYPE_AUCTIONHOUSE 20 -#define GAMEOBJECT_TYPE_GUARDPOST 21 -#define GAMEOBJECT_TYPE_SPELLCASTER 22 -#define GAMEOBJECT_TYPE_MEETINGSTONE 23 -#define GAMEOBJECT_TYPE_FLAGSTAND 24 -#define GAMEOBJECT_TYPE_FISHINGHOLE 25 -#define GAMEOBJECT_TYPE_FLAGDROP 26 -// Custom gametypes, can create problems at sending to client -#define GAMEOBJECT_TYPE_CUSTOM_TELEPORTER 27 - -#define TEXTEMOTE_AGREE 1 -#define TEXTEMOTE_AMAZE 2 -#define TEXTEMOTE_ANGRY 3 -#define TEXTEMOTE_APOLOGIZE 4 -#define TEXTEMOTE_APPLAUD 5 -#define TEXTEMOTE_BASHFUL 6 -#define TEXTEMOTE_BECKON 7 -#define TEXTEMOTE_BEG 8 -#define TEXTEMOTE_BITE 9 -#define TEXTEMOTE_BLEED 10 -#define TEXTEMOTE_BLINK 11 -#define TEXTEMOTE_BLUSH 12 -#define TEXTEMOTE_BONK 13 -#define TEXTEMOTE_BORED 14 -#define TEXTEMOTE_BOUNCE 15 -#define TEXTEMOTE_BRB 16 -#define TEXTEMOTE_BOW 17 -#define TEXTEMOTE_BURP 18 -#define TEXTEMOTE_BYE 19 -#define TEXTEMOTE_CACKLE 20 -#define TEXTEMOTE_CHEER 21 -#define TEXTEMOTE_CHICKEN 22 -#define TEXTEMOTE_CHUCKLE 23 -#define TEXTEMOTE_CLAP 24 -#define TEXTEMOTE_CONFUSED 25 -#define TEXTEMOTE_CONGRATULATE 26 -#define TEXTEMOTE_COUGH 27 -#define TEXTEMOTE_COWER 28 -#define TEXTEMOTE_CRACK 29 -#define TEXTEMOTE_CRINGE 30 -#define TEXTEMOTE_CRY 31 -#define TEXTEMOTE_CURIOUS 32 -#define TEXTEMOTE_CURTSEY 33 -#define TEXTEMOTE_DANCE 34 -#define TEXTEMOTE_DRINK 35 -#define TEXTEMOTE_DROOL 36 -#define TEXTEMOTE_EAT 37 -#define TEXTEMOTE_EYE 38 -#define TEXTEMOTE_FART 39 -#define TEXTEMOTE_FIDGET 40 -#define TEXTEMOTE_FLEX 41 -#define TEXTEMOTE_FROWN 42 -#define TEXTEMOTE_GASP 43 -#define TEXTEMOTE_GAZE 44 -#define TEXTEMOTE_GIGGLE 45 -#define TEXTEMOTE_GLARE 46 -#define TEXTEMOTE_GLOAT 47 -#define TEXTEMOTE_GREET 48 -#define TEXTEMOTE_GRIN 49 -#define TEXTEMOTE_GROAN 50 -#define TEXTEMOTE_GROVEL 51 -#define TEXTEMOTE_GUFFAW 52 -#define TEXTEMOTE_HAIL 53 -#define TEXTEMOTE_HAPPY 54 -#define TEXTEMOTE_HELLO 55 -#define TEXTEMOTE_HUG 56 -#define TEXTEMOTE_HUNGRY 57 -#define TEXTEMOTE_KISS 58 -#define TEXTEMOTE_KNEEL 59 -#define TEXTEMOTE_LAUGH 60 -#define TEXTEMOTE_LAYDOWN 61 -#define TEXTEMOTE_MESSAGE 62 -#define TEXTEMOTE_MOAN 63 -#define TEXTEMOTE_MOON 64 -#define TEXTEMOTE_MOURN 65 -#define TEXTEMOTE_NO 66 -#define TEXTEMOTE_NOD 67 -#define TEXTEMOTE_NOSEPICK 68 -#define TEXTEMOTE_PANIC 69 -#define TEXTEMOTE_PEER 70 -#define TEXTEMOTE_PLEAD 71 -#define TEXTEMOTE_POINT 72 -#define TEXTEMOTE_POKE 73 -#define TEXTEMOTE_PRAY 74 -#define TEXTEMOTE_ROAR 75 -#define TEXTEMOTE_ROFL 76 -#define TEXTEMOTE_RUDE 77 -#define TEXTEMOTE_SALUTE 78 -#define TEXTEMOTE_SCRATCH 79 -#define TEXTEMOTE_SEXY 80 -#define TEXTEMOTE_SHAKE 81 -#define TEXTEMOTE_SHOUT 82 -#define TEXTEMOTE_SHRUG 83 -#define TEXTEMOTE_SHY 84 -#define TEXTEMOTE_SIGH 85 -#define TEXTEMOTE_SIT 86 -#define TEXTEMOTE_SLEEP 87 -#define TEXTEMOTE_SNARL 88 -#define TEXTEMOTE_SPIT 89 -#define TEXTEMOTE_STARE 90 -#define TEXTEMOTE_SURPRISED 91 -#define TEXTEMOTE_SURRENDER 92 -#define TEXTEMOTE_TALK 93 -#define TEXTEMOTE_TALKEX 94 -#define TEXTEMOTE_TALKQ 95 -#define TEXTEMOTE_TAP 96 -#define TEXTEMOTE_THANK 97 -#define TEXTEMOTE_THREATEN 98 -#define TEXTEMOTE_TIRED 99 -#define TEXTEMOTE_VICTORY 100 -#define TEXTEMOTE_WAVE 101 -#define TEXTEMOTE_WELCOME 102 -#define TEXTEMOTE_WHINE 103 -#define TEXTEMOTE_WHISTLE 104 -#define TEXTEMOTE_WORK 105 -#define TEXTEMOTE_YAWN 106 -#define TEXTEMOTE_BOGGLE 107 -#define TEXTEMOTE_CALM 108 -#define TEXTEMOTE_COLD 109 -#define TEXTEMOTE_COMFORT 110 -#define TEXTEMOTE_CUDDLE 111 -#define TEXTEMOTE_DUCK 112 -#define TEXTEMOTE_INSULT 113 -#define TEXTEMOTE_INTRODUCE 114 -#define TEXTEMOTE_JK 115 -#define TEXTEMOTE_LICK 116 -#define TEXTEMOTE_LISTEN 117 -#define TEXTEMOTE_LOST 118 -#define TEXTEMOTE_MOCK 119 -#define TEXTEMOTE_PONDER 120 -#define TEXTEMOTE_POUNCE 121 -#define TEXTEMOTE_PRAISE 122 -#define TEXTEMOTE_PURR 123 -#define TEXTEMOTE_PUZZLE 124 -#define TEXTEMOTE_RAISE 125 -#define TEXTEMOTE_READY 126 -#define TEXTEMOTE_SHIMMY 127 -#define TEXTEMOTE_SHIVER 128 -#define TEXTEMOTE_SHOO 129 -#define TEXTEMOTE_SLAP 130 -#define TEXTEMOTE_SMIRK 131 -#define TEXTEMOTE_SNIFF 132 -#define TEXTEMOTE_SNUB 133 -#define TEXTEMOTE_SOOTHE 134 -#define TEXTEMOTE_STINK 135 -#define TEXTEMOTE_TAUNT 136 -#define TEXTEMOTE_TEASE 137 -#define TEXTEMOTE_THIRSTY 138 -#define TEXTEMOTE_VETO 139 -#define TEXTEMOTE_SNICKER 140 -#define TEXTEMOTE_STAND 141 -#define TEXTEMOTE_TICKLE 142 -#define TEXTEMOTE_VIOLIN 143 -#define TEXTEMOTE_SMILE 163 -#define TEXTEMOTE_RASP 183 -#define TEXTEMOTE_PITY 203 -#define TEXTEMOTE_GROWL 204 -#define TEXTEMOTE_BARK 205 -#define TEXTEMOTE_SCARED 223 -#define TEXTEMOTE_FLOP 224 -#define TEXTEMOTE_LOVE 225 -#define TEXTEMOTE_MOO 226 -#define TEXTEMOTE_COMMEND 243 -#define TEXTEMOTE_JOKE 329 - -#define EMOTE_ONESHOT_NONE 0 -#define EMOTE_ONESHOT_TALK 1 -#define EMOTE_ONESHOT_BOW 2 -#define EMOTE_ONESHOT_WAVE 3 -#define EMOTE_ONESHOT_CHEER 4 -#define EMOTE_ONESHOT_EXCLAMATION 5 -#define EMOTE_ONESHOT_QUESTION 6 -#define EMOTE_ONESHOT_EAT 7 -#define EMOTE_STATE_DANCE 10 -#define EMOTE_ONESHOT_LAUGH 11 -#define EMOTE_STATE_SLEEP 12 -#define EMOTE_STATE_SIT 13 -#define EMOTE_ONESHOT_RUDE 14 -#define EMOTE_ONESHOT_ROAR 15 -#define EMOTE_ONESHOT_KNEEL 16 -#define EMOTE_ONESHOT_KISS 17 -#define EMOTE_ONESHOT_CRY 18 -#define EMOTE_ONESHOT_CHICKEN 19 -#define EMOTE_ONESHOT_BEG 20 -#define EMOTE_ONESHOT_APPLAUD 21 -#define EMOTE_ONESHOT_SHOUT 22 -#define EMOTE_ONESHOT_FLEX 23 -#define EMOTE_ONESHOT_SHY 24 -#define EMOTE_ONESHOT_POINT 25 -#define EMOTE_STATE_STAND 26 -#define EMOTE_STATE_READYUNARMED 27 -#define EMOTE_STATE_WORK 28 -#define EMOTE_STATE_POINT 29 -#define EMOTE_STATE_NONE 30 -#define EMOTE_ONESHOT_WOUND 33 -#define EMOTE_ONESHOT_WOUNDCRITICAL 34 -#define EMOTE_ONESHOT_ATTACKUNARMED 35 -#define EMOTE_ONESHOT_ATTACK1H 36 -#define EMOTE_ONESHOT_ATTACK2HTIGHT 37 -#define EMOTE_ONESHOT_ATTACK2HLOOSE 38 -#define EMOTE_ONESHOT_PARRYUNARMED 39 -#define EMOTE_ONESHOT_PARRYSHIELD 43 -#define EMOTE_ONESHOT_READYUNARMED 44 -#define EMOTE_ONESHOT_READY1H 45 -#define EMOTE_ONESHOT_READYBOW 48 -#define EMOTE_ONESHOT_SPELLPRECAST 50 -#define EMOTE_ONESHOT_SPELLCAST 51 -#define EMOTE_ONESHOT_BATTLEROAR 53 -#define EMOTE_ONESHOT_SPECIALATTACK1H 54 -#define EMOTE_ONESHOT_KICK 60 -#define EMOTE_ONESHOT_ATTACKTHROWN 61 -#define EMOTE_STATE_STUN 64 -#define EMOTE_STATE_DEAD 65 -#define EMOTE_ONESHOT_SALUTE 66 -#define EMOTE_STATE_KNEEL 68 -#define EMOTE_STATE_USESTANDING 69 -#define EMOTE_ONESHOT_WAVE_NOSHEATHE 70 -#define EMOTE_ONESHOT_CHEER_NOSHEATHE 71 -#define EMOTE_ONESHOT_EAT_NOSHEATHE 92 -#define EMOTE_STATE_STUN_NOSHEATHE 93 -#define EMOTE_ONESHOT_DANCE 94 -#define EMOTE_ONESHOT_SALUTE_NOSHEATH 113 -#define EMOTE_STATE_USESTANDING_NOSHEATHE 133 -#define EMOTE_ONESHOT_LAUGH_NOSHEATHE 153 -#define EMOTE_STATE_WORK_NOSHEATHE 173 -#define EMOTE_STATE_SPELLPRECAST 193 -#define EMOTE_ONESHOT_READYRIFLE 213 -#define EMOTE_STATE_READYRIFLE 214 -#define EMOTE_STATE_WORK_NOSHEATHE_MINING 233 -#define EMOTE_STATE_WORK_NOSHEATHE_CHOPWOOD 234 -#define EMOTE_zzOLDONESHOT_LIFTOFF 253 -#define EMOTE_ONESHOT_LIFTOFF 254 -#define EMOTE_ONESHOT_YES 273 -#define EMOTE_ONESHOT_NO 274 -#define EMOTE_ONESHOT_TRAIN 275 -#define EMOTE_ONESHOT_LAND 293 -#define EMOTE_STATE_READY1H 333 -#define EMOTE_STATE_AT_EASE 313 -#define EMOTE_STATE_SPELLKNEELSTART 353 -#define EMOTE_STATE_SUBMERGED 373 -#define EMOTE_ONESHOT_SUBMERGE 374 - -#define ANIM_STAND 0x0 -#define ANIM_DEATH 0x1 -#define ANIM_SPELL 0x2 -#define ANIM_STOP 0x3 -#define ANIM_WALK 0x4 -#define ANIM_RUN 0x5 -#define ANIM_DEAD 0x6 -#define ANIM_RISE 0x7 -#define ANIM_STANDWOUND 0x8 -#define ANIM_COMBATWOUND 0x9 -#define ANIM_COMBATCRITICAL 0xA -#define ANIM_SHUFFLE_LEFT 0xB -#define ANIM_SHUFFLE_RIGHT 0xC -#define ANIM_WALK_BACKWARDS 0xD -#define ANIM_STUN 0xE -#define ANIM_HANDS_CLOSED 0xF -#define ANIM_ATTACKUNARMED 0x10 -#define ANIM_ATTACK1H 0x11 -#define ANIM_ATTACK2HTIGHT 0x12 -#define ANIM_ATTACK2HLOOSE 0x13 -#define ANIM_PARRYUNARMED 0x14 -#define ANIM_PARRY1H 0x15 -#define ANIM_PARRY2HTIGHT 0x16 -#define ANIM_PARRY2HLOOSE 0x17 -#define ANIM_PARRYSHIELD 0x18 -#define ANIM_READYUNARMED 0x19 -#define ANIM_READY1H 0x1A -#define ANIM_READY2HTIGHT 0x1B -#define ANIM_READY2HLOOSE 0x1C -#define ANIM_READYBOW 0x1D -#define ANIM_DODGE 0x1E -#define ANIM_SPELLPRECAST 0x1F -#define ANIM_SPELLCAST 0x20 -#define ANIM_SPELLCASTAREA 0x21 -#define ANIM_NPCWELCOME 0x22 -#define ANIM_NPCGOODBYE 0x23 -#define ANIM_BLOCK 0x24 -#define ANIM_JUMPSTART 0x25 -#define ANIM_JUMP 0x26 -#define ANIM_JUMPEND 0x27 -#define ANIM_FALL 0x28 -#define ANIM_SWIMIDLE 0x29 -#define ANIM_SWIM 0x2A -#define ANIM_SWIM_LEFT 0x2B -#define ANIM_SWIM_RIGHT 0x2C -#define ANIM_SWIM_BACKWARDS 0x2D -#define ANIM_ATTACKBOW 0x2E -#define ANIM_FIREBOW 0x2F -#define ANIM_READYRIFLE 0x30 -#define ANIM_ATTACKRIFLE 0x31 -#define ANIM_LOOT 0x32 -#define ANIM_SPELL_PRECAST_DIRECTED 0x33 -#define ANIM_SPELL_PRECAST_OMNI 0x34 -#define ANIM_SPELL_CAST_DIRECTED 0x35 -#define ANIM_SPELL_CAST_OMNI 0x36 -#define ANIM_SPELL_BATTLEROAR 0x37 -#define ANIM_SPELL_READYABILITY 0x38 -#define ANIM_SPELL_SPECIAL1H 0x39 -#define ANIM_SPELL_SPECIAL2H 0x3A -#define ANIM_SPELL_SHIELDBASH 0x3B -#define ANIM_EMOTE_TALK 0x3C -#define ANIM_EMOTE_EAT 0x3D -#define ANIM_EMOTE_WORK 0x3E -#define ANIM_EMOTE_USE_STANDING 0x3F -#define ANIM_EMOTE_EXCLAMATION 0x40 -#define ANIM_EMOTE_QUESTION 0x41 -#define ANIM_EMOTE_BOW 0x42 -#define ANIM_EMOTE_WAVE 0x43 -#define ANIM_EMOTE_CHEER 0x44 -#define ANIM_EMOTE_DANCE 0x45 -#define ANIM_EMOTE_LAUGH 0x46 -#define ANIM_EMOTE_SLEEP 0x47 -#define ANIM_EMOTE_SIT_GROUND 0x48 -#define ANIM_EMOTE_RUDE 0x49 -#define ANIM_EMOTE_ROAR 0x4A -#define ANIM_EMOTE_KNEEL 0x4B -#define ANIM_EMOTE_KISS 0x4C -#define ANIM_EMOTE_CRY 0x4D -#define ANIM_EMOTE_CHICKEN 0x4E -#define ANIM_EMOTE_BEG 0x4F -#define ANIM_EMOTE_APPLAUD 0x50 -#define ANIM_EMOTE_SHOUT 0x51 -#define ANIM_EMOTE_FLEX 0x52 -#define ANIM_EMOTE_SHY 0x53 -#define ANIM_EMOTE_POINT 0x54 -#define ANIM_ATTACK1HPIERCE 0x55 -#define ANIM_ATTACK2HLOOSEPIERCE 0x56 -#define ANIM_ATTACKOFF 0x57 -#define ANIM_ATTACKOFFPIERCE 0x58 -#define ANIM_SHEATHE 0x59 -#define ANIM_HIPSHEATHE 0x5A -#define ANIM_MOUNT 0x5B -#define ANIM_RUN_LEANRIGHT 0x5C -#define ANIM_RUN_LEANLEFT 0x5D -#define ANIM_MOUNT_SPECIAL 0x5E -#define ANIM_KICK 0x5F -#define ANIM_SITDOWN 0x60 -#define ANIM_SITTING 0x61 -#define ANIM_SITUP 0x62 -#define ANIM_SLEEPDOWN 0x63 -#define ANIM_SLEEPING 0x64 -#define ANIM_SLEEPUP 0x65 -#define ANIM_SITCHAIRLOW 0x66 -#define ANIM_SITCHAIRMEDIUM 0x67 -#define ANIM_SITCHAIRHIGH 0x68 -#define ANIM_LOADBOW 0x69 -#define ANIM_LOADRIFLE 0x6A -#define ANIM_ATTACKTHROWN 0x6B -#define ANIM_READYTHROWN 0x6C -#define ANIM_HOLDBOW 0x6D -#define ANIM_HOLDRIFLE 0x6E -#define ANIM_HOLDTHROWN 0x6F -#define ANIM_LOADTHROWN 0x70 -#define ANIM_EMOTE_SALUTE 0x71 -#define ANIM_KNEELDOWN 0x72 -#define ANIM_KNEELING 0x73 -#define ANIM_KNEELUP 0x74 -#define ANIM_ATTACKUNARMEDOFF 0x75 -#define ANIM_SPECIALUNARMED 0x76 -#define ANIM_STEALTHWALK 0x77 -#define ANIM_STEALTHSTAND 0x78 -#define ANIM_KNOCKDOWN 0x79 -#define ANIM_EATING 0x7A -#define ANIM_USESTANDINGLOOP 0x7B -#define ANIM_CHANNELCASTDIRECTED 0x7C -#define ANIM_CHANNELCASTOMNI 0x7D -#define ANIM_WHIRLWIND 0x7E -#define ANIM_BIRTH 0x7F -#define ANIM_USESTANDINGSTART 0x80 -#define ANIM_USESTANDINGEND 0x81 -#define ANIM_HOWL 0x82 -#define ANIM_DROWN 0x83 -#define ANIM_DROWNED 0x84 -#define ANIM_FISHINGCAST 0x85 -#define ANIM_FISHINGLOOP 0x86 - -#define FIRST_GAMEOBJECTANIMATION 0x87 -#define ANIM_GAMEOBJ_STAND 0 -#define ANIM_GAMEOBJ_CLOSED 1 -#define ANIM_GAMEOBJ_OPEN 2 -#define ANIM_GAMEOBJ_OPENED 3 -#define ANIM_GAMEOBJ_CLOSE 4 -#define ANIM_GAMEOBJ_DESTROY 5 -#define ANIM_GAMEOBJ_DESTROYED 6 -#define ANIM_GAMEOBJ_REBUILD 7 -#define ANIM_GAMEOBJ_CUSTOM0 8 -#define ANIM_GAMEOBJ_CUSTOM1 9 -#define ANIM_GAMEOBJ_CUSTOM2 10 -#define ANIM_GAMEOBJ_CUSTOM3 11 - -#define FIRST_EFFECTANIMATION 0x93 -#define ANIM_EFFECT_STAND 0 -#define ANIM_EFFECT_HOLD 1 -#define ANIM_EFFECT_DECAY 2 - -#define FIRST_ITEMANIMATION 0x96 -#define ANIM_ITEM_STAND 0 -#define ANIM_ITEM_INFLIGHT 1 -#define ANIM_ITEM_BOWPULL 2 -#define ANIM_ITEM_BOWRELEASE 3 - -#define LOCKTYPE_PICKLOCK 1 -#define LOCKTYPE_HERBALISM 2 -#define LOCKTYPE_MINING 3 -#define LOCKTYPE_DISARM_TRAP 4 -#define LOCKTYPE_OPEN 5 -#define LOCKTYPE_TREASURE 6 -#define LOCKTYPE_CALCIFIED_ELVEN_GEMS 7 -#define LOCKTYPE_CLOSE 8 -#define LOCKTYPE_ARM_TRAP 9 -#define LOCKTYPE_QUICK_OPEN 10 -#define LOCKTYPE_QUICK_CLOSE 11 -#define LOCKTYPE_OPEN_TINKERING 12 -#define LOCKTYPE_OPEN_KNEELING 13 -#define LOCKTYPE_OPEN_ATTACKING 14 -#define LOCKTYPE_GAHZRIDIAN 15 -#define LOCKTYPE_BLASTING 16 -#define LOCKTYPE_SLOW_OPEN 17 -#define LOCKTYPE_SLOW_CLOSE 18 - -#define TRAINER_TYPE_CLASS 0 -#define TRAINER_TYPE_MOUNTS 1 -#define TRAINER_TYPE_TRADESKILLS 2 -#define TRAINER_TYPE_PETS 3 +enum TrainerType +{ + TRAINER_TYPE_CLASS = 0, + TRAINER_TYPE_MOUNTS = 1, + TRAINER_TYPE_TRADESKILLS = 2, + TRAINER_TYPE_PETS = 3 +}; #define SHAPESHIFT_FORM_CAT 1 #define SHAPESHIFT_FORM_TREE 2 @@ -727,265 +922,410 @@ enum SpellSchools #define SHAPESHIFT_STEALTH 30 #define SHAPESHIFT_MOONKIN 31 -#define CREATURE_TYPE_BEAST 1 -#define CREATURE_TYPE_DRAGON 2 -#define CREATURE_TYPE_DEMON 3 -#define CREATURE_TYPE_ELEMENTAL 4 -#define CREATURE_TYPE_GIANT 5 -#define CREATURE_TYPE_UNDEAD 6 -#define CREATURE_TYPE_HUMANOID 7 -#define CREATURE_TYPE_CRITTER 8 -#define CREATURE_TYPE_MECHANICAL 9 -#define CREATURE_TYPE_UNKNOWN 10 +enum CreatureFamily +{ + CREATURE_FAMILY_WOLF = 1, + CREATURE_FAMILY_CAT = 2, + CREATURE_FAMILY_SPIDER = 3, + CREATURE_FAMILY_BEAR = 4, + CREATURE_FAMILY_BOAR = 5, + CREATURE_FAMILY_CROCILISK = 6, + CREATURE_FAMILY_CARRION_BIRD = 7, + CREATURE_FAMILY_CRAB = 8, + CREATURE_FAMILY_GORILLA = 9, + CREATURE_FAMILY_RAPTOR = 11, + CREATURE_FAMILY_TALLSTRIDER = 12, + CREATURE_FAMILY_FELHUNTER = 15, + CREATURE_FAMILY_VOIDWALKER = 16, + CREATURE_FAMILY_SUCCUBUS = 17, + CREATURE_FAMILY_DOOMGUARD = 19, + CREATURE_FAMILY_SCORPID = 20, + CREATURE_FAMILY_TURTLE = 21, + CREATURE_FAMILY_IMP = 23, + CREATURE_FAMILY_BAT = 24, + CREATURE_FAMILY_HYENA = 25, + CREATURE_FAMILY_OWL = 26, + CREATURE_FAMILY_WIND_SERPENT = 27, + CREATURE_FAMILY_REMOTE_CONTROL = 28, + CREATURE_FAMILY_FELGUARD = 29, + CREATURE_FAMILY_DRAGONHAWK = 30, + CREATURE_FAMILY_RAVAGER = 31, + CREATURE_FAMILY_WARP_STALKER = 32, + CREATURE_FAMILY_SPOREBAT = 33, + CREATURE_FAMILY_NETHER_RAY = 34, + CREATURE_FAMILY_SERPENT = 35 +}; + +enum CreatureEliteType +{ + CREATURE_ELITE_NORMAL = 0, + CREATURE_ELITE_ELITE = 1, + CREATURE_ELITE_RAREELITE = 2, + CREATURE_ELITE_WORLDBOSS = 3, + CREATURE_ELITE_RARE = 4 +}; + +enum QuestTypes +{ + QUEST_TYPE_ELITE = 1, + QUEST_TYPE_LIFE = 21, + QUEST_TYPE_PVP = 41, + QUEST_TYPE_RAID = 62, + QUEST_TYPE_DUNGEON = 81, + QUEST_TYPE_WORLD_EVENT = 82, + QUEST_TYPE_LEGENDARY = 83, + QUEST_TYPE_ESCORT = 84, + QUEST_TYPE_HEROIC = 85, + QUEST_TYPE_DAILY = 87 +}; + +enum CreatureType +{ + CREATURE_TYPE_BEAST = 1, + CREATURE_TYPE_DRAGON = 2, + CREATURE_TYPE_DEMON = 3, + CREATURE_TYPE_ELEMENTAL = 4, + CREATURE_TYPE_GIANT = 5, + CREATURE_TYPE_UNDEAD = 6, + CREATURE_TYPE_HUMANOID = 7, + CREATURE_TYPE_CRITTER = 8, + CREATURE_TYPE_MECHANICAL = 9, + CREATURE_TYPE_NOTSPECIFIED = 10, + CREATURE_TYPE_TOTEM = 11 +}; -#define CREATURE_FAMILY_WOLF 1 -#define CREATURE_FAMILY_CAT 2 -#define CREATURE_FAMILY_SPIDER 3 -#define CREATURE_FAMILY_BEAR 4 -#define CREATURE_FAMILY_BOAR 5 -#define CREATURE_FAMILY_CROCILISK 6 -#define CREATURE_FAMILY_CARRION_BIRD 7 -#define CREATURE_FAMILY_CRAB 8 -#define CREATURE_FAMILY_GORILLA 9 -#define CREATURE_FAMILY_RAPTOR 11 -#define CREATURE_FAMILY_TALLSTRIDER 12 -#define CREATURE_FAMILY_FELHUNTER 15 -#define CREATURE_FAMILY_VOIDWALKER 16 -#define CREATURE_FAMILY_SUCCUBUS 17 -#define CREATURE_FAMILY_DOOMGUARD 19 -#define CREATURE_FAMILY_SCORPID 20 -#define CREATURE_FAMILY_TURTLE 21 -#define CREATURE_FAMILY_IMP 23 -#define CREATURE_FAMILY_BAT 24 -#define CREATURE_FAMILY_HYENA 25 -#define CREATURE_FAMILY_OWL 26 -#define CREATURE_FAMILY_WIND_SERPENT 27 +enum QuestSort +{ + QUEST_SORT_EPIC = 1, + QUEST_SORT_WAILING_CAVERNS_OLD = 21, + QUEST_SORT_SEASONAL = 22, + QUEST_SORT_UNDERCITY_OLD = 23, + QUEST_SORT_HERBALISM = 24, + QUEST_SORT_SCARLET_MONASTERY_OLD= 25, + QUEST_SORT_ULDAMN_OLD = 41, + QUEST_SORT_WARLOCK = 61, + QUEST_SORT_WARRIOR = 81, + QUEST_SORT_SHAMAN = 82, + QUEST_SORT_FISHING = 101, + QUEST_SORT_BLACKSMITHING = 121, + QUEST_SORT_PALADIN = 141, + QUEST_SORT_MAGE = 161, + QUEST_SORT_ROGUE = 162, + QUEST_SORT_ALCHEMY = 181, + QUEST_SORT_LEATHERWORKING = 182, + QUEST_SORT_ENGINERING = 201, + QUEST_SORT_TREASURE_MAP = 221, + QUEST_SORT_SUNKEN_TEMPLE_OLD = 241, + QUEST_SORT_HUNTER = 261, + QUEST_SORT_PRIEST = 262, + QUEST_SORT_DRUID = 263, + QUEST_SORT_TAILORING = 264, + QUEST_SORT_SPECIAL = 284, + QUEST_SORT_COOKING = 304, + QUEST_SORT_FIRST_AID = 324, + QUEST_SORT_LEGENDARY = 344, + QUEST_SORT_DARKMOON_FAIRE = 364, + QUEST_SORT_AHN_QIRAJ_WAR = 365, + QUEST_SORT_LUNAR_FESTIVAL = 366, + QUEST_SORT_REPUTATION = 367, + QUEST_SORT_INVASION = 368, + QUEST_SORT_MIDSUMMER = 369 +}; -#define CREATURE_ELITE_NORMAL 0 -#define CREATURE_ELITE_ELITE 1 -#define CREATURE_ELITE_RAREELITE 2 -#define CREATURE_ELITE_WORLDBOSS 3 -#define CREATURE_ELITE_RARE 4 +enum SkillType +{ + SKILL_FROST = 6, + SKILL_FIRE = 8, + SKILL_ARMS = 26, + SKILL_COMBAT = 38, + SKILL_SUBTLETY = 39, + SKILL_POISONS = 40, + SKILL_SWORDS = 43, + SKILL_AXES = 44, + SKILL_BOWS = 45, + SKILL_GUNS = 46, + SKILL_BEAST_MASTERY = 50, + SKILL_SURVIVAL = 51, + SKILL_MACES = 54, + SKILL_HOLY = 56, + SKILL_2H_SWORDS = 55, + SKILL_SHADOW = 78, + SKILL_DEFENSE = 95, + SKILL_LANG_COMMON = 98, + SKILL_RACIAL_DWARVEN = 101, + SKILL_LANG_ORCISH = 109, + SKILL_LANG_DWARVEN = 111, + SKILL_LANG_DARNASSIAN = 113, + SKILL_LANG_TAURAHE = 115, + SKILL_DUAL_WIELD = 118, + SKILL_RACIAL_TAUREN = 124, + SKILL_ORC_RACIAL = 125, + SKILL_RACIAL_NIGHT_ELF = 126, + SKILL_FIRST_AID = 129, + SKILL_FERAL_COMBAT = 134, + SKILL_STAVES = 136, + SKILL_LANG_THALASSIAN = 137, + SKILL_LANG_DRACONIC = 138, + SKILL_LANG_DEMON_TONGUE = 139, + SKILL_LANG_TITAN = 140, + SKILL_LANG_OLD_TONGUE = 141, + SKILL_SURVIVAL2 = 142, + SKILL_RIDING_HORSE = 148, + SKILL_RIDING_WOLF = 149, + SKILL_RIDING_RAM = 152, + SKILL_RIDING_TIGER = 150, + SKILL_SWIMING = 155, + SKILL_2H_MACES = 160, + SKILL_UNARMED = 162, + SKILL_MARKSMANSHIP = 163, + SKILL_BLACKSMITHING = 164, + SKILL_LEATHERWORKING = 165, + SKILL_ALCHEMY = 171, + SKILL_2H_AXES = 172, + SKILL_DAGGERS = 173, + SKILL_THROWN = 176, + SKILL_HERBALISM = 182, + SKILL_GENERIC_DND = 183, + SKILL_RETRIBUTION = 184, + SKILL_COOKING = 185, + SKILL_MINING = 186, + SKILL_PET_IMP = 188, + SKILL_PET_FELHUNTER = 189, + SKILL_TAILORING = 197, + SKILL_ENGINERING = 202, + SKILL_PET_SPIDER = 203, + SKILL_PET_VOIDWALKER = 204, + SKILL_PET_SUCCUBUS = 205, + SKILL_PET_INFERNAL = 206, + SKILL_PET_DOOMGUARD = 207, + SKILL_PET_WOLF = 208, + SKILL_PET_CAT = 209, + SKILL_PET_BEAR = 210, + SKILL_PET_BOAR = 211, + SKILL_PET_CROCILISK = 212, + SKILL_PET_CARRION_BIRD = 213, + SKILL_PET_GORILLA = 215, + SKILL_PET_CRAB = 214, + SKILL_PET_RAPTOR = 217, + SKILL_PET_TALLSTRIDER = 218, + SKILL_RACIAL_UNDED = 220, + SKILL_WEAPON_TALENTS = 222, + SKILL_CROSSBOWS = 226, + SKILL_SPEARS = 227, + SKILL_WANDS = 228, + SKILL_POLEARMS = 229, + SKILL_PET_SCORPID = 236, + SKILL_ARCANE = 237, + SKILL_OPEN_LOCK = 242, + SKILL_PET_TURTLE = 251, + SKILL_ASSASSINATION = 253, + SKILL_FURY = 256, + SKILL_PROTECTION = 257, + SKILL_BEAST_TRAINING = 261, + SKILL_PROTECTION2 = 267, + SKILL_PET_TALENTS = 270, + SKILL_PLATE_MAIL = 293, + SKILL_LANG_GNOMISH = 313, + SKILL_LANG_TROLL = 315, + SKILL_ENCHANTING = 333, + SKILL_DEMONOLOGY = 354, + SKILL_AFFLICTION = 355, + SKILL_FISHING = 356, + SKILL_ENHANCEMENT = 373, + SKILL_RESTORATION = 374, + SKILL_ELEMENTAL_COMBAT = 375, + SKILL_SKINNING = 393, + SKILL_MAIL = 413, + SKILL_LEATHER = 414, + SKILL_CLOTH = 415, + SKILL_SHIELD = 433, + SKILL_FIST_WEAPONS = 473, + SKILL_RIDING_RAPTOR = 533, + SKILL_RIDING_MECHANOSTRIDER = 553, + SKILL_RIDING_UNDEAD_HORSE = 554, + SKILL_RESTORATION2 = 573, + SKILL_BALANCE = 574, + SKILL_DESTRUCTION = 593, + SKILL_HOLY2 = 594, + SKILL_DISCIPLINE = 613, + SKILL_LOCKPICKING = 633, + SKILL_PET_BAT = 653, + SKILL_PET_HYENA = 654, + SKILL_PET_OWL = 655, + SKILL_PET_WIND_SERPENT = 656, + SKILL_LANG_GUTTERSPEAK = 673, + SKILL_RIDING_KODO = 713, + SKILL_RACIAL_TROLL = 733, + SKILL_RACIAL_GNOME = 753, + SKILL_RACIAL_HUMAN = 754, + SKILL_JEWELCRAFTING = 755, + SKILL_RACIAL_BLOODELF = 756, + SKILL_PET_EVENT_RC = 758, + SKILL_LANG_DRAENEI = 759, + SKILL_RACIAL_DRAENEI = 760, + SKILL_PET_FELGUARD = 761, + SKILL_RIDING = 762, + SKILL_PET_DRAGONHAWK = 763, + SKILL_PET_NETHER_RAY = 764, + SKILL_PET_SPOREBAT = 765, + SKILL_PET_WARP_STALKER = 766, + SKILL_PET_RAVAGER = 767, + SKILL_PET_SERPENT = 768 +}; -#define QUEST_TYPE_ELITE 1 -#define QUEST_TYPE_LIFE 21 -#define QUEST_TYPE_PVP 41 -#define QUEST_TYPE_RAID 62 -#define QUEST_TYPE_DUNGEON 81 -#define QUEST_SORT_EPIC 1 -#define QUEST_SORT_WAILING_CAVERNS_OLD 21 -#define QUEST_SORT_SEASONAL 22 -#define QUEST_SORT_UNDERCITY_OLD 23 -#define QUEST_SORT_HERBALISM 24 -#define QUEST_SORT_SCARLET_MONASTERY_OLD 25 -#define QUEST_SORT_ULDAMN_OLD 41 -#define QUEST_SORT_WARLOCK 61 -#define QUEST_SORT_WARRIOR 81 -#define QUEST_SORT_SHAMAN 82 -#define QUEST_SORT_FISHING 101 -#define QUEST_SORT_BLACKSMITHING 121 -#define QUEST_SORT_PALADIN 141 -#define QUEST_SORT_MAGE 161 -#define QUEST_SORT_ROGUE 162 -#define QUEST_SORT_ALCHEMY 181 -#define QUEST_SORT_LEATHERWORKING 182 -#define QUEST_SORT_ENGINERING 201 -#define QUEST_SORT_TREASURE_MAP 221 -#define QUEST_SORT_SUNKEN_TEMPLE_OLD 241 -#define QUEST_SORT_HUNTER 261 -#define QUEST_SORT_PRIEST 262 -#define QUEST_SORT_DRUID 263 -#define QUEST_SORT_TAILORING 264 -#define QUEST_SORT_SPECIAL 284 -#define QUEST_SORT_COOKING 304 -#define QUEST_SORT_FIRST_AID 324 +enum SkillCategory +{ + SKILL_CATEGORY_ATTRIBUTES = 5, + SKILL_CATEGORY_WEAPON = 6, + SKILL_CATEGORY_CLASS = 7, + SKILL_CATEGORY_ARMOR = 8, + SKILL_CATEGORY_SECONDARY = 9, // secondary professions + SKILL_CATEGORY_LANGUAGES = 10, + SKILL_CATEGORY_PROFESSION = 11 // primary professions +}; + +enum TotemCategory +{ + TC_SKINNING_SKIFE = 1, + TC_EARTH_TOTEM = 2, + TC_AIR_TOTEM = 3, + TC_FIRE_TOTEM = 4, + TC_WATER_TOTEM = 5, + TC_COPPER_ROD = 6, + TC_SILVER_ROD = 7, + TC_GOLDEN_ROD = 8, + TC_TRUESILVER_ROD = 9, + TC_ARCANITE_ROD = 10, + TC_MINING_PICK = 11, + TC_PHILOSOPHERS_STONE = 12, + TC_BLACKSMITH_HAMMER = 13, + TC_ARCLIGHT_SPANNER = 14, + TC_GYROMATIC_MA = 15, + TC_MASTER_TOTEM = 21, + TC_FEL_IRON_ROD = 41, + TC_ADAMANTITE_ROD = 62, + TC_ETERNIUM_ROD = 63 +}; + +enum UnitDynFlags +{ + UNIT_DYNFLAG_LOOTABLE = 0x0001, + UNIT_DYNFLAG_TRACK_UNIT = 0x0002, + UNIT_DYNFLAG_OTHER_TAGGER = 0x0004, + UNIT_DYNFLAG_ROOTED = 0x0008, + UNIT_DYNFLAG_SPECIALINFO = 0x0010, + UNIT_DYNFLAG_DEAD = 0x0020 +}; + +enum UnitFlags1 +{ + UNIT_FLAG_NOT_ATTACKABLE = 0x0002, + UNIT_FLAG_ATTACKABLE = 0x0008, + UNIT_FLAG_NOT_ATTACKABLE_1 = 0x0080, + UNIT_FLAG_NON_PVP_PLAYER = (UNIT_FLAG_ATTACKABLE + UNIT_FLAG_NOT_ATTACKABLE_1), + UNIT_FLAG_ANIMATION_FROZEN = 0x0400, + UNIT_FLAG_WAR_PLAYER = 0x1000 +}; -#define SKILL_FROST 6 -#define SKILL_FIRE 8 -#define SKILL_ARMS 26 -#define SKILL_COMBAT 38 -#define SKILL_SUBTLETY 39 -#define SKILL_POISONS 40 -#define SKILL_SWORDS 43 -#define SKILL_AXES 44 -#define SKILL_BOWS 45 -#define SKILL_GUNS 46 -#define SKILL_BEAST_MASTERY 50 -#define SKILL_SURVIVAL 51 -#define SKILL_MACES 54 -#define SKILL_HOLY 56 -#define SKILL_2H_SWORDS 55 -#define SKILL_SHADOW 78 -#define SKILL_DEFENSE 95 -#define SKILL_LANG_COMMON 98 -#define SKILL_RACIAL_DWARVEN 101 -#define SKILL_LANG_ORCISH 109 -#define SKILL_LANG_DWARVEN 111 -#define SKILL_LANG_DARNASSIAN 113 -#define SKILL_LANG_TAURAHE 115 -#define SKILL_DUAL_WIELD 118 -#define SKILL_RACIAL_TAUREN 124 -#define SKILL_ORC_RACIAL 125 -#define SKILL_RACIAL_NIGHT_ELF 126 -#define SKILL_FIRST_AID 129 -#define SKILL_FERAL_COMBAT 134 -#define SKILL_LANG_THALASSIAN 137 -#define SKILL_STAVES 136 -#define SKILL_LANG_DRACONIC 138 -#define SKILL_LANG_DEMON_TONGUE 139 -#define SKILL_LANG_TITAN 140 -#define SKILL_LANG_OLD_TONGUE 141 -#define SKILL_SURVIVAL2 142 -#define SKILL_RIDING_HORSE 148 -#define SKILL_RIDING_WOLF 149 -#define SKILL_RIDING_RAM 152 -#define SKILL_RIDING_TIGER 150 -#define SKILL_SWIMING 155 -#define SKILL_2H_MACES 160 -#define SKILL_UNARMED 162 -#define SKILL_MARKSMANSHIP 163 -#define SKILL_BLACKSMITHING 164 -#define SKILL_LEATHERWORKING 165 -#define SKILL_ALCHEMY 171 -#define SKILL_2H_AXES 172 -#define SKILL_DAGGERS 173 -#define SKILL_THROWN 176 -#define SKILL_HERBALISM 182 -#define SKILL_GENERIC_DND 183 -#define SKILL_RETRIBUTION 184 -#define SKILL_COOKING 185 -#define SKILL_MINING 186 -#define SKILL_PET_IMP 188 -#define SKILL_PET_FELHUNTER 189 -#define SKILL_TAILORING 197 -#define SKILL_ENGINERING 202 -#define SKILL_PET_SPIDER 203 -#define SKILL_PET_VOIDWALKER 204 -#define SKILL_PET_SUCCUBUS 205 -#define SKILL_PET_INFERNAL 206 -#define SKILL_PET_DOOMGUARD 207 -#define SKILL_PET_WOLF 208 -#define SKILL_PET_CAT 209 -#define SKILL_PET_BEAR 210 -#define SKILL_PET_BOAR 211 -#define SKILL_PET_CROCILISK 212 -#define SKILL_PET_CARRION_BIRD 213 -#define SKILL_PET_GORILLA 215 -#define SKILL_PET_CRAB 214 -#define SKILL_PET_RAPTOR 217 -#define SKILL_PET_TALLSTRIDER 218 -#define SKILL_RACIAL_UNDED 220 -#define SKILL_WEAPON_TALENTS 222 -#define SKILL_CROSSBOWS 226 -#define SKILL_SPEARS 227 -#define SKILL_WANDS 228 -#define SKILL_POLEARMS 229 -#define SKILL_ATTRIBUTE_ENCHANCEMENTS 230 -#define SKILL_SLAYER_TALENTS 231 -#define SKILL_MAGIC_TALENTS 233 -#define SKILL_DEFENSIVE_TALENTS 234 -#define SKILL_PET_SCORPID 236 -#define SKILL_ARCANE 237 -#define SKILL_OPEN_LOCK 242 -#define SKILL_PET_TURTLE 251 -#define SKILL_FURY 256 -#define SKILL_PROTECTION 257 -#define SKILL_BEAST_TRAINING 261 -#define SKILL_PROTECTION2 267 -#define SKILL_PET_TALENTS 270 -#define SKILL_PLATE_MAIL 293 -#define SKILL_ASSASSINATION 253 -#define SKILL_LANG_GNOMISH 313 -#define SKILL_LANG_TROLL 315 -#define SKILL_ENCHANTING 333 -#define SKILL_DEMONOLOGY 354 -#define SKILL_AFFLICTION 355 -#define SKILL_FISHING 356 -#define SKILL_ENHANCEMENT 373 -#define SKILL_RESTORATION 374 -#define SKILL_ELEMENTAL_COMBAT 375 -#define SKILL_SKINNING 393 -#define SKILL_LEATHER 414 -#define SKILL_CLOTH 415 -#define SKILL_MAIL 413 -#define SKILL_SHIELD 433 -#define SKILL_FIST_WEAPONS 473 -#define SKILL_TRACKING_BEAST 513 -#define SKILL_TRACKING_HUMANOID 514 -#define SKILL_TRACKING_DEMON 516 -#define SKILL_TRACKING_UNDEAD 517 -#define SKILL_TRACKING_DRAGON 518 -#define SKILL_TRACKING_ELEMENTAL 519 -#define SKILL_RIDING_RAPTOR 533 -#define SKILL_RIDING_MECHANOSTRIDER 553 -#define SKILL_RIDING_UNDEAD_HORSE 554 -#define SKILL_RESTORATION2 573 -#define SKILL_BALANCE 574 -#define SKILL_DESTRUCTION 593 -#define SKILL_HOLY2 594 -#define SKILL_DISCIPLINE 613 -#define SKILL_LOCKPICKING 633 -#define SKILL_PET_BAT 653 -#define SKILL_PET_HYENA 654 -#define SKILL_PET_OWL 655 -#define SKILL_PET_WIND_SERPENT 656 -#define SKILL_LANG_GUTTERSPEAK 673 -#define SKILL_RIDING_KODO 713 -#define SKILL_RACIAL_TROLL 733 -#define SKILL_RACIAL_GNOME 753 -#define SKILL_RACIAL_HUMAN 754 - -#define UNIT_DYNFLAG_LOOTABLE 0x0001 - -#define UNIT_DYNFLAG_TRACK_UNIT 0x0002 - -#define UNIT_DYNFLAG_OTHER_TAGGER 0x0004 - -#define UNIT_DYNFLAG_ROOTED 0x0008 - -#define UNIT_DYNFLAG_SPECIALINFO 0x0010 - -#define UNIT_DYNFLAG_DEAD 0x0020 - -#define UNIT_FLAG_NOT_ATTACKABLE 0x0002 - -#define UNIT_FLAG_ATTACKABLE 0x0008 - -#define UNIT_FLAG_NOT_ATTACKABLE_1 0x0080 - -#define UNIT_FLAG_NON_PVP_PLAYER (UNIT_FLAG_ATTACKABLE + UNIT_FLAG_NOT_ATTACKABLE_1) - -#define UNIT_FLAG_ANIMATION_FROZEN 0x0400 -#define UNIT_FLAG_WAR_PLAYER 0x1000 - -enum ChatMsg -{ - CHAT_MSG_SAY = 0x00, - CHAT_MSG_PARTY = 0x01, - CHAT_MSG_RAID = 0x02, - CHAT_MSG_GUILD = 0x03, - CHAT_MSG_OFFICER = 0x04, - CHAT_MSG_YELL = 0x05, - CHAT_MSG_WHISPER = 0x06, - CHAT_MSG_WHISPER_INFORM = 0x07, - CHAT_MSG_EMOTE = 0x08, - CHAT_MSG_TEXT_EMOTE = 0x09, - CHAT_MSG_SYSTEM = 0x0A, - CHAT_MSG_MONSTER_SAY = 0x0B, - CHAT_MSG_MONSTER_YELL = 0x0C, - CHAT_MSG_MONSTER_EMOTE = 0x0D, - CHAT_MSG_CHANNEL = 0x0E, - CHAT_MSG_CHANNEL_JOIN = 0x0F, - CHAT_MSG_CHANNEL_LEAVE = 0x10, - CHAT_MSG_CHANNEL_LIST = 0x11, - CHAT_MSG_CHANNEL_NOTICE = 0x12, - CHAT_MSG_CHANNEL_NOTICE_USER = 0x13, - CHAT_MSG_AFK = 0x14, - CHAT_MSG_DND = 0x15, - CHAT_MSG_IGNORED = 0x16, - CHAT_MSG_SKILL = 0x17, - CHAT_MSG_LOOT = 0x18, +enum ChatMsg +{ + CHAT_MSG_SAY = 0x00, + CHAT_MSG_PARTY = 0x01, + CHAT_MSG_RAID = 0x02, + CHAT_MSG_GUILD = 0x03, + CHAT_MSG_OFFICER = 0x04, + CHAT_MSG_YELL = 0x05, + CHAT_MSG_WHISPER = 0x06, + CHAT_MSG_WHISPER_INFORM = 0x07, + CHAT_MSG_EMOTE = 0x08, + CHAT_MSG_TEXT_EMOTE = 0x09, + CHAT_MSG_SYSTEM = 0x0A, + CHAT_MSG_MONSTER_SAY = 0x0B, + CHAT_MSG_MONSTER_YELL = 0x0C, + CHAT_MSG_MONSTER_EMOTE = 0x0D, + CHAT_MSG_CHANNEL = 0x0E, + CHAT_MSG_CHANNEL_JOIN = 0x0F, + CHAT_MSG_CHANNEL_LEAVE = 0x10, + CHAT_MSG_CHANNEL_LIST = 0x11, + CHAT_MSG_CHANNEL_NOTICE = 0x12, + CHAT_MSG_CHANNEL_NOTICE_USER = 0x13, + CHAT_MSG_AFK = 0x14, + CHAT_MSG_DND = 0x15, + CHAT_MSG_IGNORED = 0x16, + CHAT_MSG_SKILL = 0x17, + CHAT_MSG_LOOT = 0x18, + CHAT_MSG_COMBAT_MISC_INFO = 0x19, + CHAT_MSG_MONSTER_WHISPER = 0x1A, + CHAT_MSG_COMBAT_SELF_HITS = 0x1B, + CHAT_MSG_COMBAT_SELF_MISSES = 0x1C, + CHAT_MSG_COMBAT_PET_HITS = 0x1D, + CHAT_MSG_COMBAT_PET_MISSES = 0x1E, + CHAT_MSG_COMBAT_PARTY_HITS = 0x1F, + CHAT_MSG_COMBAT_PARTY_MISSES = 0x20, + CHAT_MSG_COMBAT_FRIENDLYPLAYER_HITS = 0x21, + CHAT_MSG_COMBAT_FRIENDLYPLAYER_MISSES = 0x22, + CHAT_MSG_COMBAT_HOSTILEPLAYER_HITS = 0x23, + CHAT_MSG_COMBAT_HOSTILEPLAYER_MISSES = 0x24, + CHAT_MSG_COMBAT_CREATURE_VS_SELF_HITS = 0x25, + CHAT_MSG_COMBAT_CREATURE_VS_SELF_MISSES = 0x26, + CHAT_MSG_COMBAT_CREATURE_VS_PARTY_HITS = 0x27, + CHAT_MSG_COMBAT_CREATURE_VS_PARTY_MISSES = 0x28, + CHAT_MSG_COMBAT_CREATURE_VS_CREATURE_HITS = 0x29, + CHAT_MSG_COMBAT_CREATURE_VS_CREATURE_MISSES = 0x2A, + CHAT_MSG_COMBAT_FRIENDLY_DEATH = 0x2B, + CHAT_MSG_COMBAT_HOSTILE_DEATH = 0x2C, + CHAT_MSG_COMBAT_XP_GAIN = 0x2D, + CHAT_MSG_SPELL_SELF_DAMAGE = 0x2E, + CHAT_MSG_SPELL_SELF_BUFF = 0x2F, + CHAT_MSG_SPELL_PET_DAMAGE = 0x30, + CHAT_MSG_SPELL_PET_BUFF = 0x31, + CHAT_MSG_SPELL_PARTY_DAMAGE = 0x32, + CHAT_MSG_SPELL_PARTY_BUFF = 0x33, + CHAT_MSG_SPELL_FRIENDLYPLAYER_DAMAGE = 0x34, + CHAT_MSG_SPELL_FRIENDLYPLAYER_BUFF = 0x35, + CHAT_MSG_SPELL_HOSTILEPLAYER_DAMAGE = 0x36, + CHAT_MSG_SPELL_HOSTILEPLAYER_BUFF = 0x37, + CHAT_MSG_SPELL_CREATURE_VS_SELF_DAMAGE = 0x38, + CHAT_MSG_SPELL_CREATURE_VS_SELF_BUFF = 0x39, + CHAT_MSG_SPELL_CREATURE_VS_PARTY_DAMAGE = 0x3A, + CHAT_MSG_SPELL_CREATURE_VS_PARTY_BUFF = 0x3B, + CHAT_MSG_SPELL_CREATURE_VS_CREATURE_DAMAGE = 0x3C, + CHAT_MSG_SPELL_CREATURE_VS_CREATURE_BUFF = 0x3D, + CHAT_MSG_SPELL_TRADESKILLS = 0x3E, + CHAT_MSG_SPELL_DAMAGESHIELDS_ON_SELF = 0x3F, + CHAT_MSG_SPELL_DAMAGESHIELDS_ON_OTHERS = 0x40, + CHAT_MSG_SPELL_AURA_GONE_SELF = 0x41, + CHAT_MSG_SPELL_AURA_GONE_PARTY = 0x42, + CHAT_MSG_SPELL_AURA_GONE_OTHER = 0x43, + CHAT_MSG_SPELL_ITEM_ENCHANTMENTS = 0x44, + CHAT_MSG_SPELL_BREAK_AURA = 0x45, + CHAT_MSG_SPELL_PERIODIC_SELF_DAMAGE = 0x46, + CHAT_MSG_SPELL_PERIODIC_SELF_BUFFS = 0x47, + CHAT_MSG_SPELL_PERIODIC_PARTY_DAMAGE = 0x48, + CHAT_MSG_SPELL_PERIODIC_PARTY_BUFFS = 0x49, + CHAT_MSG_SPELL_PERIODIC_FRIENDLYPLAYER_DAMAGE = 0x4A, + CHAT_MSG_SPELL_PERIODIC_FRIENDLYPLAYER_BUFFS = 0x4B, + CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_DAMAGE = 0x4C, + CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_BUFFS = 0x4D, + CHAT_MSG_SPELL_PERIODIC_CREATURE_DAMAGE = 0x4E, + CHAT_MSG_SPELL_PERIODIC_CREATURE_BUFFS = 0x4F, + CHAT_MSG_SPELL_FAILED_LOCALPLAYER = 0x50, + CHAT_MSG_COMBAT_HONOR_GAIN = 0x51, + CHAT_MSG_BG_SYSTEM_NEUTRAL = 0x52, + CHAT_MSG_BG_SYSTEM_ALLIANCE = 0x53, + CHAT_MSG_BG_SYSTEM_HORDE = 0x54, + CHAT_MSG_COMBAT_FACTION_CHANGE = 0x55, + CHAT_MSG_MONEY = 0x56, + CHAT_MSG_RAID_LEADER = 0x57, + CHAT_MSG_RAID_WARNING = 0x58, + CHAT_MSG_FOREIGN_TELL = 0x59, + CHAT_MSG_RAID_BOSS_EMOTE = 0x5A, + CHAT_MSG_FILTERED = 0x5B, + CHAT_MSG_BATTLEGROUND = 0x5C, + CHAT_MSG_BATTLEGROUND_LEADER = 0x5D, + CHAT_MSG_MONSTER_PARTY = 0x5E, + CHAT_MSG_RESTRICTED = 0x5F, }; enum SpellCastTargetFlags diff --git a/src/Client/World/UpdateFields.h b/src/Client/World/UpdateFields.h index a3b957e..37f95b0 100644 --- a/src/Client/World/UpdateFields.h +++ b/src/Client/World/UpdateFields.h @@ -16,346 +16,434 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "Common.h" - #ifndef _UPDATEFIELDS_AUTO_H #define _UPDATEFIELDS_AUTO_H +// Auto generated for version 2.1.3, build 6898 + enum EObjectFields { - OBJECT_FIELD_GUID = 0x00, // Size:2 - OBJECT_FIELD_TYPE = 0x02, // Size:1 - OBJECT_FIELD_ENTRY = 0x03, // Size:1 - OBJECT_FIELD_SCALE_X = 0x04, // Size:1 - OBJECT_FIELD_PADDING = 0x05, // Size:1 - OBJECT_END = 0x06, + OBJECT_FIELD_GUID = 0x0000, // 2 4 1 + OBJECT_FIELD_TYPE = 0x0002, // 1 1 1 + OBJECT_FIELD_ENTRY = 0x0003, // 1 1 1 + OBJECT_FIELD_SCALE_X = 0x0004, // 1 3 1 + OBJECT_FIELD_PADDING = 0x0005, // 1 1 0 + OBJECT_END = 0x0006, }; enum EItemFields { - ITEM_FIELD_OWNER = OBJECT_END + 0x00, // Size:2 - ITEM_FIELD_CONTAINED = OBJECT_END + 0x02, // Size:2 - ITEM_FIELD_CREATOR = OBJECT_END + 0x04, // Size:2 - ITEM_FIELD_GIFTCREATOR = OBJECT_END + 0x06, // Size:2 - ITEM_FIELD_STACK_COUNT = OBJECT_END + 0x08, // Size:1 - ITEM_FIELD_DURATION = OBJECT_END + 0x09, // Size:1 - ITEM_FIELD_SPELL_CHARGES = OBJECT_END + 0x0A, // Size:5 - ITEM_FIELD_SPELL_CHARGES_01 = OBJECT_END + 0x0B, - ITEM_FIELD_SPELL_CHARGES_02 = OBJECT_END + 0x0C, - ITEM_FIELD_SPELL_CHARGES_03 = OBJECT_END + 0x0D, - ITEM_FIELD_SPELL_CHARGES_04 = OBJECT_END + 0x0E, - ITEM_FIELD_FLAGS = OBJECT_END + 0x0F, // Size:1 - ITEM_FIELD_ENCHANTMENT = OBJECT_END + 0x10, // count=33 This is 21 past - ITEM_FIELD_SOCKETS_ENCHANTMENT = OBJECT_END + 0x25, // + (3 sockets + 1 bonus) * 3 uint32 = 12 - ITEM_FIELD_ENCHANTMENT_LAST = OBJECT_END + 0x30, - ITEM_FIELD_PROPERTY_SEED = OBJECT_END + 0x31, // Size:1 - ITEM_FIELD_RANDOM_PROPERTIES_ID = OBJECT_END + 0x32, // Size:1 - ITEM_FIELD_ITEM_TEXT_ID = OBJECT_END + 0x33, // Size:1 - ITEM_FIELD_DURABILITY = OBJECT_END + 0x34, // Size:1 - ITEM_FIELD_MAXDURABILITY = OBJECT_END + 0x35, // Size:1 - ITEM_END = OBJECT_END + 0x36, + ITEM_FIELD_OWNER = 0x0006, // 2 4 1 + ITEM_FIELD_CONTAINED = 0x0008, // 2 4 1 + ITEM_FIELD_CREATOR = 0x000A, // 2 4 1 + ITEM_FIELD_GIFTCREATOR = 0x000C, // 2 4 1 + ITEM_FIELD_STACK_COUNT = 0x000E, // 1 1 20 + ITEM_FIELD_DURATION = 0x000F, // 1 1 20 + ITEM_FIELD_SPELL_CHARGES = 0x0010, // 5 1 20 + ITEM_FIELD_FLAGS = 0x0015, // 1 1 1 + /* + There is two types of enchantments: property based and suffix based. + Item can have only one of the two. + Suffix based linked to item.randomproperty_2 field and property based + to item.randomproperty_1 field (item prototype). + Suffix based enchantments sent to the client as negative value, in + addition they require ITEM_FIELD_SUFFIX_FACTOR field to be send in + order to calculate the bonus value. Property based enchantments are send + as positive values and do not require any aditional values since the bonuses + are already stored inside spellitemenchantment. Suffix based enchantments uses + 6-8 fields in EnchantmentSlot while property based uses 8-10 in EnchantmentSlot. + */ + ITEM_FIELD_ENCHANTMENT = 0x0016, // 33 1 1 + ITEM_FIELD_PROPERTY_SEED = 0x0037, // 1 1 1 + ITEM_FIELD_SUFFIX_FACTOR = ITEM_FIELD_PROPERTY_SEED, //custom + ITEM_FIELD_RANDOM_PROPERTIES_ID = 0x0038, // 1 1 1 + ITEM_FIELD_ITEM_TEXT_ID = 0x0039, // 1 1 4 + ITEM_FIELD_DURABILITY = 0x003A, // 1 1 20 + ITEM_FIELD_MAXDURABILITY = 0x003B, // 1 1 20 + ITEM_END = 0x003C, }; enum EContainerFields { - CONTAINER_FIELD_NUM_SLOTS = ITEM_END + 0x00, // Size:1 - CONTAINER_ALIGN_PAD = ITEM_END + 0x01, // Size:1 - CONTAINER_FIELD_SLOT_1 = ITEM_END + 0x02, // count=72 - CONTAINER_FIELD_SLOT_LAST = ITEM_END + 0x49, - CONTAINER_END = ITEM_END + 0x4A, + CONTAINER_FIELD_NUM_SLOTS = 0x003C, // 1 1 1 + CONTAINER_ALIGN_PAD = 0x003D, // 1 5 0 + CONTAINER_FIELD_SLOT_1 = 0x003E, // 72 4 1 + CONTAINER_END = 0x0086, }; enum EUnitFields { - UNIT_FIELD_CHARM = 0x00 + OBJECT_END, // Size:2 - UNIT_FIELD_SUMMON = 0x02 + OBJECT_END, // Size:2 - UNIT_FIELD_CHARMEDBY = 0x04 + OBJECT_END, // Size:2 - UNIT_FIELD_SUMMONEDBY = 0x06 + OBJECT_END, // Size:2 - UNIT_FIELD_CREATEDBY = 0x08 + OBJECT_END, // Size:2 - UNIT_FIELD_TARGET = 0x0A + OBJECT_END, // Size:2 - UNIT_FIELD_PERSUADED = 0x0C + OBJECT_END, // Size:2 - UNIT_FIELD_CHANNEL_OBJECT = 0x0E + OBJECT_END, // Size:2 - UNIT_FIELD_HEALTH = 0x10 + OBJECT_END, // Size:1 - UNIT_FIELD_POWER1 = 0x11 + OBJECT_END, // Size:1 - UNIT_FIELD_POWER2 = 0x12 + OBJECT_END, // Size:1 - UNIT_FIELD_POWER3 = 0x13 + OBJECT_END, // Size:1 - UNIT_FIELD_POWER4 = 0x14 + OBJECT_END, // Size:1 - UNIT_FIELD_POWER5 = 0x15 + OBJECT_END, // Size:1 - UNIT_FIELD_MAXHEALTH = 0x16 + OBJECT_END, // Size:1 - UNIT_FIELD_MAXPOWER1 = 0x17 + OBJECT_END, // Size:1 - UNIT_FIELD_MAXPOWER2 = 0x18 + OBJECT_END, // Size:1 - UNIT_FIELD_MAXPOWER3 = 0x19 + OBJECT_END, // Size:1 - UNIT_FIELD_MAXPOWER4 = 0x1A + OBJECT_END, // Size:1 - UNIT_FIELD_MAXPOWER5 = 0x1B + OBJECT_END, // Size:1 - UNIT_FIELD_LEVEL = 0x1C + OBJECT_END, // Size:1 - UNIT_FIELD_FACTIONTEMPLATE = 0x1D + OBJECT_END, // Size:1 - UNIT_FIELD_BYTES_0 = 0x1E + OBJECT_END, // Size:1 - UNIT_VIRTUAL_ITEM_SLOT_DISPLAY = 0x1F + OBJECT_END, // Size:3 - UNIT_VIRTUAL_ITEM_SLOT_DISPLAY_01 = 0x20 + OBJECT_END, - UNIT_VIRTUAL_ITEM_SLOT_DISPLAY_02 = 0x21 + OBJECT_END, - UNIT_VIRTUAL_ITEM_INFO = 0x22 + OBJECT_END, // Size:6 - UNIT_VIRTUAL_ITEM_INFO_01 = 0x23 + OBJECT_END, - UNIT_VIRTUAL_ITEM_INFO_02 = 0x24 + OBJECT_END, - UNIT_VIRTUAL_ITEM_INFO_03 = 0x25 + OBJECT_END, - UNIT_VIRTUAL_ITEM_INFO_04 = 0x26 + OBJECT_END, - UNIT_VIRTUAL_ITEM_INFO_05 = 0x27 + OBJECT_END, - UNIT_FIELD_FLAGS = 0x28 + OBJECT_END, // Size:1 - UNIT_FIELD_FLAGS_2 = 0x29 + OBJECT_END, // Size:1 - UNIT_FIELD_AURA = 0x2A + OBJECT_END, // Size:56 - UNIT_FIELD_AURA_LAST = 0x63 + OBJECT_END, - UNIT_FIELD_AURAFLAGS = 0x62 + OBJECT_END, // Size:7 - UNIT_FIELD_AURAFLAGS_01 = 0x63 + OBJECT_END, - UNIT_FIELD_AURAFLAGS_02 = 0x64 + OBJECT_END, - UNIT_FIELD_AURAFLAGS_03 = 0x65 + OBJECT_END, - UNIT_FIELD_AURAFLAGS_04 = 0x66 + OBJECT_END, - UNIT_FIELD_AURAFLAGS_05 = 0x67 + OBJECT_END, - UNIT_FIELD_AURAFLAGS_06 = 0x68 + OBJECT_END, - UNIT_FIELD_AURALEVELS = 0x69 + OBJECT_END, // Size:14 - UNIT_FIELD_AURALEVELS_LAST = 0x76 + OBJECT_END, - UNIT_FIELD_AURAAPPLICATIONS = 0x77 + OBJECT_END, // Size:14 - UNIT_FIELD_AURAAPPLICATIONS_LAST = 0x84 + OBJECT_END, - UNIT_FIELD_AURASTATE = 0x85 + OBJECT_END, // Size:1 - UNIT_FIELD_BASEATTACKTIME = 0x86 + OBJECT_END, // Size:2 - UNIT_FIELD_BASEATTACKTIME_01 = 0x87 + OBJECT_END, - UNIT_FIELD_OFFHANDATTACKTIME = 0x87 + OBJECT_END, // Size:2 - UNIT_FIELD_RANGEDATTACKTIME = 0x88 + OBJECT_END, // Size:1 - UNIT_FIELD_BOUNDINGRADIUS = 0x89 + OBJECT_END, // Size:1 - UNIT_FIELD_COMBATREACH = 0x8A + OBJECT_END, // Size:1 - UNIT_FIELD_DISPLAYID = 0x8B + OBJECT_END, // Size:1 - UNIT_FIELD_NATIVEDISPLAYID = 0x8C + OBJECT_END, // Size:1 - UNIT_FIELD_MOUNTDISPLAYID = 0x8D + OBJECT_END, // Size:1 - UNIT_FIELD_MINDAMAGE = 0x8E + OBJECT_END, // Size:1 - UNIT_FIELD_MAXDAMAGE = 0x8F + OBJECT_END, // Size:1 - UNIT_FIELD_MINOFFHANDDAMAGE = 0x90 + OBJECT_END, // Size:1 - UNIT_FIELD_MAXOFFHANDDAMAGE = 0x91 + OBJECT_END, // Size:1 - UNIT_FIELD_BYTES_1 = 0x92 + OBJECT_END, // Size:1 - UNIT_FIELD_PETNUMBER = 0x93 + OBJECT_END, // Size:1 - UNIT_FIELD_PET_NAME_TIMESTAMP = 0x94 + OBJECT_END, // Size:1 - UNIT_FIELD_PETEXPERIENCE = 0x95 + OBJECT_END, // Size:1 - UNIT_FIELD_PETNEXTLEVELEXP = 0x96 + OBJECT_END, // Size:1 - UNIT_DYNAMIC_FLAGS = 0x97 + OBJECT_END, // Size:1 - UNIT_CHANNEL_SPELL = 0x98 + OBJECT_END, // Size:1 - UNIT_MOD_CAST_SPEED = 0x99 + OBJECT_END, // Size:1 - UNIT_CREATED_BY_SPELL = 0x9A + OBJECT_END, // Size:1 - UNIT_NPC_FLAGS = 0x9B + OBJECT_END, // Size:1 - UNIT_NPC_EMOTESTATE = 0x9C + OBJECT_END, // Size:1 - UNIT_TRAINING_POINTS = 0x9D + OBJECT_END, // Size:1 - UNIT_FIELD_STAT0 = 0x9E + OBJECT_END, // Size:1 - UNIT_FIELD_STAT1 = 0x9F + OBJECT_END, // Size:1 - UNIT_FIELD_STAT2 = 0xA0 + OBJECT_END, // Size:1 - UNIT_FIELD_STAT3 = 0xA1 + OBJECT_END, // Size:1 - UNIT_FIELD_STAT4 = 0xA2 + OBJECT_END, // Size:1 - UNIT_FIELD_POSSTAT0 = 0xA3 + OBJECT_END, // Size:1 - UNIT_FIELD_POSSTAT1 = 0xA4 + OBJECT_END, // Size:1 - UNIT_FIELD_POSSTAT2 = 0xA5 + OBJECT_END, // Size:1 - UNIT_FIELD_POSSTAT3 = 0xA6 + OBJECT_END, // Size:1 - UNIT_FIELD_POSSTAT4 = 0xA7 + OBJECT_END, // Size:1 - UNIT_FIELD_NEGSTAT0 = 0xA8 + OBJECT_END, // Size:1 - UNIT_FIELD_NEGSTAT1 = 0xA9 + OBJECT_END, // Size:1 - UNIT_FIELD_NEGSTAT2 = 0xAA + OBJECT_END, // Size:1 - UNIT_FIELD_NEGSTAT3 = 0xAB + OBJECT_END, // Size:1 - UNIT_FIELD_NEGSTAT4 = 0xAC + OBJECT_END, // Size:1 - UNIT_FIELD_RESISTANCES = 0xAD + OBJECT_END, // Size:7 - UNIT_FIELD_RESISTANCES_01 = 0xAE + OBJECT_END, - UNIT_FIELD_RESISTANCES_02 = 0xAF + OBJECT_END, - UNIT_FIELD_RESISTANCES_03 = 0xB0 + OBJECT_END, - UNIT_FIELD_RESISTANCES_04 = 0xB1 + OBJECT_END, - UNIT_FIELD_RESISTANCES_05 = 0xB2 + OBJECT_END, - UNIT_FIELD_RESISTANCES_06 = 0xB3 + OBJECT_END, - UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE = 0xB4 + OBJECT_END, // Size:7 - UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE = 0xBB + OBJECT_END, // Size:7 - UNIT_FIELD_BASE_MANA = 0xC2 + OBJECT_END, // Size:1 - UNIT_FIELD_BASE_HEALTH = 0xC3 + OBJECT_END, // Size:1 - UNIT_FIELD_BYTES_2 = 0xC4 + OBJECT_END, // Size:1 - UNIT_FIELD_ATTACK_POWER = 0xC5 + OBJECT_END, // Size:1 - UNIT_FIELD_ATTACK_POWER_MODS = 0xC6 + OBJECT_END, // Size:1 - UNIT_FIELD_ATTACK_POWER_MULTIPLIER = 0xC7 + OBJECT_END, // Size:1 - UNIT_FIELD_RANGED_ATTACK_POWER = 0xC8 + OBJECT_END, // Size:1 - UNIT_FIELD_RANGED_ATTACK_POWER_MODS = 0xC9 + OBJECT_END, // Size:1 - UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER = 0xCA + OBJECT_END, // Size:1 - UNIT_FIELD_MINRANGEDDAMAGE = 0xCB + OBJECT_END, // Size:1 - UNIT_FIELD_MAXRANGEDDAMAGE = 0xCC + OBJECT_END, // Size:1 - UNIT_FIELD_POWER_COST_MODIFIER = 0xCD + OBJECT_END, // Size:7 - UNIT_FIELD_POWER_COST_MODIFIER_01 = 0xCE + OBJECT_END, - UNIT_FIELD_POWER_COST_MODIFIER_02 = 0xCF + OBJECT_END, - UNIT_FIELD_POWER_COST_MODIFIER_03 = 0xD0 + OBJECT_END, - UNIT_FIELD_POWER_COST_MODIFIER_04 = 0xD1 + OBJECT_END, - UNIT_FIELD_POWER_COST_MODIFIER_05 = 0xD2 + OBJECT_END, - UNIT_FIELD_POWER_COST_MODIFIER_06 = 0xD3 + OBJECT_END, - UNIT_FIELD_POWER_COST_MULTIPLIER = 0xD4 + OBJECT_END, // Size:7 - UNIT_FIELD_POWER_COST_MULTIPLIER_01 = 0xD5 + OBJECT_END, - UNIT_FIELD_POWER_COST_MULTIPLIER_02 = 0xD6 + OBJECT_END, - UNIT_FIELD_POWER_COST_MULTIPLIER_03 = 0xD7 + OBJECT_END, - UNIT_FIELD_POWER_COST_MULTIPLIER_04 = 0xD8 + OBJECT_END, - UNIT_FIELD_POWER_COST_MULTIPLIER_05 = 0xD9 + OBJECT_END, - UNIT_FIELD_POWER_COST_MULTIPLIER_06 = 0xDA + OBJECT_END, - UNIT_FIELD_PADDING = 0xDB + OBJECT_END, - UNIT_END = 0xDC + OBJECT_END, + UNIT_FIELD_CHARM = 0x0006, // 2 4 1 + UNIT_FIELD_SUMMON = 0x0008, // 2 4 1 + UNIT_FIELD_CHARMEDBY = 0x000A, // 2 4 1 + UNIT_FIELD_SUMMONEDBY = 0x000C, // 2 4 1 + UNIT_FIELD_CREATEDBY = 0x000E, // 2 4 1 + UNIT_FIELD_TARGET = 0x0010, // 2 4 1 + UNIT_FIELD_PERSUADED = 0x0012, // 2 4 1 + UNIT_FIELD_CHANNEL_OBJECT = 0x0014, // 2 4 1 + UNIT_FIELD_HEALTH = 0x0016, // 1 1 256 + UNIT_FIELD_POWER1 = 0x0017, // 1 1 1 + UNIT_FIELD_POWER2 = 0x0018, // 1 1 1 + UNIT_FIELD_POWER3 = 0x0019, // 1 1 1 + UNIT_FIELD_POWER4 = 0x001A, // 1 1 1 + UNIT_FIELD_POWER5 = 0x001B, // 1 1 1 + UNIT_FIELD_MAXHEALTH = 0x001C, // 1 1 256 + UNIT_FIELD_MAXPOWER1 = 0x001D, // 1 1 1 + UNIT_FIELD_MAXPOWER2 = 0x001E, // 1 1 1 + UNIT_FIELD_MAXPOWER3 = 0x001F, // 1 1 1 + UNIT_FIELD_MAXPOWER4 = 0x0020, // 1 1 1 + UNIT_FIELD_MAXPOWER5 = 0x0021, // 1 1 1 + UNIT_FIELD_LEVEL = 0x0022, // 1 1 1 + UNIT_FIELD_FACTIONTEMPLATE = 0x0023, // 1 1 1 + UNIT_FIELD_BYTES_0 = 0x0024, // 1 5 1 + UNIT_VIRTUAL_ITEM_SLOT_DISPLAY = 0x0025, // 3 1 1 + UNIT_VIRTUAL_ITEM_INFO = 0x0028, // 6 5 1 + UNIT_FIELD_FLAGS = 0x002E, // 1 1 1 + UNIT_FIELD_FLAGS_2 = 0x002F, // 1 1 1 + UNIT_FIELD_AURA = 0x0030, // 56 1 1 + UNIT_FIELD_AURAFLAGS = 0x0068, // 7 5 1 + UNIT_FIELD_AURALEVELS = 0x006F, // 14 5 1 + UNIT_FIELD_AURAAPPLICATIONS = 0x007D, // 14 5 1 + UNIT_FIELD_AURASTATE = 0x008B, // 1 1 1 + UNIT_FIELD_BASEATTACKTIME = 0x008C, // 2 1 1 + UNIT_FIELD_OFFHANDATTACKTIME = UNIT_FIELD_BASEATTACKTIME + 1, // custom + UNIT_FIELD_RANGEDATTACKTIME = 0x008E, // 1 1 2 + UNIT_FIELD_BOUNDINGRADIUS = 0x008F, // 1 3 1 + UNIT_FIELD_COMBATREACH = 0x0090, // 1 3 1 + UNIT_FIELD_DISPLAYID = 0x0091, // 1 1 1 + UNIT_FIELD_NATIVEDISPLAYID = 0x0092, // 1 1 1 + UNIT_FIELD_MOUNTDISPLAYID = 0x0093, // 1 1 1 + UNIT_FIELD_MINDAMAGE = 0x0094, // 1 3 38 + UNIT_FIELD_MAXDAMAGE = 0x0095, // 1 3 38 + UNIT_FIELD_MINOFFHANDDAMAGE = 0x0096, // 1 3 38 + UNIT_FIELD_MAXOFFHANDDAMAGE = 0x0097, // 1 3 38 + UNIT_FIELD_BYTES_1 = 0x0098, // 1 5 1 + UNIT_FIELD_PETNUMBER = 0x0099, // 1 1 1 + UNIT_FIELD_PET_NAME_TIMESTAMP = 0x009A, // 1 1 1 + UNIT_FIELD_PETEXPERIENCE = 0x009B, // 1 1 4 + UNIT_FIELD_PETNEXTLEVELEXP = 0x009C, // 1 1 4 + UNIT_DYNAMIC_FLAGS = 0x009D, // 1 1 256 + UNIT_CHANNEL_SPELL = 0x009E, // 1 1 1 + UNIT_MOD_CAST_SPEED = 0x009F, // 1 3 1 + UNIT_CREATED_BY_SPELL = 0x00A0, // 1 1 1 + UNIT_NPC_FLAGS = 0x00A1, // 1 1 1 + UNIT_NPC_EMOTESTATE = 0x00A2, // 1 1 1 + UNIT_TRAINING_POINTS = 0x00A3, // 1 2 4 + UNIT_FIELD_STAT0 = 0x00A4, // 1 1 6 + UNIT_FIELD_STAT1 = 0x00A5, // 1 1 6 + UNIT_FIELD_STAT2 = 0x00A6, // 1 1 6 + UNIT_FIELD_STAT3 = 0x00A7, // 1 1 6 + UNIT_FIELD_STAT4 = 0x00A8, // 1 1 6 + UNIT_FIELD_POSSTAT0 = 0x00A9, // 1 1 6 + UNIT_FIELD_POSSTAT1 = 0x00AA, // 1 1 6 + UNIT_FIELD_POSSTAT2 = 0x00AB, // 1 1 6 + UNIT_FIELD_POSSTAT3 = 0x00AC, // 1 1 6 + UNIT_FIELD_POSSTAT4 = 0x00AD, // 1 1 6 + UNIT_FIELD_NEGSTAT0 = 0x00AE, // 1 1 6 + UNIT_FIELD_NEGSTAT1 = 0x00AF, // 1 1 6 + UNIT_FIELD_NEGSTAT2 = 0x00B0, // 1 1 6 + UNIT_FIELD_NEGSTAT3 = 0x00B1, // 1 1 6 + UNIT_FIELD_NEGSTAT4 = 0x00B2, // 1 1 6 + UNIT_FIELD_RESISTANCES = 0x00B3, // 7 1 38 + UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE = 0x00BA, // 7 1 6 + UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE = 0x00C1, // 7 1 6 + UNIT_FIELD_BASE_MANA = 0x00C8, // 1 1 6 + UNIT_FIELD_BASE_HEALTH = 0x00C9, // 1 1 6 + UNIT_FIELD_BYTES_2 = 0x00CA, // 1 5 1 + UNIT_FIELD_ATTACK_POWER = 0x00CB, // 1 1 6 + UNIT_FIELD_ATTACK_POWER_MODS = 0x00CC, // 1 2 6 + UNIT_FIELD_ATTACK_POWER_MULTIPLIER = 0x00CD, // 1 3 6 + UNIT_FIELD_RANGED_ATTACK_POWER = 0x00CE, // 1 1 6 + UNIT_FIELD_RANGED_ATTACK_POWER_MODS = 0x00CF, // 1 2 6 + UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER = 0x00D0, // 1 3 6 + UNIT_FIELD_MINRANGEDDAMAGE = 0x00D1, // 1 3 6 + UNIT_FIELD_MAXRANGEDDAMAGE = 0x00D2, // 1 3 6 + UNIT_FIELD_POWER_COST_MODIFIER = 0x00D3, // 7 1 6 + UNIT_FIELD_POWER_COST_MULTIPLIER = 0x00DA, // 7 3 6 + UNIT_FIELD_PADDING = 0x00E1, // 1 1 0 + UNIT_END = 0x00E2, - PLAYER_DUEL_ARBITER = 0x00 + UNIT_END, // Size:2 - PLAYER_FLAGS = 0x02 + UNIT_END, // Size:1 - PLAYER_GUILDID = 0x03 + UNIT_END, // Size:1 - PLAYER_GUILDRANK = 0x04 + UNIT_END, // Size:1 - PLAYER_BYTES = 0x05 + UNIT_END, // Size:1 - PLAYER_BYTES_2 = 0x06 + UNIT_END, // Size:1 - PLAYER_BYTES_3 = 0x07 + UNIT_END, // Size:1 - PLAYER_DUEL_TEAM = 0x08 + UNIT_END, // Size:1 - PLAYER_GUILD_TIMESTAMP = 0x09 + UNIT_END, // Size:1 - PLAYER_QUEST_LOG_1_1 = 0x0A + UNIT_END, // count = 25 - PLAYER_QUEST_LOG_1_2 = 0x0B + UNIT_END, - PLAYER_QUEST_LOG_1_3 = 0x0C + UNIT_END, - PLAYER_QUEST_LOG_LAST_1 = 0x52 + UNIT_END, - PLAYER_QUEST_LOG_LAST_2 = 0x53 + UNIT_END, - PLAYER_QUEST_LOG_LAST_3 = 0x54 + UNIT_END, - PLAYER_VISIBLE_ITEM_1_CREATOR = 0x55 + UNIT_END, // Size:2, count = 19 - PLAYER_VISIBLE_ITEM_1_0 = 0x57 + UNIT_END, // Size:12 - PLAYER_VISIBLE_ITEM_1_PROPERTIES = 0x63 + UNIT_END, // Size:1 - PLAYER_VISIBLE_ITEM_1_PAD = 0x64 + UNIT_END, // Size:1 - PLAYER_VISIBLE_ITEM_LAST_CREATOR = 0x175 + UNIT_END, - PLAYER_VISIBLE_ITEM_LAST_0 = 0x177 + UNIT_END, - PLAYER_VISIBLE_ITEM_LAST_PROPERTIES = 0x183 + UNIT_END, - PLAYER_VISIBLE_ITEM_LAST_PAD = 0x184 + UNIT_END, - PLAYER_CHOSEN_TITLE = 0x185 + UNIT_END, // Size:1 - PLAYER_FIELD_INV_SLOT_HEAD = 0x186 + UNIT_END, // Size:46 - PLAYER_FIELD_PACK_SLOT_1 = 0x1B4 + UNIT_END, // Size:32 - PLAYER_FIELD_PACK_SLOT_LAST = 0x1D3 + UNIT_END, - PLAYER_FIELD_BANK_SLOT_1 = 0x1D4 + UNIT_END, // Size:56 - PLAYER_FIELD_BANK_SLOT_LAST = 0x20B + UNIT_END, - PLAYER_FIELD_BANKBAG_SLOT_1 = 0x20C + UNIT_END, // Size:14 - PLAYER_FIELD_BANKBAG_SLOT_LAST = 0x219 + UNIT_END, - PLAYER_FIELD_VENDORBUYBACK_SLOT_1 = 0x21A + UNIT_END, // Size:24 - PLAYER_FIELD_VENDORBUYBACK_SLOT_LAST = 0x231 + UNIT_END, - PLAYER_FIELD_KEYRING_SLOT_1 = 0x232 + UNIT_END, // Size:64 - PLAYER_FIELD_KEYRING_SLOT_LAST = 0x271 + UNIT_END, - PLAYER_FARSIGHT = 0x272 + UNIT_END, // Size:2 - PLAYER_FIELD_COMBO_TARGET = 0x274 + UNIT_END, // Size:2 - PLAYER_FIELD_KNOWN_TITLES = 0x276 + UNIT_END, // Size:2 - PLAYER_XP = 0x278 + UNIT_END, // Size:1 - PLAYER_NEXT_LEVEL_XP = 0x279 + UNIT_END, // Size:1 - PLAYER_SKILL_INFO_1_1 = 0x27A + UNIT_END, // Size:384 - PLAYER_CHARACTER_POINTS1 = 0x3FA + UNIT_END, // Size:1 - PLAYER_CHARACTER_POINTS2 = 0x3FB + UNIT_END, // Size:1 - PLAYER_TRACK_CREATURES = 0x3FC + UNIT_END, // Size:1 - PLAYER_TRACK_RESOURCES = 0x3FD + UNIT_END, // Size:1 - PLAYER_BLOCK_PERCENTAGE = 0x3FE + UNIT_END, // Size:1 - PLAYER_DODGE_PERCENTAGE = 0x3FF + UNIT_END, // Size:1 - PLAYER_PARRY_PERCENTAGE = 0x400 + UNIT_END, // Size:1 - PLAYER_CRIT_PERCENTAGE = 0x401 + UNIT_END, // Size:1 - PLAYER_RANGED_CRIT_PERCENTAGE = 0x402 + UNIT_END, // Size:1 - PLAYER_OFFHAND_CRIT_PERCENTAGE = 0x403 + UNIT_END, // Size:1 - PLAYER_SPELL_CRIT_PERCENTAGE1 = 0x404 + UNIT_END, // Size:7 - PLAYER_HOLY_SPELL_CRIT_PERCENTAGE = 0x405 + UNIT_END, // custom - PLAYER_FIRE_SPELL_CRIT_PERCENTAGE = 0x406 + UNIT_END, // custom - PLAYER_NATURE_SPELL_CRIT_PERCENTAGE = 0x407 + UNIT_END, // custom - PLAYER_FROST_SPELL_CRIT_PERCENTAGE = 0x408 + UNIT_END, // custom - PLAYER_SHADOW_SPELL_CRIT_PERCENTAGE = 0x409 + UNIT_END, // custom - PLAYER_ARCANE_SPELL_CRIT_PERCENTAGE = 0x40A + UNIT_END, // custom - PLAYER_EXPLORED_ZONES_1 = 0x40B + UNIT_END, // Size:64 - PLAYER_REST_STATE_EXPERIENCE = 0x44B + UNIT_END, // Size:1 - PLAYER_FIELD_COINAGE = 0x44C + UNIT_END, // Size:1 - PLAYER_FIELD_MOD_DAMAGE_DONE_POS = 0x44D + UNIT_END, // Size:7 - PLAYER_FIELD_MOD_DAMAGE_DONE_NEG = 0x454 + UNIT_END, // Size:7 - PLAYER_FIELD_MOD_DAMAGE_DONE_PCT = 0x45B + UNIT_END, // Size:7 - PLAYER_FIELD_MOD_HEALING_DONE_POS = 0x462 + UNIT_END, // Size:1 - PLAYER_FIELD_MOD_TARGET_RESISTANCE = 0x463 + UNIT_END, // Size:1 - PLAYER_FIELD_BYTES = 0x464 + UNIT_END, // Size:1 - PLAYER_AMMO_ID = 0x465 + UNIT_END, // Size:1 - PLAYER_SELF_RES_SPELL = 0x466 + UNIT_END, // Size:1 - PLAYER_FIELD_PVP_MEDALS = 0x467 + UNIT_END, // Size:1 - PLAYER_FIELD_BUYBACK_PRICE_1 = 0x468 + UNIT_END, // count=12 - PLAYER_FIELD_BUYBACK_PRICE_LAST = 0x473 + UNIT_END, - PLAYER_FIELD_BUYBACK_TIMESTAMP_1 = 0x474 + UNIT_END, // count=12 - PLAYER_FIELD_BUYBACK_TIMESTAMP_LAST = 0x47A + UNIT_END, - PLAYER_FIELD_KILLS = 0x480 + UNIT_END, // Size:1 // ((uint16)kills_today<<16) | (uint16)kills_yesterday) - PLAYER_FIELD_HONOR_TODAY = 0x481 + UNIT_END, // Size:1 - PLAYER_FIELD_HONOR_YESTERDAY = 0x482 + UNIT_END, // Size:1 - PLAYER_FIELD_KILLS_LIFETIME = 0x483 + UNIT_END, // Size:1 - PLAYER_FIELD_BYTES2 = 0x484 + UNIT_END, // Size:1 - PLAYER_FIELD_WATCHED_FACTION_INDEX = 0x485 + UNIT_END, // Size:1 - PLAYER_FIELD_COMBAT_RATING_1 = 0x486 + UNIT_END, // Size:23 - PLAYER_FIELD_ALL_WEAPONS_SKILL_RATING = 0x486 + UNIT_END, // custom - PLAYER_FIELD_DEFENCE_RATING = 0x487 + UNIT_END, // custom - PLAYER_FIELD_DODGE_RATING = 0x488 + UNIT_END, // custom - PLAYER_FIELD_PARRY_RATING = 0x489 + UNIT_END, // custom - PLAYER_FIELD_BLOCK_RATING = 0x48A + UNIT_END, // custom - PLAYER_FIELD_MELEE_HIT_RATING = 0x48B + UNIT_END, // custom - PLAYER_FIELD_RANGED_HIT_RATING = 0x48C + UNIT_END, // custom - PLAYER_FIELD_SPELL_HIT_RATING = 0x48D + UNIT_END, // custom - PLAYER_FIELD_MELEE_CRIT_RATING = 0x48E + UNIT_END, // custom - PLAYER_FIELD_RANGED_CRIT_RATING = 0x48F + UNIT_END, // custom - PLAYER_FIELD_SPELL_CRIT_RATING = 0x490 + UNIT_END, // custom - PLAYER_FIELD_HIT_RATING = 0x491 + UNIT_END, // unsure, was PLAYER_FIELD_UNK1_RATING - PLAYER_FIELD_CRIT_RATING = 0x492 + UNIT_END, // unsure, was PLAYER_FIELD_UNK2_RATING - PLAYER_FIELD_UNK3_RATING = 0x493 + UNIT_END, // custom - PLAYER_FIELD_UNK4_RATING = 0x494 + UNIT_END, // custom - PLAYER_FIELD_UNK5_RATING = 0x495 + UNIT_END, // custom - PLAYER_FIELD_RESILIENCE_RATING = 0x496 + UNIT_END, // custom - PLAYER_FIELD_MELEE_HASTE_RATING = 0x497 + UNIT_END, // custom - PLAYER_FIELD_RANGED_HASTE_RATING = 0x498 + UNIT_END, // custom - PLAYER_FIELD_UNK6_RATING = 0x499 + UNIT_END, // custom - PLAYER_FIELD_MELEE_WEAPON_SKILL_RATING = 0x49A + UNIT_END, // custom - PLAYER_FIELD_UNK7_RATING = 0x49B + UNIT_END, // custom - PLAYER_FIELD_RANGED_WEAPON_SKILL_RATING = 0x49C + UNIT_END, // custom - PLAYER_FIELD_ARENA_TEAM_INFO_1_1 = 0x49D + UNIT_END, // Size:9 - PLAYER_FIELD_HONOR_CURRENCY = 0x4A6 + UNIT_END, // Size:1 - PLAYER_FIELD_ARENA_CURRENCY = 0x4A7 + UNIT_END, // Size:1 - PLAYER_FIELD_MOD_MANA_REGEN = 0x4A8 + UNIT_END, // Size:1 - PLAYER_FIELD_MOD_MANA_REGEN_INTERRUPT = 0x4A9 + UNIT_END, // Size:1 - PLAYER_FIELD_MAX_LEVEL = 0x4AA + UNIT_END, // Size:1 - PLAYER_FIELD_PADDING = 0x4AB + UNIT_END, // Size:1 - PLAYER_END = 0x4AC + UNIT_END, + PLAYER_DUEL_ARBITER = 0x00E2, // 2 4 1 + PLAYER_FLAGS = 0x00E4, // 1 1 1 + PLAYER_GUILDID = 0x00E5, // 1 1 1 + PLAYER_GUILDRANK = 0x00E6, // 1 1 1 + PLAYER_BYTES = 0x00E7, // 1 5 1 + PLAYER_BYTES_2 = 0x00E8, // 1 5 1 + PLAYER_BYTES_3 = 0x00E9, // 1 5 1 + PLAYER_DUEL_TEAM = 0x00EA, // 1 1 1 + PLAYER_GUILD_TIMESTAMP = 0x00EB, // 1 1 1 + PLAYER_QUEST_LOG_1_1 = 0x00EC, // 1 1 64 + PLAYER_QUEST_LOG_1_2 = 0x00ED, // 2 1 2 + PLAYER_QUEST_LOG_2_1 = 0x00EF, // 1 1 64 + PLAYER_QUEST_LOG_2_2 = 0x00F0, // 2 1 2 + PLAYER_QUEST_LOG_3_1 = 0x00F2, // 1 1 64 + PLAYER_QUEST_LOG_3_2 = 0x00F3, // 2 1 2 + PLAYER_QUEST_LOG_4_1 = 0x00F5, // 1 1 64 + PLAYER_QUEST_LOG_4_2 = 0x00F6, // 2 1 2 + PLAYER_QUEST_LOG_5_1 = 0x00F8, // 1 1 64 + PLAYER_QUEST_LOG_5_2 = 0x00F9, // 2 1 2 + PLAYER_QUEST_LOG_6_1 = 0x00FB, // 1 1 64 + PLAYER_QUEST_LOG_6_2 = 0x00FC, // 2 1 2 + PLAYER_QUEST_LOG_7_1 = 0x00FE, // 1 1 64 + PLAYER_QUEST_LOG_7_2 = 0x00FF, // 2 1 2 + PLAYER_QUEST_LOG_8_1 = 0x0101, // 1 1 64 + PLAYER_QUEST_LOG_8_2 = 0x0102, // 2 1 2 + PLAYER_QUEST_LOG_9_1 = 0x0104, // 1 1 64 + PLAYER_QUEST_LOG_9_2 = 0x0105, // 2 1 2 + PLAYER_QUEST_LOG_10_1 = 0x0107, // 1 1 64 + PLAYER_QUEST_LOG_10_2 = 0x0108, // 2 1 2 + PLAYER_QUEST_LOG_11_1 = 0x010A, // 1 1 64 + PLAYER_QUEST_LOG_11_2 = 0x010B, // 2 1 2 + PLAYER_QUEST_LOG_12_1 = 0x010D, // 1 1 64 + PLAYER_QUEST_LOG_12_2 = 0x010E, // 2 1 2 + PLAYER_QUEST_LOG_13_1 = 0x0110, // 1 1 64 + PLAYER_QUEST_LOG_13_2 = 0x0111, // 2 1 2 + PLAYER_QUEST_LOG_14_1 = 0x0113, // 1 1 64 + PLAYER_QUEST_LOG_14_2 = 0x0114, // 2 1 2 + PLAYER_QUEST_LOG_15_1 = 0x0116, // 1 1 64 + PLAYER_QUEST_LOG_15_2 = 0x0117, // 2 1 2 + PLAYER_QUEST_LOG_16_1 = 0x0119, // 1 1 64 + PLAYER_QUEST_LOG_16_2 = 0x011A, // 2 1 2 + PLAYER_QUEST_LOG_17_1 = 0x011C, // 1 1 64 + PLAYER_QUEST_LOG_17_2 = 0x011D, // 2 1 2 + PLAYER_QUEST_LOG_18_1 = 0x011F, // 1 1 64 + PLAYER_QUEST_LOG_18_2 = 0x0120, // 2 1 2 + PLAYER_QUEST_LOG_19_1 = 0x0122, // 1 1 64 + PLAYER_QUEST_LOG_19_2 = 0x0123, // 2 1 2 + PLAYER_QUEST_LOG_20_1 = 0x0125, // 1 1 64 + PLAYER_QUEST_LOG_20_2 = 0x0126, // 2 1 2 + PLAYER_QUEST_LOG_21_1 = 0x0128, // 1 1 64 + PLAYER_QUEST_LOG_21_2 = 0x0129, // 2 1 2 + PLAYER_QUEST_LOG_22_1 = 0x012B, // 1 1 64 + PLAYER_QUEST_LOG_22_2 = 0x012C, // 2 1 2 + PLAYER_QUEST_LOG_23_1 = 0x012E, // 1 1 64 + PLAYER_QUEST_LOG_23_2 = 0x012F, // 2 1 2 + PLAYER_QUEST_LOG_24_1 = 0x0131, // 1 1 64 + PLAYER_QUEST_LOG_24_2 = 0x0132, // 2 1 2 + PLAYER_QUEST_LOG_25_1 = 0x0134, // 1 1 64 + PLAYER_QUEST_LOG_25_2 = 0x0135, // 2 1 2 + PLAYER_VISIBLE_ITEM_1_CREATOR = 0x0137, // 2 4 1 + PLAYER_VISIBLE_ITEM_1_0 = 0x0139, // 12 1 1 + PLAYER_VISIBLE_ITEM_1_PROPERTIES = 0x0145, // 1 2 1 + PLAYER_VISIBLE_ITEM_1_PAD = 0x0146, // 1 1 1 + PLAYER_VISIBLE_ITEM_2_CREATOR = 0x0147, // 2 4 1 + PLAYER_VISIBLE_ITEM_2_0 = 0x0149, // 12 1 1 + PLAYER_VISIBLE_ITEM_2_PROPERTIES = 0x0155, // 1 2 1 + PLAYER_VISIBLE_ITEM_2_PAD = 0x0156, // 1 1 1 + PLAYER_VISIBLE_ITEM_3_CREATOR = 0x0157, // 2 4 1 + PLAYER_VISIBLE_ITEM_3_0 = 0x0159, // 12 1 1 + PLAYER_VISIBLE_ITEM_3_PROPERTIES = 0x0165, // 1 2 1 + PLAYER_VISIBLE_ITEM_3_PAD = 0x0166, // 1 1 1 + PLAYER_VISIBLE_ITEM_4_CREATOR = 0x0167, // 2 4 1 + PLAYER_VISIBLE_ITEM_4_0 = 0x0169, // 12 1 1 + PLAYER_VISIBLE_ITEM_4_PROPERTIES = 0x0175, // 1 2 1 + PLAYER_VISIBLE_ITEM_4_PAD = 0x0176, // 1 1 1 + PLAYER_VISIBLE_ITEM_5_CREATOR = 0x0177, // 2 4 1 + PLAYER_VISIBLE_ITEM_5_0 = 0x0179, // 12 1 1 + PLAYER_VISIBLE_ITEM_5_PROPERTIES = 0x0185, // 1 2 1 + PLAYER_VISIBLE_ITEM_5_PAD = 0x0186, // 1 1 1 + PLAYER_VISIBLE_ITEM_6_CREATOR = 0x0187, // 2 4 1 + PLAYER_VISIBLE_ITEM_6_0 = 0x0189, // 12 1 1 + PLAYER_VISIBLE_ITEM_6_PROPERTIES = 0x0195, // 1 2 1 + PLAYER_VISIBLE_ITEM_6_PAD = 0x0196, // 1 1 1 + PLAYER_VISIBLE_ITEM_7_CREATOR = 0x0197, // 2 4 1 + PLAYER_VISIBLE_ITEM_7_0 = 0x0199, // 12 1 1 + PLAYER_VISIBLE_ITEM_7_PROPERTIES = 0x01A5, // 1 2 1 + PLAYER_VISIBLE_ITEM_7_PAD = 0x01A6, // 1 1 1 + PLAYER_VISIBLE_ITEM_8_CREATOR = 0x01A7, // 2 4 1 + PLAYER_VISIBLE_ITEM_8_0 = 0x01A9, // 12 1 1 + PLAYER_VISIBLE_ITEM_8_PROPERTIES = 0x01B5, // 1 2 1 + PLAYER_VISIBLE_ITEM_8_PAD = 0x01B6, // 1 1 1 + PLAYER_VISIBLE_ITEM_9_CREATOR = 0x01B7, // 2 4 1 + PLAYER_VISIBLE_ITEM_9_0 = 0x01B9, // 12 1 1 + PLAYER_VISIBLE_ITEM_9_PROPERTIES = 0x01C5, // 1 2 1 + PLAYER_VISIBLE_ITEM_9_PAD = 0x01C6, // 1 1 1 + PLAYER_VISIBLE_ITEM_10_CREATOR = 0x01C7, // 2 4 1 + PLAYER_VISIBLE_ITEM_10_0 = 0x01C9, // 12 1 1 + PLAYER_VISIBLE_ITEM_10_PROPERTIES = 0x01D5, // 1 2 1 + PLAYER_VISIBLE_ITEM_10_PAD = 0x01D6, // 1 1 1 + PLAYER_VISIBLE_ITEM_11_CREATOR = 0x01D7, // 2 4 1 + PLAYER_VISIBLE_ITEM_11_0 = 0x01D9, // 12 1 1 + PLAYER_VISIBLE_ITEM_11_PROPERTIES = 0x01E5, // 1 2 1 + PLAYER_VISIBLE_ITEM_11_PAD = 0x01E6, // 1 1 1 + PLAYER_VISIBLE_ITEM_12_CREATOR = 0x01E7, // 2 4 1 + PLAYER_VISIBLE_ITEM_12_0 = 0x01E9, // 12 1 1 + PLAYER_VISIBLE_ITEM_12_PROPERTIES = 0x01F5, // 1 2 1 + PLAYER_VISIBLE_ITEM_12_PAD = 0x01F6, // 1 1 1 + PLAYER_VISIBLE_ITEM_13_CREATOR = 0x01F7, // 2 4 1 + PLAYER_VISIBLE_ITEM_13_0 = 0x01F9, // 12 1 1 + PLAYER_VISIBLE_ITEM_13_PROPERTIES = 0x0205, // 1 2 1 + PLAYER_VISIBLE_ITEM_13_PAD = 0x0206, // 1 1 1 + PLAYER_VISIBLE_ITEM_14_CREATOR = 0x0207, // 2 4 1 + PLAYER_VISIBLE_ITEM_14_0 = 0x0209, // 12 1 1 + PLAYER_VISIBLE_ITEM_14_PROPERTIES = 0x0215, // 1 2 1 + PLAYER_VISIBLE_ITEM_14_PAD = 0x0216, // 1 1 1 + PLAYER_VISIBLE_ITEM_15_CREATOR = 0x0217, // 2 4 1 + PLAYER_VISIBLE_ITEM_15_0 = 0x0219, // 12 1 1 + PLAYER_VISIBLE_ITEM_15_PROPERTIES = 0x0225, // 1 2 1 + PLAYER_VISIBLE_ITEM_15_PAD = 0x0226, // 1 1 1 + PLAYER_VISIBLE_ITEM_16_CREATOR = 0x0227, // 2 4 1 + PLAYER_VISIBLE_ITEM_16_0 = 0x0229, // 12 1 1 + PLAYER_VISIBLE_ITEM_16_PROPERTIES = 0x0235, // 1 2 1 + PLAYER_VISIBLE_ITEM_16_PAD = 0x0236, // 1 1 1 + PLAYER_VISIBLE_ITEM_17_CREATOR = 0x0237, // 2 4 1 + PLAYER_VISIBLE_ITEM_17_0 = 0x0239, // 12 1 1 + PLAYER_VISIBLE_ITEM_17_PROPERTIES = 0x0245, // 1 2 1 + PLAYER_VISIBLE_ITEM_17_PAD = 0x0246, // 1 1 1 + PLAYER_VISIBLE_ITEM_18_CREATOR = 0x0247, // 2 4 1 + PLAYER_VISIBLE_ITEM_18_0 = 0x0249, // 12 1 1 + PLAYER_VISIBLE_ITEM_18_PROPERTIES = 0x0255, // 1 2 1 + PLAYER_VISIBLE_ITEM_18_PAD = 0x0256, // 1 1 1 + PLAYER_VISIBLE_ITEM_19_CREATOR = 0x0257, // 2 4 1 + PLAYER_VISIBLE_ITEM_19_0 = 0x0259, // 12 1 1 + PLAYER_VISIBLE_ITEM_19_PROPERTIES = 0x0265, // 1 2 1 + PLAYER_VISIBLE_ITEM_19_PAD = 0x0266, // 1 1 1 + PLAYER_CHOSEN_TITLE = 0x0267, // 1 1 1 + PLAYER_FIELD_INV_SLOT_HEAD = 0x0268, // 46 4 2 + PLAYER_FIELD_PACK_SLOT_1 = 0x0296, // 32 4 2 + PLAYER_FIELD_BANK_SLOT_1 = 0x02B6, // 56 4 2 + PLAYER_FIELD_BANKBAG_SLOT_1 = 0x02EE, // 14 4 2 + PLAYER_FIELD_VENDORBUYBACK_SLOT_1 = 0x02FC, // 24 4 2 + PLAYER_FIELD_KEYRING_SLOT_1 = 0x0314, // 64 4 2 + PLAYER_FARSIGHT = 0x0354, // 2 4 2 + PLAYER__FIELD_KNOWN_TITLES = 0x0356, // 2 4 2 + PLAYER_XP = 0x0358, // 1 1 2 + PLAYER_NEXT_LEVEL_XP = 0x0359, // 1 1 2 + PLAYER_SKILL_INFO_1_1 = 0x035A, // 384 2 2 + PLAYER_CHARACTER_POINTS1 = 0x04DA, // 1 1 2 + PLAYER_CHARACTER_POINTS2 = 0x04DB, // 1 1 2 + PLAYER_TRACK_CREATURES = 0x04DC, // 1 1 2 + PLAYER_TRACK_RESOURCES = 0x04DD, // 1 1 2 + PLAYER_BLOCK_PERCENTAGE = 0x04DE, // 1 3 2 + PLAYER_DODGE_PERCENTAGE = 0x04DF, // 1 3 2 + PLAYER_PARRY_PERCENTAGE = 0x04E0, // 1 3 2 + PLAYER_CRIT_PERCENTAGE = 0x04E1, // 1 3 2 + PLAYER_RANGED_CRIT_PERCENTAGE = 0x04E2, // 1 3 2 + PLAYER_OFFHAND_CRIT_PERCENTAGE = 0x04E3, // 1 3 2 + PLAYER_SPELL_CRIT_PERCENTAGE1 = 0x04E4, // 7 3 2 + + // custom + PLAYER_HOLY_SPELL_CRIT_PERCENTAGE = PLAYER_SPELL_CRIT_PERCENTAGE1+1, + PLAYER_FIRE_SPELL_CRIT_PERCENTAGE = PLAYER_SPELL_CRIT_PERCENTAGE1+2, + PLAYER_NATURE_SPELL_CRIT_PERCENTAGE = PLAYER_SPELL_CRIT_PERCENTAGE1+3, + PLAYER_FROST_SPELL_CRIT_PERCENTAGE = PLAYER_SPELL_CRIT_PERCENTAGE1+4, + PLAYER_SHADOW_SPELL_CRIT_PERCENTAGE = PLAYER_SPELL_CRIT_PERCENTAGE1+5, + PLAYER_ARCANE_SPELL_CRIT_PERCENTAGE = PLAYER_SPELL_CRIT_PERCENTAGE1+6, + + PLAYER_EXPLORED_ZONES_1 = 0x04EB, // 64 5 2 + PLAYER_REST_STATE_EXPERIENCE = 0x052B, // 1 1 2 + PLAYER_FIELD_COINAGE = 0x052C, // 1 1 2 + PLAYER_FIELD_MOD_DAMAGE_DONE_POS = 0x052D, // 7 1 2 + PLAYER_FIELD_MOD_DAMAGE_DONE_NEG = 0x0534, // 7 1 2 + PLAYER_FIELD_MOD_DAMAGE_DONE_PCT = 0x053B, // 7 1 2 + PLAYER_FIELD_MOD_HEALING_DONE_POS = 0x0542, // 1 1 2 + PLAYER_FIELD_MOD_TARGET_RESISTANCE = 0x0543, // 1 1 2 + PLAYER_FIELD_BYTES = 0x0544, // 1 5 2 + PLAYER_AMMO_ID = 0x0545, // 1 1 2 + PLAYER_SELF_RES_SPELL = 0x0546, // 1 1 2 + PLAYER_FIELD_PVP_MEDALS = 0x0547, // 1 1 2 + PLAYER_FIELD_BUYBACK_PRICE_1 = 0x0548, // 12 1 2 + PLAYER_FIELD_BUYBACK_TIMESTAMP_1 = 0x0554, // 12 1 2 + PLAYER_FIELD_KILLS = 0x0560, // 1 2 2 + PLAYER_FIELD_TODAY_CONTRIBUTION = 0x0561, // 1 1 2 + PLAYER_FIELD_YESTERDAY_CONTRIBUTION = 0x0562, // 1 1 2 + PLAYER_FIELD_LIFETIME_HONORBALE_KILLS = 0x0563, // 1 1 2 + PLAYER_FIELD_BYTES2 = 0x0564, // 1 5 2 + PLAYER_FIELD_WATCHED_FACTION_INDEX = 0x0565, // 1 1 2 + PLAYER_FIELD_COMBAT_RATING_1 = 0x0566, // 23 1 2 + + // custom + PLAYER_FIELD_ALL_WEAPONS_SKILL_RATING = PLAYER_FIELD_COMBAT_RATING_1, + PLAYER_FIELD_DEFENCE_RATING = PLAYER_FIELD_COMBAT_RATING_1+1, + PLAYER_FIELD_DODGE_RATING = PLAYER_FIELD_COMBAT_RATING_1+2, + PLAYER_FIELD_PARRY_RATING = PLAYER_FIELD_COMBAT_RATING_1+3, + PLAYER_FIELD_BLOCK_RATING = PLAYER_FIELD_COMBAT_RATING_1+4, + PLAYER_FIELD_MELEE_HIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+5, + PLAYER_FIELD_RANGED_HIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+6, + PLAYER_FIELD_SPELL_HIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+7, + PLAYER_FIELD_MELEE_CRIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+8, + PLAYER_FIELD_RANGED_CRIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+9, + PLAYER_FIELD_SPELL_CRIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+10, + PLAYER_FIELD_HIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+11, // unsure, was PLAYER_FIELD_UNK1_RATING + PLAYER_FIELD_CRIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+12, // unsure, was PLAYER_FIELD_UNK2_RATING + PLAYER_FIELD_UNK3_RATING = PLAYER_FIELD_COMBAT_RATING_1+13, + PLAYER_FIELD_UNK4_RATING = PLAYER_FIELD_COMBAT_RATING_1+14, + PLAYER_FIELD_UNK5_RATING = PLAYER_FIELD_COMBAT_RATING_1+15, + PLAYER_FIELD_RESILIENCE_RATING = PLAYER_FIELD_COMBAT_RATING_1+16, + PLAYER_FIELD_MELEE_HASTE_RATING = PLAYER_FIELD_COMBAT_RATING_1+17, + PLAYER_FIELD_RANGED_HASTE_RATING = PLAYER_FIELD_COMBAT_RATING_1+19, + PLAYER_FIELD_SPELL_HASTE_RATING = PLAYER_FIELD_COMBAT_RATING_1+20, + PLAYER_FIELD_MELEE_WEAPON_SKILL_RATING = PLAYER_FIELD_COMBAT_RATING_1+21, + PLAYER_FIELD_OFFHAND_WEAPON_SKILL_RATING = PLAYER_FIELD_COMBAT_RATING_1+22, + PLAYER_FIELD_RANGED_WEAPON_SKILL_RATING = PLAYER_FIELD_COMBAT_RATING_1+23, + + PLAYER_FIELD_ARENA_TEAM_INFO_1_1 = 0x057D, // 15 1 2 + + // custom + PLAYER_FIELD_ARENA_TEAM_ID_2v2 = PLAYER_FIELD_ARENA_TEAM_INFO_1_1, + PLAYER_FIELD_ARENA_TEAM_ID_3v3 = PLAYER_FIELD_ARENA_TEAM_INFO_1_1+5, + PLAYER_FIELD_ARENA_TEAM_ID_5v5 = PLAYER_FIELD_ARENA_TEAM_INFO_1_1+10, + + PLAYER_FIELD_HONOR_CURRENCY = 0x058C, // 1 1 2 + PLAYER_FIELD_ARENA_CURRENCY = 0x058D, // 1 1 2 + PLAYER_FIELD_MOD_MANA_REGEN = 0x058E, // 1 3 2 + PLAYER_FIELD_MOD_MANA_REGEN_INTERRUPT = 0x058F, // 1 3 2 + PLAYER_FIELD_MAX_LEVEL = 0x0590, // 1 1 2 + PLAYER_FIELD_DAILY_QUESTS_1 = 0x0591, // 10 1 2 + PLAYER_FIELD_PADDING = 0x059B, // 1 1 0 + PLAYER_END = 0x059C, }; enum EGameObjectFields { - OBJECT_FIELD_CREATED_BY = OBJECT_END + 0x00, - GAMEOBJECT_DISPLAYID = OBJECT_END + 0x02, - GAMEOBJECT_FLAGS = OBJECT_END + 0x03, - GAMEOBJECT_ROTATION = OBJECT_END + 0x04, - GAMEOBJECT_STATE = OBJECT_END + 0x08, - GAMEOBJECT_POS_X = OBJECT_END + 0x09, - GAMEOBJECT_POS_Y = OBJECT_END + 0x0A, - GAMEOBJECT_POS_Z = OBJECT_END + 0x0B, - GAMEOBJECT_FACING = OBJECT_END + 0x0C, - GAMEOBJECT_DYN_FLAGS = OBJECT_END + 0x0D, - GAMEOBJECT_FACTION = OBJECT_END + 0x0E, - GAMEOBJECT_TYPE_ID = OBJECT_END + 0x0F, - GAMEOBJECT_LEVEL = OBJECT_END + 0x10, - GAMEOBJECT_ARTKIT = OBJECT_END + 0x11, - GAMEOBJECT_ANIMPROGRESS = OBJECT_END + 0x12, - GAMEOBJECT_PADDING = OBJECT_END + 0x13, - GAMEOBJECT_END = OBJECT_END + 0x14, + OBJECT_FIELD_CREATED_BY = 0x0006, // 2 4 1 + GAMEOBJECT_DISPLAYID = 0x0008, // 1 1 1 + GAMEOBJECT_FLAGS = 0x0009, // 1 1 1 + GAMEOBJECT_ROTATION = 0x000A, // 4 3 1 + GAMEOBJECT_STATE = 0x000E, // 1 1 1 + GAMEOBJECT_POS_X = 0x000F, // 1 3 1 + GAMEOBJECT_POS_Y = 0x0010, // 1 3 1 + GAMEOBJECT_POS_Z = 0x0011, // 1 3 1 + GAMEOBJECT_FACING = 0x0012, // 1 3 1 + GAMEOBJECT_DYN_FLAGS = 0x0013, // 1 1 256 + GAMEOBJECT_FACTION = 0x0014, // 1 1 1 + GAMEOBJECT_TYPE_ID = 0x0015, // 1 1 1 + GAMEOBJECT_LEVEL = 0x0016, // 1 1 1 + GAMEOBJECT_ARTKIT = 0x0017, // 1 1 1 + GAMEOBJECT_ANIMPROGRESS = 0x0018, // 1 1 256 + GAMEOBJECT_PADDING = 0x0019, // 1 1 0 + GAMEOBJECT_END = 0x001A, }; enum EDynamicObjectFields { - DYNAMICOBJECT_CASTER = OBJECT_END + 0x00, - DYNAMICOBJECT_BYTES = OBJECT_END + 0x02, - DYNAMICOBJECT_SPELLID = OBJECT_END + 0x03, - DYNAMICOBJECT_RADIUS = OBJECT_END + 0x04, - DYNAMICOBJECT_POS_X = OBJECT_END + 0x05, - DYNAMICOBJECT_POS_Y = OBJECT_END + 0x06, - DYNAMICOBJECT_POS_Z = OBJECT_END + 0x07, - DYNAMICOBJECT_FACING = OBJECT_END + 0x08, - DYNAMICOBJECT_PAD = OBJECT_END + 0x09, - DYNAMICOBJECT_END = OBJECT_END + 0x0A, + DYNAMICOBJECT_CASTER = 0x0006, // 2 4 1 + DYNAMICOBJECT_BYTES = 0x0008, // 1 5 1 + DYNAMICOBJECT_SPELLID = 0x0009, // 1 1 1 + DYNAMICOBJECT_RADIUS = 0x000A, // 1 3 1 + DYNAMICOBJECT_POS_X = 0x000B, // 1 3 1 + DYNAMICOBJECT_POS_Y = 0x000C, // 1 3 1 + DYNAMICOBJECT_POS_Z = 0x000D, // 1 3 1 + DYNAMICOBJECT_FACING = 0x000E, // 1 3 1 + DYNAMICOBJECT_PAD = 0x000F, // 1 5 1 + DYNAMICOBJECT_END = 0x0010, }; enum ECorpseFields { - CORPSE_FIELD_OWNER = OBJECT_END + 0x00, - CORPSE_FIELD_FACING = OBJECT_END + 0x02, - CORPSE_FIELD_POS_X = OBJECT_END + 0x03, - CORPSE_FIELD_POS_Y = OBJECT_END + 0x04, - CORPSE_FIELD_POS_Z = OBJECT_END + 0x05, - CORPSE_FIELD_DISPLAY_ID = OBJECT_END + 0x06, - CORPSE_FIELD_ITEM = OBJECT_END + 0x07, // 19 - CORPSE_FIELD_BYTES_1 = OBJECT_END + 0x1A, - CORPSE_FIELD_BYTES_2 = OBJECT_END + 0x1B, - CORPSE_FIELD_GUILD = OBJECT_END + 0x1C, - CORPSE_FIELD_FLAGS = OBJECT_END + 0x1D, - CORPSE_FIELD_DYNAMIC_FLAGS = OBJECT_END + 0x1E, - CORPSE_FIELD_PAD = OBJECT_END + 0x1F, - CORPSE_END = OBJECT_END + 0x20, + CORPSE_FIELD_OWNER = 0x0006, // 2 4 1 + CORPSE_FIELD_FACING = 0x0008, // 1 3 1 + CORPSE_FIELD_POS_X = 0x0009, // 1 3 1 + CORPSE_FIELD_POS_Y = 0x000A, // 1 3 1 + CORPSE_FIELD_POS_Z = 0x000B, // 1 3 1 + CORPSE_FIELD_DISPLAY_ID = 0x000C, // 1 1 1 + CORPSE_FIELD_ITEM = 0x000D, // 19 1 1 + CORPSE_FIELD_BYTES_1 = 0x0020, // 1 5 1 + CORPSE_FIELD_BYTES_2 = 0x0021, // 1 5 1 + CORPSE_FIELD_GUILD = 0x0022, // 1 1 1 + CORPSE_FIELD_FLAGS = 0x0023, // 1 1 1 + CORPSE_FIELD_DYNAMIC_FLAGS = 0x0024, // 1 1 256 + CORPSE_FIELD_PAD = 0x0025, // 1 1 0 + CORPSE_END = 0x0026, }; #endif diff --git a/src/Client/World/WorldSession.cpp b/src/Client/World/WorldSession.cpp index 212dfb0..f9451ab 100644 --- a/src/Client/World/WorldSession.cpp +++ b/src/Client/World/WorldSession.cpp @@ -203,21 +203,22 @@ OpcodeHandler *WorldSession::_GetOpcodeHandlerTable() const {MSG_MOVE_STOP_SWIM, &WorldSession::_HandleMovementOpcode}, {MSG_MOVE_HEARTBEAT, &WorldSession::_HandleMovementOpcode}, {MSG_MOVE_FALL_LAND, &WorldSession::_HandleMovementOpcode}, - - {MSG_MOVE_TELEPORT_ACK, &WorldSession::_HandleTelePortAckOpcode}, + {MSG_MOVE_TELEPORT_ACK, &WorldSession::_HandleTelePortAckOpcode}, {SMSG_COMPRESSED_UPDATE_OBJECT, &WorldSession::_HandleCompressedUpdateObjectOpcode}, - {SMSG_UPDATE_OBJECT, &WorldSession::_HandleUpdateObjectOpcode}, - {SMSG_CAST_RESULT, &WorldSession::_HandleCastResultOpcode}, + {SMSG_UPDATE_OBJECT, &WorldSession::_HandleUpdateObjectOpcode}, + {SMSG_CAST_RESULT, &WorldSession::_HandleCastResultOpcode}, {SMSG_ITEM_QUERY_SINGLE_RESPONSE, &WorldSession::_HandleItemQuerySingleResponseOpcode}, {SMSG_DESTROY_OBJECT, &WorldSession::_HandleDestroyObjectOpcode}, {SMSG_INITIAL_SPELLS, &WorldSession::_HandleInitialSpellsOpcode}, - {SMSG_LEARNED_SPELL, &WorldSession::_HandleLearnedSpellOpcode}, - {SMSG_REMOVED_SPELL, &WorldSession::_HandleLearnedSpellOpcode}, - {SMSG_CHANNEL_LIST, &WorldSession::_HandleChannelListOpcode}, + {SMSG_LEARNED_SPELL, &WorldSession::_HandleLearnedSpellOpcode}, + {SMSG_REMOVED_SPELL, &WorldSession::_HandleLearnedSpellOpcode}, + {SMSG_CHANNEL_LIST, &WorldSession::_HandleChannelListOpcode}, {SMSG_EMOTE, &WorldSession::_HandleEmoteOpcode}, {SMSG_TEXT_EMOTE, &WorldSession::_HandleTextEmoteOpcode}, {SMSG_NEW_WORLD, &WorldSession::_HandleNewWorldOpcode}, {SMSG_LOGIN_VERIFY_WORLD, &WorldSession::_HandleLoginVerifyWorldOpcode}, + {SMSG_MOTD, &WorldSession::_HandleMotdOpcode}, + {SMSG_NOTIFICATION, &WorldSession::_HandleNotificationOpcode}, // table termination { 0, NULL } @@ -434,30 +435,31 @@ void WorldSession::_HandleMessageChatOpcode(WorldPacket& recvPacket) { uint8 type=0; uint32 lang=0; + uint64 source_guid=0; uint64 target_guid=0; uint32 msglen=0; + uint32 unk=0; std::string msg,channel=""; bool isCmd=false; recvPacket >> type >> lang; + recvPacket >> source_guid >> unk; // added in 2.1.0 + if (type == CHAT_MSG_CHANNEL) + { + recvPacket >> channel; // extract channel name + } + recvPacket >> target_guid >> msglen >> msg; std::string langname = GetDBMgr().GetLangName(lang); const char* ln = langname.c_str(); - - if (type == CHAT_MSG_CHANNEL) - { - recvPacket >> channel; // extract channel name - } - - recvPacket >> target_guid; std::string plrname; - if(target_guid) + if(source_guid) { - plrname=plrNameCache.GetName(target_guid); + plrname=plrNameCache.GetName(source_guid); if(plrname.empty()) { - SendQueryPlayerName(target_guid); + SendQueryPlayerName(source_guid); plrname="Unknown Entity"; } } @@ -465,10 +467,9 @@ void WorldSession::_HandleMessageChatOpcode(WorldPacket& recvPacket) GetInstance()->GetScripts()->variables.Set("@thismsg",toString(target_guid)); - if(type == CHAT_MSG_SAY || type == CHAT_MSG_YELL || type == CHAT_MSG_PARTY) - recvPacket >> target_guid; + DEBUG(logdebug("Chat packet recieved, type=%u lang=%u src="I64FMT" dst="I64FMT" chn='%s' len=%u", + type,lang,source_guid,target_guid,channel.c_str(),msglen)); - recvPacket >> msglen >> msg; if (type == CHAT_MSG_SYSTEM) { logcustom(0,WHITE,"SYSMSG: \"%s\"",msg.c_str()); @@ -584,8 +585,27 @@ void WorldSession::_HandleMessageChatOpcode(WorldPacket& recvPacket) } } } - } + +void WorldSession::_HandleMotdOpcode(WorldPacket& recvPacket) +{ + uint32 lines; + std::string line; + recvPacket >> lines; + for(uint32 i = 0; i < lines; i++) + { + recvPacket >> line; + logcustom(0,YELLOW,"MOTD: %s",line.c_str()); + } +} + +void WorldSession::_HandleNotificationOpcode(WorldPacket& recvPacket) +{ + std::string text; + recvPacket >> text; + logcustom(0,YELLOW,"NOTIFY: %s",text.c_str()); +} + void WorldSession::_HandleNameQueryResponseOpcode(WorldPacket& recvPacket) { uint64 pguid; @@ -887,3 +907,4 @@ void WorldSession::_HandleLoginVerifyWorldOpcode(WorldPacket& recvPacket) // TODO: delete world on LogoutComplete once implemented + diff --git a/src/Client/World/WorldSession.h b/src/Client/World/WorldSession.h index be40b8a..011f3bd 100644 --- a/src/Client/World/WorldSession.h +++ b/src/Client/World/WorldSession.h @@ -91,6 +91,8 @@ private: void _HandleTextEmoteOpcode(WorldPacket& recvPacket); void _HandleNewWorldOpcode(WorldPacket& recvPacket); void _HandleLoginVerifyWorldOpcode(WorldPacket& recvPacket); + void _HandleMotdOpcode(WorldPacket& recvPacket); + void _HandleNotificationOpcode(WorldPacket& recvPacket); void _MovementUpdate(uint8 objtypeid, uint64 guid, WorldPacket& recvPacket); // Helper for _HandleUpdateObjectOpcode void _ValuesUpdate(uint64 uguid, WorldPacket& recvPacket); // ...