본문 바로가기
책갈피

rtk2 에디터 만드는 코드

ㅇㅇ |2026.06.10 07:04
조회 8 |추천 0
import os
file_name = "1"
if not os.path.exists(file_name):    print(f"파일을 찾을 수 없습니다: '{file_name}'")else:    with open(file_name, "rb") as f:        data = bytearray(f.read())        print("--- 삼국지2 세이브 에디트 시작 ---")
    # 1. 장수 '주민' 능력치 수정 (77, 63, 100 -> 100, 100, 100)    target_jumin = b'\xC1\xD6\xB9\xCE' # '주민' 이름의 EUC-KR 헥스값    offset_jumin = data.find(target_jumin)        if offset_jumin != -1:        # 0x4D(77), 0x3F(63), 0x64(100) 찾기        patched = False        for i in range(offset_jumin - 30, offset_jumin):            if data[i] == 0x4D and data[i+1] == 0x3F and data[i+2] == 0x64:                data[i] = 0x64                data[i+1] = 0x64                data[i+2] = 0x64                print("[성공] 주민의 능력치를 100, 100, 100으로 수정했습니다.")                patched = True                break        if not patched:            print("[실패] 주민의 능력치(77, 63, 100) 배열을 찾지 못했습니다.")    else:        print("[실패] 주민의 데이터를 찾을 수 없습니다.")
    # 2. 장수 '전혜' 능력치 수정 (66, 85, 75 -> 100, 100, 100)    target_jeonhye = b'\xC0\xFC\xC7\xFD' # '전혜' 이름의 EUC-KR 헥스값    offset_jeonhye = data.find(target_jeonhye)        if offset_jeonhye != -1:        # 0x42(66), 0x55(85), 0x4B(75) 찾기        patched = False        for i in range(offset_jeonhye - 30, offset_jeonhye):            if data[i] == 0x42 and data[i+1] == 0x55 and data[i+2] == 0x4B:                data[i] = 0x64                data[i+1] = 0x64                data[i+2] = 0x64                print("[성공] 전혜의 능력치를 100, 100, 100으로 수정했습니다.")                patched = True                break        if not patched:            print("[실패] 전혜의 능력치(66, 85, 75) 배열을 찾지 못했습니다.")    else:        print("[실패] 전혜의 데이터를 찾을 수 없습니다.")
    # 3. 군주 '주민' 신임도 수정 (45 -> 100)    # 다른 군주들은 50(0x32)인데 주민만 45(0x2D)인 점을 이용해 완벽히 저격합니다.    ff_blocks = []    for i in range(len(data) - 4):        if data[i:i+5] == b'\xFF\xFF\xFF\xFF\xFF':            if not ff_blocks or i > ff_blocks[-1] + 5:                ff_blocks.append(i)
    if len(ff_blocks) >= 2:        # 세력 데이터가 모여있는 첫 FF 블록과 마지막 FF 블록 사이 구간을 설정        search_start = ff_blocks[0]        search_end = ff_blocks[-1]                # 해당 구간에서 45(0x2D)인 값을 모두 찾음        found_2d = []        for i in range(search_start, search_end):            if data[i] == 0x2D:                found_2d.append(i)                if len(found_2d) == 1:            # 45가 단 하나뿐이라면 100% 신임도입니다.            data[found_2d[0]] = 0x64            print(f"[성공] 군주 주민의 신임도(45->100)를 정확히 적용했습니다! (번지: {hex(found_2d[0])})")        elif len(found_2d) > 1:            # 45가 여러 개 발견될 경우, 주변에 다른 군주들의 신임도인 50(0x32)이 있는 값을 진짜 신임도로 확정            patched = False            for idx in found_2d:                nearby = data[max(0, idx-15) : min(len(data), idx+15)]                if 0x32 in nearby:                    data[idx] = 0x64                    print(f"[성공] 군주 주민의 신임도(45->100)를 안전하게 적용했습니다! (번지: {hex(idx)})")                    patched = True                    break            if not patched:                print("[실패] 45(0x2D)를 찾았으나 다른 군주 신임도(50)와 연관성을 찾지 못해 안전을 위해 수정하지 않았습니다.")        else:            print("[실패] 세력 블록 내에서 주민의 신임도 45(0x2D)를 찾지 못했습니다.")    else:        print("[실패] 세력 데이터 구분자(FF FF FF FF FF)를 충분히 찾지 못했습니다.")
    # 파일 저장    with open(file_name, "wb") as f:        f.write(data)    print("--- 패치 작업 종료 ---")
추천수0
반대수0

공감많은 뉴스 시사

더보기

뉴스 플러스