* First step away from hardcoded updatefields: max field values are now set depending on conf client version
This commit is contained in:
parent
bd9424b0c2
commit
c024fac446
@ -4,7 +4,7 @@ Bag::Bag() : Item()
|
|||||||
{
|
{
|
||||||
_type |= TYPE_CONTAINER;
|
_type |= TYPE_CONTAINER;
|
||||||
_typeid = TYPEID_CONTAINER;
|
_typeid = TYPEID_CONTAINER;
|
||||||
_valuescount = CONTAINER_END;
|
_valuescount = Object::maxvalues[_typeid];
|
||||||
_slot = 0;
|
_slot = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -4,7 +4,7 @@ Corpse::Corpse()
|
|||||||
{
|
{
|
||||||
_type=TYPE_CORPSE;
|
_type=TYPE_CORPSE;
|
||||||
_typeid=TYPEID_CORPSE;
|
_typeid=TYPEID_CORPSE;
|
||||||
_valuescount=CORPSE_END;
|
_valuescount=Object::maxvalues[_typeid];
|
||||||
}
|
}
|
||||||
|
|
||||||
void Corpse::Create(uint64 guid)
|
void Corpse::Create(uint64 guid)
|
||||||
|
|||||||
@ -5,7 +5,7 @@ DynamicObject::DynamicObject() : WorldObject()
|
|||||||
_uint32values=NULL;
|
_uint32values=NULL;
|
||||||
_type=TYPE_DYNAMICOBJECT;
|
_type=TYPE_DYNAMICOBJECT;
|
||||||
_typeid=TYPEID_DYNAMICOBJECT;
|
_typeid=TYPEID_DYNAMICOBJECT;
|
||||||
_valuescount=DYNAMICOBJECT_END;
|
_valuescount=Object::maxvalues[_typeid];
|
||||||
}
|
}
|
||||||
|
|
||||||
void DynamicObject::Create(uint64 guid)
|
void DynamicObject::Create(uint64 guid)
|
||||||
|
|||||||
@ -5,7 +5,7 @@ GameObject::GameObject() : WorldObject()
|
|||||||
_uint32values=NULL;
|
_uint32values=NULL;
|
||||||
_type|=TYPE_GAMEOBJECT;
|
_type|=TYPE_GAMEOBJECT;
|
||||||
_typeid=TYPEID_GAMEOBJECT;
|
_typeid=TYPEID_GAMEOBJECT;
|
||||||
_valuescount=GAMEOBJECT_END;
|
_valuescount=Object::maxvalues[_typeid];
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameObject::Create(uint64 guid)
|
void GameObject::Create(uint64 guid)
|
||||||
|
|||||||
@ -134,7 +134,7 @@ Item::Item()
|
|||||||
_type |= TYPE_ITEM;
|
_type |= TYPE_ITEM;
|
||||||
_typeid = TYPEID_ITEM;
|
_typeid = TYPEID_ITEM;
|
||||||
|
|
||||||
_valuescount = ITEM_END;
|
_valuescount = Object::maxvalues[_typeid];
|
||||||
_slot = 0;
|
_slot = 0;
|
||||||
//_bag = NULL; // not yet implemented
|
//_bag = NULL; // not yet implemented
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,7 +9,7 @@ Object::Object()
|
|||||||
_uint32values=NULL;
|
_uint32values=NULL;
|
||||||
_type=TYPE_OBJECT;
|
_type=TYPE_OBJECT;
|
||||||
_typeid=TYPEID_OBJECT;
|
_typeid=TYPEID_OBJECT;
|
||||||
_valuescount=OBJECT_END; // base class. this value will be set by derived classes
|
_valuescount=Object::maxvalues[_typeid]; // base class. this value will be set by derived classes
|
||||||
}
|
}
|
||||||
|
|
||||||
Object::~Object()
|
Object::~Object()
|
||||||
|
|||||||
@ -32,7 +32,8 @@ enum TYPEID
|
|||||||
TYPEID_DYNAMICOBJECT = 6,
|
TYPEID_DYNAMICOBJECT = 6,
|
||||||
TYPEID_CORPSE = 7,
|
TYPEID_CORPSE = 7,
|
||||||
TYPEID_AIGROUP = 8,
|
TYPEID_AIGROUP = 8,
|
||||||
TYPEID_AREATRIGGER = 9
|
TYPEID_AREATRIGGER = 9,
|
||||||
|
TYPEID_MAX
|
||||||
};
|
};
|
||||||
|
|
||||||
class Object
|
class Object
|
||||||
@ -100,6 +101,8 @@ public:
|
|||||||
inline bool _IsDepleted(void) { return _depleted; }
|
inline bool _IsDepleted(void) { return _depleted; }
|
||||||
inline void _SetDepleted(void) { _depleted = true; }
|
inline void _SetDepleted(void) { _depleted = true; }
|
||||||
|
|
||||||
|
static uint32 maxvalues[];
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Object();
|
Object();
|
||||||
void _InitValues(void);
|
void _InitValues(void);
|
||||||
@ -114,8 +117,10 @@ protected:
|
|||||||
uint8 _typeid;
|
uint8 _typeid;
|
||||||
std::string _name;
|
std::string _name;
|
||||||
bool _depleted : 1; // true if the object was deleted from the objmgr, but not from memory
|
bool _depleted : 1; // true if the object was deleted from the objmgr, but not from memory
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class WorldObject : public Object
|
class WorldObject : public Object
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -145,17 +150,8 @@ protected:
|
|||||||
|
|
||||||
inline uint32 GetValuesCountByTypeId(uint8 tid)
|
inline uint32 GetValuesCountByTypeId(uint8 tid)
|
||||||
{
|
{
|
||||||
switch(tid)
|
if(tid < TYPEID_MAX)
|
||||||
{
|
return Object::maxvalues[tid];
|
||||||
case TYPEID_OBJECT: return OBJECT_END;
|
|
||||||
case TYPEID_UNIT: return UNIT_END;
|
|
||||||
case TYPEID_PLAYER: return PLAYER_END;
|
|
||||||
case TYPEID_ITEM: return ITEM_END;
|
|
||||||
case TYPEID_CONTAINER: return CONTAINER_END;
|
|
||||||
case TYPEID_GAMEOBJECT: return GAMEOBJECT_END;
|
|
||||||
case TYPEID_DYNAMICOBJECT: return DYNAMICOBJECT_END;
|
|
||||||
case TYPEID_CORPSE: return CORPSE_END;
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -13,7 +13,7 @@ Player::Player() : Unit()
|
|||||||
{
|
{
|
||||||
_type |= TYPE_PLAYER;
|
_type |= TYPE_PLAYER;
|
||||||
_typeid = TYPEID_PLAYER;
|
_typeid = TYPEID_PLAYER;
|
||||||
_valuescount = PLAYER_END;
|
_valuescount = Object::maxvalues[_typeid];
|
||||||
}
|
}
|
||||||
|
|
||||||
void Player::Create(uint64 guid)
|
void Player::Create(uint64 guid)
|
||||||
|
|||||||
@ -5,7 +5,7 @@ Unit::Unit() : WorldObject()
|
|||||||
{
|
{
|
||||||
_type |= TYPE_UNIT;
|
_type |= TYPE_UNIT;
|
||||||
_typeid = TYPEID_UNIT;
|
_typeid = TYPEID_UNIT;
|
||||||
_valuescount = UNIT_END;
|
_valuescount = Object::maxvalues[_typeid];
|
||||||
}
|
}
|
||||||
|
|
||||||
void Unit::Create(uint64 guid)
|
void Unit::Create(uint64 guid)
|
||||||
|
|||||||
@ -72,6 +72,7 @@ enum EItemFields
|
|||||||
ITEM_FIELD_CREATE_PLAYED_TIME = OBJECT_END + 0x0038, // Size: 1, Type: INT, Flags: PUBLIC
|
ITEM_FIELD_CREATE_PLAYED_TIME = OBJECT_END + 0x0038, // Size: 1, Type: INT, Flags: PUBLIC
|
||||||
ITEM_FIELD_PAD = OBJECT_END + 0x0039, // Size: 1, Type: INT, Flags: NONE
|
ITEM_FIELD_PAD = OBJECT_END + 0x0039, // Size: 1, Type: INT, Flags: NONE
|
||||||
ITEM_END = OBJECT_END + 0x003A,
|
ITEM_END = OBJECT_END + 0x003A,
|
||||||
|
ITEM_END_6005 = OBJECT_END + 0x2A,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum EContainerFields
|
enum EContainerFields
|
||||||
@ -80,6 +81,7 @@ enum EContainerFields
|
|||||||
CONTAINER_ALIGN_PAD = ITEM_END + 0x0001, // Size: 1, Type: BYTES, Flags: NONE
|
CONTAINER_ALIGN_PAD = ITEM_END + 0x0001, // Size: 1, Type: BYTES, Flags: NONE
|
||||||
CONTAINER_FIELD_SLOT_1 = ITEM_END + 0x0002, // Size: 72, Type: LONG, Flags: PUBLIC
|
CONTAINER_FIELD_SLOT_1 = ITEM_END + 0x0002, // Size: 72, Type: LONG, Flags: PUBLIC
|
||||||
CONTAINER_END = ITEM_END + 0x004A,
|
CONTAINER_END = ITEM_END + 0x004A,
|
||||||
|
CONTAINER_END_6005 = ITEM_END + 0x003A,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum EUnitFields
|
enum EUnitFields
|
||||||
@ -175,6 +177,8 @@ enum EUnitFields
|
|||||||
UNIT_FIELD_PADDING = OBJECT_END + 0x008D, // Size: 1, Type: INT, Flags: NONE
|
UNIT_FIELD_PADDING = OBJECT_END + 0x008D, // Size: 1, Type: INT, Flags: NONE
|
||||||
UNIT_END = OBJECT_END + 0x008E,
|
UNIT_END = OBJECT_END + 0x008E,
|
||||||
|
|
||||||
|
UNIT_END_6005 = OBJECT_END + 0x00B6,
|
||||||
|
|
||||||
PLAYER_DUEL_ARBITER = UNIT_END + 0x0000, // Size: 2, Type: LONG, Flags: PUBLIC
|
PLAYER_DUEL_ARBITER = UNIT_END + 0x0000, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||||
PLAYER_FLAGS = UNIT_END + 0x0002, // Size: 1, Type: INT, Flags: PUBLIC
|
PLAYER_FLAGS = UNIT_END + 0x0002, // Size: 1, Type: INT, Flags: PUBLIC
|
||||||
PLAYER_GUILDID = UNIT_END + 0x0003, // Size: 1, Type: INT, Flags: PUBLIC
|
PLAYER_GUILDID = UNIT_END + 0x0003, // Size: 1, Type: INT, Flags: PUBLIC
|
||||||
@ -391,6 +395,7 @@ enum EUnitFields
|
|||||||
PLAYER_GLYPHS_ENABLED = UNIT_END + 0x0498, // Size: 1, Type: INT, Flags: PRIVATE
|
PLAYER_GLYPHS_ENABLED = UNIT_END + 0x0498, // Size: 1, Type: INT, Flags: PRIVATE
|
||||||
PLAYER_PET_SPELL_POWER = UNIT_END + 0x0499, // Size: 1, Type: INT, Flags: PRIVATE
|
PLAYER_PET_SPELL_POWER = UNIT_END + 0x0499, // Size: 1, Type: INT, Flags: PRIVATE
|
||||||
PLAYER_END = UNIT_END + 0x049A,
|
PLAYER_END = UNIT_END + 0x049A,
|
||||||
|
PLAYER_END_6005 = UNIT_END + 0x0446,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum EGameObjectFields
|
enum EGameObjectFields
|
||||||
@ -404,6 +409,7 @@ enum EGameObjectFields
|
|||||||
GAMEOBJECT_LEVEL = OBJECT_END + 0x000A, // Size: 1, Type: INT, Flags: PUBLIC
|
GAMEOBJECT_LEVEL = OBJECT_END + 0x000A, // Size: 1, Type: INT, Flags: PUBLIC
|
||||||
GAMEOBJECT_BYTES_1 = OBJECT_END + 0x000B, // Size: 1, Type: BYTES, Flags: PUBLIC
|
GAMEOBJECT_BYTES_1 = OBJECT_END + 0x000B, // Size: 1, Type: BYTES, Flags: PUBLIC
|
||||||
GAMEOBJECT_END = OBJECT_END + 0x000C,
|
GAMEOBJECT_END = OBJECT_END + 0x000C,
|
||||||
|
GAMEOBJECT_END_6005 = OBJECT_END + 0x0014,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum EDynamicObjectFields
|
enum EDynamicObjectFields
|
||||||
|
|||||||
@ -22,6 +22,17 @@ struct OpcodeHandler
|
|||||||
void (WorldSession::*handler)(WorldPacket& recvPacket);
|
void (WorldSession::*handler)(WorldPacket& recvPacket);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
uint32 Object::maxvalues[TYPEID_MAX]={ 0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0};
|
||||||
|
|
||||||
WorldSession::WorldSession(PseuInstance *in)
|
WorldSession::WorldSession(PseuInstance *in)
|
||||||
{
|
{
|
||||||
logdebug("-> Starting WorldSession 0x%X from instance 0x%X",this,in); // should never output a null ptr
|
logdebug("-> Starting WorldSession 0x%X from instance 0x%X",this,in); // should never output a null ptr
|
||||||
@ -36,6 +47,33 @@ WorldSession::WorldSession(PseuInstance *in)
|
|||||||
objmgr.SetInstance(in);
|
objmgr.SetInstance(in);
|
||||||
_lag_ms = 0;
|
_lag_ms = 0;
|
||||||
//...
|
//...
|
||||||
|
switch(in->GetConf()->client)//TODO: Add TBC/WOTLK cases
|
||||||
|
{
|
||||||
|
case CLIENT_CLASSIC_WOW:
|
||||||
|
{
|
||||||
|
Object::maxvalues[TYPEID_OBJECT]=OBJECT_END;
|
||||||
|
Object::maxvalues[TYPEID_ITEM]=ITEM_END_6005;
|
||||||
|
Object::maxvalues[TYPEID_CONTAINER]=CONTAINER_END_6005;
|
||||||
|
Object::maxvalues[TYPEID_UNIT]=UNIT_END_6005;
|
||||||
|
Object::maxvalues[TYPEID_PLAYER]=PLAYER_END_6005;
|
||||||
|
Object::maxvalues[TYPEID_GAMEOBJECT]=GAMEOBJECT_END_6005;
|
||||||
|
Object::maxvalues[TYPEID_DYNAMICOBJECT]=DYNAMICOBJECT_END;
|
||||||
|
Object::maxvalues[TYPEID_CORPSE]=CORPSE_END;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
Object::maxvalues[TYPEID_OBJECT]=OBJECT_END;
|
||||||
|
Object::maxvalues[TYPEID_ITEM]=ITEM_END;
|
||||||
|
Object::maxvalues[TYPEID_CONTAINER]=CONTAINER_END;
|
||||||
|
Object::maxvalues[TYPEID_UNIT]=UNIT_END;
|
||||||
|
Object::maxvalues[TYPEID_PLAYER]=PLAYER_END;
|
||||||
|
Object::maxvalues[TYPEID_GAMEOBJECT]=GAMEOBJECT_END;
|
||||||
|
Object::maxvalues[TYPEID_DYNAMICOBJECT]=DYNAMICOBJECT_END;
|
||||||
|
Object::maxvalues[TYPEID_CORPSE]=CORPSE_END;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
in->GetScripts()->RunScriptIfExists("_onworldsessioncreate");
|
in->GetScripts()->RunScriptIfExists("_onworldsessioncreate");
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user