限时事件优化,连击快手

This commit is contained in:
hahwu 2026-01-21 11:28:54 +08:00
parent dd6fdde8ce
commit edceb1cf1e
6 changed files with 49 additions and 26 deletions

View File

@ -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")
}
// 获取连击快手最大次数

View File

@ -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)
}

View File

@ -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() {

View File

@ -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
}

View File

@ -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
}

View File

@ -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)
}