This commit is contained in:
hahwu 2026-04-02 21:33:56 +08:00
parent 063bad8a18
commit 19233e02d8
11 changed files with 257 additions and 11 deletions

View File

@ -828,6 +828,9 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
RegisterMsgProcessFunc("ReqCatnipReward", ReqCatnipReward) // 猫草大作战领取奖励
RegisterMsgProcessFunc("ReqCatnipGrandReward", ReqCatnipGrandReward) // 猫草大作战领取大奖
RegisterMsgProcessFunc("ReqCatnipEmoji", ReqCatnipEmoji)
// 猫猫回礼
RegisterMsgProcessFunc("CatReturnGiftCfg", CatReturnGiftCfg) // 请求猫猫回礼数据
RegisterMsgProcessFunc("ReqCatReturnGiftReward", ReqCatReturnGiftReward) // 领取猫猫回礼奖励
// 活动通行证
RegisterMsgProcessFunc("ReqActPass", ReqActPass) // 请求活动通行证数据
RegisterMsgProcessFunc("ReqActPassReward", ReqActPassReward) // 领取活动通行证奖励

View File

@ -136,8 +136,8 @@ func (p *Player) SendActivityMail(ItemId, ItemNum, ActivityId int, RewardItems [
// 活动模块 零点更新
func (p *Player) ActivityZeroUpdate() {
p.CatReturnGiftZeroUpdate()
p.ActivityLogin()
type zeroHandler struct {
actType int
updateFn func(int)
@ -156,6 +156,36 @@ func (p *Player) ActivityZeroUpdate() {
}
}
// 猫猫回礼0点更新
func (p *Player) CatReturnGiftZeroUpdate() {
activityInfo := p.GetActivityInfo(activity.ACT_TYPE_CAT_RETURN_GIFT)
var aid int
var id int
if activityInfo != nil {
id = activityInfo.Id
aid = activityInfo.AId
}
oldId, oldScore, oldReward := p.GetCatReturnGiftMod().ZeroUpdate(id, aid)
if oldId != 0 {
log.Debug("CatReturnGiftZeroUpdate oldId : %d, oldScore : %d, oldReward : %d", oldId, oldScore, oldReward)
cfg := G_GameLogicPtr.ActivityMgr.GetCatReturnGiftCfg(oldId)
items := make([]*item.Item, 0)
if cfg != nil {
for _, v := range cfg.RewardList {
if oldScore >= int(v.Score) && oldReward < int(v.Id) {
items = append(items, item.MsgToItem(v.Reward)...)
}
}
}
if len(items) > 0 {
err := p.HandleItem(items, "")
if err != nil {
log.Debug("CatReturnGiftZeroUpdate HandleItem err : %s", err)
}
}
}
}
// 获取活动信息
func (p *Player) GetActivityInfo(actType int) *ActivityInfo {
for _, v := range p.activity {
@ -509,3 +539,24 @@ func (p *Player) GetDailyTaskActivityId() int {
}
return activityId
}
// 猫猫回礼返回
func (p *Player) CatReturnGiftBackData() {
activityInfo := p.GetActivityInfo(activity.ACT_TYPE_CAT_RETURN_GIFT)
if activityInfo == nil {
return
}
cfg := G_GameLogicPtr.ActivityMgr.GetCatReturnGiftCfg(activityInfo.Id)
if cfg == nil {
return
}
CatReturnGiftMod := p.GetCatReturnGiftMod()
res := &msg.ResCatReturnGift{
StartTime: activityInfo.StartT,
EndTime: activityInfo.EndT,
Cfg: cfg,
Score: int32(CatReturnGiftMod.GetScore()),
Reward: int32(CatReturnGiftMod.GetReward()),
}
p.PushClientRes(res)
}

View File

@ -3,6 +3,7 @@ package game
import (
"fmt"
"server/db"
"server/game/mod/activity"
"server/game/mod/msg"
Msg "server/game/mod/msg"
GoUtil "server/game_util"
@ -162,3 +163,17 @@ func unmarshalActivityCfg(atype int, buf []byte) (interface{}, error) {
}
return nil, nil
}
func (r *ActivityMgr) GetCatReturnGiftCfg(id int) *protoMsg.CatReturnGiftCfg {
data := r.getData()
data.mu.Lock()
defer data.mu.Unlock()
for _, v := range data.List {
if v.Type == activity.ACT_TYPE_CAT_RETURN_GIFT && v.Id == id {
if cfg, ok := v.cfg.(*protoMsg.CatReturnGiftCfg); ok {
return cfg
}
}
}
return nil
}

View File

@ -87,6 +87,7 @@ type ActivityInfo struct {
StartT int64
EndT int64
Id int
AId int
Type int
Title string
Name string

View File

@ -15,16 +15,16 @@ const (
)
const (
ACT_TYPE_MINING = 1 // 挖矿
ACT_TYPE_GUESS_COLOR = 2 // 猜颜色
ACT_TYPE_RACE = 3 // 赛跑
ACT_TYPE_DISCOUNT_GIFT = 4 // 折扣礼包
ACT_TYPE_ADD_GIFT = 5 // 买一赠一礼包
ACT_TYPE_SUPER_GIFT = 6 // 超值加购礼包
ACT_TYPE_CATNIP = 7 // 猫草大作战
ACT_TYPE_PASS = 8 // 通行证
ACT_TYPE_CHAMPION = 9 // 冠军赛
ACT_TYPE_MEOW_GIFT = 10 // 喵喵回礼
ACT_TYPE_MINING = 1 // 挖矿
ACT_TYPE_GUESS_COLOR = 2 // 猜颜色
ACT_TYPE_RACE = 3 // 赛跑
ACT_TYPE_DISCOUNT_GIFT = 4 // 折扣礼包
ACT_TYPE_ADD_GIFT = 5 // 买一赠一礼包
ACT_TYPE_SUPER_GIFT = 6 // 超值加购礼包
ACT_TYPE_CATNIP = 7 // 猫草大作战
ACT_TYPE_PASS = 8 // 通行证
ACT_TYPE_CHAMPION = 9 // 冠军赛
ACT_TYPE_CAT_RETURN_GIFT = 10 // 喵喵回礼
)
const (

View File

@ -0,0 +1,49 @@
package catreturngift
type CatReturnGiftMod struct {
Id int
AId int
Score int
Reward int
}
func (c *CatReturnGiftMod) InitData() {}
func (c *CatReturnGiftMod) ZeroUpdate(id, aid int) (int, int, int) {
score := c.Score
reward := c.Reward
oldId := c.Login(id, aid)
c.Score = 0
c.Reward = 0
return oldId, score, reward
}
func (c *CatReturnGiftMod) Login(id, aid int) int {
oldId := c.Id
if aid == 0 {
c.AId = 0
return oldId
}
if c.AId == aid {
return 0
}
c.AId = aid
c.Id = id
return oldId
}
func (c *CatReturnGiftMod) GetReward() int {
return c.Reward
}
func (c *CatReturnGiftMod) GetScore() int {
return c.Score
}
func (c *CatReturnGiftMod) AddScore(score int) {
c.Score += score
}
func (c *CatReturnGiftMod) SetReward(reward int) {
c.Reward = reward
}

View File

@ -183,6 +183,20 @@ func ItemListToMsg(items []*Item) *msg.ItemList {
}
}
func MsgToItem(items []*msg.ItemInfo) []*Item {
if items == nil {
return nil
}
itemList := make([]*Item, 0, len(items))
for _, v := range items {
itemList = append(itemList, &Item{
Id: int(v.Id),
Num: int(v.Num),
})
}
return itemList
}
// 道具叠加
func Merge(item1, item2 []*Item) []*Item {
if item1 == nil {

View File

@ -4,6 +4,7 @@ import (
"server/game/mod/activity"
"server/game/mod/base"
"server/game/mod/card"
catreturngift "server/game/mod/cat_return_gift"
"server/game/mod/champship"
"server/game/mod/charge"
"server/game/mod/chess"
@ -115,3 +116,7 @@ func (p *Player) GetCollectMod() *collect.Collect {
func (p *Player) GetInviteMod() *invite.InviteMod {
return p.PlayMod.getInviteMod()
}
func (p *Player) GetCatReturnGiftMod() *catreturngift.CatReturnGiftMod {
return &p.PlayMod.mod_list.CatReturnGift
}

View File

@ -1259,6 +1259,7 @@ func (p *Player) InitActivity() {
StartT: v.Startime,
EndT: v.Endtime,
Id: v.Id,
AId: v.AId,
Type: v.Type,
Status: Status,
Title: v.Title,

View File

@ -10,6 +10,7 @@ import (
"server/game/mod/avatar"
"server/game/mod/base"
"server/game/mod/card"
catreturngift "server/game/mod/cat_return_gift"
"server/game/mod/catnip"
"server/game/mod/champship"
"server/game/mod/charge"
@ -123,6 +124,7 @@ type PlayerModList struct {
GuideTask guideTask.GuideTaskMod // 引导任务
Pass pass.PassMod // 通行证
Fur fur.FurMod // 毛皮
CatReturnGift catreturngift.CatReturnGiftMod // 猫咪回归礼包
}
func (p *PlayerModData) LoadDataFromDB(dwUin interface{}) bool {
@ -225,6 +227,7 @@ func (p *PlayerModData) InitMod(player *Player) (bool, error) {
p.ModList.GuideTask.InitData()
p.ModList.Pass.InitData()
p.ModList.Fur.InitData()
p.ModList.CatReturnGift.InitData()
return is_update, nil
}

View File

@ -5572,3 +5572,107 @@ func ReqCatnipEmoji(player *Player, buf []byte) error {
player.CatnipBackData()
return nil
}
// 猫咪回礼
func CatReturnGiftCfg(player *Player, buf []byte) error {
player.CatReturnGiftBackData()
return nil
}
// 猫猫回礼领取奖励
func ReqCatReturnGiftReward(player *Player, buf []byte) error {
req := &msg.ReqCatReturnGiftReward{}
err := proto.Unmarshal(buf, req)
if err != nil {
return err
}
activityInfo := player.GetActivityInfo(activity.ACT_TYPE_CAT_RETURN_GIFT)
if activityInfo == nil {
player.SendErrClienRes(&msg.ResCatReturnGiftReward{
Code: msg.RES_CODE_FAIL,
Msg: "activity not exist",
})
return fmt.Errorf("activity not exist")
}
cfg := G_GameLogicPtr.ActivityMgr.GetCatReturnGiftCfg(activityInfo.Id)
if cfg == nil {
player.SendErrClienRes(&msg.ResCatReturnGiftReward{
Code: msg.RES_CODE_FAIL,
Msg: "config not exist",
})
return fmt.Errorf("config not exist")
}
CatReturnGiftMod := player.GetCatReturnGiftMod()
reward := CatReturnGiftMod.GetReward()
score := CatReturnGiftMod.GetScore()
items := make([]*item.Item, 0)
var maxRewardId int
for _, v := range cfg.RewardList {
if score >= int(v.Score) && reward < int(v.Id) {
items = append(items, item.MsgToItem(v.Reward)...)
maxRewardId = max(maxRewardId, int(v.Id))
}
}
if len(items) == 0 {
player.SendErrClienRes(&msg.ResCatReturnGiftReward{
Code: msg.RES_CODE_FAIL,
Msg: "no reward",
})
return fmt.Errorf("no reward")
}
err = player.HandleItem(items, msg.ITEM_POP_LABEL_CatReturnGiftReward.String())
if err != nil {
player.SendErrClienRes(&msg.ResCatReturnGiftReward{
Code: msg.RES_CODE_FAIL,
Msg: err.Error(),
})
return err
}
CatReturnGiftMod.SetReward(maxRewardId)
player.TeLog("cat_return_gift_reward", map[string]interface{}{
"Score": score,
"RewardId": maxRewardId,
"Items": items,
})
player.PlayMod.save()
player.CatReturnGiftBackData()
return nil
}
func ReqCatReturnGiftRewardGfit(player *Player, buf []byte) error {
req := &msg.ReqCatReturnGiftRewardGfit{}
err := proto.Unmarshal(buf, req)
if err != nil {
return err
}
LimitedTimeEventMod := player.PlayMod.getLimitedTimeEventMod()
BaseMod := player.PlayMod.getBaseMod()
items, eventType, orderNum, rewardList, err := LimitedTimeEventMod.SelectProgressReward(int(req.Id), BaseMod.GetLevel(), BaseMod.GetEnergy())
if err != nil {
player.SendErrClienRes(&msg.ResSelectLimitEvent{
Code: msg.RES_CODE_FAIL,
Msg: err.Error(),
})
return err
}
err = player.HandleItem(items, msg.ITEM_POP_LABEL_SelectLimitEvent.String())
if err != nil {
player.SendErrClienRes(&msg.ResSelectLimitEvent{
Code: msg.RES_CODE_FAIL,
Msg: err.Error(),
})
return err
}
player.TeLog("time_limited_slot", map[string]interface{}{
"slot_order_number": orderNum,
"slot_reward_list": rewardList,
"slot_reward": limitedTimeEventCfg.GetEventName(eventType),
})
player.PlayMod.save()
player.PushClientRes(LimitedTimeEventMod.BackData())
player.PushClientRes(LimitedTimeEventMod.ProgressBackData())
player.PushClientRes(&msg.ResSelectLimitEvent{
Code: msg.RES_CODE_SUCCESS,
})
return nil
}