Neler yeni

Foruma hoş geldin, Ziyaretçi

Metin2Lobby.com Metin2 Private Server Tanıtım Advertising Ve Geliştirme Forumudur.Metin2 pvp serverler,1-99,1-105,1-120,55-120 global serverları paylaş yada ara.
Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Sonitex Offline Shop Uzaktan Mağaza Kontrol Engeli // Mağaza Yakınlık Şartı.

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Konular
48,291
Mesajlar
48,601
Tepkime puanı
75
M2 Yaşı
3 yıl 11 ay 10 gün
Trophy Puan
48
Konum
Web sitesi
M2 Yang
488,879
Ticaret : 1 / 0 / 0
Ticaret Oranı : 100%
Merhaba,

Sonitex kullanan bir arkadaşım için biraz önce düzenleme yaptık.
Premium sürümü kullanılıyordu. Kendi içinde hali hazırda bir düzenleme var mı göremedim. Sadece rica edileni yaptım ve sizinle paylaşıyorum.
Hızlı ve pratik bir çözüm. Farklı kanallardan, haritalardan ve aynı alanda olsa dahi offline pazarı düzenlemenizi engeller.

Uzatmadan direkt düzenlememi paylaşayım.

private_shop_util.h dosyamıza giriş yapalım ve aşağıdaki satırları bulalım.

Kod:
extern bool CanBuildPrivateShop(LPCHARACTER ch);  extern bool CheckTradeWindows(LPCHARACTER ch);  extern int GetEmptyInventory(LPCHARACTER pChar, LPITEM pItem);

bunların hemen altına aşağıdaki benim kodumu dahil edelim ve dosyayı kaydedelim.

Kod:
// Oyuncunun, kendi Private Shop'unu yönetebilmesi için gereken koşulları ekleyelim. // Varsayılan yarıçap 2000’dir; 0 verilirse yakınlık şartı devre dışı kalır. static const int PRIVATE_SHOP_EDIT_RADIUS_DEFAULT = 2000; bool CanManagePrivateShopHere(LPCHARACTER ch, int iRadius = PRIVATE_SHOP_EDIT_RADIUS_DEFAULT);

bu dosya ile işimiz bitti.

private_shop_util.cpp dosyamıza giriş yapalım ve aşağıdaki satırları bulalım.

Kod:
#include "private_shop_manager.h"

bunun hemen altına aşağıdaki include'yi dahil edelim.

Kod:
#include "config.h"

Daha sonra şunu şunu aratalım

Kod:
int GetEmptyInventory(LPCHARACTER pChar, LPITEM pItem /* = nullptr */)  {      int iPos = -1;     ......     ......     ......     ......      return iPos;  }

ve altına hemen şunu dahil edelim :

Kod:
bool CanManagePrivateShopHere(LPCHARACTER ch, int iRadius) {         if (!ch)             return false;                   const TPrivateShop * pTab = ch->GetPrivateShopTable();         if (!pTab)             return false;           if (pTab->bChannel != g_bChannel)             return false;           if (ch->GetMapIndex() != pTab->lMapIndex)             return false;           if (iRadius > 0)         {         const long dx = static_cast<long>(ch->GetX()) - pTab->lX;         const long dy = static_cast<long>(ch->GetY()) - pTab->lY;         const long long dist2 = 1LL * dx * dx + 1LL * dy * dy;         const long long r2 = 1LL * iRadius * iRadius;         if (dist2 > r2)             return false;         }         return true; }

bu dosya ile de işimiz artık bitti.

input_main.cpp dosyamızı açalım ve aşağıdaki yerleri bularak kodumuzu uygun alanlara ekleyelim.

Bulacağımız yerler :

Kod:
void CInputMain::PrivateShopClose(LPCHARACTER ch) void CInputMain::PrivateShopWithdraw(LPCHARACTER ch) void CInputMain::PrivateShopModify(LPCHARACTER ch) int CInputMain::PrivateShopItemPriceChange(LPCHARACTER ch, const char* c_pData, size_t uiBytes) int CInputMain::PrivateShopItemMove(LPCHARACTER ch, const char* c_pData, size_t uiBytes) int CInputMain::PrivateShopItemCheckin(LPCHARACTER ch, const char* c_pData, size_t uiBytes) int CInputMain::PrivateShopItemCheckout(LPCHARACTER ch, const char* c_pData, size_t uiBytes)

Uygun alanlara ekleyeceğimiz kod :

Kod:
if (!CanManagePrivateShopHere(ch))     {         ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Kisisel dukkanini yonetebilmek icin, magazanizin yaninda olmaniz gerekmektedir."));         return;     }


Mükemmel bir çözüm değil.
Düz mantıkta hemen acilen isteğe göre yaptığımız bir şeydir.
Eleştiriye ve daha iyisi sunulmaya açıktır.

Ekstra :

Pazara ışınlanmak için aynı haritada ve aynı ch de olmanız gereksin istiyorsanız :

char.cpp fonksiyonu bul :

Kod:
void CHARACTER::WarpToPrivateShop(long lAddr, WORD wPort) {     if (!IsPrivateShopOwner())         return;     if (m_pkTimedEvent)     {         ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Your logout has been canceled."));         event_cancel(&m_pkTimedEvent);         return;     }     ClosePrivateShopPanel(true);     m_iMyShopTime = 0;     if (IsHack(false, true, 10))     {         ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can not teleport to your private shop right now."));         return;     }

Ekle :

Kod:
const TPrivateShop* pTab = GetPrivateShopTable();     if (!pTab)     {         ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Magaza verisine ulasilamadi."));         return;     }     if (pTab->bChannel != g_bChannel)     {         ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Magazaya isinlanmak icin ayni kanalda olman gerek."));         return;     }     if (GetMapIndex() != pTab->lMapIndex)     {         ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Magazaya isinlanmak icin ayni haritada olman gerek."));         return;     }

Sonitex Offline Shop Uzaktan Mağaza Kontrol Engeli Nedir?
Metin2 özel sunucularında oyun deneyimi arttırmak için geliştirilen sistemlerden biri olan Sonitex Offline Shop, oyuncuların oyun içi varlıklarını satın alma, satma ve yönetme imkanı sunar. Ancak bazı durumlarda bu sistemin uzaktan kontrol edilebilmesi, sunucu güvenliği açısından ciddi riskler doğurabilir. Bu sebeple geliştiriciler tarafından uzaktan mağaza kontrol engeli getirilmiştir.

Mağaza Yakınlık Şartı
Bu özellik sayesinde, oyuncuların offline shop sistemine erişebilmeleri için NPC'nin yakınında bulunması gerekir. Bu sayede, oyuncuların uzaktan veya farklı konumlardan mağazalarını açıp işlemler yapması engellenmiş olur. Böylece hileli işlemler önlenebilir ve oyun içi ekonomi daha dengeli hale gelir.

Sistem Nasıl Çalışır?
Offline shop açıldığında, sistem otomatik olarak oyuncunun NPC'ye belirli bir mesafede olup olmadığını kontrol eder. Bu mesafe genellikle 10-15 tile civarında ayarlanır. Eğer oyuncu bu mesafe dışındaysa, mağaza açılamaz veya işlem yapılamaz. Bu kontrol, C++ tabanlı sunucu tarafında yapılır ve Python GUI üzerinden entegre edilir.

Sunucu Geliştirici İçin Avantajları
  • Oyun içi dolandırıcılığı azaltır.
  • Ekonomik dengenin korunmasına yardımcı olur.
  • Hileli davranışları sınırlar.
  • Güvenli ve adil bir oynama ortamı sağlar.

Nasıl Entegre Edilir?
Bu sistemi kendi Metin2 özel sunucunuza entegre etmek için öncelikle game server source üzerinde değişiklik yapmanız gerekir. Özellikle shop.cpp ve char.cpp dosyalarında gerekli kontroller tanımlanmalıdır. Ayrıca client side kısmında da uiscript dosyalarında uyumlu değişiklikler yapılmalıdır. Bu işlemler sırasında Python Root ve Martysama gibi araçlar kullanılabilir.

Metin2lobby.com olarak katkı
Metin2 özel sunucu geliştirme konusunda destek veren platformumuzda, bu gibi gelişmiş sistemlerin entegrasyonuna dair kaynaklar, örnek kodlar ve derinlemesine anlatımlar sunulmaktadır. Metin2lobby üzerinden source edit ve system konularında bilgi sahibi olabilirsiniz.

Sonuç
Sonitex Offline Shop sisteminin uzaktan kontrolünü engellemek, hem güvenlik hem de oyun dengesi açısından kritik öneme sahiptir. Mağaza yakınlık şartı gibi önlemler, Metin2 özel sunucularının daha adil ve sürdürülebilir bir yapıya kavuşmasını sağlar.


What is Sonitex Offline Shop Remote Control Block?
The Sonitex Offline Shop, one of the systems developed to enhance the gaming experience on Metin2 private servers, allows players to buy, sell, and manage in-game assets. However, in some cases, the ability to remotely control this system can pose serious security risks for the server. Therefore, developers have introduced a remote shop control block.

Shop Proximity Requirement
Thanks to this feature, players must be near the NPC to access the offline shop system. This prevents players from opening shops and performing transactions from remote or different locations. Thus, fraudulent activities can be prevented and in-game economy becomes more balanced.

How Does It Work?
When an offline shop is opened, the system automatically checks whether the player is within a certain distance from the NPC. This distance is usually set around 10-15 tiles. If the player is outside this range, the shop cannot be opened or transactions cannot be made. This check is done on the server-side with C++ and integrated via Python GUI.

Advantages for Server Developers
  • Reduces in-game fraud.
  • Helps maintain economic balance.
  • Limits cheating behaviors.
  • Provides a secure and fair gameplay environment.

How to Integrate?
To integrate this system into your own Metin2 private server, you first need to make changes in the game server source. Particularly, necessary checks must be defined in shop.cpp and char.cpp files. Additionally, compatible modifications should be made in the uiscript files on the client side. During these operations, tools like Python Root and Martysama can be used.

Contribution as Metin2lobby.com
On our platform that provides support for Metin2 private server development, resources, sample codes, and detailed explanations about integrating such advanced systems are available. You can gain knowledge about source edit and system topics through Metin2lobby.

Conclusion
Blocking the remote control of the Sonitex Offline Shop system is critically important both for security and game balance. Measures like the shop proximity requirement help Metin2 private servers achieve a fairer and more sustainable structure.
 

Forumdan daha fazla yararlanmak için giriş yapın yada üye olun!

Forumdan daha fazla yararlanmak için giriş yapın veya kayıt olun!

Kaydol

Forumda bir hesap oluşturmak tamamen ücretsizdir.

Üye ol
Giriş Yap

Eğer bir hesabınız var ise lütfen giriş yapın

Giriş Yap

Tema düzenleyici

Tema özelletirmeleri