플레이어 거래
플레이어 거래는 프로토콜 v30에서 추가되었습니다. 플레이어 대 플레이어로 아이템과 골드를 직접 주고받는 시스템으로, LLM 상인과의 흥정과는 완전히 다른 별개의 시스템입니다(상점과 경제 참고).
거래 시작하기
섹션 제목: “거래 시작하기”채팅창에:
/trade <이름>- 상대는 요청 알림창을 받습니다. 동의 절차는
/party와 동일합니다 — 30초 TTL, 동시 최대 5건의 대기 요청, 거절된 요청도 TTL이 끝날 때까지 남아 있습니다./block목록에 있는 상대는 자동으로 거래 요청이 거부됩니다. - 근접은 시작 조건일 뿐 아니라 유지 조건이기도 합니다 — 거래 도중 거리를 벗어나면 세션 전체가 취소됩니다. 거래를 눈에 보이는 물리적 행위로 만들고, 원거리에서 요청을 도배하는 것을 구조적으로 막습니다.
- 한 사람당 동시에 하나의 거래 세션만 가질 수 있습니다.
위탁 좌판
섹션 제목: “위탁 좌판”다른 플레이어가 펼쳐둔 좌판을 클릭해도 이 문서가 설명하는 플레이어 거래창은
열리지 않습니다 — 그 경로는 애초에 작동한 적이 없습니다(상인 클래스가
operator 전용이라 플레이어가 펼친 좌판은 존재한 적이 없었습니다). 프로토콜
v68에서 이 경로를 없애고, 실제로 작동하는 위탁 좌판으로 바꿨습니다:
행상 좌판을 사서 NPC가
/lay_stall로 펼치는 것과 같은 탁자를 펼치고, 배낭 속 물건에 값을 매겨
올려둡니다. 손님은 흥정 없이 붙은 값을 내며, /trade가 쓰는 잠금·확인
단계도 없습니다.
- 아이템은 소모되지 않습니다. 한 번 사용해 펼치고, 다시 사용하면 접습니다 — 버스킹 모자와 같은 토글 방식입니다.
- 올려둔 물건은 배낭에 그대로 남는 소프트 예약 상태입니다 — 내리거나 팔기 전까지는 판매·버리기·사용·장착·거래가 막히고, 그 무게는 계속 주인이 짊어집니다. 동시에 최대 12개까지 올릴 수 있습니다.
- 탁자를 펼치고 있는 그 행상 좌판 아이템 자체는 올릴 수도, 팔 수도, 버릴 수도 없습니다 — 팔면 접을 방법이 없는 탁자가 남기 때문입니다.
- 판매가 성사될 때마다 **판매세 5%**를 걷어 소멸시키며, 세금은 판매자 수입에서만 빠지고 구매자는 붙은 값 그대로 냅니다.
- 주인은 좌판 10m 이내에 머물러야 하며, 벗어나거나 층을 바꾸거나 로그아웃하면 자동으로 접힙니다.
- 주인은 최대 32자의 간판을 직접 쓸 수 있고, 그 밑에는 항상 주인
이름이 붙습니다.
/mute중에는 간판을 보거나 설정할 수 없고,/block대상의 간판은 차단한 사람에게만 가려집니다. - NPC는 좌판에서 구매하지 않습니다.
잠금 후 확인(사기 방지의 핵심)
섹션 제목: “잠금 후 확인(사기 방지의 핵심)”이 설계 전체는 “수락을 누르는 순간 상대가 물건을 바꿔치기하는” 고전적인 사기 수법을 막기 위한 것입니다.
- 양쪽 모두 잠금(lock) → 확인(confirm) 두 단계를 거칩니다. 어느 한쪽이라도 제안 내용을 바꾸면 양쪽의 확인 상태가 모두 리셋됩니다 — 잠근 뒤에는 내용이 바뀔 수 없으므로 “확인했다”는 곧 “실제로 본 그 내용”이라는 뜻이 됩니다.
- 제안이 바뀔 때마다 revision 번호가 올라갑니다. 확인 패킷은 자신이 본 revision을 반드시 포함해야 하며, 서버는 오래된 revision을 담은 확인을 거부합니다 — 리셋 알림이 도착하기 전에 이미 전송된 클릭이 통과하는 경합을 막습니다.
- 제안 상태는 변경마다 전체를 통째로 전송하며, 델타 방식이 아닙니다. 패킷 하나를 놓쳐도 양쪽 화면이 영구히 어긋나지 않습니다.
강화 수치는 숨길 수 없습니다
섹션 제목: “강화 수치는 숨길 수 없습니다”아이템의 강화 등급(+7 철검)은 거래창 안 아이템 이름에 직접 표기되고,
확인 화면에서 한 번 더 나열됩니다. +0과 +7은 아이콘과 모델이
완전히 같습니다 — 강화 수치가 툴팁에만 있다면 서둘러 거래를 끝내려는
사람은 굳이 확인하지 않는 경우가 많습니다. 가장 깨끗한 사기 경로이기
때문에, 플레이어가 직접 찾아보게 두지 않고 숫자를 눈앞에 내놓습니다.
아이템 올리기와 금액 입력
섹션 제목: “아이템 올리기와 금액 입력”- 부분 스택을 지원하며, 드래그가 아니라 다른 곳과 같은 클릭 + 수량 입력 방식을 씁니다.
- 스택의 단위는 아이템에 강화 등급까지 더한 값이라, 강화 수치가 다른 같은 아이템은 한 줄로 합쳐지지 않습니다.
- 금액은 탑햇(버스커 모자) 팁과 같은 자유 입력 방식을 씁니다 —
1g20s30c,2s, 또는 순수 숫자는 구리로 취급합니다(음악과 바드 참고).
거래창 닫기
섹션 제목: “거래창 닫기”- 잠금 전에는 Esc로 거래창을 정상적으로 닫을 수 있습니다.
- 잠금 후에는 Esc가 동작하지 않습니다 — 여기까지 온 거래는 명시적인 취소 버튼을 요구합니다. 반사적인 키 입력 하나가 이미 진지하게 진행 중인 협상을 날려버리지 않도록 하기 위함입니다.
어떤 경우에 거래가 취소되나
섹션 제목: “어떤 경우에 거래가 취소되나”- 거리 이탈, 로그아웃·접속 종료, 사망은 즉시 세션을 취소합니다.
- 전투 중이라는 이유만으로는 취소되지 않습니다 — 그렇지 않으면 상대를 한 대만 때려도 거래를 강제로 끊을 수 있어 그리핑이 너무 쉬워집니다.
- 양쪽 모두 아무 반응이 없으면, 거래창은 누군가 확인을 누르거나 유휴 타임아웃(분 단위, 활동이 있으면 갱신)이 올 때까지 열려 있습니다.
탁자 위 아이템은 여전히 내 가방 안에(소프트 예약)
섹션 제목: “탁자 위 아이템은 여전히 내 가방 안에(소프트 예약)”제안에 올린 아이템은 가방에서 빠지지 않고, 소프트 예약 상태로만 표시됩니다:
- 예약된 아이템을 판매·버리기·사용·장착하려 하면 거래가 열려 있는 동안 서버가 거부합니다.
- “전부 판매”, “전부 버리기” 같은 정의 단위의 일괄 명령은 예약분을 피해가려 하지 않고 거래 중에는 통째로 거부됩니다 — 오류 메시지가 먼저 거래를 끝내라고 안내합니다.
- 펼쳐둔 버스커 모자도 예약으로 취급되므로, 거래에 쓰려면 먼저 회수해야 합니다.
- 성사된 거래는 전부 아니면 전무로 한 번에 이동합니다 — 확인 후 어느 한쪽이 소지 중량을 초과하거나 상태가 바뀌었다면 거래 전체가 중단되고 양쪽에 사유가 전달됩니다. 성공한 거래는 평소의 주기적 저장이 아니라 즉시 데이터베이스에 기록되며, 그 기록이 끝난 뒤에야 성공을 통보받습니다. 완료 후에는 양쪽 채팅창에 각각 무엇이 오갔는지 적힌 개인 기록 한 줄이 남습니다.
절대 거래할 수 없는 아이템
섹션 제목: “절대 거래할 수 없는 아이템”- 장착 중인 아이템은 탁자에 올릴 수 없습니다 — 먼저 해제해야 합니다.
- 시작 무기 세 가지 — 낡은 철검, 타다 남은 횃불, 낡은 만돌린 — 은 명시적으로 거래 불가로 지정되어, 무료 시작 장비를 캐릭터 사이에 넘겨 골드로 바꾸는 통로가 되지 않도록 막습니다.
- 최소 레벨 제한은 없습니다 — 거래는 상인 거래와 마찬가지로 완전히 개방되어 있습니다.
- NPC는 플레이어 거래에 참여하지 않습니다 — 서버가 NPC를 대상으로 한 거래 요청을 그대로 거부하며, 이는 동시에 경비병 Karl의 창 같은 NPC 전용 지급 장비가 거래를 통해 유출되는 것도 함께 막습니다.
- 잠긴 아이템은 거래 테이블에 올릴 수 없습니다 — 먼저 잠금을 해제해야 합니다. 아이템 잠금 참고.