diff options
author | gumi <mekolat@users.noreply.github.com> | 2017-03-08 11:12:09 -0500 |
---|---|---|
committer | gumi <mekolat@users.noreply.github.com> | 2017-03-08 16:01:42 -0500 |
commit | 2c80c6f15d22d0e6aa96b5ac32a89490faa9ba68 (patch) | |
tree | 473bdcf1aa71bfe564981719e536b196d654073f | |
parent | f1212444b8c14b37214dc6de3e83f959161b587b (diff) | |
download | serverdata-s20170404.tar.gz serverdata-s20170404.tar.bz2 serverdata-s20170404.tar.xz serverdata-s20170404.zip |
improve the preset commands20170404
-rw-r--r-- | npc/commands/debug-preset.txt | 195 |
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; } |