Kanıt Resim ;
<blockquote data-attributes="member: 1649533" data-quote="footbal43" data-source="post: 20781670" class="bbCodeBlock bbCodeBlock--expandable bbCodeBlock--quote js-expandWatch">
Kod:
{ "name" : "HPRecoveryGaugeBar", "type" : "bar", "x" : 0, "y" : 0, "width" : 95, "height" : 13, "color" : 0x55ff0000, }, { "name" : "HPGauge", "type" : "ani_image", "x" : 0, "y" : 0, "delay" : 6, "images" : ( "D:/Ymir Work/UI/Pattern/HPGauge/01.tga", "D:/Ymir Work/UI/Pattern/HPGauge/02.tga", "D:/Ymir Work/UI/Pattern/HPGauge/03.tga", "D:/Ymir Work/UI/Pattern/HPGauge/04.tga", "D:/Ymir Work/UI/Pattern/HPGauge/05.tga", "D:/Ymir Work/UI/Pattern/HPGauge/06.tga", "D:/Ymir Work/UI/Pattern/HPGauge/07.tga", ), },
ALTINA EKLENİR ;
Kod:
{ "name" : "HPPoisonRecoveryGaugeBar", "type" : "bar", "x" : 0, "y" : 0, "width" : 95, "height" : 13, "color" : 0x55008000, }, { "name" : "HPPoisonGauge", "type" : "ani_image", "x" : 0, "y" : 0, "delay" : 6, "images" : ( "D:/Ymir Work/UI/Pattern/HPPoisonGauge/01.tga", "D:/Ymir Work/UI/Pattern/HPPoisonGauge/02.tga", "D:/Ymir Work/UI/Pattern/HPPoisonGauge/03.tga", "D:/Ymir Work/UI/Pattern/HPPoisonGauge/04.tga", "D:/Ymir Work/UI/Pattern/HPPoisonGauge/05.tga", "D:/Ymir Work/UI/Pattern/HPPoisonGauge/06.tga", "D:/Ymir Work/UI/Pattern/HPPoisonGauge/07.tga", ), },
02. ui.py açılır (root/) ve bu class'ın sonuna : class Gauge(Window): aşağıdaki bölüm eklenir:
Kod:
if app.ENABLE_POISON_GAUGE_EFFECT: def SetGaugeColor(self, color): if self.imgGauge: self.imgGauge.LoadImage("d:/ymir work/ui/pattern/gauge_" + color + ".tga")
03. uiparty.py açılır (root/) ve dosyanın en başına eklenir:
DİKKAT! Eğer hali hazırda dosyada mevcutsa import app'ı eklemeyin !
Kod:
import app if app.ENABLE_POISON_GAUGE_EFFECT: import chr import chrmgr
AŞAĞIDAKİ KOD BULUNUR ;
Kod:
hpPercentage = max(0, hpPercentage)
ÜSTÜNE EKLENİR ;
Kod:
if app.ENABLE_POISON_GAUGE_EFFECT: if chrmgr.HasAffectByVID(self.GetCharacterVID(), chr.AFFECT_POISON): self.gauge.SetGaugeColor("lime") else: self.gauge.SetGaugeColor("red")
04. uiplayergauge.py açılır (root/) ve dosyanın en başına eklenir:
DİKKAT! Eğer hali hazırda dosyada mevcutsa import app'ı eklemeyin !
Kod:
import app if app.ENABLE_POISON_GAUGE_EFFECT: import chrmgr
AŞAĞIDAKİ KOD BULUNUR ;
Kod:
self.SetPercentage(self.curHP, self.maxHP)
ÜSTÜNE EKLENİR ;
Kod:
if app.ENABLE_POISON_GAUGE_EFFECT: if chrmgr.HasAffectByVID(player.GetMainCharacterIndex(), chr.AFFECT_POISON): self.SetGaugeColor("lime") else: self.SetGaugeColor("red")
05. uitarget.py açılır (root/) ve dosyanın en başına eklenir:
DİKKAT! Eğer hali hazırda dosyada mevcutsa import app'ı eklemeyin !
Kod:
import app if app.ENABLE_POISON_GAUGE_EFFECT: import chrmgr
AŞAĞIDAKİ KODU BULUN ;
Kod:
hpGauge = ui.Gauge() hpGauge.SetParent(self) hpGauge.MakeGauge(130, "red") hpGauge.Hide()
ALTINA EKLEYİN ;
Kod:
if app.ENABLE_POISON_GAUGE_EFFECT: hpPoisonGauge = ui.Gauge() hpPoisonGauge.SetParent(self) hpPoisonGauge.MakeGauge(130, "lime") hpPoisonGauge.SetPosition(175, 17) hpPoisonGauge.SetWindowHorizontalAlignRight() hpPoisonGauge.Hide()
AŞAĞIDAKİ KODU BULUN ;
Kod:
self.hpGauge = None
ALTINA EKLEYİN ;
DİKKAT! self.hpGauge = None Kodundan bu dosyada birden fazla yerde olabilir. Eğer öyleyse hepsinin altına aşağıdaki kodu ekleyin.
Kod:
if app.ENABLE_POISON_GAUGE_EFFECT: self.hpPoisonGauge = None
AŞAĞIDAKİ KODU BULUN ;
Kod:
self.hpGauge = hpGauge
ALTINA EKLEYİN ;
Kod:
if app.ENABLE_POISON_GAUGE_EFFECT: self.hpPoisonGauge = hpPoisonGauge
AŞAĞIDAKİ KODU BULUN ;
Kod:
self.hpGauge.Hide()
ALTINA EKLEYİN ;
Kod:
if app.ENABLE_POISON_GAUGE_EFFECT: self.hpPoisonGauge.Hide()
AŞAĞIDAKİ KODU BULUN ;
Kod:
self.hpGauge.SetPercentage(hpPercentage, 100)
ALTINA EKLEYİN ;
Kod:
if app.ENABLE_POISON_GAUGE_EFFECT: self.hpPoisonGauge.SetPercentage(hpPercentage, 100)
AŞAĞIDAKİ KODU BULUN ;
Kod:
def OnUpdate(self):
ALTINA EKLEYİN ;
Kod:
if app.ENABLE_POISON_GAUGE_EFFECT: if self.hpGauge and self.hpGauge.IsShow(): if chrmgr.HasAffectByVID(self.GetTargetVID(), chr.AFFECT_POISON): self.hpPoisonGauge.Show() else: self.hpPoisonGauge.Hide()
06. uitaskbar.py açılır (root/) ve dosyanın en başına eklenir:
DİKKAT! Eğer hali hazırda dosyada mevcutsa import app'ı eklemeyin !
Kod:
import app if app.ENABLE_POISON_GAUGE_EFFECT: import chr import chrmgr
AŞAĞIDAKİ KODU BULUN ;
Kod:
self.spRecoveryGaugeBar = self.GetChild("SPRecoveryGaugeBar")
ALTINA EKLEYİN ;
Kod:
if app.ENABLE_POISON_GAUGE_EFFECT: self.hpPoisonGauge = self.GetChild("HPPoisonGauge") self.hpPoisonRecoveryGaugeBar = self.GetChild("HPPoisonRecoveryGaugeBar") self.hpPoisonGauge.Hide() self.hpPoisonRecoveryGaugeBar.Hide()
AŞAĞIDAKİ KODU BULUN ;
Kod:
self.spRecoveryGaugeBar = None
ALTINA EKLEYİN ;
Kod:
if app.ENABLE_POISON_GAUGE_EFFECT: self.hpPoisonGauge = None self.hpPoisonRecoveryGaugeBar = None
AŞAĞIDAKİ KODU BULUN ;
Kod:
self.SetHP(curHP, recoveryHP, maxHP)
ALTINA EKLEYİN ;
Kod:
if app.ENABLE_POISON_GAUGE_EFFECT: if chrmgr.HasAffectByVID(player.GetMainCharacterIndex(), chr.AFFECT_POISON): self.hpGauge.Hide() self.hpPoisonGauge.Show() else: self.hpPoisonGauge.Hide() self.hpGauge.Show()
AŞAĞIDAKİ KODU BULUN ;
Kod:
self.hpGauge.SetPercentage(curPoint, maxPoint)
ALTINA EKLEYİN ;
Kod:
if app.ENABLE_POISON_GAUGE_EFFECT: self.hpPoisonGauge.SetPercentage(curPoint, maxPoint)
BU FONKSİYONUN İÇİNDE ;
Kod:
def SetHP(self, curPoint, recoveryPoint, maxPoint):
BUNU BULUN ;
Kod:
if 0 == recoveryPoint:
ALTINA EKLEYİN ;
Kod:
if app.ENABLE_POISON_GAUGE_EFFECT: self.hpPoisonRecoveryGaugeBar.Hide()
AŞAĞIDAKİ KODU BULUN ;
Kod:
self.hpRecoveryGaugeBar.SetSize(newWidth, self.GAUGE_HEIGHT) self.hpRecoveryGaugeBar.Show()
ÜSTÜNE EKLEYİN ;
Kod:
if app.ENABLE_POISON_GAUGE_EFFECT: if chrmgr.HasAffectByVID(player.GetMainCharacterIndex(), chr.AFFECT_POISON): if self.hpRecoveryGaugeBar.IsShow(): self.hpRecoveryGaugeBar.Hide() self.hpPoisonRecoveryGaugeBar.SetSize(newWidth, self.GAUGE_HEIGHT) self.hpPoisonRecoveryGaugeBar.Show() return else: if self.hpPoisonRecoveryGaugeBar.IsShow(): self.hpPoisonRecoveryGaugeBar.Hide()
07. GEREKLİ DDS DOSYALARI ;
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
-
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
///// SRC TARAFI
Kod:
#define ENABLE_POISON_GAUGE_EFFECT
02. PythonApplicationModule.cpp açılır (client\UserInterface) aşağıdaki kod bulunur:
Kod:
#ifdef USE_OPENID PyModule_AddIntConstant(poModule, "USE_OPENID", 1);
ÜSTÜNE EKLEYİN ;
Kod:
#ifdef ENABLE_POISON_GAUGE_EFFECT PyModule_AddIntConstant(poModule, "ENABLE_POISON_GAUGE_EFFECT", 1); #else PyModule_AddIntConstant(poModule, "ENABLE_POISON_GAUGE_EFFECT", 0); #endif
03. PythonCharacterManagerModule.cpp açılır (client\UserInterface) aşağıdaki kod bulunur:
Kod:
void initchrmgr()
ÜSTÜNE EKLEYİN ;
Kod:
#ifdef ENABLE_POISON_GAUGE_EFFECT PyObject * chrmgrHasAffectByVID(PyObject * poSelf, PyObject * poArgs) { int iVID, iAffect; if (!PyTuple_GetInteger(poArgs, 0, &iVID)) return Py_BadArgument(); if (!PyTuple_GetInteger(poArgs, 1, &iAffect)) return Py_BadArgument(); CPythonCharacterManager & rkChrMgr = CPythonCharacterManager::Instance(); CInstanceBase * p = rkChrMgr.CPythonCharacterManager::GetInstancePtr(iVID); if (p) return Py_BuildValue("i", p->IsAffect(iAffect)); return Py_BuildNone(); } #endif
AŞAĞIDAKİ KODU BULUN ;
Kod:
{ NULL, NULL, NULL },
ÜSTÜNE EKLEYİN ;
Kod:
#ifdef ENABLE_POISON_GAUGE_EFFECT { "HasAffectByVID", chrmgrHasAffectByVID, METH_VARARGS }, #endif
Metin2Dev'den Alıntıdır, Anlatım tarafımca Türkçeleştirilmiştir.
GÜNCELLEME
.PY Tarafını eklerken sıkıntı yaşayanlar için ufak bir güncelleme işlemi yaptıktan sonra böyle gözükmeli ;
Yukarıda anlatımını yaptığım bu bölüm ;
Kod:
self.SetHP(curHP, recoveryHP, maxHP)
ALTINA EKLEYİN ;
Kod:
if app.ENABLE_POISON_GAUGE_EFFECT: if chrmgr.HasAffectByVID(player.GetMainCharacterIndex(), chr.AFFECT_POISON): self.hpGauge.Hide() self.hpPoisonGauge.Show() else: self.hpPoisonGauge.Hide() self.hpGauge.Show()
Yani " SetHP() " bölümü eklemeleri yaptıktan sonra aynı aşağıdaki gibi görünmeli ;
NOT : TAB ayarlarına dikkat !!!
Kod:
# uiTaskbar.py içindeki ; # def SetHP(self, curPoint, recoveryPoint, maxPoint): Bölümü if app.ENABLE_POISON_GAUGE_EFFECT: if chrmgr.HasAffectByVID(player.GetMainCharacterIndex(), chr.AFFECT_POISON): if self.hpRecoveryGaugeBar.IsShow(): self.hpRecoveryGaugeBar.Hide() self.hpPoisonRecoveryGaugeBar.SetSize(newWidth, self.GAUGE_HEIGHT) self.hpPoisonRecoveryGaugeBar.Show() else: if self.hpPoisonRecoveryGaugeBar.IsShow(): self.hpPoisonRecoveryGaugeBar.Hide() else: self.hpRecoveryGaugeBar.Show()
Çözüm için Metin2Dev'den ridetpro'ya teşekkürler.
GÜNCELLEME 2
Zehir yememiş olmasına rağmen can barı yeşil görünen metinler için bir fix yapacağız. ( Aynı yöntemi bu sıkıntıyı içeren tüm moblar içinde yapabilirsiniz. )
Anlatımda 8001 kodlu metin taşını baz alarak anlatıyorum hepsi için aynısı geçerli sadece kodu değiştirin.
Mob_proto açılır ve 8001 kodlu metin taşı bulunur ;
En sağda gördüğünüz bölüm EImmuneFlags bölümü bu kısmı şu şekilde düzenleyip kaydedin ;
Kod:
STUN,SLOW,CURSE,TERROR,POISON
Çözüm için Metin2Dev'den Bizzy'e teşekkürler.
Metin2 Oyunlarında Hilelere Karşı Güvenlik: Cheat Engine ve Hareket Hızı Değiştirme
Metin2 özel sunucularında oynayan oyuncuların en çok karşılaştığı sorunlardan birisi, bazı kullanıcıların Cheat Engine veya Lalakerat gibi araçlar aracılığıyla oyun içi hız değerlerini manipüle etmeleridir. Bu manipülasyonlar, özellikle hareket ve saldırı hızı gibi temel mekanikleri etkileyerek adil oyun deneyimini bozar. Bu yazıda, hareket hızı hilesi yaparken bu değerin değişken olarak ayarlanmasının ne anlama geldiğini ve nasıl bir strateji izlenmesi gerektiğini ele alacağız.
Hareket Hızı Nedir ve Neden Önemlidir?
Metin2'de hareket hızı, karakterin harita üzerinde ne kadar hızlı ilerleyebileceğini belirler. Bu hız, karakter sınıfına ve kullanılan itemlere göre değişiklik gösterebilir. Ancak bazı kullanıcılar, Cheat Engine gibi bellek okuma ve düzenleme araçlarıyla bu değeri oyun dışı şekilde artırabilirler. Bu da onlara karşı adil olmayan bir üstünlük sağlar.
Cheat Engine Kullanımı ve Tehlikeleri
Cheat Engine, kullanıcıların oyun içindeki bellek değerlerini okuyup değiştirmesine olanak tanır. Bu sayede, hareket hızı, can, mana gibi değerler elle değiştirilebilir. Özellikle PvP odaklı Metin2 sunucularında bu tür hileler büyük dengesizlik yaratır. Bu nedenle, geliştiricilerin bu tür hilelere karşı önlem alması kritik öneme sahiptir.
Hareket Hızına Değişken Yapmanın Anlamı
Hareket hızına değişken yapı demek, bu değerin sabit değil, oyun içi faktörlere göre dinamik olarak ayarlandığı anlamına gelir. Örneğin, karakterin kullandığı bir item, buff veya yetenek seviyesi gibi. Bu sayede, kullanıcılar Cheat Engine üzerinden sabit bir değer arayamazlar çünkü değer sürekli değişmektedir. Bu, hile yapmayı zorlaştırır ve sunucu güvenliğini artırır.
Sunucu Tarafında Uygulanabilecek Çözümler
Sunucu tarafında hareket hızı kontrolü, C++ tabanlı sistemlerde yapılabilecek en etkili yöntemlerden biridir. Sunucu, her oyuncunun pozisyonunu düzenli olarak kontrol ederek, anormal hareketler tespit edildiğinde oyundan atma veya yasaklama gibi cezalar uygulayabilir. Ayrıca, Python tabanlı GUI sistemlerinde, bu kontroller daha kolay bir şekilde entegre edilebilir.
Metin2 Özel Sunucularında Hile Engelleme Sistemleri
Metin2 özel sunucuları için geliştirilen C++ sistemlerde, hareket hızı gibi değerlerin sunucu tarafından doğrulanması çok önemlidir. Özellikle game server üzerinde yapılan kontrollerle, kullanıcıların Cheat Engine gibi araçlarla manipüle ettikleri değerlerin tekrar normal seviyelere çekilmesi sağlanabilir. Bu sayede hem PvP dengesi korunur hem de adil oyun ortamı sağlanır.
Martysama ve Metin2 Geliştirme Araçları
Metin2 geliştiricileri için Martysama gibi platformlar, kaynak kod paylaşımı ve güvenlik sistemleri konusunda önemli kaynaklar sunar. Geliştiriciler, bu tür platformlardan faydalanarak, client src, auth, db gibi sistemleri güncelleyip, hilelere karşı daha güçlü çözümler geliştirebilirler.
Sonuç
Metin2 özel sunucularında hareket hızı gibi değerlerin değişken tutulması, Cheat Engine gibi araçlarla yapılan hilelere karşı alınabilecek etkili önlemlerden biridir. Bu tarz güvenlik önlemleri, PvP dengesini korumak ve adil bir oyun ortamı sağlamak açısından kritik öneme sahiptir.
Security Against Cheating in Metin2 Games: Cheat Engine and Movement Speed Hacking
One of the most common issues encountered by players in Metin2 private servers is users manipulating in-game speed values using tools like Cheat Engine or Lalakerat. These manipulations affect fundamental mechanics such as movement and attack speed, disrupting fair gameplay. In this article, we will discuss what it means to make movement speed a variable value during cheating attempts and how developers should approach this issue strategically.
What Is Movement Speed and Why Does It Matter?
In Metin2, movement speed determines how fast a character can move across the map. This speed may vary depending on the character class and equipped items. However, some users increase this value beyond normal limits using memory reading and editing tools like Cheat Engine, granting them an unfair advantage over others.
Usage of Cheat Engine and Its Risks
Cheat Engine allows users to read and modify in-game memory values. As a result, values such as movement speed, health, and mana can be manually altered. In PvP-oriented Metin2 servers, such cheats create significant imbalances. Therefore, it is critical for developers to implement measures against these types of hacks.
Making Movement Speed Variable: What It Means
Making movement speed variable means that the value is not fixed but dynamically adjusted based on in-game factors such as equipped items, buffs, or skill levels. As a result, users cannot search for a static value through Cheat Engine because the value constantly changes. This makes cheating more difficult and enhances server security.
Server-Side Solutions
Server-side movement speed controls are among the most effective methods implemented in C++-based systems. The server can regularly check each player's position and apply penalties such as kicking or banning if abnormal movements are detected. Additionally, GUI systems based on Python can integrate these checks more easily.
Anti-Cheat Systems in Private Metin2 Servers
For private Metin2 servers, validating values such as movement speed on the server side is crucial within C++ systems. By performing checks on the game server, values manipulated by users via tools like Cheat Engine can be reset to normal levels. This preserves PvP balance and ensures a fair gaming environment.
Martysama and Metin2 Development Tools
Platforms like Martysama provide important resources for Metin2 developers, including source code sharing and security systems. Developers can use these platforms to update systems such as client src, auth, and db, and develop stronger anti-cheat solutions.
Conclusion
Keeping values such as movement speed as variables in private Metin2 servers is an effective measure against hacks made with tools like Cheat Engine. Such security measures are critical for maintaining PvP balance and ensuring a fair gaming environment.
