diff --git a/src/server/game/message_mgr.go b/src/server/game/message_mgr.go index 4dc21d3b..eddcd85a 100644 --- a/src/server/game/message_mgr.go +++ b/src/server/game/message_mgr.go @@ -467,8 +467,6 @@ func (p *WorkerPool) spawnWorker() { // Worker 工作函数,监听其子上下文以便单独停止 func (p *WorkerPool) worker(ctx context.Context, id int) { defer p.wg.Done() - log.Debug("Worker %d started", id) - for { select { case <-ctx.Done(): diff --git a/src/server/game/mod/limited_time_event/limited_time_event.go b/src/server/game/mod/limited_time_event/limited_time_event.go index 218c8ae3..a4b98544 100644 --- a/src/server/game/mod/limited_time_event/limited_time_event.go +++ b/src/server/game/mod/limited_time_event/limited_time_event.go @@ -6,6 +6,7 @@ import ( limitedTimeEventCfg "server/conf/limited_time_event" mergeDataCfg "server/conf/merge_data" "server/game/mod/item" + "server/game/mod/order" GoUtil "server/game_util" "server/msg" ) @@ -268,30 +269,38 @@ func (l *LimitedTimeEventMod) ProgressBackData() *msg.ResLimitEventProgress { } // 获取流星雨奖励 -func (l *LimitedTimeEventMod) GetMeteorReward(MergeList []int) []*item.Item { - MaxLv := 0 - Star := 0 +func (l *LimitedTimeEventMod) GetMeteorReward(MergeList, EmitList []int) []*item.Item { + eneryg := 0 for _, v := range MergeList { ChessLv := mergeDataCfg.GetLvById(v) - Star += mergeDataCfg.GetStarById(v) - if ChessLv > MaxLv { - MaxLv = ChessLv + Color := mergeDataCfg.GetColorById(v) + EmitId := order.GetEmitByColor(EmitList, Color) + if EmitId == 0 { + continue } + NewChessLv := mergeDataCfg.DynamicLevRev(ChessLv, EmitId, Color) + eneryg += int(math.Pow(2, float64(NewChessLv))) } - Add := limitedTimeEventCfg.GetMeteorAdd(MaxLv) - NewStar := int(float64(Star) * (float64(Add) / 100)) - NewStar = max(NewStar, 1) + + NewStar := int(max(math.Ceil(float64(eneryg)/0.36*0.1), 1)) return []*item.Item{{Id: item.ITEM_STAR_ID, Num: NewStar}} } // 获取宝箱雨奖励 -func (l *LimitedTimeEventMod) GetChestReward(MergeList []int) []*item.Item { - Star := 0 +func (l *LimitedTimeEventMod) GetChestReward(MergeList, EmitList []int) []*item.Item { + eneryg := 0 for _, v := range MergeList { - Star += mergeDataCfg.GetStarById(v) + ChessLv := mergeDataCfg.GetLvById(v) + Color := mergeDataCfg.GetColorById(v) + EmitId := order.GetEmitByColor(EmitList, Color) + if EmitId == 0 { + continue + } + NewChessLv := mergeDataCfg.DynamicLevRev(ChessLv, EmitId, Color) + eneryg += int(math.Pow(2, float64(NewChessLv))) } - return limitedTimeEventCfg.GetChestReward(Star) + return limitedTimeEventCfg.GetChestReward(eneryg) } // 获取场景冲刺奖励 @@ -434,17 +443,18 @@ func (l *LimitedTimeEventMod) AddCatTrickEnergy(Energy int) { } func (l *LimitedTimeEventMod) SubPaybackDay() error { - if l.EventList[EVENT_TYPE_PAYBACK_DAY] == nil { - return fmt.Errorf("PaybackDay event not exist") - } - d := l.EventList[EVENT_TYPE_PAYBACK_DAY].D.(*PaybackDay) - if d.count <= 0 { - return fmt.Errorf("PaybackDay count is 0") - } - d.count-- - if d.count <= 0 { - delete(l.EventList, EVENT_TYPE_PAYBACK_DAY) - } + // 2026.1.20 改版 不限制次数 + // if l.EventList[EVENT_TYPE_PAYBACK_DAY] == nil { + // return fmt.Errorf("PaybackDay event not exist") + // } + // d := l.EventList[EVENT_TYPE_PAYBACK_DAY].D.(*PaybackDay) + // if d.count <= 0 { + // return fmt.Errorf("PaybackDay count is 0") + // } + // d.count-- + // if d.count <= 0 { + // delete(l.EventList, EVENT_TYPE_PAYBACK_DAY) + // } return nil } @@ -457,8 +467,9 @@ func (l *LimitedTimeEventMod) GetCatTrickReward() ([]*item.Item, error) { return nil, fmt.Errorf("CatTrick energy not enough") } d.Energy -= 100 + // TODO 放到配置中 return []*item.Item{ - {Id: item.ITEM_DIAMOND_ID, Num: 1}, + {Id: item.ITEM_DIAMOND_ID, Num: 5}, }, nil } diff --git a/src/server/game/mod_factory.go b/src/server/game/mod_factory.go index 4d9187e6..3b8c07bb 100644 --- a/src/server/game/mod_factory.go +++ b/src/server/game/mod_factory.go @@ -3,6 +3,7 @@ package game import ( "server/game/mod/chess" "server/game/mod/decorate" + limitedTimeEvent "server/game/mod/limited_time_event" ) func (p *Player) GetChessMod() *chess.ChessBorad { @@ -12,3 +13,7 @@ func (p *Player) GetChessMod() *chess.ChessBorad { func (p *Player) GetDecorateMod() *decorate.Decorate { return p.PlayMod.getDecorateMod() } + +func (p *Player) GetLimitEventMod() *limitedTimeEvent.LimitedTimeEventMod { + return p.PlayMod.getLimitedTimeEventMod() +} diff --git a/src/server/game/register_network_func.go b/src/server/game/register_network_func.go index f1461d49..3b060b86 100644 --- a/src/server/game/register_network_func.go +++ b/src/server/game/register_network_func.go @@ -290,7 +290,7 @@ func ReqRewardOrder(player *Player, buf []byte) error { } } if LimitedTimeEventMod.CheckExist(limitedTimeEvent.EVENT_TYPE_METEOR_SHOW) { //流星雨活动 - AddItem := LimitedTimeEventMod.GetMeteorReward(mergeList) + AddItem := LimitedTimeEventMod.GetMeteorReward(mergeList, ChessMod.GetStarEmitList()) if len(AddItem) > 0 { player.TeLog("time_limited_event_action", map[string]interface{}{ "event_type": limitedTimeEventCfg.GetEventName(limitedTimeEvent.EVENT_TYPE_METEOR_SHOW), @@ -338,7 +338,7 @@ func ReqRewardOrder(player *Player, buf []byte) error { } if LimitedTimeEventMod.CheckExist(limitedTimeEvent.EVENT_TYPE_CHEST_RAIN) { //宝箱雨活动 - ChestRainItems := LimitedTimeEventMod.GetChestReward(mergeList) + ChestRainItems := LimitedTimeEventMod.GetChestReward(mergeList, ChessMod.GetStarEmitList()) player.args["ResItemPopId"] = req.OrderId err = player.HandleItem(ChestRainItems, msg.ITEM_POP_LABEL_LimitEventChestRain.String()) if err != nil { diff --git a/src/server/test/limit_test.go b/src/server/test/limit_test.go new file mode 100644 index 00000000..add18e06 --- /dev/null +++ b/src/server/test/limit_test.go @@ -0,0 +1,16 @@ +package test + +import ( + "server/game" + "testing" +) + +func TestMetroRain(t *testing.T) { + // 3625212 + p := new(game.Player) + p.InitPlayer("3625212") + ChessMod := p.GetChessMod() + LimitEventMod := p.GetLimitEventMod() + rewards := LimitEventMod.GetMeteorReward([]int{1, 22, 3}, ChessMod.GetStarEmitList()) + t.Logf("rewards: %v", rewards) +}