comando cerrar nos dous sentidos

This commit is contained in:
serxoz 2022-09-26 17:31:34 +02:00
parent 874fc0356a
commit 9c0dffe023
2 changed files with 51 additions and 28 deletions

View File

@ -77,3 +77,15 @@ pub fn get_salidas_here(pegatina: String, nome: String) -> Result<RObject, diese
.filter(nombre.eq(nome))
.first(conn)
}
//get_salida_opuesta trae a salida opuesta á que se indica
// a salida opuesta ten como destino o location da actual e o seu location é o destino da actual
pub fn get_salida_opuesta(salida_actual: RObject) -> Result<RObject, diesel::result::Error> {
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)
}

View File

@ -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
}