%%% ------------------------------------------------------- %%% @author huangyongxing@yeah.net %%% @doc 场景 %%% ------------------------------------------------------- %%% 关于场景网格的划分 %%% 场景划分网格是为了进行广播优化,对于非全场景广播的场景可以大幅降低移动和战斗等更新广播量 %%% 场景网络划分后,对每个网格进行统一编号,按从左至右、从下至上的顺序编号,不需要用两个值来标识 %%% 例如HORIZ_GRID_CNT(场景横向宽度网格数量)为5时,编号如下: %%% ... %%% 11 12 13 14 15 %%% 6 7 8 9 10 %%% 1 2 3 4 5 %%% 场景元素信息变更需要广播时通常可以最多只对周围9个网格进行广播,即九宫格广播 %%% ------------------------------------------------------- %%% 关于场景坐标 %%% 坐标系原点在屏幕左下角,每个像素对应一个坐标点 %%% 服务端和客户端中角色坐标即为这个坐标系中的坐标 %%% ------------------------------------------------------- %%% 关于场景玩家数记录 %%% 1. scene_role_count包含场景进程对应角色数量、相应各房间(CopyId区分)的角色数量 %%% 场景进程存储这份数据在进程字典中,便于读写更新操作 %%% 同时将这份数据写入ETS表供其他进程查询用 %%% scene_mgr为ETS所有者,对ETS表只读;场景进程对ETS表只写不读;其他进程只读 %%% 2. 除了场景角色数量,还有每个网格附近九格区域角色总数量记录,只保存在场景进程的进程字典 %%% 附近九格角色总数量主要用于广播减频功能 %%% @doc %%% ------------------------------------------------------- -ifndef(SCENE_HRL). -define(SCENE_HRL, ok). -include("mon.hrl"). %% 场景数据结构 -define(ETS_SCENE, ets_scene). %% 场景玩家数(进程字典KEY,同时也是相应ETS表的表名) -define(SCENE_ROLE_COUNT, scene_role_count). %% 特定网格(AreaId)的附近九格区域总人数记录(进程字典KEY) -define(AREA_ROLE_COUNT(AreaId, CopyId), {area_role_count, CopyId, AreaId}). %% 场景中记录各房间或区域有哪些角色的进程字典KEY -define(AREA_ROLES(AreaId, CopyId), {area_roles, CopyId, AreaId}). % 场景区域中的角色Key -define(ROOM_ROLES(CopyId), {room_roles, CopyId}). % 场景房间中的角色key %% 场景配置中,某场景是否全场景广播的属性值 -define(BROADCAST_0, 0). % 不广播 -define(BROADCAST_1, 1). % 广播 %% 怪物类型定义 0普通怪,1采集怪,2任务采集怪,3护送怪,4拾取怪,6进击怪,7塔防怪,9自动进击怪,10非进攻巡逻怪 -define(MON_KIND_NORMAL, 0). % 普通怪 -define(MON_KIND_COLLECT, 1). % 采集怪 -define(MON_KIND_TASK_COLLECT, 2). % 任务采集怪 -define(MON_KIND_CONVOY, 3). % 护送怪 -define(MON_KIND_PICK, 4). % 拾取怪 -define(MON_KIND_ATT, 6). % 进击怪 -define(MON_KIND_TOWER_DEF, 7). % 塔防怪 -define(MON_KIND_ATT_AUTO, 9). % 自动进击怪:根据指定的攻击对象自动寻路 -define(MON_KIND_WALK_AUTO, 10). % 宝宝副本特殊怪物(遇到攻击会反击,否则按规定路径行走) %% 怪物Boss定义 0普通怪(普通怪),1普通野外怪(普通怪),2精英怪物(普通怪),3赏金BOSS(赏金专用),4世界BOSS(世界BOSS专用), %% 5不死BOSS,6副本BOSS,7任务BOSS,8战场BOSS(不可被击退),9废都BOSS,10废都BOSS精英,11活动BOSS -define(MON_NORMAL, 0). % 普通怪(普通怪) -define(MON_NORMAL_OUSIDE, 1). % 普通野外怪(普通怪) -define(MON_ELITE, 2). % 精英怪物(普通怪) -define(MON_REWARD_BOSS, 3). % 赏金BOSS(赏金专用)/次元幻魔 -define(MON_WORLD_BOSS, 4). % 世界BOSS(世界BOSS专用) -define(MON_KEEP_ALIVE, 5). % 不死BOSS: 受击时血量高于100,血量不变(血量变化由具体玩法处理);小于100时,自然扣血 -define(MON_DUN_BOSS, 6). % 副本BOSS -define(MON_TASK_BOSS, 7). % 任务BOSS -define(MON_ACT_BATTLE, 8). % 战场BOSS(不可被击退) -define(MON_DESERTED_BOSS, 9). % 废都BOSS/混乱星域 -define(MON_DESERTED_ELITE, 10). % 废都BOSS精英/混乱星域 -define(MON_ACT_BOSS, 11). % 活动BOSS -define(MON_HOME_BOSS, 12). % 幻魔之家BOSS -define(MON_HOME_GBOSS, 13). % 幻魔之家(社团)BOSS %% 传送类型 -define(TRANS_TYPE_SERVER, 0). % 服务器传送 -define(TRANS_TYPE_FLY, 1). % 小飞鞋 -define(TRANS_TYPE_WORLD, 2). % 世界传送(到场景出生点) -define(TRANS_TYPE_GATE_NEAR, 3). % 传送门 - 邻近城市传送(传统传送门) -define(TRANS_TYPE_GATE_ANY, 4). % 传送门 - 任意城市传送(需服务端计算距指定坐标最近的目标场景传送门) -define(IN_IDLE, 0). %% 正常状态 -define(IN_FIRE, 1). %% 祝火状态 %% 不死怪: 血量高于100时,血量不变,小于100时,自然扣血 -define(KEEP_ALIVE_MON_DIE_HP, 100). %% 大世界镜像场景id -define(MIRROR_IMAGE_SCENE(SceneId), (SceneId * 10 + 1)). %% ------------------------------------------------------- %% 场景逻辑点坐标与网格说明 %% %% LOGIC_PT 即 logic point,服务端与客户端约定, %% 按一定宽度与高度(单位:像素),划分出的方格,即为逻辑点 %% %% GRID 即为网格(九宫格广播依赖于网格划分,相邻九个GRID组成一个广播的九宫格) %% %% HORIZ_GRID_CNT 即为 水平方向上网格的数量(为了使网格采用一维数组编号, %% 所以需要定义此值。此值与网格的像素宽度,共同决定了地图水平宽度上限) %% 网格编号由服务端管理(广播需要),不发送给前端 %% %% ------------------------------------------------------- %% GRID_WIDTH 和 GRID_HEIGHT 需要按主流分辨率来决定, %% 九格广播的情况下,一个网格要超半屏,才不易引起边界上突然失踪的问题 %% 在近3D的视角下,横向无偏角,实际长度一致,纵向有偏角,实际需要更长一些 -define(LOGIC_PT_WIDTH, 100). % 一个逻辑坐标点X轴(水平)方向长度(pixel) -define(LOGIC_PT_HEIGHT, 100). % 一个逻辑坐标点Y轴(垂直)方向长度(pixel) -define(GRID_WIDTH, (12 * ?LOGIC_PT_WIDTH)). % 一个网格的横向像素长度(pixel) -define(GRID_HEIGHT, (12 * ?LOGIC_PT_HEIGHT)). % 一个网格的纵向像素长度(pixel) %% 场景横向划分网格数量: %% 可支持的地图横向宽度上限为?GRID_WIDTH * ?HORIZ_GRID_CNT,地图宽度如超出会引起移动广播问题 -define(HORIZ_GRID_CNT, 30). %% 坐标系原点在屏幕左下角 -define(GRID_OFFSET_M, 0). % 九宫格中间格子编号偏移值 -define(GRID_OFFSET_R, 1). % 九宫格右边格子编号偏移值 -define(GRID_OFFSET_L, -1). % 九宫格左边格子编号偏移值 -define(GRID_OFFSET_U, ?HORIZ_GRID_CNT). % 九宫格上边格子编号偏移值 -define(GRID_OFFSET_D, -?HORIZ_GRID_CNT). % 九宫格下边格子编号偏移值 -define(GRID_OFFSET_LU, (?HORIZ_GRID_CNT-1)). % 九宫格左上边格子编号偏移值 -define(GRID_OFFSET_LD, (-?HORIZ_GRID_CNT-1)). % 九宫格左下边格子编号偏移值 -define(GRID_OFFSET_RU, (?HORIZ_GRID_CNT+1)). % 九宫格右上边格子编号偏移值 -define(GRID_OFFSET_RD, (-?HORIZ_GRID_CNT+1)). % 九宫格右下边格子编号偏移值 %% ------------------------------------------------------- %% 场景类型定义.(特殊的活动最好新加场景类型) %% 主类型-影响生成逻辑,客户端ui, 对应#ets_scene.type -define(SCENE_TYPE_NORMAL, 0). % 主城(普通场景) -define(SCENE_TYPE_OUTSIDE, 1). % 野外场景 -define(SCENE_TYPE_DUNGEON, 2). % 副本场景 -define(SCENE_TYPE_WORLD_BOSS, 3). % 世界BOSS场景 -define(SCENE_TYPE_GUILD, 4). % 公会场景 -define(SCENE_TYPE_ACTIVE, 5). % 活动场景(通用) -define(SCENE_TYPE_VOID_FAM, 6). % 无尽领域 -define(SCENE_TYPE_REWARD_BOSS, 7). % 赏金BOSS场景 -define(SCENE_TYPE_GWAR, 8). % 百团大战 -define(SCENE_TYPE_ARENA, 9). % 9 竞技联赛(竞技场) -define(SCENE_TYPE_HOT_SPRING, 10). % 10 舞池派对(温泉) -define(SCENE_TYPE_MADNESS, 11). % 狂战领域 -define(SCENE_TYPE_3v3, 12). % 3V3 -define(SCENE_TYPE_DRUMWAR, 13). % 钻石大战 -define(SCENE_TYPE_1vN, 14). % 1vN -define(SCENE_TYPE_CAMP_WAR, 15). % 跨服团战 -define(SCENE_TYPE_CGW, 16). % 跨服国战 -define(SCENE_TYPE_WASTELAND, 17). % 废土战场(饥饿游戏)场景 -define(SCENE_TYPE_DESERTED_BOSS, 18). % 混乱星域BOSS场景 -define(SCENE_TYPE_JUMP_ACT, 19). % 跳一跳玩法 -define(SCENE_TYPE_HOME_BOSS, 20). % 幻魔/社团之家 -define(SCENE_TYPE_EXP_SEA, 21). % 经验海 %% 下面的作废 新增顶掉 删掉旧功能 -define(SCENE_TYPE_TOPPK, 99). % 巅峰竞技 %% 次类型:按场景的对角色的影响而分,对应 #ets_scene.subtype -define(SCENE_SUBTYPE_NORMAL, 0). % 场景次类型-自由切换pk模式场景,入场pk状态看pkstate,入场后可以切换pk状态 -define(SCENE_SUBTYPE_SAFE, 1). % 场景次类型-安全场景,强制切换为和平状态。无法战斗 -define(SCENE_SUBTYPE_PK, 2). % 场景次类型-强制切换pk状态场景,入场pk状态看pkstate,入场后不能切换pk状态 -define(SCENE_SUBTYPE_GROUP, 3). % 场景次类型-强制切换pk为和平状态场景,入场后不能切换pk状态,pk按照分组模式 %% 场景所在节点类型 #ets_scene.cls_type -define(SCENE_CLS_TYPE_GAME, 0). % 非跨服场景 -define(SCENE_CLS_TYPE_CENTER, 1). % 跨服场景 %% 场景所在节点类型 #ets_scene.broadcast -define(BROADCAST_AREA, 0). % 九宫格广播 -define(BROADCAST_ALL, 1). % 全场景广播 %% 场景mark类型 -define(SCENE_MASK_NORMAL, 0). -define(SCENE_MASK_BLOCK, -1). -define(SCENE_MASK_SAFE, -2). %% 移动类型 -define(MOVE_ROLE_WALK, 0). % 正常走路 -define(MOVE_ROLE_JUMP, 1). % 跳跃(主动式) -define(MOVE_ROLE_ACCELERATE, 2). % 任务加速 -define(MOVE_ROLE_FLASH, 3). % 闪现移动 -define(MOVE_ROLE_TASK_JUMP, 4). % 任务飞行、起跳点跳跃等(被动式) -define(MOVE_ROLE_DASH, 5). % 冲刺(前端用) -define(MOVE_ROLE_BLINK, 6). % 瞬移 %% 服务端内部值,由MOVE_ROLE_JUMP转换而来,以精确度为代价省去场景进程中的计算逻辑 -define(MOVE_ROLE_JUMP_COST_ENG, 101). % 跳跃(消耗能量,服务端MOVE_ROLE_JUMP的特定状态) %% 伙伴战斗类型 -define(PARTNER_BATTLE_TYPE_NO, 0). % 不出战 -define(PARTNER_BATTLE_TYPE_GROUP, 1). % 伙伴组出战(位置1、2为一组,位置3、4为一组) -define(PARTNER_BATTLE_TYPE_DIE_SHIFT, 2). % 死亡切换(默认出两个) -define(PARTNER_BATTLE_TYPE_ROBOT_ALL, 3). % 机器人的伙伴 %% 复活类型 % 1元宝原地复活 % 2绑定元宝原地复活 % 3回城复活 % 4原血量复活 % 5原地满血复活 % 8挂机自动复活 % 9通用副本复活 -define(REVIVE_DUNGEON, 9). %% 副本复活 %% -------------------------------------------------------------- %% 以下复活类型待定 -define(REVIVE_KF_3V3, 10). %% 跨服3v3 -define(REVIVE_MELEE, 11). %% 大乱斗钻石原地复活 -define(REVIVE_DRUMWARD, 12). %% 钻石大战复活 -define(REVIVE_KF_TOWN_WAR_OWN, 13). %% 跨服城战复活点复活 -define(REVIVE_KF_TOWN_WAR_BORN, 14). %% 跨服城战出生点复活 -define(REVIVE_MELEE_FREE, 15). %% 大乱斗免费原地复活 -define(REVIVE_FOR_GOODS, 16). %% 使用复活券原地复活 -define(REVIVE_MAX_TYPE, ?REVIVE_FOR_GOODS). %% 最大复活类型 %% 脱离战斗时间(s) -define(ESCAPE_ATT_TIME, 10). -define(EXP_SHARE_ALL_TO_ATTACKER, 0). % 所有伤害者获得所有经验 -define(EXP_SHARE_PART_TO_ATTACKER, 1). % 按照伤害比例分配经验 -define(EXP_SHARE_TO_SCENE, 2). % 同场景的玩家获得经验 比例按动态经验和个人等级挂钩 -define(EXP_SHARE_ALL_TO_ATTACKER_DYNAMIC, 3). % 所有伤害者获得所有经验 比例按动态经验和个人等级挂钩 %% 场景房间人数上限的最小限制 -ifdef(DEV_SERVER). -define(MIN_SCENE_MAX_ROLE, 1). -else. -define(MIN_SCENE_MAX_ROLE, 30). -endif. %% 玩家场景更新类型 -define(SCENE_USER_UPDATE_MATE_ROLE, 10). % 羁绊对象更新 -define(SCENE_USER_UPDATE_MATE_TITLE, 11). % 羁绊称号更新 -define(SCENE_USER_UPDATE_MATE_LV, 12). % 羁绊等级更新 -define(SCENE_USER_UPDATE_FOLLOW_GUARD, 13). % 守护跟随更新 %% ----------------------------------------------------------------- %% 一些特殊的场景或场景类型定义 %% ----------------------------------------------------------------- %% 需要服务器强制自动动态创建分线的场景类型 -define(SCENE_TYPE_NEED_SUB_LINE, [ ?SCENE_TYPE_NORMAL ,?SCENE_TYPE_OUTSIDE ,?SCENE_TYPE_GWAR ,?SCENE_TYPE_MADNESS ,?SCENE_TYPE_VOID_FAM ]). %% 玩家能够主动切换分线的场景类型SCENE_TYPE_NORMAL和SCENE_TYPE_OUTSIDE 见12040和12041协议 -define(SCENE_TYPE_CAN_ACTIVE_SWITCH, [ ?SCENE_TYPE_NORMAL, ?SCENE_TYPE_OUTSIDE ]). %% 掉落归属显示的boss -define(IS_DROP_BOSS(X), lists:member(X, [ ?MON_REWARD_BOSS, ?MON_DESERTED_BOSS, ?MON_DESERTED_ELITE, ?MON_HOME_BOSS, ?MON_HOME_GBOSS ])). %% 是不是boss -define(IS_BOSS(X), lists:member(X, [ ?MON_REWARD_BOSS, ?MON_DUN_BOSS, ?MON_TASK_BOSS, ?MON_DESERTED_BOSS, ?MON_DESERTED_ELITE, ?MON_HOME_BOSS, ?MON_HOME_GBOSS ] )). %% 禁止通过12005协议传送进入的场景id列表 -define(FORBID_SCENE_IDS, [4101, 4301, 4302]). %% ----------------------------------------------------------------- %% 场景进程字典 %% Key:{dungeon_hp_rate, CopyId}, Value:HpRateList. 副本辅助信息,CopyId:副本id %% 怪物进程字典 %% Key:{dungeon_hp_rate, MonId}, Value:HpRateList. 副本血量额外触发 %% 场景数据结构 -record(ets_scene, { id = 0 :: non_neg_integer(), % 场景ID包括资源id pool_id=0 :: non_neg_integer(), % 场景进程id % bpid = 0, % 广播进程pid name = <<>>, % 场景名称 type = 0 :: non_neg_integer(), % 场景主类型(参考上面定义) subtype = 0 :: non_neg_integer(), % 场景次类型(参考上面定义) cls_type = 0 :: non_neg_integer(), % 所在节点(参考上面定义) broadcast = 0 :: non_neg_integer(), % 广播类型(参考上面定义) x = 0 :: non_neg_integer(), % 默认开始点 y = 0 :: non_neg_integer(), % 默认开始点 elem=[] :: list(), % 传送阵坐标 requirement = [] :: list(), % 进入需求[{lv, SLv, RLv}] mask = "", % 障碍点数据 npc = [], % npc数据 mon = [], % 默认怪物数据 jump = [], % 跳跃点配置 width = 0 :: non_neg_integer(), % 场景资源宽度px height = 0 :: non_neg_integer(), % 场景资源长度px is_have_safe_area = 0 :: non_neg_integer(), % 是否有安全区(0没有, 1有) is_have_minimap = 0 :: non_neg_integer(), % 是否有小地图(0:无;1:有小地图) mount = 0 :: non_neg_integer(), % 是否可以上坐骑(0不能,1可以) parnter_battle_type = 0, % 伙伴战斗类型 fuhuoscene = 0 :: non_neg_integer(), % 复活场景 reborn_xys = [] :: list() % 复活坐标列表([{X, Y}, ...]) }). %% 场景玩家数 -record(scene_role_count, { key = {0, 0} % SceneKey: {场景Id, 场景PoolId} ,type = 0 % 场景类型 ,num = 0 % 当前场景进程下的场景人数 ,change_time = 0 % 变更时间 ,num_maps = #{} % 不同房间(copy_id)的人数 #{CopyId => Num} }). %% 场景其他属性 -record(ets_scene_other, { id = 0, % 场景id room_max_people = 100 % 房间最大人数 }). %% 场景用户数据 %% 只保留场景所需的信息 -record(ets_scene_user, { id = 0, % 角色id scene = 0, % 场景id scene_pool_id=0, % 场景进程id copy_id = 0, % 房间id x = 0, % X坐标 y = 0, % Y坐标 last_load_scene = 0, % 最近load的场景(用于检测是否全新进入场景,避免复活或其他load_scene操作影响) last_load_pool = 0, % 最近load的场景分线(用于检测是否全新进入场景,避免复活或其他load_scene操作影响) server_id = 0, % 来自的服务器独立唯一标识 node=none, % 来自节点 platform = "", % 平台标示 server_num = 0, % 所在的服标示 server_name = <<>>, % 选择服务器的名字 source="", % 渠道来源 sid = undefined, % 玩家发送消息进程 pid = undefined, % 玩家进程 figure=undefined, % #figure{} (figure.hrl) battle_attr=undefined, % #battle_attr{} (attr.hrl) skill_list = [], % 技能列表 skill_cd = [], % 技能cd skill_combo = [], % 技能连技(切换场景清空) skill_combo_ders = [], % 连技受击者(combo技能不重新选择攻击目标)[{Sign, Id}] shaking_skill = 0, % 正在前摇的技能id main_skill = {0, 0}, % 连技中主技能 skill_link = [], % 连接技能 skill_passive = [], % 被动技能的汇总(人物的被动=人被+天赋+xxx...) skill_pet_passive = [], % 宠物独立战斗的被动技能列表 skill_talent_active_list = [], % 天赋主动技能列表 [{SkillId, SkillLv}] att_list = [], % 正在攻击我的怪物列表 collect_pid = {0, 0, 0}, % 正在采集的目标:{MonPid, MonId, MonCfgId} hp_resume_ref = undefined, % 回血定时器 follow_target_xy={0,0}, % 跟随目标xy坐标 online = 1, % 是否真实在线 team = 0, % 组队 #status_team{} (team.hrl) dun_multi = 0, % 跨服组队 #role_dun_multi{} 只放team_id和dun_id is_ride = 0, % 是否骑乘 mount_figure = 0, % 坐骑id follow_pet = 0, % 宠物跟随 show = 0, % 展示 quickbar_skills = [], % 当前技能快捷栏装备的技能 change_scene_sign = 0, % 排队换线标志 leave_scene_sign = 0, % 离开场景标志(某些活动在进入排队前就已经切换成离开场景标识) boss_tired = 0, % 世界BOSS疲劳值 bl_who = 0, % boss归属标识:0:不显示;1:显示 baby_battle_attr = undefined, % 宝具战斗属性 partner_battle_attr = undefined, % 伙伴/ai娘战斗属性 child_battle_attr = undefined, % 孩子战斗属性 scene_att_objects = [], % 场景攻击方对象ID列表 [#scene_att_object{}] mate_role_id = 0, % 配对玩家id 目前是海滩约会对象的id 默认为0 att_tired = 0, % 攻击疲劳值,100为上限,不能造成伤害 act_label = [], % 活动标识 [{K,V}] be_follow_mons = [], % 被跟随的怪物自增id列表 boss_crush_r = 0, % boss碾压参数 can_att_list = [], % 可攻击对象 [{对象类型, 对象列表}] eg:[{?BATTLE_SIGN_MON, [怪物配置Id]}, {?BATTLE_SIGN_PLAYER, [玩家ID: 空则表示所有]}] cannot_beatt_list = [] % 不可被攻击对象 [{对象类型, 对象列表}] ,mate_name = "" % 展示的羁绊名字 ,mate_title = "" % 羁绊称号,如果该称号不为空,则显示该称号 ,mate_lv = 0 % 羁绊称号等级 ,support_id = 0 % 被协助玩家id ,support_name = "" % 被协助玩家名字 ,support_team = 0 % 被协助玩家队伍id ,support_team_name = "" % 被协助玩家队长名字 ,support_content = [] % 被协助者简要信息 ,scene_motion = undefined % 运动能量相关行为信息 ,badge = [] ,role_dance = 0 ,god_fighting = [] ,offline_hosting = [] % 离线托管数据 ,deserted_boss_tired = [] % 废都boss疲劳值 ,support_pet_list = [] % 助战宠物列表[{宠物Id,星级,是否觉醒,是否主战}] ,unite_buffs = #{} % 联合BUFF ,reb_protect_time = 0 % 赏金boss免战时间 ,deb_protect_time = 0 % 星域幻魔免战时间 }). -record(ets_npc, { id = 0, % 唯一id target = 0, % 开服N天后 本服跨服主城NPC映射 任务使用 func = 0, % 功能 icon = 0, % 场景模型资源id image = 0, % 头像 title = "", % 称谓 name = "", % npc名字 scene = 0, % npc所在场景 copy_id = 0, % npc所在房间 show = 1, % 默认是否显示 1显示 0不显示(默认显示) anima = "", % 模型动作和角度参数 sname = "", x, y, talk, realm = 0, icon_scale = 0 }). %% 场景进程状态数据结构 -record(scene_state, { scene = #ets_scene{} % 场景数据 ,msg_count = 0 % 已处理的消息数量 ,msg_filter_len = 0 % 消息需要检查过滤的数量 ,mon_mgr_pid = undefined % 场景怪物逻辑进程 }). %% A*寻路 -record(path_point, { xy, g, h, f, last_point }). %% add_buff_to_role AI参数 -record(add_buff_to_role_args, { role_num = 0 % 给多少个玩家增加buff ,skill_id = 0 % 技能Id ,skill_lev = 0 % 技能等级 ,scene = 0 % 场景Id ,scene_pool_id = 0 % 场景分线Id ,effect = [] % buff定时完了要执行什么效果。比如创建怪物[#create_mon_args{}] ,buff_time = 0 % buff持续时间 ,role_id_list = [] % 玩家Id列表 }). -endif.