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