metrix2020 5 Posted February 9, 2023 Share Posted February 9, 2023 Hey, i use dragon lair quest but i got a problem, when i start the room on ch1 it starts on all ch's, why its happening that and how can i make it start only on the ch i want? quest dragon_lair_access begin state start begin function get_settings() local settings = {} settings.cooldown_time = 1200 -- when can the dragon be killed again? settings.group_time = 300 -- how long can players enter after the first one is in the dragon's lair? settings.access_item = 30179 -- "Dragon God Symbols" settings.dragon_vnum = 2493 settings.spawn = {} settings.spawn.x = 181 settings.spawn.y = 173 settings.warp_in = {} settings.warp_in.first = {} settings.warp_in.last = {} settings.warp_in.first.x = 843677 settings.warp_in.first.y = 1066206 settings.warp_in.last.x = 844027 settings.warp_in.last.y = 1067599 settings.warp_out = {} settings.warp_out.first = {} settings.warp_out.last = {} settings.warp_out.first.x = 9200 settings.warp_out.first.y = 1206400 settings.warp_out.last.x = 10900 settings.warp_out.last.y = 1209100 settings.room_area = {} settings.room_area.first = {} settings.room_area.last = {} settings.room_area.first.x = 833000 settings.room_area.first.y = 1062500 settings.room_area.last.x = 844100 settings.room_area.last.y = 1071500 settings.access_item_amount = game.get_event_flag("dragon_lair_amount") if (settings.access_item_amount == 0) then settings.access_item_amount = 3 -- default value when event flag is not set elseif (settings.access_item_amount == -1) then settings.access_item_amount = 0 -- no dragon marks needed when event flag -1 (special case) end return settings end function get_random_point(area_coordinates) return math.random(area_coordinates.first.x, area_coordinates.last.x), math.random(area_coordinates.first.y, area_coordinates.last.y) end function warp_to_lair() local settings = dragon_lair_access.get_settings() local x, y = dragon_lair_access.get_random_point(settings.warp_in) char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' WARPTOLAIR: x:'.. x ..', y:' .. y) pc.warp(x,y) end function warp_from_lair() local settings = dragon_lair_access.get_settings() local x, y = dragon_lair_access.get_random_point(settings.warp_out) char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' WARPFROMLAIR: x:'.. x ..', y:' .. y) pc.warp(x,y) end function warp_all_from_lair() local settings = dragon_lair_access.get_settings() warp_all_in_area_to_area(settings.room_area.first.x, settings.room_area.first.y, settings.room_area.last.x, settings.room_area.last.y, settings.warp_out.first.x, settings.warp_out.first.y, settings.warp_out.last.x, settings.warp_out.last.y) game.set_event_flag("dragon_lair_alive", 0) -- dragon is dead char_log(0, 'LAIR', 'WARP ALL') end function get_time_remaining() local settings = dragon_lair_access.get_settings() return (game.get_event_flag("dragon_lair_time") + settings.cooldown_time - get_global_time()) end function give_item_to_ghost() local settings = dragon_lair_access.get_settings() say_title(gameforge.ghost_story._010_sayTitle) say(gameforge.dragon_lair_access._130_say) say(settings.access_item_amount.."x: ") say_item_vnum(settings.access_item) local give_item = select(gameforge.dragon_lair_access._140_select, gameforge.locale.cancel) if give_item == 1 then pc.remove_item(settings.access_item, settings.access_item_amount) char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' GIVE ITEM') return true else return false end end function show_time_remaining(time_remaining) q.set_title(gameforge.dragon_lair_access._165_sendLetter) send_letter(gameforge.dragon_lair_access._165_sendLetter) q.set_clock(gameforge.locale.monkey_dungeon.quest_rest_time, time_remaining) timer("dragon_lair_timer", time_remaining) notice_multiline(string.format(gameforge.dragon_lair_access._175_notice, time_remaining / 60), notice) q.start() end when enter or login begin pc.setqf("is_leader", 0) q.done() --if pc.get_map_index() == 208 and not pc.is_gm() then if pc.get_map_index() == 208 then dragon_lair_access.warp_from_lair() end end when blue_dragon_timer.server_timer begin game.set_event_flag("dragon_lair_timer_used", 0) if game.get_event_flag("dragon_lair_alive") == 1 then notice_multiline(gameforge.dragon_lair_access._150_notice, notice_all) else notice_multiline(gameforge.dragon_lair_access._160_notice, notice_all) end dragon_lair_access.warp_all_from_lair() end when 30121.chat.gameforge.dragon_lair_access._010_npcChat with pc.get_map_index() != 208 begin local starttime = game.get_event_flag("dragon_lair_time") local current_time = get_global_time() local settings = dragon_lair_access.get_settings() local time_remaining = dragon_lair_access.get_time_remaining() if pc.count_item(settings.access_item) >= settings.access_item_amount then if starttime + settings.group_time >= current_time then local password_input; repeat say_title(gameforge.ghost_story._010_sayTitle) say(gameforge.dragon_lair_access._020_say) password_input = tonumber(input()) if password_input != game.get_event_flag("dragon_lair_password") then say_title(gameforge.ghost_story._010_sayTitle) say(gameforge.dragon_lair_access._030_say) local again = select(gameforge.dragon_lair_access._040_select, gameforge.locale.cancel) if again == 2 then return end end until password_input == game.get_event_flag("dragon_lair_password") if not dragon_lair_access.give_item_to_ghost() then return end -- right password pc.setqf("time", starttime) dragon_lair_access.warp_to_lair() set_state(kill_dragon) elseif time_remaining < 0 and npc.lock() then -- it is the first player talking with the ghost say_title(gameforge.ghost_story._010_sayTitle) say(gameforge.dragon_lair_access._050_say) local abort = select(gameforge.dragon_lair_access._060_select, gameforge.locale.cancel) if abort == 2 then npc.unlock() return end local password_number; repeat say_title(gameforge.ghost_story._010_sayTitle) say(gameforge.dragon_lair_access._070_say) password_number = tonumber(input()) local again; if type(password_number) != 'number' then say_title(gameforge.ghost_story._010_sayTitle) say(gameforge.dragon_lair_access._080_say) again = select(gameforge.dragon_lair_access._040_select, gameforge.locale.cancel) if again == 2 then npc.unlock() return end end until type(password_number) == 'number' if not dragon_lair_access.give_item_to_ghost() then npc.unlock() return end if dragon_lair_access.get_time_remaining() > 0 then pc.give_item2(settings.access_item, settings.access_item_amount) npc.unlock() say_title(gameforge.ghost_story._010_sayTitle) say(gameforge.dragon_lair_access._120_say) return end pc.setqf("password", password_number) timer("dragon_lair_warptimer", pc.get_channel_id()*2) npc.unlock() else say_title(gameforge.ghost_story._010_sayTitle) say(gameforge.dragon_lair_access._120_say) return end else say_title(gameforge.ghost_story._010_sayTitle) say(gameforge.dragon_lair_access._100_say) say(gameforge.dragon_lair_access._105_say) say(settings.access_item_amount.."x: ") say_item_vnum(settings.access_item) return end end when 30121.chat.gameforge.dragon_lair_access._110_npcChat with pc.get_map_index() == 208 begin say_title(gameforge.ghost_story._010_sayTitle) say(gameforge.dragon_lair_access._115_say) local warp = select(gameforge.dragon_lair_access._116_select, gameforge.dragon_lair_access._117_select) if warp == 1 then dragon_lair_access.warp_from_lair() -- so that GMs get ported out, too set_state(start) end end when dragon_lair_warptimer.timer begin local settings = dragon_lair_access.get_settings() if dragon_lair_access.get_time_remaining() < 0 then local starttime = get_global_time() game.set_event_flag("dragon_lair_time", starttime) -- set start time char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' SET STARTTIME: ' .. starttime) pc.setqf("time", starttime) pc.setqf("is_leader", 1) game.set_event_flag("dragon_lair_password", pc.getqf("password")) -- set password char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' SET PASSWORD: '.. pc.getqf("password")) server_timer("blue_dragon_timer", settings.cooldown_time) dragon_lair_access.warp_to_lair() set_state(spawn_dragon) else pc.give_item2(settings.access_item, settings.access_item_amount) say_title(gameforge.ghost_story._010_sayTitle) say(gameforge.dragon_lair_access._120_say) end pc.setqf("password", 0) end end state spawn_dragon begin when login begin local settings = dragon_lair_access.get_settings() purge_area(settings.room_area.first.x, settings.room_area.first.y, settings.room_area.last.x, settings.room_area.last.y) notice_multiline(string.format(gameforge.dragon_lair_access._090_notice, pc.name), notice_all) -- spawn all mobs needed regen_in_map(208, "data/dungeon/dragon_lair/regen.txt") -- mob.spawn_group(settings.dragon_vnum, settings.spawn.x, settings.spawn.y, 1, 1, 1) -- spawn the dragon game.set_event_flag("dragon_lair_alive", 1) -- dragon is alive char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' SPAWN DRAGON') notice_multiline(string.format(gameforge.dragon_lair_access._145_notice, game.get_event_flag("dragon_lair_password")), notice) dragon_lair_access.show_time_remaining(settings.cooldown_time) set_state(kill_dragon) end when 30121.chat.gameforge.dragon_lair_access._110_npcChat with pc.get_map_index() == 208 begin say_title(gameforge.ghost_story._010_sayTitle) say(gameforge.dragon_lair_access._115_say) local warp = select(gameforge.dragon_lair_access._116_select, gameforge.dragon_lair_access._117_select) if warp == 1 then dragon_lair_access.warp_from_lair() set_state(start) end end end state kill_dragon begin when dragon_lair_timer.timer begin set_state(start) end when login begin if pc.getqf("time") != game.get_event_flag("dragon_lair_time") or dragon_lair_access.get_time_remaining() <= 0 then set_state(start) else dragon_lair_access.show_time_remaining(dragon_lair_access.get_time_remaining()) end end when button or info begin notice_multiline(string.format(gameforge.dragon_lair_access._175_notice, dragon_lair_access.get_time_remaining() / 60), notice) -- local settings = dragon_lair_access.get_settings() -- if (pc.getqf("is_leader") == 1 and settings.cooldown_time-dragon_lair_access.get_time_remaining() < settings.group_time) then -- notice_multiline(string.format(gameforge.dragon_lair_access._145_notice, game.get_event_flag("dragon_lair_password")), notice) -- end end when 30121.chat.gameforge.dragon_lair_access._110_npcChat with pc.get_map_index() == 208 begin say_title(gameforge.ghost_story._010_sayTitle) say(gameforge.dragon_lair_access._115_say) local warp = select(gameforge.dragon_lair_access._116_select, gameforge.dragon_lair_access._117_select) if warp == 1 then dragon_lair_access.warp_from_lair() set_state(start) end end when 2493.kill with pc.get_map_index() == 208 begin char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' DRAGON KILLED') game.set_event_flag("dragon_lair_alive", 0) game.drop_item_with_ownership(71123, 1) game.drop_item_with_ownership(71129, 1) notice_multiline(string.format(gameforge.dragon_lair_access._180_notice, pc.name), notice_all) local settings = dragon_lair_access.get_settings() purge_area(settings.room_area.first.x, settings.room_area.first.y, settings.room_area.last.x, settings.room_area.last.y) local out_room_time = 60; -- seconds timer("dragon_lair_out_room", out_room_time); notice_in_map(string.format("Vei fii teleportat in %d secunde.", out_room_time)) end when dragon_lair_out_room.timer begin --warp_all_to_village(); dragon_lair_access.warp_all_from_lair() end -- when end end Link to comment Share on other sites More sharing options...
metrix2020 5 Posted February 14, 2023 Author Share Posted February 14, 2023 bump! Link to comment Share on other sites More sharing options...
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now