Scriptname RenContainer:RenContainerQuestScript extends Quest

Perk Property PowerArmorPerk Auto
MiscObject Property Caps001 Auto
Message Property RenContainerWontFit Auto
bool showedmessage = false

Event OnInit()
	(Game.GetPlayer() As ObjectReference).AddInventoryEventFilter(none)
	Self.RegisterForRemoteEvent(Game.GetPlayer() As ObjectReference, "OnItemAdded")
	Self.RegisterForRemoteEvent(Game.GetPlayer() As ObjectReference, "OnItemRemoved")	
	debug.notification("Registered player as container")
endEvent

Event ObjectReference.OnItemAdded(ObjectReference akSender, Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akSourceContainer)
	if ((akSender Is Actor) == true && (akSender As Actor).HasPerk(PowerArmorPerk) == true || akBaseItem == Caps001)
		return
	endif
	
	if (akItemReference == none)
		akItemReference = akBaseItem As ObjectReference
	endif
	
	int itr = aiItemCount
	
	showedmessage = false
	
	while (akItemReference.GetWidth() * itr > Game.GetPlayer().GetWidth() || akItemReference.GetLength() * itr > Game.GetPlayer().GetLength() || akItemReference.GetHeight() * itr > Game.GetPlayer().GetHeight())
		; the items won't fit!
		if (showedmessage == false)
			RenContainerWontFit.Show()
			showedmessage = true
		endif
		akItemReference.Drop(true)
		itr -= 1
	endWhile
endEvent

Event ObjectReference.OnItemRemoved(ObjectReference akSender, Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akDestContainer)
	debug.notification("Player removed " + akItemReference)
	if (akDestContainer != none && akBaseItem != Caps001)
		if ((akDestContainer Is Actor == true) && (akDestContainer As Actor).HasPerk(PowerArmorPerk) == true)
			return
		endif
		
		if (akItemReference == none)
			akItemReference = akBaseItem As ObjectReference
		endif
		
		debug.messagebox("Container dimensions: " + akDestContainer.GetWidth() + " " + akDestContainer.GetLength() + " " + akDestContainer.GetHeight() + ", object dimensions: " + akItemReference.GetWidth() + " " + akItemReference.GetLength() + " " + akItemReference.GetHeight())
		
		int itr = aiItemCount
		
		showedmessage = false		
		
		while (akItemReference.GetWidth() * itr > akDestContainer.GetWidth() || akItemReference.GetLength() * itr > akDestContainer.GetLength() || akItemReference.GetHeight() * itr > akDestContainer.GetHeight())
			; the items won't fit!
			if (showedmessage == false)
				RenContainerWontFit.Show()
				showedmessage = true
			endif
			akItemReference.Drop(true)
			itr -= 1
		endWhile
	else
		return
	endif
endEvent