-[OFİCALL]-Herkezin aradığı ve cogu kişinin parayla sattıgı Tr tipi Karakter alanı.

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

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
İnsanlar yapamadıkları seyler için Yorum yaparlar yaparlarsaki umursamazlar bile ama bir hata var ise o konu uzerinde tartısırlar ve kendilerini ustun gorurler kısacası egolarını tatmin ederler turkmmo kullanıcılarının %80'ni bunu oluşturuyor insanlar nankordur unutmayın bu zaman kadar bu forumdan cok yayarlandım her sorunumda yardım edenlerde cok oldu ama hiç nankorluk etmedim.
Arşivimdeki dosyaları paylaşıyorum Metin2'yi artık bırakıyorum arada bir paylaşımda bulunucam.



Evet konumuza gelelim. Çogu kişi bunu parayla satıyor ve prim yapıyor aslında zaten bu ilk cıktıgından beri warez olan birseydi. Biraz Phton bilgisi olanlar kolaylıkla yapıcana inanıyorum. Konuyu C++ Bolumune mi yoksa burayamı acsam bilemedim yoneticiler uygun gorurlerse tasıyabilirler.
Uyarı : 40k Sürümlerinde Çalışmaktadır. 34k sürümü denemedim ancak 40k da calıstıgına eminim.

Bazı Arkadaslar Yapamıslar Calısmıyor diye yorum yapıyorlar ve konu baltalanıyor buyrun izleyerek yapın.

Videoyu izleyemiyorsanız eger hala daha yukleme asamasındadır.



Anlatıma Geçelim.

İlk olarak root'la başlıyoruz.

Continfo açılır:

Atarılır: PVPMODE_PROTECTED_LEVEL

Hemen Altına Yapıstırılır.

Kod:
ACCOUNT_NAME = "NoName" WOLF_MAN = "DISABLED"    # ENABLED/DISABLED WOLF_WOMEN = "DISABLED"    # ENABLED/DISABLED


İntrologin açılır:
Arat: self.PopupDisplayMessage(localeInfo.LOGIN_CONNECT_ SUCCESS)

Altına yapıstır.
Kod:
constInfo.ACCOUNT_NAME = str(self.idEditLine.GetText())

ui.py açılır.

Arat: elif Type == "thinboard":

Kod blogu bitişine yapıştır:
Kod:
elif Type == "thinboard_gold":                 parent.Children[Index] = ThinBoardGold()                 parent.Children[Index].SetParent(parent)                 self.LoadElementThinBoardGold(parent.Children[Index], ElementValue, parent)             elif Type == "thinboard_circle":                 parent.Children[Index] = ThinBoardCircle()                 parent.Children[Index].SetParent(parent)                 self.LoadElementThinBoardCircle(parent.Children[Index], ElementValue, parent)

Arat: def LoadElementThinBoard(self, window, value, parentWindow):

Kod blogu bitişine yapıştır:

Kod:
def LoadElementThinBoardGold(self, window, value, parentWindow):         if FALSE == self.CheckKeyList(value["name"], value, self.BOARD_KEY_LIST):             return FALSE                 window.SetSize(int(value["width"]), int(value["height"]))         self.LoadDefaultData(window, value, parentWindow)         return TRUE     def LoadElementThinBoardCircle(self, window, value, parentWindow):         if FALSE == self.CheckKeyList(value["name"], value, self.BOARD_KEY_LIST):             return FALSE                 window.SetSize(int(value["width"]), int(value["height"]))         self.LoadDefaultData(window, value, parentWindow)         return TRUE

Arat: class ThinBoard(Window):

Kod blogu bitişine yapıştır:

Kod:
class ThinBoardGold(Window):     CORNER_WIDTH = 16     CORNER_HEIGHT = 16     LINE_WIDTH = 16     LINE_HEIGHT = 16     BOARD_COLOR = grp.GenerateColor(0.0, 0.0, 0.0, 0.51)     LT = 0     LB = 1     RT = 2     RB = 3     L = 0     R = 1     T = 2     B = 3     def __init__(self, layer = "UI"):         Window.__init__(self, layer)         CornerFileNames = [ "d:/ymir work/ui/pattern/thinboardgold/ThinBoard_Corner_"+dir+".tga" for dir in ["LeftTop_gold", "LeftBottom_gold","RightTop_gold", "RightBottom_gold"]]         LineFileNames = [ "d:/ymir work/ui/pattern/thinboardgold/ThinBoard_Line_"+dir+".tga" for dir in ["Left_gold", "Right_gold", "Top_gold", "Bottom_gold"]]                 self.Corners = [*]         for fileName in CornerFileNames:             Corner = ExpandedImageBox()             Corner.AddFlag("attach")             Corner.AddFlag("not_pick")             Corner.LoadImage(fileName)             Corner.SetParent(self)             Corner.SetPosition(0, 0)             Corner.Show()             self.Corners.append(Corner)         self.Lines = [*]         for fileName in LineFileNames:             Line = ExpandedImageBox()             Line.AddFlag("attach")             Line.AddFlag("not_pick")             Line.LoadImage(fileName)             Line.SetParent(self)             Line.SetPosition(0, 0)             Line.Show()             self.Lines.append(Line)         Base = ExpandedImageBox()         Base.SetParent(self)         Base.AddFlag("attach")         Base.AddFlag("not_pick")         Base.LoadImage("d:/ymir work/ui/pattern/thinboardgold/thinboard_bg_gold.tga")         Base.SetPosition(self.CORNER_WIDTH, self.CORNER_HEIGHT)         Base.Show()         self.Base = Base         self.Lines[self.L].SetPosition(0, self.CORNER_HEIGHT)         self.Lines[self.T].SetPosition(self.CORNER_WIDTH, 0)     def __del__(self):         Window.__del__(self)     def SetSize(self, width, height):         width = max(self.CORNER_WIDTH*2, width)         height = max(self.CORNER_HEIGHT*2, height)         Window.SetSize(self, width, height)         self.Corners[self.LB].SetPosition(0, height - self.CORNER_HEIGHT)         self.Corners[self.RT].SetPosition(width - self.CORNER_WIDTH, 0)         self.Corners[self.RB].SetPosition(width - self.CORNER_WIDTH, height - self.CORNER_HEIGHT)         self.Lines[self.R].SetPosition(width - self.CORNER_WIDTH, self.CORNER_HEIGHT)         self.Lines[self.B].SetPosition(self.CORNER_HEIGHT, height - self.CORNER_HEIGHT)         verticalShowingPercentage = float((height - self.CORNER_HEIGHT*2) - self.LINE_HEIGHT) / self.LINE_HEIGHT         horizontalShowingPercentage = float((width - self.CORNER_WIDTH*2) - self.LINE_WIDTH) / self.LINE_WIDTH         self.Lines[self.L].SetRenderingRect(0, 0, 0, verticalShowingPercentage)         self.Lines[self.R].SetRenderingRect(0, 0, 0, verticalShowingPercentage)         self.Lines[self.T].SetRenderingRect(0, 0, horizontalShowingPercentage, 0)         self.Lines[self.B].SetRenderingRect(0, 0, horizontalShowingPercentage, 0)         if self.Base:             self.Base.SetRenderingRect(0, 0, horizontalShowingPercentage, verticalShowingPercentage)     def ShowInternal(self):         self.Base.Show()         for wnd in self.Lines:             wnd.Show()         for wnd in self.Corners:             wnd.Show()     def HideInternal(self):         self.Base.Hide()         for wnd in self.Lines:             wnd.Hide()         for wnd in self.Corners:             wnd.Hide() class ThinBoardCircle(Window):     CORNER_WIDTH = 4     CORNER_HEIGHT = 4     LINE_WIDTH = 4     LINE_HEIGHT = 4     BOARD_COLOR = grp.GenerateColor(255.0, 255.0, 255.0, 1.0)     LT = 0     LB = 1     RT = 2     RB = 3     L = 0     R = 1     T = 2     B = 3     def __init__(self, layer = "UI"):         Window.__init__(self, layer)         CornerFileNames = [ "d:/ymir work/ui/pattern/thinboardcircle/ThinBoard_Corner_"+dir+".tga" for dir in ["LeftTop_circle","LeftBottom_circle","RightTop_circle","RightBottom_circle"] ]         LineFileNames = [ "d:/ymir work/ui/pattern/thinboardcircle/ThinBoard_Line_"+dir+".tga" for dir in ["Left_circle","Right_circle","Top_circle","Bottom_circle"] ]         self.Corners = [*]         for fileName in CornerFileNames:             Corner = ExpandedImageBox()             Corner.AddFlag("attach")             Corner.AddFlag("not_pick")             Corner.LoadImage(fileName)             Corner.SetParent(self)             Corner.SetPosition(0, 0)             Corner.Show()             self.Corners.append(Corner)         self.Lines = [*]         for fileName in LineFileNames:             Line = ExpandedImageBox()             Line.AddFlag("attach")             Line.AddFlag("not_pick")             Line.LoadImage(fileName)             Line.SetParent(self)             Line.SetPosition(0, 0)             Line.Show()             self.Lines.append(Line)         Base = Bar()         Base.SetParent(self)         Base.AddFlag("attach")         Base.AddFlag("not_pick")         Base.SetPosition(self.CORNER_WIDTH, self.CORNER_HEIGHT)         Base.SetColor(self.BOARD_COLOR)         Base.Show()         self.Base = Base         self.Lines[self.L].SetPosition(0, self.CORNER_HEIGHT)         self.Lines[self.T].SetPosition(self.CORNER_WIDTH, 0)     def __del__(self):         Window.__del__(self)     def SetSize(self, width, height):         width = max(self.CORNER_WIDTH*2, width)         height = max(self.CORNER_HEIGHT*2, height)         Window.SetSize(self, width, height)         self.Corners[self.LB].SetPosition(0, height - self.CORNER_HEIGHT)         self.Corners[self.RT].SetPosition(width - self.CORNER_WIDTH, 0)         self.Corners[self.RB].SetPosition(width - self.CORNER_WIDTH, height - self.CORNER_HEIGHT)         self.Lines[self.R].SetPosition(width - self.CORNER_WIDTH, self.CORNER_HEIGHT)         self.Lines[self.B].SetPosition(self.CORNER_HEIGHT, height - self.CORNER_HEIGHT)         verticalShowingPercentage = float((height - self.CORNER_HEIGHT*2) - self.LINE_HEIGHT) / self.LINE_HEIGHT         horizontalShowingPercentage = float((width - self.CORNER_WIDTH*2) - self.LINE_WIDTH) / self.LINE_WIDTH         self.Lines[self.L].SetRenderingRect(0, 0, 0, verticalShowingPercentage)         self.Lines[self.R].SetRenderingRect(0, 0, 0, verticalShowingPercentage)         self.Lines[self.T].SetRenderingRect(0, 0, horizontalShowingPercentage, 0)         self.Lines[self.B].SetRenderingRect(0, 0, horizontalShowingPercentage, 0)         self.Base.SetSize(width - self.CORNER_WIDTH*2, height - self.CORNER_HEIGHT*2)     def ShowInternal(self):         self.Base.Show()         for wnd in self.Lines:             wnd.Show()         for wnd in self.Corners:             wnd.Show()     def HideInternal(self):         self.Base.Hide()         for wnd in self.Lines:             wnd.Hide()         for wnd in self.Corners:             wnd.Hide()

uiscriptlocale.py açılır:

Arat: JOBDESC_SHAMAN_PATH = "%s/jobdesc_shaman.txt" % (name)

Hemen altına yapıstır:
Kod:
JOBDESC_WARRIOR_PATH_OLD = "%s/jobdesc_warrior_old.txt" % (name)     JOBDESC_ASSASSIN_PATH_OLD = "%s/jobdesc_assassin_old.txt" % (name)     JOBDESC_SURA_PATH_OLD = "%s/jobdesc_sura_old.txt" % (name)     JOBDESC_SHAMAN_PATH_OLD = "%s/jobdesc_shaman_old.txt" % (name)     JOBDESC_WOLF_PATH_OLD = "%s/jobdesc_wolf_old.txt" % (name)


uitooltip.py açılır:

Arat: def AutoAppendTextLine(self, text, color = FONT_COLOR, centerAlign = TRUE):

Kod Bloğu Bitişine Yapıştır.

Kod:
def AutoAppendNewTextLine(self, text, color = FONT_COLOR, centerAlign = True):         textLine = ui.TextLine()         textLine.SetParent(self)         textLine.SetFontName(self.defFontName)         textLine.SetPackedFontColor(color)         textLine.SetText(text)         textLine.SetOutline()         textLine.SetFeather(FALSE)         textLine.Show()         textLine.SetPosition(15, self.toolTipHeight)                 self.childrenList.append(textLine)         (textWidth, textHeight) = textLine.GetTextSize()         textWidth += 30         textHeight += 10         if self.toolTipWidth < textWidth:             self.toolTipWidth = textWidth                 self.toolTipHeight += textHeight         self.ResizeToolTipText(textWidth, self.toolTipHeight)         return textLine

Arat: def ResizeToolTip(self):

Kod Bloğu Bitişine Yapıştır.

Kod:
def ResizeToolTipText(self, x, y):         self.SetSize(x, y)

Root'la işimiz bitti locale'yi açın.

locale_interface.txt aç

En alta yapıştır.
Kod:
SELECT_NO_GUILD    Lonca Yok SELECT_YES_GUILD    Lonca adı: %s SELECT_PLAYTIME    Oyun Süresi %s

locale_game.txt aç

en alta yapıştır

Kod:
EMPIRE_SELECT    Seç EMPIRE_SELECT_MODE    Krallık seçimi CHARACTER_CREATE_MODE    Karakter oluştur CHARACTER_SELECT_MODE    Karakter seç CHARACTER_CREATE_MALE    Erkek CHARACTER_CREATE_FEMALE    Kadın CHARACTER_CREATE_APPEARANCE1    Görünüm 1 CHARACTER_CREATE_APPEARANCE2    Görünüm 2 INTRO_SELECT_LEVEL    Lv. %d

Ve artık Alttaki dosyayı indirip root ve localenin içine atın ve paketleyin.

-metin2_patch_new_select_ui dosyalarını packın içine atın ve indexe ekleyin.



DOSYAUPLOAD İLE İNDİR :



Enter Tusunu Aktif Etmek isteyenler İntroselect.py'nin en altına bunu eklerleyin.


Yardım için Teşekkürler.

Kanıt:

21klgN.png

Ykl9Bj.png

D2RAMl.png

E8q0Yq.png


Lütfen Teşekkur yorumlarınızı eksik etmeyin. :)


Metin2 TR Tipi Karakter Alanı Sistemi: Yetenekli Geliştiriciler İçin Kritik Bilgi

Metin2 özel sunucularında geliştirme yapan birçok kişi, kullanıcıların karakterlerini özelleştirebilmesi için TR tipi karakter alanları oluşturmak istemektedir. Bu tür alanlar, genellikle Martysama veya başka C++ tabanlı sistemlerle entegre edilerek sunucuda daha yüksek seviye kontrol imkanı sunar. Bu yazıda, TR tipi karakter alanlarının ne olduğu, nasıl çalıştığı ve neden bazı geliştiriciler tarafından ücretli olarak satıldığına dair detaylı bilgiler sunulacaktır.

TR Tipi Karakter Alanı Nedir?
TR tipi karakter alanı, Metin2 oyununda oyuncuların karakter verilerinin belirli bir şifreleme ya da yapılandırma yöntemiyle saklandığı bir alandır. Bu alan, genellikle game server tarafında geliştirilir ve karakter adı, yetenekler, ekipman gibi verileri içerir. TR tipi ifadesi, bu yapının Türkiye'de özel sunucular arasında yaygınlaşmış bir yöntemle geliştirildiğini gösterir.

Neden Parayla Satılıyor?
TR tipi karakter alanı oluşturmak, C++ bilgisi gerektiren karmaşık bir işlemdir. Oyuncuların bu alanı doğrudan kendi sunucularına entegre edebilmeleri için hem client hem de server tarafında değişiklik yapılması gerekir. Bu yüzden, bu işlemi yapabilen kişiler, uzun saatler harcayarak kodları yazdığı için bu hizmeti parayla sunmaktadır. Py Root ve UIScript gibi araçlarla entegrasyonu da gerektirdiği için bu sistem oldukça değerlidir.

Geliştirme Sürecinde Nelere Dikkat Edilmeli?
TR tipi karakter alanı geliştirirken öncelikle auth ve game sunucuları arasında güvenli veri aktarımı sağlanmalıdır. Ayrıca, DB Core üzerinden doğru şekilde veri tabanı işlemleri yapılmalıdır. Geliştiriciler, Python GUI arayüzleriyle bu verileri daha kolay yönetebilirler. Bu tür sistemlerde hata ayıklama süreci oldukça önemlidir. Kodların derlenmesi (compile) sırasında oluşabilecek hatalar, sunucunun aksamasına neden olabilir.

Yanlış Uygulamalar Ne Zararlar Verebilir?
Doğru yapılmayan bir TR tipi karakter alanı, sunucuda ciddi güvenlik açıklarına yol açabilir. Örneğin, karakter adı doğrulama eksikse, kullanıcılar sahte karakterler oluşturabilir. Bu da sunucunun PvP sisteminde adaletsizliklara sebep olabilir. Ayrıca, pack dosyalarında eksiklik veya hatalar varsa, sunucu çökebilir.

Metin2 Lobby ile Entegrasyon
Metin2Lobby, Metin2 özel sunucu geliştiricilerine yönelik kapsamlı kaynaklar sağlar. Bu platformda bulunan C++ kaynak kodlar, Python sistemler ve server SRC örnekleri sayesinde TR tipi karakter alanları daha hızlı ve güvenli şekilde geliştirilebilir. Sitenin sunduğu game core ve db core yapıları da geliştiricilere büyük kolaylık sağlar.

Sonuç
TR tipi karakter alanı, Metin2 özel sunucu geliştiricileri için önemli bir konudur. Doğru uygulandığında, oyuncuların deneyimini ciddi anlamda artırabilir. Ancak bu alanda uzmanlaşmak, hem teknik bilgi hem de sabır gerektirir. Bu nedenle, birçok kişi bu hizmeti profesyonel geliştiricilerden satın almayı tercih eder. Metin2Lobby gibi platformlar, bu süreçte destek alınabilecek ideal mecralardır.


Metin2 TR Type Character Area System: Critical Information for Skilled Developers

Many individuals developing on Metin2 private servers want to create TR type character areas that allow players to customize their characters. These areas are typically integrated into the server using systems like Martysama or other C++-based tools, allowing higher-level control within the server. In this article, we will provide detailed information about what TR type character areas are, how they work, and why some developers sell them for money.

What is a TR Type Character Area?
A TR type character area is a specific field where player character data is stored using a certain encryption or configuration method in Metin2. This area is usually developed on the game server side and contains character names, skills, equipment, and more. The term 'TR type' indicates that this structure has been developed using methods common among private servers in Turkey.

Why Are They Sold for Money?
Creating a TR type character area requires advanced knowledge of C++. Players must modify both the client and server sides to integrate this area into their own servers. Therefore, those who can implement this process often charge money for their service due to the long hours spent coding. Integration with tools such as Py Root and UIScript also increases the complexity and value of this system.

What Should Be Considered During Development?
When developing a TR type character area, secure data transfer between the auth and game servers must be ensured. Additionally, database operations must be performed correctly via the DB Core. Developers may use Python GUI interfaces to manage these data more easily. Debugging during the process is crucial. Compilation errors (compile) may cause the server to crash.

What Damages Can Incorrect Implementations Cause?
An incorrectly implemented TR type character area can lead to serious security vulnerabilities in the server. For example, if character name validation is missing, users might create fake characters. This could result in unfairness within the server's PvP system. Additionally, missing or incorrect pack files may cause server crashes.

Integration with Metin2 Lobby
Metin2Lobby provides comprehensive resources for Metin2 private server developers. Thanks to C++ source codes, Python systems, and server SRC examples available on the site, TR type character areas can be developed faster and more securely. The game core and db core structures provided by the site also offer significant convenience to developers.

Conclusion
TR type character areas are important for Metin2 private server developers. When properly implemented, they can significantly enhance the player experience. However, expertise in this area requires both technical knowledge and patience. Therefore, many people prefer to purchase this service from professional developers. Platforms like Metin2Lobby are ideal places to seek support during this process.
 

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

Benzer konular

Geri
Üst Alt