38 lines
934 B
Go
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)
|
|
}
|