2025-12-31 21:00:29 +08:00
|
|
|
|
package task
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
|
"blazing/common/data"
|
|
|
|
|
|
|
|
|
|
|
|
"blazing/modules/config/service"
|
2026-01-19 18:51:56 +08:00
|
|
|
|
"blazing/modules/player/model"
|
2025-12-31 21:00:29 +08:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
type TaskResult struct {
|
|
|
|
|
|
Pet *model.PetInfo `json:"petTypeId" description:"发放的精灵ID"` // 发放的精灵ID,
|
|
|
|
|
|
|
2026-04-11 19:25:59 +08:00
|
|
|
|
ItemList []data.ItemInfo `json:"itemList" description:"发放物品的数组"` // 发放物品的数组,
|
|
|
|
|
|
Title uint32 `json:"title" description:"称号奖励"`
|
|
|
|
|
|
RewardPetID uint32 `json:"rewardPetId" description:"宠物相关奖励目标精灵ID"`
|
|
|
|
|
|
TrainSkillIDs []uint32 `json:"trainSkillIds" description:"特训技能奖励"`
|
|
|
|
|
|
SkinIDs []uint32 `json:"skinIds" description:"皮肤奖励"`
|
2025-12-31 21:00:29 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-19 18:51:56 +08:00
|
|
|
|
func GetTaskInfo(id, ot int) *TaskResult {
|
2025-12-31 21:00:29 +08:00
|
|
|
|
ret := &TaskResult{}
|
|
|
|
|
|
|
|
|
|
|
|
r := service.NewTaskService().Get(id, ot)
|
|
|
|
|
|
if r == nil {
|
|
|
|
|
|
return nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
pet := service.NewPetRewardService().Get(r.ElfRewardIds)
|
|
|
|
|
|
if pet != nil {
|
2026-02-08 17:57:42 +08:00
|
|
|
|
ret.Pet = model.GenPetInfo(int(pet.MonID), int(pet.DV), int(pet.Nature), int(pet.Effect), int(pet.Lv), nil, 0)
|
2025-12-31 21:00:29 +08:00
|
|
|
|
}
|
2026-04-11 19:25:59 +08:00
|
|
|
|
ret.RewardPetID = r.RewardPetID
|
|
|
|
|
|
ret.TrainSkillIDs = append(ret.TrainSkillIDs, r.TrainSkillIDs...)
|
|
|
|
|
|
ret.SkinIDs = append(ret.SkinIDs, r.SkinIDs...)
|
|
|
|
|
|
if ret.Pet != nil {
|
|
|
|
|
|
applyTaskRewardPetExtras(ret.Pet, ret.TrainSkillIDs, ret.SkinIDs)
|
|
|
|
|
|
}
|
2025-12-31 21:00:29 +08:00
|
|
|
|
|
|
|
|
|
|
for _, itemID := range r.ItemRewardIds {
|
|
|
|
|
|
iteminfo := service.NewItemService().GetItemCount(itemID)
|
2026-01-01 00:30:09 +08:00
|
|
|
|
ret.ItemList = append(ret.ItemList, data.ItemInfo{ItemId: iteminfo.ItemId, ItemCnt: iteminfo.ItemCnt})
|
2025-12-31 21:00:29 +08:00
|
|
|
|
|
2026-01-19 18:51:56 +08:00
|
|
|
|
}
|
|
|
|
|
|
if r.TitleRewardIds != 0 {
|
|
|
|
|
|
ret.Title = r.TitleRewardIds
|
|
|
|
|
|
|
2025-12-31 21:00:29 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-01 00:30:09 +08:00
|
|
|
|
return ret
|
2025-12-31 21:00:29 +08:00
|
|
|
|
}
|
2026-04-11 19:25:59 +08:00
|
|
|
|
|
|
|
|
|
|
func applyTaskRewardPetExtras(pet *model.PetInfo, trainSkillIDs, skinIDs []uint32) {
|
|
|
|
|
|
if pet == nil {
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if merged := mergeTaskRewardIDs(pet.ExtSKill, trainSkillIDs); len(merged) != len(pet.ExtSKill) {
|
|
|
|
|
|
pet.ExtSKill = merged
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
mergedSkins := mergeTaskRewardIDs(pet.ExtSkin, skinIDs)
|
|
|
|
|
|
if len(mergedSkins) != len(pet.ExtSkin) {
|
|
|
|
|
|
pet.ExtSkin = mergedSkins
|
|
|
|
|
|
}
|
|
|
|
|
|
if pet.SkinID == 0 {
|
|
|
|
|
|
for _, skinID := range mergedSkins {
|
|
|
|
|
|
if skinID != 0 {
|
|
|
|
|
|
pet.SkinID = skinID
|
|
|
|
|
|
break
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func mergeTaskRewardIDs(dst []uint32, src []uint32) []uint32 {
|
|
|
|
|
|
if len(src) == 0 {
|
|
|
|
|
|
return dst
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
seen := make(map[uint32]struct{}, len(dst)+len(src))
|
|
|
|
|
|
result := make([]uint32, 0, len(dst)+len(src))
|
|
|
|
|
|
|
|
|
|
|
|
for _, id := range dst {
|
|
|
|
|
|
if id == 0 {
|
|
|
|
|
|
continue
|
|
|
|
|
|
}
|
|
|
|
|
|
if _, ok := seen[id]; ok {
|
|
|
|
|
|
continue
|
|
|
|
|
|
}
|
|
|
|
|
|
seen[id] = struct{}{}
|
|
|
|
|
|
result = append(result, id)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for _, id := range src {
|
|
|
|
|
|
if id == 0 {
|
|
|
|
|
|
continue
|
|
|
|
|
|
}
|
|
|
|
|
|
if _, ok := seen[id]; ok {
|
|
|
|
|
|
continue
|
|
|
|
|
|
}
|
|
|
|
|
|
seen[id] = struct{}{}
|
|
|
|
|
|
result = append(result, id)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return result
|
|
|
|
|
|
}
|