Files
text-adventure-game/store/player.js
Claude cb412544e9 Initial commit: Text Adventure Game
Features:
- Combat system with AP/EP hit calculation and three-layer defense
- Auto-combat/farming mode
- Item system with stacking support
- Skill system with levels, milestones, and parent skill sync
- Shop system with dynamic pricing
- Inventory management with bulk selling
- Event system
- Game loop with offline earnings
- Save/Load system

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 17:13:51 +08:00

114 lines
2.0 KiB
JavaScript

import { defineStore } from 'pinia'
import { ref, computed } from 'vue'
export const usePlayerStore = defineStore('player', () => {
// 基础属性
const baseStats = ref({
strength: 10, // 力量
agility: 8, // 敏捷
dexterity: 8, // 灵巧
intuition: 10, // 智力
vitality: 10 // 体质(影响HP)
})
// 当前资源
const currentStats = ref({
health: 100,
maxHealth: 100,
stamina: 100,
maxStamina: 100,
sanity: 100,
maxSanity: 100
})
// 主等级
const level = ref({
current: 1,
exp: 0,
maxExp: 100
})
// 技能
const skills = ref({})
// 装备
const equipment = ref({
weapon: null,
armor: null,
shield: null,
accessory: null
})
// 背包
const inventory = ref([])
// 货币(以铜币为单位)
const currency = ref({
copper: 0
})
// 当前位置
const currentLocation = ref('camp')
// 标记
const flags = ref({})
// 计算属性:总货币
const totalCurrency = computed(() => {
return {
gold: Math.floor(currency.value.copper / 10000),
silver: Math.floor((currency.value.copper % 10000) / 100),
copper: currency.value.copper % 100
}
})
// 重置玩家数据
function resetPlayer() {
baseStats.value = {
strength: 10,
agility: 8,
dexterity: 8,
intuition: 10,
vitality: 10
}
currentStats.value = {
health: 100,
maxHealth: 100,
stamina: 100,
maxStamina: 100,
sanity: 100,
maxSanity: 100
}
level.value = {
current: 1,
exp: 0,
maxExp: 100
}
skills.value = {}
equipment.value = {
weapon: null,
armor: null,
shield: null,
accessory: null
}
inventory.value = []
currency.value = { copper: 0 }
currentLocation.value = 'camp'
flags.value = {}
}
return {
baseStats,
currentStats,
level,
skills,
equipment,
inventory,
currency,
totalCurrency,
currentLocation,
flags,
resetPlayer
}
})