mirror of
https://github.com/correl/mage.git
synced 2024-12-01 03:00:09 +00:00
* Server: fixed that multiplayer game can be closed on "1x human + 1x AI" remain (see #6178);
This commit is contained in:
parent
3da525520c
commit
e488997124
2 changed files with 21 additions and 12 deletions
|
@ -48,7 +48,7 @@ public class TableController {
|
||||||
private final UUID chatId;
|
private final UUID chatId;
|
||||||
private final String controllerName;
|
private final String controllerName;
|
||||||
private final Table table;
|
private final Table table;
|
||||||
private final ConcurrentHashMap<UUID, UUID> userPlayerMap = new ConcurrentHashMap<>();
|
private final ConcurrentHashMap<UUID, UUID> userPlayerMap = new ConcurrentHashMap<>(); // human players only, use table.seats for AI
|
||||||
|
|
||||||
private Match match;
|
private Match match;
|
||||||
private MatchOptions options;
|
private MatchOptions options;
|
||||||
|
@ -985,10 +985,14 @@ public class TableController {
|
||||||
// return false;
|
// return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// check for active players
|
// check for active players
|
||||||
int validHumanPlayers = 0;
|
int validHumanPlayers = 0;
|
||||||
|
int validAIPlayers = 0;
|
||||||
int aiPlayers = 0;
|
int aiPlayers = 0;
|
||||||
int humanPlayers = 0;
|
int humanPlayers = 0;
|
||||||
|
|
||||||
|
// check humans
|
||||||
for (Map.Entry<UUID, UUID> userPlayerEntry : userPlayerMap.entrySet()) {
|
for (Map.Entry<UUID, UUID> userPlayerEntry : userPlayerMap.entrySet()) {
|
||||||
MatchPlayer matchPlayer = match.getPlayer(userPlayerEntry.getValue());
|
MatchPlayer matchPlayer = match.getPlayer(userPlayerEntry.getValue());
|
||||||
if (matchPlayer == null) {
|
if (matchPlayer == null) {
|
||||||
|
@ -1016,12 +1020,21 @@ public class TableController {
|
||||||
// user exits on the server and match player has not quit -> player is valid
|
// user exits on the server and match player has not quit -> player is valid
|
||||||
validHumanPlayers++;
|
validHumanPlayers++;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
aiPlayers++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// if at least 2 human players are valid (multiplayer) or all human players are valid the table is valid or it's an AI match
|
|
||||||
return validHumanPlayers >= 2 || validHumanPlayers == humanPlayers || aiPlayers > 1;
|
// check AI
|
||||||
|
for (MatchPlayer matchPlayer : match.getPlayers()) {
|
||||||
|
if (!matchPlayer.getPlayer().isHuman()) {
|
||||||
|
aiPlayers++;
|
||||||
|
if (matchPlayer.getPlayer().isInGame()) {
|
||||||
|
validAIPlayers++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// table must contain minimum two active players
|
||||||
|
return (validAIPlayers + validHumanPlayers) >= 2;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,12 +47,8 @@ public class TableManagerImpl implements TableManager {
|
||||||
private final ConcurrentHashMap<UUID, Table> tables = new ConcurrentHashMap<>();
|
private final ConcurrentHashMap<UUID, Table> tables = new ConcurrentHashMap<>();
|
||||||
private final ReadWriteLock tablesLock = new ReentrantReadWriteLock();
|
private final ReadWriteLock tablesLock = new ReentrantReadWriteLock();
|
||||||
|
|
||||||
/**
|
// defines how often checking process should be run on server (in minutes)
|
||||||
* Defines how often checking process should be run on server.
|
private static final int TABLE_HEALTH_CHECK_TIMEOUT_MINS = 10;
|
||||||
* <p>
|
|
||||||
* In minutes.
|
|
||||||
*/
|
|
||||||
private static final int EXPIRE_CHECK_PERIOD = 10;
|
|
||||||
|
|
||||||
public TableManagerImpl(ManagerFactory managerFactory) {
|
public TableManagerImpl(ManagerFactory managerFactory) {
|
||||||
this.managerFactory = managerFactory;
|
this.managerFactory = managerFactory;
|
||||||
|
@ -66,7 +62,7 @@ public class TableManagerImpl implements TableManager {
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
logger.fatal("Check table health state job error:", ex);
|
logger.fatal("Check table health state job error:", ex);
|
||||||
}
|
}
|
||||||
}, EXPIRE_CHECK_PERIOD, EXPIRE_CHECK_PERIOD, TimeUnit.MINUTES);
|
}, TABLE_HEALTH_CHECK_TIMEOUT_MINS, TABLE_HEALTH_CHECK_TIMEOUT_MINS, TimeUnit.MINUTES);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in a new issue