限时事件优化,连击快手
This commit is contained in:
parent
dd6fdde8ce
commit
edceb1cf1e
@ -1,6 +1,7 @@
|
|||||||
package limitedTimeEventCfg
|
package limitedTimeEventCfg
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"math"
|
||||||
"server/game/mod/item"
|
"server/game/mod/item"
|
||||||
GoUtil "server/game_util"
|
GoUtil "server/game_util"
|
||||||
"server/gamedata"
|
"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)
|
data, err := gamedata.GetData(CFG_LIMITED_TIME_EVENT_FAST)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Debug("GetSceneDashReward err:%v", err)
|
log.Debug("GetSceneDashReward err:%v", err)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
for _, v := range data {
|
if len(data) == 0 {
|
||||||
if Times == gamedata.GetIntValue(v, "Times") && Energy <= gamedata.GetIntValue(v, "Max") && Energy >= gamedata.GetIntValue(v, "Min") {
|
return nil
|
||||||
return gamedata.GetItemList(v, "Items")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
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)
|
player.AddPlayroomUpvote(100100129)
|
||||||
i := player.GetPlayroomUpvote(100100129)
|
i := player.GetPlayroomUpvote(100100129)
|
||||||
log.Debug("debug upvote:%d", i)
|
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:
|
default:
|
||||||
return fmt.Errorf("Player %d ReqGmCommand:%v not found", player.M_DwUin, arg)
|
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]
|
Event, ok := l.EventList[EVENT_TYPE_FAST_PRODUCE]
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, 0, 0, fmt.Errorf("FastProduce event not exist")
|
return nil, fmt.Errorf("FastProduce event not exist")
|
||||||
}
|
}
|
||||||
|
|
||||||
Now := GoUtil.Now()
|
Now := GoUtil.Now()
|
||||||
if Now < GoUtil.Int64(Event.Info["NextPlay"]) {
|
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"])
|
return limitedTimeEventCfg.GetFastProduceReward(Energy), nil
|
||||||
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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *LimitedTimeEventMod) ResetFastProduceCD() {
|
func (l *LimitedTimeEventMod) ResetFastProduceCD() {
|
||||||
|
|||||||
@ -1710,7 +1710,7 @@ func ReqFastProduceReward(player *Player, buf []byte) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
LimitedTimeEventMod := player.PlayMod.getLimitedTimeEventMod()
|
LimitedTimeEventMod := player.PlayMod.getLimitedTimeEventMod()
|
||||||
itemList, EndTime, Times, err := LimitedTimeEventMod.GetFastProduceReward(int(req.Energy))
|
itemList, err := LimitedTimeEventMod.GetFastProduceReward(int(req.Energy))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
player.SendErrClienRes(&msg.ResFastProduceReward{
|
player.SendErrClienRes(&msg.ResFastProduceReward{
|
||||||
Code: msg.RES_CODE_FAIL,
|
Code: msg.RES_CODE_FAIL,
|
||||||
@ -1730,14 +1730,10 @@ func ReqFastProduceReward(player *Player, buf []byte) error {
|
|||||||
player.TeLog("ReqFastProduceReward", map[string]interface{}{
|
player.TeLog("ReqFastProduceReward", map[string]interface{}{
|
||||||
"energy": int(req.Energy),
|
"energy": int(req.Energy),
|
||||||
"item_list": itemList,
|
"item_list": itemList,
|
||||||
"end_time": EndTime,
|
|
||||||
"times": Times,
|
|
||||||
})
|
})
|
||||||
player.PushClientRes(LimitedTimeEventMod.BackData())
|
player.PushClientRes(LimitedTimeEventMod.BackData())
|
||||||
player.PushClientRes(&msg.ResFastProduceReward{
|
player.PushClientRes(&msg.ResFastProduceReward{
|
||||||
Code: msg.RES_CODE_SUCCESS,
|
Code: msg.RES_CODE_SUCCESS,
|
||||||
EndTime: EndTime,
|
|
||||||
Num: int32(Times),
|
|
||||||
})
|
})
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@ -185,9 +185,9 @@ func UnitLimitProgress(p *Player) error {
|
|||||||
|
|
||||||
func UnitLimitedTimeEvent(p *Player) error {
|
func UnitLimitedTimeEvent(p *Player) error {
|
||||||
LimitedTimeEventMod := p.PlayMod.getLimitedTimeEventMod()
|
LimitedTimeEventMod := p.PlayMod.getLimitedTimeEventMod()
|
||||||
|
ChessMod := p.PlayMod.getChessMod()
|
||||||
mergeList := []int{246, 15}
|
mergeList := []int{246, 15}
|
||||||
AddItem := LimitedTimeEventMod.GetChestReward(mergeList)
|
AddItem := LimitedTimeEventMod.GetChestReward(mergeList, ChessMod.GetStarEmitList())
|
||||||
fmt.Print(AddItem)
|
fmt.Print(AddItem)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,6 +2,7 @@ package test
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"server/game"
|
"server/game"
|
||||||
|
limitedTimeEvent "server/game/mod/limited_time_event"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -14,3 +15,16 @@ func TestMetroRain(t *testing.T) {
|
|||||||
rewards := LimitEventMod.GetMeteorReward([]int{1, 22, 3}, ChessMod.GetStarEmitList())
|
rewards := LimitEventMod.GetMeteorReward([]int{1, 22, 3}, ChessMod.GetStarEmitList())
|
||||||
t.Logf("rewards: %v", rewards)
|
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