summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/l_mons.cc
diff options
context:
space:
mode:
authorAdam Borowski <kilobyte@angband.pl>2011-01-02 12:55:31 +0100
committerAdam Borowski <kilobyte@angband.pl>2011-01-04 11:24:09 +0100
commit03abce99c3846804f69a75867734e86800f9a2e0 (patch)
treedbe19ecc64a3ebcfdfd44e2d99bafd5c02dfe6f3 /crawl-ref/source/l_mons.cc
parent92daeebfbbcb8dc92784acd753f9f6215644e6ec (diff)
downloadcrawl-ref-03abce99c3846804f69a75867734e86800f9a2e0.tar.gz
crawl-ref-03abce99c3846804f69a75867734e86800f9a2e0.zip
Allow adding monster enchantments from Lua.
Diffstat (limited to 'crawl-ref/source/l_mons.cc')
-rw-r--r--crawl-ref/source/l_mons.cc49
1 files changed, 49 insertions, 0 deletions
diff --git a/crawl-ref/source/l_mons.cc b/crawl-ref/source/l_mons.cc
index e41f01e652..508772b37e 100644
--- a/crawl-ref/source/l_mons.cc
+++ b/crawl-ref/source/l_mons.cc
@@ -379,6 +379,53 @@ static int l_mons_do_has_prop(lua_State *ls)
MDEFN(has_prop, do_has_prop)
+static int l_mons_do_add_ench(lua_State *ls)
+{
+ ASSERT_DLUA;
+
+ monster* mons =
+ clua_get_lightuserdata<monster>(ls, lua_upvalueindex(1));
+
+ const char *ench_name = luaL_checkstring(ls, 1);
+ enchant_type met = name_to_ench(ench_name);
+ if (!met)
+ {
+ std::string err
+ = make_stringf("No such enchantment: %s", ench_name);
+ luaL_argerror(ls, 1, err.c_str());
+ return 0;
+ }
+
+ mons->add_ench(mon_enchant(met, luaL_checkint(ls, 2), KC_OTHER,
+ luaL_checkint(ls, 3)));
+ return 0;
+}
+
+MDEFN(add_ench, do_add_ench)
+
+static int l_mons_do_del_ench(lua_State *ls)
+{
+ ASSERT_DLUA;
+
+ monster* mons =
+ clua_get_lightuserdata<monster>(ls, lua_upvalueindex(1));
+
+ const char *ench_name = luaL_checkstring(ls, 1);
+ enchant_type met = name_to_ench(ench_name);
+ if (!met)
+ {
+ std::string err
+ = make_stringf("No such enchantment: %s", ench_name);
+ luaL_argerror(ls, 1, err.c_str());
+ return 0;
+ }
+
+ mons->del_ench(met);
+ return 0;
+}
+
+MDEFN(del_ench, do_del_ench)
+
MDEF(you_can_see)
{
ASSERT_DLUA;
@@ -424,6 +471,8 @@ static MonsAccessor mons_attrs[] =
{ "set_prop", l_mons_set_prop },
{ "get_prop", l_mons_get_prop },
{ "has_prop", l_mons_has_prop },
+ { "add_ench", l_mons_add_ench },
+ { "del_ench", l_mons_del_ench },
{ "you_can_see", l_mons_you_can_see }
};