--[[ ***** see Iris2 COPYING for license info ***** ]]-- --[[ \brief handles Combat- & Weaponskills see also: net.aoscommand.lua see: http://uo.stratics.com/content/arms-armor/specialmoves.php http://uo.stratics.com/content/arms-armor/special_moves_chart.shtml ]]-- gWeaponAbilityIcons = {} gActiveWeaponAbility = 0 gLastSelectedWeaponAbility = 0 gLastWeaponAbilityClearT = 0 -- should only be called by ToggleWeaponAbility function Send_AOSCommand_WeaponAbility (weaponabilityid) local mobile_serial = GetPlayerSerial() if (not mobile_serial) then return end --~ print("##### WeaponAbility send",floor(Client_GetTicks()/1000),weaponabilityid) Send_AOSCommand(kPacket_AOS_Command_WeaponAbilityRequest, mobile_serial, weaponabilityid) gActiveWeaponAbility = weaponabilityid gLastSelectedWeaponAbility = weaponabilityid UpdateWeaponAbilityIcons() end -- changes or deactivates weapon ability function ToggleWeaponAbility (weaponabilityid) if (gActiveWeaponAbility == weaponabilityid) then weaponabilityid = 0 end Send_AOSCommand_WeaponAbility(weaponabilityid) end -- send from server via kPacket_Generic_SubCommand_Ability_Icon function EndWeaponAbility () --~ print("##### WeaponAbility end",floor(Client_GetTicks()/1000)) gActiveWeaponAbility = 0 gLastWeaponAbilityClearT = Client_GetTicks() UpdateWeaponAbilityIcons() end RegisterStepper(function () -- warning : manacost is much higher if used more often than every 3s if (not gReActivateWeaponAbilityInterval) then return end if (gActiveWeaponAbility ~= 0) then return end if (gLastSelectedWeaponAbility == 0) then return end local t = Client_GetTicks() if (t - gLastWeaponAbilityClearT > gReActivateWeaponAbilityInterval) then gLastWeaponAbilityClearT = t Send_AOSCommand_WeaponAbility(gLastSelectedWeaponAbility) end end) function GetWeaponSpecialsForMobile (mobile) if (not mobile) then return end local item1 = GetMobileEquipmentItem(mobile,gLayerType.kLayer_OneHanded) local item2 = GetMobileEquipmentItem(mobile,gLayerType.kLayer_TwoHanded) -- might be shield,lantern... local artid = (item1 and item1.artid) or (item2 and item2.artid) or 0 -- 0 if barehanded local skills = glWeaponAbilitiesWeapons[artid] or glWeaponAbilitiesWeapons[0] -- could have a nonweapon in second hand : fall back to barehanded if skills then return skills.first,skills.second end end -- icon hueing function UpdateWeaponAbilityIcons () for weaponabilityid,widget in pairs(gWeaponAbilityIcons) do if (widget:IsAlive()) then widget.gfx_main:ChangeParams({hue=(weaponabilityid == gActiveWeaponAbility) and gQuickCastClickedHue or gQuickCastNormalHue}) end end end --[[ objectId,primaryAbility,secondaryAbility,primaryId,secondaryId 0,DISARM,PARALYZING_BLOW,5,11 3568,WHIRLWIND_STRIKE,PARALYZING_BLOW ,13,11 3569,WHIRLWIND_STRIKE,PARALYZING_BLOW ,13,11 3570,DISMOUNT,DISARM ,6,5 3571,DISMOUNT,DISARM ,6,5 3572,DISMOUNT,DISARM ,6,5 3573,DISMOUNT,DISARM ,6,5 3713,CRUSHING_BLOW,DISARM ,4,5 3714,CRUSHING_BLOW,DISARM ,4,5 3717,DOUBLESTRIKE,DISARM ,7,5 3718,DOUBLESTRIKE,DISARM ,7,5 3719,BLEED_ATTACK,DISMOUNT ,2,6 3720,BLEED_ATTACK,DISMOUNT ,2,6 3721,DOUBLESTRIKE,CONCUSSION_BLOW ,7,3 3722,DOUBLESTRIKE,CONCUSSION_BLOW ,7,3 3778,BLEED_ATTACK,INFECTING ,2,8 3779,BLEED_ATTACK,INFECTING ,2,8 3780,SHADOWSTRIKE,DISARM ,12,5 3781,SHADOWSTRIKE,DISARM ,12,5 3907,ARMOR_IGNORE,DISARM ,1,5 3908,ARMOR_IGNORE,DISARM ,1,5 3909,BLEED_ATTACK,MORTALSTRIKE ,2,9 3910,BLEED_ATTACK,MORTALSTRIKE ,2,9 3911,BLEED_ATTACK,CONCUSSION_BLOW ,2,3 3912,BLEED_ATTACK,CONCUSSION_BLOW ,2,3 3913,CRUSHING_BLOW,DISMOUNT ,4,6 3914,CRUSHING_BLOW,DISMOUNT ,4,6 3915,DOUBLESTRIKE,WHIRLWIND_STRIKE ,7,13 3916,DOUBLESTRIKE,WHIRLWIND_STRIKE ,7,13 3917,PARALYZING_BLOW,DISMOUNT ,11,6 3918,PARALYZING_BLOW,DISMOUNT ,11,6 3919,CONCUSSION_BLOW,MORTALSTRIKE ,3,9 3920,CONCUSSION_BLOW,MORTALSTRIKE ,3,9 3921,INFECTING,SHADOWSTRIKE ,8,12 3922,INFECTING,SHADOWSTRIKE ,8,12 3932,CONCUSSION_BLOW,DISARM ,3,5 3933,CONCUSSION_BLOW,DISARM ,3,5 3934,CRUSHING_BLOW,ARMOR_IGNORE ,4,1 3935,CRUSHING_BLOW,ARMOR_IGNORE ,4,1 3936,ARMOR_IGNORE,CONCUSSION_BLOW ,1,3 3937,ARMOR_IGNORE,CONCUSSION_BLOW ,1,3 3938,ARMOR_IGNORE,PARALYZING_BLOW ,1,11 3939,ARMOR_IGNORE,PARALYZING_BLOW ,1,11 4020,CRUSHING_BLOW,SHADOWSTRIKE ,4,12 4021,CRUSHING_BLOW,SHADOWSTRIKE ,4,12 5039,ARMOR_IGNORE,BLEED_ATTACK ,1,2 5040,ARMOR_IGNORE,BLEED_ATTACK ,1,2 5041,PARALYZING_BLOW,MORTALSTRIKE ,11,9 5042,PARALYZING_BLOW,MORTALSTRIKE ,11,9 5043,SHADOWSTRIKE,DISMOUNT ,12,6 5044,SHADOWSTRIKE,DISMOUNT ,12,6 5045,DOUBLESTRIKE,PARALYZING_BLOW ,7,11 5046,DOUBLESTRIKE,PARALYZING_BLOW ,7,11 5047,ARMOR_IGNORE,CONCUSSION_BLOW ,1,3 5048,ARMOR_IGNORE,CONCUSSION_BLOW ,1,3 5049,CRUSHING_BLOW,PARALYZING_BLOW ,4,11 5050,CRUSHING_BLOW,PARALYZING_BLOW ,4,11 5091,CRUSHING_BLOW,SHADOWSTRIKE ,4,12 5092,CRUSHING_BLOW,SHADOWSTRIKE ,4,12 5108,CRUSHING_BLOW,DISARM ,4,5 5109,CRUSHING_BLOW,DISARM ,4,5 5110,INFECTING,DISARM ,8,5 5111,INFECTING,DISARM ,8,5 5112,CONCUSSION_BLOW,PARALYZING_BLOW ,3,11 5113,CONCUSSION_BLOW,PARALYZING_BLOW ,3,11 5114,WHIRLWIND_STRIKE,BLEED_ATTACK ,13,2 5115,WHIRLWIND_STRIKE,BLEED_ATTACK ,13,2 5116,MOVING_SHOT,DISMOUNT ,10,6 5117,MOVING_SHOT,DISMOUNT ,10,6 5118,DOUBLESTRIKE,ARMOR_IGNORE ,7,1 5119,DOUBLESTRIKE,ARMOR_IGNORE ,7,1 5120,ARMOR_IGNORE,INFECTING ,1,8 5121,ARMOR_IGNORE,INFECTING ,1,8 5122,SHADOWSTRIKE,MORTALSTRIKE ,12,9 5123,SHADOWSTRIKE,MORTALSTRIKE ,12,9 5124,BLEED_ATTACK,DISARM ,2,5 5125,BLEED_ATTACK,DISARM ,2,5 5126,CRUSHING_BLOW,BLEED_ATTACK ,4,2 5127,CRUSHING_BLOW,BLEED_ATTACK ,4,2 5176,WHIRLWIND_STRIKE,CRUSHING_BLOW ,13,4 5177,WHIRLWIND_STRIKE,CRUSHING_BLOW ,13,4 5178,CRUSHING_BLOW,CONCUSSION_BLOW ,4,3 5179,CRUSHING_BLOW,CONCUSSION_BLOW ,4,3 5180,ARMOR_IGNORE,MORTALSTRIKE ,1,9 5181,ARMOR_IGNORE,MORTALSTRIKE ,1,9 5182,WHIRLWIND_STRIKE,CONCUSSION_BLOW ,13,3 5183,WHIRLWIND_STRIKE,CONCUSSION_BLOW ,13,3 5184,BLEED_ATTACK,SHADOWSTRIKE ,2,12 5185,BLEED_ATTACK,SHADOWSTRIKE ,2,12 5186,DOUBLESTRIKE,SHADOWSTRIKE ,7,12 5187,DOUBLESTRIKE,SHADOWSTRIKE ,7,12 9914,BLEED_ATTACK,PARALYZING_BLOW ,2,11 9915,PARALYZING_BLOW,MORTALSTRIKE ,11,9 9916,CRUSHING_BLOW,MORTALSTRIKE ,4,9 9917,ARMOR_IGNORE,DISMOUNT ,1,6 9918,PARALYZING_BLOW,INFECTING ,11,8 9919,DOUBLESTRIKE,INFECTING ,7,8 9920,DISMOUNT,CONCUSSION_BLOW ,6,3 9921,DOUBLESTRIKE,MORTALSTRIKE ,7,9 9922,ARMOR_IGNORE,MOVING_SHOT ,1,10 9923,DOUBLESTRIKE,MOVING_SHOT ,7,10 9924,BLEED_ATTACK,PARALYZING_BLOW ,2,11 9925,PARALYZING_BLOW,MORTALSTRIKE ,11,9 9926,CRUSHING_BLOW,MORTALSTRIKE ,4,9 9927,ARMOR_IGNORE,DISMOUNT ,1,6 9928,PARALYZING_BLOW,INFECTING ,11,8 9929,DOUBLESTRIKE,INFECTING ,7,8 9930,DISMOUNT,CONCUSSION_BLOW ,6,3 9931,DOUBLESTRIKE,MORTALSTRIKE ,7,9 9932,ARMOR_IGNORE,MOVING_SHOT ,1,10 9933,DOUBLESTRIKE,MOVING_SHOT ,7,10 10146,CRUSHING_BLOW,RIDINGSWIPE ,4,14 10147,FEINT,BLOCK ,20,16 10148,FRENZIEDWHIRLWIND,DOUBLESTRIKE ,15,7 10149,ARMORPIERCE,DOUBLESHOT ,23,22 10150,FRENZIEDWHIRLWIND,CRUSHING_BLOW ,15,4 10151,DEFENSEMASTERY,FRENZIEDWHIRLWIND ,17,15 10152,FEINT,NERVESTRIKE ,20,18 10153,FEINT,DOUBLESTRIKE ,20,7 10155,DUALWIELD,TALONSTRIKE ,21,19 10157,WHIRLWIND_STRIKE,DEFENSEMASTERY ,13,17 10158,BLOCK,FEINT ,16,20 10159,BLOCK,ARMORPIERCE ,16,23 10221,CRUSHING_BLOW,RIDINGSWIPE ,4,14 10222,FEINT,BLOCK ,20,16 10223,FRENZIEDWHIRLWIND,DOUBLESTRIKE ,15,7 10224,ARMORPIERCE,DOUBLESHOT ,23,22 10225,FRENZIEDWHIRLWIND,CRUSHING_BLOW ,15,4 10226,DEFENSEMASTERY,FRENZIEDWHIRLWIND ,17,15 10227,FEINT,NERVESTRIKE ,20,18 10228,FEINT,DOUBLESTRIKE ,20,7 10230,DUALWIELD,TALONSTRIKE ,21,19 10232,WHIRLWIND_STRIKE,DEFENSEMASTERY ,13,17 10233,BLOCK,FEINT ,16,20 10234,BLOCK,ARMORPIERCE ,16,23 11550,FORCE_ARROW,SERPENT_ARROW ,25,28 11551,LIGHTNING_ARROW,PSYCHIC_ATTACK ,26,27 11552,PSYCHIC_ATTACK,BLEED_ATTACK ,27,2 11553,INFECTING,SHADOWSTRIKE ,8,12 11554,FEINT,ARMOR_IGNORE ,20,1 11555,DISARM,BLADEWEAVE ,5,24 11556,CONCUSSION_BLOW,CRUSHING_BLOW ,3,4 11557,BLOCK,FORCE_OF_NATURE ,16,29 11558,DISARM,BLADEWEAVE ,5,24 11559,WHIRLWIND_STRIKE,BLADEWEAVE ,13,24 11560,DISARM,CRUSHING_BLOW ,5,4 11561,DEFENSEMASTERY,BLADEWEAVE ,17,24 11562,FORCE_ARROW,SERPENT_ARROW ,25,28 11563,LIGHTNING_ARROW,PSYCHIC_ATTACK ,26,27 11564,PSYCHIC_ATTACK,BLEED_ATTACK ,27,2 11565,INFECTING,SHADOWSTRIKE ,8,12 11566,FEINT,ARMOR_IGNORE ,20,1 11567,DISARM,BLADEWEAVE ,5,24 11568,CONCUSSION_BLOW,CRUSHING_BLOW ,3,4 11569,BLOCK,FORCE_OF_NATURE ,16,29 11570,DISARM,BLADEWEAVE ,5,24 11571,WHIRLWIND_STRIKE,BLADEWEAVE ,13,24 11572,DISARM,CRUSHING_BLOW ,5,4 11573,DEFENSEMASTERY,BLADEWEAVE,17,24 ]]--