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?
Ú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!
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.