feat(pet): 优化宠物融合错误码并记录原始捕获时间 - 将宠物融合过程中的错误码从 ErrSystemBusy 细分为多个更具体的错误码, 如 ErrPokemonNotFusionReady、ErrPokemonNotFusionReady2 等,便于问题定位。 - 在融合成功后,新增记录主宠的旧捕捉时间(OldCatchTime)字段。 - 调整战斗捕捉逻辑,使用对手玩家的第一个宠物信息进行添加,并重置战斗结束原因。 refactor(service): 移除未使用的管理员会话结构体字段和清理部分冗余代码 - 注释掉 base_sys_user.go
69 lines
1.6 KiB
Go
69 lines
1.6 KiB
Go
package service
|
||
|
||
import (
|
||
"blazing/cool"
|
||
"blazing/modules/blazing/model"
|
||
|
||
"github.com/gogf/gf/v2/frame/g"
|
||
"github.com/gogf/gf/v2/util/grand"
|
||
)
|
||
|
||
// PetFusionService 宠物融合配方主表Service(对应pet_fusion表)
|
||
type PetFusionService struct {
|
||
*cool.Service // 嵌入通用Service(继承基础CRUD方法)
|
||
}
|
||
|
||
// NewPetFusionService 创建PetFusionService实例
|
||
func NewPetFusionService() *PetFusionService {
|
||
return &PetFusionService{
|
||
&cool.Service{
|
||
Model: model.NewPetFusion(), // 绑定PetFusion模型
|
||
PageQueryOp: &cool.QueryOp{FieldEQ: []string{"is_enable", "main_pet_id", "sub_pet_id", "result_pet_id"}},
|
||
},
|
||
}
|
||
}
|
||
|
||
//获取主副精灵融合的id,如果不存在,那就给一个保底的id
|
||
|
||
func (s *PetFusionService) Data(p1, p2 uint32) uint32 {
|
||
m := cool.DBM(s.Model)
|
||
|
||
var pet []model.PetFusion //一个特性应该是唯一的,但是我们要获取默认随机特性
|
||
condition := g.Map{
|
||
"main_pet_id": p1,
|
||
"sub_pet_id": p2,
|
||
"is_enable": 1,
|
||
// "hits between ? and ?" : g.Slice{1, 10},
|
||
// "exp > 0" : nil,
|
||
// "category" : g.Slice{100, 200},
|
||
}
|
||
m.Where(condition).Scan(&pet)
|
||
|
||
for _, v := range pet {
|
||
|
||
rr := grand.Intn(100)
|
||
if rr < int(v.Probability) {
|
||
return uint32(v.ResultPetID)
|
||
}
|
||
}
|
||
//说明是失败,直接返回失败
|
||
if len(pet) > 0 {
|
||
return 0
|
||
}
|
||
|
||
var pets []model.PetFusion
|
||
m = cool.DBM(s.Model)
|
||
m.Where("is_enable", 1).Where("is_default", 1).Scan(&pets)
|
||
if len(pets) == 0 {
|
||
return 0
|
||
}
|
||
res := pets[grand.Intn(len(pets)-1)]
|
||
rr := grand.Intn(100)
|
||
if rr < int(res.Probability) {
|
||
return uint32(res.ResultPetID)
|
||
}
|
||
|
||
return 0
|
||
|
||
}
|