Merhaba, iyi forumlar,
Sistemi kısaca anlatmak gerekirse, oyuncu yeni bir karakter oluştururken isterse otomatik olarak isim oluşturabilecek. Sistemle ilgili detaylı videoyu ekliyorum, oradan izleyebilirsiniz.
Ek olarak, konu kısa olduğu ve linkin zamanla bozulma ihtimali bulunduğu için kodları doğrudan forum konusuna ekleyeceğim. Böylece daha kalıcı olur.
ilk olarak : root/introcreate.py açılır.
2. olarak : uiscript/createcharacterwindow.py açılır. Eğer Eski Tarz Karakter Oluşturma Kullanıyorsanız Video'daki gibi direk verdim kodları komple degiştirin
Farklı Bir Karakter Ekranı Kullanıysanız uygun bir yere bu butonu ekleyin
4. olarak names_list.py oluştur root klasörü içine sonra alttakileri ekle !
SİSTEM VİDEOSU
PYTHON ile Otomatik Karakter İsmi Oluşturma Sistemi
Python, Metin2 özel sunucularında geliştirme yaparken oldukça kullanışlı bir araçtır. Özellikle otomasyon süreçlerinde, örneğin kullanıcı karakterlerine otomatik olarak rastgele isimler atamak istiyorsanız, Python kullanmak hem hızlı hem de esnek çözümler sunar. Bu yazıda, Metin2 özel sunucularında kullanılmak üzere Python ile nasıl otomatik karakter ismi oluşturma sistemi geliştirilebileceğini anlatacağız.
Karakter İsimleri Neden Önemlidir?
Metin2 gibi MMORPG oyunlarında karakter isimleri, oyuncuların kimliğini yansıtır. Aynı zamanda, benzersiz isimlerin korunması sunucu yönetimi açısından kritiktir. Ancak bazı durumlarda, test sunucularında çok sayıda karakter oluşturmak veya bot karakterler için isim atamak gerekebilir. Bu gibi durumlarda, rastgele ancak anlamlı karakter isimleri oluşturmak büyük kolaylık sağlar.
Python ile Rastgele İsim Oluşturma
Python, string işlemleri ve rastgele veri üretimi konusunda güçlü bir dil olduğu için, karakter isimleri oluşturmak oldukça kolaydır. Aşağıda basit bir örnek verilmiştir:
Örnek Kod:
Kod Açıklaması:
Bu Python kodu, belirlenen heceleri birleştirerek rastgele karakter isimleri oluşturur. Basitçe çalışır ve Metin2 özel sunucularında bot karakterler için idealdir. Ayrıca, bu yapıyı genişleterek veritabanı entegrasyonu, isim tekrar kontrolü gibi gelişmiş sistemlere de bağlanabilir.
Metin2 Sunucusuyla Entegrasyon
Metin2 sunucularında karakter isimleri genellikle auth veya game sunucularındaki veritabanına kaydedilir. Python ile oluşturulan isimler doğrudan db bağlantısı kurularak karakter oluşturulma sürecine entegre edilebilir. Örneğin, bir Py GUI arayüzü ile geliştirici, bot karakterler için isim listesi oluşturabilir ve bunları doğrudan sunucuya gönderebilir.
GUI ile Kullanıcı Dostu Arayüz
Python'da tkinter veya PyQt gibi modüllerle grafiksel arayüzler (GUI) oluşturulabilir. Böylece, karakter isimlerini oluşturmak için daha kullanıcı dostu bir sistem kurulabilir. Geliştiriciler, bu sayede birden fazla karakter için isimleri otomatik olarak oluşturabilir ve listeyi dışa aktarabilirler.
Sonuç
Python ile otomatik karakter ismi oluşturma sistemi, Metin2 özel sunucu geliştiricileri için zaman kazandıran ve işleri kolaylaştıran bir yöntemdir. Hem test hem de üretim sunucularında kullanılabilir. Bu sistem, doğru şekilde entegre edildiğinde, karakter yönetimi süreçlerini optimize eder.
Automated Character Name Generation with PYTHON
Python is a highly useful tool when developing private servers for Metin2. Especially in automation processes, such as assigning random names to user characters automatically, Python offers both fast and flexible solutions. In this article, we will explain how to develop an automated character name generation system using Python for Metin2 private servers.
Why Are Character Names Important?
In MMORPG games like Metin2, character names reflect the identity of players. Additionally, ensuring unique names is critical for server management. However, in some cases, creating many characters on test servers or assigning names to bot characters may be necessary. In such situations, generating random but meaningful character names can provide great convenience.
Generating Random Names with Python
Since Python is strong in string operations and random data generation, generating character names is quite easy. Below is a simple example:
Sample Code:
Code Explanation:
This Python code generates random character names by combining predefined syllables. It works simply and is ideal for bot characters on Metin2 private servers. Furthermore, this structure can be extended to integrate with databases, check for name duplicates, and more advanced systems.
Integration with Metin2 Server
Character names in Metin2 servers are usually stored in the database of the auth or game server. Names generated via Python can be integrated directly into the character creation process by establishing direct db connections. For example, developers can use a Py GUI interface to create lists of names for bot characters and send them directly to the server.
User-Friendly Interface with GUI
Graphical interfaces (GUI) can be created in Python using modules like tkinter or PyQt. This way, a more user-friendly system can be established for generating character names. Developers can then automatically generate names for multiple characters and export the list.
Conclusion
An automated character name generation system with Python is a time-saving and efficient method for Metin2 private server developers. It can be used on both test and production servers. When properly integrated, this system optimizes character management processes.
Sistemi kısaca anlatmak gerekirse, oyuncu yeni bir karakter oluştururken isterse otomatik olarak isim oluşturabilecek. Sistemle ilgili detaylı videoyu ekliyorum, oradan izleyebilirsiniz.
Ek olarak, konu kısa olduğu ve linkin zamanla bozulma ihtimali bulunduğu için kodları doğrudan forum konusuna ekleyeceğim. Böylece daha kalıcı olur.
ilk olarak : root/introcreate.py açılır.
Kod:
#aratılır self.btnCreate = getChild("create_button") altına ekle ! self.btnGenerateName = getChild("generate_name_button") aratılır self.btnCreate.SetEvent(ui.__mem_func__(self.CreateCharacter)) altına ekle ! self.btnGenerateName.SetEvent(ui.__mem_func__(self.__GenerateRandomName)) ARA def CancelCreate(self): ÜSTÜNE EKLE def __GenerateRandomName(self): import random import names_list try: # names_list.py dosyasından NAMES_LIST değişkenini import ediyoruz. from names_list import NAMES_LIST except ImportError: print("names_list.py dosyası bulunamadı veya NAMES_LIST tanımlı değil.") return if NAMES_LIST: random_name = random.choice(NAMES_LIST) self.editCharacterName.SetText(random_name) else: print("NAMES_LIST içinde isim bulunamadı.") self.editCharacterName.SetFocus() self.editCharacterName.Enable()
2. olarak : uiscript/createcharacterwindow.py açılır. Eğer Eski Tarz Karakter Oluşturma Kullanıyorsanız Video'daki gibi direk verdim kodları komple degiştirin
Kod:
import uiScriptLocale ROOT_PATH = "d:/ymir work/ui/public/" LOCALE_PATH = uiScriptLocale.SELECT_PATH BOARD_X = SCREEN_WIDTH * (65) / 800 BOARD_Y = SCREEN_HEIGHT * (215) / 600 PLUS_BUTTON_WIDTH = 20 TEMPORARY_HEIGHT = 24 + 5 window = { "name" : "CreateCharacterWindow", "x" : 0, "y" : 0, "width" : SCREEN_WIDTH, "height" : SCREEN_HEIGHT, "children" : ( ## Board { "name" : "Bac##ro##d", "t##e" : "expanded_image", "x" : 0, "y" : 0, "x_scale" : float(SCREEN_WIDTH) / 1024.0, "y_scale" : float(SCREEN_HEIGHT) / 768.0, "image" : uiScriptLocale.LOCALE_UISCRIPT_PATH + "select.sub", }, ## Name { "name" : "name##ar##or", ## "type" : "image", "x##: BOARD_X - 27, "y" : BOARD_Y - 174 + 25, "image" : LOCALE_PATH+"name_warrior.sub", }, { "name" : "name_assassin", "type" : "image", "x" : BOARD_X - 27, "y" : BOARD_Y - 174 + 25, "image" : LOCALE_PATH+"name_assassin.sub", }, { "name" : "name_sura", "type" : "image", "x" : BOARD_X - 27, "y" : BOARD_Y - 174 + 25, "image" : LOCALE_PATH+"name_sura.sub", }, { "name" : "name_shaman", "type" : "image", "x" : BOARD_X - 27, "y" : BOARD_Y - 174 + 25, "image" : LOCALE_PATH+"name_shaman.sub", }, ## Character Board { "na##" ##"chara##er_board", "type" : "t[HASH=323797]##"chara[/HASH]1BOARD_X, "y" : BOARD_Y, "width" : 208, "height" : 320 + TEMPORARY_HEIGHT, "children" : ( { "name" : "text_board", "type" : "bar", "x" : 8, "y" : 10, "width" : 189, "height" : 122, "children" : ( { "name" : "prev_button", "type" : "button", "x" : 95, "y" : 95, "text" : uiScriptLocale.CREATE_PREV, "default_image" : ROOT_PATH + "Small_Button_01.sub", "over_image" : ROOT_PATH + "Small_Button_02.sub", "down_image" : ROOT_PATH + "Small_Button_03.sub", }, { "name" : "next_button", "type" : "button", "x" : 140, "y" : 95, "text" : uiScriptLocale.CREATE_NEXT, "default_image" : ROOT_PATH + "Small_Button_01.sub", "over_image" : ROOT_PATH + "Small_Button_02.sub", "down_image" : ROOT_PATH + "Small_Button_03.sub", }, { "name" : "right_line", "type" : "line", "x" : 189-1, "y" : -1, "width" : 0, "height" : 122, "color" : 0xffAAA6A1, }, { "name" : "bottom_line", "type" : "line", "x" : 0, "y" : 122-1, "width" : 189, "height" : 0, "color" : 0xffAAA6A1, }, { "name" : "left_line", "type" : "line", "x" : 0, "y" : 0, "width" : 0, "height" : 122-1, "color" : 0xff2A2521, }, { "name" : "top_line", "type" : "line", "x" : 0, "y" : 0, "width" : 189, "height" : 0, "color" : 0xff2A2521, }, ), }, { "name" : "hth", "type" : "text", "x" : 15, "y" : 138, "text" : uiScriptLocale.CREATE_HP, "children" : ( { "name" : "hth_gauge", "type" : "gauge", "x" : 30, "y" : 4, "width" : 100 + PLUS_BUTTON_WIDTH, "color" : "red", }, { "name" : "hth_slot", "type" : "slotbar", "x" : 137 + PLUS_BUTTON_WIDTH, "y" : -1, "width" : 24, "height" : 16, "children" : ( { "name" : "hth_value", "type" : "text", "x" : 0, "y" : 1, "all_align" : "center", "text" : "99", }, ), }, ), }, { "name" : "int", "type" : "text", "x" : 15, "y" : 157, "text" : uiScriptLocale.CREATE_SP, "children" : ( { "name" : "int_gauge", "type" : "gauge", "x" : 30, "y" : 4, "width" : 100 + PLUS_BUTTON_WIDTH, "color" : "pink", }, { "name" : "int_slot", "type" : "slotbar", "x" : 137 + PLUS_BUTTON_WIDTH, "y" : -1, "width" : 24, "height" : 16, "children" : ( { "name" : "int_value", "type" : "text", "x" : 0, "y" : 1, "all_align" : "center", "text" : "99", }, ), }, ), }, { "name" : "str", "type" : "text", "x" : 15, "y" : 176, "text" : uiScriptLocale.CREATE_ATT_GRADE, "children" : ( { "name" : "str_gauge", "type" : "gauge", "x" : 30, "y" : 4, "width" : 100 + PLUS_BUTTON_WIDTH, "color" : "purple", }, { "name" : "str_slot", "type" : "slotbar", "x" : 137 + PLUS_BUTTON_WIDTH, "y" : -1, "width" : 24, "height" : 16, "children" : ( { "name" : "str_value", "type" : "text", "x" : 0, "y" : 1, "all_align" : "center", "text" : "99", }, ), }, ), }, { "name" : "dex", "type" : "text", "x" : 15, "y" : 195, "text" : uiScriptLocale.CREATE_DEX_GRADE, "children" : ( { "name" : "dex_gauge", "type" : "gauge", "x" : 30, "y" : 4, "width" : 100 + PLUS_BUTTON_WIDTH, "color" : "blue", }, { "name" : "dex_slot", "type" : "slotbar", "x" : 137 + PLUS_BUTTON_WIDTH, "y" : -1, "width" : 24, "height" : 16, "children" : ( { "name" : "dex_value", "type" : "text", "x" : 0, "y" : 1, "all_align" : "center", "text" : "99", }, ), }, ), }, { "name" : "hth_button", "type" : "button", "x" : 184, "y" : 139, "default_image" : "d:/ymir work/ui/game/windows/btn_plus_up.sub", "over_image" : "d:/ymir work/ui/game/windows/btn_plus_over.sub", "down_image" : "d:/ymir work/ui/game/windows/btn_plus_down.sub", }, { "name" : "int_button", "type" : "button", "x" : 184, "y" : 158, "default_image" : "d:/ymir work/ui/game/windows/btn_plus_up.sub", "over_image" : "d:/ymir work/ui/game/windows/btn_plus_over.sub", "down_image" : "d:/ymir work/ui/game/windows/btn_plus_down.sub", }, { "name" : "str_button", "type" : "button", "x" : 184, "y" : 177, "default_image" : "d:/ymir work/ui/game/windows/btn_plus_up.sub", "over_image" : "d:/ymir work/ui/game/windows/btn_plus_over.sub", "down_image" : "d:/ymir work/ui/game/windows/btn_plus_down.sub", }, { "name" : "dex_button", "type" : "button", "x" : 184, "y" : 196, "default_image" : "d:/ymir work/ui/game/windows/btn_plus_up.sub", "over_image" : "d:/ymir work/ui/game/windows/btn_plus_over.sub", "down_image" : "d:/ymir work/ui/game/windows/btn_plus_down.sub", }, { "name" : "character_name", "type" : "text", "x" : 43, "y" : 218, "text" : uiScriptLocale.CREATE_NAME, "text_horizontal_align" : "center", "children" : ( { "name" : "character_name_slot", "type" : "image", "x" : 40 - 1, "y" : -2, "image" : "d:/ymir work/ui/public/parameter_slot_04.sub", }, { "name" : "character_name_value", "type" : "editline", "x" : 40 - 1 + 3, "y" : 0, "input_limit" : 15, "editable" : 1, "text" : "", "width" : 90, "height" : 20, }, ), }, { "name" : "character_gender", "type" : "text", "x" : 43, "y" : 247, "text" : uiScriptLocale.CREATE_SEX, "text_horizontal_align" : "center", }, { "name" : "gender_button_01", "type" : "radio_button", "x" : 79, "y" : 247, "text" : uiScriptLocale.CREATE_MAN, "default_image" : ROOT_PATH + "Middle_Button_01.sub", "over_image" : ROOT_PATH + "Middle_Button_02.sub", "down_image" : ROOT_PATH + "Middle_Button_03.sub", }, { "name" : "gender_button_02", "type" : "radio_button", "x" : 139, "y" : 247, "text" : uiScriptLocale.CREATE_WOMAN, "default_image" : ROOT_PATH + "Middle_Button_01.sub", "over_image" : ROOT_PATH + "Middle_Button_02.sub", "down_image" : ROOT_PATH + "Middle_Button_03.sub", }, { "name" : "character_shape", "type" : "text", "x" : 43, "y" : 270, "text" : uiScriptLocale.CREATE_SHAPE, "text_horizontal_align" : "center", }, { "name" : "shape_button_01", "type" : "radio_button", "x" : 79, "y" : 239 + TEMPORARY_HEIGHT, "text" : "1", "default_image" : ROOT_PATH + "Middle_Button_01.sub", "over_image" : ROOT_PATH + "Middle_Button_02.sub", "down_image" : ROOT_PATH + "Middle_Button_03.sub", }, { "name" : "shape_button_02", "type" : "radio_button", "x" : 139, "y" : 239 + TEMPORARY_HEIGHT, "text" : "2", "default_image" : ROOT_PATH + "Middle_Button_01.sub", "over_image" : ROOT_PATH + "Middle_Button_02.sub", "down_image" : ROOT_PATH + "Middle_Button_03.sub", }, { "name" : "create_button", "type" : "button", "x" : 11, "y" : 265 + TEMPORARY_HEIGHT, "text" : uiScriptLocale.CREATE_CREATE, "default_image" : ROOT_PATH + "Large_Button_01.sub", "over_image" : ROOT_PATH + "Large_Button_02.sub", "down_image" : ROOT_PATH + "Large_Button_03.sub", }, { "name" : "generate_name_button", "type" : "button", "x" : 109, "y" : 265 + TEMPORARY_HEIGHT, "default_image" : ROOT_PATH + "Large_Button_01.sub", "over_image" : ROOT_PATH + "Large_Button_02.sub", "down_image" : ROOT_PATH + "Large_Button_03.sub", "text" : "isim olustur", }, { "name" : "cancel_button", "type" : "button", "x" : 65, "y" : 290 + TEMPORARY_HEIGHT, "text" : uiScriptLocale.CANCEL, "default_image" : ROOT_PATH + "Large_Button_01.sub", "over_image" : ROOT_PATH + "Large_Button_02.sub", "down_image" : ROOT_PATH + "Large_Button_03.sub", }, ), }, ## Buttons { "name" : "l##t_##tton",## "type" : "button", "x" : SCREEN_WIDTH * (450 - 22*3) / 800, "y" : SCREEN_HEIGHT * (505) / 600, "default_image" : "d:/ymir work/ui/intro/select/dragon_left_button_01.sub", "over_image" : "d:/ymir work/ui/intro/select/dragon_left_button_02.sub", "down_image" : "d:/ymir work/ui/intro/select/dragon_left_button_03.sub", }, { "name" : "right_button", "type" : "button", "x" : SCREEN_WIDTH * (580 - 22) / 800, "y" : SCREEN_HEIGHT * (505) / 600, "default_image" : "d:/ymir work/ui/intro/select/dragon_right_button_01.sub", "over_image" : "d:/ymir work/ui/intro/select/dragon_right_button_02.sub", "down_image" : "d:/ymir work/ui/intro/select/dragon_right_button_03.sub", }, ), }
Farklı Bir Karakter Ekranı Kullanıysanız uygun bir yere bu butonu ekleyin
Kod:
{ "name" : "generate_name_button", "type" : "button", "x" : 109, "y" : 265 + TEMPORARY_HEIGHT, "default_image" : ROOT_PATH + "Large_Button_01.sub", "over_image" : ROOT_PATH + "Large_Button_02.sub", "down_image" : ROOT_PATH + "Large_Button_03.sub", "text" : "isim olustur", },
4. olarak names_list.py oluştur root klasörü içine sonra alttakileri ekle !
Kod:
NAMES_LIST = [ "Homeron", "MrGe", "HOPPALA", "xAFFETMEg", "MythArrow", "Shunai", "RzeLy", "GODUMBOZULDU", "CUPPALA", "Hemera", "Dou", "ASSASIN", "Mangeku", "PADISAH", "BOZKURT", "MUSLERA", "RvsSpeed", "ASL4N", "Ninja", "Hell", "Olc", "LORD", "DELI", "Seyis", "Paradise", "EFSANE", "BABA", "HeavenFARM", "Speed", "TURUVALI", "ASDASDASD", "314159265358", "HeddA", "Efsun", "ESDELIDELI", "TrMusallat", "BASKAN", "Wind", "BenGeldim", "TENNSII", "Ra", "Eda", "HeMRA2", "GAVIROSTA", "Ed", "Demirci", "GOD", "HAYYAVRUM", "AyYuzlum", "MEMISxKraL", "LORDfarm", "HerYerDuman6", "KasarRuski", "BaekLORD", "Volkann", "0R0SPUEDA", "ZALIM", "PsychoSociaL", "SINCANLIM", "GowtheR", "AVSARBEY", "BABAxDERLER", "Burra", "GARFIELD", "CaptainStag", "ZihinseLPlus", "RAJON", "benuzulmem", "Pretzel", "EJDER", "Zoe", "Sura", "TEK", "sds", "Ez4Ence", "31415926535", "KRITIKCI", "REIS", "58", "KURUUU", "TEKILA", "meflud", "NARCOS", "Eclipse7", "tethyS", "DeliDumrul", "SUMBUL", "ZaMaZoM", "Ssss", "WarWolf", "bngcf", "nbgmn", "POV", "KARA", "Sinek", "cash", "llWarll", "AYAR", "sisko", "CHIVAS", "pretzell", "civciv", "K1", "Eclipse77", "NobleStrike", "KekkeiGenkai", "DrKing", "RuhsuzOkcu", "PALANBEYAZ", "mefflud", "THESAT", "ZORBEY", "RozeN", "lRozeNl", "razor123", "SANRI", "DaRkBLue", "SeqhilNinja", "civciv42", "OTTO", "SmokerDAYI", "FizofreN", "maca5", "kupa10", "SmokerIDAYI", "THANOS", "USTADFarm", "USTAD", "xXxEcel7", "DOLIVKA", "KaMoSeT", "KRAL", "VATAN", "ZxKRALxZ", "Kutlusam", "EdaFarM", "PARMAKDARBE", "UstaFarm", "LAZBABA", "SeljukEmpire", "Enemy", "Sharingan", "ZeuS", "Hupi", "DAYI", "ASTERIX", "xKraLTR", "KIZzilli", "KRALBenim", "monster", "SOSYOPAT", "H1N1", "KesBeni", "xChe", "xCha", "xChaFARM", "DOLIVKA2", "GODFARM", "Itachi", "YAYGELARTIK", "H1pNo0zz", "O1Capon", "OsCArr", "DarkNeSs", "VeNom", "PoPo", "ZORO", "PATOS", "Maestro", "SoNRaP", "Kerberos", "AFU", "111H", "Paramedic", "OhaSHAMAN", "XMEN", "OhaKiNG", "KafamDuman6", "XxLeGendxX", "Ramires", "gaddaR", "eXedRa", "FarkBende2Le", "Toxic", "Cabbar", "ModernThug", "Lilith", "EFSOkral", "Hercai", "RedKeys", "BERGEN", "Devilish", "p0seid0n", "VEZIR", "ASGARD", "ZILAN", "Oflii", "Eye4You", "xEvrimx", "EFSNBOTS", "TurkishPower", "Trmehmety", "TRmehmet", "KINSEI", "Redflowers", "TURKIYE", "TACSIZKRAL", "ISouLI", "Takumi", "SoNNinJa", "SOYLUYUM", "Hawaggi", "SmithKlineTR", "YARGIC", "CHEf", "Chess", "OTTOMAN", "Test", "Hemera2", "Szijj", "XMEN2", "MythWarrior", "Kharon", "Lennon", "DILENCIxOGI", "JaWeL", "MEZARCI34", "Rowss", "LASTDANCE", "KANUNSUZ", "Pailrox", "Hassaki", "DadaS", "WOLF", "xFARKETMEZ", "MyAE", "HaHaHa", "Kxe", "oVEYTo", "EskiciGeldi", "mehmet3535", "RowsTek", "LASTDANCEv3", "Vip", "ROWS2YEDi", "RowsAgla", "EnginSertkay", "SIKINTILI", "lSIKINTILI", "CaptanJake", "SAR", "efsun2", "efsun3", "EZEL", "bufff", "SwangeR", "Archer", "SLOTVERAM", "NoNameWar", "Akamaru", "SOYLU", "3GO", "Joseph", "LASTDANCEv2", "Bab", "Kaan", "Bebek", "Dora", "PosionFake", "BabaMerhaba", "ByHefna", "dsfasdfsadf", "BEST", "engntekleyen", "EnginSertkaa", "LASTDANCEv4", "Azazel", "xORGENERAL", "ShiftDelete", "IIAnasoNII", "JustWatch", "AmaTerrasu", "DyCold", "Furious", "xD", "Amansz1Keko", "OhCu", "OdilNl", "AeYEmRe1", "BoSs", "TARZAN", "RiqeL", "J3enQ", "Indicibus", "SarKopat", "Orspunami", "lVIPl", "lLoran", "T1T4N", "oGeav", "lTheGaDDaRl", "Aetheaf", "Paytak", "PaklosSs", "Endurance", "Hassasium", "Ugur", "TrOnLaR", "Tazia", "cozme", "OrkunMNTMR", "Fre", "kutsama1", "Baro", "TAGOF", "DioBrando", "BGSLOW", "Jonathan", "EZ4ENCE1", "Extezy", "EZ4ENCE2", "SVYRM", "DemiGod", "Pogba", "ProfessionaL", "LoRdLaRiNeFe", "02", "D4YI", "OLO", "POMPA", "KUJU", "Kirwe", "kiriw", "Kira", "ANASIKICI", "TankerMelda", "BidonNecmi", "Mayhem", "Merve", "ScorpionJx", "ScorpionJr", "iboyusikm", "PaklosS", "Sumela", "Josuke", "Okuyasu", "Babaa", "ADALET", "SUH", "PerfectDewiL", "Oglim", "Lizzo", "ByJamiryoo", "CIZBIZ", "DeliNoyan", "Minto0o", "Orkun1910", "PaklosSsW", "Powerade", "HERMES", "Ryzen", "Boo", "PGA", "Mata", "Nightovel", "XXVI", "Shaman", "CorteX", "Muholox", "lility", "Muholox58", "Skayres", "TRDrenisH", "Matriks", "KralMetehan", "RaptorBlood", "Timmy", "TRDrenissH", "K3x3", "TainTed", "EMMI", "DyN", "BlackBrother", "QUAKE", "EdiLe", "Manly", "ZeusunDenizi", "Momo", "KaiSa", "Dio", "YAKAMOZ", "Eulith", "Sensizim", "Malphite", "SALMAM", "G4me0vER", "Pinhani", "AyiABBAS", "FarketmeezWT", "EFSUNNNNNNN", "TylerDurden", "Vaenictas", "AyiHASO", "CJ", "KeNoKe", "I3ySurahi", "SpeeDs", "MaXiMuS", "AyiCABBAR", "AyiKADO", "NoName2", "NoName", "ged", "DeaTLoarD", "35FP", "Fei", "Selininki", "vosseL", "veselam", "xLarge", "azer", "Lx", "GodzillaR34", "ALVIN", "ReD", "Baykan", "SOKARCA", "malemre", "SpyHorn", "hucketbead", "FUCKER", "aaaaaaaaaa", "andavalemre", "ITeKKrAlI", "VesseLam", "DarkSide", "EternaL", "LANADELREY", "DIRILISH", "Afrodit", "bossvero", "J3adJ3oy", "Tugce", "ImMariuana", "xResperct", "JARDEL", "RONIN", "Rhott", "EFSANExMEMO", "Aldarion", "TheMoRe", "MP3", "AyiCEREN", "vay", "Titanium", "SURAVAR", "HemeraTEST", "Crow", "Kwoon", "Laviedd", "STALLIZE", "AyiHUSO", "MAREN", "AyiMERDO", "icz", "QuanChe", "NetzsChe", "Masquerade", "SQVALYE", "m0naLisa", "Despina", "Pemions", "AYISIkEN", "omerhamza", "ninjaa", "AyiBATU", "Sude", "Ninjely", "EFSUNCUUU", "TestaRossa", "F458", "MoRDoR", "SparTacus", "F430", "Eaglee", "MORCENNET", "sadsadasdasd", "Eagle", "GaNDaLF", "AyiABBAS2", "AyiABBAS3", "god5465", "godUZI", "KING", "ReaLxFLU", "TestaRoosaa", "Sasurata", "Carla", "Kutsabebeim", "Oklipotiko", "XiaoYung", "LasTShot", "PaklosSsWW", "Sudee", "Fallacy", "Paladin", "Ayran", "Dazzler", "Remy", "Weakside", "Eliena", "ZzZxXxZzZ", "Umut", "CakarLaRRR", "Kurosaki", "Rhot", "AYYILDIZ", "sudeee", "SadeKek", "yuuji", "Ninjayimben", "Aizen", "dilara", "BALKAN", "SECURITY", "Ashe", "Duygununki", "V1", "I3omonti", "HoppA", "AdALeTT", "GRALbiLD", "Kuzan", "Zeors", "SemiGod", "AyiSAMAN", "KARASURA", "AyiKADO1", "XxSrSrXx", "XxSrSrXx1", "DELALE", "MagicLord", "Hasecan", "Chupons", "SekoBey", "Halil", "POSEIDON", "Helu", "qunToX", "EhLiKeyfs", "SonSamuRaY", "Zeigen", "Levi", "yuujii", "TEKYUMRUK", "AVVA", "suraaaav", "Sekoooo", "CaT", "WurGunBey", "Invincible", "Asi", "FRENTE", "RoyaLs", "Asiye", "Serchuva", "Basim", "YARRAAAAAAAA", "HyperGhosTR", "YARRAAAAA2", "YARRAAAAAAA3", "M3L1H", "EsmaSultan", "ssAss", "EmonG", "TAMADIR", "FARM", "SEYTAN", "BIG", "PuF", "Alex", "ssOss", "ThiweT", "CardinalRed", "SiKiCiSOKUCU", "AYIABBASOC", "MesquL", "Delpwinzy", "Snow", "MAYKADAPITKA", "ssuss", "HeLfOrCe", "Yujininki", "Tamam", "fefewfewgege", "TheGodofGods", "LeuEntrica", "ThELF", "VARLUKHAN", "PATRON", "PATRON17", "PATRON1", "IPuF", "AVVArutin", "zfsadfsdf", "NinjaMP", "babafingo", "Shaman1", "leykon", "DaPoet", "Atom", "Doja", "madrid", "S4PULTUR4", "PoweRShooT", "asdsafasfsdf", "AmmaTerasu", "ZorBaaTR", "sadasda", "KaRaCeLLaT", "UtkuDuman", "InsCnmYa", "Poncik", "DaRK", "SaKArYAl1", "MuSaLlat", "Scary", "Orii1928", "Elizabet", "XKralTRX", "35BUCA1928", "clibces", "ZZoRRo", "GeFoRGe", "VoNDeRFuLL", "HiwatariaKai", "qUANTUMFIZIQ", "mezarci", "Mira", "Poncik2", "amra", "erkumenkozer", "ergumenkozer", "BASBELASI", "SIZOFREN", "poncik3", "Resque", "Strawberry", "ponc", "ShadowBlade", "DragonFury", "NightRaven", "DarkSoul", "MysticPhoenix", "SavageWolf", "DeathStroke", "EternalDoom", "AbyssalWraith", "RagingThunder", "FrostBite", "ChaosReaper", "ShadowStalker", "Hellfire", "VenomousViper", "SpectralSorrow", "DreadNinja", "BlazeFire", "SkullCrusher", "StormBreaker", "FrostBane", "DoomBringer", "NightmareKing", "DemonSoul", "TwilightAssassin", "GhostRider", "DarkPhoenix", "EclipseRider", "SpiritWalker", "FrozenFury", "PhoenixFlame", "SoulEater", "DuskStrider", "NightBlade", "AbyssalReaper", "DarkVortex", "ShadowDemon", "ThunderBolt", "BlazingShadow", "DeathDealer", "VengefulSpirit", "DoomKnight", "FrostFang", "ChaosSorcerer", "ShadowSlayer", "HellfireWarrior", "VenomFang", "SpectralRogue", "DreadReaper", "BlazeSoul", "SkullSlicer", "StormRider", "FrostFury", "DoomChampion", "NightmareReaper", "DemonKing", "TwilightWarrior", "GhostSlayer", "DarkLord", "EclipseAssassin", "SpiritBlade", "FrozenFire", "PhoenixWraith", "SoulSlayer", "DuskWalker", "NightStrider", "AbyssalWarrior", "DarkStriker", "ShadowWraith", "ThunderBlade", "BlazingSorcerer", "DeathWarden", "VengefulSpecter", "DoomBringer", "FrostReaper", "ChaosKnight", "ShadowSorcerer", "HellfireSlayer", "VenomStriker", "SpectralWarrior", "DreadLord", "BlazeWraith", "SkullReaper", "StormChampion", "FrostSlayer", "DoomStrider", "NightmareLord", "DemonSlayer", "TwilightSorcerer", "GhostWalker", "DarkChampion", "EclipseSorcerer", "SpiritSlayer", "FrozenStrider", "PhoenixWarden", "SoulSorcerer", "DuskSlayer", "NightWarden", "AbyssalSorcerer", "DarkSlayer", "ShadowChampion", "ThunderSorcerer", "BlazingWarden", "DeathChampion", "VengefulSorcerer", "DoomSlayer", "FrostChampion", "ChaosSorcerer", "ShadowWarden", "HellfireSorcerer", "VenomChampion", "SpectralSorcerer", "DreadChampion", "BlazeSorcerer", "SkullChampion", "StormSorcerer", "FrostWarden", "DoomSorcerer", "NightmareSorcerer", "DemonSorcerer", "TwilightChampion", "GhostSorcerer", "DarkSorcerer", "EclipseChampion", "SpiritSorcerer", "FrozenChampion", "PhoenixSorcerer", "SoulChampion", "DuskSorcerer", "NightSorcerer", "AbyssalChampion", "DarkChampion", "ShadowSorcerer", "ThunderChampion", "BlazingChampion", "DeathSorcerer", "VengefulChampion", "DoomSorcerer", "FrostChampion", "ChaosChampion", "ShadowChampion", "HellfireChampion", "VenomSorcerer", "SpectralChampion", "DreadSorcerer", "BlazeChampion", "SkullSorcerer", "StormChampion", "FrostSorcerer", "DoomChampion", "NightmareSorcerer", "DemonChampion", "TwilightSorcerer", "GhostChampion", "DarkSorcerer", "EclipseChampion", "SpiritChampion", "FrozenSorcerer", "PhoenixChampion", "SoulSorcerer", "DuskChampion", "NightChampion", "AbyssalSorcerer", "DarkSorcerer", "ShadowChampion", "ThunderSorcerer", "BlazingChampion", "DeathSorcerer", "VengefulChampion", "DoomSorcerer", "FrostChampion", "ChaosSorcerer", "ShadowChampion", "HellfireChampion", "VenomSorcerer", "SpectralChampion", "DreadSorcerer", "BlazeChampion", "SkullSorcerer", "StormChampion", "FrostSorcerer", "DoomChampion", "NightmareSorcerer", "DemonChampion", "TwilightSorcerer", "GhostChampion", "DarkSorcerer", "EclipseChampion", "SpiritSorcerer", "FrozenChampion", "PhoenixSorcerer", "SoulChampion", "DuskSorcerer", "NightSorcerer", "AbyssalChampion", "DarkChampion", "ShadowSorcerer", "ThunderChampion", "BlazingSorcerer", "DeathChampion", "VengefulSorcerer", "DoomSlayer", "FrostChampion", "ChaosSorcerer", "ShadowWarden", "HellfireSorcerer", "VenomChampion", "SpectralSorcerer", "DreadChampion", "BlazeSorcerer", "SkullChampion", "StormSorcerer", "FrostWarden", "DoomSorcerer", "NightmareSorcerer", "DemonSor", "KaraKartal", "AslanParçası", "YıldırımHızı", "GörkemliSavaşçı", "KudretliKılıç", "BüyükKahraman", "KaranlıkŞövalye", "EfsaneviEjderha", "KorkusuzSavaşçı", "SonsuzMacera", "GizemliRuh", "KırmızıKurt", "SertZırh", "KahramanAvcı", "KurnazKorsan", "BüyülüBard", "SonsuzUçan", "EjderhaKanat", "KılıçParmak", "KaraŞövalye", "RüzgarYelken", "AlevYürek", "KahramanGölgeler", "KaranlıkMelek", "AltınKalkan", "ZehirliGül", "ÖlümsüzSavaşçı", "GölgeBıçak", "KaraKral", "EjderhaÇocuk", "GüçlüKılıç", "EbediKavga", "DemirYumruk", "GizemliAsker", "KaraŞimşek", "UçanEjderha", "KutsalAlev", "KutsalKoruyucu", "BüyülüKılıç", "AlevGözlü", "KaraGölge", "EfsaneviKurt", "KurtKral", "KahramanKılıç", "BüyülüAlev", "AltınKılıç", "BilgeBard", "GüçlüKuvvet", "KorkusuzKahraman", "KaraMızrak", "KaranlıkKule", "KaraKorsan", "EjderhaKanı", "KaraGöz", "AteşKuş", "KaranlıkYıldırım", "EjderhaKuş", "KahramanEjderha", "BüyülüEfsane", "KurtKanat", "KahramanMelek", "EfsaneviKahraman", "KaraKudret", "KorkusuzKaptan", "SavaşKurt", "AltınGüneş", "KurtKanı", "KaraKılıç", "BüyülüSavaşçı", "AltınGölgeler", "EjderhaKahraman", "KaraZehir", "KahramanEfsane", "KurtKahraman", "GüçlüKalkan", "SonsuzGüç", "KaraMelek", "EjderhaMelek", "KutsalKahraman", "KaraKehanet", "KahramanKartal", "BüyülüKurt", "KaraKuş", "KaraZırh", "GizemliKılıç", "KaranlıkKaplan", "EfsaneviGölgeler", "KaraGüç", "BüyülüKuş", "EfsaneviKartal", "AltınKartal", "KaraKöşk", "KaraAlev", "BüyülüKöşk", "KahramanKanat", "KutsalGüç", "EjderhaGöz", "KaraKıyamet", "KaraMeşale", "EfsaneviMelek", "KahramanGöz", "KaraGölge", "KaraYıldız", "AltınKahraman", "EjderhaGölge", "BüyülüKaptan", "EjderhaKılıç", "GizemliMelek", "KaraGüneş", "KahramanGölgeler", "KaraRuh", "BüyülüGölge", "EfsaneviGölge", "KaranlıkKurt", "KaraKutlu", "EjderhaKutlu", "AltınGölge", "KahramanGölge", "KahramanKuzgun", "KaraKılıç", "EfsaneviKılıç", "KaranlıkKahraman", "EjderhaKahraman", "AltınKahraman", "KaraYıldırım", "KahramanYıldırım", "BüyülüKahraman", "KaraZırh", "KaraKraliçe", "GizemliKraliçe", "KahramanKraliçe", "KaraKral", "KaraSavaşçı", "KahramanSavaşçı", "BüyülüSavaşçı", "KaraGüç", "EjderhaGüç", "KahramanGüç", "AltınGüç", "KaraGüneş", "EjderhaGüneş", "BüyülüGüneş", "KaraGölge", "EfsaneviGüneş", "KaraKarga", "KaraKahraman", "BüyülüKahraman", "KaraKalkan", "KahramanKalkan", "EfsaneviKalkan", "KaraAlev", "EjderhaAlev", "KahramanAlev", "AltınAlev", "KaraKutu", "KaraKumandan", "BüyülüKumandan", "KaraKule", "KahramanKule", "EfsaneviKule", "KaraKuş", "KaraKurt", "EfsaneviKurt", "KaraGüneş", "KaraGün", "EfsaneviGüneş", "KaraGizem", "KaraGöz", "KaraGölge", "KaraGörünmez", "KaraSavaş", "KaraSavaşçı", "KaraSavaşçı", "KaraSavaş", "KaraS", ]
SİSTEM VİDEOSU
PYTHON ile Otomatik Karakter İsmi Oluşturma Sistemi
Python, Metin2 özel sunucularında geliştirme yaparken oldukça kullanışlı bir araçtır. Özellikle otomasyon süreçlerinde, örneğin kullanıcı karakterlerine otomatik olarak rastgele isimler atamak istiyorsanız, Python kullanmak hem hızlı hem de esnek çözümler sunar. Bu yazıda, Metin2 özel sunucularında kullanılmak üzere Python ile nasıl otomatik karakter ismi oluşturma sistemi geliştirilebileceğini anlatacağız.
Karakter İsimleri Neden Önemlidir?
Metin2 gibi MMORPG oyunlarında karakter isimleri, oyuncuların kimliğini yansıtır. Aynı zamanda, benzersiz isimlerin korunması sunucu yönetimi açısından kritiktir. Ancak bazı durumlarda, test sunucularında çok sayıda karakter oluşturmak veya bot karakterler için isim atamak gerekebilir. Bu gibi durumlarda, rastgele ancak anlamlı karakter isimleri oluşturmak büyük kolaylık sağlar.
Python ile Rastgele İsim Oluşturma
Python, string işlemleri ve rastgele veri üretimi konusunda güçlü bir dil olduğu için, karakter isimleri oluşturmak oldukça kolaydır. Aşağıda basit bir örnek verilmiştir:
Örnek Kod:
Kod:
[B]import random[BR][/BR][BR][/BR]def rastgele_isim_olustur():[BR][/BR] bas_harfler = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'][BR][/BR] son_harfler = ['ra', 'na', 'la', 'ka', 'ta', 'va', 'sa'][BR][/BR] orta_heceler = ['mor', 'tar', 'ven', 'kal', 'zin', 'lux', 'nox'][BR][/BR][BR][/BR] bas = random.choice(bas_harfler)[BR][/BR] orta = random.choice(orta_heceler)[BR][/BR] son = random.choice(son_harfler)[BR][/BR][BR][/BR] return f'{bas}{orta}{son}'[BR][/BR][BR][/BR]print(rastgele_isim_olustur())[/B]
Kod Açıklaması:
Bu Python kodu, belirlenen heceleri birleştirerek rastgele karakter isimleri oluşturur. Basitçe çalışır ve Metin2 özel sunucularında bot karakterler için idealdir. Ayrıca, bu yapıyı genişleterek veritabanı entegrasyonu, isim tekrar kontrolü gibi gelişmiş sistemlere de bağlanabilir.
Metin2 Sunucusuyla Entegrasyon
Metin2 sunucularında karakter isimleri genellikle auth veya game sunucularındaki veritabanına kaydedilir. Python ile oluşturulan isimler doğrudan db bağlantısı kurularak karakter oluşturulma sürecine entegre edilebilir. Örneğin, bir Py GUI arayüzü ile geliştirici, bot karakterler için isim listesi oluşturabilir ve bunları doğrudan sunucuya gönderebilir.
GUI ile Kullanıcı Dostu Arayüz
Python'da tkinter veya PyQt gibi modüllerle grafiksel arayüzler (GUI) oluşturulabilir. Böylece, karakter isimlerini oluşturmak için daha kullanıcı dostu bir sistem kurulabilir. Geliştiriciler, bu sayede birden fazla karakter için isimleri otomatik olarak oluşturabilir ve listeyi dışa aktarabilirler.
Sonuç
Python ile otomatik karakter ismi oluşturma sistemi, Metin2 özel sunucu geliştiricileri için zaman kazandıran ve işleri kolaylaştıran bir yöntemdir. Hem test hem de üretim sunucularında kullanılabilir. Bu sistem, doğru şekilde entegre edildiğinde, karakter yönetimi süreçlerini optimize eder.
Automated Character Name Generation with PYTHON
Python is a highly useful tool when developing private servers for Metin2. Especially in automation processes, such as assigning random names to user characters automatically, Python offers both fast and flexible solutions. In this article, we will explain how to develop an automated character name generation system using Python for Metin2 private servers.
Why Are Character Names Important?
In MMORPG games like Metin2, character names reflect the identity of players. Additionally, ensuring unique names is critical for server management. However, in some cases, creating many characters on test servers or assigning names to bot characters may be necessary. In such situations, generating random but meaningful character names can provide great convenience.
Generating Random Names with Python
Since Python is strong in string operations and random data generation, generating character names is quite easy. Below is a simple example:
Sample Code:
Kod:
[B]import random[BR][/BR][BR][/BR]def generate_random_name():[BR][/BR] start_letters = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'][BR][/BR] end_syllables = ['ra', 'na', 'la', 'ka', 'ta', 'va', 'sa'][BR][/BR] middle_syllables = ['mor', 'tar', 'ven', 'kal', 'zin', 'lux', 'nox'][BR][/BR][BR][/BR] start = random.choice(start_letters)[BR][/BR] middle = random.choice(middle_syllables)[BR][/BR] end = random.choice(end_syllables)[BR][/BR][BR][/BR] return f'{start}{middle}{end}'[BR][/BR][BR][/BR]print(generate_random_name())[/B]
Code Explanation:
This Python code generates random character names by combining predefined syllables. It works simply and is ideal for bot characters on Metin2 private servers. Furthermore, this structure can be extended to integrate with databases, check for name duplicates, and more advanced systems.
Integration with Metin2 Server
Character names in Metin2 servers are usually stored in the database of the auth or game server. Names generated via Python can be integrated directly into the character creation process by establishing direct db connections. For example, developers can use a Py GUI interface to create lists of names for bot characters and send them directly to the server.
User-Friendly Interface with GUI
Graphical interfaces (GUI) can be created in Python using modules like tkinter or PyQt. This way, a more user-friendly system can be established for generating character names. Developers can then automatically generate names for multiple characters and export the list.
Conclusion
An automated character name generation system with Python is a time-saving and efficient method for Metin2 private server developers. It can be used on both test and production servers. When properly integrated, this system optimizes character management processes.
