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

  • Konuyu açan Konuyu açan karew1
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 25
  • 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ı.

karew1

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

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

GameSrc_Build_Err:
Genişlet Daralt Kopyala
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:
Genişlet Daralt Kopyala
        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:
Genişlet Daralt Kopyala
        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:
Genişlet Daralt Kopyala
    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:
Genişlet Daralt Kopyala
    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:
Genişlet Daralt Kopyala
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:
Genişlet Daralt Kopyala
    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:
Genişlet Daralt Kopyala
        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:
Genişlet Daralt Kopyala
    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:
Genişlet Daralt Kopyala
#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
 
@Whistle

char.h
C++:
Genişlet Daralt Kopyala
//#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:
Genişlet Daralt Kopyala
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:
Genişlet Daralt Kopyala
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:
Genişlet Daralt Kopyala
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:
Genişlet Daralt Kopyala
    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:
Genişlet Daralt Kopyala
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:
Genişlet Daralt Kopyala
    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ı.
Üst