From e4dd46c0f7ea394d431808903e664f24c4f359c7 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 17 Jul 2025 15:36:56 +0800 Subject: [PATCH 01/19] =?UTF-8?q?playroom=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/PlayerFunc.go | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index 25fd86c7..29f40990 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -641,9 +641,8 @@ func BackChampship(p *Player) { func GetVisitorPlayer(p *Player) int { PlayroomMod := p.PlayMod.getPlayroomMod() - VisitorList := PlayroomMod.GetVisitor() - HasVisit := PlayroomMod.GetHasVisit() - TodayVisitedUsers := PlayroomMod.GetTodayVisitedUsers() + VisitorList := PlayroomMod.GetVisitor() // 到访用户 + TodayVisitedUsers := PlayroomMod.GetTodayVisitedUsers() // 今日已互动用户 FriendMod := p.PlayMod.getFriendMod() type sortData struct { Uid int @@ -652,10 +651,16 @@ func GetVisitorPlayer(p *Player) int { PlayerList := make([]sortData, 0) PlayerList2 := make([]sortData, 0) Now := GoUtil.Now() + /** + 排除当日玩家已对其发起过交互的用户 + 优先选择24小时内曾经与玩家进行过宠物交互的好友 + 若存在复数对象的情况下,优先选择交互发生时间与当前时间最近的好友 + 若不存在符合条件的用户,则选择24小时内曾经与玩家进行过宠物交互的陌生用户 + 若存在复数对象的情况下,优先选择交互发生时间与当前时间最近的用户 + 若不存在符合条件的用户,则选择24小时内登入过游戏且上次登入时间与当前时间最近的好友 + 若不存在符合条件的用户,则依据以上用户推荐算法,选择一位随机推荐用户,并且在下次触发式订单完成时,不再排除已发起过交互的用户 + */ for k, v := range VisitorList { - if _, ok := HasVisit[k]; ok { - continue - } if GoUtil.InArray(k, TodayVisitedUsers) { continue } @@ -694,11 +699,12 @@ func GetVisitorPlayer(p *Player) int { if ps == nil { continue } - if GoUtil.Now()-ps.Loginout <= 86400 { // 24小时内登录过 - if ps.Loginout > recentLoginTime { - recentLoginTime = ps.Loginout - recentFriendUid = uid - } + if GoUtil.Now()-ps.Loginout > 86400 { // 24小时内登录过 + continue + } + if ps.Loginout > recentLoginTime { + recentLoginTime = ps.Loginout + recentFriendUid = uid } } if recentFriendUid != 0 { From 0bab2987eddf07252d004e9273d7419ce5900cd1 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 17 Jul 2025 16:02:23 +0800 Subject: [PATCH 02/19] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/Player.go | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/game/Player.go b/src/server/game/Player.go index 10e616a4..3f080d5d 100644 --- a/src/server/game/Player.go +++ b/src/server/game/Player.go @@ -424,6 +424,7 @@ func (p *Player) AutoSaveData() { p.PlayerBaseMod.SaveDataFromDB("") p.PlayMod.ClearData(p) + p.UpdateUserInfo() err = tx.Commit() if err != nil { log.Debug("AutoSaveData Commit failed:", err) From cbeac8fd2a8f35c88adf2933a540578b3d33ee22 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 17 Jul 2025 16:04:45 +0800 Subject: [PATCH 03/19] =?UTF-8?q?Revert=20"=E5=A2=9E=E5=8A=A0=E5=AE=9A?= =?UTF-8?q?=E6=97=B6=E5=90=8C=E6=AD=A5"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 0bab2987eddf07252d004e9273d7419ce5900cd1. --- src/server/game/Player.go | 1 - 1 file changed, 1 deletion(-) diff --git a/src/server/game/Player.go b/src/server/game/Player.go index 3f080d5d..10e616a4 100644 --- a/src/server/game/Player.go +++ b/src/server/game/Player.go @@ -424,7 +424,6 @@ func (p *Player) AutoSaveData() { p.PlayerBaseMod.SaveDataFromDB("") p.PlayMod.ClearData(p) - p.UpdateUserInfo() err = tx.Commit() if err != nil { log.Debug("AutoSaveData Commit failed:", err) From c513cb0255032c3edf1ebf91538ac5d5f3ca475d Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 17 Jul 2025 16:36:37 +0800 Subject: [PATCH 04/19] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=A7=A6=E5=8F=91?= =?UTF-8?q?=E9=82=AE=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/Trigger.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/server/game/Trigger.go b/src/server/game/Trigger.go index b17258e7..4f4ee302 100644 --- a/src/server/game/Trigger.go +++ b/src/server/game/Trigger.go @@ -28,7 +28,6 @@ const ( func (player *Player) MailTrigger(Tr *quest.Trigger) bool { MailMod := player.PlayMod.getMailMod() - BaseMod := player.PlayMod.getBaseMod() TriggerMail := mailCfg.GetTriggerMail() t := make([]*mailCfg.TriggerMail, 0) for _, v := range TriggerMail { @@ -46,8 +45,8 @@ func (player *Player) MailTrigger(Tr *quest.Trigger) bool { tr := false for _, v := range t { if checkTriggerCondition(player, v.Trigger) { - Title := languageCfg.GetLanguage(BaseMod.Lang, v.Title) - Content := languageCfg.GetLanguage(BaseMod.Lang, v.Content) + Title := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_CN, v.Title) + Content := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_CN, v.Content) TitleEn := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_EN, v.Title) ContentEn := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_EN, v.Content) MailMod.Send(Title, "", Content, TitleEn, "", ContentEn, v.Items, v.Type) From 5155c779972622866b2510f5d1fe06e74d76a8e6 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 17 Jul 2025 16:43:35 +0800 Subject: [PATCH 05/19] =?UTF-8?q?=E5=B0=8F=E7=8C=AA=E5=AD=98=E9=92=B1?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/mod/piggyBank/piggyBank.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/server/game/mod/piggyBank/piggyBank.go b/src/server/game/mod/piggyBank/piggyBank.go index 9318c1fb..faeac010 100644 --- a/src/server/game/mod/piggyBank/piggyBank.go +++ b/src/server/game/mod/piggyBank/piggyBank.go @@ -65,8 +65,9 @@ func (p *PiggyBankMod) Trigger() { if p.EndTime < Now { return } - min, max := chargeCfg.GetPiggyRandDia() - p.Diamond += GoUtil.RandNum(min, max) + minDia, maxDia := chargeCfg.GetPiggyRandDia() + p.Diamond += GoUtil.RandNum(minDia, maxDia) + p.Diamond = min(p.Diamond, chargeCfg.GetPiggyMaxDia()) } func (p *PiggyBankMod) BackData() *msg.ResPiggyBank { From 45f3e27de2c04efeceed66e3d7348c2dda34fa25 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 18 Jul 2025 11:18:11 +0800 Subject: [PATCH 06/19] =?UTF-8?q?=E5=A4=B4=E5=83=8F=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/mod/face/Face.go | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/server/game/mod/face/Face.go b/src/server/game/mod/face/Face.go index 8101741c..bde96eb3 100644 --- a/src/server/game/mod/face/Face.go +++ b/src/server/game/mod/face/Face.go @@ -30,14 +30,19 @@ func (f *FaceMod) InitData() { now := GoUtil.Now() if f.List == nil { f.List = make(map[int]*Face) - InitId := faceCfg.GetInitList() - for _, v := range InitId { - f.List[v] = &Face{ - AddTime: now, - } - } + f.SetId = 1 } + InitId := faceCfg.GetInitList() + for _, v := range InitId { + if _, ok := f.List[v]; ok { + continue + } + // 初始化表情 + f.List[v] = &Face{ + AddTime: now, + } + } } func (f *FaceMod) GetFaceNum() int { From 4ef8aa86dc48c7fa8dbe3ed9526c9a980b11e368 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 18 Jul 2025 18:07:36 +0800 Subject: [PATCH 07/19] =?UTF-8?q?=E7=8C=AB=E8=8D=89=E5=A4=A7=E4=BD=9C?= =?UTF-8?q?=E6=88=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/GoUtil/GoUtil.go | 4 + src/server/conf/catnip/CatnipCfg.go | 25 + src/server/game/ActivityFunc.go | 70 +- src/server/game/FriendMgr.go | 39 +- src/server/game/GameLogic.go | 25 +- src/server/game/Gm.go | 7 +- src/server/game/Player.go | 4 +- src/server/game/PlayerBack.go | 1 + src/server/game/PlayerFunc.go | 37 + src/server/game/PlayerMod.go | 6 + src/server/game/RegisterNetworkFunc.go | 242 +++- src/server/game/Type.go | 25 +- src/server/game/VarMgr.go | 34 +- src/server/game/mod/activity/activity.go | 1 + src/server/game/mod/catnip/Catnip.go | 206 ++++ src/server/game/mod/msg/Msg.go | 11 + src/server/msg/Gameapi.pb.go | 1343 +++++++++++++++++++--- 17 files changed, 1863 insertions(+), 217 deletions(-) create mode 100644 src/server/conf/catnip/CatnipCfg.go create mode 100644 src/server/game/mod/catnip/Catnip.go diff --git a/src/server/GoUtil/GoUtil.go b/src/server/GoUtil/GoUtil.go index d6d084bd..494b9b8c 100644 --- a/src/server/GoUtil/GoUtil.go +++ b/src/server/GoUtil/GoUtil.go @@ -298,6 +298,10 @@ func GetUserKey(Uid int64) string { return fmt.Sprintf("user_data_%d", Uid) } +func GetCatnipLockKey(Uid, GameId int) string { + return fmt.Sprintf("catnip_lock_%d_%d", Uid, GameId) +} + func Rand6DigitNumber() string { n := rand.Intn(1000000) return fmt.Sprintf("%06d", n) diff --git a/src/server/conf/catnip/CatnipCfg.go b/src/server/conf/catnip/CatnipCfg.go new file mode 100644 index 00000000..df66ca03 --- /dev/null +++ b/src/server/conf/catnip/CatnipCfg.go @@ -0,0 +1,25 @@ +package catnipCfg + +import "server/gamedata" + +const ( + CATNIP_TEMPLATE_CFG_NAME = "CatnipTemplate" + CATNIP_JACKPOT_CFG_NAME = "CatnipJackpot" + CATNIP_MULTIPLIER_CFG_NAME = "CatnipMultiplier" + CATNIP_GAME_CFG_NAME = "CatnipGame" +) + +func init() { + gamedata.InitCfg(CATNIP_TEMPLATE_CFG_NAME) + gamedata.InitCfg(CATNIP_JACKPOT_CFG_NAME) + gamedata.InitCfg(CATNIP_MULTIPLIER_CFG_NAME) + gamedata.InitCfg(CATNIP_GAME_CFG_NAME) +} + +func GetGameNum(Id int) int { + data, err := gamedata.GetDataByIntKey(CATNIP_TEMPLATE_CFG_NAME, Id) + if err != nil { + return 0 + } + return gamedata.GetIntValue(data, "PassNum") +} diff --git a/src/server/game/ActivityFunc.go b/src/server/game/ActivityFunc.go index 8ec4d237..3bc39d4c 100644 --- a/src/server/game/ActivityFunc.go +++ b/src/server/game/ActivityFunc.go @@ -8,6 +8,7 @@ import ( mailCfg "server/conf/mail" miningCfg "server/conf/mining" raceCfg "server/conf/race" + "server/game/mod/activity" "server/game/mod/item" "server/game/mod/mail" "server/msg" @@ -17,7 +18,7 @@ import ( func ActivityLogin(p *Player) { ItemMod := p.PlayMod.getItemMod() // 挖矿 - ActivityId := GetActivityId(p, ACT_TYPE_MINING) + ActivityId := GetActivityId(p, activity.ACT_TYPE_MINING) MiningMod := p.PlayMod.getMiningMod() OldId := MiningMod.Login(ActivityId) if OldId != 0 { @@ -29,7 +30,7 @@ func ActivityLogin(p *Player) { } } // 猜颜色 - ActivityId = GetActivityId(p, ACT_TYPE_GUESS_COLOR) + ActivityId = GetActivityId(p, activity.ACT_TYPE_GUESS_COLOR) GuessColorMod := p.PlayMod.getGuessColorMod() OldId = GuessColorMod.Login(ActivityId) if OldId != 0 { @@ -42,7 +43,7 @@ func ActivityLogin(p *Player) { } // 赛跑 - ActivityId = GetActivityId(p, ACT_TYPE_RACE) + ActivityId = GetActivityId(p, activity.ACT_TYPE_RACE) RaceMod := p.PlayMod.getRaceMod() OldId = RaceMod.Login(ActivityId) if OldId != 0 { @@ -66,17 +67,17 @@ func SendActivityMail(p *Player, ItemId, ItemNum, ActivityId int) { // 活动模块 零点更新 func ActivityZeroUpdate(p *Player) { - ActivityInfo := GetActivityInfo(p, ACT_TYPE_MINING) + ActivityInfo := GetActivityInfo(p, activity.ACT_TYPE_MINING) if ActivityInfo != nil { MiningMod := p.PlayMod.getMiningMod() MiningMod.ZeroUpdate(ActivityInfo.Id) } - ActivityInfo = GetActivityInfo(p, ACT_TYPE_GUESS_COLOR) + ActivityInfo = GetActivityInfo(p, activity.ACT_TYPE_GUESS_COLOR) if ActivityInfo != nil { GuessColorMod := p.PlayMod.getGuessColorMod() GuessColorMod.ZeroUpdate(ActivityInfo.Id) } - ActivityInfo = GetActivityInfo(p, ACT_TYPE_RACE) + ActivityInfo = GetActivityInfo(p, activity.ACT_TYPE_RACE) if ActivityInfo != nil { RaceMod := p.PlayMod.getRaceMod() RaceMod.ZeroUpdate(ActivityInfo.Id) @@ -126,11 +127,11 @@ func GetActivityStatus(p *Player, actType int) int { } func MiningBackData(p *Player) { - ActivityInfo := GetActivityInfo(p, ACT_TYPE_MINING) + ActivityInfo := GetActivityInfo(p, activity.ACT_TYPE_MINING) if ActivityInfo == nil { return } - Status := GetActivityStatus(p, ACT_TYPE_MINING) + Status := GetActivityStatus(p, activity.ACT_TYPE_MINING) Template := miningCfg.GetTemplate(ActivityInfo.Id) MiningMod := p.PlayMod.getMiningMod() p.PushClientRes(&msg.ResMining{ @@ -146,12 +147,12 @@ func MiningBackData(p *Player) { } func GuessColorBackData(p *Player) { - ActivityInfo := GetActivityInfo(p, ACT_TYPE_GUESS_COLOR) + ActivityInfo := GetActivityInfo(p, activity.ACT_TYPE_GUESS_COLOR) if ActivityInfo == nil { return } - Status := GetActivityStatus(p, ACT_TYPE_GUESS_COLOR) + Status := GetActivityStatus(p, activity.ACT_TYPE_GUESS_COLOR) GuessColorMod := p.PlayMod.getGuessColorMod() MapList := make([]*msg.GuessColorInfo, 0) for _, v := range GuessColorMod.MapList { @@ -177,11 +178,11 @@ func GuessColorBackData(p *Player) { } func RaceBackData(p *Player) { - ActivityInfo := GetActivityInfo(p, ACT_TYPE_RACE) + ActivityInfo := GetActivityInfo(p, activity.ACT_TYPE_RACE) if ActivityInfo == nil { return } - Status := GetActivityStatus(p, ACT_TYPE_RACE) + Status := GetActivityStatus(p, activity.ACT_TYPE_RACE) RaceMod := p.PlayMod.getRaceMod() Opponent := make([]*msg.Raceopponent, 0) for _, v := range RaceMod.Opponent { @@ -229,13 +230,13 @@ func GetActivityItem(p *Player, ActType []int) []*item.Item { continue } switch v { - case ACT_TYPE_MINING: + case activity.ACT_TYPE_MINING: Item := miningCfg.GetLoseItem(ActivityInfo.Id) Items = item.Merge(Items, Item) - case ACT_TYPE_GUESS_COLOR: + case activity.ACT_TYPE_GUESS_COLOR: Item := guesscolorCfg.GetLoseItem(ActivityInfo.Id) Items = item.Merge(Items, Item) - case ACT_TYPE_RACE: + case activity.ACT_TYPE_RACE: ItemId := raceCfg.GetCoin(ActivityInfo.Id) Item := item.NewItem(ItemId, 1) Items = append(Items, Item) @@ -243,3 +244,42 @@ func GetActivityItem(p *Player, ActType []int) []*item.Item { } return Items } + +func (p *Player) CatnipBackData() { + CatnipMod := p.PlayMod.getCatnipMod() + Status := GetActivityStatus(p, activity.ACT_TYPE_CATNIP) + if CatnipMod == nil { + return + } + GameList := make([]*msg.CatnipGame, 0) + for _, v := range CatnipMod.Game { + GameInfo := &msg.CatnipGame{ + Id: int32(v.Id), + Progress: int32(v.Progress), + Status: int32(v.Status), + } + if v.Partner != 0 { + PlayerData := G_getGameLogic().GetResSimplePlayerByUid(v.Partner) + if PlayerData != nil { + GameInfo.Partner = PlayerData + } + } + GameList = append(GameList, GameInfo) + } + res := &msg.ResCatnip{ + Id: int32(CatnipMod.Id), + Status: int32(Status), + GameList: GameList, + } + p.PushClientRes(res) +} + +func (p *Player) SetCatnipGameLock(Uid int, GameId int) error { + ActivityInfo := GetActivityInfoById(p, activity.ACT_TYPE_CATNIP) + return G_GameLogicPtr.SetDataSync(int(p.M_DwUin), VAR_OP_CATNIP_LOCK, CatnipLock{ + Uid: int(p.M_DwUin), + Partner: Uid, + GameId: GameId, + End: int(ActivityInfo.EndT), // 锁 + }) +} diff --git a/src/server/game/FriendMgr.go b/src/server/game/FriendMgr.go index 7c5424e4..3d3ad1bd 100644 --- a/src/server/game/FriendMgr.go +++ b/src/server/game/FriendMgr.go @@ -74,11 +74,20 @@ func (f *FriendMgr) Init() { f.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_RESULT, f.sendToPlayer) f.RegisterHandler(msg.HANDLE_TYPE_TREASURE_RESULT, f.sendToPlayer) f.RegisterHandler(msg.HANDLE_TYPE_FACEBOOK_UNBIND, f.sendToPlayer) + + f.RegisterHandler(msg.HANDLE_TYPE_CATNIP_INVITE, f.sendToPlayer) + f.RegisterHandler(msg.HANDLE_TYPE_CATNIP_AGREE, f.sendToPlayer) + f.RegisterHandler(msg.HANDLE_TYPE_CATNIP_REFUSE, f.sendToPlayer) + f.RegisterHandler(msg.HANDLE_TYPE_CATNIP_GROWTH, f.sendToPlayer) + f.RegisterHandler(msg.HANDLE_TYPE_CATNIP_AGREE_DEL, f.sendToPlayer) + f.RegisterHandler(msg.HANDLE_TYPE_PLAYROOM_KISS, f.sendToPlayerOnline) - f.RegisterHandler(msg.HANDLE_TYPE_PLAYROOM_GAME, f.sendToPlayerOnline) + f.RegisterHandler(msg.HANDLE_TYPE_PLAYROOM_GAME, f.sendToPlayer) f.RegisterHandler(msg.HANDLE_TYPE_VAR_USER_GET, f.GetVarUserData) f.RegisterHandler(msg.HANDLE_TYPE_VAR_USER_SET, f.SetVarUserData) + + f.RegisterHandler(msg.HANDLE_TYPE_VAR_EXPIRE_SET, f.SetExpireVarData) } func (f *FriendMgr) getData() *FirendData { @@ -160,6 +169,34 @@ func (f *FriendMgr) SetVarUserData(m *msg.Msg) (interface{}, error) { }, nil } +func (f *FriendMgr) SetExpireVarData(m *msg.Msg) (interface{}, error) { + VarOp := m.Extra.(VarOpration) + switch VarOp.Type { + case VAR_OP_CATNIP_LOCK: + data := VarOp.Data.(CatnipLock) + MyKey := GoUtil.GetCatnipLockKey(data.Uid, data.GameId) + OtherKey := GoUtil.GetCatnipLockKey(data.Partner, data.GameId) + ExpireData := G_GameLogicPtr.VarMgr.GetExpireVar(OtherKey) + if _, ok := ExpireData.D.(*CatnipLock); ok { + return nil, fmt.Errorf("catnip lock already exists for %d in game %d", data.Uid, data.GameId) + } + G_GameLogicPtr.VarMgr.SetExpireVar(MyKey, &VarExpireData{ + T: int64(data.End + 24*3600), // 设置过期时间 + D: &data, + }) + G_GameLogicPtr.VarMgr.SetExpireVar(OtherKey, &VarExpireData{ + T: int64(data.End + 24*3600), // 设置过期时间 + D: &CatnipLock{ + Uid: data.Partner, + Partner: data.Uid, + GameId: data.GameId, + End: data.End, + }, + }) + } + return nil, nil +} + // 发送消息给玩家 func sendToPlayer(m *msg.Msg) error { p := G_GameLogicPtr.GetPlayer(int64(m.To)) diff --git a/src/server/game/GameLogic.go b/src/server/game/GameLogic.go index 05c74215..d97f8a9f 100644 --- a/src/server/game/GameLogic.go +++ b/src/server/game/GameLogic.go @@ -288,6 +288,17 @@ func (ad *GameLogic) SetUserData(Uid int, Op int, Data interface{}) { }) } +func (ad *GameLogic) SetDataSync(Uid int, Op int, Data interface{}) error { + _, err := ad.FriendMgr.Call(&MsgMod.Msg{ + From: Uid, + To: Uid, + Type: MsgMod.HANDLE_TYPE_VAR_EXPIRE_SET, + SendT: GoUtil.Now(), + Extra: VarOpration{Type: Op, Data: Data}, + }) + return err +} + func (ad *GameLogic) GetUserData(Uid int) *VarUserData { result, err := ad.FriendMgr.Call(&MsgMod.Msg{ From: Uid, @@ -806,7 +817,15 @@ func (ad *GameLogic) RegisterNetWorkFunc() { RegisterMsgProcessFunc("ReqRace", ReqRace) RegisterMsgProcessFunc("ReqRaceReward", ReqRaceReward) RegisterMsgProcessFunc("ReqRaceStart", ReqRaceStart) - + // 猫草大作战 + RegisterMsgProcessFunc("ReqCatnip", ReqCatnip) // 请求猫草大作战数据 + RegisterMsgProcessFunc("ReqCatnipInvite", ReqCatnipInvite) // 猫草大作战邀请好友 + RegisterMsgProcessFunc("ReqCatnipAgree", ReqCatnipAgree) // 同意邀请 + RegisterMsgProcessFunc("ReqCatnipRefuse", ReqCatnipRefuse) // 拒绝邀请 + RegisterMsgProcessFunc("ReqCatnipMultiply", ReqCatnipMultiply) // 猫草大作战倍数 + RegisterMsgProcessFunc("ReqCatnipPlay", ReqCatnipPlay) // 猫草大作战游戏转盘 + RegisterMsgProcessFunc("ReqCatnipReward", ReqCatnipReward) // 猫草大作战领取奖励 + RegisterMsgProcessFunc("ReqCatnipGrandReward", ReqCatnipGrandReward) // 猫草大作战领取大奖 // #region playroom RegisterMsgProcessFunc("ReqPlayroom", ReqPlayroom) // 请求playroom数据 RegisterMsgProcessFunc("ReqPlayroomInfo", ReqPlayroomInfo) // 请求playroom拜访信息 @@ -901,8 +920,8 @@ func NotifyPlayer(Uid int, m *MsgMod.Msg) { p.Send(m) } -func setRedisLock(key, value string, Duration time.Duration) bool { - return db.RedisLock(key, "", Duration) +func setRedisLock(key string, Duration time.Duration) bool { + return db.RedisLock(key, "lock", Duration) } func getRedisLock(key string) error { diff --git a/src/server/game/Gm.go b/src/server/game/Gm.go index 64c4e00b..6b5c87b6 100644 --- a/src/server/game/Gm.go +++ b/src/server/game/Gm.go @@ -14,6 +14,7 @@ import ( mergeDataCfg "server/conf/mergeData" playroomCfg "server/conf/playroom" "server/db" + "server/game/mod/activity" "server/game/mod/avatar" "server/game/mod/card" "server/game/mod/emoji" @@ -249,19 +250,19 @@ func ReqGmCommand_(player *Player, Command string) error { case "miningReload": MiningMod := player.PlayMod.getMiningMod() MiningMod.ZeroUpdate(-1) - ActivityInfo := GetActivityInfo(player, ACT_TYPE_MINING) + ActivityInfo := GetActivityInfo(player, activity.ACT_TYPE_MINING) MiningMod.ZeroUpdate(ActivityInfo.Id) MiningBackData(player) case "guessColorReload": GuessColorMod := player.PlayMod.getGuessColorMod() GuessColorMod.ZeroUpdate(-1) - ActivityInfo := GetActivityInfo(player, ACT_TYPE_GUESS_COLOR) + ActivityInfo := GetActivityInfo(player, activity.ACT_TYPE_GUESS_COLOR) GuessColorMod.ZeroUpdate(ActivityInfo.Id) GuessColorBackData(player) case "raceReload": RaceMod := player.PlayMod.getRaceMod() RaceMod.ZeroUpdate(-1) - ActivityInfo := GetActivityInfo(player, ACT_TYPE_RACE) + ActivityInfo := GetActivityInfo(player, activity.ACT_TYPE_RACE) RaceMod.ZeroUpdate(ActivityInfo.Id) RaceBackData(player) case "raceAdd": diff --git a/src/server/game/Player.go b/src/server/game/Player.go index 10e616a4..9675d178 100644 --- a/src/server/game/Player.go +++ b/src/server/game/Player.go @@ -972,11 +972,11 @@ func (p *Player) GetRed(AI *ActivityInfo) int { return 0 } // 限时活动红点 - if AI.Type == ACT_TYPE_MINING { + if AI.Type == activity.ACT_TYPE_MINING { ItemId := miningCfg.GetActivityItemId(AI.Id) return p.PlayMod.getItemMod().GetItem(ItemId) } - if AI.Type == ACT_TYPE_GUESS_COLOR { + if AI.Type == activity.ACT_TYPE_GUESS_COLOR { ItemId := guesscolorCfg.GetActivityItemId(AI.Id) return p.PlayMod.getItemMod().GetItem(ItemId) } diff --git a/src/server/game/PlayerBack.go b/src/server/game/PlayerBack.go index 72c8c735..3fa14edc 100644 --- a/src/server/game/PlayerBack.go +++ b/src/server/game/PlayerBack.go @@ -103,6 +103,7 @@ func PlayroomBackData(p *Player) { func PlayroomVisit(p *Player, Uid int) { if Uid == 0 { + p.PushClientRes(&proto.ResPlayroomInfo{}) return } PlayroomMod := p.PlayMod.getPlayroomMod() diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index 29f40990..04603abb 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -16,6 +16,7 @@ import ( playroomCfg "server/conf/playroom" userCfg "server/conf/user" "server/db" + "server/game/mod/activity" "server/game/mod/card" "server/game/mod/friend" "server/game/mod/item" @@ -308,6 +309,42 @@ func handle(p *Player, m *msg.Msg) error { p.PushClientRes(ChargeMod.BackData()) case msg.HANDLE_TYPE_PLAYROOM_KISS: // playroom亲吻 p.NotifyPlayroomKiss() + case msg.HANDLE_TYPE_CATNIP_INVITE: + CatnipMod := p.PlayMod.getCatnipMod() + CatnipMsg := m.Extra.(CatnipMsg) + ActivityId := GetActivityId(p, activity.ACT_TYPE_CATNIP) + if ActivityId != CatnipMsg.ActivityId { // 活动ID不匹配 + return nil + } + CatnipMod.BeInvited(CatnipMsg.GameId, int(m.From), m.SendT) + case msg.HANDLE_TYPE_CATNIP_AGREE: + CatnipMod := p.PlayMod.getCatnipMod() + CatnipMsgInfo := m.Extra.(CatnipMsg) + ActivityId := GetActivityId(p, activity.ACT_TYPE_CATNIP) + if ActivityId != CatnipMsgInfo.ActivityId { // 活动ID不匹配 + return nil + } + UserList, _ := CatnipMod.Agree(CatnipMsgInfo.GameId, int(m.From)) + for _, v := range UserList { + FriendMgrSend(&msg.Msg{ + From: int(p.M_DwUin), + To: int(v), + Type: msg.HANDLE_TYPE_CATNIP_AGREE, + Extra: CatnipMsg{ + ActivityId: ActivityId, + GameId: int(CatnipMsgInfo.GameId), + }, + SendT: GoUtil.Now(), + }) + } + case msg.HANDLE_TYPE_CATNIP_AGREE_DEL: + CatnipMod := p.PlayMod.getCatnipMod() + CatnipMsg := m.Extra.(CatnipMsg) + ActivityId := GetActivityId(p, activity.ACT_TYPE_CATNIP) + if ActivityId != CatnipMsg.ActivityId { // 活动ID不匹配 + return nil + } + CatnipMod.DelInvited(CatnipMsg.GameId, int(m.From)) default: log.Debug("uid : %d, handle msg type : %d not exist", p.M_DwUin, m.Type) } diff --git a/src/server/game/PlayerMod.go b/src/server/game/PlayerMod.go index e749fd4d..87850102 100644 --- a/src/server/game/PlayerMod.go +++ b/src/server/game/PlayerMod.go @@ -9,6 +9,7 @@ import ( "server/game/mod/avatar" "server/game/mod/base" "server/game/mod/card" + "server/game/mod/catnip" "server/game/mod/champship" "server/game/mod/charge" "server/game/mod/chess" @@ -79,6 +80,7 @@ type PlayerModList struct { Collect collect.Collect // 收集 Activity activity.Activity // 活动 Compensation compensation.Compensation // 补偿 + Catnip catnip.CatnipMod // 猫草大作战 } func (p *PlayerModData) LoadDataFromDB(dwUin interface{}) bool { @@ -176,6 +178,7 @@ func (p *PlayerModData) InitMod(player *Player) (bool, error) { p.ModList.Emoji.InitData() p.ModList.Collect.InitData() p.ModList.Activity.InitData() + p.ModList.Catnip.InitData() return is_update, nil } @@ -366,3 +369,6 @@ func (p *PlayerMod) getActivityMod() *activity.Activity { func (p *PlayerMod) getCompensationMod() *compensation.Compensation { return &p.mod_list.Compensation } +func (p *PlayerMod) getCatnipMod() *catnip.CatnipMod { + return &p.mod_list.Catnip +} diff --git a/src/server/game/RegisterNetworkFunc.go b/src/server/game/RegisterNetworkFunc.go index 4f783c49..fab5069b 100644 --- a/src/server/game/RegisterNetworkFunc.go +++ b/src/server/game/RegisterNetworkFunc.go @@ -15,6 +15,7 @@ import ( playroomCfg "server/conf/playroom" "server/db" "server/game/internal" + "server/game/mod/activity" "server/game/mod/card" "server/game/mod/collect" "server/game/mod/friend" @@ -2958,8 +2959,8 @@ func ReqMiningTake(player *Player, buf []byte) error { req := &msg.ReqMiningTake{} proto.Unmarshal(buf, req) MiningMod := player.PlayMod.getMiningMod() - ActivityInfo := GetActivityInfo(player, ACT_TYPE_MINING) - Status := GetActivityStatus(player, ACT_TYPE_MINING) + ActivityInfo := GetActivityInfo(player, activity.ACT_TYPE_MINING) + Status := GetActivityStatus(player, activity.ACT_TYPE_MINING) if Status != ACT_STATUS_START { player.SendErrClienRes(&msg.ResMiningTake{ Code: msg.RES_CODE_FAIL, @@ -2994,7 +2995,7 @@ func ReqMiningTake(player *Player, buf []byte) error { } player.TeLog("ReqMiningTake", map[string]interface{}{}) player.PlayMod.save() - player.NotifyRed(ACT_TYPE_MINING) + player.NotifyRed(activity.ACT_TYPE_MINING) MiningBackData(player) return nil } @@ -3002,7 +3003,7 @@ func ReqMiningTake(player *Player, buf []byte) error { // 领取关卡奖励 func ReqMiningReward(player *Player, buf []byte) error { MiningMod := player.PlayMod.getMiningMod() - Status := GetActivityStatus(player, ACT_TYPE_MINING) + Status := GetActivityStatus(player, activity.ACT_TYPE_MINING) if Status != ACT_STATUS_START { player.SendErrClienRes(&msg.ResMiningReward{ Code: msg.RES_CODE_FAIL, @@ -3057,7 +3058,7 @@ func ReqGuessColor(player *Player, buf []byte) error { func ReqGuessColorTake(player *Player, buf []byte) error { req := &msg.ReqGuessColorTake{} proto.Unmarshal(buf, req) - Status := GetActivityStatus(player, ACT_TYPE_GUESS_COLOR) + Status := GetActivityStatus(player, activity.ACT_TYPE_GUESS_COLOR) if Status != ACT_STATUS_START { player.SendErrClienRes(&msg.ResGuessColorTake{ Code: msg.RES_CODE_FAIL, @@ -3082,7 +3083,7 @@ func ReqGuessColorTake(player *Player, buf []byte) error { }) player.PlayMod.save() GuessColorBackData(player) - player.NotifyRed(ACT_TYPE_GUESS_COLOR) + player.NotifyRed(activity.ACT_TYPE_GUESS_COLOR) return nil } @@ -3090,7 +3091,7 @@ func ReqGuessColorTake(player *Player, buf []byte) error { func ReqGuessColorReward(player *Player, buf []byte) error { req := &msg.ReqGuessColorReward{} proto.Unmarshal(buf, req) - Status := GetActivityStatus(player, ACT_TYPE_GUESS_COLOR) + Status := GetActivityStatus(player, activity.ACT_TYPE_GUESS_COLOR) if Status != ACT_STATUS_START { player.SendErrClienRes(&msg.ResGuessColorReward{ Code: msg.RES_CODE_FAIL, @@ -3199,7 +3200,7 @@ func ReqPlayroomInfo(player *Player, buf []byte) error { Targer = GetVisitorPlayer(player) } if Targer == 0 { - return fmt.Errorf("ReqPlayroomInfo no target") + PlayroomVisit(player, Targer) } PlayerData := G_GameLogicPtr.GetSimplePlayerByUid(Targer) PlayroomMod.SetTarget(Targer) @@ -4679,3 +4680,228 @@ func ReqPlayroomGuide(player *Player, buf []byte) error { }) return nil } + +func ReqCatnip(player *Player, buf []byte) error { + player.CatnipBackData() + return nil +} + +// TODO : 猫草大作战邀请好友 +func ReqCatnipInvite(player *Player, buf []byte) error { + req := &msg.ReqCatnipInvite{} + proto.Unmarshal(buf, req) + ActivityId := GetActivityId(player, activity.ACT_TYPE_MINING) + CatnipMod := player.PlayMod.getCatnipMod() + err := CatnipMod.Invite(int(req.Id), int(req.Uid)) + if err != nil { + player.SendErrClienRes(&msg.ResCatnipInvite{ + Code: msg.RES_CODE_FAIL, + Msg: err.Error(), + }) + return err + } + player.TeLog("catnip_invite", map[string]interface{}{ + "Id": int(req.Id), + }) + FriendMgrSend(&MsqMod.Msg{ + From: int(player.M_DwUin), + To: int(req.Uid), + Type: MsqMod.HANDLE_TYPE_CATNIP_INVITE, + Extra: CatnipMsg{ + ActivityId: ActivityId, + GameId: int(req.Id), + }, + SendT: GoUtil.Now(), + }) + + player.PlayMod.save() + player.PushClientRes(&msg.ResCatnipInvite{ + Code: msg.RES_CODE_SUCCESS, + }) + return nil +} + +func ReqCatnipAgree(player *Player, buf []byte) error { + req := &msg.ReqCatnipAgree{} + proto.Unmarshal(buf, req) + CatnipMod := player.PlayMod.getCatnipMod() + ActivityId := GetActivityId(player, activity.ACT_TYPE_MINING) + UserList, err := CatnipMod.Agree(int(req.Id), int(req.Uid)) + if err != nil { + player.SendErrClienRes(&msg.ResCatnipAgree{ + Code: msg.RES_CODE_FAIL, + Msg: err.Error(), + }) + return err + } + player.TeLog("catnip_agree", map[string]interface{}{ + "Id": int(req.Id), + }) + FriendMgrSend(&MsqMod.Msg{ + From: int(player.M_DwUin), + To: int(req.Uid), + Type: MsqMod.HANDLE_TYPE_CATNIP_AGREE, + Extra: CatnipMsg{ + ActivityId: ActivityId, + GameId: int(req.Id), + }, + SendT: GoUtil.Now(), + }) + + for _, v := range UserList { + FriendMgrSend(&MsqMod.Msg{ + From: int(player.M_DwUin), + To: int(v), + Type: MsqMod.HANDLE_TYPE_CATNIP_AGREE, + Extra: CatnipMsg{ + ActivityId: ActivityId, + GameId: int(req.Id), + }, + SendT: GoUtil.Now(), + }) + } + player.PlayMod.save() + player.PushClientRes(&msg.ResCatnipAgree{ + Code: msg.RES_CODE_SUCCESS, + }) + return nil +} + +// TODO : 猫草大作战设置倍数 +func ReqCatnipMultiply(player *Player, buf []byte) error { + req := &msg.ReqCatnipMultiply{} + proto.Unmarshal(buf, req) + CatnipMod := player.PlayMod.getCatnipMod() + err := CatnipMod.Multiply(int(req.Id), int(req.Multiply)) + if err != nil { + player.SendErrClienRes(&msg.ResCatnipMultiply{ + Code: msg.RES_CODE_FAIL, + Msg: err.Error(), + }) + return err + } + player.TeLog("catnip_multiply", map[string]interface{}{ + "Id": int(req.Id), + }) + player.PlayMod.save() + player.PushClientRes(&msg.ResCatnipMultiply{ + Code: msg.RES_CODE_SUCCESS, + }) + return nil +} + +// TODO : 猫草大作战开始游戏 +func ReqCatnipPlay(player *Player, buf []byte) error { + req := &msg.ReqCatnipPlay{} + proto.Unmarshal(buf, req) + CatnipMod := player.PlayMod.getCatnipMod() + err := CatnipMod.Play(int(req.Id)) + if err != nil { + player.SendErrClienRes(&msg.ResCatnipPlay{ + Code: msg.RES_CODE_FAIL, + Msg: err.Error(), + }) + return err + } + player.TeLog("catnip_play", map[string]interface{}{ + "Id": int(req.Id), + }) + player.PlayMod.save() + player.PushClientRes(&msg.ResCatnipPlay{ + Code: msg.RES_CODE_SUCCESS, + }) + return nil +} + +// TODO : 猫草大作战领取奖励 +func ReqCatnipReward(player *Player, buf []byte) error { + req := &msg.ReqCatnipReward{} + proto.Unmarshal(buf, req) + CatnipMod := player.PlayMod.getCatnipMod() + Items, err := CatnipMod.Reward(int(req.Progress)) + if err != nil { + player.SendErrClienRes(&msg.ResCatnipReward{ + Code: msg.RES_CODE_FAIL, + Msg: err.Error(), + }) + return err + } + err = player.HandleItem(Items, msg.ITEM_POP_LABEL_CatnipReward.String()) + if err != nil { + player.SendErrClienRes(&msg.ResCatnipReward{ + Code: msg.RES_CODE_FAIL, + Msg: err.Error(), + }) + return err + } + player.TeLog("catnip_reward", map[string]interface{}{ + "Items": Items, + }) + player.PlayMod.save() + player.PushClientRes(&msg.ResCatnipReward{ + Code: msg.RES_CODE_SUCCESS, + }) + return nil +} + +func ReqCatnipGrandReward(player *Player, buf []byte) error { + req := &msg.ReqCatnipGrandReward{} + proto.Unmarshal(buf, req) + CatnipMod := player.PlayMod.getCatnipMod() + Items, err := CatnipMod.GrandReward() + if err != nil { + player.SendErrClienRes(&msg.ResCatnipGrandReward{ + Code: msg.RES_CODE_FAIL, + Msg: err.Error(), + }) + return err + } + err = player.HandleItem(Items, msg.ITEM_POP_LABEL_CatnipGrandReward.String()) + if err != nil { + player.SendErrClienRes(&msg.ResCatnipGrandReward{ + Code: msg.RES_CODE_FAIL, + Msg: err.Error(), + }) + return err + } + player.TeLog("catnip_grand_reward", map[string]interface{}{ + "Items": Items, + }) + player.PlayMod.save() + player.PushClientRes(&msg.ResCatnipGrandReward{ + Code: msg.RES_CODE_SUCCESS, + }) + return nil +} + +func ReqCatnipRefuse(player *Player, buf []byte) error { + req := &msg.ReqCatnipRefuse{} + proto.Unmarshal(buf, req) + CatnipMod := player.PlayMod.getCatnipMod() + err := CatnipMod.Refuse(int(req.Id), int(req.Uid)) + if err != nil { + player.SendErrClienRes(&msg.ResCatnipRefuse{ + Code: msg.RES_CODE_FAIL, + Msg: err.Error(), + }) + return err + } + player.TeLog("catnip_refuse", map[string]interface{}{ + "Id": int(req.Id), + }) + FriendMgrSend(&MsqMod.Msg{ + From: int(player.M_DwUin), + To: int(req.Uid), + Type: MsqMod.HANDLE_TYPE_CATNIP_REFUSE, + SendT: GoUtil.Now(), + Extra: CatnipMsg{ + ActivityId: GetActivityId(player, activity.ACT_TYPE_MINING), + GameId: int(req.Id), + }, + }) + player.PlayMod.save() + player.PushClientRes(&msg.ResCatnipRefuse{ + Code: msg.RES_CODE_SUCCESS, + }) + return nil +} diff --git a/src/server/game/Type.go b/src/server/game/Type.go index d353ca89..5e0c6e84 100644 --- a/src/server/game/Type.go +++ b/src/server/game/Type.go @@ -48,18 +48,17 @@ type VarUserData struct { Kiss int } +type VarExpireData struct { + D interface{} + T int64 +} + const ( ACT_STATUS_NOT_START = 0 ACT_STATUS_START = 1 ACT_STATUS_END = 2 ) -const ( - ACT_TYPE_MINING = 1 // 挖矿 - ACT_TYPE_GUESS_COLOR = 2 // 猜颜色 - ACT_TYPE_RACE = 3 // 赛跑 -) - type ActivityInfo struct { StartT int64 EndT int64 @@ -83,6 +82,18 @@ type GameResult struct { Emoji int // 表情 } +type CatnipMsg struct { + ActivityId int + GameId int +} + +type CatnipLock struct { + Uid int // 玩家ID + Partner int // 伙伴ID + GameId int // 游戏ID + End int +} + func init() { gob.Register(&limitedTimeEvent.MoneyCat{}) gob.Register(&limitedTimeEvent.LuckyCat{}) @@ -93,4 +104,6 @@ func init() { gob.Register(&ActivityInfo{}) gob.Register(&ChargeExtra{}) gob.Register(&GameResult{}) + gob.Register(&CatnipMsg{}) + gob.Register(&CatnipLock{}) } diff --git a/src/server/game/VarMgr.go b/src/server/game/VarMgr.go index af55e09f..aa195ca9 100644 --- a/src/server/game/VarMgr.go +++ b/src/server/game/VarMgr.go @@ -13,9 +13,10 @@ type VarMgr struct { } type VarData struct { - Var map[string]interface{} - UserVar map[string]*VarUserData - ZeroTime int64 + Var map[string]interface{} + VarExpire map[string]*VarExpireData + UserVar map[string]*VarUserData + ZeroTime int64 } const ( @@ -25,10 +26,11 @@ const ( ) const ( - VAR_OP_UPVOTE = 1 - VAR_OP_CHIP = 2 - VAR_OP_KISS = 3 - VAR_OP_CHIP_SET = 4 + VAR_OP_UPVOTE = 1 + VAR_OP_CHIP = 2 + VAR_OP_KISS = 3 + VAR_OP_CHIP_SET = 4 + VAR_OP_CATNIP_LOCK = 5 ) func (f *VarMgr) Init() { @@ -69,6 +71,11 @@ func (f *VarMgr) ZeroUpdate(m *msg.Msg) (interface{}, error) { Four: Card1, Five: Card2, }) + for k, v := range f.getData().VarExpire { + if v.T < GoUtil.ZeroTimestamp() { + delete(f.getData().VarExpire, k) + } + } return nil, nil } @@ -80,6 +87,19 @@ func (f *VarMgr) GetVar(key string) interface{} { return f.getData().Var[key] } +func (f *VarMgr) SetExpireVar(key string, value *VarExpireData) { + f.getData().VarExpire[key] = value +} + +func (f *VarMgr) GetExpireVar(key string) *VarExpireData { + if v, ok := f.getData().VarExpire[key]; ok { + return v + } + data := &VarExpireData{} + f.getData().VarExpire[key] = data + return data +} + func (f *VarMgr) SetUserVar(key string, value *VarUserData) { f.getData().UserVar[key] = value } diff --git a/src/server/game/mod/activity/activity.go b/src/server/game/mod/activity/activity.go index 25972374..272f3aa1 100644 --- a/src/server/game/mod/activity/activity.go +++ b/src/server/game/mod/activity/activity.go @@ -22,6 +22,7 @@ const ( ACT_TYPE_DISCOUNT_GIFT = 4 // 折扣礼包 ACT_TYPE_ADD_GIFT = 5 // 加送礼包 ACT_TYPE_SUPER_GIFT = 6 // 超值加购礼包 + ACT_TYPE_CATNIP = 7 // 猫草大作战 ) const ( diff --git a/src/server/game/mod/catnip/Catnip.go b/src/server/game/mod/catnip/Catnip.go new file mode 100644 index 00000000..25a2f030 --- /dev/null +++ b/src/server/game/mod/catnip/Catnip.go @@ -0,0 +1,206 @@ +package catnip + +import ( + "fmt" + "server/GoUtil" + catnipCfg "server/conf/catnip" + "server/game/mod/item" +) + +type CatnipMod struct { + Id int + Game map[int]*CatnipGame + InviteList map[int][]*InviteInfo // 邀请列表,key: 邀请者ID, value: 被邀请者ID + BeInvitedList map[int][]*InviteInfo // 被邀请列表,key: 被邀请者ID, value: 邀请者ID +} + +type InviteInfo struct { + InviteId int // 邀请者ID + Time int64 // 邀请时间 +} + +type CatnipGame struct { + Id int // 游戏ID + Partner int // 伙伴ID + Progress int // 进度 + PartnerAdd int // 伙伴贡献 + Reward []int // 已领取阶段奖励 + Mul int // 倍数 + Status int // 0: Not Started, 1: In Progress, 2: Completed +} + +const ( + GAME_STATUS_IDLE = 0 // 游戏未开始 + GAME_STATUS_IN_PROGRESS = 1 // 游戏进行中 + GAME_STATUS_COMPLETED = 2 // 游戏已完成 +) + +func (c *CatnipMod) InitData() { + // Initialize Catnip data here + if c.Game == nil { + c.Game = make(map[int]*CatnipGame) + } + if c.InviteList == nil { + c.InviteList = make(map[int][]*InviteInfo) + } + if c.BeInvitedList == nil { + c.BeInvitedList = make(map[int][]*InviteInfo) + } +} + +func (c *CatnipMod) Login(Id int) int { + OldId := c.Id + if Id == 0 { + c.Id = 0 + return OldId + } + if c.Id == Id { + return 0 + } + c.Id = Id + c.Game = make(map[int]*CatnipGame) + GameNum := catnipCfg.GetGameNum(c.Id) // Assuming 1 is the default game ID + for i := 1; i <= GameNum; i++ { + c.Game[i] = &CatnipGame{ + Id: i, + Partner: 0, // No partner initially + Progress: 0, // Initial progress + Status: GAME_STATUS_IDLE, // Not started + } + } + return c.Id +} + +func (c *CatnipMod) ZeroUpdate(Id int) { + c.Login(Id) +} + +func (c *CatnipMod) Invite(Id, Uid int) error { + GameInfo, ok := c.Game[Id] + if !ok { + return fmt.Errorf("game with ID %d does not exist", Id) + } + if GameInfo.Status != 0 { + return fmt.Errorf("game with ID %d is already in progress or completed", Id) + } + for _, invite := range c.InviteList[Id] { + if invite.InviteId == Uid { + return fmt.Errorf("user with ID %d is already invited to game ID %d", Uid, Id) + } + } + c.InviteList[Id] = append(c.InviteList[Id], &InviteInfo{ + InviteId: Uid, + Time: GoUtil.Now(), + }) + return nil +} + +func (c *CatnipMod) BeInvited(Id, Uid int, Time int64) error { + GameInfo, ok := c.Game[Id] + if !ok { + return fmt.Errorf("game with ID %d does not exist", Id) + } + if GameInfo.Status != GAME_STATUS_IDLE { + return fmt.Errorf("game with ID %d is already in progress or completed", Id) + } + // Check if the user is already invited + for _, invite := range c.BeInvitedList[Uid] { + if invite.InviteId == Id { + return fmt.Errorf("user with ID %d has already been invited to game ID %d", Uid, Id) + } + } + c.BeInvitedList[Uid] = append(c.BeInvitedList[Uid], &InviteInfo{ + InviteId: Id, + Time: Time, + }) + return nil +} + +func (c *CatnipMod) Agree(Id, Uid int) ([]int, error) { + GameInfo, ok := c.Game[Id] + if !ok { + return nil, fmt.Errorf("game with ID %d does not exist", Id) + } + if GameInfo.Status != GAME_STATUS_IDLE { + return nil, fmt.Errorf("game with ID %d is already in progress or completed", Id) + } + // Check if the user is in the invite list + inviteList, exists := c.InviteList[Id] + if !exists { + return nil, fmt.Errorf("no invites found for game ID %d", Id) + } + userExists := false + InviteUser := []int{} + for _, invite := range inviteList { + if invite.InviteId == Uid { + userExists = true + continue + } + InviteUser = append(InviteUser, invite.InviteId) + + } + if !userExists { + return nil, fmt.Errorf("user with ID %d is not invited to game ID %d", Uid, Id) + } + c.InviteList[Id] = make([]*InviteInfo, 0) // Clear the invite list after agreeing + GameInfo.Partner = Uid // Set the partner for the game + GameInfo.Status = GAME_STATUS_COMPLETED // Set the game status to in progress + return InviteUser, nil +} + +func (c *CatnipMod) DelInvited(Id, Uid int) error { + GameInfo, ok := c.Game[Id] + if !ok { + return fmt.Errorf("game with ID %d does not exist", Id) + } + if GameInfo.Status != GAME_STATUS_IDLE { + return fmt.Errorf("game with ID %d is already in progress or completed", Id) + } + for k, invite := range c.BeInvitedList[Id] { + if invite.InviteId == Uid { + // Remove the invite from the list + c.BeInvitedList[Id] = append(c.InviteList[Id][:k], c.InviteList[Id][k+1:]...) + return nil + } + } + return fmt.Errorf("user with ID %d is not invited to game ID %d", Uid, Id) +} + +func (c *CatnipMod) Multiply(Id, Mul int) error { + GameInfo, ok := c.Game[Id] + if !ok { + return fmt.Errorf("game with ID %d does not exist", Id) + } + GameInfo.Mul = Mul + return nil +} + +func (c *CatnipMod) Refuse(Id, Uid int) error { + GameInfo, ok := c.Game[Id] + if !ok { + return fmt.Errorf("game with ID %d does not exist", Id) + } + if GameInfo.Status != GAME_STATUS_IDLE { + return fmt.Errorf("game with ID %d is already in progress or completed", Id) + } + for k, invite := range c.InviteList[Id] { + if invite.InviteId == Uid { + // Remove the invite from the list + c.InviteList[Id] = append(c.InviteList[Id][:k], c.InviteList[Id][k+1:]...) + return nil + } + } + return nil +} + +func (c *CatnipMod) Play(Id int) error { + return nil +} + +func (c *CatnipMod) Reward(Id int) ([]*item.Item, error) { + return nil, nil +} + +func (c *CatnipMod) GrandReward() ([]*item.Item, error) { + return nil, nil +} diff --git a/src/server/game/mod/msg/Msg.go b/src/server/game/mod/msg/Msg.go index 3c8e36ac..58b0ddc9 100644 --- a/src/server/game/mod/msg/Msg.go +++ b/src/server/game/mod/msg/Msg.go @@ -93,6 +93,17 @@ const ( HANDLE_TYPE_PLAYROOM_KISS // playroom亲吻 HANDLE_TYPE_PLAYROOM_GAME // playroom游戏 + + HANDLE_TYPE_CATNIP_INVITE // 猫薄荷邀请 + HANDLE_TYPE_CATNIP_AGREE // 猫薄荷同意邀请 + HANDLE_TYPE_CATNIP_AGREE_DEL // 猫薄荷已同意邀请 + HANDLE_TYPE_CATNIP_REFUSE // 猫薄荷拒绝邀请 + HANDLE_TYPE_CATNIP_GROWTH // 猫薄荷成长 + + HANDLE_TYPE_CATNIP_LOCK // 猫薄荷游戏锁定 + + HANDLE_TYPE_VAR_EXPIRE_SET // 设置全服过期数据 + HANDLE_TYPE_VAR_EXPIRE_GET // 获取全服过期数据 ) const ( diff --git a/src/server/msg/Gameapi.pb.go b/src/server/msg/Gameapi.pb.go index 188928d7..fb6e6461 100644 --- a/src/server/msg/Gameapi.pb.go +++ b/src/server/msg/Gameapi.pb.go @@ -91,6 +91,8 @@ const ( ITEM_POP_LABEL_PlayroomTaskReward ITEM_POP_LABEL = 64 // playroom任务奖励 大奖 ITEM_POP_LABEL_PlayroomUpvote ITEM_POP_LABEL = 65 // 玩家点赞 ITEM_POP_LABEL_DecorateReward ITEM_POP_LABEL = 66 // 装饰奖励 + ITEM_POP_LABEL_CatnipReward ITEM_POP_LABEL = 67 // 猫草大作战奖励 + ITEM_POP_LABEL_CatnipGrandReward ITEM_POP_LABEL = 68 // 猫草大作战大奖奖励 ) // Enum value maps for ITEM_POP_LABEL. @@ -163,6 +165,8 @@ var ( 64: "PlayroomTaskReward", 65: "PlayroomUpvote", 66: "DecorateReward", + 67: "CatnipReward", + 68: "CatnipGrandReward", } ITEM_POP_LABEL_value = map[string]int32{ "Playroom": 0, @@ -232,6 +236,8 @@ var ( "PlayroomTaskReward": 64, "PlayroomUpvote": 65, "DecorateReward": 66, + "CatnipReward": 67, + "CatnipGrandReward": 68, } ) @@ -23402,6 +23408,916 @@ func (x *ResCollect) GetMsg() string { return "" } +// #region 猫草大作战 +// ----------------【猫草大作战】-------------- +// 猫草大作战详细信息 +type ReqCatnip struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReqCatnip) Reset() { + *x = ReqCatnip{} + mi := &file_proto_Gameapi_proto_msgTypes[411] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReqCatnip) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReqCatnip) ProtoMessage() {} + +func (x *ReqCatnip) ProtoReflect() protoreflect.Message { + mi := &file_proto_Gameapi_proto_msgTypes[411] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReqCatnip.ProtoReflect.Descriptor instead. +func (*ReqCatnip) Descriptor() ([]byte, []int) { + return file_proto_Gameapi_proto_rawDescGZIP(), []int{411} +} + +type ResCatnip struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 活动id + Status int32 `protobuf:"varint,2,opt,name=Status,proto3" json:"Status,omitempty"` // 0 未开始 1 进行中 2 已结束 + EndTime int32 `protobuf:"varint,3,opt,name=EndTime,proto3" json:"EndTime,omitempty"` // 结束时间 + Template int32 `protobuf:"varint,4,opt,name=Template,proto3" json:"Template,omitempty"` // 模板 + GameList []*CatnipGame `protobuf:"bytes,5,rep,name=GameList,proto3" json:"GameList,omitempty"` // 小游戏列表 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ResCatnip) Reset() { + *x = ResCatnip{} + mi := &file_proto_Gameapi_proto_msgTypes[412] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ResCatnip) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResCatnip) ProtoMessage() {} + +func (x *ResCatnip) ProtoReflect() protoreflect.Message { + mi := &file_proto_Gameapi_proto_msgTypes[412] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResCatnip.ProtoReflect.Descriptor instead. +func (*ResCatnip) Descriptor() ([]byte, []int) { + return file_proto_Gameapi_proto_rawDescGZIP(), []int{412} +} + +func (x *ResCatnip) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *ResCatnip) GetStatus() int32 { + if x != nil { + return x.Status + } + return 0 +} + +func (x *ResCatnip) GetEndTime() int32 { + if x != nil { + return x.EndTime + } + return 0 +} + +func (x *ResCatnip) GetTemplate() int32 { + if x != nil { + return x.Template + } + return 0 +} + +func (x *ResCatnip) GetGameList() []*CatnipGame { + if x != nil { + return x.GameList + } + return nil +} + +// 小游戏信息 +type CatnipGame struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 猫草id + Status int32 `protobuf:"varint,2,opt,name=Status,proto3" json:"Status,omitempty"` // 0 未开始 1 进行中 2 已结束 + Progress int32 `protobuf:"varint,3,opt,name=Progress,proto3" json:"Progress,omitempty"` // 进度 + Reward []int32 `protobuf:"varint,4,rep,packed,name=Reward,proto3" json:"Reward,omitempty"` // 已领取进度奖励列表 [100,150,200] + Partner *ResPlayerSimple `protobuf:"bytes,5,opt,name=Partner,proto3" json:"Partner,omitempty"` // 伙伴 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CatnipGame) Reset() { + *x = CatnipGame{} + mi := &file_proto_Gameapi_proto_msgTypes[413] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CatnipGame) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CatnipGame) ProtoMessage() {} + +func (x *CatnipGame) ProtoReflect() protoreflect.Message { + mi := &file_proto_Gameapi_proto_msgTypes[413] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CatnipGame.ProtoReflect.Descriptor instead. +func (*CatnipGame) Descriptor() ([]byte, []int) { + return file_proto_Gameapi_proto_rawDescGZIP(), []int{413} +} + +func (x *CatnipGame) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *CatnipGame) GetStatus() int32 { + if x != nil { + return x.Status + } + return 0 +} + +func (x *CatnipGame) GetProgress() int32 { + if x != nil { + return x.Progress + } + return 0 +} + +func (x *CatnipGame) GetReward() []int32 { + if x != nil { + return x.Reward + } + return nil +} + +func (x *CatnipGame) GetPartner() *ResPlayerSimple { + if x != nil { + return x.Partner + } + return nil +} + +// 邀请好友 +type ReqCatnipInvite struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 猫草id + Uid int64 `protobuf:"varint,2,opt,name=Uid,proto3" json:"Uid,omitempty"` // 好友id + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReqCatnipInvite) Reset() { + *x = ReqCatnipInvite{} + mi := &file_proto_Gameapi_proto_msgTypes[414] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReqCatnipInvite) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReqCatnipInvite) ProtoMessage() {} + +func (x *ReqCatnipInvite) ProtoReflect() protoreflect.Message { + mi := &file_proto_Gameapi_proto_msgTypes[414] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReqCatnipInvite.ProtoReflect.Descriptor instead. +func (*ReqCatnipInvite) Descriptor() ([]byte, []int) { + return file_proto_Gameapi_proto_rawDescGZIP(), []int{414} +} + +func (x *ReqCatnipInvite) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *ReqCatnipInvite) GetUid() int64 { + if x != nil { + return x.Uid + } + return 0 +} + +type ResCatnipInvite struct { + state protoimpl.MessageState `protogen:"open.v1"` + Code RES_CODE `protobuf:"varint,1,opt,name=Code,proto3,enum=tutorial.RES_CODE" json:"Code,omitempty"` + Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ResCatnipInvite) Reset() { + *x = ResCatnipInvite{} + mi := &file_proto_Gameapi_proto_msgTypes[415] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ResCatnipInvite) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResCatnipInvite) ProtoMessage() {} + +func (x *ResCatnipInvite) ProtoReflect() protoreflect.Message { + mi := &file_proto_Gameapi_proto_msgTypes[415] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResCatnipInvite.ProtoReflect.Descriptor instead. +func (*ResCatnipInvite) Descriptor() ([]byte, []int) { + return file_proto_Gameapi_proto_rawDescGZIP(), []int{415} +} + +func (x *ResCatnipInvite) GetCode() RES_CODE { + if x != nil { + return x.Code + } + return RES_CODE_FAIL +} + +func (x *ResCatnipInvite) GetMsg() string { + if x != nil { + return x.Msg + } + return "" +} + +// 同意邀请 +type ReqCatnipAgree struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 游戏id + Uid int64 `protobuf:"varint,2,opt,name=Uid,proto3" json:"Uid,omitempty"` // 好友id + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReqCatnipAgree) Reset() { + *x = ReqCatnipAgree{} + mi := &file_proto_Gameapi_proto_msgTypes[416] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReqCatnipAgree) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReqCatnipAgree) ProtoMessage() {} + +func (x *ReqCatnipAgree) ProtoReflect() protoreflect.Message { + mi := &file_proto_Gameapi_proto_msgTypes[416] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReqCatnipAgree.ProtoReflect.Descriptor instead. +func (*ReqCatnipAgree) Descriptor() ([]byte, []int) { + return file_proto_Gameapi_proto_rawDescGZIP(), []int{416} +} + +func (x *ReqCatnipAgree) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *ReqCatnipAgree) GetUid() int64 { + if x != nil { + return x.Uid + } + return 0 +} + +type ResCatnipAgree struct { + state protoimpl.MessageState `protogen:"open.v1"` + Code RES_CODE `protobuf:"varint,1,opt,name=Code,proto3,enum=tutorial.RES_CODE" json:"Code,omitempty"` + Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ResCatnipAgree) Reset() { + *x = ResCatnipAgree{} + mi := &file_proto_Gameapi_proto_msgTypes[417] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ResCatnipAgree) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResCatnipAgree) ProtoMessage() {} + +func (x *ResCatnipAgree) ProtoReflect() protoreflect.Message { + mi := &file_proto_Gameapi_proto_msgTypes[417] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResCatnipAgree.ProtoReflect.Descriptor instead. +func (*ResCatnipAgree) Descriptor() ([]byte, []int) { + return file_proto_Gameapi_proto_rawDescGZIP(), []int{417} +} + +func (x *ResCatnipAgree) GetCode() RES_CODE { + if x != nil { + return x.Code + } + return RES_CODE_FAIL +} + +func (x *ResCatnipAgree) GetMsg() string { + if x != nil { + return x.Msg + } + return "" +} + +type ReqCatnipRefuse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 游戏id + Uid int64 `protobuf:"varint,2,opt,name=Uid,proto3" json:"Uid,omitempty"` // 好友id + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReqCatnipRefuse) Reset() { + *x = ReqCatnipRefuse{} + mi := &file_proto_Gameapi_proto_msgTypes[418] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReqCatnipRefuse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReqCatnipRefuse) ProtoMessage() {} + +func (x *ReqCatnipRefuse) ProtoReflect() protoreflect.Message { + mi := &file_proto_Gameapi_proto_msgTypes[418] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReqCatnipRefuse.ProtoReflect.Descriptor instead. +func (*ReqCatnipRefuse) Descriptor() ([]byte, []int) { + return file_proto_Gameapi_proto_rawDescGZIP(), []int{418} +} + +func (x *ReqCatnipRefuse) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *ReqCatnipRefuse) GetUid() int64 { + if x != nil { + return x.Uid + } + return 0 +} + +type ResCatnipRefuse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Code RES_CODE `protobuf:"varint,1,opt,name=Code,proto3,enum=tutorial.RES_CODE" json:"Code,omitempty"` + Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ResCatnipRefuse) Reset() { + *x = ResCatnipRefuse{} + mi := &file_proto_Gameapi_proto_msgTypes[419] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ResCatnipRefuse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResCatnipRefuse) ProtoMessage() {} + +func (x *ResCatnipRefuse) ProtoReflect() protoreflect.Message { + mi := &file_proto_Gameapi_proto_msgTypes[419] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResCatnipRefuse.ProtoReflect.Descriptor instead. +func (*ResCatnipRefuse) Descriptor() ([]byte, []int) { + return file_proto_Gameapi_proto_rawDescGZIP(), []int{419} +} + +func (x *ResCatnipRefuse) GetCode() RES_CODE { + if x != nil { + return x.Code + } + return RES_CODE_FAIL +} + +func (x *ResCatnipRefuse) GetMsg() string { + if x != nil { + return x.Msg + } + return "" +} + +// 设置游戏倍数 +type ReqCatnipMultiply struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 猫草id + Multiply int32 `protobuf:"varint,2,opt,name=Multiply,proto3" json:"Multiply,omitempty"` // 倍数 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReqCatnipMultiply) Reset() { + *x = ReqCatnipMultiply{} + mi := &file_proto_Gameapi_proto_msgTypes[420] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReqCatnipMultiply) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReqCatnipMultiply) ProtoMessage() {} + +func (x *ReqCatnipMultiply) ProtoReflect() protoreflect.Message { + mi := &file_proto_Gameapi_proto_msgTypes[420] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReqCatnipMultiply.ProtoReflect.Descriptor instead. +func (*ReqCatnipMultiply) Descriptor() ([]byte, []int) { + return file_proto_Gameapi_proto_rawDescGZIP(), []int{420} +} + +func (x *ReqCatnipMultiply) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *ReqCatnipMultiply) GetMultiply() int32 { + if x != nil { + return x.Multiply + } + return 0 +} + +type ResCatnipMultiply struct { + state protoimpl.MessageState `protogen:"open.v1"` + Code RES_CODE `protobuf:"varint,1,opt,name=Code,proto3,enum=tutorial.RES_CODE" json:"Code,omitempty"` + Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ResCatnipMultiply) Reset() { + *x = ResCatnipMultiply{} + mi := &file_proto_Gameapi_proto_msgTypes[421] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ResCatnipMultiply) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResCatnipMultiply) ProtoMessage() {} + +func (x *ResCatnipMultiply) ProtoReflect() protoreflect.Message { + mi := &file_proto_Gameapi_proto_msgTypes[421] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResCatnipMultiply.ProtoReflect.Descriptor instead. +func (*ResCatnipMultiply) Descriptor() ([]byte, []int) { + return file_proto_Gameapi_proto_rawDescGZIP(), []int{421} +} + +func (x *ResCatnipMultiply) GetCode() RES_CODE { + if x != nil { + return x.Code + } + return RES_CODE_FAIL +} + +func (x *ResCatnipMultiply) GetMsg() string { + if x != nil { + return x.Msg + } + return "" +} + +// 游戏转盘 +type ReqCatnipPlay struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 猫草id + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReqCatnipPlay) Reset() { + *x = ReqCatnipPlay{} + mi := &file_proto_Gameapi_proto_msgTypes[422] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReqCatnipPlay) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReqCatnipPlay) ProtoMessage() {} + +func (x *ReqCatnipPlay) ProtoReflect() protoreflect.Message { + mi := &file_proto_Gameapi_proto_msgTypes[422] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReqCatnipPlay.ProtoReflect.Descriptor instead. +func (*ReqCatnipPlay) Descriptor() ([]byte, []int) { + return file_proto_Gameapi_proto_rawDescGZIP(), []int{422} +} + +func (x *ReqCatnipPlay) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +type ResCatnipPlay struct { + state protoimpl.MessageState `protogen:"open.v1"` + Code RES_CODE `protobuf:"varint,1,opt,name=Code,proto3,enum=tutorial.RES_CODE" json:"Code,omitempty"` + Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` + Id int32 `protobuf:"varint,3,opt,name=Id,proto3" json:"Id,omitempty"` // 猫草id + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ResCatnipPlay) Reset() { + *x = ResCatnipPlay{} + mi := &file_proto_Gameapi_proto_msgTypes[423] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ResCatnipPlay) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResCatnipPlay) ProtoMessage() {} + +func (x *ResCatnipPlay) ProtoReflect() protoreflect.Message { + mi := &file_proto_Gameapi_proto_msgTypes[423] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResCatnipPlay.ProtoReflect.Descriptor instead. +func (*ResCatnipPlay) Descriptor() ([]byte, []int) { + return file_proto_Gameapi_proto_rawDescGZIP(), []int{423} +} + +func (x *ResCatnipPlay) GetCode() RES_CODE { + if x != nil { + return x.Code + } + return RES_CODE_FAIL +} + +func (x *ResCatnipPlay) GetMsg() string { + if x != nil { + return x.Msg + } + return "" +} + +func (x *ResCatnipPlay) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +// 领取阶段奖励 +type ReqCatnipReward struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 猫草id + Progress int32 `protobuf:"varint,2,opt,name=Progress,proto3" json:"Progress,omitempty"` // 进度 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReqCatnipReward) Reset() { + *x = ReqCatnipReward{} + mi := &file_proto_Gameapi_proto_msgTypes[424] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReqCatnipReward) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReqCatnipReward) ProtoMessage() {} + +func (x *ReqCatnipReward) ProtoReflect() protoreflect.Message { + mi := &file_proto_Gameapi_proto_msgTypes[424] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReqCatnipReward.ProtoReflect.Descriptor instead. +func (*ReqCatnipReward) Descriptor() ([]byte, []int) { + return file_proto_Gameapi_proto_rawDescGZIP(), []int{424} +} + +func (x *ReqCatnipReward) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *ReqCatnipReward) GetProgress() int32 { + if x != nil { + return x.Progress + } + return 0 +} + +type ResCatnipReward struct { + state protoimpl.MessageState `protogen:"open.v1"` + Code RES_CODE `protobuf:"varint,1,opt,name=Code,proto3,enum=tutorial.RES_CODE" json:"Code,omitempty"` + Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ResCatnipReward) Reset() { + *x = ResCatnipReward{} + mi := &file_proto_Gameapi_proto_msgTypes[425] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ResCatnipReward) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResCatnipReward) ProtoMessage() {} + +func (x *ResCatnipReward) ProtoReflect() protoreflect.Message { + mi := &file_proto_Gameapi_proto_msgTypes[425] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResCatnipReward.ProtoReflect.Descriptor instead. +func (*ResCatnipReward) Descriptor() ([]byte, []int) { + return file_proto_Gameapi_proto_rawDescGZIP(), []int{425} +} + +func (x *ResCatnipReward) GetCode() RES_CODE { + if x != nil { + return x.Code + } + return RES_CODE_FAIL +} + +func (x *ResCatnipReward) GetMsg() string { + if x != nil { + return x.Msg + } + return "" +} + +// 领取大奖 +type ReqCatnipGrandReward struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReqCatnipGrandReward) Reset() { + *x = ReqCatnipGrandReward{} + mi := &file_proto_Gameapi_proto_msgTypes[426] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReqCatnipGrandReward) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReqCatnipGrandReward) ProtoMessage() {} + +func (x *ReqCatnipGrandReward) ProtoReflect() protoreflect.Message { + mi := &file_proto_Gameapi_proto_msgTypes[426] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReqCatnipGrandReward.ProtoReflect.Descriptor instead. +func (*ReqCatnipGrandReward) Descriptor() ([]byte, []int) { + return file_proto_Gameapi_proto_rawDescGZIP(), []int{426} +} + +type ResCatnipGrandReward struct { + state protoimpl.MessageState `protogen:"open.v1"` + Code RES_CODE `protobuf:"varint,1,opt,name=Code,proto3,enum=tutorial.RES_CODE" json:"Code,omitempty"` + Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ResCatnipGrandReward) Reset() { + *x = ResCatnipGrandReward{} + mi := &file_proto_Gameapi_proto_msgTypes[427] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ResCatnipGrandReward) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResCatnipGrandReward) ProtoMessage() {} + +func (x *ResCatnipGrandReward) ProtoReflect() protoreflect.Message { + mi := &file_proto_Gameapi_proto_msgTypes[427] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResCatnipGrandReward.ProtoReflect.Descriptor instead. +func (*ResCatnipGrandReward) Descriptor() ([]byte, []int) { + return file_proto_Gameapi_proto_rawDescGZIP(), []int{427} +} + +func (x *ResCatnipGrandReward) GetCode() RES_CODE { + if x != nil { + return x.Code + } + return RES_CODE_FAIL +} + +func (x *ResCatnipGrandReward) GetMsg() string { + if x != nil { + return x.Msg + } + return "" +} + // -------------------后台管理------------------- type AdminReq struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -23413,7 +24329,7 @@ type AdminReq struct { func (x *AdminReq) Reset() { *x = AdminReq{} - mi := &file_proto_Gameapi_proto_msgTypes[411] + mi := &file_proto_Gameapi_proto_msgTypes[428] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23425,7 +24341,7 @@ func (x *AdminReq) String() string { func (*AdminReq) ProtoMessage() {} func (x *AdminReq) ProtoReflect() protoreflect.Message { - mi := &file_proto_Gameapi_proto_msgTypes[411] + mi := &file_proto_Gameapi_proto_msgTypes[428] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23438,7 +24354,7 @@ func (x *AdminReq) ProtoReflect() protoreflect.Message { // Deprecated: Use AdminReq.ProtoReflect.Descriptor instead. func (*AdminReq) Descriptor() ([]byte, []int) { - return file_proto_Gameapi_proto_rawDescGZIP(), []int{411} + return file_proto_Gameapi_proto_rawDescGZIP(), []int{428} } func (x *AdminReq) GetFunc() string { @@ -23465,7 +24381,7 @@ type AdminRes struct { func (x *AdminRes) Reset() { *x = AdminRes{} - mi := &file_proto_Gameapi_proto_msgTypes[412] + mi := &file_proto_Gameapi_proto_msgTypes[429] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23477,7 +24393,7 @@ func (x *AdminRes) String() string { func (*AdminRes) ProtoMessage() {} func (x *AdminRes) ProtoReflect() protoreflect.Message { - mi := &file_proto_Gameapi_proto_msgTypes[412] + mi := &file_proto_Gameapi_proto_msgTypes[429] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23490,7 +24406,7 @@ func (x *AdminRes) ProtoReflect() protoreflect.Message { // Deprecated: Use AdminRes.ProtoReflect.Descriptor instead. func (*AdminRes) Descriptor() ([]byte, []int) { - return file_proto_Gameapi_proto_rawDescGZIP(), []int{412} + return file_proto_Gameapi_proto_rawDescGZIP(), []int{429} } func (x *AdminRes) GetFunc() string { @@ -23516,7 +24432,7 @@ type ReqAdminInfo struct { func (x *ReqAdminInfo) Reset() { *x = ReqAdminInfo{} - mi := &file_proto_Gameapi_proto_msgTypes[413] + mi := &file_proto_Gameapi_proto_msgTypes[430] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23528,7 +24444,7 @@ func (x *ReqAdminInfo) String() string { func (*ReqAdminInfo) ProtoMessage() {} func (x *ReqAdminInfo) ProtoReflect() protoreflect.Message { - mi := &file_proto_Gameapi_proto_msgTypes[413] + mi := &file_proto_Gameapi_proto_msgTypes[430] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23541,7 +24457,7 @@ func (x *ReqAdminInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use ReqAdminInfo.ProtoReflect.Descriptor instead. func (*ReqAdminInfo) Descriptor() ([]byte, []int) { - return file_proto_Gameapi_proto_rawDescGZIP(), []int{413} + return file_proto_Gameapi_proto_rawDescGZIP(), []int{430} } func (x *ReqAdminInfo) GetUid() int64 { @@ -23559,7 +24475,7 @@ type ReqReloadServerMail struct { func (x *ReqReloadServerMail) Reset() { *x = ReqReloadServerMail{} - mi := &file_proto_Gameapi_proto_msgTypes[414] + mi := &file_proto_Gameapi_proto_msgTypes[431] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23571,7 +24487,7 @@ func (x *ReqReloadServerMail) String() string { func (*ReqReloadServerMail) ProtoMessage() {} func (x *ReqReloadServerMail) ProtoReflect() protoreflect.Message { - mi := &file_proto_Gameapi_proto_msgTypes[414] + mi := &file_proto_Gameapi_proto_msgTypes[431] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23584,7 +24500,7 @@ func (x *ReqReloadServerMail) ProtoReflect() protoreflect.Message { // Deprecated: Use ReqReloadServerMail.ProtoReflect.Descriptor instead. func (*ReqReloadServerMail) Descriptor() ([]byte, []int) { - return file_proto_Gameapi_proto_rawDescGZIP(), []int{414} + return file_proto_Gameapi_proto_rawDescGZIP(), []int{431} } type ReqServerInfo struct { @@ -23595,7 +24511,7 @@ type ReqServerInfo struct { func (x *ReqServerInfo) Reset() { *x = ReqServerInfo{} - mi := &file_proto_Gameapi_proto_msgTypes[415] + mi := &file_proto_Gameapi_proto_msgTypes[432] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23607,7 +24523,7 @@ func (x *ReqServerInfo) String() string { func (*ReqServerInfo) ProtoMessage() {} func (x *ReqServerInfo) ProtoReflect() protoreflect.Message { - mi := &file_proto_Gameapi_proto_msgTypes[415] + mi := &file_proto_Gameapi_proto_msgTypes[432] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23620,7 +24536,7 @@ func (x *ReqServerInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use ReqServerInfo.ProtoReflect.Descriptor instead. func (*ReqServerInfo) Descriptor() ([]byte, []int) { - return file_proto_Gameapi_proto_rawDescGZIP(), []int{415} + return file_proto_Gameapi_proto_rawDescGZIP(), []int{432} } type ReqReload struct { @@ -23631,7 +24547,7 @@ type ReqReload struct { func (x *ReqReload) Reset() { *x = ReqReload{} - mi := &file_proto_Gameapi_proto_msgTypes[416] + mi := &file_proto_Gameapi_proto_msgTypes[433] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23643,7 +24559,7 @@ func (x *ReqReload) String() string { func (*ReqReload) ProtoMessage() {} func (x *ReqReload) ProtoReflect() protoreflect.Message { - mi := &file_proto_Gameapi_proto_msgTypes[416] + mi := &file_proto_Gameapi_proto_msgTypes[433] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23656,7 +24572,7 @@ func (x *ReqReload) ProtoReflect() protoreflect.Message { // Deprecated: Use ReqReload.ProtoReflect.Descriptor instead. func (*ReqReload) Descriptor() ([]byte, []int) { - return file_proto_Gameapi_proto_rawDescGZIP(), []int{416} + return file_proto_Gameapi_proto_rawDescGZIP(), []int{433} } type ReqAdminGm struct { @@ -23669,7 +24585,7 @@ type ReqAdminGm struct { func (x *ReqAdminGm) Reset() { *x = ReqAdminGm{} - mi := &file_proto_Gameapi_proto_msgTypes[417] + mi := &file_proto_Gameapi_proto_msgTypes[434] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23681,7 +24597,7 @@ func (x *ReqAdminGm) String() string { func (*ReqAdminGm) ProtoMessage() {} func (x *ReqAdminGm) ProtoReflect() protoreflect.Message { - mi := &file_proto_Gameapi_proto_msgTypes[417] + mi := &file_proto_Gameapi_proto_msgTypes[434] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23694,7 +24610,7 @@ func (x *ReqAdminGm) ProtoReflect() protoreflect.Message { // Deprecated: Use ReqAdminGm.ProtoReflect.Descriptor instead. func (*ReqAdminGm) Descriptor() ([]byte, []int) { - return file_proto_Gameapi_proto_rawDescGZIP(), []int{417} + return file_proto_Gameapi_proto_rawDescGZIP(), []int{434} } func (x *ReqAdminGm) GetUid() int64 { @@ -25419,6 +26335,60 @@ const file_proto_Gameapi_proto_rawDesc = "" + "\n" + "ResCollect\x12&\n" + "\x04Code\x18\x01 \x01(\x0e2\x12.tutorial.RES_CODER\x04Code\x12\x10\n" + + "\x03Msg\x18\x02 \x01(\tR\x03Msg\"\v\n" + + "\tReqCatnip\"\x9b\x01\n" + + "\tResCatnip\x12\x0e\n" + + "\x02Id\x18\x01 \x01(\x05R\x02Id\x12\x16\n" + + "\x06Status\x18\x02 \x01(\x05R\x06Status\x12\x18\n" + + "\aEndTime\x18\x03 \x01(\x05R\aEndTime\x12\x1a\n" + + "\bTemplate\x18\x04 \x01(\x05R\bTemplate\x120\n" + + "\bGameList\x18\x05 \x03(\v2\x14.tutorial.CatnipGameR\bGameList\"\x9d\x01\n" + + "\n" + + "CatnipGame\x12\x0e\n" + + "\x02Id\x18\x01 \x01(\x05R\x02Id\x12\x16\n" + + "\x06Status\x18\x02 \x01(\x05R\x06Status\x12\x1a\n" + + "\bProgress\x18\x03 \x01(\x05R\bProgress\x12\x16\n" + + "\x06Reward\x18\x04 \x03(\x05R\x06Reward\x123\n" + + "\aPartner\x18\x05 \x01(\v2\x19.tutorial.ResPlayerSimpleR\aPartner\"3\n" + + "\x0fReqCatnipInvite\x12\x0e\n" + + "\x02Id\x18\x01 \x01(\x05R\x02Id\x12\x10\n" + + "\x03Uid\x18\x02 \x01(\x03R\x03Uid\"K\n" + + "\x0fResCatnipInvite\x12&\n" + + "\x04Code\x18\x01 \x01(\x0e2\x12.tutorial.RES_CODER\x04Code\x12\x10\n" + + "\x03Msg\x18\x02 \x01(\tR\x03Msg\"2\n" + + "\x0eReqCatnipAgree\x12\x0e\n" + + "\x02Id\x18\x01 \x01(\x05R\x02Id\x12\x10\n" + + "\x03Uid\x18\x02 \x01(\x03R\x03Uid\"J\n" + + "\x0eResCatnipAgree\x12&\n" + + "\x04Code\x18\x01 \x01(\x0e2\x12.tutorial.RES_CODER\x04Code\x12\x10\n" + + "\x03Msg\x18\x02 \x01(\tR\x03Msg\"3\n" + + "\x0fReqCatnipRefuse\x12\x0e\n" + + "\x02Id\x18\x01 \x01(\x05R\x02Id\x12\x10\n" + + "\x03Uid\x18\x02 \x01(\x03R\x03Uid\"K\n" + + "\x0fResCatnipRefuse\x12&\n" + + "\x04Code\x18\x01 \x01(\x0e2\x12.tutorial.RES_CODER\x04Code\x12\x10\n" + + "\x03Msg\x18\x02 \x01(\tR\x03Msg\"?\n" + + "\x11ReqCatnipMultiply\x12\x0e\n" + + "\x02Id\x18\x01 \x01(\x05R\x02Id\x12\x1a\n" + + "\bMultiply\x18\x02 \x01(\x05R\bMultiply\"M\n" + + "\x11ResCatnipMultiply\x12&\n" + + "\x04Code\x18\x01 \x01(\x0e2\x12.tutorial.RES_CODER\x04Code\x12\x10\n" + + "\x03Msg\x18\x02 \x01(\tR\x03Msg\"\x1f\n" + + "\rReqCatnipPlay\x12\x0e\n" + + "\x02Id\x18\x01 \x01(\x05R\x02Id\"Y\n" + + "\rResCatnipPlay\x12&\n" + + "\x04Code\x18\x01 \x01(\x0e2\x12.tutorial.RES_CODER\x04Code\x12\x10\n" + + "\x03Msg\x18\x02 \x01(\tR\x03Msg\x12\x0e\n" + + "\x02Id\x18\x03 \x01(\x05R\x02Id\"=\n" + + "\x0fReqCatnipReward\x12\x0e\n" + + "\x02Id\x18\x01 \x01(\x05R\x02Id\x12\x1a\n" + + "\bProgress\x18\x02 \x01(\x05R\bProgress\"K\n" + + "\x0fResCatnipReward\x12&\n" + + "\x04Code\x18\x01 \x01(\x0e2\x12.tutorial.RES_CODER\x04Code\x12\x10\n" + + "\x03Msg\x18\x02 \x01(\tR\x03Msg\"\x16\n" + + "\x14ReqCatnipGrandReward\"P\n" + + "\x14ResCatnipGrandReward\x12&\n" + + "\x04Code\x18\x01 \x01(\x0e2\x12.tutorial.RES_CODER\x04Code\x12\x10\n" + "\x03Msg\x18\x02 \x01(\tR\x03Msg\"2\n" + "\bAdminReq\x12\x12\n" + "\x04Func\x18\x01 \x01(\tR\x04Func\x12\x12\n" + @@ -25434,7 +26404,8 @@ const file_proto_Gameapi_proto_rawDesc = "" + "\n" + "ReqAdminGm\x12\x10\n" + "\x03Uid\x18\x01 \x01(\x03R\x03Uid\x12\x18\n" + - "\aCommand\x18\x02 \x01(\tR\aCommand*\xfc\t\n" + + "\aCommand\x18\x02 \x01(\tR\aCommand*\xa5\n" + + "\n" + "\x0eITEM_POP_LABEL\x12\f\n" + "\bPlayroom\x10\x00\x12\r\n" + "\tPiggyBank\x10\x01\x12\n" + @@ -25509,7 +26480,9 @@ const file_proto_Gameapi_proto_rawDesc = "" + "\fPlayroomTask\x10?\x12\x16\n" + "\x12PlayroomTaskReward\x10@\x12\x12\n" + "\x0ePlayroomUpvote\x10A\x12\x12\n" + - "\x0eDecorateReward\x10B*B\n" + + "\x0eDecorateReward\x10B\x12\x10\n" + + "\fCatnipReward\x10C\x12\x15\n" + + "\x11CatnipGrandReward\x10D*B\n" + "\vHANDLE_TYPE\x12\a\n" + "\x03ADD\x10\x00\x12\v\n" + "\aCOMPOSE\x10\x01\x12\a\n" + @@ -25626,7 +26599,7 @@ func file_proto_Gameapi_proto_rawDescGZIP() []byte { } var file_proto_Gameapi_proto_enumTypes = make([]protoimpl.EnumInfo, 11) -var file_proto_Gameapi_proto_msgTypes = make([]protoimpl.MessageInfo, 479) +var file_proto_Gameapi_proto_msgTypes = make([]protoimpl.MessageInfo, 496) var file_proto_Gameapi_proto_goTypes = []any{ (ITEM_POP_LABEL)(0), // 0: tutorial.ITEM_POP_LABEL (HANDLE_TYPE)(0), // 1: tutorial.HANDLE_TYPE @@ -26050,103 +27023,120 @@ var file_proto_Gameapi_proto_goTypes = []any{ (*CollectItem)(nil), // 419: tutorial.CollectItem (*ReqCollect)(nil), // 420: tutorial.ReqCollect (*ResCollect)(nil), // 421: tutorial.ResCollect - (*AdminReq)(nil), // 422: tutorial.AdminReq - (*AdminRes)(nil), // 423: tutorial.AdminRes - (*ReqAdminInfo)(nil), // 424: tutorial.ReqAdminInfo - (*ReqReloadServerMail)(nil), // 425: tutorial.ReqReloadServerMail - (*ReqServerInfo)(nil), // 426: tutorial.ReqServerInfo - (*ReqReload)(nil), // 427: tutorial.ReqReload - (*ReqAdminGm)(nil), // 428: tutorial.ReqAdminGm - nil, // 429: tutorial.ResChessColorData.MChessColorDataEntry - nil, // 430: tutorial.UpdateBaseItemInfo.MUpdateItemEntry - nil, // 431: tutorial.ResPlayerChessData.MChessDataEntry - nil, // 432: tutorial.UpdatePlayerChessData.MChessDataEntry - nil, // 433: tutorial.ReqSeparateChess.MChessDataEntry - nil, // 434: tutorial.ReqUpgradeChess.MChessDataEntry - nil, // 435: tutorial.ReqGetChessFromBuff.MChessDataEntry - nil, // 436: tutorial.ReqChessEx.MChessDataEntry - nil, // 437: tutorial.ReqSourceChest.MChessDataEntry - nil, // 438: tutorial.ReqPlayroomOutline.MChessDataEntry - nil, // 439: tutorial.ReqPutChessInBag.MChessDataEntry - nil, // 440: tutorial.ReqTakeChessOutBag.MChessDataEntry - nil, // 441: tutorial.UserInfo.SetEmojiEntry - nil, // 442: tutorial.ReqRewardOrder.MChessDataEntry - nil, // 443: tutorial.ResCardInfo.AllCardEntry - nil, // 444: tutorial.ResCardInfo.HandbookEntry - nil, // 445: tutorial.ResGuildInfo.RewardEntry - nil, // 446: tutorial.ResGuideInfo.RewardEntry - nil, // 447: tutorial.ResDailyTask.WeekRewardEntry - nil, // 448: tutorial.ResDailyTask.DailyTaskEntry - nil, // 449: tutorial.ResLimitEvent.LimitEventListEntry - nil, // 450: tutorial.ResLimitEventProgress.ProgressRewardEntry - nil, // 451: tutorial.LimitEvent.ParamEntry - nil, // 452: tutorial.ReqLimitEventLuckyCat.MChessDataEntry - nil, // 453: tutorial.ResPlayerSimple.EmojiEntry - nil, // 454: tutorial.ResKv.KvEntry - nil, // 455: tutorial.ResRank.RankListEntry - nil, // 456: tutorial.ResMailList.MailListEntry - nil, // 457: tutorial.ResCharge.SpecialShopEntry - nil, // 458: tutorial.ResCharge.ChessShopEntry - nil, // 459: tutorial.ResCharge.GiftEntry - nil, // 460: tutorial.ReqBuyChessShop2.MChessDataEntry - nil, // 461: tutorial.ResEndless.EndlessListEntry - nil, // 462: tutorial.ResChampshipRank.RankListEntry - nil, // 463: tutorial.ResChampshipPreRank.RankListEntry - nil, // 464: tutorial.ResNotifyCard.CardEntry - nil, // 465: tutorial.ResNotifyCard.MasterEntry - nil, // 466: tutorial.ResNotifyCard.HandbookEntry - nil, // 467: tutorial.ResMining.MapEntry - nil, // 468: tutorial.ReqMiningTake.MapEntry - nil, // 469: tutorial.ResActRed.RedEntry - nil, // 470: tutorial.ResItem.ItemEntry - nil, // 471: tutorial.ItemNotify.ItemEntry - nil, // 472: tutorial.ResGuessColor.OMapEntry - nil, // 473: tutorial.ReqGuessColorTake.OMapEntry - nil, // 474: tutorial.GuessColorInfo.MapEntry - nil, // 475: tutorial.ResPlayroom.PlayroomEntry - nil, // 476: tutorial.ResPlayroom.MoodEntry - nil, // 477: tutorial.ResPlayroom.PhysiologyEntry - nil, // 478: tutorial.ResPlayroom.DressEntry - nil, // 479: tutorial.ResPlayroom.DressSetEntry - nil, // 480: tutorial.ReqPlayroomDressSet.DressSetEntry - nil, // 481: tutorial.NotifyPlayroomMood.MoodEntry - nil, // 482: tutorial.NotifyPlayroomMood.PhysiologyEntry - nil, // 483: tutorial.ResPlayroomInfo.PlayroomEntry - nil, // 484: tutorial.ResPlayroomInfo.ItemsEntry - nil, // 485: tutorial.ResPlayroomInfo.FlipEntry - nil, // 486: tutorial.ResPlayroomInfo.EmojiEntry - nil, // 487: tutorial.ResPlayroomInfo.DressSetEntry - nil, // 488: tutorial.ResPlayroomGame.ItemsEntry - nil, // 489: tutorial.ReqPlayroomSetRoom.PlayroomEntry + (*ReqCatnip)(nil), // 422: tutorial.ReqCatnip + (*ResCatnip)(nil), // 423: tutorial.ResCatnip + (*CatnipGame)(nil), // 424: tutorial.CatnipGame + (*ReqCatnipInvite)(nil), // 425: tutorial.ReqCatnipInvite + (*ResCatnipInvite)(nil), // 426: tutorial.ResCatnipInvite + (*ReqCatnipAgree)(nil), // 427: tutorial.ReqCatnipAgree + (*ResCatnipAgree)(nil), // 428: tutorial.ResCatnipAgree + (*ReqCatnipRefuse)(nil), // 429: tutorial.ReqCatnipRefuse + (*ResCatnipRefuse)(nil), // 430: tutorial.ResCatnipRefuse + (*ReqCatnipMultiply)(nil), // 431: tutorial.ReqCatnipMultiply + (*ResCatnipMultiply)(nil), // 432: tutorial.ResCatnipMultiply + (*ReqCatnipPlay)(nil), // 433: tutorial.ReqCatnipPlay + (*ResCatnipPlay)(nil), // 434: tutorial.ResCatnipPlay + (*ReqCatnipReward)(nil), // 435: tutorial.ReqCatnipReward + (*ResCatnipReward)(nil), // 436: tutorial.ResCatnipReward + (*ReqCatnipGrandReward)(nil), // 437: tutorial.ReqCatnipGrandReward + (*ResCatnipGrandReward)(nil), // 438: tutorial.ResCatnipGrandReward + (*AdminReq)(nil), // 439: tutorial.AdminReq + (*AdminRes)(nil), // 440: tutorial.AdminRes + (*ReqAdminInfo)(nil), // 441: tutorial.ReqAdminInfo + (*ReqReloadServerMail)(nil), // 442: tutorial.ReqReloadServerMail + (*ReqServerInfo)(nil), // 443: tutorial.ReqServerInfo + (*ReqReload)(nil), // 444: tutorial.ReqReload + (*ReqAdminGm)(nil), // 445: tutorial.ReqAdminGm + nil, // 446: tutorial.ResChessColorData.MChessColorDataEntry + nil, // 447: tutorial.UpdateBaseItemInfo.MUpdateItemEntry + nil, // 448: tutorial.ResPlayerChessData.MChessDataEntry + nil, // 449: tutorial.UpdatePlayerChessData.MChessDataEntry + nil, // 450: tutorial.ReqSeparateChess.MChessDataEntry + nil, // 451: tutorial.ReqUpgradeChess.MChessDataEntry + nil, // 452: tutorial.ReqGetChessFromBuff.MChessDataEntry + nil, // 453: tutorial.ReqChessEx.MChessDataEntry + nil, // 454: tutorial.ReqSourceChest.MChessDataEntry + nil, // 455: tutorial.ReqPlayroomOutline.MChessDataEntry + nil, // 456: tutorial.ReqPutChessInBag.MChessDataEntry + nil, // 457: tutorial.ReqTakeChessOutBag.MChessDataEntry + nil, // 458: tutorial.UserInfo.SetEmojiEntry + nil, // 459: tutorial.ReqRewardOrder.MChessDataEntry + nil, // 460: tutorial.ResCardInfo.AllCardEntry + nil, // 461: tutorial.ResCardInfo.HandbookEntry + nil, // 462: tutorial.ResGuildInfo.RewardEntry + nil, // 463: tutorial.ResGuideInfo.RewardEntry + nil, // 464: tutorial.ResDailyTask.WeekRewardEntry + nil, // 465: tutorial.ResDailyTask.DailyTaskEntry + nil, // 466: tutorial.ResLimitEvent.LimitEventListEntry + nil, // 467: tutorial.ResLimitEventProgress.ProgressRewardEntry + nil, // 468: tutorial.LimitEvent.ParamEntry + nil, // 469: tutorial.ReqLimitEventLuckyCat.MChessDataEntry + nil, // 470: tutorial.ResPlayerSimple.EmojiEntry + nil, // 471: tutorial.ResKv.KvEntry + nil, // 472: tutorial.ResRank.RankListEntry + nil, // 473: tutorial.ResMailList.MailListEntry + nil, // 474: tutorial.ResCharge.SpecialShopEntry + nil, // 475: tutorial.ResCharge.ChessShopEntry + nil, // 476: tutorial.ResCharge.GiftEntry + nil, // 477: tutorial.ReqBuyChessShop2.MChessDataEntry + nil, // 478: tutorial.ResEndless.EndlessListEntry + nil, // 479: tutorial.ResChampshipRank.RankListEntry + nil, // 480: tutorial.ResChampshipPreRank.RankListEntry + nil, // 481: tutorial.ResNotifyCard.CardEntry + nil, // 482: tutorial.ResNotifyCard.MasterEntry + nil, // 483: tutorial.ResNotifyCard.HandbookEntry + nil, // 484: tutorial.ResMining.MapEntry + nil, // 485: tutorial.ReqMiningTake.MapEntry + nil, // 486: tutorial.ResActRed.RedEntry + nil, // 487: tutorial.ResItem.ItemEntry + nil, // 488: tutorial.ItemNotify.ItemEntry + nil, // 489: tutorial.ResGuessColor.OMapEntry + nil, // 490: tutorial.ReqGuessColorTake.OMapEntry + nil, // 491: tutorial.GuessColorInfo.MapEntry + nil, // 492: tutorial.ResPlayroom.PlayroomEntry + nil, // 493: tutorial.ResPlayroom.MoodEntry + nil, // 494: tutorial.ResPlayroom.PhysiologyEntry + nil, // 495: tutorial.ResPlayroom.DressEntry + nil, // 496: tutorial.ResPlayroom.DressSetEntry + nil, // 497: tutorial.ReqPlayroomDressSet.DressSetEntry + nil, // 498: tutorial.NotifyPlayroomMood.MoodEntry + nil, // 499: tutorial.NotifyPlayroomMood.PhysiologyEntry + nil, // 500: tutorial.ResPlayroomInfo.PlayroomEntry + nil, // 501: tutorial.ResPlayroomInfo.ItemsEntry + nil, // 502: tutorial.ResPlayroomInfo.FlipEntry + nil, // 503: tutorial.ResPlayroomInfo.EmojiEntry + nil, // 504: tutorial.ResPlayroomInfo.DressSetEntry + nil, // 505: tutorial.ResPlayroomGame.ItemsEntry + nil, // 506: tutorial.ReqPlayroomSetRoom.PlayroomEntry } var file_proto_Gameapi_proto_depIdxs = []int32{ - 429, // 0: tutorial.ResChessColorData.mChessColorData:type_name -> tutorial.ResChessColorData.MChessColorDataEntry + 446, // 0: tutorial.ResChessColorData.mChessColorData:type_name -> tutorial.ResChessColorData.MChessColorDataEntry 6, // 1: tutorial.ReqLogin.type:type_name -> tutorial.LOGIN_TYPE 2, // 2: tutorial.ResId2Verify.ResultCode:type_name -> tutorial.RES_CODE - 430, // 3: tutorial.UpdateBaseItemInfo.mUpdateItem:type_name -> tutorial.UpdateBaseItemInfo.MUpdateItemEntry - 431, // 4: tutorial.ResPlayerChessData.mChessData:type_name -> tutorial.ResPlayerChessData.MChessDataEntry + 447, // 3: tutorial.UpdateBaseItemInfo.mUpdateItem:type_name -> tutorial.UpdateBaseItemInfo.MUpdateItemEntry + 448, // 4: tutorial.ResPlayerChessData.mChessData:type_name -> tutorial.ResPlayerChessData.MChessDataEntry 65, // 5: tutorial.ResPlayerChessInfo.ChessBag:type_name -> tutorial.ChessBag 1, // 6: tutorial.ChessHandle.type:type_name -> tutorial.HANDLE_TYPE - 432, // 7: tutorial.UpdatePlayerChessData.mChessData:type_name -> tutorial.UpdatePlayerChessData.MChessDataEntry + 449, // 7: tutorial.UpdatePlayerChessData.mChessData:type_name -> tutorial.UpdatePlayerChessData.MChessDataEntry 50, // 8: tutorial.UpdatePlayerChessData.mChessHandle:type_name -> tutorial.ChessHandle 2, // 9: tutorial.ResUpdatePlayerChessData.code:type_name -> tutorial.RES_CODE - 433, // 10: tutorial.ReqSeparateChess.mChessData:type_name -> tutorial.ReqSeparateChess.MChessDataEntry + 450, // 10: tutorial.ReqSeparateChess.mChessData:type_name -> tutorial.ReqSeparateChess.MChessDataEntry 2, // 11: tutorial.ResSeparateChess.code:type_name -> tutorial.RES_CODE - 434, // 12: tutorial.ReqUpgradeChess.mChessData:type_name -> tutorial.ReqUpgradeChess.MChessDataEntry + 451, // 12: tutorial.ReqUpgradeChess.mChessData:type_name -> tutorial.ReqUpgradeChess.MChessDataEntry 2, // 13: tutorial.ResUpgradeChess.code:type_name -> tutorial.RES_CODE - 435, // 14: tutorial.ReqGetChessFromBuff.mChessData:type_name -> tutorial.ReqGetChessFromBuff.MChessDataEntry + 452, // 14: tutorial.ReqGetChessFromBuff.mChessData:type_name -> tutorial.ReqGetChessFromBuff.MChessDataEntry 2, // 15: tutorial.ResGetChessFromBuff.code:type_name -> tutorial.RES_CODE 8, // 16: tutorial.ReqChessEx.Type:type_name -> tutorial.CHESS_EX_TYPE - 436, // 17: tutorial.ReqChessEx.mChessData:type_name -> tutorial.ReqChessEx.MChessDataEntry + 453, // 17: tutorial.ReqChessEx.mChessData:type_name -> tutorial.ReqChessEx.MChessDataEntry 2, // 18: tutorial.ResChessEx.code:type_name -> tutorial.RES_CODE - 437, // 19: tutorial.ReqSourceChest.mChessData:type_name -> tutorial.ReqSourceChest.MChessDataEntry + 454, // 19: tutorial.ReqSourceChest.mChessData:type_name -> tutorial.ReqSourceChest.MChessDataEntry 2, // 20: tutorial.ResSourceChest.code:type_name -> tutorial.RES_CODE - 438, // 21: tutorial.ReqPlayroomOutline.mChessData:type_name -> tutorial.ReqPlayroomOutline.MChessDataEntry + 455, // 21: tutorial.ReqPlayroomOutline.mChessData:type_name -> tutorial.ReqPlayroomOutline.MChessDataEntry 2, // 22: tutorial.ResPlayroomOutline.code:type_name -> tutorial.RES_CODE 66, // 23: tutorial.ChessBag.ChessBagGrids:type_name -> tutorial.ChessBagGrid - 439, // 24: tutorial.ReqPutChessInBag.mChessData:type_name -> tutorial.ReqPutChessInBag.MChessDataEntry + 456, // 24: tutorial.ReqPutChessInBag.mChessData:type_name -> tutorial.ReqPutChessInBag.MChessDataEntry 2, // 25: tutorial.ResPutChessInBag.code:type_name -> tutorial.RES_CODE - 440, // 26: tutorial.ReqTakeChessOutBag.mChessData:type_name -> tutorial.ReqTakeChessOutBag.MChessDataEntry + 457, // 26: tutorial.ReqTakeChessOutBag.mChessData:type_name -> tutorial.ReqTakeChessOutBag.MChessDataEntry 2, // 27: tutorial.ResTakeChessOutBag.code:type_name -> tutorial.RES_CODE 2, // 28: tutorial.ResBuyChessBagGrid.code:type_name -> tutorial.RES_CODE 2, // 29: tutorial.ResSetEnergyMul.ResultCode:type_name -> tutorial.RES_CODE @@ -26156,7 +27146,7 @@ var file_proto_Gameapi_proto_depIdxs = []int32{ 176, // 33: tutorial.UserInfo.AvatarList:type_name -> tutorial.AvatarInfo 172, // 34: tutorial.UserInfo.FaceList:type_name -> tutorial.FaceInfo 179, // 35: tutorial.UserInfo.EmojiList:type_name -> tutorial.EmojiInfo - 441, // 36: tutorial.UserInfo.SetEmoji:type_name -> tutorial.UserInfo.SetEmojiEntry + 458, // 36: tutorial.UserInfo.SetEmoji:type_name -> tutorial.UserInfo.SetEmojiEntry 2, // 37: tutorial.ResSetName.ResultCode:type_name -> tutorial.RES_CODE 2, // 38: tutorial.ResSetPetName.ResultCode:type_name -> tutorial.RES_CODE 2, // 39: tutorial.ResBuyEnergy.Code:type_name -> tutorial.RES_CODE @@ -26164,7 +27154,7 @@ var file_proto_Gameapi_proto_depIdxs = []int32{ 2, // 41: tutorial.ResGetHandbookReward.Code:type_name -> tutorial.RES_CODE 94, // 42: tutorial.Handbook.Handbooks:type_name -> tutorial.HandbookInfo 2, // 43: tutorial.ResHandbookAllReward.Code:type_name -> tutorial.RES_CODE - 442, // 44: tutorial.ReqRewardOrder.mChessData:type_name -> tutorial.ReqRewardOrder.MChessDataEntry + 459, // 44: tutorial.ReqRewardOrder.mChessData:type_name -> tutorial.ReqRewardOrder.MChessDataEntry 2, // 45: tutorial.ResRewardOrder.Code:type_name -> tutorial.RES_CODE 2, // 46: tutorial.ResDelOrder.Code:type_name -> tutorial.RES_CODE 159, // 47: tutorial.Order.Items:type_name -> tutorial.ItemInfo @@ -26173,8 +27163,8 @@ var file_proto_Gameapi_proto_depIdxs = []int32{ 2, // 50: tutorial.ResDecorateAll.Code:type_name -> tutorial.RES_CODE 2, // 51: tutorial.ResDecorateReward.Code:type_name -> tutorial.RES_CODE 114, // 52: tutorial.ResCardInfo.CardList:type_name -> tutorial.Card - 443, // 53: tutorial.ResCardInfo.AllCard:type_name -> tutorial.ResCardInfo.AllCardEntry - 444, // 54: tutorial.ResCardInfo.Handbook:type_name -> tutorial.ResCardInfo.HandbookEntry + 460, // 53: tutorial.ResCardInfo.AllCard:type_name -> tutorial.ResCardInfo.AllCardEntry + 461, // 54: tutorial.ResCardInfo.Handbook:type_name -> tutorial.ResCardInfo.HandbookEntry 2, // 55: tutorial.ResCardSeasonFirstReward.Code:type_name -> tutorial.RES_CODE 2, // 56: tutorial.ResCardHandbookReward.Code:type_name -> tutorial.RES_CODE 2, // 57: tutorial.ResMasterCard.Code:type_name -> tutorial.RES_CODE @@ -26193,12 +27183,12 @@ var file_proto_Gameapi_proto_depIdxs = []int32{ 2, // 70: tutorial.ResGetFriendCard.Code:type_name -> tutorial.RES_CODE 2, // 71: tutorial.ResGuideReward.Code:type_name -> tutorial.RES_CODE 2, // 72: tutorial.ResGuidePlayroom.Code:type_name -> tutorial.RES_CODE - 445, // 73: tutorial.ResGuildInfo.Reward:type_name -> tutorial.ResGuildInfo.RewardEntry - 446, // 74: tutorial.ResGuideInfo.Reward:type_name -> tutorial.ResGuideInfo.RewardEntry + 462, // 73: tutorial.ResGuildInfo.Reward:type_name -> tutorial.ResGuildInfo.RewardEntry + 463, // 74: tutorial.ResGuideInfo.Reward:type_name -> tutorial.ResGuideInfo.RewardEntry 159, // 75: tutorial.ResItemPop.Items:type_name -> tutorial.ItemInfo 160, // 76: tutorial.ResItemPop.CardPacks:type_name -> tutorial.CardPack - 447, // 77: tutorial.ResDailyTask.WeekReward:type_name -> tutorial.ResDailyTask.WeekRewardEntry - 448, // 78: tutorial.ResDailyTask.DailyTask:type_name -> tutorial.ResDailyTask.DailyTaskEntry + 464, // 77: tutorial.ResDailyTask.WeekReward:type_name -> tutorial.ResDailyTask.WeekRewardEntry + 465, // 78: tutorial.ResDailyTask.DailyTask:type_name -> tutorial.ResDailyTask.DailyTaskEntry 159, // 79: tutorial.DailyWeek.Items:type_name -> tutorial.ItemInfo 164, // 80: tutorial.DailyTask.Progress:type_name -> tutorial.QuestProgress 159, // 81: tutorial.DailyTask.Items:type_name -> tutorial.ItemInfo @@ -26219,23 +27209,23 @@ var file_proto_Gameapi_proto_depIdxs = []int32{ 2, // 96: tutorial.ResGetMonthLoginReward.Code:type_name -> tutorial.RES_CODE 189, // 97: tutorial.ResActivity.ActiveList:type_name -> tutorial.ActivityInfo 2, // 98: tutorial.ResActivityReward.Code:type_name -> tutorial.RES_CODE - 449, // 99: tutorial.ResLimitEvent.LimitEventList:type_name -> tutorial.ResLimitEvent.LimitEventListEntry - 450, // 100: tutorial.ResLimitEventProgress.ProgressReward:type_name -> tutorial.ResLimitEventProgress.ProgressRewardEntry + 466, // 99: tutorial.ResLimitEvent.LimitEventList:type_name -> tutorial.ResLimitEvent.LimitEventListEntry + 467, // 100: tutorial.ResLimitEventProgress.ProgressReward:type_name -> tutorial.ResLimitEventProgress.ProgressRewardEntry 2, // 101: tutorial.ResLimitEventReward.Code:type_name -> tutorial.RES_CODE 2, // 102: tutorial.ResSelectLimitEvent.Code:type_name -> tutorial.RES_CODE - 451, // 103: tutorial.LimitEvent.Param:type_name -> tutorial.LimitEvent.ParamEntry - 452, // 104: tutorial.ReqLimitEventLuckyCat.mChessData:type_name -> tutorial.ReqLimitEventLuckyCat.MChessDataEntry + 468, // 103: tutorial.LimitEvent.Param:type_name -> tutorial.LimitEvent.ParamEntry + 469, // 104: tutorial.ReqLimitEventLuckyCat.mChessData:type_name -> tutorial.ReqLimitEventLuckyCat.MChessDataEntry 2, // 105: tutorial.ResLimitEventLuckyCat.Code:type_name -> tutorial.RES_CODE 2, // 106: tutorial.ResLimitSenceReward.Code:type_name -> tutorial.RES_CODE 159, // 107: tutorial.ResChessRainReward.Items:type_name -> tutorial.ItemInfo 2, // 108: tutorial.ResFastProduceReward.Code:type_name -> tutorial.RES_CODE 2, // 109: tutorial.ResCatTrickReward.Code:type_name -> tutorial.RES_CODE 214, // 110: tutorial.ResSearchPlayer.List:type_name -> tutorial.ResPlayerSimple - 453, // 111: tutorial.ResPlayerSimple.Emoji:type_name -> tutorial.ResPlayerSimple.EmojiEntry + 470, // 111: tutorial.ResPlayerSimple.Emoji:type_name -> tutorial.ResPlayerSimple.EmojiEntry 214, // 112: tutorial.ResFriendLog.Player:type_name -> tutorial.ResPlayerSimple 216, // 113: tutorial.NotifyFriendLog.info:type_name -> tutorial.ResFriendLog 219, // 114: tutorial.NotifyFriendCard.Info:type_name -> tutorial.ResFriendCard - 454, // 115: tutorial.ResKv.kv:type_name -> tutorial.ResKv.KvEntry + 471, // 115: tutorial.ResKv.kv:type_name -> tutorial.ResKv.KvEntry 2, // 116: tutorial.ResFriendByCode.Code:type_name -> tutorial.RES_CODE 214, // 117: tutorial.ResFriendByCode.Player:type_name -> tutorial.ResPlayerSimple 214, // 118: tutorial.ResFriendRecommend.List:type_name -> tutorial.ResPlayerSimple @@ -26255,26 +27245,26 @@ var file_proto_Gameapi_proto_depIdxs = []int32{ 214, // 132: tutorial.ResAgreeFriend.Player:type_name -> tutorial.ResPlayerSimple 2, // 133: tutorial.ResRefuseFriend.Code:type_name -> tutorial.RES_CODE 2, // 134: tutorial.ResDelFriend.Code:type_name -> tutorial.RES_CODE - 455, // 135: tutorial.ResRank.RankList:type_name -> tutorial.ResRank.RankListEntry - 456, // 136: tutorial.ResMailList.MailList:type_name -> tutorial.ResMailList.MailListEntry + 472, // 135: tutorial.ResRank.RankList:type_name -> tutorial.ResRank.RankListEntry + 473, // 136: tutorial.ResMailList.MailList:type_name -> tutorial.ResMailList.MailListEntry 159, // 137: tutorial.MailInfo.Items:type_name -> tutorial.ItemInfo 258, // 138: tutorial.MailNotify.Info:type_name -> tutorial.MailInfo 2, // 139: tutorial.ResReadMail.Code:type_name -> tutorial.RES_CODE 2, // 140: tutorial.ResGetMailReward.Code:type_name -> tutorial.RES_CODE 2, // 141: tutorial.ResDeleteMail.Code:type_name -> tutorial.RES_CODE - 457, // 142: tutorial.ResCharge.SpecialShop:type_name -> tutorial.ResCharge.SpecialShopEntry - 458, // 143: tutorial.ResCharge.ChessShop:type_name -> tutorial.ResCharge.ChessShopEntry - 459, // 144: tutorial.ResCharge.Gift:type_name -> tutorial.ResCharge.GiftEntry + 474, // 142: tutorial.ResCharge.SpecialShop:type_name -> tutorial.ResCharge.SpecialShopEntry + 475, // 143: tutorial.ResCharge.ChessShop:type_name -> tutorial.ResCharge.ChessShopEntry + 476, // 144: tutorial.ResCharge.Gift:type_name -> tutorial.ResCharge.GiftEntry 267, // 145: tutorial.ResCharge.Wish:type_name -> tutorial.WishList 2, // 146: tutorial.ResAddWish.Code:type_name -> tutorial.RES_CODE 2, // 147: tutorial.ResGetWish.Code:type_name -> tutorial.RES_CODE 2, // 148: tutorial.ResSendWishBeg.Code:type_name -> tutorial.RES_CODE 2, // 149: tutorial.ResFreeShop.Code:type_name -> tutorial.RES_CODE 2, // 150: tutorial.ResBuyChessShop.Code:type_name -> tutorial.RES_CODE - 460, // 151: tutorial.ReqBuyChessShop2.mChessData:type_name -> tutorial.ReqBuyChessShop2.MChessDataEntry + 477, // 151: tutorial.ReqBuyChessShop2.mChessData:type_name -> tutorial.ReqBuyChessShop2.MChessDataEntry 2, // 152: tutorial.ResBuyChessShop2.Code:type_name -> tutorial.RES_CODE 2, // 153: tutorial.ResRefreshChessShop.Code:type_name -> tutorial.RES_CODE - 461, // 154: tutorial.ResEndless.EndlessList:type_name -> tutorial.ResEndless.EndlessListEntry + 478, // 154: tutorial.ResEndless.EndlessList:type_name -> tutorial.ResEndless.EndlessListEntry 159, // 155: tutorial.ResEndlessInfo.Items:type_name -> tutorial.ItemInfo 2, // 156: tutorial.ResEndlessReward.Code:type_name -> tutorial.RES_CODE 2, // 157: tutorial.ResPiggyBankReward.Code:type_name -> tutorial.RES_CODE @@ -26282,26 +27272,26 @@ var file_proto_Gameapi_proto_depIdxs = []int32{ 2, // 159: tutorial.ResShippingOrder.Code:type_name -> tutorial.RES_CODE 2, // 160: tutorial.ResChampshipReward.Code:type_name -> tutorial.RES_CODE 2, // 161: tutorial.ResChampshipRankReward.Code:type_name -> tutorial.RES_CODE - 462, // 162: tutorial.ResChampshipRank.RankList:type_name -> tutorial.ResChampshipRank.RankListEntry - 463, // 163: tutorial.ResChampshipPreRank.RankList:type_name -> tutorial.ResChampshipPreRank.RankListEntry - 464, // 164: tutorial.ResNotifyCard.Card:type_name -> tutorial.ResNotifyCard.CardEntry - 465, // 165: tutorial.ResNotifyCard.Master:type_name -> tutorial.ResNotifyCard.MasterEntry - 466, // 166: tutorial.ResNotifyCard.Handbook:type_name -> tutorial.ResNotifyCard.HandbookEntry + 479, // 162: tutorial.ResChampshipRank.RankList:type_name -> tutorial.ResChampshipRank.RankListEntry + 480, // 163: tutorial.ResChampshipPreRank.RankList:type_name -> tutorial.ResChampshipPreRank.RankListEntry + 481, // 164: tutorial.ResNotifyCard.Card:type_name -> tutorial.ResNotifyCard.CardEntry + 482, // 165: tutorial.ResNotifyCard.Master:type_name -> tutorial.ResNotifyCard.MasterEntry + 483, // 166: tutorial.ResNotifyCard.Handbook:type_name -> tutorial.ResNotifyCard.HandbookEntry 2, // 167: tutorial.ResSetFacebookUrl.Code:type_name -> tutorial.RES_CODE - 467, // 168: tutorial.ResMining.Map:type_name -> tutorial.ResMining.MapEntry - 468, // 169: tutorial.ReqMiningTake.Map:type_name -> tutorial.ReqMiningTake.MapEntry + 484, // 168: tutorial.ResMining.Map:type_name -> tutorial.ResMining.MapEntry + 485, // 169: tutorial.ReqMiningTake.Map:type_name -> tutorial.ReqMiningTake.MapEntry 2, // 170: tutorial.ResMiningTake.Code:type_name -> tutorial.RES_CODE 2, // 171: tutorial.ResMiningReward.Code:type_name -> tutorial.RES_CODE - 469, // 172: tutorial.ResActRed.Red:type_name -> tutorial.ResActRed.RedEntry + 486, // 172: tutorial.ResActRed.Red:type_name -> tutorial.ResActRed.RedEntry 189, // 173: tutorial.ActivityNotify.Info:type_name -> tutorial.ActivityInfo - 470, // 174: tutorial.ResItem.Item:type_name -> tutorial.ResItem.ItemEntry - 471, // 175: tutorial.ItemNotify.Item:type_name -> tutorial.ItemNotify.ItemEntry + 487, // 174: tutorial.ResItem.Item:type_name -> tutorial.ResItem.ItemEntry + 488, // 175: tutorial.ItemNotify.Item:type_name -> tutorial.ItemNotify.ItemEntry 337, // 176: tutorial.ResGuessColor.MapList:type_name -> tutorial.GuessColorInfo - 472, // 177: tutorial.ResGuessColor.OMap:type_name -> tutorial.ResGuessColor.OMapEntry + 489, // 177: tutorial.ResGuessColor.OMap:type_name -> tutorial.ResGuessColor.OMapEntry 335, // 178: tutorial.ResGuessColor.Opponent:type_name -> tutorial.opponent 337, // 179: tutorial.ReqGuessColorTake.Map:type_name -> tutorial.GuessColorInfo - 473, // 180: tutorial.ReqGuessColorTake.OMap:type_name -> tutorial.ReqGuessColorTake.OMapEntry - 474, // 181: tutorial.GuessColorInfo.Map:type_name -> tutorial.GuessColorInfo.MapEntry + 490, // 180: tutorial.ReqGuessColorTake.OMap:type_name -> tutorial.ReqGuessColorTake.OMapEntry + 491, // 181: tutorial.GuessColorInfo.Map:type_name -> tutorial.GuessColorInfo.MapEntry 2, // 182: tutorial.ResGuessColorTake.Code:type_name -> tutorial.RES_CODE 2, // 183: tutorial.ResGuessColorReward.Code:type_name -> tutorial.RES_CODE 343, // 184: tutorial.ResRace.Opponent:type_name -> tutorial.raceopponent @@ -26310,40 +27300,40 @@ var file_proto_Gameapi_proto_depIdxs = []int32{ 159, // 187: tutorial.ResPlayroom.Items:type_name -> tutorial.ItemInfo 373, // 188: tutorial.ResPlayroom.Opponent:type_name -> tutorial.RoomOpponent 372, // 189: tutorial.ResPlayroom.Friend:type_name -> tutorial.FriendRoom - 475, // 190: tutorial.ResPlayroom.Playroom:type_name -> tutorial.ResPlayroom.PlayroomEntry - 476, // 191: tutorial.ResPlayroom.Mood:type_name -> tutorial.ResPlayroom.MoodEntry + 492, // 190: tutorial.ResPlayroom.Playroom:type_name -> tutorial.ResPlayroom.PlayroomEntry + 493, // 191: tutorial.ResPlayroom.Mood:type_name -> tutorial.ResPlayroom.MoodEntry 159, // 192: tutorial.ResPlayroom.LoseItem:type_name -> tutorial.ItemInfo 369, // 193: tutorial.ResPlayroom.Chip:type_name -> tutorial.ChipInfo - 477, // 194: tutorial.ResPlayroom.Physiology:type_name -> tutorial.ResPlayroom.PhysiologyEntry - 478, // 195: tutorial.ResPlayroom.Dress:type_name -> tutorial.ResPlayroom.DressEntry - 479, // 196: tutorial.ResPlayroom.DressSet:type_name -> tutorial.ResPlayroom.DressSetEntry + 494, // 194: tutorial.ResPlayroom.Physiology:type_name -> tutorial.ResPlayroom.PhysiologyEntry + 495, // 195: tutorial.ResPlayroom.Dress:type_name -> tutorial.ResPlayroom.DressEntry + 496, // 196: tutorial.ResPlayroom.DressSet:type_name -> tutorial.ResPlayroom.DressSetEntry 163, // 197: tutorial.ResPlayroom.DailyTask:type_name -> tutorial.DailyTask 163, // 198: tutorial.NotifyPlayroomTask.DailyTask:type_name -> tutorial.DailyTask 2, // 199: tutorial.ResPlayroomTask.Code:type_name -> tutorial.RES_CODE 2, // 200: tutorial.ResPlayroomTaskReward.Code:type_name -> tutorial.RES_CODE 2, // 201: tutorial.ResPlayroomUnlock.Code:type_name -> tutorial.RES_CODE 2, // 202: tutorial.ResPlayroomUpvote.Code:type_name -> tutorial.RES_CODE - 480, // 203: tutorial.ReqPlayroomDressSet.DressSet:type_name -> tutorial.ReqPlayroomDressSet.DressSetEntry + 497, // 203: tutorial.ReqPlayroomDressSet.DressSet:type_name -> tutorial.ReqPlayroomDressSet.DressSetEntry 2, // 204: tutorial.ResPlayroomDressSet.Code:type_name -> tutorial.RES_CODE 2, // 205: tutorial.ResPlayroomPetAirSet.Code:type_name -> tutorial.RES_CODE 2, // 206: tutorial.ResPlayroomWrokOutline.Code:type_name -> tutorial.RES_CODE 159, // 207: tutorial.NotifyPlayroomLose.LoseItem:type_name -> tutorial.ItemInfo 369, // 208: tutorial.NotifyPlayroomLose.Chip:type_name -> tutorial.ChipInfo - 481, // 209: tutorial.NotifyPlayroomMood.Mood:type_name -> tutorial.NotifyPlayroomMood.MoodEntry - 482, // 210: tutorial.NotifyPlayroomMood.Physiology:type_name -> tutorial.NotifyPlayroomMood.PhysiologyEntry - 483, // 211: tutorial.ResPlayroomInfo.Playroom:type_name -> tutorial.ResPlayroomInfo.PlayroomEntry - 484, // 212: tutorial.ResPlayroomInfo.Items:type_name -> tutorial.ResPlayroomInfo.ItemsEntry - 485, // 213: tutorial.ResPlayroomInfo.flip:type_name -> tutorial.ResPlayroomInfo.FlipEntry - 486, // 214: tutorial.ResPlayroomInfo.Emoji:type_name -> tutorial.ResPlayroomInfo.EmojiEntry - 487, // 215: tutorial.ResPlayroomInfo.DressSet:type_name -> tutorial.ResPlayroomInfo.DressSetEntry + 498, // 209: tutorial.NotifyPlayroomMood.Mood:type_name -> tutorial.NotifyPlayroomMood.MoodEntry + 499, // 210: tutorial.NotifyPlayroomMood.Physiology:type_name -> tutorial.NotifyPlayroomMood.PhysiologyEntry + 500, // 211: tutorial.ResPlayroomInfo.Playroom:type_name -> tutorial.ResPlayroomInfo.PlayroomEntry + 501, // 212: tutorial.ResPlayroomInfo.Items:type_name -> tutorial.ResPlayroomInfo.ItemsEntry + 502, // 213: tutorial.ResPlayroomInfo.flip:type_name -> tutorial.ResPlayroomInfo.FlipEntry + 503, // 214: tutorial.ResPlayroomInfo.Emoji:type_name -> tutorial.ResPlayroomInfo.EmojiEntry + 504, // 215: tutorial.ResPlayroomInfo.DressSet:type_name -> tutorial.ResPlayroomInfo.DressSetEntry 2, // 216: tutorial.ResPlayroomFlip.Code:type_name -> tutorial.RES_CODE 2, // 217: tutorial.ResPlayroomGuide.Code:type_name -> tutorial.RES_CODE 2, // 218: tutorial.ResPlayroomFlipReward.Code:type_name -> tutorial.RES_CODE 2, // 219: tutorial.ResPlayroomGame.Code:type_name -> tutorial.RES_CODE - 488, // 220: tutorial.ResPlayroomGame.Items:type_name -> tutorial.ResPlayroomGame.ItemsEntry + 505, // 220: tutorial.ResPlayroomGame.Items:type_name -> tutorial.ResPlayroomGame.ItemsEntry 159, // 221: tutorial.ResPlayroomGameShowReward.Items:type_name -> tutorial.ItemInfo 2, // 222: tutorial.ResPlayroomInteract.Code:type_name -> tutorial.RES_CODE - 489, // 223: tutorial.ReqPlayroomSetRoom.Playroom:type_name -> tutorial.ReqPlayroomSetRoom.PlayroomEntry + 506, // 223: tutorial.ReqPlayroomSetRoom.Playroom:type_name -> tutorial.ReqPlayroomSetRoom.PlayroomEntry 2, // 224: tutorial.ResPlayroomSetRoom.Code:type_name -> tutorial.RES_CODE 2, // 225: tutorial.ResPlayroomSelectReward.Code:type_name -> tutorial.RES_CODE 2, // 226: tutorial.ResPlayroomLose.Code:type_name -> tutorial.RES_CODE @@ -26361,24 +27351,33 @@ var file_proto_Gameapi_proto_depIdxs = []int32{ 419, // 238: tutorial.ResCollectInfo.Items:type_name -> tutorial.CollectItem 159, // 239: tutorial.CollectItem.Items:type_name -> tutorial.ItemInfo 2, // 240: tutorial.ResCollect.Code:type_name -> tutorial.RES_CODE - 162, // 241: tutorial.ResDailyTask.WeekRewardEntry.value:type_name -> tutorial.DailyWeek - 163, // 242: tutorial.ResDailyTask.DailyTaskEntry.value:type_name -> tutorial.DailyTask - 199, // 243: tutorial.ResLimitEvent.LimitEventListEntry.value:type_name -> tutorial.LimitEvent - 214, // 244: tutorial.ResRank.RankListEntry.value:type_name -> tutorial.ResPlayerSimple - 258, // 245: tutorial.ResMailList.MailListEntry.value:type_name -> tutorial.MailInfo - 274, // 246: tutorial.ResCharge.SpecialShopEntry.value:type_name -> tutorial.ResSpecialShop - 275, // 247: tutorial.ResCharge.ChessShopEntry.value:type_name -> tutorial.ResChessShop - 286, // 248: tutorial.ResEndless.EndlessListEntry.value:type_name -> tutorial.ResEndlessInfo - 215, // 249: tutorial.ResChampshipRank.RankListEntry.value:type_name -> tutorial.ResPlayerRank - 215, // 250: tutorial.ResChampshipPreRank.RankListEntry.value:type_name -> tutorial.ResPlayerRank - 359, // 251: tutorial.ResPlayroom.DressEntry.value:type_name -> tutorial.PlayroomDress - 159, // 252: tutorial.ResPlayroomInfo.ItemsEntry.value:type_name -> tutorial.ItemInfo - 159, // 253: tutorial.ResPlayroomGame.ItemsEntry.value:type_name -> tutorial.ItemInfo - 254, // [254:254] is the sub-list for method output_type - 254, // [254:254] is the sub-list for method input_type - 254, // [254:254] is the sub-list for extension type_name - 254, // [254:254] is the sub-list for extension extendee - 0, // [0:254] is the sub-list for field type_name + 424, // 241: tutorial.ResCatnip.GameList:type_name -> tutorial.CatnipGame + 214, // 242: tutorial.CatnipGame.Partner:type_name -> tutorial.ResPlayerSimple + 2, // 243: tutorial.ResCatnipInvite.Code:type_name -> tutorial.RES_CODE + 2, // 244: tutorial.ResCatnipAgree.Code:type_name -> tutorial.RES_CODE + 2, // 245: tutorial.ResCatnipRefuse.Code:type_name -> tutorial.RES_CODE + 2, // 246: tutorial.ResCatnipMultiply.Code:type_name -> tutorial.RES_CODE + 2, // 247: tutorial.ResCatnipPlay.Code:type_name -> tutorial.RES_CODE + 2, // 248: tutorial.ResCatnipReward.Code:type_name -> tutorial.RES_CODE + 2, // 249: tutorial.ResCatnipGrandReward.Code:type_name -> tutorial.RES_CODE + 162, // 250: tutorial.ResDailyTask.WeekRewardEntry.value:type_name -> tutorial.DailyWeek + 163, // 251: tutorial.ResDailyTask.DailyTaskEntry.value:type_name -> tutorial.DailyTask + 199, // 252: tutorial.ResLimitEvent.LimitEventListEntry.value:type_name -> tutorial.LimitEvent + 214, // 253: tutorial.ResRank.RankListEntry.value:type_name -> tutorial.ResPlayerSimple + 258, // 254: tutorial.ResMailList.MailListEntry.value:type_name -> tutorial.MailInfo + 274, // 255: tutorial.ResCharge.SpecialShopEntry.value:type_name -> tutorial.ResSpecialShop + 275, // 256: tutorial.ResCharge.ChessShopEntry.value:type_name -> tutorial.ResChessShop + 286, // 257: tutorial.ResEndless.EndlessListEntry.value:type_name -> tutorial.ResEndlessInfo + 215, // 258: tutorial.ResChampshipRank.RankListEntry.value:type_name -> tutorial.ResPlayerRank + 215, // 259: tutorial.ResChampshipPreRank.RankListEntry.value:type_name -> tutorial.ResPlayerRank + 359, // 260: tutorial.ResPlayroom.DressEntry.value:type_name -> tutorial.PlayroomDress + 159, // 261: tutorial.ResPlayroomInfo.ItemsEntry.value:type_name -> tutorial.ItemInfo + 159, // 262: tutorial.ResPlayroomGame.ItemsEntry.value:type_name -> tutorial.ItemInfo + 263, // [263:263] is the sub-list for method output_type + 263, // [263:263] is the sub-list for method input_type + 263, // [263:263] is the sub-list for extension type_name + 263, // [263:263] is the sub-list for extension extendee + 0, // [0:263] is the sub-list for field type_name } func init() { file_proto_Gameapi_proto_init() } @@ -26392,7 +27391,7 @@ func file_proto_Gameapi_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_proto_Gameapi_proto_rawDesc), len(file_proto_Gameapi_proto_rawDesc)), NumEnums: 11, - NumMessages: 479, + NumMessages: 496, NumExtensions: 0, NumServices: 0, }, From c49003423864a32546e749896417e1f134ce589f Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 18 Jul 2025 18:21:24 +0800 Subject: [PATCH 08/19] =?UTF-8?q?=E5=90=8E=E5=8F=B0=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/admin.go | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/game/admin.go b/src/server/game/admin.go index aec378b2..c67dc9a8 100644 --- a/src/server/game/admin.go +++ b/src/server/game/admin.go @@ -181,6 +181,7 @@ func ReqServerInfo(args []interface{}) error { func ReqReloadServerMail(args []interface{}) error { G_GameLogicPtr.MailMgrCall(&Msg.Msg{Type: Msg.HANDLE_TYPE_MAIL_RELOAD}) G_GameLogicPtr.NotifyAll(&Msg.Msg{Type: Msg.HANDLE_TYPE_MAIL}) + log.Debug("ReqReloadServerMail success") return nil } From af28ca49a5b3e766e5bcc0606d77ddc19cfd0b19 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 18 Jul 2025 18:43:13 +0800 Subject: [PATCH 09/19] debug --- src/server/game/MailMgr.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/server/game/MailMgr.go b/src/server/game/MailMgr.go index 65dcf67c..d454b5f0 100644 --- a/src/server/game/MailMgr.go +++ b/src/server/game/MailMgr.go @@ -6,6 +6,7 @@ import ( "server/db" "server/game/mod/item" "server/game/mod/msg" + "server/pkg/github.com/name5566/leaf/log" "strings" ) @@ -105,6 +106,7 @@ func (r *MailMgr) Sync(Uid int, Register int64) []ServerMail { list = append(list, *v) } else { if GoUtil.InArray(Uid, v.To_uids) { + log.Debug("uid : %d, mail id : %d, title : %s", Uid, v.Id, v.Title) list = append(list, *v) } } From 3fbf00c41c3b8eefdafedc6ac3eb42fffc0602f5 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 18 Jul 2025 18:46:36 +0800 Subject: [PATCH 10/19] debug --- src/server/game/MailMgr.go | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/game/MailMgr.go b/src/server/game/MailMgr.go index d454b5f0..889079b7 100644 --- a/src/server/game/MailMgr.go +++ b/src/server/game/MailMgr.go @@ -93,6 +93,7 @@ func (r *MailMgr) Sync(Uid int, Register int64) []ServerMail { Now := GoUtil.Now() list := make([]ServerMail, 0) for _, v := range r.list { + log.Debug("uid : %d, mail id : %d, title : %s", Uid, v.Id, v.Title) if v.Start_time > 0 && v.Start_time > Now { continue } From 54e283ed06566ccb8d51881c81d5b4663aa5347b Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 18 Jul 2025 18:50:15 +0800 Subject: [PATCH 11/19] =?UTF-8?q?=E9=82=AE=E4=BB=B6=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/db/SqlStruct.go | 2 ++ src/server/game/MailMgr.go | 8 +++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/server/db/SqlStruct.go b/src/server/db/SqlStruct.go index d69c1a44..2526a52f 100644 --- a/src/server/db/SqlStruct.go +++ b/src/server/db/SqlStruct.go @@ -477,6 +477,8 @@ type SqlServerMailStruct struct { Id int `db:"mail_id"` Title string `db:"title"` Content string `db:"content"` + SubTitle string `db:"subTitle"` + SubTitleEn string `db:"subTitle_en"` TitleEn string `db:"title_en"` ContentEn string `db:"content_en"` Items string `db:"items"` diff --git a/src/server/game/MailMgr.go b/src/server/game/MailMgr.go index 889079b7..ce5195bf 100644 --- a/src/server/game/MailMgr.go +++ b/src/server/game/MailMgr.go @@ -61,7 +61,11 @@ func (m *MailMgr) AddMail(msg *msg.Msg) (interface{}, error) { func (r *MailMgr) LoadMail(msg *msg.Msg) (interface{}, error) { // 从数据库加载邮件 data := make([]*db.SqlServerMailStruct, 0) - db.GetServerMailData(&data) + err := db.GetServerMailData(&data) + if err != nil { + log.Error("LoadMail error: %v", err) + return nil, err + } for _, v := range data { Uids := make([]int, 0) UidArr := strings.Split(v.To_uids, ",") @@ -93,7 +97,6 @@ func (r *MailMgr) Sync(Uid int, Register int64) []ServerMail { Now := GoUtil.Now() list := make([]ServerMail, 0) for _, v := range r.list { - log.Debug("uid : %d, mail id : %d, title : %s", Uid, v.Id, v.Title) if v.Start_time > 0 && v.Start_time > Now { continue } @@ -107,7 +110,6 @@ func (r *MailMgr) Sync(Uid int, Register int64) []ServerMail { list = append(list, *v) } else { if GoUtil.InArray(Uid, v.To_uids) { - log.Debug("uid : %d, mail id : %d, title : %s", Uid, v.Id, v.Title) list = append(list, *v) } } From 22ce441bcc5e1c489729608ebcdb2295e7fa914b Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 22 Jul 2025 10:09:42 +0800 Subject: [PATCH 12/19] =?UTF-8?q?=E4=BF=A1=E6=81=AF=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/RegisterNetworkFunc.go | 1 + src/server/msg/Gameapi.pb.go | 598 +++++++++++++------------ 2 files changed, 307 insertions(+), 292 deletions(-) diff --git a/src/server/game/RegisterNetworkFunc.go b/src/server/game/RegisterNetworkFunc.go index fab5069b..1d5cb185 100644 --- a/src/server/game/RegisterNetworkFunc.go +++ b/src/server/game/RegisterNetworkFunc.go @@ -69,6 +69,7 @@ func ReqPlayerBriefProfileDataFunc(player *Player, buf []byte) error { PicURL: PlayerSimpleData.FaceBookPic, ActiveTime: int32(max(PlayerSimpleData.Loginout, PlayerSimpleData.Login)), NickName: PlayerSimpleData.Name, + SetEmoji: GoUtil.MapIntToInt32(PlayerSimpleData.Emoji), }) return nil } diff --git a/src/server/msg/Gameapi.pb.go b/src/server/msg/Gameapi.pb.go index fb6e6461..f562a563 100644 --- a/src/server/msg/Gameapi.pb.go +++ b/src/server/msg/Gameapi.pb.go @@ -4766,6 +4766,7 @@ type ResPlayerBriefProfileData struct { NickName string `protobuf:"bytes,5,opt,name=NickName,proto3" json:"NickName,omitempty"` PicURL string `protobuf:"bytes,6,opt,name=PicURL,proto3" json:"PicURL,omitempty"` ActiveTime int32 `protobuf:"varint,7,opt,name=ActiveTime,proto3" json:"ActiveTime,omitempty"` + SetEmoji map[int32]int32 `protobuf:"bytes,11,rep,name=SetEmoji,proto3" json:"SetEmoji,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 已设置的头像 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -4849,6 +4850,13 @@ func (x *ResPlayerBriefProfileData) GetActiveTime() int32 { return 0 } +func (x *ResPlayerBriefProfileData) GetSetEmoji() map[int32]int32 { + if x != nil { + return x.SetEmoji + } + return nil +} + // 设置能量倍数 type ReqSetEnergyMul struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -24985,7 +24993,7 @@ const file_proto_Gameapi_proto_rawDesc = "" + "ActiveTime\x18\t \x01(\x05R\n" + "ActiveTime\"1\n" + "\x19ReqPlayerBriefProfileData\x12\x14\n" + - "\x05dwUin\x18\x01 \x01(\x03R\x05dwUin\"\xe5\x01\n" + + "\x05dwUin\x18\x01 \x01(\x03R\x05dwUin\"\xf1\x02\n" + "\x19ResPlayerBriefProfileData\x12\x14\n" + "\x05dwUin\x18\x01 \x01(\x03R\x05dwUin\x12\x1e\n" + "\n" + @@ -24997,7 +25005,11 @@ const file_proto_Gameapi_proto_rawDesc = "" + "\x06PicURL\x18\x06 \x01(\tR\x06PicURL\x12\x1e\n" + "\n" + "ActiveTime\x18\a \x01(\x05R\n" + - "ActiveTime\"/\n" + + "ActiveTime\x12M\n" + + "\bSetEmoji\x18\v \x03(\v21.tutorial.ResPlayerBriefProfileData.SetEmojiEntryR\bSetEmoji\x1a;\n" + + "\rSetEmojiEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\x05R\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\x05R\x05value:\x028\x01\"/\n" + "\x0fReqSetEnergyMul\x12\x1c\n" + "\tEnergyMul\x18\x01 \x01(\x05R\tEnergyMul\"W\n" + "\x0fResSetEnergyMul\x122\n" + @@ -26599,7 +26611,7 @@ func file_proto_Gameapi_proto_rawDescGZIP() []byte { } var file_proto_Gameapi_proto_enumTypes = make([]protoimpl.EnumInfo, 11) -var file_proto_Gameapi_proto_msgTypes = make([]protoimpl.MessageInfo, 496) +var file_proto_Gameapi_proto_msgTypes = make([]protoimpl.MessageInfo, 497) var file_proto_Gameapi_proto_goTypes = []any{ (ITEM_POP_LABEL)(0), // 0: tutorial.ITEM_POP_LABEL (HANDLE_TYPE)(0), // 1: tutorial.HANDLE_TYPE @@ -27059,55 +27071,56 @@ var file_proto_Gameapi_proto_goTypes = []any{ nil, // 455: tutorial.ReqPlayroomOutline.MChessDataEntry nil, // 456: tutorial.ReqPutChessInBag.MChessDataEntry nil, // 457: tutorial.ReqTakeChessOutBag.MChessDataEntry - nil, // 458: tutorial.UserInfo.SetEmojiEntry - nil, // 459: tutorial.ReqRewardOrder.MChessDataEntry - nil, // 460: tutorial.ResCardInfo.AllCardEntry - nil, // 461: tutorial.ResCardInfo.HandbookEntry - nil, // 462: tutorial.ResGuildInfo.RewardEntry - nil, // 463: tutorial.ResGuideInfo.RewardEntry - nil, // 464: tutorial.ResDailyTask.WeekRewardEntry - nil, // 465: tutorial.ResDailyTask.DailyTaskEntry - nil, // 466: tutorial.ResLimitEvent.LimitEventListEntry - nil, // 467: tutorial.ResLimitEventProgress.ProgressRewardEntry - nil, // 468: tutorial.LimitEvent.ParamEntry - nil, // 469: tutorial.ReqLimitEventLuckyCat.MChessDataEntry - nil, // 470: tutorial.ResPlayerSimple.EmojiEntry - nil, // 471: tutorial.ResKv.KvEntry - nil, // 472: tutorial.ResRank.RankListEntry - nil, // 473: tutorial.ResMailList.MailListEntry - nil, // 474: tutorial.ResCharge.SpecialShopEntry - nil, // 475: tutorial.ResCharge.ChessShopEntry - nil, // 476: tutorial.ResCharge.GiftEntry - nil, // 477: tutorial.ReqBuyChessShop2.MChessDataEntry - nil, // 478: tutorial.ResEndless.EndlessListEntry - nil, // 479: tutorial.ResChampshipRank.RankListEntry - nil, // 480: tutorial.ResChampshipPreRank.RankListEntry - nil, // 481: tutorial.ResNotifyCard.CardEntry - nil, // 482: tutorial.ResNotifyCard.MasterEntry - nil, // 483: tutorial.ResNotifyCard.HandbookEntry - nil, // 484: tutorial.ResMining.MapEntry - nil, // 485: tutorial.ReqMiningTake.MapEntry - nil, // 486: tutorial.ResActRed.RedEntry - nil, // 487: tutorial.ResItem.ItemEntry - nil, // 488: tutorial.ItemNotify.ItemEntry - nil, // 489: tutorial.ResGuessColor.OMapEntry - nil, // 490: tutorial.ReqGuessColorTake.OMapEntry - nil, // 491: tutorial.GuessColorInfo.MapEntry - nil, // 492: tutorial.ResPlayroom.PlayroomEntry - nil, // 493: tutorial.ResPlayroom.MoodEntry - nil, // 494: tutorial.ResPlayroom.PhysiologyEntry - nil, // 495: tutorial.ResPlayroom.DressEntry - nil, // 496: tutorial.ResPlayroom.DressSetEntry - nil, // 497: tutorial.ReqPlayroomDressSet.DressSetEntry - nil, // 498: tutorial.NotifyPlayroomMood.MoodEntry - nil, // 499: tutorial.NotifyPlayroomMood.PhysiologyEntry - nil, // 500: tutorial.ResPlayroomInfo.PlayroomEntry - nil, // 501: tutorial.ResPlayroomInfo.ItemsEntry - nil, // 502: tutorial.ResPlayroomInfo.FlipEntry - nil, // 503: tutorial.ResPlayroomInfo.EmojiEntry - nil, // 504: tutorial.ResPlayroomInfo.DressSetEntry - nil, // 505: tutorial.ResPlayroomGame.ItemsEntry - nil, // 506: tutorial.ReqPlayroomSetRoom.PlayroomEntry + nil, // 458: tutorial.ResPlayerBriefProfileData.SetEmojiEntry + nil, // 459: tutorial.UserInfo.SetEmojiEntry + nil, // 460: tutorial.ReqRewardOrder.MChessDataEntry + nil, // 461: tutorial.ResCardInfo.AllCardEntry + nil, // 462: tutorial.ResCardInfo.HandbookEntry + nil, // 463: tutorial.ResGuildInfo.RewardEntry + nil, // 464: tutorial.ResGuideInfo.RewardEntry + nil, // 465: tutorial.ResDailyTask.WeekRewardEntry + nil, // 466: tutorial.ResDailyTask.DailyTaskEntry + nil, // 467: tutorial.ResLimitEvent.LimitEventListEntry + nil, // 468: tutorial.ResLimitEventProgress.ProgressRewardEntry + nil, // 469: tutorial.LimitEvent.ParamEntry + nil, // 470: tutorial.ReqLimitEventLuckyCat.MChessDataEntry + nil, // 471: tutorial.ResPlayerSimple.EmojiEntry + nil, // 472: tutorial.ResKv.KvEntry + nil, // 473: tutorial.ResRank.RankListEntry + nil, // 474: tutorial.ResMailList.MailListEntry + nil, // 475: tutorial.ResCharge.SpecialShopEntry + nil, // 476: tutorial.ResCharge.ChessShopEntry + nil, // 477: tutorial.ResCharge.GiftEntry + nil, // 478: tutorial.ReqBuyChessShop2.MChessDataEntry + nil, // 479: tutorial.ResEndless.EndlessListEntry + nil, // 480: tutorial.ResChampshipRank.RankListEntry + nil, // 481: tutorial.ResChampshipPreRank.RankListEntry + nil, // 482: tutorial.ResNotifyCard.CardEntry + nil, // 483: tutorial.ResNotifyCard.MasterEntry + nil, // 484: tutorial.ResNotifyCard.HandbookEntry + nil, // 485: tutorial.ResMining.MapEntry + nil, // 486: tutorial.ReqMiningTake.MapEntry + nil, // 487: tutorial.ResActRed.RedEntry + nil, // 488: tutorial.ResItem.ItemEntry + nil, // 489: tutorial.ItemNotify.ItemEntry + nil, // 490: tutorial.ResGuessColor.OMapEntry + nil, // 491: tutorial.ReqGuessColorTake.OMapEntry + nil, // 492: tutorial.GuessColorInfo.MapEntry + nil, // 493: tutorial.ResPlayroom.PlayroomEntry + nil, // 494: tutorial.ResPlayroom.MoodEntry + nil, // 495: tutorial.ResPlayroom.PhysiologyEntry + nil, // 496: tutorial.ResPlayroom.DressEntry + nil, // 497: tutorial.ResPlayroom.DressSetEntry + nil, // 498: tutorial.ReqPlayroomDressSet.DressSetEntry + nil, // 499: tutorial.NotifyPlayroomMood.MoodEntry + nil, // 500: tutorial.NotifyPlayroomMood.PhysiologyEntry + nil, // 501: tutorial.ResPlayroomInfo.PlayroomEntry + nil, // 502: tutorial.ResPlayroomInfo.ItemsEntry + nil, // 503: tutorial.ResPlayroomInfo.FlipEntry + nil, // 504: tutorial.ResPlayroomInfo.EmojiEntry + nil, // 505: tutorial.ResPlayroomInfo.DressSetEntry + nil, // 506: tutorial.ResPlayroomGame.ItemsEntry + nil, // 507: tutorial.ReqPlayroomSetRoom.PlayroomEntry } var file_proto_Gameapi_proto_depIdxs = []int32{ 446, // 0: tutorial.ResChessColorData.mChessColorData:type_name -> tutorial.ResChessColorData.MChessColorDataEntry @@ -27139,245 +27152,246 @@ var file_proto_Gameapi_proto_depIdxs = []int32{ 457, // 26: tutorial.ReqTakeChessOutBag.mChessData:type_name -> tutorial.ReqTakeChessOutBag.MChessDataEntry 2, // 27: tutorial.ResTakeChessOutBag.code:type_name -> tutorial.RES_CODE 2, // 28: tutorial.ResBuyChessBagGrid.code:type_name -> tutorial.RES_CODE - 2, // 29: tutorial.ResSetEnergyMul.ResultCode:type_name -> tutorial.RES_CODE - 9, // 30: tutorial.ReqLang.Lang:type_name -> tutorial.LANG_TYPE - 2, // 31: tutorial.ResLang.ResultCode:type_name -> tutorial.RES_CODE - 9, // 32: tutorial.BaseInfo.Lang:type_name -> tutorial.LANG_TYPE - 176, // 33: tutorial.UserInfo.AvatarList:type_name -> tutorial.AvatarInfo - 172, // 34: tutorial.UserInfo.FaceList:type_name -> tutorial.FaceInfo - 179, // 35: tutorial.UserInfo.EmojiList:type_name -> tutorial.EmojiInfo - 458, // 36: tutorial.UserInfo.SetEmoji:type_name -> tutorial.UserInfo.SetEmojiEntry - 2, // 37: tutorial.ResSetName.ResultCode:type_name -> tutorial.RES_CODE - 2, // 38: tutorial.ResSetPetName.ResultCode:type_name -> tutorial.RES_CODE - 2, // 39: tutorial.ResBuyEnergy.Code:type_name -> tutorial.RES_CODE - 2, // 40: tutorial.ResGetEnergyByAD.Code:type_name -> tutorial.RES_CODE - 2, // 41: tutorial.ResGetHandbookReward.Code:type_name -> tutorial.RES_CODE - 94, // 42: tutorial.Handbook.Handbooks:type_name -> tutorial.HandbookInfo - 2, // 43: tutorial.ResHandbookAllReward.Code:type_name -> tutorial.RES_CODE - 459, // 44: tutorial.ReqRewardOrder.mChessData:type_name -> tutorial.ReqRewardOrder.MChessDataEntry - 2, // 45: tutorial.ResRewardOrder.Code:type_name -> tutorial.RES_CODE - 2, // 46: tutorial.ResDelOrder.Code:type_name -> tutorial.RES_CODE - 159, // 47: tutorial.Order.Items:type_name -> tutorial.ItemInfo - 104, // 48: tutorial.ResOrderList.OrderList:type_name -> tutorial.Order - 2, // 49: tutorial.ResDecorate.Code:type_name -> tutorial.RES_CODE - 2, // 50: tutorial.ResDecorateAll.Code:type_name -> tutorial.RES_CODE - 2, // 51: tutorial.ResDecorateReward.Code:type_name -> tutorial.RES_CODE - 114, // 52: tutorial.ResCardInfo.CardList:type_name -> tutorial.Card - 460, // 53: tutorial.ResCardInfo.AllCard:type_name -> tutorial.ResCardInfo.AllCardEntry - 461, // 54: tutorial.ResCardInfo.Handbook:type_name -> tutorial.ResCardInfo.HandbookEntry - 2, // 55: tutorial.ResCardSeasonFirstReward.Code:type_name -> tutorial.RES_CODE - 2, // 56: tutorial.ResCardHandbookReward.Code:type_name -> tutorial.RES_CODE - 2, // 57: tutorial.ResMasterCard.Code:type_name -> tutorial.RES_CODE - 2, // 58: tutorial.ResCardCollectReward.Code:type_name -> tutorial.RES_CODE - 2, // 59: tutorial.ResExStarReward.Code:type_name -> tutorial.RES_CODE - 2, // 60: tutorial.ResAllCollectReward.Code:type_name -> tutorial.RES_CODE - 2, // 61: tutorial.ResCardGive.Code:type_name -> tutorial.RES_CODE - 2, // 62: tutorial.ResAgreeCardGive.Code:type_name -> tutorial.RES_CODE - 2, // 63: tutorial.ResRefuseCardGive.Code:type_name -> tutorial.RES_CODE - 2, // 64: tutorial.ResCardSend.Code:type_name -> tutorial.RES_CODE - 2, // 65: tutorial.ResCardExchange.Code:type_name -> tutorial.RES_CODE - 2, // 66: tutorial.ResSelectCardExchange.Code:type_name -> tutorial.RES_CODE - 2, // 67: tutorial.ResAgreeCardExchange.Code:type_name -> tutorial.RES_CODE - 2, // 68: tutorial.ResRefuseCardSelect.Code:type_name -> tutorial.RES_CODE - 2, // 69: tutorial.ResRefuseCardExchange.Code:type_name -> tutorial.RES_CODE - 2, // 70: tutorial.ResGetFriendCard.Code:type_name -> tutorial.RES_CODE - 2, // 71: tutorial.ResGuideReward.Code:type_name -> tutorial.RES_CODE - 2, // 72: tutorial.ResGuidePlayroom.Code:type_name -> tutorial.RES_CODE - 462, // 73: tutorial.ResGuildInfo.Reward:type_name -> tutorial.ResGuildInfo.RewardEntry - 463, // 74: tutorial.ResGuideInfo.Reward:type_name -> tutorial.ResGuideInfo.RewardEntry - 159, // 75: tutorial.ResItemPop.Items:type_name -> tutorial.ItemInfo - 160, // 76: tutorial.ResItemPop.CardPacks:type_name -> tutorial.CardPack - 464, // 77: tutorial.ResDailyTask.WeekReward:type_name -> tutorial.ResDailyTask.WeekRewardEntry - 465, // 78: tutorial.ResDailyTask.DailyTask:type_name -> tutorial.ResDailyTask.DailyTaskEntry - 159, // 79: tutorial.DailyWeek.Items:type_name -> tutorial.ItemInfo - 164, // 80: tutorial.DailyTask.Progress:type_name -> tutorial.QuestProgress - 159, // 81: tutorial.DailyTask.Items:type_name -> tutorial.ItemInfo - 2, // 82: tutorial.ResGetDailyTaskReward.Code:type_name -> tutorial.RES_CODE - 2, // 83: tutorial.ResGetDailyWeekReward.Code:type_name -> tutorial.RES_CODE - 2, // 84: tutorial.ResDailyUnlock.Code:type_name -> tutorial.RES_CODE - 172, // 85: tutorial.ResFaceInfo.FaceList:type_name -> tutorial.FaceInfo - 2, // 86: tutorial.ResSetFace.Code:type_name -> tutorial.RES_CODE - 176, // 87: tutorial.ResAvatarInfo.AvatarList:type_name -> tutorial.AvatarInfo - 2, // 88: tutorial.ResSetAvatar.Code:type_name -> tutorial.RES_CODE - 2, // 89: tutorial.ResSetEmoji.Code:type_name -> tutorial.RES_CODE - 183, // 90: tutorial.ResSevenLogin.WeekReward:type_name -> tutorial.SevenLoginReward - 183, // 91: tutorial.ResSevenLogin.MonthReward:type_name -> tutorial.SevenLoginReward - 159, // 92: tutorial.SevenLoginReward.Item1:type_name -> tutorial.ItemInfo - 159, // 93: tutorial.SevenLoginReward.Item2:type_name -> tutorial.ItemInfo - 159, // 94: tutorial.SevenLoginReward.Item3:type_name -> tutorial.ItemInfo - 2, // 95: tutorial.ResGetSevenLoginReward.Code:type_name -> tutorial.RES_CODE - 2, // 96: tutorial.ResGetMonthLoginReward.Code:type_name -> tutorial.RES_CODE - 189, // 97: tutorial.ResActivity.ActiveList:type_name -> tutorial.ActivityInfo - 2, // 98: tutorial.ResActivityReward.Code:type_name -> tutorial.RES_CODE - 466, // 99: tutorial.ResLimitEvent.LimitEventList:type_name -> tutorial.ResLimitEvent.LimitEventListEntry - 467, // 100: tutorial.ResLimitEventProgress.ProgressReward:type_name -> tutorial.ResLimitEventProgress.ProgressRewardEntry - 2, // 101: tutorial.ResLimitEventReward.Code:type_name -> tutorial.RES_CODE - 2, // 102: tutorial.ResSelectLimitEvent.Code:type_name -> tutorial.RES_CODE - 468, // 103: tutorial.LimitEvent.Param:type_name -> tutorial.LimitEvent.ParamEntry - 469, // 104: tutorial.ReqLimitEventLuckyCat.mChessData:type_name -> tutorial.ReqLimitEventLuckyCat.MChessDataEntry - 2, // 105: tutorial.ResLimitEventLuckyCat.Code:type_name -> tutorial.RES_CODE - 2, // 106: tutorial.ResLimitSenceReward.Code:type_name -> tutorial.RES_CODE - 159, // 107: tutorial.ResChessRainReward.Items:type_name -> tutorial.ItemInfo - 2, // 108: tutorial.ResFastProduceReward.Code:type_name -> tutorial.RES_CODE - 2, // 109: tutorial.ResCatTrickReward.Code:type_name -> tutorial.RES_CODE - 214, // 110: tutorial.ResSearchPlayer.List:type_name -> tutorial.ResPlayerSimple - 470, // 111: tutorial.ResPlayerSimple.Emoji:type_name -> tutorial.ResPlayerSimple.EmojiEntry - 214, // 112: tutorial.ResFriendLog.Player:type_name -> tutorial.ResPlayerSimple - 216, // 113: tutorial.NotifyFriendLog.info:type_name -> tutorial.ResFriendLog - 219, // 114: tutorial.NotifyFriendCard.Info:type_name -> tutorial.ResFriendCard - 471, // 115: tutorial.ResKv.kv:type_name -> tutorial.ResKv.KvEntry - 2, // 116: tutorial.ResFriendByCode.Code:type_name -> tutorial.RES_CODE - 214, // 117: tutorial.ResFriendByCode.Player:type_name -> tutorial.ResPlayerSimple - 214, // 118: tutorial.ResFriendRecommend.List:type_name -> tutorial.ResPlayerSimple - 2, // 119: tutorial.ResFriendIgnore.Code:type_name -> tutorial.RES_CODE - 214, // 120: tutorial.ResFriendList.FriendList:type_name -> tutorial.ResPlayerSimple - 2, // 121: tutorial.ResAddNpc.Code:type_name -> tutorial.RES_CODE - 234, // 122: tutorial.ResFriendApply.ApplyList:type_name -> tutorial.ResFriendApplyInfo - 214, // 123: tutorial.ResFriendApplyInfo.Player:type_name -> tutorial.ResPlayerSimple - 219, // 124: tutorial.ResFriendCardMsg.MsgList:type_name -> tutorial.ResFriendCard - 234, // 125: tutorial.ResWishApplyList.ApplyList:type_name -> tutorial.ResFriendApplyInfo - 2, // 126: tutorial.ResWishApply.Code:type_name -> tutorial.RES_CODE - 216, // 127: tutorial.ResFriendTimeLine.Log:type_name -> tutorial.ResFriendLog - 2, // 128: tutorial.ResFriendTLUpvote.Code:type_name -> tutorial.RES_CODE - 214, // 129: tutorial.ResFriendApplyNotify.Player:type_name -> tutorial.ResPlayerSimple - 2, // 130: tutorial.ResApplyFriend.Code:type_name -> tutorial.RES_CODE - 2, // 131: tutorial.ResAgreeFriend.Code:type_name -> tutorial.RES_CODE - 214, // 132: tutorial.ResAgreeFriend.Player:type_name -> tutorial.ResPlayerSimple - 2, // 133: tutorial.ResRefuseFriend.Code:type_name -> tutorial.RES_CODE - 2, // 134: tutorial.ResDelFriend.Code:type_name -> tutorial.RES_CODE - 472, // 135: tutorial.ResRank.RankList:type_name -> tutorial.ResRank.RankListEntry - 473, // 136: tutorial.ResMailList.MailList:type_name -> tutorial.ResMailList.MailListEntry - 159, // 137: tutorial.MailInfo.Items:type_name -> tutorial.ItemInfo - 258, // 138: tutorial.MailNotify.Info:type_name -> tutorial.MailInfo - 2, // 139: tutorial.ResReadMail.Code:type_name -> tutorial.RES_CODE - 2, // 140: tutorial.ResGetMailReward.Code:type_name -> tutorial.RES_CODE - 2, // 141: tutorial.ResDeleteMail.Code:type_name -> tutorial.RES_CODE - 474, // 142: tutorial.ResCharge.SpecialShop:type_name -> tutorial.ResCharge.SpecialShopEntry - 475, // 143: tutorial.ResCharge.ChessShop:type_name -> tutorial.ResCharge.ChessShopEntry - 476, // 144: tutorial.ResCharge.Gift:type_name -> tutorial.ResCharge.GiftEntry - 267, // 145: tutorial.ResCharge.Wish:type_name -> tutorial.WishList - 2, // 146: tutorial.ResAddWish.Code:type_name -> tutorial.RES_CODE - 2, // 147: tutorial.ResGetWish.Code:type_name -> tutorial.RES_CODE - 2, // 148: tutorial.ResSendWishBeg.Code:type_name -> tutorial.RES_CODE - 2, // 149: tutorial.ResFreeShop.Code:type_name -> tutorial.RES_CODE - 2, // 150: tutorial.ResBuyChessShop.Code:type_name -> tutorial.RES_CODE - 477, // 151: tutorial.ReqBuyChessShop2.mChessData:type_name -> tutorial.ReqBuyChessShop2.MChessDataEntry - 2, // 152: tutorial.ResBuyChessShop2.Code:type_name -> tutorial.RES_CODE - 2, // 153: tutorial.ResRefreshChessShop.Code:type_name -> tutorial.RES_CODE - 478, // 154: tutorial.ResEndless.EndlessList:type_name -> tutorial.ResEndless.EndlessListEntry - 159, // 155: tutorial.ResEndlessInfo.Items:type_name -> tutorial.ItemInfo - 2, // 156: tutorial.ResEndlessReward.Code:type_name -> tutorial.RES_CODE - 2, // 157: tutorial.ResPiggyBankReward.Code:type_name -> tutorial.RES_CODE - 2, // 158: tutorial.ResChargeReceive.Code:type_name -> tutorial.RES_CODE - 2, // 159: tutorial.ResShippingOrder.Code:type_name -> tutorial.RES_CODE - 2, // 160: tutorial.ResChampshipReward.Code:type_name -> tutorial.RES_CODE - 2, // 161: tutorial.ResChampshipRankReward.Code:type_name -> tutorial.RES_CODE - 479, // 162: tutorial.ResChampshipRank.RankList:type_name -> tutorial.ResChampshipRank.RankListEntry - 480, // 163: tutorial.ResChampshipPreRank.RankList:type_name -> tutorial.ResChampshipPreRank.RankListEntry - 481, // 164: tutorial.ResNotifyCard.Card:type_name -> tutorial.ResNotifyCard.CardEntry - 482, // 165: tutorial.ResNotifyCard.Master:type_name -> tutorial.ResNotifyCard.MasterEntry - 483, // 166: tutorial.ResNotifyCard.Handbook:type_name -> tutorial.ResNotifyCard.HandbookEntry - 2, // 167: tutorial.ResSetFacebookUrl.Code:type_name -> tutorial.RES_CODE - 484, // 168: tutorial.ResMining.Map:type_name -> tutorial.ResMining.MapEntry - 485, // 169: tutorial.ReqMiningTake.Map:type_name -> tutorial.ReqMiningTake.MapEntry - 2, // 170: tutorial.ResMiningTake.Code:type_name -> tutorial.RES_CODE - 2, // 171: tutorial.ResMiningReward.Code:type_name -> tutorial.RES_CODE - 486, // 172: tutorial.ResActRed.Red:type_name -> tutorial.ResActRed.RedEntry - 189, // 173: tutorial.ActivityNotify.Info:type_name -> tutorial.ActivityInfo - 487, // 174: tutorial.ResItem.Item:type_name -> tutorial.ResItem.ItemEntry - 488, // 175: tutorial.ItemNotify.Item:type_name -> tutorial.ItemNotify.ItemEntry - 337, // 176: tutorial.ResGuessColor.MapList:type_name -> tutorial.GuessColorInfo - 489, // 177: tutorial.ResGuessColor.OMap:type_name -> tutorial.ResGuessColor.OMapEntry - 335, // 178: tutorial.ResGuessColor.Opponent:type_name -> tutorial.opponent - 337, // 179: tutorial.ReqGuessColorTake.Map:type_name -> tutorial.GuessColorInfo - 490, // 180: tutorial.ReqGuessColorTake.OMap:type_name -> tutorial.ReqGuessColorTake.OMapEntry - 491, // 181: tutorial.GuessColorInfo.Map:type_name -> tutorial.GuessColorInfo.MapEntry - 2, // 182: tutorial.ResGuessColorTake.Code:type_name -> tutorial.RES_CODE - 2, // 183: tutorial.ResGuessColorReward.Code:type_name -> tutorial.RES_CODE - 343, // 184: tutorial.ResRace.Opponent:type_name -> tutorial.raceopponent - 2, // 185: tutorial.ResRaceStart.Code:type_name -> tutorial.RES_CODE - 2, // 186: tutorial.ResRaceReward.Code:type_name -> tutorial.RES_CODE - 159, // 187: tutorial.ResPlayroom.Items:type_name -> tutorial.ItemInfo - 373, // 188: tutorial.ResPlayroom.Opponent:type_name -> tutorial.RoomOpponent - 372, // 189: tutorial.ResPlayroom.Friend:type_name -> tutorial.FriendRoom - 492, // 190: tutorial.ResPlayroom.Playroom:type_name -> tutorial.ResPlayroom.PlayroomEntry - 493, // 191: tutorial.ResPlayroom.Mood:type_name -> tutorial.ResPlayroom.MoodEntry - 159, // 192: tutorial.ResPlayroom.LoseItem:type_name -> tutorial.ItemInfo - 369, // 193: tutorial.ResPlayroom.Chip:type_name -> tutorial.ChipInfo - 494, // 194: tutorial.ResPlayroom.Physiology:type_name -> tutorial.ResPlayroom.PhysiologyEntry - 495, // 195: tutorial.ResPlayroom.Dress:type_name -> tutorial.ResPlayroom.DressEntry - 496, // 196: tutorial.ResPlayroom.DressSet:type_name -> tutorial.ResPlayroom.DressSetEntry - 163, // 197: tutorial.ResPlayroom.DailyTask:type_name -> tutorial.DailyTask - 163, // 198: tutorial.NotifyPlayroomTask.DailyTask:type_name -> tutorial.DailyTask - 2, // 199: tutorial.ResPlayroomTask.Code:type_name -> tutorial.RES_CODE - 2, // 200: tutorial.ResPlayroomTaskReward.Code:type_name -> tutorial.RES_CODE - 2, // 201: tutorial.ResPlayroomUnlock.Code:type_name -> tutorial.RES_CODE - 2, // 202: tutorial.ResPlayroomUpvote.Code:type_name -> tutorial.RES_CODE - 497, // 203: tutorial.ReqPlayroomDressSet.DressSet:type_name -> tutorial.ReqPlayroomDressSet.DressSetEntry - 2, // 204: tutorial.ResPlayroomDressSet.Code:type_name -> tutorial.RES_CODE - 2, // 205: tutorial.ResPlayroomPetAirSet.Code:type_name -> tutorial.RES_CODE - 2, // 206: tutorial.ResPlayroomWrokOutline.Code:type_name -> tutorial.RES_CODE - 159, // 207: tutorial.NotifyPlayroomLose.LoseItem:type_name -> tutorial.ItemInfo - 369, // 208: tutorial.NotifyPlayroomLose.Chip:type_name -> tutorial.ChipInfo - 498, // 209: tutorial.NotifyPlayroomMood.Mood:type_name -> tutorial.NotifyPlayroomMood.MoodEntry - 499, // 210: tutorial.NotifyPlayroomMood.Physiology:type_name -> tutorial.NotifyPlayroomMood.PhysiologyEntry - 500, // 211: tutorial.ResPlayroomInfo.Playroom:type_name -> tutorial.ResPlayroomInfo.PlayroomEntry - 501, // 212: tutorial.ResPlayroomInfo.Items:type_name -> tutorial.ResPlayroomInfo.ItemsEntry - 502, // 213: tutorial.ResPlayroomInfo.flip:type_name -> tutorial.ResPlayroomInfo.FlipEntry - 503, // 214: tutorial.ResPlayroomInfo.Emoji:type_name -> tutorial.ResPlayroomInfo.EmojiEntry - 504, // 215: tutorial.ResPlayroomInfo.DressSet:type_name -> tutorial.ResPlayroomInfo.DressSetEntry - 2, // 216: tutorial.ResPlayroomFlip.Code:type_name -> tutorial.RES_CODE - 2, // 217: tutorial.ResPlayroomGuide.Code:type_name -> tutorial.RES_CODE - 2, // 218: tutorial.ResPlayroomFlipReward.Code:type_name -> tutorial.RES_CODE - 2, // 219: tutorial.ResPlayroomGame.Code:type_name -> tutorial.RES_CODE - 505, // 220: tutorial.ResPlayroomGame.Items:type_name -> tutorial.ResPlayroomGame.ItemsEntry - 159, // 221: tutorial.ResPlayroomGameShowReward.Items:type_name -> tutorial.ItemInfo - 2, // 222: tutorial.ResPlayroomInteract.Code:type_name -> tutorial.RES_CODE - 506, // 223: tutorial.ReqPlayroomSetRoom.Playroom:type_name -> tutorial.ReqPlayroomSetRoom.PlayroomEntry - 2, // 224: tutorial.ResPlayroomSetRoom.Code:type_name -> tutorial.RES_CODE - 2, // 225: tutorial.ResPlayroomSelectReward.Code:type_name -> tutorial.RES_CODE - 2, // 226: tutorial.ResPlayroomLose.Code:type_name -> tutorial.RES_CODE - 2, // 227: tutorial.ResPlayroomWork.Code:type_name -> tutorial.RES_CODE - 2, // 228: tutorial.ResPlayroomRest.Code:type_name -> tutorial.RES_CODE - 2, // 229: tutorial.ResPlayroomDraw.Code:type_name -> tutorial.RES_CODE - 2, // 230: tutorial.ResPlayroomChip.Code:type_name -> tutorial.RES_CODE - 2, // 231: tutorial.ResPlayroomBuyItem.Code:type_name -> tutorial.RES_CODE - 2, // 232: tutorial.ResPlayroomShop.Code:type_name -> tutorial.RES_CODE - 408, // 233: tutorial.ResFriendTreasure.List:type_name -> tutorial.TreasureInfo - 408, // 234: tutorial.ReqFriendTreasureStart.List:type_name -> tutorial.TreasureInfo - 2, // 235: tutorial.ResFriendTreasureStart.Code:type_name -> tutorial.RES_CODE - 2, // 236: tutorial.ResFriendTreasureEnd.Code:type_name -> tutorial.RES_CODE - 2, // 237: tutorial.ResFriendTreasureFilp.Code:type_name -> tutorial.RES_CODE - 419, // 238: tutorial.ResCollectInfo.Items:type_name -> tutorial.CollectItem - 159, // 239: tutorial.CollectItem.Items:type_name -> tutorial.ItemInfo - 2, // 240: tutorial.ResCollect.Code:type_name -> tutorial.RES_CODE - 424, // 241: tutorial.ResCatnip.GameList:type_name -> tutorial.CatnipGame - 214, // 242: tutorial.CatnipGame.Partner:type_name -> tutorial.ResPlayerSimple - 2, // 243: tutorial.ResCatnipInvite.Code:type_name -> tutorial.RES_CODE - 2, // 244: tutorial.ResCatnipAgree.Code:type_name -> tutorial.RES_CODE - 2, // 245: tutorial.ResCatnipRefuse.Code:type_name -> tutorial.RES_CODE - 2, // 246: tutorial.ResCatnipMultiply.Code:type_name -> tutorial.RES_CODE - 2, // 247: tutorial.ResCatnipPlay.Code:type_name -> tutorial.RES_CODE - 2, // 248: tutorial.ResCatnipReward.Code:type_name -> tutorial.RES_CODE - 2, // 249: tutorial.ResCatnipGrandReward.Code:type_name -> tutorial.RES_CODE - 162, // 250: tutorial.ResDailyTask.WeekRewardEntry.value:type_name -> tutorial.DailyWeek - 163, // 251: tutorial.ResDailyTask.DailyTaskEntry.value:type_name -> tutorial.DailyTask - 199, // 252: tutorial.ResLimitEvent.LimitEventListEntry.value:type_name -> tutorial.LimitEvent - 214, // 253: tutorial.ResRank.RankListEntry.value:type_name -> tutorial.ResPlayerSimple - 258, // 254: tutorial.ResMailList.MailListEntry.value:type_name -> tutorial.MailInfo - 274, // 255: tutorial.ResCharge.SpecialShopEntry.value:type_name -> tutorial.ResSpecialShop - 275, // 256: tutorial.ResCharge.ChessShopEntry.value:type_name -> tutorial.ResChessShop - 286, // 257: tutorial.ResEndless.EndlessListEntry.value:type_name -> tutorial.ResEndlessInfo - 215, // 258: tutorial.ResChampshipRank.RankListEntry.value:type_name -> tutorial.ResPlayerRank - 215, // 259: tutorial.ResChampshipPreRank.RankListEntry.value:type_name -> tutorial.ResPlayerRank - 359, // 260: tutorial.ResPlayroom.DressEntry.value:type_name -> tutorial.PlayroomDress - 159, // 261: tutorial.ResPlayroomInfo.ItemsEntry.value:type_name -> tutorial.ItemInfo - 159, // 262: tutorial.ResPlayroomGame.ItemsEntry.value:type_name -> tutorial.ItemInfo - 263, // [263:263] is the sub-list for method output_type - 263, // [263:263] is the sub-list for method input_type - 263, // [263:263] is the sub-list for extension type_name - 263, // [263:263] is the sub-list for extension extendee - 0, // [0:263] is the sub-list for field type_name + 458, // 29: tutorial.ResPlayerBriefProfileData.SetEmoji:type_name -> tutorial.ResPlayerBriefProfileData.SetEmojiEntry + 2, // 30: tutorial.ResSetEnergyMul.ResultCode:type_name -> tutorial.RES_CODE + 9, // 31: tutorial.ReqLang.Lang:type_name -> tutorial.LANG_TYPE + 2, // 32: tutorial.ResLang.ResultCode:type_name -> tutorial.RES_CODE + 9, // 33: tutorial.BaseInfo.Lang:type_name -> tutorial.LANG_TYPE + 176, // 34: tutorial.UserInfo.AvatarList:type_name -> tutorial.AvatarInfo + 172, // 35: tutorial.UserInfo.FaceList:type_name -> tutorial.FaceInfo + 179, // 36: tutorial.UserInfo.EmojiList:type_name -> tutorial.EmojiInfo + 459, // 37: tutorial.UserInfo.SetEmoji:type_name -> tutorial.UserInfo.SetEmojiEntry + 2, // 38: tutorial.ResSetName.ResultCode:type_name -> tutorial.RES_CODE + 2, // 39: tutorial.ResSetPetName.ResultCode:type_name -> tutorial.RES_CODE + 2, // 40: tutorial.ResBuyEnergy.Code:type_name -> tutorial.RES_CODE + 2, // 41: tutorial.ResGetEnergyByAD.Code:type_name -> tutorial.RES_CODE + 2, // 42: tutorial.ResGetHandbookReward.Code:type_name -> tutorial.RES_CODE + 94, // 43: tutorial.Handbook.Handbooks:type_name -> tutorial.HandbookInfo + 2, // 44: tutorial.ResHandbookAllReward.Code:type_name -> tutorial.RES_CODE + 460, // 45: tutorial.ReqRewardOrder.mChessData:type_name -> tutorial.ReqRewardOrder.MChessDataEntry + 2, // 46: tutorial.ResRewardOrder.Code:type_name -> tutorial.RES_CODE + 2, // 47: tutorial.ResDelOrder.Code:type_name -> tutorial.RES_CODE + 159, // 48: tutorial.Order.Items:type_name -> tutorial.ItemInfo + 104, // 49: tutorial.ResOrderList.OrderList:type_name -> tutorial.Order + 2, // 50: tutorial.ResDecorate.Code:type_name -> tutorial.RES_CODE + 2, // 51: tutorial.ResDecorateAll.Code:type_name -> tutorial.RES_CODE + 2, // 52: tutorial.ResDecorateReward.Code:type_name -> tutorial.RES_CODE + 114, // 53: tutorial.ResCardInfo.CardList:type_name -> tutorial.Card + 461, // 54: tutorial.ResCardInfo.AllCard:type_name -> tutorial.ResCardInfo.AllCardEntry + 462, // 55: tutorial.ResCardInfo.Handbook:type_name -> tutorial.ResCardInfo.HandbookEntry + 2, // 56: tutorial.ResCardSeasonFirstReward.Code:type_name -> tutorial.RES_CODE + 2, // 57: tutorial.ResCardHandbookReward.Code:type_name -> tutorial.RES_CODE + 2, // 58: tutorial.ResMasterCard.Code:type_name -> tutorial.RES_CODE + 2, // 59: tutorial.ResCardCollectReward.Code:type_name -> tutorial.RES_CODE + 2, // 60: tutorial.ResExStarReward.Code:type_name -> tutorial.RES_CODE + 2, // 61: tutorial.ResAllCollectReward.Code:type_name -> tutorial.RES_CODE + 2, // 62: tutorial.ResCardGive.Code:type_name -> tutorial.RES_CODE + 2, // 63: tutorial.ResAgreeCardGive.Code:type_name -> tutorial.RES_CODE + 2, // 64: tutorial.ResRefuseCardGive.Code:type_name -> tutorial.RES_CODE + 2, // 65: tutorial.ResCardSend.Code:type_name -> tutorial.RES_CODE + 2, // 66: tutorial.ResCardExchange.Code:type_name -> tutorial.RES_CODE + 2, // 67: tutorial.ResSelectCardExchange.Code:type_name -> tutorial.RES_CODE + 2, // 68: tutorial.ResAgreeCardExchange.Code:type_name -> tutorial.RES_CODE + 2, // 69: tutorial.ResRefuseCardSelect.Code:type_name -> tutorial.RES_CODE + 2, // 70: tutorial.ResRefuseCardExchange.Code:type_name -> tutorial.RES_CODE + 2, // 71: tutorial.ResGetFriendCard.Code:type_name -> tutorial.RES_CODE + 2, // 72: tutorial.ResGuideReward.Code:type_name -> tutorial.RES_CODE + 2, // 73: tutorial.ResGuidePlayroom.Code:type_name -> tutorial.RES_CODE + 463, // 74: tutorial.ResGuildInfo.Reward:type_name -> tutorial.ResGuildInfo.RewardEntry + 464, // 75: tutorial.ResGuideInfo.Reward:type_name -> tutorial.ResGuideInfo.RewardEntry + 159, // 76: tutorial.ResItemPop.Items:type_name -> tutorial.ItemInfo + 160, // 77: tutorial.ResItemPop.CardPacks:type_name -> tutorial.CardPack + 465, // 78: tutorial.ResDailyTask.WeekReward:type_name -> tutorial.ResDailyTask.WeekRewardEntry + 466, // 79: tutorial.ResDailyTask.DailyTask:type_name -> tutorial.ResDailyTask.DailyTaskEntry + 159, // 80: tutorial.DailyWeek.Items:type_name -> tutorial.ItemInfo + 164, // 81: tutorial.DailyTask.Progress:type_name -> tutorial.QuestProgress + 159, // 82: tutorial.DailyTask.Items:type_name -> tutorial.ItemInfo + 2, // 83: tutorial.ResGetDailyTaskReward.Code:type_name -> tutorial.RES_CODE + 2, // 84: tutorial.ResGetDailyWeekReward.Code:type_name -> tutorial.RES_CODE + 2, // 85: tutorial.ResDailyUnlock.Code:type_name -> tutorial.RES_CODE + 172, // 86: tutorial.ResFaceInfo.FaceList:type_name -> tutorial.FaceInfo + 2, // 87: tutorial.ResSetFace.Code:type_name -> tutorial.RES_CODE + 176, // 88: tutorial.ResAvatarInfo.AvatarList:type_name -> tutorial.AvatarInfo + 2, // 89: tutorial.ResSetAvatar.Code:type_name -> tutorial.RES_CODE + 2, // 90: tutorial.ResSetEmoji.Code:type_name -> tutorial.RES_CODE + 183, // 91: tutorial.ResSevenLogin.WeekReward:type_name -> tutorial.SevenLoginReward + 183, // 92: tutorial.ResSevenLogin.MonthReward:type_name -> tutorial.SevenLoginReward + 159, // 93: tutorial.SevenLoginReward.Item1:type_name -> tutorial.ItemInfo + 159, // 94: tutorial.SevenLoginReward.Item2:type_name -> tutorial.ItemInfo + 159, // 95: tutorial.SevenLoginReward.Item3:type_name -> tutorial.ItemInfo + 2, // 96: tutorial.ResGetSevenLoginReward.Code:type_name -> tutorial.RES_CODE + 2, // 97: tutorial.ResGetMonthLoginReward.Code:type_name -> tutorial.RES_CODE + 189, // 98: tutorial.ResActivity.ActiveList:type_name -> tutorial.ActivityInfo + 2, // 99: tutorial.ResActivityReward.Code:type_name -> tutorial.RES_CODE + 467, // 100: tutorial.ResLimitEvent.LimitEventList:type_name -> tutorial.ResLimitEvent.LimitEventListEntry + 468, // 101: tutorial.ResLimitEventProgress.ProgressReward:type_name -> tutorial.ResLimitEventProgress.ProgressRewardEntry + 2, // 102: tutorial.ResLimitEventReward.Code:type_name -> tutorial.RES_CODE + 2, // 103: tutorial.ResSelectLimitEvent.Code:type_name -> tutorial.RES_CODE + 469, // 104: tutorial.LimitEvent.Param:type_name -> tutorial.LimitEvent.ParamEntry + 470, // 105: tutorial.ReqLimitEventLuckyCat.mChessData:type_name -> tutorial.ReqLimitEventLuckyCat.MChessDataEntry + 2, // 106: tutorial.ResLimitEventLuckyCat.Code:type_name -> tutorial.RES_CODE + 2, // 107: tutorial.ResLimitSenceReward.Code:type_name -> tutorial.RES_CODE + 159, // 108: tutorial.ResChessRainReward.Items:type_name -> tutorial.ItemInfo + 2, // 109: tutorial.ResFastProduceReward.Code:type_name -> tutorial.RES_CODE + 2, // 110: tutorial.ResCatTrickReward.Code:type_name -> tutorial.RES_CODE + 214, // 111: tutorial.ResSearchPlayer.List:type_name -> tutorial.ResPlayerSimple + 471, // 112: tutorial.ResPlayerSimple.Emoji:type_name -> tutorial.ResPlayerSimple.EmojiEntry + 214, // 113: tutorial.ResFriendLog.Player:type_name -> tutorial.ResPlayerSimple + 216, // 114: tutorial.NotifyFriendLog.info:type_name -> tutorial.ResFriendLog + 219, // 115: tutorial.NotifyFriendCard.Info:type_name -> tutorial.ResFriendCard + 472, // 116: tutorial.ResKv.kv:type_name -> tutorial.ResKv.KvEntry + 2, // 117: tutorial.ResFriendByCode.Code:type_name -> tutorial.RES_CODE + 214, // 118: tutorial.ResFriendByCode.Player:type_name -> tutorial.ResPlayerSimple + 214, // 119: tutorial.ResFriendRecommend.List:type_name -> tutorial.ResPlayerSimple + 2, // 120: tutorial.ResFriendIgnore.Code:type_name -> tutorial.RES_CODE + 214, // 121: tutorial.ResFriendList.FriendList:type_name -> tutorial.ResPlayerSimple + 2, // 122: tutorial.ResAddNpc.Code:type_name -> tutorial.RES_CODE + 234, // 123: tutorial.ResFriendApply.ApplyList:type_name -> tutorial.ResFriendApplyInfo + 214, // 124: tutorial.ResFriendApplyInfo.Player:type_name -> tutorial.ResPlayerSimple + 219, // 125: tutorial.ResFriendCardMsg.MsgList:type_name -> tutorial.ResFriendCard + 234, // 126: tutorial.ResWishApplyList.ApplyList:type_name -> tutorial.ResFriendApplyInfo + 2, // 127: tutorial.ResWishApply.Code:type_name -> tutorial.RES_CODE + 216, // 128: tutorial.ResFriendTimeLine.Log:type_name -> tutorial.ResFriendLog + 2, // 129: tutorial.ResFriendTLUpvote.Code:type_name -> tutorial.RES_CODE + 214, // 130: tutorial.ResFriendApplyNotify.Player:type_name -> tutorial.ResPlayerSimple + 2, // 131: tutorial.ResApplyFriend.Code:type_name -> tutorial.RES_CODE + 2, // 132: tutorial.ResAgreeFriend.Code:type_name -> tutorial.RES_CODE + 214, // 133: tutorial.ResAgreeFriend.Player:type_name -> tutorial.ResPlayerSimple + 2, // 134: tutorial.ResRefuseFriend.Code:type_name -> tutorial.RES_CODE + 2, // 135: tutorial.ResDelFriend.Code:type_name -> tutorial.RES_CODE + 473, // 136: tutorial.ResRank.RankList:type_name -> tutorial.ResRank.RankListEntry + 474, // 137: tutorial.ResMailList.MailList:type_name -> tutorial.ResMailList.MailListEntry + 159, // 138: tutorial.MailInfo.Items:type_name -> tutorial.ItemInfo + 258, // 139: tutorial.MailNotify.Info:type_name -> tutorial.MailInfo + 2, // 140: tutorial.ResReadMail.Code:type_name -> tutorial.RES_CODE + 2, // 141: tutorial.ResGetMailReward.Code:type_name -> tutorial.RES_CODE + 2, // 142: tutorial.ResDeleteMail.Code:type_name -> tutorial.RES_CODE + 475, // 143: tutorial.ResCharge.SpecialShop:type_name -> tutorial.ResCharge.SpecialShopEntry + 476, // 144: tutorial.ResCharge.ChessShop:type_name -> tutorial.ResCharge.ChessShopEntry + 477, // 145: tutorial.ResCharge.Gift:type_name -> tutorial.ResCharge.GiftEntry + 267, // 146: tutorial.ResCharge.Wish:type_name -> tutorial.WishList + 2, // 147: tutorial.ResAddWish.Code:type_name -> tutorial.RES_CODE + 2, // 148: tutorial.ResGetWish.Code:type_name -> tutorial.RES_CODE + 2, // 149: tutorial.ResSendWishBeg.Code:type_name -> tutorial.RES_CODE + 2, // 150: tutorial.ResFreeShop.Code:type_name -> tutorial.RES_CODE + 2, // 151: tutorial.ResBuyChessShop.Code:type_name -> tutorial.RES_CODE + 478, // 152: tutorial.ReqBuyChessShop2.mChessData:type_name -> tutorial.ReqBuyChessShop2.MChessDataEntry + 2, // 153: tutorial.ResBuyChessShop2.Code:type_name -> tutorial.RES_CODE + 2, // 154: tutorial.ResRefreshChessShop.Code:type_name -> tutorial.RES_CODE + 479, // 155: tutorial.ResEndless.EndlessList:type_name -> tutorial.ResEndless.EndlessListEntry + 159, // 156: tutorial.ResEndlessInfo.Items:type_name -> tutorial.ItemInfo + 2, // 157: tutorial.ResEndlessReward.Code:type_name -> tutorial.RES_CODE + 2, // 158: tutorial.ResPiggyBankReward.Code:type_name -> tutorial.RES_CODE + 2, // 159: tutorial.ResChargeReceive.Code:type_name -> tutorial.RES_CODE + 2, // 160: tutorial.ResShippingOrder.Code:type_name -> tutorial.RES_CODE + 2, // 161: tutorial.ResChampshipReward.Code:type_name -> tutorial.RES_CODE + 2, // 162: tutorial.ResChampshipRankReward.Code:type_name -> tutorial.RES_CODE + 480, // 163: tutorial.ResChampshipRank.RankList:type_name -> tutorial.ResChampshipRank.RankListEntry + 481, // 164: tutorial.ResChampshipPreRank.RankList:type_name -> tutorial.ResChampshipPreRank.RankListEntry + 482, // 165: tutorial.ResNotifyCard.Card:type_name -> tutorial.ResNotifyCard.CardEntry + 483, // 166: tutorial.ResNotifyCard.Master:type_name -> tutorial.ResNotifyCard.MasterEntry + 484, // 167: tutorial.ResNotifyCard.Handbook:type_name -> tutorial.ResNotifyCard.HandbookEntry + 2, // 168: tutorial.ResSetFacebookUrl.Code:type_name -> tutorial.RES_CODE + 485, // 169: tutorial.ResMining.Map:type_name -> tutorial.ResMining.MapEntry + 486, // 170: tutorial.ReqMiningTake.Map:type_name -> tutorial.ReqMiningTake.MapEntry + 2, // 171: tutorial.ResMiningTake.Code:type_name -> tutorial.RES_CODE + 2, // 172: tutorial.ResMiningReward.Code:type_name -> tutorial.RES_CODE + 487, // 173: tutorial.ResActRed.Red:type_name -> tutorial.ResActRed.RedEntry + 189, // 174: tutorial.ActivityNotify.Info:type_name -> tutorial.ActivityInfo + 488, // 175: tutorial.ResItem.Item:type_name -> tutorial.ResItem.ItemEntry + 489, // 176: tutorial.ItemNotify.Item:type_name -> tutorial.ItemNotify.ItemEntry + 337, // 177: tutorial.ResGuessColor.MapList:type_name -> tutorial.GuessColorInfo + 490, // 178: tutorial.ResGuessColor.OMap:type_name -> tutorial.ResGuessColor.OMapEntry + 335, // 179: tutorial.ResGuessColor.Opponent:type_name -> tutorial.opponent + 337, // 180: tutorial.ReqGuessColorTake.Map:type_name -> tutorial.GuessColorInfo + 491, // 181: tutorial.ReqGuessColorTake.OMap:type_name -> tutorial.ReqGuessColorTake.OMapEntry + 492, // 182: tutorial.GuessColorInfo.Map:type_name -> tutorial.GuessColorInfo.MapEntry + 2, // 183: tutorial.ResGuessColorTake.Code:type_name -> tutorial.RES_CODE + 2, // 184: tutorial.ResGuessColorReward.Code:type_name -> tutorial.RES_CODE + 343, // 185: tutorial.ResRace.Opponent:type_name -> tutorial.raceopponent + 2, // 186: tutorial.ResRaceStart.Code:type_name -> tutorial.RES_CODE + 2, // 187: tutorial.ResRaceReward.Code:type_name -> tutorial.RES_CODE + 159, // 188: tutorial.ResPlayroom.Items:type_name -> tutorial.ItemInfo + 373, // 189: tutorial.ResPlayroom.Opponent:type_name -> tutorial.RoomOpponent + 372, // 190: tutorial.ResPlayroom.Friend:type_name -> tutorial.FriendRoom + 493, // 191: tutorial.ResPlayroom.Playroom:type_name -> tutorial.ResPlayroom.PlayroomEntry + 494, // 192: tutorial.ResPlayroom.Mood:type_name -> tutorial.ResPlayroom.MoodEntry + 159, // 193: tutorial.ResPlayroom.LoseItem:type_name -> tutorial.ItemInfo + 369, // 194: tutorial.ResPlayroom.Chip:type_name -> tutorial.ChipInfo + 495, // 195: tutorial.ResPlayroom.Physiology:type_name -> tutorial.ResPlayroom.PhysiologyEntry + 496, // 196: tutorial.ResPlayroom.Dress:type_name -> tutorial.ResPlayroom.DressEntry + 497, // 197: tutorial.ResPlayroom.DressSet:type_name -> tutorial.ResPlayroom.DressSetEntry + 163, // 198: tutorial.ResPlayroom.DailyTask:type_name -> tutorial.DailyTask + 163, // 199: tutorial.NotifyPlayroomTask.DailyTask:type_name -> tutorial.DailyTask + 2, // 200: tutorial.ResPlayroomTask.Code:type_name -> tutorial.RES_CODE + 2, // 201: tutorial.ResPlayroomTaskReward.Code:type_name -> tutorial.RES_CODE + 2, // 202: tutorial.ResPlayroomUnlock.Code:type_name -> tutorial.RES_CODE + 2, // 203: tutorial.ResPlayroomUpvote.Code:type_name -> tutorial.RES_CODE + 498, // 204: tutorial.ReqPlayroomDressSet.DressSet:type_name -> tutorial.ReqPlayroomDressSet.DressSetEntry + 2, // 205: tutorial.ResPlayroomDressSet.Code:type_name -> tutorial.RES_CODE + 2, // 206: tutorial.ResPlayroomPetAirSet.Code:type_name -> tutorial.RES_CODE + 2, // 207: tutorial.ResPlayroomWrokOutline.Code:type_name -> tutorial.RES_CODE + 159, // 208: tutorial.NotifyPlayroomLose.LoseItem:type_name -> tutorial.ItemInfo + 369, // 209: tutorial.NotifyPlayroomLose.Chip:type_name -> tutorial.ChipInfo + 499, // 210: tutorial.NotifyPlayroomMood.Mood:type_name -> tutorial.NotifyPlayroomMood.MoodEntry + 500, // 211: tutorial.NotifyPlayroomMood.Physiology:type_name -> tutorial.NotifyPlayroomMood.PhysiologyEntry + 501, // 212: tutorial.ResPlayroomInfo.Playroom:type_name -> tutorial.ResPlayroomInfo.PlayroomEntry + 502, // 213: tutorial.ResPlayroomInfo.Items:type_name -> tutorial.ResPlayroomInfo.ItemsEntry + 503, // 214: tutorial.ResPlayroomInfo.flip:type_name -> tutorial.ResPlayroomInfo.FlipEntry + 504, // 215: tutorial.ResPlayroomInfo.Emoji:type_name -> tutorial.ResPlayroomInfo.EmojiEntry + 505, // 216: tutorial.ResPlayroomInfo.DressSet:type_name -> tutorial.ResPlayroomInfo.DressSetEntry + 2, // 217: tutorial.ResPlayroomFlip.Code:type_name -> tutorial.RES_CODE + 2, // 218: tutorial.ResPlayroomGuide.Code:type_name -> tutorial.RES_CODE + 2, // 219: tutorial.ResPlayroomFlipReward.Code:type_name -> tutorial.RES_CODE + 2, // 220: tutorial.ResPlayroomGame.Code:type_name -> tutorial.RES_CODE + 506, // 221: tutorial.ResPlayroomGame.Items:type_name -> tutorial.ResPlayroomGame.ItemsEntry + 159, // 222: tutorial.ResPlayroomGameShowReward.Items:type_name -> tutorial.ItemInfo + 2, // 223: tutorial.ResPlayroomInteract.Code:type_name -> tutorial.RES_CODE + 507, // 224: tutorial.ReqPlayroomSetRoom.Playroom:type_name -> tutorial.ReqPlayroomSetRoom.PlayroomEntry + 2, // 225: tutorial.ResPlayroomSetRoom.Code:type_name -> tutorial.RES_CODE + 2, // 226: tutorial.ResPlayroomSelectReward.Code:type_name -> tutorial.RES_CODE + 2, // 227: tutorial.ResPlayroomLose.Code:type_name -> tutorial.RES_CODE + 2, // 228: tutorial.ResPlayroomWork.Code:type_name -> tutorial.RES_CODE + 2, // 229: tutorial.ResPlayroomRest.Code:type_name -> tutorial.RES_CODE + 2, // 230: tutorial.ResPlayroomDraw.Code:type_name -> tutorial.RES_CODE + 2, // 231: tutorial.ResPlayroomChip.Code:type_name -> tutorial.RES_CODE + 2, // 232: tutorial.ResPlayroomBuyItem.Code:type_name -> tutorial.RES_CODE + 2, // 233: tutorial.ResPlayroomShop.Code:type_name -> tutorial.RES_CODE + 408, // 234: tutorial.ResFriendTreasure.List:type_name -> tutorial.TreasureInfo + 408, // 235: tutorial.ReqFriendTreasureStart.List:type_name -> tutorial.TreasureInfo + 2, // 236: tutorial.ResFriendTreasureStart.Code:type_name -> tutorial.RES_CODE + 2, // 237: tutorial.ResFriendTreasureEnd.Code:type_name -> tutorial.RES_CODE + 2, // 238: tutorial.ResFriendTreasureFilp.Code:type_name -> tutorial.RES_CODE + 419, // 239: tutorial.ResCollectInfo.Items:type_name -> tutorial.CollectItem + 159, // 240: tutorial.CollectItem.Items:type_name -> tutorial.ItemInfo + 2, // 241: tutorial.ResCollect.Code:type_name -> tutorial.RES_CODE + 424, // 242: tutorial.ResCatnip.GameList:type_name -> tutorial.CatnipGame + 214, // 243: tutorial.CatnipGame.Partner:type_name -> tutorial.ResPlayerSimple + 2, // 244: tutorial.ResCatnipInvite.Code:type_name -> tutorial.RES_CODE + 2, // 245: tutorial.ResCatnipAgree.Code:type_name -> tutorial.RES_CODE + 2, // 246: tutorial.ResCatnipRefuse.Code:type_name -> tutorial.RES_CODE + 2, // 247: tutorial.ResCatnipMultiply.Code:type_name -> tutorial.RES_CODE + 2, // 248: tutorial.ResCatnipPlay.Code:type_name -> tutorial.RES_CODE + 2, // 249: tutorial.ResCatnipReward.Code:type_name -> tutorial.RES_CODE + 2, // 250: tutorial.ResCatnipGrandReward.Code:type_name -> tutorial.RES_CODE + 162, // 251: tutorial.ResDailyTask.WeekRewardEntry.value:type_name -> tutorial.DailyWeek + 163, // 252: tutorial.ResDailyTask.DailyTaskEntry.value:type_name -> tutorial.DailyTask + 199, // 253: tutorial.ResLimitEvent.LimitEventListEntry.value:type_name -> tutorial.LimitEvent + 214, // 254: tutorial.ResRank.RankListEntry.value:type_name -> tutorial.ResPlayerSimple + 258, // 255: tutorial.ResMailList.MailListEntry.value:type_name -> tutorial.MailInfo + 274, // 256: tutorial.ResCharge.SpecialShopEntry.value:type_name -> tutorial.ResSpecialShop + 275, // 257: tutorial.ResCharge.ChessShopEntry.value:type_name -> tutorial.ResChessShop + 286, // 258: tutorial.ResEndless.EndlessListEntry.value:type_name -> tutorial.ResEndlessInfo + 215, // 259: tutorial.ResChampshipRank.RankListEntry.value:type_name -> tutorial.ResPlayerRank + 215, // 260: tutorial.ResChampshipPreRank.RankListEntry.value:type_name -> tutorial.ResPlayerRank + 359, // 261: tutorial.ResPlayroom.DressEntry.value:type_name -> tutorial.PlayroomDress + 159, // 262: tutorial.ResPlayroomInfo.ItemsEntry.value:type_name -> tutorial.ItemInfo + 159, // 263: tutorial.ResPlayroomGame.ItemsEntry.value:type_name -> tutorial.ItemInfo + 264, // [264:264] is the sub-list for method output_type + 264, // [264:264] is the sub-list for method input_type + 264, // [264:264] is the sub-list for extension type_name + 264, // [264:264] is the sub-list for extension extendee + 0, // [0:264] is the sub-list for field type_name } func init() { file_proto_Gameapi_proto_init() } @@ -27391,7 +27405,7 @@ func file_proto_Gameapi_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_proto_Gameapi_proto_rawDesc), len(file_proto_Gameapi_proto_rawDesc)), NumEnums: 11, - NumMessages: 496, + NumMessages: 497, NumExtensions: 0, NumServices: 0, }, From 489a1ed7bc1e674c27060d9179836050017f0baf Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 22 Jul 2025 15:31:19 +0800 Subject: [PATCH 13/19] =?UTF-8?q?=E9=99=90=E6=97=B6=E4=BA=8B=E4=BB=B6?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/LimitedTimeTrigger.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/server/game/LimitedTimeTrigger.go b/src/server/game/LimitedTimeTrigger.go index 5888b2bf..128a9759 100644 --- a/src/server/game/LimitedTimeTrigger.go +++ b/src/server/game/LimitedTimeTrigger.go @@ -4,7 +4,6 @@ import ( "fmt" "math" "server/GoUtil" - baseCfg "server/conf/base" playroomCfg "server/conf/playroom" userCfg "server/conf/user" "server/game/mod/card" @@ -43,8 +42,6 @@ func LimitedTimeEventTrigger(p *Player, AddEventId int) { case limitedTimeEvent.EVENT_TYPE_HIGH_ROLLER: BaseMod := p.PlayMod.getBaseMod() EnergyMul := BaseMod.GetEnergyMul() - MaxEnergyMul := baseCfg.GetMaxEnergyMul(BaseMod.GetLevel(), BaseMod.GetEnergy()) - p.PlayMod.getBaseMod().ResetEnergyMul(MaxEnergyMul) NewEnergyMul := p.PlayMod.getBaseMod().GetEnergyMul() OrderMod := p.PlayMod.getOrderMod() Lv := p.GetPlayerBaseMod().GetLevel() From 04a9ca69c92aede73742c4efc2b078da7a8827c5 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 22 Jul 2025 15:40:29 +0800 Subject: [PATCH 14/19] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=BD=AC=E7=9B=98?= =?UTF-8?q?=E5=A5=96=E5=8A=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/GoUtil/sliceUtil.go | 10 ++++++++++ .../game/mod/limitedTimeEvent/LimitedTimeEvent.go | 7 ++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/server/GoUtil/sliceUtil.go b/src/server/GoUtil/sliceUtil.go index 50075ba8..d69f8e1c 100644 --- a/src/server/GoUtil/sliceUtil.go +++ b/src/server/GoUtil/sliceUtil.go @@ -2,6 +2,7 @@ package GoUtil import ( "fmt" + "server/game/mod/item" "sort" "strconv" "strings" @@ -52,6 +53,15 @@ func RandSlice(slice []int) int { return slice[Id] } +func RandItem(slice []*item.Item) *item.Item { + slen := len(slice) + if slen == 0 { + return nil + } + Id := GetRand().Intn(slen) + return slice[Id] +} + func RandSliceNum(s []int, num int) []int { slice := make([]int, len(s)) copy(slice, s) diff --git a/src/server/game/mod/limitedTimeEvent/LimitedTimeEvent.go b/src/server/game/mod/limitedTimeEvent/LimitedTimeEvent.go index e7d7bdcd..07843c93 100644 --- a/src/server/game/mod/limitedTimeEvent/LimitedTimeEvent.go +++ b/src/server/game/mod/limitedTimeEvent/LimitedTimeEvent.go @@ -295,7 +295,12 @@ func (l *LimitedTimeEventMod) GetChestReward(MergeList []int) []*item.Item { func (l *LimitedTimeEventMod) GetSceneDashReward() (int, []*item.Item) { ProbList := limitedTimeEventCfg.GetSenceJackpotProb() Id := GoUtil.RandMap(ProbList) - return Id, limitedTimeEventCfg.GetSenceJackpotReward(Id) + Items := limitedTimeEventCfg.GetSenceJackpotReward(Id) + if len(Items) > 1 { + // 多个奖励时,随机选择一个 + Items = []*item.Item{GoUtil.RandItem(Items)} + } + return Id, Items } // 获取连击快手奖励 From 037142bb0a1999160be09be34cae6188f1f482a3 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Wed, 23 Jul 2025 15:46:18 +0800 Subject: [PATCH 15/19] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dplayroom=E8=BD=AC?= =?UTF-8?q?=E7=9B=98bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/mod/playroom/playroom.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/server/game/mod/playroom/playroom.go b/src/server/game/mod/playroom/playroom.go index 06d66333..4f7078bf 100644 --- a/src/server/game/mod/playroom/playroom.go +++ b/src/server/game/mod/playroom/playroom.go @@ -580,7 +580,12 @@ func (p *PlayroomMod) Draw() (int, []*item.Item, error) { p.AllMood = 0 ProbList := limitedTimeEventCfg.GetSenceJackpotProb() Id := GoUtil.RandMap(ProbList) - return Id, limitedTimeEventCfg.GetSenceJackpotReward(Id), nil + Items := limitedTimeEventCfg.GetSenceJackpotReward(Id) + if len(Items) > 1 { + // 多个奖励时,随机选择一个 + Items = []*item.Item{GoUtil.RandItem(Items)} + } + return Id, Items, nil } func (p *PlayroomMod) NotifyWork() *msg.NotifyPlayroomWork { From 94d31c2cab2cb9ea38fc07ea1c29bbd6ca005e97 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Wed, 23 Jul 2025 16:16:28 +0800 Subject: [PATCH 16/19] =?UTF-8?q?playroom=E8=A3=85=E6=89=AE=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/mod/playroom/playroom.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/mod/playroom/playroom.go b/src/server/game/mod/playroom/playroom.go index 4f7078bf..2b71ae9f 100644 --- a/src/server/game/mod/playroom/playroom.go +++ b/src/server/game/mod/playroom/playroom.go @@ -803,7 +803,7 @@ func (p *PlayroomMod) PlayroomDressSet(DressSet map[int]int) ([]int, error) { if !GoUtil.InArray(Id, dresses) { return nil, fmt.Errorf("dress not found") } - if p.DressSet[Type] != Id { + if p.DressSet[Type] == 0 && Id != 0 { Part = append(Part, Type) } } From 18b0eb88b14d2b56d93d95a49f585354ca8e16d2 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Wed, 23 Jul 2025 16:44:29 +0800 Subject: [PATCH 17/19] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dplayroom=E6=99=AE?= =?UTF-8?q?=E9=80=9A=E5=A5=96=E5=8A=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/PlayerFunc.go | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index 33f787a2..f95d4eb7 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -1118,15 +1118,14 @@ func (p *Player) GetPlayroomGameReward(Type, SelectId int) []*item.Item { BaseMod := p.PlayMod.getBaseMod() Level := BaseMod.GetLevel() Items := make([]*item.Item, 0) - if Type == playroom.GAME_RESULT_LOSE { + switch Type { + case playroom.GAME_RESULT_LOSE: Items = append(Items, item.NewItem(item.ITEM_STAR_ID, 20)) - } - if Type == playroom.GAME_RESULT_LOW { + case playroom.GAME_RESULT_LOW: Items = append(Items, item.NewItem(item.ITEM_STAR_ID, Level*2)) - } - if Type == playroom.GAME_RESULT_MIDDLE { + case playroom.GAME_RESULT_MIDDLE: Items = append(Items, item.NewItem(item.ITEM_STAR_ID, Level*3)) - } else { + default: Items = PlayroomMod.SelectReward(SelectId) } return Items From 56874ec22c788dc83f655351c73008fd49fc640e Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Wed, 23 Jul 2025 16:53:37 +0800 Subject: [PATCH 18/19] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dplayroom=E8=BD=AC?= =?UTF-8?q?=E7=9B=98bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/mod/playroom/playroom.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/server/game/mod/playroom/playroom.go b/src/server/game/mod/playroom/playroom.go index 2b71ae9f..22a4965c 100644 --- a/src/server/game/mod/playroom/playroom.go +++ b/src/server/game/mod/playroom/playroom.go @@ -565,7 +565,10 @@ func (p *PlayroomMod) GetTaskReward(Type int) (int, []*item.Item, error) { Id = GoUtil.RandMap(ProbList) Items = playroomCfg.GetTaskJackpotReward(Id) } - + if len(Items) > 1 { + // 多个奖励时,随机选择一个 + Items = []*item.Item{GoUtil.RandItem(Items)} + } return Id, Items, nil } From d42963777e530924e1bd452006b67a8d3b97bebc Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Wed, 23 Jul 2025 17:37:09 +0800 Subject: [PATCH 19/19] =?UTF-8?q?playroombug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/Player.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/server/game/Player.go b/src/server/game/Player.go index ff1d3ddc..c9f95f06 100644 --- a/src/server/game/Player.go +++ b/src/server/game/Player.go @@ -690,10 +690,12 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error { Effect := itemCfg.GetItemEffect(v.Id) PlayroomMod := p.PlayMod.getPlayroomMod() PlayroomMod.AddCollect(Effect) + BackDataType[item.ITEM_TYPE_PLAYROOM_DECORATION] = struct{}{} case item.ITEM_TYPE_PLAYROOM_DRESS: // playroom服饰 Effect := itemCfg.GetItemEffect(v.Id) PlayroomMod := p.PlayMod.getPlayroomMod() PlayroomMod.AddDress(Effect) + BackDataType[item.ITEM_TYPE_PLAYROOM_DRESS] = struct{}{} case item.ITEM_TYPE_PLAYROOM_DECORATION_SET: // playroom装饰套装 Effect := itemCfg.GetItemEffectList(v.Id) PlayroomMod := p.PlayMod.getPlayroomMod() @@ -703,6 +705,7 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error { } PlayroomMod.AddCollect(v) } + BackDataType[item.ITEM_TYPE_PLAYROOM_DECORATION_SET] = struct{}{} p.TeLog("playroom_decoration_set", map[string]interface{}{ "decoration_set_id": Effect, "income_from": Label,