BWIKI 全站将于 9 月 3 日(全天)进行维护,期间无法编辑任何页面或发布新的评论。
模组:商店
← 目录
此页面解释如何编辑商店数据。
数据
格式
您可以通过编辑 Data/Shops 素材来创建或更改商店。此文件内含一个“字符串 → 数据模型”查询,其中:
- 键为唯一字符串ID
- 值为包含如下字段的数据模型
字段 | 效果 | ||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Items | 添加到商店库存的物品。此字段为包含如下字段的数据模型所组成的列表。
| ||||||||||||||||||||||||||||||||||||
SalableItemTags | (可选)上下文标签的一个列表,其中列出了玩家能够卖给此商店的物品。默认为空。 | ||||||||||||||||||||||||||||||||||||
Owners | (可选)商店菜单界面中显示的肖像和对话,或显示此商店已关门的信息(前提是设置了 ClosedMessage)。
若 Action OpenShop 地块属性指定了 此字段为包含如下字段的数据模型所组成的列表:
| ||||||||||||||||||||||||||||||||||||
Currency | (可选)结算货币。可用的取值为 0(金)、1(星星币)、2(齐币)、4(齐钻)。默认为 0。对于以物易物,参见 TradeItemId。 | ||||||||||||||||||||||||||||||||||||
ApplyProfitMargins | (可选)Items 下的 ApplyProfitMargins 字段的默认取值(若设置)。可以为 true(总应用)、false(总不应用)或 null(仅对树苗等特殊物品应用)。此字段会在应用数量修饰器之前被调用。默认为 null。 | ||||||||||||||||||||||||||||||||||||
StackSizeVisibility | (可选)如何默认地在商店列表中绘制堆叠数量。若忽略,则使用默认商店逻辑(通常等价于 Show)。
可用的取值为:
在某些情况下,此字段会被忽略(例如,配方不能拥有堆叠数量)。 | ||||||||||||||||||||||||||||||||||||
OpenSound | (可选)打开商店菜单时播放的声音提示ID。默认为 dwop。 | ||||||||||||||||||||||||||||||||||||
PurchaseSound | (可选)当物品以正常方式被购买时播放的声音提示ID。默认为 purchaseClick。 | ||||||||||||||||||||||||||||||||||||
purchaseRepeatSound | (可选)直接购买一组物品(例如,PC 端为按住右键)时播放的声音提示ID。默默认为 purchaseRepeat。 | ||||||||||||||||||||||||||||||||||||
PriceModifiers | (可选)应用于商店中商品价格的数量修饰器。参见 Items 下的 PriceModifiers。 | ||||||||||||||||||||||||||||||||||||
PriceModifierMode | (可选)当 PriceModifiers 字段有多个修饰器同时作用时,应用于它们的叠加模式。仅影响特定字段,而不会影响 Items 下面的价格修饰器。默认为 Stack。 | ||||||||||||||||||||||||||||||||||||
VisualTheme | (可选)应用于商店界面的视觉主题。若忽略,则使用默认主题。会使用第一个匹配成功的主题。所有字段都是可选的,若忽略,默认为默认主题。
此字段为包含如下字段的数据模型所组成的列表:
| ||||||||||||||||||||||||||||||||||||
CustomFields | 此商店的自定义字段。 |
示例
您可以添加或替换一整个商店。例如,下面的内容包添加了一个在夏天售卖冰淇凌、全年售卖河豚的商店:
{
"Format": "2.7.0",
"Changes": [
{
"Action": "EditData",
"Target": "Data/Shops",
"Entries": {
"Example.ModId_CustomShop": {
"Owners": [
{
"Name": "Any",
"Dialogues": [
// dialogue on sunny summer days
{
"Id": "Example.ModId_SunnySummer",
"Condition": "SEASON Summer, WEATHER Here Sun",
"Dialogue": "Ice-cream is perfect for a day like this."
},
// dialogue any other time
{
"Id": "Example.ModId_Default",
"Dialogue": "Welcome to the only place in town for pufferfish!"
}
]
}
],
"Items": [
// ice-cream in summer, default price
{
"Id": "Example.ModId_IceCream",
"Condition": "SEASON Summer",
"ItemId": "(O)233"
},
// pufferfish for 1000g, limited to one per day per player
{
"Id": "Example.ModId_PufferFish",
"ItemId": "(O)128",
"Price": 1000,
"AvailableStock": 1,
"AvailableStockLimit": "Player"
}
]
}
}
}
]
}
您也可以通过定位商店的 Items 字段来添加、替换、编辑或重排指定商店中物品。例如,下面的代码移除鳟鱼汤(物品 #219)并在鱼饵(物品 #685)上方添加河豚。
{
"Format": "2.7.0",
"Changes": [
{
"Action": "EditData",
"Target": "Data/Shops",
"TargetField": [ "FishShop", "Items" ],
"Entries": {
"(O)219": null,
"Example.ModId_Pufferfish": {
"Id": "Example.ModId_Pufferfish",
"ItemId": "(O)128",
"Price": 2000
}
},
"MoveEntries": [
{ "Id": "Example.ModId_Pufferfish", "BeforeId": "(O)685" }
]
}
]
}
原版商店ID
原版游戏的商店也定义在 Data/Shops(除了一小部分特例,例如梳妆台和家庭装修)。
参见 Data/Shops 以获取完整列表,但为了方便起见,此处列出主要的商店ID:
商店 | ID |
---|---|
废弃的屋子 | HatMouse |
探险家公会 | AdventureShop(常规商店) AdventureGuildRecovery (物品寻回服务) |
赌场 | Casino |
克林特的铁匠铺 | Blacksmith(常规商店) ClintUpgrade(工具升级) |
沙漠商人 | DesertTrade |
矮人的商店 | Dwarf |
哈维的诊所 | Hospital |
冰淇淋摊 | IceCreamStand |
姜岛度假村 | ResortBar |
姜岛商人 | IslandTrade |
Joja超市 | Joja |
科罗布斯的商店 | ShadowShop |
玛妮的牧场 | AnimalShop |
皮埃尔的杂货店 | SeedShop |
罗宾的木匠商店 | Carpenter |
星之果实餐吧 | Saloon |
桑迪的绿洲商店 | Sandy |
旅行货车 | Traveler |
威利的鱼店 | FishShop |
主要节日商店:
节日商店 | ID |
---|---|
月光水母起舞 | Festival_DanceOfTheMoonlightJellies_Pierre |
复活节 | Festival_EggFestival_Pierre |
冰雪节 | Festival_FestivalOfIce_TravelingMerchant |
冬日星盛宴 | Festival_FeastOfTheWinterStar_Pierre |
花舞节 | Festival_FlowerDance_Pierre |
夏威夷宴会 | Festival_Luau_Pierre |
夜市(装饰品船) | Festival_NightMarket_DecorationBoat |
夜市(魔法船) | Festival_NightMarket_MagicBoat_Day1 Festival_NightMarket_MagicBoat_Day2 Festival_NightMarket_MagicBoat_Day3 |
万灵节 | Festival_SpiritsEve_Pierre |
星露谷展览会 | Festival_StardewValleyFair_StarTokens |
下面两个其实是特殊的商店:
物品 | ID |
---|---|
目录 | Catalogue |
家具目录 | Furniture Catalogue |
打开自定义商店
您可以在地图上放置一个 Action OpenShop 地块属性,当玩家点击它时,就会打开指定 ID 的商店。
在 C# 代码中,您可以使用 Utility.GetShopStock("shop id here")
获取自定义商店的库存物品,使用 Utility.TryOpenShopMenu("shop id", …)
打开商店菜单,以及使用 shopMenu.AddForSale(…)
向已打开的目录添加临时物品。已打开商店的 ID 存储在商店菜单的 ShopId 字段中。