refactor(item_use): 重构道具使用逻辑并提取常量

- 添加 ItemDefaultLeftTime 和 ItemNeuronID 常量定义
- 使用结构体字面量初始化 itemInfo,替换手动赋值
- 将神经元道具处理逻辑提取为独立方法 handleNeuronItem
- 将普通宠物道具处理逻辑提取为独立方法 handleRegularPetItem
- 优化 UsePetItemOutOfFight 方法的条件判断结构

fix(NewSeIdx_700): 修复Boss技能伤害计算参数错误

- 修正 Skill_Useed 方法中 Div 方法的参数索引,从 Args()[1]
This commit is contained in:
2025-12-31 02:44:14 +08:00
parent 4fa60266f1
commit eebf46cc03
4 changed files with 101 additions and 83 deletions

View File

@@ -0,0 +1,48 @@
package model
import (
"blazing/cool"
)
// 表名常量定义:任务配置表
const (
TableNameTaskConfig = "task_config" // 任务配置表记录任务ID、类型、目标、奖励、状态等核心信息
)
// TaskConfig 任务核心配置模型
type TaskConfig struct {
*cool.Model
// 核心字段
TaskId uint32 `gorm:"not null;uniqueIndex;comment:'任务唯一ID'" json:"task_id" description:"任务唯一ID"`
TaskName string `gorm:"not null;size:128;comment:'任务名称'" json:"task_name" description:"任务名称"`
// 奖励配置
ItemRewardIds []uint32 `gorm:"not null;type:json;default:'[]';comment:'绑定奖励物品ID数组关联item_gift表主键'" json:"item_reward_ids" description:"奖励物品数组"`
ElfRewardIds []uint32 `gorm:"not null;type:json;default:'[]';comment:'绑定奖励精灵ID数组关联config_pet_boss表主键'" json:"elf_reward_ids" description:"奖励精灵数组"`
// 任务状态和周期
IsEnabled uint32 `gorm:"not null;default:1;comment:'是否启用该任务0-禁用 1-启用)'" json:"is_enabled" description:"是否启用"`
Remark string `gorm:"size:512;default:'';comment:'任务备注'" json:"remark" description:"备注信息"`
}
// -------------------------- 核心配套方法(遵循项目规范)--------------------------
func (*TaskConfig) TableName() string {
return TableNameTaskConfig
}
func (*TaskConfig) GroupName() string {
return "default"
}
func NewTaskConfig() *TaskConfig {
return &TaskConfig{
Model: cool.NewModel(),
}
}
// -------------------------- 表结构自动同步 --------------------------
func init() {
cool.CreateTable(&TaskConfig{})
}

View File

@@ -2,8 +2,6 @@ package model
import (
"blazing/cool"
"errors"
"fmt"
"time"
)
@@ -56,59 +54,6 @@ func NewCDKConfig() *CDKConfig {
}
}
// -------------------------- 业务操作方法(适配可兑换次数 != 0 需求)--------------------------
// SetExchangeTotalCount 设置总可兑换次数确保不为0满足where !=0 约束)
func (c *CDKConfig) SetExchangeTotalCount(total uint32) error {
if total == 0 {
return errors.New("CDK总可兑换次数不能为0请设置大于0的数值")
}
// 若剩余次数大于新的总次数,同步更新剩余次数为总次数
if c.ExchangeRemainCount > total {
c.ExchangeRemainCount = total
}
return nil
}
// DeductRemainCount 扣减剩余可兑换次数(扣减后仍保证非负,且仅当剩余次数>0时可扣减
func (c *CDKConfig) DeductRemainCount(deductNum uint32) error {
if deductNum <= 0 {
return errors.New("扣减的兑换次数必须大于0")
}
// 校验剩余次数是否大于0满足where !=0 前置条件)
if c.ExchangeRemainCount == 0 {
return errors.New("CDK剩余可兑换次数为0无法继续扣减")
}
// 校验扣减后是否为负
if c.ExchangeRemainCount < deductNum {
return fmt.Errorf("剩余可兑换次数不足(当前剩余%d需扣减%d", c.ExchangeRemainCount, deductNum)
}
c.ExchangeRemainCount -= deductNum
return nil
}
// IsAvailable 判断CDK是否可用剩余次数!=0 + 启用 + 在有效期内)
func (c *CDKConfig) IsAvailable() (bool, string) {
now := time.Now()
// 校验剩余次数是否!=0
if c.ExchangeRemainCount == 0 {
return false, "CDK剩余可兑换次数为0已失效"
}
// 校验是否启用
if c.IsEnabled == 0 {
return false, "CDK已被禁用无法使用"
}
// 校验有效期
if now.Before(c.ValidStartTime) {
return false, "CDK尚未到有效时间暂无法使用"
}
if now.After(c.ValidEndTime) {
return false, "CDK已过有效期已失效"
}
return true, "CDK可用"
}
// -------------------------- 表结构自动同步 --------------------------
func init() {
cool.CreateTable(&CDKConfig{})