|
|
- %%% -------------------------------------------------------
- %%% @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.
|