Scriptname CustomVendorWorkshopObjectScript extends workshopobjectscript ;; ;; CustomVendorWorkshopObjectScript ;; ;; This script allows you to replace the default WorkshopParentScript.VendorTypes ;; containers with a custom vendor chest. ;; ;; v1.0 08/26/2017 Eldarth ;; import CommonArrayFunctions Group VendorData ObjectReference Property CustomVendorChest Auto Const EndGroup ObjectReference saveActorSpecialVendorContainerRefUnique ; -- This is called at end of AssignActor() from WorkshopObjectScript function AssignActorCustom(WorkshopNPCScript newActor) wsTrace(" AssignActorCustom: newActor=" + newActor) if (newActor) if (CustomVendorChest) wsTrace(" AssignActorCustom: CustomVendorChest=" + CustomVendorChest ) endif else ;We've beem unassigned... wsTrace(" AssignActorCustom: UnAssigned") int i = 0 while i <= self.vendorLevel newActor.SetLinkedRef(NONE, WorkshopParent.VendorContainerKeywords.GetAt(i) as Keyword) i += 1 endWhile endif endFunction ; utility function for all Workshop traces function wsTrace(string traceString, int severity = 0, bool bNormalTraceAlso = false) DebugOnly debug.traceUser("CustomVendor", " " + traceString, severity) endFunction event OnLoad() debug.OpenUserLog("CustomVendor") wsTrace(" RegisterForCustomEvent WorkshopParent.WorkshopActorAssignedToWork") RegisterForCustomEvent(WorkshopParent, "WorkshopActorAssignedToWork") EndEvent event OnUnload() wsTrace(" UnregisterForCustomEvent WorkshopParent.WorkshopActorAssignedToWork") UnregisterForCustomEvent(WorkshopParent, "WorkshopActorAssignedToWork") debug.CloseUserLog("CustomVendor") EndEvent Event WorkshopParentScript.WorkshopActorAssignedToWork(WorkshopParentScript akSender, Var[] akArgs) if (akArgs.Length == 2) WorkshopObjectScript assignedObject = akArgs[0] as WorkshopObjectScript WorkshopScript workshopRef = akArgs[1] as WorkshopScript wsTrace(" Event WorkshopParentScript.WorkshopActorAssignedToWork") if (assignedObject == self) WorkshopNPCScript assignedActor = assignedObject.GetAssignedActor() ; replace our vendor level chest with CustomVendorChest wsTrace(" linking assignedActor "+ assignedActor + " to CustomVendorChest " + CustomVendorChest + " with keyword " + WorkshopParent.VendorContainerKeywords.GetAt(self.vendorLevel) as Keyword) int i = 0 while i <= assignedObject.vendorLevel if (i == self.vendorLevel) assignedActor.SetLinkedRef(CustomVendorChest, WorkshopParent.VendorContainerKeywords.GetAt(self.vendorLevel) as Keyword) else assignedActor.SetLinkedRef(NONE, WorkshopParent.VendorContainerKeywords.GetAt(i) as Keyword) endif i += 1 endWhile else wsTrace(" assignedObject " + assignedObject + " != self " + self) endif endif EndEvent