PDA

View Full Version : Reverse Procs


trevius
11-05-2008, 05:13 AM
I am not sure that this would be possible yet, but I think it would be. The idea would be to have a proc on non-weapons that would have a chance to proc when a player was hit as apposed to when a player hits the NPC. It could be any type of proc, but something like a small heal, or rune, or normal DD proc or anything really. I know this isn't live-like, but I just thought it would be something fun to play around with and give more options to making interesting items.

I think the code would be something like after the chancetohit was calculated, if the mob actually hits the player, it checks if the player has any items that aren't weapons and if they have any procs set on them. Then it simply rolls a chance to proc similar to the current proc code.

I don't think this extra check would really take much of a toll on server performance. Though, if people were pulling large trains of mobs, it might. But that is why I think it should only work if an actual hit lands. Because if it checks every swing miss or hit, it would calculate too much. Most likely, if someone is getting hit enough to cause much impact on performance because of this check, they aren't going to last long anyway.

Anyway, I just thought it sounded like a kinda fun and cool new idea to maybe do something that I think even Live could probably use to make more interesting items. Probably the only items it should be checking for procs are shields and range items. And, servers that don't want to use it don't have to worry. Non weapons don't have procs on them in the default database, and they don't have slot type 4 either for procs to be added. So, it would require customization to add either of those to items to even bring this code into play.

MNWatchdog
11-05-2008, 05:48 AM
Neat idea, but I would like to see already existing procs and item effects being implimented first before further adding additional effects.

trevius
11-05-2008, 07:22 AM
Ya, I am sure we could use more effect types working properly or at all. But the idea of this would be to just use any existing effect types and have a check to proc when being hit. I will look into seeing how hard it would be to code and maybe write something up. I am pretty sure we could just copy the current proc code from There could always be a rule put in place to allow admins to enable or disable this extra check after chancetohit.

attack.cpp
Maybe add something like this to where incoming damage is calculated:
TryNonWeaponProc(nonweapon, other);

And then the function would be a modified version of this:
void Mob::TryWeaponProc(const Item_Struct* weapon, Mob *on) {

int ourlevel = GetLevel();
float ProcChance, ProcBonus;
if(weapon!=NULL)
GetProcChances(ProcBonus, ProcChance, weapon->Delay);
else
GetProcChances(ProcBonus, ProcChance);

//give weapon a chance to proc first.
if(weapon != NULL) {
if (IsValidSpell(weapon->Proc.Effect) && (weapon->Proc.Type == ET_CombatProc)) {
float WPC = ProcChance*(100.0f+(float)weapon->ProcRate)/100.0f;
if (MakeRandomFloat(0, 1) <= WPC) { // 255 dex = 0.084 chance of proc. No idea what this number should be really.
if(weapon->Proc.Level > ourlevel) {
mlog(COMBAT__PROCS, "Tried to proc (%s), but our level (%d) is lower than required (%d)", weapon->Name, ourlevel, weapon->Proc.Level);
Mob * own = GetOwner();
if(own != NULL) {
own->Message_StringID(13,PROC_PETTOOLOW);
} else {
Message_StringID(13,PROC_TOOLOW);
}
} else {
mlog(COMBAT__PROCS, "Attacking weapon (%s) successfully procing spell %d (%.2f percent chance)", weapon->Name, weapon->Proc.Effect, ProcChance*100);
ExecWeaponProc(weapon->Proc.Effect, on);
}
} else {
mlog(COMBAT__PROCS, "Attacking weapon (%s) did no proc (%.2f percent chance).", weapon->Name, ProcChance*100);
}
}
}

if(ProcBonus == -1) {
LogFile->write(EQEMuLog::Error, "ProcBonus was -1 value!");
return;
}

//now try our proc arrays
float procmod = float(GetDEX()) / 100.0f + ProcBonus*100.0; //did somebody think about this???
//AndMetal: aren't we doing this in GetProcChances?

uint32 i;
for(i = 0; i < MAX_PROCS; i++) {
if (PermaProcs[i].spellID != SPELL_UNKNOWN) {
if(MakeRandomInt(0, 100) < PermaProcs[i].chance) {
mlog(COMBAT__PROCS, "Permanent proc %d procing spell %d (%d percent chance)", i, PermaProcs[i].spellID, PermaProcs[i].chance);
ExecWeaponProc(PermaProcs[i].spellID, on);
} else {
mlog(COMBAT__PROCS, "Permanent proc %d failed to proc %d (%d percent chance)", i, PermaProcs[i].spellID, PermaProcs[i].chance);
}
}
if (SpellProcs[i].spellID != SPELL_UNKNOWN) {
int chance = ProcChance + SpellProcs[i].chance;
if(MakeRandomInt(0, 100) < chance) {
mlog(COMBAT__PROCS, "Spell proc %d procing spell %d (%d percent chance)", i, SpellProcs[i].spellID, chance);
ExecWeaponProc(SpellProcs[i].spellID, on);
} else {
mlog(COMBAT__PROCS, "Spell proc %d failed to proc %d (%d percent chance)", i, SpellProcs[i].spellID, chance);
}
}
}
}

I will see if I can figure out the best way to do it later if I get the time.

janusd
11-05-2008, 11:03 AM
Trevious, I think what you're thinking of would work similar to the cleric line of reverse damage shields cast on a mob so that when IT hits things, IT takes damage. You may want to look at the way that spell works (I think it's a 62-65 spell) if you're thinking of pursuing this idea.

And while it's not Live-Like at all, it does propose some rather interesting ideas we could implement and some interesting strategies you could create on the custom servers.

And who knows... maybe Sony is spying on us and will steal the idea to include in live. After all, they stole our bot idea (calling 'em mercenaries). Now bots are live-like!

ChaosSlayer
11-05-2008, 11:44 AM
I am not sure that this would be possible yet, but I think it would be. The idea would be to have a proc on non-weapons that would have a chance to proc when a player was hit as apposed to when a player hits the NPC. It could be any type of proc, but something like a small heal, or rune, or normal DD proc or anything really. I know this isn't live-like, but I just thought it would be something fun to play around with and give more options to making interesting items.



not only this is 100% live-like- its allready part of Titanium client.
There are whole bunch of cleric, chanter and druid spell which came out with DON expansion , which put a reverse proc buff on players. Simply put this spell as "worned" on an item - and you have your item with reverse proc.

it simply needs to be codded in.

I don't even consider this an "optional" or custom feature- it something what supposed to be in Emu long time ago =P

AndMetal
11-06-2008, 04:32 AM
not only this is 100% live-like- its allready part of Titanium client.
There are whole bunch of cleric, chanter and druid spell which came out with DON expansion , which put a reverse proc buff on players. Simply put this spell as "worned" on an item - and you have your item with reverse proc.

it simply needs to be codded in.

I don't even consider this an "optional" or custom feature- it something what supposed to be in Emu long time ago =P

The closest thing I can find might be effect ID 339 (http://code.google.com/p/projecteqemu/source/browse/trunk/EQEmuServer/zone/spdat.h#445): SE_TriggerOnCast
mysql> SELECT id, name, CONCAT(effectid1,'/',effect_base_value1,'/',effect_limit_value1) AS e1, CONCAT(effectid2,'/',effect_base_value2,'/',effect_limit_value2) AS e2, CONCAT(effectid3,'/',effect_base_value3,'/',effect_limit_value3) AS e3, CONCAT(effectid4,'/',effect_base_value4,'/',effect_limit_value4) AS e4, CONCAT(effectid5,'/',effect_base_value5,'/',effect_limit_value5) AS e5, CONCAT(effectid6,'/',effect_base_value6,'/',effect_limit_value6) AS e6, CONCAT(effectid7,'/',effect_base_value7,'/',effect_limit_value7) AS e7, CONCAT(effectid8,'/',effect_base_value8,'/',effect_limit_value8) AS e8, CONCAT(effectid9,'/',effect_base_value9,'/',effect_limit_value9) AS e9, CONCAT(effectid10,'/',effect_base_value10,'/',effect_limit_value10) AS e10, CONCAT(effectid11,'/',effect_base_value11,'/',effect_limit_value11) AS e11, CONCAT(effectid12,'/',effect_base_value12,'/',effect_limit_value12) AS e12 FROM spells_new WHERE effectid1 IN(339) OR effectid2 IN(339) OR effectid3 IN(339) OR effectid4 IN(339) OR effectid5 IN(339) OR effectid6 IN(339) OR effectid7 IN(339) OR effectid8 IN(339) OR effectid9 IN(339) OR effectid10 IN(339) OR effectid11 IN(339) OR effectid12 IN(339) ORDER BY id ASC;
+-------+------------------------+---------------+---------+-------------+----------+--------------+---------+---------+---------+---------+---------+---------+---------+
| id | name | e1 | e2 | e3 | e4 | e5 | e6 | e7 | e8 | e9 | e10 | e11 | e12 |
+-------+------------------------+---------------+---------+-------------+----------+--------------+---------+---------+---------+---------+---------+---------+---------+
| 8032 | Mana Flare (http://lucy.allakhazam.com/spell.html?id=8032) | 339/100/8033 (http://lucy.allakhazam.com/spell.html?id=8033) | 138/0/0 | 137/0/0 | 141/1/0 | 139/-8033/0 | 311/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 8205 | Blood Magic (http://lucy.allakhazam.com/spell.html?id=8205) | 339/50/8206 (http://lucy.allakhazam.com/spell.html?id=8206) | 311/0/0 | 324/200/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 8206 | Blood Magic (http://lucy.allakhazam.com/spell.html?id=8206) | 339/50/8207 (http://lucy.allakhazam.com/spell.html?id=8207) | 311/0/0 | 324/250/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 8207 | Blood Magic (http://lucy.allakhazam.com/spell.html?id=8207) | 339/50/8208 (http://lucy.allakhazam.com/spell.html?id=8208) | 311/0/0 | 324/300/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 8208 | Blood Magic (http://lucy.allakhazam.com/spell.html?id=8208) | 339/50/8209 (http://lucy.allakhazam.com/spell.html?id=8209) | 311/0/0 | 324/350/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 8406 | Pyromancy (http://lucy.allakhazam.com/spell.html?id=8406) | 339/5/8160 (http://lucy.allakhazam.com/spell.html?id=8160) | 138/0/0 | 135/2/0 | 142/60/0 | 134/75/0 | 141/1/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 8407 | Pyromancy (http://lucy.allakhazam.com/spell.html?id=8407) | 339/10/8162 (http://lucy.allakhazam.com/spell.html?id=8162) | 138/0/0 | 135/2/0 | 142/60/0 | 134/75/0 | 141/1/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 8408 | Pyromancy (http://lucy.allakhazam.com/spell.html?id=8408) | 339/15/8164 (http://lucy.allakhazam.com/spell.html?id=8164) | 138/0/0 | 135/2/0 | 142/60/0 | 134/75/0 | 141/1/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 8486 | Arcane Aria (http://lucy.allakhazam.com/spell.html?id=8486) | 339/100/8487 (http://lucy.allakhazam.com/spell.html?id=8487) | 137/0/0 | 139/-8487/0 | 134/75/0 | 138/0/0 | 311/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 11103 | Cryomancy (http://lucy.allakhazam.com/spell.html?id=11103) | 339/5/11107 (http://lucy.allakhazam.com/spell.html?id=11107) | 138/0/0 | 135/3/0 | 142/60/0 | 134/75/0 | 141/1/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 11104 | Cryomancy (http://lucy.allakhazam.com/spell.html?id=11104) | 339/10/11107 (http://lucy.allakhazam.com/spell.html?id=11107) | 138/0/0 | 135/3/0 | 142/60/0 | 134/75/0 | 141/1/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 11105 | Cryomancy (http://lucy.allakhazam.com/spell.html?id=11105) | 339/15/11107 (http://lucy.allakhazam.com/spell.html?id=11107) | 138/0/0 | 135/3/0 | 142/60/0 | 134/75/0 | 141/1/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 11903 | Mana Recursion (http://lucy.allakhazam.com/spell.html?id=11903) | 339/100/11906 (http://lucy.allakhazam.com/spell.html?id=11906) | 138/0/0 | 137/0/0 | 141/1/0 | 139/-11906/0 | 311/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 11904 | Mana Recursion Rk. II (http://lucy.allakhazam.com/spell.html?id=11904) | 339/100/11907 (http://lucy.allakhazam.com/spell.html?id=11907) | 138/0/0 | 137/0/0 | 141/1/0 | 139/-11907/0 | 311/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 11905 | Mana Recursion Rk. III (http://lucy.allakhazam.com/spell.html?id=11905) | 339/100/11908 (http://lucy.allakhazam.com/spell.html?id=11908) | 138/0/0 | 137/0/0 | 141/1/0 | 139/-11908/0 | 311/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
+-------+------------------------+---------------+---------+-------------+----------+--------------+---------+---------+---------+---------+---------+---------+---------+
15 rows in set (0.00 sec)


However, I don't think this is quite what we're looking for.

Does anyone know some examples of the spells or items on Live that do this?

KLS
11-06-2008, 04:51 AM
http://lucy.allakhazam.com/spell.html?id=5356&source=Live
Good example of a defensive proc.

kayen85
11-06-2008, 10:54 AM
KLS the spell with Mitigate Melee Damage by 75%, 5000 total is a good example , however this might be a good time to bring up too that effect above of mitigation up to a total doesn't work either which be a HUGE thing if we could get it working as well.

ChaosSlayer
11-06-2008, 01:14 PM
here are Reverse/Reactive/Defencive proc buff spells exmaples for lev 70 and lower (there are much more for over 70, but just showing you legal spells for T expansions set)

druid spells:

http://everquest.allakhazam.com/db/spelllist.html?name=Add+Defensive+Proc&type=dru&level=70&opt=And+Lower&action=search

cleric spells:

http://everquest.allakhazam.com/db/spelllist.html?name=Add+Defensive+Proc&type=clr&level=70&opt=And+Lower&action=search

chanter:

http://everquest.allakhazam.com/db/spelllist.html?name=Add+Defensive+Proc&type=enc&level=70&opt=And+Lower&action=search

shaman:

http://everquest.allakhazam.com/db/spelllist.html?name=Add+Defensive+Proc&type=shm&level=70&opt=And+Lower&action=search

ChaosSlayer
11-06-2008, 01:53 PM
and yeah as I said before- all these spells are Buffs.
this means just like you can put Enduring Breath on an item as worn effect to have it with unlimited duration - same way you should be able to put these Reverse Proc spells on ANY item as worn effect to have unlimited duration Defensive Proc

AndMetal
11-06-2008, 03:17 PM
Based on those spells, it's Effect ID 323 (http://code.google.com/p/projecteqemu/source/browse/trunk/EQEmuServer/zone/spdat.h#429) (SE_DefensiveProc):
mysql> SELECT id, name, CONCAT(effectid1,'/',effect_base_value1,'/',effect_limit_value1) AS e1, CONCAT(effectid2,'/',effect_base_value2,'/',effect_limit_value2) AS e2, CONCAT(effectid3,'/',effect_base_value3,'/',effect_limit_value3) AS e3, CONCAT(effectid4,'/',effect_base_value4,'/',effect_limit_value4) AS e4, CONCAT(effectid5,'/',effect_base_value5,'/',effect_limit_value5) AS e5, CONCAT(effectid6,'/',effect_base_value6,'/',effect_limit_value6) AS e6, CONCAT(effectid7,'/',effect_base_value7,'/',effect_limit_value7) AS e7, CONCAT(effectid8,'/',effect_base_value8,'/',effect_limit_value8) AS e8, CONCAT(effectid9,'/',effect_base_value9,'/',effect_limit_value9) AS e9, CONCAT(effectid10,'/',effect_base_value10,'/',effect_limit_value10) AS e10, CONCAT(effectid11,'/',effect_base_value11,'/',effect_limit_value11) AS e11, CONCAT(effectid12,'/',effect_base_value12,'/',effect_limit_value12) AS e12 FROM spells_new WHERE effectid1 IN(323) OR effectid2 IN(323) OR effectid3 IN(323) OR effectid4 IN(323) OR effectid5 IN(323) OR effectid6 IN(323) OR effectid7 IN(323) OR effectid8 IN(323) OR effectid9 IN(323) OR effectid10 IN(323) OR effectid11 IN(323) OR effectid12 IN(323) ORDER BY id ASC;
+-------+------------------------------------+---------------+---------------+---------------+----------------+-----------+---------+---------+---------+---------+---------+---------+---------+
| id | name | e1 | e2 | e3 | e4 | e5 | e6 | e7 | e8 | e9 | e10 | e11 | e12 |
+-------+------------------------------------+---------------+---------------+---------------+----------------+-----------+---------+---------+---------+---------+---------+---------+---------+
| 5300 | Nature Veil | 323/5308/300 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 5356 | Oaken Guard | 162/75/0 | 323/6156/400 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 5866 | Divine Retribution | 323/5987/300 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 5903 | Color Shock | 323/6033/300 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 6190 | Shocking Defense Discipline | 323/6202/150 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 6195 | Counterforce Discipline | 323/6204/150 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 6200 | Unpredictable Rage Discipline | 323/6207/150 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 6244 | Elemental Conjunction | 85/6305/400 | 323/6306/100 | 10/0/0 | 79/800/0 | 69/800/0 | 10/0/0 | 10/0/0 | 10/0/0 | 10/0/0 | 10/0/0 | 15/10/0 | 0/20/0 |
| 6276 | Primal Fusion | 85/6317/400 | 323/6318/100 | 10/0/0 | 79/1000/0 | 69/1000/0 | 10/0/0 | 10/0/0 | 10/0/0 | 10/0/0 | 10/0/0 | 15/12/0 | 0/24/0 |
| 6377 | Pious Shield | 323/6408/150 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 6393 | Blessed Shield | 323/6408/150 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 6540 | Form of Lava | 323/6541/300 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 6662 | Ward of Retribution | 323/6719/400 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 6730 | Ward of Vengeance | 323/6748/400 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 6902 | Ward of the Divine | 323/6904/400 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 6903 | Ward of Rebuke | 323/6905/400 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 8008 | Skin of the Reptile | 10/0/0 | 10/0/0 | 10/0/0 | 323/8009/400 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 8015 | Lingering Sloth | 10/0/0 | 10/0/0 | 323/8016/400 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 8038 | Burning Aura | 323/8039/400 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 8334 | Creeping Plague | 323/8335/400 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 8476 | Bloodthirst | 10/0/0 | 10/0/0 | 323/8869/400 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 8479 | Ward of Tunare | 2/25/0 | 10/0/0 | 4/60/0 | 323/8480/400 | 1/80/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 8484 | Decrepit Skin | 323/8485/400 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 8506 | Ward of Bedazzlement | 323/8507/400 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 9637 | Ward of Mysaphar | 10/0/0 | 10/0/0 | 10/0/0 | 323/11553/1000 | 10/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 9639 | Scales of Draton`ra | 323/11554/400 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 9653 | Ward of the Scribe | 10/0/0 | 10/0/0 | 10/0/0 | 323/11553/1000 | 10/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 9655 | Putrid Skin | 323/11554/200 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 9785 | Ward of Reprisal | 323/9788/400 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 9786 | Ward of Reprisal Rk. II | 323/9789/400 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 9787 | Ward of Reprisal Rk. III | 323/9790/400 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 9905 | Direwood Guard | 162/75/0 | 323/9908/400 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 9906 | Direwood Guard Rk. II | 162/75/0 | 323/9909/400 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 9907 | Direwood Guard Rk. III | 162/75/0 | 323/9910/400 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 10666 | Ward of Bewilderment | 323/10667/400 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 10862 | Tendrilmist Guard | 55/1800/0 | 333/10865/0 | 323/11912/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 10863 | Tendrilmist Guard Rk. II | 55/1875/0 | 333/10866/0 | 323/11912/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 10864 | Tendrilmist Guard Rk. III | 55/1950/0 | 333/10867/0 | 323/11912/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 11291 | Wrath of God | 323/11292/300 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 11782 | Lassitude | 10/0/0 | 10/0/0 | 323/11785/400 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 11783 | Lassitude Rk. II | 10/0/0 | 10/0/0 | 323/11786/400 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 11784 | Lassitude Rk. III | 10/0/0 | 10/0/0 | 323/11787/400 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 11885 | Rune of the Kedge | 55/1800/0 | 323/11888/400 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 11886 | Rune of the Kedge Rk. II | 55/1875/0 | 323/11889/400 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 11887 | Rune of the Kedge Rk. III | 55/1950/0 | 323/11890/400 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 11916 | Shocking Stance Discipline | 323/11919/125 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 11917 | Shocking Stance Discipline Rk. II | 323/11920/150 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
| 11918 | Shocking Stance Discipline Rk. III | 323/11921/175 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 | 254/0/0 |
+-------+------------------------------------+---------------+---------------+---------------+----------------+-----------+---------+---------+---------+---------+---------+---------+---------+
48 rows in set (0.20 sec)


Looking at the spell descriptions on Allakhazam, it appears they work like a regular proc in that, it can proc on any swing, not just damaging hits. We should be able to add additional proc info into the mob class:
zone/mob.h

enum {MAX_PROCS = 4};
tProc PermaProcs[MAX_PROCS];
tProc RevPermaProcs[MAX_PROCS];
tProc SpellProcs[MAX_PROCS];
tProc RevSpellProcs[MAX_PROCS];

fill in the values (probably in zone/spells.cpp), then call it in the proc code:
zone/attack.cpp

uint32 i;
for(i = 0; i < MAX_PROCS; i++) {
if (PermaProcs[i].spellID != SPELL_UNKNOWN) {
if(MakeRandomInt(0, 100) < PermaProcs[i].chance) {
mlog(COMBAT__PROCS, "Permanent proc %d procing spell %d (%d percent chance)", i, PermaProcs[i].spellID, PermaProcs[i].chance);
ExecWeaponProc(PermaProcs[i].spellID, on);
} else {
mlog(COMBAT__PROCS, "Permanent proc %d failed to proc %d (%d percent chance)", i, PermaProcs[i].spellID, PermaProcs[i].chance);
}
}
if (SpellProcs[i].spellID != SPELL_UNKNOWN) {
int chance = ProcChance + SpellProcs[i].chance;
if(MakeRandomInt(0, 100) < chance) {
mlog(COMBAT__PROCS, "Spell proc %d procing spell %d (%d percent chance)", i, SpellProcs[i].spellID, chance);
ExecWeaponProc(SpellProcs[i].spellID, on);
} else {
mlog(COMBAT__PROCS, "Spell proc %d failed to proc %d (%d percent chance)", i, SpellProcs[i].spellID, chance);
}
}
if (on->RevPermaProcs[i].spellID != SPELL_UNKNOWN) {
if (MakeRandomInt(0, 100) < on->RevPermaProcs[i].chance) {
mlog(COMBAT__PROCS, "Reverse Permanent proc %d procing spell %d (%d percent chance)", i, on->RevPermaProcs[i].spellID, on->RevPermaProcs[i].chance);
on->ExecWeaponProc(on->RevPermaProcs[i].spellID, this);
} else {
mlog(COMBAT__PROCS, "Reverse Permanent proc %d failed to proc %d (%d percent chance)", i, on->RevPermaProcs[i].spellID, on->RevPermaProcs[i].chance);
}
}
if (on->RevSpellProcs[i].spellID != SPELL_UNKNOWN) {
if (MakeRandomInt(0, 100) < on->RevSpellProcs[i].chance) {
mlog(COMBAT__PROCS, "Reverse Spell proc %d procing spell %d (%d percent chance)", i, on->RevSpellProcs[i].spellID, on->RevSpellProcs[i].chance);
on->ExecWeaponProc(on->RevSpellProcs[i].spellID, this);
} else {
mlog(COMBAT__PROCS, "Reverse Spell proc %d failed to proc %d (%d percent chance)", i, on->RevSpellProcs[i].spellID, on->RevSpellProcs[i].chance);
}
}
}

Obviously, there's a lot more needed, but hopefully this will point us in the right direction. If I get some time, I may work the rest of this out, but if someone else wants to finish this off, feel free.

ChaosSlayer
01-26-2009, 01:03 AM
so guys- I hear that reverse procs working now? At least Skin of Reptile does on StormHeaven server
when did this got fixed?

Also - who ever fixed it - did you MAKE SURE that this ALSO works with WORN EFFECT items? (if an item should have a WORNEFFECT which is a reactive proc buff - its should work as if a person would have been buffed with that buff)

AndMetal
01-28-2009, 05:13 PM
I think this was added in Rev 176 (http://code.google.com/p/projecteqemu/source/detail?r=176).

changelog.txt (http://code.google.com/p/projecteqemu/source/browse/trunk/EQEmuServer/changelog.txt?r=176):
==11/07/2008
seveianrex: Added #melody as a supplement for /melody until the OPcode can be located. Don't forget to:

INSERT INTO commands (command, access, description) VALUES ('melody', 0, 'A supplement for /melody until the OP code is found.')

seveianrex: Added support for defensive and ranged spell-effect based procs. Having some zone-crash issues with the ranged proc code for some reason, so it's commented out until I can fix it.