İlan
05 Haz 2026 26 çevrimiçi üye Duyurular
Ana Sayfa C++ / C# / Python
Ana Sayfa Forum C++ / C# / Python Oynadıktan Sonra Oluşan Problemleri Ortadan Kaldır...
İlan Yan banner placeholder

Oynadıktan Sonra Oluşan Problemleri Ortadan Kaldırın!

ahmetads 02.04.2026 09:43 808 görüntüleme 29 cevap
Son Mesaj
ahmetads
Üye
Üye
Katılım26 Kas 2025
Konular8
Mesajlar66
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
02.04.2026 09:43 #1
Metin2 pvp serverler de bildiğiniz gibi itemlere 3 taş eklenebilmektedir fakat bu çok adaletli bir durum sayılmaz çünkü bir iteme savaşçı, sura, ninja taşı eklendiğinde şamanlar karşısında korumasız kalacaksınız ve oyuncular zorluk yaşayacaktır bu eşitliğin sağlanması adına sizlere source ile 4 taş eklemeyi anlatacağız. Bu sefer db üzerinde de değişiklik yapacağız. Sırası ile aşağıdaki işlemleri yapacağız.
1.common/item_lenght.h açıyoruz
Bu kodu Aratıyoruz.
Kod:
ITEM_SOCKET_MAX_NUM = 3,
Bulduktan sonra sonundaki 3'ü 4 yapıyoruz.
Kod:
ITEM_SOCKET_MAX_NUM = 4,
db/src/ClientManagerPlayer.cpp açıyoruz.
2.Arat
Kod:
str_to_number(item.alSockets[2], row[cur++]);
Altına ekle
C++:
str_to_number(item.alSockets[3], row[cur++]);

Son hali KIRMIZI İÇİNDEKİ GİBİ OLUCAKTIR.

3. Yine aynı dosya içerisinde aşağıdakini aratıyoruz.
Kod:
SELECT id,window+0,pos,count,vnum,socket0,socket1,socket2 ,attrtype0,attrvalue0,attrtype1,attrvalue1,attrtyp e2,attrvalue2,attrtype3,attrvalue3,attrtype4,attrv alue4,attrtype5,attrvalue5,attrtype6,attrvalue6
aratıyoruz ve aşağıdaki ile değiştiriyoruz.
Kod:
SELECT id,window+0,pos,count,vnum,socket0,socket1,socket2,socket3,attrtype0,attrvalue0,attrtype1,attrvalue1,attrtype2,attrvalue2,attrtype3,attrvalue3,attrtype4,attrvalue4,attrtype5,attrvalue5,attrtype6,attrvalue6
Son görüntüsü aşağıdaki gibi olacaktır.


4. Aynı dosya içerisinde aşağıdaki kodu aratıyor ve değiştiriyoruz.
Kod:
SELECT id,window+0,pos,count,vnum,socket0,socket1,socket2,attrtype0,attrvalue0,attrtype1,attrvalue1,attrtype2,attrvalue2,attrtype3,attrvalue3,attrtype4,attrvalue4,attrtype5,attrvalue5,attrtype6,attrvalue6

Aşağıdaki ile değiştiriyoruz.
Kod:
SELECT id,window+0,pos,count,vnum,socket0,socket1,socket2,socket3,attrtype0,attrvalue0,attrtype1,attrvalue1,attrtype2,attrvalue2,attrtype3,attrvalue3,attrtype4,attrvalue4,attrtype5,attrvalue5,attrtype6,attrvalue6
Son görüntü aşağıdaki gibi olacaktır.


5. Clientmanager.cpp açıyoruz ve aşağıdakini aratıyoruz.
Kod:
SELECT id, window+0, pos, count, vnum, socket0, socket1, socket2
Aşağıdaki ile değiştiriyoruz.
Kod:
SELECT id, window+0, pos, count, vnum, socket0, socket1, socket2, socket3
Son görüntü aşağıdaki gibi olacaktır.


6. Cache.cpp açılır ve aşağıdaki aratılır.
Kod:
iLen += snprintf(szColumns + iLen, sizeof(szColumns)  iLen, , socket0, socket1, socket2, socket3);
Aratıyoruz ve resimdeki gibi değiştiriyoruz komple. Aşağıda yazan kod ile.
C++:
   if (isSocket)
                {
                        iLen += snprintf(szColumns + iLen, sizeof(szColumns) - iLen, ", socket0, socket1, socket2, socket3");
                        iValueLen += snprintf(szValues + iValueLen, sizeof(szValues) - iValueLen,
                                        ", %lu, %lu, %lu, %lu", p->alSockets[0], p->alSockets[1], p->alSockets[2], p->alSockets[3]);
                        iUpdateLen += snprintf(szUpdate + iUpdateLen, sizeof(szUpdate) - iUpdateLen,
                                        ", socket0=%lu, socket1=%lu, socket2=%lu, socket3=%lu", p->alSockets[0], p->alSockets[1], p->alSockets[2], p->alSockets[3]);
                }
Kod:
http://pastebin.com/4M57yqci Yukarıdaki  kodun copy paste'deki hali.


7.Game içerisinde constants.cpp açıyoruz ve aiWeaponSocketQty[WEAPON_NUM_TYPES]
aratıyoruz ve resimdeki gibi değiştiriyoruz.

Kod:
const int32_t aiWeaponSocketQty[WEAPON_NUM_TYPES] =
{
    4, // WEAPON_SWORD,
    4, // WEAPON_DAGGER,
    4, // WEAPON_BOW,
    4, // WEAPON_TWO_HANDED,
    4, // WEAPON_BELL,
    4, // WEAPON_FAN,
    0, // WEAPON_ARROW,
    0, // WEAPON_MOUNT_SPEAR
};
arat : aiArmorSocketQty[ARMOR_NUM_TYPES] =
bunun gibi 4 yap armmor body:
const int32_t aiArmorSocketQty[ARMOR_NUM_TYPES] =
{
    4, // ARMOR_BODY,
    1, // ARMOR_HEAD,
    1, // ARMOR_SHIELD,
    0, // ARMOR_WRIST,
    0, // ARMOR_FOOTS,
    0  // ARMOR_ACCESSORY
};
İşlemlerimiz server taraflı olarak tamamlanmış oldu. Şimdi yapmamız gereken son işlem ise client taraflı olarak değişim yapmaktır.
8. Adım da client içerisinde userinterface/gametype.h içersinde ITEM_SOCKET_SLOT_MAX_NUM
aratıyoruz ve karşısındaki 3 sayısını 4 ile değiştiriyoruz son durum aşağıdaki gibi olacaktır.



İşlemlerimiz tamamlanmış oldu fakat oyun içerisine her 3 taş basılan iteme 4. taşı basamazsınız sebebi ise item_proto içerisinde iteme basılacak taş sayısından kaynaklıdır. Bu işlemi sadece item_proto yani navicat mysql üzerinden yapacağız sakın locale içerisindekini değiştirmeyin item parlamaları bozlur! Bu işlemin kısa yolu için aşağıdaki query kodunu kullanabilirsiniz.
Kod:
UPDATE item_proto SET socket_pct=4 WHERE socket_pct=3
Şeklinde bütün 3 taş basılan itemleri 4e çekebilirsiniz.
UYARI!
4 taş ekledikten sonra serverinizde iç görü küresi çalışmayabilir bunun çözümü için client üzerinde değişiklik yapmanız gerekiyor onun içinde Aşagıya inin

Metin2 Depo Bugu Çözümü

Merhaba arkadaşlar bildiğiniz gibi size metin2 de bir iteme 4 taş eklemeyi anlatmıştık fakat sistemde şöyle bir bug mevcut misalen 4 taş basılan bir iteminiz var siz bu itemi depoya koydunuz ve tekrar geri aldınız artık item 4 değil 3 taş basılabiliyor veya 4 taş basmışken teki kayboluyor. Çözümü biraz uğraştırsada sonunda gözden kaçan ufak bir koddan sonra çözdük sorunu ve sizlerle paylaşmak istedik çözümü işlemlerini db source üzerinden yapacağız.
Kod:
Db/src/clientmanager.cpp açıyoruz.
Kod:
void CClientManager::QUERY_ITEM_SAVE(CPeer * pkPeer, const char * c_pData)
aratıyoruz ve biraz aşağı indiğimizde
Kod:
REPLACE INTO item%s (id, owner_id, window, pos, count, vnum, socket0, socket1, socket2,
satırı görüyoruz bu kısımı şu şekilde değiştiriyoruz.
Kod:
REPLACE INTO item%s (id, owner_id, window, pos, count, vnum, socket0, socket1, socket2, socket3,
şeklinde Değiştirin.
aşağıda Kod:
VALUES(%u, %u, %d, %d, %u, %u, %ld, %ld, %ld, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d)
burası mevcut burayıda bununla değiştiriyoruz.

Kod:
VALUES(%u, %u, %d, %d, %u, %u, %ld, %ld, %ld, %ld, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d)
ile değiştiriyoruz.
Kod:
p->alSockets[2], altına p->alSockets[3],
ekliyoruz ve işlemimiz tamamlanmıştır aşağıdaki resimde kırmızı ile gösterilen kısımlar eklenecek kısımlardır.

Depo bugu Sona ermiştir.
Item Yansıtma Sorunu İçin Gerekli işlemler Aşağıda Yapılıcaktır Sırasıyla.

Bugün yeni açılan bir serverde item yansıtmada sorun olduğunu fark ettim server 40k yani source kodlara sahip ve onlar üzerinden yapılmış bir server item bağırma alanına ekleniyor fakat mouse ile tıklanıldığında iteme ait bilgiler gözükmemekte ilk başta clientte sorun olduğunu düşünüp gerekli düzenlemeleri yapmama rağmen hiç bir şekilde başarılı sonucu ulaşamadım sonrasında biraz araştırma ile sorunun 4. taştan olduğunu fark ettim çözümü için clienti kendiniz düzenlemelisiniz. Çözüm gayet kolay 3 adet dosyadaki değişim ile çözülmektedir.

  1. 1.Client içerisinde userinterface/pythonplayermodule.cpp içerisinde playerGetItemLink aratıyoruz ve kod blogunu aşağıdaki gibi değiştiriyoruz.
  2. Kod:
    http://pastebin.com/4HBUkKJe
  3. Linkteki kod:
    PyObject * playerGetItemLink(PyObject * poSelf, PyObject * poArgs)
    {
                     TItemPos Cell;
    
                     switch (PyTuple_Size(poArgs))
                     {
                     case 1:
                             if (!PyTuple_GetInteger(poArgs, 0, &Cell.cell))
                                     return Py_BuildException();
                             break;
                     case 2:
                             if (!PyTuple_GetByte(poArgs, 0, &Cell.window_type))
                                     return Py_BuildException();
                             if (!PyTuple_GetInteger(poArgs, 1, &Cell.cell))
                                     return Py_BuildException();
                             break;
                     default:
                             return Py_BuildException();
                     }
                     const TItemData * pPlayerItem = CPythonPlayer::Instance().GetItemData(Cell);
                     CItemData * pItemData = NULL;
                     char buf[1024];
    
                     if (pPlayerItem && CItemManager::Instance().GetItemDataPointer(pPlayerItem->vnum, &pItemData))
                     {
                             char itemlink[256];
                             int len;
                             bool isAttr = false;
    
                             len = snprintf(itemlink, sizeof(itemlink), "item:%x:%x:%x:%x:%x:%x:%x:%x",
                                             pPlayerItem->vnum, pPlayerItem->flags,
                                             pPlayerItem->alSockets[0], pPlayerItem->alSockets[1], pPlayerItem->alSockets[2] , pPlayerItem->alSockets[3],  pPlayerItem->alSockets[4],  pPlayerItem->alSockets[5]);
    
                             for (int i = 0; i < ITEM_ATTRIBUTE_SLOT_MAX_NUM; ++i)
                                     if (pPlayerItem->aAttr[i].bType != 0)
                                     {
                                             len += snprintf(itemlink + len, sizeof(itemlink) - len, ":%x:%d",
                                                             pPlayerItem->aAttr[i].bType, pPlayerItem->aAttr[i].sValue);
                                             isAttr = true;
                                     }
    
    
                             if( GetDefaultCodePage() == CP_ARABIC ) {
                                     if (isAttr)
                                             //"item:¹øÈ£:Ç÷¡±×:¼ÒÄÏ0:¼ÒÄÏ1:¼ÒÄÏ2"
                                             snprintf(buf, sizeof(buf), " |h|r[%s]|cffffc700|H%s|h", pItemData->GetName(), itemlink);
                                     else
                                             snprintf(buf, sizeof(buf), " |h|r[%s]|cfff1e6c0|H%s|h", pItemData->GetName(), itemlink);
                             } else {
                                     if (isAttr)
                                             //"item:¹øÈ£:Ç÷¡±×:¼ÒÄÏ0:¼ÒÄÏ1:¼ÒÄÏ2"
                                             snprintf(buf, sizeof(buf), "|cffffc700|H%s|h[%s]|h|r", itemlink, pItemData->GetName());
                                     else
                                             snprintf(buf, sizeof(buf), "|cfff1e6c0|H%s|h[%s]|h|r", itemlink, pItemData->GetName());
                             }
                     }
                     else
                             buf[0] = '\0';
    
                     return Py_BuildValue("s", buf);
    }
  4. Son durum aşağıdaki gibi olacaktır.

    2. Client içerisinde userinterface/pythonchatmodule.cpp açıyoruz ve chatGetLinkFromHyperlink aratıyoruz ve aşağıdaki ile değiştiriyoruz.
    Kod:
    http://pastebin.com/gLehYrax
  5. kod:
    PyObject * chatGetLinkFromHyperlink(PyObject * poSelf, PyObject * poArgs)
    {
                     char * szHyperlink;
               
                     if (!PyTuple_GetString(poArgs, 0, &szHyperlink))
                             return Py_BuildException();
    
                     std::string stHyperlink(szHyperlink);
                     std::vector<std::string> results;
    
                     split_string(stHyperlink, ":", results, false);
    
                     // item:vnum:flag:socket0:socket1:socket2:socket3:socket4:socket5
                     if (0 == results[0].compare("item"))
                     {
                             if (results.size() < 9)
                                     return Py_BuildValue("s", "");
    
                             CItemData * pItemData = NULL;
    
                             if (CItemManager::Instance().GetItemDataPointer(htoi(results[1].c_str()), &pItemData))
                             {
                                     char buf[1024] = { 0 };
                                     char itemlink[256];
                                     int len;
                                     bool isAttr = false;
    
                                     len = snprintf(itemlink, sizeof(itemlink), "item:%x:%x:%x:%x:%x:%x:%x:%x",
                                                     htoi(results[1].c_str()),
                                                     htoi(results[2].c_str()),
                                                     htoi(results[3].c_str()),
                                                     htoi(results[4].c_str()),
                                                     htoi(results[5].c_str()),
                                                     htoi(results[6].c_str()),
                                                     htoi(results[7].c_str()),
                                                     htoi(results[8].c_str()));
    
                                     if (results.size() >= 11)
                                     {
                                             for (int i = 9; i < results.size(); i += 2)
                                             {
                                                     len += snprintf(itemlink + len, sizeof(itemlink) - len, ":%x:%d",
                                                                     htoi(results[i].c_str()),
                                                                     atoi(results[i+1].c_str()));
                                                     isAttr = true;
                                             }
                                     }
    
                                     if (isAttr)
                                             //"item:¹øÈ£:Ç÷¡±×:¼ÒÄÏ0:¼ÒÄÏ1:¼ÒÄÏ2"
                                             snprintf(buf, sizeof(buf), "|cffffc700|H%s|h[%s]|h|r", itemlink, pItemData->GetName());
                                     else
                                             snprintf(buf, sizeof(buf), "|cfff1e6c0|H%s|h[%s]|h|r", itemlink, pItemData->GetName());
    
                                     return Py_BuildValue("s", buf);
                             }
                     }
    
                     return Py_BuildValue("s", "");
    }
    LİNKTE BULUNAN İLE DEĞİŞİCEKTİR.
uiinventory.py

Aratılır:

Kod:
C++:
if attrCount<4:


Değiştirilir:

Kod:
C++:
if attrCount<5:


Hayırlı Olsun.


Db/src/clientmanager.cpp açıyoruz.

Aratıyoruz :
Kod:
C++:
void CClientManager::QUERY_ITEM_SAVE(CPeer * pkPeer, const char * c_pData
Kod Bloğunda Buluyoruz :
Kod:
C++:
REPLACE INTO item%s (id, owner_id, window, pos, count, vnum, socket0, socket1, socket2,
Aşağıdaki Şekilde Değiştiriyoruz :

Kod:
C++:
REPLACE INTO item%s (id, owner_id, window, pos, count, vnum, socket0, socket1, socket2, socket3,

Aratıyoruz :
Kod:
C++:
VALUES(%u, %u, %d, %d, %u, %u, %ld, %ld, %ld, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d)
Aşagıdaki Şekilde Değiştiriyoruz :
Kod:

C++:
VALUES(%u, %u, %d, %d, %u, %u, %ld, %ld, %ld, %ld, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d)

Aratıyoruz :
Kod:
C++:
p->alSockets[2],


Altına Ekliyoruz :
Kod:
C++:
p->alSockets[3],


Son hali aşağıdaki gibi olacaktır.


3. Ve son olarak root içerisindeki uitooltip.py içerisinde def SetHyperlinkItem(self, tokens): aratılır ve aşağıdaki ile değiştirilir.
Kod:
http://pastebin.com/guY1jL6N DEĞİŞTİRİLİR
  1. kod:
            def SetHyperlinkItem(self, tokens):
                             minTokenCount = 3 + player.METIN_SOCKET_MAX_NUM
                             maxTokenCount = minTokenCount + 2 * player.ATTRIBUTE_SLOT_MAX_NUM
                             if tokens and len(tokens) >= minTokenCount and len(tokens) <= maxTokenCount:
                                     head, vnum, flag = tokens[:3]
                                     itemVnum = int(vnum, 16)
                                     metinSlot = [int(metin, 16) for metin in tokens[3:9]]
    
                                     rests = tokens[9:]
                                     if rests:
                                             attrSlot = []
    
                                             rests.reverse()
                                             while rests:
                                                     key = int(rests.pop(), 16)
                                                     if rests:
                                                             val = int(rests.pop())
                                                             attrSlot.append((key, val))
    
                                             attrSlot += [(0, 0)] * (player.ATTRIBUTE_SLOT_MAX_NUM - len(attrSlot))
                                     else:
                                             attrSlot = [(0, 0)] * player.ATTRIBUTE_SLOT_MAX_NUM
    
                                     self.ClearToolTip()
                                     self.AddItemData(itemVnum, metinSlot, attrSlot)
    
                                     ItemToolTip.OnUpdate(self)


    Son hali Aşagıdaki gibi olucaktır.

    İşlem tamamlanmıştır artık sorunsuz bir biçimde itemlerinizi yansıtabileceksiniz bu işlem sadece 4 taş için değil 6 taş içinde yapmış olduk.

Binek bugu için Fix
arat
Kod:
https://paste2.org/tenbEYBp
değiştir
Kod:
https://paste2.org/vN4X8ys3


Daha temiz anlatım için zip dosyasında defineli yapı bırakıldı.
ahmetads
Üye
Üye
Katılım26 Kas 2025
Konular8
Mesajlar66
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
23.04.2026 08:50 #2
Güncel Deneyip Test Eden arkadaşlardan Fotoğraf Alınıp konuya Dahil Edilecektir. [BILGINIZE]
ahmetads
Üye
Üye
Katılım26 Kas 2025
Konular8
Mesajlar66
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
03.05.2026 03:37 #3
1-2 bug daha var onların çözümlerini bilenler ulastırabilirse eklerim.
SacmaSapan
Üye
Üye
Katılım01 Nis 2026
Konular6
Mesajlar88
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
06.05.2026 16:08 #4
Konu sahibi Benim Alıntı Diye Belirt Oraya bu 1.cisi 2.cisi eksik var 3.cüsü binek bugu var 4.cüsü yansıtma problemi var 5.cisi itemin navicata geç gelme problemi var konunda 6.cısı kanıtın yok dostum Bildilirdi @Pelin Melek Aslan; @qecekondu06;
ismoz
Üye
Üye
Katılım06 Oca 2026
Konular3
Mesajlar56
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
06.05.2026 21:05 #5
Konu sahibi Benim Alıntı Diye Belirt Oraya bu 1.cisi 2.cisi eksik var 3.cüsü binek bugu var 4.cüsü yansıtma problemi var 5.cisi itemin navicata geç gelme problemi var konunda 6.cısı kanıtın yok dostum Bildilirdi @Pelin Melek Aslan; @qecekondu06;
@AsiPly;

Konu üzerin de bahsedilen hatalar mevcut ise düzeltiniz o şekilde paylaşımınız aktif olsun diğer türlü insanlar hatalı eklentiler yapmasın eğer hata mevcutsa tabi

- Konuya 24 saat içerisin de çalıştığına dair kanıt eklentisi yapınız.
Neomly
Üye
Üye
Katılım21 Şub 2026
Konular8
Mesajlar64
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
07.05.2026 09:38 #6
@AsiPly;

Konu üzerin de bahsedilen hatalar mevcut ise düzeltiniz o şekilde paylaşımınız aktif olsun diğer türlü insanlar hatalı eklentiler yapmasın eğer hata mevcutsa tabi

- Konuya 24 saat içerisin de çalıştığına dair kanıt eklentisi yapınız.

Sorunsuz Çalışıyor Konuyu Kirletmenin Bir Anlamı Yoktur Ben Ekledım Arkadaşın Aldıgı Siteyide Biliyorum Kendimde Ordan Ekledım metin2rahberi Öyle Birşeydi Sorunsuz Çalışıyor Bütün Hepsını Denedım Bir Tek Çalışan Buydu

Konu İçin Teşekkurler
SacmaSapan
Üye
Üye
Katılım01 Nis 2026
Konular6
Mesajlar88
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
07.05.2026 21:24 #7
@AsiPly;

Konu üzerin de bahsedilen hatalar mevcut ise düzeltiniz o şekilde paylaşımınız aktif olsun diğer türlü insanlar hatalı eklentiler yapmasın eğer hata mevcutsa tabi

- Konuya 24 saat içerisin de çalıştığına dair kanıt eklentisi yapınız.

Söylediğim hatalar mevcut zaten depoya koyup reboot atsn bakaym zaten ben oaylaştktan sonra MMOZirvedan kopyaladılar pvpsemti vs siteler ne diyem kim ne isterse onu kullansın
enesdonmez
Üye
Üye
Katılım18 Ara 2025
Konular7
Mesajlar59
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
07.05.2026 21:32 #8
konuda baya kod eksikliği varr bilmiyorsanız paylaşım yapmayın arkadaşlar yazık ya inanın yazık
Bu konuyu görüntüleyenler
1 misafir
Cevap yazmak için giriş yapın.
Benzer Konular
6 cevap
2K görüntüleme
9 cevap
1.9K görüntüleme
4 cevap
1.9K görüntüleme
8 cevap
1.9K görüntüleme
İlan Yan banner placeholder