summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHaru <haru@dotalux.com>2014-11-02 01:30:33 +0100
committerHaru <haru@dotalux.com>2014-11-02 01:34:58 +0100
commit6b20c5b6988c889df35b890d93c338f8b87fa430 (patch)
tree470f3ae3255ed4211687db27b2d187c6f03fde0f
parent19e6b0f9de7280770f0dd98d9431d3337b9a6e7c (diff)
downloadhercules-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.txt12
-rw-r--r--npc/dev/test.txt4
-rw-r--r--src/map/script.c32
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"),