gardando o estado do xogador na base de datos
This commit is contained in:
parent
c2471743d0
commit
248d67ea3d
88
Cargo.lock
generated
88
Cargo.lock
generated
@ -14,6 +14,12 @@ version = "1.4.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
|
||||
|
||||
[[package]]
|
||||
name = "cfg-if"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||
|
||||
[[package]]
|
||||
name = "diesel"
|
||||
version = "2.0.0"
|
||||
@ -55,6 +61,17 @@ dependencies = [
|
||||
"percent-encoding",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "getrandom"
|
||||
version = "0.2.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"wasi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "idna"
|
||||
version = "0.3.0"
|
||||
@ -65,6 +82,12 @@ dependencies = [
|
||||
"unicode-normalization",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.132"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8371e4e5341c3a96db127eb2465ac681ced4c433e01dd0e938adbef26ba93ba5"
|
||||
|
||||
[[package]]
|
||||
name = "mysqlclient-sys"
|
||||
version = "0.2.5"
|
||||
@ -87,6 +110,12 @@ version = "0.3.25"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae"
|
||||
|
||||
[[package]]
|
||||
name = "ppv-lite86"
|
||||
version = "0.2.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro-error"
|
||||
version = "1.0.4"
|
||||
@ -129,12 +158,43 @@ dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand"
|
||||
version = "0.8.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"rand_chacha",
|
||||
"rand_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_chacha"
|
||||
version = "0.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
|
||||
dependencies = [
|
||||
"ppv-lite86",
|
||||
"rand_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_core"
|
||||
version = "0.6.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
|
||||
dependencies = [
|
||||
"getrandom",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "reentrada"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"diesel",
|
||||
"dotenv",
|
||||
"uuid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -195,6 +255,28 @@ dependencies = [
|
||||
"percent-encoding",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "uuid"
|
||||
version = "1.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dd6469f4314d5f1ffec476e05f17cc9a78bc7a27a6a857842170bdf8d6f98d2f"
|
||||
dependencies = [
|
||||
"getrandom",
|
||||
"rand",
|
||||
"uuid-macro-internal",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "uuid-macro-internal"
|
||||
version = "1.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "548f7181a5990efa50237abb7ebca410828b57a8955993334679f8b50b35c97d"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "vcpkg"
|
||||
version = "0.2.15"
|
||||
@ -206,3 +288,9 @@ name = "version_check"
|
||||
version = "0.9.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
|
||||
|
||||
[[package]]
|
||||
name = "wasi"
|
||||
version = "0.11.0+wasi-snapshot-preview1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
|
||||
|
@ -8,3 +8,11 @@ edition = "2021"
|
||||
[dependencies]
|
||||
diesel = { version = "2.0.0", features = ["mysql"] }
|
||||
dotenv = "0.15.0"
|
||||
|
||||
[dependencies.uuid]
|
||||
version = "1.1.2"
|
||||
features = [
|
||||
"v4", # Lets you generate random UUIDs
|
||||
"fast-rng", # Use a faster (but still sufficiently random) RNG
|
||||
"macro-diagnostics", # Enable better diagnostics for compile-time UUIDs
|
||||
]
|
||||
|
8
diesel.toml
Normal file
8
diesel.toml
Normal file
@ -0,0 +1,8 @@
|
||||
# For documentation on how to configure this file,
|
||||
# see https://diesel.rs/guides/configuring-diesel-cli
|
||||
|
||||
[print_schema]
|
||||
file = "src/schema.rs"
|
||||
|
||||
[migrations_directory]
|
||||
dir = "migrations"
|
1
migrations/2022-09-14-140919_create_player/down.sql
Normal file
1
migrations/2022-09-14-140919_create_player/down.sql
Normal file
@ -0,0 +1 @@
|
||||
DROP TABLE player
|
10
migrations/2022-09-14-140919_create_player/up.sql
Normal file
10
migrations/2022-09-14-140919_create_player/up.sql
Normal file
@ -0,0 +1,10 @@
|
||||
CREATE TABLE player (
|
||||
tag varchar(100) NOT NULL,
|
||||
nombre varchar(100) NOT NULL,
|
||||
descripcion varchar(2048) NOT NULL,
|
||||
location varchar(100) NOT NULL,
|
||||
ca int NOT NULL,
|
||||
ba int NOT NULL,
|
||||
hp int NOT NULL,
|
||||
CONSTRAINT PK_Player PRIMARY KEY (tag)
|
||||
)
|
@ -8,6 +8,7 @@ pub mod database;
|
||||
|
||||
// use crate::player::Player;
|
||||
use crate::rlib::set_player;
|
||||
use crate::player::update_player;
|
||||
|
||||
fn main() {
|
||||
// intro
|
||||
@ -30,7 +31,7 @@ fn main() {
|
||||
let mut output: String;
|
||||
let mut player = set_player();
|
||||
|
||||
println!("Bienvenido {}. Vamos a empezar a jugar...", player.name);
|
||||
println!("Bienvenido {}. Vamos a empezar a jugar...", player.nombre);
|
||||
println!("");
|
||||
println!("Despiertas en la oscuridad con un fuerte dolor de cabeza.");
|
||||
println!("Un fuerte sonido de alarma machaca tus oídos. No ayuda nada a tu dolor de cabeza.");
|
||||
@ -41,6 +42,7 @@ fn main() {
|
||||
command = rlib::get_input();
|
||||
output = rlib::update_state(&mut player, &command);
|
||||
rlib::update_screen(output);
|
||||
update_player(&player).expect("Error actualizando jugador!!");
|
||||
}
|
||||
|
||||
// salir
|
||||
|
@ -1,6 +1,8 @@
|
||||
use diesel::prelude::*;
|
||||
use crate::schema::*;
|
||||
|
||||
#[derive(Queryable)]
|
||||
#[diesel(table_name = location)]
|
||||
pub struct RLocation {
|
||||
pub tag: String,
|
||||
pub nombre: Option<String>,
|
||||
@ -13,7 +15,8 @@ pub struct RLocation {
|
||||
pub salida_abajo: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Queryable)]
|
||||
#[derive(Queryable, Insertable)]
|
||||
#[diesel(table_name = object)]
|
||||
pub struct RObject {
|
||||
pub tag: String,
|
||||
pub nombre: String,
|
||||
@ -22,8 +25,22 @@ pub struct RObject {
|
||||
pub peso: i32,
|
||||
}
|
||||
|
||||
#[derive(Queryable)]
|
||||
pub struct Rnpc {
|
||||
// #[derive(Queryable, Insertable)]
|
||||
// #[diesel(table_name = npc)]
|
||||
// pub struct Rnpc {
|
||||
// pub tag: String,
|
||||
// pub nombre: String,
|
||||
// pub descripcion: String,
|
||||
// pub location: String,
|
||||
// pub ca: i32,
|
||||
// pub ba: i32,
|
||||
// pub hp: i32,
|
||||
// }
|
||||
|
||||
#[derive(Queryable, Insertable, AsChangeset)]
|
||||
#[diesel(table_name = player)]
|
||||
#[diesel(primary_key(tag))]
|
||||
pub struct Player {
|
||||
pub tag: String,
|
||||
pub nombre: String,
|
||||
pub descripcion: String,
|
||||
|
@ -1,9 +1,35 @@
|
||||
use crate::objects::{get_objects, get_object_here, update_object_location};
|
||||
use crate::models::Player;
|
||||
use crate::database::establish_connection;
|
||||
use diesel::prelude::*;
|
||||
|
||||
pub struct Player {
|
||||
pub tag: String,
|
||||
pub name: String,
|
||||
pub location: String,
|
||||
// get_player le o xogador polo nick
|
||||
pub fn get_player(nome: String) -> Result<Player, diesel::result::Error> {
|
||||
use crate::schema::player::dsl::*;
|
||||
let conn = &mut establish_connection();
|
||||
player
|
||||
.filter(nombre.eq(nome))
|
||||
.first(conn)
|
||||
}
|
||||
|
||||
// create_player garda o xogador
|
||||
pub fn create_player(newplayer: &Player) -> Result<usize, diesel::result::Error> {
|
||||
use crate::schema::player;
|
||||
let conn = &mut establish_connection();
|
||||
|
||||
diesel::insert_into(player::table)
|
||||
.values(newplayer)
|
||||
.execute(conn)
|
||||
}
|
||||
|
||||
// update_player actualiza o xogador
|
||||
pub fn update_player(newplayer: &Player) -> Result<usize, diesel::result::Error> {
|
||||
use crate::schema::player;
|
||||
let conn = &mut establish_connection();
|
||||
|
||||
diesel::update(player::table)
|
||||
.set(newplayer) // co trait AsChangeSet podese actualizar a struct enteira
|
||||
.execute(conn)
|
||||
}
|
||||
|
||||
// execute_search mostra os obxetos na ubicación do xogador
|
||||
|
31
src/rlib.rs
31
src/rlib.rs
@ -1,6 +1,8 @@
|
||||
use std::io::{self, Write};
|
||||
use crate::rlocation::{execute_go, execute_look};
|
||||
use crate::player::{Player, execute_search, execute_inventory, execute_pick, execute_drop};
|
||||
use crate::player::*;
|
||||
use crate::models::Player;
|
||||
use uuid::Uuid;
|
||||
|
||||
pub struct Command {
|
||||
pub verb: String,
|
||||
@ -40,12 +42,27 @@ pub fn set_player() -> Player {
|
||||
// parse
|
||||
let nick = input_str.trim();
|
||||
|
||||
// instance player
|
||||
let player = Player{
|
||||
tag: "player1".to_string() ,
|
||||
name: nick.to_string(),
|
||||
location: "0".to_string()
|
||||
};
|
||||
//comprobar si existe
|
||||
// si existe instanciase o que xa está na base de datos
|
||||
// si non existe instanciase o novo e gárdase na base de datos
|
||||
let player: Player;
|
||||
|
||||
let check_player = get_player(nick.to_string());
|
||||
if check_player.is_ok() {
|
||||
player = check_player.unwrap();
|
||||
} else {
|
||||
player = Player{
|
||||
tag: Uuid::new_v4().to_string(),
|
||||
nombre: nick.to_string(),
|
||||
descripcion: "humano, equipo básico".to_string(),
|
||||
location: "0".to_string(),
|
||||
ca: 10,
|
||||
ba: 0,
|
||||
hp: 8,
|
||||
};
|
||||
|
||||
create_player(&player).expect("Error creando jugador!!");
|
||||
}
|
||||
|
||||
// return
|
||||
player
|
||||
|
@ -1,4 +1,3 @@
|
||||
use crate::player::Player;
|
||||
use crate::objects::get_object_here;
|
||||
|
||||
use crate::models::*;
|
||||
|
@ -24,7 +24,20 @@ diesel::table! {
|
||||
}
|
||||
}
|
||||
|
||||
diesel::table! {
|
||||
player (tag) {
|
||||
tag -> Varchar,
|
||||
nombre -> Varchar,
|
||||
descripcion -> Varchar,
|
||||
location -> Varchar,
|
||||
ca -> Integer,
|
||||
ba -> Integer,
|
||||
hp -> Integer,
|
||||
}
|
||||
}
|
||||
|
||||
diesel::allow_tables_to_appear_in_same_query!(
|
||||
location,
|
||||
object,
|
||||
player,
|
||||
);
|
||||
|
Loading…
Reference in New Issue
Block a user