142 lines
6.0 KiB
Plaintext
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;
|
|
// }
|
|
// }
|
|
}
|
|
}
|
|
}
|
|
|