xenerador de Astronaves
This commit is contained in:
parent
820632e147
commit
3309624821
@ -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));
|
||||
|
91
src/views/astronaves.rs
Normal file
91
src/views/astronaves.rs
Normal file
@ -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<String>
|
||||
}
|
||||
|
||||
pub async fn genera_astronave() -> Html<String> {
|
||||
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",
|
||||
];
|
@ -1 +1,2 @@
|
||||
pub mod personajes;
|
||||
pub mod astronaves;
|
||||
|
72
templates/astronave.html
Normal file
72
templates/astronave.html
Normal file
@ -0,0 +1,72 @@
|
||||
<!doctype html>
|
||||
|
||||
<html lang="es">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
<title>Into the Kosmos - Astronaves</title>
|
||||
<meta name="description" content="Generador de Astronaves para Into the Kosmos">
|
||||
<meta name="author" content="serxoz">
|
||||
|
||||
<style>
|
||||
main {
|
||||
font-family: monospace, monospace;
|
||||
max-width: 38rem;
|
||||
padding: 2rem;
|
||||
margin: auto;
|
||||
}
|
||||
ul {
|
||||
margin-top: 0;
|
||||
}
|
||||
.row {
|
||||
display: flex;
|
||||
}
|
||||
.column {
|
||||
flex: 50%;
|
||||
}
|
||||
.nota_pie {
|
||||
font-size: 0.75rem;
|
||||
font-style: italic;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<main id="app">
|
||||
<div>Nombre: {{ astronave.nombre }}</div>
|
||||
<hr>
|
||||
<div class="row">
|
||||
<div class="column" style="flex:20% !important">
|
||||
<div>CAS: {{ astronave.cas }}</div>
|
||||
<div>MOT: {{ astronave.mot }}</div>
|
||||
<div>SIS: {{ astronave.sis }}</div>
|
||||
</div>
|
||||
<div class="column">
|
||||
<div>Escudos: {{ astronave.escudos }}</div>
|
||||
<div>Armadura: {{ astronave.armadura }}</div>
|
||||
<div>Armamento: {{ astronave.armamento }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" style="margin-top: 15px">
|
||||
<div class="column" style="flex:20% !important">
|
||||
<div>Combustible: {{ astronave.combustible }}</div>
|
||||
</div>
|
||||
<div class="column">
|
||||
<div>Soporte Vital para {{ astronave.soporte_vital }} personas.</div>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<div>Peculiaridades:
|
||||
<ul>
|
||||
{% for item in astronave.peculiaridades %}
|
||||
<li>{{ item }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="nota_pie">
|
||||
* Ten en cuenta que las modificaciones de las peculiaridades no están aplicadas.
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
@ -5,7 +5,7 @@
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
<title>Into the Kosmos</title>
|
||||
<title>Into the Kosmos - Personajes</title>
|
||||
<meta name="description" content="Generador de PJ para Into the Kosmos">
|
||||
<meta name="author" content="serxoz">
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user