Page 1 of 2

Damage increase cap.

Posted: January 23rd, 2020, 9:25 pm
by LouisCOV
Is there any cap for damage increase in pvm?
Is it like that?
Tactics Damage Bonus = (120 / 1.6) + 6.25 = 81.25%

Anatomy Damage Bonus = (120 / 2) + 5 = 65%

Lumberjacking Damage Bonus = 0/5 = 0

Strength Damage Bonus = (125 * 0.3) + 5 = 42.5%

Damage Increase from Items = 100%

Total Damage Bonus = 81.25 + 65 + 0 + 42.5 + 100 = 288.75%

Uoguide source.

Re: Damage increase cap.

Posted: January 24th, 2020, 3:48 am
by Calvin
sort of...

Code: Select all

			#region Damage Multipliers
			/*
			 * The following damage bonuses multiply damage by a factor.
			 * Capped at x3 (300%).
			 */
			int percentageBonus = 0;

			WeaponAbility a = WeaponAbility.GetCurrentAbility( attacker );
			SpecialMove move = SpecialMove.GetCurrentMove( attacker );

			if( a != null )
			{
				percentageBonus += (int)(a.DamageScalar * 100) - 100;
			}

			if( move != null )
			{
				percentageBonus += (int)(move.GetDamageScalar( attacker, defender ) * 100) - 100;
			}

			percentageBonus += (int)(damageBonus * 100) - 100;

			CheckSlayerResult cs = CheckSlayers( attacker, defender );

			if ( cs != CheckSlayerResult.None )
			{
				if ( cs == CheckSlayerResult.Slayer )
					defender.FixedEffect( 0x37B9, 10, 5 );

				percentageBonus += 100;
			}

			if ( !attacker.Player )
			{
				if ( defender is PlayerMobile )
				{
					PlayerMobile pm = (PlayerMobile)defender;

					if( pm.EnemyOfOneType != null && pm.EnemyOfOneType != attacker.GetType() )
					{
						percentageBonus += 100;
					}
				}
			}
			else if ( !defender.Player )
			{
				if ( attacker is PlayerMobile )
				{
					PlayerMobile pm = (PlayerMobile)attacker;

					if ( pm.WaitingForEnemy )
					{
						pm.EnemyOfOneType = defender.GetType();
						pm.WaitingForEnemy = false;
					}

					if ( pm.EnemyOfOneType == defender.GetType() )
					{
						defender.FixedEffect( 0x37B9, 10, 5, 1160, 0 );

						percentageBonus += 50;
					}
				}
			}

			int packInstinctBonus = GetPackInstinctBonus( attacker, defender );

			if( packInstinctBonus != 0 )
			{
				percentageBonus += packInstinctBonus;
			}

			if( m_InDoubleStrike )
			{
				percentageBonus -= 10;
			}

			TransformContext context = TransformationSpellHelper.GetContext( defender );

			if( (m_Slayer == SlayerName.Silver || m_Slayer2 == SlayerName.Silver) && context != null && context.Spell is NecromancerSpell && context.Type != typeof( HorrificBeastSpell ) )
			{
				// Every necromancer transformation other than horrific beast takes an additional 25% damage
				percentageBonus += 25;
			}

			if ( attacker is PlayerMobile && !(Core.ML && defender is PlayerMobile ))
			{
				PlayerMobile pmAttacker = (PlayerMobile) attacker;

				if( pmAttacker.HonorActive && pmAttacker.InRange( defender, 1 ) )
				{
					percentageBonus += 25;
				}

				if( pmAttacker.SentHonorContext != null && pmAttacker.SentHonorContext.Target == defender )
				{
					percentageBonus += pmAttacker.SentHonorContext.PerfectionDamageBonus;
				}
			}

			BaseTalisman talisman = attacker.Talisman as BaseTalisman;

			if ( talisman != null && talisman.Killer != null )
				percentageBonus += talisman.Killer.DamageBonus( defender );

			percentageBonus = Math.Min( percentageBonus, 300 );

			damage = AOS.Scale( damage, 100 + percentageBonus );
			#endregion

Re: Damage increase cap.

Posted: January 24th, 2020, 3:59 am
by Calvin
for some reason it wont let me post the other bit

Re: Damage increase cap.

Posted: January 24th, 2020, 4:00 am
by Calvin

Code: Select all

			#region Modifiers
			/*
			 * The following are damage modifiers whose effect shows on the status bar.
			 * Capped at 100% total.
			 */
			int damageBonus = AosAttributes.GetValue( attacker, AosAttribute.WeaponDamage );

			// Horrific Beast transformation gives a +25% bonus to damage.
			if( TransformationSpellHelper.UnderTransformation( attacker, typeof( HorrificBeastSpell ) ) )
				damageBonus += 25;

			// Divine Fury gives a +10% bonus to damage.
			if ( Spells.Chivalry.DivineFurySpell.UnderEffect( attacker ) )
				damageBonus += 10;

			int defenseMasteryMalus = 0;

			// Defense Mastery gives a -50%/-80% malus to damage.
			if ( Server.Items.DefenseMastery.GetMalus( attacker, ref defenseMasteryMalus ) )
				damageBonus -= defenseMasteryMalus;

			int discordanceEffect = 0;

			// Discordance gives a -2%/-48% malus to damage.
			if ( SkillHandlers.Discordance.GetEffect( attacker, ref discordanceEffect ) )
				damageBonus -= discordanceEffect * 2;

			if ( damageBonus > 100 )
				damageBonus = 100;
			#endregion

			double totalBonus = strengthBonus + anatomyBonus + tacticsBonus + lumberBonus + ((double)(GetDamageBonus() + damageBonus) / 100.0);

			return damage + (int)(damage * totalBonus);
		}

Re: Damage increase cap.

Posted: January 24th, 2020, 4:05 am
by Calvin
wont let me post the other part...

it's this bit and the top post
Image

Re: Damage increase cap.

Posted: January 24th, 2020, 4:08 am
by Calvin
Image

Re: Damage increase cap.

Posted: January 24th, 2020, 7:52 am
by Shallan
Lumber suck. Tried it with 100 anat and 120 tact on Sampire with Dobule Axe demon slayer on Para Balrons , didnt see diffrence.

Re: Damage increase cap.

Posted: January 24th, 2020, 1:32 pm
by LouisCOV
Thanks Calvin but what I want to know is: the max possible with items is 100%? If I exceed 100% it doens't make difference?

Re: Damage increase cap.

Posted: January 25th, 2020, 1:42 am
by Arden
LouisCOV wrote: January 24th, 2020, 1:32 pm Thanks Calvin but what I want to know is: the max possible with items is 100%? If I exceed 100% it doens't make difference?
100% is cap from items

Re: Damage increase cap.

Posted: January 26th, 2020, 10:56 am
by Valkyrie
Divine fury also is count as item damage incrase So can go 90di +divine fury for 100,but cant go 100+divine

Re: Damage increase cap.

Posted: January 27th, 2020, 5:04 am
by Calvin
see line 2255 and 2256

Re: Damage increase cap.

Posted: January 27th, 2020, 5:11 am
by Calvin
anything which is not changing the variable "damageBonus", is outside of the 100% cap.

there's also "percentageBonus" which is like your slayer and stuff.
and "damage"

"damage" is coming from your str, tactics, anatomy, and lumber...

it says tactics gives -50% at zero, base wep damage at 50, and +50% at GM...
lumber and anatomy give 1% per 5 points, and a 10% bonus for GM
str gives 1% bonus for every 5 str.

but these are the annotations, so it's what it should be doing... i assume it's tested and does actually do that.

if you look at the code tho, it all works in a bit of a weird way. see they didn't replace the old code, just sort of fitted an adaptor to make it all into AOS.. but because of that it's kinda messy and there's a lot of redundant code

oh ffs it's not letting me post the code again and i just lost the reply...


im gonna use a naming convention for variables to explain this, so when it's m_ that means it's a variable, ie. a number that changes.

m_damage is derived from your tactics and the weapon you are using.
m_damage is then changed by m_modifiers.
m_modifiers is set by your str, anat, and lumber.
m_damage then gets passed to the next part where it's effected by m_damageBonus.
m_damageBonus is the number you can see in your profile and is capped at 100%. <this is the only number that is physically capped
m_damage has now been changed by m_modifiers, and m_damageBonus.
it is then passed to m_percentageBonus which is like honour, slayer, talisman.


i have no idea what VirtualDamageBonus is, or why it's looking at the quality of the weapon... assuming this is some old code

Re: Damage increase cap.

Posted: January 27th, 2020, 6:05 am
by Calvin
i might be looking at the pre-aos code for the "modifiers" and "damage" variables... im not sure tbh, there's also this:

Code: Select all

			#region Physical bonuses
			/*
			 * These are the bonuses given by the physical characteristics of the mobile.
			 * No caps apply.
			 */
			double strengthBonus = GetBonus( attacker.Str,										0.300, 100.0,  5.00 );
			double  anatomyBonus = GetBonus( attacker.Skills[SkillName.Anatomy].Value,			0.500, 100.0,  5.00 );
			double  tacticsBonus = GetBonus( attacker.Skills[SkillName.Tactics].Value,			0.625, 100.0,  6.25 );
			double   lumberBonus = GetBonus( attacker.Skills[SkillName.Lumberjacking].Value,	0.200, 100.0, 10.00 );

			if ( Type != WeaponType.Axe )
				lumberBonus = 0.0;
			#endregion
which is possibly more recent code and does it in a totally different way...

the damageBonus, and percentageBonus ones are really simple tho.
if all you're asking is what is the cap on damageBonus, then yeah it's 100. hence the line which says if it's over 100, set it to 100

Re: Damage increase cap.

Posted: January 27th, 2020, 6:17 am
by Calvin

Code: Select all

		public virtual double GetBonus ( double value, double scalar, double threshold, double offset )
			double bonus = value * scalar;
			i----f  ( value >= threshold )
				bonus += offset;
			return bonus / 100;
wow it's the if statement that is crashing the page on post... mental

your guess as good as mine on that one tho... i think the scaler is like the conversion from pre-aos, but not sure at all

basically the last 2 multipliers are easy, but what goes on before that with your stats/skills, to get the number to be modified, is a bit of a mystery.. not rly my language this tbh, i just looked it up and double just means you're declaring a more precise variable than a float, so with more decimal places.. you'd think 7 would be enough... but i suppose if you're mathing it then it should be accurate for the calculations

Code: Select all

			if ( Core.AOS ) return damage;

			/* Apply damage level offset
			 * : Regular : 0
			 * : Ruin    : 1
			 * : Might   : 3
			 * : Force   : 5
			 * : Power   : 7
			 * : Vanq    : 9
			 */
			if ( m_DamageLevel != WeaponDamageLevel.Regular )
				damage += (2 * (int)m_DamageLevel) - 1;

			return damage;
or maybe this is the old code....

Re: Damage increase cap.

Posted: January 27th, 2020, 6:30 am
by Arden
Dont post these messages if you cant read the code.....