46 lines
1.2 KiB
Go
Executable File
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)
|
|
}
|