限时事件修改
This commit is contained in:
parent
21ae017443
commit
dd6fdde8ce
@ -467,8 +467,6 @@ func (p *WorkerPool) spawnWorker() {
|
|||||||
// Worker 工作函数,监听其子上下文以便单独停止
|
// Worker 工作函数,监听其子上下文以便单独停止
|
||||||
func (p *WorkerPool) worker(ctx context.Context, id int) {
|
func (p *WorkerPool) worker(ctx context.Context, id int) {
|
||||||
defer p.wg.Done()
|
defer p.wg.Done()
|
||||||
log.Debug("Worker %d started", id)
|
|
||||||
|
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
|
|||||||
@ -6,6 +6,7 @@ import (
|
|||||||
limitedTimeEventCfg "server/conf/limited_time_event"
|
limitedTimeEventCfg "server/conf/limited_time_event"
|
||||||
mergeDataCfg "server/conf/merge_data"
|
mergeDataCfg "server/conf/merge_data"
|
||||||
"server/game/mod/item"
|
"server/game/mod/item"
|
||||||
|
"server/game/mod/order"
|
||||||
GoUtil "server/game_util"
|
GoUtil "server/game_util"
|
||||||
"server/msg"
|
"server/msg"
|
||||||
)
|
)
|
||||||
@ -268,30 +269,38 @@ func (l *LimitedTimeEventMod) ProgressBackData() *msg.ResLimitEventProgress {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 获取流星雨奖励
|
// 获取流星雨奖励
|
||||||
func (l *LimitedTimeEventMod) GetMeteorReward(MergeList []int) []*item.Item {
|
func (l *LimitedTimeEventMod) GetMeteorReward(MergeList, EmitList []int) []*item.Item {
|
||||||
MaxLv := 0
|
eneryg := 0
|
||||||
Star := 0
|
|
||||||
for _, v := range MergeList {
|
for _, v := range MergeList {
|
||||||
ChessLv := mergeDataCfg.GetLvById(v)
|
ChessLv := mergeDataCfg.GetLvById(v)
|
||||||
Star += mergeDataCfg.GetStarById(v)
|
Color := mergeDataCfg.GetColorById(v)
|
||||||
if ChessLv > MaxLv {
|
EmitId := order.GetEmitByColor(EmitList, Color)
|
||||||
MaxLv = ChessLv
|
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 := int(max(math.Ceil(float64(eneryg)/0.36*0.1), 1))
|
||||||
NewStar = max(NewStar, 1)
|
|
||||||
return []*item.Item{{Id: item.ITEM_STAR_ID, Num: NewStar}}
|
return []*item.Item{{Id: item.ITEM_STAR_ID, Num: NewStar}}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取宝箱雨奖励
|
// 获取宝箱雨奖励
|
||||||
func (l *LimitedTimeEventMod) GetChestReward(MergeList []int) []*item.Item {
|
func (l *LimitedTimeEventMod) GetChestReward(MergeList, EmitList []int) []*item.Item {
|
||||||
Star := 0
|
eneryg := 0
|
||||||
for _, v := range MergeList {
|
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 {
|
func (l *LimitedTimeEventMod) SubPaybackDay() error {
|
||||||
if l.EventList[EVENT_TYPE_PAYBACK_DAY] == nil {
|
// 2026.1.20 改版 不限制次数
|
||||||
return fmt.Errorf("PaybackDay event not exist")
|
// 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 {
|
// d := l.EventList[EVENT_TYPE_PAYBACK_DAY].D.(*PaybackDay)
|
||||||
return fmt.Errorf("PaybackDay count is 0")
|
// if d.count <= 0 {
|
||||||
}
|
// return fmt.Errorf("PaybackDay count is 0")
|
||||||
d.count--
|
// }
|
||||||
if d.count <= 0 {
|
// d.count--
|
||||||
delete(l.EventList, EVENT_TYPE_PAYBACK_DAY)
|
// if d.count <= 0 {
|
||||||
}
|
// delete(l.EventList, EVENT_TYPE_PAYBACK_DAY)
|
||||||
|
// }
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -457,8 +467,9 @@ func (l *LimitedTimeEventMod) GetCatTrickReward() ([]*item.Item, error) {
|
|||||||
return nil, fmt.Errorf("CatTrick energy not enough")
|
return nil, fmt.Errorf("CatTrick energy not enough")
|
||||||
}
|
}
|
||||||
d.Energy -= 100
|
d.Energy -= 100
|
||||||
|
// TODO 放到配置中
|
||||||
return []*item.Item{
|
return []*item.Item{
|
||||||
{Id: item.ITEM_DIAMOND_ID, Num: 1},
|
{Id: item.ITEM_DIAMOND_ID, Num: 5},
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -3,6 +3,7 @@ package game
|
|||||||
import (
|
import (
|
||||||
"server/game/mod/chess"
|
"server/game/mod/chess"
|
||||||
"server/game/mod/decorate"
|
"server/game/mod/decorate"
|
||||||
|
limitedTimeEvent "server/game/mod/limited_time_event"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (p *Player) GetChessMod() *chess.ChessBorad {
|
func (p *Player) GetChessMod() *chess.ChessBorad {
|
||||||
@ -12,3 +13,7 @@ func (p *Player) GetChessMod() *chess.ChessBorad {
|
|||||||
func (p *Player) GetDecorateMod() *decorate.Decorate {
|
func (p *Player) GetDecorateMod() *decorate.Decorate {
|
||||||
return p.PlayMod.getDecorateMod()
|
return p.PlayMod.getDecorateMod()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *Player) GetLimitEventMod() *limitedTimeEvent.LimitedTimeEventMod {
|
||||||
|
return p.PlayMod.getLimitedTimeEventMod()
|
||||||
|
}
|
||||||
|
|||||||
@ -290,7 +290,7 @@ func ReqRewardOrder(player *Player, buf []byte) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if LimitedTimeEventMod.CheckExist(limitedTimeEvent.EVENT_TYPE_METEOR_SHOW) { //流星雨活动
|
if LimitedTimeEventMod.CheckExist(limitedTimeEvent.EVENT_TYPE_METEOR_SHOW) { //流星雨活动
|
||||||
AddItem := LimitedTimeEventMod.GetMeteorReward(mergeList)
|
AddItem := LimitedTimeEventMod.GetMeteorReward(mergeList, ChessMod.GetStarEmitList())
|
||||||
if len(AddItem) > 0 {
|
if len(AddItem) > 0 {
|
||||||
player.TeLog("time_limited_event_action", map[string]interface{}{
|
player.TeLog("time_limited_event_action", map[string]interface{}{
|
||||||
"event_type": limitedTimeEventCfg.GetEventName(limitedTimeEvent.EVENT_TYPE_METEOR_SHOW),
|
"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) { //宝箱雨活动
|
if LimitedTimeEventMod.CheckExist(limitedTimeEvent.EVENT_TYPE_CHEST_RAIN) { //宝箱雨活动
|
||||||
ChestRainItems := LimitedTimeEventMod.GetChestReward(mergeList)
|
ChestRainItems := LimitedTimeEventMod.GetChestReward(mergeList, ChessMod.GetStarEmitList())
|
||||||
player.args["ResItemPopId"] = req.OrderId
|
player.args["ResItemPopId"] = req.OrderId
|
||||||
err = player.HandleItem(ChestRainItems, msg.ITEM_POP_LABEL_LimitEventChestRain.String())
|
err = player.HandleItem(ChestRainItems, msg.ITEM_POP_LABEL_LimitEventChestRain.String())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
16
src/server/test/limit_test.go
Normal file
16
src/server/test/limit_test.go
Normal file
@ -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)
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user