源战役
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

339 lines
20 KiB

  1. %%% -------------------------------------------------------
  2. %%% @author huangyongxing@yeah.net
  3. %%% @doc
  4. %%% 怪物相关数据结构定义
  5. %%% @end
  6. %%% -------------------------------------------------------
  7. -ifndef(MON_HRL).
  8. -define(MON_HRL, ok).
  9. %% 场景对象空状态驱动事件的值(state_driven的empty值)
  10. -define(EMPTY_STATE_DRIVEN, {0, undefined}).
  11. %% 场景对象在进程字典中存储的状态数据
  12. -record(obj_state_data, {
  13. obj_data = undefined % #ob_act{}
  14. ,obj_state = sleep
  15. }).
  16. %% 场景怪物(用于在告诉客户端怪物在哪个场景)
  17. -record(ets_scene_mon, {
  18. id = 0, % 怪物ID
  19. scene = 0, % 场景
  20. name = <<>>, % 场景名称
  21. mname = <<>>, % 怪物名字
  22. kind = 0, % 怪物类型
  23. x = 0, % X坐标
  24. y = 0, % Y坐标
  25. lv = 0, % 怪物等级
  26. out = 0 % 是否挂机
  27. }).
  28. %% 怪物配置
  29. -record(mon, {
  30. id = 0, % 怪物配置id
  31. rem_flag = 0, % 配置拆解literal专用,它处勿用,无其他意义
  32. name = "", % 怪物名字
  33. kind = 0, % 怪物类型 0:怪物、1:采集怪、2:任务采集怪、3:护送车队、4:拾取型、5:赏金怪、6:进击怪、7:塔防怪、8:不死采集怪
  34. boss = 0, % BOSS类型: 0普通怪 1普通野外怪 2精英怪物,3本服BOSS 4跨服BOSS 5活动BOSS 6副本BOSS
  35. type = 0, % 战斗斗类型(0被动,1主动)
  36. career = 0, % 职业0,没职业
  37. color = 0, % 颜色(0白,1绿,2蓝,3紫,4橙,5红,6粉) ,
  38. auto = 0, % 0-读怪物表属性,1-服务器等级,2-队伍平均等级,3-队长等级(无组队时默认是队长),需要读怪物动态属性表
  39. icon = 0, % 资源id
  40. icon_effect = <<>>, % 怪物资源特效
  41. icon_texture = 0, % 贴图id
  42. weapon_id = 0, % 武器模型id
  43. % icon_scale = 0, % 资源缩放[1.0-]
  44. % foot_icon = 0, % 脚下资源id
  45. % desc = <<>>, % 默认对话[怪物说话的时间间隔, {怪物说的话1,概率},...]
  46. lv = 0, % 等级
  47. hp_lim =0, % 血上限
  48. att = 0, % 攻击
  49. def = 0, % 防御
  50. hit = 0, % 命中
  51. dodge = 0, % 躲闪
  52. crit = 0, % 暴击
  53. ten = 0, % 坚韧
  54. special_attr = [], % 特定属性[{AttrType, AttrValue}] = [{属性类型,属性值}]
  55. resum = 0, % 回血配置,[回血模式,回复量,时间]回血模式:0不回血;1脱离战斗状态立刻回满血;2战斗中持续回复;3脱离战斗后持续回复
  56. striking_distance = 0, % 攻击距离(像素)
  57. tracing_distance = 0, % 跟踪距离(像素)
  58. warning_range = 0, % 警戒范围(像素)
  59. hate_range = 0, % 仇恨范围(像素):表示玩家离开某区域后,怪物不追踪,清空伤害列表,不填表示没有仇恨范围
  60. speed = 0, % 速度(每秒移动的像素)
  61. skill = [], % 技能列表[{技能id,技能等级},...]
  62. retime = 0, % 重生时间(毫秒)
  63. att_time = 0, % 攻击间隔(毫秒)
  64. att_type = 0, % 0近攻,1远程攻击
  65. drop = 0, % 掉落方式
  66. exp = 0, % 经验
  67. collect_time = 0, % 采集时间(秒)
  68. collect_count = 0, % 可采集次数(每次都会有掉落)
  69. collect_del_hp = 0, % 采集时玩家单位时间扣血
  70. collect_del_time = 0, % 采集时玩家扣血间隔(ms)
  71. is_fight_back = 1, % 是否会反击 ,默认为1
  72. is_be_atted = 1, % 是否可被攻击 ,默认为1
  73. is_be_clicked = 1, % 是否可被点击,默认为1
  74. is_armor = 0, % 是否霸体,默认为0 ,
  75. del_hp_each_time = [], % [Min,Max]:怪物受到的每次伤害值区间,整数,小数为百分比:1:默认:[];2:Min=<hurt=<Max;3怪物Hp的百分比:Hp*Min=<Hurt=<Hp*Max
  76. mon_state = 0, % 怪物出生特殊状态(特效展示),0:代表无特效,客户端使用
  77. is_hide_hp = 0, % 是否隐藏血条(0|1)
  78. is_hit_ac = 0, % 是否播放受击动作
  79. module = 0, % 怪物所属模块id
  80. sub_module = 0, % 怪物所属模块子id
  81. is_patrol = 0 % 是否可巡逻 默认0:可巡逻|1:不可巡逻
  82. }).
  83. %% 攻击怪物的人
  84. -record(mon_atter, {
  85. id = 0 % 玩家id
  86. ,name = "" % 名字
  87. ,pid = undefined % 玩家进程pid
  88. ,server_id = 0 % 服务器id
  89. ,node = none % 玩家节点
  90. ,team_id = 0 % 玩家队伍id
  91. ,team_leader_name = "" % 队伍队长
  92. ,guild_id=0 % 玩家公会id
  93. ,hurt = 0 % 伤害值
  94. ,att_sign = 0 % 攻击者类型
  95. ,att_lv = 0 % 攻击者等级
  96. ,att_career = 0 % 攻击者职业
  97. ,away = 0 % 玩家是否离开:一般有队友在或协助者在会标识
  98. ,support_id = 0 % 协助玩家id
  99. ,support_name = "" % 协助玩家名字
  100. ,support_team = 0 % 协助玩家队伍id
  101. ,support_team_name = "" % 协助玩家队长名字
  102. ,time = 0 % 攻击时间
  103. }).
  104. %% 场景对象活动进程state
  105. -record(ob_act, {
  106. att = undefined, % 攻击对象#{Key, Pid, AttType, X, Y} AttType: 1怪物; 2玩家
  107. first_att = [], % 第一个攻击该怪物的玩家信息#mon_atter{} | []
  108. object = [], % #scene_object{}
  109. next_att_time = 0, % 下次允许攻击时间
  110. next_move_time = 0, % 下次允许移动时间
  111. klist = [], % 伤害列表[#mon_atter{}...]
  112. support_klist = [], % 协助者伤害列表[#mon_atter{}...]
  113. clist = [], % 采集列表
  114. bl_who = [], % 怪物归属[#mon_atter{}...]
  115. %% -------------------------------------------------------
  116. %% 用于替代原怪物模块中的几个定时器ref,存储的是毫秒级时间戳,而非定时器引用
  117. %% -------------------------------------------------------
  118. %% 状态驱动事件(取代旧版ref字段,用于作为状态函数的消息)
  119. state_driven = {0, undefined}, % 数据格式:{TimeMS, Info},{0,undefined}表示无状态驱动消息
  120. %% 通用驱动事件(取代旧版各类xxx_ref字段,但是不包含ref字段,用于模仿触发info事件)
  121. %% 具体见mon_mgr模块说明
  122. general_driven = [], % 数据格式:[{TimeMS, Info}, ...]
  123. %% -------------------------------------------------------
  124. %% 被替代删除的定时器引用字段
  125. % ref = [], % 普通定时器引用
  126. % eref = [], % 事件定时器引用
  127. % hurt_ref = [], % 伤害定时器引用:广播伤害列表
  128. % hurt_remove_ref = [], % 定时移除离开boss范围的玩家的伤害列表
  129. % cycle_check_ref = [], % 循环周期检查定时器引用
  130. % special_ai_ref = [], % 特殊AI定时器[{AI定时器类型, Ref}]
  131. %% -------------------------------------------------------
  132. ai_event = [], % ai事件
  133. check_block = false, % 走路是否检测障碍
  134. path = undefined, % 预定义路径, 无路径undefined
  135. path_ai_no = 0, % 路径结束的ai事件id
  136. back_dest_path = null, % back状态回复到出生点
  137. patrol_path = null, % 巡逻路径
  138. patrol_angle = undefined, % 巡逻角度 integer() | undefined
  139. continu_patrol_num = 0, % 连续巡逻次数
  140. skill_link_info = [], % 链接技能信息
  141. each_move_time = 0, % 每次移动的总时间
  142. o_point = {0, 0}, % 每次移动的原点
  143. w_point = {0, 0}, % 移动路径上一个点
  144. move_begin_time = 0, % 移动的开始时间
  145. collect_del_hp_list = [], % 各采集者扣血的时间记录
  146. hurt_list_broadcast = undefined % 广播伤害列表的间隔时间 integer() | undefined
  147. , hp_change_handler = [] % 血量变化监听器
  148. , born_handler = [] % 出生监听器
  149. , die_handler = [] % 死亡监听器
  150. , collected_handler = [] % 被采集监听器
  151. , walk_end_handler = [] % 走完路径监听器
  152. , cycle_check_handler = [] % 循环周期检查监听器, 循环时间必须作为第一个参数传递
  153. , hurt_list_handler = [] % 广播伤害列表监听器
  154. , be_hurt_handler = [] % 受击监听器
  155. , change_scene_handler = [] % 切场景监听器
  156. , selected_skill = #{} % 放出去的技能
  157. , revive_time = 0 % 复活时间
  158. , stay_dead = 0 % 死亡是否保持死亡状态
  159. , leave_distance = [] % 离开有效区域的玩家 [{RoleId, Time}]
  160. , is_patrol = 0 % 是否巡逻:0否|1是
  161. , hp_ai_min = 1 % 血量AI已执行到多少血量值(有的怪血量AI只执行一次)
  162. , ai_option = [] % 自动进击怪 {type, att_list}, 1怪物优先,2玩家优先
  163. , hurt_stat_list = [] % 伤害统计列表 个人或协助队伍
  164. , find_type = 2 % 寻找攻击目标:1怪物优先,2玩家优先,3只找怪
  165. , offline_hosting = undefined % 托管怪物设置
  166. }).
  167. %% 场景对象
  168. -record(scene_object, {
  169. %% 公共属性
  170. id = 0, % id须由mod_scene_object_create获得
  171. config_id = 0, % 各场景对象配置id
  172. sign = 0, % 类型?BATTLE_SIGN_MON|?BATTLE_SIGN_PARTNER ...
  173. scene = 0,
  174. scene_pool_id = 0,
  175. copy_id = 0,
  176. x = 0,
  177. y = 0,
  178. d_x = 0, % 警戒区中心点x坐标
  179. d_y = 0, % 警戒区中心点y坐标
  180. angle = 0, % 站位角度(1-360,0表示默认-行为由前端定义)
  181. figure = undefined, % 公共形象
  182. color = 0, % 颜色
  183. icon_effect = "", % 特效
  184. icon_texture = 0, % 贴图
  185. weapon_id = 0, % 武器id
  186. pos = 0, % 阵法位置
  187. type = 0, % 怪物战斗类型(0被动,1主动)
  188. battle_attr = undefined, % 战斗必要属性
  189. aid = undefined, % 活动进程id
  190. att_type = 0, % 攻击类型
  191. attr_type = 0, % 五行属性
  192. striking_distance = 0, % 攻击距离(px)
  193. tracing_distance = 0, % 追踪距离(px)
  194. warning_range = 0, % 警戒范围(px)
  195. att_time = 0, % 攻击间隔(毫秒)
  196. skill = [], % 技能[{skillid, skilllv}
  197. skill_passive = [], % 被动技能 [{SkillId, SkillLv}]
  198. temp_skill = [], % 临时技能列表,优先选取此技能
  199. skill_owner = [], % 表示怪物属于技能触发(召唤追踪类技能),当此怪物杀死对方时,与施法方杀死对方效果同等 #skill_owner{}
  200. skill_cd = [], % 存放怪物释放过技能的cd
  201. skill_combo = [], % 技能combo状态
  202. shaking_skill = 0, % 正在前摇的技能id
  203. is_fight_back = 1, % 是否会反击
  204. is_be_atted = 1, % 是否可攻击
  205. is_be_clicked = 1, % 是否可被点击
  206. is_armor = 0, % 是否霸体
  207. is_patrol = 0, % 允许巡逻:0允许|1不允许
  208. no_battle_hp_ex = 0, % 非战斗状态额外回复量
  209. hp_time = 0, % 血量回复时间间隔(ms)
  210. hp_resume_ref = undefined, % 血量回复定时器
  211. mod_args = [], % 功能参数,用于抛出事件时,各功能可以进行判断,尽可能保持短小
  212. is_hit_ac = 0, % 是否播放受击动作
  213. %% 场景对象自有属性
  214. mon = undefined, % 怪物私有属性 #scene_mon{}
  215. personality = 0, % 个性编号
  216. dummy = undefined, % 假人私有属性 #scene_dummy{}
  217. die_info = [], % 死亡后传给相关处理逻辑的参数
  218. hurt_check = [], % 受击检查器
  219. hurt_sync_ids = [], % 伤害同步id列表[{pool_id, id}]: 血量同步对象会将受到的伤害同步到id列表对象
  220. combat_power = 0, % 战力
  221. create_time = 0, % 创建时间
  222. can_att_list = [], % 可攻击对象 [{对象类型, 对象列表}] eg:[{?BATTLE_SIGN_MON, [怪物配置Id]}, {?BATTLE_SIGN_PLAYER, [玩家ID: 空则表示所有]}]
  223. cannot_beatt_list = [], % 不可被攻击对象 [{对象类型, 对象列表}]
  224. act_label = [] % 活动标识 [{K,V}]
  225. ,skill_att_xy = {0, 0} % 释放?SKILL_CAREER_AI_POINT类型的技能时以这个坐标为基准点
  226. ,skill_att_xy_change = {0, 0} % 释放?SKILL_CAREER_AI_POINT类型的技能时在基准点基础上偏移:{偏移角度,偏移距离}
  227. ,origin = 0 % 怪物来源
  228. }).
  229. %% create_key(功能生成的Key值)
  230. %% {mon_event, CommonEventId, MonAutoId}
  231. -record(scene_mon, {
  232. mid = 0, % 配置id
  233. kind = 0, % 0怪物,1采集怪,2任务采集怪,3护送车队,4拾取型怪物
  234. boss = 0, % BOSS类型: 0普通怪 1普通野外怪 2精英怪物,3本服BOSS 4跨服BOSS 5活动BOSS 6副本BOSS
  235. d_x = 0, % 默认出生X
  236. d_y = 0, % 默认出生y
  237. auto = 0, % 0读取默认属性,1根据服务器等级动态生成,2根据功能参数等级动态生成
  238. auto_lv = 1, % 生成功能怪物 动态属性等级:如玩家等级或者跨服服务器等级等
  239. ctime = 0, % 怪物创建时间
  240. retime=1, % 重生时间(s)
  241. % drop = 0, % 掉落方式(0:最大伤害;1:最后伤害;2:最先伤害;3:以组队单位计算贡献伤害)
  242. % drop_num = 0, % 掉落计算次数
  243. exp = 0, % 击杀经验
  244. exp_share_type = 0, % 经验分配方式
  245. out = 0, % 是否挂机
  246. collect_time = 0, % 采集怪物的采集时间
  247. collect_count = 0, % 采集怪物的可采集次数
  248. collect_times = 0, % 已经被采集次数
  249. collect_del_hp = 0, % 采集时玩家单位时间扣血
  250. collect_del_time = 0, % 采集时玩家扣血间隔(ms)
  251. create_key = undefined, % 功能生成的Key值,保证唯一,就能对怪物进行操作[防止call怪物获得的唯一键,主要用于频繁生成怪物并且需要对怪物操作的进程].如 {dungeon, Id}
  252. dun_r = 1, % 副本属性系数
  253. dun_crush_r = 1, % 副本碾压战力系数
  254. hp_re = 0, % 非战斗情况下额外的回血
  255. hp_re_time = 0, % 非战斗情况下额外回血量
  256. is_collecting = 0, % 采集怪是否正在被采集 0: 否 1: 是
  257. has_cltimes = 1 % 采集怪是否还有剩余采集次数 0: 否 1: 有
  258. ,from_pid = undefined % 怪物创建进程
  259. ,owner = 0 % 归属玩家
  260. ,owner_name = "" % 归属玩家名字
  261. }).
  262. %% 怪物动态属性配置
  263. -record(mon_dynamic, {
  264. id = 0, % 怪物id
  265. min_lv = 0, % 最小等级
  266. max_lv = 0, % 最大等级
  267. attr_list = [], % 属性列表
  268. hp = 0, % 血量
  269. att = 0, % 攻击
  270. exp = 0 % 经验
  271. }).
  272. %% 副本怪物动态属性
  273. -record(dungeon_mon_dynamic, {
  274. id = 0, % 怪物id
  275. dun_id = 0, % 副本id
  276. level = 0, % 层数
  277. ratio = 0 % 难度系数
  278. }).
  279. -record(scene_dummy, {
  280. team_id = 0,
  281. server_num = 0,
  282. server_id = 0,
  283. node = undefined, % 节点
  284. is_dance = 0 % 是否跳舞状态(温泉 0-否 1-是)
  285. }).
  286. %% 怪物类型伤害加成
  287. -record(mon_type_lv_hurt, {
  288. mon_type = 0, % 怪物类型
  289. blv = 0, % 开始等级(带符号)(玩家-怪物的等级=加成等级)
  290. elv = 0, % 结束等级(带符号)
  291. role_add_hurt = 0, % 玩家伤害加成(带符号小数点)
  292. mon_add_hurt = 0 % 怪物伤害加成(带符号小数点)
  293. }).
  294. %% 怪物创建id管理器进程状态数据
  295. -record(object_create_state, {
  296. auto_id = 0,
  297. cnt = 0
  298. }).
  299. %% 场景攻击方对象
  300. -record(scene_att_object, {
  301. id = 0 % 对象id
  302. ,location = 0 % 上阵位置
  303. ,attr = undefined % 属性
  304. ,combat = 0 % 战力
  305. ,skill_cd = [] % 存放怪物释放过技能的cd
  306. ,skill_combo = [] % 技能combo状态
  307. ,skill=[] % 技能列表
  308. ,attr_buff_list = [] % attr buff列表
  309. ,other_buff_list = [] % other buff列表
  310. }).
  311. %% AI创建怪参数
  312. -record(create_mon_args, {
  313. rate = 0 % 创建怪的概率(分母为10000)
  314. ,mid = 0 % 怪物Id
  315. ,is_active = 0 % 是否主动
  316. ,args = [] % 怪物参数
  317. }).
  318. -endif.