comando cerrar nos dous sentidos
This commit is contained in:
parent
874fc0356a
commit
9c0dffe023
@ -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)
|
||||
}
|
||||
|
@ -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,23 +181,41 @@ 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);
|
||||
|
||||
obj.condiciones[pos] = Some("closed".to_string()); // cambia 'open' por 'closed'
|
||||
let res = update_object_conditions(obj.tag, obj.condiciones);
|
||||
// cerrando no outro sentido
|
||||
let mut salida_opuesta = get_salida_opuesta(obj).unwrap();
|
||||
output = cerrando(&mut salida_opuesta);
|
||||
|
||||
} 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 {
|
||||
@ -214,12 +232,5 @@ pub fn execute_close(player: &mut Player, nombre: &str) -> String {
|
||||
} 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
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user