Files
bd2/go/internal/server/deck/story_party.go
T

44 lines
1.1 KiB
Go

package deck
import "bd2server/internal/server/player"
func (s *Store) CurrentFieldDeck() []FieldEntry {
s.mu.RLock()
defer s.mu.RUnlock()
return s.visibleFieldDeckLocked()
}
func (s *Store) visibleFieldDeckLocked() []FieldEntry {
var out []FieldEntry
for _, entry := range s.state.FieldDeck {
if s.characters != nil {
c, ok := s.characters.Find(entry.CharacterInvenIndex)
if !ok || player.IsStoryCharacter(c) && !s.temporaryAllowed(c) {
continue
}
}
entry.Slot = uint64(len(out) + 1)
out = append(out, entry)
}
return out
}
// SetStoryParty stores the authored active quest formation using the same
// character ownership checks as DeckSave. Empty formation keeps player choice.
func (s *Store) SetStoryParty(entries []DeckEntry) error {
if len(entries) == 0 {
return nil
}
if err := validDeck(entries); err != nil {
return err
}
s.mu.Lock()
defer s.mu.Unlock()
if err := s.validateOwnedDeckLocked(entries); err != nil {
return err
}
next := clone(s.state)
next.Deck = append([]DeckEntry(nil), entries...)
return s.commit(next)
}