Isso é causado pela quantidade de Caracteres enviado pelo chat, exoste uma verificação pra cada comando (@, =, -- ) só aumentar la que resolve, aumente tanto no (scene) e pra quem não estiver perto (human).
Correção, se não me engano é só isso.
void TMFieldScene::InsertInChatList(SListBox* pChatList, STRUCT_MOB* pMobData, SEditableText* pEditChat, unsigned int dwColor, int colorId, unsigned int startId)
{
MSG_MessageWhisper stMsgWhisper{};
stMsgWhisper.Header.ID = g_pObjectManager->m_dwCharID;
stMsgWhisper.Header.Type = MSG_MessageWhisper_Opcode;
stMsgWhisper.Color = colorId;
sprintf(stMsgWhisper.MobName, "");
sprintf(stMsgWhisper.String, "%s", pEditChat->GetText());
BASE_TransCurse(stMsgWhisper.String);
pEditChat->SetText((char*)"");
SendOneMessage((char*)&stMsgWhisper, sizeof(stMsgWhisper));
int len = strlen(stMsgWhisper.String) + strlen(pMobData->MobName);
const size_t maxLen = 52;
if (len <= maxLen)
{
char istrText[128]{};
sprintf(istrText, "[%s]> %s", pMobData->MobName, &stMsgWhisper.String[startId]);
auto ipNewItem = new SListBoxItem(istrText, dwColor, 0.0, 0.0, 280.0f, 16.0f, 0, 0x77777777, 1, 0);
if (ipNewItem && pChatList)
pChatList->AddItem(ipNewItem);
}
else
{
char dest[128]{};
char dest2[128]{};
if (IsClearString(stMsgWhisper.String, maxLen - 1))
{
strncpy(dest, stMsgWhisper.String, maxLen);
sprintf(dest2, "%s", &stMsgWhisper.String[maxLen]);
}
else
{
strncpy(dest, stMsgWhisper.String, maxLen - 1);
sprintf(dest2, "%s", &stMsgWhisper.String[maxLen - 1]);
}
char istrText[128]{};
sprintf(istrText, "[%s]> %s", g_pObjectManager->m_stMobData.MobName, &dest[maxLen]);
auto ipNewItem = new SListBoxItem(istrText, dwColor, 0.0, 0.0, 280.0f, 16.0f, 0, 0x77777777, 1, 0);
if (ipNewItem && pChatList)
pChatList->AddItem(ipNewItem);
auto ipNewItem2 = new SListBoxItem(dest2, dwColor, 0.0, 0.0, 280.0f, 16.0f, 0, 0x77777777, 1, 0);
if (strlen(stMsgWhisper.String) > maxLen && ipNewItem && pChatList)
pChatList->AddItem(ipNewItem);
}
}
@ Se não me engano o @@, =, - e ! também possui uns erros parecidos.