diff options
author | Haru <haru@dotalux.com> | 2014-11-02 01:30:33 +0100 |
---|---|---|
committer | Haru <haru@dotalux.com> | 2014-11-02 01:34:58 +0100 |
commit | 6b20c5b6988c889df35b890d93c338f8b87fa430 (patch) | |
tree | 470f3ae3255ed4211687db27b2d187c6f03fde0f | |
parent | 19e6b0f9de7280770f0dd98d9431d3337b9a6e7c (diff) | |
download | hercules-6b20c5b6988c889df35b890d93c338f8b87fa430.tar.gz hercules-6b20c5b6988c889df35b890d93c338f8b87fa430.tar.bz2 hercules-6b20c5b6988c889df35b890d93c338f8b87fa430.tar.xz hercules-6b20c5b6988c889df35b890d93c338f8b87fa430.zip |
Added min() and max() script commands
- Special thanks to Streusel, Xgear
Signed-off-by: Haru <haru@dotalux.com>
-rw-r--r-- | doc/script_commands.txt | 12 | ||||
-rw-r--r-- | npc/dev/test.txt | 4 | ||||
-rw-r--r-- | src/map/script.c | 32 |
3 files changed, 48 insertions, 0 deletions
diff --git a/doc/script_commands.txt b/doc/script_commands.txt index 9d2317942..4e28b5b71 100644 --- a/doc/script_commands.txt +++ b/doc/script_commands.txt @@ -7586,6 +7586,18 @@ Example: --------------------------------------- +*min(<number>{,<number>...<number>}) +*max(<number>{,<number>...<number>}) + +Returns the smallest (or biggest) from the set of given numbers. + +Example: + .@minimum = min(1, -6, -2, 8, 2); // .@minimum will be equal to -6 + .@maximum = max(0, 5, 10, 4); // .@maximum will be equal to 10 + .@level = min(BaseLevel, 70); // .@level will be the character's base level, capped to 70 + +--------------------------------------- + *md5("<string>") Returns the md5 checksum of a number or string. diff --git a/npc/dev/test.txt b/npc/dev/test.txt index f9e4fc410..7b498e922 100644 --- a/npc/dev/test.txt +++ b/npc/dev/test.txt @@ -565,6 +565,10 @@ function script HerculesSelfTestHelper { callsub(OnCheck, "array shrink", .@x[1], 0); callsub(OnCheck, "array shrink and getarraysize", getarraysize(.@x), 0); + // min and max + callsub(OnCheck, "min()", min(5, -10, 8, 3, -2, 1000), -10); + callsub(OnCheck, "max()", max(5, -10, 8, 3, -2, 1000), 1000); + // Constants callsub(OnCheck, "'true' constant", true, 1); diff --git a/src/map/script.c b/src/map/script.c index 1516a0234..006f275eb 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -14835,6 +14835,36 @@ BUILDIN(distance) // <--- [zBuffer] List of mathematics commands +BUILDIN(min) +{ + int i, min; + + min = script_getnum(st, 2); + for (i = 3; script_hasdata(st, i); i++) { + int next = script_getnum(st, i); + if (next < min) + min = next; + } + script_pushint(st, min); + + return true; +} + +BUILDIN(max) +{ + int i, max; + + max = script_getnum(st, 2); + for (i = 3; script_hasdata(st, i); i++) { + int next = script_getnum(st, i); + if (next > max) + max = next; + } + script_pushint(st, max); + + return true; +} + BUILDIN(md5) { const char *tmpstr; @@ -19283,6 +19313,8 @@ void script_parse_builtin(void) { BUILDIN_DEF(pow,"ii"), BUILDIN_DEF(distance,"iiii"), // <--- [zBuffer] List of mathematics commands + BUILDIN_DEF(min, "i*"), + BUILDIN_DEF(max, "i*"), BUILDIN_DEF(md5,"s"), // [zBuffer] List of dynamic var commands ---> BUILDIN_DEF(getd,"s"), |