summaryrefslogtreecommitdiff
path: root/src/scripting/lua.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/scripting/lua.cpp')
-rw-r--r--src/scripting/lua.cpp39
1 files changed, 36 insertions, 3 deletions
diff --git a/src/scripting/lua.cpp b/src/scripting/lua.cpp
index e572791e..2ea2187c 100644
--- a/src/scripting/lua.cpp
+++ b/src/scripting/lua.cpp
@@ -448,7 +448,19 @@ static int chr_inv_count(lua_State *s)
int id, nb = 0;
for (int i = 2; i <= nb_items + 1; ++i)
{
- id = luaL_checkint(s, i);
+ ItemClass *it;
+ if (lua_isnumber(s, i))
+ it = itemManager->getItem(lua_tointeger(s, i));
+ else
+ it = itemManager->getItemByName(lua_tostring(s, i));
+
+ if (!it)
+ {
+ raiseScriptError(s, "chr_inv_count called with invalid "
+ "item id or name.");
+ return 0;
+ }
+ id = it->getDatabaseID();
if (id == 0)
{
LOG_WARN("chr_inv_count called with id 0! "
@@ -537,7 +549,25 @@ static int npc_trade(lua_State *s)
for (int i = 0; i < 3; ++i)
{
lua_rawgeti(s, -1, i + 1);
- if (!lua_isnumber(s, -1))
+ if (i == 0) // item id or name
+ {
+ ItemClass *it;
+ if (lua_isnumber(s, -1))
+ it = itemManager->getItem(lua_tointeger(s, -1));
+ else
+ it = itemManager->getItemByName(lua_tostring(s, -1));
+
+ if (!it)
+ {
+ raiseWarning(s, "npc_trade called with incorrect "
+ "item id or name.");
+ t->cancel();
+ lua_pushinteger(s, 2);
+ return 1;
+ }
+ v[0] = it->getDatabaseID();
+ }
+ else if (!lua_isnumber(s, -1))
{
raiseWarning(s, "npc_trade called with incorrect parameters "
"in item table.");
@@ -545,7 +575,10 @@ static int npc_trade(lua_State *s)
lua_pushinteger(s, 2);
return 1;
}
- v[i] = lua_tointeger(s, -1);
+ else
+ {
+ v[i] = lua_tointeger(s, -1);
+ }
lua_pop(s, 1);
}
if (t->registerItem(v[0], v[1], v[2]))