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

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

View File

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

View File

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

View File

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

View File

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

View File

@ -11,7 +11,7 @@
#include "Item.h"
// increase this number whenever you change something that makes old files unusable
uint32 ITEMPROTOTYPES_CACHE_VERSION = 0x00000000;
uint32 ITEMPROTOTYPES_CACHE_VERSION = 0x00000001;
bool PlayerNameCache::AddInfo(uint64 guid, std::string name){
PlayerNameCacheItem *cacheItem=new PlayerNameCacheItem;
@ -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);
}
}

View File

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

View File

@ -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?
}
_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?
}

View File

@ -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
#endif

View File

@ -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;
}

View File

@ -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)

View File

@ -967,10 +967,61 @@ enum OpCodes
SMSG_UNKNOWN_918 = 918, // chat message: The party leader has attempted to reset the instance you are in. Please zone out to allow the instance to reset.
SMSG_UNKNOWN_919 = 919, // uint8(0)+uint32(0/1)+uint64(unk/guid)
SMSG_UNKNOWN_920 = 920, // notify message: This system is currently disabled.
// 921
// 922
// 923
// 924
SMSG_SET_COMBO_POINTS = 925, // set combo points
// 926
// 927
// 928
// 929
// 930
SMSG_SET_AURA_MULTIPLY = 931,
/*
packed_guid
block (can repeat):
uint8 index may be it's aura slot? (increments)
uint32 spellid
uint32 duration1 (full?)
uint32 duration2 (remaining?)
*/
SMSG_SET_AURA_SINGLE = 932,
/*
packed_guid
uint8 index may be it's aura slot? (increments)
uint32 spellid
uint32 duration1 (full?)
uint32 duration2 (remaining?)
*/
// 933
SMSG_CAST_SUCCESS = 934,
SMSG_UNKNOWN_935 = 935, // teleport/movement opcode
// 936
// 937
// 938
// 939
// 940
SMSG_UNKNOWN_941 = 941, // teleport/movement opcode
SMSG_UNKNOWN_942 = 942, // Everyone is Ready! (message)
// 943
// 944
// 945
// 946
// 947
// 948
// 949
// 950
// 951
CMSG_UNKNOWN_952 = 952, // response to 942 opcode
CMSG_REPORT_SPAM = 953, // Report Spam chat button
SMSG_REPORT_SPAM_RESPONSE = 954, // Complaint Registered. (message)
SMSG_ACTIVATE_SPAM_REPORTING = 955, // unk uint8
};
//if you add new opcode .. Do NOT forget to change the following define MAX_OPCODE_ID and also add new opcode to table in opcodes.cpp
#define MAX_OPCODE_ID 920
#define MAX_OPCODE_ID 955
/// Results of friend related commands
enum FriendsResult

File diff suppressed because it is too large Load Diff

View File

@ -16,346 +16,434 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "Common.h"
#ifndef _UPDATEFIELDS_AUTO_H
#define _UPDATEFIELDS_AUTO_H
// Auto generated for version 2.1.3, build 6898
enum EObjectFields
{
OBJECT_FIELD_GUID = 0x00, // Size:2
OBJECT_FIELD_TYPE = 0x02, // Size:1
OBJECT_FIELD_ENTRY = 0x03, // Size:1
OBJECT_FIELD_SCALE_X = 0x04, // Size:1
OBJECT_FIELD_PADDING = 0x05, // Size:1
OBJECT_END = 0x06,
OBJECT_FIELD_GUID = 0x0000, // 2 4 1
OBJECT_FIELD_TYPE = 0x0002, // 1 1 1
OBJECT_FIELD_ENTRY = 0x0003, // 1 1 1
OBJECT_FIELD_SCALE_X = 0x0004, // 1 3 1
OBJECT_FIELD_PADDING = 0x0005, // 1 1 0
OBJECT_END = 0x0006,
};
enum EItemFields
{
ITEM_FIELD_OWNER = OBJECT_END + 0x00, // Size:2
ITEM_FIELD_CONTAINED = OBJECT_END + 0x02, // Size:2
ITEM_FIELD_CREATOR = OBJECT_END + 0x04, // Size:2
ITEM_FIELD_GIFTCREATOR = OBJECT_END + 0x06, // Size:2
ITEM_FIELD_STACK_COUNT = OBJECT_END + 0x08, // Size:1
ITEM_FIELD_DURATION = OBJECT_END + 0x09, // Size:1
ITEM_FIELD_SPELL_CHARGES = OBJECT_END + 0x0A, // Size:5
ITEM_FIELD_SPELL_CHARGES_01 = OBJECT_END + 0x0B,
ITEM_FIELD_SPELL_CHARGES_02 = OBJECT_END + 0x0C,
ITEM_FIELD_SPELL_CHARGES_03 = OBJECT_END + 0x0D,
ITEM_FIELD_SPELL_CHARGES_04 = OBJECT_END + 0x0E,
ITEM_FIELD_FLAGS = OBJECT_END + 0x0F, // Size:1
ITEM_FIELD_ENCHANTMENT = OBJECT_END + 0x10, // count=33 This is 21 past
ITEM_FIELD_SOCKETS_ENCHANTMENT = OBJECT_END + 0x25, // + (3 sockets + 1 bonus) * 3 uint32 = 12
ITEM_FIELD_ENCHANTMENT_LAST = OBJECT_END + 0x30,
ITEM_FIELD_PROPERTY_SEED = OBJECT_END + 0x31, // Size:1
ITEM_FIELD_RANDOM_PROPERTIES_ID = OBJECT_END + 0x32, // Size:1
ITEM_FIELD_ITEM_TEXT_ID = OBJECT_END + 0x33, // Size:1
ITEM_FIELD_DURABILITY = OBJECT_END + 0x34, // Size:1
ITEM_FIELD_MAXDURABILITY = OBJECT_END + 0x35, // Size:1
ITEM_END = OBJECT_END + 0x36,
ITEM_FIELD_OWNER = 0x0006, // 2 4 1
ITEM_FIELD_CONTAINED = 0x0008, // 2 4 1
ITEM_FIELD_CREATOR = 0x000A, // 2 4 1
ITEM_FIELD_GIFTCREATOR = 0x000C, // 2 4 1
ITEM_FIELD_STACK_COUNT = 0x000E, // 1 1 20
ITEM_FIELD_DURATION = 0x000F, // 1 1 20
ITEM_FIELD_SPELL_CHARGES = 0x0010, // 5 1 20
ITEM_FIELD_FLAGS = 0x0015, // 1 1 1
/*
There is two types of enchantments: property based and suffix based.
Item can have only one of the two.
Suffix based linked to item.randomproperty_2 field and property based
to item.randomproperty_1 field (item prototype).
Suffix based enchantments sent to the client as negative value, in
addition they require ITEM_FIELD_SUFFIX_FACTOR field to be send in
order to calculate the bonus value. Property based enchantments are send
as positive values and do not require any aditional values since the bonuses
are already stored inside spellitemenchantment. Suffix based enchantments uses
6-8 fields in EnchantmentSlot while property based uses 8-10 in EnchantmentSlot.
*/
ITEM_FIELD_ENCHANTMENT = 0x0016, // 33 1 1
ITEM_FIELD_PROPERTY_SEED = 0x0037, // 1 1 1
ITEM_FIELD_SUFFIX_FACTOR = ITEM_FIELD_PROPERTY_SEED, //custom
ITEM_FIELD_RANDOM_PROPERTIES_ID = 0x0038, // 1 1 1
ITEM_FIELD_ITEM_TEXT_ID = 0x0039, // 1 1 4
ITEM_FIELD_DURABILITY = 0x003A, // 1 1 20
ITEM_FIELD_MAXDURABILITY = 0x003B, // 1 1 20
ITEM_END = 0x003C,
};
enum EContainerFields
{
CONTAINER_FIELD_NUM_SLOTS = ITEM_END + 0x00, // Size:1
CONTAINER_ALIGN_PAD = ITEM_END + 0x01, // Size:1
CONTAINER_FIELD_SLOT_1 = ITEM_END + 0x02, // count=72
CONTAINER_FIELD_SLOT_LAST = ITEM_END + 0x49,
CONTAINER_END = ITEM_END + 0x4A,
CONTAINER_FIELD_NUM_SLOTS = 0x003C, // 1 1 1
CONTAINER_ALIGN_PAD = 0x003D, // 1 5 0
CONTAINER_FIELD_SLOT_1 = 0x003E, // 72 4 1
CONTAINER_END = 0x0086,
};
enum EUnitFields
{
UNIT_FIELD_CHARM = 0x00 + OBJECT_END, // Size:2
UNIT_FIELD_SUMMON = 0x02 + OBJECT_END, // Size:2
UNIT_FIELD_CHARMEDBY = 0x04 + OBJECT_END, // Size:2
UNIT_FIELD_SUMMONEDBY = 0x06 + OBJECT_END, // Size:2
UNIT_FIELD_CREATEDBY = 0x08 + OBJECT_END, // Size:2
UNIT_FIELD_TARGET = 0x0A + OBJECT_END, // Size:2
UNIT_FIELD_PERSUADED = 0x0C + OBJECT_END, // Size:2
UNIT_FIELD_CHANNEL_OBJECT = 0x0E + OBJECT_END, // Size:2
UNIT_FIELD_HEALTH = 0x10 + OBJECT_END, // Size:1
UNIT_FIELD_POWER1 = 0x11 + OBJECT_END, // Size:1
UNIT_FIELD_POWER2 = 0x12 + OBJECT_END, // Size:1
UNIT_FIELD_POWER3 = 0x13 + OBJECT_END, // Size:1
UNIT_FIELD_POWER4 = 0x14 + OBJECT_END, // Size:1
UNIT_FIELD_POWER5 = 0x15 + OBJECT_END, // Size:1
UNIT_FIELD_MAXHEALTH = 0x16 + OBJECT_END, // Size:1
UNIT_FIELD_MAXPOWER1 = 0x17 + OBJECT_END, // Size:1
UNIT_FIELD_MAXPOWER2 = 0x18 + OBJECT_END, // Size:1
UNIT_FIELD_MAXPOWER3 = 0x19 + OBJECT_END, // Size:1
UNIT_FIELD_MAXPOWER4 = 0x1A + OBJECT_END, // Size:1
UNIT_FIELD_MAXPOWER5 = 0x1B + OBJECT_END, // Size:1
UNIT_FIELD_LEVEL = 0x1C + OBJECT_END, // Size:1
UNIT_FIELD_FACTIONTEMPLATE = 0x1D + OBJECT_END, // Size:1
UNIT_FIELD_BYTES_0 = 0x1E + OBJECT_END, // Size:1
UNIT_VIRTUAL_ITEM_SLOT_DISPLAY = 0x1F + OBJECT_END, // Size:3
UNIT_VIRTUAL_ITEM_SLOT_DISPLAY_01 = 0x20 + OBJECT_END,
UNIT_VIRTUAL_ITEM_SLOT_DISPLAY_02 = 0x21 + OBJECT_END,
UNIT_VIRTUAL_ITEM_INFO = 0x22 + OBJECT_END, // Size:6
UNIT_VIRTUAL_ITEM_INFO_01 = 0x23 + OBJECT_END,
UNIT_VIRTUAL_ITEM_INFO_02 = 0x24 + OBJECT_END,
UNIT_VIRTUAL_ITEM_INFO_03 = 0x25 + OBJECT_END,
UNIT_VIRTUAL_ITEM_INFO_04 = 0x26 + OBJECT_END,
UNIT_VIRTUAL_ITEM_INFO_05 = 0x27 + OBJECT_END,
UNIT_FIELD_FLAGS = 0x28 + OBJECT_END, // Size:1
UNIT_FIELD_FLAGS_2 = 0x29 + OBJECT_END, // Size:1
UNIT_FIELD_AURA = 0x2A + OBJECT_END, // Size:56
UNIT_FIELD_AURA_LAST = 0x63 + OBJECT_END,
UNIT_FIELD_AURAFLAGS = 0x62 + OBJECT_END, // Size:7
UNIT_FIELD_AURAFLAGS_01 = 0x63 + OBJECT_END,
UNIT_FIELD_AURAFLAGS_02 = 0x64 + OBJECT_END,
UNIT_FIELD_AURAFLAGS_03 = 0x65 + OBJECT_END,
UNIT_FIELD_AURAFLAGS_04 = 0x66 + OBJECT_END,
UNIT_FIELD_AURAFLAGS_05 = 0x67 + OBJECT_END,
UNIT_FIELD_AURAFLAGS_06 = 0x68 + OBJECT_END,
UNIT_FIELD_AURALEVELS = 0x69 + OBJECT_END, // Size:14
UNIT_FIELD_AURALEVELS_LAST = 0x76 + OBJECT_END,
UNIT_FIELD_AURAAPPLICATIONS = 0x77 + OBJECT_END, // Size:14
UNIT_FIELD_AURAAPPLICATIONS_LAST = 0x84 + OBJECT_END,
UNIT_FIELD_AURASTATE = 0x85 + OBJECT_END, // Size:1
UNIT_FIELD_BASEATTACKTIME = 0x86 + OBJECT_END, // Size:2
UNIT_FIELD_BASEATTACKTIME_01 = 0x87 + OBJECT_END,
UNIT_FIELD_OFFHANDATTACKTIME = 0x87 + OBJECT_END, // Size:2
UNIT_FIELD_RANGEDATTACKTIME = 0x88 + OBJECT_END, // Size:1
UNIT_FIELD_BOUNDINGRADIUS = 0x89 + OBJECT_END, // Size:1
UNIT_FIELD_COMBATREACH = 0x8A + OBJECT_END, // Size:1
UNIT_FIELD_DISPLAYID = 0x8B + OBJECT_END, // Size:1
UNIT_FIELD_NATIVEDISPLAYID = 0x8C + OBJECT_END, // Size:1
UNIT_FIELD_MOUNTDISPLAYID = 0x8D + OBJECT_END, // Size:1
UNIT_FIELD_MINDAMAGE = 0x8E + OBJECT_END, // Size:1
UNIT_FIELD_MAXDAMAGE = 0x8F + OBJECT_END, // Size:1
UNIT_FIELD_MINOFFHANDDAMAGE = 0x90 + OBJECT_END, // Size:1
UNIT_FIELD_MAXOFFHANDDAMAGE = 0x91 + OBJECT_END, // Size:1
UNIT_FIELD_BYTES_1 = 0x92 + OBJECT_END, // Size:1
UNIT_FIELD_PETNUMBER = 0x93 + OBJECT_END, // Size:1
UNIT_FIELD_PET_NAME_TIMESTAMP = 0x94 + OBJECT_END, // Size:1
UNIT_FIELD_PETEXPERIENCE = 0x95 + OBJECT_END, // Size:1
UNIT_FIELD_PETNEXTLEVELEXP = 0x96 + OBJECT_END, // Size:1
UNIT_DYNAMIC_FLAGS = 0x97 + OBJECT_END, // Size:1
UNIT_CHANNEL_SPELL = 0x98 + OBJECT_END, // Size:1
UNIT_MOD_CAST_SPEED = 0x99 + OBJECT_END, // Size:1
UNIT_CREATED_BY_SPELL = 0x9A + OBJECT_END, // Size:1
UNIT_NPC_FLAGS = 0x9B + OBJECT_END, // Size:1
UNIT_NPC_EMOTESTATE = 0x9C + OBJECT_END, // Size:1
UNIT_TRAINING_POINTS = 0x9D + OBJECT_END, // Size:1
UNIT_FIELD_STAT0 = 0x9E + OBJECT_END, // Size:1
UNIT_FIELD_STAT1 = 0x9F + OBJECT_END, // Size:1
UNIT_FIELD_STAT2 = 0xA0 + OBJECT_END, // Size:1
UNIT_FIELD_STAT3 = 0xA1 + OBJECT_END, // Size:1
UNIT_FIELD_STAT4 = 0xA2 + OBJECT_END, // Size:1
UNIT_FIELD_POSSTAT0 = 0xA3 + OBJECT_END, // Size:1
UNIT_FIELD_POSSTAT1 = 0xA4 + OBJECT_END, // Size:1
UNIT_FIELD_POSSTAT2 = 0xA5 + OBJECT_END, // Size:1
UNIT_FIELD_POSSTAT3 = 0xA6 + OBJECT_END, // Size:1
UNIT_FIELD_POSSTAT4 = 0xA7 + OBJECT_END, // Size:1
UNIT_FIELD_NEGSTAT0 = 0xA8 + OBJECT_END, // Size:1
UNIT_FIELD_NEGSTAT1 = 0xA9 + OBJECT_END, // Size:1
UNIT_FIELD_NEGSTAT2 = 0xAA + OBJECT_END, // Size:1
UNIT_FIELD_NEGSTAT3 = 0xAB + OBJECT_END, // Size:1
UNIT_FIELD_NEGSTAT4 = 0xAC + OBJECT_END, // Size:1
UNIT_FIELD_RESISTANCES = 0xAD + OBJECT_END, // Size:7
UNIT_FIELD_RESISTANCES_01 = 0xAE + OBJECT_END,
UNIT_FIELD_RESISTANCES_02 = 0xAF + OBJECT_END,
UNIT_FIELD_RESISTANCES_03 = 0xB0 + OBJECT_END,
UNIT_FIELD_RESISTANCES_04 = 0xB1 + OBJECT_END,
UNIT_FIELD_RESISTANCES_05 = 0xB2 + OBJECT_END,
UNIT_FIELD_RESISTANCES_06 = 0xB3 + OBJECT_END,
UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE = 0xB4 + OBJECT_END, // Size:7
UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE = 0xBB + OBJECT_END, // Size:7
UNIT_FIELD_BASE_MANA = 0xC2 + OBJECT_END, // Size:1
UNIT_FIELD_BASE_HEALTH = 0xC3 + OBJECT_END, // Size:1
UNIT_FIELD_BYTES_2 = 0xC4 + OBJECT_END, // Size:1
UNIT_FIELD_ATTACK_POWER = 0xC5 + OBJECT_END, // Size:1
UNIT_FIELD_ATTACK_POWER_MODS = 0xC6 + OBJECT_END, // Size:1
UNIT_FIELD_ATTACK_POWER_MULTIPLIER = 0xC7 + OBJECT_END, // Size:1
UNIT_FIELD_RANGED_ATTACK_POWER = 0xC8 + OBJECT_END, // Size:1
UNIT_FIELD_RANGED_ATTACK_POWER_MODS = 0xC9 + OBJECT_END, // Size:1
UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER = 0xCA + OBJECT_END, // Size:1
UNIT_FIELD_MINRANGEDDAMAGE = 0xCB + OBJECT_END, // Size:1
UNIT_FIELD_MAXRANGEDDAMAGE = 0xCC + OBJECT_END, // Size:1
UNIT_FIELD_POWER_COST_MODIFIER = 0xCD + OBJECT_END, // Size:7
UNIT_FIELD_POWER_COST_MODIFIER_01 = 0xCE + OBJECT_END,
UNIT_FIELD_POWER_COST_MODIFIER_02 = 0xCF + OBJECT_END,
UNIT_FIELD_POWER_COST_MODIFIER_03 = 0xD0 + OBJECT_END,
UNIT_FIELD_POWER_COST_MODIFIER_04 = 0xD1 + OBJECT_END,
UNIT_FIELD_POWER_COST_MODIFIER_05 = 0xD2 + OBJECT_END,
UNIT_FIELD_POWER_COST_MODIFIER_06 = 0xD3 + OBJECT_END,
UNIT_FIELD_POWER_COST_MULTIPLIER = 0xD4 + OBJECT_END, // Size:7
UNIT_FIELD_POWER_COST_MULTIPLIER_01 = 0xD5 + OBJECT_END,
UNIT_FIELD_POWER_COST_MULTIPLIER_02 = 0xD6 + OBJECT_END,
UNIT_FIELD_POWER_COST_MULTIPLIER_03 = 0xD7 + OBJECT_END,
UNIT_FIELD_POWER_COST_MULTIPLIER_04 = 0xD8 + OBJECT_END,
UNIT_FIELD_POWER_COST_MULTIPLIER_05 = 0xD9 + OBJECT_END,
UNIT_FIELD_POWER_COST_MULTIPLIER_06 = 0xDA + OBJECT_END,
UNIT_FIELD_PADDING = 0xDB + OBJECT_END,
UNIT_END = 0xDC + OBJECT_END,
UNIT_FIELD_CHARM = 0x0006, // 2 4 1
UNIT_FIELD_SUMMON = 0x0008, // 2 4 1
UNIT_FIELD_CHARMEDBY = 0x000A, // 2 4 1
UNIT_FIELD_SUMMONEDBY = 0x000C, // 2 4 1
UNIT_FIELD_CREATEDBY = 0x000E, // 2 4 1
UNIT_FIELD_TARGET = 0x0010, // 2 4 1
UNIT_FIELD_PERSUADED = 0x0012, // 2 4 1
UNIT_FIELD_CHANNEL_OBJECT = 0x0014, // 2 4 1
UNIT_FIELD_HEALTH = 0x0016, // 1 1 256
UNIT_FIELD_POWER1 = 0x0017, // 1 1 1
UNIT_FIELD_POWER2 = 0x0018, // 1 1 1
UNIT_FIELD_POWER3 = 0x0019, // 1 1 1
UNIT_FIELD_POWER4 = 0x001A, // 1 1 1
UNIT_FIELD_POWER5 = 0x001B, // 1 1 1
UNIT_FIELD_MAXHEALTH = 0x001C, // 1 1 256
UNIT_FIELD_MAXPOWER1 = 0x001D, // 1 1 1
UNIT_FIELD_MAXPOWER2 = 0x001E, // 1 1 1
UNIT_FIELD_MAXPOWER3 = 0x001F, // 1 1 1
UNIT_FIELD_MAXPOWER4 = 0x0020, // 1 1 1
UNIT_FIELD_MAXPOWER5 = 0x0021, // 1 1 1
UNIT_FIELD_LEVEL = 0x0022, // 1 1 1
UNIT_FIELD_FACTIONTEMPLATE = 0x0023, // 1 1 1
UNIT_FIELD_BYTES_0 = 0x0024, // 1 5 1
UNIT_VIRTUAL_ITEM_SLOT_DISPLAY = 0x0025, // 3 1 1
UNIT_VIRTUAL_ITEM_INFO = 0x0028, // 6 5 1
UNIT_FIELD_FLAGS = 0x002E, // 1 1 1
UNIT_FIELD_FLAGS_2 = 0x002F, // 1 1 1
UNIT_FIELD_AURA = 0x0030, // 56 1 1
UNIT_FIELD_AURAFLAGS = 0x0068, // 7 5 1
UNIT_FIELD_AURALEVELS = 0x006F, // 14 5 1
UNIT_FIELD_AURAAPPLICATIONS = 0x007D, // 14 5 1
UNIT_FIELD_AURASTATE = 0x008B, // 1 1 1
UNIT_FIELD_BASEATTACKTIME = 0x008C, // 2 1 1
UNIT_FIELD_OFFHANDATTACKTIME = UNIT_FIELD_BASEATTACKTIME + 1, // custom
UNIT_FIELD_RANGEDATTACKTIME = 0x008E, // 1 1 2
UNIT_FIELD_BOUNDINGRADIUS = 0x008F, // 1 3 1
UNIT_FIELD_COMBATREACH = 0x0090, // 1 3 1
UNIT_FIELD_DISPLAYID = 0x0091, // 1 1 1
UNIT_FIELD_NATIVEDISPLAYID = 0x0092, // 1 1 1
UNIT_FIELD_MOUNTDISPLAYID = 0x0093, // 1 1 1
UNIT_FIELD_MINDAMAGE = 0x0094, // 1 3 38
UNIT_FIELD_MAXDAMAGE = 0x0095, // 1 3 38
UNIT_FIELD_MINOFFHANDDAMAGE = 0x0096, // 1 3 38
UNIT_FIELD_MAXOFFHANDDAMAGE = 0x0097, // 1 3 38
UNIT_FIELD_BYTES_1 = 0x0098, // 1 5 1
UNIT_FIELD_PETNUMBER = 0x0099, // 1 1 1
UNIT_FIELD_PET_NAME_TIMESTAMP = 0x009A, // 1 1 1
UNIT_FIELD_PETEXPERIENCE = 0x009B, // 1 1 4
UNIT_FIELD_PETNEXTLEVELEXP = 0x009C, // 1 1 4
UNIT_DYNAMIC_FLAGS = 0x009D, // 1 1 256
UNIT_CHANNEL_SPELL = 0x009E, // 1 1 1
UNIT_MOD_CAST_SPEED = 0x009F, // 1 3 1
UNIT_CREATED_BY_SPELL = 0x00A0, // 1 1 1
UNIT_NPC_FLAGS = 0x00A1, // 1 1 1
UNIT_NPC_EMOTESTATE = 0x00A2, // 1 1 1
UNIT_TRAINING_POINTS = 0x00A3, // 1 2 4
UNIT_FIELD_STAT0 = 0x00A4, // 1 1 6
UNIT_FIELD_STAT1 = 0x00A5, // 1 1 6
UNIT_FIELD_STAT2 = 0x00A6, // 1 1 6
UNIT_FIELD_STAT3 = 0x00A7, // 1 1 6
UNIT_FIELD_STAT4 = 0x00A8, // 1 1 6
UNIT_FIELD_POSSTAT0 = 0x00A9, // 1 1 6
UNIT_FIELD_POSSTAT1 = 0x00AA, // 1 1 6
UNIT_FIELD_POSSTAT2 = 0x00AB, // 1 1 6
UNIT_FIELD_POSSTAT3 = 0x00AC, // 1 1 6
UNIT_FIELD_POSSTAT4 = 0x00AD, // 1 1 6
UNIT_FIELD_NEGSTAT0 = 0x00AE, // 1 1 6
UNIT_FIELD_NEGSTAT1 = 0x00AF, // 1 1 6
UNIT_FIELD_NEGSTAT2 = 0x00B0, // 1 1 6
UNIT_FIELD_NEGSTAT3 = 0x00B1, // 1 1 6
UNIT_FIELD_NEGSTAT4 = 0x00B2, // 1 1 6
UNIT_FIELD_RESISTANCES = 0x00B3, // 7 1 38
UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE = 0x00BA, // 7 1 6
UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE = 0x00C1, // 7 1 6
UNIT_FIELD_BASE_MANA = 0x00C8, // 1 1 6
UNIT_FIELD_BASE_HEALTH = 0x00C9, // 1 1 6
UNIT_FIELD_BYTES_2 = 0x00CA, // 1 5 1
UNIT_FIELD_ATTACK_POWER = 0x00CB, // 1 1 6
UNIT_FIELD_ATTACK_POWER_MODS = 0x00CC, // 1 2 6
UNIT_FIELD_ATTACK_POWER_MULTIPLIER = 0x00CD, // 1 3 6
UNIT_FIELD_RANGED_ATTACK_POWER = 0x00CE, // 1 1 6
UNIT_FIELD_RANGED_ATTACK_POWER_MODS = 0x00CF, // 1 2 6
UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER = 0x00D0, // 1 3 6
UNIT_FIELD_MINRANGEDDAMAGE = 0x00D1, // 1 3 6
UNIT_FIELD_MAXRANGEDDAMAGE = 0x00D2, // 1 3 6
UNIT_FIELD_POWER_COST_MODIFIER = 0x00D3, // 7 1 6
UNIT_FIELD_POWER_COST_MULTIPLIER = 0x00DA, // 7 3 6
UNIT_FIELD_PADDING = 0x00E1, // 1 1 0
UNIT_END = 0x00E2,
PLAYER_DUEL_ARBITER = 0x00 + UNIT_END, // Size:2
PLAYER_FLAGS = 0x02 + UNIT_END, // Size:1
PLAYER_GUILDID = 0x03 + UNIT_END, // Size:1
PLAYER_GUILDRANK = 0x04 + UNIT_END, // Size:1
PLAYER_BYTES = 0x05 + UNIT_END, // Size:1
PLAYER_BYTES_2 = 0x06 + UNIT_END, // Size:1
PLAYER_BYTES_3 = 0x07 + UNIT_END, // Size:1
PLAYER_DUEL_TEAM = 0x08 + UNIT_END, // Size:1
PLAYER_GUILD_TIMESTAMP = 0x09 + UNIT_END, // Size:1
PLAYER_QUEST_LOG_1_1 = 0x0A + UNIT_END, // count = 25
PLAYER_QUEST_LOG_1_2 = 0x0B + UNIT_END,
PLAYER_QUEST_LOG_1_3 = 0x0C + UNIT_END,
PLAYER_QUEST_LOG_LAST_1 = 0x52 + UNIT_END,
PLAYER_QUEST_LOG_LAST_2 = 0x53 + UNIT_END,
PLAYER_QUEST_LOG_LAST_3 = 0x54 + UNIT_END,
PLAYER_VISIBLE_ITEM_1_CREATOR = 0x55 + UNIT_END, // Size:2, count = 19
PLAYER_VISIBLE_ITEM_1_0 = 0x57 + UNIT_END, // Size:12
PLAYER_VISIBLE_ITEM_1_PROPERTIES = 0x63 + UNIT_END, // Size:1
PLAYER_VISIBLE_ITEM_1_PAD = 0x64 + UNIT_END, // Size:1
PLAYER_VISIBLE_ITEM_LAST_CREATOR = 0x175 + UNIT_END,
PLAYER_VISIBLE_ITEM_LAST_0 = 0x177 + UNIT_END,
PLAYER_VISIBLE_ITEM_LAST_PROPERTIES = 0x183 + UNIT_END,
PLAYER_VISIBLE_ITEM_LAST_PAD = 0x184 + UNIT_END,
PLAYER_CHOSEN_TITLE = 0x185 + UNIT_END, // Size:1
PLAYER_FIELD_INV_SLOT_HEAD = 0x186 + UNIT_END, // Size:46
PLAYER_FIELD_PACK_SLOT_1 = 0x1B4 + UNIT_END, // Size:32
PLAYER_FIELD_PACK_SLOT_LAST = 0x1D3 + UNIT_END,
PLAYER_FIELD_BANK_SLOT_1 = 0x1D4 + UNIT_END, // Size:56
PLAYER_FIELD_BANK_SLOT_LAST = 0x20B + UNIT_END,
PLAYER_FIELD_BANKBAG_SLOT_1 = 0x20C + UNIT_END, // Size:14
PLAYER_FIELD_BANKBAG_SLOT_LAST = 0x219 + UNIT_END,
PLAYER_FIELD_VENDORBUYBACK_SLOT_1 = 0x21A + UNIT_END, // Size:24
PLAYER_FIELD_VENDORBUYBACK_SLOT_LAST = 0x231 + UNIT_END,
PLAYER_FIELD_KEYRING_SLOT_1 = 0x232 + UNIT_END, // Size:64
PLAYER_FIELD_KEYRING_SLOT_LAST = 0x271 + UNIT_END,
PLAYER_FARSIGHT = 0x272 + UNIT_END, // Size:2
PLAYER_FIELD_COMBO_TARGET = 0x274 + UNIT_END, // Size:2
PLAYER_FIELD_KNOWN_TITLES = 0x276 + UNIT_END, // Size:2
PLAYER_XP = 0x278 + UNIT_END, // Size:1
PLAYER_NEXT_LEVEL_XP = 0x279 + UNIT_END, // Size:1
PLAYER_SKILL_INFO_1_1 = 0x27A + UNIT_END, // Size:384
PLAYER_CHARACTER_POINTS1 = 0x3FA + UNIT_END, // Size:1
PLAYER_CHARACTER_POINTS2 = 0x3FB + UNIT_END, // Size:1
PLAYER_TRACK_CREATURES = 0x3FC + UNIT_END, // Size:1
PLAYER_TRACK_RESOURCES = 0x3FD + UNIT_END, // Size:1
PLAYER_BLOCK_PERCENTAGE = 0x3FE + UNIT_END, // Size:1
PLAYER_DODGE_PERCENTAGE = 0x3FF + UNIT_END, // Size:1
PLAYER_PARRY_PERCENTAGE = 0x400 + UNIT_END, // Size:1
PLAYER_CRIT_PERCENTAGE = 0x401 + UNIT_END, // Size:1
PLAYER_RANGED_CRIT_PERCENTAGE = 0x402 + UNIT_END, // Size:1
PLAYER_OFFHAND_CRIT_PERCENTAGE = 0x403 + UNIT_END, // Size:1
PLAYER_SPELL_CRIT_PERCENTAGE1 = 0x404 + UNIT_END, // Size:7
PLAYER_HOLY_SPELL_CRIT_PERCENTAGE = 0x405 + UNIT_END, // custom
PLAYER_FIRE_SPELL_CRIT_PERCENTAGE = 0x406 + UNIT_END, // custom
PLAYER_NATURE_SPELL_CRIT_PERCENTAGE = 0x407 + UNIT_END, // custom
PLAYER_FROST_SPELL_CRIT_PERCENTAGE = 0x408 + UNIT_END, // custom
PLAYER_SHADOW_SPELL_CRIT_PERCENTAGE = 0x409 + UNIT_END, // custom
PLAYER_ARCANE_SPELL_CRIT_PERCENTAGE = 0x40A + UNIT_END, // custom
PLAYER_EXPLORED_ZONES_1 = 0x40B + UNIT_END, // Size:64
PLAYER_REST_STATE_EXPERIENCE = 0x44B + UNIT_END, // Size:1
PLAYER_FIELD_COINAGE = 0x44C + UNIT_END, // Size:1
PLAYER_FIELD_MOD_DAMAGE_DONE_POS = 0x44D + UNIT_END, // Size:7
PLAYER_FIELD_MOD_DAMAGE_DONE_NEG = 0x454 + UNIT_END, // Size:7
PLAYER_FIELD_MOD_DAMAGE_DONE_PCT = 0x45B + UNIT_END, // Size:7
PLAYER_FIELD_MOD_HEALING_DONE_POS = 0x462 + UNIT_END, // Size:1
PLAYER_FIELD_MOD_TARGET_RESISTANCE = 0x463 + UNIT_END, // Size:1
PLAYER_FIELD_BYTES = 0x464 + UNIT_END, // Size:1
PLAYER_AMMO_ID = 0x465 + UNIT_END, // Size:1
PLAYER_SELF_RES_SPELL = 0x466 + UNIT_END, // Size:1
PLAYER_FIELD_PVP_MEDALS = 0x467 + UNIT_END, // Size:1
PLAYER_FIELD_BUYBACK_PRICE_1 = 0x468 + UNIT_END, // count=12
PLAYER_FIELD_BUYBACK_PRICE_LAST = 0x473 + UNIT_END,
PLAYER_FIELD_BUYBACK_TIMESTAMP_1 = 0x474 + UNIT_END, // count=12
PLAYER_FIELD_BUYBACK_TIMESTAMP_LAST = 0x47A + UNIT_END,
PLAYER_FIELD_KILLS = 0x480 + UNIT_END, // Size:1 // ((uint16)kills_today<<16) | (uint16)kills_yesterday)
PLAYER_FIELD_HONOR_TODAY = 0x481 + UNIT_END, // Size:1
PLAYER_FIELD_HONOR_YESTERDAY = 0x482 + UNIT_END, // Size:1
PLAYER_FIELD_KILLS_LIFETIME = 0x483 + UNIT_END, // Size:1
PLAYER_FIELD_BYTES2 = 0x484 + UNIT_END, // Size:1
PLAYER_FIELD_WATCHED_FACTION_INDEX = 0x485 + UNIT_END, // Size:1
PLAYER_FIELD_COMBAT_RATING_1 = 0x486 + UNIT_END, // Size:23
PLAYER_FIELD_ALL_WEAPONS_SKILL_RATING = 0x486 + UNIT_END, // custom
PLAYER_FIELD_DEFENCE_RATING = 0x487 + UNIT_END, // custom
PLAYER_FIELD_DODGE_RATING = 0x488 + UNIT_END, // custom
PLAYER_FIELD_PARRY_RATING = 0x489 + UNIT_END, // custom
PLAYER_FIELD_BLOCK_RATING = 0x48A + UNIT_END, // custom
PLAYER_FIELD_MELEE_HIT_RATING = 0x48B + UNIT_END, // custom
PLAYER_FIELD_RANGED_HIT_RATING = 0x48C + UNIT_END, // custom
PLAYER_FIELD_SPELL_HIT_RATING = 0x48D + UNIT_END, // custom
PLAYER_FIELD_MELEE_CRIT_RATING = 0x48E + UNIT_END, // custom
PLAYER_FIELD_RANGED_CRIT_RATING = 0x48F + UNIT_END, // custom
PLAYER_FIELD_SPELL_CRIT_RATING = 0x490 + UNIT_END, // custom
PLAYER_FIELD_HIT_RATING = 0x491 + UNIT_END, // unsure, was PLAYER_FIELD_UNK1_RATING
PLAYER_FIELD_CRIT_RATING = 0x492 + UNIT_END, // unsure, was PLAYER_FIELD_UNK2_RATING
PLAYER_FIELD_UNK3_RATING = 0x493 + UNIT_END, // custom
PLAYER_FIELD_UNK4_RATING = 0x494 + UNIT_END, // custom
PLAYER_FIELD_UNK5_RATING = 0x495 + UNIT_END, // custom
PLAYER_FIELD_RESILIENCE_RATING = 0x496 + UNIT_END, // custom
PLAYER_FIELD_MELEE_HASTE_RATING = 0x497 + UNIT_END, // custom
PLAYER_FIELD_RANGED_HASTE_RATING = 0x498 + UNIT_END, // custom
PLAYER_FIELD_UNK6_RATING = 0x499 + UNIT_END, // custom
PLAYER_FIELD_MELEE_WEAPON_SKILL_RATING = 0x49A + UNIT_END, // custom
PLAYER_FIELD_UNK7_RATING = 0x49B + UNIT_END, // custom
PLAYER_FIELD_RANGED_WEAPON_SKILL_RATING = 0x49C + UNIT_END, // custom
PLAYER_FIELD_ARENA_TEAM_INFO_1_1 = 0x49D + UNIT_END, // Size:9
PLAYER_FIELD_HONOR_CURRENCY = 0x4A6 + UNIT_END, // Size:1
PLAYER_FIELD_ARENA_CURRENCY = 0x4A7 + UNIT_END, // Size:1
PLAYER_FIELD_MOD_MANA_REGEN = 0x4A8 + UNIT_END, // Size:1
PLAYER_FIELD_MOD_MANA_REGEN_INTERRUPT = 0x4A9 + UNIT_END, // Size:1
PLAYER_FIELD_MAX_LEVEL = 0x4AA + UNIT_END, // Size:1
PLAYER_FIELD_PADDING = 0x4AB + UNIT_END, // Size:1
PLAYER_END = 0x4AC + UNIT_END,
PLAYER_DUEL_ARBITER = 0x00E2, // 2 4 1
PLAYER_FLAGS = 0x00E4, // 1 1 1
PLAYER_GUILDID = 0x00E5, // 1 1 1
PLAYER_GUILDRANK = 0x00E6, // 1 1 1
PLAYER_BYTES = 0x00E7, // 1 5 1
PLAYER_BYTES_2 = 0x00E8, // 1 5 1
PLAYER_BYTES_3 = 0x00E9, // 1 5 1
PLAYER_DUEL_TEAM = 0x00EA, // 1 1 1
PLAYER_GUILD_TIMESTAMP = 0x00EB, // 1 1 1
PLAYER_QUEST_LOG_1_1 = 0x00EC, // 1 1 64
PLAYER_QUEST_LOG_1_2 = 0x00ED, // 2 1 2
PLAYER_QUEST_LOG_2_1 = 0x00EF, // 1 1 64
PLAYER_QUEST_LOG_2_2 = 0x00F0, // 2 1 2
PLAYER_QUEST_LOG_3_1 = 0x00F2, // 1 1 64
PLAYER_QUEST_LOG_3_2 = 0x00F3, // 2 1 2
PLAYER_QUEST_LOG_4_1 = 0x00F5, // 1 1 64
PLAYER_QUEST_LOG_4_2 = 0x00F6, // 2 1 2
PLAYER_QUEST_LOG_5_1 = 0x00F8, // 1 1 64
PLAYER_QUEST_LOG_5_2 = 0x00F9, // 2 1 2
PLAYER_QUEST_LOG_6_1 = 0x00FB, // 1 1 64
PLAYER_QUEST_LOG_6_2 = 0x00FC, // 2 1 2
PLAYER_QUEST_LOG_7_1 = 0x00FE, // 1 1 64
PLAYER_QUEST_LOG_7_2 = 0x00FF, // 2 1 2
PLAYER_QUEST_LOG_8_1 = 0x0101, // 1 1 64
PLAYER_QUEST_LOG_8_2 = 0x0102, // 2 1 2
PLAYER_QUEST_LOG_9_1 = 0x0104, // 1 1 64
PLAYER_QUEST_LOG_9_2 = 0x0105, // 2 1 2
PLAYER_QUEST_LOG_10_1 = 0x0107, // 1 1 64
PLAYER_QUEST_LOG_10_2 = 0x0108, // 2 1 2
PLAYER_QUEST_LOG_11_1 = 0x010A, // 1 1 64
PLAYER_QUEST_LOG_11_2 = 0x010B, // 2 1 2
PLAYER_QUEST_LOG_12_1 = 0x010D, // 1 1 64
PLAYER_QUEST_LOG_12_2 = 0x010E, // 2 1 2
PLAYER_QUEST_LOG_13_1 = 0x0110, // 1 1 64
PLAYER_QUEST_LOG_13_2 = 0x0111, // 2 1 2
PLAYER_QUEST_LOG_14_1 = 0x0113, // 1 1 64
PLAYER_QUEST_LOG_14_2 = 0x0114, // 2 1 2
PLAYER_QUEST_LOG_15_1 = 0x0116, // 1 1 64
PLAYER_QUEST_LOG_15_2 = 0x0117, // 2 1 2
PLAYER_QUEST_LOG_16_1 = 0x0119, // 1 1 64
PLAYER_QUEST_LOG_16_2 = 0x011A, // 2 1 2
PLAYER_QUEST_LOG_17_1 = 0x011C, // 1 1 64
PLAYER_QUEST_LOG_17_2 = 0x011D, // 2 1 2
PLAYER_QUEST_LOG_18_1 = 0x011F, // 1 1 64
PLAYER_QUEST_LOG_18_2 = 0x0120, // 2 1 2
PLAYER_QUEST_LOG_19_1 = 0x0122, // 1 1 64
PLAYER_QUEST_LOG_19_2 = 0x0123, // 2 1 2
PLAYER_QUEST_LOG_20_1 = 0x0125, // 1 1 64
PLAYER_QUEST_LOG_20_2 = 0x0126, // 2 1 2
PLAYER_QUEST_LOG_21_1 = 0x0128, // 1 1 64
PLAYER_QUEST_LOG_21_2 = 0x0129, // 2 1 2
PLAYER_QUEST_LOG_22_1 = 0x012B, // 1 1 64
PLAYER_QUEST_LOG_22_2 = 0x012C, // 2 1 2
PLAYER_QUEST_LOG_23_1 = 0x012E, // 1 1 64
PLAYER_QUEST_LOG_23_2 = 0x012F, // 2 1 2
PLAYER_QUEST_LOG_24_1 = 0x0131, // 1 1 64
PLAYER_QUEST_LOG_24_2 = 0x0132, // 2 1 2
PLAYER_QUEST_LOG_25_1 = 0x0134, // 1 1 64
PLAYER_QUEST_LOG_25_2 = 0x0135, // 2 1 2
PLAYER_VISIBLE_ITEM_1_CREATOR = 0x0137, // 2 4 1
PLAYER_VISIBLE_ITEM_1_0 = 0x0139, // 12 1 1
PLAYER_VISIBLE_ITEM_1_PROPERTIES = 0x0145, // 1 2 1
PLAYER_VISIBLE_ITEM_1_PAD = 0x0146, // 1 1 1
PLAYER_VISIBLE_ITEM_2_CREATOR = 0x0147, // 2 4 1
PLAYER_VISIBLE_ITEM_2_0 = 0x0149, // 12 1 1
PLAYER_VISIBLE_ITEM_2_PROPERTIES = 0x0155, // 1 2 1
PLAYER_VISIBLE_ITEM_2_PAD = 0x0156, // 1 1 1
PLAYER_VISIBLE_ITEM_3_CREATOR = 0x0157, // 2 4 1
PLAYER_VISIBLE_ITEM_3_0 = 0x0159, // 12 1 1
PLAYER_VISIBLE_ITEM_3_PROPERTIES = 0x0165, // 1 2 1
PLAYER_VISIBLE_ITEM_3_PAD = 0x0166, // 1 1 1
PLAYER_VISIBLE_ITEM_4_CREATOR = 0x0167, // 2 4 1
PLAYER_VISIBLE_ITEM_4_0 = 0x0169, // 12 1 1
PLAYER_VISIBLE_ITEM_4_PROPERTIES = 0x0175, // 1 2 1
PLAYER_VISIBLE_ITEM_4_PAD = 0x0176, // 1 1 1
PLAYER_VISIBLE_ITEM_5_CREATOR = 0x0177, // 2 4 1
PLAYER_VISIBLE_ITEM_5_0 = 0x0179, // 12 1 1
PLAYER_VISIBLE_ITEM_5_PROPERTIES = 0x0185, // 1 2 1
PLAYER_VISIBLE_ITEM_5_PAD = 0x0186, // 1 1 1
PLAYER_VISIBLE_ITEM_6_CREATOR = 0x0187, // 2 4 1
PLAYER_VISIBLE_ITEM_6_0 = 0x0189, // 12 1 1
PLAYER_VISIBLE_ITEM_6_PROPERTIES = 0x0195, // 1 2 1
PLAYER_VISIBLE_ITEM_6_PAD = 0x0196, // 1 1 1
PLAYER_VISIBLE_ITEM_7_CREATOR = 0x0197, // 2 4 1
PLAYER_VISIBLE_ITEM_7_0 = 0x0199, // 12 1 1
PLAYER_VISIBLE_ITEM_7_PROPERTIES = 0x01A5, // 1 2 1
PLAYER_VISIBLE_ITEM_7_PAD = 0x01A6, // 1 1 1
PLAYER_VISIBLE_ITEM_8_CREATOR = 0x01A7, // 2 4 1
PLAYER_VISIBLE_ITEM_8_0 = 0x01A9, // 12 1 1
PLAYER_VISIBLE_ITEM_8_PROPERTIES = 0x01B5, // 1 2 1
PLAYER_VISIBLE_ITEM_8_PAD = 0x01B6, // 1 1 1
PLAYER_VISIBLE_ITEM_9_CREATOR = 0x01B7, // 2 4 1
PLAYER_VISIBLE_ITEM_9_0 = 0x01B9, // 12 1 1
PLAYER_VISIBLE_ITEM_9_PROPERTIES = 0x01C5, // 1 2 1
PLAYER_VISIBLE_ITEM_9_PAD = 0x01C6, // 1 1 1
PLAYER_VISIBLE_ITEM_10_CREATOR = 0x01C7, // 2 4 1
PLAYER_VISIBLE_ITEM_10_0 = 0x01C9, // 12 1 1
PLAYER_VISIBLE_ITEM_10_PROPERTIES = 0x01D5, // 1 2 1
PLAYER_VISIBLE_ITEM_10_PAD = 0x01D6, // 1 1 1
PLAYER_VISIBLE_ITEM_11_CREATOR = 0x01D7, // 2 4 1
PLAYER_VISIBLE_ITEM_11_0 = 0x01D9, // 12 1 1
PLAYER_VISIBLE_ITEM_11_PROPERTIES = 0x01E5, // 1 2 1
PLAYER_VISIBLE_ITEM_11_PAD = 0x01E6, // 1 1 1
PLAYER_VISIBLE_ITEM_12_CREATOR = 0x01E7, // 2 4 1
PLAYER_VISIBLE_ITEM_12_0 = 0x01E9, // 12 1 1
PLAYER_VISIBLE_ITEM_12_PROPERTIES = 0x01F5, // 1 2 1
PLAYER_VISIBLE_ITEM_12_PAD = 0x01F6, // 1 1 1
PLAYER_VISIBLE_ITEM_13_CREATOR = 0x01F7, // 2 4 1
PLAYER_VISIBLE_ITEM_13_0 = 0x01F9, // 12 1 1
PLAYER_VISIBLE_ITEM_13_PROPERTIES = 0x0205, // 1 2 1
PLAYER_VISIBLE_ITEM_13_PAD = 0x0206, // 1 1 1
PLAYER_VISIBLE_ITEM_14_CREATOR = 0x0207, // 2 4 1
PLAYER_VISIBLE_ITEM_14_0 = 0x0209, // 12 1 1
PLAYER_VISIBLE_ITEM_14_PROPERTIES = 0x0215, // 1 2 1
PLAYER_VISIBLE_ITEM_14_PAD = 0x0216, // 1 1 1
PLAYER_VISIBLE_ITEM_15_CREATOR = 0x0217, // 2 4 1
PLAYER_VISIBLE_ITEM_15_0 = 0x0219, // 12 1 1
PLAYER_VISIBLE_ITEM_15_PROPERTIES = 0x0225, // 1 2 1
PLAYER_VISIBLE_ITEM_15_PAD = 0x0226, // 1 1 1
PLAYER_VISIBLE_ITEM_16_CREATOR = 0x0227, // 2 4 1
PLAYER_VISIBLE_ITEM_16_0 = 0x0229, // 12 1 1
PLAYER_VISIBLE_ITEM_16_PROPERTIES = 0x0235, // 1 2 1
PLAYER_VISIBLE_ITEM_16_PAD = 0x0236, // 1 1 1
PLAYER_VISIBLE_ITEM_17_CREATOR = 0x0237, // 2 4 1
PLAYER_VISIBLE_ITEM_17_0 = 0x0239, // 12 1 1
PLAYER_VISIBLE_ITEM_17_PROPERTIES = 0x0245, // 1 2 1
PLAYER_VISIBLE_ITEM_17_PAD = 0x0246, // 1 1 1
PLAYER_VISIBLE_ITEM_18_CREATOR = 0x0247, // 2 4 1
PLAYER_VISIBLE_ITEM_18_0 = 0x0249, // 12 1 1
PLAYER_VISIBLE_ITEM_18_PROPERTIES = 0x0255, // 1 2 1
PLAYER_VISIBLE_ITEM_18_PAD = 0x0256, // 1 1 1
PLAYER_VISIBLE_ITEM_19_CREATOR = 0x0257, // 2 4 1
PLAYER_VISIBLE_ITEM_19_0 = 0x0259, // 12 1 1
PLAYER_VISIBLE_ITEM_19_PROPERTIES = 0x0265, // 1 2 1
PLAYER_VISIBLE_ITEM_19_PAD = 0x0266, // 1 1 1
PLAYER_CHOSEN_TITLE = 0x0267, // 1 1 1
PLAYER_FIELD_INV_SLOT_HEAD = 0x0268, // 46 4 2
PLAYER_FIELD_PACK_SLOT_1 = 0x0296, // 32 4 2
PLAYER_FIELD_BANK_SLOT_1 = 0x02B6, // 56 4 2
PLAYER_FIELD_BANKBAG_SLOT_1 = 0x02EE, // 14 4 2
PLAYER_FIELD_VENDORBUYBACK_SLOT_1 = 0x02FC, // 24 4 2
PLAYER_FIELD_KEYRING_SLOT_1 = 0x0314, // 64 4 2
PLAYER_FARSIGHT = 0x0354, // 2 4 2
PLAYER__FIELD_KNOWN_TITLES = 0x0356, // 2 4 2
PLAYER_XP = 0x0358, // 1 1 2
PLAYER_NEXT_LEVEL_XP = 0x0359, // 1 1 2
PLAYER_SKILL_INFO_1_1 = 0x035A, // 384 2 2
PLAYER_CHARACTER_POINTS1 = 0x04DA, // 1 1 2
PLAYER_CHARACTER_POINTS2 = 0x04DB, // 1 1 2
PLAYER_TRACK_CREATURES = 0x04DC, // 1 1 2
PLAYER_TRACK_RESOURCES = 0x04DD, // 1 1 2
PLAYER_BLOCK_PERCENTAGE = 0x04DE, // 1 3 2
PLAYER_DODGE_PERCENTAGE = 0x04DF, // 1 3 2
PLAYER_PARRY_PERCENTAGE = 0x04E0, // 1 3 2
PLAYER_CRIT_PERCENTAGE = 0x04E1, // 1 3 2
PLAYER_RANGED_CRIT_PERCENTAGE = 0x04E2, // 1 3 2
PLAYER_OFFHAND_CRIT_PERCENTAGE = 0x04E3, // 1 3 2
PLAYER_SPELL_CRIT_PERCENTAGE1 = 0x04E4, // 7 3 2
// custom
PLAYER_HOLY_SPELL_CRIT_PERCENTAGE = PLAYER_SPELL_CRIT_PERCENTAGE1+1,
PLAYER_FIRE_SPELL_CRIT_PERCENTAGE = PLAYER_SPELL_CRIT_PERCENTAGE1+2,
PLAYER_NATURE_SPELL_CRIT_PERCENTAGE = PLAYER_SPELL_CRIT_PERCENTAGE1+3,
PLAYER_FROST_SPELL_CRIT_PERCENTAGE = PLAYER_SPELL_CRIT_PERCENTAGE1+4,
PLAYER_SHADOW_SPELL_CRIT_PERCENTAGE = PLAYER_SPELL_CRIT_PERCENTAGE1+5,
PLAYER_ARCANE_SPELL_CRIT_PERCENTAGE = PLAYER_SPELL_CRIT_PERCENTAGE1+6,
PLAYER_EXPLORED_ZONES_1 = 0x04EB, // 64 5 2
PLAYER_REST_STATE_EXPERIENCE = 0x052B, // 1 1 2
PLAYER_FIELD_COINAGE = 0x052C, // 1 1 2
PLAYER_FIELD_MOD_DAMAGE_DONE_POS = 0x052D, // 7 1 2
PLAYER_FIELD_MOD_DAMAGE_DONE_NEG = 0x0534, // 7 1 2
PLAYER_FIELD_MOD_DAMAGE_DONE_PCT = 0x053B, // 7 1 2
PLAYER_FIELD_MOD_HEALING_DONE_POS = 0x0542, // 1 1 2
PLAYER_FIELD_MOD_TARGET_RESISTANCE = 0x0543, // 1 1 2
PLAYER_FIELD_BYTES = 0x0544, // 1 5 2
PLAYER_AMMO_ID = 0x0545, // 1 1 2
PLAYER_SELF_RES_SPELL = 0x0546, // 1 1 2
PLAYER_FIELD_PVP_MEDALS = 0x0547, // 1 1 2
PLAYER_FIELD_BUYBACK_PRICE_1 = 0x0548, // 12 1 2
PLAYER_FIELD_BUYBACK_TIMESTAMP_1 = 0x0554, // 12 1 2
PLAYER_FIELD_KILLS = 0x0560, // 1 2 2
PLAYER_FIELD_TODAY_CONTRIBUTION = 0x0561, // 1 1 2
PLAYER_FIELD_YESTERDAY_CONTRIBUTION = 0x0562, // 1 1 2
PLAYER_FIELD_LIFETIME_HONORBALE_KILLS = 0x0563, // 1 1 2
PLAYER_FIELD_BYTES2 = 0x0564, // 1 5 2
PLAYER_FIELD_WATCHED_FACTION_INDEX = 0x0565, // 1 1 2
PLAYER_FIELD_COMBAT_RATING_1 = 0x0566, // 23 1 2
// custom
PLAYER_FIELD_ALL_WEAPONS_SKILL_RATING = PLAYER_FIELD_COMBAT_RATING_1,
PLAYER_FIELD_DEFENCE_RATING = PLAYER_FIELD_COMBAT_RATING_1+1,
PLAYER_FIELD_DODGE_RATING = PLAYER_FIELD_COMBAT_RATING_1+2,
PLAYER_FIELD_PARRY_RATING = PLAYER_FIELD_COMBAT_RATING_1+3,
PLAYER_FIELD_BLOCK_RATING = PLAYER_FIELD_COMBAT_RATING_1+4,
PLAYER_FIELD_MELEE_HIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+5,
PLAYER_FIELD_RANGED_HIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+6,
PLAYER_FIELD_SPELL_HIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+7,
PLAYER_FIELD_MELEE_CRIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+8,
PLAYER_FIELD_RANGED_CRIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+9,
PLAYER_FIELD_SPELL_CRIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+10,
PLAYER_FIELD_HIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+11, // unsure, was PLAYER_FIELD_UNK1_RATING
PLAYER_FIELD_CRIT_RATING = PLAYER_FIELD_COMBAT_RATING_1+12, // unsure, was PLAYER_FIELD_UNK2_RATING
PLAYER_FIELD_UNK3_RATING = PLAYER_FIELD_COMBAT_RATING_1+13,
PLAYER_FIELD_UNK4_RATING = PLAYER_FIELD_COMBAT_RATING_1+14,
PLAYER_FIELD_UNK5_RATING = PLAYER_FIELD_COMBAT_RATING_1+15,
PLAYER_FIELD_RESILIENCE_RATING = PLAYER_FIELD_COMBAT_RATING_1+16,
PLAYER_FIELD_MELEE_HASTE_RATING = PLAYER_FIELD_COMBAT_RATING_1+17,
PLAYER_FIELD_RANGED_HASTE_RATING = PLAYER_FIELD_COMBAT_RATING_1+19,
PLAYER_FIELD_SPELL_HASTE_RATING = PLAYER_FIELD_COMBAT_RATING_1+20,
PLAYER_FIELD_MELEE_WEAPON_SKILL_RATING = PLAYER_FIELD_COMBAT_RATING_1+21,
PLAYER_FIELD_OFFHAND_WEAPON_SKILL_RATING = PLAYER_FIELD_COMBAT_RATING_1+22,
PLAYER_FIELD_RANGED_WEAPON_SKILL_RATING = PLAYER_FIELD_COMBAT_RATING_1+23,
PLAYER_FIELD_ARENA_TEAM_INFO_1_1 = 0x057D, // 15 1 2
// custom
PLAYER_FIELD_ARENA_TEAM_ID_2v2 = PLAYER_FIELD_ARENA_TEAM_INFO_1_1,
PLAYER_FIELD_ARENA_TEAM_ID_3v3 = PLAYER_FIELD_ARENA_TEAM_INFO_1_1+5,
PLAYER_FIELD_ARENA_TEAM_ID_5v5 = PLAYER_FIELD_ARENA_TEAM_INFO_1_1+10,
PLAYER_FIELD_HONOR_CURRENCY = 0x058C, // 1 1 2
PLAYER_FIELD_ARENA_CURRENCY = 0x058D, // 1 1 2
PLAYER_FIELD_MOD_MANA_REGEN = 0x058E, // 1 3 2
PLAYER_FIELD_MOD_MANA_REGEN_INTERRUPT = 0x058F, // 1 3 2
PLAYER_FIELD_MAX_LEVEL = 0x0590, // 1 1 2
PLAYER_FIELD_DAILY_QUESTS_1 = 0x0591, // 10 1 2
PLAYER_FIELD_PADDING = 0x059B, // 1 1 0
PLAYER_END = 0x059C,
};
enum EGameObjectFields
{
OBJECT_FIELD_CREATED_BY = OBJECT_END + 0x00,
GAMEOBJECT_DISPLAYID = OBJECT_END + 0x02,
GAMEOBJECT_FLAGS = OBJECT_END + 0x03,
GAMEOBJECT_ROTATION = OBJECT_END + 0x04,
GAMEOBJECT_STATE = OBJECT_END + 0x08,
GAMEOBJECT_POS_X = OBJECT_END + 0x09,
GAMEOBJECT_POS_Y = OBJECT_END + 0x0A,
GAMEOBJECT_POS_Z = OBJECT_END + 0x0B,
GAMEOBJECT_FACING = OBJECT_END + 0x0C,
GAMEOBJECT_DYN_FLAGS = OBJECT_END + 0x0D,
GAMEOBJECT_FACTION = OBJECT_END + 0x0E,
GAMEOBJECT_TYPE_ID = OBJECT_END + 0x0F,
GAMEOBJECT_LEVEL = OBJECT_END + 0x10,
GAMEOBJECT_ARTKIT = OBJECT_END + 0x11,
GAMEOBJECT_ANIMPROGRESS = OBJECT_END + 0x12,
GAMEOBJECT_PADDING = OBJECT_END + 0x13,
GAMEOBJECT_END = OBJECT_END + 0x14,
OBJECT_FIELD_CREATED_BY = 0x0006, // 2 4 1
GAMEOBJECT_DISPLAYID = 0x0008, // 1 1 1
GAMEOBJECT_FLAGS = 0x0009, // 1 1 1
GAMEOBJECT_ROTATION = 0x000A, // 4 3 1
GAMEOBJECT_STATE = 0x000E, // 1 1 1
GAMEOBJECT_POS_X = 0x000F, // 1 3 1
GAMEOBJECT_POS_Y = 0x0010, // 1 3 1
GAMEOBJECT_POS_Z = 0x0011, // 1 3 1
GAMEOBJECT_FACING = 0x0012, // 1 3 1
GAMEOBJECT_DYN_FLAGS = 0x0013, // 1 1 256
GAMEOBJECT_FACTION = 0x0014, // 1 1 1
GAMEOBJECT_TYPE_ID = 0x0015, // 1 1 1
GAMEOBJECT_LEVEL = 0x0016, // 1 1 1
GAMEOBJECT_ARTKIT = 0x0017, // 1 1 1
GAMEOBJECT_ANIMPROGRESS = 0x0018, // 1 1 256
GAMEOBJECT_PADDING = 0x0019, // 1 1 0
GAMEOBJECT_END = 0x001A,
};
enum EDynamicObjectFields
{
DYNAMICOBJECT_CASTER = OBJECT_END + 0x00,
DYNAMICOBJECT_BYTES = OBJECT_END + 0x02,
DYNAMICOBJECT_SPELLID = OBJECT_END + 0x03,
DYNAMICOBJECT_RADIUS = OBJECT_END + 0x04,
DYNAMICOBJECT_POS_X = OBJECT_END + 0x05,
DYNAMICOBJECT_POS_Y = OBJECT_END + 0x06,
DYNAMICOBJECT_POS_Z = OBJECT_END + 0x07,
DYNAMICOBJECT_FACING = OBJECT_END + 0x08,
DYNAMICOBJECT_PAD = OBJECT_END + 0x09,
DYNAMICOBJECT_END = OBJECT_END + 0x0A,
DYNAMICOBJECT_CASTER = 0x0006, // 2 4 1
DYNAMICOBJECT_BYTES = 0x0008, // 1 5 1
DYNAMICOBJECT_SPELLID = 0x0009, // 1 1 1
DYNAMICOBJECT_RADIUS = 0x000A, // 1 3 1
DYNAMICOBJECT_POS_X = 0x000B, // 1 3 1
DYNAMICOBJECT_POS_Y = 0x000C, // 1 3 1
DYNAMICOBJECT_POS_Z = 0x000D, // 1 3 1
DYNAMICOBJECT_FACING = 0x000E, // 1 3 1
DYNAMICOBJECT_PAD = 0x000F, // 1 5 1
DYNAMICOBJECT_END = 0x0010,
};
enum ECorpseFields
{
CORPSE_FIELD_OWNER = OBJECT_END + 0x00,
CORPSE_FIELD_FACING = OBJECT_END + 0x02,
CORPSE_FIELD_POS_X = OBJECT_END + 0x03,
CORPSE_FIELD_POS_Y = OBJECT_END + 0x04,
CORPSE_FIELD_POS_Z = OBJECT_END + 0x05,
CORPSE_FIELD_DISPLAY_ID = OBJECT_END + 0x06,
CORPSE_FIELD_ITEM = OBJECT_END + 0x07, // 19
CORPSE_FIELD_BYTES_1 = OBJECT_END + 0x1A,
CORPSE_FIELD_BYTES_2 = OBJECT_END + 0x1B,
CORPSE_FIELD_GUILD = OBJECT_END + 0x1C,
CORPSE_FIELD_FLAGS = OBJECT_END + 0x1D,
CORPSE_FIELD_DYNAMIC_FLAGS = OBJECT_END + 0x1E,
CORPSE_FIELD_PAD = OBJECT_END + 0x1F,
CORPSE_END = OBJECT_END + 0x20,
CORPSE_FIELD_OWNER = 0x0006, // 2 4 1
CORPSE_FIELD_FACING = 0x0008, // 1 3 1
CORPSE_FIELD_POS_X = 0x0009, // 1 3 1
CORPSE_FIELD_POS_Y = 0x000A, // 1 3 1
CORPSE_FIELD_POS_Z = 0x000B, // 1 3 1
CORPSE_FIELD_DISPLAY_ID = 0x000C, // 1 1 1
CORPSE_FIELD_ITEM = 0x000D, // 19 1 1
CORPSE_FIELD_BYTES_1 = 0x0020, // 1 5 1
CORPSE_FIELD_BYTES_2 = 0x0021, // 1 5 1
CORPSE_FIELD_GUILD = 0x0022, // 1 1 1
CORPSE_FIELD_FLAGS = 0x0023, // 1 1 1
CORPSE_FIELD_DYNAMIC_FLAGS = 0x0024, // 1 1 256
CORPSE_FIELD_PAD = 0x0025, // 1 1 0
CORPSE_END = 0x0026,
};
#endif

View File

@ -203,21 +203,22 @@ OpcodeHandler *WorldSession::_GetOpcodeHandlerTable() const
{MSG_MOVE_STOP_SWIM, &WorldSession::_HandleMovementOpcode},
{MSG_MOVE_HEARTBEAT, &WorldSession::_HandleMovementOpcode},
{MSG_MOVE_FALL_LAND, &WorldSession::_HandleMovementOpcode},
{MSG_MOVE_TELEPORT_ACK, &WorldSession::_HandleTelePortAckOpcode},
{MSG_MOVE_TELEPORT_ACK, &WorldSession::_HandleTelePortAckOpcode},
{SMSG_COMPRESSED_UPDATE_OBJECT, &WorldSession::_HandleCompressedUpdateObjectOpcode},
{SMSG_UPDATE_OBJECT, &WorldSession::_HandleUpdateObjectOpcode},
{SMSG_CAST_RESULT, &WorldSession::_HandleCastResultOpcode},
{SMSG_UPDATE_OBJECT, &WorldSession::_HandleUpdateObjectOpcode},
{SMSG_CAST_RESULT, &WorldSession::_HandleCastResultOpcode},
{SMSG_ITEM_QUERY_SINGLE_RESPONSE, &WorldSession::_HandleItemQuerySingleResponseOpcode},
{SMSG_DESTROY_OBJECT, &WorldSession::_HandleDestroyObjectOpcode},
{SMSG_INITIAL_SPELLS, &WorldSession::_HandleInitialSpellsOpcode},
{SMSG_LEARNED_SPELL, &WorldSession::_HandleLearnedSpellOpcode},
{SMSG_REMOVED_SPELL, &WorldSession::_HandleLearnedSpellOpcode},
{SMSG_CHANNEL_LIST, &WorldSession::_HandleChannelListOpcode},
{SMSG_LEARNED_SPELL, &WorldSession::_HandleLearnedSpellOpcode},
{SMSG_REMOVED_SPELL, &WorldSession::_HandleLearnedSpellOpcode},
{SMSG_CHANNEL_LIST, &WorldSession::_HandleChannelListOpcode},
{SMSG_EMOTE, &WorldSession::_HandleEmoteOpcode},
{SMSG_TEXT_EMOTE, &WorldSession::_HandleTextEmoteOpcode},
{SMSG_NEW_WORLD, &WorldSession::_HandleNewWorldOpcode},
{SMSG_LOGIN_VERIFY_WORLD, &WorldSession::_HandleLoginVerifyWorldOpcode},
{SMSG_MOTD, &WorldSession::_HandleMotdOpcode},
{SMSG_NOTIFICATION, &WorldSession::_HandleNotificationOpcode},
// table termination
{ 0, NULL }
@ -434,30 +435,31 @@ void WorldSession::_HandleMessageChatOpcode(WorldPacket& recvPacket)
{
uint8 type=0;
uint32 lang=0;
uint64 source_guid=0;
uint64 target_guid=0;
uint32 msglen=0;
uint32 unk=0;
std::string msg,channel="";
bool isCmd=false;
recvPacket >> type >> lang;
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

View File

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