mirror of
https://github.com/UOX3DevTeam/UOX3
synced 2026-08-13 12:27:04 -04:00
61 lines
1.8 KiB
JavaScript
61 lines
1.8 KiB
JavaScript
/// <reference path="../definitions.d.ts" />
|
|
// @ts-check
|
|
/** @type { ( equipper: Character, equipping: Item ) => boolean } */
|
|
function onEquip( pEquipper, iEquipped )
|
|
{
|
|
pEquipper.AddScriptTrigger( 7003 );
|
|
}
|
|
|
|
// Remove script trigger on unequip
|
|
/** @type { ( equipper: Character, equipping: Item ) => boolean } */
|
|
function onUnequip( pUnequipper, iUnequipped )
|
|
{
|
|
pUnequipper.RemoveScriptTrigger( 7003 );
|
|
}
|
|
|
|
/** @type { ( attacker: Character, damaged: Character, damageValue: number, damageType: WeatherType ) => boolean } */
|
|
function onDamageDeal( attacker, damaged, damageValue, damageType )
|
|
{
|
|
// Fetch weapon in main hand or secondary hand
|
|
var iWeapon = attacker.FindItemLayer( 0x01 );
|
|
if( !ValidateObject( iWeapon ))
|
|
{
|
|
iWeapon = attacker.FindItemLayer( 0x02 );
|
|
}
|
|
|
|
if( ValidateObject( iWeapon ))
|
|
{ // Apply leech effects based on weapon properties
|
|
ApplyLeech( attacker, damaged, damageValue, iWeapon, 'healthLeech', 30 );
|
|
ApplyLeech( attacker, damaged, damageValue, iWeapon, 'staminaLeech', 100 );
|
|
ApplyLeech( attacker, damaged, damageValue, iWeapon, 'manaLeech', 40 );
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
function ApplyLeech( attacker, damaged, damageValue, weapon, leechType, multiplier )
|
|
{
|
|
// Get the leech amount for the specified leech type from the weapon
|
|
var leechPercentVal = weapon[ leechType ];
|
|
if( leechPercentVal > 0 )
|
|
{
|
|
// Calculate the percent of health restored to the attacker
|
|
var leechAmt = Math.round( damageValue * ( leechPercentVal / 100 ) * ( multiplier/100 ));
|
|
|
|
// Apply the leech effect based on the leech type
|
|
switch( leechType )
|
|
{
|
|
case 'healthLeech':
|
|
attacker.Heal( leechAmt );
|
|
break;
|
|
case 'staminaLeech':
|
|
attacker.stamina += leechAmt;
|
|
break;
|
|
case 'manaLeech':
|
|
attacker.mana += leechAmt;
|
|
break;
|
|
}
|
|
|
|
attacker.SoundEffect( 0x44D, true );
|
|
}
|
|
}
|