From 4fe5fd9a471760c8ce54c71c8cdf3f27c8fb27ae Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Thu, 9 Apr 2015 17:53:52 +0300 Subject: On skill attacks on target for show effect use skill attribute skillHitEffectId. --- src/being/being.cpp | 28 ++++++++++++++++++++++------ src/being/being.h | 10 +++++++--- 2 files changed, 29 insertions(+), 9 deletions(-) (limited to 'src/being') diff --git a/src/being/being.cpp b/src/being/being.cpp index fbdd6fc79..71265d9ac 100644 --- a/src/being/being.cpp +++ b/src/being/being.cpp @@ -561,8 +561,11 @@ void Being::setSpeech(const std::string &text, const std::string &channel, } } -void Being::takeDamage(Being *const attacker, const int amount, - const AttackType::Type type, const int attackId) +void Being::takeDamage(Being *const attacker, + const int amount, + const AttackType::Type type, + const int attackId, + const int level) { if (!userPalette || !attacker) return; @@ -705,7 +708,10 @@ void Being::takeDamage(Being *const attacker, const int amount, if (effectManager) { - const int hitEffectId = getHitEffect(attacker, type, attackId); + const int hitEffectId = getHitEffect(attacker, + type, + attackId, + level); if (hitEffectId >= 0) effectManager->trigger(hitEffectId, this); } @@ -715,7 +721,9 @@ void Being::takeDamage(Being *const attacker, const int amount, if (effectManager) { const int hitEffectId = getHitEffect(attacker, - AttackType::MISS, attackId); + AttackType::MISS, + attackId, + level); if (hitEffectId >= 0) effectManager->trigger(hitEffectId, this); } @@ -724,7 +732,9 @@ void Being::takeDamage(Being *const attacker, const int amount, } int Being::getHitEffect(const Being *const attacker, - const AttackType::Type type, const int attackId) const + const AttackType::Type type, + const int attackId, + const int level) const { if (!effectManager) return 0; @@ -781,8 +791,14 @@ int Being::getHitEffect(const Being *const attacker, } else { - // move skills effects to +100000 in effects list hitEffectId = attackId + 100000; + SkillData *const data = skillDialog->getSkillDataByLevel( + attackId, level); + if (!data) + return -1; + hitEffectId = data->hitEffectId; + if (hitEffectId == -1) + hitEffectId = paths.getIntValue("skillHitEffectId"); } BLOCK_END("Being::getHitEffect") return hitEffectId; diff --git a/src/being/being.h b/src/being/being.h index 23afd549f..767f7f3cd 100644 --- a/src/being/being.h +++ b/src/being/being.h @@ -201,8 +201,11 @@ class Being notfinal : public ActorSprite, * @param type the attack type * @param id skill id */ - void takeDamage(Being *const attacker, const int damage, - const AttackType::Type type, const int attackId = 1); + void takeDamage(Being *const attacker, + const int damage, + const AttackType::Type type, + const int attackId = 1, + const int level = 1); /** * Handles an attack of another being by this being. @@ -805,7 +808,8 @@ class Being notfinal : public ActorSprite, int getHitEffect(const Being *const attacker, const AttackType::Type type, - const int attackId) const A_WARN_UNUSED; + const int attackId, + const int level) const A_WARN_UNUSED; Cursor::Cursor getHoverCursor() const A_WARN_UNUSED { return mInfo ? mInfo->getHoverCursor() : Cursor::CURSOR_POINTER; } -- cgit v1.2.3-70-g09d2