mirror of
https://github.com/redstrate/Kawari.git
synced 2025-06-21 07:27:45 +00:00
Make !spawnclone debug command networked
This commit is contained in:
parent
d216bebce9
commit
c1dc138e3c
3 changed files with 41 additions and 30 deletions
|
@ -1,12 +1,6 @@
|
|||
use crate::{
|
||||
common::timestamp_secs,
|
||||
inventory::Storage,
|
||||
ipc::zone::{
|
||||
ActorControlCategory, ActorControlSelf, ChatMessage, NpcSpawn, ServerZoneIpcData,
|
||||
ServerZoneIpcSegment,
|
||||
},
|
||||
opcodes::ServerZoneIpcType,
|
||||
packet::{PacketSegment, SegmentData, SegmentType},
|
||||
ipc::zone::{ActorControlCategory, ActorControlSelf, ChatMessage},
|
||||
world::ToServer,
|
||||
};
|
||||
|
||||
|
@ -39,30 +33,12 @@ impl ChatHandler {
|
|||
.await;
|
||||
}
|
||||
"!spawnclone" => {
|
||||
// spawn another one of us
|
||||
let player = &connection.player_data;
|
||||
|
||||
let mut common = connection
|
||||
.get_player_common_spawn(Some(player.position), Some(player.rotation));
|
||||
common.spawn_index = connection.get_free_spawn_index();
|
||||
|
||||
let ipc = ServerZoneIpcSegment {
|
||||
op_code: ServerZoneIpcType::NpcSpawn,
|
||||
timestamp: timestamp_secs(),
|
||||
data: ServerZoneIpcData::NpcSpawn(NpcSpawn {
|
||||
common,
|
||||
..Default::default()
|
||||
}),
|
||||
..Default::default()
|
||||
};
|
||||
|
||||
connection
|
||||
.send_segment(PacketSegment {
|
||||
source_actor: 0x106ad804,
|
||||
target_actor: connection.player_data.actor_id,
|
||||
segment_type: SegmentType::Ipc,
|
||||
data: SegmentData::Ipc { data: ipc },
|
||||
})
|
||||
.handle
|
||||
.send(ToServer::DebugSpawnClone(
|
||||
connection.id,
|
||||
connection.player_data.actor_id,
|
||||
))
|
||||
.await;
|
||||
}
|
||||
"!unlockaction" => {
|
||||
|
|
|
@ -90,6 +90,8 @@ pub enum ToServer {
|
|||
DebugNewNpc(ClientId, u32),
|
||||
/// Spawn an enemy debug NPC.
|
||||
DebugNewEnemy(ClientId, u32),
|
||||
/// Spawn a debug clone.
|
||||
DebugSpawnClone(ClientId, u32),
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
|
|
|
@ -469,6 +469,39 @@ pub async fn server_main_loop(mut recv: Receiver<ToServer>) -> Result<(), std::i
|
|||
spawn,
|
||||
);
|
||||
}
|
||||
ToServer::DebugSpawnClone(_from_id, from_actor_id) => {
|
||||
let actor_id = Instance::generate_actor_id();
|
||||
let spawn;
|
||||
{
|
||||
let Some(instance) = data.find_actor_instance_mut(from_actor_id) else {
|
||||
break;
|
||||
};
|
||||
|
||||
let Some(actor) = instance.find_actor(ObjectId(from_actor_id)) else {
|
||||
break;
|
||||
};
|
||||
|
||||
let NetworkedActor::Player(player) = actor else {
|
||||
break;
|
||||
};
|
||||
|
||||
spawn = NpcSpawn {
|
||||
aggression_mode: 1,
|
||||
common: player.common.clone(),
|
||||
..Default::default()
|
||||
};
|
||||
|
||||
instance.insert_npc(ObjectId(actor_id), spawn.clone());
|
||||
}
|
||||
|
||||
data.send_npc(
|
||||
Actor {
|
||||
id: ObjectId(actor_id),
|
||||
..Default::default()
|
||||
},
|
||||
spawn,
|
||||
);
|
||||
}
|
||||
ToServer::Disconnected(from_id) => {
|
||||
data.to_remove.push(from_id);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue