summaryrefslogtreecommitdiff
path: root/data/scripts
diff options
context:
space:
mode:
authorRoderic Morris <roderic@ccs.neu.edu>2008-10-21 21:51:29 +0000
committerRoderic Morris <roderic@ccs.neu.edu>2008-10-21 21:51:29 +0000
commit8eefca6ea575d6b55a0ad493ce7f7aa3f9c88f5e (patch)
tree5083cbf00e7d5bdc797e14c4ddf24644c3a45d5a /data/scripts
parentee68245b1ff2af84f749c14841462328db9ed432 (diff)
downloadmanaserv-8eefca6ea575d6b55a0ad493ce7f7aa3f9c88f5e.tar.gz
manaserv-8eefca6ea575d6b55a0ad493ce7f7aa3f9c88f5e.tar.bz2
manaserv-8eefca6ea575d6b55a0ad493ce7f7aa3f9c88f5e.tar.xz
manaserv-8eefca6ea575d6b55a0ad493ce7f7aa3f9c88f5e.zip
move all scripts to scripts directory for content conversion
Diffstat (limited to 'data/scripts')
-rw-r--r--data/scripts/libs/libtmw.lua (renamed from data/scripts/libtmw.lua)0
-rw-r--r--data/scripts/libs/npclib.lua (renamed from data/scripts/npclib.lua)188
-rw-r--r--data/scripts/test.lua183
3 files changed, 277 insertions, 94 deletions
diff --git a/data/scripts/libtmw.lua b/data/scripts/libs/libtmw.lua
index 5b1792f9..5b1792f9 100644
--- a/data/scripts/libtmw.lua
+++ b/data/scripts/libs/libtmw.lua
diff --git a/data/scripts/npclib.lua b/data/scripts/libs/npclib.lua
index 95857e4f..e85ddc56 100644
--- a/data/scripts/npclib.lua
+++ b/data/scripts/libs/npclib.lua
@@ -1,95 +1,95 @@
-----------------------------------------------------------
--- 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 World. --
--- --
--- The Mana World 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] = tmw.posX(npc)
- wasmall_starty[npc] = tmw.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]
- tmw.being_walk(npc, x, y, 500)
- 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] = tmw.posX(npc)
- wawide_starty[npc] = tmw.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]
- tmw.being_walk(npc, x, y, 500)
- 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) + tmw.posX(npc)
- local y = math.random(-128, 128) + tmw.posY(npc)
- tmw.being_walk(npc, x, y, 500)
- end
+----------------------------------------------------------
+-- 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 World. --
+-- --
+-- The Mana World 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] = tmw.posX(npc)
+ wasmall_starty[npc] = tmw.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]
+ tmw.being_walk(npc, x, y, 500)
+ 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] = tmw.posX(npc)
+ wawide_starty[npc] = tmw.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]
+ tmw.being_walk(npc, x, y, 500)
+ 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) + tmw.posX(npc)
+ local y = math.random(-128, 128) + tmw.posY(npc)
+ tmw.being_walk(npc, x, y, 500)
+ end
end \ No newline at end of file
diff --git a/data/scripts/test.lua b/data/scripts/test.lua
new file mode 100644
index 00000000..4dcb9eb6
--- /dev/null
+++ b/data/scripts/test.lua
@@ -0,0 +1,183 @@
+----------------------------------------------------------
+-- Test Scripts --
+-- --
+-- Provisorical NPC scripts currently included on map --
+-- new_1-1.tmx for demonstrating and testing variouse --
+-- features of the scripting engine. --
+-- --
+----------------------------------------------------------------------------------
+-- Copyright 2008 The Mana World Development Team --
+-- --
+-- This file is part of The Mana World. --
+-- --
+-- The Mana World 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. --
+----------------------------------------------------------------------------------
+
+require "data/scripts/libs/npclib"
+
+atinit(function()
+ create_npc("Test NPC", 200, 50 * TILESIZE + 16, 19 * TILESIZE + 16, npc1_talk, npclib.walkaround_small)
+ create_npc("Teleporter", 201, 51 * TILESIZE + 16, 25 * TILESIZE + 16, npc4_talk, npclib.walkaround_wide)
+ create_npc("Scorpion Tamer", 126, 45 * TILESIZE + 16, 25 * TILESIZE + 16, npc5_talk, nil)
+ create_npc("Guard", 122, 58 * TILESIZE + 16, 15 * TILESIZE + 16, npc6_talk, npc6_update)
+ create_npc("Fire Demon", 202, 58 * TILESIZE + 16, 35 * TILESIZE + 16, firedemon_talk, firedemon_update)
+
+ tmw.trigger_create(56 * TILESIZE, 32 * TILESIZE, 64, 64, "patrol_waypoint", 1, true)
+ tmw.trigger_create(63 * TILESIZE, 32 * TILESIZE, 64, 64, "patrol_waypoint", 2, true)
+
+ schedule_every(1 * HOURS + 30 * MINUTES, function()
+ print("One and a half hour has passed on map 1-1")
+ end)
+end)
+
+
+function patrol_waypoint(obj, id)
+ if (id == 1) then
+ tmw.chatmessage(obj, "you've reached patrol point 1")
+ tmw.being_say(obj, "I have reached patrol point 1")
+ end
+ if (id == 2) then
+ tmw.chatmessage(obj, "you've reached patrol point 2")
+ tmw.being_say(obj, "I have reached patrol point 2")
+ end
+end
+
+
+function npc1_talk(npc, ch)
+ do_message(npc, ch, "Hello! I am the testing NPC.")
+ do_message(npc, ch, "This message is just here for testing intertwined connections.")
+ do_message(npc, ch, "What do you want?")
+ local v = do_choice(npc, ch, "Guns! Lots of guns!",
+ "A Christmas party!",
+ "To buy.",
+ "To sell.",
+ "To make a donation.",
+ "Slowly count from one to ten.")
+ if v == 1 then
+ do_message(npc, ch, "Sorry, this is a heroic-fantasy game, I do not have any gun.")
+ elseif v == 2 then
+ local n1, n2 = tmw.chr_inv_count(ch, 524, 511)
+ if n1 == 0 or n2 ~= 0 then
+ do_message(npc, ch, "Yeah right...")
+ else
+ do_message(npc, ch, "I can't help you with the party. But I see you have a fancy hat. I could change it into Santa's hat. Not much of a party, but it would get you going.")
+ v = do_choice(npc, ch, "Please do.", "No way! Fancy hats are classier.")
+ if v == 1 then
+ tmw.chr_inv_change(ch, 524, -1, 511, 1)
+ end
+ end
+ elseif v == 3 then
+ tmw.npc_trade(npc, ch, false, { {533, 10, 20}, {535, 10, 30}, {537, 10, 50} })
+ elseif v == 4 then
+ tmw.npc_trade(npc, ch, true, { {511, 10, 200}, {524, 10, 300}, {508, 10, 500}, {537, 10, 25} })
+ elseif v == 5 then
+ if tmw.chr_money_change(ch, -100) then
+ do_message(npc, ch, string.format("Thank you for you patronage! You are left with %d gil.", tmw.chr_money(ch)))
+ local g = tonumber(get_quest_var(ch, "001_donation"))
+ if not g then g = 0 end
+ g = g + 100
+ tmw.chr_set_quest(ch, "001_donation", g)
+ do_message(npc, ch, string.format("As of today, you have donated %d gil.", g))
+ else
+ do_message(npc, ch, "I would feel bad taking money from someone that poor.")
+ end
+ elseif v == 6 then
+ tmw.being_say(npc, "As you wish...")
+ schedule_in(2, function() tmw.being_say(npc, "One") end)
+ schedule_in(4, function() tmw.being_say(npc, "Two") end)
+ schedule_in(6, function() tmw.being_say(npc, "Three") end)
+ schedule_in(8, function() tmw.being_say(npc, "Four") end)
+ schedule_in(10, function() tmw.being_say(npc, "Five") end)
+ schedule_in(12, function() tmw.being_say(npc, "Six") end)
+ schedule_in(14, function() tmw.being_say(npc, "Seven") end)
+ schedule_in(16, function() tmw.being_say(npc, "Eight") end)
+ schedule_in(18, function() tmw.being_say(npc, "Nine") end)
+ schedule_in(20, function() tmw.being_say(npc, "Ten") end)
+ end
+end
+
+function npc4_talk(npc, ch)
+ do_message(npc, ch, "Where do you want to go?")
+ local v = do_choice(npc, ch, "Map 1", "Map 3")
+ if v >= 1 and v <= 2 then
+ do_message(npc, ch, "Are you really sure?")
+ local w = do_choice(npc, ch, "Yes, I am.", "I still have a few things to do around here.")
+ if w == 1 then
+ if v == 1 then
+ tmw.chr_warp(ch, nil, 60 * TILESIZE, 50 * TILESIZE)
+ else
+ tmw.chr_warp(ch, 3, 25 * TILESIZE, 25 * TILESIZE)
+ end
+ end
+ end
+end
+
+function npc5_talk(npc, ch)
+ do_message(npc, ch, "I am the scorpion tamer. Do you want me to spawn some scorpions?")
+ local answer = do_choice(npc, ch, "Yes", "No");
+ if answer == 1 then
+ local x = tmw.posX(npc)
+ local y = tmw.posY(npc)
+ m1 = tmw.monster_create(1, x + TILESIZE, y + TILESIZE)
+ m2 = tmw.monster_create(1, x - TILESIZE, y + TILESIZE)
+ m3 = tmw.monster_create(1, x + TILESIZE, y - TILESIZE)
+ m4 = tmw.monster_create(1, x - TILESIZE, y - TILESIZE)
+
+ on_death(m1, function() tmw.being_say(npc, "NOOO!") end)
+ on_death(m2, function() tmw.being_say(npc, "Please stop this violence!") end)
+ on_death(m3, function() tmw.being_say(npc, "Stop slaughtering my scorpions!") end)
+ on_death(m4, function() tmw.being_say(npc, "Leave my scorpions alone!") end)
+ on_death(m4, function() tmw.being_say(m4, "AAARGH!") end)
+
+ end
+end
+
+local guard_position = 1
+
+function npc6_talk(npc, ch)
+
+ if guard_position == 1 then
+ tmw.being_walk(npc, 61 * TILESIZE + 16, 15 * TILESIZE + 16, 400)
+ guard_position = 2
+ else
+ tmw.being_walk(npc, 55 * TILESIZE + 16, 15 * TILESIZE + 16, 400)
+ guard_position = 1
+ end
+end
+
+function npc6_update(npc)
+ local r = math.random(0, 100)
+ if (r == 0) then
+ tmw.being_say(npc, "*humhumhum*")
+ end
+ if (r == 1) then
+ tmw.being_say(npc, "guarding the city gate is so much fun *sigh*")
+ end
+ if (r == 2) then
+ tmw.being_say(npc, "can't someone order me to walk to the other side of the gate?")
+ end
+end
+
+
+function firedemon_talk(npc, ch)
+ do_message(npc, ch, "Burn, puny mortals! BURN! BUUUURN!!!")
+end
+
+local firedemon_timer = 0;
+
+function firedemon_update(npc)
+ firedemon_timer = firedemon_timer + 1
+ if (firedemon_timer == 5) then
+ firedemon_timer = 0
+ local victims = tmw.get_beings_in_circle(tmw.posX(npc), tmw.posY(npc), 64)
+ local i = 1;
+ while (victims[i]) do
+ tmw.being_damage(victims[i], 20, 10, 32000, DAMAGE_MAGICAL, ELEMENT_FIRE)
+ i = i + 1
+ end
+ end
+
+ npclib.walkaround_map(npc)
+end