test_weapon_damage.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. 武器伤害配置测试脚本
  5. 用于验证手动配置的武器伤害值是否正确加载
  6. """
  7. import json
  8. import os
  9. from pathlib import Path
  10. def test_weapon_damage_config():
  11. """测试武器伤害配置"""
  12. # 获取weapons.json文件路径
  13. weapons_json_path = Path("assets/resources/data/weapons.json")
  14. if not weapons_json_path.exists():
  15. print(f"错误: 找不到武器配置文件 {weapons_json_path}")
  16. return False
  17. try:
  18. # 读取武器配置
  19. with open(weapons_json_path, 'r', encoding='utf-8') as f:
  20. weapons_config = json.load(f)
  21. print("=== 武器伤害配置测试 ===")
  22. print(f"总共加载了 {len(weapons_config['weapons'])} 个武器")
  23. print()
  24. # 检查每个武器的升级配置
  25. for weapon in weapons_config['weapons']:
  26. weapon_id = weapon['id']
  27. weapon_name = weapon['name']
  28. base_damage = weapon['stats']['damage']
  29. print(f"武器: {weapon_name} ({weapon_id})")
  30. print(f" 基础伤害: {base_damage}")
  31. if 'upgradeConfig' in weapon and 'levels' in weapon['upgradeConfig']:
  32. levels = weapon['upgradeConfig']['levels']
  33. print(f" 升级配置: {len(levels)} 个等级")
  34. # 检查每个等级的配置
  35. for level_str, level_config in levels.items():
  36. level = int(level_str)
  37. cost = level_config.get('cost', 'N/A')
  38. damage = level_config.get('damage', 'N/A')
  39. if damage != 'N/A':
  40. print(f" 等级 {level}: 费用={cost}, 伤害={damage}")
  41. else:
  42. print(f" 等级 {level}: 费用={cost}, 伤害=未配置")
  43. else:
  44. print(" ❌ 没有升级配置")
  45. print()
  46. # 统计配置完整性
  47. weapons_with_damage = 0
  48. total_weapons = len(weapons_config['weapons'])
  49. for weapon in weapons_config['weapons']:
  50. if 'upgradeConfig' in weapon and 'levels' in weapon['upgradeConfig']:
  51. levels = weapon['upgradeConfig']['levels']
  52. has_damage_config = any('damage' in level_config for level_config in levels.values())
  53. if has_damage_config:
  54. weapons_with_damage += 1
  55. print("=== 配置统计 ===")
  56. print(f"总武器数量: {total_weapons}")
  57. print(f"已配置手动伤害的武器: {weapons_with_damage}")
  58. print(f"配置完成度: {weapons_with_damage/total_weapons*100:.1f}%")
  59. if weapons_with_damage == total_weapons:
  60. print("✅ 所有武器都已配置手动伤害值")
  61. return True
  62. else:
  63. print(f"⚠️ 还有 {total_weapons - weapons_with_damage} 个武器未配置手动伤害值")
  64. return False
  65. except Exception as e:
  66. print(f"错误: 读取武器配置失败 - {e}")
  67. return False
  68. def simulate_damage_calculation():
  69. """模拟伤害计算逻辑"""
  70. weapons_json_path = Path("assets/resources/data/weapons.json")
  71. if not weapons_json_path.exists():
  72. print("错误: 找不到武器配置文件")
  73. return
  74. try:
  75. with open(weapons_json_path, 'r', encoding='utf-8') as f:
  76. weapons_config = json.load(f)
  77. print("\n=== 伤害计算模拟 ===")
  78. # 模拟calculateWeaponDamage函数的逻辑
  79. for weapon in weapons_config['weapons'][:3]: # 只测试前3个武器
  80. weapon_id = weapon['id']
  81. weapon_name = weapon['name']
  82. base_damage = weapon['stats']['damage']
  83. print(f"\n武器: {weapon_name} ({weapon_id})")
  84. print(f"基础伤害: {base_damage}")
  85. if 'upgradeConfig' in weapon and 'levels' in weapon['upgradeConfig']:
  86. levels = weapon['upgradeConfig']['levels']
  87. for level in range(1, 6): # 测试1-5级
  88. level_str = str(level)
  89. if level_str in levels and 'damage' in levels[level_str]:
  90. # 使用手动配置的伤害值
  91. damage = levels[level_str]['damage']
  92. print(f" 等级 {level}: {damage} (手动配置)")
  93. else:
  94. # 使用自动计算的伤害值(作为对比)
  95. rarity = weapon.get('rarity', 'common')
  96. damage_per_level_map = {
  97. 'common': int(base_damage * 0.15),
  98. 'uncommon': int(base_damage * 0.18),
  99. 'rare': int(base_damage * 0.20),
  100. 'epic': int(base_damage * 0.25)
  101. }
  102. damage_per_level = max(1, damage_per_level_map.get(rarity, int(base_damage * 0.15)))
  103. calculated_damage = base_damage + (level - 1) * damage_per_level
  104. print(f" 等级 {level}: {calculated_damage} (自动计算)")
  105. except Exception as e:
  106. print(f"错误: 模拟计算失败 - {e}")
  107. if __name__ == "__main__":
  108. print("武器伤害配置测试工具")
  109. print("=" * 50)
  110. # 切换到项目根目录
  111. os.chdir(Path(__file__).parent)
  112. # 运行测试
  113. success = test_weapon_damage_config()
  114. # 运行模拟计算
  115. simulate_damage_calculation()
  116. print("\n=== 测试完成 ===")
  117. if success:
  118. print("✅ 武器伤害配置测试通过")
  119. else:
  120. print("❌ 武器伤害配置测试失败")