* 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
@ -2,13 +2,13 @@
|
||||
|
||||
Bag::Bag() : Item()
|
||||
{
|
||||
_type |= TYPE_CONTAINER;
|
||||
_typeid = TYPEID_CONTAINER;
|
||||
_valuescount = CONTAINER_END;
|
||||
_slot = 0;
|
||||
}
|
||||
|
||||
void Bag::Create(uint64 guid)
|
||||
{
|
||||
Item::Create(guid);
|
||||
}
|
||||
_type |= TYPE_CONTAINER;
|
||||
_typeid = TYPEID_CONTAINER;
|
||||
_valuescount = Object::maxvalues[_typeid];
|
||||
_slot = 0;
|
||||
}
|
||||
|
||||
void Bag::Create(uint64 guid)
|
||||
{
|
||||
Item::Create(guid);
|
||||
}
|
||||
|
||||
@ -4,10 +4,10 @@ Corpse::Corpse()
|
||||
{
|
||||
_type=TYPE_CORPSE;
|
||||
_typeid=TYPEID_CORPSE;
|
||||
_valuescount=CORPSE_END;
|
||||
_valuescount=Object::maxvalues[_typeid];
|
||||
}
|
||||
|
||||
void Corpse::Create(uint64 guid)
|
||||
{
|
||||
Object::Create(guid);
|
||||
}
|
||||
}
|
||||
|
||||
@ -5,10 +5,10 @@ DynamicObject::DynamicObject() : WorldObject()
|
||||
_uint32values=NULL;
|
||||
_type=TYPE_DYNAMICOBJECT;
|
||||
_typeid=TYPEID_DYNAMICOBJECT;
|
||||
_valuescount=DYNAMICOBJECT_END;
|
||||
_valuescount=Object::maxvalues[_typeid];
|
||||
}
|
||||
|
||||
void DynamicObject::Create(uint64 guid)
|
||||
{
|
||||
Object::Create(guid);
|
||||
}
|
||||
}
|
||||
|
||||
@ -5,7 +5,7 @@ GameObject::GameObject() : WorldObject()
|
||||
_uint32values=NULL;
|
||||
_type|=TYPE_GAMEOBJECT;
|
||||
_typeid=TYPEID_GAMEOBJECT;
|
||||
_valuescount=GAMEOBJECT_END;
|
||||
_valuescount=Object::maxvalues[_typeid];
|
||||
}
|
||||
|
||||
void GameObject::Create(uint64 guid)
|
||||
|
||||
@ -134,7 +134,7 @@ Item::Item()
|
||||
_type |= TYPE_ITEM;
|
||||
_typeid = TYPEID_ITEM;
|
||||
|
||||
_valuescount = ITEM_END;
|
||||
_valuescount = Object::maxvalues[_typeid];
|
||||
_slot = 0;
|
||||
//_bag = NULL; // not yet implemented
|
||||
}
|
||||
|
||||
@ -9,7 +9,7 @@ Object::Object()
|
||||
_uint32values=NULL;
|
||||
_type=TYPE_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()
|
||||
|
||||
@ -32,7 +32,8 @@ enum TYPEID
|
||||
TYPEID_DYNAMICOBJECT = 6,
|
||||
TYPEID_CORPSE = 7,
|
||||
TYPEID_AIGROUP = 8,
|
||||
TYPEID_AREATRIGGER = 9
|
||||
TYPEID_AREATRIGGER = 9,
|
||||
TYPEID_MAX
|
||||
};
|
||||
|
||||
class Object
|
||||
@ -100,6 +101,8 @@ public:
|
||||
inline bool _IsDepleted(void) { return _depleted; }
|
||||
inline void _SetDepleted(void) { _depleted = true; }
|
||||
|
||||
static uint32 maxvalues[];
|
||||
|
||||
protected:
|
||||
Object();
|
||||
void _InitValues(void);
|
||||
@ -114,8 +117,10 @@ protected:
|
||||
uint8 _typeid;
|
||||
std::string _name;
|
||||
bool _depleted : 1; // true if the object was deleted from the objmgr, but not from memory
|
||||
|
||||
};
|
||||
|
||||
|
||||
class WorldObject : public Object
|
||||
{
|
||||
public:
|
||||
@ -145,17 +150,8 @@ protected:
|
||||
|
||||
inline uint32 GetValuesCountByTypeId(uint8 tid)
|
||||
{
|
||||
switch(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;
|
||||
}
|
||||
if(tid < TYPEID_MAX)
|
||||
return Object::maxvalues[tid];
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@ -13,7 +13,7 @@ Player::Player() : Unit()
|
||||
{
|
||||
_type |= TYPE_PLAYER;
|
||||
_typeid = TYPEID_PLAYER;
|
||||
_valuescount = PLAYER_END;
|
||||
_valuescount = Object::maxvalues[_typeid];
|
||||
}
|
||||
|
||||
void Player::Create(uint64 guid)
|
||||
@ -71,4 +71,4 @@ uint16 MyCharacter::GetSpellSlot(uint32 spellid)
|
||||
if(i->id == spellid)
|
||||
return i->slot;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -5,7 +5,7 @@ Unit::Unit() : WorldObject()
|
||||
{
|
||||
_type |= TYPE_UNIT;
|
||||
_typeid = TYPEID_UNIT;
|
||||
_valuescount = UNIT_END;
|
||||
_valuescount = Object::maxvalues[_typeid];
|
||||
}
|
||||
|
||||
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_PAD = OBJECT_END + 0x0039, // Size: 1, Type: INT, Flags: NONE
|
||||
ITEM_END = OBJECT_END + 0x003A,
|
||||
ITEM_END_6005 = OBJECT_END + 0x2A,
|
||||
};
|
||||
|
||||
enum EContainerFields
|
||||
@ -80,6 +81,7 @@ enum EContainerFields
|
||||
CONTAINER_ALIGN_PAD = ITEM_END + 0x0001, // Size: 1, Type: BYTES, Flags: NONE
|
||||
CONTAINER_FIELD_SLOT_1 = ITEM_END + 0x0002, // Size: 72, Type: LONG, Flags: PUBLIC
|
||||
CONTAINER_END = ITEM_END + 0x004A,
|
||||
CONTAINER_END_6005 = ITEM_END + 0x003A,
|
||||
};
|
||||
|
||||
enum EUnitFields
|
||||
@ -175,6 +177,8 @@ enum EUnitFields
|
||||
UNIT_FIELD_PADDING = OBJECT_END + 0x008D, // Size: 1, Type: INT, Flags: NONE
|
||||
UNIT_END = OBJECT_END + 0x008E,
|
||||
|
||||
UNIT_END_6005 = OBJECT_END + 0x00B6,
|
||||
|
||||
PLAYER_DUEL_ARBITER = UNIT_END + 0x0000, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_FLAGS = UNIT_END + 0x0002, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_GUILDID = UNIT_END + 0x0003, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
@ -391,6 +395,7 @@ enum EUnitFields
|
||||
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_END = UNIT_END + 0x049A,
|
||||
PLAYER_END_6005 = UNIT_END + 0x0446,
|
||||
};
|
||||
|
||||
enum EGameObjectFields
|
||||
@ -404,6 +409,7 @@ enum EGameObjectFields
|
||||
GAMEOBJECT_LEVEL = OBJECT_END + 0x000A, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
GAMEOBJECT_BYTES_1 = OBJECT_END + 0x000B, // Size: 1, Type: BYTES, Flags: PUBLIC
|
||||
GAMEOBJECT_END = OBJECT_END + 0x000C,
|
||||
GAMEOBJECT_END_6005 = OBJECT_END + 0x0014,
|
||||
};
|
||||
|
||||
enum EDynamicObjectFields
|
||||
|
||||
@ -22,6 +22,17 @@ struct OpcodeHandler
|
||||
void (WorldSession::*handler)(WorldPacket& recvPacket);
|
||||
};
|
||||
|
||||
uint32 Object::maxvalues[TYPEID_MAX]={ 0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0};
|
||||
|
||||
WorldSession::WorldSession(PseuInstance *in)
|
||||
{
|
||||
logdebug("-> Starting WorldSession 0x%X from instance 0x%X",this,in); // should never output a null ptr
|
||||
@ -36,7 +47,34 @@ WorldSession::WorldSession(PseuInstance *in)
|
||||
objmgr.SetInstance(in);
|
||||
_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");
|
||||
|
||||
DEBUG(logdebug("WorldSession 0x%X constructor finished",this));
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user