feat(pet): 实现精灵融合功能并优化相关逻辑

新增精灵融合接口及处理逻辑,支持主副精灵融合生成新精灵,并消耗金币与材料。
同时调整了战斗技能选择流程、修复地图热度统计安全问题以及完善宠物删除机制。

- 添加 `PetFusion` 控制器方法实现融合核心逻辑
- 新增 `C2S_PetFusion` 和 `PetFusionInfo` 结构体用于通信
- 修正战斗中技能随机选取后立即返回的问题
- 修复太空站进入/离开时对地图热度的并发访问风险
-
This commit is contained in:
2025-11-26 01:33:48 +08:00
parent f682abe537
commit f76587f952
14 changed files with 198 additions and 18 deletions

View File

@@ -0,0 +1,45 @@
package model
import (
"blazing/cool"
)
const (
TableNamePetFusionConfig = "pet_fusion_config" // 宠物融合配置表(尼尔/闪皮融合规则)
)
// PetFusionConfig 宠物融合配置模型(对应尼尔/闪皮融合卡鲁/闪尼的规则)
type PetFusionConfig struct {
*cool.Model
MainPetID int32 `gorm:"not null;comment:'主精灵ID尼尔'" json:"main_pet_id"`
AuxPetID int32 `gorm:"not null;comment:'副精灵ID闪皮'" json:"aux_pet_id"`
FusionMaterial1 int32 `gorm:"not null;default:0;comment:'融合材料1编号'" json:"fusion_material1"`
FusionMaterial2 int32 `gorm:"not null;default:0;comment:'融合材料2编号'" json:"fusion_material2"`
FusionMaterial3 int32 `gorm:"not null;default:0;comment:'融合材料3编号'" json:"fusion_material3"`
FusionMaterial4 int32 `gorm:"not null;default:0;comment:'融合材料4编号'" json:"fusion_material4"`
FusionProbability float64 `gorm:"not null;comment:'融合成功概率百分比0-100'" json:"fusion_probability"`
ResultPetID int32 `gorm:"not null;comment:'融合结果精灵ID卡鲁/闪尼)'" json:"result_pet_id"`
}
// TableName PetFusionConfig's table name
func (*PetFusionConfig) TableName() string {
return TableNamePetFusionConfig
}
// GroupName PetFusionConfig's table group
func (*PetFusionConfig) GroupName() string {
return "default" // 与原模型保持一致的分组名
}
// NewPetFusionConfig create a new PetFusionConfig
func NewPetFusionConfig() *PetFusionConfig {
return &PetFusionConfig{
Model: cool.NewModel(),
}
}
// 初始化表结构(与原模型保持一致的初始化方式)
func init() {
cool.CreateTable(&PetFusionConfig{})
}

View File

@@ -36,7 +36,7 @@ func (s *PetService) PetInfo_One_exec(cachetime uint32, t func(*model.PetEX)) {
}
tt.Data.CatchTime = tt.CatchTime
t(&tt)
_,err := m.OnConflict("catch_time").Update(tt)
_, err := m.OnConflict("catch_time").Update(tt)
if err != nil {
panic(err)
}
@@ -50,6 +50,11 @@ func (s *PetService) PetInfo_One(cachetime uint32) model.PetEX {
tt.Data.CatchTime = tt.CatchTime
return tt
}
func (s *PetService) Pet_del(cachetime uint32) {
cool.DBM(s.Model).Where("player_id", s.userid).Where("catch_time", cachetime).Delete()
}
func (s *PetService) PetAdd(y model.PetInfo) {
for {

View File

@@ -0,0 +1,18 @@
package service
import (
"blazing/cool"
"blazing/modules/blazing/model"
)
type FusionService struct {
*cool.Service
}
func NewFusionService() *FusionService {
return &FusionService{
&cool.Service{
Model: model.NewPetFusionConfig(),
},
}
}