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)

 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
  #1  
Old 10-04-2006, 08:21 AM
KLS
Administrator
 
Join Date: Sep 2006
Posts: 1,348
Default Spell Stacking Block/Overwrite

Been fiddling around with the server for a while now and I've turned my eye, briefly, on spell stacking.

I was going through the code trying to figure out why two spells that should stack, don't stack.

Hand of Virtue
1: Stacking: Block new spell if slot 3 is effect 'Max Hitpoints' and < 2405
2: Increase Max Hitpoints by 1405
3: Increase HP when cast by 1405
4: Increase AC by 72
5: Stacking: Overwrite existing spell if slot 3 is effect 'Max Hitpoints' and < 2405

Brell's Stalwart Shield
4: Increase Max Hitpoints by 330.

It puzzled me because the overwrite and block says nothing about slot 4 and the effects in slot 4 don't match at all. Looking for something that could be the problem I noticed two spots in Mob::CheckStackConflict():

Code:
		if(effect1 == SE_StackingCommand_Block)
		{
			blocked_effect = sp1.base[i];
			blocked_slot = sp1.formula[i] - 200;
			blocked_below_value = sp1.max[i];
			
			if(sp2.effectid[blocked_slot] == blocked_effect)
			{
and
Code:
		if(effect2 == SE_StackingCommand_Overwrite)
		{
			overwrite_effect = sp2.base[i];
			overwrite_slot = sp2.formula[i] - 200;
			overwrite_below_value = sp2.max[i];
			if(sp1.effectid[overwrite_slot] == overwrite_effect)
			{
This issue I believe after looking through lucy's raw data for the spells in question is the formula. The formula calc for a blocked or overwrite slot 3 effect is '203': 203-200 = 3, so we're referencing sp1.effectid[3] which would be slot 4. So instead of comparing the slot we're supposed to be we're comparing the slot+1 we're supposed to be. I think making these line changes:

Code:
if(sp2.effectid[blocked_slot-1] == blocked_effect)
&
Code:
if(sp1.effectid[overwrite_slot-1] == overwrite_effect)
would fix quite a few stacking issues, not all mind you but yeah, hope I was clear enough.

Last edited by KLS; 10-04-2006 at 04:46 PM..
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 06:08 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