diff --git a/src/java/com/threerings/parlor/game/GameController.java b/src/java/com/threerings/parlor/game/GameController.java index dd971d1ac..3449017b0 100644 --- a/src/java/com/threerings/parlor/game/GameController.java +++ b/src/java/com/threerings/parlor/game/GameController.java @@ -28,6 +28,7 @@ import com.threerings.presents.dobj.AttributeChangedEvent; import com.threerings.crowd.client.PlaceController; import com.threerings.crowd.client.PlaceControllerDelegate; +import com.threerings.crowd.data.BodyObject; import com.threerings.crowd.data.PlaceConfig; import com.threerings.crowd.data.PlaceObject; import com.threerings.crowd.util.CrowdContext; @@ -35,6 +36,8 @@ import com.threerings.crowd.util.CrowdContext; import com.threerings.parlor.Log; import com.threerings.parlor.util.ParlorContext; +import com.threerings.util.Name; + /** * The game controller manages the flow and control of a game on the * client side. This class serves as the root of a hierarchy of controller @@ -93,13 +96,18 @@ public abstract class GameController extends PlaceController // runnable here that will let the game manager know that we're // ready on the next pass through the distributed event loop Log.info("Entering game " + _gobj.which() + "."); - _ctx.getClient().getInvoker().invokeLater(new Runnable() { - public void run () { - // finally let the game manager know that we're ready to roll - Log.info("Reporting ready " + _gobj.which() + "."); - _gobj.gameService.playerReady(_ctx.getClient()); - } - }); + Name username = + ((BodyObject)_ctx.getClient().getClientObject()).username; + if (_gobj.getPlayerIndex(username) != -1) { + _ctx.getClient().getInvoker().invokeLater(new Runnable() { + public void run () { + // finally let the game manager know that we're ready + // to roll + Log.info("Reporting ready " + _gobj.which() + "."); + _gobj.gameService.playerReady(_ctx.getClient()); + } + }); + } } /**