幸运猫

This commit is contained in:
hahwu 2025-03-18 12:22:27 +08:00
parent a91952b796
commit df9cf9d44d
6 changed files with 2345 additions and 2116 deletions

View File

@ -5,6 +5,7 @@ import (
"server/game/mod/item" "server/game/mod/item"
"server/gamedata" "server/gamedata"
"server/pkg/github.com/name5566/leaf/log" "server/pkg/github.com/name5566/leaf/log"
"sort"
) )
const ( const (
@ -20,6 +21,7 @@ const (
CFG_LIMITED_TIME_EVENT_CONST = "LimitedTimeEventConst" CFG_LIMITED_TIME_EVENT_CONST = "LimitedTimeEventConst"
CFG_LIMITED_TIME_EVENT_BONUS = "LimitedTimeEventBonus" CFG_LIMITED_TIME_EVENT_BONUS = "LimitedTimeEventBonus"
CFG_LIMITED_TIME_EVENT_MONEY = "LimitedTimeEventMoney" CFG_LIMITED_TIME_EVENT_MONEY = "LimitedTimeEventMoney"
CFG_LIMITED_TIME_EVENT_LUCKY = "LimitedTimeEventLuckyCat"
) )
func init() { func init() {
@ -35,6 +37,7 @@ func init() {
gamedata.InitCfg(CFG_LIMITED_TIME_EVENT_BONUS) gamedata.InitCfg(CFG_LIMITED_TIME_EVENT_BONUS)
gamedata.InitCfg(CFG_LIMITED_TIME_EVENT_CHEST_JACKPOT) gamedata.InitCfg(CFG_LIMITED_TIME_EVENT_CHEST_JACKPOT)
gamedata.InitCfg(CFG_LIMITED_TIME_EVENT_MONEY) gamedata.InitCfg(CFG_LIMITED_TIME_EVENT_MONEY)
gamedata.InitCfg(CFG_LIMITED_TIME_EVENT_LUCKY)
} }
// 获取限时事件触发列表 // 获取限时事件触发列表
@ -302,3 +305,30 @@ func GetMoneyCatMax() int {
} }
return len(data) return len(data)
} }
func GetLuckyCatMaxEarning(Remain int) int {
data, err := gamedata.GetData(CFG_LIMITED_TIME_EVENT_LUCKY)
if err != nil {
log.Debug("GetMul err:%v", err)
return 0
}
type d struct {
t int
e int
}
l := make([]d, 0)
for k, v := range data {
t := GoUtil.Int(k)
e := gamedata.GetIntValue(v, "Earn")
l = append(l, d{t, e})
}
sort.Slice(l, func(i, j int) bool {
return l[i].t < l[j].t
})
for _, v := range l {
if Remain <= v.t {
return v.e
}
}
return 0
}

View File

@ -697,12 +697,13 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
RegisterMsgProcessFunc("ReqGetMonthLoginReward", ReqGetMonthLoginReward) // 领取月签到奖励 RegisterMsgProcessFunc("ReqGetMonthLoginReward", ReqGetMonthLoginReward) // 领取月签到奖励
// 限时事件 // 限时事件
RegisterMsgProcessFunc("ReqLimitEvent", ReqLimitEvent) // 请求限时事件数据 RegisterMsgProcessFunc("ReqLimitEvent", ReqLimitEvent) // 请求限时事件数据
RegisterMsgProcessFunc("ReqFastProduceReward", ReqFastProduceReward) // 连击快手奖励 RegisterMsgProcessFunc("ReqFastProduceReward", ReqFastProduceReward) // 连击快手奖励
RegisterMsgProcessFunc("ReqFastProduceInfo", ReqFastProduceInfo) // 请求连击快手数据 RegisterMsgProcessFunc("ReqFastProduceInfo", ReqFastProduceInfo) // 请求连击快手数据
RegisterMsgProcessFunc("ReqLimitSenceReward", ReqLimitSenceReward) // 获取场景转盘奖励 RegisterMsgProcessFunc("ReqLimitSenceReward", ReqLimitSenceReward) // 获取场景转盘奖励
RegisterMsgProcessFunc("ReqSelectLimitEvent", ReqSelectLimitEvent) //领取限时事件进度奖励 RegisterMsgProcessFunc("ReqSelectLimitEvent", ReqSelectLimitEvent) //领取限时事件进度奖励
RegisterMsgProcessFunc("ReqGetGoldCard", ReqGetGoldCard) //请求金卡交换信息 RegisterMsgProcessFunc("ReqGetGoldCard", ReqGetGoldCard) //请求金卡交换信息
RegisterMsgProcessFunc("ReqLimitEventLuckyCat", ReqLimitEventLuckyCat) //幸运猫获取奖励
// #region 好友 // #region 好友
RegisterMsgProcessFunc("ReqFriendList", ReqFriendList) // 请求好友列表 RegisterMsgProcessFunc("ReqFriendList", ReqFriendList) // 请求好友列表

View File

@ -3798,3 +3798,34 @@ func ReqPlayroomPetAirSet(player *Player, buf []byte) error {
}) })
return nil return nil
} }
func ReqLimitEventLuckyCat(player *Player, buf []byte) error {
req := &msg.ReqLimitEventLuckyCat{}
LimitedTimeEventMod := player.PlayMod.getLimitedTimeEventMod()
err := LimitedTimeEventMod.LuckyCat(int(req.ChessId))
if err != nil {
player.SendErrClienRes(&msg.ResLimitEventLuckyCat{
Code: msg.RES_CODE_FAIL,
Msg: err.Error(),
})
return err
}
data := &PlayerChessData{}
err = data.UpdateChessData(player, req.MChessData)
if err != nil {
player.SendErrClienRes(&msg.ResChessEx{
Code: msg.RES_CODE_FAIL,
Msg: err.Error(),
})
player.TeLog("outsync_event", map[string]interface{}{
"outsync_event": "ReqLimitEventLuckyCat",
})
return err
}
player.PlayMod.save()
player.PushClientRes(LimitedTimeEventMod.BackData())
player.PushClientRes(&msg.ResLimitEventLuckyCat{
Code: msg.RES_CODE_SUCCESS,
})
return nil
}

View File

@ -54,5 +54,5 @@ type ActivityInfo struct {
func init() { func init() {
gob.Register(&limitedTimeEvent.MoneyCat{}) gob.Register(&limitedTimeEvent.MoneyCat{})
gob.Register(&limitedTimeEvent.LuckyCat{})
} }

View File

@ -2,6 +2,7 @@ package limitedTimeEvent
import ( import (
"fmt" "fmt"
"math"
"server/GoUtil" "server/GoUtil"
limitedTimeEventCfg "server/conf/limitedTimeEvent" limitedTimeEventCfg "server/conf/limitedTimeEvent"
mergeDataCfg "server/conf/mergeData" mergeDataCfg "server/conf/mergeData"
@ -22,6 +23,7 @@ const (
EVENT_TYPE_FAST_PRODUCE = 10 // 连击快手 EVENT_TYPE_FAST_PRODUCE = 10 // 连击快手
EVENT_TYPE_CAT_CYCLONE = 11 // 猫咪飓风 EVENT_TYPE_CAT_CYCLONE = 11 // 猫咪飓风
EVENT_TYPE_MONEY_CAT = 12 // 招财猫 EVENT_TYPE_MONEY_CAT = 12 // 招财猫
EVENT_TYPE_LUCKY_CAT = 13 // 幸运猫
) )
const ( const (
@ -55,6 +57,10 @@ type MoneyCat struct {
Mul float64 Mul float64
} }
type LuckyCat struct {
Earnings int
}
func (l *LimitedTimeEventMod) InitData(Lv int) { func (l *LimitedTimeEventMod) InitData(Lv int) {
if l.EventList == nil { if l.EventList == nil {
l.EventList = make(map[int]*LTEInfo) l.EventList = make(map[int]*LTEInfo)
@ -335,6 +341,22 @@ func (l *LimitedTimeEventMod) RemoveSuperOrder() bool {
return false return false
} }
func (l *LimitedTimeEventMod) LuckyCat(ChessId int) error {
L := l.EventList[EVENT_TYPE_LUCKY_CAT]
if L == nil {
return fmt.Errorf("LuckyCat event not exist")
}
MaxEarning := limitedTimeEventCfg.GetLuckyCatMaxEarning(int(L.Remian))
d := L.D.(*LuckyCat)
Lv := mergeDataCfg.GetLvById(ChessId)
Earn := math.Pow(2, float64(Lv-1))
d.Earnings += int(Earn)
if d.Earnings >= MaxEarning {
delete(l.EventList, EVENT_TYPE_LUCKY_CAT)
}
return nil
}
// 获取超级订单奖励 // 获取超级订单奖励
func initEventInfo(E *LTEInfo, EventType int) { func initEventInfo(E *LTEInfo, EventType int) {
switch EventType { switch EventType {
@ -349,12 +371,17 @@ func initEventInfo(E *LTEInfo, EventType int) {
EndTime: 0, EndTime: 0,
Mul: 1.1, Mul: 1.1,
} }
case EVENT_TYPE_LUCKY_CAT:
E.D = &LuckyCat{
Earnings: 0,
}
} }
} }
func getLimitEventMsg(t int, e *LTEInfo) *msg.LimitEvent { func getLimitEventMsg(t int, e *LTEInfo) *msg.LimitEvent {
Cd := 0 Cd := 0
Mul := 0.0 Mul := 0.0
switch t { switch t {
case EVENT_TYPE_FAST_PRODUCE: case EVENT_TYPE_FAST_PRODUCE:
NextPlay := GoUtil.Int64(e.Info["NextPlay"]) NextPlay := GoUtil.Int64(e.Info["NextPlay"])
@ -365,8 +392,9 @@ func getLimitEventMsg(t int, e *LTEInfo) *msg.LimitEvent {
Mul = d.Mul Mul = d.Mul
} }
return &msg.LimitEvent{ return &msg.LimitEvent{
EndTime: int32(e.StartT + e.Remian), EndTime: int32(e.StartT + e.Remian),
Cd: int32(Cd), Cd: int32(Cd),
Mul: float32(Mul), Mul: float32(Mul),
StartTime: int32(e.StartT),
} }
} }

File diff suppressed because it is too large Load Diff