diff --git a/Source/Framework/Constants/ScriptsConst.cs b/Source/Framework/Constants/ScriptsConst.cs index ad4cc9f76..0498580cc 100644 --- a/Source/Framework/Constants/ScriptsConst.cs +++ b/Source/Framework/Constants/ScriptsConst.cs @@ -17,14 +17,38 @@ namespace Framework.Constants { - // AuraScript interface - enum used for runtime checks of script function calls - public enum AuraScriptHookType + public enum SpellScriptState { None = 0, Registration, Loading, Unloading, - EffectApply, + } + + // SpellScript interface - enum used for runtime checks of script function calls + public enum SpellScriptHookType + { + Launch = SpellScriptState.Unloading + 1, + LaunchTarget, + EffectHit, + EffectHitTarget, + EffectSuccessfulDispel, + BeforeHit, + OnHit, + AfterHit, + ObjectAreaTargetSelect, + ObjectTargetSelect, + DestinationTargetSelect, + CheckCast, + BeforeCast, + OnCast, + AfterCast + } + + // AuraScript interface - enum used for runtime checks of script function calls + public enum AuraScriptHookType + { + EffectApply = SpellScriptState.Unloading + 1, EffectAfterApply, EffectRemove, EffectAfterRemove, @@ -52,28 +76,4 @@ namespace Framework.Constants //Apply, //Remove } - - // SpellScript interface - enum used for runtime checks of script function calls - public enum SpellScriptHookType - { - None = 0, - Registration, - Loading, - Unloading, - Launch, - LaunchTarget, - EffectHit, - EffectHitTarget, - EffectSuccessfulDispel, - BeforeHit, - OnHit, - AfterHit, - ObjectAreaTargetSelect, - ObjectTargetSelect, - DestinationTargetSelect, - CheckCast, - BeforeCast, - OnCast, - AfterCast - } } diff --git a/Source/Game/Scripting/SpellScript.cs b/Source/Game/Scripting/SpellScript.cs index e4b881c67..5baf031c5 100644 --- a/Source/Game/Scripting/SpellScript.cs +++ b/Source/Game/Scripting/SpellScript.cs @@ -20,7 +20,6 @@ using Game.Entities; using Game.Spells; using System; using System.Collections.Generic; -using System.Diagnostics.Contracts; namespace Game.Scripting { @@ -31,7 +30,7 @@ namespace Game.Scripting // DO NOT OVERRIDE THESE IN SCRIPTS public BaseSpellScript() { - m_currentScriptState = SpellScriptHookType.None; + m_currentScriptState = (byte)SpellScriptState.None; } public virtual bool _Validate(SpellInfo entry) @@ -61,20 +60,20 @@ namespace Game.Scripting public void _Register() { - m_currentScriptState = SpellScriptHookType.Registration; + m_currentScriptState = (byte)SpellScriptState.Registration; Register(); - m_currentScriptState = SpellScriptHookType.None; + m_currentScriptState = (byte)SpellScriptState.None; } public void _Unload() { - m_currentScriptState = SpellScriptHookType.Unloading; + m_currentScriptState = (byte)SpellScriptState.Unloading; Unload(); - m_currentScriptState = SpellScriptHookType.None; + m_currentScriptState = (byte)SpellScriptState.None; } public void _Init(string scriptname, uint spellId) { - m_currentScriptState = SpellScriptHookType.None; + m_currentScriptState = (byte)SpellScriptState.None; m_scriptName = scriptname; m_scriptSpellId = spellId; } @@ -88,7 +87,7 @@ namespace Game.Scripting protected EffectHook(uint effIndex) { // effect index must be in range <0;2>, allow use of special effindexes - Contract.Assert(_effIndex == SpellConst.EffectAll || _effIndex == SpellConst.EffectFirstFound || _effIndex < SpellConst.MaxEffects); + Cypher.Assert(_effIndex == SpellConst.EffectAll || _effIndex == SpellConst.EffectFirstFound || _effIndex < SpellConst.MaxEffects); _effIndex = effIndex; } @@ -123,8 +122,7 @@ namespace Game.Scripting uint _effIndex; } - public SpellScriptHookType m_currentScriptState { get; set; } - public AuraScriptHookType m_currentAuraScriptState { get; set; } + public byte m_currentScriptState { get; set; } public string m_scriptName { get; set; } public uint m_scriptSpellId { get; set; } @@ -393,7 +391,7 @@ namespace Game.Scripting public bool _Load(Spell spell) { m_spell = spell; - _PrepareScriptCall(SpellScriptHookType.Loading); + _PrepareScriptCall((SpellScriptHookType)SpellScriptState.Loading); bool load = Load(); _FinishScriptCall(); return load; @@ -407,19 +405,19 @@ namespace Game.Scripting public bool _IsDefaultEffectPrevented(uint effIndex) { return Convert.ToBoolean(m_hitPreventDefaultEffectMask & (1 << (int)effIndex)); } public void _PrepareScriptCall(SpellScriptHookType hookType) { - m_currentScriptState = hookType; + m_currentScriptState = (byte)hookType; } public void _FinishScriptCall() { - m_currentScriptState = SpellScriptHookType.None; + m_currentScriptState = (byte)SpellScriptState.None; } public bool IsInCheckCastHook() { - return m_currentScriptState == SpellScriptHookType.CheckCast; + return m_currentScriptState == (byte)SpellScriptHookType.CheckCast; } public bool IsInTargetHook() { - switch (m_currentScriptState) + switch ((SpellScriptHookType)m_currentScriptState) { case SpellScriptHookType.LaunchTarget: case SpellScriptHookType.EffectHitTarget: @@ -433,12 +431,12 @@ namespace Game.Scripting } public bool IsInHitPhase() { - return (m_currentScriptState >= SpellScriptHookType.EffectHit && m_currentScriptState < SpellScriptHookType.AfterHit + 1); + return (m_currentScriptState >= (byte)SpellScriptHookType.EffectHit && m_currentScriptState < (byte)SpellScriptHookType.AfterHit + 1); } public bool IsInEffectHook() { - return (m_currentScriptState >= SpellScriptHookType.Launch && m_currentScriptState <= SpellScriptHookType.EffectHitTarget) - || m_currentScriptState == SpellScriptHookType.EffectSuccessfulDispel; + return (m_currentScriptState >= (byte)SpellScriptHookType.Launch && m_currentScriptState <= (byte)SpellScriptHookType.EffectHitTarget) + || m_currentScriptState == (byte)SpellScriptHookType.EffectSuccessfulDispel; } Spell m_spell; @@ -705,8 +703,7 @@ namespace Game.Scripting public SpellEffectInfo GetEffectInfo() { - Contract.Assert(IsInEffectHook(), - $"Script: `{m_scriptName}` Spell: `{m_scriptSpellId}`: function SpellScript::GetEffectInfo was called, but function has no effect in current hook!"); + Cypher.Assert(IsInEffectHook(), $"Script: `{m_scriptName}` Spell: `{m_scriptSpellId}`: function SpellScript::GetEffectInfo was called, but function has no effect in current hook!"); return m_spell.effectInfo; } @@ -1116,29 +1113,29 @@ namespace Game.Scripting public bool _Load(Aura aura) { m_aura = aura; - _PrepareScriptCall(AuraScriptHookType.Loading, null); + _PrepareScriptCall((AuraScriptHookType)SpellScriptState.Loading, null); bool load = Load(); _FinishScriptCall(); return load; } public void _PrepareScriptCall(AuraScriptHookType hookType, AuraApplication aurApp = null) { - m_scriptStates.Push(new ScriptStateStore((byte)m_currentScriptState, m_auraApplication, m_defaultActionPrevented)); - m_currentAuraScriptState = hookType; + m_scriptStates.Push(new ScriptStateStore(m_currentScriptState, m_auraApplication, m_defaultActionPrevented)); + m_currentScriptState = (byte)hookType; m_defaultActionPrevented = false; m_auraApplication = aurApp; } public void _FinishScriptCall() { ScriptStateStore stateStore = m_scriptStates.Peek(); - m_currentAuraScriptState = (AuraScriptHookType)stateStore._currentScriptState; + m_currentScriptState = stateStore._currentScriptState; m_auraApplication = stateStore._auraApplication; m_defaultActionPrevented = stateStore._defaultActionPrevented; m_scriptStates.Pop(); } public bool _IsDefaultActionPrevented() { - switch (m_currentAuraScriptState) + switch ((AuraScriptHookType)m_currentScriptState) { case AuraScriptHookType.EffectApply: case AuraScriptHookType.EffectRemove: @@ -1150,8 +1147,7 @@ namespace Game.Scripting case AuraScriptHookType.EffectProc: return m_defaultActionPrevented; default: - Contract.Assert(false, "AuraScript._IsDefaultActionPrevented is called in a wrong place"); - return false; + throw new Exception("AuraScript._IsDefaultActionPrevented is called in a wrong place"); } } @@ -1303,7 +1299,7 @@ namespace Game.Scripting // prevents default action of a hook from being executed (works only while called in a hook which default action can be prevented) public void PreventDefaultAction() { - switch (m_currentAuraScriptState) + switch ((AuraScriptHookType)m_currentScriptState) { case AuraScriptHookType.EffectApply: case AuraScriptHookType.EffectRemove: @@ -1397,7 +1393,7 @@ namespace Game.Scripting // return null is when the call happens in an unsupported hook, in other cases, it is always valid public Unit GetTarget() { - switch (m_currentAuraScriptState) + switch ((AuraScriptHookType)m_currentScriptState) { case AuraScriptHookType.EffectApply: case AuraScriptHookType.EffectRemove: