//Script Name: iorganize ////////////////////////////////////////// //Created by: Genisys / Guile //ON: 7/28/08 ///////////////////////////////////////// /* **Notes** This script is fired from an OnActivateItem script, which had to be seperated to prevent crashing, due to resource intensive loops and advanced scripting. */ //////////////////////////////////////// ////NOTE: There is an error in this script when they have more than ////8 items in their inventory, and the items in bags are not being ////taken out of the bags!!! (TOO MANY INSTRUCTIONS ERROR) //PROTOTYPE (DEFINED) void RemoveBags() { object oCan = GetObjectByTag("ibox"); object oThis; oThis = GetFirstItemInInventory(oCan); while(GetIsObjectValid(oThis)==TRUE) { //We need to destroy all of the containers inside the box! if(GetHasInventory(oThis)) { DestroyObject(oThis,0.0f); } //Keep going till we get all of the bags.. oThis = GetNextItemInInventory(oCan); //Loop End } //End Prototype } ///PROTOTYPE (DEFINED) int GetCount() { object oIC; object oBarrel; oBarrel = GetObjectByTag("ibox"); //Now lets deal with the items in the box now.. int nCount = 0; //Count the # of total items in the barrel.. oIC = GetFirstItemInInventory(oBarrel); while(GetIsObjectValid(oIC)==TRUE) { //We need to destroy all of the containers inside the box! if(GetHasInventory(oIC)) { //For now just print the string PrintString("Bag has items"); nCount++; //DestroyObject(oMine,0.0f); } //If it's not a container then add it to the count.. else { nCount++; //Increment the count by 1 } //continue counting till there are no more items to count.. oIC = GetNextItemInInventory(oBarrel); //While statment / loop end } return nCount; //End Prototype } void main() { object oPC = OBJECT_SELF; object oBox = GetObjectByTag("ibox"); object oCon; object oMine; int nBags; //Remove bags from the box FIRST! RemoveBags(); //This must be defined after bags are destroyed! int iCount = GetCount(); if(iCount >7) { //Assign 8 items / bag (based upon average size of items) nBags = iCount / 8; //NOTE: This may be too many, I will test first. } //Otherwise just give them one bag.. else { nBags = 1; } //If we only have 8 items or less, try to put them all in one bag! if(nBags==1) { ////////NOTE: This works fine (everything organizes)////// //Create a bag of holding on the player, and give it a new tagname //Every bag must have it's own unique tagname so we can id them later.. CreateItemOnObject("nw_it_contain006", oPC, 1, "ibag1"); //Now excute this script if they only get 1 bag DelayCommand(0.5, ExecuteScript("icontain", oPC)); } //Otherwise excute this script because there are a lot of items! else { DelayCommand(0.5, ExecuteScript("iseperate", oPC)); } //Script End }