87 lines
2.8 KiB
Rust
87 lines
2.8 KiB
Rust
use crate::models::*;
|
|
use diesel::prelude::*;
|
|
use crate::database::establish_connection;
|
|
use crate::player::Player;
|
|
|
|
|
|
//get_object trae da base de datos un obxeto pola sua pegatina
|
|
pub fn get_object(pegatina: String) -> Result<RObject, diesel::result::Error> {
|
|
use crate::schema::object::dsl::*;
|
|
let conn = &mut establish_connection();
|
|
object
|
|
.filter(tag.eq(pegatina))
|
|
.first(conn)
|
|
}
|
|
|
|
// get_objects trae da base de datos todos os obxetos de unha localización
|
|
pub fn get_objects(pegatina: String) -> Result<Vec<RObject>, diesel::result::Error> {
|
|
use crate::schema::object::dsl::*;
|
|
let conn = &mut establish_connection();
|
|
object
|
|
.filter(location.eq(pegatina))
|
|
.get_results(conn)
|
|
}
|
|
|
|
//get_object_here trae da base de datos o obxeto polo nome e a pegatina da sala actual
|
|
pub fn get_object_here(pegatina: String, nome: String) -> Result<RObject, diesel::result::Error> {
|
|
use crate::schema::object::dsl::*;
|
|
let conn = &mut establish_connection();
|
|
object
|
|
.filter(location.eq(pegatina))
|
|
.filter(nombre.eq(nome))
|
|
.first(conn)
|
|
}
|
|
|
|
// actualiza a localización de un obxeto, devolve o número de rows afectados
|
|
pub fn update_object_location(pegatina: String, new_location: String) -> Result<usize, diesel::result::Error> {
|
|
use crate::schema::object::dsl::*;
|
|
println!("{} {}", pegatina, new_location);
|
|
let conn = &mut establish_connection();
|
|
diesel::update(object.filter(tag.eq(pegatina)))
|
|
.set(location.eq(new_location))
|
|
.execute(conn)
|
|
}
|
|
|
|
// execute_search mostra os obxetos na ubicación do xogador
|
|
pub fn execute_search(player: &mut Player) -> String {
|
|
let mut output: String;
|
|
let current = &player.location;
|
|
let objetos = get_objects(current.to_string());
|
|
|
|
if objetos.is_ok() {
|
|
output = String::from("En esta sala encuentras los siguientes objetos:\n");
|
|
for objeto in objetos.unwrap() {
|
|
let mut nombre = objeto.nombre;
|
|
nombre.push_str("\n");
|
|
output.push_str(&nombre);
|
|
}
|
|
} else {
|
|
output = String::from("No encuentras nada en esta sala.")
|
|
}
|
|
|
|
output
|
|
}
|
|
|
|
// execute_pick recolle un obxeto
|
|
pub fn execute_pick(player: &mut Player, nombre: &str) -> String {
|
|
let output: String;
|
|
let location = &player.location;
|
|
let obxeto = get_object_here(location.to_string(), nombre.to_string());
|
|
|
|
if obxeto.is_ok() {
|
|
let res = update_object_location(
|
|
obxeto.as_ref().unwrap().tag.clone(),
|
|
player.tag.to_string());
|
|
|
|
if res.is_ok() && res.unwrap() > 0 {
|
|
output = format!("{} ahora está en tu inventario.", obxeto.unwrap().nombre);
|
|
} else {
|
|
output = format!("Error cogiendo {}.", obxeto.unwrap().nombre);
|
|
}
|
|
} else {
|
|
output = String::from("No encuentro lo que quieres coger.");
|
|
}
|
|
|
|
output
|
|
}
|