Cleared CWScript to avoid dependency on a bunch of Skyrim civil war scripts

This commit is contained in:
Eddoursul 2023-12-05 05:41:36 +01:00
parent 11cef498a8
commit 3647ad6dd0
19 changed files with 1 additions and 11454 deletions

View File

@ -20,16 +20,9 @@ craftingactivatelinker.*
crimeguardsscript.*
critterspawn01.*
curediseasescript.*
cwalliesscript.*
cwcampaignpollformissionacceptscript.*
cwcampaignscript.*
cwcatapultoffscreenfirecontrolscript.*
cwcatapultscript.*
cwcatapultstrikescript.*
cwreinforcementcontrollerscript.*
cwcatapultstrikespawnerscript.*
cwscript.*
cwsiegescript.*
cwthreatcombatbarksscript.*
darkbrotherhood.*
darksanctuarydialoguescript.*
darttrap.*

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,537 +0,0 @@
Scriptname CWAlliesScript extends Quest
;This script handles adding new allies, and getting allies for use with sieges.
;To add an ally to be available in future sieges:
;*Use function AddPotentialAlly()
;*Note: - there are optional parameters which allow this ally to show up at sieges in various holds. Make sure you set at least one of these paramters to true or you will never see the ally show up for any battles.
;To get Allies to show up to sieges:
;1) Register markers for phase1/2/3/4/5 so allies have some place to go if the player isn't nearby call RegisterAllyPhaseMarkers() -- note this is MANDATORY
;2) Call ProcessAlliesForSiege() which finds appropriate allies, disables them, and then and moves them to Phase0Marker
;3) When it's appropriate stage in the siege quest, you then need to call EnableActiveAllies() which enables them causing them to appear at phase0marker.
;After sieges, to get allies to go home:
;*Call DeactivateAllies()
;*!!! NOTE !!!! This assumes the allies have standard packages that take them home some place. If this is not true, I will need to revisit this system.
CWScript Property CWs Auto
ReferenceAlias Property Phase0Marker Auto
ReferenceAlias Property Phase1Marker Auto
ReferenceAlias Property Phase2Marker Auto
ReferenceAlias Property Phase3Marker Auto
ReferenceAlias Property Phase4Marker Auto
ReferenceAlias Property Phase5Marker Auto
ReferenceAlias Property Phase6Marker Auto
ReferenceAlias Property PotentialAlly1 Auto
ReferenceAlias Property PotentialAlly2 Auto
ReferenceAlias Property PotentialAlly3 Auto
ReferenceAlias Property PotentialAlly4 Auto
ReferenceAlias Property PotentialAlly5 Auto
ReferenceAlias Property PotentialAlly6 Auto
ReferenceAlias Property PotentialAlly7 Auto
ReferenceAlias Property PotentialAlly8 Auto
ReferenceAlias Property PotentialAlly9 Auto
ReferenceAlias Property PotentialAlly10 Auto
ReferenceAlias Property ActiveAlly1 Auto
ReferenceAlias Property ActiveAlly2 Auto
ReferenceAlias Property ActiveAlly3 Auto
ReferenceAlias Property ActiveAlly4 Auto
ReferenceAlias Property ActiveAlly5 Auto
ReferenceAlias Property ActiveAlly6 Auto
ReferenceAlias Property ActiveAlly7 Auto
ReferenceAlias Property ActiveAlly8 Auto
ReferenceAlias Property ActiveAlly9 Auto
ReferenceAlias Property ActiveAlly10 Auto
Faction Property CWAlliesHaafingarFaction Auto
Faction Property CWAlliesReachFaction Auto
Faction Property CWAlliesHjaalmarchFaction Auto
Faction Property CWAlliesWhiterunFaction Auto
Faction Property CWAlliesFalkreathFaction Auto
Faction Property CWAlliesPaleFaction Auto
Faction Property CWAlliesWinterholdFaction Auto
Faction Property CWAlliesEastmarchFaction Auto
Faction Property CWAlliesRiftFaction Auto
Faction Property CWAlliesImperialsOnlyFaction Auto
Faction Property CWAlliesSonsOnlyFaction Auto
Location Property HaafingarHoldLocation Auto
Location Property ReachHoldLocation Auto
Location Property HjaalmarchHoldLocation Auto
Location Property WhiterunHoldLocation Auto
Location Property FalkreathHoldLocation Auto
Location Property PaleHoldLocation Auto
Location Property WinterholdHoldLocation Auto
Location Property EastmarchHoldLocation Auto
Location Property RiftHoldLocation Auto
function MakeHadvarAndRalofPotentialAllies()
;we're making them both potential allys when player joins either side, because IsAllowedtoJoinPlayersFaction() should prevent the wrong guy from showing up
; CWScript.Log("CWAlliesScript", self + "MakeHadvarAndRalofPotentialAllies() calling AddPotentialAlly() for both Hadvar and Ralof")
AddPotentialAlly( \
CWs.HadvarRef, \
AllowedInHaafingar = False, \
AllowedInReach = True, \
AllowedInHjaalmarch = True, \
AllowedInWhiterun = True, \
AllowedInFalkreath = True, \
AllowedInPale = True, \
AllowedInWinterhold = True, \
AllowedInEastmarch = False, \
AllowedInRift = True, \
ImperialsOnly = True, \
SonsOnly = false \
)
AddPotentialAlly( \
CWs.RalofRef, \
AllowedInHaafingar = False, \
AllowedInReach = True, \
AllowedInHjaalmarch = True, \
AllowedInWhiterun = True, \
AllowedInFalkreath = True, \
AllowedInPale = True, \
AllowedInWinterhold = True, \
AllowedInEastmarch = False, \
AllowedInRift = True, \
ImperialsOnly = False, \
SonsOnly = True \
)
EndFunction
function AddPotentialAlly( \
ObjectReference ReferenceToAdd, \
Bool AllowedInHaafingar = false, \
Bool AllowedInReach = false, \
Bool AllowedInHjaalmarch = false, \
Bool AllowedInWhiterun = false, \
Bool AllowedInFalkreath = false, \
Bool AllowedInPale = false, \
Bool AllowedInWinterhold = false, \
Bool AllowedInEastmarch = false, \
Bool AllowedInRift = false, \
bool ImperialsOnly = false, \
bool SonsOnly = false \
)
; CWScript.Log("CWAlliesScript", self + "AddPotentialAlly() trying to add " + ReferenceToAdd + "Calling GetFreePotenialAllyAlias()")
ReferenceAlias AliasToForceInto = GetFreePotentialAllyAlias()
Actor ActorToAdd = ReferenceToAdd as Actor
if AliasToForceInto != None
; CWScript.Log("CWAlliesScript", self + "AddPotentialAlly() forcing " + ReferenceToAdd + " into alias " + AliasToForceInto)
AliasToForceInto.ForceRefTo(ReferenceToAdd)
if AllowedInHaafingar
; CWScript.Log("CWAlliesScript", self + "adding " + ReferenceToAdd + " to faction " + CWAlliesHaafingarFaction)
ActorToAdd.AddToFaction(CWAlliesHaafingarFaction)
EndIf
if AllowedInReach
; CWScript.Log("CWAlliesScript", self + "adding " + ReferenceToAdd + " to faction " + CWAlliesReachFaction)
ActorToAdd.AddToFaction(CWAlliesReachFaction)
EndIf
if AllowedInHjaalmarch
; CWScript.Log("CWAlliesScript", self + "adding " + ReferenceToAdd + " to faction " + CWAlliesHjaalmarchFaction)
ActorToAdd.AddToFaction(CWAlliesHjaalmarchFaction)
EndIf
if AllowedInWhiterun
; CWScript.Log("CWAlliesScript", self + "adding " + ReferenceToAdd + " to faction " + CWAlliesWhiterunFaction)
ActorToAdd.AddToFaction(CWAlliesWhiterunFaction)
EndIf
if AllowedInFalkreath
; CWScript.Log("CWAlliesScript", self + "adding " + ReferenceToAdd + " to faction " + CWAlliesFalkreathFaction)
ActorToAdd.AddToFaction(CWAlliesFalkreathFaction)
EndIf
if AllowedInPale
; CWScript.Log("CWAlliesScript", self + "adding " + ReferenceToAdd + " to faction " + CWAlliesPaleFaction)
ActorToAdd.AddToFaction(CWAlliesPaleFaction)
EndIf
if AllowedInWinterhold
; CWScript.Log("CWAlliesScript", self + "adding " + ReferenceToAdd + " to faction " + CWAlliesWinterholdFaction)
ActorToAdd.AddToFaction(CWAlliesWinterholdFaction)
EndIf
if AllowedInEastmarch
; CWScript.Log("CWAlliesScript", self + "adding " + ReferenceToAdd + " to faction " + CWAlliesEastmarchFaction)
ActorToAdd.AddToFaction(CWAlliesEastmarchFaction)
EndIf
if AllowedInRift
; CWScript.Log("CWAlliesScript", self + "adding " + ReferenceToAdd + " to faction " + CWAlliesRiftFaction)
ActorToAdd.AddToFaction(CWAlliesRiftFaction)
EndIf
if ImperialsOnly
; CWScript.Log("CWAlliesScript", self + "adding " + ReferenceToAdd + " to faction " + CWAlliesImperialsOnlyFaction)
ActorToAdd.AddToFaction(CWAlliesImperialsOnlyFaction)
EndIf
if SonsOnly
; CWScript.Log("CWAlliesScript", self + "adding " + ReferenceToAdd + " to faction " + CWAlliesSonsOnlyFaction)
ActorToAdd.AddToFaction(CWAlliesSonsOnlyFaction)
EndIf
Else
;WARNING WE COULDN'T FIND FREE SLOT!!!!
; CWScript.Log("CWAlliesScript", self + " WARNING: AddPotentialAlly() couldn't find a free slot for the ally.", 2, 1, 1 )
EndIf
EndFunction
ReferenceAlias function GetFreePotentialAllyAlias()
ReferenceAlias AliasToReturn
if PotentialAlly1.GetReference() == False
AliasToReturn = PotentialAlly1
ElseIf PotentialAlly2.GetReference() == False
AliasToReturn = PotentialAlly2
ElseIf PotentialAlly3.GetReference() == False
AliasToReturn = PotentialAlly3
ElseIf PotentialAlly4.GetReference() == False
AliasToReturn = PotentialAlly4
ElseIf PotentialAlly5.GetReference() == False
AliasToReturn = PotentialAlly5
ElseIf PotentialAlly6.GetReference() == False
AliasToReturn = PotentialAlly6
ElseIf PotentialAlly7.GetReference() == False
AliasToReturn = PotentialAlly7
ElseIf PotentialAlly8.GetReference() == False
AliasToReturn = PotentialAlly8
ElseIf PotentialAlly9.GetReference() == False
AliasToReturn = PotentialAlly9
ElseIf PotentialAlly10.GetReference() == False
AliasToReturn = PotentialAlly10
Else
;RAN OUT OF SLOTS
; CWScript.Log("CWAlliesScript", self + " WARNING: GetFreePotenialAllyAlias() ran out of PotentialAlly Aliases, returning none.", 2, 1, 1 )
return None
EndIf
; CWScript.Log("CWAlliesScript", self + "GetFreePotenialAllyAlias() returning " + AliasToReturn)
return AliasToReturn
EndFunction
function RegisterAllyPhaseMarkers(ObjectReference Phase0MarkerRef, ObjectReference Phase1MarkerRef, ObjectReference Phase2MarkerRef, ObjectReference Phase3MarkerRef, ObjectReference Phase4MarkerRef, ObjectReference Phase5MarkerRef, ObjectReference Phase6MarkerRef)
{Called by Siege scripts to register 1 set of phase1/2/3/4/5 markers for all the allies to use for that siege}
; CWScript.Log("CWAlliesScript", self + "RegisterAllyPhaseMarkers() forcing Refs: " + Phase0MarkerRef + "," + Phase1MarkerRef + ", " + Phase2MarkerRef + ", " + Phase3MarkerRef + ", " + Phase4MarkerRef + ", " + Phase5MarkerRef + ", " + Phase6MarkerRef + " into Phase0/1/2/3/4/5/6Marker Aliases.")
Phase0Marker.ForceRefTo(Phase0MarkerRef)
Phase1Marker.ForceRefTo(Phase1MarkerRef)
Phase2Marker.ForceRefTo(Phase2MarkerRef)
Phase3Marker.ForceRefTo(Phase3MarkerRef)
Phase4Marker.ForceRefTo(Phase4MarkerRef)
Phase5Marker.ForceRefTo(Phase5MarkerRef)
Phase6Marker.ForceRefTo(Phase6MarkerRef)
EndFunction
function ProcessAlliesForSiege(Location HoldLocation)
{Called by Siege scripts to find appropriate allies and move them to Phase0Marker}
; CWScript.Log("CWAlliesScript", self + "ProcessAlliesForSiege() for location " + HoldLocation + " will now try to find appropriate allies, move them to Phase1Marker and disable them.")
ObjectReference Phase0MarkerRef = Phase0Marker.GetReference()
if Phase0MarkerRef == None
; CWScript.Log("CWAlliesScript", self + " WARNING: ProcessAlliesForSiege() couldn't find a reference in Phase0Marker. Make sure Siege Script calls RegisterAllyPhaseMarkers() before calling ProcessAlliesForSiege()!!! ", 2, 1, 1 )
Return
EndIf
TryToProcessAlly(PotentialAlly1, HoldLocation, Phase0MarkerRef)
TryToProcessAlly(PotentialAlly2, HoldLocation, Phase0MarkerRef)
TryToProcessAlly(PotentialAlly3, HoldLocation, Phase0MarkerRef)
TryToProcessAlly(PotentialAlly4, HoldLocation, Phase0MarkerRef)
TryToProcessAlly(PotentialAlly5, HoldLocation, Phase0MarkerRef)
TryToProcessAlly(PotentialAlly6, HoldLocation, Phase0MarkerRef)
TryToProcessAlly(PotentialAlly7, HoldLocation, Phase0MarkerRef)
TryToProcessAlly(PotentialAlly8, HoldLocation, Phase0MarkerRef)
TryToProcessAlly(PotentialAlly9, HoldLocation, Phase0MarkerRef)
TryToProcessAlly(PotentialAlly10, HoldLocation, Phase0MarkerRef)
; CWScript.Log("CWAlliesScript", self + "ProcessAlliesForSiege() done processing potential allies.")
EndFunction
Function TryToProcessAlly(ReferenceAlias PotentialAlly, Location HoldLocation, ObjectReference Phase0MarkerRef)
; CWScript.Log("CWAlliesScript", self + "TryToProcessAlly() for PotentialAlly Alias:" + PotentialAlly + " for HoldLocation:" + HoldLocation)
actor CurrentPotentialAlly = TryPromoteToActiveAllyAndReturnActor(PotentialAlly, HoldLocation)
if CurrentPotentialAlly
; CWScript.Log("CWAlliesScript", self + "TryToProcessAlly() disabling " + CurrentPotentialAlly + " and moving to to " + Phase0MarkerRef + "." )
CurrentPotentialAlly.Disable()
CurrentPotentialAlly.MoveTo(Phase0MarkerRef)
Else ;for some reason TryPromoteToActiveAllyAndReturnActor failed to return an actor. This does not mean something broke. There are cases where this is fine (for instance tha actor isn't in the faction that allows him to show up in the hold
; CWScript.Log("CWAlliesScript", self + "TryToProcessAlly() did not get an actor from TryPromoteToActiveAllyAndReturnActor( " + PotentialAlly + " ) so we are ignoring it.")
EndIf
EndFunction
Actor function TryPromoteToActiveAllyAndReturnActor(ReferenceAlias PotentialAllyToPromote, Location HoldLocation)
Actor ActorToForce = PotentialAllyToPromote.GetActorReference()
ReferenceAlias AliasToForceInto = GetFreeActiveAllyAlias()
;check that there is an Actor in PotentialAllyToPromote
if ActorToForce == None
; CWScript.Log("CWAlliesScript", self + " TryPromoteToActiveAllyAndReturnActor() did not find an actor in PotentialAllyToPromote alias: " + PotentialAllyToPromote)
ActorToForce = None ;it's already none, but for consistency and readability I'm setting it here.
Else
;Check that Actor is in the correct faction (ie that he is allowed to show up in the HoldLocation)
if IsAllowedInLocation(ActorToForce, HoldLocation) && IsAllowedToJoinPlayersFaction(ActorToForce)
;Is Allowed in location
; CWScript.Log("CWAlliesScript", self + "TryPromoteToActiveAllyAndReturnActor() found actor" + ActorToForce + " is indeed allowed in location and is allowed to join up with the player's faction." )
if AliasToForceInto != None
; CWScript.Log("CWAlliesScript", self + "TryPromoteToActiveAllyAndReturnActor() forcing " + ActorToForce + " into alias " + AliasToForceInto)
AliasToForceInto.ForceRefTo(ActorToForce)
Else
;WARNING WE COULDN'T FIND FREE SLOT!!!!
; CWScript.Log("CWAlliesScript", self + " WARNING: TryPromoteToActiveAllyAndReturnActor() couldn't find a free slot for the ally.", 2, 1, 1 )
ActorToForce = None
EndIf
Else ; Is Not Allowed in Location
; CWScript.Log("CWAlliesScript", self + "promoteToActiveAlly() found actor" + ActorToForce + " is not allowed in location(" + HoldLocation + ") OR is not allowed to join player's faction:" + CWs.PlayerAllegiance + "[" + CWs.FactionName(CWs.PlayerAllegiance) +"]")
ActorToForce = None
EndIf
Endif
; CWScript.Log("CWAlliesScript", self + "promoteToActiveAlly() returning " + ActorToForce)
return ActorToForce
EndFunction
bool function IsAllowedInLocation(Actor ActorToCheck, Location HoldLocationToCheck)
Bool IsAllowed
if HoldLocationToCheck == HaafingarHoldLocation
if ActorToCheck.IsInFaction(CWAlliesHaafingarFaction)
IsAllowed = True
Else
; CWScript.Log("CWAlliesScript", self + "IsAllowedInLocation() did not find ActorToCheck" + ActorToCheck + " in CWAlliesHaafingarFaction. Will return false.")
IsAllowed = False
EndIf
elseif HoldLocationToCheck == ReachHoldLocation
if ActorToCheck.IsInFaction(CWAlliesReachFaction)
IsAllowed = true
else
; CWScript.Log("CWAlliesScript", self + "IsAllowedInLocation() did not find ActorToCheck" + ActorToCheck + " in CWAlliesReachFaction. Will return false.")
IsAllowed = False
Endif
elseif HoldLocationToCheck == HjaalmarchHoldLocation
if ActorToCheck.IsInFaction(CWAlliesHjaalmarchFaction)
IsAllowed = true
else
; CWScript.Log("CWAlliesScript", self + "IsAllowedInLocation() did not find ActorToCheck" + ActorToCheck + " in CWAlliesHjaalmarchFaction. Will return false.")
IsAllowed = False
Endif
elseif HoldLocationToCheck == WhiterunHoldLocation
if ActorToCheck.IsInFaction(CWAlliesWhiterunFaction)
IsAllowed = true
else
; CWScript.Log("CWAlliesScript", self + "IsAllowedInLocation() did not find ActorToCheck" + ActorToCheck + " in CWAlliesWhiterunFaction. Will return false.")
IsAllowed = False
Endif
elseif HoldLocationToCheck == FalkreathHoldLocation
if ActorToCheck.IsInFaction(CWAlliesFalkreathFaction)
IsAllowed = true
else
; CWScript.Log("CWAlliesScript", self + "IsAllowedInLocation() did not find ActorToCheck" + ActorToCheck + " in CWAlliesFalkreathFaction. Will return false.")
IsAllowed = False
Endif
elseif HoldLocationToCheck == PaleHoldLocation
if ActorToCheck.IsInFaction(CWAlliesPaleFaction)
IsAllowed = true
else
; CWScript.Log("CWAlliesScript", self + "IsAllowedInLocation() did not find ActorToCheck" + ActorToCheck + " in CWAlliesPaleFaction. Will return false.")
IsAllowed = False
Endif
elseif HoldLocationToCheck == WinterholdHoldLocation
if ActorToCheck.IsInFaction(CWAlliesWinterholdFaction)
IsAllowed = true
else
; CWScript.Log("CWAlliesScript", self + "IsAllowedInLocation() did not find ActorToCheck" + ActorToCheck + " in CWAlliesWinterholdFaction. Will return false.")
IsAllowed = False
Endif
elseif HoldLocationToCheck == EastmarchHoldLocation
if ActorToCheck.IsInFaction(CWAlliesEastmarchFaction)
IsAllowed = true
else
; CWScript.Log("CWAlliesScript", self + "IsAllowedInLocation() did not find ActorToCheck" + ActorToCheck + " in CWAlliesEastmarchFaction. Will return false.")
IsAllowed = False
Endif
elseif HoldLocationToCheck == RiftHoldLocation
if ActorToCheck.IsInFaction(CWAlliesRiftFaction)
IsAllowed = true
else
; CWScript.Log("CWAlliesScript", self + "IsAllowedInLocation() did not find ActorToCheck" + ActorToCheck + " in CWAlliesRiftFaction. Will return false.")
IsAllowed = False
Endif
Else
; CWScript.Log("CWAlliesScript", self + " WARNING: IsAllowedInLocation() found an unexpected location for HoldLocationToCheck:" + HoldLocationToCheck, 2, 1, 1 )
IsAllowed = False
EndIf
return IsAllowed
EndFunction
bool Function IsAllowedToJoinPlayersFaction(Actor ActorToCheck)
bool returnVal
if CWs.PlayerAllegiance == CWs.iImperials && ActorToCheck.IsInFaction(CWAlliesSonsOnlyFaction)
; CWScript.Log("CWAlliesScript", self + "IsAllowedToJoinPlayersFaction(" + ActorToCheck + ") is in CWAlliesSonsOnlyFaction and player Imperial. Will return false.")
returnVal = False
elseif CWs.PlayerAllegiance == CWs.iSons && ActorToCheck.IsInFaction(CWAlliesImperialsOnlyFaction)
; CWScript.Log("CWAlliesScript", self + "IsAllowedToJoinPlayersFaction(" + ActorToCheck + ") is in CWAlliesImperialsOnlyFaction and player Sons. Will return false.")
returnVal = False
Else
returnVal = True
EndIf
return returnVal
EndFunction
ReferenceAlias function GetFreeActiveAllyAlias()
ReferenceAlias AliasToReturn
if ActiveAlly1.GetReference() == False
AliasToReturn = ActiveAlly1
ElseIf ActiveAlly2.GetReference() == False
AliasToReturn = ActiveAlly2
ElseIf ActiveAlly3.GetReference() == False
AliasToReturn = ActiveAlly3
ElseIf ActiveAlly4.GetReference() == False
AliasToReturn = ActiveAlly4
ElseIf ActiveAlly5.GetReference() == False
AliasToReturn = ActiveAlly5
ElseIf ActiveAlly6.GetReference() == False
AliasToReturn = ActiveAlly6
ElseIf ActiveAlly7.GetReference() == False
AliasToReturn = ActiveAlly7
ElseIf ActiveAlly8.GetReference() == False
AliasToReturn = ActiveAlly8
ElseIf ActiveAlly9.GetReference() == False
AliasToReturn = ActiveAlly9
ElseIf ActiveAlly10.GetReference() == False
AliasToReturn = ActiveAlly10
Else
;RAN OUT OF SLOTS
; CWScript.Log("CWAlliesScript", self + " WARNING: GetFreePotenialAllyAlias() ran out of ActiveAlly Aliases, returning none.", 2, 1, 1 )
return None
EndIf
; CWScript.Log("CWAlliesScript", self + "GetFreePotenialAllyAlias() returning " + AliasToReturn)
return AliasToReturn
EndFunction
function EnableActiveAllies()
; CWScript.Log("CWAlliesScript", self + "EnableActiveAllies() calling TryToEnable() on all of the ActiveAllyX aliases.")
ActiveAlly1.TryToEnable()
ActiveAlly2.TryToEnable()
ActiveAlly3.TryToEnable()
ActiveAlly4.TryToEnable()
ActiveAlly5.TryToEnable()
ActiveAlly6.TryToEnable()
ActiveAlly7.TryToEnable()
ActiveAlly8.TryToEnable()
ActiveAlly9.TryToEnable()
ActiveAlly10.TryToEnable()
; CWScript.Log("CWAlliesScript", self + "EnableActiveAllies() finished trying to enable all the active allies.")
EndFunction
function DeactivateAllies()
{Called by Siege script when the siege is over and the allies should go home. This assumes the Allies have packages that take them some place. If this is not true, I need to revisit this system.}
; CWScript.Log("CWAlliesScript", self + "EnableActiveAllies() calling Clear() on all of the ActiveAllyX aliases.")
ActiveAlly1.Clear()
ActiveAlly2.Clear()
ActiveAlly3.Clear()
ActiveAlly4.Clear()
ActiveAlly5.Clear()
ActiveAlly6.Clear()
ActiveAlly7.Clear()
ActiveAlly8.Clear()
ActiveAlly9.Clear()
ActiveAlly10.Clear()
EndFunction

View File

@ -1,61 +0,0 @@
Scriptname CWCampaignPollForMissionAcceptScript extends Quest
;## Quests ##
Quest Property CW Auto
Quest Property CWCampaign Auto
;## Scripts ##
;These will be assigned in the OnInit() block
CWScript Property CWs Auto hidden
CWCampaignScript Property CWCampaignS Auto hidden
Event OnInit()
; CWScript.Log("CWCampaignPollForMissionAcceptScript" , " OnInit()", 0, True, True)
CWs = CW as CWScript
CWCampaignS = CWCampaign as CWCampaignScript
registerForUpdate(5)
EndEvent
auto State NotPolling
Event OnUpdate()
; CWScript.Log("CWCampaignPollForMissionAcceptScript" , " State: 'NotPolling' OnUpdate(), doing nothing." )
EndEvent
EndState
State Polling
Event OnUpdate()
; CWScript.Log("CWCampaignPollForMissionAcceptScript" , " State: 'Polling' OnUpdate(), polling for quest acceptance or GameDaysPassed > NextPhaseDay." )
if CWCampaignS.AcceptedMission > 0
; CWScript.Log("CWCampaignPollForMissionAcceptScript" , " State: 'Polling' See's AcceptedMission > 0, going to State 'NotPolling'" )
StopPolling()
Elseif CWs.GameDaysPassed.value > CWCampaignS.NextPhaseDay
; CWScript.Log("CWCampaignPollForMissionAcceptScript" , " State: 'Polling' sees that GameDaysPassed(" + CWs.GameDaysPassed.value + ") > NextPhaseDay(" + CWCampaignS.NextPhaseDay + "), stopping polling, and calling AdvanceCampaignPhase()" )
StopPolling()
CWCampaignS.AdvanceCampaignPhase() ;this will among other things set AcceptedMission to 0
Else
; CWScript.Log("CWCampaignPollForMissionAcceptScript" , " State: 'Polling' sees that GameDaysPassed(" + CWs.GameDaysPassed.value + ") < NextPhaseDay(" + CWCampaignS.NextPhaseDay + "), will keep polling." )
EndIf
EndEvent
EndState
Function StartPolling()
GoToState("Polling")
EndFunction
Function StopPolling()
GoToState("NotPolling")
EndFunction

File diff suppressed because it is too large Load Diff

View File

@ -1,82 +0,0 @@
Scriptname CWCatapultOffscreenFireControlScript extends ObjectReference
{Controls the offscreen firing scripting. Set properties on the CWCatapultScript.}
;Constants
string OffScreenFireModeOff = "OffScreenFireModeOff"
string OffScreenFireModeWaitingToFire = "OffScreenFireModeWaitingToFire"
string OffScreenFireModeBusyFiring = "OffScreenFireModeBusyFiring"
auto state OffScreenFireModeOff
Event OnUpdate()
; CWScript.Log("CWCatapultOffscreenFireControlScript", self + "OffScreenFireModeOff OnUpdate() doing nothing.")
EndEvent
EndState
state OffScreenFireModeBusyFiring
Event OnUpdate()
; CWScript.Log("CWCatapultOffscreenFireControlScript", self + "OffScreenFireModeBusyFiring OnUpdate() doing nothing.")
EndEvent
EndState
state OffScreenFireModeWaitingToFire
Event OnUpdate()
GoToState(OffScreenFireModeBusyFiring)
UnregisterForUpdate()
CWCatapultScript Cs = (self as ObjectReference) as CWCatapultScript
; CWScript.Log("CWCatapultOffscreenFireControlScript", self + "OffScreenFireModeWaitingToFire OnUpdate() going to state OffScreenFireModeBusyFiring and possibly firing strike if in correct phase ")
if Cs.UseCWCatapultStrikeSpawners == True
if Cs.UseCWCatapultStrikeSpawners == True ;in case we turned that off during the wait
if Cs.CWBattlePhase.GetValue() == 0 && GetLinkedRef(Cs.CW1)
; CWScript.Log("CWCatapultOffscreenFireControlScript", self + "startSpawningCatapultStrikes() Calling CallCatapultStrike() on " + GetLinkedRef(Cs.CW1))
(GetLinkedRef(Cs.CW1) as CWCatapultStrikeSpawnerScript).CallCatapultStrike()
elseif Cs.CWBattlePhase.GetValue() == 1 && GetLinkedRef(Cs.CW1)
; CWScript.Log("CWCatapultOffscreenFireControlScript", self + "startSpawningCatapultStrikes() Calling CallCatapultStrike() on " + GetLinkedRef(Cs.CW1))
(GetLinkedRef(Cs.CW1) as CWCatapultStrikeSpawnerScript).CallCatapultStrike()
elseif Cs.CWBattlePhase.GetValue() == 2 && GetLinkedRef(Cs.CW2)
; CWScript.Log("CWCatapultOffscreenFireControlScript", self + "startSpawningCatapultStrikes() Calling CallCatapultStrike() on " + GetLinkedRef(Cs.CW2))
(GetLinkedRef(Cs.CW2) as CWCatapultStrikeSpawnerScript).CallCatapultStrike()
elseif Cs.CWBattlePhase.GetValue() == 3 && GetLinkedRef(Cs.CW3)
; CWScript.Log("CWCatapultOffscreenFireControlScript", self + "startSpawningCatapultStrikes() Calling CallCatapultStrike() on " + GetLinkedRef(Cs.CW3))
(GetLinkedRef(Cs.CW3) as CWCatapultStrikeSpawnerScript).CallCatapultStrike()
elseif Cs.CWBattlePhase.GetValue() == 4 && GetLinkedRef(Cs.CW4)
; CWScript.Log("CWCatapultOffscreenFireControlScript", self + "startSpawningCatapultStrikes() Calling CallCatapultStrike() on " + GetLinkedRef(Cs.CW4))
(GetLinkedRef(Cs.CW4) as CWCatapultStrikeSpawnerScript).CallCatapultStrike()
elseif Cs.CWBattlePhase.GetValue() == 5 && GetLinkedRef(Cs.CW5)
; CWScript.Log("CWCatapultOffscreenFireControlScript", self + "startSpawningCatapultStrikes() Calling CallCatapultStrike() on " + GetLinkedRef(Cs.CW5))
(GetLinkedRef(Cs.CW5) as CWCatapultStrikeSpawnerScript).CallCatapultStrike()
elseif GetLinkedRef(Cs.CWAllPhases)
; CWScript.Log("CWCatapultOffscreenFireControlScript", self + "startSpawningCatapultStrikes() Calling CallCatapultStrike() on " + GetLinkedRef(Cs.CWAllPhases))
(GetLinkedRef(Cs.CWAllPhases) as CWCatapultStrikeSpawnerScript).CallCatapultStrike()
Else
; CWScript.Log("CWCatapultOffscreenFireControlScript", self + "startSpawningCatapultStrikes() NOT calling CallCatapultStrike() because CWBattlePhase == x which doesn't match a GetLinkedRef CWx", 1)
EndIf
GoToState(OffScreenFireModeWaitingToFire)
RegisterForUpdate(Cs.GetTimeToNextLaunch())
EndIf
EndIf
EndEvent
EndState
function StopOffscreenFiring()
GoToState(OffScreenFireModeOff)
; CWScript.Log("CWCatapultOffscreenFireControlScript", self + "StopOffscreenFiring() so went to state OffscreenFireModeOff, calling UnRegisterForUpdate()")
UnregisterForUpdate()
EndFunction
function StartOffscreenFiring(float LaunchTime)
GoToState(OffScreenFireModeWaitingToFire)
RegisterForUpdate(LaunchTime)
; CWScript.Log("CWCatapultOffscreenFireControlScript", self + "StartOffscreenFiring() so went to state OffScreenFireModeWaitingToFire")
EndFunction

View File

@ -1,399 +0,0 @@
Scriptname CWCatapultScript extends ObjectReference
{Script on the CWCatapult Activator}
;NOTES:
;NORMAL OPERATION:
;To start catapults, 1) Enable() them, THEN 2) call TurnOn() -- THE ORDER IS IMPORTANT... ENABLE() FIRST if you don't then you put it in the mode to always fire as if it were "offscreen" and unloaded
;To stop catapults, 1) call the turnOff() function, then 2) Disable() them -- THE ORDER IS IMPORTANT
;When it's appropriate and you want to start using the CWCatapultStrikeSpawners to pin point where each hit should land, disable() the catapult which will cause it to start using the special effects instead of practical projectiles.
;When the catapult unloads it sets the UseCWCatapultStrikeSpawners bool to true and calls startSpawningCatapultStrikes() which based on the CWBattlePhase will place special fx explosions at linked refs linked with keywords CW1, CW2, CW3, CW4, CW5 based on the phase
;START DISABLED AND FIRE USING SPECIAL EFFECTS ONLY:
;To make a catapult never appear in the world but still fire with the special fx explosions, make sure it starts disabled, and instead of enable() it, just call turnOn() function on it. It assumes if it's disabled and you call turnOn() it should start firing as if it was unloaded
;AIMING THE CATAPULT
;Run the game, and "setpv aim True" on it in the console
;Now when you activate it in the ready position, it will pop up an aim menu
;One of the options is "Log Coordinates" this will print out the x, y, z position and angles to a text file so you can then enter those in the editor
;One special option is the "Face Target" button. By default this is the player, so you can run to where you want it to aim towards and then activate it via console (prid it, then "activate player") and it will face toward you
;you can also set this as a property on the reference if you have another reference you want to aim it at
;DON'T FORGET to push the "Log Coordinates" button on each catapult you aim, or you will have lost your targetting data
Weapon Property WeaponToFire Auto
{BASEOBJECT: Set this to CWCatapultWeapon, this is the weapon that the fire() function is called on.}
Ammo Property AmmoToFire Auto
{BASEOBJECT: Set this to CWCatapultAmmo, this is the ammo parameter that the fire() function is passed.}
GlobalVariable Property CWBattlePhase Auto
{BASEOBJECT: Pointer to CWBattlePhase global}
keyword Property CW1 Auto
{BASEOBJET: pointer to keyword CW1 which defines the CWCatapultStrikerSpawner associated with phase 1 that should place catapult strike effects if this catapult is unloaded and CWBattlePhase is the correct phase}
keyword Property CW2 Auto
{BASEOBJET: pointer to keyword CW2 which defines the CWCatapultStrikerSpawner associated with phase 2 that should place catapult strike effects if this catapult is unloaded and CWBattlePhase is the correct phase}
keyword Property CW3 Auto
{BASEOBJET: pointer to keyword CW3 which defines the CWCatapultStrikerSpawner associated with phase 3 that should place catapult strike effects if this catapult is unloaded and CWBattlePhase is the correct phase}
keyword Property CW4 Auto
{BASEOBJET: pointer to keyword CW4 which defines the CWCatapultStrikerSpawner associated with phase 4 that should place catapult strike effects if this catapult is unloaded and CWBattlePhase is the correct phase}
keyword Property CW5 Auto
{BASEOBJET: pointer to keyword CW5 which defines the CWCatapultStrikerSpawner associated with phase 5 that should place catapult strike effects if this catapult is unloaded and CWBattlePhase is the correct phase}
keyword Property CWAllPhases Auto
{BASEOBJET: pointer to keyword CWAllPhases which defines the CWCatapultStrikerSpawner associated with all phases that should place catapult strike effects if this catapult is unloaded}
Message Property CWCatapultMsgAngle Auto
{BASEOBJECT: pointer to the CWCatapultMsgAngle message}
Message Property CWCatapultMsgPosition Auto
{BASEOBJECT: pointer to the CWCatapultMsgAngle message}
float property MinStrikeSpawnerTime = 5.0 Auto
{Optional REFERENCE: minimum seconds that should pass between each CWCatapultStrike special effect Explosion from this catapult}
float property MaxStrikeSpawnerTime = 10.0 Auto
{Optional REFERENCE: maximum seconds that should pass between each CWCatapultStrike special effect Explosion from this catapult}
Bool Property Aim Auto
{DEBUG: Put the catapult in aiming mode.}
ObjectReference Property FaceTarget auto
{DEBUG: object ref id aim at, set before activating the Aiming mode menu in game}
;Private Properties / Variables
bool property UseCWCatapultStrikeSpawners auto ;when this is true, don't launch normally, but instead call in special effect explosions (this is set to true when the object is unloaded)
{DON'T SET THIS, FOR DEBUGGING AND INTERNAL USE BY SCRIPT ONLY}
;set bu TurnOn() and TurnOff()
bool Property TurnedOn Auto ;*** WHEN WE ARE DONE SETTING UP THIS SHOULD BE OFF BY DEFAILT AND TURNED ON WITH A FUNCTION
{DON'T SET THIS, FOR DEBUGGING AND INTERNAL USE BY SCRIPT ONLY}
;<constants>
;state names - must be the same as the name of the states
string busy = "busy" ;busy animating
string ready = "ready" ;loaded and ready to fire
string fired = "fired" ;fired Projectile
;animation events - for convenience these are declared as string variables
string aeFire = "fire" ;send this event to cause the catapult arm to fly up and launch the payload
string aeLaunch = "launch" ;[OBSOLETE] sent from activator at the moment the payload leaves the arm - this is when the weapon should call fire()
string aeFired = "fired" ;sent from activator when the launch animation is complete and it's safe to allow activate events to load it again
string aeReload = "reload" ;send this event to cause the catapult arm to lower and spawn a new payload
string aeReloaded = "reloaded" ;sent from activator when the reload animation is finished and it's safe to allow activate events to launch it again
string aeStartFired = "startFired" ;send to activator to start a catapult in the fired position. Do not call this any other time than OnLoad or it will look bad.
;</constants>
Event OnLoad()
((self as ObjectReference) as CWCatapultOffscreenFireControlScript).StopOffscreenFiring()
UseCWCatapultStrikeSpawners = False
; CWScript.Log("CWCatapultScript", self + "OnLoad()")
RegisterForAnimationEvent(self, aeFire) ;arm goes up and payload launces
RegisterForAnimationEvent(self, aeLaunch) ;last few frames as the payload launches - should coincide with the fire() function call
RegisterForAnimationEvent(self, aeFired) ;arm is at rest after finished launching
RegisterForAnimationEvent(self, aeReload) ;arm goes down and payload appears in it
RegisterForAnimationEvent(self, aeReloaded) ;arm is down and payload appeared
RegisterForAnimationEvent(self, aeStartFired) ;arm should start up
endEvent
Event OnUnload()
if UseCWCatapultStrikeSpawners == False && TurnedOn == true ;if we aren't already doing this for some reason, go ahead and Start
startSpawningCatapultStrikes()
EndIf
; debug.MessageBox(self + "OnUnload()")
; CWScript.Log("CWCatapultScript", self + "OnUnload()")
UnRegisterForAnimationEvent(self, aeFire)
UnRegisterForAnimationEvent(self, aeLaunch)
UnRegisterForAnimationEvent(self, aeFired)
UnRegisterForAnimationEvent(self, aeReload)
UnRegisterForAnimationEvent(self, aeReloaded)
UnRegisterForAnimationEvent(self, aeStartFired)
endEvent
state busy
Event OnBeginState()
; CWScript.Log("CWCatapultScript", self + "OnBeginState() busy")
EndEvent
;catch activate
Event OnActivate(ObjectReference akActionRef)
; CWScript.Log("CWCatapultScript", self + "OnActivate(" + akActionRef + "): busy, so doing nothing.")
EndEvent
EndState
auto state ready
Event OnBeginState()
; CWScript.Log("CWCatapultScript", self + "OnBeginState() ready")
EndEvent
;catch activate
Event OnActivate(ObjectReference akActionRef)
if aim == true
showAimingMenu()
Else
if UseCWCatapultStrikeSpawners == False
launch()
; CWScript.Log("CWCatapultScript", self + "OnActivate(" + akActionRef + ") ready, so called launch().")
Else
; CWScript.Log("CWCatapultScript", self + "OnActivate(" + akActionRef + ") UseCWCatapultStrikeSpawners == True so I am not launching normally but calling in SFX catapult explosions.")
EndIf
EndIf
EndEvent
EndState
state fired
Event OnBeginState()
; CWScript.Log("CWCatapultScript", self + "OnBeginState() fired")
EndEvent
;catch activate
Event OnActivate(ObjectReference akActionRef)
reload()
; CWScript.Log("CWCatapultScript", self + "OnActivate(" + akActionRef + ") fired, so called reload.")
EndEvent
EndState
Event OnAnimationEvent(ObjectReference akSource, string asEventName)
; CWScript.Log("CWCatapultScript", self + "ProcessAnimationEvent(" + asEventName + ")")
if asEventName == aeReloaded
GoToState(ready)
elseif asEventName == aeFired
GoToState(fired)
endif
EndEvent
function TurnOn()
;allowed to fire
TurnedOn = True
;*** PUT THIS BACK IN WHEN WE HAVE ACTORS LAUNCHING ENABLED CATAPULTS
; if IsDisabled()
startSpawningCatapultStrikes()
; EndIf
EndFunction
function TurnOff(bool AndDisable = True)
;not allowed to fire
TurnedOn = False
if AndDisable == True
disable()
EndIf
((self as ObjectReference) as CWCatapultOffscreenFireControlScript).StopOffscreenFiring()
EndFunction
float function GetTimeToNextLaunch()
float timeToNextLaunch = Utility.RandomFloat(MinStrikeSpawnerTime, MaxStrikeSpawnerTime)
; CWScript.Log("CWCatapultScript", self + "GetTimeToNextLaunch() returning " + timeToNextLaunch)
Return timeToNextLaunch
EndFunction
function startSpawningCatapultStrikes()
if TurnedOn == False
; CWScript.Log("GetTimeToNextLaunch", self + "WARNING: my TurnedOn variable is false, I should NOT be calling startSpawningCatapultStrikes on myself.", 2, 1, 1)
Else
UseCWCatapultStrikeSpawners = True
((self as ObjectReference) as CWCatapultOffscreenFireControlScript).StartOffscreenFiring(GetTimeToNextLaunch())
EndIf
EndFunction
function launch()
GoToState(busy)
; CWScript.Log("CWCatapultScript", self + "launch()")
PlayAnimationAndWait(aeFire, aeLaunch)
WeaponToFire.fire(self, AmmoToFire)
EndFunction
function reload()
GoToState(busy)
; CWScript.Log("CWCatapultScript", self + "reload()")
PlayAnimation(aeReload)
EndFunction
;AIMING MENU STUFF
function showAimingMenu()
float translateSpeed = 100
Message thisMessage = CWCatapultMsgAngle
int button = thisMessage.Show()
int left = 0
int right = 1
int back = 2
int forward = 3
int face = 4
int nextMenu = 5
int log = 6
int done = 7
float offset = 1
if button == left
translateTo(X, Y, Z, GetAngleX(), GetAngleY(), GetAngleZ() - offset, translateSpeed)
elseif button == right
translateTo(X, Y, Z, GetAngleX(), GetAngleY(), GetAngleZ() + offset, translateSpeed)
elseif button == back
translateTo(X, Y, Z, GetAngleX(), GetAngleY() - offset, GetAngleZ(), translateSpeed)
elseif button == forward
translateTo(X, Y, Z, GetAngleX(), GetAngleY() + offset, GetAngleZ(), translateSpeed)
elseif button == face
translateTo(X, Y, Z, GetAngleX(), GetAngleY(), GetFacingToTarget(FaceTarget, True), translateSpeed)
elseif button == nextMenu
showPositioningMenu()
elseif button == log
logPositionAndAngle()
EndIf
if button != done
showAimingMenu()
EndIf
EndFunction
function showPositioningMenu()
float translateSpeed = 100
Message thisMessage = CWCatapultMsgPosition
int button = thisMessage.Show()
int left = 0
int right = 1
int back = 2
int forward = 3
int up = 4
int down = 5
int nextMenu = 6
int log = 7
int done = 8
float offset = 1
float xOffset
float yOffset
;NOTE: the catapult art is setup facing backwards which is why when moving left/back we add the offsets and moving right/forward we subtract the offsets
if button == left
xOffset = offset * math.cos(GetAngleZ())
yOffset = offset * -( math.sin(GetAngleZ()) )
translateTo(X + xOffset, Y + yOffset, Z, GetAngleX(), GetAngleY(), GetAngleZ(), translateSpeed)
elseif button == right
xOffset = offset * math.cos(GetAngleZ())
yOffset = offset * -( math.sin(GetAngleZ()) )
translateTo(X - xOffset, Y - yOffset, Z, GetAngleX(), GetAngleY(), GetAngleZ(), translateSpeed)
elseif button == back
xOffset = offset * math.sin(GetAngleZ())
yOffset = offset * math.cos(GetAngleZ())
translateTo(X + xOffset, Y + yOffset, Z, GetAngleX(), GetAngleY(), GetAngleZ(), translateSpeed)
elseif button == forward
xOffset = offset * math.sin(GetAngleZ())
yOffset = offset * math.cos(GetAngleZ())
translateTo(X - xOffset, Y - yOffset, Z, GetAngleX(), GetAngleY(), GetAngleZ(), translateSpeed)
elseif button == up
translateTo(X, Y, Z + offset, GetAngleX(), GetAngleY(), GetAngleZ(), translateSpeed)
elseif button == down
translateTo(X, Y, Z - offset, GetAngleX(), GetAngleY(), GetAngleZ(), translateSpeed)
elseif button == nextMenu
showAimingMenu()
elseif button == log
LogPositionAndAngle()
EndIf
if button != done
showPositioningMenu()
EndIf
EndFunction
function LogPositionAndAngle()
; CWScript.Log("CWCatapultAimingLog", self + "X: " + X + ", Y:" + Y + ", Z:" + Z + ", Angle X:" + GetAngleX() + ", Angle Y:" + GetAngleY() + ", Angle Z:" + GetAngleZ(), 1, 1)
EndFunction
float function GetFacingToTarget(ObjectReference TargetRef, bool invertFacing = False)
float deltaX = TargetRef.X - X
float deltaY = TargetRef.Y - Y
float newAngle = math.atan(deltaX/deltaY)
if TargetRef.Y < Y
newAngle += 180
EndIf
if invertFacing
if newAngle >= 180
newAngle -= 180
Else
newAngle += 180
EndIf
EndIf
return newAngle
EndFunction

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,529 +0,0 @@
Scriptname CWThreatCombatBarksScript extends Quest Conditional
ReferenceAlias Property ImperialBridge Auto
ReferenceAlias Property ImperialFence Auto
ReferenceAlias Property ImperialFenceArcher Auto
ReferenceAlias Property ImperialFenceMage Auto
ReferenceAlias Property ImperialHouse Auto
ReferenceAlias Property ImperialRock Auto
ReferenceAlias Property ImperialStables Auto
ReferenceAlias Property ImperialTower Auto
ReferenceAlias Property ImperialTowerArcher Auto
ReferenceAlias Property ImperialTowerMage Auto
ReferenceAlias Property ImperialTree Auto
ReferenceAlias Property ImperialWall Auto
ReferenceAlias Property ImperialWallArcher Auto
ReferenceAlias Property ImperialWallMage Auto
ReferenceAlias Property ImperialWindow Auto
ReferenceAlias Property ImperialWindowArcher Auto
ReferenceAlias Property ImperialWindowMage Auto
ReferenceAlias Property SonsBridge Auto
ReferenceAlias Property SonsFence Auto
ReferenceAlias Property SonsFenceArcher Auto
ReferenceAlias Property SonsFenceMage Auto
ReferenceAlias Property SonsHouse Auto
ReferenceAlias Property SonsRock Auto
ReferenceAlias Property SonsStables Auto
ReferenceAlias Property SonsTower Auto
ReferenceAlias Property SonsTowerArcher Auto
ReferenceAlias Property SonsTowerMage Auto
ReferenceAlias Property SonsTree Auto
ReferenceAlias Property SonsWall Auto
ReferenceAlias Property SonsWallArcher Auto
ReferenceAlias Property SonsWallMage Auto
ReferenceAlias Property SonsWindow Auto
ReferenceAlias Property SonsWindowArcher Auto
ReferenceAlias Property SonsWindowMage Auto
keyword Property CW1MeleeClose Auto
keyword Property CW1MeleeWide Auto
keyword Property CW1MissileClose Auto
keyword Property CW1MissileWide Auto
keyword Property CW2MeleeClose Auto
keyword Property CW2MeleeWide Auto
keyword Property CW2MissileClose Auto
keyword Property CW2MissileWide Auto
keyword Property CW3MeleeClose Auto
keyword Property CW3MeleeWide Auto
keyword Property CW3MissileClose Auto
keyword Property CW3MissileWide Auto
keyword Property CW4MeleeClose Auto
keyword Property CW4MeleeWide Auto
keyword Property CW4MissileClose Auto
keyword Property CW4MissileWide Auto
keyword Property CW5MeleeClose Auto
keyword Property CW5MeleeWide Auto
keyword Property CW5MissileClose Auto
keyword Property CW5MissileWide Auto
;CWThreatBridgeImperial
;CWThreatBridgeSons
;CWThreatFenceImperial
;CWThreatFenceImperialArcher
;CWThreatFenceImperialMage
;CWThreatFenceSons
;CWThreatFenceSonsArcher
;CWThreatFenceSonsMage
;CWThreatHouseImperial
;CWThreatHouseSons
;CWThreatRockImperial
;CWThreatRockSons
;CWThreatStablesImperial
;CWThreatStablesSons
;CWThreatTowerImperial
;CWThreatTowerImperialArcher
;CWThreatTowerImperialMage
;CWThreatTowerSons
;CWThreatTowerSonsArcher
;CWThreatTowerSonsMage
;CWThreatTreeImperial
;CWThreatTreeSons
;CWThreatWallImperial
;CWThreatWallImperialArcher
;CWThreatWallImperialMage
;CWThreatWallSons
;CWThreatWallSonsArcher
;CWThreatWallSonsMage
;CWThreatWindowImperial
;CWThreatWindowImperialArcher
;CWThreatWindowImperialMage
;CWThreatWindowSons
;CWThreatWindowSonsArcher
;CWThreatWindowSonsMage
CWScript Property CWs Auto
{BASE OBJECT - pointer to CWScript on CW quest}
int BattlePhaseToStopBarking = 6 ;once we are in phase 6, we should stop taunting using the combat barks - stage 6 occurs in stage 50 of CWSiege
Function ProcessTriggerActor(Actor TriggerActor, float BattlePhase, bool Bridge = false, bool Fence = false, bool House = false, bool Rock = false, bool Stables = false, bool Tower = false, bool Tree = false, bool Wall = false, bool Window = false)
{Trigger calls this function, passing in it's reference. We decide what do to with it.}
;***
;debug.StartStackProfiling()
; CWScript.Log("CWThreatCombatBarksScript", self + "ProcessTriggerActor(" + TriggerActor + ", BattlePhase:" + BattlePhase + ")")
if BattlePhase >= BattlePhaseToStopBarking
; CWScript.Log("CWThreatCombatBarksScript", self + "ProcessTriggerActor() BattlePhase[" + BattlePhase + "] => BattlePhaseToStopBarking[" + BattlePhaseToStopBarking + "], returning without processing trigger actor.")
return
EndIf
ReferenceAlias FactionTypeAlias
ReferenceAlias FactionTypeRoleAlias
GlobalVariable FactionTypeGlobal
GlobalVariable FactionTypeRoleGlobal
int ActorAllegiance = CWs.GetActorAllgeiance(TriggerActor)
if ActorAllegiance == CWs.iImperials
if Bridge
FactionTypeAlias = ImperialBridge
FactionTypeGlobal = CWs.CWThreatBridgeImperial
ElseIf Fence
FactionTypeAlias = ImperialFence
FactionTypeGlobal = CWs.CWThreatFenceImperial
FactionTypeRoleAlias = determineRoleAlias(TriggerActor, BattlePhase, ImperialFenceArcher, ImperialFenceMage)
FactionTypeRoleGlobal = determineRoleGlobal(TriggerActor, BattlePhase, CWs.CWThreatFenceImperialArcher, CWs.CWThreatFenceImperialMage)
ElseIf House
FactionTypeAlias = ImperialHouse
FactionTypeGlobal = CWs.CWThreatHouseImperial
ElseIf Rock
FactionTypeAlias = ImperialRock
FactionTypeGlobal = CWs.CWThreatRockImperial
ElseIf Stables
FactionTypeAlias = ImperialStables
FactionTypeGlobal = CWs.CWThreatStablesImperial
ElseIf Tower
FactionTypeAlias = ImperialTower
FactionTypeGlobal = CWs.CWThreatTowerImperial
FactionTypeRoleAlias = determineRoleAlias(TriggerActor, BattlePhase, ImperialTowerArcher, ImperialTowerMage)
FactionTypeRoleGlobal = determineRoleGlobal(TriggerActor, BattlePhase, CWs.CWThreatTowerImperialArcher, CWs.CWThreatTowerImperialMage)
ElseIf Tree
FactionTypeAlias = ImperialTree
FactionTypeGlobal = CWs.CWThreatTreeImperial
ElseIf Wall
FactionTypeAlias = ImperialWall
FactionTypeGlobal = CWs.CWThreatWallImperial
FactionTypeRoleAlias = determineRoleAlias(TriggerActor, BattlePhase, ImperialWallArcher, ImperialWallMage)
FactionTypeRoleGlobal = determineRoleGlobal(TriggerActor, BattlePhase, CWs.CWThreatWallImperialArcher, CWs.CWThreatWallImperialMage)
ElseIf Window
FactionTypeAlias = ImperialWindow
FactionTypeGlobal = CWs.CWThreatWindowImperial
FactionTypeRoleAlias = determineRoleAlias(TriggerActor, BattlePhase, ImperialWindowArcher, ImperialWindowMage)
FactionTypeRoleGlobal = determineRoleGlobal(TriggerActor, BattlePhase, CWs.CWThreatWindowImperialArcher, CWs.CWThreatWindowImperialMage)
EndIf
elseif ActorAllegiance == CWs.iSons
if Bridge
FactionTypeAlias = SonsBridge
FactionTypeGlobal = CWs.CWThreatBridgeSons
ElseIf Fence
FactionTypeAlias = SonsFence
FactionTypeGlobal = CWs.CWThreatFenceSons
FactionTypeRoleAlias = determineRoleAlias(TriggerActor, BattlePhase, SonsFenceArcher, SonsFenceMage)
FactionTypeRoleGlobal = determineRoleGlobal(TriggerActor, BattlePhase, CWs.CWThreatFenceSonsArcher, CWs.CWThreatFenceSonsMage)
ElseIf House
FactionTypeAlias = SonsHouse
FactionTypeGlobal = CWs.CWThreatHouseSons
ElseIf Rock
FactionTypeAlias = SonsRock
FactionTypeGlobal = CWs.CWThreatRockSons
ElseIf Stables
FactionTypeAlias = SonsStables
FactionTypeGlobal = CWs.CWThreatStablesSons
ElseIf Tower
FactionTypeAlias = SonsTower
FactionTypeGlobal = CWs.CWThreatTowerSons
FactionTypeRoleAlias = determineRoleAlias(TriggerActor, BattlePhase, SonsTowerArcher, SonsTowerMage)
FactionTypeRoleGlobal = determineRoleGlobal(TriggerActor, BattlePhase, CWs.CWThreatTowerSonsArcher, CWs.CWThreatTowerSonsMage)
ElseIf Tree
FactionTypeAlias = SonsTree
FactionTypeGlobal = CWs.CWThreatTreeSons
ElseIf Wall
FactionTypeAlias = SonsWall
FactionTypeGlobal = CWs.CWThreatWallSons
FactionTypeRoleAlias = determineRoleAlias(TriggerActor, BattlePhase, SonsWallArcher, SonsWallMage)
FactionTypeRoleGlobal = determineRoleGlobal(TriggerActor, BattlePhase, CWs.CWThreatWallSonsArcher, CWs.CWThreatWallSonsMage)
ElseIf Window
FactionTypeAlias = SonsWindow
FactionTypeGlobal = CWs.CWThreatWindowSons
FactionTypeRoleAlias = determineRoleAlias(TriggerActor, BattlePhase, SonsWindowArcher, SonsWindowMage)
FactionTypeRoleGlobal = determineRoleGlobal(TriggerActor, BattlePhase, CWs.CWThreatWindowSonsArcher, CWs.CWThreatWindowSonsMage)
EndIf
endif
If BattlePhase == CWs.CWBattlePhase.GetValue()
FactionTypeAlias.ForceRefTo(TriggerActor)
FactionTypeGlobal.setValue(1)
if FactionTypeRoleAlias
FactionTypeRoleAlias.ForceRefTo(TriggerActor)
FactionTypeRoleGlobal.setValue(1)
EndIf
; CWScript.Log("CWThreatCombatBarksScript", self + "ProcessTriggerActor(" + TriggerActor + ", forced into:" + FactionTypeAlias + ", AND " + FactionTypeRoleAlias + ") and the following globals were set to 1:" + FactionTypeGlobal + " AND " + FactionTypeRoleGlobal)
Else
;this took too long and we are in the wrong phase, we can't be sure this guy's role hasn't changed, dump the alias.
EndIf
;***
;debug.StopStackProfiling()
EndFunction
ReferenceAlias function determineRoleAlias(Actor ActorToCheck, Float BattlePhase, ReferenceAlias TypeArcherAlias, ReferenceAlias TypeMageAlias)
if isArcher(ActorToCheck, BattlePhase)
return TypeArcherAlias
ElseIf isMage(ActorToCheck, BattlePhase)
return TypeMageAlias
Else
return None
EndIf
EndFunction
GlobalVariable function determineRoleGlobal(Actor ActorToCheck, Float BattlePhase, GlobalVariable TypeArcherGlobal, GlobalVariable TypeMageGlobal)
if isArcher(ActorToCheck, BattlePhase)
return TypeArcherGlobal
ElseIf isMage(ActorToCheck, BattlePhase)
return TypeMageGlobal
Else
return None
EndIf
EndFunction
bool function isArcher(Actor ActorToCheck, float BattlePhase)
bool returnVal
if BattlePhase == 1 && ( ActorToCheck.GetLinkedRef(CW1MissileClose) || ActorToCheck.GetLinkedRef(CW1MissileWide) )
returnVal = True
elseif BattlePhase == 2 && ( ActorToCheck.GetLinkedRef(CW2MissileClose) || ActorToCheck.GetLinkedRef(CW2MissileWide) )
returnVal = True
elseif BattlePhase == 3 && ( ActorToCheck.GetLinkedRef(CW3MissileClose) || ActorToCheck.GetLinkedRef(CW3MissileWide) )
returnVal = True
elseif BattlePhase == 4 && ( ActorToCheck.GetLinkedRef(CW4MissileClose) || ActorToCheck.GetLinkedRef(CW4MissileWide) )
returnVal = True
elseif BattlePhase == 5 && ( ActorToCheck.GetLinkedRef(CW5MissileClose) || ActorToCheck.GetLinkedRef(CW5MissileWide) )
returnVal = True
Else
; CWScript.Log("CWThreatCombatBarksScript", self + "isArcher(" + ActorToCheck + ") didn't find a linkedRef with a CWXMissileClose/Wide keyword where X was the BattlePhase:" + BattlePhase)
EndIf
return returnVal
EndFunction
bool function isMage(Actor ActorToCheck, float BattlePhase)
;currently there are no mages
return False
EndFunction
function ClearAliasIfActorIsInIt(ReferenceAlias AliasToCheck, Actor ActorToCheck, GlobalVariable GlobalToClear)
if AliasToCheck.GetReference() == ActorToCheck
GlobalToClear.SetValue(0)
AliasToCheck.Clear()
; CWScript.Log("CWThreatCombatBarksScript", self + "ClearAliasIfActorIsInIt(" + AliasToCheck + ", " + ActorToCheck + ") actor is in alias, so cleared alias and set global to 0:" + GlobalToClear)
EndIf
EndFunction
function ProcessTriggerActorLeaving(Actor TriggerActor)
;***
;debug.StartStackProfiling()
int ActorAllegiance = CWs.GetActorAllgeiance(TriggerActor)
if ActorAllegiance == CWs.iImperials
ClearAliasIfActorIsInIt(ImperialBridge, TriggerActor, CWs.CWThreatBridgeImperial)
ClearAliasIfActorIsInIt(ImperialFence, TriggerActor, CWs.CWThreatFenceImperial)
ClearAliasIfActorIsInIt(ImperialFenceArcher, TriggerActor, CWs.CWThreatFenceImperialArcher)
ClearAliasIfActorIsInIt(ImperialFenceMage, TriggerActor, CWs.CWThreatFenceImperialMage)
ClearAliasIfActorIsInIt(ImperialHouse, TriggerActor, CWs.CWThreatHouseImperial)
ClearAliasIfActorIsInIt(ImperialRock, TriggerActor, CWs.CWThreatRockImperial)
ClearAliasIfActorIsInIt(ImperialStables, TriggerActor, CWs.CWThreatStablesImperial)
ClearAliasIfActorIsInIt(ImperialTower, TriggerActor, CWs.CWThreatTowerImperial)
ClearAliasIfActorIsInIt(ImperialTowerArcher, TriggerActor, CWs.CWThreatTowerImperialArcher)
ClearAliasIfActorIsInIt(ImperialTowerMage, TriggerActor, CWs.CWThreatTowerImperialMage)
ClearAliasIfActorIsInIt(ImperialTree, TriggerActor, CWs.CWThreatTreeImperial)
ClearAliasIfActorIsInIt(ImperialWall, TriggerActor, CWs.CWThreatWallImperial)
ClearAliasIfActorIsInIt(ImperialWallArcher, TriggerActor, CWs.CWThreatWallImperialArcher)
ClearAliasIfActorIsInIt(ImperialWallMage, TriggerActor, CWs.CWThreatWallImperialMage)
ClearAliasIfActorIsInIt(ImperialWindow, TriggerActor, CWs.CWThreatWindowImperial)
ClearAliasIfActorIsInIt(ImperialWindowArcher, TriggerActor, CWs.CWThreatWindowImperialArcher)
ClearAliasIfActorIsInIt(ImperialWindowMage, TriggerActor, CWs.CWThreatWindowImperialMage)
elseif ActorAllegiance == CWs.iSons
ClearAliasIfActorIsInIt(SonsBridge, TriggerActor, CWs.CWThreatBridgeSons)
ClearAliasIfActorIsInIt(SonsFence, TriggerActor, CWs.CWThreatFenceSons)
ClearAliasIfActorIsInIt(SonsFenceArcher, TriggerActor, CWs.CWThreatFenceSonsArcher)
ClearAliasIfActorIsInIt(SonsFenceMage, TriggerActor, CWs.CWThreatFenceSonsMage)
ClearAliasIfActorIsInIt(SonsHouse, TriggerActor, CWs.CWThreatHouseSons)
ClearAliasIfActorIsInIt(SonsRock, TriggerActor, CWs.CWThreatRockSons)
ClearAliasIfActorIsInIt(SonsStables, TriggerActor, CWs.CWThreatStablesSons)
ClearAliasIfActorIsInIt(SonsTower, TriggerActor, CWs.CWThreatTowerSons)
ClearAliasIfActorIsInIt(SonsTowerArcher, TriggerActor, CWs.CWThreatTowerSonsArcher)
ClearAliasIfActorIsInIt(SonsTowerMage, TriggerActor, CWs.CWThreatTowerSonsMage)
ClearAliasIfActorIsInIt(SonsTree, TriggerActor, CWs.CWThreatTreeSons)
ClearAliasIfActorIsInIt(SonsWall, TriggerActor, CWs.CWThreatWallSons)
ClearAliasIfActorIsInIt(SonsWallArcher, TriggerActor, CWs.CWThreatWallSonsArcher)
ClearAliasIfActorIsInIt(SonsWallMage, TriggerActor, CWs.CWThreatWallSonsMage)
ClearAliasIfActorIsInIt(SonsWindow, TriggerActor, CWs.CWThreatWindowSons)
ClearAliasIfActorIsInIt(SonsWindowArcher, TriggerActor, CWs.CWThreatWindowSonsArcher)
ClearAliasIfActorIsInIt(SonsWindowMage, TriggerActor, CWs.CWThreatWindowSonsMage)
EndIf
;***
;debug.StopStackProfiling()
EndFunction
;Called by sieges when the battle phase changes
function RegisterBattlePhaseChanged()
CWs.CWThreatBridgeImperial.SetValue(0)
CWs.CWThreatBridgeSons.SetValue(0)
CWs.CWThreatFenceImperial.SetValue(0)
CWs.CWThreatFenceImperialArcher.SetValue(0)
CWs.CWThreatFenceImperialMage.SetValue(0)
CWs.CWThreatFenceSons.SetValue(0)
CWs.CWThreatFenceSonsArcher.SetValue(0)
CWs.CWThreatFenceSonsMage.SetValue(0)
CWs.CWThreatHouseImperial.SetValue(0)
CWs.CWThreatHouseSons.SetValue(0)
CWs.CWThreatRockImperial.SetValue(0)
CWs.CWThreatRockSons.SetValue(0)
CWs.CWThreatStablesImperial.SetValue(0)
CWs.CWThreatStablesSons.SetValue(0)
CWs.CWThreatTowerImperial.SetValue(0)
CWs.CWThreatTowerImperialArcher.SetValue(0)
CWs.CWThreatTowerImperialMage.SetValue(0)
CWs.CWThreatTowerSons.SetValue(0)
CWs.CWThreatTowerSonsArcher.SetValue(0)
CWs.CWThreatTowerSonsMage.SetValue(0)
CWs.CWThreatTreeImperial.SetValue(0)
CWs.CWThreatTreeSons.SetValue(0)
CWs.CWThreatWallImperial.SetValue(0)
CWs.CWThreatWallImperialArcher.SetValue(0)
CWs.CWThreatWallImperialMage.SetValue(0)
CWs.CWThreatWallSons.SetValue(0)
CWs.CWThreatWallSonsArcher.SetValue(0)
CWs.CWThreatWallSonsMage.SetValue(0)
CWs.CWThreatWindowImperial.SetValue(0)
CWs.CWThreatWindowImperialArcher.SetValue(0)
CWs.CWThreatWindowImperialMage.SetValue(0)
CWs.CWThreatWindowSons.SetValue(0)
CWs.CWThreatWindowSonsArcher.SetValue(0)
CWs.CWThreatWindowSonsMage.SetValue(0)
ImperialBridge.clear()
ImperialFence.clear()
ImperialFenceArcher.clear()
ImperialFenceMage.clear()
ImperialHouse.clear()
ImperialRock.clear()
ImperialStables.clear()
ImperialTower.clear()
ImperialTowerArcher.clear()
ImperialTowerMage.clear()
ImperialTree.clear()
ImperialWall.clear()
ImperialWallArcher.clear()
ImperialWallMage.clear()
ImperialWindow.clear()
ImperialWindowArcher.clear()
ImperialWindowMage.clear()
SonsBridge.clear()
SonsFence.clear()
SonsFenceArcher.clear()
SonsFenceMage.clear()
SonsHouse.clear()
SonsRock.clear()
SonsStables.clear()
SonsTower.clear()
SonsTowerArcher.clear()
SonsTowerMage.clear()
SonsTree.clear()
SonsWall.clear()
SonsWallArcher.clear()
SonsWallMage.clear()
SonsWindow.clear()
SonsWindowArcher.clear()
SonsWindowMage.clear()
EndFunction