Jump to content

reeshack

Members
  • Posts

    54
  • Joined

  • Last visited

    Never
  • Donations

    0.00 GBP 

Posts posted by reeshack

  1. Also, there is another bug with this spell (and probably generally with all spells using SPELLMOD_COST) - the -50% cost pct modifier is applied after flat modifiers.

    Let me explain it on an example - Mangle (Cat) 's base cost is 40 energy, using Improved Mangle talent it is 34 energy so under the effect of Berserk it should be (the tooltip also says that) 17 energy. But in current state it seems to me, that the -50% mod is applied to the base value (40) and the flat ones are applied after that, causing Mangle (Cat) cost only 14 energy (40 * 0.50 - 6).

    Actually, I'm not sure how this priority issue should be handled - are pct mods supposed to be calculated first? Or should be first the modifier, whose aura has been firstly applied?

  2. The damage under 25% is definitely higher, but now it counts only base dmg of drain soul without spell power and done modifiers, which is in my opinion wrong. Before the revision that changed it it worked perfectly right - even the part that it matters on how much health does target have when the spell is casted (because it was implemented in SpellDamageBonusDone which is counted at the time of the whole cast and not at the time of a single tick...).

  3. How it SHOULD work: Since patch 3.1 when a warrior hits target with active absorbing shield (like a Priest with Power Word: Shield or Paladin with Sacred Shield), even if the warrior's attacks are partly/completely absorbed, the warrior should gain rage for these attacks like normal attacks.

    The post you've linked does not say anything about attacks you make, it is just about that you should gain rage from attacks made to you while having an absorb shield on yourself...

    You now gain rage when damage done to you is absorbed, such as through a Power Word: Shield.

  4. Yeah, this is exactly what I've just written, no need to repeat :P

    Anyway it can be simply fixed by converting to int32 and comparing to 0, like:

    m_caster->SetPower(POWER_RAGE,int32(m_caster->GetPower(POWER_RAGE)-rage) > 0 ? m_caster->GetPower(POWER_RAGE)-rage : 0 );
    

  5. This is caused by variable overflow in

    m_caster->SetPower(POWER_RAGE,m_caster->GetPower(POWER_RAGE)-rage);

    in it's spell effect as

    m_caster->CastCustomSpell(unitTarget, 20647, &basePoints0, NULL, NULL, true, 0);

    consumes 0.1 rage and therefore can GetPower(POWER_RAGE)-rage give you a negative number which is not suitable for uint32.

  6. I wouldn't be so sure about that, crit damage reduction is calculated from the basic combat ratings by multiplying it, so if it was changed in dbc, it would affect it.

    uint32 GetSpellCritDamageReduction(uint32 damage) const { return GetCombatRatingDamageReduction(CR_CRIT_TAKEN_SPELL, 2.2f, 33.0f, damage); }

    So that means that either we have to change the from players reduction part, or if it was changed in dbc (afaik in 3.3.3 it is not), we would have to change the crit damage calculation.

  7. I am not sure, but I think that the CD should be handled by spell Lock and Load Marker and not by sql update...

    EDIT: my idea was to do it somehow like this:

    diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp
    index 95ae494..a0d3701 100644
    --- a/src/game/Spell.cpp
    +++ b/src/game/Spell.cpp
    @@ -2619,6 +2619,13 @@ void Spell::cast(bool skipCheck)
                    AddTriggeredSpell(52874);                   // Fan of Knives (offhand)
                }
                break;
    +        case SPELLFAMILY_HUNTER:
    +        {
    +            // Lock and Load 
    +            if (m_spellInfo->Id == 56453) 
    +                AddPrecastSpell(67544);                 // Lock and Load Marker
    +            break;
    +        }
            case SPELLFAMILY_PALADIN:
            {
                // Hand of Reckoning
    @@ -3959,6 +3966,10 @@ SpellCastResult Spell::CheckCast(bool strict)
                return SPELL_FAILED_NOT_READY;
        }
    
    +    // Lock and Load Marker - sets Lock and Load cooldown
    +    if (m_caster->HasAura(67544) && m_spellInfo->Id == 56453)
    +        return SPELL_FAILED_DONT_REPORT;
    +
        // only allow triggered spells if at an ended battleground
        if( !m_IsTriggeredSpell && m_caster->GetTypeId() == TYPEID_PLAYER)
            if(BattleGround * bg = ((Player*)m_caster)->GetBattleGround())
    
    
    

    but it is rather an advise, have not tested it properly :)

  8. Don't know if you checked wowwiki in the last weeks, but there has been some updates of the scaling coeficients for Wotlk (http://www.wowwiki.com/Hunter_pet#Pet_scaling, http://www.wowwiki.com/Minion#Minion_scaling, http://www.wowwiki.com/Risen_Ghoul#Stats_and_scaling, and maybe some other, I didn't search for them), hopefully it could help you :).

    To morderek: That was adressed mainly to the author of the thread :D (sorry for editing but I did not want to make a useless post about it)

  9. My idea was to do it somehow like this

    diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp
    index 611f608..209952a 100644
    --- a/src/game/Spell.cpp
    +++ b/src/game/Spell.cpp
    @@ -2803,7 +2803,13 @@ void Spell::update(uint32 difftime)
            else if(!IsNextMeleeSwingSpell() && !IsAutoRepeat() && !m_IsTriggeredSpell && (m_spellInfo->InterruptFlags & SPELL_INTERRUPT_FLAG_MOVEMENT))
                cancel();
        }
    -
    +    // check if spell aura on target does not exist anymore (for channeled spells)
    +    if ( m_spellState == SPELL_STATE_CASTING && IsChanneledSpell(m_spellInfo) && m_spellInfo->AuraInterruptFlags != 0)
    +    {
    +        Unit *target = m_targets.getUnitTarget();
    +        if ( !target->HasAura(m_spellInfo->Id) )
    +            cancel();
    +    }
        switch(m_spellState)
        {
            case SPELL_STATE_PREPARING:
    

    but I am not sure if it does not affect any other spells in a negative way:(:(:/

  10. this is wrong, better is: Player's pet have 100% resilience from owner

    return ((Player*)owner)->GetRatingBonusValue(cr) * 1.0f;

    It is completely the same, there is no need to multiply anything by 1.0f and to specify that in a commentary as the patch change basically means that players pet is treated in the same way as player is...

  11. What bug does the patch fix? What features does the patch add?

    Updates pet resilience sharing for 330a.

    For which repository revision was the patch created?

    9139

    Is there a thread in the bug report section or at lighthouse? If yes, please add a link to the thread.

    No.

    Who has been writing this patch? Please include either forum user names or email addresses.

    Me.

    Pet Resilience: All player pets now get 100% of their master's resilience.

    diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp
    index 3a86bba..0417a25 100644
    --- a/src/game/Unit.cpp
    +++ b/src/game/Unit.cpp
    @@ -13077,10 +13077,10 @@ float Unit::GetCombatRatingReduction(CombatRating cr) const
            return ((Player const*)this)->GetRatingBonusValue(cr);
        else if (((Creature const*)this)->isPet())
        {
    -        // Player's pet have 0.4 resilience  from owner
    +        // Player's pet have resilience from owner
            if (Unit* owner = GetOwner())
                if(owner->GetTypeId() == TYPEID_PLAYER)
    -                return ((Player*)owner)->GetRatingBonusValue(cr) * 0.4f;
    +                return ((Player*)owner)->GetRatingBonusValue(cr);
        }
    
        return 0.0f;
    

  12. Maybe it cause problem when you try to heal someone whose not on your target frame? I have seen this happen when I'm using hotkeys voor heals en using Grid to select my targets (so I have no target frame)

    In my case I hotkeyed flash heal on button 1 and penance on button 2. I press button 1 to select flash heal (no target) then I move mouse cursor to whomever need heals, it never fails. I press button 2 to select penance move my cursor to someone on Grid window, penance fails. Hope this helps.

    Yea if you use f.e. alt hot key for self-targeting and you do not have anybody in target frame, it always fails. If you have an enemy in target frame, it heals him (lol). And sometimes it failes even if you are targeting somebody :/.

  13. - when MH crits, I never ever get OH damage, this case OH is not doing any damage.
    I can confirm this, in my opininion caused by wrong data in spell_proc_event, I solved it by this

    DELETE FROM spell_proc_event WHERE entry IN (65661);
    INSERT INTO spell_proc_event VALUES
    (65661 , 0, 15, 4194321, 131076, 0, 16, 3, 0, 100, 0);

  14. What bug does the patch fix? What features does the patch add?

    Fixes typo in http://github.com/mangos/mangos/commit/d9219725abff6bc1a03f0919681c3d99ddec95ed, which caused that some spells like Shattered Barrier did not work.

    For which repository revision was the patch created?

    Rev. 9045

    Is there a thread in the bug report section or at lighthouse? If yes, please add a link to the thread.

    No.

    Who has been writing this patch? Please include either forum user names or email addresses.

    Me, reeshack.

    diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp
    index 32adddf..81b5c57 100644
    --- a/src/game/SpellAuras.cpp
    +++ b/src/game/SpellAuras.cpp
    @@ -5934,6 +5934,7 @@ void Aura::HandleSpellSpecificBoosts(bool apply)
                }
                else
                    return;
    +            break;
            }
            case SPELLFAMILY_WARRIOR:
            {
    @@ -5957,6 +5958,7 @@ void Aura::HandleSpellSpecificBoosts(bool apply)
                break;
            }
            case SPELLFAMILY_WARLOCK:
    +        {
                // Fear (non stacking)
                if (m_spellProto->SpellFamilyFlags & UI64LIT(0x0000040000000000))
                {
    @@ -5991,6 +5993,7 @@ void Aura::HandleSpellSpecificBoosts(bool apply)
                else
                    return;
                break;
    +        }
            case SPELLFAMILY_PRIEST:
            {
                // Shadow Word: Pain (need visual check fro skip improvement talent) or Vampiric Touch
    

  15. multiplier correct, read release notes for 3.2.x ...

    full damage / 5 tick * 8 = expected damage _if_ no any spell bonuses.

    Single problme possible just absent sql record in spell_bonus table witjh 0% coef for any spell damage bonus for dispel damage spell

    If someone from _check_ and suggest related patch (in under review section) i will review.

    Yes, I know the multiplier is correct, the thing I was getting at is that it is not correct to multiply the damage with applied spell power bonus (through function SpellDamageBonus), meaning that you actually add spell power bonus of a single tick eight times...I think that the base damage is 8 * tick (at rank 5 it is 850/5 = 170, 170 * 8 = 1360 - which fits to the tooltip...) but the coefficient of spell "64085" should be independent shouldn't it?

    Than it would solve problems with double applying also, because we would apply it only at spell "64085" casting, through a coeff in the spell_bonus_data table...

  16. But still...isn't it too much for a direct damage spell to gain 320% spell power bonus - compared to Unstable Affliction dispel which gains 180%?

    Why don't we just delete

    bp0 = 8 * caster->SpellDamageBonus(this, spellEntry, bp0, DOT, 1);

    , do the multiplying here

    int32 bp0 = [b]8 *[/b] dot->GetModifier()->m_amount;

    and then add proper spell power benefit for spell "64085" to spell_bonus_data table, like it is with Unstable Affliction?

    Seems logical to me...

  17. Confirmed, I just would like to add, that calculating spell power bonus in code like:

    bp0 = 8 * caster->SpellDamageBonus(this, spellEntry, bp0, DOT, 1);

    and multiplying it eight times means in fact that dispel gains 320% (8* 40% per tick) spell power bonus which in combination with double-calculation through SpellDamageBonus() (64085 seems to gain some bonus too and even if not, all modifiers are therefore double-applied) results into crazy amounts of damage :o.

  18. However, it is no more procing after a critical strike :/

    I think the ProcEx mask should be "3" instead of "1" so then the whole sql looks like this:

    INSERT INTO `spell_chain` VALUES
    (17793, 0, 17793, 1, 0), (17796, 17793, 17793, 2, 0), (17801, 17796, 17793, 3, 0),
                                    (17802, 17801, 17793, 4, 0), (17803, 17802, 17793, 5, 0);
    DELETE FROM `spell_proc_event` WHERE `entry` IN (17793, 17796, 17801, 17802, 17803);
    -- (17793) Improved Shadow Bolt (Rank 1)
    INSERT INTO `spell_proc_event` VALUES
    (17793, 0x00, 5, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0.000000, 0.000000, 0);

  19. So, here it is :).

    Hopefully it is right in this way, I did it according to Ghostcrawler's statement, I also tested it a bit and it seems to work allright.

    diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp
    index c45f8cb..31f2825 100644
    --- a/src/game/Unit.cpp
    +++ b/src/game/Unit.cpp
    @@ -2367,18 +2353,23 @@ uint32 Unit::CalculateDamage (WeaponAttackType attType, bool normalized)
    
    float Unit::CalculateLevelPenalty(SpellEntry const* spellProto) const
    {
    -    if(spellProto->spellLevel <= 0)
    +    if(spellProto->maxLevel <= 0)
    +        return 1.0f;
    +    //if caster level is lower that max caster level
    +    if(getLevel() < spellProto->maxLevel)
            return 1.0f;
    
        float LvlPenalty = 0.0f;
    
    -    if(spellProto->spellLevel < 20)
    -        LvlPenalty = 20.0f - spellProto->spellLevel * 3.75f;
    -    float LvlFactor = (float(spellProto->spellLevel) + 6.0f) / float(getLevel());
    -    if(LvlFactor > 1.0f)
    -        LvlFactor = 1.0f;
    +    LvlPenalty = (22.0f + float (spellProto->maxLevel) - float (getLevel())) / 20.0f;
    +    //to prevent positive effect
    +    if(LvlPenalty > 1.0f)
    +        return 1.0f;
    +    //level penalty is capped at 0
    +    if(LvlPenalty < 0.0f)
    +        return 0.0f;
    
    -    return (100.0f - LvlPenalty) * LvlFactor / 100.0f;
    +    return LvlPenalty;
    }
    
    void Unit::SendMeleeAttackStart(Unit* pVictim)
    

    Paste2.org: http://paste2.org/p/549177

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. Privacy Policy Terms of Use