damage_fluctuation_analysis.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. 伤害波动分析脚本
  5. 分析游戏中伤害波动的原因
  6. """
  7. import json
  8. import random
  9. from pathlib import Path
  10. def analyze_damage_fluctuation():
  11. """
  12. 分析伤害波动的原因
  13. """
  14. print("=" * 80)
  15. print("伤害波动原因分析")
  16. print("=" * 80)
  17. # 基于代码分析的伤害计算流程
  18. print("\n1. 伤害计算流程分析:")
  19. print(" 步骤1: 获取基础伤害 (weapons.json中的stats.damage)")
  20. print(" 步骤2: 应用武器升级加成 (基础伤害 + (等级 - 1))")
  21. print(" 步骤3: 应用稀有度倍数 (common=1x, uncommon=1.5x, rare=2.25x, epic=8x)")
  22. print(" 步骤4: 应用技能伤害加成 (PersistentSkillManager.applyDamageBonus)")
  23. print(" 步骤5: 暴击判定 (基础暴击率10%, Math.random() < 0.1)")
  24. print(" 步骤6: 如果暴击,应用暴击伤害 (技能加成后的暴击伤害)")
  25. print("\n2. 伤害波动的可能原因:")
  26. print(" ❌ 敌人防御: 已确认代码中没有应用防御减伤")
  27. print(" ✅ 暴击机制: 每次攻击有10%概率触发暴击")
  28. print(" ✅ 技能系统: 可能存在动态的伤害加成")
  29. print(" ❓ 其他随机因素: 需要进一步调查")
  30. # 模拟暴击机制
  31. print("\n3. 暴击机制模拟 (pea_shooter, 基础伤害10):")
  32. base_damage = 10
  33. crit_chance = 0.1 # 10%暴击率
  34. # 模拟100次攻击
  35. normal_hits = 0
  36. crit_hits = 0
  37. damage_results = []
  38. for i in range(100):
  39. is_crit = random.random() < crit_chance
  40. if is_crit:
  41. # 暴击伤害通常是基础伤害的2倍或更多
  42. damage = base_damage * 2 # 简化计算,实际可能更复杂
  43. crit_hits += 1
  44. else:
  45. damage = base_damage
  46. normal_hits += 1
  47. damage_results.append((damage, is_crit))
  48. print(f" 模拟结果 (100次攻击):")
  49. print(f" - 普通攻击: {normal_hits}次, 伤害: {base_damage}")
  50. print(f" - 暴击攻击: {crit_hits}次, 伤害: {base_damage * 2}")
  51. print(f" - 实际暴击率: {crit_hits}%")
  52. # 显示前10次攻击的结果
  53. print(f"\n 前10次攻击结果:")
  54. for i, (damage, is_crit) in enumerate(damage_results[:10]):
  55. crit_text = "(暴击)" if is_crit else "(普通)"
  56. print(f" 第{i+1}次: {damage}伤害 {crit_text}")
  57. print("\n4. 结论:")
  58. print(" 根据代码分析,伤害波动的主要原因是暴击机制:")
  59. print(" - 每次攻击都有10%的概率触发暴击")
  60. print(" - 暴击时伤害会显著增加")
  61. print(" - 这解释了为什么同样的武器有时造成不同的伤害")
  62. print("\n5. 验证建议:")
  63. print(" 1. 查看游戏日志中的暴击提示")
  64. print(" 2. 观察是否有暴击特效显示")
  65. print(" 3. 统计多次攻击的伤害分布")
  66. print(" 4. 检查技能系统是否有动态加成")
  67. return True
  68. def check_weapons_config():
  69. """
  70. 检查武器配置中的暴击相关设置
  71. """
  72. weapons_json_path = Path("assets/resources/data/weapons.json")
  73. if not weapons_json_path.exists():
  74. print("\n❌ 找不到武器配置文件")
  75. return False
  76. try:
  77. with open(weapons_json_path, 'r', encoding='utf-8') as f:
  78. weapons_config = json.load(f)
  79. print("\n6. 武器配置分析:")
  80. # 查找pea_shooter配置
  81. pea_shooter = None
  82. for weapon in weapons_config.get('weapons', []):
  83. if weapon.get('id') == 'pea_shooter':
  84. pea_shooter = weapon
  85. break
  86. if pea_shooter:
  87. print(f" pea_shooter配置:")
  88. print(f" - 基础伤害: {pea_shooter.get('stats', {}).get('damage', 'N/A')}")
  89. print(f" - 稀有度: {pea_shooter.get('rarity', 'N/A')}")
  90. # 检查是否有暴击相关配置
  91. stats = pea_shooter.get('stats', {})
  92. if 'critChance' in stats:
  93. print(f" - 暴击率: {stats['critChance']}")
  94. if 'critDamage' in stats:
  95. print(f" - 暴击伤害: {stats['critDamage']}")
  96. # 检查升级配置
  97. upgrade_config = pea_shooter.get('upgradeConfig', {})
  98. if 'levels' in upgrade_config:
  99. print(f" - 升级配置: 存在")
  100. levels = upgrade_config['levels']
  101. for level in ['1', '2', '3']:
  102. if level in levels:
  103. level_data = levels[level]
  104. damage = level_data.get('damage', 'N/A')
  105. cost = level_data.get('cost', 'N/A')
  106. print(f" 等级{level}: 伤害={damage}, 费用={cost}")
  107. else:
  108. print(" ❌ 未找到pea_shooter配置")
  109. return True
  110. except Exception as e:
  111. print(f"\n❌ 读取武器配置失败: {e}")
  112. return False
  113. def main():
  114. """
  115. 主函数
  116. """
  117. analyze_damage_fluctuation()
  118. check_weapons_config()
  119. print("\n" + "=" * 80)
  120. print("分析完成!")
  121. print("建议: 如果要消除伤害波动,可以考虑:")
  122. print("1. 将暴击率设为0 (修改WeaponBullet.ts中的critChance)")
  123. print("2. 或者在UI中明确显示暴击状态")
  124. print("3. 检查技能系统是否有动态伤害加成")
  125. print("=" * 80)
  126. if __name__ == "__main__":
  127. main()