---------------------------------------------------------- -- Library for commonly used NPC scripts -- -- -- -- -- -- Any NPC update function or talk function which could -- -- be used for NPCs on more than one map should be -- -- placed here. -- -- -- ---------------------------------------------------------------------------------- -- Copyright 2008 The Mana World Development Team -- -- -- -- This file is part of The Mana Server. -- -- -- -- The Mana Server is free software; you can redistribute it and/or modify it -- -- under the terms of the GNU General Public License as published by the Free -- -- Software Foundation; either version 2 of the License, or any later version. -- ---------------------------------------------------------------------------------- module("npclib", package.seeall); -- Update function walkaround_small -- makes the NPC walk around in a 64x64 pixel square around its start location. -- Useful for NPCs which are supposed to stay on a specific spot but -- move a bit from time to time. local wasmall_timer = {} local wasmall_startx = {} local wasmall_starty = {} function walkaround_small(npc) if not wasmall_timer[npc] then wasmall_timer[npc] = 1 wasmall_startx[npc], wasmall_starty[npc] = npc:position() end wasmall_timer[npc] = wasmall_timer[npc] + 1 if wasmall_timer[npc] == 100 then wasmall_timer[npc] = math.random(1, 10) local x = math.random(-32, 32) + wasmall_startx[npc] local y = math.random(-32, 32) + wasmall_starty[npc] npc:walk(x, y, 2) end end -- Update function walkaround_wide -- makes the NPC walk around in a 256x256 pixel square around its start -- location. Useful for NPCs which are supposed to be found near a specific -- location but not nailed to the floor. local wawide_timer = {} local wawide_startx = {} local wawide_starty = {} function walkaround_wide(npc) if not wawide_timer[npc] then wawide_timer[npc] = 1 wawide_startx[npc], wawide_starty[npc] = npc:position() end wawide_timer[npc] = wawide_timer[npc] + 1 if wawide_timer[npc] == 50 then wawide_timer[npc] = math.random(1, 10) local x = math.random(-128, 128) + wawide_startx[npc] local y = math.random(-128, 128) + wawide_starty[npc] npc:walk(x, y, 2) end end -- Update function walkaround_map -- makes the NPC wander around the whole map. Useful when the players are -- supposed to search a bit for the NPC. local wam_timer = {} function walkaround_map(npc) if not wam_timer[npc] then wam_timer[npc] = 1 end wam_timer[npc] = wam_timer[npc] + 1 if wam_timer[npc] == 50 then wam_timer[npc] = math.random(1, 10) local x = math.random(-128, 128) + npc:x() local y = math.random(-128, 128) + npc:y() npc:walk(x, y, 2) end end -- Allows passage of more information to an NPC's talk function function talk(f, ...) local a = {...} return function(npc, ch) f(npc, ch, a) end end