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 41

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 && İsim İzni Kullanma Fixi

Metin2 özel sunucularında birçok geliştirici, oyuncuların offline状态下 (çevrimdışı) esnasında bazı işlemler yapabilmesini sağlar. Bu işlemlerden birisi de offline shop sistemidir. Ancak bu sistem bazı durumlarda hatalı davranışlara neden olabilir. Özellikle krallık değiştirme veya isim izni gibi kritik yetenekleri kullanırken, offline shop açıkken bu komutların çalışması istenmeyen sonuçlara yol açabilir. Bu yazıda, offline shop açıkken krallık değiştirme ve isim izni kullanma sorununu nasıl çözeceğimizi detaylı olarak ele alacağız.

Problemin Temeli

Metin2 özel sunucu geliştirme sürecinde, oyuncuların offline状态下 dahi mağaza açmalarına olanak tanıyan sistemler geliştirilmiştir. Ancak bu sistem, oyuncu karakteri aktif değilken bile bazı yetenekleri veya komutları kullanmalarına izin verebilir. Özellikle krallık değiştirme (change_empire) ve isim izni (name change permission) gibi komutlar, offline状态下 kullanıldığında güvenlik açıklarına ve oyun içi haksızlıklara neden olabilir.

Neden Bu Sorun Oluşur?

Oyuncu, offline shop açıkken bir komut çalıştırdığında, sunucu bu komutun gerçekten oyuncu tarafından mı yoksa bir hata veya exploit yoluyla mı geldiğini ayırt edemeyebilir. Bu durumda, server-side kontrol mekanizmaları eksikse, bu tür işlemler izinsiz olarak yapılabilir. Bu da hem oyun deneyimini bozar hem de sunucu güvenliğini riske atar.

Fix Uygulaması

Bu hatayı düzeltmek için, öncelikle C++ tabanlı sunucu kaynak kodunda gerekli kontrollerin yapılması gerekir. Özellikle cmd_handler.cpp dosyasında, krallık değiştirme ve isim izni gibi komutlar için bir kontrol bloğu oluşturulmalıdır. Bu blokta, oyuncunun offline shop açıkken bu komutları kullanıp kullanamayacağı kontrol edilmelidir.

Örnek Kontrol Kodu:

Eğer oyuncunun offline shop açık ise, bu komutları reddetmelisiniz. Aşağıda örnek bir kontrol yapısı verilmiştir:

```cpp
if (ch->IsOpenSafebox() || ch->GetShopOwner() != 0)
{
ChatPacket(ch, CHAT_TYPE_INFO, 'Offline shop acikken bu islemi yapamazsiniz!');
return;
}
```

Bu yapı sayesinde, oyuncu offline状态下 iken krallık değiştirme veya isim izni gibi işlemleri gerçekleştiremez. Bu da sunucunuzun daha güvenli ve adil bir ortam sunmasını sağlar.

Python Tarafında GUI Kontrolleri

Eğer sunucu tarafında Python GUI kullanıyorsanız, bu kontrolleri de Python tarafında da yapabilirsiniz. Örneğin, uiscript veya py_root üzerinden butonlara tıklanırken, sunucuya göndermeden önce kontrol yapılabilir. Eğer oyuncu offline shop açıksa, bu butonlar devre dışı bırakılabilir veya uyarı mesajı gösterilebilir.

Sunucu Tarafında Güvenlik Arttırımı

Sunucu tarafında daha fazla güvenlik için, her komutun geldiğinde oyuncunun durumu kontrol edilmelidir. Bu durumlar şunları içerir:
- Offline shop açık mı?
- Safebox açık mı?
- Trade açık mı?
- Oyuncu başka bir işlemde mi?

Bu kontroller, game_core veya db_core gibi ana modüllerde yapılabilecek en temel güvenlik önlemlerindendir.

Sonuç

Metin2 özel sunucularında offline shop sistemi, kullanıcı deneyimini artırmak için harika bir özelliktir. Ancak bu sistemin kötüye kullanımına karşı gerekli kontroller yapılmadığı takdirde, sunucu güvenliği ciddi anlamda tehlikeye girebilir. Bu yazıda anlatılan fix, offline shop açıkken krallık değiştirme ve isim izni gibi önemli yetenekleri engelleyerek sunucunuzu daha güvenli hale getirir. Bu tür kontrolleri sürekli güncellemek ve test etmek, Metin2 geliştirme sürecinde büyük önem taşır.

Kaynaklar:
Metin2 Lobby - Metin2 Sunucu Geliştirme


Fix for Changing Kingdom && Using Name Permission While Offline Shop Is Open

In Metin2 private servers, many developers allow players to perform certain actions even while being offline. One of these features is the offline shop system. However, this system can sometimes cause unexpected behavior. Particularly, using commands such as changing kingdom or name permission while the offline shop is active may lead to unwanted outcomes. In this article, we will address how to fix issues related to changing kingdoms and using name permissions while the offline shop is active, in detail.

Root of the Problem

During Metin2 private server development, systems are built that allow players to open shops even while offline. However, such systems might allow players to use certain abilities or commands even when their character is not active. Specifically, commands like change_empire and name change permission can lead to security vulnerabilities and unfair gameplay if used while offline.

Why Does This Issue Occur?

When a player executes a command while the offline shop is open, the server may fail to distinguish whether the command came from the actual player or through an error or exploit. In cases where server-side control mechanisms are missing, such operations may be allowed without authorization, thus affecting both the gaming experience and server security.

Implementing the Fix

To resolve this issue, necessary checks must be implemented within the C++ based server source code. Specifically, in the cmd_handler.cpp file, a control block should be created for commands like kingdom changing and name permission. Within this block, you should check whether the player is allowed to execute these commands while the offline shop is active.

Sample Control Code:

If the player has the offline shop open, you should reject these commands. Below is an example control structure:

```cpp
if (ch->IsOpenSafebox() || ch->GetShopOwner() != 0)
{
ChatPacket(ch, CHAT_TYPE_INFO, 'You cannot perform this action while the offline shop is open!');
return;
}
```

With this structure, the player cannot perform kingdom-changing or name-permission operations while offline. This ensures your server maintains a safer and fairer environment.

GUI Controls on the Python Side

If you are using Python GUI on the server side, you can also implement these controls in Python. For instance, using uiscript or py_root, buttons can be disabled or warnings displayed before sending commands to the server if the offline shop is open.

Enhancing Security on Server-Side

For additional security, every incoming command should have its player state checked. These states include:
- Is the offline shop open?
- Is the safebox open?
- Is trade active?
- Is the player performing another action?

These checks are among the most fundamental security measures that can be implemented in core modules like game_core or db_core.

Conclusion

The offline shop feature in Metin2 private servers enhances user experience. However, if proper controls against misuse are not implemented, server security can be significantly compromised. The fix described in this article blocks critical abilities like kingdom changing and name permissions while the offline shop is active, making your server more secure. Continuously updating and testing such controls is crucial in the process of Metin2 development.

Resources:
Metin2 Lobby - Metin2 Server Development
 

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

Benzer konular

Geri
Üst Alt