empezando coa acción 'abrir'

This commit is contained in:
serxoz 2022-09-24 21:08:17 +02:00
parent 4d2bcb634a
commit f8bc805dce
5 changed files with 44 additions and 4 deletions

View File

@ -3,8 +3,8 @@ INSERT INTO object
VALUES VALUES
('o0', 'item', 'palanca', 'Trozo de metal, servirá como palanca', '0', 0, NULL, '{}'), ('o0', 'item', 'palanca', 'Trozo de metal, servirá como palanca', '0', 0, NULL, '{}'),
('o1', 'item', 'calmantes', 'Calmantes, sirven para el dolor', '2', 0, NULL, '{}'), ('o1', 'item', 'calmantes', 'Calmantes, sirven para el dolor', '2', 0, NULL, '{}'),
('s0sn', 'salida', 'norte', 'Puerta automática.', '0', 0, '1', '{"open"}'), ('s0sn', 'salida', 'norte', 'Puerta automática.', '0', 0, '1', '{"open", "foo"}'),
('s1ss', 'salida', 'sur', 'Puerta automática.', '1', 0, '0', '{"open"}'), ('s1ss', 'salida', 'sur', 'Puerta automática.', '1', 0, '0', '{"open", "foo"}'),
('s1se', 'salida', 'este', 'Pasillo.', '1', 0, '2', '{}'), ('s1se', 'salida', 'este', 'Pasillo.', '1', 0, '2', '{}'),
('s2so', 'salida', 'oeste', 'Pasillo.', '2', 0, '1', '{}'); ('s2so', 'salida', 'oeste', 'Pasillo.', '2', 0, '1', '{}');

View File

@ -10,7 +10,7 @@ pub struct RLocation {
pub descripcion: String, pub descripcion: String,
} }
#[derive(Queryable, Insertable)] #[derive(Queryable, Insertable, Debug)]
#[diesel(table_name = object)] #[diesel(table_name = object)]
#[diesel(primary_key(tag))] #[diesel(primary_key(tag))]
pub struct RObject { pub struct RObject {

View File

@ -2,7 +2,6 @@ use crate::models::RObject;
use diesel::prelude::*; use diesel::prelude::*;
use crate::database::establish_connection; use crate::database::establish_connection;
//get_object trae da base de datos un obxeto pola sua pegatina //get_object trae da base de datos un obxeto pola sua pegatina
pub fn get_object(pegatina: String) -> Result<RObject, diesel::result::Error> { pub fn get_object(pegatina: String) -> Result<RObject, diesel::result::Error> {
use crate::schema::object::dsl::*; use crate::schema::object::dsl::*;
@ -63,3 +62,4 @@ pub fn get_salidas_here(pegatina: String, nome: String) -> Result<RObject, diese
.filter(nombre.eq(nome)) .filter(nombre.eq(nome))
.first(conn) .first(conn)
} }

View File

@ -173,3 +173,42 @@ pub fn execute_kill(player: &mut Player, nombre: &str) -> String {
output output
} }
//execute_open cambia a condición 'close' a 'open' de un obxeto nesta sala polo nome
pub fn execute_open(player: &mut Player, nombre: &str) -> String {
let mut output = String::from("");
let location = &player.location;
let objeto = get_object_here(location.to_string(), nombre.to_string());
if objeto.is_ok() {
let obj = objeto.unwrap();
// println!("{:?}", obj);
if obj.tipo == "salida" {
for condicion in obj.condiciones {
if condicion.as_ref().unwrap() == "open" {
output = String::from("Ya está abierta.");
break;
} else if condicion.as_ref().unwrap() == "closed" {
// está cerrada, actualizar a open
// e actualizar a salida en sentido contrario
// implementar actualizar_condiciones()
// implementar get_salida_opuesta()
output = String::from("Está cerrada.");
break;
} else {
output = String::from("");
}
}
} else {
// é un item
output = String::from("No se puede abrir.");
}
} else {
output = String::from("No se encuentra aquí.")
}
output
}

View File

@ -106,6 +106,7 @@ pub fn update_state(player: &mut Player, command: &Command) -> String {
"coger" => output = execute_pick(player, command.noun.as_str()), "coger" => output = execute_pick(player, command.noun.as_str()),
"tirar" => output = execute_drop(player, command.noun.as_str()), "tirar" => output = execute_drop(player, command.noun.as_str()),
"matar" => output = execute_kill(player, command.noun.as_str()), "matar" => output = execute_kill(player, command.noun.as_str()),
"abrir" => output = execute_open(player, command.noun.as_str()),
_ => output = format!("No se como hacer eso."), _ => output = format!("No se como hacer eso."),
} }