First try at making spells in SmartAI

Signed-off-by: hondacrx <prelude_20032002@yahoo.com>
This commit is contained in:
hondacrx
2017-07-10 14:23:51 -04:00
parent 40a4685a9c
commit 809e601945
7 changed files with 412 additions and 60 deletions
+47 -5
View File
@@ -1048,6 +1048,48 @@ namespace Game.AI
SmartScript mScript;
}
public class SmartSpell : SpellScript
{
public override bool Load()
{
mScript.OnInitialize(GetSpell());
scriptHolders = Global.SmartAIMgr.GetScript((int)GetSpellInfo().Id, SmartScriptType.Spell);
return true;
}
void HandleEffectHit(uint effIndex)
{
mScript.ProcessEventsFor(SmartEvents.SpellEffectHit);
}
void HandleEffectHitTarget(uint effIndex)
{
mScript.ProcessEventsFor(SmartEvents.SpellEffectHitTarget);
}
public override void Register()
{
foreach (var holder in scriptHolders)
{
switch (holder.GetEventType())
{
case SmartEvents.SpellEffectHit:
OnEffectHit.Add(new EffectHandler(HandleEffectHit, holder.Event.spell.effIndex, SpellEffectName.ScriptEffect));
OnEffectHit.Add(new EffectHandler(HandleEffectHit, holder.Event.spell.effIndex, SpellEffectName.Dummy));
break;
case SmartEvents.SpellEffectHitTarget:
OnEffectHitTarget.Add(new EffectHandler(HandleEffectHitTarget, holder.Event.spell.effIndex, SpellEffectName.ScriptEffect));
OnEffectHitTarget.Add(new EffectHandler(HandleEffectHitTarget, holder.Event.spell.effIndex, SpellEffectName.Dummy));
break;
}
}
}
List<SmartScriptHolder> scriptHolders = new List<SmartScriptHolder>();
SmartScript mScript = new SmartScript();
}
[Script]
class SmartTrigger : AreaTriggerScript
{
@@ -1060,7 +1102,7 @@ namespace Game.AI
Log.outDebug(LogFilter.ScriptsAi, "AreaTrigger {0} is using SmartTrigger script", trigger.Id);
SmartScript script = new SmartScript();
script.OnInitialize(null, trigger);
script.OnInitialize(trigger);
script.ProcessEventsFor(SmartEvents.AreatriggerOntrigger, player, trigger.Id);
return true;
}
@@ -1074,28 +1116,28 @@ namespace Game.AI
public override void OnSceneStart(Player player, uint sceneInstanceID, SceneTemplate sceneTemplate)
{
SmartScript smartScript = new SmartScript();
smartScript.OnInitialize(null, null, sceneTemplate);
smartScript.OnInitialize(sceneTemplate);
smartScript.ProcessEventsFor(SmartEvents.SceneStart, player);
}
public override void OnSceneTriggerEvent(Player player, uint sceneInstanceID, SceneTemplate sceneTemplate, string triggerName)
{
SmartScript smartScript = new SmartScript();
smartScript.OnInitialize(null, null, sceneTemplate);
smartScript.OnInitialize(sceneTemplate);
smartScript.ProcessEventsFor(SmartEvents.SceneTrigger, player, 0, 0, false, null, null, triggerName);
}
public override void OnSceneCancel(Player player, uint sceneInstanceID, SceneTemplate sceneTemplate)
{
SmartScript smartScript = new SmartScript();
smartScript.OnInitialize(null, null, sceneTemplate);
smartScript.OnInitialize(sceneTemplate);
smartScript.ProcessEventsFor(SmartEvents.SceneCancel, player);
}
public override void OnSceneComplete(Player player, uint sceneInstanceID, SceneTemplate sceneTemplate)
{
SmartScript smartScript = new SmartScript();
smartScript.OnInitialize(null, null, sceneTemplate);
smartScript.OnInitialize(sceneTemplate);
smartScript.ProcessEventsFor(SmartEvents.SceneComplete, player);
}
}