package game import ( "thehouseoficarus/internal/engine" "thehouseoficarus/internal/player" ) func getPlayerFlagInt(p *player.Player, key string) int { if p.Flags == nil { return 0 } val, ok := p.Flags[key] if !ok { return 0 } switch v := val.(type) { case int: return v case int64: return int(v) case float64: return int(v) } return 0 } func getPlayerFlagString(p *player.Player, key string) string { if p.Flags == nil { return "" } val, ok := p.Flags[key] if !ok { return "" } s, _ := val.(string) return s } func (g *Game) setPlayerFlag(p *player.Player, key string, val any) { p.EnsureFlags() old, existed := p.Flags[key] p.Flags[key] = val if !existed || !engine.ValuesEqual(old, val) { g.firePlayerFlagTrigger(p, key, val) } } func (g *Game) firePlayerFlagTrigger(p *player.Player, flagName string, flagValue any) { g.charsMu.Lock() sess := g.loggedInChars[p.Name] g.charsMu.Unlock() if sess == nil { return } g.TriggerStore.FirePlayerInRoom(p.Name, p.RoomID, flagName, flagValue) } func intFromFlag(flags map[string]any, key string) int { val, ok := flags[key] if !ok { return 0 } switch v := val.(type) { case int: return v case int64: return int(v) case float64: return int(v) } return 0 }