diff --git a/soh/soh/Enhancements/custom_message/CustomMessage.cpp b/soh/soh/Enhancements/custom_message/CustomMessage.cpp index 95e260cf8..437c16ac8 100644 --- a/soh/soh/Enhancements/custom_message/CustomMessage.cpp +++ b/soh/soh/Enhancements/custom_message/CustomMessage.cpp @@ -60,13 +60,20 @@ void CustomMessage::FormatCustomMessage(std::string& message, ItemID iid) { message += MESSAGE_END(); } +void CustomMessage::FormatCustomMessage(std::string& message) { + size_t start_pos = 0; + std::replace(message.begin(), message.end(), '&', NEWLINE()[0]); + while ((start_pos = message.find('^', start_pos)) != std::string::npos) { + message.replace(start_pos, 1, WAIT_FOR_INPUT()); + start_pos += 3; + } + std::replace(message.begin(), message.end(), '@', PLAYER_NAME()[0]); + ReplaceSpecialCharacters(message); + ReplaceColors(message); + message += MESSAGE_END(); +} - -bool CustomMessage::CreateGetItemMessage(std::string tableID, GetItemID giid, ItemID iid, CustomMessageEntry messages) { - FormatCustomMessage(messages.english, iid); - FormatCustomMessage(messages.german, iid); - FormatCustomMessage(messages.french, iid); - const uint16_t textID = giid; +bool CustomMessage::InsertCustomMessage(std::string tableID, uint16_t textID, CustomMessageEntry messages) { auto result = messageTables.find(tableID); if (result == messageTables.end()) { return false; @@ -76,6 +83,23 @@ bool CustomMessage::CreateGetItemMessage(std::string tableID, GetItemID giid, It return success.second; } + + +bool CustomMessage::CreateGetItemMessage(std::string tableID, GetItemID giid, ItemID iid, CustomMessageEntry messages) { + FormatCustomMessage(messages.english, iid); + FormatCustomMessage(messages.german, iid); + FormatCustomMessage(messages.french, iid); + const uint16_t textID = giid; + return InsertCustomMessage(tableID, textID, messages); +} + +bool CustomMessage::CreateMessage(std::string tableID, uint16_t textID, CustomMessageEntry messages) { + FormatCustomMessage(messages.english); + FormatCustomMessage(messages.german); + FormatCustomMessage(messages.french); + return InsertCustomMessage(tableID, textID, messages); +} + std::string CustomMessage::RetrieveMessage(std::string tableID, uint16_t textID) { std::unordered_map::const_iterator result = messageTables.find(tableID); if (result == messageTables.end()) { diff --git a/soh/soh/Enhancements/custom_message/CustomMessage.h b/soh/soh/Enhancements/custom_message/CustomMessage.h index 4d35cfb9a..66afaf15c 100644 --- a/soh/soh/Enhancements/custom_message/CustomMessage.h +++ b/soh/soh/Enhancements/custom_message/CustomMessage.h @@ -31,6 +31,8 @@ class CustomMessage { void ReplaceSpecialCharacters(std::string &string); void ReplaceColors(std::string& string); void FormatCustomMessage(std::string& message, ItemID iid); + void FormatCustomMessage(std::string& message); + bool InsertCustomMessage(std::string tableID, uint16_t textID, CustomMessageEntry messages); std::string MESSAGE_END(); std::string ITEM_OBTAINED(uint8_t x); @@ -46,6 +48,7 @@ class CustomMessage { ~CustomMessage(); bool CreateGetItemMessage(std::string tableID, GetItemID giid, ItemID iid, CustomMessageEntry messages); + bool CreateMessage(std::string tableID, uint16_t textID, CustomMessageEntry messages); std::string RetrieveMessage(std::string tableID, uint16_t textID); bool AddCustomMessageTable(std::string tableID); }; \ No newline at end of file