Çözüldü Game.Core Veriyor

Bu konu çözüme ulaştırılmıştır. Çözüm için konuya yazılan tüm yorumları okumayı unutmayın. Eğer konudaki yorumlar sorununuzu çözmediyse yeni bir konu açabilirsiniz.
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.

LethalStrikeR

Yardımsever Üye
Yardımsever Üye
Üye
Mesaj
688
Çözümler
41
Beğeni
163
Puan
609
Merhaba;
Sysserda bunlar yazıyor debug edemediğim için sorun tam olarak nerede anlayamıyorum.

Kod:
SYSERR: Nov 28 01:36:06 :: P2PJoin: member is not in same channel PID: 30 channel 2, this channel 1
SYSERR: Nov 28 01:36:06 :: P2PJoin: member is not in same channel PID: 27 channel 2, this channel 1
SYSERR: Nov 28 01:36:06 :: P2PJoin: member is not in same channel PID: 46 channel 2, this channel 1

Bu sysserdan sonra kanallar kapanıyor. Game.core debug da edemiyorum yardımcı olur musunuz?
 
Çözüm
Biraz geç baktığım için kusura bakmayın. Yazılan mesajları okudum hep. Kodları tek tek ayrıntılı olarak eklediğiniz için teşekkürler. Sizin için zaman almıştır. Kodları biraz inceledim ve sanırsam sorunun kaynağını buldum.
Buna ek olarak mesajlarınızda eklediğiniz harici linkleri kaldırdım. Çünkü çözümü sağlayacak yararlı bir bilgi bulunmuyor.
Her neyse geçelim kodlara...

.core hatasına göre şu kodlar çalışırken çöküyor;
C++:
                                owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("??? ??: %s ????? %s"), GetName(), item2->GetName());
                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("??? ??: %s ??? %s"), owner->GetName(), item2->GetName());


Konuda verdiğiniz kodda locale_string.txt'e çeviri...
Onada baktım fakat syslogta ch düşürmeyi tetikleyen bir sys yok. Sunucunun gcc sürümümden kaynaklı bir durum olabilir mi?
 
syslogta en son yapılan işlemlere bakmak lazım örneğin dungeona girme vs özel birşey olmalı ch kapanma sıklığı vs

gcc sürümünden kaynaklanması imkansız gibi birşey gibi game core dosyan boyutu küçükse buraya at açmaya çalışalım
 
pkg info yazıp çıkanları yazabilir misiniz buraya?
 
pkg info yazıp çıkanları yazabilir misiniz buraya?
Kod:
root@turkmmo:~ # pkg info
binutils-2.33.1_2,1            GNU binary tools
boost-libs-1.72.0_2            Free portable C++ libraries (without Boost.Python)
expat-2.2.8                    XML 1.0 parser written in C
gcc8-8.4.0                     GNU Compiler Collection 8
gdb-9.2_2                      GNU GDB of newer version than comes with the system
gettext-runtime-0.20.2         GNU gettext runtime libraries and programs
gmake-4.3_2                    GNU version of 'make' utility
gmp-6.2.0                      Free library for arbitrary precision arithmetic
icu-67.1,1                     International Components for Unicode (from IBM)
indexinfo-0.3.1                Utility to regenerate the GNU info page index
libffi-3.3_1                   Foreign Function Interface
libffi321-3.2.1_2              Foreign Function Interface (stripped down compat version)
libiconv-1.16                  Character set conversion library
mpc-1.1.0_2                    Library of complex numbers with arbitrarily high precision
mpfr-4.0.2                     Library for multiple-precision floating-point computations
mysql55-client-5.5.62_3        Multithreaded SQL database (client)
mysql55-server-5.5.62_3        Multithreaded SQL database (server)
pkg-1.15.10                    Package manager
python27-2.7.18                Interpreted object-oriented programming language
python37-3.7.9                 Interpreted object-oriented programming language
readline-8.0.4                 Library for editing command lines as they are typed
source-highlight-3.1.9_1       C/C++ and Java sources to HTML converter
 
gdb 9 kurulu sizde
gdb922 şeklinde yazmayı deneyin
 
gdb 9 kurulu sizde
gdb922 şeklinde yazmayı deneyin
Kod:
root@turkmmo:/usr/game/cores/channel1 # gdb922
gdb922: Command not found.
root@turkmmo:/usr/game/cores/channel1 #

gdb 9 kurulu sizde
gdb922 şeklinde yazmayı deneyin
coreyi açabildim.
Kod:
(gdb) bt
#0  0x28a4242d in ?? ()
#1  0x28a5878c in ?? ()
#2  0x293322a2 in ?? ()
#3  0x28a375fb in ?? ()
#4  0xfffffffc in ?? ()
#5  0xffff9c0c in ?? ()
#6  0x2896cfc9 in ?? ()
#7  0xffff9d90 in ?? ()
#8  0x0807deee in CHARACTER::ChatPacket (this=this@entry=0x4c435000,
    type=type@entry=1 '\001',
    format=0x2933228c "2.Bilinmeyen % hata %s (Bu hatay\375 al\375yorsan\375z l\374tfen y\366neticiye bildiriniz.)") at char.cpp:5038
#9  0x080bbe73 in CHARACTER::PickupItem (this=0x4c435000, dwVID=2056)
    at char_item.cpp:6674
#10 0x294163ae in ?? ()
#11 0x4c435000 in ?? ()
#12 0x08177cf0 in CInputMain::ItemPickup (data=0x81f6000c "\017\b\b",
    ch=0x4c435000, this=0x2919869c) at input_main.cpp:1002
#13 CInputMain::Analyze (this=0x2919869c, d=0x29198600, bHeader=15 '\017',
    c_pData=0x81f6000c "\017\b\b") at input_main.cpp:3400
#14 0x08160e0d in CInputProcessor::Process (this=0x2919869c,
    lpDesc=0x29198600, c_pvOrig=<optimized out>,
    r_iBytesProceed=@0xffffa7c8: 12, iBytes=<optimized out>) at input.cpp:103
--Type <RET> for more, q to quit, c to continue without paging--
 
Heh sonunda neden crash attığını anlayabileceğiz. Sanırsam eklediğiniz bir sistemden kaynaklı çökme var.
2.Bilinmeyen bunu server kaynak kodlarında aratın ve bulduğunuz kodu ekler misiniz?
Zaten hatada dosyayı ve satır numarasını veriyor.
 
Heh sonunda neden crash attığını anlayabileceğiz. Sanırsam eklediğiniz bir sistemden kaynaklı çökme var.
2.Bilinmeyen bunu server kaynak kodlarında aratın ve bulduğunuz kodu ekler misiniz?
Zaten hatada dosyayı ve satır numarasını veriyor.
O yazdığınızı arattım ama yok öyle bir şey. size ben corede veren hataların kod bloklarını atayım en iyisi; (Hata satırlarını kalın yazıyla yazdım)
Char.cpp;(Satır:5038)
HATA VEREN SATIR: int len = vsnprintf(chatbuf, sizeof(chatbuf), format, args);
C++:
void CHARACTER::ChatPacket(BYTE type, const char * format, ...)
{
    LPDESC d = GetDesc();

    if (!d || !format)
        return;

    char chatbuf[CHAT_MAX_LEN + 1];
    va_list args;

    va_start(args, format);
    [B]int len = vsnprintf(chatbuf, sizeof(chatbuf), format, args);[/B]
    va_end(args);

    struct packet_chat pack_chat;

    pack_chat.header    = HEADER_GC_CHAT;
    pack_chat.size      = sizeof(struct packet_chat) + len;
    pack_chat.type      = type;
    pack_chat.id        = 0;
    pack_chat.bEmpire   = d->GetEmpire();

    TEMP_BUFFER buf;
    buf.write(&pack_chat, sizeof(struct packet_chat));
    buf.write(chatbuf, len);

    d->Packet(buf.read_peek(), buf.size());

    if (type == CHAT_TYPE_COMMAND && test_server)
        sys_log(0, "SEND_COMMAND %s %s", GetName(), chatbuf);
}
Char_item.cpp (Satır:6674)
HATA VEREN SATIR: ChatPacket(CHAT_TYPE_INFO, LC_TEXT("??? ??: %s ??? %s"), owner->GetName(), item2->GetName());
Locale_sttring.txt dosyamda ben eklemiştim
Sürekli locale_error veriyordu sysserda;

Kod:
"??? ??: %s ??? %s";
"2.Bilinmeyen % hata %s (Bu hatay?al?orsan? l?fen y?eticiye bildiriniz.)";

Kod:
"??? ??: %s ????? %s";
"Bilinmeyen: %s hata %s (Bu hatay?al?orsan? l?fen y?eticiye bildiriniz.)";

"??? ??: %s ????? %s";
"Bilinmeyen: %s hata %s (Bu hatay?al?orsan? l?fen y?eticiye bildiriniz.)";
C++:
                            if (j != ITEM_SOCKET_MAX_NUM)
                                continue;

                            BYTE bCount2 = MIN(200 - item2->GetCount(), bCount);
                            bCount -= bCount2;

                            item2->SetCount(item2->GetCount() + bCount2);

                            if (bCount == 0)
                            {
                                owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("??? ??: %s ????? %s"), GetName(), item2->GetName());
                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("??? ??: %s ??? %s"), owner->GetName(), item2->GetName());
                                M2_DESTROY_ITEM(item);
                                if (item2->GetType() == ITEM_QUEST)
                                    quest::CQuestManager::instance().PickupItem(owner->GetPlayerID(), item2);
                                return true;
                            }
                        }
                    }
                    item->SetCount(bCount);
İnput_main.cpp (SATIR 1002)
HATA VEREN KOD: ch->PickupItem(pinfo->vid);
C++:
void CInputMain::ItemPickup(LPCHARACTER ch, const char * data)
{
    struct command_item_pickup * pinfo = (struct command_item_pickup*) data;
    if (ch)
        ch->PickupItem(pinfo->vid);
}
İnput_main.cpp (SATIR 3400)
HATA VEREN KOD: ItemPickup(ch, c_pData);
C++:
        case HEADER_CG_ITEM_PICKUP:
            if (!ch->IsObserverMode())
                ItemPickup(ch, c_pData);
            break;
input.cpp (satır:103)
HATA VEREN SATIR: int iExtraPacketSize = Analyze(lpDesc, bHeader, c_pData);
C++:
        if (bHeader)
        {
            if (test_server && bHeader != HEADER_CG_MOVE)
                sys_log(0, "Packet Analyze [Header %d][bufferLeft %d] ", bHeader, m_iBufferLeft);

            m_pPacketInfo->Start();

            int iExtraPacketSize = Analyze(lpDesc, bHeader, c_pData);

            if (iExtraPacketSize < 0)
                return true;

            iPacketLen += iExtraPacketSize;
            lpDesc->Log("%s %d", c_pszName, iPacketLen);
            m_pPacketInfo->End();
        }
 
Son düzenleme:
1-
syslog'a SEND_COMMAND adlı bir log düşüyor mu ? Düşüyorsa buraya atın.

2- Şu kod bloğunu konuya ekleyin lütfen
C:
bool CHARACTER::PickupItem(DWORD dwVID)

Not: Sorunu başka yerlerde aramaya gerek yok pickupitem fonksiyonundan kaynaklanan bir sorun var. Yerden item almayla alakalı bir sistem eklediniz mi ?
 
1-
syslog'a SEND_COMMAND adlı bir log düşüyor mu ? Düşüyorsa buraya atın.

2- Şu kod bloğunu konuya ekleyin lütfen
C:
bool CHARACTER::PickupItem(DWORD dwVID)

Not: Sorunu başka yerlerde aramaya gerek yok pickupitem fonksiyonundan kaynaklanan bir sorun var. Yerden item almayla alakalı bir sistem eklediniz mi ?
Bu arada sıkıntılı kod bu sanırım ama ne anlama geldiğini anlamadım diğer fileslarla karşılaştırdım hiç birinide yoktu.

C++:
                            if (bCount == 0)
                            {
                                owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("??? ??: %s ????? %s"), GetName(), item2->GetName());
                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("??? ??: %s ??? %s"), owner->GetName(), item2->GetName());
                                M2_DESTROY_ITEM(item);
                                if (item2->GetType() == ITEM_QUEST)
                                    quest::CQuestManager::instance().PickupItem(owner->GetPlayerID(), item2);
                                return true;
                            }

O kod bloğu böyleydi;
C++:
bool CHARACTER::PickupItem(DWORD dwVID)
{
    LPITEM item = ITEM_MANAGER::instance().FindByVID(dwVID);

    if (IsObserverMode())
        return false;

    if (!item || !item->GetSectree())
        return false;

    if (item->DistanceValid(this))
    {
        if (item->IsOwnership(this))
        {
            // ¸¸¾à ÁÖÀ¸·Á ÇÏ´Â ¾ÆÀÌÅÛÀÌ ¿¤Å©¶ó¸é
            if (item->GetType() == ITEM_ELK)
            {
                GiveGold(item->GetCount());
                item->RemoveFromGround();

                M2_DESTROY_ITEM(item);

                Save();
            }
            // Æò¹üÇÑ ¾ÆÀÌÅÛÀ̶ó¸é
            else
            {
                if (item->IsStackable() && !IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_STACK))
                {
                    BYTE bCount = item->GetCount();

#ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
                    for (int i = 0; i < INVENTORY_AND_EQUIP_SLOT_MAX; ++i)
#else
                    for (int i = 0; i < INVENTORY_MAX_NUM; ++i)
#endif
                    {
                        LPITEM item2 = GetInventoryItem(i);

                        if (!item2)
                            continue;

                        if (item2->GetVnum() == item->GetVnum())
                        {
                            int j;

                            for (j = 0; j < ITEM_SOCKET_MAX_NUM; ++j)
                                if (item2->GetSocket(j) != item->GetSocket(j))
                                    break;

                            if (j != ITEM_SOCKET_MAX_NUM)
                                continue;

                            BYTE bCount2 = MIN(g_bItemCountLimit - item2->GetCount(), bCount);
                            bCount -= bCount2;

                            item2->SetCount(item2->GetCount() + bCount2);

                            if (bCount == 0)
                            {
                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("kazandin %s"), item2->GetName());
                                M2_DESTROY_ITEM(item);
                                if (item2->GetType() == ITEM_QUEST)
                                    quest::CQuestManager::instance().PickupItem (GetPlayerID(), item2);
                                return true;
                            }
                        }
                    }

                    item->SetCount(bCount);
                }

                int iEmptyCell;
                if (item->IsDragonSoul())
                {
                    if ((iEmptyCell = GetEmptyDragonSoulInventory(item)) == -1)
                    {
                        sys_log(0, "No empty ds inventory pid %u size %ud itemid %u", GetPlayerID(), item->GetSize(), item->GetID());
                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("cokfazlaesyatasiyorsun"));
                        return false;
                    }
                }
#ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
                else if (item->IsSkillBook())
                {
                    if ((iEmptyCell = GetEmptySkillBookInventory(item->GetSize())) == -1)
                    {
                        sys_log(0, "No empty ds inventory pid %u size %ud itemid %u", GetPlayerID(), item->GetSize(), item->GetID());
                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("cokfazlaesyatasiyorsun"));
                        return false;
                    }
                }
                else if (item->IsUpgradeItem())
                {
                    if ((iEmptyCell = GetEmptyUpgradeItemsInventory(item->GetSize())) == -1)
                    {
                        sys_log(0, "No empty ds inventory pid %u size %ud itemid %u", GetPlayerID(), item->GetSize(), item->GetID());
                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("cokfazlaesyatasiyorsun"));
                        return false;
                    }
                }
                else if (item->IsStone())
                {
                    if ((iEmptyCell = GetEmptyStoneInventory(item->GetSize())) == -1)
                    {
                        sys_log(0, "No empty ds inventory pid %u size %ud itemid %u", GetPlayerID(), item->GetSize(), item->GetID());
                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("cokfazlaesyatasiyorsun"));
                        return false;
                    }
                }
                else if (item->IsBox())
                {
                    if ((iEmptyCell = GetEmptyBoxInventory(item->GetSize())) == -1)
                    {
                        sys_log(0, "No empty ds inventory pid %u size %ud itemid %u", GetPlayerID(), item->GetSize(), item->GetID());
                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("cokfazlaesyatasiyorsun"));
                        return false;
                    }
                }
                else if (item->IsEfsun())
                {
                    if ((iEmptyCell = GetEmptyEfsunInventory(item->GetSize())) == -1)
                    {
                        sys_log(0, "No empty ds inventory pid %u size %ud itemid %u", GetPlayerID(), item->GetSize(), item->GetID());
                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("cokfazlaesyatasiyorsun"));
                        return false;
                    }
                }
                else if (item->IsCicek())
                {
                    if ((iEmptyCell = GetEmptyCicekInventory(item->GetSize())) == -1)
                    {
                        sys_log(0, "No empty ds inventory pid %u size %ud itemid %u", GetPlayerID(), item->GetSize(), item->GetID());
                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("cokfazlaesyatasiyorsun"));
                        return false;
                    }
                }
#endif
                else
                {
                    if ((iEmptyCell = GetEmptyInventory(item->GetSize())) == -1)
                    {
                        sys_log(0, "No empty inventory pid %u size %ud itemid %u", GetPlayerID(), item->GetSize(), item->GetID());
                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("cokfazlaesyatasiyorsun"));
                        return false;
                    }
                }

                item->RemoveFromGround();

                if (item->IsDragonSoul())
                    item->AddToCharacter(this, TItemPos(DRAGON_SOUL_INVENTORY, iEmptyCell));
#ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
                else if (item->IsSkillBook())
                    item->AddToCharacter(this, TItemPos(INVENTORY, iEmptyCell));
                else if (item->IsUpgradeItem())
                    item->AddToCharacter(this, TItemPos(INVENTORY, iEmptyCell));
                else if (item->IsStone())
                    item->AddToCharacter(this, TItemPos(INVENTORY, iEmptyCell));
                else if (item->IsBox())
                    item->AddToCharacter(this, TItemPos(INVENTORY, iEmptyCell));
                else if (item->IsEfsun())
                    item->AddToCharacter(this, TItemPos(INVENTORY, iEmptyCell));
                else if (item->IsCicek())
                    item->AddToCharacter(this, TItemPos(INVENTORY, iEmptyCell));
#endif
                else
                    item->AddToCharacter(this, TItemPos(INVENTORY, iEmptyCell));

                char szHint[32+1];
                snprintf(szHint, sizeof(szHint), "%s %u %u", item->GetName(), item->GetCount(), item->GetOriginalVnum());
                LogManager::instance().ItemLog(this, item, "GET", szHint);
                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("kazandin %s"), item->GetName());

                if (item->GetType() == ITEM_QUEST)
                    quest::CQuestManager::instance().PickupItem (GetPlayerID(), item);
            }

            //Motion(MOTION_PICKUP);
            return true;
        }
        else if (!IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_GIVE | ITEM_ANTIFLAG_DROP) && GetParty())
        {
            // ´Ù¸¥ ÆÄƼ¿ø ¼ÒÀ¯±Ç ¾ÆÀÌÅÛÀ» ÁÖÀ¸·Á°í ÇÑ´Ù¸é
            NPartyPickupDistribute::FFindOwnership funcFindOwnership(item);

            GetParty()->ForEachOnlineMember(funcFindOwnership);

            LPCHARACTER owner = funcFindOwnership.owner;
            // @fixme115
            if (!owner)
                return false;

            int iEmptyCell;

            if (owner)
            {
                if (item->IsStackable() && !IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_STACK))
                {
                    BYTE bCount = item->GetCount();
                   
                    for (int i = 0; i < INVENTORY_MAX_NUM; ++i)
                    {
                        LPITEM item2 = owner->GetInventoryItem(i);

                        if (!item2)
                            continue;
                       
                        if (item2->GetVnum() == item->GetVnum())
                        {
                            int j;

                            for (j = 0; j < ITEM_SOCKET_MAX_NUM; ++j)
                            if (item2->GetSocket(j) != item->GetSocket(j))
                                break;

                            if (j != ITEM_SOCKET_MAX_NUM)
                                continue;

                            BYTE bCount2 = MIN(200 - item2->GetCount(), bCount);
                            bCount -= bCount2;

                            item2->SetCount(item2->GetCount() + bCount2);

                            if (bCount == 0)
                            {
                                owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("??? ??: %s ????? %s"), GetName(), item2->GetName());
                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("??? ??: %s ??? %s"), owner->GetName(), item2->GetName());
                                M2_DESTROY_ITEM(item);
                                if (item2->GetType() == ITEM_QUEST)
                                    quest::CQuestManager::instance().PickupItem(owner->GetPlayerID(), item2);
                                return true;
                            }
                        }
                    }
                    item->SetCount(bCount);

                }

            }

            if (item->IsDragonSoul())
            {
                if (!(owner && (iEmptyCell = owner->GetEmptyDragonSoulInventory(item)) != -1))
                {
                    owner = this;

                    if ((iEmptyCell = GetEmptyDragonSoulInventory(item)) == -1)
                    {
                        owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("cokfazlaesyatasiyorsun"));
                        return false;
                    }
                }
            }
#ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
            else if (item->IsSkillBook())
            {
                if (!(owner && (iEmptyCell = owner->GetEmptySkillBookInventory(item->GetSize())) != -1))
                {
                    owner = this;

                    if ((iEmptyCell = GetEmptySkillBookInventory(item->GetSize())) == -1)
                    {
                        owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("cokfazlaesyatasiyorsun"));
                        return false;
                    }
                }
            }
            else if (item->IsUpgradeItem())
            {
                if (!(owner && (iEmptyCell = owner->GetEmptyUpgradeItemsInventory(item->GetSize())) != -1))
                {
                    owner = this;

                    if ((iEmptyCell = GetEmptyUpgradeItemsInventory(item->GetSize())) == -1)
                    {
                        owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("cokfazlaesyatasiyorsun"));
                        return false;
                    }
                }
            }
            else if (item->IsStone())
            {
                if (!(owner && (iEmptyCell = owner->GetEmptyStoneInventory(item->GetSize())) != -1))
                {
                    owner = this;

                    if ((iEmptyCell = GetEmptyStoneInventory(item->GetSize())) == -1)
                    {
                        owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("cokfazlaesyatasiyorsun"));
                        return false;
                    }
                }
            }
            else if (item->IsBox())
            {
                if (!(owner && (iEmptyCell = owner->GetEmptyBoxInventory(item->GetSize())) != -1))
                {
                    owner = this;

                    if ((iEmptyCell = GetEmptyBoxInventory(item->GetSize())) == -1)
                    {
                        owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("cokfazlaesyatasiyorsun"));
                        return false;
                    }
                }
            }
            else if (item->IsEfsun())
            {
                if (!(owner && (iEmptyCell = owner->GetEmptyEfsunInventory(item->GetSize())) != -1))
                {
                    owner = this;

                    if ((iEmptyCell = GetEmptyEfsunInventory(item->GetSize())) == -1)
                    {
                        owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("cokfazlaesyatasiyorsun"));
                        return false;
                    }
                }
            }
            else if (item->IsCicek())
            {
                if (!(owner && (iEmptyCell = owner->GetEmptyCicekInventory(item->GetSize())) != -1))
                {
                    owner = this;

                    if ((iEmptyCell = GetEmptyCicekInventory(item->GetSize())) == -1)
                    {
                        owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("cokfazlaesyatasiyorsun"));
                        return false;
                    }
                }
            }
#endif
            else
            {
                if (!(owner && (iEmptyCell = owner->GetEmptyInventory(item->GetSize())) != -1))
                {
                    owner = this;

                    if ((iEmptyCell = GetEmptyInventory(item->GetSize())) == -1)
                    {
                        owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("cokfazlaesyatasiyorsun"));
                        return false;
                    }
                }
            }

            item->RemoveFromGround();

            if (item->IsDragonSoul())
                item->AddToCharacter(owner, TItemPos(DRAGON_SOUL_INVENTORY, iEmptyCell));
#ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
            else if (item->IsSkillBook())
                item->AddToCharacter(owner, TItemPos(INVENTORY, iEmptyCell));
            else if (item->IsUpgradeItem())
                item->AddToCharacter(owner, TItemPos(INVENTORY, iEmptyCell));
            else if (item->IsStone())
                item->AddToCharacter(owner, TItemPos(INVENTORY, iEmptyCell));
            else if (item->IsBox())
                item->AddToCharacter(owner, TItemPos(INVENTORY, iEmptyCell));
            else if (item->IsEfsun())
                item->AddToCharacter(owner, TItemPos(INVENTORY, iEmptyCell));
            else if (item->IsCicek())
                item->AddToCharacter(owner, TItemPos(INVENTORY, iEmptyCell));
#endif
            else
                item->AddToCharacter(owner, TItemPos(INVENTORY, iEmptyCell));

            char szHint[32+1];
            snprintf(szHint, sizeof(szHint), "%s %u %u", item->GetName(), item->GetCount(), item->GetOriginalVnum());
            LogManager::instance().ItemLog(owner, item, "GET", szHint);

            if (owner == this)
                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("kazandin %s"), item->GetName());
            else
            {
                owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s kazanilanesya %s"), GetName(), item->GetName());
                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("esyaticareti %s %s"), owner->GetName(), item->GetName());
            }

            if (item->GetType() == ITEM_QUEST)
                quest::CQuestManager::instance().PickupItem (owner->GetPlayerID(), item);

            return true;
        }
    }

    return false;
}
Bu şekilde değiştirdim;
C++:
bool CHARACTER::PickupItem(DWORD dwVID)
{
    LPITEM item = ITEM_MANAGER::instance().FindByVID(dwVID);

    if (IsObserverMode())
        return false;

    if (!item || !item->GetSectree())
        return false;

    if (item->DistanceValid(this))
    {
        if (item->IsOwnership(this))
        {
            if (item->GetType() == ITEM_ELK)
            {
                GiveGold(item->GetCount());
                item->RemoveFromGround();

                M2_DESTROY_ITEM(item);

                Save();
            }
            else
            {
                if (item->IsStackable() && !IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_STACK))
                {
                    BYTE bCount = item->GetCount();

#ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
                    for (int i = 0; i < INVENTORY_AND_EQUIP_SLOT_MAX; ++i)
#else
                    for (int i = 0; i < INVENTORY_MAX_NUM; ++i)
#endif
                    {
                        LPITEM item2 = GetInventoryItem(i);

                        if (!item2)
                            continue;

                        if (item2->GetVnum() == item->GetVnum())
                        {
                            int j;

                            for (j = 0; j < ITEM_SOCKET_MAX_NUM; ++j)
                                if (item2->GetSocket(j) != item->GetSocket(j))
                                    break;

                            if (j != ITEM_SOCKET_MAX_NUM)
                                continue;

                            BYTE bCount2 = MIN(g_bItemCountLimit - item2->GetCount(), bCount);
                            bCount -= bCount2;

                            item2->SetCount(item2->GetCount() + bCount2);

                            if (bCount == 0)
                            {
                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("kazandin %s"), item2->GetName());
                                M2_DESTROY_ITEM(item);
                                if (item2->GetType() == ITEM_QUEST)
                                    quest::CQuestManager::instance().PickupItem (GetPlayerID(), item2);
                                return true;
                            }
                        }
                    }

                    item->SetCount(bCount);
                }

                int iEmptyCell;
                if (item->IsDragonSoul())
                {
                    if ((iEmptyCell = GetEmptyDragonSoulInventory(item)) == -1)
                    {
                        sys_log(0, "No empty ds inventory pid %u size %ud itemid %u", GetPlayerID(), item->GetSize(), item->GetID());
                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("cokfazlaesyatasiyorsun"));
                        return false;
                    }
                }
                #ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
                else if (item->IsSkillBook())
                {
                    if ((iEmptyCell = GetEmptySkillBookInventory(item->GetSize())) == -1)
                    {
                        sys_log(0, "No empty ds inventory pid %u size %ud itemid %u", GetPlayerID(), item->GetSize(), item->GetID());
                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("cokfazlaesyatasiyorsun"));
                        return false;
                    }
                }
                else if (item->IsUpgradeItem())
                {
                    if ((iEmptyCell = GetEmptyUpgradeItemsInventory(item->GetSize())) == -1)
                    {
                        sys_log(0, "No empty ds inventory pid %u size %ud itemid %u", GetPlayerID(), item->GetSize(), item->GetID());
                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("cokfazlaesyatasiyorsun"));
                        return false;
                    }
                }
                else if (item->IsStone())
                {
                    if ((iEmptyCell = GetEmptyStoneInventory(item->GetSize())) == -1)
                    {
                        sys_log(0, "No empty ds inventory pid %u size %ud itemid %u", GetPlayerID(), item->GetSize(), item->GetID());
                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("cokfazlaesyatasiyorsun"));
                        return false;
                    }
                }
                else if (item->IsBox())
                {
                    if ((iEmptyCell = GetEmptyBoxInventory(item->GetSize())) == -1)
                    {
                        sys_log(0, "No empty ds inventory pid %u size %ud itemid %u", GetPlayerID(), item->GetSize(), item->GetID());
                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("cokfazlaesyatasiyorsun"));
                        return false;
                    }
                }
                else if (item->IsEfsun())
                {
                    if ((iEmptyCell = GetEmptyEfsunInventory(item->GetSize())) == -1)
                    {
                        sys_log(0, "No empty ds inventory pid %u size %ud itemid %u", GetPlayerID(), item->GetSize(), item->GetID());
                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("cokfazlaesyatasiyorsun"));
                        return false;
                    }
                }
                else if (item->IsCicek())
                {
                    if ((iEmptyCell = GetEmptyCicekInventory(item->GetSize())) == -1)
                    {
                        sys_log(0, "No empty ds inventory pid %u size %ud itemid %u", GetPlayerID(), item->GetSize(), item->GetID());
                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("cokfazlaesyatasiyorsun"));
                        return false;
                    }
                }
                #endif
                else
                {
                    if ((iEmptyCell = GetEmptyInventory(item->GetSize())) == -1)
                    {
                        sys_log(0, "No empty inventory pid %u size %ud itemid %u", GetPlayerID(), item->GetSize(), item->GetID());
                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("cokfazlaesyatasiyorsun"));
                        return false;
                    }
                }

                item->RemoveFromGround();
                if (item->IsDragonSoul())
                    item->AddToCharacter(this, TItemPos(DRAGON_SOUL_INVENTORY, iEmptyCell));
                #ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
                else if (item->IsSkillBook())
                    item->AddToCharacter(this, TItemPos(INVENTORY, iEmptyCell));
                else if (item->IsUpgradeItem())
                    item->AddToCharacter(this, TItemPos(INVENTORY, iEmptyCell));
                else if (item->IsStone())
                    item->AddToCharacter(this, TItemPos(INVENTORY, iEmptyCell));
                else if (item->IsBox())
                    item->AddToCharacter(this, TItemPos(INVENTORY, iEmptyCell));
                else if (item->IsEfsun())
                    item->AddToCharacter(this, TItemPos(INVENTORY, iEmptyCell));
                else if (item->IsCicek())
                    item->AddToCharacter(this, TItemPos(INVENTORY, iEmptyCell));
                #endif
                else
                    item->AddToCharacter(this, TItemPos(INVENTORY, iEmptyCell));

                char szHint[32+1];
                snprintf(szHint, sizeof(szHint), "%s %u %u", item->GetName(), item->GetCount(), item->GetOriginalVnum());
                LogManager::instance().ItemLog(this, item, "GET", szHint);
                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("kazandin %s"), item->GetName());

                if (item->GetType() == ITEM_QUEST)
                    quest::CQuestManager::instance().PickupItem (GetPlayerID(), item);
            }

            //Motion(MOTION_PICKUP);
            return true;
        }
        else if (!IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_GIVE | ITEM_ANTIFLAG_DROP) && GetParty())
        {
            // ´Ù¸¥ ÆÄƼ¿ø ¼ÒÀ¯±Ç ¾ÆÀÌÅÛÀ» ÁÖÀ¸·Á°í ÇÑ´Ù¸é
            NPartyPickupDistribute::FFindOwnership funcFindOwnership(item);

            GetParty()->ForEachOnlineMember(funcFindOwnership);

            LPCHARACTER owner = funcFindOwnership.owner;
            // @fixme115
            if (!owner)
                return false;

            int iEmptyCell;

            if (item->IsDragonSoul())
            {
                if (!(owner && (iEmptyCell = owner->GetEmptyDragonSoulInventory(item)) != -1))
                {
                    owner = this;

                    if ((iEmptyCell = GetEmptyDragonSoulInventory(item)) == -1)
                    {
                        owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("cokfazlaesyatasiyorsun"));
                        return false;
                    }
                }
            }
            #ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
            else if (item->IsSkillBook())
            {
                if (!(owner && (iEmptyCell = owner->GetEmptySkillBookInventory(item->GetSize())) != -1))
                {
                    owner = this;

                    if ((iEmptyCell = GetEmptySkillBookInventory(item->GetSize())) == -1)
                    {
                        owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("cokfazlaesyatasiyorsun"));
                        return false;
                    }
                }
            }
            else if (item->IsUpgradeItem())
            {
                if (!(owner && (iEmptyCell = owner->GetEmptyUpgradeItemsInventory(item->GetSize())) != -1))
                {
                    owner = this;

                    if ((iEmptyCell = GetEmptyUpgradeItemsInventory(item->GetSize())) == -1)
                    {
                        owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("cokfazlaesyatasiyorsun"));
                        return false;
                    }
                }
            }
            else if (item->IsStone())
            {
                if (!(owner && (iEmptyCell = owner->GetEmptyStoneInventory(item->GetSize())) != -1))
                {
                    owner = this;

                    if ((iEmptyCell = GetEmptyStoneInventory(item->GetSize())) == -1)
                    {
                        owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("cokfazlaesyatasiyorsun"));
                        return false;
                    }
                }
            }
            else if (item->IsBox())
            {
                if (!(owner && (iEmptyCell = owner->GetEmptyBoxInventory(item->GetSize())) != -1))
                {
                    owner = this;

                    if ((iEmptyCell = GetEmptyBoxInventory(item->GetSize())) == -1)
                    {
                        owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("cokfazlaesyatasiyorsun"));
                        return false;
                    }
                }
            }
            else if (item->IsEfsun())
            {
                if (!(owner && (iEmptyCell = owner->GetEmptyEfsunInventory(item->GetSize())) != -1))
                {
                    owner = this;

                    if ((iEmptyCell = GetEmptyEfsunInventory(item->GetSize())) == -1)
                    {
                        owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("cokfazlaesyatasiyorsun"));
                        return false;
                    }
                }
            }
            else if (item->IsCicek())
            {
                if (!(owner && (iEmptyCell = owner->GetEmptyCicekInventory(item->GetSize())) != -1))
                {
                    owner = this;

                    if ((iEmptyCell = GetEmptyCicekInventory(item->GetSize())) == -1)
                    {
                        owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("cokfazlaesyatasiyorsun"));
                        return false;
                    }
                }
            }
            #endif
            else
            {
                if (!(owner && (iEmptyCell = owner->GetEmptyInventory(item->GetSize())) != -1))
                {
                    owner = this;

                    if ((iEmptyCell = GetEmptyInventory(item->GetSize())) == -1)
                    {
                        owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("cokfazlaesyatasiyorsun"));
                        return false;
                    }
                }
            }

            item->RemoveFromGround();
            if (item->IsDragonSoul())
                item->AddToCharacter(owner, TItemPos(DRAGON_SOUL_INVENTORY, iEmptyCell));
            #ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
            else if (item->IsSkillBook())
                item->AddToCharacter(owner, TItemPos(INVENTORY, iEmptyCell));
            else if (item->IsUpgradeItem())
                item->AddToCharacter(owner, TItemPos(INVENTORY, iEmptyCell));
            else if (item->IsStone())
                item->AddToCharacter(owner, TItemPos(INVENTORY, iEmptyCell));
            else if (item->IsBox())
                item->AddToCharacter(owner, TItemPos(INVENTORY, iEmptyCell));
            else if (item->IsEfsun())
                item->AddToCharacter(owner, TItemPos(INVENTORY, iEmptyCell));
            else if (item->IsCicek())
                item->AddToCharacter(owner, TItemPos(INVENTORY, iEmptyCell));
            #endif
            else
                item->AddToCharacter(owner, TItemPos(INVENTORY, iEmptyCell));

            char szHint[32+1];
            snprintf(szHint, sizeof(szHint), "%s %u %u", item->GetName(), item->GetCount(), item->GetOriginalVnum());
            LogManager::instance().ItemLog(owner, item, "GET", szHint);

            if (owner == this)
                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("kazandin %s"), item->GetName());
            else
            {
                owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s kazanilanesya %s"), GetName(), item->GetName());
                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("esyaticareti %s %s"), owner->GetName(), item->GetName());
            }

            if (item->GetType() == ITEM_QUEST)
                quest::CQuestManager::instance().PickupItem (owner->GetPlayerID(), item);
            return true;
        }
    }

    return false;
}
 
Anlamadığım şey şu, bu sistemler client source tabanlı ve hatayı game source'de alıyorsunuz. Bu biraz garip geldi açıkcası
 
Biraz geç baktığım için kusura bakmayın. Yazılan mesajları okudum hep. Kodları tek tek ayrıntılı olarak eklediğiniz için teşekkürler. Sizin için zaman almıştır. Kodları biraz inceledim ve sanırsam sorunun kaynağını buldum.
Buna ek olarak mesajlarınızda eklediğiniz harici linkleri kaldırdım. Çünkü çözümü sağlayacak yararlı bir bilgi bulunmuyor.
Her neyse geçelim kodlara...

.core hatasına göre şu kodlar çalışırken çöküyor;
C++:
                                owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("??? ??: %s ????? %s"), GetName(), item2->GetName());
                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("??? ??: %s ??? %s"), owner->GetName(), item2->GetName());


Konuda verdiğiniz kodda locale_string.txt'e çeviri eklerken yanlışlık yapılmış galiba.
Sizin verdiğiniz şu şekilde;
Kod:
"??? ??: %s ??? %s";
"2.Bilinmeyen % hata %s (Bu hatay?al?orsan? l?fen y?eticiye bildiriniz.)";

Bu şekilde değiştirip tekrardan deneyin. % hata => %s hata olarak değiştirdim. Büyük ihtimal %s yazılmadığı için çöküyor.
Kod:
"??? ??: %s ??? %s";
"2.Bilinmeyen %s hata %s (Bu hatay?al?orsan? l?fen y?eticiye bildiriniz.)";


Eğer yine olmuyorsa ?? işaretlerinden kaynaklı olabilir.
Şöyle değiştirebilir misiniz?
C++:
                                owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Bilinmeyen: %s hata %s (Bu hatayi aliorsani lutfen yoneticiye bildiriniz.)"), GetName(), item2->GetName());
                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("2.Bilinmeyen %s hata %s (Bu hatayi aliyorsaniz lutfen yoneticiye bildiriniz.)"), owner->GetName(), item2->GetName());[
 
Çözüm
Biraz geç baktığım için kusura bakmayın. Yazılan mesajları okudum hep. Kodları tek tek ayrıntılı olarak eklediğiniz için teşekkürler. Sizin için zaman almıştır. Kodları biraz inceledim ve sanırsam sorunun kaynağını buldum.
Buna ek olarak mesajlarınızda eklediğiniz harici linkleri kaldırdım. Çünkü çözümü sağlayacak yararlı bir bilgi bulunmuyor.
Her neyse geçelim kodlara...

.core hatasına göre şu kodlar çalışırken çöküyor;
C++:
                                owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("??? ??: %s ????? %s"), GetName(), item2->GetName());
                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("??? ??: %s ??? %s"), owner->GetName(), item2->GetName());


Konuda verdiğiniz kodda locale_string.txt'e çeviri eklerken yanlışlık yapılmış galiba.
Sizin verdiğiniz şu şekilde;
Kod:
"??? ??: %s ??? %s";
"2.Bilinmeyen % hata %s (Bu hatay?al?orsan? l?fen y?eticiye bildiriniz.)";

Bu şekilde değiştirip tekrardan deneyin. % hata => %s hata olarak değiştirdim. Büyük ihtimal %s yazılmadığı için çöküyor.
Kod:
"??? ??: %s ??? %s";
"2.Bilinmeyen %s hata %s (Bu hatay?al?orsan? l?fen y?eticiye bildiriniz.)";


Eğer yine olmuyorsa ?? işaretlerinden kaynaklı olabilir.
Şöyle değiştirebilir misiniz?
C++:
                                owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Bilinmeyen: %s hata %s (Bu hatayi aliorsani lutfen yoneticiye bildiriniz.)"), GetName(), item2->GetName());
                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("2.Bilinmeyen %s hata %s (Bu hatayi aliyorsaniz lutfen yoneticiye bildiriniz.)"), owner->GetName(), item2->GetName());[
Cevabınız için teşekkürler. Kod bloğunu sildim game.core vermiyor artık ama bazen itemlerin yerden toplanmadığını söylüyor oyuncular. Benim aklıma takılan şey şu: Aşağıda verdiğim kod bloğu baktığım diğer fileslarda mevcut değil. Bu kod bloğunun anlamı nedir? Neden ekli yani diğer srcler bu olmadan devam edebiliyor?
C++:
            if (owner)
            {
                if (item->IsStackable() && !IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_STACK))
                {
                    BYTE bCount = item->GetCount();
               
                    for (int i = 0; i < INVENTORY_MAX_NUM; ++i)
                    {
                        LPITEM item2 = owner->GetInventoryItem(i);

                        if (!item2)
                            continue;
                   
                        if (item2->GetVnum() == item->GetVnum())
                        {
                            int j;

                            for (j = 0; j < ITEM_SOCKET_MAX_NUM; ++j)
                            if (item2->GetSocket(j) != item->GetSocket(j))
                                break;

                            if (j != ITEM_SOCKET_MAX_NUM)
                                continue;

                            BYTE bCount2 = MIN(200 - item2->GetCount(), bCount);
                            bCount -= bCount2;

                            item2->SetCount(item2->GetCount() + bCount2);

                            if (bCount == 0)
                            {
                                owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("??? ??: %s ????? %s"), GetName(), item2->GetName());
                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("??? ??: %s ??? %s"), owner->GetName(), item2->GetName());
                                M2_DESTROY_ITEM(item);
                                if (item2->GetType() == ITEM_QUEST)
                                    quest::CQuestManager::instance().PickupItem(owner->GetPlayerID(), item2);
                                return true;
                            }
                        }
                    }
                    item->SetCount(bCount);

                }

            }

Ben hala game'e eklenmeyen kodlardan nasıl hata aldığınıza şaşkınım ^^
Bende aşırı şaşkınım fazla kod gibi ama orası diğer fileslarda yok.
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst