salidas como objetos, preparando para as condiciós aberto/pechado
This commit is contained in:
parent
ca73d8aecd
commit
2223a47167
@ -2,11 +2,5 @@ CREATE TABLE location (
|
||||
tag varchar(100) NOT NULL,
|
||||
nombre varchar(100),
|
||||
descripcion varchar(2048) NOT NULL,
|
||||
salida_norte varchar(100),
|
||||
salida_sur varchar(100),
|
||||
salida_este varchar(100),
|
||||
salida_oeste varchar(100),
|
||||
salida_arriba varchar(100),
|
||||
salida_abajo varchar(100),
|
||||
CONSTRAINT PK_Location PRIMARY KEY (tag)
|
||||
)
|
||||
|
@ -1,6 +1,6 @@
|
||||
INSERT INTO location
|
||||
(tag, nombre, descripcion, salida_norte, salida_sur, salida_este, salida_oeste, salida_arriba, salida_abajo)
|
||||
(tag, nombre, descripcion)
|
||||
VALUES
|
||||
('0', 'Pasillo', 'Estás en un pasillo muy oscuro.\nEscuchas un sonido de alarma en la lejanía.\nApenas puedes ver una luz pulsante al norte.\n\n---\nSalidas: norte', "1", NULL, NULL, NULL, NULL, NULL),
|
||||
('1', 'Puente', 'La única iluminación de esta sala es una pequeña luz pulsante en un panel. Parece el puente de mando. Un humo denso llena la sala irritando tus pulmones. Entre el humo ves una puerta al este tras la cual parece que suena una alarma.\n\n---\nSalidas: este, sur', NULL, "0", "2", NULL, NULL, NULL),
|
||||
('2', 'Vainas', 'De aquí surje el fuerte sonido de alarma que taladra tus tímpanos. Alrededor de la sala ves las vainas criogénicas en las que has estado durmiendo durante el viaje. Todas están vacías!\n\n---\nSalidas: oeste', NULL, NULL, NULL, "1", NULL, NULL);
|
||||
('0', 'Pasillo', 'Estás en un pasillo muy oscuro.\nEscuchas un sonido de alarma en la lejanía.\nApenas puedes ver una luz pulsante al norte.\n'),
|
||||
('1', 'Puente', 'La única iluminación de esta sala es una pequeña luz pulsante en un panel. Parece el puente de mando. Un humo denso llena la sala irritando tus pulmones. Entre el humo ves una puerta al este tras la cual parece que suena una alarma.\n'),
|
||||
('2', 'Vainas', 'De aquí surje el fuerte sonido de alarma que taladra tus tímpanos. Alrededor de la sala ves las vainas criogénicas en las que has estado durmiendo durante el viaje. Todas están vacías!\n');
|
||||
|
@ -1,8 +1,10 @@
|
||||
CREATE TABLE object (
|
||||
tag varchar(100) NOT NULL,
|
||||
tipo varchar(100) NOT NULL,
|
||||
nombre varchar(100) NOT NULL,
|
||||
descripcion varchar(2048) NOT NULL,
|
||||
location varchar(100) NOT NULL,
|
||||
peso int NOT NULL,
|
||||
destino varchar(100),
|
||||
CONSTRAINT PK_Object PRIMARY KEY (tag)
|
||||
)
|
||||
|
@ -1,5 +1,10 @@
|
||||
INSERT INTO object
|
||||
(tag, nombre, descripcion, location, peso)
|
||||
(tag, tipo, nombre, descripcion, location, peso, destino)
|
||||
VALUES
|
||||
('o0', 'palanca', 'Trozo de metal, servirá como palanca', '0', 0),
|
||||
('o1', 'calmantes', 'Calmantes, sirven para el dolor', '2', 0);
|
||||
('o0', 'item', 'palanca', 'Trozo de metal, servirá como palanca', '0', 0, NULL),
|
||||
('o1', 'item', 'calmantes', 'Calmantes, sirven para el dolor', '2', 0, NULL),
|
||||
('s0sn', 'salida', 'salida norte', 'Puerta automática.', '0', 0, '1'),
|
||||
('s1ss', 'salida', 'salida sur', 'Puerta automática.', '1', 0, '0'),
|
||||
('s1se', 'salida', 'salida este', 'Pasillo.', '1', 0, '2'),
|
||||
('s2so', 'salida', 'salida oeste', 'Pasillo.', '2', 0, '1');
|
||||
|
||||
|
@ -8,12 +8,6 @@ pub struct RLocation {
|
||||
pub tag: String,
|
||||
pub nombre: Option<String>,
|
||||
pub descripcion: String,
|
||||
pub salida_norte: Option<String>,
|
||||
pub salida_sur: Option<String>,
|
||||
pub salida_este: Option<String>,
|
||||
pub salida_oeste: Option<String>,
|
||||
pub salida_arriba: Option<String>,
|
||||
pub salida_abajo: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Queryable, Insertable)]
|
||||
@ -21,10 +15,12 @@ pub struct RLocation {
|
||||
#[diesel(primary_key(tag))]
|
||||
pub struct RObject {
|
||||
pub tag: String,
|
||||
pub tipo: String,
|
||||
pub nombre: String,
|
||||
pub descripcion: String,
|
||||
pub location: String,
|
||||
pub peso: i32,
|
||||
pub destino: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Queryable, Insertable, AsChangeset)]
|
||||
|
@ -1,4 +1,4 @@
|
||||
use crate::models::*;
|
||||
use crate::models::RObject;
|
||||
use diesel::prelude::*;
|
||||
use crate::database::establish_connection;
|
||||
|
||||
@ -8,6 +8,7 @@ pub fn get_object(pegatina: String) -> Result<RObject, diesel::result::Error> {
|
||||
use crate::schema::object::dsl::*;
|
||||
let conn = &mut establish_connection();
|
||||
object
|
||||
.filter(tipo.eq("item"))
|
||||
.filter(tag.eq(pegatina))
|
||||
.first(conn)
|
||||
}
|
||||
@ -17,6 +18,7 @@ pub fn get_objects(pegatina: String) -> Result<Vec<RObject>, diesel::result::Err
|
||||
use crate::schema::object::dsl::*;
|
||||
let conn = &mut establish_connection();
|
||||
object
|
||||
.filter(tipo.eq("item"))
|
||||
.filter(location.eq(pegatina))
|
||||
.get_results(conn)
|
||||
}
|
||||
@ -40,3 +42,24 @@ pub fn update_object_location(pegatina: String, new_location: String) -> Result<
|
||||
.set(location.eq(new_location))
|
||||
.execute(conn)
|
||||
}
|
||||
|
||||
// get_salidas trae da base de datos todos os obxetos salida de unha localización
|
||||
pub fn get_salidas(pegatina: String) -> Result<Vec<RObject>, diesel::result::Error> {
|
||||
use crate::schema::object::dsl::*;
|
||||
let conn = &mut establish_connection();
|
||||
object
|
||||
.filter(tipo.eq("salida"))
|
||||
.filter(location.eq(pegatina))
|
||||
.get_results(conn)
|
||||
}
|
||||
|
||||
//get_salidas_here trae da base de datos a salida polo nome e a pegatina da sala actual
|
||||
pub fn get_salidas_here(pegatina: String, nome: String) -> Result<RObject, diesel::result::Error> {
|
||||
use crate::schema::object::dsl::*;
|
||||
let conn = &mut establish_connection();
|
||||
object
|
||||
.filter(tipo.eq("salida"))
|
||||
.filter(location.eq(pegatina))
|
||||
.filter(nombre.eq(nome))
|
||||
.first(conn)
|
||||
}
|
||||
|
@ -42,7 +42,7 @@ pub fn execute_search(player: &mut Player) -> String {
|
||||
let objetos = get_objects(current.to_string());
|
||||
|
||||
if objetos.is_ok() && objetos.as_ref().unwrap().len() > 0 {
|
||||
output = String::from("En esta sala encuentras los siguientes objetos:\n");
|
||||
output = String::from("En esta sala encuentras:\n");
|
||||
for objeto in objetos.unwrap() {
|
||||
let mut nombre = objeto.nombre;
|
||||
nombre.push_str("\n");
|
||||
|
@ -1,4 +1,4 @@
|
||||
use crate::objects::get_object_here;
|
||||
use crate::objects::{get_salidas, get_object_here, get_salidas_here};
|
||||
use crate::npc::{get_npc_here, get_npcs};
|
||||
|
||||
use crate::models::*;
|
||||
@ -15,18 +15,32 @@ pub fn execute_look(player: &mut Player, nombre: &str) -> String {
|
||||
if player_location.as_str() != "" {
|
||||
output = String::from(location.unwrap().descripcion);
|
||||
|
||||
// agregar á salida os npcs que esteñan na sala
|
||||
let npcs = get_npcs(player_location.to_string());
|
||||
// agregar á salida os obxetos que esteñan na sala
|
||||
let salidas = get_salidas(player_location.to_string());
|
||||
|
||||
if npcs.is_ok() && npcs.as_ref().unwrap().len() > 0 {
|
||||
output.push_str("\n---\nTambién ves:\n");
|
||||
for objeto in npcs.unwrap() {
|
||||
if salidas.is_ok() && salidas.as_ref().unwrap().len() > 0 {
|
||||
output.push_str("\nSalidas:\n");
|
||||
for salidas in salidas.unwrap() {
|
||||
let mut nombre = "- ".to_string();
|
||||
nombre.push_str(&objeto.nombre);
|
||||
nombre.push_str(&salidas.nombre);
|
||||
nombre.push_str("\n");
|
||||
output.push_str(&nombre);
|
||||
}
|
||||
}
|
||||
|
||||
// agregar á salida os npcs que esteñan na sala
|
||||
let npcs = get_npcs(player_location.to_string());
|
||||
|
||||
if npcs.is_ok() && npcs.as_ref().unwrap().len() > 0 {
|
||||
output.push_str("\nTambién ves:\n");
|
||||
for npc in npcs.as_ref().unwrap() {
|
||||
let mut nombre = "- ".to_string();
|
||||
nombre.push_str(&npc.nombre);
|
||||
nombre.push_str("\n");
|
||||
output.push_str(&nombre);
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
output = String::from("Navengado el ether!");
|
||||
}
|
||||
@ -55,28 +69,39 @@ pub fn execute_go(player: &mut Player, coord: &str) -> String {
|
||||
let output: String;
|
||||
|
||||
if coord != "" {
|
||||
let tag: String;
|
||||
let player_location = &player.location;
|
||||
let current_location = get_location(player_location.to_string()).unwrap();
|
||||
let nombre: String;
|
||||
|
||||
match coord {
|
||||
"n" => if current_location.salida_norte.is_some() { tag = current_location.salida_norte.unwrap() } else { tag = String::from("")},
|
||||
"e" => if current_location.salida_este.is_some() { tag = current_location.salida_este.unwrap()} else { tag = String::from("")},
|
||||
"s" => if current_location.salida_sur.is_some() { tag = current_location.salida_sur.unwrap()} else { tag = String::from("")},
|
||||
"o" => if current_location.salida_oeste.is_some() { tag = current_location.salida_oeste.unwrap()} else { tag = String::from("")},
|
||||
"norte" => if current_location.salida_norte.is_some() { tag = current_location.salida_norte.unwrap()} else { tag = String::from("")},
|
||||
"este" => if current_location.salida_este.is_some() { tag = current_location.salida_este.unwrap()} else { tag = String::from("")},
|
||||
"sur" => if current_location.salida_sur.is_some() { tag = current_location.salida_sur.unwrap()} else { tag = String::from("")},
|
||||
"oeste" => if current_location.salida_oeste.is_some() { tag = current_location.salida_oeste.unwrap()} else { tag = String::from("")},
|
||||
_ => return String::from("No existe esa dirección.")
|
||||
};
|
||||
"n" => nombre = "salida norte".to_string(),
|
||||
"s" => nombre = "salida sur".to_string(),
|
||||
"e" => nombre = "salida este".to_string(),
|
||||
"o" => nombre = "salida oeste".to_string(),
|
||||
"norte" => nombre = "salida norte".to_string(),
|
||||
"sur" => nombre = "salida sur".to_string(),
|
||||
"este" => nombre = "salida este".to_string(),
|
||||
"oeste" => nombre = "salida oeste".to_string(),
|
||||
"arriba" => nombre = "salida arriba".to_string(),
|
||||
"abajo" => nombre = "salida abajo".to_string(),
|
||||
_ => nombre = "".to_string(),
|
||||
}
|
||||
|
||||
let tag: String;
|
||||
let player_location = &player.location;
|
||||
let salida = get_salidas_here(player_location.to_string(), nombre);
|
||||
if salida.is_ok() {
|
||||
tag = salida.unwrap().destino.unwrap();
|
||||
} else {
|
||||
tag = String::from("");
|
||||
}
|
||||
|
||||
if tag.as_str() != "" {
|
||||
let location = get_location(tag).unwrap();
|
||||
if location.tag == player.location {
|
||||
output = String::from("No te puedes acercar mucho más...");
|
||||
} else {
|
||||
player.location = location.tag;
|
||||
output = location.descripcion;
|
||||
// output = location.descripcion;
|
||||
output = execute_look(player, "sala");
|
||||
}
|
||||
} else {
|
||||
output = String::from("No existe esa salida.");
|
||||
|
@ -5,12 +5,6 @@ diesel::table! {
|
||||
tag -> Varchar,
|
||||
nombre -> Nullable<Varchar>,
|
||||
descripcion -> Varchar,
|
||||
salida_norte -> Nullable<Varchar>,
|
||||
salida_sur -> Nullable<Varchar>,
|
||||
salida_este -> Nullable<Varchar>,
|
||||
salida_oeste -> Nullable<Varchar>,
|
||||
salida_arriba -> Nullable<Varchar>,
|
||||
salida_abajo -> Nullable<Varchar>,
|
||||
}
|
||||
}
|
||||
|
||||
@ -29,10 +23,12 @@ diesel::table! {
|
||||
diesel::table! {
|
||||
object (tag) {
|
||||
tag -> Varchar,
|
||||
tipo -> Varchar,
|
||||
nombre -> Varchar,
|
||||
descripcion -> Varchar,
|
||||
location -> Varchar,
|
||||
peso -> Integer,
|
||||
destino -> Nullable<Varchar>,
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user