Table of Contents

Protobuf示例


编译

先确保版本一致:

protoc --version

编译C++版本的:

protoc --cpp_out=. Message.proto

代码

// Protobuf Version 3.5.0

syntax = "proto3";

// 注册请求
message PRegisterRequest
{
  string UserName = 1; // 用户名
  string PassWord = 2; // 密码
}

// 注册结果
message PRegisterRespond
{
  int32 Success = 1; // 是否注册成功了,1表示成功
  int32 ErrorCode = 2; // 如果注册失败了,这个数字表示发生了哪种错误
}

// 登录请求
message PLoginRequest
{
  string UserName = 1; // 用户名
  string PassWord = 2; // 密码
}

// 登录结果
message PLoginRespond
{
  int32 Success = 1; // 是否登录成功了,1表示成功
  int32 ErrorCode = 2; // 如果登录失败了,这个数字表示发生了哪种错误
}

// 客户端请求匹配
message PMatchRequest
{
  int32 HeroID = 1; // 选择的哪个人物,1-4
  int32 SkinID = 2; // 选择的哪个皮肤,1-4
}

// 客户端请求取消匹配
// message PCancelMatchRequest { }

// 服务器已经找到了匹配
// 注意这个消息的大小
// 匹配到游戏之后客户端就告诉玩家,5S后进入游戏,然后加载游戏
// 游戏加载好之后,通知服务器,客户端先禁止玩家操作
// 等其他玩家都加载好之后,服务器统一说开始
message PMatchFoundRespond
{
  // 找到的其他玩家的信息
  message POtherPlayerInfo
  {
    int32 PlayerID = 1; // 其他玩家ID
    string PlayerName = 2;
    int32 HeroID = 3;
    int32 SkinID = 4;
  }
  
  int32 PlayerID = 1; // 分配给本客户端的ID,是在本局游戏中的ID,1-4
  repeated POtherPlayerInfo OtherPlayers = 2; // 应该重复3次
}

// 客户端地图已经加载完成,等待其他玩家中
// message PMapLoadedRequest { }

// 所有玩家都已经加载完成了,可以开始游戏了
// message PAllPlayerLoadedRespond { }

// 客户端移动
message PPlayerMoveRequest
{
  float X = 1;
  float Y = 2;
}

// 服务器分发的某个玩家移动
message PPlayerMoveRespond
{
  int32 PlayerID = 1;
  float X = 2;
  float Y = 3;
}

// 客户端转向
message PPlayerTurnRequest
{
  float X = 1;
  float Y = 2;
}

// 服务器分发的某个玩家转向
message PPlayerTurnRespond
{
  int32 PlayerID = 1;
  float X = 2;
  float Y = 3;
}

// 客户端的血量或者血量上限变化,受伤、回复、购买提升生命上限的装备的时候都会发送
// 只有自己有权限更改自己的血量
message PPlayerHealthRequest
{
  float HealthMax = 1;
  float HealthRemain = 2;
}

// 服务器分发的血量变化消息
message PPlayerHealthRespond
{
  int32 PlayerID = 1;
  float HealthMax = 2;
  float HealthRemain = 3;
}

// 玩家动作
message PPlayerActionRequest
{
  float LocationX = 1;
  float LocationY = 2;
  float TargetX = 3;
  float TargetY = 4;
  int32 ActionID = 5;
}

// 服务器广播的玩家动作
message PPlayerActionRespond
{
  int32 PlayerID = 1;
  float LocationX = 2;
  float LocationY = 3;
  float TargetX = 4;
  float TargetY = 5;
  int32 ActionID = 6;
}

// 玩家购买物品获得增益,现在只有提升伤害一种Buff
message PPlayerBuffRequest
{
  float Scale = 1; // 伤害倍率
}

// 服务器广播某个玩家获得增益
message PPlayerBuffRespond
{
  int32 PlayerID = 1;
  float Scale = 2;
}

// 某个客户端击杀了某个野怪
message PMonsterKilledRequest
{
  int32 MonsterID = 1;
}

// 经过服务器的判重,确定某个客户端击杀了某个野怪
message PMonsterKilledRespond
{
  int32 PlayerID = 1;
  int32 MonsterID = 2;
}

// 客户端自己被击杀了
// 只有自己有权限发自己被击杀了
message PKilledRequest
{
  int32 OtherPlayerID = 1; // 被谁击杀的,有可能为0,是被毒死的
}

// 有玩家被击杀了
message PKilledRespond
{
  int32 DiedPlayerID = 1; // 谁被击杀了
  int32 KillerID = 2; // 谁击杀的,有可能为0,玩家被毒死的,或者短线了,就当他死了
}

// 心跳检测,定时发送
// message PHeart { }

// 玩家信息
message PPlayerInfo
{
  // 在下面增加
}