108 lines
2.9 KiB
Python
108 lines
2.9 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
캐릭터 스탯 분석 스크립트
|
|
|
|
DT_CharacterStat 테이블에서 스토커들의 기본 스탯을 추출하고 비교 분석합니다.
|
|
|
|
사용법:
|
|
python analyze_character_stats.py <DataTable.json 경로>
|
|
"""
|
|
|
|
import json
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
|
|
def find_character_stat_table(datatables):
|
|
"""DT_CharacterStat 테이블 찾기"""
|
|
for dt in datatables:
|
|
if dt.get('AssetName') == 'DT_CharacterStat':
|
|
return dt
|
|
return None
|
|
|
|
|
|
def analyze_stats(json_path):
|
|
"""캐릭터 스탯 분석"""
|
|
|
|
with open(json_path, 'r', encoding='utf-8') as f:
|
|
datatables = json.load(f)
|
|
|
|
char_stat_table = find_character_stat_table(datatables)
|
|
|
|
if not char_stat_table:
|
|
print("오류: DT_CharacterStat 테이블을 찾을 수 없습니다.")
|
|
return
|
|
|
|
stalkers = []
|
|
|
|
for row in char_stat_table.get('Rows', []):
|
|
data = row['Data']
|
|
stalker_info = {
|
|
'id': row['RowName'],
|
|
'name': data.get('name', ''),
|
|
'job': data.get('jobName', ''),
|
|
'str': data.get('str', 0),
|
|
'dex': data.get('dex', 0),
|
|
'int': data.get('int', 0),
|
|
'con': data.get('con', 0),
|
|
'wis': data.get('wis', 0),
|
|
'hp': data.get('hP', 0),
|
|
'mp': data.get('mP', 0)
|
|
}
|
|
stalkers.append(stalker_info)
|
|
|
|
return stalkers
|
|
|
|
|
|
def print_stat_table(stalkers):
|
|
"""스탯 테이블 출력"""
|
|
print("\n스토커별 기본 스탯")
|
|
print("=" * 100)
|
|
print(f"{'이름':<10} {'직업':<10} {'STR':>5} {'DEX':>5} {'INT':>5} {'CON':>5} {'WIS':>5} {'HP':>5} {'MP':>5}")
|
|
print("-" * 100)
|
|
|
|
for s in stalkers:
|
|
print(f"{s['name']:<10} {s['job']:<10} {s['str']:>5} {s['dex']:>5} {s['int']:>5} {s['con']:>5} {s['wis']:>5} {s['hp']:>5} {s['mp']:>5}")
|
|
|
|
|
|
def print_stat_rankings(stalkers):
|
|
"""스탯별 랭킹 출력"""
|
|
print("\n\n스탯별 랭킹")
|
|
print("=" * 100)
|
|
|
|
stats = ['str', 'dex', 'int', 'con', 'wis']
|
|
stat_names = {'str': 'STR', 'dex': 'DEX', 'int': 'INT', 'con': 'CON', 'wis': 'WIS'}
|
|
|
|
for stat in stats:
|
|
sorted_stalkers = sorted(stalkers, key=lambda x: x[stat], reverse=True)
|
|
top3 = sorted_stalkers[:3]
|
|
|
|
print(f"\n{stat_names[stat]} 순위:")
|
|
for i, s in enumerate(top3, 1):
|
|
print(f" {i}위: {s['name']} ({s[stat]})")
|
|
|
|
|
|
def main():
|
|
if len(sys.argv) < 2:
|
|
print("사용법: python analyze_character_stats.py <DataTable.json 경로>")
|
|
sys.exit(1)
|
|
|
|
json_path = Path(sys.argv[1])
|
|
|
|
if not json_path.exists():
|
|
print(f"오류: 파일을 찾을 수 없습니다: {json_path}")
|
|
sys.exit(1)
|
|
|
|
print(f"분석 중: {json_path}")
|
|
|
|
stalkers = analyze_stats(json_path)
|
|
|
|
if stalkers:
|
|
print(f"\n총 {len(stalkers)}명의 스토커 발견")
|
|
print_stat_table(stalkers)
|
|
print_stat_rankings(stalkers)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|