summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/items.cc
diff options
context:
space:
mode:
authordshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2008-09-02 16:58:08 +0000
committerdshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2008-09-02 16:58:08 +0000
commit46c9bd1b88d14d148bed88ca834afaddc7108197 (patch)
tree904f3f8101d71068c6b656e99833558013a2d8ed /crawl-ref/source/items.cc
parent80011c222ee25d7f12fce572c9058a7276355f85 (diff)
downloadcrawl-ref-46c9bd1b88d14d148bed88ca834afaddc7108197.tar.gz
crawl-ref-46c9bd1b88d14d148bed88ca834afaddc7108197.zip
[2029973] Saner autopickup exceptions (doy).
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@6868 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/items.cc')
-rw-r--r--crawl-ref/source/items.cc39
1 files changed, 10 insertions, 29 deletions
diff --git a/crawl-ref/source/items.cc b/crawl-ref/source/items.cc
index 9b00cd6011..917f5b1c6a 100644
--- a/crawl-ref/source/items.cc
+++ b/crawl-ref/source/items.cc
@@ -2156,34 +2156,14 @@ static inline std::string _autopickup_item_name(const item_def &item)
+ item.name(DESC_PLAIN);
}
-static bool _is_denied_autopickup(const item_def &item, std::string &iname)
+static bool _is_option_autopickup(const item_def &item, std::string &iname)
{
if (iname.empty())
iname = _autopickup_item_name(item);
- for (unsigned i = 0, size = Options.never_pickup.size(); i < size; ++i)
- if (Options.never_pickup[i].matches(iname))
- return (true);
-
-#ifdef CLUA_BINDINGS
- if (clua.callbooleanfn(false, "ch_deny_autopickup", "us",
- &item, iname.c_str()))
- {
- return (true);
- }
-#endif
-
- return (false);
-}
-
-static bool _is_forced_autopickup(const item_def &item, std::string &iname)
-{
- if (iname.empty())
- iname = _autopickup_item_name(item);
-
- for (unsigned i = 0, size = Options.always_pickup.size(); i < size; ++i)
- if (Options.always_pickup[i].matches(iname))
- return (true);
+ for (unsigned i = 0, size = Options.force_autopickup.size(); i < size; ++i)
+ if (Options.force_autopickup[i].first.matches(iname))
+ return Options.force_autopickup[i].second;
#ifdef CLUA_BINDINGS
if (clua.callbooleanfn(false, "ch_force_autopickup", "us",
@@ -2193,7 +2173,7 @@ static bool _is_forced_autopickup(const item_def &item, std::string &iname)
}
#endif
- return (false);
+ return (Options.autopickups & (1L << item.base_type));
}
bool item_needs_autopickup(const item_def &item)
@@ -2207,11 +2187,12 @@ bool item_needs_autopickup(const item_def &item)
if ((item.flags & ISFLAG_THROWN) && Options.pickup_thrown)
return (true);
+ if ((item.flags & ISFLAG_DROPPED) && !Options.pickup_dropped) {
+ return (false);
+ }
+
std::string itemname;
- return ((Options.autopickups & (1L << item.base_type)
- || _is_forced_autopickup(item, itemname))
- && (Options.pickup_dropped || !(item.flags & ISFLAG_DROPPED))
- && !_is_denied_autopickup(item, itemname));
+ return _is_option_autopickup(item, itemname);
}
bool can_autopickup()