mirror of
https://github.com/OpenFusionProject/OpenFusion.git
synced 2025-11-15 22:50:11 +00:00
Implement most of the remaining client-side GM commands
* Muting a player's freechat * Kicking players * Querying info about a player * Teleporting yourself to a player * Teleporting a player to yourself * Teleporting a player to another player * Teleporting a player to arbitrary coords * Teleporting a player to arbitrary coords in an arbitrary mapnum * /unstick Also: * Renamed misleading setSpecialPlayer() to setValuePlayer() * Revamped monitor logic * Added server-side checks to account level 50 commands * Made sure even trade chat is run through sanitizeText() * Moved setSpecialState() closer to its calling functions * Interpret client commands even in Buddy and Group chat (but not in Trade chat)
This commit is contained in:
@@ -24,7 +24,7 @@ std::vector<std::string> parseArgs(std::string full) {
|
||||
return std::vector<std::string>(begin, end);
|
||||
}
|
||||
|
||||
bool runCmd(std::string full, CNSocket* sock) {
|
||||
bool ChatManager::runCmd(std::string full, CNSocket* sock) {
|
||||
std::vector<std::string> args = parseArgs(full);
|
||||
std::string cmd = args[0].substr(1, args[0].size() - 1);
|
||||
|
||||
@@ -851,15 +851,19 @@ void ChatManager::chatHandler(CNSocket* sock, CNPacketData* data) {
|
||||
Player* plr = PlayerManager::getPlayer(sock);
|
||||
|
||||
std::string fullChat = sanitizeText(U16toU8(chat->szFreeChat));
|
||||
|
||||
std::cout << "[FreeChat] " << PlayerManager::getPlayerName(plr, false) << ": " << fullChat << std::endl;
|
||||
dump.push_back(PlayerManager::getPlayerName(plr, true) + ": " + fullChat);
|
||||
|
||||
if (fullChat.length() > 1 && fullChat[0] == CMD_PREFIX) { // PREFIX
|
||||
runCmd(fullChat, sock);
|
||||
return;
|
||||
}
|
||||
|
||||
if (plr->iSpecialState & CN_SPECIAL_STATE_FLAG__MUTE_FREECHAT)
|
||||
return;
|
||||
|
||||
std::string logLine = "[FreeChat] " + PlayerManager::getPlayerName(plr, true) + ": " + fullChat;
|
||||
|
||||
std::cout << logLine << std::endl;
|
||||
dump.push_back(logLine);
|
||||
|
||||
// send to client
|
||||
INITSTRUCT(sP_FE2CL_REP_SEND_FREECHAT_MESSAGE_SUCC, resp);
|
||||
|
||||
@@ -881,9 +885,10 @@ void ChatManager::menuChatHandler(CNSocket* sock, CNPacketData* data) {
|
||||
Player *plr = PlayerManager::getPlayer(sock);
|
||||
|
||||
std::string fullChat = sanitizeText(U16toU8(chat->szFreeChat));
|
||||
std::string logLine = "[MenuChat] " + PlayerManager::getPlayerName(plr, true) + ": " + fullChat;
|
||||
|
||||
std::cout << "[MenuChat] " << PlayerManager::getPlayerName(plr, false) << ": " << fullChat << std::endl;
|
||||
dump.push_back(PlayerManager::getPlayerName(plr, true) + ": " + fullChat);
|
||||
std::cout << logLine << std::endl;
|
||||
dump.push_back(logLine);
|
||||
|
||||
// send to client
|
||||
INITSTRUCT(sP_FE2CL_REP_SEND_MENUCHAT_MESSAGE_SUCC, resp);
|
||||
@@ -959,9 +964,10 @@ void ChatManager::announcementHandler(CNSocket* sock, CNPacketData* data) {
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
std::cout << "[Bcast " << announcement->iAreaType << "] " << PlayerManager::getPlayerName(plr, false) << ": " << U16toU8(msg.szAnnounceMsg) << std::endl;
|
||||
dump.push_back("**" + PlayerManager::getPlayerName(plr, true) + ": " + U16toU8(msg.szAnnounceMsg) + "**");
|
||||
|
||||
std::string logLine = "[Bcast " + std::to_string(announcement->iAreaType) + "] " + PlayerManager::getPlayerName(plr, false) + ": " + U16toU8(msg.szAnnounceMsg);
|
||||
std::cout << logLine << std::endl;
|
||||
dump.push_back("**" + logLine + "**");
|
||||
}
|
||||
|
||||
// we only allow plain ascii, at least for now
|
||||
|
||||
Reference in New Issue
Block a user