Normal Ya Da Rare Efsun Sayısını Arttırma

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

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
hepinize selamlar arkadaşlar bugün 'inde katkılarıyla tamamladığım sistem demeyelimde konuyu paylaşıcam daha önce hiç bir forumda görmedim bunu bi neno rare vardı ama o çalışıyor mu emin değilim her neyse uzatmadan konuya geçelim.

öncelikle game sourcemizi açalım ve aşağıdakilere uyalım

açılır constants.cpp
bulunur

Kod:
const int aiItemAttributeAddPercent[ITEM_ATTRIBUTE_MAX_NUM] =

değiştirilir

Kod:
100, 100, 100, 100, 100, 100, 100, 100,

sayıların 100 olma sebebi arttırma kağıdının hangi oranla efsunu ekleyeceğinden kaynaklı değiştirebilirsiniz size kalmış.

açılır char_item.cpp
bulunur

Kod:
if (item2->GetAttributeCount() < 4)
bunu bulamayanlar 5 olarak aratsınlar

değiştirilir

Kod:
if (item2->GetAttributeCount() < 6)

bu sizin normal efsun sayınıza göre değişir ve kutsama küresi olmadan ekler eğer kutsama küresi ile ekletmek istiyorsanız iş değişir (yıl olmuş 2020 kutsama küresi kullanan var mı onuda tartışmak lazım)

açılır item.h
bulunur

Kod:
void        PutAttributeWithLevel(BYTE bLevel);

altına iki satır boşluk bırakılıp eklenir

Kod:
public:         void        AddRareAttribute2(const int * aiAttrPercentTable = NULL);     protected:         void        AddRareAttr(BYTE bApply, BYTE bLevel);         void        PutRareAttribute(const int * aiAttrPercentTable);         void        PutRareAttributeWithLevel(BYTE bLevel);

açılır item_attribute.cpp
bulunur

Kod:
int CItem::GetRareAttrCount()

komple değiştirilir

Kod:
int CItem::GetRareAttrCount() {     int ret = 0;     for (DWORD dwIdx = ITEM_ATTRIBUTE_RARE_START; dwIdx < ITEM_ATTRIBUTE_RARE_END; dwIdx++)     {         if (m_aAttr[dwIdx].bType != 0)             ret++;     }     return ret; }

yine aynı dosyada bulunur

Kod:
m_aAttr[i + 5].bType = 0;         m_aAttr[i + 5].sValue = 0;

ikiside değiştirilir

Kod:
m_aAttr[i + ITEM_ATTRIBUTE_RARE_START].bType = 0;         m_aAttr[i + ITEM_ATTRIBUTE_RARE_START].sValue = 0;

aranır

Kod:
if (count >= 2)

değiştirilir

Kod:
if (count >= ITEM_ATTRIBUTE_RARE_NUM)

aranır

Kod:
int pos = count + 5;

değiştirilir

Kod:
int pos = count + ITEM_ATTRIBUTE_RARE_START;

cpp nin en altına eklenir

Kod:
void CItem::AddRareAttribute2(const int * aiAttrPercentTable) {     static const int aiItemAddAttributePercent[ITEM_ATTRIBUTE_MAX_LEVEL] =     {         40, 50, 10, 0, 0     };     if (aiAttrPercentTable == NULL)         aiAttrPercentTable = aiItemAddAttributePercent;     if (GetRareAttrCount() < MAX_RARE_ATTR_NUM)         PutRareAttribute(aiAttrPercentTable); } void CItem::PutRareAttribute(const int * aiAttrPercentTable) {     int iAttrLevelPercent = number(1, 100);     int i;     for (i = 0; i < ITEM_ATTRIBUTE_MAX_LEVEL; ++i)     {         if (iAttrLevelPercent <= aiAttrPercentTable[i])             break;         iAttrLevelPercent -= aiAttrPercentTable[i];     }     PutRareAttributeWithLevel(i + 1); } void CItem::PutRareAttributeWithLevel(BYTE bLevel) {     int iAttributeSet = GetAttributeSetIndex();     if (iAttributeSet < 0)         return;     if (bLevel > ITEM_ATTRIBUTE_MAX_LEVEL)         return;     std::vector<int> avail;     int total = 0;     // ºÙÀÏ ¼ö ÀÖ´Â ¼Ó¼º ¹è¿À» ±¸Ãà     for (int i = 0; i < MAX_APPLY_NUM; ++i)     {         const TItemAttrTable & r = g_map_itemRare[i];         if (r.bMaxLevelBySet[iAttributeSet] && !HasRareAttr(i))         {             avail.push_back(i);             total += r.dwProb;         }     }     // ±¸ÃàµÈ ¹è¿·Î È®·ü °è»êÀ» ÅëÇØ ºÙÀÏ ¼Ó¼º ¼±Á¤     unsigned int prob = number(1, total);     int attr_idx = APPLY_NONE;     for (DWORD i = 0; i < avail.size(); ++i)     {         const TItemAttrTable & r = g_map_itemRare[avail[i]];         if (prob <= r.dwProb)         {             attr_idx = avail[i];             break;         }         prob -= r.dwProb;     }     if (!attr_idx)     {         sys_err("Cannot put item rare attribute %d %d", iAttributeSet, bLevel);         return;     }     const TItemAttrTable & r = g_map_itemRare[attr_idx];     // Á¾·ùº° ¼Ó¼º ·¹º§ ÃÖ´ë°ª Á¦ÇÑ     if (bLevel > r.bMaxLevelBySet[iAttributeSet])         bLevel = r.bMaxLevelBySet[iAttributeSet];     AddRareAttr(attr_idx, bLevel); } void CItem::AddRareAttr(BYTE bApply, BYTE bLevel) {     if (HasRareAttr(bApply))         return;     if (bLevel <= 0)         return;     int i = ITEM_ATTRIBUTE_RARE_START + GetRareAttrCount();     if (i == ITEM_ATTRIBUTE_RARE_END)         sys_err("item rare attribute overflow!");     else     {         const TItemAttrTable & r = g_map_itemRare[bApply];         long lVal = r.lValues[MIN(4, bLevel - 1)];         if (lVal)             SetForceAttribute(i, bApply, lVal);     } }

item_manager.h açılır
aranır

Kod:
const static int MAX_NORM_ATTR_NUM = 5;         const static int MAX_RARE_ATTR_NUM = 2;

değiştirilir

Kod:
const static int MAX_NORM_ATTR_NUM = ITEM_ATTRIBUTE_NORM_NUM;         const static int MAX_RARE_ATTR_NUM = ITEM_ATTRIBUTE_RARE_NUM;

game ile işimiz bu kadar şimdi dbye geçelim

db/src cache.cpp açılır
aranır

Kod:
if (isAttr)

komple değişilir

Kod:
if (isAttr)         {             iLen += snprintf(szColumns + iLen, sizeof(szColumns) - iLen,                     ", attrtype0, attrvalue0, attrtype1, attrvalue1, attrtype2, attrvalue2, attrtype3, attrvalue3"                     ", attrtype4, attrvalue4, attrtype5, attrvalue5, attrtype6, attrvalue6, attrtype7, attrvalue7");             iValueLen += snprintf(szValues + iValueLen, sizeof(szValues) - iValueLen,                     ", %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d",                     p->aAttr[0].bType, p->aAttr[0].sValue,                     p->aAttr[1].bType, p->aAttr[1].sValue,                     p->aAttr[2].bType, p->aAttr[2].sValue,                     p->aAttr[3].bType, p->aAttr[3].sValue,                     p->aAttr[4].bType, p->aAttr[4].sValue,                     p->aAttr[5].bType, p->aAttr[5].sValue,                     p->aAttr[6].bType, p->aAttr[6].sValue,                     p->aAttr[7].bType, p->aAttr[7].sValue);             iUpdateLen += snprintf(szUpdate + iUpdateLen, sizeof(szUpdate) - iUpdateLen,                     ", attrtype0=%d, attrvalue0=%d"                     ", attrtype1=%d, attrvalue1=%d"                     ", attrtype2=%d, attrvalue2=%d"                     ", attrtype3=%d, attrvalue3=%d"                     ", attrtype4=%d, attrvalue4=%d"                     ", attrtype5=%d, attrvalue5=%d"                     ", attrtype6=%d, attrvalue6=%d"                     ", attrtype7=%d, attrvalue7=%d",                     p->aAttr[0].bType, p->aAttr[0].sValue,                     p->aAttr[1].bType, p->aAttr[1].sValue,                     p->aAttr[2].bType, p->aAttr[2].sValue,                     p->aAttr[3].bType, p->aAttr[3].sValue,                     p->aAttr[4].bType, p->aAttr[4].sValue,                     p->aAttr[5].bType, p->aAttr[5].sValue,                     p->aAttr[6].bType, p->aAttr[6].sValue,                     p->aAttr[7].bType, p->aAttr[7].sValue);         }

clientmanager.cpp açılır
aranır

Kod:
"attrtype6, attrvalue6 "

değiştirilir

Kod:
"attrtype6, attrvalue6, "                 "attrtype7, attrvalue7 "

aranır

Kod:
"attrtype6, attrvalue6) "             "VALUES(%u, %u, %d, %d, %u, %u, %ld, %ld, %ld, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d)",

değiştirilir

Kod:
"attrtype6, attrvalue6, "             "attrtype7, attrvalue7) "             "VALUES(%u, %u, %d, %d, %u, %u, %ld, %ld, %ld, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d)",

aranır

Kod:
p->aAttr[6].bType, p->aAttr[6].sValue);

değiştirilir

Kod:
p->aAttr[6].bType, p->aAttr[6].sValue,             p->aAttr[7].bType, p->aAttr[7].sValue);

clientmanagerplayer.cpp açılır
aranır

Kod:
attrtype0,attrvalue0,attrtype1,attrvalue1,attrtype2,attrvalue2,attrtype3,attrvalue3,attrtype4,attrvalue4,attrtype5,attrvalue5,attrtype6,attrvalue6 "

değiştirilir

Kod:
attrtype0,attrvalue0,attrtype1,attrvalue1,attrtype2,attrvalue2,attrtype3,attrvalue3,attrtype4,attrvalue4,attrtype5,attrvalue5,attrtype6,attrvalue6,attrtype7,attrvalue7 "

aranır

Kod:
attrtype0,attrvalue0,attrtype1,attrvalue1,attrtype2,attrvalue2,attrtype3,attrvalue3,attrtype4,attrvalue4,attrtype5,attrvalue5,attrtype6,attrvalue6 "

değiştirilir

Kod:
attrtype0,attrvalue0,attrtype1,attrvalue1,attrtype2,attrvalue2,attrtype3,attrvalue3,attrtype4,attrvalue4,attrtype5,attrvalue5,attrtype6,attrvalue6,attrtype7,attrvalue7 "

common item_lenght.h açılır
aranır

Kod:
ITEM_ATTRIBUTE_MAX_NUM        = 7,

değiştirilir

Kod:
ITEM_ATTRIBUTE_NORM_NUM        = 6,     ITEM_ATTRIBUTE_RARE_NUM        = 2,     ITEM_ATTRIBUTE_NORM_START    = 0,     ITEM_ATTRIBUTE_NORM_END        = ITEM_ATTRIBUTE_NORM_START + ITEM_ATTRIBUTE_NORM_NUM,     ITEM_ATTRIBUTE_RARE_START    = ITEM_ATTRIBUTE_NORM_END,     ITEM_ATTRIBUTE_RARE_END        = ITEM_ATTRIBUTE_RARE_START + ITEM_ATTRIBUTE_RARE_NUM,     ITEM_ATTRIBUTE_MAX_NUM        = ITEM_ATTRIBUTE_RARE_END, // 8

client source userinterface/gametype.h açılır
aranır

Kod:
ITEM_ATTRIBUTE_SLOT_MAX_NUM

değiştirilir

Kod:
ITEM_ATTRIBUTE_SLOT_MAX_NUM = 8,

navicat item.sql tablosuna eklenir

Kod:
`attrtype7` tinyint(4) NOT NULL DEFAULT 0,   `attrvalue7` smallint(6) NOT NULL DEFAULT 0,

kanıt olarak

28883_3ad25e375e9b81f4ca7556f8ee5b81e5.jpg


fileste rare efsunları ekli değildi o yüzden rare efsunlarıyla beraber çekemedim fakat gördüğünüz gibi 6 efsun sorunsuz çalışıyor rebootta kaybolma gibi sorunu yoktur herkese iyi forumlar.
28903_df8d3ff1d8535d948f6ead9a7c827120.jpeg


daha önceden rare efsunlarıyla yaptığım kanıt

Laleci16 Kanıt

28927_db06aa9b4c83348a334676c43e8a210b.png

Normal veya Rare Efsun Sayısını Arttırma

Metin2 özel sunucularında oyun içi efsunlar, karakter gelişiminde önemli rol oynar. Bu efsunlar, oyuncuların zırh, silah veya diğer eşyalarını geliştirmelerini sağlar. Ancak bazı durumlarda, normal ya da rare (nadiren bulunan) efsunların sayısı yeterli olmayabilir. Bu yazıda, normal veya rare efsun sayısını arttırmak için kullanabileceğiniz yöntemlerden bahsedeceğiz.

Efsun Sistemine Genel Bakış

Efsun, Metin2 oyununda eşyaların rastgele özellikler kazanmasını sağlayan sistemdir. Oyuncular, eşyalarını yükseltmek için bu efsunları kullanırlar. Normal efsunlar, genellikle düşmanlardan veya sandıklardan elde edilirken, rare efsunlar daha nadir bulunur ve güçlü etkilere sahiptir.

Efsun Sayısını Arttırmanın Yöntemleri

1. Sunucu Tarafında Script ile Efsun Sayısı Ayarı

Sunucu geliştiricileri, C++ veya Python tabanlı sistemlerde efsun sayısını arttırmak için özel scriptler yazabilirler. Bu scriptler, oyuncuların belirli görevleri tamamlamasıyla veya belirli seviyeye ulaşmasıyla birlikte efsun verilebilmesini sağlar. Örneğin, bir oyuncu seviye atladığında otomatik olarak bir efsun paketi alabilir.

2. Event Sistemleri ile Efsun Kazandırma

Sunucularda düzenlenen özel etkinliklerle oyunculara bonus efsun verilebilir. Bu etkinlikler PvP veya PvE tabanlı olabilir. Oyuncular, etkinliklerde yüksek skorlar alarak veya belirli ödüller kazanarak rare efsunlara erişebilirler.

3. Paket Sistemleri ve Market Entegrasyonu

Oyunculara, oyun içi para veya gerçek para karşılığı satın alınabilen efsun paketleri sunulabilir. Bu paketlerde hem normal hem de rare efsunlar bulunabilir. Sunucu sahipleri, bu sistemleri özel market yapıları ile entegre ederek gelir elde edebilirler.

C++ ve Python ile Geliştirme

Metin2 özel sunucularında efsun sistemi, genellikle game core ve db core üzerinde çalışır. C++ dilinde yazılmış olan server src dosyaları üzerinde değişiklik yaparak efsun davranışlarını özelleştirebilirsiniz. Aynı zamanda Python ile yazılmış py root dosyalarında GUI tabanlı sistemlerle de efsun yönetimi yapılabilir.

Martysama ve Diğer Kaynaklar

Metin2 geliştiricileri arasında popüler olan Martysama gibi kaynaklar, efsun sistemi üzerinde çalışırken yardımcı olabilir. Bu tür kaynaklar sayesinde, script düzenlemeleri, client src üzerinde değişiklikler veya auth-server ile ilgili ayarlamalar kolayca yapılabilir.

Sonuç

Normal veya rare efsun sayısını arttırmak, Metin2 özel sunucularında oyuncu memnuniyetini artırır. Sunucu sahipleri, C++ ve Python bilgilerini kullanarak efsun sistemini özelleştirip, oyunculara daha fazla değer sunabilirler. Metin2Lobby üzerinden sunucu geliştirme konusunda destek alabilir ve kaynaklara erişebilirsiniz.


Increasing the Number of Normal or Rare Enchantments

In Metin2 private servers, enchantments play a crucial role in character progression. These enchantments allow players to enhance their armor, weapons, or other items. However, sometimes the number of normal or rare enchantments may not be sufficient. In this article, we will discuss methods for increasing the number of normal or rare enchantments.

Overview of the Enchantment System

Enchantments are part of the system that allows items in Metin2 to gain random properties. Players use these enchantments to upgrade their gear. Normal enchantments are usually obtained from monsters or chests, while rare enchantments are harder to find and provide stronger effects.

Methods of Increasing Enchantment Numbers

1. Setting Enchantment Amount via Scripts on Server Side

Server developers can write custom scripts based on C++ or Python to increase enchantment numbers. These scripts can reward players with enchantments upon completing certain quests or leveling up. For example, a player might receive an enchantment package automatically after gaining a level.

2. Awarding Enchantments Through Event Systems

Special events organized on servers can grant bonus enchantments to players. These events can be PvP or PvE-based. Players can earn rare enchantments by achieving high scores or winning rewards during events.

3. Package Systems and Shop Integration

Players can be offered enchantment packages purchasable with in-game or real money. These packages can include both normal and rare enchantments. Server owners can integrate such systems with special shop structures to generate revenue.

Development with C++ and Python

The enchantment system in Metin2 private servers generally operates on game core and db core. You can customize enchantment behaviors by modifying server src files written in C++. Additionally, enchantment management can be done via GUI-based systems within py root files written in Python.

Martysama and Other Resources

Martysama, popular among Metin2 developers, can assist when working on enchantment systems. Such resources make it easier to perform script modifications, client src adjustments, or settings related to the auth-server.

Conclusion

Increasing the number of normal or rare enchantments enhances player satisfaction in Metin2 private servers. Server owners can leverage their knowledge of C++ and Python to customize enchantment systems and offer more value to players. You can get support and access resources regarding server development through Metin2Lobby.
 

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

Geri
Üst Alt