summaryrefslogtreecommitdiff
path: root/Client/Assets/Behavior Designer/AI/Actions
diff options
context:
space:
mode:
Diffstat (limited to 'Client/Assets/Behavior Designer/AI/Actions')
-rw-r--r--Client/Assets/Behavior Designer/AI/Actions/XAIActionCastSkill.cs166
-rw-r--r--Client/Assets/Behavior Designer/AI/Actions/XAIActionCastSkill.cs.meta8
-rw-r--r--Client/Assets/Behavior Designer/AI/Actions/XAIActionMove.cs280
-rw-r--r--Client/Assets/Behavior Designer/AI/Actions/XAIActionMove.cs.meta8
-rw-r--r--Client/Assets/Behavior Designer/AI/Actions/XAIActionOther.cs403
-rw-r--r--Client/Assets/Behavior Designer/AI/Actions/XAIActionOther.cs.meta8
-rw-r--r--Client/Assets/Behavior Designer/AI/Actions/XAIActionTarget.cs236
-rw-r--r--Client/Assets/Behavior Designer/AI/Actions/XAIActionTarget.cs.meta8
8 files changed, 1117 insertions, 0 deletions
diff --git a/Client/Assets/Behavior Designer/AI/Actions/XAIActionCastSkill.cs b/Client/Assets/Behavior Designer/AI/Actions/XAIActionCastSkill.cs
new file mode 100644
index 00000000..9db35f96
--- /dev/null
+++ b/Client/Assets/Behavior Designer/AI/Actions/XAIActionCastSkill.cs
@@ -0,0 +1,166 @@
+using UnityEngine;
+using System.Collections.Generic;
+using BehaviorDesigner.Runtime;
+using BehaviorDesigner.Runtime.Tasks;
+
+public enum ComboSkillType
+{
+ StartSkill,
+ ComboSkill,
+}
+
+public class PhysicalAttack : Action
+{
+ public SharedTransform mAIArgTarget;
+
+ public override TaskStatus OnUpdate()
+ {
+ if (mAIArgTarget.Value == null)
+ return TaskStatus.Failure;
+
+ if (AIMgrUtil.GetAIMgrInterface().TryCastPhysicalSkill(transform.gameObject, mAIArgTarget.Value.gameObject))
+ return TaskStatus.Success;
+ else
+ return TaskStatus.Failure;
+ }
+}
+
+public class TryCastQTE : Action
+{
+ public override TaskStatus OnUpdate()
+ {
+ if (AIMgrUtil.GetAIMgrInterface().CastQTESkill(transform.gameObject))
+ return TaskStatus.Success;
+ else
+ return TaskStatus.Failure;
+ }
+}
+
+public class CastDash : Action
+{
+ public override TaskStatus OnUpdate()
+ {
+ if (AIMgrUtil.GetAIMgrInterface().CastDashSkill(transform.gameObject))
+ return TaskStatus.Success;
+ else
+ return TaskStatus.Failure;
+ }
+}
+
+public class CastStartSkill : Action
+{
+ public SharedTransform mAIArgTarget;
+ public override TaskStatus OnUpdate()
+ {
+ return TaskStatus.Failure;
+ }
+}
+
+public class CastNextSkill : Action
+{
+ public SharedTransform mAIArgTarget;
+ public override TaskStatus OnUpdate()
+ {
+ return TaskStatus.Failure;
+ }
+}
+
+public class FilterSkill : Action
+{
+ public SharedTransform mAIArgTarget;
+ //public bool mAIArgUseInstall;
+ public bool mAIArgUseMP;
+ public bool mAIArgUseName;
+ public bool mAIArgUseHP;
+ public bool mAIArgUseCoolDown;
+ public bool mAIArgUseAttackField;
+ public bool mAIArgUseCombo;
+ public bool mAIArgUseInstall = false;
+ public ComboSkillType mAIArgSkillType;
+ public string mAIArgSkillName;
+ public bool mAIArgDetectAllPlayInAttackField;
+ public int mAIArgMaxSkillNum;
+
+ public override TaskStatus OnUpdate()
+ {
+ XUtliPoolLib.FilterSkillArg skillArg = new XUtliPoolLib.FilterSkillArg();
+ skillArg.mAIArgTarget = mAIArgTarget.Value;
+ skillArg.mAIArgUseMP = mAIArgUseMP;
+ skillArg.mAIArgUseName = mAIArgUseName;
+ skillArg.mAIArgUseHP = mAIArgUseHP;
+ skillArg.mAIArgUseCoolDown = mAIArgUseCoolDown;
+ skillArg.mAIArgUseAttackField = mAIArgUseAttackField;
+ skillArg.mAIArgUseCombo = mAIArgUseCombo;
+ skillArg.mAIArgUseInstall = mAIArgUseInstall;
+ skillArg.mAIArgSkillType = (int)mAIArgSkillType;
+ skillArg.mAIArgSkillName = mAIArgSkillName;
+ skillArg.mAIArgDetectAllPlayInAttackField = mAIArgDetectAllPlayInAttackField;
+ skillArg.mAIArgMaxSkillNum = mAIArgMaxSkillNum;
+
+ if (AIMgrUtil.GetAIMgrInterface().SelectSkill(transform.gameObject, skillArg))
+ return TaskStatus.Success;
+ else
+ return TaskStatus.Failure;
+ }
+}
+
+public class DoSelectSkillInOrder : Action
+{
+ public override TaskStatus OnUpdate()
+ {
+ if (AIMgrUtil.GetAIMgrInterface().DoSelectInOrder(transform.gameObject))
+ return TaskStatus.Success;
+ else
+ return TaskStatus.Failure;
+ }
+}
+
+public class DoSelectSkillRandom : Action
+{
+ public override TaskStatus OnUpdate()
+ {
+ if (AIMgrUtil.GetAIMgrInterface().DoSelectRandom(transform.gameObject))
+ return TaskStatus.Success;
+ else
+ return TaskStatus.Failure;
+ }
+}
+
+public class DoCastSkill : Action
+{
+ public SharedTransform mAIArgTarget;
+ public override TaskStatus OnUpdate()
+ {
+ if (mAIArgTarget.Value == null)
+ {
+ if (AIMgrUtil.GetAIMgrInterface().DoCastSkill(transform.gameObject, null))
+ return TaskStatus.Success;
+ else
+ return TaskStatus.Failure;
+ }
+ else
+ {
+ if (AIMgrUtil.GetAIMgrInterface().DoCastSkill(transform.gameObject, mAIArgTarget.Value.gameObject))
+ return TaskStatus.Success;
+ else
+ return TaskStatus.Failure;
+ }
+ }
+}
+
+public class StopCastingSkill : Action
+{
+ public override TaskStatus OnUpdate()
+ {
+ if (AIMgrUtil.GetAIMgrInterface().StopCastingSkill(transform.gameObject))
+ return TaskStatus.Success;
+ else
+ return TaskStatus.Failure;
+ }
+}
+
+public class IsInSkillAttackField : Action
+{
+ public SharedString mAIArgUID;
+ public SharedInt mAIArgSkillID;
+} \ No newline at end of file
diff --git a/Client/Assets/Behavior Designer/AI/Actions/XAIActionCastSkill.cs.meta b/Client/Assets/Behavior Designer/AI/Actions/XAIActionCastSkill.cs.meta
new file mode 100644
index 00000000..78890f07
--- /dev/null
+++ b/Client/Assets/Behavior Designer/AI/Actions/XAIActionCastSkill.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 75e3739c363b7ee42a598470e8cb4378
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
diff --git a/Client/Assets/Behavior Designer/AI/Actions/XAIActionMove.cs b/Client/Assets/Behavior Designer/AI/Actions/XAIActionMove.cs
new file mode 100644
index 00000000..132e6279
--- /dev/null
+++ b/Client/Assets/Behavior Designer/AI/Actions/XAIActionMove.cs
@@ -0,0 +1,280 @@
+using UnityEngine;
+using System.Collections.Generic;
+using BehaviorDesigner.Runtime;
+using BehaviorDesigner.Runtime.Tasks;
+using XUtliPoolLib;
+
+public enum MoveDirection
+{
+ TowardTarget = 1,
+ ReverseTarget = 2,
+ SelfFaceDir = 3,
+ ReverseFaceDir = 4,
+}
+
+public enum SetDestWay
+{
+ Target = 1,
+ BornPos = 2,
+ NavPos = 3,
+}
+
+public enum AdjustDirection
+{
+ TargetDir = 1,
+ TargetFace = 2,
+ SelfFace = 3,
+}
+
+public class NavToTarget : Action
+{
+ public SharedTransform mAIArgTarget;
+ public SharedTransform mAIArgNavTarget;
+ public SharedVector3 mAIArgNavPos;
+
+ public override TaskStatus OnUpdate()
+ {
+ if (mAIArgTarget.GetValue() == null)
+ {
+ if (mAIArgNavTarget.GetValue() == null)
+ {
+ if (mAIArgNavPos.Value == Vector3.zero)
+ return TaskStatus.Failure;
+ else
+ {
+ if (AIMgrUtil.GetAIMgrInterface().ActionNav(transform.gameObject, mAIArgNavPos.Value))
+ return TaskStatus.Success;
+ else
+ return TaskStatus.Failure;
+ }
+
+ }
+ else
+ {
+ if (AIMgrUtil.GetAIMgrInterface().NavToTarget(transform.gameObject, mAIArgNavTarget.Value.gameObject))
+ return TaskStatus.Success;
+ else
+ return TaskStatus.Failure;
+ }
+ }
+ else
+ {
+ if (AIMgrUtil.GetAIMgrInterface().NavToTarget(transform.gameObject, mAIArgTarget.Value.gameObject))
+ return TaskStatus.Success;
+ else
+ return TaskStatus.Failure;
+ }
+
+ //return TaskStatus.Success;
+ }
+}
+
+public class RotateToTarget : Action
+{
+ public override TaskStatus OnUpdate()
+ {
+ if (AIMgrUtil.GetAIMgrInterface().RotateToTarget(transform.gameObject))
+ return TaskStatus.Success;
+ else
+ return TaskStatus.Failure;
+ }
+}
+
+public class DetectEnimyInSight : Action
+{
+ public override TaskStatus OnUpdate()
+ {
+ if (AIMgrUtil.GetAIMgrInterface().DetectEnimyInSight(transform.gameObject))
+ return TaskStatus.Success;
+ else
+ return TaskStatus.Failure;
+ }
+}
+
+public class ActionMove : Action
+{
+ public SharedVector3 mAIArgMoveDir;
+ public SharedVector3 mAIArgMoveDest;
+ public SharedFloat mAIArgMoveSpeed;
+
+ public override TaskStatus OnUpdate()
+ {
+ if ((mAIArgMoveDest.Value - transform.position).magnitude <= 0.01f)
+ return TaskStatus.Failure;
+
+ if (mAIArgMoveDir.Value == Vector3.zero)
+ {
+ mAIArgMoveDir.Value = (mAIArgMoveDest.Value - transform.position).normalized;
+ mAIArgMoveDir.Value.Set(mAIArgMoveDir.Value.x, 0, mAIArgMoveDir.Value.z);
+ }
+
+ if (mAIArgMoveDest.Value == Vector3.zero)
+ {
+ mAIArgMoveDest.Value = transform.position + mAIArgMoveDir.Value.normalized * 50;
+ }
+
+ if (AIMgrUtil.GetAIMgrInterface().ActionMove(transform.gameObject, mAIArgMoveDir.Value, mAIArgMoveDest.Value, mAIArgMoveSpeed.Value))
+ return TaskStatus.Success;
+ else
+ return TaskStatus.Failure;
+ }
+}
+
+
+public class SetDest : Action
+{
+ public SharedVector3 mAIArgFinalDest;
+ public SharedTransform mAIArgTarget;
+ public SharedTransform mAIArgNav;
+ public SharedVector3 mAIArgBornPos;
+ public SharedInt mAIArgTickCount;
+
+ public float mAIArgRandomMax;
+
+ public float mAIArgAdjustAngle;
+ public SharedFloat mAIArgAdjustLength;
+ public AdjustDirection mAIArgAdjustDir;
+
+ public SetDestWay mAIArgSetDestType;
+
+ private Vector3 _pos_vec;
+
+ public override void OnAwake()
+ {
+ base.OnAwake();
+
+ _pos_vec = new Vector3(1.0f, 0, 1.0f);
+ }
+
+ public override TaskStatus OnUpdate()
+ {
+ switch (mAIArgSetDestType)
+ {
+ case SetDestWay.Target:
+ if (mAIArgTarget.Value == null)
+ return TaskStatus.Failure;
+ mAIArgFinalDest.Value = mAIArgTarget.Value.position;
+ break;
+ case SetDestWay.BornPos:
+ //if (mAIArgBornPos.Value == null)
+ // return TaskStatus.Failure;
+ mAIArgFinalDest.Value = mAIArgBornPos.Value;
+ break;
+ case SetDestWay.NavPos:
+ if (mAIArgNav.Value == null)
+ return TaskStatus.Failure;
+ mAIArgFinalDest.Value = mAIArgNav.Value.position;
+ break;
+ }
+
+ if (mAIArgAdjustLength.Value != 0)
+ {
+ Vector3 vec = Vector3.zero;
+
+ if (mAIArgAdjustDir == AdjustDirection.TargetDir)
+ vec = transform.position - mAIArgFinalDest.Value;
+ else if (mAIArgAdjustDir == AdjustDirection.TargetFace && mAIArgTarget.Value != null)
+ vec = mAIArgTarget.Value.forward.normalized;
+ else if (mAIArgAdjustDir == AdjustDirection.SelfFace)
+ vec = transform.forward.normalized;
+
+ int randcount = mAIArgTickCount.Value;
+
+ Vector3 adjustDir = (Quaternion.Euler(new Vector3(0, (randcount % 2) * mAIArgAdjustAngle * 2 - mAIArgAdjustAngle, 0)) * vec);
+ Vector3 dest = mAIArgFinalDest.Value + adjustDir.normalized * mAIArgAdjustLength.Value;
+
+ if (!AIMgrUtil.GetAIMgrInterface().IsPointInMap(dest))
+ {
+ for (int i=0; i<18; i++)
+ {
+ float angle = mAIArgAdjustAngle + i * 10;
+ adjustDir = (Quaternion.Euler(new Vector3(0, (randcount % 2) * angle * 2 - angle, 0)) * vec);
+ dest = mAIArgFinalDest.Value + adjustDir.normalized * mAIArgAdjustLength.Value;
+
+ if (AIMgrUtil.GetAIMgrInterface().IsPointInMap(dest))
+ break;
+
+ angle = mAIArgAdjustAngle - i * 10;
+ adjustDir = (Quaternion.Euler(new Vector3(0, (randcount % 2) * angle * 2 - angle, 0)) * vec);
+ dest = mAIArgFinalDest.Value + adjustDir.normalized * mAIArgAdjustLength.Value;
+
+ if (AIMgrUtil.GetAIMgrInterface().IsPointInMap(dest))
+ break;
+ }
+ }
+ mAIArgFinalDest.Value = dest;
+ }
+
+ if (mAIArgRandomMax > 0)
+ {
+ _pos_vec.x = (float)XCommon.singleton.RandomFloat(-0.5f, 0.5f);
+ _pos_vec.z = (float)XCommon.singleton.RandomFloat(-0.5f, 0.5f);
+ mAIArgFinalDest.Value += mAIArgRandomMax * _pos_vec.normalized;
+ }
+
+ return TaskStatus.Success;
+ }
+}
+
+public class MoveStratage : Action
+{
+ public SharedTransform mAIArgTarget;
+ public int mAIArgStratageIndex;
+ public SharedVector3 mAIArgFinalDest;
+
+ public override TaskStatus OnUpdate()
+ {
+ return TaskStatus.Success;
+ }
+}
+
+public class ActionRotate : Action
+{
+ public enum RotateType
+ {
+ Relative = 0,
+ Absolute = 1,
+ }
+
+ public float mAIArgRotDegree;
+ public float mAIArgRotSpeed;
+ public RotateType mAIArgRotType;
+
+ public override TaskStatus OnUpdate()
+ {
+ if (AIMgrUtil.GetAIMgrInterface().ActionRotate(transform.gameObject, mAIArgRotDegree, mAIArgRotSpeed, XFastEnumIntEqualityComparer<RotateType>.ToInt(mAIArgRotType)))
+ return TaskStatus.Success;
+ else
+ return TaskStatus.Failure;
+ }
+}
+
+public class ConditionCanReach : Action
+{
+ public SharedInt mAIArgTemplateid;
+ public SharedVector3 mAIArgDestPos;
+
+ public override TaskStatus OnUpdate()
+ {
+ return TaskStatus.Success;
+ }
+}
+
+public class Navigation : Action
+{
+ public SharedInt mAIArgMoveDir;
+ public float mAIArgPatrolPointRadius;
+ public bool mAIArgIsGoForward;
+
+ private int oldDir = 1;
+
+ public override TaskStatus OnUpdate()
+ {
+ int olddir = oldDir;
+ oldDir = mAIArgMoveDir.Value;
+ if (AIMgrUtil.GetAIMgrInterface().UpdateNavigation(transform.gameObject, oldDir, olddir))
+ return TaskStatus.Success;
+ else
+ return TaskStatus.Failure;
+ }
+} \ No newline at end of file
diff --git a/Client/Assets/Behavior Designer/AI/Actions/XAIActionMove.cs.meta b/Client/Assets/Behavior Designer/AI/Actions/XAIActionMove.cs.meta
new file mode 100644
index 00000000..2ed70cfd
--- /dev/null
+++ b/Client/Assets/Behavior Designer/AI/Actions/XAIActionMove.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 39ab5df0181b88641b7ad24e1a862321
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
diff --git a/Client/Assets/Behavior Designer/AI/Actions/XAIActionOther.cs b/Client/Assets/Behavior Designer/AI/Actions/XAIActionOther.cs
new file mode 100644
index 00000000..e7a98554
--- /dev/null
+++ b/Client/Assets/Behavior Designer/AI/Actions/XAIActionOther.cs
@@ -0,0 +1,403 @@
+using UnityEngine;
+using System.Collections.Generic;
+using BehaviorDesigner.Runtime;
+using BehaviorDesigner.Runtime.Tasks;
+using XUtliPoolLib;
+
+public enum AIMsgType
+{
+ ExtString = 0,
+ StringCmd = 1,
+}
+
+public enum AIMsgTarget
+{
+ Ally = 0,
+ Role,
+ Boss,
+ Monster,
+ Enemy,
+ All,
+ LevelMgr,
+ GlobalAI,
+}
+
+public enum SetEnmityType
+{
+ HateValue = 1,
+ Provoke,
+ ProvokeIfNotProvoked,
+ Clear
+}
+
+public class Shout : Action
+{
+ public override TaskStatus OnUpdate()
+ {
+ return TaskStatus.Success;
+ }
+}
+
+public class SetExString : Action
+{
+ public override TaskStatus OnUpdate()
+ {
+ return TaskStatus.Success;
+ }
+}
+
+public class ReceiveAIEvent : Action
+{
+ public bool mAIArgDeprecate;
+ public AIMsgType mAIArgMsgType;
+ public SharedString mAIArgMsgStr;
+ public SharedInt mAIArgTypeId;
+ public SharedVector3 mAIArgPos;
+ public SharedInt mAIArgSkillTemplateId;
+ public SharedInt mAIArgSkillId;
+ public SharedFloat mAIArgFloatArg;
+ public SharedString mAIArgSenderUID;
+
+ public override TaskStatus OnUpdate()
+ {
+ string stringCmd = AIMgrUtil.GetAIMgrInterface().ReceiveAIEvent(transform.gameObject, (int)mAIArgMsgType, mAIArgDeprecate);
+
+ if (stringCmd == "")
+ return TaskStatus.Failure;
+ else
+ {
+ string[] args = stringCmd.Split(' ');
+ mAIArgMsgStr.Value = args[0];
+ mAIArgTypeId.Value = int.Parse(args[1]);
+#if UNITY_EDITOR
+ mAIArgPos.Value = new Vector3(XEditor.XParse.Parse(args[2]), XEditor.XParse.Parse(args[3]), XEditor.XParse.Parse(args[4]));
+#endif
+ mAIArgSkillId.Value = int.Parse(args[5]);
+ mAIArgSenderUID.Value = args[6];
+ return TaskStatus.Success;
+ }
+
+ }
+}
+
+public class SendAIEvent : Action
+{
+ public AIMsgTarget mAIArgMsgTo;
+ public AIMsgType mAIArgMsgType;
+ public int mAIArgEntityTypeId;
+ public string mAIArgMsgStr;
+ public SharedVector3 mAIArgPos;
+ public float mAIArgDelayTime;
+
+ public override TaskStatus OnUpdate()
+ {
+ if (AIMgrUtil.GetAIMgrInterface().SendAIEvent(transform.gameObject, (int)mAIArgMsgTo, (int)mAIArgMsgType, mAIArgEntityTypeId, mAIArgMsgStr, mAIArgDelayTime, mAIArgPos.Value))
+ return TaskStatus.Success;
+ else
+ return TaskStatus.Failure;
+ }
+}
+
+public class CallMonster : Action
+{
+ public SharedFloat mAIArgDist;
+ public SharedFloat mAIArgAngle;
+ public int mAIArgMonsterId;
+ public SharedInt mAIArgMonsterId2;
+ public int mAIArgCopyMonsterId;
+ public int mAIArgMaxMonsterNum;
+ public float mAIArgLifeTime;
+ public float mAIArgDelayTime;
+ public SharedVector3 mAIArgPos;
+ public int mAIArgBornType; // 0: eventpos, 1: randompos 3: 相对位置
+ public Vector3 mAIArgPos1;
+ public Vector3 mAIArgPos2;
+ public Vector3 mAIArgPos3;
+ public Vector3 mAIArgPos4;
+ public Vector3 mAIArgFinalPos; // 保底位置
+ public bool mAIArgForcePlace; //一定要在指定地点,如果指定地点在地图外,则招怪失败
+ public float mAIArgDeltaArg;
+ public float mAIArgHPPercent;
+
+ public override TaskStatus OnUpdate()
+ {
+ CallMonsterData data = new CallMonsterData();
+ data.mAIArgDist = mAIArgDist.Value;
+ data.mAIArgAngle = mAIArgAngle.Value;
+ data.mAIArgMonsterId = mAIArgMonsterId2.Value == 0 ? mAIArgMonsterId : mAIArgMonsterId2.Value;
+ data.mAIArgCopyMonsterId = mAIArgCopyMonsterId;
+ data.mAIArgLifeTime = mAIArgLifeTime;
+ data.mAIArgDelayTime = mAIArgDelayTime;
+ data.mAIArgPos = mAIArgPos.Value;
+ data.mAIArgBornType = mAIArgBornType;
+ data.mAIArgPos1 = mAIArgPos1;
+ data.mAIArgPos2 = mAIArgPos2;
+ data.mAIArgPos3 = mAIArgPos3;
+ data.mAIArgPos4 = mAIArgPos4;
+ data.mAIArgFinalPos = mAIArgFinalPos;
+ data.mAIArgForcePlace = mAIArgForcePlace;
+ data.mAIArgDeltaArg = mAIArgDeltaArg;
+ data.mAIArgHPPercent = mAIArgHPPercent;
+
+ if (AIMgrUtil.GetAIMgrInterface().CallMonster(transform.gameObject, data))
+ return TaskStatus.Success;
+ else
+ return TaskStatus.Failure;
+ }
+}
+
+public class MixMonsterPos : Action
+{
+ public int mAIArgMixMonsterId0;
+ public int mAIArgMixMonsterId1;
+ public int mAIArgMixMonsterId2;
+
+ public override TaskStatus OnUpdate()
+ {
+ return TaskStatus.Success;
+ }
+}
+
+public class KillMonster : Action
+{
+ public int mAIArgMonsterId;
+ public float mAIArgDelayTime;
+
+ public override TaskStatus OnUpdate()
+ {
+ return TaskStatus.Success;
+ }
+}
+
+public class AddBuff : Action
+{
+ public SharedInt mAIArgMonsterId;
+ public SharedInt mAIArgBuffId;
+ public SharedInt mAIArgBuffId2;
+ public SharedInt mAIArgAddBuffTarget; // 0: monster 1: player
+ public SharedInt mAIArgAddBuffWay; // 0: all 1: random one 2; prof
+ public SharedInt mAIArgPlayerProfId; // player proffesion id
+
+ public override TaskStatus OnUpdate()
+ {
+ if (AIMgrUtil.GetAIMgrInterface().AddBuff(mAIArgMonsterId.Value, mAIArgBuffId.Value, mAIArgBuffId2.Value))
+ return TaskStatus.Success;
+ else
+ return TaskStatus.Failure;
+ }
+}
+
+public class RemoveBuff : Action
+{
+ public int mAIArgMonsterId;
+ public int mAIArgBuffId;
+
+ public override TaskStatus OnUpdate()
+ {
+ return TaskStatus.Success;
+ }
+}
+
+public class CallScript : Action
+{
+ public string mAIArgFuncName;
+ public float mAIArgDelayTime;
+
+ public override TaskStatus OnUpdate()
+ {
+ if (AIMgrUtil.GetAIMgrInterface().CallScript(transform.gameObject, mAIArgFuncName, mAIArgDelayTime))
+ return TaskStatus.Success;
+ else
+ return TaskStatus.Failure;
+ }
+}
+
+public class RunSubTree : Action
+{
+ public string mAIArgTreeName;
+
+ public override TaskStatus OnUpdate()
+ {
+ AIMgrUtil.GetAIMgrInterface().RunSubTree(transform.gameObject, mAIArgTreeName);
+ return TaskStatus.Success;
+ }
+}
+
+public class PlayFx : Action
+{
+ public string mAIArgFxName;
+ public SharedVector3 mAIArgFxPos;
+ public float mAIArgDelayTime;
+
+ public override TaskStatus OnUpdate()
+ {
+ //if (mAIArgFxPos.Value == null)
+ // return TaskStatus.Failure;
+
+ //if (AIMgrUtil.GetAIMgrInterface().PlayFx(transform.gameObject, mAIArgFxName, mAIArgFxPos.Value, mAIArgDelayTime))
+ // return TaskStatus.Success;
+ //else
+ return TaskStatus.Failure;
+ }
+}
+
+public class DetectEnemyInRange : Action
+{
+ public enum FightGroupType
+ {
+ Opponent = 0,
+ Ally
+ }
+
+ public int mAIArgRangeType; // 0: circle 1: rect
+ public float mAIArgRadius;
+ public float mAIArgAngle;
+ public float mAIArgLength;
+ public float mAIArgWidth;
+ public float mAIArgOffsetLength;
+ public int mAIArgMonsterType;
+ public FightGroupType mAIArgFightGroupType;
+
+ public override TaskStatus OnUpdate()
+ {
+ DetectEnemyInRangeArg arg;
+ arg.mAIArgAngle = mAIArgAngle;
+ arg.mAIArgRangeType = mAIArgRangeType;
+ arg.mAIArgRadius = mAIArgRadius;
+ arg.mAIArgLength = mAIArgLength;
+ arg.mAIArgWidth = mAIArgWidth;
+ arg.mAIArgOffsetLength = mAIArgOffsetLength;
+ arg.mAIArgMonsterType = mAIArgMonsterType;
+ arg.mAIArgFightGroupType = XFastEnumIntEqualityComparer<FightGroupType>.ToInt(mAIArgFightGroupType);
+
+ if (AIMgrUtil.GetAIMgrInterface().DetectEnemyInRange(transform.gameObject, ref arg))
+ return TaskStatus.Success;
+ else
+ return TaskStatus.Failure;
+ }
+}
+
+public class XHashFunc : Action
+{
+ public string mAIArgInput;
+ public SharedInt mAIArgResult;
+
+ public override TaskStatus OnUpdate()
+ {
+ mAIArgResult.Value = (int)XCommon.singleton.XHash(mAIArgInput);
+ return TaskStatus.Success;
+ }
+}
+
+public class AIDoodad : Action
+{
+ public SharedInt mAIArgDoodadId;
+ public SharedInt mAIArgWaveId;
+ public SharedVector3 mAIArgDoodadPos;
+ public float mAIArgRandomPos;
+ public float mAIArgDelayTime;
+
+ public override TaskStatus OnUpdate()
+ {
+ if (AIMgrUtil.GetAIMgrInterface().AIDoodad(transform.gameObject, mAIArgDoodadId.Value, mAIArgWaveId.Value, mAIArgDoodadPos.Value, mAIArgRandomPos, mAIArgDelayTime))
+ return TaskStatus.Success;
+ else
+ return TaskStatus.Failure;
+ }
+}
+
+public class RemoveSceneBuff : Action
+{
+ public int mAIArgBuffId;
+
+
+ public override TaskStatus OnUpdate()
+ {
+ return TaskStatus.Success;
+ }
+}
+
+public class RandomEntityPos : Action
+{
+ public int mAIArgTemplateId;
+ public float mAIArgRadius;
+ public Vector3 mAIArgCenterPos;
+ public Vector3 mAIArgFinalPos;
+ public int mAIArgNearPlayerTemplateId; // 0: no use -1: all player >0 : prof
+
+ public override TaskStatus OnUpdate()
+ {
+ return base.OnUpdate();
+ }
+}
+
+public class SelectPlayerFromList : Action
+{
+ public int mAIArgSelectType;
+ public int mAIArgStartIndex;
+ public int mAIArgEndIndex;
+
+ public override TaskStatus OnUpdate()
+ {
+ return base.OnUpdate();
+ }
+}
+
+public class GetEntityPos : Action
+{
+ public int mAIArgIsPlayer;
+ public int mAIArgTemplateId;
+ public SharedVector3 mAIArgStorePos;
+
+ public override TaskStatus OnUpdate()
+ {
+ return base.OnUpdate();
+ }
+}
+
+public class GetEntityCount : Action
+{
+ ///> TODO
+ /// 区分怪还是人,并可以指定TypeID
+ public int mAIArgWay;
+ public SharedInt mAIArgStoreCount;
+}
+
+public class SetEnmity : Action
+{
+ public SetEnmityType mAIArgOperateType;
+ public SharedFloat mAIArgOperateValue;
+
+ public override TaskStatus OnUpdate()
+ {
+ return base.OnUpdate();
+ }
+}
+
+public class GetMonsterID : Action
+{
+ public int mAIArgType;
+ public SharedInt mAIArgStoreID;
+}
+
+public class GetUID : Action
+{
+ public SharedString mAIArgStoreID;
+}
+
+public class AddGroupLevel : Action
+{
+ public SharedInt mAIArgFightGroup;
+ public int mAIArgLevel;
+}
+
+public class NotifyTarget : Action
+{
+
+}
+
+public class GetFightGroup : Action
+{
+ public SharedString mAIArgUID;
+ public SharedInt mAIArgStoreFightGroup;
+} \ No newline at end of file
diff --git a/Client/Assets/Behavior Designer/AI/Actions/XAIActionOther.cs.meta b/Client/Assets/Behavior Designer/AI/Actions/XAIActionOther.cs.meta
new file mode 100644
index 00000000..18cc5268
--- /dev/null
+++ b/Client/Assets/Behavior Designer/AI/Actions/XAIActionOther.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 403e52aea5bdf5345868c31ef18830f2
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
diff --git a/Client/Assets/Behavior Designer/AI/Actions/XAIActionTarget.cs b/Client/Assets/Behavior Designer/AI/Actions/XAIActionTarget.cs
new file mode 100644
index 00000000..67baf939
--- /dev/null
+++ b/Client/Assets/Behavior Designer/AI/Actions/XAIActionTarget.cs
@@ -0,0 +1,236 @@
+using UnityEngine;
+using System.Collections.Generic;
+using BehaviorDesigner.Runtime;
+using BehaviorDesigner.Runtime.Tasks;
+
+public class FindTargetByDistance : Action
+{
+ public SharedFloat mAIArgDistance;
+ public bool mAIArgFilterImmortal;
+ public float mAIArgAngle;
+ public float mAIArgDelta;
+ public int mAIArgTargetType;
+ public override TaskStatus OnUpdate()
+ {
+ if (AIMgrUtil.GetAIMgrInterface().FindTargetByDistance(transform.gameObject, mAIArgDistance.Value, mAIArgFilterImmortal, mAIArgAngle, mAIArgDelta, mAIArgTargetType))
+ return TaskStatus.Success;
+ else
+ return TaskStatus.Failure;
+ }
+}
+
+public class FindTargetByHitLevel : Action
+{
+ //public SharedFloat mAIArgDistance;
+ public bool mAIArgFilterImmortal;
+ public override TaskStatus OnUpdate()
+ {
+ if (AIMgrUtil.GetAIMgrInterface().FindTargetByHitLevel(transform.gameObject, mAIArgFilterImmortal))
+ return TaskStatus.Success;
+ else
+ return TaskStatus.Failure;
+ }
+}
+
+public class FindTargetByNonImmortal : Action
+{
+ public override TaskStatus OnUpdate()
+ {
+ if (AIMgrUtil.GetAIMgrInterface().FindTargetByNonImmortal(transform.gameObject))
+ return TaskStatus.Success;
+ else
+ return TaskStatus.Failure;
+ }
+}
+
+public class TargetByHatredList : Action
+{
+ public SharedFloat mAIArgDistance;
+ public bool mAIArgFilterImmortal;
+ public override TaskStatus OnUpdate()
+ {
+ if (AIMgrUtil.GetAIMgrInterface().FindTargetByHartedList(transform.gameObject, mAIArgFilterImmortal))
+ return TaskStatus.Success;
+ else
+ return TaskStatus.Failure;
+ }
+}
+
+public class DoSelectByUID : Action
+{
+ public SharedString mAIArgUID;
+}
+
+public class DoSelectRoleByIndex : Action
+{
+ public SharedInt mAIArgIndex;
+}
+
+public class FindNavPath : Action
+{
+ public override TaskStatus OnUpdate()
+ {
+ if (AIMgrUtil.GetAIMgrInterface().FindNavPath(transform.gameObject))
+ return TaskStatus.Success;
+ else
+ return TaskStatus.Failure;
+ }
+}
+
+public class ResetTargets : Action
+{
+ public override TaskStatus OnUpdate()
+ {
+ if (AIMgrUtil.GetAIMgrInterface().ResetTargets(transform.gameObject))
+ return TaskStatus.Success;
+ else
+ return TaskStatus.Failure;
+ }
+}
+
+public class DoSelectNearest : Action
+{
+ public override TaskStatus OnUpdate()
+ {
+ if (AIMgrUtil.GetAIMgrInterface().DoSelectNearest(transform.gameObject))
+ return TaskStatus.Success;
+ else
+ return TaskStatus.Failure;
+ }
+}
+
+
+public class DoSelectFarthest : Action
+{
+ public override TaskStatus OnUpdate()
+ {
+ if (AIMgrUtil.GetAIMgrInterface().DoSelectFarthest(transform.gameObject))
+ return TaskStatus.Success;
+ else
+ return TaskStatus.Failure;
+ }
+}
+
+public class DoSelectRandomTarget : Action
+{
+ public override TaskStatus OnUpdate()
+ {
+ if (AIMgrUtil.GetAIMgrInterface().DoSelectRandomTarget(transform.gameObject))
+ return TaskStatus.Success;
+ else
+ return TaskStatus.Failure;
+ }
+}
+
+public class CalDistance : Action
+{
+ public SharedTransform mAIArgObject;
+ public SharedFloat mAIArgDistance;
+ public SharedVector3 mAIArgDestPoint;
+
+
+ public override TaskStatus OnUpdate()
+ {
+ //if (mAIArgDistance.Value == null)
+ // return TaskStatus.Failure;
+
+ if (mAIArgObject.Value != null)
+ {
+ mAIArgDistance.Value = (transform.position - mAIArgObject.Value.position).magnitude;
+ }
+ else
+ {
+ mAIArgDistance.Value = (transform.position - mAIArgDestPoint.Value).magnitude;
+ }
+
+
+ return TaskStatus.Success;
+ }
+}
+
+public class SelectMoveTargetById : Action
+{
+ public SharedTransform mAIArgMoveTarget;
+ public int mAIArgObjectId;
+
+ public override TaskStatus OnUpdate()
+ {
+ Transform moveTarget = AIMgrUtil.GetAIMgrInterface().SelectMoveTargetById(transform.gameObject, mAIArgObjectId);
+
+ if (moveTarget == null)
+ return TaskStatus.Failure;
+ else
+ {
+ mAIArgMoveTarget.Value = moveTarget;
+ return TaskStatus.Success;
+ }
+ }
+}
+
+public class SelectBuffTarget : Action
+{
+ //public SharedVector3 mAIArgBuffTarget;
+ public SharedTransform mAIArgBuffTarget;
+
+ public override TaskStatus OnUpdate()
+ {
+ Transform buffTarget = AIMgrUtil.GetAIMgrInterface().SelectBuffTarget(transform.gameObject);
+
+ if (buffTarget == null)
+ {
+ return TaskStatus.Failure;
+ }
+ else
+ {
+ mAIArgBuffTarget.Value = buffTarget;
+ return TaskStatus.Success;
+ }
+ }
+}
+
+public class SelectItemTarget : Action
+{
+ //public SharedVector3 mAIArgBuffTarget;
+ public SharedTransform mAIArgItemTarget;
+
+ public override TaskStatus OnUpdate()
+ {
+ Transform itemTarget = AIMgrUtil.GetAIMgrInterface().SelectItemTarget(transform.gameObject);
+
+ if (itemTarget == null)
+ return TaskStatus.Failure;
+ else
+ {
+ mAIArgItemTarget.Value = itemTarget;
+ return TaskStatus.Success;
+ }
+ }
+}
+
+public class SelectTargetBySkillCircle : Action
+{
+ public override TaskStatus OnUpdate()
+ {
+ if (AIMgrUtil.GetAIMgrInterface().SelectTargetBySkillCircle(transform.gameObject))
+ return TaskStatus.Success;
+ else
+ return TaskStatus.Failure;
+ }
+}
+
+public class SelectNonHartedList : Action
+{
+ public override TaskStatus OnUpdate()
+ {
+ return TaskStatus.Success;
+ }
+}
+
+public class ResetHartedList : Action
+{
+ public override TaskStatus OnUpdate()
+ {
+ AIMgrUtil.GetAIMgrInterface().ResetHartedList(transform.gameObject);
+ return TaskStatus.Success;
+ }
+}
diff --git a/Client/Assets/Behavior Designer/AI/Actions/XAIActionTarget.cs.meta b/Client/Assets/Behavior Designer/AI/Actions/XAIActionTarget.cs.meta
new file mode 100644
index 00000000..9d16abb2
--- /dev/null
+++ b/Client/Assets/Behavior Designer/AI/Actions/XAIActionTarget.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 427ab1b85b2f23f47b002c88e25fe4b6
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData: