syntax = "proto3";
option go_package = ".;pb";
import "battle_db.proto";
import "hero_db.proto";
import "google/protobuf/any.proto";

message LineUp {
  string cid = 1; // 配置表id
  int32 star = 2; // 星级
  int32 lv = 3;   // 等级
}

//战斗布阵请求
message BattleFormation {
  int32 leadpos = 1;                //队长位置
  repeated string format = 2;       //自己英雄阵容信息 0-5
  repeated string friendformat = 3; //助战好友
}
// pve 战斗创建请求       (此请求 为服务端间使用 客户端可忽略)
message BattleEVEReq {
  PlayType ptype = 1;            //玩法类型
  string title = 2;              //战斗标题
  BattleFormation format = 3;   //布阵信息
  repeated int32 sysformat = 4;  //系统辅助
  repeated int32 backupformat = 5;  //后援辅助
  repeated int32 buleformat = 6; //蓝方
}
// pve 战斗创建请求       (此请求 为服务端间使用 客户端可忽略)
message BattlePVEReq {
  PlayType ptype = 1;         //玩法类型
  string title = 2;           //战斗标题
  BattleFormation format = 4; //布阵信息
  repeated int32 mformat = 5; //敌方增容信息
}

//战斗布阵请求
message PVPFormation {
  string uid = 1;             //用户id
  int32 leadpos = 2;          //队长位置
  repeated DBHero format = 3; //自己英雄阵容信息 0-5
}
// pvp 异步 战斗创建请求       (此请求 为服务端间使用 客户端可忽略)
message BattlePVPReq {
  PlayType ptype = 1;          //玩法类型
  string title = 2;            //战斗标题
  PVPFormation redformat = 4;  //布阵信息
  PVPFormation buleformat = 5; //布阵信息
}

// pvp 同步 战斗创建请求       (此请求 为服务端间使用 客户端可忽略)
message BattleRTPVPReq {
  PlayType ptype = 1;          //玩法类型
  string title = 2;            //战斗标题
  string redCompId = 6;                 //红方阵营id
  repeated BattleFormation redformat = 7;  //红方阵型列表
  string blueCompId = 8;                //蓝方阵营id
  repeated BattleFormation bulefformat = 9; //红方阵型列表
}


// 连续pve战斗
message BattleLPVEReq {
  PlayType ptype = 1;                     //玩法类型
  string title = 2;                       //战斗标题
  string scene = 3;                       //战斗场景
  BattleFormation format = 4;             //布阵信息
  int32 monsterleadpos = 5;               //队长位置
  repeated BattleRole monsters = 6;       //怪物列表
}


// pvb 战斗创建请求       (工会boos战专用)
message BattlePVBReq {
  PlayType ptype = 1;         //玩法类型
  string title = 2;           //战斗标题
  repeated BattleFormation format = 4; //布阵信息
  repeated int32 mformat = 5; //敌方增容信息
}

//战斗开始推送
message BattleInfo {
  string id = 1;                        //战斗id
  string title = 2;                     //战斗标题
  int32 rulesid = 3;                   //规则id
  BattleType btype = 4;                 //战斗类型
  PlayType ptype = 5;                   //玩法类型
  string redCompId = 6;                 //红方阵营id
  repeated DBBattleFormt redflist = 7;  //红方阵型列表
  string blueCompId = 8;                //蓝方阵营id
  repeated DBBattleFormt buleflist = 9; //红方阵型列表
  repeated int32 tasks = 10;            //任务列表
}

message BattleCmd {
  string cmdtype = 1;
  uint32 index = 2;
  bytes value = 3;
}

//战报数据
message BattleReport {
  BattleInfo info = 1;
  int32 Costtime = 2; //战斗时长 单位ms
  int32 winSide = 3;  //胜利方 1 - red  2 = blue
  repeated BattleCmd incmd = 4;               //输入指令
  repeated BattleCmd outcmd = 5;              //输出指令
  repeated int32 completetask = 6;            //完成任务
  int32 death = 7; // 死亡人数
  int32 round = 8; // 回合数
  int32 harm = 9; //伤害积分
  repeated BattleRole alive = 10;  //存活列表
}

//公用消息结构代码
message BattleRpcMessage {
  uint64 rid = 1;                     //服务回调id
  string method = 2;                  //方法名
  google.protobuf.Any data = 3;       //战斗消息对象
}

//战斗校验结果
message BattleCheckResults {
  bool ischeck = 1;                   //是否校验成功
}

//创建战斗服务 请求
message BattleGetInfoReq {
  string battleid = 1;
}

//创建战斗服务 请求回应
message BattleGetInfoResp {
  string battleid = 1;
  BattleStateInfo info = 2;
}

//创建战斗服务 请求
message BattleCreateServerReq {
  BattleInfo  info= 1;
}

//创建战斗服务 请求回应
message BattleCreateServerResp {
  bool issucc= 1;
}

//创建战斗服务 请求
message BattleInCmdReq {
  string battleid = 1;
  int32 side = 2;
  BattleCmd in = 3;
}


//创建战斗服务 请求
message BattleInCmdResp {
  string battleid = 1;
  BattleCmd in = 2;
  bool issucc = 3;
}

//战斗服务 指令推送
message BattleOutCmdPush {
  string battleid = 1;
  repeated BattleCmd cmd = 2;
}

//战斗服务 结束推送
message BattleFinishPush {
  string battleid = 1;
  int32 winSide = 2;
}


//战斗认输 请求
message BattleConcedeReq {
  string battleid = 1;
  int32 side = 2;
}


// 战斗认输  回应
message BattleConcedeResp {
  bool issucc = 1;
}

//战斗状态数据
message BattleStateInfo
{
  BattleInfo info = 1;
  repeated BattleCmd outCmds = 2;
  repeated BattleCmd inputCmds = 3;
}