diff --git a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj index f0b4d371..a24629b3 100644 --- a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj +++ b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj @@ -85,6 +85,13 @@ + + + + + + + @@ -340,7 +347,6 @@ - diff --git a/FFXIVClassic Map Server/actors/chara/Character.cs b/FFXIVClassic Map Server/actors/chara/Character.cs index 0cdf17d6..92262271 100644 --- a/FFXIVClassic Map Server/actors/chara/Character.cs +++ b/FFXIVClassic Map Server/actors/chara/Character.cs @@ -5,6 +5,7 @@ using FFXIVClassic_Map_Server.actors.group; using FFXIVClassic_Map_Server.Actors.Chara; using FFXIVClassic_Map_Server.packets.send.actor; using FFXIVClassic_Map_Server.utils; +using FFXIVClassic_Map_Server.actors.chara.ai; using System; namespace FFXIVClassic_Map_Server.Actors @@ -62,6 +63,8 @@ namespace FFXIVClassic_Map_Server.Actors public DateTime lastAiUpdate; + public AIContainer aiContainer; + public Character(uint actorID) : base(actorID) { //Init timer array to "notimer" diff --git a/FFXIVClassic Map Server/actors/chara/ai/AIContainer.cs b/FFXIVClassic Map Server/actors/chara/ai/AIContainer.cs new file mode 100644 index 00000000..f0217a6c --- /dev/null +++ b/FFXIVClassic Map Server/actors/chara/ai/AIContainer.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using FFXIVClassic_Map_Server.Actors; +using FFXIVClassic_Map_Server.actors.chara.ai.state; +using FFXIVClassic_Map_Server.actors.chara.ai.controllers; + +// port of ai code in dsp by kjLotus +namespace FFXIVClassic_Map_Server.actors.chara.ai +{ + // todo: actually implement stuff + class AIContainer + { + private Character owner; + private Controller controller; + private List states; + private DateTime latestUpdate; + private DateTime prevUpdate; + + public AIContainer(Actors.Character actor) + { + this.owner = actor; + } + + public void ChangeController(Controller controller) + { + this.controller = controller; + } + } +} diff --git a/FFXIVClassic Map Server/actors/chara/ai/controllers/Controller.cs b/FFXIVClassic Map Server/actors/chara/ai/controllers/Controller.cs new file mode 100644 index 00000000..87bc3391 --- /dev/null +++ b/FFXIVClassic Map Server/actors/chara/ai/controllers/Controller.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FFXIVClassic_Map_Server.actors.chara.ai.controllers +{ + class Controller + { + } +} diff --git a/FFXIVClassic Map Server/actors/chara/ai/controllers/MobController.cs b/FFXIVClassic Map Server/actors/chara/ai/controllers/MobController.cs new file mode 100644 index 00000000..c8a1ba6c --- /dev/null +++ b/FFXIVClassic Map Server/actors/chara/ai/controllers/MobController.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FFXIVClassic_Map_Server.actors.chara.ai.controllers +{ + class MobController : Controller + { + } +} diff --git a/FFXIVClassic Map Server/actors/chara/ai/controllers/PlayerController.cs b/FFXIVClassic Map Server/actors/chara/ai/controllers/PlayerController.cs new file mode 100644 index 00000000..b067dc58 --- /dev/null +++ b/FFXIVClassic Map Server/actors/chara/ai/controllers/PlayerController.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FFXIVClassic_Map_Server.actors.chara.ai.controllers +{ + class PlayerController : Controller + { + } +} diff --git a/FFXIVClassic Map Server/actors/chara/ai/state/AttackState.cs b/FFXIVClassic Map Server/actors/chara/ai/state/AttackState.cs new file mode 100644 index 00000000..f8e38efe --- /dev/null +++ b/FFXIVClassic Map Server/actors/chara/ai/state/AttackState.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using FFXIVClassic_Map_Server.Actors; + +namespace FFXIVClassic_Map_Server.actors.chara.ai.state +{ + class AttackState : State + { + public AttackState(Character owner, Character target) : + base(owner, target) + { + this.startTime = DateTime.Now; + } + + public override void OnStart() + { + + } + + public override void Update(ref DateTime time) + { + + } + + public override void OnInterrupt() + { + + } + + public override void OnComplete() + { + + } + + public override void TryInterrupt() + { + + } + } +} diff --git a/FFXIVClassic Map Server/actors/chara/ai/state/State.cs b/FFXIVClassic Map Server/actors/chara/ai/state/State.cs new file mode 100644 index 00000000..8d12a508 --- /dev/null +++ b/FFXIVClassic Map Server/actors/chara/ai/state/State.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using FFXIVClassic_Map_Server.Actors; +using FFXIVClassic.Common; + +namespace FFXIVClassic_Map_Server.actors.chara.ai.state +{ + class State + { + protected Character owner; + protected Character target; + + protected bool canInterrupt; + protected bool interrupt; + + protected DateTime startTime; + + protected BasePacket errorPacket; + + public State(Character owner, Character target) + { + this.owner = owner; + this.target = target; + this.canInterrupt = true; + this.interrupt = false; + } + + public virtual void Update(ref DateTime time) { } + public virtual void OnStart() { } + public virtual void OnInterrupt() { } + public virtual void OnComplete() { } + + public virtual void TryInterrupt() { } + + public bool CanInterrupt() + { + return canInterrupt; + } + + public void SetInterrupted(bool interrupt) + { + this.interrupt = interrupt; + } + } +} diff --git a/FFXIVClassic Map Server/actors/chara/ai/utils/AttackUtils.cs b/FFXIVClassic Map Server/actors/chara/ai/utils/AttackUtils.cs new file mode 100644 index 00000000..48f819aa --- /dev/null +++ b/FFXIVClassic Map Server/actors/chara/ai/utils/AttackUtils.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using FFXIVClassic_Map_Server.Actors; +namespace FFXIVClassic_Map_Server.actors.chara.ai.utils +{ + static class AttackUtils + { + public static int CalculateDamage(ref Character attacker, ref Character defender) + { + int dmg = CalculateBaseDamage(ref attacker, ref defender); + + return dmg; + } + public static int CalculateBaseDamage(ref Character attacker, ref Character defender) + { + return 0; + } + } +}