EN4_PRC8/_module/nss/rd_misc.nss
Jaysyn904 b464d8da05 Initial Commit
Initial Commit [v1.32PRC8]
2025-04-03 13:38:45 -04:00

429 lines
7.8 KiB
Plaintext

#include "utl_i_sqluuid"
void SetToken(object oPC,object oSender, int iToken, string sToken);
string GetToken(int iToken, object oNPC=OBJECT_SELF);
int ZoneLevel(object oArea,int iLevel);
int GetPCCount(object oTargetPC);
string GetZone(object oPC);
string GetZoneDungeonCamp(object oNPC);
string GetRandomZone();
void SetPartyString(object oPC,string sVariable, string sValue);
void SetPartyInt(object oPC,string sVariable, int iValue);
int PCDeathsLeft(object oPC);
object GetRandomPC();
int GetPCAreaCount(object oTargetPC);
int GetQuestGiver();
void SitInChairs(string sPrefix);
int GetXSpot(string sZone);
void Randomize();
int CheckHardcore();
int ZoneLevel(object oArea,int iLevel)
{
int iMinLevel;
int iMaxLevel;
//Check for oArea being a PC in case wrong object is passed
if (GetIsPC(oArea))
oArea = GetArea(oArea);
iMinLevel = GetLocalInt(oArea,"MinimumLevel");
iMaxLevel = GetLocalInt(oArea,"MaximumLevel");
if (iLevel < iMinLevel)
iLevel = iMinLevel;
if (iLevel > iMaxLevel && iMaxLevel > 0)
iLevel = iMaxLevel;
return iLevel;
}
//oTargetPC not used for PC Count but is in the function for compatabity
int GetPCCount(object oTargetPC)
{
string sZone;
string sTargetZone;
object oPC;
object oLastPC;
int iCount;
int iFlag;
oPC=GetFirstPC();
iCount = 0;
iFlag = 0;
sTargetZone = GetZone(oTargetPC);
//start with iCount of 0 because we will run into target pc in pc list
while (iFlag == 0)
{
iCount++;
oLastPC = oPC;
oPC = GetNextPC();
if (GetName(oLastPC) == GetName(oPC))
{
iFlag = 1;
}
}
iCount--;
return iCount;
}
int GetPCAreaCount(object oTargetPC)
{
string sZone;
string sTargetZone;
object oPC;
object oLastPC;
int iCount;
int iFlag;
oPC=GetFirstPC();
iCount = 0;
iFlag = 0;
sTargetZone = GetZone(oTargetPC);
//start with iCount of 0 because we will run into target pc in pc list
while (iFlag == 0)
{
oLastPC = oPC;
sZone=GetZone(oPC);
if (sZone == sTargetZone)
{
iCount++;
}
oPC = GetNextPC();
if (GetName(oLastPC) == GetName(oPC))
{
iFlag = 1;
}
}
return iCount;
}
string GetZone(object oPC)
{
object oZone;
int iLevel;
string sZone;
oZone = GetArea(oPC);
sZone = GetLocalString(oZone,"Prefix");
if (sZone == "")
{
iLevel = GetHitDice(oPC);
if (iLevel < 4)
sZone = "RP1";
else if (iLevel < 8)
sZone = "WG1";
else if (iLevel < 12)
sZone = "SS1";
else if (iLevel < 17)
sZone = "RW1";
else if (iLevel < 22)
sZone = "DW1";
else if (iLevel < 27)
sZone = "SP1";
else if (iLevel < 33)
sZone = "IP1";
else
sZone = "DP1";
}
return sZone;
}
string GetZoneDungeonCamp(object oNPC)
{
object oZone;
int iLevel;
string sZone;
oZone = GetArea(oNPC);
sZone = GetLocalString(oZone,"Dungeon");
if (sZone == "")
{
iLevel = GetHitDice(oNPC);
if (iLevel < 4)
sZone = "SC1";
else if (iLevel < 8)
sZone = "WGT1";
else if (iLevel < 12)
sZone = "CA1";
else if (iLevel < 17)
sZone = "AM1";
else if (iLevel < 22)
sZone = "ED1";
else if (iLevel < 27)
sZone = "AT1";
else if (iLevel < 33)
sZone = "UD1";
else
sZone = "AL1";
}
return sZone;
}
string GetRandomZone()
{
string sZone;
int iRandom;
sZone = "NH1";
iRandom = Random(2) + 1;
switch (iRandom)
{
case 1: sZone = "NH1"; break;
case 2: sZone = "SF1"; break;
}
return sZone;
}
void SetPartyString(object oPC,string sVariable, string sValue)
{
object oPartyMember = GetFirstFactionMember(oPC, TRUE);
while (GetIsObjectValid(oPartyMember) == TRUE)
{
SetLocalString(oPartyMember,sVariable,sValue);
oPartyMember = GetNextFactionMember(oPC, TRUE);
}
}
void SetPartyInt(object oPC,string sVariable, int iValue)
{
object oPartyMember = GetFirstFactionMember(oPC, TRUE);
while (GetIsObjectValid(oPartyMember) == TRUE)
{
SetLocalInt(oPartyMember,sVariable,iValue);
oPartyMember = GetNextFactionMember(oPC, TRUE);
}
}
int PCDeathsLeft(object oPC)
{
int iLevel;
int iDeaths;
int iDeathAllowed;
int iDeathsLeft;
iLevel = GetHitDice(oPC);
iDeaths = SQLocalsUUID_GetInt(oPC,"PCDeaths");
iDeathAllowed = 3 + iLevel - SQLocalsUUID_GetInt(oPC,"PCEnterLevel");
iDeathsLeft = iDeathAllowed - iDeaths;
if (SQLocalsUUID_GetInt(oPC,"PCHardcore") == 1 || SQLocalsUUID_GetInt(oPC,"PCHardCorePNP") == 1)
iDeathsLeft = 1;
return iDeathsLeft;
}
object GetRandomPC()
{
int iCount;
int iFlag;
int iIndex;
object oPC;
object oLastPC;
oPC=GetFirstPC();
iCount = 0;
iFlag = 0;
while (iFlag == 0)
{
iCount++;
oLastPC = oPC;
oPC = GetNextPC();
if (GetName(oLastPC) == GetName(oPC))
{
iFlag = 1;
}
if (iCount>65)
{
iFlag = 1;
}
}
iCount--;
for (iIndex=1; iIndex <= iCount; iIndex++)
{
if (iIndex == 1)
{
oPC = GetFirstPC();
} else {
oPC = GetNextPC();
}
}
return oPC;
}
void SetToken(object oPC,object oSender, int iToken, string sToken)
{
SetCustomToken(iToken,sToken);
SetPartyString(oPC,"Token" + IntToString(iToken),sToken);
SetLocalString(oSender,"Token" + IntToString(iToken),sToken);
}
string GetToken(int iToken, object oNPC=OBJECT_SELF)
{
string sToken;
sToken = GetLocalString(oNPC,"Token" + IntToString(iToken));
return sToken;
}
int GetQuestGiver()
{
int iQuestGivers;
int iNPC;
int iStart;
int iIndex;
iQuestGivers=4;
iNPC = Random(iQuestGivers)+1;
iStart = iNPC;
iIndex=0;
while (GetLocalInt(GetModule(),"QuestGiver" + IntToString(iNPC)) == 1 && iIndex<200)
{
iIndex++;
iNPC++;
if (iNPC > iQuestGivers)
iNPC = 1;
//Set original NPC as open if we've looped
if (iNPC == iStart)
SetLocalInt(GetModule(),"QuestGiver" + IntToString(iNPC),0);
}
SetLocalInt(GetModule(),"QuestGiver" + IntToString(iNPC),1);
return iNPC;
}
void SitInChairs(string sPrefix)
{
int iCount;
string sTag;
object oNPC;
object oChair;
iCount=1;
sTag = sPrefix + "_sit" + IntToString(iCount);
oNPC = GetObjectByTag(sTag);
//SendMessageToPC(GetFirstPC(),"NPC sitting - first = " + sTag);
while (GetIsObjectValid(oNPC))
{
sTag = sPrefix + "_chair" + IntToString(iCount);
//SendMessageToPC(GetFirstPC(),"Try to Sit in Chair " + sTag);
oChair = GetObjectByTag(sTag);
if (GetIsObjectValid(oChair))
{
DelayCommand(0.5f,AssignCommand(oNPC,ActionSit(oChair)));
//SendMessageToPC(GetFirstPC(),"Sit in Chair " + sTag);
}
iCount++;
sTag = sPrefix + "_sit" + IntToString(iCount);
oNPC = GetObjectByTag(sTag);
}
}
int GetXSpot(string sZone)
{
int iIndex;
int iFlag;
string sTag;
object oSpawn;
iIndex = 0;
iFlag = 0;
while (iFlag==0)
{
iIndex++;
sTag = sZone + "_X_" + IntToString(iIndex);
oSpawn=GetObjectByTag(sTag);
if (!(GetIsObjectValid(oSpawn)))
iFlag = 1;
}
iIndex--;
return iIndex;
}
void Randomize()
{
int iIndex;
int iRandomize;
int iRnd;
iRandomize = GetCampaignInt("Endless Nights IV","Randomize");
iRandomize++;
iIndex=1;
while (iIndex<=iRandomize)
{
iIndex++;
iRnd=Random(100);
}
if (iRandomize>1000)
iRandomize = 1;
SetCampaignInt("Endless Nights IV","Randomize",iRandomize);
}
int CheckHardcore()
{
int iResult;
object oPC;
iResult = TRUE;
oPC = GetFirstPC();
while (GetIsObjectValid(oPC))
{
if (GetLocalInt(oPC,"PCHardCorePNP") == 0)
iResult = FALSE;
oPC = GetNextPC();
}
return iResult;
}
void ClearZoneMobs(object oArea)
{
object oMob;
oMob = GetFirstObjectInArea(oArea);
while (GetIsObjectValid(oMob) && GetIsPC(oMob) != TRUE)
{
if (GetObjectType(oMob) == OBJECT_TYPE_CREATURE)
{
AssignCommand(oMob,SetIsDestroyable(TRUE,FALSE));
DestroyObject(oMob,0.5f);
}
oMob = GetNextObjectInArea(oArea);
}
}