diff options
Diffstat (limited to 'src/scripting')
-rw-r--r-- | src/scripting/lua.cpp | 10 | ||||
-rw-r--r-- | src/scripting/luautil.cpp | 12 | ||||
-rw-r--r-- | src/scripting/luautil.h | 26 |
3 files changed, 31 insertions, 17 deletions
diff --git a/src/scripting/lua.cpp b/src/scripting/lua.cpp index 6d1adb74..a76c9399 100644 --- a/src/scripting/lua.cpp +++ b/src/scripting/lua.cpp @@ -1727,7 +1727,7 @@ static int entity_get_y(lua_State *s) static int entity_get_base_attribute(lua_State *s) { Entity *being = checkBeing(s, 1); - int attr = luaL_checkint(s, 2); + int attr = checkAttribute(s, 2)->id; luaL_argcheck(s, attr > 0, 2, "invalid attribute id"); lua_pushinteger(s, being->getComponent<BeingComponent>()->getAttributeBase(attr)); @@ -1745,7 +1745,7 @@ static int entity_get_base_attribute(lua_State *s) static int entity_set_base_attribute(lua_State *s) { Entity *being = checkBeing(s, 1); - int attr = luaL_checkint(s, 2); + int attr = checkAttribute(s, 2)->id; double value = luaL_checknumber(s, 3); being->getComponent<BeingComponent>()->setAttribute(*being, attr, value); @@ -1775,7 +1775,7 @@ static int entity_set_base_attribute(lua_State *s) static int entity_get_modified_attribute(lua_State *s) { Entity *being = checkBeing(s, 1); - int attr = luaL_checkint(s, 2); + int attr = checkAttribute(s, 2)->id; luaL_argcheck(s, attr > 0, 2, "invalid attribute id"); const double value = @@ -1805,7 +1805,7 @@ static int entity_get_modified_attribute(lua_State *s) static int entity_apply_attribute_modifier(lua_State *s) { Entity *being = checkBeing(s, 1); - int attr = luaL_checkint(s,2); + int attr = checkAttribute(s, 2)->id; double value = luaL_checknumber(s, 3); int layer = luaL_checkint(s, 4); int duration = luaL_optint(s, 5, 0); @@ -1828,7 +1828,7 @@ static int entity_apply_attribute_modifier(lua_State *s) static int entity_remove_attribute_modifier(lua_State *s) { Entity *being = checkBeing(s, 1); - int attr = luaL_checkint(s, 2); + int attr = checkAttribute(s, 2)->id; double value = luaL_checknumber(s, 3); int layer = luaL_checkint(s, 4); int effectId = luaL_optint(s, 5, 0); diff --git a/src/scripting/luautil.cpp b/src/scripting/luautil.cpp index 7dd2b199..8d166469 100644 --- a/src/scripting/luautil.cpp +++ b/src/scripting/luautil.cpp @@ -237,6 +237,18 @@ AbilityManager::AbilityInfo *checkAbility(lua_State *s, int p) return abilityInfo; } +const AttributeManager::AttributeInfo *checkAttribute(lua_State *s, int p) +{ + const AttributeManager::AttributeInfo *attributeInfo; + if (lua_isnumber(s, p)) + attributeInfo = attributeManager->getAttributeInfo(luaL_checkint(s, p)); + else + attributeInfo = attributeManager->getAttributeInfo(luaL_checkstring(s, p)); + + luaL_argcheck(s, attributeInfo != nullptr, p, "invalid attribute"); + return attributeInfo; +} + unsigned char checkWalkMask(lua_State *s, int p) { const char *stringMask = luaL_checkstring(s, p); diff --git a/src/scripting/luautil.h b/src/scripting/luautil.h index c747d2a1..fc198310 100644 --- a/src/scripting/luautil.h +++ b/src/scripting/luautil.h @@ -35,6 +35,7 @@ extern "C" { #include <vector> #include "game-server/abilitymanager.h" +#include "game-server/attributemanager.h" class CharacterComponent; class Entity; @@ -165,21 +166,22 @@ typedef LuaUserData<MonsterClass> LuaMonsterClass; typedef LuaUserData<StatusEffect> LuaStatusEffect; typedef LuaUserData<AbilityManager::AbilityInfo> LuaAbilityInfo; -Script * getScript(lua_State *s); +Script * getScript(lua_State *s); -ItemClass * getItemClass(lua_State *s, int p); -MonsterClass * getMonsterClass(lua_State *s, int p); +ItemClass * getItemClass(lua_State *s, int p); +MonsterClass * getMonsterClass(lua_State *s, int p); -Entity * checkActor(lua_State *s, int p); -Entity * checkBeing(lua_State *s, int p); -Entity * checkCharacter(lua_State *s, int p); -ItemClass * checkItemClass(lua_State *s, int p); -Entity * checkMonster(lua_State *s, int p); -MonsterClass * checkMonsterClass(lua_State *s, int p); -Entity * checkNpc(lua_State *s, int p); +Entity * checkActor(lua_State *s, int p); +Entity * checkBeing(lua_State *s, int p); +Entity * checkCharacter(lua_State *s, int p); +ItemClass * checkItemClass(lua_State *s, int p); +Entity * checkMonster(lua_State *s, int p); +MonsterClass * checkMonsterClass(lua_State *s, int p); +Entity * checkNpc(lua_State *s, int p); int checkSkill(lua_State *s, int p); -AbilityManager::AbilityInfo *checkAbility(lua_State *s, int p); -unsigned char checkWalkMask(lua_State *s, int p); +AbilityManager::AbilityInfo * checkAbility(lua_State *s, int p); +const AttributeManager::AttributeInfo *checkAttribute(lua_State *s, int p); +unsigned char checkWalkMask(lua_State *s, int p); MapComposite * checkCurrentMap(lua_State *s, Script *script = 0); Script::Thread* checkCurrentThread(lua_State *s, Script *script = 0); |