local Attr = require("role.Proto").Attr
local RoleBase = require("role.Proto").RoleBase 
local ItemData = require("bag.Proto").ItemData
local HeroSimple = require("hero.Proto").HeroSimple
local MoshouSkill = require("moshou.Proto").MoshouSkill

CG_COMBAT_POS_QUERY = {
	{"type",	1,		"byte"},--阵容类型
	{"groupID",	1,		"byte"},--0 查询某个战斗类型，type为阵容类型 ，不等于0，查询某个组
    {"param",	1,		"string"},--0 查询参数
}

--上阵英雄战力
CombatHeroZdl={
    {"uuid",	1,		"string"},
    {"zdl",	    1,		"int"},
}

--上阵英雄结构体
CombatPosNet = {
	{"pos"	,		1,		"byte"},--坑位序号
	{"bagIndex"	,	1,		"int"},--英雄背包索引
    {"uuid"	,	    1,		"string"},--英雄标识
}
--辅助结构体（援兵，魔兽，神女，神龙）
CombatPosHelpNet = {
	{"type"	,		1,		"byte"},--辅助类型
	{"id"	,		1,		"byte"},--辅助id
	{"icon"	,		1,		"byte"},--辅助图标
}

CombatTypeNet = {
	{"type",	1,		"byte"},--战斗类型
	{"name",	1,		"string"},--战斗类型名字
	{"needLv",  1,      "int"},   -- 布阵所需要等级
    {"isQuickTime",	1,	"string"},      --跳过设置
}

GC_COMBAT_POS_QUERY = {
	{"list",		20,	CombatTypeNet},
	{"formation",	1,	"short"},		  --阵法
	{"heroList",	6,	CombatPosNet},	  --上阵英雄列表
	{"helpList",	6,	CombatPosHelpNet},--辅助对象列表
	{"type",	1,		"byte"},          --战斗类型
    {"mapID",	1,		"short"},         --布阵地图
    {"backUpLock",	1,	"byte"},          --援军是否已解锁
    {"jibanLv",	1,		"short"},         --羁绊所需等级
    {"flag",	1,		"byte"},          --请求标志
    {"teamType",	1,	"byte"},          --阵容共享
    {"moshouLock",	1,	"byte"},          --魔兽开启
    {"moshouSkill",	1,	"string"},        --魔兽开启
    {"totalZdl",	1,	"int"},           --战斗力
	{"elfSystemState",	1,	"byte"},      -- 精灵系统状态, 0 - 未解锁, 1 -  已解锁
}

POS_ATTR_DATA = {
	{"posAttr",	2,	Attr},           --战斗力
}



CG_COMBAT_FORMATION_QUERY = {}
CombatFormationNet = {
	{"id",			1,		"byte"},   -- 阵法id
	{"name",		1,		"string"}, -- 阵法名字
	{"icon",		1,		"int"},	   -- 阵法图标
	{"lv",			1,		"int"},    -- 阵法解锁等级
	{"list",		9,		"byte"},   -- 阵法可用位置
	{"posAttrLit",	9,		POS_ATTR_DATA}, --阵法位置属性加成列表
}
GC_COMBAT_FORMATION_QUERY = {
	{"list",	10,	CombatFormationNet},
	{"lv",			1,		"int"},    -- 玩家等级
}

CG_COMBAT_POS_UPDATE = {
	{"type",	1,		"byte"},--阵容类型
	{"formation",	1,	"short"},--阵法
	{"heroList"	,	1,		"string"},--上阵英雄
	{"helpList"	,	1,		"string"},--辅助对象
}

GC_COMBAT_POS_UPDATE = {
	{"type",	1,		"byte"},--阵容类型
    {"teamType",	1,		"byte"},--阵容类型
}

CG_COMBAT_POS_ATTR_QUERY = {
}
CombatPosAttrSubNet = {
	{"cnt",	1,	"byte"},
	{"attrs",	4,	    Attr},
}
CombatPosAttrNet = {
	{"camp",	1,	"byte"},
	{"name",    1,  "string"},   -- 阵营光环名字
	{"list",	5,	CombatPosAttrSubNet},
}
GC_COMBAT_POS_ATTR_QUERY = {
	{"list",	6,	CombatPosAttrNet},--阵营光环属性
	{"attrs",	4,	    Attr},--克制属性
}

-- 设置战斗跳过
CG_COMBAT_SET_QUICK = {
	{"combatType",	1,		"byte"},
	{"isQuick",		1,		"byte"},	
}


-- 战斗开始
CG_COMBAT_BEGIN = {
	{"param",		1,		"string"},
	{"combatType",	1,		"byte"},
	{"nServerIndex",1,		"int"}
}

CombatSkillConf = {
	{"skillID",			1,		"int"},
	{"fireType",		1,		"short"},
	{"readyAction",		1,		"string"},
	{"attackPart",		1,		"string"},
	{"attackAction",	1,		"string"},
	{"readyEffect",		1,		"string"},
	{"attackEffect",	1,		"string"},
	{"hitEffect",		1,		"string"},
	{"flyEffect",		1,		"string"},
	{"flyCoords",       1,      "string"},
	{"quake",		1,		"string"},
	{"hitBack",		1,		"int"},
	{"effectTime",		1,		"short"},
	{"contentType",		1,		"byte"},
	{"content",		1,		"string"},
	{"fireSound",			1,		"int"},
	{"movieEffect",		1,		"byte"},
	{"flySound",			1,		"int"},
	{"hitSound",			1,	"string"},
	{"cvSound",			1,		"int"},
    {"screenMask",			1,	"string"},
    {"screenCam",			1,	"string"},
    {"largeEffect",     1,  "string"},
    {"lie",             1,  "string"},
    {"cuoZhen",		    1,		"short"},
    {"skillDelay",		1,		"short"},
    {"isFraming",		1,		"byte"},
}

CombatCmdConf = {
	{"cmd",			1,		"int"},
	{"hitEffect",		1,		"string"},
	{"hitSound",	1,		"int"},
}

CombatBufferConf = {
	{"bufferID",	1,		"int"},
	{"name",	1,		"string"},
	{"desc",	1,		"string"},
	{"icon",	1,		"string"},
	{"keepEffect",	1,		"string"},
	{"hitEffect",	1,		"string"},
	{"validateEffect",	1,		"string"},
	{"dieEffect",	1,		"string"},
	{"cmd",	1,		"string"},
	{"hitSound",	1,		"int"},
	{"holdOnDie",	1,		"byte"},--死亡是否保留
	{"effectOffset",	1,		"string"},--特效偏移
    {"canAppend",	1,		"byte"},--
    {"appendCnt",	1,		"byte"},--
}

CombatHeroNet = {
	{"pos",			1,		"byte"},	-- 需要跟客户端商定一下，暂定1-6己方 7-12敌方
	{"heroID",		1,		"int"},		-- 英雄id
	{"icon",		1,		"int"},
	{"width"	,	1,		"short"},
	{"height"	,	1,		"short"},
	{"star"	,		1,		"short"},
	{"lv"	,		1,		"short"},	-- 等级
	{"camp",		1,		"byte"},	-- 阵营
	{"name",		1,		"string"},
	{"body",		1,		"int"},		-- 形象
	{"hpMax",		1,		"double"},	-- 最大血量
	{"hpNow",		1,		"double"},	-- 当前血量
	{"size",		1,		"int"},
	{"posX",		1,		"short"},
	{"posY",		1,		"short"},
	{"isBoss",		1,		"byte"},	-- 会加光效，但是代码没实现，迟点看情况加
    {"isGongMing",	1,		"byte"},	-- 是否共鸣
    {"grade",		1,		"byte"},	-- 确定是否是ssr 用于特殊表现
	{"sayList",		20,		"int"},
}

CombatHelpNet = {
	{"pos",			1,		"byte"},
	{"id",		    1,		"int"},
	{"head",		1,		"int"},
	{"body",		1,		"int"},
	{"args",		10,		"int"},		-- 其他参数
    {"skill",		2,		MoshouSkill},		-- 
}

GC_COMBAT_BEGIN = {
	{"isLogin",			1,		"byte"}, -- 是否登录时下发 客户端需要
	{"combatType",		1,		"byte"}, -- 战斗类型
	{"keepTime",		1,		"short"},-- 服务端经过了多少时间
	{"heros",			12,		CombatHeroNet}, 	-- 对战英雄信息(站位)
	{"helps",			10,		CombatHelpNet}, 	-- 对战辅助对象信息(站位), 精灵数据也放这里, 目前两方辅助之和最多2个，两方精灵之和最多8个
	{"mapID",			1,		"int"},				-- 战斗场景
	{"skillList",		60,	    CombatSkillConf},	-- 战斗中使用过的技能
	{"cmdList",			16,		CombatCmdConf},	    -- 战斗中使用过的作用
	{"bufferList",		70,	    CombatBufferConf},	-- 战斗中使用过的技能
	{"speed",			1,		"byte"},
	-- {"attrsAtk",	    10,	     Attr},
	-- {"attrsDef",	    10,	     Attr},
	{"atkName",		    1,	     "string"},
	{"defName",		    1,	     "string"},
    {"atkUuid",		    1,	     "string"},
	{"defUuid",		    1,	     "string"},
	{"maxRound",		1,		"short"},
    {"isVideo",		    1,		"byte"},
	-- {"petCD",		    1,		"short"},
	-- {"atkJibanDesc",	1,		"string"},
	-- {"defJibanDesc",	1,		"string"},
    {"atkFormation",	1,		"short"},
    {"defFormation",	1,		"short"},
    {"isQuick",	        1,		"byte"},
	-- {"backup",			2,		"byte"},	--第一个是攻方援军的站位，第二个是守方援军的站位。0值表示援军还没上
	--{"isBoss",			1,		"byte"},		-- 敌方是否是boss
}

GC_COMBAT_JiBan_DESC = {
	{"atkJibanDesc",	1,		"string"},
	{"defJibanDesc",	1,		"string"},
}


CombatHitNet = {
	{"pos",			1,		"byte"},
	{"flag",		1,		"byte"},
	{"cmd",			1,		"byte"},
	{"hpNow",		1,	    "double"},
	{"attrs",		10,		Attr},
}

CombatPetNet = {
	{"pos",			1,		"byte"},
}

CombatSkillData = {
	{"attackPos",	1,		"byte"},
	{"skillID",		1,		"int"},	
	{"hitList",		12,		CombatHitNet},	
	{"extraList",		12,		CombatHitNet},
	{"helpList",     12,    CombatPetNet},
}

CombatBufferNet = {
	{"op",			1,		"byte"},--1 添加 2 持续 3 删除
	{"bufferID",	1,		"int"},
	{"cnt",			1,		"short"},
	{"round",		1,		"short"},
	{"hpNow",		1,		"double"},
	{"attrs",		10,		Attr},
}

CombatBufferData = {
	{"pos",			1,		"byte"},
	{"list",		40,		CombatBufferNet},
}

CombatSayData = {
	{"pos",			1,		"byte"},
	{"skillID",		1,		"int"},	
}

CombatFrameNet = {
	{"round",		1,		"byte"},			-- 回合，从1开始
	{"petCD",		1,		"byte"},			-- 魔兽技能cd
	{"skillList",	12,		CombatSkillData},
	{"bufferList",	12,		CombatBufferData},
	{"sayList",		36,		CombatSayData},	--喊话技能列表	
}

GC_COMBAT_FRAME = {
	{"isLogin",			1,		"byte"}, -- 是否登录时下发 客户端需要
	{"isEnd",		1,		"byte"},			-- 是否最后一帧
	{"combatType",	1,		"byte"},			-- 战斗类型	 reyes test
	{"frames",		60,		CombatFrameNet},	-- 战斗过程	
}

CombatResultNet = {
	{"pos",			1,		"byte"},
	{"hurt",		1,		"double"},--输出
	{"hp",			1,		"double"},--治疗
	{"beHurt",      1,		"double"},--承受伤害
	{"bout",        1, 		"int"},--出手回合数
	{"isDie",       1, 		"byte"},
	{"heroID",		1,		"int"},
	{"head",		1,		"int"},
	{"lv",			1,		"short"},
	{"camp",		1,		"byte"},
	{"star",		1,		"byte"},
    {"name",		1,		"string"},
    {"body",		1,		"string"},
    {"grade",       1,      "byte"}, --评级
}

--
CombatFinishData = {
	{"ret",			1,		"byte"},	-- 1 胜利 2 失败
	{"type",		1,		"byte"},	--战斗类型
	{"self",    	1,      RoleBase},
	{"target",		1,		RoleBase},
	{"items",		20,		ItemData},
	{"result",		22,		CombatResultNet},
	{"param",		1,		"string"},
	{"isVideo",		1,		"byte"},
	{"lookType",	1,		"byte"},	--查看途径 0-原始 1-聊天 2-个人记录
	{"panelIDs",	5,		"short"},
    {"isQuick",	    1,		"byte"},
    {"combatTime",	1,		"short"},
	{"double",      1,      "byte"},     -- 是否为福利 双倍
    {"oldLv",		1,		"short"},    -- 历史等级
	{"nBattleType", 1,		"short"},	 -- 战斗类型，当type 为1主线时有用
	{"nextCombatType", 1,	"short"},	 -- 战斗类型，对应combat配置表中combat分页的id。用于多队伍战斗，为0表示不用继续挑战，非0表示需要继续挑战
}


-- 战斗结果
GC_COMBAT_FINISH = {
	{"data",		1,		CombatFinishData},
}

-- 战斗结束，返回记录Uuid
GC_COMBAT_RETURN_RECORD = {
    {"videoUuid",1,"string"},
    {"type",1,"byte"},
}

-- 战斗播放速度 1or2
CG_COMBAT_SPEED = {
	{"speed",		1,	"byte"},
}

GC_COMBAT_SPEED = {
	{"speed",		1,	"byte"},
}



-- 个人战斗记录列表
CG_COMBAT_VIDEO_QUERY = {}
CombatVideoData = {
	{"videoUuid",  	1, 		"string"},	
	{"combatTime", 	1,  	"int"},
	{"isWin", 		1, 		"int"},
	{"type",		1, 		"int"},
    {"atkRoleBase",	1,		RoleBase},
    {"defRoleBase",	1,		RoleBase},
}
GC_COMBAT_VIDEO_QUERY = {
	{"list",   		50, 	CombatVideoData}
}

-- 保存
CG_COMBAT_SAVE_VIDEO = {}

-- 删除
CG_COMBAT_DEL_VIDEO = {
	{"videoUuid",  	1, 	"string"},
}

-- 战斗记录回放 
CG_COMBAT_LOOK_VIDEO = {
	{"videoUuid",  	1, 	"string"},	
	{"lookType",	1,	"byte"},		--查看途径 0-原始 1-聊天 2-个人记录
}

-- 客户端播放战斗过程结束 reyes test
CG_COMBAT_CLIENT_FINISH = {
	{"type",		1,		"byte"},	--战斗类型
}


-- 客户端播放战斗过程的时间设置
CG_COMBAT_CLIENT_PASS_TIME = {
	{"type",		1,		"byte"},	--战斗类型
    {"passTime",    1,		"short"},	    --服务端时间
}


CG_JIBAN_QUERY = {
	{"combatType",	1,		"byte"},
	{"heroID",		1,		"int"},
}

JibanInfoNet = {
	{"id",		1,		"short"},
	{"quality",		1,		"byte"},
	{"name",		1,		"string"},
	{"desc",		1,		"string"},
	{"heroList",		10,		HeroSimple},
}


JibanPosNet = {
	{"id",		1,		"short"},
	{"hero",	1,		HeroSimple},
	{"isOpen",	1,		"byte"},	--0 未解锁 1 已解锁
	{"tip",		1,		"string"},	--提示
    {"sort",	1,		"byte"},	--提示
}

GC_JIBAN_QUERY = {
	{"jibanList",	20,	JibanInfoNet},
	{"posList",	5,	JibanPosNet}
}

GC_JIBAN_QUERY_ALL = {
	{"posList",	5,	JibanPosNet},
    {"type",	1,	"byte"}
}



CG_JIBAN_PREVIEW = {}
GC_JIBAN_PREVIEW = {
	{"list",	40,	JibanInfoNet},
	{"isend", 	1, 	"byte"},
}


CG_JIBAN_UPDATE = {
	{"combatType",	1,		"byte"},
	{"jibanList",	1,		"string"},--羁绊英雄uuid, 如果某个位置没有英雄, 则该位置的英雄唯一Id为"", heroId 为0
	{"heroIdArr",	1,		"string"} --羁绊英雄Id数组
}
GC_JIBAN_UPDATE = {

}

CG_HERO_UPDATE_ALL_POS = {
    {"uuid",	1,		"string"},
}

GC_HERO_UPDATE_ALL_POS = {
}

CG_HERO_UPDATE_ZDL = {
    {"uuid",	1,		"string"},
}

GC_HERO_UPDATE_ZDL = {
    {"list",	10,		CombatHeroZdl},
}


-----------------------------精灵布阵------------------------

ELF_POS_INFO = {
	{"elfId",			1,		"int"},      	-- 精灵Id
	{"nowSkillDesc",	1,		"string"},  	-- 当前技能说明
	{"nowSkillIcon",	1,		"string"},  		-- 当前技能Icon
}


-- 查询精灵布阵数据
CG_COMBAT_ELFPOS_QUERY = {
	{"combatType",			1,		"byte"},	--战斗类型
}
GC_COMBAT_ELFPOS_QUERY = {
	{"elfPosArr",		4,		ELF_POS_INFO},	--阵容数据
}

-- 精灵布阵
CG_COMBAT_ELFPOS_DO = {
	{"combatType",			1,		"byte"},	-- 战斗类型
	{"elfPosArr",			4,		"int"},		-- 数组, key对应位置, value为精灵Id,如果当前位置没有精灵上阵,value为0
}