Jump to content

Recommended Posts

hi

i have problem in this quest

after kill the dragon and time finish .. player dont back in town

 


quest dragon_lair_access begin
    state start begin
        function get_settings()
            local settings = {}
            settings.cooldown_time = 1200 -- الوقت المخصص لقتل التنين - المدة ساعة
            settings.group_time = 300 -- الوقت المخصص لإعطاء كلمة السر - المدة 5 دقائق
            settings.access_item = 30179 -- مفتاح دائري
            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
            elseif (settings.access_item_amount == -1) then
                settings.access_item_amount = 0
            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() -- الدالة المخصصة لنقل اللاعب داخل غرفة التنين 1-2
            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() -- الدالة المخصصة لنقل اللاعب خارج غرفة التنين 1-2
            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)
            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(" شبح سورا : [ENTER] ")
            say(" سأنقلك فوراً إلى كهف التنين إذا كنت تود ذلك ")
            say(" لكن عليك أولاً إعطائي 3x مفتاح دائري للدخول [ENTER] ")
            say_item_vnum(settings.access_item)
            local give_item = select(" خذ ودعني الآن أدخل "," لا أود ذلك الآن (إلغاء) ")
            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(" يهزم التنين الأزرق ")
            send_letter(" يهزم التنين الأزرق ")
            q.set_clock(" الوقت المتبقي ", time_remaining)
            timer("dragon_lair_timer", time_remaining)
            notice_multiline(string.format(" لم يتبقى سوى %d دقائق لقتل التنين الأزرق ", time_remaining / 20), 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(" التنين الأزرق لا يزال حيا ! ", notice_all)
            else
                notice_multiline(" لقد عاد التنين الأزرق ", notice_all)
            end
            dragon_lair_access.warp_all_from_lair()
        end
        when 30121.chat." إنني أرغب في قتل التنين! " with pc.get_map_index() != 208 begin
            local name_npc = npc.get_race()
            local title = mob_name(name_npc)
            --
            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(" "..title.." : [ENTER] ")
                        say(" إنك لست أول من يطلب الحصول على رخصة دخول ")
                        say(" قل لي ماهو الرقم السري وإلا لن أسمح لك بالمرور [ENTER] ")
                        password_input = tonumber(input())
                        if password_input != game.get_event_flag("dragon_lair_password") then
                            say_title(" "..title.." : [ENTER] ")
                            say(" المعذرة! إن الرقم الذي أدخلته غير صحيح[ENTER] ")
                            local again = select(" إعادة المحاولة "," إلغاء (أغلق) ")
                            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
                    pc.setqf("time", starttime)
                    dragon_lair_access.warp_to_lair()
                    set_state(kill_dragon)
                elseif time_remaining < 0 and npc.lock() then
                    say_title(" "..title.." : [ENTER] ")
                    say(" إنك أول من يطلب مني السماح له بالدخول لمعبد التنين ")
                    say(" سوف أسمح لك بالدخول بمجرد توفرك على مايكفي من ")
                    say(" المفاتيح الدائرية، ويجب عليك قبلها أن تحدد رقماً سرياً ")
                    say(" يمكنك أن تمنحه لرفاقك في غضون 5 دقائق لكي يتمكنو ")
                    say(" هم أيضاً من دخول المعبد لمساعدتك بقتل بيران-سيتاو [ENTER] ")
                    say(" ولكن تذكر، بأن مفعول المفاتيح يدوم لمدة 20 دقيقة فقط ")
                    say(" ويجب أثنائها أن تنجح أنت ورفاقك في تصفية التنين الأزرق[ENTER] ")
                    local abort = select(" أنا مستعد "," إلغاء (أغلق) ")
                    if abort == 2 then
                        npc.unlock()
                        return
                    end
                    local password_number;
                    repeat
                        say_title(" "..title.." : [ENTER] ")
                        say(" حسنا، قم بتعيين الرقم السري الآن[ENTER] ")
                        password_number = tonumber(input())
                        local again;
                        if type(password_number) != 'number' then
                            say_title(" "..title.." : [ENTER] ")
                            say(" يجب أن يكون الرقم السري مكوناً من أرقام فقط [ENTER] ")
                            again = select(" إعادة المحاولة "," إلغاء (أغلق) ")
                            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(" "..title.." : [ENTER] ")
                        say(" هناك مجموعة تقاتل التنين، انتظر بعض الوقت [ENTER] ")
                        return
                    end
                    pc.setqf("password", password_number)
                    timer("dragon_lair_warptimer", pc.get_channel_id()*2)
                    npc.unlock()
                else
                    say_title(" "..title.." : [ENTER] ")
                    say(" هناك مجموعة تقاتل التنين، انتظر بعض الوقت [ENTER] ") -- تظهر بعد انقضاء 5 دقائق
                    return
                end
            else
                say_title(" "..title.." : [ENTER] ")
                say(" المعذرة! إنك لا تملك مايكفي من المفاتيح الدائرية ")
                say(" فإنني بحاجة إلى x3 مفاتيح من أجل تفعيل البوابة[ENTER] ")
                say_item_vnum(settings.access_item)
                say(" ستحصل عليه من الزعماء الأشرار يونغان وهواشين[ENTER] ")
                return
            end
        end
        when 30121.chat." أريد أن أغادر هذا المكان! " with pc.get_map_index() == 208 begin
            local name_npc = npc.get_race()
            local title = mob_name(name_npc)
            --
            say_title(" "..title.." : [ENTER] ")
            say(" هل أنت متأكد من أنك تود الخروج؟ ")
            say(" سوف يتم نقلك إلى مدخل الكهف[ENTER] ")
            local warp = select(" نعم موافق "," لا لن اذهب ")
            if warp == 1 then
                dragon_lair_access.warp_from_lair()
                set_state(start)
            end
        end
        when dragon_lair_warptimer.timer begin
            local name_npc = npc.get_race()
            local title = mob_name(name_npc)
            --
            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)
                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"))
                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(" "..title.." : [ENTER] ")
                say(" سبقتك مجموعة ما بالدخول للغرفة، عليك الإنتظار [ENTER] ") -- يظهر في حال سبقت مجموعة الأخرى
            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(" تحاول مجموعة %s قتل التنين الأزرق ", pc.name), notice_all)
            regen_in_map(208, "locale/turkey/map/metin2_map_skipia_dungeon_boss/regen.txt")
            mob.spawn_group(settings.dragon_vnum, settings.spawn.x, settings.spawn.y, 1, 1, 1)
            game.set_event_flag("dragon_lair_alive", 1)
            char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' SPAWN DRAGON')
            notice_multiline(string.format(" لديك 5 دقائق لإرسال الرقم السري %s ", 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." أريد أن أغادر هذا المكان! " with pc.get_map_index() == 208 begin
            local name_npc = npc.get_race()
            local title = mob_name(name_npc)
            --
            say_title(" "..title.." : [ENTER] ")
            say(" هل أنت متأكد من أنك تود الخروج؟ ")
            say(" سوف يتم نقلك إلى مدخل الكهف[ENTER] ")
            local warp = 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(" لم يتبقى سوى %d دقائق لقتل التنين الأزرق ", dragon_lair_access.get_time_remaining() / 20), 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(" لديك 5 دقائق لإرسال الرقم السري %s ", game.get_event_flag("dragon_lair_password")), notice)
            end
        end
        when 30121.chat." أريد أن أغادر هذا المكان! " with pc.get_map_index() == 208 begin
            local name_npc = npc.get_race()
            local title = mob_name(name_npc)
            --
            say_title(" "..title.." : [ENTER] ")
            say(" هل أنت متأكد من أنك تود الخروج؟ ")
            say(" سوف يتم نقلك إلى مدخل الكهف[ENTER] ")
            local warp = select(" نعم موافق "," لا لن اذهب ")
            if warp == 1 then
                dragon_lair_access.warp_from_lair()
                set_state(start)
            end
        end
        when 20009.chat." أريد أن أعود إلى الكهف! " or 9012.chat." أريد أن أعود إلى الكهف! "
            or 30121.chat." أريد أن أعود إلى الكهف! " with pc.get_map_index() != 208  begin
        --
            local name_npc = npc.get_race()
            local title = mob_name(name_npc)
            --
            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(" "..title.." : [ENTER] ")
                say(" هناك مجموعة تقاتل التنين، انتظر بعض الوقت [ENTER] ")
                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(" لقد نجحت مجموعة %s في قتل التنين الأزرق ", 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)
            --------pc.warp(969600,248400,41)
        end
    end
end  

thx ..

Link to comment
Share on other sites

  • Replies 8
  • Created
  • Last Reply

Top Posters In This Topic

  • Premium

how are they supposed to get thrown back to town if no timer nor function gets executed after dragon kill?

10 minutes ago, reymido said:

 


        when 2493.kill with pc.get_map_index() == 208 begin
			-- LOG DRAGON KILL
            char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' DRAGON KILLED')

			-- set flag
            game.set_event_flag("dragon_lair_alive", 0)

			-- drop dragon scale and claw
            game.drop_item_with_ownership(71123, 1)
            game.drop_item_with_ownership(71129, 1)

			-- notice dragon kill
            notice_multiline(string.format(" لقد نجحت مجموعة %s في قتل التنين الأزرق ", pc.name), notice_all)

			-- purge area
            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)

			-- ?????
            --------pc.warp(969600,248400,41)
        end

 

 
 
3

 

 

that's how it should be:

		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("You will be teleported to your town in %d seconds.", out_room_time))
		end
		
		when dragon_lair_out_room.timer begin
			warp_all_to_village();
		end -- when

 

 

"Nothing's free in this life.

Ignorant people have an obligation to make up for their ignorance by paying those who help them.

Either you got the brains or cash, if you lack both you're useless."

Syreldar

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

Announcements



×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.