/// /// /// class ActionRetrace extends Action { public static check = new Rulebook("Check Retracing"); public static carry = new Rulebook("Carry out Retracing"); public constructor (actor : Thing, ...nouns : Array) { super(actor, ...nouns); this.requiresNoun = false; this.requiresVisibility = false; this.requiresTurn = false; } /** * Needs to return a string explaining what the player will do if he does this action. * For instance, ActionTaking should return something like return "take " + this.nouns[0].getName(), * which would read as "take thing". * remember that things implement PRINTABLE interface, so you can get their names. * @returns {string} */ public getCommandText () { let name; if (typeof this.getNoun(0) == "number") { name = DirectionNames[Direction[this.getNoun(0)]]; } else if (this.getNoun(0) instanceof Room) { name = ( this.getNoun(0)).getPrintedName(); } return "think about how to get to " + name; } } ActionRetrace.check.addRule(new Rule({ firstPriority : Rule.PRIORITY_HIGHEST, priority : Rule.PRIORITY_HIGH, name : "Change Room to Direction", code : (rulebook : RulebookRunner) => { let action = rulebook.noun; // Someone asked for a room... if (action.getNoun(0) instanceof Room) { let actor = action.actor; let cRoom = actor.getRoom(); if (cRoom == undefined) { return false; } let dRoom = action.getNoun(0); if (cRoom == dRoom) { if (actor.isPlayer()) { action.say.add("You are already there!"); } action.stop(); return false; } let code; if (actor == WorldState.player) { code = (room : Room) => { return WorldState.isRoomRemembered(room); } } let direction = cRoom.bestDirectionTo(dRoom, code); if (direction == undefined) { if (actor.isPlayer()) { action.say.add("You don't remember how to get there."); } return false; } else { action.setNoun(0, direction); } } } })); ActionRetrace.carry.addRule(new Rule({ name : "Retracing - Find Direction", code : (rulebook : RulebookRunner) => { let action = rulebook.noun; action.say.add("To get there, you should go " + DirectionNames[Direction[action.getNoun(0)]] + "."); } }));