function go_to($exit) { $obj = $this->exits; // Si no hay una salida definida... if (!property_exists($obj, $exit)) { return array('goto', 'FAIL'); } // Hay una salida definida... $data = $obj->{$exit}; // ** Simple format if (is_string($data)) { return $this->check_visited_and_goto($data); } // ** Complex format if (property_exists($data, 'required')) { $required = new Required(); if ($required->check($data->required)) { return $this->check_visited_and_goto($data->target); } // No se cumplen requisitos if (property_exists($data, 'else')) { return $this->check_visited_and_goto($data->else); } else { return array('goto', $data->excuse); } } if (property_exists($data, 'target')) { return $this->check_visited_and_goto($data->target); } // BAD FORMAT JSON }
function take($words) { //$words = find_synonyms($words); $obj = load(ITEMFILE, $words); // If object not exist if ($obj === NULL) { return array("coger", "FAIL"); } $objinv = load(USERFILE, 'inventory', $words); // Si el objeto está en la room inicial, lo procesa if ($objinv == NULL && $obj->room == CURRENT_ROOM) { // Ya lo tengo if ($objinv == "1") { return array("coger", __('INVENTORY_ITEM_ALREADY')); } // ** Complex format // No hay restricciones if (!property_exists($obj, 'required')) { if (!$objinv) { $this->check_optional_param($obj); save(USERFILE, 'inventory', $words, "1"); return array("coger", $obj->message); } return array("coger", "FAIL"); } // ¿Se cumplen las restricciones? $required = new Required(); if ($required->check($obj->required)) { // Only first time if (!$objinv) { $this->check_optional_param($obj); save(USERFILE, 'inventory', $words, "1"); return array("coger", $obj->message); } } return array("coger", property_exists($obj, 'excuse') ? $obj->excuse : "FAIL"); } // Caso especial: El objeto se ha dejado en una room (no procesar restricciones) if ($objinv == CURRENT_ROOM) { save(USERFILE, 'inventory', $words, "1"); return array("coger", '-' . $words); } // No se cumplen las restricciones // Si no hay excusa definida => objeto no encontrado return array("coger", "FAIL"); //return (property_exists($obj, 'excuse') ? $obj->excuse : "FAIL"); }
function check() { // typecast fix for reverse order object (???) // (object)array_reverse((array)$this->ends) foreach ((object) $this->ends as $k => $v) { // No se cumplen los requisitos para este final if (property_exists($v, 'required')) { $required = new Required(); if (!$required->check($v->required)) { continue; } } save(USERFILE, 'info', 'end', $k); return TRUE; } return FALSE; // No hay final }