From 99548fb47fee447b5f22d5338501ac574086c4fd Mon Sep 17 00:00:00 2001 From: Guillaume Melquiond Date: Wed, 15 Aug 2007 06:35:03 +0000 Subject: Added helper functions for loading files and NPCs as scripts. Put Lua helpers into a separate library automatically loaded into new contexts. --- data/test.lua | 112 ++-------------------------------------------------------- 1 file changed, 2 insertions(+), 110 deletions(-) (limited to 'data/test.lua') diff --git a/data/test.lua b/data/test.lua index f9ffb8f..28dbf0e 100644 --- a/data/test.lua +++ b/data/test.lua @@ -1,107 +1,11 @@ ------------------- --- Support code -- ------------------- - --- NOTE: Could be put into a separate library - -function create_npc(id, x, y, handler) - local npc = tmw.obj_create_npc(id, x, y) - npcs[npc] = handler -end - -function do_message(npc, ch, msg) - tmw.msg_npc_message(npc, ch, msg) - coroutine.yield(1) -end - -function do_choice(npc, ch, ...) - tmw.msg_npc_choice(npc, ch, ...) - return coroutine.yield(2) -end - --- Called whenever a player starts talking to an NPC. --- Creates a coroutine based on the register NPC handler. -function npc_start(npc, ch) - local h = npcs[npc] - if not h then return end - local co = coroutine.create(h) - local b, v = coroutine.resume(co, npc, ch) - if b and v then - states[ch] = {npc, co, v, 5} - if not timer then - timer = 600 - end - end -end - --- Called whenever a player keeps talking to an NPC. --- Checks that the NPC expects it, and resumes the respective coroutine. -function npc_next(npc, ch) - local w = states[ch] - if w and w[1] == npc and w[3] == 1 then - local b, v = coroutine.resume(w[2]) - if b and v then - w[3] = v - w[4] = 5 - else - states[ch] = nil - end - end -end - --- Called whenever a player selects a particular reply. --- Checks that the NPC expects it, and resumes the respective coroutine. -function npc_choose(npc, ch, u) - local w = states[ch] - if w and w[1] == npc and w[3] == 2 then - local b, v = coroutine.resume(w[2], u) - if b and v then - w[3] = v - w[4] = 5 - else - states[ch] = nil - end - end -end - -function npc_update(npc) -end - -function update() - -- Run every minute only, in order not to overload the server. - if not timer then return end - timer = timer - 10 - if timer ~= 0 then return end - -- Free connections that have been inactive for 3-4 minutes. - for k, w in pairs(states) do - local t = w[4] - 1 - if t == 0 then - states[k] = nil - else - w[4] = t - end - end - -- Restart timer if there are still some pending states. - if next(states) then - timer = 600 - else - timer = nil - end -end - -npcs = {} -states = {} - -------------- -- Map code -- -------------- -function initialize() +atinit(function() create_npc(110, 50 * 32 + 16, 19 * 32 + 16, my_npc1) - create_npc(107, 53 * 32 + 16, 21 * 32 + 16, my_npc2) - create_npc(107, 53 * 32 + 16, 23 * 32 + 16, my_npc3) create_npc(108, 51 * 32 + 16, 25 * 32 + 16, my_npc4) -end +end) function my_npc1(npc, ch) do_message(npc, ch, "Hello! I am the testing NPC") @@ -128,18 +32,6 @@ function my_npc1(npc, ch) end end -npc2_times = 1 - -function my_npc2(npc, ch) - do_message(npc, ch, "You know what?") - do_message(npc, ch, string.format("I have already asked this question %d times today.", npc2_times)) - npc2_times = npc2_times + 1 -end - -function my_npc3(npc, ch) - do_message(npc, ch, "Don't you think the guy behind me is my evil twin?") -end - function my_npc4(npc, ch) do_message(npc, ch, "Where do you want to go?") local v = do_choice(npc, ch, "Map 1", "Map 3") -- cgit