aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/master/2021_05_16_09_world_2018_01_07_03_world.sql10
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp13
-rw-r--r--src/server/game/Maps/Map.cpp8
-rw-r--r--src/server/game/Maps/Map.h18
-rw-r--r--src/server/scripts/Commands/cs_gobject.cpp2
-rw-r--r--src/server/scripts/Commands/cs_list.cpp2
-rw-r--r--src/server/scripts/Commands/cs_misc.cpp4
-rw-r--r--src/server/scripts/Commands/cs_npc.cpp8
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp8
9 files changed, 45 insertions, 28 deletions
diff --git a/sql/updates/world/master/2021_05_16_09_world_2018_01_07_03_world.sql b/sql/updates/world/master/2021_05_16_09_world_2018_01_07_03_world.sql
new file mode 100644
index 00000000000..418ba4c7b8a
--- /dev/null
+++ b/sql/updates/world/master/2021_05_16_09_world_2018_01_07_03_world.sql
@@ -0,0 +1,10 @@
+--
+DELETE FROM `linked_respawn` WHERE `guid`=137752 AND `linkedguid`=137752 AND `linkType`=0;
+UPDATE `trinity_string` SET `content_default`='NPC currently selected by player:
+Name: %s
+SpawnID: %s.
+GUID: %s.
+Entry: %u.
+Faction: %u.
+NPC Flags: %s.
+DisplayID: %u (Native: %u).' WHERE `entry`=539;
diff --git a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp
index 831ddeb466a..bcdf801075c 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp
+++ b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp
@@ -216,7 +216,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.IsEmpty() && !me->GetVictim() && !HasEscortState(STATE_ESCORT_RETURNING))
+ if (_despawnAtFar && HasEscortState(STATE_ESCORT_ESCORTING) && !_playerGUID.IsEmpty() && !me->IsEngaged() && !HasEscortState(STATE_ESCORT_RETURNING))
{
if (_playerCheckTimer <= diff)
{
@@ -228,10 +228,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 088cf8625ed..697015cfe3f 100644
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -3206,7 +3206,7 @@ void Map::Respawn(RespawnInfo* info, bool force, CharacterDatabaseTransaction db
DoRespawn(type, spawnId, gridId);
}
-void Map::Respawn(RespawnVector& respawnData, bool force, CharacterDatabaseTransaction dbTrans)
+void Map::Respawn(std::vector<RespawnInfo*>& respawnData, bool force, CharacterDatabaseTransaction dbTrans)
{
CharacterDatabaseTransaction trans = dbTrans ? dbTrans : CharacterDatabase.BeginTransaction();
for (RespawnInfo* info : respawnData)
@@ -3242,13 +3242,13 @@ void Map::AddRespawnInfo(RespawnInfo& info, bool replace)
ASSERT(success, "Insertion of respawn info with id (%u," UI64FMTD ") 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);
@@ -3316,7 +3316,7 @@ void Map::RemoveRespawnTime(RespawnInfo* info, bool doRespawn, CharacterDatabase
DeleteRespawnInfo(info);
}
-void Map::RemoveRespawnTime(RespawnVector& respawnData, bool doRespawn, CharacterDatabaseTransaction dbTrans)
+void Map::RemoveRespawnTime(std::vector<RespawnInfo*>& respawnData, bool doRespawn, CharacterDatabaseTransaction dbTrans)
{
CharacterDatabaseTransaction 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 54ee5f50b38..0c85a237771 100644
--- a/src/server/game/Maps/Map.h
+++ b/src/server/game/Maps/Map.h
@@ -293,7 +293,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<ObjectGuid::LowType, RespawnInfo*> RespawnInfoMap;
-typedef std::vector<RespawnInfo*> RespawnVector;
struct RespawnInfo
{
SpawnObjectType type;
@@ -787,11 +786,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, CharacterDatabaseTransaction dbTrans = nullptr);
- void Respawn(RespawnVector& respawnData, bool force = false, CharacterDatabaseTransaction dbTrans = nullptr);
+ void Respawn(std::vector<RespawnInfo*>& respawnData, bool force = false, CharacterDatabaseTransaction 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);
@@ -799,7 +798,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);
@@ -811,13 +810,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, CharacterDatabaseTransaction dbTrans = nullptr);
- void RemoveRespawnTime(RespawnVector& respawnData, bool doRespawn = false, CharacterDatabaseTransaction dbTrans = nullptr);
+ void RemoveRespawnTime(std::vector<RespawnInfo*>& respawnData, bool doRespawn = false, CharacterDatabaseTransaction dbTrans = nullptr);
void RemoveRespawnTime(SpawnObjectTypeMask types = SPAWN_TYPEMASK_ALL, uint32 zoneId = 0, bool doRespawn = false, CharacterDatabaseTransaction 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 49be3e5668e..fe9e8a16c16 100644
--- a/src/server/scripts/Commands/cs_gobject.cpp
+++ b/src/server/scripts/Commands/cs_gobject.cpp
@@ -350,7 +350,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 375041d106a..9bc96553784 100644
--- a/src/server/scripts/Commands/cs_list.cpp
+++ b/src/server/scripts/Commands/cs_list.cpp
@@ -692,7 +692,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 c8fe798fcaf..c70567b1746 100644
--- a/src/server/scripts/Commands/cs_misc.cpp
+++ b/src/server/scripts/Commands/cs_misc.cpp
@@ -1990,14 +1990,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 5fdfaf812b4..48c13f9bf8b 100644
--- a/src/server/scripts/Commands/cs_npc.cpp
+++ b/src/server/scripts/Commands/cs_npc.cpp
@@ -606,7 +606,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);
}
@@ -822,7 +822,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();
@@ -831,7 +831,7 @@ public:
std::string curRespawnDelayStr = secsToTimeString(uint64(curRespawnDelay), true);
std::string defRespawnDelayStr = secsToTimeString(target->GetRespawnDelay(), true);
- handler->PSendSysMessage(LANG_NPCINFO_CHAR, std::to_string(target->GetSpawnId()).c_str(), target->GetGUID().ToString().c_str(), faction, std::to_string(npcflags).c_str(), Entry, displayid, nativeid);
+ handler->PSendSysMessage(LANG_NPCINFO_CHAR, target->GetName().c_str(), std::to_string(target->GetSpawnId()).c_str(), target->GetGUID().ToString().c_str(), entry, faction, std::to_string(npcflags).c_str(), displayid, nativeid);
if (target->GetCreatureData() && target->GetCreatureData()->spawnGroupData->groupId)
{
SpawnGroupTemplateData const* const groupData = target->GetCreatureData()->spawnGroupData;
@@ -877,7 +877,7 @@ public:
if (cInfo->flags_extra & flagsExtra[i].Value)
handler->PSendSysMessage("%s (0x%X)", flagsExtra[i].Name, flagsExtra[i].Value);
- handler->PSendSysMessage(LANG_NPCINFO_NPC_FLAGS, npcflags);
+ handler->PSendSysMessage(LANG_NPCINFO_NPC_FLAGS, target->m_unitData->NpcFlags[0]);
for (uint8 i = 0; i < NPC_FLAG_COUNT; i++)
if (npcflags & npcFlagTexts[i].Value)
handler->PSendSysMessage(npcFlagTexts[i].Name, npcFlagTexts[i].Value);
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
index 02ac392f864..3030f3145a6 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
@@ -478,7 +478,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()))
{
@@ -505,9 +505,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);
}
@@ -516,7 +516,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);
}
}