diff options
author | dshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573> | 2008-09-02 16:58:08 +0000 |
---|---|---|
committer | dshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573> | 2008-09-02 16:58:08 +0000 |
commit | 46c9bd1b88d14d148bed88ca834afaddc7108197 (patch) | |
tree | 904f3f8101d71068c6b656e99833558013a2d8ed /crawl-ref/source/items.cc | |
parent | 80011c222ee25d7f12fce572c9058a7276355f85 (diff) | |
download | crawl-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.cc | 39 |
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() |