summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/delay.cc
diff options
context:
space:
mode:
authordshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2007-01-09 11:47:02 +0000
committerdshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2007-01-09 11:47:02 +0000
commit4c0344b9dd2c823ab6926542a58d3e1407bff7da (patch)
tree2f71bb84f4e6073d03de6723faeb062cbee97fe2 /crawl-ref/source/delay.cc
parent9415865e90bd96e8241e119291275eef655235dc (diff)
downloadcrawl-ref-4c0344b9dd2c823ab6926542a58d3e1407bff7da.tar.gz
crawl-ref-4c0344b9dd2c823ab6926542a58d3e1407bff7da.zip
Turn off autoprayer and autopickup if attacked by an invisible monster.
NOTE: autopickup is turned off only if safe_autopickup is enabled. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@817 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/delay.cc')
-rw-r--r--crawl-ref/source/delay.cc32
1 files changed, 32 insertions, 0 deletions
diff --git a/crawl-ref/source/delay.cc b/crawl-ref/source/delay.cc
index e40d3526be..1a9f7b48af 100644
--- a/crawl-ref/source/delay.cc
+++ b/crawl-ref/source/delay.cc
@@ -951,11 +951,43 @@ inline static void monster_warning(activity_interrupt_type ai,
}
}
+static void paranoid_option_disable( activity_interrupt_type ai,
+ const activity_interrupt_data &at )
+{
+ if (ai == AI_HIT_MONSTER || ai == AI_MONSTER_ATTACKS)
+ {
+ const monsters* mon = static_cast<const monsters*>(at.data);
+ if (mon && !player_monster_visible(mon))
+ {
+ std::vector<std::string> deactivatees;
+ if (Options.autoprayer_on)
+ {
+ deactivatees.push_back("autoprayer");
+ Options.autoprayer_on = false;
+ }
+
+ if (Options.autopickup_on && Options.safe_autopickup)
+ {
+ deactivatees.push_back("autopickup");
+ Options.autopickup_on = false;
+ }
+
+ if (!deactivatees.empty())
+ mprf(MSGCH_WARN, "Deactivating %s.",
+ comma_separated_line(deactivatees.begin(),
+ deactivatees.end()).c_str());
+ }
+ }
+}
+
// Returns true if any activity was stopped.
bool interrupt_activity( activity_interrupt_type ai,
const activity_interrupt_data &at )
{
+ paranoid_option_disable(ai, at);
+
const int delay = current_delay_action();
+
if (delay == DELAY_NOT_DELAYED)
return (false);