From 898d64dcca411fbcb823f0fcb1d36804e9afc2c3 Mon Sep 17 00:00:00 2001 From: Blaymoira Date: Thu, 25 Dec 2008 21:30:32 +0100 Subject: *Prevent creature's spells from crushing - by Machiavelli --HG-- branch : trunk --- src/game/Unit.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/game/Unit.cpp') diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 86d1d23be75..a9c822bddec 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -2947,7 +2947,7 @@ MeleeHitOutcome Unit::RollMeleeOutcomeAgainst (const Unit *pVictim, WeaponAttack } } - if(GetTypeId()!=TYPEID_PLAYER && !(((Creature*)this)->GetCreatureInfo()->flags_extra & CREATURE_FLAG_EXTRA_NO_CRUSH) && !((Creature*)this)->isPet() ) + if(GetTypeId()!=TYPEID_PLAYER && !(((Creature*)this)->GetCreatureInfo()->flags_extra & CREATURE_FLAG_EXTRA_NO_CRUSH) && !((Creature*)this)->isPet() && !SpellCasted /*Only autoattack can be crushing blow*/ ) { // mobs can score crushing blows if they're 3 or more levels above victim // or when their weapon skill is 15 or more above victim's defense skill -- cgit v1.2.3 From 59ed3f9d2fbb401dfc9b9d92ea948cb99ba961ea Mon Sep 17 00:00:00 2001 From: megamage Date: Thu, 25 Dec 2008 17:26:05 -0600 Subject: *Remove mangle hack for nalorakk. --HG-- branch : trunk --- .../scripts/scripts/zone/zulaman/boss_nalorakk.cpp | 16 ++-------------- src/game/Pet.cpp | 2 +- src/game/Unit.cpp | 2 ++ 3 files changed, 5 insertions(+), 15 deletions(-) (limited to 'src/game/Unit.cpp') diff --git a/src/bindings/scripts/scripts/zone/zulaman/boss_nalorakk.cpp b/src/bindings/scripts/scripts/zone/zulaman/boss_nalorakk.cpp index 44e68f0dfbf..844e4a6c0ce 100644 --- a/src/bindings/scripts/scripts/zone/zulaman/boss_nalorakk.cpp +++ b/src/bindings/scripts/scripts/zone/zulaman/boss_nalorakk.cpp @@ -467,25 +467,13 @@ struct TRINITY_DLL_DECL boss_nalorakkAI : public ScriptedAI else { if(LaceratingSlash_Timer < diff) { - if(!m_creature->getVictim()->HasAura(SPELL_MANGLEEFFECT, 0)) - DoCast(m_creature->getVictim(), SPELL_LACERATINGSLASH); - else - { - int32 bp0 = 3470; - m_creature->CastCustomSpell(m_creature->getVictim(), SPELL_LACERATINGSLASH, &bp0, NULL, NULL, false); - } + DoCast(m_creature->getVictim(), SPELL_LACERATINGSLASH); LaceratingSlash_Timer = 18000 + rand()%5000; }else LaceratingSlash_Timer -= diff; if(RendFlesh_Timer < diff) { - if(!m_creature->getVictim()->HasAura(SPELL_MANGLEEFFECT, 0)) - DoCast(m_creature->getVictim(), SPELL_RENDFLESH); - else - { - int32 bp1 = 4670; - m_creature->CastCustomSpell(m_creature->getVictim(), SPELL_RENDFLESH, NULL, &bp1, NULL, false); - } + DoCast(m_creature->getVictim(), SPELL_RENDFLESH); RendFlesh_Timer = 5000 + rand()%5000; }else RendFlesh_Timer -= diff; diff --git a/src/game/Pet.cpp b/src/game/Pet.cpp index 72d9f725a3b..d42ab2af746 100644 --- a/src/game/Pet.cpp +++ b/src/game/Pet.cpp @@ -1165,7 +1165,7 @@ bool Pet::InitStatsForLevel(uint32 petlevel) SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float(petlevel + (petlevel / 4))); break; case 15438: //fire elemental - SetCreateHealth(30 + 40*petlevel); + SetCreateHealth(40*petlevel); SetCreateMana(28 + 10*petlevel); SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float(petlevel * 4 - petlevel)); SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float(petlevel * 4 + petlevel)); diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index a9c822bddec..a079964ce3e 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -8606,8 +8606,10 @@ uint32 Unit::SpellDamageBonus(Unit *pVictim, SpellEntry const *spellProto, uint3 TakenTotalMod *= (mod+100.0f)/100.0f; } break; + //This is changed in WLK, using aura 255 //Mangle case 2312: + case 44955: for(int j=0;j<3;j++) { if(GetEffectMechanic(spellProto, j)==MECHANIC_BLEED) -- cgit v1.2.3 From 032de9a49108b2df6ee01c92c7de2557e4eb6136 Mon Sep 17 00:00:00 2001 From: megamage Date: Fri, 26 Dec 2008 15:55:12 -0600 Subject: *Update IsAOE function. --HG-- branch : trunk --- src/game/SharedDefines.h | 4 ++-- src/game/SpellEffects.cpp | 2 +- src/game/SpellMgr.cpp | 32 +++++++++++++++++++++++++++++++- src/game/SpellMgr.h | 32 ++++---------------------------- src/game/Unit.cpp | 2 +- 5 files changed, 39 insertions(+), 33 deletions(-) (limited to 'src/game/Unit.cpp') diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h index 51fba0b48ed..07840998cf2 100644 --- a/src/game/SharedDefines.h +++ b/src/game/SharedDefines.h @@ -821,7 +821,7 @@ enum Targets TARGET_GAMEOBJECT = 23, //TARGET_OBJECT_OPEN TARGET_IN_FRONT_OF_CASTER = 24, - //TARGET_UNIT_CONE_ENEMY + TARGET_UNIT_CONE_ENEMY = 24, TARGET_DUELVSPLAYER = 25, TARGET_UNIT_TARGET_ANY = 25, TARGET_GAMEOBJECT_ITEM = 26, @@ -874,7 +874,7 @@ enum Targets TARGET_UNIT_CONE_ALLY = 59, TARGET_UNIT_AREA_SCRIPT = 60, TARGET_AREAEFFECT_PARTY_AND_CLASS = 61, - //TARGET_UNIT_CLASS_TARGET + TARGET_UNIT_CLASS_TARGET = 61, TARGET_TEST = 62, // for a test spell TARGET_DUELVSPLAYER_COORDINATES = 63, TARGET_DEST_TARGET_ENEMY_UNKNOWN = 63, diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index e8fdbf5adce..85984eeaa3d 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -568,7 +568,7 @@ void Spell::SpellDamageSchoolDmg(uint32 effect_idx) //TODO: should this be put on taken but not done? if(found) - m_damage += m_spellInfo->EffectBasePoints[1]; + damage += m_spellInfo->EffectBasePoints[1]; } //Explosive Trap Effect else if(m_spellInfo->SpellFamilyFlags & 0x00000004) diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index 2e285ea7176..6f6cb7e8d65 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -118,7 +118,8 @@ SpellMgr::SpellMgr() case TARGET_UNIT_AREA_ENTRY: case TARGET_UNIT_AREA_PARTY_GROUND: case TARGET_UNIT_AREA_PARTY: - case TARGET_UNIT_AREA_ENEMY_CHANNEL: + //case TARGET_UNIT_AREA_ENEMY_CHANNEL: + //case TARGET_UNIT_AREA_ALLY_CHANNEL: SpellTargetType[i] = TARGET_TYPE_AREA_DEST; break; case TARGET_DEST_TARGET_ENEMY: @@ -156,6 +157,35 @@ SpellMgr::SpellMgr() SpellTargetType[i] = TARGET_TYPE_DEFAULT; } } + + for(int i = 0; i < TOTAL_SPELL_TARGETS; ++i) + { + switch(i) + { + case TARGET_UNIT_AREA_ENEMY_GROUND: + case TARGET_UNIT_AREA_ENEMY: + case TARGET_UNIT_AREA_ALLY_GROUND: + case TARGET_UNIT_AREA_ALLY: + case TARGET_UNIT_AREA_ENTRY_GROUND: + case TARGET_UNIT_AREA_ENTRY: + case TARGET_UNIT_AREA_PARTY_GROUND: + case TARGET_UNIT_AREA_PARTY: + //Check persistant aura seperately + //case TARGET_UNIT_AREA_ENEMY_CHANNEL: + //case TARGET_UNIT_AREA_ALLY_CHANNEL: + case TARGET_UNIT_PARTY_TARGET: + case TARGET_UNIT_PARTY_CASTER: + case TARGET_UNIT_CONE_ENEMY: + case TARGET_UNIT_CONE_ALLY: + case TARGET_UNIT_CONE_ENEMY_UNKNOWN: + case TARGET_UNIT_RAID: + IsAreaEffectTarget[i] = true; + break; + default: + IsAreaEffectTarget[i] = false; + break; + } + } } SpellMgr::~SpellMgr() diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h index d8b4b866655..716760a70c6 100644 --- a/src/game/SpellMgr.h +++ b/src/game/SpellMgr.h @@ -359,38 +359,14 @@ bool IsAuraAddedBySpell(uint32 auraType, uint32 spellId); bool IsSpellAllowedInLocation(SpellEntry const *spellInfo,uint32 map_id,uint32 zone_id,uint32 area_id); -inline bool IsAreaEffectTarget( Targets target ) -{ - switch (target ) - { - case TARGET_AREAEFFECT_CUSTOM: - case TARGET_ALL_ENEMY_IN_AREA: - case TARGET_ALL_ENEMY_IN_AREA_INSTANT: - case TARGET_ALL_PARTY_AROUND_CASTER: - case TARGET_ALL_AROUND_CASTER: - case TARGET_ALL_ENEMY_IN_AREA_CHANNELED: - case TARGET_ALL_FRIENDLY_UNITS_AROUND_CASTER: - case TARGET_ALL_PARTY: - case TARGET_ALL_PARTY_AROUND_CASTER_2: - case TARGET_AREAEFFECT_PARTY: - case TARGET_AREAEFFECT_CUSTOM_2: - case TARGET_AREAEFFECT_PARTY_AND_CLASS: - case TARGET_IN_FRONT_OF_CASTER: - case TARGET_ALL_FRIENDLY_UNITS_IN_AREA: - return true; - default: - break; - } - return false; -} - +static bool IsAreaEffectTarget[TOTAL_SPELL_TARGETS]; inline bool IsAreaOfEffectSpell(SpellEntry const *spellInfo) { - if(IsAreaEffectTarget(Targets(spellInfo->EffectImplicitTargetA[0])) || IsAreaEffectTarget(Targets(spellInfo->EffectImplicitTargetB[0]))) + if(IsAreaEffectTarget[spellInfo->EffectImplicitTargetA[0]] || IsAreaEffectTarget[spellInfo->EffectImplicitTargetB[0]]) return true; - if(IsAreaEffectTarget(Targets(spellInfo->EffectImplicitTargetA[1])) || IsAreaEffectTarget(Targets(spellInfo->EffectImplicitTargetB[1]))) + if(IsAreaEffectTarget[spellInfo->EffectImplicitTargetA[1]] || IsAreaEffectTarget[spellInfo->EffectImplicitTargetB[1]]) return true; - if(IsAreaEffectTarget(Targets(spellInfo->EffectImplicitTargetA[2])) || IsAreaEffectTarget(Targets(spellInfo->EffectImplicitTargetB[2]))) + if(IsAreaEffectTarget[spellInfo->EffectImplicitTargetA[2]] || IsAreaEffectTarget[spellInfo->EffectImplicitTargetB[2]]) return true; return false; } diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index a079964ce3e..010c5a4d8c4 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -12243,7 +12243,7 @@ uint32 Unit::GetCastingTimeForBonus( SpellEntry const *spellProto, DamageEffectT break; } - if(IsAreaEffectTarget(Targets(spellProto->EffectImplicitTargetA[i])) || IsAreaEffectTarget(Targets(spellProto->EffectImplicitTargetB[i]))) + if(IsAreaEffectTarget[spellProto->EffectImplicitTargetA[i]] || IsAreaEffectTarget[spellProto->EffectImplicitTargetB[i]]) AreaEffect = true; } -- cgit v1.2.3