Hacki zyciowe do Mudleta

Forum techniczne Arkadii.
Awatar użytkownika
Rafgart
Posty: 950
Rejestracja: 09 lut 2009 10:10

Re: Hacki zyciowe do Mudleta

Post autor: Rafgart » 30 lip 2015 12:58

Moze switch zamiast ifow? :?
I nie wyswietlaj pozycji za kazdym razem, tylko zrob na krotkim alarmie.

Zurwen
Posty: 755
Rejestracja: 13 lut 2009 09:37

Re: Hacki zyciowe do Mudleta

Post autor: Zurwen » 30 lip 2015 13:35

Rafgart ma na myśli, żeby obliczenie nie wykonywało się co każda lokacja, tylko co jakiś czas jak wystąpi event wejścia na lokacje - wtedy jak przebiegniesz kilka lokacji szybko, to nie odpali się to x liczba lokacji, tylko 1 raz.
Do kontaktów z czarodziejami służy komenda ‚zglos’ (błąd/pomysl/mg).

Gleanevall
Posty: 258
Rejestracja: 13 sie 2011 21:08

Re: Hacki zyciowe do Mudleta

Post autor: Gleanevall » 30 lip 2015 14:01

Najszybszym rozwiązaniem w takich przypadkach jest struktura danych nazywana map albo dictionary (na pewno jest i w Lua). Umieścisz w kluczach zlepienie PozycjaN + PozycjaY + PozycjaX, a w wartościach ten numerek lokacji.

Awatar użytkownika
Tercoral
Posty: 712
Rejestracja: 30 sty 2013 13:44

Re: Hacki zyciowe do Mudleta

Post autor: Tercoral » 30 lip 2015 14:14

Kurde alarm sie nie bardzo przydaje, bo lokacje musza sie uaktualniac bardzo szybko.

A tego switcha znalazlem, poczytam pozniej. Dzieki za odpowiedz!

----------------------------------
Najszybszym rozwiązaniem w takich przypadkach jest struktura danych nazywana map albo dictionary (na pewno jest i w Lua). Umieścisz w kluczach zlepienie PozycjaN + PozycjaY + PozycjaX, a w wartościach ten numerek lokacji.
... Y, mozesz rozwinac?


I w ogole mam wrazenie, ze w samym moim skrypcie mappera sa razace niedociagniecia w optymalizacji.




Hmm

Czyli jak dostaje GMCP mam to zamienic na stringa, a pozniej z table.find znalesc tego stringa i sprawdzic value (ID lokacji?).
Tęczowe serce... :oops:

Migr
Posty: 37
Rejestracja: 30 kwie 2015 18:26

Re: Hacki zyciowe do Mudleta

Post autor: Migr » 30 lip 2015 15:48

Tercoralu, a musisz za każdym razem ustawiać klocek za pomocą gmcp? Nie lepiej zrobić sobie alias lub inny button z tą nastawą kiedy się zgubisz? Też zależy jak dokladne masz roomscripty...
"Twoj nos atakuje won kiszonej kapusty."

Kjell
Posty: 70
Rejestracja: 23 kwie 2015 11:01

Re: Hacki zyciowe do Mudleta

Post autor: Kjell » 30 lip 2015 15:55

Rafgart pisze:Moze switch zamiast ifow? :?
I nie wyswietlaj pozycji za kazdym razem, tylko zrob na krotkim alarmie.
W moim odczuciu zmiana switch/if to tylko kosmetyka, a wydajność niewiele się zmieni.
Co do alarmu, to dokładnie to samo przyszło mi do głowy. Tercoal, alarm jest po to, żeby nie odświeżać ani sprawdzać nic dla lokacji, które bardzo szybko przebiegasz, a jedynie tam, gdzie zwolnisz lub się zatrzymasz.

A teraz tak. Bardzo przydatne w pracy z mapperem są funkcje setRoomIDbyHash oraz getRoomIDbyHash. Pozwalają wygenerowany w dowolny sposób indentyfikator skojarzyć z daną lokacją. Jeśli hash generujesz na postawie danych lokacji z GMCP, to łatwo uzyskasz roomID i ustawisz mapper gdzie trzeba.

1. Napisz prostą funkcję generującą hash:

Kod: Zaznacz cały

function makeHash()
    return PozycjaN .. PozycjaX .. ":" .. PozycjaY
end
Na marginesie robiłbym bezpośrednio z gmcp.room.info.map.name, x, y.

2. Ponieważ masz już mapę, teraz musisz się przelecieć po lokacjach i poustawiać im hashe za pomocją

Kod: Zaznacz cały

setRoomIDbyHash(roomID, makeHash())
Nazwa funkcji jest myląca, bo sugeruje usawienie ID lokacji na podstawie hasha, a jest dokładnie odwrotnie. Dla danego roomID przypisze hash.
roomID musisz znać. Albo sobie klikasz po mapie i sprawdzasz ręcznie, co jest upierdliwe, albo korzystasz z dotychczasowych skryptów, by je pobierać, ale wtedy musisz zmapować wszystko nim wywalisz te ify. Przeróbka

Kod: Zaznacz cały

function MapyGMCPImperium()
if PozycjaN == "Urbimo" then
if PozycjaY == 31 and PozycjaX == 22 then centerview(6664)
   setRoomIDbyHash(6664, makeHash())
   table.insert(TabelkaOdwiedzonych, 6664) end
end
3. Kiedy to już będziesz miał, zamiast swoich ifów dajesz:

Kod: Zaznacz cały

local id = getRoomIdByHash(makeHash())
centerview(id)
table.insert(TabelkaOdwiedzonych, id)
Btw, po co ci ta tabelka odwiedzonych?

Awatar użytkownika
Tercoral
Posty: 712
Rejestracja: 30 sty 2013 13:44

Re: Hacki zyciowe do Mudleta

Post autor: Tercoral » 30 lip 2015 15:57

No wlasnie musze... bo, nie bardzo chce mapowac cala arke z tym gmcp.

Najwygodniej jest miec kilka lokacji ktore wiadomo ze sa wazne, typu skrzyzowania albo przystanek dylizansow i z nich czerpac. Bo jak znow wizowie cos zmienia to nie szkoda od nowa zbierac dane.

-------

Wlasnie nie bardzo juz pamietam, ale z tego co se przypominam to mam tak ze dodaje kazda lokacje na ktora "mam wejsc", ale jest stoper, typu jestes zmeczony, to biore ustawiam lokacje tabelka_odwiedzonych -1 i jakos mi ten mapper dziala.

Mapowanie mam w innym profilu niz chodzenie wiec to nie jest arcydzielo sztuki koderskiej.
Ostatnio zmieniony 30 lip 2015 16:33 przez Tercoral, łącznie zmieniany 1 raz.
Tęczowe serce... :oops:

Migr
Posty: 37
Rejestracja: 30 kwie 2015 18:26

Re: Hacki zyciowe do Mudleta

Post autor: Migr » 30 lip 2015 16:08

Hmm, ale funkcję z podwójnym ifem odpalasz za każdym nadejsciem danych przez gmcp(czyli co ruch), czy tylko na tych skrzyżowaniach?
Druga sprawa, ile ifow i elseifow ma ta funkcja i czy jest globalna, czy lokalna, powiazana z konkretnym roomem?
Jeśli jest tak jak cytuje Kjell poniżej, to chyba posłuchaj jego rad z tymi hashami dla unikatowych lokacji.
Ostatnio zmieniony 30 lip 2015 16:23 przez Migr, łącznie zmieniany 1 raz.
"Twoj nos atakuje won kiszonej kapusty."

Kjell
Posty: 70
Rejestracja: 23 kwie 2015 11:01

Re: Hacki zyciowe do Mudleta

Post autor: Kjell » 30 lip 2015 16:09

Najwygodniej jest miec kilka lokacji ktore wiadomo ze sa wazne, typu skrzyzowania albo przystanek dylizansow i z nich czerpac. Bo jak znow wizowie cos zmienia to nie szkoda od nowa zbierac dane.
No to żaden problem. Ustawiasz hash tylko dla tych ważnych lokacji, a resztę olewasz. I moja metoda dalej się sprawdzi. Wtedy dla porządku dodaj warunek sprawdzający id:

Kod: Zaznacz cały

local id = getRoomIdByHash(makeHash())
if id > 0 then
  centerview(id)
  table.insert(TabelkaOdwiedzonych, id)
end
Ja mam zmapowaną całą z hashami na bazie GMCP od marca i nie musiałem nic zmieniać. Chyba tak często tych zmian nie ma. :)

Awatar użytkownika
Tercoral
Posty: 712
Rejestracja: 30 sty 2013 13:44

Re: Hacki zyciowe do Mudleta

Post autor: Tercoral » 30 lip 2015 16:38

Ja mam zmapowaną całą z hashami na bazie GMCP od marca

I nie laguje? :P
Tęczowe serce... :oops:

ODPOWIEDZ