123 lines
4.4 KiB
Plaintext
123 lines
4.4 KiB
Plaintext
#include "hc_inc"
|
|
#include "hc_text_activate"
|
|
|
|
void main()
|
|
{
|
|
|
|
object oUser=OBJECT_SELF;
|
|
object oOther=GetLocalObject(oUser,"OTHER");
|
|
object oItem=GetLocalObject(oUser,"ITEM");
|
|
DeleteLocalObject(oUser,"ITEM");
|
|
DeleteLocalObject(oUser,"OTHER");
|
|
string sName=GetName(oOther);
|
|
string sCDK=GetPCPublicCDKey(oOther);
|
|
//If target is bleeding, attempt to stop the bleeding.
|
|
if(GetCurrentHitPoints(oOther) < 0 && GetCurrentHitPoints(oOther) > -10)
|
|
{
|
|
AssignCommand(oUser,ActionMoveToObject(oOther));
|
|
DelayCommand(1.0,AssignCommand(oUser,
|
|
ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW)));
|
|
int nHeal = GetSkillRank(SKILL_HEAL, oUser);
|
|
int nRandom = d20(1);
|
|
int nResult = nRandom + nHeal;
|
|
|
|
if(nResult > 15)
|
|
{
|
|
// SPS( oOther, PWS_PLAYER_STATE_DISABLED);
|
|
// int nToHeal = abs(GetCurrentHitPoints(oOther)) +1;
|
|
|
|
// effect eHeal = EffectHeal(nToHeal);
|
|
effect eVis = EffectVisualEffect(VFX_IMP_HEALING_S);
|
|
// ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oOther);
|
|
// ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oOther);
|
|
|
|
SendMessageToPC(oOther, GetName(oUser) + " has tended your wounds.");
|
|
SendMessageToPC(oUser, STOPBLEEDING);
|
|
SetLocalInt(oOther, "DelayBleed", 1);
|
|
// ApplyEffectToObject( DURATION_TYPE_TEMPORARY, EffectParalyze(), oOther, 6.0);
|
|
}
|
|
|
|
else SendMessageToPC(oUser,NOSTOPBLEED);
|
|
DestroyObject(oItem);
|
|
return;
|
|
}
|
|
|
|
//Check for poison or disease, and attempt to remove the effect.
|
|
effect eBad= GetFirstEffect(oOther);
|
|
while(GetIsEffectValid(eBad))
|
|
{
|
|
//Check to see if the effect is poison or disease
|
|
if (GetEffectType(eBad) == EFFECT_TYPE_POISON ||
|
|
GetEffectType(eBad) == EFFECT_TYPE_DISEASE)
|
|
{
|
|
AssignCommand(oUser,ActionMoveToObject(oOther));
|
|
DelayCommand(1.0,AssignCommand(oUser,
|
|
ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW)));
|
|
int nHeal = GetSkillRank(SKILL_HEAL, oUser);
|
|
int nRandom = d20(1);
|
|
int nResult = nRandom + nHeal;
|
|
//TEMPORARY: Generate random DC from 12-22. This will be replaced
|
|
//by poison/disease specific DCs once I figure out how to determine
|
|
//what type of poison or disease is afflicting the PC.
|
|
int nDC = d6(2) + 10;
|
|
|
|
if(nResult > nDC)
|
|
{
|
|
effect eVis = EffectVisualEffect(VFX_IMP_REMOVE_CONDITION);
|
|
RemoveEffect(oOther, eBad);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oOther);
|
|
}
|
|
else SendMessageToPC(oUser, TREATMENTFAIL);
|
|
|
|
//Destroy kit and end treatment attempt after first poison/disease effect.
|
|
DestroyObject(oItem);
|
|
return;
|
|
}
|
|
eBad=GetNextEffect(oOther);
|
|
}
|
|
|
|
//If target is alive and wounded, attempt to provide long term care.
|
|
if(GPS(oOther) == PWS_PLAYER_STATE_ALIVE &&
|
|
GetCurrentHitPoints(oOther) < GetMaxHitPoints(oOther))
|
|
{
|
|
//Healers cannot give themselves long term care.
|
|
|
|
if(oOther == oUser)
|
|
{
|
|
SendMessageToPC(oUser, NOTSELF);
|
|
return;
|
|
}
|
|
|
|
//Check if target has already received long term care since last resting
|
|
//successful or not.
|
|
if(GetLocalInt(oMod, "LONGTERMCARE"+sName+sCDK) != 0)
|
|
{
|
|
SendMessageToPC(oUser, sName+ALREADYCARE);
|
|
return;
|
|
}
|
|
|
|
AssignCommand(oUser,ActionMoveToObject(oOther));
|
|
DelayCommand(1.0,AssignCommand(oUser,
|
|
ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW)));
|
|
int nHeal = GetSkillRank(SKILL_HEAL, oUser);
|
|
int nRandom = d20(1);
|
|
int nResult = nRandom + nHeal;
|
|
|
|
if(nResult > 10)
|
|
{
|
|
effect eVis = EffectVisualEffect(VFX_IMP_HEALING_S);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oOther);
|
|
SetLocalInt(oMod, "LONGTERMCARE"+sName+sCDK, 2);
|
|
SendMessageToPC(oUser, sName+TREATSUC);
|
|
SendMessageToPC(oOther, GetName(oUser)+TENDWOUND);
|
|
}
|
|
else
|
|
{
|
|
SetLocalInt(oMod,"LONGTERMCARE"+sName+sCDK, 1);
|
|
SendMessageToPC(oUser, sName+TREATFAIL2);
|
|
SendMessageToPC(oOther, GetName(oUser)+TREATFAILO);
|
|
}
|
|
DestroyObject(oItem);
|
|
}
|
|
}
|