FF11 LSB 서버 개발기 #1
FF11 LSB 서버 개발기 #1
Beginner Support NPC 계정당 1회 보상 시스템 구현
FF11은 개인적으로 정말 추억이 깊은 게임이다.
언제 서버를 오픈하게 될지는 아직 모르겠지만, 예전에 나처럼 이 게임에 추억이 있는 사람들이 다시 즐길 수 있는 서버를 만드는 것이 목표다.
최근에는 초보자를 위한 Beginner Support NPC를 구현했고, 앞으로 시간 날 때마다 이런 기능이나 시스템 구현 과정들을 블로그에 개발일지 형태로 기록해 보려고 한다.
초보자 지원 NPC 제작
FF11은 처음 시작하는 플레이어에게는 꽤 진입 장벽이 높은 게임이다.
그래서 초반 플레이를 조금 더 편하게 시작할 수 있도록
Lv1 장비 세트를 지급하는 Beginner Support NPC를 만들었다.
NPC에서는 다음과 같은 장비 세트를 무료로 받을 수 있다.
- 전위 직업 장비
- 후위 직업 장비
하지만 단순히 장비를 지급하는 NPC를 만들다 보니 한 가지 문제가 생겼다.
보상을 캐릭터 기준으로 제한할 것인가, 계정 기준으로 제한할 것인가
기존 방식의 문제
LSB(LandSandBoat)에서는 보통 NPC 보상 제한을 만들 때
charVar 방식을 많이 사용한다.
예를 들면 이런 방식이다.
구조는 단순하다.
- 캐릭터 변수 저장
- 다음 대화 시 변수 체크
- 이미 받은 경우 보상 차단
하지만 이 방식에는 문제가 있다.
FF11은 한 계정에 여러 캐릭터를 만들 수 있다.
그래서 charVar 방식으로 제한하면
- 캐릭터 A → 보상 수령
- 캐릭터 B → 다시 보상 수령
즉 부캐릭터를 이용한 반복 수령이 가능하다.
초보자 지원 NPC 같은 경우
이 구조는 쉽게 악용될 수 있다.
해결 방법: 계정 기준 보상 시스템
그래서 보상 제한을 캐릭터가 아니라 계정 기준으로 처리하기로 했다.
이를 위해 별도의 테이블을 하나 만들었다.
테이블 구조는 다음과 같다.
claim_key
cycle_key
claimed_at
각 컬럼의 역할은 다음과 같다.
accid
보상을 받은 계정 ID
claim_key
어떤 보상인지 구분하는 키
예)
BS_BASTOK_BACK
cycle_key
보상 주기 (확장용)
예
2026_03 → 월간 보상
이 구조를 만들면 확장성이 매우 좋아진다.
예를 들어
- 계정당 1회 보상
- 월간 보상
- 이벤트 보상
같은 시스템을 모두 처리할 수 있다.

실제 NPC 동작
Beginner Support NPC는 Bastok 지역에 배치했다.
초보자에게 Lv1 장비 세트를 무료로 제공한다.
NPC 안내 메시지
A full Lv1 equipment set is provided free of charge.
This reward can only be claimed once per account.
Lv1装備一式は無料です。
この報酬はアカウントにつき1回のみ受け取れます。
보상 지급
보상을 받으면 다음 메시지가 출력된다.
Lv1 equipment set obtained!
Lv1装備一式を手に入れた!
중복 수령 차단
이미 보상을 받은 계정으로 다시 NPC를 사용할 경우
다음 메시지가 출력된다.
この報酬は既に受け取っています。

Lua 스크립트에서 account_claims 테이블을 체크한 뒤
이미 기록이 있으면 보상을 차단하도록 구성했다.
DB 기록
보상을 수령하면 DB에는 다음과 같이 기록된다.
claim_key : BS_BASTOK_FRONT
claimed_at : 2026-03-06 10:47:42
이 기록을 기준으로 동일 계정의 다른 캐릭터가 접근하더라도
추가 보상을 받을 수 없도록 처리했다.

정리
이 구조를 통해 다음 문제를 해결할 수 있었다.
- 부캐릭터 반복 보상 수령
- 초보자 지원 아이템 악용
- 서버 경제 영향
또한 claim_key 구조를 사용했기 때문에
향후 다음과 같은 시스템 확장도 가능하다.
- 이벤트 보상
- 월간 보상
- 시즌 보상
다음 개발일지
다음 글에서는
LSB에서 C++ Lua API를 확장해
accountClaim 시스템을 연결한 방법
을 정리해 볼 예정이다.