diff options
-rw-r--r-- | changes.txt | 2 | ||||
-rw-r--r-- | lib/core/auto.lua | 54 | ||||
-rw-r--r-- | lib/core/xml.lua | 28 | ||||
-rw-r--r-- | src/squeltch.c | 2 |
4 files changed, 86 insertions, 0 deletions
diff --git a/changes.txt b/changes.txt index 071511e3..26e6e060 100644 --- a/changes.txt +++ b/changes.txt @@ -4,6 +4,8 @@ T.o.M.E 2.3.7 (ah) may be both non-zero and invisible (to the player). - Miscellaneous 64 bit fixes. - Fix Lua errors when hitting <ESC> while choosing spell. +- Killerbunnies: Automatizer: Add patch which adds new <inventory/> + and <equipment/> rules. T.o.M.E 2.3.6 (ah) diff --git a/lib/core/auto.lua b/lib/core/auto.lua index fa2457ff..ba613664 100644 --- a/lib/core/auto.lua +++ b/lib/core/auto.lua @@ -196,6 +196,38 @@ function gen_rule_fct(r) f = gen_rule_fct(r[1]) end return function(object) return not %f(object) end + elseif r.label == "inventory" then + local f + if not r[1] then + f = function(object) return end + else + f = gen_rule_fct(r[1]) + end + return function(object) + local i = 0 + while i < INVEN_WIELD do + if %f(player.inventory(i)) then + return TRUE + end + i = i + 1 + end + end + elseif r.label == "equipment" then + local f + if not r[1] then + f = function(object) return end + else + f = gen_rule_fct(r[1]) + end + return function(object) + local i = INVEN_WIELD + while i < INVEN_TOTAL do + if %f(player.inventory(i)) then + return TRUE + end + i = i + 1 + end + end elseif r.label == "name" then return function(object) if strlower(object_desc(object, -1, 0)) == strlower(%r[1]) then return TRUE end end elseif r.label == "contain" then @@ -737,6 +769,28 @@ auto_aux.types_desc = return xml:collect("<ability>"..n.."</ability>") end, }, + ["inventory"] = + { + { + "Check is true if something in player's inventory matches", + "the contained rule", + }, + xml:collect([[<inventory><foo1>...</foo1></inventory>]]), + function () + return xml:collect("<inventory></inventory>") + end, + }, + ["equipment"] = + { + { + "Check is true if something in player's equipment matches", + "the contained rule", + }, + xml:collect([[<equipment><foo1>...</foo1></equipment>]]), + function () + return xml:collect("<equipment></equipment>") + end, + }, } function auto_aux:display_desc(sel) diff --git a/lib/core/xml.lua b/lib/core/xml.lua index f1188d51..14f0511f 100644 --- a/lib/core/xml.lua +++ b/lib/core/xml.lua @@ -173,6 +173,34 @@ function xml:english_xml(t, tab, not_flag) nextlevel = tab end children_not_flag = not nil + elseif t.label == "inventory" then + if not_flag then + xml.write(TERM_WHITE, tab) + xml.write(ecol, "Nothing in your ") + xml.write(bcol, "inventory") + xml.write(ecol, " matches the following:") + xml.write(TERM_WHITE, "\n") + else + xml.write(TERM_WHITE, tab) + xml.write(ecol, "Something in your ") + xml.write(bcol, "inventory") + xml.write(ecol, " matches the following:") + xml.write(TERM_WHITE, "\n") + end + elseif t.label == "equipment" then + if not_flag then + xml.write(TERM_WHITE, tab) + xml.write(ecol, "Nothing in your ") + xml.write(bcol, "equipment") + xml.write(ecol, " matches the following:") + xml.write(TERM_WHITE, "\n") + else + xml.write(TERM_WHITE, tab) + xml.write(ecol, "Something in your ") + xml.write(bcol, "equipment") + xml.write(ecol, " matches the following:") + xml.write(TERM_WHITE, "\n") + end elseif t.label == "comment" then xml.write(TERM_WHITE, tab) xml.write(TERM_WHITE, "(" .. t[1] .. ")") diff --git a/src/squeltch.c b/src/squeltch.c index cd52dc1a..c957fa38 100644 --- a/src/squeltch.c +++ b/src/squeltch.c @@ -155,6 +155,8 @@ static cptr types_list[] = "level", "skill", "ability", + "inventory", + "equipment", "comment", NULL, }; |