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:

Hidden Content

    Give reaction to this post to see the hidden content.

 

Opção 2:

Hidden Content

    Give reaction to this post to see the hidden content.

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...