rpc battle cmd
This commit is contained in:
parent
3478d98c82
commit
f825b26b37
@ -1,4 +1,6 @@
|
|||||||
* Battling
|
* Battling
|
||||||
|
* Levelling
|
||||||
|
* Global rolls
|
||||||
* Logins ✔️
|
* Logins ✔️
|
||||||
* Cryp Ownership ✔
|
* Cryp Ownership ✔
|
||||||
* Matchmaking
|
* Matchmaking
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
// use uuid::Uuid;
|
// use uuid::Uuid;
|
||||||
use rand::prelude::*;
|
// use rand::prelude::*;
|
||||||
|
|
||||||
use cryp::Cryp;
|
use cryp::Cryp;
|
||||||
|
|
||||||
@ -12,10 +12,10 @@ use cryp::Cryp;
|
|||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug,Clone,Serialize,Deserialize)]
|
||||||
pub struct Battle {
|
pub struct Battle {
|
||||||
a: Cryp,
|
pub a: Cryp,
|
||||||
b: Cryp,
|
pub b: Cryp,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Battle {
|
impl Battle {
|
||||||
@ -31,6 +31,10 @@ impl Battle {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn next(&mut self) -> &mut Battle {
|
pub fn next(&mut self) -> &mut Battle {
|
||||||
|
if self.finished() {
|
||||||
|
panic!("{:?} is finished", self);
|
||||||
|
}
|
||||||
|
|
||||||
let a_turn = self.a.turn();
|
let a_turn = self.a.turn();
|
||||||
let b_turn = self.b.turn();
|
let b_turn = self.b.turn();
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,14 @@
|
|||||||
use rand::prelude::*;
|
use rand::prelude::*;
|
||||||
|
use serde_cbor::{from_slice};
|
||||||
|
|
||||||
|
// Db Commons
|
||||||
|
use failure::Error;
|
||||||
|
use failure::err_msg;
|
||||||
|
|
||||||
|
use net::Db;
|
||||||
|
use account::Account;
|
||||||
|
use rpc::{CombatPveParams};
|
||||||
|
|
||||||
use cryp::Cryp;
|
use cryp::Cryp;
|
||||||
use battle::Battle;
|
use battle::Battle;
|
||||||
use skill::Skill;
|
use skill::Skill;
|
||||||
@ -10,26 +20,26 @@ struct Encounter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
pub fn battle(a: &Cryp, b: &Cryp) -> Battle {
|
pub fn battle_resolve(a: &Cryp, b: &Cryp) -> Battle {
|
||||||
let mut battle = Battle::new(a, b);
|
let mut battle = Battle::new(a, b);
|
||||||
loop {
|
loop {
|
||||||
battle.next();
|
battle.next();
|
||||||
if battle.finished() {
|
if battle.finished() {
|
||||||
break battle
|
break battle
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn pve(plr: Cryp) -> Encounter {
|
fn pve_completion(plr: Cryp) -> Encounter {
|
||||||
let mut rng = thread_rng();
|
let mut rng = thread_rng();
|
||||||
let mob_lvl: u8 = rng.gen_range(1, plr.lvl);
|
let mob_lvl: u8 = rng.gen_range(1, plr.lvl);
|
||||||
|
|
||||||
let mob = Cryp::new()
|
let mob = Cryp::new()
|
||||||
.named("bamboo basher".to_string())
|
.named(&"bamboo basher".to_string())
|
||||||
.level(mob_lvl)
|
.level(mob_lvl)
|
||||||
.create();
|
.create();
|
||||||
|
|
||||||
let outcome = battle(&plr, &mob);
|
let outcome = battle_resolve(&plr, &mob);
|
||||||
|
|
||||||
let success = match outcome.winner() {
|
let success = match outcome.winner() {
|
||||||
Some(c) => c.id == plr.id,
|
Some(c) => c.id == plr.id,
|
||||||
@ -43,9 +53,9 @@ fn pve(plr: Cryp) -> Encounter {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn levelling(mut c: Cryp) -> Cryp {
|
pub fn keep_levelling(mut c: Cryp) -> Cryp {
|
||||||
loop {
|
loop {
|
||||||
let enc = pve(c);
|
let enc = pve_completion(c);
|
||||||
c = enc.player;
|
c = enc.player;
|
||||||
|
|
||||||
if !enc.success {
|
if !enc.success {
|
||||||
@ -66,19 +76,54 @@ pub fn levelling(mut c: Cryp) -> Cryp {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn generate_mob(plr: &Cryp) -> Cryp {
|
||||||
|
let mut rng = thread_rng();
|
||||||
|
let mob_lvl: u8 = rng.gen_range(1, plr.lvl);
|
||||||
|
|
||||||
|
return Cryp::new()
|
||||||
|
.named(&"bamboo basher".to_string())
|
||||||
|
.level(mob_lvl)
|
||||||
|
.create();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn pve(params: CombatPveParams, db: Db, account: Account) -> Result<Battle, Error> {
|
||||||
|
let query = "
|
||||||
|
SELECT *
|
||||||
|
FROM cryps
|
||||||
|
WHERE id = $1;
|
||||||
|
";
|
||||||
|
|
||||||
|
let result = db
|
||||||
|
.query(query, &[¶ms.id])?;
|
||||||
|
|
||||||
|
let returned = match result.iter().next() {
|
||||||
|
Some(row) => row,
|
||||||
|
None => return Err(err_msg("cryp not found")),
|
||||||
|
};
|
||||||
|
|
||||||
|
// tells from_slice to cast into a cryp
|
||||||
|
let cryp_bytes: Vec<u8> = returned.get("data");
|
||||||
|
let plr: Cryp = from_slice::<Cryp>(&cryp_bytes)?;
|
||||||
|
|
||||||
|
let mob = generate_mob(&plr);
|
||||||
|
return Ok(Battle::new(&plr, &mob));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
pub fn test_battle() {
|
pub fn test_battle() {
|
||||||
let mut a = Cryp::new()
|
let a = Cryp::new()
|
||||||
.named("pronounced \"creeep\"".to_string())
|
.named(&"pronounced \"creeep\"".to_string())
|
||||||
.level(8)
|
.level(8)
|
||||||
.learn(Skill::Stoney)
|
.learn(Skill::Stoney)
|
||||||
.create();
|
.create();
|
||||||
|
|
||||||
let b = Cryp::new()
|
let b = Cryp::new()
|
||||||
.named("lemongrass tea".to_string())
|
.named(&"lemongrass tea".to_string())
|
||||||
.level(8)
|
.level(8)
|
||||||
.create();
|
.create();
|
||||||
|
|
||||||
let outcome = battle(&a, &b);
|
let outcome = battle_resolve(&a, &b);
|
||||||
|
|
||||||
match outcome.winner() {
|
match outcome.winner() {
|
||||||
Some(w) => println!("{:?} is the winner with {:?} hp remaining", w.name, w.hp),
|
Some(w) => println!("{:?} is the winner with {:?} hp remaining", w.name, w.hp),
|
||||||
@ -91,19 +136,32 @@ pub fn test_battle() {
|
|||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use combat::*;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn pve_test() {
|
fn pve_completion_test() {
|
||||||
let player = Cryp::new()
|
let player = Cryp::new()
|
||||||
.named("ca phe sua da".to_string())
|
.named(&"ca phe sua da".to_string())
|
||||||
.level(2)
|
.level(2)
|
||||||
.create();
|
.create();
|
||||||
|
|
||||||
levelling(player);
|
keep_levelling(player);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// #[test]
|
||||||
|
// fn pve_test() {
|
||||||
|
// let name = "ca phe sua da".to_string();
|
||||||
|
// let player = Cryp::new()
|
||||||
|
// .named(&name)
|
||||||
|
// .level(2)
|
||||||
|
// .create();
|
||||||
|
|
||||||
|
// let _battle = pve(player);
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn battle_test() {
|
fn battle_test() {
|
||||||
test_battle();
|
test_battle();
|
||||||
|
|||||||
@ -108,7 +108,7 @@ impl Cryp {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn named(mut self, name: String) -> Cryp {
|
pub fn named(mut self, name: &String) -> Cryp {
|
||||||
self.name = name.clone();
|
self.name = name.clone();
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
@ -190,7 +190,7 @@ impl Cryp {
|
|||||||
|
|
||||||
pub fn spawn(params: CrypSpawnParams, db: Db, account: Account) -> Result<Cryp, Error> {
|
pub fn spawn(params: CrypSpawnParams, db: Db, account: Account) -> Result<Cryp, Error> {
|
||||||
let cryp = Cryp::new()
|
let cryp = Cryp::new()
|
||||||
.named(params.name)
|
.named(¶ms.name)
|
||||||
.level(1)
|
.level(1)
|
||||||
.set_account(account.id)
|
.set_account(account.id)
|
||||||
.create();
|
.create();
|
||||||
@ -226,7 +226,7 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn create_cryp_test() {
|
fn create_cryp_test() {
|
||||||
let max_level = Cryp::new()
|
let max_level = Cryp::new()
|
||||||
.named("hatchling".to_string())
|
.named(&"hatchling".to_string())
|
||||||
.level(64)
|
.level(64)
|
||||||
.learn(Skill::Stoney)
|
.learn(Skill::Stoney)
|
||||||
.create();
|
.create();
|
||||||
|
|||||||
@ -1,10 +1,13 @@
|
|||||||
use ws::{Message};
|
use ws::{Message};
|
||||||
use serde_cbor::{from_slice};
|
use serde_cbor::{from_slice};
|
||||||
|
use uuid::Uuid;
|
||||||
use failure::Error;
|
use failure::Error;
|
||||||
use failure::err_msg;
|
use failure::err_msg;
|
||||||
|
|
||||||
use net::Db;
|
use net::Db;
|
||||||
use cryp::{Cryp, spawn};
|
use cryp::{Cryp, spawn};
|
||||||
|
use battle::{Battle};
|
||||||
|
use combat::{pve};
|
||||||
use account::{Account, create, login, from_token};
|
use account::{Account, create, login, from_token};
|
||||||
|
|
||||||
pub struct Rpc;
|
pub struct Rpc;
|
||||||
@ -42,6 +45,20 @@ impl Rpc {
|
|||||||
Err(_e) => Err(err_msg("invalid params")),
|
Err(_e) => Err(err_msg("invalid params")),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"combat_pve" => {
|
||||||
|
match from_slice::<CombatPveMsg>(&data) {
|
||||||
|
Ok(v) => {
|
||||||
|
match account {
|
||||||
|
Some(u) => Ok(RpcResponse {
|
||||||
|
method: v.method,
|
||||||
|
params: RpcResult::Pve(pve(v.params, db, u)?)
|
||||||
|
}),
|
||||||
|
None => Err(err_msg("auth required")),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(_e) => Err(err_msg("invalid params")),
|
||||||
|
}
|
||||||
|
},
|
||||||
"account_create" => {
|
"account_create" => {
|
||||||
match from_slice::<AccountCreateMsg>(&data) {
|
match from_slice::<AccountCreateMsg>(&data) {
|
||||||
Ok(v) => Ok(RpcResponse {
|
Ok(v) => Ok(RpcResponse {
|
||||||
@ -79,6 +96,7 @@ pub struct RpcResponse {
|
|||||||
pub enum RpcResult {
|
pub enum RpcResult {
|
||||||
SpawnCryp(Cryp),
|
SpawnCryp(Cryp),
|
||||||
Account(Account),
|
Account(Account),
|
||||||
|
Pve(Battle),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug,Clone,Serialize,Deserialize)]
|
#[derive(Debug,Clone,Serialize,Deserialize)]
|
||||||
@ -98,6 +116,17 @@ pub struct CrypSpawnParams {
|
|||||||
pub name: String,
|
pub name: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug,Clone,Serialize,Deserialize)]
|
||||||
|
struct CombatPveMsg {
|
||||||
|
method: String,
|
||||||
|
params: CombatPveParams,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug,Clone,Serialize,Deserialize)]
|
||||||
|
pub struct CombatPveParams {
|
||||||
|
pub id: Uuid,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug,Clone,Serialize,Deserialize)]
|
#[derive(Debug,Clone,Serialize,Deserialize)]
|
||||||
struct AccountCreateMsg {
|
struct AccountCreateMsg {
|
||||||
method: String,
|
method: String,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user