Arkadaşlar silah veya zırh elimizdeyken o silah üzerindeki taşlarla yapılan bir bug'tur tam olarak yapılışını anlatmıyorum sebebi başka serverlerde kimsenin denememesidir.
Hemen anlatıma geçiyorum.
char_item.cpp açılır ve aşşağıdaki kod aratılır.
Alttaki kod bulduğumuz kodun altına eklenir.
Son Hali ;
Hemen anlatıma geçiyorum.
char_item.cpp açılır ve aşşağıdaki kod aratılır.
Kod:
if (item2->GetSocketCount() == 0) return false;
Alttaki kod bulduğumuz kodun altına eklenir.
Kod:
if (item2->IsEquipped()) return false;
Son Hali ;
Yine char_item.cpp içerisinde aşşağıdaki kod aratılır.
Kod:
if (item2->GetVnum() >= 28330 && item2->GetVnum() <= 28343)
Ve üstüne bu kod eklenir.
Kod:
if (item2->IsEquipped()) return false;
Son Hali ;
Kodlarda kayma yaşanırsa tab ayarını kendiniz yapınız...
İyi günler / İyi forumlar...
Metin2 Sunucularında C++ Kaynağından Tas Bug'unu Engelleme Rehberi
Metin2 özel sunucularında geliştirme yapan geliştiriciler için en büyük tehditlerden birisi TAŞ BUG'udur. Bu bug, oyuncuların bir eşyayı taşırken diğer eşyalarla çakışmalar sonucu sunucuda hatalı veri oluşmasına sebep olabilir. Bu da hem oyun deneyimini bozar hem de sunucu güvenliğini tehdit edebilir. Bu nedenle HKumbur & ByCypruS gibi isimlerin geliştirdiği yöntemlerle bu tür güvenlik açıklarının kapatılması büyük önem taşır.
TAŞ BUG Nedir?
TAŞ BUG, Metin2'de bir oyuncunun envanterindeki eşyalarla etkileşim sırasında, özellikle eşya taşıma işlemi sırasında sistemsel bir hata sonucu eşyanın birden fazla kez görünmesine veya çoğaltılmasına neden olan bir exploit'tir. Bu hata genellikle C++ sunucu kaynağındaki eksik kontrollerden doğar. Eğer doğru kontrol mekanizmaları yerleştirilmezse, bu tür hatalar istismar edilebilir.
C++ Kaynağında TAŞ BUG'un Engellenmesi
TAŞ BUG'un engellenmesi için öncelikle oyun içi eşya taşıma fonksiyonlarında bazı kontrollerin yapılması gerekir. Bu kontroller, Martysama[/COORD] gibi deneyimli geliştiricilerin önerdiği yöntemlerle birlikte geliştirilmelidir. Aşağıda bu konuda uygulanabilecek bazı temel adımlar yer almaktadır:
- Eşya taşıma sırasında, taşınan eşyanın geçerli slotunun kontrolü yapılmalıdır.
- Taşıma işlemi sırasında iki farklı slot arasında geçiş yapılmaması sağlanmalıdır.
- Aynı anda birden fazla taşıma işlemi engellenmelidir.
- Eşya taşıma işlemleri için mutex (senkronizasyon) kontrolleri kullanılmalıdır.
TAŞ BUG Kontrol Kodu Örneği (Python Tarzı Pseudocode)
```python
if item_slot_source == item_slot_destination:
return False # Aynı slota taşıma engellenmeli
if not is_valid_slot(item_slot_source) or not is_valid_slot(item_slot_destination):
return False # Geçersiz slot kontrolü
if player.is_moving_item:
return False # Zaten taşıma işlemi varsa engelle
``
Sunucu Güvenliği İçin Ekstra Adımlar
Oyun güvenliği için sadece TAŞ BUG engellenmesi yeterli olmayabilir. Sunucu tarafında loglama, anormal davranışları tespit eden sistemler, otomatik ban mekanizmaları gibi gelişmiş sistemler de entegre edilmelidir. Bu sistemler Metin2 Development sürecinin önemli parçalarıdır. Özellikle DB Core ve Game Core katmanlarında yapılan kontroller büyük rol oynar.
Sonuç
TAŞ BUG gibi hatalar, Metin2 özel sunucularında ciddi güvenlik açıklarına yol açabilir. Ancak doğru C++ kaynak kod düzenlemeleri, TAŞ BUG gibi hataların önüne geçmek mümkündür. HKumbur & ByCypruS gibi isimlerin önerdiği tekniklerle birlikte, sunucu güvenliği daha stabil hale getirilebilir. Bu tür güvenlik açıklarının önlenmesi, Metin2 Lobby gibi platformlarda sunucu sahipleri için büyük önem taşır.
Preventing Stone Bug from C++ Source in Metin2 Servers
One of the biggest threats for developers working on Metin2 private servers is the STONE BUG. This bug can cause incorrect data to appear on the server as a result of item conflicts while players are moving items. This not only ruins the gaming experience but also threatens server security. Therefore, closing such security vulnerabilities with methods developed by names like HKumbur & ByCypruS is of great importance.
What is STONE BUG?
STONE BUG is an exploit in Metin2 that causes an item to appear multiple times or even duplicate due to a system error during item movement interactions in a player's inventory. This error typically arises from missing checks in the C++ server source. If proper control mechanisms are not placed, such errors can be exploited.
Preventing STONE BUG in C++ Source
To prevent STONE BUG, certain checks must be performed in the in-game item movement functions. These checks should be developed together with methods suggested by experienced developers like Martysama. Some basic steps that can be applied in this regard are listed below:
- The validity of the slot being moved must be checked during the item move operation.
- Transitions between two different slots during the move process should be prevented.
- Multiple simultaneous move operations should be blocked.
- Mutex (synchronization) controls should be used for item movement operations.
Sample Code for STONE BUG Check (Python-style Pseudocode)
```python
if item_slot_source == item_slot_destination:
return False # Blocking move to same slot
if not is_valid_slot(item_slot_source) or not is_valid_slot(item_slot_destination):
return False # Invalid slot check
if player.is_moving_item:
return False # Block if already moving
``
Additional Steps for Server Security
For game security, preventing STONE BUG alone may not be sufficient. Logging systems, anomaly detection mechanisms, and automated ban systems should also be integrated into the server-side. These systems are important parts of the Metin2 Development process. Especially in DB Core and Game Core layers, the checks made play a significant role.
Conclusion
Bugs like STONE BUG can lead to serious security vulnerabilities in Metin2 private servers. However, with correct C++ source code modifications, it is possible to prevent issues like STONE BUG. Together with techniques recommended by names like HKumbur & ByCypruS, server security can be made more stable. Preventing such security flaws is of great importance for server owners on platforms like Metin2 Lobby.
