summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--npc/config/magic.txt50
-rw-r--r--npc/functions/hub.txt32
2 files changed, 37 insertions, 45 deletions
diff --git a/npc/config/magic.txt b/npc/config/magic.txt
index 58ceedccf..d59f1d0b8 100644
--- a/npc/config/magic.txt
+++ b/npc/config/magic.txt
@@ -151,37 +151,11 @@ function script SummonMagic {
return;
}
-// areaharm(caster, range, DMG, {type, element, filter, bl})
+
+// rectharm(target, x, y, DMG, {type, element, filter, bl, caster})
// Defaults to HARM_MISC, Ele_Neutral, filter filter_hostile and all BLs
// Valid BL: BL_MOB | BL_PC | BL_HOM | BL_MER
// Do not use: NPC, PET, ELEM
-// Range centers on caster (player), implement and use areaharm2 elsewhere
-function script areaharm {
- .@t=getarg(0);
- .@r=getarg(1);
- .@d=getarg(2);
- .@h=getarg(3, HARM_MISC);
- .@e=getarg(4, Ele_Neutral);
- .@f$=getarg(5, "filter_hostile");
- .@b=getarg(6, BL_PC | BL_MOB | BL_MER | BL_HOM);
-
- getmapxy(.@m$, .@x, .@y, getunittype(.@t), .@t);
-
- .@c=getunits(.@b, .@mbs, false, .@m$, .@x-.@r, .@y-.@r, .@x+.@r, .@y+.@r);
- for (.@i = 0; .@i < .@c; .@i++) {
- // Filtering
- if (!callfunc(.@f$, .@mbs[.@i]))
- continue;
- harm(.@mbs[.@i], .@d, .@h, .@e, .@t);
- specialeffect(FX_ATTACK, AREA, .@mbs[.@i]);
- // TODO: Handle MobPt to don't overload timer system?
- }
- return;
-}
-
-
-// rectharm(caster, x, y, DMG, {type, element, filter, bl})
-// Same as areaharm() but causes a rectangle in (x,y) size, instead of a square
function script rectharm {
.@t=getarg(0);
.@rx=getarg(1);
@@ -191,6 +165,7 @@ function script rectharm {
.@e=getarg(5, Ele_Neutral);
.@f$=getarg(6, "filter_hostile");
.@b=getarg(7, BL_PC | BL_MOB | BL_MER | BL_HOM);
+ .@caster=getarg(8, .@t);
getmapxy(.@m$, .@x, .@y, getunittype(.@t), .@t);
@@ -199,7 +174,7 @@ function script rectharm {
// Filtering
if (!callfunc(.@f$, .@mbs[.@i]))
continue;
- harm(.@mbs[.@i], .@d, .@h, .@e, .@t);
+ harm(.@mbs[.@i], .@d, .@h, .@e, .@caster);
specialeffect(FX_ATTACK, AREA, .@mbs[.@i]);
// TODO: Handle MobPt to don't overload timer system?
}
@@ -207,6 +182,23 @@ function script rectharm {
}
+// areaharm(target, range, DMG, {type, element, filter, bl, caster})
+// Same as rectharm() but using a square instead of two lengths for a rectangle
+function script areaharm {
+ .@t=getarg(0);
+ .@r=getarg(1);
+ .@d=getarg(2);
+ .@h=getarg(3, HARM_MISC);
+ .@e=getarg(4, Ele_Neutral);
+ .@f$=getarg(5, "filter_hostile");
+ .@b=getarg(6, BL_PC | BL_MOB | BL_MER | BL_HOM);
+ .@caster=getarg(7, .@t);
+
+ rectharm(.@t, .@r, .@r, .@d, .@h, .@e, .@f$, .@b, .@caster);
+ return;
+}
+
+
// mescordialog(text, color, {dialog=1})
function script mescordialog {
if (getarg(2, true))
diff --git a/npc/functions/hub.txt b/npc/functions/hub.txt
index 153e66750..b00ed850d 100644
--- a/npc/functions/hub.txt
+++ b/npc/functions/hub.txt
@@ -621,7 +621,7 @@ function script HUB_SkillInvoke {
// Weapon Overload attack
case TMW2_OVERLOAD:
.@PW=200+(@skillLv > 3 ? @skillLv : 0)+(@skillLv > 7 ? @skillLv*2 : 0);
- areaharm(@skillTarget, 0, AdjustAttackpower(.@PW), HARM_MISC);
+ areaharm(@skillTarget, 0, AdjustAttackpower(.@PW), HARM_MISC, @skillCaster);
break;
////////////////////////////////
// Magic v3
@@ -631,7 +631,7 @@ function script HUB_SkillInvoke {
// And is a trick. Each level improves ratio in 1
// Has no cooldown, so it is powerful with pots
// And is a good starter offensive skill
- areaharm(@skillTarget, 0, Sp*@skillLv, HARM_MISC, Ele_Ghost);
+ areaharm(@skillTarget, 0, Sp*@skillLv, HARM_MISC, Ele_Ghost, @skillCaster);
Sp=0;
GetManaExp(@skillId, 1);
break;
@@ -662,7 +662,7 @@ function script HUB_SkillInvoke {
// Area healing
.@PW=200+(20*@skillLv);
.@RG=4+(@skillLv/5);
- areaharm(@skillTarget, .@RG, -AdjustSpellpower(.@PW), HARM_MISC, "filter_friendly");
+ areaharm(@skillTarget, .@RG, -AdjustSpellpower(.@PW), HARM_MISC, "filter_friendly", @skillCaster);
GetManaExp(TMW2_HEALING, 3);
break;
////////////////////////////////
@@ -685,7 +685,7 @@ function script HUB_SkillInvoke {
.@RG=2+(@skillLv/5);
// 22% chance, 2.5s
sc_start SC_BLOODING, 2500, 1, 4200, SCFLAG_NONE, @skillTarget;
- areaharm(@skillTarget, .@RG, AdjustSpellpower(.@PW), HARM_MAGI, Ele_Fire);
+ areaharm(@skillTarget, .@RG, AdjustSpellpower(.@PW), HARM_MAGI, Ele_Fire, @skillCaster);
GetManaExp(TMW2_FIREBALL, 2);
break;
case TMW2_ARMAGEDDON:
@@ -693,7 +693,7 @@ function script HUB_SkillInvoke {
.@RG=5+(@skillLv/5);
// 18% chance, 3s, 3x3 radius
areasc(.@RG, 6000, SC_BLOODING, BL_MOB|BL_PC|BL_HOM|BL_MER, 1, "filter_hostile", @skillTarget, 1800);
- areaharm(@skillTarget, .@RG, AdjustSpellpower(.@PW), HARM_MAGI, Ele_Fire);
+ areaharm(@skillTarget, .@RG, AdjustSpellpower(.@PW), HARM_MAGI, Ele_Fire, @skillCaster);
GetManaExp(TMW2_FIREBALL, 3);
break;
////////////////////////////////
@@ -703,14 +703,14 @@ function script HUB_SkillInvoke {
.@PW=35+(5*@skillLv);
.@dmg=AdjustSpellpower(.@PW);
.@RG=2+(@skillLv/3);
- areaharm(@skillTarget, .@RG, .@dmg, HARM_MAGI, Ele_Holy);
+ areaharm(@skillTarget, .@RG, .@dmg, HARM_MAGI, Ele_Holy, @skillCaster);
harm(@skillTarget, .@dmg/10, HARM_MAGI, Ele_Holy);
GetManaExp(TMW2_HOLYLIGHT, 1);
break;
case TMW2_HOLYLIGHT:
.@PW=125+(25*@skillLv);
.@dmg=AdjustSpellpower(.@PW);
- areaharm(@skillTarget, 1, .@dmg/5, HARM_MAGI, Ele_Holy);
+ areaharm(@skillTarget, 1, .@dmg/5, HARM_MAGI, Ele_Holy, @skillCaster);
harm(@skillTarget, .@dmg, HARM_MAGI, Ele_Holy);
GetManaExp(TMW2_HOLYLIGHT, 2);
break;
@@ -720,7 +720,7 @@ function script HUB_SkillInvoke {
.@dmg=AdjustSpellpower(.@PW);
.@dsub=AdjustSpellpower(.@SPW);
.@RG=3+(@skillLv/5);
- areaharm(@skillTarget, .@RG, .@dsub, HARM_MAGI, Ele_Holy);
+ areaharm(@skillTarget, .@RG, .@dsub, HARM_MAGI, Ele_Holy, @skillCaster);
harm(@skillTarget, .@dmg, HARM_MAGI, Ele_Holy);
GetManaExp(TMW2_HOLYLIGHT, 3);
break;
@@ -743,7 +743,7 @@ function script HUB_SkillInvoke {
.@PW=125+(25*@skillLv);
.@dmg=AdjustSpellpower(.@PW);
.@RG=2+(@skillLv/5);
- areaharm(@skillTarget, .@RG, .@dmg, HARM_MAGI, Ele_Wind);
+ areaharm(@skillTarget, .@RG, .@dmg, HARM_MAGI, Ele_Wind, @skillCaster);
GetManaExp(TMW2_LIGHTNINGBOLT, 3);
break;
////////////////////////////////
@@ -761,7 +761,7 @@ function script HUB_SkillInvoke {
.@RG=2+(@skillLv/5);
// 18% chance, 3s, 3x3 radius
areasc(.@RG, 3000, SC_FREEZE, BL_MOB|BL_PC|BL_HOM|BL_MER, 1, "filter_hostile", @skillTarget, 1800);
- areaharm(@skillTarget, .@RG, AdjustSpellpower(.@PW), HARM_MAGI, Ele_Water);
+ areaharm(@skillTarget, .@RG, AdjustSpellpower(.@PW), HARM_MAGI, Ele_Water, @skillCaster);
GetManaExp(TMW2_NILFHEIM, 2);
break;
case TMW2_NILFHEIM:
@@ -769,7 +769,7 @@ function script HUB_SkillInvoke {
.@PW=80+(10*@skillLv);
.@RG=4+(@skillLv/5);
areasc(.@RG, 15000, SC_FREEZE, BL_PC | BL_MOB | BL_MER | BL_HOM, 1, "filter_hostile");
- areaharm(getcharid(3), .@RG*3/2, AdjustSpellpower(.@PW), HARM_MAGI, Ele_Water);
+ areaharm(getcharid(3), .@RG*3/2, AdjustSpellpower(.@PW), HARM_MAGI, Ele_Water, @skillCaster);
// Maybe filter_notme() would work better, indeed
GetManaExp(TMW2_NILFHEIM, 3);
break;
@@ -790,7 +790,7 @@ function script HUB_SkillInvoke {
.@RG=3+(@skillLv/5);
.@TM=800+(@skillLv*200);
areasc(.@RG, .@TM, SC_STUN, BL_MOB | BL_PC | BL_HOM | BL_MER, 1, "filter_hostile", @skillTarget, 800);
- areaharm(@skillTarget, .@RG, .@dmg, HARM_MAGI, Ele_Earth);
+ areaharm(@skillTarget, .@RG, .@dmg, HARM_MAGI, Ele_Earth, @skillCaster);
GetManaExp(TMW2_METEORSTRIKE, 2);
break;
case TMW2_GAIABREAK:
@@ -799,7 +799,7 @@ function script HUB_SkillInvoke {
.@dmg=AdjustSpellpower(.@PWA);
.@dsub=AdjustSpellpower(.@PWB);
areasc(2, 5000, SC_INCDEFRATE, BL_PC, 10, "filter_friendly");
- rectharm(@skillTarget, 2, 5, .@dsub, HARM_MAGI, Ele_Earth);
+ rectharm(@skillTarget, 2, 5, .@dsub, HARM_MAGI, Ele_Earth, @skillCaster);
harm(@skillTarget, .@dmg, HARM_MAGI, Ele_Earth);
GetManaExp(TMW2_METEORSTRIKE, 3);
break;
@@ -988,7 +988,7 @@ function script HUB_SkillInvoke {
.@ST=500+(100*@skillLv);
.@EF=any(SC_STUN, SC_BLIND, SC_BLOODING, SC_BLIND, SC_BLOODING);
areasc(.@RG, .@TM, .@EF, BL_MOB | BL_PC | BL_HOM | BL_MER, 1, "filter_hostile", @skillTarget, .@ST);
- areaharm(@skillTarget, .@RG, .@dmg, HARM_PHYS, Ele_Neutral);
+ areaharm(@skillTarget, .@RG, .@dmg, HARM_PHYS, Ele_Neutral, @skillCaster);
GetManaExp(@skillId, rand2(1,3));
break;
case TMW2_SUPREMEATTACK:
@@ -1007,7 +1007,7 @@ function script HUB_SkillInvoke {
.@PW=150+(10*@skillLv);
.@dmg=AdjustAttackpower(.@PW);
.@RG=1+(@skillLv/3);
- areaharm(@skillTarget, .@RG, .@dmg, HARM_PHYS, Ele_Neutral);
+ areaharm(@skillTarget, .@RG, .@dmg, HARM_PHYS, Ele_Neutral, @skillCaster);
GetManaExp(@skillId, rand2(1,3));
break;
////////////////////////////////
@@ -1063,7 +1063,7 @@ function script HUB_SkillInvoke {
sleep2(10);
// The main elemental-less blast hits all in same square,
// and also hits behind (and on your square)
- rectharm(@skillTarget, 0, 1, AdjustAttackpower(.@PW/2), HARM_PHYS, Ele_Neutral); // FIXME: May not fire (properly) if target dies
+ rectharm(@skillTarget, 0, 1, AdjustAttackpower(.@PW/2), HARM_PHYS, Ele_Neutral, @skillCaster); // FIXME: May not fire (properly) if target dies
break;
case TMW2_STUNNINGSTRIKE:
// 70x3 = 210