Bazı oyuncular ejder odasında iken karakter atarak odayı Bug'a sokarak isterse level kasıyormuş isterse ejderle takılıp vakit geçiriyormuş. Bizede bunu önlemek düşerdi ve önledik 
Buyrun hayırlı kullanımlar..
Ejder Odası Karakter Atıp İçerde Kalma Bug'u Fix!
Metin2 Lobby olarak, oyuncularımızın oyun deneyimini daha stabil ve keyifli hale getirmek adına sürekli olarak sistem güncellemeleri ve hata düzeltmeleri yapmaktayız. Bu doğrultuda, LykeeN sunucumuzda yaşanan 'Ejder Odası Karakter Atıp İçerde Kalma Bug'u' konusunda önemli bir düzeltme gerçekleştirdik. Bu yazıda, bug'ın ne olduğundan, neden oluştuğundan ve nasıl düzeltilmiş olduğundan bahsedeceğiz.
Bug Nedir?
Metin2 oyununda 'Ejder Odası' (Dragon Lair), yüksek seviye oyuncuların girebildiği zorlu bir dungeon'dur. Oyuncular, burada güçlü boss karakterlerle savaşır ve nadir ödüller kazanabilirler. Ancak bazı durumlarda, bug nedeniyle bir karakter Ejder Odasına girdikten sonra sistem tarafından atılır ancak odanın içine tekrar giremez ve dışarıya da çıkamaz. Bu durumda karakter, sanki 'hiçbir yerde'ymiş gibi oyun içinde kaybolmuş olur. Bu hem oyuncu hem de sunucu yönetimi için ciddi bir sorundur.
Bug Neden Oluşur?
Bug'un temel nedeni, Metin2 sunucu tarafında çalışan Lua scriptlerindeki quest mantığında meydana gelen eksikliklerdir. Özellikle quest timer, flag ve state sistemlerinde kontrol eksikliği olduğunda, oyuncu Ejder Odasına giriş yaptıktan sonra sistem onun konumunu doğru şekilde takip edemez. Bu da karakterin 'boşta' kalmasına neden olur. Hata, genellikle çok oyunculu durumlarda ya da sunucu yükü yüksekken daha sık ortaya çıkar.
Fix Nasıl Yapıldı?
Bug fix işlemi sırasında, LykeeN sunucusunda bulunan Ejder Odası quest scriptleri gözden geçirildi. Scriptteki timer kontrolleri güçlendirildi. Ayrıca, oyuncu Ejder Odasına girdiğinde flag setlenerek, oyuncunun konumu takip edilebilir hale getirildi. Eğer bir oyuncu sistemsel olarak odadan atılırsa, quest state sıfırlanarak karakterin tekrar normal oyun alanına dönmesi sağlandı. Bu sayede artık karakterler Ejder Odasında sıkışıp kalmayacaktır.
Quest Script Örneği
Aşağıda örnek bir quest script parçası verilmiştir. Bu script, karakterin Ejder Odasında iken sistem tarafından atılması durumunda onu güvenli bir şekilde geri döndürür:
quest dragon_lair_fix begin
state start begin
when login with pc.get_map_index() == DRAGON_LAIR_MAP_INDEX begin
if pc.getqf('dragon_lair_flag') == 1 then
cmdchat('You were stuck in Dragon Lair, teleporting out safely...')
pc.warp_to_village()
pc.setqf('dragon_lair_flag', 0)
end
end
end
end[/BR]
Sonuç
Metin2 Lobby olarak, LykeeN sunucusunda quest sistemlerinin güvenilirliğini artırmak ve kullanıcı deneyimini optimize etmek için bu tür hataları düzenli olarak takip ediyor ve düzeltiyoruz. Ejder Odası bug fix sayesinde artık oyuncular, dungeon'a güvenle girebilir ve daha keyifli bir şekilde raid yapabilirler. Quest geliştirme ve debug işlemleri için sürekli olarak Martysama, Metin2Dev gibi topluluklardan destek alıyoruz. Metin2Lobby.com üzerinden daha fazla quest ve lua script örneği inceleyebilirsiniz.
Dragon Lair Character Kick-Out and Stuck Bug Fixed!
At Metin2 Lobby, we continuously update our systems and fix bugs to ensure that our players enjoy a more stable and fun gaming experience. In this direction, we have made an important fix regarding the 'Dragon Lair Character Kick-Out and Stuck Bug' issue on our LykeeN server. In this article, we will talk about what the bug is, why it occurs, and how it was fixed.
What Is The Bug?
In the game Metin2, the 'Dragon Lair' is a challenging dungeon where high-level players can enter. Players fight powerful bosses here and can win rare rewards. However, sometimes due to a bug, after a character enters the Dragon Lair, they are kicked by the system but cannot re-enter the room nor exit. In this case, the character remains stuck as if 'nowhere' in the game. This is a serious problem for both players and server administration.
Why Does The Bug Occur?
The root cause of the bug lies in the Lua scripts running on the Metin2 server side. Particularly, missing checks in quest timer, flag, and state systems cause the system to lose track of the player's location correctly after entering the Dragon Lair. This leads to the character being left 'floating' in the game. The error usually occurs more frequently during multiplayer situations or when the server load is high.
How Was The Fix Applied?
During the bug fix process, the Dragon Lair quest scripts on the LykeeN server were reviewed. Timer checks within the script were strengthened. Additionally, upon entering the Dragon Lair, a flag is set to track the player's position. If a player is kicked from the room due to a system issue, their quest state is reset, allowing them to return safely to the normal game area. Thus, characters no longer get stuck inside the Dragon Lair.
Example Quest Script
Below is an example of a quest script segment. This script safely teleports a player out if they are stuck in the Dragon Lair:
quest dragon_lair_fix begin
state start begin
when login with pc.get_map_index() == DRAGON_LAIR_MAP_INDEX begin
if pc.getqf('dragon_lair_flag') == 1 then
cmdchat('You were stuck in Dragon Lair, teleporting out safely...')
pc.warp_to_village()
pc.setqf('dragon_lair_flag', 0)
end
end
end
end[/BR]
Conclusion
As Metin2 Lobby, we regularly monitor and fix such errors to increase the reliability of quest systems and optimize user experience on the LykeeN server. Thanks to the Dragon Lair bug fix, players can now enter the dungeon confidently and enjoy their raids. We continuously receive support from communities like Martysama and Metin2Dev for quest development and debugging. You can check more quest and lua script examples at Metin2Lobby.com.
Buyrun hayırlı kullanımlar..
Kod:
-- // ++ // ++ // ++ // ++ // ++ // ++ // ++ // ++ // ++ // // ++ -- --++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- --+ Bu QUEST Turkmmo LykeeN tarafından hazırlanmıştır. +-- --+ İletişim için; Skype [email protected] +-- --+ İsteğe göre quest yazılır :) +-- --+ LykeeN iyi forumlar diler. +-- --+ http://www.turkmmo.com/ +-- --++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- -- // ++ // ++ // ++ // ++ // ++ // ++ // ++ // ++ // ++ // // ++ -- quest dragonlair begin state start begin when logout begin if pc.get_map_index() == 79 then pc.delqf("icerdesin1") pc.delqf("icerdesin2") pc.delqf("lider") end end when login or logout with pc.get_map_index() == 79 and pc.get_channel_id() == 1 begin if game.get_event_flag("ejder_kullanimda1") == 0 then notice_big("Ejder Odasını Bu Sunucuda Bug'a sokamazsınız.") pc . warp ( 131900 , 1.3437e+06 ) else return end end when login or logout with pc.get_map_index() == 79 and pc.get_channel_id() == 2 begin if game.get_event_flag("ejder_kullanimda2") == 0 then notice_big("Ejder Odasını Bu Sunucuda Bug'a sokamazsınız.") pc . warp ( 131900 , 1.3437e+06 ) else return end end when 30121.chat."Ejderhayı öldürmek istiyorum!" with pc.get_map_index() == 73 and pc.get_channel_id() == 1 or pc.get_channel_id() == 2 begin if pc.get_channel_id() == 2 then if game.get_event_flag("ejder_kullanimda"..pc.get_channel_id().."") == 2 and game.get_event_flag("time_1"..pc.get_channel_id().."") - get_time() > 0 then say_title("Sura Ruhu:") say("") say("Üzgünüm Ejderha Tapınağı şuan dolu.") say("Kalan süre: "..game.get_event_flag("time_1"..pc.get_channel_id().."") - get_time().." saniye") say("") return end if game.get_event_flag("time_1"..pc.get_channel_id().."") - get_time() < 0 and game.get_event_flag("ejder_kullanimda"..pc.get_channel_id().."") >= 1 then game.set_event_flag("ejder_kullanimda"..pc.get_channel_id().."",0) purge_area(829200,1059600,844200,1074600) ---warp_all_in_map(79,180100,1220400) warp_all_to_village(79) setskin(NOWINDOW) return end if game.get_event_flag("ejder_kullanimda"..pc.get_channel_id().."") == 0 and pc.count_item(30179) < 3 then say_title("Sura Ruhu:") say("Gerekli eşya 3x: "..item_name(30179)..":") say_item_vnum(30179) say("3 adet anahtara ihtiyacın var.") return end if game.get_event_flag("ejder_kullanimda"..pc.get_channel_id().."") == 1 then pc.setqf("ejder_bug_engel2",get_time()+5) say_title("Sura Ruhu:") say("") say("Üzgünüm Ejderha Tapınağı şuan dolu.") say("Eğer şifreyi biliyorsan,") say("doğru bir şekilde yaz.") say("") say_reward("5 saniye süren var!") say("") local pin = tonumber(input("")) if get_time() > pc.getqf("ejder_bug_engel2") then say_title("Sura Ruhu:") say("5 saniye doldu şansını tekrar dene.") pc.setqf("ejder_bug_engel2",get_time()+0) return end if string.len(pin) < 4 then say_title("Sura Ruhu:") say("") say("Şifre en az 4 karakterden oluşmalı.") return end if game.get_event_flag("ejder_sifresi"..pc.get_channel_id().."") == pin then say_title("Sura Ruhu:") say("") if pc.count_item(30179) < 3 then say("Girmene izin veremem.") say("Gerekli eşya 3x: "..item_name(30179)..":") say_item_vnum(30179) say("3 tane anahtara sahip olduğunda tekrar gel.") return end pc.remove_item("30179",3) say("Şifre doğru tebrikler!") say("Seni içeri gönderiyorum. Onu yenmeden dönme!") pc.setqf("icerdesin"..pc.get_channel_id().."",1) wait() pc.warp(843600,1066900) elseif pin != game.get_event_flag("ejder_sifresi"..pc.get_channel_id().."") then say_title("Sura Ruhu:") say("Üzgünüm şifreyi hatalı girdin.") return end end if game.get_event_flag("ejder_kullanimda"..pc.get_channel_id().."") == 0 and pc.count_item(30179) >= 3 then say_title("Sura Ruhu:") say("Ejderha Tapınağı'na girmek isteyen ilk kişi") say("sensin. Yeterli sayıda Kıvrık Anahtara sahipsen") say("seni içeri bırakacağım. Ama ilk önce bir şifre") say("belirleyeceksin. Bu şifreyi, 5 dakika") say("içerisinde savaş arkadaşlarına verip onların") say("içeri girmesini sağlayabilirsin. Bu anahtarın") say("sadece 60 dakika tesir edeceğini unutma. O zamana") say("kadar ejderhayı öldürmüş olmanız gerekiyor!") say("") pc.setqf("ejder_bug_engel3",get_time()+5) local i = select("Hazırım!", "Vazgeç ") if get_time() > pc.getqf("ejder_bug_engel3") then say_title("Sura Ruhu:") say("5 saniye doldu şansını tekrar dene.") pc.setqf("ejder_bug_engel3",get_time()+0) return end if 1 == i and game.get_event_flag("ejder_kullanimda"..pc.get_channel_id().."") == 0 then say_title("Sura Ruhu:") pc.setqf("ejder_bug_engel3",get_time()+5) local pin = number(1000,9999999) say("") say("") say("") say_reward("Yazman gereken şifre : "..pin) say_reward("5 saniye süren var!") local giris = tonumber ( input ( "" ) ) if get_time() > pc.getqf("ejder_bug_engel3") then say_title("Sura Ruhu:") say("5 saniye doldu şansını tekrar dene.") pc.setqf("ejder_bug_engel3",get_time()+0) return end if giris != pin then say_title("Sura Ruhu:") say("") say_red("Malesef, Yanlış yazdın.") return end if pin and pin <= 999999999 and pc.count_item(30179)>=3 then say_title("Sura Ruhu:") say("") say("Arzu edersen seni doğrudan Ejderha Mağarası'na") say("götürebilirim. Bana şimdi vermen gerekenler:") say("3x:") say_item_vnum(30179) pc.setqf("ejder_bug_engel3",get_time()+5) local zaxd = select("Al ve beni içeri bırak!","Vazgeç ") if get_time() > pc.getqf("ejder_bug_engel3") then say_title("Sura Ruhu:") say("5 saniye doldu şansını tekrar dene.") pc.setqf("ejder_bug_engel3",get_time()+0) return end if zaxd == 2 then return elseif zaxd == 1 and game.get_event_flag("ejder_kullanimda"..pc.get_channel_id().."") == 0 then if game.get_event_flag("ejder_kullanimda"..pc.get_channel_id().."") != 0 then syschat("Ejderha odasına başka bir grup girdi.") return end game.set_event_flag("ejder_kullanimda"..pc.get_channel_id().."",1) pc.setqf("ejder_sifre",pin) pc.setqf("icerdesin"..pc.get_channel_id().."",1) pc.remove_item("30179",3) pc.setqf("lider",1) clear_server_timer("ejderi_kescen"..pc.get_channel_id().."",get_server_timer_arg()) clear_server_timer("disari_yolluyoz"..pc.get_channel_id().."",get_server_timer_arg()) game.set_event_flag("ejder_sifresi"..pc.get_channel_id().."",pin) game.set_event_flag("time_1"..pc.get_channel_id().."", get_time()+60*60*1) --timer("iceri_gir",3) pc.warp(843600, 1066900) elseif zaxd == 1 and game.get_event_flag("ejder_kullanimda"..pc.get_channel_id().."") != 0 then say_title("Sura Ruhu:") say("") say("Birileri senden önce davrandı. Onların") say("odadan çıkmalarını bekle ya da parolayı ") say("biliyorsan söyle.") end else say_title("Sura Ruhu:") say("") say("Bir hata oluştu.") say("") end end end elseif pc.get_channel_id() == 1 then if game.get_event_flag("ejder_kullanimda"..pc.get_channel_id().."") == 2 and game.get_event_flag("time_1"..pc.get_channel_id().."") - get_time() > 0 then say_title("Sura Ruhu:") say("") say("Üzgünüm Ejderha Tapınağı şuan dolu.") say("Kalan süre: "..game.get_event_flag("time_1"..pc.get_channel_id().."") - get_time().." saniye") say("") return end if game.get_event_flag("time_1"..pc.get_channel_id().."") - get_time() < 0 and game.get_event_flag("ejder_kullanimda"..pc.get_channel_id().."") >= 1 then game.set_event_flag("ejder_kullanimda"..pc.get_channel_id().."",0) purge_area(829200,1059600,844200,1074600) ---warp_all_in_map(79,241300,1275400) warp_all_to_village(79) setskin(NOWINDOW) return end if game.get_event_flag("ejder_kullanimda"..pc.get_channel_id().."") == 0 and pc.count_item(30179) < 3 then say_title("Sura Ruhu:") say("Gerekli eşya 3x: "..item_name(30179)..":") say_item_vnum(30179) say("3 adet anahtara ihtiyacın var.") return end if game.get_event_flag("ejder_kullanimda"..pc.get_channel_id().."") == 1 then pc.setqf("ejder_bug_engel2",get_time()+5) say_title("Sura Ruhu:") say("") say("Üzgünüm Ejderha Tapınağı şuan dolu.") say("Eğer şifreyi biliyorsan,") say("doğru bir şekilde yaz.") say("") say_reward("5 saniye süren var!") say("") local pin = tonumber(input("")) if get_time() > pc.getqf("ejder_bug_engel2") then say_title("Sura Ruhu:") say("5 saniye doldu şansını tekrar dene.") pc.setqf("ejder_bug_engel2",get_time()+0) return end if string.len(pin) < 4 then say_title("Sura Ruhu:") say("") say("Şifre en az 4 karakterden oluşmalı.") return end if game.get_event_flag("ejder_sifresi"..pc.get_channel_id().."") == pin then say_title("Sura Ruhu:") say("") if pc.count_item(30179) < 3 then say("Girmene izin veremem.") say("Gerekli eşya 3x: "..item_name(30179)..":") say_item_vnum(30179) say("3 tane anahtara sahip olduğunda tekrar gel.") return end pc.remove_item("30179",3) say("Şifre doğru tebrikler!") say("Seni içeri gönderiyorum. Onu yenmeden dönme!") pc.setqf("icerdesin"..pc.get_channel_id().."",1) wait() pc.warp(843600,1066900) elseif pin != game.get_event_flag("ejder_sifresi"..pc.get_channel_id().."") then say_title("Sura Ruhu:") say("Üzgünüm şifreyi hatalı girdin.") return end end if game.get_event_flag("ejder_kullanimda"..pc.get_channel_id().."") == 0 and pc.count_item(30179) >= 3 then say_title("Sura Ruhu:") say("Ejderha Tapınağı'na girmek isteyen ilk kişi") say("sensin. Yeterli sayıda Kıvrık Anahtara sahipsen") say("seni içeri bırakacağım. Ama ilk önce bir şifre") say("belirleyeceksin. Bu şifreyi, 5 dakika") say("içerisinde savaş arkadaşlarına verip onların") say("içeri girmesini sağlayabilirsin. Bu anahtarın") say("sadece 60 dakika tesir edeceğini unutma. O zamana") say("kadar ejderhayı öldürmüş olmanız gerekiyor!") say("") pc.setqf("ejder_bug_engel3",get_time()+5) local i = select("Hazırım!", "Vazgeç ") if get_time() > pc.getqf("ejder_bug_engel3") then say_title("Sura Ruhu:") say("5 saniye doldu şansını tekrar dene.") pc.setqf("ejder_bug_engel3",get_time()+0) return end if 1 == i and game.get_event_flag("ejder_kullanimda"..pc.get_channel_id().."") == 0 then pc.setqf("ejder_bug_engel2",get_time()+5) say_title("Sura Ruhu:") local pin1 = number(1000,9999999) local pin2 = number(1000,9999999) local pin3 = number(1000,9999999) local pin4 = number(1000,9999999) local pin5 = number(1000,9999999) local pin6 = number(1000,9999999) local gercek = number(2,7) local pin if gercek == 2 then pin = pin1 elseif gercek == 3 then pin = pin2 elseif gercek == 4 then pin = pin3 elseif gercek == 5 then pin = pin4 elseif gercek == 6 then pin = pin5 elseif gercek == 7 then pin = pin6 end say_reward("Seçmen gereken şifre : "..pin) say_reward("5 saniye süren var!") local sifre = select("Vazgeç ",pin1,pin2,pin3,pin4,pin5,pin6) if get_time() > pc.getqf("ejder_bug_engel2") then say_title("Sura Ruhu:") say("5 saniye doldu şansını tekrar dene.") pc.setqf("ejder_bug_engel2",get_time()+0) return end if sifre == gercek and pc.count_item(30179)>=3 then say_title("Sura Ruhu:") say("") say("Arzu edersen seni doğrudan Ejderha Mağarası'na") say("götürebilirim. Bana şimdi vermen gerekenler:") say("3x:") say_item_vnum(30179) say_reward("5 saniye süren var!") pc.setqf("ejder_bug_engel3",get_time()+5) local zaxd = select("Al ve beni içeri bırak!","Vazgeç ") if get_time() > pc.getqf("ejder_bug_engel3") then say_title("Sura Ruhu:") say("5 saniye doldu şansını tekrar dene.") pc.setqf("ejder_bug_engel3",get_time()+0) return end if zaxd == 2 then return elseif zaxd == 1 and game.get_event_flag("ejder_kullanimda"..pc.get_channel_id().."") == 0 then if game.get_event_flag("ejder_kullanimda"..pc.get_channel_id().."") != 0 then syschat("Ejderha odasına başka bir grup girdi.") return end game.set_event_flag("ejder_kullanimda"..pc.get_channel_id().."",1) pc.setqf("ejder_sifre",pin) pc.setqf("icerdesin"..pc.get_channel_id().."",1) pc.remove_item("30179",3) pc.setqf("lider",1) clear_server_timer("ejderi_kescen"..pc.get_channel_id().."",get_server_timer_arg()) clear_server_timer("disari_yolluyoz"..pc.get_channel_id().."",get_server_timer_arg()) game.set_event_flag("ejder_sifresi"..pc.get_channel_id().."",pin) game.set_event_flag("time_1"..pc.get_channel_id().."", get_time()+60*60*1) --timer("iceri_gir",3) pc.warp(843600, 1066900) elseif zaxd == 1 and game.get_event_flag("ejder_kullanimda"..pc.get_channel_id().."") != 0 then say_title("Sura Ruhu:") say("") say("Birileri senden önce davrandı. Onların") say("odadan çıkmalarını bekle ya da parolayı ") say("biliyorsan söyle.") end else say_title("Sura Ruhu:") say("") say("Bir hata oluştu.") say("") end end end else return end end when login begin if pc.getqf("icerdesin"..pc.get_channel_id().."") == 1 then send_letter("Mavi Ejderha'yı mağlup edin") end end when button or info begin q.set_clock("Kalan süre:", game.get_event_flag("time_1"..pc.get_channel_id().."")-get_time()) dragonlair.ejder_odasi_kalansure() end when login with pc.get_map_index() == 79 and pc.getqf("icerdesin"..pc.get_channel_id().."") != 1 begin pc.warp(180100,1220400) end when login with pc.get_map_index() == 79 and pc.getqf("lider") == 1 begin notice_all("CH "..pc.get_channel_id()..": "..pc.get_name().." grubu, Mavi Ejderha'yı öldürmeye çalışıyor!") notice(""..pc.getqf("ejder_sifre").." numaralı şifreyi dağıtmaya 5 dakika zamanın") notice("var!") purge_area(829200,1059600,844200,1074600) regen_in_map(79,"data/dungeon/skia_deliboss.txt") server_timer("sifre_kapat"..pc.get_channel_id().."", 300,pc.get_map_index()) server_timer("ejderi_kescen"..pc.get_channel_id().."", 3600,pc.get_map_index()) dragonlair.ejder_odasi_kalansure() pc.setqf("lider",2) pc.set_warp_location(73 , 1801, 12204) end when login with pc.get_map_index() == 79 and pc.getqf("icerdesin"..pc.get_channel_id().."") == 1 and pc.getqf("lider") != 1 begin dragonlair.ejder_odasi_kalansure() pc.set_warp_location(73 , 1801, 12204) end when kill with npc.get_race() == 8031 or npc.get_race() == 8032 or npc.get_race() == 8033 or npc.get_race() == 8034 and pc.get_map_index() == 79 begin local n =game.get_event_flag("kesilen_metin"..pc.get_channel_id().."") + 1 game.set_event_flag("kesilen_metin"..pc.get_channel_id().."", n) if n > 3 then local t = number(1,4) if 1 == t then regen_in_map(79,"data/dungeon/skia_boss1.txt") elseif 2 == t then regen_in_map(79,"data/dungeon/skia_boss2.txt") elseif 3 == t then regen_in_map(79,"data/dungeon/skia_boss3.txt") else regen_in_map(79,"data/dungeon/skia_boss4.txt") end end end when kill with npc.get_race() == 2493 and pc.get_map_index() == 79 and game.get_event_flag("ejder_kullanimda"..pc.get_channel_id().."") >= 1 begin game.drop_item_with_ownership("71123",1) game.drop_item_with_ownership("71129",1) local drop_chance = number(1,10) if drop_chance == 5 then game.drop_item_with_ownership("71129",1) end notice_all("CH "..pc.get_channel_id()..": "..pc.get_name().." grubu, Mavi Ejderha'yı öldürdü!") game.set_event_flag("time_1"..pc.get_channel_id().."",get_time() + 5*60) clear_server_timer("ejderi_kescen"..pc.get_channel_id().."",get_server_timer_arg()) server_timer("disari_yolluyoz"..pc.get_channel_id().."",60*5, pc.get_map_index()) ---300 olcak forked.warp_all_in_map("79","73","180100","1220400",295) end when sifre_kapat1.server_timer begin game.set_event_flag("ejder_kullanimda1",2) end when disari_yolluyoz1.server_timer begin notice_all("CH 1: Mavi Ejderha geri döndü!") game.set_event_flag("kesilen_metin1",0) purge_area(829200,1059600,844200,1074600) clear_server_timer("ejderi_kescen1",get_server_timer_arg()) game.set_event_flag("ejder_kullanimda1",0) forked.warp_all_in_map("79","73","180100","1220400",1) end when ejderi_kescen1.server_timer with game.get_event_flag("time_11") - get_time() <= 0 begin ---warp_all_in_map(79,180100,1220400) forked.warp_all_in_map("79","73","180100","1220400",1) notice_all("CH 1: Mavi Ejderha hâlâ yaşıyor!") purge_area(829200,1059600,844200,1074600) game.set_event_flag("kesilen_metin1",0) game.set_event_flag("ejder_kullanimda1",0) end when sifre_kapat2.server_timer begin game.set_event_flag("ejder_kullanimda2",2) end when disari_yolluyoz2.server_timer begin notice_all("CH 2: Mavi Ejderha geri döndü!") game.set_event_flag("kesilen_metin2",0) purge_area(829200,1059600,844200,1074600) clear_server_timer("ejderi_kescen2",get_server_timer_arg()) game.set_event_flag("ejder_kullanimda2",0) forked.warp_all_in_map("79","73","180100","1220400",1) end when ejderi_kescen2.server_timer with game.get_event_flag("time_12") - get_time() <= 0 begin ---warp_all_in_map(79,180100,1220400) forked.warp_all_in_map("79","73","180100","1220400",1) notice_all("CH 2: Mavi Ejderha hâlâ yaşıyor!") purge_area(829200,1059600,844200,1074600) game.set_event_flag("kesilen_metin2",0) game.set_event_flag("ejder_kullanimda2",0) end when login with pc.get_map_index() != 79 begin if pc.getqf("icerdesin1") == 1 or pc.getqf("icerdesin2") == 1 then pc.delqf("icerdesin1") pc.delqf("icerdesin2") pc.delqf("ejder_sifre") pc.delqf("lider") end end when 30121.chat."Süreyi sıfırla" with pc.is_gm() and pc.get_map_index() == 73 and pc.get_channel_id() == 1 or pc.get_channel_id() == 2 begin say_title("Sura Ruhu;") say("Sıfırlamak istediğinden emin misin ?") local cyvercha = select("Evet","Hayır") if cyvercha == 2 then return elseif cyvercha == 1 then notice_all("CH "..pc.get_channel_id()..": Kristal oda süresi sıfırlanmıştır.") game.set_event_flag("time_1"..pc.get_channel_id().."",get_time() + 5*60) clear_server_timer("ejderi_kescen"..pc.get_channel_id().."",get_server_timer_arg()) server_timer("disari_yolluyoz"..pc.get_channel_id().."",60*5, pc.get_map_index()) ---300 olcak forked.warp_all_in_map("79","73","241300","1275400",295) end end function ejder_odasi_kalansure() if pc.get_map_index() == 79 then local saniyekalan = (game.get_event_flag("time_1"..pc.get_channel_id().."") - get_time()) local dakikakalan = math.ceil(saniyekalan / 60) notice("Mavi Ejderha'yı öldürmeye "..dakikakalan.." dakikalık bir zaman") notice("kaldı!") else end end end end
Ejder Odası Karakter Atıp İçerde Kalma Bug'u Fix!
Metin2 Lobby olarak, oyuncularımızın oyun deneyimini daha stabil ve keyifli hale getirmek adına sürekli olarak sistem güncellemeleri ve hata düzeltmeleri yapmaktayız. Bu doğrultuda, LykeeN sunucumuzda yaşanan 'Ejder Odası Karakter Atıp İçerde Kalma Bug'u' konusunda önemli bir düzeltme gerçekleştirdik. Bu yazıda, bug'ın ne olduğundan, neden oluştuğundan ve nasıl düzeltilmiş olduğundan bahsedeceğiz.
Bug Nedir?
Metin2 oyununda 'Ejder Odası' (Dragon Lair), yüksek seviye oyuncuların girebildiği zorlu bir dungeon'dur. Oyuncular, burada güçlü boss karakterlerle savaşır ve nadir ödüller kazanabilirler. Ancak bazı durumlarda, bug nedeniyle bir karakter Ejder Odasına girdikten sonra sistem tarafından atılır ancak odanın içine tekrar giremez ve dışarıya da çıkamaz. Bu durumda karakter, sanki 'hiçbir yerde'ymiş gibi oyun içinde kaybolmuş olur. Bu hem oyuncu hem de sunucu yönetimi için ciddi bir sorundur.
Bug Neden Oluşur?
Bug'un temel nedeni, Metin2 sunucu tarafında çalışan Lua scriptlerindeki quest mantığında meydana gelen eksikliklerdir. Özellikle quest timer, flag ve state sistemlerinde kontrol eksikliği olduğunda, oyuncu Ejder Odasına giriş yaptıktan sonra sistem onun konumunu doğru şekilde takip edemez. Bu da karakterin 'boşta' kalmasına neden olur. Hata, genellikle çok oyunculu durumlarda ya da sunucu yükü yüksekken daha sık ortaya çıkar.
Fix Nasıl Yapıldı?
Bug fix işlemi sırasında, LykeeN sunucusunda bulunan Ejder Odası quest scriptleri gözden geçirildi. Scriptteki timer kontrolleri güçlendirildi. Ayrıca, oyuncu Ejder Odasına girdiğinde flag setlenerek, oyuncunun konumu takip edilebilir hale getirildi. Eğer bir oyuncu sistemsel olarak odadan atılırsa, quest state sıfırlanarak karakterin tekrar normal oyun alanına dönmesi sağlandı. Bu sayede artık karakterler Ejder Odasında sıkışıp kalmayacaktır.
Quest Script Örneği
Aşağıda örnek bir quest script parçası verilmiştir. Bu script, karakterin Ejder Odasında iken sistem tarafından atılması durumunda onu güvenli bir şekilde geri döndürür:
quest dragon_lair_fix begin
state start begin
when login with pc.get_map_index() == DRAGON_LAIR_MAP_INDEX begin
if pc.getqf('dragon_lair_flag') == 1 then
cmdchat('You were stuck in Dragon Lair, teleporting out safely...')
pc.warp_to_village()
pc.setqf('dragon_lair_flag', 0)
end
end
end
end[/BR]
Sonuç
Metin2 Lobby olarak, LykeeN sunucusunda quest sistemlerinin güvenilirliğini artırmak ve kullanıcı deneyimini optimize etmek için bu tür hataları düzenli olarak takip ediyor ve düzeltiyoruz. Ejder Odası bug fix sayesinde artık oyuncular, dungeon'a güvenle girebilir ve daha keyifli bir şekilde raid yapabilirler. Quest geliştirme ve debug işlemleri için sürekli olarak Martysama, Metin2Dev gibi topluluklardan destek alıyoruz. Metin2Lobby.com üzerinden daha fazla quest ve lua script örneği inceleyebilirsiniz.
Dragon Lair Character Kick-Out and Stuck Bug Fixed!
At Metin2 Lobby, we continuously update our systems and fix bugs to ensure that our players enjoy a more stable and fun gaming experience. In this direction, we have made an important fix regarding the 'Dragon Lair Character Kick-Out and Stuck Bug' issue on our LykeeN server. In this article, we will talk about what the bug is, why it occurs, and how it was fixed.
What Is The Bug?
In the game Metin2, the 'Dragon Lair' is a challenging dungeon where high-level players can enter. Players fight powerful bosses here and can win rare rewards. However, sometimes due to a bug, after a character enters the Dragon Lair, they are kicked by the system but cannot re-enter the room nor exit. In this case, the character remains stuck as if 'nowhere' in the game. This is a serious problem for both players and server administration.
Why Does The Bug Occur?
The root cause of the bug lies in the Lua scripts running on the Metin2 server side. Particularly, missing checks in quest timer, flag, and state systems cause the system to lose track of the player's location correctly after entering the Dragon Lair. This leads to the character being left 'floating' in the game. The error usually occurs more frequently during multiplayer situations or when the server load is high.
How Was The Fix Applied?
During the bug fix process, the Dragon Lair quest scripts on the LykeeN server were reviewed. Timer checks within the script were strengthened. Additionally, upon entering the Dragon Lair, a flag is set to track the player's position. If a player is kicked from the room due to a system issue, their quest state is reset, allowing them to return safely to the normal game area. Thus, characters no longer get stuck inside the Dragon Lair.
Example Quest Script
Below is an example of a quest script segment. This script safely teleports a player out if they are stuck in the Dragon Lair:
quest dragon_lair_fix begin
state start begin
when login with pc.get_map_index() == DRAGON_LAIR_MAP_INDEX begin
if pc.getqf('dragon_lair_flag') == 1 then
cmdchat('You were stuck in Dragon Lair, teleporting out safely...')
pc.warp_to_village()
pc.setqf('dragon_lair_flag', 0)
end
end
end
end[/BR]
Conclusion
As Metin2 Lobby, we regularly monitor and fix such errors to increase the reliability of quest systems and optimize user experience on the LykeeN server. Thanks to the Dragon Lair bug fix, players can now enter the dungeon confidently and enjoy their raids. We continuously receive support from communities like Martysama and Metin2Dev for quest development and debugging. You can check more quest and lua script examples at Metin2Lobby.com.
