* fixed an compile error that suddendly showed up in StormLib Linux Port. WTF?
* included bLumas patch for 3.0.8 as it compiles fine and doesn't crash on startup on Linux * testing required!
This commit is contained in:
parent
f11a1112be
commit
1c697b84c0
@ -68,8 +68,8 @@ charname=Pseuwow
|
||||
|
||||
|
||||
// Client emulation configuration
|
||||
ClientVersion=2.4.3
|
||||
ClientBuild=8606
|
||||
ClientVersion=3.0.8
|
||||
ClientBuild=9506
|
||||
ClientLanguage=enUS
|
||||
// or change to enGB, deDE, ...
|
||||
|
||||
|
||||
@ -80,7 +80,7 @@ DEBUG(logdebug("Trying to open file %s",MeshFile->getFileName()));
|
||||
|
||||
|
||||
MeshFile->read(&header,sizeof(ModelHeader));
|
||||
if ((header.version[0] < 4 || header.version[0] > 7) || header.version[1] != 1 || header.version[2] != 0 || header.version[3] != 0) {
|
||||
if (header.version[0] != 8 || header.version[1] != 1 || header.version[2] != 0 || header.version[3] != 0) {
|
||||
printf("Wrong header! File version doesn't match or file is not a M2 file.");
|
||||
return 0;
|
||||
}
|
||||
@ -119,33 +119,37 @@ for(u32 i =0;i<header.nVertices;i++)
|
||||
}
|
||||
DEBUG(logdebug("Read %u/%u Vertices",M2MVertices.size(),header.nVertices));
|
||||
|
||||
//Views == Sets of vertices. Usage yet unknown. Global data
|
||||
if(M2MViews.size()>0)
|
||||
M2MViews.clear();
|
||||
ModelView tempM2MView;
|
||||
MeshFile->seek(header.ofsViews);
|
||||
for(u32 i =0;i<header.nViews;i++)
|
||||
//Views (skins) == Sets of vertices. Usage yet unknown. Global data
|
||||
|
||||
std::string SkinName = MeshFile->getFileName();
|
||||
SkinName = SkinName.substr(0, SkinName.length()-3) + "00.skin"; // FIX ME (and stuffextract) ! as we need more skins
|
||||
io::IReadFile* SkinFile = io::createReadFile(SkinName.c_str());
|
||||
if (!SkinFile)
|
||||
{
|
||||
MeshFile->read(&tempM2MView,sizeof(ModelView));
|
||||
M2MViews.push_back(tempM2MView);
|
||||
printf("Error! Skin file not found: %s", SkinName.c_str());
|
||||
return 0;
|
||||
}
|
||||
//std::cout << "Read "<<M2MViews.size()<<"/"<<header.nViews<<" Views\n";
|
||||
|
||||
ModelView currentView;
|
||||
SkinFile->read(¤tView, sizeof(ModelView));
|
||||
|
||||
//std::cout << "Skins "<<header.nViews<<" (views)\n";
|
||||
|
||||
DEBUG(logdebug("Using View 0 for all further operations"));
|
||||
DEBUG(logdebug("This View has %u Submeshes",M2MViews[0].nSub));
|
||||
DEBUG(logdebug("This View has %u Submeshes",currentView.nSub));
|
||||
|
||||
//Vertex indices of a specific view.Local to View 0
|
||||
if(M2MIndices.size()>0)
|
||||
M2MIndices.clear();
|
||||
|
||||
u16 tempM2Index;
|
||||
MeshFile->seek(M2MViews[0].ofsIndex);
|
||||
for(u32 i =0;i<M2MViews[0].nIndex;i++)
|
||||
SkinFile->seek(currentView.ofsIndex);
|
||||
for(u32 i =0;i<currentView.nIndex;i++)
|
||||
{
|
||||
MeshFile->read(&tempM2Index,sizeof(u16));
|
||||
SkinFile->read(&tempM2Index,sizeof(u16));
|
||||
M2MIndices.push_back(tempM2Index);
|
||||
}
|
||||
DEBUG(logdebug("Read %u/%u Indices",M2MIndices.size(),M2MViews[0].nIndex));
|
||||
DEBUG(logdebug("Read %u/%u Indices",M2MIndices.size(),currentView.nIndex));
|
||||
|
||||
|
||||
//Triangles. Data Points point to the Vertex Indices, not the vertices themself. 3 Points = 1 Triangle, Local to View 0
|
||||
@ -153,26 +157,26 @@ if(M2MTriangles.size()>0)
|
||||
M2MTriangles.clear();
|
||||
|
||||
u16 tempM2Triangle;
|
||||
MeshFile->seek(M2MViews[0].ofsTris);
|
||||
for(u32 i =0;i<M2MViews[0].nTris;i++)
|
||||
SkinFile->seek(currentView.ofsTris);
|
||||
for(u32 i =0;i<currentView.nTris;i++)
|
||||
{
|
||||
MeshFile->read(&tempM2Triangle,sizeof(u16));
|
||||
SkinFile->read(&tempM2Triangle,sizeof(u16));
|
||||
M2MTriangles.push_back(tempM2Triangle);
|
||||
}
|
||||
DEBUG(logdebug("Read %u/%u Triangles",M2MTriangles.size(),M2MViews[0].nTris));
|
||||
DEBUG(logdebug("Read %u/%u Triangles",M2MTriangles.size(),currentView.nTris));
|
||||
//Submeshes, Local to View 0
|
||||
if(M2MSubmeshes.size()>0)
|
||||
M2MSubmeshes.clear();
|
||||
|
||||
ModelViewSubmesh tempM2Submesh;
|
||||
MeshFile->seek(M2MViews[0].ofsSub);
|
||||
for(u32 i =0;i<M2MViews[0].nSub;i++)
|
||||
SkinFile->seek(currentView.ofsSub);
|
||||
for(u32 i =0;i<currentView.nSub;i++)
|
||||
{
|
||||
MeshFile->read(&tempM2Submesh,sizeof(ModelViewSubmesh));
|
||||
SkinFile->read(&tempM2Submesh,sizeof(ModelViewSubmesh));
|
||||
M2MSubmeshes.push_back(tempM2Submesh);
|
||||
// std::cout<< "Submesh " <<i<<" ID "<<tempM2Submesh.meshpartId<<" starts at V/T "<<tempM2Submesh.ofsVertex<<"/"<<tempM2Submesh.ofsTris<<" and has "<<tempM2Submesh.nVertex<<"/"<<tempM2Submesh.nTris<<" V/T\n";
|
||||
}
|
||||
DEBUG(logdebug("Read %u/%u Submeshes",M2MSubmeshes.size(),M2MViews[0].nSub));
|
||||
DEBUG(logdebug("Read %u/%u Submeshes",M2MSubmeshes.size(),currentView.nSub));
|
||||
|
||||
//Texture units. Local to view 0
|
||||
TextureUnit tempM2TexUnit;
|
||||
@ -180,10 +184,10 @@ if(!M2MTextureUnit.empty())
|
||||
{
|
||||
M2MTextureUnit.clear();
|
||||
}
|
||||
MeshFile->seek(M2MViews[0].ofsTex);
|
||||
for(u32 i=0;i<M2MViews[0].nTex;i++)
|
||||
SkinFile->seek(currentView.ofsTex);
|
||||
for(u32 i=0;i<currentView.nTex;i++)
|
||||
{
|
||||
MeshFile->read(&tempM2TexUnit,sizeof(TextureUnit));
|
||||
SkinFile->read(&tempM2TexUnit,sizeof(TextureUnit));
|
||||
M2MTextureUnit.push_back(tempM2TexUnit);
|
||||
DEBUG(logdebug(" TexUnit %u: Submesh: %u %u Render Flag: %u TextureUnitNumber: %u %u TTU: %u",i,tempM2TexUnit.submeshIndex1,tempM2TexUnit.submeshIndex2, tempM2TexUnit.renderFlagsIndex, tempM2TexUnit.TextureUnitNumber, tempM2TexUnit.TextureUnitNumber2 ,tempM2TexUnit.textureIndex));
|
||||
}
|
||||
@ -260,6 +264,8 @@ for(u32 i=0; i<M2MTextureDef.size(); i++)
|
||||
// Animation related stuff //
|
||||
///////////////////////////////////////
|
||||
|
||||
/* ANIMATION NEED FIX !!! - search this text to find all code blocks for animations
|
||||
|
||||
printf("Global Sequences: %u\n",header.nGlobalSequences);
|
||||
//Ignored at the moment, as wolf.m2 has none
|
||||
printf("Animations: %u\n",header.nAnimations);
|
||||
@ -442,7 +448,7 @@ if(M2MBones[i].scaling.header.nValues>0){
|
||||
|
||||
// Joint->Animatedscale=core::vector3df(1.0f,1.0f,1.0f);
|
||||
//Joint->Animatedrotation=core::quaternion(0.0f,0.0f,0.0f,0.0f);
|
||||
core::matrix4 positionMatrix;
|
||||
/* core::matrix4 positionMatrix; ANIMATION NEED FIX !!!
|
||||
// positionMatrix.setTranslation( Joint->Animatedposition );
|
||||
core::matrix4 scaleMatrix;
|
||||
//scaleMatrix.setScale( Joint->Animatedscale );
|
||||
@ -459,7 +465,7 @@ if(M2MBones[i].scaling.header.nValues>0){
|
||||
else
|
||||
Joint->LocalMatrix = Joint->GlobalMatrix;
|
||||
}
|
||||
|
||||
*/
|
||||
//std::cout<<AnimatedMesh->getAllJoints()[1]->Children.size()<<" Children\n";
|
||||
//And M2MVertices are not usable like this. Thus we transform
|
||||
|
||||
@ -473,7 +479,7 @@ for(u32 i=0;i<M2MVertices.size();i++)
|
||||
M2Vertices.push_back(video::S3DVertex(core::vector3df(M2MVertices[i].pos.X,M2MVertices[i].pos.Y,M2MVertices[i].pos.Z),core::vector3df(M2MVertices[i].normal.X,M2MVertices[i].normal.Y,M2MVertices[i].normal.Z), video::SColor(255,100,100,100),M2MVertices[i].texcoords));
|
||||
}
|
||||
//Loop through the submeshes
|
||||
for(u32 i=0; i < M2MViews[0].nSub;i++)//
|
||||
for(u32 i=0; i < currentView.nSub;i++)//
|
||||
{
|
||||
//Now, M2MTriangles refers to M2MIndices and not to M2MVertices.
|
||||
scene::SSkinMeshBuffer *MeshBuffer = AnimatedMesh->createBuffer();
|
||||
@ -492,6 +498,7 @@ for(u32 i=0; i < M2MViews[0].nSub;i++)//
|
||||
for(u32 k=0; k<4; k++)
|
||||
{
|
||||
//std::cout << (u32)M2MVertices[j].bones[k] << " ";
|
||||
/* ANIMATION NEED FIX !!!
|
||||
if((M2MVertices[j].weights[k]/255.0f)>0.0f)
|
||||
{
|
||||
scene::CSkinnedMesh::SWeight* weight = AnimatedMesh->createWeight(AnimatedMesh->getAllJoints()[(u32)M2MVertices[j].bones[k]]);
|
||||
@ -499,6 +506,7 @@ for(u32 i=0; i < M2MViews[0].nSub;i++)//
|
||||
weight->vertex_id=j-M2MSubmeshes[i].ofsVertex;
|
||||
weight->buffer_id=i;
|
||||
}
|
||||
*/
|
||||
//std::cout<<weight->buffer_id << " " << weight->vertex_id << " " << weight->strength <<"|";
|
||||
}
|
||||
// std::cout<<'\n';
|
||||
@ -563,7 +571,6 @@ M2MTextureDef.clear();
|
||||
M2MSubmeshes.clear();
|
||||
M2MTextureFiles.clear();
|
||||
M2MTextureLookup.clear();
|
||||
M2MViews.clear();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@ -23,8 +23,6 @@ struct ModelHeader {
|
||||
u32 ofsAnimations;
|
||||
u32 nC;
|
||||
u32 ofsC;
|
||||
u32 nD;
|
||||
u32 ofsD;
|
||||
u32 nBones;
|
||||
u32 ofsBones;
|
||||
u32 nF;
|
||||
@ -32,8 +30,7 @@ struct ModelHeader {
|
||||
|
||||
u32 nVertices;
|
||||
u32 ofsVertices;
|
||||
u32 nViews;
|
||||
u32 ofsViews;
|
||||
u32 nViews; // number of skins ?
|
||||
|
||||
u32 nColors;
|
||||
u32 ofsColors;
|
||||
@ -43,8 +40,6 @@ struct ModelHeader {
|
||||
|
||||
u32 nTransparency; // H
|
||||
u32 ofsTransparency;
|
||||
u32 nI; // always unused ?
|
||||
u32 ofsI;
|
||||
u32 nTexAnims; // J
|
||||
u32 ofsTexAnims;
|
||||
u32 nTexReplace;
|
||||
@ -111,6 +106,7 @@ struct ModelVertex {
|
||||
};
|
||||
|
||||
struct ModelView {
|
||||
c8 id[4]; // always "SKIN"
|
||||
u32 nIndex, ofsIndex; // Vertices in this model (index into vertices[])
|
||||
u32 nTris, ofsTris; // indices
|
||||
u32 nProps, ofsProps; // additional vtx properties
|
||||
@ -232,7 +228,6 @@ private:
|
||||
//SSkinMeshBuffer* MeshBuffer;
|
||||
//Taken from the Model file, thus m2M*
|
||||
core::array<ModelVertex> M2MVertices;
|
||||
core::array<ModelView> M2MViews;
|
||||
core::array<u16> M2MIndices;
|
||||
core::array<u16> M2MTriangles;
|
||||
core::array<ModelViewSubmesh> M2MSubmeshes;
|
||||
|
||||
@ -118,8 +118,10 @@ void WorldSession::SendCastSpell(uint32 spellid, bool nocheck)
|
||||
WorldPacket packet;
|
||||
ByteBuffer temp;
|
||||
uint32 flags=TARGET_FLAG_SELF; // target mask. spellcast implementeation needs to be changed if TARGET_MASK_SELF is != 0
|
||||
packet << (uint8)0; // unk
|
||||
packet << spellid;
|
||||
packet << (uint8)0; // unk
|
||||
|
||||
if(target && my->GetTarget() != GetGuid()) // self cast?
|
||||
{
|
||||
if(target->GetTypeId() == TYPEID_PLAYER || target->GetTypeId() == TYPEID_UNIT)
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
#include "Item.h"
|
||||
|
||||
// increase this number whenever you change something that makes old files unusable
|
||||
uint32 ITEMPROTOTYPES_CACHE_VERSION = 3;
|
||||
uint32 ITEMPROTOTYPES_CACHE_VERSION = 4;
|
||||
uint32 CREATURETEMPLATES_CACHE_VERSION = 0;
|
||||
uint32 GOTEMPLATES_CACHE_VERSION = 0;
|
||||
|
||||
@ -214,11 +214,14 @@ void ItemProtoCache_InsertDataToSession(WorldSession *session)
|
||||
buf >> proto->MaxCount;
|
||||
buf >> proto->Stackable;
|
||||
buf >> proto->ContainerSlots;
|
||||
for(int i = 0; i < 10; i++)
|
||||
buf >> proto->StatsCount;
|
||||
for(int i = 0; i < proto->StatsCount; i++)
|
||||
{
|
||||
buf >> proto->ItemStat[i].ItemStatType;
|
||||
buf >> proto->ItemStat[i].ItemStatValue;
|
||||
}
|
||||
buf >> proto->ScalingStatDistribution;
|
||||
buf >> proto->ScalingStatValue;
|
||||
for(int i = 0; i < 5; i++)
|
||||
{
|
||||
buf >> proto->Damage[i].DamageMin;
|
||||
@ -274,6 +277,8 @@ void ItemProtoCache_InsertDataToSession(WorldSession *session)
|
||||
buf >> proto->RequiredArenaRank;
|
||||
buf >> proto->RequiredDisenchantSkill;
|
||||
buf >> proto->ArmorDamageModifier;
|
||||
buf >> proto->Duration;
|
||||
buf >> proto->ItemLimitCategory;
|
||||
|
||||
if(proto->Id)
|
||||
{
|
||||
@ -343,11 +348,14 @@ void ItemProtoCache_WriteDataToCache(WorldSession *session)
|
||||
buf << proto->MaxCount;
|
||||
buf << proto->Stackable;
|
||||
buf << proto->ContainerSlots;
|
||||
for(int i = 0; i < 10; i++)
|
||||
buf << proto->StatsCount;
|
||||
for(int i = 0; i < proto->StatsCount; i++)
|
||||
{
|
||||
buf << proto->ItemStat[i].ItemStatType;
|
||||
buf << proto->ItemStat[i].ItemStatValue;
|
||||
}
|
||||
buf << proto->ScalingStatDistribution;
|
||||
buf << proto->ScalingStatValue;
|
||||
for(int i = 0; i < 5; i++)
|
||||
{
|
||||
buf << proto->Damage[i].DamageMin;
|
||||
@ -403,6 +411,8 @@ void ItemProtoCache_WriteDataToCache(WorldSession *session)
|
||||
buf << proto->RequiredArenaRank;
|
||||
buf << proto->RequiredDisenchantSkill;
|
||||
buf << proto->ArmorDamageModifier;
|
||||
buf << proto->Duration;
|
||||
buf << proto->ItemLimitCategory;
|
||||
|
||||
//DEBUG(logdebug("ItemProtoCache: Saved %u [%s]",proto->Id, proto->Name[0].c_str()));
|
||||
uint32 size = buf.size();
|
||||
|
||||
@ -7,65 +7,107 @@
|
||||
|
||||
struct GameobjectTemplate
|
||||
{
|
||||
uint32 entry;
|
||||
uint32 type;
|
||||
uint32 displayId;
|
||||
uint32 entry;
|
||||
uint32 type;
|
||||
uint32 displayId;
|
||||
std::string name;
|
||||
std::string castBarCaption;
|
||||
uint32 faction;
|
||||
uint32 flags;
|
||||
float size;
|
||||
uint32 faction;
|
||||
uint32 flags;
|
||||
float size;
|
||||
union // different GO types have different data field
|
||||
{
|
||||
//0 GAMEOBJECT_TYPE_DOOR
|
||||
struct
|
||||
{
|
||||
uint32 _data0;
|
||||
uint32 lockId; //1
|
||||
uint16 _data2lo; //2 lower part of data2, unknown
|
||||
uint16 autoCloseTime; //2 (unit16)
|
||||
uint32 startOpen; //0 used client side to determine GO_ACTIVATED means open/closed
|
||||
uint32 lockId; //1 -> Lock.dbc
|
||||
uint32 autoCloseTime; //2 secs till autoclose = autoCloseTime / 0x10000
|
||||
uint32 noDamageImmune; //3 break opening whenever you recieve damage?
|
||||
uint32 openTextID; //4 can be used to replace castBarCaption?
|
||||
uint32 closeTextID; //5
|
||||
} door;
|
||||
//1 GAMEOBJECT_TYPE_BUTTON
|
||||
struct
|
||||
{
|
||||
uint32 _data0;
|
||||
uint32 lockId; //1
|
||||
uint16 _data2lo; //2 lower part of data2, unknown
|
||||
uint16 autoCloseTime; //2 (unit16)
|
||||
uint32 _data3;
|
||||
uint32 isBattlegroundObject; //4
|
||||
uint32 startOpen; //0
|
||||
uint32 lockId; //1 -> Lock.dbc
|
||||
uint32 autoCloseTime; //2 secs till autoclose = autoCloseTime / 0x10000
|
||||
uint32 linkedTrap; //3
|
||||
uint32 noDamageImmune; //4 isBattlegroundObject
|
||||
uint32 large; //5
|
||||
uint32 openTextID; //6 can be used to replace castBarCaption?
|
||||
uint32 closeTextID; //7
|
||||
uint32 losOK; //8
|
||||
} button;
|
||||
//2 GAMEOBJECT_TYPE_QUESTGIVER
|
||||
struct
|
||||
{
|
||||
uint32 lockId; //0 -> Lock.dbc
|
||||
uint32 questList; //1
|
||||
uint32 pageMaterial; //2
|
||||
uint32 gossipID; //3
|
||||
uint32 customAnim; //4
|
||||
uint32 noDamageImmune; //5
|
||||
uint32 openTextID; //6 can be used to replace castBarCaption?
|
||||
uint32 losOK; //7
|
||||
uint32 allowMounted; //8
|
||||
uint32 large; //9
|
||||
} questgiver;
|
||||
//3 GAMEOBJECT_TYPE_CHEST
|
||||
struct
|
||||
{
|
||||
uint32 lockId; //0
|
||||
uint32 lockId; //0 -> Lock.dbc
|
||||
uint32 lootId; //1
|
||||
uint32 _data2[2];
|
||||
uint32 chestRestockTime; //2
|
||||
uint32 consumable; //3
|
||||
uint32 minSuccessOpens; //4
|
||||
uint32 maxSuccessOpens; //5
|
||||
uint32 eventId; //6
|
||||
uint32 eventId; //6 lootedEvent
|
||||
uint32 linkedTrapId; //7
|
||||
uint32 questId; //8 not used currently but store quest required for GO activation for player
|
||||
uint32 _data9[5];
|
||||
uint32 _data14; //14 something == trap.data12 == goober.data14 (openText?)
|
||||
uint32 level; //9
|
||||
uint32 losOK; //10
|
||||
uint32 leaveLoot; //11
|
||||
uint32 notInCombat; //12
|
||||
uint32 logLoot; //13
|
||||
uint32 openTextID; //14 can be used to replace castBarCaption?
|
||||
uint32 groupLootRules; //15
|
||||
} chest;
|
||||
//5 GAMEOBJECT_TYPE_GENERIC
|
||||
struct
|
||||
{
|
||||
uint32 floatingTooltip; //0
|
||||
uint32 highlight; //1
|
||||
uint32 serverOnly; //2
|
||||
uint32 large; //3
|
||||
uint32 floatOnWater; //4
|
||||
uint32 questID; //5
|
||||
} _generic;
|
||||
//6 GAMEOBJECT_TYPE_TRAP
|
||||
struct
|
||||
{
|
||||
uint32 _data0; //0 lockid???
|
||||
uint32 _data1;
|
||||
uint32 lockId; //0 -> Lock.dbc
|
||||
uint32 level; //1
|
||||
uint32 radius; //2 radius for trap activation
|
||||
uint32 spellId; //3
|
||||
uint32 isNeedDespawn; //4 (if >0)
|
||||
uint32 _data5; //5
|
||||
uint32 _data6[6];
|
||||
uint32 _data12; //12 something == chest.data14 == goober.data14 (openText?)
|
||||
uint32 charges; //4 need respawn (if > 0)
|
||||
uint32 cooldown; //5 time in secs
|
||||
uint32 autoCloseTime; //6
|
||||
uint32 startDelay; //7
|
||||
uint32 serverOnly; //8
|
||||
uint32 stealthed; //9
|
||||
uint32 large; //10
|
||||
uint32 stealthAffected; //11
|
||||
uint32 openTextID; //12 can be used to replace castBarCaption?
|
||||
uint32 closeTextID; //13
|
||||
} trap;
|
||||
//7 GAMEOBJECT_TYPE_CHAIR
|
||||
struct
|
||||
{
|
||||
uint32 slots; //0 not used currently
|
||||
uint32 slots; //0
|
||||
uint32 height; //1
|
||||
uint32 onlyCreatorUse; //2
|
||||
} chair;
|
||||
//8 GAMEOBJECT_TYPE_SPELL_FOCUS
|
||||
struct
|
||||
@ -73,39 +115,82 @@ struct GameobjectTemplate
|
||||
uint32 focusId; //0
|
||||
uint32 dist; //1
|
||||
uint32 linkedTrapId; //2
|
||||
uint32 serverOnly; //3
|
||||
uint32 questID; //4
|
||||
uint32 large; //5
|
||||
} spellFocus;
|
||||
//9 GAMEOBJECT_TYPE_TEXT
|
||||
struct
|
||||
{
|
||||
uint32 pageID; //0
|
||||
uint32 language; //1
|
||||
uint32 pageMaterial; //2
|
||||
uint32 allowMounted; //3
|
||||
} text;
|
||||
//10 GAMEOBJECT_TYPE_GOOBER
|
||||
struct
|
||||
{
|
||||
uint32 _data0; //0 lockid ???
|
||||
uint32 lockId; //0 -> Lock.dbc
|
||||
uint32 questId; //1
|
||||
uint32 eventId; //2
|
||||
uint32 _data3[4];
|
||||
uint32 autoCloseTime; //3
|
||||
uint32 customAnim; //4
|
||||
uint32 consumable; //5
|
||||
uint32 cooldown; //6
|
||||
uint32 pageId; //7
|
||||
uint32 _data8[2];
|
||||
uint32 language; //8
|
||||
uint32 pageMaterial; //9
|
||||
uint32 spellId; //10
|
||||
uint32 _data11;
|
||||
uint32 noDamageImmune; //11
|
||||
uint32 linkedTrapId; //12
|
||||
uint32 _data13;
|
||||
uint32 _data14; //14 something == trap.data12 == chest.data14 (openText?)
|
||||
uint32 _data15;
|
||||
uint32 isBattlegroundObject; //16
|
||||
uint32 large; //13
|
||||
uint32 openTextID; //14 can be used to replace castBarCaption?
|
||||
uint32 closeTextID; //15
|
||||
uint32 losOK; //16 isBattlegroundObject
|
||||
uint32 allowMounted; //17
|
||||
} goober;
|
||||
//11 GAMEOBJECT_TYPE_TRANSPORT
|
||||
struct
|
||||
{
|
||||
uint32 pause; //0
|
||||
uint32 startOpen; //1
|
||||
uint32 autoCloseTime; //2 secs till autoclose = autoCloseTime / 0x10000
|
||||
} transport;
|
||||
//12 GAMEOBJECT_TYPE_AREADAMAGE
|
||||
struct
|
||||
{
|
||||
uint32 lockId; //0
|
||||
uint32 radius; //1
|
||||
uint32 damageMin; //2
|
||||
uint32 damageMax; //3
|
||||
uint32 damageSchool; //4
|
||||
uint32 autoCloseTime; //5 secs till autoclose = autoCloseTime / 0x10000
|
||||
uint32 openTextID; //6
|
||||
uint32 closeTextID; //7
|
||||
} areadamage;
|
||||
//13 GAMEOBJECT_TYPE_CAMERA
|
||||
struct
|
||||
{
|
||||
uint32 _data0;
|
||||
uint32 lockId; //0 -> Lock.dbc
|
||||
uint32 cinematicId; //1
|
||||
uint32 eventID; //2
|
||||
uint32 openTextID; //3 can be used to replace castBarCaption?
|
||||
} camera;
|
||||
//15 GAMEOBJECT_TYPE_MO_TRANSPORT
|
||||
struct
|
||||
{
|
||||
uint32 taxiPathId; //0
|
||||
uint32 moveSpeed; //1
|
||||
uint32 accelRate; //2
|
||||
uint32 startEventID; //3
|
||||
uint32 stopEventID; //4
|
||||
uint32 transportPhysics; //5
|
||||
uint32 mapID; //6
|
||||
} moTransport;
|
||||
//17 GAMEOBJECT_TYPE_FISHINGNODE
|
||||
struct
|
||||
{
|
||||
uint32 _data0;
|
||||
uint32 _data0; //0
|
||||
uint32 lootId; //1
|
||||
} fishnode;
|
||||
//18 GAMEOBJECT_TYPE_SUMMONING_RITUAL
|
||||
@ -113,21 +198,50 @@ struct GameobjectTemplate
|
||||
{
|
||||
uint32 reqParticipants; //0
|
||||
uint32 spellId; //1
|
||||
uint32 animSpell; //2
|
||||
uint32 ritualPersistent; //3
|
||||
uint32 casterTargetSpell; //4
|
||||
uint32 casterTargetSpellTargets; //5
|
||||
uint32 castersGrouped; //6
|
||||
uint32 ritualNoTargetCheck; //7
|
||||
} summoningRitual;
|
||||
//20 GAMEOBJECT_TYPE_AUCTIONHOUSE
|
||||
struct
|
||||
{
|
||||
uint32 actionHouseID; //0
|
||||
} auctionhouse;
|
||||
//21 GAMEOBJECT_TYPE_GUARDPOST
|
||||
struct
|
||||
{
|
||||
uint32 creatureID; //0
|
||||
uint32 charges; //1
|
||||
} guardpost;
|
||||
//22 GAMEOBJECT_TYPE_SPELLCASTER
|
||||
struct
|
||||
{
|
||||
uint32 spellId; //0
|
||||
uint32 charges; //1
|
||||
uint32 partyOnly; //2
|
||||
uint32 spellId2; //3 (is it used in this way?)
|
||||
} spellcaster;
|
||||
//23 GAMEOBJECT_TYPE_MEETINGSTONE
|
||||
struct
|
||||
{
|
||||
uint32 minLevel; //0
|
||||
uint32 maxLevel; //1
|
||||
uint32 areaID; //2
|
||||
} meetingstone;
|
||||
//24 GAMEOBJECT_TYPE_FLAGSTAND
|
||||
struct
|
||||
{
|
||||
uint32 lockId; //0
|
||||
uint32 pickupSpell; //1
|
||||
uint32 radius; //2
|
||||
uint32 returnAura; //3
|
||||
uint32 returnSpell; //4
|
||||
uint32 noDamageImmune; //5
|
||||
uint32 openTextID; //6
|
||||
uint32 losOK; //7
|
||||
} flagstand;
|
||||
//25 GAMEOBJECT_TYPE_FISHINGHOLE // not implemented yet
|
||||
struct
|
||||
{
|
||||
@ -135,8 +249,77 @@ struct GameobjectTemplate
|
||||
uint32 lootId; //1
|
||||
uint32 minSuccessOpens; //2
|
||||
uint32 maxSuccessOpens; //3
|
||||
uint32 lockId; //4 possibly 1628 for all?
|
||||
uint32 lockId; //4 -> Lock.dbc; possibly 1628 for all?
|
||||
} fishinghole;
|
||||
//26 GAMEOBJECT_TYPE_FLAGDROP
|
||||
struct
|
||||
{
|
||||
uint32 lockId; //0
|
||||
uint32 eventID; //1
|
||||
uint32 pickupSpell; //2
|
||||
uint32 noDamageImmune; //3
|
||||
uint32 openTextID; //4
|
||||
} flagdrop;
|
||||
//27 GAMEOBJECT_TYPE_MINI_GAME
|
||||
struct
|
||||
{
|
||||
uint32 gameType; //0
|
||||
} miniGame;
|
||||
//29 GAMEOBJECT_TYPE_CAPTURE_POINT
|
||||
struct
|
||||
{
|
||||
uint32 radius; //0
|
||||
uint32 spell; //1
|
||||
uint32 worldState1; //2
|
||||
uint32 worldstate2; //3
|
||||
uint32 winEventID1; //4
|
||||
uint32 winEventID2; //5
|
||||
uint32 contestedEventID1; //6
|
||||
uint32 contestedEventID2; //7
|
||||
uint32 progressEventID1; //8
|
||||
uint32 progressEventID2; //9
|
||||
uint32 neutralEventID1; //10
|
||||
uint32 neutralEventID2; //11
|
||||
uint32 neutralPercent; //12
|
||||
uint32 worldstate3; //13
|
||||
uint32 minSuperiority; //14
|
||||
uint32 maxSuperiority; //15
|
||||
uint32 minTime; //16
|
||||
uint32 maxTime; //17
|
||||
uint32 large; //18
|
||||
uint32 highlight; //19
|
||||
} capturePoint;
|
||||
//30 GAMEOBJECT_TYPE_AURA_GENERATOR
|
||||
struct
|
||||
{
|
||||
uint32 startOpen; //0
|
||||
uint32 radius; //1
|
||||
uint32 auraID1; //2
|
||||
uint32 conditionID1; //3
|
||||
uint32 auraID2; //4
|
||||
uint32 conditionID2; //5
|
||||
uint32 serverOnly; //6
|
||||
} auraGenerator;
|
||||
//31 GAMEOBJECT_TYPE_DUNGEON_DIFFICULTY
|
||||
struct
|
||||
{
|
||||
uint32 mapID; //0
|
||||
uint32 difficulty; //1
|
||||
} dungeonDifficulty;
|
||||
//32 GAMEOBJECT_TYPE_DO_NOT_USE_YET
|
||||
struct
|
||||
{
|
||||
uint32 mapID; //0
|
||||
uint32 difficulty; //1
|
||||
} doNotUseYet;
|
||||
//33 GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING
|
||||
struct
|
||||
{
|
||||
uint32 dmgPctState1; //0
|
||||
uint32 dmgPctState2; //1
|
||||
uint32 state1Name; //2
|
||||
uint32 state2Name; //3
|
||||
} destructibleBuilding;
|
||||
|
||||
// not use for specific field access (only for output with loop by all filed), also this determinate max union size
|
||||
struct // GAMEOBJECT_TYPE_SPELLCASTER
|
||||
|
||||
@ -39,11 +39,14 @@ void WorldSession::_HandleItemQuerySingleResponseOpcode(WorldPacket& recvPacket)
|
||||
recvPacket >> proto->MaxCount;
|
||||
recvPacket >> proto->Stackable;
|
||||
recvPacket >> proto->ContainerSlots;
|
||||
for(int i = 0; i < 10; i++)
|
||||
recvPacket >> proto->StatsCount;
|
||||
for(int i = 0; i < proto->StatsCount; i++)
|
||||
{
|
||||
recvPacket >> proto->ItemStat[i].ItemStatType;
|
||||
recvPacket >> proto->ItemStat[i].ItemStatValue;
|
||||
}
|
||||
recvPacket >> proto->ScalingStatDistribution;
|
||||
recvPacket >> proto->ScalingStatValue;
|
||||
for(int i = 0; i < 5; i++)
|
||||
{
|
||||
recvPacket >> proto->Damage[i].DamageMin;
|
||||
@ -97,6 +100,8 @@ void WorldSession::_HandleItemQuerySingleResponseOpcode(WorldPacket& recvPacket)
|
||||
recvPacket >> proto->ExtendedCost;
|
||||
recvPacket >> proto->RequiredDisenchantSkill;
|
||||
recvPacket >> proto->ArmorDamageModifier;
|
||||
recvPacket >> proto->Duration;
|
||||
recvPacket >> proto->ItemLimitCategory;
|
||||
|
||||
logdetail("Got Item Info: Id=%u Name='%s' ReqLevel=%u Armor=%u Desc='%s'",
|
||||
proto->Id, proto->Name.c_str(), proto->RequiredLevel, proto->Armor, proto->Description.c_str());
|
||||
|
||||
@ -211,7 +211,9 @@ enum INVENTORY_CLASS
|
||||
ITEM_CLASS_QUEST = 12,
|
||||
ITEM_CLASS_KEY = 13,
|
||||
ITEM_CLASS_PERMANENT = 14,
|
||||
ITEM_CLASS_JUNK = 15
|
||||
ITEM_CLASS_JUNK = 15,
|
||||
ITEM_CLASS_MISC = 15,
|
||||
ITEM_CLASS_GLYPH = 16
|
||||
};
|
||||
|
||||
// Client understand only 0 subclass for ITEM_CLASS_CONSUMABLE
|
||||
@ -236,7 +238,8 @@ enum ITEM_SUBCLASS_CONTAINER
|
||||
ITEM_SUBCLASS_ENGINEERING_CONTAINER = 4,
|
||||
ITEM_SUBCLASS_GEM_CONTAINER = 5,
|
||||
ITEM_SUBCLASS_MINING_CONTAINER = 6,
|
||||
ITEM_SUBCLASS_LEATHERWORKING_CONTAINER = 7
|
||||
ITEM_SUBCLASS_LEATHERWORKING_CONTAINER = 7,
|
||||
ITEM_SUBCLASS_INSCRIPTION_CONTAINER = 8
|
||||
};
|
||||
|
||||
enum INVENTORY_SUBCLASS_WEAPON
|
||||
@ -272,7 +275,11 @@ enum ITEM_SUBCLASS_ARMOR
|
||||
ITEM_SUBCLASS_ARMOR_MAIL = 3,
|
||||
ITEM_SUBCLASS_ARMOR_PLATE = 4,
|
||||
ITEM_SUBCLASS_ARMOR_BUCKLER = 5,
|
||||
ITEM_SUBCLASS_ARMOR_SHIELD = 6
|
||||
ITEM_SUBCLASS_ARMOR_SHIELD = 6,
|
||||
ITEM_SUBCLASS_ARMOR_LIBRAM = 7,
|
||||
ITEM_SUBCLASS_ARMOR_IDOL = 8,
|
||||
ITEM_SUBCLASS_ARMOR_TOTEM = 9,
|
||||
ITEM_SUBCLASS_ARMOR_SIGIL = 10
|
||||
};
|
||||
|
||||
enum ITEM_SUBCLASS_PROJECTILE
|
||||
@ -295,7 +302,10 @@ enum ITEM_SUBCLASS_TRADE_GOODS
|
||||
ITEM_SUBCLASS_HERB = 9,
|
||||
ITEM_SUBCLASS_ELEMENTAZL = 10,
|
||||
ITEM_SUBCLASS_TRADE_GOODS_OTHER = 11,
|
||||
ITEM_SUBCLASS_ENCHANTING = 12
|
||||
ITEM_SUBCLASS_ENCHANTING = 12,
|
||||
ITEM_SUBCLASS_MATERIAL = 13,
|
||||
ITEM_SUBCLASS_ARMOR_ENCHANTMENT = 14,
|
||||
ITEM_SUBCLASS_WEAPON_ENCHANTMENT= 15
|
||||
};
|
||||
|
||||
enum ITEM_SUBCLASS_BOOK
|
||||
@ -376,7 +386,10 @@ struct ItemProto
|
||||
uint32 MaxCount;
|
||||
uint32 Stackable;
|
||||
uint32 ContainerSlots;
|
||||
uint32 StatsCount;
|
||||
_ItemStat ItemStat[10];
|
||||
uint32 ScalingStatDistribution; // id from ScalingStatDistribution.dbc
|
||||
uint32 ScalingStatValue; // mask for selecting column in ScalingStatValues.dbc
|
||||
_ItemDamage Damage[5];
|
||||
uint32 Armor;
|
||||
uint32 HolyRes;
|
||||
@ -414,6 +427,8 @@ struct ItemProto
|
||||
uint32 RequiredArenaRank;
|
||||
uint32 RequiredDisenchantSkill;
|
||||
float ArmorDamageModifier;
|
||||
int32 Duration; // negative = realtime, positive = ingame time
|
||||
uint32 ItemLimitCategory; // id from ItemLimitCategory.dbc
|
||||
};
|
||||
|
||||
class Item : public Object
|
||||
|
||||
@ -108,7 +108,9 @@ float WorldObject::GetDistanceZ(WorldObject* obj)
|
||||
void WorldSession::_HandleDestroyObjectOpcode(WorldPacket& recvPacket)
|
||||
{
|
||||
uint64 guid;
|
||||
recvPacket >> guid;
|
||||
uint8 dummy;
|
||||
|
||||
recvPacket >> guid >> dummy;
|
||||
logdebug("Destroy Object "I64FMT,guid);
|
||||
|
||||
// call script just before object removal
|
||||
|
||||
@ -28,6 +28,7 @@ enum HighGuid
|
||||
HIGHGUID_TRANSPORT = 0xF120, // blizz F120 (for GAMEOBJECT_TYPE_TRANSPORT)
|
||||
HIGHGUID_UNIT = 0xF130, // blizz F130
|
||||
HIGHGUID_PET = 0xF140, // blizz F140
|
||||
HIGHGUID_VEHICLE = 0xF150,
|
||||
HIGHGUID_DYNAMICOBJECT = 0xF100, // blizz F100
|
||||
HIGHGUID_CORPSE = 0xF101, // blizz F100
|
||||
HIGHGUID_MO_TRANSPORT = 0x1FC0, // blizz 1FC0 (for GAMEOBJECT_TYPE_MO_TRANSPORT)
|
||||
@ -41,4 +42,5 @@ enum HighGuid
|
||||
#define IS_CORPSE_GUID(Guid) ( GUID_HIPART(Guid) == HIGHGUID_CORPSE )
|
||||
#define IS_PLAYER_CORPSE_GUID(Guid) ( GUID_HIPART(Guid) == HIGHGUID_PLAYER_CORPSE )
|
||||
#define IS_TRANSPORT(Guid) ( GUID_HIPART(Guid) == HIGHGUID_TRANSPORT )
|
||||
#define IS_VEHICLE_GUID(Guid) ( GUID_HIPART(Guid) == HIGHGUID_VEHICLE )
|
||||
#endif
|
||||
|
||||
@ -42,8 +42,8 @@ const char* worldOpcodeNames[] =
|
||||
"CMSG_ZONE_MAP",
|
||||
"SMSG_ZONE_MAP",
|
||||
"CMSG_DEBUG_CHANGECELLZONE",
|
||||
"CMSG_EMBLAZON_TABARD_OBSOLETE",
|
||||
"CMSG_UNEMBLAZON_TABARD_OBSOLETE",
|
||||
"CMSG_MOVE_CHARACTER_CHEAT",
|
||||
"SMSG_MOVE_CHARACTER_CHEAT",
|
||||
"CMSG_RECHARGE",
|
||||
"CMSG_LEARN_SPELL",
|
||||
"CMSG_CREATEMONSTER",
|
||||
@ -59,7 +59,7 @@ const char* worldOpcodeNames[] =
|
||||
"SMSG_FORCEACTIONSHOW",
|
||||
"CMSG_PETGODMODE",
|
||||
"SMSG_PETGODMODE",
|
||||
"SMSG_DEBUGINFOSPELLMISS_OBSOLETE",
|
||||
"SMSG_REFER_A_FRIEND_EXPIRED",
|
||||
"CMSG_WEATHER_SPEED_CHEAT",
|
||||
"CMSG_UNDRESSPLAYER",
|
||||
"CMSG_BEASTMASTER",
|
||||
@ -79,7 +79,7 @@ const char* worldOpcodeNames[] =
|
||||
"SMSG_DEBUG_AISTATE",
|
||||
"CMSG_DISABLE_PVP_CHEAT",
|
||||
"CMSG_ADVANCE_SPAWN_TIME",
|
||||
"CMSG_PVP_PORT_OBSOLETE",
|
||||
"SMSG_DESTRUCTIBLE_BUILDING_DAMAGE",
|
||||
"CMSG_AUTH_SRP6_BEGIN",
|
||||
"CMSG_AUTH_SRP6_PROOF",
|
||||
"CMSG_AUTH_SRP6_RECODE",
|
||||
@ -207,7 +207,7 @@ const char* worldOpcodeNames[] =
|
||||
"SMSG_READ_ITEM_FAILED",
|
||||
"SMSG_ITEM_COOLDOWN",
|
||||
"CMSG_GAMEOBJ_USE",
|
||||
"CMSG_GAMEOBJ_CHAIR_USE_OBSOLETE",
|
||||
"CMSG_DESTROY_ITEMS",
|
||||
"SMSG_GAMEOBJECT_CUSTOM_ANIM",
|
||||
"CMSG_AREATRIGGER",
|
||||
"MSG_MOVE_START_FORWARD",
|
||||
@ -340,7 +340,7 @@ const char* worldOpcodeNames[] =
|
||||
"SMSG_SPELL_COOLDOWN",
|
||||
"SMSG_COOLDOWN_EVENT",
|
||||
"CMSG_CANCEL_AURA",
|
||||
"SMSG_UPDATE_AURA_DURATION",
|
||||
"SMSG_UPDATE_AURA_DURATION_OBSOLETE",
|
||||
"SMSG_PET_CAST_FAILED",
|
||||
"MSG_CHANNEL_START",
|
||||
"MSG_CHANNEL_UPDATE",
|
||||
@ -364,10 +364,10 @@ const char* worldOpcodeNames[] =
|
||||
"SMSG_DAMAGE_DONE_OBSOLETE",
|
||||
"SMSG_DAMAGE_TAKEN_OBSOLETE",
|
||||
"SMSG_CANCEL_COMBAT",
|
||||
"SMSG_PLAYER_COMBAT_XP_GAIN_OBSOLETE",
|
||||
"SMSG_SPELLBREAKLOG",
|
||||
"SMSG_SPELLHEALLOG",
|
||||
"SMSG_SPELLENERGIZELOG",
|
||||
"CMSG_SHEATHE_OBSOLETE",
|
||||
"SMSG_BREAK_TARGET",
|
||||
"CMSG_SAVE_PLAYER",
|
||||
"CMSG_SETDEATHBINDPOINT",
|
||||
"SMSG_BINDPOINTUPDATE",
|
||||
@ -571,7 +571,7 @@ const char* worldOpcodeNames[] =
|
||||
"SMSG_GMTICKET_SYSTEMSTATUS",
|
||||
"CMSG_SPIRIT_HEALER_ACTIVATE",
|
||||
"CMSG_SET_STAT_CHEAT",
|
||||
"SMSG_SET_REST_START",
|
||||
"SMSG_SET_REST_START_OBSOLETE",
|
||||
"CMSG_SKILL_BUY_STEP",
|
||||
"CMSG_SKILL_BUY_RANK",
|
||||
"CMSG_XP_CHEAT",
|
||||
@ -726,8 +726,8 @@ const char* worldOpcodeNames[] =
|
||||
"SMSG_SCRIPT_MESSAGE",
|
||||
"SMSG_DUEL_COUNTDOWN",
|
||||
"SMSG_AREA_TRIGGER_MESSAGE",
|
||||
"CMSG_TOGGLE_HELM",
|
||||
"CMSG_TOGGLE_CLOAK",
|
||||
"CMSG_SHOWING_HELM",
|
||||
"CMSG_SHOWING_CLOAK",
|
||||
"SMSG_MEETINGSTONE_JOINFAILED",
|
||||
"SMSG_PLAYER_SKINNED",
|
||||
"SMSG_DURABILITY_DAMAGE_DEATH",
|
||||
@ -960,10 +960,10 @@ const char* worldOpcodeNames[] =
|
||||
"SMSG_VOICE_SESSION_ADJUST_PRIORITY",
|
||||
"CMSG_VOICE_SET_TALKER_MUTED_REQUEST",
|
||||
"SMSG_VOICE_SET_TALKER_MUTED",
|
||||
"SMSG_INIT_EXTRA_AURA_INFO",
|
||||
"SMSG_SET_EXTRA_AURA_INFO",
|
||||
"SMSG_SET_EXTRA_AURA_INFO_NEED_UPDATE",
|
||||
"SMSG_CLEAR_EXTRA_AURA_INFO",
|
||||
"SMSG_INIT_EXTRA_AURA_INFO_OBSOLETE",
|
||||
"SMSG_SET_EXTRA_AURA_INFO_OBSOLETE",
|
||||
"SMSG_SET_EXTRA_AURA_INFO_NEED_UPDATE_OBSOLETE",
|
||||
"SMSG_CLEAR_EXTRA_AURA_INFO_OBSOLETE",
|
||||
"MSG_MOVE_START_DESCEND",
|
||||
"CMSG_IGNORE_REQUIREMENTS_CHEAT",
|
||||
"SMSG_IGNORE_REQUIREMENTS_CHEAT",
|
||||
@ -973,6 +973,7 @@ const char* worldOpcodeNames[] =
|
||||
"MSG_MOVE_UPDATE_CAN_FLY",
|
||||
"MSG_RAID_READY_CHECK_CONFIRM",
|
||||
"CMSG_VOICE_SESSION_ENABLE",
|
||||
"SMSG_VOICE_SESSION_ENABLE",
|
||||
"SMSG_VOICE_PARENTAL_CONTROLS",
|
||||
"CMSG_GM_WHISPER",
|
||||
"SMSG_GM_MESSAGECHAT",
|
||||
@ -1089,6 +1090,142 @@ const char* worldOpcodeNames[] =
|
||||
"SMSG_SPLINE_MOVE_SET_FLYING",
|
||||
"SMSG_SPLINE_MOVE_UNSET_FLYING",
|
||||
"SMSG_SUMMON_CANCEL",
|
||||
"CMSG_CHANGE_PERSONAL_ARENA_RATING",
|
||||
"CMSG_ALTER_APPEARANCE",
|
||||
"SMSG_ENABLE_BARBER_SHOP",
|
||||
"SMSG_BARBER_SHOP_RESULT",
|
||||
"CMSG_CALENDAR_GET_CALENDAR",
|
||||
"CMSG_CALENDAR_GET_EVENT",
|
||||
"CMSG_CALENDAR_GUILD_FILTER",
|
||||
"CMSG_CALENDAR_ARENA_TEAM",
|
||||
"CMSG_CALENDAR_ADD_EVENT",
|
||||
"CMSG_CALENDAR_UPDATE_EVENT",
|
||||
"CMSG_CALENDAR_REMOVE_EVENT",
|
||||
"CMSG_CALENDAR_COPY_EVENT",
|
||||
"CMSG_CALENDAR_EVENT_INVITE",
|
||||
"CMSG_CALENDAR_EVENT_RSVP",
|
||||
"CMSG_CALENDAR_EVENT_REMOVE_INVITE",
|
||||
"CMSG_CALENDAR_EVENT_STATUS",
|
||||
"CMSG_CALENDAR_EVENT_MODERATOR_STATUS",
|
||||
"SMSG_CALENDAR_SEND_CALENDAR",
|
||||
"SMSG_CALENDAR_SEND_EVENT",
|
||||
"SMSG_CALENDAR_FILTER_GUILD",
|
||||
"SMSG_CALENDAR_ARENA_TEAM",
|
||||
"SMSG_CALENDAR_EVENT_INVITE",
|
||||
"SMSG_CALENDAR_EVENT_INVITE_REMOVED",
|
||||
"SMSG_CALENDAR_EVENT_STATUS",
|
||||
"SMSG_CALENDAR_COMMAND_RESULT",
|
||||
"SMSG_CALENDAR_RAID_LOCKOUT_ADDED",
|
||||
"SMSG_CALENDAR_RAID_LOCKOUT_REMOVED",
|
||||
"SMSG_CALENDAR_EVENT_INVITE_ALERT",
|
||||
"SMSG_CALENDAR_EVENT_INVITE_REMOVED_ALERT",
|
||||
"SMSG_CALENDAR_EVENT_INVITE_STATUS_ALERT",
|
||||
"SMSG_CALENDAR_EVENT_REMOVED_ALERT",
|
||||
"SMSG_CALENDAR_EVENT_UPDATED_ALERT",
|
||||
"SMSG_CALENDAR_EVENT_MODERATOR_STATUS_ALERT",
|
||||
"CMSG_CALENDAR_COMPLAIN",
|
||||
"CMSG_CALENDAR_GET_NUM_PENDING",
|
||||
"SMSG_CALENDAR_SEND_NUM_PENDING",
|
||||
"CMSG_SAVE_DANCE",
|
||||
"SMSG_NOTIFY_DANCE",
|
||||
"CMSG_PLAY_DANCE",
|
||||
"SMSG_PLAY_DANCE",
|
||||
"CMSG_LOAD_DANCES",
|
||||
"CMSG_STOP_DANCE",
|
||||
"SMSG_STOP_DANCE",
|
||||
"CMSG_SYNC_DANCE",
|
||||
"CMSG_DANCE_QUERY",
|
||||
"SMSG_DANCE_QUERY_RESPONSE",
|
||||
"SMSG_INVALIDATE_DANCE",
|
||||
"CMSG_DELETE_DANCE",
|
||||
"SMSG_LEARNED_DANCE_MOVES",
|
||||
"CMSG_LEARN_DANCE_MOVE",
|
||||
"CMSG_UNLEARN_DANCE_MOVE",
|
||||
"CMSG_SET_RUNE_COUNT",
|
||||
"CMSG_SET_RUNE_COOLDOWN",
|
||||
"MSG_MOVE_SET_PITCH_RATE_CHEAT",
|
||||
"MSG_MOVE_SET_PITCH_RATE",
|
||||
"SMSG_FORCE_PITCH_RATE_CHANGE",
|
||||
"CMSG_FORCE_PITCH_RATE_CHANGE_ACK",
|
||||
"SMSG_SPLINE_SET_PITCH_RATE",
|
||||
"SMSG_MOVE_ABANDON_TRANSPORT",
|
||||
"MSG_MOVE_ABANDON_TRANSPORT",
|
||||
"CMSG_MOVE_ABANDON_TRANSPORT_ACK",
|
||||
"CMSG_UPDATE_MISSILE_TRAJECTORY",
|
||||
"SMSG_UPDATE_ACCOUNT_DATA_COMPLETE",
|
||||
"SMSG_TRIGGER_MOVIE",
|
||||
"CMSG_COMPLETE_MOVIE",
|
||||
"CMSG_SET_GLYPH_SLOT",
|
||||
"CMSG_SET_GLYPH",
|
||||
"SMSG_ACHIEVEMENT_EARNED",
|
||||
"SMSG_DYNAMIC_DROP_ROLL_RESULT",
|
||||
"SMSG_CRITERIA_UPDATE",
|
||||
"CMSG_QUERY_INSPECT_ACHIEVEMENTS",
|
||||
"SMSG_RESPOND_INSPECT_ACHIEVEMENTS",
|
||||
"CMSG_DISMISS_CONTROLLED_VEHICLE",
|
||||
"CMSG_COMPLETE_ACHIEVEMENT_CHEAT",
|
||||
"SMSG_QUESTUPDATE_ADD_PVP_KILL",
|
||||
"CMSG_SET_CRITERIA_CHEAT",
|
||||
"SMSG_GROUP_SWAP_FAILED",
|
||||
"CMSG_UNITANIMTIER_CHEAT",
|
||||
"CMSG_CHAR_CUSTOMIZE",
|
||||
"SMSG_CHAR_CUSTOMIZE",
|
||||
"SMSG_PET_RENAMEABLE",
|
||||
"CMSG_REQUEST_VEHICLE_EXIT",
|
||||
"CMSG_REQUEST_VEHICLE_PREV_SEAT",
|
||||
"CMSG_REQUEST_VEHICLE_NEXT_SEAT",
|
||||
"CMSG_REQUEST_VEHICLE_SWITCH_SEAT",
|
||||
"CMSG_PET_LEARN_TALENT",
|
||||
"CMSG_PET_UNLEARN_TALENTS",
|
||||
"SMSG_SET_PHASE_SHIFT",
|
||||
"SMSG_ALL_ACHIEVEMENT_DATA",
|
||||
"CMSG_FORCE_SAY_CHEAT",
|
||||
"SMSG_HEALTH_UPDATE",
|
||||
"SMSG_POWER_UPDATE",
|
||||
"CMSG_GAMEOBJ_REPORT_USE",
|
||||
"SMSG_HIGHEST_THREAT_UPDATE",
|
||||
"SMSG_THREAT_UPDATE",
|
||||
"SMSG_THREAT_REMOVE",
|
||||
"SMSG_THREAT_CLEAR",
|
||||
"SMSG_CONVERT_RUNE",
|
||||
"SMSG_RESYNC_RUNES",
|
||||
"SMSG_ADD_RUNE_POWER",
|
||||
"CMSG_START_QUEST",
|
||||
"CMSG_REMOVE_GLYPH",
|
||||
"CMSG_DUMP_OBJECTS",
|
||||
"SMSG_DUMP_OBJECTS_DATA",
|
||||
"CMSG_DISMISS_CRITTER",
|
||||
"SMSG_NOTIFY_DEST_LOC_SPELL_CAST",
|
||||
"CMSG_AUCTION_LIST_PENDING_SALES",
|
||||
"SMSG_AUCTION_LIST_PENDING_SALES",
|
||||
"SMSG_MODIFY_COOLDOWN",
|
||||
"SMSG_PET_UPDATE_COMBO_POINTS",
|
||||
"CMSG_ENABLETAXI",
|
||||
"SMSG_PRE_RESURRECT",
|
||||
"SMSG_AURA_UPDATE_ALL",
|
||||
"SMSG_AURA_UPDATE",
|
||||
"CMSG_FLOOD_GRACE_CHEAT",
|
||||
"SMSG_SERVER_FIRST_ACHIEVEMENT",
|
||||
"SMSG_PET_LEARNED_SPELL",
|
||||
"SMSG_PET_REMOVED_SPELL",
|
||||
"CMSG_CHANGE_SEATS_ON_CONTROLLED_VEHICLE",
|
||||
"CMSG_HEARTH_AND_RESURRECT",
|
||||
"SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA",
|
||||
"SMSG_CRITERIA_DELETED",
|
||||
"SMSG_ACHIEVEMENT_DELETED",
|
||||
"CMSG_SERVER_INFO_QUERY",
|
||||
"SMSG_SERVER_INFO_RESPONSE",
|
||||
"CMSG_CHECK_LOGIN_CRITERIA",
|
||||
"SMSG_SERVER_BUCK_DATA_START",
|
||||
"CMSG_QUERY_VEHICLE_STATUS",
|
||||
"SMSG_PET_GUIDS",
|
||||
"SMSG_CLIENTCACHE_VERSION",
|
||||
"UMSG_UNKNOWN_1191",
|
||||
"UMSG_UNKNOWN_1192",
|
||||
"UMSG_UNKNOWN_1193",
|
||||
"UMSG_UNKNOWN_1194",
|
||||
"UMSG_UNKNOWN_1195",
|
||||
"UMSG_UNKNOWN_1196",
|
||||
""
|
||||
};
|
||||
|
||||
|
||||
@ -42,8 +42,8 @@ enum OpCodes
|
||||
CMSG_ZONE_MAP = 0x00A,
|
||||
SMSG_ZONE_MAP = 0x00B,
|
||||
CMSG_DEBUG_CHANGECELLZONE = 0x00C,
|
||||
CMSG_EMBLAZON_TABARD_OBSOLETE = 0x00D,
|
||||
CMSG_UNEMBLAZON_TABARD_OBSOLETE = 0x00E,
|
||||
CMSG_MOVE_CHARACTER_CHEAT = 0x00D,
|
||||
SMSG_MOVE_CHARACTER_CHEAT = 0x00E,
|
||||
CMSG_RECHARGE = 0x00F,
|
||||
CMSG_LEARN_SPELL = 0x010,
|
||||
CMSG_CREATEMONSTER = 0x011,
|
||||
@ -59,7 +59,7 @@ enum OpCodes
|
||||
SMSG_FORCEACTIONSHOW = 0x01B,
|
||||
CMSG_PETGODMODE = 0x01C,
|
||||
SMSG_PETGODMODE = 0x01D,
|
||||
SMSG_DEBUGINFOSPELLMISS_OBSOLETE = 0x01E,
|
||||
SMSG_REFER_A_FRIEND_EXPIRED = 0x01E,
|
||||
CMSG_WEATHER_SPEED_CHEAT = 0x01F,
|
||||
CMSG_UNDRESSPLAYER = 0x020,
|
||||
CMSG_BEASTMASTER = 0x021,
|
||||
@ -79,7 +79,7 @@ enum OpCodes
|
||||
SMSG_DEBUG_AISTATE = 0x02F,
|
||||
CMSG_DISABLE_PVP_CHEAT = 0x030,
|
||||
CMSG_ADVANCE_SPAWN_TIME = 0x031,
|
||||
CMSG_PVP_PORT_OBSOLETE = 0x032,
|
||||
SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x032,
|
||||
CMSG_AUTH_SRP6_BEGIN = 0x033,
|
||||
CMSG_AUTH_SRP6_PROOF = 0x034,
|
||||
CMSG_AUTH_SRP6_RECODE = 0x035,
|
||||
@ -207,7 +207,7 @@ enum OpCodes
|
||||
SMSG_READ_ITEM_FAILED = 0x0AF,
|
||||
SMSG_ITEM_COOLDOWN = 0x0B0,
|
||||
CMSG_GAMEOBJ_USE = 0x0B1,
|
||||
CMSG_GAMEOBJ_CHAIR_USE_OBSOLETE = 0x0B2,
|
||||
CMSG_DESTROY_ITEMS = 0x0B2,
|
||||
SMSG_GAMEOBJECT_CUSTOM_ANIM = 0x0B3,
|
||||
CMSG_AREATRIGGER = 0x0B4,
|
||||
MSG_MOVE_START_FORWARD = 0x0B5,
|
||||
@ -333,14 +333,14 @@ enum OpCodes
|
||||
CMSG_NEW_SPELL_SLOT = 0x12D,
|
||||
CMSG_CAST_SPELL = 0x12E,
|
||||
CMSG_CANCEL_CAST = 0x12F,
|
||||
SMSG_CAST_FAILED = 0x130, // old SMSG_CAST_RESULT
|
||||
SMSG_CAST_FAILED = 0x130,
|
||||
SMSG_SPELL_START = 0x131,
|
||||
SMSG_SPELL_GO = 0x132,
|
||||
SMSG_SPELL_FAILURE = 0x133,
|
||||
SMSG_SPELL_COOLDOWN = 0x134,
|
||||
SMSG_COOLDOWN_EVENT = 0x135,
|
||||
CMSG_CANCEL_AURA = 0x136,
|
||||
SMSG_UPDATE_AURA_DURATION = 0x137,
|
||||
SMSG_UPDATE_AURA_DURATION_OBSOLETE = 0x137,
|
||||
SMSG_PET_CAST_FAILED = 0x138,
|
||||
MSG_CHANNEL_START = 0x139,
|
||||
MSG_CHANNEL_UPDATE = 0x13A,
|
||||
@ -364,10 +364,10 @@ enum OpCodes
|
||||
SMSG_DAMAGE_DONE_OBSOLETE = 0x14C,
|
||||
SMSG_DAMAGE_TAKEN_OBSOLETE = 0x14D,
|
||||
SMSG_CANCEL_COMBAT = 0x14E,
|
||||
SMSG_PLAYER_COMBAT_XP_GAIN_OBSOLETE = 0x14F,
|
||||
SMSG_SPELLBREAKLOG = 0x14F,
|
||||
SMSG_SPELLHEALLOG = 0x150,
|
||||
SMSG_SPELLENERGIZELOG = 0x151,
|
||||
CMSG_SHEATHE_OBSOLETE = 0x152,
|
||||
SMSG_BREAK_TARGET = 0x152,
|
||||
CMSG_SAVE_PLAYER = 0x153,
|
||||
CMSG_SETDEATHBINDPOINT = 0x154,
|
||||
SMSG_BINDPOINTUPDATE = 0x155,
|
||||
@ -550,7 +550,7 @@ enum OpCodes
|
||||
SMSG_GMTICKET_CREATE = 0x206,
|
||||
CMSG_GMTICKET_UPDATETEXT = 0x207,
|
||||
SMSG_GMTICKET_UPDATETEXT = 0x208,
|
||||
SMSG_ACCOUNT_DATA_TIMES = 0x209, // old SMSG_ACCOUNT_DATA_MD5
|
||||
SMSG_ACCOUNT_DATA_TIMES = 0x209,
|
||||
CMSG_REQUEST_ACCOUNT_DATA = 0x20A,
|
||||
CMSG_UPDATE_ACCOUNT_DATA = 0x20B,
|
||||
SMSG_UPDATE_ACCOUNT_DATA = 0x20C,
|
||||
@ -571,7 +571,7 @@ enum OpCodes
|
||||
SMSG_GMTICKET_SYSTEMSTATUS = 0x21B,
|
||||
CMSG_SPIRIT_HEALER_ACTIVATE = 0x21C,
|
||||
CMSG_SET_STAT_CHEAT = 0x21D,
|
||||
SMSG_SET_REST_START = 0x21E,
|
||||
SMSG_SET_REST_START_OBSOLETE = 0x21E,
|
||||
CMSG_SKILL_BUY_STEP = 0x21F,
|
||||
CMSG_SKILL_BUY_RANK = 0x220,
|
||||
CMSG_XP_CHEAT = 0x221,
|
||||
@ -726,8 +726,8 @@ enum OpCodes
|
||||
SMSG_SCRIPT_MESSAGE = 0x2B6,
|
||||
SMSG_DUEL_COUNTDOWN = 0x2B7,
|
||||
SMSG_AREA_TRIGGER_MESSAGE = 0x2B8,
|
||||
CMSG_TOGGLE_HELM = 0x2B9,
|
||||
CMSG_TOGGLE_CLOAK = 0x2BA,
|
||||
CMSG_SHOWING_HELM = 0x2B9,
|
||||
CMSG_SHOWING_CLOAK = 0x2BA,
|
||||
SMSG_MEETINGSTONE_JOINFAILED = 0x2BB,
|
||||
SMSG_PLAYER_SKINNED = 0x2BC,
|
||||
SMSG_DURABILITY_DAMAGE_DEATH = 0x2BD,
|
||||
@ -960,10 +960,10 @@ enum OpCodes
|
||||
SMSG_VOICE_SESSION_ADJUST_PRIORITY = 0x3A0,
|
||||
CMSG_VOICE_SET_TALKER_MUTED_REQUEST = 0x3A1,
|
||||
SMSG_VOICE_SET_TALKER_MUTED = 0x3A2,
|
||||
SMSG_INIT_EXTRA_AURA_INFO = 0x3A3,
|
||||
SMSG_SET_EXTRA_AURA_INFO = 0x3A4,
|
||||
SMSG_SET_EXTRA_AURA_INFO_NEED_UPDATE = 0x3A5,
|
||||
SMSG_CLEAR_EXTRA_AURA_INFO = 0x3A6, // old SMSG_CAST_SUCCESS
|
||||
SMSG_INIT_EXTRA_AURA_INFO_OBSOLETE = 0x3A3,
|
||||
SMSG_SET_EXTRA_AURA_INFO_OBSOLETE = 0x3A4,
|
||||
SMSG_SET_EXTRA_AURA_INFO_NEED_UPDATE_OBSOLETE = 0x3A5,
|
||||
SMSG_CLEAR_EXTRA_AURA_INFO_OBSOLETE = 0x3A6,
|
||||
MSG_MOVE_START_DESCEND = 0x3A7,
|
||||
CMSG_IGNORE_REQUIREMENTS_CHEAT = 0x3A8,
|
||||
SMSG_IGNORE_REQUIREMENTS_CHEAT = 0x3A9,
|
||||
@ -973,126 +973,263 @@ enum OpCodes
|
||||
MSG_MOVE_UPDATE_CAN_FLY = 0x3AD,
|
||||
MSG_RAID_READY_CHECK_CONFIRM = 0x3AE,
|
||||
CMSG_VOICE_SESSION_ENABLE = 0x3AF,
|
||||
SMSG_VOICE_PARENTAL_CONTROLS = 0x3B0,
|
||||
CMSG_GM_WHISPER = 0x3B1,
|
||||
SMSG_GM_MESSAGECHAT = 0x3B2,
|
||||
MSG_GM_GEARRATING = 0x3B3,
|
||||
CMSG_COMMENTATOR_ENABLE = 0x3B4,
|
||||
SMSG_COMMENTATOR_STATE_CHANGED = 0x3B5,
|
||||
CMSG_COMMENTATOR_GET_MAP_INFO = 0x3B6,
|
||||
SMSG_COMMENTATOR_MAP_INFO = 0x3B7,
|
||||
CMSG_COMMENTATOR_GET_PLAYER_INFO = 0x3B8,
|
||||
SMSG_COMMENTATOR_GET_PLAYER_INFO = 0x3B9,
|
||||
SMSG_COMMENTATOR_PLAYER_INFO = 0x3BA,
|
||||
CMSG_COMMENTATOR_ENTER_INSTANCE = 0x3BB,
|
||||
CMSG_COMMENTATOR_EXIT_INSTANCE = 0x3BC,
|
||||
CMSG_COMMENTATOR_INSTANCE_COMMAND = 0x3BD,
|
||||
SMSG_CLEAR_TARGET = 0x3BE,
|
||||
CMSG_BOT_DETECTED = 0x3BF,
|
||||
SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x3C0,
|
||||
CMSG_CHEAT_PLAYER_LOGIN = 0x3C1,
|
||||
CMSG_CHEAT_PLAYER_LOOKUP = 0x3C2,
|
||||
SMSG_CHEAT_PLAYER_LOOKUP = 0x3C3,
|
||||
SMSG_KICK_REASON = 0x3C4,
|
||||
MSG_RAID_READY_CHECK_FINISHED = 0x3C5,
|
||||
CMSG_COMPLAIN = 0x3C6,
|
||||
SMSG_COMPLAIN_RESULT = 0x3C7,
|
||||
SMSG_FEATURE_SYSTEM_STATUS = 0x3C8,
|
||||
CMSG_GM_SHOW_COMPLAINTS = 0x3C9,
|
||||
CMSG_GM_UNSQUELCH = 0x3CA,
|
||||
CMSG_CHANNEL_SILENCE_VOICE = 0x3CB,
|
||||
CMSG_CHANNEL_SILENCE_ALL = 0x3CC,
|
||||
CMSG_CHANNEL_UNSILENCE_VOICE = 0x3CD,
|
||||
CMSG_CHANNEL_UNSILENCE_ALL = 0x3CE,
|
||||
CMSG_TARGET_CAST = 0x3CF,
|
||||
CMSG_TARGET_SCRIPT_CAST = 0x3D0,
|
||||
CMSG_CHANNEL_DISPLAY_LIST = 0x3D1,
|
||||
CMSG_SET_ACTIVE_VOICE_CHANNEL = 0x3D2,
|
||||
CMSG_GET_CHANNEL_MEMBER_COUNT = 0x3D3,
|
||||
SMSG_CHANNEL_MEMBER_COUNT = 0x3D4,
|
||||
CMSG_CHANNEL_VOICE_ON = 0x3D5,
|
||||
CMSG_CHANNEL_VOICE_OFF = 0x3D6,
|
||||
CMSG_DEBUG_LIST_TARGETS = 0x3D7,
|
||||
SMSG_DEBUG_LIST_TARGETS = 0x3D8,
|
||||
SMSG_AVAILABLE_VOICE_CHANNEL = 0x3D9,
|
||||
CMSG_ADD_VOICE_IGNORE = 0x3DA,
|
||||
CMSG_DEL_VOICE_IGNORE = 0x3DB,
|
||||
CMSG_PARTY_SILENCE = 0x3DC,
|
||||
CMSG_PARTY_UNSILENCE = 0x3DD,
|
||||
MSG_NOTIFY_PARTY_SQUELCH = 0x3DE,
|
||||
SMSG_COMSAT_RECONNECT_TRY = 0x3DF,
|
||||
SMSG_COMSAT_DISCONNECT = 0x3E0,
|
||||
SMSG_COMSAT_CONNECT_FAIL = 0x3E1,
|
||||
SMSG_VOICE_CHAT_STATUS = 0x3E2,
|
||||
CMSG_REPORT_PVP_AFK = 0x3E3,
|
||||
CMSG_REPORT_PVP_AFK_RESULT = 0x3E4,
|
||||
CMSG_GUILD_BANKER_ACTIVATE = 0x3E5,
|
||||
CMSG_GUILD_BANK_QUERY_TAB = 0x3E6,
|
||||
SMSG_GUILD_BANK_LIST = 0x3E7,
|
||||
CMSG_GUILD_BANK_SWAP_ITEMS = 0x3E8,
|
||||
CMSG_GUILD_BANK_BUY_TAB = 0x3E9,
|
||||
CMSG_GUILD_BANK_UPDATE_TAB = 0x3EA,
|
||||
CMSG_GUILD_BANK_DEPOSIT_MONEY = 0x3EB,
|
||||
CMSG_GUILD_BANK_WITHDRAW_MONEY = 0x3EC,
|
||||
MSG_GUILD_BANK_LOG_QUERY = 0x3ED,
|
||||
CMSG_SET_CHANNEL_WATCH = 0x3EE,
|
||||
SMSG_USERLIST_ADD = 0x3EF,
|
||||
SMSG_USERLIST_REMOVE = 0x3F0,
|
||||
SMSG_USERLIST_UPDATE = 0x3F1,
|
||||
CMSG_CLEAR_CHANNEL_WATCH = 0x3F2,
|
||||
SMSG_INSPECT_TALENT = 0x3F3,
|
||||
SMSG_GOGOGO_OBSOLETE = 0x3F4,
|
||||
SMSG_ECHO_PARTY_SQUELCH = 0x3F5,
|
||||
CMSG_SET_TITLE_SUFFIX = 0x3F6,
|
||||
CMSG_SPELLCLICK = 0x3F7,
|
||||
SMSG_LOOT_LIST = 0x3F8,
|
||||
CMSG_GM_CHARACTER_RESTORE = 0x3F9,
|
||||
CMSG_GM_CHARACTER_SAVE = 0x3FA,
|
||||
SMSG_VOICESESSION_FULL = 0x3FB,
|
||||
MSG_GUILD_PERMISSIONS = 0x3FC,
|
||||
MSG_GUILD_BANK_MONEY_WITHDRAWN = 0x3FD,
|
||||
MSG_GUILD_EVENT_LOG_QUERY = 0x3FE,
|
||||
CMSG_MAELSTROM_RENAME_GUILD = 0x3FF,
|
||||
CMSG_GET_MIRRORIMAGE_DATA = 0x400,
|
||||
SMSG_MIRRORIMAGE_DATA = 0x401,
|
||||
SMSG_FORCE_DISPLAY_UPDATE = 0x402,
|
||||
SMSG_SPELL_CHANCE_RESIST_PUSHBACK = 0x403,
|
||||
CMSG_IGNORE_DIMINISHING_RETURNS_CHEAT = 0x404,
|
||||
SMSG_IGNORE_DIMINISHING_RETURNS_CHEAT = 0x405,
|
||||
CMSG_KEEP_ALIVE = 0x406,
|
||||
SMSG_RAID_READY_CHECK_ERROR = 0x407,
|
||||
CMSG_OPT_OUT_OF_LOOT = 0x408,
|
||||
MSG_QUERY_GUILD_BANK_TEXT = 0x409,
|
||||
CMSG_SET_GUILD_BANK_TEXT = 0x40A,
|
||||
CMSG_SET_GRANTABLE_LEVELS = 0x40B,
|
||||
CMSG_GRANT_LEVEL = 0x40C,
|
||||
CMSG_REFER_A_FRIEND = 0x40D,
|
||||
MSG_GM_CHANGE_ARENA_RATING = 0x40E,
|
||||
CMSG_DECLINE_CHANNEL_INVITE = 0x40F,
|
||||
CMSG_GROUPACTION_THROTTLED = 0x410,
|
||||
SMSG_OVERRIDE_LIGHT = 0x411,
|
||||
SMSG_TOTEM_CREATED = 0x412,
|
||||
CMSG_TOTEM_DESTROYED = 0x413,
|
||||
CMSG_EXPIRE_RAID_INSTANCE = 0x414,
|
||||
CMSG_NO_SPELL_VARIANCE = 0x415,
|
||||
CMSG_QUESTGIVER_STATUS_MULTIPLE_QUERY = 0x416,
|
||||
SMSG_QUESTGIVER_STATUS_MULTIPLE = 0x417,
|
||||
CMSG_SET_PLAYER_DECLINED_NAMES = 0x418,
|
||||
SMSG_SET_PLAYER_DECLINED_NAMES_RESULT = 0x419,
|
||||
CMSG_QUERY_SERVER_BUCK_DATA = 0x41A,
|
||||
CMSG_CLEAR_SERVER_BUCK_DATA = 0x41B,
|
||||
SMSG_SERVER_BUCK_DATA = 0x41C,
|
||||
SMSG_SEND_UNLEARN_SPELLS = 0x41D,
|
||||
SMSG_PROPOSE_LEVEL_GRANT = 0x41E,
|
||||
CMSG_ACCEPT_LEVEL_GRANT = 0x41F,
|
||||
SMSG_REFER_A_FRIEND_FAILURE = 0x420,
|
||||
SMSG_SPLINE_MOVE_SET_FLYING = 0x421,
|
||||
SMSG_SPLINE_MOVE_UNSET_FLYING = 0x422,
|
||||
SMSG_SUMMON_CANCEL = 0x423
|
||||
SMSG_VOICE_SESSION_ENABLE = 0x3B0,
|
||||
SMSG_VOICE_PARENTAL_CONTROLS = 0x3B1,
|
||||
CMSG_GM_WHISPER = 0x3B2,
|
||||
SMSG_GM_MESSAGECHAT = 0x3B3,
|
||||
MSG_GM_GEARRATING = 0x3B4,
|
||||
CMSG_COMMENTATOR_ENABLE = 0x3B5,
|
||||
SMSG_COMMENTATOR_STATE_CHANGED = 0x3B6,
|
||||
CMSG_COMMENTATOR_GET_MAP_INFO = 0x3B7,
|
||||
SMSG_COMMENTATOR_MAP_INFO = 0x3B8,
|
||||
CMSG_COMMENTATOR_GET_PLAYER_INFO = 0x3B9,
|
||||
SMSG_COMMENTATOR_GET_PLAYER_INFO = 0x3BA,
|
||||
SMSG_COMMENTATOR_PLAYER_INFO = 0x3BB,
|
||||
CMSG_COMMENTATOR_ENTER_INSTANCE = 0x3BC,
|
||||
CMSG_COMMENTATOR_EXIT_INSTANCE = 0x3BD,
|
||||
CMSG_COMMENTATOR_INSTANCE_COMMAND = 0x3BE,
|
||||
SMSG_CLEAR_TARGET = 0x3BF,
|
||||
CMSG_BOT_DETECTED = 0x3C0,
|
||||
SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x3C1,
|
||||
CMSG_CHEAT_PLAYER_LOGIN = 0x3C2,
|
||||
CMSG_CHEAT_PLAYER_LOOKUP = 0x3C3,
|
||||
SMSG_CHEAT_PLAYER_LOOKUP = 0x3C4,
|
||||
SMSG_KICK_REASON = 0x3C5,
|
||||
MSG_RAID_READY_CHECK_FINISHED = 0x3C6,
|
||||
CMSG_COMPLAIN = 0x3C7,
|
||||
SMSG_COMPLAIN_RESULT = 0x3C8,
|
||||
SMSG_FEATURE_SYSTEM_STATUS = 0x3C9,
|
||||
CMSG_GM_SHOW_COMPLAINTS = 0x3CA,
|
||||
CMSG_GM_UNSQUELCH = 0x3CB,
|
||||
CMSG_CHANNEL_SILENCE_VOICE = 0x3CC,
|
||||
CMSG_CHANNEL_SILENCE_ALL = 0x3CD,
|
||||
CMSG_CHANNEL_UNSILENCE_VOICE = 0x3CE,
|
||||
CMSG_CHANNEL_UNSILENCE_ALL = 0x3CF,
|
||||
CMSG_TARGET_CAST = 0x3D0,
|
||||
CMSG_TARGET_SCRIPT_CAST = 0x3D1,
|
||||
CMSG_CHANNEL_DISPLAY_LIST = 0x3D2,
|
||||
CMSG_SET_ACTIVE_VOICE_CHANNEL = 0x3D3,
|
||||
CMSG_GET_CHANNEL_MEMBER_COUNT = 0x3D4,
|
||||
SMSG_CHANNEL_MEMBER_COUNT = 0x3D5,
|
||||
CMSG_CHANNEL_VOICE_ON = 0x3D6,
|
||||
CMSG_CHANNEL_VOICE_OFF = 0x3D7,
|
||||
CMSG_DEBUG_LIST_TARGETS = 0x3D8,
|
||||
SMSG_DEBUG_LIST_TARGETS = 0x3D9,
|
||||
SMSG_AVAILABLE_VOICE_CHANNEL = 0x3DA,
|
||||
CMSG_ADD_VOICE_IGNORE = 0x3DB,
|
||||
CMSG_DEL_VOICE_IGNORE = 0x3DC,
|
||||
CMSG_PARTY_SILENCE = 0x3DD,
|
||||
CMSG_PARTY_UNSILENCE = 0x3DE,
|
||||
MSG_NOTIFY_PARTY_SQUELCH = 0x3DF,
|
||||
SMSG_COMSAT_RECONNECT_TRY = 0x3E0,
|
||||
SMSG_COMSAT_DISCONNECT = 0x3E1,
|
||||
SMSG_COMSAT_CONNECT_FAIL = 0x3E2,
|
||||
SMSG_VOICE_CHAT_STATUS = 0x3E3,
|
||||
CMSG_REPORT_PVP_AFK = 0x3E4,
|
||||
CMSG_REPORT_PVP_AFK_RESULT = 0x3E5,
|
||||
CMSG_GUILD_BANKER_ACTIVATE = 0x3E6,
|
||||
CMSG_GUILD_BANK_QUERY_TAB = 0x3E7,
|
||||
SMSG_GUILD_BANK_LIST = 0x3E8,
|
||||
CMSG_GUILD_BANK_SWAP_ITEMS = 0x3E9,
|
||||
CMSG_GUILD_BANK_BUY_TAB = 0x3EA,
|
||||
CMSG_GUILD_BANK_UPDATE_TAB = 0x3EB,
|
||||
CMSG_GUILD_BANK_DEPOSIT_MONEY = 0x3EC,
|
||||
CMSG_GUILD_BANK_WITHDRAW_MONEY = 0x3ED,
|
||||
MSG_GUILD_BANK_LOG_QUERY = 0x3EE,
|
||||
CMSG_SET_CHANNEL_WATCH = 0x3EF,
|
||||
SMSG_USERLIST_ADD = 0x3F0,
|
||||
SMSG_USERLIST_REMOVE = 0x3F1,
|
||||
SMSG_USERLIST_UPDATE = 0x3F2,
|
||||
CMSG_CLEAR_CHANNEL_WATCH = 0x3F3,
|
||||
SMSG_INSPECT_TALENT = 0x3F4,
|
||||
SMSG_GOGOGO_OBSOLETE = 0x3F5,
|
||||
SMSG_ECHO_PARTY_SQUELCH = 0x3F6,
|
||||
CMSG_SET_TITLE_SUFFIX = 0x3F7,
|
||||
CMSG_SPELLCLICK = 0x3F8,
|
||||
SMSG_LOOT_LIST = 0x3F9,
|
||||
CMSG_GM_CHARACTER_RESTORE = 0x3FA,
|
||||
CMSG_GM_CHARACTER_SAVE = 0x3FB,
|
||||
SMSG_VOICESESSION_FULL = 0x3FC,
|
||||
MSG_GUILD_PERMISSIONS = 0x3FD,
|
||||
MSG_GUILD_BANK_MONEY_WITHDRAWN = 0x3FE,
|
||||
MSG_GUILD_EVENT_LOG_QUERY = 0x3FF,
|
||||
CMSG_MAELSTROM_RENAME_GUILD = 0x400,
|
||||
CMSG_GET_MIRRORIMAGE_DATA = 0x401,
|
||||
SMSG_MIRRORIMAGE_DATA = 0x402,
|
||||
SMSG_FORCE_DISPLAY_UPDATE = 0x403,
|
||||
SMSG_SPELL_CHANCE_RESIST_PUSHBACK = 0x404,
|
||||
CMSG_IGNORE_DIMINISHING_RETURNS_CHEAT = 0x405,
|
||||
SMSG_IGNORE_DIMINISHING_RETURNS_CHEAT = 0x406,
|
||||
CMSG_KEEP_ALIVE = 0x407,
|
||||
SMSG_RAID_READY_CHECK_ERROR = 0x408,
|
||||
CMSG_OPT_OUT_OF_LOOT = 0x409,
|
||||
MSG_QUERY_GUILD_BANK_TEXT = 0x40A,
|
||||
CMSG_SET_GUILD_BANK_TEXT = 0x40B,
|
||||
CMSG_SET_GRANTABLE_LEVELS = 0x40C,
|
||||
CMSG_GRANT_LEVEL = 0x40D,
|
||||
CMSG_REFER_A_FRIEND = 0x40E,
|
||||
MSG_GM_CHANGE_ARENA_RATING = 0x40F,
|
||||
CMSG_DECLINE_CHANNEL_INVITE = 0x410,
|
||||
CMSG_GROUPACTION_THROTTLED = 0x411,
|
||||
SMSG_OVERRIDE_LIGHT = 0x412,
|
||||
SMSG_TOTEM_CREATED = 0x413,
|
||||
CMSG_TOTEM_DESTROYED = 0x414,
|
||||
CMSG_EXPIRE_RAID_INSTANCE = 0x415,
|
||||
CMSG_NO_SPELL_VARIANCE = 0x416,
|
||||
CMSG_QUESTGIVER_STATUS_MULTIPLE_QUERY = 0x417,
|
||||
SMSG_QUESTGIVER_STATUS_MULTIPLE = 0x418,
|
||||
CMSG_SET_PLAYER_DECLINED_NAMES = 0x419,
|
||||
SMSG_SET_PLAYER_DECLINED_NAMES_RESULT = 0x41A,
|
||||
CMSG_QUERY_SERVER_BUCK_DATA = 0x41B,
|
||||
CMSG_CLEAR_SERVER_BUCK_DATA = 0x41C,
|
||||
SMSG_SERVER_BUCK_DATA = 0x41D,
|
||||
SMSG_SEND_UNLEARN_SPELLS = 0x41E,
|
||||
SMSG_PROPOSE_LEVEL_GRANT = 0x41F,
|
||||
CMSG_ACCEPT_LEVEL_GRANT = 0x420,
|
||||
SMSG_REFER_A_FRIEND_FAILURE = 0x421,
|
||||
SMSG_SPLINE_MOVE_SET_FLYING = 0x422,
|
||||
SMSG_SPLINE_MOVE_UNSET_FLYING = 0x423,
|
||||
SMSG_SUMMON_CANCEL = 0x424,
|
||||
CMSG_CHANGE_PERSONAL_ARENA_RATING = 0x425,
|
||||
CMSG_ALTER_APPEARANCE = 0x426,
|
||||
SMSG_ENABLE_BARBER_SHOP = 0x427,
|
||||
SMSG_BARBER_SHOP_RESULT = 0x428,
|
||||
CMSG_CALENDAR_GET_CALENDAR = 0x429,
|
||||
CMSG_CALENDAR_GET_EVENT = 0x42A,
|
||||
CMSG_CALENDAR_GUILD_FILTER = 0x42B,
|
||||
CMSG_CALENDAR_ARENA_TEAM = 0x42C,
|
||||
CMSG_CALENDAR_ADD_EVENT = 0x42D,
|
||||
CMSG_CALENDAR_UPDATE_EVENT = 0x42E,
|
||||
CMSG_CALENDAR_REMOVE_EVENT = 0x42F,
|
||||
CMSG_CALENDAR_COPY_EVENT = 0x430,
|
||||
CMSG_CALENDAR_EVENT_INVITE = 0x431,
|
||||
CMSG_CALENDAR_EVENT_RSVP = 0x432,
|
||||
CMSG_CALENDAR_EVENT_REMOVE_INVITE = 0x433,
|
||||
CMSG_CALENDAR_EVENT_STATUS = 0x434,
|
||||
CMSG_CALENDAR_EVENT_MODERATOR_STATUS = 0x435,
|
||||
SMSG_CALENDAR_SEND_CALENDAR = 0x436,
|
||||
SMSG_CALENDAR_SEND_EVENT = 0x437,
|
||||
SMSG_CALENDAR_FILTER_GUILD = 0x438,
|
||||
SMSG_CALENDAR_ARENA_TEAM = 0x439,
|
||||
SMSG_CALENDAR_EVENT_INVITE = 0x43A,
|
||||
SMSG_CALENDAR_EVENT_INVITE_REMOVED = 0x43B,
|
||||
SMSG_CALENDAR_EVENT_STATUS = 0x43C,
|
||||
SMSG_CALENDAR_COMMAND_RESULT = 0x43D,
|
||||
SMSG_CALENDAR_RAID_LOCKOUT_ADDED = 0x43E,
|
||||
SMSG_CALENDAR_RAID_LOCKOUT_REMOVED = 0x43F,
|
||||
SMSG_CALENDAR_EVENT_INVITE_ALERT = 0x440,
|
||||
SMSG_CALENDAR_EVENT_INVITE_REMOVED_ALERT = 0x441,
|
||||
SMSG_CALENDAR_EVENT_INVITE_STATUS_ALERT = 0x442,
|
||||
SMSG_CALENDAR_EVENT_REMOVED_ALERT = 0x443,
|
||||
SMSG_CALENDAR_EVENT_UPDATED_ALERT = 0x444,
|
||||
SMSG_CALENDAR_EVENT_MODERATOR_STATUS_ALERT = 0x445,
|
||||
CMSG_CALENDAR_COMPLAIN = 0x446,
|
||||
CMSG_CALENDAR_GET_NUM_PENDING = 0x447,
|
||||
SMSG_CALENDAR_SEND_NUM_PENDING = 0x448,
|
||||
CMSG_SAVE_DANCE = 0x449,
|
||||
SMSG_NOTIFY_DANCE = 0x44A,
|
||||
CMSG_PLAY_DANCE = 0x44B,
|
||||
SMSG_PLAY_DANCE = 0x44C,
|
||||
CMSG_LOAD_DANCES = 0x44D,
|
||||
CMSG_STOP_DANCE = 0x44E,
|
||||
SMSG_STOP_DANCE = 0x44F,
|
||||
CMSG_SYNC_DANCE = 0x450,
|
||||
CMSG_DANCE_QUERY = 0x451,
|
||||
SMSG_DANCE_QUERY_RESPONSE = 0x452,
|
||||
SMSG_INVALIDATE_DANCE = 0x453,
|
||||
CMSG_DELETE_DANCE = 0x454,
|
||||
SMSG_LEARNED_DANCE_MOVES = 0x455,
|
||||
CMSG_LEARN_DANCE_MOVE = 0x456,
|
||||
CMSG_UNLEARN_DANCE_MOVE = 0x457,
|
||||
CMSG_SET_RUNE_COUNT = 0x458,
|
||||
CMSG_SET_RUNE_COOLDOWN = 0x459,
|
||||
MSG_MOVE_SET_PITCH_RATE_CHEAT = 0x45A,
|
||||
MSG_MOVE_SET_PITCH_RATE = 0x45B,
|
||||
SMSG_FORCE_PITCH_RATE_CHANGE = 0x45C,
|
||||
CMSG_FORCE_PITCH_RATE_CHANGE_ACK = 0x45D,
|
||||
SMSG_SPLINE_SET_PITCH_RATE = 0x45E,
|
||||
SMSG_MOVE_ABANDON_TRANSPORT = 0x45F,
|
||||
MSG_MOVE_ABANDON_TRANSPORT = 0x460,
|
||||
CMSG_MOVE_ABANDON_TRANSPORT_ACK = 0x461,
|
||||
CMSG_UPDATE_MISSILE_TRAJECTORY = 0x462,
|
||||
SMSG_UPDATE_ACCOUNT_DATA_COMPLETE = 0x463,
|
||||
SMSG_TRIGGER_MOVIE = 0x464,
|
||||
CMSG_COMPLETE_MOVIE = 0x465,
|
||||
CMSG_SET_GLYPH_SLOT = 0x466,
|
||||
CMSG_SET_GLYPH = 0x467,
|
||||
SMSG_ACHIEVEMENT_EARNED = 0x468,
|
||||
SMSG_DYNAMIC_DROP_ROLL_RESULT = 0x469,
|
||||
SMSG_CRITERIA_UPDATE = 0x46A,
|
||||
CMSG_QUERY_INSPECT_ACHIEVEMENTS = 0x46B,
|
||||
SMSG_RESPOND_INSPECT_ACHIEVEMENTS = 0x46C,
|
||||
CMSG_DISMISS_CONTROLLED_VEHICLE = 0x46D,
|
||||
CMSG_COMPLETE_ACHIEVEMENT_CHEAT = 0x46E,
|
||||
SMSG_QUESTUPDATE_ADD_PVP_KILL = 0x46F,
|
||||
CMSG_SET_CRITERIA_CHEAT = 0x470,
|
||||
SMSG_GROUP_SWAP_FAILED = 0x471,
|
||||
CMSG_UNITANIMTIER_CHEAT = 0x472,
|
||||
CMSG_CHAR_CUSTOMIZE = 0x473,
|
||||
SMSG_CHAR_CUSTOMIZE = 0x474,
|
||||
SMSG_PET_RENAMEABLE = 0x475,
|
||||
CMSG_REQUEST_VEHICLE_EXIT = 0x476,
|
||||
CMSG_REQUEST_VEHICLE_PREV_SEAT = 0x477,
|
||||
CMSG_REQUEST_VEHICLE_NEXT_SEAT = 0x478,
|
||||
CMSG_REQUEST_VEHICLE_SWITCH_SEAT = 0x479,
|
||||
CMSG_PET_LEARN_TALENT = 0x47A,
|
||||
CMSG_PET_UNLEARN_TALENTS = 0x47B,
|
||||
SMSG_SET_PHASE_SHIFT = 0x47C,
|
||||
SMSG_ALL_ACHIEVEMENT_DATA = 0x47D,
|
||||
CMSG_FORCE_SAY_CHEAT = 0x47E,
|
||||
SMSG_HEALTH_UPDATE = 0x47F,
|
||||
SMSG_POWER_UPDATE = 0x480,
|
||||
CMSG_GAMEOBJ_REPORT_USE = 0x481,
|
||||
SMSG_HIGHEST_THREAT_UPDATE = 0x482,
|
||||
SMSG_THREAT_UPDATE = 0x483,
|
||||
SMSG_THREAT_REMOVE = 0x484,
|
||||
SMSG_THREAT_CLEAR = 0x485,
|
||||
SMSG_CONVERT_RUNE = 0x486,
|
||||
SMSG_RESYNC_RUNES = 0x487,
|
||||
SMSG_ADD_RUNE_POWER = 0x488,
|
||||
CMSG_START_QUEST = 0x489,
|
||||
CMSG_REMOVE_GLYPH = 0x48A,
|
||||
CMSG_DUMP_OBJECTS = 0x48B,
|
||||
SMSG_DUMP_OBJECTS_DATA = 0x48C,
|
||||
CMSG_DISMISS_CRITTER = 0x48D,
|
||||
SMSG_NOTIFY_DEST_LOC_SPELL_CAST = 0x48E,
|
||||
CMSG_AUCTION_LIST_PENDING_SALES = 0x48F,
|
||||
SMSG_AUCTION_LIST_PENDING_SALES = 0x490,
|
||||
SMSG_MODIFY_COOLDOWN = 0x491,
|
||||
SMSG_PET_UPDATE_COMBO_POINTS = 0x492,
|
||||
CMSG_ENABLETAXI = 0x493,
|
||||
SMSG_PRE_RESURRECT = 0x494,
|
||||
SMSG_AURA_UPDATE_ALL = 0x495,
|
||||
SMSG_AURA_UPDATE = 0x496,
|
||||
CMSG_FLOOD_GRACE_CHEAT = 0x497,
|
||||
SMSG_SERVER_FIRST_ACHIEVEMENT = 0x498,
|
||||
SMSG_PET_LEARNED_SPELL = 0x499,
|
||||
SMSG_PET_REMOVED_SPELL = 0x49A,
|
||||
CMSG_CHANGE_SEATS_ON_CONTROLLED_VEHICLE = 0x49B,
|
||||
CMSG_HEARTH_AND_RESURRECT = 0x49C,
|
||||
SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x49D,
|
||||
SMSG_CRITERIA_DELETED = 0x49E,
|
||||
SMSG_ACHIEVEMENT_DELETED = 0x49F,
|
||||
CMSG_SERVER_INFO_QUERY = 0x4A0,
|
||||
SMSG_SERVER_INFO_RESPONSE = 0x4A1,
|
||||
CMSG_CHECK_LOGIN_CRITERIA = 0x4A2,
|
||||
SMSG_SERVER_BUCK_DATA_START = 0x4A3,
|
||||
CMSG_QUERY_VEHICLE_STATUS = 0x4A4,
|
||||
SMSG_PET_GUIDS = 0x4A5,
|
||||
SMSG_CLIENTCACHE_VERSION = 0x4A6,
|
||||
UMSG_UNKNOWN_1191 = 0x4A7,
|
||||
UMSG_UNKNOWN_1192 = 0x4A8,
|
||||
UMSG_UNKNOWN_1193 = 0x4A9,
|
||||
UMSG_UNKNOWN_1194 = 0x4AA,
|
||||
UMSG_UNKNOWN_1195 = 0x4AB,
|
||||
UMSG_UNKNOWN_1196 = 0x4AC
|
||||
};
|
||||
|
||||
//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 1060
|
||||
#define MAX_OPCODE_ID 1196
|
||||
|
||||
/// Results of friend related commands
|
||||
enum FriendsResult
|
||||
|
||||
@ -6,6 +6,9 @@
|
||||
#include "SysDefs.h"
|
||||
#include "Unit.h"
|
||||
|
||||
|
||||
/*
|
||||
TODO: Update me or use UpdateFields directly
|
||||
#define PLAYER_SLOT_START 0
|
||||
|
||||
#define EQUIPMENT_SLOT_START 0
|
||||
@ -119,6 +122,7 @@
|
||||
#define TRADE_SLOT_COUNT 7
|
||||
#define TRADE_SLOT_TRADED_COUNT 6
|
||||
#define TRADE_SLOT_NONTRADED 6
|
||||
*/
|
||||
|
||||
struct PlayerEnumItem
|
||||
{
|
||||
|
||||
@ -55,7 +55,7 @@ enum Classes
|
||||
CLASS_HUNTER = 3,
|
||||
CLASS_ROGUE = 4,
|
||||
CLASS_PRIEST = 5,
|
||||
// CLASS_UNK1 = 6, unused
|
||||
CLASS_DEATH_KNIGHT = 6,
|
||||
CLASS_SHAMAN = 7,
|
||||
CLASS_MAGE = 8,
|
||||
CLASS_WARLOCK = 9,
|
||||
@ -140,7 +140,8 @@ enum ItemQualities
|
||||
ITEM_QUALITY_RARE = 3, //BLUE
|
||||
ITEM_QUALITY_EPIC = 4, //PURPLE
|
||||
ITEM_QUALITY_LEGENDARY = 5, //ORANGE
|
||||
ITEM_QUALITY_ARTIFACT = 6 //LIGHT YELLOW
|
||||
ITEM_QUALITY_ARTIFACT = 6, //LIGHT YELLOW
|
||||
ITEM_QUALITY_HEIRLOOM = 7
|
||||
};
|
||||
|
||||
enum sheathTypes
|
||||
@ -209,7 +210,7 @@ enum SpellEffects
|
||||
SPELL_EFFECT_TELEPORT_UNITS = 5,
|
||||
SPELL_EFFECT_APPLY_AURA = 6,
|
||||
SPELL_EFFECT_ENVIRONMENTAL_DAMAGE = 7,
|
||||
SPELL_EFFECT_MANA_DRAIN = 8,
|
||||
SPELL_EFFECT_POWER_DRAIN = 8,
|
||||
SPELL_EFFECT_HEALTH_LEECH = 9,
|
||||
SPELL_EFFECT_HEAL = 10,
|
||||
SPELL_EFFECT_BIND = 11,
|
||||
@ -236,7 +237,7 @@ enum SpellEffects
|
||||
SPELL_EFFECT_TRIGGER_MISSILE = 32,
|
||||
SPELL_EFFECT_OPEN_LOCK = 33,
|
||||
SPELL_EFFECT_SUMMON_CHANGE_ITEM = 34,
|
||||
SPELL_EFFECT_APPLY_AREA_AURA = 35,
|
||||
SPELL_EFFECT_APPLY_AREA_AURA_PARTY = 35,
|
||||
SPELL_EFFECT_LEARN_SPELL = 36,
|
||||
SPELL_EFFECT_SPELL_DEFENSE = 37,
|
||||
SPELL_EFFECT_DISPEL = 38,
|
||||
@ -246,12 +247,11 @@ enum SpellEffects
|
||||
SPELL_EFFECT_SUMMON_GUARDIAN = 42,
|
||||
SPELL_EFFECT_TELEPORT_UNITS_FACE_CASTER= 43,
|
||||
SPELL_EFFECT_SKILL_STEP = 44,
|
||||
SPELL_EFFECT_UNDEFINED_45 = 45,
|
||||
SPELL_EFFECT_ADD_HONOR = 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,
|
||||
@ -267,16 +267,16 @@ enum SpellEffects
|
||||
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_APPLY_AREA_AURA_RAID = 65,
|
||||
SPELL_EFFECT_CREATE_MANA_GEM = 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_UNTRAIN_TALENTS = 73,
|
||||
SPELL_EFFECT_APPLY_GLYPH = 74,
|
||||
SPELL_EFFECT_HEAL_MECHANICAL = 75,
|
||||
SPELL_EFFECT_SUMMON_OBJECT_WILD = 76,
|
||||
SPELL_EFFECT_SCRIPT_EFFECT = 77,
|
||||
@ -289,10 +289,10 @@ enum SpellEffects
|
||||
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_WMO_DAMAGE = 87,
|
||||
SPELL_EFFECT_WMO_REPAIR = 88,
|
||||
SPELL_EFFECT_WMO_CHANGE = 89,
|
||||
SPELL_EFFECT_KILL_CREDIT = 90,
|
||||
SPELL_EFFECT_THREAT_ALL = 91,
|
||||
SPELL_EFFECT_ENCHANT_HELD_ITEM = 92,
|
||||
SPELL_EFFECT_SUMMON_PHANTASM = 93,
|
||||
@ -321,38 +321,48 @@ enum SpellEffects
|
||||
SPELL_EFFECT_SKIN_PLAYER_CORPSE = 116,
|
||||
SPELL_EFFECT_SPIRIT_HEAL = 117,
|
||||
SPELL_EFFECT_SKILL = 118,
|
||||
SPELL_EFFECT_APPLY_AURA_NEW = 119,
|
||||
SPELL_EFFECT_APPLY_AREA_AURA_PET = 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_SEND_TAXI = 123,
|
||||
SPELL_EFFECT_PLAYER_PULL = 124,
|
||||
SPELL_EFFECT_MODIFY_THREAT_PERCENT = 125,
|
||||
SPELL_EFFECT_STEAL_BENEFICIAL_BUFF = 126,
|
||||
SPELL_EFFECT_PROSPECTING = 127,
|
||||
SPELL_EFFECT_128 = 128,
|
||||
SPELL_EFFECT_129 = 129,
|
||||
SPELL_EFFECT_130 = 130,
|
||||
SPELL_EFFECT_APPLY_AREA_AURA_FRIEND = 128,
|
||||
SPELL_EFFECT_APPLY_AREA_AURA_ENEMY = 129,
|
||||
SPELL_EFFECT_REDIRECT_THREAT = 130,
|
||||
SPELL_EFFECT_131 = 131,
|
||||
SPELL_EFFECT_132 = 132,
|
||||
SPELL_EFFECT_133 = 133,
|
||||
SPELL_EFFECT_134 = 134,
|
||||
SPELL_EFFECT_UNLEARN_SPECIALIZATION = 133,
|
||||
SPELL_EFFECT_KILL_CREDIT2 = 134,
|
||||
SPELL_EFFECT_135 = 135,
|
||||
SPELL_EFFECT_136 = 136,
|
||||
SPELL_EFFECT_137 = 137,
|
||||
SPELL_EFFECT_HEAL_PCT = 136,
|
||||
SPELL_EFFECT_ENERGIZE_PCT = 137,
|
||||
SPELL_EFFECT_138 = 138,
|
||||
SPELL_EFFECT_139 = 139,
|
||||
SPELL_EFFECT_140 = 140,
|
||||
SPELL_EFFECT_CLEAR_QUEST = 139,
|
||||
SPELL_EFFECT_FORCE_CAST = 140,
|
||||
SPELL_EFFECT_141 = 141,
|
||||
SPELL_EFFECT_142 = 142,
|
||||
SPELL_EFFECT_143 = 143,
|
||||
SPELL_EFFECT_TRIGGER_SPELL_WITH_VALUE = 142,
|
||||
SPELL_EFFECT_APPLY_AREA_AURA_OWNER = 143,
|
||||
SPELL_EFFECT_144 = 144,
|
||||
SPELL_EFFECT_145 = 145,
|
||||
SPELL_EFFECT_146 = 146,
|
||||
SPELL_EFFECT_147 = 147,
|
||||
SPELL_EFFECT_ACTIVATE_RUNE = 146,
|
||||
SPELL_EFFECT_QUEST_FAIL = 147,
|
||||
SPELL_EFFECT_148 = 148,
|
||||
SPELL_EFFECT_149 = 149,
|
||||
TOTAL_SPELL_EFFECTS = 150
|
||||
SPELL_EFFECT_150 = 150,
|
||||
SPELL_EFFECT_TRIGGER_SPELL_2 = 151,
|
||||
SPELL_EFFECT_152 = 152,
|
||||
SPELL_EFFECT_153 = 153,
|
||||
SPELL_EFFECT_154 = 154,
|
||||
SPELL_EFFECT_TITAN_GRIP = 155,
|
||||
SPELL_EFFECT_ADD_SOCKET = 156,
|
||||
SPELL_EFFECT_157 = 157,
|
||||
SPELL_EFFECT_MILLING = 158,
|
||||
SPELL_EFFECT_ALLOW_RENAME_PET = 159,
|
||||
TOTAL_SPELL_EFFECTS = 160
|
||||
};
|
||||
|
||||
enum CharacterStates
|
||||
@ -404,7 +414,8 @@ enum GameobjectTypes
|
||||
GAMEOBJECT_TYPE_DO_NOT_USE_YET = 32,
|
||||
GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING = 33,
|
||||
GAMEOBJECT_TYPE_GUILD_BANK = 34,
|
||||
MAX_GAMEOBJECT_TYPE = 35 // sending to client this or greater value can crash client.
|
||||
GAMEOBJECT_TYPE_TRAPDOOR = 35,
|
||||
MAX_GAMEOBJECT_TYPE = 36 // sending to client this or greater value can crash client.
|
||||
};
|
||||
|
||||
enum TextEmote
|
||||
@ -924,7 +935,9 @@ enum LockType
|
||||
LOCKTYPE_BLASTING = 16,
|
||||
LOCKTYPE_SLOW_OPEN = 17,
|
||||
LOCKTYPE_SLOW_CLOSE = 18,
|
||||
LOCKTYPE_FISHING = 19
|
||||
LOCKTYPE_FISHING = 19,
|
||||
LOCKTYPE_INSCRIPTION = 20,
|
||||
LOCKTYPE_OPEN_FROM_VEHICLE = 21
|
||||
};
|
||||
|
||||
enum TrainerType
|
||||
@ -974,7 +987,7 @@ enum CreatureFamily
|
||||
CREATURE_FAMILY_IMP = 23,
|
||||
CREATURE_FAMILY_BAT = 24,
|
||||
CREATURE_FAMILY_HYENA = 25,
|
||||
CREATURE_FAMILY_OWL = 26,
|
||||
CREATURE_FAMILY_BIRD_OF_PREY = 26,
|
||||
CREATURE_FAMILY_WIND_SERPENT = 27,
|
||||
CREATURE_FAMILY_REMOTE_CONTROL = 28,
|
||||
CREATURE_FAMILY_FELGUARD = 29,
|
||||
@ -984,7 +997,17 @@ enum CreatureFamily
|
||||
CREATURE_FAMILY_SPOREBAT = 33,
|
||||
CREATURE_FAMILY_NETHER_RAY = 34,
|
||||
CREATURE_FAMILY_SERPENT = 35,
|
||||
CREATURE_FAMILY_SEA_LION = 36
|
||||
CREATURE_FAMILY_SEA_LION = 36,
|
||||
CREATURE_FAMILY_MOTH = 37,
|
||||
CREATURE_FAMILY_CHIMAERA = 38,
|
||||
CREATURE_FAMILY_DEVILSAUR = 39,
|
||||
CREATURE_FAMILY_GHOUL = 40,
|
||||
CREATURE_FAMILY_SILITHID = 41,
|
||||
CREATURE_FAMILY_WORM = 42,
|
||||
CREATURE_FAMILY_RHINO = 43,
|
||||
CREATURE_FAMILY_WASP = 44,
|
||||
CREATURE_FAMILY_CORE_HOUND = 45,
|
||||
CREATURE_FAMILY_SPIRIT_BEAST = 46
|
||||
};
|
||||
|
||||
enum CreatureEliteType
|
||||
@ -1007,7 +1030,9 @@ enum QuestTypes
|
||||
QUEST_TYPE_LEGENDARY = 83,
|
||||
QUEST_TYPE_ESCORT = 84,
|
||||
QUEST_TYPE_HEROIC = 85,
|
||||
QUEST_TYPE_DAILY = 87
|
||||
QUEST_TYPE_DAILY = 87,
|
||||
QUEST_TYPE_RAID_10 = 88,
|
||||
QUEST_TYPE_RAID_25 = 89
|
||||
};
|
||||
|
||||
enum CreatureType
|
||||
@ -1032,7 +1057,7 @@ enum QuestSort
|
||||
QUEST_SORT_SEASONAL = 22,
|
||||
QUEST_SORT_UNDERCITY_OLD = 23,
|
||||
QUEST_SORT_HERBALISM = 24,
|
||||
QUEST_SORT_SCARLET_MONASTERY_OLD= 25,
|
||||
QUEST_SORT_BATTLEGROUNDS = 25,
|
||||
QUEST_SORT_ULDAMN_OLD = 41,
|
||||
QUEST_SORT_WARLOCK = 61,
|
||||
QUEST_SORT_WARRIOR = 81,
|
||||
@ -1060,7 +1085,11 @@ enum QuestSort
|
||||
QUEST_SORT_LUNAR_FESTIVAL = 366,
|
||||
QUEST_SORT_REPUTATION = 367,
|
||||
QUEST_SORT_INVASION = 368,
|
||||
QUEST_SORT_MIDSUMMER = 369
|
||||
QUEST_SORT_MIDSUMMER = 369,
|
||||
QUEST_SORT_BREWFEST = 370,
|
||||
QUEST_SORT_INSCRIPTION = 371,
|
||||
QUEST_SORT_DEATH_KNIGHT = 372,
|
||||
QUEST_SORT_JEWELCRAFTING = 373
|
||||
};
|
||||
|
||||
enum SkillType
|
||||
@ -1070,7 +1099,6 @@ enum SkillType
|
||||
SKILL_ARMS = 26,
|
||||
SKILL_COMBAT = 38,
|
||||
SKILL_SUBTLETY = 39,
|
||||
SKILL_POISONS = 40,
|
||||
SKILL_SWORDS = 43,
|
||||
SKILL_AXES = 44,
|
||||
SKILL_BOWS = 45,
|
||||
@ -1078,8 +1106,8 @@ enum SkillType
|
||||
SKILL_BEAST_MASTERY = 50,
|
||||
SKILL_SURVIVAL = 51,
|
||||
SKILL_MACES = 54,
|
||||
SKILL_HOLY = 56,
|
||||
SKILL_2H_SWORDS = 55,
|
||||
SKILL_HOLY = 56,
|
||||
SKILL_SHADOW = 78,
|
||||
SKILL_DEFENSE = 95,
|
||||
SKILL_LANG_COMMON = 98,
|
||||
@ -1135,24 +1163,20 @@ enum SkillType
|
||||
SKILL_PET_BOAR = 211,
|
||||
SKILL_PET_CROCILISK = 212,
|
||||
SKILL_PET_CARRION_BIRD = 213,
|
||||
SKILL_PET_GORILLA = 215,
|
||||
SKILL_PET_CRAB = 214,
|
||||
SKILL_PET_GORILLA = 215,
|
||||
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,
|
||||
@ -1182,7 +1206,7 @@ enum SkillType
|
||||
SKILL_LOCKPICKING = 633,
|
||||
SKILL_PET_BAT = 653,
|
||||
SKILL_PET_HYENA = 654,
|
||||
SKILL_PET_OWL = 655,
|
||||
SKILL_PET_BIRD_OF_PREY = 655,
|
||||
SKILL_PET_WIND_SERPENT = 656,
|
||||
SKILL_LANG_GUTTERSPEAK = 673,
|
||||
SKILL_RIDING_KODO = 713,
|
||||
@ -1201,7 +1225,25 @@ enum SkillType
|
||||
SKILL_PET_SPOREBAT = 765,
|
||||
SKILL_PET_WARP_STALKER = 766,
|
||||
SKILL_PET_RAVAGER = 767,
|
||||
SKILL_PET_SERPENT = 768
|
||||
SKILL_PET_SERPENT = 768,
|
||||
SKILL_INTERNAL = 769,
|
||||
SKILL_DK_BLOOD = 770,
|
||||
SKILL_DK_FROST = 771,
|
||||
SKILL_DK_UNHOLY = 772,
|
||||
SKILL_INSCRIPTION = 773,
|
||||
SKILL_PET_MOTH = 775,
|
||||
SKILL_RUNEFORGING = 776,
|
||||
SKILL_MOUNTS = 777,
|
||||
SKILL_COMPANIONS = 778,
|
||||
SKILL_PET_EXOTIC_CHIMAERA = 780,
|
||||
SKILL_PET_EXOTIC_DEVILSAUR = 781,
|
||||
SKILL_PET_GHOUL = 782,
|
||||
SKILL_PET_EXOTIC_SILITHID = 783,
|
||||
SKILL_PET_EXOTIC_WORM = 784,
|
||||
SKILL_PET_WASP = 785,
|
||||
SKILL_PET_EXOTIC_RHINO = 786,
|
||||
SKILL_PET_EXOTIC_CORE_HOUND = 787,
|
||||
SKILL_PET_EXOTIC_SPIRIT_BEAST = 788
|
||||
};
|
||||
|
||||
|
||||
@ -1219,7 +1261,7 @@ enum SkillCategory
|
||||
|
||||
enum TotemCategory
|
||||
{
|
||||
TC_SKINNING_SKIFE = 1,
|
||||
TC_SKINNING_SKIFE_OLD = 1,
|
||||
TC_EARTH_TOTEM = 2,
|
||||
TC_AIR_TOTEM = 3,
|
||||
TC_FIRE_TOTEM = 4,
|
||||
@ -1229,15 +1271,28 @@ enum TotemCategory
|
||||
TC_GOLDEN_ROD = 8,
|
||||
TC_TRUESILVER_ROD = 9,
|
||||
TC_ARCANITE_ROD = 10,
|
||||
TC_MINING_PICK = 11,
|
||||
TC_MINING_PICK_OLD = 11,
|
||||
TC_PHILOSOPHERS_STONE = 12,
|
||||
TC_BLACKSMITH_HAMMER = 13,
|
||||
TC_BLACKSMITH_HAMMER_OLD = 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
|
||||
TC_ETERNIUM_ROD = 63,
|
||||
TC_HOLLOW_QUILL = 81,
|
||||
TC_RUNED_AZURITE_ROD = 101,
|
||||
TC_VIRTUOSO_INKING_SET = 121,
|
||||
TC_DRUMS = 141,
|
||||
TC_GNOMISH_ARMY_KNIFE = 161,
|
||||
TC_BLACKSMITH_HAMMER = 162,
|
||||
TC_MINING_PICK = 165,
|
||||
TC_SKINNING_KNIFE = 166,
|
||||
TC_HAMMER_PICK = 167,
|
||||
TC_BLADED_PICKAXE = 168,
|
||||
TC_FLINT_AND_TINDER = 169,
|
||||
TC_RUNED_COBALT_ROD = 189,
|
||||
TC_RUNED_TITANIUM_ROD = 190
|
||||
};
|
||||
|
||||
enum UnitDynFlags
|
||||
@ -1247,7 +1302,8 @@ enum UnitDynFlags
|
||||
UNIT_DYNFLAG_OTHER_TAGGER = 0x0004,
|
||||
UNIT_DYNFLAG_ROOTED = 0x0008,
|
||||
UNIT_DYNFLAG_SPECIALINFO = 0x0010,
|
||||
UNIT_DYNFLAG_DEAD = 0x0020
|
||||
UNIT_DYNFLAG_DEAD = 0x0020,
|
||||
UNIT_DYNFLAG_REFER_A_FRIEND = 0x0040
|
||||
};
|
||||
|
||||
enum UnitFlags1
|
||||
@ -1310,6 +1366,9 @@ enum ChatMsg
|
||||
CHAT_MSG_BATTLEGROUND = 0x2C,
|
||||
CHAT_MSG_BATTLEGROUND_LEADER = 0x2D,
|
||||
CHAT_MSG_RESTRICTED = 0x2E,
|
||||
CHAT_MSG_BN = 0x2F,
|
||||
CHAT_MSG_ACHIEVEMENT = 0x30,
|
||||
CHAT_MSG_GUILD_ACHIEVEMENT = 0x31
|
||||
};
|
||||
|
||||
enum SpellCastTargetFlags
|
||||
|
||||
@ -13,7 +13,8 @@ enum UnitMoveType
|
||||
MOVE_TURN = 5,
|
||||
MOVE_FLY = 6,
|
||||
MOVE_FLYBACK = 7,
|
||||
MAX_MOVE_TYPE = 8
|
||||
MOVE_PITCH_RATE = 8,
|
||||
MAX_MOVE_TYPE = 9
|
||||
};
|
||||
|
||||
enum UnitFlags
|
||||
|
||||
@ -37,11 +37,12 @@ void WorldSession::_HandleCompressedUpdateObjectOpcode(WorldPacket& recvPacket)
|
||||
void WorldSession::_HandleUpdateObjectOpcode(WorldPacket& recvPacket)
|
||||
{
|
||||
uint8 utype;
|
||||
uint8 hasTransport;
|
||||
//uint8 hasTransport;
|
||||
uint32 usize, ublocks, readblocks=0;
|
||||
uint64 uguid;
|
||||
recvPacket >> ublocks >> hasTransport;
|
||||
logdev("UpdateObject: blocks = %u, hasTransport = %u", ublocks, hasTransport);
|
||||
recvPacket >> ublocks; // >> hasTransport;
|
||||
//logdev("UpdateObject: blocks = %u, hasTransport = %u", ublocks, hasTransport);
|
||||
logdev("UpdateObject: blocks = %u", ublocks);
|
||||
while((recvPacket.rpos() < recvPacket.size())&& (readblocks < ublocks))
|
||||
{
|
||||
recvPacket >> utype;
|
||||
@ -237,7 +238,7 @@ void WorldSession::_MovementUpdate(uint8 objtypeid, uint64 uguid, WorldPacket& r
|
||||
uint8 flags;
|
||||
float unkfx,unkfy,unkfz;
|
||||
// uint64 fullguid; // see below
|
||||
float speedWalk, speedRun, speedSwimBack, speedSwim, speedWalkBack, speedTurn, speedFly, speedFlyBack;
|
||||
float speedWalk, speedRun, speedSwimBack, speedSwim, speedWalkBack, speedTurn, speedFly, speedFlyBack, speedPitchRate;
|
||||
uint32 unk32;
|
||||
|
||||
Object *obj = (Object*)objmgr.GetObj(uguid, true); // also depleted objects
|
||||
@ -259,7 +260,7 @@ void WorldSession::_MovementUpdate(uint8 objtypeid, uint64 uguid, WorldPacket& r
|
||||
mi.flags = 0; // not sure if its correct to set it to 0 (needs some starting flag?)
|
||||
if(flags & UPDATEFLAG_LIVING)
|
||||
{
|
||||
recvPacket >> mi.flags >> mi.unk1 >> mi.time;
|
||||
recvPacket >> mi.flags >> mi.unkFlags >> mi.time;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -268,7 +269,7 @@ void WorldSession::_MovementUpdate(uint8 objtypeid, uint64 uguid, WorldPacket& r
|
||||
|
||||
logdev("MovementUpdate: TypeID=%u GUID="I64FMT" pObj=%X flags=%u mi.flags=%u",objtypeid,uguid,obj,flags,mi.flags);
|
||||
|
||||
if(flags & UPDATEFLAG_HASPOSITION)
|
||||
if(flags & UPDATEFLAG_HAS_POSITION)
|
||||
{
|
||||
if(flags & UPDATEFLAG_TRANSPORT)
|
||||
{
|
||||
@ -290,10 +291,11 @@ void WorldSession::_MovementUpdate(uint8 objtypeid, uint64 uguid, WorldPacket& r
|
||||
{
|
||||
recvPacket >> mi.t_guid >> mi.t_x >> mi.t_y >> mi.t_z >> mi.t_o;
|
||||
recvPacket >> mi.t_time; // added in 2.0.3
|
||||
recvPacket >> mi.t_seat;
|
||||
logdev("TRANSPORT @ mi.flags: guid="I64FMT" x=%f y=%f z=%f o=%f", mi.t_guid, mi.t_x, mi.t_y, mi.t_z, mi.t_o);
|
||||
}
|
||||
|
||||
if(mi.flags & (MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_UNK5))
|
||||
if((mi.flags & (MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_UNK5)) || (mi.unkFlags & 0x20))
|
||||
{
|
||||
recvPacket >> mi.s_angle;
|
||||
logdev("MovementUpdate: MOVEMENTFLAG_SWIMMING is set, angle = %f!", mi.s_angle);
|
||||
@ -317,18 +319,20 @@ void WorldSession::_MovementUpdate(uint8 objtypeid, uint64 uguid, WorldPacket& r
|
||||
|
||||
recvPacket >> speedWalk >> speedRun >> speedSwimBack >> speedSwim; // speedRun can also be mounted speed if player is mounted
|
||||
recvPacket >> speedWalkBack >> speedFly >> speedFlyBack >> speedTurn; // fly added in 2.0.x
|
||||
recvPacket >> speedPitchRate;
|
||||
logdev("MovementUpdate: Got speeds, walk=%f run=%f turn=%f", speedWalk, speedRun, speedTurn);
|
||||
if(u)
|
||||
{
|
||||
u->SetPosition(mi.x, mi.y, mi.z, mi.o);
|
||||
u->SetSpeed(MOVE_WALK,speedWalk);
|
||||
u->SetSpeed(MOVE_RUN,speedRun);
|
||||
u->SetSpeed(MOVE_SWIMBACK,speedSwimBack);
|
||||
u->SetSpeed(MOVE_SWIM,speedSwim);
|
||||
u->SetSpeed(MOVE_WALKBACK,speedWalkBack);
|
||||
u->SetSpeed(MOVE_TURN,speedTurn);
|
||||
u->SetSpeed(MOVE_FLY,speedFly);
|
||||
u->SetSpeed(MOVE_FLYBACK,speedFlyBack);
|
||||
u->SetSpeed(MOVE_WALK, speedWalk);
|
||||
u->SetSpeed(MOVE_RUN, speedRun);
|
||||
u->SetSpeed(MOVE_SWIMBACK, speedSwimBack);
|
||||
u->SetSpeed(MOVE_SWIM, speedSwim);
|
||||
u->SetSpeed(MOVE_WALKBACK, speedWalkBack);
|
||||
u->SetSpeed(MOVE_TURN, speedTurn);
|
||||
u->SetSpeed(MOVE_FLY, speedFly);
|
||||
u->SetSpeed(MOVE_FLYBACK, speedFlyBack);
|
||||
u->SetSpeed(MOVE_PITCH_RATE, speedPitchRate);
|
||||
}
|
||||
|
||||
// TODO: correct this one as soon as its meaning is known OR if it appears often and needs to be fixed
|
||||
@ -353,7 +357,7 @@ void WorldSession::_MovementUpdate(uint8 objtypeid, uint64 uguid, WorldPacket& r
|
||||
logdev("MovementUpdate: UPDATEFLAG_HIGHGUID is set, got %X", unk32);
|
||||
}
|
||||
|
||||
if(flags & UPDATEFLAG_FULLGUID)
|
||||
if(flags & UPDATEFLAG_HAS_TARGET)
|
||||
{
|
||||
uint64 unkguid = recvPacket.GetPackedGuid(); // MaNGOS sends uint8(0) always, but its probably be a packed guid
|
||||
logdev("MovementUpdate: UPDATEFLAG_FULLGUID is set, got "I64FMT, unkguid);
|
||||
@ -365,6 +369,13 @@ void WorldSession::_MovementUpdate(uint8 objtypeid, uint64 uguid, WorldPacket& r
|
||||
logdev("MovementUpdate: UPDATEFLAG_TRANSPORT is set, got %u", unk32);
|
||||
}
|
||||
|
||||
if(flags & UPDATEFLAG_VEHICLE) // unused for now
|
||||
{
|
||||
uint32 vehicleId;
|
||||
float facingAdj;
|
||||
|
||||
recvPacket >> vehicleId >> facingAdj;
|
||||
}
|
||||
}
|
||||
|
||||
void WorldSession::_ValuesUpdate(uint64 uguid, WorldPacket& recvPacket)
|
||||
@ -531,8 +542,8 @@ bool IsFloatField(uint8 ty, uint32 f)
|
||||
(uint32)PLAYER_FROST_SPELL_CRIT_PERCENTAGE,
|
||||
(uint32)PLAYER_SHADOW_SPELL_CRIT_PERCENTAGE,
|
||||
(uint32)PLAYER_ARCANE_SPELL_CRIT_PERCENTAGE,
|
||||
(uint32)PLAYER_FIELD_MOD_MANA_REGEN,
|
||||
(uint32)PLAYER_FIELD_MOD_MANA_REGEN_INTERRUPT,
|
||||
/*(uint32)PLAYER_FIELD_MOD_MANA_REGEN,
|
||||
(uint32)PLAYER_FIELD_MOD_MANA_REGEN_INTERRUPT,*/
|
||||
(uint32)-1
|
||||
};
|
||||
static uint32 floats_gameobject[] =
|
||||
|
||||
@ -16,11 +16,12 @@ enum OBJECT_UPDATE_FLAGS
|
||||
UPDATEFLAG_NONE = 0x00,
|
||||
UPDATEFLAG_SELF = 0x01,
|
||||
UPDATEFLAG_TRANSPORT = 0x02,
|
||||
UPDATEFLAG_FULLGUID = 0x04,
|
||||
UPDATEFLAG_HAS_TARGET = 0x04,
|
||||
UPDATEFLAG_LOWGUID = 0x08,
|
||||
UPDATEFLAG_HIGHGUID = 0x10,
|
||||
UPDATEFLAG_LIVING = 0x20,
|
||||
UPDATEFLAG_HASPOSITION = 0x40
|
||||
UPDATEFLAG_HAS_POSITION = 0x40,
|
||||
UPDATEFLAG_VEHICLE = 0x80
|
||||
};
|
||||
|
||||
enum MovementFlags
|
||||
@ -58,13 +59,14 @@ struct MovementInfo
|
||||
{
|
||||
// common
|
||||
uint32 flags;
|
||||
uint8 unk1;
|
||||
uint16 unkFlags;
|
||||
uint32 time;
|
||||
float x, y, z, o;
|
||||
// transport
|
||||
uint64 t_guid;
|
||||
float t_x, t_y, t_z, t_o;
|
||||
uint32 t_time;
|
||||
uint8 t_seat;
|
||||
// swimming and unk
|
||||
float s_angle;
|
||||
// last fall time
|
||||
@ -76,8 +78,8 @@ struct MovementInfo
|
||||
|
||||
MovementInfo()
|
||||
{
|
||||
flags = time = t_time = fallTime = 0;
|
||||
unk1 = 0;
|
||||
flags = time = t_time = fallTime = unkFlags = 0;
|
||||
t_seat = 0;
|
||||
x = y = z = o = t_x = t_y = t_z = t_o = s_angle = j_unk = j_sinAngle = j_cosAngle = j_xyspeed = u_unk1 = 0.0f;
|
||||
t_guid = 0;
|
||||
}
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
#ifndef _UPDATEFIELDS_AUTO_H
|
||||
#define _UPDATEFIELDS_AUTO_H
|
||||
|
||||
// Auto generated for version 2, 4, 3, 8606
|
||||
// Auto generated for version 3, 0, 3, 9183
|
||||
|
||||
enum EObjectFields
|
||||
{
|
||||
@ -41,13 +41,37 @@ enum EItemFields
|
||||
ITEM_FIELD_DURATION = OBJECT_END + 0x0009, // Size: 1, Type: INT, Flags: OWNER_ONLY, UNK2
|
||||
ITEM_FIELD_SPELL_CHARGES = OBJECT_END + 0x000A, // Size: 5, Type: INT, Flags: OWNER_ONLY, UNK2
|
||||
ITEM_FIELD_FLAGS = OBJECT_END + 0x000F, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
ITEM_FIELD_ENCHANTMENT = OBJECT_END + 0x0010, // Size: 33, Type: INT, Flags: PUBLIC
|
||||
ITEM_FIELD_PROPERTY_SEED = OBJECT_END + 0x0031, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
ITEM_FIELD_RANDOM_PROPERTIES_ID = OBJECT_END + 0x0032, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
ITEM_FIELD_ITEM_TEXT_ID = OBJECT_END + 0x0033, // Size: 1, Type: INT, Flags: OWNER_ONLY
|
||||
ITEM_FIELD_DURABILITY = OBJECT_END + 0x0034, // Size: 1, Type: INT, Flags: OWNER_ONLY, UNK2
|
||||
ITEM_FIELD_MAXDURABILITY = OBJECT_END + 0x0035, // Size: 1, Type: INT, Flags: OWNER_ONLY, UNK2
|
||||
ITEM_END = OBJECT_END + 0x0036,
|
||||
ITEM_FIELD_ENCHANTMENT_1_1 = OBJECT_END + 0x0010, // Size: 2, Type: INT, Flags: PUBLIC
|
||||
ITEM_FIELD_ENCHANTMENT_1_3 = OBJECT_END + 0x0012, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
ITEM_FIELD_ENCHANTMENT_2_1 = OBJECT_END + 0x0013, // Size: 2, Type: INT, Flags: PUBLIC
|
||||
ITEM_FIELD_ENCHANTMENT_2_3 = OBJECT_END + 0x0015, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
ITEM_FIELD_ENCHANTMENT_3_1 = OBJECT_END + 0x0016, // Size: 2, Type: INT, Flags: PUBLIC
|
||||
ITEM_FIELD_ENCHANTMENT_3_3 = OBJECT_END + 0x0018, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
ITEM_FIELD_ENCHANTMENT_4_1 = OBJECT_END + 0x0019, // Size: 2, Type: INT, Flags: PUBLIC
|
||||
ITEM_FIELD_ENCHANTMENT_4_3 = OBJECT_END + 0x001B, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
ITEM_FIELD_ENCHANTMENT_5_1 = OBJECT_END + 0x001C, // Size: 2, Type: INT, Flags: PUBLIC
|
||||
ITEM_FIELD_ENCHANTMENT_5_3 = OBJECT_END + 0x001E, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
ITEM_FIELD_ENCHANTMENT_6_1 = OBJECT_END + 0x001F, // Size: 2, Type: INT, Flags: PUBLIC
|
||||
ITEM_FIELD_ENCHANTMENT_6_3 = OBJECT_END + 0x0021, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
ITEM_FIELD_ENCHANTMENT_7_1 = OBJECT_END + 0x0022, // Size: 2, Type: INT, Flags: PUBLIC
|
||||
ITEM_FIELD_ENCHANTMENT_7_3 = OBJECT_END + 0x0024, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
ITEM_FIELD_ENCHANTMENT_8_1 = OBJECT_END + 0x0025, // Size: 2, Type: INT, Flags: PUBLIC
|
||||
ITEM_FIELD_ENCHANTMENT_8_3 = OBJECT_END + 0x0027, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
ITEM_FIELD_ENCHANTMENT_9_1 = OBJECT_END + 0x0028, // Size: 2, Type: INT, Flags: PUBLIC
|
||||
ITEM_FIELD_ENCHANTMENT_9_3 = OBJECT_END + 0x002A, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
ITEM_FIELD_ENCHANTMENT_10_1 = OBJECT_END + 0x002B, // Size: 2, Type: INT, Flags: PUBLIC
|
||||
ITEM_FIELD_ENCHANTMENT_10_3 = OBJECT_END + 0x002D, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
ITEM_FIELD_ENCHANTMENT_11_1 = OBJECT_END + 0x002E, // Size: 2, Type: INT, Flags: PUBLIC
|
||||
ITEM_FIELD_ENCHANTMENT_11_3 = OBJECT_END + 0x0030, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
ITEM_FIELD_ENCHANTMENT_12_1 = OBJECT_END + 0x0031, // Size: 2, Type: INT, Flags: PUBLIC
|
||||
ITEM_FIELD_ENCHANTMENT_12_3 = OBJECT_END + 0x0033, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
ITEM_FIELD_PROPERTY_SEED = OBJECT_END + 0x0034, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
ITEM_FIELD_RANDOM_PROPERTIES_ID = OBJECT_END + 0x0035, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
ITEM_FIELD_ITEM_TEXT_ID = OBJECT_END + 0x0036, // Size: 1, Type: INT, Flags: OWNER_ONLY
|
||||
ITEM_FIELD_DURABILITY = OBJECT_END + 0x0037, // Size: 1, Type: INT, Flags: OWNER_ONLY, UNK2
|
||||
ITEM_FIELD_MAXDURABILITY = OBJECT_END + 0x0038, // Size: 1, Type: INT, Flags: OWNER_ONLY, UNK2
|
||||
ITEM_FIELD_PAD = OBJECT_END + 0x0039, // Size: 1, Type: INT, Flags: NONE
|
||||
ITEM_END = OBJECT_END + 0x003A,
|
||||
};
|
||||
|
||||
enum EContainerFields
|
||||
@ -62,93 +86,94 @@ enum EUnitFields
|
||||
{
|
||||
UNIT_FIELD_CHARM = OBJECT_END + 0x0000, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
UNIT_FIELD_SUMMON = OBJECT_END + 0x0002, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
UNIT_FIELD_CHARMEDBY = OBJECT_END + 0x0004, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
UNIT_FIELD_SUMMONEDBY = OBJECT_END + 0x0006, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
UNIT_FIELD_CREATEDBY = OBJECT_END + 0x0008, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
UNIT_FIELD_TARGET = OBJECT_END + 0x000A, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
UNIT_FIELD_PERSUADED = OBJECT_END + 0x000C, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
UNIT_FIELD_CRITTER = OBJECT_END + 0x0004, // Size: 2, Type: LONG, Flags: PRIVATE
|
||||
UNIT_FIELD_CHARMEDBY = OBJECT_END + 0x0006, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
UNIT_FIELD_SUMMONEDBY = OBJECT_END + 0x0008, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
UNIT_FIELD_CREATEDBY = OBJECT_END + 0x000A, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
UNIT_FIELD_TARGET = OBJECT_END + 0x000C, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
UNIT_FIELD_CHANNEL_OBJECT = OBJECT_END + 0x000E, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
UNIT_FIELD_HEALTH = OBJECT_END + 0x0010, // Size: 1, Type: INT, Flags: DYNAMIC
|
||||
UNIT_FIELD_POWER1 = OBJECT_END + 0x0011, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_POWER2 = OBJECT_END + 0x0012, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_POWER3 = OBJECT_END + 0x0013, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_POWER4 = OBJECT_END + 0x0014, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_POWER5 = OBJECT_END + 0x0015, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MAXHEALTH = OBJECT_END + 0x0016, // Size: 1, Type: INT, Flags: DYNAMIC
|
||||
UNIT_FIELD_MAXPOWER1 = OBJECT_END + 0x0017, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MAXPOWER2 = OBJECT_END + 0x0018, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MAXPOWER3 = OBJECT_END + 0x0019, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MAXPOWER4 = OBJECT_END + 0x001A, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MAXPOWER5 = OBJECT_END + 0x001B, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_LEVEL = OBJECT_END + 0x001C, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_FACTIONTEMPLATE = OBJECT_END + 0x001D, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_BYTES_0 = OBJECT_END + 0x001E, // Size: 1, Type: BYTES, Flags: PUBLIC
|
||||
UNIT_VIRTUAL_ITEM_SLOT_DISPLAY = OBJECT_END + 0x001F, // Size: 3, Type: INT, Flags: PUBLIC
|
||||
UNIT_VIRTUAL_ITEM_INFO = OBJECT_END + 0x0022, // Size: 6, Type: BYTES, Flags: PUBLIC
|
||||
UNIT_FIELD_FLAGS = OBJECT_END + 0x0028, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_FLAGS_2 = OBJECT_END + 0x0029, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_AURA = OBJECT_END + 0x002A, // Size: 56, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_AURAFLAGS = OBJECT_END + 0x0062, // Size: 14, Type: BYTES, Flags: PUBLIC
|
||||
UNIT_FIELD_AURALEVELS = OBJECT_END + 0x0070, // Size: 14, Type: BYTES, Flags: PUBLIC
|
||||
UNIT_FIELD_AURAAPPLICATIONS = OBJECT_END + 0x007E, // Size: 14, Type: BYTES, Flags: PUBLIC
|
||||
UNIT_FIELD_AURASTATE = OBJECT_END + 0x008C, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_BASEATTACKTIME = OBJECT_END + 0x008D, // Size: 2, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_RANGEDATTACKTIME = OBJECT_END + 0x008F, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
UNIT_FIELD_BOUNDINGRADIUS = OBJECT_END + 0x0090, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
UNIT_FIELD_COMBATREACH = OBJECT_END + 0x0091, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
UNIT_FIELD_DISPLAYID = OBJECT_END + 0x0092, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_NATIVEDISPLAYID = OBJECT_END + 0x0093, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MOUNTDISPLAYID = OBJECT_END + 0x0094, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MINDAMAGE = OBJECT_END + 0x0095, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY, UNK3
|
||||
UNIT_FIELD_MAXDAMAGE = OBJECT_END + 0x0096, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY, UNK3
|
||||
UNIT_FIELD_MINOFFHANDDAMAGE = OBJECT_END + 0x0097, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY, UNK3
|
||||
UNIT_FIELD_MAXOFFHANDDAMAGE = OBJECT_END + 0x0098, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY, UNK3
|
||||
UNIT_FIELD_BYTES_1 = OBJECT_END + 0x0099, // Size: 1, Type: BYTES, Flags: PUBLIC
|
||||
UNIT_FIELD_PETNUMBER = OBJECT_END + 0x009A, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_PET_NAME_TIMESTAMP = OBJECT_END + 0x009B, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_PETEXPERIENCE = OBJECT_END + 0x009C, // Size: 1, Type: INT, Flags: OWNER_ONLY
|
||||
UNIT_FIELD_PETNEXTLEVELEXP = OBJECT_END + 0x009D, // Size: 1, Type: INT, Flags: OWNER_ONLY
|
||||
UNIT_DYNAMIC_FLAGS = OBJECT_END + 0x009E, // Size: 1, Type: INT, Flags: DYNAMIC
|
||||
UNIT_CHANNEL_SPELL = OBJECT_END + 0x009F, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_MOD_CAST_SPEED = OBJECT_END + 0x00A0, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
UNIT_CREATED_BY_SPELL = OBJECT_END + 0x00A1, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_NPC_FLAGS = OBJECT_END + 0x00A2, // Size: 1, Type: INT, Flags: DYNAMIC
|
||||
UNIT_NPC_EMOTESTATE = OBJECT_END + 0x00A3, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_TRAINING_POINTS = OBJECT_END + 0x00A4, // Size: 1, Type: TWO_SHORT, Flags: OWNER_ONLY
|
||||
UNIT_FIELD_STAT0 = OBJECT_END + 0x00A5, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_STAT1 = OBJECT_END + 0x00A6, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_STAT2 = OBJECT_END + 0x00A7, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_STAT3 = OBJECT_END + 0x00A8, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_STAT4 = OBJECT_END + 0x00A9, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_POSSTAT0 = OBJECT_END + 0x00AA, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_POSSTAT1 = OBJECT_END + 0x00AB, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_POSSTAT2 = OBJECT_END + 0x00AC, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_POSSTAT3 = OBJECT_END + 0x00AD, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_POSSTAT4 = OBJECT_END + 0x00AE, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_NEGSTAT0 = OBJECT_END + 0x00AF, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_NEGSTAT1 = OBJECT_END + 0x00B0, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_NEGSTAT2 = OBJECT_END + 0x00B1, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_NEGSTAT3 = OBJECT_END + 0x00B2, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_NEGSTAT4 = OBJECT_END + 0x00B3, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_RESISTANCES = OBJECT_END + 0x00B4, // Size: 7, Type: INT, Flags: PRIVATE, OWNER_ONLY, UNK3
|
||||
UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE = OBJECT_END + 0x00BB, // Size: 7, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE = OBJECT_END + 0x00C2, // Size: 7, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_BASE_MANA = OBJECT_END + 0x00C9, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_BASE_HEALTH = OBJECT_END + 0x00CA, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_BYTES_2 = OBJECT_END + 0x00CB, // Size: 1, Type: BYTES, Flags: PUBLIC
|
||||
UNIT_FIELD_ATTACK_POWER = OBJECT_END + 0x00CC, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_ATTACK_POWER_MODS = OBJECT_END + 0x00CD, // Size: 1, Type: TWO_SHORT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_ATTACK_POWER_MULTIPLIER = OBJECT_END + 0x00CE, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_RANGED_ATTACK_POWER = OBJECT_END + 0x00CF, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_RANGED_ATTACK_POWER_MODS = OBJECT_END + 0x00D0, // Size: 1, Type: TWO_SHORT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER = OBJECT_END + 0x00D1, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_MINRANGEDDAMAGE = OBJECT_END + 0x00D2, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_MAXRANGEDDAMAGE = OBJECT_END + 0x00D3, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_POWER_COST_MODIFIER = OBJECT_END + 0x00D4, // Size: 7, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_POWER_COST_MULTIPLIER = OBJECT_END + 0x00DB, // Size: 7, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_MAXHEALTHMODIFIER = OBJECT_END + 0x00E2, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_PADDING = OBJECT_END + 0x00E3, // Size: 1, Type: INT, Flags: NONE
|
||||
UNIT_END = OBJECT_END + 0x00E4,
|
||||
UNIT_FIELD_BYTES_0 = OBJECT_END + 0x0010, // Size: 1, Type: BYTES, Flags: PUBLIC
|
||||
UNIT_FIELD_HEALTH = OBJECT_END + 0x0011, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_POWER1 = OBJECT_END + 0x0012, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_POWER2 = OBJECT_END + 0x0013, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_POWER3 = OBJECT_END + 0x0014, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_POWER4 = OBJECT_END + 0x0015, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_POWER5 = OBJECT_END + 0x0016, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_POWER6 = OBJECT_END + 0x0017, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_POWER7 = OBJECT_END + 0x0018, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MAXHEALTH = OBJECT_END + 0x0019, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MAXPOWER1 = OBJECT_END + 0x001A, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MAXPOWER2 = OBJECT_END + 0x001B, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MAXPOWER3 = OBJECT_END + 0x001C, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MAXPOWER4 = OBJECT_END + 0x001D, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MAXPOWER5 = OBJECT_END + 0x001E, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MAXPOWER6 = OBJECT_END + 0x001F, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MAXPOWER7 = OBJECT_END + 0x0020, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER = OBJECT_END + 0x0021, // Size: 7, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER = OBJECT_END + 0x0028, // Size: 7, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_LEVEL = OBJECT_END + 0x002F, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_FACTIONTEMPLATE = OBJECT_END + 0x0030, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_VIRTUAL_ITEM_SLOT_ID = OBJECT_END + 0x0031, // Size: 3, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_FLAGS = OBJECT_END + 0x0034, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_FLAGS_2 = OBJECT_END + 0x0035, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_AURASTATE = OBJECT_END + 0x0036, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_BASEATTACKTIME = OBJECT_END + 0x0037, // Size: 2, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_RANGEDATTACKTIME = OBJECT_END + 0x0039, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
UNIT_FIELD_BOUNDINGRADIUS = OBJECT_END + 0x003A, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
UNIT_FIELD_COMBATREACH = OBJECT_END + 0x003B, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
UNIT_FIELD_DISPLAYID = OBJECT_END + 0x003C, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_NATIVEDISPLAYID = OBJECT_END + 0x003D, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MOUNTDISPLAYID = OBJECT_END + 0x003E, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MINDAMAGE = OBJECT_END + 0x003F, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY, UNK3
|
||||
UNIT_FIELD_MAXDAMAGE = OBJECT_END + 0x0040, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY, UNK3
|
||||
UNIT_FIELD_MINOFFHANDDAMAGE = OBJECT_END + 0x0041, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY, UNK3
|
||||
UNIT_FIELD_MAXOFFHANDDAMAGE = OBJECT_END + 0x0042, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY, UNK3
|
||||
UNIT_FIELD_BYTES_1 = OBJECT_END + 0x0043, // Size: 1, Type: BYTES, Flags: PUBLIC
|
||||
UNIT_FIELD_PETNUMBER = OBJECT_END + 0x0044, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_PET_NAME_TIMESTAMP = OBJECT_END + 0x0045, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_PETEXPERIENCE = OBJECT_END + 0x0046, // Size: 1, Type: INT, Flags: OWNER_ONLY
|
||||
UNIT_FIELD_PETNEXTLEVELEXP = OBJECT_END + 0x0047, // Size: 1, Type: INT, Flags: OWNER_ONLY
|
||||
UNIT_DYNAMIC_FLAGS = OBJECT_END + 0x0048, // Size: 1, Type: INT, Flags: DYNAMIC
|
||||
UNIT_CHANNEL_SPELL = OBJECT_END + 0x0049, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_MOD_CAST_SPEED = OBJECT_END + 0x004A, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
UNIT_CREATED_BY_SPELL = OBJECT_END + 0x004B, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_NPC_FLAGS = OBJECT_END + 0x004C, // Size: 1, Type: INT, Flags: DYNAMIC
|
||||
UNIT_NPC_EMOTESTATE = OBJECT_END + 0x004D, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_STAT0 = OBJECT_END + 0x004E, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_STAT1 = OBJECT_END + 0x004F, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_STAT2 = OBJECT_END + 0x0050, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_STAT3 = OBJECT_END + 0x0051, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_STAT4 = OBJECT_END + 0x0052, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_POSSTAT0 = OBJECT_END + 0x0053, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_POSSTAT1 = OBJECT_END + 0x0054, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_POSSTAT2 = OBJECT_END + 0x0055, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_POSSTAT3 = OBJECT_END + 0x0056, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_POSSTAT4 = OBJECT_END + 0x0057, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_NEGSTAT0 = OBJECT_END + 0x0058, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_NEGSTAT1 = OBJECT_END + 0x0059, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_NEGSTAT2 = OBJECT_END + 0x005A, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_NEGSTAT3 = OBJECT_END + 0x005B, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_NEGSTAT4 = OBJECT_END + 0x005C, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_RESISTANCES = OBJECT_END + 0x005D, // Size: 7, Type: INT, Flags: PRIVATE, OWNER_ONLY, UNK3
|
||||
UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE = OBJECT_END + 0x0064, // Size: 7, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE = OBJECT_END + 0x006B, // Size: 7, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_BASE_MANA = OBJECT_END + 0x0072, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_BASE_HEALTH = OBJECT_END + 0x0073, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_BYTES_2 = OBJECT_END + 0x0074, // Size: 1, Type: BYTES, Flags: PUBLIC
|
||||
UNIT_FIELD_ATTACK_POWER = OBJECT_END + 0x0075, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_ATTACK_POWER_MODS = OBJECT_END + 0x0076, // Size: 1, Type: TWO_SHORT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_ATTACK_POWER_MULTIPLIER = OBJECT_END + 0x0077, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_RANGED_ATTACK_POWER = OBJECT_END + 0x0078, // Size: 1, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_RANGED_ATTACK_POWER_MODS = OBJECT_END + 0x0079, // Size: 1, Type: TWO_SHORT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER = OBJECT_END + 0x007A, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_MINRANGEDDAMAGE = OBJECT_END + 0x007B, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_MAXRANGEDDAMAGE = OBJECT_END + 0x007C, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_POWER_COST_MODIFIER = OBJECT_END + 0x007D, // Size: 7, Type: INT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_POWER_COST_MULTIPLIER = OBJECT_END + 0x0084, // Size: 7, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_MAXHEALTHMODIFIER = OBJECT_END + 0x008B, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER_ONLY
|
||||
UNIT_FIELD_HOVERHEIGHT = OBJECT_END + 0x008C, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
UNIT_FIELD_PADDING = OBJECT_END + 0x008D, // Size: 1, Type: INT, Flags: NONE
|
||||
UNIT_END = OBJECT_END + 0x008E,
|
||||
|
||||
PLAYER_DUEL_ARBITER = UNIT_END + 0x0000, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_FLAGS = UNIT_END + 0x0002, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
@ -260,166 +285,190 @@ enum EUnitFields
|
||||
PLAYER_QUEST_LOG_25_3 = UNIT_END + 0x006C, // Size: 1, Type: BYTES, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_25_4 = UNIT_END + 0x006D, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_VISIBLE_ITEM_1_CREATOR = UNIT_END + 0x006E, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_1_0 = UNIT_END + 0x0070, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_1_PROPERTIES = UNIT_END + 0x007C, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_1_PAD = UNIT_END + 0x007D, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_2_CREATOR = UNIT_END + 0x007E, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_2_0 = UNIT_END + 0x0080, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_2_PROPERTIES = UNIT_END + 0x008C, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_2_PAD = UNIT_END + 0x008D, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_3_CREATOR = UNIT_END + 0x008E, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_3_0 = UNIT_END + 0x0090, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_3_PROPERTIES = UNIT_END + 0x009C, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_3_PAD = UNIT_END + 0x009D, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_4_CREATOR = UNIT_END + 0x009E, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_4_0 = UNIT_END + 0x00A0, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_4_PROPERTIES = UNIT_END + 0x00AC, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_4_PAD = UNIT_END + 0x00AD, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_5_CREATOR = UNIT_END + 0x00AE, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_5_0 = UNIT_END + 0x00B0, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_5_PROPERTIES = UNIT_END + 0x00BC, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_5_PAD = UNIT_END + 0x00BD, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_6_CREATOR = UNIT_END + 0x00BE, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_6_0 = UNIT_END + 0x00C0, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_6_PROPERTIES = UNIT_END + 0x00CC, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_6_PAD = UNIT_END + 0x00CD, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_7_CREATOR = UNIT_END + 0x00CE, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_7_0 = UNIT_END + 0x00D0, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_7_PROPERTIES = UNIT_END + 0x00DC, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_7_PAD = UNIT_END + 0x00DD, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_8_CREATOR = UNIT_END + 0x00DE, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_8_0 = UNIT_END + 0x00E0, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_8_PROPERTIES = UNIT_END + 0x00EC, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_8_PAD = UNIT_END + 0x00ED, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_9_CREATOR = UNIT_END + 0x00EE, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_9_0 = UNIT_END + 0x00F0, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_9_PROPERTIES = UNIT_END + 0x00FC, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_9_PAD = UNIT_END + 0x00FD, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_10_CREATOR = UNIT_END + 0x00FE, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_10_0 = UNIT_END + 0x0100, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_10_PROPERTIES = UNIT_END + 0x010C, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_10_PAD = UNIT_END + 0x010D, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_11_CREATOR = UNIT_END + 0x010E, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_11_0 = UNIT_END + 0x0110, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_11_PROPERTIES = UNIT_END + 0x011C, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_11_PAD = UNIT_END + 0x011D, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_12_CREATOR = UNIT_END + 0x011E, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_12_0 = UNIT_END + 0x0120, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_12_PROPERTIES = UNIT_END + 0x012C, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_12_PAD = UNIT_END + 0x012D, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_13_CREATOR = UNIT_END + 0x012E, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_13_0 = UNIT_END + 0x0130, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_13_PROPERTIES = UNIT_END + 0x013C, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_13_PAD = UNIT_END + 0x013D, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_14_CREATOR = UNIT_END + 0x013E, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_14_0 = UNIT_END + 0x0140, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_14_PROPERTIES = UNIT_END + 0x014C, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_14_PAD = UNIT_END + 0x014D, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_15_CREATOR = UNIT_END + 0x014E, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_15_0 = UNIT_END + 0x0150, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_15_PROPERTIES = UNIT_END + 0x015C, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_15_PAD = UNIT_END + 0x015D, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_16_CREATOR = UNIT_END + 0x015E, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_16_0 = UNIT_END + 0x0160, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_16_PROPERTIES = UNIT_END + 0x016C, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_16_PAD = UNIT_END + 0x016D, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_17_CREATOR = UNIT_END + 0x016E, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_17_0 = UNIT_END + 0x0170, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_17_PROPERTIES = UNIT_END + 0x017C, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_17_PAD = UNIT_END + 0x017D, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_18_CREATOR = UNIT_END + 0x017E, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_18_0 = UNIT_END + 0x0180, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_18_PROPERTIES = UNIT_END + 0x018C, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_18_PAD = UNIT_END + 0x018D, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_19_CREATOR = UNIT_END + 0x018E, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_19_0 = UNIT_END + 0x0190, // Size: 12, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_19_PROPERTIES = UNIT_END + 0x019C, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_19_PAD = UNIT_END + 0x019D, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_CHOSEN_TITLE = UNIT_END + 0x019E, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_FIELD_PAD_0 = UNIT_END + 0x019F, // Size: 1, Type: INT, Flags: NONE
|
||||
PLAYER_FIELD_INV_SLOT_HEAD = UNIT_END + 0x01A0, // Size: 46, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FIELD_PACK_SLOT_1 = UNIT_END + 0x01CE, // Size: 32, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FIELD_BANK_SLOT_1 = UNIT_END + 0x01EE, // Size: 56, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FIELD_BANKBAG_SLOT_1 = UNIT_END + 0x0226, // Size: 14, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FIELD_VENDORBUYBACK_SLOT_1 = UNIT_END + 0x0234, // Size: 24, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FIELD_KEYRING_SLOT_1 = UNIT_END + 0x024C, // Size: 64, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FIELD_VANITYPET_SLOT_1 = UNIT_END + 0x028C, // Size: 36, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FARSIGHT = UNIT_END + 0x02B0, // Size: 2, Type: LONG, Flags: PRIVATE
|
||||
PLAYER__FIELD_KNOWN_TITLES = UNIT_END + 0x02B2, // Size: 2, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_XP = UNIT_END + 0x02B4, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_NEXT_LEVEL_XP = UNIT_END + 0x02B5, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_SKILL_INFO_1_1 = UNIT_END + 0x02B6, // Size: 384, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_CHARACTER_POINTS1 = UNIT_END + 0x0436, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_CHARACTER_POINTS2 = UNIT_END + 0x0437, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_TRACK_CREATURES = UNIT_END + 0x0438, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_TRACK_RESOURCES = UNIT_END + 0x0439, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_BLOCK_PERCENTAGE = UNIT_END + 0x043A, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_DODGE_PERCENTAGE = UNIT_END + 0x043B, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_PARRY_PERCENTAGE = UNIT_END + 0x043C, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_EXPERTISE = UNIT_END + 0x043D, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_OFFHAND_EXPERTISE = UNIT_END + 0x043E, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_CRIT_PERCENTAGE = UNIT_END + 0x043F, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_RANGED_CRIT_PERCENTAGE = UNIT_END + 0x0440, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_OFFHAND_CRIT_PERCENTAGE = UNIT_END + 0x0441, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_SPELL_CRIT_PERCENTAGE1 = UNIT_END + 0x0442, // Size: 7, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_VISIBLE_ITEM_1_0 = UNIT_END + 0x0070, // Size: 13, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_1_PROPERTIES = UNIT_END + 0x007D, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_1_SEED = UNIT_END + 0x007E, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_1_PAD = UNIT_END + 0x007F, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_2_CREATOR = UNIT_END + 0x0080, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_2_0 = UNIT_END + 0x0082, // Size: 13, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_2_PROPERTIES = UNIT_END + 0x008F, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_2_SEED = UNIT_END + 0x0090, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_2_PAD = UNIT_END + 0x0091, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_3_CREATOR = UNIT_END + 0x0092, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_3_0 = UNIT_END + 0x0094, // Size: 13, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_3_PROPERTIES = UNIT_END + 0x00A1, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_3_SEED = UNIT_END + 0x00A2, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_3_PAD = UNIT_END + 0x00A3, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_4_CREATOR = UNIT_END + 0x00A4, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_4_0 = UNIT_END + 0x00A6, // Size: 13, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_4_PROPERTIES = UNIT_END + 0x00B3, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_4_SEED = UNIT_END + 0x00B4, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_4_PAD = UNIT_END + 0x00B5, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_5_CREATOR = UNIT_END + 0x00B6, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_5_0 = UNIT_END + 0x00B8, // Size: 13, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_5_PROPERTIES = UNIT_END + 0x00C5, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_5_SEED = UNIT_END + 0x00C6, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_5_PAD = UNIT_END + 0x00C7, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_6_CREATOR = UNIT_END + 0x00C8, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_6_0 = UNIT_END + 0x00CA, // Size: 13, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_6_PROPERTIES = UNIT_END + 0x00D7, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_6_SEED = UNIT_END + 0x00D8, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_6_PAD = UNIT_END + 0x00D9, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_7_CREATOR = UNIT_END + 0x00DA, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_7_0 = UNIT_END + 0x00DC, // Size: 13, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_7_PROPERTIES = UNIT_END + 0x00E9, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_7_SEED = UNIT_END + 0x00EA, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_7_PAD = UNIT_END + 0x00EB, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_8_CREATOR = UNIT_END + 0x00EC, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_8_0 = UNIT_END + 0x00EE, // Size: 13, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_8_PROPERTIES = UNIT_END + 0x00FB, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_8_SEED = UNIT_END + 0x00FC, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_8_PAD = UNIT_END + 0x00FD, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_9_CREATOR = UNIT_END + 0x00FE, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_9_0 = UNIT_END + 0x0100, // Size: 13, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_9_PROPERTIES = UNIT_END + 0x010D, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_9_SEED = UNIT_END + 0x010E, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_9_PAD = UNIT_END + 0x010F, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_10_CREATOR = UNIT_END + 0x0110, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_10_0 = UNIT_END + 0x0112, // Size: 13, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_10_PROPERTIES = UNIT_END + 0x011F, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_10_SEED = UNIT_END + 0x0120, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_10_PAD = UNIT_END + 0x0121, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_11_CREATOR = UNIT_END + 0x0122, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_11_0 = UNIT_END + 0x0124, // Size: 13, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_11_PROPERTIES = UNIT_END + 0x0131, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_11_SEED = UNIT_END + 0x0132, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_11_PAD = UNIT_END + 0x0133, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_12_CREATOR = UNIT_END + 0x0134, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_12_0 = UNIT_END + 0x0136, // Size: 13, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_12_PROPERTIES = UNIT_END + 0x0143, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_12_SEED = UNIT_END + 0x0144, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_12_PAD = UNIT_END + 0x0145, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_13_CREATOR = UNIT_END + 0x0146, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_13_0 = UNIT_END + 0x0148, // Size: 13, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_13_PROPERTIES = UNIT_END + 0x0155, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_13_SEED = UNIT_END + 0x0156, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_13_PAD = UNIT_END + 0x0157, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_14_CREATOR = UNIT_END + 0x0158, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_14_0 = UNIT_END + 0x015A, // Size: 13, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_14_PROPERTIES = UNIT_END + 0x0167, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_14_SEED = UNIT_END + 0x0168, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_14_PAD = UNIT_END + 0x0169, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_15_CREATOR = UNIT_END + 0x016A, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_15_0 = UNIT_END + 0x016C, // Size: 13, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_15_PROPERTIES = UNIT_END + 0x0179, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_15_SEED = UNIT_END + 0x017A, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_15_PAD = UNIT_END + 0x017B, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_16_CREATOR = UNIT_END + 0x017C, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_16_0 = UNIT_END + 0x017E, // Size: 13, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_16_PROPERTIES = UNIT_END + 0x018B, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_16_SEED = UNIT_END + 0x018C, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_16_PAD = UNIT_END + 0x018D, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_17_CREATOR = UNIT_END + 0x018E, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_17_0 = UNIT_END + 0x0190, // Size: 13, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_17_PROPERTIES = UNIT_END + 0x019D, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_17_SEED = UNIT_END + 0x019E, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_17_PAD = UNIT_END + 0x019F, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_18_CREATOR = UNIT_END + 0x01A0, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_18_0 = UNIT_END + 0x01A2, // Size: 13, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_18_PROPERTIES = UNIT_END + 0x01AF, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_18_SEED = UNIT_END + 0x01B0, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_18_PAD = UNIT_END + 0x01B1, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_19_CREATOR = UNIT_END + 0x01B2, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_19_0 = UNIT_END + 0x01B4, // Size: 13, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_19_PROPERTIES = UNIT_END + 0x01C1, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_19_SEED = UNIT_END + 0x01C2, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_19_PAD = UNIT_END + 0x01C3, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_CHOSEN_TITLE = UNIT_END + 0x01C4, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_FIELD_PAD_0 = UNIT_END + 0x01C5, // Size: 1, Type: INT, Flags: NONE
|
||||
PLAYER_FIELD_INV_SLOT_HEAD = UNIT_END + 0x01C6, // Size: 46, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FIELD_PACK_SLOT_1 = UNIT_END + 0x01F4, // Size: 32, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FIELD_BANK_SLOT_1 = UNIT_END + 0x0214, // Size: 56, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FIELD_BANKBAG_SLOT_1 = UNIT_END + 0x024C, // Size: 14, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FIELD_VENDORBUYBACK_SLOT_1 = UNIT_END + 0x025A, // Size: 24, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FIELD_KEYRING_SLOT_1 = UNIT_END + 0x0272, // Size: 64, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FIELD_VANITYPET_SLOT_1 = UNIT_END + 0x02B2, // Size: 36, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FIELD_CURRENCYTOKEN_SLOT_1 = UNIT_END + 0x02D6, // Size: 64, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FIELD_QUESTBAG_SLOT_1 = UNIT_END + 0x0316, // Size: 64, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FARSIGHT = UNIT_END + 0x0356, // Size: 2, Type: LONG, Flags: PRIVATE
|
||||
PLAYER__FIELD_KNOWN_TITLES = UNIT_END + 0x0358, // Size: 2, Type: LONG, Flags: PRIVATE
|
||||
PLAYER__FIELD_KNOWN_TITLES1 = UNIT_END + 0x035A, // Size: 2, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FIELD_KNOWN_CURRENCIES = UNIT_END + 0x035C, // Size: 2, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_XP = UNIT_END + 0x035E, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_NEXT_LEVEL_XP = UNIT_END + 0x035F, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_SKILL_INFO_1_1 = UNIT_END + 0x0360, // Size: 384, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_CHARACTER_POINTS1 = UNIT_END + 0x04E0, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_CHARACTER_POINTS2 = UNIT_END + 0x04E1, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_TRACK_CREATURES = UNIT_END + 0x04E2, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_TRACK_RESOURCES = UNIT_END + 0x04E3, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_BLOCK_PERCENTAGE = UNIT_END + 0x04E4, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_DODGE_PERCENTAGE = UNIT_END + 0x04E5, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_PARRY_PERCENTAGE = UNIT_END + 0x04E6, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_EXPERTISE = UNIT_END + 0x04E7, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_OFFHAND_EXPERTISE = UNIT_END + 0x04E8, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_CRIT_PERCENTAGE = UNIT_END + 0x04E9, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_RANGED_CRIT_PERCENTAGE = UNIT_END + 0x04EA, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_OFFHAND_CRIT_PERCENTAGE = UNIT_END + 0x04EB, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_SPELL_CRIT_PERCENTAGE1 = UNIT_END + 0x04EC, // Size: 7, Type: FLOAT, Flags: PRIVATE
|
||||
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_SHIELD_BLOCK = UNIT_END + 0x0449, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_EXPLORED_ZONES_1 = UNIT_END + 0x044A, // Size: 128, Type: BYTES, Flags: PRIVATE
|
||||
PLAYER_REST_STATE_EXPERIENCE = UNIT_END + 0x04CA, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_COINAGE = UNIT_END + 0x04CB, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_DAMAGE_DONE_POS = UNIT_END + 0x04CC, // Size: 7, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_DAMAGE_DONE_NEG = UNIT_END + 0x04D3, // Size: 7, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_DAMAGE_DONE_PCT = UNIT_END + 0x04DA, // Size: 7, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_HEALING_DONE_POS = UNIT_END + 0x04E1, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_TARGET_RESISTANCE = UNIT_END + 0x04E2, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_TARGET_PHYSICAL_RESISTANCE = UNIT_END + 0x04E3, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_BYTES = UNIT_END + 0x04E4, // Size: 1, Type: BYTES, Flags: PRIVATE
|
||||
PLAYER_AMMO_ID = UNIT_END + 0x04E5, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_SELF_RES_SPELL = UNIT_END + 0x04E6, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_PVP_MEDALS = UNIT_END + 0x04E7, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_BUYBACK_PRICE_1 = UNIT_END + 0x04E8, // Size: 12, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_BUYBACK_TIMESTAMP_1 = UNIT_END + 0x04F4, // Size: 12, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_KILLS = UNIT_END + 0x0500, // Size: 1, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_FIELD_TODAY_CONTRIBUTION = UNIT_END + 0x0501, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_YESTERDAY_CONTRIBUTION = UNIT_END + 0x0502, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_LIFETIME_HONORBALE_KILLS = UNIT_END + 0x0503, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_BYTES2 = UNIT_END + 0x0504, // Size: 1, Type: BYTES, Flags: PRIVATE
|
||||
PLAYER_FIELD_WATCHED_FACTION_INDEX = UNIT_END + 0x0505, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_COMBAT_RATING_1 = UNIT_END + 0x0506, // Size: 24, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_ARENA_TEAM_INFO_1_1 = UNIT_END + 0x051E, // Size: 18, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_HONOR_CURRENCY = UNIT_END + 0x0530, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_ARENA_CURRENCY = UNIT_END + 0x0531, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_MANA_REGEN = UNIT_END + 0x0532, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_MANA_REGEN_INTERRUPT = UNIT_END + 0x0533, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MAX_LEVEL = UNIT_END + 0x0534, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_DAILY_QUESTS_1 = UNIT_END + 0x0535, // Size: 25, Type: INT, Flags: PRIVATE
|
||||
PLAYER_END = UNIT_END + 0x054E,
|
||||
PLAYER_SHIELD_BLOCK = UNIT_END + 0x04F3, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_SHIELD_BLOCK_CRIT_PERCENTAGE = UNIT_END + 0x04F4, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_EXPLORED_ZONES_1 = UNIT_END + 0x04F5, // Size: 128, Type: BYTES, Flags: PRIVATE
|
||||
PLAYER_REST_STATE_EXPERIENCE = UNIT_END + 0x0575, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_COINAGE = UNIT_END + 0x0576, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_DAMAGE_DONE_POS = UNIT_END + 0x0577, // Size: 7, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_DAMAGE_DONE_NEG = UNIT_END + 0x057E, // Size: 7, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_DAMAGE_DONE_PCT = UNIT_END + 0x0585, // Size: 7, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_HEALING_DONE_POS = UNIT_END + 0x058C, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_TARGET_RESISTANCE = UNIT_END + 0x058D, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_TARGET_PHYSICAL_RESISTANCE = UNIT_END + 0x058E, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_BYTES = UNIT_END + 0x058F, // Size: 1, Type: BYTES, Flags: PRIVATE
|
||||
PLAYER_AMMO_ID = UNIT_END + 0x0590, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_SELF_RES_SPELL = UNIT_END + 0x0591, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_PVP_MEDALS = UNIT_END + 0x0592, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_BUYBACK_PRICE_1 = UNIT_END + 0x0593, // Size: 12, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_BUYBACK_TIMESTAMP_1 = UNIT_END + 0x059F, // Size: 12, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_KILLS = UNIT_END + 0x05AB, // Size: 1, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_FIELD_TODAY_CONTRIBUTION = UNIT_END + 0x05AC, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_YESTERDAY_CONTRIBUTION = UNIT_END + 0x05AD, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_LIFETIME_HONORBALE_KILLS = UNIT_END + 0x05AE, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_BYTES2 = UNIT_END + 0x05AF, // Size: 1, Type: BYTES, Flags: PRIVATE
|
||||
PLAYER_FIELD_WATCHED_FACTION_INDEX = UNIT_END + 0x05B0, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_COMBAT_RATING_1 = UNIT_END + 0x05B1, // Size: 25, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_ARENA_TEAM_INFO_1_1 = UNIT_END + 0x05CA, // Size: 18, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_HONOR_CURRENCY = UNIT_END + 0x05DC, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_ARENA_CURRENCY = UNIT_END + 0x05DD, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MAX_LEVEL = UNIT_END + 0x05DE, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_DAILY_QUESTS_1 = UNIT_END + 0x05DF, // Size: 25, Type: INT, Flags: PRIVATE
|
||||
PLAYER_RUNE_REGEN_1 = UNIT_END + 0x05F8, // Size: 4, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_NO_REAGENT_COST_1 = UNIT_END + 0x05FC, // Size: 3, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_GLYPH_SLOTS_1 = UNIT_END + 0x05FF, // Size: 8, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_GLYPHS_1 = UNIT_END + 0x0607, // Size: 8, Type: INT, Flags: PRIVATE
|
||||
PLAYER_GLYPHS_ENABLED = UNIT_END + 0x060F, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_END = UNIT_END + 0x0610,
|
||||
};
|
||||
|
||||
enum EGameObjectFields
|
||||
{
|
||||
OBJECT_FIELD_CREATED_BY = OBJECT_END + 0x0000, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
GAMEOBJECT_DISPLAYID = OBJECT_END + 0x0002, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
GAMEOBJECT_FLAGS = OBJECT_END + 0x0003, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
GAMEOBJECT_ROTATION = OBJECT_END + 0x0004, // Size: 4, Type: FLOAT, Flags: PUBLIC
|
||||
GAMEOBJECT_STATE = OBJECT_END + 0x0008, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
GAMEOBJECT_POS_X = OBJECT_END + 0x0009, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
GAMEOBJECT_POS_Y = OBJECT_END + 0x000A, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
GAMEOBJECT_POS_Z = OBJECT_END + 0x000B, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
GAMEOBJECT_FACING = OBJECT_END + 0x000C, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
GAMEOBJECT_DYN_FLAGS = OBJECT_END + 0x000D, // Size: 1, Type: INT, Flags: DYNAMIC
|
||||
GAMEOBJECT_FACTION = OBJECT_END + 0x000E, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
GAMEOBJECT_TYPE_ID = OBJECT_END + 0x000F, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
GAMEOBJECT_FLAGS = OBJECT_END + 0x0003, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
GAMEOBJECT_ROTATION = OBJECT_END + 0x0004, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
GAMEOBJECT_PARENTROTATION = OBJECT_END + 0x0006, // Size: 4, Type: FLOAT, Flags: PUBLIC
|
||||
GAMEOBJECT_POS_X = OBJECT_END + 0x000A, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
GAMEOBJECT_POS_Y = OBJECT_END + 0x000B, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
GAMEOBJECT_POS_Z = OBJECT_END + 0x000C, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
GAMEOBJECT_FACING = OBJECT_END + 0x000D, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
GAMEOBJECT_DYNAMIC = OBJECT_END + 0x000E, // Size: 1, Type: TWO_SHORT, Flags: DYNAMIC
|
||||
GAMEOBJECT_FACTION = OBJECT_END + 0x000F, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
GAMEOBJECT_LEVEL = OBJECT_END + 0x0010, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
GAMEOBJECT_ARTKIT = OBJECT_END + 0x0011, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
GAMEOBJECT_ANIMPROGRESS = OBJECT_END + 0x0012, // Size: 1, Type: INT, Flags: DYNAMIC
|
||||
GAMEOBJECT_PADDING = OBJECT_END + 0x0013, // Size: 1, Type: INT, Flags: NONE
|
||||
GAMEOBJECT_END = OBJECT_END + 0x0014,
|
||||
GAMEOBJECT_BYTES_1 = OBJECT_END + 0x0011, // Size: 1, Type: BYTES, Flags: PUBLIC
|
||||
GAMEOBJECT_END = OBJECT_END + 0x0012,
|
||||
};
|
||||
|
||||
enum EDynamicObjectFields
|
||||
|
||||
@ -312,6 +312,7 @@ OpcodeHandler *WorldSession::_GetOpcodeHandlerTable() const
|
||||
{MSG_MOVE_SET_TURN_RATE, &WorldSession::_HandleSetSpeedOpcode},
|
||||
{MSG_MOVE_SET_FLIGHT_SPEED, &WorldSession::_HandleSetSpeedOpcode},
|
||||
{MSG_MOVE_SET_FLIGHT_BACK_SPEED, &WorldSession::_HandleSetSpeedOpcode},
|
||||
{MSG_MOVE_SET_PITCH_RATE, &WorldSession::_HandleSetSpeedOpcode},
|
||||
|
||||
// force set speed opcodes
|
||||
{SMSG_FORCE_WALK_SPEED_CHANGE, &WorldSession::_HandleForceSetSpeedOpcode},
|
||||
@ -322,11 +323,12 @@ OpcodeHandler *WorldSession::_GetOpcodeHandlerTable() const
|
||||
{SMSG_FORCE_TURN_RATE_CHANGE, &WorldSession::_HandleForceSetSpeedOpcode},
|
||||
{SMSG_FORCE_FLIGHT_SPEED_CHANGE, &WorldSession::_HandleForceSetSpeedOpcode},
|
||||
{SMSG_FORCE_FLIGHT_BACK_SPEED_CHANGE, &WorldSession::_HandleForceSetSpeedOpcode},
|
||||
{SMSG_FORCE_PITCH_RATE_CHANGE, &WorldSession::_HandleForceSetSpeedOpcode},
|
||||
|
||||
{SMSG_COMPRESSED_UPDATE_OBJECT, &WorldSession::_HandleCompressedUpdateObjectOpcode},
|
||||
{SMSG_UPDATE_OBJECT, &WorldSession::_HandleUpdateObjectOpcode},
|
||||
{SMSG_CAST_FAILED, &WorldSession::_HandleCastResultOpcode},
|
||||
{SMSG_CLEAR_EXTRA_AURA_INFO, &WorldSession::_HandleCastSuccessOpcode},
|
||||
/*{SMSG_CLEAR_EXTRA_AURA_INFO_OBSOLETE, &WorldSession::_HandleCastSuccessOpcode}, <--- RECHECK ME ! - cast success removed ?!? */
|
||||
{SMSG_ITEM_QUERY_SINGLE_RESPONSE, &WorldSession::_HandleItemQuerySingleResponseOpcode},
|
||||
{SMSG_DESTROY_OBJECT, &WorldSession::_HandleDestroyObjectOpcode},
|
||||
{SMSG_INITIAL_SPELLS, &WorldSession::_HandleInitialSpellsOpcode},
|
||||
@ -529,7 +531,7 @@ void WorldSession::_HandleAuthChallengeOpcode(WorldPacket& recvPacket)
|
||||
digest.UpdateBigNumbers(GetInstance()->GetSessionKey(),NULL);
|
||||
digest.Finalize();
|
||||
WorldPacket auth;
|
||||
auth<<(uint32)(GetInstance()->GetConf()->clientbuild)<<unk<<acc<<clientseed_uint32;
|
||||
auth<<(uint32)(GetInstance()->GetConf()->clientbuild)<<unk<<acc<<unk<<clientseed_uint32;
|
||||
auth.append(digest.GetDigest(),20);
|
||||
// recvPacket << real_size
|
||||
// recvPacket << ziped_UI_Plugins_Info
|
||||
@ -548,7 +550,11 @@ void WorldSession::_HandleAuthChallengeOpcode(WorldPacket& recvPacket)
|
||||
void WorldSession::_HandleAuthResponseOpcode(WorldPacket& recvPacket)
|
||||
{
|
||||
uint8 errcode;
|
||||
uint8 dummy8, expansion; uint32 dummy32;
|
||||
recvPacket >> errcode;
|
||||
recvPacket >> dummy32 >> dummy8 >> dummy32;
|
||||
recvPacket >> expansion;
|
||||
|
||||
if(errcode == 0xC)
|
||||
{
|
||||
logdetail("World Authentication successful, preparing for char list request...");
|
||||
@ -603,9 +609,9 @@ void WorldSession::_HandleCharEnumOpcode(WorldPacket& recvPacket)
|
||||
recvPacket >> plr[i]._y;
|
||||
recvPacket >> plr[i]._z;
|
||||
recvPacket >> plr[i]._guildId;
|
||||
recvPacket >> dummy8;
|
||||
recvPacket >> plr[i]._flags;
|
||||
recvPacket >> dummy8 >> dummy8 >> dummy8;
|
||||
recvPacket >> dummy32; // at_login_customize
|
||||
recvPacket >> dummy8;
|
||||
recvPacket >> plr[i]._petInfoId;
|
||||
recvPacket >> plr[i]._petLevel;
|
||||
recvPacket >> plr[i]._petFamilyId;
|
||||
@ -623,7 +629,7 @@ void WorldSession::_HandleCharEnumOpcode(WorldPacket& recvPacket)
|
||||
*mapdb = GetDBMgr().GetDB("map"),
|
||||
*classdb = GetDBMgr().GetDB("class");
|
||||
char *zonename, *racename, *mapname, *classname;
|
||||
zonename = racename = mapname = classname = NULL;
|
||||
zonename = racename = mapname = classname = "";
|
||||
|
||||
for(unsigned int i=0;i<num;i++)
|
||||
{
|
||||
@ -744,6 +750,12 @@ void WorldSession::_HandleSetProficiencyOpcode(WorldPacket& recvPacket)
|
||||
|
||||
void WorldSession::_HandleAccountDataMD5Opcode(WorldPacket& recvPacket)
|
||||
{
|
||||
/*
|
||||
uint32 time;
|
||||
uint8 dummy;
|
||||
recvPacket >> time >> dummy;
|
||||
...
|
||||
*/
|
||||
// packet structure not yet known
|
||||
}
|
||||
|
||||
@ -1013,9 +1025,9 @@ void WorldSession::_HandleMovementOpcode(WorldPacket& recvPacket)
|
||||
uint32 flags, time, unk32;
|
||||
float x, y, z, o;
|
||||
uint64 guid;
|
||||
uint8 unk8;
|
||||
uint16 unk16;
|
||||
guid = recvPacket.GetPackedGuid();
|
||||
recvPacket >> flags >> unk8 >> time >> x >> y >> z >> o >> unk32;
|
||||
recvPacket >> flags >> unk16 >> time >> x >> y >> z >> o >> unk32;
|
||||
DEBUG(logdebug("MOVE: "I64FMT" -> time=%u flags=0x%X x=%.4f y=%.4f z=%.4f o=%.4f",guid,time,flags,x,y,z,o));
|
||||
Object *obj = objmgr.GetObj(guid);
|
||||
if(obj && obj->IsWorldObject())
|
||||
@ -1029,7 +1041,7 @@ void WorldSession::_HandleSetSpeedOpcode(WorldPacket& recvPacket)
|
||||
uint64 guid;
|
||||
float x, y, z, o, speed;
|
||||
uint32 unk32, movetype;
|
||||
uint8 unk8;
|
||||
uint16 unk16;
|
||||
|
||||
switch(recvPacket.GetOpcode())
|
||||
{
|
||||
@ -1065,6 +1077,10 @@ void WorldSession::_HandleSetSpeedOpcode(WorldPacket& recvPacket)
|
||||
movetype = MOVE_FLYBACK;
|
||||
break;
|
||||
|
||||
case MSG_MOVE_SET_PITCH_RATE:
|
||||
movetype = MOVE_PITCH_RATE;
|
||||
break;
|
||||
|
||||
default:
|
||||
logerror("MSG_MOVE_SET speed change unkown case error, opcode %u !", recvPacket.GetOpcode());
|
||||
return;
|
||||
@ -1072,10 +1088,10 @@ void WorldSession::_HandleSetSpeedOpcode(WorldPacket& recvPacket)
|
||||
|
||||
guid = recvPacket.GetPackedGuid();
|
||||
recvPacket >> unk32;
|
||||
recvPacket >> unk8;
|
||||
recvPacket >> unk16;
|
||||
recvPacket >> unk32; /* getMSTime()*/
|
||||
recvPacket >> x >> y >> z >> o;
|
||||
recvPacket >> unk32;
|
||||
recvPacket >> unk32; // falltime
|
||||
recvPacket >> speed;
|
||||
|
||||
Object *obj = objmgr.GetObj(guid);
|
||||
@ -1127,6 +1143,10 @@ void WorldSession::_HandleForceSetSpeedOpcode(WorldPacket& recvPacket)
|
||||
movetype = MOVE_FLYBACK;
|
||||
break;
|
||||
|
||||
case SMSG_FORCE_PITCH_RATE_CHANGE:
|
||||
movetype = MOVE_PITCH_RATE;
|
||||
break;
|
||||
|
||||
default:
|
||||
logerror("MSG_FORCE_ speed change unkown case error, opcode %u !", recvPacket.GetOpcode());
|
||||
return;
|
||||
@ -1253,7 +1273,7 @@ void WorldSession::_HandleCastResultOpcode(WorldPacket& recvPacket)
|
||||
{
|
||||
uint32 spellid,otherr = 0;
|
||||
uint8 result, castCount;
|
||||
recvPacket >> spellid >> result >> castCount;
|
||||
recvPacket >> castCount >> spellid >> result;
|
||||
if (recvPacket.rpos()+sizeof(uint32) <= recvPacket.size())
|
||||
recvPacket >> otherr;
|
||||
logdetail("Cast of spell %u failed. result=%u, cast count=%u, additional info=%u",spellid,result,castCount,otherr);
|
||||
@ -1542,7 +1562,7 @@ void WorldSession::_HandleCreatureQueryResponseOpcode(WorldPacket& recvPacket)
|
||||
|
||||
CreatureTemplate *ct = new CreatureTemplate();
|
||||
std::string s;
|
||||
uint32 unk;
|
||||
//uint32 unk;
|
||||
float unkf;
|
||||
ct->entry = entry;
|
||||
recvPacket >> ct->name;
|
||||
@ -1555,7 +1575,6 @@ void WorldSession::_HandleCreatureQueryResponseOpcode(WorldPacket& recvPacket)
|
||||
recvPacket >> ct->type;
|
||||
recvPacket >> ct->family;
|
||||
recvPacket >> ct->rank;
|
||||
recvPacket >> unk;
|
||||
recvPacket >> ct->SpellDataId;
|
||||
recvPacket >> ct->displayid_A;
|
||||
recvPacket >> ct->displayid_H;
|
||||
|
||||
@ -77,11 +77,32 @@ void WorldSocket::OnRead()
|
||||
DEBUG(logdebug("Delaying header reading, bufsize is %u but should be >= %u",ibuf.GetLength(),sizeof(ServerPktHeader)));
|
||||
break;
|
||||
}
|
||||
ServerPktHeader hdr;
|
||||
ibuf.Read((char*)&hdr,sizeof(ServerPktHeader));
|
||||
_crypt.DecryptRecv((uint8*)&hdr,sizeof(ServerPktHeader));
|
||||
_remaining = ntohs(hdr.size)-2;
|
||||
_opcode = hdr.cmd;
|
||||
|
||||
// read first byte and check if size is 3 or 2 bytes
|
||||
uint8 firstSizeByte;
|
||||
ibuf.SoftRead((char*)&firstSizeByte, 1);
|
||||
_crypt.DecryptRecv(&firstSizeByte, 1, true);
|
||||
|
||||
if (firstSizeByte & 0x80) // got large packet
|
||||
{
|
||||
ServerPktHeaderBig hdr;
|
||||
ibuf.Read((char*)&hdr, 3+2);
|
||||
_crypt.DecryptRecv((uint8*)&hdr, 3+2, false);
|
||||
|
||||
uint32 realsize = ((hdr.size[0]&0x7F)<<16) | (hdr.size[1]<<8) | hdr.size[2];
|
||||
_remaining = realsize - 2;
|
||||
_opcode = hdr.cmd;
|
||||
}
|
||||
else // "normal" packet
|
||||
{
|
||||
ServerPktHeader hdr;
|
||||
ibuf.Read((char*)&hdr, sizeof(ServerPktHeader));
|
||||
_crypt.DecryptRecv((uint8*)&hdr, sizeof(ServerPktHeader), false);
|
||||
|
||||
_remaining = ntohs(hdr.size)-2;
|
||||
_opcode = hdr.cmd;
|
||||
}
|
||||
|
||||
if(_opcode > MAX_OPCODE_ID)
|
||||
{
|
||||
logcritical("CRYPT ERROR: opcode=%u, remain=%u",_opcode,_remaining); // this should never be the case!
|
||||
|
||||
@ -7,6 +7,12 @@
|
||||
class WorldSession;
|
||||
class BigNumber;
|
||||
|
||||
#if defined( __GNUC__ )
|
||||
#pragma pack(1)
|
||||
#else
|
||||
#pragma pack(push,1)
|
||||
#endif
|
||||
|
||||
struct ClientPktHeader
|
||||
{
|
||||
uint16 size;
|
||||
@ -20,6 +26,19 @@ struct ServerPktHeader
|
||||
uint16 cmd;
|
||||
};
|
||||
|
||||
struct ServerPktHeaderBig
|
||||
{
|
||||
uint8 size[3];
|
||||
uint16 cmd;
|
||||
};
|
||||
|
||||
#if defined( __GNUC__ )
|
||||
#pragma pack()
|
||||
#else
|
||||
#pragma pack(pop)
|
||||
#endif
|
||||
|
||||
|
||||
class WorldSocket : public TcpSocket
|
||||
{
|
||||
public:
|
||||
@ -41,7 +60,7 @@ private:
|
||||
AuthCrypt _crypt;
|
||||
bool _gothdr; // true if only the header was recieved yet
|
||||
uint16 _opcode; // stores the last recieved opcode
|
||||
uint16 _remaining; // bytes amount of the next data packet
|
||||
uint32 _remaining; // bytes amount of the next data packet
|
||||
bool _ok;
|
||||
|
||||
};
|
||||
|
||||
@ -158,6 +158,26 @@ bool ADTFile::LoadMem(ByteBuffer& buf)
|
||||
_wmosp.push_back(buf.read<MODF_chunk>());
|
||||
}
|
||||
}
|
||||
else if(!strcmp((char*)fourcc,"MH2O"))
|
||||
{
|
||||
// TODO: Implement rest of this asap water levels needed for rendering/swimming!
|
||||
|
||||
for(uint32 i = 0; i < CHUNKS_PER_TILE; i++)
|
||||
{
|
||||
uint32 ofsData1, used, ofsData2;
|
||||
buf >> ofsData1 >> used >> ofsData2;
|
||||
|
||||
_chunks[i].haswater = used;
|
||||
|
||||
if (used)
|
||||
{
|
||||
// ... http://madx.dk/wowdev/wiki/index.php?title=ADT#MH2O_chunk
|
||||
}
|
||||
}
|
||||
|
||||
// remove me:
|
||||
buf.rpos(buf.rpos()+size-(4+4+4)*CHUNKS_PER_TILE);
|
||||
}
|
||||
else if(!strcmp((char*)fourcc,"MCNK"))
|
||||
{
|
||||
_chunks[mcnkid].hdr = buf.read<ADTMapChunkHeader>();
|
||||
@ -173,8 +193,8 @@ bool ADTFile::LoadMem(ByteBuffer& buf)
|
||||
// HACKS to make it work properly
|
||||
if(!msize && !strcmp((char*)mfcc,"MCAL"))
|
||||
continue;
|
||||
if((!msize) && !strcmp((char*)mfcc,"MCLQ"))
|
||||
msize = _chunks[mcnkid].hdr.sizeLiquid;
|
||||
//if((!msize) && !strcmp((char*)mfcc,"MCLQ"))
|
||||
// msize = _chunks[mcnkid].hdr.sizeLiquid;
|
||||
|
||||
//DEBUG(printf("ADT: MCNK: reading '%s' size %u\n",mfcc,msize));
|
||||
|
||||
@ -216,7 +236,7 @@ bool ADTFile::LoadMem(ByteBuffer& buf)
|
||||
buf.read((uint8*)(_chunks[mcnkid].alphamap[i]),2048);
|
||||
}
|
||||
}
|
||||
else if(!strcmp((char*)mfcc,"MCLQ"))
|
||||
/*else if(!strcmp((char*)mfcc,"MCLQ")) // MCLQ changed to MH2O chunk for whole ADT file
|
||||
{
|
||||
uint8 _cc3[5];
|
||||
uint8 *fcc1 = &_cc3[0];
|
||||
@ -263,7 +283,7 @@ bool ADTFile::LoadMem(ByteBuffer& buf)
|
||||
buf.rpos(buf.rpos()+diffbytes);
|
||||
//DEBUG(printf("ADT: MCNK: MCLQ - %u junk bytes skipped\n",diffbytes));
|
||||
}
|
||||
}
|
||||
}*/
|
||||
else if(!strcmp((char*)mfcc,"MCSE"))
|
||||
{
|
||||
uint32 emm = _chunks[mcnkid].hdr.nSndEmitters;
|
||||
|
||||
@ -30,20 +30,30 @@ void AuthCrypt::Init()
|
||||
_initialized = true;
|
||||
}
|
||||
|
||||
void AuthCrypt::DecryptRecv(uint8 *data, size_t len)
|
||||
void AuthCrypt::DecryptRecv(uint8 *data, size_t len, bool temp)
|
||||
{
|
||||
if (!_initialized) return;
|
||||
if (len < CRYPTED_RECV_LEN) return;
|
||||
//if (len < CRYPTED_RECV_LEN) return;
|
||||
uint8 ti, tj;
|
||||
if (temp)
|
||||
{
|
||||
ti = _recv_i;
|
||||
tj = _recv_j;
|
||||
}
|
||||
|
||||
for (size_t t = 0; t < CRYPTED_RECV_LEN; t++)
|
||||
for (size_t t = 0; t < len; t++)
|
||||
{
|
||||
_recv_i %= _key.size();
|
||||
uint8 x = (data[t] - _recv_j) ^ _key[_recv_i];
|
||||
++_recv_i;
|
||||
_recv_j = data[t];
|
||||
data[t] = x;
|
||||
}
|
||||
|
||||
|
||||
if (temp)
|
||||
{
|
||||
_recv_i = ti;
|
||||
_recv_j = tj;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -39,7 +39,7 @@ class AuthCrypt
|
||||
inline uint8 *GetKey(void) { return &_key[0]; }
|
||||
inline uint32 GetKeySize(void) { return _key.size(); }
|
||||
|
||||
void DecryptRecv(uint8 *, size_t);
|
||||
void DecryptRecv(uint8 *, size_t, bool);
|
||||
void EncryptSend(uint8 *, size_t);
|
||||
|
||||
bool IsInitialized() { return _initialized; }
|
||||
|
||||
@ -91,6 +91,11 @@ class ByteBuffer
|
||||
append<uint16>(value);
|
||||
return *this;
|
||||
}
|
||||
ByteBuffer &operator<<(int32 value)
|
||||
{
|
||||
append<int32>(value);
|
||||
return *this;
|
||||
}
|
||||
ByteBuffer &operator<<(uint32 value)
|
||||
{
|
||||
append<uint32>(value);
|
||||
@ -139,6 +144,11 @@ class ByteBuffer
|
||||
value = read<uint16>();
|
||||
return *this;
|
||||
}
|
||||
ByteBuffer &operator>>(int32 &value)
|
||||
{
|
||||
value = read<int32>();
|
||||
return *this;
|
||||
}
|
||||
ByteBuffer &operator>>(uint32 &value)
|
||||
{
|
||||
value = read<uint32>();
|
||||
|
||||
@ -345,13 +345,13 @@ static const char *CreatureDisplayInfoFieldNames[] = {
|
||||
"","model","unk","extra","scale","opacity","name1","name2","name3","", // 0-9
|
||||
"","sound","","","","","","","","", // 10-19
|
||||
"",
|
||||
""
|
||||
"", "", ""
|
||||
};
|
||||
|
||||
static const char *CreatureDisplayInfoFormat = {
|
||||
"iiiifisssx" // 0-9
|
||||
"xixxxxxxxx" // 10-19
|
||||
"x"
|
||||
"xxx"
|
||||
};
|
||||
|
||||
enum NPCSoundsEnum
|
||||
|
||||
@ -18,7 +18,9 @@ MPQHelper::MPQHelper(char *archive)
|
||||
// ok maybe this is a bit too much but should work fine :)
|
||||
_patches.push_front(dir+archive+ext); //
|
||||
_patches.push_front(dir+"common"+ext);
|
||||
_patches.push_front(dir+"common-2"+ext);
|
||||
_patches.push_front(dir+"expansion"+ext);
|
||||
_patches.push_front(dir+"lichking"+ext);
|
||||
_patches.push_front(dir+"patch"+ext);
|
||||
for(uint32 i=1; i<=MAX_PATCH_NUMBER; i++)
|
||||
{
|
||||
@ -32,6 +34,7 @@ MPQHelper::MPQHelper(char *archive)
|
||||
_patches.push_front(ldir+"expansion-speech-"+GetLocale()+ext);
|
||||
_patches.push_front(ldir+"expansion-locale-"+GetLocale()+ext);
|
||||
_patches.push_front(ldir+"expansion-"+archive+"-"+GetLocale()+ext);
|
||||
_patches.push_front(ldir+"lichking-locale-"+GetLocale()+ext);
|
||||
|
||||
_patches.push_front(ldir+"patch"+"-"+GetLocale()+ext);
|
||||
for(uint32 i=1; i<=MAX_PATCH_NUMBER; i++)
|
||||
|
||||
@ -77,9 +77,9 @@ HANDLE CreateFile(const char *sFileName, DWORD ulMode, DWORD ulSharing, void *pS
|
||||
case OPEN_EXISTING:
|
||||
return (HANDLE)open(sFileName, O_RDONLY | O_LARGEFILE);
|
||||
case OPEN_ALWAYS:
|
||||
return (HANDLE)open(sFileName, O_RDWR | O_CREAT);
|
||||
return (HANDLE)open(sFileName, O_RDWR | O_CREAT, 0666);
|
||||
case CREATE_NEW:
|
||||
return (HANDLE)open(sFileName, O_RDWR | O_CREAT | O_TRUNC);
|
||||
return (HANDLE)open(sFileName, O_RDWR | O_CREAT | O_TRUNC, 0666);
|
||||
default:
|
||||
return INVALID_HANDLE_VALUE;
|
||||
}
|
||||
|
||||
@ -728,8 +728,6 @@ void ExtractMapDependencies(void)
|
||||
{
|
||||
ByteBuffer bb = mpqmodel.ExtractFile((char*)mpqfn.c_str());
|
||||
fh.write((const char*)bb.contents(),bb.size());
|
||||
if (doTextures)
|
||||
FetchTexturesFromModel(bb);
|
||||
|
||||
if(doMd5)
|
||||
{
|
||||
@ -741,6 +739,35 @@ void ExtractMapDependencies(void)
|
||||
memcpy(md5ptr, h.GetDigest(), MD5_DIGEST_LENGTH);
|
||||
}
|
||||
mdone++;
|
||||
|
||||
// model ok, now extract skins
|
||||
// for now first skin is all what we need
|
||||
std::string copy = mpqfn;
|
||||
std::transform(copy.begin(), copy.end(), copy.begin(), tolower);
|
||||
if (copy.find(".wmo") == std::string::npos)
|
||||
{
|
||||
if (doTextures)
|
||||
FetchTexturesFromModel(bb);
|
||||
|
||||
std::string skin = mpqfn.substr(0,mpqfn.length()-3) + "00.skin";
|
||||
std::string skinrealfn = pathmodel + "/" + _PathToFileName(skin);
|
||||
if (mpqmodel.FileExists((char*)skin.c_str()))
|
||||
{
|
||||
std::fstream fhs;
|
||||
fhs.open(skinrealfn.c_str(),std::ios_base::out | std::ios_base::binary);
|
||||
if(fhs.is_open())
|
||||
{
|
||||
ByteBuffer bbs = mpqmodel.ExtractFile((char*)skin.c_str());
|
||||
fhs.write((const char*)bbs.contents(),bbs.size());
|
||||
}
|
||||
else
|
||||
printf("Could not write skin %s\n",skinrealfn.c_str());
|
||||
|
||||
fhs.close();
|
||||
}
|
||||
else
|
||||
printf("Could not open skin %s\n",skin.c_str());
|
||||
}
|
||||
}
|
||||
else
|
||||
printf("Could not write model %s\n",realfn.c_str());
|
||||
@ -952,8 +979,8 @@ void FetchTexturesFromModel(ByteBuffer bb)
|
||||
|
||||
bb.read((uint8*)&header, sizeof(header));
|
||||
|
||||
if ((header.version[0] < 4 || header.version[0] > 7) || header.version[1] != 1 || header.version[2] != 0 || header.version[3] != 0) {
|
||||
//printf("Not M2 model file!");
|
||||
if (header.version[0] != 8 || header.version[1] != 1 || header.version[2] != 0 || header.version[3] != 0) {
|
||||
printf("Not M2 model file!");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user