[Bug 1000283] 补提 AI逻辑bug

main
zhangaotian 2024-10-21 17:08:56 +08:00
parent 5e899e2b60
commit fa7fceb55c
5 changed files with 26 additions and 22 deletions

View File

@ -146,6 +146,8 @@
INFIGHT_SKILL_ACTON_UNIT, //技能释放时作用的unit
INFIGHT_UNIT_VISIBLE_CHANGE, // 单位可见性改变
INFIGHT_GET_DAMAGED_FOR_AI, //发送伤害 AI使用
//--------- AI ------------
INFIGHT_CHARACTER_AI_CHAIN, //连锁 AI索敌时发送

View File

@ -23,7 +23,7 @@ namespace Code.Scripts.Gameplay.BT.Conditional
if (!_isRegistered)
{
EventManager.Instance.Register<EventDataGetDamaged>(EventManager.EventName.INFIGHT_GET_DAMAGED, OnDamaged);
EventManager.Instance.Register<EventDataGetDamaged>(EventManager.EventName.INFIGHT_GET_DAMAGED_FOR_AI, OnDamaged);
_isRegistered = true;
_isBeingAttacked = false;
}
@ -69,7 +69,7 @@ namespace Code.Scripts.Gameplay.BT.Conditional
{
if (_isBeingAttacked)
{
EventManager.Instance.Unregister<EventDataGetDamaged>(EventManager.EventName.INFIGHT_GET_DAMAGED, OnDamaged);
EventManager.Instance.Unregister<EventDataGetDamaged>(EventManager.EventName.INFIGHT_GET_DAMAGED_FOR_AI, OnDamaged);
_isRegistered = false;
}
_isBeingAttacked = false;
@ -77,7 +77,7 @@ namespace Code.Scripts.Gameplay.BT.Conditional
public override void OnBehaviorComplete()
{
EventManager.Instance.Unregister<EventDataGetDamaged>(EventManager.EventName.INFIGHT_GET_DAMAGED, OnDamaged);
EventManager.Instance.Unregister<EventDataGetDamaged>(EventManager.EventName.INFIGHT_GET_DAMAGED_FOR_AI, OnDamaged);
_isBeingAttacked = false;
_isRegistered = false;
}

View File

@ -21,7 +21,7 @@ namespace Code.Scripts.Gameplay.BT.Conditional
{
if (!_isRegistered)
{
EventManager.Instance.Register<EventDataGetDamaged>(EventManager.EventName.INFIGHT_GET_DAMAGED,
EventManager.Instance.Register<EventDataGetDamaged>(EventManager.EventName.INFIGHT_GET_DAMAGED_FOR_AI,
OnDamaged);
_isRegistered = true;
_isBeingAttacked = false;
@ -45,7 +45,7 @@ namespace Code.Scripts.Gameplay.BT.Conditional
_target = AIUtils.GetNearestGameUnit(data.owner, data.sender, _target);
SharedBattleInfo.Value.theChosenOneId = _target.GetID();
_owner.statusData.isAttackActive = true;
//DebugUtil.LogG($"BT harmed by: {data.sender?.GetID()} ,But Target is {_target.GetID()}, owner: {_owner?.GetID()}");
DebugUtil.LogG($"BT harmed by: {data.sender?.GetID()} ,But Target is {_target.GetID()}, owner: {_owner?.GetID()}");
}
}
}
@ -56,7 +56,9 @@ namespace Code.Scripts.Gameplay.BT.Conditional
if (_isBeingAttacked || _owner.statusData.isAttackActive)
{
if (SharedBattleInfo.Value.theChosenOneId != Constants.INVALID_UINT_ID)
{
return TaskStatus.Success;
}
}
if (_owner != null && _level != null
@ -84,11 +86,11 @@ namespace Code.Scripts.Gameplay.BT.Conditional
return TaskStatus.Success;
}
if (_owner.controlData.followUnit != null && _owner.statusData.isAttackActive)
/*if (_owner.controlData.followUnit != null && _owner.statusData.isAttackActive)
{
SharedBattleInfo.Value.theChosenOneId = _owner.controlData.followUnit.GetID();
return TaskStatus.Success;
}
}*/
}
return TaskStatus.Running;
@ -98,7 +100,7 @@ namespace Code.Scripts.Gameplay.BT.Conditional
{
if (_isBeingAttacked)
{
EventManager.Instance.Unregister<EventDataGetDamaged>(EventManager.EventName.INFIGHT_GET_DAMAGED,
EventManager.Instance.Unregister<EventDataGetDamaged>(EventManager.EventName.INFIGHT_GET_DAMAGED_FOR_AI,
OnDamaged);
_isRegistered = false;
}
@ -106,7 +108,7 @@ namespace Code.Scripts.Gameplay.BT.Conditional
public override void OnBehaviorComplete()
{
EventManager.Instance.Unregister<EventDataGetDamaged>(EventManager.EventName.INFIGHT_GET_DAMAGED,
EventManager.Instance.Unregister<EventDataGetDamaged>(EventManager.EventName.INFIGHT_GET_DAMAGED_FOR_AI,
OnDamaged);
_isRegistered = false;
}

View File

@ -3,9 +3,7 @@ using Framework;
using Gameplay.AI;
using Gameplay.BT.Variables;
using Gameplay.Character;
using Gameplay.Common;
using Gameplay.Unit;
using UnityEngine;
namespace Code.Scripts.Gameplay.BT.Task
{
@ -25,7 +23,7 @@ namespace Code.Scripts.Gameplay.BT.Task
{
if (!_isRegistered)
{
EventManager.Instance.Register<EventDataGetDamaged>(EventManager.EventName.INFIGHT_GET_DAMAGED,
EventManager.Instance.Register<EventDataGetDamaged>(EventManager.EventName.INFIGHT_GET_DAMAGED_FOR_AI,
OnDamaged);
_isRegistered = true;
_isBeingAttacked = false;
@ -70,11 +68,10 @@ namespace Code.Scripts.Gameplay.BT.Task
var target = GameUnitManager.instance.infightUnits.Search(SharedBattleInfo.Value.theChosenOneId);
if (target != null)
AIUtils.CheckAndMove(_owner, target.transData.cellIndex);
//DebugUtil.LogG($"BT move to update success, owner: {_owner?.GetID()}, target: {SharedBattleInfo.Value.theChosenOneId}");
}
}
if (_owner?.controlData.targetEnemy == null && _owner?.controlData.followUnit == null)
if (_owner?.controlData.targetEnemy == null/* && _owner?.controlData.followUnit == null*/)
{
_lastTarget = Constants.INVALID_UINT_ID;
}
@ -90,7 +87,7 @@ namespace Code.Scripts.Gameplay.BT.Task
{
if (_isBeingAttacked)
{
EventManager.Instance.Unregister<EventDataGetDamaged>(EventManager.EventName.INFIGHT_GET_DAMAGED,
EventManager.Instance.Unregister<EventDataGetDamaged>(EventManager.EventName.INFIGHT_GET_DAMAGED_FOR_AI,
OnDamaged);
_isRegistered = false;
}

View File

@ -529,17 +529,20 @@ namespace Gameplay.Unit
bool isCritical,
bool ignoreShield)
{
var data = ObjPoolManager.instance.Get<EventDataGetDamaged>();
data.sender = sender;
data.owner = this;
data.damage = realDamage;
data.isCritical = isCritical;
if (!PerformanceManager.instance.data.disableFloatDamage)
{
var data = ObjPoolManager.instance.Get<EventDataGetDamaged>();
data.sender = sender;
data.owner = this;
data.damage = realDamage;
data.isCritical = isCritical;
EventManager.Instance.Send(EventManager.EventName.INFIGHT_GET_DAMAGED, data);
ObjPoolManager.instance.Return(data);
}
// 给AI发送受伤事件
EventManager.Instance.Send(EventManager.EventName.INFIGHT_GET_DAMAGED_FOR_AI, data);
ObjPoolManager.instance.Return(data);
if (buffManager != null)
{
buffManager.TriggerOnTakeDamage();