Jump to content

thenecromancer

Members
  • Posts

    110
  • Joined

  • Last visited

    Never
  • Donations

    0.00 GBP 

Posts posted by thenecromancer

  1. Master branch automaticly mirrored on subversion would be nice ( if it is possible ) for non-devs to use and keep up with MaNGOS as well as to know on what they really are in just one number.

    On the other side 3rdP developers should like GIT much more, however using that thing on windows is still pain...

    EDIT: forgot about GIT usefulness for server admins as well, seems that GIT is really just windows unfriendly nothing more ...

  2. Icon of the debuff caused by this seal has been changed ( not sure when ) so this calculation is no logner used...

    Index: game/Unit.cpp
    ===================================================================
    --- game/Unit.cpp        (revision 6633)
    +++ game/Unit.cpp        (working copy)
    @@ -7360,7 +7360,7 @@
                                    CastingTime = 2555; 
                            }
                            // Seal of Vengeance - 17% per Fully Stacked Tick - 5 Applications
    -                        else if ((spellProto->SpellFamilyFlags & 0x80000000000LL) && spellProto->SpellIconID == 2040)
    +                        else if ((spellProto->SpellFamilyFlags & 0x80000000000LL) && spellProto->SpellIconID == 2292)
                            {
                                    DotFactor = 0.17f;
                                    CastingTime = 3500;

  3. I use effect to set a guid of person that has it threat redirected to, but then again it could be all done just with that dummy aura ( And probably going to redo it that way ). Well, Misdirection is currently only spell using this effect, but basicly redirection is aura not an effect ;), so it is probably very useless.

    Maybe for effect_immunity? Didn't check that yet...

  4. Well, you are right.

    But the problem is that it does not send value modified by % healing recieved auras ( eg. Mortal Strike ).

    This must send value changed by spellhealingbonus() anyway thanks you for your suggestion it must be a little different

    EDIT: updated first post with code correctly sending overheal

  5. SendHealSpellLog should send gain instead of new_damage * multiplier, otherwise it shows misleading numbers.

    Index: game/SpellAuras.cpp
    ===================================================================
    --- game/SpellAuras.cpp        (revision 6623)
    +++ game/SpellAuras.cpp        (working copy)
    @@ -5735,10 +5735,10 @@
    
                            int32 gain = pCaster->SpellHealingBonus(spellProto, uint32(new_damage * multiplier), DOT, pCaster);
    
    -                        gain = pCaster->ModifyHealth(gain);
    -                        pCaster->getHostilRefManager().threatAssist(pCaster, float(gain) * 0.5f, spellProto);
    +                        float realGain = float(pCaster->ModifyHealth(gain));
    +                        pCaster->getHostilRefManager().threatAssist(pCaster, realGain * 0.5f, spellProto);
    
    -                        pCaster->SendHealSpellLog(pCaster, spellProto->Id, uint32(new_damage * multiplier));
    +                        pCaster->SendHealSpellLog(pCaster, spellProto->Id, uint32(gain));
                            break;
                    }
                    case SPELL_AURA_PERIODIC_HEAL:

  6. Revision 6541

    This patch makes corpses looking yet more like players

    Hide helm/cloak option is applied to corpse

    Corpse guild field is filled, so guild tabards have correct graphics

    Index: game/Player.cpp
    ===================================================================
    --- game/Player.cpp        (revision 6541)
    +++ game/Player.cpp        (working copy)
    @@ -3700,9 +3700,15 @@
            uint32 flags = 0x04;
            if(InBattleGround())
                    flags |= 0x20;                                                                            // to be able to remove insignia
    +
    +        if(HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_HIDE_HELM))
    +                flags |= 0x08;
    +        if(HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_HIDE_CLOAK))
    +                flags |= 0x10;
    +
            corpse->SetUInt32Value( CORPSE_FIELD_FLAGS, flags );
    -
            corpse->SetUInt32Value( CORPSE_FIELD_DISPLAY_ID, GetNativeDisplayId() );
    +        corpse->SetUInt32Value( CORPSE_FIELD_GUILD, GetGuildId() );
    
            uint32 iDisplayID;
            uint16 iIventoryType;

  7. Well, you'd have to implement spells as scripts and it will still be useless, those numbers are not pointing to anything that is accessable for MaNGOS ( or at least I don't know of anything like that ). Unlike retail servers, ManGOS does not run spells as any scripts or programs, it just provides framework to run spells after data stored for client. While it would be much easier to implement things like this, it'd be barrely posible to provide scripts for almost 280k spells up there... And still you'd need to create scripts for spells to have something to override with ;)

  8. Well, straight on it, modifying the bits do not do the job ( take effect after relog or instance enter ).

    Workaround is to change display id to something and then set it back, that does also works. But needs a little more client resources.

    Does anyone know how to force client reload a character on run other than changing his display id?

  9. SPELLMOD_SPELL_BONUS_DAMAGE mods seems to be mods to spell damage coefficient, not to spell damage bonus itselfs

    This means for example that flat +20 SPELLMOD_SPELL_BONUS_DAMAGE mod increases spell damage contribution for instant spell from 0.42X to 0.62X

    previously it did increase it to 0.42*1.2X which is only 0.504X

    This affect mostly Empowered Arcane Missiles, talents like Empowered Fireball does nothing more, just because 1 + mod is same as 1*(1+mod)

    Index: game/Unit.cpp
    ===================================================================
    --- game/Unit.cpp        (revision 6405)
    +++ game/Unit.cpp        (working copy)
    @@ -7306,14 +7306,14 @@
            float LvlPenalty = CalculateLevelPenalty(spellProto);
    
            // Spellmod SpellDamage
    -        float SpellModSpellDamage = 100.0f;
    +        float CoefficientPtc = ((float)CastingTime/3500.0f)*DotFactor*100.0f;
    
            if(Player* modOwner = GetSpellModOwner())
    -                modOwner->ApplySpellMod(spellProto->Id,SPELLMOD_SPELL_BONUS_DAMAGE,SpellModSpellDamage);
    +                modOwner->ApplySpellMod(spellProto->Id,SPELLMOD_SPELL_BONUS_DAMAGE,CoefficientPtc);
    
    -        SpellModSpellDamage /= 100.0f;
    +        CoefficientPtc /= 100.0f;
    
    -        float DoneActualBenefit = DoneAdvertisedBenefit * (CastingTime / 3500.0f) * DotFactor * SpellModSpellDamage * LvlPenalty;
    +        float DoneActualBenefit = DoneAdvertisedBenefit * CoefficientPtc * LvlPenalty;
            float TakenActualBenefit = TakenAdvertisedBenefit * (CastingTime / 3500.0f) * DotFactor * LvlPenalty;
    
            float tmpDamage = (float(pdamage)+DoneActualBenefit)*DoneTotalMod;
    @@ -7638,14 +7638,14 @@
            float LvlPenalty = CalculateLevelPenalty(spellProto);
    
            // Spellmod SpellDamage
    -        float SpellModSpellDamage = 100.0f;
    +        float CoefficientPtc = ((float)CastingTime/3500.0f)*DotFactor*100.0f;
    
            if(Player* modOwner = GetSpellModOwner())
    -                modOwner->ApplySpellMod(spellProto->Id,SPELLMOD_SPELL_BONUS_DAMAGE,SpellModSpellDamage);
    +                modOwner->ApplySpellMod(spellProto->Id,SPELLMOD_SPELL_BONUS_DAMAGE,CoefficientPtc);
    
    -        SpellModSpellDamage /= 100.0f;
    +        CoefficientPtc /= 100.0f;
    
    -        float ActualBenefit = (float)AdvertisedBenefit * ((float)CastingTime / 3500.0f) * DotFactor * SpellModSpellDamage * LvlPenalty;
    +        float ActualBenefit = (float)AdvertisedBenefit * CoefficientPtc * LvlPenalty;
    
            // use float as more appropriate for negative values and percent applying
            float heal = healamount + ActualBenefit;

  10. AFAIK only player casted binary spell doing school damage is frostbolt ( but it can also crit unlike other binary spells ), but not sure if that was ever changed ( better said fixed ).

    On other side, all other spells can't crit, or be partialy resisted, this include all damage over time spells, and spells not doing school damage ( eg. Death Coil )

    I'm not sure about Immolate, as that thing can crit...

    Apply aura check is not safe, Pyroblast and Fireball both apply auras, but are definetly not binary

  11. There are problems that these spells can miss or be immuned, this is however not good at all.

    This solves problem with certain spell failing on immune targets, like charge ( not the stun part though ) not charging immune targets.

    I'm however not sure if this shouldn't work just for immunity part or for whole spell hit stage. ( Hard to tell, charge spells cannot indeed be resisted, also there are several spells in game that ignore spell miss chance, and for example will land even with mods like spell 31224 ) But idea is still the same...

    revision 6183

    Index: game/Unit.cpp
    ===================================================================
    --- game/Unit.cpp        (revision 6183)
    +++ game/Unit.cpp        (working copy)
    @@ -2697,6 +2697,9 @@
            if (pVictim->GetTypeId()==TYPEID_UNIT && ((Creature*)pVictim)->IsInEvadeMode())
                    return SPELL_MISS_EVADE;
    
    +        if(spell->Attributes & SPELL_ATTR_UNAFFECTED_BY_INVULNERABILITY)
    +                return SPELL_MISS_NONE;
    +
            // Check for immune (use charges)
            if (pVictim->IsImmunedToSpell(spell,true))
                    return SPELL_MISS_IMMUNE;

  12. Problem: Focus is not affected by SPELL_AURA_MOD_POWER_REGEN_PERCENT, this is however required for one talent to work

    Revision 6007

    note that this patch itselfs does not fix the talent, but it is required for it's fix, to have it fully working, pets must have aura 19589, and modifier from talent should affect it

    Index: game/Pet.cpp
    ===================================================================
    --- game/Pet.cpp        (revision 6007)
    +++ game/Pet.cpp        (working copy)
    @@ -570,6 +570,12 @@
            uint32 maxValue = GetMaxPower(POWER_FOCUS);
            if (curValue >= maxValue) return;
            uint32 addvalue = 25;
    +
    +        AuraList const& ModPowerRegenPCTAuras = GetAurasByType(SPELL_AURA_MOD_POWER_REGEN_PERCENT);
    +        for(AuraList::const_iterator i = ModPowerRegenPCTAuras.begin(); i != ModPowerRegenPCTAuras.end(); ++i)
    +                if ((*i)->GetModifier()->m_miscvalue == POWER_FOCUS)
    +                        addvalue *= ((*i)->GetModifier()->m_amount + 100) / 100.0;
    +
            ModifyPower(POWER_FOCUS, addvalue);
    }

  13. It'd be good to create also patch thread about recent bug where players begin to walk after charge abilities or when reciviewing fear

    players never have m_unit_movement_flags set, only in confuse movement generator

    Index: game/Player.cpp
    ===================================================================
    --- game/Player.cpp        (revision 5656)
    +++ game/Player.cpp        (working copy)
    @@ -125,6 +125,9 @@
            // this must help in case next save after mass player load after server startup
            m_nextSave = rand32(m_nextSave/2,m_nextSave*3/2);
    
    +        // initialize movement flags
    +        m_unit_movement_flags = MOVEMENT_FLAG_RUN;
    +
            m_resurrectGUID = 0;
            m_resurrectX = m_resurrectY = m_resurrectZ = 0;
            m_resurrectHealth = m_resurrectMana = 0;

  14. Problem: If you use Finishing move that does not attack target in effect it is possible to completly avoid CP usage

    How to repeat: You just need to clear your m_attacking, for that just use macro for example

    /cast Expose Armor /stopattack

    In my opinion if you use Finishing move it shouldn't matter if you are attacking or not, also should be impossible to cast on another target ( and if that happens, our Combo Points should be still cleared to prevent cheating )

    Index: game/Player.cpp
    ===================================================================
    --- game/Player.cpp        (revision 5672)
    +++ game/Player.cpp        (working copy)
    @@ -2709,7 +2709,7 @@
                    spellInfo->EffectPointsPerComboPoint[1] != 0 ||
                    spellInfo->EffectPointsPerComboPoint[2] != 0;
    
    -        if(comboDamageUsed &&    m_attacking && (m_attacking->GetGUID() == GetComboTarget()))
    +        if(comboDamageUsed)
                    needClearCombo = true;
    
            // Check in duration calculations

  15. Index: game/Player.cpp
    ===================================================================
    --- game/Player.cpp        (revision 5656)
    +++ game/Player.cpp        (working copy)
    @@ -2723,6 +2723,9 @@
            // overpower - need reset combopoints
            else if(spellInfo->SpellFamilyName == SPELLFAMILY_WARRIOR && (spellInfo->SpellFamilyFlags & 0x4))
                    needClearCombo = true;
    +        // Envenom
    +        else if(spellInfo->SpellFamilyName == SPELLFAMILY_ROGUE && (spellInfo->SpellFamilyFlags & 0x800000000LL))
    +                needClearCombo = true;
    
            // Reset if need
            if (needClearCombo)

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