Skip to content

MY Recount Data Structure

Emil Zhai edited this page Jun 1, 2020 · 1 revision

主数据结构

local DK = {
	UUID        =  1, -- 战斗唯一标识
	BOSSNAME    =  2, -- 日志名字
	VERSION     =  3, -- 数据版本号
	TIME_BEGIN  =  4, -- 战斗开始时间
	TICK_BEGIN  =  5, -- 战斗开始毫秒时间
	TIME_DURING =  6, -- 战斗持续时间
	TICK_DURING =  7, -- 战斗持续毫秒时间
	AWAYTIME    =  8, -- 死亡/掉线时间节点
	NAME_LIST   =  9, -- 名称缓存
	FORCE_LIST  = 10, -- 势力缓存
	EFFECT_LIST = 11, -- 效果信息缓存
	DAMAGE      = 12, -- 输出统计
	HEAL        = 13, -- 治疗统计
	BE_HEAL     = 14, -- 承疗统计
	BE_DAMAGE   = 15, -- 承伤统计
	EVERYTHING  = 16, -- 战斗复盘
	ABSORB      = 17, -- 化解统计
	PLAYER_LIST = 18, -- 玩家信息缓存
	SERVER      = 19, -- 所在服务器
	MAP         = 20, -- 所在地图
}

统计数据(输出、治疗、承伤、承疗、化解)

DK.DAMAGE, DK.HEAL, DK.BE_HEAL, DK.BE_DAMAGE, DK.ABSORB

local DK_REC = {
	TIME_DURING  = 1,
	TOTAL        = 2,
	TOTAL_EFFECT = 3,
	STAT         = 4,
}

统计数据内容

DK_REC.STAT

local DK_REC_STAT = {
	TOTAL        = 1,
	TOTAL_EFFECT = 2,
	DETAIL       = 3,
	SKILL        = 4,
	TARGET       = 5,
}

统计数据内容按状态分类

DK_REC_STAT.DETAIL

local DK_REC_STAT_DETAIL = {
	COUNT         =  1, -- 命中记录数量(假设nSkillResult是命中)
	NZ_COUNT      =  2, -- 非零值命中记录数量
	MAX           =  3, -- 单次命中最大值
	MAX_EFFECT    =  4, -- 单次命中最大有效值
	MIN           =  5, -- 单次命中最小值
	NZ_MIN        =  6, -- 单次非零值命中最小值
	MIN_EFFECT    =  7, -- 单次命中最小有效值
	NZ_MIN_EFFECT =  8, -- 单次非零值命中最小有效值
	TOTAL         =  9, -- 所有命中总伤害
	TOTAL_EFFECT  = 10, -- 所有命中总有效伤害
	AVG           = 11, -- 所有命中平均伤害
	NZ_AVG        = 12, -- 所有非零值命中平均伤害
	AVG_EFFECT    = 13, -- 所有命中平均有效伤害
	NZ_AVG_EFFECT = 14, -- 所有非零值命中平均有效伤害
}

统计数据内容按技能分类

DK_REC_STAT.SKILL

local DK_REC_STAT_SKILL = {
	COUNT         =  1, -- 该玩家四象轮回释放次数(假设szEffectName是四象轮回)
	NZ_COUNT      =  2, -- 该玩家非零值四象轮回释放次数
	MAX           =  3, -- 该玩家四象轮回最大输出量
	MAX_EFFECT    =  4, -- 该玩家四象轮回最大有效输出量
	TOTAL         =  5, -- 该玩家四象轮回输出量总和
	TOTAL_EFFECT  =  6, -- 该玩家四象轮回有效输出量总和
	AVG           =  7, -- 该玩家所有四象轮回平均伤害
	NZ_AVG        =  8, -- 该玩家所有非零值四象轮回平均伤害
	AVG_EFFECT    =  9, -- 该玩家所有四象轮回平均有效伤害
	NZ_AVG_EFFECT = 10, -- 该玩家所有非零值四象轮回平均有效伤害
	DETAIL        = 11, -- 该玩家四象轮回输出结果分类统计
	TARGET        = 12, -- 该玩家四象轮回承受者统计
}

统计数据内容按技能分类后再按类型分类

DK_REC_STAT_SKILL.DETAIL

local DK_REC_STAT_SKILL_DETAIL = {
	COUNT         =  1, -- 命中记录数量
	NZ_COUNT      =  2, -- 非零值命中记录数量
	MAX           =  3, -- 单次命中最大值
	MAX_EFFECT    =  4, -- 单次命中最大有效值
	MIN           =  5, -- 单次命中最小值
	NZ_MIN        =  6, -- 单次非零值命中最小值
	MIN_EFFECT    =  7, -- 单次命中最小有效值
	NZ_MIN_EFFECT =  8, -- 单次非零值命中最小有效值
	TOTAL         =  9, -- 所以命中总伤害
	TOTAL_EFFECT  = 10, -- 所有命中总有效伤害
	AVG           = 11, -- 所有命中平均伤害
	NZ_AVG        = 12, -- 所有非零值命中平均伤害
	AVG_EFFECT    = 13, -- 所有命中平均有效伤害
	NZ_AVG_EFFECT = 14, -- 所有非零值命中平均有效伤害
}

统计数据内容按技能分类后再按目标分类

DK_REC_STAT_SKILL.TARGET

local DK_REC_STAT_SKILL_TARGET = {
	MAX          = 1, -- 该玩家四象轮回击中的这个玩家最大伤害
	MAX_EFFECT   = 2, -- 该玩家四象轮回击中的这个玩家最大有效伤害
	TOTAL        = 3, -- 该玩家四象轮回击中的这个玩家伤害总和
	TOTAL_EFFECT = 4, -- 该玩家四象轮回击中的这个玩家有效伤害总和
	COUNT        = 5, -- 该玩家四象轮回击中的这个玩家结果统计
	NZ_COUNT     = 6, -- 该玩家非零值四象轮回击中的这个玩家结果统计
}

统计数据内容按目标分类

DK_REC_STAT.TARGET

local DK_REC_STAT_TARGET = {
	COUNT         =  1, -- 该玩家对idTarget的技能释放次数
	NZ_COUNT      =  2, -- 该玩家对idTarget的非零值技能释放次数
	MAX           =  3, -- 该玩家对idTarget的技能最大输出量
	MAX_EFFECT    =  4, -- 该玩家对idTarget的技能最大有效输出量
	TOTAL         =  5, -- 该玩家对idTarget的技能输出量总和
	TOTAL_EFFECT  =  6, -- 该玩家对idTarget的技能有效输出量总和
	AVG           =  7, -- 该玩家对idTarget的技能平均输出量
	NZ_AVG        =  8, -- 该玩家对idTarget的非零值技能平均输出量
	AVG_EFFECT    =  9, -- 该玩家对idTarget的技能平均有效输出量
	NZ_AVG_EFFECT = 10, -- 该玩家对idTarget的非零值技能平均有效输出量
	DETAIL        = 11, -- 该玩家对idTarget的技能输出结果分类统计
	SKILL         = 12, -- 该玩家对idTarget的技能具体分别统计
}

统计数据内容按目标分类后再按类型分类

DK_REC_STAT_TARGET.DETAIL

local DK_REC_STAT_TARGET_DETAIL = {
	COUNT         =  1, -- 命中记录数量(假设nSkillResult是命中)
	NZ_COUNT      =  2, -- 非零值命中记录数量
	MAX           =  3, -- 单次命中最大值
	MAX_EFFECT    =  4, -- 单次命中最大有效值
	MIN           =  5, -- 单次命中最小值
	NZ_MIN        =  6, -- 单次非零值命中最小值
	MIN_EFFECT    =  7, -- 单次命中最小有效值
	NZ_MIN_EFFECT =  8, -- 单次非零值命中最小有效值
	TOTAL         =  9, -- 所以命中总伤害
	TOTAL_EFFECT  = 10, -- 所有命中总有效伤害
	AVG           = 11, -- 所有命中平均伤害
	NZ_AVG        = 12, -- 所有非零值命中平均伤害
	AVG_EFFECT    = 13, -- 所有命中平均有效伤害
	NZ_AVG_EFFECT = 14, -- 所有非零值命中平均有效伤害
}

统计数据内容按目标分类后再按技能分类

DK_REC_STAT_TARGET.SKILL

local DK_REC_STAT_TARGET_SKILL = {
	MAX          =  1, -- 该玩家击中这个玩家的四象轮回最大伤害
	MAX_EFFECT   =  2, -- 该玩家击中这个玩家的四象轮回最大有效伤害
	TOTAL        =  3, -- 该玩家击中这个玩家的四象轮回伤害总和
	TOTAL_EFFECT =  4, -- 该玩家击中这个玩家的四象轮回有效伤害总和
	COUNT        =  5, -- 该玩家击中这个玩家的四象轮回结果统计
	NZ_COUNT     =  6, -- 该玩家非零值击中这个玩家的四象轮回结果统计
}

类型枚举

local SKILL_RESULT = {
	HIT     = 0, -- 命中
	BLOCK   = 1, -- 格挡
	SHIELD  = 2, -- 无效
	MISS    = 3, -- 偏离
	DODGE   = 4, -- 闪避
	CRITICAL= 5, -- 会心
	INSIGHT = 6, -- 识破
}
local NZ_SKILL_RESULT = {
	[SKILL_RESULT.BLOCK ] = true,
	[SKILL_RESULT.SHIELD] = true,
	[SKILL_RESULT.MISS  ] = true,
	[SKILL_RESULT.DODGE ] = true,
}
local AWAYTIME_TYPE = {
	DEATH          = 0,
	OFFLINE        = 1,
	HALFWAY_JOINED = 2,
}
local EVERYTHING_TYPE = {
	SKILL_EFFECT = 1,
	FIGHT_TIME = 2,
	DEATH = 3,
	ONLINE = 4,
	BUFF_UPDATE = 5,
	ENTER_LEAVE_SCENE = 6,
	SYS_MSG = 7,
	PLAYER_SAY = 8,
	WARNING_MESSAGE = 9,
	FIGHT_HINT = 10,
}

复盘数据

每一条都是独立的复盘记录,其中前四位数据固定格式,第五位为不同类型枚举,根据第五位类型继续解析后续不定长度数据,具体结构如下:

-- 通用部分
nLFC, nTime, nTick, szName

-- 技能效果
EVERYTHING_TYPE.SKILL_EFFECT, dwCaster, dwTarget,
	nEffectType, dwEffectID, dwEffectLevel, szEffectID,
	nSkillResult, nTherapy, nEffectTherapy, nDamage, nEffectDamage,
	tResult

-- 战斗状态
EVERYTHING_TYPE.FIGHT_TIME, bFighting, szUUID, nDuring

-- 角色死亡
EVERYTHING_TYPE.DEATH, dwID, dwKiller, szName, szKillerName

-- 角色在线状态改变
EVERYTHING_TYPE.ONLINE, dwID, bOnline, szName

-- 气劲获得、消失
EVERYTHING_TYPE.BUFF_UPDATE,
	dwCaster, dwTarget, dwBuffID, dwBuffLevel, szEffectID, bDelete, nStackNum, nEndFrame, bCanCancel)

-- 角色进入、离开场景
-- nEnter = 0 | 1
-- dwType = TARGET.NPC | TARGET.PLAYER
EVERYTHING_TYPE.ENTER_LEAVE_SCENE, nEnter
	dwType, dwID, szName, dwTemplateID,
	nCurrentLife, nMaxLife, nCurrentMana, nMaxMana

-- 系统消息
EVERYTHING_TYPE.SYS_MSG, szMsg

-- 系统角色聊天发言
EVERYTHING_TYPE.PLAYER_SAY, szContent, dwNpcID, szNpcName, dwNpcTemplateID

-- 系统警告框
EVERYTHING_TYPE.WARNING_MESSAGE, szContent

-- 战斗状态改变
EVERYTHING_TYPE.FIGHT_HINT,
	dwType, dwID, bFight,
	szName, dwTemplateID,
	nCurrentLife, nMaxLife, nCurrentMana, nMaxMana