Core/Scripts: Fix EventScript assert for GameObject::SetDestructibleState
Port From (https://github.com/TrinityCore/TrinityCore/commit/3aa264d0c74d0425fd335d69e1890bef6dfa1838)
This commit is contained in:
@@ -2809,7 +2809,7 @@ namespace Game.Entities
|
|||||||
break;
|
break;
|
||||||
case GameObjectDestructibleState.Damaged:
|
case GameObjectDestructibleState.Damaged:
|
||||||
{
|
{
|
||||||
if (GetGoInfo().DestructibleBuilding.DamagedEvent != 0)
|
if (GetGoInfo().DestructibleBuilding.DamagedEvent != 0 && attackerOrHealer != null)
|
||||||
GameEvents.Trigger(GetGoInfo().DestructibleBuilding.DamagedEvent, attackerOrHealer, this);
|
GameEvents.Trigger(GetGoInfo().DestructibleBuilding.DamagedEvent, attackerOrHealer, this);
|
||||||
GetAI().Damaged(attackerOrHealer, m_goInfo.DestructibleBuilding.DamagedEvent);
|
GetAI().Damaged(attackerOrHealer, m_goInfo.DestructibleBuilding.DamagedEvent);
|
||||||
|
|
||||||
@@ -2836,7 +2836,7 @@ namespace Game.Entities
|
|||||||
}
|
}
|
||||||
case GameObjectDestructibleState.Destroyed:
|
case GameObjectDestructibleState.Destroyed:
|
||||||
{
|
{
|
||||||
if (GetGoInfo().DestructibleBuilding.DestroyedEvent != 0)
|
if (GetGoInfo().DestructibleBuilding.DestroyedEvent != 0 && attackerOrHealer != null)
|
||||||
GameEvents.Trigger(GetGoInfo().DestructibleBuilding.DestroyedEvent, attackerOrHealer, this);
|
GameEvents.Trigger(GetGoInfo().DestructibleBuilding.DestroyedEvent, attackerOrHealer, this);
|
||||||
GetAI().Destroyed(attackerOrHealer, m_goInfo.DestructibleBuilding.DestroyedEvent);
|
GetAI().Destroyed(attackerOrHealer, m_goInfo.DestructibleBuilding.DestroyedEvent);
|
||||||
|
|
||||||
@@ -2868,7 +2868,7 @@ namespace Game.Entities
|
|||||||
}
|
}
|
||||||
case GameObjectDestructibleState.Rebuilding:
|
case GameObjectDestructibleState.Rebuilding:
|
||||||
{
|
{
|
||||||
if (GetGoInfo().DestructibleBuilding.RebuildingEvent != 0)
|
if (GetGoInfo().DestructibleBuilding.RebuildingEvent != 0 && attackerOrHealer != null)
|
||||||
GameEvents.Trigger(GetGoInfo().DestructibleBuilding.RebuildingEvent, attackerOrHealer, this);
|
GameEvents.Trigger(GetGoInfo().DestructibleBuilding.RebuildingEvent, attackerOrHealer, this);
|
||||||
RemoveFlag(GameObjectFlags.Damaged | GameObjectFlags.Destroyed);
|
RemoveFlag(GameObjectFlags.Damaged | GameObjectFlags.Destroyed);
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ using Framework.Collections;
|
|||||||
using Framework.Constants;
|
using Framework.Constants;
|
||||||
using Game.Maps;
|
using Game.Maps;
|
||||||
using Game.Networking.Packets;
|
using Game.Networking.Packets;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
@@ -531,23 +532,78 @@ namespace Game.Entities
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public uint GetEventScriptId()
|
public List<uint> GetEventScriptSet()
|
||||||
{
|
{
|
||||||
|
List<uint> eventSet = new();
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case GameObjectTypes.Goober:
|
|
||||||
return Goober.eventID;
|
|
||||||
case GameObjectTypes.Chest:
|
case GameObjectTypes.Chest:
|
||||||
return Chest.triggeredEvent;
|
eventSet.Add(Chest.triggeredEvent);
|
||||||
|
break;
|
||||||
case GameObjectTypes.Chair:
|
case GameObjectTypes.Chair:
|
||||||
return Chest.triggeredEvent;
|
eventSet.Add(Chair.triggeredEvent);
|
||||||
|
break;
|
||||||
|
case GameObjectTypes.Goober:
|
||||||
|
eventSet.Add(Goober.eventID);
|
||||||
|
break;
|
||||||
|
case GameObjectTypes.Transport:
|
||||||
|
eventSet.Add(Transport.Reached1stfloor);
|
||||||
|
eventSet.Add(Transport.Reached2ndfloor);
|
||||||
|
eventSet.Add(Transport.Reached3rdfloor);
|
||||||
|
eventSet.Add(Transport.Reached4thfloor);
|
||||||
|
eventSet.Add(Transport.Reached5thfloor);
|
||||||
|
eventSet.Add(Transport.Reached6thfloor);
|
||||||
|
eventSet.Add(Transport.Reached7thfloor);
|
||||||
|
eventSet.Add(Transport.Reached8thfloor);
|
||||||
|
eventSet.Add(Transport.Reached9thfloor);
|
||||||
|
eventSet.Add(Transport.Reached10thfloor);
|
||||||
|
break;
|
||||||
case GameObjectTypes.Camera:
|
case GameObjectTypes.Camera:
|
||||||
return Camera.eventID;
|
eventSet.Add(Camera.eventID);
|
||||||
|
break;
|
||||||
|
case GameObjectTypes.MapObjTransport:
|
||||||
|
eventSet.Add(MoTransport.startEventID);
|
||||||
|
eventSet.Add(MoTransport.stopEventID);
|
||||||
|
break;
|
||||||
|
case GameObjectTypes.FlagDrop:
|
||||||
|
eventSet.Add(FlagDrop.eventID);
|
||||||
|
break;
|
||||||
|
case GameObjectTypes.ControlZone:
|
||||||
|
eventSet.Add(ControlZone.CaptureEventHorde);
|
||||||
|
eventSet.Add(ControlZone.CaptureEventAlliance);
|
||||||
|
eventSet.Add(ControlZone.ContestedEventHorde);
|
||||||
|
eventSet.Add(ControlZone.ContestedEventAlliance);
|
||||||
|
eventSet.Add(ControlZone.ProgressEventHorde);
|
||||||
|
eventSet.Add(ControlZone.ProgressEventAlliance);
|
||||||
|
eventSet.Add(ControlZone.NeutralEventHorde);
|
||||||
|
eventSet.Add(ControlZone.NeutralEventAlliance);
|
||||||
|
break;
|
||||||
|
case GameObjectTypes.DestructibleBuilding:
|
||||||
|
eventSet.Add(DestructibleBuilding.IntactEvent);
|
||||||
|
eventSet.Add(DestructibleBuilding.DamagedEvent);
|
||||||
|
eventSet.Add(DestructibleBuilding.DestroyedEvent);
|
||||||
|
eventSet.Add(DestructibleBuilding.RebuildingEvent);
|
||||||
|
eventSet.Add(DestructibleBuilding.DamageEvent);
|
||||||
|
break;
|
||||||
|
case GameObjectTypes.CapturePoint:
|
||||||
|
eventSet.Add(CapturePoint.ContestedEventHorde);
|
||||||
|
eventSet.Add(CapturePoint.CaptureEventHorde);
|
||||||
|
eventSet.Add(CapturePoint.DefendedEventHorde);
|
||||||
|
eventSet.Add(CapturePoint.ContestedEventAlliance);
|
||||||
|
eventSet.Add(CapturePoint.CaptureEventAlliance);
|
||||||
|
eventSet.Add(CapturePoint.DefendedEventAlliance);
|
||||||
|
break;
|
||||||
case GameObjectTypes.GatheringNode:
|
case GameObjectTypes.GatheringNode:
|
||||||
return GatheringNode.triggeredEvent;
|
eventSet.Add(GatheringNode.triggeredEvent);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return 0;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Erase invalid value added from unused GameEvents data fields
|
||||||
|
eventSet.Remove(0);
|
||||||
|
|
||||||
|
return eventSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
public uint GetTrivialSkillHigh() => type switch
|
public uint GetTrivialSkillHigh() => type switch
|
||||||
|
|||||||
@@ -1462,11 +1462,7 @@ namespace Game
|
|||||||
|
|
||||||
// Load all possible event ids from gameobjects
|
// Load all possible event ids from gameobjects
|
||||||
foreach (var go in _gameObjectTemplateStorage)
|
foreach (var go in _gameObjectTemplateStorage)
|
||||||
{
|
_eventStorage.AddRange(go.Value.GetEventScriptSet());
|
||||||
uint eventId = go.Value.GetEventScriptId();
|
|
||||||
if (eventId != 0)
|
|
||||||
_eventStorage.Add(eventId);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Load all possible event ids from spells
|
// Load all possible event ids from spells
|
||||||
foreach (SpellNameRecord spellNameEntry in CliDB.SpellNameStorage.Values)
|
foreach (SpellNameRecord spellNameEntry in CliDB.SpellNameStorage.Values)
|
||||||
@@ -1511,7 +1507,7 @@ namespace Game
|
|||||||
foreach (var script in sEventScripts)
|
foreach (var script in sEventScripts)
|
||||||
{
|
{
|
||||||
if (!IsValidEvent(script.Key))
|
if (!IsValidEvent(script.Key))
|
||||||
Log.outError(LogFilter.Sql, $"Table `event_scripts` has script (Id: {script.Key}) not referring to any gameobject_template (type 3 data6 field, type 7 data3 field, type 10 data2 field, type 13 data2 field, type 50 data7 field), any taxi path node or any spell effect {SpellEffectName.SendEvent}");
|
Log.outError(LogFilter.Sql, $"Table `event_scripts` has script (Id: {script.Key}) not referring to any gameobject_template (data field referencing GameEvent), any taxi path node or any spell effect {SpellEffectName.SendEvent}");
|
||||||
}
|
}
|
||||||
|
|
||||||
uint oldMSTime = Time.GetMSTime();
|
uint oldMSTime = Time.GetMSTime();
|
||||||
@@ -1532,7 +1528,7 @@ namespace Game
|
|||||||
|
|
||||||
if (!IsValidEvent(eventId))
|
if (!IsValidEvent(eventId))
|
||||||
{
|
{
|
||||||
Log.outError(LogFilter.Sql, $"Event (ID: {eventId}) not referring to any gameobject_template (type 3 data6 field, type 7 data3 field, type 10 data2 field, type 13 data2 field, type 50 data7 field), any taxi path node or any spell effect {SpellEffectName.SendEvent}");
|
Log.outError(LogFilter.Sql, $"Event (ID: {eventId}) not referring to any gameobject_template (data field referencing GameEvent), any taxi path node or any spell effect {SpellEffectName.SendEvent}");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
_eventScriptStorage[eventId] = GetScriptId(scriptName);
|
_eventScriptStorage[eventId] = GetScriptId(scriptName);
|
||||||
|
|||||||
Reference in New Issue
Block a user