Files
bl/logic/controller/pet_收集计划.go
xinian 0daeb70900
All checks were successful
ci/woodpecker/push/my-first-workflow Pipeline was successful
fix: 修复日志格式化字符串错误和任务奖励逻辑
2026-04-10 10:28:22 +08:00

108 lines
3.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package controller
import (
"blazing/common/socket/errorcode"
"blazing/logic/service/pet"
"blazing/logic/service/player"
"blazing/modules/player/model"
"github.com/pointernil/bitset32"
"github.com/samber/lo"
)
// IsCollect 处理控制器请求。
func (h Controller) IsCollect(
data *pet.C2S_IS_COLLECT, c *player.Player) (result *pet.S2C_IS_COLLECT, err errorcode.ErrorCode) { //这个时候player应该是空的
result = &pet.S2C_IS_COLLECT{
ID: data.Type,
}
taskData, taskErr := c.Service.Task.GetTask(uint32(1335))
if taskErr == nil {
r := bitset32.From(taskData.Data)
if r.Test(uint(data.Type)) {
result.IsCom = 1
}
}
_, ok := lo.Find([]uint32{1, 2, 3, 4, 301}, func(item uint32) bool {
return data.Type == item
})
if ok {
res := c.Info.GetTask(1335 + int(data.Type)) //第一期
if res == model.Completed {
result.IsCom = 1
}
}
return result, 0
}
// 定义 Type 与合法 ID 集合的映射表,集中管理所有规则
var validTypeIDMap = map[int][]uint32{
1: {1, 4, 7}, // Type1合法ID为1、4、7
2: {71}, // Type2合法ID为71
3: {275}, // Type3合法ID为275
4: {669}, // Type4合法ID为669你之前提到的是670确认是否笔误
301: {1, 4, 7}, //精灵王计划
100: {856, 857, 858}, //测试
}
// Collect 处理控制器请求。
func (h Controller) Collect(
data *pet.C2S_PET_COLLECT, c *player.Player) (result *pet.S2C_PET_COLLECT, err errorcode.ErrorCode) { //这个时候player应该是空的
result = &pet.S2C_PET_COLLECT{ID: data.ID}
res := c.Info.GetTask(1335 + int(data.Type)) //第一期
_, ok := lo.Find([]uint32{1, 2, 3, 4, 301}, func(item uint32) bool {
return data.Type == item
})
if res == model.Completed && ok { //这块是为了兼容旧版本
taskData, taskErr := c.Service.Task.GetTask(uint32(1335))
if taskErr != nil {
return nil, errorcode.ErrorCode(errorcode.ErrorCodes.ErrSystemError)
}
r := bitset32.From(taskData.Data)
r.Set(uint(data.Type))
taskData.Data = r.Bytes()
if taskErr = c.Service.Task.SetTask(taskData); taskErr != nil {
return nil, errorcode.ErrorCode(errorcode.ErrorCodes.ErrSystemError)
}
return nil, errorcode.ErrorCode(errorcode.ErrorCodes.ErrSystemError)
}
validIDs, ok := validTypeIDMap[int(data.Type)]
if !ok {
// Type不在映射表中返回系统错误
return nil, errorcode.ErrorCode(errorcode.ErrorCodes.ErrSystemError)
}
// 2. 判断ID是否在合法集合中
if !lo.Contains(validIDs, data.ID) {
return nil, errorcode.ErrorCode(errorcode.ErrorCodes.ErrSystemError)
}
taskData, taskErr := c.Service.Task.GetTask(uint32(1335))
if taskErr != nil {
return nil, errorcode.ErrorCode(errorcode.ErrorCodes.ErrSystemError)
}
r := bitset32.From(taskData.Data)
if !r.Test(uint(data.Type)) {
r.Set(uint(data.Type))
taskData.Data = r.Bytes()
if taskErr = c.Service.Task.SetTask(taskData); taskErr != nil {
return nil, errorcode.ErrorCode(errorcode.ErrorCodes.ErrSystemError)
}
petInfo := model.GenPetInfo(int(data.ID), -1, -1, 0, 1, nil, 0)
c.Service.Pet.PetAdd(petInfo, 0)
result.CatchTime = petInfo.CatchTime
}
if result.CatchTime == 0 {
return nil, errorcode.ErrorCode(errorcode.ErrorCodes.ErrAwardAlreadyClaimed)
}
return result, 0
}