Küldetés

Started by Crysis2, 2021-03-04, 17:47:26

Sziasztok.

Adott ez a quest :

quest beran7_setaou begin
state start begin
when logout begin
if pc.get_map_index() == 79 then
pc.delqf("icerdesin")
end
end
when 30121.chat."Meg akarom ölni a sárkányt!" with pc.get_map_index() == 73 begin
if game.get_event_flag("ejder_kullanimda") == 2 then
say_title("Sura szellem:")
say("")
say("Már vannak a kristály teremben!")
say("Vagy nem telt le a 60 perc türelmi idő.")
say("Az 1 perc bemeneti idő lejárt.")
say("")
end
if game.get_event_flag("time_1") - get_time() < 0 and game.get_event_flag("ejder_kullanimda") >= 1 then
game.set_event_flag("ejder_kullanimda",0)
kill_all_in_map(79)
warp_all_to_village(79)
end
if game.get_event_flag("ejder_kullanimda") == 0 and pc.count_item(30179) < 3 then
say_title("Sura szellem:")
say("Szükséged van 3x: "..item_name(30179)..":")
say_item_vnum(30179)
say("3 db Csavart kulcsra van szükséged.")
return
end
if game.get_event_flag("ejder_kullanimda") == 1 then
say_title("Sura szellem:")
say("")
say("Sajnos a templomban vannak.")
say("Ha tudod a helyes kódot,")
say("van esélyed hogy bejuss.")
say("De 3 db Csavart kulcs kell!")
say("")
local sifre = tonumber(input(""))
if game.get_event_flag("ejder_sifresi") == sifre then
say_title("Sura Szellem:")
say("")
if pc.count_item(30179) < 3 then
say("Nem engedhetlek be.")
say("Szükséged van 3x: "..item_name(30179)..":")
say_item_vnum(30179)
say("Nincs elég kulcsod, gyere vissza ha ")
say("mind a 3 db kulcs meg van.")
return
end
pc.remove_item("30179",3)
say("Gratulálunk, helyes kód!")
say("Be engedlek, győzd le és térj vissza!")
pc.setqf("icerdesin",1)
say("[DELAY value; 1000]. . . . . . . . . .[/DELAY]")
wait()
pc.warp(825715, 1063792)
elseif sifre != game.get_event_flag("ejder_sifresi") then
say_title("Sura Szellem:")
say("Sajnálom, hibás kód.")
return
end
end
if game.get_event_flag("ejder_kullanimda") == 0 and pc.count_item(30179) >= 3 then
say_title("Sura Szellem:")
say("")
say("Az első emberek akik szeretnének belépni ")
say("a sárkány templomába. Ha van elegendő számú ")
say("Csavart kulcsotok, bemehettek, 3 db kell fejenként.")
say("Adj meg egy kódot, a többiek ezzel tudnak bejutni.")
say("Ha megadtad a kódot, társaidnak 1 percük lesz")
say("bemenni, 1 perc lejárta után már nem tudnak csatlakozni!")
say("Viszont csak 60 percetek van megölni a sárkányt.")
say("")
local i = select("Készen vagyok!", "Mégse akarok bemenni! ")
if 1 == i and game.get_event_flag("ejder_kullanimda") == 0 then
say_title("Sura Szellem:")
say("Most írd be a kódodat:")
say("")
say_reward("A kód számokból álljon!")
local sifre = tonumber(input(""))
if sifre and sifre <= 999999999 and pc.count_item(30179)>=3 then
say_title("Sura Szellem:")
say("")
say("Ha be szeretnél belépni a sárkányhoz,")
say("Kell:")
say("3x:")
say_item_vnum(30179)
local zaxd = select("Megyek!","Mégse akarok bemenni! ")
if zaxd == 2 then
return
elseif zaxd == 1 and game.get_event_flag("ejder_kullanimda") == 0 then
say_title("Sura Szellem:")
say("")
say("Rendben, azonnal teleportállak..")
say("Sok szerencsét a Sárkányhoz!")
pc.remove_item("30179",3)
pc.setqf("icerdesin",1)
pc.setqf("lider",1)
pc.setqf("ejder_sifre",sifre)
clear_server_timer("ejderi_kescen",get_server_timer_arg())
clear_server_timer("disari_yolluyoz",get_server_timer_arg())
game.set_event_flag("ejder_kullanimda",1)
game.set_event_flag("ejder_sifresi",sifre)
game.set_event_flag("time_1", get_time()+60*60*1)
say("[DELAY value; 1000]. . . . . . .[/DELAY]")
wait()
pc.warp(825715, 1063792)
elseif zaxd == 1 and game.get_event_flag("ejder_kullanimda") == 1 then
say_title("Sura Szellem:")
say("")
say("Már várnak a teremben.. Ha tudod a helyes ")
say("jelszót akkor írd be és mehetsz is.")
end
else
say_title("Sura Szellem:")
say("")
say_reward("Kódnak számokból kell állnia!")
say_reward("A Kód max 9 db szám legyen.")
end
end
end
end

when login begin
if pc.getqf("icerdesin") == 1 then
send_letter("Öld meg a Kék sárkányt!")
end
end

when button or info begin
q.set_clock("Hátralévő idő: ", game.get_event_flag("time_1")-get_time())
beran7_setaou.ejder_odasi_kalansure()
end

when login with pc.get_map_index() == 79 and pc.getqf("icerdesin") != 1 begin
warp_to_village()
end

when login with pc.get_map_index() == 79 and pc.getqf("lider") == 1 begin
kill_all_in_map(79)
notice_all(""..pc.get_name().." (és csoportja) megpróbálja megölni a Kék sárkányt!")
notice(""..pc.getqf("ejder_sifre").." a kód, 1 percük van bemenni a társaidnak!")
notice("Gyerünk!")
notice("Szörnyek megjelenése 60 másodperc múlva.")
server_timer("sifre_kapat", 60,pc.get_map_index())
server_timer("ejderi_kescen1", 3598,pc.get_map_index())
server_timer("ejderi_kescen", 3600,pc.get_map_index())
beran7_setaou.ejder_odasi_kalansure()
pc.setqf("lider",2)
pc.set_warp_location(73 , 2418, 12747)
end

when login with pc.get_map_index() == 79 and pc.getqf("icerdesin") == 1 and pc.getqf("lider") != 1 begin
beran7_setaou.ejder_odasi_kalansure()
pc.set_warp_location(73 , 2418, 12747)
end

when 8031.kill or 8032.kill or 8033.kill or 8034.kill with pc.get_map_index() == 79 begin
local n =game.get_event_flag("kesilen_metin") + 1
game.set_event_flag("kesilen_metin", n)
if n > 3 then
local t = number(1,4)
if 1 == t then
regen_in_map(79,"data/dungeon/skia_boss1.txt")
elseif 2 == t then
regen_in_map(79,"data/dungeon/skia_boss2.txt")
elseif 3 == t then
regen_in_map(79,"data/dungeon/skia_boss3.txt")
else
regen_in_map(79,"data/dungeon/skia_boss4.txt")
end
end
end

when 2493.kill with pc.get_map_index() == 79 and game.get_event_flag("ejder_kullanimda") >= 1 begin
game.drop_item_with_ownership("71123",1)
game.drop_item_with_ownership("71129",1)
notice_all(""..pc.get_name().." (és csapata) sikeresen megölte a Kék sárkányt!")
notice("60 másodperc múlva ki lesztek portálva.")
game.set_event_flag("kesilen_metin",0)
clear_server_timer("ejderi_kescen",get_server_timer_arg())
clear_server_timer("ejderi_kescen1",get_server_timer_arg())
server_timer("disari_yolluyoz",60, pc.get_map_index())
kill_all_in_map(79)
end

when 2493.kill with pc.get_map_index() != 79 begin
game.drop_item_with_ownership("71123",1)
game.drop_item_with_ownership("71129",1)
notice_all(""..pc.get_name().." (és csapata) sikeresen megölte a Kék sárkányt!")
end

when sifre_kapat.server_timer begin
game.set_event_flag("ejder_kullanimda",2)
regen_in_map(79,"data/dungeon/skia_deliboss.txt")
end

when disari_yolluyoz.server_timer begin
notice_all("A Kék sárkány visszatért!")
kill_all_in_map(79)
clear_server_timer("ejderi_kescen",get_server_timer_arg())
game.set_event_flag("ejder_kullanimda",0)
warp_all_to_village(79)
end


when ejderi_kescen.server_timer with game.get_event_flag("time_1") - get_time() <= 0 begin
notice_all("A Kék sárkány visszatért!")
game.set_event_flag("ejder_kullanimda",0)
kill_all_in_map(79)
warp_all_to_village(79)
end

when login with pc.get_map_index() != 79 begin
if pc.getqf("icerdesin") == 1 then
pc.delqf("icerdesin")
pc.delqf("ejder_sifre")
pc.delqf("lider")
end
if pc.getqf("lider") == 1 then
pc.delqf("lider")
end
end

function ejder_odasi_kalansure()   
           
local saniyekalan = (game.get_event_flag("time_1") - get_time())
            local dakikakalan = math.ceil(saniyekalan / 60)   

            notice("Még "..dakikakalan.."percetek van megölni a Kék sárkányt!")
       
        end
end
end


Hogyan lehetne úgy megoldani a küldetést hogy mindenki egy időben bent tartozkodhasson és mindenkitől elvegye a belépőt?

Előre is köszi!

Úgy érted hogy egyszerre több csoport is ölhessen sárkányt egyszerre (minden csapat saját sárkányt), vagy bárki bemehessen bármikor?


"Az a baj a világgal, hogy a hülyék  mindenben holtbiztosak, az okosak meg tele vannak kételyekkel."
              Bertrand Russel


2021-04-02, 08:25:49 #2 Last Edit: 2021-04-02, 08:48:28 by Crysis2
Úgy szeretném hogy bárki bemehessen a runra(több csoport egyszerre) egy időben és mindenkitől kérjen el belépőt is.
Ha esetleg erre tudnál nekem instrukciókat adni vagy esetleg egy kész questet ami ezen alapszik megköszönném!

2021-04-03, 13:17:43 #3 Last Edit: 2021-04-03, 13:23:40 by TMP4
Megírni helyetted nem fogom de elmondom hogy kell.

Először is pc.warp helyett d.new_jump_party kell, fontos megjegyezni hogy itt az alap koordinátával dolgozunk és nem a kiegészítettel mint a pc.warp esetén.
(825715, 1063792) <-- bár nem 00 van a végén de ha ez az alap koordináta ami nagyon valószínű akkor így add meg: (8257, 10637)

Következő lépés hogy a 79-es mapindex helyett a 79-es mapindex összes dungeonos változatát kell ellenőrzni mindenhol, tehát így kell használni
pc.get_map_index() >= (79 * 10000) and pc.get_map_index() < (79 * 10000 + 9999)
Ugye ha dungeonként használod a 79-es mappot akkor az index 790000-799999 tartományból sorba a következő elérhető szám lesz.

A jelszós részt teljesen kiveheted, dungeonba utólag belépni már nem lehet. (Nyilván nem lehetetlen leprogramozni, de nem célszerű és nem is indokolt)

Azt hogy mindenkitől vegye el a belépőt már összetettebb dolog. Több lehetőséged is lehet, én személy szerint a hivatalos úton csinálnám meg és kimásolnám Hydra (Defance_wave) questjéből.
Itt a quest: https://pastebin.com/Qx6VmyTn
Maga az ellenőrzés a function _CheckMembersDW()-ben történik, amit az npc-vel beszélgetés közben így használ:
if defance_wave._CheckMembersDW() == false then
return
else
timer("make_dungeonDF", 1) -- nem muszáj timer, mehet bele szerintem diretkbe is a d.new_jump_party
end


A kulcsok elvétele pedig ahogy látod a mapra való belépésnél van, csalni igazából nem tudnak vele hisz warp előtt ellenőrizve volt hogy mindenkinél van-e. Így ha egy party member messze vagy más mapon van és nem teleportálódik el, akkor ugye nem veszi el tőle feleslegesen a kulcsot, tehát van ennek értelme is.

Aláírom hogy ezt így nem egyszerű megcsinálni, főleg ha valaki nem rutinos a questekben, de ha tényleg át akarod alakítani az általad lefektetett kitételekre a sárkány termet, muszáj lesz végigzongoráznod.