封号功能

This commit is contained in:
hahwu 2025-07-30 12:03:51 +08:00
parent 35a6ae35ee
commit c9b6c86139
3 changed files with 235 additions and 142 deletions

View File

@ -10,39 +10,49 @@ type BanMgr struct {
}
type BanData struct {
BanList map[int64]int64 // 玩家ID -> 是否被封禁
NewBanList map[int64]*BanInfo // 新增的封禁列表
}
type BanInfo struct {
UserId int64 // 玩家ID
EndTime int64 // 封禁结束时间0表示永久封禁
Reason string // 封禁原因
}
func (f *BanMgr) Init() {
gob.Register(&BanData{})
f.key = BAN_MGR_KEY
f.data = &BanData{
BanList: make(map[int64]int64),
NewBanList: make(map[int64]*BanInfo),
}
// 注册处理函数
f.init()
if f.data.(*BanData).BanList == nil {
f.data.(*BanData).BanList = make(map[int64]int64)
if f.data.(*BanData).NewBanList == nil {
f.data.(*BanData).NewBanList = make(map[int64]*BanInfo)
}
}
func (f *BanMgr) IsBanned(userId int64) bool {
if f.data.(*BanData).BanList == nil {
if f.data.(*BanData).NewBanList == nil {
return false
}
EndTime, banned := f.data.(*BanData).BanList[userId]
Info, banned := f.data.(*BanData).NewBanList[userId]
if !banned {
return false
}
return EndTime > GoUtil.Now() || EndTime == 0 // 如果EndTime为0表示永久封禁
return Info.EndTime > GoUtil.Now() || Info.EndTime == 0 // 如果EndTime为0表示永久封禁
}
func (f *BanMgr) BanUser(userId int64, endTime int64) {
f.data.(*BanData).BanList[userId] = endTime
func (f *BanMgr) BanUser(userId int64, endTime int64, reason string) {
f.data.(*BanData).NewBanList[userId] = &BanInfo{
UserId: userId,
EndTime: endTime,
Reason: reason,
}
f.SaveData()
}
func (f *BanMgr) UnbanUser(userId int64) {
delete(f.data.(*BanData).BanList, userId)
delete(f.data.(*BanData).NewBanList, userId)
f.SaveData()
}

View File

@ -26,6 +26,7 @@ var AdminFuncMap = map[string]func([]interface{}) error{
"ReqReloadServerMail": ReqReloadServerMail,
"ReqReload": ReqReload,
"ReqAdminGm": ReqAdminGm,
"ReqAdminBan": ReqAdminGm,
}
func AdminProcess(Func string, args []interface{}) {
@ -132,6 +133,7 @@ func AdminPlayerInfo(args []interface{}) error {
res["Cumulative"] = player.PlayMod.getBaseMod().Cumulative
res["RegisterTime"] = player.GetPlayerBaseMod().GetRegisterTime()
res["TodayCumulative"] = player.PlayMod.getBaseMod().TodayCumulative
res["Ban"] = G_GameLogicPtr.BanMgr.IsBanned(player.M_DwUin)
if online {
res["Cumulative"] = int64(player.PlayMod.getBaseMod().Cumulative) + GoUtil.Now() - int64(player.PlayMod.getBaseMod().LoginTime)
res["TodayCumulative"] = int64(player.PlayMod.getBaseMod().TodayCumulative) + GoUtil.Now() - int64(player.PlayMod.getBaseMod().LoginTime)
@ -219,11 +221,6 @@ func ReqAdminGm(args []interface{}) error {
player.lock.Lock()
defer player.lock.Unlock()
err := ReqGmCommand_(player, req.Command)
if err != nil {
res["Code"] = 1
res["Msg"] = err.Error()
}
if err != nil {
res["Code"] = 1
res["Msg"] = err.Error()
@ -233,3 +230,24 @@ func ReqAdminGm(args []interface{}) error {
AdminPlayerBack(a, res)
return nil
}
func ReqAdminBan(args []interface{}) error {
a, buf := ParseAdminArgs(args)
req := &msg.ReqAdminBan{}
proto.Unmarshal(buf, req)
res := make(map[string]interface{})
res["Code"] = 0
res["Msg"] = "ok"
player := G_GameLogicPtr.GetPlayer(req.Uid)
if player == nil {
res["Code"] = 1
res["Msg"] = "player not found"
AdminPlayerBack(a, res)
return nil
}
player.lock.Lock()
defer player.lock.Unlock()
G_GameLogicPtr.BanMgr.BanUser(player.M_DwUin, int64(req.Time), req.Reason)
AdminPlayerBack(a, res)
return nil
}

View File

@ -24966,6 +24966,66 @@ func (x *ReqAdminGm) GetCommand() string {
return ""
}
type ReqAdminBan struct {
state protoimpl.MessageState `protogen:"open.v1"`
Uid int64 `protobuf:"varint,1,opt,name=Uid,proto3" json:"Uid,omitempty"` // uid
Time int32 `protobuf:"varint,2,opt,name=Time,proto3" json:"Time,omitempty"` // 禁止时间
Reason string `protobuf:"bytes,3,opt,name=Reason,proto3" json:"Reason,omitempty"` // 禁止原因
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *ReqAdminBan) Reset() {
*x = ReqAdminBan{}
mi := &file_proto_Gameapi_proto_msgTypes[440]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *ReqAdminBan) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ReqAdminBan) ProtoMessage() {}
func (x *ReqAdminBan) ProtoReflect() protoreflect.Message {
mi := &file_proto_Gameapi_proto_msgTypes[440]
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 ReqAdminBan.ProtoReflect.Descriptor instead.
func (*ReqAdminBan) Descriptor() ([]byte, []int) {
return file_proto_Gameapi_proto_rawDescGZIP(), []int{440}
}
func (x *ReqAdminBan) GetUid() int64 {
if x != nil {
return x.Uid
}
return 0
}
func (x *ReqAdminBan) GetTime() int32 {
if x != nil {
return x.Time
}
return 0
}
func (x *ReqAdminBan) GetReason() string {
if x != nil {
return x.Reason
}
return ""
}
var File_proto_Gameapi_proto protoreflect.FileDescriptor
const file_proto_Gameapi_proto_rawDesc = "" +
@ -26769,7 +26829,11 @@ 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*\xc8\n" +
"\aCommand\x18\x02 \x01(\tR\aCommand\"K\n" +
"\vReqAdminBan\x12\x10\n" +
"\x03Uid\x18\x01 \x01(\x03R\x03Uid\x12\x12\n" +
"\x04Time\x18\x02 \x01(\x05R\x04Time\x12\x16\n" +
"\x06Reason\x18\x03 \x01(\tR\x06Reason*\xc8\n" +
"\n" +
"\x0eITEM_POP_LABEL\x12\f\n" +
"\bPlayroom\x10\x00\x12\r\n" +
@ -26967,7 +27031,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, 502)
var file_proto_Gameapi_proto_msgTypes = make([]protoimpl.MessageInfo, 503)
var file_proto_Gameapi_proto_goTypes = []any{
(ITEM_POP_LABEL)(0), // 0: tutorial.ITEM_POP_LABEL
(HANDLE_TYPE)(0), // 1: tutorial.HANDLE_TYPE
@ -27420,100 +27484,101 @@ var file_proto_Gameapi_proto_goTypes = []any{
(*ReqServerInfo)(nil), // 448: tutorial.ReqServerInfo
(*ReqReload)(nil), // 449: tutorial.ReqReload
(*ReqAdminGm)(nil), // 450: tutorial.ReqAdminGm
nil, // 451: tutorial.ResChessColorData.MChessColorDataEntry
nil, // 452: tutorial.UpdateBaseItemInfo.MUpdateItemEntry
nil, // 453: tutorial.ResPlayerChessData.MChessDataEntry
nil, // 454: tutorial.UpdatePlayerChessData.MChessDataEntry
nil, // 455: tutorial.ReqSeparateChess.MChessDataEntry
nil, // 456: tutorial.ReqUpgradeChess.MChessDataEntry
nil, // 457: tutorial.ReqGetChessFromBuff.MChessDataEntry
nil, // 458: tutorial.ReqChessEx.MChessDataEntry
nil, // 459: tutorial.ReqSourceChest.MChessDataEntry
nil, // 460: tutorial.ReqPlayroomOutline.MChessDataEntry
nil, // 461: tutorial.ReqPutChessInBag.MChessDataEntry
nil, // 462: tutorial.ReqTakeChessOutBag.MChessDataEntry
nil, // 463: tutorial.ResPlayerBriefProfileData.SetEmojiEntry
nil, // 464: tutorial.UserInfo.SetEmojiEntry
nil, // 465: tutorial.ReqRewardOrder.MChessDataEntry
nil, // 466: tutorial.ResCardInfo.AllCardEntry
nil, // 467: tutorial.ResCardInfo.HandbookEntry
nil, // 468: tutorial.ResGuildInfo.RewardEntry
nil, // 469: tutorial.ResGuideInfo.RewardEntry
nil, // 470: tutorial.ResDailyTask.WeekRewardEntry
nil, // 471: tutorial.ResDailyTask.DailyTaskEntry
nil, // 472: tutorial.ResLimitEvent.LimitEventListEntry
nil, // 473: tutorial.ResLimitEventProgress.ProgressRewardEntry
nil, // 474: tutorial.LimitEvent.ParamEntry
nil, // 475: tutorial.ReqLimitEventLuckyCat.MChessDataEntry
nil, // 476: tutorial.ResPlayerSimple.EmojiEntry
nil, // 477: tutorial.ResKv.KvEntry
nil, // 478: tutorial.ResRank.RankListEntry
nil, // 479: tutorial.ResMailList.MailListEntry
nil, // 480: tutorial.ResCharge.SpecialShopEntry
nil, // 481: tutorial.ResCharge.ChessShopEntry
nil, // 482: tutorial.ResCharge.GiftEntry
nil, // 483: tutorial.ReqBuyChessShop2.MChessDataEntry
nil, // 484: tutorial.ResEndless.EndlessListEntry
nil, // 485: tutorial.ResChampshipRank.RankListEntry
nil, // 486: tutorial.ResChampshipPreRank.RankListEntry
nil, // 487: tutorial.ResNotifyCard.CardEntry
nil, // 488: tutorial.ResNotifyCard.MasterEntry
nil, // 489: tutorial.ResNotifyCard.HandbookEntry
nil, // 490: tutorial.ResMining.MapEntry
nil, // 491: tutorial.ReqMiningTake.MapEntry
nil, // 492: tutorial.ResActRed.RedEntry
nil, // 493: tutorial.ResItem.ItemEntry
nil, // 494: tutorial.ItemNotify.ItemEntry
nil, // 495: tutorial.ResGuessColor.OMapEntry
nil, // 496: tutorial.ReqGuessColorTake.OMapEntry
nil, // 497: tutorial.GuessColorInfo.MapEntry
nil, // 498: tutorial.ResPlayroom.PlayroomEntry
nil, // 499: tutorial.ResPlayroom.MoodEntry
nil, // 500: tutorial.ResPlayroom.PhysiologyEntry
nil, // 501: tutorial.ResPlayroom.DressEntry
nil, // 502: tutorial.ResPlayroom.DressSetEntry
nil, // 503: tutorial.ReqPlayroomDressSet.DressSetEntry
nil, // 504: tutorial.NotifyPlayroomMood.MoodEntry
nil, // 505: tutorial.NotifyPlayroomMood.PhysiologyEntry
nil, // 506: tutorial.ResPlayroomInfo.PlayroomEntry
nil, // 507: tutorial.ResPlayroomInfo.ItemsEntry
nil, // 508: tutorial.ResPlayroomInfo.FlipEntry
nil, // 509: tutorial.ResPlayroomInfo.EmojiEntry
nil, // 510: tutorial.ResPlayroomInfo.DressSetEntry
nil, // 511: tutorial.ResPlayroomGame.ItemsEntry
nil, // 512: tutorial.ReqPlayroomSetRoom.PlayroomEntry
(*ReqAdminBan)(nil), // 451: tutorial.ReqAdminBan
nil, // 452: tutorial.ResChessColorData.MChessColorDataEntry
nil, // 453: tutorial.UpdateBaseItemInfo.MUpdateItemEntry
nil, // 454: tutorial.ResPlayerChessData.MChessDataEntry
nil, // 455: tutorial.UpdatePlayerChessData.MChessDataEntry
nil, // 456: tutorial.ReqSeparateChess.MChessDataEntry
nil, // 457: tutorial.ReqUpgradeChess.MChessDataEntry
nil, // 458: tutorial.ReqGetChessFromBuff.MChessDataEntry
nil, // 459: tutorial.ReqChessEx.MChessDataEntry
nil, // 460: tutorial.ReqSourceChest.MChessDataEntry
nil, // 461: tutorial.ReqPlayroomOutline.MChessDataEntry
nil, // 462: tutorial.ReqPutChessInBag.MChessDataEntry
nil, // 463: tutorial.ReqTakeChessOutBag.MChessDataEntry
nil, // 464: tutorial.ResPlayerBriefProfileData.SetEmojiEntry
nil, // 465: tutorial.UserInfo.SetEmojiEntry
nil, // 466: tutorial.ReqRewardOrder.MChessDataEntry
nil, // 467: tutorial.ResCardInfo.AllCardEntry
nil, // 468: tutorial.ResCardInfo.HandbookEntry
nil, // 469: tutorial.ResGuildInfo.RewardEntry
nil, // 470: tutorial.ResGuideInfo.RewardEntry
nil, // 471: tutorial.ResDailyTask.WeekRewardEntry
nil, // 472: tutorial.ResDailyTask.DailyTaskEntry
nil, // 473: tutorial.ResLimitEvent.LimitEventListEntry
nil, // 474: tutorial.ResLimitEventProgress.ProgressRewardEntry
nil, // 475: tutorial.LimitEvent.ParamEntry
nil, // 476: tutorial.ReqLimitEventLuckyCat.MChessDataEntry
nil, // 477: tutorial.ResPlayerSimple.EmojiEntry
nil, // 478: tutorial.ResKv.KvEntry
nil, // 479: tutorial.ResRank.RankListEntry
nil, // 480: tutorial.ResMailList.MailListEntry
nil, // 481: tutorial.ResCharge.SpecialShopEntry
nil, // 482: tutorial.ResCharge.ChessShopEntry
nil, // 483: tutorial.ResCharge.GiftEntry
nil, // 484: tutorial.ReqBuyChessShop2.MChessDataEntry
nil, // 485: tutorial.ResEndless.EndlessListEntry
nil, // 486: tutorial.ResChampshipRank.RankListEntry
nil, // 487: tutorial.ResChampshipPreRank.RankListEntry
nil, // 488: tutorial.ResNotifyCard.CardEntry
nil, // 489: tutorial.ResNotifyCard.MasterEntry
nil, // 490: tutorial.ResNotifyCard.HandbookEntry
nil, // 491: tutorial.ResMining.MapEntry
nil, // 492: tutorial.ReqMiningTake.MapEntry
nil, // 493: tutorial.ResActRed.RedEntry
nil, // 494: tutorial.ResItem.ItemEntry
nil, // 495: tutorial.ItemNotify.ItemEntry
nil, // 496: tutorial.ResGuessColor.OMapEntry
nil, // 497: tutorial.ReqGuessColorTake.OMapEntry
nil, // 498: tutorial.GuessColorInfo.MapEntry
nil, // 499: tutorial.ResPlayroom.PlayroomEntry
nil, // 500: tutorial.ResPlayroom.MoodEntry
nil, // 501: tutorial.ResPlayroom.PhysiologyEntry
nil, // 502: tutorial.ResPlayroom.DressEntry
nil, // 503: tutorial.ResPlayroom.DressSetEntry
nil, // 504: tutorial.ReqPlayroomDressSet.DressSetEntry
nil, // 505: tutorial.NotifyPlayroomMood.MoodEntry
nil, // 506: tutorial.NotifyPlayroomMood.PhysiologyEntry
nil, // 507: tutorial.ResPlayroomInfo.PlayroomEntry
nil, // 508: tutorial.ResPlayroomInfo.ItemsEntry
nil, // 509: tutorial.ResPlayroomInfo.FlipEntry
nil, // 510: tutorial.ResPlayroomInfo.EmojiEntry
nil, // 511: tutorial.ResPlayroomInfo.DressSetEntry
nil, // 512: tutorial.ResPlayroomGame.ItemsEntry
nil, // 513: tutorial.ReqPlayroomSetRoom.PlayroomEntry
}
var file_proto_Gameapi_proto_depIdxs = []int32{
451, // 0: tutorial.ResChessColorData.mChessColorData:type_name -> tutorial.ResChessColorData.MChessColorDataEntry
452, // 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
452, // 3: tutorial.UpdateBaseItemInfo.mUpdateItem:type_name -> tutorial.UpdateBaseItemInfo.MUpdateItemEntry
453, // 4: tutorial.ResPlayerChessData.mChessData:type_name -> tutorial.ResPlayerChessData.MChessDataEntry
453, // 3: tutorial.UpdateBaseItemInfo.mUpdateItem:type_name -> tutorial.UpdateBaseItemInfo.MUpdateItemEntry
454, // 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
454, // 7: tutorial.UpdatePlayerChessData.mChessData:type_name -> tutorial.UpdatePlayerChessData.MChessDataEntry
455, // 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
455, // 10: tutorial.ReqSeparateChess.mChessData:type_name -> tutorial.ReqSeparateChess.MChessDataEntry
456, // 10: tutorial.ReqSeparateChess.mChessData:type_name -> tutorial.ReqSeparateChess.MChessDataEntry
2, // 11: tutorial.ResSeparateChess.code:type_name -> tutorial.RES_CODE
456, // 12: tutorial.ReqUpgradeChess.mChessData:type_name -> tutorial.ReqUpgradeChess.MChessDataEntry
457, // 12: tutorial.ReqUpgradeChess.mChessData:type_name -> tutorial.ReqUpgradeChess.MChessDataEntry
2, // 13: tutorial.ResUpgradeChess.code:type_name -> tutorial.RES_CODE
457, // 14: tutorial.ReqGetChessFromBuff.mChessData:type_name -> tutorial.ReqGetChessFromBuff.MChessDataEntry
458, // 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
458, // 17: tutorial.ReqChessEx.mChessData:type_name -> tutorial.ReqChessEx.MChessDataEntry
459, // 17: tutorial.ReqChessEx.mChessData:type_name -> tutorial.ReqChessEx.MChessDataEntry
2, // 18: tutorial.ResChessEx.code:type_name -> tutorial.RES_CODE
459, // 19: tutorial.ReqSourceChest.mChessData:type_name -> tutorial.ReqSourceChest.MChessDataEntry
460, // 19: tutorial.ReqSourceChest.mChessData:type_name -> tutorial.ReqSourceChest.MChessDataEntry
2, // 20: tutorial.ResSourceChest.code:type_name -> tutorial.RES_CODE
460, // 21: tutorial.ReqPlayroomOutline.mChessData:type_name -> tutorial.ReqPlayroomOutline.MChessDataEntry
461, // 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
461, // 24: tutorial.ReqPutChessInBag.mChessData:type_name -> tutorial.ReqPutChessInBag.MChessDataEntry
462, // 24: tutorial.ReqPutChessInBag.mChessData:type_name -> tutorial.ReqPutChessInBag.MChessDataEntry
2, // 25: tutorial.ResPutChessInBag.code:type_name -> tutorial.RES_CODE
462, // 26: tutorial.ReqTakeChessOutBag.mChessData:type_name -> tutorial.ReqTakeChessOutBag.MChessDataEntry
463, // 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
463, // 29: tutorial.ResPlayerBriefProfileData.SetEmoji:type_name -> tutorial.ResPlayerBriefProfileData.SetEmojiEntry
464, // 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
@ -27521,7 +27586,7 @@ var file_proto_Gameapi_proto_depIdxs = []int32{
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
464, // 37: tutorial.UserInfo.SetEmoji:type_name -> tutorial.UserInfo.SetEmojiEntry
465, // 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
@ -27529,7 +27594,7 @@ var file_proto_Gameapi_proto_depIdxs = []int32{
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
465, // 45: tutorial.ReqRewardOrder.mChessData:type_name -> tutorial.ReqRewardOrder.MChessDataEntry
466, // 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
@ -27538,8 +27603,8 @@ var file_proto_Gameapi_proto_depIdxs = []int32{
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
466, // 54: tutorial.ResCardInfo.AllCard:type_name -> tutorial.ResCardInfo.AllCardEntry
467, // 55: tutorial.ResCardInfo.Handbook:type_name -> tutorial.ResCardInfo.HandbookEntry
467, // 54: tutorial.ResCardInfo.AllCard:type_name -> tutorial.ResCardInfo.AllCardEntry
468, // 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
@ -27558,12 +27623,12 @@ var file_proto_Gameapi_proto_depIdxs = []int32{
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
468, // 74: tutorial.ResGuildInfo.Reward:type_name -> tutorial.ResGuildInfo.RewardEntry
469, // 75: tutorial.ResGuideInfo.Reward:type_name -> tutorial.ResGuideInfo.RewardEntry
469, // 74: tutorial.ResGuildInfo.Reward:type_name -> tutorial.ResGuildInfo.RewardEntry
470, // 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
470, // 78: tutorial.ResDailyTask.WeekReward:type_name -> tutorial.ResDailyTask.WeekRewardEntry
471, // 79: tutorial.ResDailyTask.DailyTask:type_name -> tutorial.ResDailyTask.DailyTaskEntry
471, // 78: tutorial.ResDailyTask.WeekReward:type_name -> tutorial.ResDailyTask.WeekRewardEntry
472, // 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
@ -27584,24 +27649,24 @@ var file_proto_Gameapi_proto_depIdxs = []int32{
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
472, // 100: tutorial.ResLimitEvent.LimitEventList:type_name -> tutorial.ResLimitEvent.LimitEventListEntry
473, // 101: tutorial.ResLimitEventProgress.ProgressReward:type_name -> tutorial.ResLimitEventProgress.ProgressRewardEntry
473, // 100: tutorial.ResLimitEvent.LimitEventList:type_name -> tutorial.ResLimitEvent.LimitEventListEntry
474, // 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
474, // 104: tutorial.LimitEvent.Param:type_name -> tutorial.LimitEvent.ParamEntry
475, // 105: tutorial.ReqLimitEventLuckyCat.mChessData:type_name -> tutorial.ReqLimitEventLuckyCat.MChessDataEntry
475, // 104: tutorial.LimitEvent.Param:type_name -> tutorial.LimitEvent.ParamEntry
476, // 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
476, // 112: tutorial.ResPlayerSimple.Emoji:type_name -> tutorial.ResPlayerSimple.EmojiEntry
477, // 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
218, // 115: tutorial.NotifyFriendLog.Bubble:type_name -> tutorial.FriendBubbleInfo
220, // 116: tutorial.NotifyFriendCard.Info:type_name -> tutorial.ResFriendCard
477, // 117: tutorial.ResKv.kv:type_name -> tutorial.ResKv.KvEntry
478, // 117: tutorial.ResKv.kv:type_name -> tutorial.ResKv.KvEntry
2, // 118: tutorial.ResFriendByCode.Code:type_name -> tutorial.RES_CODE
214, // 119: tutorial.ResFriendByCode.Player:type_name -> tutorial.ResPlayerSimple
214, // 120: tutorial.ResFriendRecommend.List:type_name -> tutorial.ResPlayerSimple
@ -27623,26 +27688,26 @@ var file_proto_Gameapi_proto_depIdxs = []int32{
214, // 136: tutorial.ResAgreeFriend.Player:type_name -> tutorial.ResPlayerSimple
2, // 137: tutorial.ResRefuseFriend.Code:type_name -> tutorial.RES_CODE
2, // 138: tutorial.ResDelFriend.Code:type_name -> tutorial.RES_CODE
478, // 139: tutorial.ResRank.RankList:type_name -> tutorial.ResRank.RankListEntry
479, // 140: tutorial.ResMailList.MailList:type_name -> tutorial.ResMailList.MailListEntry
479, // 139: tutorial.ResRank.RankList:type_name -> tutorial.ResRank.RankListEntry
480, // 140: tutorial.ResMailList.MailList:type_name -> tutorial.ResMailList.MailListEntry
159, // 141: tutorial.MailInfo.Items:type_name -> tutorial.ItemInfo
262, // 142: tutorial.MailNotify.Info:type_name -> tutorial.MailInfo
2, // 143: tutorial.ResReadMail.Code:type_name -> tutorial.RES_CODE
2, // 144: tutorial.ResGetMailReward.Code:type_name -> tutorial.RES_CODE
2, // 145: tutorial.ResDeleteMail.Code:type_name -> tutorial.RES_CODE
480, // 146: tutorial.ResCharge.SpecialShop:type_name -> tutorial.ResCharge.SpecialShopEntry
481, // 147: tutorial.ResCharge.ChessShop:type_name -> tutorial.ResCharge.ChessShopEntry
482, // 148: tutorial.ResCharge.Gift:type_name -> tutorial.ResCharge.GiftEntry
481, // 146: tutorial.ResCharge.SpecialShop:type_name -> tutorial.ResCharge.SpecialShopEntry
482, // 147: tutorial.ResCharge.ChessShop:type_name -> tutorial.ResCharge.ChessShopEntry
483, // 148: tutorial.ResCharge.Gift:type_name -> tutorial.ResCharge.GiftEntry
271, // 149: tutorial.ResCharge.Wish:type_name -> tutorial.WishList
2, // 150: tutorial.ResAddWish.Code:type_name -> tutorial.RES_CODE
2, // 151: tutorial.ResGetWish.Code:type_name -> tutorial.RES_CODE
2, // 152: tutorial.ResSendWishBeg.Code:type_name -> tutorial.RES_CODE
2, // 153: tutorial.ResFreeShop.Code:type_name -> tutorial.RES_CODE
2, // 154: tutorial.ResBuyChessShop.Code:type_name -> tutorial.RES_CODE
483, // 155: tutorial.ReqBuyChessShop2.mChessData:type_name -> tutorial.ReqBuyChessShop2.MChessDataEntry
484, // 155: tutorial.ReqBuyChessShop2.mChessData:type_name -> tutorial.ReqBuyChessShop2.MChessDataEntry
2, // 156: tutorial.ResBuyChessShop2.Code:type_name -> tutorial.RES_CODE
2, // 157: tutorial.ResRefreshChessShop.Code:type_name -> tutorial.RES_CODE
484, // 158: tutorial.ResEndless.EndlessList:type_name -> tutorial.ResEndless.EndlessListEntry
485, // 158: tutorial.ResEndless.EndlessList:type_name -> tutorial.ResEndless.EndlessListEntry
159, // 159: tutorial.ResEndlessInfo.Items:type_name -> tutorial.ItemInfo
2, // 160: tutorial.ResEndlessReward.Code:type_name -> tutorial.RES_CODE
2, // 161: tutorial.ResPiggyBankReward.Code:type_name -> tutorial.RES_CODE
@ -27650,26 +27715,26 @@ var file_proto_Gameapi_proto_depIdxs = []int32{
2, // 163: tutorial.ResShippingOrder.Code:type_name -> tutorial.RES_CODE
2, // 164: tutorial.ResChampshipReward.Code:type_name -> tutorial.RES_CODE
2, // 165: tutorial.ResChampshipRankReward.Code:type_name -> tutorial.RES_CODE
485, // 166: tutorial.ResChampshipRank.RankList:type_name -> tutorial.ResChampshipRank.RankListEntry
486, // 167: tutorial.ResChampshipPreRank.RankList:type_name -> tutorial.ResChampshipPreRank.RankListEntry
487, // 168: tutorial.ResNotifyCard.Card:type_name -> tutorial.ResNotifyCard.CardEntry
488, // 169: tutorial.ResNotifyCard.Master:type_name -> tutorial.ResNotifyCard.MasterEntry
489, // 170: tutorial.ResNotifyCard.Handbook:type_name -> tutorial.ResNotifyCard.HandbookEntry
486, // 166: tutorial.ResChampshipRank.RankList:type_name -> tutorial.ResChampshipRank.RankListEntry
487, // 167: tutorial.ResChampshipPreRank.RankList:type_name -> tutorial.ResChampshipPreRank.RankListEntry
488, // 168: tutorial.ResNotifyCard.Card:type_name -> tutorial.ResNotifyCard.CardEntry
489, // 169: tutorial.ResNotifyCard.Master:type_name -> tutorial.ResNotifyCard.MasterEntry
490, // 170: tutorial.ResNotifyCard.Handbook:type_name -> tutorial.ResNotifyCard.HandbookEntry
2, // 171: tutorial.ResSetFacebookUrl.Code:type_name -> tutorial.RES_CODE
490, // 172: tutorial.ResMining.Map:type_name -> tutorial.ResMining.MapEntry
491, // 173: tutorial.ReqMiningTake.Map:type_name -> tutorial.ReqMiningTake.MapEntry
491, // 172: tutorial.ResMining.Map:type_name -> tutorial.ResMining.MapEntry
492, // 173: tutorial.ReqMiningTake.Map:type_name -> tutorial.ReqMiningTake.MapEntry
2, // 174: tutorial.ResMiningTake.Code:type_name -> tutorial.RES_CODE
2, // 175: tutorial.ResMiningReward.Code:type_name -> tutorial.RES_CODE
492, // 176: tutorial.ResActRed.Red:type_name -> tutorial.ResActRed.RedEntry
493, // 176: tutorial.ResActRed.Red:type_name -> tutorial.ResActRed.RedEntry
189, // 177: tutorial.ActivityNotify.Info:type_name -> tutorial.ActivityInfo
493, // 178: tutorial.ResItem.Item:type_name -> tutorial.ResItem.ItemEntry
494, // 179: tutorial.ItemNotify.Item:type_name -> tutorial.ItemNotify.ItemEntry
494, // 178: tutorial.ResItem.Item:type_name -> tutorial.ResItem.ItemEntry
495, // 179: tutorial.ItemNotify.Item:type_name -> tutorial.ItemNotify.ItemEntry
341, // 180: tutorial.ResGuessColor.MapList:type_name -> tutorial.GuessColorInfo
495, // 181: tutorial.ResGuessColor.OMap:type_name -> tutorial.ResGuessColor.OMapEntry
496, // 181: tutorial.ResGuessColor.OMap:type_name -> tutorial.ResGuessColor.OMapEntry
339, // 182: tutorial.ResGuessColor.Opponent:type_name -> tutorial.opponent
341, // 183: tutorial.ReqGuessColorTake.Map:type_name -> tutorial.GuessColorInfo
496, // 184: tutorial.ReqGuessColorTake.OMap:type_name -> tutorial.ReqGuessColorTake.OMapEntry
497, // 185: tutorial.GuessColorInfo.Map:type_name -> tutorial.GuessColorInfo.MapEntry
497, // 184: tutorial.ReqGuessColorTake.OMap:type_name -> tutorial.ReqGuessColorTake.OMapEntry
498, // 185: tutorial.GuessColorInfo.Map:type_name -> tutorial.GuessColorInfo.MapEntry
2, // 186: tutorial.ResGuessColorTake.Code:type_name -> tutorial.RES_CODE
2, // 187: tutorial.ResGuessColorReward.Code:type_name -> tutorial.RES_CODE
347, // 188: tutorial.ResRace.Opponent:type_name -> tutorial.raceopponent
@ -27678,13 +27743,13 @@ var file_proto_Gameapi_proto_depIdxs = []int32{
159, // 191: tutorial.ResPlayroom.Items:type_name -> tutorial.ItemInfo
378, // 192: tutorial.ResPlayroom.Opponent:type_name -> tutorial.RoomOpponent
377, // 193: tutorial.ResPlayroom.Friend:type_name -> tutorial.FriendRoom
498, // 194: tutorial.ResPlayroom.Playroom:type_name -> tutorial.ResPlayroom.PlayroomEntry
499, // 195: tutorial.ResPlayroom.Mood:type_name -> tutorial.ResPlayroom.MoodEntry
499, // 194: tutorial.ResPlayroom.Playroom:type_name -> tutorial.ResPlayroom.PlayroomEntry
500, // 195: tutorial.ResPlayroom.Mood:type_name -> tutorial.ResPlayroom.MoodEntry
159, // 196: tutorial.ResPlayroom.LoseItem:type_name -> tutorial.ItemInfo
373, // 197: tutorial.ResPlayroom.Chip:type_name -> tutorial.ChipInfo
500, // 198: tutorial.ResPlayroom.Physiology:type_name -> tutorial.ResPlayroom.PhysiologyEntry
501, // 199: tutorial.ResPlayroom.Dress:type_name -> tutorial.ResPlayroom.DressEntry
502, // 200: tutorial.ResPlayroom.DressSet:type_name -> tutorial.ResPlayroom.DressSetEntry
501, // 198: tutorial.ResPlayroom.Physiology:type_name -> tutorial.ResPlayroom.PhysiologyEntry
502, // 199: tutorial.ResPlayroom.Dress:type_name -> tutorial.ResPlayroom.DressEntry
503, // 200: tutorial.ResPlayroom.DressSet:type_name -> tutorial.ResPlayroom.DressSetEntry
163, // 201: tutorial.ResPlayroom.DailyTask:type_name -> tutorial.DailyTask
375, // 202: tutorial.ResPlayroom.AdItem:type_name -> tutorial.AdItem
163, // 203: tutorial.NotifyPlayroomTask.DailyTask:type_name -> tutorial.DailyTask
@ -27692,28 +27757,28 @@ var file_proto_Gameapi_proto_depIdxs = []int32{
2, // 205: tutorial.ResPlayroomTaskReward.Code:type_name -> tutorial.RES_CODE
2, // 206: tutorial.ResPlayroomUnlock.Code:type_name -> tutorial.RES_CODE
2, // 207: tutorial.ResPlayroomUpvote.Code:type_name -> tutorial.RES_CODE
503, // 208: tutorial.ReqPlayroomDressSet.DressSet:type_name -> tutorial.ReqPlayroomDressSet.DressSetEntry
504, // 208: tutorial.ReqPlayroomDressSet.DressSet:type_name -> tutorial.ReqPlayroomDressSet.DressSetEntry
2, // 209: tutorial.ResPlayroomDressSet.Code:type_name -> tutorial.RES_CODE
2, // 210: tutorial.ResPlayroomPetAirSet.Code:type_name -> tutorial.RES_CODE
2, // 211: tutorial.ResPlayroomWrokOutline.Code:type_name -> tutorial.RES_CODE
159, // 212: tutorial.NotifyPlayroomLose.LoseItem:type_name -> tutorial.ItemInfo
373, // 213: tutorial.NotifyPlayroomLose.Chip:type_name -> tutorial.ChipInfo
504, // 214: tutorial.NotifyPlayroomMood.Mood:type_name -> tutorial.NotifyPlayroomMood.MoodEntry
505, // 215: tutorial.NotifyPlayroomMood.Physiology:type_name -> tutorial.NotifyPlayroomMood.PhysiologyEntry
505, // 214: tutorial.NotifyPlayroomMood.Mood:type_name -> tutorial.NotifyPlayroomMood.MoodEntry
506, // 215: tutorial.NotifyPlayroomMood.Physiology:type_name -> tutorial.NotifyPlayroomMood.PhysiologyEntry
375, // 216: tutorial.NotifyPlayroomMood.AdItem:type_name -> tutorial.AdItem
506, // 217: tutorial.ResPlayroomInfo.Playroom:type_name -> tutorial.ResPlayroomInfo.PlayroomEntry
507, // 218: tutorial.ResPlayroomInfo.Items:type_name -> tutorial.ResPlayroomInfo.ItemsEntry
508, // 219: tutorial.ResPlayroomInfo.flip:type_name -> tutorial.ResPlayroomInfo.FlipEntry
509, // 220: tutorial.ResPlayroomInfo.Emoji:type_name -> tutorial.ResPlayroomInfo.EmojiEntry
510, // 221: tutorial.ResPlayroomInfo.DressSet:type_name -> tutorial.ResPlayroomInfo.DressSetEntry
507, // 217: tutorial.ResPlayroomInfo.Playroom:type_name -> tutorial.ResPlayroomInfo.PlayroomEntry
508, // 218: tutorial.ResPlayroomInfo.Items:type_name -> tutorial.ResPlayroomInfo.ItemsEntry
509, // 219: tutorial.ResPlayroomInfo.flip:type_name -> tutorial.ResPlayroomInfo.FlipEntry
510, // 220: tutorial.ResPlayroomInfo.Emoji:type_name -> tutorial.ResPlayroomInfo.EmojiEntry
511, // 221: tutorial.ResPlayroomInfo.DressSet:type_name -> tutorial.ResPlayroomInfo.DressSetEntry
2, // 222: tutorial.ResPlayroomFlip.Code:type_name -> tutorial.RES_CODE
2, // 223: tutorial.ResPlayroomGuide.Code:type_name -> tutorial.RES_CODE
2, // 224: tutorial.ResPlayroomFlipReward.Code:type_name -> tutorial.RES_CODE
2, // 225: tutorial.ResPlayroomGame.Code:type_name -> tutorial.RES_CODE
511, // 226: tutorial.ResPlayroomGame.Items:type_name -> tutorial.ResPlayroomGame.ItemsEntry
512, // 226: tutorial.ResPlayroomGame.Items:type_name -> tutorial.ResPlayroomGame.ItemsEntry
159, // 227: tutorial.ResPlayroomGameShowReward.Items:type_name -> tutorial.ItemInfo
2, // 228: tutorial.ResPlayroomInteract.Code:type_name -> tutorial.RES_CODE
512, // 229: tutorial.ReqPlayroomSetRoom.Playroom:type_name -> tutorial.ReqPlayroomSetRoom.PlayroomEntry
513, // 229: tutorial.ReqPlayroomSetRoom.Playroom:type_name -> tutorial.ReqPlayroomSetRoom.PlayroomEntry
2, // 230: tutorial.ResPlayroomSetRoom.Code:type_name -> tutorial.RES_CODE
2, // 231: tutorial.ResPlayroomSelectReward.Code:type_name -> tutorial.RES_CODE
2, // 232: tutorial.ResPlayroomLose.Code:type_name -> tutorial.RES_CODE
@ -27771,7 +27836,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: 502,
NumMessages: 503,
NumExtensions: 0,
NumServices: 0,
},