Çözüldü moblardan yang ve nesne düşmüyor

  • Konuyu açan Konuyu açan ofv014
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 22
  • Gösterim Gösterim 2K
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ı.

ofv014

Üye
Üye
Mesaj
39
Çözümler
4
Beğeni
17
Puan
424
Ticaret Puanı
0
Merhaba dostlar konu başlığında da belirttiğim gibi üzerinde çalıştığım files'da slotlardan yang ve nesne düşmüyor. Yardımcı olabilir misiniz?
 
Bu dediğiniz işlemi kaynak dosyaları üzerinden yapıyoruz sanırsam. gdb ile debug etme işlemi nedir nasıl yapılır bunun ile alakalı bı rehber tutorial video v.s var mı? Ya da vaktiniz varsa bunu bana anlayacağım şekilde basitleştirerek anlatabilir misiniz?
game src de, makefile de ki CFLAGS kısmına -g3 ekle ve gmake dep çekip build et sonra gdb ile breakpoint koymayı araştır..
 
game src de, makefile de ki CFLAGS kısmına -g3 ekle ve gmake dep çekip build et sonra gdb ile breakpoint koymayı araştır..
Bu konuyu biraz araştırdım sanırsam game.core dosyasındaki hataları görüntülemek için yapıyoruz bunu. Ama bu build edeceğim gdb sürümünün server kaynak kodlarını derledigim gcc sürümüyle uyumlu olması gerekiyormuş heralde. gcc9 ile uyumlu olan gdb sürümü nedir?

gdb ile game dosyasını debug ederken şöyle bir hata aldım;
Kod:
Genişlet Daralt Kopyala
Reading symbols from game...Dwarf Error: wrong version in compilation unit header (is 4, should be 2)
Anladığım kadarıyla derleme birimi başlığının sürümü yanlışmış, 4 müş, 2 olması gerekiyormuş. Tabi bunun ne olduğu hakkında zerre fikrim yok. Forumdan bir arkadaş farklı bir sorun için gdb debug ederken aynı hatayı almış, sonrasında çözmüş fakat nasıl çözüldüğüyle alakalı bi bilgi bulamadım.
char_battle.cpp --> CHARACTER::Reward --> RewardGold(pkAttacker);
Burada da ne anlatmak istediğinizi tam olarak anlamasam da game sourcedeki char_battle.cpp dosyasında belirttiğiniz bölümü buldum;
C++:
Genişlet Daralt Kopyala
void CHARACTER::RewardGold(LPCHARACTER pkAttacker)
{
    // ADD_PREMIUM
    bool isAutoLoot =
        (pkAttacker->GetPremiumRemainSeconds(PREMIUM_AUTOLOOT) > 0 ||
         pkAttacker->IsEquipUniqueGroup(UNIQUE_GROUP_AUTOLOOT))
        ? true : false; // Á¦3ÀÇ ¼Õ
    // END_OF_ADD_PREMIUM

    PIXEL_POSITION pos;

    if (!isAutoLoot)
        if (!SECTREE_MANAGER::instance().GetMovablePosition(GetMapIndex(), GetX(), GetY(), pos))
            return;

    int iTotalGold = 0;
    //
    // --------- µ· µå·Ó È®·ü °è»ê ----------
    //
    int iGoldPercent = MobRankStats[GetMobRank()].iGoldPercent;

    if (pkAttacker->IsPC())
        iGoldPercent = iGoldPercent * (100 + CPrivManager::instance().GetPriv(pkAttacker, PRIV_GOLD_DROP)) / 100;

    if (pkAttacker->GetPoint(POINT_MALL_GOLDBONUS))
        iGoldPercent += (iGoldPercent * pkAttacker->GetPoint(POINT_MALL_GOLDBONUS) / 100);

    iGoldPercent = iGoldPercent * CHARACTER_MANAGER::instance().GetMobGoldDropRate(pkAttacker) / 100;

    // ADD_PREMIUM
    if (pkAttacker->GetPremiumRemainSeconds(PREMIUM_GOLD) > 0 ||
            pkAttacker->IsEquipUniqueGroup(UNIQUE_GROUP_LUCKY_GOLD))
        iGoldPercent += iGoldPercent;
    // END_OF_ADD_PREMIUM

    if (iGoldPercent > 100)
        iGoldPercent = 100;

    int iPercent;

    if (GetMobRank() >= MOB_RANK_BOSS)
        iPercent = ((iGoldPercent * PERCENT_LVDELTA_BOSS(pkAttacker->GetLevel(), GetLevel())) / 100);
    else
        iPercent = ((iGoldPercent * PERCENT_LVDELTA(pkAttacker->GetLevel(), GetLevel())) / 100);
    //int iPercent = CALCULATE_VALUE_LVDELTA(pkAttacker->GetLevel(), GetLevel(), iGoldPercent);

    if (number(1, 100) > iPercent)
        return;

    int iGoldMultipler = GetGoldMultipler();

    if (1 == number(1, 50000)) // 1/50000 È®·ü·Î µ·ÀÌ 10¹è
        iGoldMultipler *= 10;
    else if (1 == number(1, 10000)) // 1/10000 È®·ü·Î µ·ÀÌ 5¹è
        iGoldMultipler *= 5;

    // °³ÀÎ Àû¿ë
    if (pkAttacker->GetPoint(POINT_GOLD_DOUBLE_BONUS))
        if (number(1, 100) <= pkAttacker->GetPoint(POINT_GOLD_DOUBLE_BONUS))
            iGoldMultipler *= 2;

    //
    // --------- µ· µå·Ó ¹è¼ö °áÁ¤ ----------
    //
    if (test_server)
        pkAttacker->ChatPacket(CHAT_TYPE_PARTY, "gold_mul %d rate %d", iGoldMultipler, CHARACTER_MANAGER::instance().GetMobGoldAmountRate(pkAttacker));

    //
    // --------- ½ÇÁ¦ µå·Ó ó¸® -------------
    //
    LPITEM item;

    int iGold10DropPct = 100;
    iGold10DropPct = (iGold10DropPct * 100) / (100 + CPrivManager::instance().GetPriv(pkAttacker, PRIV_GOLD10_DROP));

    // MOB_RANK°¡ BOSSº¸´Ù ³ôÀ¸¸é ¹«Á¶°Ç µ·Æøź
    if (GetMobRank() >= MOB_RANK_BOSS && !IsStone() && GetMobTable().dwGoldMax != 0)
    {
        if (1 == number(1, iGold10DropPct))
            iGoldMultipler *= 10; // 1% È®·ü·Î µ· 10¹è

        int iSplitCount = number(25, 35);

        for (int i = 0; i < iSplitCount; ++i)
        {
            int iGold = number(GetMobTable().dwGoldMin, GetMobTable().dwGoldMax) / iSplitCount;
            if (test_server)
                sys_log(0, "iGold %d", iGold);
            iGold = iGold * CHARACTER_MANAGER::instance().GetMobGoldAmountRate(pkAttacker) / 100;
            iGold *= iGoldMultipler;

            if (iGold == 0)
            {
                continue ;
            }

            if (test_server)
            {
                sys_log(0, "Drop Moeny MobGoldAmountRate %d %d", CHARACTER_MANAGER::instance().GetMobGoldAmountRate(pkAttacker), iGoldMultipler);
                sys_log(0, "Drop Money gold %d GoldMin %d GoldMax %d", iGold, GetMobTable().dwGoldMax, GetMobTable().dwGoldMax);
            }

            // NOTE: µ· ÆøźÀº Á¦ 3ÀÇ ¼Õ 󸮸¦ ÇÏÁö ¾ÊÀ½
            if ((item = ITEM_MANAGER::instance().CreateItem(1, iGold)))
            {
                pos.x = GetX() + ((number(-14, 14) + number(-14, 14)) * 23);
                pos.y = GetY() + ((number(-14, 14) + number(-14, 14)) * 23);

                item->AddToGround(GetMapIndex(), pos);
                item->StartDestroyEvent();

                iTotalGold += iGold; // Total gold
            }
        }
    }
    // 1% È®·ü·Î µ·À» 10°³ ¶³¾î ¶ß¸°´Ù. (10¹è µå·ÓÀÓ)
    else if (1 == number(1, iGold10DropPct))
    {
        //
        // µ· Æøź½Ä µå·Ó
        //
        for (int i = 0; i < 10; ++i)
        {
            int iGold = number(GetMobTable().dwGoldMin, GetMobTable().dwGoldMax);
            iGold = iGold * CHARACTER_MANAGER::instance().GetMobGoldAmountRate(pkAttacker) / 100;
            iGold *= iGoldMultipler;

            if (iGold == 0)
            {
                continue;
            }

            // NOTE: µ· ÆøźÀº Á¦ 3ÀÇ ¼Õ 󸮸¦ ÇÏÁö ¾ÊÀ½
            if ((item = ITEM_MANAGER::instance().CreateItem(1, iGold)))
            {
                pos.x = GetX() + (number(-7, 7) * 20);
                pos.y = GetY() + (number(-7, 7) * 20);

                item->AddToGround(GetMapIndex(), pos);
                item->StartDestroyEvent();

                iTotalGold += iGold; // Total gold
            }
        }
    }
    else
    {
        //
        // ÀϹİÀûÀÎ ¹æ½ÄÀÇ µ· µå·Ó
        //
        int iGold = number(GetMobTable().dwGoldMin, GetMobTable().dwGoldMax);
        iGold = iGold * CHARACTER_MANAGER::instance().GetMobGoldAmountRate(pkAttacker) / 100;
        iGold *= iGoldMultipler;

        int iSplitCount;

        if (iGold >= 3)
            iSplitCount = number(1, 3);
        else if (GetMobRank() >= MOB_RANK_BOSS)
        {
            iSplitCount = number(3, 10);

            if ((iGold / iSplitCount) == 0)
                iSplitCount = 1;
        }
        else
            iSplitCount = 1;

        if (iGold != 0)
        {
            iTotalGold += iGold; // Total gold

            for (int i = 0; i < iSplitCount; ++i)
            {
                if (isAutoLoot)
                {
                    pkAttacker->GiveGold(iGold / iSplitCount);
                }
                else if ((item = ITEM_MANAGER::instance().CreateItem(1, iGold / iSplitCount)))
                {
                    pos.x = GetX() + (number(-7, 7) * 20);
                    pos.y = GetY() + (number(-7, 7) * 20);

                    item->AddToGround(GetMapIndex(), pos);
                    item->StartDestroyEvent();
                }
            }
        }
    }

    DBManager::instance().SendMoneyLog(MONEY_LOG_MONSTER, GetRaceNum(), iTotalGold);
}

Sorunum buradaki bir hatadan kaynaklanıyor gibi hissediyorum :) Rica etsem c++ bilen bir arkadaş müsait olduğunda gözden geçirebilir mi? Veya biri elinde sorunsuz char_battle.cpp dosyası olan biri benimle paylaşabilirse bendekiyle karşılaştırarak farklı olan bölümleri düzenleyeyim.
 
Sorunum çözüldü. Yardımcı olan herkese (!) değerli vakitlerinden ayırdığı için teşekkür ederim.
 
Çözüm
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Üst