Jaysyn904 22947ad4b6 Initial Upload
Initial Upload
2023-08-08 16:22:17 -04:00

142 lines
6.0 KiB
Plaintext

//:://////////////////////////////////////////////
//:: Locke's Smart Tracker
//:: Big thanks to Barvas and The Order of the Hidden!
//:: http://www.orderofthehidden.org/
//:: http://stormtemplar.project404.org
//:://////////////////////////////////////////////
#include "prc_inc_racial"
object oTracks = OBJECT_SELF;
void CleanTracks()
{
DeleteLocalInt(oTracks, "nGroupSize");
DeleteLocalInt(oTracks, "creaturetimehour");
DeleteLocalInt(oTracks, "creaturetimeday");
DeleteLocalInt(oTracks, "creaturesize");
DeleteLocalString(oTracks, "sLastCreature");
DeleteLocalString(oTracks, "sCreaturesSoFar");
}
void main()
{
DelayCommand(300.0, CleanTracks());
//Check who walks through
object oUsed = GetEnteringObject();
//Check if it is a PC
int PCCheck = GetIsPC(oUsed);
int iSize;
int iRace;
string sRace;
//If the entering object isn't a PC, store variables
if (PCCheck == FALSE || GetIsDMPossessed(oUsed) == TRUE)
{
int iGroupSize = GetLocalInt(oTracks, "nGroupSize");
//clear variables in case it's used twice
DeleteLocalInt(oTracks, "creaturetimehour");
DeleteLocalInt(oTracks, "creaturetimeday");
//Get the time
int iHour = GetTimeHour();
int iDay = GetCalendarDay();
//Get the creature info
iSize = GetCreatureSize(oUsed);
int iRace = MyPRCGetRacialType(oUsed);
string sData;
//Store the info
SetLocalInt(oTracks, "nGroupSize", iGroupSize + 1);
SetLocalInt(oTracks, "sLastCreature", iRace);
SetLocalInt(oTracks, "sCreaturesSoFar", iRace);
SetLocalInt(oTracks, "creaturetimehour", iHour);
SetLocalInt(oTracks, "creaturetimeday", iDay);
SetLocalInt(oTracks, "creaturesize", iSize);
int CreatureRace = GetLocalInt(oTracks, "sLastCreature");
string sRace;
switch(CreatureRace)
{
case RACIAL_TYPE_DWARF: sData="Dwarf"; break;
case RACIAL_TYPE_ELF: sData = "Elf"; break;
case RACIAL_TYPE_GNOME: sData = "Gnome"; break;
case RACIAL_TYPE_HALFELF: sData = "Half-elf"; break;
case RACIAL_TYPE_HALFLING: sData = "Halfling"; break;
case RACIAL_TYPE_HALFORC: sData = "Half-Orc"; break;
case RACIAL_TYPE_HUMAN: sData="Human"; break;
default: sData = GetName(oUsed); break;
}
string sCurrentCreature = sData;
string sLastCreature = GetLocalString(oTracks, "sLastCreature");
string sCreaturesSoFar = GetLocalString(oTracks, "sCreaturesSoFar");
if (sLastCreature == "") //No creatures logged yet
SetLocalString(oTracks, "sLastCreature", sCurrentCreature);
else if (sCreaturesSoFar == "") //Only one creature so far
{
SetLocalString(oTracks, "sCreaturesSoFar", "a " + sLastCreature);
SetLocalString(oTracks, "sLastCreature", sCurrentCreature);
}
else //more than one creature has gone by.
{
SetLocalString(oTracks, "sCreaturesSoFar", sCreaturesSoFar + ", a " + sLastCreature);
SetLocalString(oTracks, "sLastCreature", sCurrentCreature);
}
}
int iGroupSize = GetLocalInt(oTracks, "nGroupSize");
if (PCCheck == TRUE)
{
//Get the PC's spot skill
int iSpot = GetSkillRank(SKILL_SPOT, oUsed);
//Check classes. Ranger, druid, or barbarian are auto-succeed
//I'm using 15 as the spot rank skill. It can be changed, of course
if (GetLevelByClass(CLASS_TYPE_RANGER, oUsed) >= 1 || GetLevelByClass(CLASS_TYPE_DRUID, oUsed) >= 1
|| GetLevelByClass(CLASS_TYPE_BARBARIAN, oUsed) >= 1
|| GetLevelByClass(CLASS_TYPE_TOTEMIST, oUsed) >= 1
|| GetLevelByClass(CLASS_TYPE_SHAMAN, oUsed) >= 1
|| iSpot >= 25)
{
//Retrieve the creature info
int TimeHour = GetLocalInt(oTracks, "creaturetimehour");
int TimeDay = GetLocalInt(oTracks, "creaturetimeday");
//Convert it into strings so it can be said by the PC
string sDay = IntToString(TimeDay);
string sHour = IntToString(TimeHour);
//Say it
string sLastCreature = GetLocalString(oTracks, "sLastCreature");
string sCreaturesSoFar = GetLocalString(oTracks, "sCreaturesSoFar");
if (iGroupSize == 0)
{
AssignCommand(oUsed, SpeakString("Looks like nothing has been around here recently."));
}
else
{
string sMessage = IntToString(iGroupSize) + " creature(s) moved through here: ";
if (sCreaturesSoFar != "")
sMessage = sMessage + sCreaturesSoFar + ", and a ";
sMessage = sMessage + sLastCreature + " ";
AssignCommand(oUsed, SpeakString(sMessage+ "today at hour " +sHour+ "."));
}
}
else
{
return;
//If the PC fails to meet the above criteria,
//the PC can only tell the creature size
// if (iGroupSize == 0)
// {
// AssignCommand(oUsed, SpeakString("Looks like nothing has been around here recently."));
// }
// else
// {
// iSize = GetLocalInt(oTracks, "creaturesize");
// switch(iSize)
// {
// case 2: AssignCommand(oUsed, SpeakString("I can only make out one fresh set. Looks like a small creature went past here."));break;
// case 3: AssignCommand(oUsed, SpeakString("I can only make out one fresh set. Looks like a medium creature went past here."));;break;
// case 4: AssignCommand(oUsed, SpeakString("I can only make out one fresh set. Looks like a large creature went past here."));;break;
// case 5: AssignCommand(oUsed, SpeakString("I can only make out one fresh set. Looks like a gigantic creature went past here."));; break;
// }
// }
}
}
}