summaryrefslogtreecommitdiff
path: root/src/scripting/luautil.cpp
diff options
context:
space:
mode:
authorThorbjørn Lindeijer <thorbjorn@lindeijer.nl>2012-03-03 20:44:01 +0100
committerThorbjørn Lindeijer <thorbjorn@lindeijer.nl>2012-03-03 21:24:45 +0100
commit72881e2a713a29fc7eaaa1d7159129e0e4f9867f (patch)
tree215bd8fe753cc59ba39383d9d03509b4a1768245 /src/scripting/luautil.cpp
parentb2fde0cf32348355f7725c6a7b0a523e0958c1a4 (diff)
downloadmanaserv-72881e2a713a29fc7eaaa1d7159129e0e4f9867f.tar.gz
manaserv-72881e2a713a29fc7eaaa1d7159129e0e4f9867f.tar.bz2
manaserv-72881e2a713a29fc7eaaa1d7159129e0e4f9867f.tar.xz
manaserv-72881e2a713a29fc7eaaa1d7159129e0e4f9867f.zip
Improved handling of item and monster class parameters
Item and monster classes could already be identified by either their id or their name. Now the explicit values returned by 'get_item_class' and 'get_monster_class' can also be used as parameter. In addition the above two getters learned to understand all three types of parameter as well, rather than only supporting a name. Reviewed-by: Erik Schilling
Diffstat (limited to 'src/scripting/luautil.cpp')
-rw-r--r--src/scripting/luautil.cpp76
1 files changed, 69 insertions, 7 deletions
diff --git a/src/scripting/luautil.cpp b/src/scripting/luautil.cpp
index 7580ac21..e4260a5c 100644
--- a/src/scripting/luautil.cpp
+++ b/src/scripting/luautil.cpp
@@ -22,8 +22,10 @@
#include "luautil.h"
#include "game-server/character.h"
-#include "game-server/npc.h"
+#include "game-server/itemmanager.h"
#include "game-server/monster.h"
+#include "game-server/monstermanager.h"
+#include "game-server/npc.h"
#include "utils/logger.h"
@@ -118,14 +120,12 @@ void UserDataCache::insert(lua_State *s, void *object)
valid in the map.
TODO: do it. */
-NPC *getNPC(lua_State *s, int p)
+Being *getBeing(lua_State *s, int p)
{
if (!lua_islightuserdata(s, p))
return 0;
Thing *t = static_cast<Thing *>(lua_touserdata(s, p));
- if (t->getType() != OBJECT_NPC)
- return 0;
- return static_cast<NPC *>(t);
+ return static_cast<Being *>(t);
}
Character *getCharacter(lua_State *s, int p)
@@ -138,6 +138,26 @@ Character *getCharacter(lua_State *s, int p)
return static_cast<Character *>(t);
}
+ItemClass *getItemClass(lua_State *s, int p)
+{
+ ItemClass *itemClass = 0;
+
+ switch (lua_type(s, p))
+ {
+ case LUA_TNUMBER:
+ itemClass = itemManager->getItem(lua_tointeger(s, p));
+ break;
+ case LUA_TSTRING:
+ itemClass = itemManager->getItemByName(lua_tostring(s, p));
+ break;
+ case LUA_TUSERDATA:
+ itemClass = LuaItemClass::check(s, p);
+ break;
+ }
+
+ return itemClass;
+}
+
Monster *getMonster(lua_State *s, int p)
{
if (!lua_islightuserdata(s, p))
@@ -148,14 +168,56 @@ Monster *getMonster(lua_State *s, int p)
return static_cast<Monster *>(t);
}
-Being *getBeing(lua_State *s, int p)
+MonsterClass *getMonsterClass(lua_State *s, int p)
+{
+ MonsterClass *monsterClass = 0;
+
+ switch (lua_type(s, p))
+ {
+ case LUA_TNUMBER:
+ monsterClass = monsterManager->getMonster(lua_tointeger(s, p));
+ break;
+ case LUA_TSTRING:
+ monsterClass = monsterManager->getMonsterByName(lua_tostring(s, p));
+ break;
+ case LUA_TUSERDATA:
+ monsterClass = LuaMonsterClass::check(s, p);
+ break;
+ }
+
+ return monsterClass;
+}
+
+NPC *getNPC(lua_State *s, int p)
{
if (!lua_islightuserdata(s, p))
return 0;
Thing *t = static_cast<Thing *>(lua_touserdata(s, p));
- return static_cast<Being *>(t);
+ if (t->getType() != OBJECT_NPC)
+ return 0;
+ return static_cast<NPC *>(t);
}
+
+ItemClass *checkItemClass(lua_State *s, int p)
+{
+ ItemClass *itemClass = getItemClass(s, p);
+ if (!itemClass)
+ luaL_argerror(s, p, "invalid item type parameter");
+
+ return itemClass;
+}
+
+MonsterClass *checkMonsterClass(lua_State *s, int p)
+{
+ MonsterClass *monsterClass = getMonsterClass(s, p);
+ if (!monsterClass)
+ luaL_argerror(s, p, "invalid monster type parameter");
+
+ return monsterClass;
+}
+
+
void push(lua_State *s, int val)
{
lua_pushinteger(s, val);