限时事件修改

This commit is contained in:
hahwu 2026-01-20 19:24:29 +08:00
parent 21ae017443
commit dd6fdde8ce
5 changed files with 59 additions and 29 deletions

View File

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

View File

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

View File

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

View File

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

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