%%% -------------------------------------------------------
|
|
%%% @author huangyongxing@yeah.net
|
|
%%% @doc
|
|
%%% 怪物相关数据结构定义
|
|
%%% @end
|
|
%%% -------------------------------------------------------
|
|
-ifndef(MON_HRL).
|
|
-define(MON_HRL, ok).
|
|
|
|
%% 场景对象空状态驱动事件的值(state_driven的empty值)
|
|
-define(EMPTY_STATE_DRIVEN, {0, undefined}).
|
|
|
|
%% 场景对象在进程字典中存储的状态数据
|
|
-record(obj_state_data, {
|
|
obj_data = undefined % #ob_act{}
|
|
,obj_state = sleep
|
|
}).
|
|
|
|
%% 场景怪物(用于在告诉客户端怪物在哪个场景)
|
|
-record(ets_scene_mon, {
|
|
id = 0, % 怪物ID
|
|
scene = 0, % 场景
|
|
name = <<>>, % 场景名称
|
|
mname = <<>>, % 怪物名字
|
|
kind = 0, % 怪物类型
|
|
x = 0, % X坐标
|
|
y = 0, % Y坐标
|
|
lv = 0, % 怪物等级
|
|
out = 0 % 是否挂机
|
|
}).
|
|
|
|
%% 怪物配置
|
|
-record(mon, {
|
|
id = 0, % 怪物配置id
|
|
rem_flag = 0, % 配置拆解literal专用,它处勿用,无其他意义
|
|
name = "", % 怪物名字
|
|
kind = 0, % 怪物类型 0:怪物、1:采集怪、2:任务采集怪、3:护送车队、4:拾取型、5:赏金怪、6:进击怪、7:塔防怪、8:不死采集怪
|
|
boss = 0, % BOSS类型: 0普通怪 1普通野外怪 2精英怪物,3本服BOSS 4跨服BOSS 5活动BOSS 6副本BOSS
|
|
type = 0, % 战斗斗类型(0被动,1主动)
|
|
career = 0, % 职业0,没职业
|
|
color = 0, % 颜色(0白,1绿,2蓝,3紫,4橙,5红,6粉) ,
|
|
auto = 0, % 0-读怪物表属性,1-服务器等级,2-队伍平均等级,3-队长等级(无组队时默认是队长),需要读怪物动态属性表
|
|
icon = 0, % 资源id
|
|
icon_effect = <<>>, % 怪物资源特效
|
|
icon_texture = 0, % 贴图id
|
|
weapon_id = 0, % 武器模型id
|
|
% icon_scale = 0, % 资源缩放[1.0-]
|
|
% foot_icon = 0, % 脚下资源id
|
|
% desc = <<>>, % 默认对话[怪物说话的时间间隔, {怪物说的话1,概率},...]
|
|
lv = 0, % 等级
|
|
hp_lim =0, % 血上限
|
|
att = 0, % 攻击
|
|
def = 0, % 防御
|
|
hit = 0, % 命中
|
|
dodge = 0, % 躲闪
|
|
crit = 0, % 暴击
|
|
ten = 0, % 坚韧
|
|
special_attr = [], % 特定属性[{AttrType, AttrValue}] = [{属性类型,属性值}]
|
|
resum = 0, % 回血配置,[回血模式,回复量,时间]回血模式:0不回血;1脱离战斗状态立刻回满血;2战斗中持续回复;3脱离战斗后持续回复
|
|
striking_distance = 0, % 攻击距离(像素)
|
|
tracing_distance = 0, % 跟踪距离(像素)
|
|
warning_range = 0, % 警戒范围(像素)
|
|
hate_range = 0, % 仇恨范围(像素):表示玩家离开某区域后,怪物不追踪,清空伤害列表,不填表示没有仇恨范围
|
|
speed = 0, % 速度(每秒移动的像素)
|
|
skill = [], % 技能列表[{技能id,技能等级},...]
|
|
retime = 0, % 重生时间(毫秒)
|
|
att_time = 0, % 攻击间隔(毫秒)
|
|
att_type = 0, % 0近攻,1远程攻击
|
|
drop = 0, % 掉落方式
|
|
exp = 0, % 经验
|
|
collect_time = 0, % 采集时间(秒)
|
|
collect_count = 0, % 可采集次数(每次都会有掉落)
|
|
collect_del_hp = 0, % 采集时玩家单位时间扣血
|
|
collect_del_time = 0, % 采集时玩家扣血间隔(ms)
|
|
is_fight_back = 1, % 是否会反击 ,默认为1
|
|
is_be_atted = 1, % 是否可被攻击 ,默认为1
|
|
is_be_clicked = 1, % 是否可被点击,默认为1
|
|
is_armor = 0, % 是否霸体,默认为0 ,
|
|
del_hp_each_time = [], % [Min,Max]:怪物受到的每次伤害值区间,整数,小数为百分比:1:默认:[];2:Min=<hurt=<Max;3怪物Hp的百分比:Hp*Min=<Hurt=<Hp*Max
|
|
mon_state = 0, % 怪物出生特殊状态(特效展示),0:代表无特效,客户端使用
|
|
is_hide_hp = 0, % 是否隐藏血条(0|1)
|
|
is_hit_ac = 0, % 是否播放受击动作
|
|
module = 0, % 怪物所属模块id
|
|
sub_module = 0, % 怪物所属模块子id
|
|
is_patrol = 0 % 是否可巡逻 默认0:可巡逻|1:不可巡逻
|
|
}).
|
|
|
|
%% 攻击怪物的人
|
|
-record(mon_atter, {
|
|
id = 0 % 玩家id
|
|
,name = "" % 名字
|
|
,pid = undefined % 玩家进程pid
|
|
,server_id = 0 % 服务器id
|
|
,node = none % 玩家节点
|
|
,team_id = 0 % 玩家队伍id
|
|
,team_leader_name = "" % 队伍队长
|
|
,guild_id=0 % 玩家公会id
|
|
,hurt = 0 % 伤害值
|
|
,att_sign = 0 % 攻击者类型
|
|
,att_lv = 0 % 攻击者等级
|
|
,att_career = 0 % 攻击者职业
|
|
,away = 0 % 玩家是否离开:一般有队友在或协助者在会标识
|
|
,support_id = 0 % 协助玩家id
|
|
,support_name = "" % 协助玩家名字
|
|
,support_team = 0 % 协助玩家队伍id
|
|
,support_team_name = "" % 协助玩家队长名字
|
|
,time = 0 % 攻击时间
|
|
}).
|
|
|
|
%% 场景对象活动进程state
|
|
-record(ob_act, {
|
|
att = undefined, % 攻击对象#{Key, Pid, AttType, X, Y} AttType: 1怪物; 2玩家
|
|
first_att = [], % 第一个攻击该怪物的玩家信息#mon_atter{} | []
|
|
object = [], % #scene_object{}
|
|
next_att_time = 0, % 下次允许攻击时间
|
|
next_move_time = 0, % 下次允许移动时间
|
|
klist = [], % 伤害列表[#mon_atter{}...]
|
|
support_klist = [], % 协助者伤害列表[#mon_atter{}...]
|
|
clist = [], % 采集列表
|
|
bl_who = [], % 怪物归属[#mon_atter{}...]
|
|
|
|
%% -------------------------------------------------------
|
|
%% 用于替代原怪物模块中的几个定时器ref,存储的是毫秒级时间戳,而非定时器引用
|
|
%% -------------------------------------------------------
|
|
%% 状态驱动事件(取代旧版ref字段,用于作为状态函数的消息)
|
|
state_driven = {0, undefined}, % 数据格式:{TimeMS, Info},{0,undefined}表示无状态驱动消息
|
|
%% 通用驱动事件(取代旧版各类xxx_ref字段,但是不包含ref字段,用于模仿触发info事件)
|
|
%% 具体见mon_mgr模块说明
|
|
general_driven = [], % 数据格式:[{TimeMS, Info}, ...]
|
|
%% -------------------------------------------------------
|
|
%% 被替代删除的定时器引用字段
|
|
% ref = [], % 普通定时器引用
|
|
% eref = [], % 事件定时器引用
|
|
% hurt_ref = [], % 伤害定时器引用:广播伤害列表
|
|
% hurt_remove_ref = [], % 定时移除离开boss范围的玩家的伤害列表
|
|
% cycle_check_ref = [], % 循环周期检查定时器引用
|
|
% special_ai_ref = [], % 特殊AI定时器[{AI定时器类型, Ref}]
|
|
%% -------------------------------------------------------
|
|
|
|
ai_event = [], % ai事件
|
|
check_block = false, % 走路是否检测障碍
|
|
path = undefined, % 预定义路径, 无路径undefined
|
|
path_ai_no = 0, % 路径结束的ai事件id
|
|
back_dest_path = null, % back状态回复到出生点
|
|
patrol_path = null, % 巡逻路径
|
|
patrol_angle = undefined, % 巡逻角度 integer() | undefined
|
|
continu_patrol_num = 0, % 连续巡逻次数
|
|
skill_link_info = [], % 链接技能信息
|
|
each_move_time = 0, % 每次移动的总时间
|
|
o_point = {0, 0}, % 每次移动的原点
|
|
w_point = {0, 0}, % 移动路径上一个点
|
|
move_begin_time = 0, % 移动的开始时间
|
|
collect_del_hp_list = [], % 各采集者扣血的时间记录
|
|
hurt_list_broadcast = undefined % 广播伤害列表的间隔时间 integer() | undefined
|
|
|
|
, hp_change_handler = [] % 血量变化监听器
|
|
, born_handler = [] % 出生监听器
|
|
, die_handler = [] % 死亡监听器
|
|
, collected_handler = [] % 被采集监听器
|
|
, walk_end_handler = [] % 走完路径监听器
|
|
, cycle_check_handler = [] % 循环周期检查监听器, 循环时间必须作为第一个参数传递
|
|
, hurt_list_handler = [] % 广播伤害列表监听器
|
|
, be_hurt_handler = [] % 受击监听器
|
|
, change_scene_handler = [] % 切场景监听器
|
|
|
|
, selected_skill = #{} % 放出去的技能
|
|
, revive_time = 0 % 复活时间
|
|
, stay_dead = 0 % 死亡是否保持死亡状态
|
|
, leave_distance = [] % 离开有效区域的玩家 [{RoleId, Time}]
|
|
, is_patrol = 0 % 是否巡逻:0否|1是
|
|
|
|
, hp_ai_min = 1 % 血量AI已执行到多少血量值(有的怪血量AI只执行一次)
|
|
, ai_option = [] % 自动进击怪 {type, att_list}, 1怪物优先,2玩家优先
|
|
, hurt_stat_list = [] % 伤害统计列表 个人或协助队伍
|
|
, find_type = 2 % 寻找攻击目标:1怪物优先,2玩家优先,3只找怪
|
|
, offline_hosting = undefined % 托管怪物设置
|
|
}).
|
|
|
|
%% 场景对象
|
|
-record(scene_object, {
|
|
%% 公共属性
|
|
id = 0, % id须由mod_scene_object_create获得
|
|
config_id = 0, % 各场景对象配置id
|
|
sign = 0, % 类型?BATTLE_SIGN_MON|?BATTLE_SIGN_PARTNER ...
|
|
scene = 0,
|
|
scene_pool_id = 0,
|
|
copy_id = 0,
|
|
x = 0,
|
|
y = 0,
|
|
d_x = 0, % 警戒区中心点x坐标
|
|
d_y = 0, % 警戒区中心点y坐标
|
|
angle = 0, % 站位角度(1-360,0表示默认-行为由前端定义)
|
|
figure = undefined, % 公共形象
|
|
color = 0, % 颜色
|
|
icon_effect = "", % 特效
|
|
icon_texture = 0, % 贴图
|
|
weapon_id = 0, % 武器id
|
|
pos = 0, % 阵法位置
|
|
type = 0, % 怪物战斗类型(0被动,1主动)
|
|
battle_attr = undefined, % 战斗必要属性
|
|
aid = undefined, % 活动进程id
|
|
att_type = 0, % 攻击类型
|
|
attr_type = 0, % 五行属性
|
|
striking_distance = 0, % 攻击距离(px)
|
|
tracing_distance = 0, % 追踪距离(px)
|
|
warning_range = 0, % 警戒范围(px)
|
|
att_time = 0, % 攻击间隔(毫秒)
|
|
skill = [], % 技能[{skillid, skilllv}
|
|
skill_passive = [], % 被动技能 [{SkillId, SkillLv}]
|
|
temp_skill = [], % 临时技能列表,优先选取此技能
|
|
skill_owner = [], % 表示怪物属于技能触发(召唤追踪类技能),当此怪物杀死对方时,与施法方杀死对方效果同等 #skill_owner{}
|
|
skill_cd = [], % 存放怪物释放过技能的cd
|
|
skill_combo = [], % 技能combo状态
|
|
shaking_skill = 0, % 正在前摇的技能id
|
|
is_fight_back = 1, % 是否会反击
|
|
is_be_atted = 1, % 是否可攻击
|
|
is_be_clicked = 1, % 是否可被点击
|
|
is_armor = 0, % 是否霸体
|
|
is_patrol = 0, % 允许巡逻:0允许|1不允许
|
|
no_battle_hp_ex = 0, % 非战斗状态额外回复量
|
|
hp_time = 0, % 血量回复时间间隔(ms)
|
|
hp_resume_ref = undefined, % 血量回复定时器
|
|
mod_args = [], % 功能参数,用于抛出事件时,各功能可以进行判断,尽可能保持短小
|
|
is_hit_ac = 0, % 是否播放受击动作
|
|
%% 场景对象自有属性
|
|
mon = undefined, % 怪物私有属性 #scene_mon{}
|
|
personality = 0, % 个性编号
|
|
dummy = undefined, % 假人私有属性 #scene_dummy{}
|
|
die_info = [], % 死亡后传给相关处理逻辑的参数
|
|
hurt_check = [], % 受击检查器
|
|
hurt_sync_ids = [], % 伤害同步id列表[{pool_id, id}]: 血量同步对象会将受到的伤害同步到id列表对象
|
|
combat_power = 0, % 战力
|
|
create_time = 0, % 创建时间
|
|
can_att_list = [], % 可攻击对象 [{对象类型, 对象列表}] eg:[{?BATTLE_SIGN_MON, [怪物配置Id]}, {?BATTLE_SIGN_PLAYER, [玩家ID: 空则表示所有]}]
|
|
cannot_beatt_list = [], % 不可被攻击对象 [{对象类型, 对象列表}]
|
|
act_label = [] % 活动标识 [{K,V}]
|
|
,skill_att_xy = {0, 0} % 释放?SKILL_CAREER_AI_POINT类型的技能时以这个坐标为基准点
|
|
,skill_att_xy_change = {0, 0} % 释放?SKILL_CAREER_AI_POINT类型的技能时在基准点基础上偏移:{偏移角度,偏移距离}
|
|
,origin = 0 % 怪物来源
|
|
}).
|
|
|
|
%% create_key(功能生成的Key值)
|
|
%% {mon_event, CommonEventId, MonAutoId}
|
|
-record(scene_mon, {
|
|
mid = 0, % 配置id
|
|
kind = 0, % 0怪物,1采集怪,2任务采集怪,3护送车队,4拾取型怪物
|
|
boss = 0, % BOSS类型: 0普通怪 1普通野外怪 2精英怪物,3本服BOSS 4跨服BOSS 5活动BOSS 6副本BOSS
|
|
d_x = 0, % 默认出生X
|
|
d_y = 0, % 默认出生y
|
|
auto = 0, % 0读取默认属性,1根据服务器等级动态生成,2根据功能参数等级动态生成
|
|
auto_lv = 1, % 生成功能怪物 动态属性等级:如玩家等级或者跨服服务器等级等
|
|
ctime = 0, % 怪物创建时间
|
|
retime=1, % 重生时间(s)
|
|
% drop = 0, % 掉落方式(0:最大伤害;1:最后伤害;2:最先伤害;3:以组队单位计算贡献伤害)
|
|
% drop_num = 0, % 掉落计算次数
|
|
exp = 0, % 击杀经验
|
|
exp_share_type = 0, % 经验分配方式
|
|
out = 0, % 是否挂机
|
|
collect_time = 0, % 采集怪物的采集时间
|
|
collect_count = 0, % 采集怪物的可采集次数
|
|
collect_times = 0, % 已经被采集次数
|
|
collect_del_hp = 0, % 采集时玩家单位时间扣血
|
|
collect_del_time = 0, % 采集时玩家扣血间隔(ms)
|
|
create_key = undefined, % 功能生成的Key值,保证唯一,就能对怪物进行操作[防止call怪物获得的唯一键,主要用于频繁生成怪物并且需要对怪物操作的进程].如 {dungeon, Id}
|
|
dun_r = 1, % 副本属性系数
|
|
dun_crush_r = 1, % 副本碾压战力系数
|
|
hp_re = 0, % 非战斗情况下额外的回血
|
|
hp_re_time = 0, % 非战斗情况下额外回血量
|
|
is_collecting = 0, % 采集怪是否正在被采集 0: 否 1: 是
|
|
has_cltimes = 1 % 采集怪是否还有剩余采集次数 0: 否 1: 有
|
|
,from_pid = undefined % 怪物创建进程
|
|
,owner = 0 % 归属玩家
|
|
,owner_name = "" % 归属玩家名字
|
|
}).
|
|
|
|
%% 怪物动态属性配置
|
|
-record(mon_dynamic, {
|
|
id = 0, % 怪物id
|
|
min_lv = 0, % 最小等级
|
|
max_lv = 0, % 最大等级
|
|
attr_list = [], % 属性列表
|
|
hp = 0, % 血量
|
|
att = 0, % 攻击
|
|
exp = 0 % 经验
|
|
}).
|
|
|
|
%% 副本怪物动态属性
|
|
-record(dungeon_mon_dynamic, {
|
|
id = 0, % 怪物id
|
|
dun_id = 0, % 副本id
|
|
level = 0, % 层数
|
|
ratio = 0 % 难度系数
|
|
}).
|
|
|
|
-record(scene_dummy, {
|
|
team_id = 0,
|
|
server_num = 0,
|
|
server_id = 0,
|
|
node = undefined, % 节点
|
|
is_dance = 0 % 是否跳舞状态(温泉 0-否 1-是)
|
|
}).
|
|
|
|
%% 怪物类型伤害加成
|
|
-record(mon_type_lv_hurt, {
|
|
mon_type = 0, % 怪物类型
|
|
blv = 0, % 开始等级(带符号)(玩家-怪物的等级=加成等级)
|
|
elv = 0, % 结束等级(带符号)
|
|
role_add_hurt = 0, % 玩家伤害加成(带符号小数点)
|
|
mon_add_hurt = 0 % 怪物伤害加成(带符号小数点)
|
|
}).
|
|
|
|
%% 怪物创建id管理器进程状态数据
|
|
-record(object_create_state, {
|
|
auto_id = 0,
|
|
cnt = 0
|
|
}).
|
|
|
|
%% 场景攻击方对象
|
|
-record(scene_att_object, {
|
|
id = 0 % 对象id
|
|
,location = 0 % 上阵位置
|
|
,attr = undefined % 属性
|
|
,combat = 0 % 战力
|
|
,skill_cd = [] % 存放怪物释放过技能的cd
|
|
,skill_combo = [] % 技能combo状态
|
|
,skill=[] % 技能列表
|
|
,attr_buff_list = [] % attr buff列表
|
|
,other_buff_list = [] % other buff列表
|
|
}).
|
|
|
|
%% AI创建怪参数
|
|
-record(create_mon_args, {
|
|
rate = 0 % 创建怪的概率(分母为10000)
|
|
,mid = 0 % 怪物Id
|
|
,is_active = 0 % 是否主动
|
|
,args = [] % 怪物参数
|
|
}).
|
|
|
|
-endif.
|