summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgumi <mekolat@users.noreply.github.com>2017-03-08 11:12:09 -0500
committergumi <mekolat@users.noreply.github.com>2017-03-08 16:01:42 -0500
commit2c80c6f15d22d0e6aa96b5ac32a89490faa9ba68 (patch)
tree473bdcf1aa71bfe564981719e536b196d654073f
parentf1212444b8c14b37214dc6de3e83f959161b587b (diff)
downloadserverdata-2c80c6f15d22d0e6aa96b5ac32a89490faa9ba68.tar.gz
serverdata-2c80c6f15d22d0e6aa96b5ac32a89490faa9ba68.tar.bz2
serverdata-2c80c6f15d22d0e6aa96b5ac32a89490faa9ba68.tar.xz
serverdata-2c80c6f15d22d0e6aa96b5ac32a89490faa9ba68.zip
improve the preset commands20170404
-rw-r--r--npc/commands/debug-preset.txt195
1 files changed, 158 insertions, 37 deletions
diff --git a/npc/commands/debug-preset.txt b/npc/commands/debug-preset.txt
index cdcd9653..bc2fc180 100644
--- a/npc/commands/debug-preset.txt
+++ b/npc/commands/debug-preset.txt
@@ -15,6 +15,72 @@
// *hides*
function script DoRoutine {
+
+ function parsev {
+ // parsev(base, patterns{, min{, max}}) => value
+ .@value = getarg(0, 0);
+ .@raw$ = getarg(1, "");
+ .@patterns = explode(.@patterns$, .@raw$, "|");
+
+ for (.@pattern = 0; .@pattern < .@patterns; ++.@pattern)
+ {
+ .@pattern$ = .@patterns$[.@pattern];
+ .@len = getstrlen(.@pattern$);
+
+ if (charat(.@pattern$, 0) == "=" && .@len >= 2)
+ {
+ .@value = atoi(delchar(.@pattern$, 0));
+ break;
+ }
+
+ else if (charat(.@pattern$, 0) == "+" && .@len >= 2)
+ {
+ if (charat(.@pattern$, 1) == "+" && getargcount() >= 4)
+ .@value = getarg(3);
+ else
+ .@value += atoi(delchar(.@pattern$, 0));
+ }
+
+ else if (charat(.@pattern$, 0) == "-" && .@len >= 2)
+ {
+ if (charat(.@pattern$, 1) == "-" && getargcount() >= 3)
+ .@value = getarg(2);
+ else
+ .@value -= atoi(delchar(.@pattern$, 0));
+ }
+
+ else if (charat(.@pattern$, 0) == ">" && .@len >= 2)
+ {
+ if (charat(.@pattern$, 1) == "=" && .@len >= 3)
+ .@value = max(atoi(substr(.@pattern$, 2, .@len - 1)), .@value);
+ else
+ .@value = max(atoi(delchar(.@pattern$, 0)) + 1, .@value);
+ }
+
+ else if (charat(.@pattern$, 0) == "<" && .@len >= 2)
+ {
+ if (charat(.@pattern$, 1) == "=" && .@len >= 3)
+ .@value = min(atoi(substr(.@pattern$, 2, .@len - 1)), .@value);
+ else
+ .@value = min(atoi(delchar(.@pattern$, 0)) - 1, .@value);
+ }
+
+ else if (.@len >= 1)
+ {
+ .@value = atoi(.@pattern$);
+ break;
+ }
+ }
+
+ if (getarg(2, 0) && getargcount() >= 3)
+ .@value = max(getarg(2), .@value);
+
+ if (getarg(3, 0) && getargcount() >= 4)
+ .@value = min(getarg(3), .@value);
+
+ return .@value;
+ }
+
.@routine$ = strip(getarg(0,""));
.@m = explode(.@routine$[0], .@routine$, " "); // prep the base array
@@ -51,50 +117,108 @@ function script DoRoutine {
// FIXME: ^ need a buildin that can run *right now* instead of on script end
}
- .@o = 1;
+ if (compare(.@routine$[0], "n"))
+ {
+ closeclientdialog;
+ }
+
+ .@i = 1;
}
- for (.@i = (.@o ? 1 : 0); .@i < .@m; ++.@i)
+ for (; .@i < .@m; ++.@i)
{
- .@type$ = charat(strip(.@routine$[.@i]), 0);
- .@type = 0x7FFF;
- if (.@type$ != "")
+ .@type = ord(charat(strip(.@routine$[.@i]), 0));
+
+ if (.@type > 0)
{
- .@args = explode(.@args$, delchar(.@routine$[.@i], 0), ",");
+ .@raw$ = delchar(.@routine$[.@i], 0);
+ .@args = explode(.@args$, .@raw$, ",");
.@a = atoi(.@args$[0]);
.@b = atoi(.@args$[1]);
.@c = atoi(.@args$[2]);
-
- for (.@l = 0; .@l < 36; ++.@l)
- {
- if ($@PresetCmds$[.@l] == .@type$)
- {
- .@type = .@l;
- break;
- }
- }
- // FIXME: ^ this whole for() loop could be removed if there was a ord() buildin
+ .@d = atoi(.@args$[3]);
+ .@e = atoi(.@args$[4]);
switch (.@type)
{
- case 0: statusup2 bAgi, max(1,min(99,.@a)) - readparam(bAgi); break;
- case 2: jobchange max(0,min(6,.@a)); break;
- case 3: statusup2 bDex, max(1,min(99,.@a)) - readparam(bDex); break;
- case 4: equip max(1,min(32767,.@a)); break;
- //case 6: break; <= gender
- case 8: statusup2 bInt, max(1,min(99,.@a)) - readparam(bInt); break;
- case 10: skill max(1,min(32767,.@a)), max(0,min(10,.@b)), max(0,min(2,.@c)); break;
- case 11: statusup2 bLuk, max(1,min(99,.@a)) - readparam(bLuk); break;
- //case 12: break; <= mercenary
- case 15: makepet max(1002,min(32767,.@a)); break;
- case 16: setq max(0,min(32767,.@a)), max(0,min(32767,.@b)); break;
- case 18: statusup2 bStr, max(1,min(99,.@a)) - readparam(bStr); break;
- case 19: getitem max(1,min(32767,.@a)), max(1,min(32767,.@b)); break;
- case 21: statusup2 bVit, max(1,min(99,.@a)) - readparam(bVit); break;
- case 22: warp .@args$[0], .@b, .@c; break;
- case 23: BaseLevel = max(1,min(99,.@a)); break; // XXX: maybe also set BaseExp
- case 24: JobLevel = max(1,min(255,.@a)); break; // XXX: maybe also set JobExp
- case 25: Zeny = max(0,min(0x7FFFFFFE,.@a)); #MerchantBank = max(0,min(0x7FFFFFFF,.@b)); break;
+ case 97: /* a => Agi */
+ .@base = readparam(bAgi);
+ statusup2 bAgi, parsev(.@base, .@args$[0], 1, 99) - .@base;
+ break;
+ /* (b) */
+ case 99: /* c => job */
+ jobchange max(0, min(6, .@a));
+ break;
+ case 100: /* d => Dex */
+ .@base = readparam(bDex);
+ statusup2 bDex, parsev(.@base, .@args$[0], 1, 99) - .@base;
+ break;
+ case 101: /* e => equip */
+ equip max(1, min(32767, .@a));
+ break;
+ /* (f) */
+ /* (g) => gender (reserved) */
+ /* (h) */
+ case 105: /* i => Int */
+ .@base = readparam(bInt);
+ statusup2 bInt, parsev(.@base, .@args$[0], 1, 99) - .@base;
+ break;
+ /* (j) */
+ case 107: /* k => skill */
+ .@k = max(1, min(32767, .@a));
+ skill .@k, parsev(getskilllv(.@k), .@args$[1], 0, 10);
+ break;
+ case 108: /* l => luk */
+ .@base = readparam(bLuk);
+ statusup2 bLuk, parsev(.@base, .@args$[0], 1, 99) - .@base;
+ break;
+ /* (m) => mercenary (reserved) */
+ /* (n) => talk to npc (reserved) */
+ /* (o) */
+ case 112: /* p => pet */
+ makepet max(1002, min(32767, .@a));
+ break;
+ case 113: /* q => quest */
+ .@q = max(0, min(32767, .@a));
+ setq .@q, parsev(getq(.@q), .@args$[1]),
+ parsev(getq2(.@q), .@args$[2]),
+ parsev(getq3(.@q), .@args$[3]),
+ parsev(getqtime(.@q), .@args$[4]);
+ break;
+ /* (r) */
+ case 115: /* s => Str */
+ .@base = readparam(bStr);
+ statusup2 bStr, parsev(.@base, .@args$[0], 1, 99) - .@base;
+ break;
+ case 116: /* t => item */
+ .@t = max(1, min(32767, .@a));
+ .@c = countitem(.@t);
+ .@v = parsev(.@c, .@args$[1], 0, 32767);
+ if (.@c > .@v)
+ delitem .@t, .@c - .@v;
+ else if (.@c < .@v)
+ getitem .@t, .@v - .@c;
+ break;
+ /* (u) */
+ case 118: /* v => vit */
+ .@base = readparam(bVit);
+ statusup2 bVit, parsev(.@base, .@args$[0], 1, 99) - .@base;
+ break;
+ case 119: /* w => warp */
+ warp .@args$[0], .@b, .@c;
+ break;
+ case 120: /* x => base level */
+ BaseLevel = parsev(BaseLevel, .@args$[0], 1, 99);
+ BaseExp = parsev(BaseExp, .@args$[1], 0);
+ break;
+ case 121: /* y => job level */
+ JobLevel = parsev(JobLevel, .@args$[0], 1, 255);
+ JobExp = parsev(JobExp, .@args$[1], 0);
+ break;
+ case 122: /* z => zeny */
+ Zeny = parsev(Zeny, .@args$[0], 0, 0x7FFFFFFE);
+ #MerchantBank = parsev(#MerchantBank, .@args$[1], 0, 0x7FFFFFFF);
+ break;
}
}
}
@@ -118,8 +242,5 @@ OnCall:
end;
OnInit:
- setarray $@PresetCmds$[0], "a", "b", "c", "d", "e", "f", "g", "h", "i", "j",
- "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x",
- "y", "z", 0, 1, 2, 3, 4, 5, 6, 7, 8, 9;
bindatcmd "pre", "@pre::OnCall", 0, 99, 0;
}