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

81 lines
2.1 KiB
Go
Raw Normal View History

package service
import (
"blazing/cool"
"blazing/modules/config/model"
"blazing/modules/dict/service"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/util/gconv"
"github.com/gogf/gf/v2/util/grand"
)
// PetFusionMaterialService 宠物融合材料子表Service对应pet_fusion_material表
type PetFusionMaterialService struct {
*cool.Service // 嵌入通用Service继承基础CRUD方法
}
// NewPetFusionMaterialService 创建PetFusionMaterialService实例
func NewPetFusionMaterialService() *PetFusionMaterialService {
return &PetFusionMaterialService{
&cool.Service{
Model: model.NewPetFusionMaterial(), // 绑定PetFusionMaterial模型默认参数占位
//Cache: gcache.New(),
// PageQueryOp: &cool.QueryOp{KeyWordField: []string{"material1", "material2", "material3", "material4"}},
},
}
}
// 获取融合材料的特性,返回两个值,一个是指定的特性,另一个是如果配方没找到的情况下,默认的配置
func (s *PetFusionMaterialService) Data(Material1 [4]uint32) uint32 {
2026-01-21 20:46:05 +00:00
fusions := service.NewDictInfoService().GetData("fusion")
for _, v := range Material1 {
// if v < 10000 {
// //使用过小的道具
// return 0
// }
_, ok := fusions[v]
if !ok {
//todo使用了非法材料
return 0
}
}
m := dbm(s.Model)
var effect *model.PetFusionMaterial //一个特性应该是唯一的,但是我们要获取默认随机特性
condition := g.Map{
"material1": Material1[0],
"material2": Material1[1],
"material3": Material1[2],
"material4": Material1[3],
"is_enable": 1,
}
2026-01-21 20:46:05 +00:00
m.Where(condition).Scan(&effect)
//这时候有可能效果是空的,那么这时候就再次查询默认的特性,保证每次必会生成一个数据库有的特性
//也许这个时候的特性配方就是随机从数据库中查找一个特性
if effect == nil {
2026-01-21 20:46:05 +00:00
effect2s := service.NewDictInfoService().GetData("effect")
for _, v := range effect2s {
return gconv.Uint32(v.Value)
}
}
r := grand.Intn(4)
switch r {
case 0:
return effect.Trait1Idx
case 1:
return effect.Trait2Idx
case 2:
return effect.Trait3Idx
case 3:
return effect.Trait4Idx
}
return 0
}