PDA

View Full Version : [C++/ArcEmu]Some Spellfixes.



Cocain
27-03-10, 09:05 AM
Death Knight Spell : Garagoyle.


Index: src/arcemu-world/Pet.cpp
================================================== =================
--- src/arcemu-world/Pet.cpp
+++ src/arcemu-world/Pet.cpp
@@ -29,6 +29,8 @@
#define SHADOWFIEND 19668
#define SPIRITWOLF 29264
#define DANCINGRUNEWEAPON 27893
+#define TREANT 1964
+#define GARGOYLE 17906

uint32 Pet::GetAutoCastTypeForSpell( SpellEntry * ent )
{
@@ -60,6 +62,14 @@
break;

/************************************************** **********************/
+ /* DK Pet Spell */
+ /************************************************** **********************/
+ case SPELL_HASH_GARGOYLE_STRIKE:
+ return AUTOCAST_EVENT_ATTACK;
+ break;
+
+
+ /************************************************** **********************/
/* Hunter Pet Spells */
/************************************************** **********************/
case SPELL_HASH_THUNDERSTOMP: // Thunderstomp
@@ -75,9 +85,12 @@
/* Mage Pet Spells */
/************************************************** **********************/

- case SPELL_HASH_WATERBOLT: // Waterbolt
+ case SPELL_HASH_WATER_BOLT: // Updated to WATER_BOLT hence it didn't match Spellhash.h elsewise.
return AUTOCAST_EVENT_ATTACK;
break;
+ case SPELL_HASH_FREEZE:
+ return AUTOCAST_EVENT_NONE;
+ break;

/************************************************** **********************/
/* Shaman Pet Spells */

Index: src/arcemu-world/SpellEffects.cpp
================================================== =================
--- src/arcemu-world/SpellEffects.cpp
+++ src/arcemu-world/SpellEffects.cpp
@@ -3214,6 +3214,15 @@
summon->AddSpell( dbcSpell.LookupEntry(31707), true );
summon->AddSpell( dbcSpell.LookupEntry(33395), true );
}break;
+
+ case 17906: // Gargoyle
+ {
+ Pet *summon = objmgr.CreatePet(GetProto()->EffectMiscValue[i]);
+ summon->CreateAsSummon( GetProto()->EffectMiscValue[i], ci, NULL, p_caster, GetProto(), 1, GetDuration() );
+ summon->AddSpell( dbcSpell.LookupEntry(31664), true ); // Gargoyle Strike
+ }break;
+
+
case 29264: // Feral Spirit
{
/*

Index: src/arcemu-world/SpellFixes.cpp
================================================== =================
--- src/arcemu-world/SpellFixes.cpp
+++ src/arcemu-world/SpellFixes.cpp
@@ -2958,6 +2958,28 @@
sp = dbcSpell.LookupEntryForced( 59578 );
if( sp != NULL )
sp->AuraInterruptFlags = AURA_INTERRUPT_ON_CAST_SPELL;
+
+ // Infected Wounds Rank 1
+ sp = dbcSpell.LookupEntryForced(58179);
+ if( sp != NULL)
+ {
+ sp->procChance = 100;
+ sp->procFlags = PROC_ON_CAST_SPELL;
+ }
+ // Infected Wounds Rank 1
+ sp = dbcSpell.LookupEntryForced(58180);
+ if( sp != NULL)
+ {
+ sp->procChance = 100;
+ sp->procFlags = PROC_ON_CAST_SPELL;
+ }
+ // Infected Wounds Rank 1
+ sp = dbcSpell.LookupEntryForced(58181);
+ if( sp != NULL)
+ {
+ sp->procChance = 100;
+ sp->procFlags = PROC_ON_CAST_SPELL;
+ }

//Paladin - Hammer of Justice - Interrupt effect
sp = dbcSpell.LookupEntryForced( 853 );

Index: src/arcemu-world/Unit.cpp
================================================== =================
--- src/arcemu-world/Unit.cpp
+++ src/arcemu-world/Unit.cpp
@@ -1277,6 +1277,20 @@
if( CastingSpell->Id != 5229 )//enrage
continue;
}break;
+
+ // Druid - Infected Wounds
+ case 58179:
+ case 58180:
+ case 58181:
+ {
+ if( CastingSpell == NULL )
+ continue;
+ if( CastingSpell->NameHash != SPELL_HASH_SHRED &&
+ CastingSpell->NameHash != SPELL_HASH_MANGLE &&
+ CastingSpell->NameHash != SPELL_HASH_MAUL )
+ continue;
+ }break;
+
case 31616: //Nature's Guardian
{
//yep, another special case: Nature's grace



Dancing Runeblad (Hacky Fix.)


Index: src/arcemu-world/SpellEffects.cpp
================================================== =================
--- src/arcemu-world/SpellEffects.cpp 2010-02-20 17:04:51 +00:00 (rev 36)
+++ src/arcemu-world/SpellEffects.cpp 2010-02-20 17:11:07 +00:00 (rev 37)
@@ -391,7 +391,7 @@

switch( spellId )
{
- case 48743:
+ case 48743: // death pact
case 29364: // encapsulate voidwalker
{
// retarget? some one test this spell.
@@ -3272,10 +3272,11 @@
Pet *summon = objmgr.CreatePet(GetProto()->EffectMiscValue[i]);
summon->CreateAsSummon(26125, ci, NULL, p_caster, GetProto(), 1, extradur );
summon->SetDisplayId((uint32)15435);
- summon->SetMinDamage((float)p_caster->GetDamageDoneMod(SCHOOL_NORMAL));
- summon->SetMaxDamage((float)p_caster->GetDamageDoneMod(SCHOOL_NORMAL));
+ //summon->SetFloatValue(UNIT_FIELD_MINDAMAGE,(float)p_caster->GetDamageDoneMod(SCHOOL_NORMAL));
+ //summon->SetFloatValue(UNIT_FIELD_MAXDAMAGE,(float)p_caster->GetDamageDoneMod(SCHOOL_NORMAL)); // Not sure 'bout this.
+ summon->SetFloatValue(UNIT_FIELD_MINDAMAGE, (float)p_caster->GetMainMeleeDamage(0) * 0.5); // 50% of the damage done by the Dk.
+ summon->SetFloatValue(UNIT_FIELD_MAXDAMAGE, (float)p_caster->GetMainMeleeDamage(0) * 0.5); // Same with MAXDAMAGE.
summon->GetAIInterface()->SetUnitToFollowAngle(float(-(M_PI/2)));
-
Item * item = p_caster->GetItemInterface()->GetInventoryItem( EQUIPMENT_SLOT_MAINHAND );
if( item != NULL )
{




Shattered Barrier.

Index: src/arcemu-world/Unit.cpp
================================================== =================
--- src/arcemu-world/Unit.cpp
+++ src/arcemu-world/Unit.cpp
@@ -5678,6 +5678,29 @@
}
}

+ switch((*j)->spellid)
+ {
+ case 11426: // Ice Barrier Ranks
+ case 13031:
+ case 13032:
+ case 13033:
+ case 27134:
+ case 33405:
+ case 43038:
+ case 43039:
+ {
+ if(HasAura(54787))
+ {
+ CastSpell(this, 55080, true);
+ }
+ else if ( HasAura(44745) )
+ {
+ if( Rand(50.0f) )
+ CastSpell(this, 55080, true);
+ }
+ }break;
+ }
+
this->RemoveAura((*j)->spellid); //,(*j)->caster);
if(!*dmg)//absorbed all dmg
break;



Typhoon rank 1 to 5.

Index: src/arcemu-world/SpellFixes.cpp
================================================== =================
--- src/arcemu-world/SpellFixes.cpp
+++ src/arcemu-world/SpellFixes.cpp
@@ -1345,7 +1345,62 @@
//////////////////////////////////////////
// DRUID //
//////////////////////////////////////////
-
+ //Druid - Typhoon rank 1
+ sp = dbcSpell.LookupEntryForced( 61391 );
+ if( sp != NULL )
+ {
+ sp->Effect[1] = SPELL_EFFECT_TRIGGER_SPELL;
+ sp->EffectApplyAuraName[1] = SPELL_AURA_PROC_TRIGGER_SPELL;
+ sp->EffectTriggerSpell[1] = 50516;
+ sp->procFlags = PROC_ON_CAST_SPELL;
+ sp->procChance = 100;
+ }
+
+ //Druid - Typhoon rank 2
+ sp = dbcSpell.LookupEntryForced( 61390 );
+ if( sp != NULL )
+ {
+ sp->Effect[1] = SPELL_EFFECT_TRIGGER_SPELL;
+ sp->EffectApplyAuraName[1] = SPELL_AURA_PROC_TRIGGER_SPELL;
+ sp->EffectTriggerSpell[1] = 53223;
+ sp->procFlags = PROC_ON_CAST_SPELL;
+ sp->procChance = 100;
+ }
+
+ //Druid - Typhoon rank 3
+ sp = dbcSpell.LookupEntryForced( 61388 );
+ if( sp != NULL )
+ {
+ sp->Effect[1] = SPELL_EFFECT_TRIGGER_SPELL;
+ sp->EffectApplyAuraName[1] = SPELL_AURA_PROC_TRIGGER_SPELL;
+ sp->EffectTriggerSpell[1] = 53225;
+ sp->procFlags = PROC_ON_CAST_SPELL;
+ sp->procChance = 100;
+ }
+
+ //Druid - Typhoon rank 5
+ sp = dbcSpell.LookupEntryForced( 61387 );
+ if( sp != NULL )
+ {
+ sp->Effect[1] = SPELL_EFFECT_TRIGGER_SPELL;
+ sp->EffectApplyAuraName[1] = SPELL_AURA_PROC_TRIGGER_SPELL;
+ sp->EffectTriggerSpell[1] = 53226;
+ sp->procFlags = PROC_ON_CAST_SPELL;
+ sp->procChance = 100;
+ }
+
+ //Druid - Typhoon rank 5
+ sp = dbcSpell.LookupEntryForced( 61384 );
+ if( sp != NULL )
+ {
+ sp->Effect[1] = SPELL_EFFECT_TRIGGER_SPELL;
+ sp->EffectApplyAuraName[1] = SPELL_AURA_PROC_TRIGGER_SPELL;
+ sp->EffectTriggerSpell[1] = 53227;
+ sp->procFlags = PROC_ON_CAST_SPELL;
+ sp->procChance = 100;
+ }
+
+
// Dash
if( sp->NameHash == SPELL_HASH_DASH )
{



Hex.


Index: src/arcemu-world/SpellFixes.cpp
================================================== =================
--- src/arcemu-world/SpellFixes.cpp
+++ src/arcemu-world/SpellFixes.cpp
@@ -1289,8 +1289,12 @@
//////////////////////////////////////////
// SHAMAN //
//////////////////////////////////////////
-
- // Insert shaman spell fixes here
+ // Shaman Hex
+ sp = dbcSpell.LookupEntryForced(51514); //Redirects to the actual spell 51514.
+ if(sp != NULL)
+ sp->Effect[1] = AURA_INTERRUPT_ON_UNUSED2; // Damage done can break the target out of hex now.
+ if( sp->NameHash == SPELL_HASH_HEX )
+ sp->AuraInterruptFlags = AURA_INTERRUPT_ON_UNUSED2;

// Flametongue Totem passive target fix
if( sp->NameHash == SPELL_HASH_FLAMETONGUE_TOTEM && sp->Attributes & ATTRIBUTES_PASSIVE )



Execute work-around.


case 5308:
case 20658:
case 20660:
case 20661:
case 20662:
case 25234:
case 25236:
case 47470:
case 47471:// Execute
{
if( !u_caster || !u_caster->IsInWorld() || !unitTarget || !unitTarget->IsInWorld() || !m_spellInfo)
return;

uint32 value = m_spellInfo->EffectBasePoints[i]+1 + (u_caster->GetAP() * 0.2);
uint32 rageCurrent = u_caster->GetUInt32Value(UNIT_FIELD_POWER2);
// 150 -> 15 max rage without skills
uint32 rageUsed = std::min(rageCurrent, uint32(150));

uint32 rageLeft = rageCurrent - rageUsed;
AuraPointer suddenDeath = u_caster->FindAura(52437);

if(suddenDeath)
{
SpellEntry * sd = dbcSpell.LookupEntry(suddenDeath->pSpellId);
if(sd)
rageLeft += sd->RankNumber > 1 ? sd->RankNumber * 30 + 10 : sd->RankNumber * 30;
suddenDeath->Remove(); // Sudden Death is removed after 1 execute
}

if( u_caster->HasDummyAura(SPELL_HASH_GLYPH_OF_EXECUTION) )
rageUsed += 100; //Your Execute ability deals damage as if you had 10 additional rage.

value += (int32) (rageUsed * m_spellInfo->dmg_multiplier[0]);
u_caster->SetPower(POWER_TYPE_RAGE, rageLeft);
// 20647 is dummy execute spell for logs
SpellEntry *spellInfo = dbcSpell.LookupEntry(20647);
u_caster->Strike(unitTarget,MELEE,spellInfo,0,0,value,false, false);
}break;

Apple
27-03-10, 09:13 AM
nice one :)

Cocain
27-03-10, 09:20 AM
Hehe. ^^