Jump to content

Dúvida - dragon_lair


Marco
 Share

Recommended Posts

Boa pessoal, tenho uma dúvida, tentei ... mas ainda não consegui :/ i'm newbiii :p

O que eu queria era o seguinte, ao matar o dragão depois de "x" segundos, tele-portar todos os jogadores para fora.

( como está, ao matar o dragão, podem ficar lá e eu queria fazer com que os jogadores fossem para fora )

Deixo a quest:
 

Citar

quest dragon_lair_access begin
    state start begin

        function get_settings()
            local settings = {}
            settings.cooldown_time = 3600 -- 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 = 2430

            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._170_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
                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, "locale/_master/map/metin2_map_skipia_dungeon_boss/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._170_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 20009.chat.gameforge.dragon_lair_access._190_npcChat or 9012.chat.gameforge.dragon_lair_access._190_npcChat or 30121.chat.gameforge.dragon_lair_access._190_npcChat with pc.get_map_index() != 208  begin
            if pc.getqf("time") > 0 and pc.getqf("time") == game.get_event_flag("dragon_lair_time") then
                dragon_lair_access.warp_to_lair()
            else
                say_title(gameforge.neutral_warp._20_sayTitle)
                say(gameforge.dragon_lair_access._120_say)
                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) -- dragon is dead
            game.drop_item_with_ownership(71123, 1) -- dropping dragon scale
            game.drop_item_with_ownership(71129, 1) -- dropping toe nail
            notice_multiline(string.format(gameforge.dragon_lair_access._180_notice, pc.name), notice_all) -- the dragon has been killed by <name>!
            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)
        end
    end
end

 

Link to comment
Share on other sites

  • 4 weeks later...

Bem amigo você pode usar a função warp_all_to_village()  ou se quiser a função d.exit_all() em 2493.kill.

 

Opção 1:

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) -- dragon is dead
            game.drop_item_with_ownership(71123, 1) -- dropping dragon scale
            game.drop_item_with_ownership(71129, 1) -- dropping toe nail
            notice_multiline(string.format(gameforge.dragon_lair_access._180_notice, pc.name), notice_all) -- the dragon has been killed by <name>!
            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)
	           warp_all_to_village(pc.get_map_index(), 3) -- index, tempo 3 segs
        end

 

Opção 2:

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) -- dragon is dead
            game.drop_item_with_ownership(71123, 1) -- dropping dragon scale
            game.drop_item_with_ownership(71129, 1) -- dropping toe nail
            notice_multiline(string.format(gameforge.dragon_lair_access._180_notice, pc.name), notice_all) -- the dragon has been killed by <name>!
            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)
	           d.exit_all()
        end

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...