diff options
author | Thorbjørn Lindeijer <thorbjorn@lindeijer.nl> | 2012-03-03 20:34:57 +0100 |
---|---|---|
committer | Thorbjørn Lindeijer <thorbjorn@lindeijer.nl> | 2012-03-03 21:24:45 +0100 |
commit | b2fde0cf32348355f7725c6a7b0a523e0958c1a4 (patch) | |
tree | f12ab2fff979db589bc5a4a6de6fc7e8b4d67313 /example/scripts | |
parent | 84c87cc99be29a694f0ffe83ab7a06ae433bb0cd (diff) | |
download | manaserv-b2fde0cf32348355f7725c6a7b0a523e0958c1a4.tar.gz manaserv-b2fde0cf32348355f7725c6a7b0a523e0958c1a4.tar.bz2 manaserv-b2fde0cf32348355f7725c6a7b0a523e0958c1a4.tar.xz manaserv-b2fde0cf32348355f7725c6a7b0a523e0958c1a4.zip |
Made some global Lua variables local
We have to be careful with introducing globals now that there is only a
single Lua state, so we shouldn't use globals unnecessarily. Any variable
should be declared 'local' unless there is a reason to make it global.
For additional safety we can also think about disallowing the use of globals
entirely. This also helps to catch typos in scripts.
Reviewed-by: Erik Schilling
Diffstat (limited to 'example/scripts')
-rw-r--r-- | example/scripts/crafting.lua | 89 | ||||
-rw-r--r-- | example/scripts/special_actions.lua | 4 |
2 files changed, 46 insertions, 47 deletions
diff --git a/example/scripts/crafting.lua b/example/scripts/crafting.lua index 2200081e..db8c76dd 100644 --- a/example/scripts/crafting.lua +++ b/example/scripts/crafting.lua @@ -4,32 +4,12 @@ --]]
--- This function is called by the game engine when a character tries to craft
--- something from items in its inventory
-function on_craft(ch, recipe)
- -- ch is the crafting character
- --
- -- recipe is a table with the ingredients.
- -- it is a common 1-based array. each element of this array is a table with
- -- the two keys "id" and "amount".
- -- The engine has already checked that the character owns enough of those
- -- things, so you needn't do this again.
-
- -- uncomment one (but not both!) of the following three lines to enable the
- -- example crafting systems
-
- mana.chat_message(ch, "There is no crafting in this game world.")
- --craft_strict(ch, recipe)
- --craft_lax(ch, recipe)
-end
-
-
-- a primitive example crafting system which cares about item order and exact amount
-function craft_strict(ch, recipe)
+local function craft_strict(ch, recipe)
if (recipe[1].id == 8 and recipe[1].amount == 2 and -- has two iron
recipe[2].id == 9 and recipe[2].amount == 1) -- and one wood
then
- mana.chr_inv_change(ch,
+ mana.chr_inv_change(ch,
8, -2, --take away the iron
9, -1, --take away the wood
5, 1 ) -- give a sword
@@ -39,38 +19,20 @@ function craft_strict(ch, recipe) mana.chat_message(ch, "This wouldn't create anything useful")
end
--- a primitive example crafting system which doesn't care about item order
--- and amount. It even allows to mention the same item multiple times.
-function craft_lax(ch, recipe)
- recipe = make_condensed_and_sorted_item_list(recipe)
-
- if (recipe[1].id == 8 and recipe[1].amount >= 2 and -- has at least two iron
- recipe[2].id == 9 and recipe[2].amount >= 1) -- and at least one wood
- then
- mana.chr_inv_change(ch,
- 8, -2, -- take away the iron
- 9, -1, -- take away the wood
- 5, 1 ) -- give a sword
- mana.chat_message(ch, "You've crafted a sword")
- return
- end
- mana.chat_message(ch, "This wouldn't create anything useful")
-end
-
-- this turns multiple occurences of the same item into one by adding up
-- their amounts and sorts the recipe by item ID.
-- This makes stuff a lot easier when your crafting system isn't supposed to
-- care about the order items are in.
-function make_condensed_and_sorted_item_list(recipe)
+local function make_condensed_and_sorted_item_list(recipe)
local condensed = {}
- for index, item in pairs(recipe) do
+ for index, item in pairs(recipe) do
if condensed[item.id] == nil then
condensed[item.id] = item.amount
else
condensed[item.id] = condensed[item.id] + item.amount
end
end
-
+
local sorted = {}
for id, amount in pairs(condensed) do
local item = {}
@@ -78,12 +40,49 @@ function make_condensed_and_sorted_item_list(recipe) item.amount = amount
table.insert(sorted, item)
end
-
+
table.sort(sorted, function(item1, item2)
return (item1.id < item2.id)
end)
-
+
return sorted
end
+-- a primitive example crafting system which doesn't care about item order
+-- and amount. It even allows to mention the same item multiple times.
+local function craft_lax(ch, recipe)
+ recipe = make_condensed_and_sorted_item_list(recipe)
+
+ if (recipe[1].id == 8 and recipe[1].amount >= 2 and -- has at least two iron
+ recipe[2].id == 9 and recipe[2].amount >= 1) -- and at least one wood
+ then
+ mana.chr_inv_change(ch,
+ 8, -2, -- take away the iron
+ 9, -1, -- take away the wood
+ 5, 1 ) -- give a sword
+ mana.chat_message(ch, "You've crafted a sword")
+ return
+ end
+ mana.chat_message(ch, "This wouldn't create anything useful")
+end
+
+-- This function is registered with the game engine to use when a character
+-- tries to craft something from items in its inventory.
+local function on_craft(ch, recipe)
+ -- ch is the crafting character
+ --
+ -- recipe is a table with the ingredients.
+ -- it is a common 1-based array. each element of this array is a table with
+ -- the two keys "id" and "amount".
+ -- The engine has already checked that the character owns enough of those
+ -- things, so you needn't do this again.
+
+ -- uncomment one (but not both!) of the following three lines to enable the
+ -- example crafting systems
+
+ mana.chat_message(ch, "There is no crafting in this game world.")
+ --craft_strict(ch, recipe)
+ --craft_lax(ch, recipe)
+end
+
mana.on_craft(on_craft)
diff --git a/example/scripts/special_actions.lua b/example/scripts/special_actions.lua index 711478f2..7e42ad43 100644 --- a/example/scripts/special_actions.lua +++ b/example/scripts/special_actions.lua @@ -13,7 +13,7 @@ specialCost[1] = 50 specialCost[2] = 250 specialCost[3] = 1000 -function use_special(ch, id) +local function use_special(ch, id) -- perform whatever the special with the ID does if id == 1 then mana.being_say(ch, "Kaaame...Haaame... HAAAAAA!") @@ -26,7 +26,7 @@ function use_special(ch, id) end end -function get_special_recharge_cost(id) +local function get_special_recharge_cost(id) -- return the recharge cost for the special with the ID return specialCost[id] end |