Jump to content

lavinelu

Members
  • Posts

    15
  • Joined

  • Last visited

    Never
  • Donations

    0.00 GBP 

Posts posted by lavinelu

  1. For example, consuming the normal guardian elixir 'Elixir of Mighty Fortitude' (http://www.wowhead.com/item=40078) removes the battle elixir 'Elixir of Mighty Strength' (http://www.wowhead.com/item=40073) and vice-versa.

    i think the problem is from this function IsNoStackAuraDueToAura and should be something like this

     if (spellInfo_1->Effect[i] == spellInfo_2->Effect[j]
                   && spellInfo_1->EffectApplyAuraName[i] == spellInfo_2->EffectApplyAuraName[j]
                   && spellInfo_1->EffectMiscValue[i] == spellInfo_2->EffectMiscValue[j]
                   && spellInfo_1->EffectItemType[i] == spellInfo_2->EffectItemType[j]
                   && (spellInfo_1->Effect[i] != 0 || spellInfo_1->EffectApplyAuraName[i] != 0 || 
                       spellInfo_1->EffectMiscValue[i] != 0 || spellInfo_1->EffectItemType[i] != 0))
                   return true;

  2. Restores 2700 to 4500 health. Increased effect for engineers!

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

    Increased effect for engineers! with 25%

    For which repository revision was the patch created?

    10401

    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

    diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp
    index 99e74fe..470f309 100644
    --- a/src/game/SpellEffects.cpp
    +++ b/src/game/SpellEffects.cpp
    @@ -3352,6 +3352,13 @@ void Spell::EffectHeal(SpellEffectIndex /*eff_idx*/)
    
                addhealth += tickheal * tickcount;
            }
    +        // Runic Healing Injector
    +        else if (m_spellInfo->Id == 67489 && unitTarget->GetTypeId() == TYPEID_PLAYER)
    +        {
    +            Player* player = (Player*)unitTarget;
    +            if (player->HasSkill(SKILL_ENGINERING))
    +                addhealth *= 1.25;
    +        }
    
            // Chain Healing
            if (m_spellInfo->SpellFamilyName == SPELLFAMILY_SHAMAN && m_spellInfo->SpellFamilyFlags & UI64LIT(0x0000000000000100)) 

  3. Why not?

    I really don't it's the task of this function to decide whether auras stack or not.

    Basically, this is a very low-level function, and using it directly should be avoided wherever possible. And there's infact only two places outside AddSpellAuraHolder() where it is used, the one just fixed, and Creature::LoadCreaturesAddon() which might need the same fix actually...

    thanks for answer, i asked because i put this modification on server and now uptime is 16h, didn't crashed since then and before every 1 - 2 hours was a crash.

  4. For the freeze with Desecration + Shapeshift, this is definitely the place where it goes wrong yes.

    It has nothing to do with AuraHolder functions going wrong, problem is that multiple DynamicObjects from different effects of same spell have to share SpellAuraHolder in current code design, so this manual fiddling is necessary for now.

    You cannot just delete the whole holder, because if spell have more than one effect, second effect will erase first effect etc...

    Fix for this specific problem added in [10335]

    Lunx3d, here target->AddAuraToModList(Aur); it's ok to have same aura added 2 times or more?

    if not can something go wrong if i modify it like this?

    @@ -4116,11 +4116,22 @@ bool Unit::AddSpellAuraHolder(SpellAuraHolder *holder)
    }
    
    void Unit::AddAuraToModList(Aura *aura)
    {
        if (aura->GetModifier()->m_auraname < TOTAL_AURAS)
    +    {
    +        AuraList::const_iterator iter;
    +        for (iter = m_modAuras[aura->GetModifier()->m_auraname].begin(); iter != m_modAuras[aura->GetModifier()->m_auraname].end(); ++iter)
    +        {
    +            if (aura->GetId() == (*iter)->GetId())
    +            {
    +                m_modAuras[aura->GetModifier()->m_auraname].remove((*iter));
    +                break;
    +            }
    +        }
            m_modAuras[aura->GetModifier()->m_auraname].push_back(aura);
    +    }
    }

  5. i did it in this way but i dont know how the spell system is working and maybe will broke other spells :)

    i think the same spell should not be added 2 times here target->AddAuraToModList(Aur);

    @@ -4116,11 +4116,22 @@ bool Unit::AddSpellAuraHolder(SpellAuraHolder *holder)
    }
    
    void Unit::AddAuraToModList(Aura *aura)
    {
        if (aura->GetModifier()->m_auraname < TOTAL_AURAS)
    +    {
    +        AuraList::const_iterator iter;
    +        for (iter = m_modAuras[aura->GetModifier()->m_auraname].begin(); iter != m_modAuras[aura->GetModifier()->m_auraname].end(); ++iter)
    +        {
    +            if (aura->GetId() == (*iter)->GetId())
    +            {
    +                m_modAuras[aura->GetModifier()->m_auraname].remove((*iter));
    +                break;
    +            }
    +        }
            m_modAuras[aura->GetModifier()->m_auraname].push_back(aura);
    +    }
    }

  6.             
    -    Unit::AuraList const& slowingAuras = target->GetAurasByType(SPELL_AURA_MOD_DECREASE_SPEED);
    -    for (Unit::AuraList::const_iterator iter = slowingAuras.begin(); iter != slowingAuras.end()
    +    for (Unit::AuraList::const_iterator iter = target->GetAurasByType(SPELL_AURA_MOD_DECREASE_SPEED).begin(); iter != target->GetAurasByType(SPELL_AURA_MOD_DECREASE_SPEED).end()
       {
           SpellEntry const* aurSpellInfo = (*iter)->GetSpellProto();
    
           uint32 aurMechMask = GetAllSpellMechanicMask(aurSpellInfo);
    
           // If spell that caused this aura has Croud Control or Daze effect
           if((aurMechMask & MECHANIC_NOT_REMOVED_BY_SHAPESHIFT) ||
           // some Daze spells have these parameters instead of MECHANIC_DAZE (skip snare spells)
           aurSpellInfo->SpellIconID == 15 && aurSpellInfo->Dispel == 0 &&
           (aurMechMask & (1 << (MECHANIC_SNARE-1)))==0)
           {
               ++iter;
               continue;
           }
    
           // All OK, remove aura now
           target->RemoveAurasDueToSpellByCancel(aurSpellInfo->Id);
    -        iter = slowingAuras.begin();
    +        iter = target->GetAurasByType(SPELL_AURA_MOD_DECREASE_SPEED).begin();             
       }
    

    Maybe?

    should be checked why this aura is not removed, this code is ok how it is right now.

  7. I was refering to the previsious crash, that you fixed in 10319.

    For this 2 crashes, here is the reproduction method.

    How to reproduce:

    1. Create a level 80 NE Druid.

    2. Create a level 80 NE DK.

    3. Cast .learn all_myclass (with the DK)

    4. Cast .max skill (with the DK)

    5. /duel and accept between the 2 characters

    6. add any weapon on the DK and cast Plague Strike (do not use .cast, cast it as if you were playing)

    7. Blood Plague and Desecration will proc

    8. Shapeshift into Cat Form (Druid) when desecration has 1 sec before expire

    9. Make sure blood plague will expire AFTER desecration.

    Crashes 100% on x64. With x32 i tryed for hours and can't understand why it didn't crash. Preutty wird.

    here is the problem

                
    for (Unit::AuraList::const_iterator iter = slowingAuras.begin(); iter != slowingAuras.end()
               {
                   SpellEntry const* aurSpellInfo = (*iter)->GetSpellProto();
    
                   uint32 aurMechMask = GetAllSpellMechanicMask(aurSpellInfo);
    
                   // If spell that caused this aura has Croud Control or Daze effect
                   if((aurMechMask & MECHANIC_NOT_REMOVED_BY_SHAPESHIFT) ||
                       // some Daze spells have these parameters instead of MECHANIC_DAZE (skip snare spells)
                       aurSpellInfo->SpellIconID == 15 && aurSpellInfo->Dispel == 0 &&
                       (aurMechMask & (1 << (MECHANIC_SNARE-1)))==0)
                   {
                       ++iter;
                       continue;
                   }
    
                   // All OK, remove aura now
                   target->RemoveAurasDueToSpellByCancel(aurSpellInfo->Id);
                   iter = slowingAuras.begin();
               }
    

    its an infinite loop because

    target->RemoveAurasDueToSpellByCancel(aurSpellInfo->Id);

    is not removing aura i think

  8. When you try to loot the gameobject it says "YOU CAN'T OPEN THAT"

    if i remove this line

    pGameObj->SetUInt32Value(GAMEOBJECT_LEVEL, m_caster->getLevel() );

    it will work but i don't know if this is the right way to fix it thats why i post it on bug reports section :)

    diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp
    index 5ccab32..6c922a1 100644
    --- a/src/game/SpellEffects.cpp
    +++ b/src/game/SpellEffects.cpp
    @@ -954,7 +954,6 @@ void Spell::EffectDummy(SpellEffectIndex eff_idx)
    
                        pGameObj->SetRespawnTime(creatureTarget->GetRespawnTime()-time(NULL));
                        pGameObj->SetOwnerGUID(m_caster->GetGUID() );
    -                    pGameObj->SetUInt32Value(GAMEOBJECT_LEVEL, m_caster->getLevel() );
                        pGameObj->SetSpellId(m_spellInfo->Id);
    
                        creatureTarget->ForcedDespawn(); 
    

  9. for me

    if(GetAllSpellMechanicMask(m_spellProto) & (1 << MECHANIC_BLEED))

    didn't worked.

    function GetAllSpellMechanicMask is:

    inline uint32 GetAllSpellMechanicMask(SpellEntry const* spellInfo)

    {

    uint32 mask = 0;

    if (spellInfo->Mechanic)

    mask |= 1 << (spellInfo->Mechanic - 1);

    for (int i=0; i< 3; ++i)

    if (spellInfo->EffectMechanic)

    mask |= 1 << (spellInfo->EffectMechanic-1);

    return mask;

    }

    so i used if(GetAllSpellMechanicMask(m_spellProto) & (1 << (MECHANIC_BLEED - 1)))

    it's ok like this? :)

  10. it's ok if i use it like this? i'm begginer with mangos that i ask :)

    + // Mechanic bleed aura state

    + if(GetAllSpellMechanicMask(m_spellProto) & (1 << MECHANIC_BLEED))

    + m_target->ModifyAuraState(AURA_STATE_MECHANIC_BLEED, true);

    // Mechanic bleed aura state

    if (m_spellProto->Mechanic == MECHANIC_BLEED)

    m_target->ModifyAuraState(AURA_STATE_MECHANIC_BLEED, true);

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