Mudlet 3.* - skrypty + mapper

Forum techniczne Arkadii.
Awatar użytkownika
Adremen
Posty: 242
Rejestracja: 31 gru 2009 11:13

Re: Mudlet 3.* - skrypty + mapper

Post autor: Adremen »

Alraen pisze: 27 gru 2019 12:04 Ja to also jestem skryptowym debilem calkiem, albo po aktualizacji dziala tylko /db i /ob.
Z warunkiem na konkretny pojemnik (/db1, /db2, /db3) nie dziala.
Czy to jest celowe?
Zdecydowanie jest to regresja, naprawione w 3.15, ktore wyjdzie dzisiaj/jutro.
Awatar użytkownika
Adremen
Posty: 242
Rejestracja: 31 gru 2009 11:13

Re: Mudlet 3.* - skrypty + mapper

Post autor: Adremen »

Skrypty 3.15

Aktualizacja do wersji 3.15. Zawiera poprawki do obslugi broni, mozliwosc uzywania wiekszej liczby temp bindow, oraz inne poprawki.

Zostaly rowniez ustandaryzowane makra w pojemnikach i pojemnikach na bron, takze niektorzy z was beda musieli sobie zaktualizowac konfiguracje w pliku imie.txt

Pomoce zostaly zaktualizowane:
pojemniki
bronie, tarcze i zbroje

Cala lista zmian jest tutaj

AKTUALIZACJA

zaktualizowany plik imie.txt w paczce zip oraz tutaj. Nie ma w nim zmian koniecznych do dzialania na 3.15.

Aktualizacja: '/aktualizuj_skrypty'.
Tutaj jest pełna paczka: Skrypty 3.15

W razie jakichkolwiek problemow zapraszam na discorda na kanal #mudlet. Jest nas tam sporo i wielu z nas moze pomoc w razie jakichkolwiek problemow. Mozna tez pisac w tym temacie.
Awatar użytkownika
Dargoth
Posty: 13
Rejestracja: 04 mar 2009 23:02

Re: Mudlet 3.* - skrypty + mapper

Post autor: Dargoth »

Howgh!

Wykorzystując to, że jest to mój pierwszy post po długiej nieaktywności puszczę oczko do tych, którzy mnie może jeszcze pamiętają - dosyć długo zajmowałem się skryptami do zMUDa jeszcze na forum twoj.net pod nickiem Delwing :)

Anyway! Jako, że zMUD i cMUD nie bardzo się do czegokolwiek dzisiaj nadają mój wybór padł na Mudlet, między innymi dzięki obszernej paczce Adremena.

No ale wiadomo, każdy lubi dostosować pewne rzeczy pod siebie, i fajnie byłoby, żeby dało się wpiąć swoją funkcjonalność w istniejące skrypty, a z drugiej strony sensownie byłoby mieć możliwość dalszego aktualizowania skryptów. Do rzeczy!

Zrobiłem sobie mały, oddzielny "highlighter" do mapy, który chcę wywołać, za każdym gotoRoom i doSpeedWalk

Poniżej skrypt:

Kod: Zaznacz cały

if Highlighter == nil then
  Highlighter = {
    currentHighlight = {},
    highlightedRooms = {},
  }
end

function Highlighter:do_highlight(roomId)
  Highlighter:cancel_all_highlights()
  Highlighter.roomId = roomId
  local path = getPath(amap.curr.id, roomId)
  self.currentHighlight = speedWalkPath
  
  for i=1,table.size(self.currentHighlight) do
    highlightRoom(tonumber(self.currentHighlight[i]), 255, 255, 255, 0, 0, 0, 0.75, 255, 255)
    table.insert(self.highlightedRooms, tonumber(self.currentHighlight[i]))
  end
  cecho("Odleglosc: " .. table.size(self.currentHighlight) .. "\n")
end

function Highlighter:cancel_highlight()
  for i=1,table.size(self.currentHighlight) do
  	unHighlightRoom( tonumber(self.currentHighlight[i]) )
  end	
  self.currentHighligh = {}
end

function Highlighter:cancel_all_highlights()
  for i=1,table.size(self.highlightedRooms) do
  	unHighlightRoom( tonumber(self.highlightedRooms[i]) )
  end	
  self.highlightedRooms = {}
end

function Highlighter:rehighlight(roomId)
  if Highlighter.roomId ~= nil then
    Highlighter:cancel_all_highlights()
    Highlighter:do_highlight(Highlighter.roomId)
  end
end

if realGoToRoom == nil then
  realGoToRoom = gotoRoom
  gotoRoom = function(roomId) 
    Highlighter:do_highlight(roomId)
    realGoToRoom(roomId)
  end
  registerAnonymousEventHandler("amapWalkerFinished", function() Highlighter:cancel_all_highlights() end)
end

if realdoSpeedWalk == nil then
  realdoSpeedWalk = doSpeedWalk
  doSpeedWalk = function()
    Highlighter:do_highlight(speedWalkPath[table.size(speedWalkPath)])
    realdoSpeedWalk()
  end
end
Czyli właściwie przypisujemy oryginalną funkcję pod naszą zmienną, a oryginalną referencję wskazujemy na naszą funkcję, w której wywołujemy oryginalną funkcję, przy czym przed i po możemy wywołać jeszcze nasz kod.

No i teraz te funkcje z Higlightera mozna sobie dodać pod przyciski, triggery i tak dalej.


Jak widzicie jakieś błędy, bzdury dajcie znać, dopiero się uczę w temacie Mudletowego API, a z LUA większą styczność miałem z 10 lat temu :)
Delwing
Awatar użytkownika
Dargoth
Posty: 13
Rejestracja: 04 mar 2009 23:02

Re: Mudlet 3.* - skrypty + mapper

Post autor: Dargoth »

Skrypt do łatwej aktualizacji opisu lokacji (np. sklep, kowal itd) (baza skrypty Adremena)

Alias pattern:

Kod: Zaznacz cały

^/capture (.*)$
Kod:

Kod: Zaznacz cały

local capturedLines = {}
local descriptionLine = ""
send(matches[2])
local trigger = tempRegexTrigger("^(.*)$", function()  table.insert(capturedLines , matches[2]) end)
tempTimer(1, function() 
  killTrigger(trigger) 
  for k,v in pairs(capturedLines ) do
    descriptionLine = descriptionLine .. v .. "\n"    
  end
  amap.db:set_desc(nil, descriptionLine)
end)
Wpisujemy np.

Kod: Zaznacz cały

/capture przejrzyj
Do opisu lokacji zapiszę się wszystko co przyleci do nas z Arkii w ciągu sekundy (można to zmniejszyć, zwiększyć albo sparametryzować ewentualnie).
Dla mnie good enough, żeby się z tym nie szarpać za bardzo.
Ostatnio zmieniony 07 sty 2020 00:12 przez Dargoth, łącznie zmieniany 2 razy.
Delwing
Awatar użytkownika
Dargoth
Posty: 13
Rejestracja: 04 mar 2009 23:02

Re: Mudlet 3.* - skrypty + mapper

Post autor: Dargoth »

Skrypt przypominając o zostawionej broni w stojaku

Tutaj zmieniam scripts.utils.execute_functional, żeby móc nie tylko wysłać komendę, ale wywołać jeszcze callback przy wciśnięciu binda, który sobie rejestruję.
@Adremen, może by dodać opcję właśnie rejestrowania bind_functional z callbackiem opcjonalnym.

Trigger z patternem (nie dam sobie głowy uciąć, że jest uniwersalny, w Zamku Sigmara na pewno działa)
Pattern:

Kod: Zaznacz cały

^Wkladasz (.*) do (.*) stojaka na bron\.$
Code:

Kod: Zaznacz cały

WeaponReminder:register()
Skrypt:

Kod: Zaznacz cały

if realExecuteFunctional == nil then
  realExecuteFunctional = scripts.utils.execute_functional
  scripts.utils.execute_functional = function()
    realExecuteFunctional()
    if scripts.utils.functionalCallback ~= nil then
      scripts.utils.functionalCallback()
      scripts.utils.functionalCallback = nil
    end
  end
end

function scripts.utils.bindFunctionalCallback(command, silent, callback)
  scripts.utils.bind_functional(command, silent)
  scripts.utils.functionalCallback = callback
end
  
if WeaponReminder == nil then
  WeaponReminder = {}
end

function WeaponReminder:register()
  if WeaponReminder.handler then
    killAnonymousEventHandler(WeaponReminder.handler)
  end
  WeaponReminder.handler = registerAnonymousEventHandler("amapNewLocation", WeaponReminder.remind)
  WeaponReminder.roomId = amap.curr.id
end

function WeaponReminder:remind(roomId)
  if WeaponReminder.roomId == roomId then
    cecho("<red>Nie zapomnij broni!")
    
    scripts.utils.bindFunctionalCallback("wez bronie ze stojaka", false, function() killAnonymousEventHandler(WeaponReminder.handler) end)
  end
end
Delwing
Kreslin
Posty: 21
Rejestracja: 19 kwie 2015 22:06

Re: Mudlet 3.* - skrypty + mapper

Post autor: Kreslin »

Witam,
przerósł mnie temat. Po paru latach chce sobie pobiegać, ściągnąłem klienta ale mapper nie chce ze mną gadać.
Jak wlacze opcje zaladuj mape pojawia sie:

> /zaladuj_mape
[ OK ] - Map loaded successfully (0s).
[ ALERT ] - At least one thing was detected during that last map operation
that it is recommended that you review the most recent report in
the file:
"C:/Users/User/.config/mudlet/profiles/Arkadia/log/errors.txt"
- look for the (last) report with the title:
"Loading map(1) "C:/Users/User/.config/mudlet/profiles/Arkadia/map_master3.dat" at 2020-
01-11T09:10:29 report".
(skrypty): Mapa zaladowana

i owszem pojawia się okienko mapy, nawet mogę sobie wybrać lokalizacje ale tylko, ze niezależnie od tego jaka lokalizacje wybiorę i tak w okienku mapy mam napis " No map or not valid position" a faktycznej mapy brak.

Jak wpisze pobierz mape mam

/pobierz_mape
[ OK ] - Map loaded successfully (0s).
[ ALERT ] - At least one thing was detected during that last map operation
that it is recommended that you review the most recent report in
the file:
"C:/Users/User/.config/mudlet/profiles/Arkadia/log/errors.txt"
- look for the (last) report with the title:
"Loading map(1) "C:/Users/User/.config/mudlet/profiles/Arkadia/map_master3.dat" at 2020-
01-11T09:20:14 report".
(skrypty): Mapa zaladowana

Ktos może pomoc i powiedzieć gdzie mam błąd ?

Z góry dzięki
Creslin

PS
od razu powiem, ze wiek mnie już szarpnął także jeśli jest taka możliwość to prosiłbym o maksymalnie łopatologiczne wyjaśnienie :)
Awatar użytkownika
Adair
Posty: 86
Rejestracja: 21 lut 2017 09:30

Re: Mudlet 3.* - skrypty + mapper

Post autor: Adair »

Zaloguj się, wejdź na Arce gdzieś, gdzie jest GMCP, czyli trakt lub miasto. Wpisz /zlok.

Szybszą odpowiedź dostać możesz na naszym discordzie, tutaj: https://discord.gg/SYeCfP
Awatar użytkownika
Dargoth
Posty: 13
Rejestracja: 04 mar 2009 23:02

Re: Mudlet 3.* - skrypty + mapper

Post autor: Dargoth »

Jako, że mapper otwiera się i tak ręcznie, co jest bezsensem troszkę, że nie da (albo nie wiem jak), żeby otworzył się sam...
Ja sobie dodałem do skryptów coś takiego (czyli odpalamy mapper PO zalogowaniu i mamy z głowy).

Kod: Zaznacz cały

registerAnonymousEventHandler("mapOpenEvent", function()
  expandAlias("/zlok")
  setMapZoom(35)
end)
Od razu też zoom ustawiam sobię taki jak mi wygodniej.
Delwing
Kreslin
Posty: 21
Rejestracja: 19 kwie 2015 22:06

Re: Mudlet 3.* - skrypty + mapper

Post autor: Kreslin »

Dzięki za pomoc.
Działa.
Darnell
Posty: 2
Rejestracja: 05 lut 2019 21:46

Re: Mudlet 3.* - skrypty + mapper

Post autor: Darnell »

Witam,
mam problem ze zmianą plecaka na torbę, w pliku imie.txt zmieniam ustawienia z 1 na 2, niestety dalej chce używać mi w plecaka.
Oczywiście po zmianie ładuję plik z imieniem.

-- Domyslne pojemniki do monet (money), kamieni (stones), jedzenia (food),
-- i wszystkiego innego (other)
--
-- Dozwolone wartosci:
-- - 1 (to jest "plecak")
-- - 2 (to jest "torba")
-- - 3 (to jest "worek")
-- - 4 (to jest "sakiewka")
-- - 5 (to jest "mieszek")
-- - 6 (to jest "sakwa")
-- - 7 (to jest "wor")
scripts.inv["money_bag"] = 2
scripts.inv["stones_bag"] = 2
scripts.inv["food_bag"] = 2
scripts.inv["other_bag"] = 2
ODPOWIEDZ