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.cpp55
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 },