diff --git a/src/objects.rs b/src/objects.rs index 98a3391..d5c7205 100644 --- a/src/objects.rs +++ b/src/objects.rs @@ -77,3 +77,15 @@ pub fn get_salidas_here(pegatina: String, nome: String) -> Result Result { + use crate::schema::object::dsl::*; + let conn = &mut establish_connection(); + object + .filter(tipo.eq("salida")) + .filter(location.eq(salida_actual.destino.unwrap())) + .filter(destino.eq(salida_actual.location)) + .first(conn) +} diff --git a/src/player.rs b/src/player.rs index 878041c..bf90582 100644 --- a/src/player.rs +++ b/src/player.rs @@ -1,8 +1,8 @@ use crate::database::establish_connection; -use crate::models::Player; +use crate::models::{Player, RObject}; use crate::npc::get_npc_here; use crate::objects::{ - get_object_here, get_objects, update_object_conditions, update_object_location, + get_object_here, get_objects, update_object_conditions, update_object_location, get_salida_opuesta, }; use diesel::prelude::*; use rand::Rng; @@ -181,45 +181,56 @@ pub fn execute_kill(player: &mut Player, nombre: &str) -> String { //execute_open cambia a condición 'close' a 'open' de un obxeto nesta sala polo nome pub fn execute_close(player: &mut Player, nombre: &str) -> String { - let mut output = String::from(""); + let output:String; let location = &player.location; let objeto = get_object_here(location.to_string(), nombre.to_string()); if objeto.is_ok() { - let mut obj = objeto.unwrap(); // println!("{:?}", obj); - + // let obj = objeto.as_ref().unwrap(); + let mut obj = objeto.unwrap(); if obj.tipo == "salida" { - if obj.condiciones.len() > 0 { - for (pos, condicion) in obj.condiciones.iter().enumerate() { - if condicion.as_ref().unwrap() == "open" { - // actualizar a salida en sentido contrario - // implementar get_salida_opuesta() para actualizar o sentido contario tamén + // cerrando en un sentido + cerrando(&mut obj); + + // cerrando no outro sentido + let mut salida_opuesta = get_salida_opuesta(obj).unwrap(); + output = cerrando(&mut salida_opuesta); - obj.condiciones[pos] = Some("closed".to_string()); // cambia 'open' por 'closed' - let res = update_object_conditions(obj.tag, obj.condiciones); - if res.is_ok() && res.unwrap() > 0 { - output = String::from("Ahora está cerrada."); - } else { - output = String::from("No se pudo cerrar."); - } - break; - } else if condicion.as_ref().unwrap() == "closed" { - output = String::from("Ya está cerrada."); - break; - } else { - output = String::from("No es necesario."); - } - } - } else { - output = String::from("No es necesario."); - } } else { // é un item output = String::from("No se puede abrir."); } + } else { output = String::from("No se encuentra aquí.") } output } + +pub fn cerrando(salida: &mut RObject) -> String { + let mut output = String::from(""); + // si ten condiciós, recorrelas e cambiar open por closed + if salida.condiciones.len() > 0 { + for (pos, condicion) in salida.condiciones.iter().enumerate() { + if condicion.as_ref().unwrap() == "open" { + salida.condiciones[pos] = Some("closed".to_string()); // cambia 'open' por 'closed' + let res = update_object_conditions(salida.tag.clone(), salida.condiciones.clone()); + if res.is_ok() && res.unwrap() > 0 { + output = String::from("Ahora está cerrada."); + } else { + output = String::from("No se pudo cerrar."); + } + break; + } else if condicion.as_ref().unwrap() == "closed" { + output = String::from("Ya está cerrada."); + break; + } else { + output = String::from("No es necesario."); + } + } + } else { + output = String::from("No es necesario."); + } + output +}