Core/Creature: improve DB linked_respawn handling
Port From (https://github.com/TrinityCore/TrinityCore/commit/1206e815cd9785e4671f30548140f038567811a2)
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user