[QUEST TUTORIAL] Alapok, kezdőknek és haladóknak!

Indította huzsihun1997, 2015-12-12, 17:08:24

Sziasztok, úgy gondoltam, kifejtem a quest (lua) írással kapcsolatos dolgokat.
A Témát még bővíteni fogom, egyenlőre szerintem ezzel a tudásal is a kezdők megtudnak írni, néhány alap questet. Azért hozom létre a témát, hátha kevesebb quest kérős topic lesz, a segítség menüben.
Elöször is, ittvan rin témája, a droppokról. http://metin2hungary.net/index.php/topic,186674.msg981065.html#msg981065

-------------------------------ALAPVETŐ PARANCSOK---------------------
d.notice("")  Felül irja ki,dungeonban csak
notice("") Felül irja ki
notice_all("") Felül irja ki, mindenkinek.
chat("") lent írja ki, fehérrel
say("") megnyíló ablakban írja ki
syschat("") lent írja ki, pirossal.
say_item_vnum(ITEMID) megmutatja az ITEMID képét.
say_reward("") megnyíló ablakban írja ki, pirossal.

------------------------------------KEZDÉS-----------------------------
Elöször is, a questet mindig így kezdjük:

quest questneve begin
    state start begin


folytatásnál több lehetőség is van, NPC-re irjuk, tárgyra, vagy valami hasonló.
Itt van pár lehetőség:

when TÁRGYID.use begin

Ezzel azt érjük el, hogy a TÁRGYID-re kattintva, előhozza a questünket.

when NPCID.chat."MENÜ NEVE" begin

Ezzel azt érjük el, ha az NPCID-re kattintunk, előhoz egy opciót, aminek MENÜ NEVE a neve. ha rákattintunk a MENÜ NEVE-re, előhozza a questünket.

Ezeket lehet bővíteni nagyon-nagyon sok mindennel.
Pár példa:
(mindegyiket WITH-el kell kapcsolni hozzá)

game.get_event_flag("EVENT1") == 1
Ezzel azt érjük el, hogy a menü csak akkor jön elő, ha az EVENT1 event aktív.
pl:
when TÁRGYID.use with game.get_event_flag("EVENT1") == 1 begin
Így csak eventkor lehet a tárgyra kattintani.
Ezt szinte bármivel ellehet játszani.
Karakter szintjével = pc.get_level()
Mapindexel = pc.get_map_index()
Dungeonnal = pc.in_dungeon()
Tárgyal (ha van nála valamilyen tárgy csak akkor nyíljon meg) = pc.countitem(TÁRGYID) > Mennyiség (Pl. pc.countitem(50097)>9)
Ezeket lehet nagyon sokáig "csicsázni"
pl:
when login with pc.in_dungeon() and pc.get_map_index() >= 310000 and pc.get_map_index() < 320000 begin
Ez akkor fut le, ha valaki belép a 310000 és a 320000 közötti mappindexen, dungeonként. Tehát ha bármelyik nem teljesül, nem fut le, pl belép a 310000 és a 320000 közötti mappindexen, de nem dungeonként akkor nem fut le.

Választható opciók létrehozása:

local opcióneve=select("Opció1","Opció2","Opció3")
Új opciókal úgy tudjuk bővíteni, hogy hozzáírunk mégegyet, ,"OPCIÓX" (elötte vessző, és két ""közé irjuk!)
Ha az utolsó opció az, hogy "Mégse" akkor egyből ez alá szurjunk be egy vissza funkciót!
if opcióneve==2 then return end

Tehát
local opcióneve=select("Opció1","Opció2","Mégsem")
if opcióneve==3 then return end

if opcióneve==3 then azért 3, mert a 3. opcióra kattintásnál bezárja a questet.

További opciók meghatározása:
if opcióneve==1 then
ide jöhet hogy mi történjen, ha az elsőre kattintanak
end

------------------------Időzítések.------------------------

Ha időzítve akarunk futtatni valamit, timerrel tudjuk megoldani.
Egy egyszerü példa.
Ha meghal a vadkutya, 1 perc múlva teleportája el a játékost valahova.
when 101.kill begin  <--- vadkutya megölése
timer("vadkutya", 60)  <---vadkutya a timer neve, ez bármi lehet. 60 pedig a másodperc, hogy 60 másodperc múlva történjen valami.
end Lezárás.
Ezután megkell hívni a timert.
Tehát,
when vadkutya.timer begin <--- amikor a vadkutya timer elindul történjen valami
pc.warp(36100, 248600) <--- ez fog történi ha a timer elindul
end Lezárás.

-------------------Számlálók.----------------------

Mivel most volt halloween, így irjunk halloweenről!
Itt, a "halloweenitok" a GF neve, és mivel elötte van hogy "d." ezért csak dungeonban fog lefutni. anélkül (set.gf és get.gf parancsot használjuk)
d.setf("hallowenitok", d.getf("hallowenitok") + 1) ez azt csinálja, hogy hozzáad a "halloweenitok" gf-hez egyet, dungeonban.
pl:
when 101.kill begin
d.setf("hallowenitok", d.getf("hallowenitok") + 1)
end

Tehát, ha megölik a vadkutyán, dungeonban, akkor a halloweenitok GF-hez hozzáad egyet.

Ezeket kilehet íratni szám formátumban, pl:

d.notice("Eddig "..d.getf("hallowenitok").."/49 Halloweeni Szellemet öltél meg!.")

Ez játékban így fog megjelenni például:

Eddig 7/49 Halloweeni Szellemet öltél meg!

--------------------loop timer-----------------------------

Autómatikus időzítés.

pl:
when login begin
loop_timer("ezegyautomataidozites", 1)
end


Ha valaki "loginol" (belép) minden másodpercben lefut. (az 1 határozza meg a másodpercet)

Hogy mi történjen ha lefut, azt külön tudjuk meghatározni, így.

when ezegyautomataidozites.timer begin

pl, minden másodpercben kapjon 100 yangot.

when ezegyautomataidozites.timer begin
pc.change_money(100)
end