Scriptname DefaultAliasModAggression extends ReferenceAlias  
{Script used to temporarily mod an actor's aggression. You will need to call a ModAggression() and ResetAggression() to mod and unmod it.}

;jduvall owns. Discuss changes with him first. Thanks :)

int Property MinAggression = 1 auto
{Default: 1, set both MinAggression and MaxAggresion to the same number to temporarily force it to be that number regardless of where it currently is.}
	
int Property MaxAggression = 2 Auto
{Default: 2, set both MinAggression and MaxAggresion to the same number to temporarily force it to be that number regardless of where it currently is.}

bool Property ModOnlyOnce = True Auto
{Default: true, only allow modding and unmodding once.}

int startingAggression
int currentAggression
bool Modded
bool Unmodded

Event OnInit()
	if MinAggression > MaxAggression
; 			debug.trace(self + " WARNING: OnInit() MinAggression > MaxAggression. Setting MinAggression to MaxAggression:" + MaxAggression, 2)
		MinAggression = MaxAggression
	EndIf

EndEvent

function ModAggression()
	if ModOnlyOnce && Modded
; 		debug.trace(self + "ModAggression() Already modded Actors's (" + ActorRef + ")aggression. Ignoring additional call.", 1)
		return
	EndIf

	Modded = True

	actor ActorRef = GetActorReference()

	startingAggression = ActorRef.GetActorValue("Aggression") as Int
	
	currentAggression = startingAggression	
	
	If currentAggression < MinAggression
	  currentAggression = MinAggression
	Elseif currentAggression > MaxAggression
	  currentAggression = MaxAggression
	EndIf

	
; 	debug.trace(self + "ModAggression() setting actor's (" + ActorRef + ")aggression to " + currentAggression)
	ActorRef.SetActorValue("Aggression", currentAggression)
	
	
EndFunction

function ResetAggression()
	
	if Modded == False
; 		debug.trace(self + "ResetAggression() Has not previously called ModAggression(). So ignoring call to reset it.")
		Return
	EndIf
	
	if ModOnlyOnce && Unmodded
; 		debug.trace(self + "ResetAggression() Already reset Actors's (" + ActorRef + ")aggression. Ignoring additional call.")
		return
	EndIf

	unmodded = True
	
	Actor ActorRef = GetActorReference()
	int actualAggression = ActorRef.GetActorValue("Aggression") as Int

	if currentAggression != actualAggression
; 		debug.trace(self + " WARNING: ResetAggression() sees that the actor's[" + ActorRef + "] actual Aggression at this moment[" + actualAggression +  "] is different to the aggression we modded it to[" + currentAggression + "] we are going to set it back to what we found it at before we modded it [" + startingAggression + "]. This could result in unexpected results, but assuming its better than the alternative.", 2)
	EndIf
	
; 	debug.trace(self + "ModAggression() setting actor's (" + ActorRef + ")aggression to back to it's original value " + startingAggression)
	ActorRef.SetActorValue("Aggression", startingAggression)

EndFunction