HoS_PRC8/_mod/_module/nss/dh2_onaenter.nss
Jaysyn904 04165202c0 Initial upload
Initial upload
2024-11-25 19:36:07 -05:00

73 lines
2.7 KiB
Plaintext

///////////////////////////////////////////////////////
// DESERT HEAT 2.0 - OnAreaEnter
// By Deva Bryson Winblood
// 10/10/2003
///////////////////////////////////////////////////////
////////////////////////////
// Prototypes
////////////////////////////
void fnHeatEffects(object oPC,object oArea);
//////////////////////////////////////////// MAIN
void main()
{
object oPC=GetEnteringObject();
object oIntensity=GetNearestObjectByTag("DH2_INTENSITY",oPC);
object oArea=GetArea(oPC);
int nIntensity=30;
if (oIntensity!=OBJECT_INVALID)
nIntensity=StringToInt(GetName(oIntensity));
SetLocalInt(oPC,"DH2_Intensity",nIntensity);
if (nIntensity<5) nIntensity=30;
if (GetIsNight()==TRUE&&GetWaypointByTag("DH2_DAYNIGHT")!=OBJECT_INVALID) nIntensity=nIntensity*2;
if (GetIsPC(oPC)==TRUE)
{ // is PC
DelayCommand(IntToFloat(nIntensity),fnHeatEffects(oPC,oArea));
ExecuteScript("area_visit",OBJECT_SELF);
} // is PC
}
//////////////////////////////////////////// MAIN
///////////////////////////
// Functions
///////////////////////////
void fnHeatEffects(object oPC,object oArea)
{
int nHeat;
effect eCon=EffectAbilityDecrease(ABILITY_CONSTITUTION,1);
effect eMov=EffectMovementSpeedDecrease(20);
effect eStr=EffectAbilityDecrease(ABILITY_STRENGTH,1);
effect eLight=EffectVisualEffect(VFX_IMP_DAZED_S);
effect eFull=EffectVisualEffect(VFX_IMP_SLOW);
effect eDmg=EffectDamage(1);
if (GetArea(oPC)==oArea)
{ // still in same area
//SendMessageToPC(oPC,"fnHeatEffects("+GetName(oPC)+","+GetName(oArea)+") current area:"+GetName(GetArea(oPC)));
nHeat=GetLocalInt(oPC,"DH2_HeatLevel");
nHeat=nHeat+1;
SetLocalInt(oPC,"DH2_HeatLevel",nHeat);
if (nHeat==2)
SendMessageToPC(oPC,"You are starting to feel thirsty.");
else if (nHeat==3)
SendMessageToPC(oPC,"You need a drink of water soon.");
else if (nHeat==4)
{
SendMessageToPC(oPC,"You are extremely thirsty.");
ApplyEffectToObject(DURATION_TYPE_INSTANT,eLight,oPC,5.0);
}
else if (nHeat>4)
{ // suffer heat problems
SendMessageToPC(oPC,"You are suffering from thirst");
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eCon,oPC,140.0);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eMov,oPC,130.0);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eStr,oPC,120.0);
ApplyEffectToObject(DURATION_TYPE_INSTANT,eFull,oPC,5.0);
ApplyEffectToObject(DURATION_TYPE_INSTANT,eDmg,oPC,1.0);
} // suffer heat problems
nHeat=GetLocalInt(oPC,"DH2_Intensity");
if (GetIsNight()==TRUE&&GetWaypointByTag("DH2_DAYNIGHT")!=OBJECT_INVALID) nHeat=nHeat*2;
DelayCommand(IntToFloat(nHeat),fnHeatEffects(oPC,oArea));
} // still in same area
} // fnHeatEffects()