Skip to content

Lanzando acciones programáticamente

Baltasar García Perez-Schofield edited this page May 3, 2023 · 1 revision

Alguna vez es necesario llevar a cabo una acción determinada. Esto puede hacerse al más alto nivel, es decir, indicando fi.js una acción para que la lleve a cabo como si hubiese sido tecleada por el jugador, o llamando al método exe() de una acción determinada. La ventaja del primer método es que se llevan a cabo todas las comprobaciones por nosotros, teniendo en cuenta que quizás la acción no se puede llevar a cabo. En el segundo método no cabe duda de que tenemos el mayor control posible.

En el siguiente ejemplo, se coge una llave y se hace un inventario automático cuando se encuentra en un cajón.

const objCajon = ctrl.creaObj(...

objCajon.preOpen = function() {
    let toret = "Pues no hay nada más.";

    if ( ctrl.locs.limbo.has( objLlave ) ) {
        toret = "¡Has encontrado algo!";
        objLlave.moveTo( ctrl.personas.getPlayer() );
        parser.parse( "inventario" );
    }
    
    return toret;
}

En el siguiente ejemplo, se intercepta la acción go (que siempre recibe la localidad actual), de forma que no se pueda avanzar hacia el norte hasta que no se haya eliminado una roca.

const locPasaje = ctrl.creaLoc(...
locPasaje.preGo = function() {
    const goAction = actions.getAction( "go" );
    let toret = "Por ahí no.";

    if ( parser.sentence.term1 == "norte" ) {
        if ( this.has( objRoca ) ) {
            toret = "Una gran roca te impide el paso.";
        } else {
            toret = goAction.exe( parser.sentence );
        }
    } else {
        toret = goAction.exe( parser.sentence );
    }

    return toret;
}
Clone this wiki locally