Files
bl/modules/config/model/tower_500.go
昔念 cf7736a3e7 feat(user-talk): 优化聊天功能中的物品奖励逻辑
重构 Talk 方法中物品奖励的获取方式,使用新的配置服务以支持多物品 ID 奖励机制。
移除了对 github.com/gogf/gf/v2/util/grand 包的依赖,改为通过服务获取实际物品数量。

同时更新了相关模型定义:
- 修改 MineralCollectionConfig 中 ItemID 为数组形式以支持多个物品配置
- 调整 ItemGift 模型字段
2025-12-22 19:04:16 +08:00

144 lines
5.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package model
import (
"blazing/cool"
"errors"
"fmt"
)
// 表名常量定义:试炼之塔配置表
const (
TableNameTrialTowerConfig = "trial_tower_config" // 试炼之塔配置表核心记录层数、BOSS数组、奖励物品/精灵)
)
type BaseTowerConfig struct {
*cool.Model `json:"-" gorm:"embedded"` // 嵌入通用ModelID/创建时间/更新时间不参与json序列化
// 核心必填字段(与勇者之塔完全一致,仅表名和标识不同)
TowerLevel uint32 `gorm:"not null;default:0;uniqueIndex;comment:'试炼之塔层数(唯一标识每层配置)'" json:"tower_level" description:"试炼之塔层数"`
BossIds []uint32 `gorm:"not null;type:json;default:'[]';comment:'绑定BOSS ID数组关联config_pet_boss表主键'" json:"boss_ids" description:"绑定BOSS数组"`
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:"备注信息"`
// ItemGift []ItemGift `orm:"with:item_id=id"`
}
func NewBaseTowerConfig() BaseTowerConfig {
return BaseTowerConfig{
Model: cool.NewModel(),
}
}
// TrialTowerConfig 试炼之塔核心配置模型(与勇者之塔结构完全一致,无额外专属字段)
type TrialTowerConfig struct {
BaseTowerConfig
}
// -------------------------- 核心配套方法(与勇者之塔完全一致)--------------------------
func (*TrialTowerConfig) TableName() string {
return TableNameTrialTowerConfig
}
func (*TrialTowerConfig) GroupName() string {
return "default"
}
func NewTrialTowerConfig() *TrialTowerConfig {
return &TrialTowerConfig{
BaseTowerConfig: NewBaseTowerConfig(),
}
}
// -------------------------- 业务操作方法(与勇者之塔逻辑完全一致,仅模型标识不同)--------------------------
// AddBossId 为试炼之塔添加单个BOSS ID避免重复
func (t *TrialTowerConfig) AddBossId(bossId uint32) error {
if bossId == 0 {
return errors.New("BOSS ID不能为空不能为0")
}
for _, id := range t.BossIds {
if id == bossId {
return fmt.Errorf("BOSS ID%d已绑定试炼之塔%d层无需重复添加", bossId, t.TowerLevel)
}
}
t.BossIds = append(t.BossIds, bossId)
return nil
}
// AddItemRewardId 为试炼之塔添加单个奖励物品ID避免重复
func (t *TrialTowerConfig) AddItemRewardId(itemId uint32) error {
if itemId == 0 {
return errors.New("奖励物品ID不能为空不能为0")
}
for _, id := range t.ItemRewardIds {
if id == itemId {
return fmt.Errorf("奖励物品ID%d已绑定试炼之塔%d层无需重复添加", itemId, t.TowerLevel)
}
}
t.ItemRewardIds = append(t.ItemRewardIds, itemId)
return nil
}
// AddElfRewardId 为试炼之塔添加单个奖励精灵ID避免重复
func (t *TrialTowerConfig) AddElfRewardId(elfId uint32) error {
if elfId == 0 {
return errors.New("奖励精灵ID不能为空不能为0")
}
for _, id := range t.ElfRewardIds {
if id == elfId {
return fmt.Errorf("奖励精灵ID%d已绑定试炼之塔%d层无需重复添加", elfId, t.TowerLevel)
}
}
t.ElfRewardIds = append(t.ElfRewardIds, elfId)
return nil
}
// RemoveBossId 从试炼之塔移除单个BOSS ID
func (t *TrialTowerConfig) RemoveBossId(bossId uint32) error {
if bossId == 0 {
return errors.New("BOSS ID不能为空不能为0")
}
for i, id := range t.BossIds {
if id == bossId {
t.BossIds = append(t.BossIds[:i], t.BossIds[i+1:]...)
return nil
}
}
return fmt.Errorf("试炼之塔%d层未绑定BOSS ID%d无法移除", t.TowerLevel, bossId)
}
// RemoveItemRewardId 从试炼之塔移除单个奖励物品ID
func (t *TrialTowerConfig) RemoveItemRewardId(itemId uint32) error {
if itemId == 0 {
return errors.New("奖励物品ID不能为空不能为0")
}
for i, id := range t.ItemRewardIds {
if id == itemId {
t.ItemRewardIds = append(t.ItemRewardIds[:i], t.ItemRewardIds[i+1:]...)
return nil
}
}
return fmt.Errorf("试炼之塔%d层未绑定奖励物品ID%d无法移除", t.TowerLevel, itemId)
}
// RemoveElfRewardId 从试炼之塔移除单个奖励精灵ID
func (t *TrialTowerConfig) RemoveElfRewardId(elfId uint32) error {
if elfId == 0 {
return errors.New("奖励精灵ID不能为空不能为0")
}
for i, id := range t.ElfRewardIds {
if id == elfId {
t.ElfRewardIds = append(t.ElfRewardIds[:i], t.ElfRewardIds[i+1:]...)
return nil
}
}
return fmt.Errorf("试炼之塔%d层未绑定奖励精灵ID%d无法移除", t.TowerLevel, elfId)
}
// -------------------------- 表结构自动同步 --------------------------
func init() {
cool.CreateTable(&TrialTowerConfig{})
}