--[[ file name : 技能模块第一版 author : Clark/陈泽丹 created : 2012-11-07 purpose : --]] module("测试", package.seeall) PACK_GameAPI = require"工具库_插件" PACK_Timer = require"工具库_定时器" PACK_Trace = require"工具库_调试工具" PACK_ROLE_DATA = require"数据库_角色数据" PACK_Skill_Define = require"数据库_技能声明" PACK_Skill_Example = require"中间件_技能实例" PACK_NORMAL = require"应用层_通用技能" PACK_VS = require"应用层_复仇之魂" TEST_SKILL_UID = 1 TEST_ROLE_SRC = 2 TEST_ROLE_DEST = 3 PACK_ROLE_DATA.g_skill_entity_binder.bind_index_to_buf( TEST_SKILL_UID, PACK_ROLE_DATA.new_skill_entity(TEST_ROLE_SRC, TEST_ROLE_SRC, 3, 20, 19) ) PACK_ROLE_DATA.g_role_entity_binder.bind_index_to_buf( TEST_ROLE_SRC, PACK_ROLE_DATA.new_role_entity(TEST_ROLE_SRC, TEST_ROLE_SRC, 31, 19) ) PACK_ROLE_DATA.g_role_entity_binder.bind_index_to_buf( TEST_ROLE_DEST, PACK_ROLE_DATA.new_role_entity(TEST_ROLE_DEST, TEST_ROLE_DEST, 30, 20) ) function send_evt( _tgr_id ) local t = PACK_GameAPI.get_t_set_by_v( PACK_Skill_Define.G_User_Skill_define ) local r = math.random( 1, table.getn(t) ) r = 3 print("") print("开始 " .. PACK_GameAPI.sz_T2S(PACK_ROLE_DATA.g_role_entity_binder.get_buf( TEST_ROLE_DEST ))) PACK_Skill_Example.G_skill_svr.dispatch_evt( t[r], PACK_ROLE_DATA.new_skill_relation( TEST_SKILL_UID, TEST_ROLE_SRC, { TEST_ROLE_DEST } ) ) print("结果 " .. PACK_GameAPI.sz_T2S(PACK_ROLE_DATA.g_role_entity_binder.get_buf( TEST_ROLE_DEST ))) print("") end function main() --初始化模块 PACK_Trace.open_trace(PACK_Skill_Example.SKILL_EXAMPLE_MODULE_NAME) local tm_tgr_uid = PACK_Timer.G_timer_manager.new_timer_tgr(4, send_evt) while true do PACK_Timer.G_timer_manager.on_vague_time() end end main()
--[[ file name : 技能模块第一版 author : Clark/陈泽丹 created : 2012-11-07 purpose : --]] GameAPI_MODULE_NAME = "工具库_插件" module(GameAPI_MODULE_NAME, package.seeall) function get_t_set_by_i( _t ) if nil == _t then return _t end local t = {} for i,v in pairs(_t) do t[table.getn(t) + 1] = i end return t end function get_t_set_by_v( _t ) if nil == _t then return _t end local t = {} for i,v in pairs(_t) do t[table.getn(t) + 1] = v end return t end --获得有效值 function get_valid_t( _t ) local t = {} local len = table.getn(_t) for i=1, len do if nil ~= _t[i] then t[ table.getn(t) + 1] = _t[i] end end return t end --索引管理 function new_index_manager() local t_index = {} local public = {} --创建索引 function public.create_index() for i=1, 9999999 do if nil == t_index[i] then t_index[i] = 1 return i end end myPrint("索引资源用尽", 1) return nil end --索引是否有效 function public.is_valid_index( _index ) if nil ~= t_index[_index] then return true end return false end --删除索引 function public.delete_index( _index ) t_index[_index] = nil end return public end --1:N绑定器 function new_map_for_1_and_N() local left_set = {} local right_set = {} local public = {} --绑定索引和UID( 1:N ) function public.bind_left_and_right( _left, _right ) if nil == left_set[_left] then left_set[_left] = {} end local len = table.getn(left_set[_left]) for i=1, len do if left_set[_left][i] == _right then return end end left_set[_left][table.getn(left_set[_left])+1] = _right right_set[_right] = _left end --清除绑定 function public.clear_left_and_right( _left ) local t_right = public.get_t_map_by_fb_buf_index( _left ) local len = table.getn( t_right ) for i=1, len do right_set[ t_right[i] ] = nil end left_set[_left] = nil end --清除绑定 function public.clear_right( _left, _right ) right_set[_right] = nil local t_right = left_set[_left] local len = table.getn( t_right ) for i=1, len do if t_right[i] == _right then t_right[i] = nil end end end --通过left获得rigth表 function public.get_t_right_by_left( _left ) return get_valid_t( left_set[_left] ) end --通过right获得left function public.get_left_by_right( _right ) return right_set[ _right ] end return public end --buf绑定器(用于把类的实现内容弱耦合的分拆成多个模块独立完成) function new_map_for_index_to_buf( _sign ) local index_set = {} local public = {} --获得绑定者标识 function public.get_sign() return _sign end --绑定buf function public.bind_index_to_buf( _index, _buf ) index_set[ _index ] = _buf end --清除绑定 function public.clear_index_to_buf( _index ) index_set[_index] = nil end --通过left获得rigth表 function public.get_buf( _index ) return index_set[ _index ] end return public end --常用绑定者 g_type_binder = new_map_for_index_to_buf( "type" ) function new_binder(_uid, _buf_type_binder, _buf_obj) --绑定操作类型 g_type_binder.bind_index_to_buf(_uid, _buf_type_binder.get_uid() ) --绑定操作对象 _buf_type_binder.bind_index_to_buf(_uid, _buf_obj) return _uid end function find_t_buf_by_type( _container, _index, _buf_type ) local t_right = _container.get_t_right_by_left( _index ) local ret = {} local len = table.getn( t_right ) for i=1, len do if g_type_binder.get_buf( t_right[i] ) == _buf_type then ret[ table.getn(ret) + 1] = t_right[i] end end return ret end --table转字符串 function sz_T2S(_table) local szLua = "" local t = type(_table) if t == "number" then szLua = szLua .. _table elseif t == "boolean" then szLua = szLua .. tostring(_table) elseif t == "string" then szLua = szLua .. string.format("%q", _table) elseif t == "table" then szLua = szLua .. "{" for k, v in pairs(_table) do szLua = szLua .. "[" .. sz_T2S(k) .. "]=" .. sz_T2S(v) .. "," end local metatable = getmetatable(_table) if metatable ~= nil and type(metatable.__index) == "table" then for k, v in pairs(metatable.__index) do szLua = szLua .. "[" .. sz_T2S(k) .. "]=" .. sz_T2S(v) .. "," end end szLua = szLua .. "}" elseif t == "nil" then return {} end return szLua end --提供绑定数据的函数 function clk_bind_data( t_par ) local function do_clk_bind_data() if nil == t_par then return nil end local len = table.getn( t_par ) if 0 == len then return nil elseif 1 == len then return t_par[1] elseif 2 == len then return t_par[1], t_par[2] elseif 3 == len then return t_par[1], t_par[2], t_par[3] elseif 4 == len then return t_par[1], t_par[2], t_par[3], t_par[4] elseif 5 == len then return t_par[1], t_par[2], t_par[3], t_par[4], t_par[5] elseif 6 == len then return t_par[1], t_par[2], t_par[3], t_par[4], t_par[5], t_par[6] elseif 7 == len then return t_par[1], t_par[2], t_par[3], t_par[4], t_par[5], t_par[6], t_par[7] elseif 8 == len then return t_par[1], t_par[2], t_par[3], t_par[4], t_par[5], t_par[6], t_par[7], t_par[8] elseif 9 == len then return t_par[1], t_par[2], t_par[3], t_par[4], t_par[5], t_par[6], t_par[7], t_par[8], t_par[9] elseif 10 == len then return t_par[1], t_par[2], t_par[3], t_par[4], t_par[5], t_par[6], t_par[7], t_par[8], t_par[9], t_par[10] elseif 11 == len then return t_par[1], t_par[2], t_par[3], t_par[4], t_par[5], t_par[6], t_par[7], t_par[8], t_par[9], t_par[10], t_par[11] elseif 12 == len then return t_par[1], t_par[2], t_par[3], t_par[4], t_par[5], t_par[6], t_par[7], t_par[8], t_par[9], t_par[10], t_par[11], t_par[12] elseif 13 == len then return t_par[1], t_par[2], t_par[3], t_par[4], t_par[5], t_par[6], t_par[7], t_par[8], t_par[9], t_par[10], t_par[11], t_par[12], t_par[13] else myPrint("clk_bind_data",1) -------------------------------------------------------- return nil end end return do_clk_bind_data end --提供绑定函数和相关参数的 function clk_bind_fun_data( _fun, t_par ) local function do_clk_bind_fun_data() if nil == _fun then myPrint("clk_bind_fun_data fun is nil", 1) return true end if nil == t_par then return _fun() end local len = table.getn( t_par ) if 0 == len then return _fun() elseif 1 == len then return _fun(t_par[1]) elseif 2 == len then return _fun(t_par[1], t_par[2]) elseif 3 == len then return _fun(t_par[1], t_par[2], t_par[3]) elseif 4 == len then return _fun(t_par[1], t_par[2], t_par[3], t_par[4]) elseif 5 == len then return _fun(t_par[1], t_par[2], t_par[3], t_par[4], t_par[5]) elseif 6 == len then return _fun(t_par[1], t_par[2], t_par[3], t_par[4], t_par[5], t_par[6]) elseif 7 == len then return _fun(t_par[1], t_par[2], t_par[3], t_par[4], t_par[5], t_par[6], t_par[7]) elseif 8 == len then return _fun(t_par[1], t_par[2], t_par[3], t_par[4], t_par[5], t_par[6], t_par[7], t_par[8]) elseif 9 == len then return _fun(t_par[1], t_par[2], t_par[3], t_par[4], t_par[5], t_par[6], t_par[7], t_par[8], t_par[9]) elseif 10 == len then return _fun(t_par[1], t_par[2], t_par[3], t_par[4], t_par[5], t_par[6], t_par[7], t_par[8], t_par[9], t_par[10]) elseif 11 == len then return _fun(t_par[1], t_par[2], t_par[3], t_par[4], t_par[5], t_par[6], t_par[7], t_par[8], t_par[9], t_par[10], t_par[11]) elseif 12 == len then return _fun(t_par[1], t_par[2], t_par[3], t_par[4], t_par[5], t_par[6], t_par[7], t_par[8], t_par[9], t_par[10], t_par[11], t_par[12]) elseif 13 == len then return _fun(t_par[1], t_par[2], t_par[3], t_par[4], t_par[5], t_par[6], t_par[7], t_par[8], t_par[9], t_par[10], t_par[11], t_par[12], t_par[13]) else myPrint("clk_bind_fun_data实现",1) -------------------------------------------------------- return true end end return do_clk_bind_fun_data end
--[[ file name : 技能模块第一版 author : Clark/陈泽丹 created : 2012-11-07 purpose : --]] TRACE_MODULE_NAME = "工具库_调试工具" module(TRACE_MODULE_NAME, package.seeall) PACK_EvtSvr = require"工具库_事件机" --技能服 G_trace_svr = PACK_EvtSvr.new_evt_server() --输出 function do_print_on_trace_svr() local public = PACK_EvtSvr.new_action_evt_listener() function public.on_action( _evt ) print( _evt.evt_iid, _evt.text ) end return public end trace_obj = do_print_on_trace_svr() --打开输出开关 function open_trace( _evt_iid ) G_trace_svr.action_map.add_listener( _evt_iid, trace_obj ) end --关闭输出开关 function close_trace( _evt_iid ) G_trace_svr.action_map.remove_listener( _evt_iid, trace_obj ) end --输出调试语句 function trace_text( _evt_iid, _text ) G_trace_svr.dispatch_evt( _evt_iid, { evt_iid = _evt_iid, text = _text} ) end --[[ open_trace( "fefd" ) trace_text( "fefd", "ttte4es") close_trace( "fefd" ) trace_text( "fefd", "ttte4es") --]]
--[[ file name : 技能模块第一版 author : Clark/陈泽丹 created : 2012-11-07 purpose : --]] TIMER_MODULE_NAME = "工具库_定时器" module(TIMER_MODULE_NAME, package.seeall) PACK_GameAPI = require"工具库_插件" --时间触发器管理者 function new_timer_manager() local uid_manager = PACK_GameAPI.new_index_manager() local timer_tgr_res = {} local public = {} --创建时间触发器 function public.new_timer_tgr( _time, _callback ) local uid = uid_manager.create_index() local t = { tgr_uid = uid, need_time = _time, left_time = _time, callback = _callback, } timer_tgr_res[ uid ] = t return uid end --删除时间触发器 function public.delete_timer_tgr( _uid ) timer_tgr_res[ _uid ] = nil uid_manager.delete_index( _uid ) end local sta_time = os.time() --模糊触发 function public.on_vague_time() local time_unit = 1 local cur_time = os.time() local dt = cur_time - sta_time if dt > time_unit then sta_time = cur_time local t = PACK_GameAPI.get_t_set_by_v(timer_tgr_res) local len = table.getn( t ) for i=1, len do --模糊触发 t[i].left_time = t[i].left_time - dt if t[i].left_time <= 0 then t[i].left_time = t[i].need_time t[i].callback( t[i].tgr_uid ) end end end end --精确触发 function public.on_exact_time() local time_unit = 1 local cur_time = os.time() local dt = cur_time - sta_time if dt > time_unit then sta_time = cur_time local t = PACK_GameAPI.get_t_set_by_v(timer_tgr_res) local len = table.getn( t ) for i=1, len do --精确触发 t[i].left_time = t[i].left_time - 1 if t[i].left_time <= 0 then t[i].left_time = t[i].need_time t[i].callback( t[i].tgr_uid ) end end end end return public end G_timer_manager = new_timer_manager() --若干次后自减 function on_count_self_del( _count, _fun, _t_par) local count = 0 local function do_on_count_self_del( _tgr_id ) if nil == _t_par then _fun() end local len = table.getn( _t_par ) if 0 == len then _fun() elseif 1 == len then _fun(_t_par[1]) elseif 2 == len then _fun(_t_par[1], _t_par[2]) elseif 3 == len then _fun(_t_par[1], _t_par[2], _t_par[3]) elseif 4 == len then _fun(_t_par[1], _t_par[2], _t_par[3], _t_par[4]) elseif 5 == len then _fun(_t_par[1], _t_par[2], _t_par[3], _t_par[4], _t_par[5]) elseif 6 == len then _fun(_t_par[1], _t_par[2], _t_par[3], _t_par[4], _t_par[5], _t_par[6]) elseif 7 == len then _fun(_t_par[1], _t_par[2], _t_par[3], _t_par[4], _t_par[5], _t_par[6], _t_par[7]) elseif 8 == len then _fun(_t_par[1], _t_par[2], _t_par[3], _t_par[4], _t_par[5], _t_par[6], _t_par[7], _t_par[8]) elseif 9 == len then _fun(_t_par[1], _t_par[2], _t_par[3], _t_par[4], _t_par[5], _t_par[6], _t_par[7], _t_par[8], _t_par[9]) elseif 10 == len then _fun(_t_par[1], _t_par[2], _t_par[3], _t_par[4], _t_par[5], _t_par[6], _t_par[7], _t_par[8], _t_par[9], _t_par[10]) elseif 11 == len then _fun(_t_par[1], _t_par[2], _t_par[3], _t_par[4], _t_par[5], _t_par[6], _t_par[7], _t_par[8], _t_par[9], _t_par[10], _t_par[11]) elseif 12 == len then _fun(_t_par[1], _t_par[2], _t_par[3], _t_par[4], _t_par[5], _t_par[6], _t_par[7], _t_par[8], _t_par[9], _t_par[10], _t_par[11], _t_par[12]) elseif 13 == len then _fun(_t_par[1], _t_par[2], _t_par[3], _t_par[4], _t_par[5], _t_par[6], _t_par[7], _t_par[8], _t_par[9], _t_par[10], _t_par[11], _t_par[12], _t_par[13]) else myPrint("clk_bind_fun_data实现",1) -------------------------------------------------------- end count = count + 1 if count == _count then G_timer_manager.delete_timer_tgr( _tgr_id ) end end return do_on_count_self_del end --[[ function test( _dt, _is_del ) local function do_test( _tgr_id ) print( "时间触发器在" .. _dt .. "秒后触发" ) if _is_del then G_timer_manager.delete_timer_tgr( _tgr_id ) end end return do_test end function main() --初始化模块 local tm_tgr_uid = G_timer_manager.new_timer_tgr(4, test(4, false)) local tm_tgr_uid = G_timer_manager.new_timer_tgr(1, test(1, false)) local tm_tgr_uid = G_timer_manager.new_timer_tgr(2, test(2, true)) while true do G_timer_manager.on_exact_time() end end main() --]]
--[[ file name : 技能模块第一版 author : Clark/陈泽丹 created : 2012-11-07 purpose : --]] EVTSVR_MODULE_NAME = "工具库_事件机" module(EVTSVR_MODULE_NAME, package.seeall) --查找obj位置 function find_obj_pos(_t, _p) local len = table.getn( _t ) for i=1, len do if _t[i] == _p then return i end end return nil end --否决事件监听 function new_vote_evt_listener() local public = {} function public.on_vote( _t_evt ) myPrint("未实现 new_vote_evt_listener", 1) return false end return public end --执行消息监听 function new_action_evt_listener() local public = {} function public.on_action( _t_evt ) myPrint("未实现 new_action_evt_listener", 1) end return public end --完毕消息监听 function new_response_evt_listener() local public = {} function public.on_response( _t_evt ) myPrint("未实现 new_response_evt_listener", 1) end return public end --消息处理机 function new_evt_server() local function new_event_map() local this_public = {} this_public.map = {} function this_public.add_listener(_evt_iid, _p_recv) if nil == this_public.map[_evt_iid] then this_public.map[_evt_iid] = {} end local t = this_public.map[_evt_iid] if nil == find_obj_pos(t, _p_recv) then t[ table.getn(t) + 1 ] = _p_recv end end function this_public.remove_listener(_evt_iid, _p_recv) if nil ~= this_public.map[_evt_iid] then local t = this_public.map[_evt_iid] local id = find_obj_pos(t, _p_recv) if nil ~= id then local len = table.getn(t) t[id] = t[len] t[len] = nil end if table.getn(t) <= 0 then this_public.map[_evt_iid] = nil end end end function this_public.clear() this_public.map = {} end return this_public end local public = {} public.vote_map = new_event_map() public.action_map = new_event_map() public.response_map = new_event_map() function public.clear() public.vote_map.clear() public.action_map.clear() public.response_map.clear() end function public.dispatch_evt( _evt_iid, _t_evt ) --记录当前服,用于回复消息 _t_evt.from_evt_svr = public --否决 if nil ~= public.vote_map.map[ _evt_iid ] then local t = public.vote_map.map[ _evt_iid ] local len = table.getn( t ) for i=1, len do if t[i].on_vote( _t_evt ) then return end end end --触发 if nil ~= public.action_map.map[ _evt_iid ] then local t = public.action_map.map[ _evt_iid ] local len = table.getn( t ) for i=1, len do t[i].on_action( _t_evt ) end end --完毕 if nil ~= public.response_map.map[ _evt_iid ] then local t = public.response_map.map[ _evt_iid ] local len = table.getn( t ) for i=1, len do t[i].on_response( _t_evt ) end end end return public end
--[[ file name : 技能模块第一版 author : Clark/陈泽丹 created : 2012-11-07 purpose : --]] SKILL_DEFINE_MODULE_NAME = "数据库_技能声明" module(SKILL_DEFINE_MODULE_NAME, package.seeall) --技能声明 G_User_Skill_define = {} G_User_Skill_define["普通攻击"] = "普通攻击" G_User_Skill_define["魔法箭"] = "魔法箭" G_User_Skill_define["命令光环"] = "命令光环" G_User_Skill_define["恐怖"] = "恐怖" G_User_Skill_define["移形换位"] = "移形换位"
--[[ file name : 技能模块第一版 author : Clark/陈泽丹 created : 2012-11-07 purpose : --]] ENTITY_MODULE_NAME = "数据库_角色数据" module(ENTITY_MODULE_NAME, package.seeall) PACK_GameAPI = require"工具库_插件" PACK_Trace = require"工具库_调试工具" --关系实体 function new_skill_relation( _skill_uid, _from_role_uid, _to_t_role_uid ) local public = { skill_uid = _skill_uid, from_role_uid = _from_role_uid, to_t_role_uid = _to_t_role_uid } return public end g_skill_relation_binder = PACK_GameAPI.new_map_for_index_to_buf("skill_relation") --技能实体 function new_skill_entity( _iid, _uid, _skill_lvl, _x, _y ) local public = { iid = _iid, --IID uid = _uid, --UID skill_lvl = _skill_lvl, --技能等级 } return public end g_skill_entity_binder = PACK_GameAPI.new_map_for_index_to_buf("skill_entity") --玩家实体 function new_role_entity( _iid, _uid, _x, _y ) local public = { iid = _iid, --IID uid = _uid, --UID life_max = 100, --最大生命值 life_cur = 100, --当前生命值 is_dizzy = false, --眩晕状态 dodge_pro = 20, --闪避率 ATK = 50, --攻击力 DFD = 10, --防守力 pos_x = _x, --坐标x pos_y = _y, --坐标y STATE_SIGN = {}, --状态标示 } return public end g_role_entity_binder = PACK_GameAPI.new_map_for_index_to_buf("role_entity") --常用辅助参数生成器 function fun_get_lvl_val( _lvl1_val, _lvl2_val, _lvl3_val, _lvl4_val ) local function do_fun_get_lvl_val( _skill_relation ) PACK_Trace.trace_text(ENTITY_MODULE_NAME, "fun_get_lvl_val " .. _skill_relation.skill_uid) local buf = g_skill_entity_binder.get_buf( _skill_relation.skill_uid ) if 1 == buf.skill_lvl then return _lvl1_val elseif 2 == buf.skill_lvl then return _lvl2_val elseif 3 == buf.skill_lvl then return _lvl3_val elseif 4 == buf.skill_lvl then return _lvl4_val end return 0 end return do_fun_get_lvl_val end
--[[ file name : 技能模块第一版 author : Clark/陈泽丹 created : 2012-11-07 purpose : --]] SKILL_EXAMPLE_MODULE_NAME = "中间件_技能实例" module(SKILL_EXAMPLE_MODULE_NAME, package.seeall) PACK_EvtSvr = require"工具库_事件机" PACK_GameAPI = require"工具库_插件" PACK_Timer = require"工具库_定时器" PACK_Trace = require"工具库_调试工具" PACK_ROLE_DATA = require"数据库_角色数据" PACK_Skill_Define = require"数据库_技能声明" --技能服 G_skill_svr = PACK_EvtSvr.new_evt_server() ---------------------------------------------------------------- --否决模块 function vote_module( _evt_iid, _fun_vote_do_skill_relation) local public = PACK_EvtSvr.new_vote_evt_listener() function public.on_vote( _skill_relation ) return _fun_vote_do_skill_relation(_skill_relation) end G_skill_svr.vote_map.add_listener(_evt_iid, public) return public end --执行模块 function act_module( _evt_iid, _fun_act_do_skill_relation) local public = PACK_EvtSvr.new_action_evt_listener() function public.on_action( _skill_relation ) _fun_act_do_skill_relation(_skill_relation) end G_skill_svr.action_map.add_listener(_evt_iid, public) return public end ---------------------------------------------------------------- --执行trace function do_trace_module( _evt_iid ) function act_do_skill_relation( _skill_relation ) PACK_Trace.trace_text( SKILL_EXAMPLE_MODULE_NAME, "trace 执行指令[" .. _evt_iid .. "]" ) end local public = act_module(_evt_iid, act_do_skill_relation) return public end --是否闪避 function is_dest_dodge_module( _evt_iid, _fun_get_t_role_uid ) local function vote_do_skill_relation( _skill_relation ) local t_uid = _fun_get_t_role_uid( _skill_relation ) local len = table.getn( t_uid ) for i=1, len do local buf = PACK_ROLE_DATA.g_role_entity_binder.get_buf( t_uid[i] ) local pro = math.random(1,100) if pro <= buf.dodge_pro then PACK_Trace.trace_text( SKILL_EXAMPLE_MODULE_NAME, "trace 闪避成功 " ) return true end end return false end local public = vote_module(_evt_iid, vote_do_skill_relation) return public end --执行眩晕 function do_dizzy_module( _evt_iid, _fun_get_t_role_uid, _fun_get_dizzy_time ) local function do_no_dizzy( _t_role_uid ) PACK_Trace.trace_text( SKILL_EXAMPLE_MODULE_NAME, "trace " .. PACK_GameAPI.sz_T2S(_t_role_uid) .. "解除眩晕成功 " ) end function act_do_skill_relation( _skill_relation ) local t_uid = _fun_get_t_role_uid( _skill_relation ) local val = _fun_get_dizzy_time( _skill_relation ) local len = table.getn( t_uid ) for i=1, len do local buf = PACK_ROLE_DATA.g_role_entity_binder.get_buf( t_uid[i] ) --准确的话应该用单例模式开启一个倒时间以关掉眩晕,同时实际晕的时间会取调用时间参数的并集。 --不然先打一个4S的晕,再打一个1.5s的晕,结果只算晕1.5s,那是好奇怪的 --这里先不管这些细节问题 buf.is_dizzy = true PACK_Trace.trace_text( SKILL_EXAMPLE_MODULE_NAME, "trace 异致眩晕成功, 眩晕" .. val .. "s" ) PACK_Timer.G_timer_manager.new_timer_tgr( val, PACK_Timer.on_count_self_del(1, do_no_dizzy, {t_uid}) ) end end local public = act_module(_evt_iid, act_do_skill_relation) return public end --执行伤害 function do_hurt_module( _evt_iid, _fun_get_t_role_uid, _fun_get_hurt_val ) function act_do_skill_relation( _skill_relation ) local t_uid = _fun_get_t_role_uid( _skill_relation ) local val = _fun_get_hurt_val( _skill_relation ) local len = table.getn( t_uid ) for i=1, len do local buf = PACK_ROLE_DATA.g_role_entity_binder.get_buf( t_uid[i] ) buf.life_cur = buf.life_cur - _fun_get_hurt_val( _skill_relation ) if buf.life_cur < 0 then buf.life_cur = 0 end PACK_Trace.trace_text( SKILL_EXAMPLE_MODULE_NAME, "trace 攻击成功, 击伤 " .. val .. " unit" ) end end local public = act_module(_evt_iid, act_do_skill_relation) return public end --攻击力加成 function do_add_ATK_pro_on_area_module( _evt_iid, _fun_get_t_role_uid, _fun_get_ATK_pro ) function act_do_skill_relation( _skill_relation ) local t_uid = _fun_get_t_role_uid( _skill_relation ) local val = _fun_get_ATK_pro( _skill_relation ) local len = table.getn( t_uid ) for i=1, len do local buf = PACK_ROLE_DATA.g_role_entity_binder.get_buf( t_uid[i] ) end end local public = act_module(_evt_iid, act_do_skill_relation) return public end --攻击力加成 function do_add_ATK_val_on_limit_time_module( _evt_iid, _fun_get_t_role_uid, _fun_get_ATK_val ) function act_do_skill_relation( _skill_relation ) local t_uid = _fun_get_t_role_uid( _skill_relation ) local val = _fun_get_ATK_val( _skill_relation ) local len = table.getn( t_uid ) for i=1, len do local buf = PACK_ROLE_DATA.g_role_entity_binder.get_buf( t_uid[i] ) end end local public = act_module(_evt_iid, act_do_skill_relation) return public end --防守力加成 function do_add_DFD_val_on_limit_time_module( _evt_iid, _fun_get_t_role_uid, _fun_get_DFD_val ) function act_do_skill_relation( _skill_relation ) local t_uid = _fun_get_t_role_uid( _skill_relation ) local val = _fun_get_DFD_val( _skill_relation ) local len = table.getn( t_uid ) for i=1, len do local buf = PACK_ROLE_DATA.g_role_entity_binder.get_buf( t_uid[i] ) end end local public = act_module(_evt_iid, act_do_skill_relation) return public end --换位置 function do_set_pos_module( _evt_iid, _fun_get_t_role_uid, _fun_get_pos ) function act_do_skill_relation( _skill_relation ) local t_uid = _fun_get_t_role_uid( _skill_relation ) local x,y = _fun_get_pos( _skill_relation ) local len = table.getn( t_uid ) for i=1, len do local buf = PACK_ROLE_DATA.g_role_entity_binder.get_buf( t_uid[i] ) buf.pos_x = x buf.pos_y = y PACK_Trace.trace_text( SKILL_EXAMPLE_MODULE_NAME, "trace 换位成功" ) end end local public = act_module(_evt_iid, act_do_skill_relation) return public end
--[[ file name : 技能模块第一版 author : Clark/陈泽丹 created : 2012-11-07 purpose : --]] VS_SKILL_MODULE_NAME = "应用层_复仇之魂" module(VS_SKILL_MODULE_NAME, package.seeall) PACK_GameAPI = require"工具库_插件" PACK_ROLE_DATA = require"数据库_角色数据" PACK_Skill_Define = require"数据库_技能声明" PACK_Skill_Example = require"中间件_技能实例" PACK_NORMAL = require"应用层_通用技能" --复仇之魂 VS_Skill_NPC = { --[[ 魔法箭 快捷键:C向一个敌方单位发射魔法箭,造成伤害,并晕眩1.75秒。施法距离:500冷却时间:10秒 魔法消耗:95/110/125/140点 等级 1 - 造成100点的伤害。 等级 2 - 造成175点的伤害。 等级 3 - 造成250点的伤害。 等级 4 - 造成325点的伤害。 --]] { PACK_Skill_Example.do_trace_module( PACK_Skill_Define.G_User_Skill_define["魔法箭"] ), PACK_Skill_Example.do_dizzy_module( PACK_Skill_Define.G_User_Skill_define["魔法箭"], PACK_NORMAL.fun_get_dest_role_uid, PACK_GameAPI.clk_bind_data({1.75}) ), PACK_Skill_Example.do_hurt_module( PACK_Skill_Define.G_User_Skill_define["魔法箭"], PACK_NORMAL.fun_get_dest_role_uid, PACK_ROLE_DATA.fun_get_lvl_val(100, 175, 250, 325) ), }, --[[ 命令光环 快捷键:0增加周围300范围内友方单位的基础攻击力。 等级 1 - 增加12%的基础攻击力。 等级 2 - 增加20%的基础攻击力。 等级 3 - 增加28%的基础攻击力。 等级 4 - 增加36%的基础攻击力。 --]] { PACK_Skill_Example.do_trace_module( PACK_Skill_Define.G_User_Skill_define["命令光环"] ), --PACK_Skill_Example.do_dest_ATK_module( PACK_Skill_Define.G_User_Skill_define["命令光环"], PACK_ROLE_DATA.fun_get_lvl_val(0.12, 0.20, 0.28, 0.36), 30 ), }, --[[ 恐怖 快捷键:E复仇之魂发出恶毒的吼叫,唤起周围敌方单位深深的恐惧。减少他们的护甲和攻击力,持续20秒。作用范围:700冷却时间:15秒 魔法消耗:40点 等级 1 - 减少2点的护甲和5%的攻击力。 等级 2 - 减少3点的护甲和10%的攻击力。 等级 3 - 减少4点的护甲和15%的攻击力。 等级 4 - 减少5点的护甲和20%的攻击力。 --]] { PACK_Skill_Example.do_trace_module( PACK_Skill_Define.G_User_Skill_define["恐怖"] ), --PACK_Skill_Example.do_dest_DFD_limit_time_module( PACK_Skill_Define.G_User_Skill_define["恐怖"], PACK_ROLE_DATA.fun_get_lvl_val(-2, -3, -4, -5), 20 ), --PACK_Skill_Example.do_dest_ATK_limit_time_module( PACK_Skill_Define.G_User_Skill_define["恐怖"], PACK_ROLE_DATA.fun_get_lvl_val(-0.05, -0.10, -0.15, -0.20), 20 ), }, --[[ 移形换位 快捷键:W瞬间和一个英雄交换位置。无视魔法免疫冷却时间:45秒 魔法消耗:100/150/200点 等级 1 - 施法距离600。 等级 2 - 施法距离900。 等级 3 - 施法距离1200。 --]] { PACK_Skill_Example.do_trace_module( PACK_Skill_Define.G_User_Skill_define["移形换位"] ), PACK_Skill_Example.do_set_pos_module( PACK_Skill_Define.G_User_Skill_define["移形换位"], PACK_NORMAL.fun_get_dest_role_uid, PACK_ROLE_DATA.fun_get_lvl_val(6, 9, 12, 0) ), }, }
--[[ file name : 技能模块第一版 author : Clark/陈泽丹 created : 2012-11-07 purpose : --]] NORMAL_SKILL_EXAMPLE_MODULE_NAME = "应用层_通用技能" module(NORMAL_SKILL_EXAMPLE_MODULE_NAME, package.seeall) PACK_GameAPI = require"工具库_插件" PACK_ROLE_DATA = require"数据库_角色数据" PACK_Skill_Define = require"数据库_技能声明" PACK_Skill_Example = require"中间件_技能实例" --获得目标人群 function fun_get_src_role_uid( _skill_relation ) return _skill_relation.from_role_uid end function fun_get_dest_role_uid( _skill_relation ) return _skill_relation.to_t_role_uid end function fun_get_src_role_pos( _skill_relation ) end function get_src_pos() end --获得攻击力 function fun_get_role_ATK( _skill_relation ) local buf = PACK_ROLE_DATA.g_role_entity_binder.get_buf( _skill_relation.from_role_uid ) return buf.ATK end --通用技能 G_General_SKILL = { { PACK_Skill_Example.is_dest_dodge_module( PACK_Skill_Define.G_User_Skill_define["普通攻击"], fun_get_dest_role_uid ), PACK_Skill_Example.do_trace_module( PACK_Skill_Define.G_User_Skill_define["普通攻击"] ), --do_dest_hurt_module( PACK_Skill_Define.G_User_Skill_define["普通攻击"], fun_get_role_ATK ), }, }