diff options
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp | 13 | ||||
| -rw-r--r-- | src/server/game/Maps/Map.cpp | 8 | ||||
| -rw-r--r-- | src/server/game/Maps/Map.h | 18 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_gobject.cpp | 2 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_list.cpp | 2 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_misc.cpp | 4 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_npc.cpp | 6 | ||||
| -rw-r--r-- | src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp | 8 | 
8 files changed, 34 insertions, 27 deletions
diff --git a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp index badf41abde8..504226a2c2a 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp @@ -219,7 +219,7 @@ void EscortAI::UpdateAI(uint32 diff)      }      // Check if player or any member of his group is within range -    if (_despawnAtFar && HasEscortState(STATE_ESCORT_ESCORTING) && _playerGUID && !me->GetVictim() && !HasEscortState(STATE_ESCORT_RETURNING)) +    if (_despawnAtFar && HasEscortState(STATE_ESCORT_ESCORTING) && _playerGUID && !me->IsEngaged() && !HasEscortState(STATE_ESCORT_RETURNING))      {          if (_playerCheckTimer <= diff)          { @@ -231,10 +231,13 @@ void EscortAI::UpdateAI(uint32 diff)                  if (CreatureData const* creatureData = me->GetCreatureData())                      isEscort = (sWorld->getBoolConfig(CONFIG_RESPAWN_DYNAMIC_ESCORTNPC) && (creatureData->spawnGroupData->flags & SPAWNGROUP_FLAG_ESCORTQUESTNPC)); -                if (_instantRespawn && !isEscort) -                    me->DespawnOrUnsummon(0, Seconds(1)); -                else if (_instantRespawn && isEscort) -                    me->GetMap()->RemoveRespawnTime(SPAWN_TYPE_CREATURE, me->GetSpawnId(), true); +                if (_instantRespawn) +                { +                    if (!isEscort) +                      me->DespawnOrUnsummon(0, 1s); +                    else +                      me->GetMap()->RemoveRespawnTime(SPAWN_TYPE_CREATURE, me->GetSpawnId(), true); +                }                  else                      me->DespawnOrUnsummon(); diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index f8d122f99f5..9e55fbddb7c 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -3050,7 +3050,7 @@ void Map::Respawn(RespawnInfo* info, bool force, SQLTransaction dbTrans)      DoRespawn(type, spawnId, gridId);  } -void Map::Respawn(RespawnVector& respawnData, bool force, SQLTransaction dbTrans) +void Map::Respawn(std::vector<RespawnInfo*>& respawnData, bool force, SQLTransaction dbTrans)  {      SQLTransaction trans = dbTrans ? dbTrans : CharacterDatabase.BeginTransaction();      for (RespawnInfo* info : respawnData) @@ -3086,13 +3086,13 @@ void Map::AddRespawnInfo(RespawnInfo& info, bool replace)      ASSERT(success, "Insertion of respawn info with id (%u,%u) into spawn id map failed - state desync.", uint32(ri->type), ri->spawnId);  } -static void PushRespawnInfoFrom(RespawnVector& data, RespawnInfoMap const& map, uint32 zoneId) +static void PushRespawnInfoFrom(std::vector<RespawnInfo*>& data, RespawnInfoMap const& map, uint32 zoneId)  {      for (auto const& pair : map)          if (!zoneId || pair.second->zoneId == zoneId)              data.push_back(pair.second);  } -void Map::GetRespawnInfo(RespawnVector& respawnData, SpawnObjectTypeMask types, uint32 zoneId) const +void Map::GetRespawnInfo(std::vector<RespawnInfo*>& respawnData, SpawnObjectTypeMask types, uint32 zoneId) const  {      if (types & SPAWN_TYPEMASK_CREATURE)          PushRespawnInfoFrom(respawnData, _creatureRespawnTimesBySpawnId, zoneId); @@ -3160,7 +3160,7 @@ void Map::RemoveRespawnTime(RespawnInfo* info, bool doRespawn, SQLTransaction db          DeleteRespawnInfo(info);  } -void Map::RemoveRespawnTime(RespawnVector& respawnData, bool doRespawn, SQLTransaction dbTrans) +void Map::RemoveRespawnTime(std::vector<RespawnInfo*>& respawnData, bool doRespawn, SQLTransaction dbTrans)  {      SQLTransaction trans = dbTrans ? dbTrans : CharacterDatabase.BeginTransaction();      for (RespawnInfo* info : respawnData) diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index b4b78399457..c800a069d55 100644 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -283,7 +283,6 @@ typedef std::unordered_map<uint32 /*zoneId*/, ZoneDynamicInfo> ZoneDynamicInfoMa  typedef boost::heap::fibonacci_heap<RespawnInfo*, boost::heap::compare<CompareRespawnInfo>> RespawnListContainer;  typedef RespawnListContainer::handle_type RespawnListHandle;  typedef std::unordered_map<uint32, RespawnInfo*> RespawnInfoMap; -typedef std::vector<RespawnInfo*> RespawnVector;  struct RespawnInfo  {      SpawnObjectType type; @@ -751,11 +750,11 @@ class TC_GAME_API Map : public GridRefManager<NGridType>          bool CheckRespawn(RespawnInfo* info);          void DoRespawn(SpawnObjectType type, ObjectGuid::LowType spawnId, uint32 gridId);          void Respawn(RespawnInfo* info, bool force = false, SQLTransaction dbTrans = nullptr); -        void Respawn(RespawnVector& respawnData, bool force = false, SQLTransaction dbTrans = nullptr); +        void Respawn(std::vector<RespawnInfo*>& respawnData, bool force = false, SQLTransaction dbTrans = nullptr);          void AddRespawnInfo(RespawnInfo& info, bool replace = false);          void DeleteRespawnInfo();          void DeleteRespawnInfo(RespawnInfo* info); -        void DeleteRespawnInfo(RespawnVector& toDelete) +        void DeleteRespawnInfo(std::vector<RespawnInfo*>& toDelete)          {              for (RespawnInfo* info : toDelete)                  DeleteRespawnInfo(info); @@ -763,7 +762,7 @@ class TC_GAME_API Map : public GridRefManager<NGridType>          }          void DeleteRespawnInfo(SpawnObjectTypeMask types, uint32 zoneId = 0)          { -            RespawnVector v; +            std::vector<RespawnInfo*> v;              GetRespawnInfo(v, types, zoneId);              if (!v.empty())                  DeleteRespawnInfo(v); @@ -775,13 +774,18 @@ class TC_GAME_API Map : public GridRefManager<NGridType>          }      public: -        void GetRespawnInfo(RespawnVector& respawnData, SpawnObjectTypeMask types, uint32 zoneId = 0) const; +        void GetRespawnInfo(std::vector<RespawnInfo*>& respawnData, SpawnObjectTypeMask types, uint32 zoneId = 0) const;          RespawnInfo* GetRespawnInfo(SpawnObjectType type, ObjectGuid::LowType spawnId) const; +        void ForceRespawn(SpawnObjectType type, ObjectGuid::LowType spawnId) +        { +            if (RespawnInfo* info = GetRespawnInfo(type, spawnId)) +                Respawn(info, true); +        }          void RemoveRespawnTime(RespawnInfo* info, bool doRespawn = false, SQLTransaction dbTrans = nullptr); -        void RemoveRespawnTime(RespawnVector& respawnData, bool doRespawn = false, SQLTransaction dbTrans = nullptr); +        void RemoveRespawnTime(std::vector<RespawnInfo*>& respawnData, bool doRespawn = false, SQLTransaction dbTrans = nullptr);          void RemoveRespawnTime(SpawnObjectTypeMask types = SPAWN_TYPEMASK_ALL, uint32 zoneId = 0, bool doRespawn = false, SQLTransaction dbTrans = nullptr)          { -            RespawnVector v; +            std::vector<RespawnInfo*> v;              GetRespawnInfo(v, types, zoneId);              if (!v.empty())                  RemoveRespawnTime(v, doRespawn, dbTrans); diff --git a/src/server/scripts/Commands/cs_gobject.cpp b/src/server/scripts/Commands/cs_gobject.cpp index 6d1426fdb57..e8612062646 100644 --- a/src/server/scripts/Commands/cs_gobject.cpp +++ b/src/server/scripts/Commands/cs_gobject.cpp @@ -354,7 +354,7 @@ public:          Player const* const player = handler->GetSession()->GetPlayer();          // force respawn to make sure we find something -        player->GetMap()->RemoveRespawnTime(SPAWN_TYPE_GAMEOBJECT, guidLow, true); +        player->GetMap()->ForceRespawn(SPAWN_TYPE_GAMEOBJECT, guidLow);          GameObject* object = handler->GetObjectFromPlayerMapByDbGuid(guidLow);          if (!object)          { diff --git a/src/server/scripts/Commands/cs_list.cpp b/src/server/scripts/Commands/cs_list.cpp index 148f217dd71..5372b65aaf6 100644 --- a/src/server/scripts/Commands/cs_list.cpp +++ b/src/server/scripts/Commands/cs_list.cpp @@ -691,7 +691,7 @@ public:          if (*args)              range = atoi((char*)args); -        RespawnVector respawns; +        std::vector<RespawnInfo*> respawns;          LocaleConstant locale = handler->GetSession()->GetSessionDbcLocale();          char const* stringOverdue = sObjectMgr->GetTrinityString(LANG_LIST_RESPAWNS_OVERDUE, locale);          char const* stringCreature = sObjectMgr->GetTrinityString(LANG_LIST_RESPAWNS_CREATURES, locale); diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 3829ca3afa2..f61400c6b4b 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -1916,14 +1916,14 @@ public:          Cell::VisitGridObjects(player, worker, player->GetGridActivationRange());          // Now handle any that had despawned, but had respawn time logged. -        RespawnVector data; +        std::vector<RespawnInfo*> data;          player->GetMap()->GetRespawnInfo(data, SPAWN_TYPEMASK_ALL, 0);          if (!data.empty())          {              uint32 const gridId = Trinity::ComputeGridCoord(player->GetPositionX(), player->GetPositionY()).GetId();              for (RespawnInfo* info : data)                  if (info->gridId == gridId) -                    player->GetMap()->RemoveRespawnTime(info, true); +                    player->GetMap()->ForceRespawn(info->type, info->spawnId);          }          return true; diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp index 2dd5b6321b4..088be4c6e1c 100644 --- a/src/server/scripts/Commands/cs_npc.cpp +++ b/src/server/scripts/Commands/cs_npc.cpp @@ -564,7 +564,7 @@ public:              if (!lowguid)                  return false;              // force respawn to make sure we find something -            handler->GetSession()->GetPlayer()->GetMap()->RemoveRespawnTime(SPAWN_TYPE_CREATURE, lowguid, true); +            handler->GetSession()->GetPlayer()->GetMap()->ForceRespawn(SPAWN_TYPE_CREATURE, lowguid);              // then try to find it              creature = handler->GetCreatureFromPlayerMapByDbGuid(lowguid);          } @@ -774,7 +774,7 @@ public:          uint32 mechanicImmuneMask = cInfo->MechanicImmuneMask;          uint32 displayid = target->GetDisplayId();          uint32 nativeid = target->GetNativeDisplayId(); -        uint32 Entry = target->GetEntry(); +        uint32 entry = target->GetEntry();          int64 curRespawnDelay = target->GetRespawnCompatibilityMode() ? target->GetRespawnTimeEx() - GameTime::GetGameTime() : target->GetMap()->GetCreatureRespawnTime(target->GetSpawnId()) - GameTime::GetGameTime(); @@ -783,7 +783,7 @@ public:          std::string curRespawnDelayStr = secsToTimeString(uint64(curRespawnDelay), true);          std::string defRespawnDelayStr = secsToTimeString(target->GetRespawnDelay(), true); -        handler->PSendSysMessage(LANG_NPCINFO_CHAR, target->GetSpawnId(), target->GetGUID().GetCounter(), faction, npcflags, Entry, displayid, nativeid); +        handler->PSendSysMessage(LANG_NPCINFO_CHAR, target->GetName().c_str(), target->GetSpawnId(), target->GetGUID().GetCounter(), entry, faction, npcflags, displayid, nativeid);          if (target->GetCreatureData() && target->GetCreatureData()->spawnGroupData->groupId)          {              SpawnGroupTemplateData const* const groupData = target->GetCreatureData()->spawnGroupData; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp index b6acc68a0f8..50ed4cc21b4 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp @@ -479,7 +479,7 @@ class npc_green_dragon_combat_trigger : public CreatureScript                  me->SetReactState(REACT_PASSIVE);              } -            void JustEngagedWith(Unit* target) override +            void JustEnteredCombat(Unit* target) override              {                  if (!instance->CheckRequiredBosses(DATA_VALITHRIA_DREAMWALKER, target->ToPlayer()))                  { @@ -506,9 +506,9 @@ class npc_green_dragon_combat_trigger : public CreatureScript                  return target->GetTypeId() == TYPEID_PLAYER;              } -            void JustReachedHome() override +            void JustExitedCombat() override              { -                _JustReachedHome(); +                me->setActive(false);                  DoAction(ACTION_DEATH);              } @@ -517,7 +517,7 @@ class npc_green_dragon_combat_trigger : public CreatureScript                  if (action == ACTION_DEATH)                  {                      instance->SetBossState(DATA_VALITHRIA_DREAMWALKER, NOT_STARTED); -                    me->m_Events.AddEvent(new ValithriaDespawner(me), me->m_Events.CalculateTime(5000)); +                    me->m_Events.AddEventAtOffset(new ValithriaDespawner(me), 5s);                  }              }  | 
