Prevent players from logging in during server shutdown.
Contributed by Sahar.
This commit is contained in:
parent
8861770e73
commit
003558ce66
@ -709,6 +709,11 @@ public class LoginServerThread extends Thread
|
||||
}
|
||||
}
|
||||
|
||||
public int getServerStatus()
|
||||
{
|
||||
return _status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the status string.
|
||||
* @return the status string
|
||||
|
@ -274,7 +274,7 @@ public class Shutdown extends Thread
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGGER.warning("Server scheduled restart issued shutdown command. Restart in " + seconds + " seconds!");
|
||||
LOGGER.warning("Server scheduled restart issued shutdown command. " + (restart ? "Restart" : "Shutdown") + " in " + seconds + " seconds!");
|
||||
}
|
||||
|
||||
if (_shutdownMode > 0)
|
||||
@ -357,100 +357,47 @@ public class Shutdown extends Thread
|
||||
{
|
||||
while (_secondsShut > 0)
|
||||
{
|
||||
// Rehabilitate previous server status if shutdown is aborted.
|
||||
if (_shutdownMode == ABORT)
|
||||
{
|
||||
if (LoginServerThread.getInstance().getServerStatus() == ServerStatus.STATUS_DOWN)
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus((Config.SERVER_GMONLY) ? ServerStatus.STATUS_GM_ONLY : ServerStatus.STATUS_AUTO);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
switch (_secondsShut)
|
||||
{
|
||||
case 540:
|
||||
{
|
||||
SendServerQuit(540);
|
||||
break;
|
||||
}
|
||||
case 480:
|
||||
{
|
||||
SendServerQuit(480);
|
||||
break;
|
||||
}
|
||||
case 420:
|
||||
{
|
||||
SendServerQuit(420);
|
||||
break;
|
||||
}
|
||||
case 360:
|
||||
{
|
||||
SendServerQuit(360);
|
||||
break;
|
||||
}
|
||||
case 300:
|
||||
{
|
||||
SendServerQuit(300);
|
||||
break;
|
||||
}
|
||||
case 240:
|
||||
{
|
||||
SendServerQuit(240);
|
||||
break;
|
||||
}
|
||||
case 180:
|
||||
{
|
||||
SendServerQuit(180);
|
||||
break;
|
||||
}
|
||||
case 120:
|
||||
{
|
||||
SendServerQuit(120);
|
||||
break;
|
||||
}
|
||||
case 60:
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_DOWN); // avoids new players from logging in
|
||||
SendServerQuit(60);
|
||||
break;
|
||||
}
|
||||
case 30:
|
||||
{
|
||||
SendServerQuit(30);
|
||||
break;
|
||||
}
|
||||
case 10:
|
||||
{
|
||||
SendServerQuit(10);
|
||||
break;
|
||||
}
|
||||
case 5:
|
||||
{
|
||||
SendServerQuit(5);
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
SendServerQuit(4);
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
SendServerQuit(3);
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
SendServerQuit(2);
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
SendServerQuit(1);
|
||||
break;
|
||||
}
|
||||
SendServerQuit(_secondsShut);
|
||||
}
|
||||
|
||||
// Prevent players from logging in.
|
||||
if ((_secondsShut <= 60) && (LoginServerThread.getInstance().getServerStatus() != ServerStatus.STATUS_DOWN))
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_DOWN);
|
||||
}
|
||||
|
||||
_secondsShut--;
|
||||
|
||||
final int delay = 1000; // milliseconds
|
||||
Thread.sleep(delay);
|
||||
|
||||
if (_shutdownMode == ABORT)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
|
@ -39,6 +39,7 @@ import org.l2jmobius.commons.database.DatabaseFactory;
|
||||
import org.l2jmobius.commons.util.IPSubnet;
|
||||
import org.l2jmobius.commons.util.IXmlReader;
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
import org.l2jmobius.loginserver.network.LoginClient;
|
||||
import org.l2jmobius.loginserver.network.gameserverpackets.ServerStatus;
|
||||
|
||||
/**
|
||||
@ -480,6 +481,24 @@ public class GameServerTable implements IXmlReader
|
||||
return _gst.getPlayerCount();
|
||||
}
|
||||
|
||||
public boolean canLogin(LoginClient client)
|
||||
{
|
||||
// DOWN status doesn't allow anyone to login.
|
||||
if (_status == ServerStatus.STATUS_DOWN)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// GM_ONLY status or full server only allows superior access levels accounts to login.
|
||||
if ((_status == ServerStatus.STATUS_GM_ONLY) || (getCurrentPlayerCount() >= getMaxPlayers()))
|
||||
{
|
||||
return client.getAccessLevel() > 0;
|
||||
}
|
||||
|
||||
// Otherwise, any positive access level account can login.
|
||||
return client.getAccessLevel() >= 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the external host.
|
||||
* @return the external host
|
||||
|
@ -46,7 +46,6 @@ import org.l2jmobius.commons.util.crypt.ScrambledKeyPair;
|
||||
import org.l2jmobius.loginserver.GameServerTable.GameServerInfo;
|
||||
import org.l2jmobius.loginserver.model.data.AccountInfo;
|
||||
import org.l2jmobius.loginserver.network.LoginClient;
|
||||
import org.l2jmobius.loginserver.network.gameserverpackets.ServerStatus;
|
||||
import org.l2jmobius.loginserver.network.serverpackets.LoginFail.LoginFailReason;
|
||||
|
||||
public class LoginController
|
||||
@ -398,11 +397,9 @@ public class LoginController
|
||||
public boolean isLoginPossible(LoginClient client, int serverId)
|
||||
{
|
||||
final GameServerInfo gsi = GameServerTable.getInstance().getRegisteredGameServerById(serverId);
|
||||
final int access = client.getAccessLevel();
|
||||
if ((gsi != null) && gsi.isAuthed())
|
||||
{
|
||||
final boolean loginOk = ((gsi.getCurrentPlayerCount() < gsi.getMaxPlayers()) && (gsi.getStatus() != ServerStatus.STATUS_GM_ONLY)) || (access > 0);
|
||||
|
||||
final boolean loginOk = gsi.canLogin(client);
|
||||
if (loginOk && (client.getLastServer() != serverId))
|
||||
{
|
||||
try (Connection con = DatabaseFactory.getConnection();
|
||||
|
@ -106,7 +106,7 @@ public class ServerList implements IOutgoingPacket
|
||||
_ageLimit = 0;
|
||||
_brackets = gsi.isShowingBrackets();
|
||||
// If server GM-only - show status only to GMs
|
||||
_status = (gsi.getStatus() == ServerStatus.STATUS_GM_ONLY) && (client.getAccessLevel() <= 0) ? ServerStatus.STATUS_DOWN : gsi.getStatus();
|
||||
_status = (client.getAccessLevel() < 0) || ((gsi.getStatus() == ServerStatus.STATUS_GM_ONLY) && (client.getAccessLevel() <= 0)) ? ServerStatus.STATUS_DOWN : gsi.getStatus();
|
||||
_serverId = gsi.getId();
|
||||
}
|
||||
}
|
||||
|
@ -709,6 +709,11 @@ public class LoginServerThread extends Thread
|
||||
}
|
||||
}
|
||||
|
||||
public int getServerStatus()
|
||||
{
|
||||
return _status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the status string.
|
||||
* @return the status string
|
||||
|
@ -274,7 +274,7 @@ public class Shutdown extends Thread
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGGER.warning("Server scheduled restart issued shutdown command. Restart in " + seconds + " seconds!");
|
||||
LOGGER.warning("Server scheduled restart issued shutdown command. " + (restart ? "Restart" : "Shutdown") + " in " + seconds + " seconds!");
|
||||
}
|
||||
|
||||
if (_shutdownMode > 0)
|
||||
@ -357,100 +357,47 @@ public class Shutdown extends Thread
|
||||
{
|
||||
while (_secondsShut > 0)
|
||||
{
|
||||
// Rehabilitate previous server status if shutdown is aborted.
|
||||
if (_shutdownMode == ABORT)
|
||||
{
|
||||
if (LoginServerThread.getInstance().getServerStatus() == ServerStatus.STATUS_DOWN)
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus((Config.SERVER_GMONLY) ? ServerStatus.STATUS_GM_ONLY : ServerStatus.STATUS_AUTO);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
switch (_secondsShut)
|
||||
{
|
||||
case 540:
|
||||
{
|
||||
SendServerQuit(540);
|
||||
break;
|
||||
}
|
||||
case 480:
|
||||
{
|
||||
SendServerQuit(480);
|
||||
break;
|
||||
}
|
||||
case 420:
|
||||
{
|
||||
SendServerQuit(420);
|
||||
break;
|
||||
}
|
||||
case 360:
|
||||
{
|
||||
SendServerQuit(360);
|
||||
break;
|
||||
}
|
||||
case 300:
|
||||
{
|
||||
SendServerQuit(300);
|
||||
break;
|
||||
}
|
||||
case 240:
|
||||
{
|
||||
SendServerQuit(240);
|
||||
break;
|
||||
}
|
||||
case 180:
|
||||
{
|
||||
SendServerQuit(180);
|
||||
break;
|
||||
}
|
||||
case 120:
|
||||
{
|
||||
SendServerQuit(120);
|
||||
break;
|
||||
}
|
||||
case 60:
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_DOWN); // avoids new players from logging in
|
||||
SendServerQuit(60);
|
||||
break;
|
||||
}
|
||||
case 30:
|
||||
{
|
||||
SendServerQuit(30);
|
||||
break;
|
||||
}
|
||||
case 10:
|
||||
{
|
||||
SendServerQuit(10);
|
||||
break;
|
||||
}
|
||||
case 5:
|
||||
{
|
||||
SendServerQuit(5);
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
SendServerQuit(4);
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
SendServerQuit(3);
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
SendServerQuit(2);
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
SendServerQuit(1);
|
||||
break;
|
||||
}
|
||||
SendServerQuit(_secondsShut);
|
||||
}
|
||||
|
||||
// Prevent players from logging in.
|
||||
if ((_secondsShut <= 60) && (LoginServerThread.getInstance().getServerStatus() != ServerStatus.STATUS_DOWN))
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_DOWN);
|
||||
}
|
||||
|
||||
_secondsShut--;
|
||||
|
||||
final int delay = 1000; // milliseconds
|
||||
Thread.sleep(delay);
|
||||
|
||||
if (_shutdownMode == ABORT)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
|
@ -39,6 +39,7 @@ import org.l2jmobius.commons.database.DatabaseFactory;
|
||||
import org.l2jmobius.commons.util.IPSubnet;
|
||||
import org.l2jmobius.commons.util.IXmlReader;
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
import org.l2jmobius.loginserver.network.LoginClient;
|
||||
import org.l2jmobius.loginserver.network.gameserverpackets.ServerStatus;
|
||||
|
||||
/**
|
||||
@ -480,6 +481,24 @@ public class GameServerTable implements IXmlReader
|
||||
return _gst.getPlayerCount();
|
||||
}
|
||||
|
||||
public boolean canLogin(LoginClient client)
|
||||
{
|
||||
// DOWN status doesn't allow anyone to login.
|
||||
if (_status == ServerStatus.STATUS_DOWN)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// GM_ONLY status or full server only allows superior access levels accounts to login.
|
||||
if ((_status == ServerStatus.STATUS_GM_ONLY) || (getCurrentPlayerCount() >= getMaxPlayers()))
|
||||
{
|
||||
return client.getAccessLevel() > 0;
|
||||
}
|
||||
|
||||
// Otherwise, any positive access level account can login.
|
||||
return client.getAccessLevel() >= 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the external host.
|
||||
* @return the external host
|
||||
|
@ -46,7 +46,6 @@ import org.l2jmobius.commons.util.crypt.ScrambledKeyPair;
|
||||
import org.l2jmobius.loginserver.GameServerTable.GameServerInfo;
|
||||
import org.l2jmobius.loginserver.model.data.AccountInfo;
|
||||
import org.l2jmobius.loginserver.network.LoginClient;
|
||||
import org.l2jmobius.loginserver.network.gameserverpackets.ServerStatus;
|
||||
import org.l2jmobius.loginserver.network.serverpackets.LoginFail.LoginFailReason;
|
||||
|
||||
public class LoginController
|
||||
@ -398,11 +397,9 @@ public class LoginController
|
||||
public boolean isLoginPossible(LoginClient client, int serverId)
|
||||
{
|
||||
final GameServerInfo gsi = GameServerTable.getInstance().getRegisteredGameServerById(serverId);
|
||||
final int access = client.getAccessLevel();
|
||||
if ((gsi != null) && gsi.isAuthed())
|
||||
{
|
||||
final boolean loginOk = ((gsi.getCurrentPlayerCount() < gsi.getMaxPlayers()) && (gsi.getStatus() != ServerStatus.STATUS_GM_ONLY)) || (access > 0);
|
||||
|
||||
final boolean loginOk = gsi.canLogin(client);
|
||||
if (loginOk && (client.getLastServer() != serverId))
|
||||
{
|
||||
try (Connection con = DatabaseFactory.getConnection();
|
||||
|
@ -105,7 +105,7 @@ public class ServerList implements IOutgoingPacket
|
||||
_ageLimit = 0;
|
||||
_brackets = gsi.isShowingBrackets();
|
||||
// If server GM-only - show status only to GMs
|
||||
_status = gsi.getStatus() != ServerStatus.STATUS_GM_ONLY ? gsi.getStatus() : client.getAccessLevel() > 0 ? gsi.getStatus() : ServerStatus.STATUS_DOWN;
|
||||
_status = (client.getAccessLevel() < 0) || ((gsi.getStatus() == ServerStatus.STATUS_GM_ONLY) && (client.getAccessLevel() <= 0)) ? ServerStatus.STATUS_DOWN : gsi.getStatus();
|
||||
_serverId = gsi.getId();
|
||||
}
|
||||
}
|
||||
|
@ -712,6 +712,11 @@ public class LoginServerThread extends Thread
|
||||
}
|
||||
}
|
||||
|
||||
public int getServerStatus()
|
||||
{
|
||||
return _status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the status string.
|
||||
* @return the status string
|
||||
|
@ -274,7 +274,7 @@ public class Shutdown extends Thread
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGGER.warning("Server scheduled restart issued shutdown command. Restart in " + seconds + " seconds!");
|
||||
LOGGER.warning("Server scheduled restart issued shutdown command. " + (restart ? "Restart" : "Shutdown") + " in " + seconds + " seconds!");
|
||||
}
|
||||
|
||||
if (_shutdownMode > 0)
|
||||
@ -357,100 +357,47 @@ public class Shutdown extends Thread
|
||||
{
|
||||
while (_secondsShut > 0)
|
||||
{
|
||||
// Rehabilitate previous server status if shutdown is aborted.
|
||||
if (_shutdownMode == ABORT)
|
||||
{
|
||||
if (LoginServerThread.getInstance().getServerStatus() == ServerStatus.STATUS_DOWN)
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus((Config.SERVER_GMONLY) ? ServerStatus.STATUS_GM_ONLY : ServerStatus.STATUS_AUTO);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
switch (_secondsShut)
|
||||
{
|
||||
case 540:
|
||||
{
|
||||
SendServerQuit(540);
|
||||
break;
|
||||
}
|
||||
case 480:
|
||||
{
|
||||
SendServerQuit(480);
|
||||
break;
|
||||
}
|
||||
case 420:
|
||||
{
|
||||
SendServerQuit(420);
|
||||
break;
|
||||
}
|
||||
case 360:
|
||||
{
|
||||
SendServerQuit(360);
|
||||
break;
|
||||
}
|
||||
case 300:
|
||||
{
|
||||
SendServerQuit(300);
|
||||
break;
|
||||
}
|
||||
case 240:
|
||||
{
|
||||
SendServerQuit(240);
|
||||
break;
|
||||
}
|
||||
case 180:
|
||||
{
|
||||
SendServerQuit(180);
|
||||
break;
|
||||
}
|
||||
case 120:
|
||||
{
|
||||
SendServerQuit(120);
|
||||
break;
|
||||
}
|
||||
case 60:
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_DOWN); // avoids new players from logging in
|
||||
SendServerQuit(60);
|
||||
break;
|
||||
}
|
||||
case 30:
|
||||
{
|
||||
SendServerQuit(30);
|
||||
break;
|
||||
}
|
||||
case 10:
|
||||
{
|
||||
SendServerQuit(10);
|
||||
break;
|
||||
}
|
||||
case 5:
|
||||
{
|
||||
SendServerQuit(5);
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
SendServerQuit(4);
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
SendServerQuit(3);
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
SendServerQuit(2);
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
SendServerQuit(1);
|
||||
break;
|
||||
}
|
||||
SendServerQuit(_secondsShut);
|
||||
}
|
||||
|
||||
// Prevent players from logging in.
|
||||
if ((_secondsShut <= 60) && (LoginServerThread.getInstance().getServerStatus() != ServerStatus.STATUS_DOWN))
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_DOWN);
|
||||
}
|
||||
|
||||
_secondsShut--;
|
||||
|
||||
final int delay = 1000; // milliseconds
|
||||
Thread.sleep(delay);
|
||||
|
||||
if (_shutdownMode == ABORT)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
|
@ -39,6 +39,7 @@ import org.l2jmobius.commons.database.DatabaseFactory;
|
||||
import org.l2jmobius.commons.util.IPSubnet;
|
||||
import org.l2jmobius.commons.util.IXmlReader;
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
import org.l2jmobius.loginserver.network.LoginClient;
|
||||
import org.l2jmobius.loginserver.network.gameserverpackets.ServerStatus;
|
||||
|
||||
/**
|
||||
@ -480,6 +481,24 @@ public class GameServerTable implements IXmlReader
|
||||
return _gst.getPlayerCount();
|
||||
}
|
||||
|
||||
public boolean canLogin(LoginClient client)
|
||||
{
|
||||
// DOWN status doesn't allow anyone to login.
|
||||
if (_status == ServerStatus.STATUS_DOWN)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// GM_ONLY status or full server only allows superior access levels accounts to login.
|
||||
if ((_status == ServerStatus.STATUS_GM_ONLY) || (getCurrentPlayerCount() >= getMaxPlayers()))
|
||||
{
|
||||
return client.getAccessLevel() > 0;
|
||||
}
|
||||
|
||||
// Otherwise, any positive access level account can login.
|
||||
return client.getAccessLevel() >= 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the external host.
|
||||
* @return the external host
|
||||
|
@ -46,7 +46,6 @@ import org.l2jmobius.commons.util.crypt.ScrambledKeyPair;
|
||||
import org.l2jmobius.loginserver.GameServerTable.GameServerInfo;
|
||||
import org.l2jmobius.loginserver.model.data.AccountInfo;
|
||||
import org.l2jmobius.loginserver.network.LoginClient;
|
||||
import org.l2jmobius.loginserver.network.gameserverpackets.ServerStatus;
|
||||
import org.l2jmobius.loginserver.network.serverpackets.LoginFail.LoginFailReason;
|
||||
|
||||
public class LoginController
|
||||
@ -398,11 +397,9 @@ public class LoginController
|
||||
public boolean isLoginPossible(LoginClient client, int serverId)
|
||||
{
|
||||
final GameServerInfo gsi = GameServerTable.getInstance().getRegisteredGameServerById(serverId);
|
||||
final int access = client.getAccessLevel();
|
||||
if ((gsi != null) && gsi.isAuthed())
|
||||
{
|
||||
final boolean loginOk = ((gsi.getCurrentPlayerCount() < gsi.getMaxPlayers()) && (gsi.getStatus() != ServerStatus.STATUS_GM_ONLY)) || (access > 0);
|
||||
|
||||
final boolean loginOk = gsi.canLogin(client);
|
||||
if (loginOk && (client.getLastServer() != serverId))
|
||||
{
|
||||
try (Connection con = DatabaseFactory.getConnection();
|
||||
|
@ -105,7 +105,7 @@ public class ServerList implements IOutgoingPacket
|
||||
_ageLimit = 0;
|
||||
_brackets = gsi.isShowingBrackets();
|
||||
// If server GM-only - show status only to GMs
|
||||
_status = gsi.getStatus() != ServerStatus.STATUS_GM_ONLY ? gsi.getStatus() : client.getAccessLevel() > 0 ? gsi.getStatus() : ServerStatus.STATUS_DOWN;
|
||||
_status = (client.getAccessLevel() < 0) || ((gsi.getStatus() == ServerStatus.STATUS_GM_ONLY) && (client.getAccessLevel() <= 0)) ? ServerStatus.STATUS_DOWN : gsi.getStatus();
|
||||
_serverId = gsi.getId();
|
||||
}
|
||||
}
|
||||
|
@ -712,6 +712,11 @@ public class LoginServerThread extends Thread
|
||||
}
|
||||
}
|
||||
|
||||
public int getServerStatus()
|
||||
{
|
||||
return _status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the status string.
|
||||
* @return the status string
|
||||
|
@ -274,7 +274,7 @@ public class Shutdown extends Thread
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGGER.warning("Server scheduled restart issued shutdown command. Restart in " + seconds + " seconds!");
|
||||
LOGGER.warning("Server scheduled restart issued shutdown command. " + (restart ? "Restart" : "Shutdown") + " in " + seconds + " seconds!");
|
||||
}
|
||||
|
||||
if (_shutdownMode > 0)
|
||||
@ -357,100 +357,47 @@ public class Shutdown extends Thread
|
||||
{
|
||||
while (_secondsShut > 0)
|
||||
{
|
||||
// Rehabilitate previous server status if shutdown is aborted.
|
||||
if (_shutdownMode == ABORT)
|
||||
{
|
||||
if (LoginServerThread.getInstance().getServerStatus() == ServerStatus.STATUS_DOWN)
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus((Config.SERVER_GMONLY) ? ServerStatus.STATUS_GM_ONLY : ServerStatus.STATUS_AUTO);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
switch (_secondsShut)
|
||||
{
|
||||
case 540:
|
||||
{
|
||||
SendServerQuit(540);
|
||||
break;
|
||||
}
|
||||
case 480:
|
||||
{
|
||||
SendServerQuit(480);
|
||||
break;
|
||||
}
|
||||
case 420:
|
||||
{
|
||||
SendServerQuit(420);
|
||||
break;
|
||||
}
|
||||
case 360:
|
||||
{
|
||||
SendServerQuit(360);
|
||||
break;
|
||||
}
|
||||
case 300:
|
||||
{
|
||||
SendServerQuit(300);
|
||||
break;
|
||||
}
|
||||
case 240:
|
||||
{
|
||||
SendServerQuit(240);
|
||||
break;
|
||||
}
|
||||
case 180:
|
||||
{
|
||||
SendServerQuit(180);
|
||||
break;
|
||||
}
|
||||
case 120:
|
||||
{
|
||||
SendServerQuit(120);
|
||||
break;
|
||||
}
|
||||
case 60:
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_DOWN); // avoids new players from logging in
|
||||
SendServerQuit(60);
|
||||
break;
|
||||
}
|
||||
case 30:
|
||||
{
|
||||
SendServerQuit(30);
|
||||
break;
|
||||
}
|
||||
case 10:
|
||||
{
|
||||
SendServerQuit(10);
|
||||
break;
|
||||
}
|
||||
case 5:
|
||||
{
|
||||
SendServerQuit(5);
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
SendServerQuit(4);
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
SendServerQuit(3);
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
SendServerQuit(2);
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
SendServerQuit(1);
|
||||
break;
|
||||
}
|
||||
SendServerQuit(_secondsShut);
|
||||
}
|
||||
|
||||
// Prevent players from logging in.
|
||||
if ((_secondsShut <= 60) && (LoginServerThread.getInstance().getServerStatus() != ServerStatus.STATUS_DOWN))
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_DOWN);
|
||||
}
|
||||
|
||||
_secondsShut--;
|
||||
|
||||
final int delay = 1000; // milliseconds
|
||||
Thread.sleep(delay);
|
||||
|
||||
if (_shutdownMode == ABORT)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
|
@ -39,6 +39,7 @@ import org.l2jmobius.commons.database.DatabaseFactory;
|
||||
import org.l2jmobius.commons.util.IPSubnet;
|
||||
import org.l2jmobius.commons.util.IXmlReader;
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
import org.l2jmobius.loginserver.network.LoginClient;
|
||||
import org.l2jmobius.loginserver.network.gameserverpackets.ServerStatus;
|
||||
|
||||
/**
|
||||
@ -480,6 +481,24 @@ public class GameServerTable implements IXmlReader
|
||||
return _gst.getPlayerCount();
|
||||
}
|
||||
|
||||
public boolean canLogin(LoginClient client)
|
||||
{
|
||||
// DOWN status doesn't allow anyone to login.
|
||||
if (_status == ServerStatus.STATUS_DOWN)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// GM_ONLY status or full server only allows superior access levels accounts to login.
|
||||
if ((_status == ServerStatus.STATUS_GM_ONLY) || (getCurrentPlayerCount() >= getMaxPlayers()))
|
||||
{
|
||||
return client.getAccessLevel() > 0;
|
||||
}
|
||||
|
||||
// Otherwise, any positive access level account can login.
|
||||
return client.getAccessLevel() >= 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the external host.
|
||||
* @return the external host
|
||||
|
@ -46,7 +46,6 @@ import org.l2jmobius.commons.util.crypt.ScrambledKeyPair;
|
||||
import org.l2jmobius.loginserver.GameServerTable.GameServerInfo;
|
||||
import org.l2jmobius.loginserver.model.data.AccountInfo;
|
||||
import org.l2jmobius.loginserver.network.LoginClient;
|
||||
import org.l2jmobius.loginserver.network.gameserverpackets.ServerStatus;
|
||||
import org.l2jmobius.loginserver.network.serverpackets.LoginFail.LoginFailReason;
|
||||
|
||||
public class LoginController
|
||||
@ -398,11 +397,9 @@ public class LoginController
|
||||
public boolean isLoginPossible(LoginClient client, int serverId)
|
||||
{
|
||||
final GameServerInfo gsi = GameServerTable.getInstance().getRegisteredGameServerById(serverId);
|
||||
final int access = client.getAccessLevel();
|
||||
if ((gsi != null) && gsi.isAuthed())
|
||||
{
|
||||
final boolean loginOk = ((gsi.getCurrentPlayerCount() < gsi.getMaxPlayers()) && (gsi.getStatus() != ServerStatus.STATUS_GM_ONLY)) || (access > 0);
|
||||
|
||||
final boolean loginOk = gsi.canLogin(client);
|
||||
if (loginOk && (client.getLastServer() != serverId))
|
||||
{
|
||||
try (Connection con = DatabaseFactory.getConnection();
|
||||
|
@ -105,7 +105,7 @@ public class ServerList implements IOutgoingPacket
|
||||
_ageLimit = 0;
|
||||
_brackets = gsi.isShowingBrackets();
|
||||
// If server GM-only - show status only to GMs
|
||||
_status = gsi.getStatus() != ServerStatus.STATUS_GM_ONLY ? gsi.getStatus() : client.getAccessLevel() > 0 ? gsi.getStatus() : ServerStatus.STATUS_DOWN;
|
||||
_status = (client.getAccessLevel() < 0) || ((gsi.getStatus() == ServerStatus.STATUS_GM_ONLY) && (client.getAccessLevel() <= 0)) ? ServerStatus.STATUS_DOWN : gsi.getStatus();
|
||||
_serverId = gsi.getId();
|
||||
}
|
||||
}
|
||||
|
@ -712,6 +712,11 @@ public class LoginServerThread extends Thread
|
||||
}
|
||||
}
|
||||
|
||||
public int getServerStatus()
|
||||
{
|
||||
return _status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the status string.
|
||||
* @return the status string
|
||||
|
@ -274,7 +274,7 @@ public class Shutdown extends Thread
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGGER.warning("Server scheduled restart issued shutdown command. Restart in " + seconds + " seconds!");
|
||||
LOGGER.warning("Server scheduled restart issued shutdown command. " + (restart ? "Restart" : "Shutdown") + " in " + seconds + " seconds!");
|
||||
}
|
||||
|
||||
if (_shutdownMode > 0)
|
||||
@ -357,100 +357,47 @@ public class Shutdown extends Thread
|
||||
{
|
||||
while (_secondsShut > 0)
|
||||
{
|
||||
// Rehabilitate previous server status if shutdown is aborted.
|
||||
if (_shutdownMode == ABORT)
|
||||
{
|
||||
if (LoginServerThread.getInstance().getServerStatus() == ServerStatus.STATUS_DOWN)
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus((Config.SERVER_GMONLY) ? ServerStatus.STATUS_GM_ONLY : ServerStatus.STATUS_AUTO);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
switch (_secondsShut)
|
||||
{
|
||||
case 540:
|
||||
{
|
||||
SendServerQuit(540);
|
||||
break;
|
||||
}
|
||||
case 480:
|
||||
{
|
||||
SendServerQuit(480);
|
||||
break;
|
||||
}
|
||||
case 420:
|
||||
{
|
||||
SendServerQuit(420);
|
||||
break;
|
||||
}
|
||||
case 360:
|
||||
{
|
||||
SendServerQuit(360);
|
||||
break;
|
||||
}
|
||||
case 300:
|
||||
{
|
||||
SendServerQuit(300);
|
||||
break;
|
||||
}
|
||||
case 240:
|
||||
{
|
||||
SendServerQuit(240);
|
||||
break;
|
||||
}
|
||||
case 180:
|
||||
{
|
||||
SendServerQuit(180);
|
||||
break;
|
||||
}
|
||||
case 120:
|
||||
{
|
||||
SendServerQuit(120);
|
||||
break;
|
||||
}
|
||||
case 60:
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_DOWN); // avoids new players from logging in
|
||||
SendServerQuit(60);
|
||||
break;
|
||||
}
|
||||
case 30:
|
||||
{
|
||||
SendServerQuit(30);
|
||||
break;
|
||||
}
|
||||
case 10:
|
||||
{
|
||||
SendServerQuit(10);
|
||||
break;
|
||||
}
|
||||
case 5:
|
||||
{
|
||||
SendServerQuit(5);
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
SendServerQuit(4);
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
SendServerQuit(3);
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
SendServerQuit(2);
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
SendServerQuit(1);
|
||||
break;
|
||||
}
|
||||
SendServerQuit(_secondsShut);
|
||||
}
|
||||
|
||||
// Prevent players from logging in.
|
||||
if ((_secondsShut <= 60) && (LoginServerThread.getInstance().getServerStatus() != ServerStatus.STATUS_DOWN))
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_DOWN);
|
||||
}
|
||||
|
||||
_secondsShut--;
|
||||
|
||||
final int delay = 1000; // milliseconds
|
||||
Thread.sleep(delay);
|
||||
|
||||
if (_shutdownMode == ABORT)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
|
@ -39,6 +39,7 @@ import org.l2jmobius.commons.database.DatabaseFactory;
|
||||
import org.l2jmobius.commons.util.IPSubnet;
|
||||
import org.l2jmobius.commons.util.IXmlReader;
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
import org.l2jmobius.loginserver.network.LoginClient;
|
||||
import org.l2jmobius.loginserver.network.gameserverpackets.ServerStatus;
|
||||
|
||||
/**
|
||||
@ -480,6 +481,24 @@ public class GameServerTable implements IXmlReader
|
||||
return _gst.getPlayerCount();
|
||||
}
|
||||
|
||||
public boolean canLogin(LoginClient client)
|
||||
{
|
||||
// DOWN status doesn't allow anyone to login.
|
||||
if (_status == ServerStatus.STATUS_DOWN)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// GM_ONLY status or full server only allows superior access levels accounts to login.
|
||||
if ((_status == ServerStatus.STATUS_GM_ONLY) || (getCurrentPlayerCount() >= getMaxPlayers()))
|
||||
{
|
||||
return client.getAccessLevel() > 0;
|
||||
}
|
||||
|
||||
// Otherwise, any positive access level account can login.
|
||||
return client.getAccessLevel() >= 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the external host.
|
||||
* @return the external host
|
||||
|
@ -46,7 +46,6 @@ import org.l2jmobius.commons.util.crypt.ScrambledKeyPair;
|
||||
import org.l2jmobius.loginserver.GameServerTable.GameServerInfo;
|
||||
import org.l2jmobius.loginserver.model.data.AccountInfo;
|
||||
import org.l2jmobius.loginserver.network.LoginClient;
|
||||
import org.l2jmobius.loginserver.network.gameserverpackets.ServerStatus;
|
||||
import org.l2jmobius.loginserver.network.serverpackets.LoginFail.LoginFailReason;
|
||||
|
||||
public class LoginController
|
||||
@ -398,11 +397,9 @@ public class LoginController
|
||||
public boolean isLoginPossible(LoginClient client, int serverId)
|
||||
{
|
||||
final GameServerInfo gsi = GameServerTable.getInstance().getRegisteredGameServerById(serverId);
|
||||
final int access = client.getAccessLevel();
|
||||
if ((gsi != null) && gsi.isAuthed())
|
||||
{
|
||||
final boolean loginOk = ((gsi.getCurrentPlayerCount() < gsi.getMaxPlayers()) && (gsi.getStatus() != ServerStatus.STATUS_GM_ONLY)) || (access > 0);
|
||||
|
||||
final boolean loginOk = gsi.canLogin(client);
|
||||
if (loginOk && (client.getLastServer() != serverId))
|
||||
{
|
||||
try (Connection con = DatabaseFactory.getConnection();
|
||||
|
@ -105,7 +105,7 @@ public class ServerList implements IOutgoingPacket
|
||||
_ageLimit = 0;
|
||||
_brackets = gsi.isShowingBrackets();
|
||||
// If server GM-only - show status only to GMs
|
||||
_status = gsi.getStatus() != ServerStatus.STATUS_GM_ONLY ? gsi.getStatus() : client.getAccessLevel() > 0 ? gsi.getStatus() : ServerStatus.STATUS_DOWN;
|
||||
_status = (client.getAccessLevel() < 0) || ((gsi.getStatus() == ServerStatus.STATUS_GM_ONLY) && (client.getAccessLevel() <= 0)) ? ServerStatus.STATUS_DOWN : gsi.getStatus();
|
||||
_serverId = gsi.getId();
|
||||
}
|
||||
}
|
||||
|
@ -712,6 +712,11 @@ public class LoginServerThread extends Thread
|
||||
}
|
||||
}
|
||||
|
||||
public int getServerStatus()
|
||||
{
|
||||
return _status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the status string.
|
||||
* @return the status string
|
||||
|
@ -274,7 +274,7 @@ public class Shutdown extends Thread
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGGER.warning("Server scheduled restart issued shutdown command. Restart in " + seconds + " seconds!");
|
||||
LOGGER.warning("Server scheduled restart issued shutdown command. " + (restart ? "Restart" : "Shutdown") + " in " + seconds + " seconds!");
|
||||
}
|
||||
|
||||
if (_shutdownMode > 0)
|
||||
@ -357,100 +357,47 @@ public class Shutdown extends Thread
|
||||
{
|
||||
while (_secondsShut > 0)
|
||||
{
|
||||
// Rehabilitate previous server status if shutdown is aborted.
|
||||
if (_shutdownMode == ABORT)
|
||||
{
|
||||
if (LoginServerThread.getInstance().getServerStatus() == ServerStatus.STATUS_DOWN)
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus((Config.SERVER_GMONLY) ? ServerStatus.STATUS_GM_ONLY : ServerStatus.STATUS_AUTO);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
switch (_secondsShut)
|
||||
{
|
||||
case 540:
|
||||
{
|
||||
SendServerQuit(540);
|
||||
break;
|
||||
}
|
||||
case 480:
|
||||
{
|
||||
SendServerQuit(480);
|
||||
break;
|
||||
}
|
||||
case 420:
|
||||
{
|
||||
SendServerQuit(420);
|
||||
break;
|
||||
}
|
||||
case 360:
|
||||
{
|
||||
SendServerQuit(360);
|
||||
break;
|
||||
}
|
||||
case 300:
|
||||
{
|
||||
SendServerQuit(300);
|
||||
break;
|
||||
}
|
||||
case 240:
|
||||
{
|
||||
SendServerQuit(240);
|
||||
break;
|
||||
}
|
||||
case 180:
|
||||
{
|
||||
SendServerQuit(180);
|
||||
break;
|
||||
}
|
||||
case 120:
|
||||
{
|
||||
SendServerQuit(120);
|
||||
break;
|
||||
}
|
||||
case 60:
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_DOWN); // avoids new players from logging in
|
||||
SendServerQuit(60);
|
||||
break;
|
||||
}
|
||||
case 30:
|
||||
{
|
||||
SendServerQuit(30);
|
||||
break;
|
||||
}
|
||||
case 10:
|
||||
{
|
||||
SendServerQuit(10);
|
||||
break;
|
||||
}
|
||||
case 5:
|
||||
{
|
||||
SendServerQuit(5);
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
SendServerQuit(4);
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
SendServerQuit(3);
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
SendServerQuit(2);
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
SendServerQuit(1);
|
||||
break;
|
||||
}
|
||||
SendServerQuit(_secondsShut);
|
||||
}
|
||||
|
||||
// Prevent players from logging in.
|
||||
if ((_secondsShut <= 60) && (LoginServerThread.getInstance().getServerStatus() != ServerStatus.STATUS_DOWN))
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_DOWN);
|
||||
}
|
||||
|
||||
_secondsShut--;
|
||||
|
||||
final int delay = 1000; // milliseconds
|
||||
Thread.sleep(delay);
|
||||
|
||||
if (_shutdownMode == ABORT)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
|
@ -39,6 +39,7 @@ import org.l2jmobius.commons.database.DatabaseFactory;
|
||||
import org.l2jmobius.commons.util.IPSubnet;
|
||||
import org.l2jmobius.commons.util.IXmlReader;
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
import org.l2jmobius.loginserver.network.LoginClient;
|
||||
import org.l2jmobius.loginserver.network.gameserverpackets.ServerStatus;
|
||||
|
||||
/**
|
||||
@ -480,6 +481,24 @@ public class GameServerTable implements IXmlReader
|
||||
return _gst.getPlayerCount();
|
||||
}
|
||||
|
||||
public boolean canLogin(LoginClient client)
|
||||
{
|
||||
// DOWN status doesn't allow anyone to login.
|
||||
if (_status == ServerStatus.STATUS_DOWN)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// GM_ONLY status or full server only allows superior access levels accounts to login.
|
||||
if ((_status == ServerStatus.STATUS_GM_ONLY) || (getCurrentPlayerCount() >= getMaxPlayers()))
|
||||
{
|
||||
return client.getAccessLevel() > 0;
|
||||
}
|
||||
|
||||
// Otherwise, any positive access level account can login.
|
||||
return client.getAccessLevel() >= 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the external host.
|
||||
* @return the external host
|
||||
|
@ -46,7 +46,6 @@ import org.l2jmobius.commons.util.crypt.ScrambledKeyPair;
|
||||
import org.l2jmobius.loginserver.GameServerTable.GameServerInfo;
|
||||
import org.l2jmobius.loginserver.model.data.AccountInfo;
|
||||
import org.l2jmobius.loginserver.network.LoginClient;
|
||||
import org.l2jmobius.loginserver.network.gameserverpackets.ServerStatus;
|
||||
import org.l2jmobius.loginserver.network.serverpackets.LoginFail.LoginFailReason;
|
||||
|
||||
public class LoginController
|
||||
@ -398,11 +397,9 @@ public class LoginController
|
||||
public boolean isLoginPossible(LoginClient client, int serverId)
|
||||
{
|
||||
final GameServerInfo gsi = GameServerTable.getInstance().getRegisteredGameServerById(serverId);
|
||||
final int access = client.getAccessLevel();
|
||||
if ((gsi != null) && gsi.isAuthed())
|
||||
{
|
||||
final boolean loginOk = ((gsi.getCurrentPlayerCount() < gsi.getMaxPlayers()) && (gsi.getStatus() != ServerStatus.STATUS_GM_ONLY)) || (access > 0);
|
||||
|
||||
final boolean loginOk = gsi.canLogin(client);
|
||||
if (loginOk && (client.getLastServer() != serverId))
|
||||
{
|
||||
try (Connection con = DatabaseFactory.getConnection();
|
||||
|
@ -105,7 +105,7 @@ public class ServerList implements IOutgoingPacket
|
||||
_ageLimit = 0;
|
||||
_brackets = gsi.isShowingBrackets();
|
||||
// If server GM-only - show status only to GMs
|
||||
_status = gsi.getStatus() != ServerStatus.STATUS_GM_ONLY ? gsi.getStatus() : client.getAccessLevel() > 0 ? gsi.getStatus() : ServerStatus.STATUS_DOWN;
|
||||
_status = (client.getAccessLevel() < 0) || ((gsi.getStatus() == ServerStatus.STATUS_GM_ONLY) && (client.getAccessLevel() <= 0)) ? ServerStatus.STATUS_DOWN : gsi.getStatus();
|
||||
_serverId = gsi.getId();
|
||||
}
|
||||
}
|
||||
|
@ -712,6 +712,11 @@ public class LoginServerThread extends Thread
|
||||
}
|
||||
}
|
||||
|
||||
public int getServerStatus()
|
||||
{
|
||||
return _status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the status string.
|
||||
* @return the status string
|
||||
|
@ -274,7 +274,7 @@ public class Shutdown extends Thread
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGGER.warning("Server scheduled restart issued shutdown command. Restart in " + seconds + " seconds!");
|
||||
LOGGER.warning("Server scheduled restart issued shutdown command. " + (restart ? "Restart" : "Shutdown") + " in " + seconds + " seconds!");
|
||||
}
|
||||
|
||||
if (_shutdownMode > 0)
|
||||
@ -357,100 +357,47 @@ public class Shutdown extends Thread
|
||||
{
|
||||
while (_secondsShut > 0)
|
||||
{
|
||||
// Rehabilitate previous server status if shutdown is aborted.
|
||||
if (_shutdownMode == ABORT)
|
||||
{
|
||||
if (LoginServerThread.getInstance().getServerStatus() == ServerStatus.STATUS_DOWN)
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus((Config.SERVER_GMONLY) ? ServerStatus.STATUS_GM_ONLY : ServerStatus.STATUS_AUTO);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
switch (_secondsShut)
|
||||
{
|
||||
case 540:
|
||||
{
|
||||
SendServerQuit(540);
|
||||
break;
|
||||
}
|
||||
case 480:
|
||||
{
|
||||
SendServerQuit(480);
|
||||
break;
|
||||
}
|
||||
case 420:
|
||||
{
|
||||
SendServerQuit(420);
|
||||
break;
|
||||
}
|
||||
case 360:
|
||||
{
|
||||
SendServerQuit(360);
|
||||
break;
|
||||
}
|
||||
case 300:
|
||||
{
|
||||
SendServerQuit(300);
|
||||
break;
|
||||
}
|
||||
case 240:
|
||||
{
|
||||
SendServerQuit(240);
|
||||
break;
|
||||
}
|
||||
case 180:
|
||||
{
|
||||
SendServerQuit(180);
|
||||
break;
|
||||
}
|
||||
case 120:
|
||||
{
|
||||
SendServerQuit(120);
|
||||
break;
|
||||
}
|
||||
case 60:
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_DOWN); // avoids new players from logging in
|
||||
SendServerQuit(60);
|
||||
break;
|
||||
}
|
||||
case 30:
|
||||
{
|
||||
SendServerQuit(30);
|
||||
break;
|
||||
}
|
||||
case 10:
|
||||
{
|
||||
SendServerQuit(10);
|
||||
break;
|
||||
}
|
||||
case 5:
|
||||
{
|
||||
SendServerQuit(5);
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
SendServerQuit(4);
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
SendServerQuit(3);
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
SendServerQuit(2);
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
SendServerQuit(1);
|
||||
break;
|
||||
}
|
||||
SendServerQuit(_secondsShut);
|
||||
}
|
||||
|
||||
// Prevent players from logging in.
|
||||
if ((_secondsShut <= 60) && (LoginServerThread.getInstance().getServerStatus() != ServerStatus.STATUS_DOWN))
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_DOWN);
|
||||
}
|
||||
|
||||
_secondsShut--;
|
||||
|
||||
final int delay = 1000; // milliseconds
|
||||
Thread.sleep(delay);
|
||||
|
||||
if (_shutdownMode == ABORT)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
|
@ -39,6 +39,7 @@ import org.l2jmobius.commons.database.DatabaseFactory;
|
||||
import org.l2jmobius.commons.util.IPSubnet;
|
||||
import org.l2jmobius.commons.util.IXmlReader;
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
import org.l2jmobius.loginserver.network.LoginClient;
|
||||
import org.l2jmobius.loginserver.network.gameserverpackets.ServerStatus;
|
||||
|
||||
/**
|
||||
@ -480,6 +481,24 @@ public class GameServerTable implements IXmlReader
|
||||
return _gst.getPlayerCount();
|
||||
}
|
||||
|
||||
public boolean canLogin(LoginClient client)
|
||||
{
|
||||
// DOWN status doesn't allow anyone to login.
|
||||
if (_status == ServerStatus.STATUS_DOWN)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// GM_ONLY status or full server only allows superior access levels accounts to login.
|
||||
if ((_status == ServerStatus.STATUS_GM_ONLY) || (getCurrentPlayerCount() >= getMaxPlayers()))
|
||||
{
|
||||
return client.getAccessLevel() > 0;
|
||||
}
|
||||
|
||||
// Otherwise, any positive access level account can login.
|
||||
return client.getAccessLevel() >= 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the external host.
|
||||
* @return the external host
|
||||
|
@ -46,7 +46,6 @@ import org.l2jmobius.commons.util.crypt.ScrambledKeyPair;
|
||||
import org.l2jmobius.loginserver.GameServerTable.GameServerInfo;
|
||||
import org.l2jmobius.loginserver.model.data.AccountInfo;
|
||||
import org.l2jmobius.loginserver.network.LoginClient;
|
||||
import org.l2jmobius.loginserver.network.gameserverpackets.ServerStatus;
|
||||
import org.l2jmobius.loginserver.network.serverpackets.LoginFail.LoginFailReason;
|
||||
|
||||
public class LoginController
|
||||
@ -398,11 +397,9 @@ public class LoginController
|
||||
public boolean isLoginPossible(LoginClient client, int serverId)
|
||||
{
|
||||
final GameServerInfo gsi = GameServerTable.getInstance().getRegisteredGameServerById(serverId);
|
||||
final int access = client.getAccessLevel();
|
||||
if ((gsi != null) && gsi.isAuthed())
|
||||
{
|
||||
final boolean loginOk = ((gsi.getCurrentPlayerCount() < gsi.getMaxPlayers()) && (gsi.getStatus() != ServerStatus.STATUS_GM_ONLY)) || (access > 0);
|
||||
|
||||
final boolean loginOk = gsi.canLogin(client);
|
||||
if (loginOk && (client.getLastServer() != serverId))
|
||||
{
|
||||
try (Connection con = DatabaseFactory.getConnection();
|
||||
|
@ -105,7 +105,7 @@ public class ServerList implements IOutgoingPacket
|
||||
_ageLimit = 0;
|
||||
_brackets = gsi.isShowingBrackets();
|
||||
// If server GM-only - show status only to GMs
|
||||
_status = gsi.getStatus() != ServerStatus.STATUS_GM_ONLY ? gsi.getStatus() : client.getAccessLevel() > 0 ? gsi.getStatus() : ServerStatus.STATUS_DOWN;
|
||||
_status = (client.getAccessLevel() < 0) || ((gsi.getStatus() == ServerStatus.STATUS_GM_ONLY) && (client.getAccessLevel() <= 0)) ? ServerStatus.STATUS_DOWN : gsi.getStatus();
|
||||
_serverId = gsi.getId();
|
||||
}
|
||||
}
|
||||
|
@ -712,6 +712,11 @@ public class LoginServerThread extends Thread
|
||||
}
|
||||
}
|
||||
|
||||
public int getServerStatus()
|
||||
{
|
||||
return _status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the status string.
|
||||
* @return the status string
|
||||
|
@ -274,7 +274,7 @@ public class Shutdown extends Thread
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGGER.warning("Server scheduled restart issued shutdown command. Restart in " + seconds + " seconds!");
|
||||
LOGGER.warning("Server scheduled restart issued shutdown command. " + (restart ? "Restart" : "Shutdown") + " in " + seconds + " seconds!");
|
||||
}
|
||||
|
||||
if (_shutdownMode > 0)
|
||||
@ -357,100 +357,47 @@ public class Shutdown extends Thread
|
||||
{
|
||||
while (_secondsShut > 0)
|
||||
{
|
||||
// Rehabilitate previous server status if shutdown is aborted.
|
||||
if (_shutdownMode == ABORT)
|
||||
{
|
||||
if (LoginServerThread.getInstance().getServerStatus() == ServerStatus.STATUS_DOWN)
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus((Config.SERVER_GMONLY) ? ServerStatus.STATUS_GM_ONLY : ServerStatus.STATUS_AUTO);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
switch (_secondsShut)
|
||||
{
|
||||
case 540:
|
||||
{
|
||||
SendServerQuit(540);
|
||||
break;
|
||||
}
|
||||
case 480:
|
||||
{
|
||||
SendServerQuit(480);
|
||||
break;
|
||||
}
|
||||
case 420:
|
||||
{
|
||||
SendServerQuit(420);
|
||||
break;
|
||||
}
|
||||
case 360:
|
||||
{
|
||||
SendServerQuit(360);
|
||||
break;
|
||||
}
|
||||
case 300:
|
||||
{
|
||||
SendServerQuit(300);
|
||||
break;
|
||||
}
|
||||
case 240:
|
||||
{
|
||||
SendServerQuit(240);
|
||||
break;
|
||||
}
|
||||
case 180:
|
||||
{
|
||||
SendServerQuit(180);
|
||||
break;
|
||||
}
|
||||
case 120:
|
||||
{
|
||||
SendServerQuit(120);
|
||||
break;
|
||||
}
|
||||
case 60:
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_DOWN); // avoids new players from logging in
|
||||
SendServerQuit(60);
|
||||
break;
|
||||
}
|
||||
case 30:
|
||||
{
|
||||
SendServerQuit(30);
|
||||
break;
|
||||
}
|
||||
case 10:
|
||||
{
|
||||
SendServerQuit(10);
|
||||
break;
|
||||
}
|
||||
case 5:
|
||||
{
|
||||
SendServerQuit(5);
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
SendServerQuit(4);
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
SendServerQuit(3);
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
SendServerQuit(2);
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
SendServerQuit(1);
|
||||
break;
|
||||
}
|
||||
SendServerQuit(_secondsShut);
|
||||
}
|
||||
|
||||
// Prevent players from logging in.
|
||||
if ((_secondsShut <= 60) && (LoginServerThread.getInstance().getServerStatus() != ServerStatus.STATUS_DOWN))
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_DOWN);
|
||||
}
|
||||
|
||||
_secondsShut--;
|
||||
|
||||
final int delay = 1000; // milliseconds
|
||||
Thread.sleep(delay);
|
||||
|
||||
if (_shutdownMode == ABORT)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
|
@ -39,6 +39,7 @@ import org.l2jmobius.commons.database.DatabaseFactory;
|
||||
import org.l2jmobius.commons.util.IPSubnet;
|
||||
import org.l2jmobius.commons.util.IXmlReader;
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
import org.l2jmobius.loginserver.network.LoginClient;
|
||||
import org.l2jmobius.loginserver.network.gameserverpackets.ServerStatus;
|
||||
|
||||
/**
|
||||
@ -480,6 +481,24 @@ public class GameServerTable implements IXmlReader
|
||||
return _gst.getPlayerCount();
|
||||
}
|
||||
|
||||
public boolean canLogin(LoginClient client)
|
||||
{
|
||||
// DOWN status doesn't allow anyone to login.
|
||||
if (_status == ServerStatus.STATUS_DOWN)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// GM_ONLY status or full server only allows superior access levels accounts to login.
|
||||
if ((_status == ServerStatus.STATUS_GM_ONLY) || (getCurrentPlayerCount() >= getMaxPlayers()))
|
||||
{
|
||||
return client.getAccessLevel() > 0;
|
||||
}
|
||||
|
||||
// Otherwise, any positive access level account can login.
|
||||
return client.getAccessLevel() >= 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the external host.
|
||||
* @return the external host
|
||||
|
@ -46,7 +46,6 @@ import org.l2jmobius.commons.util.crypt.ScrambledKeyPair;
|
||||
import org.l2jmobius.loginserver.GameServerTable.GameServerInfo;
|
||||
import org.l2jmobius.loginserver.model.data.AccountInfo;
|
||||
import org.l2jmobius.loginserver.network.LoginClient;
|
||||
import org.l2jmobius.loginserver.network.gameserverpackets.ServerStatus;
|
||||
import org.l2jmobius.loginserver.network.serverpackets.LoginFail.LoginFailReason;
|
||||
|
||||
public class LoginController
|
||||
@ -398,11 +397,9 @@ public class LoginController
|
||||
public boolean isLoginPossible(LoginClient client, int serverId)
|
||||
{
|
||||
final GameServerInfo gsi = GameServerTable.getInstance().getRegisteredGameServerById(serverId);
|
||||
final int access = client.getAccessLevel();
|
||||
if ((gsi != null) && gsi.isAuthed())
|
||||
{
|
||||
final boolean loginOk = ((gsi.getCurrentPlayerCount() < gsi.getMaxPlayers()) && (gsi.getStatus() != ServerStatus.STATUS_GM_ONLY)) || (access > 0);
|
||||
|
||||
final boolean loginOk = gsi.canLogin(client);
|
||||
if (loginOk && (client.getLastServer() != serverId))
|
||||
{
|
||||
try (Connection con = DatabaseFactory.getConnection();
|
||||
|
@ -105,7 +105,7 @@ public class ServerList implements IOutgoingPacket
|
||||
_ageLimit = 0;
|
||||
_brackets = gsi.isShowingBrackets();
|
||||
// If server GM-only - show status only to GMs
|
||||
_status = gsi.getStatus() != ServerStatus.STATUS_GM_ONLY ? gsi.getStatus() : client.getAccessLevel() > 0 ? gsi.getStatus() : ServerStatus.STATUS_DOWN;
|
||||
_status = (client.getAccessLevel() < 0) || ((gsi.getStatus() == ServerStatus.STATUS_GM_ONLY) && (client.getAccessLevel() <= 0)) ? ServerStatus.STATUS_DOWN : gsi.getStatus();
|
||||
_serverId = gsi.getId();
|
||||
}
|
||||
}
|
||||
|
@ -711,6 +711,11 @@ public class LoginServerThread extends Thread
|
||||
}
|
||||
}
|
||||
|
||||
public int getServerStatus()
|
||||
{
|
||||
return _status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the status string.
|
||||
* @return the status string
|
||||
|
@ -276,7 +276,7 @@ public class Shutdown extends Thread
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGGER.warning("Server scheduled restart issued shutdown command. Restart in " + seconds + " seconds!");
|
||||
LOGGER.warning("Server scheduled restart issued shutdown command. " + (restart ? "Restart" : "Shutdown") + " in " + seconds + " seconds!");
|
||||
}
|
||||
|
||||
if (_shutdownMode > 0)
|
||||
@ -359,100 +359,47 @@ public class Shutdown extends Thread
|
||||
{
|
||||
while (_secondsShut > 0)
|
||||
{
|
||||
// Rehabilitate previous server status if shutdown is aborted.
|
||||
if (_shutdownMode == ABORT)
|
||||
{
|
||||
if (LoginServerThread.getInstance().getServerStatus() == ServerStatus.STATUS_DOWN)
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus((Config.SERVER_GMONLY) ? ServerStatus.STATUS_GM_ONLY : ServerStatus.STATUS_AUTO);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
switch (_secondsShut)
|
||||
{
|
||||
case 540:
|
||||
{
|
||||
SendServerQuit(540);
|
||||
break;
|
||||
}
|
||||
case 480:
|
||||
{
|
||||
SendServerQuit(480);
|
||||
break;
|
||||
}
|
||||
case 420:
|
||||
{
|
||||
SendServerQuit(420);
|
||||
break;
|
||||
}
|
||||
case 360:
|
||||
{
|
||||
SendServerQuit(360);
|
||||
break;
|
||||
}
|
||||
case 300:
|
||||
{
|
||||
SendServerQuit(300);
|
||||
break;
|
||||
}
|
||||
case 240:
|
||||
{
|
||||
SendServerQuit(240);
|
||||
break;
|
||||
}
|
||||
case 180:
|
||||
{
|
||||
SendServerQuit(180);
|
||||
break;
|
||||
}
|
||||
case 120:
|
||||
{
|
||||
SendServerQuit(120);
|
||||
break;
|
||||
}
|
||||
case 60:
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_DOWN); // avoids new players from logging in
|
||||
SendServerQuit(60);
|
||||
break;
|
||||
}
|
||||
case 30:
|
||||
{
|
||||
SendServerQuit(30);
|
||||
break;
|
||||
}
|
||||
case 10:
|
||||
{
|
||||
SendServerQuit(10);
|
||||
break;
|
||||
}
|
||||
case 5:
|
||||
{
|
||||
SendServerQuit(5);
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
SendServerQuit(4);
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
SendServerQuit(3);
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
SendServerQuit(2);
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
SendServerQuit(1);
|
||||
break;
|
||||
}
|
||||
SendServerQuit(_secondsShut);
|
||||
}
|
||||
|
||||
// Prevent players from logging in.
|
||||
if ((_secondsShut <= 60) && (LoginServerThread.getInstance().getServerStatus() != ServerStatus.STATUS_DOWN))
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_DOWN);
|
||||
}
|
||||
|
||||
_secondsShut--;
|
||||
|
||||
final int delay = 1000; // milliseconds
|
||||
Thread.sleep(delay);
|
||||
|
||||
if (_shutdownMode == ABORT)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
|
@ -39,6 +39,7 @@ import org.l2jmobius.commons.database.DatabaseFactory;
|
||||
import org.l2jmobius.commons.util.IPSubnet;
|
||||
import org.l2jmobius.commons.util.IXmlReader;
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
import org.l2jmobius.loginserver.network.LoginClient;
|
||||
import org.l2jmobius.loginserver.network.gameserverpackets.ServerStatus;
|
||||
|
||||
/**
|
||||
@ -480,6 +481,24 @@ public class GameServerTable implements IXmlReader
|
||||
return _gst.getPlayerCount();
|
||||
}
|
||||
|
||||
public boolean canLogin(LoginClient client)
|
||||
{
|
||||
// DOWN status doesn't allow anyone to login.
|
||||
if (_status == ServerStatus.STATUS_DOWN)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// GM_ONLY status or full server only allows superior access levels accounts to login.
|
||||
if ((_status == ServerStatus.STATUS_GM_ONLY) || (getCurrentPlayerCount() >= getMaxPlayers()))
|
||||
{
|
||||
return client.getAccessLevel() > 0;
|
||||
}
|
||||
|
||||
// Otherwise, any positive access level account can login.
|
||||
return client.getAccessLevel() >= 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the external host.
|
||||
* @return the external host
|
||||
|
@ -46,7 +46,6 @@ import org.l2jmobius.commons.util.crypt.ScrambledKeyPair;
|
||||
import org.l2jmobius.loginserver.GameServerTable.GameServerInfo;
|
||||
import org.l2jmobius.loginserver.model.data.AccountInfo;
|
||||
import org.l2jmobius.loginserver.network.LoginClient;
|
||||
import org.l2jmobius.loginserver.network.gameserverpackets.ServerStatus;
|
||||
import org.l2jmobius.loginserver.network.serverpackets.LoginFail.LoginFailReason;
|
||||
|
||||
public class LoginController
|
||||
@ -398,11 +397,9 @@ public class LoginController
|
||||
public boolean isLoginPossible(LoginClient client, int serverId)
|
||||
{
|
||||
final GameServerInfo gsi = GameServerTable.getInstance().getRegisteredGameServerById(serverId);
|
||||
final int access = client.getAccessLevel();
|
||||
if ((gsi != null) && gsi.isAuthed())
|
||||
{
|
||||
final boolean loginOk = ((gsi.getCurrentPlayerCount() < gsi.getMaxPlayers()) && (gsi.getStatus() != ServerStatus.STATUS_GM_ONLY)) || (access > 0);
|
||||
|
||||
final boolean loginOk = gsi.canLogin(client);
|
||||
if (loginOk && (client.getLastServer() != serverId))
|
||||
{
|
||||
try (Connection con = DatabaseFactory.getConnection();
|
||||
|
@ -106,7 +106,7 @@ public class ServerList implements IOutgoingPacket
|
||||
_ageLimit = 0;
|
||||
_brackets = gsi.isShowingBrackets();
|
||||
// If server GM-only - show status only to GMs
|
||||
_status = (gsi.getStatus() == ServerStatus.STATUS_GM_ONLY) && (client.getAccessLevel() <= 0) ? ServerStatus.STATUS_DOWN : gsi.getStatus();
|
||||
_status = (client.getAccessLevel() < 0) || ((gsi.getStatus() == ServerStatus.STATUS_GM_ONLY) && (client.getAccessLevel() <= 0)) ? ServerStatus.STATUS_DOWN : gsi.getStatus();
|
||||
_serverId = gsi.getId();
|
||||
}
|
||||
}
|
||||
|
@ -711,6 +711,11 @@ public class LoginServerThread extends Thread
|
||||
}
|
||||
}
|
||||
|
||||
public int getServerStatus()
|
||||
{
|
||||
return _status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the status string.
|
||||
* @return the status string
|
||||
|
@ -276,7 +276,7 @@ public class Shutdown extends Thread
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGGER.warning("Server scheduled restart issued shutdown command. Restart in " + seconds + " seconds!");
|
||||
LOGGER.warning("Server scheduled restart issued shutdown command. " + (restart ? "Restart" : "Shutdown") + " in " + seconds + " seconds!");
|
||||
}
|
||||
|
||||
if (_shutdownMode > 0)
|
||||
@ -359,100 +359,47 @@ public class Shutdown extends Thread
|
||||
{
|
||||
while (_secondsShut > 0)
|
||||
{
|
||||
// Rehabilitate previous server status if shutdown is aborted.
|
||||
if (_shutdownMode == ABORT)
|
||||
{
|
||||
if (LoginServerThread.getInstance().getServerStatus() == ServerStatus.STATUS_DOWN)
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus((Config.SERVER_GMONLY) ? ServerStatus.STATUS_GM_ONLY : ServerStatus.STATUS_AUTO);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
switch (_secondsShut)
|
||||
{
|
||||
case 540:
|
||||
{
|
||||
SendServerQuit(540);
|
||||
break;
|
||||
}
|
||||
case 480:
|
||||
{
|
||||
SendServerQuit(480);
|
||||
break;
|
||||
}
|
||||
case 420:
|
||||
{
|
||||
SendServerQuit(420);
|
||||
break;
|
||||
}
|
||||
case 360:
|
||||
{
|
||||
SendServerQuit(360);
|
||||
break;
|
||||
}
|
||||
case 300:
|
||||
{
|
||||
SendServerQuit(300);
|
||||
break;
|
||||
}
|
||||
case 240:
|
||||
{
|
||||
SendServerQuit(240);
|
||||
break;
|
||||
}
|
||||
case 180:
|
||||
{
|
||||
SendServerQuit(180);
|
||||
break;
|
||||
}
|
||||
case 120:
|
||||
{
|
||||
SendServerQuit(120);
|
||||
break;
|
||||
}
|
||||
case 60:
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_DOWN); // avoids new players from logging in
|
||||
SendServerQuit(60);
|
||||
break;
|
||||
}
|
||||
case 30:
|
||||
{
|
||||
SendServerQuit(30);
|
||||
break;
|
||||
}
|
||||
case 10:
|
||||
{
|
||||
SendServerQuit(10);
|
||||
break;
|
||||
}
|
||||
case 5:
|
||||
{
|
||||
SendServerQuit(5);
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
SendServerQuit(4);
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
SendServerQuit(3);
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
SendServerQuit(2);
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
SendServerQuit(1);
|
||||
break;
|
||||
}
|
||||
SendServerQuit(_secondsShut);
|
||||
}
|
||||
|
||||
// Prevent players from logging in.
|
||||
if ((_secondsShut <= 60) && (LoginServerThread.getInstance().getServerStatus() != ServerStatus.STATUS_DOWN))
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_DOWN);
|
||||
}
|
||||
|
||||
_secondsShut--;
|
||||
|
||||
final int delay = 1000; // milliseconds
|
||||
Thread.sleep(delay);
|
||||
|
||||
if (_shutdownMode == ABORT)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
|
@ -39,6 +39,7 @@ import org.l2jmobius.commons.database.DatabaseFactory;
|
||||
import org.l2jmobius.commons.util.IPSubnet;
|
||||
import org.l2jmobius.commons.util.IXmlReader;
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
import org.l2jmobius.loginserver.network.LoginClient;
|
||||
import org.l2jmobius.loginserver.network.gameserverpackets.ServerStatus;
|
||||
|
||||
/**
|
||||
@ -480,6 +481,24 @@ public class GameServerTable implements IXmlReader
|
||||
return _gst.getPlayerCount();
|
||||
}
|
||||
|
||||
public boolean canLogin(LoginClient client)
|
||||
{
|
||||
// DOWN status doesn't allow anyone to login.
|
||||
if (_status == ServerStatus.STATUS_DOWN)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// GM_ONLY status or full server only allows superior access levels accounts to login.
|
||||
if ((_status == ServerStatus.STATUS_GM_ONLY) || (getCurrentPlayerCount() >= getMaxPlayers()))
|
||||
{
|
||||
return client.getAccessLevel() > 0;
|
||||
}
|
||||
|
||||
// Otherwise, any positive access level account can login.
|
||||
return client.getAccessLevel() >= 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the external host.
|
||||
* @return the external host
|
||||
|
@ -46,7 +46,6 @@ import org.l2jmobius.commons.util.crypt.ScrambledKeyPair;
|
||||
import org.l2jmobius.loginserver.GameServerTable.GameServerInfo;
|
||||
import org.l2jmobius.loginserver.model.data.AccountInfo;
|
||||
import org.l2jmobius.loginserver.network.LoginClient;
|
||||
import org.l2jmobius.loginserver.network.gameserverpackets.ServerStatus;
|
||||
import org.l2jmobius.loginserver.network.serverpackets.LoginFail.LoginFailReason;
|
||||
|
||||
public class LoginController
|
||||
@ -398,11 +397,9 @@ public class LoginController
|
||||
public boolean isLoginPossible(LoginClient client, int serverId)
|
||||
{
|
||||
final GameServerInfo gsi = GameServerTable.getInstance().getRegisteredGameServerById(serverId);
|
||||
final int access = client.getAccessLevel();
|
||||
if ((gsi != null) && gsi.isAuthed())
|
||||
{
|
||||
final boolean loginOk = ((gsi.getCurrentPlayerCount() < gsi.getMaxPlayers()) && (gsi.getStatus() != ServerStatus.STATUS_GM_ONLY)) || (access > 0);
|
||||
|
||||
final boolean loginOk = gsi.canLogin(client);
|
||||
if (loginOk && (client.getLastServer() != serverId))
|
||||
{
|
||||
try (Connection con = DatabaseFactory.getConnection();
|
||||
|
@ -106,7 +106,7 @@ public class ServerList implements IOutgoingPacket
|
||||
_ageLimit = 0;
|
||||
_brackets = gsi.isShowingBrackets();
|
||||
// If server GM-only - show status only to GMs
|
||||
_status = (gsi.getStatus() == ServerStatus.STATUS_GM_ONLY) && (client.getAccessLevel() <= 0) ? ServerStatus.STATUS_DOWN : gsi.getStatus();
|
||||
_status = (client.getAccessLevel() < 0) || ((gsi.getStatus() == ServerStatus.STATUS_GM_ONLY) && (client.getAccessLevel() <= 0)) ? ServerStatus.STATUS_DOWN : gsi.getStatus();
|
||||
_serverId = gsi.getId();
|
||||
}
|
||||
}
|
||||
|
@ -712,6 +712,11 @@ public class LoginServerThread extends Thread
|
||||
}
|
||||
}
|
||||
|
||||
public int getServerStatus()
|
||||
{
|
||||
return _status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the status string.
|
||||
* @return the status string
|
||||
|
@ -275,7 +275,7 @@ public class Shutdown extends Thread
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGGER.warning("Server scheduled restart issued shutdown command. Restart in " + seconds + " seconds!");
|
||||
LOGGER.warning("Server scheduled restart issued shutdown command. " + (restart ? "Restart" : "Shutdown") + " in " + seconds + " seconds!");
|
||||
}
|
||||
|
||||
if (_shutdownMode > 0)
|
||||
@ -358,100 +358,47 @@ public class Shutdown extends Thread
|
||||
{
|
||||
while (_secondsShut > 0)
|
||||
{
|
||||
// Rehabilitate previous server status if shutdown is aborted.
|
||||
if (_shutdownMode == ABORT)
|
||||
{
|
||||
if (LoginServerThread.getInstance().getServerStatus() == ServerStatus.STATUS_DOWN)
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus((Config.SERVER_GMONLY) ? ServerStatus.STATUS_GM_ONLY : ServerStatus.STATUS_AUTO);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
switch (_secondsShut)
|
||||
{
|
||||
case 540:
|
||||
{
|
||||
SendServerQuit(540);
|
||||
break;
|
||||
}
|
||||
case 480:
|
||||
{
|
||||
SendServerQuit(480);
|
||||
break;
|
||||
}
|
||||
case 420:
|
||||
{
|
||||
SendServerQuit(420);
|
||||
break;
|
||||
}
|
||||
case 360:
|
||||
{
|
||||
SendServerQuit(360);
|
||||
break;
|
||||
}
|
||||
case 300:
|
||||
{
|
||||
SendServerQuit(300);
|
||||
break;
|
||||
}
|
||||
case 240:
|
||||
{
|
||||
SendServerQuit(240);
|
||||
break;
|
||||
}
|
||||
case 180:
|
||||
{
|
||||
SendServerQuit(180);
|
||||
break;
|
||||
}
|
||||
case 120:
|
||||
{
|
||||
SendServerQuit(120);
|
||||
break;
|
||||
}
|
||||
case 60:
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_DOWN); // avoids new players from logging in
|
||||
SendServerQuit(60);
|
||||
break;
|
||||
}
|
||||
case 30:
|
||||
{
|
||||
SendServerQuit(30);
|
||||
break;
|
||||
}
|
||||
case 10:
|
||||
{
|
||||
SendServerQuit(10);
|
||||
break;
|
||||
}
|
||||
case 5:
|
||||
{
|
||||
SendServerQuit(5);
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
SendServerQuit(4);
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
SendServerQuit(3);
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
SendServerQuit(2);
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
SendServerQuit(1);
|
||||
break;
|
||||
}
|
||||
SendServerQuit(_secondsShut);
|
||||
}
|
||||
|
||||
// Prevent players from logging in.
|
||||
if ((_secondsShut <= 60) && (LoginServerThread.getInstance().getServerStatus() != ServerStatus.STATUS_DOWN))
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_DOWN);
|
||||
}
|
||||
|
||||
_secondsShut--;
|
||||
|
||||
final int delay = 1000; // milliseconds
|
||||
Thread.sleep(delay);
|
||||
|
||||
if (_shutdownMode == ABORT)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
|
@ -39,6 +39,7 @@ import org.l2jmobius.commons.database.DatabaseFactory;
|
||||
import org.l2jmobius.commons.util.IPSubnet;
|
||||
import org.l2jmobius.commons.util.IXmlReader;
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
import org.l2jmobius.loginserver.network.LoginClient;
|
||||
import org.l2jmobius.loginserver.network.gameserverpackets.ServerStatus;
|
||||
|
||||
/**
|
||||
@ -480,6 +481,24 @@ public class GameServerTable implements IXmlReader
|
||||
return _gst.getPlayerCount();
|
||||
}
|
||||
|
||||
public boolean canLogin(LoginClient client)
|
||||
{
|
||||
// DOWN status doesn't allow anyone to login.
|
||||
if (_status == ServerStatus.STATUS_DOWN)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// GM_ONLY status or full server only allows superior access levels accounts to login.
|
||||
if ((_status == ServerStatus.STATUS_GM_ONLY) || (getCurrentPlayerCount() >= getMaxPlayers()))
|
||||
{
|
||||
return client.getAccessLevel() > 0;
|
||||
}
|
||||
|
||||
// Otherwise, any positive access level account can login.
|
||||
return client.getAccessLevel() >= 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the external host.
|
||||
* @return the external host
|
||||
|
@ -46,7 +46,6 @@ import org.l2jmobius.commons.util.crypt.ScrambledKeyPair;
|
||||
import org.l2jmobius.loginserver.GameServerTable.GameServerInfo;
|
||||
import org.l2jmobius.loginserver.model.data.AccountInfo;
|
||||
import org.l2jmobius.loginserver.network.LoginClient;
|
||||
import org.l2jmobius.loginserver.network.gameserverpackets.ServerStatus;
|
||||
import org.l2jmobius.loginserver.network.serverpackets.LoginFail.LoginFailReason;
|
||||
|
||||
public class LoginController
|
||||
@ -398,11 +397,9 @@ public class LoginController
|
||||
public boolean isLoginPossible(LoginClient client, int serverId)
|
||||
{
|
||||
final GameServerInfo gsi = GameServerTable.getInstance().getRegisteredGameServerById(serverId);
|
||||
final int access = client.getAccessLevel();
|
||||
if ((gsi != null) && gsi.isAuthed())
|
||||
{
|
||||
final boolean loginOk = ((gsi.getCurrentPlayerCount() < gsi.getMaxPlayers()) && (gsi.getStatus() != ServerStatus.STATUS_GM_ONLY)) || (access > 0);
|
||||
|
||||
final boolean loginOk = gsi.canLogin(client);
|
||||
if (loginOk && (client.getLastServer() != serverId))
|
||||
{
|
||||
try (Connection con = DatabaseFactory.getConnection();
|
||||
|
@ -105,7 +105,7 @@ public class ServerList implements IOutgoingPacket
|
||||
_ageLimit = 0;
|
||||
_brackets = gsi.isShowingBrackets();
|
||||
// If server GM-only - show status only to GMs
|
||||
_status = gsi.getStatus() != ServerStatus.STATUS_GM_ONLY ? gsi.getStatus() : client.getAccessLevel() > 0 ? gsi.getStatus() : ServerStatus.STATUS_DOWN;
|
||||
_status = (client.getAccessLevel() < 0) || ((gsi.getStatus() == ServerStatus.STATUS_GM_ONLY) && (client.getAccessLevel() <= 0)) ? ServerStatus.STATUS_DOWN : gsi.getStatus();
|
||||
_serverId = gsi.getId();
|
||||
}
|
||||
}
|
||||
|
@ -712,6 +712,11 @@ public class LoginServerThread extends Thread
|
||||
}
|
||||
}
|
||||
|
||||
public int getServerStatus()
|
||||
{
|
||||
return _status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the status string.
|
||||
* @return the status string
|
||||
|
@ -275,7 +275,7 @@ public class Shutdown extends Thread
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGGER.warning("Server scheduled restart issued shutdown command. Restart in " + seconds + " seconds!");
|
||||
LOGGER.warning("Server scheduled restart issued shutdown command. " + (restart ? "Restart" : "Shutdown") + " in " + seconds + " seconds!");
|
||||
}
|
||||
|
||||
if (_shutdownMode > 0)
|
||||
@ -358,100 +358,47 @@ public class Shutdown extends Thread
|
||||
{
|
||||
while (_secondsShut > 0)
|
||||
{
|
||||
// Rehabilitate previous server status if shutdown is aborted.
|
||||
if (_shutdownMode == ABORT)
|
||||
{
|
||||
if (LoginServerThread.getInstance().getServerStatus() == ServerStatus.STATUS_DOWN)
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus((Config.SERVER_GMONLY) ? ServerStatus.STATUS_GM_ONLY : ServerStatus.STATUS_AUTO);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
switch (_secondsShut)
|
||||
{
|
||||
case 540:
|
||||
{
|
||||
SendServerQuit(540);
|
||||
break;
|
||||
}
|
||||
case 480:
|
||||
{
|
||||
SendServerQuit(480);
|
||||
break;
|
||||
}
|
||||
case 420:
|
||||
{
|
||||
SendServerQuit(420);
|
||||
break;
|
||||
}
|
||||
case 360:
|
||||
{
|
||||
SendServerQuit(360);
|
||||
break;
|
||||
}
|
||||
case 300:
|
||||
{
|
||||
SendServerQuit(300);
|
||||
break;
|
||||
}
|
||||
case 240:
|
||||
{
|
||||
SendServerQuit(240);
|
||||
break;
|
||||
}
|
||||
case 180:
|
||||
{
|
||||
SendServerQuit(180);
|
||||
break;
|
||||
}
|
||||
case 120:
|
||||
{
|
||||
SendServerQuit(120);
|
||||
break;
|
||||
}
|
||||
case 60:
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_DOWN); // avoids new players from logging in
|
||||
SendServerQuit(60);
|
||||
break;
|
||||
}
|
||||
case 30:
|
||||
{
|
||||
SendServerQuit(30);
|
||||
break;
|
||||
}
|
||||
case 10:
|
||||
{
|
||||
SendServerQuit(10);
|
||||
break;
|
||||
}
|
||||
case 5:
|
||||
{
|
||||
SendServerQuit(5);
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
SendServerQuit(4);
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
SendServerQuit(3);
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
SendServerQuit(2);
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
SendServerQuit(1);
|
||||
break;
|
||||
}
|
||||
SendServerQuit(_secondsShut);
|
||||
}
|
||||
|
||||
// Prevent players from logging in.
|
||||
if ((_secondsShut <= 60) && (LoginServerThread.getInstance().getServerStatus() != ServerStatus.STATUS_DOWN))
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_DOWN);
|
||||
}
|
||||
|
||||
_secondsShut--;
|
||||
|
||||
final int delay = 1000; // milliseconds
|
||||
Thread.sleep(delay);
|
||||
|
||||
if (_shutdownMode == ABORT)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
|
@ -39,6 +39,7 @@ import org.l2jmobius.commons.database.DatabaseFactory;
|
||||
import org.l2jmobius.commons.util.IPSubnet;
|
||||
import org.l2jmobius.commons.util.IXmlReader;
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
import org.l2jmobius.loginserver.network.LoginClient;
|
||||
import org.l2jmobius.loginserver.network.gameserverpackets.ServerStatus;
|
||||
|
||||
/**
|
||||
@ -480,6 +481,24 @@ public class GameServerTable implements IXmlReader
|
||||
return _gst.getPlayerCount();
|
||||
}
|
||||
|
||||
public boolean canLogin(LoginClient client)
|
||||
{
|
||||
// DOWN status doesn't allow anyone to login.
|
||||
if (_status == ServerStatus.STATUS_DOWN)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// GM_ONLY status or full server only allows superior access levels accounts to login.
|
||||
if ((_status == ServerStatus.STATUS_GM_ONLY) || (getCurrentPlayerCount() >= getMaxPlayers()))
|
||||
{
|
||||
return client.getAccessLevel() > 0;
|
||||
}
|
||||
|
||||
// Otherwise, any positive access level account can login.
|
||||
return client.getAccessLevel() >= 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the external host.
|
||||
* @return the external host
|
||||
|
@ -46,7 +46,6 @@ import org.l2jmobius.commons.util.crypt.ScrambledKeyPair;
|
||||
import org.l2jmobius.loginserver.GameServerTable.GameServerInfo;
|
||||
import org.l2jmobius.loginserver.model.data.AccountInfo;
|
||||
import org.l2jmobius.loginserver.network.LoginClient;
|
||||
import org.l2jmobius.loginserver.network.gameserverpackets.ServerStatus;
|
||||
import org.l2jmobius.loginserver.network.serverpackets.LoginFail.LoginFailReason;
|
||||
|
||||
public class LoginController
|
||||
@ -398,11 +397,9 @@ public class LoginController
|
||||
public boolean isLoginPossible(LoginClient client, int serverId)
|
||||
{
|
||||
final GameServerInfo gsi = GameServerTable.getInstance().getRegisteredGameServerById(serverId);
|
||||
final int access = client.getAccessLevel();
|
||||
if ((gsi != null) && gsi.isAuthed())
|
||||
{
|
||||
final boolean loginOk = ((gsi.getCurrentPlayerCount() < gsi.getMaxPlayers()) && (gsi.getStatus() != ServerStatus.STATUS_GM_ONLY)) || (access > 0);
|
||||
|
||||
final boolean loginOk = gsi.canLogin(client);
|
||||
if (loginOk && (client.getLastServer() != serverId))
|
||||
{
|
||||
try (Connection con = DatabaseFactory.getConnection();
|
||||
|
@ -105,7 +105,7 @@ public class ServerList implements IOutgoingPacket
|
||||
_ageLimit = 0;
|
||||
_brackets = gsi.isShowingBrackets();
|
||||
// If server GM-only - show status only to GMs
|
||||
_status = gsi.getStatus() != ServerStatus.STATUS_GM_ONLY ? gsi.getStatus() : client.getAccessLevel() > 0 ? gsi.getStatus() : ServerStatus.STATUS_DOWN;
|
||||
_status = (client.getAccessLevel() < 0) || ((gsi.getStatus() == ServerStatus.STATUS_GM_ONLY) && (client.getAccessLevel() <= 0)) ? ServerStatus.STATUS_DOWN : gsi.getStatus();
|
||||
_serverId = gsi.getId();
|
||||
}
|
||||
}
|
||||
|
@ -712,6 +712,11 @@ public class LoginServerThread extends Thread
|
||||
}
|
||||
}
|
||||
|
||||
public int getServerStatus()
|
||||
{
|
||||
return _status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the status string.
|
||||
* @return the status string
|
||||
|
@ -275,7 +275,7 @@ public class Shutdown extends Thread
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGGER.warning("Server scheduled restart issued shutdown command. Restart in " + seconds + " seconds!");
|
||||
LOGGER.warning("Server scheduled restart issued shutdown command. " + (restart ? "Restart" : "Shutdown") + " in " + seconds + " seconds!");
|
||||
}
|
||||
|
||||
if (_shutdownMode > 0)
|
||||
@ -358,100 +358,47 @@ public class Shutdown extends Thread
|
||||
{
|
||||
while (_secondsShut > 0)
|
||||
{
|
||||
// Rehabilitate previous server status if shutdown is aborted.
|
||||
if (_shutdownMode == ABORT)
|
||||
{
|
||||
if (LoginServerThread.getInstance().getServerStatus() == ServerStatus.STATUS_DOWN)
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus((Config.SERVER_GMONLY) ? ServerStatus.STATUS_GM_ONLY : ServerStatus.STATUS_AUTO);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
switch (_secondsShut)
|
||||
{
|
||||
case 540:
|
||||
{
|
||||
SendServerQuit(540);
|
||||
break;
|
||||
}
|
||||
case 480:
|
||||
{
|
||||
SendServerQuit(480);
|
||||
break;
|
||||
}
|
||||
case 420:
|
||||
{
|
||||
SendServerQuit(420);
|
||||
break;
|
||||
}
|
||||
case 360:
|
||||
{
|
||||
SendServerQuit(360);
|
||||
break;
|
||||
}
|
||||
case 300:
|
||||
{
|
||||
SendServerQuit(300);
|
||||
break;
|
||||
}
|
||||
case 240:
|
||||
{
|
||||
SendServerQuit(240);
|
||||
break;
|
||||
}
|
||||
case 180:
|
||||
{
|
||||
SendServerQuit(180);
|
||||
break;
|
||||
}
|
||||
case 120:
|
||||
{
|
||||
SendServerQuit(120);
|
||||
break;
|
||||
}
|
||||
case 60:
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_DOWN); // avoids new players from logging in
|
||||
SendServerQuit(60);
|
||||
break;
|
||||
}
|
||||
case 30:
|
||||
{
|
||||
SendServerQuit(30);
|
||||
break;
|
||||
}
|
||||
case 10:
|
||||
{
|
||||
SendServerQuit(10);
|
||||
break;
|
||||
}
|
||||
case 5:
|
||||
{
|
||||
SendServerQuit(5);
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
SendServerQuit(4);
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
SendServerQuit(3);
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
SendServerQuit(2);
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
SendServerQuit(1);
|
||||
break;
|
||||
}
|
||||
SendServerQuit(_secondsShut);
|
||||
}
|
||||
|
||||
// Prevent players from logging in.
|
||||
if ((_secondsShut <= 60) && (LoginServerThread.getInstance().getServerStatus() != ServerStatus.STATUS_DOWN))
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_DOWN);
|
||||
}
|
||||
|
||||
_secondsShut--;
|
||||
|
||||
final int delay = 1000; // milliseconds
|
||||
Thread.sleep(delay);
|
||||
|
||||
if (_shutdownMode == ABORT)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
|
@ -39,6 +39,7 @@ import org.l2jmobius.commons.database.DatabaseFactory;
|
||||
import org.l2jmobius.commons.util.IPSubnet;
|
||||
import org.l2jmobius.commons.util.IXmlReader;
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
import org.l2jmobius.loginserver.network.LoginClient;
|
||||
import org.l2jmobius.loginserver.network.gameserverpackets.ServerStatus;
|
||||
|
||||
/**
|
||||
@ -480,6 +481,24 @@ public class GameServerTable implements IXmlReader
|
||||
return _gst.getPlayerCount();
|
||||
}
|
||||
|
||||
public boolean canLogin(LoginClient client)
|
||||
{
|
||||
// DOWN status doesn't allow anyone to login.
|
||||
if (_status == ServerStatus.STATUS_DOWN)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// GM_ONLY status or full server only allows superior access levels accounts to login.
|
||||
if ((_status == ServerStatus.STATUS_GM_ONLY) || (getCurrentPlayerCount() >= getMaxPlayers()))
|
||||
{
|
||||
return client.getAccessLevel() > 0;
|
||||
}
|
||||
|
||||
// Otherwise, any positive access level account can login.
|
||||
return client.getAccessLevel() >= 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the external host.
|
||||
* @return the external host
|
||||
|
@ -46,7 +46,6 @@ import org.l2jmobius.commons.util.crypt.ScrambledKeyPair;
|
||||
import org.l2jmobius.loginserver.GameServerTable.GameServerInfo;
|
||||
import org.l2jmobius.loginserver.model.data.AccountInfo;
|
||||
import org.l2jmobius.loginserver.network.LoginClient;
|
||||
import org.l2jmobius.loginserver.network.gameserverpackets.ServerStatus;
|
||||
import org.l2jmobius.loginserver.network.serverpackets.LoginFail.LoginFailReason;
|
||||
|
||||
public class LoginController
|
||||
@ -398,11 +397,9 @@ public class LoginController
|
||||
public boolean isLoginPossible(LoginClient client, int serverId)
|
||||
{
|
||||
final GameServerInfo gsi = GameServerTable.getInstance().getRegisteredGameServerById(serverId);
|
||||
final int access = client.getAccessLevel();
|
||||
if ((gsi != null) && gsi.isAuthed())
|
||||
{
|
||||
final boolean loginOk = ((gsi.getCurrentPlayerCount() < gsi.getMaxPlayers()) && (gsi.getStatus() != ServerStatus.STATUS_GM_ONLY)) || (access > 0);
|
||||
|
||||
final boolean loginOk = gsi.canLogin(client);
|
||||
if (loginOk && (client.getLastServer() != serverId))
|
||||
{
|
||||
try (Connection con = DatabaseFactory.getConnection();
|
||||
|
@ -105,7 +105,7 @@ public class ServerList implements IOutgoingPacket
|
||||
_ageLimit = 0;
|
||||
_brackets = gsi.isShowingBrackets();
|
||||
// If server GM-only - show status only to GMs
|
||||
_status = gsi.getStatus() != ServerStatus.STATUS_GM_ONLY ? gsi.getStatus() : client.getAccessLevel() > 0 ? gsi.getStatus() : ServerStatus.STATUS_DOWN;
|
||||
_status = (client.getAccessLevel() < 0) || ((gsi.getStatus() == ServerStatus.STATUS_GM_ONLY) && (client.getAccessLevel() <= 0)) ? ServerStatus.STATUS_DOWN : gsi.getStatus();
|
||||
_serverId = gsi.getId();
|
||||
}
|
||||
}
|
||||
|
@ -712,6 +712,11 @@ public class LoginServerThread extends Thread
|
||||
}
|
||||
}
|
||||
|
||||
public int getServerStatus()
|
||||
{
|
||||
return _status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the status string.
|
||||
* @return the status string
|
||||
|
@ -275,7 +275,7 @@ public class Shutdown extends Thread
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGGER.warning("Server scheduled restart issued shutdown command. Restart in " + seconds + " seconds!");
|
||||
LOGGER.warning("Server scheduled restart issued shutdown command. " + (restart ? "Restart" : "Shutdown") + " in " + seconds + " seconds!");
|
||||
}
|
||||
|
||||
if (_shutdownMode > 0)
|
||||
@ -358,100 +358,47 @@ public class Shutdown extends Thread
|
||||
{
|
||||
while (_secondsShut > 0)
|
||||
{
|
||||
// Rehabilitate previous server status if shutdown is aborted.
|
||||
if (_shutdownMode == ABORT)
|
||||
{
|
||||
if (LoginServerThread.getInstance().getServerStatus() == ServerStatus.STATUS_DOWN)
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus((Config.SERVER_GMONLY) ? ServerStatus.STATUS_GM_ONLY : ServerStatus.STATUS_AUTO);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
switch (_secondsShut)
|
||||
{
|
||||
case 540:
|
||||
{
|
||||
SendServerQuit(540);
|
||||
break;
|
||||
}
|
||||
case 480:
|
||||
{
|
||||
SendServerQuit(480);
|
||||
break;
|
||||
}
|
||||
case 420:
|
||||
{
|
||||
SendServerQuit(420);
|
||||
break;
|
||||
}
|
||||
case 360:
|
||||
{
|
||||
SendServerQuit(360);
|
||||
break;
|
||||
}
|
||||
case 300:
|
||||
{
|
||||
SendServerQuit(300);
|
||||
break;
|
||||
}
|
||||
case 240:
|
||||
{
|
||||
SendServerQuit(240);
|
||||
break;
|
||||
}
|
||||
case 180:
|
||||
{
|
||||
SendServerQuit(180);
|
||||
break;
|
||||
}
|
||||
case 120:
|
||||
{
|
||||
SendServerQuit(120);
|
||||
break;
|
||||
}
|
||||
case 60:
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_DOWN); // avoids new players from logging in
|
||||
SendServerQuit(60);
|
||||
break;
|
||||
}
|
||||
case 30:
|
||||
{
|
||||
SendServerQuit(30);
|
||||
break;
|
||||
}
|
||||
case 10:
|
||||
{
|
||||
SendServerQuit(10);
|
||||
break;
|
||||
}
|
||||
case 5:
|
||||
{
|
||||
SendServerQuit(5);
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
SendServerQuit(4);
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
SendServerQuit(3);
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
SendServerQuit(2);
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
SendServerQuit(1);
|
||||
break;
|
||||
}
|
||||
SendServerQuit(_secondsShut);
|
||||
}
|
||||
|
||||
// Prevent players from logging in.
|
||||
if ((_secondsShut <= 60) && (LoginServerThread.getInstance().getServerStatus() != ServerStatus.STATUS_DOWN))
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_DOWN);
|
||||
}
|
||||
|
||||
_secondsShut--;
|
||||
|
||||
final int delay = 1000; // milliseconds
|
||||
Thread.sleep(delay);
|
||||
|
||||
if (_shutdownMode == ABORT)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
|
@ -39,6 +39,7 @@ import org.l2jmobius.commons.database.DatabaseFactory;
|
||||
import org.l2jmobius.commons.util.IPSubnet;
|
||||
import org.l2jmobius.commons.util.IXmlReader;
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
import org.l2jmobius.loginserver.network.LoginClient;
|
||||
import org.l2jmobius.loginserver.network.gameserverpackets.ServerStatus;
|
||||
|
||||
/**
|
||||
@ -480,6 +481,24 @@ public class GameServerTable implements IXmlReader
|
||||
return _gst.getPlayerCount();
|
||||
}
|
||||
|
||||
public boolean canLogin(LoginClient client)
|
||||
{
|
||||
// DOWN status doesn't allow anyone to login.
|
||||
if (_status == ServerStatus.STATUS_DOWN)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// GM_ONLY status or full server only allows superior access levels accounts to login.
|
||||
if ((_status == ServerStatus.STATUS_GM_ONLY) || (getCurrentPlayerCount() >= getMaxPlayers()))
|
||||
{
|
||||
return client.getAccessLevel() > 0;
|
||||
}
|
||||
|
||||
// Otherwise, any positive access level account can login.
|
||||
return client.getAccessLevel() >= 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the external host.
|
||||
* @return the external host
|
||||
|
@ -46,7 +46,6 @@ import org.l2jmobius.commons.util.crypt.ScrambledKeyPair;
|
||||
import org.l2jmobius.loginserver.GameServerTable.GameServerInfo;
|
||||
import org.l2jmobius.loginserver.model.data.AccountInfo;
|
||||
import org.l2jmobius.loginserver.network.LoginClient;
|
||||
import org.l2jmobius.loginserver.network.gameserverpackets.ServerStatus;
|
||||
import org.l2jmobius.loginserver.network.serverpackets.LoginFail.LoginFailReason;
|
||||
|
||||
public class LoginController
|
||||
@ -398,11 +397,9 @@ public class LoginController
|
||||
public boolean isLoginPossible(LoginClient client, int serverId)
|
||||
{
|
||||
final GameServerInfo gsi = GameServerTable.getInstance().getRegisteredGameServerById(serverId);
|
||||
final int access = client.getAccessLevel();
|
||||
if ((gsi != null) && gsi.isAuthed())
|
||||
{
|
||||
final boolean loginOk = ((gsi.getCurrentPlayerCount() < gsi.getMaxPlayers()) && (gsi.getStatus() != ServerStatus.STATUS_GM_ONLY)) || (access > 0);
|
||||
|
||||
final boolean loginOk = gsi.canLogin(client);
|
||||
if (loginOk && (client.getLastServer() != serverId))
|
||||
{
|
||||
try (Connection con = DatabaseFactory.getConnection();
|
||||
|
@ -105,7 +105,7 @@ public class ServerList implements IOutgoingPacket
|
||||
_ageLimit = 0;
|
||||
_brackets = gsi.isShowingBrackets();
|
||||
// If server GM-only - show status only to GMs
|
||||
_status = gsi.getStatus() != ServerStatus.STATUS_GM_ONLY ? gsi.getStatus() : client.getAccessLevel() > 0 ? gsi.getStatus() : ServerStatus.STATUS_DOWN;
|
||||
_status = (client.getAccessLevel() < 0) || ((gsi.getStatus() == ServerStatus.STATUS_GM_ONLY) && (client.getAccessLevel() <= 0)) ? ServerStatus.STATUS_DOWN : gsi.getStatus();
|
||||
_serverId = gsi.getId();
|
||||
}
|
||||
}
|
||||
|
@ -712,6 +712,11 @@ public class LoginServerThread extends Thread
|
||||
}
|
||||
}
|
||||
|
||||
public int getServerStatus()
|
||||
{
|
||||
return _status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the status string.
|
||||
* @return the status string
|
||||
|
@ -275,7 +275,7 @@ public class Shutdown extends Thread
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGGER.warning("Server scheduled restart issued shutdown command. Restart in " + seconds + " seconds!");
|
||||
LOGGER.warning("Server scheduled restart issued shutdown command. " + (restart ? "Restart" : "Shutdown") + " in " + seconds + " seconds!");
|
||||
}
|
||||
|
||||
if (_shutdownMode > 0)
|
||||
@ -358,100 +358,47 @@ public class Shutdown extends Thread
|
||||
{
|
||||
while (_secondsShut > 0)
|
||||
{
|
||||
// Rehabilitate previous server status if shutdown is aborted.
|
||||
if (_shutdownMode == ABORT)
|
||||
{
|
||||
if (LoginServerThread.getInstance().getServerStatus() == ServerStatus.STATUS_DOWN)
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus((Config.SERVER_GMONLY) ? ServerStatus.STATUS_GM_ONLY : ServerStatus.STATUS_AUTO);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
switch (_secondsShut)
|
||||
{
|
||||
case 540:
|
||||
{
|
||||
SendServerQuit(540);
|
||||
break;
|
||||
}
|
||||
case 480:
|
||||
{
|
||||
SendServerQuit(480);
|
||||
break;
|
||||
}
|
||||
case 420:
|
||||
{
|
||||
SendServerQuit(420);
|
||||
break;
|
||||
}
|
||||
case 360:
|
||||
{
|
||||
SendServerQuit(360);
|
||||
break;
|
||||
}
|
||||
case 300:
|
||||
{
|
||||
SendServerQuit(300);
|
||||
break;
|
||||
}
|
||||
case 240:
|
||||
{
|
||||
SendServerQuit(240);
|
||||
break;
|
||||
}
|
||||
case 180:
|
||||
{
|
||||
SendServerQuit(180);
|
||||
break;
|
||||
}
|
||||
case 120:
|
||||
{
|
||||
SendServerQuit(120);
|
||||
break;
|
||||
}
|
||||
case 60:
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_DOWN); // avoids new players from logging in
|
||||
SendServerQuit(60);
|
||||
break;
|
||||
}
|
||||
case 30:
|
||||
{
|
||||
SendServerQuit(30);
|
||||
break;
|
||||
}
|
||||
case 10:
|
||||
{
|
||||
SendServerQuit(10);
|
||||
break;
|
||||
}
|
||||
case 5:
|
||||
{
|
||||
SendServerQuit(5);
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
SendServerQuit(4);
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
SendServerQuit(3);
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
SendServerQuit(2);
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
SendServerQuit(1);
|
||||
break;
|
||||
}
|
||||
SendServerQuit(_secondsShut);
|
||||
}
|
||||
|
||||
// Prevent players from logging in.
|
||||
if ((_secondsShut <= 60) && (LoginServerThread.getInstance().getServerStatus() != ServerStatus.STATUS_DOWN))
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_DOWN);
|
||||
}
|
||||
|
||||
_secondsShut--;
|
||||
|
||||
final int delay = 1000; // milliseconds
|
||||
Thread.sleep(delay);
|
||||
|
||||
if (_shutdownMode == ABORT)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
|
@ -39,6 +39,7 @@ import org.l2jmobius.commons.database.DatabaseFactory;
|
||||
import org.l2jmobius.commons.util.IPSubnet;
|
||||
import org.l2jmobius.commons.util.IXmlReader;
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
import org.l2jmobius.loginserver.network.LoginClient;
|
||||
import org.l2jmobius.loginserver.network.gameserverpackets.ServerStatus;
|
||||
|
||||
/**
|
||||
@ -480,6 +481,24 @@ public class GameServerTable implements IXmlReader
|
||||
return _gst.getPlayerCount();
|
||||
}
|
||||
|
||||
public boolean canLogin(LoginClient client)
|
||||
{
|
||||
// DOWN status doesn't allow anyone to login.
|
||||
if (_status == ServerStatus.STATUS_DOWN)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// GM_ONLY status or full server only allows superior access levels accounts to login.
|
||||
if ((_status == ServerStatus.STATUS_GM_ONLY) || (getCurrentPlayerCount() >= getMaxPlayers()))
|
||||
{
|
||||
return client.getAccessLevel() > 0;
|
||||
}
|
||||
|
||||
// Otherwise, any positive access level account can login.
|
||||
return client.getAccessLevel() >= 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the external host.
|
||||
* @return the external host
|
||||
|
@ -46,7 +46,6 @@ import org.l2jmobius.commons.util.crypt.ScrambledKeyPair;
|
||||
import org.l2jmobius.loginserver.GameServerTable.GameServerInfo;
|
||||
import org.l2jmobius.loginserver.model.data.AccountInfo;
|
||||
import org.l2jmobius.loginserver.network.LoginClient;
|
||||
import org.l2jmobius.loginserver.network.gameserverpackets.ServerStatus;
|
||||
import org.l2jmobius.loginserver.network.serverpackets.LoginFail.LoginFailReason;
|
||||
|
||||
public class LoginController
|
||||
@ -398,11 +397,9 @@ public class LoginController
|
||||
public boolean isLoginPossible(LoginClient client, int serverId)
|
||||
{
|
||||
final GameServerInfo gsi = GameServerTable.getInstance().getRegisteredGameServerById(serverId);
|
||||
final int access = client.getAccessLevel();
|
||||
if ((gsi != null) && gsi.isAuthed())
|
||||
{
|
||||
final boolean loginOk = ((gsi.getCurrentPlayerCount() < gsi.getMaxPlayers()) && (gsi.getStatus() != ServerStatus.STATUS_GM_ONLY)) || (access > 0);
|
||||
|
||||
final boolean loginOk = gsi.canLogin(client);
|
||||
if (loginOk && (client.getLastServer() != serverId))
|
||||
{
|
||||
try (Connection con = DatabaseFactory.getConnection();
|
||||
|
@ -105,7 +105,7 @@ public class ServerList implements IOutgoingPacket
|
||||
_ageLimit = 0;
|
||||
_brackets = gsi.isShowingBrackets();
|
||||
// If server GM-only - show status only to GMs
|
||||
_status = gsi.getStatus() != ServerStatus.STATUS_GM_ONLY ? gsi.getStatus() : client.getAccessLevel() > 0 ? gsi.getStatus() : ServerStatus.STATUS_DOWN;
|
||||
_status = (client.getAccessLevel() < 0) || ((gsi.getStatus() == ServerStatus.STATUS_GM_ONLY) && (client.getAccessLevel() <= 0)) ? ServerStatus.STATUS_DOWN : gsi.getStatus();
|
||||
_serverId = gsi.getId();
|
||||
}
|
||||
}
|
||||
|
@ -712,6 +712,11 @@ public class LoginServerThread extends Thread
|
||||
}
|
||||
}
|
||||
|
||||
public int getServerStatus()
|
||||
{
|
||||
return _status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the status string.
|
||||
* @return the status string
|
||||
|
@ -275,7 +275,7 @@ public class Shutdown extends Thread
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGGER.warning("Server scheduled restart issued shutdown command. Restart in " + seconds + " seconds!");
|
||||
LOGGER.warning("Server scheduled restart issued shutdown command. " + (restart ? "Restart" : "Shutdown") + " in " + seconds + " seconds!");
|
||||
}
|
||||
|
||||
if (_shutdownMode > 0)
|
||||
@ -358,100 +358,47 @@ public class Shutdown extends Thread
|
||||
{
|
||||
while (_secondsShut > 0)
|
||||
{
|
||||
// Rehabilitate previous server status if shutdown is aborted.
|
||||
if (_shutdownMode == ABORT)
|
||||
{
|
||||
if (LoginServerThread.getInstance().getServerStatus() == ServerStatus.STATUS_DOWN)
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus((Config.SERVER_GMONLY) ? ServerStatus.STATUS_GM_ONLY : ServerStatus.STATUS_AUTO);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
switch (_secondsShut)
|
||||
{
|
||||
case 540:
|
||||
{
|
||||
SendServerQuit(540);
|
||||
break;
|
||||
}
|
||||
case 480:
|
||||
{
|
||||
SendServerQuit(480);
|
||||
break;
|
||||
}
|
||||
case 420:
|
||||
{
|
||||
SendServerQuit(420);
|
||||
break;
|
||||
}
|
||||
case 360:
|
||||
{
|
||||
SendServerQuit(360);
|
||||
break;
|
||||
}
|
||||
case 300:
|
||||
{
|
||||
SendServerQuit(300);
|
||||
break;
|
||||
}
|
||||
case 240:
|
||||
{
|
||||
SendServerQuit(240);
|
||||
break;
|
||||
}
|
||||
case 180:
|
||||
{
|
||||
SendServerQuit(180);
|
||||
break;
|
||||
}
|
||||
case 120:
|
||||
{
|
||||
SendServerQuit(120);
|
||||
break;
|
||||
}
|
||||
case 60:
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_DOWN); // avoids new players from logging in
|
||||
SendServerQuit(60);
|
||||
break;
|
||||
}
|
||||
case 30:
|
||||
{
|
||||
SendServerQuit(30);
|
||||
break;
|
||||
}
|
||||
case 10:
|
||||
{
|
||||
SendServerQuit(10);
|
||||
break;
|
||||
}
|
||||
case 5:
|
||||
{
|
||||
SendServerQuit(5);
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
SendServerQuit(4);
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
SendServerQuit(3);
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
SendServerQuit(2);
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
SendServerQuit(1);
|
||||
break;
|
||||
}
|
||||
SendServerQuit(_secondsShut);
|
||||
}
|
||||
|
||||
// Prevent players from logging in.
|
||||
if ((_secondsShut <= 60) && (LoginServerThread.getInstance().getServerStatus() != ServerStatus.STATUS_DOWN))
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_DOWN);
|
||||
}
|
||||
|
||||
_secondsShut--;
|
||||
|
||||
final int delay = 1000; // milliseconds
|
||||
Thread.sleep(delay);
|
||||
|
||||
if (_shutdownMode == ABORT)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
|
@ -39,6 +39,7 @@ import org.l2jmobius.commons.database.DatabaseFactory;
|
||||
import org.l2jmobius.commons.util.IPSubnet;
|
||||
import org.l2jmobius.commons.util.IXmlReader;
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
import org.l2jmobius.loginserver.network.LoginClient;
|
||||
import org.l2jmobius.loginserver.network.gameserverpackets.ServerStatus;
|
||||
|
||||
/**
|
||||
@ -480,6 +481,24 @@ public class GameServerTable implements IXmlReader
|
||||
return _gst.getPlayerCount();
|
||||
}
|
||||
|
||||
public boolean canLogin(LoginClient client)
|
||||
{
|
||||
// DOWN status doesn't allow anyone to login.
|
||||
if (_status == ServerStatus.STATUS_DOWN)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// GM_ONLY status or full server only allows superior access levels accounts to login.
|
||||
if ((_status == ServerStatus.STATUS_GM_ONLY) || (getCurrentPlayerCount() >= getMaxPlayers()))
|
||||
{
|
||||
return client.getAccessLevel() > 0;
|
||||
}
|
||||
|
||||
// Otherwise, any positive access level account can login.
|
||||
return client.getAccessLevel() >= 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the external host.
|
||||
* @return the external host
|
||||
|
@ -46,7 +46,6 @@ import org.l2jmobius.commons.util.crypt.ScrambledKeyPair;
|
||||
import org.l2jmobius.loginserver.GameServerTable.GameServerInfo;
|
||||
import org.l2jmobius.loginserver.model.data.AccountInfo;
|
||||
import org.l2jmobius.loginserver.network.LoginClient;
|
||||
import org.l2jmobius.loginserver.network.gameserverpackets.ServerStatus;
|
||||
import org.l2jmobius.loginserver.network.serverpackets.LoginFail.LoginFailReason;
|
||||
|
||||
public class LoginController
|
||||
@ -398,11 +397,9 @@ public class LoginController
|
||||
public boolean isLoginPossible(LoginClient client, int serverId)
|
||||
{
|
||||
final GameServerInfo gsi = GameServerTable.getInstance().getRegisteredGameServerById(serverId);
|
||||
final int access = client.getAccessLevel();
|
||||
if ((gsi != null) && gsi.isAuthed())
|
||||
{
|
||||
final boolean loginOk = ((gsi.getCurrentPlayerCount() < gsi.getMaxPlayers()) && (gsi.getStatus() != ServerStatus.STATUS_GM_ONLY)) || (access > 0);
|
||||
|
||||
final boolean loginOk = gsi.canLogin(client);
|
||||
if (loginOk && (client.getLastServer() != serverId))
|
||||
{
|
||||
try (Connection con = DatabaseFactory.getConnection();
|
||||
|
@ -105,7 +105,7 @@ public class ServerList implements IOutgoingPacket
|
||||
_ageLimit = 0;
|
||||
_brackets = gsi.isShowingBrackets();
|
||||
// If server GM-only - show status only to GMs
|
||||
_status = gsi.getStatus() != ServerStatus.STATUS_GM_ONLY ? gsi.getStatus() : client.getAccessLevel() > 0 ? gsi.getStatus() : ServerStatus.STATUS_DOWN;
|
||||
_status = (client.getAccessLevel() < 0) || ((gsi.getStatus() == ServerStatus.STATUS_GM_ONLY) && (client.getAccessLevel() <= 0)) ? ServerStatus.STATUS_DOWN : gsi.getStatus();
|
||||
_serverId = gsi.getId();
|
||||
}
|
||||
}
|
||||
|
@ -712,6 +712,11 @@ public class LoginServerThread extends Thread
|
||||
}
|
||||
}
|
||||
|
||||
public int getServerStatus()
|
||||
{
|
||||
return _status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the status string.
|
||||
* @return the status string
|
||||
|
@ -275,7 +275,7 @@ public class Shutdown extends Thread
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGGER.warning("Server scheduled restart issued shutdown command. Restart in " + seconds + " seconds!");
|
||||
LOGGER.warning("Server scheduled restart issued shutdown command. " + (restart ? "Restart" : "Shutdown") + " in " + seconds + " seconds!");
|
||||
}
|
||||
|
||||
if (_shutdownMode > 0)
|
||||
@ -358,100 +358,47 @@ public class Shutdown extends Thread
|
||||
{
|
||||
while (_secondsShut > 0)
|
||||
{
|
||||
// Rehabilitate previous server status if shutdown is aborted.
|
||||
if (_shutdownMode == ABORT)
|
||||
{
|
||||
if (LoginServerThread.getInstance().getServerStatus() == ServerStatus.STATUS_DOWN)
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus((Config.SERVER_GMONLY) ? ServerStatus.STATUS_GM_ONLY : ServerStatus.STATUS_AUTO);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
switch (_secondsShut)
|
||||
{
|
||||
case 540:
|
||||
{
|
||||
SendServerQuit(540);
|
||||
break;
|
||||
}
|
||||
case 480:
|
||||
{
|
||||
SendServerQuit(480);
|
||||
break;
|
||||
}
|
||||
case 420:
|
||||
{
|
||||
SendServerQuit(420);
|
||||
break;
|
||||
}
|
||||
case 360:
|
||||
{
|
||||
SendServerQuit(360);
|
||||
break;
|
||||
}
|
||||
case 300:
|
||||
{
|
||||
SendServerQuit(300);
|
||||
break;
|
||||
}
|
||||
case 240:
|
||||
{
|
||||
SendServerQuit(240);
|
||||
break;
|
||||
}
|
||||
case 180:
|
||||
{
|
||||
SendServerQuit(180);
|
||||
break;
|
||||
}
|
||||
case 120:
|
||||
{
|
||||
SendServerQuit(120);
|
||||
break;
|
||||
}
|
||||
case 60:
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_DOWN); // avoids new players from logging in
|
||||
SendServerQuit(60);
|
||||
break;
|
||||
}
|
||||
case 30:
|
||||
{
|
||||
SendServerQuit(30);
|
||||
break;
|
||||
}
|
||||
case 10:
|
||||
{
|
||||
SendServerQuit(10);
|
||||
break;
|
||||
}
|
||||
case 5:
|
||||
{
|
||||
SendServerQuit(5);
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
SendServerQuit(4);
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
SendServerQuit(3);
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
SendServerQuit(2);
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
SendServerQuit(1);
|
||||
break;
|
||||
}
|
||||
SendServerQuit(_secondsShut);
|
||||
}
|
||||
|
||||
// Prevent players from logging in.
|
||||
if ((_secondsShut <= 60) && (LoginServerThread.getInstance().getServerStatus() != ServerStatus.STATUS_DOWN))
|
||||
{
|
||||
LoginServerThread.getInstance().setServerStatus(ServerStatus.STATUS_DOWN);
|
||||
}
|
||||
|
||||
_secondsShut--;
|
||||
|
||||
final int delay = 1000; // milliseconds
|
||||
Thread.sleep(delay);
|
||||
|
||||
if (_shutdownMode == ABORT)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
|
@ -39,6 +39,7 @@ import org.l2jmobius.commons.database.DatabaseFactory;
|
||||
import org.l2jmobius.commons.util.IPSubnet;
|
||||
import org.l2jmobius.commons.util.IXmlReader;
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
import org.l2jmobius.loginserver.network.LoginClient;
|
||||
import org.l2jmobius.loginserver.network.gameserverpackets.ServerStatus;
|
||||
|
||||
/**
|
||||
@ -480,6 +481,24 @@ public class GameServerTable implements IXmlReader
|
||||
return _gst.getPlayerCount();
|
||||
}
|
||||
|
||||
public boolean canLogin(LoginClient client)
|
||||
{
|
||||
// DOWN status doesn't allow anyone to login.
|
||||
if (_status == ServerStatus.STATUS_DOWN)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// GM_ONLY status or full server only allows superior access levels accounts to login.
|
||||
if ((_status == ServerStatus.STATUS_GM_ONLY) || (getCurrentPlayerCount() >= getMaxPlayers()))
|
||||
{
|
||||
return client.getAccessLevel() > 0;
|
||||
}
|
||||
|
||||
// Otherwise, any positive access level account can login.
|
||||
return client.getAccessLevel() >= 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the external host.
|
||||
* @return the external host
|
||||
|
@ -46,7 +46,6 @@ import org.l2jmobius.commons.util.crypt.ScrambledKeyPair;
|
||||
import org.l2jmobius.loginserver.GameServerTable.GameServerInfo;
|
||||
import org.l2jmobius.loginserver.model.data.AccountInfo;
|
||||
import org.l2jmobius.loginserver.network.LoginClient;
|
||||
import org.l2jmobius.loginserver.network.gameserverpackets.ServerStatus;
|
||||
import org.l2jmobius.loginserver.network.serverpackets.LoginFail.LoginFailReason;
|
||||
|
||||
public class LoginController
|
||||
@ -398,11 +397,9 @@ public class LoginController
|
||||
public boolean isLoginPossible(LoginClient client, int serverId)
|
||||
{
|
||||
final GameServerInfo gsi = GameServerTable.getInstance().getRegisteredGameServerById(serverId);
|
||||
final int access = client.getAccessLevel();
|
||||
if ((gsi != null) && gsi.isAuthed())
|
||||
{
|
||||
final boolean loginOk = ((gsi.getCurrentPlayerCount() < gsi.getMaxPlayers()) && (gsi.getStatus() != ServerStatus.STATUS_GM_ONLY)) || (access > 0);
|
||||
|
||||
final boolean loginOk = gsi.canLogin(client);
|
||||
if (loginOk && (client.getLastServer() != serverId))
|
||||
{
|
||||
try (Connection con = DatabaseFactory.getConnection();
|
||||
|
@ -105,7 +105,7 @@ public class ServerList implements IOutgoingPacket
|
||||
_ageLimit = 0;
|
||||
_brackets = gsi.isShowingBrackets();
|
||||
// If server GM-only - show status only to GMs
|
||||
_status = gsi.getStatus() != ServerStatus.STATUS_GM_ONLY ? gsi.getStatus() : client.getAccessLevel() > 0 ? gsi.getStatus() : ServerStatus.STATUS_DOWN;
|
||||
_status = (client.getAccessLevel() < 0) || ((gsi.getStatus() == ServerStatus.STATUS_GM_ONLY) && (client.getAccessLevel() <= 0)) ? ServerStatus.STATUS_DOWN : gsi.getStatus();
|
||||
_serverId = gsi.getId();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user