diff --git a/src/server/conf/limited_time_event/limited_time_event_cfg.go b/src/server/conf/limited_time_event/limited_time_event_cfg.go index 99efcf8b..51a49df7 100644 --- a/src/server/conf/limited_time_event/limited_time_event_cfg.go +++ b/src/server/conf/limited_time_event/limited_time_event_cfg.go @@ -1,6 +1,7 @@ package limitedTimeEventCfg import ( + "math" "server/game/mod/item" GoUtil "server/game_util" "server/gamedata" @@ -146,18 +147,32 @@ func GetSenceJackpotReward(Id int) []*item.Item { } // 获取连击快手奖励 -func GetFastProduceReward(Times, Energy int) []*item.Item { +func GetFastProduceReward(Energy int) []*item.Item { data, err := gamedata.GetData(CFG_LIMITED_TIME_EVENT_FAST) if err != nil { log.Debug("GetSceneDashReward err:%v", err) return nil } - for _, v := range data { - if Times == gamedata.GetIntValue(v, "Times") && Energy <= gamedata.GetIntValue(v, "Max") && Energy >= gamedata.GetIntValue(v, "Min") { - return gamedata.GetItemList(v, "Items") - } + if len(data) == 0 { + return nil } - return nil + // Convert map to slice for sorting + type sortData struct { + Id string + Energy float64 + } + sortedList := make([]sortData, 0) + energy := float64(Energy) / 10.0 + for k, v := range data { + dataEnergy := gamedata.GetFloatValue(v, "EnergyValue") + sortedList = append(sortedList, sortData{k, math.Abs(energy - dataEnergy)}) + } + // Sort by Energy in ascending order + sort.Slice(sortedList, func(i, j int) bool { + return sortedList[i].Energy < sortedList[j].Energy + }) + + return gamedata.GetItemList(data[sortedList[0].Id], "Items") } // 获取连击快手最大次数 diff --git a/src/server/game/gm_handler.go b/src/server/game/gm_handler.go index 88126e6b..f7ce991e 100644 --- a/src/server/game/gm_handler.go +++ b/src/server/game/gm_handler.go @@ -581,7 +581,12 @@ func ReqGmCommand_(player *Player, Command string) error { player.AddPlayroomUpvote(100100129) i := player.GetPlayroomUpvote(100100129) log.Debug("debug upvote:%d", i) - + case "addLimitEvent": + Id, _ := strconv.Atoi(arg[1]) + Cd, _ := strconv.Atoi(arg[2]) + LimitedTimeEventMod := player.PlayMod.getLimitedTimeEventMod() + LimitedTimeEventMod.AddEvent(Id, Cd) + player.PushClientRes(LimitedTimeEventMod.BackData()) default: return fmt.Errorf("Player %d ReqGmCommand:%v not found", player.M_DwUin, arg) } 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 a4b98544..69995d02 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 @@ -316,24 +316,17 @@ func (l *LimitedTimeEventMod) GetSceneDashReward() (int, []*item.Item) { } // 获取连击快手奖励 -func (l *LimitedTimeEventMod) GetFastProduceReward(Energy int) ([]*item.Item, int64, int, error) { +func (l *LimitedTimeEventMod) GetFastProduceReward(Energy int) ([]*item.Item, error) { Event, ok := l.EventList[EVENT_TYPE_FAST_PRODUCE] if !ok { - return nil, 0, 0, fmt.Errorf("FastProduce event not exist") + return nil, fmt.Errorf("FastProduce event not exist") } Now := GoUtil.Now() if Now < GoUtil.Int64(Event.Info["NextPlay"]) { - return nil, 0, 0, fmt.Errorf("FastProduce CD") + return nil, fmt.Errorf("FastProduce CD") } - Times := GoUtil.Int(Event.Info["Times"]) - Times++ - Event.Info["Times"] = Times - MaxTimes := limitedTimeEventCfg.GetFastProduceMaxTimes() - Times = min(Times, MaxTimes) - CD := limitedTimeEventCfg.GetFastCD() - Event.Info["NextPlay"] = GoUtil.Now() + int64(CD) // CD5分钟 - return limitedTimeEventCfg.GetFastProduceReward(Times, Energy), GoUtil.Now() + int64(CD), Event.Info["Times"].(int), nil + return limitedTimeEventCfg.GetFastProduceReward(Energy), nil } func (l *LimitedTimeEventMod) ResetFastProduceCD() { diff --git a/src/server/game/register_network_func.go b/src/server/game/register_network_func.go index 3b060b86..d826b726 100644 --- a/src/server/game/register_network_func.go +++ b/src/server/game/register_network_func.go @@ -1710,7 +1710,7 @@ func ReqFastProduceReward(player *Player, buf []byte) error { return err } LimitedTimeEventMod := player.PlayMod.getLimitedTimeEventMod() - itemList, EndTime, Times, err := LimitedTimeEventMod.GetFastProduceReward(int(req.Energy)) + itemList, err := LimitedTimeEventMod.GetFastProduceReward(int(req.Energy)) if err != nil { player.SendErrClienRes(&msg.ResFastProduceReward{ Code: msg.RES_CODE_FAIL, @@ -1730,14 +1730,10 @@ func ReqFastProduceReward(player *Player, buf []byte) error { player.TeLog("ReqFastProduceReward", map[string]interface{}{ "energy": int(req.Energy), "item_list": itemList, - "end_time": EndTime, - "times": Times, }) player.PushClientRes(LimitedTimeEventMod.BackData()) player.PushClientRes(&msg.ResFastProduceReward{ - Code: msg.RES_CODE_SUCCESS, - EndTime: EndTime, - Num: int32(Times), + Code: msg.RES_CODE_SUCCESS, }) return nil } diff --git a/src/server/game/unit_test.go b/src/server/game/unit_test.go index 746caa13..ffa0d114 100644 --- a/src/server/game/unit_test.go +++ b/src/server/game/unit_test.go @@ -185,9 +185,9 @@ func UnitLimitProgress(p *Player) error { func UnitLimitedTimeEvent(p *Player) error { LimitedTimeEventMod := p.PlayMod.getLimitedTimeEventMod() - + ChessMod := p.PlayMod.getChessMod() mergeList := []int{246, 15} - AddItem := LimitedTimeEventMod.GetChestReward(mergeList) + AddItem := LimitedTimeEventMod.GetChestReward(mergeList, ChessMod.GetStarEmitList()) fmt.Print(AddItem) return nil } diff --git a/src/server/test/limit_test.go b/src/server/test/limit_test.go index add18e06..9d10a98f 100644 --- a/src/server/test/limit_test.go +++ b/src/server/test/limit_test.go @@ -2,6 +2,7 @@ package test import ( "server/game" + limitedTimeEvent "server/game/mod/limited_time_event" "testing" ) @@ -14,3 +15,16 @@ func TestMetroRain(t *testing.T) { rewards := LimitEventMod.GetMeteorReward([]int{1, 22, 3}, ChessMod.GetStarEmitList()) t.Logf("rewards: %v", rewards) } + +func TestFast(t *testing.T) { + p := new(game.Player) + p.InitPlayer("3625212") + LimitEventMod := p.GetLimitEventMod() + LimitEventMod.AddEvent(limitedTimeEvent.EVENT_TYPE_FAST_PRODUCE, 60) + items, err := LimitEventMod.GetFastProduceReward(50) + if err != nil { + t.Errorf("GetFastProduceReward error: %v", err) + return + } + t.Logf("Fast produce items: %v", items) +}