#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 测试burnEffect字段深度合并功能 """ import json import copy from pathlib import Path def deep_merge_weapon_config(existing_weapon, new_weapon): """深度合并武器配置,保留现有武器中表格没有的字段""" # 创建新武器的深拷贝作为基础 merged = copy.deepcopy(new_weapon) # 递归合并函数,将现有武器中新武器没有的字段添加到合并结果中 def preserve_existing_fields(target, existing): for key, value in existing.items(): if key not in target: # 现有武器有但新武器没有的字段,保留 target[key] = copy.deepcopy(value) elif isinstance(target[key], dict) and isinstance(value, dict): # 如果两者都是字典,递归处理 preserve_existing_fields(target[key], value) # 执行深度合并,保留现有武器中的额外字段 preserve_existing_fields(merged, existing_weapon) return merged def test_burn_effect_merge(): """测试burnEffect字段合并""" print("=== 测试burnEffect字段深度合并 ===") # 模拟现有武器配置(包含burnEffect) existing_weapon = { "id": "saw_grass", "name": "锯齿草", "bulletConfig": { "visual": { "bulletPrefab": "bullets/Saw_GrassBullet", "hitEffect": "Animation/WeaponTx/tx0002/tx0002", "trailEffect": None, "burnEffect": "Animation/Effects/burn_effect" # 现有的额外字段 } } } # 模拟新武器配置(来自Excel,没有burnEffect) new_weapon = { "id": "saw_grass", "name": "锯齿草", "bulletConfig": { "visual": { "bulletPrefab": "bullets/Saw_GrassBullet", "hitEffect": "Animation/WeaponTx/tx0002/tx0002", "trailEffect": None } } } print("现有武器visual字段:") print(json.dumps(existing_weapon["bulletConfig"]["visual"], indent=2, ensure_ascii=False)) print("\n新武器visual字段:") print(json.dumps(new_weapon["bulletConfig"]["visual"], indent=2, ensure_ascii=False)) # 执行深度合并 merged_weapon = deep_merge_weapon_config(existing_weapon, new_weapon) print("\n合并后visual字段:") print(json.dumps(merged_weapon["bulletConfig"]["visual"], indent=2, ensure_ascii=False)) # 检查burnEffect是否被保留 if "burnEffect" in merged_weapon["bulletConfig"]["visual"]: print("\n✓ 成功!burnEffect字段已保留") print(f"burnEffect值: {merged_weapon['bulletConfig']['visual']['burnEffect']}") return True else: print("\n✗ 失败!burnEffect字段丢失") return False if __name__ == "__main__": success = test_burn_effect_merge() if success: print("\n深度合并功能正常工作") else: print("\n深度合并功能存在问题")