1
Fork 0
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

529 lines
16 KiB

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