2025/07/15 Update
Added PEPS AI. Updated module name. Set all henchmen to have a random race &/or class based name using a custom version of Markshire's Nomeclature scripts, as well as appearance. Set Constructs, Undead, Outsiders & Elementals to not require food or drink. Full compile.
This commit is contained in:
@@ -1,170 +1,184 @@
|
||||
#include "prc_inc_racial"
|
||||
|
||||
void main()
|
||||
{
|
||||
object oPC = GetLastPCRested();
|
||||
|
||||
if (GetLastRestEventType()==REST_EVENTTYPE_REST_STARTED)
|
||||
{
|
||||
int nWM = d100(1);
|
||||
string sLevel = IntToString(GetHitDice(oPC));
|
||||
string sResref = "wm_" + sLevel;
|
||||
object oWP = GetNearestObjectByTag("wmwp");
|
||||
location lWP = GetLocation(oWP);
|
||||
if (nWM<=10)
|
||||
{
|
||||
object oSpawn = CreateObject(OBJECT_TYPE_CREATURE,sResref,lWP);
|
||||
AssignCommand(oSpawn,ActionAttack(oPC));
|
||||
}
|
||||
}
|
||||
else if (GetLastRestEventType()==REST_EVENTTYPE_REST_FINISHED||REST_EVENTTYPE_REST_CANCELLED)
|
||||
{
|
||||
int nHour = GetTimeHour();
|
||||
int nMinute = GetTimeMinute();
|
||||
int nSecond = GetTimeSecond();
|
||||
int nMillisecond = GetTimeMillisecond();
|
||||
// Advance the time 8 hours.
|
||||
nHour += 8;
|
||||
|
||||
// Set the new time
|
||||
int iPW = GetLocalInt(GetModule(), "PW_MODE");
|
||||
object oPC = GetLastPCRested();
|
||||
|
||||
//:: Skip if running as a Persistant World MP module
|
||||
if (!iPW)
|
||||
int nRace = MyPRCGetRacialType(oPC);
|
||||
|
||||
if (GetLastRestEventType()==REST_EVENTTYPE_REST_STARTED)
|
||||
{
|
||||
SetTime(nHour, nMinute, nSecond, nMillisecond);
|
||||
int nWM = d100(1);
|
||||
string sLevel = IntToString(GetHitDice(oPC));
|
||||
string sResref = "wm_" + sLevel;
|
||||
object oWP = GetNearestObjectByTag("wmwp");
|
||||
location lWP = GetLocation(oWP);
|
||||
if (nWM<=10)
|
||||
{
|
||||
object oSpawn = CreateObject(OBJECT_TYPE_CREATURE,sResref,lWP);
|
||||
AssignCommand(oSpawn,ActionAttack(oPC));
|
||||
}
|
||||
}
|
||||
else if (GetLastRestEventType()==REST_EVENTTYPE_REST_FINISHED||REST_EVENTTYPE_REST_CANCELLED)
|
||||
{
|
||||
int nHour = GetTimeHour();
|
||||
int nMinute = GetTimeMinute();
|
||||
int nSecond = GetTimeSecond();
|
||||
int nMillisecond = GetTimeMillisecond();
|
||||
// Advance the time 8 hours.
|
||||
nHour += 8;
|
||||
|
||||
// See how hungry and thirsty PC is
|
||||
int ibHungry = GetLocalInt(oPC,"ate");
|
||||
int ibThirsty = GetLocalInt(oPC,"drank");
|
||||
// Set the new time
|
||||
int iPW = GetLocalInt(GetModule(), "PW_MODE");
|
||||
|
||||
// Make them wake up hungrier and thirstier
|
||||
SetLocalInt(oPC,"ate",ibHungry-1);
|
||||
SetLocalInt(oPC,"drank",ibThirsty-1);
|
||||
//:: Skip if running as a Persistant World MP module
|
||||
if (!iPW)
|
||||
{
|
||||
SetTime(nHour, nMinute, nSecond, nMillisecond);
|
||||
}
|
||||
|
||||
// See how hungry and thirsty PC is
|
||||
int ibHungry = GetLocalInt(oPC,"ate");
|
||||
int ibThirsty = GetLocalInt(oPC,"drank");
|
||||
|
||||
//get new values
|
||||
int iHungry = GetLocalInt(oPC,"ate");
|
||||
int iThirsty = GetLocalInt(oPC,"drank");
|
||||
//apply hunger and thirst penalties
|
||||
switch (iHungry)
|
||||
{
|
||||
case -1:
|
||||
{
|
||||
effect eEffect = EffectAbilityDecrease(ABILITY_CONSTITUTION, 2);
|
||||
eEffect = ExtraordinaryEffect(eEffect);
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oPC);
|
||||
SendMessageToPC(oPC,"You rest well, but you awaken hungry.");
|
||||
break;
|
||||
}
|
||||
case -2:
|
||||
{
|
||||
effect eEffect = EffectAbilityDecrease(ABILITY_CONSTITUTION, 4);
|
||||
eEffect = ExtraordinaryEffect(eEffect);
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oPC);
|
||||
SendMessageToPC(oPC,"You rest well, but you awaken quite hungry.");
|
||||
break;
|
||||
}
|
||||
case -3:
|
||||
{
|
||||
effect eEffect = EffectAbilityDecrease(ABILITY_CONSTITUTION, 5);
|
||||
eEffect = ExtraordinaryEffect(eEffect);
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oPC);
|
||||
SendMessageToPC(oPC,"You rest well, but you awaken really hungry.");
|
||||
break;
|
||||
}
|
||||
case -4:
|
||||
{
|
||||
effect eEffect = EffectAbilityDecrease(ABILITY_CONSTITUTION, 6);
|
||||
eEffect = ExtraordinaryEffect(eEffect);
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oPC);
|
||||
SendMessageToPC(oPC,"You rest well, but you awaken very hungry.");
|
||||
break;
|
||||
}
|
||||
case -5:
|
||||
{
|
||||
effect eEffect = EffectAbilityDecrease(ABILITY_CONSTITUTION, 7);
|
||||
eEffect = ExtraordinaryEffect(eEffect);
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oPC);
|
||||
SendMessageToPC(oPC,"You rest well, but you awaken painfully hungry.");
|
||||
break;
|
||||
}
|
||||
case -6:
|
||||
{
|
||||
effect eEffect = EffectAbilityDecrease(ABILITY_CONSTITUTION, 8);
|
||||
eEffect = ExtraordinaryEffect(eEffect);
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oPC);
|
||||
SendMessageToPC(oPC,"You rest well, but you awaken extremely hungry.");
|
||||
break;
|
||||
}
|
||||
case -7:
|
||||
{
|
||||
effect eEffect = EffectAbilityDecrease(ABILITY_CONSTITUTION, 10);
|
||||
eEffect = ExtraordinaryEffect(eEffect);
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oPC);
|
||||
SendMessageToPC(oPC,"You rest well, but you are starving to death.");
|
||||
break;
|
||||
}
|
||||
case -8:
|
||||
{
|
||||
effect eEffect = EffectAbilityDecrease(ABILITY_CONSTITUTION, 12);
|
||||
eEffect = ExtraordinaryEffect(eEffect);
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oPC);
|
||||
SendMessageToPC(oPC,"You will die soon if you don't eat.");
|
||||
break;
|
||||
}
|
||||
case -9:
|
||||
{
|
||||
effect eEffect = EffectDeath();
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oPC);
|
||||
SendMessageToPC(oPC,"You have starved to death.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
switch (iThirsty)
|
||||
{
|
||||
case -1:
|
||||
{
|
||||
effect eEffect = EffectNegativeLevel(1,FALSE);
|
||||
eEffect = ExtraordinaryEffect(eEffect);
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oPC);
|
||||
SendMessageToPC(oPC,"You awaken and are quite thirsty.");
|
||||
break;
|
||||
}
|
||||
case -2:
|
||||
{
|
||||
effect eEffect = EffectNegativeLevel(2,FALSE);
|
||||
eEffect = ExtraordinaryEffect(eEffect);
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oPC);
|
||||
SendMessageToPC(oPC,"You awaken and are extremely thirsty.");
|
||||
break;
|
||||
}
|
||||
case -3:
|
||||
{
|
||||
effect eEffect = EffectNegativeLevel(3,FALSE);
|
||||
eEffect = ExtraordinaryEffect(eEffect);
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oPC);
|
||||
SendMessageToPC(oPC,"You awaken and are dreadfully thirsty.");
|
||||
break;
|
||||
}
|
||||
case -4:
|
||||
{
|
||||
effect eEffect = EffectNegativeLevel(4,FALSE);
|
||||
eEffect = ExtraordinaryEffect(eEffect);
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oPC);
|
||||
SendMessageToPC(oPC,"You are dying of thirst, you need to find something to drink.");
|
||||
break;
|
||||
}
|
||||
case -5:
|
||||
{
|
||||
effect eEffect = EffectDeath();
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oPC);
|
||||
SendMessageToPC(oPC,"You have died of thirst.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Make them wake up hungrier and thirstier
|
||||
SetLocalInt(oPC,"ate",ibHungry-1);
|
||||
SetLocalInt(oPC,"drank",ibThirsty-1);
|
||||
|
||||
if (
|
||||
nRace == RACIAL_TYPE_CONSTRUCT ||
|
||||
nRace == RACIAL_TYPE_UNDEAD ||
|
||||
nRace == RACIAL_TYPE_ELEMENTAL ||
|
||||
nRace == RACIAL_TYPE_OUTSIDER
|
||||
)
|
||||
{
|
||||
SetLocalInt(oPC, "ate", 99);
|
||||
SetLocalInt(oPC, "drank", 99);
|
||||
}
|
||||
|
||||
//get new values
|
||||
int iHungry = GetLocalInt(oPC,"ate");
|
||||
int iThirsty = GetLocalInt(oPC,"drank");
|
||||
//apply hunger and thirst penalties
|
||||
switch (iHungry)
|
||||
{
|
||||
case -1:
|
||||
{
|
||||
effect eEffect = EffectAbilityDecrease(ABILITY_CONSTITUTION, 2);
|
||||
eEffect = ExtraordinaryEffect(eEffect);
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oPC);
|
||||
SendMessageToPC(oPC,"You rest well, but you awaken hungry.");
|
||||
break;
|
||||
}
|
||||
case -2:
|
||||
{
|
||||
effect eEffect = EffectAbilityDecrease(ABILITY_CONSTITUTION, 4);
|
||||
eEffect = ExtraordinaryEffect(eEffect);
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oPC);
|
||||
SendMessageToPC(oPC,"You rest well, but you awaken quite hungry.");
|
||||
break;
|
||||
}
|
||||
case -3:
|
||||
{
|
||||
effect eEffect = EffectAbilityDecrease(ABILITY_CONSTITUTION, 5);
|
||||
eEffect = ExtraordinaryEffect(eEffect);
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oPC);
|
||||
SendMessageToPC(oPC,"You rest well, but you awaken really hungry.");
|
||||
break;
|
||||
}
|
||||
case -4:
|
||||
{
|
||||
effect eEffect = EffectAbilityDecrease(ABILITY_CONSTITUTION, 6);
|
||||
eEffect = ExtraordinaryEffect(eEffect);
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oPC);
|
||||
SendMessageToPC(oPC,"You rest well, but you awaken very hungry.");
|
||||
break;
|
||||
}
|
||||
case -5:
|
||||
{
|
||||
effect eEffect = EffectAbilityDecrease(ABILITY_CONSTITUTION, 7);
|
||||
eEffect = ExtraordinaryEffect(eEffect);
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oPC);
|
||||
SendMessageToPC(oPC,"You rest well, but you awaken painfully hungry.");
|
||||
break;
|
||||
}
|
||||
case -6:
|
||||
{
|
||||
effect eEffect = EffectAbilityDecrease(ABILITY_CONSTITUTION, 8);
|
||||
eEffect = ExtraordinaryEffect(eEffect);
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oPC);
|
||||
SendMessageToPC(oPC,"You rest well, but you awaken extremely hungry.");
|
||||
break;
|
||||
}
|
||||
case -7:
|
||||
{
|
||||
effect eEffect = EffectAbilityDecrease(ABILITY_CONSTITUTION, 10);
|
||||
eEffect = ExtraordinaryEffect(eEffect);
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oPC);
|
||||
SendMessageToPC(oPC,"You rest well, but you are starving to death.");
|
||||
break;
|
||||
}
|
||||
case -8:
|
||||
{
|
||||
effect eEffect = EffectAbilityDecrease(ABILITY_CONSTITUTION, 12);
|
||||
eEffect = ExtraordinaryEffect(eEffect);
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oPC);
|
||||
SendMessageToPC(oPC,"You will die soon if you don't eat.");
|
||||
break;
|
||||
}
|
||||
case -9:
|
||||
{
|
||||
effect eEffect = EffectDeath();
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oPC);
|
||||
SendMessageToPC(oPC,"You have starved to death.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
switch (iThirsty)
|
||||
{
|
||||
case -1:
|
||||
{
|
||||
effect eEffect = EffectNegativeLevel(1,FALSE);
|
||||
eEffect = ExtraordinaryEffect(eEffect);
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oPC);
|
||||
SendMessageToPC(oPC,"You awaken and are quite thirsty.");
|
||||
break;
|
||||
}
|
||||
case -2:
|
||||
{
|
||||
effect eEffect = EffectNegativeLevel(2,FALSE);
|
||||
eEffect = ExtraordinaryEffect(eEffect);
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oPC);
|
||||
SendMessageToPC(oPC,"You awaken and are extremely thirsty.");
|
||||
break;
|
||||
}
|
||||
case -3:
|
||||
{
|
||||
effect eEffect = EffectNegativeLevel(3,FALSE);
|
||||
eEffect = ExtraordinaryEffect(eEffect);
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oPC);
|
||||
SendMessageToPC(oPC,"You awaken and are dreadfully thirsty.");
|
||||
break;
|
||||
}
|
||||
case -4:
|
||||
{
|
||||
effect eEffect = EffectNegativeLevel(4,FALSE);
|
||||
eEffect = ExtraordinaryEffect(eEffect);
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oPC);
|
||||
SendMessageToPC(oPC,"You are dying of thirst, you need to find something to drink.");
|
||||
break;
|
||||
}
|
||||
case -5:
|
||||
{
|
||||
effect eEffect = EffectDeath();
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oPC);
|
||||
SendMessageToPC(oPC,"You have died of thirst.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user