Core/Creature: improve DB linked_respawn handling

Port From (https://github.com/TrinityCore/TrinityCore/commit/1206e815cd9785e4671f30548140f038567811a2)
This commit is contained in:
hondacrx
2021-05-18 12:55:23 -04:00
parent ccd92e8dd5
commit 5a9ff185b9
5 changed files with 54 additions and 10 deletions
+4 -4
View File
@@ -19,10 +19,10 @@ namespace Framework.Constants
{
public enum CreatureLinkedRespawnType
{
CreatureToCreature,
CreatureToGO, // Creature is dependant on GO
GOToGO,
GOToCreature // GO is dependant on creature
CreatureToCreature = 0,
CreatureToGO = 1, // Creature is dependant on GO
GOToGO = 2,
GOToCreature = 3 // GO is dependant on creature
}
public enum AiReaction
@@ -22,8 +22,9 @@ namespace Framework.Database
public override void PreparedStatements()
{
PrepareStatement(WorldStatements.SEL_QUEST_POOLS, "SELECT entry, pool_entry FROM pool_quest");
PrepareStatement(WorldStatements.DEL_CRELINKED_RESPAWN, "DELETE FROM linked_respawn WHERE guid = ?");
PrepareStatement(WorldStatements.REP_CREATURE_LINKED_RESPAWN, "REPLACE INTO linked_respawn (guid, linkedGuid) VALUES (?, ?)");
PrepareStatement(WorldStatements.DEL_LINKED_RESPAWN, "DELETE FROM linked_respawn WHERE guid = ? AND linkType = ?");
PrepareStatement(WorldStatements.DEL_LINKED_RESPAWN_MASTER, "DELETE FROM linked_respawn WHERE linkedGuid = ? AND linkType = ?");
PrepareStatement(WorldStatements.REP_LINKED_RESPAWN, "REPLACE INTO linked_respawn (guid, linkedGuid, linkType) VALUES (?, ?, ?)");
PrepareStatement(WorldStatements.SEL_CREATURE_TEXT, "SELECT CreatureID, GroupID, ID, Text, Type, Language, Probability, Emote, Duration, Sound, BroadcastTextId, TextRange FROM creature_text");
PrepareStatement(WorldStatements.SEL_SMART_SCRIPTS, "SELECT entryorguid, source_type, id, link, event_type, event_phase_mask, event_chance, event_flags, event_param1, event_param2, event_param3, event_param4, event_param5, event_param_string, action_type, action_param1, action_param2, action_param3, action_param4, action_param5, action_param6, target_type, target_param1, target_param2, target_param3, target_x, target_y, target_z, target_o FROM smart_scripts ORDER BY entryorguid, source_type, id, link");
PrepareStatement(WorldStatements.SEL_SMARTAI_WP, "SELECT entry, pointid, position_x, position_y, position_z FROM waypoints ORDER BY entry, pointid");
@@ -97,8 +98,9 @@ namespace Framework.Database
public enum WorldStatements
{
SEL_QUEST_POOLS,
DEL_CRELINKED_RESPAWN,
REP_CREATURE_LINKED_RESPAWN,
DEL_LINKED_RESPAWN,
DEL_LINKED_RESPAWN_MASTER,
REP_LINKED_RESPAWN,
SEL_CREATURE_TEXT,
SEL_SMART_SCRIPTS,
SEL_SMARTAI_WP,
+20
View File
@@ -1660,6 +1660,26 @@ namespace Game.Entities
stmt.AddValue(0, m_spawnId);
trans.Append(stmt);
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_LINKED_RESPAWN);
stmt.AddValue(0, m_spawnId);
stmt.AddValue(1, (uint)CreatureLinkedRespawnType.CreatureToCreature);
trans.Append(stmt);
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_LINKED_RESPAWN);
stmt.AddValue(0, m_spawnId);
stmt.AddValue(1, (uint)CreatureLinkedRespawnType.CreatureToGO);
trans.Append(stmt);
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_LINKED_RESPAWN_MASTER);
stmt.AddValue(0, m_spawnId);
stmt.AddValue(1, (uint)CreatureLinkedRespawnType.CreatureToCreature);
trans.Append(stmt);
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_LINKED_RESPAWN_MASTER);
stmt.AddValue(0, m_spawnId);
stmt.AddValue(1, (uint)CreatureLinkedRespawnType.GOToCreature);
trans.Append(stmt);
DB.World.CommitTransaction(trans);
// then delete any active instances of the creature
@@ -1075,6 +1075,26 @@ namespace Game.Entities
stmt.AddValue(0, m_spawnId);
trans.Append(stmt);
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_LINKED_RESPAWN);
stmt.AddValue(0, m_spawnId);
stmt.AddValue(1, (uint)CreatureLinkedRespawnType.GOToGO);
trans.Append(stmt);
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_LINKED_RESPAWN);
stmt.AddValue(0, m_spawnId);
stmt.AddValue(1, (uint)CreatureLinkedRespawnType.GOToCreature);
trans.Append(stmt);
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_LINKED_RESPAWN_MASTER);
stmt.AddValue(0, m_spawnId);
stmt.AddValue(1, (uint)CreatureLinkedRespawnType.GOToGO);
trans.Append(stmt);
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_LINKED_RESPAWN_MASTER);
stmt.AddValue(0, m_spawnId);
stmt.AddValue(1, (uint)CreatureLinkedRespawnType.CreatureToGO);
trans.Append(stmt);
DB.World.CommitTransaction(trans);
}
+4 -2
View File
@@ -3523,8 +3523,9 @@ namespace Game
if (linkedGuidLow == 0) // we're removing the linking
{
linkedRespawnStorage.Remove(guid);
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_CRELINKED_RESPAWN);
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_LINKED_RESPAWN);
stmt.AddValue(0, guidLow);
stmt.AddValue(1, (uint)CreatureLinkedRespawnType.CreatureToCreature);
DB.World.Execute(stmt);
return true;
}
@@ -3553,9 +3554,10 @@ namespace Game
ObjectGuid linkedGuid = ObjectGuid.Create(HighGuid.Creature, slave.spawnPoint.GetMapId(), slave.Id, linkedGuidLow);
linkedRespawnStorage[guid] = linkedGuid;
stmt = DB.World.GetPreparedStatement(WorldStatements.REP_CREATURE_LINKED_RESPAWN);
stmt = DB.World.GetPreparedStatement(WorldStatements.REP_LINKED_RESPAWN);
stmt.AddValue(0, guidLow);
stmt.AddValue(1, linkedGuidLow);
stmt.AddValue(2, (uint)CreatureLinkedRespawnType.CreatureToCreature);
DB.World.Execute(stmt);
return true;
}