--[[
文件名 : 指令机.lua
作者 : 陈泽丹
创建时间: 2013-1-22
描述 :
--]]
-- ------------------------------------
-- 指令机
-- 1,通过指令集让不断纵向深入的回调函数以一种横向的方式组装
-- 2, 通过运行时再绑定宿主的方式解决了指令机和指令之间“先有鸡还是先有蛋”的问题
-- (如果不是运行绑定,则指令得预先绑定宿主,那还得解决宿主不在时,指令的野索引等内存问题,不好。
-- 内存分配在运行时绑定的方式下迎刃而解)
-- ------------------------------------
function CmdMachine()
local public = {}
local cmds = {}
local pos_start = 0
local pos_end = 0
function public.push( _fun )
local fun = _fun or function( _cmd_machine )
return true
end
pos_end = pos_end + 1
cmds[ pos_end ] = _fun
end
function public.pop()
if pos_start < pos_end then
pos_start = pos_start + 1
local fun = cmds[ pos_start ]
cmds[ pos_start ] = nil
return fun
end
return nil
end
--run时才进行函数与宿主的绑定再触发(没运行到的没必要预先绑定)
function public.run()
local cmd = public.pop()
while nil ~= cmd and true == cmd( public ) do
cmd = public.pop()
end
end
return public
end
-- ------------------------------------
-- 访问NPC
-- ------------------------------------
function htmltxt_VisitNPC( _npc_name, _evt)
local public = {}
function public.getEvt()
return _evt
end
function public.getHtmlTxt( _task )
return Lua_createHtmlTxt( "任务回复", "#FFFFFF", 12 ) .. Lua_createHtmlTxt( _npc_name .. " ", "#00FF00", 12, _evt, true )
end
return public
end
-- ------------------------------------
-- 击杀怪物
-- ------------------------------------
function htmltxt_KillMonster( _sub_key, _npc_name, _max, _evt )
local public = {}
function public.getEvt()
return _evt
end
function public.getHtmlTxt( _task )
local sz1 = Lua_createHtmlTxt( "击杀 ", "#FFFFFF", 12 )
local sz2 = Lua_createHtmlTxt( _npc_name .. " ", "#00FF00", 12, _evt, true )
local var_par = getDictionary( encode_TaskVariate( _task ) )
local sz3 = nil
if IsDeliverTask(_task) or IsCompleteTask(_task) then
sz3 = Lua_createHtmlTxt( "(" .. _max .. "/" .. _max .. ")", "#FF0000", 12 )
elseif nil ~= var_par and nil ~= var_par[ _sub_key ] then
if G_KILL_MONSTER_COMPLATE == var_par[ _sub_key ] then
sz3 = Lua_createHtmlTxt( "(" .. _max .. "/" .. _max .. ")", "#FF0000", 12 )
else
sz3 = Lua_createHtmlTxt( "(" .. var_par[ _sub_key ] .. "/" .. _max .. ")", "#FF0000", 12 )
end
else
sz3 = Lua_createHtmlTxt( "(" .. 0 .. "/" .. _max .. ")", "#FF0000", 12 )
end
return sz1 .. sz2 .. sz3
end
return public
end