syntax = "proto3"; package pb; import "vars/vars.proto"; option go_package = "./pb"; // model message Empty {} message Response { int32 code = 1; // code string msg = 2; // msg } // req message PlatformUserReq { string platform = 1; string pUid = 2; string pUname = 3; string pAvatar = 4; } message PlatformUserResp { int64 id = 1; // platform string platform = 3; string pUid = 4; string pUname = 5; string pAvatar = 6; } // 用户详细信息返回 message UserDetailsResp { // TitleItem 称号 message TitleItem { int64 id = 1; // ID string name = 2; // 名 int32 sort = 3; // 排序号 int32 remain = 4; // 剩余时长(单位:小时) } // 精英单位 message EliteItem { int64 id = 1; // ID 1000(普通x) 1001(弓骑兵) 1002(牧师) int32 sort = 2; // 排序号 int32 remain = 3; // 剩余时长(单位:天)-1无限制 } int64 userId = 1; // 系统用户ID int32 nobilityLevel = 2; // 贵族等级 int64 coin = 3; // 金币 TitleItem currentTitle = 4; // 当前佩戴的称号ID EliteItem currentElite = 5; // 当前使用的精英单位ID repeated TitleItem titles = 6; // 拥有的称号列表 repeated EliteItem elites = 7; // 拥有的精英单位列表 } // 用户ID请求 message UserIdReq { int64 userId = 1; } // 用户ID回复 message UserIdResp { int64 userId = 1; } message GetUserCoinResp { int64 userId = 1; int64 current = 2; // 当前量 } // 变更弹币请求 message ChangeCoinReq { int64 userId = 1; // 系统用户ID int64 battleId = 2; // 战局ID int64 change = 3; // 变更数量 pb.vars.UserCoinChangedReason reason = 4; // 原因 } // 转移用户弹币 message TransferUserCoinReq { int64 userId = 1; // 源用户ID int64 targetUserId = 2; // 目标用户 int64 transfer = 3; // 待转移量 } // 转移用户弹币 回复 message TransferUserCoinResp { int64 userId = 1; string uname = 2; string avatar = 3; int64 targetUserId = 4; string targetUname = 5; string targetAvatar = 6; int64 userCoin = 10; // 源用户剩余 int64 targetUserCoin = 11; // 目标用户剩余 } // 用户打卡(签到)回复 message UserCheckInResp { int64 coinChange = 1; // 弹币变更量 int64 currentCoin = 2; // 现有弹币量 bool isCritical = 3; // 是否发生了暴击奖励 } // 用户送礼请求 message UserSendGiftReq { string platform = 1; // 平台 int64 userId = 2; // 系统用户ID string pUid = 3; // 平台用户ID string roomId = 4; // 直播间ID int64 giftId = 5; // 礼物ID string giftName = 6; // 礼物名 int64 num = 7; // 赠送数量 int64 price = 8; // 礼物单价(系统不存在对应礼物数据时使用) bool isPaid = 9; // 是否收费礼物 int64 battleId = 10; // 战局ID } // 用户购买舰长请求 message UserBuyNobilityReq { string platform = 1; // 平台 int64 userId = 2; // 系统用户ID string pUid = 3; // 平台用户ID int64 battleId = 4; // 战局ID string roomId = 5; // 直播间ID int64 giftId = 6; // 礼物ID string giftName = 7; // 礼物名 int64 num = 8; // 赠送数量 int64 price = 9; // 礼物单价(系统不存在对应礼物数据时使用) int64 level = 10; // 贵族等级 int64 startTime = 11; // 开始时间 int64 endTime = 12; // 结束时间 } message Grade { int32 grade = 1; // 段位 int32 level = 2; // 段位等级 int32 star = 3; // 等级星级 int64 bravePoint = 4; // 剩余 骁勇分(历史评分累计) } message UserGradeResp { int64 userId = 1; Grade grade = 2; } // 通知-PvP战报 statistics.pvp.report message StatPvPReportReq { message Item { int64 uid = 1; // 用户ID string uname = 2; // 用户名 int64 damage = 3; // 伤害量 int64 deDamage = 4; // 承受伤害 int64 killUnit = 5; // 击杀单位数量 int64 deKillUnit = 6; // 被杀单位数量 bool firstBlood = 7; // 拿到一血 bool deFirstBlood = 8; // 被拿一血 int64 killPlayer = 9; // 击杀玩家数 bool deKillPlayer = 10; // 是否被击杀 bool isGeneral = 11; // 是否上一把名将? } int32 winCamp = 1; // 获胜阵营 1-蓝 2-红 int64 battleId = 2; // 战斗ID repeated Item winItems = 10; // 获胜方数据 repeated Item lostItems = 11; // 战败方数据 } // 通知-PvP战报 回复 message StatPvPReportResp { enum GradeResult { Keep = 0; // 不变(因为骁勇分抵扣) GradeUp = 1; // 段位提升 LevelUp = 2; // 段位等级提升 StarUp = 3; // 等级星级提升 GradeDown = 4; // 掉段 LevelDown = 5; // 降级 StarDown = 6; // 掉星 } enum GradeReason { Win = 0; // 因为获胜 Lost = 1; // 因为战败 BravePoint = 2; // 因为骁勇分保护,所以不掉星 } message Item { int64 uid = 1; // 用户ID string uname = 2; // 用户名 int32 position = 3; // 名次(特指在某一方的名次) float score = 4; // 评分(一位小数) // grade Grade grade = 5; GradeResult gradeResult = 6; // 段位结果 GradeReason gradeReason = 7; // 段位结果原因 } int32 winCamp = 1; // 获胜阵营 1-蓝 2-红 int64 battleId = 2; // 战斗ID repeated Item winItems = 10; // 获胜方数据 repeated Item lostItems = 11; // 战败方数据 } //////////////////// 礼包 enum GiftType { starter = 0; // 新手礼包 subsistence = 1; // 低保 } message GiftPackItem { string packType = 1; // 礼包类型 starter:新手礼包 string packName = 2; // 礼包名称 int64 coin = 3; // 获取的弹币 repeated string title = 4; // 获取的称号 } // 领取礼包 message DrawGiftPackReq { int64 uid = 1; string uname = 2; string giftType = 3; } message DrawGiftPackResp { int64 uid = 1; string uname = 2; GiftPackItem item = 10; } ////////////////////// drawPool // 往福利池中添加福利,扣除自己积分 message IncreaseWelfareReq { int64 uid = 1; // 用户ID string uname = 2; // 用户名 int64 welfare = 3; // 投入值 } ////////////////////// rank message RankPvpReq { pb.vars.RankType type = 1; // rank类型 int32 topN = 2; // TopN } message RankPvpResp { message Item { int64 uid = 1; string uname = 2; int64 score = 3; string avatar = 4; } pb.vars.RankType type = 1; // rank类型 repeated Item items = 2; // rank数据 } // RankPvpSubmitReq 手动排行榜结算 message RankPvpSubmitReq { pb.vars.RankType rankType = 1; // 待结算的排行榜类型 bool allRankType = 2; // 是否直接结算所有排行类型 } message RankPvpSubmitResp { message Result { int64 userId = 1; string username = 2; string avatar = 3; int64 coin = 4; // 获取到的积分数 int64 title = 5; // 获取到的称号ID } message Item { pb.vars.RankType rankType = 1; // 排行榜类型 repeated Result results = 2; // 上榜玩家? } repeated Item items = 1; } // UserRankReq 查询用户自己的排行 message UserRankReq { int64 userId = 1; // 系统用户ID string username = 2; // 用户名 pb.vars.RankType rankType = 3; // 排行榜类型 bool allRankType = 4; // 直接查询所有排行类型 } message UserRankResp { message Item { pb.vars.RankType rankType = 1; // 排行类型 int32 pos = 2; // 名次 int64 score = 3; // 分数 } repeated Item items = 1; } /////////////////////////// zhg message EliteReq { int64 userId = 1; // ID int32 sort = 2; // 序号 } message GiveEliteReq { int64 userId = 1; // ID int64 eliteId = 2; // 精英单位ID int32 duration = 3; // 赠送时长(天) bool forever = 4; // 永久赠送 } message BuyEliteResp { int64 userId = 1; // ID int64 eliteId = 2; // 精英单位ID int64 cost = 3; // 花费 int32 duration = 4; // 持续时间 单位(day) } message GiveTitleReq { int64 userId = 1; // ID int64 titleId = 2; // 精英单位ID int32 duration = 3; // 赠送时长(天) bool forever = 4; // 永久赠送 } message BuyTitleResp { int64 userId = 1; // ID int64 titleId = 2; // 称号ID string name = 3; // 称号名 int64 cost = 4; // 花费 int32 duration = 5; // 持续时间 单位(day) } message ChangeEliteResp { int64 userId = 1; int64 eliteId = 2; } message TitleReq { int64 userId = 1; // ID int32 sort = 2; // 序号 } message ChangeTitleResp { int64 userId = 1; int64 titleId = 2; string name = 3; } service userCenter { /// @ZeroGroup: platform_user // retrievePlatformUser 新增或获取用户 rpc retrievePlatformUser(PlatformUserReq) returns (PlatformUserResp); //getUserDetails 获取用户详细信息 rpc getUserDetails(UserIdReq) returns (UserDetailsResp); // getUserIdByPUid 通过平台用户id获取系统用户ID rpc getUserIdByPUid(PlatformUserReq) returns (UserIdResp); //UserCheckIn 用户签到|打卡 rpc userCheckIn(UserIdReq) returns (UserCheckInResp); /// @ZeroGroup: coin //changeCoin 新增或扣减用户弹币 rpc changeCoin(ChangeCoinReq) returns (Empty); //getUserCoin 获取用户弹币 rpc getUserCoin(UserIdReq) returns (GetUserCoinResp); //transferUserCoin 转移用户弹币 rpc transferUserCoin(TransferUserCoinReq) returns (TransferUserCoinResp); /// @ZeroGroup: gift // UserSendGift 用户赠送礼物 rpc userSendGift(UserSendGiftReq) returns(Empty); rpc userBuyNobility(UserBuyNobilityReq) returns(Empty); /// @ZeroGroup: statistics rpc statPvpReport(StatPvPReportReq) returns (StatPvPReportResp); /// @ZeroGroup: giftPack rpc drawGiftPack(DrawGiftPackReq) returns(DrawGiftPackResp); /// @ZeroGroup: drawPool // rpc increaseWelfare(IncreaseWelfareReq) returns (Empty); /// @ZeroGroup: grade rpc getUserGrade(UserIdReq) returns (UserGradeResp); /// @ZeroGroup: rank // rankPvp pvp排行 rpc rankPvp(RankPvpReq) returns(RankPvpResp); rpc rankPvpSubmit(RankPvpSubmitReq) returns(RankPvpSubmitResp); rpc userRankPvp(UserRankReq) returns (UserRankResp); /// @ZeroGroup: zhg rpc giveElite(GiveEliteReq) returns(BuyEliteResp); rpc buyElite(EliteReq) returns(BuyEliteResp); rpc giveTitle(GiveTitleReq) returns(BuyTitleResp); rpc buyTitle(TitleReq) returns(BuyTitleResp); rpc changeElite(EliteReq) returns(ChangeEliteResp); rpc changeTitle(TitleReq) returns(ChangeTitleResp); }