Some fixes for GameObject, Chat, Creature, update DuelHandler for 322a
--HG-- branch : trunk
This commit is contained in:
+69
-14
@@ -165,11 +165,12 @@ ChatCommand * ChatHandler::getCommandTable()
|
|||||||
{ "getitemstate", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugGetItemStateCommand, "", NULL },
|
{ "getitemstate", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugGetItemStateCommand, "", NULL },
|
||||||
{ "lootrecipient", SEC_GAMEMASTER, false, &ChatHandler::HandleDebugGetLootRecipientCommand, "", NULL },
|
{ "lootrecipient", SEC_GAMEMASTER, false, &ChatHandler::HandleDebugGetLootRecipientCommand, "", NULL },
|
||||||
{ "getvalue", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugGetValueCommand, "", NULL },
|
{ "getvalue", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugGetValueCommand, "", NULL },
|
||||||
|
{ "getitemvalue", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugGetItemValueCommand, "", NULL },
|
||||||
{ "Mod32Value", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugMod32ValueCommand, "", NULL },
|
{ "Mod32Value", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugMod32ValueCommand, "", NULL },
|
||||||
{ "play", SEC_MODERATOR, false, NULL, "", debugPlayCommandTable },
|
{ "play", SEC_MODERATOR, false, NULL, "", debugPlayCommandTable },
|
||||||
{ "send", SEC_ADMINISTRATOR, false, NULL, "", debugSendCommandTable },
|
{ "send", SEC_ADMINISTRATOR, false, NULL, "", debugSendCommandTable },
|
||||||
{ "setaurastate", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSetAuraStateCommand, "", NULL },
|
{ "setaurastate", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSetAuraStateCommand, "", NULL },
|
||||||
{ "setitemflag", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSetItemFlagCommand, "", NULL },
|
{ "setitemvalue", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSetItemValueCommand, "", NULL },
|
||||||
{ "setvalue", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSetValueCommand, "", NULL },
|
{ "setvalue", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSetValueCommand, "", NULL },
|
||||||
{ "spawnvehicle", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSpawnVehicle, "", NULL },
|
{ "spawnvehicle", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSpawnVehicle, "", NULL },
|
||||||
{ "setvid", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSetVehicleId, "", NULL },
|
{ "setvid", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSetVehicleId, "", NULL },
|
||||||
@@ -1164,6 +1165,8 @@ valid examples:
|
|||||||
Quest const* linkedQuest;
|
Quest const* linkedQuest;
|
||||||
SpellEntry const *linkedSpell;
|
SpellEntry const *linkedSpell;
|
||||||
AchievementEntry const* linkedAchievement;
|
AchievementEntry const* linkedAchievement;
|
||||||
|
ItemRandomPropertiesEntry const* itemProperty;
|
||||||
|
ItemRandomSuffixEntry const* itemSuffix;
|
||||||
|
|
||||||
while(!reader.eof())
|
while(!reader.eof())
|
||||||
{
|
{
|
||||||
@@ -1173,6 +1176,8 @@ valid examples:
|
|||||||
linkedQuest = NULL;
|
linkedQuest = NULL;
|
||||||
linkedSpell = NULL;
|
linkedSpell = NULL;
|
||||||
linkedAchievement = NULL;
|
linkedAchievement = NULL;
|
||||||
|
itemProperty = NULL;
|
||||||
|
itemSuffix = NULL;
|
||||||
|
|
||||||
reader.ignore(255, '|');
|
reader.ignore(255, '|');
|
||||||
}
|
}
|
||||||
@@ -1289,9 +1294,47 @@ valid examples:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
char c = reader.peek();
|
// the itementry is followed by several integers which describe an instance of this item
|
||||||
|
|
||||||
// ignore enchants etc.
|
// position relative after itemEntry
|
||||||
|
const uint8 randomPropertyPosition = 6;
|
||||||
|
|
||||||
|
int32 propertyId = 0;
|
||||||
|
bool negativeNumber = false;
|
||||||
|
char c;
|
||||||
|
for(uint8 i=0; i<randomPropertyPosition; ++i)
|
||||||
|
{
|
||||||
|
propertyId = 0;
|
||||||
|
negativeNumber = false;
|
||||||
|
while((c = reader.get())!=':')
|
||||||
|
{
|
||||||
|
if(c >='0' && c<='9')
|
||||||
|
{
|
||||||
|
propertyId*=10;
|
||||||
|
propertyId += c-'0';
|
||||||
|
} else if(c == '-')
|
||||||
|
negativeNumber = true;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (negativeNumber)
|
||||||
|
propertyId *= -1;
|
||||||
|
|
||||||
|
if (propertyId > 0)
|
||||||
|
{
|
||||||
|
itemProperty = sItemRandomPropertiesStore.LookupEntry(propertyId);
|
||||||
|
if (!itemProperty)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if(propertyId < 0)
|
||||||
|
{
|
||||||
|
itemSuffix = sItemRandomSuffixStore.LookupEntry(-propertyId);
|
||||||
|
if (!itemSuffix)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ignore other integers
|
||||||
while((c >='0' && c <='9') || c==':')
|
while((c >='0' && c <='9') || c==':')
|
||||||
{
|
{
|
||||||
reader.ignore(1);
|
reader.ignore(1);
|
||||||
@@ -1560,22 +1603,34 @@ valid examples:
|
|||||||
}
|
}
|
||||||
else if (linkedItem)
|
else if (linkedItem)
|
||||||
{
|
{
|
||||||
if (strcmp(linkedItem->Name1, buffer) != 0)
|
char* const* suffix = itemSuffix?itemSuffix->nameSuffix:(itemProperty?itemProperty->nameSuffix:NULL);
|
||||||
|
|
||||||
|
std::string expectedName = std::string(linkedItem->Name1);
|
||||||
|
if (suffix)
|
||||||
|
{
|
||||||
|
expectedName += " ";
|
||||||
|
expectedName += suffix[LOCALE_enUS];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (expectedName != buffer)
|
||||||
{
|
{
|
||||||
ItemLocale const *il = objmgr.GetItemLocale(linkedItem->ItemId);
|
ItemLocale const *il = objmgr.GetItemLocale(linkedItem->ItemId);
|
||||||
|
|
||||||
if (!il)
|
|
||||||
{
|
|
||||||
#ifdef MANGOS_DEBUG
|
|
||||||
sLog.outBasic("ChatHandler::isValidChatMessage linked item name doesn't is wrong and there is no localization");
|
|
||||||
#endif
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool foundName = false;
|
bool foundName = false;
|
||||||
for (uint8 i=0; i<il->Name.size(); ++i)
|
for(uint8 i=LOCALE_koKR; i<MAX_LOCALE; ++i)
|
||||||
{
|
{
|
||||||
if (il->Name[i] == buffer)
|
int8 dbIndex = objmgr.GetIndexForLocale(LocaleConstant(i));
|
||||||
|
if (dbIndex == -1 || il == NULL || dbIndex >= il->Name.size())
|
||||||
|
// using strange database/client combinations can lead to this case
|
||||||
|
expectedName = linkedItem->Name1;
|
||||||
|
else
|
||||||
|
expectedName = il->Name[dbIndex];
|
||||||
|
if (suffix)
|
||||||
|
{
|
||||||
|
expectedName += " ";
|
||||||
|
expectedName += suffix[i];
|
||||||
|
}
|
||||||
|
if ( expectedName == buffer)
|
||||||
{
|
{
|
||||||
foundName = true;
|
foundName = true;
|
||||||
break;
|
break;
|
||||||
|
|||||||
+2
-1
@@ -144,9 +144,10 @@ class TRINITY_DLL_SPEC ChatHandler
|
|||||||
bool HandleDebugGetItemStateCommand(const char * args);
|
bool HandleDebugGetItemStateCommand(const char * args);
|
||||||
bool HandleDebugGetLootRecipientCommand(const char * args);
|
bool HandleDebugGetLootRecipientCommand(const char * args);
|
||||||
bool HandleDebugGetValueCommand(const char* args);
|
bool HandleDebugGetValueCommand(const char* args);
|
||||||
|
bool HandleDebugGetItemValueCommand(const char* args);
|
||||||
bool HandleDebugMod32ValueCommand(const char* args);
|
bool HandleDebugMod32ValueCommand(const char* args);
|
||||||
bool HandleDebugSetAuraStateCommand(const char * args);
|
bool HandleDebugSetAuraStateCommand(const char * args);
|
||||||
bool HandleDebugSetItemFlagCommand(const char * args);
|
bool HandleDebugSetItemValueCommand(const char * args);
|
||||||
bool HandleDebugItemExpireCommand(const char * args);
|
bool HandleDebugItemExpireCommand(const char * args);
|
||||||
bool HandleDebugSetVehicleId(const char * args);
|
bool HandleDebugSetVehicleId(const char * args);
|
||||||
bool HandleDebugEnterVehicle(const char * args);
|
bool HandleDebugEnterVehicle(const char * args);
|
||||||
|
|||||||
+12
-8
@@ -261,22 +261,27 @@ bool Creature::InitEntry(uint32 Entry, uint32 team, const CreatureData *data )
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// get heroic mode entry
|
// get difficulty 1 mode entry
|
||||||
uint32 actualEntry = Entry;
|
uint32 actualEntry = Entry;
|
||||||
CreatureInfo const *cinfo = normalInfo;
|
CreatureInfo const *cinfo = normalInfo;
|
||||||
if(normalInfo->HeroicEntry)
|
// TODO correctly implement spawnmodes for non-bg maps
|
||||||
|
for (uint32 diff = 0; diff < MAX_DIFFICULTY - 1; ++diff)
|
||||||
|
{
|
||||||
|
if (normalInfo->DifficultyEntry[diff])
|
||||||
{
|
{
|
||||||
// we already have valid Map pointer for current creature!
|
// we already have valid Map pointer for current creature!
|
||||||
if(GetMap()->IsHeroic())
|
if (GetMap()->GetSpawnMode() > diff)
|
||||||
{
|
{
|
||||||
cinfo = objmgr.GetCreatureTemplate(normalInfo->HeroicEntry);
|
cinfo = objmgr.GetCreatureTemplate(normalInfo->DifficultyEntry[diff]);
|
||||||
if (!cinfo)
|
if (!cinfo)
|
||||||
{
|
{
|
||||||
sLog.outErrorDb("Creature::UpdateEntry creature heroic entry %u does not exist.", actualEntry);
|
// maybe check such things already at startup
|
||||||
|
sLog.outErrorDb("Creature::UpdateEntry creature difficulty %u entry %u does not exist.", diff + 1, actualEntry);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
SetEntry(Entry); // normal entry always
|
SetEntry(Entry); // normal entry always
|
||||||
m_creatureInfo = cinfo; // map mode related always
|
m_creatureInfo = cinfo; // map mode related always
|
||||||
@@ -1565,7 +1570,7 @@ bool Creature::LoadFromDB(uint32 guid, Map *map)
|
|||||||
m_deathState = DEAD;
|
m_deathState = DEAD;
|
||||||
if(canFly())
|
if(canFly())
|
||||||
{
|
{
|
||||||
float tz = GetMap()->GetHeight(data->posX,data->posY,data->posZ,false);
|
float tz = map->GetHeight(data->posX,data->posY,data->posZ,false);
|
||||||
if(data->posZ - tz > 0.1)
|
if(data->posZ - tz > 0.1)
|
||||||
Relocate(data->posX,data->posY,tz);
|
Relocate(data->posX,data->posY,tz);
|
||||||
}
|
}
|
||||||
@@ -2265,7 +2270,7 @@ CreatureDataAddon const* Creature::GetCreatureAddon() const
|
|||||||
return addon;
|
return addon;
|
||||||
}
|
}
|
||||||
|
|
||||||
// dependent from heroic mode entry
|
// dependent from difficulty mode entry
|
||||||
return ObjectMgr::GetCreatureTemplateAddon(GetCreatureInfo()->Entry);
|
return ObjectMgr::GetCreatureTemplateAddon(GetCreatureInfo()->Entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2671,4 +2676,3 @@ time_t Creature::GetLinkedCreatureRespawnTime() const
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-3
@@ -167,7 +167,7 @@ enum CreatureFlagsExtra
|
|||||||
struct CreatureInfo
|
struct CreatureInfo
|
||||||
{
|
{
|
||||||
uint32 Entry;
|
uint32 Entry;
|
||||||
uint32 HeroicEntry;
|
uint32 DifficultyEntry[MAX_DIFFICULTY - 1];
|
||||||
uint32 KillCredit[MAX_KILL_CREDIT];
|
uint32 KillCredit[MAX_KILL_CREDIT];
|
||||||
uint32 Modelid1;
|
uint32 Modelid1;
|
||||||
uint32 Modelid2;
|
uint32 Modelid2;
|
||||||
@@ -783,7 +783,7 @@ class TRINITY_DLL_SPEC Creature : public Unit
|
|||||||
|
|
||||||
bool DisableReputationGain;
|
bool DisableReputationGain;
|
||||||
|
|
||||||
CreatureInfo const* m_creatureInfo; // in heroic mode can different from ObjMgr::GetCreatureTemplate(GetEntry())
|
CreatureInfo const* m_creatureInfo; // in difficulty mode > 0 can different from ObjMgr::GetCreatureTemplate(GetEntry())
|
||||||
CreatureData const* m_creatureData;
|
CreatureData const* m_creatureData;
|
||||||
|
|
||||||
uint16 m_LootMode; // bitmask, default DEFAULT_LOOT_MODE, determines what loot will be lootable
|
uint16 m_LootMode; // bitmask, default DEFAULT_LOOT_MODE, determines what loot will be lootable
|
||||||
@@ -814,4 +814,3 @@ class AssistDelayEvent : public BasicEvent
|
|||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -71,10 +71,9 @@ CreatureEventAI::CreatureEventAI(Creature *c ) : CreatureAI(c)
|
|||||||
if ((*i).event_flags & EFLAG_DEBUG_ONLY)
|
if ((*i).event_flags & EFLAG_DEBUG_ONLY)
|
||||||
continue;
|
continue;
|
||||||
#endif
|
#endif
|
||||||
if(((*i).event_flags & (EFLAG_HEROIC | EFLAG_NORMAL)) && m_creature->GetMap()->IsDungeon() )
|
if(m_creature->GetMap()->IsDungeon())
|
||||||
{
|
{
|
||||||
if( (m_creature->GetMap()->IsHeroic() && (*i).event_flags & EFLAG_HEROIC) ||
|
if ((1 << (m_creature->GetMap()->GetSpawnMode()+1)) & (*i).event_flags)
|
||||||
(!m_creature->GetMap()->IsHeroic() && (*i).event_flags & EFLAG_NORMAL))
|
|
||||||
{
|
{
|
||||||
//event flagged for instance mode
|
//event flagged for instance mode
|
||||||
CreatureEventAIList.push_back(CreatureEventAIHolder(*i));
|
CreatureEventAIList.push_back(CreatureEventAIHolder(*i));
|
||||||
|
|||||||
@@ -160,13 +160,15 @@ enum CastFlags
|
|||||||
enum EventFlags
|
enum EventFlags
|
||||||
{
|
{
|
||||||
EFLAG_REPEATABLE = 0x01, //Event repeats
|
EFLAG_REPEATABLE = 0x01, //Event repeats
|
||||||
EFLAG_NORMAL = 0x02, //Event only occurs in Normal instance difficulty
|
EFLAG_DIFFICULTY_0 = 0x02, //Event only occurs in instance difficulty 0
|
||||||
EFLAG_HEROIC = 0x04, //Event only occurs in Heroic instance difficulty
|
EFLAG_DIFFICULTY_1 = 0x04, //Event only occurs in instance difficulty 1
|
||||||
EFLAG_RESERVED_3 = 0x08,
|
EFLAG_DIFFICULTY_2 = 0x08, //Event only occurs in instance difficulty 2
|
||||||
EFLAG_RESERVED_4 = 0x10,
|
EFLAG_DIFFICULTY_3 = 0x10, //Event only occurs in instance difficulty 3
|
||||||
EFLAG_RESERVED_5 = 0x20,
|
EFLAG_RESERVED_5 = 0x20,
|
||||||
EFLAG_RESERVED_6 = 0x40,
|
EFLAG_RESERVED_6 = 0x40,
|
||||||
EFLAG_DEBUG_ONLY = 0x80, //Event only occurs in debug build
|
EFLAG_DEBUG_ONLY = 0x80, //Event only occurs in debug build
|
||||||
|
|
||||||
|
EFLAG_DIFFICULTY_ALL = (EFLAG_DIFFICULTY_0|EFLAG_DIFFICULTY_1|EFLAG_DIFFICULTY_2|EFLAG_DIFFICULTY_3)
|
||||||
};
|
};
|
||||||
|
|
||||||
enum SpawnedEventMode
|
enum SpawnedEventMode
|
||||||
|
|||||||
@@ -640,14 +640,14 @@ void CreatureEventAIMgr::LoadCreatureEventAI_Scripts()
|
|||||||
sLog.outErrorDb("CreatureEventAI: Event %u Action %u uses incorrect Target type", i, j+1);
|
sLog.outErrorDb("CreatureEventAI: Event %u Action %u uses incorrect Target type", i, j+1);
|
||||||
break;
|
break;
|
||||||
case ACTION_T_SET_INST_DATA:
|
case ACTION_T_SET_INST_DATA:
|
||||||
if (!(temp.event_flags & EFLAG_NORMAL) && !(temp.event_flags & EFLAG_HEROIC))
|
if (!(temp.event_flags & EFLAG_DIFFICULTY_ALL))
|
||||||
sLog.outErrorDb("CreatureEventAI: Event %u Action %u. Cannot set instance data without event flags (normal/heroic).", i, j+1);
|
sLog.outErrorDb("CreatureEventAI: Event %u Action %u. Cannot set instance data without difficulty event flags.", i, j+1);
|
||||||
if (action.set_inst_data.value > 4/*SPECIAL*/)
|
if (action.set_inst_data.value > 4/*SPECIAL*/)
|
||||||
sLog.outErrorDb("CreatureEventAI: Event %u Action %u attempts to set instance data above encounter state 4. Custom case?", i, j+1);
|
sLog.outErrorDb("CreatureEventAI: Event %u Action %u attempts to set instance data above encounter state 4. Custom case?", i, j+1);
|
||||||
break;
|
break;
|
||||||
case ACTION_T_SET_INST_DATA64:
|
case ACTION_T_SET_INST_DATA64:
|
||||||
if (!(temp.event_flags & EFLAG_NORMAL) && !(temp.event_flags & EFLAG_HEROIC))
|
if (!(temp.event_flags & EFLAG_DIFFICULTY_ALL))
|
||||||
sLog.outErrorDb("CreatureEventAI: Event %u Action %u. Cannot set instance data without event flags (normal/heroic).", i, j+1);
|
sLog.outErrorDb("CreatureEventAI: Event %u Action %u. Cannot set instance data without difficulty event flags.", i, j+1);
|
||||||
if (action.set_inst_data64.target >= TARGET_T_END)
|
if (action.set_inst_data64.target >= TARGET_T_END)
|
||||||
sLog.outErrorDb("CreatureEventAI: Event %u Action %u uses incorrect Target type", i, j+1);
|
sLog.outErrorDb("CreatureEventAI: Event %u Action %u uses incorrect Target type", i, j+1);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -51,10 +51,8 @@ void WorldSession::HandleDuelAcceptedOpcode(WorldPacket& recvPacket)
|
|||||||
pl->duel->startTimer = now;
|
pl->duel->startTimer = now;
|
||||||
plTarget->duel->startTimer = now;
|
plTarget->duel->startTimer = now;
|
||||||
|
|
||||||
WorldPacket data(SMSG_DUEL_COUNTDOWN, 4);
|
pl->SendDuelCountdown(3000);
|
||||||
data << (uint32)3000; // 3 seconds
|
plTarget->SendDuelCountdown(3000);
|
||||||
pl->GetSession()->SendPacket(&data);
|
|
||||||
plTarget->GetSession()->SendPacket(&data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldSession::HandleDuelCancelledOpcode(WorldPacket& recvPacket)
|
void WorldSession::HandleDuelCancelledOpcode(WorldPacket& recvPacket)
|
||||||
@@ -84,4 +82,3 @@ void WorldSession::HandleDuelCancelledOpcode(WorldPacket& recvPacket)
|
|||||||
|
|
||||||
GetPlayer()->DuelComplete(DUEL_INTERUPTED);
|
GetPlayer()->DuelComplete(DUEL_INTERUPTED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ DynamicObject::DynamicObject() : WorldObject()
|
|||||||
m_objectType |= TYPEMASK_DYNAMICOBJECT;
|
m_objectType |= TYPEMASK_DYNAMICOBJECT;
|
||||||
m_objectTypeId = TYPEID_DYNAMICOBJECT;
|
m_objectTypeId = TYPEID_DYNAMICOBJECT;
|
||||||
|
|
||||||
m_updateFlag = (UPDATEFLAG_HIGHGUID | UPDATEFLAG_HAS_POSITION);
|
m_updateFlag = (UPDATEFLAG_HIGHGUID | UPDATEFLAG_HAS_POSITION | UPDATEFLAG_POSITION);
|
||||||
|
|
||||||
m_valuesCount = DYNAMICOBJECT_END;
|
m_valuesCount = DYNAMICOBJECT_END;
|
||||||
}
|
}
|
||||||
@@ -88,9 +88,6 @@ bool DynamicObject::Create(uint32 guidlow, Unit *caster, uint32 spellId, uint32
|
|||||||
SetUInt32Value( DYNAMICOBJECT_BYTES, 0x00000001 );
|
SetUInt32Value( DYNAMICOBJECT_BYTES, 0x00000001 );
|
||||||
SetUInt32Value( DYNAMICOBJECT_SPELLID, spellId );
|
SetUInt32Value( DYNAMICOBJECT_SPELLID, spellId );
|
||||||
SetFloatValue( DYNAMICOBJECT_RADIUS, radius);
|
SetFloatValue( DYNAMICOBJECT_RADIUS, radius);
|
||||||
SetFloatValue( DYNAMICOBJECT_POS_X, pos.m_positionX );
|
|
||||||
SetFloatValue( DYNAMICOBJECT_POS_Y, pos.m_positionY );
|
|
||||||
SetFloatValue( DYNAMICOBJECT_POS_Z, pos.m_positionZ );
|
|
||||||
SetUInt32Value( DYNAMICOBJECT_CASTTIME, getMSTime() ); // new 2.4.0
|
SetUInt32Value( DYNAMICOBJECT_CASTTIME, getMSTime() ); // new 2.4.0
|
||||||
|
|
||||||
m_aliveDuration = duration;
|
m_aliveDuration = duration;
|
||||||
@@ -184,4 +181,3 @@ bool DynamicObject::isVisibleForInState(Player const* u, bool inVisibleList) con
|
|||||||
return IsInWorld() && u->IsInWorld()
|
return IsInWorld() && u->IsInWorld()
|
||||||
&& (IsWithinDistInMap(u->m_seer,World::GetMaxVisibleDistanceForObject()+(inVisibleList ? World::GetVisibleObjectGreyDistance() : 0.0f), false));
|
&& (IsWithinDistInMap(u->m_seer,World::GetMaxVisibleDistanceForObject()+(inVisibleList ? World::GetVisibleObjectGreyDistance() : 0.0f), false));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -64,11 +64,9 @@ class DynamicObject : public WorldObject
|
|||||||
uint32 m_effMask;
|
uint32 m_effMask;
|
||||||
int32 m_aliveDuration;
|
int32 m_aliveDuration;
|
||||||
uint32 m_updateTimer;
|
uint32 m_updateTimer;
|
||||||
time_t m_nextThinkTime;
|
|
||||||
float m_radius;
|
float m_radius;
|
||||||
AffectedSet m_affected;
|
AffectedSet m_affected;
|
||||||
private:
|
private:
|
||||||
GridReference<DynamicObject> m_gridRef;
|
GridReference<DynamicObject> m_gridRef;
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -754,4 +754,3 @@ class TRINITY_DLL_SPEC GameObject : public WorldObject
|
|||||||
GridReference<GameObject> m_gridRef;
|
GridReference<GameObject> m_gridRef;
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user