int pc_send_whisper(lua_State* L)
{
LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
if (!ch)
return 0;
auto msg = lua_tostring(L, 1);
auto who = "[System]";
auto isgm = true;
if (lua_isstring(L, 2))
who = lua_tostring(L, 2);
if (lua_isboolean(L, 3))
isgm = lua_toboolean(L, 3);
ch->SendWhisper(msg, who, isgm);
return 0;
}
bool CHARACTER::SendWhisper(const char* msg, const char* who, bool isgm)
{
if (!GetDesc())
return false;
const size_t buflen = strlen(msg);
uint8_t bType = WHISPER_TYPE_NORMAL;
if (isgm)
{
//bType = (bType & 0xF0) | WHISPER_TYPE_GM;
bType = WHISPER_TYPE_SYSTEM;
}
if (buflen <= 0)
return false;
TPacketGCWhisper pack{};
pack.bHeader = HEADER_GC_WHISPER;
pack.wSize = sizeof(TPacketGCWhisper) + buflen;
pack.bType = bType;
strlcpy(pack.szNameFrom, who, sizeof(pack.szNameFrom));
//TEMP_BUFFER tmpbuf{};
//tmpbuf.write(&pack, sizeof(pack));
//tmpbuf.write(msg, buflen);
//GetDesc()->Packet(tmpbuf.read_peek(), tmpbuf.size());
GetDesc()->BufferedPacket(&pack, sizeof(pack));
GetDesc()->Packet(msg, buflen);
return true;
}