// @w atcommand // warps using anchors or map name // // group lv: 1 // group char lv: 2 // log: True // // usage: // @w [, x [, y]] // #w "char" [, x [, y]] // // example: // @w artis // #w "char" artis - script @w 32767,{ end; OnCall: .@params$ = strtoupper(strip(implode(.@atcmd_parameters$[0], " "))); .@request$ = replacestr(.@params$, " ", ""); cleararray($@regexmatch$[1], "", 3); if (.@params$ ~= "^(.+) ([0-9]+) ([0-9]+)$") { .@request$ = replacestr(strip($@regexmatch$[1]), " ", ""); .@req_x = atoi(strip($@regexmatch$[2])); .@req_y = atoi(strip($@regexmatch$[3])); } .@ht = getvariableofnpc(.ht, "__anchors__"); .@it = htiterator(.@ht); for (.@key$ = htifirstkey(.@it); hticheck(.@it); .@key$ = htinextkey(.@it)) { if (.@request$ ~= .@key$) { sscanf(htget(.@ht, .@key$, ""), "%s %d %d", .@map$, .@x, .@y); break; } } htidelete(.@it); .@map$ = .@map$ ? .@map$ : .@request$; .@x = .@req_y ? .@req_x : .@x; .@y = .@req_y ? .@req_y : .@y; if (getmapinfo(MAPINFO_ID, .@map$) < 0) { if (getmapinfo(MAPINFO_ID, .@atcmd_parameters$[0]) >= 0) { .@map$ = .@atcmd_parameters$[0]; } else { dispbottom(l("Map or anchor not found: %s", .@atcmd_parameters$[0])); end; } } while (!checkcell(.@map$, .@x, .@y, cell_chkpass)) { // FIXME: this whole cell finding loop is DIRTY! // we should have a command to get a random free coordinate // or we should make buildin_warp silently ignore 0,0 if (.@e == 50) break; // FIXME: triggers a console warning .@x = rand(20, 20 + (.@e * 5)); .@y = rand(20, 20 + (.@e * 5)); ++.@e; } warp(.@map$, .@x, .@y); end; OnInit: if (debug) { bindatcmd("w", "@w::OnCall", 0, 20, 1); bindatcmd("go", "@w::OnCall", 0, 20, 1); bindatcmd("to", "@w::OnCall", 0, 20, 1); } else { bindatcmd("w", "@w::OnCall", 20, 60, 1); bindatcmd("go", "@w::OnCall", 20, 60, 1); bindatcmd("to", "@w::OnCall", 20, 60, 1); } end; }