//:://///////////////////////////////////////////// //:: Script Name: onplayerdying //::////////////////////////////////////////////// /* This script handles the default behavior that occurs when a character is dying. Dying is when the character is between 0 and -9 hit points; -10 and below is death. To use, redirect the OnDying event script of the module to this script. */ //::////////////////////////////////////////////// //:: Author : Scott Thorne //:: Updated: July 25, 2002 //::////////////////////////////////////////////// //::Modified by Genisys (Guile) //::Modified On: 4/23/08 (Updated 8/10/08) ////////////////////////////////////////////////// //::Modified by Jaysyn (Guile) //::Modified On: 2025-10-21 08:50:59 ////////////////////////////////////////////////// //Required Include #include "nw_i0_tool" //PROTOTYPE DECLARED void bleed(int iBleedAmt); //Main Script void main() { ExecuteScript("prc_ondying", OBJECT_SELF); //Declare Major Variables object oDying = GetLastPlayerDying(); object oPlayer = GetLastPlayerDying(); object oPC = GetLastPlayerDying(); string ddVarName = "dd"+GetName(oPC); object oModule = GetModule(); SetLocalInt (oModule, ddVarName, 1); //If the player is being tortured in Hell, ressurect them... object hell = GetArea(oPlayer); object helltest = GetArea(GetObjectByTag("satan1")); if (hell == helltest) { DelayCommand(3.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectResurrection(), oPlayer)); return; } AssignCommand(oDying, ClearAllActions()); //AssignCommand(oDying, bleed(1)); //Main Script End } void bleed(int iBleedAmt) { object oPC = GetLastPlayerDying(); if (!GetIsPC(oPC)) return; string ddVarName = "dd" + GetName(oPC); object oModule = GetModule(); int nHP = GetCurrentHitPoints(oPC); if (nHP > 0) // stop bleeding if above 0 HP { DeleteLocalInt(oModule, ddVarName); return; } if (nHP <= -10) { SetLocalInt(oModule, ddVarName, 1); PlayVoiceChat(VOICE_CHAT_DEATH); ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DEATH), oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDeath(), oPC); return; } // still bleeding effect eBleedEff; if (iBleedAmt > 0) eBleedEff = EffectDamage(iBleedAmt); else eBleedEff = EffectHeal(-iBleedAmt); ApplyEffectToObject(DURATION_TYPE_INSTANT, eBleedEff, oPC); // chance to stabilize if (iBleedAmt > 0 && d10(1) == 1) { iBleedAmt = -iBleedAmt; PlayVoiceChat(VOICE_CHAT_LAUGH); } else if (iBleedAmt > 0) { 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); break; } } DelayCommand(6.0, bleed(iBleedAmt)); } //PROTOTYPE DEFINED /* void bleed(int iBleedAmt) { object oPC = GetLastPlayerDying(); if (!GetIsPC(oPC)){return;} string ddVarName = "dd"+GetName(oPC); object oModule = GetModule(); 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) { SetLocalInt (oModule, ddVarName, 1); PlayVoiceChat(VOICE_CHAT_DEATH); // scream one last time ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DEATH), OBJECT_SELF); // make death dramatic ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDeath(), OBJECT_SELF); // now kill them 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 } } */