본문 바로가기
게임 개발/메이플 스토리 월드

옛날 메이플 기반 RPG 게임 구현

by 한여름밤의코딩 2025. 9. 11.

🎮 옛날 메이플 기반 RPG 게임 구현 (1)

들어가며

메이플스토리와 같은 고전 RPG 게임은 여전히 많은 개발자들에게 영감을 줍니다.
이번 시리즈에서는 제가 직접 구현한 RPG 게임 구조를 기반으로, 엠루아(mlua) 스크립트 환경에서 RPG 핵심 시스템을 어떻게 구성할 수 있는지 정리하려고 합니다.

첫 글에서는 워크스페이스 셋업 → mlua 환경 준비 → 기본 데이터 관리(DataPersistence) 까지 다룹니다.


⚙️ 로컬 워크스페이스 셋팅

개발 환경을 안정적으로 구성하는 것이 첫 단계입니다.

폴더 구조 예시

D:\MSW-Workspace
├─ MyDesk
│ ├─ Components
│ │ ├─ Player
│ │ ├─ Inventory
│ │ └─ Systems
│ └─ Utils
└─ Docs\

구성 원칙

  • Components → 플레이어 관련 컴포넌트(스탯, 인벤토리, 장비 등)
  • Systems → 동기화, 저장/로드, 로깅 등 범용 시스템
  • Docs → 개발 메모, 설계 문서

🔧 mlua 환경 준비

MapleStory World(MSW)는 mlua 스크립트 기반으로 동작합니다.

  • 기본 문법: Lua와 유사하지만, MSW 전용 API(예: SyncTable, DataStorageService)가 제공됩니다.
  • 실행 방식: 스크립트는 @Component 형태로 정의되어 엔티티(Entity)와 연동됩니다.
  • 주의 사항: 글로벌 변수를 쓰지 말고, 항상 컴포넌트 기반으로 작성해야 충돌이 없습니다.

예시 코드:

```lua
@Component
script PlayerStats extends Component
@Sync
property number level = 1

@Sync
property number exp = 0
end

✅ 구현 우선순위

DataPersistence (완료)

UserDataStorage 기반 저장/로드 시스템 구축

"CharSlot_<번호>:snapshot_v2" 형태로 스냅샷 JSON 관리

PlayerStats (캐릭터 기본 정보)

레벨, 경험치, 스탯 포인트

PlayerInventory (핵심 시스템)

아이템 슬롯 관리, 최대 용량 체크

DataSyncManager (클라이언트 동기화)

서버 ↔ 클라이언트 상태 반영

PlayerEquipment

PlayerCurrency

PlayerSkills

ItemDropController

💡 추가 고려사항

에러 핸들링: try-catch 및 fallback 로직 필수

로깅 시스템: DB I/O, 아이템 획득/손실 기록

성능 최적화: 대량 저장 시 BatchSetAndWait 활용

보안: 클라이언트 단 입력 검증 강화

🚀 다음 글 예고

다음 글에서는 PlayerStats (캐릭터 기본 정보) 를 중심으로,
스탯 관리와 경험치 시스템을 어떻게 설계했는지 소개하겠습니다.

'게임 개발 > 메이플 스토리 월드' 카테고리의 다른 글

로컬환경 설정(LocalWorkspace)  (0) 2025.09.19