Merge branch 'master' of ssh://mnml.gg:40022/~/mnml
This commit is contained in:
commit
9e32822036
@ -40,7 +40,6 @@ hatred maybe
|
|||||||
|
|
||||||
reconnect based on time delta
|
reconnect based on time delta
|
||||||
|
|
||||||
remove rounds
|
|
||||||
consolidate game and instance
|
consolidate game and instance
|
||||||
|
|
||||||
do not allow vbox actions for finished instances
|
do not allow vbox actions for finished instances
|
||||||
|
|||||||
@ -46,7 +46,7 @@ function TeamFooter(args) {
|
|||||||
<button
|
<button
|
||||||
disabled={team.some(c => !c)}
|
disabled={team.some(c => !c)}
|
||||||
onClick={() => navToList()}>
|
onClick={() => navToList()}>
|
||||||
Join Instance
|
Confirm
|
||||||
</button>
|
</button>
|
||||||
</footer>
|
</footer>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -204,7 +204,7 @@ pub struct Construct {
|
|||||||
pub green_power: ConstructStat,
|
pub green_power: ConstructStat,
|
||||||
pub speed: ConstructStat,
|
pub speed: ConstructStat,
|
||||||
pub green_life: ConstructStat,
|
pub green_life: ConstructStat,
|
||||||
pub evasion: ConstructStat,
|
// pub evasion: ConstructStat,
|
||||||
pub skills: Vec<ConstructSkill>,
|
pub skills: Vec<ConstructSkill>,
|
||||||
pub effects: Vec<ConstructEffect>,
|
pub effects: Vec<ConstructEffect>,
|
||||||
pub specs: Vec<Spec>,
|
pub specs: Vec<Spec>,
|
||||||
@ -225,7 +225,7 @@ impl Construct {
|
|||||||
green_power: ConstructStat { base: 256, value: 256, max: 256, stat: Stat::GreenPower },
|
green_power: ConstructStat { base: 256, value: 256, max: 256, stat: Stat::GreenPower },
|
||||||
green_life: ConstructStat { base: 1024, value: 1024, max: 1024, stat: Stat::GreenLife },
|
green_life: ConstructStat { base: 1024, value: 1024, max: 1024, stat: Stat::GreenLife },
|
||||||
speed: ConstructStat { base: 128, value: 128, max: 128, stat: Stat::Speed },
|
speed: ConstructStat { base: 128, value: 128, max: 128, stat: Stat::Speed },
|
||||||
evasion: ConstructStat { base: 0, value: 0, max: 0, stat: Stat::Evasion },
|
// evasion: ConstructStat { base: 0, value: 0, max: 0, stat: Stat::Evasion },
|
||||||
skills: vec![],
|
skills: vec![],
|
||||||
effects: vec![],
|
effects: vec![],
|
||||||
specs: vec![],
|
specs: vec![],
|
||||||
@ -295,7 +295,7 @@ impl Construct {
|
|||||||
self.red_life.recalculate(&self.specs, &self.colours, player_colours);
|
self.red_life.recalculate(&self.specs, &self.colours, player_colours);
|
||||||
self.blue_power.recalculate(&self.specs, &self.colours, player_colours);
|
self.blue_power.recalculate(&self.specs, &self.colours, player_colours);
|
||||||
self.blue_life.recalculate(&self.specs, &self.colours, player_colours);
|
self.blue_life.recalculate(&self.specs, &self.colours, player_colours);
|
||||||
self.evasion.recalculate(&self.specs, &self.colours, player_colours);
|
// self.evasion.recalculate(&self.specs, &self.colours, player_colours);
|
||||||
self.speed.recalculate(&self.specs, &self.colours, player_colours);
|
self.speed.recalculate(&self.specs, &self.colours, player_colours);
|
||||||
self.green_power.recalculate(&self.specs, &self.colours, player_colours);
|
self.green_power.recalculate(&self.specs, &self.colours, player_colours);
|
||||||
self.green_life.recalculate(&self.specs, &self.colours, player_colours);
|
self.green_life.recalculate(&self.specs, &self.colours, player_colours);
|
||||||
@ -799,6 +799,26 @@ impl Construct {
|
|||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn construct_delete(tx: &mut Transaction, id: Uuid, account_id: Uuid) -> Result<(), Error> {
|
||||||
|
let query = "
|
||||||
|
DELETE
|
||||||
|
FROM constructs
|
||||||
|
WHERE id = $1;
|
||||||
|
and account = $2;
|
||||||
|
";
|
||||||
|
|
||||||
|
let result = tx
|
||||||
|
.execute(query, &[&id, &account_id])?;
|
||||||
|
|
||||||
|
if result != 1 {
|
||||||
|
return Err(format_err!("unable to delete construct {:?}", id));
|
||||||
|
}
|
||||||
|
|
||||||
|
info!("construct deleted {:?}", id);
|
||||||
|
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
|
|
||||||
pub fn construct_get(tx: &mut Transaction, id: Uuid, account_id: Uuid) -> Result<Construct, Error> {
|
pub fn construct_get(tx: &mut Transaction, id: Uuid, account_id: Uuid) -> Result<Construct, Error> {
|
||||||
let query = "
|
let query = "
|
||||||
SELECT data
|
SELECT data
|
||||||
|
|||||||
@ -80,9 +80,10 @@ impl Instance {
|
|||||||
max_rounds: 5,
|
max_rounds: 5,
|
||||||
name: String::new(),
|
name: String::new(),
|
||||||
password: None,
|
password: None,
|
||||||
phase_end: Utc::now(),
|
|
||||||
phase_start: Utc::now(),
|
phase_start: Utc::now(),
|
||||||
|
phase_end: Utc::now()
|
||||||
|
.checked_add_signed(Duration::minutes(5))
|
||||||
|
.expect("could not set phase end"),
|
||||||
format: Format::Standard,
|
format: Format::Standard,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -118,6 +119,12 @@ impl Instance {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn upkeep(mut self) -> (Instance, Vec<Game>) {
|
pub fn upkeep(mut self) -> (Instance, Vec<Game>) {
|
||||||
|
// time out lobbies that have been open too long
|
||||||
|
if self.phase == InstancePhase::Lobby && self.phase_timed_out() {
|
||||||
|
self.finish();
|
||||||
|
return (self, vec![]);
|
||||||
|
}
|
||||||
|
|
||||||
if self.phase != InstancePhase::InProgress {
|
if self.phase != InstancePhase::InProgress {
|
||||||
return (self, vec![]);
|
return (self, vec![]);
|
||||||
}
|
}
|
||||||
@ -562,7 +569,8 @@ pub fn instance_list(tx: &mut Transaction) -> Result<Vec<Instance>, Error> {
|
|||||||
let query = "
|
let query = "
|
||||||
SELECT data, id
|
SELECT data, id
|
||||||
FROM instances
|
FROM instances
|
||||||
WHERE open = true;
|
WHERE open = true
|
||||||
|
AND finished = false;
|
||||||
";
|
";
|
||||||
|
|
||||||
let result = tx
|
let result = tx
|
||||||
@ -590,7 +598,6 @@ pub fn instances_need_upkeep(tx: &mut Transaction) -> Result<Vec<Instance>, Erro
|
|||||||
SELECT data, id
|
SELECT data, id
|
||||||
FROM instances
|
FROM instances
|
||||||
WHERE finished = false
|
WHERE finished = false
|
||||||
AND open = false
|
|
||||||
AND upkeep < now()
|
AND upkeep < now()
|
||||||
FOR UPDATE;
|
FOR UPDATE;
|
||||||
";
|
";
|
||||||
@ -664,6 +671,8 @@ pub fn instance_ready(params: InstanceReadyParams, tx: &mut Transaction, account
|
|||||||
pub fn instance_state(params: InstanceStateParams, tx: &mut Transaction, _account: &Account) -> Result<RpcResult, Error> {
|
pub fn instance_state(params: InstanceStateParams, tx: &mut Transaction, _account: &Account) -> Result<RpcResult, Error> {
|
||||||
let instance = instance_get(tx, params.instance_id)?;
|
let instance = instance_get(tx, params.instance_id)?;
|
||||||
|
|
||||||
|
println!("{:#?}", instance);
|
||||||
|
|
||||||
if let Some(game_id) = instance.current_game_id() {
|
if let Some(game_id) = instance.current_game_id() {
|
||||||
let game = game_get(tx, game_id)?;
|
let game = game_get(tx, game_id)?;
|
||||||
|
|
||||||
@ -793,4 +802,22 @@ mod tests {
|
|||||||
|
|
||||||
// info!("{:#?}", instance);
|
// info!("{:#?}", instance);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn instance_upkeep_idle_lobby_test() {
|
||||||
|
let mut instance = Instance::new();
|
||||||
|
|
||||||
|
let player_account = Uuid::new_v4();
|
||||||
|
let constructs = instance_mobs(player_account);
|
||||||
|
let player = Player::new(player_account, &"a".to_string(), constructs);
|
||||||
|
let _a_id = player.id;
|
||||||
|
|
||||||
|
instance.add_player(player).expect("could not add player");
|
||||||
|
assert!(!instance.can_start());
|
||||||
|
|
||||||
|
instance.phase_end = Utc::now().checked_sub_signed(Duration::minutes(61)).unwrap();
|
||||||
|
let (instance, _new_games) = instance.upkeep();
|
||||||
|
|
||||||
|
assert!(instance.finished());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -175,6 +175,20 @@ impl Rpc {
|
|||||||
Ok(construct_list)
|
Ok(construct_list)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn construct_delete(data: Vec<u8>, tx: &mut Transaction, account: Account, client: &mut WebSocket<TcpStream>) -> Result<RpcResponse, Error> {
|
||||||
|
let msg = from_slice::<ConstructDeleteMsg>(&data).or(Err(err_msg("invalid params")))?;
|
||||||
|
|
||||||
|
construct_delete(msg.params.id, tx, &account)?;
|
||||||
|
|
||||||
|
let construct_list = RpcResponse {
|
||||||
|
method: "account_constructs".to_string(),
|
||||||
|
params: RpcResult::ConstructList(account_constructs(tx, &account)?)
|
||||||
|
};
|
||||||
|
|
||||||
|
Ok(construct_list)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
fn account_create(data: Vec<u8>, tx: &mut Transaction, _client: &mut WebSocket<TcpStream>) -> Result<RpcResponse, Error> {
|
fn account_create(data: Vec<u8>, tx: &mut Transaction, _client: &mut WebSocket<TcpStream>) -> Result<RpcResponse, Error> {
|
||||||
let msg = from_slice::<AccountCreateMsg>(&data).or(Err(err_msg("invalid params")))?;
|
let msg = from_slice::<AccountCreateMsg>(&data).or(Err(err_msg("invalid params")))?;
|
||||||
|
|
||||||
@ -413,39 +427,14 @@ pub struct ConstructSpawnParams {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug,Clone,Serialize,Deserialize)]
|
#[derive(Debug,Clone,Serialize,Deserialize)]
|
||||||
struct ConstructLearnMsg {
|
struct ConstructDeleteMsg {
|
||||||
method: String,
|
method: String,
|
||||||
params: ConstructLearnParams,
|
params: ConstructDeleteParams,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug,Clone,Serialize,Deserialize)]
|
#[derive(Debug,Clone,Serialize,Deserialize)]
|
||||||
pub struct ConstructLearnParams {
|
pub struct ConstructDeleteParams {
|
||||||
pub id: Uuid,
|
pub id: Uuid,
|
||||||
pub skill: Skill,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug,Clone,Serialize,Deserialize)]
|
|
||||||
pub struct ConstructForgetParams {
|
|
||||||
pub id: Uuid,
|
|
||||||
pub skill: Skill,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug,Clone,Serialize,Deserialize)]
|
|
||||||
struct ConstructForgetMsg {
|
|
||||||
method: String,
|
|
||||||
params: ConstructForgetParams,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug,Clone,Serialize,Deserialize)]
|
|
||||||
pub struct ConstructUnspecParams {
|
|
||||||
pub id: Uuid,
|
|
||||||
pub spec: Spec,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug,Clone,Serialize,Deserialize)]
|
|
||||||
struct ConstructUnspecMsg {
|
|
||||||
method: String,
|
|
||||||
params: ConstructUnspecParams,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug,Clone,Serialize,Deserialize)]
|
#[derive(Debug,Clone,Serialize,Deserialize)]
|
||||||
@ -459,17 +448,6 @@ pub struct GameStateParams {
|
|||||||
pub id: Uuid,
|
pub id: Uuid,
|
||||||
}
|
}
|
||||||
|
|
||||||
// #[derive(Debug,Clone,Serialize,Deserialize)]
|
|
||||||
// struct GamePveMsg {
|
|
||||||
// method: String,
|
|
||||||
// params: GamePveParams,
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[derive(Debug,Clone,Serialize,Deserialize)]
|
|
||||||
// pub struct GamePveParams {
|
|
||||||
// pub construct_ids: Vec<Uuid>,
|
|
||||||
// }
|
|
||||||
|
|
||||||
#[derive(Debug,Clone,Serialize,Deserialize)]
|
#[derive(Debug,Clone,Serialize,Deserialize)]
|
||||||
struct GameSkillMsg {
|
struct GameSkillMsg {
|
||||||
method: String,
|
method: String,
|
||||||
@ -562,17 +540,6 @@ pub struct InstanceStateParams {
|
|||||||
pub instance_id: Uuid,
|
pub instance_id: Uuid,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug,Clone,Serialize,Deserialize)]
|
|
||||||
struct PlayerConstructsSetMsg {
|
|
||||||
method: String,
|
|
||||||
params: PlayerConstructsSetParams,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug,Clone,Serialize,Deserialize)]
|
|
||||||
pub struct PlayerConstructsSetParams {
|
|
||||||
pub construct_ids: Vec<Uuid>,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug,Clone,Serialize,Deserialize)]
|
#[derive(Debug,Clone,Serialize,Deserialize)]
|
||||||
struct VboxAcceptMsg {
|
struct VboxAcceptMsg {
|
||||||
method: String,
|
method: String,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user