mirror of
https://github.com/Walter-Sparrow/lunar-tear.git
synced 2026-07-02 05:43:41 +03:00
Implement Tower accumulation reward claiming
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user