// Package msg // 一个错误编号表示唯一一个错误发生地点 // 错误编号格式:顺序号*1000000 + 程序编号*1000 + 模块编号 // 模块内函数发生错误,编号:1-100 // 特定错误,编号:101-200 // 其他地方发生错误,占用地址列表 // 1、 package msg import "fmt" // ErrorCode 结构体表示错误编码 type ErrorCoder struct { ProgramID int ModuleID int } // 程序 const ( ServerTypeLogin = 1 ServerTypeGate = 2 ServerTypeWorld = 3 ServerTypeGameFrameSync = 4 ServerTypeAll = 999 // 所有服务器通用 ) // gate模块 const ( GateModleGame = 1 GateModleGate = 2 GateModlePush = 3 ) // world模块 const ( WorldModleDb = 1 WorldModleGame = 2 WorldModleGate = 3 WorldModleSystemData = 4 WorldModleChat = 5 AllModelAll = 999 // 所有模块通用 ) // GameFrameSync模块 const ( GameFrameSyncModleDb = 1 GameFrameSyncModleGame = 2 GameFrameSyncModleGate = 3 GameFrameSyncModleSystemData = 4 GameFrameSyncSync = 5 ) // 对象类型 1000种 const ( ErrObjectParam = 1 ErrObjectPlayer = 2 ErrObjectConfig = 3 ErrObjectCondition = 4 ErrObjectTarget = 5 ErrObjectItem = 6 ErrObjectResult = 7 ErrObjectHero = 9 ErrObjectTreasures = 10 ErrObjectChapter = 11 ErrObjectReward = 12 ErrObjectStam = 13 ErrObjectChat = 14 ErrObjectLegend = 15 ErrObjectFriend = 16 ErrObjectPatrol = 17 ErrObjectTask = 18 ErrObjectShop = 19 ErrObjectAc = 20 ErrObjectGameSync = 50 // 游戏同步 ErrObjectSystem = 90 ErrObjectDb = 91 ErrObjectRedis = 92 ErrObjectFunc = 93 // 函数 ErrObjectMax = 999 ) // 每个对象100种状态 // 定义10个常用状态 const ( ErrStatusInvalid = 91 // 无效 ErrStatusNotFound = 92 // 未发现 ErrStatusNotEnough = 93 // 不够 ErrStatusError = 94 // 错误 ErrStatusOverstep = 95 // 超出 ) const ( Multiple100 = 100 // 全局参数 一般不要用,防止出现问题定位不到在所在程序及位置 // 999 999 001 0000 - 999 999 999 9999 ErrUniquePlayerNoToken = 999_999_000_0000 + errPlayerNoToken*100 ErrUniquePlayerBanLogin = 999_999_000_0000 + errPlayerBanLogin*100 ErrUniquePlayerOtherLogin = 999_999_000_0000 + errPlayerOtherLogin*100 ErrUniqueSystemUpgrade = 999_999_000_0000 + ErrObjectSystem*10000 + 1*100 ErrUniqueSystemFull = 999_999_000_0000 + ErrObjectSystem*10000 + 2*100 ErrUniqueSystemFoundCheat = 999_999_000_0000 + ErrObjectSystem*10000 + 3*100 // 请求参数 100 ErrParamInvalid = ErrObjectParam*Multiple100 + ErrStatusInvalid // 玩家 200 errPlayerBanLogin = ErrObjectPlayer*Multiple100 + 1 errPlayerOtherLogin = ErrObjectPlayer*Multiple100 + 2 ErrPlayerNotFound = ErrObjectPlayer*Multiple100 + ErrStatusNotFound errPlayerNoToken = ErrObjectPlayer*Multiple100 + 3 // 道具 300 ErrItemNotFound = ErrObjectItem*Multiple100 + ErrStatusNotFound ErrItemNotEnough = ErrObjectItem*Multiple100 + ErrStatusNotEnough // 目标 ErrTargetNotFound = ErrObjectTarget*Multiple100 + ErrStatusNotFound // 配置 ErrConfigNotFound = ErrObjectConfig*Multiple100 + ErrStatusNotFound ErrConfigError = ErrObjectConfig*Multiple100 + ErrStatusError // 条件 ErrConditionNotEnough = ErrObjectCondition*Multiple100 + ErrStatusNotEnough // 结果 ErrResultError = ErrObjectResult*Multiple100 + ErrStatusError // 英雄 400 ErrHeroNotFound = ErrObjectHero*Multiple100 + ErrStatusNotFound // 宝物 500 ErrTreasuresNotFound = ErrObjectTreasures*Multiple100 + ErrStatusNotFound // 数据库 600 ErrDBExec = ErrObjectDb*Multiple100 + 1 ErrDBLoadNil = ErrObjectDb*Multiple100 + 2 // redis 700 ErrRedisExec = ErrObjectRedis*Multiple100 + 1 // 章节 ErrChapterNotFound = ErrObjectChapter*Multiple100 + ErrStatusNotFound ErrChapterLimit = ErrObjectChapter*Multiple100 + ErrStatusError //奖励 ErrRewardNotFound = ErrObjectReward*Multiple100 + ErrStatusNotFound ErrRewardIsReceived = ErrObjectReward*Multiple100 + 1 // 已领取 //体力 ErrStamOverstep = ErrObjectStam*Multiple100 + ErrStatusOverstep //聊天 ErrEmojiError = ErrObjectChat*Multiple100 + 1 ErrEmojiUnlock = ErrObjectChat*Multiple100 + 2 ErrChatError = ErrObjectChat*Multiple100 + 3 ErrChatBlockedChannel = ErrObjectChat*Multiple100 + 4 ErrChatBlockedUser = ErrObjectChat*Multiple100 + 5 ErrChatContent = ErrObjectChat*Multiple100 + 6 ErrChatSendCDTs = ErrObjectChat*Multiple100 + 7 ErrPrivatePlayerNotExist = ErrObjectChat*Multiple100 + 8 ErrPrivatePlayerNotFriend = ErrObjectChat*Multiple100 + 9 // 铭文 ErrLegendUnique = ErrObjectLegend*Multiple100 + 1 ErrLegendSlotUnlock = ErrObjectLegend*Multiple100 + 2 ErrLegendSlotNoMatch = ErrObjectLegend*Multiple100 + 3 ErrLevelNotEnough = ErrObjectLegend*Multiple100 + 4 // 好友 ErrFriendGiveError = ErrObjectFriend*Multiple100 + 1 ErrFriendGiveHad = ErrObjectFriend*Multiple100 + 2 ErrFriendRecCountFull = ErrObjectFriend*Multiple100 + 3 ErrFriendNotRecCount = ErrObjectFriend*Multiple100 + 4 // 巡逻 ErrPatrolLock = ErrObjectPatrol*Multiple100 + 1 ErrPatrolReceiveReward = ErrObjectPatrol*Multiple100 + 2 ErrPatrolNoAdNum = ErrObjectPatrol*Multiple100 + 3 ErrPatrolNoFastNum = ErrObjectPatrol*Multiple100 + 4 ErrPatrolGtDanNum = ErrObjectPatrol*Multiple100 + 5 ErrPatrolGtUserPoint = ErrObjectPatrol*Multiple100 + 6 // 任务 ErrTaskUnfinished = ErrObjectTask*Multiple100 + 1 ErrTaskUnClaimable = ErrObjectTask*Multiple100 + 2 ErrTaskIsClaimed = ErrObjectTask*Multiple100 + 3 ErrTaskClaimErr = ErrObjectTask*Multiple100 + 4 // 商店 ErrShopFreeRefreshNotEnough = ErrObjectShop*Multiple100 + 1 ErrShopGoldRefreshNotEnough = ErrObjectShop*Multiple100 + 2 ErrShopAdRefreshNotEnough = ErrObjectShop*Multiple100 + 3 ErrShopGoodsNotUnlock = ErrObjectShop*Multiple100 + 4 ErrShopGoodsBuyNotEnough = ErrObjectShop*Multiple100 + 5 ErrShopGoodsOwned = ErrObjectShop*Multiple100 + 6 // 精彩活动 ErrAcAlreadyBuy = ErrObjectAc*Multiple100 + 1 ErrAcCardNotBuy = ErrObjectAc*Multiple100 + 2 ErrAcCardNotActive = ErrObjectAc*Multiple100 + 3 ErrAcAlreadyGet = ErrObjectAc*Multiple100 + 4 ErrAcCardAlreadyBuy = ErrObjectAc*Multiple100 + 5 ErrAcActiveAdMaxCount = ErrObjectAc*Multiple100 + 6 ErrAcOverLimit = ErrObjectAc*Multiple100 + 7 ErrAcLocked = ErrObjectAc*Multiple100 + 8 ErrFirstChargeNotBuy = ErrObjectAc*Multiple100 + 9 ErrAcNoReward = ErrObjectAc*Multiple100 + 10 ErrAcNotOpen = ErrObjectAc*Multiple100 + 11 ErrAcNotComplete = ErrObjectAc*Multiple100 + 12 ErrGameSyncLoginOther = ErrObjectGameSync*Multiple100 + 1 ErrGameSyncParam = ErrObjectGameSync*Multiple100 + 2 ErrRoomDisband = ErrObjectGameSync*Multiple100 + 3 ErrRoomFrameErr = ErrObjectGameSync*Multiple100 + 4 ErrPlayerSettleErr = ErrObjectGameSync*Multiple100 + 5 ErrRoomCacheFrameErr = ErrObjectGameSync*Multiple100 + 6 ErrRoomNotFoundPlayerErr = ErrObjectGameSync*Multiple100 + 6 // 配置 // ErrConfigMaxOnline = ErrObjectConfig*Multiple100 + 1 ErrMaxTypeMaxStatus = ErrObjectMax*100 + 99 // 99900+99 = 999_99 ErrMaxVal = 999*1000_000_0000 + 999*1000_0000 + 999*10000 + 99*100 + 99 ) // 每种状态在同一个函数种可以使用100次,需要序号递增 // initErrorCodes 是一个包级初始化函数,用于设置程序编号和模块编号 // login 1: // world 2: db:1; game:2; gate:3; systemdata:4 // gate 3: // var ( // appErrorCoder *ErrorCoder // ) func InitErrorCodes(programID, moduleID int) *ErrorCoder { errorCodes := new(ErrorCoder) errorCodes.ProgramID = programID errorCodes.ModuleID = moduleID return errorCodes } // CalcErrorCode3 生成错误编号,只需要提供顺序号 func (ec *ErrorCoder) CalcErrorCode4(moduleId int, errObj int, errStatus int, seq int) int { return ec.ProgramID*1000_000_0000 + moduleId*1000_0000 + errObj*10000 + errStatus*100 + seq } func (ec *ErrorCoder) CalcErrorCode3(errObj int, errStatus int, seq int) int { return ec.CalcErrorCode4(ec.ModuleID, errObj, errStatus, seq) } func (ec *ErrorCoder) CalcErrorCode2(errObj int, errStatus int) int { return ec.CalcErrorCode4(ec.ModuleID, errObj, errStatus, 0) } func (ec *ErrorCoder) CalcErrorCode(errObjStatus int) int { return ec.CalcErrorCode4(ec.ModuleID, 0, errObjStatus, 0) } // func (ec *ErrorCoder) CalcUniqueErrorCode(errObjStatusSeq int) int { // return errObjStatusSeq // } func (ec *ErrorCoder) PrintError(errCode int, errMsg string) { errCode2 := ec.CalcErrorCode(errCode) // code := (errCode2 % 1000_0000) / 100 // fmt.Printf("%v-%v: %v %s\n", errCode2, errCode2+99, code, errMsg) fmt.Printf("%v: %s\n", errCode2, errMsg) } // func InitAppErrorCoder(programID int) *ErrorCoder { // errorCoder := new(ErrorCoder) // errorCoder.ProgramID = programID // appErrorCoder = errorCoder // return errorCoder // } // return appErrorCoder.ProgramID*1000_000_00_00 + appErrorCoder.ModuleID*1000_0000 + errObj*10000 + errStatus*100 + seq // func CalcErrorCode(seq int) int { // return appErrorCoder.ProgramID*1000_000_00_00 + seq // } // func GetErrCoderMethodWithFunc(funcFlag ...int) func(int) int { // funcFlag1 := 0 // if len(funcFlag) > 0 { // funcFlag1 = funcFlag[0] // } // return func(seq int) int { // return appErrorCoder.CalcErrorCode4(appErrorCoder.ModuleID, ErrObjectFunc, funcFlag1, seq) // } // } func PrintErrorCode() { // errorEncoder1 := InitErrorCodes(ServerTypeGate, GateModleGame) // errorEncoder1.PrintError(ErrParamInvalid, "参数错误") // errorEncoder1.PrintError(ErrPlayerBanLogin, "禁止登录") // errorEncoder1.PrintError(ErrPlayerOtherLogin, "异地登录") // errorEncoder1.PrintError(ErrPlayerNotFound, "玩家未登录") // errorEncoder1.PrintError(ErrPlayerNoToken, "玩家凭证不存在") // errorEncoder2 := InitErrorCodes(ServerTypeWorld, WorldModleGame) // errorEncoder2.PrintError(ErrItemNotEnough, "道具不足") // errorEncoder2.PrintError(ErrItemNotFound, "道具不存在") // errorEncoder2.PrintError(ErrHeroNotFound, "英雄不存在") // errorEncoder2.PrintError(ErrTreasuresNotFound, "宝物不存在") // errorEncoder2.PrintError(ErrDBExec, "数据库错误") // errorEncoder2.PrintError(ErrDBLoadNil, "数据库加载错误") // errorEncoder2.PrintError(ErrRedisExec, "缓存错误") // errorEncoder2.PrintError(ErrTargetNotFound, "目标未发现") // errorEncoder2.PrintError(ErrConfigNotFound, "配置未发现") // errorEncoder2.PrintError(ErrConditionNotEnough, "条件不满足") // errorEncoder1.PrintError(ErrPlayerNoToken, "玩家凭证不存在") // errorEncoder1.PrintError(ErrPlayerBanLogin, "禁止登录") // errorEncoder1.PrintError(ErrPlayerOtherLogin, "异地登录") // errorEncoder1.PrintError(ErrSystemUpgrade, "系统维护") // errorEncoder1.PrintError(ErrSystemFull, "服务器满") // errorEncoder1.PrintError(ErrSystemFoundCheat, "数据异常") // 20010019100:参数错误 // 20010020100:禁止登录 // 20010020200:异地登录 // 20010029200:玩家未登录 // 20010020300:玩家凭证不存在 // 20010020400:达到最大在线数 // 30020030100:道具不足 // 30020039200:道具不存在 // 30020049200:英雄不存在 // 30020059200:宝物不存在 // 30020060100:数据库错误 // 30020060200:数据库加载错误 // 30020070100:缓存错误 }