Strona 2 z 13

Re: Hacki zyciowe do Mudleta

: 30 lip 2015 12:58
autor: Rafgart
Moze switch zamiast ifow? :?
I nie wyswietlaj pozycji za kazdym razem, tylko zrob na krotkim alarmie.

Re: Hacki zyciowe do Mudleta

: 30 lip 2015 13:35
autor: Zurwen
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.

Re: Hacki zyciowe do Mudleta

: 30 lip 2015 14:01
autor: Gleanevall
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.

Re: Hacki zyciowe do Mudleta

: 30 lip 2015 14:14
autor: Tercoral
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?).

Re: Hacki zyciowe do Mudleta

: 30 lip 2015 15:48
autor: Migr
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...

Re: Hacki zyciowe do Mudleta

: 30 lip 2015 15:55
autor: Kjell
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?

Re: Hacki zyciowe do Mudleta

: 30 lip 2015 15:57
autor: Tercoral
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.

Re: Hacki zyciowe do Mudleta

: 30 lip 2015 16:08
autor: Migr
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.

Re: Hacki zyciowe do Mudleta

: 30 lip 2015 16:09
autor: Kjell
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. :)

Re: Hacki zyciowe do Mudleta

: 30 lip 2015 16:38
autor: Tercoral
Ja mam zmapowaną całą z hashami na bazie GMCP od marca

I nie laguje? :P