Çoğu serverde olan Köy gardiyanı ekran takılma sorunu fix ---

  • Konbuyu başlatan Konbuyu başlatan Admin
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 0
  • Görüntüleme Görüntüleme 67

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
Merhabalar turkmmo

Gözüme çarpan ve günümüz fileslerinin çoğunda(hepside diyebilirim)bu ekran takılma sorunu mevcut.

Yani yeni lonca kuran birisi yada bir lonca üyesi'ne Köy gardiyanında tekrar "Yeni lonca kur" yazısı çıkıyor ve tıklayınca ekran takılı kalıyor.Bunuda filesin son aşamalarını test ederken ve dün gördüm ve basitce fixini paylaşayım dedim.

- Lonca üyesi olan birine tekrar lonca kur butonu çıkmaz.

İlk hali

d8YqZX.jpg


Fix hali

WgJr98.jpg

cd /usr/game/share/locale/turkey/quest > ten guild_manage.quest açılır.Aşağıda verdiğim kodlar eklenir kapatılıp.Putty'den ./qc çekilir.

Questi bulamayanlar içinde sorun değil aşağıda verdiğim kodları lua yada quest haline getirip putty'den ./qc letebilirsiniz.

Kod:
quest guild_building begin         state start begin                 when guild_man1.chat."GM: Yeniden kaydolma.." or guild_man2.chat."GM: Yeniden kaydolma.." or guild_man3.chat."GM: Yeniden kaydolma.."                         with pc.is_gm() begin                         say_title("Köy Gardiyanı: ")                         say("")                         say("Bilgi istiyor isen, kayıtlı ")                         say("kişinin ismini yaz.")                         say("")                         local u_name = input()                         local u_vid=find_pc_by_name(u_name)                         if u_vid==0 then                                 say_title("Bu isim kayıtlı değil.")                                 say(u_name)                                 return                         end                         local old_vid = pc.select(u_vid)                         u_withdrawTime=pc.getqf("new_withdraw_time")                         u_withdrawTime=pc.getqf("new_withdraw_time")                         pc.select(old_vid)                         withdrawDelay=game.get_event_flag("guild_withdraw_delay")                         disbandDelay=game.get_event_flag("guild_disband_delay")                         say_title("Köy Gardiyanı:")                         say("")                         say("En erken katılış tarihini")                         say("kontrol et.")                         if u_withdrawTime>0 then                                 say("Geçen zaman: "..time_to_str(u_withdrawTime))                                 say("(Kalan zaman: ".. withdrawDelay.." Gün)")                                 say("")                         end                         if u_disbandTime>0 then                                 say("kayıp olmaya zaman: "..time_to_str(u_disbandTime))                                 say("(kalan zaman: ".. disbandDelay.." Gün)")                                 say("")                         end                         local retryTime1 = u_withdrawTime + withdrawDelay*86400                         local retryTime2 = u_withdrawTime + disbandDelay*86400                         local retryTime = 0                         if retryTime1 > retryTime2 then                                 retryTime = retryTime1                         else                                 retryTime = retryTime2                         end                         local curTime = get_time()                         if curTime < retryTime then                                 say("Yeni denemeye, kalan zaman: "..time_to_str(retryTime))                                 say("(Kalan zaman: "..((retryTime-curTime)/3600).." saat)")                                 say("")                                 if is_test_server() then                                         local s=select("Hemen intibak et", "Kapat")                                         if s==1 then                                                 local old_vid = pc.select(u_vid)                                                 local curTime=get_time()                                                 pc.setqf("new_withdraw_time", curTime-withdrawDelay*86400)                                                 pc.setqf("new_withdraw_time", curTime-disbandDelay*86400)                                                 pc.select(old_vid)                                         end                                 end                         else                                 say("Hemen kayıt mümkün.");                                 say("")                         end                 end                 when    guild_man1.chat."GM: Loncanın imkanlarına bak" or                         guild_man2.chat."GM: Loncanın imkanlarına bak" or                         guild_man3.chat."GM: Loncanın imkanlarına bak"                         with pc.is_gm() begin                         test_chat("pc.has_guild: "..bool_to_str(pc.has_guild()))                         test_chat("pc.is_guildmaster: "..bool_to_str(pc.isguildmaster()))                         test_chat("pc.empire: "..pc.empire)                         test_chat("npc.empire: "..npc.empire)                 end                 when guild_man1.chat."Loncadan çık " or                         guild_man2.chat."Loncadan çık " or                         guild_man3.chat."Loncadan çık "                         with pc.hasguild() and not pc.isguildmaster() and (pc.is_gm() or npc.empire == pc.empire) begin                         -- ??                         say_title("Köy Gardiyanı:")                         say("")                         say("Olduğun loncadan çıkmak mı istiyorsun?")                         say("Herhalde orada arkadaş bulamadın. ")                         say("Nasıl istersen.")                         say("Loncadan çikmak istediğine emin misin?")                         say("")                         local s = select("Evet", "Hayır")                         if s==1 then                                 say_title("Köy Gardiyanı:")                                 say("")                                 say("Tamam.")                                 say("Artık loncada değilsin. ")                                 say("")                                 say("")                                 pc.remove_from_guild()                                 pc.setqf("new_withdraw_time",get_global_time())                         end                 end                 when guild_man1.chat."Loncayı kapat" or                         guild_man2.chat."Loncayı kapat" or                         guild_man3.chat."Loncayı kapat"                         with pc.hasguild() and pc.isguildmaster() and (pc.is_gm() or npc.empire == pc.empire) begin                         -- ??                         say_title("Köy Gardiyanı:")                         say("")                         say("Ne?")                         say("[DELAY value;150]        [/DELAY]")                         say("O kadar zahmetle bu loncayı ")                         say("kurdum ve sen onu şimdi kapatmak mı istiyorsun?")                         say("Bütün hatıraların ve dostların ")                         say("sonsuza kadar kaybolacak!")                         say("")                         say("Loncayı kapatmak istediğine emin misin?")                         say("")                         local s = select("Evet", "Hayır")                         if s==1 then                         say_title("Köy Gardiyanı:")                         say("")                         say("Tamam.")                         say("Loncayı kapattım.")                         say("")                         say("")                         pc.destroy_guild()                         pc.setqf("new_disband_time", get_global_time())                         pc.setqf("new_withdraw_time", get_global_time())                         end                 end                 when guild_man1.chat."Yeni Lonca kur" or                         guild_man2.chat."Yeni Lonca kur" or                         guild_man3.chat."Yeni Lonca kur" with not pc.hasguild() begin                         ----with (pc.is_gm() or npc.empire == pc.empire)                         if game.get_event_flag("guild_withdraw_delay")*86400 >                                 get_global_time() - pc.getqf("new_withdraw_time") then                         say_title("Köy Gardiyanı:")                         say("")                         say("Bir loncadan ayrıldıktan sonra, 1 gün beklemelisin.")                         return                         end                         if game.get_event_flag("guild_disband_delay")*86400 >                                 get_global_time() - pc.getqf("new_withdraw_time") then                         say_title("Köy Gardiyanı: ")                         say("")                         say("Bir lonca kapattın! ")                         say("Bu yüzden 1 gün beklemelisin.")                         say_reward("Loncayı kapattığın tarih: ") say_reward(string.format("%s", time_to_str(pc.getqf("new_withdraw_time"))))                         return                         end                         say_title("Köy Gardiyanı:")                         say("")                         say("Yeni lonca kurmak istiyor musun?")                         say("")                         say("Yeni lonca kurmak için ")                         say("en az 40.seviyede olmalısın. Ayrıca")                         say(" 5000000 Yang gerekiyor.")                         say("")                         say("Lonca kurmak istiyor musun?")                         say("")                         local s = select("Evet", "Hayır")                         if s == 2 then                                 return                         end                         if pc.level >= 40 then                         if pc.gold >= 5000000 then if not guild_create_item or pc.countitem(guild_create_item)>0 then                                         game.request_make_guild()                                 end                                 else                                 say_title("Köy Gardiyanı:")                                 say("")                                 say("Yeterli yang yok!")                                 say("")                                 return                                 end                         else                         say_title("Köy Gardiyanı:")                         say("")                         say("Seviyen lonca kurmak için ")                         say("yeterli değil. ")                         end                 end         end end

Metin2 Serverlerinde Köy Gardiyanı Ekran Takılma Sorunu ve Fix Yöntemleri

Metin2 oyununda quest sistematiği oldukça geniş kapsamlıdır ve birçok sunucu sahibi, oyuncuların deneyimini artırmak adına özel quest scriptleri geliştirir. Ancak bu süreçte bazı hatalarla da karşılaşılabilir. Bunlardan birisi de Köy Gardiyanı ekranında takılma problemidir. Bu durum hem oyuncuların hem de sunucu yöneticilerinin dikkatini çeker çünkü doğrudan oyun içi deneyimi etkiler.

Sorun Nedir?
Köy Gardiyanı questleri, genellikle oyuncuların günlük görevleri olarak tanımlanır ve belirli zaman aralıklarında tekrarlanabilir. Ancak bazı quest yapılandırmalarında, oyuncu bu ekrana girdiğinde ekran donabilir veya cevap veremez hale gelebilir. Bu durum genellikle hatalı Lua kodları, eksik trigger tanımlamaları ya da timer konfigürasyonundan kaynaklanır.

Sorunun Nedenleri
- Hatalı quest akışı tanımlamaları
- Eksik state geçişleri
- Yanlış flag kullanımı
- NPC ile quest arasındaki bağlantı kopuklukları
- Timer değerlerinin aşırı düşük ya da yüksek olması

Fix Süreci
Öncelikle quest dosyasının içeriğini kontrol edin. Özellikle begin ve end bölümlerinde hatalar olabilir. Lua tarafında event fonksiyonlarının doğru tanımlandığından emin olun. Ayrıca quest akışında state geçişlerinin eksiksiz olduğundan emin olun. Örneğin:

state start begin
when 20099.click begin
say('Köy Gardiyanı görevine hoş geldin!')
set_state(10)
end
end

Yukarıdaki gibi bir yapıda state geçişi doğru olmalıdır. Ayrıca timer tanımlaması varsa, bu değerin çok küçük olmamasına dikkat edilmelidir. Aksi halde sunucu üzerinde fazladan yük oluşabilir ve takılma meydana gelebilir.

Ekstra Öneriler
- Quest dosyalarını test ederken debug modunu kullanmak, hatayı daha hızlı bulmanızı sağlar.
- Reward sistemlerinde item verme işlemlerinin doğru tanımlandığından emin olun.
- Mob ve NPC tanımlamalarının quest ile uyumlu olduğundan emin olun.

Sonuç
Metin2 özelinde quest geliştirme sürecinde karşılaşılan bu gibi sorunlar, doğru analiz ve debug yöntemiyle çözülebilir. Köy Gardiyanı takılma sorunu da, yukarıda belirtilen adımlar izlenerek kolayca çözülebilir. Oyuncu deneyimi açısından bu tür hataların erken fark edilip düzeltilmesi büyük önem taşır.

Daha fazlası için Metin2Lobby'i ziyaret edin.


Village Guardian Screen Freeze Issue Fix on Most Metin2 Servers

Metin2 game features a comprehensive quest system, and many server owners develop custom quest scripts to enhance player experience. However, certain errors can occur during this process. One of these issues is the screen freeze problem with the Village Guardian. This issue attracts attention from both players and server administrators, as it directly impacts the in-game experience.

What Is the Problem?
The Village Guardian quests are typically defined as daily player tasks and repeat at specific intervals. However, in some quest configurations, the screen may freeze or become unresponsive when the player enters this interface. This issue often stems from incorrect Lua codes, incomplete trigger definitions, or improper timer configurations.

Reasons Behind the Problem
- Incorrect quest flow definitions
- Missing state transitions
- Improper flag usage
- Connection gaps between NPC and quest
- Timer values set too low or too high

Fix Process
Firstly, check the content of the quest file. Especially look for errors in begin and end sections. Ensure that event functions on the Lua side are properly defined. Also, make sure that state transitions in the quest flow are complete. For example:

state start begin
when 20099.click begin
say('Welcome to the Village Guardian Quest!')
set_state(10)[/COORD]
end
end

In such a structure, the state transition must be correct. Additionally, if timer definitions exist, ensure their values are not too small; otherwise, additional load may occur on the server, leading to freezes.

Additional Suggestions
- Using debug mode while testing quest files can help locate errors faster.
- Ensure that item distribution within reward systems is correctly defined.
- Confirm that mob and NPC definitions are compatible with the quest.

Conclusion
Issues like this encountered during quest development in Metin2 can be resolved through proper analysis and debugging methods. The Village Guardian freeze issue can be easily fixed by following the steps outlined above. Detecting and resolving such errors early is crucial for enhancing player experience.

Visit Metin2Lobby for more information.
 

Şuan Bu Konuyu Görüntüleyen Kullanıcılar (Toplam : 0, Üye : 0, Misafir : 0)

Benzer konular

Geri
Üst Alt