summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2014-09-16 16:44:21 +0300
committerAndrei Karas <akaras@inbox.ru>2014-09-16 16:44:21 +0300
commit4d54d36ed8e4bcc34e5b9f90e2126fadb490c34f (patch)
tree3bea875b8d320d8ba633eefa2482dfc6f3fa631b
parent8185a857a4d9152b3dda7f6b5649a27427010605 (diff)
downloadManaVerse-4d54d36ed8e4bcc34e5b9f90e2126fadb490c34f.tar.gz
ManaVerse-4d54d36ed8e4bcc34e5b9f90e2126fadb490c34f.tar.bz2
ManaVerse-4d54d36ed8e4bcc34e5b9f90e2126fadb490c34f.tar.xz
ManaVerse-4d54d36ed8e4bcc34e5b9f90e2126fadb490c34f.zip
Add server feature haveBrokenPlayerAttackDistance.
-rw-r--r--src/being/localplayer.cpp12
-rw-r--r--src/net/eathena/serverfeatures.cpp5
-rw-r--r--src/net/eathena/serverfeatures.h2
-rw-r--r--src/net/serverfeatures.h2
-rw-r--r--src/net/tmwa/serverfeatures.cpp5
-rw-r--r--src/net/tmwa/serverfeatures.h2
6 files changed, 24 insertions, 4 deletions
diff --git a/src/being/localplayer.cpp b/src/being/localplayer.cpp
index fd3acd4f9..d5e32316c 100644
--- a/src/being/localplayer.cpp
+++ b/src/being/localplayer.cpp
@@ -1117,18 +1117,20 @@ void LocalPlayer::moveToTarget(int dist)
dist = settings.moveToTargetType;
if (dist != 0)
{
+ const bool broken = Net::getServerFeatures()
+ ->haveBrokenPlayerAttackDistance();
switch (dist)
{
case 10:
dist = mAttackRange;
- if (dist == 1 && serverVersion < 1)
+ if (dist == 1 && broken)
dist = 2;
break;
case 11:
dist = mAttackRange - 1;
if (dist < 1)
dist = 1;
- if (dist == 1 && serverVersion < 1)
+ if (dist == 1 && broken)
dist = 2;
break;
default:
@@ -2746,10 +2748,12 @@ void LocalPlayer::attack2(Being *const target, const bool keep,
if (!dontChangeEquipment && target)
changeEquipmentBeforeAttack(target);
+ const bool broken = Net::getServerFeatures()
+ ->haveBrokenPlayerAttackDistance();
+
// probably need cache getPathLength(target)
if ((!target || settings.attackType == 0 || settings.attackType == 3)
- || (withinAttackRange(target, serverVersion < 1,
- serverVersion < 1 ? 1 : 0)
+ || (withinAttackRange(target, broken, broken ? 1 : 0)
&& getPathLength(target) <= getAttackRange2()))
{
attack(target, keep);
diff --git a/src/net/eathena/serverfeatures.cpp b/src/net/eathena/serverfeatures.cpp
index 94af844b8..f724d663a 100644
--- a/src/net/eathena/serverfeatures.cpp
+++ b/src/net/eathena/serverfeatures.cpp
@@ -62,4 +62,9 @@ bool ServerFeatures::havePlayerStatusUpdate() const
return false;
}
+bool ServerFeatures::haveBrokenPlayerAttackDistance() const
+{
+ return false;
+}
+
} // namespace EAthena
diff --git a/src/net/eathena/serverfeatures.h b/src/net/eathena/serverfeatures.h
index a11e73a40..fcd4cc97a 100644
--- a/src/net/eathena/serverfeatures.h
+++ b/src/net/eathena/serverfeatures.h
@@ -45,6 +45,8 @@ class ServerFeatures final : public Net::ServerFeatures
bool haveLangTab() const override final;
bool havePlayerStatusUpdate() const override final;
+
+ bool haveBrokenPlayerAttackDistance() const override final;
};
} // namespace EAthena
diff --git a/src/net/serverfeatures.h b/src/net/serverfeatures.h
index f84464b5d..b3407d2b0 100644
--- a/src/net/serverfeatures.h
+++ b/src/net/serverfeatures.h
@@ -42,6 +42,8 @@ class ServerFeatures notfinal
virtual bool haveLangTab() const = 0;
virtual bool havePlayerStatusUpdate() const = 0;
+
+ virtual bool haveBrokenPlayerAttackDistance() const = 0;
};
} // namespace Net
diff --git a/src/net/tmwa/serverfeatures.cpp b/src/net/tmwa/serverfeatures.cpp
index 28f0a3cee..86f679ae9 100644
--- a/src/net/tmwa/serverfeatures.cpp
+++ b/src/net/tmwa/serverfeatures.cpp
@@ -64,4 +64,9 @@ bool ServerFeatures::havePlayerStatusUpdate() const
return serverVersion >= 4;
}
+bool ServerFeatures::haveBrokenPlayerAttackDistance() const
+{
+ return serverVersion < 1;
+}
+
} // namespace TmwAthena
diff --git a/src/net/tmwa/serverfeatures.h b/src/net/tmwa/serverfeatures.h
index 87a1b61b0..8bf7288b3 100644
--- a/src/net/tmwa/serverfeatures.h
+++ b/src/net/tmwa/serverfeatures.h
@@ -45,6 +45,8 @@ class ServerFeatures final : public Net::ServerFeatures
bool haveLangTab() const override final;
bool havePlayerStatusUpdate() const override final;
+
+ bool haveBrokenPlayerAttackDistance() const override final;
};
} // namespace TmwAthena