amokrun1 Posted December 4, 2021 Share Posted December 4, 2021 I suspect I need a script for this as I cannot seem to see how to do it via perks but I could be wrong. If so, then I need help because I am an absolute novice scripter. I want to make it so that in order to wield heavy weapons you need to be in Power Armor. I know this breaks many playstyles and it wouldn't apply to NPCs but I would just like to know how to do it. Can this be done without scripting? Link to comment Share on other sites More sharing options...
LarannKiar Posted December 9, 2021 Share Posted December 9, 2021 (edited) Create a Quest (Name: HWUnequip). Open the "Scripts" tab, click "Add" >> "NewScript" >> Name: "HWUnequipScript". Paste this code: Scriptname HWMUnequipScript extends Quest Keyword Property FurnitureTypePowerArmor Auto Const Keyword Property FurnitureCantWait Auto Const Keyword Property FurnitureScaleActorToOne Auto Const Keyword Property IgnoreWorkbenchData Auto Const Keyword Property WeaponTypeHeavyGun Auto Const Perk Property PowerArmorPerk Auto Const Keyword Property ObjectTypeWeapon Auto Const Bool bAreHeavyWeaponsEquippable Event OnQuestInit() If Game.GetPlayer().HasPerk(PowerArmorPerk) == 1 bAreHeavyWeaponsEquippable = True Else bAreHeavyWeaponsEquippable = False EndIf RegisterScript() TryToUnequip() EndEvent Event Actor.OnSit(Actor akSender, ObjectReference akFurniture) If akFurniture.HasKeyword(FurnitureTypePowerArmor) && akFurniture.HasKeyword(FurnitureCantWait) && akFurniture.HasKeyword(FurnitureScaleActorToOne) && akFurniture.HasKeyword(IgnoreWorkbenchData) If akSender == Game.GetPlayer() bAreHeavyWeaponsEquippable = True EndIf EndIf EndEvent Event Actor.OnGetUp(Actor akSender, ObjectReference akFurniture) If akFurniture.HasKeyword(FurnitureTypePowerArmor) && akFurniture.HasKeyword(FurnitureCantWait) && akFurniture.HasKeyword(FurnitureScaleActorToOne) && akFurniture.HasKeyword(IgnoreWorkbenchData) If akSender == Game.GetPlayer() bAreHeavyWeaponsEquippable = False TryToUnequip() EndIf EndIf EndEvent Event Actor.OnItemEquipped(Actor akSender, Form akBaseObject, ObjectReference akReference) If bAreHeavyWeaponsEquippable == False && akBaseObject.HasKeyword(WeaponTypeHeavyGun) == 1 Game.GetPlayer().UnequipItem(akBaseObject, abSilent = True) EndIf TryToUnequip() EndEvent Function TryToUnequip() Actor PlayerRef = Game.GetPlayer() Form[] HeavyWeapons HeavyWeapons = PlayerRef.GetInventoryItems() Int Index = 0 While HeavyWeapons.Length > Index If HeavyWeapons[Index].HasKeyword(ObjectTypeWeapon) == 0 HeavyWeapons.Remove(HeavyWeapons.Find(HeavyWeapons[Index])) EndIf Index=Index+1 EndWhile Index = 0 While HeavyWeapons.Length > Index If bAreHeavyWeaponsEquippable == False && HeavyWeapons[Index].HasKeyword(WeaponTypeHeavyGun) == 1 && PlayerRef.IsEquipped(HeavyWeapons[Index] as Weapon) == 1 PlayerRef.UnequipItem(HeavyWeapons[Index] as Weapon, abSilent = True) EndIf Index=Index+1 EndWhile EndFunction Function RegisterScript() Actor PlayerRef = Game.GetPlayer() RegisterForRemoteEvent(PlayerRef, "OnSit") RegisterForRemoteEvent(PlayerRef, "OnGetUp") RegisterForRemoteEvent(PlayerRef, "OnItemEquipped") EndFunction Function UnregisterScript() Actor PlayerRef = Game.GetPlayer() UnregisterForRemoteEvent(PlayerRef, "OnSit") UnregisterForRemoteEvent(PlayerRef, "OnGetUp") UnregisterForRemoteEvent(PlayerRef, "OnItemEquipped") EndFunction Compile it, then fill the Script Properties: click Properties >> Auto-Fill All >> OK (script properties window) >> OK (quest window). If you'd like unregister ("disable") the script, open the console and type "CQF HWUnequip UnregisterScript". To "enable" it, type "CQF HWUnequip RegisterScript". EDIT: added a functionality to turn on / off the script and put the code in a spoiler tag.. oh and forgot to mention that it requires F4SE. Edited December 9, 2021 by LarannKiar Link to comment Share on other sites More sharing options...
Recommended Posts