From 3309624821a9933b11e092e97f0804151d4396e3 Mon Sep 17 00:00:00 2001 From: serxoz Date: Fri, 20 Jan 2023 20:59:12 +0100 Subject: [PATCH] xenerador de Astronaves --- src/main.rs | 4 +- src/views/astronaves.rs | 91 ++++++++++++++++++++++++++++++++++++++++ src/views/mod.rs | 1 + templates/astronave.html | 72 +++++++++++++++++++++++++++++++ templates/personaje.html | 2 +- 5 files changed, 168 insertions(+), 2 deletions(-) create mode 100644 src/views/astronaves.rs create mode 100644 templates/astronave.html diff --git a/src/main.rs b/src/main.rs index 58d234c..c9a9fcf 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,7 @@ pub mod views; use crate::views::personajes::genera_pj; +use crate::views::astronaves::genera_astronave; use axum::{routing::get, Router}; use std::net::SocketAddr; @@ -12,7 +13,8 @@ async fn main() { // routing let app = Router::new() .route("/", get(root)) - .route("/pjs", get(genera_pj)); + .route("/pjs", get(genera_pj)) + .route("/astronaves", get(genera_astronave)); // executase con hyper a través de axum::Server let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); diff --git a/src/views/astronaves.rs b/src/views/astronaves.rs new file mode 100644 index 0000000..f64ff46 --- /dev/null +++ b/src/views/astronaves.rs @@ -0,0 +1,91 @@ +use axum::response::Html; +use serde::Serialize; +use rand::Rng; +use minijinja::render; +use std::fs; + +#[derive(Serialize, Debug)] +struct Astronave { + nombre: String, + cas: i32, + mot: i32, + sis: i32, + escudos: i32, + combustible: i32, + armamento: String, + armadura: i32, + soporte_vital: i32, + peculiaridades: Vec +} + +pub async fn genera_astronave() -> Html { + let sis_val = rand::thread_rng().gen_range(3..19); + let esc_dado1 = rand::thread_rng().gen_range(1..7); + let esc_dado2 = rand::thread_rng().gen_range(1..7); + let esc_dado3 = rand::thread_rng().gen_range(1..7); + + let ast_name= format!("{}{}{}{}{}-{}-{}-{}", + LIST_RUS[rand::thread_rng().gen_range(0..33)], + LIST_RUS[rand::thread_rng().gen_range(0..33)], + LIST_RUS[rand::thread_rng().gen_range(0..33)], + LIST_RUS[rand::thread_rng().gen_range(0..33)], + LIST_RUS[rand::thread_rng().gen_range(0..33)], + rand::thread_rng().gen_range(0..999), + LIST_RUS[rand::thread_rng().gen_range(0..33)], + rand::thread_rng().gen_range(0..999), + ); + + let ast = Astronave { + nombre: ast_name, + cas: rand::thread_rng().gen_range(3..19), + mot: rand::thread_rng().gen_range(3..19), + sis: sis_val, + escudos: esc_dado1 + esc_dado2 + esc_dado3, + combustible: 4, + armamento: "d6".to_string(), + armadura: 0, + soporte_vital: sis_val+2, + peculiaridades: vec![ + LIST_PEC_1[(esc_dado1-1) as usize].to_string(), + LIST_PEC_2[(esc_dado2-1) as usize].to_string(), + LIST_PEC_3[(esc_dado3-1) as usize].to_string(), + ], + }; + + let template = fs::read_to_string("templates/astronave.html").unwrap(); + let r = render!(&template, astronave => ast); + Html(r) +} + +const LIST_PEC_1: [&str; 6] = [ +"Sin Armamento: la nave comienza sin armas instaladas.", +"Escudos parpadeantes: si un ataque contra esta nave inflige daño máximo, ignora los escudos y daña directamente el CAS.", +"Casco agrietado: -1 CAS Máximo. Hay una grieta enorme en el casco de la nave.", +"Casco grueso: +1 CAS Máximo, -1 MOT Max.", +"Blindaje: +1 Armadura.", +"Vigas reforzadas: +2 CAS Máx. Las puertas son difíciles de forzar.", +]; + + +const LIST_PEC_2: [&str; 6] = [ +"Motor de salto defectuoso: desactivado d6 turnos después de saltar.", +"Tanques de combustible perdidos: - 2 al Combustible Máximo.", +"Latencia en Gravitador: La nave tarda unos instantes en moverse desde que recibe la órden.", +"Motores grandes: +1 MOT Max, -1 SIS Max. Los motores de salto y gravedad están sobredimensionados.", +"Revestimiento antigravitatorio: Le cuesta 1 de Combustible menos despegar del pozo de gravitacional de un planeta.", +"Dispositivo de ocultación: Si se activa apaga todos los sistemas pero hace que la nave sea indetectable a todos los escáneres, escepto a los más fuertes.", +]; + +const LIST_PEC_3: [&str; 6] = [ +"Foco de Adware: La nave emite constantemente a todo volumen anuncios publicitarios.", +"Sistemas inusuales: El coste de las mejoras se incrementa en un 10%.", +"Errores informáticos: -1 SIS Max. Siempre tiene alguna avería ligera.", +"Sistemas redundantes: +1 SIS Max, -1 CAS Max. Subsistemas duplicados.", +"Astronave inteligente: Posee una IA. Tiene 9+d6 de MEN y puede hacer una tarea por asalto como un personaje.", +"Error de pago: La deuda o coste de la nave se reduce en 25G. Si robas o rescatas una nave esta peculiaridad no tiene sentido.", +]; + +const LIST_RUS: [&str; 33] = [ +"А","Б","В","Г","Д","Е","Ё","Ж","З","И","Й","К","Л","М","Н","О","П","Р","С","Т", +"У","Ф","Х","Ц","Ч","Ш","Щ","Ъ","Ы","Ь","Э","Ю","Яk", +]; diff --git a/src/views/mod.rs b/src/views/mod.rs index 16ac527..9be93b0 100644 --- a/src/views/mod.rs +++ b/src/views/mod.rs @@ -1 +1,2 @@ pub mod personajes; +pub mod astronaves; diff --git a/templates/astronave.html b/templates/astronave.html new file mode 100644 index 0000000..b3a2184 --- /dev/null +++ b/templates/astronave.html @@ -0,0 +1,72 @@ + + + + + + + + Into the Kosmos - Astronaves + + + + + + + +
+
Nombre: {{ astronave.nombre }}
+
+
+
+
CAS: {{ astronave.cas }}
+
MOT: {{ astronave.mot }}
+
SIS: {{ astronave.sis }}
+
+
+
Escudos: {{ astronave.escudos }}
+
Armadura: {{ astronave.armadura }}
+
Armamento: {{ astronave.armamento }}
+
+
+
+
+
Combustible: {{ astronave.combustible }}
+
+
+
Soporte Vital para {{ astronave.soporte_vital }} personas.
+
+
+
+
Peculiaridades: +
    + {% for item in astronave.peculiaridades %} +
  • {{ item }}
  • + {% endfor %} +
+
+ * Ten en cuenta que las modificaciones de las peculiaridades no están aplicadas. +
+
+
+ + diff --git a/templates/personaje.html b/templates/personaje.html index 3c25ed7..b00aa21 100644 --- a/templates/personaje.html +++ b/templates/personaje.html @@ -5,7 +5,7 @@ - Into the Kosmos + Into the Kosmos - Personajes