Entities/Unit: Nuke Map::ForceRespawn from orbit, with the following implications:
Port From (https://github.com/TrinityCore/TrinityCore/commit/2532de6acb7d73957a8fca44e7fc26160f47cc47)
This commit is contained in:
@@ -69,39 +69,35 @@ namespace Game.Chat
|
|||||||
if (string.IsNullOrEmpty(id))
|
if (string.IsNullOrEmpty(id))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!ulong.TryParse(id, out ulong guidLow) || guidLow == 0)
|
if (!ulong.TryParse(id, out ulong spawnId) || spawnId == 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
Player player = handler.GetSession().GetPlayer();
|
GameObject obj = handler.GetObjectFromPlayerMapByDbGuid(spawnId);
|
||||||
// force respawn to make sure we find something
|
if (obj != null)
|
||||||
player.GetMap().ForceRespawn(SpawnObjectType.GameObject, guidLow);
|
|
||||||
GameObject obj = handler.GetObjectFromPlayerMapByDbGuid(guidLow);
|
|
||||||
if (!obj)
|
|
||||||
{
|
{
|
||||||
handler.SendSysMessage(CypherStrings.CommandObjnotfound, guidLow);
|
Player player = handler.GetSession().GetPlayer();
|
||||||
return false;
|
ObjectGuid ownerGuid = obj.GetOwnerGUID();
|
||||||
}
|
if (!ownerGuid.IsEmpty())
|
||||||
|
|
||||||
ObjectGuid ownerGuid = obj.GetOwnerGUID();
|
|
||||||
if (!ownerGuid.IsEmpty())
|
|
||||||
{
|
|
||||||
Unit owner = Global.ObjAccessor.GetUnit(player, ownerGuid);
|
|
||||||
if (!owner || !ownerGuid.IsPlayer())
|
|
||||||
{
|
{
|
||||||
handler.SendSysMessage(CypherStrings.CommandDelobjrefercreature, ownerGuid.ToString(), obj.GetGUID().ToString());
|
Unit owner = Global.ObjAccessor.GetUnit(player, ownerGuid);
|
||||||
return false;
|
if (!owner || !ownerGuid.IsPlayer())
|
||||||
}
|
{
|
||||||
|
handler.SendSysMessage(CypherStrings.CommandDelobjrefercreature, ownerGuid.ToString(), obj.GetGUID().ToString());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
owner.RemoveGameObject(obj, false);
|
owner.RemoveGameObject(obj, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
obj.SetRespawnTime(0); // not save respawn time
|
if (GameObject.DeleteFromDB(spawnId))
|
||||||
obj.Delete();
|
{
|
||||||
obj.DeleteFromDB();
|
handler.SendSysMessage(CypherStrings.CommandDelobjmessage, spawnId);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
handler.SendSysMessage(CypherStrings.CommandDelobjmessage, obj.GetGUID().ToString());
|
handler.SendSysMessage(CypherStrings.CommandObjnotfound, obj.GetGUID().ToString());
|
||||||
|
return false;
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Command("despawngroup", RBACPermissions.CommandGobjectDespawngroup)]
|
[Command("despawngroup", RBACPermissions.CommandGobjectDespawngroup)]
|
||||||
|
|||||||
@@ -869,7 +869,7 @@ namespace Game.Chat
|
|||||||
[Command("", RBACPermissions.CommandNpcDelete)]
|
[Command("", RBACPermissions.CommandNpcDelete)]
|
||||||
static bool HandleNpcDeleteCommand(StringArguments args, CommandHandler handler)
|
static bool HandleNpcDeleteCommand(StringArguments args, CommandHandler handler)
|
||||||
{
|
{
|
||||||
Creature creature;
|
ulong spawnId;
|
||||||
|
|
||||||
if (!args.Empty())
|
if (!args.Empty())
|
||||||
{
|
{
|
||||||
@@ -881,34 +881,36 @@ namespace Game.Chat
|
|||||||
if (!ulong.TryParse(cId, out ulong guidLow) || guidLow == 0)
|
if (!ulong.TryParse(cId, out ulong guidLow) || guidLow == 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// force respawn to make sure we find something
|
spawnId = guidLow;
|
||||||
handler.GetSession().GetPlayer().GetMap().ForceRespawn(SpawnObjectType.Creature, guidLow);
|
|
||||||
// then try to find it
|
|
||||||
creature = handler.GetCreatureFromPlayerMapByDbGuid(guidLow);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
creature = handler.GetSelectedCreature();
|
|
||||||
|
|
||||||
if (!creature || creature.IsPet() || creature.IsTotem())
|
|
||||||
{
|
{
|
||||||
handler.SendSysMessage(CypherStrings.SelectCreature);
|
Creature creature = handler.GetSelectedCreature();
|
||||||
return false;
|
|
||||||
|
if (!creature || creature.IsPet() || creature.IsTotem())
|
||||||
|
{
|
||||||
|
handler.SendSysMessage(CypherStrings.SelectCreature);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
TempSummon summon = creature.ToTempSummon();
|
||||||
|
if (summon != null)
|
||||||
|
{
|
||||||
|
summon.UnSummon();
|
||||||
|
handler.SendSysMessage(CypherStrings.CommandDelcreatmessage);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
spawnId = creature.GetSpawnId();
|
||||||
}
|
}
|
||||||
|
|
||||||
TempSummon summon = creature.ToTempSummon();
|
if (Creature.DeleteFromDB(spawnId))
|
||||||
if (summon != null)
|
|
||||||
summon.UnSummon();
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
// Delete the creature
|
handler.SendSysMessage(CypherStrings.CommandDelcreatmessage);
|
||||||
creature.CombatStop();
|
return true;
|
||||||
creature.DeleteFromDB();
|
|
||||||
creature.AddObjectToRemoveList();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
handler.SendSysMessage(CypherStrings.CommandDelcreatmessage);
|
handler.SendSysMessage(CypherStrings.CommandCreatguidnotfound, spawnId);
|
||||||
|
return false;
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Command("item", RBACPermissions.CommandNpcDeleteItem)]
|
[Command("item", RBACPermissions.CommandNpcDeleteItem)]
|
||||||
|
|||||||
@@ -512,21 +512,27 @@ namespace Game.Chat.Commands
|
|||||||
{
|
{
|
||||||
handler.SendSysMessage("|cff00ff00DEBUG: wp modify del, PathID: |r|cff00ffff{0}|r", pathid);
|
handler.SendSysMessage("|cff00ff00DEBUG: wp modify del, PathID: |r|cff00ffff{0}|r", pathid);
|
||||||
|
|
||||||
target.DeleteFromDB();
|
if (Creature.DeleteFromDB(target.GetSpawnId()))
|
||||||
target.AddObjectToRemoveList();
|
{
|
||||||
|
|
||||||
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_WAYPOINT_DATA);
|
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_WAYPOINT_DATA);
|
||||||
stmt.AddValue(0, pathid);
|
stmt.AddValue(0, pathid);
|
||||||
stmt.AddValue(1, point);
|
stmt.AddValue(1, point);
|
||||||
DB.World.Execute(stmt);
|
DB.World.Execute(stmt);
|
||||||
|
|
||||||
stmt = DB.World.GetPreparedStatement(WorldStatements.UPD_WAYPOINT_DATA_POINT);
|
stmt = DB.World.GetPreparedStatement(WorldStatements.UPD_WAYPOINT_DATA_POINT);
|
||||||
stmt.AddValue(0, pathid);
|
stmt.AddValue(0, pathid);
|
||||||
stmt.AddValue(1, point);
|
stmt.AddValue(1, point);
|
||||||
DB.World.Execute(stmt);
|
DB.World.Execute(stmt);
|
||||||
|
|
||||||
handler.SendSysMessage(CypherStrings.WaypointRemoved);
|
handler.SendSysMessage(CypherStrings.WaypointRemoved);
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
handler.SendSysMessage(CypherStrings.WaypointNotremoved);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
} // del
|
} // del
|
||||||
|
|
||||||
if (show == "move")
|
if (show == "move")
|
||||||
@@ -538,8 +544,11 @@ namespace Game.Chat.Commands
|
|||||||
// What to do:
|
// What to do:
|
||||||
// Move the visual spawnpoint
|
// Move the visual spawnpoint
|
||||||
// Respawn the owner of the waypoints
|
// Respawn the owner of the waypoints
|
||||||
target.DeleteFromDB();
|
if (!Creature.DeleteFromDB(target.GetSpawnId()))
|
||||||
target.AddObjectToRemoveList();
|
{
|
||||||
|
handler.SendSysMessage(CypherStrings.WaypointVpNotcreated, 1);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// re-create
|
// re-create
|
||||||
Creature creature = Creature.CreateCreature(1, map, chr.GetPosition());
|
Creature creature = Creature.CreateCreature(1, map, chr.GetPosition());
|
||||||
@@ -721,21 +730,10 @@ namespace Game.Chat.Commands
|
|||||||
{
|
{
|
||||||
ulong wpguid = result2.Read<ulong>(0);
|
ulong wpguid = result2.Read<ulong>(0);
|
||||||
|
|
||||||
Creature creature = handler.GetCreatureFromPlayerMapByDbGuid(wpguid);
|
if (!Creature.DeleteFromDB(wpguid))
|
||||||
if (!creature)
|
|
||||||
{
|
{
|
||||||
handler.SendSysMessage(CypherStrings.WaypointNotremoved, wpguid);
|
handler.SendSysMessage(CypherStrings.WaypointNotremoved, wpguid);
|
||||||
hasError = true;
|
hasError = true;
|
||||||
|
|
||||||
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_CREATURE);
|
|
||||||
stmt.AddValue(0, wpguid);
|
|
||||||
DB.World.Execute(stmt);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
creature.CombatStop();
|
|
||||||
creature.DeleteFromDB();
|
|
||||||
creature.AddObjectToRemoveList();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -931,21 +929,10 @@ namespace Game.Chat.Commands
|
|||||||
{
|
{
|
||||||
ulong lowguid = result.Read<ulong>(0);
|
ulong lowguid = result.Read<ulong>(0);
|
||||||
|
|
||||||
Creature creature = handler.GetCreatureFromPlayerMapByDbGuid(lowguid);
|
if (!Creature.DeleteFromDB(lowguid))
|
||||||
if (!creature)
|
|
||||||
{
|
{
|
||||||
handler.SendSysMessage(CypherStrings.WaypointNotremoved, lowguid);
|
handler.SendSysMessage(CypherStrings.WaypointNotremoved, lowguid);
|
||||||
hasError = true;
|
hasError = true;
|
||||||
|
|
||||||
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_CREATURE);
|
|
||||||
stmt.AddValue(0, lowguid);
|
|
||||||
DB.World.Execute(stmt);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
creature.CombatStop();
|
|
||||||
creature.DeleteFromDB();
|
|
||||||
creature.AddObjectToRemoveList();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (result.NextRow());
|
while (result.NextRow());
|
||||||
|
|||||||
@@ -1607,66 +1607,79 @@ namespace Game.Entities
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DeleteFromDB()
|
public static bool DeleteFromDB(ulong spawnId)
|
||||||
{
|
{
|
||||||
if (m_spawnId == 0)
|
CreatureData data = Global.ObjectMgr.GetCreatureData(spawnId);
|
||||||
{
|
if (data == null)
|
||||||
Log.outError(LogFilter.Unit, "Trying to delete not saved {0}", GetGUID().ToString(), GetEntry());
|
return false;
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
GetMap().RemoveRespawnTime(SpawnObjectType.Creature, m_spawnId);
|
|
||||||
Global.ObjectMgr.DeleteCreatureData(m_spawnId);
|
|
||||||
|
|
||||||
SQLTransaction trans = new();
|
SQLTransaction trans = new();
|
||||||
|
|
||||||
|
Global.MapMgr.DoForAllMapsWithMapId(data.spawnPoint.GetMapId(), map =>
|
||||||
|
{
|
||||||
|
// despawn all active creatures, and remove their respawns
|
||||||
|
List<Creature> toUnload = new();
|
||||||
|
foreach (var creature in map.GetCreatureBySpawnIdStore().LookupByKey(spawnId))
|
||||||
|
toUnload.Add(creature);
|
||||||
|
|
||||||
|
foreach (Creature creature in toUnload)
|
||||||
|
map.AddObjectToRemoveList(creature);
|
||||||
|
|
||||||
|
map.RemoveRespawnTime(SpawnObjectType.Creature, spawnId, false, trans);
|
||||||
|
});
|
||||||
|
|
||||||
|
// delete data from memory ...
|
||||||
|
Global.ObjectMgr.DeleteCreatureData(spawnId);
|
||||||
|
|
||||||
|
DB.Characters.CommitTransaction(trans);
|
||||||
|
|
||||||
|
// ... and the database
|
||||||
|
trans = new();
|
||||||
|
|
||||||
PreparedStatement stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_CREATURE);
|
PreparedStatement stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_CREATURE);
|
||||||
stmt.AddValue(0, m_spawnId);
|
stmt.AddValue(0, spawnId);
|
||||||
trans.Append(stmt);
|
trans.Append(stmt);
|
||||||
|
|
||||||
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_SPAWNGROUP_MEMBER);
|
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_SPAWNGROUP_MEMBER);
|
||||||
stmt.AddValue(0, (byte)SpawnObjectType.Creature);
|
stmt.AddValue(0, (byte)SpawnObjectType.Creature);
|
||||||
stmt.AddValue(1, m_spawnId);
|
stmt.AddValue(1, spawnId);
|
||||||
trans.Append(stmt);
|
trans.Append(stmt);
|
||||||
|
|
||||||
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_CREATURE_ADDON);
|
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_CREATURE_ADDON);
|
||||||
stmt.AddValue(0, m_spawnId);
|
stmt.AddValue(0, spawnId);
|
||||||
trans.Append(stmt);
|
trans.Append(stmt);
|
||||||
|
|
||||||
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_GAME_EVENT_CREATURE);
|
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_GAME_EVENT_CREATURE);
|
||||||
stmt.AddValue(0, m_spawnId);
|
stmt.AddValue(0, spawnId);
|
||||||
trans.Append(stmt);
|
trans.Append(stmt);
|
||||||
|
|
||||||
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_GAME_EVENT_MODEL_EQUIP);
|
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_GAME_EVENT_MODEL_EQUIP);
|
||||||
stmt.AddValue(0, m_spawnId);
|
stmt.AddValue(0, spawnId);
|
||||||
trans.Append(stmt);
|
trans.Append(stmt);
|
||||||
|
|
||||||
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_LINKED_RESPAWN);
|
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_LINKED_RESPAWN);
|
||||||
stmt.AddValue(0, m_spawnId);
|
stmt.AddValue(0, spawnId);
|
||||||
stmt.AddValue(1, (uint)CreatureLinkedRespawnType.CreatureToCreature);
|
stmt.AddValue(1, (uint)CreatureLinkedRespawnType.CreatureToCreature);
|
||||||
trans.Append(stmt);
|
trans.Append(stmt);
|
||||||
|
|
||||||
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_LINKED_RESPAWN);
|
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_LINKED_RESPAWN);
|
||||||
stmt.AddValue(0, m_spawnId);
|
stmt.AddValue(0, spawnId);
|
||||||
stmt.AddValue(1, (uint)CreatureLinkedRespawnType.CreatureToGO);
|
stmt.AddValue(1, (uint)CreatureLinkedRespawnType.CreatureToGO);
|
||||||
trans.Append(stmt);
|
trans.Append(stmt);
|
||||||
|
|
||||||
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_LINKED_RESPAWN_MASTER);
|
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_LINKED_RESPAWN_MASTER);
|
||||||
stmt.AddValue(0, m_spawnId);
|
stmt.AddValue(0, spawnId);
|
||||||
stmt.AddValue(1, (uint)CreatureLinkedRespawnType.CreatureToCreature);
|
stmt.AddValue(1, (uint)CreatureLinkedRespawnType.CreatureToCreature);
|
||||||
trans.Append(stmt);
|
trans.Append(stmt);
|
||||||
|
|
||||||
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_LINKED_RESPAWN_MASTER);
|
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_LINKED_RESPAWN_MASTER);
|
||||||
stmt.AddValue(0, m_spawnId);
|
stmt.AddValue(0, spawnId);
|
||||||
stmt.AddValue(1, (uint)CreatureLinkedRespawnType.GOToCreature);
|
stmt.AddValue(1, (uint)CreatureLinkedRespawnType.GOToCreature);
|
||||||
trans.Append(stmt);
|
trans.Append(stmt);
|
||||||
|
|
||||||
DB.World.CommitTransaction(trans);
|
DB.World.CommitTransaction(trans);
|
||||||
|
|
||||||
// then delete any active instances of the creature
|
return true;
|
||||||
var spawnMap = GetMap().GetCreatureBySpawnIdStore().LookupByKey(m_spawnId);
|
|
||||||
foreach (var creature in spawnMap.ToList())
|
|
||||||
creature.AddObjectToRemoveList();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool IsInvisibleDueToDespawn()
|
public override bool IsInvisibleDueToDespawn()
|
||||||
|
|||||||
@@ -1155,46 +1155,68 @@ namespace Game.Entities
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DeleteFromDB()
|
public static bool DeleteFromDB(ulong spawnId)
|
||||||
{
|
{
|
||||||
GetMap().RemoveRespawnTime(SpawnObjectType.GameObject, m_spawnId);
|
GameObjectData data = Global.ObjectMgr.GetGameObjectData(spawnId);
|
||||||
Global.ObjectMgr.DeleteGameObjectData(m_spawnId);
|
if (data == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
SQLTransaction trans = new();
|
SQLTransaction trans = new();
|
||||||
|
|
||||||
|
Global.MapMgr.DoForAllMapsWithMapId(data.spawnPoint.GetMapId(), map =>
|
||||||
|
{
|
||||||
|
// despawn all active objects, and remove their respawns
|
||||||
|
List<GameObject> toUnload = new();
|
||||||
|
foreach (var creature in map.GetGameObjectBySpawnIdStore().LookupByKey(spawnId))
|
||||||
|
toUnload.Add(creature);
|
||||||
|
|
||||||
|
foreach (GameObject obj in toUnload)
|
||||||
|
map.AddObjectToRemoveList(obj);
|
||||||
|
|
||||||
|
map.RemoveRespawnTime(SpawnObjectType.GameObject, spawnId, false, trans);
|
||||||
|
});
|
||||||
|
|
||||||
|
// delete data from memory
|
||||||
|
Global.ObjectMgr.DeleteGameObjectData(spawnId);
|
||||||
|
|
||||||
|
trans = new();
|
||||||
|
|
||||||
|
// ... and the database
|
||||||
PreparedStatement stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_GAMEOBJECT);
|
PreparedStatement stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_GAMEOBJECT);
|
||||||
stmt.AddValue(0, m_spawnId);
|
stmt.AddValue(0, spawnId);
|
||||||
trans.Append(stmt);
|
trans.Append(stmt);
|
||||||
|
|
||||||
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_EVENT_GAMEOBJECT);
|
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_EVENT_GAMEOBJECT);
|
||||||
stmt.AddValue(0, m_spawnId);
|
stmt.AddValue(0, spawnId);
|
||||||
trans.Append(stmt);
|
trans.Append(stmt);
|
||||||
|
|
||||||
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_LINKED_RESPAWN);
|
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_LINKED_RESPAWN);
|
||||||
stmt.AddValue(0, m_spawnId);
|
stmt.AddValue(0, spawnId);
|
||||||
stmt.AddValue(1, (uint)CreatureLinkedRespawnType.GOToGO);
|
stmt.AddValue(1, (uint)CreatureLinkedRespawnType.GOToGO);
|
||||||
trans.Append(stmt);
|
trans.Append(stmt);
|
||||||
|
|
||||||
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_LINKED_RESPAWN);
|
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_LINKED_RESPAWN);
|
||||||
stmt.AddValue(0, m_spawnId);
|
stmt.AddValue(0, spawnId);
|
||||||
stmt.AddValue(1, (uint)CreatureLinkedRespawnType.GOToCreature);
|
stmt.AddValue(1, (uint)CreatureLinkedRespawnType.GOToCreature);
|
||||||
trans.Append(stmt);
|
trans.Append(stmt);
|
||||||
|
|
||||||
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_LINKED_RESPAWN_MASTER);
|
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_LINKED_RESPAWN_MASTER);
|
||||||
stmt.AddValue(0, m_spawnId);
|
stmt.AddValue(0, spawnId);
|
||||||
stmt.AddValue(1, (uint)CreatureLinkedRespawnType.GOToGO);
|
stmt.AddValue(1, (uint)CreatureLinkedRespawnType.GOToGO);
|
||||||
trans.Append(stmt);
|
trans.Append(stmt);
|
||||||
|
|
||||||
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_LINKED_RESPAWN_MASTER);
|
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_LINKED_RESPAWN_MASTER);
|
||||||
stmt.AddValue(0, m_spawnId);
|
stmt.AddValue(0, spawnId);
|
||||||
stmt.AddValue(1, (uint)CreatureLinkedRespawnType.CreatureToGO);
|
stmt.AddValue(1, (uint)CreatureLinkedRespawnType.CreatureToGO);
|
||||||
trans.Append(stmt);
|
trans.Append(stmt);
|
||||||
|
|
||||||
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_GAMEOBJECT_ADDON);
|
stmt = DB.World.GetPreparedStatement(WorldStatements.DEL_GAMEOBJECT_ADDON);
|
||||||
stmt.AddValue(0, m_spawnId);
|
stmt.AddValue(0, spawnId);
|
||||||
trans.Append(stmt);
|
trans.Append(stmt);
|
||||||
|
|
||||||
DB.World.CommitTransaction(trans);
|
DB.World.CommitTransaction(trans);
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool HasQuest(uint quest_id)
|
public override bool HasQuest(uint quest_id)
|
||||||
|
|||||||
+4
-11
@@ -2443,9 +2443,9 @@ namespace Game.Maps
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Respawn(RespawnInfo info, bool force = false, SQLTransaction dbTrans = null)
|
void Respawn(RespawnInfo info, SQLTransaction dbTrans = null)
|
||||||
{
|
{
|
||||||
if (!force && !CheckRespawn(info))
|
if (!CheckRespawn(info))
|
||||||
{
|
{
|
||||||
if (info.respawnTime != 0)
|
if (info.respawnTime != 0)
|
||||||
SaveRespawnTime(info.type, info.spawnId, info.entry, info.respawnTime, info.zoneId, info.gridId, true, true, dbTrans);
|
SaveRespawnTime(info.type, info.spawnId, info.entry, info.respawnTime, info.zoneId, info.gridId, true, true, dbTrans);
|
||||||
@@ -2463,11 +2463,11 @@ namespace Game.Maps
|
|||||||
DoRespawn(type, spawnId, gridId);
|
DoRespawn(type, spawnId, gridId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Respawn(List<RespawnInfo> respawnData, bool force, SQLTransaction dbTrans)
|
void Respawn(List<RespawnInfo> respawnData, SQLTransaction dbTrans)
|
||||||
{
|
{
|
||||||
SQLTransaction trans = dbTrans != null ? dbTrans : new SQLTransaction();
|
SQLTransaction trans = dbTrans != null ? dbTrans : new SQLTransaction();
|
||||||
foreach (RespawnInfo info in respawnData)
|
foreach (RespawnInfo info in respawnData)
|
||||||
Respawn(info, force, trans);
|
Respawn(info, trans);
|
||||||
|
|
||||||
if (dbTrans == null)
|
if (dbTrans == null)
|
||||||
DB.Characters.CommitTransaction(trans);
|
DB.Characters.CommitTransaction(trans);
|
||||||
@@ -2545,13 +2545,6 @@ namespace Game.Maps
|
|||||||
_respawnTimes.Remove(info);
|
_respawnTimes.Remove(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ForceRespawn(SpawnObjectType type, ulong spawnId)
|
|
||||||
{
|
|
||||||
RespawnInfo info = GetRespawnInfo(type, spawnId);
|
|
||||||
if (info != null)
|
|
||||||
Respawn(info, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void RemoveRespawnTime(RespawnInfo info, bool doRespawn = false, SQLTransaction dbTrans = null)
|
public void RemoveRespawnTime(RespawnInfo info, bool doRespawn = false, SQLTransaction dbTrans = null)
|
||||||
{
|
{
|
||||||
PreparedStatement stmt;
|
PreparedStatement stmt;
|
||||||
|
|||||||
@@ -434,48 +434,24 @@ namespace Game.PvP
|
|||||||
}
|
}
|
||||||
ulong spawnId = m_Creatures[type];
|
ulong spawnId = m_Creatures[type];
|
||||||
|
|
||||||
var bounds = PvP.GetMap().GetCreatureBySpawnIdStore().LookupByKey(spawnId);
|
|
||||||
foreach (var creature in bounds)
|
|
||||||
{
|
|
||||||
// Don't save respawn time
|
|
||||||
creature.SetRespawnTime(0);
|
|
||||||
creature.DespawnOrUnsummon();
|
|
||||||
creature.AddObjectToRemoveList();
|
|
||||||
}
|
|
||||||
|
|
||||||
Log.outDebug(LogFilter.Outdoorpvp, "deleting opvp creature type {0}", type);
|
Log.outDebug(LogFilter.Outdoorpvp, "deleting opvp creature type {0}", type);
|
||||||
|
|
||||||
// delete respawn time for this creature
|
|
||||||
PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.DEL_CREATURE_RESPAWN);
|
|
||||||
stmt.AddValue(0, spawnId);
|
|
||||||
stmt.AddValue(1, PvP.GetMap().GetId());
|
|
||||||
stmt.AddValue(2, 0); // instance id, always 0 for world maps
|
|
||||||
DB.Characters.Execute(stmt);
|
|
||||||
|
|
||||||
Global.ObjectMgr.DeleteCreatureData(spawnId);
|
|
||||||
m_CreatureTypes.Remove(spawnId);
|
m_CreatureTypes.Remove(spawnId);
|
||||||
m_Creatures.Remove(type);
|
m_Creatures.Remove(type);
|
||||||
return true;
|
|
||||||
|
return Creature.DeleteFromDB(spawnId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool DelObject(uint type)
|
public bool DelObject(uint type)
|
||||||
{
|
{
|
||||||
if (!m_Objects.ContainsKey(type))
|
ulong spawnId = m_Objects[type];
|
||||||
|
if (spawnId == 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
ulong spawnId = m_Objects[type];
|
|
||||||
var bounds = PvP.GetMap().GetGameObjectBySpawnIdStore().LookupByKey(spawnId);
|
|
||||||
foreach (var gameobject in bounds)
|
|
||||||
{
|
|
||||||
// Don't save respawn time
|
|
||||||
gameobject.SetRespawnTime(0);
|
|
||||||
gameobject.Delete();
|
|
||||||
}
|
|
||||||
|
|
||||||
Global.ObjectMgr.DeleteGameObjectData(spawnId);
|
|
||||||
m_ObjectTypes.Remove(spawnId);
|
m_ObjectTypes.Remove(spawnId);
|
||||||
m_Objects.Remove(type);
|
m_Objects.Remove(type);
|
||||||
return true;
|
|
||||||
|
return GameObject.DeleteFromDB(spawnId);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DelCapturePoint()
|
bool DelCapturePoint()
|
||||||
|
|||||||
Reference in New Issue
Block a user