Çözüldü Offline Shop / GameSrc Build Hatası

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ı.

karew1

MT Üye
MT Üye
Mesaj
150
Çözümler
1
Beğeni
91
Puan
689
Ticaret Puanı
0
Merhabalar,

GamesSrc Build işleminde hata alıyorum...

GameSrc_Build_Err:
compile char.cpp
char.cpp:7915:124: warning: trigraph ??) ignored, use -trigraphs to enable
char.cpp:7915:248: warning: trigraph ??) ignored, use -trigraphs to enable
char.cpp:7915:278: warning: trigraph ??) ignored, use -trigraphs to enable
char.cpp: In member function 'void CHARACTER::PointChange(BYTE, long long int, bool, bool)':
char.cpp:3649: error: duplicate case value
char.cpp:3640: error: previously used here
Makefile:136: recipe for target 'OBJDIR/char.o' failed
gmake[1]: *** [OBJDIR/char.o] Error 1
gmake[1]: Leaving directory '/home/ServerSource/Srcs/Server/game/src'
Makefile:53: recipe for target 'all' failed
gmake: *** [all] Error 2

char.cpp:
        case POINT_GOLD:
            {
                long long newGold = MINMAXLL(0, static_cast<long long>(GetGold()) + static_cast<long long>(amount), g_llMaxGold);
                SetGold(newGold);
                val = GetGold();
            }
            break;

#ifdef ENABLE_CHEQUE_SYSTEM
        case POINT_CHEQUE:
            {
                SetCheque(GetCheque() + amount);
                val = GetCheque();
            }
            break;
#endif

#ifdef ENABLE_COINS_SYSTEM
        case POINT_COINS:
            {
                SetCoins(GetCoins() + amount);
                val = GetCoins();
            }
            break;
#endif

        case POINT_SKILL:
        case POINT_STAT:
        case POINT_SUB_SKILL:
        case POINT_STAT_RESET_COUNT:
        case POINT_HORSE_SKILL:
            SetPoint(type, GetPoint(type) + amount);
            val = GetPoint(type);

            SetRealPoint(type, val);
            break;

Sizce sebebi nedir ?

Yardımlarınızı bekliyorum.

Saygılarımla.
 
Çözüm
Server ve client arasında veri iletimi yaparken de bu sabitlere atadığınız sayıya göre işlemler yapıyor. Bunun haricinde server içerisinde mantıksal işlemler içinde. Karaktere tanımladığınız POINT'ler diğerleriyle aynı olamaz. Bir şekilde srcyi derleseniz bile oyunda saçma sapan sorunlarla karşılaşabilirsiniz. POINT_COINS'e 146 değerini vermeyi deneyin

cmd_gm.cpp:
        case 7: // alignment
        case 8: // alignment
            {
                int    amount = 0;
                str_to_number(amount, arg3);
                tch->UpdateAlignment(amount - ch->GetRealAlignment());
            }
            break;
#ifdef ENABLE_CHEQUE_SYSTEM
        case 9: // won
            {
                int won = 0;
                str_to_number(won, arg3);
                int before_won = tch->GetCheque();
                if (before_won + won > 200)
                {
                    ch->ChatPacket(CHAT_TYPE_INFO, "%s'nin Won toplami 200'u asiyor", tch->GetName());
                    return;
                }
                tch->PointChange(POINT_CHEQUE, won, true);
            }
            break;
#endif
    }

    if (set_fields[i].type == NUMBER)
    {
        long long    amount = 0;
        str_to_number(amount, arg3);
        ch->ChatPacket(CHAT_TYPE_INFO, "%s's %s set to [%lld]", tch->GetName(), set_fields[i].cmd, amount);
    }
}

ACMD(do_reset)

questlua_pc.cpp:
    int pc_give_gold(lua_State* L)
    {
        LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();

        if (!lua_isnumber(L, 1))
        {
            sys_err("QUEST : wrong argument");
            return 0;
        }

        int iAmount = (int) lua_tonumber(L, 1);

        if (iAmount <= 0)
        {
            sys_err("QUEST : gold amount less then zero");
            return 0;
        }

        DBManager::instance().SendMoneyLog(MONEY_LOG_QUEST, ch->GetPlayerID(), iAmount);
        ch->PointChange(POINT_GOLD, iAmount, true);
        return 0;
    }

#ifdef ENABLE_CHEQUE_SYSTEM
    int pc_change_cheque(lua_State* L)
    {
        int cheque = (int)lua_tonumber(L, -1);

        LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();

        if (cheque + ch->GetCheque() < 0)
            sys_err("QUEST wrong ChangeCheque %d (now %d)", cheque, ch->GetCheque());
        else
        {
            //DBManager::instance().SendMoneyLog(MONEY_LOG_QUEST, ch->GetPlayerID(), cheque);
            ch->PointChange(POINT_CHEQUE, cheque, true);
        }

        return 0;
    }
    
    int pc_get_cheque(lua_State* L)
    {
        lua_pushnumber(L, CQuestManager::instance().GetCurrentCharacterPtr()->GetCheque());
        return 1;
    }
#endif

    int pc_warp_to_guild_war_observer_position(lua_State* L)

char.cpp:
    pack.points[POINT_LEVEL]        = GetLevel();
    pack.points[POINT_EXP]        = GetExp();
    pack.points[POINT_NEXT_EXP]        = GetNextExp();
    pack.points[POINT_HP]        = GetHP();
    pack.points[POINT_MAX_HP]        = GetMaxHP();
    pack.points[POINT_SP]        = GetSP();
    pack.points[POINT_MAX_SP]        = GetMaxSP();
    pack.points[POINT_GOLD]        = GetGold();
#ifdef ENABLE_CHEQUE_SYSTEM
    pack.points[POINT_CHEQUE] = GetCheque();
#endif
#ifdef ENABLE_COINS_SYSTEM
    pack.points[POINT_COINS] = GetCoins();
#endif
    pack.points[POINT_STAMINA]        = GetStamina();
    pack.points[POINT_MAX_STAMINA]    = GetMaxStamina();

    for (int i = POINT_ST; i < POINT_MAX_NUM; ++i)
        pack.points[i] = GetPoint(i);

char.cpp/2:
void CHARACTER::SetCheque(long cheque)
{
    DBManager::instance().DirectQuery("UPDATE player.player SET umutkcheque = '%d' WHERE id = '%d';", cheque, GetPlayerID());
    m_cheque = cheque;
}

void CHARACTER::SetWon(long cheque)
{
    m_cheque = cheque;
    SetPoint(POINT_CHEQUE, cheque);
}
#endif

#ifdef ENABLE_COINS_SYSTEM
long CHARACTER::GetEp() const
{
    std::auto_ptr<SQLMsg> pMsg(DBManager::instance().DirectQuery("SELECT coins FROM account.account WHERE id = '%d';", GetDesc()->GetAccountTable().id));
    if (pMsg->Get()->uiNumRows == 0)
        return 0;
    
    MYSQL_ROW row = mysql_fetch_row(pMsg->Get()->pSQLResult);
    DWORD ep = 0;
    str_to_number(ep, row[0]);
    return ep;
}

void CHARACTER::SetCoins(long coins)
{
    DBManager::instance().DirectQuery("UPDATE account.account SET coins = '%d' WHERE id = '%d';", coins, GetDesc()->GetAccountTable().id);
    m_coins = coins;
}

void CHARACTER::SetEp(long coins)
{
    m_coins = coins;
    SetPoint(POINT_COINS, coins);
}
#endif

char.cpp/3:
    SetPoint(POINT_HP_RECOVERY, lHPRecovery);
    SetPoint(POINT_SP_RECOVERY, lSPRecovery);

#ifdef ENABLE_CHEQUE_SYSTEM
    SetPoint(POINT_CHEQUE, lcheque);
#endif

#ifdef ENABLE_COINS_SYSTEM
    SetPoint(POINT_COINS, lcoins);
#endif

    // PC_BANG_ITEM_ADD
    SetPoint(POINT_PC_BANG_EXP_BONUS, 0);
    SetPoint(POINT_PC_BANG_DROP_BONUS, 0);
    // END_PC_BANG_ITEM_ADD

char.cpp/4:
        case POINT_GOLD:
            {
                long long newGold = MINMAXLL(0, static_cast<long long>(GetGold()) + static_cast<long long>(amount), g_llMaxGold);
                SetGold(newGold);
                val = GetGold();
            }
            break;

#ifdef ENABLE_CHEQUE_SYSTEM
        case POINT_CHEQUE:
            {
                SetCheque(GetCheque() + amount);
                val = GetCheque();
            }
            break;
#endif

#ifdef ENABLE_COINS_SYSTEM
        case POINT_COINS:
            {
                SetCoins(GetCoins() + amount);
                val = GetCoins();
            }
            break;
#endif

        case POINT_SKILL:
        case POINT_STAT:
        case POINT_SUB_SKILL:
        case POINT_STAT_RESET_COUNT:
        case POINT_HORSE_SKILL:
            SetPoint(type, GetPoint(type) + amount);
            val = GetPoint(type);

char.h:
    POINT_RESIST_ICE = 133,          //   냉기 저항   : 얼음공격에 대한 대미지 감소
    POINT_RESIST_EARTH = 134,        //   대지 저항   : 얼음공격에 대한 대미지 감소
    POINT_RESIST_DARK = 135,         //   어둠 저항   : 얼음공격에 대한 대미지 감소

    POINT_RESIST_CRITICAL = 136,        // 크리티컬 저항    : 상대의 크리티컬 확률을 감소
    POINT_RESIST_PENETRATE = 137,        // 관통타격 저항    : 상대의 관통타격 확률을 감소
#ifdef ENABLE_CHEQUE_SYSTEM
    POINT_CHEQUE = 145,
#endif
#ifdef ENABLE_COINS_SYSTEM
    POINT_COINS = 145,
#endif

    //POINT_MAX_NUM = 129    common/length.h
};

enum EPKModes
{
    PK_MODE_PEACE,
    PK_MODE_REVENGE,
    PK_MODE_FREE,
    PK_MODE_PROTECT,
    PK_MODE_GUILD,
    PK_MODE_MAX_NUM
};

başkada bir yerde ekli değil şu anda :/
 
Konuya char.cpp eklemişsin fakat hatanın kaçıncı satır olduğunu göremiyoruz bu yüzden hata veren satırları işaretlersen neyin ne olduğunu anlayabiliriz.
 
Tabii ki,

char.cpp.png


hata veren kodlar :

char.cpp:
#ifdef ENABLE_CHEQUE_SYSTEM
        case POINT_CHEQUE:
            {
                SetCheque(GetCheque() + amount);
                val = GetCheque();
            }
            break;
#endif

#ifdef ENABLE_COINS_SYSTEM
        case POINT_COINS:
            {
                SetCoins(GetCoins() + amount);
                val = GetCoins();
            }
            break;
#endif
 
char.h makroları görüyor mu?
 
char.h #ifdefi kaldırıp bi tekrar deneyin :D
 
@Whistle

char.h
C++:
//#ifdef ENABLE_CHEQUE_SYSTEM
    POINT_CHEQUE = 145,
//#endif
//#ifdef ENABLE_COINS_SYSTEM
    POINT_COINS = 145,
//#endif

2. blok

//#ifdef ENABLE_CHEQUE_SYSTEM
    public:
        long            GetCheque() const        { return m_cheque;    }
        void            SetCheque(long cheque);
        long            GetWon()    const;
        void            SetWon(long cheque);
    protected:
        long            m_cheque;
//#endif

//#ifdef ENABLE_COINS_SYSTEM
    public:
        long            GetCoins() const        { return m_coins;    }
        void            SetCoins(long coins);
        long            GetEp()    const;
        void            SetEp(long coins);
    protected:
        long            m_coins;
//#endif

Gördüğünüz gibi #ifdef'leri iptal ettim öyle denedim ve sonuç :

GameSrc_Build_Err:
compile castle.cpp
compile char.cpp
char.cpp:7915:124: warning: trigraph ??) ignored, use -trigraphs to enable
char.cpp:7915:248: warning: trigraph ??) ignored, use -trigraphs to enable
char.cpp:7915:278: warning: trigraph ??) ignored, use -trigraphs to enable
char.cpp: In member function 'void CHARACTER::PointChange(BYTE, long long int, bool, bool)':
char.cpp:3649: error: duplicate case value
char.cpp:3640: error: previously used here
Makefile:136: recipe for target 'OBJDIR/char.o' failed
gmake[1]: *** [OBJDIR/char.o] Error 1
gmake[1]: Leaving directory '/home/ServerSource/Srcs/Server/game/src'
Makefile:53: recipe for target 'all' failed
gmake: *** [all] Error 2
 
Tamam sorun şimdi anlaşıldı.
Kod:
char.cpp:3649: error: duplicate case value
Bakın burada char.cpp 3649. satırda yinelenen case değeri diyor.
POINT_CHEQUE ile POINT_COINS değerleri aynı. İkiside 145. Hepsi farklı olmalı. :)
 
Evet öyle. Fakat, neye göre int değeri vereceğim onu çözümleyemedim :) sizce tam olarak çözümü nedir ?
 
Server ve client arasında veri iletimi yaparken de bu sabitlere atadığınız sayıya göre işlemler yapıyor. Bunun haricinde server içerisinde mantıksal işlemler içinde. Karaktere tanımladığınız POINT'ler diğerleriyle aynı olamaz. Bir şekilde srcyi derleseniz bile oyunda saçma sapan sorunlarla karşılaşabilirsiniz. POINT_COINS'e 146 değerini vermeyi deneyin
 
Çözüm
Bravo @Whistle sorun çözüldü.
verdiğimiz 146 değeri bize sorun çıkartır mı ?
anlamak adına soruyorum şimdi biz bunu 146 verdik bu int değeri ne işlev görecek acaba :rolleyes:

ek olarak Yeni bir sorun...

GameSrc_Build_Err:
compile offlineshop_manager.cpp
offlineshop_manager.cpp: In member function 'bool COfflineShopManager::WithdrawAllMoney(CHARACTER*)':
offlineshop_manager.cpp:491: error: 'GOLD_MAX' was not declared in this scope
offlineshop_manager.cpp:501: error: 'GOLD_MAX' was not declared in this scope
Makefile:136: recipe for target 'OBJDIR/offlineshop_manager.o' failed
gmake[1]: *** [OBJDIR/offlineshop_manager.o] Error 1
gmake[1]: Leaving directory '/home/ServerSource/Srcs/Server/game/src'
Makefile:53: recipe for target 'all' failed
gmake: *** [all] Error 2

offlineshop_manager.cpp:
    if (dwBankMoney > GOLD_MAX)
    {
        bGiveLittleMoney = true;
        dwMoneyToGet = 1000000000; // 1.000.000.000 golds
    }
    else
    {
        dwMoneyToGet = dwBankMoney;
    }
    
    bool isOverFlow = ch->GetGold() + dwMoneyToGet > GOLD_MAX - 1 ? true : false;

baktığım zaman herhangi bir yerde başka GOLD_MAX kullanılmamış sanırım daha tanımlanmamış sizce nasıl tanımlarım ?
 
Kullandığınız source dosyaları düzenlenmiş sanırsam. shop.cpp dosyasından buy fonksiyonunu inceleyin. Orada GOLD_MAX yerine başka bir şey kullanılmıştır. offlineshop_manager.cpp'de gösterdiğiniz kodları değiştirmeniz gerekecek.
 
Bravo @Whistle sorun çözüldü.
verdiğimiz 146 değeri bize sorun çıkartır mı ?
anlamak adına soruyorum şimdi biz bunu 146 verdik bu int değeri ne işlev görecek acaba :rolleyes:

ek olarak Yeni bir sorun...

GameSrc_Build_Err:
compile offlineshop_manager.cpp
offlineshop_manager.cpp: In member function 'bool COfflineShopManager::WithdrawAllMoney(CHARACTER*)':
offlineshop_manager.cpp:491: error: 'GOLD_MAX' was not declared in this scope
offlineshop_manager.cpp:501: error: 'GOLD_MAX' was not declared in this scope
Makefile:136: recipe for target 'OBJDIR/offlineshop_manager.o' failed
gmake[1]: *** [OBJDIR/offlineshop_manager.o] Error 1
gmake[1]: Leaving directory '/home/ServerSource/Srcs/Server/game/src'
Makefile:53: recipe for target 'all' failed
gmake: *** [all] Error 2

offlineshop_manager.cpp:
    if (dwBankMoney > GOLD_MAX)
    {
        bGiveLittleMoney = true;
        dwMoneyToGet = 1000000000; // 1.000.000.000 golds
    }
    else
    {
        dwMoneyToGet = dwBankMoney;
    }
  
    bool isOverFlow = ch->GetGold() + dwMoneyToGet > GOLD_MAX - 1 ? true : false;

baktığım zaman herhangi bir yerde başka GOLD_MAX kullanılmamış sanırım daha tanımlanmamış sizce nasıl tanımlarım ?
146 değerinin sorun çıkartması gibi bir şey mümkün değil. Orayı bir sıra gibi düşünebilirsiniz. Birer birer artarak gidiyor
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst