Çözüldü server build sorunu

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

YunusEmreOfficial

Online - Çevrimiçi
Premium Üye
Yardımsever Üye
Usta Üye
Mesaj
1.209
Çözümler
34
Beğeni
896
Puan
1.139
Ticaret Puanı
0
Merhaba arkadaşlar başka forumda gördüğüm bir boss sistemini eklemey açlışıyorumda client derlendi ama giriş bölümü bozuldu birde server taraflı gameyi derlerken aşağıdaki hatayı veriyo kodda sorun yok aslında dediği gibi ekledim sizce nerde sorun var

kr56brx.png




ekletmek istediği kod bloğu:
Genişlet Daralt Kopyala
# Add

#ifdef ENABLE_TRACK_WINDOW
#include "new_mob_timer.h"
ACMD(do_track_window)
{
    std::vector<std::string> vecArgs;
    split_argument(argument, vecArgs);
    if (vecArgs.size() < 2) { return; }
    else if (vecArgs[1] == "load")
    {
        if (ch->GetProtectTime("track_dungeon")==1)
            return;
        ch->GetDungeonCooldown(WORD_MAX);
        for (BYTE i = 2; i < vecArgs.size(); ++i)
        {
            WORD globalBossID;
            if (!str_to_number(globalBossID, vecArgs[i].c_str()))
                continue;
            CNewMobTimer::Instance().GetTrackData(ch, globalBossID);
        }
        ch->SetProtectTime("track_dungeon", 1);
    }
    else if (vecArgs[1] == "reenter")
    {
        if (!ch->IsGM())
            return;
        if (vecArgs.size() < 4) { return; }
        WORD testVnum;
        if (!str_to_number(testVnum, vecArgs[2].c_str()))
            return;
        int testTime;
        if (!str_to_number(testTime, vecArgs[3].c_str()))
            return;
        ch->GetDungeonCooldownTest(testVnum, testTime, false);
    }
    else if (vecArgs[1] == "cooldown")
    {
        if (!ch->IsGM())
            return;
        if (vecArgs.size() < 4) { return; }
        WORD testVnum;
        if (!str_to_number(testVnum, vecArgs[2].c_str()))
            return;
        int testTime;
        if (!str_to_number(testTime, vecArgs[3].c_str()))
            return;
        ch->GetDungeonCooldownTest(testVnum, testTime, true);
    }
    else if (vecArgs[1] == "teleport")
    {
        if (vecArgs.size() < 3) { return; }
        WORD mobIndex;
        if (!str_to_number(mobIndex, vecArgs[2].c_str()))
            return;
        std::map<WORD, std::pair<std::pair<long, long>,std::pair<WORD, BYTE>>> m_TeleportData = {
            //{mobindex - {{X, Y}, {PORT, MINLVL}}},
            {6091, { {5984, 7073}, {0, 0} }},
        };
        const auto it = m_TeleportData.find(mobIndex);
        if (it != m_TeleportData.end())
        {
            if (ch->GetLevel() < it->second.second.second)
            {
                ch->ChatPacket(CHAT_TYPE_INFO, "You don't has enought level for teleport!");
                return;
            }
            ch->WarpSet(it->second.first.first * 100, it->second.first.second * 100, it->second.second.first);
        }
    }
}
#endif


benim eklediğim dosya:
Genişlet Daralt Kopyala
#include "unique_item.h"
#include "threeway_war.h"
#include "log.h"
#include "../../common/VnumHelper.h"

extern int g_server_id;

extern int g_nPortalLimitTime;



#ifdef ENABLE_TRACK_WINDOW
#include "new_mob_timer.h"
ACMD(do_track_window)
{
    std::vector<std::string> vecArgs;
    split_argument(argument, vecArgs);
    if (vecArgs.size() < 2) { return; }
    else if (vecArgs[1] == "load")
    {
        if (ch->GetProtectTime("track_dungeon")==1)
            return;
        ch->GetDungeonCooldown(WORD_MAX);
        for (BYTE i = 2; i < vecArgs.size(); ++i)
        {
            WORD globalBossID;
            if (!str_to_number(globalBossID, vecArgs[i].c_str()))
                continue;
            CNewMobTimer::Instance().GetTrackData(ch, globalBossID);
        }
        ch->SetProtectTime("track_dungeon", 1);
    }
    else if (vecArgs[1] == "reenter")
    {
        if (!ch->IsGM())
            return;
        if (vecArgs.size() < 4) { return; }
        WORD testVnum;
        if (!str_to_number(testVnum, vecArgs[2].c_str()))
            return;
        int testTime;
        if (!str_to_number(testTime, vecArgs[3].c_str()))
            return;
        ch->GetDungeonCooldownTest(testVnum, testTime, false);
    }
    else if (vecArgs[1] == "cooldown")
    {
        if (!ch->IsGM())
            return;
        if (vecArgs.size() < 4) { return; }
        WORD testVnum;
        if (!str_to_number(testVnum, vecArgs[2].c_str()))
            return;
        int testTime;
        if (!str_to_number(testTime, vecArgs[3].c_str()))
            return;
        ch->GetDungeonCooldownTest(testVnum, testTime, true);
    }
    else if (vecArgs[1] == "teleport")
    {
        if (vecArgs.size() < 3) { return; }
        WORD mobIndex;
        if (!str_to_number(mobIndex, vecArgs[2].c_str()))
            return;
        std::map<WORD, std::pair<std::pair<long, long>,std::pair<WORD, BYTE>>> m_TeleportData = {
            //{mobindex - {{X, Y}, {PORT, MINLVL}}},
            {6091, { {5984, 7073}, {0, 0} }},
        };
        const auto it = m_TeleportData.find(mobIndex);
        if (it != m_TeleportData.end())
        {
            if (ch->GetLevel() < it->second.second.second)
            {
                ch->ChatPacket(CHAT_TYPE_INFO, "You don't has enought level for teleport!");
                return;
            }
            ch->WarpSet(it->second.first.first * 100, it->second.first.second * 100, it->second.second.first);
        }
    }
}
#endif

ACMD(do_user_horse_ride)
{
    if (ch->IsObserverMode())
        return;

    if (ch->IsDead() || ch->IsStun())
        return;

    if (ch->IsHorseRiding() == false)
    {
        // 말이 아닌 다른탈것을 타고있다.
        if (ch->GetMountVnum())
        {
            ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이미 탈것을 이용중입니다."));
            return;
        }

        if (ch->GetQuestFlag("HORSE.CHECKER") && get_global_time() < ch->GetQuestFlag("HORSE.CHECKER"))
        {
            ch->ChatPacket(CHAT_TYPE_INFO, "Bunu yapabilmek i?n %d saniye bekleyin.", (ch->GetQuestFlag("HORSE.CHECKER") - get_global_time()) % 180);
            return;
        }

        if (ch->GetHorse() == NULL)
        {
            ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("말을 먼저 소환해주세요."));
            return;
        }

        ch->SetQuestFlag("HORSE.CHECKER", get_global_time() + 3);
        ch->StartRiding();
    }
    else
    {
        ch->StopRiding();
    }
}


Not : benim eklemeye çalıştıuğım dosya bu kadar değil daha fazla ama buraya sığmadığı için böyle eklediğim yeri sadece koydum altta dosya mevcut
 

Dosya Eklentileri

Çözüm
Aşağıdaki eklemeleri yaparak çözebilirsiniz.

char.cpp:
Genişlet Daralt Kopyala
En alta ekle;
void CHARACTER::SetProtectTime(const std::string& flagname, int value)
{
    itertype(m_protection_Time) it = m_protection_Time.find(flagname);
    if (it != m_protection_Time.end())
        it->second = value;
    else
        m_protection_Time.insert(make_pair(flagname, value));
}

int CHARACTER::GetProtectTime(const std::string& flagname) const
{
    itertype(m_protection_Time) it = m_protection_Time.find(flagname);
    if (it != m_protection_Time.end())
        return it->second;
    return 0;
}

char.h:
Genişlet Daralt Kopyala
Arat;
};

ESex GET_SEX(LPCHARACTER ch);

}; üstüne ekle;
        void    SetProtectTime(const std::string& flagname, int value);
        int        GetProtectTime(const...
Aşağıdaki eklemeleri yaparak çözebilirsiniz.

char.cpp:
Genişlet Daralt Kopyala
En alta ekle;
void CHARACTER::SetProtectTime(const std::string& flagname, int value)
{
    itertype(m_protection_Time) it = m_protection_Time.find(flagname);
    if (it != m_protection_Time.end())
        it->second = value;
    else
        m_protection_Time.insert(make_pair(flagname, value));
}

int CHARACTER::GetProtectTime(const std::string& flagname) const
{
    itertype(m_protection_Time) it = m_protection_Time.find(flagname);
    if (it != m_protection_Time.end())
        return it->second;
    return 0;
}

char.h:
Genişlet Daralt Kopyala
Arat;
};

ESex GET_SEX(LPCHARACTER ch);

}; üstüne ekle;
        void    SetProtectTime(const std::string& flagname, int value);
        int        GetProtectTime(const std::string& flagname) const;
        std::map<std::string, int>  m_protection_Time;
 
Çözüm
Aşağıdaki eklemeleri yaparak çözebilirsiniz.

char.cpp:
Genişlet Daralt Kopyala
En alta ekle;
void CHARACTER::SetProtectTime(const std::string& flagname, int value)
{
    itertype(m_protection_Time) it = m_protection_Time.find(flagname);
    if (it != m_protection_Time.end())
        it->second = value;
    else
        m_protection_Time.insert(make_pair(flagname, value));
}

int CHARACTER::GetProtectTime(const std::string& flagname) const
{
    itertype(m_protection_Time) it = m_protection_Time.find(flagname);
    if (it != m_protection_Time.end())
        return it->second;
    return 0;
}

char.h:
Genişlet Daralt Kopyala
Arat;
};

ESex GET_SEX(LPCHARACTER ch);

}; üstüne ekle;
        void    SetProtectTime(const std::string& flagname, int value);
        int        GetProtectTime(const std::string& flagname) const;
        std::map<std::string, int>  m_protection_Time;
hemen deniycem
 
Tabi ki deneyip bilgi verebilirsiniz buradan :)
kodları denedim alttaki get ve set düzeldi ama split_argument düzelmedi be onun için one_argument yazıyorum ama o zamanda chara dönüştürülemedi diyor nasıl çözerim orayı

yani tam olarak bahsettiğim kısım baştaki kodlar

Kod:
Genişlet Daralt Kopyala
    std::vector<std::char> vecArgs;
    one_argument(argument, vecArgs);
    if (vecArgs.size() < 2) { return; }
 

Dosya Eklentileri

  • Ekran görüntüsü 2023-09-08 183641.webp
    Ekran görüntüsü 2023-09-08 183641.webp
    29,3 KB · Gösterim: 97
Alttaki gibni güncelleyerek dener misin ?

Kod:
Genişlet Daralt Kopyala
        std::vector<std::string> vecArgs;
        one_argument(argument, vecArgs);
        if (vecArgs.size() < 2)
            { return; }
 
Alttaki gibni güncelleyerek dener misin ?

Kod:
Genişlet Daralt Kopyala
        std::vector<std::string> vecArgs;
        one_argument(argument, vecArgs);
        if (vecArgs.size() < 2)
            { return; }
bunu böyle değilde chara dönüştürerek çözdüm ama sorun yaşarmıyım oyunu açıp bakıcam ama sorunlar bitmiyo :D şuan shop_managerden hata alıyorum çözemedim sistemi baştan yazsam bu kadar uğraşmaz çoktan yazmıştım :D :D yazdığım kodlara bakabilrmisin kod bilgin varsa sorun yaşatırmı sence ama bunuda deniycem yardımların için çok teşekkür ederim <3

yazdığım kod:
Genişlet Daralt Kopyala
ACMD(do_track_window)
{
    std::vector<std::__cxx11::basic_string<char>> vecArgs;

    size_t totalLength = 0;
    for (const std::string& str : vecArgs) {
        totalLength += str.length();
}


    char* argsArray = new char[totalLength + vecArgs.size()];
    size_t currentIndex = 0;

    for (const std::string& str : vecArgs) {
        strcpy(argsArray + currentIndex, str.c_str());
        currentIndex += str.length() + 1;
    }

    one_argument(argument, argsArray, totalLength + vecArgs.size());

    delete[] argsArray;
    if (vecArgs.size() < 2) { return; }
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst