#include "hc_inc" #include "hc_inc_remeff" #include "hc_inc_rezpen" #include "hc_inc_transfer" #include "hc_text_activate" #include "anph_inc" #include "eye_dm_inc" #include "anphrez_inc" int TRUE_RESS=3; int RESS=2; int RAISE=1; int NONE=0; void hc_act_pct_on_fire (object oPC, object oCorpse, object oFire, object oDeadPC) { if (AnphGetPlayerTeam(oPC) == AnphGetPlayerTeam(oDeadPC)) { SendMessageToPC(oPC, "You can't burn members of your own team!"); return; } location oFireLoc = GetLocation (oFire); CreateObject (OBJECT_TYPE_PLACEABLE, "ImpaledCorpse", oFireLoc, TRUE); CreateObject (OBJECT_TYPE_PLACEABLE, "PyreFlame", oFireLoc, TRUE); DestroyObject (oCorpse); SendMessageToPC (oDeadPC, "Your corpse has been set ablaze, there is no way out for you now"); WriteTimestampedLogEntry(GetName(oPC) + " burned " + GetName(oDeadPC)); AnphRez (oDeadPC, TRUE, oPC); // Force rez? } int GetCharacterLevel (object oPC) { int iLevel; iLevel = GetLevelByPosition (1, oPC); iLevel += GetLevelByPosition (2, oPC); iLevel += GetLevelByPosition (3, oPC); return (iLevel); } void MoveDC(object oDropped, object oUser) { object oDC=GetLocalObject(oDropped,"DeathCorpse"); object oOwner=GetLocalObject(oDropped,"Owner"); string sName=GetLocalString(oDropped,"Name"); string sCDK=GetLocalString(oDropped,"Key"); // If a Death Corpse exits, move all the stuff from the old one to the new one // at the new location object oDeadMan; object oDeathCorpse; oDeathCorpse = CreateObject(OBJECT_TYPE_PLACEABLE, "DeathCorpse", GetLocation(oUser)); SetLocalObject(oMod,"DeathCorpse"+sName+sCDK,oDeathCorpse); SetLocalObject(oMod,"PlayerCorpse"+sName+sCDK,oDeadMan); SetLocalObject(oDeathCorpse,"Owner",oOwner); SetLocalString(oDeathCorpse,"Name",sName); SetLocalString(oDeathCorpse,"Key",sCDK); DestroyObject (oDC, 1.0); } void main() { // If the item is a player corpse token, then see if they can get the poor // slob resurrected. int casttype=NONE; object oUser=OBJECT_SELF; object oCleric=GetLocalObject(oUser,"CLERIC"); object oItem=GetLocalObject(oUser,"ITEM"); object oRespawner = AnphFindPlayerByKey (GetLocalString (oItem, "Name"), GetLocalString (oItem, "Key")); DeleteLocalObject(oUser,"ITEM"); DeleteLocalObject(oUser,"CLERIC"); DeleteLocalObject(oUser,"DEADMAN"); if (FindSubString(GetStringUpperCase(GetTag(oCleric)),"FIRE") >= 0) { hc_act_pct_on_fire (oUser, oItem, oCleric, oRespawner); return; } int iLevel = GetLevelByClass(CLASS_TYPE_CLERIC, oCleric); int iPCLevel = GetCharacterLevel (oRespawner); if(!GetIsObjectValid(oRespawner)) { SendMessageToPC(oUser, "Sorry, this player is no longer online, and as such cannot be raised right now."); return; } // Make sure the PC is online if(GetIsPC(oCleric)==TRUE) { SendMessageToPC(oUser, "Corpses may only be used on NPC clerics, or burned on camp fires."); return; } // Make sure the cleric is a NPC and at least level 10 (raise dead is a level // 5 spell, requires level 10 to cast) if(iLevel < 9) { SendMessageToPC(oUser, "Corpses may only be used on powerful NPC clerics, or burned on camp fires."); return; } int nAlign=GetLocalInt(oItem, "Alignment"); int nGold=GetGold(oUser); int nGODSYSTEM; int nBaseCost=1; string sDeity=GetLocalString(oItem, "Deity"); // Find out how much, and see if they have that much gold. nGODSYSTEM=GetLocalInt(oMod,"GODSYSTEM"); nBaseCost=0; int iRezAmount = 100 * iPCLevel + 100; if (iLevel >= 9 && nGold >= iRezAmount) casttype = RAISE; if (casttype == NONE) { SendMessageToPC(oUser,NOTENOUGH+IntToString(iRezAmount)+" gps."); return; } // Charge em and raise the dead man AssignCommand(oCleric,TakeGoldFromCreature(iRezAmount, oUser, TRUE)); SendMessageToPC(oUser, CLERICACCEPT); if(GetIsObjectValid(oRespawner)) { SetPlotFlag(oRespawner, FALSE); RemoveEffects(oRespawner); AssignCommand(oRespawner, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectResurrection(),oRespawner)); if (casttype >= RESS) AssignCommand(oRespawner,ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(GetMaxHitPoints(oRespawner)), oRespawner)); else { effect eDam=EffectDamage(GetCurrentHitPoints(oRespawner)-1); if( !GetLocalInt(oMod,"REZPENALTY")) AssignCommand(oRespawner,ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam,oRespawner)); } DelayCommand (1.0, AssignCommand(oRespawner, JumpToObject (oUser))); DelayCommand (2.0, AssignCommand(oRespawner, JumpToObject (oUser))); DelayCommand (3.0, AssignCommand(oRespawner, JumpToObject (oCleric))); // If playing with REZPENALTY on (default) then take the level per the phb // Only take XP if not using a true ressurection if( GetLocalInt(oMod,"REZPENALTY") && casttype != TRUE_RESS) DelayCommand(5.0,hcRezPenalty (oRespawner)); } else { SendMessageToPC(oUser,NOTONLINE); SetPersistentLocation(oMod,"RESLOC"+ GetLocalString(oItem,"Name")+ GetLocalString(oItem,"Key"), GetLocation(oCleric)); if(casttype==TRUE_RESS) SetPersistentInt(oMod,"PlayerState"+ GetLocalString(oItem,"Name")+ GetLocalString(oItem,"Key"), PWS_PLAYER_STATE_RESTRUE); else if(casttype==RESS) SetPersistentInt(oMod,"PlayerState"+ GetLocalString(oItem,"Name")+ GetLocalString(oItem,"Key"), PWS_PLAYER_STATE_RESURRECTED); else SetPersistentInt(oMod,"PlayerState"+ GetLocalString(oItem,"Name")+ GetLocalString(oItem,"Key"), PWS_PLAYER_STATE_RAISEDEAD); } // Get rid of the Player Corpse item DestroyObject(oItem); }