Çözüldü Locale quest %s ve %d sorunu

  • Konuyu açan Konuyu açan ordoru14
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 3
  • Gösterim Gösterim 173
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ı.

ordoru14

Üye
Üye
Mesaj
29
Çözümler
2
Beğeni
7
Puan
418
Ticaret Puanı
0
wonu yanga çevirirken ekranda (%s Yang'ı %s Won'a dönüştürmek ister misin?1100.000.000) yazıyor sorunu bulamadım
not : %s Yang'ı %d Won'a dönüştürmek ister misin şeklindede denedim

locale_quest fonksiyonu :
Kod:
Genişlet Daralt Kopyala
locale_quest = function(vnum, ...) -- LC -> locale_quest.txt
    local val = ""
    for i, v in ipairs(arg) do
        val = val .. tostring(string.format(";%s", v))
    end
    return string.format("[LC;%d%s]", vnum, val)
end


locale_quest.txt :
Kod:
Genişlet Daralt Kopyala
10041    %s Yang'ı %s Won'a dönüştürmek ister misin?


quest :
Kod:
Genişlet Daralt Kopyala
local Cheque = tonumber(input())
say(locale_quest(10041), gold_format(GoldWithTax), Cheque)

binary :
Kod:
Genişlet Daralt Kopyala
void CPythonLocale::ReplaceLocaleString(std::string& sMessage) const
{
    while (true)
    {
        size_t pos_1 = sMessage.rfind("[LS;");
        if (pos_1 == std::string::npos)
            break;

        size_t pos_2 = sMessage.find(';', pos_1);
        if (pos_2 == std::string::npos)
            break;

        ++pos_2;

        size_t pos_3 = sMessage.find('[', pos_2);
        size_t pos_4 = sMessage.find(']', pos_2);
        if (pos_4 == std::string::npos)
            break;

        if (pos_3 != std::string::npos && pos_3 < pos_4)
            pos_4 = sMessage.find(']', pos_4 + 1);

        std::string sArgs = sMessage.substr(pos_2, pos_4 - pos_2);

        CTokenVector kTokenVector;
        SplitLine(sArgs.c_str(), ";", &kTokenVector);

        if (kTokenVector.empty())
            break;

        auto it = m_LocaleStringMap[LOCALE_STRING].find(kTokenVector[0]);
        if (it == m_LocaleStringMap[LOCALE_STRING].end()) {
            TraceError("CPythonLocale::ReplaceLocaleString wrong LS vnum : %s", kTokenVector[0].c_str());
            break;
        }

        if (kTokenVector.size() > 1) {
            try {
                boost::format f(it->second);

                for (size_t i = 1; i < kTokenVector.size(); i++)
                    f% kTokenVector[i];

                sMessage.replace(pos_1, (pos_4 + 1) - pos_1, f.str());
            }
            catch (const std::exception& ex) {
                TraceError("CPythonLocale::ReplaceLocaleString: Error: %s", ex.what());
                break;
            }
        }
        else
            sMessage.replace(pos_1, (pos_4 + 1) - pos_1, it->second);
    }
}

bool CPythonLocale::LoadQuestLocaleString(const char* c_szFileName)
{
    if (m_LocaleStringMap[LOCALE_QUEST_STRING].empty() == false)
        return true;

    const VOID* pvData;
    CMappedFile kFile;
    if (!CEterPackManager::Instance().Get(kFile, c_szFileName, &pvData)) {
        TraceError("CPythonLocale::LoadQuestLocaleString(c_szFileName: %s) - Load Error", c_szFileName);
        return false;
    }

    CMemoryTextFileLoader kTextFileLoader;
    kTextFileLoader.Bind(kFile.Size(), pvData);

    CTokenVector kTokenVector;
    for (uint32_t i = 0; i < kTextFileLoader.GetLineCount(); ++i)
    {
        const std::string& c_rstLine = kTextFileLoader.GetLineString(i);
        if (c_rstLine.empty())
            continue;

        if (c_rstLine[0] == '#')
            continue;

        if (!kTextFileLoader.SplitLineByTab(i, &kTokenVector))
            continue;

        if (kTokenVector.size() != 2)
            continue;

        m_LocaleStringMap[LOCALE_QUEST_STRING][kTokenVector[0]] = kTokenVector[1];
    }

    return true;
}
void CPythonLocale::ReplaceQuestLocaleString(std::string& sMessage) const
{
    while (true)
    {
        size_t pos_1 = sMessage.rfind("[LC;");
        if (pos_1 == std::string::npos)
            break;

        size_t pos_2 = sMessage.find(';', pos_1);
        if (pos_2 == std::string::npos)
            break;

        ++pos_2;

        size_t pos_3 = sMessage.find('[', pos_2);
        size_t pos_4 = sMessage.find(']', pos_2);
        if (pos_4 == std::string::npos)
            break;

        if (pos_3 != std::string::npos && pos_3 < pos_4)
            pos_4 = sMessage.find(']', pos_4 + 1);

        std::string sArgs = sMessage.substr(pos_2, pos_4 - pos_2);

        CTokenVector kTokenVector;
        SplitLine(sArgs.c_str(), ";", &kTokenVector);

        if (kTokenVector.empty())
            break;

        auto it = m_LocaleStringMap[LOCALE_QUEST_STRING].find(kTokenVector[0]);
        if (it == m_LocaleStringMap[LOCALE_QUEST_STRING].end()) {
            TraceError("CPythonLocale::ReplaceQuestLocaleString wrong LC vnum : %s", kTokenVector[0].c_str());
            break;
        }

        if (kTokenVector.size() > 1) {
            try {
                boost::format f(it->second);

                for (size_t i = 1; i < kTokenVector.size(); i++)
                    f% kTokenVector[i];

                sMessage.replace(pos_1, (pos_4 + 1) - pos_1, f.str());
            }
            catch (const std::exception& ex) {
                TraceError("CPythonLocale::ReplaceQuestLocaleString: Error: %s", ex.what());
                break;
            }
        }
        else
            sMessage.replace(pos_1, (pos_4 + 1) - pos_1, it->second);
    }
}


görsel :
1758585133158.webp
 
Son düzenleme:
local_quest.txt kısmındaki %s kısımlarını "%s" şeklinde yazmak gerekmiyor muydu?
 
sorun çözüldü :
quest yazılırken yazım hatası olmuş
say(locale_quest(10041), gold_format(GoldWithTax), Cheque) -> say(locale_quest(10041, gold_format(GoldWithTax), Cheque))
 
Çözüm
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst