281 lines
10 KiB
Plaintext
281 lines
10 KiB
Plaintext
|
////////////////////////////////////////////////////////////////////////////////
|
|||
|
// 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(){}
|