招财猫

This commit is contained in:
hahwu 2025-03-18 10:56:48 +08:00
parent d693b6d314
commit 5d160f71ef
5 changed files with 1259 additions and 1161 deletions

View File

@ -19,6 +19,7 @@ const (
CFG_LIMITED_TIME_EVENT_CHEST_JACKPOT = "LimitedTimeEventChestJackpot"
CFG_LIMITED_TIME_EVENT_CONST = "LimitedTimeEventConst"
CFG_LIMITED_TIME_EVENT_BONUS = "LimitedTimeEventBonus"
CFG_LIMITED_TIME_EVENT_MONEY = "LimitedTimeEventMoney"
)
func init() {
@ -33,6 +34,7 @@ func init() {
gamedata.InitCfg(CFG_LIMITED_TIME_EVENT_CONST)
gamedata.InitCfg(CFG_LIMITED_TIME_EVENT_BONUS)
gamedata.InitCfg(CFG_LIMITED_TIME_EVENT_CHEST_JACKPOT)
gamedata.InitCfg(CFG_LIMITED_TIME_EVENT_MONEY)
}
// 获取限时事件触发列表
@ -280,3 +282,23 @@ func GetFastCD() int {
}
return gamedata.GetIntValue(data, "Value")
}
// 招财猫
func GetMoneyCat(Id int) (float64, int) {
data, err := gamedata.GetDataByIntKey(CFG_LIMITED_TIME_EVENT_MONEY, Id)
if err != nil {
log.Debug("GetMul err:%v", err)
return 0.0, 0
}
return gamedata.GetFloatValue(data, "Mul"), gamedata.GetIntValue(data, "Cd")
}
func GetMoneyCatMax() int {
data, err := gamedata.GetData(CFG_LIMITED_TIME_EVENT_MONEY)
if err != nil {
log.Debug("GetMul err:%v", err)
return 0
}
return len(data)
}

View File

@ -510,3 +510,11 @@ func GetColorType(Color string) int {
}
return CHESS_PRODUCT_MAIN_TYPE
}
func GetMergeStar(MergeList []int) int {
Star := 0
for _, v := range MergeList {
Star += GetStarById(v)
}
return Star
}

View File

@ -245,6 +245,16 @@ func ReqRewardOrder(player *Player, buf []byte) error {
}
Item = item.Merge(Item, AddItem)
}
if LimitedTimeEventMod.CheckExist(limitedTimeEvent.EVENT_TYPE_MONEY_CAT) { //招财猫活动
AddItem := LimitedTimeEventMod.GetMoneyCatReward(mergeList)
if len(AddItem) > 0 {
player.TeLog("time_limited_event_action", map[string]interface{}{
"event_type": "money_cat",
"item_list": AddItem,
})
}
Item = item.Merge(Item, AddItem)
}
if err != nil {
player.SendErrClienRes(&msg.ResRewardOrder{
Code: msg.RES_CODE_FAIL,

View File

@ -21,6 +21,7 @@ const (
EVENT_TYPE_PET_THIEF = 9 // 宠物小偷
EVENT_TYPE_FAST_PRODUCE = 10 // 连击快手
EVENT_TYPE_CAT_CYCLONE = 11 // 猫咪飓风
EVENT_TYPE_MONEY_CAT = 12 // 招财猫
)
const (
@ -45,6 +46,13 @@ type LTEInfo struct {
StartT int64 // 开始时间
Remian int64 // 剩余时间
Info map[string]interface{} // 事件信息
D interface{}
}
type MoneyCat struct {
Id int
EndTime int64
Mul float64
}
func (l *LimitedTimeEventMod) InitData(Lv int) {
@ -141,24 +149,40 @@ func (l *LimitedTimeEventMod) WeekUpdate() {
l.Triggered = make(map[int]struct{})
}
func (l *LimitedTimeEventMod) GetMoneyCatReward(ChessList []int) []*item.Item {
L := l.EventList[EVENT_TYPE_MONEY_CAT]
if L == nil {
return nil
}
Star := mergeDataCfg.GetMergeStar(ChessList)
d := L.D.(*MoneyCat)
mul := d.Mul
// 超时
if d.EndTime > 0 && GoUtil.Now() >= d.EndTime {
NextMul, Cd := limitedTimeEventCfg.GetMoneyCat(1)
d.EndTime = int64(Cd)
d.Mul = NextMul
Star = int(float64(Star) * NextMul)
} else {
MaxId := limitedTimeEventCfg.GetMoneyCatMax()
NextId := min(d.Id+1, MaxId)
NextMul, Cd := limitedTimeEventCfg.GetMoneyCat(NextId)
d.Id = NextId
d.Mul = NextMul
d.EndTime = GoUtil.Now() + int64(Cd)
Star = int(float64(Star) * mul)
}
return []*item.Item{{Id: item.ITEM_STAR_ID, Num: Star}}
}
func (l *LimitedTimeEventMod) BackData() *msg.ResLimitEvent {
Res := &msg.ResLimitEvent{}
EventList := make(map[int32]*msg.LimitEvent)
Now := GoUtil.Now()
for k, v := range l.EventList {
Cd := 0
if k == EVENT_TYPE_FAST_PRODUCE {
NextPlay := GoUtil.Int64(v.Info["NextPlay"])
Cd = int(max(NextPlay-Now, 0))
}
EventList[int32(k)] = &msg.LimitEvent{
EndTime: int32(v.StartT + v.Remian),
Cd: int32(Cd),
}
EventList[int32(k)] = getLimitEventMsg(k, v)
}
Res.LimitEventList = EventList
// Res.Progress = int32(l.Progress)
// Res.ProgressReward = GoUtil.MapIntToInt32(l.ProgressReward)
return Res
}
@ -319,5 +343,30 @@ func initEventInfo(E *LTEInfo, EventType int) {
"Times": 0,
"NextPlay": 0,
}
case EVENT_TYPE_MONEY_CAT:
E.D = &MoneyCat{
Id: 1,
EndTime: 0,
Mul: 1.1,
}
}
}
func getLimitEventMsg(t int, e *LTEInfo) *msg.LimitEvent {
Cd := 0
Mul := 0.0
switch t {
case EVENT_TYPE_FAST_PRODUCE:
NextPlay := GoUtil.Int64(e.Info["NextPlay"])
Cd = int(max(NextPlay-GoUtil.Now(), 0))
case EVENT_TYPE_MONEY_CAT:
d := e.D.(*MoneyCat)
Cd = int(d.EndTime)
Mul = d.Mul
}
return &msg.LimitEvent{
EndTime: int32(e.StartT + e.Remian),
Cd: int32(Cd),
Mul: float32(Mul),
}
}

File diff suppressed because it is too large Load Diff