Prevent players from logging in during server shutdown.

Contributed by Sahar.
This commit is contained in:
MobiusDevelopment 2019-11-02 13:30:53 +00:00
parent 8861770e73
commit 003558ce66
85 changed files with 748 additions and 1292 deletions

View File

@ -709,6 +709,11 @@ public class LoginServerThread extends Thread
}
}
public int getServerStatus()
{
return _status;
}
/**
* Gets the status string.
* @return the status string

View File

@ -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)

View File

@ -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

View File

@ -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();

View File

@ -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();
}
}

View File

@ -709,6 +709,11 @@ public class LoginServerThread extends Thread
}
}
public int getServerStatus()
{
return _status;
}
/**
* Gets the status string.
* @return the status string

View File

@ -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)

View File

@ -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

View File

@ -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();

View File

@ -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();
}
}

View File

@ -712,6 +712,11 @@ public class LoginServerThread extends Thread
}
}
public int getServerStatus()
{
return _status;
}
/**
* Gets the status string.
* @return the status string

View File

@ -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)

View File

@ -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

View File

@ -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();

View File

@ -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();
}
}

View File

@ -712,6 +712,11 @@ public class LoginServerThread extends Thread
}
}
public int getServerStatus()
{
return _status;
}
/**
* Gets the status string.
* @return the status string

View File

@ -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)

View File

@ -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

View File

@ -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();

View File

@ -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();
}
}

View File

@ -712,6 +712,11 @@ public class LoginServerThread extends Thread
}
}
public int getServerStatus()
{
return _status;
}
/**
* Gets the status string.
* @return the status string

View File

@ -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)

View File

@ -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

View File

@ -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();

View File

@ -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();
}
}

View File

@ -712,6 +712,11 @@ public class LoginServerThread extends Thread
}
}
public int getServerStatus()
{
return _status;
}
/**
* Gets the status string.
* @return the status string

View File

@ -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)

View File

@ -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

View File

@ -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();

View File

@ -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();
}
}

View File

@ -712,6 +712,11 @@ public class LoginServerThread extends Thread
}
}
public int getServerStatus()
{
return _status;
}
/**
* Gets the status string.
* @return the status string

View File

@ -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)

View File

@ -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

View File

@ -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();

View File

@ -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();
}
}

View File

@ -712,6 +712,11 @@ public class LoginServerThread extends Thread
}
}
public int getServerStatus()
{
return _status;
}
/**
* Gets the status string.
* @return the status string

View File

@ -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)

View File

@ -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

View File

@ -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();

View File

@ -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();
}
}

View File

@ -711,6 +711,11 @@ public class LoginServerThread extends Thread
}
}
public int getServerStatus()
{
return _status;
}
/**
* Gets the status string.
* @return the status string

View File

@ -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)

View File

@ -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

View File

@ -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();

View File

@ -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();
}
}

View File

@ -711,6 +711,11 @@ public class LoginServerThread extends Thread
}
}
public int getServerStatus()
{
return _status;
}
/**
* Gets the status string.
* @return the status string

View File

@ -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)

View File

@ -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

View File

@ -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();

View File

@ -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();
}
}

View File

@ -712,6 +712,11 @@ public class LoginServerThread extends Thread
}
}
public int getServerStatus()
{
return _status;
}
/**
* Gets the status string.
* @return the status string

View File

@ -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)

View File

@ -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

View File

@ -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();

View File

@ -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();
}
}

View File

@ -712,6 +712,11 @@ public class LoginServerThread extends Thread
}
}
public int getServerStatus()
{
return _status;
}
/**
* Gets the status string.
* @return the status string

View File

@ -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)

View File

@ -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

View File

@ -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();

View File

@ -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();
}
}

View File

@ -712,6 +712,11 @@ public class LoginServerThread extends Thread
}
}
public int getServerStatus()
{
return _status;
}
/**
* Gets the status string.
* @return the status string

View File

@ -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)

View File

@ -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

View File

@ -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();

View File

@ -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();
}
}

View File

@ -712,6 +712,11 @@ public class LoginServerThread extends Thread
}
}
public int getServerStatus()
{
return _status;
}
/**
* Gets the status string.
* @return the status string

View File

@ -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)

View File

@ -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

View File

@ -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();

View File

@ -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();
}
}

View File

@ -712,6 +712,11 @@ public class LoginServerThread extends Thread
}
}
public int getServerStatus()
{
return _status;
}
/**
* Gets the status string.
* @return the status string

View File

@ -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)

View File

@ -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

View File

@ -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();

View File

@ -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();
}
}

View File

@ -712,6 +712,11 @@ public class LoginServerThread extends Thread
}
}
public int getServerStatus()
{
return _status;
}
/**
* Gets the status string.
* @return the status string

View File

@ -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)

View File

@ -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

View File

@ -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();

View File

@ -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();
}
}

View File

@ -712,6 +712,11 @@ public class LoginServerThread extends Thread
}
}
public int getServerStatus()
{
return _status;
}
/**
* Gets the status string.
* @return the status string

View File

@ -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)

View File

@ -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

View File

@ -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();

View File

@ -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();
}
}