diff options
author | Thorbjørn Lindeijer <thorbjorn@lindeijer.nl> | 2012-03-03 20:44:01 +0100 |
---|---|---|
committer | Thorbjørn Lindeijer <thorbjorn@lindeijer.nl> | 2012-03-03 21:24:45 +0100 |
commit | 72881e2a713a29fc7eaaa1d7159129e0e4f9867f (patch) | |
tree | 215bd8fe753cc59ba39383d9d03509b4a1768245 /src/scripting/luautil.cpp | |
parent | b2fde0cf32348355f7725c6a7b0a523e0958c1a4 (diff) | |
download | manaserv-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.cpp | 76 |
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); |