Skip to content

Instantly share code, notes, and snippets.

@apathyboy
Created April 15, 2016 20:56
Show Gist options
  • Select an option

  • Save apathyboy/4db34d7142bf06222661718742d168b9 to your computer and use it in GitHub Desktop.

Select an option

Save apathyboy/4db34d7142bf06222661718742d168b9 to your computer and use it in GitHub Desktop.
void ObjectController::_handleSpatialChatInternal(uint64 targetId,Message* message,ObjectControllerCmdProperties* cmdProperties)
{
// FIXME: for now assume only players send chat
PlayerObject* playerObject = dynamic_cast<PlayerObject*>(mObject);
BString chatData;
message->getStringUnicode16(chatData);
chatData.convert(BSTRType_ANSI);
int8* data = chatData.getRawData();
uint16 len = chatData.getLength();
char chatElement[5][32];
uint8 element = 0;
uint8 elementIndex = 0;
uint16 byteCount = 0;
while(element < 5)
{
if(*data == ' ')
{
chatElement[element][elementIndex] = 0;
byteCount++;
element++;
data++;
elementIndex = 0;
continue;
}
chatElement[element][elementIndex] = *data;
elementIndex++;
byteCount++;
data++;
}
BString chatMessage(data);
// need to truncate or we may get in trouble
if(len - byteCount > 256)
{
chatMessage.setLength(256);
chatMessage.getRawData()[256] = 0;
}
else
{
chatMessage.setLength(len - byteCount);
chatMessage.getRawData()[len - byteCount] = 0;
}
chatMessage.convert(BSTRType_Unicode16);
// Convert the chat elements to logical types before passing them on.
uint64_t chat_target_id;
try {
chat_target_id = boost::lexical_cast<uint64>(chatElement[0]);
} catch(boost::bad_lexical_cast &) {
chat_target_id = 0;
}
SocialChatType chat_type_id = static_cast<SocialChatType>(atoi(chatElement[1]));
MoodType mood_id = static_cast<MoodType>(atoi(chatElement[2]));
if (!gWorldConfig->isInstance())
{
gMessageLib->SendSpatialChat(playerObject, chatMessage.getUnicode16(), NULL, chat_target_id, 0x32, chat_type_id, mood_id);
}
else
{
gMessageLib->SendSpatialChat(playerObject, chatMessage.getUnicode16(), playerObject, chat_target_id, 0x32, chat_type_id, mood_id);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment