Commit e5c2446b authored by Nemo Ma's avatar Nemo Ma

Fix combat log output for Ecstasy Mode skill

Corrects battle log messages when the 'npc_mecstasy' skill is triggered, ensuring the actual skill owner (player/NPC) is shown as the subject. Also ensures total damage is always output for fixed damage branches, resolving missing damage logs in certain scenarios.
parent e58b8159
NOUVEAU DAY 200
变更目的
- 修复:持有“来潮(npc_mecstasy)”技能参与战斗时,仅出现“展开了Ecstasy Mode结界!”等提示而缺少后续大多数战斗日志的问题。
- 文案:将“你”改为实际触发该技能的实体名称(玩家/NPC名)。
修改内容概要
1) 固定伤害分支缺少总伤害输出
- 问题原因:rev_attack() 中当存在固定伤害(get_fix_damage 返回值存在)时,仅在 damage==0 的情况下输出“造成的总伤害:0”,非零伤害没有对应输出,导致主要伤害相关日志缺失。
- 修复方案:无论固定伤害是否为 0,统一输出“造成的总伤害:<N>”。
- 变更位置:include/game/revcombat.func.php
- 函数:rev_attack()
- 行区间(编辑前定位):409-415
- 变更:将仅在 damage==0 时输出日志,改为对所有固定伤害统一输出“造成的总伤害:<damage>”。
2) “来潮”战斗记录主体应为技能触发者
- 问题原因:get_fix_damage() 的“来潮”判定分支中文案始终引用 $pa['nm'],当仅防守方(pd)持有并开启“来潮”时,文案会错误显示为攻击方(例如“你”)。
- 修复方案:新增 $mec_owner_nm,基于当前实际开启“来潮”的一方(pa 或 pd)确定输出主体名称;三处文案统一替换为 {$mec_owner_nm}。
- 变更位置:include/game/revattr.func.php
- 函数:get_fix_damage()
- 行区间(编辑前定位):616-642
- 变更:
* 新增 $mec_owner_nm 判定逻辑
* 将三处“{$pa['nm']}展开了Ecstasy Mode结界!”替换为“{$mec_owner_nm}展开了Ecstasy Mode结界!”
受影响文件
- include/game/revcombat.func.php(固定伤害分支日志输出)
- include/game/revattr.func.php(“来潮”技能文案主体纠正)
验证建议
- 场景A:NPC(持有并开启npc_mecstasy)攻击玩家
- 期望:日志显示“NPC名展开了Ecstasy Mode结界!……”,随后出现“造成的总伤害:<数值>。”;其余战斗日志(受伤/护甲损伤/击杀或反击)正常出现。
- 场景B:仅防守方(NPC)开启“来潮”
- 期望:主体名为防守方 NPC 名称,而非“你”。
- 场景C:防守方拥有“种火III/IV”或防御 > 10000
- 期望:显示免疫文案,且出现“造成的总伤害:0。”
- 场景D:防守方拥有“勇谍”且HP>200且(HP-武器效果)<200
- 期望:显示“勇谍”保护提示,最终 HP 保留 200,伤害数值与提示一致。
备注
- 本次仅修正日志输出与文案归属,不改变原有伤害/保护判定逻辑。
- 若未来需要在双方均开启“来潮”时输出更明确的双向描述,可在 $mec_owner_nm 判定基础上扩展。
推测原因(为什么原实现里只在 damage==0 时打印“总伤害”)
综合代码结构和常见战斗日志设计习惯,原作者很可能基于以下考虑做了这个判断:
避免重复输出
固定伤害是“特例分支”,通常由 get_fix_damage() 内部自己负责输出具体效果和伤害说明(例如“直死”、“混沌伤害”等自带数值/说明的日志)。
为了不和通用的“造成的总伤害:N。”产生重复,固定伤害分支默认不再打印总伤害,仅在必要时特殊补一行。
为“0伤害”场景提供保底提示
当技能生效但被免疫/保护导致伤害为 0(例如“种火III/IV”“超高防”或某些免疫),技能文案可能没有明确给出“结果是0”的数值总结。
这时补一行“造成的总伤害:0。”可避免玩家误解为“没有结算”或“日志丢失”。
分工明确:固定伤害分支负责完整叙述,通用分支不参与
设计上希望“固定伤害类技能”的文案和数值展示由技能分支自己讲清楚,普通伤害流程的通用总结不介入,以免出现“一回合两条总伤害”的杂讯。
历史兼容与视觉整洁
早期一些固定伤害技能可能在内部已经输出了“造成了X点伤害!”或等价的“总伤害”语义行;若再打印一条“造成的总伤害:X。”会显得重复。
因此仅在“0伤害”这种技能文案通常不会写明数值的场景,补一行通用总结用于兜底。
技术层面的判别哨兵
代码用 isset($fix_dmg) 与 $fix_dmg===0 区分三种状态:null/未设置(走常规流程)、0(技能生效但无伤害)、正数(技能生效且有伤害)。
在 0 的情况下补日志,意图上更像一个“异常/免疫结果”的显式提醒。
也正因为这个策略依赖“技能分支自己输出够详细的伤害文案”,才会在“来潮”这个技能上暴露问题:来潮分支虽然有“展开结界”的提示,但没有输出“总伤害:N。”的数值总结,导致整体看起来像“后续大多数战斗记录缺失”。这也是我们此次将固定伤害分支统一补充“总伤害:N。”输出的原因。
......@@ -617,10 +617,12 @@ namespace revattr
if((!empty($pa['clbpara']['skill']) && in_array('npc_mecstasy', $pa['clbpara']['skill']) && !empty($pa['clbpara']['skillpara']['npc_mecstasy']['active'])) ||
(!empty($pd['clbpara']['skill']) && in_array('npc_mecstasy', $pd['clbpara']['skill']) && !empty($pd['clbpara']['skillpara']['npc_mecstasy']['active'])))
{
# 判定技能触发者名称(玩家或NPC)
$mec_owner_nm = (!empty($pa['clbpara']['skill']) && in_array('npc_mecstasy', $pa['clbpara']['skill']) && !empty($pa['clbpara']['skillpara']['npc_mecstasy']['active'])) ? $pa['nm'] : $pd['nm'];
# 检查是否对种火玩家无效
if((!empty($pd['clbpara']['skill']) && (in_array('fireseed3', $pd['clbpara']['skill']) || in_array('fireseed4', $pd['clbpara']['skill']))) || $pd['def'] > 10000)
{
$log .= "<span class='red'>{$pa['nm']}展开了Ecstasy Mode结界!但{$pd['nm']}早已不受这种东西的影响了!</span><br>";
$log .= "<span class='red'>{$mec_owner_nm}展开了Ecstasy Mode结界!但{$pd['nm']}早已不受这种东西的影响了!</span><br>";
return 0;
}
......@@ -628,7 +630,7 @@ namespace revattr
if(!empty($pd['clbpara']['skill']) && in_array('npc_perfectspy', $pd['clbpara']['skill']) && $pd['hp'] > 200 && $pd['hp'] - $pa['wepe'] < 200)
{
# 先记录「来潮」效果的文案
$log .= "<span class='red'>{$pa['nm']}展开了Ecstasy Mode结界!武器直接造成了等同于其效果值的真实伤害!</span><br>";
$log .= "<span class='red'>{$mec_owner_nm}展开了Ecstasy Mode结界!武器直接造成了等同于其效果值的真实伤害!</span><br>";
# 然后计算「勇谍」效果保护后的伤害
$damage = $pd['hp'] - 200;
......@@ -637,7 +639,7 @@ namespace revattr
}
$damage = $pa['wepe'];
$log .= "<span class='red'>{$pa['nm']}展开了Ecstasy Mode结界!武器直接造成了等同于其效果值的真实伤害!</span><br>";
$log .= "<span class='red'>{$mec_owner_nm}展开了Ecstasy Mode结界!武器直接造成了等同于其效果值的真实伤害!</span><br>";
return $damage;
}
......
......@@ -411,7 +411,7 @@ namespace revcombat
{
$damage = $fix_dmg;
$pa['final_damage'] = $damage;
if($damage == 0) $log .= "<span class=\"yellow\">造成的总伤害:<span class=\"red\">$damage</span>。</span><br>";
$log .= "<span class=\"yellow\">造成的总伤害:<span class=\"red\">{$damage}</span>。</span><br>";
}
//如无,则正常计算伤害
else
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment