少年修仙传客户端代码仓库
client_Hale
2019-04-19 09674e08265da8e4e6154979b698a4754b1e05a3
382 前端战斗AI流程控制逻辑
6 文件已复制
1个文件已删除
1 文件已重命名
7个文件已添加
8个文件已修改
514 ■■■■ 已修改文件
Fight/Actor/AI/AI_Boss_HYQ.cs 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/AI/Process/PN_AttackCount.cs 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/AI/Process/PN_AutoAI.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/AI/Process/PN_AutoAI.cs.meta 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/AI/Process/PN_BeAttackCount.cs 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/AI/Process/PN_CastSkill.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/AI/Process/PN_CastSkill.cs.meta 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/AI/Process/PN_CommonAttack.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/AI/Process/PN_CommonAttack.cs.meta 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/AI/Process/PN_Die.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/AI/Process/PN_Die.cs.meta 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/AI/Process/PN_HpPer.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/AI/Process/PN_LockHp.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/AI/Process/PN_OpenDialog.cs 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/AI/Process/PN_OpenDialog.cs.meta 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/AI/Process/PN_ShowMotion.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/AI/Process/PN_ShowMotion.cs.meta 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/AI/Process/PN_UnLockHp.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/AI/Process/PN_WaitTime.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/AI/Process/PN_WaitTime.cs.meta 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/AI/Process/ProcessManager.cs.cs 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/AI/Process/ProcessNode.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/GameActor/GA_NpcClientFightNorm.cs 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/AI/AI_Boss_HYQ.cs
@@ -19,67 +19,6 @@
        m_NormalAtkCount = 0;
    }
    private void CheckStep()
    {
        var _hero = PlayerDatas.Instance.hero;
        switch (m_Step)
        {
            case 0:// 检测普攻次数
                if (m_NormalAtkCount > 1)
                {
                    m_Step = 1;
                    m_LockSkill = 10009;
                    m_CanCastSkill = true;
                }
                break;
            case 1:// 检测血量
                if (m_Owner.ActorInfo.RealHp <= m_Owner.ActorInfo.RealMaxHp * .2f)
                {
                    Debug.Log("触发了动画");
                    m_Step = 2;
                }
                break;
            case 2:
                // Boss: 小辈感受吾真正的实力
                var _model1 = ModelCenter.Instance.GetModel<GuideDialogueModel>();
                _model1.dialogID = 1000;
                _model1.onClose = Step_1_TalkFinished;
                WindowCenter.Instance.Open<GuideDialogueWin>();
                if (_hero != null)
                {
                    _hero.Behaviour.StopKillUntilDieAI();
                    _hero.Behaviour.StopHandupAI();
                }
                m_Step = 3;
                break;
            case 4:// 计算角色普攻次数
                if (m_NormalAtkCount > 3)
                {
                    STM_NormalAttack.OnCastNormalAttack -= OnHeroNormalAttack;
                    m_NormalAtkCount = 0;
                    // Boss: 哈哈哈
                    var _model2 = ModelCenter.Instance.GetModel<GuideDialogueModel>();
                    _model2.dialogID = 1000;
                    _model2.onClose = Step_1_TalkFinished;
                    WindowCenter.Instance.Open<GuideDialogueWin>();
                    if (_hero != null)
                    {
                        _hero.Behaviour.StopKillUntilDieAI();
                        _hero.Behaviour.StopHandupAI();
                    }
                    m_Step = 5;
                }
                break;
        }
    }
    private void Step_1_TalkFinished()
    {
        m_Step = 4;
        m_NormalAtkCount = 0;
        STM_NormalAttack.OnCastNormalAttack += OnHeroNormalAttack;
    }
    private void OnHeroNormalAttack()
    {
        m_NormalAtkCount += 1;
@@ -91,8 +30,6 @@
        {
            return;
        }
        CheckStep();
        // ai休眠时间
        if (Time.realtimeSinceStartup - m_LastThinkTime > m_SleepTime)
Fight/Actor/AI/Process/PN_AttackCount.cs
@@ -1,4 +1,41 @@
public class PN_AttackCount
{
using UnityEngine;
public class PN_AttackCount : ProcessNode
{
    private int m_AttackCount;
    public PN_AttackCount(GA_NpcClientFightNorm npcFight, int count)
    {
        m_Target = npcFight;
        m_AttackCount = 0;
        param = count;
    }
    public override void Init()
    {
        m_Target.OnAttackObj += OnAttackObj;
#if UNITY_EDITOR
        Debug.LogFormat("开始检测NPC攻击次数, 需要攻击: {0} 次");
#endif
    }
    private void OnAttackObj(uint sid, int skillId)
    {
        m_AttackCount += 1;
    }
    public override bool IsOver()
    {
        return m_AttackCount >= param;
    }
    public override void UnInit()
    {
        m_Target.OnAttackObj -= OnAttackObj;
    }
    public override void Update()
    {
    }
}
Fight/Actor/AI/Process/PN_AutoAI.cs
New file
@@ -0,0 +1,19 @@
public class PN_AutoAI : ProcessNode
{
    public override void Init()
    {
    }
    public override bool IsOver()
    {
        return true;
    }
    public override void UnInit()
    {
    }
    public override void Update()
    {
    }
}
Fight/Actor/AI/Process/PN_AutoAI.cs.meta
copy from Fight/Actor/AI/Process/PN_UnLockHp.cs.meta copy to Fight/Actor/AI/Process/PN_AutoAI.cs.meta
File was copied from Fight/Actor/AI/Process/PN_UnLockHp.cs.meta
@@ -1,6 +1,6 @@
fileFormatVersion: 2
guid: 340d0053aa71b8245a3a68531cd61475
timeCreated: 1555595631
guid: 46e2dfe81c4ce224f875ccb112fcf3fd
timeCreated: 1555657870
licenseType: Pro
MonoImporter:
  serializedVersion: 2
Fight/Actor/AI/Process/PN_BeAttackCount.cs
@@ -1,4 +1,37 @@
public class PN_BeAttackCount
{
using System;
public class PN_BeAttackCount : ProcessNode
{
    private int m_BeAttackCount = 0;
    public PN_BeAttackCount(GA_NpcClientFightNorm npc, int beAttackCount)
    {
        m_BeAttackCount = 0;
        m_Target = npc;
        param = beAttackCount;
    }
    public sealed override void Init()
    {
        m_Target.OnAttacked += OnBeAttacked;
    }
    private void OnBeAttacked()
    {
        m_BeAttackCount += 1;
    }
    public sealed override bool IsOver()
    {
        return m_BeAttackCount >= param;
    }
    public sealed override void UnInit()
    {
        m_Target.OnAttacked -= OnBeAttacked;
    }
    public sealed override void Update()
    {
    }
}
Fight/Actor/AI/Process/PN_CastSkill.cs
New file
@@ -0,0 +1,34 @@
public class PN_CastSkill : ProcessNode
{
    public PN_CastSkill(GA_NpcClientFightNorm npc, int skillId)
    {
        m_Target = npc;
        param = skillId;
    }
    public sealed override void Init()
    {
        m_Target.lockSkillID = param;
    }
    public sealed override bool IsOver()
    {
        if (m_Target.SkillMgr.CurCastSkill != null)
        {
            if (m_Target.SkillMgr.CurCastSkill.id == param)
            {
                return true;
            }
        }
        return false;
    }
    public sealed override void UnInit()
    {
        m_Target.lockSkillID = -1;
    }
    public sealed override void Update()
    {
    }
}
Fight/Actor/AI/Process/PN_CastSkill.cs.meta
copy from Fight/Actor/AI/Process/PN_UnLockHp.cs.meta copy to Fight/Actor/AI/Process/PN_CastSkill.cs.meta
File was copied from Fight/Actor/AI/Process/PN_UnLockHp.cs.meta
@@ -1,6 +1,6 @@
fileFormatVersion: 2
guid: 340d0053aa71b8245a3a68531cd61475
timeCreated: 1555595631
guid: c5954cbcedffbe644a4baf1d90b586af
timeCreated: 1555657872
licenseType: Pro
MonoImporter:
  serializedVersion: 2
Fight/Actor/AI/Process/PN_CommonAttack.cs
New file
@@ -0,0 +1,25 @@
public class PN_CommonAttack : ProcessNode
{
    public PN_CommonAttack(GA_NpcClientFightNorm npc)
    {
        m_Target = npc;
    }
    public override void Init()
    {
        m_Target.lockCommonAtk = true;
    }
    public override bool IsOver()
    {
        return true;
    }
    public override void UnInit()
    {
    }
    public override void Update()
    {
    }
}
Fight/Actor/AI/Process/PN_CommonAttack.cs.meta
copy from Fight/Actor/AI/Process/PN_UnLockHp.cs.meta copy to Fight/Actor/AI/Process/PN_CommonAttack.cs.meta
File was copied from Fight/Actor/AI/Process/PN_UnLockHp.cs.meta
@@ -1,6 +1,6 @@
fileFormatVersion: 2
guid: 340d0053aa71b8245a3a68531cd61475
timeCreated: 1555595631
guid: 97861257ab12fe74a9fa9bbdd109ef98
timeCreated: 1555657871
licenseType: Pro
MonoImporter:
  serializedVersion: 2
Fight/Actor/AI/Process/PN_Die.cs
New file
@@ -0,0 +1,26 @@
public class PN_Die : ProcessNode
{
    public PN_Die(GA_NpcClientFightNorm npc)
    {
        m_Target = npc;
    }
    public override void Init()
    {
        GAMgr.Instance.ServerDie(m_Target.ServerInstID);
        GAMgr.Instance.Release(m_Target);
    }
    public override bool IsOver()
    {
        return true;
    }
    public override void UnInit()
    {
    }
    public override void Update()
    {
    }
}
Fight/Actor/AI/Process/PN_Die.cs.meta
File was renamed from Fight/Actor/AI/Process/PN_UnLockHp.cs.meta
@@ -1,6 +1,6 @@
fileFormatVersion: 2
guid: 340d0053aa71b8245a3a68531cd61475
timeCreated: 1555595631
guid: 5d04044ba0aaf7f40b2a99c7559b1535
timeCreated: 1555657871
licenseType: Pro
MonoImporter:
  serializedVersion: 2
Fight/Actor/AI/Process/PN_HpPer.cs
@@ -1,4 +1,28 @@
public class PN_HpPer
public class PN_HpPer : ProcessNode
{
    private float m_Per;
    public PN_HpPer(GA_NpcClientFightNorm npc, int per)
    {
        m_Target = npc;
        param = per;
        m_Per = param * Constants.F_BETA;
    }
    public override void Init()
    {
    }
    public override bool IsOver()
    {
        return m_Target.ActorInfo.RealHp <= (ulong)(m_Target.ActorInfo.RealMaxHp * m_Per);
    }
    public override void UnInit()
    {
    }
    public override void Update()
    {
    }
}
Fight/Actor/AI/Process/PN_LockHp.cs
@@ -1,4 +1,25 @@
public class PN_LockHp
public class PN_LockHp : ProcessNode
{
    public PN_LockHp(GA_NpcClientFightNorm npc, int per)
    {
        m_Target = npc;
        param = per;
    }
    public override void Init()
    {
        m_Target.LockHp(param * Constants.F_BETA);
    }
    public override bool IsOver()
    {
        return true;
    }
    public override void UnInit()
    {
    }
    public override void Update()
    {
    }
}
Fight/Actor/AI/Process/PN_OpenDialog.cs
New file
@@ -0,0 +1,54 @@
using System;
using Snxxz.UI;
using UnityEngine;
public class PN_OpenDialog : ProcessNode
{
    private bool m_IsOver = false;
    public PN_OpenDialog(GA_NpcClientFightNorm npcFight, int dialogID)
    {
        m_Target = npcFight;
        param = dialogID;
        m_IsOver = false;
    }
    public sealed override void Init()
    {
        var _model = ModelCenter.Instance.GetModel<GuideDialogueModel>();
        _model.dialogID = param;
        _model.onClose = DialogFinish;
        WindowCenter.Instance.Open<GuideDialogueWin>();
        GA_Hero _hero = PlayerDatas.Instance.hero;
        if (_hero != null)
        {
            _hero.Behaviour.StopKillUntilDieAI();
            _hero.Behaviour.StopHandupAI();
        }
#if UNITY_EDITOR
        Debug.LogFormat("开始对话: {0}", param);
#endif
    }
    private void DialogFinish()
    {
        m_IsOver = true;
#if UNITY_EDITOR
        Debug.LogFormat("对话: {0} 结束", param);
#endif
    }
    public sealed override bool IsOver()
    {
        return m_IsOver;
    }
    public sealed override void UnInit()
    {
    }
    public sealed override void Update()
    {
    }
}
Fight/Actor/AI/Process/PN_OpenDialog.cs.meta
copy from Fight/Actor/AI/Process/PN_UnLockHp.cs.meta copy to Fight/Actor/AI/Process/PN_OpenDialog.cs.meta
File was copied from Fight/Actor/AI/Process/PN_UnLockHp.cs.meta
@@ -1,6 +1,6 @@
fileFormatVersion: 2
guid: 340d0053aa71b8245a3a68531cd61475
timeCreated: 1555595631
guid: 1260e6f7d972e8e48a44d89fedf743f6
timeCreated: 1555657870
licenseType: Pro
MonoImporter:
  serializedVersion: 2
Fight/Actor/AI/Process/PN_ShowMotion.cs
New file
@@ -0,0 +1,34 @@
public class PN_ShowMotion : ProcessNode
{
    public PN_ShowMotion(GA_NpcClientFightNorm npc, int id)
    {
        m_Target = npc;
        param = id;
    }
    public override void Init()
    {
        m_Target.IdleImmediate();
        GA_Hero _hero = PlayerDatas.Instance.hero;
        if (_hero != null)
        {
            _hero.Behaviour.StopKillUntilDieAI();
            _hero.Behaviour.StopHandupAI();
            _hero.IdleImmediate();
        }
    }
    public override bool IsOver()
    {
        return true;
    }
    public override void UnInit()
    {
    }
    public override void Update()
    {
    }
}
Fight/Actor/AI/Process/PN_ShowMotion.cs.meta
copy from Fight/Actor/AI/Process/PN_UnLockHp.cs.meta copy to Fight/Actor/AI/Process/PN_ShowMotion.cs.meta
File was copied from Fight/Actor/AI/Process/PN_UnLockHp.cs.meta
@@ -1,6 +1,6 @@
fileFormatVersion: 2
guid: 340d0053aa71b8245a3a68531cd61475
timeCreated: 1555595631
guid: 106c7cb8f527f4a4cb1e0fee7842e721
timeCreated: 1555657870
licenseType: Pro
MonoImporter:
  serializedVersion: 2
Fight/Actor/AI/Process/PN_UnLockHp.cs
File was deleted
Fight/Actor/AI/Process/PN_WaitTime.cs
New file
@@ -0,0 +1,30 @@
using UnityEngine;
public class PN_WaitTime : ProcessNode
{
    private float m_StartTime;
    public PN_WaitTime(int ms)
    {
        param = ms;
    }
    public override void Init()
    {
        m_StartTime = Time.time;
    }
    public override bool IsOver()
    {
        int _escapeTime = (int)((Time.time - m_StartTime) * 1000);
        return _escapeTime > param;
    }
    public override void UnInit()
    {
    }
    public override void Update()
    {
    }
}
Fight/Actor/AI/Process/PN_WaitTime.cs.meta
copy from Fight/Actor/AI/Process/PN_UnLockHp.cs.meta copy to Fight/Actor/AI/Process/PN_WaitTime.cs.meta
File was copied from Fight/Actor/AI/Process/PN_UnLockHp.cs.meta
@@ -1,6 +1,6 @@
fileFormatVersion: 2
guid: 340d0053aa71b8245a3a68531cd61475
timeCreated: 1555595631
guid: 8216d153704cb81488e80bc6fa59ac55
timeCreated: 1555657871
licenseType: Pro
MonoImporter:
  serializedVersion: 2
Fight/Actor/AI/Process/ProcessManager.cs.cs
@@ -5,13 +5,14 @@
using UnityEditor;
#endif
public class ProcessManager : Singleton<ProcessManager>
public class ProcessManager
{
    private const string SoProcessNode_Suffix = "SoProcessNode_";
    private Queue<ProcessNode> m_NodeQueue = new Queue<ProcessNode>();
    private ProcessNode m_Current;
    public void Load(int npcID)
    public void Load(GA_NpcClientFightNorm npc)
    {
        m_NodeQueue.Clear();
@@ -22,7 +23,7 @@
            string _resourcePath = StringUtility.Contact(ResourcesPath.ResourcesOutAssetPath,
                                                         "Refdata/ScriptableObject/SoProcessNode/",
                                                         SoProcessNode_Suffix,
                                                         npcID,
                                                         npc.NpcConfig.NPCID,
                                                         ".asset");
            _config = AssetDatabase.LoadAssetAtPath<SoProcessNode>(_resourcePath);
@@ -30,7 +31,7 @@
        }
        else
        {
            string _assetName = StringUtility.Contact(SoProcessNode_Suffix, npcID);
            string _assetName = StringUtility.Contact(SoProcessNode_Suffix, npc.NpcConfig.NPCID);
            AssetInfo _assetInfo = new AssetInfo(ScriptableObjectLoader.bundleName, _assetName);
            _config = AssetBundleUtility.Instance.Sync_LoadAsset(_assetInfo) as SoProcessNode;
@@ -38,7 +39,6 @@
        if (_config == null)
        {
            Debug.LogErrorFormat("ProcessManager.Load() => 加载不到资源: {0}.", npcID);
            return;
        }
@@ -47,24 +47,34 @@
            switch (_node.nodeType)
            {
                case ProcessNode.E_ProcessType.AttackCount:
                    m_NodeQueue.Enqueue(new PN_AttackCount(npc, _node.param));
                    break;
                case ProcessNode.E_ProcessType.AutoAI:
                    m_NodeQueue.Enqueue(new PN_AutoAI());
                    break;
                case ProcessNode.E_ProcessType.BeAttackCount:
                    m_NodeQueue.Enqueue(new PN_BeAttackCount(npc, _node.param));
                    break;
                case ProcessNode.E_ProcessType.CastSkill:
                    m_NodeQueue.Enqueue(new PN_CastSkill(npc, _node.param));
                    break;
                case ProcessNode.E_ProcessType.CommonAttack:
                    m_NodeQueue.Enqueue(new PN_CommonAttack(npc));
                    break;
                case ProcessNode.E_ProcessType.Die:
                    m_NodeQueue.Enqueue(new PN_Die(npc));
                    break;
                case ProcessNode.E_ProcessType.HpPer:
                    m_NodeQueue.Enqueue(new PN_HpPer(npc, _node.param));
                    break;
                case ProcessNode.E_ProcessType.LockHp:
                    m_NodeQueue.Enqueue(new PN_LockHp(npc, _node.param));
                    break;
                case ProcessNode.E_ProcessType.OpenDialog:
                    m_NodeQueue.Enqueue(new PN_OpenDialog(npc, _node.param));
                    break;
                case ProcessNode.E_ProcessType.ShowMotion:
                    m_NodeQueue.Enqueue(new PN_ShowMotion(npc, _node.param));
                    break;
            }
        }
@@ -78,10 +88,17 @@
        }
        var _node = m_NodeQueue.Peek();
        if (m_Current != _node)
        {
            _node.Init();
            m_Current = _node;
        }
        _node.Update();
        if (_node.IsOver())
        {
            _node.UnInit();
            m_NodeQueue.Dequeue();
        }
    }
Fight/Actor/AI/Process/ProcessNode.cs
@@ -16,6 +16,7 @@
    }
    public int param;
    protected GA_NpcClientFightNorm m_Target;
    public abstract void Init();
    public abstract void Update();
Fight/GameActor/GA_NpcClientFightNorm.cs
@@ -3,6 +3,43 @@
public class GA_NpcClientFightNorm : GActorNpcFight
{
    private ProcessManager m_ProcessManager;
    public UnityEngine.Events.UnityAction<uint, int> OnAttackObj;
    public UnityEngine.Events.UnityAction<uint, int> OnBeAttack;
    public void AttackObj(uint sid, int skillId)
    {
        if (OnAttackObj != null)
        {
            OnAttackObj(sid, skillId);
        }
    }
    public void BeAttack(uint sid, int skillId)
    {
        if (OnBeAttack != null)
        {
            OnBeAttack(sid, skillId);
        }
    }
    public float lockHp { get; private set; }
    public void LockHp(float per)
    {
        lockHp = per;
    }
    public bool lockCommonAtk = false;
    public int lockSkillID = -1;
    public void AutoAI()
    {
        lockCommonAtk = false;
        lockSkillID = -1;
    }
    private HeadUpName m_HeadUpName;
    private LifeBar m_LifeBar;
@@ -83,7 +120,10 @@
        ActorInfo.HpEx = (uint)NpcConfig.MaxHPEx;
        ActorInfo.MaxHp = (uint)NpcConfig.DHP;
        ActorInfo.MaxHpEx = (uint)NpcConfig.MaxHPEx;
        ActorInfo.moveSpeed = 1000 / NpcConfig.OrgSpeed * .5f;
        if (NpcConfig.OrgSpeed != 0)
        {
            ActorInfo.moveSpeed = 1000 / NpcConfig.OrgSpeed * .5f;
        }
        ActorInfo.PlayerName = NpcConfig.charName;
        ActorInfo.LV = (ushort)NpcConfig.NPCLV;