instance finish fix

This commit is contained in:
ntr 2019-03-19 16:49:23 +11:00
parent ac29473471
commit cd26efb42d
5 changed files with 47 additions and 9 deletions

View File

@ -6,6 +6,12 @@
* red_shield is restored, not gained * red_shield is restored, not gained
* players can feel aggressive * players can feel aggressive
- build archtypes
fast blue
slow blue
red + aggro green
blue + defensive green
# WORK WORK # WORK WORK
## NOW ## NOW

View File

@ -754,8 +754,8 @@ pub fn game_update(game: &Game, tx: &mut Transaction) -> Result<(), Error> {
if game.finished() { if game.finished() {
if let Some(i) = game.instance { if let Some(i) = game.instance {
match i == Uuid::nil() { match i == Uuid::nil() {
true => instance_game_finished(tx, &game, i)?, true => global_game_finished(tx, &game)?,
false => global_game_finished(tx, &game)?, false => instance_game_finished(tx, &game, i)?,
} }
} }
} }

View File

@ -194,6 +194,16 @@ impl Instance {
fn bot_vbox_phase(&mut self) -> &mut Instance { fn bot_vbox_phase(&mut self) -> &mut Instance {
for bot in self.players.iter_mut().filter(|p| p.bot) { for bot in self.players.iter_mut().filter(|p| p.bot) {
bot.vbox.fill(); bot.vbox.fill();
// paths for what to do
// use a spec
// craft a spec
// craft a skill
// check for cryps w/ no skills
// create a skill()
// find base
// pick 2 random colours
bot.set_ready(true); bot.set_ready(true);
} }
@ -435,6 +445,10 @@ pub fn instance_ready_global(tx: &mut Transaction, _account: &Account, player: P
Ok(game) Ok(game)
} }
pub fn instance_score(params: InstanceReadyParams, tx: &mut Transaction, account: &Account) -> Result<Instance, Error> {
instance_get(tx, params.instance_id)
}
pub fn instance_ready(params: InstanceReadyParams, tx: &mut Transaction, account: &Account) -> Result<Game, Error> { pub fn instance_ready(params: InstanceReadyParams, tx: &mut Transaction, account: &Account) -> Result<Game, Error> {
let mut player = player_get(tx, account.id, params.instance_id)?; let mut player = player_get(tx, account.id, params.instance_id)?;

View File

@ -22,7 +22,7 @@ use skill::{Skill};
// use zone::{Zone, zone_create, zone_join, zone_close}; // use zone::{Zone, zone_create, zone_join, zone_close};
use spec::{Spec}; use spec::{Spec};
use player::{player_state, player_cryps_set, Player}; use player::{player_state, player_cryps_set, Player};
use instance::{instance_join, instance_ready}; use instance::{Instance, instance_join, instance_ready, instance_score};
use vbox::{Var, vbox_accept, vbox_apply, vbox_discard, vbox_combine, vbox_reclaim, vbox_unequip}; use vbox::{Var, vbox_accept, vbox_apply, vbox_discard, vbox_combine, vbox_reclaim, vbox_unequip};
pub struct Rpc; pub struct Rpc;
@ -79,6 +79,7 @@ impl Rpc {
"instance_join" => Rpc::instance_join(data, &mut tx, account.unwrap(), client), "instance_join" => Rpc::instance_join(data, &mut tx, account.unwrap(), client),
"instance_ready" => Rpc::instance_ready(data, &mut tx, account.unwrap(), client), "instance_ready" => Rpc::instance_ready(data, &mut tx, account.unwrap(), client),
"instance_score" => Rpc::instance_score(data, &mut tx, account.unwrap(), client),
"player_state" => Rpc::player_state(data, &mut tx, account.unwrap(), client), "player_state" => Rpc::player_state(data, &mut tx, account.unwrap(), client),
"player_cryps_set" => Rpc::player_cryps_set(data, &mut tx, account.unwrap(), client), "player_cryps_set" => Rpc::player_cryps_set(data, &mut tx, account.unwrap(), client),
@ -282,6 +283,18 @@ impl Rpc {
return Ok(response); return Ok(response);
} }
fn instance_score(data: Vec<u8>, tx: &mut Transaction, account: Account, _client: &mut WebSocket<TcpStream>) -> Result<RpcResponse, Error> {
let msg = from_slice::<InstanceReadyMsg>(&data).or(Err(err_msg("invalid params")))?;
let response = RpcResponse {
method: "instance_score".to_string(),
params: RpcResult::InstanceScore(instance_score(msg.params, tx, &account)?)
};
return Ok(response);
}
fn player_state(data: Vec<u8>, tx: &mut Transaction, account: Account, _client: &mut WebSocket<TcpStream>) -> Result<RpcResponse, Error> { fn player_state(data: Vec<u8>, tx: &mut Transaction, account: Account, _client: &mut WebSocket<TcpStream>) -> Result<RpcResponse, Error> {
let msg = from_slice::<PlayerStateMsg>(&data).or(Err(err_msg("invalid params")))?; let msg = from_slice::<PlayerStateMsg>(&data).or(Err(err_msg("invalid params")))?;
@ -400,6 +413,7 @@ pub enum RpcResult {
Account(Account), Account(Account),
CrypList(Vec<Cryp>), CrypList(Vec<Cryp>),
GameState(Game), GameState(Game),
InstanceScore(Instance),
// ZoneState(Zone), // ZoneState(Zone),
// ZoneClose(()), // ZoneClose(()),

View File

@ -56,11 +56,12 @@ impl Spec {
let i_max = 64; let i_max = 64;
match *self { match *self {
Spec::RedDamageI => modified + match team_colours.red { Spec::RedDamageI => modified + {
0...5 => base.pct(5), let mut pct = 5;
6...10 => base.pct(10), if team_colours.red >= 5 { pct += 5 };
11...15 => base.pct(15), if team_colours.red >= 10 { pct += 10 };
_ => base.pct(20) if team_colours.red >= 20 { pct += 20 };
base.pct(pct)
}, },
Spec::GreenDamageI => modified + match team_colours.green { Spec::GreenDamageI => modified + match team_colours.green {
0...5 => base.pct(5), 0...5 => base.pct(5),
@ -80,7 +81,10 @@ impl Spec {
Spec::LifeI => modified + base.pct(5), Spec::LifeI => modified + base.pct(5),
Spec::RedShieldI => modified + rng.gen_range(i_min, i_max), Spec::RedShieldI => modified + rng.gen_range(i_min, i_max),
Spec::BlueShieldI => modified + rng.gen_range(i_min, i_max), Spec::BlueShieldI => modified + rng.gen_range(i_min, i_max),
Spec::LRSI => modified + base.pct(5), Spec::LRSI => modified + {
if team_colours.red > 5 && team_colours.green > 5 { base.pct(10) }
else { base.pct(5) }
},
Spec::LBSI => modified + base.pct(5), Spec::LBSI => modified + base.pct(5),
Spec::RBSI => modified + base.pct(5), Spec::RBSI => modified + base.pct(5),
} }