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

Funkcje w questach


Rekomendowane odpowiedzi

Opublikowano

Witam.

W tym temacie będę umieszczał wszystkie znane mi funkcje do questów w metin2. Dodatkowo będzie opis, składnia i przykład. Jeżeli przy opisie lub w funkcji pojawi się (?) oznacza, że co do opisu/składni nie jestem pewien. Spis będę na bieżąco aktualizował o nowe funkcje.

 

Niestety na mpc spoiler'y nie działają poprawnie i nic tutaj nie widać. Lepiej będzie chyba jak przerobię to na HTML'a.

 

Przykład jak by to wyglądało w HTMLu:

http://veygr.cba.pl/metin2/funkcje.php

 

affect.*

 

affect.add_collect
Dodaje bonus. Wykorzystywany np. w queście u biologa. Przykład:

affect.add_collect(<ID lub apply.nazwa>, <wartość>, <czas>)
affect.add_collect(8, 10, 60*60*24*365*60)
affect.add_collect(apply.MOV_SPEED, 15, 60*60*24*365*60)

 

affect.remove
affect.remove_bad
affect.remove_good
Usuwa bonusy (wszystkie, negatywne, pozytywne). Przykład: (?)

 

affect.remove()
affect.remove_bad()
affect.remove_good()

 

 

 

 

d.*

 

d.check_eliminated
Quest będzie czekał, aż wszystkie moby na dungeonie zostaną zabite. Przykład:

 

d.check_eliminated()

 

d.clear_regen
Przestaje respić moby z regenu, który został wcześniej ustawiony. Przykład:

 

d.clear_regen()

 

d.exit
Wyrzuca daną osobę z dungeonu. Przykład:

 

d.exit()

 

d.exit_all
Wyrzuca wszystkich z dungeonu. Przykład:

 

d.exit_all()

 

d.exit_all_to_start_position
Wyrzuca wszystkich na pozycje stratowe. Przykład: (?)

 

d.exit_all_to_start_position()

 

d.get_map_index
Zwraca index mapy dungeonu. Przykład:

 

d.get_map_index()

 

d.getf
Zwraca wartość zmiennej w dungeonie. Nie jest przechowywana w bazie, a po wyjściu z dungeonu jest usuwana. Przykład:

 

d.getf("<nazwa>")
d.getf("ilosc")

 

d.join
Wrzuca całe PT na dungeon. Mapa z której wchodzimy i dungeon musi być na tym samym procesie game. Wrzuci nas na resp, który jest podany w ./locale/map/<nazwa mapy>/Town.txt Przykład:

 

d.join(<index mapy>)
d.join(206)

 

d.jump_all
Przerzuca wszystkich w dungeonie na nowe miejsce. Przeważnie współrzędne są podawane jako x+X, y+Y, gdzie x i y to współrzędne, a X i Y to współrzędne (BasePosition) z ./locale/map/<nazwa mapy>/Setting.txt. Przykład:

 

d.jump_all(x+X, y+Y)
d.jump_all(547+80000, 45+0)

 

d.kill_all
Zabija wszystkie moby na dungeonie. Przykład:

 

d.kill_all()

 

d.notice
Wyświetla do wszystkich w dungeonie na czacie tekst na złoto (tak jak pisze GM). Przykład:

 

d.notice("TEKST ")

 

d.purge
Usuwa wszustkie moby na dungeonie. Przykład:

 

d.purge()

 

d.regen_file
Respi jednorazowo moby z regenu. Przykład:

 

d.regen_file("<scieżka>")
d.regen_file("data/dungeon/deviltower2_regen.txt")

 

d.set_regen_file
Ustawia regen na dungeonie. Przykład:

 

d.set_regen_file("data/<ścieżka>/<plik>.txt")
d.set_regen_file("data/dungeon/zombietower5_regen.txt")

 

d.set_warp_at_eliminate
Funkcja regeneruje moby z pliku, a po ich zabiciu teleportuje nas na nowe współrzędne. Przykład: (?)

 

d.set_warp_at_eliminate(<?>, d.get_map_index(), <XXX>+<xxx>, <YYY>+<yyy>, "data/<ścieżka>/<plik>.txt")
d.set_warp_at_eliminate(4, d.get_map_index(), 123233+141, 12320+155, "data/dungeon/zombietower3_regen.txt")

 

d.setf
d.setqf
Funkcja regeneruje moby z pliku, a po ich zabiciu teleportuje nas na nowe współrzędne. Przykład: (?)

 

d.setf("<nazwa zmiennej>", <wartosc>)
d.setf("ilosc", 5)

 

d.spawn_mob
Spawnuje moba na danych współrzędnych. Przykład:

 

d.spawn_mob(<ID>, <xxx>, <yyy>)
d.spawn_mob(20073, 421, 452)

 

 

 

 

Wiadomości:

 

chat
Wyświetla na czacie napis (tylko dla 1 osoby). Przykład:

 

chat("TEKST ")

 

delay
Spowalnia wyświetlanie się wiadomości w okienku. Przykład:

 

say("[DELAY value;<wartość>]<text>[/DELAY]")
say("[DELAY value;400]. . .[/DELAY]")

 

 

 

 

game.*:

 

game.drop_item
Wyrzuca przedmiot na ziemię. Nie jest podpisany nickiem. Przykład:

 

game.drop_item(<ID>, <ilość>)
game.drop_item(50084, 1)

 

game.drop_item_with_ownership
Drop przedmiotu na ziemię z podpisanym nickiem (przynależność do jednego, danego gracza). Przykład: (z4z0l)

 

game.drop_item_with_ownership(<ID>, <ilość>)
game.drop_item_with_ownership(50084, 1)

 

game.get_event_flag
Pobiera zmienną globalną. Przykład:

 

game.get_event_flag("<nazwa>")
if game.get_event_flag("arena_close") > 0 then

 

game.set_event_flag
Pobiera zmienną globalną. Przykład:

 

game.set_event_flag("<nazwa>", <wartość>)
game.set_event_flag("arena_close", 1)

 

game.open_safebox
Otwiera okno od Dozorcy "Magazyn". Przykład:

 

game.open_safebox()

 

game.open_mall
Otwiera okno od Dozorcy "Przedmioty z IS". Przykład:

 

game.open_mall()

 

 

 

 

 

horse.*:

 

horse.advance
Podnosi poziom konia z 10 na 11 (bojowiec) lub z 20 na 21 (militar). Przykład:

 

horse.advance()
horse.unride()
horse.advance()
horse.ride()

 

horse.feed
Karmi konia. Przykład:

 

horse.feed()
local food = horse.get_grade() + 50054 - 1
if pc.countitem(food) > 0 then
    pc.removeitem(food, 1)
    horse.feed()
else
    say("Aby wykonać tą czynność, potrzebujesz tych")
    say("przedmiotów: "..item_name(food).."")
    say("")
end

 

horse.get_grade
Zwraca typ konia (1 - zwykły, 2 - bojowiec, 3 - militar). Przykład:

 

horse.get_grade()

 

horse.get_health
horse.get_health_pct
Zwraca życie konia (pct w %). Przykład:

 

horse.get_health_pct()
say("Aktualna siła Konia: "..horse.get_health_pct().."%")

 

horse.get_stamina
horse.get_stamina_pct
Zwraca staminę konia (pct w %). Przykład:

 

horse.get_stamina_pct()
say("Aktualna wytrzymałość Konia: "..horse.get_stamina_pct().."%")

 

horse.get_level
Zwraca poziom konia. Przykład:

 

horse.get_level()

 

horse.get_name
Zwraca nazwe konia (zwraca 0 jeżeli brak). Przykład:

 

horse.get_name()

 

horse.is_dead
Sprawdza czy koń jest martwy. Przykład:

 

horse.is_dead()
if horse.is_dead() then

horse.is_riding
Sprawdza czy siedzimy na koniu. Zwraca 0 jeżeli nie. Przykład:

 

horse.is_riding()
if horse.is_riding()==0 then

horse.revive
Ożywia konia. Przykład:

 

horse.revive()

horse.ride
horse.unride
Wsiada/zsiada na konia. Przykład:

 

horse.ride()
horse.unride()

horse.set_level
Daje poziom konia. Przykład:

 

horse.set_level(<poziom>)
horse.set_level(30)

horse.set_name
Nadaje koniu imię. Przykład:

 

horse.set_name(<nazwa>)
local horse_name = input()
if string.len(horse_name) < 2 then
	say_title("Nazwa konia")
	say("Nazwa jest zbyt krótka.")
	say("")
	return
elseif string.len(horse_name) > 12 then
	say_title("Nazwa konia")
	say("Nazwa jest zbyt długa.")
	say("")
	return
end
local ret = horse.set_name(horse_name)
say_title("Nazwa konia")
if ret == 0 then
	say_reward("Nie masz momentalnie konia!")
	say("")
elseif ret == 1 then
	say_reward("Nie możesz używać tej nazwy!")
	say("")
elseif ret == 2 then
	pc.remove_item("71110")
	say("Dałeś swojemu koniowi nowe imię! ")
	say("")
end

horse.summon
horse.unsummon
Przywołuje / odwołuje na konia. Przykład:

 

horse.summon()
horse.unsummon()

 

 

 

 

 

Timery:

 

clear_server_timer
Czyści, usuwa server_timer. Przykład:

 

clear_server_timer('<nazwa>', get_server_timer_arg())
clear_server_timer('devil_stone5_fail', get_server_timer_arg())

 

cleartimer
Czyści, usuwa timer. Przykład:

 

cleartimer('<nazwa>')
cleartimer('failtimer')

 

 

 

 

Inne:

 

char_log
Wykonuje zapytanie MySQL do log.log. Przykład:

 

char_log(0, "HORSE_UPGRADE", "BEGIN")

 

command
Wykonuje komendę. Trzeba posiadać prawa do niej. Przykład:

 

command("<nazwa>")
command("shutdown")

 

find_npc_by_vnum
Zaznacza na mapie NPC. W grze pojawia się nad nim strzałka. Używane do questów fabularnych jak mamy udać się do danego NPC. Przykład:

 

when letter begin
	local v = find_npc_by_vnum(<ID>)
	if v != 0 then
		target.vid("<nazwa celu>", v, "<nazwa listu> ")
	end
	send_letter("<nazwa listu> ")
end
when <nazwa celu>.target.click or 20023.chat."Poszukiwania pomnika " begin
	target.delete("<nazwa celu>")
when letter begin
	local v = find_npc_by_vnum(20023)
	if v != 0 then
		target.vid("__TARGET__", v, "Poszukiwania pomnika ")
	end
	send_letter("Poszukiwania pomnika ")
end
when __TARGET__.target.click or 20023.chat."Poszukiwania pomnika " begin
	target.delete("__TARGET__")

 

find_pc_by_name
Szuka gracza o podanej nazwie. Zwraca 0 jeżeli podano zły nick lub jest zalogowany na innej mapie. Przykład: (?)

 

local find = find_pc_by_name(name)
local name = input() -- przupisuje do "name" nick gracza
local find = find_pc_by_name(name) -- szuka danego gracza
local select = pc.select(find) -- "przełącza" się na szukanego gracza
local level = pc.get_level() -- przypisuje do "level" poziom szukanego gracza
pc.select(select) -- powraca do naszej postaci

 

get_global_time
Pobiera czas globalny serwera. Przykład:

 

get_global_time()
pc.setqf("new_withdraw_time",get_global_time())

 

get_time
Pobiera czas serwera. Przykład:

 

get_time()
d.setf("czas_start",get_time())
if get_time() < pc.getqf("duration") then

 

 

 

 

Opublikowano

Nieciekawie opisane, słaba estetyka i czytelność. Popracuj nad tym i podziel na kategorie po czym spakuj je w spoiler.

 

@edit

 

Mapa z której wchodzimy i dungeon musi być na tym samym indexie.

nie rozumiem - dlaczego?

 

@edit2

ok, zmieniłeś ;)

 

umarł

Opublikowano

Nie indexie tylko na procesie game. Poprawiłem już tam.
Jak kiedyś robiłem dungeon i wchodziło się z świątyni hwang (game1) na DC (game1-2) to teleport nie działał. Dopiero po przeniesieniu świątyni na ten sam proces (game1-2) dopiero teleport zaczął działać. Tak przynajmniej u mnie było.

Opublikowano

Spoko spoko, teraz wszystko pasuje - po prostu za szybko napisałeś czy coś. W pierwszym spoilerze ładnie to zaczyna wyglądać, wszystko dodasz w code i będzie cud miód.

 

umarł

Opublikowano

Nie zapomniałem, tylko jeszcze ich nie napisałem. Nie będę pisał na temat każdej funkcji kilka linijek, gdyż biorąc pod uwagę ile jest funkcji było by tego dużo, a to ma być krótkie i na temat.

Opublikowano

Ciekawie by bylo gdyby inni dodawali cos od siebie, wtedy bylby to wielki spis funkcji wraz z ich opisem ;]

 

masz lajka,

 

szczegolnie sporo sie dowiedzialem na temat

 

2 pkt.

athlonsygnaturka.png

Opublikowano



game.drop_item_with_ownership(id_przedmiotu, ilosc)

Drop przedmiotu na ziemię z podpisanym nickiem (przynależność do jednego, danego gracza). Prawdopodobnie nie będziecie tego mieli standardowo w plikach (jeżeli używacie mcncc z 2010 "czystych") dlatego trzeba dopisać linijkę



game.drop_item_with_ownership

do pliku quest_functions.

 

@beka że zamienia mcn cc bez spacji na kaszanka :D

 

 

 



string.gsub(wartosc, szukana_fraza, zamiana, ogranicznik)

przykład:



string.gsub("Przykładowy", "y", "a")

jeżeli ogranicznik jest pusty to podmieni wszystkie znalezione wartości

 

wynik:

 

Przakładowa

 

umarł

Opublikowano

Komuś się nudziło i w cenzurze słów dopisał mcn.cc, żeby zamieniało na kaszanka.

 

Korzystam z standardowego quest_functions, dlatego tej funkcji nie miałem. Dodane do spisu.

Opublikowano

Spoko poradnik. Jak tylko trochę ogarnę robienie questów to postaram się ci pomóc w tej kwestii. I myślę, że ludzie ogarnięci w tej kwestii też powinni pomóc.

 

Jeśli chodzi o przykłady, to myślałbym raczej o konkretnych questach, które można wgrać na serwer i testować.

Opisać selecta? :P


Pomagam w projektach dotyczących programowania (C++/C/Java/C#/inne). Jak masz jakiś problem, napisz do mnie, wspólnie poszukamy rozwiązania ;).

Opublikowano

Może jak skończę opisywać funkcje to będą przykładowe questy z różnymi funkcjami, tak aby w 1 queście jak najwięcej pokazać.

Opublikowano

Postaraj się jeszcze opisać, co dane funkcję przyjmują, ewentualnie co dane funkcje zwracają.

 

Dodaj jeszcze number().

 

mam jeszcze wątpliwości do funkcji game.drop_item_with_ownership - zamieść uwagę dotyczącą tego questa (to, co napisał z4z0l kilka postów wyżej).


Pomagam w projektach dotyczących programowania (C++/C/Java/C#/inne). Jak masz jakiś problem, napisz do mnie, wspólnie poszukamy rozwiązania ;).

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...