| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- """
- 伤害波动分析脚本
- 分析游戏中伤害波动的原因
- """
- import json
- import random
- from pathlib import Path
- def analyze_damage_fluctuation():
- """
- 分析伤害波动的原因
- """
- print("=" * 80)
- print("伤害波动原因分析")
- print("=" * 80)
-
- # 基于代码分析的伤害计算流程
- print("\n1. 伤害计算流程分析:")
- print(" 步骤1: 获取基础伤害 (weapons.json中的stats.damage)")
- print(" 步骤2: 应用武器升级加成 (基础伤害 + (等级 - 1))")
- print(" 步骤3: 应用稀有度倍数 (common=1x, uncommon=1.5x, rare=2.25x, epic=8x)")
- print(" 步骤4: 应用技能伤害加成 (PersistentSkillManager.applyDamageBonus)")
- print(" 步骤5: 暴击判定 (基础暴击率10%, Math.random() < 0.1)")
- print(" 步骤6: 如果暴击,应用暴击伤害 (技能加成后的暴击伤害)")
-
- print("\n2. 伤害波动的可能原因:")
- print(" ❌ 敌人防御: 已确认代码中没有应用防御减伤")
- print(" ✅ 暴击机制: 每次攻击有10%概率触发暴击")
- print(" ✅ 技能系统: 可能存在动态的伤害加成")
- print(" ❓ 其他随机因素: 需要进一步调查")
-
- # 模拟暴击机制
- print("\n3. 暴击机制模拟 (pea_shooter, 基础伤害10):")
- base_damage = 10
- crit_chance = 0.1 # 10%暴击率
-
- # 模拟100次攻击
- normal_hits = 0
- crit_hits = 0
- damage_results = []
-
- for i in range(100):
- is_crit = random.random() < crit_chance
- if is_crit:
- # 暴击伤害通常是基础伤害的2倍或更多
- damage = base_damage * 2 # 简化计算,实际可能更复杂
- crit_hits += 1
- else:
- damage = base_damage
- normal_hits += 1
- damage_results.append((damage, is_crit))
-
- print(f" 模拟结果 (100次攻击):")
- print(f" - 普通攻击: {normal_hits}次, 伤害: {base_damage}")
- print(f" - 暴击攻击: {crit_hits}次, 伤害: {base_damage * 2}")
- print(f" - 实际暴击率: {crit_hits}%")
-
- # 显示前10次攻击的结果
- print(f"\n 前10次攻击结果:")
- for i, (damage, is_crit) in enumerate(damage_results[:10]):
- crit_text = "(暴击)" if is_crit else "(普通)"
- print(f" 第{i+1}次: {damage}伤害 {crit_text}")
-
- print("\n4. 结论:")
- print(" 根据代码分析,伤害波动的主要原因是暴击机制:")
- print(" - 每次攻击都有10%的概率触发暴击")
- print(" - 暴击时伤害会显著增加")
- print(" - 这解释了为什么同样的武器有时造成不同的伤害")
-
- print("\n5. 验证建议:")
- print(" 1. 查看游戏日志中的暴击提示")
- print(" 2. 观察是否有暴击特效显示")
- print(" 3. 统计多次攻击的伤害分布")
- print(" 4. 检查技能系统是否有动态加成")
-
- return True
- def check_weapons_config():
- """
- 检查武器配置中的暴击相关设置
- """
- weapons_json_path = Path("assets/resources/data/weapons.json")
-
- if not weapons_json_path.exists():
- print("\n❌ 找不到武器配置文件")
- return False
-
- try:
- with open(weapons_json_path, 'r', encoding='utf-8') as f:
- weapons_config = json.load(f)
-
- print("\n6. 武器配置分析:")
-
- # 查找pea_shooter配置
- pea_shooter = None
- for weapon in weapons_config.get('weapons', []):
- if weapon.get('id') == 'pea_shooter':
- pea_shooter = weapon
- break
-
- if pea_shooter:
- print(f" pea_shooter配置:")
- print(f" - 基础伤害: {pea_shooter.get('stats', {}).get('damage', 'N/A')}")
- print(f" - 稀有度: {pea_shooter.get('rarity', 'N/A')}")
-
- # 检查是否有暴击相关配置
- stats = pea_shooter.get('stats', {})
- if 'critChance' in stats:
- print(f" - 暴击率: {stats['critChance']}")
- if 'critDamage' in stats:
- print(f" - 暴击伤害: {stats['critDamage']}")
-
- # 检查升级配置
- upgrade_config = pea_shooter.get('upgradeConfig', {})
- if 'levels' in upgrade_config:
- print(f" - 升级配置: 存在")
- levels = upgrade_config['levels']
- for level in ['1', '2', '3']:
- if level in levels:
- level_data = levels[level]
- damage = level_data.get('damage', 'N/A')
- cost = level_data.get('cost', 'N/A')
- print(f" 等级{level}: 伤害={damage}, 费用={cost}")
- else:
- print(" ❌ 未找到pea_shooter配置")
-
- return True
-
- except Exception as e:
- print(f"\n❌ 读取武器配置失败: {e}")
- return False
- def main():
- """
- 主函数
- """
- analyze_damage_fluctuation()
- check_weapons_config()
-
- print("\n" + "=" * 80)
- print("分析完成!")
- print("建议: 如果要消除伤害波动,可以考虑:")
- print("1. 将暴击率设为0 (修改WeaponBullet.ts中的critChance)")
- print("2. 或者在UI中明确显示暴击状态")
- print("3. 检查技能系统是否有动态伤害加成")
- print("=" * 80)
- if __name__ == "__main__":
- main()
|