Files
DS-Combat_analy/분석도구/v2/archive/check_bp_verification.py

121 lines
4.3 KiB
Python
Raw Normal View History

2025-10-27 17:04:37 +09:00
#!/usr/bin/env python3
"""Blueprint 변수 검증 조사 스크립트"""
import json
import sys
from pathlib import Path
# Blueprint.json 로드
bp_file = Path("D:/Work/WorldStalker/DS-전투분석_저장소/원본데이터/Blueprint.json")
with open(bp_file, 'r', encoding='utf-8') as f:
bp_data = json.load(f)
# DataTable.json 로드
dt_file = Path("D:/Work/WorldStalker/DS-전투분석_저장소/원본데이터/DataTable.json")
with open(dt_file, 'r', encoding='utf-8') as f:
dt_data = json.load(f)
# validated_data.json 로드
val_file = Path("D:/Work/WorldStalker/DS-전투분석_저장소/분석결과/20251024_210822_v2/validated_data.json")
with open(val_file, 'r', encoding='utf-8') as f:
val_data = json.load(f)
print("=" * 80)
print("Blueprint 변수 검증 조사")
print("=" * 80)
# 예시: Hilda의 SK100202 (반격) 스킬 조사
print("\n=== 예시: Hilda SK100202 (반격) 스킬 ===")
# DT_Skill에서 SK100202 정보
assets = dt_data.get('Assets', [])
dt_skill = [a for a in assets if a.get('AssetName') == 'DT_Skill'][0]
rows = dt_skill.get('Rows', [])
sk100202_row = [r for r in rows if r.get('RowName') == 'SK100202'][0]
sk100202_data = sk100202_row.get('Data', {})
print(f"스킬 이름: {sk100202_data.get('name')}")
print(f"Desc: {sk100202_data.get('desc')}")
print(f"DescValues: {sk100202_data.get('descValues')}")
print(f"AbilityClass: {sk100202_data.get('abilityClass')}")
# Blueprint에서 관련 GA_Skill 찾기
ability_class = sk100202_data.get('abilityClass', '')
if ability_class:
bp_name = ability_class.split('/')[-1].split('.')[0] if '/' in ability_class else ability_class
print(f"\nBlueprint 이름: {bp_name}")
# Blueprint.json에서 검색
bp_assets = bp_data.get('Assets', [])
matching_bp = [a for a in bp_assets if a.get('AssetName') == bp_name]
if matching_bp:
print(f"Blueprint 발견: {matching_bp[0].get('AssetName')}")
# 변수 확인
variables = matching_bp[0].get('BlueprintVariables', [])
print(f"\nBlueprint 변수 ({len(variables)}개):")
for var in variables[:10]: # 처음 10개만
var_name = var.get('VarName', 'N/A')
var_type = var.get('VarType', 'N/A')
default_value = var.get('DefaultValue', 'N/A')
print(f" - {var_name} ({var_type}): {default_value}")
else:
print(f"Blueprint '{bp_name}' 찾을 수 없음")
# validated_data에서 확인
hilda = val_data['hilda']
sk = hilda['skills']['SK100202']
print(f"\n=== Validated Data ===")
print(f"DescFormatted: {sk.get('descFormatted')}")
print(f"Blueprint Variables in extracted data:")
bp_vars = sk.get('blueprintVariables', {})
if bp_vars:
for var_name, var_info in list(bp_vars.items())[:5]:
print(f" - {var_name}: {var_info}")
else:
print(" (Blueprint 변수 없음)")
# 다른 스킬도 몇 개 조사
print("\n" + "=" * 80)
print("다른 스킬 샘플 조사")
print("=" * 80)
sample_skills = [
('SK100201', 'hilda', '칼날 격돌'),
('SK110205', 'urud', '다발 화살'),
('SK160202', 'rene', 'Ifrit 소환')
]
for skill_id, stalker, skill_name in sample_skills:
print(f"\n=== {skill_id} ({skill_name}) ===")
# DT_Skill
skill_row = [r for r in rows if r.get('RowName') == skill_id]
if not skill_row:
print(" DT_Skill에 없음")
continue
skill_data = skill_row[0].get('Data', {})
desc = skill_data.get('desc', '')
desc_values = skill_data.get('descValues', [])
ability_class = skill_data.get('abilityClass', '')
print(f" Desc: {desc[:100]}...")
print(f" DescValues: {desc_values}")
print(f" AbilityClass: {ability_class}")
# Blueprint
if ability_class:
bp_name = ability_class.split('/')[-1].split('.')[0] if '/' in ability_class else ability_class
matching_bp = [a for a in bp_assets if a.get('AssetName') == bp_name]
if matching_bp:
variables = matching_bp[0].get('BlueprintVariables', [])
print(f" Blueprint 변수 개수: {len(variables)}")
# 숫자 타입 변수 찾기
numeric_vars = [v for v in variables if any(t in str(v.get('VarType', '')) for t in ['Float', 'Int', 'Byte'])]
if numeric_vars:
print(f" 숫자 변수 샘플:")
for var in numeric_vars[:3]:
print(f" - {var.get('VarName')}: {var.get('DefaultValue')}")