최종 갱신 (KST)

GameDesign/design/trait/README.md

03. 특성 (Trait)

상위 문서: 게임기획코어.md 상태: 레벨형 특성 4종(개척 · 속도 · 공통/산업 산출량) 서버 구현 완료 · 수치는 테스트값 · 클라 ❌ 미구현(T-108) · 액티브 미착수 바뀌면 갱신: 게임기획코어 · 기획평가 · 산업레벨 · 아이템 · 자원채취 · 작업슬롯 진행 및 성장 · 채굴 · 캐릭터 · 퀘스트 · 해금

섬주인(계정) 본인의 성장 축이다. 캐릭터가 아니라 플레이어 자신이 강해지는 자리이며, 효과는 계정 단위로 모든 슬롯에 적용된다 — 대상 산업을 지정한 특성은 그 산업 슬롯에만 붙는다.


1. 확정 사항

# 항목 확정 내용
1 특성은 레벨형이다 (2026-10-02 · T-108) 특성 하나가 기본 레벨에서 최대 레벨까지 1씩 오른다. 레벨마다 계정 레벨 조건이 붙는다 → 2.1
2 소속 캐릭터가 아니라 계정(섬주인) 이 갖는다 → 캐릭터 3장
3 비용 = 특성 포인트 계정 레벨마다 1점(AccountLevelTable.TraitPoint) · 레벨당 비용은 특성마다 같다 → 3장
4 특성 4종 산업 개척 · 산업 속도 · 공통 산출량 · 산업 산출량 → 2.2
5 산업 레벨은 개척 특성으로 연다 특성 레벨 = 열린 산업 레벨. 5개 산업 Lv1은 처음부터 열려 있다(기본 레벨 1) → 산업 레벨 3장
6 산출량 = 100% + 공통 + 그 산업 정수부만큼 같은 아이템, 소수부는 확률로 1개 더. 자원에만 붙는다 → 2.3
7 속도·산출량 효과는 가산 항 승산으로 두지 않는다 → 2.5
8 기록 = t_user_trait 특성마다 레벨 하나. 기본 레벨보다 올린 특성만 행이 있다. 남은 포인트는 t_user_account
9 액티브 계정 레벨 조건의 해금 + 1회 발동 = 1시간 지속 · 하루 2회 · 이월 없음 · 발동 조건 없음 (미착수)
10 자원은 특성에 쓰이지 않는다 비용은 특성 포인트 하나다

1.1 산업별 특성을 다시 둔 이유 (2026-09-19)

2026-08-01에는 "산업별 강화는 캐릭터 적성·장비가 맡는다"며 산업별 특성을 뺐다. 산업 레벨 해금이 특성으로 들어오면서 특성 자체가 산업별로 갈라졌고, 같은 산업에 속도·산출량을 두는 것이 자연스러워졌다. 세 축의 역할은 이렇게 나뉜다.

축 산업별 차이를 만드는 방식 성격
캐릭터 적성 적성이 곧 기본 작업속도 캐릭터마다 다르다 — 배치 퍼즐
장비 무기1·장신구2·보석1 가산 + 개체마다 인챈트 속도 칸 캐릭터에 붙는다 — 교체 가능
특성 산업 레벨 해금 · 산업별 속도 · 산업별 산출량 계정에 붙는다 — 영구, 포인트로 고른다

포인트는 계정 Lv100까지 99점, 특성을 전부 올리려면 130점이라 전부 찍을 수 없다 — 어느 산업을 키울지가 선택이 된다.


2. 구조

2.1 레벨형 — 정의 · 레벨 조건 · 기록 (2026-10-02 · T-108)

층 어디에 내용
특성 정의 UserTraitTable (User.xlsx) UserTraitTID · Name · TraitPoint(레벨당 비용) · EffectType · Industry · EffectValue(레벨당 효과 ‰) · BaseLevel · MaxLevel
레벨 조건 UserTraitLevelTable (User.xlsx) UserTraitLevelTID(= 특성 × 100 + 레벨) · UserTraitTID · Level · AccountLevel — 기본 레벨 다음부터 최대 레벨까지 빠짐없이
기록 t_user_trait (user_id, user_trait_tid, level) — 기본 레벨보다 올린 특성만 행이 있다. 영구

효과 = 레벨당 효과 × (지금 레벨 − 기본 레벨). 비용과 효과는 레벨마다 같고, 레벨마다 다른 것은 계정 레벨 조건뿐이다.

올리는 순서(서버): 없는 특성 → 최대 레벨 → 다음 레벨의 계정 레벨 → 포인트 차감(맨 뒤) → 정산(속도·산출량이면) → 레벨 기록 → 효과. 조건을 전부 통과해야 포인트가 빠진다 — 거절 경로에서 포인트가 움직이지 않는다.

특성은 해금(UnlockTable)을 쓰지 않는다. 산업 레벨도 해금 행이 아니라 개척 특성의 레벨로 판정한다.

효과(UserTraitEffect) 동작
IndustryUnlock 산업 개척 — 특성 레벨 N이면 그 산업 Lv N까지 열린다. 기본 레벨 1
SpeedAdd 작업속도 가산(‰). Industry가 None이면 전 산업
YieldAdd 산출량 가산(‰). Industry가 None이면 전 산업(공통) → 2.3
패킷 · 결과 코드 내용
C_UserTraitLearnRequest { UserTraitTID } 1레벨 올리기
S_UserTraitLearnResponse { Result, UserTraitTID, Level } 성공이면 올린 뒤 레벨, 실패면 지금 레벨. 앞에 S_AccountLevelResponse(남은 포인트)
S_UserTraitListResponse { Traits: [UserTraitTID, Level] } 로그인 직후 스냅샷(S_UnlockListResponse 다음). 없는 특성은 기본 레벨이다
결과 코드 InvalidUserTraitTID · TraitMaxLevel(803) · UnlockLocked(계정 레벨 미달) · NotEnoughTraitPoint. TraitOnlyUnlock(802)은 쓰지 않는 결번

2.2 특성 구성 (테스트값)

특성 TID 범위 레벨당 효과 기본 → 최대 Lv 계정 레벨 조건 포인트
산업 개척 101~105 산업별 산업 레벨 하나 해금 1 → 5 Lv2~5 = 5 · 15 · 30 · 50 20
산업 속도 201~205 산업별 속도 +5% 0 → 10 Lv L = (L − 1) × 5 50
공통 산출량 300 전 산업 산출량 +2% 0 → 10 Lv L = (L − 1) × 5 10
산업 산출량 301~305 산업별 산출량 +5% 0 → 10 Lv L = (L − 1) × 5 50
합계 16개 130

TID 끝자리는 IndustryType — 농사 1 · 낚시 2 · 채굴 3 · 벌목 4 · 사냥 5. 레벨당 비용은 전부 1점. 옛 노드 번호(UnlockTable 2102~2505 · 3101~3505)는 결번이다.

2.3 산출량 — 같은 아이템을 더 준다 (2026-10-02)

산출량 = 100% + 공통 산출량 + 그 산업 산출량 (가산). 판정마다 자원을 뽑은 뒤 같은 아이템을 정수부만큼, 소수부는 확률로 1개 더 준다(서버 User.ApplyYield).

산출량 판정 1회
100% 1개
120% 1개 + 20% 확률로 1개 더 (평균 1.2개)
250% 2개 + 50% 확률로 1개 더 (평균 2.5개)
  • 자원에만 붙는다. 상자(별도 롤)와 캐릭터·계정 경험치는 늘지 않는다 — 속도와 갈리는 점이다.
  • 다시 굴리지 않고 같은 아이템을 준다 — 희귀도 확률은 그대로다.
  • 산출량을 올리기 직전에 정산한다 — 이전 구간에 소급되지 않는다.

2.4 액티브 — 하루 2회 · 1시간 (R4 해소)

이전 기획의 액티브는 이 게임에서 가장 위험한 요소였다. "채취 시 발동하는 부스트"는 발동하려면 게임을 지켜봐야 해서 P1(주의를 뺏지 않는다)과 정면 충돌했고, 제때 쓰는 유저와 안 쓰는 유저의 격차가 최적 플레이를 강요했다.

해소 방식:

항목 값 왜
해금 계정 레벨 조건 + 해금 행동 (5 · 10 · 20 · 40 — ⚠️ 레벨값 미정) → 해금 해금 규칙이 하나여야 클라가 한 화면으로 처리한다
지속 1시간 켜 놓고 잊어도 된다. 초 단위 타이밍이 의미 없어진다
횟수 하루 2회 · 일일 리셋 하루 리듬 장치를 겸한다 → 2.6
발동 조건 없음 광고 시청 같은 조건을 두지 않는다
이월 없음

효과 4종 후보 (⚠️ 확정 아님):

후보 대상
골드 획득 증가 즉시 판매·거래 수익
경험치 획득 증가 캐릭터 → 계정 경험치
아이템 드랍률 증가 희귀도 롤 또는 회당 산출
작업속도 증가 채취 주기

2.5 ⚠️ 속도·산출량 효과는 반드시 가산으로 넣는다

작업슬롯 3.4의 속도 = 적성 × (1 + Σ가산) × Π승산에서 승산으로 두면 가산 전체를 함께 부풀려 후반 밸런스가 무너진다.

곱연산(×1.2 × ×1.2 …)은 후반에 반드시 폭주한다. 합연산 기반이 원칙이며, "총 작업속도 증가" 같은 의도적 예외만 승산으로 간다.

2.6 액티브의 일일 리셋이 P3를 대신한다 (2026-08-01 확정)

요일 로테이션이 폐지되면서 P3("하루 단위로 달라진다")가 근거를 잃었고, 게임에 하루 주기 장치가 하나도 없었다.

액티브의 일일 2회가 그 자리를 맡는다 — "오늘 몫의 부스트를 언제 쓸까"가 하루 단위 판단이 된다. P3는 이에 맞춰 재정의됐다 → 게임기획코어 1장.

⚠️ 방어선: 보상은 "가속"이지 "총량"이 아니다. 안 써도 잃는 것이 없고, 쓰면 그날이 빨라질 뿐이다. 미사용분 이월 금지 · 연속 사용 보너스 금지 · 위젯에 배지/타이머 표시 금지. 이 선을 넘는 순간 "안 쓰면 손해"가 되어 P1을 어긴다.


3. 획득 · 성장 경로

캐릭터가 작업 → 캐릭터 경험치 ─(그대로)→ 계정 경험치 → 계정 레벨 ↑ → 레벨마다 특성 포인트 1
항목 확정 내용
계정 경험치 캐릭터가 얻은 경험치 전량 — 비율을 두지 않는다. 캐릭터가 만렙이어도 계정은 자란다
계정 레벨 곡선 AccountLevelTable — 캐릭터 곡선(레벨당 ×1.2)의 8배(슬롯 8칸이 동시에 번다). 100레벨. 테스트값
특성 포인트 레벨마다 1점(2026-10-02) — Lv2~100 = 총 99점. 특성 전부는 130점이라 다 찍지 못한다
저장 · 통지 t_user_account(레벨 · 경험치 · 남은 포인트) · S_AccountLevelResponse

자원은 특성에 쓰이지 않는다. 자원의 출구는 즉시 판매·거래소·캐릭터 먹이기다.

논점 상태
리셋(초기화) 가능 여부·비용 ❌ 미정 — 리셋하면 t_user_trait 행을 지우고 쓴 포인트를 돌려준다
특성 레벨을 주는 치트 ❌ 없음 — 옛 해금 치트로는 더 이상 특성을 열 수 없다. 테스트용 경로가 필요하다(T-108 후속)

4. 서버 / 클라이언트 책임

책임 주체
효과 합성 · 채취 정산 반영 서버 (User.GetTraitSpeedAdd → 슬롯 속도 가산 · User.GetTraitYieldAdd → ApplyYield)
포인트 차감 · 조건 검증 · 레벨 기록 서버 (User.TryLearnTrait · C_UserTraitLearnRequest · t_user_trait)
액티브 발동 시각 · 지속 판정 · 일일 리셋 서버 (서버 시각 기준)
특성 레벨 표시·미리보기 클라이언트 — ❌ 미구현(T-108). 지금 화면은 옛 노드 구조다

액티브 발동 직전에 반드시 정산한다. 속도가 바뀌는 지점이므로, 정산하지 않으면 이전 구간까지 새 속도로 계산된다 → 작업슬롯 3.1.


5. 결정 필요 (Open Questions)

  1. 액티브 해금 레벨(5·10·20·40)을 확정하는가?
  2. 액티브 효과 4종을 확정하는가? 각 효과의 배수는?
  3. 4종 외에 어떤 특성을 더 두는가? 최대 레벨을 늘리는 것만으로 업데이트할 수 있다
  4. 특성이 희귀도 확률에 개입하는가? → 자원채취 2.4와 함께 (산출량은 개입하지 않는다)
  5. 일일 리셋 기준 시각은? → 퀘스트 리셋과 같아야 한다

해소됨 (2026-08-01):

  • 액티브 유지 여부 — ✅ 유지. 하루 2회 · 1시간 · 발동 조건 없음 (R4 해소)
  • 효과 중첩 — ✅ 가산이 기본, 승산은 의도적 예외
  • 해금 재화 — ✅ 자원이 아니라 특성 포인트(계정 레벨마다 1)

해소됨 (2026-09-19):

  • 특성 슬롯(장착 제한) — 두지 않는다. 포인트가 모자라 전부 찍을 수 없는 것이 선택을 만든다
  • 특성 거래 가능 여부 — 계정에 귀속되므로 거래 불가