%%%------------------------------------------------------------------- %%% @copyright (C) 2021, %%% @doc %%% %%% @end %%% Created : 25. 5月 2021 11:15 %%%------------------------------------------------------------------- -ifndef(__BASE_HRL__). -define(__BASE_HRL__, true). -include_lib("stdlib/include/ms_transform.hrl"). -include_lib("kernel/include/logger.hrl"). -define(RPC_CALL_TIMEOUT, 5000). -define(CALL_TIMEOUT, 5000). %% atom define %% 游戏校验key -define(AUTH_KEY, "4399-auth-key"). -define(TBL_KEY, "44c78a8401fd692bdefb58a32220861b"). -define(RECHARGE_KEY, "7e532cad3b95689afc4fddb7e9a83e09"). -define(FN_NORMAL_KEY, "aef842b91f54a878d00ad0897ed02473"). -define(CLIENT_KEY, "0248537b34d9cd80f8121fe07ec58eee"). -define(RCC_KEY, "53b16e47b634cd6046e4da2884ff77d8"). -define(API_KEY, "80260282bb470b304b60c03ab113e3ea"). % 通用api key -ifndef(OK). -define(OK, ok). -endif. %% 这里故意用的err,避免以系统抛异常的error冲突 -ifndef(ERROR). -define(ERROR, error). -endif. %% 这里故意用的err,避免以系统抛异常的error冲突 -ifndef(ERR). -define(ERR, err). -endif. -ifndef(TRUE). -define(TRUE, true). -endif. -ifndef(FALSE). -define(FALSE, false). -endif. -ifndef(TRUE_INT). -define(TRUE_INT, 1). -endif. -ifndef(FALSE_INT). -define(FALSE_INT, 0). -endif. -define(INT_TO_BOOLEAN(I), I =/= 0). -define(BOOLEAN_TO_INT(I), ?IF(I, ?TRUE_INT, ?FALSE_INT)). -ifndef(UNDEFINED). -define(UNDEFINED, undefined). -endif. -ifndef(CONTINUE). -define(CONTINUE, continue). -endif. -ifndef(IGNORE). -define(IGNORE, ignore). -endif. -ifndef(INFINITY). -define(INFINITY, infinity). -endif. -ifndef(NONE). -define(NONE, none). -endif. -ifndef(STOP). -define(STOP, stop). -endif. -ifndef(SKIP). -define(SKIP, skip). -endif. -ifndef(DISABLED). -define(DISABLED, disabled). -endif. -ifndef(ENABLED). -define(ENABLED, enabled). -endif. -ifndef(ONLINE). -define(ONLINE, online). -endif. -ifndef(OFFLINE). -define(OFFLINE, offline). -endif. -ifndef(VALUE). -define(VALUE, value). -endif. -ifndef(CONTINUE). -define(CONTINUE, continue). -endif. -define(IF(C, T), (?IF(C, T, skip))). -define(IF(C, T, F), (case (C) of true -> (T); false -> (F) end)). -define(MAP_GET(__K__, __Map__, __Default__), (case (__Map__) of #{__K__ := __V__} -> __V__; #{} -> (__Default__) end)). -define(THROW(ErrCode), throw(ErrCode)). -define(ASSERT(Express), case (Express) of true -> ok; false -> error(assert_error) end). -define(ASSERT(Express, ErrCode), case (Express) of true -> ok; false -> error(ErrCode) end). %% try_catch 捕获玩家自己抛的异常,需要玩家自行匹配 -define(TRY_CATCH(Fun), try (Fun) catch _:TRY_CACHE_Error:Trace -> ?ERROR(?MODULE, "snip err, Error = ~p~n", [{TRY_CACHE_Error, Trace}]), TRY_CACHE_Error end ). -define(CHILD_SPEC(I, Type), {I, {I, start_link, []}, permanent, 50000, Type, [I]}). -define(CHILD_SPEC(I, Type, Args), {I, {I, start_link, Args}, permanent, 50000, Type, [I]}). -define(CHILD_SPEC(C, I, Type, Args), {C, {I, start_link, Args}, permanent, 50000, Type, [I]}). %% 控制台打印 -define(PRINT(F), ?PRINT(F, [])). -define(PRINT(F, D), (io:format("~w:~w/~w:~w ~w ~w " ++ F ++ "\n", [?MODULE, ?FUNCTION_NAME, ?FUNCTION_ARITY, ?LINE, self(), erlang:get('!role_id!') | D]))). -define(DEBUG(T, F, D), ?LOG_DEBUG(F, D, #{tag => T, id => erlang:get('!role_id!'), domain => [ms_base]})). -define(INFO(T, F, D), ?LOG_INFO(F, D, #{tag => T, id => erlang:get('!role_id!'), domain => [ms_base]})). -define(WARN(T, F, D), ?LOG_WARNING(F, D, #{tag => T, id => erlang:get('!role_id!'), domain => [ms_base]})). -define(CRIT(T, F, D), ?LOG_CRITICAL(F, D, #{tag => T, id => erlang:get('!role_id!'), domain => [ms_base]})). -define(NOTICE(T, F, D), ?LOG_NOTICE(F, D, #{tag => T, id => erlang:get('!role_id!'), domain => [ms_base]})). -define(ERROR(T, F, D), ?LOG_ERROR(F, D, #{tag => T, id => erlang:get('!role_id!'), domain => [ms_base]})). -define(DEBUG(F, D), ?LOG_DEBUG(F, D, #{tag => ?MODULE, id => erlang:get('!role_id!'), domain => [ms_base]})). -define(INFO(F, D), ?LOG_INFO(F, D, #{tag => ?MODULE, id => erlang:get('!role_id!'), domain => [ms_base]})). -define(WARN(F, D), ?LOG_WARNING(F, D, #{tag => ?MODULE, id => erlang:get('!role_id!'), domain => [ms_base]})). -define(CRIT(F, D), ?LOG_CRITICAL(F, D, #{tag => ?MODULE, id => erlang:get('!role_id!'), domain => [ms_base]})). -define(NOTICE(F, D), ?LOG_NOTICE(F, D, #{tag => ?MODULE, id => erlang:get('!role_id!'), domain => [ms_base]})). -define(ERROR(F, D), ?LOG_ERROR(F, D, #{tag => ?MODULE, id => erlang:get('!role_id!'), domain => [ms_base]})). -define(DEBUG_TAG(Tag, Data), ?DEBUG(Tag, "~p=~w", [??Data, Data])). %% http单独打印 -define(HTTP_DEBUG(T, F, D), ?LOG_DEBUG(F, D, #{tag => T, id => erlang:get('!role_id!'), domain => [ms_http]})). -define(HTTP_INFO(T, F, D), ?LOG_INFO(F, D, #{tag => T, id => erlang:get('!role_id!'), domain => [ms_http]})). -define(HTTP_WARN(T, F, D), ?LOG_WARNING(F, D, #{tag => T, id => erlang:get('!role_id!'), domain => [ms_http]})). -define(HTTP_CRIT(T, F, D), ?LOG_CRITICAL(F, D, #{tag => T, id => erlang:get('!role_id!'), domain => [ms_http]})). -define(HTTP_NOTICE(T, F, D), ?LOG_NOTICE(F, D, #{tag => T, id => erlang:get('!role_id!'), domain => [ms_http]})). -define(HTTP_ERROR(T, F, D), ?LOG_ERROR(F, D, #{tag => T, id => erlang:get('!role_id!'), domain => [ms_http]})). -define(HTTP_DEBUG(F, D), ?LOG_DEBUG(F, D, #{tag => ?MODULE, id => erlang:get('!role_id!'), domain => [ms_http]})). -define(HTTP_INFO(F, D), ?LOG_INFO(F, D, #{tag => ?MODULE, id => erlang:get('!role_id!'), domain => [ms_http]})). -define(HTTP_WARN(F, D), ?LOG_WARNING(F, D, #{tag => ?MODULE, id => erlang:get('!role_id!'), domain => [ms_http]})). -define(HTTP_CRIT(F, D), ?LOG_CRITICAL(F, D, #{tag => ?MODULE, id => erlang:get('!role_id!'), domain => [ms_http]})). -define(HTTP_NOTICE(F, D), ?LOG_NOTICE(F, D, #{tag => ?MODULE, id => erlang:get('!role_id!'), domain => [ms_http]})). -define(HTTP_ERROR(F, D), ?LOG_ERROR(F, D, #{tag => ?MODULE, id => erlang:get('!role_id!'), domain => [ms_http]})). %% 协议录制 -define(GET_PROTO_TIME, ( case erlang:get(proto_time) of ?UNDEFINED -> erlang:put(proto_time, misc_lib:now_ms()), 0; ProtoTime -> ProtoTime1 = misc_lib:now_ms(), erlang:put(proto_time, ProtoTime1), ProtoTime1 - ProtoTime end)). -define(PROTO_TRACE(F, D), ?LOG_DEBUG(F, D, #{tag => proto, time1=>?GET_PROTO_TIME, id => erlang:get('!role_id!'), domain=>[proto]})). %% 打印错误码日志 -define(CODE_LOG(Code, Desc, LogArgs), ?INFO(?MODULE, "err_code:~p ~ts ~p=~w", [Code, Desc, ??LogArgs, LogArgs])). %% 错误码处理, 打印错误码日志,返回{err,code} -define(ERROR_CODE(Code, LogArgs), begin ?CODE_LOG(Code, "", LogArgs), {?ERR, Code} end). %% 错误码处理, 打印错误码日志,返回{err,code} -define(ERROR_CODE(Code, Desc, LogArgs), begin ?CODE_LOG(Code, Desc, LogArgs), {?ERR, Code} end). -define(SECONDS_PER_MINUTE, 60). -define(SECONDS_PER_HOUR, 3600). -define(SECONDS_PER_DAY, 86400). -define(SECONDS_PER_WEEK, 604800). -define(SECONDS_PER_YEAR, 31536000). -define(SECONDS_PER_LEAP_YEAR, 31622400). -define(SECONDS_FROM_0_TO_1970, 62167219200). -define(MSECS_PER_SEC, 1000). -define(MSECS_PER_MINUTE, 60000). -define(MSECS_PER_HOUR, 3600000). -define(MSECS_PER_DAY, 86400000). -define(MSECS_PER_WEEK, 604800000). -define(DAYS_PER_WEEK, 7). -define(DAYS_PER_YEAR, 365). -define(DAYS_PER_LEAP_YEAR, 366). -define(DAYS_PER_4YEARS, 1461). -define(DAYS_PER_100YEARS, 36524). -define(DAYS_PER_400YEARS, 146097). -define(DAYS_FROM_0_TO_1970, 719528). -define(TEN, 10). % 0.01k -define(ONE_HUNDRED, 100). % 0.1k -define(ONE_THOUSAND, 1000). % 1k -define(TEN_THOUSAND, 10000). % 1w -define(HUNDRED_THOUSAND, 100000). % 10w -define(ONE_MILLION, 1000000). % 100w -define(HUNDRED_MILLION, 100000000). % 1亿 -define(INTMAX, 2147483647). -define(UINTMAX, 4294967294). -define(UINT64MAX, 18446744073709551615). -define(RECORD_NAME_POS, 1). -type role_id() :: integer(). %% 日常清理偏移时间 -define(DAILY_HOUR, 0). -define(DAILY_RESET_SHIFT_TIME, (3600 * ?DAILY_HOUR)). -define(ETS_OPTIONS, [set, public, named_table, {keypos, 1}, {read_concurrency, true}, {write_concurrency, auto}]). %% todo,以下宏属于游戏相关的,写在这里是因为登录服和游戏服都要用到同一套宏定义 %% 服务器状态 -define(SERVER_STATUS_SMOOTH, 1). %% 服务器状态 - 流畅 -define(SERVER_STATUS_CROWD, 2). %% 服务器转态 - 拥挤 -define(SERVER_STATUS_FULL, 3). %% 服务器状态 - 爆满 %% 蜂鸟角色互通平台 -define(FN_PLATFORM_APP_AND, <<"1">>). -define(FN_PLATFORM_APP_IOS, <<"2">>). -define(FN_PLATFORM_WECHAT_AND, <<"1388">>). -define(FN_PLATFORM_WECHAT_IOS, <<"1390">>). -define(FN_PLATFORM_INTER_LIST, [?FN_PLATFORM_APP_AND, ?FN_PLATFORM_APP_IOS, ?FN_PLATFORM_WECHAT_AND, ?FN_PLATFORM_WECHAT_IOS]). %% 角色类型 -define(ACCOUNT_TYPE_VISITOR, 0). %% 游客 -define(ACCOUNT_TYPE_NORMAL, 1). %% 普通玩家 -define(ACCOUNT_TYPE_INNER, 2). %% 内部玩家 -define(ACCOUNT_TYPE_INNER_MGR, 3). %% 内部玩家管理员 -define(SERVER_ACTIVE_AUTO, 0). %% 服务器自动激活,开服时间到了自动开服 -define(SERVER_ACTIVE_CLOSE, 1). %% 服务器未激活,开服时间到了也不开服 -define(SERVER_ACTIVE_OPEN, 2). %% 服务器立刻激活,马上开服 -define(PLATFORM_ZONE_ALL, 0). %% 通用专区 -define(PLATFORM_ZONE_WECHAT, 1). %% 微信专区 -define(PLATFORM_ZONE_APP, 2). %% app专区 -define(PLATFORM_ZONE_WECHAT_FN_PLATFORMS, [?FN_PLATFORM_WECHAT_AND, ?FN_PLATFORM_WECHAT_IOS]). -endif.