Initial module commit
Initial module commit.
This commit is contained in:
71
_module/nss/drownud.nss
Normal file
71
_module/nss/drownud.nss
Normal file
@@ -0,0 +1,71 @@
|
||||
void Suffocation(object oCreature, int nCon, int nConMod)
|
||||
{
|
||||
// Check nTimer int set in OnEnter and incremented in OnHeartbeat void main()
|
||||
// When the PC runs out of air (after 2 rounds per point of Constitution) start drowning process
|
||||
if(GetLocalInt(oCreature, "nTimer") > (nCon * 2))
|
||||
{
|
||||
// Get current local int values on the PC
|
||||
int nDC = GetLocalInt(oCreature, "nDC");
|
||||
int nFail = GetLocalInt(oCreature, "nFail");
|
||||
int nDrowning = GetLocalInt(oCreature, "nDrowning");
|
||||
|
||||
int nd20 = d20(); // Roll a d20
|
||||
|
||||
// Feedback for the player, showing the roll, modifier, DC, and success or failure
|
||||
string nFeedBackPass = "You attempt to hold your breath longer. " + IntToString(nd20) + " + " + IntToString(nConMod) + " = " + IntToString(nd20 + nConMod) + " (DC " + IntToString(nDC) + ") *Success*";
|
||||
string nFeedBackFail = "You attempt to hold your breath longer. " + IntToString(nd20) + " + " + IntToString(nConMod) + " = " + IntToString(nd20 + nConMod) + " (DC " + IntToString(nDC) + ") *Failure*";
|
||||
|
||||
// If the Constitution check was successful, send the result and increase the DC to try again next round
|
||||
if((nd20 + nConMod >= nDC) && nFail != 1)
|
||||
{
|
||||
SendMessageToPC(oCreature, nFeedBackPass);
|
||||
SetLocalInt(oCreature, "nDC", nDC + 1);
|
||||
}
|
||||
|
||||
// If the check fails, send the result and set the local int nFail to 1
|
||||
if((nd20 + nConMod < nDC) && nFail != 1)
|
||||
{
|
||||
SendMessageToPC(oCreature, nFeedBackFail);
|
||||
SetLocalInt(oCreature, "nFail", 1);
|
||||
}
|
||||
|
||||
nFail = GetLocalInt(oCreature, "nFail"); // Update nFail
|
||||
|
||||
// Drowning after failing a Constitution check lasts for three rounds:
|
||||
// Round 1 - PC has hitpoints set to 0, and has fallen unconscious
|
||||
// Round 2 - PC is completely out of oxygen abd begins taking in water
|
||||
// Round 3 - PC dies from suffocation
|
||||
if(nFail == 1)
|
||||
{
|
||||
switch(nDrowning)
|
||||
{
|
||||
case 0:
|
||||
SetLocalInt(oCreature, "nDrowning", 1);
|
||||
while(GetCurrentHitPoints(oCreature) > 0)
|
||||
{
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(GetCurrentHitPoints(oCreature)), oCreature);
|
||||
}
|
||||
SendMessageToPC(oCreature, "You have fallen unconscious due to lack of oxygen.");
|
||||
break;
|
||||
case 1:
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(1), oCreature);
|
||||
SetLocalInt(oCreature, "nDrowning", 2);
|
||||
SendMessageToPC(oCreature, "Your lungs begin to fill with water.");
|
||||
break;
|
||||
case 2:
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(20), oCreature);
|
||||
SendMessageToPC(oCreature, "You have drowned.");
|
||||
|
||||
// Reset local ints on PC after death
|
||||
SetLocalInt(oCreature, "nDC", 10);
|
||||
SetLocalInt(oCreature, "nFail", 0);
|
||||
SetLocalInt(oCreature, "nDrowning", 0);
|
||||
SetLocalInt(oCreature, "nTimer", 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user