Jump to content
  • 0

Mangosd displays error


Zirios

Question

18 answers to this question

Recommended Posts

5 hours ago, Talendrys said:

Hello,

Do you have all the DBC generated ?

Tal'

 

Hello,

I think so, i did not get an error while extracting and all the files seems to be there, even the component.wow-enUS. Here is the DBC Extraction log.

I even re-extracted and the same happened.

MaNGOSExtractor_detailed.log

Ok i think that there is some problem with my installation of WOW, because if i edit the Locale-enUS.mpq and extract the component.wow-enUS it points to the version 15050 but when i extract it with the extractor it is changed to 15595. Also if i change the compontent.wow with the one i extract from Locale-enUS.mpq i get the error : That my dbc is at 15050 and i am expected to have 15595 dbc.

Link to comment
Share on other sites

When i open WOW it displays on the bottom left corner that this is the build 15595, so i think i have the correct build.

What directories?
 

The steps if followed where like this: i downloaded and compiled the source of MangosThree then used the extractor to get the maps,vmaps,dbc,mmaps that i copied in a folder that contains mangosd.exe etc etc...

Link to comment
Share on other sites

Ok, I did a fresh build, then data extraction from the latest repos.

The startup was correct for the dbc's and no errors like yours exist.

Build 15595 is also the correct build.

can you check the component.wow-enGB.txt (enGB will be your locale) in the dbc folder and open it to see what version it believes it has installed ?

 

Link to comment
Share on other sites

I had component.wow-enUS and what was inside is this:

<componentinfo format="1">
    <component name="wow-enus" version="15595" />
</componentinfo>


Now i am extracting enGB to see if the problem still persists.

 

Could the problem be because i used enUS?

 

Link to comment
Share on other sites

Well with en-GB everything worked as a charm, few errors and missing tables but i can login etc. I cannot undertand though why it did not work with en-US as it was the first one i downloaded. Sorry for the trouble and thank you for the assistance

Link to comment
Share on other sites

int ReadDBCLocale(const std::string sDataPath)
{
    std::string sDBCpath = sDataPath + "dbc/";
    std::string sFilename;
    
    for (int uLocaleIndex = 0; uLocaleIndex < MAX_LOCALE; ++uLocaleIndex)
    {
        sFilename  = sDBCpath + "component.wow-" + fullLocaleNameList[uLocaleIndex].name + ".txt";
        if (FILE* file = fopen(sFilename.c_str(), "rb"))
        {
            return uLocaleIndex; // Successfully located the locale
        }
    }

    return -1; // Failed to locate or access the component.wow<locale>.txt file
}

This is the method at the origin of the error. Apparently, for the enUS DBC, the file component.wow-enUS.txt doesn't exist. CAn you check if you have such file into the /dbc directory for enUS generated files ?

Tal'

Link to comment
Share on other sites

Yep it is there and as i said if i change the version number it reads the file and prompts me to ge tthe correct version number. So my guess is either because another file was corrupt and/or of another version or either it has something to do with my computers locale(?). Also weird was the fact that inside Locale.MPQ the version of the component.wow-enUS was diferent than the one extracted.

Link to comment
Share on other sites

The only place where this message appears is in this call:

void World::DetectDBCLang()
{
    // get the DBC Locale
    int uLocale = ReadDBCLocale(m_dataPath);

    if (!uLocale)
    {
        sLog.outError("Unable to determine your DBC Locale! (corrupt or missing component.wow-<locale>.txt file)");
        Log::WaitBeforeContinueIfNeed();
        exit(1);
    }
  ...
}

And... I got it ! The method ReadDBCLocale(const std::string sDataPath) is trying to find your locale through the loop I've mentionned above. It's starting the index at 0 and goes through the table fullLocaleNameList which contains:

// used for search by name or iterate all names
LocaleNameStr const fullLocaleNameList[] =
{
    { "enUS", LOCALE_enUS },
    { "enGB", LOCALE_enUS },
    { "koKR", LOCALE_koKR },
    { "frFR", LOCALE_frFR },
    { "deDE", LOCALE_deDE },
    { "zhCN", LOCALE_zhCN },
    { "zhTW", LOCALE_zhTW },
    { "esES", LOCALE_esES },
    { "esMX", LOCALE_esMX },
    { "ruRU", LOCALE_ruRU },
    { NULL,   LOCALE_enUS }
};

The locale enUS is localted at the index 0, so the method is working well and returns 0. So, the method DetectDBCLang will actually never do what is expected due to:

 if (!uLocale)
    {
        ...
    }

In this case, the condition can only be true if the uLocale value is 0. Replace that check by:

 if (uLocale == -1)
    {
        sLog.outError("Unable to determine your DBC Locale! (corrupt or missing component.wow-<locale>.txt file)");
        Log::WaitBeforeContinueIfNeed();
        exit(1);
    }

And it will work like a charm.

Tal'

Link to comment
Share on other sites

Yep now worked fine although i think i will use the EnGB as server base. If you take a look at the cmd at my first post there is one more error about the core and the db is this something to worry about? Ty again for the help :)

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. Privacy Policy Terms of Use