From a192ffa6bcef3879f522def6c0aa2d4dbd6ab285 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=94=E5=BF=B5?= <12574910+72wo@users.noreply.github.com> Date: Sat, 7 Mar 2026 01:30:04 +0800 Subject: [PATCH] =?UTF-8?q?```=20feat(space):=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E7=A9=BA=E9=97=B4=E4=BF=A1=E6=81=AF=E7=BB=93=E6=9E=84=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E4=BA=8B=E4=BB=B6=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 替换天气字段为事件配置结构体 - 添加事件匹配逻辑验证天气和时间范围 - 实现事件驱动的BOSS显示控制机制 - 引入Event类型用于管理活动配置 ``` --- logic/service/space/info/info.go | 4 +++- logic/service/space/space.go | 41 ++++++++++++++++++++++---------- 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/logic/service/space/info/info.go b/logic/service/space/info/info.go index 33046fe65..ee41e7c7c 100644 --- a/logic/service/space/info/info.go +++ b/logic/service/space/info/info.go @@ -2,6 +2,7 @@ package info import ( "blazing/common/data" + configm "blazing/modules/config/model" "blazing/modules/player/model" "github.com/creasty/defaults" @@ -44,7 +45,8 @@ type MapBossInfo struct { PosInfo []model.Pos `struc:"skip"` MaxHP int `struc:"skip"` PosIndex uint32 `struc:"skip"` - Wer []int32 `struc:"skip"` + //Wer []int32 `struc:"skip"` + Event configm.Event `struc:"skip"` } // 这里存储星球的map diff --git a/logic/service/space/space.go b/logic/service/space/space.go index fbef190e4..0771c2865 100644 --- a/logic/service/space/space.go +++ b/logic/service/space/space.go @@ -208,7 +208,9 @@ func (ret *Space) init() { Hp: v.HP, PosInfo: ParseCoordinateString(v.Pos), MaxHP: int(v.HP), - Wer: v.Weather, + } + if v.Event != nil { + info.Event = *v.Event } ret.MapBossSInfo.INFO = append(ret.MapBossSInfo.INFO, info) @@ -222,26 +224,41 @@ func (ret *Space) init() { } +} +func (p *Space) IsMatch(t model.Event) bool { + _, ok := lo.Find(t.Weather, func(item int32) bool { + return item == int32(p.MapBossSInfo.Wer) + }) + if !ok { + // 不在同一天气下 + return false + + } + if t.StartTime != "" && t.EndTime != "" { + ok, _ := utils.IsCurrentTimeInRange(t.StartTime, t.EndTime) + if !ok { + return false + } + } + + return true + } func (ret *Space) GenBoss() { for i := 0; i < len(ret.MapBossSInfo.INFO); i++ { + if !ret.IsMatch(ret.MapBossSInfo.INFO[i].Event) { + ret.MapBossSInfo.INFO[i].IsShow = 0 + continue + } s := len(ret.MapBossSInfo.INFO[i].PosInfo) if s != 0 { ret.MapBossSInfo.INFO[i].Pos = ret.MapBossSInfo.INFO[i].PosInfo[(grand.Intn(s-1)+1+int(ret.MapBossSInfo.INFO[i].PosIndex))%s] } - _, ok := lo.Find(ret.MapBossSInfo.INFO[i].Wer, func(item int32) bool { - return item == ret.MapBossSInfo.Wer - }) - if ok { - ret.MapBossSInfo.INFO[i].IsShow = 1 - if ret.IsChange { - ret.MapBossSInfo.INFO[i].IsShow = 2 - } - } else { - ret.MapBossSInfo.INFO[i].IsShow = 0 - + ret.MapBossSInfo.INFO[i].IsShow = 1 + if ret.IsChange { + ret.MapBossSInfo.INFO[i].IsShow = 2 } }