Files
bl/modules/config/service/pet_fusion_service.go

82 lines
1.8 KiB
Go
Raw Normal View History

package service
import (
"blazing/common/utils"
"blazing/cool"
"blazing/modules/config/model"
"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模型
//Cache: gcache.New(),
PageQueryOp: &cool.QueryOp{FieldEQ: []string{"is_enable", "main_pet_id", "sub_pet_id", "result_pet_id"}},
},
}
}
//获取主副精灵融合的id,如果不存在,那就给一个保底的id
func (s *PetFusionService) Data(p1, p2, rand uint32) uint32 {
2026-02-03 19:10:14 +08:00
2026-02-05 01:03:00 +08:00
if !grand.Meet(int(rand/2)+50, 100) {
2026-02-03 19:10:14 +08:00
return 0
}
pet := s.getData(p1, p2)
if len(pet) != 0 {
var pets, props []int
for _, v := range pet {
pets = append(pets, int(v.ResultPetID))
props = append(props, int(v.Probability))
}
2026-02-09 01:29:33 +08:00
t, _ := utils.RandomByWeight(pets, props)
2026-02-05 01:57:15 +08:00
return uint32(t)
//说明是失败,直接返回失败
} else {
pets := s.def()
res := pets[grand.Intn(len(pets))]
rr := grand.Intn(100)
if rr < int(res.Probability+int32(rand)) {
return uint32(res.ResultPetID)
}
//到这里相当于直接失败
return 0
}
return 0
}
func (s *PetFusionService) getData(p1, p2 uint32) []model.PetFusion {
var pet []model.PetFusion //一个特性应该是唯一的,但是我们要获取默认随机特性
2026-02-14 23:14:43 +08:00
dbm_enable(s.Model).Where("main_pet_id", p1).Wheref(`sub_pet_ids @> ARRAY[?]::integer[]`, p2).Scan(&pet)
2026-02-04 23:13:53 +08:00
return pet
}
2026-02-04 23:13:53 +08:00
func (s *PetFusionService) def() []model.PetFusion {
var pets []model.PetFusion
2026-02-14 23:14:43 +08:00
dbm_enable(s.Model).Where("is_default", 1).Scan(&pets)
return pets
// return ret.Interface().([]model.PetFusion)
}