From 6ff97aad8bf4af8e1a69665b3ad414042efada02 Mon Sep 17 00:00:00 2001 From: Yohann Ferreira Date: Fri, 29 Apr 2011 01:21:45 +0200 Subject: Added customizable on-hit effects for characters. This patch adds support for the following two parameters in weapon items: hit-effect-id: Effect triggered on the victim on normal hit. critical-hit-effect-id: Triggered on the victim on critical hit. (Specified in effects.xml) The patch also permits the use of custom defaults set in paths.xml by setting the following keys: (Paths are relative to the 'particles' key value, here.) hitEffectId: defaulted to effect id 26. criticalHitEffectId: defaulted to effect id 28. Resolves: Mana-mantis #337. Reviewed-by: bcs86 Conflicts: src/being.cpp src/resources/itemdb.cpp src/resources/iteminfo.h ManaPlus: adding missing checks. --- src/being.cpp | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) (limited to 'src/being.cpp') diff --git a/src/being.cpp b/src/being.cpp index 3a7f08dda..eae4ebd66 100644 --- a/src/being.cpp +++ b/src/being.cpp @@ -606,10 +606,25 @@ void Being::takeDamage(Being *attacker, int amount, AttackType type) if (effectManager) { - if (type != CRITICAL) - effectManager->trigger(26, this); + // Init the particle effect path based on current + // weapon or default. + int hitEffectId = 0; + const ItemInfo *attackerWeapon = attacker->getEquippedWeapon(); + if (attacker->getType() == PLAYER && attackerWeapon) + { + if (type != CRITICAL) + hitEffectId = attackerWeapon->getHitEffectId(); + else + hitEffectId = attackerWeapon->getCriticalHitEffectId(); + } else - effectManager->trigger(28, this); + { + if (type != CRITICAL) + hitEffectId = paths.getIntValue("hitEffectId"); + else + hitEffectId = paths.getIntValue("criticalHitEffectId"); + } + effectManager->trigger(hitEffectId, this); } } } @@ -624,7 +639,7 @@ void Being::handleAttack(Being *victim, int damage, setAction(Being::ATTACK, 1); if (getType() == PLAYER && mEquippedWeapon) - fireMissile(victim, mEquippedWeapon->getMissileParticle()); + fireMissile(victim, mEquippedWeapon->getMissileParticleFile()); else if (mInfo->getAttack(mAttackType)) fireMissile(victim, mInfo->getAttack(mAttackType)->missileParticle); -- cgit v1.2.3-60-g2f50