87 lines
3.3 KiB
Python
87 lines
3.3 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
특정 스토커들의 스킬 정보를 DT_Skill에서 정확히 추출
|
|
"""
|
|
|
|
import json
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
# 문제가 있는 스토커들
|
|
STALKERS = ['nave', 'baran', 'rio', 'clad', 'rene', 'sinobu', 'lian']
|
|
|
|
def main():
|
|
if len(sys.argv) < 2:
|
|
print("사용법: python verify_skills_detailed.py <DataTable.json 경로>")
|
|
sys.exit(1)
|
|
|
|
json_path = Path(sys.argv[1])
|
|
|
|
with open(json_path, 'r', encoding='utf-8') as f:
|
|
data = json.load(f)
|
|
|
|
assets = data.get('Assets', [])
|
|
|
|
# DT_CharacterStat에서 스킬 ID 추출
|
|
dt_char_stat = next((dt for dt in assets if dt.get('AssetName') == 'DT_CharacterStat'), None)
|
|
stalker_skills = {}
|
|
for row in dt_char_stat.get('Rows', []):
|
|
row_name = row['RowName']
|
|
if row_name in STALKERS:
|
|
data_field = row['Data']
|
|
stalker_skills[row_name] = {
|
|
'defaultSkills': data_field.get('defaultSkills', []),
|
|
'subSkill': data_field.get('subSkill', ''),
|
|
'ultimateSkill': data_field.get('ultimateSkill', '')
|
|
}
|
|
|
|
# DT_Skill에서 스킬 상세 정보 추출
|
|
dt_skill = next((dt for dt in assets if dt.get('AssetName') == 'DT_Skill'), None)
|
|
|
|
for stalker in STALKERS:
|
|
skill_ids = stalker_skills.get(stalker, {})
|
|
|
|
print(f"\n{'='*120}")
|
|
print(f"【{stalker.upper()}】")
|
|
print(f"{'='*120}")
|
|
|
|
# 기본 스킬들
|
|
print(f"\n[기본 스킬]")
|
|
for skill_id in skill_ids.get('defaultSkills', []):
|
|
skill_row = next((row for row in dt_skill['Rows'] if row['RowName'] == skill_id), None)
|
|
if skill_row:
|
|
d = skill_row['Data']
|
|
print(f"\n {skill_id} - {d.get('name', 'N/A')}")
|
|
print(f" 설명: {d.get('simpleDesc', 'N/A')}")
|
|
print(f" 타입: {d.get('skillAttackType', 'N/A')}")
|
|
print(f" 속성: {d.get('skillElementType', 'N/A')}")
|
|
print(f" 피해배율: {d.get('skillDamageRate', 0)}")
|
|
print(f" 쿨타임: {d.get('coolTime', 0)}초")
|
|
print(f" 마나: {d.get('manaCost', 0)}")
|
|
|
|
# 서브 스킬
|
|
sub_skill_id = skill_ids.get('subSkill', '')
|
|
if sub_skill_id:
|
|
skill_row = next((row for row in dt_skill['Rows'] if row['RowName'] == sub_skill_id), None)
|
|
if skill_row:
|
|
d = skill_row['Data']
|
|
print(f"\n[서브 스킬]")
|
|
print(f"\n {sub_skill_id} - {d.get('name', 'N/A')}")
|
|
print(f" 설명: {d.get('simpleDesc', 'N/A')}")
|
|
print(f" 타입: {d.get('skillAttackType', 'N/A')}")
|
|
print(f" 쿨타임: {d.get('coolTime', 0)}초")
|
|
|
|
# 궁극기
|
|
ult_skill_id = skill_ids.get('ultimateSkill', '')
|
|
if ult_skill_id:
|
|
skill_row = next((row for row in dt_skill['Rows'] if row['RowName'] == ult_skill_id), None)
|
|
if skill_row:
|
|
d = skill_row['Data']
|
|
print(f"\n[궁극기]")
|
|
print(f"\n {ult_skill_id} - {d.get('name', 'N/A')}")
|
|
print(f" 설명: {d.get('simpleDesc', 'N/A')}")
|
|
print(f" 타입: {d.get('skillAttackType', 'N/A')}")
|
|
|
|
if __name__ == "__main__":
|
|
main()
|