summaryrefslogtreecommitdiff
path: root/npc/magic/level3-necromancy.txt
diff options
context:
space:
mode:
Diffstat (limited to 'npc/magic/level3-necromancy.txt')
-rwxr-xr-xnpc/magic/level3-necromancy.txt51
1 files changed, 51 insertions, 0 deletions
diff --git a/npc/magic/level3-necromancy.txt b/npc/magic/level3-necromancy.txt
new file mode 100755
index 00000000..2a09bd65
--- /dev/null
+++ b/npc/magic/level3-necromancy.txt
@@ -0,0 +1,51 @@
+- script necromancy NPC32767,{
+ if(call("magic_checks")) end;
+ if (Sp < 50) end;
+ if (getskilllv(.school) < .level) end;
+ if (getskilllv(SKILL_MAGIC) < .level) end;
+ @target_id = getcharid(3, @args$);
+ if (@target_id < 1 || !(isloggedin(@target_id)) || get(INVISIBLE, @target_id)) end;
+ if (get(Hp, @target_id) > 0) end;
+ if (Hp < (get(MaxHp, @target_id) / 3)) end; // hp must be at least a third of the max hp of the target
+ callfunc "adjust_spellpower";
+ if (distance(BL_ID, @target_id) >= (((sqrt(@spellpower)*12)+@spellpower)/100)+2) end;
+ if (get(@necromancer, @target_id) > 0) end; // someone else is already trying to resurrect this player
+ if (getmapflag(getmapname(), mf_nosave)) end; // do not allow for maps like illia or candor
+ if (countitem("Soul") >= 1) delitem "Soul", 1; else end;
+
+ set @_M_BLOCK, 1; // block casting, until the timer clears it
+ addtimer 20000, "Magic Timer::OnClear";
+ Sp = Sp - 50;
+ misceffect FX_MAGIC_DARKRED, strcharinfo(0); // on caster
+ misceffect FX_PENTAGRAM_BUILDUP, @args$; // on target
+
+ set @necromancer, CHAR_ID, @target_id; // tell the target who is reviving them
+
+ addtimer 6000, strnpcinfo(0)+"::OnRevive", @target_id; // TODO: make it take more or less time depending on the spell power
+ end;
+
+OnRevive:
+ .@necro = get(BL_ID, @necromancer);
+ if (.@necro < 1) goto L_Clean;
+ if (get(Hp, .@necro) < 1) end;
+ misceffect FX_PENTAGRAM_BURST, strcharinfo(0);
+ misceffect FX_CRITICAL, strcharinfo(0, .@necro);
+ heal 1, 0; // revive
+ Hp = 1;
+ Sp = 0;
+ Hp = 1, .@necro;
+ Sp = 0, .@necro;
+ goto L_Clean;
+
+L_Clean:
+ @necromancer = 0;
+ end;
+
+OnInit:
+ .school = SKILL_MAGIC_DARK;
+ set .invocation$, chr(MAGIC_SYMBOL) + "nevela"; // used in npcs that refer to this spell
+ void call("magic_register");
+ .level = 3;
+ .exp_gain = 1;
+ end;
+}