Jump to content

breakwater

Members
  • Posts

    166
  • Joined

  • Last visited

    Never
  • Donations

    0.00 GBP 

Everything posted by breakwater

  1. You must make a DB update: UPDATE `spell_proc_event` SET `procFlags`='1048576',`procEx`='0' WHERE (`entry`='974') I have a server with a revision of 10154. I hope it still correct. for information, a small table enum ProcFlags { PROC_FLAG_NONE = 0x00000000, PROC_FLAG_KILLED = 0x00000001, // 00 Killed by aggressor PROC_FLAG_KILL = 0x00000002, // 01 Kill target (in most cases need XP/Honor reward, see Unit::IsTriggeredAtSpellProcEvent for additinoal check) PROC_FLAG_SUCCESSFUL_MELEE_HIT = 0x00000004, // 02 Successful melee auto attack PROC_FLAG_TAKEN_MELEE_HIT = 0x00000008, // 03 Taken damage from melee auto attack hit PROC_FLAG_SUCCESSFUL_MELEE_SPELL_HIT = 0x00000010, // 04 Successful attack by Spell that use melee weapon PROC_FLAG_TAKEN_MELEE_SPELL_HIT = 0x00000020, // 05 Taken damage by Spell that use melee weapon PROC_FLAG_SUCCESSFUL_RANGED_HIT = 0x00000040, // 06 Successful Ranged auto attack PROC_FLAG_TAKEN_RANGED_HIT = 0x00000080, // 07 Taken damage from ranged auto attack PROC_FLAG_SUCCESSFUL_RANGED_SPELL_HIT = 0x00000100, // 08 Successful Ranged attack by Spell that use ranged weapon PROC_FLAG_TAKEN_RANGED_SPELL_HIT = 0x00000200, // 09 Taken damage by Spell that use ranged weapon PROC_FLAG_SUCCESSFUL_POSITIVE_AOE_HIT = 0x00000400, // 10 Successful AoE (not 100% shure unused) PROC_FLAG_TAKEN_POSITIVE_AOE = 0x00000800, // 11 Taken AoE (not 100% shure unused) PROC_FLAG_SUCCESSFUL_AOE_SPELL_HIT = 0x00001000, // 12 Successful AoE damage spell hit (not 100% shure unused) PROC_FLAG_TAKEN_AOE_SPELL_HIT = 0x00002000, // 13 Taken AoE damage spell hit (not 100% shure unused) PROC_FLAG_SUCCESSFUL_POSITIVE_SPELL = 0x00004000, // 14 Successful cast positive spell (by default only on healing) PROC_FLAG_TAKEN_POSITIVE_SPELL = 0x00008000, // 15 Taken positive spell hit (by default only on healing) PROC_FLAG_SUCCESSFUL_NEGATIVE_SPELL_HIT = 0x00010000, // 16 Successful negative spell cast (by default only on damage) PROC_FLAG_TAKEN_NEGATIVE_SPELL_HIT = 0x00020000, // 17 Taken negative spell (by default only on damage) PROC_FLAG_ON_DO_PERIODIC = 0x00040000, // 18 Successful do periodic (damage / healing, determined from 14-17 flags) PROC_FLAG_ON_TAKE_PERIODIC = 0x00080000, // 19 Taken spell periodic (damage / healing, determined from 14-17 flags) PROC_FLAG_TAKEN_ANY_DAMAGE = 0x00100000, // 20 Taken any damage PROC_FLAG_ON_TRAP_ACTIVATION = 0x00200000, // 21 On trap activation PROC_FLAG_TAKEN_OFFHAND_HIT = 0x00400000, // 22 Taken off-hand melee attacks(not used) PROC_FLAG_SUCCESSFUL_OFFHAND_HIT = 0x00800000 // 23 Successful off-hand melee attacks };
  2. How do you know that is a procchance of 50%?
  3. To my knowledge, judgment of Light / Wisdom must have a Procchance of 100%. If you don't want this, you can enter a cooldown, and / or procchance in the table Spell_proc_event . I think judgment of Light / Wisdom is in table with entry 53408 and 20271.
  4. I added the aura of "Cheat Death", because it is no longer activated after death. Maybe one of you sees a possibility to activate "Cheat Death" after death. My Revision: 10154 diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index f2d4b5e..1232216 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -1917,10 +1917,40 @@ void Unit::CalculateAbsorbAndResist(Unit *pCaster, SpellSchoolMask schoolMask, D bool existExpired = false; // Incanter's Absorption, for converting to spell power int32 incanterAbsorption = 0; + if(GetTypeId() == TYPEID_PLAYER ) + { + Player* temp_player = ((Player*)this); + + if (temp_player->getClass() == CLASS_ROGUE && !(temp_player->HasAura(31228) || temp_player->HasAura (31229) || temp_player->HasAura(31230))) + { + SpellEntry const *spellInfo = temp_player->GetKnownTalentRankById(1722); + if(spellInfo) + { + for(uint32 i = 0; i < MAX_EFFECT_INDEX; ++i) + { + uint8 eff = spellInfo->Effect[i]; + if (eff>=TOTAL_SPELL_EFFECTS) + continue; + if( IsAreaAuraEffect(eff) || + eff == SPELL_EFFECT_APPLY_AURA || + eff == SPELL_EFFECT_PERSISTENT_AREA_AURA ) + { + Aura *Aur = CreateAura(spellInfo, SpellEffectIndex(i), NULL, this); + temp_player->AddAura(Aur); + } + + } + }else{ + temp_player->RemoveAurasDueToSpell(31228); + temp_player->RemoveAurasDueToSpell(31229); + temp_player->RemoveAurasDueToSpell(31230); + } + } + } // absorb without mana cost AuraList const& vSchoolAbsorb = GetAurasByType(SPELL_AURA_SCHOOL_ABSORB); for(AuraList::const_iterator i = vSchoolAbsorb.begin(); i != vSchoolAbsorb.end() && RemainingDamage > 0; ++i) { Modifier* mod = (*i)->GetModifier();
  5. In my investigations I have found the problem, but could not find a proper solution. The problem is: The rogue has not the special aura of Cheat Death, after he has died or has lost a duel. Cheat Death Rank 1 Cheat Death Rank 2 Cheat Death Rank 3 Why the rogue loses the aura? Have anyone Ideas?
  6. What means: m_spellInfo->SpellFamilyFlags & UI64LIT(0x00004000000000) in Mangos code often in use.
  7. Ahhh now i know how it works. The Numbers are from Spell.dbc simple addition of rows 209 or 210. Thanks Maxxie can the update for right proc in master?? UPDATE `spell_proc_event` SET `SpellFamilyMask0`='16393' WHERE (`entry`='47201') for Everlasting Affliction UPDATE `spell_proc_event` SET `procEx`='67' WHERE (`entry`='58872') for Damage Shield UPDATE `spell_proc_event` SET `procEx`='112' WHERE (`entry`='12298') for Shield Specialization UPDATE `spell_proc_event` SET `procEx`='1' WHERE (`entry`='17793') for Improved Shadow Bolt
  8. thank you for your quick response Sry not all. From where you get the numbers? 1- Shadow Bolt? 16384 - Drain Soul? Why works Drain Life and Haunt? I hope someone can help me.
  9. I think the solution lies in this part void WorldSession::HandleSpellClick( WorldPacket & recv_data ) { uint64 guid; recv_data >> guid; if (_player->isInCombat()) // client prevent click and set different icon at combat state return; Creature *unit = _player->GetMap()->GetCreatureOrPetOrVehicle(guid); if (!unit || unit->isInCombat()) // client prevent click and set different icon at combat state return; SpellClickInfoMapBounds clickPair = sObjectMgr.GetSpellClickInfoMapBounds(unit->GetEntry()); for(SpellClickInfoMap::const_iterator itr = clickPair.first; itr != clickPair.second; ++itr) { if (itr->second.IsFitToRequirements(_player)) { Unit *caster = (itr->second.castFlags & 0x1) ? (Unit*)_player : (Unit*)unit; Unit *target = (itr->second.castFlags & 0x2) ? (Unit*)_player : (Unit*)unit; caster->CastSpell(target, itr->second.spellId, true); } } } Anyone Ideas?
  10. Update for Revision 10091 Code with Glyph of Lightwell BUG: not useable in combat. have anyone ideas? btw bumb diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index c02a49f..168d34a 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -2461,6 +2461,10 @@ void Aura::HandleAuraDummy(bool apply, bool Real) case 58591: // Stoneclaw Totem X m_target->CastSpell(m_target, 58585, true); return; + case 59907: // Lightwell charges + if (m_target->GetTypeId() == TYPEID_UNIT) + ((Creature*)m_target)->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK); + return; case 62061: // Festive Holiday Mount if (m_target->HasAuraType(SPELL_AURA_MOUNTED)) // Reindeer Transformation @@ -2711,6 +2715,12 @@ void Aura::HandleAuraDummy(bool apply, bool Real) caster->RemoveAurasDueToSpell(34027); return; } + case 59907: // Lightwell charges - despawn creature if no charges remain + { + if (m_target->GetTypeId() == TYPEID_UNIT) + ((Creature*)m_target)->AddObjectToRemoveList(); + return; + } } // Living Bomb if (m_spellProto->SpellFamilyName == SPELLFAMILY_MAGE && (m_spellProto->SpellFamilyFlags & UI64LIT(0x2000000000000))) diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index 7ded7bf..0860f25 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -6150,6 +6150,37 @@ void Spell::EffectScriptEffect(SpellEffectIndex eff_idx) unitTarget->CastSpell(unitTarget, 59943, true); return; } + case 60123: // Lightwell Renew + { + Unit* creator = Unit::GetUnit(*m_caster, m_caster->GetCreatorGUID()); + if (!unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER || + !creator || creator->GetTypeId() != TYPEID_PLAYER || + ((Player*)unitTarget)->GetTeam() != ((Player*)creator)->GetTeam()) + return; + + uint32 renewSpell = 0; + switch(m_caster->GetEntry()) + { + case 31897: renewSpell = 7001; break; + case 31896: renewSpell = 27873; break; + case 31895: renewSpell = 27874; break; + case 31894: renewSpell = 28276; break; + case 31893: renewSpell = 48084; break; + case 31883: renewSpell = 48085; break; + default: break; + } + if (const SpellEntry *pSpell = sSpellStore.LookupEntry(renewSpell)) + { + damage = pSpell->EffectBasePoints[EFFECT_INDEX_0]; + if (Aura *dummy = creator->GetDummyAura(55673)) + { + damage += damage * dummy->GetModifier()->m_amount /100.0f; + } + } + m_caster->CastCustomSpell(unitTarget, renewSpell, &damage, NULL, NULL, true, NULL, NULL, m_originalCasterGUID); + if (Aura* aur = m_caster->GetAura(59907, EFFECT_INDEX_0)) + { + if (aur->GetAuraCharges() > 1) + aur->DropAuraCharge(); + else m_caster->RemoveAura(aur); + } + return; + } // random spell learn instead placeholder case 60893: // Northrend Alchemy Research case 61177: // Northrend Inscription Research Also need sql data
  11. I think that is better. // found Immolate or Shadowflame if (aura) { int32 damagetick = aura->GetModifier()->m_amount; damage += damagetick * 3; m_currentBasePoints[1]=damage * 2/15; // Glyph of Conflagrate if (!m_caster->HasAura(56235)) unitTarget->RemoveAurasByCasterSpell(aura->GetId(), m_caster->GetGUID()); break; } In this fix, Conflagrate(Dot)-hit makes exactly 40% dmg of Conflagrate. The Conflagrate(Dot) can crit. I have found a strange bug. In my tooltip of Conflagrate is written "69% of your Immolate or Shadowflame". After testing, I know that Conflagrate is calculated with 69%. EDIT: OK now i know, why 69% is written in Tooltip. The Reason is Emberstorm. if you have 5 of 5 points in the talent Emberstorm rank 5, then 60% of 15% more firedamage is 69%. If you have no Emberstorm is will be only 60% auf dmg of Immolate or Shadowflame. The Calculation ist RIGHT
  12. diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 97591d5..1d38fae 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -8729,14 +8729,42 @@ void Aura::HandleAuraSafeFall( bool Apply, bool Real ) bool Aura::IsCritFromAbilityAura(Unit* caster, uint32& damage) { + bool bCanCrit = false; + + switch(m_spellProto->SpellFamilyName) + { + case SPELLFAMILY_WARLOCK: + // Immolate + if (m_spellProto->SpellFamilyFlags & UI64LIT(0x0000000000000004)) + bCanCrit = true; + break; + + case SPELLFAMILY_ROGUE: + // Rupture + if (m_spellProto->SpellFamilyFlags & UI64LIT(0x0000000000100000)) + bCanCrit = true; + break; + + case SPELLFAMILY_SHAMAN: + // Flame Shock + if (m_spellProto->SpellFamilyFlags & UI64LIT(0x0000000010000000)) + bCanCrit = true; + break; + + default: break; + } + Unit::AuraList const& auras = caster->GetAurasByType(SPELL_AURA_ABILITY_PERIODIC_CRIT); for(Unit::AuraList::const_iterator itr = auras.begin(); itr != auras.end(); ++itr) { if (!(*itr)->isAffectedOnSpell(m_spellProto)) continue; - if (!caster->isSpellCrit(m_target, m_spellProto, GetSpellSchoolMask(m_spellProto))) - break; + bCanCrit = true; + } + + if (bCanCrit && caster->[u]IsSpellCrit[/u](m_target, m_spellProto, GetSpellSchoolMask(m_spellProto))) + { damage = caster->SpellCriticalDamageBonus(m_spellProto, damage, m_target); return true; } This patch is working with a small change in revision 10091 I got a compile error, because the function "IsSpellCrit" now defined with a "I". After change works fine. Sry for my bad english
  13. works good. The tooltip does not change to 30 minutes(paladin) or 60 minute(druid).
  14. diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index d196874..e9123ad 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -432,6 +432,32 @@ m_isRemovedOnShapeLost(true), m_in_use(0), m_deleted(false) } } + // Handling spell duration modifiers (glyphs for example) + switch(m_spellProto->SpellFamilyName) + { + case SPELLFAMILY_DRUID : + // Glyph of thorns + switch (m_spellProto->Id) + { + case 467 : + case 782 : + case 1075 : + case 8914 : + case 9756 : + case 9910 : + case 26992 : + case 53307 : + if ((m_caster_guid == m_target->GetGUID()) && (m_target->HasAura(57862))) + m_maxduration += 50*MINUTE*IN_MILLISECONDS; + break; + default : + break; + } + break; + default : + break; + } + if(m_maxduration == -1 || m_isPassive && m_spellProto->DurationIndex == 0) m_permanent = true; Works good with Revision 9891, but the place is strange. Kyle you made a mistake in your Code m_maxduration += 50*MINUTE*IN_MILLISECONDS; is better My first post
×
×
  • 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