Jump to content

Sarjuuk

Members
  • Posts

    99
  • Joined

  • Last visited

  • Donations

    0.00 GBP 

Posts posted by Sarjuuk

  1. Call me picky, but i dislike getting my informations from a Community, that specializes in exploits and hacks.

    If madx just moved, even better, but i'll continue as soon, as i'm home again. I don't think a bit redundancy would hurt here^^

    /e: i know, they have a creative branch, and The Druids of Azeroth Models are nice, but still ...

  2. Since madx.dk went down (probably forever) and with it the Wiki with the last (at least for me) known documentation of the DBCs, I'm currently rifling through the Google-Cache in an attempt to preserve whats still available.

    anyway

    while trying to add the SpellRange.dbc the following error occurred:

    Database error

    A database query syntax error has occurred. This may indicate a bug in the software. The last attempted database query was:

    (SQL query hidden)

    from within function "Article::insertOn". Database returned error "1205: Lock wait timeout exceeded; try restarting transaction (internal-db.s42721.gridserver.com)".

    this is independent from the given Summary

    I tried posting this: http://paste2.org/p/1471708

    Other articles work fine. It's just this one :/

  3. What features does the patch add?

    - Implements Flametongue Weapon

    - fully implements Flametongue Totem

    For which repository revision was the patch created?

    mangos-0.12 @ ea6b3de6dc0d7d9196b091561dae1cc89fa13ac8

    Is there a thread in the bug report section or at lighthouse?

    as far as i can tell, none related to 0.12

    Who has been writing this patch?

    Sarjuuk

    Code

    http://paste2.org/p/887048

    SQL

    -- Update Elemental Weapons-Talent to support Flametongue Weapon
    UPDATE spell_affect SET SpellFamilyMask = SpellFamilyMask | 0x200000 WHERE effectid = 1 AND entry IN (16266, 29079, 29080);
    
    -- Custom spell_proc_event for Flametongue Weapon
    INSERT INTO spell_proc_event VALUES
    (33756, 0, 0, 0, 0, 0, 0, 100, 0);

    Notes:

    - I'm using this patch for quite some time and as far as i can tell, it has only one minor issue. In case of Flametongue Weapon, the code can't tell which weapon triggered the proc, so it will proc on both weapons. (if dualwielding) I'll share it anyway, maybe someone has an idea for this 'glitch'

    - Spell:33756 is Windfury Weapon 2 (passive) and is not used in in 2.4.3. It may be hackish, but the spells for Flamtongue Weapons are missing completely and needed some kind of replacement.

    This Spell is no longer in the spell.dbc in 3.x. Don't try to look it up on Wowhead ect .. it's not there any more...

  4. diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp
    index 11ac823..5b5cced 100644 (file)
    --- a/src/game/SpellAuras.cpp
    +++ b/src/game/SpellAuras.cpp
    @@ -4680,13 +4680,21 @@ void Aura::HandlePeriodicManaLeech(bool apply, bool /*Real*/)
    
    void Aura::HandleAuraModResistanceExclusive(bool apply, bool /*Real*/)
    {
    -    for(int8 x = SPELL_SCHOOL_NORMAL; x < MAX_SPELL_SCHOOL;x++)
    +    for (int8 x = SPELL_SCHOOL_NORMAL; x < MAX_SPELL_SCHOOL;x++)
        {
    -        if(m_modifier.m_miscvalue & int32(1<<x))
    +        int32 oldMaxValue = 0;
    +        if (m_modifier.m_miscvalue & int32(1<<x))
            {
    -            m_target->HandleStatModifier(UnitMods(UNIT_MOD_RESISTANCE_START + x), BASE_VALUE, float(m_modifier.m_amount), apply);
    -            if(m_target->GetTypeId() == TYPEID_PLAYER)
    -                m_target->ApplyResistanceBuffModsMod(SpellSchools(x), m_positive, float(m_modifier.m_amount), apply);
    +            Unit::AuraList const& REAuras = m_target->GetAurasByType(SPELL_AURA_MOD_RESISTANCE_EXCLUSIVE);
    +            for (Unit::AuraList::const_iterator i = REAuras.begin(); i != REAuras.end(); ++i)
    +                if ( ((*i)->GetMiscValue() & int32(1<<x)) && (*i)->GetSpellProto()->Id != GetSpellProto()->Id)
    +                    if (oldMaxValue < (*i)->GetModifier()->m_amount)
    +                        oldMaxValue = (*i)->GetModifier()->m_amount;
    +
    +            float value = (m_modifier.m_amount > oldMaxValue) ? m_modifier.m_amount - oldMaxValue : 0.0f;
    +            m_target->HandleStatModifier(UnitMods(UNIT_MOD_RESISTANCE_START + x), BASE_VALUE, value, apply);
    +            if (m_target->GetTypeId() == TYPEID_PLAYER)
    +                m_target->ApplyResistanceBuffModsMod(SpellSchools(x), m_positive, value, apply);
            }
        }
    }

    Thats how Emme and I did it. Works with Mark of the Wild.

  5. GetMaxPositiveAuraModifier() may be the better choice.

    your current implementation results in conflicts with auras, adding resistance to more than one type. ie Mark of the Wild

    reproduce:

    1. buff yourself Mark of the Wild

    2. Buff yourself some other Resistance Aura (I used Fire Resistance Totem)

    3. Remove Mark of the Wild (right-click the icon)

    3a. note, that you'll still have the resistances in your character-sheet

    4. Remove Fire Resistance Totem (unsummon Totem or run out of range)

    4a. note, that your fire-resistance will show the correct value (0) while all other will have values like 20

    anyway, nice that your working on it :>

  6. updated to: r9784

    Note, that i just checked, whether it compiles. I didn't retest functionality!

    diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h
    index d1d792f..f86f2e4 100644
    --- a/src/game/SharedDefines.h
    +++ b/src/game/SharedDefines.h
    @@ -915,7 +915,7 @@ enum AuraState
        AURA_STATE_SWIFTMEND                    = 15,           //   T |
        AURA_STATE_DEADLY_POISON                = 16,           //   T |
        AURA_STATE_ENRAGE                       = 17,           // C   |
    -    //AURA_STATE_UNKNOWN18                  = 18,           // C  t|
    +    AURA_STATE_MECHANIC_BLEED               = 18,           // C  t|
        //AURA_STATE_UNKNOWN19                  = 19,           //     | not used
        //AURA_STATE_UNKNOWN20                  = 20,           //  c  | only (45317 Suicide)
        //AURA_STATE_UNKNOWN21                  = 21,           //     | not used
    diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp
    index 6d3bd1e..eeafbfd 100644
    --- a/src/game/SpellAuras.cpp
    +++ b/src/game/SpellAuras.cpp
    @@ -1063,6 +1063,10 @@ void Aura::_AddAura()
                // Enrage aura state
                if(m_spellProto->Dispel == DISPEL_ENRAGE)
                    m_target->ModifyAuraState(AURA_STATE_ENRAGE, true);
    +
    +            // Mechanic bleed aura state
    +            if(GetAllSpellMechanicMask(m_spellProto) & (1 << (MECHANIC_BLEED-1)))
    +                m_target->ModifyAuraState(AURA_STATE_MECHANIC_BLEED, true);
            }
        }
    }
    @@ -1140,6 +1144,23 @@ bool Aura::_RemoveAura()
            if(m_spellProto->Dispel == DISPEL_ENRAGE)
                m_target->ModifyAuraState(AURA_STATE_ENRAGE, false);
    
    +        // Mechanic bleed aura state
    +       if(GetAllSpellMechanicMask(m_spellProto) & (1 << (MECHANIC_BLEED-1)))
    +       {
    +           bool found = false;
    +           Unit::AuraList const& mPerDmg = m_target->GetAurasByType(SPELL_AURA_PERIODIC_DAMAGE);
    +           for(Unit::AuraList::const_iterator i = mPerDmg.begin(); i != mPerDmg.end(); ++i)
    +           {
    +               if(GetAllSpellMechanicMask((*i)->m_spellProto) & (1 << (MECHANIC_BLEED-1)))
    +               {
    +                   found = true;
    +                   break;
    +               }
    +           }
    +           if(!found)
    +               m_target->ModifyAuraState(AURA_STATE_MECHANIC_BLEED, false);
    +       }
    +
            uint32 removeState = 0;
            uint64 removeFamilyFlag = m_spellProto->SpellFamilyFlags;
            uint32 removeFamilyFlag2 = m_spellProto->SpellFamilyFlags2;
    diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp
    index c29ce02..efdf0c2 100644
    --- a/src/game/Unit.cpp
    +++ b/src/game/Unit.cpp
    @@ -9463,8 +9463,27 @@ bool Unit::IsSpellCrit(Unit *pVictim, SpellEntry const *spellProto, SpellSchoolM
            case SPELL_DAMAGE_CLASS_RANGED:
            {
                if (pVictim)
    +            {
                    crit_chance = GetUnitCriticalChance(attackType, pVictim);
    
    +                // Rend and Tear - eff:1
    +                if(spellProto->SpellFamilyName == SPELLFAMILY_DRUID && spellProto->SpellIconID == 1680 && spellProto->SpellFamilyFlags & UI64LIT(0x00800000))
    +                {
    +                    if(pVictim->HasAuraState(AURA_STATE_MECHANIC_BLEED))
    +                    {
    +                        AuraList const& dummyAuras = GetAurasByType(SPELL_AURA_DUMMY);
    +                        for(AuraList::const_iterator i = dummyAuras.begin(); i != dummyAuras.end(); ++i)
    +                        {
    +                            if((*i)->GetEffIndex() == 1 && (*i)->GetSpellProto()->SpellIconID == 2859)
    +                            {
    +                                crit_chance += (*i)->GetModifier()->m_amount;
    +                                break;
    +                            }
    +                        }
    +                    }
    +                }
    +            }
    +
                crit_chance+= GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_SPELL_CRIT_CHANCE_SCHOOL, schoolMask);
                break;
            }
    @@ -9932,8 +9951,8 @@ uint32 Unit::MeleeDamageBonus(Unit *pVictim, uint32 pdamage,WeaponAttackType att
        uint32 schoolMask       = spellProto ? spellProto->SchoolMask : GetMeleeDamageSchoolMask();
        uint32 mechanicMask     = spellProto ? GetAllSpellMechanicMask(spellProto) : 0;
    
    -    // Shred also have bonus as MECHANIC_BLEED damages
    -    if (spellProto && spellProto->SpellFamilyName==SPELLFAMILY_DRUID && spellProto->SpellFamilyFlags & UI64LIT(0x00008000))
    +    // Shred and Maul also have bonus as MECHANIC_BLEED damages
    +    if (spellProto && spellProto->SpellFamilyName==SPELLFAMILY_DRUID && spellProto->SpellFamilyFlags & UI64LIT(0x00008800))
            mechanicMask |= (1 << (MECHANIC_BLEED-1));
    
    
    @@ -10033,6 +10052,28 @@ uint32 Unit::MeleeDamageBonus(Unit *pVictim, uint32 pdamage,WeaponAttackType att
        if (!owner)
            owner = this;
    
    +    // ..done (dummy auras)
    +    if(spellProto)
    +    {
    +        AuraList const& casterDummyAuras = owner->GetAurasByType(SPELL_AURA_DUMMY);
    +        for(AuraList::const_iterator i = casterDummyAuras.begin(); i != casterDummyAuras.end(); ++i)
    +        {
    +            if (!(*i)->isAffectedOnSpell(spellProto))
    +                continue;
    +
    +            switch((*i)->GetSpellProto()->SpellIconID)
    +            {
    +                // Rend and Tear - eff:0
    +                case 2859:
    +                {
    +                    if(pVictim->HasAuraState(AURA_STATE_MECHANIC_BLEED))
    +                        DonePercent *= (100.0f+(*i)->GetModifier()->m_amount)/100.0f;
    +                    break;
    +                }
    +            }
    +        }
    +    }
    +
        // ..done (class scripts)
        if(spellProto)
        {

  7. okay, just to pull the few datasets together..

    well ... assuming, that they are all correct, if not... well better not think about it

    Level 28: 22.0 dps => 0.786 dps/level

    Level 34: 27.5 dps => 0.809 dps/level

    Level 60: 54.8 dps => 0.913 dps/level

    okay, just leaning out of the window here. But what if dps/level is a linear function:

    dpsPerLvl = 0.004 * lvl + 0.675

  8. no, thats not ideal.

    i'd rather suggest to use

    Unit::GetMaxNegativeAuraModifierByMiscMask()

    instead of

    Unit::GetTotalAuraMultiplierByMiscValueForMask()

    for this Aura-Type

    in your case a 30% Mangle could be overwritten with a 15% Trauma

  9. looks like, the Flags for Claw went into the wrong column.

    procFlags instead for SpellFamilyMask2

    this should do :)

    DELETE FROM `spell_proc_event` WHERE `entry` IN (16952, 16954);
    INSERT INTO `spell_proc_event` VALUES 
    (16952, 0x00000000,  7, 0x00039000, 0x00000400, 0x00040000, 0x00000000, 0x00000002, 0.000000, 0.000000,  0),
    (16954, 0x00000000,  7, 0x00039000, 0x00000400, 0x00040000, 0x00000000, 0x00000002, 0.000000, 0.000000,  0);

×
×
  • 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