feat: 添加战胜规则配置模块
All checks were successful
ci/woodpecker/push/my-first-workflow Pipeline was successful

This commit is contained in:
xinian
2026-03-21 00:57:18 +08:00
committed by cnb
parent d9a99155d9
commit 1969c01f3e
6 changed files with 133 additions and 4 deletions

View File

@@ -0,0 +1,22 @@
package admin
import (
"blazing/cool"
"blazing/modules/config/service"
)
// FightRuleController 战胜规则Admin控制器
type FightRuleController struct {
*cool.Controller
}
func init() {
var fightRuleController = &FightRuleController{
&cool.Controller{
Prefix: "/admin/config/fightRule",
Api: []string{"Add", "Delete", "Update", "Info", "List", "Page"},
Service: service.NewFightRuleService(),
},
}
cool.RegisterController(fightRuleController)
}

View File

@@ -0,0 +1,39 @@
package model
import (
"blazing/cool"
)
// 表名常量
const TableNameFightRule = "config_fight_rule"
// FightRule 战胜规则配置表
// 对应 rule 包中 Rule300-Rule316 的配置参数
type FightRule struct {
*cool.Model // 嵌入基础Model包含主键、创建/更新时间等通用字段)
RuleIdx uint32 `gorm:"not null;uniqueIndex:idx_rule_idx;comment:'规则索引300-316'" json:"rule_idx"`
Args []int `gorm:"type:jsonb;comment:'规则参数JSON数组对应RuleBase.args'" json:"args"`
Desc string `gorm:"type:varchar(255);default:'';comment:'规则描述'" json:"desc"`
}
// TableName 指定表名
func (*FightRule) TableName() string {
return TableNameFightRule
}
// GroupName 指定表分组
func (*FightRule) GroupName() string {
return "default"
}
// NewFightRule 创建战胜规则表实例
func NewFightRule() *FightRule {
return &FightRule{
Model: cool.NewModel(),
}
}
func init() {
cool.CreateTable(&FightRule{})
}

View File

@@ -53,7 +53,7 @@ type MapNode struct {
//完成后的脚本回调比如战胜和击败绑定不同的任务ID以及剧情绑定不同的ID
//回调通boss打完给前端发送固定事件
//PlotFinishScript string `gorm:"type:text;comment:'剧情完成后脚本回调'" json:"plot_finish_script" description:"剧情完成后脚本回调"`
Rule []uint32 `gorm:"type:jsonb; ;comment:'战胜规则'" json:"rule"`
BossIds []uint32 `gorm:"type:jsonb; ;comment:'塔层BOSS ID列表'" json:"boss_ids"`
}

View File

@@ -0,0 +1,41 @@
package service
import (
"blazing/cool"
"blazing/modules/config/model"
)
type FightRuleService struct {
*cool.Service
}
// GetByRuleIdx 根据规则索引查询规则配置
func (s *FightRuleService) GetByRuleIdx(ruleIdx uint32) *model.FightRule {
var rule *model.FightRule
dbm_notenable(s.Model).Where("rule_idx", ruleIdx).Scan(&rule)
return rule
}
// GetByRuleIdxs 根据规则索引批量查询规则配置
func (s *FightRuleService) GetByRuleIdxs(ruleIdxs []uint32) []model.FightRule {
var rules []model.FightRule
dbm_notenable(s.Model).WhereIn("rule_idx", ruleIdxs).Scan(&rules)
return rules
}
func NewFightRuleService() *FightRuleService {
return &FightRuleService{
&cool.Service{
Model: model.NewFightRule(),
UniqueKey: map[string]string{"idx_rule_idx": "规则索引不能重复"},
PageQueryOp: &cool.QueryOp{
KeyWordField: []string{"desc"},
FieldEQ: []string{"rule_idx"},
},
ListQueryOp: &cool.QueryOp{
KeyWordField: []string{"desc"},
FieldEQ: []string{"rule_idx"},
},
},
}
}