diff options
author | Adam Borowski <kilobyte@angband.pl> | 2011-01-02 12:55:31 +0100 |
---|---|---|
committer | Adam Borowski <kilobyte@angband.pl> | 2011-01-04 11:24:09 +0100 |
commit | 03abce99c3846804f69a75867734e86800f9a2e0 (patch) | |
tree | dbe19ecc64a3ebcfdfd44e2d99bafd5c02dfe6f3 /crawl-ref/source/l_mons.cc | |
parent | 92daeebfbbcb8dc92784acd753f9f6215644e6ec (diff) | |
download | crawl-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.cc | 49 |
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 } }; |