generated from Jaysyn/ModuleTemplate
107 lines
3.5 KiB
Plaintext
107 lines
3.5 KiB
Plaintext
|
|
void runAgain(object oPlayer)
|
|
{
|
|
SetLocalInt(oPlayer, "LAST_HP", GetCurrentHitPoints(oPlayer));
|
|
effect eParalyze = EffectParalyze();
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eParalyze, oPlayer, 6.0);
|
|
DelayCommand(6.0, ExecuteScript("js_util_bleed", oPlayer));
|
|
}
|
|
|
|
void main()
|
|
{
|
|
object oPlayer = OBJECT_SELF;
|
|
if (!GetIsObjectValid(oPlayer))
|
|
return;
|
|
|
|
int iCurrentHitPoints = GetCurrentHitPoints(oPlayer);
|
|
int iLastHitPoints = GetLocalInt(oPlayer, "LAST_HP");
|
|
|
|
if (iCurrentHitPoints <= -10) // player is dead
|
|
{
|
|
SendMessageToPC(oPlayer, "You have bled to death.");
|
|
effect eDeath = EffectDeath(FALSE, FALSE);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oPlayer);
|
|
SetLocalInt(oPlayer, "BLEED_STATUS", 3); // status dead
|
|
AssignCommand(oPlayer, ClearAllActions());
|
|
return;
|
|
}
|
|
|
|
if (iCurrentHitPoints >= 1) // player is alive & conscious
|
|
{
|
|
SetLocalInt(oPlayer, "BLEED_STATUS", 0); // status alive
|
|
SendMessageToPC(oPlayer, "You have regained consciousness.");
|
|
return;
|
|
}
|
|
|
|
if (GetLocalInt(oPlayer, "BLEED_STATUS") == 1) // status stable
|
|
{
|
|
if (d10() == 5) // 10% heal roll
|
|
{
|
|
effect eHeal = EffectHeal(1);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oPlayer);
|
|
SendMessageToPC(oPlayer, "You heal 1 hit point.");
|
|
}
|
|
if (GetCurrentHitPoints(oPlayer) >= 1) // player is alive & conscious
|
|
{
|
|
SetLocalInt(oPlayer, "BLEED_STATUS", 0); // status alive
|
|
SendMessageToPC(oPlayer, "You have regained consciousness.");
|
|
return;
|
|
}
|
|
AssignCommand(oPlayer, ClearAllActions());
|
|
runAgain(oPlayer);
|
|
return;
|
|
}
|
|
|
|
if (iCurrentHitPoints > iLastHitPoints || (d10() == 5)) // someone healed player
|
|
{ // or 10% stabilize roll
|
|
SetLocalInt(oPlayer, "BLEED_STATUS", 1); // status stable
|
|
SendMessageToPC(oPlayer, "You have stabilized.");
|
|
AssignCommand(oPlayer, ClearAllActions());
|
|
runAgain(oPlayer);
|
|
return;
|
|
}
|
|
|
|
if (GetLocalInt(oPlayer, "BLEED_STATUS") != 2) // status bleeding
|
|
return;
|
|
|
|
effect eDamage = EffectDamage(1, DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_PLUS_FIVE);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oPlayer);
|
|
string msg = "You are bleeding to death! " + IntToString(GetCurrentHitPoints(oPlayer));
|
|
SendMessageToPC(oPlayer, msg);
|
|
AssignCommand(oPlayer, ClearAllActions());
|
|
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) <= -10) // player is dead
|
|
{
|
|
SendMessageToPC(oPlayer, "You have bled to death.");
|
|
effect eDeath = EffectDeath(FALSE, FALSE);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oPlayer);
|
|
SetLocalInt(oPlayer, "BLEED_STATUS", 3); // status dead
|
|
AssignCommand(oPlayer, ClearAllActions());
|
|
return;
|
|
}
|
|
|
|
runAgain(oPlayer);
|
|
}
|