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