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

682 lines
16 KiB
Plaintext

#include "rd_spawn"
#include "rd_misc"
void InitiateQuest(int iQuest, object oPC,object oGiver);
string GetRandomDeliveryNPC(object oSender, int iInZone=1);
string GetInZoneNPC(object oSender);
object GetQuestCamp(object oPC, object oQuestNPC, int iInZone = TRUE, string sQuestCampType = "");
void GetDelivery(string sTag,object oPC, object oSender, int iInZone=1, string sNPC="");
object GetQuestCreatures(object oPC,string sCampType, int iBase, int iBaseStart, int iBaseMax, int iCampType);
string GetQuestMob(object oPC, int iRaceOnly=0);
object GetRandomMobs(object oPC, int iRaceOnly=0);
object GetRandomQuestMobs(object oPC, int iRaceOnly=0);
string GuardedDelivery(string sTag, object oPC, object oSender, int iInZone=1, string sNPC="");
void AmbushDelivery(string sTag, object oPC, object oSender);
object GetDungeonCamp(object oPC, object oQuestNPC, int iInZone = TRUE);
int GetMaxQuestSpots(string sZone);
int GetMaxQuestCampSpots(string sZone);
void SummonRndCreature(int iLevel,location lLoc);
void SummonRace(object oPC,location lLoc,int iLevel);
string GetQuestLocString(string sTag);
void InitiateQuest(int iQuest, object oPC,object oGiver)
{
string sCampDescription;
//CustomTokens
//101 = description of camp
if (iQuest == 1)
{
//object oPC;
object oBoss;
location lHostage;
string sHostage;
//oPC=GetPCSpeaker();
SetPartyInt(oPC,"Quest",1);
SetPartyInt(oPC,"QuestStep",1);
oBoss = GetQuestCamp(oPC,OBJECT_SELF,TRUE);
if (GetLocalInt(oBoss,"iCampType") == 1)
{
if (Random(10) == 0)
{
lHostage = GetLocation(oBoss);
sHostage = "en3_hostage" + IntToString(Random(6)+1);
CreateObject(OBJECT_TYPE_CREATURE,sHostage,lHostage);
if (Random(4)==0)
{
sHostage = "en3_hostage" + IntToString(Random(6)+1);
CreateObject(OBJECT_TYPE_CREATURE,sHostage,lHostage);
}
}
}
sCampDescription = GetLocalString(oBoss,"Description");
SetCustomToken(101,sCampDescription);
}
}
string GetRandomDeliveryNPC(object oSender, int iInZone=1)
{
object oNPC;
string sTag;
int iRandom;
int iFlag;
iFlag = 0;
if (iInZone == 1)
{
sTag =GetInZoneNPC(oSender);
} else {
while (iFlag == 0)
{
iRandom = Random(7)+1;
switch (iRandom)
{
case 1: sTag = "en3_berister"; break;
case 2: sTag = "en3_erolle"; break;
case 3: sTag = "en3_dorey"; break;
case 4: sTag = "en3_nick"; break;
case 5: sTag = "en3_marik"; break;
case 6: sTag = "en3_captainellis"; break;
case 7: sTag = "en3_brothertash"; break;
}
oNPC = GetObjectByTag(sTag);
iFlag = 1;
if (sTag == GetTag(oSender))
iFlag = 0;
}
}
return sTag;
}
string GetInZoneNPC(object oSender)
{
string sTag;
string sTargetTag;
sTag = GetTag(oSender);
if (sTag == "en3_berister")
if (Random(2)==0)
sTargetTag = "en3_erolle";
else
sTargetTag = "en3_dorey";
if (sTag == "en3_erolle")
if (Random(2)==0)
sTargetTag = "en3_berister";
else
sTargetTag = "en3_dorey";
if (sTag == "en3_dorey")
if (Random(2)==0)
sTargetTag = "en3_erolle";
else
sTargetTag = "en3_berister";
if (sTag == "en3_nick")
sTargetTag = "en3_marik";
if (sTag == "en3_marik")
sTargetTag = "en3_nick";
if (sTag == "en3_captainellis")
sTargetTag = "en3_brothertash";
if (sTag == "en3_brothertash")
sTargetTag = "en3_captainellis";
return sTargetTag;
}
object GetQuestCamp(object oPC, object oQuestNPC, int iInZone = TRUE, string sQuestCampType = "")
{
object oBoss;
string sZone;
int iCamp;
int iCamps;
int iLevel;
int iLeader;
int iDifficulty;
int iDeathAllowed;
int iDeathAjust;
int iAdjustedLevel;
int iPCCount;
iLevel = GetLevelByPosition(1,oPC) +
GetLevelByPosition(2,oPC) +
GetLevelByPosition(3,oPC);
iPCCount= GetPCCount(oPC);
iDeathAllowed = PCDeathsLeft(oPC);
iDeathAjust = (iDeathAllowed-2)/2;
iAdjustedLevel = iLevel - 3 + iPCCount;
iAdjustedLevel = iAdjustedLevel + iDeathAjust;
iAdjustedLevel = iAdjustedLevel + GetLocalInt(oPC,"Adjust");
if (GetLocalInt(oPC,"Unlucky")==1)
iAdjustedLevel++;
if (GetLocalInt(GetModule(),"Easy") == 1)
iAdjustedLevel = iAdjustedLevel - 2;
if (iAdjustedLevel < 1)
iAdjustedLevel =1;
if (iAdjustedLevel > 40)
iAdjustedLevel =40;
if (iInZone)
{
sZone = GetZone(oPC);
iCamps = GetMaxQuestCampSpots(sZone);
iCamp = Random(iCamps)+1;
} else {
sZone = GetRandomZone();
iCamps = GetMaxQuestCampSpots(sZone);
iCamp = Random(iCamps)+1;
}
iLeader=1;
oBoss = SpawnQuestCamp(sZone,iCamp,iAdjustedLevel,iLeader,sQuestCampType);
SetPartyInt(oPC,"QuestType",1);
SetPartyInt(oPC,"QuestCamp",iCamp);
SetPartyString(oPC,"QuestCampzone",sZone);
SetPartyString(oPC,"QuestTargetNPC",GetTag(oQuestNPC));
iDifficulty = GetLocalInt(oPC,"QuestDifficulty");
iDifficulty++;
if (sZone == "SF1")
iDifficulty++;
SetPartyInt(oPC,"QuestDifficulty",iDifficulty);
return oBoss;
}
void GetDelivery(string sTag,object oPC, object oSender, int iInZone=1, string sNPC="")
{
string sRandomNPC;
object oItem;
if (sNPC == "")
sRandomNPC = GetRandomDeliveryNPC(oSender,iInZone);
else
sRandomNPC = sNPC;
oItem = CreateItemOnObject(sTag,oPC);
SetPartyInt(oPC,"QuestType",2);
SetPartyString(oPC,"QuestTargetNPC",sRandomNPC);
SetPartyString(oPC,"QuestItemTag",sTag);
}
int GetMaxQuestSpots(string sZone)
{
string sTag;
int iIndex;
int iFlag;
object oSpawn;
iIndex = 0;
iFlag = 0;
while (iFlag==0)
{
iIndex++;
sTag = sZone + "_Q_" + IntToString(iIndex);
oSpawn=GetObjectByTag(sTag);
if (!(GetIsObjectValid(oSpawn)))
iFlag = 1;
}
iIndex--;
return iIndex;
}
int GetMaxQuestCampSpots(string sZone)
{
string sTag;
int iIndex;
int iFlag;
object oSpawn;
iIndex = 0;
iFlag = 0;
while (iFlag==0)
{
iIndex++;
sTag = sZone + "_Q" + IntToString(iIndex) + "_Boss";
oSpawn=GetObjectByTag(sTag);
if (!(GetIsObjectValid(oSpawn)))
iFlag = 1;
}
iIndex--;
return iIndex;
}
string GetQuestMob(object oPC, int iRaceOnly=0)
{
string sCampType;
int iLevel;
int iDeathAllowed;
int iDeathAjust;
int iAdjustedLevel;
int iPCCount;
iLevel = GetLevelByPosition(1,oPC) +
GetLevelByPosition(2,oPC) +
GetLevelByPosition(3,oPC);
iPCCount= GetPCCount(oPC);
iDeathAllowed = PCDeathsLeft(oPC);
iDeathAjust = (iDeathAllowed-2)/2;
iAdjustedLevel = iLevel - 3 + iPCCount;
iAdjustedLevel = iAdjustedLevel + iDeathAjust;
iAdjustedLevel = iAdjustedLevel + GetLocalInt(oPC,"Adjust");
//Setup for races and allow indoors only to be spookiness
SetupCampTypes(iAdjustedLevel, 1, 1, 0, iRaceOnly);
sCampType = GetCampType();
return sCampType;
}
object GetQuestCreatures(object oPC,string sCampType, int iBase, int iBaseStart, int iBaseMax, int iCampType)
{
string sZone;
string sTag;
int iMaxSpots;
int iSpawn;
int iCreatureLevel;
int iCreatures;
int iIndex;
int iLevel;
object oCreature;
int iDeathAllowed;
int iDeathAjust;
int iAdjustedLevel;
int iPCCount;
sZone = GetZone(oPC);
iMaxSpots = GetMaxQuestSpots(sZone);
iSpawn = Random(iMaxSpots)+1;
sTag = sZone + "_Q_" + IntToString(iSpawn);
iLevel = GetLevelByPosition(1,oPC) +
GetLevelByPosition(2,oPC) +
GetLevelByPosition(3,oPC);
iPCCount= GetPCCount(oPC);
iDeathAllowed = PCDeathsLeft(oPC);
iDeathAjust = (iDeathAllowed-2)/2;
iAdjustedLevel = iLevel - 3 + iPCCount;
iAdjustedLevel = iAdjustedLevel + iDeathAjust;
iAdjustedLevel = iAdjustedLevel + GetLocalInt(oPC,"Adjust");
iCreatureLevel = Random(3)+1;
iCreatures = Random(3)+2;
iIndex = 1;
while (iIndex <= iCreatures)
{
oCreature = GetCampMob(iCreatureLevel,sTag,sCampType,iAdjustedLevel,iBaseStart,iBase,iBaseMax,iCampType, 0);
//SendMessageToPC(oPC,"Spawning " + GetName(oCreature));
iIndex++;
}
return oCreature;
}
object GetRandomMobs(object oPC, int iRaceOnly=0)
{
object oCreature;
string sCampType;
int iDifficulty;
int iBase;
int iBaseStart;
int iBaseMax;
int iCampType;
object oMod;
oMod = GetModule();
sCampType = GetQuestMob(oPC,iRaceOnly);
iBase = GetLocalInt(oMod,"iBase");
iBaseStart = GetLocalInt(oMod,"iBaseStart");
iBaseMax = GetLocalInt(oMod,"iBaseMax");
iCampType = GetLocalInt(oMod,"iCampType");
SetLocalInt(oMod,"iBase",0);
SetLocalInt(oMod,"iBaseStart",0);
SetLocalInt(oMod,"iBaseMax",0);
SetLocalInt(oMod,"iCampType",0);
oCreature = GetQuestCreatures(oPC,sCampType,iBase,iBaseStart,iBaseMax,iCampType);
SetLocalInt(oCreature,"iCampType",iCampType);
SetLocalString(oCreature,"sCampType",sCampType);
return oCreature;
}
object GetRandomQuestMobs(object oPC, int iRaceOnly=0)
{
object oCreature;
string sCampType;
int iDifficulty;
int iBase;
int iBaseStart;
int iBaseMax;
int iCampType;
object oMod;
oMod = GetModule();
sCampType = GetQuestMob(oPC,iRaceOnly);
iBase = GetLocalInt(oMod,"iBase");
iBaseStart = GetLocalInt(oMod,"iBaseStart");
iBaseMax = GetLocalInt(oMod,"iBaseMax");
iCampType = GetLocalInt(oMod,"iCampType");
SetLocalInt(oMod,"iBase",0);
SetLocalInt(oMod,"iBaseStart",0);
SetLocalInt(oMod,"iBaseMax",0);
SetLocalInt(oMod,"iCampType",0);
oCreature = GetQuestCreatures(oPC,sCampType,iBase,iBaseStart,iBaseMax,iCampType);
SetLocalInt(oCreature,"iCampType",iCampType);
SetLocalString(oCreature,"sCampType",sCampType);
SetPartyInt(oPC,"QuestType",3);
SetPartyString(oPC,"QuestTargetNPC",GetTag(OBJECT_SELF));
SetPartyString(oPC,"QuestCreatureTag",GetTag(oCreature));
iDifficulty = GetLocalInt(oPC,"QuestDifficulty");
iDifficulty++;
SetPartyInt(oPC,"QuestDifficulty",iDifficulty);
return oCreature;
}
string GuardedDelivery(string sTag, object oPC, object oSender, int iInZone=1, string sNPC="")
{
string sCampType;
string sGuardTag;
object oGuard;
object oCreature;
int iBase;
int iBaseStart;
int iBaseMax;
int iCampType;
int iLevel;
int iCreatureLevel;
int iCreatures;
int iIndex;
int iDifficulty;
int iDeathAllowed;
int iDeathAjust;
int iAdjustedLevel;
int iPCCount;
object oMod;
oMod = GetModule();
sCampType = GetQuestMob(oPC,1);
iBase = GetLocalInt(oMod,"iBase");
iBaseStart = GetLocalInt(oMod,"iBaseStart");
iBaseMax = GetLocalInt(oMod,"iBaseMax");
iCampType = GetLocalInt(oMod,"iCampType");
SetLocalInt(oMod,"iBase",0);
SetLocalInt(oMod,"iBaseStart",0);
SetLocalInt(oMod,"iBaseMax",0);
SetLocalInt(oMod,"iCampType",0);
if (!(sTag == ""))
{
GetDelivery(sTag,oPC,oSender,iInZone,sNPC);
sNPC=GetLocalString(oPC,"QuestTargetNPC");
}
iLevel = GetLevelByPosition(1,oPC) +
GetLevelByPosition(2,oPC) +
GetLevelByPosition(3,oPC);
iPCCount= GetPCCount(oPC);
iDeathAllowed = PCDeathsLeft(oPC);
iDeathAjust = (iDeathAllowed-2)/2;
iAdjustedLevel = iLevel - 3 + iPCCount;
iAdjustedLevel = iAdjustedLevel + iDeathAjust;
iCreatureLevel = Random(3)+1;
sGuardTag = sNPC + "_g1";
oGuard = GetObjectByTag(sGuardTag);
//SendMessageToPC(oPC,"Trying to spawn " + sCampType + " at " + sGuardTag);
if (GetIsObjectValid(oGuard))
{
//SendMessageToPC(oPC,"Spawning 1");
iCreatures = Random(3)+2;
iIndex = 1;
while (iIndex <= iCreatures)
{
oCreature = GetCampMob(iCreatureLevel,sGuardTag,sCampType,iAdjustedLevel,iBaseStart,iBase,iBaseMax,iCampType, 0);
//SendMessageToPC(oPC,"Spawning " + GetName(oCreature));
iIndex++;
}
}
sGuardTag = sNPC + "_g2";
oGuard = GetObjectByTag(sGuardTag);
//SendMessageToPC(oPC,"Trying to spawn " + sCampType + " at " + sGuardTag);
if (GetIsObjectValid(oGuard))
{
iCreatures = Random(3)+2;
iIndex = 1;
while (iIndex <= iCreatures)
{
oCreature = GetCampMob(iCreatureLevel,sGuardTag,sCampType,iAdjustedLevel,iBaseStart,iBase,iBaseMax,iCampType, 0);
//SendMessageToPC(oPC,"Spawning " + GetName(oCreature));
iIndex++;
}
}
iDifficulty = GetLocalInt(oPC,"QuestDifficulty");
iDifficulty++;
SetPartyInt(oPC,"QuestDifficulty",iDifficulty);
return sCampType;
}
object GetDungeonCamp(object oPC, object oQuestNPC, int iInZone = TRUE)
{
object oBoss;
object oArea;
string sZone;
string sDZone;
int iCamp;
int iCamps;
int iLevel;
int iLeader;
int iDifficulty;
int iDeathAllowed;
int iDeathAjust;
int iAdjustedLevel;
int iPCCount;
iLevel = GetLevelByPosition(1,oPC) +
GetLevelByPosition(2,oPC) +
GetLevelByPosition(3,oPC);
iPCCount= GetPCCount(oPC);
iDeathAllowed = PCDeathsLeft(oPC);
iDeathAjust = (iDeathAllowed-2)/2;
iAdjustedLevel = iLevel - 3 + iPCCount;
iAdjustedLevel = iAdjustedLevel + iDeathAjust;
iAdjustedLevel = iAdjustedLevel + GetLocalInt(oPC,"Adjust");
if (iInZone)
{
sZone = GetZone(oPC);
sDZone = GetZoneDungeonCamp(sZone);
iCamps = GetMaxQuestCampSpots(sDZone);
iCamp = Random(iCamps)+1;
} else {
sZone = GetRandomZone();
sDZone = GetZoneDungeonCamp(sZone);
iCamps = GetMaxQuestCampSpots(sDZone);
iCamp = Random(iCamps)+1;
}
iLeader=1;
oBoss = SpawnQuestCamp(sDZone,iCamp,iAdjustedLevel,iLeader);
//reset spawned to force respawn on dungeon/cave/tower/thingy
oArea = GetArea(oBoss);
SetLocalInt(oArea,"Spawned",0);
SetPartyInt(oPC,"QuestType",1);
SetPartyInt(oPC,"QuestCamp",iCamp);
SetPartyString(oPC,"QuestCampzone",sDZone);
SetPartyString(oPC,"QuestTargetNPC",GetTag(oQuestNPC));
iDifficulty = GetLocalInt(oPC,"QuestDifficulty");
iDifficulty=iDifficulty+3;
SetPartyInt(oPC,"QuestDifficulty",iDifficulty);
return oBoss;
}
void AmbushDelivery(string sTag, object oPC, object oSender)
{
string sSendTag;
string sAmbushTag;
location lLoc;
int iLevel;
int iDifficulty;
sSendTag = GetTag(oSender);
int iAmbush = 1;
if (sSendTag == "en3_berister" || sSendTag == "en3_erolle" || sSendTag == "en3_dorey")
if (sTag == "en3_captainellis" || sTag == "en3_brothertash")
iAmbush = 2;
if (sSendTag == "en3_captainellis" || sSendTag == "en3_brothertash")
if (sTag == "en3_berister" || sTag == "en3_erolle" || sTag == "en3_dorey")
iAmbush = 2;
if (iAmbush == 1)
sAmbushTag = "WP_AMBUSH1_" + IntToString(Random(2)+1);
else
sAmbushTag = "WP_AMBUSH2_" + IntToString(Random(2)+1);
lLoc = GetLocation(GetObjectByTag(sAmbushTag));
iLevel = GetHitDice(oPC);
if (Random(2)==0)
{
SummonRndCreature(iLevel,lLoc);
} else {
SummonRace(oPC,lLoc,iLevel);
}
iDifficulty = GetLocalInt(oPC,"QuestDifficulty");
iDifficulty=iDifficulty++;
SetPartyInt(oPC,"QuestDifficulty",iDifficulty);
}
void SummonRndCreature(int iLevel,location lLoc)
{
int iIndex;
int iRandom;
string sTag;
sTag = GetRndCreature(iLevel);
iIndex = 0;
iRandom = Random(3)+2;
while (iIndex < iRandom)
{
CreateObject(OBJECT_TYPE_CREATURE,sTag,lLoc);
iIndex++;
}
}
void SummonRace(object oPC,location lLoc,int iLevel)
{
object oArea;
int iArea;
int iRandom;
int iIndex;
string sCampType;
if (GetLocalInt(oPC,"Evil") == 1 && Random(3) == 0)
{
iRandom=Random(3)+1;
switch (iRandom)
{
case 1: sCampType="elf"; break;
case 2: sCampType="dwarf"; break;
case 3: sCampType="halfling"; break;
}
} else {
oArea=GetArea(oPC);
iArea=GetIsAreaInterior(oArea);
if (iArea == FALSE)
SetupCampTypes(iLevel, 1, 0, 1, 1);
else
SetupCampTypes(iLevel, 1, 1, 1, 1);
sCampType = GetCampType();
}
iIndex = 0;
iRandom = Random(4)+1;
while (iIndex < iRandom)
{
GetRaceCreature(sCampType,lLoc,iLevel);
iIndex++;
}
}
string GetQuestLocString(string sTag)
{
string sDescription;
if (sTag == "NH1_Q_1_S" || sTag == "NH1_Q_2_S")
sDescription = "The creatures have been spotted on the western side of Nirra Hamlett.";
if (sTag == "NH1_Q_3_S")
sDescription = "The creatures have been spotted near Erolle's wagon.";
if (sTag == "NH1_Q_4_S")
sDescription = "The creatures have been spotted near Nirra Lake.";
if (sTag == "NH1_Q_5_S" || sTag == "NH1_Q_6_S")
sDescription = "The creatures have been spotted near Dorey's halfling hole.";
if (sTag == "MH1_Q_1_S")
sDescription = "The creatures have been spotted in the graveyard.";
if (sTag == "MH1_Q_2_S" || sTag == "MH1_Q_3_S" || sTag == "MH1_Q_4_S")
sDescription = "The creatures have been spotted along the road.";
if (sTag == "MH1_Q_5_S")
sDescription = "The creatures have been spotted near the road west of the guard tower.";
if (sTag == "SF1_Q_5_S")
sDescription = "The creatures have been spotted along the river.";
if (sTag == "SF1_Q_4_S")
sDescription = "The creatures have been spotted near the Evari Forest border.";
if (sTag == "SF1_Q_1_S" || sTag == "SF1_Q_2_S" || sTag == "SF1_Q_3_S")
sDescription = "The creatures have been spotted near the border to Nirra Hamlett.";
return sDescription;
}