优化
This commit is contained in:
parent
43630729be
commit
444d593400
@ -195,3 +195,15 @@ func ReloadMail(AppId, ServerId int, req *msg.ReqReloadServerMail) (*msg.ResBack
|
||||
wrapRPCError[*msg.ResBackend],
|
||||
)
|
||||
}
|
||||
|
||||
func MiniGame(AppId, ServerId int, req *msg.ReqMiniGame) (*msg.ResMiniGame, error) {
|
||||
return executeBackendCall(
|
||||
AppId,
|
||||
ServerId,
|
||||
"MiniGameReward",
|
||||
func(ctx context.Context, client msg.BackendClient) (*msg.ResMiniGame, error) {
|
||||
return client.MiniGame(ctx, req)
|
||||
},
|
||||
wrapRPCError[*msg.ResMiniGame],
|
||||
)
|
||||
}
|
||||
|
||||
123
log/backend.log
123
log/backend.log
@ -1,123 +0,0 @@
|
||||
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.
|
||||
|
||||
[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
|
||||
- using env: export GIN_MODE=release
|
||||
- using code: gin.SetMode(gin.ReleaseMode)
|
||||
|
||||
[GIN-debug] POST /api/open/apk/upload --> backend/controller.UploadApkPackage (3 handlers)
|
||||
[GIN-debug] POST /api/auth/login --> backend/controller.Login (3 handlers)
|
||||
[GIN-debug] GET /api/auth/Codes --> backend/controller.Codes (3 handlers)
|
||||
[GIN-debug] POST /api/auth/phoneCode --> backend/controller.PhoneCode (3 handlers)
|
||||
[GIN-debug] POST /api/auth/phoneLogin --> backend/controller.LoginCode (3 handlers)
|
||||
[GIN-debug] POST /api/feishu/sendInfo --> backend/controller.FeishuSendInfo (3 handlers)
|
||||
[GIN-debug] POST /api/feishu/sendInfo2 --> backend/controller.FeishuSendInfo2 (3 handlers)
|
||||
[GIN-debug] POST /api/feishu/sendWeekInfo --> backend/controller.FeishuSendWeekInfo (3 handlers)
|
||||
[GIN-debug] POST /api/feishu/updateApp --> backend/controller.FeishuUpdateApp (3 handlers)
|
||||
[GIN-debug] POST /api/feishu/serverInfo --> backend/controller.FeishuServerInfo (3 handlers)
|
||||
[GIN-debug] POST /api/feishu/notify --> backend/controller.FeishuNotify (3 handlers)
|
||||
[GIN-debug] POST /api/feishu/notify/client --> backend/controller.FeishuNotifyClient (3 handlers)
|
||||
[GIN-debug] POST /api/feishu/notify/order --> backend/controller.FeishuNotifyOrder (3 handlers)
|
||||
[GIN-debug] POST /api/alibaba/zabbix/notify --> backend/controller.AlibabaNotify (3 handlers)
|
||||
[GIN-debug] POST /api/alibaba/zabbix/recovery --> backend/controller.AlibabaRecovery (3 handlers)
|
||||
[GIN-debug] POST /api/alibaba/game/notify --> backend/controller.AlibabaGameNotify (3 handlers)
|
||||
[GIN-debug] POST /api/alibaba/notify/order --> backend/controller.AlibabaNotifyOrder (3 handlers)
|
||||
[GIN-debug] GET /api/v1/experiments --> backend/controller.ExperimentList (4 handlers)
|
||||
[GIN-debug] POST /api/v1/experiments --> backend/controller.ExperimentCreate (4 handlers)
|
||||
[GIN-debug] PUT /api/v1/experiments/:id --> backend/controller.ExperimentUpdate (4 handlers)
|
||||
[GIN-debug] DELETE /api/v1/experiments/:id --> backend/controller.ExperimentDelete (4 handlers)
|
||||
[GIN-debug] GET /api/v1/experiments/:id/variants --> backend/controller.ExperimentVariantList (4 handlers)
|
||||
[GIN-debug] POST /api/v1/experiments/:id/variants --> backend/controller.ExperimentVariantCreate (4 handlers)
|
||||
[GIN-debug] PUT /api/v1/experiments/:id/variants/:variantId --> backend/controller.ExperimentVariantUpdate (4 handlers)
|
||||
[GIN-debug] DELETE /api/v1/experiments/:id/variants/:variantId --> backend/controller.ExperimentVariantDelete (4 handlers)
|
||||
[GIN-debug] GET /api/v1/experiments/:id/whitelist --> backend/controller.ExperimentWhitelistList (4 handlers)
|
||||
[GIN-debug] POST /api/v1/experiments/:id/whitelist --> backend/controller.ExperimentWhitelistCreate (4 handlers)
|
||||
[GIN-debug] POST /api/v1/experiments/:id/whitelist/batch --> backend/controller.ExperimentWhitelistBatchCreate (4 handlers)
|
||||
[GIN-debug] DELETE /api/v1/experiments/:id/whitelist/:userId --> backend/controller.ExperimentWhitelistDelete (4 handlers)
|
||||
[GIN-debug] GET /api/v1/experiments/:id/results --> backend/controller.ExperimentResult (4 handlers)
|
||||
[GIN-debug] GET /api/v1/users/:userId/groups --> backend/controller.UserExperimentGroups (4 handlers)
|
||||
[GIN-debug] GET /api/user/info --> backend/controller.UserInfo (4 handlers)
|
||||
[GIN-debug] POST /api/statistics/info --> backend/controller.StatisticsInfo (4 handlers)
|
||||
[GIN-debug] POST /api/statistics/level --> backend/controller.StatisticsLevel (4 handlers)
|
||||
[GIN-debug] POST /api/statistics/order --> backend/controller.StatisticsOrder (4 handlers)
|
||||
[GIN-debug] POST /api/statistics/heat --> backend/controller.StatisticsHeat (4 handlers)
|
||||
[GIN-debug] POST /api/admin/list --> backend/controller.AdminList (4 handlers)
|
||||
[GIN-debug] POST /api/admin/add --> backend/controller.AdminAdd (4 handlers)
|
||||
[GIN-debug] POST /api/admin/edit --> backend/controller.AdminEdit (4 handlers)
|
||||
[GIN-debug] POST /api/admin/delete --> backend/controller.AdminDelete (4 handlers)
|
||||
[GIN-debug] POST /api/admin/log/list --> backend/controller.AdminLogList (4 handlers)
|
||||
[GIN-debug] POST /api/admin/config/list --> backend/controller.AdminConfigList (4 handlers)
|
||||
[GIN-debug] POST /api/admin/config/add --> backend/controller.AdminConfigAdd (4 handlers)
|
||||
[GIN-debug] POST /api/admin/config/edit --> backend/controller.AdminConfigEdit (4 handlers)
|
||||
[GIN-debug] POST /api/admin/usergroup/list --> backend/controller.PermissionUserGroupList (4 handlers)
|
||||
[GIN-debug] POST /api/admin/usergroup/add --> backend/controller.PermissionUserGroupAdd (4 handlers)
|
||||
[GIN-debug] POST /api/admin/usergroup/edit --> backend/controller.PermissionUserGroupEdit (4 handlers)
|
||||
[GIN-debug] POST /api/admin/usergroup/delete --> backend/controller.PermissionUserGroupDelete (4 handlers)
|
||||
[GIN-debug] POST /api/admin/usergroup/role/set --> backend/controller.PermissionGroupRoleSet (4 handlers)
|
||||
[GIN-debug] POST /api/admin/usergroup/role/list --> backend/controller.PermissionGroupRoleList (4 handlers)
|
||||
[GIN-debug] POST /api/admin/role/list --> backend/controller.PermissionRoleList (4 handlers)
|
||||
[GIN-debug] POST /api/admin/role/add --> backend/controller.PermissionRoleAdd (4 handlers)
|
||||
[GIN-debug] POST /api/admin/role/edit --> backend/controller.PermissionRoleEdit (4 handlers)
|
||||
[GIN-debug] POST /api/admin/role/delete --> backend/controller.PermissionRoleDelete (4 handlers)
|
||||
[GIN-debug] POST /api/admin/role/permission/set --> backend/controller.PermissionRolePermissionSet (4 handlers)
|
||||
[GIN-debug] POST /api/admin/role/permission/list --> backend/controller.PermissionRolePermissionList (4 handlers)
|
||||
[GIN-debug] POST /api/admin/permission/list --> backend/controller.PermissionPointList (4 handlers)
|
||||
[GIN-debug] POST /api/admin/permission/add --> backend/controller.PermissionPointAdd (4 handlers)
|
||||
[GIN-debug] POST /api/admin/permission/edit --> backend/controller.PermissionPointEdit (4 handlers)
|
||||
[GIN-debug] POST /api/admin/permission/delete --> backend/controller.PermissionPointDelete (4 handlers)
|
||||
[GIN-debug] POST /api/admin/user/group/list --> backend/controller.PermissionUserGroupRelList (4 handlers)
|
||||
[GIN-debug] POST /api/admin/user/group/set --> backend/controller.PermissionUserGroupRelSet (4 handlers)
|
||||
[GIN-debug] POST /api/admin/user/permission/list --> backend/controller.PermissionUserPermissionList (4 handlers)
|
||||
[GIN-debug] POST /api/admin/user/permission/set --> backend/controller.PermissionUserPermissionSet (4 handlers)
|
||||
[GIN-debug] POST /api/admin/user/role/list --> backend/controller.PermissionUserRoleList (4 handlers)
|
||||
[GIN-debug] POST /api/admin/user/role/batch-list --> backend/controller.PermissionUserRoleBatchList (4 handlers)
|
||||
[GIN-debug] POST /api/log/user --> backend/controller.UserDetail (4 handlers)
|
||||
[GIN-debug] POST /api/log/asset --> backend/controller.Asset (4 handlers)
|
||||
[GIN-debug] POST /api/log/event --> backend/controller.Event (4 handlers)
|
||||
[GIN-debug] POST /api/log/loginCountByMonth --> backend/controller.LoginCountByMonth (4 handlers)
|
||||
[GIN-debug] POST /api/log/order --> backend/controller.Order (4 handlers)
|
||||
[GIN-debug] POST /api/user/list --> backend/controller.UserList (4 handlers)
|
||||
[GIN-debug] POST /api/user/gm --> backend/controller.UserGM (4 handlers)
|
||||
[GIN-debug] POST /api/user/ban --> backend/controller.UserBan (4 handlers)
|
||||
[GIN-debug] POST /api/server/list --> backend/controller.AppList (4 handlers)
|
||||
[GIN-debug] POST /api/server/serverList --> backend/controller.ServerList (4 handlers)
|
||||
[GIN-debug] POST /api/server/addServer --> backend/controller.AddServer (4 handlers)
|
||||
[GIN-debug] POST /api/server/nodeList --> backend/controller.NodeList (4 handlers)
|
||||
[GIN-debug] POST /api/server/addNode --> backend/controller.AddNode (4 handlers)
|
||||
[GIN-debug] POST /api/server/editServer --> backend/controller.EditServer (4 handlers)
|
||||
[GIN-debug] POST /api/server/updateApp --> backend/controller.UpdateApp (4 handlers)
|
||||
[GIN-debug] POST /api/server/updateAppReview --> backend/controller.UpdateAppReview (4 handlers)
|
||||
[GIN-debug] POST /api/server/updateAppFeishu --> backend/controller.UpdateAppFeishu (4 handlers)
|
||||
[GIN-debug] POST /api/server/restart --> backend/controller.RestartServer (4 handlers)
|
||||
[GIN-debug] POST /api/server/reload --> backend/controller.ReloadServer (4 handlers)
|
||||
[GIN-debug] POST /api/activity/list --> backend/controller.ActivityList (4 handlers)
|
||||
[GIN-debug] POST /api/activity/edit --> backend/controller.ActivityEdit (4 handlers)
|
||||
[GIN-debug] POST /api/activity/add --> backend/controller.ActivityAdd (4 handlers)
|
||||
[GIN-debug] POST /api/activity/delete --> backend/controller.ActivityDelete (4 handlers)
|
||||
[GIN-debug] POST /api/activity/sync --> backend/controller.ActivitySync (4 handlers)
|
||||
[GIN-debug] POST /api/mail/send --> backend/controller.SendMail (4 handlers)
|
||||
[GIN-debug] POST /api/mail/list --> backend/controller.MailList (4 handlers)
|
||||
[GIN-debug] POST /api/mail/delete --> backend/controller.MailDelete (4 handlers)
|
||||
[GIN-debug] POST /api/operation/copyUser --> backend/controller.CopyUser (4 handlers)
|
||||
[GIN-debug] GET /api/apk/packages --> backend/controller.GetApkPackages (4 handlers)
|
||||
[GIN-debug] GET /api/apk/download/:env --> backend/controller.DownloadApkPackage (4 handlers)
|
||||
[GIN-debug] POST /api/language/list --> backend/controller.Language (4 handlers)
|
||||
[GIN-debug] POST /api/language/export --> backend/controller.LanguageExport (4 handlers)
|
||||
[GIN-debug] POST /api/language/save --> backend/controller.LanguageSave (4 handlers)
|
||||
[GIN-debug] POST /api/language/add --> backend/controller.LanguageAdd (4 handlers)
|
||||
[GIN-debug] POST /api/language/delete --> backend/controller.LanguageDelete (4 handlers)
|
||||
[GIN-debug] GET /api/config/notification --> backend/controller.NotificationConfigGet (4 handlers)
|
||||
[GIN-debug] PUT /api/config/notification/update --> backend/controller.NotificationConfigSave (4 handlers)
|
||||
[GIN-debug] POST /api/scripts/copywriting --> backend/controller.Copywriting (4 handlers)
|
||||
[GIN-debug] POST /api/scripts/copyonline --> backend/controller.CopyOnline (4 handlers)
|
||||
[GIN-debug] POST /api/scripts/clientImageGitPull --> backend/controller.ClientImageGitPull (4 handlers)
|
||||
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
|
||||
Please check https://github.com/gin-gonic/gin/blob/master/docs/doc.md#dont-trust-all-proxies for details.
|
||||
[GIN-debug] Listening and serving HTTP on :5320
|
||||
2026/05/07 15:32:59 apk uploaded env=prod packageType=without_sdk file=prod_v1.0.73_20260430_1423_656bd841f_#78.apk size=282603268
|
||||
[GIN] 2026/05/07 - 15:32:59 | 200 | 6.29s | ::1 | POST "/api/open/apk/upload"
|
||||
2026/05/07 15:33:00 monitor server failed, AppId=2, ServerId=0, err=method1 and method2 both failed, method1Err=ServerInfo failed: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing: dial tcp 112.124.54.243:0: connectex: The requested address is not valid in its context.", method2Err=failed to send admin message: failed to read from websocket: websocket: close 1006 (abnormal closure): unexpected EOF
|
||||
2026/05/07 15:33:03 monitor server failed, AppId=0, ServerId=0, err=method1 and method2 both failed, method1Err=dial tcp 101.132.170.198:0: connectex: The requested address is not valid in its context., method2Err=dial tcp 101.132.170.198:0: connectex: The requested address is not valid in its context.
|
||||
[GIN] 2026/05/07 - 15:33:04 | 200 | 92.07ms | ::1 | GET "/api/apk/packages"
|
||||
2026/05/07 15:33:05 monitor server failed, AppId=4, ServerId=1, err=method1 and method2 both failed, method1Err=ServerInfo failed: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing: dial tcp 1.15.182.107:0: connectex: The requested address is not valid in its context.", method2Err=failed to get websocket: failed to connect to websocket: dial tcp 112.124.54.243:4701: i/o timeout
|
||||
2026/05/07 15:33:06 monitor server failed, AppId=1, ServerId=3, err=method1 and method2 both failed, method1Err=ServerInfo failed: rpc error: code = DeadlineExceeded desc = received context error while waiting for new LB policy update: context deadline exceeded, method2Err=failed to send admin message: failed to read from websocket: websocket: close 1006 (abnormal closure): unexpected EOF
|
||||
2026/05/07 15:33:06 monitor server failed, AppId=2, ServerId=3, err=method1 and method2 both failed, method1Err=ServerInfo failed: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing: dial tcp 112.124.54.243:50063: connectex: No connection could be made because the target machine actively refused it.", method2Err=dial tcp 112.124.54.243:3653: connectex: No connection could be made because the target machine actively refused it.
|
||||
@ -73,12 +73,18 @@ func (s *Statistics) StatisticsLevel() (interface{}, error) {
|
||||
}
|
||||
|
||||
func (s *Statistics) StatisticsInfo() (interface{}, error) {
|
||||
remainRate, remainErr := util.GetYesterdaySecondRemainRateRealtime(s.AppId)
|
||||
if remainErr != nil {
|
||||
remainRate = 0
|
||||
}
|
||||
|
||||
statisticsInfoCache.mu.RLock()
|
||||
if entry, ok := statisticsInfoCache.items[s.AppId]; ok && time.Now().Before(entry.expireAt) {
|
||||
cached := make(map[string]interface{}, len(entry.data))
|
||||
for k, v := range entry.data {
|
||||
cached[k] = v
|
||||
}
|
||||
cached["remain"] = remainRate
|
||||
statisticsInfoCache.mu.RUnlock()
|
||||
return cached, nil
|
||||
}
|
||||
@ -102,7 +108,7 @@ func (s *Statistics) StatisticsInfo() (interface{}, error) {
|
||||
"totalRecharge": totalRechargeFloat,
|
||||
"rechargeUser": overview.RechargeUser,
|
||||
"totalRechargeUser": overview.TotalRechargeUser,
|
||||
"remain": 0,
|
||||
"remain": remainRate,
|
||||
}
|
||||
|
||||
statisticsInfoCache.mu.Lock()
|
||||
|
||||
@ -9,7 +9,6 @@ import (
|
||||
"backend/util"
|
||||
"errors"
|
||||
"fmt"
|
||||
"log"
|
||||
"net"
|
||||
"time"
|
||||
|
||||
@ -71,7 +70,6 @@ func monitorServerInfo() {
|
||||
}
|
||||
go func(v *Type.ServerInfo) {
|
||||
if err := monitorServerByFallback(v); err != nil {
|
||||
log.Printf("monitor server failed, AppId=%d, ServerId=%d, err=%v", v.AppId, v.ServerId, err)
|
||||
markServerOffline(v.AppId, v.ServerId)
|
||||
}
|
||||
}(v)
|
||||
|
||||
@ -30760,6 +30760,118 @@ func (x *ResBackend) GetMsg() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
type ReqMiniGame struct {
|
||||
state protoimpl.MessageState `protogen:"open.v1"`
|
||||
Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 游戏id
|
||||
Score int32 `protobuf:"varint,2,opt,name=Score,proto3" json:"Score,omitempty"` // 游戏分数
|
||||
Uid int64 `protobuf:"varint,3,opt,name=Uid,proto3" json:"Uid,omitempty"` // 玩家id
|
||||
unknownFields protoimpl.UnknownFields
|
||||
sizeCache protoimpl.SizeCache
|
||||
}
|
||||
|
||||
func (x *ReqMiniGame) Reset() {
|
||||
*x = ReqMiniGame{}
|
||||
mi := &file_proto_Gameapi_proto_msgTypes[520]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
|
||||
func (x *ReqMiniGame) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*ReqMiniGame) ProtoMessage() {}
|
||||
|
||||
func (x *ReqMiniGame) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_proto_Gameapi_proto_msgTypes[520]
|
||||
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 ReqMiniGame.ProtoReflect.Descriptor instead.
|
||||
func (*ReqMiniGame) Descriptor() ([]byte, []int) {
|
||||
return file_proto_Gameapi_proto_rawDescGZIP(), []int{520}
|
||||
}
|
||||
|
||||
func (x *ReqMiniGame) GetId() int32 {
|
||||
if x != nil {
|
||||
return x.Id
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *ReqMiniGame) GetScore() int32 {
|
||||
if x != nil {
|
||||
return x.Score
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *ReqMiniGame) GetUid() int64 {
|
||||
if x != nil {
|
||||
return x.Uid
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
type ResMiniGame struct {
|
||||
state protoimpl.MessageState `protogen:"open.v1"`
|
||||
Code int32 `protobuf:"varint,1,opt,name=Code,proto3" json:"Code,omitempty"`
|
||||
Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"`
|
||||
unknownFields protoimpl.UnknownFields
|
||||
sizeCache protoimpl.SizeCache
|
||||
}
|
||||
|
||||
func (x *ResMiniGame) Reset() {
|
||||
*x = ResMiniGame{}
|
||||
mi := &file_proto_Gameapi_proto_msgTypes[521]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
|
||||
func (x *ResMiniGame) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*ResMiniGame) ProtoMessage() {}
|
||||
|
||||
func (x *ResMiniGame) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_proto_Gameapi_proto_msgTypes[521]
|
||||
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 ResMiniGame.ProtoReflect.Descriptor instead.
|
||||
func (*ResMiniGame) Descriptor() ([]byte, []int) {
|
||||
return file_proto_Gameapi_proto_rawDescGZIP(), []int{521}
|
||||
}
|
||||
|
||||
func (x *ResMiniGame) GetCode() int32 {
|
||||
if x != nil {
|
||||
return x.Code
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *ResMiniGame) GetMsg() string {
|
||||
if x != nil {
|
||||
return x.Msg
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
var File_proto_Gameapi_proto protoreflect.FileDescriptor
|
||||
|
||||
const file_proto_Gameapi_proto_rawDesc = "" +
|
||||
@ -33051,6 +33163,13 @@ const file_proto_Gameapi_proto_rawDesc = "" +
|
||||
"\n" +
|
||||
"ResBackend\x12\x12\n" +
|
||||
"\x04Code\x18\x01 \x01(\x05R\x04Code\x12\x10\n" +
|
||||
"\x03Msg\x18\x02 \x01(\tR\x03Msg\"E\n" +
|
||||
"\vReqMiniGame\x12\x0e\n" +
|
||||
"\x02Id\x18\x01 \x01(\x05R\x02Id\x12\x14\n" +
|
||||
"\x05Score\x18\x02 \x01(\x05R\x05Score\x12\x10\n" +
|
||||
"\x03Uid\x18\x03 \x01(\x03R\x03Uid\"3\n" +
|
||||
"\vResMiniGame\x12\x12\n" +
|
||||
"\x04Code\x18\x01 \x01(\x05R\x04Code\x12\x10\n" +
|
||||
"\x03Msg\x18\x02 \x01(\tR\x03Msg*\xab\f\n" +
|
||||
"\x0eITEM_POP_LABEL\x12\f\n" +
|
||||
"\bPlayroom\x10\x00\x12\r\n" +
|
||||
@ -33299,7 +33418,7 @@ const file_proto_Gameapi_proto_rawDesc = "" +
|
||||
"\x1cFRIEND_REPLY_HANDLE_ERR_TYPE\x12\b\n" +
|
||||
"\x04NONE\x10\x00\x12\n" +
|
||||
"\n" +
|
||||
"\x06CATNIP\x10\x012\x96\x04\n" +
|
||||
"\x06CATNIP\x10\x012\xd0\x04\n" +
|
||||
"\aBackend\x12P\n" +
|
||||
"\x0eReloadActivity\x12\x1e.tutorial.ReqActivityCfgReload\x1a\x1e.tutorial.ResActivityCfgReload\x12G\n" +
|
||||
"\rOrderShipping\x12\x1a.tutorial.ReqOrderShipping\x1a\x1a.tutorial.ResOrderShipping\x12@\n" +
|
||||
@ -33311,7 +33430,8 @@ const file_proto_Gameapi_proto_rawDesc = "" +
|
||||
"\tBanPlayer\x12\x15.tutorial.ReqAdminBan\x1a\x14.tutorial.ResBackend\x12A\n" +
|
||||
"\n" +
|
||||
"ReloadMail\x12\x1d.tutorial.ReqReloadServerMail\x1a\x14.tutorial.ResBackend\x129\n" +
|
||||
"\fServerReload\x12\x13.tutorial.ReqReload\x1a\x14.tutorial.ResBackendB\bZ\x06../msgb\x06proto3"
|
||||
"\fServerReload\x12\x13.tutorial.ReqReload\x1a\x14.tutorial.ResBackend\x128\n" +
|
||||
"\bMiniGame\x12\x15.tutorial.ReqMiniGame\x1a\x15.tutorial.ResMiniGameB\bZ\x06../msgb\x06proto3"
|
||||
|
||||
var (
|
||||
file_proto_Gameapi_proto_rawDescOnce sync.Once
|
||||
@ -33326,7 +33446,7 @@ func file_proto_Gameapi_proto_rawDescGZIP() []byte {
|
||||
}
|
||||
|
||||
var file_proto_Gameapi_proto_enumTypes = make([]protoimpl.EnumInfo, 14)
|
||||
var file_proto_Gameapi_proto_msgTypes = make([]protoimpl.MessageInfo, 597)
|
||||
var file_proto_Gameapi_proto_msgTypes = make([]protoimpl.MessageInfo, 599)
|
||||
var file_proto_Gameapi_proto_goTypes = []any{
|
||||
(ITEM_POP_LABEL)(0), // 0: tutorial.ITEM_POP_LABEL
|
||||
(HANDLE_TYPE)(0), // 1: tutorial.HANDLE_TYPE
|
||||
@ -33862,121 +33982,123 @@ var file_proto_Gameapi_proto_goTypes = []any{
|
||||
(*ResServerInfo)(nil), // 531: tutorial.ResServerInfo
|
||||
(*ResAdminGm)(nil), // 532: tutorial.ResAdminGm
|
||||
(*ResBackend)(nil), // 533: tutorial.ResBackend
|
||||
nil, // 534: tutorial.ResChessColorData.MChessColorDataEntry
|
||||
nil, // 535: tutorial.UpdateBaseItemInfo.MUpdateItemEntry
|
||||
nil, // 536: tutorial.ResPlayerChessData.MChessDataEntry
|
||||
nil, // 537: tutorial.ReqPutPartInBag.MChessDataEntry
|
||||
nil, // 538: tutorial.UpdatePlayerChessData.MChessDataEntry
|
||||
nil, // 539: tutorial.ReqSeparateChess.MChessDataEntry
|
||||
nil, // 540: tutorial.ReqUpgradeChess.MChessDataEntry
|
||||
nil, // 541: tutorial.ReqGetChessFromBuff.MChessDataEntry
|
||||
nil, // 542: tutorial.ReqChessEx.MChessDataEntry
|
||||
nil, // 543: tutorial.ReqSourceChest.MChessDataEntry
|
||||
nil, // 544: tutorial.ReqPlayroomOutline.MChessDataEntry
|
||||
nil, // 545: tutorial.ReqPutChessInBag.MChessDataEntry
|
||||
nil, // 546: tutorial.ReqTakeChessOutBag.MChessDataEntry
|
||||
nil, // 547: tutorial.ResPlayerBriefProfileData.SetEmojiEntry
|
||||
nil, // 548: tutorial.UserInfo.SetEmojiEntry
|
||||
nil, // 549: tutorial.ReqRewardOrder.MChessDataEntry
|
||||
nil, // 550: tutorial.ResCardInfo.AllCardEntry
|
||||
nil, // 551: tutorial.ResCardInfo.HandbookEntry
|
||||
nil, // 552: tutorial.ResGuideInfo.RewardEntry
|
||||
nil, // 553: tutorial.ResGuideTask.TaskEntry
|
||||
nil, // 554: tutorial.ResDailyTask.WeekRewardEntry
|
||||
nil, // 555: tutorial.ResDailyTask.DailyTaskEntry
|
||||
nil, // 556: tutorial.ResLimitEvent.LimitEventListEntry
|
||||
nil, // 557: tutorial.ResLimitEventProgress.ProgressRewardEntry
|
||||
nil, // 558: tutorial.LimitEvent.ParamEntry
|
||||
nil, // 559: tutorial.ReqLimitEventLuckyCat.MChessDataEntry
|
||||
nil, // 560: tutorial.ResFriendPlayerSimple.EmojiEntry
|
||||
nil, // 561: tutorial.ResFriendPlayerSimple.PlayroomEntry
|
||||
nil, // 562: tutorial.ResFriendPlayerSimple.DressSetEntry
|
||||
nil, // 563: tutorial.ResFriendPlayerSimple.PhysiologyEntry
|
||||
nil, // 564: tutorial.ResPlayerSimple.EmojiEntry
|
||||
nil, // 565: tutorial.ResPlayerRank.PlayroomSetEntry
|
||||
nil, // 566: tutorial.ResPlayerRank.DressSetEntry
|
||||
nil, // 567: tutorial.ResKv.KvEntry
|
||||
nil, // 568: tutorial.ResRank.RankListEntry
|
||||
nil, // 569: tutorial.ResMailList.MailListEntry
|
||||
nil, // 570: tutorial.ResCharge.SpecialShopEntry
|
||||
nil, // 571: tutorial.ResCharge.ChessShopEntry
|
||||
nil, // 572: tutorial.ResCharge.GiftEntry
|
||||
nil, // 573: tutorial.ResCharge.WeeklyDiscountEntry
|
||||
nil, // 574: tutorial.ReqBuyChessShop2.MChessDataEntry
|
||||
nil, // 575: tutorial.ResEndless.EndlessListEntry
|
||||
nil, // 576: tutorial.ResChampshipRank.RankListEntry
|
||||
nil, // 577: tutorial.ResChampshipPreRank.RankListEntry
|
||||
nil, // 578: tutorial.ResNotifyCard.CardEntry
|
||||
nil, // 579: tutorial.ResNotifyCard.MasterEntry
|
||||
nil, // 580: tutorial.ResNotifyCard.HandbookEntry
|
||||
nil, // 581: tutorial.ResMining.MapEntry
|
||||
nil, // 582: tutorial.ResMining.PassRewardEntry
|
||||
nil, // 583: tutorial.ReqMiningTake.MapEntry
|
||||
nil, // 584: tutorial.ResActRed.RedEntry
|
||||
nil, // 585: tutorial.ResItem.ItemEntry
|
||||
nil, // 586: tutorial.ItemNotify.ItemEntry
|
||||
nil, // 587: tutorial.ResGuessColor.OMapEntry
|
||||
nil, // 588: tutorial.ReqGuessColorTake.OMapEntry
|
||||
nil, // 589: tutorial.GuessColorInfo.MapEntry
|
||||
nil, // 590: tutorial.ResPlayroom.PlayroomEntry
|
||||
nil, // 591: tutorial.ResPlayroom.MoodEntry
|
||||
nil, // 592: tutorial.ResPlayroom.PhysiologyEntry
|
||||
nil, // 593: tutorial.ResPlayroom.DressEntry
|
||||
nil, // 594: tutorial.ResPlayroom.DressSetEntry
|
||||
nil, // 595: tutorial.ResPlayroom.WeeklyDiscountEntry
|
||||
nil, // 596: tutorial.ReqPlayroomDressSet.DressSetEntry
|
||||
nil, // 597: tutorial.NotifyPlayroomMood.MoodEntry
|
||||
nil, // 598: tutorial.NotifyPlayroomMood.PhysiologyEntry
|
||||
nil, // 599: tutorial.ResPlayroomInfo.PlayroomEntry
|
||||
nil, // 600: tutorial.ResPlayroomInfo.ItemsEntry
|
||||
nil, // 601: tutorial.ResPlayroomInfo.FlipEntry
|
||||
nil, // 602: tutorial.ResPlayroomInfo.EmojiEntry
|
||||
nil, // 603: tutorial.ResPlayroomInfo.DressSetEntry
|
||||
nil, // 604: tutorial.ResPlayroomGame.ItemsEntry
|
||||
nil, // 605: tutorial.ReqPlayroomSetRoom.PlayroomEntry
|
||||
nil, // 606: tutorial.MiningCfg.GemEntry
|
||||
nil, // 607: tutorial.MiningCfg.JackpotEntry
|
||||
nil, // 608: tutorial.MiningCfg.PassEntry
|
||||
nil, // 609: tutorial.ResUserDetailInfo.ChessMapEntry
|
||||
nil, // 610: tutorial.ResUserDetailInfo.ChessBufferEntry
|
||||
(*ReqMiniGame)(nil), // 534: tutorial.ReqMiniGame
|
||||
(*ResMiniGame)(nil), // 535: tutorial.ResMiniGame
|
||||
nil, // 536: tutorial.ResChessColorData.MChessColorDataEntry
|
||||
nil, // 537: tutorial.UpdateBaseItemInfo.MUpdateItemEntry
|
||||
nil, // 538: tutorial.ResPlayerChessData.MChessDataEntry
|
||||
nil, // 539: tutorial.ReqPutPartInBag.MChessDataEntry
|
||||
nil, // 540: tutorial.UpdatePlayerChessData.MChessDataEntry
|
||||
nil, // 541: tutorial.ReqSeparateChess.MChessDataEntry
|
||||
nil, // 542: tutorial.ReqUpgradeChess.MChessDataEntry
|
||||
nil, // 543: tutorial.ReqGetChessFromBuff.MChessDataEntry
|
||||
nil, // 544: tutorial.ReqChessEx.MChessDataEntry
|
||||
nil, // 545: tutorial.ReqSourceChest.MChessDataEntry
|
||||
nil, // 546: tutorial.ReqPlayroomOutline.MChessDataEntry
|
||||
nil, // 547: tutorial.ReqPutChessInBag.MChessDataEntry
|
||||
nil, // 548: tutorial.ReqTakeChessOutBag.MChessDataEntry
|
||||
nil, // 549: tutorial.ResPlayerBriefProfileData.SetEmojiEntry
|
||||
nil, // 550: tutorial.UserInfo.SetEmojiEntry
|
||||
nil, // 551: tutorial.ReqRewardOrder.MChessDataEntry
|
||||
nil, // 552: tutorial.ResCardInfo.AllCardEntry
|
||||
nil, // 553: tutorial.ResCardInfo.HandbookEntry
|
||||
nil, // 554: tutorial.ResGuideInfo.RewardEntry
|
||||
nil, // 555: tutorial.ResGuideTask.TaskEntry
|
||||
nil, // 556: tutorial.ResDailyTask.WeekRewardEntry
|
||||
nil, // 557: tutorial.ResDailyTask.DailyTaskEntry
|
||||
nil, // 558: tutorial.ResLimitEvent.LimitEventListEntry
|
||||
nil, // 559: tutorial.ResLimitEventProgress.ProgressRewardEntry
|
||||
nil, // 560: tutorial.LimitEvent.ParamEntry
|
||||
nil, // 561: tutorial.ReqLimitEventLuckyCat.MChessDataEntry
|
||||
nil, // 562: tutorial.ResFriendPlayerSimple.EmojiEntry
|
||||
nil, // 563: tutorial.ResFriendPlayerSimple.PlayroomEntry
|
||||
nil, // 564: tutorial.ResFriendPlayerSimple.DressSetEntry
|
||||
nil, // 565: tutorial.ResFriendPlayerSimple.PhysiologyEntry
|
||||
nil, // 566: tutorial.ResPlayerSimple.EmojiEntry
|
||||
nil, // 567: tutorial.ResPlayerRank.PlayroomSetEntry
|
||||
nil, // 568: tutorial.ResPlayerRank.DressSetEntry
|
||||
nil, // 569: tutorial.ResKv.KvEntry
|
||||
nil, // 570: tutorial.ResRank.RankListEntry
|
||||
nil, // 571: tutorial.ResMailList.MailListEntry
|
||||
nil, // 572: tutorial.ResCharge.SpecialShopEntry
|
||||
nil, // 573: tutorial.ResCharge.ChessShopEntry
|
||||
nil, // 574: tutorial.ResCharge.GiftEntry
|
||||
nil, // 575: tutorial.ResCharge.WeeklyDiscountEntry
|
||||
nil, // 576: tutorial.ReqBuyChessShop2.MChessDataEntry
|
||||
nil, // 577: tutorial.ResEndless.EndlessListEntry
|
||||
nil, // 578: tutorial.ResChampshipRank.RankListEntry
|
||||
nil, // 579: tutorial.ResChampshipPreRank.RankListEntry
|
||||
nil, // 580: tutorial.ResNotifyCard.CardEntry
|
||||
nil, // 581: tutorial.ResNotifyCard.MasterEntry
|
||||
nil, // 582: tutorial.ResNotifyCard.HandbookEntry
|
||||
nil, // 583: tutorial.ResMining.MapEntry
|
||||
nil, // 584: tutorial.ResMining.PassRewardEntry
|
||||
nil, // 585: tutorial.ReqMiningTake.MapEntry
|
||||
nil, // 586: tutorial.ResActRed.RedEntry
|
||||
nil, // 587: tutorial.ResItem.ItemEntry
|
||||
nil, // 588: tutorial.ItemNotify.ItemEntry
|
||||
nil, // 589: tutorial.ResGuessColor.OMapEntry
|
||||
nil, // 590: tutorial.ReqGuessColorTake.OMapEntry
|
||||
nil, // 591: tutorial.GuessColorInfo.MapEntry
|
||||
nil, // 592: tutorial.ResPlayroom.PlayroomEntry
|
||||
nil, // 593: tutorial.ResPlayroom.MoodEntry
|
||||
nil, // 594: tutorial.ResPlayroom.PhysiologyEntry
|
||||
nil, // 595: tutorial.ResPlayroom.DressEntry
|
||||
nil, // 596: tutorial.ResPlayroom.DressSetEntry
|
||||
nil, // 597: tutorial.ResPlayroom.WeeklyDiscountEntry
|
||||
nil, // 598: tutorial.ReqPlayroomDressSet.DressSetEntry
|
||||
nil, // 599: tutorial.NotifyPlayroomMood.MoodEntry
|
||||
nil, // 600: tutorial.NotifyPlayroomMood.PhysiologyEntry
|
||||
nil, // 601: tutorial.ResPlayroomInfo.PlayroomEntry
|
||||
nil, // 602: tutorial.ResPlayroomInfo.ItemsEntry
|
||||
nil, // 603: tutorial.ResPlayroomInfo.FlipEntry
|
||||
nil, // 604: tutorial.ResPlayroomInfo.EmojiEntry
|
||||
nil, // 605: tutorial.ResPlayroomInfo.DressSetEntry
|
||||
nil, // 606: tutorial.ResPlayroomGame.ItemsEntry
|
||||
nil, // 607: tutorial.ReqPlayroomSetRoom.PlayroomEntry
|
||||
nil, // 608: tutorial.MiningCfg.GemEntry
|
||||
nil, // 609: tutorial.MiningCfg.JackpotEntry
|
||||
nil, // 610: tutorial.MiningCfg.PassEntry
|
||||
nil, // 611: tutorial.ResUserDetailInfo.ChessMapEntry
|
||||
nil, // 612: tutorial.ResUserDetailInfo.ChessBufferEntry
|
||||
}
|
||||
var file_proto_Gameapi_proto_depIdxs = []int32{
|
||||
534, // 0: tutorial.ResChessColorData.mChessColorData:type_name -> tutorial.ResChessColorData.MChessColorDataEntry
|
||||
536, // 0: tutorial.ResChessColorData.mChessColorData:type_name -> tutorial.ResChessColorData.MChessColorDataEntry
|
||||
5, // 1: tutorial.ReqLogin.type:type_name -> tutorial.LOGIN_TYPE
|
||||
2, // 2: tutorial.ResId2Verify.ResultCode:type_name -> tutorial.RES_CODE
|
||||
535, // 3: tutorial.UpdateBaseItemInfo.mUpdateItem:type_name -> tutorial.UpdateBaseItemInfo.MUpdateItemEntry
|
||||
536, // 4: tutorial.ResPlayerChessData.mChessData:type_name -> tutorial.ResPlayerChessData.MChessDataEntry
|
||||
537, // 3: tutorial.UpdateBaseItemInfo.mUpdateItem:type_name -> tutorial.UpdateBaseItemInfo.MUpdateItemEntry
|
||||
538, // 4: tutorial.ResPlayerChessData.mChessData:type_name -> tutorial.ResPlayerChessData.MChessDataEntry
|
||||
74, // 5: tutorial.ResPlayerChessInfo.ChessBag:type_name -> tutorial.ChessBag
|
||||
55, // 6: tutorial.ResPlayerChessInfo.PartBag:type_name -> tutorial.PartBag
|
||||
2, // 7: tutorial.ResGetChessRetireReward.code:type_name -> tutorial.RES_CODE
|
||||
56, // 8: tutorial.PartBag.PartBagGrids:type_name -> tutorial.PartBagGrid
|
||||
537, // 9: tutorial.ReqPutPartInBag.mChessData:type_name -> tutorial.ReqPutPartInBag.MChessDataEntry
|
||||
539, // 9: tutorial.ReqPutPartInBag.mChessData:type_name -> tutorial.ReqPutPartInBag.MChessDataEntry
|
||||
2, // 10: tutorial.ResPutPartInBag.code:type_name -> tutorial.RES_CODE
|
||||
1, // 11: tutorial.ChessHandle.type:type_name -> tutorial.HANDLE_TYPE
|
||||
538, // 12: tutorial.UpdatePlayerChessData.mChessData:type_name -> tutorial.UpdatePlayerChessData.MChessDataEntry
|
||||
540, // 12: tutorial.UpdatePlayerChessData.mChessData:type_name -> tutorial.UpdatePlayerChessData.MChessDataEntry
|
||||
59, // 13: tutorial.UpdatePlayerChessData.mChessHandle:type_name -> tutorial.ChessHandle
|
||||
2, // 14: tutorial.ResUpdatePlayerChessData.code:type_name -> tutorial.RES_CODE
|
||||
539, // 15: tutorial.ReqSeparateChess.mChessData:type_name -> tutorial.ReqSeparateChess.MChessDataEntry
|
||||
541, // 15: tutorial.ReqSeparateChess.mChessData:type_name -> tutorial.ReqSeparateChess.MChessDataEntry
|
||||
2, // 16: tutorial.ResSeparateChess.code:type_name -> tutorial.RES_CODE
|
||||
540, // 17: tutorial.ReqUpgradeChess.mChessData:type_name -> tutorial.ReqUpgradeChess.MChessDataEntry
|
||||
542, // 17: tutorial.ReqUpgradeChess.mChessData:type_name -> tutorial.ReqUpgradeChess.MChessDataEntry
|
||||
2, // 18: tutorial.ResUpgradeChess.code:type_name -> tutorial.RES_CODE
|
||||
541, // 19: tutorial.ReqGetChessFromBuff.mChessData:type_name -> tutorial.ReqGetChessFromBuff.MChessDataEntry
|
||||
543, // 19: tutorial.ReqGetChessFromBuff.mChessData:type_name -> tutorial.ReqGetChessFromBuff.MChessDataEntry
|
||||
2, // 20: tutorial.ResGetChessFromBuff.code:type_name -> tutorial.RES_CODE
|
||||
7, // 21: tutorial.ReqChessEx.Type:type_name -> tutorial.CHESS_EX_TYPE
|
||||
542, // 22: tutorial.ReqChessEx.mChessData:type_name -> tutorial.ReqChessEx.MChessDataEntry
|
||||
544, // 22: tutorial.ReqChessEx.mChessData:type_name -> tutorial.ReqChessEx.MChessDataEntry
|
||||
2, // 23: tutorial.ResChessEx.code:type_name -> tutorial.RES_CODE
|
||||
543, // 24: tutorial.ReqSourceChest.mChessData:type_name -> tutorial.ReqSourceChest.MChessDataEntry
|
||||
545, // 24: tutorial.ReqSourceChest.mChessData:type_name -> tutorial.ReqSourceChest.MChessDataEntry
|
||||
2, // 25: tutorial.ResSourceChest.code:type_name -> tutorial.RES_CODE
|
||||
544, // 26: tutorial.ReqPlayroomOutline.mChessData:type_name -> tutorial.ReqPlayroomOutline.MChessDataEntry
|
||||
546, // 26: tutorial.ReqPlayroomOutline.mChessData:type_name -> tutorial.ReqPlayroomOutline.MChessDataEntry
|
||||
2, // 27: tutorial.ResPlayroomOutline.code:type_name -> tutorial.RES_CODE
|
||||
75, // 28: tutorial.ChessBag.ChessBagGrids:type_name -> tutorial.ChessBagGrid
|
||||
545, // 29: tutorial.ReqPutChessInBag.mChessData:type_name -> tutorial.ReqPutChessInBag.MChessDataEntry
|
||||
547, // 29: tutorial.ReqPutChessInBag.mChessData:type_name -> tutorial.ReqPutChessInBag.MChessDataEntry
|
||||
2, // 30: tutorial.ResPutChessInBag.code:type_name -> tutorial.RES_CODE
|
||||
546, // 31: tutorial.ReqTakeChessOutBag.mChessData:type_name -> tutorial.ReqTakeChessOutBag.MChessDataEntry
|
||||
548, // 31: tutorial.ReqTakeChessOutBag.mChessData:type_name -> tutorial.ReqTakeChessOutBag.MChessDataEntry
|
||||
2, // 32: tutorial.ResTakeChessOutBag.code:type_name -> tutorial.RES_CODE
|
||||
2, // 33: tutorial.ResTakeChessOutBagToHonor.code:type_name -> tutorial.RES_CODE
|
||||
2, // 34: tutorial.ResBuyChessBagGrid.code:type_name -> tutorial.RES_CODE
|
||||
547, // 35: tutorial.ResPlayerBriefProfileData.SetEmoji:type_name -> tutorial.ResPlayerBriefProfileData.SetEmojiEntry
|
||||
549, // 35: tutorial.ResPlayerBriefProfileData.SetEmoji:type_name -> tutorial.ResPlayerBriefProfileData.SetEmojiEntry
|
||||
2, // 36: tutorial.ResSetEnergyMul.ResultCode:type_name -> tutorial.RES_CODE
|
||||
8, // 37: tutorial.ReqLang.Lang:type_name -> tutorial.LANG_TYPE
|
||||
2, // 38: tutorial.ResLang.ResultCode:type_name -> tutorial.RES_CODE
|
||||
@ -33984,7 +34106,7 @@ var file_proto_Gameapi_proto_depIdxs = []int32{
|
||||
195, // 40: tutorial.UserInfo.AvatarList:type_name -> tutorial.AvatarInfo
|
||||
191, // 41: tutorial.UserInfo.FaceList:type_name -> tutorial.FaceInfo
|
||||
198, // 42: tutorial.UserInfo.EmojiList:type_name -> tutorial.EmojiInfo
|
||||
548, // 43: tutorial.UserInfo.SetEmoji:type_name -> tutorial.UserInfo.SetEmojiEntry
|
||||
550, // 43: tutorial.UserInfo.SetEmoji:type_name -> tutorial.UserInfo.SetEmojiEntry
|
||||
2, // 44: tutorial.ResSetName.ResultCode:type_name -> tutorial.RES_CODE
|
||||
2, // 45: tutorial.ResSetPetName.ResultCode:type_name -> tutorial.RES_CODE
|
||||
2, // 46: tutorial.ResBuyEnergy.Code:type_name -> tutorial.RES_CODE
|
||||
@ -33992,7 +34114,7 @@ var file_proto_Gameapi_proto_depIdxs = []int32{
|
||||
2, // 48: tutorial.ResGetHandbookReward.Code:type_name -> tutorial.RES_CODE
|
||||
105, // 49: tutorial.Handbook.Handbooks:type_name -> tutorial.HandbookInfo
|
||||
2, // 50: tutorial.ResHandbookAllReward.Code:type_name -> tutorial.RES_CODE
|
||||
549, // 51: tutorial.ReqRewardOrder.mChessData:type_name -> tutorial.ReqRewardOrder.MChessDataEntry
|
||||
551, // 51: tutorial.ReqRewardOrder.mChessData:type_name -> tutorial.ReqRewardOrder.MChessDataEntry
|
||||
2, // 52: tutorial.ResRewardOrder.Code:type_name -> tutorial.RES_CODE
|
||||
2, // 53: tutorial.ResDelOrder.Code:type_name -> tutorial.RES_CODE
|
||||
171, // 54: tutorial.Order.Items:type_name -> tutorial.ItemInfo
|
||||
@ -34003,8 +34125,8 @@ var file_proto_Gameapi_proto_depIdxs = []int32{
|
||||
2, // 59: tutorial.ResDecorateAll.Code:type_name -> tutorial.RES_CODE
|
||||
2, // 60: tutorial.ResAreaReward.Code:type_name -> tutorial.RES_CODE
|
||||
127, // 61: tutorial.ResCardInfo.CardList:type_name -> tutorial.Card
|
||||
550, // 62: tutorial.ResCardInfo.AllCard:type_name -> tutorial.ResCardInfo.AllCardEntry
|
||||
551, // 63: tutorial.ResCardInfo.Handbook:type_name -> tutorial.ResCardInfo.HandbookEntry
|
||||
552, // 62: tutorial.ResCardInfo.AllCard:type_name -> tutorial.ResCardInfo.AllCardEntry
|
||||
553, // 63: tutorial.ResCardInfo.Handbook:type_name -> tutorial.ResCardInfo.HandbookEntry
|
||||
2, // 64: tutorial.ResCardSeasonFirstReward.Code:type_name -> tutorial.RES_CODE
|
||||
2, // 65: tutorial.ResCardHandbookReward.Code:type_name -> tutorial.RES_CODE
|
||||
2, // 66: tutorial.ResMasterCard.Code:type_name -> tutorial.RES_CODE
|
||||
@ -34023,16 +34145,16 @@ var file_proto_Gameapi_proto_depIdxs = []int32{
|
||||
2, // 79: tutorial.ResGetFriendCard.Code:type_name -> tutorial.RES_CODE
|
||||
2, // 80: tutorial.ResGuideReward.Code:type_name -> tutorial.RES_CODE
|
||||
2, // 81: tutorial.ResGuidePlayroom.Code:type_name -> tutorial.RES_CODE
|
||||
552, // 82: tutorial.ResGuideInfo.Reward:type_name -> tutorial.ResGuideInfo.RewardEntry
|
||||
554, // 82: tutorial.ResGuideInfo.Reward:type_name -> tutorial.ResGuideInfo.RewardEntry
|
||||
171, // 83: tutorial.ResItemPop.Items:type_name -> tutorial.ItemInfo
|
||||
173, // 84: tutorial.ResItemPop.CardPacks:type_name -> tutorial.CardPack
|
||||
171, // 85: tutorial.ItemList.List:type_name -> tutorial.ItemInfo
|
||||
553, // 86: tutorial.ResGuideTask.Task:type_name -> tutorial.ResGuideTask.TaskEntry
|
||||
555, // 86: tutorial.ResGuideTask.Task:type_name -> tutorial.ResGuideTask.TaskEntry
|
||||
183, // 87: tutorial.GuideTask.Progress:type_name -> tutorial.QuestProgress
|
||||
2, // 88: tutorial.ResGetGuideTaskReward.Code:type_name -> tutorial.RES_CODE
|
||||
2, // 89: tutorial.ResGetGuideActiveReward.Code:type_name -> tutorial.RES_CODE
|
||||
554, // 90: tutorial.ResDailyTask.WeekReward:type_name -> tutorial.ResDailyTask.WeekRewardEntry
|
||||
555, // 91: tutorial.ResDailyTask.DailyTask:type_name -> tutorial.ResDailyTask.DailyTaskEntry
|
||||
556, // 90: tutorial.ResDailyTask.WeekReward:type_name -> tutorial.ResDailyTask.WeekRewardEntry
|
||||
557, // 91: tutorial.ResDailyTask.DailyTask:type_name -> tutorial.ResDailyTask.DailyTaskEntry
|
||||
171, // 92: tutorial.DailyWeek.Items:type_name -> tutorial.ItemInfo
|
||||
183, // 93: tutorial.DailyTask.Progress:type_name -> tutorial.QuestProgress
|
||||
171, // 94: tutorial.DailyTask.Items:type_name -> tutorial.ItemInfo
|
||||
@ -34054,33 +34176,33 @@ var file_proto_Gameapi_proto_depIdxs = []int32{
|
||||
208, // 110: tutorial.ResActivity.ActiveList:type_name -> tutorial.ActivityInfo
|
||||
2, // 111: tutorial.ResActivityReward.Code:type_name -> tutorial.RES_CODE
|
||||
2, // 112: tutorial.ResAddGiftReward.Code:type_name -> tutorial.RES_CODE
|
||||
556, // 113: tutorial.ResLimitEvent.LimitEventList:type_name -> tutorial.ResLimitEvent.LimitEventListEntry
|
||||
557, // 114: tutorial.ResLimitEventProgress.ProgressReward:type_name -> tutorial.ResLimitEventProgress.ProgressRewardEntry
|
||||
558, // 113: tutorial.ResLimitEvent.LimitEventList:type_name -> tutorial.ResLimitEvent.LimitEventListEntry
|
||||
559, // 114: tutorial.ResLimitEventProgress.ProgressReward:type_name -> tutorial.ResLimitEventProgress.ProgressRewardEntry
|
||||
2, // 115: tutorial.ResLimitEventReward.Code:type_name -> tutorial.RES_CODE
|
||||
2, // 116: tutorial.ResSelectLimitEvent.Code:type_name -> tutorial.RES_CODE
|
||||
558, // 117: tutorial.LimitEvent.Param:type_name -> tutorial.LimitEvent.ParamEntry
|
||||
559, // 118: tutorial.ReqLimitEventLuckyCat.mChessData:type_name -> tutorial.ReqLimitEventLuckyCat.MChessDataEntry
|
||||
560, // 117: tutorial.LimitEvent.Param:type_name -> tutorial.LimitEvent.ParamEntry
|
||||
561, // 118: tutorial.ReqLimitEventLuckyCat.mChessData:type_name -> tutorial.ReqLimitEventLuckyCat.MChessDataEntry
|
||||
2, // 119: tutorial.ResLimitEventLuckyCat.Code:type_name -> tutorial.RES_CODE
|
||||
2, // 120: tutorial.ResLimitSenceReward.Code:type_name -> tutorial.RES_CODE
|
||||
171, // 121: tutorial.ResChessRainReward.Items:type_name -> tutorial.ItemInfo
|
||||
2, // 122: tutorial.ResFastProduceReward.Code:type_name -> tutorial.RES_CODE
|
||||
2, // 123: tutorial.ResCatTrickReward.Code:type_name -> tutorial.RES_CODE
|
||||
237, // 124: tutorial.ResSearchPlayer.List:type_name -> tutorial.ResPlayerSimple
|
||||
560, // 125: tutorial.ResFriendPlayerSimple.Emoji:type_name -> tutorial.ResFriendPlayerSimple.EmojiEntry
|
||||
561, // 126: tutorial.ResFriendPlayerSimple.Playroom:type_name -> tutorial.ResFriendPlayerSimple.PlayroomEntry
|
||||
562, // 127: tutorial.ResFriendPlayerSimple.DressSet:type_name -> tutorial.ResFriendPlayerSimple.DressSetEntry
|
||||
562, // 125: tutorial.ResFriendPlayerSimple.Emoji:type_name -> tutorial.ResFriendPlayerSimple.EmojiEntry
|
||||
563, // 126: tutorial.ResFriendPlayerSimple.Playroom:type_name -> tutorial.ResFriendPlayerSimple.PlayroomEntry
|
||||
564, // 127: tutorial.ResFriendPlayerSimple.DressSet:type_name -> tutorial.ResFriendPlayerSimple.DressSetEntry
|
||||
238, // 128: tutorial.ResFriendPlayerSimple.Last:type_name -> tutorial.ActLog
|
||||
563, // 129: tutorial.ResFriendPlayerSimple.Physiology:type_name -> tutorial.ResFriendPlayerSimple.PhysiologyEntry
|
||||
564, // 130: tutorial.ResPlayerSimple.Emoji:type_name -> tutorial.ResPlayerSimple.EmojiEntry
|
||||
565, // 131: tutorial.ResPlayerRank.PlayroomSet:type_name -> tutorial.ResPlayerRank.PlayroomSetEntry
|
||||
566, // 132: tutorial.ResPlayerRank.DressSet:type_name -> tutorial.ResPlayerRank.DressSetEntry
|
||||
565, // 129: tutorial.ResFriendPlayerSimple.Physiology:type_name -> tutorial.ResFriendPlayerSimple.PhysiologyEntry
|
||||
566, // 130: tutorial.ResPlayerSimple.Emoji:type_name -> tutorial.ResPlayerSimple.EmojiEntry
|
||||
567, // 131: tutorial.ResPlayerRank.PlayroomSet:type_name -> tutorial.ResPlayerRank.PlayroomSetEntry
|
||||
568, // 132: tutorial.ResPlayerRank.DressSet:type_name -> tutorial.ResPlayerRank.DressSetEntry
|
||||
238, // 133: tutorial.ResPlayerRank.Last:type_name -> tutorial.ActLog
|
||||
237, // 134: tutorial.ResFriendLog.Player:type_name -> tutorial.ResPlayerSimple
|
||||
240, // 135: tutorial.NotifyFriendLog.info:type_name -> tutorial.ResFriendLog
|
||||
242, // 136: tutorial.NotifyFriendLog.Bubble:type_name -> tutorial.FriendBubbleInfo
|
||||
171, // 137: tutorial.FriendBubbleInfo.Items:type_name -> tutorial.ItemInfo
|
||||
244, // 138: tutorial.NotifyFriendCard.Info:type_name -> tutorial.ResFriendCard
|
||||
567, // 139: tutorial.ResKv.kv:type_name -> tutorial.ResKv.KvEntry
|
||||
569, // 139: tutorial.ResKv.kv:type_name -> tutorial.ResKv.KvEntry
|
||||
2, // 140: tutorial.ResFriendByCode.Code:type_name -> tutorial.RES_CODE
|
||||
237, // 141: tutorial.ResFriendByCode.Player:type_name -> tutorial.ResPlayerSimple
|
||||
237, // 142: tutorial.ResFriendRecommend.List:type_name -> tutorial.ResPlayerSimple
|
||||
@ -34109,27 +34231,27 @@ var file_proto_Gameapi_proto_depIdxs = []int32{
|
||||
237, // 165: tutorial.ResAgreeFriend.Player:type_name -> tutorial.ResPlayerSimple
|
||||
2, // 166: tutorial.ResRefuseFriend.Code:type_name -> tutorial.RES_CODE
|
||||
2, // 167: tutorial.ResDelFriend.Code:type_name -> tutorial.RES_CODE
|
||||
568, // 168: tutorial.ResRank.RankList:type_name -> tutorial.ResRank.RankListEntry
|
||||
569, // 169: tutorial.ResMailList.MailList:type_name -> tutorial.ResMailList.MailListEntry
|
||||
570, // 168: tutorial.ResRank.RankList:type_name -> tutorial.ResRank.RankListEntry
|
||||
571, // 169: tutorial.ResMailList.MailList:type_name -> tutorial.ResMailList.MailListEntry
|
||||
171, // 170: tutorial.MailInfo.Items:type_name -> tutorial.ItemInfo
|
||||
293, // 171: tutorial.MailNotify.Info:type_name -> tutorial.MailInfo
|
||||
2, // 172: tutorial.ResReadMail.Code:type_name -> tutorial.RES_CODE
|
||||
2, // 173: tutorial.ResGetMailReward.Code:type_name -> tutorial.RES_CODE
|
||||
2, // 174: tutorial.ResDeleteMail.Code:type_name -> tutorial.RES_CODE
|
||||
570, // 175: tutorial.ResCharge.SpecialShop:type_name -> tutorial.ResCharge.SpecialShopEntry
|
||||
571, // 176: tutorial.ResCharge.ChessShop:type_name -> tutorial.ResCharge.ChessShopEntry
|
||||
572, // 177: tutorial.ResCharge.Gift:type_name -> tutorial.ResCharge.GiftEntry
|
||||
572, // 175: tutorial.ResCharge.SpecialShop:type_name -> tutorial.ResCharge.SpecialShopEntry
|
||||
573, // 176: tutorial.ResCharge.ChessShop:type_name -> tutorial.ResCharge.ChessShopEntry
|
||||
574, // 177: tutorial.ResCharge.Gift:type_name -> tutorial.ResCharge.GiftEntry
|
||||
304, // 178: tutorial.ResCharge.Wish:type_name -> tutorial.WishList
|
||||
573, // 179: tutorial.ResCharge.WeeklyDiscount:type_name -> tutorial.ResCharge.WeeklyDiscountEntry
|
||||
575, // 179: tutorial.ResCharge.WeeklyDiscount:type_name -> tutorial.ResCharge.WeeklyDiscountEntry
|
||||
2, // 180: tutorial.ResAddWish.Code:type_name -> tutorial.RES_CODE
|
||||
2, // 181: tutorial.ResGetWish.Code:type_name -> tutorial.RES_CODE
|
||||
2, // 182: tutorial.ResSendWishBeg.Code:type_name -> tutorial.RES_CODE
|
||||
2, // 183: tutorial.ResFreeShop.Code:type_name -> tutorial.RES_CODE
|
||||
2, // 184: tutorial.ResBuyChessShop.Code:type_name -> tutorial.RES_CODE
|
||||
574, // 185: tutorial.ReqBuyChessShop2.mChessData:type_name -> tutorial.ReqBuyChessShop2.MChessDataEntry
|
||||
576, // 185: tutorial.ReqBuyChessShop2.mChessData:type_name -> tutorial.ReqBuyChessShop2.MChessDataEntry
|
||||
2, // 186: tutorial.ResBuyChessShop2.Code:type_name -> tutorial.RES_CODE
|
||||
2, // 187: tutorial.ResRefreshChessShop.Code:type_name -> tutorial.RES_CODE
|
||||
575, // 188: tutorial.ResEndless.EndlessList:type_name -> tutorial.ResEndless.EndlessListEntry
|
||||
577, // 188: tutorial.ResEndless.EndlessList:type_name -> tutorial.ResEndless.EndlessListEntry
|
||||
171, // 189: tutorial.ResEndlessInfo.Items:type_name -> tutorial.ItemInfo
|
||||
2, // 190: tutorial.ResEndlessReward.Code:type_name -> tutorial.RES_CODE
|
||||
2, // 191: tutorial.ResPiggyBankReward.Code:type_name -> tutorial.RES_CODE
|
||||
@ -34142,12 +34264,12 @@ var file_proto_Gameapi_proto_depIdxs = []int32{
|
||||
171, // 198: tutorial.ChampionshipCfgRank.Items:type_name -> tutorial.ItemInfo
|
||||
2, // 199: tutorial.ResChampshipReward.Code:type_name -> tutorial.RES_CODE
|
||||
2, // 200: tutorial.ResChampshipRankReward.Code:type_name -> tutorial.RES_CODE
|
||||
576, // 201: tutorial.ResChampshipRank.RankList:type_name -> tutorial.ResChampshipRank.RankListEntry
|
||||
577, // 202: tutorial.ResChampshipPreRank.RankList:type_name -> tutorial.ResChampshipPreRank.RankListEntry
|
||||
578, // 201: tutorial.ResChampshipRank.RankList:type_name -> tutorial.ResChampshipRank.RankListEntry
|
||||
579, // 202: tutorial.ResChampshipPreRank.RankList:type_name -> tutorial.ResChampshipPreRank.RankListEntry
|
||||
337, // 203: tutorial.ResChampshipPreRank.Cfg:type_name -> tutorial.ChampionshipCfg
|
||||
578, // 204: tutorial.ResNotifyCard.Card:type_name -> tutorial.ResNotifyCard.CardEntry
|
||||
579, // 205: tutorial.ResNotifyCard.Master:type_name -> tutorial.ResNotifyCard.MasterEntry
|
||||
580, // 206: tutorial.ResNotifyCard.Handbook:type_name -> tutorial.ResNotifyCard.HandbookEntry
|
||||
580, // 204: tutorial.ResNotifyCard.Card:type_name -> tutorial.ResNotifyCard.CardEntry
|
||||
581, // 205: tutorial.ResNotifyCard.Master:type_name -> tutorial.ResNotifyCard.MasterEntry
|
||||
582, // 206: tutorial.ResNotifyCard.Handbook:type_name -> tutorial.ResNotifyCard.HandbookEntry
|
||||
2, // 207: tutorial.ResSetFacebookUrl.Code:type_name -> tutorial.RES_CODE
|
||||
364, // 208: tutorial.CatReturnGiftCfg.RewardList:type_name -> tutorial.CatReturnGiftCfgReward
|
||||
171, // 209: tutorial.CatReturnGiftCfgReward.Reward:type_name -> tutorial.ItemInfo
|
||||
@ -34155,22 +34277,22 @@ var file_proto_Gameapi_proto_depIdxs = []int32{
|
||||
2, // 211: tutorial.ResCatReturnGiftScore.Code:type_name -> tutorial.RES_CODE
|
||||
2, // 212: tutorial.ResCatReturnGiftReward.Code:type_name -> tutorial.RES_CODE
|
||||
2, // 213: tutorial.ResCatReturnGiftRewardGift.Code:type_name -> tutorial.RES_CODE
|
||||
581, // 214: tutorial.ResMining.Map:type_name -> tutorial.ResMining.MapEntry
|
||||
582, // 215: tutorial.ResMining.PassReward:type_name -> tutorial.ResMining.PassRewardEntry
|
||||
583, // 216: tutorial.ReqMiningTake.Map:type_name -> tutorial.ReqMiningTake.MapEntry
|
||||
583, // 214: tutorial.ResMining.Map:type_name -> tutorial.ResMining.MapEntry
|
||||
584, // 215: tutorial.ResMining.PassReward:type_name -> tutorial.ResMining.PassRewardEntry
|
||||
585, // 216: tutorial.ReqMiningTake.Map:type_name -> tutorial.ReqMiningTake.MapEntry
|
||||
2, // 217: tutorial.ResMiningTake.Code:type_name -> tutorial.RES_CODE
|
||||
2, // 218: tutorial.ResMiningReward.Code:type_name -> tutorial.RES_CODE
|
||||
2, // 219: tutorial.ResActPassReward.Code:type_name -> tutorial.RES_CODE
|
||||
584, // 220: tutorial.ResActRed.Red:type_name -> tutorial.ResActRed.RedEntry
|
||||
586, // 220: tutorial.ResActRed.Red:type_name -> tutorial.ResActRed.RedEntry
|
||||
208, // 221: tutorial.ActivityNotify.Info:type_name -> tutorial.ActivityInfo
|
||||
585, // 222: tutorial.ResItem.Item:type_name -> tutorial.ResItem.ItemEntry
|
||||
586, // 223: tutorial.ItemNotify.Item:type_name -> tutorial.ItemNotify.ItemEntry
|
||||
587, // 222: tutorial.ResItem.Item:type_name -> tutorial.ResItem.ItemEntry
|
||||
588, // 223: tutorial.ItemNotify.Item:type_name -> tutorial.ItemNotify.ItemEntry
|
||||
391, // 224: tutorial.ResGuessColor.MapList:type_name -> tutorial.GuessColorInfo
|
||||
587, // 225: tutorial.ResGuessColor.OMap:type_name -> tutorial.ResGuessColor.OMapEntry
|
||||
589, // 225: tutorial.ResGuessColor.OMap:type_name -> tutorial.ResGuessColor.OMapEntry
|
||||
389, // 226: tutorial.ResGuessColor.Opponent:type_name -> tutorial.opponent
|
||||
391, // 227: tutorial.ReqGuessColorTake.Map:type_name -> tutorial.GuessColorInfo
|
||||
588, // 228: tutorial.ReqGuessColorTake.OMap:type_name -> tutorial.ReqGuessColorTake.OMapEntry
|
||||
589, // 229: tutorial.GuessColorInfo.Map:type_name -> tutorial.GuessColorInfo.MapEntry
|
||||
590, // 228: tutorial.ReqGuessColorTake.OMap:type_name -> tutorial.ReqGuessColorTake.OMapEntry
|
||||
591, // 229: tutorial.GuessColorInfo.Map:type_name -> tutorial.GuessColorInfo.MapEntry
|
||||
2, // 230: tutorial.ResGuessColorTake.Code:type_name -> tutorial.RES_CODE
|
||||
2, // 231: tutorial.ResGuessColorReward.Code:type_name -> tutorial.RES_CODE
|
||||
397, // 232: tutorial.ResRace.Opponent:type_name -> tutorial.raceopponent
|
||||
@ -34181,19 +34303,19 @@ var file_proto_Gameapi_proto_depIdxs = []int32{
|
||||
171, // 237: tutorial.ResPlayroom.Items:type_name -> tutorial.ItemInfo
|
||||
438, // 238: tutorial.ResPlayroom.Opponent:type_name -> tutorial.RoomOpponent
|
||||
437, // 239: tutorial.ResPlayroom.Friend:type_name -> tutorial.FriendRoom
|
||||
590, // 240: tutorial.ResPlayroom.Playroom:type_name -> tutorial.ResPlayroom.PlayroomEntry
|
||||
592, // 240: tutorial.ResPlayroom.Playroom:type_name -> tutorial.ResPlayroom.PlayroomEntry
|
||||
423, // 241: tutorial.ResPlayroom.collect:type_name -> tutorial.PlayroomCollectInfo
|
||||
591, // 242: tutorial.ResPlayroom.Mood:type_name -> tutorial.ResPlayroom.MoodEntry
|
||||
593, // 242: tutorial.ResPlayroom.Mood:type_name -> tutorial.ResPlayroom.MoodEntry
|
||||
171, // 243: tutorial.ResPlayroom.LoseItem:type_name -> tutorial.ItemInfo
|
||||
433, // 244: tutorial.ResPlayroom.Chip:type_name -> tutorial.ChipInfo
|
||||
592, // 245: tutorial.ResPlayroom.Physiology:type_name -> tutorial.ResPlayroom.PhysiologyEntry
|
||||
593, // 246: tutorial.ResPlayroom.Dress:type_name -> tutorial.ResPlayroom.DressEntry
|
||||
594, // 247: tutorial.ResPlayroom.DressSet:type_name -> tutorial.ResPlayroom.DressSetEntry
|
||||
594, // 245: tutorial.ResPlayroom.Physiology:type_name -> tutorial.ResPlayroom.PhysiologyEntry
|
||||
595, // 246: tutorial.ResPlayroom.Dress:type_name -> tutorial.ResPlayroom.DressEntry
|
||||
596, // 247: tutorial.ResPlayroom.DressSet:type_name -> tutorial.ResPlayroom.DressSetEntry
|
||||
422, // 248: tutorial.ResPlayroom.PetAir:type_name -> tutorial.PlayroomAirInfo
|
||||
182, // 249: tutorial.ResPlayroom.DailyTask:type_name -> tutorial.DailyTask
|
||||
435, // 250: tutorial.ResPlayroom.AdItem:type_name -> tutorial.AdItem
|
||||
437, // 251: tutorial.ResPlayroom.Target:type_name -> tutorial.FriendRoom
|
||||
595, // 252: tutorial.ResPlayroom.WeeklyDiscount:type_name -> tutorial.ResPlayroom.WeeklyDiscountEntry
|
||||
597, // 252: tutorial.ResPlayroom.WeeklyDiscount:type_name -> tutorial.ResPlayroom.WeeklyDiscountEntry
|
||||
182, // 253: tutorial.NotifyPlayroomTask.DailyTask:type_name -> tutorial.DailyTask
|
||||
237, // 254: tutorial.NotifyPlayroomBroken.Player:type_name -> tutorial.ResPlayerSimple
|
||||
2, // 255: tutorial.ResPlayroomTask.Code:type_name -> tutorial.RES_CODE
|
||||
@ -34201,28 +34323,28 @@ var file_proto_Gameapi_proto_depIdxs = []int32{
|
||||
2, // 257: tutorial.ResPlayroomUnlock.Code:type_name -> tutorial.RES_CODE
|
||||
2, // 258: tutorial.ResPlayroomUpvote.Code:type_name -> tutorial.RES_CODE
|
||||
421, // 259: tutorial.PlayroomDress.List:type_name -> tutorial.PlayroomDressInfo
|
||||
596, // 260: tutorial.ReqPlayroomDressSet.DressSet:type_name -> tutorial.ReqPlayroomDressSet.DressSetEntry
|
||||
598, // 260: tutorial.ReqPlayroomDressSet.DressSet:type_name -> tutorial.ReqPlayroomDressSet.DressSetEntry
|
||||
2, // 261: tutorial.ResPlayroomDressSet.Code:type_name -> tutorial.RES_CODE
|
||||
2, // 262: tutorial.ResPlayroomPetAirSet.Code:type_name -> tutorial.RES_CODE
|
||||
2, // 263: tutorial.ResPlayroomWorkOutline.Code:type_name -> tutorial.RES_CODE
|
||||
171, // 264: tutorial.NotifyPlayroomLose.LoseItem:type_name -> tutorial.ItemInfo
|
||||
433, // 265: tutorial.NotifyPlayroomLose.Chip:type_name -> tutorial.ChipInfo
|
||||
597, // 266: tutorial.NotifyPlayroomMood.Mood:type_name -> tutorial.NotifyPlayroomMood.MoodEntry
|
||||
598, // 267: tutorial.NotifyPlayroomMood.Physiology:type_name -> tutorial.NotifyPlayroomMood.PhysiologyEntry
|
||||
599, // 266: tutorial.NotifyPlayroomMood.Mood:type_name -> tutorial.NotifyPlayroomMood.MoodEntry
|
||||
600, // 267: tutorial.NotifyPlayroomMood.Physiology:type_name -> tutorial.NotifyPlayroomMood.PhysiologyEntry
|
||||
435, // 268: tutorial.NotifyPlayroomMood.AdItem:type_name -> tutorial.AdItem
|
||||
599, // 269: tutorial.ResPlayroomInfo.Playroom:type_name -> tutorial.ResPlayroomInfo.PlayroomEntry
|
||||
600, // 270: tutorial.ResPlayroomInfo.Items:type_name -> tutorial.ResPlayroomInfo.ItemsEntry
|
||||
601, // 271: tutorial.ResPlayroomInfo.flip:type_name -> tutorial.ResPlayroomInfo.FlipEntry
|
||||
602, // 272: tutorial.ResPlayroomInfo.Emoji:type_name -> tutorial.ResPlayroomInfo.EmojiEntry
|
||||
603, // 273: tutorial.ResPlayroomInfo.DressSet:type_name -> tutorial.ResPlayroomInfo.DressSetEntry
|
||||
601, // 269: tutorial.ResPlayroomInfo.Playroom:type_name -> tutorial.ResPlayroomInfo.PlayroomEntry
|
||||
602, // 270: tutorial.ResPlayroomInfo.Items:type_name -> tutorial.ResPlayroomInfo.ItemsEntry
|
||||
603, // 271: tutorial.ResPlayroomInfo.flip:type_name -> tutorial.ResPlayroomInfo.FlipEntry
|
||||
604, // 272: tutorial.ResPlayroomInfo.Emoji:type_name -> tutorial.ResPlayroomInfo.EmojiEntry
|
||||
605, // 273: tutorial.ResPlayroomInfo.DressSet:type_name -> tutorial.ResPlayroomInfo.DressSetEntry
|
||||
2, // 274: tutorial.ResPlayroomFlip.Code:type_name -> tutorial.RES_CODE
|
||||
2, // 275: tutorial.ResPlayroomGuide.Code:type_name -> tutorial.RES_CODE
|
||||
2, // 276: tutorial.ResPlayroomFlipReward.Code:type_name -> tutorial.RES_CODE
|
||||
2, // 277: tutorial.ResPlayroomGame.Code:type_name -> tutorial.RES_CODE
|
||||
604, // 278: tutorial.ResPlayroomGame.Items:type_name -> tutorial.ResPlayroomGame.ItemsEntry
|
||||
606, // 278: tutorial.ResPlayroomGame.Items:type_name -> tutorial.ResPlayroomGame.ItemsEntry
|
||||
171, // 279: tutorial.ResPlayroomGameShowReward.Items:type_name -> tutorial.ItemInfo
|
||||
2, // 280: tutorial.ResPlayroomInteract.Code:type_name -> tutorial.RES_CODE
|
||||
605, // 281: tutorial.ReqPlayroomSetRoom.Playroom:type_name -> tutorial.ReqPlayroomSetRoom.PlayroomEntry
|
||||
607, // 281: tutorial.ReqPlayroomSetRoom.Playroom:type_name -> tutorial.ReqPlayroomSetRoom.PlayroomEntry
|
||||
2, // 282: tutorial.ResPlayroomSetRoom.Code:type_name -> tutorial.RES_CODE
|
||||
2, // 283: tutorial.ResPlayroomSelectReward.Code:type_name -> tutorial.RES_CODE
|
||||
2, // 284: tutorial.ResPlayroomLose.Code:type_name -> tutorial.RES_CODE
|
||||
@ -34253,20 +34375,20 @@ var file_proto_Gameapi_proto_depIdxs = []int32{
|
||||
2, // 309: tutorial.ResCatnipGrandReward.Code:type_name -> tutorial.RES_CODE
|
||||
2, // 310: tutorial.ResCatnipEmoji.Code:type_name -> tutorial.RES_CODE
|
||||
171, // 311: tutorial.MiningCfg.itemCost:type_name -> tutorial.ItemInfo
|
||||
606, // 312: tutorial.MiningCfg.Gem:type_name -> tutorial.MiningCfg.GemEntry
|
||||
607, // 313: tutorial.MiningCfg.Jackpot:type_name -> tutorial.MiningCfg.JackpotEntry
|
||||
608, // 314: tutorial.MiningCfg.Pass:type_name -> tutorial.MiningCfg.PassEntry
|
||||
608, // 312: tutorial.MiningCfg.Gem:type_name -> tutorial.MiningCfg.GemEntry
|
||||
609, // 313: tutorial.MiningCfg.Jackpot:type_name -> tutorial.MiningCfg.JackpotEntry
|
||||
610, // 314: tutorial.MiningCfg.Pass:type_name -> tutorial.MiningCfg.PassEntry
|
||||
171, // 315: tutorial.MiningCfgJackpot.Items:type_name -> tutorial.ItemInfo
|
||||
171, // 316: tutorial.MiningCfgPass.Items:type_name -> tutorial.ItemInfo
|
||||
521, // 317: tutorial.ReqActivityCfgReload.List:type_name -> tutorial.ActivityCfg
|
||||
530, // 318: tutorial.ResUserDetail.info:type_name -> tutorial.ResUserDetailInfo
|
||||
529, // 319: tutorial.UserDetailOrderInfo.Chess:type_name -> tutorial.UserDetailOrderInfoChess
|
||||
529, // 320: tutorial.UserDetailOrderInfo.ChessId:type_name -> tutorial.UserDetailOrderInfoChess
|
||||
609, // 321: tutorial.ResUserDetailInfo.ChessMap:type_name -> tutorial.ResUserDetailInfo.ChessMapEntry
|
||||
611, // 321: tutorial.ResUserDetailInfo.ChessMap:type_name -> tutorial.ResUserDetailInfo.ChessMapEntry
|
||||
238, // 322: tutorial.ResUserDetailInfo.ActLog:type_name -> tutorial.ActLog
|
||||
527, // 323: tutorial.ResUserDetailInfo.FriendList:type_name -> tutorial.UserDetailFriendInfo
|
||||
528, // 324: tutorial.ResUserDetailInfo.Order:type_name -> tutorial.UserDetailOrderInfo
|
||||
610, // 325: tutorial.ResUserDetailInfo.ChessBuffer:type_name -> tutorial.ResUserDetailInfo.ChessBufferEntry
|
||||
612, // 325: tutorial.ResUserDetailInfo.ChessBuffer:type_name -> tutorial.ResUserDetailInfo.ChessBufferEntry
|
||||
175, // 326: tutorial.ResGuideTask.TaskEntry.value:type_name -> tutorial.GuideTask
|
||||
181, // 327: tutorial.ResDailyTask.WeekRewardEntry.value:type_name -> tutorial.DailyWeek
|
||||
182, // 328: tutorial.ResDailyTask.DailyTaskEntry.value:type_name -> tutorial.DailyTask
|
||||
@ -34295,16 +34417,18 @@ var file_proto_Gameapi_proto_depIdxs = []int32{
|
||||
518, // 351: tutorial.Backend.BanPlayer:input_type -> tutorial.ReqAdminBan
|
||||
514, // 352: tutorial.Backend.ReloadMail:input_type -> tutorial.ReqReloadServerMail
|
||||
516, // 353: tutorial.Backend.ServerReload:input_type -> tutorial.ReqReload
|
||||
522, // 354: tutorial.Backend.ReloadActivity:output_type -> tutorial.ResActivityCfgReload
|
||||
524, // 355: tutorial.Backend.OrderShipping:output_type -> tutorial.ResOrderShipping
|
||||
526, // 356: tutorial.Backend.UserDetail:output_type -> tutorial.ResUserDetail
|
||||
531, // 357: tutorial.Backend.ServerInfo:output_type -> tutorial.ResServerInfo
|
||||
532, // 358: tutorial.Backend.PlayerGm:output_type -> tutorial.ResAdminGm
|
||||
533, // 359: tutorial.Backend.BanPlayer:output_type -> tutorial.ResBackend
|
||||
533, // 360: tutorial.Backend.ReloadMail:output_type -> tutorial.ResBackend
|
||||
533, // 361: tutorial.Backend.ServerReload:output_type -> tutorial.ResBackend
|
||||
354, // [354:362] is the sub-list for method output_type
|
||||
346, // [346:354] is the sub-list for method input_type
|
||||
534, // 354: tutorial.Backend.MiniGame:input_type -> tutorial.ReqMiniGame
|
||||
522, // 355: tutorial.Backend.ReloadActivity:output_type -> tutorial.ResActivityCfgReload
|
||||
524, // 356: tutorial.Backend.OrderShipping:output_type -> tutorial.ResOrderShipping
|
||||
526, // 357: tutorial.Backend.UserDetail:output_type -> tutorial.ResUserDetail
|
||||
531, // 358: tutorial.Backend.ServerInfo:output_type -> tutorial.ResServerInfo
|
||||
532, // 359: tutorial.Backend.PlayerGm:output_type -> tutorial.ResAdminGm
|
||||
533, // 360: tutorial.Backend.BanPlayer:output_type -> tutorial.ResBackend
|
||||
533, // 361: tutorial.Backend.ReloadMail:output_type -> tutorial.ResBackend
|
||||
533, // 362: tutorial.Backend.ServerReload:output_type -> tutorial.ResBackend
|
||||
535, // 363: tutorial.Backend.MiniGame:output_type -> tutorial.ResMiniGame
|
||||
355, // [355:364] is the sub-list for method output_type
|
||||
346, // [346:355] is the sub-list for method input_type
|
||||
346, // [346:346] is the sub-list for extension type_name
|
||||
346, // [346:346] is the sub-list for extension extendee
|
||||
0, // [0:346] is the sub-list for field type_name
|
||||
@ -34321,7 +34445,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: 14,
|
||||
NumMessages: 597,
|
||||
NumMessages: 599,
|
||||
NumExtensions: 0,
|
||||
NumServices: 1,
|
||||
},
|
||||
|
||||
@ -27,6 +27,7 @@ const (
|
||||
Backend_BanPlayer_FullMethodName = "/tutorial.Backend/BanPlayer"
|
||||
Backend_ReloadMail_FullMethodName = "/tutorial.Backend/ReloadMail"
|
||||
Backend_ServerReload_FullMethodName = "/tutorial.Backend/ServerReload"
|
||||
Backend_MiniGame_FullMethodName = "/tutorial.Backend/MiniGame"
|
||||
)
|
||||
|
||||
// BackendClient is the client API for Backend service.
|
||||
@ -41,6 +42,7 @@ type BackendClient interface {
|
||||
BanPlayer(ctx context.Context, in *ReqAdminBan, opts ...grpc.CallOption) (*ResBackend, error)
|
||||
ReloadMail(ctx context.Context, in *ReqReloadServerMail, opts ...grpc.CallOption) (*ResBackend, error)
|
||||
ServerReload(ctx context.Context, in *ReqReload, opts ...grpc.CallOption) (*ResBackend, error)
|
||||
MiniGame(ctx context.Context, in *ReqMiniGame, opts ...grpc.CallOption) (*ResMiniGame, error)
|
||||
}
|
||||
|
||||
type backendClient struct {
|
||||
@ -131,6 +133,16 @@ func (c *backendClient) ServerReload(ctx context.Context, in *ReqReload, opts ..
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (c *backendClient) MiniGame(ctx context.Context, in *ReqMiniGame, opts ...grpc.CallOption) (*ResMiniGame, error) {
|
||||
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
|
||||
out := new(ResMiniGame)
|
||||
err := c.cc.Invoke(ctx, Backend_MiniGame_FullMethodName, in, out, cOpts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
// BackendServer is the server API for Backend service.
|
||||
// All implementations must embed UnimplementedBackendServer
|
||||
// for forward compatibility.
|
||||
@ -143,6 +155,7 @@ type BackendServer interface {
|
||||
BanPlayer(context.Context, *ReqAdminBan) (*ResBackend, error)
|
||||
ReloadMail(context.Context, *ReqReloadServerMail) (*ResBackend, error)
|
||||
ServerReload(context.Context, *ReqReload) (*ResBackend, error)
|
||||
MiniGame(context.Context, *ReqMiniGame) (*ResMiniGame, error)
|
||||
mustEmbedUnimplementedBackendServer()
|
||||
}
|
||||
|
||||
@ -177,6 +190,9 @@ func (UnimplementedBackendServer) ReloadMail(context.Context, *ReqReloadServerMa
|
||||
func (UnimplementedBackendServer) ServerReload(context.Context, *ReqReload) (*ResBackend, error) {
|
||||
return nil, status.Error(codes.Unimplemented, "method ServerReload not implemented")
|
||||
}
|
||||
func (UnimplementedBackendServer) MiniGame(context.Context, *ReqMiniGame) (*ResMiniGame, error) {
|
||||
return nil, status.Error(codes.Unimplemented, "method MiniGame not implemented")
|
||||
}
|
||||
func (UnimplementedBackendServer) mustEmbedUnimplementedBackendServer() {}
|
||||
func (UnimplementedBackendServer) testEmbeddedByValue() {}
|
||||
|
||||
@ -342,6 +358,24 @@ func _Backend_ServerReload_Handler(srv interface{}, ctx context.Context, dec fun
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Backend_MiniGame_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(ReqMiniGame)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if interceptor == nil {
|
||||
return srv.(BackendServer).MiniGame(ctx, in)
|
||||
}
|
||||
info := &grpc.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: Backend_MiniGame_FullMethodName,
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
return srv.(BackendServer).MiniGame(ctx, req.(*ReqMiniGame))
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
// Backend_ServiceDesc is the grpc.ServiceDesc for Backend service.
|
||||
// It's only intended for direct use with grpc.RegisterService,
|
||||
// and not to be introspected or modified (even as a copy)
|
||||
@ -381,6 +415,10 @@ var Backend_ServiceDesc = grpc.ServiceDesc{
|
||||
MethodName: "ServerReload",
|
||||
Handler: _Backend_ServerReload_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "MiniGame",
|
||||
Handler: _Backend_MiniGame_Handler,
|
||||
},
|
||||
},
|
||||
Streams: []grpc.StreamDesc{},
|
||||
Metadata: "proto/Gameapi.proto",
|
||||
|
||||
@ -3,6 +3,7 @@ package main
|
||||
import (
|
||||
"backend/common"
|
||||
shipcommon "backend/sdk/ship/common"
|
||||
minigame "backend/sdk/ship/model/mini_game"
|
||||
"backend/sdk/ship/model/test"
|
||||
"backend/sdk/ship/model/tuyou"
|
||||
"backend/util"
|
||||
@ -94,6 +95,8 @@ func main() {
|
||||
// 充值发货
|
||||
ChargeApi.POST("test/charge", test.Charge)
|
||||
ChargeApi.POST("tuyou/charge", tuyou.Charge)
|
||||
//小游戏奖励
|
||||
ChargeApi.POST("tuyou/reward", minigame.Reward)
|
||||
}
|
||||
|
||||
server := &http.Server{
|
||||
|
||||
101
sdk/ship/model/mini_game/mini_game.go
Normal file
101
sdk/ship/model/mini_game/mini_game.go
Normal file
@ -0,0 +1,101 @@
|
||||
package minigame
|
||||
|
||||
import (
|
||||
"backend/client"
|
||||
"backend/msg"
|
||||
"crypto/md5"
|
||||
"fmt"
|
||||
"reflect"
|
||||
"sort"
|
||||
"strings"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
type RewardRequest struct {
|
||||
AppId int `json:"appId" form:"appId" binding:"required" description:"cp应用ID"`
|
||||
ServerId int `json:"serverId" form:"serverId" binding:"required" description:"cp服务器ID"`
|
||||
UserID int64 `json:"userId" form:"userId" binding:"required" description:"用户uid"`
|
||||
GameID int32 `json:"gameId" form:"gameId" binding:"required" description:"小游戏ID"`
|
||||
TimeStamp int64 `json:"timeStamp" form:"timeStamp" binding:"required" description:"时间戳,单位毫秒"`
|
||||
Score int32 `json:"score" form:"score" binding:"required" description:"游戏得分"`
|
||||
Code string `json:"code" form:"code" binding:"required" description:"回调签名"`
|
||||
}
|
||||
|
||||
const (
|
||||
APP_KEY = "8001bd25832553c39d4b443f56480841"
|
||||
)
|
||||
|
||||
func Reward(c *gin.Context) {
|
||||
var req RewardRequest
|
||||
if err := c.ShouldBind(&req); err != nil {
|
||||
c.JSON(400, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
expectedCode := req.Sign()
|
||||
if expectedCode != req.Code {
|
||||
c.JSON(400, gin.H{"error": "invalid code"})
|
||||
return
|
||||
}
|
||||
res, err := client.MiniGame(req.AppId, req.ServerId, &msg.ReqMiniGame{
|
||||
Uid: req.UserID,
|
||||
Id: req.GameID,
|
||||
Score: req.Score,
|
||||
})
|
||||
if err != nil {
|
||||
c.JSON(500, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
c.JSON(200, gin.H{"reward": res})
|
||||
}
|
||||
|
||||
func (r *RewardRequest) Sign() string {
|
||||
// 收集参数到 map[key]=string(value)
|
||||
params := make(map[string]string)
|
||||
val := reflect.ValueOf(*r)
|
||||
typ := reflect.TypeOf(*r)
|
||||
for i := 0; i < typ.NumField(); i++ {
|
||||
field := typ.Field(i)
|
||||
// 使用 json tag 作为键名,若为空则 fallback 到字段名
|
||||
tag := field.Tag.Get("json")
|
||||
key := strings.Split(tag, ",")[0]
|
||||
if key == "" {
|
||||
key = field.Name
|
||||
}
|
||||
// 排除 code
|
||||
if key == "code" {
|
||||
continue
|
||||
}
|
||||
fv := val.Field(i)
|
||||
var s string
|
||||
if fv.Kind() == reflect.String {
|
||||
s = fv.String()
|
||||
} else {
|
||||
s = fmt.Sprintf("%v", fv.Interface())
|
||||
}
|
||||
params[key] = s
|
||||
}
|
||||
|
||||
// 排序键名
|
||||
keys := make([]string, 0, len(params))
|
||||
for k := range params {
|
||||
keys = append(keys, k)
|
||||
}
|
||||
sort.Strings(keys)
|
||||
|
||||
// 拼接签名源字符串
|
||||
var b strings.Builder
|
||||
for i, k := range keys {
|
||||
if i > 0 {
|
||||
b.WriteByte('&')
|
||||
}
|
||||
b.WriteString(k)
|
||||
b.WriteByte('=')
|
||||
b.WriteString(params[k])
|
||||
}
|
||||
checkstr := b.String()
|
||||
checkstr = APP_KEY + checkstr + APP_KEY
|
||||
// 计算 MD5 并返回小写十六进制字符串
|
||||
sum := md5.Sum([]byte(checkstr))
|
||||
return fmt.Sprintf("%x", sum)
|
||||
}
|
||||
26
util/es.go
26
util/es.go
@ -420,8 +420,30 @@ func CountStatisticsHeat7Days(appId int, tz string) (*StatisticsHeatTrend, error
|
||||
},
|
||||
"login": map[string]any{
|
||||
"filter": map[string]any{
|
||||
"term": map[string]any{
|
||||
"game.#event_name.keyword": "Login_log",
|
||||
"bool": map[string]any{
|
||||
"minimum_should_match": 1,
|
||||
"should": []map[string]any{
|
||||
{
|
||||
"term": map[string]any{
|
||||
"game.#event_name": "Login_log",
|
||||
},
|
||||
},
|
||||
{
|
||||
"term": map[string]any{
|
||||
"game.#event_name": "login_log",
|
||||
},
|
||||
},
|
||||
{
|
||||
"term": map[string]any{
|
||||
"game.#event_name": "login",
|
||||
},
|
||||
},
|
||||
{
|
||||
"term": map[string]any{
|
||||
"game.#event_name": "Login",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
"aggs": map[string]any{
|
||||
|
||||
@ -131,6 +131,58 @@ func DayRemain(now int64, Day int, LogDb *Db) (int, error) {
|
||||
return len(DataList2), nil
|
||||
}
|
||||
|
||||
// GetYesterdaySecondRemainRateRealtime 实时计算昨日次留率(返回 0~1 比例值)
|
||||
func GetYesterdaySecondRemainRateRealtime(AppId int) (float64, error) {
|
||||
AppConfig, err := GetAppConfig(AppId)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
LogDb := MPool.GetTopicDB(AppConfig.Topic)
|
||||
if LogDb == nil {
|
||||
return 0, fmt.Errorf("failed to get mysql database")
|
||||
}
|
||||
defer LogDb.Close()
|
||||
|
||||
yesterdayStart, err := GetZeroTimestamp(AppConfig.Tz, -1)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
yesterdayEnd := yesterdayStart + 86399
|
||||
|
||||
todayStart, err := GetZeroTimestamp(AppConfig.Tz, 0)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
now := time.Now().Unix()
|
||||
|
||||
var registerCount int
|
||||
err = LogDb.Get(®isterCount, "SELECT count(distinct Uid) FROM log_login WHERE Event = 'register' AND Timestamp >= ? AND Timestamp <= ?", yesterdayStart, yesterdayEnd)
|
||||
if err != nil {
|
||||
return 0, fmt.Errorf("failed to get yesterday register count: %v", err)
|
||||
}
|
||||
if registerCount == 0 {
|
||||
return 0, nil
|
||||
}
|
||||
|
||||
var secondRemainCount int
|
||||
err = LogDb.Get(&secondRemainCount, `
|
||||
SELECT count(distinct l.Uid)
|
||||
FROM log_login l
|
||||
INNER JOIN (
|
||||
SELECT distinct Uid
|
||||
FROM log_login
|
||||
WHERE Event = 'register' AND Timestamp >= ? AND Timestamp <= ?
|
||||
) r ON l.Uid = r.Uid
|
||||
WHERE l.Event = 'Login_log' AND l.Timestamp >= ? AND l.Timestamp <= ?
|
||||
`, yesterdayStart, yesterdayEnd, todayStart, now)
|
||||
if err != nil {
|
||||
return 0, fmt.Errorf("failed to get yesterday second remain count: %v", err)
|
||||
}
|
||||
|
||||
return FloatDiv(secondRemainCount, registerCount, 4), nil
|
||||
}
|
||||
|
||||
func Login(Now int64, LogDb *Db) int {
|
||||
if LogDb == nil {
|
||||
log.Println("failed to get mysql database")
|
||||
|
||||
Loading…
Reference in New Issue
Block a user