summaryrefslogtreecommitdiffstats
path: root/data/test.lua
diff options
context:
space:
mode:
authorGuillaume Melquiond <guillaume.melquiond@gmail.com>2007-08-15 06:35:03 +0000
committerGuillaume Melquiond <guillaume.melquiond@gmail.com>2007-08-15 06:35:03 +0000
commit99548fb47fee447b5f22d5338501ac574086c4fd (patch)
treefcef60aed6d7d0f04437249815af36c25461c5dd /data/test.lua
parent2fa455ff7870dc09d75bb89a897c7c1d26eb9020 (diff)
Added helper functions for loading files and NPCs as scripts. Put Lua helpers into a separate library automatically loaded into new contexts.
Diffstat (limited to 'data/test.lua')
-rw-r--r--data/test.lua112
1 files changed, 2 insertions, 110 deletions
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")