Initial commit
Adding all of the current content for Anphillia Unlimited.
This commit is contained in:
188
_module/nss/hc_bleeding.nss
Normal file
188
_module/nss/hc_bleeding.nss
Normal file
@@ -0,0 +1,188 @@
|
||||
// hc_bleeding - HardCore Bleeding/Death system
|
||||
// Archaegeo 2002 July 2
|
||||
|
||||
#include "hc_inc"
|
||||
#include "hc_inc_timecheck"
|
||||
#include "hc_text_bleed"
|
||||
#include "hc_inc_death"
|
||||
#include "hc_inc_remeff"
|
||||
|
||||
object oPlayer;
|
||||
|
||||
void CheckBleed()
|
||||
{
|
||||
DelayCommand (6.0, ExecuteScript ("hc_bleeding", oPlayer));
|
||||
}
|
||||
|
||||
void SetHP(string sID, object oPlayer)
|
||||
{
|
||||
SetPersistentInt(oMod,"LastHP"+sID,GetCurrentHitPoints(oPlayer));
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
object oPlayer = OBJECT_SELF;
|
||||
|
||||
|
||||
if (GetIsObjectValid(OBJECT_SELF))
|
||||
oPlayer=OBJECT_SELF;
|
||||
else
|
||||
return;
|
||||
|
||||
|
||||
int iPlayerState = GPS(oPlayer);
|
||||
int iPlayerMoving=GetLocalInt(oPlayer,"MOVING");
|
||||
int iCHP=GetCurrentHitPoints(oPlayer);
|
||||
string sName=GetName(oPlayer);
|
||||
string sCDK=GetPCPublicCDKey(oPlayer);
|
||||
string sID=sName+sCDK;
|
||||
string sAreaTag=GetTag(GetArea(oPlayer));
|
||||
string sFT="FuguePlane";
|
||||
|
||||
if(GetIsDM(oPlayer)) return;
|
||||
|
||||
int iLHP=GetPersistentInt(oMod,"LastHP"+sID);
|
||||
|
||||
|
||||
if(GetLocalInt(oMod,"LIMBO") && iPlayerMoving && sAreaTag != sFT)
|
||||
{
|
||||
CheckBleed();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if( iPlayerState==PWS_PLAYER_STATE_DEAD &&
|
||||
sAreaTag == sFT)
|
||||
return;
|
||||
if( iPlayerState!=PWS_PLAYER_STATE_ALIVE &&
|
||||
iCHP >= 1 &&
|
||||
sAreaTag != sFT &&
|
||||
!GetLocalInt(oPlayer,"GHOST"))
|
||||
{
|
||||
if(iPlayerMoving)
|
||||
{
|
||||
CheckBleed();
|
||||
return;
|
||||
}
|
||||
SetPlotFlag(oPlayer,FALSE);
|
||||
RemoveEffects(oPlayer);
|
||||
SPS(oPlayer, PWS_PLAYER_STATE_ALIVE);
|
||||
SetHP(sID, oPlayer);
|
||||
object oFR;
|
||||
if((oFR=GetItemPossessedBy(oPlayer, "fuguerobe"))!=OBJECT_INVALID)
|
||||
DestroyObject(oFR);
|
||||
DelayCommand(0.5,hcDisabledRemove(oPlayer));
|
||||
}
|
||||
else if(iPlayerState == PWS_PLAYER_STATE_ALIVE) return;
|
||||
if( (iCHP == 0 && iPlayerState!=PWS_PLAYER_STATE_DISABLED) ||
|
||||
(iPlayerState==PWS_PLAYER_STATE_DISABLED &&
|
||||
GetLocalInt(oMod,"DR_APPLIED"+sID)==FALSE))
|
||||
{
|
||||
hcDisabledSetup(oPlayer);
|
||||
CheckBleed();
|
||||
return;
|
||||
}
|
||||
int nHour=nConv;
|
||||
int nDay=24*nConv;
|
||||
int nSSB=SecondsSinceBegin();
|
||||
|
||||
// Check for spontaneous healing
|
||||
if(
|
||||
((iPlayerState == PWS_PLAYER_STATE_STABLE ||
|
||||
iPlayerState == PWS_PLAYER_STATE_STABLEHEAL) &&
|
||||
(GetPersistentInt(oMod,"LastRecCheck"+sID)+nHour) < nSSB) ||
|
||||
(iPlayerState == PWS_PLAYER_STATE_RECOVERY &&
|
||||
(GetPersistentInt(oMod,"LastRecCheck"+sID)+nDay) < nSSB)
|
||||
)
|
||||
{
|
||||
if( (iCHP > iLHP) &&
|
||||
iPlayerState != PWS_PLAYER_STATE_RECOVERY &&
|
||||
iPlayerState != PWS_PLAYER_STATE_STABLEHEAL
|
||||
)
|
||||
{
|
||||
SendMessageToPC(oPlayer, STABLERECMESSAGE);
|
||||
SPS(oPlayer, PWS_PLAYER_STATE_STABLEHEAL);
|
||||
CheckBleed();
|
||||
return;
|
||||
}
|
||||
SetPersistentInt(oMod, "LastRecCheck"+sID, nSSB);
|
||||
if(d100() <= 50)
|
||||
{
|
||||
if (iPlayerState==PWS_PLAYER_STATE_STABLE)
|
||||
{
|
||||
SPS(oPlayer, PWS_PLAYER_STATE_RECOVERY);
|
||||
hcDisabledSetup(oPlayer);
|
||||
SendMessageToPC(oPlayer, RECOVERMESSAGE);
|
||||
SetHP(sID, oPlayer);
|
||||
}
|
||||
else if (iPlayerState==PWS_PLAYER_STATE_STABLEHEAL)
|
||||
{
|
||||
SPS(oPlayer, PWS_PLAYER_STATE_DISABLED);
|
||||
hcDisabledSetup(oPlayer);
|
||||
SendMessageToPC(oPlayer, DISABLEMESSAGE);
|
||||
SetHP(sID, oPlayer);
|
||||
}
|
||||
else
|
||||
{
|
||||
SendMessageToPC(oPlayer, HEALNATURAL);
|
||||
SPS(oPlayer, PWS_PLAYER_STATE_ALIVE);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
effect eDamage = EffectDamage (1, DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_NORMAL);
|
||||
ApplyEffectToObject( DURATION_TYPE_INSTANT, eDamage, oPlayer);
|
||||
SendMessageToPC(oPlayer,SLIPDEATH);
|
||||
SetHP(sID, oPlayer);
|
||||
|
||||
}
|
||||
}
|
||||
else if (iPlayerState==PWS_PLAYER_STATE_DYING)
|
||||
{
|
||||
// Make a stabilization check
|
||||
if(iCHP > iLHP)
|
||||
{
|
||||
SendMessageToPC(oPlayer, STABLERECMESSAGE);
|
||||
SPS(oPlayer, PWS_PLAYER_STATE_STABLEHEAL);
|
||||
CheckBleed();
|
||||
return;
|
||||
}
|
||||
if (d100() <= 10)
|
||||
{
|
||||
// They stabilized
|
||||
SendMessageToPC(oPlayer, STABLEMESSAGE);
|
||||
SPS(oPlayer, PWS_PLAYER_STATE_STABLE);
|
||||
}
|
||||
else
|
||||
{
|
||||
// They bleed!
|
||||
SendMessageToPC(oPlayer,SLIPDEATH);
|
||||
effect eDamage = EffectDamage(1, DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_PLUS_FIVE);
|
||||
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;
|
||||
}
|
||||
SetHP(sID, oPlayer);
|
||||
}
|
||||
}
|
||||
CheckBleed();
|
||||
}
|
||||
Reference in New Issue
Block a user