По идее, если дк юзает хватку во время рефлекта вара, то дк притягивается к вару, а не он. Ну т.е. идет отражение. Знаю, что нужно химичить в SpellEffects.cpp и в самом spell_dk.cpp. В офф трини эта штука не работает. Но я решил глянуть в другом ядре, основанном на трине сам код (т.к. там работает эта тема), вот собственно код, но при компиляции появляются ошибки, ссылаясь на неправильные переменные и т.д., короче немного не подходит под структуру. Что здесь может быть не так? Подскажите пожалуйста Для SpellEffects.cpp такой код
Код
case 49560: // Death Grip Position pos; if(unitTarget == m_targets.getUnitTarget()) GetSummonPosition(effIndex, pos); else m_targets.getUnitTarget()->GetPosition(&pos); if (Unit *unit = unitTarget->GetVehicleBase()) // what is this for? unit->CastSpell(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), damage, true); else unitTarget->CastSpell(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), damage, true); return;
Для spell_dk.cpp такой:
Код
class spell_dk_spell_deflection : public SpellScriptLoader { public: spell_dk_spell_deflection() : SpellScriptLoader("spell_dk_spell_deflection") { } class spell_dk_spell_deflection_AuraScript : public AuraScript { PrepareAuraScript(spell_dk_spell_deflection_AuraScript); uint32 absorbPct; bool Load() { absorbPct = SpellMgr::CalculateSpellEffectAmount(GetSpellProto(), EFFECT_0, GetCaster()); return true; } void CalculateAmount(AuraEffect const * /*aurEff*/, int32 & amount, bool & /*canBeRecalculated*/) { // Set absorbtion amount to unlimited amount = -1; } void Absorb(AuraEffect * /*aurEff*/, DamageInfo & dmgInfo, uint32 & absorbAmount) { // You have a chance equal to your Parry chance if ((dmgInfo.GetDamageType() == SPELL_DIRECT_DAMAGE) && roll_chance_f(GetTarget()->GetUnitParryChance())) absorbAmount = CalculatePctN(dmgInfo.GetDamage(), absorbPct); } void Register() { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_spell_deflection_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); OnEffectAbsorb += AuraEffectAbsorbFn(spell_dk_spell_deflection_AuraScript::Absorb, EFFECT_0); } }; AuraScript *GetAuraScript() const { return new spell_dk_spell_deflection_AuraScript(); } }; class spell_dk_spell_deflection : public SpellScriptLoader { public: spell_dk_spell_deflection() : SpellScriptLoader("spell_dk_spell_deflection") { } class spell_dk_spell_deflection_AuraScript : public AuraScript { PrepareAuraScript(spell_dk_spell_deflection_AuraScript); uint32 absorbPct; bool Load() { absorbPct = SpellMgr::CalculateSpellEffectAmount(GetSpellProto(), EFFECT_0, GetCaster()); return true; } void CalculateAmount(AuraEffect const * /*aurEff*/, int32 & amount, bool & /*canBeRecalculated*/) { // Set absorbtion amount to unlimited amount = -1; } void Absorb(AuraEffect * /*aurEff*/, DamageInfo & dmgInfo, uint32 & absorbAmount) { // You have a chance equal to your Parry chance if ((dmgInfo.GetDamageType() == SPELL_DIRECT_DAMAGE) && roll_chance_f(GetTarget()->GetUnitParryChance())) absorbAmount = CalculatePctN(dmgInfo.GetDamage(), absorbPct); } void Register() { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_spell_deflection_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); OnEffectAbsorb += AuraEffectAbsorbFn(spell_dk_spell_deflection_AuraScript::Absorb, EFFECT_0); } }; AuraScript *GetAuraScript() const { return new spell_dk_spell_deflection_AuraScript(); } }; class spell_dk_spell_deflection : public SpellScriptLoader { public: spell_dk_spell_deflection() : SpellScriptLoader("spell_dk_spell_deflection") { } class spell_dk_spell_deflection_AuraScript : public AuraScript { PrepareAuraScript(spell_dk_spell_deflection_AuraScript); uint32 absorbPct; bool Load() { absorbPct = SpellMgr::CalculateSpellEffectAmount(GetSpellProto(), EFFECT_0, GetCaster()); return true; } void CalculateAmount(AuraEffect const * /*aurEff*/, int32 & amount, bool & /*canBeRecalculated*/) { // Set absorbtion amount to unlimited amount = -1; } void Absorb(AuraEffect * /*aurEff*/, DamageInfo & dmgInfo, uint32 & absorbAmount) { // You have a chance equal to your Parry chance if ((dmgInfo.GetDamageType() == SPELL_DIRECT_DAMAGE) && roll_chance_f(GetTarget()->GetUnitParryChance())) absorbAmount = CalculatePctN(dmgInfo.GetDamage(), absorbPct); } void Register() { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_spell_deflection_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); OnEffectAbsorb += AuraEffectAbsorbFn(spell_dk_spell_deflection_AuraScript::Absorb, EFFECT_0); } }; AuraScript *GetAuraScript() const { return new spell_dk_spell_deflection_AuraScript(); } }; class spell_dk_spell_deflection : public SpellScriptLoader { public: spell_dk_spell_deflection() : SpellScriptLoader("spell_dk_spell_deflection") { } class spell_dk_spell_deflection_AuraScript : public AuraScript { PrepareAuraScript(spell_dk_spell_deflection_AuraScript); uint32 absorbPct; bool Load() { absorbPct = SpellMgr::CalculateSpellEffectAmount(GetSpellProto(), EFFECT_0, GetCaster()); return true; } void CalculateAmount(AuraEffect const * /*aurEff*/, int32 & amount, bool & /*canBeRecalculated*/) { // Set absorbtion amount to unlimited amount = -1; } void Absorb(AuraEffect * /*aurEff*/, DamageInfo & dmgInfo, uint32 & absorbAmount) { // You have a chance equal to your Parry chance if ((dmgInfo.GetDamageType() == SPELL_DIRECT_DAMAGE) && roll_chance_f(GetTarget()->GetUnitParryChance())) absorbAmount = CalculatePctN(dmgInfo.GetDamage(), absorbPct); } void Register() { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_spell_deflection_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); OnEffectAbsorb += AuraEffectAbsorbFn(spell_dk_spell_deflection_AuraScript::Absorb, EFFECT_0); } }; AuraScript *GetAuraScript() const { return new spell_dk_spell_deflection_AuraScript(); } };
Что в них может быть не так? За помощь буду очень благодарен и +Добавлено (29.05.2015, 15:15) --------------------------------------------- Сейчас я сделаю скрин ошибок при компиляции, чтобы было проще
Добавлено (29.05.2015, 15:25) --------------------------------------------- по моему код полная бурда. как всё исправить? может кто подсказать?
Сообщение #
1 отредактировано
Алекcандрович -
Пятница, 29.05.2015, 15:14