Files
bd2/go/internal/server/domain/events/tasks/skyway.go
T

38 lines
934 B
Go

package eventtasks
import (
"bd2server/internal/server/domain/command"
"slices"
)
func (s *Service) RecordSkyWayClear(ctx command.Context, positionGroup, difficulty uint64) error {
changed := false
for _, schedule := range s.taskSchedules() {
if schedule.Type != 4 || !s.active(schedule) {
continue
}
for _, task := range s.design.Missions {
if task.Type != 24 || task.SubType != positionGroup || !slices.Contains(task.Params, difficulty) || !s.availableTask(ctx, schedule, task) {
continue
}
previous := s.state.Missions[scheduleKey(schedule)+"/"+key(task.ID)]
var prior mission
if previous != nil {
prior = *previous
}
current := s.mission(schedule, task.ID)
if previous == nil || prior != *current {
changed = true
}
if !current.Claimed && current.Value < task.Target {
current.Value++
changed = true
}
}
}
if !changed {
return nil
}
return s.save(ctx)
}