石器服务端NPC循环事件Loop讲解

  在石器时代LUA以往的教学里,循环事件我都是利用了NetLoopFunction来讲解案例等,NetLoopFunction是针对全局来循环,咱们可以理解为整个石器时代游戏系统的循环,他不需要任何索引进行循环,但有个不便之处就是这个内置的循环是按照分钟来进行计算。也就是每分钟才执行一次,但有时候我们需要精确到秒的时候,比如咱们需要一个按秒倒计时的功能,这个NetLoopFunction函数就没办法了。因为咱们需要一个用秒来计算的函数。

  在石器代码里有系统循环和NPC/人物循环两种,我在之前某代码ABLUA循环事件BUG有提到这个循环,这个NPC/人物循环正是我今天要讲到的。这里我会通过LUA脚本代码的方式来讲述这个循环事件。

参考代码:

--循环函数
function Loop(meindex)
    --循环可执行的代码,以秒为单位
end

function Create(name, metamo, floor, x, y, dir)
    npcindex = npc.CreateNpc(name, metamo, floor, x, y, dir)
    char.setFunctionPointer(npcindex, "循环事件", "Loop", "")
end

function main()
	Create("循环测试", 43651, 777, 17, 17, 7)
end

咱们可以从代码上看到在Create函数里给NPC增加了函数事件,而Loop正是这个函数,注意在Create函数里循环事件后面的那个Loop是对应上面的Loop(meindex),其中meindex表示的是这个NPC的索引。

然后Loop这个函数就跟NetLoopFunction功能是一样的了,只不过是按照秒的单位来计算,下面我们写一个简单的计时进行说话的功能。

--循环函数
function Loop(meindex)
    --循环可执行的代码,以秒为单位
	--当looptimer累计值达到60和以上时则开始执行说话功能
	if looptimer >= 60 then
		--对着服务器全员进行说话
		char.talkToServer(-1, "欢迎来到石器发布网,这里是石器的牧羊人", "紫色")
		--执行完毕后让looptimer归0后可以继续累计计算值
		looptimer = 0
	end
	--下面这句的意思是每执行一次,looptimer这个值就累计+1
	looptimer = looptimer + 1
end


function data()
    --定义一个变量,让它通过Loop来计算数字,初始化为0
	looptimer = 0
end


function Create(name, metamo, floor, x, y, dir)
	npcindex = npc.CreateNpc(name, metamo, floor, x, y, dir)
	char.setFunctionPointer(npcindex, "循环事件", "Loop", "")
end

function main()
	data()
	Create("循环测试", 43651, 777, 17, 17, 7)
end

  通过代码咱们可以看到利用NPC的循环函数可以以秒单位来进行循环事件,也是非常方便的。这里运用到的计时变量是让计时变量达到判断的数值归0后再继续循环累计数值,其实也可以利用摩尔求余的方式进行计算,这里就不多讲,以后的教学里将会提到。

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。