Bläddra i källkod

编译过了

master
SisMaker 4 år sedan
förälder
incheckning
dd86776e13
47 ändrade filer med 2353 tillägg och 1695 borttagningar
  1. +484
    -0
      include/common111.hrl
  2. +232
    -0
      include/record111.hrl
  3. +1540
    -0
      include/table_to_record.hrl
  4. +0
    -0
      src/comMisc/cast_and_call.erl
  5. +0
    -0
      src/comMisc/loop.erl
  6. +0
    -0
      src/comMisc/misc.erl
  7. +47
    -1
      src/comMisc/misc1.erl
  8. +3
    -139
      src/comMisc/misc_admin.erl
  9. +0
    -0
      src/comMisc/prof.erl
  10. +0
    -0
      src/comMisc/tool.erl
  11. +5
    -5
      src/comMisc/util.erl
  12. +11
    -99
      src/comMisc/util1.erl
  13. +2
    -2
      src/hotUpdate/u.erl
  14. +3
    -3
      src/hotUpdate/u2.erl
  15. +3
    -84
      src/httpSocket/http_lib.erl
  16. +0
    -714
      src/srvNodeMgr/misc.erl
  17. +1
    -1
      src/srvNodeMgr/tools/gameWorld/test/excel2mysql.erl
  18. +0
    -124
      src/srvNodeMgr/tools/gameWorld/test/misc/auto_id.erl
  19. +0
    -132
      src/srvNodeMgr/tools/gameWorld/test/misc/php_parser.erl
  20. +0
    -6
      src/srvNodeMgr/tools/gameWorld/test/mysql_test.erl
  21. +1
    -7
      src/srvNodeMgr/tools/gameWorld/test/mysql_to_emongo.erl
  22. +1
    -22
      src/srvNodeMgr/tools/gameWorld/test/random_test.erl
  23. +2
    -2
      src/srvNodeMgr/tools/gameWorld/test/robot/new_robot/new_robot.erl
  24. +2
    -2
      src/srvNodeMgr/tools/gameWorld/test/robot/new_robot/ptr_30.erl
  25. +2
    -2
      src/srvNodeMgr/tools/gameWorld/test/robot/proto/ptr_11.erl
  26. +1
    -2
      src/srvNodeMgr/tools/gameWorld/test/robot/proto/ptr_19.erl
  27. +2
    -3
      src/srvNodeMgr/tools/gameWorld/test/robot/proto/ptr_40.erl
  28. +2
    -2
      src/srvNodeMgr/tools/gameWorld/test/robot/proto/ptr_44.erl
  29. +0
    -5
      src/srvNodeMgr/tools/gameWorld/test/robot/robot.erl
  30. +1
    -7
      src/srvNodeMgr/tools/gameWorld/test/robot/robot.hrl
  31. +1
    -2
      src/srvNodeMgr/tools/gameWorld/test/robot/robot_battle.erl
  32. +0
    -1
      src/srvNodeMgr/tools/gameWorld/test/robot/robot_chat.erl
  33. +0
    -5
      src/srvNodeMgr/tools/gameWorld/test/robot/robot_gateway.erl
  34. +0
    -2
      src/srvNodeMgr/tools/gameWorld/test/robot/robot_goods.erl
  35. +0
    -6
      src/srvNodeMgr/tools/gameWorld/test/robot/robot_guild.erl
  36. +0
    -6
      src/srvNodeMgr/tools/gameWorld/test/robot/robot_mail.erl
  37. +0
    -5
      src/srvNodeMgr/tools/gameWorld/test/robot/robot_mount.erl
  38. +0
    -6
      src/srvNodeMgr/tools/gameWorld/test/robot/robot_newbie.erl
  39. +0
    -6
      src/srvNodeMgr/tools/gameWorld/test/robot/robot_openfunc.erl
  40. +1
    -8
      src/srvNodeMgr/tools/gameWorld/test/robot/robot_pet.erl
  41. +2
    -12
      src/srvNodeMgr/tools/gameWorld/test/tools/record_to_code.erl
  42. +1
    -8
      src/srvNodeMgr/tools/gameWorld/test/tools/table_to_erlang.erl
  43. +1
    -8
      src/srvNodeMgr/tools/gameWorld/test/tools/table_to_record.erl
  44. +0
    -247
      src/srvNodeMgr/tools/gameWorld/test/tools/task_data_checker.erl
  45. +1
    -7
      src/srvNodeMgr/tools/gameWorld/test/union_to_emongo.erl
  46. +0
    -1
      src/srvNodeMgr/tools_cq/tester.erl
  47. +1
    -1
      src/uuidMd5/utMd5.erl

+ 484
- 0
include/common111.hrl Visa fil

@ -0,0 +1,484 @@
%%%------------------------------------------------
%%% File : common.hrl
%%% Author : csj
%%% Created : 2010-09-15
%%% Description:
%%%------------------------------------------------
-define(ALL_SERVER_PLAYERS, 100000).
%%-define(SLICEWIDTH, 25).
%%-define(SLICEHEIGHT, 15).
-define(SLICEWIDTH, 15).
-define(SLICEHEIGHT, 9).
-define(SOLUT_X, 30). %% X
-define(SOLUT_Y, 20). %% Y
%% (db_mysql db_mongo)
-define(DB_MODULE, db_mysql).
%%()
-define(DB_LOG_MODULE, db_mysql_admin).
-define(DB_SERVER, mysql_dispatcher).
%%()
-define(DB_SERVER_ADMIN, mysql_admin_dispatcher).
-define(DB_LOG_DELAY, 1). %,
-define(DB_LOG_NORMAL, 0).%
%%mongo主数据库链接池
-define(MASTER_POOLID, master_mongo).
%%mongo从数据库链接池
-define(SLAVE_POOLID, slave_mongo).
%%Mysql数据库连接
-define(DB_POOL, mysql_conn).
%%
-define(HEADER_LENGTH, 4). %% 2Byte + 2Byte
%%
-define(HEART_TIMEOUT, 5 * 60 * 1000). %%
%%
-define(HEART_TIMEOUT_TIME, 2). %%
-define(TCP_TIMEOUT, 1000). %
%%
-define(SCENE_WORKER_NUMBER, 5).
%%
-define(SCENE_AGENT_NUMBER, 30).
%%
-define(SCENE_PLAYER_MAX_NUMBER, 50).
%%
-define(SCENE_MAX_NUMBER, 70).
-define(GRID_CANGO, 1). %
-define(GRID_SHADE, 2). %
-define(GRID_BLOCK, 3). %
-define(ETS_SCENE_MAP_INFO, ets_map_info). %
%%
-define(TICKET, "SDFSDESF123DFSDF").
%%tcp_server监听参数
-define(TCP_OPTIONS, [binary, {packet, 0}, {active, false}, {reuseaddr, true}, {nodelay, false}, {delay_send, true}, {send_timeout, 5000}, {keepalive, true}, {exit_on_close, true}]).
-define(RECV_TIMEOUT, 5000).
%%
-define(FINISHED_MASTER_LV, 35).
%%
-define(UNREPORT_DAYS, 3).
%%
-define(UNLOGIN_DAYS, 3).
%%
-define(LIMIT_HP, 10).
%%
-define(E, 2.718281828459).
%% ---------------------------------
%% Logging mechanism
%% Print in standard output
-define(PRINT(Format, Args),
io:format(Format, Args)).
-define(TEST_MSG(Format, Args),
logger:test_msg(?MODULE, ?LINE, Format, Args)).
-define(DEBUG(Format, Args),
logger:debug_msg(?MODULE, ?LINE, Format, Args)).
-define(INFO_MSG(Format, Args),
logger:info_msg(?MODULE, ?LINE, Format, Args)).
-define(WARNING_MSG(Format, Args),
logger:warning_msg(?MODULE, ?LINE, Format, Args)).
-define(ERROR_MSG(Format, Args),
logger:error_msg(?MODULE, ?LINE, Format, Args)).
-define(CRITICAL_MSG(Format, Args),
logger:critical_msg(?MODULE, ?LINE, Format, Args)).
%% log event manager name
-define(LOGMODULE, logger_mgr).
-define(INIT_SCENE_ID, 101). %%
-define(INIT_SCENE_XY, {10, 10}). %%
%
-define(GENDER_ANY, 0).
-define(GENDER_MALE, 1).
-define(GENDER_FEMALE, 2).
%%
-define(PLAYER_NORMAL_STATE, 0). %%
-define(PLAYER_BATTLE_STATE, 1). %%
%
-define(CAREER_F, 1). %
-define(CAREER_M, 2). %
-define(CAREER_D, 3). %
-define(CAREER_ANY, 4). %
-define(CAREER_PET, 5). %
-define(CAREER_MOUNT, 6). %
%%
-define(SEX_ANY, 0). %
-define(SEX_MALE, 1). %
-define(SEX_FEMALE, 2). %
%VIP类型定义
-define(VIP_NOT, 0). %VIP
-define(VIP_EXPERIENCE, 1). %VIP钟点卡()
-define(VIP_DAY, 11). %VIP日卡
-define(VIP_WEEK, 12). %VIP周卡
-define(VIP_MONTH, 13). %VIP月卡
-define(VIP_HALF_YEAR, 21). %VIP半年卡
-define(VIP_YEAR, 22). %VIP年卡
-define(VIP_FOREVER, 99). %VIP终身卡
-define(ELEMENT_PLAYER, 1). %%
-define(ELEMENT_MONSTER, 2). %%
-define(ELEMENT_ALL, 3). %% ,
-define(ELEMENT_PET, 4). %%
-define(EXP_DUNGEON, 399).
%%
-define(DEST_SINGLE, 0). %
-define(DEST_ATTACK, 1). %
-define(DEST_DEFEND, 2). %
-define(DEST_GROUND, 3). %
%%
-define(SEND_MSG, 1).
%%player.switch开关位定义(32)
-define(SW_PET_BIT, 16#00000001). %
-define(SW_MOUNT_BIT, 16#00000002). %
-define(SW_GUILD_BIT, 16#00000004). %
-define(SW_RELATION_BIT, 16#00000000). % 16#00000008
-define(SW_SKILL_BIT, 16#00000010). %
-define(SW_CAMP_BIT, 16#00000020). %
-define(SW_MER_BIT, 16#00000040). %
-define(SW_BIT7, 16#00000080).
-define(SW_BIT8, 16#00000100).
-define(SW_BIT9, 16#00000200).
-define(SW_BIT10, 16#00000400).
-define(SW_BIT11, 16#00000800).
-define(SW_BIT12, 16#00001000).
-define(SW_BIT13, 16#00002000).
-define(SW_BIT14, 16#00004000).
-define(SW_BIT15, 16#00008000).
-define(SW_BIT16, 16#00010000).
-define(SW_BIT17, 16#00020000).
-define(SW_BIT18, 16#00040000).
-define(SW_BIT19, 16#00080000).
-define(SW_BIT20, 16#00100000).
-define(SW_BIT21, 16#00200000).
-define(SW_BIT22, 16#00400000).
-define(SW_BIT23, 16#00800000).
-define(SW_BIT24, 16#01000000).
-define(SW_BIT25, 16#02000000).
-define(SW_BIT26, 16#04000000).
-define(SW_BIT27, 16#08000000).
-define(SW_BIT28, 16#10000000).
-define(SW_BIT29, 16#20000000).
-define(SW_BIT30, 16#40000000).
-define(SW_BIT31, 16#80000000).
%%
-define(MON_LIMIT_NUM, 100000000). %%
-define(DIFF_SECONDS_1970_1900, 2208988800).
-define(DIFF_SECONDS_0000_1900, 62167219200).
-define(ONE_DAY_SECONDS, 86400). %%
-define(ONE_DAY_MILLISECONDS, 86400000). %%
-define(COMMON_ATTR_SPEED, 1200). %
-define(COMMON_MOVE_SPEED, 7). %
-define(COMMON_MOVE_PATROL, 3). %
-define(COMMON_MOVE_SURROUND, 3). %
-define(DEFAULT_NAME, "匿名").
%%ETS
-define(ETS_SERVER, ets_server).
-define(ETS_GET_SERVER, ets_get_server).
-define(ETS_GET_SCENE, ets_get_scene).
-define(ETS_SYSTEM_INFO, ets_system_info). %%
-define(ETS_MONITOR_PID, ets_monitor_pid). %% PID
-define(ETS_STAT_SOCKET, ets_stat_socket). %% Socket送出数据统计()
-define(ETS_STAT_DB, ets_stat_db). %% 访()
-define(ETS_SYS_ANNONUCE, sys_announce).
%% -define(ETS_BASE_MON, ets_base_mon). %% _
%% -define(ETS_MONGROUP, ets_mongroup). %% _
-define(ETS_NPC, temp_npc). %% _NPC/
-define(ETS_TEMP_SCENE, temp_scene). %% _
-define(ETS_SCENE, ets_scene). %%
-define(ETS_NPC_LAYOUT, npc_layout). %% -NPC布局
-define(ETS_TEMP_MON_LAYOUT, temp_mon_layout). %% _
-define(SECNE_MON, scene_mon). %% ETSdict key
-define(SECNE_DROP, scene_drop). %%
-define(MON_STATE_TIMER_KEY, mon_state_timer_key). %% TimerKey
-define(DUNGEON_MON_STATE_TIMER_KEY, dungeon_mon_state_timer_key). %% TimerKey
-define(ETS_TEMP_GUILD_LEVEL, temp_guild_level). %%
-define(MON_STATE_SPEED_7, 143). %% 143 ,7
-define(MON_STATE_SPEED_BIAS_7, 202). %% 202 ,7线
-define(MON_STATE_SPEED_3, 333). %% 333 ,3
-define(MON_STATE_SPEED_BIAS_3, 470). %% 470 ,3线
-define(BUFF_TIMER_TIME, 200). %buff技能计时器刷新时间
-define(SKILL_TIMER_KEY, skill_timer_key). %% TimerKey
-define(MON_STATE_1_GUARD, 1).
-define(MON_STATE_2_TRYATT, 2).
-define(MON_STATE_3_MOVE, 3).
-define(MON_STATE_4_FIGHT, 4).
-define(MON_STATE_5_RETURN, 5).
-define(MON_STATE_6_DEAD, 6).
-define(MON_STATE_7_CHANT, 7).
-define(PLAYER_STATE_TIMER_KEY, player_state_timer_key). %% TimerKey
-define(PLAYER_STATE_LOOP_TIME, 500). %% 500
-define(MON_SKILL_TIMER_LIST, mon_skill_timer_list). %%
-define(MON_SKILL_TIMER_LOOP_TIME, 250). %% 250
-define(ETS_ONLINE, ets_online). %% 线
-define(ETS_ONLINE_SCENE, ets_online_scene). %%
%% -define(ETS_BASE_SCENE_POSES, ets_base_scene_poses). %% _
-define(ETS_BASE_SCENE_MON, ets_base_scene_mon). %% _
-define(ETS_BASE_SCENE_NPC, ets_base_scene_npc). %% _NPC信息
-define(ETS_SCENE_MON, ets_mon). %%
-define(ETS_SCENE_NPC, ets_npc). %% NPC
-define(ETS_DUNGEON_DAILY, dungeon_daily). %%
-define(ETS_DUNGEON_FINISH, dungeon_finish). %%
-define(ETS_DUNGEON_MASTER, dungeon_master). %%
-define(ETS_OPERA, opera). %%
-define(ETS_SCENE_GIFT, scene_gift). %%
-define(ETS_BLACKLIST, ets_blacklist). %%
-define(ETS_GOODS_ONLINE, ets_goods_online). %% 线
-define(ETS_GOODS_EQUIP, ets_goods_equip). %%
-define(ETS_GUILD, ets_guild). %%
-define(ETS_GUILD_MEMBER, ets_guild_member). %%
-define(ETS_GUILD_APPLY, ets_guild_apply). %%
-define(ETS_GUILD_INVITE, ets_guild_invite). %%
-define(ETS_MOUNT, ets_mount). %%ETS表名
-define(ETS_ACTIVITY, ets_activity). %%
-define(ETS_CONTACT, ets_contact).
-define(ETS_RELATION, ets_relation). %%ETS表名
-define(ETS_RELATION_AGENT, ets_relation_agent). %%ets
-define(ETS_TEAM, ets_team). %%ETS
-define(ETS_TEAM_MEMBER, ets_team_member). %%ETS
-define(ETS_TEMP_SHOP, ets_temp_shop). %%
-define(ETS_SHOP_LOG, ets_shop_log). %%
-define(ETS_NPC_SHOP_LOG, ets_npc_shop_log). %% npc商店购买物品记录
-define(ETS_RAND_SHOP, rand_shop). %%
-define(ETS_TPL_TASK, tpl_task). %%
%-define(ETS_TASK_DAILY_FINISH, ets_task_daily_finish). %%
-define(ETS_TASK_PROCESS, task_process). %%
-define(ETS_TASK_FINISH, task_finish). %%
-define(ETS_TASK_QUERY_CACHE, ets_task_query_cache). %%
-define(ETS_TASK_DETAIL, ets_task_datil). %%
-define(ETS_TASK_MASTER, task_master).%
-define(ETS_HEAVEN, heaven).%
-define(ETS_TASK_HEAVEN, task_heaven).%
-define(ETS_TASK_DAILY, task_daily).%
-define(ETS_MOUNT_LEVEL_STAR, ets_mount_lv_star).%%
%
-define(ETS_LEADER, ets_newbie_leader).%
-define(ONE_DAY_MSECONDS, (24 * 60 * 60 * 1000)). %
-define(ONE_HOUR_SECONDS, (60 * 60)). %
-define(ONE_HOUR_MSECONDS, (60 * 60 * 1000)). %
-define(ONE_MINUTE_SECONDS, 60). %
-define(ONE_MINUTE_MSECONDS, (60 * 1000)). %
-define(START_NOW, {-1, 0, 0}). %% {-1, 0, 0}:
-define(START_TOMORROW, {-2, 0, 0}). %% {-2, 0, 0}:
%%
-define(REFRESH_ROLE_ATTRI, 1). %
-define(REFRESH_BAG, 2). %
-define(REFRESH_P_EQUIP, 3). %
-define(REFRESH_MONEY, 4). %
-define(REFRESH_GOODS_INFO, 5). %
-define(REFRESH_R_EQUIP, 6). %
-define(REFRESH_ROLE_POWER, 7). %
-define(REFRESH_ROLE_HP, 8). %
-define(REFRESH_PAR_ATTRI, 9). %
-define(REFRESH_PAR_HP, 10). %
-define(REFRESH_STORE, 11). %
-define(REFRESH_TREA, 12). %
-define(REFRESH_DAN, 13). %
%%
%-define(ROLE_BATTLE_CAPACITY_CONTROLLED_PARA, -242).
-define(HURT_CALL_BACK, 0). %
-define(HURT_NOT_CALL_BACK, 1). %
%%
-define(PLAYER_POWER_LIMIT, 200). % ()
-define(ADD_POWER_PER_30_MIN, 5). % ()
-define(POWER_INCREASE, 40). % ()
-define(POWER_DECREASE, 20). % ()
-define(POWER_BUFF, 50). % (buff)121850buff
-define(COST_BUY_POWER, 20). %
%%
-define(DEFAUL_BAG_CELL, 36 * 2).
-define(DEFAULT_STORE_CELL, 24).
%% VIP等级
-define(VIP_LV_0, 0). % 0vip
-define(VIP_LV_1, 1). % vip
-define(VIP_LV_2, 2). % vip
-define(VIP_LV_3, 3). % vip
-define(VIP_LV_4, 4). % vip
-define(VIP_LV_5, 5). % vip
-define(VIP_LV_6, 6). % vip
-define(VIP_TITLE_CHG_MAX_TIMES, 3). % vip称号最多只能修改3次
-define(VIP_TITLE_MAX_LENGTH, 18). % vip称号上限6个汉字
-define(VIP_INFINATE_TIME, 2000000000). % VIP有效时间()
-define(BOOKING_GIFT, 181000005). %
% 18
-define(UPDATE_TITLE_TIMER, 18 * 60 * 1000).
%%
-define(MONEY_T_GOLD, 1). %%
-define(MONEY_T_BGOLD, 2). %%
-define(MONEY_T_COIN, 3). %%
-define(MONEY_T_BCOIN, 4). %%
-define(MONEY_T_COUPON, 5). %%
-define(MONEY_T_HONOR, 6). %% /
-define(MONEY_T_EXCHANGE, 7). %%
%%
-define(LOCATION_BAG, 0). %
-define(LOCATION_PLAYER, 1). %
-define(LOCATION_PET, 2). %
-define(LOCATION_TREA, 4). % 5300
-define(LOCATION_WINGS, 5). %
-define(LOCATION_HOLY_PLATFORM, 6). %
-define(LOCATION_MAIL, 11). %
-define(LOCATION_MARKET, 12). %
-define(LOCATION_PARTNER_TRANSFORM, 20). %
-define(TenMinute, 10 * 60 * 1000).
%%
-define(RESULT_OK, 1). %%
-define(RESULT_FAIL, 0). %%
-define(DELAY_CALL, 5000).
%% -define(ETS_TEMP_GOODS, temp_goods). %%
-define(ETS_COMPOSE_RULE, ets_compose_rule). %%
-define(ETS_GOODS_INLAY, ets_goods_inlay). %%
-define(ETS_MARKET_GOODS_ONLINE, ets_market_goods_online). %%
-define(ETS_MARKET_GOODS_ATTR, ets_market_goods_attr). %%
-define(ETS_GOODS_DROP, ets_goods_drop). %%
-define(ETS_DROP_TYPE, ets_drop_type). %%
-define(ETS_DROP_NUM, ets_drop_num). %%
-define(ETS_DROP_CONTENT, ets_drop_content). %%
-define(ETS_MARKET_SELLING, ets_mk_selling). %%
-define(ETS_MARKET_REQUEST, ets_mk_request). %%
-define(GLOBAL_MARK_PROCESS, g_market_process). %% /
-define(ETS_PET_INFO, ets_pet_info). %%
-define(ETS_GOODS_BUFF, ets_goods_buff).
-define(ETS_ZIP_PROTO, ets_zip_proto).
% 32
-define(MAX_S32, 2147483647).
% 16
-define(MAX_S16, 32767).
% 8
-define(MAX_S8, 127).
% 8
-define(MAX_U8, 255).
%%
-define(PET_REST, 0). %
-define(PET_FIGHTING, 1). %
-define(PET_NOT_EXIST, 2). %
%%
-define(DEFAULT_T_WEAPON, 0). %
-define(DEFAULT_T_ARMOR, 0). %
-define(DEFAULT_T_FASHION, 0). %
-define(DEFAULT_T_WINGS, 0). %
-define(DEFAULT_T_WEAPONACCESSORIES, 0). %
-define(DEFAULT_T_MOUNT, 0). %
%%
-define(ETS_MERIDIAN, player_meridian).%
-define(ETS_TPL_BONES, base_bones).%
%%
-define(CONDITION_NULL, 1).
-define(CONDITION_END, 2).
-define(CONDITION_MON_DEAD, 3).
-define(CONDITION_NULLEND, 4).
%%
-define(NOTICE_ICON_TYPE_FRIEND, 1). %%
-define(NOTICE_ICON_TYPE_GUILD, 2). %%
-define(NOTICE_ICON_TYPE_MAIL, 3). %%
-define(NOTICE_ICON_TYPE_GIFT, 4). %%
-define(NOTICE_ICON_TYPE_FIGHT, 5). %%
-define(NOTICE_ICON_TYPE_FLOWER, 6). %%
%%
-define(ZIP_PROTO, [12002, 12003, 12007, 12010, 12012, 12013, 12015, 13000, 13001, 13002, 13003, 13007, 14001, 14002
, 14003, 14005, 15000, 15002, 15004, 15015, 15021, 15026, 19002, 19011, 20001, 21000, 25001, 30006
, 30601, 30701, 35002, 40001, 40005, 44000, 45001, 45006, 45008, 50001]).
-define(ZONE_POS, [{0, 0}, {0, 1}, {1, 1}, {1, 0}, {1, -1}, {0, -1}, {-1, -1}, {-1, 0}, {-1, 1}]).
-record(scene_map_info, {
map_id,
grid_row,
grid_col,
grid_type
}).
-define(PLAYER_EXIT_UNORMAL, 0). %退
-define(ALL_CAMP_TYPE, [1, 2, 3]). %
%%
-define(HANDLE_CHARGE_ORDER, 1). %
-define(UNHANDLE_CHARGE_ORDER, 0). %
%%
-define(CHARGE_ORDER_STATUS_SUCCESSFUL, 1).
-define(CHARGE_ORDER_STATUS_FAILED, 0).
%%
-define(CHARGE_CHANEL_GM, 50). %GM指令渠道
-define(CHARGE_CHANEL_4399_SHOU_YOU_BI, 1). %4399
-define(CHARGE_CHANEL_SHEN_ZHOU_XING, 2). %
-define(CHARGE_CHANEL_LIAN_TONG, 3). %
-define(CHARGE_CHANEL_ALIPAY, 4). %

+ 232
- 0
include/record111.hrl Visa fil

@ -0,0 +1,232 @@
%%%------------------------------------------------
%%% File : record.erl
%%% Author : csj
%%% Created : 2010-09-15
%%% Description: record
%%%------------------------------------------------
-include("table_to_record.hrl").
%% *10000,
%% 使 *10000/100,
-record(battle_attr, {
x = 0, %% X
y = 0, %% Y
direct_x = 0, %% x坐标
direct_y = 0, %% y坐标
career = 1, %% (common.hrl定义)
skill_cd_all = 0, %% CD, ()
buff_timer_start = false, %% buff计时器是否开启 true. false.
skill_cd_list = [], %% 使CD,[{SkillId, CdTime},...], CdTime为冷冻到期时间()
link_skill_buff = [], %% buff列表
delay_skill_buff = [], %% buff
timer_buff = [], %% buff
hurted_buff = [], %% buff
skill_buff = [], %% Buff/,/[{BufId, },...] ,
buff1 = [], %% BUF列表/, [{BufId, },...]
buff2 = [], %% BUF列表/, [{BufId, CD到期时间, },...]
sing_expire = 0, %% (), , 0
use_combopoint = 0, %% 使combopoint增加属性攻击值(0, 使)
combopoint_max = 0, %%
combopoint = 0, %% (/,)
hit_point = 0, %%
hit_point_max = 0, %%
magic = 0, %%
magic_max = 0, %%
anger = 0, %%
anger_max = 0, %%
attack = 0, %%
attack_ratio = 0, %% (Buff附加值, 0)
defense = 0, %%
defense_ratio = 0, %% (Buff附加值, 0)
abs_damage = 0, %%
fattack = 0, %%
fattack_ratio = 0, %% (Buff附加值, 0)
mattack = 0, %%
mattack_ratio = 0, %% (Buff附加值, 0)
dattack = 0, %%
dattack_ratio = 0, %% (Buff附加值, 0)
fdefense = 0, %%
fdefense_ratio = 0, %% (Buff附加值, 0)
mdefense = 0, %%
mdefense_ratio = 0, %% (Buff附加值, 0)
ddefense = 0, %%
ddefense_ratio = 0, %% (Buff附加值, 0)
speed = 0, %%
attack_speed = 0, %%
hit_ratio = 1, %% ()
dodge_ratio = 1, %% ()
crit_ratio = 1, %% ()
tough_ratio = 1, %% ()
frozen_resis_ratio = 0, %% ()
weak_resis_ratio = 0, %% ()
flaw_resis_ratio = 0, %% ()
poison_resis_ratio = 0, %% ()
avoid_attack_ratio = 0, %% (Buff附加值, 0)
avoid_fattack_ratio = 0, %% (Buff附加值, 0)
avoid_mattack_ratio = 0, %% (Buff附加值, 0)
avoid_dattack_ratio = 0, %% (Buff附加值, 0)
avoid_crit_attack_ratio = 0, %% (Buff附加值, 0)
avoid_crit_fattack_ratio = 0, %% (Buff附加值, 0)
avoid_crit_mattack_ratio = 0, %% (Buff附加值, 0)
avoid_crit_dattack_ratio = 0, %% (Buff附加值, 0)
ignore_defense = 0, %% ()
ignore_fdefense = 0, %% ()
ignore_mdefense = 0, %% ()
ignore_ddefense = 0, %% ()
status_stop = 0, %%
status_silent = 0, %% []
status_unstoptable = 0, %%
status_unattrackable = 0, %% []
change_appearance = 0, %%
energy = {}, %% ,
passive_skill_attr = [], %% ,
hurt_call_back = 0, %%
passive_hurt_rate = 0, %%
control_radio = 0, %%
walk_path = [], %% ,[DestX,DestY,Len,<<WalkPath>>]
move_destination = {0, 0}, %%
ai_init_id = 0, %% AI
clock_time = 143, %% (7,1000/7)
demage_buff_list = [], %% buff列表
remove_buff_list = [], %% buff列表
attr_freeze_probability = 0, %%
hp_cover_callback = 0, %%
is_rush_success = 0, %% 0. 1. 2.
fight_pos = {1, 1}, %% 1,0/1,1/1,-1/0,1/0,-1/-1,0/-1,1/-1,-1
return_steps = 0, %% ()
move_speed_queue = {{0, []}, {0, []}},%%buff效果队列
damage_reduction = {0, 0, 0, ""}, %%
damage_reduction_queue = [], %%
invincible = 0, %%
reduce_dot_damage = 0, %%dot千分比伤害
abs_crit_ratio = 1, %%
real_defense = 0 %%
}).
%%(player.other)
-record(player_other, {
skill_list = [], % [{SkillId, Level}, ...]
skill_point = {0, 0}, %
socket = undefined, % socket
pid = undefined, % Pid
pid_goods = undefined, % Pid
pid_send = [], % Pid()
pid_battle = undefined, % Pid
pid_scene = undefined, % Pid
pid_dungeon = undefined, %
pid_task = undefined, % Pid
pid_mount = undefined, % Pid
node = undefined, %
blacklist = false, %
pk_mode = 0, % 0-pk模式 1- 2-pk模式 3-pk模式
goods_ets_id = 0, % ets表ID
equip_current = [], %
role_suit = [], %
weapon_strenLv = 0, %
armor_strenLv = 0, %
fashion_strenLv = 0, %
wapon_accstrenLv = 0, %
wing_strenLv = 0, %
mount_fashion = 0, %
team_id = 0, % ID, 0
team_leader = 0, % 1,
pet_facade = 0, %
pet_status = 0, % 0, 1, 2
pet_quality_lv = 0, %
pet_name = <<"">>, %
step_check_tasks = [], %
hardware_info = {} %
}).
%%
-record(task_process_info, {
task_unfinsh = [], %%
task_fin = [] %%
}).
%%
-record(mon_drop_goods, {
drop_id = 0, %% ID
uid = 0, %% ID
mon_id = 0, %% ID
goods_id = 0, %% ID
goods_num = 0, %%
x = 0, %% X左边
y = 0, %% Y坐标
expire_time = 0 %%
}).
%% npc商店日志
-record(ets_npc_shop_log, {
key,
buy_num, %%
buy_time %%
}).
%%
-record(ets_shop_log, {
key,
buy_num, %%
buy_time %%
}).
%%
-record(ets_special_shop_log, {
key,
buy_num, %%
buy_time %%
}).
%%
-record(team, {
tid = 0, %%ID
leader_id = 0, %%ID
leader_nick = <<>>, %%
leader_level = 0, %%
direct_join = 0, %%
invite_allow = 0, %%
max_num = 0, %%
member_ids = [] %%ID列表
}).
%%
-record(team_member, {
uid = 0, %%ID
tid = 0, %%ID
level = 0, %%
nick = <<>>, %%
force = 0, %%
camp = 0, %%
career = 0, %%
gender = 0 %%
}).
-record(energy, {
attack = <<"{}">>, %%k
injured, %%k
crit, %%k
battle_recover, %% k
normal_recover, %% k
last_reflesh_time, %%
energy_val, %%
max_energy, %% ,
freeze_second = 0, %%
attack_callback_rate = 1, %%
injured_rate = 1000, %%
recover_percent = 0 %%
}).
-record(ets_scene_slice, {
id = 0,
obj = []
}).
-record(hardware_info, {
os = 0,%%0. 1.android 2.iphone
os_version = <<"">>,%%2.3.4
device = <<"">>,%%GT-S5830
device_type = 0,%%0. 1.android 2.iPhone 3.iPad
screen = <<"">>,%%480*800
mno = 0,%%(mobile network operators)0. 1. 2. 3.
nm = 0 %%(Networking mode)0. 1.3G 2.WIFI 3.2G
}).

+ 1540
- 0
include/table_to_record.hrl
Filskillnaden har hållits tillbaka eftersom den är för stor
Visa fil


src/srvNodeMgr/tools/gameWorld/test/performance/cast_and_call.erl → src/comMisc/cast_and_call.erl Visa fil


src/srvNodeMgr/tools/gameWorld/test/performance/loop.erl → src/comMisc/loop.erl Visa fil


src/srvNodeMgr/baizhan/misc/misc.erl → src/comMisc/misc.erl Visa fil


src/srvNodeMgr/tools/gameWorld/test/misc/misc.erl → src/comMisc/misc1.erl Visa fil

@ -1,4 +1,50 @@
-module(misc).
-module(misc1).
%%
%% API Functions
%%
%% get the pid of a registered name
whereis_name({local, Atom}) ->
erlang:whereis(Atom);
whereis_name({global, Atom}) ->
global:whereis_name(Atom).
register(local, Name, Pid) ->
erlang:register(Name, Pid);
register(global, Name, Pid) ->
%% case global:whereis_name(Name) of
%% Pid0 when is_pid(Pid0) ->
%% exit(Pid0,normal);
%% undefined ->
%% global:re_register_name(Name, Pid)
%% end.
global:re_register_name(Name, Pid);
register(unique, Name, Pid) ->
global:register_name(Name, Pid).
unregister({local, Atom}) ->
erlang:unregister(Atom);
unregister({global, Atom}) ->
global:unregister(Atom).
is_process_alive(Pid) ->
try
if is_pid(Pid) ->
%%访
%% case rpc:call(node(Pid), erlang, is_process_alive, [Pid]) of
%% {badrpc, _Reason} -> false;
%% Res -> Res
%% end;
erlang:is_process_alive(Pid);
true -> false
end
catch
_:_ -> false
end.
get_child_count(Atom) ->
case whereis_name({local, Atom}) of

src/srvNodeMgr/tools/gameWorld/test/misc/misc_admin.erl → src/comMisc/misc_admin.erl Visa fil

@ -1,50 +1,15 @@
%%%----------------------------------------
%%% @Module : misc_admin
%%% @Author :
%%% @Created :
%%% @Description:
%%%----------------------------------------
-module(misc_admin).
%%
%% Include files
%%
-include("common.hrl").
-include("record.hrl").
-include("debug.hrl").
-include("goods.hrl").
%%
-define(PARAM_ERROR_CODE, <<"param_error">>). %
-define(FLAG_ERROR_CODE, <<"flag_error">>). %
-define(FAILED_CODE, <<"failed">>). %
-define(SUCCESS_CODE, <<"success">>). %
-define(INFO_MSG, io:format).
-define(TRACE, io:format).
-compile(export_all).
%% http请求IP验证
treat_http_request(Socket, PacketStr) ->
case gen_tcp:recv(Socket, 0, ?RECV_TIMEOUT) of
{ok, Packet} ->
try
P = lists:concat([PacketStr, tool:to_list(Packet)]),
io:format("PacketStr ~p ~n", [http_util:get_cmd_parm(P)]),
%% ?INFO_MSG("Packet:~p ~n", [P]),
{Cmd, KvList, Md5Key} = http_util:get_cmd_parm(P),
Md5Str = string:to_upper(tool:md5(Md5Key)),
io:format("md5 ~p ~n", [Md5Str]),
%% ?INFO_MSG("Cmd:~p ~n ~p ~n ~p ~n ~p ~n ~n", [Cmd, KvList, Md5Key, Md5Str]),
case Md5Str =:= http_util:get_param("flag", KvList) of
false -> do_handle_request(Cmd, KvList, Socket);
true -> gen_tcp:send(Socket, ?FLAG_ERROR_CODE)
end
catch
What:Why ->
?ERROR_MSG("What ~p, Why ~p, ~p", [What, Why, erlang:get_stacktrace()]),
gen_tcp:send(Socket, ?FAILED_CODE)
end;
{error, Reason} ->
?ERROR_MSG("http_request error Reason:~p ~n", [Reason])
end.
%% 广
do_handle_request("send_sys_bulletin", KvList, Socket) ->
@ -277,79 +242,6 @@ do_handle_request("freshen_online_user", KvList, Socket) ->
?INFO_MSG("freshen_online_user ~p ~n", []),
gen_tcp:send(Socket, ?SUCCESS_CODE);
%%
do_handle_request("admin_send_gift", KvList, Socket) ->
Action = list_to_integer(http_util:get_param("action", KvList)),
UserNames = http_util:get_param("user_names", KvList),
UserIds = http_util:get_param("user_ids", KvList),
MinLvStr = http_util:get_param("min_lv", KvList),
MinLv =
case MinLvStr =:= [] of
true -> 0;
false -> list_to_integer(MinLvStr)
end,
MaxLvStr = http_util:get_param("max_lv", KvList),
MaxLv =
case MaxLvStr =:= [] of
true -> 0;
false -> list_to_integer(MaxLvStr)
end,
%% min_login_time = http_util:get_param("min_login_time", KvList),
%% max_login_time = http_util:get_param("max_login_time", KvList),
%% min_reg_time = http_util:get_param("min_reg_time", KvList),
%% max_reg_time = http_util:get_param("max_reg_time", KvList),
%% sex = http_util:get_param("sex", KvList),
%% career = http_util:get_param("career", KvList),
%% guild = http_util:get_param("guild", KvList),
MailTitle = http_util:get_param("mail_title", KvList),
MailConten = http_util:get_param("mail_content", KvList),
MoneyAmounts = http_util:get_param("money_amounts", KvList), % 使money_type币种对应
MoneyTypes = http_util:get_param("money_types", KvList), % 1=2=3=4= 5=
ItemIds = http_util:get_param("item_ids", KvList), % id使id
ItemTypes = http_util:get_param("item_types", KvList), % :1= 0=
ItemCounts = http_util:get_param("item_counts", KvList), % :item_ids顺序对应
%% item_levels = http_util:get_param("item_levels", KvList),
UserNameList = string:tokens(UserNames, ","),
UserIdList = [list_to_integer(Uid) || Uid <- string:tokens(UserIds, ",")],
MoneyAmountList = string:tokens(MoneyAmounts, ","),
MoneyTypeList = string:tokens(MoneyTypes, ","),
ItemIdList = string:tokens(ItemIds, ","),
%% ItemTypeList = string:tokens(ItemTypes, ","),
ItemCountList = string:tokens(ItemCounts, ","),
?TRACE("MoneyAmountList:~p ~n MoneyTypeList:~p ~n ItemIdList:~p ~n ItemCountList:~p ~n", [MoneyAmountList, MoneyTypeList, ItemIdList, ItemCountList]),
{Res, GoodsList} = get_gooods_list(MoneyAmountList, MoneyTypeList, ItemIdList, ItemCountList),
?TRACE("Res:~p List:~p ~n", [Res, GoodsList]),
case Res =:= fail of
true -> gen_tcp:send(Socket, ?PARAM_ERROR_CODE);
false ->
if
Action =:= 0 -> %
cast_to_server(lib_mail, send_mail, [all, GoodsList]);
Action =:= 1 -> % user_names user_ids
case length(UserNameList) > 0 of
true ->
cast_to_server(lib_mail, send_goods_money_mail, [UserNameList, GoodsList]);
false ->
skip
end,
case length(UserIdList) > 0 of
true ->
cast_to_server(lib_mail, send_goods_money_mail, [UserIdList, GoodsList]);
false ->
skip
end;
Action =:= 2 -> % "条件参数"
cast_to_server(lib_mail, send_mail, [all, MinLv, MaxLv, GoodsList]);
Action =:= 3 -> % 线
cast_to_server(lib_mail, send_mail, [online, GoodsList]);
true ->
ok
end,
?INFO_MSG("Action:~p title:~ts content:~ts ~n", [Action, MailTitle, MailConten]),
gen_tcp:send(Socket, ?SUCCESS_CODE)
end;
%%
do_handle_request("user_props_list", KvList, Socket) ->
UserId = http_util:get_param("user_id", KvList),
@ -415,34 +307,6 @@ call_to_server(Module, Method, Args) ->
GameSvrNode = config:get_server_node(local_gateway),
rpc:call(GameSvrNode, Module, Method, Args).
get_gooods_list(MoneyAmountList, MoneyTypeList, ItemIdList, ItemCountList) ->
if
length(MoneyAmountList) /= length(MoneyTypeList) ->
{fail, []};
length(ItemIdList) /= length(ItemCountList) ->
{fail, []};
true ->
F = fun(Type, {List, Seq, MList}) ->
MoneyType = list_to_integer(Type),
if
MoneyType =:= 1 -> {[{?MONEY_GOLD_T_ID, list_to_integer(lists:nth(Seq, MList))} | List], Seq + 1, MList};
MoneyType =:= 2 ->
{[{?MONEY_BGOLD_T_ID, list_to_integer(lists:nth(Seq, MList))} | List], Seq + 1, MList};
MoneyType =:= 3 -> {[{?MONEY_COIN_T_ID, list_to_integer(lists:nth(Seq, MList))} | List], Seq + 1, MList};
MoneyType =:= 4 ->
{[{?MONEY_BCOIN_T_ID, list_to_integer(lists:nth(Seq, MList))} | List], Seq + 1, MList};
true -> {List, Seq, MList}
end
end,
{GoodsList, _Seq, _L} = lists:foldl(F, {[], 1, MoneyAmountList}, MoneyTypeList),
F1 = fun(Gtid, {List1, Seq1, CountList}) ->
{[{list_to_integer(Gtid), list_to_integer(lists:nth(Seq1, CountList))} | List1], Seq1 + 1, CountList}
end,
{GoodsList1, _Seq1, _L1} = lists:foldl(F1, {[], 1, ItemCountList}, ItemIdList),
{ok, GoodsList ++ GoodsList1}
end.
%% 退()
safe_quit() ->
timer:sleep(10 * 1000),

src/srvNodeMgr/tools/gameWorld/test/performance/prof.erl → src/comMisc/prof.erl Visa fil


src/srvNodeMgr/tools/gameWorld/test/misc/tool.erl → src/comMisc/tool.erl Visa fil


src/srvNodeMgr/baizhan/misc/util.erl → src/comMisc/util.erl Visa fil

@ -61,7 +61,7 @@ upset_list(_) ->
upset_list_loop(_, [], L) ->
L;
upset_list_loop(Len, List, L) when Len > 0 ->
Index = util:random(1, Len),
Index = util:rand(1, Len),
Tuple = lists:nth(Index, List),
Other = lists:delete(Tuple, List),
upset_list_loop(Len - 1, Other, [Tuple | L]);
@ -98,7 +98,7 @@ rand_list(L) ->
Len = length(L),
case Len > 0 of
true ->
Index = random(1, Len),
Index = rand:uniform(Len),
lists:nth(Index, L);
_ ->
false
@ -108,7 +108,7 @@ rand_list(L) ->
list_rand([]) -> null;
list_rand(List) ->
Len = length(List),
Index = random(1, Len),
Index = rand:uniform(Len),
lists:nth(Index, List).
%% n个元素
@ -148,7 +148,7 @@ rand_by_weight([], _Index) ->
error(badargs);
rand_by_weight(Tuples, Index) ->
Sum = lists:sum([element(Index, Tuple) || Tuple <- Tuples]),
P = random(1, Sum),
P = rand:uniform(Sum),
rand_one_by_weight__(Tuples, Index, P).
rand_one_by_weight__([Tuple], _, _) ->
@ -177,7 +177,7 @@ list_filter_helper([], _, ResultList, _) -> ResultList.
%% list元素顺序
list_shuffle(List) ->
Len = length(List),
List1 = [{random(1, Len + 10000), X} || X <- List],
List1 = [{rand:uniform(Len + 10000), X} || X <- List],
List2 = lists:sort(List1),
[E || {_, E} <- List2].

src/srvNodeMgr/tools/gameWorld/test/misc/util.erl → src/comMisc/util1.erl Visa fil

@ -1,12 +1,5 @@
%%%-----------------------------------
%%% @Module : util
%%% @Author : csj
%%% @Created : 2010.10.05
%%% @Description:
%%%-----------------------------------
-module(util).
-include("common.hrl").
-include("record.hrl").
-module(util1).
-compile(export_all).
%% List中的每两个元素之间插入一个分隔符
@ -226,97 +219,10 @@ bitstring_to_term(BitString) ->
string_to_term(tool:to_list(BitString)).
%%
%% -----------------------------------------------------------------
%% 1970
%% -----------------------------------------------------------------
seconds_to_localtime(Seconds) ->
DateTime = calendar:gregorian_seconds_to_datetime(Seconds + ?DIFF_SECONDS_0000_1900),
calendar:universal_time_to_local_time(DateTime).
%% -----------------------------------------------------------------
%%
%% -----------------------------------------------------------------
is_same_date(Seconds1, Seconds2) ->
NDay = (Seconds1 + 8 * 3600) div 86400,
ODay = (Seconds2 + 8 * 3600) div 86400,
NDay =:= ODay.
%% -----------------------------------------------------------------
%%
%% -----------------------------------------------------------------
is_same_week(Seconds1, Seconds2) ->
{{Year1, Month1, Day1}, Time1} = seconds_to_localtime(Seconds1),
%
Week1 = calendar:day_of_the_week(Year1, Month1, Day1),
%
Diff1 = calendar:time_to_seconds(Time1),
Monday = Seconds1 - Diff1 - (Week1 - 1) * ?ONE_DAY_SECONDS,
Sunday = Seconds1 + (?ONE_DAY_SECONDS - Diff1) + (7 - Week1) * ?ONE_DAY_SECONDS,
if ((Seconds2 >= Monday) and (Seconds2 < Sunday)) -> true;
true -> false
end.
%% -----------------------------------------------------------------
%% 00
%% -----------------------------------------------------------------
get_midnight_seconds(Seconds) ->
{{_Year, _Month, _Day}, Time} = seconds_to_localtime(Seconds),
%
Diff = calendar:time_to_seconds(Time),
% 0
Today = Seconds - Diff,
% 0
NextDay = Seconds + (?ONE_DAY_SECONDS - Diff),
{Today, NextDay}.
%%
get_next_day_seconds(Now) ->
{{_Year, _Month, _Day}, Time} = util:seconds_to_localtime(Now),
%
Diff = calendar:time_to_seconds(Time),
Now + (?ONE_DAY_SECONDS - Diff).
%% -----------------------------------------------------------------
%%
%% -----------------------------------------------------------------
get_diff_days(Seconds1, Seconds2) ->
{{Year1, Month1, Day1}, _} = seconds_to_localtime(Seconds1),
{{Year2, Month2, Day2}, _} = seconds_to_localtime(Seconds2),
Days1 = calendar:date_to_gregorian_days(Year1, Month1, Day1),
Days2 = calendar:date_to_gregorian_days(Year2, Month2, Day2),
DiffDays = abs(Days2 - Days1),
DiffDays + 1.
%%
get_today_current_second() ->
{_, Time} = calendar:now_to_local_time(game_timer:now()),
NowSec = calendar:time_to_seconds(Time),
NowSec.
%%
get_date() ->
calendar:day_of_the_week(date()).
%%
get_pre_week_duringtime() ->
OrealTime = calendar:datetime_to_gregorian_seconds({{1970, 1, 1}, {0, 0, 0}}),
{Year, Month, Day} = date(),
CurrentTime = calendar:datetime_to_gregorian_seconds({{Year, Month, Day}, {0, 0, 0}}) - OrealTime - 8 * 60 * 60,%%1970
WeekDay = calendar:day_of_the_week(Year, Month, Day),
Day1 =
case WeekDay of %%
1 -> 7;
2 -> 7 + 1;
3 -> 7 + 2;
4 -> 7 + 3;
5 -> 7 + 4;
6 -> 7 + 5;
7 -> 7 + 6
end,
StartTime = CurrentTime - Day1 * 24 * 60 * 60,
EndTime = StartTime + 7 * 24 * 60 * 60,
{StartTime, EndTime}.
%%
get_this_week_duringtime() ->
@ -340,6 +246,7 @@ get_this_week_duringtime() ->
%%e=2.718281828459L为底的对数
-define(E, 2.718281828459).
lnx(X) ->
math:log10(X) / math:log10(?E).
@ -404,6 +311,8 @@ between(Item, Min, Max) ->
Item >= Max andalso Item =< Min
end.
-define(SOLUT_X, 30). %% X
-define(SOLUT_Y, 20). %% Y
%%-----------------------------------------------------
%% @spec ,4
@ -438,6 +347,9 @@ is_same_screen([X1, Y1, X2, Y2], [SolutX, SolutY]) ->
SX1 == SX2 andalso SY1 == SY2.
-define(SLICEWIDTH, 15).
-define(SLICEHEIGHT, 9).
%% (?SLICEWIDTH*?SLICEHEIGHT)
%% 1/2
get_matrix(X, Y) ->
@ -530,7 +442,7 @@ conver_time(Time) ->
{H, M, S} ->
H * 10000 + M * 100 + S;
_ ->
?ERROR_MSG("data parse in conver_time data is ~p ~n", [Time]),
io:format("data parse in conver_time data is ~p ~n", [Time]),
0
end.
check_list(Src) ->

+ 2
- 2
src/hotUpdate/u.erl Visa fil

@ -17,8 +17,8 @@
-module(u).
-compile(export_all).
-include_lib("kernel/include/file.hrl").
-include("common.hrl").
-include("record.hrl").
-include("common111.hrl").
-include("record111.hrl").
c() ->
c(5).

+ 3
- 3
src/hotUpdate/u2.erl Visa fil

@ -15,7 +15,7 @@
-module(u2).
-include_lib("kernel/include/file.hrl").
-include("common.hrl").
-include("common111.hrl").
-export([
c/0,
@ -99,8 +99,8 @@ info(V, P) ->
%%
loads([], _Files) -> ok;
loads([H | T], Files) ->
info("[~w]", [H#node.name]),
rpc:cast(H#node.name, u, load, [Files]),
info("[~w]", [H]),
rpc:cast(H, u, load, [Files]),
loads(T, Files).
get_new_file(Files, S) ->

src/srvNodeMgr/tools/gameWorld/test/misc/http_lib.erl → src/httpSocket/http_lib.erl Visa fil

@ -1,17 +1,12 @@
%% @author Ruslan Babayev <ruslan@babayev.com>
%% @copyright 2009 Ruslan Babayev
%% @doc HTTP Encoding and Utility Library.
-module(http_lib).
-export([uri_to_path/1, encode/1, list_to_absoluteURI/1, etag/1,
-export([etag/1,
local_time_to_rfc1123/1, rfc1123_to_date_time/1, mime_type/1,
mime_type/2, extension/1, is_compressible/1, month_to_list/1,
url_decode/1, chunk/1, response/1, response/2,
url_decode/1, chunk/1,
accept/1, recv/2, recv/3, send/2, setopts/2, close/1, peername/1,
dir/1, is_persistent/1, is_idempotent/1, is_modified/2,
dir/1, is_idempotent/1, is_modified/2,
reason_phrase/1]).
-include("http.hrl").
-include_lib("kernel/include/file.hrl").
-include_lib("eunit/include/eunit.hrl").
@ -20,64 +15,6 @@
%% --------------------------------------------------------------------
-define(CS_DEBUG(F, D), io:format(lists:concat(["D(", ?MODULE, ":", ?LINE, ") :", F, "~n"]), D)).
%% @doc Encodes HTTP request or response.
%% @spec encode(#http_request{} | #http_response{}) -> iolist()
encode(#http_request{version = {Major, Minor}, method = Method,
uri = URI, headers = Headers, body = Body}) ->
Headers1 = case proplists:is_defined('Host', Headers) of
true ->
Headers;
false when is_record(URI, absoluteURI) ->
[{'Host', URI#absoluteURI.host} | Headers];
false ->
Headers
end,
[atom_to_list(Method), " ", uri_to_path(URI), " HTTP/",
integer_to_list(Major), ".", integer_to_list(Minor), "\r\n",
headers(Headers1), "\r\n", Body];
encode(#http_response{version = {Major, Minor}, status = Status,
headers = Headers0, body = Body}) ->
LocalTime = calendar:now_to_local_time(now()),
Date = local_time_to_rfc1123(LocalTime),
{ok, Server} = application:get_env(http, server),
Headers1 = [{'Date', Date}, {'Server', Server} | Headers0],
["HTTP/", integer_to_list(Major), ".", integer_to_list(Minor), " ",
integer_to_list(Status), " ", reason_phrase(Status), "\r\n",
headers(Headers1), "\r\n", Body].
uri_to_path(#abs_path{path = Path}) ->
Path;
uri_to_path(#absoluteURI{path = Path}) ->
Path;
uri_to_path('*') ->
"*".
list_to_absoluteURI(List) ->
RE = "^([^:/?#]+):?//([^/?#]*)",
[_, S, HP, Rest] = re:split(List, RE, [{return, list}]),
Scheme = list_to_atom(S),
{Host, Port} =
case re:split(HP, ":", [{return, list}]) of
[H, P] -> {H, list_to_integer(P)};
[H] when Scheme == http -> {H, 80};
[H] when Scheme == https -> {H, 443}
end,
Path = case Rest of
"" -> "/";
Else -> Else
end,
#absoluteURI{scheme = Scheme, host = Host, port = Port, path = Path}.
headers(Headers) ->
headers(Headers, []).
headers([], Acc) ->
Acc;
headers([{Name, Value} | T], Acc) ->
Header = [any_to_list(Name), ": ", any_to_list(Value), "\r\n"],
headers(T, Acc ++ Header).
any_to_list(A) when is_atom(A) ->
atom_to_list(A);
any_to_list(I) when is_integer(I) ->
@ -151,16 +88,6 @@ is_idempotent('TRACE') -> true;
is_idempotent('OPTIONS') -> true;
is_idempotent(_) -> false.
is_persistent(#http_request{version = Version, headers = Headers}) ->
Connection = proplists:get_value('Connection', Headers, ""),
is_persistent(Version, string:to_lower(Connection)).
is_persistent(Version, _) when Version < {1, 0} -> false;
is_persistent({1, 0}, "keep-alive") -> true;
is_persistent({1, 0}, _) -> false;
is_persistent(Version, "close") when Version >= {1, 1} -> false;
is_persistent(Version, _) when Version >= {1, 1} -> true.
url_decode(URL) ->
url_decode(URL, []).
@ -217,14 +144,6 @@ is_compressible(Path) ->
true
end.
response(Code) ->
response(Code, reason_phrase(Code)).
response(Code, Reason) ->
Headers = [{'Content-Type', "text/plain"},
{'Content-Length', iolist_size(Reason)}],
#http_response{status = Code, headers = Headers, body = Reason}.
dir(priv_dir) ->
priv_dir(http);
dir({priv_dir, Module}) ->

+ 0
- 714
src/srvNodeMgr/misc.erl Visa fil

@ -1,714 +0,0 @@
-module(misc).
%%
%% Include files
%%
-include("common.hrl").
-include("cache.hrl").
-include("item.hrl").
-include_lib("kernel/include/file.hrl").
%%
%% Exported Functions
%%
-export([
whereis_name/1,
register/3,
unregister/2,
is_process_alive/1,
create_process_name/2,
to_atom/1,
% t/1,
% t/2,
% tr/1,
% tun/1,
% tan/1,
% t_clear/0,
dump_process_info/1
, u/1
, hot/0
, hot_beam/1 %% beam文件使
, ets_mem/0
, tcp_links/0
, top_back/0
, top/0
, request/1
, u_one/1
, stop/0
, del_ref/1
]).
-export([
role_cmd/3
, gm/2
, check_mem/0
, check_mem/1
, online_num/0
, is_cross/0
]).
-export([
decompile/1
, pstack/1
, etop/0
, etop_mem/0
, etop_stop/0
, gc_all/0
, fprof/3
, eprof_all/1
, eprof/2
, scheduler_usage/0
, scheduler_usage/1
, scheduler_stat/0
, scheduler_stat/1
, trace/1
, trace/2
, trace_stop/0
, proc_mem_all/1
, proc_mem/1
, crash_dump/0
, process_infos/0
]).
-export([check_item/0, ints2str/2]).
%%
%% API Functions
%%
%% @doc ref
del_ref(Ref) when is_reference(Ref) ->
erlang:cancel_timer(Ref);
del_ref(_) ->
ok.
%% @doc
process_infos() ->
filelib:ensure_dir("./logs/"),
File = "./logs/processes_infos.log",
{ok, Fd} = file:open(File, [write, raw, binary, append]),
Fun = fun(Pi) ->
Info = io_lib:format("=>~p \n\n", [Pi]),
case filelib:is_file(File) of
true -> file:write(Fd, Info);
false ->
file:close(Fd),
{ok, NewFd} = file:open(File, [write, raw, binary, append]),
file:write(NewFd, Info)
end,
timer:sleep(20)
end,
[Fun(erlang:process_info(P)) || P <- erlang:processes()].
%% @doc erlang_dump
crash_dump() ->
Date = erlang:list_to_binary(rfc1123_local_date()),
Header = binary:list_to_bin([<<"=erl_crash_dump:0.2\n">>, Date, <<"\nSystem version: ">>]),
Ets = ets_info(),
Report = binary:list_to_bin([Header, erlang:list_to_binary(erlang:system_info(system_version)),
erlang:system_info(info), erlang:system_info(procs), Ets, erlang:system_info(dist),
<<"=loaded_modules\n">>, binary:replace(erlang:system_info(loaded),
<<"\n">>, <<"\n=mod:">>, [global])]),
file:write_file("erl_crash.dump", Report).
ets_info() ->
binary:list_to_bin([ets_table_info(T) || T <- ets:all()]).
ets_table_info(Table) ->
Info = ets:info(Table),
Owner = erlang:list_to_binary(erlang:pid_to_list(proplists:get_value(owner, Info))),
TableN = erlang:list_to_binary(erlang:atom_to_list(proplists:get_value(name, Info))),
Name = erlang:list_to_binary(erlang:atom_to_list(proplists:get_value(name, Info))),
Objects = erlang:list_to_binary(erlang:integer_to_list(proplists:get_value(size, Info))),
binary:list_to_bin([<<"=ets:">>, Owner, <<"\nTable: ">>, TableN, <<"\nName: ">>, Name,
<<"\nObjects: ">>, Objects, <<"\n">>]).
rfc1123_local_date() ->
rfc1123_local_date(os:timestamp()).
rfc1123_local_date({A, B, C}) ->
rfc1123_local_date(calendar:now_to_local_time({A, B, C}));
rfc1123_local_date({{YYYY, MM, DD}, {Hour, Min, Sec}}) ->
DayNumber = calendar:day_of_the_week({YYYY, MM, DD}),
lists:flatten(
io_lib:format("~s, ~2.2.0w ~3.s ~4.4.0w ~2.2.0w:~2.2.0w:~2.2.0w GMT",
[httpd_util:day(DayNumber), DD, httpd_util:month(MM), YYYY, Hour, Min, Sec]));
rfc1123_local_date(Epoch) when erlang:is_integer(Epoch) ->
rfc1123_local_date(calendar:gregorian_seconds_to_datetime(Epoch + 62167219200)).
%% @doc etop 10w+ , proc后通过pstackmessage_queu_len
proc_mem_all(SizeLimitKb) ->
Procs = [{undefined, Pid} || Pid <- erlang:processes()],
proc_mem(Procs, SizeLimitKb).
proc_mem(SizeLimitKb) ->
Procs = [{Name, Pid} || {_, Name, Pid, _} <- release_handler_1:get_supervised_procs(), erlang:is_process_alive(Pid)],
proc_mem(Procs, SizeLimitKb).
proc_mem(Procs, SizeLimitKb) ->
SizeLimit = SizeLimitKb * 1024,
{R, Total} = lists:foldl(fun({Name, Pid}, {Acc, TotalSize}) ->
case erlang:process_info(Pid, total_heap_size) of
{_, Size0} ->
Size = Size0 * 8,
case Size > SizeLimit of
true -> {[{Name, Pid, Size} | Acc], TotalSize + Size};
false -> {Acc, TotalSize}
end;
_ -> {Acc, TotalSize}
end
end, {[], 0}, Procs),
R1 = lists:keysort(3, R),
{Total, lists:reverse(R1)}.
%trace Mod
trace(Mod) ->
dbg:tracer(),
dbg:tpl(Mod, '_', []),
dbg:p(all, c).
%trace Node上指定 Mod , shell
trace(Node, Mod) ->
dbg:tracer(),
dbg:n(Node),
dbg:tpl(Mod, '_', []),
dbg:p(all, c).
%trace
trace_stop() ->
dbg:stop_clear().
% 1s内调度进程数量()
scheduler_stat() ->
scheduler_stat(1000).
scheduler_stat(RunMs) ->
erlang:system_flag(scheduling_statistics, enable),
Ts0 = erlang:system_info(total_scheduling_statistics),
timer:sleep(RunMs),
Ts1 = erlang:system_info(total_scheduling_statistics),
erlang:system_flag(scheduling_statistics, disable),
lists:map(fun({{Key, In0, Out0}, {Key, In1, Out1}}) ->
{Key, In1 - In0, Out1 - Out0} end, lists:zip(Ts0, Ts1)).
% 1s每个调度器CPU的实际利用率(spin wait, usage top显示低很多)
scheduler_usage() ->
scheduler_usage(1000).
scheduler_usage(RunMs) ->
erlang:system_flag(scheduler_wall_time, true),
Ts0 = lists:sort(erlang:statistics(scheduler_wall_time)),
timer:sleep(RunMs),
Ts1 = lists:sort(erlang:statistics(scheduler_wall_time)),
erlang:system_flag(scheduler_wall_time, false),
Cores = lists:map(fun({{I, A0, T0}, {I, A1, T1}}) ->
{I, (A1 - A0) / (T1 - T0)} end, lists:zip(Ts0, Ts1)),
{A, T} = lists:foldl(fun({{_, A0, T0}, {_, A1, T1}}, {Ai, Ti}) ->
{Ai + (A1 - A0), Ti + (T1 - T0)} end, {0, 0}, lists:zip(Ts0, Ts1)),
Total = A / T,
io:format("~p~n", [[{total, Total} | Cores]]).
% eprof, eprof 线,!
% TimeoutSec<10s< 1000crash
% :
% mod调用执行时间
% mod - Fun
eprof_all(TimeoutSec) ->
eprof(processes() -- [whereis(eprof)], TimeoutSec).
eprof(Pids, TimeoutSec) ->
eprof:start(),
eprof:start_profiling(Pids),
timer:sleep(TimeoutSec),
eprof:stop_profiling(),
eprof:analyze(total),
eprof:stop().
% @doc MFA
% :
% fprof
fprof(M, F, A) ->
fprof:start(),
fprof:apply(M, F, A),
fprof:profile(),
fprof:analyse([{dest, "fprof.analysis"}, {sort, own}]),
fprof:stop().
% @doc process做gc
gc_all() ->
[erlang:garbage_collect(Pid) || Pid <- processes()].
% @doc CPU占用排名
etop() ->
spawn(fun() -> etop:start([{output, text}, {interval, 10}, {lines, 20}, {sort, runtime}]) end).
% @doc Mem占用排名
etop_mem() ->
spawn(fun() -> etop:start([{output, text}, {interval, 10}, {lines, 20}, {sort, memory}]) end).
% @doc etop
etop_stop() ->
etop:stop().
%% @doc jstackhang住等问题用到
pstack(Reg) when is_atom(Reg) ->
case whereis(Reg) of
undefined -> undefined;
Pid -> pstack(Pid)
end;
pstack(Pid) ->
io:format("~s~n", [element(2, process_info(Pid, backtrace))]).
%% @doc 600M的全部强制GC
check_mem() ->
Total = erlang:memory(total),
case Total > 600000000 of
true ->
spawn(fun() -> [erlang:garbage_collect(Pid) || Pid <- processes()] end);
_ ->
ok
end.
% check_mem(1000000000).
%% gc,
check_mem(MemLim) ->
lists:foreach(
fun(P) ->
case is_pid(P) andalso erlang:is_process_alive(P) of
true ->
{memory, Mem} = erlang:process_info(P, memory),
case Mem > MemLim of
true ->
erlang:garbage_collect(P);
false ->
[]
end;
false ->
[]
end
end, erlang:processes()).
%% @doc GM命令
gm(RoleId, Content) ->
role_cmd(RoleId, 11600, [Content]).
%% @doc
role_cmd(RoleId, Cmd, Data) ->
svr_role:apply(async, RoleId, {lib_role, async_cmd, [Cmd, Data]}).
%% @doc
stop() ->
case is_cross() of
true ->
cross_stop();
_ ->
common_stop()
end.
%% @doc
common_stop() ->
AllRoles = ets:tab2list(?ETS_ONLINE),
[Pid ! {'stop', server_stop} || #role{pid = Pid} <- AllRoles],%线
cowboy:stop_listener(http),
catch svr_cache_mgr:do_save(),
catch svr_chat:save_chat(),
catch svr_rank:hand_save(),
catch svr_log:hand_save(),
case catch check_item() of
{'EXIT', Res} ->
?INF("error:~p", [Res]);
_ ->
ok
end,
?INF("server_stop"),
init:stop().
%% @doc
check_item() ->
List = ets:tab2list(?ETS_CACHE_ITEM_ROLE),
check_item(List).
check_item([{RoleId, Ids = [_ | _]} | T]) ->
SelectSql = io_lib:format(<<"select id from player_item where role_id=~p;">>, [RoleId]),
IdVals = db:execute(SelectSql),
case filter_item_ids(IdVals, Ids, []) of
[_ | IdStrs] ->
Sql = io_lib:format(<<"delete from player_item where id in (~s);">>, [IdStrs]),
db:execute(Sql);
_ ->
ok
end,
save_eq(Ids),
check_item(T);
check_item([_ | T]) ->
check_item(T);
check_item([]) ->
ok.
%% @doc
save_eq(Ids) ->
case find_eq_item(Ids, []) of
[_ | SqlVals] ->
Sql = io_lib:format(?SQL_ITEM_BATCH_REPLACE, [SqlVals]),
db:execute(Sql);
_ ->
ok
end.
find_eq_item([Id | T], L) ->
L1 =
case svr_cache_item:find_item(Id) of
Item = #item{slot = Slot} ->
case Slot > 0 orelse lib_awake_equip:is_awake(Item) of
true ->
"," ++ lib_item_dict:make_batch_insert_sql_one(Item) ++ L;
_ ->
L
end;
_ ->
L
end,
find_eq_item(T, L1);
find_eq_item([], L) ->
L.
%% @doc
filter_item_ids([[Id] | T], Ids, L) ->
L1 =
case lists:member(Id, Ids) of
false ->
IdStr = integer_to_list(Id),
"," ++ IdStr ++ L;
_ ->
L
end,
filter_item_ids(T, Ids, L1);
filter_item_ids([], _, L) ->
L.
ints2str([Id | T], L) ->
IdStr = integer_to_list(Id),
case T of
[] ->
ints2str(T, IdStr ++ L);
_ ->
ints2str(T, "," ++ IdStr ++ L)
end;
ints2str([], L) ->
L.
%% @doc
cross_stop() ->
catch svr_kfboss_awake_mgr:stop(),
catch svr_kfnode:stop(),
init:stop().
%% @doc
is_cross() ->
case config:get_platform() of
"cross" ->
true;
_ ->
false
end.
%% @doc PID
whereis_name({local, Atom}) ->
erlang:whereis(Atom);
whereis_name({global, Atom}) ->
global:whereis_name(Atom).
register(local, Name, Pid) ->
erlang:register(Name, Pid);
register(global, Name, Pid) ->
global:re_register_name(Name, Pid).
unregister(local, Name) ->
erlang:unregister(Name);
unregister(global, Name) ->
global:unregister_name(Name).
is_process_alive(Pid) ->
try
case Pid of
_ when is_pid(Pid) ->
Node = node(),
Result = case node(Pid) of
Node -> erlang:is_process_alive(Pid);
Node1 -> rpc:call(Node1, erlang, is_process_alive, [Pid])
end,
case Result of
{badrpc, _Reason} -> false;
Res -> Res
end;
_ -> false
end
catch
_:_ -> false
end.
create_process_name(Prefix, List) ->
to_atom(lists:concat(lists:flatten([Prefix] ++ lists:map(fun(T) -> ['_', T] end, List)))).
to_atom(Msg) when is_atom(Msg) ->
Msg;
to_atom(Msg) when is_binary(Msg) ->
list_to_atom2(binary_to_list(Msg));
to_atom(Msg) when is_list(Msg) ->
list_to_atom2(Msg);
to_atom(_) ->
throw(other_value). %%list_to_atom("").
list_to_atom2(List) when is_list(List) ->
case catch (list_to_existing_atom(List)) of
{'EXIT', _} -> erlang:list_to_atom(List);
Atom when is_atom(Atom) -> Atom
end.
%%------------------------------------------------
%% Admin API
%%------------------------------------------------
%% @spec hot/0 -> ok
%% @doc TODO:
%% @doc 线beam文件
hot() ->
HotTime = svr_handle_mgr:hot_time() - 360,
Now = ?NOW,
case max(0, Now - HotTime) of
TimeLimit when TimeLimit > 0 ->
hot_beam(TimeLimit),
%
svr_activity_fl:reflash(),
ok;
_ ->
ok
end.
hot_beam(TimeLimit) when TimeLimit > 0 ->
Now = ?NOW,
FilePaths = all_ebin_file(),
io:format("-----------------------------------------------~n"),
io:format("hots ~p ~p~n", [node(), config:server_ids()]),
io:format("~n"),
lists:foreach(fun(FilePath) ->
case file:read_file_info(FilePath) of
{ok, #file_info{mtime = Mtime}} ->
Time = util:datetime_to_seconds(Mtime),
case Now - Time =< TimeLimit of
true ->
Module = filename:basename(FilePath, ".beam"),
u(list_to_atom(Module));
_ ->
ok
end;
_ ->
ok
end
end, FilePaths),
io:format("~n"),
io:format("-----------------------------------------------~n");
hot_beam(_) ->
ok.
%% @doc
all_ebin_file() ->
LogicNames = filelib:wildcard("../ebin/*.beam"),
DepsNames = filelib:wildcard("../deps/*/ebin/*.beam"),
DepsNames ++ LogicNames.
%% @doc
u(M) when not is_list(M) ->
u([M], []);
u(List) ->
u(List, []).
u([], List) ->
List;
u([Module | T], List) ->
Ret = u_one(Module),
u(T, [{Ret, Module} | List]).
u_one(Module) ->
case c:nl(Module) of
abcast ->
?PRINT("~w:load ~20w ok", [calendar:local_time(), Module]),
ok;
_ ->
?PRINT("~w:load ~20w fail", [calendar:local_time(), Module]),
error
end.
%% @spec top() -> ok
%% @doc
top() ->
Release = erlang:system_info(otp_release),
SchedNum = erlang:system_info(schedulers),
ProcCount = erlang:system_info(process_count),
ProcLimit = erlang:system_info(process_limit),
ProcMemUsed = erlang:memory(processes_used),
EtsMemAlc = erlang:memory(ets),
MemTot = erlang:memory(total),
RoleNum = ets:info(?ETS_ONLINE, size),
%PetNum = all_pets(),
io:format(
"++++++++++++++++++++++++++++++++++++++++++~n"
" ServerId: ~p~n"
" Node: ~p~n"
" Erlang Ver: ~p~n"
" Free Threads: ~p~n"
" Process Used Memory: ~pMb~n"
" Ets Used Memory: ~pMb~n"
" Erlang VM Used Memory: ~pMb~n"
" Process Limit: ~p~n"
" Process Used: ~p~n"
" Online Players: ~p~n"
"++++++++++++++++++++++++++++++++++++++++++~n"
, [config:server_ids(), node(), Release, SchedNum, ProcMemUsed / 1024 / 1024, EtsMemAlc / 1024 / 1024, MemTot / 1024 / 1024, ProcLimit, ProcCount, RoleNum]),
ok.
%% @doc
top_back() ->
Release = erlang:system_info(otp_release),
SchedNum = erlang:system_info(schedulers),
ProcCount = erlang:system_info(process_count),
ProcLimit = erlang:system_info(process_limit),
ProcMemUsed = erlang:memory(processes_used),
EtsMemAlc = erlang:memory(ets),
MemTot = erlang:memory(total),
RoleNum = ets:info(?ETS_ONLINE, size),
Str = io_lib:format(
" Erlang 版本: ~p~n"
" 可使用的调度线程: ~p~n"
" 所有进程使用的内存: ~pMb~n"
" 所有ets使用的内存: ~pMb~n"
" Erlang系统占用内存: ~pMb~n"
" 可创建进程数量上限: ~p~n"
" 当前进程数: ~p~n"
" 在线角色数: ~p~n"
, [Release, SchedNum, ProcMemUsed / 1024 / 1024, EtsMemAlc / 1024 / 1024, MemTot / 1024 / 1024, ProcLimit, ProcCount, RoleNum]),
binary_to_list(list_to_binary(Str)).
%% @spec ets_mem() -> term()
%% @doc 30ets表
ets_mem() ->
L = ets:all(),
Mems = lists:map(fun(Tab) ->
Info = ets:info(Tab),
case lists:keyfind(memory, 1, Info) of
{memory, Mem} -> {Tab, Mem};
_ -> {Tab, 0}
end
end, L),
L1 = lists:sublist(lists:reverse(lists:keysort(2, Mems)), 30),
?PRINT("~n--------------------------------------------------~n"
"~-30w ~w~n--------------------------------------------------~n"
, [table, used_memory]),
lists:foreach(fun({Tab, Mem}) ->
?PRINT("~-30w ~wKb~n", [Tab, Mem / 1024])
end, L1).
%% @spec tcp_links() -> Info
%% @doc tcp链接
tcp_links() ->
L = erlang:ports(),
F = fun(P) ->
Pinfo = erlang:port_info(P),
case lists:keyfind(name, 1, Pinfo) of
{name, "tcp_inet"} -> true;
_ -> false
end
end,
L1 = lists:filter(F, L),
?PRINT("~n当前socket数量(包括链接数据库的socket): ~w~n", [length(L1)]).
% %% @doc trace
% tan(AcountName) ->
% Bin = unicode:characters_to_binary(AcountName),
% [t(UserID)||#ets_user{account_name = Name, id = UserID} <- ets:tab2list(?ETS_ONLINE), Name =:= Bin].
% %% @doc trace
% tun(UserName) ->
% Bin = unicode:characters_to_binary(UserName),
% [t(UserID) ||#ets_user{name = Name, id = UserID} <- ets:tab2list(?ETS_ONLINE), Name =:= Bin].
% %% @doc ID trace
% t(UserID, MFN) ->
% t(UserID),
% t(MFN).
% t({M, F, Num}) ->
% dbg:tpl(M, F, Num, []);
% t(UserID) ->
% dbg:tracer(),
% Pid = misc:whereis_name({global, player_process_name(UserID)}),
% dbg:p(Pid, c).
% tr({M, F, Num}) ->
% dbg:tpl(M, F, Num, [{'_', [], [{return_trace}]}]).
% %% @doc trace
% t_clear() ->
% dbg:stop_clear().
%% @doc
dump_process_info(Pid) ->
{{Year, Month, Day}, {Hour, Minutes, Second}} = util:local_time(),
{ok, FileHandle} = file:open(util:fbin("~s-~w-~w-~w-~w-~w-~w", [<<"../logs/pid_info.dump">>, Year, Month, Day, Hour, Minutes, Second]), write),
case erlang:process_info(Pid) of
Info when is_list(Info) ->
lists:foreach(fun({messages, Messages}) ->
case Messages =:= [] of
true ->
io:format(FileHandle, "~w~n", [{messages, Messages}]);
_ ->
io:format(FileHandle, "{messages,~n", []),
lists:foreach(fun(M) ->
io:format(FileHandle, " ~w~n", [M])
end, Messages),
io:format(FileHandle, "}~n", [])
end;
({dictionary, Dics}) ->
case Dics =:= [] of
true ->
io:format(FileHandle, "~w~n", [{dictionary, Dics}]);
_ ->
io:format(FileHandle, "{dictionary,~n", []),
lists:foreach(fun(M) ->
io:format(FileHandle, " ~w~n", [M])
end, Dics),
io:format(FileHandle, "}~n", [])
end;
(E) ->
io:format(FileHandle, "~w~n", [E])
end, Info);
_ -> ?PRINT("not find pid info")
end,
file:close(FileHandle).
request(Url) ->
{ok, RequestId} = httpc:request(get, {Url, []}, [], [{sync, false}]),
receive
{http, {RequestId, {{_Version, 200, _ReasonPhrase}, _Headers, Body}}} ->
Body;
E ->
E
after 500 ->
timeout
end.

+ 1
- 1
src/srvNodeMgr/tools/gameWorld/test/excel2mysql.erl Visa fil

@ -3,7 +3,7 @@
%%
%% Include files
%%
-include("common.hrl").
-include("common111.hrl").
-compile(export_all).
-define(CONFIG_FILE, "../config/gateway.config").

+ 0
- 124
src/srvNodeMgr/tools/gameWorld/test/misc/auto_id.erl Visa fil

@ -1,124 +0,0 @@
%%--------------------------------------
%% @Module : auto_id
%% @Author : smxx
%% @Created : 2013.03.01
%% @Description: ID初值
%%--------------------------------------
-module(auto_id).
-compile([export_all]).
-include("auto_id.hrl").
%%ID初值(. )
set_auto_increment(server) ->
ServerNum = config:get_server_num(),
io:format("~n--------------------------------------------------~n"),
io:format("Start checking tables Auto Increment...~n"),
io:format("Current Server Num: ~p~n", [ServerNum]),
io:format("--------------------------------------------------~n"),
F = fun(TableName) ->
case get_auto_increment_width(TableName) of
no_match ->
io:format("Table: ~p found NO AUTO_INCREMENT fields, check your configuration!~n", [TableName]);
Width -> %%
case Width of
20 ->
Start = ServerNum * ?SPACE20 + 1,
End = (ServerNum + 1) * ?SPACE20;
11 ->
Start = ServerNum * ?SPACE11 + 1,
End = (ServerNum + 1) * ?SPACE11
end,
CurrentOffset = get_auto_increment_offset(TableName),
if
%% CurrentOffset >= Start andalso CurrentOffset < End -> %%
%% io:format("Table: ~p \tAUTO_INCREMENT OFFSET ->\tOK~n", [TableName]),
%% io:format("\t\tCurrent: ~p, Start: ~p, End:~p~n~n", [CurrentOffset, Start, End]);
%% CurrentOffset >= End ->
%% io:format("Table: ~p \tAUTO_INCREMENT OFFSET -> OUT OF RANGE~n", [TableName]),
%% io:format("\t\tCurrent: ~p, Start: ~p, End:~p~n~n", [CurrentOffset, Start, End]);
CurrentOffset > ?SPACE20 -> %%
io:format("Table: ~p \t AUTO_INCREMENT OFFSET ->\tOK~n", [TableName]),
io:format("\t\tCurrent: ~p, Start: ~p, End:~p~n~n", [CurrentOffset, Start, End]);
true ->
io:format("Table: ~p \tAUTO_INCREMENT OFFSET -> NOT SET~n", [TableName]),
io:format("\t\tCurrent: ~p, Start: ~p, End:~p~n", [CurrentOffset, Start, End]),
io:format("\t\tSetting to: ~p", [Start]),
case set_auto_increment_offset(TableName, Start) of
true -> io:format(" -> OK~n~n");
_ -> io:format(" -> Failed~n~n")
end
end
end
end,
lists:foreach(F, ?AUTO_ID_TABLES),
io:format("~nTables Auto Increment Done~n"),
io:format("--------------------------------------------------~n");
set_auto_increment(_) ->
skip.
%%Auto_Increment字段在第11位
get_auto_increment_offset(TableName) ->
Sql = lists:concat(["show table status where name='", TableName, "'"]),
case lists:nth(11, db_esql:get_row(Sql)) of
Offset when is_integer(Offset) ->
Offset;
_Error ->
io:format("ERROR when getting Auto_Increment for table ~p~n", [TableName]),
error
end.
%%AUTO_INCREMENT字段的宽度
get_auto_increment_width(TableName) ->
Sql = lists:concat(["show create table ", TableName]),
case db_esql:get_row(Sql) of
{db_error, _} ->
error;
[_, A | _] ->
CreateTableList = re:split(A, "[\n]", [{return, binary}]),
search_auto_increment(CreateTableList)
end.
%%AUTO_INCREMENT的值
set_auto_increment_offset(TableName, Offset) ->
Sql = io_lib:format("alter table ~s auto_increment=~s;", [atom_to_list(TableName), integer_to_list(Offset)]),
case db_esql:execute_sql(Sql) of
{db_error, _} ->
false;
_Result ->
%io:format("Result: ~p~n", [Result])
true
end.
%%AUTO_INCRMENT字段的行
%%,no_match
%%: AUTO_INCREMENT行中"int(xx)"xx的值, no_match
search_auto_increment([]) ->
no_match;
search_auto_increment([L | T]) ->
Line = binary_to_list(L),
case re:run(Line, "AUTO_INCREMENT", [caseless]) of %%AUTO_INCREMENT行
{match, _} -> %%
search_int_width(Line);
_Other ->
search_auto_increment(T)
end.
%%"int(xx)"xx的值, no_match
search_int_width(Line) ->
case re:run(Line, "int", [caseless]) of
{match, [{Idx1, L1} | _]} -> %%,Idx1, L1是"int"
Idx = min(Idx1 + L1 + 1, length(Line)),
case lists:sublist(Line, Idx, 4) of %%"(xx)", 4
[40, A, B, 41] -> %%40"(", 41")",
list_to_integer([A, B]);
[40, A, 41] -> %%1
list_to_integer([A]);
_Other ->
no_match
end;
_Other ->
no_match
end.

+ 0
- 132
src/srvNodeMgr/tools/gameWorld/test/misc/php_parser.erl Visa fil

@ -1,132 +0,0 @@
%% Author: Richard Jones
%% Modified: bisonwu
%% Description: Takes a serialized php object and turns it into an erlang data structure
-module(php_parser).
%%
%% Include files
%%
%%
%% Exported Functions
%%
-export([unserialize/1]).
-export([serialize_map/1, serialize_map/2]).
%%
%% API Functions
%%
%% @spec serialize_map/1
%% @doc serialize for key-value list
serialize_map(KeyValueList) when is_list(KeyValueList) ->
serialize_map(KeyValueList, {"i", "d"}).
%% @spec serialize_map/2
%% @doc serialize for key-value list
%% result eg:"a:2:{i:7;d:1277086515;i:8;d:1277086522;}"
serialize_map(KeyValueList, {KeyType, ValType}) when is_list(KeyValueList) ->
%% eg:[{7,1277086515},{8,1277086522}]
Len = length(KeyValueList),
Items = lists:foldr(fun(X, Items) ->
{Key, Val} = X,
lists:concat([KeyType, ":", Key, ";", ValType, ":", Val, ";", Items])
end, "", KeyValueList),
lists:concat(["a:", Len, ":{", Items, "}"]).
%% @spec unserialize/1
%% Usage: {Result, Leftover} = php_parser:unserialize()
unserialize(S) when is_binary(S) -> unserialize(binary_to_list(S));
unserialize(S) when is_list(S) -> takeval(S, 1).
% Internal stuff
takeval(Str, Num) ->
{Parsed, Remains} = takeval(Str, Num, []),
{lists:reverse(Parsed), Remains}.
takeval([$} | Leftover], 0, Acc) -> {Acc, Leftover};
takeval(Str, 0, Acc) -> {Acc, Str};
takeval([], 0, Acc) -> Acc;
takeval(Str, Num, Acc) ->
{Val, Rest} = phpval(Str),
%Lots of tracing if you enable this:
%io:format("\nState\n Str: ~s\n Num: ~w\n Acc:~w\n", [Str,Num,Acc]),
%io:format("-Val: ~w\n-Rest: ~s\n\n",[Val, Rest]),
takeval(Rest, Num - 1, [Val | Acc]).
%
% Parse induvidual php values.
% a "phpval" here is T:val; where T is the type code for int, object, array etc..
%
% Simple ones:
phpval([]) -> [];
phpval([$} | Rest]) -> phpval(Rest); % skip }
phpval([$N, $; | Rest]) -> {null, Rest}; % null
phpval([$b, $:, $1, $; | Rest]) -> {true, Rest}; % true
phpval([$b, $:, $0, $; | Rest]) -> {false, Rest}; % false
% r seems to be a recursive reference to something, represented as an int.
phpval([$r, $: | Rest]) ->
{RefNum, [$; | Rest1]} = string:to_integer(Rest),
{{php_ref, RefNum}, Rest1};
% int
phpval([$i, $: | Rest]) ->
{Num, [$; | Rest1]} = string:to_integer(Rest),
{Num, Rest1};
% double / float
% NB: php floats can be ints, and string:to_float doesnt like that.
phpval(_X = [$d, $: | Rest]) ->
{Num, [$; | Rest1]} = case string:to_float(Rest) of
{error, no_float} -> string:to_integer(Rest);
{N, R} -> {N, R}
end,
{Num, Rest1};
% string
phpval([$s, $: | Rest]) ->
{Len, [$: | Rest1]} = string:to_integer(Rest),
S = list_to_binary(string:sub_string(Rest1, 2, Len + 1)),
{S, lists:nthtail(Len + 3, Rest1)};
% array
phpval([$a, $: | Rest]) ->
{NumEntries, [$:, ${ | Rest1]} = string:to_integer(Rest),
{Array, Rest2} = takeval(Rest1, NumEntries * 2),
{arraytidy(Array), Rest2};
% object O:4:\"User\":53:{
phpval([$O, $: | Rest]) ->
{ClassnameLen, [$: | Rest1]} = string:to_integer(Rest),
% Rest1: "classname":NumEnt:{..
Classname = string:sub_string(Rest1, 2, ClassnameLen + 1),
Rest1b = lists:nthtail(ClassnameLen + 3, Rest1),
{NumEntries, [$:, ${ | Rest2]} = string:to_integer(Rest1b),
{Classvals, Rest3} = takeval(Rest2, NumEntries * 2),
{{class, Classname, arraytidy(Classvals)}, Rest3}.
%%
%% Helpers:
%%
% convert [ k1,v1,k2,v2,k3,v3 ] into [ {k1,v2}, {k2,v2}, {k3,v3} ]
arraytidy(L) ->
lists:reverse(lists:foldl(fun arraytidy/2, [], L)).
arraytidy(El, [{key___partial, K} | L]) -> [{atomize(K), El} | L];
arraytidy(El, L) -> [{key___partial, El} | L].
%% Make properties or keys into atoms
atomize(K) when is_binary(K) ->
atomize(binary_to_list(K));
atomize(K) when is_list(K) ->
list_to_atom(string:to_lower(K));
atomize(K) -> K.

+ 0
- 6
src/srvNodeMgr/tools/gameWorld/test/mysql_test.erl Visa fil

@ -1,9 +1,3 @@
%%%---------------------------------------------
%%% @Module : mysql_test
%%% @Author : csj
%%% @Created : 2010.10.05
%%% @Description: mysql测试
%%%---------------------------------------------
-module(mysql_test).
-compile(export_all).
-define(DB, mysql_conn_poll).

+ 1
- 7
src/srvNodeMgr/tools/gameWorld/test/mysql_to_emongo.erl Visa fil

@ -1,12 +1,6 @@
%%%--------------------------------------
%%% @Module : mysql_to_emongo
%%% @Author : csj
%%% @Created : 2010.10.20
%%% @Description: mysql->emongo数据库转换处理模块
%%%--------------------------------------
-module(mysql_to_emongo).
-compile([export_all]).
-include("common.hrl").
-include("common111.hrl").
-define(CONFIG_FILE, "../config/gateway.config").

+ 1
- 22
src/srvNodeMgr/tools/gameWorld/test/random_test.erl Visa fil

@ -1,13 +1,9 @@
%% Author: Administrator
%% Created: 2011-11-1
%% Description: TODO: Add description to random_test
-module(random_test).
%%
%% Include files
%%
-include("common.hrl").
-include("record.hrl").
-include("common111.hrl").
%%
%% Exported Functions
%%
@ -54,23 +50,6 @@ random_test_loop(T) ->
online_clear() ->
PlayerDB = ?DB_MODULE:select_all(player, "*", [{olflg, 1}]),
%% Ftime = util:unixtime(),
%% ?DEBUG("Start ~p",[Ftime]),
%% PlayerDB = ?DB_MODULE:select_all(player, "*", []),
F = fun(CD) ->
Cin = list_to_tuple([player | CD]),
case lib_player:is_online(Cin#player.id) of
true ->
[];
_ ->
?DB_MODULE:update(player, [{olflg, 0}], [{id, Cin#player.id}])
end
end,
lists:foreach(F, PlayerDB).
%% Etime = util:unixtime(),
%% ?DEBUG("End ~p",[Etime]).
idcrs_clear() ->

+ 2
- 2
src/srvNodeMgr/tools/gameWorld/test/robot/new_robot/new_robot.erl Visa fil

@ -6,8 +6,8 @@
-behaviour(gen_server).
-compile(export_all).
-include("common.hrl").
-include("record.hrl").
-include("common111.hrl").
-include_lib("stdlib/include/ms_transform.hrl").
-define(CONFIG_FILE, "../config/gateway.config").

+ 2
- 2
src/srvNodeMgr/tools/gameWorld/test/robot/new_robot/ptr_30.erl Visa fil

@ -9,8 +9,8 @@
%%--------------------------------------
%% Include files
%%--------------------------------------
-include("common.hrl").
-include("record.hrl").
-include("common111.hrl").
%%--------------------------------------
%% Exported Functions

+ 2
- 2
src/srvNodeMgr/tools/gameWorld/test/robot/proto/ptr_11.erl Visa fil

@ -9,8 +9,8 @@
%%--------------------------------------
%% Include files
%%--------------------------------------
-include("common.hrl").
-include("record.hrl").
-include("common111.hrl").
%%--------------------------------------
%% Exported Functions

+ 1
- 2
src/srvNodeMgr/tools/gameWorld/test/robot/proto/ptr_19.erl Visa fil

@ -9,8 +9,7 @@
%%--------------------------------------
%% Include files
%%--------------------------------------
-include("common.hrl").
-include("record.hrl").
-include("common111.hrl").
%%--------------------------------------
%% Exported Functions

+ 2
- 3
src/srvNodeMgr/tools/gameWorld/test/robot/proto/ptr_40.erl Visa fil

@ -9,9 +9,8 @@
%%--------------------------------------
%% Include files
%%--------------------------------------
-include("common.hrl").
-include("record.hrl").
-include("debug.hrl").
-include("common111.hrl").
%%--------------------------------------
%% Exported Functions
%%--------------------------------------

+ 2
- 2
src/srvNodeMgr/tools/gameWorld/test/robot/proto/ptr_44.erl Visa fil

@ -9,8 +9,8 @@
%%--------------------------------------
%% Include files
%%--------------------------------------
-include("common.hrl").
-include("record.hrl").
-include("common111.hrl").
%%--------------------------------------
%% Exported Functions

+ 0
- 5
src/srvNodeMgr/tools/gameWorld/test/robot/robot.erl Visa fil

@ -1,8 +1,3 @@
%%% -------------------------------------------------------------------
%%% Author: SMXX
%%% Description :
%%% Created :
%%% -------------------------------------------------------------------
-module(robot).
-behaviour(gen_server).
-include("robot.hrl").

+ 1
- 7
src/srvNodeMgr/tools/gameWorld/test/robot/robot.hrl Visa fil

@ -1,10 +1,4 @@
%%% -------------------------------------------------------------------
%%% Author:
%%% Description :
%%% Created :
%%% -------------------------------------------------------------------
-include("common.hrl").
-include("record.hrl").
-include("common111.hrl").
-include_lib("stdlib/include/ms_transform.hrl").
-define(CONFIG_FILE, "../config/gateway.config").

+ 1
- 2
src/srvNodeMgr/tools/gameWorld/test/robot/robot_battle.erl Visa fil

@ -1,5 +1,4 @@
%% @author Administrator
%% @doc @todo Add description to robot_battle.
%% Add description to robot_battle.
-module(robot_battle).
-include("robot.hrl").
%% ====================================================================

+ 0
- 1
src/srvNodeMgr/tools/gameWorld/test/robot/robot_chat.erl Visa fil

@ -1,7 +1,6 @@
-module(robot_chat).
-compile(export_all).
%-include("common.hrl").
-include("robot.hrl").
%%---------------------- ----------------------

+ 0
- 5
src/srvNodeMgr/tools/gameWorld/test/robot/robot_gateway.erl Visa fil

@ -1,8 +1,3 @@
%%% -------------------------------------------------------------------
%%% Author: SMXX
%%% Description :
%%% Created :
%%% -------------------------------------------------------------------
-module(robot_gateway).
-behaviour(gen_server).
-include("robot.hrl").

+ 0
- 2
src/srvNodeMgr/tools/gameWorld/test/robot/robot_goods.erl Visa fil

@ -1,5 +1,3 @@
%% Author: Administrator
%% Created: 2013-9-16
%% Description: TODO: Add description to robot_goods
-module(robot_goods).
-behaviour(gen_server).

+ 0
- 6
src/srvNodeMgr/tools/gameWorld/test/robot/robot_guild.erl Visa fil

@ -1,9 +1,3 @@
%%%---------------------------------------------
%%% @Module : robot_guild
%%% @Author : smxx
%%% @Created : 2013.03.01
%%% @Description:
%%%---------------------------------------------
-module(robot_guild).
-include("robot.hrl").
-compile(export_all).

+ 0
- 6
src/srvNodeMgr/tools/gameWorld/test/robot/robot_mail.erl Visa fil

@ -1,9 +1,3 @@
%%---------------------------------------------
%% @Module : robot_mail
%% @Author : smxx
%% @Created : 2013.09.13
%% @Description:
%%---------------------------------------------
-module(robot_mail).
-include("robot.hrl").
-compile(export_all).

+ 0
- 5
src/srvNodeMgr/tools/gameWorld/test/robot/robot_mount.erl Visa fil

@ -1,8 +1,3 @@
%%%------------------------------------
%%% @Author :
%%% @Created : 2010.09.27
%%% @Description:
%%%------------------------------------
-module(robot_mount).
-include("robot.hrl").
-compile(export_all).

+ 0
- 6
src/srvNodeMgr/tools/gameWorld/test/robot/robot_newbie.erl Visa fil

@ -1,9 +1,3 @@
%%---------------------------------------------
%% @Module : robot_newbie
%% @Author : smxx
%% @Created : 2013.09.13
%% @Description:
%%---------------------------------------------
-module(robot_newbie).
-include("robot.hrl").
-compile(export_all).

+ 0
- 6
src/srvNodeMgr/tools/gameWorld/test/robot/robot_openfunc.erl Visa fil

@ -1,9 +1,3 @@
%%---------------------------------------------
%% @Module : robot_openfunc
%% @Author : smxx
%% @Created : 2013.03.01
%% @Description:
%%---------------------------------------------
-module(robot_openfunc).
-include("robot.hrl").
-compile(export_all).

+ 1
- 8
src/srvNodeMgr/tools/gameWorld/test/robot/robot_pet.erl Visa fil

@ -1,9 +1,2 @@
%%%---------------------------------------------
%%% @Module : robot_pet
%%% @Author : smxx
%%% @Created : 2013.03.xx
%%% @Description:
%%%---------------------------------------------
-module(robot_pet).
%% -include("robot.hrl").
%% -compile(export_all).

+ 2
- 12
src/srvNodeMgr/tools/gameWorld/test/tools/record_to_code.erl Visa fil

@ -1,20 +1,10 @@
%%%--------------------------------------
%%% @Module : game_gateway
%%% @Author : csj
%%% @Created : 2010.10.27
%%% @Description: record erl code
%%% player, 便便player字段值
%%% "../src/lib/lib_player_rw.erl"
%%%--------------------------------------
-module(record_to_code).
%%
%% Include files
%%
-include("common.hrl").
-include("record.hrl").
-include("common111.hrl").
-include("record111.hrl").
%%
%% Exported Functions
%%

+ 1
- 8
src/srvNodeMgr/tools/gameWorld/test/tools/table_to_erlang.erl Visa fil

@ -1,17 +1,10 @@
%%%--------------------------------------
%%% @Module : game_gateway
%%% @Author :
%%% @Created : 2010.10.27
%%% @Description: mysql数据表 erl record
%%% "../include/table_to_record.hrl"
-module(table_to_erlang).
-compile(export_all).
%%
%% Include files
%%
-include("common.hrl").
-include("table_to_record.hrl").
-include("common111.hrl").
-define(CONFIG_FILE, "../config/gateway.config").
-define(TMP_TABLE_PATH, "./tmptable/").

+ 1
- 8
src/srvNodeMgr/tools/gameWorld/test/tools/table_to_record.erl Visa fil

@ -1,16 +1,9 @@
%%%--------------------------------------
%%% @Module : game_gateway
%%% @Author : csj
%%% @Created : 2010.10.27
%%% @Description: mysql数据表 erl record
%%% "../include/table_to_record.hrl"
%%%--------------------------------------
-module(table_to_record).
%%
%% Include files
%%
-include("common.hrl").
-include("common111.hrl").
-define(CONFIG_FILE, "../config/gateway.config").

+ 0
- 247
src/srvNodeMgr/tools/gameWorld/test/tools/task_data_checker.erl Visa fil

@ -1,247 +0,0 @@
%% @author Administrator
%% @doc @todo Add description to task_data_checker.
-module(task_data_checker).
%% ====================================================================
%% API functions
%% ====================================================================
-export([]).
-compile(export_all).
-include("common.hrl").
-include("table_to_record.hrl").
-include("task.hrl").
-define(CONFIG_FILE, "../config/gateway.config").
-define(TMP_TABLE_PATH, "./tmptable/").
-define(SRC_TABLE_PATH, "../src/table/").
-define(BEAM_PATH, "./").
-define(IOFILE(Str, Args), (fun() ->
Command = io_lib:format(Str, Args),
file:write_file("../logs/data/task_data.log", Command, [append])
end)()).
-define(IOFILE(Str), (fun() ->
file:write_file("../logs/data/task_data.log", Str, [append])
end)()).
%% ====================================================================
%% Internal functions
%% ====================================================================
start() ->
case table_to_erlang:get_db_config(?CONFIG_FILE) of
[Host, Port, User, Password, DB, Encode, _Conns] ->
table_to_erlang:start_erlydb(Host, Port, User, Password, DB),
mysql:start_link(?DB_SERVER, Host, Port, User, Password, DB, fun(_, _, _, _) -> ok end, Encode),
mysql:connect(?DB_SERVER, Host, Port, User, Password, DB, Encode, true),
start_check(),
ok;
_ -> mysql_config_fail
end,
halt(),
ok.
start_check() ->
?IOFILE("\n[信息]******************任务数据有效性检测开始********************** \n"),
?IOFILE("[信息]***************日期:~p 时间:~p******************* ~n", [date(), time()]),
F = fun(Task) ->
D = list_to_tuple([tpl_task | Task]),
TaskInfo = D#tpl_task{
goods_list = util:bitstring_to_term(D#tpl_task.goods_list),
target_property = util:bitstring_to_term(D#tpl_task.target_property),
guild_goods_list = util:bitstring_to_term(D#tpl_task.guild_goods_list)
},
check_interface(TaskInfo)
end,
Lists = db_esql:get_all("select * from temp_task;"),
lists:foreach(F, Lists),
?IOFILE("[信息]***************任务数据有效性检测结束******************* \n \n").
check_interface(TaskInfo) ->
check_start_npc_scene(TaskInfo#tpl_task.start_npc, TaskInfo#tpl_task.start_scene, TaskInfo#tpl_task.tid),
check_end_npc_scene(TaskInfo#tpl_task.end_npc, TaskInfo#tpl_task.end_scene, TaskInfo#tpl_task.tid),
check_next_task(TaskInfo#tpl_task.next_tid, TaskInfo#tpl_task.tid),
check_pid_task(TaskInfo#tpl_task.pre_tid, TaskInfo#tpl_task.tid),
check_goods_list(TaskInfo#tpl_task.goods_list, TaskInfo#tpl_task.tid, "goods_list"),
check_goods_list(TaskInfo#tpl_task.goods_list, TaskInfo#tpl_task.tid, "guild_goods_list"),
check_target_pro(TaskInfo#tpl_task.target_type, TaskInfo#tpl_task.target_property, TaskInfo#tpl_task.pre_tid).
check_npc(NpcId, Type, Tid) ->
Sql = io_lib:format("select count(*) from temp_npc where nid = ~p;", [NpcId]),
case db_esql:get_all(Sql) of
[[0]] ->
?IOFILE("[错误]任务 task id -> ~p 中, ~p npc数据 npc id -> ~p 无效 ~n", [Tid, Type, NpcId]);
_ ->
skip
end.
check_scene(SceneId, Type, Tid) ->
Sql = io_lib:format("select count(*) from temp_scene where sid = ~p;", [SceneId]),
case db_esql:get_all(Sql) of
[[0]] ->
?IOFILE("[错误]任务 task id -> ~p 中, ~p场景数据 id -> ~p 无效 ~n", [Tid, Type, SceneId]);
_ ->
skip
end.
check_start_npc_scene(NpcId, SceneId, Tid) ->
if NpcId =:= 0 ->
skip;
true ->
check_npc(NpcId, "开始", Tid),
check_scene(SceneId, "开始", Tid),
Sql = io_lib:format("select count(*) from temp_npc_layout where scene_id = ~p and npcid = ~p;", [SceneId, NpcId]),
case db_esql:get_all(Sql) of
[[0]] ->
?IOFILE("[警告]任务 task id -> ~p 中,任务开始场景id -> ~p 与 任务开始npc id -> ~p 不匹配(可能是跨地图任务,同事们自己留意下)~n", [Tid, SceneId, NpcId]);
_ -> skip
end
end.
check_end_npc_scene(NpcId, SceneId, Tid) ->
if NpcId =:= 0 ->
skip;
true ->
check_npc(NpcId, "结束", Tid),
check_scene(SceneId, "结束", Tid),
Sql = io_lib:format("select count(*) from temp_npc_layout where scene_id = ~p and npcid = ~p;", [SceneId, NpcId]),
case db_esql:get_all(Sql) of
[[0]] ->
?IOFILE("[错误]任务 task id -> ~p 中,任务结束场景id -> ~p 与 任务结束npc id -> ~p 不匹配 ~n", [Tid, SceneId, NpcId]);
_ -> skip
end
end.
check_next_task(NextTid, Tid) ->
if NextTid =:= -1 ->
skip;
true ->
case NextTid =< Tid of
true ->
?IOFILE("[错误]任务 task id -> ~p 中,后置任务 id -> ~p 必须比本任务id大 ~n", [Tid, NextTid]);
false ->
Sql = io_lib:format("select count(*) from temp_task where tid = ~p;", [NextTid]),
case db_esql:get_all(Sql) of
[[0]] ->
?IOFILE("[错误]任务 task id -> ~p 中,后置任务 id -> ~p 无效~n", [Tid, NextTid]);
_ -> skip
end
end
end.
check_pid_task(PerTid, Tid) ->
if PerTid =:= -1 ->
skip;
true ->
case PerTid >= Tid of
true ->
?IOFILE("[错误]任务 task id -> ~p 中, 前置任务 id -> ~p 必须比本任务id小 ~n", [Tid, PerTid]);
false ->
Sql = io_lib:format("select count(*) from temp_task where tid = ~p;", [PerTid]),
case db_esql:get_all(Sql) of
[[0]] ->
?IOFILE("[错误]任务 task id -> ~p 中,前置任务 id -> ~p 无效 ~n", [Tid, PerTid]);
_ -> skip
end
end
end.
check_goods_list(GoodsList, Tid, Type) ->
F = fun({_, _, Gid, _}) ->
Sql = io_lib:format("select count(*) from temp_goods where gtid = ~p;", [Gid]),
case db_esql:get_all(Sql) of
[[0]] ->
?IOFILE("[错误]任务 task id -> ~p 中,任务奖励物品 id -> ~p 无效 ,具体见字段: ~p ~n", [Tid, Gid, Type]);
_ -> skip
end
end,
lists:foreach(F, GoodsList).
check_target_pro(?NPC_TALK_EVENT, TaskPro, Tid) ->
case TaskPro of
[{NpcId}] ->
Sql = io_lib:format("select count(*) from temp_npc where nid = ~p;", [NpcId]),
case db_esql:get_all(Sql) of
[[0]] ->
?IOFILE("[错误]对话任务 task id -> ~p 中,目标npc -> ~p 无效,具体见字段 target_property ~n", [Tid, NpcId]);
_ -> skip
end;
_ ->
?IOFILE("[错误]任务 task id -> ~p 中,字段 target_property 格式有误 ~n", [Tid])
end;
check_target_pro(?KILL_EVENT, TaskPro, Tid) ->
case TaskPro of
[{MonId, _, 0}] ->
Sql = io_lib:format("select count(*) from temp_npc where nid = ~p;", [MonId]),
case db_esql:get_all(Sql) of
[[0]] ->
?IOFILE("[错误]杀怪任务 task id -> ~p 中,怪物数据 monster id -> ~p 无效,具体见字段 target_property ~n", [Tid, MonId]);
_ -> skip
end;
_ ->
?IOFILE("[错误]任务 task id -> ~p 中,字段 target_property 格式有误 ~n", [Tid])
end;
check_target_pro(?COLLECT_EVENT, TaskPro, Tid) ->
case TaskPro of
[{ItemId, _, 0}] ->
Sql = io_lib:format("select count(*) from temp_npc where nid = ~p;", [ItemId]),
case db_esql:get_all(Sql) of
[[0]] ->
?IOFILE("[错误]采集任务 task id -> ~p 中, 采集物数据 item id -> ~p 无效,具体见字段 target_property ~n", [Tid, ItemId]);
_ ->
skip
end;
_ ->
?IOFILE("[错误]任务 task id -> ~p 中,字段 target_property 格式有误 ~n", [Tid])
end;
check_target_pro(?NPC_GOODS_EVENT, TaskPro, Tid) ->
case TaskPro of
[{NpcId, ItemId, _, 0}] ->
do_check_npc_shop_item(ItemId, Tid),
do_check_npc_shop_npc(NpcId, Tid),
do_check_npc_shop_data(NpcId, ItemId, Tid);
_ ->
?IOFILE("[错误]任务 task id -> ~p 中,字段 target_property 格式有误 ~n", [Tid])
end;
check_target_pro(ERR1, Err2, Err3) ->
io:format("[ERROR]param of check_target_pro err ~p ~n", [{ERR1, Err2, Err3}]).
do_check_npc_shop_item(ItemId, Tid) ->
Sql = io_lib:format("select count(*) from temp_goods where gtid = ~p;", [ItemId]),
case db_esql:get_all(Sql) of
[[0]] ->
?IOFILE("[错误]npc购物任务 task id -> ~p 中, 商品数据 item id -> ~p 无效,具体见字段 target_property ~n", [Tid, ItemId]);
_ ->
skip
end.
do_check_npc_shop_npc(NpcId, Tid) ->
Sql = io_lib:format("select count(*) from temp_npc where nid = ~p;", [NpcId]),
case db_esql:get_all(Sql) of
[[0]] ->
?IOFILE("[错误]npc购物任务 task id -> ~p 中, npc数据 npc id -> ~p 无效,具体见字段 target_property ~n", [Tid, NpcId]);
_ ->
skip
end.
do_check_npc_shop_data(NpcId, ItemId, Tid) ->
Sql = io_lib:format("select shop_goods from temp_npc_shop where shop_id = ~p;", [NpcId]),
case db_esql:get_all(Sql) of
[] ->
?IOFILE("[错误]npc购物任务 task id -> ~p 中, npc数据 npc id -> ~p 没有商品,具体见 temp_npc_shop表 ~n", [Tid, NpcId]);
Data ->
ResultList = lists:map(fun(ShopGoos) ->
do_check_npc_shop_npc_item(ItemId, ShopGoos)
end, Data),
case lists:member(true, ResultList) of
true -> skip;
false ->
?IOFILE("[错误]npc购物任务 task id -> ~p 中, npc数据 npc id -> ~p 没有商品 item id -> ~p,具体见 temp_npc_shop表 ~n", [Tid, NpcId, ItemId])
end
end.
do_check_npc_shop_npc_item(ItemId, ShopGoos) ->
NewShopGoods = util:bitstring_to_term(ShopGoos),
case lists:keyfind(ItemId, 1, NewShopGoods) of
false -> false;
_ -> true
end.

+ 1
- 7
src/srvNodeMgr/tools/gameWorld/test/union_to_emongo.erl Visa fil

@ -1,12 +1,6 @@
%%%--------------------------------------
%%% @Module : mysql_to_emongo
%%% @Author : csj
%%% @Created : 2011.03.03
%%% @Description: emongo数据库合服处理模块
%%%--------------------------------------
-module(union_to_emongo).
-compile([export_all]).
-include("common.hrl").
-include("common111.hrl").
%%
-define(SN, config:get_server_number(gateway)).

+ 0
- 1
src/srvNodeMgr/tools_cq/tester.erl Visa fil

@ -1,5 +1,4 @@
-module(tester).
-include("common.hrl").
-export([
test_online_num/1,

+ 1
- 1
src/uuidMd5/utMd5.erl Visa fil

@ -16,7 +16,7 @@ getMd5HexBin(Str) ->
-spec(md5BinToHex(Md5Bin :: binary()) -> string()).
md5BinToHex(Md5Bin) ->
utHex:binaryToHex(Md5Bin).:q!
utHex:binaryToHex(Md5Bin).
-spec(md5BinToHexBin(Md5Bin :: binary()) -> binary()).
md5BinToHexBin(Md5Bin) ->

Laddar…
Avbryt
Spara