源战役
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

462 lines
26 KiB

  1. %%% -------------------------------------------------------
  2. %%% @author huangyongxing@yeah.net
  3. %%% @doc 场景
  4. %%% -------------------------------------------------------
  5. %%% 关于场景网格的划分
  6. %%% 场景划分网格是为了进行广播优化,对于非全场景广播的场景可以大幅降低移动和战斗等更新广播量
  7. %%% 场景网络划分后,对每个网格进行统一编号,按从左至右、从下至上的顺序编号,不需要用两个值来标识
  8. %%% 例如HORIZ_GRID_CNT(场景横向宽度网格数量)为5时,编号如下:
  9. %%% ...
  10. %%% 11 12 13 14 15
  11. %%% 6 7 8 9 10
  12. %%% 1 2 3 4 5
  13. %%% 场景元素信息变更需要广播时通常可以最多只对周围9个网格进行广播,即九宫格广播
  14. %%% -------------------------------------------------------
  15. %%% 关于场景坐标
  16. %%% 坐标系原点在屏幕左下角,每个像素对应一个坐标点
  17. %%% 服务端和客户端中角色坐标即为这个坐标系中的坐标
  18. %%% -------------------------------------------------------
  19. %%% 关于场景玩家数记录
  20. %%% 1. scene_role_count包含场景进程对应角色数量、相应各房间(CopyId区分)的角色数量
  21. %%% 场景进程存储这份数据在进程字典中,便于读写更新操作
  22. %%% 同时将这份数据写入ETS表供其他进程查询用
  23. %%% scene_mgr为ETS所有者,对ETS表只读;场景进程对ETS表只写不读;其他进程只读
  24. %%% 2. 除了场景角色数量,还有每个网格附近九格区域角色总数量记录,只保存在场景进程的进程字典
  25. %%% 附近九格角色总数量主要用于广播减频功能
  26. %%% @doc
  27. %%% -------------------------------------------------------
  28. -ifndef(SCENE_HRL).
  29. -define(SCENE_HRL, ok).
  30. -include("mon.hrl").
  31. %% 场景数据结构
  32. -define(ETS_SCENE, ets_scene).
  33. %% 场景玩家数(进程字典KEY,同时也是相应ETS表的表名)
  34. -define(SCENE_ROLE_COUNT, scene_role_count).
  35. %% 特定网格(AreaId)的附近九格区域总人数记录(进程字典KEY)
  36. -define(AREA_ROLE_COUNT(AreaId, CopyId), {area_role_count, CopyId, AreaId}).
  37. %% 场景中记录各房间或区域有哪些角色的进程字典KEY
  38. -define(AREA_ROLES(AreaId, CopyId), {area_roles, CopyId, AreaId}). % 场景区域中的角色Key
  39. -define(ROOM_ROLES(CopyId), {room_roles, CopyId}). % 场景房间中的角色key
  40. %% 场景配置中,某场景是否全场景广播的属性值
  41. -define(BROADCAST_0, 0). % 不广播
  42. -define(BROADCAST_1, 1). % 广播
  43. %% 怪物类型定义 0普通怪,1采集怪,2任务采集怪,3护送怪,4拾取怪,6进击怪,7塔防怪,9自动进击怪,10非进攻巡逻怪
  44. -define(MON_KIND_NORMAL, 0). % 普通怪
  45. -define(MON_KIND_COLLECT, 1). % 采集怪
  46. -define(MON_KIND_TASK_COLLECT, 2). % 任务采集怪
  47. -define(MON_KIND_CONVOY, 3). % 护送怪
  48. -define(MON_KIND_PICK, 4). % 拾取怪
  49. -define(MON_KIND_ATT, 6). % 进击怪
  50. -define(MON_KIND_TOWER_DEF, 7). % 塔防怪
  51. -define(MON_KIND_ATT_AUTO, 9). % 自动进击怪:根据指定的攻击对象自动寻路
  52. -define(MON_KIND_WALK_AUTO, 10). % 宝宝副本特殊怪物(遇到攻击会反击,否则按规定路径行走)
  53. %% 怪物Boss定义 0普通怪(普通怪),1普通野外怪(普通怪),2精英怪物(普通怪),3赏金BOSS(赏金专用),4世界BOSS(世界BOSS专用),
  54. %% 5不死BOSS,6副本BOSS,7任务BOSS,8战场BOSS(不可被击退),9废都BOSS,10废都BOSS精英,11活动BOSS
  55. -define(MON_NORMAL, 0). % 普通怪(普通怪)
  56. -define(MON_NORMAL_OUSIDE, 1). % 普通野外怪(普通怪)
  57. -define(MON_ELITE, 2). % 精英怪物(普通怪)
  58. -define(MON_REWARD_BOSS, 3). % 赏金BOSS(赏金专用)/次元幻魔
  59. -define(MON_WORLD_BOSS, 4). % 世界BOSS(世界BOSS专用)
  60. -define(MON_KEEP_ALIVE, 5). % 不死BOSS: 受击时血量高于100,血量不变(血量变化由具体玩法处理);小于100时,自然扣血
  61. -define(MON_DUN_BOSS, 6). % 副本BOSS
  62. -define(MON_TASK_BOSS, 7). % 任务BOSS
  63. -define(MON_ACT_BATTLE, 8). % 战场BOSS(不可被击退)
  64. -define(MON_DESERTED_BOSS, 9). % 废都BOSS/混乱星域
  65. -define(MON_DESERTED_ELITE, 10). % 废都BOSS精英/混乱星域
  66. -define(MON_ACT_BOSS, 11). % 活动BOSS
  67. -define(MON_HOME_BOSS, 12). % 幻魔之家BOSS
  68. -define(MON_HOME_GBOSS, 13). % 幻魔之家(社团)BOSS
  69. %% 传送类型
  70. -define(TRANS_TYPE_SERVER, 0). % 服务器传送
  71. -define(TRANS_TYPE_FLY, 1). % 小飞鞋
  72. -define(TRANS_TYPE_WORLD, 2). % 世界传送(到场景出生点)
  73. -define(TRANS_TYPE_GATE_NEAR, 3). % 传送门 - 邻近城市传送(传统传送门)
  74. -define(TRANS_TYPE_GATE_ANY, 4). % 传送门 - 任意城市传送(需服务端计算距指定坐标最近的目标场景传送门)
  75. -define(IN_IDLE, 0). %% 正常状态
  76. -define(IN_FIRE, 1). %% 祝火状态
  77. %% 不死怪: 血量高于100时,血量不变,小于100时,自然扣血
  78. -define(KEEP_ALIVE_MON_DIE_HP, 100).
  79. %% 大世界镜像场景id
  80. -define(MIRROR_IMAGE_SCENE(SceneId), (SceneId * 10 + 1)).
  81. %% -------------------------------------------------------
  82. %% 场景逻辑点坐标与网格说明
  83. %%
  84. %% LOGIC_PT 即 logic point,服务端与客户端约定,
  85. %% 按一定宽度与高度(单位:像素),划分出的方格,即为逻辑点
  86. %%
  87. %% GRID 即为网格(九宫格广播依赖于网格划分,相邻九个GRID组成一个广播的九宫格)
  88. %%
  89. %% HORIZ_GRID_CNT 即为 水平方向上网格的数量(为了使网格采用一维数组编号,
  90. %% 所以需要定义此值。此值与网格的像素宽度,共同决定了地图水平宽度上限)
  91. %% 网格编号由服务端管理(广播需要),不发送给前端
  92. %%
  93. %% -------------------------------------------------------
  94. %% GRID_WIDTH 和 GRID_HEIGHT 需要按主流分辨率来决定,
  95. %% 九格广播的情况下,一个网格要超半屏,才不易引起边界上突然失踪的问题
  96. %% 在近3D的视角下,横向无偏角,实际长度一致,纵向有偏角,实际需要更长一些
  97. -define(LOGIC_PT_WIDTH, 100). % 一个逻辑坐标点X轴(水平)方向长度(pixel)
  98. -define(LOGIC_PT_HEIGHT, 100). % 一个逻辑坐标点Y轴(垂直)方向长度(pixel)
  99. -define(GRID_WIDTH, (12 * ?LOGIC_PT_WIDTH)). % 一个网格的横向像素长度(pixel)
  100. -define(GRID_HEIGHT, (12 * ?LOGIC_PT_HEIGHT)). % 一个网格的纵向像素长度(pixel)
  101. %% 场景横向划分网格数量:
  102. %% 可支持的地图横向宽度上限为?GRID_WIDTH * ?HORIZ_GRID_CNT,地图宽度如超出会引起移动广播问题
  103. -define(HORIZ_GRID_CNT, 30).
  104. %% 坐标系原点在屏幕左下角
  105. -define(GRID_OFFSET_M, 0). % 九宫格中间格子编号偏移值
  106. -define(GRID_OFFSET_R, 1). % 九宫格右边格子编号偏移值
  107. -define(GRID_OFFSET_L, -1). % 九宫格左边格子编号偏移值
  108. -define(GRID_OFFSET_U, ?HORIZ_GRID_CNT). % 九宫格上边格子编号偏移值
  109. -define(GRID_OFFSET_D, -?HORIZ_GRID_CNT). % 九宫格下边格子编号偏移值
  110. -define(GRID_OFFSET_LU, (?HORIZ_GRID_CNT-1)). % 九宫格左上边格子编号偏移值
  111. -define(GRID_OFFSET_LD, (-?HORIZ_GRID_CNT-1)). % 九宫格左下边格子编号偏移值
  112. -define(GRID_OFFSET_RU, (?HORIZ_GRID_CNT+1)). % 九宫格右上边格子编号偏移值
  113. -define(GRID_OFFSET_RD, (-?HORIZ_GRID_CNT+1)). % 九宫格右下边格子编号偏移值
  114. %% -------------------------------------------------------
  115. %% 场景类型定义.(特殊的活动最好新加场景类型)
  116. %% 主类型-影响生成逻辑,客户端ui, 对应#ets_scene.type
  117. -define(SCENE_TYPE_NORMAL, 0). % 主城(普通场景)
  118. -define(SCENE_TYPE_OUTSIDE, 1). % 野外场景
  119. -define(SCENE_TYPE_DUNGEON, 2). % 副本场景
  120. -define(SCENE_TYPE_WORLD_BOSS, 3). % 世界BOSS场景
  121. -define(SCENE_TYPE_GUILD, 4). % 公会场景
  122. -define(SCENE_TYPE_ACTIVE, 5). % 活动场景(通用)
  123. -define(SCENE_TYPE_VOID_FAM, 6). % 无尽领域
  124. -define(SCENE_TYPE_REWARD_BOSS, 7). % 赏金BOSS场景
  125. -define(SCENE_TYPE_GWAR, 8). % 百团大战
  126. -define(SCENE_TYPE_ARENA, 9). % 9 竞技联赛(竞技场)
  127. -define(SCENE_TYPE_HOT_SPRING, 10). % 10 舞池派对(温泉)
  128. -define(SCENE_TYPE_MADNESS, 11). % 狂战领域
  129. -define(SCENE_TYPE_3v3, 12). % 3V3
  130. -define(SCENE_TYPE_DRUMWAR, 13). % 钻石大战
  131. -define(SCENE_TYPE_1vN, 14). % 1vN
  132. -define(SCENE_TYPE_CAMP_WAR, 15). % 跨服团战
  133. -define(SCENE_TYPE_CGW, 16). % 跨服国战
  134. -define(SCENE_TYPE_WASTELAND, 17). % 废土战场(饥饿游戏)场景
  135. -define(SCENE_TYPE_DESERTED_BOSS, 18). % 混乱星域BOSS场景
  136. -define(SCENE_TYPE_JUMP_ACT, 19). % 跳一跳玩法
  137. -define(SCENE_TYPE_HOME_BOSS, 20). % 幻魔/社团之家
  138. -define(SCENE_TYPE_EXP_SEA, 21). % 经验海
  139. %% 下面的作废 新增顶掉 删掉旧功能
  140. -define(SCENE_TYPE_TOPPK, 99). % 巅峰竞技
  141. %% 次类型:按场景的对角色的影响而分,对应 #ets_scene.subtype
  142. -define(SCENE_SUBTYPE_NORMAL, 0). % 场景次类型-自由切换pk模式场景,入场pk状态看pkstate,入场后可以切换pk状态
  143. -define(SCENE_SUBTYPE_SAFE, 1). % 场景次类型-安全场景,强制切换为和平状态。无法战斗
  144. -define(SCENE_SUBTYPE_PK, 2). % 场景次类型-强制切换pk状态场景,入场pk状态看pkstate,入场后不能切换pk状态
  145. -define(SCENE_SUBTYPE_GROUP, 3). % 场景次类型-强制切换pk为和平状态场景,入场后不能切换pk状态,pk按照分组模式
  146. %% 场景所在节点类型 #ets_scene.cls_type
  147. -define(SCENE_CLS_TYPE_GAME, 0). % 非跨服场景
  148. -define(SCENE_CLS_TYPE_CENTER, 1). % 跨服场景
  149. %% 场景所在节点类型 #ets_scene.broadcast
  150. -define(BROADCAST_AREA, 0). % 九宫格广播
  151. -define(BROADCAST_ALL, 1). % 全场景广播
  152. %% 场景mark类型
  153. -define(SCENE_MASK_NORMAL, 0).
  154. -define(SCENE_MASK_BLOCK, -1).
  155. -define(SCENE_MASK_SAFE, -2).
  156. %% 移动类型
  157. -define(MOVE_ROLE_WALK, 0). % 正常走路
  158. -define(MOVE_ROLE_JUMP, 1). % 跳跃(主动式)
  159. -define(MOVE_ROLE_ACCELERATE, 2). % 任务加速
  160. -define(MOVE_ROLE_FLASH, 3). % 闪现移动
  161. -define(MOVE_ROLE_TASK_JUMP, 4). % 任务飞行、起跳点跳跃等(被动式)
  162. -define(MOVE_ROLE_DASH, 5). % 冲刺(前端用)
  163. -define(MOVE_ROLE_BLINK, 6). % 瞬移
  164. %% 服务端内部值,由MOVE_ROLE_JUMP转换而来,以精确度为代价省去场景进程中的计算逻辑
  165. -define(MOVE_ROLE_JUMP_COST_ENG, 101). % 跳跃(消耗能量,服务端MOVE_ROLE_JUMP的特定状态)
  166. %% 伙伴战斗类型
  167. -define(PARTNER_BATTLE_TYPE_NO, 0). % 不出战
  168. -define(PARTNER_BATTLE_TYPE_GROUP, 1). % 伙伴组出战(位置1、2为一组,位置3、4为一组)
  169. -define(PARTNER_BATTLE_TYPE_DIE_SHIFT, 2). % 死亡切换(默认出两个)
  170. -define(PARTNER_BATTLE_TYPE_ROBOT_ALL, 3). % 机器人的伙伴
  171. %% 复活类型
  172. % 1元宝原地复活
  173. % 2绑定元宝原地复活
  174. % 3回城复活
  175. % 4原血量复活
  176. % 5原地满血复活
  177. % 8挂机自动复活
  178. % 9通用副本复活
  179. -define(REVIVE_DUNGEON, 9). %% 副本复活
  180. %% --------------------------------------------------------------
  181. %% 以下复活类型待定
  182. -define(REVIVE_KF_3V3, 10). %% 跨服3v3
  183. -define(REVIVE_MELEE, 11). %% 大乱斗钻石原地复活
  184. -define(REVIVE_DRUMWARD, 12). %% 钻石大战复活
  185. -define(REVIVE_KF_TOWN_WAR_OWN, 13). %% 跨服城战复活点复活
  186. -define(REVIVE_KF_TOWN_WAR_BORN, 14). %% 跨服城战出生点复活
  187. -define(REVIVE_MELEE_FREE, 15). %% 大乱斗免费原地复活
  188. -define(REVIVE_FOR_GOODS, 16). %% 使用复活券原地复活
  189. -define(REVIVE_MAX_TYPE, ?REVIVE_FOR_GOODS). %% 最大复活类型
  190. %% 脱离战斗时间(s)
  191. -define(ESCAPE_ATT_TIME, 10).
  192. -define(EXP_SHARE_ALL_TO_ATTACKER, 0). % 所有伤害者获得所有经验
  193. -define(EXP_SHARE_PART_TO_ATTACKER, 1). % 按照伤害比例分配经验
  194. -define(EXP_SHARE_TO_SCENE, 2). % 同场景的玩家获得经验 比例按动态经验和个人等级挂钩
  195. -define(EXP_SHARE_ALL_TO_ATTACKER_DYNAMIC, 3). % 所有伤害者获得所有经验 比例按动态经验和个人等级挂钩
  196. %% 场景房间人数上限的最小限制
  197. -ifdef(DEV_SERVER).
  198. -define(MIN_SCENE_MAX_ROLE, 1).
  199. -else.
  200. -define(MIN_SCENE_MAX_ROLE, 30).
  201. -endif.
  202. %% 玩家场景更新类型
  203. -define(SCENE_USER_UPDATE_MATE_ROLE, 10). % 羁绊对象更新
  204. -define(SCENE_USER_UPDATE_MATE_TITLE, 11). % 羁绊称号更新
  205. -define(SCENE_USER_UPDATE_MATE_LV, 12). % 羁绊等级更新
  206. -define(SCENE_USER_UPDATE_FOLLOW_GUARD, 13). % 守护跟随更新
  207. %% -----------------------------------------------------------------
  208. %% 一些特殊的场景或场景类型定义
  209. %% -----------------------------------------------------------------
  210. %% 需要服务器强制自动动态创建分线的场景类型
  211. -define(SCENE_TYPE_NEED_SUB_LINE, [
  212. ?SCENE_TYPE_NORMAL
  213. ,?SCENE_TYPE_OUTSIDE
  214. ,?SCENE_TYPE_GWAR
  215. ,?SCENE_TYPE_MADNESS
  216. ,?SCENE_TYPE_VOID_FAM
  217. ]).
  218. %% 玩家能够主动切换分线的场景类型SCENE_TYPE_NORMAL和SCENE_TYPE_OUTSIDE 见12040和12041协议
  219. -define(SCENE_TYPE_CAN_ACTIVE_SWITCH, [
  220. ?SCENE_TYPE_NORMAL,
  221. ?SCENE_TYPE_OUTSIDE
  222. ]).
  223. %% 掉落归属显示的boss
  224. -define(IS_DROP_BOSS(X), lists:member(X,
  225. [
  226. ?MON_REWARD_BOSS,
  227. ?MON_DESERTED_BOSS,
  228. ?MON_DESERTED_ELITE,
  229. ?MON_HOME_BOSS,
  230. ?MON_HOME_GBOSS
  231. ])).
  232. %% 是不是boss
  233. -define(IS_BOSS(X),
  234. lists:member(X,
  235. [
  236. ?MON_REWARD_BOSS,
  237. ?MON_DUN_BOSS,
  238. ?MON_TASK_BOSS,
  239. ?MON_DESERTED_BOSS,
  240. ?MON_DESERTED_ELITE,
  241. ?MON_HOME_BOSS,
  242. ?MON_HOME_GBOSS
  243. ]
  244. )).
  245. %% 禁止通过12005协议传送进入的场景id列表
  246. -define(FORBID_SCENE_IDS, [4101, 4301, 4302]).
  247. %% -----------------------------------------------------------------
  248. %% 场景进程字典
  249. %% Key:{dungeon_hp_rate, CopyId}, Value:HpRateList. 副本辅助信息,CopyId:副本id
  250. %% 怪物进程字典
  251. %% Key:{dungeon_hp_rate, MonId}, Value:HpRateList. 副本血量额外触发
  252. %% 场景数据结构
  253. -record(ets_scene, {
  254. id = 0 :: non_neg_integer(), % 场景ID包括资源id
  255. pool_id=0 :: non_neg_integer(), % 场景进程id
  256. % bpid = 0, % 广播进程pid
  257. name = <<>>, % 场景名称
  258. type = 0 :: non_neg_integer(), % 场景主类型(参考上面定义)
  259. subtype = 0 :: non_neg_integer(), % 场景次类型(参考上面定义)
  260. cls_type = 0 :: non_neg_integer(), % 所在节点(参考上面定义)
  261. broadcast = 0 :: non_neg_integer(), % 广播类型(参考上面定义)
  262. x = 0 :: non_neg_integer(), % 默认开始点
  263. y = 0 :: non_neg_integer(), % 默认开始点
  264. elem=[] :: list(), % 传送阵坐标
  265. requirement = [] :: list(), % 进入需求[{lv, SLv, RLv}]
  266. mask = "", % 障碍点数据
  267. npc = [], % npc数据
  268. mon = [], % 默认怪物数据
  269. jump = [], % 跳跃点配置
  270. width = 0 :: non_neg_integer(), % 场景资源宽度px
  271. height = 0 :: non_neg_integer(), % 场景资源长度px
  272. is_have_safe_area = 0 :: non_neg_integer(), % 是否有安全区(0没有, 1有)
  273. is_have_minimap = 0 :: non_neg_integer(), % 是否有小地图(0:无;1:有小地图)
  274. mount = 0 :: non_neg_integer(), % 是否可以上坐骑(0不能,1可以)
  275. parnter_battle_type = 0, % 伙伴战斗类型
  276. fuhuoscene = 0 :: non_neg_integer(), % 复活场景
  277. reborn_xys = [] :: list() % 复活坐标列表([{X, Y}, ...])
  278. }).
  279. %% 场景玩家数
  280. -record(scene_role_count, {
  281. key = {0, 0} % SceneKey: {场景Id, 场景PoolId}
  282. ,type = 0 % 场景类型
  283. ,num = 0 % 当前场景进程下的场景人数
  284. ,change_time = 0 % 变更时间
  285. ,num_maps = #{} % 不同房间(copy_id)的人数 #{CopyId => Num}
  286. }).
  287. %% 场景其他属性
  288. -record(ets_scene_other, {
  289. id = 0, % 场景id
  290. room_max_people = 100 % 房间最大人数
  291. }).
  292. %% 场景用户数据
  293. %% 只保留场景所需的信息
  294. -record(ets_scene_user, {
  295. id = 0, % 角色id
  296. scene = 0, % 场景id
  297. scene_pool_id=0, % 场景进程id
  298. copy_id = 0, % 房间id
  299. x = 0, % X坐标
  300. y = 0, % Y坐标
  301. last_load_scene = 0, % 最近load的场景(用于检测是否全新进入场景,避免复活或其他load_scene操作影响)
  302. last_load_pool = 0, % 最近load的场景分线(用于检测是否全新进入场景,避免复活或其他load_scene操作影响)
  303. server_id = 0, % 来自的服务器独立唯一标识
  304. node=none, % 来自节点
  305. platform = "", % 平台标示
  306. server_num = 0, % 所在的服标示
  307. server_name = <<>>, % 选择服务器的名字
  308. source="", % 渠道来源
  309. sid = undefined, % 玩家发送消息进程
  310. pid = undefined, % 玩家进程
  311. figure=undefined, % #figure{} (figure.hrl)
  312. battle_attr=undefined, % #battle_attr{} (attr.hrl)
  313. skill_list = [], % 技能列表
  314. skill_cd = [], % 技能cd
  315. skill_combo = [], % 技能连技(切换场景清空)
  316. skill_combo_ders = [], % 连技受击者(combo技能不重新选择攻击目标)[{Sign, Id}]
  317. shaking_skill = 0, % 正在前摇的技能id
  318. main_skill = {0, 0}, % 连技中主技能
  319. skill_link = [], % 连接技能
  320. skill_passive = [], % 被动技能的汇总(人物的被动=人被+天赋+xxx...)
  321. skill_pet_passive = [], % 宠物独立战斗的被动技能列表
  322. skill_talent_active_list = [], % 天赋主动技能列表 [{SkillId, SkillLv}]
  323. att_list = [], % 正在攻击我的怪物列表
  324. collect_pid = {0, 0, 0}, % 正在采集的目标:{MonPid, MonId, MonCfgId}
  325. hp_resume_ref = undefined, % 回血定时器
  326. follow_target_xy={0,0}, % 跟随目标xy坐标
  327. online = 1, % 是否真实在线
  328. team = 0, % 组队 #status_team{} (team.hrl)
  329. dun_multi = 0, % 跨服组队 #role_dun_multi{} 只放team_id和dun_id
  330. is_ride = 0, % 是否骑乘
  331. mount_figure = 0, % 坐骑id
  332. follow_pet = 0, % 宠物跟随
  333. show = 0, % 展示
  334. quickbar_skills = [], % 当前技能快捷栏装备的技能
  335. change_scene_sign = 0, % 排队换线标志
  336. leave_scene_sign = 0, % 离开场景标志(某些活动在进入排队前就已经切换成离开场景标识)
  337. boss_tired = 0, % 世界BOSS疲劳值
  338. bl_who = 0, % boss归属标识:0:不显示;1:显示
  339. baby_battle_attr = undefined, % 宝具战斗属性
  340. partner_battle_attr = undefined, % 伙伴/ai娘战斗属性
  341. child_battle_attr = undefined, % 孩子战斗属性
  342. scene_att_objects = [], % 场景攻击方对象ID列表 [#scene_att_object{}]
  343. mate_role_id = 0, % 配对玩家id 目前是海滩约会对象的id 默认为0
  344. att_tired = 0, % 攻击疲劳值,100为上限,不能造成伤害
  345. act_label = [], % 活动标识 [{K,V}]
  346. be_follow_mons = [], % 被跟随的怪物自增id列表
  347. boss_crush_r = 0, % boss碾压参数
  348. can_att_list = [], % 可攻击对象 [{对象类型, 对象列表}] eg:[{?BATTLE_SIGN_MON, [怪物配置Id]}, {?BATTLE_SIGN_PLAYER, [玩家ID: 空则表示所有]}]
  349. cannot_beatt_list = [] % 不可被攻击对象 [{对象类型, 对象列表}]
  350. ,mate_name = "" % 展示的羁绊名字
  351. ,mate_title = "" % 羁绊称号,如果该称号不为空,则显示该称号
  352. ,mate_lv = 0 % 羁绊称号等级
  353. ,support_id = 0 % 被协助玩家id
  354. ,support_name = "" % 被协助玩家名字
  355. ,support_team = 0 % 被协助玩家队伍id
  356. ,support_team_name = "" % 被协助玩家队长名字
  357. ,support_content = [] % 被协助者简要信息
  358. ,scene_motion = undefined % 运动能量相关行为信息
  359. ,badge = []
  360. ,role_dance = 0
  361. ,god_fighting = []
  362. ,offline_hosting = [] % 离线托管数据
  363. ,deserted_boss_tired = [] % 废都boss疲劳值
  364. ,support_pet_list = [] % 助战宠物列表[{宠物Id,星级,是否觉醒,是否主战}]
  365. ,unite_buffs = #{} % 联合BUFF
  366. ,reb_protect_time = 0 % 赏金boss免战时间
  367. ,deb_protect_time = 0 % 星域幻魔免战时间
  368. }).
  369. -record(ets_npc, {
  370. id = 0, % 唯一id
  371. target = 0, % 开服N天后 本服跨服主城NPC映射 任务使用
  372. func = 0, % 功能
  373. icon = 0, % 场景模型资源id
  374. image = 0, % 头像
  375. title = "", % 称谓
  376. name = "", % npc名字
  377. scene = 0, % npc所在场景
  378. copy_id = 0, % npc所在房间
  379. show = 1, % 默认是否显示 1显示 0不显示(默认显示)
  380. anima = "", % 模型动作和角度参数
  381. sname = "",
  382. x,
  383. y,
  384. talk,
  385. realm = 0,
  386. icon_scale = 0
  387. }).
  388. %% 场景进程状态数据结构
  389. -record(scene_state, {
  390. scene = #ets_scene{} % 场景数据
  391. ,msg_count = 0 % 已处理的消息数量
  392. ,msg_filter_len = 0 % 消息需要检查过滤的数量
  393. ,mon_mgr_pid = undefined % 场景怪物逻辑进程
  394. }).
  395. %% A*寻路
  396. -record(path_point, {
  397. xy,
  398. g,
  399. h,
  400. f,
  401. last_point
  402. }).
  403. %% add_buff_to_role AI参数
  404. -record(add_buff_to_role_args, {
  405. role_num = 0 % 给多少个玩家增加buff
  406. ,skill_id = 0 % 技能Id
  407. ,skill_lev = 0 % 技能等级
  408. ,scene = 0 % 场景Id
  409. ,scene_pool_id = 0 % 场景分线Id
  410. ,effect = [] % buff定时完了要执行什么效果。比如创建怪物[#create_mon_args{}]
  411. ,buff_time = 0 % buff持续时间
  412. ,role_id_list = [] % 玩家Id列表
  413. }).
  414. -endif.