Merchant Refresh(상인 갱신) 1.0.0
https://www.nexusmods.com/witcher3/mods/14884
모드설치이후부터 판매 물품이 8시간마다 자동정리되니 참조바라며,
모드설치 8시간이후부터 모드의 모든 기능이 활성화됨. 명상을 이용해서 시간보내도됨.
목적
1. 내가 판매한 물품이 일정시간마다 자동 정리 기능 필요.
2. 모드 아이템이 상인에게 판매되는 경우, 모드를 제거하면 상인 인벤토리가 증발하는 버그 해결.
3. 상인 소지금이 일정시간마다 7000~10000크라운으로 유지되는 기능 필요.
1. 소개
- 상인에게 판매한 물품을 일정 시간 후 정리하고, 확인된 상인 상품의 부족 재고를 보충하는 모드입니다.(모드 삭제로인해 모드 추가아이템 판매하던 상인 인벤토리 증발 버그 수정)
- 재입고가 실행될 때 상인 소지금도 10,000크라운으로 맞춥니다.
- 별도의 설정 메뉴, 단축키 또는 콘솔 명령 없이 기본 기능이 자동으로 작동합니다.
2. 기본 동작
- 기준 시간: 게임 시간 7시간 30분(27,000초).
- 기본 시간 배속에서는 현실 약 30분입니다. 시간 흐름 변경 모드를 사용하면 달라집니다.
- 명상 등으로 건너뛴 게임 시간도 반영합니다.
- 시간이 지났다고 멀리 있는 상인을 즉시 변경하지 않습니다. 해당 상인의 거래창을 다시 열 때 처리합니다.
- 재입고 주기는 상인별입니다. 처음 거래창을 열어 기록을 만든 시점부터 시작합니다. 처음 등록할 때 소지금을 즉시 10,000으로 바꾸지는 않습니다.
- 판매품 정리 시간은 각 판매 시각을 기준으로 계산합니다. 재입고 시간과 별도로 판정합니다.
3. 판매품 자동 정리
- 모드가 현재 실행 중에 기록한 실제 판매 수량만 추적합니다.
- 판매 후 게임 시간 7시간 30분이 지난 물품을 다음 거래창 진입 시 정리합니다.
- 일부를 다시 구매하면 해당 수량을 판매 기록에서 차감합니다.
- 판매품이 상인의 원래 상품과 같은 묶음으로 합쳐진 경우 원래 상품 수량을 보존하도록 구분합니다.
- 다른 모드가 물품을 옮기거나 아이템 ID를 변경한 경우 현재 재고와 기록을 다시 맞춥니다. 사라진 ID를 이름만으로 대체해 다른 묶음을 삭제하지 않습니다.
- 설치 전 판매한 물품 또는 기록이 초기화된 판매품은 과거 판매 여부를 정확히 구분할 수 없습니다.
4. 재입고 및 상인 소지금
- 상인에게 실제로 나타난 상품명과 수량을 관측해 재입고 목록을 구성합니다.
- 기본 상품뿐 아니라 관측된 모드 추가 상품도 같은 방식으로 등록합니다.
- 기록된 목표 수량보다 부족한 부분만 보충합니다. 남은 재고를 매번 통째로 삭제하거나 무작위 새 상품 목록을 생성하는 기능은 아닙니다.
- 추적 중인 플레이어 판매 수량은 원래 재고 관측에서 제외해 판매품이 계속 재생성되는 것을 방지합니다.
- 재입고 때 상인 소지금을 정확히 10,000크라운으로 조정합니다. 부족하면 보충하고, 초과하면 초과분을 제거합니다. 10,000크라운을 매번 추가 지급하는 방식이 아닙니다.
- 상품 가격과 환불 규칙은 변경하지 않습니다.
- Crowns, 궨트 카드(gwint), Quest/QuestEP1/QuestEP2 태그 물품은 자동 정리 및 재입고에서 제외합니다.
- 재입고 후 게임의 궨트 카드/보물지도/이미 아는 레시피 필터를 적용합니다.
5. 지역 이동 및 재입고 목록 재구성
- 다른 월드를 불러오는 지역 이동 시 이전 재입고 목록을 폐기하고 시간에 초기화 표시를 붙입니다.
- 다음 거래에서 그 시점의 상인 상품을 관측해 새 목록을 만듭니다.
- 판매 기록은 재입고 목록과 별도로 유지합니다. 추적 중인 판매품은 새 목록에서도 원래 상품으로 등록하지 않습니다.
- 지역 이동 후 해당 상인과 처음 거래한 시점부터 재입고 및 남은 판매품 정리 시간을 다시 계산합니다.
- 예: 다른 지역에서 10시간 기다렸다 돌아와 거래창을 열어도 그 대기 시간으로 즉시 갱신하지 않습니다. 귀환 후 첫 거래 시점을 기준으로 다시 7시간 30분을 기다려야 합니다.
- 같은 월드 안의 빠른 이동이나 도보 이동만으로는 이 지역 이동 초기화를 수행하지 않습니다.
- 목록 재구성 당시 매진된 상품은 새 목록에서 빠집니다. 나중에 자연 재입고 등으로 다시 관측되어야 재입고 대상에 등록됩니다.
6. 삭제된 아이템 정의 및 지원 범위
- 정의 관리자에서 아이템 분류(category)를 조회할 수 없는 품목은 재입고 목록에서 제외합니다. 새로 관측할 때도 등록하지 않습니다.
- 이는 제공된 기본 스크립트의 분류 조회를 이용한 검사입니다. 전용 ItemExists 함수나 모든 모드의 독자 판매 조건을 검증하는 기능은 아닙니다.
- 목록 제외는 재입고 기록만 변경합니다. 현재 상인 인벤토리에서 해당 품목을 일괄 삭제하지 않습니다.
- 한 번도 관측하지 못한 매진 상품이나 아직 등장 조건을 충족하지 않은 상품을 임의로 복구하지 않습니다.
- 이름으로 새 아이템을 생성하므로 다른 모드가 개별 아이템에 스크립트로 붙인 고유 상태까지 복제하지 않습니다.
- 일반 NPC 상인 거래창을 대상으로 합니다. 별도의 원격/임시/커스텀 상점은 지원을 보장하지 않습니다.
7. 저장 및 불러오기
- 추적용 사용자 정의 필드는 saved로 선언하지 않으며 플레이어 세이브에 별도 상인 기록을 저장하지 않도록 구성했습니다.
- 기록은 게임 실행 중 메모리에만 유지합니다. 게임 시작/세이브 불러오기 때 재입고 목록과 판매 기록을 초기화합니다.
- 따라서 로드 전에 판매한 물품은 더 이상 판매품으로 정확히 구분할 수 없습니다. 이후 첫 관측에서 기존 상인 상품으로 인식될 수 있습니다.
- 상인 인벤토리, 이미 정리된 물품 및 크라운 변경 등 실제 게임 상태는 게임의 일반 저장 대상입니다. 비저장 추적 방식이 이러한 변경까지 저장되지 않는다는 뜻은 아닙니다.
8. 호환성 및 확인 방법
- 상점 진입, 구매/판매, 게임 시작 및 월드 이동 함수를 래핑합니다. 같은 함수를 변경하는 다른 모드와는 실행 순서에 따라 결과가 달라질 수 있습니다.
- FullRefund/MRR/ServicesAnywhere는 개발 참고 자료였습니다. 함께 설치해야 하는 필수 구성 요소가 아닙니다. 모든 조합의 동시 작동이 검증된 것은 아닙니다.
- 판매품 자동 정리와 10,000크라운 갱신은 앞선 0.1.6에서 사용자 실행 확인을 받았습니다. 이후 비저장/지역 초기화/목록 폐기 변경 전체가 같은 수준으로 검증됐다는 뜻은 아닙니다.
- 테스트: 상인 거래창을 한 번 열고 값싼 물품을 새로 판매한 다음, 같은 지역에서 8시간 이상 명상하고 거래창을 다시 엽니다. 거래하기 전에 판매품과 상인 잔액을 확인합니다.
- 지역 이동 후에는 첫 재방문 거래부터 시간을 다시 계산합니다.
9. 진단 명령(선택 사항)
콘솔 사용이 가능한 경우 거래창을 연 상태에서 mr_status()를 입력합니다.
hook: 상점 연결 함수 실행 여부
key / record: 실행 중 상인 식별값 / 기록 번호
elapsedGameSecs: 해당 상인의 직전 갱신 이후 게임 초
interval=27000: 갱신 기준 7시간 30분
sales: 추적 중인 판매 묶음 기록 수
stock: 기록된 재입고 상품 종류 수
money: 현재 상인 소지금
정상 갱신 직후 elapsedGameSecs는 0 근처입니다. 콘솔은 기본 기능 사용에 필수가 아닙니다.
10. 제거
게임 종료 후 Mods/mod__MerchantRefresh 폴더를 삭제합니다.
이미 정리된 판매품, 보충된 상품 및 변경된 크라운은 모드 제거만으로 원상 복구하지 않습니다. 이전 상태가 필요하면 변경 전 저장을 불러옵니다.
판매 물건 자동처리되는지, 상인소지금 갱신되는지 확인영상(상인 물건도 샀었어야하는데 깜빡했다)
![[창작모드] Merchant Refresh(상인 갱신) 1.0.0_1.webp](https://i2.ruliweb.com/img/26/10/25/1a17201014648e896.webp)