Pular para o conteúdo

Lojas de Troca

Visão Geral

As lojas de troca definem o inventário de NPCs mercadores: o que vendem, o que aceitam como pagamento, quanto estoque está disponível e quando é reabastecido. Cada arquivo de loja contém uma lista de TradeSlots que são Fixed (sempre a mesma troca) ou Pool (selecionados aleatoriamente de uma lista ponderada de trocas possíveis a cada reabastecimento). O estoque da loja é resetado em um cronograma diário configurável.

Como o Comércio com NPCs Funciona

flowchart TD;
A["Player Interacts<br>with Merchant NPC"] --> B[Load Barter Shop];
B --> C[Display Trade Slots];
C --> D["Fixed Slots<br>Always same trades"];
C --> E["Pool Slots<br>Randomly selected"];
E --> F["Shop Refresh<br>Time Reached?"];
F -->|"Yes"| G["Roll New Trades<br>from Weighted Pool"];
F -->|"No"| H[Keep Current Trades];
D --> I[Player Selects Trade];
G --> I;
H --> I;
I --> J["Has Payment<br>Items?"];
J -->|"No"| K[Trade Unavailable];
J -->|"Yes"| L{Stock > 0?};
L -->|"No"| M[Out of Stock];
L -->|"Yes"| N[Execute Trade];
N --> O["Remove Payment<br>from Player"];
O --> P["Give Output<br>to Player"];
P --> Q[Decrease Stock];
style A fill:darkgreen,color:white;
style K fill:darkred,color:white;
style M fill:darkgoldenrod,color:white;
style P fill:rebeccapurple,color:white;

Localização dos Arquivos

Assets/Server/BarterShops/
Klops_Merchant.json
Kweebec_Merchant.json

Schema

Nível superior

FieldTypeRequiredDefaultDescription
DisplayNameKeystringSimChave de localização para o nome exibido na UI da loja.
RefreshIntervalRefreshIntervalSimCom que frequência o estoque da loja é resetado.
RestockHournumberSimHora do jogo (0–23) em que o estoque é reabastecido a cada ciclo.
TradeSlotsTradeSlot[]SimLista ordenada de slots de troca exibidos na UI da loja.

RefreshInterval

FieldTypeRequiredDefaultDescription
DaysnumberNãoNúmero de dias no jogo entre reabastecimentos.

TradeSlot

FieldTypeRequiredDefaultDescription
Type"Fixed" | "Pool"SimFixed sempre mostra a mesma troca. Pool escolhe trocas aleatoriamente de uma lista ponderada.
TradeTradeNãoA troca única para slots Fixed.
SlotCountnumberNãoApenas Pool. Número de trocas selecionadas aleatoriamente de Trades para exibir.
TradesPoolTrade[]NãoApenas Pool. Lista ponderada de trocas possíveis para amostrar.

Trade (Fixed)

FieldTypeRequiredDefaultDescription
OutputTradeItemSimO item que o jogador recebe.
InputTradeItem[]SimItens que o jogador deve fornecer como pagamento (um ou mais).
StocknumberSimNúmero de vezes que esta troca pode ser completada antes do slot ficar sem estoque.

PoolTrade

FieldTypeRequiredDefaultDescription
WeightnumberSimProbabilidade relativa desta troca ser selecionada quando o pool é amostrado.
OutputTradeItemSimO item que o jogador recebe.
InputTradeItem[]SimItens que o jogador deve fornecer como pagamento.
Stocknumber | [number, number]SimContagem fixa de estoque, ou faixa [min, max] para estoque aleatorizado a cada reabastecimento.

TradeItem

FieldTypeRequiredDefaultDescription
ItemIdstringSimID do item.
QuantitynumberSimTamanho da pilha do item.

Exemplos

Loja fixa simples (Assets/Server/BarterShops/Klops_Merchant.json):

{
"DisplayNameKey": "server.barter.klops_merchant.title",
"RefreshInterval": {
"Days": 1
},
"RestockHour": 6,
"TradeSlots": [
{
"Type": "Fixed",
"Trade": {
"Output": { "ItemId": "Furniture_Construction_Sign", "Quantity": 1 },
"Input": [{ "ItemId": "Furniture_Construction_Sign", "Quantity": 1 }],
"Stock": 1
}
}
]
}

Loja mista com slots fixos e pool (Assets/Server/BarterShops/Kweebec_Merchant.json, condensado):

{
"DisplayNameKey": "server.barter.kweebec_merchant.title",
"RefreshInterval": {
"Days": 3
},
"RestockHour": 6,
"TradeSlots": [
{
"Type": "Fixed",
"Trade": {
"Output": { "ItemId": "Ingredient_Spices", "Quantity": 3 },
"Input": [{ "ItemId": "Ingredient_Life_Essence", "Quantity": 20 }],
"Stock": 10
}
},
{
"Type": "Pool",
"SlotCount": 3,
"Trades": [
{
"Weight": 50,
"Output": { "ItemId": "Plant_Crop_Berry_Block", "Quantity": 1 },
"Input": [{ "ItemId": "Ingredient_Life_Essence", "Quantity": 30 }],
"Stock": [10, 20]
},
{
"Weight": 30,
"Output": { "ItemId": "Plant_Crop_Berry_Winter_Block", "Quantity": 1 },
"Input": [{ "ItemId": "Ingredient_Life_Essence", "Quantity": 50 }],
"Stock": [10, 20]
},
{
"Weight": 20,
"Output": { "ItemId": "Food_Salad_Berry", "Quantity": 1 },
"Input": [{ "ItemId": "Ingredient_Life_Essence", "Quantity": 15 }],
"Stock": [4, 8]
}
]
}
]
}

No slot pool acima, 3 trocas são escolhidas aleatoriamente da lista ponderada cada vez que a loja reabastece a cada 3 dias na hora 6. O estoque é aleatorizado entre os valores min e max.

Páginas Relacionadas