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 09-16-2011, 03:24 PM
bad_captain
Developer
 
Join Date: Feb 2009
Location: Cincinnati, OH
Posts: 512
Default Bash/Kick & Stun

While working on Bot AAs, I began working on coding the Immobilizing Bash AA. Based on my own recollections (which may be wrong) and research I had to do (I haven't played live since 2004), I think the bash/kick - stun code may need updated. Currently for clients, if the character is level 55 or higher and the mob is less than level 56, a bash (or slam as it uses the same code) or kick always stuns. If the mob is > 56, the client can't stun it. NPCs stun at a rate of RuleI(Character, NPCBashKickStunChance), which defaults to 15% I believe. The stun is of duration 0, which I assume was done to provide a chance to interrupt casting. But, looking at the stun code, unless the mob has items or buffs with persistent casting, it appears as if the stun will always interrupt. I did a little testing on my private server taking my 70 PAL to Karnor's and engaging drolvargs near the zone in. Every bash resulted in a stun (I had many shouts of "I have been stunned!" ) , but it didn't appear to negatively affect their offensive output (they don't cast spells, so I would need to go further in to test interruptions). Questions I have about bash and stuns:
  1. Does bash always stun? I don't believe it does and have read many accounts of it not being a reliable way to interrupt casting because it can miss, not stun, etc. But some state that it does in fact stun every time.
  2. Is bash/kick - stun of duration 0? I believe is should be say 0 - 2 seconds, as I have read players mentioning bashing and stunning mobs who are running, and it causing them to stop running for a few seconds (as is, it doesn't really even slow down weapon attacks when attacking.) I have a vague memory of this as well..
  3. Does a successful stun always interrupt (without persistent casting items, buffs or aas)? This I'm not so sure on, but thought I would throw it out there. Description of PAL AA Divine Stun - "Training this ability gives you a new, fast casting spell that has the chance to interrupt Level 68 or lower NPCs. Normal resist rules apply." Does this mean a landed stun could fail to interrupt, or is it just saying it won't interrupt if the stun is resisted?

So, back to trying to add the AA Immobilizing Bash. It states that it "increases the chance that your bashes will stun the enemy." With the current code, this description doesn't make sense as 1) if the mob is below 56, it will be stunned 100% of the time, and 2) there would need to be an initial chance to stun mobs > level 56 to "increase" the chance to stun on a bash, and would need to affect mobs higher than level 56 to make it worthwhile to train this AA after level 65. Not that Sony hasn't worded spells and AAs incorrectly before, but... I have also read where cleric bashes don't stun, but Warriors and Paladins do stun, because of their bash skill being > 200. Some people also state that there was a greater chance to bash/stun when the mob is fleeing (from behind). Then, there's this note on semanna.net:
Quote:
Note on Bash:
As a side investigation, we asked the Devs why a
bash that failed to stun was so much more likely
to interrupt casting than a bash that would have
stunned , but didn' t (due to resist or immunnity).
It turns out that the mechanism first determines
if a bash will stun or not; if not a stun, it checkes
for interrupt or not . When bash was put in to
the game, they did not take into account stun
immunity or the development of stun resist
mods; so that if the first check yeilds a
(potential ) stun, it doesn't check for interrupt
(assuming the stun would do the interrupting) .
The Ogre racial immunity to frontal stuns seems
to be well worth the 70 levels of experience
penalty at this point.
Which makes be believe a successful stun always interrupts, but also adds in the fact that 1) a bash that doesn't stun (!) can still interrupt, and 2) an attempted stun that is resisted can still interrupt, but at a lower rate. I think I'm even more confused than before.


I have rewritten the bash/kick - stun code and included the AA immobilizing bash just as a test, accounting for my belief that bash should 1) not always stun, and 2) have a chance to stun mobs > level 56, 3) have a chance to interrupt if there is no stun, and 4) have a chance to interrupt even on stun resist. But if it's not 100% for mobs < level 56, what chance is there? If it's not 0% for mobs > level 56, what chance is there? Is there a difference between bashing while in front of a mob as opposed to behind it? What about if it's low in health and fleeing?

Does anyone have any resources that can clarify any of this, or have a recollections that agree with anything here? My first goal is to add Immobilizing Bash in for bots, but I need to know how bash/stun should actually work before being able to add in an increase to the chance to stun.

The current bash/kick - stun code:
Code:
		//check stun chances if bashing
		if (damage > 0 && ((skill_used == BASH || skill_used == KICK) && attacker))
		{
			// NPCs can stun with their bash/kick as soon as they recieve it.
			// Clients can stun mobs under level 56 with their bash/kick when they get level 55 or greater.
			if((attacker->IsNPC()) || (attacker->IsClient() && attacker->GetLevel() >= 55 && GetLevel() < 56))
			{
				if (MakeRandomInt(0,99) < (RuleI(Character, NPCBashKickStunChance)) || attacker->IsClient())
				{
					int stun_resist = itembonuses.StunResist+spellbonuses.StunResist;
			
					if(this->IsClient())
						stun_resist += aabonuses.StunResist;
			
					if(this->GetBaseRace() == OGRE && this->IsClient() && !attacker->BehindMob(this, attacker->GetX(), attacker->GetY())) 
					{
						mlog(COMBAT__HITS, "Stun Resisted. Ogres are immune to frontal melee stuns.");
					}
					else 
					{
						if(stun_resist <= 0 || MakeRandomInt(0,99) >= stun_resist) 
						{
							mlog(COMBAT__HITS, "Stunned. We had %d percent resist chance.");
							Stun(0);
						} 
						else 
						{
							if(this->IsClient())
								Message_StringID(MT_Stun, SHAKE_OFF_STUN);
							
							mlog(COMBAT__HITS, "Stun Resisted. We had %dpercent resist chance.");
						}
					}
				}
			}
		}
The code for Stun:
Code:
void Mob::Stun(int duration)
{
	//make sure a shorter stun does not overwrite a longer one.
	if(stunned && stunned_timer.GetRemainingTime() > uint32(duration))
		return;
	
	if(casting_spell_id) {
		int persistent_casting = spellbonuses.PersistantCasting + itembonuses.PersistantCasting;
		if(IsClient())
			persistent_casting += aabonuses.PersistantCasting;
		
		if(MakeRandomInt(1,99) > persistent_casting)
			InterruptSpell();
	}

	if(duration > 0)
	{
		stunned = true;
		stunned_timer.Start(duration);
	}
}
Reply With Quote
  #2  
Old 09-16-2011, 03:51 PM
Caryatis
Dragon
 
Join Date: May 2009
Location: Milky Way
Posts: 541
Default

I was the one who changed that most recently to get stun resist working(since it was not implemented at all prior to that).

Few things, I believe that clients can't stun mobs over level 55 with their bash/kick attacks(unless an AA raises the level) which is why that particular limit is imposed. On the other hand this seems to limit the usefulness of it for later expansions so possibly this has changed but I had no proof so I went with that limit.

On your points...
1.) I think you are right, there should probably be a skill check or something to determine if a bash does stun(especially for kicks as they probably shouldn't stun as often as bash).

2.) I went with the stun duration of 0 as it seemed the safest option however I do also remember bash stopping a fleeing mob so the random duration would probably be the most ideal solution.

3.) I think a stun always interrupts casting(the existence of the persistent casting AA is pretty solid proof that a stun always interrupts to me). The descriptions arent the most accurate in terms of actual code behind the gameplay, I read that as it gives you the chance to stun if the mob doesnt resist or isnt immune.

I think if you are going to remove the level cap on clients bash-stunning mobs, there needs to be a check to make sure the mob is lower level than the client or something like that.

Also I could get behind the idea of a bash that doesnt stun has a chance to interrupt but no way should a resisted stun spell have a chance to interrupt.
Reply With Quote
  #3  
Old 09-16-2011, 05:06 PM
bad_captain
Developer
 
Join Date: Feb 2009
Location: Cincinnati, OH
Posts: 512
Default

Quote:
Originally Posted by Caryatis View Post
Few things, I believe that clients can't stun mobs over level 55 with their bash/kick attacks(unless an AA raises the level) which is why that particular limit is imposed. On the other hand this seems to limit the usefulness of it for later expansions so possibly this has changed but I had no proof so I went with that limit.
Yeah, I'm not sure why a level 80+ character would points into the Imobilizing Bash AA if it only affected mobs under level 55. The AA was added in GoD, more levels added in SoF and more in UF. Maybe they just start with a 0% chance on mobs > levels 55 and add a chance to stun from there. (I think it's 2% per level)

Quote:
Originally Posted by Caryatis View Post
On your points...
1.) I think you are right, there should probably be a skill check or something to determine if a bash does stun(especially for kicks as they probably shouldn't stun as often as bash).
Older skill caps (around PoP?) had warrior bash maxing at 240, with Kick maxing at 210 (at lvl 50, bash was 220, and kick was only 149) Newer caps have bash cap at 320 (lvl 75), and kick at 275. From this, I'm not sure there's enough of a difference to use skill alone to determine chance of stunning, but I think it should be used. And I agree kick probably shouldn't stun as often as well, as a warrior using Bash and Kick could potentially stun quite a bit if they were both equally effective, and logically, I would more likely be stunned being hit with a shield as I would being kicked by someone with a lot of armor on (well, depending where they kicked me, I guess...)

Quote:
Originally Posted by Caryatis View Post
2.) I went with the stun duration of 0 as it seemed the safest option however I do also remember bash stopping a fleeing mob so the random duration would probably be the most ideal solution.
This is most likely correct after reading up some more. I think everyone agreed that there's a chance for at least a short duration of up to 2 or 3 seconds (most likely 2, as I could it out in my head.. 3 seems a bit long).

Quote:
Originally Posted by Caryatis View Post
3.) I think a stun always interrupts casting(the existence of the persistent casting AA is pretty solid proof that a stun always interrupts to me). The descriptions arent the most accurate in terms of actual code behind the gameplay, I read that as it gives you the chance to stun if the mob doesnt resist or isnt immune.
You're probably right. I was just having a hard time believing that a couple of paladin casting stun spells could almost completely lock down a caster if they can get stuns to land (even short duration). Persistent casting is also used to prevent interrupts due to movement, but that seems a reasonable explanation.

Quote:
Originally Posted by Caryatis View Post
I think if you are going to remove the level cap on clients bash-stunning mobs, there needs to be a check to make sure the mob is lower level than the client or something like that.
I think this is reasonable. Or at least similar to the stun spell level limitations of up to like 5 levels over, but I guess a less than character level check would be simple and even across the board.

Quote:
Originally Posted by Caryatis View Post
Also I could get behind the idea of a bash that doesn't stun has a chance to interrupt but no way should a resisted stun spell have a chance to interrupt.
Yeah, if it is done within the bash code, it would only affect stuns resulting from bash and kick attempts. I think the chance to interrupt could possibly result from the knockback portion of the stun? But then again, rereading that quote about the dev and the logic checks, it seems there's an actual check to see of casting is interrupted when the bash doesn't stun (separate from knockback, which I think would come later in the logic checks)

I can probably get something finished this weekend and post here, as this is something I definitely wouldn't commit myself without others looking at and approving.
Reply With Quote
  #4  
Old 09-16-2011, 05:34 PM
ChaosSlayerZ's Avatar
ChaosSlayerZ
Demi-God
 
Join Date: Mar 2009
Location: Umm
Posts: 1,492
Default

here soem contribution info:

definate facts:

1. Bash could Stun
2. Stun duration was GREATER than 0
3. Casting mob COULD recover and complete casting while Stuned

Educated guess:

I would say that a chance to Stun a fleeing mob from behind was MUCH greater than a chance to stun the same mob in a face to face fight.
I would say that chance to stun face to face was about 15% (on roughly equal level targets), while chance to Stun same mob who is Fleeing and from behind was 75%+

Stun definitely had a duration > 0. Again It is possible that duration of stun on a fleeing mob was greater, and was as long as maybe up to 1.0 sec.
I can't really ay if face to face stun duration was shorter - its usually hard to tell mid battle.

Stun most definitely was interrupting casting, but some times a caster mob could recover from it.

On a subject of 55+ mobs - would be nice to have a custom rule to control (or turn it off/on) after which level mobs can't be stunned
Reply With Quote
  #5  
Old 09-16-2011, 06:03 PM
bad_captain
Developer
 
Join Date: Feb 2009
Location: Cincinnati, OH
Posts: 512
Default

Also, Caryatis, I know you are a big proponent of the bonus system. Would this be something you would use the bonuw system for or getAA? Something like bashStunChance or something? I dont believe the AA affects chance to stun on kicks.
Reply With Quote
  #6  
Old 09-16-2011, 10:29 PM
bad_captain
Developer
 
Join Date: Feb 2009
Location: Cincinnati, OH
Posts: 512
Default

Quote:
Originally Posted by ChaosSlayerZ View Post

definate facts:

1. Bash could Stun
2. Stun duration was GREATER than 0
3. Casting mob COULD recover and complete casting while Stuned
While I agree with the first two, I'd like like to see evidence of the third. I definitely think it's possible, but don't know for sure.


Quote:
Originally Posted by ChaosSlayerZ View Post
Educated guess:

I would say that a chance to Stun a fleeing mob from behind was MUCH greater than a chance to stun the same mob in a face to face fight.
I would say that chance to stun face to face was about 15% (on roughly equal level targets), while chance to Stun same mob who is Fleeing and from behind was 75%+
I have to say this is kind of what I was thinking, but I haven't been able to find anything definitive, just a few comments along these lines.

Quote:
Originally Posted by ChaosSlayerZ View Post
Stun definitely had a duration > 0. Again It is possible that duration of stun on a fleeing mob was greater, and was as long as maybe up to 1.0 sec.
I can't really ay if face to face stun duration was shorter - its usually hard to tell mid battle.
I've not heard of duration being affected, just chance.

Quote:
Originally Posted by ChaosSlayerZ View Post
Stun most definitely was interrupting casting, but some times a caster mob could recover from it.
I would definitely like to find some parse or something with this. It makes sense that it could happen, but I'd be hesitant to put this in without proof.
Reply With Quote
  #7  
Old 09-17-2011, 01:00 AM
ChaosSlayerZ's Avatar
ChaosSlayerZ
Demi-God
 
Join Date: Mar 2009
Location: Umm
Posts: 1,492
Default

well considering I don't have LIVE access anymore, the only thing I can provide as prove is my memory of fighting in Highpass:

"Gnoll_Soothsayer regains its concentration and continues casting."

Does message like this sound at least remotely legit?
Of course this doesn't indicate that mob was actually Stuned, only that he recovered from interrupt.
On other hand Bash can lead to Stun, Stun does leads to interrupt, and interrupt can be recovered from - this does sound logical.
UNLESS, its specifically was codded that Stun caused interrupts cannot be recovered from.

This message sits very firmly in my mind, but, I must say however, that the only time I ever had access to Bash is
when I played my SK, who was not my main, so maybe I misremembering things, and confusing
them with messages that indicated that a player has recovered from a stun.


On Stun duration - I think I can say for SURE, that fleeing mobs were stunned for good 1.0 sec, thats 100% for certain -
I remember my days fighting in Blackburrow at low levels very well

Face to face stuns/durations I am not really sure of.
Reply With Quote
  #8  
Old 09-17-2011, 03:51 AM
blackdragonsdg
Dragon
 
Join Date: Dec 2008
Location: Tennessee
Posts: 654
Default

ChaoSlayerZ, I remember seeing a message like "Gnoll_Soothsayer regains its concentration and continues casting." many times while playing EQ over the years.
Reply With Quote
  #9  
Old 09-17-2011, 09:28 AM
pfyon's Avatar
pfyon
Discordant
 
Join Date: Mar 2009
Location: Ottawa
Posts: 495
Default

The "regains it concentration and continues casting" message is when they get pushed a bit (normal melee would push, as would bash/kick), but they passed the channeling check to avoid spell interruption. AFAIK stuns always interrupted your spells (at least from a player perspective), unless they were immune to stuns (eg giants).
Reply With Quote
  #10  
Old 09-17-2011, 11:38 AM
Caryatis
Dragon
 
Join Date: May 2009
Location: Milky Way
Posts: 541
Default

My rule of thumb on when to use the bonus system is if there would be a spell based application as well. Off the top of my head I can't really think of a spell that raises the bash-stun level or chance so I think GetAA would be the preferred method to use here.

Just to back pfyon up, players regain concentration as well and that only happens if you move alittle or get melee'd but a stun is a complete interrupt(unless you have persistent casting AA).
Reply With Quote
  #11  
Old 09-17-2011, 11:49 AM
bad_captain
Developer
 
Join Date: Feb 2009
Location: Cincinnati, OH
Posts: 512
Default

Quote:
Originally Posted by Caryatis View Post
My rule of thumb on when to use the bonus system is if there would be a spell based application as well. Off the top of my head I can't really think of a spell that raises the bash-stun level or chance so I think GetAA would be the preferred method to use here.

Just to back pfyon up, players regain concentration as well and that only happens if you move alittle or get melee'd but a stun is a complete interrupt(unless you have persistent casting AA).
Thanks. That helps a lot.
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 05:26 AM.


 

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