diff --git a/Arkadia.xml b/Arkadia.xml index 0f62fe38..444949ee 100644 --- a/Arkadia.xml +++ b/Arkadia.xml @@ -26689,6 +26689,27 @@ ^/idz$ + + prowadz + + + + ^/prowadz (\d+)$ + + + prowadz skrot + + + + ^/prowadz (\w+)$ + + + prowadz- + + + + /prowadz- + diff --git a/mapper/help.lua b/mapper/help.lua index 7df94ad6..9b75bddd 100644 --- a/mapper/help.lua +++ b/mapper/help.lua @@ -37,6 +37,9 @@ function amap:print_help() cecho("| /idz - jesli weszlismy na lokacje z dwoma wyjsciam (wedlug mappera), |\n") cecho("| to alias ten wykona kierunek aby podazac dalej. Dziala to na podstawie wyjsc |\n") cecho("| wyjsc z mappera Mudletowego, a nie GMCP/Arkadiowej mapy. |\n") + cecho("| /prowadz [id] - pokazuje na mapie sciezke do lokacji aktualizowana co krok. |\n") + cecho("| /prowadz [nazwa_skrotu] - - pokazuje na mapie sciezke do skrotu. |\n") + cecho("| /prowadz- - wylacza sciezke prowadzaca do lokacji |\n") cecho("| |\n") cecho("| ----------------------- |\n") cecho("| CHODZIK |\n") diff --git a/mapper/path.lua b/mapper/path.lua new file mode 100644 index 00000000..fbb53fcb --- /dev/null +++ b/mapper/path.lua @@ -0,0 +1,59 @@ +amap.path_display = amap.path_display or { + highlighter = Highlight:new({}, {255, 200, 150}, {150, 100, 255}) +} + +function amap.path_display:start(destination) + if not tonumber(destination) then + destination = amap.shortcuts:get_room_by_name(destination) + if not destination then + scripts:print_log("Podaj ID lub prawidlowa nazwe skrotu.") + return + end + end + self.destination = tonumber(destination) + + if self.destination == amap.curr.id then + scripts:print_log("Jestes juz na tej lokacji.") + return + end + + self:show_destination() + self.handler = scripts.event_register:force_register_event_handler(self.handler, "amapNewLocation", function() self:show_destination() end) + registerMapInfo("GPS", function() return self:map_info() end) + enableMapInfo("GPS") + if not getPath(amap.curr.id, self.destination) then + scripts:print_log("Aktualnie nie jestem w stanie znalezc sciezki do lokacji " .. destination) + end +end + + +function amap.path_display:stop() + self.highlighter:clear() + scripts.event_register:kill_event_handler(self.handler) + disableMapInfo("GPS") + killMapInfo("GPS") +end + +function amap.path_display:show_destination() + if amap.curr.id == self.destination then + self:stop() + return + end + self.highlighter:clear() + if getPath(amap.curr.id, self.destination) then + self.highlighter:set_locations(speedWalkPath) + self.highlighter:on() + end +end + +function amap.path_display:map_info() + return string.format("Sciezka do %d | Odleglosc: %s", self.destination, #speedWalkPath > 0 and #speedWalkPath or "?"), true +end + +function alias_func_prowadz(id) + amap.path_display:start(id) +end + +function alias_func_prowadz_stop() + amap.path_display:stop() +end \ No newline at end of file diff --git a/mapper/walker_highlights.lua b/mapper/walker_highlights.lua index b2d7ed71..a07a89f8 100644 --- a/mapper/walker_highlights.lua +++ b/mapper/walker_highlights.lua @@ -1,28 +1,25 @@ amap.walker_highlights = amap.walker_highlights or { - highlighter = Highlight:new({}, {255, 200, 150}, {150, 100, 255}), event_handlers = {} } function amap.walker_highlights:register_events() - table.insert(self.event_handlers, scripts.event_register:register_event_handler("amapWalkerStarted", function() self:highlight_current_path() end)) - table.insert(self.event_handlers, scripts.event_register:register_event_handler("amapWalkerTerminated", function() self:clear_highlight() end)) - table.insert(self.event_handlers, scripts.event_register:register_event_handler("amapWalkerFinished", function() self:clear_highlight() end)) + self.handler_s = scripts.event_register:force_register_event_handler(self.handler_s, "amapWalkerStarted", function() self:start() end) + self.handler_t = scripts.event_register:force_register_event_handler(self.handler_t, "amapWalkerTerminated", function() self:finish() end) + self.handler_f = scripts.event_register:force_register_event_handler(self.handler_f, "amapWalkerFinished", function() self:finish() end) end function amap.walker_highlights:deregister_events() - for k,v in pairs(self.event_handlers) do - scripts.event_register:kill_event_handler(v) - end + scripts.event_register:kill_event_handler(self.handler_s) + scripts.event_register:kill_event_handler(self.handler_t) + scripts.event_register:kill_event_handler(self.handler_f) end -function amap.walker_highlights:highlight_current_path() - self.highlighter:set_locations(speedWalkPath) - self.highlighter:on() +function amap.walker_highlights:start() + amap.path_display:start(speedWalkPath[#speedWalkPath]) end -function amap.walker_highlights:clear_highlight() - self.highlighter:clear() +function amap.walker_highlights:finish() + amap.path_display:stop() end -amap.walker_highlights:register_events() - +amap.walker_highlights:register_events() \ No newline at end of file diff --git a/scriptsList.lua b/scriptsList.lua index 7d4047b6..11cb6060 100644 --- a/scriptsList.lua +++ b/scriptsList.lua @@ -27,6 +27,7 @@ return { "mapper/room", "mapper/map", "mapper/highlighter", + "mapper/path", "mapper/walker", "mapper/walk_cmd", "mapper/walker_highlights",