From dd86776e13654ce46d33d708f0d860f610460bdd Mon Sep 17 00:00:00 2001 From: SisMaker <1713699517@qq.com> Date: Tue, 13 Oct 2020 00:59:35 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BC=96=E8=AF=91=E8=BF=87=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/common111.hrl | 484 ++++++ include/record111.hrl | 232 +++ include/table_to_record.hrl | 1540 +++++++++++++++++ .../performance => comMisc}/cast_and_call.erl | 0 .../test/performance => comMisc}/loop.erl | 0 .../baizhan/misc => comMisc}/misc.erl | 0 .../test/misc/misc.erl => comMisc/misc1.erl} | 48 +- .../test/misc => comMisc}/misc_admin.erl | 142 +- .../test/performance => comMisc}/prof.erl | 0 .../gameWorld/test/misc => comMisc}/tool.erl | 0 .../baizhan/misc => comMisc}/util.erl | 10 +- .../test/misc/util.erl => comMisc/util1.erl} | 110 +- src/hotUpdate/u.erl | 4 +- src/hotUpdate/u2.erl | 6 +- .../test/misc => httpSocket}/http_lib.erl | 87 +- src/srvNodeMgr/misc.erl | 714 -------- .../tools/gameWorld/test/excel2mysql.erl | 2 +- .../tools/gameWorld/test/misc/auto_id.erl | 124 -- .../tools/gameWorld/test/misc/php_parser.erl | 132 -- .../tools/gameWorld/test/mysql_test.erl | 6 - .../tools/gameWorld/test/mysql_to_emongo.erl | 8 +- .../tools/gameWorld/test/random_test.erl | 23 +- .../test/robot/new_robot/new_robot.erl | 4 +- .../gameWorld/test/robot/new_robot/ptr_30.erl | 4 +- .../gameWorld/test/robot/proto/ptr_11.erl | 4 +- .../gameWorld/test/robot/proto/ptr_19.erl | 3 +- .../gameWorld/test/robot/proto/ptr_40.erl | 5 +- .../gameWorld/test/robot/proto/ptr_44.erl | 4 +- .../tools/gameWorld/test/robot/robot.erl | 5 - .../tools/gameWorld/test/robot/robot.hrl | 8 +- .../gameWorld/test/robot/robot_battle.erl | 3 +- .../tools/gameWorld/test/robot/robot_chat.erl | 1 - .../gameWorld/test/robot/robot_gateway.erl | 5 - .../gameWorld/test/robot/robot_goods.erl | 2 - .../gameWorld/test/robot/robot_guild.erl | 6 - .../tools/gameWorld/test/robot/robot_mail.erl | 6 - .../gameWorld/test/robot/robot_mount.erl | 5 - .../gameWorld/test/robot/robot_newbie.erl | 6 - .../gameWorld/test/robot/robot_openfunc.erl | 6 - .../tools/gameWorld/test/robot/robot_pet.erl | 9 +- .../gameWorld/test/tools/record_to_code.erl | 14 +- .../gameWorld/test/tools/table_to_erlang.erl | 9 +- .../gameWorld/test/tools/table_to_record.erl | 9 +- .../test/tools/task_data_checker.erl | 247 --- .../tools/gameWorld/test/union_to_emongo.erl | 8 +- src/srvNodeMgr/tools_cq/tester.erl | 1 - src/uuidMd5/utMd5.erl | 2 +- 47 files changed, 2353 insertions(+), 1695 deletions(-) create mode 100644 include/common111.hrl create mode 100644 include/record111.hrl create mode 100644 include/table_to_record.hrl rename src/{srvNodeMgr/tools/gameWorld/test/performance => comMisc}/cast_and_call.erl (100%) rename src/{srvNodeMgr/tools/gameWorld/test/performance => comMisc}/loop.erl (100%) rename src/{srvNodeMgr/baizhan/misc => comMisc}/misc.erl (100%) rename src/{srvNodeMgr/tools/gameWorld/test/misc/misc.erl => comMisc/misc1.erl} (92%) rename src/{srvNodeMgr/tools/gameWorld/test/misc => comMisc}/misc_admin.erl (68%) rename src/{srvNodeMgr/tools/gameWorld/test/performance => comMisc}/prof.erl (100%) rename src/{srvNodeMgr/tools/gameWorld/test/misc => comMisc}/tool.erl (100%) rename src/{srvNodeMgr/baizhan/misc => comMisc}/util.erl (98%) rename src/{srvNodeMgr/tools/gameWorld/test/misc/util.erl => comMisc/util1.erl} (77%) rename src/{srvNodeMgr/tools/gameWorld/test/misc => httpSocket}/http_lib.erl (72%) delete mode 100644 src/srvNodeMgr/misc.erl delete mode 100644 src/srvNodeMgr/tools/gameWorld/test/misc/auto_id.erl delete mode 100644 src/srvNodeMgr/tools/gameWorld/test/misc/php_parser.erl delete mode 100644 src/srvNodeMgr/tools/gameWorld/test/tools/task_data_checker.erl diff --git a/include/common111.hrl b/include/common111.hrl new file mode 100644 index 0000000..c1e577a --- /dev/null +++ b/include/common111.hrl @@ -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). %% 场景中怪物保存,可以用作ETS,可以用这dict 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)12、18点系统赠予50点体力buff +-define(COST_BUY_POWER, 20). % 购买体力固定花费的元宝 + + +%% 背包、仓库默认格子数 +-define(DEFAUL_BAG_CELL, 36 * 2). +-define(DEFAULT_STORE_CELL, 24). + +%% VIP等级 +-define(VIP_LV_0, 0). % 0级,表示不是vip +-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). % 淘宝仓库 5页300格 +-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). %支付宝 diff --git a/include/record111.hrl b/include/record111.hrl new file mode 100644 index 0000000..76eb69b --- /dev/null +++ b/include/record111.hrl @@ -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,<>] + 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 +}). diff --git a/include/table_to_record.hrl b/include/table_to_record.hrl new file mode 100644 index 0000000..a6b37f5 --- /dev/null +++ b/include/table_to_record.hrl @@ -0,0 +1,1540 @@ +%%%------------------------------------------------ +%%% File : table_to_record.erl +%%% Author : smxx +%%% Created : 2013-11-01 13:02:15 +%%% Description: 从mysql表生成的record +%%% Warning: 由程序自动生成,请不要随意修改! +%%%------------------------------------------------ + + +%% 服务器列表 +%% server ==> server +-record(server, { + id = 0, %% 编号Id + domain = 1, %% 分区号 + ip = "", %% ip地址 + port = 0, %% 端口号 + node = "", %% 节点 + num = 0, %% 节点用户数 + stop_access = 0, %% 是否停止登陆该节点,0为可以登录,1为停止登陆 + start_time = 0, %% 开服时间 + state = 0 %% 1-新开;2-火爆;3-良好;4-流畅;5-维护。 +}). + +%% 服务器列表 +%% config_server ==> config_server +-record(config_server, { + id = 0, %% 编号Id + name = "" %% 服务器名字 +}). + +%% 服务器列表 +%% server_player ==> server_player +-record(server_player, { + uid = 0, %% 玩家ID,全平台唯一 + accid = 0, %% 玩家Id + serv_id = 0, %% 服务器标识 + domain = 0, %% 大区标识 + acc_name = "", %% 账号名字 + nick = "", %% 角色名字 + sex = 0, %% 角色性别 + career = 0, %% 角色职业 + lv = 0, %% 角色等级 + icon = 0, %% 图标 + last_login = 0 %% 最后登录时间 +}). + +%% 角色基本信息 +%% player ==> player +-record(player, { + id, %% 用户ID + account_id = 0, %% 平台账号ID + account_name = "", %% 平台账号 + nick = "", %% 玩家名 + type = 1, %% 玩家身份 1- 普通玩家 2 - 指导员 3 - gm + icon = 0, %% 玩家头像ID + reg_time = 0, %% 注册时间 + logout_time = 0, %% 上次离线时间 + last_login_time = 0, %% 最后登陆时间 + last_login_ip = "", %% 最后登陆IP + status = 0, %% 玩家状态(0正常、1禁止、2战斗中、3死亡、4挂机、5打坐) + gender = 1, %% 性别 1男 2女 + career = 0, %% 职业(0:未定义,1: 神 2:魔 3:妖) + gold = 0, %% 元宝 + bgold = 0, %% 绑定元宝 + coin = 0, %% 铜钱 + bcoin = 0, %% 绑定铜钱 + vip = 0, %% VIP类型,0不是VIP,其他参考common.hrl + vip_expire_time = 0, %% VIP过期时间(秒) + scene = 0, %% 场景ID + cell_num = 0, %% 背包格子数 + level = 1, %% 等级 + exp = 0, %% 经验 + online_flag = 0, %% 在线标记,0不在线 1在线 + resolut_x = 0, %% 分辨率 X + resolut_y = 0, %% 分辨率 Y + liveness = 0, %% 活跃度 + camp = -1, %% 阵营(国籍) + lilian = 0, %% 历练值 + switch = 0, %% 状态开关码1:功能开 0:功能关,位定义参考common.hrl + guild_id = 0, %% 派帮ID(无帮派:0) + guild_name = "", %% 帮派名称 + guild_post = 0, %% 帮派职位(0为小兵) + force = 0, %% 战斗力 + battle_attr = [], %% 战斗结构体 + other = 0, %% 其他信息 + login_times = 0, %% 登陆次数 + freefly = 0, %% VIP玩家免费使用跟斗云次数 + max_force = 0, %% 最高战力 + adore_count = 0, %% 被崇拜次数 + adore_detail = <<"{0,0}">>, %% 排行榜崇拜详细信息{上次崇拜时间,剩余次数} + leader_flag = 0, %% 新手引导标识 + login_level = 0, %% 登陆时等级 + equip_score %% 装备评分 +}). + +%% 玩家物品记录 +%% goods ==> goods +-record(goods, { + id, %% 玩家物品Id + uid = 0, %% 玩家ID + pet_id = 0, %% 宠物Id(装备穿在宠物身上时对应的武将唯一Id) + gtid = 0, %% 物品类型编号 + location = 0, %% 物品所在位置 + cell = 0, %% 物品所在格子位置 + num = 0, %% 物品数量 + score = 0, %% 装备评分:非装备用0表示 + hole = 0, %% 镶孔数 + hole_goods = [], %% 孔所镶物品类型ID + polish_num = 0, %% 洗练次数 + stren_lv = 0, %% 强化等级 + stren_percent = 0, %% 强化完美度 + add_succ_rate = 0, %% 增加强化成功率 + type = 0, %% 物品类型(参考宏定义) + subtype = 0, %% 物品子类型(参考宏定义) + quality, %% 品质,决定了物品名称颜色1:白色,2:绿色,3:蓝色,4:紫色,5:橙色 + sell_price = 0, %% 物品出售价格 + career = 0, %% 职业限制,0为不限 + gender = 0, %% 性别限制,0为女,1为男,2为男女不限 + level = 0, %% 等级限制,0为不限 + max_num = 0, %% 可叠加数,0为不可叠加 + bind = 0, %% 绑定状态0不限制,2装备绑定,3已绑定, + expire_time = 0, %% 有效期,0为不限,单位为秒 + suit_id = 0, %% 套装ID,0为不是套装 + gilding_lv = 0, %% 镀金等级 + goods_cd = 0 %% 物品使用cd +}). + +%% 物品属性表 +%% goods_attribute ==> goods_attribute +-record(goods_attribute, { + id, %% 编号 + uid = 0, %% 角色ID + gid = 0, %% 物品编号ID + attribute_type = 0, %% 属性类型,1 强化,2 强化+4,3 强化+7,5 镶嵌 + stone_type_id = 0, %% 宝石编号ID,无宝石为0 + attribute_id = 0, %% 属性类型Id:0-气血,1-物理攻击。。。 + value = 0, %% 属性值 + value_type = 0, %% 属性值类型,0为数值,1为百分比 + hole_seq = 0, %% 镶嵌宝石孔位置 + status = 0 %% 是否生效,1为生效,0为不生效 +}). + +%% 技能 +%% skill ==> skill +-record(skill, { + uid = 0, %% 角色id + skill_list = [], %% 已学习的技能ID列表[{SkillId Level}], + cur_skill_list = [], %% 当前正在使用的技能的ID[{SkillId Level},...], + skill_point = <<"{0,0}">> %% 技能点{已用点数未用点数}, +}). + +%% 玩家系统设置 +%% system_config ==> system_config +-record(system_config, { + uid = 0, %% 玩家Id + shield_role = 0, %% 蔽屏附近玩家和宠物,0:不屏蔽;1:屏蔽 + shield_skill = 0, %% 屏蔽技能特效, 0:不屏蔽;1:屏蔽 + shield_rela = 0, %% 屏蔽好友请求,0:不屏蔽;1:屏蔽 + shield_team = 0, %% 屏蔽组队邀请,0:不屏蔽;1:屏蔽 + shield_chat = 0, %% 屏蔽聊天传闻,0:不屏蔽;1:屏蔽 + fasheffect = 0, %% 时装显示(0对别人显示,1对别人不显示) + music = 50, %% 游戏音乐,默认值为50 + soundeffect = 50 %% 游戏音效,默认值为50 +}). + +%% 玩家反馈 +%% feedback ==> feedback +-record(feedback, { + id, %% ID + type = 1, %% 类型(1-Bug/2-投诉/3-建议/4-其它) + state = 0, %% 状态(已回复1/未回复0) + uid = 0, %% 玩家ID + name = "", %% 玩家名 + content, %% 内容 + timestamp = 0, %% Unix时间戳 + ip = "", %% 玩家IP + server = "", %% 服务器 + gm = "", %% 游戏管理员 + reply, %% 回复内容[{NickContent}....], + reply_time = 0 %% 回复时间 +}). + +%% 战斗属性表 +%% temp_combat_attr ==> temp_combat_attr +-record(temp_combat_attr, { + level = 0, %% 等级 + career = 0, %% 对人是职业,对怪物是类型。 + exp = 0, %% 对人是升级所需经验,对怪是产出经验。 + hit_point_max = 0, %% 生命上限 + magic_max = 0, %% 法力上限 + combopoint_max = 0, %% 最大连击点数 + anger_max = 0, %% 怒气值上限 + attack = 0, %% 普通攻击力 + abs_damage = 0, %% 绝对伤害值 + defense = 0, %% 普通防御力 + fattack = 0, %% 仙攻值 + mattack = 0, %% 魔攻值 + dattack = 0, %% 妖攻值 + fdefense = 0, %% 仙防值 + mdefense = 0, %% 魔防值 + ddefense = 0, %% 妖防值 + speed = 0, %% 移动速度 + attack_speed = 0, %% 攻击速度 + hit_ratio = 0, %% 命中率(万分比) + dodge_ratio = 0, %% 闪避率(万分比) + crit_ratio = 0, %% 暴击率(万分比) + tough_ratio = 0, %% 坚韧率(万分比) + frozen_resis_ratio = 0, %% 冰冻抗性率(万分比) + weak_resis_ratio = 0, %% 虚弱抗性率(万分比) + flaw_resis_ratio = 0, %% 破绽抗性率(万分比) + poison_resis_ratio = 0, %% 中毒抗性率(万分比) + fundamental_energy = 0 %% 能量值上限 +}). + +%% 物品基础表 +%% temp_goods ==> temp_goods +-record(temp_goods, { + gtid = 0, %% 物品类型编号 + name = "", %% 物品名称 + icon = <<"0">>, %% 物品图标资源ID + fall = "", %% 物品掉落在地图标ID + type = 0, %% 物品类型(参考宏定义) + subtype = 0, %% 物品子类型(参考宏定义) + quality, %% 品质,决定了物品名称颜色1:白色,2:绿色,3:蓝色,4:紫色,5:橙色 + sell_price = 0, %% 物品出售价格 + career = 0, %% 职业限制,1,战士。2-法师,3-射手4为不限5宠物,6战骑, + gender = 0, %% 性别限制,0为女,1为男,2为男女不限 + level = 0, %% 等级限制,0为不限 + max_num = 0, %% 可叠加数 + limit = 0, %% 限制条件,0不限制 1捡取绑定 2装备绑定 4不能出售 + expire_time = 0, %% 有效期,0为不限,单位为秒 + suit_id = 0, %% 套装ID,0为不是套装 + cd = 0, %% cd + desc = "", %% 物品描述信息 + type_desc, %% 对物品类型的描述 如弓手护肩 + point_of_origin = <<"0">>, %% 该物品的产出途径 + navigation_goal = [], %% 点击tips中右下角的“装备”或者“使用”按钮,跳转到的对应页面用列表形式填写,形如, + search_type = 0, %% + gold %% 元宝价格 +}). + +%% temp_goods_contain +%% temp_goods_contain ==> temp_goods_contain +-record(temp_goods_contain, { + gid, %% 对应物品表的id.这类物品的type = 9 + contain %% 使用之后包含的物品内容。填写格式是物品id以及物品数量 +}). + +%% 装备物品 +%% temp_goods_equipment ==> temp_goods_equipment +-record(temp_goods_equipment, { + gtid = 0, %% 物品类型编号 + appearance = "", %% 装备外观 + set_id = 0, %% 套装编号 + max_stren = 0, %% 最大强化等级 + equip_attr = [], %% 装备属性 + stren_change = [], %% 强化后换装 + holes = 0, %% 默认孔数 + max_holes = 0, %% 镶嵌孔上限 + max_gilding = 0 %% 镀金上限 +}). + +%% 宝石属性 +%% temp_goods_gem ==> temp_goods_gem +-record(temp_goods_gem, { + gtid = 0, %% 物品ID + coin_num = 0, %% 消耗铜钱 + attri_add = <<"{}">> %% 属性加成 +}). + +%% 套装物品表 +%% temp_goods_suit ==> temp_goods_suit +-record(temp_goods_suit, { + suit_id = 0, %% 套装编号 + suit_num = 0, %% 套装件数 + name = "", %% 套装名 + goods_list = [], %% 套装物品ID列表[gdid1gtid2], + effect_list = [] %% 套装效果列表[{hit_ponit_maxnumbner},], +}). + +%% 怪物刷新 +%% temp_mon_layout ==> temp_mon_layout +-record(temp_mon_layout, { + key_id, %% LUA用联合主键的效率非常低下,我加了个联合主键 + scene_id = 0, %% 场景ID + monid = 0, %% 怪物ID + x = 0, %% 出生X坐标 + y = 0, %% 出生Y坐标 + towards = 0, %% 1.北;2.东北;3.东;4.东南;5.南;6.西南;7.西;8.西北 + revive_time = 0, %% 怪物死亡后的复活时长 + state = 0, %% 怪物状态:1-正常,2-战斗中,3-追击,4-死亡。 + pos_x = 0, %% 当前位置的X左边 + pos_y = 0, %% 当前位置的Y左边 + attack_skill = 0, %% 攻击技能 + skill_lv = 0, %% 技能等级 + refresh_time = 0, %% 下次需要刷新的时间 + last_move_time = 0, %% 上次移动的时间 + move_path = 00000000000, %% 上次移动的路径 + hate_list = "", %% 怪物的仇恨列表[{UIDDAMAGE,ADDTIME}], + buff_list = "", %% 怪物的BUFF列表[{BUFFIDExpireTime}], + sing_expire, %% 开始吟唱时间 + monrcd = <<"{}">>, %% 怪物配置结构,配置的时候不用填 + battle_attr = <<"{}">>, %% 战斗属性战斗属性,玩家不用填 + target_uid = 0, %% 主动怪物,被动怪物的攻击 目标玩家ID + id = 0, %% 怪物唯一标识(场景ID+怪物ID+**).配置的时候不用填 + round_times = 0, %% 怪物第攻击次数 + ai_skill_id = 0, %% 怪物AI产生的技能0为无AI技能, + ai_skill_lv = 0, %% 怪物AI产生的技能等级 + start_fight_time = 0, %% 怪物进入战斗时间单位秒, + ai_handle_list = [], %% 整场战斗触发AI产生的行为列表整场战斗只触发1次, + hate_seq = 1, %% 选取仇恨列表第n位为目标0为最后1位, + pid %% 怪物进程的Id +}). + +%% 通知消息 +%% temp_notice ==> temp_notice +-record(temp_notice, { + id = 0, %% 消息ID + type = 0, %% 0 - 提示语,发给单个人的。\r\n1 - 1级公告,会在跑马灯出现。\r\n2 - 2级公告,会在系统公告频道出现,红字。\r\n3 - 3级公告,会在系统频道出现,普通字。 + content = <<"""">> %% 消息内容 +}). + +%% NPC基础表 +%% temp_npc ==> temp_npc +-record(temp_npc, { + nid = 0, %% NPC编号 + name = "", %% 字名 + title = "", %% 称号 + icon = <<"0">>, %% 怪物或者NPC形象 + head = <<"0">>, %% 怪物或者NPC头像 + model = "", %% NPC头顶图片资源 + half_length = <<"0">>, %% NPC半身原画(在玩家点击打开NPC对话时显示的资源) + npc_type = 0, %% 类型:10-NPC;11-采集怪;20-普通小怪;21-精英怪物;22-副本小怪;25-副本精英怪;30-野外BOS;31-世界BOSS;32-副本BOSS;33-帮派BOSS;40-宠物;50-坐骑 + level = 0, %% 怪物等级 + fire_range = 0, %% 追击范围(格子距离) + warn_range = 0, %% 警介范围(格子距离)为0 的时候是被动怪物,大于0是主动怪物 + hit_point = 0, %% 生命值 + magic = 0, %% 法力值上限 + greeting = [], %% 怪物招呼语(怪物自说自话) + dialog = [], %% NPC无任务的时候点击显示 + func = <<"{}">>, %% + drop_id = 0, %% 掉落ID(temp_drop_main.did) 需要广播到场景中掉落物品 + output_id = 0, %% 产出的掉落(temp_drop_main.did) 根据不同的怪物类型决定发给具体的角色 + act_skilllist = [], %% 主动技能列表[ID] + pas_skilllist = [], %% 被动技能列表 [ID] + ai_id = 0, %% 怪物AI id + size = 0, %% NPC缩放比例 + fight_ai_id = 0, %% 怪物的初始战斗AI + dead_ai_id = 0, %% + dead_delay_time = 0, %% + is_hitback_when_die = 0, %% 怪物死亡时,是否播放击退效果.1表示播放击退效果,0表示不播放击退效果 + creation_mode, %% + play_speed %% +}). + +%% NPC刷新 +%% temp_npc_layout ==> temp_npc_layout +-record(temp_npc_layout, { + key_id, %% LUA不支持联合主键,将之前scene_id,npc_id连起来做了该列,做主键 + scene_id = 0, %% 场景ID + npcid = 0, %% NPCID + x = 0, %% X坐标 + y = 0, %% Y坐标 + towards = 0, %% 1.北;2.东北;3.东;4.东南;5.南;6.西南;7.西;8.西北 + npcrcd = <<"{}">>, %% NPC实例,配置的时候不用填 + id = 0 %% NPC唯一ID 配置的时候不用填 +}). + +%% 场景数据结构\r\n1、基础 +%% temp_scene ==> temp_scene +-record(temp_scene, { + sid, %% 场景id + name = "", %% 场景名称 + icon = <<"0">>, %% 场景资源编号 + mode = 0, %% 地图模式:\r\n默认为1 \r\n1-新手村 \r\n2-野外 \r\n3-主城 \r\n4-副本 \r\n5-跨服副本 + type = 1, %% 地图类型:多种类型可以共存\r\n0-表示都不可以\r\n1-可以PK\r\n2-可以原地复活\r\n4-可以吃瞬加药\r\n8-可以使用小飞鞋传送 + pk_mode = 1, %% 0-不强制pk模式\r\n1-强制和平模式\r\n2-强制自由pk模式\r\n3-强制帮会pk模式 + min_level = 0, %% 进入该地图的最下玩家等级 + max_level = 0, %% 进入该地图的最大玩家等级 + x = 0, %% 进入后默认x坐标 + y = 0, %% 进入后默认y坐标 + poem = <<"0">>, %% 进入诗词 + loading = 0, %% 调用Loading图 + revive_sid = 0, %% 复活场景 + revive_x = 0, %% 复活X坐标 + revive_y = 0, %% 复活Y坐标 + size = 10000, %% 万分比。填写10000则为不缩放。此处缩放比例只对场景中的玩家角色有效(包括宠物、站骑等) + npc = [], %% NPC + scene_num = 0, %% 该基础场景的进程数 + id = 0, %% 场景实例唯一标识 + sound_id %% +}). + +%% temp_skill +%% temp_skill ==> temp_skill +-record(temp_skill, { + sid = 0, %% 技能编号 + name = "", %% 技能名称 + icon = <<"0">>, %% 技能资源编号填写方式[技能升级面板突变id,主界面图标id], + type = 1, %% 技能类别 1.主动技能 2.被动技能(职业分流) + stype = 0, %% 子类型0:没要求, 1 玩家技能 2 怪的技能3宠物的技能10-被动技能, + is_stone_effect, %% 标识玩家被石化之后,能否放出技能\r\n0-不能\r\n1-能 + career = 0, %% 职业要求,0为不要求。1战士,2法师, 3射手6-宠物,20-普通小怪;21-精英怪物;22-副本小怪;30-野外BOS;31-世界BOSS;32-副本BOSS;33-帮派BOSS;\r\n, + distance = 0, %% 技能释放距离0时表示单体技能, + is_damage = 0, %% 技能是否造成伤害 0.不造成伤害 1.造成伤害 + is_normal_attr = 0, %% 是否普攻 0.否 1.是 + is_hit = 0, %% 是否必定命中 0.否 1.是 + aoe_tnum = 0, %% 技能AOE目标数量 + cd = 0, %% 技能cd + is_cd_all = 0, %% 是否受公共cd影响 0.否1.是 + cd_all, %% 影响公共cd的数值 + target_type = 1, %% 1-以自身为中心;2-以目标为中心;3-以地面某点为中心 + aoe_type = 0, %% aoe范围类型 1.直线 2.九宫格 3.扇形 + aoe_dist = 0, %% 技能AOE作用的距离 + relation_type = 0, %% 技能释放目标关系类型 2.友军 3.敌军 + is_crit = 0, %% 是否必定暴击 0.否 1.是 + sing_time = 0, %% 吟唱时间(毫秒) + sing_break = 0, %% 吟唱状态可否中断(1可,0木) + description = "", %% 技能描述 + attack_choose = 0, %% 不知道嘛东西,据说客户端使用 + start_effect_id = <<"0">>, %% 起手特效ID + start_effect_relative_time = 0, %% 起手动作播放到第X毫秒时,开始播放起手特效 + start_frame_speed = 0, %% 起始帧速 + end_effect_id = <<"0">>, %% 终止特效ID + end_effect_relative_time = 0, %% 起手动作播放到第Y毫秒时,开始播放伤害飘字 + end_frame_speed = 0, %% 被击特效帧速 + is_caused_by_buff = 0, %% 是否buff触发的子技能 0.否 1.是 + immediate_bullet_effect_id, %% 目标施放特效美术特效ID + immediate_bullet_relative_time, %% 施法动作第几贞施放目标特效 + immediate_bullet_frame_speed, %% 目标特效释放每贞数率 + atk_total_time, %% 攻击动作总时间用以表现对不同的攻击动作 + is_play_wave_effect, %% 是否攻击时播放刀光 + is_monster_skill = 0, %% 是否只对怪物有效0.对玩家与怪都有效 1.只对怪物有效 + is_share_damage = 0, %% 是否分摊伤害0.否 1.是 + smash_effect_id, %% 前端用 + smash_effect_relative_time, %% 前端用 + smash_effect_frame_speed, %% 前端用 + start_sound_effect, %% 前端用的 + behited_sound_effect, %% 前端用的 + immediate_bullet_sound_effect %% 前端用的 +}). + +%% temp_buff +%% temp_buff ==> temp_buff +-record(temp_buff, { + buff_id = 0, %% BuffID + name = <<"杂技">>, %% buff名称\r\n + desc, %% buff描述\r\nvarchar 50 + relation_type = 1, %% 关系类型 (1.对选中目标施放 2.对自己施放) + trigger_type = 0, %% 作者:\r\nsmallint作用类型\r\n是BUFF触发技能用的\r\n0 一次性触发buff\r\n1 间隔性触发类buff每隔一段时间触发一次\r\n2 被击性触发类buff \r\n3持续一段时间作用\r\n4.概率性触发, + type, %% smallint\r\n1-改变属性\r\n2-改变状态(无敌 不能移动)\r\n3-加减血类能量值\r\n4-系统类(如经验,情缘)\r\n5.改变外观 \r\n6-击退类\r\n7-冲锋类 + data = [], %% 模板属性 + trigger_info = [], %% 列表形式\r\n[12,3]\r\n1-死亡后消失\r\n2-进入副本后消失\r\n3-下线之后计算时间\r\n没有就不填, + group = 0, %% buff组 + priority = 0, %% buff优先级数值越高,优先级越高, + last_time = 1000, %% 持续时间 + times = 1, %% 作用次数 + link_skill = [], %% buff挂接技能 + link_effect = [], %% 挂接特效 + effect_level = 0 %% 特效前端表现层级 +}). + +%% temp_skill_attr +%% temp_skill_attr ==> temp_skill_attr +-record(temp_skill_attr, { + attr_id = 0, %% 前端用的id + sid = 0, %% 技能ID + level = 0, %% 等级 + buff = [], %% 技能BUFF[BuffId...], + require_list = [], %% 学习技能需要技能列表[{SkilId Level},...], + learn_level = 0, %% 学习技能需要玩家等级 + cost_lilian = 0, %% 升级需要历练值 + cost_coin = 0, %% 升级需要铜钱值 + cost_energy = <<"{0,0}">>, %% 消耗能量值 {消耗能量值消耗能量值百分比}, + desc, %% 描述,用于前端显示 + pvp_param = <<"[0,0,0,0,0,0,0,0]">>, %% 技能pvp属性 + pve_param = <<"[0,0,0,0,0,0,0,0]">> %% 技能pve属性 +}). + +%% 玩家座骑记录 +%% mount ==> mount +-record(mount, { + uid = 0, %% 玩家ID + state = 0, %% 状态1:骑 2休息 + exp = 0, %% 经验值 + level = 0, %% 等级(阶) + star = 0, %% 星级(最大10星) + fashion = 0, %% 当前幻化 + force = 0, %% 座骑战斗力 + skill_times = 0, %% 技能升级次数 + skill_list = [], %% 技能列表[{SkillId Lv, Exp},...], + fashion_list = [], %% 幻化列表[{Fid Expired},...], Fid幻化ID, Expire过期时间, + old_fashion_list = [] %% 过期幻化列表 +}). + +%% leader +%% leader ==> leader +-record(leader, { + uid, %% 玩家UID + navi_list, %% 系统面板已成功引导的列表 + open_list, %% + start_sk_list, %% + end_sk_list %% +}). + +%% activity +%% activity ==> activity +-record(activity, { + uid, %% 玩家UID + active_cur, %% 当前活跃度完成情况 + active_value, %% 已经领取到的活跃值 + reward_cur %% 当前奖励的领取信息 +}). + +%% bubble_msg +%% bubble_msg ==> bubble_msg +-record(bubble_msg, { + uid, %% + msg = [] %% [{BtypeStype,DataList}]的格式, +}). + +%% business_announce +%% business_announce ==> business_announce +-record(business_announce, { + id, %% + begin_time, %% + end_time, %% + content %% +}). + +%% contact +%% contact ==> contact +-record(contact, { + uid, %% + contact_list = [] %% 最近联系人id列表 +}). + +%% 关系列表 +%% relation ==> relation +-record(relation, { + uid = 0, %% 玩家id + bless_times = 0, %% 今天祝福次数 + max_friend = 0, %% 最大好友数目 + max_blacklist, %% 最大黑名单数目 + max_foe = 0, %% 最大仇人数目 + friend_list = [], %% 好友列表格式 [{玩家id玩家姓名,玩家头像,好感度}, ...], + foe_list = [], %% 仇人列表格式 [{玩家id玩家姓名,玩家头像,好感度}...], + black_list = [], %% [{玩家id玩家姓名,玩家头像}...], + recent_list = [], %% 最近联系人列表格式 [{Uid Time, Name, Career, Gender}, ...], Time 最近一次发生关系时间(秒), + flower = 0, %% 玩家收到的鲜花 + flower_avail = <<"{3,0}">> %% {玩家每天免费送花次数已用次数}, +}). + +%% 配置掉落实例 +%% temp_drop_main ==> temp_drop_main +-record(temp_drop_main, { + did, %% + dropitem = [] %% 随机掉落实例ID +}). + +%% 掉落实例明细 +%% temp_drop_sub ==> temp_drop_sub +-record(temp_drop_sub, { + sid, %% + dropitem = [] %% +}). + +%% 任务表 +%% temp_task ==> tpl_task +-record(tpl_task, { + tid = 0, %% 任务编号 + type = 0, %% 任务类型(见task.hrl) + start_npc = 0, %% 开始NPC + start_scene = 0, %% 开始场景 + end_npc = 0, %% 结束NPC + end_scene = 0, %% 结束场景 + target_type = 0, %% 任务目标类型 + target_property = <<"0">>, %% 任务目标数量[[idfin_num,begin_num]], + name = "", %% 任务名称 + desc = "", %% 任务描述 + ongoing_dialog = <<"""">>, %% 未完成任务对白 + finish_dialog, %% 完成任务对白,格式为:[{NPC对白}{角色对白}],若角色不说话,则格式为:[{NPC对白}], + pre_tid = 0, %% 要求前置任务编号 + level = 0, %% 等级限制 + career = 0, %% 职业限定(0:不限,其他为对应职业) + gender = 0, %% 性别限定(2:不限,其他为对应性别) + guild = 0, %% 家族限定(0:不限,1:有家族才能接) + team = 0, %% 组队限定(0:不限,1:组队才能做) + goods_list = [], %% 任务可选奖励物品列表[{标识类型(0:无标识 1:以职业为标识)类型编号,奖品id,奖品数量}..], + guild_goods_list = [], %% 任务奖励帮派资源列表 + func_num = 0, %% 任务目标类型(前段用) + next_tid, %% 下一级任务id + end_opera = 0 %% 任务结束后对话 +}). + +%% temp_task_detail +%% temp_task_detail ==> temp_task_detail +-record(temp_task_detail, { + task_type, %% 任务类型 + can_cyc, %% 是否支持循环 0:不支持 1:支持 + trigger_time, %% 可触发轮数 + cycle_time, %% 每轮可触发次数 + meanw_trigger, %% 每次可同时触发任务数 + time_limit, %% 时间段限制[{开始时间,结束时间}...] + reset_time, %% 重置时间 + coin = 0 %% 自动完成任务所需的元宝 +}). + +%% task_finish +%% task_finish ==> task_finish +-record(task_finish, { + uid = 0, %% 玩家ID + td1 = [], %% 1-10级任务ID + td2 = [], %% 11-20级任务ID + td3 = [], %% 21-30级任务ID + td4 = [], %% 31-40级任务ID + td5 = [], %% 41-50级任务ID + td6 = [], %% 51-60级任务ID + td7 = [], %% 61-70级任务ID + td = [] %% 任务ID +}). + +%% task_process +%% task_process ==> task_process +-record(task_process, { + id, %% + uid, %% 玩家id + tid, %% 任务模板id + state, %% 任务状态0:新任务, 1:完成未提交, + trigger_time, %% 触发时间 + type, %% 任务类型 + mark, %% 任务进度 + grade = 0 %% 任务品质 +}). + +%% 强化模版表 +%% temp_stren ==> temp_stren +-record(temp_stren, { + stren_lv, %% 强化等级 + add_percent, %% 附加属性比例 + goods = 0, %% 强化石id + cost_coin = 0, %% 消耗铜钱 + stren_rate, %% 强化基础成功率 + stren_succ = [], %% 强化成功等级增加区间 + stren_fail = [], %% 强化失败等级掉落区间 + add_succ_rate, %% 强化失败后,下次强化成功率增加值 + add_holes = 0, %% 新增插槽 + desc %% 备注 +}). + +%% temp_compose +%% temp_compose ==> temp_compose +-record(temp_compose, { + target_gtid, %% 目标物品id + tab_page, %% 1-装备页;2-宝石页;3-骑宠页;4-其他 + level_limit, %% 玩家的等级限制。不达到该等级则无法合成该物品 + coin_num, %% 消耗铜钱数量 + goods_need, %% 合成需要消耗的物品 + desc1, %% 说明1,用于前端展示 + desc2, %% 说明2,用于前端展示 + desc3 %% 说明3,用于前端展示 +}). + +%% 洗练模版表 +%% temp_polish ==> temp_polish +-record(temp_polish, { + gtid, %% 装备ID + polish_value = [], %% 洗炼属性列表 + probability = [] %% 概率 +}). + +%% 装备升级模版 +%% temp_upgrade ==> temp_upgrade +-record(temp_upgrade, { + gtid, %% 当前物品id + goods, %% 配方 + cost_coin = 0, %% 消耗铜钱 + target_gtid %% 目标物品id +}). + +%% 全身强化加成表 +%% temp_all_stren_reward ==> temp_all_stren_reward +-record(temp_all_stren_reward, { + stren_lv, %% 强化等级 + stren_reward %% 强化属性加成 +}). + +%% 洗炼属性表 +%% casting_polish ==> casting_polish +-record(casting_polish, { + gid = 0, %% 装备ID + uid = 0, %% 玩家ID + cur_attri = [], %% 当前洗炼属性 {唯一ID,属性ID,星级,加成属性,锁定状态} + new_attri = [] %% 新洗炼属性 {唯一ID,属性ID,星级,加成属性,锁定状态} +}). + +%% 洗练消耗模版表 +%% temp_polish_goods ==> temp_polish_goods +-record(temp_polish_goods, { + quality, %% 品质,决定了物品名称颜色1:白色,2:绿色,3:蓝色,4:紫色,5:橙色 + max_polish, %% 最大洗练条数 + goods = [], %% 消耗品 + cost_coin = 0 %% 消耗铜钱 +}). + +%% 套装装备加成 +%% temp_suit_reward ==> temp_suit_reward +-record(temp_suit_reward, { + suit_id, %% 套装id + num, %% 套装件数 + add_value = [] %% 属性加成 +}). + +%% 全身宝石镶嵌加成 +%% temp_all_gem_reward ==> temp_all_gem_reward +-record(temp_all_gem_reward, { + gem_num, %% 全身宝石个数 + add_value = [] %% 属性加成 +}). + +%% 镀金配置表 +%% temp_gilding ==> temp_gilding +-record(temp_gilding, { + gilding_lv, %% 镀金等级 + equip_subtype, %% 镀金等级 + add_value = [], %% 附加属性 + goods = [], %% 消耗物品 + cost_coin = 0 %% 消耗铜钱 +}). + +%% 元宝开启格子数 +%% temp_gold_bag ==> temp_gold_bag +-record(temp_gold_bag, { + cell_num = 0, %% + gold_num = 0 %% +}). + +%% 等级扩展背包 +%% temp_level_bag ==> temp_level_bag +-record(temp_level_bag, { + level = 0, %% + cell_num %% +}). + +%% vip背包模版表 +%% temp_vip_bag ==> temp_vip_bag +-record(temp_vip_bag, { + vip_gtid = 0, %% + cell_num %% +}). + +%% 神炼模版表 +%% temp_god_tried ==> temp_god_tried +-record(temp_god_tried, { + target_tid = 0, %% 神炼宝石 + stone_tid, %% 宝石 + god_stone_tid, %% 神炼石 + cost_coin %% 消耗铜钱 +}). + +%% 帮派 +%% guild ==> guild +-record(guild, { + id, %% 帮派编号 + name = "", %% 帮派名称 + chief_id = 0, %% 帮主角色 + chief_name = "", %% 帮主名字 + announce = "", %% 帮派宣言 + level = 0, %% 帮派等级 + current_num = 0, %% 当前人数 + elite_num = 0, %% 当前长老数 + devo = 0, %% 帮派贡献度 + fund = 0, %% 帮派资金 + upgrade_time = 0, %% 最近升级时间 + create_time = 0, %% 创建时间 + maintain_time = 0, %% 下次维护时间 + limit_members = 10, %% 成员数量上限 + state = 0, %% 弹劾盟主时为1 + accuse_id = 0, %% 发起弹劾的成员ID + accuse_time = 0, %% 弹劾到期时间 + against = 0, %% 反对分数 + agree = 0, %% 赞成分数 + accuse_num = 0, %% 劾弹次数 + friend_guild_id = 0, %% 结盟帮派 + voice_channel = "", %% + qqNumber, %% + maintain_cost = 0, %% 帮派维护费用 + debt_count = 0 %% 欠费天数 +}). + +%% 帮派成员 +%% guild_member ==> guild_member +-record(guild_member, { + uid, %% 角色ID + guild_id = 0, %% 帮派ID + name = "", %% 帮派名称 + nick = "", %% 角色昵称 + gender = 0, %% 性别 + career = 0, %% 职业 + level = 0, %% 玩家等级 + force = 0, %% 玩家战斗力 + position = 10, %% 1帮主 2副帮主 3长老 4 精英 中间预留 10-帮众(最低) + devo = 0, %% 总贡献度 + coin = 0, %% 累计捐献铜钱 + gold = 0, %% 累计捐献元宝 + today_devo = 0, %% 今日贡献度 + devo_time = 0, %% 上次捐献时间 + remain_devo = 0, %% 剩余贡献度 + vote = 0, %% 1赞成票2反对票 + accuse_time = 0, %% 投票过期时间 + title = 0, %% 称号等级 + last_login_time = 0, %% 上次登录时间 + sklist = [] %% 技能列表[{Id Level}], +}). + +%% 帮派申请 +%% guild_apply ==> guild_apply +-record(guild_apply, { + uid = 0, %% 角色ID + guild_id = 0, %% 帮派ID + nick = "", %% 角色昵称 + gender = 0, %% 性别 + career = 0, %% 职业 + level = 0, %% 玩家等级 + force = 0, %% 玩家战斗力 + timestamp = 0 %% 申请时间 +}). + +%% 购买npc商店日志 +%% buy_npc_shop_log ==> buy_npc_shop_log +-record(buy_npc_shop_log, { + uid, %% + shopid, %% + gtid, %% + buy_num, %% + buy_time %% +}). + +%% 商店模板表 +%% temp_npc_shop ==> temp_npc_shop +-record(temp_npc_shop, { + shop_id, %% 商店编号 + shop_page, %% 商店页码 + shop_type, %% 商店类型(0不限购1限购), + shop_goods = [] %% [{购买兑换物品 消耗物品,数量, 限购数量}], +}). + +%% 物品使用cd +%% goods_cd ==> goods_cd +-record(goods_cd, { + id, %% + uid = 0, %% + gtid = 0, %% 物品类型id + expire_time = 0 %% 过期时间 +}). + +%% temp_meridian +%% temp_meridian ==> tpl_meridian +-record(tpl_meridian, { + mer_id, %% 经脉id + mer_type = 0, %% 经脉类型(1-督脉,2-任脉,3-冲脉,4-带脉,5-阴维,6-阳维,7-阴跷,8-阳跷) + mer_lv, %% 经脉等级(1~100) + cd_type, %% 是否有cd(1有 2无) + mer_name, %% 经脉名称 + mer_detail, %% 经脉详细[{职业类别属性类型,属性值}...], + next_mer_id, %% 下一级经脉(-1为无下一级) + cd = 0, %% 冷却时间 + cost_money, %% 升级需要的金钱花费 + cost_Empowerment %% 升级需要的历练消费 +}). + +%% temp_bones +%% temp_bones ==> tpl_bones +-record(tpl_bones, { + lv, %% 根骨id + bones_val, %% 根骨提升值(万分比) + probability = 0, %% 成功率(万分比) + extend_pro = 0 %% 反馈成功率(万分比) +}). + +%% meridian +%% meridian ==> meridian +-record(meridian, { + player_id, %% 玩家Id + mer_detail_1, %% 玩家经脉1详细数据[{MerTypeMerlv}...], + mer_detail_2, %% 玩家经脉2详细数据[{MerTypeMerlv}...], + mer_state, %% 玩家修炼经脉阶段{state1 state2}, + cool_down = <<"{0,0}">> %% 剩余的冷却时间 {玩家开始修炼时间戳剩余冷却时间,状态}, +}). + +%% 根骨 +%% bones ==> bones +-record(bones, { + uid = 0, %% + bones_info = [] %% 根骨状况[{根骨类型根骨等级,成功率}...], +}). + +%% 商城配置表 +%% temp_shop ==> temp_shop +-record(temp_shop, { + shop_tab_page, %% + gtid, %% + page, %% + location, %% + original_price, %% + real_price, %% + gold_type = 1, %% 0非绑定元宝1绑定元宝, + level_limit %% 开放等级限制 +}). + +%% 购买商城物品日志 +%% buy_shop_log ==> buy_shop_log +-record(buy_shop_log, { + uid, %% + shoptabid, %% + gtid, %% + buy_num, %% + buy_time %% +}). + +%% 宠物表 +%% pet ==> pet +-record(pet, { + uid, %% + name = "", %% 昵称 + attack = 0, %% 普通攻击力 + attr_attack = 0, %% 属攻 + attack_type = 1, %% 属攻类型:1仙攻2魔攻,3妖攻, + hit = 0, %% 命中 + crit = 0, %% 暴击 + fighting = 0, %% 战力 + quality_lv = 0, %% 品阶 + fail_times = 0, %% 升级品级失败次数 + growth_lv = 0, %% 成长值 + growth_progress = 0, %% 成长进度 + aptitude_lv = 0, %% 资质 + aptitude_progress = 0, %% 资质进度 + status = 0, %% 0休息1参战, + skill_hole = 0, %% 开启技能槽总数 + skill_list = [], %% 技能ID列表[{SkillId Level}], + current_facade = 0, %% 当前外观id + old_facade = 0, %% 原来外观id + facade_list = [], %% 外观列表[] + suit_list = [], %% 套装列表 + create_time, %% 创建时间 + battle_attr = 0 %% 战斗属性 +}). + +%% temp_mount_attr +%% temp_mount_attr ==> temp_mount_attr +-record(temp_mount_attr, { + key_id, %% + level = 0, %% 座骑阶级 + star = 0, %% 星级 + star_exp, %% 坐骑在该星级,升到下一星所需要的进度值总长 + mount_model, %% + speed = 0, %% 坐骑给主人提供的速度增加值。为具体增加的值,不是万分比。 + data = [], %% 属性列表[{Key Value},...], + coin_id, %% + coin_num, %% + star_gid = 0 %% 在此等级(星,阶)所使用的丹药id +}). + +%% temp_mount_skill +%% temp_mount_skill ==> temp_mount_skill +-record(temp_mount_skill, { + index, %% + sid = 0, %% 技能ID + level = 0, %% 技能等级 + name = <<"技能名字">>, %% 阶级名 + exp, %% + data = [], %% 属性列表[{Key Value},...], + icon = "", %% + mount_level = 0 %% +}). + +%% temp_label +%% temp_label ==> temp_label +-record(temp_label, { + leader_id, %% + name, %% + type, %% + condition_id, %% + second_label, %% + third_label %% +}). + +%% temp_activity +%% temp_activity ==> temp_activity +-record(temp_activity, { + id, %% 主键 + btype, %% 大类说明:\r\n1-修仙之路(单人PVE)\r\n2-互动有无(玩家之间互动)\r\n3-提升战力(神炉、骑宠、经脉玩法)\r\n4-修仙之路(其他) + bnanme, %% 大类名称 + stype, %% 子分类编号 + sname, %% 子类型名称 + target_type, %% 对应的目标类型:1.完成指定次数2.到达指定时间 + target_num, %% 次数或分钟 + point, %% 完成后得到的活跃度点数 + crit %% 领取奖励的活跃值暴击\r\n{暴击率,暴击倍数}\r\n +}). + +%% temp_activity_reward +%% temp_activity_reward ==> temp_activity_reward +-record(temp_activity_reward, { + id, %% + type, %% + point, %% + min_level, %% + max_level, %% + gift %% +}). + +%% 物品buff记录表\r\n +%% buff ==> buff +-record(buff, { + uid, %% 角色ID + buff1 = [], %% BUFF记录[{BufId ExpireTime}]参考buff_util.erl, + buff2 = [], %% BUFF记录[{BufId Cd, RemTimes},...]参考buff_util.erl, + buff3 = [] %% BUFF记录[{BufId Cd, RemNumer},...]参考buff_util.erl, +}). + +%% temp_cultivation +%% temp_cultivation ==> tpl_cultivation +-record(tpl_cultivation, { + lv, %% 修为等级 + meridian_1, %% 经脉一等级 + meridian_2, %% 经脉二等级 + steps, %% 所需的星阶数 + name, %% 修为称号 + property, %% 修为属性[{职业类别属性类型,属性值}], + cost %% 花费的修为点 +}). + +%% cultivation +%% cultivation ==> cultivation +-record(cultivation, { + uid, %% 玩家id + lv, %% 修为等级 + property = [] %% 修为属性[{属性类型属性值}..], +}). + +%% 物品buff对应关系模版表 +%% temp_goods_buff ==> temp_goods_buff +-record(temp_goods_buff, { + gtid, %% 物品类型id + buff_tid %% buff类型id +}). + +%% 宠物模版 +%% temp_pet ==> temp_pet +-record(temp_pet, { + level, %% 等级 + attack, %% 普通攻击 + crit, %% 暴击 + hit, %% 命中 + attr_attack, %% 属攻 + skill_holes, %% 技能槽数 + atk_speed %% 攻击速度 +}). + +%% 宠物品级模版表 +%% temp_pet_quality ==> temp_pet_quality +-record(temp_pet_quality, { + quality_lv = 0, %% 品阶级 + color = 0, %% 宠物名称颜色编号 + facade = 0, %% 宠物外观编号 + cost_goods = 0, %% 进阶消耗进阶丹id + cost_coin = 0, %% 消耗铜钱数目 + succ_rate = 0, %% 成功率 + add_rate = 0, %% 进阶失败基础成功率增加值 + growth_limit = 0, %% 成长值等级上限 + aptitude_limit = 0, %% 资质值等级上限 + add_attri = [] %% 宠物属性加成[{attcak 10}, {}], +}). + +%% 宠物成长模版 +%% temp_pet_growth ==> temp_pet_growth +-record(temp_pet_growth, { + growth_lv, %% 成长等级 + cost_goods, %% 消耗成长丹id + cost_coin, %% 消耗的铜钱 + growth_total, %% 成长值进度条总长 + add_attri = [], %% 增加的属性 + extra_attri = [], %% 额外增加属性值 + add_holes %% 技能槽增加数 +}). + +%% 宠物资质模版 +%% temp_pet_aptitude ==> temp_pet_aptitude +-record(temp_pet_aptitude, { + aptitude_lv, %% 资质等级 + cost_goods, %% 消耗丹药id + cost_coin, %% 消耗的铜钱 + growth_total, %% 成长值进度条总长 + add_attri = [], %% 增加的属性 + extra_attri = [], %% 额外增加属性值 + add_holes = 0 %% 增加技能槽 +}). + +%% 宠物丹药增加进度模版 +%% temp_pet_medicine ==> temp_pet_medicine +-record(temp_pet_medicine, { + gtid = 0, %% 丹药类型id + growth = 0, %% 增加成长值 + aptitude = 0 %% 增加资质值 +}). + +%% 幻化卡和资源对应关系模版表 +%% temp_goods_facade ==> temp_goods_facade +-record(temp_goods_facade, { + gtid, %% 物品类型id + facade, %% 外观id + facade_res, %% 外观对应资源 + frame, %% 帧数 + frame_speed, %% 帧速 + icon, %% 头像 + expire_time, %% 0外观过期时间 + name, %% 外观名称 + description, %% 1、宠物幻化界面,宠物列表中的文字描述 + character, %% 1、宠物幻化界面,“宠物说明”后的文字内容 + color, %% 宠物坐骑的名字颜色\r\n1,白\r\n2,绿\r\n3,蓝\r\n4,紫\r\n5,橙 + character_deviation, %% + mount_deviation %% +}). + +%% temp_dungeon_group +%% temp_dungeon_group ==> temp_dungeon_group +-record(temp_dungeon_group, { + grp_id = 0, %% 副本组ID + grp_name = [], %% 副本组名 + times = 0, %% 挑战次数 + icon = <<"""">>, %% 副本组UI资源 + npcid %% +}). + +%% 场景数据结构\r\n1、基础 +%% temp_dungeon ==> temp_dungeon +-record(temp_dungeon, { + sid = 0, %% 地图ID,temp_scene.sid + name, %% "" + grp = 0, %% 副本组ID + duration = 0, %% 进入副本后持续时间(从进入副本之时开始算,时间到后自动传出)\r\n\r\n单位 秒 + next_sid = 0, %% 地图ID,temp_scene.sid + pass_type = 0, %% 通关条件类型:\r\n1 - 杀死固定的怪物和数量\r\n2 - 杀死总共的怪物数量 + pass_cond = [], %% 通关条件内容:\r\n1、杀死指定的怪物和数量的时候\r\n 配置为[{MonIdNumber}]\r\n2、杀死总共怪物数量的时候,则为[totalNumber], + rewards = [], %% 副本通关奖励 + king_rewards = [], %% 霸主奖励 + hard_desc, %% 前端用于显示副本难度的内容 + boss_coordinate, %% 副本BOSS怪的坐标点 + time_bonus, %% 控制玩家在副本中驻留时间影响评分的参数 + drug_take_off, %% 玩家在副本中吃药扣除的分数 + monster_bonus, %% 玩家在副本中杀怪获得的奖励分数 + begin_dialog, %% + end_dialog %% +}). + +%% 场景数据结构\r\n1、基础 +%% temp_dungeon_trigger ==> temp_dungeon_trigger +-record(temp_dungeon_trigger, { + key_id, %% + sid = 0, %% 触发器标识 + action = 0, %% 该副本的触发器标识\r\n\r\n1、玩家进入地图\r\n2、玩家死亡\r\n11 - 99 、玩家移动(位置同步)\r\n101 - 199、触发机关 + area = <<"{}">>, %% {X1Y1,...,Xn,Yn}在校验的时候,玩家的位置X,Y满足这样的关系: X1<= X <= X2 && Y1<= Y <= Y2, + event = 0, %% 响应时间类型:\r\n1 - 刷怪\r\n2 - 播放剧情\r\n3 - 播放动画 + param = [] %% 事件参数\r\n根据event的取值进行,配置数据格式不一样:\r\n1、刷怪,填刷怪的区域,建议是给一个中心点,然后给一个范围随机出现。如[{XY,MonId}] ;\r\n2、播放剧情,填剧情ID 如 [FilmId] ;\r\n3、播放动画,填动画ID和动作ID[{AnimId,ActionId}], +}). + +%% temp_dungeon_obj +%% temp_dungeon_obj ==> temp_dungeon_obj +-record(temp_dungeon_obj, { + id, %% id + dun_id, %% 物件所在副本id + obj_id, %% 物件id + action, %% 1个物件被触发后的行为顺序 + condition, %% + condition_param = [], %% condition是3的情况下填写[{mosterIdnumber}],其余不填, + event, %% event1触发剧情:[dialogueID]\r\nevent2创建怪物:[{monsterIDx,y}]\r\nevent3播放动画\r\nevent4播放死亡动作:[obj_id]\r\nevebt5触发通行:[obj_id], + event_param = [], %% event1触发剧情:[dialogueID]\r\nevent2创建怪物:[{monsterIDx,y}]\r\nevent3播放动画\r\nevent4播放死亡动作:[obj_id]\r\nevebt5触发通行:[obj_id], + create = 0 %% 是否初始化可见 +}). + +%% dungeon_daily +%% dungeon_daily ==> dungeon_daily +-record(dungeon_daily, { + uid = 0, %% 平台账号ID + sid = 0, %% 正在进行的副本ID + times = 0, %% 当前副本组通关次数 + begin_time = 0, %% 副本开始的时间 + last_time = 0, %% 最后一次在副本里活动的时间 + triggers = [], %% 触发器[] + pre_sid = 0, %% 进入副本前的场景ID + pre_sx = 0, %% 场景中的X + pre_sy = 0, %% + pre_attr = [], %% 记录人物进入副本前属性 + pass_assess = 0, %% 通关评价 + pass_type = 0, %% pass_type + pass_value = [], %% + rewards = [], %% 副本奖励 + monsters = [], %% 副本怪物 + dungeon_score = [], %% 副本评分 + dialogue = [], %% 副本剧情 + obj_state = [] %% 副本物件状态 +}). + +%% dungeon_finish +%% dungeon_finish ==> dungeon_finish +-record(dungeon_finish, { + uid = 0, %% 平台账号ID + dlv = [], %% + dlv0 = [], %% 1-10级打过的副本 + dlv1 = [], %% 1-10级打过的副本 + dlv2 = [], %% 1-10级打过的副本 + dlv3 = [], %% 1-10级打过的副本 + dlv4 = [], %% 1-10级打过的副本 + dlv5 = [], %% 1-10级打过的副本 + dlv6 = [], %% 1-10级打过的副本 + dlv7 = [], %% 1-10级打过的副本 + dlv8 = [], %% 1-10级打过的副本 + dlv9 = [], %% 1-10级打过的副本 + dlv10 = [], %% 1-10级打过的副本 + dlv11 = [], %% 1-10级打过的副本 + dlv12 = [], %% 1-10级打过的副本 + dlv13 = [], %% 1-10级打过的副本 + dlv14 = [], %% 1-10级打过的副本 + dlv15 = [], %% 1-10级打过的副本 + dlv16 = [], %% 1-10级打过的副本 + dlv17 = [], %% 1-10级打过的副本 + dlv18 = [], %% 1-10级打过的副本 + dlv19 = [] %% 1-10级打过的副本 +}). + +%% dungeon_master +%% dungeon_master ==> dungeon_master +-record(dungeon_master, { + sid = 0, %% 副本ID + gid = 0, %% 副本组ID + muid = 0, %% 副本霸主UID + score = 0, %% 副本霸主积分 + update_time = 0, %% 副本修改时间。 + nick = "" %% 霸主名字 +}). + +%% 宠物技能书模版 +%% temp_pet_skill_book ==> temp_pet_skill_book +-record(temp_pet_skill_book, { + key_id = 0, %% + sid = 0, %% + skill_name, %% + skill_book_id, %% 物品类型id + icon, %% + skill_level, %% + pre_level, %% + next_level, %% + desc, %% + coin %% +}). + +%% 怪物AI模版表 +%% temp_mon_ai ==> temp_mon_ai +-record(temp_mon_ai, { + id, %% AI编号 + ai_trigger = <<"{}">>, %% 触发条件 + chat = "", %% 怪物喊话 + skill = <<"{}">>, %% 使用技能 + target = <<"{}">>, %% 动作目标触发AI后引发的行为, + trigger_flag = 0, %% 整场战斗触发次数0:不限次数,1:只触发1次, + ai_type = 0, %% AI类型:1怪物喊话2怪物释放某技能,3选取仇恨列表第n位为目标,4怪物召唤同伴,5角色召唤同伴, + next_ai = "", %% 跳转到ai + content = "" %% 备注 +}). + +%% 已封禁帐号列表 +%% ban_account_list ==> ban_account_list +-record(ban_account_list, { + uid, %% 角色ID + nick, %% 角色名 + account_name, %% 账号 + end_time, %% 封禁结束时间 + operator = "", %% 操作员 + ban_reason, %% 封禁原因 + op_time %% +}). + +%% 已封禁IP列表 +%% ban_ip_list ==> ban_ip_list +-record(ban_ip_list, { + ip, %% IP + end_time, %% 封禁结束时间 + operator = "", %% 操作员 + ban_reason, %% 封禁原因 + op_time %% +}). + +%% sys_announce +%% sys_announce ==> sys_announce +-record(sys_announce, { + id = 0, %% 消息ID + type = 0, %% 公告类型:\r\n1 - 1级公告,会在跑马灯出现。\r\n2 - 2级公告,会在系统公告频道出现,红字。\r\n3 - 3级公告,会在系统频道出现,普通字。 + begin_time = 0, %% 公告开始时间(unixtime格式、0为立即开始) + end_time = 0, %% 系统公告停止时间(unixtime格式、0则永不停止) + interval = 0, %% 公告发送时间间隔,单位分钟,0为不发送。 + next_time = 0, %% 下次发送时间(untime格式、0为尚未发送) + times = 0, %% 发送次数(0为不限次数) + content = 0 %% 公告内容来自 temp_tips.id +}). + +%% temp_tips +%% temp_tips ==> temp_tips +-record(temp_tips, { + id = 0, %% 消息ID + type = 0, %% 0 - 提示语,发给单个人的。\r\n1 - 屏幕中央向上翻滚。\r\n2 - 聊天区\r\n3 - 1+2 + color = 0, %% 1 - 白\r\n2 - 绿\r\n3 - 蓝\r\n4 - 紫\r\n5 - 橙\r\n6 - 红 + content = <<"""">> %% 消息内容 +}). + +%% 玩家师门令,刷新列表 +%% task_master ==> task_master +-record(task_master, { + uid, %% 玩家id + master_task = [], %% 师门令任务 格式[{tid, grade, state},{tid, grade, state},{tid, grade, state}], + refresh_time = 0, %% 刷新时间 + create_time = 0 %% +}). + +%% 天道令信息 +%% heaven ==> heaven +-record(heaven, { + id, %% 主键 + reset_time = 0, %% + heaven_count = 0 %% 天道令数量 +}). + +%% 玩家天道令数据 +%% task_heaven ==> task_heaven +-record(task_heaven, { + uid = 0, %% 玩家id 主键, + reset_time = 0, %% 刷新事件 + publish_count = 0, %% 当天发布数量 + publish_heavens = <<"{}">>, %% 发布的天道令数量依次是天,地,玄,黄,{1,1,1,1}, + receive_count = 0, %% 当天领取的次数 + receive_heavens = <<"{}">> %% 领取的天道令数量依次是天,地,玄,黄,{1,1,1,1}, +}). + +%% 日常任务等级影响因子 +%% temp_task_factor ==> temp_task_factor +-record(temp_task_factor, { + task_type, %% 任务类型 + grade = 0, %% 任务品质 + fact1 = 0, %% 影响因子1 + fact2 = 0, %% 影响因子2 + fact3 = 0, %% 影响因子3 + fact4 = 0, %% 影响因子3 + task_id_span, %% 任务id区间 {minId maxId}, + level_span = 0 %% level区间 +}). + +%% 日常任务统计表 +%% task_daily ==> task_daily +-record(task_daily, { + uid = 0, %% 玩家id + type = 0, %% 任务类型 + state = 0, %% 状态 + used_trigger_count = 0, %% 已使用轮数 + used_cycle_count = 0, %% 当前这一轮, 已使用的次数 + trigger_count = 0, %% 已接日常任务数量 + reset_time = 0, %% 上次重置时间 + total = 0, %% 总的完成次数 + trigger_time = "" %% 触发时间 +}). + +%% temp_energy +%% temp_energy ==> temp_energy +-record(temp_energy, { + id, %% + career = 0, %% 玩家角色(0:未定义,1: 神 2:魔 3:妖) + level = 0, %% 角色等级 + attack = <<"{a1,b1}">>, %% 攻击时回复的能量系数 + injured = <<"{a2,c2}">>, %% 被攻击时回复的能量具体参考字段attack, + crit = 0, %% 暴击回复的能量百分比具体参考字段attack, + combat_recover = <<"{a3,c3,a4,c4,C5}">>,%% 战斗时回复每秒的能量系数 + normal_recover = 0 %% 离开战斗时回复每秒的能量系数百分比 +}). + +%% 角色禁言表 +%% opera ==> opera +-record(opera, { + uid, %% 角色ID + operaDialogue = [], %% 已播放过的剧情对话 + operaAnimation = [] %% 已播放过的剧情动画 +}). + +%% 角色禁言表 +%% scene_gift ==> scene_gift +-record(scene_gift, { + uid, %% 角色ID + scene_gift = [], %% 已领取过的场景下载礼包 + current_gift = [] %% 已领取过的场景下载礼包 +}). + +%% temp_download_gift +%% temp_download_gift ==> temp_download_gift +-record(temp_download_gift, { + scene_id, %% keyid填写内容为场景id,即玩家下载完某场景会得到该礼包, + gift_id %% 礼包id,对应temp_goods数据表内物品id +}). + +%% temp_vip +%% temp_vip ==> temp_vip +-record(temp_vip, { + level, %% 1-体验VIP;\r\n2-一天VIP;\r\n3-白银VIP;\r\n4-黄金VIP;\r\n5-钻石VIP;\r\n6-至尊VIP; + name, %% VIP名字 + condition, %% 与level对应\r\n1-任务id\r\n2-物品id\r\n3-物品id\r\n4-物品id\r\n5-物品id\r\n6-充值额度,RMB + cost = 0, %% VIP售价 + vip_map_id, %% 与场景模板表temp_scene相对应 + description, %% VIP描述信息,用于前端展示 + vip_time, %% 以分钟为单位 + vip_goods_bag, %% VIP礼包id,与temp_goods表相对应 + vip_buff_id, %% 在temp_buff表中配置 + freefly, %% 每天免费传送的次数 + freebag, %% 背包赠送格子数 + title = <<"0">>, %% 角色头顶图片资源 + desc = "" %% VIP说明字段 +}). + +%% temp_rand_shop +%% temp_rand_shop ==> temp_rand_shop +-record(temp_rand_shop, { + shop_lv, %% 商城等级 + bless, %% 祝福值上限 + shop_goods_lv = [], %% 物品等级 + times_limit = [], %% 不同物品等级刷新出次数限制 + odds_goods_lv = [], %% 物品等级几率参数:举个栗子,三个物品等级对应参数为(ab,c),出现几率分别为a/(a+b+c),b/(a+b+c),c/(a+b+c), + bless_up = [], %% 刷新提升祝福值 + odds_bless_up = [], %% 提升祝福值概率参数 + lock_cost = [], %% 锁定单价 + fundamental_cost %% 刷新基础费用 +}). + +%% temp_rand_shop_goods +%% temp_rand_shop_goods ==> temp_rand_shop_goods +-record(temp_rand_shop_goods, { + goods_id, %% 物品id,与temp_goods表对应 + goods_lv, %% 商城物品等级 + odds_goods, %% 出现物品的几率参数 + cost_gold %% 元宝价值 +}). + +%% 角色禁言表 +%% rand_shop ==> rand_shop +-record(rand_shop, { + uid, %% 角色ID + level = 1, %% 物品列表 + bless = 0, %% 当前祝福值 + item_list = [] %% 物品列表 +}). + +%% 帮派 +%% market_selling ==> market_selling +-record(market_selling, { + id, %% 挂售编号 + seller_id = 0, %% 挂售玩家id + goods_uid = 0, %% 挂售物品实例id + goods_id = 0, %% 挂售物品模板id + price = 0, %% 挂售价格 + num = 0, %% 数量 + start_time = 0, %% 挂售时间 + end_time = 0 %% 过期时间 +}). + +%% 帮派 +%% market_request ==> market_request +-record(market_request, { + id, %% 求购编号 + player_id = 0, %% 求购玩家id + goods_id = 0, %% 求购物品id + price = 0, %% 求购单价 + num = 0, %% 求购数量 + start_time = 0, %% 求购时间 + end_time = 0 %% 过期时间 +}). + +%% temp_guild_level +%% temp_guild_level ==> temp_guild_level +-record(temp_guild_level, { + guild_level, %% 帮派等级 + guild_members_limit, %% 成员数量上限 + guild_contribution_cost %% 1、每日消耗的资金数量2、消耗内容为帮派资金 +}). + +%% temp_charge +%% temp_charge ==> temp_charge +-record(temp_charge, { + rmb_value, %% + gold, %% + desc %% +}). + +%% temp_guild_contribution +%% temp_guild_contribution ==> temp_guild_contribution +-record(temp_guild_contribution, { + id, %% 此列配置不同货币 + contribution, %% 1元宝/1铜钱所能增加的贡献值(贡献是帮派成员的个人属性) + fund %% 1元宝/1铜钱所能增加的帮派资金(帮派资金数值是帮派属性) +}). + +%% temp_pet_skill_list +%% temp_pet_skill_list ==> temp_pet_skill_list +-record(temp_pet_skill_list, { + list_id, %% + type, %% + condition_id %% +}). + +%% temp_all_polish_reward +%% temp_all_polish_reward ==> temp_all_polish_reward +-record(temp_all_polish_reward, { + total_star, %% + bonus %% +}). + +%% temp_skill_point +%% temp_skill_point ==> temp_skill_point +-record(temp_skill_point, { + level = 0, %% 玩家等级 + skill_point = 0 %% 技能点 +}). + +%% temp_task_daily +%% temp_task_daily ==> tpl_task_daily +-record(tpl_task_daily, { + id, %% + task_type, %% + task_name, %% + level_limit, %% + trigger_accept, %% + trigger_contribute, %% + key_id, %% + task_description %% +}). + diff --git a/src/srvNodeMgr/tools/gameWorld/test/performance/cast_and_call.erl b/src/comMisc/cast_and_call.erl similarity index 100% rename from src/srvNodeMgr/tools/gameWorld/test/performance/cast_and_call.erl rename to src/comMisc/cast_and_call.erl diff --git a/src/srvNodeMgr/tools/gameWorld/test/performance/loop.erl b/src/comMisc/loop.erl similarity index 100% rename from src/srvNodeMgr/tools/gameWorld/test/performance/loop.erl rename to src/comMisc/loop.erl diff --git a/src/srvNodeMgr/baizhan/misc/misc.erl b/src/comMisc/misc.erl similarity index 100% rename from src/srvNodeMgr/baizhan/misc/misc.erl rename to src/comMisc/misc.erl diff --git a/src/srvNodeMgr/tools/gameWorld/test/misc/misc.erl b/src/comMisc/misc1.erl similarity index 92% rename from src/srvNodeMgr/tools/gameWorld/test/misc/misc.erl rename to src/comMisc/misc1.erl index c0ed46c..8434301 100644 --- a/src/srvNodeMgr/tools/gameWorld/test/misc/misc.erl +++ b/src/comMisc/misc1.erl @@ -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 diff --git a/src/srvNodeMgr/tools/gameWorld/test/misc/misc_admin.erl b/src/comMisc/misc_admin.erl similarity index 68% rename from src/srvNodeMgr/tools/gameWorld/test/misc/misc_admin.erl rename to src/comMisc/misc_admin.erl index 5f811be..57dfb83 100644 --- a/src/srvNodeMgr/tools/gameWorld/test/misc/misc_admin.erl +++ b/src/comMisc/misc_admin.erl @@ -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), diff --git a/src/srvNodeMgr/tools/gameWorld/test/performance/prof.erl b/src/comMisc/prof.erl similarity index 100% rename from src/srvNodeMgr/tools/gameWorld/test/performance/prof.erl rename to src/comMisc/prof.erl diff --git a/src/srvNodeMgr/tools/gameWorld/test/misc/tool.erl b/src/comMisc/tool.erl similarity index 100% rename from src/srvNodeMgr/tools/gameWorld/test/misc/tool.erl rename to src/comMisc/tool.erl diff --git a/src/srvNodeMgr/baizhan/misc/util.erl b/src/comMisc/util.erl similarity index 98% rename from src/srvNodeMgr/baizhan/misc/util.erl rename to src/comMisc/util.erl index efe0f8f..d664718 100644 --- a/src/srvNodeMgr/baizhan/misc/util.erl +++ b/src/comMisc/util.erl @@ -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]. diff --git a/src/srvNodeMgr/tools/gameWorld/test/misc/util.erl b/src/comMisc/util1.erl similarity index 77% rename from src/srvNodeMgr/tools/gameWorld/test/misc/util.erl rename to src/comMisc/util1.erl index 5ad560b..10f28fe 100644 --- a/src/srvNodeMgr/tools/gameWorld/test/misc/util.erl +++ b/src/comMisc/util1.erl @@ -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. -%% ----------------------------------------------------------------- -%% 获取当天0点和第二天0点 -%% ----------------------------------------------------------------- -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) -> diff --git a/src/hotUpdate/u.erl b/src/hotUpdate/u.erl index 82cd9d3..4d1643b 100644 --- a/src/hotUpdate/u.erl +++ b/src/hotUpdate/u.erl @@ -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). diff --git a/src/hotUpdate/u2.erl b/src/hotUpdate/u2.erl index 7a44a83..41995fe 100644 --- a/src/hotUpdate/u2.erl +++ b/src/hotUpdate/u2.erl @@ -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) -> diff --git a/src/srvNodeMgr/tools/gameWorld/test/misc/http_lib.erl b/src/httpSocket/http_lib.erl similarity index 72% rename from src/srvNodeMgr/tools/gameWorld/test/misc/http_lib.erl rename to src/httpSocket/http_lib.erl index 2fe39a0..ebf6f0c 100644 --- a/src/srvNodeMgr/tools/gameWorld/test/misc/http_lib.erl +++ b/src/httpSocket/http_lib.erl @@ -1,17 +1,12 @@ -%% @author Ruslan Babayev -%% @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}) -> diff --git a/src/srvNodeMgr/misc.erl b/src/srvNodeMgr/misc.erl deleted file mode 100644 index 4c17e12..0000000 --- a/src/srvNodeMgr/misc.erl +++ /dev/null @@ -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后通过pstack、message_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,且进程数< 1000,否则可能导致节点crash -% 结果: -% 输出每个方法实际执行时间(不会累计方法内其他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 类似于jstack,发现大量进程挂起,进程数过高,运行慢,hang住等问题用到 -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 查看内存占用最多的30张ets表 -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. \ No newline at end of file diff --git a/src/srvNodeMgr/tools/gameWorld/test/excel2mysql.erl b/src/srvNodeMgr/tools/gameWorld/test/excel2mysql.erl index 871b116..462b4d4 100644 --- a/src/srvNodeMgr/tools/gameWorld/test/excel2mysql.erl +++ b/src/srvNodeMgr/tools/gameWorld/test/excel2mysql.erl @@ -3,7 +3,7 @@ %% %% Include files %% --include("common.hrl"). +-include("common111.hrl"). -compile(export_all). -define(CONFIG_FILE, "../config/gateway.config"). diff --git a/src/srvNodeMgr/tools/gameWorld/test/misc/auto_id.erl b/src/srvNodeMgr/tools/gameWorld/test/misc/auto_id.erl deleted file mode 100644 index f455f1d..0000000 --- a/src/srvNodeMgr/tools/gameWorld/test/misc/auto_id.erl +++ /dev/null @@ -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. - - diff --git a/src/srvNodeMgr/tools/gameWorld/test/misc/php_parser.erl b/src/srvNodeMgr/tools/gameWorld/test/misc/php_parser.erl deleted file mode 100644 index e9a7c94..0000000 --- a/src/srvNodeMgr/tools/gameWorld/test/misc/php_parser.erl +++ /dev/null @@ -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 doesn’t 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. diff --git a/src/srvNodeMgr/tools/gameWorld/test/mysql_test.erl b/src/srvNodeMgr/tools/gameWorld/test/mysql_test.erl index f70a512..2cd9b10 100644 --- a/src/srvNodeMgr/tools/gameWorld/test/mysql_test.erl +++ b/src/srvNodeMgr/tools/gameWorld/test/mysql_test.erl @@ -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). diff --git a/src/srvNodeMgr/tools/gameWorld/test/mysql_to_emongo.erl b/src/srvNodeMgr/tools/gameWorld/test/mysql_to_emongo.erl index d70d5f3..36d90c9 100644 --- a/src/srvNodeMgr/tools/gameWorld/test/mysql_to_emongo.erl +++ b/src/srvNodeMgr/tools/gameWorld/test/mysql_to_emongo.erl @@ -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"). diff --git a/src/srvNodeMgr/tools/gameWorld/test/random_test.erl b/src/srvNodeMgr/tools/gameWorld/test/random_test.erl index aa14e04..01cac0b 100644 --- a/src/srvNodeMgr/tools/gameWorld/test/random_test.erl +++ b/src/srvNodeMgr/tools/gameWorld/test/random_test.erl @@ -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() -> diff --git a/src/srvNodeMgr/tools/gameWorld/test/robot/new_robot/new_robot.erl b/src/srvNodeMgr/tools/gameWorld/test/robot/new_robot/new_robot.erl index 6544618..d540b9a 100644 --- a/src/srvNodeMgr/tools/gameWorld/test/robot/new_robot/new_robot.erl +++ b/src/srvNodeMgr/tools/gameWorld/test/robot/new_robot/new_robot.erl @@ -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"). diff --git a/src/srvNodeMgr/tools/gameWorld/test/robot/new_robot/ptr_30.erl b/src/srvNodeMgr/tools/gameWorld/test/robot/new_robot/ptr_30.erl index b8422d1..cb7ed18 100644 --- a/src/srvNodeMgr/tools/gameWorld/test/robot/new_robot/ptr_30.erl +++ b/src/srvNodeMgr/tools/gameWorld/test/robot/new_robot/ptr_30.erl @@ -9,8 +9,8 @@ %%-------------------------------------- %% Include files %%-------------------------------------- --include("common.hrl"). --include("record.hrl"). +-include("common111.hrl"). + %%-------------------------------------- %% Exported Functions diff --git a/src/srvNodeMgr/tools/gameWorld/test/robot/proto/ptr_11.erl b/src/srvNodeMgr/tools/gameWorld/test/robot/proto/ptr_11.erl index b1bc105..f9f6dd9 100644 --- a/src/srvNodeMgr/tools/gameWorld/test/robot/proto/ptr_11.erl +++ b/src/srvNodeMgr/tools/gameWorld/test/robot/proto/ptr_11.erl @@ -9,8 +9,8 @@ %%-------------------------------------- %% Include files %%-------------------------------------- --include("common.hrl"). --include("record.hrl"). +-include("common111.hrl"). + %%-------------------------------------- %% Exported Functions diff --git a/src/srvNodeMgr/tools/gameWorld/test/robot/proto/ptr_19.erl b/src/srvNodeMgr/tools/gameWorld/test/robot/proto/ptr_19.erl index a22cda3..eb50ca2 100644 --- a/src/srvNodeMgr/tools/gameWorld/test/robot/proto/ptr_19.erl +++ b/src/srvNodeMgr/tools/gameWorld/test/robot/proto/ptr_19.erl @@ -9,8 +9,7 @@ %%-------------------------------------- %% Include files %%-------------------------------------- --include("common.hrl"). --include("record.hrl"). +-include("common111.hrl"). %%-------------------------------------- %% Exported Functions diff --git a/src/srvNodeMgr/tools/gameWorld/test/robot/proto/ptr_40.erl b/src/srvNodeMgr/tools/gameWorld/test/robot/proto/ptr_40.erl index 219276d..8b093fb 100644 --- a/src/srvNodeMgr/tools/gameWorld/test/robot/proto/ptr_40.erl +++ b/src/srvNodeMgr/tools/gameWorld/test/robot/proto/ptr_40.erl @@ -9,9 +9,8 @@ %%-------------------------------------- %% Include files %%-------------------------------------- --include("common.hrl"). --include("record.hrl"). --include("debug.hrl"). +-include("common111.hrl"). + %%-------------------------------------- %% Exported Functions %%-------------------------------------- diff --git a/src/srvNodeMgr/tools/gameWorld/test/robot/proto/ptr_44.erl b/src/srvNodeMgr/tools/gameWorld/test/robot/proto/ptr_44.erl index c675d4f..49b8033 100644 --- a/src/srvNodeMgr/tools/gameWorld/test/robot/proto/ptr_44.erl +++ b/src/srvNodeMgr/tools/gameWorld/test/robot/proto/ptr_44.erl @@ -9,8 +9,8 @@ %%-------------------------------------- %% Include files %%-------------------------------------- --include("common.hrl"). --include("record.hrl"). +-include("common111.hrl"). + %%-------------------------------------- %% Exported Functions diff --git a/src/srvNodeMgr/tools/gameWorld/test/robot/robot.erl b/src/srvNodeMgr/tools/gameWorld/test/robot/robot.erl index ff768c7..1a53ed2 100644 --- a/src/srvNodeMgr/tools/gameWorld/test/robot/robot.erl +++ b/src/srvNodeMgr/tools/gameWorld/test/robot/robot.erl @@ -1,8 +1,3 @@ -%%% ------------------------------------------------------------------- -%%% Author: SMXX -%%% Description : 机器人 -%%% Created : -%%% ------------------------------------------------------------------- -module(robot). -behaviour(gen_server). -include("robot.hrl"). diff --git a/src/srvNodeMgr/tools/gameWorld/test/robot/robot.hrl b/src/srvNodeMgr/tools/gameWorld/test/robot/robot.hrl index e149ef0..5a0dfdc 100644 --- a/src/srvNodeMgr/tools/gameWorld/test/robot/robot.hrl +++ b/src/srvNodeMgr/tools/gameWorld/test/robot/robot.hrl @@ -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"). diff --git a/src/srvNodeMgr/tools/gameWorld/test/robot/robot_battle.erl b/src/srvNodeMgr/tools/gameWorld/test/robot/robot_battle.erl index 7a577a3..50d932e 100644 --- a/src/srvNodeMgr/tools/gameWorld/test/robot/robot_battle.erl +++ b/src/srvNodeMgr/tools/gameWorld/test/robot/robot_battle.erl @@ -1,5 +1,4 @@ -%% @author Administrator -%% @doc @todo Add description to robot_battle. +%% Add description to robot_battle. -module(robot_battle). -include("robot.hrl"). %% ==================================================================== diff --git a/src/srvNodeMgr/tools/gameWorld/test/robot/robot_chat.erl b/src/srvNodeMgr/tools/gameWorld/test/robot/robot_chat.erl index 30019a3..9715717 100644 --- a/src/srvNodeMgr/tools/gameWorld/test/robot/robot_chat.erl +++ b/src/srvNodeMgr/tools/gameWorld/test/robot/robot_chat.erl @@ -1,7 +1,6 @@ -module(robot_chat). -compile(export_all). -%-include("common.hrl"). -include("robot.hrl"). %%---------------------- 自动聊天机数据 ---------------------- diff --git a/src/srvNodeMgr/tools/gameWorld/test/robot/robot_gateway.erl b/src/srvNodeMgr/tools/gameWorld/test/robot/robot_gateway.erl index 8db6f3c..05e461c 100644 --- a/src/srvNodeMgr/tools/gameWorld/test/robot/robot_gateway.erl +++ b/src/srvNodeMgr/tools/gameWorld/test/robot/robot_gateway.erl @@ -1,8 +1,3 @@ -%%% ------------------------------------------------------------------- -%%% Author: SMXX -%%% Description : 机器人 -%%% Created : -%%% ------------------------------------------------------------------- -module(robot_gateway). -behaviour(gen_server). -include("robot.hrl"). diff --git a/src/srvNodeMgr/tools/gameWorld/test/robot/robot_goods.erl b/src/srvNodeMgr/tools/gameWorld/test/robot/robot_goods.erl index fcb12c0..4714e0a 100644 --- a/src/srvNodeMgr/tools/gameWorld/test/robot/robot_goods.erl +++ b/src/srvNodeMgr/tools/gameWorld/test/robot/robot_goods.erl @@ -1,5 +1,3 @@ -%% Author: Administrator -%% Created: 2013-9-16 %% Description: TODO: Add description to robot_goods -module(robot_goods). -behaviour(gen_server). diff --git a/src/srvNodeMgr/tools/gameWorld/test/robot/robot_guild.erl b/src/srvNodeMgr/tools/gameWorld/test/robot/robot_guild.erl index 1ce307c..dffa55f 100644 --- a/src/srvNodeMgr/tools/gameWorld/test/robot/robot_guild.erl +++ b/src/srvNodeMgr/tools/gameWorld/test/robot/robot_guild.erl @@ -1,9 +1,3 @@ -%%%--------------------------------------------- -%%% @Module : robot_guild -%%% @Author : smxx -%%% @Created : 2013.03.01 -%%% @Description: 客户端测试程序 -%%%--------------------------------------------- -module(robot_guild). -include("robot.hrl"). -compile(export_all). diff --git a/src/srvNodeMgr/tools/gameWorld/test/robot/robot_mail.erl b/src/srvNodeMgr/tools/gameWorld/test/robot/robot_mail.erl index 0d39185..b8bc259 100644 --- a/src/srvNodeMgr/tools/gameWorld/test/robot/robot_mail.erl +++ b/src/srvNodeMgr/tools/gameWorld/test/robot/robot_mail.erl @@ -1,9 +1,3 @@ -%%--------------------------------------------- -%% @Module : robot_mail -%% @Author : smxx -%% @Created : 2013.09.13 -%% @Description: 邮件功能测试客户端 -%%--------------------------------------------- -module(robot_mail). -include("robot.hrl"). -compile(export_all). diff --git a/src/srvNodeMgr/tools/gameWorld/test/robot/robot_mount.erl b/src/srvNodeMgr/tools/gameWorld/test/robot/robot_mount.erl index cb51e21..f702646 100644 --- a/src/srvNodeMgr/tools/gameWorld/test/robot/robot_mount.erl +++ b/src/srvNodeMgr/tools/gameWorld/test/robot/robot_mount.erl @@ -1,8 +1,3 @@ -%%%------------------------------------ -%%% @Author : -%%% @Created : 2010.09.27 -%%% @Description: 坐骑处理 -%%%------------------------------------ -module(robot_mount). -include("robot.hrl"). -compile(export_all). diff --git a/src/srvNodeMgr/tools/gameWorld/test/robot/robot_newbie.erl b/src/srvNodeMgr/tools/gameWorld/test/robot/robot_newbie.erl index 72243b0..abcddb9 100644 --- a/src/srvNodeMgr/tools/gameWorld/test/robot/robot_newbie.erl +++ b/src/srvNodeMgr/tools/gameWorld/test/robot/robot_newbie.erl @@ -1,9 +1,3 @@ -%%--------------------------------------------- -%% @Module : robot_newbie -%% @Author : smxx -%% @Created : 2013.09.13 -%% @Description: 新手引导测试客户端 -%%--------------------------------------------- -module(robot_newbie). -include("robot.hrl"). -compile(export_all). diff --git a/src/srvNodeMgr/tools/gameWorld/test/robot/robot_openfunc.erl b/src/srvNodeMgr/tools/gameWorld/test/robot/robot_openfunc.erl index 7ac0720..4c84322 100644 --- a/src/srvNodeMgr/tools/gameWorld/test/robot/robot_openfunc.erl +++ b/src/srvNodeMgr/tools/gameWorld/test/robot/robot_openfunc.erl @@ -1,9 +1,3 @@ -%%--------------------------------------------- -%% @Module : robot_openfunc -%% @Author : smxx -%% @Created : 2013.03.01 -%% @Description: 功能开放测试客户端 -%%--------------------------------------------- -module(robot_openfunc). -include("robot.hrl"). -compile(export_all). diff --git a/src/srvNodeMgr/tools/gameWorld/test/robot/robot_pet.erl b/src/srvNodeMgr/tools/gameWorld/test/robot/robot_pet.erl index 020ecbd..e0d5d29 100644 --- a/src/srvNodeMgr/tools/gameWorld/test/robot/robot_pet.erl +++ b/src/srvNodeMgr/tools/gameWorld/test/robot/robot_pet.erl @@ -1,9 +1,2 @@ -%%%--------------------------------------------- -%%% @Module : robot_pet -%%% @Author : smxx -%%% @Created : 2013.03.xx -%%% @Description: 宠物客户端测试程序 -%%%--------------------------------------------- -module(robot_pet). -%% -include("robot.hrl"). -%% -compile(export_all). + diff --git a/src/srvNodeMgr/tools/gameWorld/test/tools/record_to_code.erl b/src/srvNodeMgr/tools/gameWorld/test/tools/record_to_code.erl index a83d874..8715b01 100644 --- a/src/srvNodeMgr/tools/gameWorld/test/tools/record_to_code.erl +++ b/src/srvNodeMgr/tools/gameWorld/test/tools/record_to_code.erl @@ -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 %% diff --git a/src/srvNodeMgr/tools/gameWorld/test/tools/table_to_erlang.erl b/src/srvNodeMgr/tools/gameWorld/test/tools/table_to_erlang.erl index eb417dc..9947188 100644 --- a/src/srvNodeMgr/tools/gameWorld/test/tools/table_to_erlang.erl +++ b/src/srvNodeMgr/tools/gameWorld/test/tools/table_to_erlang.erl @@ -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/"). diff --git a/src/srvNodeMgr/tools/gameWorld/test/tools/table_to_record.erl b/src/srvNodeMgr/tools/gameWorld/test/tools/table_to_record.erl index 841cb68..dd2f264 100644 --- a/src/srvNodeMgr/tools/gameWorld/test/tools/table_to_record.erl +++ b/src/srvNodeMgr/tools/gameWorld/test/tools/table_to_record.erl @@ -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"). diff --git a/src/srvNodeMgr/tools/gameWorld/test/tools/task_data_checker.erl b/src/srvNodeMgr/tools/gameWorld/test/tools/task_data_checker.erl deleted file mode 100644 index 381edb1..0000000 --- a/src/srvNodeMgr/tools/gameWorld/test/tools/task_data_checker.erl +++ /dev/null @@ -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. diff --git a/src/srvNodeMgr/tools/gameWorld/test/union_to_emongo.erl b/src/srvNodeMgr/tools/gameWorld/test/union_to_emongo.erl index 77405f6..75f32c4 100644 --- a/src/srvNodeMgr/tools/gameWorld/test/union_to_emongo.erl +++ b/src/srvNodeMgr/tools/gameWorld/test/union_to_emongo.erl @@ -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)). diff --git a/src/srvNodeMgr/tools_cq/tester.erl b/src/srvNodeMgr/tools_cq/tester.erl index aa25b77..ce60fed 100644 --- a/src/srvNodeMgr/tools_cq/tester.erl +++ b/src/srvNodeMgr/tools_cq/tester.erl @@ -1,5 +1,4 @@ -module(tester). --include("common.hrl"). -export([ test_online_num/1, diff --git a/src/uuidMd5/utMd5.erl b/src/uuidMd5/utMd5.erl index 84a3619..865ea3a 100644 --- a/src/uuidMd5/utMd5.erl +++ b/src/uuidMd5/utMd5.erl @@ -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) ->