/* ** j###t ########## #### #### ** j###t ########## #### #### ** j###T "###L J###" ** ######P' ########## ######### ** ######k, ########## T######T ** ####~###L #### ** #### q###L ########## .##### ** #### \###L ########## #####" ** ** Class History ** ** Date Name Description ** ---------|------------|----------------------------------------------- ** 21Jul97 subtle created this command ** 29Jul97 exile fixed the "fading into view" message. ** */ package key.commands; import key.*; import java.io.*; import java.util.StringTokenizer; /** * ChangeRoom returns you to the last public room * you were in. It will mainly be used to * leave someone's rooms (including your own) */ public class Join extends Command { public static final AtomicElement[] ELEMENTS = { AtomicElement.construct( ChangeRoom.class, String.class, "leave", AtomicElement.PUBLIC_FIELD, "the message sent to the room when a player leaves" ), AtomicElement.construct( ChangeRoom.class, String.class, "enter", AtomicElement.PUBLIC_FIELD, "the message sent to the room when a player enters" ), AtomicElement.construct( ChangeRoom.class, String.class, "failure", AtomicElement.PUBLIC_FIELD, "the message sent to the player when the move fails" ), AtomicElement.construct( ChangeRoom.class, String.class, "noFind", AtomicElement.PUBLIC_FIELD, "the message sent to the player when the room cannot be found" ) }; public static final AtomicStructure STRUCTURE = new AtomicStructure( Command.STRUCTURE, ELEMENTS ); public String leave = "%o slowly fades from view..."; public String enter = "%o materialises before you..."; public String failure = "But you are already with %t."; public String noFind = "But %g is hiding."; public static final char playerCode = 'o'; public static final char genderCode = 'g'; public static final char targetCode = 't'; public Join() { setKey( "join" ); usage = "<player>"; } public AtomicStructure getDeclaredStructure() { return( STRUCTURE ); } public void run( Player p, StringTokenizer args, String fullLine, CategoryCommand caller, InteractiveConnection ic, Flags flags ) throws IOException { Room current = p.getLocation(); if( !args.hasMoreTokens() ) { usage( ic ); return; } Player in = null; try { in = (Player) getOnlinePlayer( p, ic, args.nextToken() ); } catch( ClassCastException e ) { ic.sendError( "It doesn't make much sense to join more than one person. Pick one." ); return; } if( in != null ) { p.putCode( playerCode, p.getName() ); p.putCode( targetCode, in.getName() ); p.putCode( genderCode, in.heShe() ); Room wanted = null; try { wanted = in.getLocation(); } catch( AccessViolationException e ) { } if( wanted == null ) { String nf; nf = Grammar.substitute( noFind, p.getCodes() ); ic.sendFailure( nf ); return; } if( current == wanted ) { String nf; nf = Grammar.substitute( failure, p.getCodes() ); ic.sendFailure( nf ); } else if( wanted.canMoveInto( p ) ) { String e; String l; e = Grammar.substitute( enter, p.getCodes() ); l = Grammar.substitute( leave, p.getCodes() ); Effect ee = new key.effect.Enter( p, wanted, e ); Effect le = null; if( current != null ) le = new key.effect.Leave( p, current, l ); p.moveTo( wanted, le, ee ); p.roomLook(); } else ic.sendFailure( "You may not use this mode of travel to go there." ); } } }