1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-06-15 00:05:02 +02:00

Use meta string for messages

This commit is contained in:
nordsoft
2023-09-27 23:11:11 +02:00
parent 03c099d4fd
commit ab373f08ab
7 changed files with 29 additions and 28 deletions

View File

@ -102,7 +102,7 @@ void MetaString::clear()
bool MetaString::empty() const bool MetaString::empty() const
{ {
return message.empty(); return message.empty() || toString().empty();
} }
std::string MetaString::getLocalString(const std::pair<EMetaText, ui32> & txt) const std::string MetaString::getLocalString(const std::pair<EMetaText, ui32> & txt) const

View File

@ -35,7 +35,7 @@ void CGPandoraBox::init()
{ {
i.reward.removeObject = true; i.reward.removeObject = true;
if(!message.empty() && i.message.empty()) if(!message.empty() && i.message.empty())
i.message = MetaString::createFromRawString(message); i.message = message;
} }
} }
@ -209,7 +209,7 @@ void CGPandoraBox::serializeJsonOptions(JsonSerializeFormat & handler)
{ {
CRewardableObject::serializeJsonOptions(handler); CRewardableObject::serializeJsonOptions(handler);
handler.serializeString("guardMessage", message); handler.serializeStruct("guardMessage", message);
if(!handler.saving) if(!handler.saving)
{ {
@ -297,7 +297,7 @@ void CGEvent::init()
{ {
i.reward.removeObject = removeAfterVisit; i.reward.removeObject = removeAfterVisit;
if(!message.empty() && i.message.empty()) if(!message.empty() && i.message.empty())
i.message = MetaString::createFromRawString(message); i.message = message;
} }
} }
@ -327,7 +327,7 @@ void CGEvent::activated( const CGHeroInstance * h ) const
InfoWindow iw; InfoWindow iw;
iw.player = h->tempOwner; iw.player = h->tempOwner;
if(!message.empty()) if(!message.empty())
iw.text.appendRawString(message); iw.text = message;
else else
iw.text.appendLocalString(EMetaText::ADVOB_TXT, 16); iw.text.appendLocalString(EMetaText::ADVOB_TXT, 16);
cb->showInfoDialog(&iw); cb->showInfoDialog(&iw);

View File

@ -19,7 +19,7 @@ struct InfoWindow;
class DLL_LINKAGE CGPandoraBox : public CRewardableObject class DLL_LINKAGE CGPandoraBox : public CRewardableObject
{ {
public: public:
std::string message; MetaString message;
void initObj(CRandomGenerator & rand) override; void initObj(CRandomGenerator & rand) override;
void onHeroVisit(const CGHeroInstance * h) const override; void onHeroVisit(const CGHeroInstance * h) const override;

View File

@ -268,7 +268,7 @@ void CGResource::onHeroVisit( const CGHeroInstance * h ) const
{ {
BlockingDialog ynd(true,false); BlockingDialog ynd(true,false);
ynd.player = h->getOwner(); ynd.player = h->getOwner();
ynd.text.appendRawString(message); ynd.text = message;
cb->showBlockingDialog(&ynd); cb->showBlockingDialog(&ynd);
} }
else else
@ -288,7 +288,7 @@ void CGResource::collectRes(const PlayerColor & player) const
if(!message.empty()) if(!message.empty())
{ {
sii.type = EInfoWindowMode::AUTO; sii.type = EInfoWindowMode::AUTO;
sii.text.appendRawString(message); sii.text = message;
} }
else else
{ {
@ -320,7 +320,7 @@ void CGResource::serializeJsonOptions(JsonSerializeFormat & handler)
if(!handler.saving && !handler.getCurrent()["guards"].Vector().empty()) if(!handler.saving && !handler.getCurrent()["guards"].Vector().empty())
CCreatureSet::serializeJson(handler, "guards", 7); CCreatureSet::serializeJson(handler, "guards", 7);
handler.serializeInt("amount", amount, 0); handler.serializeInt("amount", amount, 0);
handler.serializeString("guardMessage", message); handler.serializeStruct("guardMessage", message);
} }
bool CGTeleport::isEntrance() const bool CGTeleport::isEntrance() const
@ -728,8 +728,8 @@ void CGArtifact::onHeroVisit(const CGHeroInstance * h) const
case Obj::ARTIFACT: case Obj::ARTIFACT:
{ {
iw.components.emplace_back(Component::EComponentType::ARTIFACT, subID, 0, 0); iw.components.emplace_back(Component::EComponentType::ARTIFACT, subID, 0, 0);
if(message.length()) if(!message.empty())
iw.text.appendRawString(message); iw.text = message;
else else
iw.text.appendLocalString(EMetaText::ART_EVNTS, subID); iw.text.appendLocalString(EMetaText::ART_EVNTS, subID);
} }
@ -738,8 +738,8 @@ void CGArtifact::onHeroVisit(const CGHeroInstance * h) const
{ {
int spellID = storedArtifact->getScrollSpellID(); int spellID = storedArtifact->getScrollSpellID();
iw.components.emplace_back(Component::EComponentType::SPELL, spellID, 0, 0); iw.components.emplace_back(Component::EComponentType::SPELL, spellID, 0, 0);
if(message.length()) if(!message.empty())
iw.text.appendRawString(message); iw.text = message;
else else
{ {
iw.text.appendLocalString(EMetaText::ADVOB_TXT,135); iw.text.appendLocalString(EMetaText::ADVOB_TXT,135);
@ -764,8 +764,8 @@ void CGArtifact::onHeroVisit(const CGHeroInstance * h) const
{ {
BlockingDialog ynd(true,false); BlockingDialog ynd(true,false);
ynd.player = h->getOwner(); ynd.player = h->getOwner();
if(message.length()) if(!message.empty())
ynd.text.appendRawString(message); ynd.text = message;
else else
{ {
// TODO: Guard text is more complex in H3, see mantis issue 2325 for details // TODO: Guard text is more complex in H3, see mantis issue 2325 for details
@ -779,11 +779,11 @@ void CGArtifact::onHeroVisit(const CGHeroInstance * h) const
break; break;
case Obj::SPELL_SCROLL: case Obj::SPELL_SCROLL:
{ {
if(message.length()) if(!message.empty())
{ {
BlockingDialog ynd(true,false); BlockingDialog ynd(true,false);
ynd.player = h->getOwner(); ynd.player = h->getOwner();
ynd.text.appendRawString(message); ynd.text = message;
cb->showBlockingDialog(&ynd); cb->showBlockingDialog(&ynd);
} }
else else
@ -828,7 +828,7 @@ void CGArtifact::afterAddToMap(CMap * map)
void CGArtifact::serializeJsonOptions(JsonSerializeFormat& handler) void CGArtifact::serializeJsonOptions(JsonSerializeFormat& handler)
{ {
handler.serializeString("guardMessage", message); handler.serializeStruct("guardMessage", message);
CArmedInstance::serializeJsonOptions(handler); CArmedInstance::serializeJsonOptions(handler);
if(!handler.saving && !handler.getCurrent()["guards"].Vector().empty()) if(!handler.saving && !handler.getCurrent()["guards"].Vector().empty())
CCreatureSet::serializeJson(handler, "guards", 7); CCreatureSet::serializeJson(handler, "guards", 7);
@ -1046,7 +1046,7 @@ void CGSignBottle::initObj(CRandomGenerator & rand)
{ {
auto vector = VLC->generaltexth->findStringsWithPrefix("core.randsign"); auto vector = VLC->generaltexth->findStringsWithPrefix("core.randsign");
std::string messageIdentifier = *RandomGeneratorUtil::nextItem(vector, rand); std::string messageIdentifier = *RandomGeneratorUtil::nextItem(vector, rand);
message = VLC->generaltexth->translate(messageIdentifier); message.appendTextID(TextIdentifier("core", "randsign", messageIdentifier).get());
} }
if(ID == Obj::OCEAN_BOTTLE) if(ID == Obj::OCEAN_BOTTLE)
@ -1059,7 +1059,7 @@ void CGSignBottle::onHeroVisit( const CGHeroInstance * h ) const
{ {
InfoWindow iw; InfoWindow iw;
iw.player = h->getOwner(); iw.player = h->getOwner();
iw.text.appendRawString(message); iw.text = message;
cb->showInfoDialog(&iw); cb->showInfoDialog(&iw);
if(ID == Obj::OCEAN_BOTTLE) if(ID == Obj::OCEAN_BOTTLE)
@ -1068,7 +1068,7 @@ void CGSignBottle::onHeroVisit( const CGHeroInstance * h ) const
void CGSignBottle::serializeJsonOptions(JsonSerializeFormat& handler) void CGSignBottle::serializeJsonOptions(JsonSerializeFormat& handler)
{ {
handler.serializeString("text", message); handler.serializeStruct("text", message);
} }
void CGScholar::onHeroVisit( const CGHeroInstance * h ) const void CGScholar::onHeroVisit( const CGHeroInstance * h ) const

View File

@ -43,7 +43,7 @@ public:
class DLL_LINKAGE CGSignBottle : public CGObjectInstance //signs and ocean bottles class DLL_LINKAGE CGSignBottle : public CGObjectInstance //signs and ocean bottles
{ {
public: public:
std::string message; MetaString message;
void onHeroVisit(const CGHeroInstance * h) const override; void onHeroVisit(const CGHeroInstance * h) const override;
void initObj(CRandomGenerator & rand) override; void initObj(CRandomGenerator & rand) override;
@ -119,7 +119,7 @@ class DLL_LINKAGE CGArtifact : public CArmedInstance
{ {
public: public:
CArtifactInstance * storedArtifact = nullptr; CArtifactInstance * storedArtifact = nullptr;
std::string message; MetaString message;
void onHeroVisit(const CGHeroInstance * h) const override; void onHeroVisit(const CGHeroInstance * h) const override;
void battleFinished(const CGHeroInstance *hero, const BattleResult &result) const override; void battleFinished(const CGHeroInstance *hero, const BattleResult &result) const override;
@ -149,7 +149,7 @@ public:
static constexpr ui32 RANDOM_AMOUNT = 0; static constexpr ui32 RANDOM_AMOUNT = 0;
ui32 amount = RANDOM_AMOUNT; //0 if random ui32 amount = RANDOM_AMOUNT; //0 if random
std::string message; MetaString message;
void onHeroVisit(const CGHeroInstance * h) const override; void onHeroVisit(const CGHeroInstance * h) const override;
void initObj(CRandomGenerator & rand) override; void initObj(CRandomGenerator & rand) override;

View File

@ -1135,7 +1135,7 @@ CGObjectInstance * CMapLoaderH3M::readMonster(const int3 & mapPosition, const Ob
CGObjectInstance * CMapLoaderH3M::readSign(const int3 & mapPosition) CGObjectInstance * CMapLoaderH3M::readSign(const int3 & mapPosition)
{ {
auto * object = new CGSignBottle(); auto * object = new CGSignBottle();
object->message = readLocalizedString(TextIdentifier("sign", mapPosition.x, mapPosition.y, mapPosition.z, "message")); object->message.appendTextID(readLocalizedString(TextIdentifier("sign", mapPosition.x, mapPosition.y, mapPosition.z, "message")));
reader->skipZero(4); reader->skipZero(4);
return object; return object;
} }
@ -2247,12 +2247,12 @@ void CMapLoaderH3M::readEvents()
} }
} }
void CMapLoaderH3M::readMessageAndGuards(std::string & message, CCreatureSet * guards, const int3 & position) void CMapLoaderH3M::readMessageAndGuards(MetaString & message, CCreatureSet * guards, const int3 & position)
{ {
bool hasMessage = reader->readBool(); bool hasMessage = reader->readBool();
if(hasMessage) if(hasMessage)
{ {
message = readLocalizedString(TextIdentifier("guards", position.x, position.y, position.z, "message")); message.appendTextID(readLocalizedString(TextIdentifier("guards", position.x, position.y, position.z, "message")));
bool hasGuards = reader->readBool(); bool hasGuards = reader->readBool();
if(hasGuards) if(hasGuards)
readCreatureSet(guards, 7); readCreatureSet(guards, 7);

View File

@ -17,6 +17,7 @@ VCMI_LIB_NAMESPACE_BEGIN
class CGHeroInstance; class CGHeroInstance;
class MapReaderH3M; class MapReaderH3M;
class MetaString;
class CArtifactInstance; class CArtifactInstance;
class CGObjectInstance; class CGObjectInstance;
class CGSeerHut; class CGSeerHut;
@ -215,7 +216,7 @@ private:
/** /**
* read optional message and optional guards * read optional message and optional guards
*/ */
void readMessageAndGuards(std::string & message, CCreatureSet * guards, const int3 & position); void readMessageAndGuards(MetaString & message, CCreatureSet * guards, const int3 & position);
/// reads string from input stream and converts it to unicode /// reads string from input stream and converts it to unicode
std::string readBasicString(); std::string readBasicString();