Fixes startup
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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":
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user