%%%------------------------------------------------
|
|
%%% @doc 全局公共定义
|
|
%%%------------------------------------------------
|
|
-ifndef(COMMON_HRL). %% COMMON_HRL START
|
|
-define(COMMON_HRL, ok).
|
|
|
|
-record(errorcode_msg, {
|
|
type = "",
|
|
about = ""
|
|
}).
|
|
|
|
-include("otp_compatible.hrl").
|
|
|
|
%% DEV_SERVER宏由web后台编译的时候决定是否定义
|
|
%% 通常开发服默认定义了DEV_SERVER宏,稳定服默认未定义
|
|
%% PS: 特别注意,如果修改参数进行编译,需要删除相关已编译模块重新编译
|
|
|
|
-ifdef(DEV_SERVER).
|
|
-define(DEBUG(F, A), util:debug(F, A, ?MODULE, ?LINE)).
|
|
-define(ERR_MSG(Cmd, ErrCode),
|
|
case data_errorcode_msg:get(ErrCode) of
|
|
#errorcode_msg{type = Type, about = Msg} ->
|
|
io:format("~w[line:~w]:{~p, ~p, ~ts}~n ", [?MODULE, ?LINE, Cmd, Type, Msg]);
|
|
_ ->
|
|
io:format("~w[line:~w]:{~p, ~p}~n ", [?MODULE, ?LINE, Cmd, ErrCode])
|
|
end).
|
|
-else.
|
|
-define(DEBUG(_F, _A), ok).
|
|
-define(ERR_MSG(_Cmd, _ErrCode), ok).
|
|
-endif.
|
|
|
|
-define(ERR(F, A), util:errlog(F, A, ?MODULE, ?LINE)).
|
|
-define(INFO(F, A), util:info(F, A, ?MODULE, ?LINE)).
|
|
|
|
%% 错误处理
|
|
% -define(DEBUG(F, A), util:log_file("DEBUG", F, A, ?MODULE, ?LINE)).
|
|
% -define(INFO(F, A), util:log_file("INFO", F, A, ?MODULE, ?LINE)).
|
|
% -define(ERR(F, A), util:log_file("ERROR", F, A, ?MODULE, ?LINE)).
|
|
-define(DEBUG(F), ?DEBUG(F, [])).
|
|
-define(INFO(F), ?INFO(F, [])).
|
|
-define(ERR(F), ?ERR(F, [])).
|
|
|
|
%% 输出信息到Erlang终端
|
|
-define(DEBUG_TTY(F, A), game_logger:debug(F, A, ?MODULE, ?LINE)).
|
|
-define(INFO_TTY(F, A), game_logger:info(F, A, ?MODULE, ?LINE)).
|
|
-define(ERR_TTY(F, A), game_logger:error(F, A, ?MODULE, ?LINE)).
|
|
-define(DEBUG_TTY(Msg), ?DEBUG_TTY(Msg, [])).
|
|
-define(INFO_TTY(Msg), ?INFO_TTY(Msg, [])).
|
|
-define(ERR_TTY(Msg), ?INFO_TTY(Msg, [])).
|
|
|
|
%% 定义DEBUG_TTY的别名——PRINT
|
|
-define(PRINT(F, A), ?DEBUG_TTY(F, A)).
|
|
|
|
%% --------------------------------------
|
|
%% TRY执行某个函数
|
|
%% --------------------------------------
|
|
|
|
%% -define(TRY_CATCH(X), (fun()-> try X catch A : B -> ?ERR("~p : ~p : ~p : ~p\n", [??X, A, B, erlang:get_stacktrace()]), {A, B} end end)() ).
|
|
|
|
%% 使用__作为变量名前缀,尽量避免同名变量
|
|
%% 使用(fun -> end)()而不是begin end,是为了防止同一代码块需要反复使用此宏代码时存在变量名冲突
|
|
-define(TRY(__F), (fun() -> __M=?MODULE, __L=?LINE,
|
|
try
|
|
__F
|
|
catch
|
|
?EXCEPTION(__C, __R, __S) ->
|
|
util:errlog("~p, {~p,~p},~n stacktrace: ~p~n", [??__F, __C, __R, ?GET_STACK(__S)], __M, __L),
|
|
{__C, __R}
|
|
end
|
|
end)()).
|
|
-define(CURR_STACK(), element(2, process_info(self(), current_stacktrace))).
|
|
%% --------------------------------------
|
|
|
|
%% 是否开发环境
|
|
-ifdef(DEV_SERVER).
|
|
-define(IS_DEV_SERVER, true).
|
|
-else.
|
|
-define(IS_DEV_SERVER, false).
|
|
-endif.
|
|
|
|
%% 节点类型
|
|
-define(NODE_GAME, 0). %% 游戏节点
|
|
-define(NODE_CENTER, 1). %% 跨服节点
|
|
|
|
%% 节点node Id
|
|
-define(GAME_NODE_ID, 10). %% 游戏服node id
|
|
-define(CLUSTERS_NODE_ID, 0). %% 跨服中心node id
|
|
|
|
-define(SERVER_ENV_CLOSE, 0). %% 服务器状态: 0关闭
|
|
-define(SERVER_ENV_STARTED, 1). %% 服务器状态: 1开启
|
|
-define(SERVER_ENV_STARTING, 2). %% 服务器状态: 2开启中
|
|
|
|
-define(CLUSTER_LINK_CLOSE, 0). %% 跨服连接状态: 断开连接
|
|
-define(CLUSTER_LINK_CONNECTED, 1). %% 跨服连接状态: 已连接
|
|
|
|
-define(ONE_MIN, 60).
|
|
-define(DIFF_SECONDS_0000_1970, 62167219200).
|
|
-define(ONE_DAY_SECONDS, 86400).
|
|
-define(ONE_WEEK_SECONDS, (86400*7)).
|
|
-define(FOUR_HOUR_SECONDS, (4*3600)).
|
|
|
|
%% PS: Erlang后面的版本扩大了范围,不过再大也意义不大了,保留这个历史限制
|
|
%% 定时器超时时间上限 ( 16#FFFFFFFE / 1000 / 86400 = 49.71 天)
|
|
%% 16#FFFFFFFF : 2^32 - 1
|
|
-define(MAX_TIMEOUT, 16#FFFFFFFF).
|
|
|
|
%% 百分比系数型属性的对应分母值(或其他非属性的万分比配置值分母)
|
|
-define(RATIO_MAX, 10000).
|
|
-define(RATIO_10W, 100000).
|
|
|
|
%% 逻辑天数
|
|
-define(LOGIC_NEW_DAY, 4). %% 4点为新的一天
|
|
-define(DAY_LOGIC_OFFSET_HOUR, 4). %% 天数逻辑偏移小时
|
|
|
|
-define(ONE_KBYTE, 1024). %% 1kb
|
|
|
|
-define(OBJECT_TUPLE(Type, GoodsId, Num), {Type, GoodsId, Num}).
|
|
|
|
|
|
|
|
%% 玩家在线状态
|
|
-define(ONLINE_OFF, 0). %% 玩家离线
|
|
-define(ONLINE_ON, 1). %% 玩家在线
|
|
-define(ONLINE_OFF_HOSTING, 2). %% 玩家离线托管中
|
|
|
|
%% 玩家加经验类型
|
|
% -define(ADD_EXP_NO, 0). %% 无类型
|
|
% -define(ADD_EXP_GM, 1). %% GM
|
|
% -define(ADD_EXP_TASK, 2). %% 任务
|
|
% -define(ADD_EXP_MON, 3). %% 个人杀怪
|
|
% -define(ADD_EXP_DUN, 4). %% 副本
|
|
% -define(ADD_EXP_TEAM_MON, 5). %% 队伍杀怪
|
|
% -define(ADD_EXP_GOODS, 6). %% 物品使用加经验
|
|
% -define(ADD_EXP_ONHOOK_OFFLINE, 7). %% 离线挂机
|
|
% -define(ADD_EXP_BONFIRE, 8). %% 公会篝火
|
|
% -define(ADD_EXP_ONHOOK_ONLINE, 9). %% 在线挂机
|
|
% -define(ADD_EXP_GUILD_GUARD, 10). %% 公会守护
|
|
% -define(ADD_EXP_RESOURCE_BACK, 11). %% 奖励找回
|
|
% -define(ADD_EXP_NOON_QUIZ, 12). %% 中午答题
|
|
% -define(ADD_EXP_CHARM_BEACH, 13). %% 魅力海滩
|
|
% -define(ADD_EXP_EXPLIBRARY, 14). %% 经验书馆
|
|
% -define(ADD_EXP_BUTTERFLY, 15). %% 捕蝶积分
|
|
% -define(ADD_EXP_HUSONG, 18). %% 护送
|
|
% -define(ADD_EXP_TASK_GUILD, 19). %% 公会任务
|
|
% -define(ADD_EXP_TASK_DAILY, 20). %% 日常任务
|
|
%% --------------------------------------
|
|
|
|
-define(ETS_NODE, ets_node). %% 节点列表
|
|
-define(ETS_ROLE_BACK_ID, ets_role_back_id). %% 玩家回归邀请id
|
|
|
|
%% 比较函数
|
|
-define (OP (A, Op, B), case Op of
|
|
gt -> A > B; %% greater than
|
|
lt -> A < B; %% less than
|
|
eq -> A =:= B; %% equal
|
|
ge -> A >= B; %% greater equal
|
|
le -> A =< B; %% less equal
|
|
_ -> false
|
|
end).
|
|
|
|
-endif. %% COMMON_HRL END
|
|
|