Rune_PRC8/_module/nss/playerdying.nss
Jaysyn904 d1c309ae63 Initial commit
Initial commit
2024-09-13 09:10:39 -04:00

49 lines
2.0 KiB
Plaintext

void bleed(int iBleedAmt)
{
effect eBleedEff;
/* keep executing recursively until character is dead or at +1 hit points */
if (GetCurrentHitPoints() <= 0) {
/* a positive bleeding amount means damage, otherwise heal the character */
if (iBleedAmt > 0) {
eBleedEff = EffectDamage(iBleedAmt);
} else {
eBleedEff = EffectHeal(-iBleedAmt); /* note the negative sign */
}
ApplyEffectToObject(DURATION_TYPE_INSTANT, eBleedEff, OBJECT_SELF);
/* -10 hit points is the death threshold, at or beyond it the character dies */
if (GetCurrentHitPoints() <= -10)
{
/* scream one last time */
PlayVoiceChat(VOICE_CHAT_DEATH);
/* make death dramatic */
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DEATH), OBJECT_SELF);
/* now kill them */
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDeath(), OBJECT_SELF);
return;
}
if (iBleedAmt > 0) { /* only check if character has not stablized */
if (d10(1) == 1) { /* 10% chance to stablize */
iBleedAmt = -iBleedAmt; /* reverse the bleeding process */
PlayVoiceChat(VOICE_CHAT_LAUGH); /* laugh at death -- this time */
} else {
switch (d6()) {
case 1: PlayVoiceChat(VOICE_CHAT_PAIN1); break;
case 2: PlayVoiceChat(VOICE_CHAT_PAIN2); break;
case 3: PlayVoiceChat(VOICE_CHAT_PAIN3); break;
case 4: PlayVoiceChat(VOICE_CHAT_HEALME); break;
case 5: PlayVoiceChat(VOICE_CHAT_NEARDEATH); break;
case 6: PlayVoiceChat(VOICE_CHAT_HELP);
}
}
}
DelayCommand(6.0,bleed(iBleedAmt)); /* do this again next round */
}
}
void main()
{
object oDying = GetLastPlayerDying();
AssignCommand(oDying, ClearAllActions());
AssignCommand(oDying, bleed(1));
}