78 lines
4.8 KiB
Plaintext
78 lines
4.8 KiB
Plaintext
// wazoo_s0_astret - Spells Out the Wazoo - Return from astral projection
|
|
// By Deva Bryson Winblood.
|
|
#include "X0_INC_HENAI"
|
|
#include "X2_INC_SUMMSCALE"
|
|
|
|
void main()
|
|
{
|
|
object oMe=OBJECT_SELF;
|
|
object oBody=GetLocalObject(oMe,"oWazooBody");
|
|
object oUser=oMe;
|
|
object oAssoc;
|
|
int bHardcore=GetLocalInt(GetModule(),"bDifficultyHardcore");
|
|
effect eRes=EffectResurrection();
|
|
effect eEth=EffectEthereal();
|
|
effect eHeal=EffectHeal(GetMaxHitPoints(oMe));
|
|
location lLoc=GetLocation(oBody);
|
|
DeleteLocalInt(oMe,"bWAZOOASTRAL");
|
|
if (GetIsDead(oMe)==TRUE)
|
|
{
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT,eRes,oMe);
|
|
DelayCommand(0.2,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eEth,oMe,4.0));
|
|
DelayCommand(0.1,ApplyEffectToObject(DURATION_TYPE_INSTANT,eHeal,oMe));
|
|
}
|
|
DelayCommand(1.0,AssignCommand(oMe,JumpToLocation(lLoc)));
|
|
DestroyObject(oBody);
|
|
if (GetIsPC(oMe)==FALSE&&GetArea(oMe)!=GetArea(GetMaster(oMe)))
|
|
{ // NPC make sure cannot follow master
|
|
SetAssociateState(NW_ASC_MODE_STAND_GROUND,TRUE);
|
|
} // NPC make sure cannot follow master
|
|
oBody=GetItemPossessedBy(oMe,"wazoo_it_astret");
|
|
if (oBody!=OBJECT_INVALID) DestroyObject(oBody);
|
|
if (GetIsPC(oMe)==TRUE)
|
|
{ // PC
|
|
if (bHardcore==FALSE)
|
|
{ // bring associates back also
|
|
oAssoc=GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION,oUser);
|
|
if (oAssoc!=OBJECT_INVALID&&GetLocalInt(oAssoc,"nWAZOOASTRAL")==TRUE) ExecuteScript("wazoo_s0_astret",oAssoc);
|
|
oAssoc=GetAssociate(ASSOCIATE_TYPE_DOMINATED,oUser);
|
|
if (oAssoc!=OBJECT_INVALID&&GetLocalInt(oAssoc,"nWAZOOASTRAL")==TRUE) ExecuteScript("wazoo_s0_astret",oAssoc);
|
|
oAssoc=GetAssociate(ASSOCIATE_TYPE_FAMILIAR,oUser);
|
|
if (oAssoc!=OBJECT_INVALID&&GetLocalInt(oAssoc,"nWAZOOASTRAL")==TRUE) ExecuteScript("wazoo_s0_astret",oAssoc);
|
|
oAssoc=GetAssociate(ASSOCIATE_TYPE_SUMMONED,oUser);
|
|
if (oAssoc!=OBJECT_INVALID&&GetLocalInt(oAssoc,"nWAZOOASTRAL")==TRUE) ExecuteScript("wazoo_s0_astret",oAssoc);
|
|
oAssoc=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oUser,1);
|
|
if (oAssoc!=OBJECT_INVALID&&GetLocalInt(oAssoc,"nWAZOOASTRAL")==TRUE) ExecuteScript("wazoo_s0_astret",oAssoc);
|
|
oAssoc=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oUser,2);
|
|
if (oAssoc!=OBJECT_INVALID&&GetLocalInt(oAssoc,"nWAZOOASTRAL")==TRUE) ExecuteScript("wazoo_s0_astret",oAssoc);
|
|
oAssoc=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oUser,3);
|
|
if (oAssoc!=OBJECT_INVALID&&GetLocalInt(oAssoc,"nWAZOOASTRAL")==TRUE) ExecuteScript("wazoo_s0_astret",oAssoc);
|
|
oAssoc=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oUser,4);
|
|
if (oAssoc!=OBJECT_INVALID&&GetLocalInt(oAssoc,"nWAZOOASTRAL")==TRUE) ExecuteScript("wazoo_s0_astret",oAssoc);
|
|
oAssoc=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oUser,5);
|
|
if (oAssoc!=OBJECT_INVALID&&GetLocalInt(oAssoc,"nWAZOOASTRAL")==TRUE) ExecuteScript("wazoo_s0_astret",oAssoc);
|
|
} // bring associates back also
|
|
else
|
|
{ // leave associates behind
|
|
oAssoc=GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION,oUser);
|
|
if (oAssoc!=OBJECT_INVALID&&GetLocalInt(oAssoc,"nWAZOOASTRAL")==TRUE) SetAssociateState(NW_ASC_MODE_STAND_GROUND,TRUE,oAssoc);
|
|
oAssoc=GetAssociate(ASSOCIATE_TYPE_DOMINATED,oUser);
|
|
if (oAssoc!=OBJECT_INVALID&&GetLocalInt(oAssoc,"nWAZOOASTRAL")==TRUE) SetAssociateState(NW_ASC_MODE_STAND_GROUND,TRUE,oAssoc);
|
|
oAssoc=GetAssociate(ASSOCIATE_TYPE_FAMILIAR,oUser);
|
|
if (oAssoc!=OBJECT_INVALID&&GetLocalInt(oAssoc,"nWAZOOASTRAL")==TRUE) SetAssociateState(NW_ASC_MODE_STAND_GROUND,TRUE,oAssoc);
|
|
oAssoc=GetAssociate(ASSOCIATE_TYPE_SUMMONED,oUser);
|
|
if (oAssoc!=OBJECT_INVALID&&GetLocalInt(oAssoc,"nWAZOOASTRAL")==TRUE) SetAssociateState(NW_ASC_MODE_STAND_GROUND,TRUE,oAssoc);
|
|
oAssoc=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oUser,1);
|
|
if (oAssoc!=OBJECT_INVALID&&GetLocalInt(oAssoc,"nWAZOOASTRAL")==TRUE) SetAssociateState(NW_ASC_MODE_STAND_GROUND,TRUE,oAssoc);
|
|
oAssoc=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oUser,2);
|
|
if (oAssoc!=OBJECT_INVALID&&GetLocalInt(oAssoc,"nWAZOOASTRAL")==TRUE) SetAssociateState(NW_ASC_MODE_STAND_GROUND,TRUE,oAssoc);
|
|
oAssoc=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oUser,3);
|
|
if (oAssoc!=OBJECT_INVALID&&GetLocalInt(oAssoc,"nWAZOOASTRAL")==TRUE) SetAssociateState(NW_ASC_MODE_STAND_GROUND,TRUE,oAssoc);
|
|
oAssoc=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oUser,4);
|
|
if (oAssoc!=OBJECT_INVALID&&GetLocalInt(oAssoc,"nWAZOOASTRAL")==TRUE) SetAssociateState(NW_ASC_MODE_STAND_GROUND,TRUE,oAssoc);
|
|
oAssoc=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oUser,5);
|
|
if (oAssoc!=OBJECT_INVALID&&GetLocalInt(oAssoc,"nWAZOOASTRAL")==TRUE) SetAssociateState(NW_ASC_MODE_STAND_GROUND,TRUE,oAssoc);
|
|
} // leave associates behind
|
|
} // PC
|
|
}
|