From f2a9f7ed0d16cf506bfdb185e87c5ecdccbc37ed Mon Sep 17 00:00:00 2001 From: Michael Bayne Date: Sat, 12 Mar 2005 10:08:02 +0000 Subject: [PATCH] Further AI handling improvements. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3401 542714f4-19e9-0310-aa3c-eee0fc999fb1 --- src/java/com/threerings/parlor/data/Table.java | 11 +++++++++-- .../com/threerings/parlor/game/data/GameConfig.java | 2 +- .../threerings/parlor/game/server/GameManager.java | 7 +++---- .../com/threerings/parlor/server/TableManager.java | 9 +++++---- 4 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/java/com/threerings/parlor/data/Table.java b/src/java/com/threerings/parlor/data/Table.java index 467f0dcca..09c746880 100644 --- a/src/java/com/threerings/parlor/data/Table.java +++ b/src/java/com/threerings/parlor/data/Table.java @@ -89,6 +89,13 @@ public class Table // make room for the maximum number of players occupants = new Name[_tconfig.getMaximumPlayers()]; bodyOids = new int[occupants.length]; + + // fill in information on the AIs + int acount = (config.ais == null) ? 0 : config.ais.length; + for (int ii = 0; ii < acount; ii++) { + // TODO: handle this naming business better + occupants[ii] = new Name("AI " + (ii+1)); + } } /** @@ -265,8 +272,8 @@ public class Table */ public boolean isEmpty () { - for (int i = 0; i < occupants.length; i++) { - if (occupants[i] != null) { + for (int i = 0; i < bodyOids.length; i++) { + if (bodyOids[i] != 0) { return false; } } diff --git a/src/java/com/threerings/parlor/game/data/GameConfig.java b/src/java/com/threerings/parlor/game/data/GameConfig.java index 017a7995f..627159211 100644 --- a/src/java/com/threerings/parlor/game/data/GameConfig.java +++ b/src/java/com/threerings/parlor/game/data/GameConfig.java @@ -56,7 +56,7 @@ public abstract class GameConfig extends PlaceConfig implements Cloneable * players should be null and slots with AIs should contain * configuration for those AIs. A null array indicates no use of AIs * at all. */ - public GameAI[] ais; + public GameAI[] ais = new GameAI[0]; /** * Returns the message bundle identifier for the bundle that should be diff --git a/src/java/com/threerings/parlor/game/server/GameManager.java b/src/java/com/threerings/parlor/game/server/GameManager.java index e5b26d155..c99e58e69 100644 --- a/src/java/com/threerings/parlor/game/server/GameManager.java +++ b/src/java/com/threerings/parlor/game/server/GameManager.java @@ -87,8 +87,7 @@ public class GameManager extends PlaceManager } // configure our AIs - int aicount = (_gameconfig.ais == null) ? 0 : _gameconfig.ais.length; - for (int ii = 0; ii < aicount; ii++) { + for (int ii = 0; ii < _gameconfig.ais.length; ii++) { if (_gameconfig.ais[ii] != null) { setAI(ii, _gameconfig.ais[ii]); } @@ -446,8 +445,8 @@ public class GameManager extends PlaceManager // let the players of this game know that we're ready to roll (if // we have a specific set of players) for (int ii = 0; ii < getPlayerSlots(); ii++) { - // skip non-existent players - if (!_gameobj.isOccupiedPlayer(ii)) { + // skip non-existent players and AIs + if (!_gameobj.isOccupiedPlayer(ii) || isAI(ii)) { continue; } diff --git a/src/java/com/threerings/parlor/server/TableManager.java b/src/java/com/threerings/parlor/server/TableManager.java index 2d4c12e73..0395b7ec1 100644 --- a/src/java/com/threerings/parlor/server/TableManager.java +++ b/src/java/com/threerings/parlor/server/TableManager.java @@ -116,9 +116,10 @@ public class TableManager // create a brand spanking new table Table table = new Table(_plobj.getOid(), config); - // stick the creator into position zero + // stick the creator into the first non-AI position + int cpos = (config.ais == null) ? 0 : config.ais.length; String error = - table.setOccupant(0, creator.username, creator.getOid()); + table.setOccupant(cpos, creator.username, creator.getOid()); if (error != null) { Log.warning("Unable to add creator to position zero of " + "table!? [table=" + table + ", creator=" + creator + @@ -275,9 +276,9 @@ public class TableManager }; try { CrowdServer.plreg.createPlace(table.config, obs); - } catch (InstantiationException ie) { + } catch (Throwable t) { Log.warning("Failed to create manager for game " + - "[config=" + table.config + "]: " + ie); + "[config=" + table.config + "]: " + t); throw new InvocationException(INTERNAL_ERROR); } }