```
feat(WerewolfSkill): 狂暴狼人技能系统重构为吸血战坦体系 - 实现完整的嗜血狂暴技能体系:1级嗜血狂暴、3级血脉沸腾、 6级残虐血性、10级不灭狼王四个阶段 - 添加重抓撕咬动画效果和鲜血飞溅特效 - 实现扇形AOE撕裂攻击和吸血回复机制 - 添加背水一战机制:血量越低减伤和吸血越高 - 实现击杀刷新技能时间的连击机制 - 更新狼人定位从快速近战改为吸血战坦 - 添加全局单位击杀事件监听处理 ```
This commit is contained in:
1 parent
1a84ea999e
commit
2ff98e8923
18 files changed
+24289
-23
No files matched your search
@@ -21,3 +21,7 @@ AnimatorOverrideController:
|
|||||||
type: 3}
|
type: 3}
|
||||||
m_OverrideClip: {fileID: -203655887218126122, guid: af955da8516f85f468ca9694a4237ad4,
|
m_OverrideClip: {fileID: -203655887218126122, guid: af955da8516f85f468ca9694a4237ad4,
|
||||||
type: 3}
|
type: 3}
|
||||||
|
- m_OriginalClip: {fileID: -203655887218126122, guid: b82d15855591849bd80b62238bcd4ed3,
|
||||||
|
type: 3}
|
||||||
|
m_OverrideClip: {fileID: -203655887218126122, guid: 647a82c6dc71a084792627131a016626,
|
||||||
|
type: 3}
|
||||||
@@ -121,6 +121,10 @@ PrefabInstance:
|
|||||||
type: 3}
|
type: 3}
|
||||||
insertIndex: -1
|
insertIndex: -1
|
||||||
addedObject: {fileID: 2306837371898493008}
|
addedObject: {fileID: 2306837371898493008}
|
||||||
|
- targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: 3d031ad534e512e45bb7fe10237e6286,
|
||||||
|
type: 3}
|
||||||
|
insertIndex: -1
|
||||||
|
addedObject: {fileID: 6056801628606690397}
|
||||||
m_SourcePrefab: {fileID: 100100000, guid: 3d031ad534e512e45bb7fe10237e6286, type: 3}
|
m_SourcePrefab: {fileID: 100100000, guid: 3d031ad534e512e45bb7fe10237e6286, type: 3}
|
||||||
--- !u!4 &6220015408525696565 stripped
|
--- !u!4 &6220015408525696565 stripped
|
||||||
Transform:
|
Transform:
|
||||||
@@ -229,6 +233,7 @@ MonoBehaviour:
|
|||||||
indicatorHeight: 0.35
|
indicatorHeight: 0.35
|
||||||
stunIndicatorPrefab: {fileID: 2432573200162841629, guid: de288ea16be0c1544a4c6eb71e899570,
|
stunIndicatorPrefab: {fileID: 2432573200162841629, guid: de288ea16be0c1544a4c6eb71e899570,
|
||||||
type: 3}
|
type: 3}
|
||||||
|
isStunImmune: 0
|
||||||
--- !u!114 &1685608640327596089
|
--- !u!114 &1685608640327596089
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@@ -281,6 +286,20 @@ MonoBehaviour:
|
|||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
teamId: 0
|
teamId: 0
|
||||||
|
--- !u!114 &6056801628606690397
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 6708744566382593167}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 67edc73fe4fd94ef490bff08abcc862c, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
clawSlashVfxPrefab: {fileID: 171468, guid: 54a379bd213748a5aa438ae19b894aad, type: 3}
|
||||||
|
bloodHitVfxPrefab: {fileID: 167524, guid: b2d064a2bb734666bcb5e0851eee5a4d, type: 3}
|
||||||
--- !u!1001 &6397565237544471551
|
--- !u!1001 &6397565237544471551
|
||||||
PrefabInstance:
|
PrefabInstance:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
|||||||
Binary file not shown.
@@ -252,6 +252,9 @@ public class WorldHealthBar : MonoBehaviour
|
|||||||
/// <summary>护盾吸收伤害事件:参数为实际吸收的伤害数值</summary>
|
/// <summary>护盾吸收伤害事件:参数为实际吸收的伤害数值</summary>
|
||||||
public System.Action<float> OnShieldAbsorbedDamage;
|
public System.Action<float> OnShieldAbsorbedDamage;
|
||||||
|
|
||||||
|
/// <summary>全局单位击杀事件:参数为 (受害者 GameObject, 击杀者 GameObject)</summary>
|
||||||
|
public static event System.Action<GameObject, GameObject> OnUnitKilled;
|
||||||
|
|
||||||
// 让单位受到伤害,并弹出伤害数字。
|
// 让单位受到伤害,并弹出伤害数字。
|
||||||
// attacker: 攻击者,用于判断受击者(自己)是敌是友,决定数字颜色和浮动方向
|
// attacker: 攻击者,用于判断受击者(自己)是敌是友,决定数字颜色和浮动方向
|
||||||
public void TakeDamage(float amount, GameObject attacker = null)
|
public void TakeDamage(float amount, GameObject attacker = null)
|
||||||
@@ -273,6 +276,10 @@ public class WorldHealthBar : MonoBehaviour
|
|||||||
if (amount > 0f)
|
if (amount > 0f)
|
||||||
{
|
{
|
||||||
SetHealth(currentHealth - amount);
|
SetHealth(currentHealth - amount);
|
||||||
|
if (currentHealth <= 0f && !wasDead && attacker != null)
|
||||||
|
{
|
||||||
|
OnUnitKilled?.Invoke(gameObject, attacker);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (showDamageNumbers && originalDamage > 0f && !wasDead)
|
if (showDamageNumbers && originalDamage > 0f && !wasDead)
|
||||||
|
|||||||
@@ -1,41 +1,399 @@
|
|||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 狂暴狼人技能:嗜血狂暴体系(吸血战坦 · 1/3/6/10 级完整阶梯)
|
||||||
|
/// 1级【嗜血狂暴】:重抓撕咬造成 150% 伤害(立即回复该次伤害 50% 生命);激活 5 秒【嗜血状态】,普攻吸血 +30%,攻速 +25%
|
||||||
|
/// 3级【血脉沸腾】:嗜血状态延长至 6.5 秒,期间普攻吸血提升至 45%,攻速 +35%,撕咬伤害提升至 190%
|
||||||
|
/// 6级【残虐血性】:撕咬升级为前方扇形 AOE 撕裂;嗜血期间触发【背水一战】:自身血量每降低 10%,伤害减免 +3%,普攻吸血额外 +5%
|
||||||
|
/// 10级【不灭狼王】:释放技能临时提升 35% 最大生命值上限及等额回血;技能期间只要击杀敌人,立即回复 20% 最大生命值并刷新嗜血时间!
|
||||||
|
/// </summary>
|
||||||
public class WerewolfSkill : UnitSkill
|
public class WerewolfSkill : UnitSkill
|
||||||
{
|
{
|
||||||
[Header("狼嚎效果")]
|
[Header("特效资源")]
|
||||||
[Min(0f)]
|
[Tooltip("重抓抓痕特效 (SwordSlashMiniRed)")]
|
||||||
public float attackSpeedIncrease = 0.2f;
|
public GameObject clawSlashVfxPrefab;
|
||||||
|
|
||||||
[Min(0f)]
|
[Tooltip("受击鲜血爆裂特效 (BloodExplosion)")]
|
||||||
public float duration = 5f;
|
public GameObject bloodHitVfxPrefab;
|
||||||
|
|
||||||
private bool buffActive;
|
private bool isSkillPending = false;
|
||||||
private float buffEndTime;
|
private bool isBloodthirstActive = false;
|
||||||
|
private float bloodthirstTimer = 0f;
|
||||||
|
private float bloodthirstMaxDuration = 5f;
|
||||||
|
|
||||||
public override void ReleaseSkill()
|
// 属性加成追踪与还原
|
||||||
|
private float baseBonusLifesteal = 0f;
|
||||||
|
private float dynamicLossLifesteal = 0f;
|
||||||
|
private float dynamicLossDamageReduction = 0f;
|
||||||
|
private float appliedAttackSpeedMultiplier = 1f;
|
||||||
|
private float temporaryBonusMaxHealth = 0f;
|
||||||
|
|
||||||
|
private void EnsureUnit()
|
||||||
{
|
{
|
||||||
ApplyHowlBuff();
|
if (unit == null)
|
||||||
|
{
|
||||||
|
unit = GetComponent<UnitBase>();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ApplyHowlBuff()
|
protected override void Awake()
|
||||||
{
|
{
|
||||||
if (buffActive)
|
base.Awake();
|
||||||
|
EnsureUnit();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Start()
|
||||||
|
{
|
||||||
|
EnsureUnit();
|
||||||
|
WorldHealthBar.OnUnitKilled += OnGlobalUnitKilled;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 当能量蓄满时触发:播放大招攻击动画
|
||||||
|
/// </summary>
|
||||||
|
public override void ReleaseSkill()
|
||||||
|
{
|
||||||
|
EnsureUnit();
|
||||||
|
if (unit == null) return;
|
||||||
|
|
||||||
|
WorldHealthBar healthBar = unit.GetComponent<WorldHealthBar>();
|
||||||
|
if (healthBar == null || healthBar.IsDead) return;
|
||||||
|
|
||||||
|
if (unit.Target == null) return;
|
||||||
|
|
||||||
|
unit.FaceCurrentTarget(0f);
|
||||||
|
isSkillPending = true;
|
||||||
|
|
||||||
|
// 10级大招临时提升 35% 最大生命上限
|
||||||
|
if (unit.level >= 10 && temporaryBonusMaxHealth <= 0f)
|
||||||
{
|
{
|
||||||
buffEndTime = Time.time + duration;
|
temporaryBonusMaxHealth = healthBar.maxHealth * 0.35f;
|
||||||
return;
|
healthBar.maxHealth += temporaryBonusMaxHealth;
|
||||||
|
healthBar.Heal(temporaryBonusMaxHealth);
|
||||||
|
Debug.Log($"<color=red>【不灭狼王】爆发!</color> 狼王之怒提升生命上限 +{temporaryBonusMaxHealth:F0} 并回血!");
|
||||||
}
|
}
|
||||||
|
|
||||||
buffActive = true;
|
// 播放大招攻击动画(挠击动作)
|
||||||
buffEndTime = Time.time + duration;
|
unit.PlaySkillAnimation(OnSkillAnimationFinished, 1.2f);
|
||||||
unit.MultiplyAttackSpeed(1f + attackSpeedIncrease, 2f);
|
Debug.Log($"<color=red>【狂暴狼人】释放大招【嗜血狂暴】</color>,等待挠击命中帧!");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 动画帧命中回调(兼容 OnAttackEffect 和 OnSkillHit1)
|
||||||
|
/// </summary>
|
||||||
|
public void OnSkillHit1()
|
||||||
|
{
|
||||||
|
ExecuteBiteStrike();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnAttackEffect()
|
||||||
|
{
|
||||||
|
if (isSkillPending)
|
||||||
|
{
|
||||||
|
ExecuteBiteStrike();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 实际结算大招重抓撕咬伤害与启动嗜血狂暴
|
||||||
|
/// </summary>
|
||||||
|
private void ExecuteBiteStrike()
|
||||||
|
{
|
||||||
|
if (!isSkillPending) return;
|
||||||
|
isSkillPending = false;
|
||||||
|
|
||||||
|
EnsureUnit();
|
||||||
|
if (unit == null) return;
|
||||||
|
|
||||||
|
WorldHealthBar healthBar = unit.GetComponent<WorldHealthBar>();
|
||||||
|
if (healthBar == null || healthBar.IsDead) return;
|
||||||
|
|
||||||
|
int level = unit.level;
|
||||||
|
|
||||||
|
// 伤害倍率:1级 150%,3级+ 190%
|
||||||
|
float damageMultiplier = level >= 3 ? 1.90f : 1.50f;
|
||||||
|
float damage = unit.attackPower * damageMultiplier;
|
||||||
|
|
||||||
|
// 6级升级为扇形前方 AOE 撕咬,否则为单体重抓
|
||||||
|
if (level >= 6)
|
||||||
|
{
|
||||||
|
ExecuteCleaveBite(damage);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ExecuteSingleBite(damage);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 激活【嗜血状态】
|
||||||
|
ActivateBloodthirst(level);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ExecuteSingleBite(float damage)
|
||||||
|
{
|
||||||
|
if (unit.Target == null) return;
|
||||||
|
|
||||||
|
GameObject target = unit.Target;
|
||||||
|
UnitBase targetUnit = target.GetComponentInParent<UnitBase>();
|
||||||
|
WorldHealthBar targetBar = target.GetComponentInParent<WorldHealthBar>();
|
||||||
|
|
||||||
|
PlayClawAndBloodVfx(target.transform.position + Vector3.up * 0.8f);
|
||||||
|
|
||||||
|
float dealtDamage = 0f;
|
||||||
|
if (targetUnit != null)
|
||||||
|
{
|
||||||
|
targetUnit.ReceiveDamage(damage, unit.gameObject);
|
||||||
|
dealtDamage = damage;
|
||||||
|
}
|
||||||
|
else if (targetBar != null)
|
||||||
|
{
|
||||||
|
targetBar.TakeDamage(damage, unit.gameObject);
|
||||||
|
dealtDamage = damage;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 立即回复该次伤害 50% 的生命
|
||||||
|
WorldHealthBar myBar = unit.GetComponent<WorldHealthBar>();
|
||||||
|
if (myBar != null && dealtDamage > 0f)
|
||||||
|
{
|
||||||
|
float healAmount = dealtDamage * 0.5f;
|
||||||
|
myBar.Heal(healAmount);
|
||||||
|
Debug.Log($"<color=green>【嗜血狂暴】撕咬重创!</color> 造成 {dealtDamage:F1} 伤害,吸血回复 +{healAmount:F1} HP!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ExecuteCleaveBite(float damage)
|
||||||
|
{
|
||||||
|
float cleaveRadius = 2.4f;
|
||||||
|
float cleaveAngle = 120f;
|
||||||
|
Vector3 forward = unit.transform.forward;
|
||||||
|
Vector3 myPos = unit.transform.position;
|
||||||
|
|
||||||
|
UnitTeam myTeam = unit.GetComponent<UnitTeam>();
|
||||||
|
var allTeams = FindObjectsOfType<UnitTeam>();
|
||||||
|
float totalDealt = 0f;
|
||||||
|
|
||||||
|
foreach (var t in allTeams)
|
||||||
|
{
|
||||||
|
if (t == null || !t.gameObject.activeInHierarchy || myTeam == null || !myTeam.IsEnemy(t.gameObject)) continue;
|
||||||
|
|
||||||
|
Vector3 toEnemy = t.transform.position - myPos;
|
||||||
|
toEnemy.y = 0f;
|
||||||
|
if (toEnemy.sqrMagnitude <= cleaveRadius * cleaveRadius)
|
||||||
|
{
|
||||||
|
float angle = Vector3.Angle(forward, toEnemy.normalized);
|
||||||
|
if (angle <= cleaveAngle * 0.5f)
|
||||||
|
{
|
||||||
|
PlayClawAndBloodVfx(t.transform.position + Vector3.up * 0.8f);
|
||||||
|
|
||||||
|
var targetUnit = t.GetComponentInParent<UnitBase>();
|
||||||
|
if (targetUnit != null)
|
||||||
|
{
|
||||||
|
targetUnit.ReceiveDamage(damage, unit.gameObject);
|
||||||
|
totalDealt += damage;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var bar = t.GetComponentInParent<WorldHealthBar>();
|
||||||
|
if (bar != null)
|
||||||
|
{
|
||||||
|
bar.TakeDamage(damage, unit.gameObject);
|
||||||
|
totalDealt += damage;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 6级扇形撕裂吸血:回复总伤害的 50%
|
||||||
|
WorldHealthBar myBar = unit.GetComponent<WorldHealthBar>();
|
||||||
|
if (myBar != null && totalDealt > 0f)
|
||||||
|
{
|
||||||
|
float healAmount = totalDealt * 0.5f;
|
||||||
|
myBar.Heal(healAmount);
|
||||||
|
Debug.Log($"<color=green>【残虐血性】扇形撕裂!</color> 命中敌群造成 {totalDealt:F1} 伤害,吸血狂吸 +{healAmount:F1} HP!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 激活/刷新嗜血状态
|
||||||
|
/// </summary>
|
||||||
|
private void ActivateBloodthirst(int level)
|
||||||
|
{
|
||||||
|
float duration = level >= 3 ? 6.5f : 5.0f;
|
||||||
|
float bonusLifesteal = level >= 3 ? 0.45f : 0.30f;
|
||||||
|
float bonusAttackSpeed = level >= 3 ? 1.35f : 1.25f;
|
||||||
|
|
||||||
|
bloodthirstMaxDuration = duration;
|
||||||
|
bloodthirstTimer = duration;
|
||||||
|
|
||||||
|
if (!isBloodthirstActive)
|
||||||
|
{
|
||||||
|
isBloodthirstActive = true;
|
||||||
|
baseBonusLifesteal = bonusLifesteal;
|
||||||
|
unit.lifestealRate += baseBonusLifesteal;
|
||||||
|
|
||||||
|
appliedAttackSpeedMultiplier = bonusAttackSpeed;
|
||||||
|
unit.MultiplyAttackSpeed(appliedAttackSpeedMultiplier, 3.5f);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 已在嗜血中时重置持续时间
|
||||||
|
bloodthirstTimer = duration;
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.Log($"<color=red>【嗜血状态激活】</color> 持续 {duration:F1} 秒:吸血 +{bonusLifesteal * 100:F0}%,攻速 +{(bonusAttackSpeed - 1f) * 100:F0}%!");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Update()
|
private void Update()
|
||||||
{
|
{
|
||||||
if (buffActive && Time.time >= buffEndTime)
|
if (!isBloodthirstActive || unit == null) return;
|
||||||
|
|
||||||
|
bloodthirstTimer -= Time.deltaTime;
|
||||||
|
|
||||||
|
// 6级【背水一战】:嗜血期间自身血量越残,额外获得越高额的减伤与吸血
|
||||||
|
if (unit.level >= 6)
|
||||||
{
|
{
|
||||||
buffActive = false;
|
UpdateDesperationBuff();
|
||||||
unit.MultiplyAttackSpeed(1f / (1f + attackSpeedIncrease), 2f);
|
}
|
||||||
|
|
||||||
|
if (bloodthirstTimer <= 0f)
|
||||||
|
{
|
||||||
|
EndBloodthirst();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 6级【背水一战】:自身血量每降低 10%,减伤 +3%,吸血 +5%
|
||||||
|
/// </summary>
|
||||||
|
private void UpdateDesperationBuff()
|
||||||
|
{
|
||||||
|
WorldHealthBar healthBar = unit.GetComponent<WorldHealthBar>();
|
||||||
|
if (healthBar == null || healthBar.maxHealth <= 0f) return;
|
||||||
|
|
||||||
|
float lostHealthRatio = Mathf.Clamp01(1f - (healthBar.currentHealth / healthBar.maxHealth));
|
||||||
|
int lostTens = Mathf.FloorToInt(lostHealthRatio * 10f); // 每 10%
|
||||||
|
|
||||||
|
float targetReduction = lostTens * 0.03f; // 每 10% 减伤 +3% (最高 27%)
|
||||||
|
float targetExtraLifesteal = lostTens * 0.05f; // 每 10% 吸血 +5% (最高 45%)
|
||||||
|
|
||||||
|
// 差量动态更新,避免死循环累加
|
||||||
|
float deltaReduction = targetReduction - dynamicLossDamageReduction;
|
||||||
|
unit.damageReductionRate += deltaReduction;
|
||||||
|
dynamicLossDamageReduction = targetReduction;
|
||||||
|
|
||||||
|
float deltaLifesteal = targetExtraLifesteal - dynamicLossLifesteal;
|
||||||
|
unit.lifestealRate += deltaLifesteal;
|
||||||
|
dynamicLossLifesteal = targetExtraLifesteal;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void EndBloodthirst()
|
||||||
|
{
|
||||||
|
if (!isBloodthirstActive) return;
|
||||||
|
isBloodthirstActive = false;
|
||||||
|
bloodthirstTimer = 0f;
|
||||||
|
|
||||||
|
// 还原属性
|
||||||
|
if (unit != null)
|
||||||
|
{
|
||||||
|
unit.lifestealRate = Mathf.Max(0f, unit.lifestealRate - baseBonusLifesteal - dynamicLossLifesteal);
|
||||||
|
unit.damageReductionRate = Mathf.Max(0f, unit.damageReductionRate - dynamicLossDamageReduction);
|
||||||
|
|
||||||
|
if (appliedAttackSpeedMultiplier > 1f)
|
||||||
|
{
|
||||||
|
unit.MultiplyAttackSpeed(1f / appliedAttackSpeedMultiplier, 3.5f);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 10级大招临时提升的生命上限还原
|
||||||
|
if (temporaryBonusMaxHealth > 0f)
|
||||||
|
{
|
||||||
|
WorldHealthBar bar = unit.GetComponent<WorldHealthBar>();
|
||||||
|
if (bar != null)
|
||||||
|
{
|
||||||
|
bar.maxHealth = Mathf.Max(1f, bar.maxHealth - temporaryBonusMaxHealth);
|
||||||
|
bar.currentHealth = Mathf.Min(bar.currentHealth, bar.maxHealth);
|
||||||
|
}
|
||||||
|
temporaryBonusMaxHealth = 0f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
baseBonusLifesteal = 0f;
|
||||||
|
dynamicLossLifesteal = 0f;
|
||||||
|
dynamicLossDamageReduction = 0f;
|
||||||
|
appliedAttackSpeedMultiplier = 1f;
|
||||||
|
|
||||||
|
Debug.Log($"<color=gray>【嗜血状态结束】属性恢复正常。</color>");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 10级【不灭狼王】:技能期间击杀敌人,立即回复 20% 最大生命值并刷新嗜血时间!
|
||||||
|
/// </summary>
|
||||||
|
private void OnGlobalUnitKilled(GameObject victim, GameObject killer)
|
||||||
|
{
|
||||||
|
if (!isBloodthirstActive || unit == null || killer == null) return;
|
||||||
|
if (unit.level < 10) return;
|
||||||
|
|
||||||
|
// 判断击杀者是否是自己
|
||||||
|
if (killer == unit.gameObject || killer.transform.IsChildOf(unit.transform))
|
||||||
|
{
|
||||||
|
WorldHealthBar myBar = unit.GetComponent<WorldHealthBar>();
|
||||||
|
if (myBar != null && !myBar.IsDead)
|
||||||
|
{
|
||||||
|
float heal = myBar.maxHealth * 0.20f;
|
||||||
|
myBar.Heal(heal);
|
||||||
|
|
||||||
|
// 重置/刷新嗜血持续时间
|
||||||
|
bloodthirstTimer = bloodthirstMaxDuration;
|
||||||
|
Debug.Log($"<color=red>【不灭狼王·猎杀连环】!</color> 击杀 {victim.name},立即回复 20% 生命 (+{heal:F0}) 并刷新狂暴状态!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void PlayClawAndBloodVfx(Vector3 position)
|
||||||
|
{
|
||||||
|
// 1. 鲜血飞溅
|
||||||
|
GameObject bloodPrefab = bloodHitVfxPrefab;
|
||||||
|
#if UNITY_EDITOR
|
||||||
|
if (bloodPrefab == null)
|
||||||
|
{
|
||||||
|
bloodPrefab = UnityEditor.AssetDatabase.LoadAssetAtPath<GameObject>("Assets/TJGeneratorLibEffects/Prefabs/Combat/Blood/Red/BloodExplosion.prefab");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if (bloodPrefab != null)
|
||||||
|
{
|
||||||
|
var vfx = Instantiate(bloodPrefab, position, Quaternion.identity);
|
||||||
|
vfx.transform.localScale = Vector3.one * 1.5f;
|
||||||
|
Destroy(vfx, 1.5f);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. 红色抓痕
|
||||||
|
GameObject slashPrefab = clawSlashVfxPrefab;
|
||||||
|
#if UNITY_EDITOR
|
||||||
|
if (slashPrefab == null)
|
||||||
|
{
|
||||||
|
slashPrefab = UnityEditor.AssetDatabase.LoadAssetAtPath<GameObject>("Assets/TJGeneratorLibEffects/Prefabs/Combat/Sword/Slash/SwordSlashMini/SwordSlashMiniRed.prefab");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if (slashPrefab != null && unit != null)
|
||||||
|
{
|
||||||
|
Quaternion rot = Quaternion.Euler(-90f, 0f, -unit.transform.eulerAngles.y);
|
||||||
|
var vfx = Instantiate(slashPrefab, position, rot);
|
||||||
|
vfx.transform.localScale = Vector3.one * 1.4f;
|
||||||
|
Destroy(vfx, 1.0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnSkillAnimationFinished()
|
||||||
|
{
|
||||||
|
if (isSkillPending)
|
||||||
|
{
|
||||||
|
ExecuteBiteStrike(); // 容错兜底:若动画结束仍未收到 Event,强制结算撕咬
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnDestroy()
|
||||||
|
{
|
||||||
|
WorldHealthBar.OnUnitKilled -= OnGlobalUnitKilled;
|
||||||
|
EndBloodthirst();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:yousandi.cn,2023:
|
||||||
|
--- !u!21 &2100000
|
||||||
|
Material:
|
||||||
|
serializedVersion: 8
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_Name: slash_ADD
|
||||||
|
m_Shader: {fileID: 211, guid: 0000000000000000f000000000000000, type: 0}
|
||||||
|
m_Parent: {fileID: 0}
|
||||||
|
m_ModifiedSerializedProperties: 0
|
||||||
|
m_ValidKeywords:
|
||||||
|
- _ALPHABLEND_ON
|
||||||
|
- _FADING_ON
|
||||||
|
m_InvalidKeywords: []
|
||||||
|
m_LightmapFlags: 0
|
||||||
|
m_EnableInstancingVariants: 0
|
||||||
|
m_DoubleSidedGI: 0
|
||||||
|
m_CustomRenderQueue: 3000
|
||||||
|
stringTagMap:
|
||||||
|
RenderType: Transparent
|
||||||
|
disabledShaderPasses:
|
||||||
|
- GRABPASS
|
||||||
|
m_LockedProperties:
|
||||||
|
m_SavedProperties:
|
||||||
|
serializedVersion: 3
|
||||||
|
m_TexEnvs:
|
||||||
|
- _BumpMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _EmissionMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _MainTex:
|
||||||
|
m_Texture: {fileID: 2800000, guid: 6043ce9ffa8346eeb98e79af30461202, type: 3}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
m_Ints: []
|
||||||
|
m_Floats:
|
||||||
|
- _BlendOp: 0
|
||||||
|
- _BumpScale: 1
|
||||||
|
- _CameraFadingEnabled: 0
|
||||||
|
- _CameraFarFadeDistance: 2
|
||||||
|
- _CameraNearFadeDistance: 1
|
||||||
|
- _ColorMode: 0
|
||||||
|
- _Cull: 0
|
||||||
|
- _Cutoff: 0.5
|
||||||
|
- _DistortionBlend: 0.5
|
||||||
|
- _DistortionEnabled: 0
|
||||||
|
- _DistortionStrength: 1
|
||||||
|
- _DistortionStrengthScaled: 0
|
||||||
|
- _DstBlend: 1
|
||||||
|
- _EmissionEnabled: 0
|
||||||
|
- _FlipbookMode: 0
|
||||||
|
- _InvFade: 1
|
||||||
|
- _LightingEnabled: 0
|
||||||
|
- _Mode: 4
|
||||||
|
- _SoftParticlesEnabled: 1
|
||||||
|
- _SoftParticlesFarFadeDistance: 0.2
|
||||||
|
- _SoftParticlesNearFadeDistance: 0
|
||||||
|
- _SrcBlend: 5
|
||||||
|
- _ZWrite: 0
|
||||||
|
m_Colors:
|
||||||
|
- _CameraFadeParams: {r: 0, g: Infinity, b: 0, a: 0}
|
||||||
|
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _ColorAddSubDiff: {r: 0, g: 0, b: 0, a: 0}
|
||||||
|
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
- _SoftParticleFadeParams: {r: 0, g: 5, b: 0, a: 0}
|
||||||
|
- _TintColor: {r: 0.5, g: 0.5, b: 0.5, a: 0.5}
|
||||||
|
m_BuildTextureStacks: []
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 62658b223e054060958313ce84a83a7c
|
||||||
|
timeCreated: 1494285388
|
||||||
|
licenseType: Store
|
||||||
|
NativeFormatImporter:
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: DnpO5nv/Vy7if5Qb1E0LNqbcvYC4bTtnqDaDrDnQZgZ2+wQqE/OeOJg=
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: CHIZvCyqBip0p8Ro1Cs6gK6A3E+gknLnvOxt9nOpOPc9D0+K3bXzBbQ=
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: b2d064a2bb734666bcb5e0851eee5a4d
|
||||||
|
timeCreated: 1446774922
|
||||||
|
licenseType: Store
|
||||||
|
NativeFormatImporter:
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: D34c5yj5USrtDfW6KXOaOBB567QkOuIdxyuiTkNUDUtbm0mYNsavPBU=
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
+9541
File diff suppressed because it is too large.
Load diff
+8
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 54a379bd213748a5aa438ae19b894aad
|
||||||
|
timeCreated: 1494295491
|
||||||
|
licenseType: Store
|
||||||
|
NativeFormatImporter:
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 171 KiB |
@@ -0,0 +1,57 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 6043ce9ffa8346eeb98e79af30461202
|
||||||
|
timeCreated: 1494285334
|
||||||
|
licenseType: Store
|
||||||
|
TextureImporter:
|
||||||
|
fileIDToRecycleName: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
mipmaps:
|
||||||
|
mipMapMode: 0
|
||||||
|
enableMipMap: 1
|
||||||
|
linearTexture: 0
|
||||||
|
correctGamma: 0
|
||||||
|
fadeOut: 0
|
||||||
|
borderMipMap: 0
|
||||||
|
mipMapFadeDistanceStart: 1
|
||||||
|
mipMapFadeDistanceEnd: 3
|
||||||
|
bumpmap:
|
||||||
|
convertToNormalMap: 0
|
||||||
|
externalNormalMap: 0
|
||||||
|
heightScale: 0.25
|
||||||
|
normalMapFilter: 0
|
||||||
|
isReadable: 0
|
||||||
|
grayScaleToAlpha: 0
|
||||||
|
generateCubemap: 0
|
||||||
|
cubemapConvolution: 0
|
||||||
|
cubemapConvolutionSteps: 7
|
||||||
|
cubemapConvolutionExponent: 1.5
|
||||||
|
seamlessCubemap: 0
|
||||||
|
textureFormat: -1
|
||||||
|
maxTextureSize: 2048
|
||||||
|
textureSettings:
|
||||||
|
filterMode: -1
|
||||||
|
aniso: 1
|
||||||
|
mipBias: -1
|
||||||
|
wrapMode: -1
|
||||||
|
nPOTScale: 1
|
||||||
|
lightmap: 0
|
||||||
|
rGBM: 0
|
||||||
|
compressionQuality: 50
|
||||||
|
allowsAlphaSplitting: 0
|
||||||
|
spriteMode: 0
|
||||||
|
spriteExtrude: 1
|
||||||
|
spriteMeshType: 1
|
||||||
|
alignment: 0
|
||||||
|
spritePivot: {x: 0.5, y: 0.5}
|
||||||
|
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
spritePixelsToUnits: 100
|
||||||
|
alphaIsTransparency: 1
|
||||||
|
textureType: -1
|
||||||
|
buildTargetSettings: []
|
||||||
|
spriteSheet:
|
||||||
|
sprites: []
|
||||||
|
outline: []
|
||||||
|
spritePackingTag:
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -161,6 +161,7 @@
|
|||||||
- [2026-10-13 15:47:12] 2026-10-12 第二章原弓箭猎人重构为荒野猎手(投矛手):远程投掷重矛,核心技能锁定大范围内距离最远的目标超远狙杀(越远伤害越高),6级升级为直线贯穿+最远目标击退2米(移除眩晕),10级击杀返还50%能量与范围爆裂。文档已同步更新。
|
- [2026-10-13 15:47:12] 2026-10-12 第二章原弓箭猎人重构为荒野猎手(投矛手):远程投掷重矛,核心技能锁定大范围内距离最远的目标超远狙杀(越远伤害越高),6级升级为直线贯穿+最远目标击退2米(移除眩晕),10级击杀返还50%能量与范围爆裂。文档已同步更新。
|
||||||
- [2026-10-13 23:28:05] 2026-10-13 新英雄荒野猎手基础搭建完成:制作矛预制体 (Assets/Prefabs/武器飞行物/矛.prefab),Projectile 支持抛物线投掷 (useParabola=true, parabolaHeight=1.0m,飞行中根据轨迹切线自动俯仰矛头);创建荒野猎手Data.asset与预制体 (Assets/Prefabs/第二章/荒野猎手.prefab),挂载CharacterController、NavMeshAgent、WorldHealthBar、StatusEffectController、UnitTeam、UnitBase;攻击类型为RangedProjectile,射程6m,投矛出生点绑定右手骨骼下的pos节点。PlayMode投矛抛物线轨迹验证通过。
|
- [2026-10-13 23:28:05] 2026-10-13 新英雄荒野猎手基础搭建完成:制作矛预制体 (Assets/Prefabs/武器飞行物/矛.prefab),Projectile 支持抛物线投掷 (useParabola=true, parabolaHeight=1.0m,飞行中根据轨迹切线自动俯仰矛头);创建荒野猎手Data.asset与预制体 (Assets/Prefabs/第二章/荒野猎手.prefab),挂载CharacterController、NavMeshAgent、WorldHealthBar、StatusEffectController、UnitTeam、UnitBase;攻击类型为RangedProjectile,射程6m,投矛出生点绑定右手骨骼下的pos节点。PlayMode投矛抛物线轨迹验证通过。
|
||||||
- [2026-10-13 23:54:42] 2026-10-13 荒野猎手阶梯技能实装完毕:文档与WildHunterSkill.cs已更新。按需求移除6级穿透杂兵伤害与10级群体爆裂;1级穿心猎矛自动制导后排最远目标(每米+5%伤害上限+45%);3级速度+40%、暴击+20%、伤害230%;6级后排目标后仰击退2.0米(NavMesh.Warp安全后推,无眩晕);10级伤害340%且斩杀立即返还50%技能能量;技能重矛挂载SparkleMissileYellow金色流光拖尾粒子。全流程PlayMode测试验证通过。
|
- [2026-10-13 23:54:42] 2026-10-13 荒野猎手阶梯技能实装完毕:文档与WildHunterSkill.cs已更新。按需求移除6级穿透杂兵伤害与10级群体爆裂;1级穿心猎矛自动制导后排最远目标(每米+5%伤害上限+45%);3级速度+40%、暴击+20%、伤害230%;6级后排目标后仰击退2.0米(NavMesh.Warp安全后推,无眩晕);10级伤害340%且斩杀立即返还50%技能能量;技能重矛挂载SparkleMissileYellow金色流光拖尾粒子。全流程PlayMode测试验证通过。
|
||||||
|
- [2026-10-14 15:38:42] 2026-10-13 狂暴狼人重构为吸血战坦定位:1级解锁【嗜血狂暴】获得即时撕咬吸血与30%普攻吸血+25%攻速;3级数值强化至45%吸血;6级解锁残血增益(血量越低减伤和吸血越高);10级解锁【不灭狼王】临时提升35%生命上限且击杀回复20%生命并刷新狂暴。文档已更新。
|
||||||
|
|
||||||
### Reference
|
### Reference
|
||||||
- [2026-09-09 12:23:17] 飞行物脚本 Projectile.cs 负责锁敌追踪、碰撞检测和伤害结算。箭矢预制体 ArrowProjectile_White.prefab 已配置 Projectile 组件和 CapsuleCollider(Is Trigger)。远程单位需在攻击动画松弦帧添加 OnAttackEffect Event,并在 UnitBase 中设置 attackType=RangedProjectile、projectilePrefab、projectileSpawnPoint。
|
- [2026-09-09 12:23:17] 飞行物脚本 Projectile.cs 负责锁敌追踪、碰撞检测和伤害结算。箭矢预制体 ArrowProjectile_White.prefab 已配置 Projectile 组件和 CapsuleCollider(Is Trigger)。远程单位需在攻击动画松弦帧添加 OnAttackEffect Event,并在 UnitBase 中设置 attackType=RangedProjectile、projectilePrefab、projectileSpawnPoint。
|
||||||
+4
-4
@@ -74,7 +74,7 @@
|
|||||||
| 城堡法师 | 正常人形 | 远程范围输出 | 已有 Prefab |
|
| 城堡法师 | 正常人形 | 远程范围输出 | 已有 Prefab |
|
||||||
| 精锐士兵 | 正常人形 | 高生命近战、精英输出 | 已有 Prefab |
|
| 精锐士兵 | 正常人形 | 高生命近战、精英输出 | 已有 Prefab |
|
||||||
| 荒野猎手 | 正常人形 | 远程重矛、后排狙杀 | 待更新模型(原弓箭猎人) |
|
| 荒野猎手 | 正常人形 | 远程重矛、后排狙杀 | 待更新模型(原弓箭猎人) |
|
||||||
| 狼人 | 人形兽类 | 快速近战、持续输出 | 已有 Prefab |
|
| 狂暴狼人 | 人形兽类 | 吸血战坦、前排持续续航 | 已有 Prefab |
|
||||||
| 石巨人 | 大体型构造体 | 重型前排、范围控制 | 已有 Prefab |
|
| 石巨人 | 大体型构造体 | 重型前排、范围控制 | 已有 Prefab |
|
||||||
|
|
||||||
### 英雄数值原则
|
### 英雄数值原则
|
||||||
@@ -137,7 +137,7 @@ CharacterData 基础属性
|
|||||||
|
|
||||||
### 第二章英雄
|
### 第二章英雄
|
||||||
|
|
||||||
- 狂暴狼人:快速近战,依靠攻速和持续输出压制敌人。
|
- 狂暴狼人:吸血战坦,依靠高额普攻吸血与残血减伤在前排屹立不倒。
|
||||||
- 荒野猎手:远程重矛,锁定大范围内最远距离的敌方目标,后排高伤狙杀与强力后仰击退(原弓箭猎人)。
|
- 荒野猎手:远程重矛,锁定大范围内最远距离的敌方目标,后排高伤狙杀与强力后仰击退(原弓箭猎人)。
|
||||||
- 石巨人:高生命重型前排,拥有范围控制能力。
|
- 石巨人:高生命重型前排,拥有范围控制能力。
|
||||||
- 荒野祭司:辅助治疗和范围支援,后续制作。
|
- 荒野祭司:辅助治疗和范围支援,后续制作。
|
||||||
@@ -155,7 +155,7 @@ CharacterData 基础属性
|
|||||||
|
|
||||||
### 第二章技能方向
|
### 第二章技能方向
|
||||||
|
|
||||||
- 狼嚎:短时间提升近战攻击速度。
|
- 嗜血撕咬:重创敌人吸血,并激活高额普攻吸血与攻速。
|
||||||
- 穿心猎矛:超远距离狙杀最远敌人,距离越远伤害越高。
|
- 穿心猎矛:超远距离狙杀最远敌人,距离越远伤害越高。
|
||||||
- 地裂:范围伤害并造成短暂控制。
|
- 地裂:范围伤害并造成短暂控制。
|
||||||
- 治疗波:治疗范围内友军。
|
- 治疗波:治疗范围内友军。
|
||||||
@@ -333,7 +333,7 @@ UnitBase
|
|||||||
| 英雄 | 1级 (基础解锁) | 3级 (数值强化) | 6级 (机制质变 · 核心好玩点) | 10级 (终极质变大招 · 攻防高光) |
|
| 英雄 | 1级 (基础解锁) | 3级 (数值强化) | 6级 (机制质变 · 核心好玩点) | 10级 (终极质变大招 · 攻防高光) |
|
||||||
|---|---|---|---|---|
|
|---|---|---|---|---|
|
||||||
| **荒野猎手**<br>*(远程重矛/后排狙杀)* | **穿心猎矛**:蓄力重投飞矛,自动锁定全场**距离自身最远的目标(优先狙杀敌方后排)**,造成 **180% 物理伤害**;且**距离越远伤害越高**(每相距 1 米额外提升 5% 伤害,最高 +45%)!带有金色破空流光特效! | 飞矛飞行速度 +40%,基础伤害提升至 **230%**,暴击率额外 **+20%**,远距离狙杀威慑力大增! | **破阵震退**:蓄力重矛命中目标时产生破空震荡,**将其向后强力击退 2.0 米**(纯物理后退,打乱敌方后排阵型,且不产生眩晕冗余)! | **绝命猎杀**:飞矛附带风暴雷霆之势,基础伤害飙升至 **340% 极限制导高伤**;**若成功斩杀目标,立即返还 50% 技能能量**,快速准备下一发致命狙杀! |
|
| **荒野猎手**<br>*(远程重矛/后排狙杀)* | **穿心猎矛**:蓄力重投飞矛,自动锁定全场**距离自身最远的目标(优先狙杀敌方后排)**,造成 **180% 物理伤害**;且**距离越远伤害越高**(每相距 1 米额外提升 5% 伤害,最高 +45%)!带有金色破空流光特效! | 飞矛飞行速度 +40%,基础伤害提升至 **230%**,暴击率额外 **+20%**,远距离狙杀威慑力大增! | **破阵震退**:蓄力重矛命中目标时产生破空震荡,**将其向后强力击退 2.0 米**(纯物理后退,打乱敌方后排阵型,且不产生眩晕冗余)! | **绝命猎杀**:飞矛附带风暴雷霆之势,基础伤害飙升至 **340% 极限制导高伤**;**若成功斩杀目标,立即返还 50% 技能能量**,快速准备下一发致命狙杀! |
|
||||||
| **狂暴狼人**<br>*(极速刺客/嗜血续航)* | **野性狼嚎**:仰天长嚎激活狼性血脉,自身**攻速飙升 +45%(持续 4 秒)** | 攻速提升幅度增加至 **60%**,狼嚎持续时间延长至 5.5 秒 | **残虐撕裂**:狼嚎期间利爪撕裂伤口,**每次普攻恢复造成伤害 25% 的生命值**,并在敌人身上留下每秒 20% 的流血! | **血性狂欢**:狼嚎期间只要击杀敌人,**立即刷新重置 4 秒狼嚎持续时间**并额外获得 20% 移速与攻击力,在敌群中连续疯狂撕扯! |
|
| **狂暴狼人**<br>*(吸血战坦/血肉壁垒)* | **嗜血狂暴**:扑向目标撕咬造成 **150% 物理伤害**(立即回复该次伤害 50% 的生命);并激活持续 5 秒的【嗜血状态】,**普攻吸血 +30% 且攻速 +25%**,越打越满! | 【嗜血状态】持续时间延长至 **6.5 秒**;期间**普攻吸血提升至 45%**,攻速提升至 **35%**,撕咬伤害提升至 190%! | **残虐血性**:撕咬升级为小范围扇形撕扯;且处于嗜血状态时触发【背水一战】:**自身血量每降低 10%,受击伤害减免 +3%,普攻吸血额外 +5%**(血越残越硬越能吸,真正的打不死战坦)! | **不灭狼王**:释放技能爆发狼王之怒,体型微增、**临时提升 35% 最大生命值上限**并获得等额生命回复!技能期间**只要击杀敌人,立即瞬间回复 20% 最大生命值并刷新嗜血狂暴时间**,在敌阵中化身永动机! |
|
||||||
| **石巨人**<br>*(重装控制/护盾控场)* | **大地震击**:双拳重拍地面激发环形震荡波(`ShockwaveRing`),对周围 3.5 米造成伤害并**眩晕 1.5 秒**(`StunStars`) | 眩晕时间延长至 **2.0 秒**,震荡波伤害与范围 +25% | **坚石护体**:重拍地面击碎岩石吸附自身,拍地瞬间**获得相当于 30% 最大生命值的坚固护盾**(挂 `MagicShieldBlue`) | **天崩地裂**:拍击激起全场强震,震晕周围敌人后在地面留下震裂泥沼,**使周围所有敌人移速降低 60% 持续 4 秒**,且自身受到伤害降低 30%! |
|
| **石巨人**<br>*(重装控制/护盾控场)* | **大地震击**:双拳重拍地面激发环形震荡波(`ShockwaveRing`),对周围 3.5 米造成伤害并**眩晕 1.5 秒**(`StunStars`) | 眩晕时间延长至 **2.0 秒**,震荡波伤害与范围 +25% | **坚石护体**:重拍地面击碎岩石吸附自身,拍地瞬间**获得相当于 30% 最大生命值的坚固护盾**(挂 `MagicShieldBlue`) | **天崩地裂**:拍击激起全场强震,震晕周围敌人后在地面留下震裂泥沼,**使周围所有敌人移速降低 60% 持续 4 秒**,且自身受到伤害降低 30%! |
|
||||||
| **蓝色怪物**<br>*(控场反制/元素护盾)* | **寒霜扑击**:蓄力飞扑目标,造成 140% 单体伤害并使目标**攻击速度降低 35%(持续 3 秒)** | 飞扑伤害提升至 **180%**,攻速降低效果提升至 45% | **霜甲反伤**:扑击后生成持续 5 秒的极寒霜甲(自身最大血量 25% 护盾),**任何近战攻击蓝色怪物的敌人都将被减速 40%**! | **极寒爆裂**:扑击命中目标后引发暴风雪炸裂,对周围 3 米范围内所有敌人施加 **1.5 秒冰冻眩晕**(挂 `StunStars`),强力打散敌方攻势! |
|
| **蓝色怪物**<br>*(控场反制/元素护盾)* | **寒霜扑击**:蓄力飞扑目标,造成 140% 单体伤害并使目标**攻击速度降低 35%(持续 3 秒)** | 飞扑伤害提升至 **180%**,攻速降低效果提升至 45% | **霜甲反伤**:扑击后生成持续 5 秒的极寒霜甲(自身最大血量 25% 护盾),**任何近战攻击蓝色怪物的敌人都将被减速 40%**! | **极寒爆裂**:扑击命中目标后引发暴风雪炸裂,对周围 3 米范围内所有敌人施加 **1.5 秒冰冻眩晕**(挂 `StunStars`),强力打散敌方攻势! |
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user