summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-01-26 13:30:24 +0300
committerAndrei Karas <akaras@inbox.ru>2015-01-26 13:30:24 +0300
commit1a9330a5f6cd753b4155ac74db104cb0ffa095c9 (patch)
treed3d24cfc1101b99e2055a9330b2e31522512f0c3
parent793e570728840dd788f9104e54828c1530016d61 (diff)
downloadmv-1a9330a5f6cd753b4155ac74db104cb0ffa095c9.tar.gz
mv-1a9330a5f6cd753b4155ac74db104cb0ffa095c9.tar.bz2
mv-1a9330a5f6cd753b4155ac74db104cb0ffa095c9.tar.xz
mv-1a9330a5f6cd753b4155ac74db104cb0ffa095c9.zip
Allow open cart window only if cart status effect enabled.
-rw-r--r--src/actions/windows.cpp8
-rw-r--r--src/being/actorsprite.cpp5
-rw-r--r--src/being/actorsprite.h7
-rw-r--r--src/defaults.cpp1
-rw-r--r--src/statuseffect.cpp5
-rw-r--r--src/statuseffect.h1
6 files changed, 24 insertions, 3 deletions
diff --git a/src/actions/windows.cpp b/src/actions/windows.cpp
index 9a7743590..91d965748 100644
--- a/src/actions/windows.cpp
+++ b/src/actions/windows.cpp
@@ -22,6 +22,8 @@
#include "actions/actiondef.h"
+#include "being/localplayer.h"
+
#include "gui/dialogsmanager.h"
#include "gui/windows/bankwindow.h"
@@ -277,8 +279,12 @@ impHandler0(bankWindowShow)
impHandler0(cartWindowShow)
{
- if (!serverFeatures->haveCart())
+ if (!serverFeatures->haveCart()
+ || !localPlayer
+ || !localPlayer->getHaveCart())
+ {
return false;
+ }
showHideWindow(cartWindow);
return true;
diff --git a/src/being/actorsprite.cpp b/src/being/actorsprite.cpp
index b6c4ea360..a2e7524cc 100644
--- a/src/being/actorsprite.cpp
+++ b/src/being/actorsprite.cpp
@@ -72,7 +72,8 @@ ActorSprite::ActorSprite(const int id) :
mCursorPaddingX(0),
mCursorPaddingY(0),
mMustResetParticles(false),
- mPoison(false)
+ mPoison(false),
+ mHaveCart(false)
{
}
@@ -219,6 +220,8 @@ void ActorSprite::updateStatusEffect(const int index, const bool newStatus)
return;
if (effect->isPoison() && getType() == ActorType::Player)
setPoison(newStatus);
+ if (localPlayer == this)
+ setHaveCart(newStatus);
handleStatusEffect(effect, index);
}
diff --git a/src/being/actorsprite.h b/src/being/actorsprite.h
index b9889490c..02a17ea07 100644
--- a/src/being/actorsprite.h
+++ b/src/being/actorsprite.h
@@ -171,6 +171,12 @@ class ActorSprite notfinal : public CompoundSprite, public Actor
bool getPoison() const A_WARN_UNUSED
{ return mPoison; }
+ void setHaveCart(const bool b)
+ { mHaveCart = b; }
+
+ bool getHaveCart() const A_WARN_UNUSED
+ { return mHaveCart; }
+
protected:
/**
* Notify self that the stun mode has been updated. Invoked by
@@ -232,6 +238,7 @@ class ActorSprite notfinal : public CompoundSprite, public Actor
/** Reset particle status effects on next redraw? */
bool mMustResetParticles;
bool mPoison;
+ bool mHaveCart;
};
#endif // BEING_ACTORSPRITE_H
diff --git a/src/defaults.cpp b/src/defaults.cpp
index 5e0b2d031..9abd9bb14 100644
--- a/src/defaults.cpp
+++ b/src/defaults.cpp
@@ -578,6 +578,7 @@ DefaultsData* getPathsDefaults()
AddDEF("defaultcommandsPatchFile", "defaultcommands_patch.xml");
AddDEF("defaultcommandsPatchDir", "defaultcommands.d");
AddDEF("poisonEffectName", "poison");
+ AddDEF("cartEffectName", "cart");
return configData;
}
diff --git a/src/statuseffect.cpp b/src/statuseffect.cpp
index b9499fc2e..987529631 100644
--- a/src/statuseffect.cpp
+++ b/src/statuseffect.cpp
@@ -49,7 +49,8 @@ StatusEffect::StatusEffect() :
mIcon(),
mAction(),
mPersistentParticleEffect(false),
- mIsPoison(false)
+ mIsPoison(false),
+ mIsCart(false)
{
}
@@ -198,6 +199,8 @@ void StatusEffect::loadXmlFile(const std::string &fileName)
startEffect->mIsPoison =
(name == paths.getStringValue("poisonEffectName"));
+ startEffect->mIsCart =
+ (name == paths.getStringValue("cartEffectName"));
startEffect->mMessage = XML::getProperty(
node, "start-message", "");
startEffect->mSFXEffect = XML::getProperty(
diff --git a/src/statuseffect.h b/src/statuseffect.h
index 392a942f6..143124948 100644
--- a/src/statuseffect.h
+++ b/src/statuseffect.h
@@ -124,6 +124,7 @@ class StatusEffect final
std::string mAction;
bool mPersistentParticleEffect;
bool mIsPoison;
+ bool mIsCart;
};
#endif // STATUSEFFECT_H