Initial upload

Initial upload.  PRC8 has been added.  Module compiles, PRC's default AI & treasure scripts have been integrated.  Started work on top hak for SLA / Ability / Scripting modifications.
This commit is contained in:
Jaysyn904
2024-03-11 23:44:08 -04:00
parent c4b5794c59
commit 7b9e44ebbb
11454 changed files with 10436475 additions and 0 deletions

View File

@@ -0,0 +1,165 @@
////////:://////////////////////////////////////////////////////////////
//:: Name mod_heartbeat
//:: mod_heartbeat
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
This script goes in OnHeartBeat in the Module Properties Events
It checks players to see if their PlayerState is other than Alive
and takes steps as noted below to affect them.
*/
//:://////////////////////////////////////////////
//:: Created By: Pad O'Lion (inspired by Archaegeo)
//:: Created On: 06/29/2002
//::////////////////////////////////////////////////
//#include "array_api"
#include "rpo_inc"
#include "jw_wolf_script"
void main()
{
if(BLEEDSYSTEM)
{
object oModule = GetModule();
int nHour=GetTimeHour();
if (GetLocalInt(OBJECT_SELF,"nHour")!=nHour)
{
ExportAllCharacters();
SetLocalInt(OBJECT_SELF,"nHour",nHour);
}
int nDay=GetCalendarDay();
int iEverybodyAlive = GetLocalInt(oModule, "PWS_EverybodyAlive");
/// Only bother looping through players if there are disabled, dying, stable or dead players
if (1) {
object oPlayer = GetFirstPC();
object oDeathAmulet;
// Assume everyone is alive till tracking finds otherwise
int iEverybodyReallyAlive = TRUE;
while (GetIsObjectValid(oPlayer))
{
int iPlayerState = GetLocalInt(oPlayer, "PlayerState");
// Remove death amulet if player got healed and/or reset state to alive.
if( (iPlayerState==PWS_PLAYER_STATE_STABLE ||
iPlayerState==PWS_PLAYER_STATE_DYING ||
iPlayerState==PWS_PLAYER_STATE_DEAD) &&
GetCurrentHitPoints(oPlayer) > 0)
{
SetLocalInt(oPlayer, "PlayerState", PWS_PLAYER_STATE_ALIVE);
RemoveDeathAmulet(oPlayer);
}
// Whoops, we found a dead one.
if (iPlayerState==PWS_PLAYER_STATE_DEAD) //&& GetLocalInt(oPlayer, "RPO_Reputation") != RPO_PLAYER_REPUTATION_CRIMINAL)
{
iEverybodyReallyAlive = FALSE;
}
else if (iPlayerState==PWS_PLAYER_STATE_RESCUED)
{
iEverybodyReallyAlive = FALSE;
}
else if (iPlayerState==PWS_PLAYER_STATE_DYING)
{
// We found someone dying
iEverybodyReallyAlive = FALSE;
// They bleed!
effect eDamage = EffectDamage(1, DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_PLUS_FIVE);
if (GetCurrentHitPoints(oPlayer)<1)
{
ApplyEffectToObject( DURATION_TYPE_INSTANT, eDamage, oPlayer);
}
int which = d6();
switch (which)
{
case 1:
PlayVoiceChat (VOICE_CHAT_PAIN1, oPlayer);
break;
case 2:
PlayVoiceChat (VOICE_CHAT_PAIN2, oPlayer);
break;
case 3:
PlayVoiceChat (VOICE_CHAT_PAIN3, oPlayer);
break;
case 4:
PlayVoiceChat (VOICE_CHAT_HEALME, oPlayer);
break;
case 5:
PlayVoiceChat (VOICE_CHAT_NEARDEATH, oPlayer);
break;
case 6:
PlayVoiceChat (VOICE_CHAT_HELP, oPlayer);
break;
}
if (GetCurrentHitPoints(oPlayer) <= -9)
{
PlayVoiceChat (VOICE_CHAT_DEATH, oPlayer);
}
}
// If they are stable or disabled, let them pray to their god or wait for
/// help as applicable. (Stable means between 0 and -9 and not bleeding)
else if (iPlayerState == PWS_PLAYER_STATE_DISABLED ||
iPlayerState == PWS_PLAYER_STATE_STABLE)
{
// We found someone Disabled or Stable
iEverybodyReallyAlive = FALSE;
// Check for spontaneous healing
if(
(iPlayerState == PWS_PLAYER_STATE_STABLE &&
GetLocalInt(oPlayer,"LastRecCheckHour") < nHour) ||
(iPlayerState == PWS_PLAYER_STATE_DISABLED &&
GetLocalInt(oPlayer,"LastRecCheckDay") < nDay)
)
{
if(d100() <= 10)
{
SendMessageToPC(oPlayer,"You recover a little.");
effect eHeal = EffectHeal(1);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oPlayer);
if(GetCurrentHitPoints(oPlayer)==0)
{
SetLocalInt(oPlayer, "PlayerState", PWS_PLAYER_STATE_DISABLED);
SendMessageToPC(oPlayer, "You are now Disabled.");
}
else if(GetCurrentHitPoints(oPlayer)>0)
SetLocalInt(oPlayer,"PlayerState",PWS_PLAYER_STATE_ALIVE);
}
else
{
effect eDamage = EffectDamage(1, DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_PLUS_FIVE);
ApplyEffectToObject( DURATION_TYPE_INSTANT, eDamage, oPlayer);
SendMessageToPC(oPlayer,"You slip closer to death.");
}
SetLocalInt(oPlayer, "LastRecCheckHour", nHour);
SetLocalInt(oPlayer, "LastRecCheckDay", nDay);
}
}
oPlayer = GetNextPC();
}
if (iEverybodyReallyAlive)
// We didn't find any dead players, so assume everybody is alive
SetLocalInt(oModule, "PWS_EverybodyAlive", TRUE);
}
}
else if(DEATHSYSTEM)
{
// Check for Death Amulets on folks who are alive again.
object oPlayer = GetFirstPC();
RemoveDeathAmulet(oPlayer);
}
}