场景冲刺逻辑修改

This commit is contained in:
hahwu 2026-03-10 15:32:21 +08:00
parent 8a79ce2b64
commit 8dbefbe3d9
3 changed files with 63 additions and 4 deletions

View File

@ -274,7 +274,16 @@ func (l *LimitedTimeEventMod) GetChestReward(MergeList, EmitList []int) []*item.
} }
// 获取场景冲刺奖励 // 获取场景冲刺奖励
func (l *LimitedTimeEventMod) GetSceneDashReward() (int, []*item.Item) { func (l *LimitedTimeEventMod) GetSceneDashReward() (int, []*item.Item, error) {
limitInfo, ok := l.EventList[EVENT_TYPE_SENCE_DASH]
if !ok {
return 0, nil, fmt.Errorf("sence dash not active")
}
times := GoUtil.Int(limitInfo.Info["Times"])
if times <= 0 {
return 0, nil, fmt.Errorf("no dash times")
}
limitInfo.Info["Times"] = times - 1
ProbList := limitedTimeEventCfg.GetSenceJackpotProb() ProbList := limitedTimeEventCfg.GetSenceJackpotProb()
Id := GoUtil.RandMap(ProbList) Id := GoUtil.RandMap(ProbList)
Items := limitedTimeEventCfg.GetSenceJackpotReward(Id) Items := limitedTimeEventCfg.GetSenceJackpotReward(Id)
@ -282,7 +291,7 @@ func (l *LimitedTimeEventMod) GetSceneDashReward() (int, []*item.Item) {
// 多个奖励时,随机选择一个 // 多个奖励时,随机选择一个
Items = []*item.Item{GoUtil.RandItem(Items)} Items = []*item.Item{GoUtil.RandItem(Items)}
} }
return Id, Items return Id, Items, nil
} }
// 获取连击快手奖励 // 获取连击快手奖励
@ -434,6 +443,10 @@ func (l *LimitedTimeEventMod) GetCatTrickReward() ([]*item.Item, error) {
// #region 事件信息初始化 // #region 事件信息初始化
func initEventInfo(E *LTEInfo, EventType int) { func initEventInfo(E *LTEInfo, EventType int) {
switch EventType { switch EventType {
case EVENT_TYPE_SENCE_DASH:
E.Info = map[string]interface{}{
"Times": 0,
}
case EVENT_TYPE_FAST_PRODUCE: case EVENT_TYPE_FAST_PRODUCE:
E.Info = map[string]interface{}{ E.Info = map[string]interface{}{
"Times": 0, "Times": 0,
@ -515,6 +528,9 @@ func getLimitEventMsg(t int, e *LTEInfo) *msg.LimitEvent {
case EVENT_TYPE_PAYBACK_DAY: case EVENT_TYPE_PAYBACK_DAY:
d := e.D.(*PaybackDay) d := e.D.(*PaybackDay)
Param[msg.LimitEventParam_PAYBACK_DAY_COUNT.String()] = int32(d.Count) Param[msg.LimitEventParam_PAYBACK_DAY_COUNT.String()] = int32(d.Count)
case EVENT_TYPE_SENCE_DASH:
Times := GoUtil.Int(e.Info["Times"])
Param[msg.LimitEventParam_SENCE_DASH_TIMES.String()] = int32(Times)
} }
return &msg.LimitEvent{ return &msg.LimitEvent{
EndTime: EndTime, EndTime: EndTime,
@ -537,3 +553,11 @@ func (l *LimitedTimeEventMod) GetCatDaySaleEndTime() int64 {
} }
return v.StartT + v.Remian return v.StartT + v.Remian
} }
func (l *LimitedTimeEventMod) AddSenceDashTimes() bool {
if _, ok := l.EventList[EVENT_TYPE_SENCE_DASH]; !ok {
return false
}
l.EventList[EVENT_TYPE_SENCE_DASH].Info["Times"] = GoUtil.Int(l.EventList[EVENT_TYPE_SENCE_DASH].Info["Times"]) + 1
return true
}

View File

@ -539,7 +539,12 @@ func ReqDecorate(player *Player, buf []byte) error {
"item_list": AddItem, "item_list": AddItem,
}) })
} }
// 跨越场景
if DecorateMod.GetAreaId() != AreaId { // 解锁上报 if DecorateMod.GetAreaId() != AreaId { // 解锁上报
LimitEventMod := player.PlayMod.getLimitedTimeEventMod()
if LimitEventMod.AddSenceDashTimes() {
player.PushClientRes(LimitEventMod.BackData())
}
player.TeLog("plot_unlock", map[string]interface{}{ player.TeLog("plot_unlock", map[string]interface{}{
"plot_id": DecorateMod.GetAreaId(), "plot_id": DecorateMod.GetAreaId(),
}) })
@ -636,6 +641,15 @@ func ReqDecorateAll(player *Player, buf []byte) error {
player.TeLog("scene_reward", v.(map[string]interface{})) player.TeLog("scene_reward", v.(map[string]interface{}))
} }
} }
if DecorateMod.GetAreaId() != AreaId { // 解锁上报
LimitEventMod := player.PlayMod.getLimitedTimeEventMod()
if LimitEventMod.AddSenceDashTimes() {
player.PushClientRes(LimitEventMod.BackData())
}
player.TeLog("plot_unlock", map[string]interface{}{
"plot_id": DecorateMod.GetAreaId(),
})
}
player.PlayMod.save() player.PlayMod.save()
player.PushClientRes(DecorateMod.BackData()) player.PushClientRes(DecorateMod.BackData())
@ -1754,9 +1768,16 @@ func ReqLimitSenceReward(player *Player, buf []byte) error {
return fmt.Errorf("not exist") return fmt.Errorf("not exist")
} }
Id, Items := limitedTimeEventMod.GetSceneDashReward() Id, Items, err := limitedTimeEventMod.GetSceneDashReward()
if err != nil {
player.SendErrClienRes(&msg.ResLimitSenceReward{
Code: msg.RES_CODE_FAIL,
Msg: err.Error(),
})
return err
}
player.args["ResItemPopId"] = Id player.args["ResItemPopId"] = Id
err := player.HandleItem(Items, msg.ITEM_POP_LABEL_LimitSenceReward.String()) err = player.HandleItem(Items, msg.ITEM_POP_LABEL_LimitSenceReward.String())
if err != nil { if err != nil {
player.SendErrClienRes(&msg.ResLimitSenceReward{ player.SendErrClienRes(&msg.ResLimitSenceReward{
Code: msg.RES_CODE_FAIL, Code: msg.RES_CODE_FAIL,

View File

@ -28,3 +28,17 @@ func TestFast(t *testing.T) {
} }
t.Logf("Fast produce items: %v", items) t.Logf("Fast produce items: %v", items)
} }
func TestSenceDash(t *testing.T) {
p := new(game.Player)
p.InitPlayer("3625212")
LimitEventMod := p.GetLimitEventMod()
LimitEventMod.AddEvent(limitedTimeEvent.EVENT_TYPE_SENCE_DASH, 60)
LimitEventMod.AddSenceDashTimes() // 模拟一次场景冲刺
Id, items, err := LimitEventMod.GetSceneDashReward()
if err != nil {
t.Errorf("GetSceneDashReward error: %v", err)
return
}
t.Logf("Scene dash reward: Id=%d, items=%v", Id, items)
}