*More correct handling of fly mod auras.
*Pets now learn all levelup spells. *Fix lightning overload. --HG-- branch : trunk
This commit is contained in:
@@ -337,9 +337,8 @@ void LoadDBCStores(const std::string& dataPath)
|
|||||||
if(spellInfo->spellLevel)
|
if(spellInfo->spellLevel)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Passive spell has to have spellfamilyflags if name present (need to not apply 20782)
|
if(skillLine->learnOnGetSkill != ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL)
|
||||||
//if (spellInfo->Attributes & SPELL_ATTR_UNK18 && spellInfo->SpellFamilyName && !spellInfo->SpellFamilyFlags)
|
continue;
|
||||||
// continue;
|
|
||||||
|
|
||||||
sPetFamilySpellsStore[i].insert(spellInfo->Id);
|
sPetFamilySpellsStore[i].insert(spellInfo->Id);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1018,6 +1018,7 @@ enum Targets
|
|||||||
//TARGET_DEST_TABLE
|
//TARGET_DEST_TABLE
|
||||||
TARGET_EFFECT_SELECT = 18, // highly depends on the spell effect
|
TARGET_EFFECT_SELECT = 18, // highly depends on the spell effect
|
||||||
TARGET_DEST_CASTER_GROUND = 18,
|
TARGET_DEST_CASTER_GROUND = 18,
|
||||||
|
TARGET_PREV_EFFECT_SUMMON = 18,
|
||||||
TARGET_ALL_PARTY_AROUND_CASTER = 20,
|
TARGET_ALL_PARTY_AROUND_CASTER = 20,
|
||||||
TARGET_UNIT_PARTY_CASTER = 20,
|
TARGET_UNIT_PARTY_CASTER = 20,
|
||||||
TARGET_SINGLE_FRIEND = 21,
|
TARGET_SINGLE_FRIEND = 21,
|
||||||
|
|||||||
@@ -250,12 +250,12 @@ enum AuraType
|
|||||||
SPELL_AURA_IGNORE_COMBAT_RESULT = 202,
|
SPELL_AURA_IGNORE_COMBAT_RESULT = 202,
|
||||||
SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE = 203,
|
SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE = 203,
|
||||||
SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE = 204,
|
SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE = 204,
|
||||||
SPELL_AURA_205 = 205, // unused
|
SPELL_AURA_205 = 205, // school vunderability?
|
||||||
SPELL_AURA_MOD_SPEED_MOUNTED = 206, // ? used in strange spells
|
SPELL_AURA_MOD_INCREASE_VEHICLE_FLIGHT_SPEED = 206,
|
||||||
SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED = 207,
|
SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED = 207,
|
||||||
SPELL_AURA_MOD_SPEED_FLIGHT = 208,
|
SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED = 208,
|
||||||
SPELL_AURA_MOD_FLIGHT_SPEED_ALWAYS = 209,
|
SPELL_AURA_MOD_MOUNTED_FLIGHT_SPEED_ALWAYS = 209,
|
||||||
SPELL_AURA_210 = 210, // unused
|
SPELL_AURA_MOD_VEHICLE_SPEED_ALWAYS = 210,
|
||||||
SPELL_AURA_MOD_FLIGHT_SPEED_NOT_STACK = 211,
|
SPELL_AURA_MOD_FLIGHT_SPEED_NOT_STACK = 211,
|
||||||
SPELL_AURA_MOD_RANGED_ATTACK_POWER_OF_STAT_PERCENT = 212,
|
SPELL_AURA_MOD_RANGED_ATTACK_POWER_OF_STAT_PERCENT = 212,
|
||||||
SPELL_AURA_MOD_RAGE_FROM_DAMAGE_DEALT = 213,
|
SPELL_AURA_MOD_RAGE_FROM_DAMAGE_DEALT = 213,
|
||||||
|
|||||||
@@ -49,6 +49,8 @@
|
|||||||
#include "GridNotifiersImpl.h"
|
#include "GridNotifiersImpl.h"
|
||||||
#include "CellImpl.h"
|
#include "CellImpl.h"
|
||||||
|
|
||||||
|
class Vehicle;
|
||||||
|
|
||||||
pAuraHandler AuraHandler[TOTAL_AURAS]=
|
pAuraHandler AuraHandler[TOTAL_AURAS]=
|
||||||
{
|
{
|
||||||
&AuraEffect::HandleNULL, // 0 SPELL_AURA_NONE
|
&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, //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::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, //205 vulnerable to school dmg?
|
||||||
&AuraEffect::HandleNULL, //206 SPELL_AURA_MOD_SPEED_MOUNTED
|
&AuraEffect::HandleAuraModIncreaseFlightSpeed, //206 SPELL_AURA_MOD_INCREASE_VEHICLE_FLIGHT_SPEED
|
||||||
&AuraEffect::HandleAuraModIncreaseFlightSpeed, //207 SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED
|
&AuraEffect::HandleAuraModIncreaseFlightSpeed, //207 SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED
|
||||||
&AuraEffect::HandleAuraModIncreaseFlightSpeed, //208 SPELL_AURA_MOD_SPEED_FLIGHT, used only in spell: Flight Form (Passive)
|
&AuraEffect::HandleAuraModIncreaseFlightSpeed, //208 SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED
|
||||||
&AuraEffect::HandleAuraModIncreaseFlightSpeed, //209 SPELL_AURA_MOD_FLIGHT_SPEED_ALWAYS
|
&AuraEffect::HandleAuraModIncreaseFlightSpeed, //209 SPELL_AURA_MOD_MOUNTED_FLIGHT_SPEED_ALWAYS
|
||||||
&AuraEffect::HandleNULL, //210 Commentator's Command
|
&AuraEffect::HandleAuraModIncreaseFlightSpeed, //210 SPELL_AURA_MOD_VEHICLE_SPEED_ALWAYS
|
||||||
&AuraEffect::HandleAuraModIncreaseFlightSpeed, //211 SPELL_AURA_MOD_FLIGHT_SPEED_NOT_STACK
|
&AuraEffect::HandleAuraModIncreaseFlightSpeed, //211 SPELL_AURA_MOD_FLIGHT_SPEED_NOT_STACK
|
||||||
&AuraEffect::HandleAuraModRangedAttackPowerOfStatPercent, //212 SPELL_AURA_MOD_RANGED_ATTACK_POWER_OF_STAT_PERCENT
|
&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
|
&AuraEffect::HandleNoImmediateEffect, //213 SPELL_AURA_MOD_RAGE_FROM_DAMAGE_DEALT implemented in Player::RewardRage
|
||||||
|
|||||||
@@ -2578,10 +2578,9 @@ void SpellMgr::LoadPetLevelupSpellMap()
|
|||||||
continue;
|
continue;
|
||||||
SpellEntry const *spell = sSpellStore.LookupEntry(skillLine->spellId);
|
SpellEntry const *spell = sSpellStore.LookupEntry(skillLine->spellId);
|
||||||
// not exist or triggered or talent
|
// not exist or triggered or talent
|
||||||
if(!spell || !spell->spellLevel || GetTalentSpellPos(spell->Id))
|
if(!spell || !spell->spellLevel)
|
||||||
continue;
|
continue;
|
||||||
// TODO: some spells have no spellfamilyflag but should be learned
|
if(skillLine->learnOnGetSkill != ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL)
|
||||||
if (!spell->SpellFamilyName)
|
|
||||||
continue;
|
continue;
|
||||||
mPetLevelupSpellMap.insert(PetLevelupSpellMap::value_type(creatureFamily->ID, std::make_pair(spell->spellLevel , spell->Id )));
|
mPetLevelupSpellMap.insert(PetLevelupSpellMap::value_type(creatureFamily->ID, std::make_pair(spell->spellLevel , spell->Id )));
|
||||||
count++;
|
count++;
|
||||||
|
|||||||
+33
-5
@@ -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);
|
sLog.outError("Unit::HandleDummyAuraProc: non handled spell id: %u (LO)", procSpell->Id);
|
||||||
return false;
|
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
|
// Apply spellmod
|
||||||
CastSpell(this, 39805, true, castItem, triggeredByAura);
|
CastCustomSpell(this, 39805, NULL, &mod, NULL, true, castItem, triggeredByAura);
|
||||||
|
|
||||||
CastSpell(pVictim, spellId, 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;
|
return true;
|
||||||
}
|
}
|
||||||
// Static Shock
|
// Static Shock
|
||||||
@@ -10157,12 +10167,30 @@ void Unit::UpdateSpeed(UnitMoveType mtype, bool forced)
|
|||||||
return;
|
return;
|
||||||
case MOVE_FLIGHT:
|
case MOVE_FLIGHT:
|
||||||
{
|
{
|
||||||
if (IsMounted()) // Use on mount auras
|
if (GetTypeId()==TYPEID_UNIT && ((Creature*)this)->isVehicle())
|
||||||
main_speed_mod = GetMaxPositiveAuraModifier(SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED);
|
{
|
||||||
|
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)
|
else // Use not mount (shapeshift for example) auras (should stack)
|
||||||
main_speed_mod = GetTotalAuraModifier(SPELL_AURA_MOD_SPEED_FLIGHT);
|
main_speed_mod = GetTotalAuraModifier(SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED);
|
||||||
stack_bonus = GetTotalAuraMultiplier(SPELL_AURA_MOD_FLIGHT_SPEED_ALWAYS);
|
|
||||||
non_stack_bonus = (100.0 + GetMaxPositiveAuraModifier(SPELL_AURA_MOD_FLIGHT_SPEED_NOT_STACK))/100.0f;
|
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;
|
break;
|
||||||
}
|
}
|
||||||
case MOVE_FLIGHT_BACK:
|
case MOVE_FLIGHT_BACK:
|
||||||
|
|||||||
Reference in New Issue
Block a user