diff options
Diffstat (limited to 'npc/commands/warp.txt')
-rw-r--r-- | npc/commands/warp.txt | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/npc/commands/warp.txt b/npc/commands/warp.txt new file mode 100644 index 000000000..e64b87db1 --- /dev/null +++ b/npc/commands/warp.txt @@ -0,0 +1,116 @@ +// @w atcommand +// warps using anchors or map name +// +// group lv: 1 +// group char lv: 2 +// log: True +// +// usage: +// @w <map or anchor> [, x [, y]] +// #w "char" <map or anchor> [, x [, y]] +// +// example: +// @w artis +// #w "char" artis + +- script @w 32767,{ + end; + +OnCall: + .@request$ = strtoupper(strip(.@atcmd_parameters$[0])); // sanitize + .@map$ = ""; + .@x = 0; + .@y = 0; + + for (.@i = 0; .@i < .count; .@i += 2) + { + if (.@request$ ~= .aliases$[.@i]) + { + sscanf .aliases$[.@i + 1], "%s %d %d", .@map$, .@x, .@y; + break; + } + } + + if (.@map$ == "") + { + .@map$ = .@atcmd_parameters$[0]; + } + + if (.@atcmd_parameters$[2] != "") + { + .@x = atoi(.@atcmd_parameters$[1]); + .@y = atoi(.@atcmd_parameters$[2]); + } + + // FIXME: here getmapusers() is used only to check if the map exists + // replace this when/if we get a dedicated function for that + if (getmapusers(.@map$) < 0) + { + end; // invalid map + } + + while (!checkcell(.@map$, .@x, .@y, cell_chkpass)) + { + if (.@e == 50) end; + .@x = rand(20, 250); + .@y = rand(20, 250); + ++.@e; + } + + cwarp .@map$, .@x, .@y; // XXX: maybe here use a slide_or_warp function + +OnInit: + setarray .aliases$[0], + + // ARTIS + "^ART", "001-1 89 86", // artis town square + "^LIGHT", "001-2-0 37 32", // light armor shop + "^NOBLE1?$", "001-2-1 37 37", // noble house 1 + "^NOBLE2$", "001-2-10 40 38", // noble house 2 + "^NOBLE3$", "001-2-11 45 33", // noble house 3 + "^NOBLE4$", "001-2-12 34 32", // noble house 4 + "^NOBLE5$", "001-2-15 34 38", // noble house 5 + "^MOON", "001-2-2 39 34", // moon's house + "^LIB", "001-2-4 49 37", // library + "^CITY|^HALL", "001-2-7 36 38", // city hall + "^HARB|^MASTER", "001-2-16 32 33", // harbourmaster + "^WARE", "001-2-18 39 31", // warehouse + "^MERCH|^BANK", "001-2-19 29 31", // merchant hall + "^SHIP2$", "001-2-21 30 28", // la johanne (artis) + "^ALCH", "001-2-26 30 32", // alchemist + "^BLACK|SMITH", "001-2-27 35 32", // blacksmith + "^RED|PLUSH|^INN", "001-2-28 32 32", // red plush inn + "^LEG", "001-2-33 34 36", // legion + + // PROLOGUE + "^START|^BEGIN", "000-0 22 24", // starting point + "^START2$", "000-0-0 26 28", // starting point step 2 + "^START3$", "000-0-1 26 28", // starting point step 3 + "^DRA|ISLAND", "000-1 77 110", // drasil island + "^FIRST|^DECK1?$", "000-2-0 27 27", // first deck + "^SECOND|^DECK2$", "000-2-1 53 33", // second deck + "^HOLD$", "000-2-2 43 30", // hold + "^NARD", "000-2-3 21 27", // nard's room + "^ALIG|^HID", "000-2-4 36 29", // alige's hideout + + // WOODLAND + "^HURN", "008-1 79 64", // hurnscald: town square + "^CELE", "008-2-0 25 27", // hurnscald: celestia + "^HMER", "008-2-1 33 39", // hurnscald: merchant guild + "^RUST", "008-2-2 37 30", // hurnscald: inn + "^ARRO|^ARCH", "008-2-6 27 29", // hurnscald: archery shop + "^A?POT", "008-2-7 34 27", // hurnscald: potion shop + "^HBLA", "008-2-8 36 34", // hurnscald: forge + "^HHAL|^HCIT", "008-2-10 36 31", // hurnscald: city hall + "HOSP|CLIN", "008-2-13 25 31"; // hurnscald: clinic / hospital + + .count = getarraysize(.aliases$[0]); + + if (debug > 0) + { + bindatcmd "w", "@w::OnCall", 0, 2, 0; + end; + } + + bindatcmd "w", "@w::OnCall", 1, 2, 1; +} |