pet_data/data/shop.js

122 lines
2.9 KiB
JavaScript

// 商店商品配置(資料驅動 - 隨機刷新機制)
// 商品池 - 所有可能出現的商品及其出現機率
export const SHOP_POOL = [
// 食物類 - 高機率
{
itemId: 'cookie',
category: 'food',
price: 10,
appearChance: 0.8, // 80% 機率出現
sellPrice: 5 // 賣出價格為購買價一半
},
{
itemId: 'tuna_can',
category: 'food',
price: 30,
appearChance: 0.6,
sellPrice: 15
},
{
itemId: 'premium_food',
category: 'food',
price: 50,
appearChance: 0.3, // 30% 機率
sellPrice: 25
},
// 藥品類 - 中機率
{
itemId: 'vitality_potion',
category: 'medicine',
price: 40,
appearChance: 0.5,
sellPrice: 20
},
// 裝備類 - 低機率
{
itemId: 'wooden_sword',
category: 'equipment',
price: 80,
appearChance: 0.3,
sellPrice: 40
},
{
itemId: 'leather_armor',
category: 'equipment',
price: 100,
appearChance: 0.25,
sellPrice: 50
},
{
itemId: 'magic_wand',
category: 'equipment',
price: 150,
appearChance: 0.15, // 稀有
sellPrice: 75
},
{
itemId: 'hero_sword',
category: 'equipment',
price: 300,
appearChance: 0.05, // 極稀有
sellPrice: 150
},
// 玩具類
{
itemId: 'ball',
category: 'toy',
price: 20,
appearChance: 0.6,
sellPrice: 10
},
// 飾品類 - 稀有
{
itemId: 'lucky_charm',
category: 'accessory',
price: 150,
appearChance: 0.2,
sellPrice: 75
}
]
// 商品分類
export const SHOP_CATEGORIES = {
food: { name: '食物', icon: '🍖' },
medicine: { name: '藥品', icon: '💊' },
equipment: { name: '裝備', icon: '⚔️' },
toy: { name: '玩具', icon: '🎾' },
accessory: { name: '飾品', icon: '✨' }
}
// 生成隨機商店商品列表
export function generateShopItems() {
const items = []
for (const poolItem of SHOP_POOL) {
// 按機率決定是否出現
if (Math.random() < poolItem.appearChance) {
items.push({
...poolItem,
stock: -1 // 無限庫存
})
}
}
// 確保至少有3個商品
if (items.length < 3) {
// 隨機補充商品
const remaining = SHOP_POOL.filter(p => !items.find(i => i.itemId === p.itemId))
while (items.length < 3 && remaining.length > 0) {
const randomIndex = Math.floor(Math.random() * remaining.length)
items.push({
...remaining[randomIndex],
stock: -1
})
remaining.splice(randomIndex, 1)
}
}
return items
}