Difference between revisions of "DropAllItems"

From the Oblivion ConstructionSet Wiki
Jump to navigation Jump to search
imported>Haama
(Cleared some things up)
imported>Haama
(Fixed the bottom script)
 
(4 intermediate revisions by 2 users not shown)
Line 14: Line 14:
   if DropAllItems
   if DropAllItems
     if ActorRef
     if ActorRef
       if ActorRef.GetNumItems > 0
       set CurObj to ActorRef.GetInventoryObject 0
        set CurObj to ActorRef.GetInventoryObject (ActorRef.GetNumItems - 1)
      if CurObj
         set CurObjNum to ActorRef.GetItemCount CurObj
         set CurObjNum to ActorRef.GetItemCount CurObj
         ActorRef.Drop CurObj CurObjNum
         ActorRef.Drop CurObj CurObjNum
        ActorRef.RemoveItem CurObj CurObjNum
       else
       else
         set DropAllItems to 0
         set DropAllItems to 0
Line 55: Line 54:
           set CurObjNum to (ActorRef.GetItemCount CurObj)
           set CurObjNum to (ActorRef.GetItemCount CurObj)
           ActorRef.Drop CurObj CurObjNum
           ActorRef.Drop CurObj CurObjNum
           ActorRef.RemoveItem CurObj CurObjNum
        else
           set InvPosition to (InvPosition + 1)
         endif
         endif
        set InvPosition to (InvPosition + 1)
       else
       else
         set DropAllItems to 0
         set DropAllItems to 0
Line 64: Line 63:
   endif
   endif
end</pre>
end</pre>
[[Category: Useful Code]]

Latest revision as of 11:59, 7 March 2008

Make a quest called DropAllItems, and attach this script to it

scn DropAllItemsQuestScript
 
short DropAllItems
ref ActorRef
ref CurObj
short CurObjNum
float fquestdelaytime
 
 
begin GameMode
  set fquestdelaytime to 0.001
  
  if DropAllItems
    if ActorRef
      set CurObj to ActorRef.GetInventoryObject 0
      if CurObj
        set CurObjNum to ActorRef.GetItemCount CurObj
        ActorRef.Drop CurObj CurObjNum
      else
        set DropAllItems to 0
      endif
    endif
  endif
end

Whenever you want an actor to drop all of their items, use these lines in the calling script

set DropAllItems.ActorRef to Actor
set DropAllItems.DropAllItems to 1

Note that using OBSE's loop functions may result in a crash. See this link for more information.

Also, dropping quest items from the player will probably be bad, so here's a more complex script to ensure that doesn't happen

scn DropAllItemsQuestScript
 
short DropAllItems
ref ActorRef
ref CurObj
short CurObjNum
float fquestdelaytime
short InvPosition
 
 
begin GameMode
  set fquestdelaytime to 0.001
  
  if (DropAllItems == 1)
    set DropAllItems to 2
    set InvPosition to 0
  elseif (DropAllItems == 2)
    if ActorRef
      set CurObj to (ActorRef.GetInventoryObject InvPosition)
      if CurObj
        if (IsQuestItem CurObj == 0) || (ActorRef != player)
          set CurObjNum to (ActorRef.GetItemCount CurObj)
          ActorRef.Drop CurObj CurObjNum
        else
          set InvPosition to (InvPosition + 1)
        endif
      else
        set DropAllItems to 0
      endif
    endif
  endif
end