Opublikowano 11 Października 202411 Paź Hej, bawiłem się teraz w misję na dungeon z baronówką. Generalnie to zależy mi właśnie na tych zasadach jakie napisałem w queście. 3 osoby w pt minimum, tylko baronówka do sklepania, wymóg od każdego członka przepustki, oraz godzinny cooldown. Próbowałem zrobić to na zasadzie questów dungeonowych od plechito, a że jestem zielony to ciężko mi się połapać co mogłem zrobić źle, bądz czego nie dodałem. Jeśli ktoś ma czas by na to zerknąć i chętnie by pomógł to by było super. baron_dungeon.lua
Opublikowano 15 Października 202415 Paź Rozwiązanie --[[ Quest: Kryjówka Baronówny Edit by: Gargamel Data: 15.10.2024 Opis: edit dla uzytkownika forum sharegon.pl ]] quest baron begin state start begin function settings() return { ["baron_dungeon_index"] = 193, ["baron_dungeon_warp"] = {881,6148}, ["index_out"] = 193, ["out_pos"] = {691, 6118}, ["level_check"] = { ["minimum"] = 60, ["maximum"] = 70 }, ["pass"] = 30324, ["main_npc"] = 9257, ["main_npc_pos"] = {178, 485}, ["baron"] = 2092, ["baron_pos"] = {371, 589}, }; end --------PARTY AND ENTER function party_get_member_pids() return party.get_member_pids() end function is_baroned() local pMapIndex = pc.get_map_index(); local data = baron_dungeon.settings(); local map_index = data["baron_dungeon_index"]; return pc.in_dungeon() and pMapIndex >= map_index*10000 and pMapIndex < (map_index+1)*10000; end function clear_barondungeon() d.clear_regen(); d.kill_all(); end function clear_barontimers() clear_server_timer("baron_dungeon_wave_kill", get_server_timer_arg()) clear_server_timer("baron_dungeon_20min_left", get_server_timer_arg()) clear_server_timer("baron_dungeon_10min_left", get_server_timer_arg()) clear_server_timer("baron_dungeon_5min_left", get_server_timer_arg()) clear_server_timer("baron_dungeon_1min_left", get_server_timer_arg()) clear_server_timer("baron_dungeon_0min_left", get_server_timer_arg()) clear_server_timer("baron_dungeon_final", get_server_timer_arg()) end function check_enter() say("") say("") say("") say_title(mob_name(9257)) local settings = baron_dungeon.settings() if ((get_global_time() - pc.getf("baron_dungeon","exit_baron_dungeon_time")) < 60*60) then local remaining_wait_time = (pc.getf("baron_dungeon","exit_baron_dungeon_time") - get_global_time() + 60*60) say("Musisz zaczekać godzinę, jeśli chcesz wejść ponownie.") say_reward("Możesz wejść ponownie za: "..get_time_remaining(remaining_wait_time)..'[ENTER]') return end if party.is_party() then if not party.is_leader() then say_reward("Pozwól, że porozmawiam z twoim Liderem.") return end if party.get_near_count() < 3 then say_reward("Twoja grupa musi zawierać minimum") say_reward("3 członków, którzy muszą") say_reward("znajdować się w pobliżu.") return false; end local levelCheck = true local passCheck = true local MemberHaveLowLevel = {} local MemberHaveHighLevel = {} local MemberHaveNoTicket = {} local pids = {party.get_member_pids()} if not party.is_map_member_flag_lt("exit_baron_dungeon_time", get_global_time() - 60 * 60 ) then say_reward("Niektórzy członkowie grupy muszą") say_reward("jeszcze chwilę poczekać.") return false; end for i, pid in next, pids, nil do q.begin_other_pc_block(pid) if pc.get_level(pid) < settings["level_check"]["minimum"] then table.insert(MemberHaveLowLevel, pc.get_name()) levelCheck = false end q.end_other_pc_block() end if not levelCheck then say_reward("Jeśli chcesz wejść na dungeon,") say_reward("każdy członek grupy musi posiadać minimum 60 poziom.") say_reward("") say_reward("Gracze bez odpowiedniego poziomu: ") for i, n in next, MemberHaveLowLevel, nil do say_title("- "..n) end return end for i, pid in next, pids, nil do q.begin_other_pc_block(pid) if pc.get_level(pid) > settings["level_check"]["maximum"] then table.insert(MemberHaveHighLevel, pc.get_name()) levelCheck = false end q.end_other_pc_block() end if not levelCheck then say_reward("Jeśli chcesz wejść na dungeon,") say_reward("każdy członek grupy musi posiadać maksymalnie 70 poziom.") say("") say_reward("Gracze bez odpowiedniego poziomu:") for i, n in next, MemberHaveHighLevel, nil do say_title("- "..n) end return end for i, pid in next, pids, nil do q.begin_other_pc_block(pid) if pc.count_item(settings.pass) < 1 then table.insert(MemberHaveNoTicket, pc.get_name()) passCheck = false end q.end_other_pc_block() end if not passCheck then say_reward("Jeśli chcesz wejść na dungeon,") say_reward("każdy członek grupy musi posiadać:") say_item("Pajęczy Klucz", settings["pass"], "") say("") say_reward("Gracze bez Pajęczego Klucza:") for i, n in next, MemberHaveNoTicket, nil do say_title("- "..n) end return end else if ((get_global_time() - pc.getf("baron_dungeon","exit_baron_dungeon_time")) < 60*60) then local remaining_wait_time = (pc.getf("baron_dungeon","exit_baron_dungeon_time") - get_global_time() + 60*60) say("Musisz zaczekać przed ponownym wejściem do lochu.") say_reward("Możesz udać się ponownie za: "..get_time_remaining(remaining_wait_time)..'[ENTER]') return end if (pc.get_level() < settings["level_check"]["minimum"]) then say(string.format("Minimalny poziom by wejść do lochu to %d.", settings["level_check"]["minimum"])) return false; end if (pc.get_level() > settings["level_check"]["maximum"]) then say(string.format("Maksymalny poziom by wejść do lochu to %d.", settings["level_check"]["maximum"])) return false; end if (pc.count_item(settings["pass"]) < 1) then say_reward("Jeśli chcesz wejść na dungeon,") say_reward("musisz posiadać ") say_item("Pajęczy Klucz", settings["pass"], "") return false; end end return true; end ------------CREATE DUNGEON function create_dungeon() local setting = baron_dungeon.settings() local pids = {party.get_member_pids()} if party.is_party() then for i, pid in next, pids, nil do q.begin_other_pc_block(pid) pc.remove_item(setting["pass"], 1) q.end_other_pc_block() end d.new_jump_party(setting["baron_dungeon_index"], setting["baron_dungeon_warp"][1], setting["baron_dungeon_warp"][2]) d.setf("baron_dungeon_level", 1) server_timer("baron_dungeon_20min_left", 20*60, d.get_map_index()) -- Zmieniono czas na 20 minut else pc.remove_item(setting["pass"], 1) d.new_jump(setting["baron_dungeon_index"], setting["baron_dungeon_warp"][1]*100, setting["baron_dungeon_warp"][2]*100) d.setf("baron_dungeon_level", 1) server_timer("baron_dungeon_20min_left", 20*60, d.get_map_index()) -- Zmieniono czas na 20 minut end end -----------LOGIN IN DUNGEON [OUT COORDS SETTING] when login with baron_dungeon.is_baroned() begin local settings = baron_dungeon.settings() d.set_warp_location(settings["baron_dungeon_index_out"], settings["out_pos"][1], settings["out_pos"][2]); if not pc.is_gm() then if not pc.in_dungeon() then pc.warp(settings["baron_dungeon_index_out"], settings["out_pos"][1]*100, settings["out_pos"][2]*100) end end end --DUNGEON ENTER when 9257.chat."Kryjówka Baronówny" with not baron_dungeon.is_baroned() begin local settings = baron_dungeon.settings() say_title(mob_name(9257)) say("") say("Witaj wojowniku!") say("Jestem strażnikiem tego oto.") say("Świętego Nagrobka") say("Nagrobek ten, często jest nawiedzany.") say("przez Baronównę pająków.") say("Jeśli chcesz, wpuszczę cię tam.") say("Tylko nie myśl o tym, by iść samemu.") say("Baronówna posiada ogromną moc.") wait() say("") say_title(mob_name(9257)) say("") say("Czy chcesz spróbować?.") if (select ("Tak", "Nie") == 1) then if baron_dungeon.check_enter() then say_reward("Bądź ostrożny, masz tylko 20 minut") say_reward("na zabicie Baronówny.") say_reward("Następnie, teleportuję cię do siebie.") wait() baron_dungeon.create_dungeon() end end end ---TIME RESET - ONLY FOR GM when 9257.chat."Resetuj Czas" with pc.is_gm() and not baron_dungeon.is_baroned() begin addimage(25, 10, "baron_bg_01.tga") say("") say("") say("") if select('Resetuj Czas','Zamknij') == 2 then return end say("") say("") say("") say_title(mob_name(9257)) say("") say("Czas został zresetowany.") pc.setf('baron_dungeon','exit_baron_dungeon_time', 0) -- Dungeon Info pc.setqf("rejoin_time", get_time() - 3600) end when login with baron_dungeon.is_baroned() begin local settings = baron_dungeon.settings() d.notice("Kryjówka Baronówny: Jest i ona!") d.notice(string.format("Kryjówka Baronówny: %s nadchodzi!", mob_name(settings["baron"]))) d.spawn_mob(settings["baron"], settings["baron_pos"][1], settings["baron_pos"][2]) end when kill with baron_dungeon.is_baroned() and not npc.is_pc() and npc.get_race() == 2092 and d.getf("baron_dungeon_level") == 1 begin baron_dungeon.clear_barondungeon() d.notice("Kryjówka Baronówny: Pomyślnie przeszedłeś przez Kryjówkę!") d.notice("Kryjówka Baronówny: Zostaniesz teleportowany za 2 minuty") d.notice("Kryjówka Baronówny: z Kryjówki.") server_timer("baron_dungeon_is_done", 115, d.get_map_index()) d.setf("baron_dungeon_level", 2) end when baron_dungeon_20min_left.server_timer begin if d.select(get_server_timer_arg()) then d.notice("Kryjówka Baronówny: 15 minut do końca!!!") server_timer("baron_dungeon_10min_left", 5*60, d.get_map_index()) end end when baron_dungeon_10min_left.server_timer begin if d.select(get_server_timer_arg()) then d.notice("Kryjówka Baronówny: 10 minut do końca!! Dawaj!") server_timer("baron_dungeon_5min_left", 5*60, d.get_map_index()) end end when baron_dungeon_5min_left.server_timer begin if d.select(get_server_timer_arg()) then d.notice("Kryjówka Baronówny: 5 minut do końca!! Zegar tyka!!") server_timer("baron_dungeon_1min_left", 4*60, d.get_map_index()) end end when baron_dungeon_1min_left.server_timer begin if d.select(get_server_timer_arg()) then d.notice("Kryjówka Baronówny: 1 minuta!! Zaraz wszystko przepadnie!") server_timer("baron_dungeon_0min_left", 60, d.get_map_index()) end end when baron_dungeon_0min_left.server_timer begin if d.select(get_server_timer_arg()) then d.notice("Kryjówka Baronówny: Czas się skończył. Zostajecie wydaleni z kryjówki.") server_timer("baron_dungeon_final", 5, d.get_map_index()) end end when baron_dungeon_final.server_timer begin if d.select(get_server_timer_arg()) then d.exit_all() end end when logout with baron_dungeon.is_baroned() begin pc.setf("baron_dungeon","exit_baron_dungeon_time", get_global_time()) pc.setqf("baron_dungeon", get_time() + 3600) end end end Wprowadzone zmiany: Poprawione odwołania do poziomu graczy przy użyciu pid w funkcji check_enter. (sprawdź jak to działa, nie jestem pewny) Doprecyzowanie komunikatów o czekaniu. Poprawione timery, aby odpowiadały rzeczywistym wartościom, w tym czas na 20 minut w lochu. Poprawki w dialogach.