Fixes startup

This commit is contained in:
hondacrx
2021-10-10 19:24:01 -04:00
parent 50e8fb802e
commit b0528d1ad3
5 changed files with 78 additions and 92 deletions
+18
View File
@@ -368,6 +368,24 @@ namespace Game.Scripting
public virtual GameObjectAI GetAI(GameObject go) { return null; }
}
public class GenericAreaTriggerScript<AI> : AreaTriggerEntityScript where AI : AreaTriggerAI
{
public GenericAreaTriggerScript(string name, object[] args) : base(name)
{
_args = args;
}
public override AreaTriggerAI GetAI(AreaTrigger me)
{
if (me.GetInstanceScript() != null)
return GetInstanceAI<AI>(me);
else
return (AI)Activator.CreateInstance(typeof(AI), new object[] { me }.Combine(_args));
}
object[] _args;
}
public class AreaTriggerScript : ScriptObject
{
public AreaTriggerScript(string name) : base(name)
+3
View File
@@ -133,6 +133,9 @@ namespace Game.Scripting
case nameof(GameObjectAI):
genericType = typeof(GenericGameObjectScript<>).MakeGenericType(type);
break;
case nameof(AreaTriggerAI):
genericType = typeof(GenericAreaTriggerScript<>).MakeGenericType(type);
break;
case "SpellScriptLoader":
case "AuraScriptLoader":
case "WorldScript":
+6 -21
View File
@@ -64,35 +64,20 @@ namespace Scripts.Spells.DemonHunter
[Script("areatrigger_dh_sigil_of_silence", SpellIds.SigilOfSilenceAoe)]
[Script("areatrigger_dh_sigil_of_misery", SpellIds.SigilOfMiseryAoe)]
[Script("areatrigger_dh_sigil_of_flame", SpellIds.SigilOfFlameAoe)]
class areatrigger_dh_generic_sigil : AreaTriggerEntityScript
class areatrigger_dh_generic_sigil : AreaTriggerAI
{
uint _trigger;
public areatrigger_dh_generic_sigil(string script, uint trigger) : base(script)
public areatrigger_dh_generic_sigil(AreaTrigger at, uint trigger) : base(at)
{
_trigger = trigger;
}
class areatrigger_dh_generic_sigilAI : AreaTriggerAI
public override void OnRemove()
{
uint _trigger;
public areatrigger_dh_generic_sigilAI(AreaTrigger at, uint trigger) : base(at)
{
_trigger = trigger;
}
public override void OnRemove()
{
Unit caster = at.GetCaster();
if (caster != null)
caster.CastSpell(at.GetPosition(), _trigger, new CastSpellExtraArgs());
}
}
public override AreaTriggerAI GetAI(AreaTrigger at)
{
return new areatrigger_dh_generic_sigilAI(at, _trigger);
Unit caster = at.GetCaster();
if (caster != null)
caster.CastSpell(at.GetPosition(), _trigger, new CastSpellExtraArgs());
}
}
+20 -30
View File
@@ -1015,45 +1015,35 @@ namespace Scripts.Spells.Priest
}
[Script] // Angelic Feather areatrigger - created by SPELL_PRIEST_ANGELIC_FEATHER_AREATRIGGER
class areatrigger_pri_angelic_feather : AreaTriggerEntityScript
class areatrigger_pri_angelic_feather : AreaTriggerAI
{
public areatrigger_pri_angelic_feather() : base("areatrigger_pri_angelic_feather") { }
public areatrigger_pri_angelic_feather(AreaTrigger areatrigger) : base(areatrigger) { }
class areatrigger_pri_angelic_featherAI : AreaTriggerAI
// Called when the AreaTrigger has just been initialized, just before added to map
public override void OnInitialize()
{
public areatrigger_pri_angelic_featherAI(AreaTrigger areatrigger) : base(areatrigger) { }
// Called when the AreaTrigger has just been initialized, just before added to map
public override void OnInitialize()
Unit caster = at.GetCaster();
if (caster)
{
Unit caster = at.GetCaster();
if (caster)
{
List<AreaTrigger> areaTriggers = caster.GetAreaTriggers(SpellIds.AngelicFeatherAreatrigger);
List<AreaTrigger> areaTriggers = caster.GetAreaTriggers(SpellIds.AngelicFeatherAreatrigger);
if (areaTriggers.Count >= 3)
areaTriggers.First().SetDuration(0);
}
}
public override void OnUnitEnter(Unit unit)
{
Unit caster = at.GetCaster();
if (caster)
{
if (caster.IsFriendlyTo(unit))
{
// If target already has aura, increase duration to max 130% of initial duration
caster.CastSpell(unit, SpellIds.AngelicFeatherAura, true);
at.SetDuration(0);
}
}
if (areaTriggers.Count >= 3)
areaTriggers.First().SetDuration(0);
}
}
public override AreaTriggerAI GetAI(AreaTrigger areatrigger)
public override void OnUnitEnter(Unit unit)
{
return new areatrigger_pri_angelic_featherAI(areatrigger);
Unit caster = at.GetCaster();
if (caster)
{
if (caster.IsFriendlyTo(unit))
{
// If target already has aura, increase duration to max 130% of initial duration
caster.CastSpell(unit, SpellIds.AngelicFeatherAura, true);
at.SetDuration(0);
}
}
}
}
}
+31 -41
View File
@@ -1044,61 +1044,51 @@ namespace Scripts.Spells.Shaman
// 192078 - Wind Rush Totem (Spell)
[Script] // 12676 - AreaTriggerId
class areatrigger_sha_wind_rush_totem : AreaTriggerEntityScript
class areatrigger_sha_wind_rush_totem : AreaTriggerAI
{
public areatrigger_sha_wind_rush_totem() : base("areatrigger_sha_wind_rush_totem") { }
static int REFRESH_TIME = 4500;
class areatrigger_sha_wind_rush_totemAI : AreaTriggerAI
int _refreshTimer;
public areatrigger_sha_wind_rush_totem(AreaTrigger areatrigger) : base(areatrigger)
{
static int REFRESH_TIME = 4500;
_refreshTimer = REFRESH_TIME;
}
int _refreshTimer;
public areatrigger_sha_wind_rush_totemAI(AreaTrigger areatrigger) : base(areatrigger)
{
_refreshTimer = REFRESH_TIME;
}
public override void OnUpdate(uint diff)
{
_refreshTimer -= (int)diff;
if (_refreshTimer <= 0)
{
Unit caster = at.GetCaster();
if (caster != null)
{
foreach (ObjectGuid guid in at.GetInsideUnits())
{
Unit unit = Global.ObjAccessor.GetUnit(caster, guid);
if (unit != null)
{
if (!caster.IsFriendlyTo(unit))
continue;
caster.CastSpell(unit, SpellIds.WindRush, true);
}
}
}
_refreshTimer += REFRESH_TIME;
}
}
public override void OnUnitEnter(Unit unit)
public override void OnUpdate(uint diff)
{
_refreshTimer -= (int)diff;
if (_refreshTimer <= 0)
{
Unit caster = at.GetCaster();
if (caster != null)
{
if (!caster.IsFriendlyTo(unit))
return;
foreach (ObjectGuid guid in at.GetInsideUnits())
{
Unit unit = Global.ObjAccessor.GetUnit(caster, guid);
if (unit != null)
{
if (!caster.IsFriendlyTo(unit))
continue;
caster.CastSpell(unit, SpellIds.WindRush, true);
caster.CastSpell(unit, SpellIds.WindRush, true);
}
}
}
_refreshTimer += REFRESH_TIME;
}
}
public override AreaTriggerAI GetAI(AreaTrigger areatrigger)
public override void OnUnitEnter(Unit unit)
{
return new areatrigger_sha_wind_rush_totemAI(areatrigger);
Unit caster = at.GetCaster();
if (caster != null)
{
if (!caster.IsFriendlyTo(unit))
return;
caster.CastSpell(unit, SpellIds.WindRush, true);
}
}
}
}