summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/being.cpp1
-rw-r--r--src/being.h1
-rw-r--r--src/gui/charselectdialog.cpp2
-rw-r--r--src/gui/setup_video.cpp2
-rw-r--r--src/localplayer.cpp3
-rw-r--r--src/monster.cpp4
-rw-r--r--src/net/ea/beinghandler.cpp18
-rw-r--r--src/net/ea/protocol.h1
-rw-r--r--src/npc.cpp2
-rw-r--r--src/particle.cpp2
-rw-r--r--src/particle.h1
-rw-r--r--src/player.cpp2
12 files changed, 32 insertions, 7 deletions
diff --git a/src/being.cpp b/src/being.cpp
index 69d9293f..b54f4c44 100644
--- a/src/being.cpp
+++ b/src/being.cpp
@@ -78,7 +78,6 @@ Being::Being(int id, int job, Map *map):
mDirection(DOWN),
mSpriteDirection(DIRECTION_DOWN),
mMap(NULL),
- mParticleEffects(config.getValue("particleeffects", 1)),
mDispName(0),
mShowName(false),
mEquippedWeapon(NULL),
diff --git a/src/being.h b/src/being.h
index b1a08e37..8aa34b7c 100644
--- a/src/being.h
+++ b/src/being.h
@@ -529,7 +529,6 @@ class Being : public Sprite, public ConfigListener
Map *mMap; /**< Map on which this being resides */
std::string mName; /**< Name of character */
MapSprite mMapSprite;
- bool mParticleEffects; /**< Whether to display particles or not */
/**
* Holds a text object when the being displays it's name, 0 otherwise
diff --git a/src/gui/charselectdialog.cpp b/src/gui/charselectdialog.cpp
index 4f3619ae..8dc292ab 100644
--- a/src/gui/charselectdialog.cpp
+++ b/src/gui/charselectdialog.cpp
@@ -226,7 +226,7 @@ void CharSelectDialog::keyPressed(gcn::KeyEvent &keyEvent)
if (key.getValue() == Key::ESCAPE)
{
- action(gcn::ActionEvent(NULL, mSwitchLoginButton->getActionEventId()));
+ action(gcn::ActionEvent(mSwitchLoginButton, mSwitchLoginButton->getActionEventId()));
}
}
diff --git a/src/gui/setup_video.cpp b/src/gui/setup_video.cpp
index a4bd6864..b1d40575 100644
--- a/src/gui/setup_video.cpp
+++ b/src/gui/setup_video.cpp
@@ -484,6 +484,8 @@ void Setup_Video::action(const gcn::ActionEvent &event)
{
config.setValue("particleeffects",
mParticleEffectsCheckBox->isSelected());
+ Particle::enabled = mParticleEffectsCheckBox->isSelected();
+
if (engine)
{
new OkDialog(_("Particle Effect Settings Changed."),
diff --git a/src/localplayer.cpp b/src/localplayer.cpp
index d670b3b6..260a5542 100644
--- a/src/localplayer.cpp
+++ b/src/localplayer.cpp
@@ -887,6 +887,9 @@ void LocalPlayer::setExperience(int skill, int current, int next)
{
addMessageToQueue(strprintf("%d %s xp", diff, name.c_str()));
}
+
+ if (statusWindow)
+ statusWindow->update(skill);
}
std::pair<int, int> LocalPlayer::getExperience(int skill)
diff --git a/src/monster.cpp b/src/monster.cpp
index cc2285fe..34390982 100644
--- a/src/monster.cpp
+++ b/src/monster.cpp
@@ -53,7 +53,7 @@ Monster::Monster(int id, int job, Map *map):
mSprites.push_back(AnimatedSprite::load("graphics/sprites/error.xml"));
}
- if (mParticleEffects)
+ if (Particle::enabled)
{
const std::list<std::string> &particleEffects = info.getParticleEffects();
for (std::list<std::string>::const_iterator i = particleEffects.begin();
@@ -106,7 +106,7 @@ void Monster::setAction(Action action, int attackType)
//attack particle effect
particleEffect = getInfo().getAttackParticleEffect(attackType);
- if (!particleEffect.empty() && mParticleEffects)
+ if (!particleEffect.empty() && Particle::enabled)
{
switch (mSpriteDirection)
{
diff --git a/src/net/ea/beinghandler.cpp b/src/net/ea/beinghandler.cpp
index 1ede1b8d..cba1c984 100644
--- a/src/net/ea/beinghandler.cpp
+++ b/src/net/ea/beinghandler.cpp
@@ -50,6 +50,7 @@ BeingHandler::BeingHandler(bool enableSync):
SMSG_BEING_MOVE,
SMSG_BEING_MOVE2,
SMSG_BEING_REMOVE,
+ SMSG_SKILL_DAMAGE,
SMSG_BEING_ACTION,
SMSG_BEING_SELFEFFECT,
SMSG_BEING_EMOTION,
@@ -290,6 +291,23 @@ void BeingHandler::handleMessage(Net::MessageIn &msg)
break;
+ case SMSG_SKILL_DAMAGE:
+ msg.readInt16(); // Skill Id
+ srcBeing = beingManager->findBeing(msg.readInt32());
+ dstBeing = beingManager->findBeing(msg.readInt32());
+ msg.readInt32(); // Server tick
+ msg.readInt32(); // src speed
+ msg.readInt32(); // dst speed
+ param1 = msg.readInt32(); // Damage
+ msg.readInt16(); // Skill level
+ msg.readInt16(); // Div
+ msg.readInt8(); // Skill hit/type (?)
+ if (dstBeing)
+ dstBeing->takeDamage(srcBeing, param1, Being::HIT); // Perhaps a new skill attack type should be created and used?
+ if (srcBeing)
+ srcBeing->handleAttack(dstBeing, param1, Being::HIT);
+ break;
+
case SMSG_BEING_ACTION:
srcBeing = beingManager->findBeing(msg.readInt32());
dstBeing = beingManager->findBeing(msg.readInt32());
diff --git a/src/net/ea/protocol.h b/src/net/ea/protocol.h
index 75d0d30e..f17ded61 100644
--- a/src/net/ea/protocol.h
+++ b/src/net/ea/protocol.h
@@ -95,6 +95,7 @@ static const int STORAGE_OFFSET = 1;
#define SMSG_PLAYER_SKILLS 0x010f
#define SMSG_PLAYER_SKILL_UP 0x010e
#define SMSG_SKILL_FAILED 0x0110
+#define SMSG_SKILL_DAMAGE 0x01de
#define SMSG_ITEM_USE_RESPONSE 0x00a8
#define SMSG_ITEM_VISIBLE 0x009d /**< An item is on the floor */
#define SMSG_ITEM_DROPPED 0x009e /**< An item is dropped */
diff --git a/src/npc.cpp b/src/npc.cpp
index 882f1b42..a79e5bac 100644
--- a/src/npc.cpp
+++ b/src/npc.cpp
@@ -52,7 +52,7 @@ NPC::NPC(int id, int job, Map *map):
mSpriteColors.push_back("");
}
- if (mParticleEffects)
+ if (Particle::enabled)
{
//setup particle effects
for (std::list<std::string>::const_iterator i = info.particles.begin();
diff --git a/src/particle.cpp b/src/particle.cpp
index 42ec84d7..21bcec99 100644
--- a/src/particle.cpp
+++ b/src/particle.cpp
@@ -49,6 +49,7 @@ int Particle::particleCount = 0;
int Particle::maxCount = 0;
int Particle::fastPhysics = 0;
int Particle::emitterSkip = 1;
+bool Particle::enabled = true;
const float Particle::PARTICLE_SKY = 800.0f;
Particle::Particle(Map *map):
@@ -89,6 +90,7 @@ void Particle::setupEngine()
Particle::maxCount = (int)config.getValue("particleMaxCount", 3000);
Particle::fastPhysics = (int)config.getValue("particleFastPhysics", 0);
Particle::emitterSkip = (int)config.getValue("particleEmitterSkip", 1) + 1;
+ Particle::enabled = (bool)config.getValue("particleeffects", true);
disableAutoDelete();
logger->log("Particle engine set up");
}
diff --git a/src/particle.h b/src/particle.h
index c3e7692c..1b2d24ae 100644
--- a/src/particle.h
+++ b/src/particle.h
@@ -49,6 +49,7 @@ class Particle : public Sprite
static int particleCount; /**< Current number of particles */
static int maxCount; /**< Maximum number of particles */
static int emitterSkip; /**< Duration of pause between two emitter updates in ticks */
+ static bool enabled; /**< true when non-crucial particle effects are disabled */
/**
* Constructor.
diff --git a/src/player.cpp b/src/player.cpp
index 7e390b84..3cee0d1e 100644
--- a/src/player.cpp
+++ b/src/player.cpp
@@ -102,7 +102,7 @@ void Player::logic()
if (mEquippedWeapon)
particleEffect = mEquippedWeapon->getParticleEffect();
- if (!particleEffect.empty() && mParticleEffects && mFrame == 1)
+ if (!particleEffect.empty() && Particle::enabled && mFrame == 1)
{
switch (mDirection)
{