game/server/items/manager.go
2026-04-20 16:07:22 +08:00

46 lines
1.2 KiB
Go
Executable File

package items
import (
"wuziqi-server/core"
)
type ItemManager struct {
strategies map[string]ItemStrategy
}
func NewItemManager() *ItemManager {
m := &ItemManager{
strategies: make(map[string]ItemStrategy),
}
m.registerDefaults()
return m
}
func (m *ItemManager) registerDefaults() {
m.Register("medkit", &MedkitStrategy{})
m.Register("bomb_timer", &BombTimerStrategy{})
m.Register("poison", &PoisonStrategy{})
m.Register("shield", &ShieldStrategy{})
m.Register("skip", &SkipStrategy{})
m.Register("magnifier", &MagnifierStrategy{})
m.Register("knife", &KnifeStrategy{})
m.Register("revive", &ReviveStrategy{})
m.Register("lightning", &LightningStrategy{})
m.Register("chest", &ChestStrategy{})
m.Register("curse", &CurseStrategy{})
}
func (m *ItemManager) Register(itemID string, strategy ItemStrategy) {
m.strategies[itemID] = strategy
}
func (m *ItemManager) UseItem(state *core.GameState, user *core.Player, itemID string, ctx ItemContext) bool {
strategy, exists := m.strategies[itemID]
if !exists {
ctx.Logger.Error("No strategy found for item: %s", itemID)
return false
}
ctx.Logger.Info("Player %s used item: %s", user.UserID, itemID)
return strategy.Use(state, user, ctx)
}