diff options
Diffstat (limited to 'src/scripting/lua.cpp')
-rw-r--r-- | src/scripting/lua.cpp | 55 |
1 files changed, 47 insertions, 8 deletions
diff --git a/src/scripting/lua.cpp b/src/scripting/lua.cpp index a322a3f9..03d08771 100644 --- a/src/scripting/lua.cpp +++ b/src/scripting/lua.cpp @@ -367,7 +367,7 @@ static int chr_inv_change(lua_State *s) return 0; } int nb_items = (lua_gettop(s) - 1) / 2; - Inventory inv(q, true); + Inventory inv(q); for (int i = 0; i < nb_items; ++i) { if (!(lua_isnumber(s, i * 2 + 2) || lua_isstring(s, i * 2 + 2)) || @@ -405,12 +405,13 @@ static int chr_inv_change(lua_State *s) id = ic->getDatabaseID(); if (nb < 0) { + // Removing too much item is a success as for the scripter's + // point of view. We log it anyway. nb = inv.remove(id, -nb); if (nb) { - inv.cancel(); - lua_pushboolean(s, 0); - return 1; + LOG_WARN("mana.chr_inv_change() removed more items than owned: " + << "character: " << q->getName() << " item id: " << id); } } else @@ -476,6 +477,23 @@ static int chr_inv_count(lua_State *s) } /** + * mana.chr_get_level(): int level + * Tells the character current level. + */ +static int chr_get_level(lua_State *s) +{ + Character *ch = getCharacter(s, 1); + if (!ch) + { + raiseScriptError(s, "chr_get_level " + "called for nonexistent character."); + } + + lua_pushinteger(s, ch->getLevel()); + return 1; +} + +/** * mana.npc_trade(NPC*, Character*, bool sell, table items): int * Callback for trading between a player and an NPC. * Let the player buy or sell only a subset of predeterminded items. @@ -1155,14 +1173,14 @@ static int monster_change_anger(lua_State *s) */ static int monster_remove(lua_State *s) { - bool monsterEnqueued = false; + bool monsterRemoved = false; Monster *m = getMonster(s, 1); if (m) { - GameState::enqueueRemove(m); - monsterEnqueued = true; + GameState::remove(m); + monsterRemoved = true; } - lua_pushboolean(s, monsterEnqueued); + lua_pushboolean(s, monsterRemoved); return 1; } @@ -1806,6 +1824,25 @@ static int chr_get_gender(lua_State *s) } /** + * mana.chr_set_gender(Character*, int gender): void + * Set the gender of the character. + */ +static int chr_set_gender(lua_State *s) +{ + Character *c = getCharacter(s, 1); + if (!c) + { + raiseScriptError(s, "chr_set_gender called for nonexistent character."); + return 0; + } + + const int gender = luaL_checkinteger(s, 2); + c->setGender(gender); + + return 0; +} + +/** * mana.chr_give_special(Character*, int special): void * Enables a special for a character. */ @@ -2283,6 +2320,7 @@ LuaScript::LuaScript(): { "chr_warp", &chr_warp }, { "chr_inv_change", &chr_inv_change }, { "chr_inv_count", &chr_inv_count }, + { "chr_get_level", &chr_get_level }, { "chr_get_quest", &chr_get_quest }, { "chr_set_quest", &chr_set_quest }, { "getvar_map", &getvar_map }, @@ -2299,6 +2337,7 @@ LuaScript::LuaScript(): { "chr_get_hair_color", &chr_get_hair_color }, { "chr_get_kill_count", &chr_get_kill_count }, { "chr_get_gender", &chr_get_gender }, + { "chr_set_gender", &chr_set_gender }, { "chr_give_special", &chr_give_special }, { "chr_has_special", &chr_has_special }, { "chr_take_special", &chr_take_special }, |