Script trouble -- naked Companions

Post » Wed Jun 20, 2012 5:31 pm

Made a script to allow the player to take a follower's default outfit if they were following and set it back if they weren't; applied it by alias. Works fine, but all the Companions followers (except Vilkas, for some reason) are running around in their underpants. This does not happen to any other follower. The OnCombatStateChanged event needs to be conditioned, I realize, but I stress that this did not happen to any other follower. And reseting their inventory showed that their sleep outfit was changed, which should only happen when they are following the player.

All of the script properties use the editor ID; NullOutfit is what it sounds like, an outfit that contains nothing. DefaultOutfit is the follower's normal outfit.

This is the script; hopefully it can be read alright -- if not, I'll pretty it up a bit:

Scriptname PSDefaultFollowerAliasScript extends ReferenceAlias

Package Property PlayerFollowerPackage Auto

Package Property PlayerFollowerCombatOverridePackage Auto

Package Property PlayerFollowerCombatOverridePackageExterior Auto

Outfit Property DefaultOutfit Auto

Outfit Property DefaultSleepOutfit Auto

Outfit Property NullOutfit Auto

Outfit Property ArmorBladesOutfit Auto

Faction Property BladesFaction Auto

Event OnCombatStateChanged(Actor akTarget, int aeCombatState)
if (akTarget == Game.GetPlayer())
Actor selfRef = Self.GetActorRef()
(selfRef as Actor).SetOutfit(DefaultSleepOutfit, true)
if (!(selfRef as Actor).IsInFaction(BladesFaction))
(selfRef as Actor).SetOutfit(DefaultOutfit)
else
(selfRef as Actor).SetOutfit(ArmorBladesOutfit)
endif
endIf
EndEvent

Event OnPackageStart (Package akNewPackage)
if (akNewPackage == PlayerFollowerPackage)
Actor selfRef = Self.GetActorRef()
(selfRef as Actor).SetOutfit(NullOutfit)
if (!(selfRef as Actor).IsInFaction(BladesFaction))
(selfRef as Actor).SetOutfit(DefaultOutfit, true)
else
(selfRef as Actor).SetOutfit(ArmorBladesOutfit, true)
endif
endif
endEvent

Event OnPackageChange (Package akOldPackage)
Actor selfRef = Self.GetActorRef()
if (akOldPackage == PlayerFollowerPackage) && ((selfRef as Actor).GetCurrentPackage() != PlayerFollowerCombatOverridePackage) && ((selfRef as Actor).GetCurrentPackage() != PlayerFollowerCombatOverridePackageExterior)
(selfRef as Actor).SetOutfit(DefaultSleepOutfit, true)
if (!(selfRef as Actor).IsInFaction(BladesFaction))
(selfRef as Actor).SetOutfit(DefaultOutfit)
else
(selfRef as Actor).SetOutfit(ArmorBladesOutfit)
endif
endif
endEvent
User avatar
Add Me
 
Posts: 3486
Joined: Thu Jul 05, 2007 8:21 am

Post » Wed Jun 20, 2012 11:10 am

Use the code wrapper to make it easier for people to read your code.

Scriptname PSDefaultFollowerAliasScript extends ReferenceAliasPackage Property PlayerFollowerPackage AutoPackage Property PlayerFollowerCombatOverridePackage AutoPackage Property PlayerFollowerCombatOverridePackageExterior AutoOutfit Property DefaultOutfit AutoOutfit Property DefaultSleepOutfit AutoOutfit Property NullOutfit AutoOutfit Property ArmorBladesOutfit AutoFaction Property BladesFaction AutoEvent OnCombatStateChanged(Actor akTarget, int aeCombatState)if (akTarget == Game.GetPlayer())Actor selfRef = Self.GetActorRef()(selfRef as Actor).SetOutfit(DefaultSleepOutfit, true)if (!(selfRef as Actor).IsInFaction(BladesFaction))(selfRef as Actor).SetOutfit(DefaultOutfit)else(selfRef as Actor).SetOutfit(ArmorBladesOutfit)endifendIfEndEventEvent OnPackageStart (Package akNewPackage)if (akNewPackage == PlayerFollowerPackage)Actor selfRef = Self.GetActorRef()(selfRef as Actor).SetOutfit(NullOutfit)if (!(selfRef as Actor).IsInFaction(BladesFaction))(selfRef as Actor).SetOutfit(DefaultOutfit, true)else(selfRef as Actor).SetOutfit(ArmorBladesOutfit, true)endifendifendEventEvent OnPackageChange (Package akOldPackage)Actor selfRef = Self.GetActorRef()if (akOldPackage == PlayerFollowerPackage) && ((selfRef as Actor).GetCurrentPackage() != PlayerFollowerCombatOverridePackage) && ((selfRef as Actor).GetCurrentPackage() != PlayerFollowerCombatOverridePackageExterior)(selfRef as Actor).SetOutfit(DefaultSleepOutfit, true)if (!(selfRef as Actor).IsInFaction(BladesFaction))(selfRef as Actor).SetOutfit(DefaultOutfit)else(selfRef as Actor).SetOutfit(ArmorBladesOutfit)endifendifendEvent

Still messed up... It's too much hassel to read a script that isn't idented properly sorry.
User avatar
Luna Lovegood
 
Posts: 3325
Joined: Thu Sep 14, 2006 6:45 pm


Return to V - Skyrim