FIX: commands and multiplayer crashes
This commit is contained in:
@@ -63,24 +63,25 @@ void ConsoleScreen::execute()
|
|||||||
return minecraft->setScreen(NULL);
|
return minecraft->setScreen(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_input[0] == '/') {
|
if (minecraft->netCallback && !minecraft->raknetInstance->isServer()) {
|
||||||
// Command
|
minecraft->raknetInstance->send(MessagePacket(_input.c_str()));
|
||||||
|
} else if (_input[0] == '/') {
|
||||||
_input = Util::stringTrim(_input.substr(1));
|
_input = Util::stringTrim(_input.substr(1));
|
||||||
|
|
||||||
std::istringstream iss(minecraft->commandManager().execute(*minecraft, *minecraft->player, _input));
|
std::istringstream iss(
|
||||||
|
minecraft->commandManager().execute(*minecraft, *minecraft->player, _input)
|
||||||
|
);
|
||||||
|
|
||||||
for (std::string line; std::getline(iss, line);) {
|
for (std::string line; std::getline(iss, line);) {
|
||||||
minecraft->gui.addMessage(line);
|
minecraft->gui.addMessage(line);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
// @ai @rewrite
|
|
||||||
if (minecraft->netCallback && minecraft->raknetInstance->isServer()) {
|
|
||||||
static_cast<ServerSideNetworkHandler*>(minecraft->netCallback)->displayGameMessage(_input);
|
|
||||||
} else if (minecraft->netCallback) {
|
|
||||||
MessagePacket chatPkt(_input.c_str());
|
|
||||||
minecraft->raknetInstance->send(chatPkt);
|
|
||||||
} else {
|
|
||||||
minecraft->gui.addMessage("<" + minecraft->player->name + "> " + _input);
|
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
if (minecraft->raknetInstance->isServer()) {
|
||||||
|
minecraft->raknetInstance->send(MessagePacket(_input.c_str()));
|
||||||
|
}
|
||||||
|
|
||||||
|
minecraft->gui.addMessage("<" + minecraft->player->name + "> " + _input);
|
||||||
}
|
}
|
||||||
|
|
||||||
minecraft->setScreen(NULL);
|
minecraft->setScreen(NULL);
|
||||||
|
|||||||
@@ -36,14 +36,14 @@ std::string CommandBan::execute(Minecraft& mc, Player& player, const std::vector
|
|||||||
(*it)->remove();
|
(*it)->remove();
|
||||||
mc.raknetInstance->getPeer()->CloseConnection((*it)->owner, true);
|
mc.raknetInstance->getPeer()->CloseConnection((*it)->owner, true);
|
||||||
} else {
|
} else {
|
||||||
for (auto& banned : mc.level->bannedPpl) {
|
for (auto& banned : mc.level->bannedPlayers) {
|
||||||
if (nicknameLower == banned) {
|
if (nicknameLower == banned) {
|
||||||
return args[0] + "already banned!";
|
return args[0] + "already banned!";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mc.level->bannedPpl.insert(nicknameLower);
|
mc.level->bannedPlayers.insert(nicknameLower);
|
||||||
return "ban: successfully banned player " + args[0];
|
return "ban: successfully banned player " + args[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,6 @@ std::vector<std::string> CommandManager::getListAllCommands() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::string CommandManager::execute(Minecraft& mc, Player& player, const std::string& input) {
|
std::string CommandManager::execute(Minecraft& mc, Player& player, const std::string& input) {
|
||||||
if (!mc.level->isClientSide) {
|
|
||||||
std::istringstream ss(input);
|
std::istringstream ss(input);
|
||||||
std::string cmd;
|
std::string cmd;
|
||||||
|
|
||||||
@@ -56,12 +55,6 @@ std::string CommandManager::execute(Minecraft& mc, Player& player, const std::st
|
|||||||
while (ss >> tok) args.push_back(tok);
|
while (ss >> tok) args.push_back(tok);
|
||||||
|
|
||||||
return (*it)->execute(mc, player, args);
|
return (*it)->execute(mc, player, args);
|
||||||
} else {
|
|
||||||
ChatPacket packet("/" + input);
|
|
||||||
mc.raknetInstance->send(packet);
|
|
||||||
}
|
|
||||||
|
|
||||||
return std::string();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Command* CommandManager::getCommand(const std::string& name) {
|
Command* CommandManager::getCommand(const std::string& name) {
|
||||||
|
|||||||
@@ -190,13 +190,13 @@ int main(int numArguments, char* pszArgs[]) {
|
|||||||
|
|
||||||
while (std::getline(banned, line)) {
|
while (std::getline(banned, line)) {
|
||||||
if (!line.empty()) {
|
if (!line.empty()) {
|
||||||
((MAIN_CLASS*)g_app)->level->bannedPpl.insert(line);
|
((MAIN_CLASS*)g_app)->level->bannedPlayers.insert(line);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
std::ofstream bannedPpl("banned-players.txt");
|
std::ofstream bannedPlayers("banned-players.txt");
|
||||||
|
|
||||||
if (!bannedPpl.is_open()) {
|
if (!bannedPlayers.is_open()) {
|
||||||
throw std::runtime_error("Cannot create banned players list.");
|
throw std::runtime_error("Cannot create banned players list.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -225,7 +225,7 @@ int main(int numArguments, char* pszArgs[]) {
|
|||||||
std::ofstream bannedWrite("banned-players.txt");
|
std::ofstream bannedWrite("banned-players.txt");
|
||||||
|
|
||||||
if (bannedWrite.is_open()) {
|
if (bannedWrite.is_open()) {
|
||||||
for (auto& banned : ((MAIN_CLASS*)g_app)->level->bannedPpl) {
|
for (auto& banned : ((MAIN_CLASS*)g_app)->level->bannedPlayers) {
|
||||||
bannedWrite << banned << std::endl;
|
bannedWrite << banned << std::endl;
|
||||||
}
|
}
|
||||||
bannedWrite.close();
|
bannedWrite.close();
|
||||||
|
|||||||
@@ -200,7 +200,7 @@ void RakNetInstance::runEvents(NetEventCallback* callback)
|
|||||||
case ID_DISCONNECTION_NOTIFICATION:
|
case ID_DISCONNECTION_NOTIFICATION:
|
||||||
case ID_CONNECTION_LOST:
|
case ID_CONNECTION_LOST:
|
||||||
callback->onDisconnect(currentEvent->guid);
|
callback->onDisconnect(currentEvent->guid);
|
||||||
break;
|
return;
|
||||||
case ID_UNCONNECTED_PONG:
|
case ID_UNCONNECTED_PONG:
|
||||||
{
|
{
|
||||||
RakNet::TimeMS time;
|
RakNet::TimeMS time;
|
||||||
|
|||||||
@@ -257,7 +257,7 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, LoginPac
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto& banned : level->bannedPpl) {
|
for (auto& banned : level->bannedPlayers) {
|
||||||
if (nicknameLower == banned) {
|
if (nicknameLower == banned) {
|
||||||
loginStatus = packet->newProto ? LoginStatus::Failed_Banned : LoginStatus::Failed_ClientOld;
|
loginStatus = packet->newProto ? LoginStatus::Failed_Banned : LoginStatus::Failed_ClientOld;
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -312,7 +312,7 @@ public:
|
|||||||
Random random;
|
Random random;
|
||||||
|
|
||||||
std::set<std::string> ops;
|
std::set<std::string> ops;
|
||||||
std::set<std::string> bannedPpl;
|
std::set<std::string> bannedPlayers;
|
||||||
protected:
|
protected:
|
||||||
bool isFindingSpawn;
|
bool isFindingSpawn;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user