Changed folder name.
Changed folder name.
This commit is contained in:
306
_module/nss/ac_ibag.nss
Normal file
306
_module/nss/ac_ibag.nss
Normal file
@@ -0,0 +1,306 @@
|
||||
//Script Name: ac_ibag
|
||||
//////////////////////////////////////////
|
||||
//Created by: Genisys / Guile
|
||||
//ON: 6/17/08
|
||||
/////////////////////////////////////////
|
||||
/* **Notes**
|
||||
This is the OnActivate Item Script for
|
||||
the item tagnamed ibag, which will allow
|
||||
the PC to move undroppable items around
|
||||
in thier inventory, and it can also
|
||||
bag all such items as well.
|
||||
*/
|
||||
////////////////////////////////////////
|
||||
//Required Include
|
||||
#include "x2_inc_switches"
|
||||
///////////////////////////////////////
|
||||
//PROTOTYPES DECLARED
|
||||
int GetNum(object oTarget);
|
||||
void GiveBack(object oTarget);
|
||||
void StoreItem(object oStored);
|
||||
void SortContainer(object oTarget);
|
||||
void SortBox(object oTarget);
|
||||
///////////////////////////////////////
|
||||
|
||||
//Main Script
|
||||
void main()
|
||||
{
|
||||
// Check if we have the correct event firing the script
|
||||
if (GetUserDefinedItemEventNumber() != X2_ITEM_EVENT_ACTIVATE) return;
|
||||
|
||||
//Major Variables Defined...
|
||||
object oPC = GetItemActivator();
|
||||
object oTarget = GetItemActivatedTarget();
|
||||
object oBox = GetObjectByTag("ibagbox");
|
||||
object oBox2 = GetObjectByTag("ibag2box");
|
||||
|
||||
|
||||
//If the PC Is targeting themself Do this..
|
||||
if(oTarget==oPC)
|
||||
{
|
||||
|
||||
if(GetLocalInt(GetModule(), "INVUSE")==1)
|
||||
{
|
||||
FloatingTextStringOnCreature("This system is busy, try again later", oPC, FALSE);
|
||||
//Stop the script here!
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
//This is a fix to Module Event Scripts (Prevents them from firing on PC)
|
||||
SetLocalInt(GetModule(), "INVUSE", 1);
|
||||
//Allow the system to be useable again after some time..
|
||||
DelayCommand(24.1, SetLocalInt(GetModule(), "INVUSE", 0));
|
||||
}
|
||||
|
||||
object oMine = GetFirstItemInInventory(oPC);
|
||||
while(GetIsObjectValid(oMine))
|
||||
{
|
||||
//If the item is Undroppable!
|
||||
if(GetItemCursedFlag(oMine))
|
||||
{
|
||||
//Don't take bags!
|
||||
if(!GetHasInventory(oMine))
|
||||
{
|
||||
DelayCommand(1.0, AssignCommand(oBox, ActionTakeItem(oMine, oPC)));
|
||||
}
|
||||
}
|
||||
|
||||
oMine = GetNextItemInInventory(oPC);
|
||||
}
|
||||
|
||||
//Give the loop time to get all the items!
|
||||
DelayCommand(6.0, SortBox(oBox));
|
||||
|
||||
//Run this again to make sure we get all of the items!
|
||||
DelayCommand(12.0, SortBox(oBox));
|
||||
|
||||
//Run this again to make sure we get all of the items!
|
||||
DelayCommand(18.0, SortBox(oBox));
|
||||
|
||||
//Finally return all items in the box to the PC. (If any remain.)
|
||||
DelayCommand(24.0, GiveBack(oBox));
|
||||
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
//CONDITIONALS
|
||||
|
||||
//Otherwise if they are not targeting themself, do this..
|
||||
else
|
||||
{
|
||||
//Tell the PC they can only target items..
|
||||
if(GetObjectType(oTarget)!= OBJECT_TYPE_ITEM)
|
||||
{
|
||||
FloatingTextStringOnCreature("You must target an item!", oPC, FALSE);
|
||||
return;
|
||||
}
|
||||
//Tell the PC they must target items in their inventory only!
|
||||
if(GetItemPossessor(oTarget)!=oPC)
|
||||
{
|
||||
FloatingTextStringOnCreature("You must target an item in your inventory!", oPC, FALSE);
|
||||
return;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//If they have passed the conditionals, let's continue..
|
||||
|
||||
//If the pc targets the Special Bag (there are 2 different ones!)
|
||||
//Then remove it's content and place it in the PC's inventory!
|
||||
if(GetTag(oTarget)=="ibagboxbag" || GetTag(oTarget)=="plotbag")
|
||||
{
|
||||
object oContent = GetFirstItemInInventory(oTarget);
|
||||
while(GetIsObjectValid(oContent)==TRUE)
|
||||
{
|
||||
//Put the items in the bag in the ibagbox
|
||||
AssignCommand(oBox, ActionTakeItem(oContent, oTarget));
|
||||
|
||||
//Move on to the next item after taking this one.
|
||||
oContent = GetNextItemInInventory(oTarget);
|
||||
//While loop end
|
||||
}
|
||||
|
||||
//Return the items!
|
||||
DelayCommand(1.7, GiveBack(oBox));
|
||||
//Destroy the bag now..
|
||||
DelayCommand(2.0, DestroyObject(oTarget,0.0f));
|
||||
//Stop here
|
||||
return;
|
||||
|
||||
//If statement end
|
||||
}
|
||||
|
||||
//Another Conditional (If they are not targeting a special bag)
|
||||
//Tell the PC they can't target non-plot containers
|
||||
if(GetHasInventory(oTarget))
|
||||
{
|
||||
FloatingTextStringOnCreature("You must target the Special Items Bag!", oPC, FALSE);
|
||||
return;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//If the player is targeting just 1 Undroppable Item
|
||||
|
||||
//Let's make sure it's UnDroppable!
|
||||
if(GetItemCursedFlag(oTarget)==FALSE)
|
||||
{
|
||||
//Tell the PC the item must be undroppable & plot!
|
||||
FloatingTextStringOnCreature("You must target an undroppable item only!", oPC, FALSE);
|
||||
//Stop the script here!
|
||||
return;
|
||||
}
|
||||
|
||||
//If they don't have a special bag give them one
|
||||
if(GetItemPossessedBy(oPC, "itoolbag")==OBJECT_INVALID)
|
||||
{
|
||||
CreateItemOnObject("NW_IT_CONTAIN006", oPC, 1, "itoolbag");
|
||||
}
|
||||
|
||||
object oBag = GetItemPossessedBy(oPC, "itoolbag");
|
||||
|
||||
//We can't take this plot item, it would present big problems!
|
||||
if(GetTag(oTarget)=="pcidname")
|
||||
{
|
||||
FloatingTextStringOnCreature("This item may not be moved, sorry.", oPC);
|
||||
return;
|
||||
}
|
||||
//Otherise have the storage box take the item.
|
||||
else
|
||||
{
|
||||
//Make the box take the item!
|
||||
AssignCommand(oBox, ActionTakeItem(oTarget, oPC));
|
||||
}
|
||||
|
||||
//Make the bag unsellable and undroppable!
|
||||
DelayCommand(0.2, SetItemCursedFlag(oBag, TRUE));
|
||||
DelayCommand(0.3, SetPlotFlag(oBag, TRUE));
|
||||
//Give the bag a nice Bright Yellow new name identifying it clearly :)
|
||||
//Even if it was already set before, because we don't know..
|
||||
DelayCommand(0.4, SetName(oBag, "<c<><63> >Special Items"));
|
||||
|
||||
//Make the ibagbox put the item in the bag!
|
||||
DelayCommand(0.5, StoreItem(oBox));
|
||||
|
||||
|
||||
//Else statement end
|
||||
}
|
||||
|
||||
//Main Script end
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
//PROTOTYPE DEFINED
|
||||
void GiveBack(object oTarget)
|
||||
{
|
||||
object oBox = oTarget;
|
||||
object oPC = GetItemActivator();
|
||||
object oGiven = GetFirstItemInInventory(oBox);
|
||||
while(GetIsObjectValid(oGiven)==TRUE)
|
||||
{
|
||||
AssignCommand(oBox, ActionGiveItem(oGiven, oPC));
|
||||
|
||||
oGiven = GetNextItemInInventory(oBox);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////
|
||||
//PROTOTYPE DEFINED
|
||||
// Return the number of items oTarget possesses in thier inventory
|
||||
int GetNum(object oTarget)
|
||||
{
|
||||
int nNum = 0;
|
||||
object oItem = GetFirstItemInInventory(oTarget);
|
||||
|
||||
while (GetIsObjectValid(oItem) == TRUE)
|
||||
{
|
||||
nNum = nNum +1;
|
||||
oItem = GetNextItemInInventory(oTarget);
|
||||
}
|
||||
return nNum;
|
||||
|
||||
//END PROTOTYPE
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////
|
||||
//PROTOTYPE DEFINED
|
||||
void StoreItem(object oStored)
|
||||
{
|
||||
object oBox = oStored;
|
||||
object oPC = GetItemActivator();
|
||||
object oGiven = GetFirstItemInInventory(oBox);
|
||||
while(GetIsObjectValid(oGiven)==TRUE)
|
||||
{
|
||||
//Put the item in the bag on the PC!
|
||||
DelayCommand(0.2, AssignCommand(oBox, ActionGiveItem(oGiven,
|
||||
GetItemPossessedBy(oPC, "itoolbag"))));
|
||||
|
||||
oGiven = GetNextItemInInventory(oBox);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
//PROTOTYPE DEFINED
|
||||
void SortContainer(object oTarget)
|
||||
{
|
||||
|
||||
//Declare Major Variables
|
||||
object oPC = GetItemActivator();
|
||||
object oNPC = GetObjectByTag("ibag2box");
|
||||
object oBox = GetObjectByTag(GetTag(oTarget));
|
||||
object oMine;
|
||||
object oBag = GetItemPossessedBy(oNPC, GetTag(oTarget)+ "bag");
|
||||
|
||||
//First Put all the items that will fit into the bag
|
||||
//on the NPC into the bag..
|
||||
oMine = GetFirstItemInInventory(oTarget);
|
||||
while(GetIsObjectValid(oMine)==TRUE)
|
||||
{
|
||||
AssignCommand(oTarget, ActionGiveItem(oMine, oBag));
|
||||
|
||||
oMine = GetNextItemInInventory(oTarget);
|
||||
}
|
||||
|
||||
//Give the bag a colorful name.. :)
|
||||
DelayCommand(0.2, SetName(oBag, "<c<><63> >Special Items"));
|
||||
|
||||
//Make the bags unsellable and undroppable!!
|
||||
DelayCommand(0.3, SetItemCursedFlag(oBag, TRUE));
|
||||
DelayCommand(0.3, SetPlotFlag(oBag, TRUE));
|
||||
|
||||
//Give the PC the bag now that it has items in it!
|
||||
DelayCommand(0.4, AssignCommand(oNPC, ActionGiveItem(oBag, oPC)));
|
||||
|
||||
//PROTOTYPE END
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
//PROTOTYPE DEFINED
|
||||
void SortBox(object oTarget)
|
||||
{
|
||||
|
||||
//Declare Major Variables
|
||||
object oPC = GetLastUsedBy();
|
||||
object oBox = GetObjectByTag(GetTag(oTarget));
|
||||
object oItem;
|
||||
object oNPC = GetObjectByTag("ibag2box");
|
||||
|
||||
//We only continue if the box has items!
|
||||
if(GetNum(oBox)>0)
|
||||
{
|
||||
//Give the NPC a Bag to store items in!
|
||||
//Give the bag the tagname of the box!
|
||||
CreateItemOnObject("NW_IT_CONTAIN006", oNPC, 1, GetTag(oBox) + "bag");
|
||||
|
||||
//Start putting items in the bag on the NPC
|
||||
DelayCommand(0.3, SortContainer(oTarget));
|
||||
|
||||
}
|
||||
|
||||
//NOTE: If the box has 0 items, no need to continue!
|
||||
|
||||
//PROTOTYPES END
|
||||
}
|
||||
|
||||
/////////////////SCRIPT END////////////////////////////////
|
Reference in New Issue
Block a user