summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/actionmanager.cpp22
-rw-r--r--src/being/localplayer.cpp64
-rw-r--r--src/being/localplayer.h25
3 files changed, 62 insertions, 49 deletions
diff --git a/src/actionmanager.cpp b/src/actionmanager.cpp
index 1896e333d..593f3f6da 100644
--- a/src/actionmanager.cpp
+++ b/src/actionmanager.cpp
@@ -386,7 +386,7 @@ impHandler0(switchQuickDrop)
{
if (player_node && !player_node->getDisableGameModifiers())
{
- player_node->changeQuickDropCounter();
+ player_node->changeQuickDropCounter(true);
return true;
}
return false;
@@ -444,7 +444,7 @@ impHandler0(changeCrazyMove)
{
if (player_node)
{
- player_node->changeCrazyMoveType();
+ player_node->changeCrazyMoveType(true);
return true;
}
return false;
@@ -454,7 +454,7 @@ impHandler0(changePickupType)
{
if (player_node)
{
- player_node->changePickUpType();
+ player_node->changePickUpType(true);
return true;
}
return false;
@@ -498,7 +498,7 @@ impHandler0(changeMoveType)
{
if (player_node)
{
- player_node->invertDirection();
+ player_node->invertDirection(true);
return true;
}
return false;
@@ -508,7 +508,7 @@ impHandler0(changeAttackWeaponType)
{
if (player_node)
{
- player_node->changeAttackWeaponType();
+ player_node->changeAttackWeaponType(true);
return true;
}
return false;
@@ -518,7 +518,7 @@ impHandler0(changeAttackType)
{
if (player_node)
{
- player_node->changeAttackType();
+ player_node->changeAttackType(true);
return true;
}
return false;
@@ -528,7 +528,7 @@ impHandler0(changeFollowMode)
{
if (player_node)
{
- player_node->changeFollowMode();
+ player_node->changeFollowMode(true);
return true;
}
return false;
@@ -538,7 +538,7 @@ impHandler0(changeImitationMode)
{
if (player_node)
{
- player_node->changeImitationMode();
+ player_node->changeImitationMode(true);
return true;
}
return false;
@@ -558,7 +558,7 @@ impHandler0(changeMagicAttack)
{
if (player_node)
{
- player_node->switchMagicAttack();
+ player_node->switchMagicAttack(true);
return true;
}
return false;
@@ -568,7 +568,7 @@ impHandler0(changePvpMode)
{
if (player_node)
{
- player_node->switchPvpAttack();
+ player_node->switchPvpAttack(true);
return true;
}
return false;
@@ -578,7 +578,7 @@ impHandler0(changeMoveToTarget)
{
if (player_node)
{
- player_node->changeMoveToTargetType();
+ player_node->changeMoveToTargetType(true);
return true;
}
return false;
diff --git a/src/being/localplayer.cpp b/src/being/localplayer.cpp
index 0a05782d9..a643a3a0e 100644
--- a/src/being/localplayer.cpp
+++ b/src/being/localplayer.cpp
@@ -1244,14 +1244,26 @@ void LocalPlayer::changeMode(unsigned *restrict const var,
const char *restrict const conf,
std::string (LocalPlayer::*const func)(),
const unsigned def,
- const bool save)
+ const bool save,
+ const bool forward)
{
if (!var)
return;
- (*var) ++;
- if (*var >= limit)
- *var = def;
+ if (forward)
+ {
+ (*var) ++;
+ if (*var >= limit)
+ *var = def;
+ }
+ else
+ {
+ if (!*var)
+ *var = limit - 1;
+ else
+ (*var) --;
+ }
+
if (save)
config.setValue(conf, *var);
UpdateStatusListener::distributeEvent();
@@ -1260,11 +1272,11 @@ void LocalPlayer::changeMode(unsigned *restrict const var,
debugMsg(str.substr(4));
}
-void LocalPlayer::invertDirection()
+void LocalPlayer::invertDirection(const bool forward)
{
mMoveState = 0;
changeMode(&mInvertDirection, invertDirectionSize, "invertMoveDirection",
- &LocalPlayer::getInvertDirectionString, 0, false);
+ &LocalPlayer::getInvertDirectionString, 0, false, forward);
}
static const char *const invertDirectionStrings[] =
@@ -1291,11 +1303,11 @@ std::string LocalPlayer::getInvertDirectionString()
static const unsigned crazyMoveTypeSize = 11;
-void LocalPlayer::changeCrazyMoveType()
+void LocalPlayer::changeCrazyMoveType(const bool forward)
{
mCrazyMoveState = 0;
changeMode(&mCrazyMoveType, crazyMoveTypeSize, "crazyMoveType",
- &LocalPlayer::getCrazyMoveTypeString, 1, true);
+ &LocalPlayer::getCrazyMoveTypeString, 1, true, forward);
}
std::string LocalPlayer::getCrazyMoveTypeString()
@@ -1320,10 +1332,10 @@ std::string LocalPlayer::getCrazyMoveTypeString()
static const unsigned moveToTargetTypeSize = 13;
-void LocalPlayer::changeMoveToTargetType()
+void LocalPlayer::changeMoveToTargetType(const bool forward)
{
changeMode(&mMoveToTargetType, moveToTargetTypeSize, "moveToTargetType",
- &LocalPlayer::getMoveToTargetTypeString, 0, true);
+ &LocalPlayer::getMoveToTargetTypeString, 0, true, forward);
}
static const char *const moveToTargetTypeStrings[] =
@@ -1366,10 +1378,10 @@ std::string LocalPlayer::getMoveToTargetTypeString()
static const unsigned followModeSize = 4;
-void LocalPlayer::changeFollowMode()
+void LocalPlayer::changeFollowMode(const bool forward)
{
changeMode(&mFollowMode, followModeSize, "followMode",
- &LocalPlayer::getFollowModeString, 0, true);
+ &LocalPlayer::getFollowModeString, 0, true, forward);
}
static const char *const followModeStrings[] =
@@ -1394,10 +1406,10 @@ std::string LocalPlayer::getFollowModeString()
const unsigned attackWeaponTypeSize = 4;
-void LocalPlayer::changeAttackWeaponType()
+void LocalPlayer::changeAttackWeaponType(const bool forward)
{
changeMode(&mAttackWeaponType, attackWeaponTypeSize, "attackWeaponType",
- &LocalPlayer::getAttackWeaponTypeString, 1, true);
+ &LocalPlayer::getAttackWeaponTypeString, 1, true, forward);
}
static const char *const attackWeaponTypeStrings[] =
@@ -1422,10 +1434,10 @@ std::string LocalPlayer::getAttackWeaponTypeString()
const unsigned attackTypeSize = 4;
-void LocalPlayer::changeAttackType()
+void LocalPlayer::changeAttackType(const bool forward)
{
changeMode(&mAttackType, attackTypeSize, "attackType",
- &LocalPlayer::getAttackTypeString, 0, true);
+ &LocalPlayer::getAttackTypeString, 0, true, forward);
}
static const char *const attackTypeStrings[] =
@@ -1450,10 +1462,10 @@ std::string LocalPlayer::getAttackTypeString()
const unsigned quickDropCounterSize = 31;
-void LocalPlayer::changeQuickDropCounter()
+void LocalPlayer::changeQuickDropCounter(const bool forward)
{
changeMode(&mQuickDropCounter, quickDropCounterSize, "quickDropCounter",
- &LocalPlayer::getQuickDropCounterString, 1, true);
+ &LocalPlayer::getQuickDropCounterString, 1, true, forward);
}
std::string LocalPlayer::getQuickDropCounterString()
@@ -1481,10 +1493,10 @@ void LocalPlayer::setQuickDropCounter(const int n)
const unsigned pickUpTypeSize = 7;
-void LocalPlayer::changePickUpType()
+void LocalPlayer::changePickUpType(const bool forward)
{
changeMode(&mPickUpType, pickUpTypeSize, "pickUpType",
- &LocalPlayer::getPickUpTypeString, 0, true);
+ &LocalPlayer::getPickUpTypeString, 0, true, forward);
}
static const char *const pickUpTypeStrings[] =
@@ -1543,10 +1555,10 @@ std::string LocalPlayer::getMapDrawTypeString()
const unsigned magicAttackSize = 5;
-void LocalPlayer::switchMagicAttack()
+void LocalPlayer::switchMagicAttack(const bool forward)
{
changeMode(&mMagicAttackType, magicAttackSize, "magicAttackType",
- &LocalPlayer::getMagicAttackString, 0, true);
+ &LocalPlayer::getMagicAttackString, 0, true, forward);
}
static const char *const magicAttackStrings[] =
@@ -1573,10 +1585,10 @@ std::string LocalPlayer::getMagicAttackString()
const unsigned pvpAttackSize = 4;
-void LocalPlayer::switchPvpAttack()
+void LocalPlayer::switchPvpAttack(const bool forward)
{
changeMode(&mPvpAttackType, pvpAttackSize, "pvpAttackType",
- &LocalPlayer::getPvpAttackString, 0, true);
+ &LocalPlayer::getPvpAttackString, 0, true, forward);
}
static const char *const pvpAttackStrings[] =
@@ -1601,10 +1613,10 @@ std::string LocalPlayer::getPvpAttackString()
const unsigned imitationModeSize = 2;
-void LocalPlayer::changeImitationMode()
+void LocalPlayer::changeImitationMode(const bool forward)
{
changeMode(&mImitationMode, imitationModeSize, "imitationMode",
- &LocalPlayer::getImitationModeString, 0, true);
+ &LocalPlayer::getImitationModeString, 0, true, forward);
}
static const char *const imitationModeStrings[] =
diff --git a/src/being/localplayer.h b/src/being/localplayer.h
index 2d7ec8069..4e9efef21 100644
--- a/src/being/localplayer.h
+++ b/src/being/localplayer.h
@@ -192,7 +192,7 @@ class LocalPlayer final : public Being,
void setInvertDirection(const int n)
{ mInvertDirection = n; }
- void invertDirection();
+ void invertDirection(const bool forward);
int getAttackWeaponType() const A_WARN_UNUSED
{ return mAttackWeaponType; }
@@ -206,15 +206,15 @@ class LocalPlayer final : public Being,
int getImitationMode() const A_WARN_UNUSED
{ return mImitationMode; }
- void changeAttackWeaponType();
+ void changeAttackWeaponType(const bool forward);
- void changeAttackType();
+ void changeAttackType(const bool forward);
- void changeFollowMode();
+ void changeFollowMode(const bool forward);
- void changeImitationMode();
+ void changeImitationMode(const bool forward);
- void changePickUpType();
+ void changePickUpType(const bool forward);
int getCrazyMoveType() const A_WARN_UNUSED
{ return mCrazyMoveType; }
@@ -227,7 +227,7 @@ class LocalPlayer final : public Being,
void setQuickDropCounter(const int n);
- void changeQuickDropCounter();
+ void changeQuickDropCounter(const bool forward);
int getMoveState() const A_WARN_UNUSED
{ return mMoveState; }
@@ -235,9 +235,9 @@ class LocalPlayer final : public Being,
void setMoveState(const int n)
{ mMoveState = n; }
- void switchMagicAttack();
+ void switchMagicAttack(const bool forward);
- void switchPvpAttack();
+ void switchPvpAttack(const bool forward);
int getMagicAttackType() const A_WARN_UNUSED
{ return mMagicAttackType; }
@@ -255,7 +255,7 @@ class LocalPlayer final : public Being,
void tryPingRequest();
- void changeMoveToTargetType();
+ void changeMoveToTargetType(const bool forward);
void switchGameModifiers();
@@ -267,7 +267,7 @@ class LocalPlayer final : public Being,
bool pickUpItems(int pickUpType = 0);
- void changeCrazyMoveType();
+ void changeCrazyMoveType(const bool forward);
void crazyMove();
@@ -521,7 +521,8 @@ class LocalPlayer final : public Being,
const char *restrict const conf,
std::string (LocalPlayer::*const func)(),
const unsigned def,
- const bool save);
+ const bool save,
+ const bool forward);
void crazyMove1();
void crazyMove2();