summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFedja Beader <fedja@protonmail.ch>2025-02-08 13:23:05 +0100
committerJesusalva Jesusalva <jesusalva@tmw2.org>2025-02-12 01:32:35 +0000
commitac5c7bea20f59543f184610c7aedbb8f3ccdae31 (patch)
tree8803f5baddf640fcf7674a5a2f9eddf884513454
parent96a53614c442b393ea854aab3195a938a92504fe (diff)
downloadserverdata-ac5c7bea20f59543f184610c7aedbb8f3ccdae31.tar.gz
serverdata-ac5c7bea20f59543f184610c7aedbb8f3ccdae31.tar.bz2
serverdata-ac5c7bea20f59543f184610c7aedbb8f3ccdae31.tar.xz
serverdata-ac5c7bea20f59543f184610c7aedbb8f3ccdae31.zip
Optimise for reading, not writing
-rw-r--r--npc/config/magic.txt56
1 files changed, 29 insertions, 27 deletions
diff --git a/npc/config/magic.txt b/npc/config/magic.txt
index d59f1d0b8..ca9def074 100644
--- a/npc/config/magic.txt
+++ b/npc/config/magic.txt
@@ -157,25 +157,27 @@ function script SummonMagic {
// Valid BL: BL_MOB | BL_PC | BL_HOM | BL_MER
// Do not use: NPC, PET, ELEM
function script rectharm {
- .@t=getarg(0);
- .@rx=getarg(1);
- .@ry=getarg(2);
- .@d=getarg(3);
- .@h=getarg(4, HARM_MISC);
- .@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);
-
- .@c=getunits(.@b, .@mbs, false, .@m$, .@x-.@rx, .@y-.@ry, .@x+.@rx, .@y+.@ry);
- for (.@i = 0; .@i < .@c; .@i++) {
+ .@target = getarg(0);
+ .@range_x = getarg(1);
+ .@range_y = getarg(2);
+ .@damage = getarg(3);
+ .@harm_type = getarg(4, HARM_MISC);
+ .@element = getarg(5, Ele_Neutral);
+ .@filter$ = getarg(6, "filter_hostile");
+ .@blocks = getarg(7, BL_PC | BL_MOB | BL_MER | BL_HOM);
+ .@caster = getarg(8, .@t);
+
+ getmapxy(.@map$, .@x, .@y, getunittype(.@target), .@target);
+
+ .@count = getunits(.@blocks, .@units, false, .@map$,
+ .@x-.@range_x, .@y-.@range_y, .@x+.@range_x, .@y+.@range_y);
+
+ for (.@i = 0; .@i < .@count; .@i++) {
// Filtering
- if (!callfunc(.@f$, .@mbs[.@i]))
+ if (!callfunc(.@filter$, .@units[.@i]))
continue;
- harm(.@mbs[.@i], .@d, .@h, .@e, .@caster);
- specialeffect(FX_ATTACK, AREA, .@mbs[.@i]);
+ harm(.@units[.@i], .@damage, .@harm_type, .@element, .@caster);
+ specialeffect(FX_ATTACK, AREA, .@units[.@i]);
// TODO: Handle MobPt to don't overload timer system?
}
return;
@@ -185,16 +187,16 @@ 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);
+ .@target = getarg(0);
+ .@range = getarg(1);
+ .@damage = getarg(2);
+ .@harm_type = getarg(3, HARM_MISC);
+ .@element = getarg(4, Ele_Neutral);
+ .@filter$ = getarg(5, "filter_hostile");
+ .@blocks = getarg(6, BL_PC | BL_MOB | BL_MER | BL_HOM);
+ .@caster = getarg(7, .@target);
+
+ rectharm(.@target, .@range, .@range, .@damage, .@harm_type, .@element, .@filter$, .@blocks, .@caster);
return;
}