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;
+ }
+ }
+}