[HOW-TO] Kendi Efsununuzu Yaratın

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

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
Öncelikle iyi günler kolay gelsin, konumda istek geldiği için böyle bir konu açma gereksinimi duydum. Fazla uzatmadan konuya geçelim. Bu arada bir hatam olduysa kusura bakmayın elimden geldiğince açıklamaya çalıştım yanlış açıkladığım veya açıklayamadığım yerleri düzeltirseniz sevinirim. İyi forumlar <3...



İlk kısım olarak Client SRC Kısmı olucak Burada Düzenleyeceğimiz kısımlar



GameLib>ItemData.h olucak

ItemData.h üzerinden "APPLY_ATTBONUS" Değeri atayacağız Örneğin

APPLY_ATTBONUS_ISTEDIGINIZEFSUNADI,

Gibi

Kod:
//ARAT         enum EApplyTypes         {             //ÝÇÝNDE BUL MAX_APPLY_NUM, //ÜSTÜNE EKLE             APPLY_ATTBONUS_ISTEDIGINIZEFSUNADI,

Ardından UserInterface kısmına geçelim

Bu kısımda ise bir adet poModule ve bir adet Point atayacağız



Kod:
//poModule Örneği //arat     PyModule_AddIntConstant(poModule, "APPLY_ANTI_PENETRATE_PCT",    CItemData::APPLY_ANTI_PENETRATE_PCT );        //ALTINA EKLE     PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_ISTEDIGINIZEFSUNADI", CItemData::APPLY_ATTBONUS_ISTEDIGINIZEFSUNADI);

ve bir point type'si atayacağız örneğin

Kod:
//ARAT enum EPointTypes {     // ICINNDE EN SONA EKLE     POINT_ATTBONUS_ISTEDIGINIZEFSUNADI,

Burada işimiz bitti sıra GameSRC'de

ilk olarak commondan başlıyoruz burada kullanacağımız dosya

GameSRC>common>length.h

Buradaki amacımız ise RaceFlag şartı ile yazacağımız için efsunumuzu bir adet RaceFlag atamak ve ClientSRC'de atadığımız APPLY_ATTBONUS_ISTEDIGINIZEFSUN, değerini buraya da yazmak.



RaceFlag Kısmı >length.h

Kod:
//ARAT enum ERaceFlags {     //Buraya ekliyoruz };     RACE_FLAG_ATT_ISTEDIGINIZEFSUNADI    = (1 << /*Sizdeki son sayý ne ise 1 fazlasi*/)

APPLY_ATTBONUS Kısmı ise >length.h

Kod:
//ARAT enum EApplyTypes // İçinde arat     MAX_APPLY_NUM,              // //Ekle APPLY_ATTBONUS_ISTEDGINIZEFSUNADI,



Gelelim GameSRC>game Kısmına

Burada

1-> Efsunun etki edeceği şartı yazacağız.

2-> Pointimizi ve Apply_Attbonusumuzu bir daha yazacağız case içinde

3-> Enum EPointTypes'i bir daha tanıtacağız ClientSRC'de yaptığımız gibi

4-> cmd üzerinden yansıtıldığında gözükecek adının kontrolüyün yapacağız

5-> TApplyInfo (Point) ve TValueName ("Karşı güçlü olacak mobumuzun RaceFlagına ekleyeceğimiz şeyi ve onun hangi apply'i çalıştırıcağını ekliyeceğiz")



İlk olarak game>char.h

"3->" Kısmını yapacağız

Kod:
//arat enum EPointTypes {     // ICINE EKLE EN SONA     POINT_ATTBONUS_ISTEDIGINIZEFSUNADI,



Ardından 2-> Kısmı için

game>char.cpp kısmı

Kod:
//arat case POINT_RESIST_SHAMAN : // ALTINA EKLE         case POINT_ATTBONUS_ISTEDIGINIZEFSUNADI: //ARAT case APPLY_NORMAL_HIT_DAMAGE_BONUS: //ALTINA EKLE         case APPLY_ATTBONUS_ISTEDIGINIZEFSUNADI:



Şimdi de "4->" kısmını yapalım

game>cmd_general.cpp

Kod:
//ARAT static const char* [...]     switch (apply_number)     {         // ICINDE BUL         case POINT_RESIST_SHAMAN:    return LC_TEXT("¹«´ç°ø°Ý¿¡ %d%% ÀúÇ×"); // Altina ekle         case POINT_ATTBONUS_ISTEDIGINIZEFUNADI:    return LC_TEXT("Istediğniiz efsun adına karþý güçlü %d%%");

ve

game>cmd_gm.cpp

Kod:
//ARAT tch->GetPoint(POINT_ATTBONUS_SHAMAN)); // ALTINA EKLE ch->ChatPacket(CHAT_TYPE_INFO, "   ISTEDIGINIZEFSUNADI:%3d%%",     tch->GetPoint(POINT_ATTBONUS_ISTEDIGINIZEFSUNADI)); //Son hali     ch->ChatPacket(CHAT_TYPE_INFO, "   WARR:%3d%% ASAS:%3d%% SURA:%3d%% SHAM:%3d%%",             tch->GetPoint(POINT_ATTBONUS_WARRIOR),             tch->GetPoint(POINT_ATTBONUS_ASSASSIN),             tch->GetPoint(POINT_ATTBONUS_SURA),             tch->GetPoint(POINT_ATTBONUS_SHAMAN));     ch->ChatPacket(CHAT_TYPE_INFO, "   ISTEDIGINZEFSUNADI:%3d%%",             tch->GetPoint(POINT_ATTBONUS_ISTEDIGINZEFSUNADI));



5-> Kısmına geçelim

game>constants.cpp

TApplyInfo Kısmı

Kod:
//ARAT const TApplyInfo aApplyInfo[MAX_APPLY_NUM] = // Icıne ekle     { POINT_ATTBONUS_ISTEDIGINIZEFSUNADI,        },   // APPLY_ATTBONUS_ISTEDIGINIZEFSUNADI,

ve TValueName Kısmı

game>cosntants.cpp

Kod:
//ARAT TValueName c_aApplyTypeNames[] = // ICINDE BUL { NULL,        0            } //ÜSTÜNE EKLE     { "ATT_ISTEDIGINIZEFSUNADI",    APPLY_ATTBONUS_ISTEDIGINIZEFSUNADI    },



Kod:
//ARAT if (pkVictim->IsRaceFlag(RACE_FLAG_ANIMAL))     iAtk+= (iAtk * pkAttacker->GetPoint(POINT_ATTBONUS_ANIMAL)) / 100; // ALTINA EKLE         if (pkVictim->IsRaceFlag(RACE_FLAG_ATT_ISTEDIGINIZEFSUNADI))             iAtk += (iAtk * pkAttacker->GetPoint(POINT_ATTBONUS_ISTEDIGINIZEFSUNADI)) / 100;

Gelelim db kısmına

db'de kontrol edeceğimiz 1 adet dosya var

ProtoReader dosyası, burada yapacağımız işlem ise

RaceFlag'ımızı tanıtmak ve ApplyType'i tanıtmak

ApplyType'i tanıtmak ilk olarak

db>protoreader.cpp

Kod:
//ARAT string arApplyType[] // içine ekle "APPLY_ATTBONUS_ISTEDIGINIZEFSUNADI", //Son hali     string arApplyType[] = {"APPLY_NONE", "APPLY_MAX_HP", "APPLY_MAX_SP", "APPLY_CON", "APPLY_INT", "APPLY_STR", "APPLY_DEX", "APPLY_ATT_SPEED",             "APPLY_MOV_SPEED", "APPLY_CAST_SPEED", "APPLY_HP_REGEN", "APPLY_SP_REGEN", "APPLY_POISON_PCT", "APPLY_STUN_PCT",             "APPLY_SLOW_PCT", "APPLY_CRITICAL_PCT", "APPLY_PENETRATE_PCT", "APPLY_ATTBONUS_HUMAN", "APPLY_ATTBONUS_ANIMAL",             "APPLY_ATTBONUS_ORC", "APPLY_ATTBONUS_MILGYO", "APPLY_ATTBONUS_UNDEAD", "APPLY_ATTBONUS_DEVIL", "APPLY_STEAL_HP",            [...]             "APPLY_ATTBONUS_ISTEDIGINIZEFSUNADI",     };

ve RaceFlag'ı tanıtmak

Kod:
//ARAT string arRaceFlag[] //Ýçine ekle "ATT_ISTEDIGINIZEFSUNADI" //Son hali     string arRaceFlag[] = {"ANIMAL","UNDEAD","DEVIL","HUMAN","ORC","MILGYO","INSECT","FIRE","ICE","DESERT","TREE","ATT_ELEC","ATT_FIRE","ATT_ICE","ATT_WIND","ATT_EARTH","ATT_DARK","ATT_ISTEDIGINIZEFSUNADI"};



GameSRC Kısmında işimiz bitti şimdi DumpProto_SRC'ye geçelim

DumpProto>Source>ItemCSVReader.cpp

Burada yapacağımız işlem db'de yaptığımız işlem ile 1e1 aynı

fazla uzatmıyorum o yüzden

Kod:
//ARAT string arApplyType[] //ÝÇÝNE EKLE "APPLY_ATTBONUS_ISTEDIGINIZEFSUNADI", //SON HALÝ     string arApplyType[] = {"APPLY_NONE", "APPLY_MAX_HP", "APPLY_MAX_SP", "APPLY_CON", "APPLY_INT", "APPLY_STR", "APPLY_DEX", "APPLY_ATT_SPEED",             "APPLY_MOV_SPEED", "APPLY_CAST_SPEED", "APPLY_HP_REGEN", "APPLY_SP_REGEN", "APPLY_POISON_PCT", "APPLY_STUN_PCT",             "APPLY_SLOW_PCT", "APPLY_CRITICAL_PCT", "APPLY_PENETRATE_PCT", "APPLY_ATTBONUS_HUMAN", "APPLY_ATTBONUS_ANIMAL",             "APPLY_ATTBONUS_ORC", "APPLY_ATTBONUS_MILGYO", "APPLY_ATTBONUS_UNDEAD", "APPLY_ATTBONUS_DEVIL", "APPLY_STEAL_HP",             "APPLY_STEAL_SP", "APPLY_MANA_BURN_PCT", "APPLY_DAMAGE_SP_RECOVER", "APPLY_BLOCK", "APPLY_DODGE", "APPLY_RESIST_SWORD",             "APPLY_RESIST_TWOHAND", "APPLY_RESIST_DAGGER", "APPLY_RESIST_BELL", "APPLY_RESIST_FAN", "APPLY_RESIST_BOW", "APPLY_RESIST_FIRE",             "APPLY_RESIST_ELEC", "APPLY_RESIST_MAGIC", "APPLY_RESIST_WIND", "APPLY_REFLECT_MELEE", "APPLY_REFLECT_CURSE", "APPLY_POISON_REDUCE",             "APPLY_KILL_SP_RECOVER", "APPLY_EXP_DOUBLE_BONUS", "APPLY_GOLD_DOUBLE_BONUS", "APPLY_ITEM_DROP_BONUS", "APPLY_POTION_BONUS",             "APPLY_KILL_HP_RECOVER", "APPLY_IMMUNE_STUN", "APPLY_IMMUNE_SLOW", "APPLY_IMMUNE_FALL", "APPLY_SKILL", "APPLY_BOW_DISTANCE",             "APPLY_ATT_GRADE_BONUS", "APPLY_DEF_GRADE_BONUS", "APPLY_MAGIC_ATT_GRADE", "APPLY_MAGIC_DEF_GRADE", "APPLY_CURSE_PCT",             "APPLY_MAX_STAMINA", "APPLY_ATTBONUS_WARRIOR", "APPLY_ATTBONUS_ASSASSIN", "APPLY_ATTBONUS_SURA", "APPLY_ATTBONUS_SHAMAN",             "APPLY_ATTBONUS_MONSTER", "APPLY_MALL_ATTBONUS", "APPLY_MALL_DEFBONUS", "APPLY_MALL_EXPBONUS", "APPLY_MALL_ITEMBONUS",             "APPLY_MALL_GOLDBONUS", "APPLY_MAX_HP_PCT", "APPLY_MAX_SP_PCT", "APPLY_SKILL_DAMAGE_BONUS", "APPLY_NORMAL_HIT_DAMAGE_BONUS",             "APPLY_SKILL_DEFEND_BONUS", "APPLY_NORMAL_HIT_DEFEND_BONUS", "APPLY_PC_BANG_EXP_BONUS", "APPLY_PC_BANG_DROP_BONUS",             "APPLY_EXTRACT_HP_PCT", "APPLY_RESIST_WARRIOR", "APPLY_RESIST_ASSASSIN", "APPLY_RESIST_SURA", "APPLY_RESIST_SHAMAN",             "APPLY_ENERGY",    "APPLY_DEF_GRADE", "APPLY_COSTUME_ATTR_BONUS", "APPLY_MAGIC_ATTBONUS_PER", "APPLY_MELEE_MAGIC_ATTBONUS_PER",             "APPLY_RESIST_ICE", "APPLY_RESIST_EARTH", "APPLY_RESIST_DARK", "APPLY_ANTI_CRITICAL_PCT", "APPLY_ANTI_PENETRATE_PCT",             "APPLY_ATTBONUS_ISTEDIGINIZEFSUNADI",     };             //ARAT string arRaceFlag[] //ÝÇÝNE EKLE "ATT_ISTEDIGINIZEFSUNADI" //SON HALÝ     string arRaceFlag[] = {"ANIMAL","UNDEAD","DEVIL","HUMAN","ORC","MILGYO","INSECT","FIRE","ICE","DESERT","TREE",         "ATT_ELEC","ATT_FIRE","ATT_ICE","ATT_WIND","ATT_EARTH","ATT_DARK","ATT_ISTEDIGINIZEFSUNADI"};

Burada da işimiz bittiğine göre pack kısmına geçelim

İlk olarak

root>uitooltip.py üzerinden locale_game.txt'de efsunumuzu tanımlayacağız.

pack>uitooltip.py

Kod:
## ARAT item.APPLY_ATTBONUS_DEVIL : localeInfo.TOOLTIP_APPLY_ATTBONUS_DEVIL, ## Altına Ekle item.APPLY_ATTBONUS_ISTEDIGINEFSUNADI : localeInfo.TOOLTIP_APPLY_ATTBONUS_ISTEDIGINIZEFSUNADI,

ve son olarak

pack>locale>xx>xx>locale_game.txt

Kod:
//ARAT TOOLTIP_APPLY_ATTBONUS_UNDEAD    Ölümsüzlere karþý güçlü +%d%%    SA ALTINA EKLE TOOLTIP_APPLY_ATTBONUS_ISTEDIGINIZEFSUNADI    Istediğiniz efsunlara  karşı güçlü +%d%%    SA

Kendinize Özel Metin2 Efsunları Oluşturmak
Metin2 özel sunucularında oyun deneyimini zenginleştirmek için kendi efsunlarınızı yaratmak oldukça popülerdir. Bu rehberde, Metin2lobby.com kullanıcıları olarak, C++, Python ve UIScript gibi teknik kaynaklar kullanarak nasıl kendi efsun sisteminizi kurabileceğinizi adım adım anlatacağız.

Efsun Nedir?
Metin2'de efsunlar, karakterinize özel bonuslar sağlar. Bu bonuslar攻击力, savunma, doğruluk, kritik gibi istatistikleri artırabilir. Özel sunucularda bu sistem daha da genişletilebilir. Örneğin, özel PvP sistemleri için özel efsunlar yaratılabilir.

Efsun Sistemi Nasıl Çalışır?
Öncelikle, efsun sistemi için bir veritabanı (DB) yapısı oluşturulmalıdır. Bu yapıda efsun adı, seviyesi, bonus etkileri gibi bilgiler tutulur. Game server programming bilgisi olan geliştiriciler, game core dosyalarında değişiklik yaparak bu sistemi entegre edebilir.

C++ ile Efsun Sistemi Geliştirme
Efsun sistemi için öncelikle C++ source edit işlemleri yapılmalıdır. Metin2 server src üzerinde efsun verileri için yeni tablolar eklenmeli. Ayrıca, oyuncu envanterine eklenecek efsun item'larının tanımı yapılmalıdır. Bu işlemde martysama tarzı kaynaklar yardımcı olabilir.

Python ve Py Root Kullanımı
Oyuncuya efsun takma işlemi genellikle bir GUI üzerinden yapılır. Py GUI[/COORD] veya Python GUI kullanarak kullanıcı dostu arayüzler yaratabilirsiniz. Py root dosyaları ile efsun ekleme, çıkarma gibi işlemleri kontrol eden komutlar yazılabilir.

UIScript ile Arayüz Geliştirme
Efsun arayüzü için UIScript kullanılır. Bu script dosyası, efsun penceresinin nasıl görüneceğini belirler. Arka plan, butonlar, yazı fontları gibi detaylar burada tanımlanır. Metin2dev geliştiricileri bu yapıyı özelleştirerek kullanıcıya görsel olarak zengin bir deneyim sunabilirler.

Efsun Paketi Hazırlama
Oyuna eklenecek efsunlar, özel pack dosyaları ile sunucuya entegre edilir. Bu paketlerde hem grafik hem de veri dosyaları bulunur. Metin2 compile işlemi sırasında bu paketler derlenir ve oyuna dahil edilir.

Güvenlik ve DB Core
Efsun sistemi, auth ve db core ile entegre çalışmalıdır. Bu sayede hileli kullanım engellenir. Efsun verileri güvenli bir şekilde saklanır ve oyuncu karakterleri ile ilişkilendirilir.

Sonuç
Kendi efsun sisteminizi yaratmak, Metin2 özel sunucularında oyun deneyimini ciddi anlamda geliştirir. Metin2lobby.com topluluğu olarak, game core, C++, Python gibi teknolojileri kullanarak özgün sistemler geliştirebilirsiniz. Bu rehber sayesinde temel adımları attınız. Artık kendi efsunlarınızı yaratmaya hazırsınız.


Creating Your Own Custom Metin2 Enchantments
To enhance the gaming experience on Metin2 private servers, creating your own enchantments is quite popular. In this guide, as Metin2lobby.com users, we will explain step by step how to create your own enchantment system using technical resources like C++, Python, and UIScript.

What Are Enchantments?
In Metin2, enchantments provide special bonuses to your character. These bonuses can increase stats like attack power, defense, accuracy, critical hit rate, etc. On private servers, this system can be extended further. For example, special enchantments can be created for custom PvP systems.

How Does the Enchantment System Work?
Firstly, a database (DB) structure must be created for the enchantment system. This structure holds information such as the name, level, and bonus effects of each enchantment. Developers with game server programming knowledge can integrate this system by making modifications in the game core files.

Developing an Enchantment System with C++
For the enchantment system, C++ source edit operations must be performed first. New tables for enchantment data should be added to the Metin2 server src. Additionally, definitions for enchantment items to be added to the player's inventory must be made. Resources like martysama can assist in this process.

Using Python and Py Root
The process of equipping enchantments to players is usually done through a GUI. You can create user-friendly interfaces using Py GUI or Python GUI. Commands that control adding or removing enchantments can be written using Py root files.

UI Development with UIScript
The UIScript is used for the enchantment interface. This script file determines how the enchantment window appears, defining elements like background, buttons, fonts, and more. Metin2dev developers can customize this structure to provide visually rich experiences to users.

Preparing an Enchantment Pack
The enchantments to be added into the game are integrated into the server via custom pack files. These packages contain both graphics and data files. During the Metin2 compile process, these packs are compiled and included in the game.

Security and DB Core
The enchantment system must work integrated with auth and db core. This prevents cheating. Enchantment data is securely stored and linked to player characters.

Conclusion
Creating your own enchantment system significantly enhances the gameplay on Metin2 private servers. As part of the Metin2lobby.com community, you can develop unique systems using technologies like game core, C++, and Python. With this guide, you've taken the basic steps. Now you're ready to create your own enchantments.
 

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

Benzer konular

Geri
Üst Alt