diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game/DBCStores.cpp | 5 | ||||
-rw-r--r-- | src/game/SharedDefines.h | 1 | ||||
-rw-r--r-- | src/game/SpellAuraDefines.h | 12 | ||||
-rw-r--r-- | src/game/SpellAuras.cpp | 12 | ||||
-rw-r--r-- | src/game/SpellMgr.cpp | 5 | ||||
-rw-r--r-- | src/game/Unit.cpp | 38 |
6 files changed, 51 insertions, 22 deletions
diff --git a/src/game/DBCStores.cpp b/src/game/DBCStores.cpp index 92c0a28cff4..2c7c15d1796 100644 --- a/src/game/DBCStores.cpp +++ b/src/game/DBCStores.cpp @@ -337,9 +337,8 @@ void LoadDBCStores(const std::string& dataPath) if(spellInfo->spellLevel) continue; - // Passive spell has to have spellfamilyflags if name present (need to not apply 20782) - //if (spellInfo->Attributes & SPELL_ATTR_UNK18 && spellInfo->SpellFamilyName && !spellInfo->SpellFamilyFlags) - // continue; + if(skillLine->learnOnGetSkill != ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL) + continue; sPetFamilySpellsStore[i].insert(spellInfo->Id); } diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h index 1cdf2359201..8628107b4e2 100644 --- a/src/game/SharedDefines.h +++ b/src/game/SharedDefines.h @@ -1018,6 +1018,7 @@ enum Targets //TARGET_DEST_TABLE TARGET_EFFECT_SELECT = 18, // highly depends on the spell effect TARGET_DEST_CASTER_GROUND = 18, + TARGET_PREV_EFFECT_SUMMON = 18, TARGET_ALL_PARTY_AROUND_CASTER = 20, TARGET_UNIT_PARTY_CASTER = 20, TARGET_SINGLE_FRIEND = 21, diff --git a/src/game/SpellAuraDefines.h b/src/game/SpellAuraDefines.h index 5953ae9fb13..494bdc68a88 100644 --- a/src/game/SpellAuraDefines.h +++ b/src/game/SpellAuraDefines.h @@ -250,12 +250,12 @@ enum AuraType SPELL_AURA_IGNORE_COMBAT_RESULT = 202, SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE = 203, SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE = 204, - SPELL_AURA_205 = 205, // unused - SPELL_AURA_MOD_SPEED_MOUNTED = 206, // ? used in strange spells - SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED = 207, - SPELL_AURA_MOD_SPEED_FLIGHT = 208, - SPELL_AURA_MOD_FLIGHT_SPEED_ALWAYS = 209, - SPELL_AURA_210 = 210, // unused + SPELL_AURA_205 = 205, // school vunderability? + SPELL_AURA_MOD_INCREASE_VEHICLE_FLIGHT_SPEED = 206, + SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED = 207, + SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED = 208, + SPELL_AURA_MOD_MOUNTED_FLIGHT_SPEED_ALWAYS = 209, + SPELL_AURA_MOD_VEHICLE_SPEED_ALWAYS = 210, SPELL_AURA_MOD_FLIGHT_SPEED_NOT_STACK = 211, SPELL_AURA_MOD_RANGED_ATTACK_POWER_OF_STAT_PERCENT = 212, SPELL_AURA_MOD_RAGE_FROM_DAMAGE_DEALT = 213, diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 0f3056e043d..02fae77f700 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -49,6 +49,8 @@ #include "GridNotifiersImpl.h" #include "CellImpl.h" +class Vehicle; + pAuraHandler AuraHandler[TOTAL_AURAS]= { &AuraEffect::HandleNULL, // 0 SPELL_AURA_NONE @@ -257,11 +259,11 @@ pAuraHandler AuraHandler[TOTAL_AURAS]= &AuraEffect::HandleNoImmediateEffect, //203 SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE implemented in Unit::CalculateMeleeDamage and Unit::CalculateSpellDamage &AuraEffect::HandleNoImmediateEffect, //204 SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE implemented in Unit::CalculateMeleeDamage and Unit::CalculateSpellDamage &AuraEffect::HandleNULL, //205 vulnerable to school dmg? - &AuraEffect::HandleNULL, //206 SPELL_AURA_MOD_SPEED_MOUNTED - &AuraEffect::HandleAuraModIncreaseFlightSpeed, //207 SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED - &AuraEffect::HandleAuraModIncreaseFlightSpeed, //208 SPELL_AURA_MOD_SPEED_FLIGHT, used only in spell: Flight Form (Passive) - &AuraEffect::HandleAuraModIncreaseFlightSpeed, //209 SPELL_AURA_MOD_FLIGHT_SPEED_ALWAYS - &AuraEffect::HandleNULL, //210 Commentator's Command + &AuraEffect::HandleAuraModIncreaseFlightSpeed, //206 SPELL_AURA_MOD_INCREASE_VEHICLE_FLIGHT_SPEED + &AuraEffect::HandleAuraModIncreaseFlightSpeed, //207 SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED + &AuraEffect::HandleAuraModIncreaseFlightSpeed, //208 SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED + &AuraEffect::HandleAuraModIncreaseFlightSpeed, //209 SPELL_AURA_MOD_MOUNTED_FLIGHT_SPEED_ALWAYS + &AuraEffect::HandleAuraModIncreaseFlightSpeed, //210 SPELL_AURA_MOD_VEHICLE_SPEED_ALWAYS &AuraEffect::HandleAuraModIncreaseFlightSpeed, //211 SPELL_AURA_MOD_FLIGHT_SPEED_NOT_STACK &AuraEffect::HandleAuraModRangedAttackPowerOfStatPercent, //212 SPELL_AURA_MOD_RANGED_ATTACK_POWER_OF_STAT_PERCENT &AuraEffect::HandleNoImmediateEffect, //213 SPELL_AURA_MOD_RAGE_FROM_DAMAGE_DEALT implemented in Player::RewardRage diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index e3dfaf50477..200cc98d803 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -2578,10 +2578,9 @@ void SpellMgr::LoadPetLevelupSpellMap() continue; SpellEntry const *spell = sSpellStore.LookupEntry(skillLine->spellId); // not exist or triggered or talent - if(!spell || !spell->spellLevel || GetTalentSpellPos(spell->Id)) + if(!spell || !spell->spellLevel) continue; - // TODO: some spells have no spellfamilyflag but should be learned - if (!spell->SpellFamilyName) + if(skillLine->learnOnGetSkill != ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL) continue; mPetLevelupSpellMap.insert(PetLevelupSpellMap::value_type(creatureFamily->ID, std::make_pair(spell->spellLevel , spell->Id ))); count++; diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index b509bb0226c..5f946045192 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -6335,11 +6335,21 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, AuraEffect* trigger sLog.outError("Unit::HandleDummyAuraProc: non handled spell id: %u (LO)", procSpell->Id); return false; } + // Remove cooldown (Chain Lightning - have Category Recovery time) + if (procSpell->SpellFamilyFlags[0] & 0x2) + ((Player*)this)->RemoveSpellCooldown(spellId); + + // do not reduce damage-spells have correct basepoints + int32 mod = 0; + // Apply spellmod - CastSpell(this, 39805, true, castItem, triggeredByAura); + CastCustomSpell(this, 39805, NULL, &mod, NULL, true, castItem, triggeredByAura); CastSpell(pVictim, spellId, true, castItem, triggeredByAura); + if( cooldown && GetTypeId()==TYPEID_PLAYER ) + ((Player*)this)->AddSpellCooldown(dummySpell->Id,0,time(NULL) + cooldown); + return true; } // Static Shock @@ -10157,12 +10167,30 @@ void Unit::UpdateSpeed(UnitMoveType mtype, bool forced) return; case MOVE_FLIGHT: { - if (IsMounted()) // Use on mount auras - main_speed_mod = GetMaxPositiveAuraModifier(SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED); + if (GetTypeId()==TYPEID_UNIT && ((Creature*)this)->isVehicle()) + { + main_speed_mod = GetMaxPositiveAuraModifier(SPELL_AURA_MOD_INCREASE_VEHICLE_FLIGHT_SPEED); + stack_bonus = GetTotalAuraMultiplier(SPELL_AURA_MOD_VEHICLE_SPEED_ALWAYS); + + // for some spells this mod is applied on vehicle owner + uint32 owner_speed_mod = ((Vehicle*)this)->GetOwner()->GetMaxPositiveAuraModifier(SPELL_AURA_MOD_INCREASE_VEHICLE_FLIGHT_SPEED); + + main_speed_mod>owner_speed_mod ? main_speed_mod : owner_speed_mod; + } + else if (IsMounted()) + { + main_speed_mod = GetMaxPositiveAuraModifier(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED); + stack_bonus = GetTotalAuraMultiplier(SPELL_AURA_MOD_MOUNTED_FLIGHT_SPEED_ALWAYS); + } else // Use not mount (shapeshift for example) auras (should stack) - main_speed_mod = GetTotalAuraModifier(SPELL_AURA_MOD_SPEED_FLIGHT); - stack_bonus = GetTotalAuraMultiplier(SPELL_AURA_MOD_FLIGHT_SPEED_ALWAYS); + main_speed_mod = GetTotalAuraModifier(SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED); + non_stack_bonus = (100.0 + GetMaxPositiveAuraModifier(SPELL_AURA_MOD_FLIGHT_SPEED_NOT_STACK))/100.0f; + + // Update speed for vehicle if avalible + if (GetTypeId()==TYPEID_PLAYER) + if (Unit * vehicle = ((Player*)this)->m_Vehicle) + vehicle->UpdateSpeed(MOVE_FLIGHT, true); break; } case MOVE_FLIGHT_BACK: |