summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/actorspritemanager.cpp14
-rw-r--r--src/actorspritemanager.h1
-rw-r--r--src/defaults.cpp1
-rw-r--r--src/gui/setup_other.cpp3
4 files changed, 14 insertions, 5 deletions
diff --git a/src/actorspritemanager.cpp b/src/actorspritemanager.cpp
index 61ca20a79..3206fe36a 100644
--- a/src/actorspritemanager.cpp
+++ b/src/actorspritemanager.cpp
@@ -191,6 +191,7 @@ ActorSpriteManager::ActorSpriteManager() :
mTargetOnlyReachable(config.getBoolValue("targetOnlyReachable")),
mCyclePlayers(config.getBoolValue("cyclePlayers")),
mCycleMonsters(config.getBoolValue("cycleMonsters")),
+ mCycleNPC(config.getBoolValue("cycleNPC")),
mExtMouseTargeting(config.getBoolValue("extMouseTargeting"))
{
config.addListener("targetDeadPlayers", this);
@@ -861,10 +862,11 @@ Being *ActorSpriteManager::findNearestLivingBeing(Being *aroundBeing,
maxDist = maxDist * maxDist;
bool cycleSelect = (mCyclePlayers && type == Being::PLAYER)
- || (mCycleMonsters && type == Being::MONSTER);
+ || (mCycleMonsters && type == Being::MONSTER)
+ || (mCycleNPC && type == Being::NPC);
bool filtered = config.getBoolValue("enableAttackFilter")
- && type != Being::PLAYER;
+ && type == Being::MONSTER;
bool ignoreDefault = false;
if (filtered)
@@ -962,7 +964,7 @@ Being *ActorSpriteManager::findNearestLivingBeing(Being *aroundBeing,
{
Being *target = sortedBeings.at(0);
- if (specialDistance && target->getType() == Being::MONSTER
+ if (specialDistance && target->getType() == type
&& target->getDistance() <= 2)
{
return nullptr;
@@ -1027,7 +1029,7 @@ Being *ActorSpriteManager::findNearestLivingBeing(Being *aroundBeing,
int d = being->getDistance();
// logger->log("dist: %d", dist);
// logger->log("name: %s, %d, %d", being->getName().c_str(), (int)valid, d);
- if (being->getType() != Being::MONSTER
+ if (being->getType() != type
|| !mTargetOnlyReachable)
{ // if distance not calculated, use old distance
d = (being->getTileX() - x) * (being->getTileX() - x)
@@ -1038,7 +1040,7 @@ Being *ActorSpriteManager::findNearestLivingBeing(Being *aroundBeing,
continue;
if (specialDistance && being->getDistance() <= 2
- && being->getType() == Being::MONSTER)
+ && being->getType() == type)
{
continue;
}
@@ -1467,6 +1469,8 @@ void ActorSpriteManager::optionChanged(const std::string &name)
mCyclePlayers = config.getBoolValue("cyclePlayers");
else if (name == "cycleMonsters")
mCycleMonsters = config.getBoolValue("cycleMonsters");
+ else if (name == "cycleNPC")
+ mCycleNPC = config.getBoolValue("cycleNPC");
else if (name == "extMouseTargeting")
mExtMouseTargeting = config.getBoolValue("extMouseTargeting");
}
diff --git a/src/actorspritemanager.h b/src/actorspritemanager.h
index 1491ca6d4..86bc7d9cd 100644
--- a/src/actorspritemanager.h
+++ b/src/actorspritemanager.h
@@ -306,6 +306,7 @@ class ActorSpriteManager: public ConfigListener
bool mTargetOnlyReachable;
bool mCyclePlayers;
bool mCycleMonsters;
+ bool mCycleNPC;
bool mExtMouseTargeting;
#define defVarsP(mob) \
diff --git a/src/defaults.cpp b/src/defaults.cpp
index 1eb87a677..1ddad88d4 100644
--- a/src/defaults.cpp
+++ b/src/defaults.cpp
@@ -163,6 +163,7 @@ DefaultsData* getConfigDefaults()
AddDEF(configData, "logToChat", false);
AddDEF(configData, "cyclePlayers", true);
AddDEF(configData, "cycleMonsters", true);
+ AddDEF(configData, "cycleNPC", true);
AddDEF(configData, "floorItemsHighlight", true);
AddDEF(configData, "enableBotCheker", true);
AddDEF(configData, "removeColors", true);
diff --git a/src/gui/setup_other.cpp b/src/gui/setup_other.cpp
index bfc3059c7..e011be983 100644
--- a/src/gui/setup_other.cpp
+++ b/src/gui/setup_other.cpp
@@ -155,6 +155,9 @@ Setup_Other::Setup_Other()
new SetupItemLabel(_("NPC"), "", this);
+ new SetupItemCheckBox(_("Cycle npc targets"), "",
+ "cycleNPC", this, "cycleNPCEvent");
+
new SetupItemCheckBox(_("Log NPC dialogue"), "", "logNpcInGui",
this, "logNpcInGuiEvent");