From 8c3b74cba35ab740a1d6a746b950814be62796ae Mon Sep 17 00:00:00 2001 From: "NG (Graham)" Date: Thu, 9 Jul 2026 17:12:43 -0400 Subject: [PATCH] Make minimum multiplayer level configurable, (default 0); close #141 --- rc_core/src/persist/combat.rs | 2 ++ rc_core/src/persist/config/cubes_json.rs | 2 ++ rc_core/src/persist/config/traits.rs | 2 ++ rc_core/src/persist/multiplayer.rs | 8 ++++++++ .../src/operations/league_limits.rs | 17 ++++++++++------- rc_services_room/src/operations/mod.rs | 2 +- 6 files changed, 25 insertions(+), 8 deletions(-) diff --git a/rc_core/src/persist/combat.rs b/rc_core/src/persist/combat.rs index 877a3da..b957396 100644 --- a/rc_core/src/persist/combat.rs +++ b/rc_core/src/persist/combat.rs @@ -637,6 +637,8 @@ fn default_multiplayer() -> super::MultiplayerConfig { pit_config: super::multiplayer::default_pit_conf(), team_death_match: super::multiplayer::default_tdm_conf(), vehicle_validator: super::multiplayer::default_validator(), + minimum_level: 0, + minimum_cpu: super::multiplayer::default_minimum_cpu(), } } diff --git a/rc_core/src/persist/config/cubes_json.rs b/rc_core/src/persist/config/cubes_json.rs index 0637025..9d75684 100644 --- a/rc_core/src/persist/config/cubes_json.rs +++ b/rc_core/src/persist/config/cubes_json.rs @@ -453,6 +453,8 @@ impl super::ConfigProvider for CubeConfig { is_enabled: self.battle.multiplayer.enabled, lobby_autostart_after: self.battle.multiplayer.autostart_after_s.map(std::time::Duration::from_secs), loading_autostart_after: self.battle.multiplayer.continue_loading_after_s.map(std::time::Duration::from_secs), + min_level: self.battle.multiplayer.minimum_level as i32, + min_cpu: self.battle.multiplayer.minimum_cpu as i32, } } diff --git a/rc_core/src/persist/config/traits.rs b/rc_core/src/persist/config/traits.rs index 55071be..98a0f23 100644 --- a/rc_core/src/persist/config/traits.rs +++ b/rc_core/src/persist/config/traits.rs @@ -553,6 +553,8 @@ pub struct MultiplayerSettings { pub is_enabled: bool, pub lobby_autostart_after: Option, pub loading_autostart_after: Option, + pub min_level: i32, + pub min_cpu: i32, } pub struct VehicleValidators { diff --git a/rc_core/src/persist/multiplayer.rs b/rc_core/src/persist/multiplayer.rs index 5251f0a..e4a25fc 100644 --- a/rc_core/src/persist/multiplayer.rs +++ b/rc_core/src/persist/multiplayer.rs @@ -22,6 +22,10 @@ pub struct MultiplayerConfig { pub team_death_match: TeamDeathMatchConfig, #[serde(default = "default_validator")] pub vehicle_validator: super::VehicleValidator, + #[serde(default)] + pub minimum_level: u16, + #[serde(default = "default_minimum_cpu")] + pub minimum_cpu: u16, } impl super::config::SelfValidator for MultiplayerConfig { @@ -130,6 +134,10 @@ pub(super) fn default_continue_loading_after_s() -> Option { Some(30) } +pub(super) fn default_minimum_cpu() -> u16 { + 100 +} + pub(super) fn default_net_conf() -> NetworkConf { NetworkConf { network_channel_ty: "3113".to_owned(), diff --git a/rc_services_room/src/operations/league_limits.rs b/rc_services_room/src/operations/league_limits.rs index 41a75c9..f1b2965 100644 --- a/rc_services_room/src/operations/league_limits.rs +++ b/rc_services_room/src/operations/league_limits.rs @@ -1,19 +1,22 @@ -use polariton_server::operations::SimpleFunc; +use polariton_server::operations::Immediate; use polariton::{operation::{Dict, ParameterTable, Typed}, serdes::TypePrefix}; const PARAM_KEY: u8 = 1; -pub(super) fn league_battle_parameters_provider() -> SimpleFunc<57, crate::UserTy, impl (Fn(ParameterTable, &crate::UserTy) -> Result) + Sync + Sync> { - SimpleFunc::new(|params, _| { - let mut params = params.to_dict(); +pub(super) fn league_battle_parameters_provider(conf: &oj_rc_core::ConfigImpl) -> Immediate<57, crate::UserTy> { + let multiplayer_conf = >::multiplayer_settings(conf); + let player_level = multiplayer_conf.min_level; + let cpu = multiplayer_conf.min_cpu; + Immediate::new(move || { + let mut params = ParameterTable::with_capacity(3); params.insert(PARAM_KEY, Typed::Dict(Dict { key_ty: TypePrefix::Str, //str val_ty: TypePrefix::Any, // obj items: vec![ - (Typed::Str("playerLevelRequired".into()), Typed::Int(10)), - (Typed::Str("minCpu".into()), Typed::Int(100)), + (Typed::Str("playerLevelRequired".into()), Typed::Int(player_level)), + (Typed::Str("minCpu".into()), Typed::Int(cpu)), ], })); - Ok(params.into()) + params }) } diff --git a/rc_services_room/src/operations/mod.rs b/rc_services_room/src/operations/mod.rs index c489ee3..41b0e68 100644 --- a/rc_services_room/src/operations/mod.rs +++ b/rc_services_room/src/operations/mod.rs @@ -178,7 +178,7 @@ pub fn handler(init_ctx: &crate::InitConfig) -> OperationsHandler .add(player_rank::rank_provider()) .add(player_rank::rank_static_provider()) .add(ab_test_group::test_group_provider()) - .add(league_limits::league_battle_parameters_provider()) + .add(league_limits::league_battle_parameters_provider(&init_ctx.cubes)) .add(crf_limits::robot_shop_submission_infos_provider(&init_ctx.cubes)) .add(robot_mastery_settings::robot_mastery_settings_provider()) .add(player_started_purchase::started_purchase_provider())