Here is an old ModBot example. I have personally never used this, and I would definitely change a lot of it. I'd want something semi-simple, yet SAFE (ie, don't delete the wrong thing). And something somewhat generic (for different levels), or at least leaving the possibility of such open in the future. If you get something working, I can also test it out with my mage and work it into one of the upcoming ModBot releases. The community will appreciate it, I am sure!
[Script-PetKit]
Commands=64
; this requires 8 events to be setup with AETarType=self cbt idle
; event names - description
; pet
; petweap - this summons the folded pack - example spell Grant Frightforged Armaments
; weapbag - this unfolds the pack - example item Folded Pack of Frightforged Plate
; petarmor - this summons the folded pack - example spell Grant Frightforged Plate
; armorbag - this unfolds the pack - example item Folded Pack of Frightforged Armaments
; petfocus - this summons the folded pack - example spell Grant Nint's Heirlooms
; focusbag - this unfolds the pack - example item Folded Pack of Nint's Heirlooms
; visor
C1=/if (!{Defined[PKPetName]}) /declare PKPetName string outer
C2=/varset PKPetName null
; if we have a pet targeted we'll equip it
C3=/if ({Spawn[{Target.ID}].Type.Equal[pet]}) /varset PKPetName {Target.CleanName}
; if no pet targeted and we have a pet we'll equip it
C4=/if ({PKPetName.Equal[null]} && {Me.Pet.ID}) /varset PKPetName {Me.Pet.CleanName}
; if no pet targeted and no pet of our own make one
C5=/if (!{Me.Pet.ID}) /call CastCall {Me.CleanName} ''cast pet''
C6=/if (!{Me.Pet.ID}) /delay 3s
; if no pet defined yet set the var to the new pet
C7=/if ({PKPetName.Equal[null]} && {Me.Pet.ID}) /varset PKPetName {Me.Pet.CleanName}
; if still no pet let them know and exit
C8=/if ({PKPetName.Equal[null]}) /bc Unable to find a pet to equip
C9=/if ({PKPetName.Equal[null]}) /return
; check for an empty inventory slot
C10=/bc equipping {PKPetName}
; need to check for empty inventory slot
; /if (!${InvSlot[23 - 32].Item.ID}) - updated to check 10 slots
C11=/if (!{Defined[EmptySlot]}) /declare EmptySlot string outer false
C12=/if (!{InvSlot[23].Item.ID}) /varset EmptySlot true
C13=/if (!{InvSlot[24].Item.ID}) /varset EmptySlot true
C14=/if (!{InvSlot[25].Item.ID}) /varset EmptySlot true
C15=/if (!{InvSlot[26].Item.ID}) /varset EmptySlot true
C16=/if (!{InvSlot[27].Item.ID}) /varset EmptySlot true
C17=/if (!{InvSlot[28].Item.ID}) /varset EmptySlot true
C18=/if (!{InvSlot[29].Item.ID}) /varset EmptySlot true
C19=/if (!{InvSlot[30].Item.ID}) /varset EmptySlot true
C20=/if (!{InvSlot[31].Item.ID}) /varset EmptySlot true
C21=/if (!{InvSlot[32].Item.ID}) /varset EmptySlot true
C22=/if ({{EmptySlot.Equal[false]}) /bc no empty slots, sorry no pet kit right now.
C23=/if ({{EmptySlot.Equal[false]}) /return 0
; Allow for more than 30 seconds by setting the timer to 10 minutes
C24=/varset Timer 10m
; summon the pet armor
C25=/bc giving pet armor
C26=/call CastCall {Me.CleanName} ''cast petarmor''
C27=/multiline ; /delay 1s ; /autoinventory ; /delay 1s
; unfold the armorbag
C28=/call CastCall {Me.CleanName} ''cast armorbag''
C29=/multiline ; /delay 1s ; /autoinventory ; /delay 1s
; hand armor to pet
; adjust the armor below to match those summoned in the bag
C30=/call GiveCheck {PKPetName} ''Frightforged Plate Helm|Frightforged Plate Breastplate|Frightforged Plate Bracers|Summoned: Frightforged Belt''
C31=/call GiveCheck {PKPetName} ''Frightforged Plate Vambraces|Frightforged Plate Gauntlets|Frightforged Plate Greaves|Frightforged Plate Boots''
; delete the Phantom Satchel
; **DANGER** if you are using any Phantom Satchels to store items this could be disastrous
C32=/nomodkey /itemnotify {FindItem[Phantom Satchel].InvSlot} leftmouseup
C33=/delay 5
C34=/if ({Cursor.Name.Equal[Phantom Satchel]}) /destroy
C35=/echo destroyed Phantom Satchel
C36=/delay 1s
;summon the pet weapons
C37=/echo giving pet weapons
C38=/call CastCall {Me.CleanName} ''cast petweap''
C39=/multiline ; /delay 1s ; /autoinventory ; /delay 1s
; unfold the weapbag
C40=/call CastCall {Me.CleanName} ''cast weapbag''
C41=/multiline ; /delay 1s ; /autoinventory ; /delay 1s
; hand weapon to pet
; adjust the weapons below to match those summoned in the bag
C42=/call GiveCheck {PKPetName} ''Summoned: Frightforged Iceblade|Summoned: Frightforged Iceblade''
; delete the Pouch of Quellious
; **DANGER** if you are using any Pouch of Quellious' to store items this could be disastrous
C43=/nomodkey /itemnotify {FindItem[Pouch of Quellious].InvSlot} leftmouseup
C44=/delay 5
C45=/if ({Cursor.Name.Equal[Pouch of Quellious]}) /destroy
C46=/echo destroyed Pouch of Quellious
C47=/delay 1s
; summon pet focus items
C48=/bc giving pet focus items
C49=/call CastCall {Me.CleanName} ''cast petfocus''
C50=/multiline ; /delay 1s ; /autoinventory ; /delay 1s
; unfold the focusbag
C51=/call CastCall {Me.CleanName} ''cast focusbag''
C52=/multiline ; /delay 1s ; /autoinventory ; /delay 1s
; hand focus items to pet
; adjust the focus items below to match those summoned in the bag
C53=/call GiveCheck {PKPetName} ''Nint's Linked Bracelet|Nint's Jade Bracelet|Nint's Ridged Earhoop|Nint's Gold Ring''
C54=/call GiveCheck {PKPetName} ''Nint's Woven Shawl|Nint's Satin Choker''
; delete the Phantom Satchel
; **DANGER** if you are using any Phantom Satchels to store items this could be disastrous
C55=/nomodkey /itemnotify {FindItem[Phantom Satchel].InvSlot} leftmouseup
C56=/delay 5
C57=/if ({Cursor.Name.Equal[Phantom Satchel]}) /destroy
C58=/echo destroyed Phantom Satchel
C59=/delay 1s
; summon the visor
C60=/echo giving pet visor
C61=/call CastCall {Me.CleanName} ''cast visor''
C62=/multiline ; /delay 1s ; /autoinventory ; /delay 1s
; hand the visor to pet
; adjust the below to match summoned visor
C63=/call GiveCheck {PKPetName} ''Summoned: Visor of Gobeker''
C64=/bc pet {PKPetName} ready for battle!