Go Back   EQEmulator Home > EQEmulator Forums > Support > Spell Support

Spell Support Broken Spells? Want them Fixed? Request it here.

 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
  #4  
Old 01-19-2010, 04:19 AM
blmille2
Sarnak
 
Join Date: Apr 2007
Location: Austin, TX
Posts: 64
Default The Calliav Code

Here's the code.

I have verified that it works by getting a monk and dueling my mage.

I kicked and counted the blow only if the damage would've been > 0 (i.e. didn't block, parry, etc.).

There are other mitigation types, but this handles the calliav type (the kind that blocks a certain number of melee/spell hits).

For some reason, I am not able to cast a DD spell (always says that I can't see my target).

For the melee part, I was only able to use special moves (i.e. kick) to do damage.

The spell casting code was copied + pasted from the melee mitigation part. I expect that it would work, but don't have a way to test it now.

Any ideas why I can't do regular melee and DD?

Thanks!

The Code:
Code:
Index: zone/attack.cpp
===================================================================
--- zone/attack.cpp	(revision 1120)
+++ zone/attack.cpp	(working copy)
@@ -2766,8 +2766,19 @@
 }
 
 sint32 Mob::ReduceDamage(sint32 damage){
+	int slot = GetBuffSlotFromType(SE_NegateAttacks);
+	
+	if(damage > 0 && slot >= 0 && this->buffs[slot].melee_rune > 0){
+		this->buffs[slot].melee_rune--;
+		if(buffs[slot].melee_rune == 0){
+			BuffFadeBySlot(slot);
+			SetHasRune((GetBuffSlotFromType(SE_NegateAttacks) >= 0) || (GetBuffSlotFromType(SE_Rune) >= 0));
+		}
+		return -6;
+	}
+
 	if(damage > 0 && HasRune()) {
-		int slot = GetBuffSlotFromType(SE_Rune);
+		slot = GetBuffSlotFromType(SE_Rune);
 
 		while(slot >= 0) {
 			int16 melee_rune_left = this->buffs[slot].melee_rune;
@@ -2796,8 +2807,18 @@
 }
 	
 sint32 Mob::ReduceMagicalDamage(sint32 damage) {
+	int slot = GetBuffSlotFromType(SE_NegateAttacks);
+	
+	if(damage > 0 && slot >= 0 && this->buffs[slot].melee_rune > 0){
+		this->buffs[slot].melee_rune--;  // arbitrarily using melee_rune to count both melee and spell attacks
+		if(buffs[slot].melee_rune == 0){
+			BuffFadeBySlot(slot);
+			SetHasSpellRune((GetBuffSlotFromType(SE_NegateAttacks) >= 0) || (GetBuffSlotFromType(SE_AbsorbMagicAtt) >= 0));
+		}
+		return -6;
+	}
 	if(damage > 0 && HasSpellRune()) {
-		int slot = GetBuffSlotFromType(SE_AbsorbMagicAtt);
+		slot = GetBuffSlotFromType(SE_AbsorbMagicAtt);
 	
 		while(slot >= 0) {
 			int16 magic_rune_left = this->buffs[slot].magic_rune;
Index: zone/spell_effects.cpp
===================================================================
--- zone/spell_effects.cpp	(revision 1120)
+++ zone/spell_effects.cpp	(working copy)
@@ -1488,7 +1488,16 @@
 					AddProcToWeapon(procid, false, spells[spell_id].base2[i]+100);
 				break;
 			}
-
+			case SE_NegateAttacks:
+			{
+#ifdef SPELL_EFFECT_SPAM
+				snprintf(effect_desc, _EDLEN, "Melee Negate Attack Rune: %+i", effect_value);
+#endif
+				buffs[buffslot].melee_rune = effect_value;
+				SetHasRune(true);
+				SetHasSpellRune(true);
+				break;				  
+			}
 			case SE_AppraiseLDonChest:
 			{
 				if(IsNPC())
Reply With Quote
 


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

   

All times are GMT -4. The time now is 07:03 PM.


 

Everquest is a registered trademark of Daybreak Game Company LLC.
EQEmulator is not associated or affiliated in any way with Daybreak Game Company LLC.
Except where otherwise noted, this site is licensed under a Creative Commons License.
       
Powered by vBulletin®, Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3