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

Przekazywanie wartości globalnych w questach


sherer

Rekomendowane odpowiedzi

Opublikowano

Cześć,

Pewnie grono osób mniej obeznanych z plikami serwerowymi ma problem z przekazywaniem wartości globalnych w questach.

Co to znaczy?

 

Np. gdy ustawiamy wartość x (np ilość graczy) w jednym quescie i chcemy ją przytoczyć w 2 quescie (to x z 1 quest).

Co prawda są funkcje pc.get_another_quest_state (i odpowiednik set), aczkolwiek mi one nie działały..

 

Jak przekazywać wartości pomiędzy questami?

 

Z pojęciem "wartości" wiążemy oczywiście liczby.

I tu przydaje nam się funkcja globalna - game.get_event_flag (oraz jej odpowiednik set).

Funkcja get i set (event_flag), zapisuje do tabelki quest wartość, nie przypisaną do żadnego questa, dzięki czemu może być używana wszędzie.

 

Jak to wygląda w praktyce?

 

Zacznijmy od zrodlo.quest.. Zapiszemy do zmiennej "test" wartość 3.

quest zrodlo begin
state start begin
when login begin
game.set_event_flag("test", 3)
end
end
end

Dobra, dane zapisane. Teraz odczytajmy je w quescie odczyt.quest.

quest odczyt begin
state start begin
when 20016.chat."Odczytaj Wartosc" begin
say(game.get_event_flag("test"))
end
end
end

Dzięki temu odczytamy wartość dla zmiennej globalnej "test".

 

Jak używać zmiennej globalnej tylko dla jednej postaci?

 

Warunek jest prosty - do zmiennej musimy przypisać cząstkę, która jest trwale przypisana do postaci.

Jako że nick można zmienić, najlepszym wyjściem jest przypisanie pidu (identyfikatora w player.player).

Pid postaci pobieramy za pomocą funkcji pc.get_player_id().

 

Jak to wygląda w praktyce?

 

Napiszmy ponownie zrodlo.quest..

quest zrodlo begin
state start begin
when login begin
game.set_event_flag(pc.get_player_id().."test", 3)
end
end
end

Teraz nasza globalna zmienna wystąpi pod postacią 1test (1 to nasz pid - jest niepowtarzalny dla każdej z postaci).

W quescie odczyt.quest odczytamy tą wartość.

quest odczyt begin
state start begin
when 20016.chat."Odczytaj Wartosc" begin
if game.get_event_flag(pc.get_player_id().."test") == 0 then
say("Twoja postac nie posiada zapisanej wartości.")
return
else
say(game.get_event_flag(pc.get_player_id().."test"))
end
end
end
end

No i jak widać - jeśli wartość wynosi 0 to znaczy, że nie ma przypisanej wartości (lub jest zero, ale to w drodze wyjątku).

Natomiast jeśli wartość jest przypisana, to zostaje wyświetlona (w tym przypadku 3).

No dobra, to na tyle :)

 

Opublikowano

ty to zrobiłeś dla jaj tak ?... bo o tym to chyba już każdy wie od dawna :P

^^ Kliknij tutaj w dól ^^



"Narodowiec, nie nazista. Prawdziwy Polak - nacjonalista! Czołem!"


CaM


Opublikowano


local a = get_quest_state("collect_quest_lv30")



get_quest_state zwraca aktualny state podanego questa. Zwracana wartość ma typ int.



tak jak ktoś pisał wyżej, można użyć pc.getf/setf

syntax dla getf to ("nazwa questa", "nazwa qf"), zaś do setf na końcu trzeba podać oczywiście wartość.



event flag ma wadę i zaletę w jednym - można łatwo zmienić wartość tego parametru, chociażby z poziomu gry bez dostępu do mysql

57199140501148694665.png

Opublikowano

@UP

 

no ok można zmienić ale bez praw nie zrobisz tego :D i mniej bawienie się jest z tym niż z tym co ty napisałeś

^^ Kliknij tutaj w dól ^^



"Narodowiec, nie nazista. Prawdziwy Polak - nacjonalista! Czołem!"


CaM


Opublikowano

Po co kombinować, skoro są do tego dedykowane funkcje? Przykładowo:

pc.get_another_quest_flag()

 

game.set_event_flag()

Jest do przekazywania wartości globalnej z której korzysta każdy gracz np. warunek do włączenia eventu.

Opublikowano
quest wow begin
	state start begin
		when login begin
			pc.setqf("czoTo", pc.getqf("czoTo")+1)
		end
	end
end

quest hmm begin
	state start begin
		when 9005."hmm?" begin
			say(pc.getf("wow", "czoTo"))
		end
	end
end

:huh:

 

Nie podoba mi sie :(

@Inkscape

Wypowiadałem się odnośnie tych funkcji - mi nie działały poprawnie na game2089 (pc.get_another_quest_flag).

Opublikowano

Nie podoba mi sie :(

@Inkscape

Wypowiadałem się odnośnie tych funkcji - mi nie działały poprawnie na game2089 (pc.get_another_quest_flag).

 

Nie tylko pc.get_another_quest_flag() można do tego wykorzystać. Nawet zwykły pc.getf() zadziała, natomiast wykorzystywanie do tego funkcji globalnej służącej do deklarowania czegokolwiek dla całego serwera...

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...