Go Back   EQEmulator Home > EQEmulator Forums > Development > Development::Development

Development::Development Forum for development topics and for those interested in EQEMu development. (Not a support forum)

Reply
 
Thread Tools Display Modes
  #1  
Old 07-19-2006, 04:40 PM
EverHood
Restoring Necromancers to their former glory, one patch at a time
 
Join Date: Jul 2006
Posts: 6
Default DoT Fixes + PvP Archery Mitigation fix.

In the current code base, dots are slipping into the hp regeneration cycle so your hps are reduced once during the damage tick of the dot and once during your regen cycle resulting in double the damage per tick for any given dot.

Dot damage is being shown as non melee damage in the fashion nukes are. Also damage messages are being sent to the caster for self dots such as the necromancer lich line.

DoT damage was not being considered PvP when cast on self.

While ensuring the 66% pvp damage was being done properly I noticed it was including archery which according to an archived live patch is supposed to do %80 damage in pvp situations not 66%.

The following diff fixes all the above issues. Necros can lich and not be spammed nor eaten at twice the normal rate and players won't be taking double damage from dots cast on them by NPCs etc etc. Also you will now see the correct style message when your dot damage cast on others is being reported: Target has taken X damage from your SpellName.

Oh, I also cleaned up the names used when lifetaps hit mobs while I was in there
Code:
--- E:\EQEmu833\zone\StringIDs.h	Thu Apr 21 15:42:18 2005
+++ C:\EQEmuSP\Source\0.7.0\zone\StringIDs.h	Wed Jul 19 17:38:11 2006
@@ -83,6 +83,7 @@
 #define FINISHING_BLOW 1009 //%1 scores a Finishing Blow!!
 #define OTHER_HIT_NONMELEE 434 //%1 was hit by non-melee for %2 points of damage.
 #define YOU_HIT_NONMELEE 12481 //You were hit by non-melee for %1 damage.
+#define OTHER_HIT_DOT 9072 // %1 has taken %2 damage from your %3.
 #define BEAM_SMILE 12501 //%1 beams a smile at %2
 #define FACTION_WORST 469 //Your faction standing with %1 could not possibly get any worse.
 #define FACTION_WORSE 470 //Your faction standing with %1 got worse.
--- E:\EQEmu833\zone\attack.cpp	Sun Jul 09 12:50:58 2006
+++ C:\EQEmuSP\Source\0.7.0\zone\attack.cpp	Wed Jul 19 18:49:04 2006
@@ -975,8 +975,14 @@
 		spell_id = SPELL_UNKNOWN;
 	
 	// cut all PVP spell damage to 2/3 -solar
-	if(other && other->IsClient() && this != other && damage > 0)
-		damage = (damage * 67) / 100;
+	// EverHood - Blasting ourselfs is considered PvP to
+	int PvPMitigation = 100;
+	if(other && other->IsClient() && damage > 0)
+		if(attack_skill == ARCHERY)
+			PvPMitigation = 80;
+		else
+			PvPMitigation = 67;
+	damage = (damage * PvPMitigation) / 100;
 			
 	//do a majority of the work...
 	CommonDamage(other, damage, spell_id, attack_skill, avoidable, buffslot, iBuffTic);
@@ -2079,7 +2085,7 @@
 		} else {
 			mlog(COMBAT__HITS, "Generating hate %d towards %s", hate, attacker->GetName());
 			// now add done damage to the hate list
-			AddToHateList(attacker, hate, damage, true, false, iBuffTic);
+			AddToHateList(attacker, hate, damage, true, false, !iBuffTic);
 		}
 	}
     
@@ -2095,7 +2101,7 @@
 				
 				//we used to do a message to the client, but its gone now.
 				// emote goes with every one ... even npcs
-				entity_list.MessageClose(this, true, 300, MT_Emote, "%s beams a smile at %s", attacker->GetName(), this->GetName() );
+				entity_list.MessageClose(this, true, 300, MT_Emote, "%s beams a smile at %s", attacker->GetCleanName(), this->GetCleanName() );
 			}
 			
 			// if we got a pet, thats not already fighting something send it into battle
@@ -2103,7 +2109,7 @@
 				Mob *pet = GetPet();
 			    if (pet && !pet->IsEngaged() && attacker != this) {
 			    	mlog(PETS__AGGRO, "Sending pet %s into battle due to attack.", pet->GetName());
-					pet->AddToHateList(attacker, 1, 0,true,false,iBuffTic);
+					pet->AddToHateList(attacker, 1, 0,true,false,!iBuffTic);
 					pet->SetTarget(attacker);
 					Message_StringID(10, PET_ATTACKING, pet->GetCleanName(), attacker->GetCleanName());
 				}
@@ -2282,6 +2288,13 @@
 		}
 		
 		safe_delete(outapp);
+	}else{
+		// Everhood - So we can see our dot dmg like live shows it.
+		if(attacker && attacker != this && attacker->IsClient()) {
+			if ((spell_id != SPELL_UNKNOWN || (attack_skill>200 && attack_skill<250)) && damage>0) {
+				attacker->Message_StringID(MT_DoTDamage,OTHER_HIT_DOT,GetCleanName(),itoa(damage),spells[spell_id].name);
+			}
+		}
 	} //end packet sending
     
 }
--- E:\EQEmu833\zone\bonuses.cpp	Mon Apr 17 06:59:14 2006
+++ C:\EQEmuSP\Source\0.7.0\zone\bonuses.cpp	Tue Jul 18 20:24:01 2006
@@ -354,7 +354,8 @@
 			{
 				if(IsBeneficialSpell(spell_id) && effect_value < 0)
 					break;
-
+				// Everhood - dmg dots were sneaking through.
+				if(effect_value>0)
 				newbon->HPRegen += effect_value;
 				break;
 			}
--- E:\EQEmu833\zone\spell_effects.cpp	Sun Jul 16 23:09:44 2006
+++ C:\EQEmuSP\Source\0.7.0\zone\spell_effects.cpp	Wed Jul 19 18:50:16 2006
@@ -2198,7 +2198,8 @@
 				
 				if(effect_value < 0) {
 					effect_value = -effect_value;
-					Damage(caster, effect_value, spell_id, SPELL_ATTACK_SKILL, false, i, false);
+					// Everhood - DoTs spamed cuz this was false
+					Damage(caster, effect_value, spell_id, SPELL_ATTACK_SKILL, false, i, true);
 				} else if(effect_value > 0) {
 					//healing spell...
 					if(caster)
@@ -2213,6 +2214,8 @@
 				effect_value = CalcSpellEffectValue(spell_id, i, caster_level);
 				
 				//is this affected by stuff like GetActSpellHealing??
+				//EverHood - DoTs were sneaking through.
+				if(effect_value>0)
 				HealDamage(effect_value);
 				break;
 			}
Reply With Quote
  #2  
Old 07-23-2006, 01:49 PM
fathernitwit
Developer
 
Join Date: Jul 2004
Posts: 773
Default

I noticed that you did a few inversions on the ibufftic variable throughout the patch, and I have to disagree with them, and did not put them in, grab my changes and lte me know if it fails to work.

I also did not apply the two changes to prevent heals from acting as dots, as I am skeptical of their nescesity. Please provide me with example spells that you think are causing a problem there so I can analyze further.

I added filtering to your dot messages.

also, as I have requested in the past, please do not use unbracked bodys (no {}'s) with multi-line if statements (like the first delta in attack.cpp)
Reply With Quote
  #3  
Old 07-23-2006, 01:58 PM
fathernitwit
Developer
 
Join Date: Jul 2004
Posts: 773
Default

actually, now that I think about it... the crap in bonuses.cpp is just that... crap... it does not belong there at all, since its already taken care of in the buff tic code... so its gone.

my "show me the spell" question still applies for the SE_HealOverTime spell effect in the buff tic code...
Reply With Quote
Reply


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 04:46 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 - 2024, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3