diff -r 6f561fdaa18d -r d78dd115f23a core/UserMessages.cpp --- a/core/UserMessages.cpp Sat May 12 02:14:12 2007 +0000 +++ b/core/UserMessages.cpp Sat May 12 04:47:58 2007 +0000 @@ -13,6 +13,7 @@ */ #include "UserMessages.h" +#include "sm_stringutil.h" UserMessages g_UserMsgs; @@ -41,6 +42,12 @@ m_FreeListeners.popall(); } +void UserMessages::OnSourceModStartup(bool late) +{ + /* -1 means SourceMM was unable to get the user message list */ + m_FallbackSearch = (g_SMAPI->GetUserMessageCount() == -1); +} + void UserMessages::OnSourceModAllInitialized() { g_ShareSys.AddInterface(NULL, this); @@ -64,6 +71,23 @@ if (!sm_trie_retrieve(m_Names, msg, reinterpret_cast(&msgid))) { + if (m_FallbackSearch) + { + char msgbuf[64]; + int size; + msgid = 0; + + while (gamedll->GetUserMessageInfo(msgid, msgbuf, sizeof(msgbuf), size)) + { + if (strcmp(msgbuf, msg) == 0) + { + sm_trie_insert(m_Names, msg, reinterpret_cast(msgid)); + return msgid; + } + msgid++; + } + } + msgid = g_SMAPI->FindUserMessage(msg); if (msgid != INVALID_MESSAGE_ID) @@ -75,6 +99,26 @@ return msgid; } +bool UserMessages::GetMessageName(int msgid, char *buffer, size_t maxlength) const +{ + if (m_FallbackSearch) + { + printf("hello"); + int size; + return gamedll->GetUserMessageInfo(msgid, buffer, maxlength, size); + } + printf("hello2"); + const char *msg = g_SMAPI->GetUserMessage(msgid); + + if (msg) + { + strncopy(buffer, msg, maxlength); + return true; + } + + return false; +} + bf_write *UserMessages::StartMessage(int msg_id, cell_t players[], unsigned int playersNum, int flags) { bf_write *buffer;