Scriptname RenCrimeSMCGQuestScript extends Quest  

import Game
import Spell

ObjectReference Property RenCrimeGuardRing Auto  
ObjectReference Property RenCrimeCivilianRing Auto

Cell Property prevplayercell Auto

Armor Property RenGuardRing Auto
Armor Property RenCivilianRing Auto

int playercrimegold
int prevplayercrimegold

Faction Property currentcrimefaction Auto
Faction Property nullcrimefaction Auto

Race Property actorrace Auto

Race Property horserace Auto
Race Property dograce Auto

Race Property ArgonianRace Auto
Race Property ElderRace Auto
Race Property BretonRace Auto
Race Property DarkElfRace Auto
Race Property HighElfRace Auto
Race Property ImperialRace Auto
Race Property KhajiitRace Auto
Race Property NordRace Auto
Race Property OrcRace Auto
Race Property RedguardRace Auto

ReferenceAlias Property RenGuardFollowRef  Auto

ReferenceAlias Property RenGuardArresteeRef  Auto
ReferenceAlias Property RenGuardArrestingRef  Auto

ReferenceAlias Property RenNPCFollowPlayerRef Auto

ReferenceAlias Property RenBeggarStealRef Auto
ReferenceAlias Property RenCriminalRef Auto

LocationAlias Property RenGuardClosestJailLocRef Auto

bool Property guardfollowingplayer Auto

int x = 0
int add = 0

bool do_once = false

bool override = false

float distance_report_area = 800.0

int Property debuglevel Auto

bool Property keepcrimereporton Auto

int Property guardsthatcanseeplayer Auto
int  Property civiliansthatcanseeplayer Auto

FormList Property RenGuardFormlist Auto

Spell Property RenCrimeGuardSpell Auto
Spell Property RenCrimeCivilianSpell Auto

int iIndex = 0

SPELL Property RenCrimeAOESpellSelf  Auto  

Actor Property GuardActor Auto
Actor Property CivilianActor Auto

float Property aoetimer Auto

RenCrimeConfigQuestScript Property RenCrimeConfig Auto

float Property crimetimer Auto

Quest Property DGIntimidateQuestRef Auto

Actor Property PlayerRef Auto

Quest Property JailQuest Auto

Armor Property RenCrimeMagicPrisonerCuffsPlayer Auto

Perk Property RenCrimeMagicDrainPerk Auto
Perk Property RenCrimeDetectItemPerk Auto

Formlist Property CurrentCellOwners Auto

ObjectReference Function RenDropObject(Actor targetactor, ObjectReference objitem) global

	Container RenItemBox = Game.GetFormFromFile(0x01025dfa, "ReneersCrimeOverhaul.esp") As Container

	ObjectReference box = targetactor.PlaceAtMe(RenItemBox)
	targetactor.RemoveItem(objitem, 1, true, box)
	ObjectReference droppedobj = box.DropObject(objitem)
	box.Disable()
	box.DeleteWhenAble()
	return droppedobj

endFunction

bool Function RenCheckObjStolen(Actor targetactor, ObjectReference objitem) global

	if (objitem != none && targetactor != none)
		ActorBase objactbase = objitem.GetActorOwner()
		Faction objfaction = objitem.GetFactionOwner()
		if ((objactbase != none && objactbase == targetactor.GetActorBase()) || (objfaction != none && targetactor.IsInFaction(objfaction) == true))
			; not stealing
			return false
		endif
		return true
	endif

	return false
	
endFunction

Event OnInit()

	RegisterForSingleUpdate(0.5)
	
	do_once = false
	
	if (RenCrimeAOESpellSelf != None)
		if (RenCrimeAOESpellSelf.GetFormID() != 0)
			RenCrimeAOESpellSelf.Cast(PlayerRef, PlayerRef)
		endif
	endif
	
endEvent

Event OnCellLoad()
	
	if (RenCrimeAOESpellSelf != None)
		if (RenCrimeAOESpellSelf.GetFormID() != 0)
			RenCrimeAOESpellSelf.Cast(PlayerRef, PlayerRef)
		endif
	endif
	
	playercrimegold = 0
	prevplayercrimegold = 0
	
endEvent

Event OnUpdate()
	
	if (PlayerRef.IsInInterior() == false)
		CurrentCellOwners.Revert()
	endif
	
	if (override == true)
		SetPlayerReportCrime(true)
		RegisterForSingleUpdate(0.5)		
		return
	endif
	
	if (prevplayercell != PlayerRef.GetParentCell())
		if (RenCrimeAOESpellSelf != None)
			if (RenCrimeAOESpellSelf.GetFormID() != 0)
				RenCrimeAOESpellSelf.Cast(PlayerRef, PlayerRef)
			endif
		endif
	endif
	
	if (aoetimer < 0.0)
		aoetimer = 0.0
	endif	
	
	aoetimer += 0.5
		
	if (aoetimer >= 5.0 && RenCrimeAOESpellSelf != None)
		if (RenCrimeAOESpellSelf.GetFormID() != 0 && DGIntimidateQuestRef.IsRunning() == 0)
			RenCrimeAOESpellSelf.Cast(PlayerRef, PlayerRef)
			if (debuglevel > 0)
				Debug.Notification("Casted the AOE spell using the timer...")
			endif
		endif
		aoetimer = 0.0		
	endif
	
	if (do_once == false)
		do_once = true
		RegisterForSingleUpdate(0.5)
	endif
	
	if (currentcrimefaction != None)
		if (currentcrimefaction.GetFormID() != 0)
			playercrimegold = currentcrimefaction.GetCrimeGold()
		endif
	endif
	
	if playercrimegold > prevplayercrimegold && currentcrimefaction != None
		if currentcrimefaction.GetFormID() != 0
		
			int golddifference = playercrimegold - prevplayercrimegold
		
			; player committed a crime
		
			crimetimer = Utility.GetCurrentRealTime() + 5
		
			if (debuglevel > 0)
				Debug.Notification("Player Committed a crime for " + golddifference + "...")
			endif
			
		endif
		
	endif
	
	if (currentcrimefaction != None)
		if (currentcrimefaction.GetFormID() != 0)
			prevplayercrimegold = currentcrimefaction.GetCrimeGold()
		endif
	endif
	
	x = 0
		
	int check = 0		
		
	if (guardsthatcanseeplayer > 0 || civiliansthatcanseeplayer > 0)
		
		keepcrimereporton = true
		
	endif
	
	if (guardsthatcanseeplayer <= 0 && civiliansthatcanseeplayer <= 0)
		keepcrimereporton = false
	endif
	
	x = 0
	
	if (Utility.IsInMenuMode())
		SetPlayerReportCrime(true)
	else
		SetPlayerReportCrime(keepcrimereporton)
	endif		
	
	if keepcrimereporton == true
		if (debuglevel > 0 && prevkeepcrimereporton == false)
			Debug.Notification("Turned on crime reporting on player...")
		endif
	else
		if (debuglevel > 0 && prevkeepcrimereporton == true)
			Debug.Notification("Turned off crime reporting on player...")
		endif
	endif	
	
	bool prevkeepcrimereporton = keepcrimereporton
	
	prevplayercell = PlayerRef.GetParentCell()
	
	if (JailQuest.IsRunning() == true)
		if (PlayerRef.GetItemCount(RenCrimeMagicPrisonerCuffsPlayer) <= 0)
			PlayerRef.AddItem(RenCrimeMagicPrisonerCuffsPlayer, 1)
		endif
		PlayerRef.EquipItem(RenCrimeMagicPrisonerCuffsPlayer, true, false)		
		if (PlayerRef.HasPerk(RenCrimeMagicDrainPerk) == false)
			PlayerRef.AddPerk(RenCrimeMagicDrainPerk)
		endif
	else
		if (PlayerRef.IsEquipped(RenCrimeMagicPrisonerCuffsPlayer) == true || PlayerRef.GetItemCount(RenCrimeMagicPrisonerCuffsPlayer) > 0)
			PlayerRef.UnequipItem(RenCrimeMagicPrisonerCuffsPlayer)
			PlayerRef.RemoveItem(RenCrimeMagicPrisonerCuffsPlayer, 1)
		endif
		if (PlayerRef.HasPerk(RenCrimeMagicDrainPerk) == true)
			PlayerRef.RemovePerk(RenCrimeMagicDrainPerk)
		endif		
	endif
	
	if (PlayerRef.HasPerk(RenCrimeDetectItemPerk) == false)
		PlayerRef.AddPerk(RenCrimeDetectItemPerk)
	endif
	
	RegisterForSingleUpdate(0.5)
	
endEvent
