#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); } }