Jump to content

Heavy weapons PA requirement


amokrun1

Recommended Posts

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

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 by LarannKiar
Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...