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

yunus0399

「RcT 」YunusED
Premium Üye
MT Üye
Mesaj
653
Çözümler
10
Beğeni
416
Puan
829
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:
# 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:
#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

  • cmd_general.rar
    12,9 KB · Gösterim: 4
Çözüm
Aşağıdaki eklemeleri yaparak çözebilirsiniz.

char.cpp:
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:
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:
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:
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:
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:
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:
    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.png
    Ekran görüntüsü 2023-09-08 183641.png
    32,2 KB · Gösterim: 45
Alttaki gibni güncelleyerek dener misin ?

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

Kod:
        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:
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