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