Difference between revisions of "DropAllItems"

852 bytes added ,  04:02, 4 July 2007
Cleared some things up
imported>Haama
(Added warning about using OBSE's loops)
imported>Haama
(Cleared some things up)
Line 1: Line 1:
scn DropAllItemsQuestScript
Make a quest called DropAllItems, and attach this script to it
<pre>scn DropAllItemsQuestScript
   
   
short DropAllItems
short DropAllItems
ref ActorRef
ref ActorRef
ref CurObj
ref CurObj
short CurObjNum
short CurObjNum
float fquestdelaytime
float fquestdelaytime
   
   
   
   
begin GameMode
begin GameMode
set fquestdelaytime to 0.001
  set fquestdelaytime to 0.001
 
if ActorRef && DropAllItems == 1
  if DropAllItems
if ActorRef.GetNumItems > 0  
    if ActorRef
set CurObj to ActorRef.GetInventoryObject (ActorRef.GetNumItems - 1)
      if ActorRef.GetNumItems > 0
set CurObjNum to ActorRef.GetItemCount CurObj
        set CurObj to ActorRef.GetInventoryObject (ActorRef.GetNumItems - 1)
ActorRef.Drop CurObj CurObjNum
        set CurObjNum to ActorRef.GetItemCount CurObj
ActorRef.RemoveItem CurObj CurObjNum
        ActorRef.Drop CurObj CurObjNum
endif
        ActorRef.RemoveItem CurObj CurObjNum
if ActorRef.GetNumItems == 0
      else
set DropAllItems to 0
        set DropAllItems to 0
endif
      endif
endif
    endif
end
  endif
end</pre>
Whenever you want an actor to drop all of their items, use these lines in the calling script
<pre>set DropAllItems.ActorRef to Actor
set DropAllItems.DropAllItems to 1</pre>


make this a quest script, attach it to a quest named DropAllItems. In your script
Note that using OBSE's loop functions may result in a crash. See [[:Category:OBSE_Flow_Control_Functions|this link]] for more information.


scn MyScript
Also, dropping quest items from the player will probably be bad, so here's a more complex script to ensure that doesn't happen
<pre>scn DropAllItemsQuestScript
   
   
ref actor
short DropAllItems
ref ActorRef
ref CurObj
short CurObjNum
float fquestdelaytime
short InvPosition
   
   
  begin onActivate
   
set Actor to GetActionRef
begin GameMode
messageBox "Good job dropping everything."
  set fquestdelaytime to 0.001
set DropAllItems.ActorRef to Actor
 
set DropAllItems.DropAllItems to 1
  if (DropAllItems == 1)
end
    set DropAllItems to 2
 
    set InvPosition to 0
Note that using OBSE's loop functions may result in a crash. See [[:Category:OBSE_Flow_Control_Functions|this link]] for more information.
  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
          ActorRef.RemoveItem CurObj CurObjNum
        endif
        set InvPosition to (InvPosition + 1)
      else
        set DropAllItems to 0
      endif
    endif
  endif
end</pre>
Anonymous user