diff --git a/src/server/game/mod/limited_time_event/limited_time_event.go b/src/server/game/mod/limited_time_event/limited_time_event.go index 40ce7c65..54a802f3 100644 --- a/src/server/game/mod/limited_time_event/limited_time_event.go +++ b/src/server/game/mod/limited_time_event/limited_time_event.go @@ -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() Id := GoUtil.RandMap(ProbList) Items := limitedTimeEventCfg.GetSenceJackpotReward(Id) @@ -282,7 +291,7 @@ func (l *LimitedTimeEventMod) GetSceneDashReward() (int, []*item.Item) { // 多个奖励时,随机选择一个 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 事件信息初始化 func initEventInfo(E *LTEInfo, EventType int) { switch EventType { + case EVENT_TYPE_SENCE_DASH: + E.Info = map[string]interface{}{ + "Times": 0, + } case EVENT_TYPE_FAST_PRODUCE: E.Info = map[string]interface{}{ "Times": 0, @@ -515,6 +528,9 @@ func getLimitEventMsg(t int, e *LTEInfo) *msg.LimitEvent { case EVENT_TYPE_PAYBACK_DAY: d := e.D.(*PaybackDay) 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{ EndTime: EndTime, @@ -537,3 +553,11 @@ func (l *LimitedTimeEventMod) GetCatDaySaleEndTime() int64 { } 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 +} diff --git a/src/server/game/register_network_func.go b/src/server/game/register_network_func.go index b011a569..e5e72d0d 100644 --- a/src/server/game/register_network_func.go +++ b/src/server/game/register_network_func.go @@ -539,7 +539,12 @@ func ReqDecorate(player *Player, buf []byte) error { "item_list": AddItem, }) } + // 跨越场景 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(), }) @@ -636,6 +641,15 @@ func ReqDecorateAll(player *Player, buf []byte) error { 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.PushClientRes(DecorateMod.BackData()) @@ -1754,9 +1768,16 @@ func ReqLimitSenceReward(player *Player, buf []byte) error { 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 - err := player.HandleItem(Items, msg.ITEM_POP_LABEL_LimitSenceReward.String()) + err = player.HandleItem(Items, msg.ITEM_POP_LABEL_LimitSenceReward.String()) if err != nil { player.SendErrClienRes(&msg.ResLimitSenceReward{ Code: msg.RES_CODE_FAIL, diff --git a/src/server/test/limit_test.go b/src/server/test/limit_test.go index 9d10a98f..39ade1dd 100644 --- a/src/server/test/limit_test.go +++ b/src/server/test/limit_test.go @@ -28,3 +28,17 @@ func TestFast(t *testing.T) { } 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) +}