summaryrefslogtreecommitdiffstats
path: root/scripts/lua/npclib.lua
blob: 9edfcbd9659e0daa9b8f5cc3a517543f7f7fd3cd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
----------------------------------------------------------
-- 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] = mana.posX(npc)
    wasmall_starty[npc] = mana.posY(npc)
  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]
    mana.being_walk(npc, 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] = mana.posX(npc)
    wawide_starty[npc] = mana.posY(npc)
  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]
    mana.being_walk(npc, 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) + mana.posX(npc)
    local y = math.random(-128, 128) + mana.posY(npc)
    mana.being_walk(npc, 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