Jump to content

Sarjuuk

Members
  • Posts

    99
  • Joined

  • Last visited

  • Donations

    0.00 GBP 

Everything posted by Sarjuuk

  1. hmmm... I put the Enrage-Remove-Thing into SpellAura::PeriodicEnergize(), more exactly, there into the else{} of if(apply). But the rest is more or less exactly the same.
  2. the real thing... What bug does the patch fix? What features does the patch add? limits energy-conversion of Ferocious Bite to max 30 points For which repository revision was the patch created? master @ b9d2db3a3737ec795b34fb755851c0c65afd5999 Is there a thread in the bug report section or at lighthouse? none.. Who has been writing this patch? ah well ... dunno Patch [Download]
  3. had some spare time updated to: master @ b9d2db3a3737ec795b34fb755851c0c65afd5999 fixed an issue in mask generation by shiftig. ... I still wonder how the hell it worked initially. /E: small fix - reset a missplaced break, preventing most cirtical strikes in melee >_> - added IconID-Check to prevent Rip to benefit from Rend and Tears +crit
  4. So no, you can't just simply remove the energy reset. Check how much is left and set it to abs(current energy - 30). You'd need to modify the damage-Formula too
  5. Energy should regenerate independent from the current form you're in (much like Mana). With each rank of this talent you're allowed to keep 20*rank of it. This was changed to prohibit Powershifting. Now you'd end up with roughly the same energy after a powershift, even with maxed Furor. What you patch does, is to give 20*rank energy to the user after each shift, independent of what he had, when leaving Cat. So.. noooo, not a good way This is an old fix of mine. Maybe it gives an idea how it should work (even if its done in an unacceptable way^^) http://spezies0815.datearea.de/index.php?s=diff&n=Furor.diff
  6. this patch interacts witth code, that got changed petty heavy up to now. in short: i should rewrite it, but i've currently no spare time for this :<
  7. Hmm, i don't see how this could work out, especially in the case of Deathknights. In this case, i'd need to add up to four stackable Auras to his target (one for each possible disease), and i don't know, from where to pull them off. Mind you, the spells i posted in the original post get applied to the caster, when equiping the coresponding Glyph. Spells, like the one you posted, exist one for each Glyph and sadly are just ScriptEffects. What i could try, is to solve this with already existent variables, like Charges. But i'd expect visual side-effects like a number on the Debuff-Icon in this case.
  8. not related and no idea how to do this...
  9. What bug does the patch fix? What features does the patch add? * Adds a counter to the SpellAura-Object. This is used to fix four Glyphes, that extend the duration of one or more specific Auras by a set amount, if hit by a special spell. * Implements those four Glyphs of..: * Scourge Strike* Shred* Starfire* Backstab For which repository revision was the patch created? r8630 Is there a thread in the bug report section or at lighthouse? found none Who has been writing this patch? Sarjuuk Patch DELETE FROM `spell_proc_event` WHERE `entry` IN (54845, 54815, 56800, 58642); INSERT INTO `spell_proc_event` VALUES (54845, 0, 7, 4, 0, 0, 196608, 0, 0, 100, 0), -- Starfire extends Moonfire (54815, 0, 7, 32768, 0, 0, 69904, 0, 0, 100, 0), -- Shred extends Rip (56800, 0, 8, 8388612, 0, 0, 69904, 0, 0, 100, 0), -- Backstab extends Rupture (58642, 0, 15, 0, 134217728, 0, 69904, 0, 0, 100, 0); -- Scourge Strike extends Diseases diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 27d2e74..5b0d396 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -383,6 +383,8 @@ m_isRemovedOnShapeLost(true), m_in_use(0), m_deleted(false) m_applyTime = time(NULL); + m_durationExtends = 3; // Aura Duration may be extended by up to three times + int32 damage; if(!caster) { diff --git a/src/game/SpellAuras.h b/src/game/SpellAuras.h index 3973382..28ac91c 100644 --- a/src/game/SpellAuras.h +++ b/src/game/SpellAuras.h @@ -234,7 +234,7 @@ class MANGOS_DLL_SPEC Aura void SetAuraDuration(int32 duration) { m_duration = duration; } time_t GetAuraApplyTime() { return m_applyTime; } - SpellModifier *getAuraSpellMod() {return m_spellmod; } + SpellModifier *getAuraSpellMod() { return m_spellmod; } uint64 const& GetCasterGUID() const { return m_caster_guid; } Unit* GetCaster() const; @@ -277,11 +277,14 @@ class MANGOS_DLL_SPEC Aura void SetAura(bool remove) { m_target->SetVisibleAura(m_auraSlot, remove ? 0 : GetId()); } void SendAuraUpdate(bool remove); - int8 GetStackAmount() {return m_stackAmount;} + int8 GetStackAmount() { return m_stackAmount; } void SetStackAmount(uint8 num); bool modStackAmount(int32 num); // return true if last charge dropped void RefreshAura(); + int8 GetDurationExtends() { return m_durationExtends; } + void UpdateDurationExtends() { m_durationExtends -= m_durationExtends ? 1 : 0; } + bool IsPositive() { return m_positive; } void SetNegative() { m_positive = false; } void SetPositive() { m_positive = true; } @@ -293,8 +296,8 @@ class MANGOS_DLL_SPEC Aura bool IsPersistent() const { return m_isPersistent; } bool IsDeathPersistent() const { return m_isDeathPersist; } bool IsRemovedOnShapeLost() const { return m_isRemovedOnShapeLost; } - bool IsInUse() const { return m_in_use;} - bool IsDeleted() const { return m_deleted;} + bool IsInUse() const { return m_in_use; } + bool IsDeleted() const { return m_deleted; } void SetInUse(bool state) { @@ -312,8 +315,8 @@ class MANGOS_DLL_SPEC Aura void _AddAura(); bool _RemoveAura(); - bool IsSingleTarget() {return m_isSingleTargetAura;} - void SetIsSingleTarget(bool val) { m_isSingleTargetAura = val;} + bool IsSingleTarget() { return m_isSingleTargetAura; } + void SetIsSingleTarget(bool val) { m_isSingleTargetAura = val; } void SetRemoveMode(AuraRemoveMode mode) { m_removeMode = mode; } @@ -369,6 +372,7 @@ class MANGOS_DLL_SPEC Aura uint8 m_auraLevel; // Aura level (store caster level for correct show level dep amount) uint8 m_procCharges; // Aura charges (0 for infinite) uint8 m_stackAmount; // Aura stack amount + uint8 m_durationExtends; // Remaining Aura extends bool m_positive:1; bool m_permanent:1; diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index b803a90..07444ee 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -4820,12 +4820,40 @@ void Spell::EffectScriptEffect(uint32 effIndex) { // TODO: we must implement hunter pet summon at login there (spell 6962) + uint64 targetFlags1 = UI64LIT(0x0); // SpellFamilyFlags for Aura that is to be extended + uint16 targetFlags2 = UI64LIT(0x0); + switch(m_spellInfo->SpellFamilyName) { case SPELLFAMILY_GENERIC: { switch(m_spellInfo->Id) { + // Glyph of Starfire : Starfire extends Moonfire + case 54846: + { + targetFlags1 = UI64LIT(0x00000002); + break; + } + // Glyph of Shred : Shred extends Rip + case 63974: + { + targetFlags1 = UI64LIT(0x00800000); + break; + } + // Glyph of Backstab : Backstab extends Rupture + case 63975: + { + targetFlags1 = UI64LIT(0x00100000); + break; + } + // Glyph of Scourge Strike : Scourge Strike extends Diseases + case 69961: + { + targetFlags1 = UI64LIT(0x0600080000000000); + targetFlags2 = UI64LIT(0x0052); + break; + } // PX-238 Winter Wondervolt TRAP case 26275: { @@ -5505,6 +5533,37 @@ void Spell::EffectScriptEffect(uint32 effIndex) } } + // Extend remaining Aura duration + if((targetFlags1 || targetFlags2) && unitTarget) + { + Unit::AuraMap const& auras = unitTarget->GetAuras(); + for(Unit::AuraMap::const_iterator itr = auras.begin(); itr != auras.end(); ++itr) + { + // Only extend expected Auras (SpellFamily is checked through CasterGUID) + if(targetFlags1 && !(itr->second->GetSpellProto()->SpellFamilyFlags & targetFlags1)) + continue; + + if(targetFlags2 && !(itr->second->GetSpellProto()->SpellFamilyFlags2 & targetFlags2)) + continue; + + // Aura must be owned by Caster + if(itr->second->GetCaster()->GetGUID() != m_caster->GetGUID()) + continue; + + // Aura must not be extended more than three times + if(!itr->second->GetDurationExtends()) + continue; + + // Decremet remaining extends and prolong Aura + itr->second->UpdateDurationExtends(); + + // Use fixed amount [3000ms], if one of the corresponding Spells is cast directly.. (read: would cause crash otherwise) + int addtime = m_triggeredByAuraSpell ? (m_triggeredByAuraSpell->EffectBasePoints[0] + 1) * 1000 : 3000; + itr->second->SetAuraDuration(itr->second->GetAuraDuration() + addtime); + itr->second->SendAuraUpdate(false); + } + } + // normal DB scripted effect if(!unitTarget) return; diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 868905b..9332967 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -5025,6 +5025,12 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu } return true; } + // Glyph of Scourge Strike ScriptEffect-Proc + case 58642: + { + triggered_spell_id = 69961; + break; + } } break; } @@ -5542,6 +5548,18 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu triggered_spell_id = 32747; break; } + // Glyph of Shred ScriptEffect-Proc + case 54815: + { + triggered_spell_id = 63974; + break; + } + // Glyph of Starfire ScriptEffect-Proc + case 54845: + { + triggered_spell_id = 54846; + break; + } } // Eclipse if (dummySpell->SpellIconID == 2856) @@ -5614,6 +5632,12 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu triggered_spell_id = 32747; break; } + // Glyph of Backstab ScriptEffect-Proc + case 56800: + { + triggered_spell_id = 63975; + break; + } } // Cut to the Chase if (dummySpell->SpellIconID == 2909) Notes The Flag for the Deathknight Diseases is composed from these four spells. You may yell at me, if i forgot one Name: FamilyFlags 3 FamilyFlags 1+2 Blood Plague: 0x02 0x0200080000000000 Frost Fever: 0x02 0x0400080000000000 Crypt Fever: 0x10 0x0 Ebon Plague: 0x40 0x0000080000000000 Currently it is possible to push the current duration beyond the initial duration. Eg. backstabbing, right after applying Rupture. It would be nice, if someone could confirm or deny, whether this is official behavior. Thank You /e: Behavior confirmed. It is possible, to put an aura over its initial duration. I even have Screenshots to prove it, if needed
  10. I'm still curious, what it does.^^
  11. Well.. if multiple Auras with MECHANIC_BLEED are on the target and one runs out, AURA_STATE_MECHANIC_BLEED is turned off.. regardless of the still active auras. so // Mechanic bleed aura state if(GetAllSpellMechanicMask(m_spellProto) & (1 << MECHANIC_BLEED)) m_target->ModifyAuraState(AURA_STATE_MECHANIC_BLEED, false); should be more like // Mechanic bleed aura state if(GetAllSpellMechanicMask(m_spellProto) & (1 << MECHANIC_BLEED)) { 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)) { found = true; break; } } if(!found) m_target->ModifyAuraState(AURA_STATE_MECHANIC_BLEED, false); }
  12. it's note quite free of bugs yet..
  13. Spells like Deep Freeze need AuraState:4 (Frozen) set, to be usable. So, instead of modifying Unit::isFrozen(), i'd suggest to add Aura::HandleAuraFingersOfFrost() (or whatever you'd like to call it) and set/remove the AuraState there and i've no idea, why the charges aren't working
  14. updated to current revision in first post... /e: updated without bumping
  15. Updated to: master @ b9d2db3a3737ec795b34fb755851c0c65afd5999 Features: - Corrected Base Paw Damage to 54.8 dps - Reviewed AP-Gain from Level for Druids (and removed double benefit in Feral Forms) - Implemented Spell:16972 and Ranks eff:1 Author: vdpqtc, Sarjuuk Patch: diff --git a/src/game/StatSystem.cpp b/src/game/StatSystem.cpp index 32dc01b..ea6b291 100644 --- a/src/game/StatSystem.cpp +++ b/src/game/StatSystem.cpp @@ -289,7 +289,8 @@ void Player::UpdateAttackPowerAndDamage(bool ranged ) case CLASS_DRUID: { //Check if Predatory Strikes is skilled - float mLevelMult = 0.0; + float mLevelMult = 0.0f; + float mBonusWeaponAtt = 0.0f; switch(m_form) { case FORM_CAT: @@ -301,9 +302,12 @@ void Player::UpdateAttackPowerAndDamage(bool ranged ) for(Unit::AuraList::const_iterator itr = mDummy.begin(); itr != mDummy.end(); ++itr) { // Predatory Strikes (effect 0) - if ((*itr)->GetEffIndex()==0 && (*itr)->GetSpellProto()->SpellIconID == 1563) + if ((*itr)->GetSpellProto()->SpellIconID == 1563 && (*itr)->GetEffIndex() == 0 && IsInFeralForm()) + mLevelMult = getLevel() * (*itr)->GetModifier()->m_amount / 100.0f; + // Predatory Strikes (effect 1) + else if ((*itr)->GetSpellProto()->SpellIconID == 1563 && (*itr)->GetEffIndex() == 1) { - mLevelMult = (*itr)->GetModifier()->m_amount / 100.0f; + mBonusWeaponAtt = (*itr)->GetModifier()->m_amount * m_baseFeralAP / 100.0f; break; } } @@ -315,12 +319,12 @@ void Player::UpdateAttackPowerAndDamage(bool ranged ) switch(m_form) { case FORM_CAT: - val2 = getLevel()*(mLevelMult+2.0f) + GetStat(STAT_STRENGTH)*2.0f + GetStat(STAT_AGILITY) - 20.0f + m_baseFeralAP; break; + val2 = GetStat(STAT_STRENGTH)*2.0f + GetStat(STAT_AGILITY) - 20.0f + mLevelMult + m_baseFeralAP + mBonusWeaponAtt; break; case FORM_BEAR: case FORM_DIREBEAR: - val2 = getLevel()*(mLevelMult+3.0f) + GetStat(STAT_STRENGTH)*2.0f - 20.0f + m_baseFeralAP; break; + val2 = GetStat(STAT_STRENGTH)*2.0f - 20.0f + mLevelMult + m_baseFeralAP + mBonusWeaponAtt; break; case FORM_MOONKIN: - val2 = getLevel()*(mLevelMult+1.5f) + GetStat(STAT_STRENGTH)*2.0f - 20.0f + m_baseFeralAP; break; + val2 = GetStat(STAT_STRENGTH)*2.0f - 20.0f + m_baseFeralAP + mBonusWeaponAtt; break; default: val2 = GetStat(STAT_STRENGTH)*2.0f - 20.0f; break; } @@ -424,8 +428,8 @@ void Player::CalculateMinMaxDamage(WeaponAttackType attType, bool normalized, fl uint32 lvl = getLevel(); if ( lvl > 60 ) lvl = 60; - weapon_mindamage = lvl*0.85*att_speed; - weapon_maxdamage = lvl*1.25*att_speed; + weapon_mindamage = lvl*0.714*att_speed; + weapon_maxdamage = lvl*1.114*att_speed; } else if(!IsUseEquipedWeapon(attType==BASE_ATTACK)) //check if player not in form but still can't use weapon (broken/etc) {
  16. hmm, i thought i read somewhere, sometime, that UPDATE-statements are .. disliked I'd suggest to use a DELETE FROM -> INSERT INTO -sequence like for the noise machine. (: /e: and maybe sort the engeneering-trinkets out, as they are already posted. (or at least name the author)
  17. the comments i've found would suggest, that an increased consume would increase the chance to become pygmified. Sooo... What about getting the stack-count of this size-buff (ID:53805) and roll it against a rand(0, 10). You'd get the Pygm!-Buff definitly with the tenth stack and with a median of 6 or 7 stacks of the size-buff. eg: if(stackcount <= rand(0, 10)) spell_id = 53805; // You feel a little smaller buff. else spell_id = 53806; // 10min Pygmified buff. wowwiki: "At 10 stacks you are transformed into a voodoo gnome" wowhead: "This is the buff u get from drinking 6 - 10 Pygmy Oils in a row"
  18. hmmm, right.. i could throw "&& (m_caster->m_form == FORM_BEAR || m_caster->m_form == FORM_DIREBEAR)" out. but wouldn't this cause ugly errors in the combat log, if used as Cat? eg: "Failed to cast Faerie Fire (Feral) (Must be in $stance)"
  19. The Spell itself is not used. There is a point (in dps) where Feral base dps stops scaling with level and starts scaling with weapon-dps more or less seamlessly. As Feral base-damage was implemented the spell didn't exist yet and it was an awful guesswork to figure out, how much it should be. (Maybe i'll find the old thread. Feral damage was roughly halved in the process .. doesn't matter) So, basically i just used this spell to back my argumentation up, how much base damage a feral druid should have^^ In my opinion, at lvl 60 it.. should be: 54.81 dps currently is: 63.00 dps
  20. What bug does the patch fix? Druid Nuker Tier5 4pc: will now increase the total damage of Starfire, not only the base damage like before. For which repository revision was the patch created? mangos-0.12 @ bb035e6d9d3f7bf2c0a134dfa550434a37c1429c Is there a thread in the bug report section or at lighthouse? nope Who has been writing this patch? Sarjuuk Description Essentially, I just moved the calculation from Spell::EffectSchoolDMG() to Unit::SpellDamageBonus() under // .. taken pct: scripted. (: Patch diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index 8b7e1ca..c1252b9 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -420,34 +420,10 @@ void Spell::EffectSchoolDMG(uint32 effect_idx) // Starfire else if ( m_spellInfo->SpellFamilyFlags & UI64LIT(0x0004)) { - Unit::AuraList const& m_OverrideClassScript = m_caster->GetAurasByType(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS); - for(Unit::AuraList::const_iterator i = m_OverrideClassScript.begin(); i != m_OverrideClassScript.end(); ++i) - { - // Starfire Bonus (caster) - switch((*i)->GetModifier()->m_miscvalue) - { - case 5481: // Nordrassil Regalia - bonus - { - Unit::AuraList const& m_periodicDamageAuras = unitTarget->GetAurasByType(SPELL_AURA_PERIODIC_DAMAGE); - for(Unit::AuraList::const_iterator itr = m_periodicDamageAuras.begin(); itr != m_periodicDamageAuras.end(); ++itr) - { - // Moonfire or Insect Swarm (target debuff from any casters) - if ( (*itr)->GetSpellProto()->SpellFamilyFlags & UI64LIT(0x00200002)) - { - int32 mod = (*i)->GetModifier()->m_amount; - damage += damage*mod/100; - break; - } - } - break; - } - case 5148: //Improved Starfire - Ivory Idol of the Moongoddes Aura - { - damage += (*i)->GetModifier()->m_amount; - break; - } - } - } + //Improved Starfire - Ivory Idol of the Moongoddes Aura + Aura* aur = m_caster->GetAura(34292,0); + if (aur) + damage += aur->GetModifier()->m_amount; } //Mangle Bonus for the initial damage of Lacerate and Rake if ((m_spellInfo->SpellFamilyFlags==UI64LIT(0x0000000000001000) && m_spellInfo->SpellIconID==494) || diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index e1badd4..76a6a1a 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -7507,10 +7507,30 @@ uint32 Unit::SpellDamageBonus(Unit *pVictim, SpellEntry const *spellProto, uint3 { switch((*i)->GetModifier()->m_miscvalue) { - //Molten Fury - case 4920: case 4919: - if(pVictim->HasAuraState(AURA_STATE_HEALTHLESS_20_PERCENT)) - TakenTotalMod *= (100.0f+(*i)->GetModifier()->m_amount)/100.0f; break; + // Molten Fury + case 4920: + case 4919: + if (pVictim->HasAuraState(AURA_STATE_HEALTHLESS_20_PERCENT)) + TakenTotalMod *= (100.0f+(*i)->GetModifier()->m_amount) / 100.0f; + break; + // Nordrassil Regalia - Bonus + case 5481: + { + if (!spellProto->SpellFamilyFlags & UI64LIT(0x0004) || spellProto->SpellFamilyName != SPELLFAMILY_DRUID) + break; + + Unit::AuraList const& m_periodicDamageAuras = pVictim->GetAurasByType(SPELL_AURA_PERIODIC_DAMAGE); + for(Unit::AuraList::const_iterator itr = m_periodicDamageAuras.begin(); itr != m_periodicDamageAuras.end(); ++itr) + { + // Moonfire or Insect Swarm (target debuff from any casters) + if ((*itr)->GetSpellProto()->SpellFamilyFlags & UI64LIT(0x00200002)) + { + TakenTotalMod *= (100.0f+(*i)->GetModifier()->m_amount)/100.0f; + break; + } + } + break; + } } }
  21. nice idea, definitely better than my first;) /e: ok, nitpicking first uint16 mBonusWeaponAtt = 0.0; considering, you want a float in the end, i'd suggest to initialize it as one :> +// case FORM_MOONKIN: Sorry, no can do! While its true, that Moonkin Form doesn't gain AP from Effect0 any longer (and thankfully doesn't need to) Feral Attack power on Weapons still include Moonkin Form. And while its perfectly senseless to use, Effect1 of this talent will affect the AP gained from weapons.. even if its a Moonkin... and last: coding style *cough* Now the sad and serious stuff: 1) Currently, any form gains double benefit from Attackpower per level. To check this, simply strip you druid of any armor and use a form of some kind. The Attackpower-Tooltip will read something like this (combine the numbers) for example Cat: [str*2+Agi-20+Lvl*2] + [Lvl*2] as the Bonus is added through the respective Form passives it doesn't have to be hardcoded. So i threw it out 2) BasepawDamage is unfortunately too high too. (lvl*0.85*att_speed + lvl*1.25*att_speed) / 2 => 63 dps It should be 54.81dps as hinted by this spell and like it's already correctly implemented in ItemPrototype.h -> getFeralBonus() 3) Moonkins don't gain AP per Level any more. This was changed in 3.0.2 but was still in the code up to now. Patch: see below
  22. Duh.. Why am i always overlooking such things >< Finally getting rid of this SpellIcon-Check-Monstrosity?
  23. duh, stupid me. Should have looked for periodic triggers. also forgot this ACE_LITERAL-thing corrected it in above post mod_melee_slow added also.. but wouldn't it it also be affected by cast-speed and ranged-speed slowing effects..?
×
×
  • 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