Offline shop açıkken krallık değiştirme && isim izni kullanma fixi

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

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
Cümleten Selamun Aleyküm arkadaşlar iyi forumlar...


Offline shop açıkken isim izni ve krallık değiştirme kağıdı ile krallık ve isimlerini değiştirince bug oluyormuş paylaşıldımı bilmiyorum
ama yinede sizlerle paylaşmak istedim...

For @ ;

Aratıyoruz...

Game/Src/questlua_pc.cpp

Kod:
int pc_change_sex(lua_State* L)

Kod bloğunun altına ekleyin



aynı cpp içinde aratıyoruz...

Kod:
{ "change_sex",pc_change_sex},

Altına ekliyoruz



change_empire.quest açınız

Aratın...

Kod:
if pc.is_engaged() then say("Nişanlı olduğun için") say("imparatorluk değiştiremezsin.") say("") return false end

altıne ekle



change_name.quest açıyoruz...

aratıyoruz...

Kod:
if pc.is_married() then say("Evli olduğun için isim değiştiremezsin.") say("") return end

Altına ekliyoruz...




Herhangi bir şekilde questi aşarlarsa bu ihtimalide göze alarak bunu da yapmanızı öneririm...

aynı şekilde questluan_pc.cpp dosyasında

aratılır

Kod:
int pc_change_empire(lua_State* L) { LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); lua_pushnumber(L, ch->ChangeEmpire((unsigned char)lua_tonumber(L, 1))); return 1; }

değiştiriniz



KOD bloğu aratılır...

Kod:
int pc_change_name(lua_State* L)

değiştirilir




Birde arkadaşlar kostüm giyili iken cinsiyet değiştirince herhangi bir bug oluşumuna karşı bir fix vardı bu fix
cinsiyet değiştirme kağıdığında etkin olmadığı için değişim tılsımı 3 gün süre atıyor ve cinsiyet değişmiyordu onada böyle yaparsanız düzelir...

questlua_pc.cpp

Arat...

Kod:
int pc_change_sex(lua_State* L)

kod bloğunu altına ekle



arat...

Kod:
{ "change_sex",pc_change_sex},

Altına ekle...

Kod:
{ "change_sex_degisemen",pc_change_sex_degisemen},



item_change_sex.quest

arat...

Kod:
if pc.get_level() < 50 then  say_title("Değişim Tılsımı ") say_reward("Sadece 50. seviye altındakiler cinsiyet") say("değiştirebilirler.") say("Cinsiyet değiştirmek için seviyen çok düşük.") say("50. seviyeye ulaştığında tekrar dene.") say("") return; end

ALTINA EKLE



Son olarak bunları locale_string.txt'ye ekleyin



quest_functions'a ekleyin

Kod:
pc.offline_shop_engel pc.offline_shop_engel_isimizi pc.change_sex_degisemen

g2E5Lb.png


Bv3MRD.png


Offline Shop Açıkken Krallık Değiştirme ve İsim İzni Kullanma Fixi

Metin2 özel sunucularında geliştirme yaparken bazı sistemsel sorunlarla karşılaşmak kaçınılmazdır. Bu sorunlardan birisi de offline shop modülü açıkken krallık değiştirme veya isim değiştirme işlemlerinde oluşabilecek hatalardır. Bu durum, oyuncuların hem kendi gelişimlerini etkileyebilecek hem de sunucu dengesini bozabilecek ciddi bir problem teşkil eder. Bu yazıda, offline shop açıkken krallık değiştirme ve isim izni alma işlemlerini engelleyen hatayı nasıl düzelteceğinizi detaylı olarak anlatacağız.

Offline Shop Nedir?
Metin2 özel sunucularında, oyuncuların offline状态下 eşya alım-satımı yapabilmelerini sağlayan sistemdir. Oyuncu kapalıyken bile mağazasının açık kalmasını sağlar. Ancak bu sistem aktifken bazı işlemler kilitlenmelidir. Örneğin bir oyuncu offline shop açmışsa, krallık değiştirme veya isim değiştirme gibi kritik işlemleri yapmamalıdır. Aksi takdirde sunucuda veri çakışması, güvenlik açıkları ve hile riski ortaya çıkabilir.

Problemin Kaynağı
Genellikle C++ tabanlı game core üzerinde çalışan Metin2 özel sunucularında, client ile server arasında senkronizasyon eksikliği nedeniyle bu tür işlemler engellenemez. Özellikle root dosyalarında tanımlanan komutlar, auth veya db core ile doğru şekilde kontrol edilmezse, kullanıcı offline shop açıkken dahi bu işlemleri gerçekleştirebilir. Bu da sunucu güvenliği açısından büyük risk oluşturur.

Fix Uygulaması
Bu hatayı düzeltmek için öncelikle game server üzerinde C++ seviyesinde değişiklik yapılması gerekir. Özellikle char_manager.cpp veya benzeri karakter yönetimi dosyasında yer alan fonksiyonlarda, kullanıcı offline shop durumu kontrol edilmeden diğer işlemlere izin verildiği için hata meydana gelir.

Fix için adım adım uygulanması gerekenler:
1. game/src/char/char_manager.cpp dosyasını açın.
2. ChangeEmpire() ve ChangeName() fonksiyonlarını bulun.
3. Her iki fonksiyonun başında, karakterin offline shop açık olup olmadığını kontrol eden bir if bloğu ekleyin. Örnek:
if (ch->GetShopOwner()) {
ChatPacket(ch, QCOLOR_RED 'Offline shop açıkken bu işlemi yapamazsınız.');
return;
}

Sunucu Tarafında Güvenlik Artışı
Bu fix sayesinde, sunucu tarafında offline shop açık olan oyuncuların krallık veya isim değiştirme gibi işlemler yapması engellenmiş olur. Bu da veri bütünlüğünü korurken, hile riskini de azaltır. Aynı zamanda Python GUI ile yapılan yönetim panellerinde de bu tür kontroller yapılabilir. Py Root üzerinden entegre bir sistem kurulması önerilir.

Sonuç
Metin2 özel sunucularında offline shop sistemi aktifken oluşabilecek güvenlik açıklarını önlemek oldukça önemlidir. Bu fix sayesinde kullanıcıların sistemsel hatalarla karşılaşması önlenirken, sunucu güvenliği de artar. Geliştiricilerin bu tarz küçük ama kritik hataları fark edip çözmeleri, sunucunun uzun vadeli başarısı için hayati öneme sahiptir.


Fix for Changing Kingdom and Name Permission While Offline Shop is Active

When developing Metin2 private servers, encountering certain systematic issues is inevitable. One such issue is errors that occur during kingdom change or name change operations while the offline shop module is active. This situation can seriously affect both player progression and the overall balance of the server. In this article, we will explain in detail how to fix the bug that prevents players from changing kingdoms or names while their offline shop is open.

What is Offline Shop?
In Metin2 private servers, this system allows players to sell and buy items even while they are offline. It enables the shop to remain open even when the player is not logged in. However, while this system is active, certain actions must be locked. For example, if a player has opened an offline shop, they should not be allowed to perform critical operations like changing kingdoms or names. Otherwise, it could lead to data conflicts, security vulnerabilities, and potential cheating opportunities.

Source of the Problem
Often in C++-based game cores running on Metin2 private servers, lack of synchronization between the client and server causes these operations not to be properly blocked. If commands defined in root files are not correctly validated through auth or db core, users may still perform these operations even while having an offline shop active, creating significant security risks for the server.

Applying the Fix
To resolve this issue, modifications at the C++ level within the game server are required. Specifically, in character management files such as char_manager.cpp, functions like ChangeEmpire() or ChangeName() allow these operations without checking whether the player has an active offline shop.

Steps to Apply the Fix:
1. Open the file game/src/char/char_manager.cpp.
2. Locate the functions ChangeEmpire() and ChangeName().
3. At the beginning of each function, add an if block to check if the character has an offline shop active. Example:
if (ch->GetShopOwner()) {
ChatPacket(ch, QCOLOR_RED 'You cannot perform this action while your offline shop is active.');
return;
}

Increased Server Security
With this fix, players with an active offline shop will no longer be able to change kingdoms or names. This maintains data integrity and reduces the risk of cheating. Additionally, similar checks can be implemented in administration panels created with Python GUI. An integrated system via Py Root is recommended.

Conclusion
Preventing security vulnerabilities caused by the offline shop system in Metin2 private servers is highly important. With this fix, user encounters with systemic errors are prevented, and server security is enhanced. It is vital for developers to identify and resolve such small but critical bugs for long-term server success.
 

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

Benzer konular

Geri
Üst Alt