Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Funkcja...dungeon() - czyli jeden mob w wielu dungeonach


~bonzo

Rekomendowane odpowiedzi

Opublikowano

Wiem, temat może się wydawać bezsensowny, ale jest napisany głównie, żeby zbić %.

Natknąłem się ostatnio na quest, gdzie mamy cuś takiego:

when kill with npc.get_race() == 2493 and pc.in_dungeon() begin

Wszystko fajnie, tylko jeżeli wystąpi on jeszcze w innych dungeonach i będzie tak samo zadeklarowane, pojawi się niezły burdel. Co możemy z tym fantem zrobić?

 

Osobiście rozwiązałbym to tak. Zróbmy to na przykładzie komnaty smoka.

Przy teleportacji do komnaty, ustawiamy questflag komnata_smoka na wartość 1.

							pc.setqf("komnata_smoka", 1)
							pc.setqf("komnata_smoka_count", party.get_near_count())
							d.join(208)

No dobrze. Ale teraz cofnijmy się do początku questa. Dodamy tam sobie funkcję:

function in_dung()
	if pc.in_dungeon() and pc.getqf("komnata_smoka") == 1 and pc.get_map_index()>= 208*10000 and pc.get_map_index() < 209*10000 then
		return true
	end
end

Jak widzicie, sprawdza ona index mapy, quest flag i fakt, czy jesteśmy w dungeonie. Jeżeli spełniamy warunki zwraca nam wartość true. Wiadomo, jeżeli nie to false, ale nie widzę sensu tego deklarować. Jak to wykorzystamy w quescie? Ano tak:

when login with komnata_smoka.in_dung() begin
	d.notice("Witaj w Komnacie Smoka!")
end

Tylko taki przykład. Pewnie znane, napiszecie to lepiej, krócej, czy coś, jak zwykle :-)

gwo9.jpg


Opublikowano

Popraw funkcje, bo chyba się rozpędziłeś w warunku i czegoś zapomniałeś :).

 

if pc.in_dungeon() and pc.getqf("komnata_smoka") == 1 and 208*10000 and pc.get_map_index() < 209*10000 then

Jeśli chodzi o funkcje to wszystko będzie dobrze, jest to dobre zabezpieczenie. Ja osobiście używam przykładowo:

                            pc.setqf("ice_run", 1)

na pierwszej platformie, następnie przy wejściu na drugą (np. po ubiciu jakiegoś moba):

                            pc.setqf("ice_run", 2)

i tak dalej... Każda platforma ma swoja wartość flag i tylko z nią warunki do zabicia moba są spełniane. Przydaje się to właśnie do zabezpieczenia warunku dungeona, ale też do różnych GUI jako sprawdzanie piętra/platformy na której jesteśmy.

 

Jeśli chodzi o zapis:

when kill with npc.get_race() == 2493 and pc.in_dungeon() begin

to wolę taki:

when 2493.kill with pc.in_dungeon() begin
Opublikowano
when 2493.kill with pc.in_dungeon() begin

I na MPC topic:

"LUDZIE, DLACZEGO ZABICIE SMOKA DZIAŁA MI TYLKO W JEDNYM QUEŚCIE"

 

Wyjaśnij mi teraz tylko jedno, jesteś kretynem czy tylko udajesz? Podałem przykład zastąpienia zapisu

when kill with npc.get_race() == 2493 begin

na

when 2493.kill begin

Kwestia zabezpieczenia warunków w dungeonie została już wcześniej wyjaśniona... i teraz topic na mpc:

"LUDZIE, DLACZEGO NADAL NIE NAUCZONO MNIE MYŚLEĆ I CZYTAĆ ZE ZROZUMIENIEM?"

Opublikowano

 

Popraw funkcje, bo chyba się rozpędziłeś w warunku i czegoś zapomniałeś :).

Jeśli chodzi o funkcje to wszystko będzie dobrze, jest to dobre zabezpieczenie. Ja osobiście używam przykładowo:

                            pc.setqf("ice_run", 1)

na pierwszej platformie, następnie przy wejściu na drugą (np. po ubiciu jakiegoś moba):

                            pc.setqf("ice_run", 2)

i tak dalej... Każda platforma ma swoja wartość flag i tylko z nią warunki do zabicia moba są spełniane. Przydaje się to właśnie do zabezpieczenia warunku dungeona, ale też do różnych GUI jako sprawdzanie piętra/platformy na której jesteśmy.

 

Jeśli chodzi o zapis:

when kill with npc.get_race() == 2493 and pc.in_dungeon() begin

to wolę taki:

when 2493.kill with pc.in_dungeon() begin

Ło jezu masz rację z tym warunkiem, już poprawiam. Ale jednak wolałbym zostać przy tym npc.get_race().

gwo9.jpg


Opublikowano

 

Wyjaśnij mi teraz tylko jedno, jesteś kretynem czy tylko udajesz? Podałem przykład zastąpienia zapisu

when kill with npc.get_race() == 2493 begin

na

when 2493.kill begin

Kwestia zabezpieczenia warunków w dungeonie została już wcześniej wyjaśniona... i teraz topic na mpc:

"LUDZIE, DLACZEGO NADAL NIE NAUCZONO MNIE MYŚLEĆ I CZYTAĆ ZE ZROZUMIENIEM?"

Następnym razem jak tak wyskoczysz, to zastanów się na ile się na tym znasz, czy dobrze wiesz jak działają questy, jaki masz zasób doświadczenia a dopiero później zrób z siebie idiotę ;)

1384449750-U247153.png

Opublikowano

Następnym razem jak tak wyskoczysz, to zastanów się na ile się na tym znasz, czy dobrze wiesz jak działają questy, jaki masz zasób doświadczenia a dopiero później zrób z siebie idiotę ;)

Ponad 21 miesięcy pracy nad swoimi plikami, 3 serwery. Tak, myślę że się znam, mam doświadczenie oraz wiem jak działają questy, a ty nadal nie nauczyłeś się czytać ze zrozumieniem i cały czas robisz z siebie durnia. Chcesz coś jeszcze dodać? - zapraszam na PW.

 

@aw.

Ja bym ta funkcję zadeklarował jako globalną dla całego serwera z 3 atrybutami: flag, wartość i index mapy, by można było używać jednej funkcji do każdego dungeona. Coś w tym stylu:

function in_dung(flag, value, index)
	if pc.in_dungeon() and pc.getqf(flag) == value and pc.get_map_index()>= index*10000 and pc.get_map_index() < (index+1)*10000 then
		return true
	end
end

i wywołanie:

when login with in_dung("komnata_smoka", 1, 208) begin

lub przykładowo w dalszej części questa:

when login with in_dung("komnata_smoka", 2, 208) begin

itd.

Opublikowano

Ponad 21 miesięcy pracy nad swoimi plikami, 3 serwery. Tak, myślę że się znam, mam doświadczenie oraz wiem jak działają questy, a ty nadal nie nauczyłeś się czytać ze zrozumieniem i cały czas robisz z siebie durnia. Chcesz coś jeszcze dodać? - zapraszam na PW.

 

@aw.

Ja bym ta funkcję zadeklarował jako globalną dla całego serwera z 3 atrybutami: flag, wartość i index mapy, by można było używać jednej funkcji do każdego dungeona. Coś w tym stylu:

function in_dung(flag, value, index)
	if pc.in_dungeon() and pc.getqf(flag) == value and pc.get_map_index()>= index*10000 and pc.get_map_index() < (index+1)*10000 then
		return true
	end
end

i wywołanie:

when login with in_dung("komnata_smoka", 1, 208) begin

lub przykładowo w dalszej części questa:

when login with in_dung("komnata_smoka", 2, 208) begin

itd.

Można i w ten sposób, tylko myślałem, że każdy kto doda ją do questa, edytuje ją sobie w indywidualny sposób.

gwo9.jpg


Opublikowano
Jeśli chodzi o zapis:
when kill with npc.get_race() == 2493 and pc.in_dungeon() begin
to wolę taki:
when 2493.kill with pc.in_dungeon() begin

Wytłumaczy mi ktoś czym to się różni? Bo w sumie to byłem przekonany że jak damy xxx.kill to jeśli damy go w innym quescie to robi nam burdel.

 

 

Co do Top a znałem to bo miałem u siebie do każdego dungeona pododawane :P

aFMA3pg.png

Opublikowano
Jeśli chodzi o zapis:
when kill with npc.get_race() == 2493 and pc.in_dungeon() begin
to wolę taki:
when 2493.kill with pc.in_dungeon() begin

Wytłumaczy mi ktoś czym to się różni? Bo w sumie to byłem przekonany że jak damy xxx.kill to jeśli damy go w innym quescie to robi nam burdel.

Co do Top a znałem to bo miałem u siebie do każdego dungeona pododawane :P

 

.kill jest tak jakby "dedykowane" do warunków z zabiciem moba. Funkcja npc.get_race() jest głównie do wykorzystania wewnątrz questa do różnych warunków/tablic, ale oczywiście też działa do warunków z zabiciem danego moba. Zbytnio się nie wgłębiałem jaka jest dokładnie między nimi różnica, lecz wolę lecieć na funkcjach/warunkach, które nie są zbytnio niepotrzebnie złożone. Poza tym jest to wygodniejsze w pisaniu questa.

Opublikowano
Jeśli chodzi o zapis:
when kill with npc.get_race() == 2493 and pc.in_dungeon() begin
to wolę taki:
when 2493.kill with pc.in_dungeon() begin

Wytłumaczy mi ktoś czym to się różni? Bo w sumie to byłem przekonany że jak damy xxx.kill to jeśli damy go w innym quescie to robi nam burdel.

 

 

Co do Top a znałem to bo miałem u siebie do każdego dungeona pododawane :P

 

Użycie w jednym queście

when 101.kill begin

Spowoduje, iż jeżeli w drugim queście użyjesz

when 101.kill begin

To warunek uruchomi się tylko dla tego skryptu, który jako pierwszy widnieje w skompilowanych.

 

Ale przecież Mr. pracuś 21 miesięcy nad plikami i posiadający 3 serwery dalej będzie się spierał, iż używanie id.kill jest lepsze od npc.get_race() i nawet po wytłumaczeniu mu tego, zapiera się jak idiota :)

1384449750-U247153.png

Opublikowano

//Edit.

Dobra już nie musisz się wysilać, wreszcie zrozumiałem o co ci chodzi... W ten sposób moby mi nie kolidują ze względu na to, że do każdego dungeonu mam oddzielnego bosa z indywidualnym ID ewentualnie o tym samym modelu, gdyż do każdego bosa indywidualnie ustawiam lvl, DMG, HP (o ile używam danego bosa na kilku dungeonach np. w bossrun gdzie jest podział na lvle) . Nigdy mi się w ten sposób to nie kłóci. Trzeba było od poczatku pisać, że chodzi ci o to, że do danego id może być tylko jeden warunek .kill przypisany.

Opublikowano

Chyba nikt nie wspomniał o fakcie, że używając x.kill dodaje nam folder x do object. Generalnie przy wyłącznym użyciu do dungeonów można jeszcze się na coś takiego powołać, ale i tak bym chuchał na zimne i użył npc.get_race() które dodaje nam 'pliki questowe' do notarget.

gwo9.jpg


Opublikowano
when login with komnata_smoka.in_dung() begin
	d.notice("Witaj w Komnacie Smoka!")
end

A co, jeśli nazwę questa "smocza_komnata" ?

 

Znawcą nie jestem, ale na logikę questa nie skompiluję, nazwy muszą się zgadzać. No ale pewnie to wiesz :v

Opublikowano

Panowie wyżej, ja polecam

 

when kill begin
if npc.get_race() == 101 then
end
end

Można tak więcej mobów dodać nie zaśmiecająć questa whenami. Przydatne to systemu achievmentów czy kill gui :)

ZcWbjGf.png


Serdecznie zapraszam :)

Opublikowano

Panowie wyżej, ja polecam

when kill begin
if npc.get_race() == 101 then
end
end

Można tak więcej mobów dodać nie zaśmiecająć questa whenami. Przydatne to systemu achievmentów czy kill gui :)

Dlaczego?

when kill with npc.race == x or npc.race == y ... begin
local mob = {x,y,...}
for i = 1, table.getn(mob) do
if npc.race == mob[i] then
akcja...
end
end
end

gwo9.jpg


Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...