전투 밸런스 심층 분석
This commit is contained in:
86
분석도구/verify_skills_detailed.py
Normal file
86
분석도구/verify_skills_detailed.py
Normal file
@ -0,0 +1,86 @@
|
||||
#!/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()
|
||||
Reference in New Issue
Block a user