Files
lunar-tear/server/internal/questflow/bighunt_quest.go
T
Ilya Groshev dc7c1df4fd
Build and Push Docker images to Docker Hub / build-and-push (push) Has been cancelled
Add campaign bonuses; fix parts variant/sub-stat grants and menu-pick quest resume state
2026-05-25 09:31:53 +03:00

54 lines
1.6 KiB
Go

package questflow
import (
"fmt"
"lunar-tear/server/internal/model"
"lunar-tear/server/internal/store"
)
func (h *QuestHandler) HandleBigHuntQuestStart(user *store.UserState, questId, userDeckNumber int32, nowMillis int64) {
quest, ok := h.QuestById[questId]
if !ok {
panic(fmt.Sprintf("unknown questId=%d for HandleBigHuntQuestStart", questId))
}
h.initQuestState(user, questId)
if quest.Stamina > 0 {
maxMillis := h.MaxStaminaByLevel[user.Status.Level] * 1000
stamina := h.staminaWithCampaign(quest.Stamina, h.targetForBigHunt(questId), nowMillis)
store.ConsumeStamina(user, stamina, maxMillis, nowMillis)
}
questState := user.Quests[questId]
questState.UserDeckNumber = userDeckNumber
questState.QuestStateType = model.UserQuestStateTypeActive
questState.LatestStartDatetime = nowMillis
user.Quests[questId] = questState
}
func (h *QuestHandler) HandleBigHuntQuestFinish(user *store.UserState, questId int32, isRetired, isAnnihilated bool, nowMillis int64) FinishOutcome {
quest, ok := h.QuestById[questId]
if !ok {
panic(fmt.Sprintf("unknown questId=%d for HandleBigHuntQuestFinish", questId))
}
target := h.targetForBigHunt(questId)
outcome := h.evaluateFinishOutcome(user, questId, target, nowMillis)
if !isRetired {
h.applyQuestVictory(user, questId, &outcome, nowMillis, false)
}
consumed := h.staminaWithCampaign(quest.Stamina, target, nowMillis)
if isRetired && !isAnnihilated && consumed > 1 {
refund := consumed - 1
maxMillis := h.MaxStaminaByLevel[user.Status.Level] * 1000
store.RecoverStamina(user, refund*1000, maxMillis, nowMillis)
}
h.clearQuestMissions(user, questId, nowMillis)
return outcome
}