Наверное я для красоты написал про ХБ.
Вид для печати
вчитайся внимательно в тултип http://wowroad.info/?spell=50796
Стрела Хаоса преодолевает сопротивление противника и игнорирует все эффекты поглощения.
уж не знаю как у розового войска с логикой.
когда должен сработать хил по условиям от урона БОЛТА ХАОСА?
урон, который МОГ БЫ оказаться смертельным, заместо этого хилит бла-бла-бла.
за это самое сослагательное наклонение отвечает подушка безопасности с механикой абсорба
БОТЛ ХАВАСА игнорирует эту механику, эту подушку. это как бронебойный патрон
и тебе задают вопрос: он тебе труп должен похилить?
если это удар не МОГ БЫ, а оказался смертельным
ну так когда должен хилить ревностный против ЧАОС БОЛТА? после каждого? после первого? по понедельникам? или может в полнолуние?
Не совсем
Код последнего тринити
Код:// 31850 - Ardent Defender
class spell_pal_ardent_defender : public SpellScriptLoader
{
public:
spell_pal_ardent_defender() : SpellScriptLoader("spell_pal_ardent_defender") { }
class spell_pal_ardent_defender_AuraScript : public AuraScript
{
PrepareAuraScript(spell_pal_ardent_defender_AuraScript);
public:
spell_pal_ardent_defender_AuraScript()
{
absorbPct = 0;
healPct = 0;
}
private:
uint32 absorbPct, healPct;
enum Spell
{
PAL_SPELL_ARDENT_DEFENDER_HEAL = 66235,
};
bool Load() override
{
healPct = GetSpellInfo()->Effects[EFFECT_1].CalcValue();
absorbPct = GetSpellInfo()->Effects[EFFECT_0].CalcValue();
return GetUnitOwner()->GetTypeId() == TYPEID_PLAYER;
}
void CalculateAmount(AuraEffect const* /*aurEff*/, int32 & amount, bool & /*canBeRecalculated*/)
{
// Set absorbtion amount to unlimited
amount = -1;
}
void Absorb(AuraEffect* aurEff, DamageInfo & dmgInfo, uint32 & absorbAmount)
{
Unit* victim = GetTarget();
int32 remainingHealth = victim->GetHealth() - dmgInfo.GetDamage();
uint32 allowedHealth = victim->CountPctFromMaxHealth(35);
// If damage kills us
if (remainingHealth <= 0 && !victim->ToPlayer()->HasSpellCooldown(PAL_SPELL_ARDENT_DEFENDER_HEAL))
{
// Cast healing spell, completely avoid damage
absorbAmount = dmgInfo.GetDamage();
uint32 defenseSkillValue = victim->GetDefenseSkillValue();
// Max heal when defense skill denies critical hits from raid bosses
// Formula: max defense at level + 140 (raiting from gear)
uint32 reqDefForMaxHeal = victim->getLevel() * 5 + 140;
float pctFromDefense = (defenseSkillValue >= reqDefForMaxHeal)
? 1.0f
: float(defenseSkillValue) / float(reqDefForMaxHeal);
int32 healAmount = int32(victim->CountPctFromMaxHealth(uint32(healPct * pctFromDefense)));
victim->CastCustomSpell(victim, PAL_SPELL_ARDENT_DEFENDER_HEAL, &healAmount, NULL, NULL, true, NULL, aurEff);
victim->ToPlayer()->AddSpellCooldown(PAL_SPELL_ARDENT_DEFENDER_HEAL, 0, time(NULL) + 120);
}
else if (remainingHealth < int32(allowedHealth))
{
// Reduce damage that brings us under 35% (or full damage if we are already under 35%) by x%
uint32 damageToReduce = (victim->GetHealth() < allowedHealth)
? dmgInfo.GetDamage()
: allowedHealth - remainingHealth;
absorbAmount = CalculatePct(damageToReduce, absorbPct);
}
}
void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_pal_ardent_defender_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB);
OnEffectAbsorb += AuraEffectAbsorbFn(spell_pal_ardent_defender_AuraScript::Absorb, EFFECT_0);
}
};
AuraScript* GetAuraScript() const override
{
return new spell_pal_ardent_defender_AuraScript();
}
};
[свернуть]
Собственно поймут не все... Но суть в чем, есть Абсорб, и только когда он сработал происходит проверка, на отхил т.е. 2й прок и это верно иначе эта структура вообще не имеет смысла.
Собственно ссылку на Trinity и его код, для тех кто его не видел: https://github.com/TrinityCore/Trini...scripts/Spells добавлю в гайд по спеллам позже.
ХБ не отличается в отношении отхила РЗ от любого другого урона.
- - - Updated - - -
А-а-а-а... какой-то сайт... какие-то "типа оф" коды... и что-то тут не так...
http://forum.wowcircle.com/showthrea...=1#post4244549