From 115e2385f77aee90c034d2d8d2d559b1b4cf58ad Mon Sep 17 00:00:00 2001
From: client_Hale <339726288@qq.com>
Date: 星期六, 22 六月 2019 23:22:37 +0800
Subject: [PATCH] 382 控制状态下可使用技能
---
Fight/Actor/AI/HeroAI_KillUntilDie.cs | 11 ++++-
Fight/Actor/HeroBehaviour.cs | 19 +++++++++
System/MainWin/MainWinSkillController.cs | 22 +++++++++++
Fight/GameActor/GA_Hero.cs | 1
Fight/Actor/Status/StatusMgr.cs | 12 ------
Fight/Actor/AI/HeroAI_Base.cs | 35 ++++++++++++++---
6 files changed, 77 insertions(+), 23 deletions(-)
diff --git a/Fight/Actor/AI/HeroAI_Base.cs b/Fight/Actor/AI/HeroAI_Base.cs
index 76eb8e4..b5b7d94 100644
--- a/Fight/Actor/AI/HeroAI_Base.cs
+++ b/Fight/Actor/AI/HeroAI_Base.cs
@@ -7,6 +7,15 @@
public abstract class HeroAI_Base
{
+ private TreasureSkillModel m_TreasureSkillModel;
+ private TreasureSkillModel treasureSkillModel
+ {
+ get
+ {
+ return m_TreasureSkillModel ?? (m_TreasureSkillModel = ModelCenter.Instance.GetModel<TreasureSkillModel>());
+ }
+ }
+
public static byte stopReason = 0;
private SkillModel m_SkillModel;
@@ -88,8 +97,26 @@
if (_skill != null && _skill.skillInfo != null && _skill.skillInfo.config != null)
{
+ int _expertSkill = 0;
+ bool _forceCast = false;
+
+ if (treasureSkillModel.TryGetExpertSkill(_skill.id, out _expertSkill))
+ {
+ int _level = 0;
+ if (treasureSkillModel.TryGetExpertActiveLevel(_expertSkill, out _level))
+ {
+ _expertSkill += (_level - 1);
+ }
+ SkillHelper.EffectValue _effectValue;
+ var _skillInfo = SkillHelper.Instance.Get(_expertSkill);
+ if (_skillInfo.effectValue.TryGetValue(4093, out _effectValue))
+ {
+ _forceCast = true;
+ }
+ }
+
// 鍒ゆ柇鏄惁鏄灏佺鐨勬妧鑳�
- if (!StatusMgr.Instance.CanAttack(_hero.ServerInstID, _skill.skillInfo.config))
+ if (!StatusMgr.Instance.CanAttack(_hero.ServerInstID, _skill.skillInfo.config) && !_forceCast)
{
return _skill;
}
@@ -141,12 +168,6 @@
}
if (StatusMgr.Instance.IsExist(_hero.ServerInstID, skillID))
- {
- return false;
- }
-
- // 鍒ゆ柇鏄惁鏄灏佺鐨勬妧鑳�
- if (!StatusMgr.Instance.CanAttack(_hero.ServerInstID, _skill.skillInfo.config))
{
return false;
}
diff --git a/Fight/Actor/AI/HeroAI_KillUntilDie.cs b/Fight/Actor/AI/HeroAI_KillUntilDie.cs
index dadf8a2..6e2774f 100644
--- a/Fight/Actor/AI/HeroAI_KillUntilDie.cs
+++ b/Fight/Actor/AI/HeroAI_KillUntilDie.cs
@@ -102,8 +102,7 @@
GA_Hero _hero = PlayerDatas.Instance.hero;
if (_hero == null
|| _hero.ActorInfo.serverDie
- || !_hero.CanCastSkill()
- || !_hero.CanCommonAtk())
+ || !_hero.CanCastSkill())
{
return;
}
@@ -175,6 +174,14 @@
return;
}
+ if (_skill.skillInfo.config.FuncType == 8)
+ {
+ if (!_hero.CanCommonAtk())
+ {
+ return;
+ }
+ }
+
bool _forceMove = _skill.skillInfo.soFile != null && _skill.skillInfo.soFile.forceMove;
if (_target == null ||
diff --git a/Fight/Actor/HeroBehaviour.cs b/Fight/Actor/HeroBehaviour.cs
index 5c8e7c4..fea9e36 100644
--- a/Fight/Actor/HeroBehaviour.cs
+++ b/Fight/Actor/HeroBehaviour.cs
@@ -114,7 +114,24 @@
Skill _skill = m_Hero.SkillMgr.Get(skillID);
- if (!StatusMgr.Instance.CanAttack(m_Hero.ServerInstID, _skill.skillInfo.config))
+ int _expertSkill = 0;
+ bool _forceCast = false;
+ if (tsModel.TryGetExpertSkill(skillID, out _expertSkill))
+ {
+ int _level = 0;
+ if (tsModel.TryGetExpertActiveLevel(_expertSkill, out _level))
+ {
+ _expertSkill += (_level - 1);
+ }
+ SkillHelper.EffectValue _effectValue;
+ var _skillInfo = SkillHelper.Instance.Get(_expertSkill);
+ if (_skillInfo.effectValue.TryGetValue(4093, out _effectValue))
+ {
+ _forceCast = true;
+ }
+ }
+
+ if ((!StatusMgr.Instance.CanAttack(m_Hero.ServerInstID, _skill.skillInfo.config) || m_Hero.IsStun()) && !_forceCast)
{
return;
}
diff --git a/Fight/Actor/Status/StatusMgr.cs b/Fight/Actor/Status/StatusMgr.cs
index 8bed84f..cb893f0 100644
--- a/Fight/Actor/Status/StatusMgr.cs
+++ b/Fight/Actor/Status/StatusMgr.cs
@@ -652,18 +652,6 @@
public bool CanAttack(uint sid, SkillConfig _config)
{
- var _actorFight = GAMgr.Instance.GetBySID(sid) as GActorFight;
- SkillHelper.EffectValue _effectValue;
- SkillHelper.SkillInfo _skillInfo;
-
- if (_actorFight.SkillMgr.TryGetPassiveEffectValue(4093, out _effectValue, out _skillInfo))
- {
- if (_skillInfo.config.ExAttr1 == _config.SkillID)
- {
- return true;
- }
- }
-
List<Status_Base> _list = null;
if (m_StatusDict.TryGetValue(sid, out _list))
{
diff --git a/Fight/GameActor/GA_Hero.cs b/Fight/GameActor/GA_Hero.cs
index 23fe13b..2f39830 100644
--- a/Fight/GameActor/GA_Hero.cs
+++ b/Fight/GameActor/GA_Hero.cs
@@ -811,7 +811,6 @@
{
return !MapArea.IsInMapArea(CurMapArea, MapArea.E_Type.Safe)
&& !MapArea.IsInMapArea(CurMapArea, MapArea.E_Type.RebornSafe)
- && !IsStun()
&& !IsHurt()
&& !IsDaZuo()
&& State != E_ActorState.Roll
diff --git a/System/MainWin/MainWinSkillController.cs b/System/MainWin/MainWinSkillController.cs
index 7178a1b..5159172 100644
--- a/System/MainWin/MainWinSkillController.cs
+++ b/System/MainWin/MainWinSkillController.cs
@@ -228,6 +228,28 @@
var forbid = !StatusMgr.Instance.CanCastSkill(PlayerDatas.Instance.baseData.PlayerID);
for (int i = 0; i <= 8; i++)
{
+ if (placeSkillMap.ContainsKey(i))
+ {
+ int _skillId = placeSkillMap[i];
+ var _tsModel = ModelCenter.Instance.GetModel<TreasureSkillModel>();
+ if (_tsModel.TryGetExpertSkill(_skillId, out _skillId))
+ {
+ int _level = 0;
+ if (_tsModel.TryGetExpertActiveLevel(_skillId, out _level))
+ {
+ _skillId += (_level - 1);
+ }
+ var _skillInfo = SkillHelper.Instance.Get(_skillId);
+ SkillHelper.EffectValue _effectValue;
+ if (_skillInfo.effectValue.TryGetValue(4093, out _effectValue))
+ {
+ if (forbid)
+ {
+ continue;
+ }
+ }
+ }
+ }
var skillForbid = GetSkillForbid(i);
skillForbid.value = forbid;
}
--
Gitblit v1.8.0