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

Development::Feature Requests Post suggestions/feature requests here.

Reply
 
Thread Tools Display Modes
  #1  
Old 04-27-2010, 04:21 PM
Kilralpine
Sarnak
 
Join Date: Jul 2004
Posts: 98
Default Newer Stat Categories (SoF+)

I was just wondering, when will there be support for the newer stats available on the SoF client.... particullarly spell damage.
Reply With Quote
  #2  
Old 04-27-2010, 11:04 PM
Secrets's Avatar
Secrets
Demi-God
 
Join Date: May 2007
Location: b
Posts: 1,450
Default

Quote:
Originally Posted by Kilralpine View Post
I was just wondering, when will there be support for the newer stats available on the SoF client.... particullarly spell damage.
Whenever a developer gets around to it, or you could submit a patch yourself.

I also posted spell damage scaling examples around here somewhere, but it had a null pointer check missing. You could also try this, I wrote this for the EZ server because they wanted a way to scale melee damage, spell damage, etc, to a stackable % modifier.

Code:
Index: aggro.cpp
===================================================================
--- aggro.cpp	(revision 1424)
+++ aggro.cpp	(working copy)
@@ -1239,6 +1239,7 @@
 			case SE_HitChance:
 			case SE_DamageModifier:
 			case SE_MinDamageModifier:
+			case SE_MinDamageModifierV2:
 			case SE_IncreaseBlockChance:
 			case SE_Accuracy:
 			case SE_DamageShield:
Index: attack.cpp
===================================================================
--- attack.cpp	(revision 1424)
+++ attack.cpp	(working copy)
@@ -3923,6 +3923,7 @@
 	if(spellbonuses.DamageModifierSkill == skill || spellbonuses.DamageModifierSkill == 255){
 		damage += ((damage * spellbonuses.DamageModifier)/100);
 	}
+	damage += ((damage * spellbonuses.DamageModifierV2)/100);
  
 	if(itembonuses.DamageModifierSkill == skill || itembonuses.DamageModifierSkill == 255){
 		damage += ((damage * itembonuses.DamageModifier)/100);
Index: bonuses.cpp
===================================================================
--- bonuses.cpp	(revision 1424)
+++ bonuses.cpp	(working copy)
@@ -1088,6 +1088,32 @@
 					newbon->MinDamageModifier = effect_value;
 				break;
 			}
+
+			case SE_MinDamageModifierV2:
+			{
+				newbon->DamageModifierV2 += effect_value;
+				break;
+			}
+			case SE_DamageModifierSpell:
+			{
+				newbon->DamageModifierSpell += effect_value;
+				break;
+			}
+			case SE_DamageModifierDOT:
+			{
+				newbon->DamageModifierDOT += effect_value;
+				break;
+			}
+			case SE_HealingModifierSpell:
+			{
+				newbon->HealingModifierSpell += effect_value;
+				break;
+			}
+			case SE_HealingModifierDOT:
+			{
+				newbon->HealingModifierDOT += effect_value;
+				break;
+			}
 				
 			case SE_StunResist:
 			{
Index: effects.cpp
===================================================================
--- effects.cpp	(revision 1424)
+++ effects.cpp	(working copy)
@@ -64,6 +64,11 @@
 		modifier += GetFocusEffect(focusImprovedDamage, spell_id);
 	}
 	
+	if(IsOverTimeSpell(spell_id))
+	modifier += spellbonuses.DamageModifierDOT;
+	else
+	modifier += spellbonuses.DamageModifierSpell;
+
 	// Need to scale HT damage differently after level 40! It no longer scales by the constant value in the spell file. It scales differently, instead of 10 more damage per level, it does 30 more damage per level. So we multiply the level minus 40 times 20 if they are over level 40.
 	if ( spell_id == SPELL_HARM_TOUCH || spell_id == SPELL_HARM_TOUCH2 || spell_id == SPELL_IMP_HARM_TOUCH ) {
 		if (this->GetLevel() > 40)
@@ -222,6 +227,10 @@
 	sint32 modifier = 100;
 
 	modifier += GetFocusEffect(focusImprovedHeal, spell_id);
+	if(IsOverTimeSpell(spell_id))
+	modifier += spellbonuses.HealingModifierDOT;
+	else
+	modifier += spellbonuses.HealingModifierSpell;
 						
 	if(spells[spell_id].buffduration < 1) {
 		//non-dot
Index: mob.h
===================================================================
--- mob.h	(revision 1424)
+++ mob.h	(working copy)
@@ -234,6 +234,11 @@
 	uint8  HitChanceSkill;
 	sint16 DamageModifier;		//needs to be thought about more and implemented
 	uint8  DamageModifierSkill;
+	sint16 DamageModifierV2;
+	sint16 DamageModifierSpell;
+	sint16 DamageModifierDOT;
+	sint16 HealingModifierSpell;
+	sint16 HealingModifierDOT;
 	sint16 MinDamageModifier;   //i
 	sint16 ProcChance;			// ProcChance/10 == % increase i
 	sint16 ExtraAttackChance;
Index: spdat.cpp
===================================================================
--- spdat.cpp	(revision 1424)
+++ spdat.cpp	(working copy)
@@ -162,7 +162,20 @@
 	return false;
 }
 
+bool IsOverTimeSpell(int16 spellid) {
+	for (int o = 0; o < EFFECT_COUNT; o++)
+	{
+		int32 tid = spells[spellid].buffduration;
+		{
+			if(tid > 0)
+			return true;
+		}
+	}
+	return false;
+}
 
+
+
 bool IsFearSpell(int16 spell_id) {
 	return IsEffectInSpell(spell_id, SE_Fear);
 }
Index: spdat.h
===================================================================
--- spdat.h	(revision 1424)
+++ spdat.h	(working copy)
@@ -32,7 +32,6 @@
 #define SPELL_IMP_HARM_TOUCH 2774
 #define SPELL_NPC_HARM_TOUCH 929
 
-
 //#define SPDAT_SIZE		1824000
 /* 
    solar: look at your spells_en.txt and find the id of the last spell.
@@ -315,7 +314,7 @@
 #define SE_HitChance				184
 #define SE_DamageModifier			185
 #define SE_MinDamageModifier		186
-//#define SE_Unknown187				187	//not used
+#define SE_MinDamageModifierV2		187	//not used
 #define SE_IncreaseBlockChance		188	//not implemented
 #define SE_CurrentEndurance			189
 #define SE_EndurancePool			190	//not implemented
@@ -338,10 +337,10 @@
 #define SE_FleshToBone				207
 //#define SE_Unknown208				208	//not used
 #define SE_FadingMemories2			209
-#define SE_PetShield				210	//per lucy, not implemented
-#define SE_AEMelee					211	//per lucy, not implemented
-#define SE_ProlongedDestruction		212	//per lucy, not implemented
-//#define SE_Unknown213				213	//not used
+#define SE_DamageModifierSpell		210	//per lucy, not implemented
+#define SE_DamageModifierDOT		211	//per lucy, not implemented
+#define SE_HealingModifierSpell		212	//per lucy, not implemented
+#define SE_HealingModifierDOT		213	//not used
 #define SE_MaxHPChange 				214	//Grace of the Order, Plague of Hulcror, not implemented
 //#define SE_Unknown215				215	//not used
 #define SE_Accuracy					216	//not implemented
@@ -676,6 +675,7 @@
 bool IsSummonSpell(int16 spellid);
 bool IsEvacSpell(int16 spellid);
 bool IsDamageSpell(int16 spellid);
+bool IsOverTimeSpell(int16 spellid);
 bool IsFearSpell(int16 spellid);
 bool BeneficialSpell(int16 spell_id);
 bool GroupOnlySpell(int16 spell_id);
Index: spell_effects.cpp
===================================================================
--- spell_effects.cpp	(revision 1424)
+++ spell_effects.cpp	(working copy)
@@ -2407,7 +2407,16 @@
 				break;
 			}
 
+			case SE_MinDamageModifierV2:
+			{
+#ifdef SPELL_EFFECT_SPAM
+				snprintf(effect_desc, _EDLEN, "Damage Modifier v2: +%+i%%", effect_value);
+#endif
+				// handled with bonuses
+				break;
+			}
 
+
 			case SE_StunResist:
 			{
 #ifdef SPELL_EFFECT_SPAM
@@ -3255,6 +3264,33 @@
 
 		switch (spells[buffs[slot].spellid].effectid[i])
 		{
+
+			case SE_MinDamageModifierV2:
+			{
+			spellbonuses.DamageModifierV2 -= (spells[buffs[slot].spellid].base[i]);
+			break;
+			}
+			case SE_DamageModifierSpell:
+			{
+			spellbonuses.DamageModifierSpell -= (spells[buffs[slot].spellid].base[i]);
+			break;
+			}
+			case SE_DamageModifierDOT:
+			{
+			spellbonuses.DamageModifierDOT -= (spells[buffs[slot].spellid].base[i]);
+			break;
+			}
+			case SE_HealingModifierSpell:
+			{
+			spellbonuses.HealingModifierSpell -= (spells[buffs[slot].spellid].base[i]);
+			break;
+			}
+			case SE_HealingModifierDOT:
+			{
+			spellbonuses.HealingModifierDOT -= (spells[buffs[slot].spellid].base[i]);
+			break;
+			}
+
 			case SE_WeaponProc:
 			{
 				uint16 procid = GetProcID(buffs[slot].spellid, i);
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 07:44 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