dnSPY是代码部分右键编辑方法,保存是点编译保存,然后左上角文件点开保存所有。
以黑洞为例子:
黑洞天文学家角色的技能,直接秒杀一只怪物,并获得星物质。 定位到Assembly-CSharp\-\CharacterSkills\BlackHole(),
技能详细逻辑分析基础条件检查 - 技能未解锁:若玩家未解锁黑洞技能(m_BlackHole为false),直接返回false。
- 已有特殊攻击:若玩家当前正在执行其他特殊攻击(m_SpecialAttack非None),阻止重复触发,返回false。
目标类型限制
作弊修改建议修改为作弊模式TriggerAbility bool flag =true || FTKUI.Instance.m_PlayerSlots.m_CheatAttack == SlotControl.AttackCheatType.TriggerAbility;修改初始概率 0.06f修改为任意值,例如0.6f,修改为100f几乎可以保证100%触发(护盾类道具数量不多的话) float num = 0.06f + (float)_player.m_CharacterStats.SpentFocus * 0.02f;修改消耗专注点触发的概率 0.02f修改为任意值,例如0.25f float num = 0.06f + (float)_player.m_CharacterStats.SpentFocus * 0.02f;修改护盾类道具的触发概率 num *= 0.5f; 例如修改0.5f为2f,使得每个护盾类道具增加触发概率2倍
for (int i = 0; i < totalPartyItems; i++) { num *= 0.5f; } flag = global::UnityEngine.Random.value < num;建议修改每点已消耗的专注值触发的概率,可以保证游戏性的同时还可控。
Assembly-CSharp\-\CharacterSkills\下的其他技能也一样,修改对应计算参数或者直接修改判定。
精准射击定位到Assembly-CSharp\-\CharacterSkills\CalledShot()方法 详细逻辑分析基础条件检查 - 技能未解锁:若玩家未解锁精准射击(m_CalledShot为false),直接返回false。
- 已消耗专注值:若玩家已消耗任何专注值(SpentFocus > 0),无法触发。这要求玩家必须保留全部专注值才能使用该技能。
- 已有特殊攻击:若当前正在执行其他特殊攻击(m_SpecialAttack非None),阻止重复触发。
武器类型限制 - 远程/火器专用:通过GetBestWeaponType获取当前攻击的最佳武器类型,仅允许ranged(远程)或firearm(火器)触发,近战武器无法使用该技能。
攻击类型验证 - 非指向性攻击限制:若当前尝试的技能(_attemptedProf)是友方技能或明确指定了目标类型(如单体攻击),精准射击不会触发。这表明技能仅适用于无目标或范围攻击场景。
角色状态检查 - 能力使用限制:CanUseAbility()检查角色是否处于可行动状态(如未被控制或沉默),否则阻止触发。
- 武器专注限制:若当前武器标记为m_NoFocus(无需专注),禁止触发。这可能用于排除某些特殊武器(如魔法道具)的滥用。
触发条件 - 10%基础概率:通过Random.value < 0.1f实现10%的随机触发率。
- 作弊模式:若开启作弊(TriggerAbility),直接触发。
- 效果激活:触发后标记m_CriticalStrike(暴击)和m_SpecialAttack为CalledShot,确保本次攻击必定暴击。
作弊修改建议修改为作弊模式TriggerAbility FTKUI.Instance.m_PlayerSlots.m_CheatAttack == SlotControl.AttackCheatType.TriggerAbility 替换为true if (global::UnityEngine.Random.value < 0.1f || FTKUI.Instance.m_PlayerSlots.m_CheatAttack == SlotControl.AttackCheatType.TriggerAbility) { _player.m_CurrentDummy.m_CriticalStrike = true; _player.m_CurrentDummy.m_SpecialAttack = CharacterDummy.SpecialAttack.CalledShot; return true; }修改基础概率 global::UnityEngine.Random.value < 0.1f修改为global::UnityEngine.Random.value< 0.1f+0.5f 增加50%的基础概率
暴击修改定位到Assembly-CSharp\-\CharacterSkills\CriticalStrike()方法 逻辑流程分析负面状态免疫 - 击晕状态禁止暴击:若角色处于Shocked(击晕/麻痹)状态,直接返回false,禁止暴击。这是常见的控制效果限制机制。
暴击率差异化计算 随机暴击判定 生成随机数并与计算后的暴击率(num)比较: - 若随机值小于暴击率,标记m_CriticalStrike为true并返回true,触发暴击。
- 否则返回false,不触发。
修改建议
num += 0.05f * (float)_dummy.m_CharacterOverworld.m_CharacterStats.SpentFocus;
成功率判定修改Assembly-CSharp\-\SlotControl/ComputeAttackSlotResults() <
修改array2=true,永远成功 或修改_cow.m_CharacterStats.m_SkillRoll[skillType].Roll(num+0.5f),当前概率增加50%.
|