diff --git a/Cargo.lock b/Cargo.lock index 0cdb6fa..26d5cce 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2573,6 +2573,7 @@ dependencies = [ "common", "config", "const_format", + "itertools", "paste", "rand", "scc", diff --git a/lib/logic/src/debug/gm_cmd.rs b/lib/logic/src/debug/gm_cmd.rs index 3aaec0d..cb6829b 100644 --- a/lib/logic/src/debug/gm_cmd.rs +++ b/lib/logic/src/debug/gm_cmd.rs @@ -29,6 +29,12 @@ pub enum GMCmd { star: u32, refine_level: u32, }, + AddEquip { + equip_id: u32, + level: u32, + star: u32, + property_params: Vec, + }, SetAvatarSkin { avatar_id: u32, avatar_skin_id: u32, diff --git a/servers/game-server/Cargo.toml b/servers/game-server/Cargo.toml index dbd1501..b303b31 100644 --- a/servers/game-server/Cargo.toml +++ b/servers/game-server/Cargo.toml @@ -13,6 +13,7 @@ thiserror.workspace = true rand.workspace = true tracing.workspace = true +itertools.workspace = true paste.workspace = true scc.workspace = true diff --git a/servers/game-server/src/util/gm_util.rs b/servers/game-server/src/util/gm_util.rs index 3e9ea13..963ee22 100644 --- a/servers/game-server/src/util/gm_util.rs +++ b/servers/game-server/src/util/gm_util.rs @@ -1,7 +1,11 @@ use std::cmp; +use itertools::Itertools; use tracing::{error, instrument}; -use vivian_logic::{debug::GMCmd, item::EAvatarSkillType}; +use vivian_logic::{ + debug::GMCmd, + item::{EAvatarSkillType, EquipItem}, +}; use vivian_models::SceneSnapshotExt; use crate::{ @@ -117,6 +121,39 @@ pub fn execute_gm_cmd(player: &mut Player, cmd: GMCmd) { weapon.star = star; weapon.refine_level = refine_level; } + AddEquip { + equip_id, + level, + star, + property_params, + } => { + let mut property_params = property_params.into_iter().tuples(); + + let properties = property_params + .next() + .into_iter() + .map(|(key, base_value, add_value)| (key, (base_value, add_value))) + .collect(); + + let sub_properties = property_params + .map(|(key, base_value, add_value)| (key, (base_value, add_value))) + .collect(); + + let uid = player.item_model.next_uid(); + + player.item_model.equip_map.insert( + uid, + EquipItem { + id: equip_id, + level, + star, + exp: 0, + lock: false, + properties, + sub_properties, + }, + ); + } SetAvatarSkin { avatar_id, avatar_skin_id,