• Merhaba Ziyaretçi, yeni bir soru-cevap konusu açmadan önce sitemizdeki eski konuları araştırınız. Bu bölüme konu açarken veya yorum yazarken bölüm kurallarımıza uymaya özen gösteriniz. ;)

Çö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

MT Üye
Mesaj
315
Beğeni
86
Puan
479
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...

sandil12

MT Üye
Mesaj
181
Beğeni
102
Puan
394
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
 

LethalStrikeR

MT Üye
Mesaj
315
Beğeni
86
Puan
479
pkg info yazıp çıkanları yazabilir misiniz buraya?
Kod:
[email protected]:~ # 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
 

LethalStrikeR

MT Üye
Mesaj
315
Beğeni
86
Puan
479
gdb 9 kurulu sizde
gdb922 şeklinde yazmayı deneyin
Kod:
[email protected]:/usr/game/cores/channel1 # gdb922
gdb922: Command not found.
[email protected]:/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 ([email protected]=0x4c435000,
    [email protected]=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>,
    [email protected]: 12, iBytes=<optimized out>) at input.cpp:103
--Type <RET> for more, q to quit, c to continue without paging--
 

Whistle

Ruhsuz Filozof
Mesaj
9.310
Beğeni
4.431
Puan
2.584
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.
 

LethalStrikeR

MT Üye
Mesaj
315
Beğeni
86
Puan
479
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:

Reached

Geliştirici
Mesaj
277
Beğeni
262
Puan
419
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 ?
 

LethalStrikeR

MT Üye
Mesaj
315
Beğeni
86
Puan
479
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;
}
 

Reached

Geliştirici
Mesaj
277
Beğeni
262
Puan
419
Anlamadığım şey şu, bu sistemler client source tabanlı ve hatayı game source'de alıyorsunuz. Bu biraz garip geldi açıkcası
 

Whistle

Ruhsuz Filozof
Mesaj
9.310
Beğeni
4.431
Puan
2.584
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

LethalStrikeR

MT Üye
Mesaj
315
Beğeni
86
Puan
479
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ı.

Üst