feat(all): implement SkyWay progression, battles and dispatch; fix field reward position ordering

This commit is contained in:
2026-10-08 19:55:29 +08:00
parent 06a83ada28
commit baae9fdddb
26 changed files with 1576 additions and 130 deletions
@@ -0,0 +1,37 @@
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)
}