Files
text-adventure-game/config/shop.js

178 lines
3.9 KiB
JavaScript
Raw Normal View History

/**
* 商店配置
* 定义不同位置商店的出售物品
*/
import { ITEM_CONFIG } from './items.js'
// 商店配置
export const SHOP_CONFIG = {
// 营地商店 - 基础物品
camp: {
name: '营地杂货铺',
owner: '老杰克',
icon: '🏪',
// 出售的物品列表
items: [
{
itemId: 'bread',
stock: 99, // 库存,-1表示无限
baseStock: 99
},
{
itemId: 'healing_herb',
stock: 20,
baseStock: 20
},
{
itemId: 'old_book',
stock: 5,
baseStock: 5
}
],
// 收购的物品类型
buyItems: ['material', 'consumable'],
// 收购价格倍率
buyRate: 0.3
},
// 测试市场 - 商人老张
market: {
name: '商人老张的摊位',
owner: '商人老张',
icon: '🛒',
items: [
{
itemId: 'bread',
stock: -1,
baseStock: -1
},
{
itemId: 'healing_herb',
stock: 50,
baseStock: 50
},
{
itemId: 'old_book',
stock: 10,
baseStock: 10
}
],
buyItems: ['material', 'consumable', 'weapon', 'armor'],
buyRate: 0.4
},
// 测试黑市 - 神秘人
blackmarket: {
name: '神秘人的黑市',
owner: '神秘人',
icon: '🌑',
items: [
{
itemId: 'healing_herb',
stock: 10,
baseStock: 10
}
],
buyItems: ['material', 'weapon'],
buyRate: 0.2
}
}
/**
* 获取指定位置的商店配置
* @param {string} locationId - 位置ID
* @returns {Object|null} 商店配置
*/
export function getShopConfig(locationId) {
return SHOP_CONFIG[locationId] || null
}
/**
* 获取商店的可售物品列表
* @param {string} locationId - 位置ID
* @returns {Array} 可售物品列表
*/
export function getShopItems(locationId) {
const shop = getShopConfig(locationId)
if (!shop) return []
return shop.items
.filter(item => item.stock === -1 || item.stock > 0)
.map(shopItem => {
const itemConfig = ITEM_CONFIG[shopItem.itemId]
if (!itemConfig) return null
return {
...itemConfig,
stock: shopItem.stock,
baseStock: shopItem.baseStock,
shopItemId: shopItem.itemId
}
})
.filter(Boolean)
}
/**
* 检查物品是否可以被商店收购
* @param {string} locationId - 位置ID
* @param {Object} item - 物品对象
* @returns {boolean} 是否可以收购
*/
export function canShopBuyItem(locationId, item) {
const shop = getShopConfig(locationId)
if (!shop || !shop.buyItems) return false
// 关键道具不能出售
if (item.type === 'key') return false
return shop.buyItems.includes(item.type)
}
/**
* 计算物品的购买价格玩家买
* @param {Object} gameStore - 游戏Store
* @param {string} itemId - 物品ID
* @returns {number} 购买价格铜币
*/
export function getBuyPrice(gameStore, itemId) {
const item = ITEM_CONFIG[itemId]
if (!item || !item.baseValue) return 0
const marketData = gameStore.marketPrices?.prices?.[itemId]
const basePrice = item.baseValue
if (marketData) {
return Math.floor(basePrice * marketData.buyRate)
}
return Math.floor(basePrice * 2)
}
/**
* 计算物品的出售价格玩家卖
* @param {Object} gameStore - 游戏Store
* @param {string} itemId - 物品ID
* @param {number} quality - 物品品质
* @returns {number} 出售价格铜币
*/
export function getSellPrice(gameStore, itemId, quality = 100) {
const item = ITEM_CONFIG[itemId]
if (!item || !item.baseValue) return 0
const marketData = gameStore.marketPrices?.prices?.[itemId]
const basePrice = item.baseValue
// 品质影响价格
const qualityMultiplier = quality / 100
let price = Math.floor(basePrice * qualityMultiplier)
if (marketData) {
price = Math.floor(price * marketData.sellRate)
} else {
price = Math.floor(price * 0.3)
}
return Math.max(1, price)
}