74 lines
1.8 KiB
Go
74 lines
1.8 KiB
Go
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/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) int32 {
|
||
|
||
fusions := service.NewDictInfoService().GetData("fusion")
|
||
|
||
for _, v := range Material1 {
|
||
// if v < 10000 {
|
||
// //使用过小的道具
|
||
// return 0
|
||
// }
|
||
_, ok := fusions[v]
|
||
if !ok {
|
||
//todo使用了非法材料
|
||
return 0
|
||
}
|
||
|
||
}
|
||
m := dbm_enable(s.Model)
|
||
|
||
var effect *model.PetFusionMaterial //一个特性应该是唯一的,但是我们要获取默认随机特性
|
||
condition := g.Map{
|
||
"material1": Material1[0],
|
||
"material2": Material1[1],
|
||
"material3": Material1[2],
|
||
"material4": Material1[3],
|
||
"is_enable": 1,
|
||
}
|
||
m.Where(condition).Scan(&effect)
|
||
if effect != nil {
|
||
|
||
r := grand.Intn(4)
|
||
switch r {
|
||
case 0:
|
||
return int32(effect.Trait1Idx)
|
||
case 1:
|
||
return int32(effect.Trait2Idx)
|
||
case 2:
|
||
return int32(effect.Trait3Idx)
|
||
case 3:
|
||
return int32(effect.Trait4Idx)
|
||
}
|
||
}
|
||
|
||
return -1
|
||
}
|