Scripting help, property variable related

Post » Sat Dec 07, 2013 7:13 am

Well, I've been working on a script to assign certain actors to a ref alias and an actor reference, the alias being for message button purposes, there is not much more to be said. I have endeavored to clean up the code a little, so here it is for reference:

The Quest Script which holds variables:

Spoiler

   Scriptname aaaBAGQuestScript extends Quest  ConditionalBool Property EscortEnabled = TRUE Auto  ConditionalBool Property GatherEnabled = TRUE Auto  ConditionalBool Property PickPocketEnabled = False Auto  ConditionalBool Property AssaultEnabled = TRUE Auto  ConditionalBool Property AssassinateEnabled = False Auto  ConditionalBool Property MissionInProgress = False Auto  ConditionalInt Property MemberOneMissionCount = 0 Auto HiddenInt Property MemberTwoMissionCount = 0 Auto HiddenInt Property MemberThreeMissionCount = 0 Auto HiddenInt Property MemberFourMissionCount = 0 Auto HiddenInt Property MemberFiveMissionCount = 0 Auto HiddenInt Property MemberSixMissionCount = 0 Auto HiddenInt Property MemberSevenMissionCount = 0 Auto HiddenBool Property memberOnefilled auto ConditionalBool Property memberTwofilled auto ConditionalBool Property memberThreefilled auto  ConditionalBool Property memberFourfilled auto  ConditionalBool Property memberFivefilled auto  ConditionalBool Property memberSixfilled auto  ConditionalBool Property memberSevenfilled auto  ConditionalReferenceAlias Property MemberOneRefAlias  Auto  ConditionalActor Property MemberOneActor  Auto  ReferenceAlias Property MemberTwoRefAlias  Auto  ConditionalActor Property MemberTwoActor  Auto  ReferenceAlias Property MemberThreeRefAlias  Auto  ConditionalActor Property MemberThreeActor  Auto  ReferenceAlias Property MemberFourRefAlias  Auto  ConditionalActor Property MemberFourActor  Auto  ReferenceAlias Property MemberFiveRefAlias  Auto  ConditionalActor Property MemberFiveActor  Auto  ReferenceAlias Property MemberSixRefAlias  Auto  ConditionalActor Property MemberSixActor  Auto  ReferenceAlias Property MemberSevenRefAlias  Auto  ConditionalActor Property MemberSevenActor  Auto  

The script itself:

Spoiler

  Scriptname aaaBagActorScript extends ActorReferenceAlias Property MemberOneRefAlias  Auto  ConditionalReferenceAlias Property MemberTwoRefAlias  Auto  ConditionalReferenceAlias Property MemberThreeRefAlias  Auto  ConditionalReferenceAlias Property MemberFourRefAlias  Auto  ConditionalReferenceAlias Property MemberFiveRefAlias  Auto  ConditionalReferenceAlias Property MemberSixRefAlias  Auto  ConditionalReferenceAlias Property MemberSevenRefAlias  Auto  ConditionalObjectReference Property BodyDumpContainer Auto   Event OnInit()         int initComplete = 0  if (aaaBAGQuestScript.MemberOneFilled == False && initComplete != 1)         aaaBAGQuestScript.MemberOneFilled = True              aaaBAGQuestScript.MemberOneActor = Self       MemberOneRefAlias.ForceRefTo(self)      initComplete = 1 elseIf (aaaBAGQuestScript.MemberTwoFilled == False && initComplete != 1)        aaaBAGQuestScript.MemberTwoFilled = True      aaaBAGQuestScript.MemberTwoActor = Self      MemberTwoRefAlias.ForceRefTo(self)      initComplete = 1 elseIf (aaaBAGQuestScript.MemberThreeFilled == False && initComplete != 1)       aaaBAGQuestScript.MemberThreeFilled = True       aaaBAGQuestScript.MemberThreeActor = Self      MemberThreeRefAlias.ForceRefTo(self)      initComplete = 1 elseIf (aaaBAGQuestScript.MemberFourFilled == False && initComplete != 1)       aaaBAGQuestScript.MemberFourFilled = True     aaaBAGQuestScript.MemberFourActor = Self      MemberFourRefAlias.ForceRefTo(self)     initComplete = 1 elseIf (aaaBAGQuestScript.MemberFiveFilled == False && initComplete != 1)      aaaBAGQuestScript.MemberFiveFilled = True     aaaBAGQuestScript.MemberFiveActor = Self      MemberFiveRefAlias.ForceRefTo(self)      initComplete = 1 elseIf (aaaBAGQuestScript.MemberSixFilled == False && initComplete != 1)       aaaBAGQuestScript.MemberSixFilled = True      aaaBAGQuestScript.MemberSixActor = Self     MemberSixRefAlias.ForceRefTo(self)     initComplete = 1 elseIf (aaaBAGQuestScript.MemberSevenFilled == False && initComplete != 1)       aaaBAGQuestScript.MemberSevenFilled = True      aaaBAGQuestScript.MemberSevenActor = Self      MemberSevenRefAlias.ForceRefTo(self)       initComplete = 1 endIf endEvent Event OnDeath(Actor akKiller) if (aaaBAGQuestScript.MemberSevenActor == Self)     aaaBAGQuestScript.MemberSevenActor = Null     aaaBAGQuestScript.MemberSevenMissionCount = 0y     aaaBAGQuestScript.MemberSevenRefAlias.Clear() elseif (aaaBAGQuestScript.MemberSixActor == Self)    aaaBAGQuestScript.MemberSixActor = Null    aaaBAGQuestScript.MemberSixMissionCount = 0    aaaBAGQuestScript.MemberSixRefAlias.Clear() elseif (aaaBAGQuestScript.MemberFiveActor == Self)    aaaBAGQuestScript.MemberFiveActor = Null    aaaBAGQuestScript.MemberFiveMissionCount = 0    aaaBAGQuestScript.MemberFiveRefAlias.Clear() elseif (aaaBAGQuestScript.MemberFourActor == Self)    aaaBAGQuestScript.MemberFourActor = Null    aaaBAGQuestScript.MemberFourMissionCount = 0    aaaBAGQuestScript.MemberFourRefAlias.Clear() elseif (aaaBAGQuestScript.MemberThreeActor == Self)    aaaBAGQuestScript.MemberThreeActor = Null    aaaBAGQuestScript.MemberThreeMissionCount = 0    aaaBAGQuestScript.MemberThreeRefAlias.Clear() elseif (aaaBAGQuestScript.MemberTwoActor == Self)    aaaBAGQuestScript.MemberTwoActor = Null     aaaBAGQuestScript.MemberTwoMissionCount = 0    aaaBAGQuestScript.MemberTwoRefAlias.Clear() elseif (aaaBAGQuestScript.MemberOneActor == Self)    aaaBAGQuestScript.MemberOneActor = Null    aaaBAGQuestScript.MemberOneMissionCount = 0    aaaBAGQuestScript.MemberOneRefAlias.Clear() endIf  self.RemoveAllItems(BodyDumpContainer,True, false) self.Delete() endEvent  

I keep getting the error that properties must be assigned to a variable, not a state. However, how would I work around that?

User avatar
rebecca moody
 
Posts: 3430
Joined: Mon Mar 05, 2007 3:01 pm

Post » Sat Dec 07, 2013 8:51 am

You need a "aaaBAGQuestScript" property in your actor script pointing to the quest.

Also instead of = Null, it should be = None.

Also any reason why you need a bool, reference alias, and actor property? If you don't mind me suggestions, I would use arrays... and clean it up to look something like this...

Scriptname _test_testscript extends QuestReferenceAlias[] Property kMemberAlias AutoObjectReference Property BodyDumpContainer Autobool bLockReferenceAlias Function FillAlias(Actor akNewActor)    while bLock ;you might want a lock to make sure only one actor can get filled at a time if actors can spawn at the same time        Utility.Wait(0.1)    endWhile    int iElement = kMemberAlias.Length    while iElement        iElement -= 1        if !kMemberAlias[iElement].GetReference() ;Alias is empty!            kMemberAlias[iElement].ForceRefTo(akNewActor)            return kMemberAlias[iElement];we are done - kill the function        endIf    endWhileendFunctionFunction DeathCleanUp(ReferenceAlias akDeadAlias)    ObjectReference kCorpse = akDeadAlias.GetReference()    akDeadAlias.Clear()    kCorpse.RemoveAllItems(BodyDumpContainer, true, false)    kCorpse.Disable()    kCorpse.Delete()endFunction   

Scriptname _test_testactor extends Actor_test_testscript Property QuestName AutoReferenceAlias kMyAliasEvent OnInit()    kMyAlias = QuestName.FillAlias(self) ;save the reference alias so we don't have to search for which one this actor is fillingendEventEvent OnDying(Actor akKiller)    QuestName.DeathCleanUp(kMyAlias)endEvent   
User avatar
casey macmillan
 
Posts: 3474
Joined: Fri Feb 09, 2007 7:37 pm

Post » Fri Dec 06, 2013 7:24 pm

Wow, that is a lot more simple than I could have imagined, thank you.

I will surely be back in short order to once more to be a fool made by myself.

User avatar
bonita mathews
 
Posts: 3405
Joined: Sun Aug 06, 2006 5:04 am


Return to V - Skyrim