一个漂亮的指令机

本文介绍了一种基于Lua实现的任务指令处理机制,通过横向组装回调函数改进了任务流程管理。此外,还展示了如何利用该机制处理游戏中的NPC交互与怪物击杀任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

--[[
文件名	: 	指令机.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


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值