Run timer

Indította idok2, 2019-11-10, 20:30:07

Hali!
Olyan problémával fordulok hozzátok, hogy runokat írtam mostanában, és nem tudom hogy kellene a timereket megoldani. Úgy csináltam, hogy amikor elindul a run elkezdődik egy timer ami 10 perc után kiirja hogy 20 perc van hátra, aztán másik ami kiírja hogy 10 utánna megint elindul és a végén kidob. Ezt ha ketten megyünk be duplán írja, mivel gondolom mind a két karakternek elindul a timer és azért írja ki kétszer is mikor vége. A végén a kiteleportálás ugye működik. Aztán a másik probléma, amikor megölik a bosst, akkor elindul az 1 perces timer ami ha vége kiteleportál a városba. Ezzel pedig az a baj hogy csak annak indul el aki megöli a bosst. Szóval ez a két hibám van, amit nem tudtam még orvosolni, ehhez kérnék segítséget. Néztem pár runt, ott a get_time al meg a flagekkel varázsoltak valamit de azt nem feltétlen értem. Köszi előre is! :D

Oszd meg a questedet és segitünk.


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


2019-11-11, 10:38:57 #2 Utolsó szerkesztés: 2019-11-11, 11:47:56 Szerző: idok2
Előre mondom, kezdő quest író vagyok, pár hasonló runt írtam még csak, mindenféle tutorial és segítség nélkül, szóval minden tippet elfogadok! Itt a quest
quest keksarkanyrun begin
state start begin
when login with pc.get_map_index() >= 790000 and pc.get_map_index() < 800000 begin
d.notice("30 percetek van megölni a Kék sárkányt!")
d.notice("1.szint: Öljétek meg Yonghan parancsnokot!")
timer("keksarkany1notice", 10*60)
end

when 2492.kill with pc.get_map_index() >= 790000 and pc.get_map_index() < 800000 begin
d.notice("Megöltétek Yonghan parancsnokot.")
d.notice("2.szint: Pusztítsatok el 2 követ.")
d.regen_file("eleresi ut")
d.setf("keksarkanyko", 2)
d.setf("1ko", 1)
end

when 8027.kill begin
d.setf("keksarkanyko", (pc.getqf("keksarkanyko") - 1))
if pc.getqf("keksarkanyko") > 0 then
d.notice("Még "..pc.getqf("keksarkanyko").. " kõ maradt")
end
end

when 8027.kill with pc.getqf("keksarkanyko") == 0 and pc.getqf("1ko") == 1 begin
d.setf("1ko", 0)
d.notice("Elpusztítottátok a köveket.")
d.notice("3.szint: Öljétek meg a Kék sárkányt!")
d.regen_file("eleresi ut")
end

when 2493.kill with pc.get_map_index() >= 790000 and pc.get_map_index() < 800000 begin
d.notice("Gratulálunk, sikerült legyõznötök a Kék sárkányt.")
d.notice("1 perc múlva kiteleportálunk!")
timer("keksarkanyvege", 10)
end


--timerek
when keksarkanyvege.timer begin
warp_to_village()
end




when keksarkany1notice.timer begin
d.notice("Még 20 perced maradt!")

timer("keksarkany2notice", 10*60)
end

when keksarkany2notice.timer begin
d.notice("Még 10 perced maradt!")
timer("keksarkany3notice", 5*60)

end
when keksarkany3notice.timer begin
d.notice("Még 5 perced maradt!")
timer("keksarkany4notice", 4*60)

end
when keksarkany4notice.timer begin
d.notice("Még 1 perced maradt!")
timer("keksarkany5notice", 60)

end
when keksarkany5notice.timer begin
d.notice("Lejárt az idõd.")
warp_to_village()

end






end
end


Egy masik runt amit irtam ott 2 szint is volt ahol el kellett kulonitenem a koveket, ezert ott szuletett ez az 1ko flag, onnan masoltam ide, de itt valamiert nem mukodott nelkule. Szoval ez a masodik runom amit egyedul irtam vegig, tudom hogy hulladek de valahol el kell kezdeni :D gondolom az olj meg x mennyisegu metinkovet féle szintet nem is igy kellene megirni, ha valamit egyszerűbben, vagy máshogy jobb megírni, akkor jöhet :D
Koszi a segitseget, johet az epito jellegu negativ hozzaszolas is.


Ezt
warp_to_village()
csereld le erre
warp_all_to_village()
vagy erre
d.exit_all()

es akkor mindenkit ki kene vinnie

es amikor timert hasznalsz azt csak 1 karakternak inditja el hasznalj server_timer-t helyette
all failure is psychological other than death all failure is psychological

Köszi :D
A server_timer is ugyan ugy mukodik mint a timer?

Igen
all failure is psychological other than death all failure is psychological

2019-11-16, 15:48:42 #6 Utolsó szerkesztés: 2019-11-16, 15:53:35 Szerző: trodhenta
Ezt ajánlom:





server_loop_timer("timenotice",300,d.get_map_index())  -- Minden 300 másodpercben,azaz 5 percenként kapnak a játékosok infót a hátralévő időről
d.setf("time", get_global_time()+60*60*1) -- A dungeon 60 perces idő limittel van megáldva.

-- Itt a játékos/ok kapnak infót a hátra lévő időről
when timenotice.server_timer begin
if d.select(get_server_timer_arg()) then
        local secondsLeft = (d.getf("time") - get_global_time())
        local minutesLeft = math.ceil(secondsLeft / 60)
        d.notice("Hátra lévő idő: "..minutesLeft.." perc!")
end
end



Ha megszűnik a dungeon stb, akkor elméleti síkon ez a timer is megfog, így nem keletkezhetnek csúnya laggok.
Illetve rakd bele egy függvénybe is, hogy, megtudd hívni többször is, ne csak 5 percenként írja ki gondolom..
Ha segítettem vagy akármi érted, akkor a +-t elfogadom.