限时事件优化,连击快手
This commit is contained in:
parent
dd6fdde8ce
commit
edceb1cf1e
@ -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")
|
||||
}
|
||||
|
||||
// 获取连击快手最大次数
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
@ -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() {
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user