mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-20 01:15:35 +01:00
[7634] Fixed: select non-despawnable gameobjects base at appropriate for gameobject type dataN fields. Author: VladimirMangos
Many in world gameobject that unexpected daspawned before must now work in more expected way.
In tests i not found any damage to bg gameobject work, and at least this restore expected work for non-bg dorrs//buttons broken
after half-year ago patch (that has been reverted partly in this commit)
--HG--
branch : trunk
This commit is contained in:
@@ -610,37 +610,34 @@ bool GameObject::LoadFromDB(uint32 guid, Map *map)
|
||||
if (!Create(guid,entry, map, phaseMask, x, y, z, ang, rotation0, rotation1, rotation2, rotation3, animprogress, go_state, ArtKit) )
|
||||
return false;
|
||||
|
||||
switch(GetGOInfo()->type)
|
||||
if(!GetDespawnPossibility())
|
||||
{
|
||||
case GAMEOBJECT_TYPE_DOOR:
|
||||
case GAMEOBJECT_TYPE_BUTTON:
|
||||
/* this code (in comment) isn't correct because in battlegrounds we need despawnable doors and buttons, pls remove
|
||||
SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NODESPAWN);
|
||||
SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NODESPAWN);
|
||||
m_spawnedByDefault = true;
|
||||
m_respawnDelayTime = 0;
|
||||
m_respawnTime = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(data->spawntimesecs >= 0)
|
||||
{
|
||||
m_spawnedByDefault = true;
|
||||
m_respawnDelayTime = 0;
|
||||
m_respawnTime = 0;
|
||||
break;*/
|
||||
default:
|
||||
if(data->spawntimesecs >= 0)
|
||||
{
|
||||
m_spawnedByDefault = true;
|
||||
m_respawnDelayTime = data->spawntimesecs;
|
||||
m_respawnTime = objmgr.GetGORespawnTime(m_DBTableGuid, map->GetInstanceId());
|
||||
m_respawnDelayTime = data->spawntimesecs;
|
||||
m_respawnTime = objmgr.GetGORespawnTime(m_DBTableGuid, map->GetInstanceId());
|
||||
|
||||
// ready to respawn
|
||||
if(m_respawnTime && m_respawnTime <= time(NULL))
|
||||
{
|
||||
m_respawnTime = 0;
|
||||
objmgr.SaveGORespawnTime(m_DBTableGuid,GetInstanceId(),0);
|
||||
}
|
||||
}
|
||||
else
|
||||
// ready to respawn
|
||||
if(m_respawnTime && m_respawnTime <= time(NULL))
|
||||
{
|
||||
m_spawnedByDefault = false;
|
||||
m_respawnDelayTime = -data->spawntimesecs;
|
||||
m_respawnTime = 0;
|
||||
objmgr.SaveGORespawnTime(m_DBTableGuid,GetInstanceId(),0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_spawnedByDefault = false;
|
||||
m_respawnDelayTime = -data->spawntimesecs;
|
||||
m_respawnTime = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@@ -482,6 +482,20 @@ class TRINITY_DLL_SPEC GameObject : public WorldObject
|
||||
}
|
||||
}
|
||||
|
||||
bool GetDespawnPossibility() const
|
||||
{
|
||||
switch(GetGoType())
|
||||
{
|
||||
case GAMEOBJECT_TYPE_DOOR: return GetGOInfo()->door.noDamageImmune;
|
||||
case GAMEOBJECT_TYPE_BUTTON: return GetGOInfo()->button.noDamageImmune;
|
||||
case GAMEOBJECT_TYPE_QUESTGIVER: return GetGOInfo()->questgiver.noDamageImmune;
|
||||
case GAMEOBJECT_TYPE_GOOBER: return GetGOInfo()->goober.noDamageImmune;
|
||||
case GAMEOBJECT_TYPE_FLAGSTAND: return GetGOInfo()->flagstand.noDamageImmune;
|
||||
case GAMEOBJECT_TYPE_FLAGDROP: return GetGOInfo()->flagdrop.noDamageImmune;
|
||||
default: return true;
|
||||
}
|
||||
}
|
||||
|
||||
time_t GetRespawnTime() const { return m_respawnTime; }
|
||||
time_t GetRespawnTimeEx() const
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user