Unconfirmed Bug Focus Attack is not OSI-accurate with Splintering Weapon

olokobisho

Newbie III
Client used - If not applicable put N/A
N/A
Player Name - If not applicable put N/A
N/A
Location In-game - If not applicable put N/A
N/A
According to the official Ultima Online description of Focus Attack:

"Increases both your damage and the percentage chance for 'hit' properties on your weapon for one attack."

Since Splintering Weapon is considered a Hit Property, it should also receive the increased activation chance from Focus Attack.

I tested this on the OSI Test Center using a character with Ninjitsu to verify whether Focus Attack increases the chance for Splintering Weapon to trigger. As expected, it does. The activation chance increases based on the character's Ninjitsu skill level.

Currently, this interaction does not appear to be working correctly, making Focus Attack's behavior inconsistent with OSI.

HERITAGE - WITHOUT FOCUS ATTACK​
HERITAGE - WITH FOCUS ATTACK​
1782481109770.png 1782481130135.png


OSI - WITHOUT FOCUS ATTACK​
OSI - WITH FOCUS ATTACK​
1782481323021.png 1782481341212.png
 
OP
olokobisho

olokobisho

Newbie III
I also checked the TrueUO source code, and I think I found why this is happening.

Focus Attack itself doesn't decide which weapon properties receive the bonus. It only returns a multiplier through GetPropertyBonus(), based on the attacker's Ninjitsu skill.

public override double GetPropertyBonus(Mobile attacker)
{
double ninjitsu = attacker.Skills[SkillName.Ninjitsu].Value;

double bonus = (ninjitsu * ninjitsu) / 43636;

return 1.0 + (bonus * 3 + 0.01);
}
In BaseWeapon.cs, this multiplier is stored in propertyBonus:

double propertyBonus = move == null ? 1.0 : move.GetPropertyBonus(attacker);

The standard Hit Properties all use this multiplier when calculating their activation chance. For example:

int lightningChance =
(int)(AosWeaponAttributes.GetValue(attacker, AosWeaponAttribute.HitLightning) * propertyBonus);

int fireballChance =
(int)(AosWeaponAttributes.GetValue(attacker, AosWeaponAttribute.HitFireball) * propertyBonus);

int harmChance =
(int)(AosWeaponAttributes.GetValue(attacker, AosWeaponAttribute.HitHarm) * propertyBonus);

int magicArrowChance =
(int)(AosWeaponAttributes.GetValue(attacker, AosWeaponAttribute.HitMagicArrow) * propertyBonus);

However, Splintering Weapon is handled separately. Its activation chance is checked directly against its base value:

if (m_AosWeaponAttributes.SplinteringWeapon > 0 &&
m_AosWeaponAttributes.SplinteringWeapon > Utility.Random(100))
{
if (SplinteringWeaponContext.CheckHit(attacker, defender, a, this))
splintering = true;
}

Unlike the other Hit Properties, this check never uses propertyBonus.


 

PLAY NOW

Heritage

Address
play.trueuo.com
Port
2593
Uptime
7 hours
Players Online
9
Houses
877
Vendors
276
Gold
5,515,882,098gp
Top Bottom