mirror of
https://github.com/Walter-Sparrow/lunar-tear.git
synced 2026-07-02 13:53:41 +03:00
50 lines
1.7 KiB
Go
50 lines
1.7 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"log"
|
|
|
|
pb "lunar-tear/server/gen/proto"
|
|
"lunar-tear/server/internal/gametime"
|
|
"lunar-tear/server/internal/model"
|
|
"lunar-tear/server/internal/store"
|
|
)
|
|
|
|
func (s *QuestServiceServer) ReceiveTowerAccumulationReward(ctx context.Context, req *pb.ReceiveTowerAccumulationRewardRequest) (*pb.ReceiveTowerAccumulationRewardResponse, error) {
|
|
log.Printf("[QuestService] ReceiveTowerAccumulationReward: eventQuestChapterId=%d targetMissionClearCount=%d",
|
|
req.EventQuestChapterId, req.TargetMissionClearCount)
|
|
|
|
cat := s.holder.Get()
|
|
tower := cat.Tower
|
|
granter := cat.QuestHandler.Granter
|
|
|
|
userId := CurrentUserId(ctx, s.users, s.sessions)
|
|
nowMillis := gametime.NowMillis()
|
|
|
|
s.users.UpdateUser(userId, func(user *store.UserState) {
|
|
rec := user.TowerAccumulationRewards[req.EventQuestChapterId]
|
|
old := rec.LatestRewardReceiveQuestMissionClearCount
|
|
|
|
items, highest := tower.CollectRewards(req.EventQuestChapterId, old, req.TargetMissionClearCount)
|
|
if highest <= old {
|
|
log.Printf("[QuestService] ReceiveTowerAccumulationReward: nothing to grant for chapter=%d (claimed=%d, target=%d)",
|
|
req.EventQuestChapterId, old, req.TargetMissionClearCount)
|
|
return
|
|
}
|
|
|
|
for _, it := range items {
|
|
granter.GrantFull(user, model.PossessionType(it.PossessionType), it.PossessionId, it.Count, nowMillis)
|
|
}
|
|
|
|
rec.EventQuestChapterId = req.EventQuestChapterId
|
|
rec.LatestRewardReceiveQuestMissionClearCount = highest
|
|
rec.LatestVersion = nowMillis
|
|
user.TowerAccumulationRewards[req.EventQuestChapterId] = rec
|
|
|
|
log.Printf("[QuestService] ReceiveTowerAccumulationReward: chapter=%d granted %d item(s), claimed %d -> %d",
|
|
req.EventQuestChapterId, len(items), old, highest)
|
|
})
|
|
|
|
return &pb.ReceiveTowerAccumulationRewardResponse{}, nil
|
|
}
|