From 6eb915c129fc90c6f4c82ae097dd6ffad5239efc Mon Sep 17 00:00:00 2001 From: chai Date: Mon, 25 Jan 2021 14:28:30 +0800 Subject: +scripts --- Client/Assets/Scripts/XMainClient/XAITarget.cs | 524 +++++++++++++++++++++++++ 1 file changed, 524 insertions(+) create mode 100644 Client/Assets/Scripts/XMainClient/XAITarget.cs (limited to 'Client/Assets/Scripts/XMainClient/XAITarget.cs') diff --git a/Client/Assets/Scripts/XMainClient/XAITarget.cs b/Client/Assets/Scripts/XMainClient/XAITarget.cs new file mode 100644 index 00000000..b629bf37 --- /dev/null +++ b/Client/Assets/Scripts/XMainClient/XAITarget.cs @@ -0,0 +1,524 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using XUtliPoolLib; + +namespace XMainClient +{ + internal class XAITarget : XSingleton + { + private int SortEnemy(XEntity a, XEntity b) + { + bool flag = a == null || b == null; + int result; + if (flag) + { + result = 0; + } + else + { + bool flag2 = a.Attributes == null || b.Attributes == null; + if (flag2) + { + result = 0; + } + else + { + int value = 0; + XEntityStatistics.RowData byID = XSingleton.singleton.EntityStatistics.GetByID(a.Attributes.TypeID); + bool flag3 = byID != null; + if (flag3) + { + value = (int)byID.aihit; + } + int num = 0; + XEntityStatistics.RowData byID2 = XSingleton.singleton.EntityStatistics.GetByID(b.Attributes.TypeID); + bool flag4 = byID2 != null; + if (flag4) + { + num = (int)byID2.aihit; + } + result = num.CompareTo(value); + } + } + return result; + } + + public bool ResetTargets(XEntity entity) + { + List opponent = XSingleton.singleton.GetOpponent(entity); + entity.AI.ClearTargets(); + for (int i = 0; i < opponent.Count; i++) + { + bool flag = XEntity.ValideEntity(opponent[i]); + if (flag) + { + entity.AI.AddTarget(opponent[i]); + } + } + bool flag2 = entity.AI.TargetsCount == 0; + bool result; + if (flag2) + { + entity.AI.IsFighting = false; + result = false; + } + else + { + result = true; + } + return result; + } + + public bool FindTargetByDistance(XEntity entity, float dist, bool filterImmortal, float angle, float delta, int targettype) + { + bool flag = !this.ResetTargets(entity); + bool result; + if (flag) + { + result = false; + } + else + { + bool flag2 = entity.AI.TargetsCount == 0; + if (flag2) + { + entity.AI.IsFighting = false; + result = false; + } + else + { + List list = ListPool.Get(); + entity.AI.SortTarget(new Comparison(this.SortEnemy)); + for (int i = 0; i < entity.AI.TargetsCount; i++) + { + XEntity target = entity.AI.GetTarget(i); + bool flag3 = XEntity.ValideEntity(target); + if (flag3) + { + Vector3 position = target.EngineObject.Position; + Vector3 position2 = entity.EngineObject.Position; + float magnitude = (position - position2).magnitude; + bool flag4 = magnitude < dist; + if (flag4) + { + bool flag5 = !filterImmortal || target.Buffs == null || !target.Buffs.IsBuffStateOn(XBuffType.XBuffType_Immortal); + if (flag5) + { + bool flag6 = angle < 180f && angle > 0f; + if (flag6) + { + Vector3 vector = target.EngineObject.Position - entity.EngineObject.Position; + float num = Vector3.Angle(vector, entity.EngineObject.Forward); + bool flag7 = num < angle; + if (flag7) + { + bool flag8 = targettype == 0 || targettype == 2; + if (flag8) + { + list.Add(target); + } + } + } + else + { + bool flag9 = targettype == 0 || targettype == 2; + if (flag9) + { + list.Add(target); + } + } + } + } + } + } + entity.AI.Copy2Target(list); + ListPool.Release(list); + bool flag10 = entity.AI.TargetsCount == 0; + if (flag10) + { + entity.AI.IsFighting = false; + result = false; + } + else + { + result = true; + } + } + } + return result; + } + + public bool FindTargetByHitLevel(XEntity entity, bool filterImmortal) + { + this.ResetTargets(entity); + bool flag = entity.AI.TargetsCount == 0; + bool result; + if (flag) + { + entity.AI.IsFighting = false; + result = false; + } + else + { + List list = ListPool.Get(); + entity.AI.SortTarget(new Comparison(this.SortEnemy)); + int num = -1; + int i = 0; + while (i < entity.AI.TargetsCount) + { + XEntity target = entity.AI.GetTarget(i); + bool flag2 = XEntity.ValideEntity(target); + if (flag2) + { + bool syncMode = XSingleton.singleton.SyncMode; + bool flag3; + if (syncMode) + { + flag3 = target.IsServerFighting; + } + else + { + flag3 = (target.IsFighting || !target.HasAI); + } + bool flag4 = !flag3; + if (!flag4) + { + bool flag5 = !filterImmortal || target.Buffs == null || !XSingleton.singleton.IsTargetEntityImmortal(target); + if (flag5) + { + XEntityStatistics.RowData byID = XSingleton.singleton.EntityStatistics.GetByID(target.Attributes.TypeID); + bool flag6 = byID != null; + if (flag6) + { + num = (int)byID.aihit; + break; + } + } + } + } + IL_117: + i++; + continue; + goto IL_117; + } + int j = 0; + while (j < entity.AI.TargetsCount) + { + XEntity target2 = entity.AI.GetTarget(j); + bool flag7 = XEntity.ValideEntity(target2); + if (flag7) + { + bool syncMode2 = XSingleton.singleton.SyncMode; + bool flag8; + if (syncMode2) + { + flag8 = target2.IsServerFighting; + } + else + { + flag8 = (target2.IsFighting || !target2.HasAI); + } + bool flag9 = !flag8; + if (!flag9) + { + Vector3 position = target2.EngineObject.Position; + Vector3 position2 = entity.EngineObject.Position; + float magnitude = (position - position2).magnitude; + int num2 = -1; + XEntityStatistics.RowData byID2 = XSingleton.singleton.EntityStatistics.GetByID(target2.Attributes.TypeID); + bool flag10 = byID2 != null; + if (flag10) + { + num2 = (int)byID2.aihit; + } + bool flag11 = num2 == num && num2 >= 0; + if (flag11) + { + bool flag12 = !filterImmortal || target2.Buffs == null || !XSingleton.singleton.IsTargetEntityImmortal(target2); + if (flag12) + { + list.Add(target2); + } + } + } + } + IL_250: + j++; + continue; + goto IL_250; + } + bool flag13 = list.Count == 0 && filterImmortal; + if (flag13) + { + for (int k = 0; k < entity.AI.TargetsCount; k++) + { + XEntity target3 = entity.AI.GetTarget(k); + XEntityStatistics.RowData byID3 = XSingleton.singleton.EntityStatistics.GetByID(target3.Attributes.TypeID); + bool flag14 = byID3.aihit >= 0 && XSingleton.singleton.IsTargetEntityImmortal(target3) && (target3.IsFighting || target3.IsServerFighting); + if (flag14) + { + list.Add(target3); + } + } + } + entity.AI.Copy2Target(list); + ListPool.Release(list); + bool flag15 = entity.AI.TargetsCount == 0; + if (flag15) + { + entity.AI.IsFighting = false; + result = false; + } + else + { + result = true; + } + } + return result; + } + + public bool FindTargetByHartedList(XEntity entity, bool filterImmortal) + { + List hateEntity = entity.AI.EnmityList.GetHateEntity(filterImmortal); + bool flag = hateEntity.Count == 0; + bool result; + if (flag) + { + entity.AI.IsFighting = false; + result = false; + } + else + { + entity.AI.Copy2Target(hateEntity); + result = true; + } + return result; + } + + public bool FindTargetByNonImmortal(XEntity entity) + { + return true; + } + + public bool DoSelectNearest(XEntity entity) + { + bool flag = entity.AI.TargetsCount == 0; + bool result; + if (flag) + { + entity.AI.SetTarget(null); + entity.AI.IsFighting = false; + result = false; + } + else + { + float num = float.MaxValue; + XEntity target = entity.AI.GetTarget(0); + for (int i = 0; i < entity.AI.TargetsCount; i++) + { + XEntity target2 = entity.AI.GetTarget(i); + float magnitude = (target2.EngineObject.Position - entity.EngineObject.Position).magnitude; + bool flag2 = magnitude < num; + if (flag2) + { + num = magnitude; + target = target2; + } + } + entity.AI.SetTarget(target); + bool flag3 = !entity.AI.IsFighting; + if (flag3) + { + XAIEnterFightEventArgs @event = XEventPool.GetEvent(); + @event.Firer = entity; + @event.Target = target; + XSingleton.singleton.FireEvent(@event); + } + entity.AI.IsFighting = true; + result = true; + } + return result; + } + + public bool DoSelectFarthest(XEntity entity) + { + bool flag = entity.AI.TargetsCount == 0; + bool result; + if (flag) + { + entity.AI.SetTarget(null); + entity.AI.IsFighting = false; + result = false; + } + else + { + float num = 0f; + XEntity target = entity.AI.GetTarget(0); + for (int i = 0; i < entity.AI.TargetsCount; i++) + { + XEntity target2 = entity.AI.GetTarget(i); + float magnitude = (target2.EngineObject.Position - entity.EngineObject.Position).magnitude; + bool flag2 = magnitude > num; + if (flag2) + { + num = magnitude; + target = target2; + } + } + entity.AI.SetTarget(target); + bool flag3 = !entity.AI.IsFighting; + if (flag3) + { + XAIEnterFightEventArgs @event = XEventPool.GetEvent(); + @event.Firer = entity; + @event.Target = target; + XSingleton.singleton.FireEvent(@event); + } + entity.AI.IsFighting = true; + result = true; + } + return result; + } + + public bool DoSelectRandom(XEntity entity) + { + bool flag = entity.AI.TargetsCount == 0; + bool result; + if (flag) + { + entity.AI.SetTarget(null); + entity.AI.IsFighting = false; + result = false; + } + else + { + int index = XSingleton.singleton.RandomInt(0, entity.AI.TargetsCount); + XEntity target = entity.AI.GetTarget(index); + entity.AI.SetTarget(target); + bool flag2 = !entity.AI.IsFighting; + if (flag2) + { + XAIEnterFightEventArgs @event = XEventPool.GetEvent(); + @event.Firer = entity; + @event.Target = target; + XSingleton.singleton.FireEvent(@event); + } + entity.AI.IsFighting = true; + result = true; + } + return result; + } + + public XGameObject SelectMoveTargetById(XEntity entity, int objectid) + { + List opponent = XSingleton.singleton.GetOpponent(XSingleton.singleton.Player); + float num = float.MaxValue; + XGameObject result = null; + for (int i = 0; i < opponent.Count; i++) + { + bool flag = (ulong)opponent[i].Attributes.TypeID == (ulong)((long)objectid); + if (flag) + { + XGameObject engineObject = opponent[i].EngineObject; + float magnitude = (entity.EngineObject.Position - engineObject.Position).magnitude; + bool flag2 = magnitude < num; + if (flag2) + { + num = magnitude; + result = engineObject; + } + } + } + return result; + } + + public Transform SelectDoodaTarget(XEntity entity, XDoodadType type) + { + List doodadsInScene = XSingleton.singleton.GetDoodadsInScene(type); + bool flag = doodadsInScene.Count == 0; + Transform result; + if (flag) + { + result = null; + } + else + { + float num = 999999f; + int num2 = -1; + for (int i = 0; i < doodadsInScene.Count; i++) + { + bool flag2 = doodadsInScene[i] == null; + if (!flag2) + { + float magnitude = (doodadsInScene[i].transform.position - entity.EngineObject.Position).magnitude; + bool flag3 = magnitude < num; + if (flag3) + { + num = magnitude; + num2 = i; + } + } + } + bool flag4 = num2 == -1; + if (flag4) + { + result = null; + } + else + { + result = doodadsInScene[num2].transform; + } + } + return result; + } + + public Transform SelectItemTarget(XEntity entity) + { + return XSingleton.singleton.SelectDoodaTarget(entity, XDoodadType.Item); + } + + public bool SelectTargetBySkillCircle(XEntity entity) + { + bool flag = !entity.IsPlayer; + bool result; + if (flag) + { + result = false; + } + else + { + XPlayer xplayer = entity as XPlayer; + bool flag2 = xplayer == null || xplayer.TargetLocated == null; + if (flag2) + { + result = false; + } + else + { + bool flag3 = xplayer.TargetLocated.Target != null; + if (flag3) + { + entity.AI.ClearTargets(); + entity.AI.AddTarget(xplayer.TargetLocated.Target); + entity.AI.SetTarget(xplayer.TargetLocated.Target); + result = true; + } + else + { + entity.AI.SetTarget(null); + result = false; + } + } + } + return result; + } + + public bool ResetHartedList(XEntity entity) + { + entity.AI.EnmityList.Reset(); + entity.AI.SetTarget(null); + return true; + } + } +} -- cgit v1.1-26-g67d0