As previously discussed here, defensive procs are unaffected by proc rate modifiers
http://www.eqemulator.org/forums/showthread.php?t=34722.
This is because of this in attack.cpp:
Code:
for (int i = 0; i < MAX_PROCS; i++) {
if (MakeRandomInt(0, 100) < MakeRandomInt(0, 20)) {
ExecWeaponProc(DefensiveProcs[i].spellID, on);}
}
I am writing some custom spells that I want to have a 100% proc rate and rewrote the code as follows:
Code:
for (int i = 0; i < MAX_PROCS; i++) {
switch(DefensiveProcs[i].spellID)
{
case 9730:
case 9733:
case 9736:
case 9739:
case 9742:
ExecWeaponProc(DefensiveProcs[i].spellID, on);
break;
default:
if (MakeRandomInt(0, 100) < MakeRandomInt(0, 20))
{
ExecWeaponProc(DefensiveProcs[i].spellID, on);
}
}
}
I even deleted the:
Code:
if (MakeRandomInt(0, 100) < MakeRandomInt(0, 20))
to try to make it proc every time and that still does not work. I am not a C++ programmer. All of my experience is in C#, but the switch should fall through right? Regardless, if I make the default to proc every time, why does it still only proc every so often and not every attack? Is this handled somewhere else in the code or database as well?