Jaysyn904 04165202c0 Initial upload
Initial upload
2024-11-25 19:36:07 -05:00

281 lines
10 KiB
Plaintext
Raw Permalink Blame History

////////////////////////////////////////////////////////////////////////////////
// lib_nais_tool - This is a library of common tool functions that might be used
// in other scripts.
// By Deva B. Winblood. 03/17/2007
////////////////////////////////////////////////////////////////////////////////
///////////////////
// CONSTANT
///////////////////
///////////////////
// PROTOTYPES
///////////////////
// FILE: lib_nais_tool FUNCTION: lib_ForceEquip()
// This is a recursive function that will attempt to force oCreature to equip
// oItem in slot nSlot. It will keep trying once per second until oItem does
// not exist or nCount is equal to nTimeOut attempts. This does not attempt to
// unequip any item already in slot. This will abort if there is an item in
// that slot.
void lib_ForceEquip(object oCreature,object oItem,int nSlot,int nTimeOut=5,int nCount=0);
// FILE: lib_nais_tool FUNCTION: lib_ParseString()
// This will parse the string sString based on sDelim delimiter.
string lib_ParseString(string sString,string sDelim="/");
// FILE: lib_nais_tool FUNCTION: lib_RemoveParsed()
// This will remove sParsed from sString and make sure there is no dangling
// sDelim delimiter at the beginning of sString.
string lib_RemoveParsed(string sString,string sParsed,string sDelim="/");
// FILE: lib_nais_tool FUNCTION: lib_ForceJump()
// Make sure oCreature arrives at oDest
void lib_ForceJump(object oCreature,object oDest,int nCount=0);
// FILE: lib_nais_tool FUNCTION: lib_GetAlignmentString()
// This will return one of the following alignment strings for oCreature
// LG, NG, CG, LN, NN, CN, LE, NE, or CE
string lib_GetAlignmentString(object oCreature);
// FILE: lib_nais_tool FUNCTION: lib_StripCreature()
// This will remove equipped non-creature item inventory, and all carried
// inventory, and gold.
void lib_StripCreature(object oCreature);
// FILE: lib_nais_tool FUNCTION: lib_SetStringColor()
// This function will make sString be the specified color
// as specified in sRGB. RGB is the Red, Green, and Blue
// components of the color. Each color can have a value from
// 0 to 6. A RED = "600" A GREEN = "060" A BLUE = "006"
// WHITE = "666" BLACK = "000" and so forth. You may also
// pass string constants as sRGB provided they are in the 3 digit
// RGB format.
string lib_SetStringColor(string sString,string sRGB);
///////////////////
// FUNCTIONS
///////////////////
void lib_ForceEquip(object oCreature,object oItem,int nSlot,int nTimeOut=5,int nCount=0)
{ // PURPOSE: To make sure oCreature equips oItem
object oEquipped=GetItemInSlot(nSlot,oCreature);
if (!GetIsObjectValid(oEquipped)&&GetIsObjectValid(oItem)&&nCount<nTimeOut)
{ // keep trying
if (!GetCommandable(oCreature)) SetCommandable(TRUE,oCreature);
AssignCommand(oCreature,ActionEquipItem(oItem,nSlot));
//SetCommandable(FALSE,oCreature);
DelayCommand(1.0,lib_ForceEquip(oCreature,oItem,nSlot,nTimeOut,nCount+1));
} // keep trying
else if (GetIsObjectValid(oEquipped)&&oItem!=oEquipped)
{ // another item was equipped
//SetCommandable(TRUE,oCreature);
PrintString("Error [lib_nais_tool] lib_ForceEquip: Item '"+GetName(oItem)+"' could not be equipped. Another item already occupied that slot.");
} // another item was equipped
else if (nCount>=nTimeOut)
{ // it timed out
//SetCommandable(TRUE,oCreature);
PrintString("Error [lib_nais_tool] lib_ForceEquip: The function timed out after "+IntToString(nTimeOut)+" attempts for item '"+GetName(oItem)+"'. Make sure the item is valid for that slot, the item can be equipped based on class, and the item is actually in the possession of the creature '"+GetName(oCreature)+"'.");
if (GetItemPossessor(oItem)!=oCreature) PrintString(" Addendum to Error: The item was not in possession of the creature trying to equip it.");
} // it timed out
} // lib_ForceEquip()
string lib_ParseString(string sString,string sDelim="/")
{ // PURPOSE: To strip the first part of string sString that occurs before
// sDelim
int nPos=0;
string sRet="";
string sVar=GetSubString(sString,nPos,1);
while(nPos<GetStringLength(sString))
{ // positional string building
if (sVar==sDelim) return sRet;
sRet=sRet+sVar;
nPos++;
sVar=GetSubString(sString,nPos,1);
} // positional string building
return sRet;
} // lib_ParseString()
string lib_RemoveParsed(string sString,string sParsed,string sDelim="/")
{ // PURPOSE: To remove sParsed string from sString and if a dangling sDelim
// delimiter remains at the beginning. Remove those as well
int nParsed=GetStringLength(sParsed);
int nString=GetStringLength(sString);
string sRet;
if (nParsed>=nString) return "";
else if (nParsed==0) return sString;
else
{ // strip
sRet=GetStringRight(sString,nString-nParsed);
while(GetStringLeft(sRet,1)==sDelim)
{ // strip leading delimiters
sRet=GetStringRight(sRet,GetStringLength(sRet)-1);
} // strip leading delimiters
} // strip
return sRet;
} // lib_RemoveParsed()
void lib_ForceJump(object oCreature,object oDest,int nCount=0)
{ // PURPOSE: This will force oCreature to jump to oDest
if (!GetIsObjectValid(oDest)||!GetIsObjectValid(oCreature)) return;
if (nCount>9)
{ // fail
SendMessageToPC(GetFirstPC(),"ERROR: lib_nais_tool - ForceJump Failed on Creature '"+GetName(oCreature)+"' in area '"+GetName(GetArea(oCreature))+"' to reach '"+GetTag(oDest)+"'");
return;
} // fail
if (GetArea(oDest)!=GetArea(oCreature)||GetDistanceBetween(oDest,oCreature)>2.0)
{ // jump
if (!GetCommandable(oCreature)) SetCommandable(TRUE,oCreature);
AssignCommand(oCreature,ClearAllActions(TRUE));
AssignCommand(oCreature,JumpToObject(oDest));
DelayCommand(1.0,lib_ForceJump(oCreature,oDest,nCount+1));
} // jump
else
{ // arrived
if (GetResRef(oDest)=="pathing_object")
{ // destroy
DestroyObject(oDest);
} // destroy
} // arrived
} // lib_ForceJump()
string lib_GetAlignmentString(object oCreature)
{ // PURPOSE: To return an alignment string
string sRet="";
int nAGE;
int nALC;
if (GetObjectType(oCreature)==OBJECT_TYPE_CREATURE)
{ // alignment
nALC=GetAlignmentLawChaos(oCreature);
nAGE=GetAlignmentGoodEvil(oCreature);
if (nALC==ALIGNMENT_LAWFUL) sRet="L";
else if (nALC==ALIGNMENT_CHAOTIC) sRet="C";
else { sRet="N"; }
if (nAGE==ALIGNMENT_GOOD) sRet=sRet+"G";
else if (nAGE==ALIGNMENT_EVIL) sRet=sRet+"E";
else { sRet=sRet+"N"; }
} // alignment
return sRet;
} // lib_GetAlignmentString();
void lib_StripCreature(object oCreature)
{ // PURPOSE: To remove creature inventory and gold
object oItem;
if (GetIsObjectValid(oCreature)&&GetObjectType(oCreature)==OBJECT_TYPE_CREATURE)
{ // valid oCreature
oItem=GetFirstItemInInventory(oCreature);
while(GetIsObjectValid(oItem))
{ // strip
DelayCommand(0.5,DestroyObject(oItem));
oItem=GetNextItemInInventory(oCreature);
} // strip
oItem=GetItemInSlot(INVENTORY_SLOT_ARMS,oCreature);
if (GetIsObjectValid(oItem))
{ // Destroy
DestroyObject(oItem);
} // Destroy
oItem=GetItemInSlot(INVENTORY_SLOT_ARROWS,oCreature);
if (GetIsObjectValid(oItem))
{ // Destroy
DestroyObject(oItem);
} // Destroy
oItem=GetItemInSlot(INVENTORY_SLOT_BELT,oCreature);
if (GetIsObjectValid(oItem))
{ // Destroy
DestroyObject(oItem);
} // Destroy
oItem=GetItemInSlot(INVENTORY_SLOT_BOLTS,oCreature);
if (GetIsObjectValid(oItem))
{ // Destroy
DestroyObject(oItem);
} // Destroy
oItem=GetItemInSlot(INVENTORY_SLOT_BOOTS,oCreature);
if (GetIsObjectValid(oItem))
{ // Destroy
DestroyObject(oItem);
} // Destroy
oItem=GetItemInSlot(INVENTORY_SLOT_BULLETS,oCreature);
if (GetIsObjectValid(oItem))
{ // Destroy
DestroyObject(oItem);
} // Destroy
oItem=GetItemInSlot(INVENTORY_SLOT_CHEST,oCreature);
if (GetIsObjectValid(oItem))
{ // Destroy
DestroyObject(oItem);
} // Destroy
oItem=GetItemInSlot(INVENTORY_SLOT_CLOAK,oCreature);
if (GetIsObjectValid(oItem))
{ // Destroy
DestroyObject(oItem);
} // Destroy
oItem=GetItemInSlot(INVENTORY_SLOT_HEAD,oCreature);
if (GetIsObjectValid(oItem))
{ // Destroy
DestroyObject(oItem);
} // Destroy
oItem=GetItemInSlot(INVENTORY_SLOT_LEFTHAND,oCreature);
if (GetIsObjectValid(oItem))
{ // Destroy
DestroyObject(oItem);
} // Destroy
oItem=GetItemInSlot(INVENTORY_SLOT_NECK,oCreature);
if (GetIsObjectValid(oItem))
{ // Destroy
DestroyObject(oItem);
} // Destroy
oItem=GetItemInSlot(INVENTORY_SLOT_LEFTRING,oCreature);
if (GetIsObjectValid(oItem))
{ // Destroy
DestroyObject(oItem);
} // Destroy
oItem=GetItemInSlot(INVENTORY_SLOT_RIGHTRING,oCreature);
if (GetIsObjectValid(oItem))
{ // Destroy
DestroyObject(oItem);
} // Destroy
oItem=GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oCreature);
if (GetIsObjectValid(oItem))
{ // Destroy
DestroyObject(oItem);
} // Destroy
TakeGoldFromCreature(GetGold(oCreature),oCreature,TRUE);
} // valid oCreature
} // lib_StripCreature()
string lib_SetStringColor(string sString,string sRGB)
{ // PURPOSE: To convert sString to specified color
// Original Scripter: Deva B. Winblood
// Last Modified By: Deva B. Winblood 5/2/2006
string sRGBVALUES=" fw<66><77><EFBFBD><EFBFBD>";
string sColorEnd="</c>";
string sRet;
int nR=StringToInt(GetSubString(sRGB,0,1));
int nG=StringToInt(GetSubString(sRGB,1,1));
int nB=StringToInt(GetSubString(sRGB,2,1));
if (nR>6) nR=6;
if (nG>6) nG=6;
if (nB>6) nB=6;
sRet="<c"+GetSubString(sRGBVALUES,nR,1)+GetSubString(sRGBVALUES,nG,1);
sRet=sRet+GetSubString(sRGBVALUES,nB,1)+">"+sString+sColorEnd;
return sRet;
} // lib_SetStringColorColor()
//void main(){}