Core/Instance : Fix instance resetting exploit
Port From (https://github.com/TrinityCore/TrinityCore/commit/1c3c59d7fac0abb02cc1fb433338737ea119831d)
This commit is contained in:
@@ -528,6 +528,7 @@ namespace Framework.Database
|
|||||||
PrepareStatement(CharStatements.DEL_CHARACTER_SOCIAL, "DELETE FROM character_social WHERE guid = ? AND friend = ?");
|
PrepareStatement(CharStatements.DEL_CHARACTER_SOCIAL, "DELETE FROM character_social WHERE guid = ? AND friend = ?");
|
||||||
PrepareStatement(CharStatements.UPD_CHARACTER_SOCIAL_NOTE, "UPDATE character_social SET note = ? WHERE guid = ? AND friend = ?");
|
PrepareStatement(CharStatements.UPD_CHARACTER_SOCIAL_NOTE, "UPDATE character_social SET note = ? WHERE guid = ? AND friend = ?");
|
||||||
PrepareStatement(CharStatements.UPD_CHARACTER_POSITION, "UPDATE characters SET position_x = ?, position_y = ?, position_z = ?, orientation = ?, map = ?, zone = ?, trans_x = 0, trans_y = 0, trans_z = 0, transguid = 0, taxi_path = '', cinematic = 1 WHERE guid = ?");
|
PrepareStatement(CharStatements.UPD_CHARACTER_POSITION, "UPDATE characters SET position_x = ?, position_y = ?, position_z = ?, orientation = ?, map = ?, zone = ?, trans_x = 0, trans_y = 0, trans_z = 0, transguid = 0, taxi_path = '', cinematic = 1 WHERE guid = ?");
|
||||||
|
PrepareStatement(CharStatements.UPD_CHARACTER_POSITION_BY_MAPID, "UPDATE characters SET position_x = ?, position_y = ?, position_z = ?, orientation = ?, map = ?, zone = ?, trans_x = 0, trans_y = 0, trans_z = 0, transguid = 0, taxi_path = '', cinematic = 1 WHERE guid = ? AND map = ?");
|
||||||
PrepareStatement(CharStatements.SEL_CHARACTER_AURA_FROZEN, "SELECT characters.name, character_aura.remainTime FROM characters LEFT JOIN character_aura ON (characters.guid = character_aura.guid) WHERE character_aura.spell = 9454");
|
PrepareStatement(CharStatements.SEL_CHARACTER_AURA_FROZEN, "SELECT characters.name, character_aura.remainTime FROM characters LEFT JOIN character_aura ON (characters.guid = character_aura.guid) WHERE character_aura.spell = 9454");
|
||||||
PrepareStatement(CharStatements.SEL_CHARACTER_ONLINE, "SELECT name, account, map, zone FROM characters WHERE online > 0");
|
PrepareStatement(CharStatements.SEL_CHARACTER_ONLINE, "SELECT name, account, map, zone FROM characters WHERE online > 0");
|
||||||
PrepareStatement(CharStatements.SEL_CHAR_DEL_INFO_BY_GUID, "SELECT guid, deleteInfos_Name, deleteInfos_Account, deleteDate FROM characters WHERE deleteDate IS NOT NULL AND guid = ?");
|
PrepareStatement(CharStatements.SEL_CHAR_DEL_INFO_BY_GUID, "SELECT guid, deleteInfos_Name, deleteInfos_Account, deleteDate FROM characters WHERE deleteDate IS NOT NULL AND guid = ?");
|
||||||
@@ -1191,6 +1192,7 @@ namespace Framework.Database
|
|||||||
DEL_CHARACTER_SOCIAL,
|
DEL_CHARACTER_SOCIAL,
|
||||||
UPD_CHARACTER_SOCIAL_NOTE,
|
UPD_CHARACTER_SOCIAL_NOTE,
|
||||||
UPD_CHARACTER_POSITION,
|
UPD_CHARACTER_POSITION,
|
||||||
|
UPD_CHARACTER_POSITION_BY_MAPID,
|
||||||
|
|
||||||
INS_LFG_DATA,
|
INS_LFG_DATA,
|
||||||
DEL_LFG_DATA,
|
DEL_LFG_DATA,
|
||||||
|
|||||||
@@ -2035,7 +2035,43 @@ namespace Game.Groups
|
|||||||
{
|
{
|
||||||
// do not reset the instance, just unbind if others are permanently bound to it
|
// do not reset the instance, just unbind if others are permanently bound to it
|
||||||
if (instanceSave.CanReset())
|
if (instanceSave.CanReset())
|
||||||
|
{
|
||||||
|
if (map != null && IsRaidGroup() && map.IsDungeon() && SendMsgTo)
|
||||||
|
{
|
||||||
|
AreaTriggerStruct instanceEntrance = Global.ObjectMgr.GetGoBackTrigger(map.GetId());
|
||||||
|
|
||||||
|
if (instanceEntrance == null)
|
||||||
|
Log.outDebug(LogFilter.Misc, $"Instance entrance not found for map {map.GetId()}");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
WorldSafeLocsEntry graveyardLocation = Global.ObjectMgr.GetClosestGraveYard(
|
||||||
|
new WorldLocation(instanceEntrance.target_mapId, instanceEntrance.target_X, instanceEntrance.target_Y, instanceEntrance.target_Z),
|
||||||
|
SendMsgTo.GetTeam(), null);
|
||||||
|
uint zoneId = Global.MapMgr.GetZoneId(PhasingHandler.EmptyPhaseShift, graveyardLocation.Loc.GetMapId(),
|
||||||
|
graveyardLocation.Loc.GetPositionX(), graveyardLocation.Loc.GetPositionY(), graveyardLocation.Loc.GetPositionZ());
|
||||||
|
|
||||||
|
foreach (MemberSlot member in GetMemberSlots())
|
||||||
|
{
|
||||||
|
if (!Global.ObjAccessor.FindConnectedPlayer(member.guid))
|
||||||
|
{
|
||||||
|
var stmt = DB.Characters.GetPreparedStatement(CharStatements.UPD_CHARACTER_POSITION_BY_MAPID);
|
||||||
|
|
||||||
|
stmt.AddValue(0, graveyardLocation.Loc.GetPositionX());
|
||||||
|
stmt.AddValue(1, graveyardLocation.Loc.GetPositionY());
|
||||||
|
stmt.AddValue(2, graveyardLocation.Loc.GetPositionZ());
|
||||||
|
stmt.AddValue(3, instanceEntrance.target_Orientation);
|
||||||
|
stmt.AddValue(4, graveyardLocation.Loc.GetMapId());
|
||||||
|
stmt.AddValue(5, zoneId);
|
||||||
|
stmt.AddValue(6, member.guid.GetCounter());
|
||||||
|
stmt.AddValue(7, map.GetId());
|
||||||
|
|
||||||
|
DB.Characters.Execute(stmt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
instanceSave.DeleteFromDB();
|
instanceSave.DeleteFromDB();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.DEL_GROUP_INSTANCE_BY_INSTANCE);
|
PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.DEL_GROUP_INSTANCE_BY_INSTANCE);
|
||||||
|
|||||||
Reference in New Issue
Block a user