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::{
|
use crate::{
|
||||||
common::timestamp_secs,
|
|
||||||
inventory::Storage,
|
inventory::Storage,
|
||||||
ipc::zone::{
|
ipc::zone::{ActorControlCategory, ActorControlSelf, ChatMessage},
|
||||||
ActorControlCategory, ActorControlSelf, ChatMessage, NpcSpawn, ServerZoneIpcData,
|
|
||||||
ServerZoneIpcSegment,
|
|
||||||
},
|
|
||||||
opcodes::ServerZoneIpcType,
|
|
||||||
packet::{PacketSegment, SegmentData, SegmentType},
|
|
||||||
world::ToServer,
|
world::ToServer,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -39,30 +33,12 @@ impl ChatHandler {
|
||||||
.await;
|
.await;
|
||||||
}
|
}
|
||||||
"!spawnclone" => {
|
"!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
|
connection
|
||||||
.send_segment(PacketSegment {
|
.handle
|
||||||
source_actor: 0x106ad804,
|
.send(ToServer::DebugSpawnClone(
|
||||||
target_actor: connection.player_data.actor_id,
|
connection.id,
|
||||||
segment_type: SegmentType::Ipc,
|
connection.player_data.actor_id,
|
||||||
data: SegmentData::Ipc { data: ipc },
|
))
|
||||||
})
|
|
||||||
.await;
|
.await;
|
||||||
}
|
}
|
||||||
"!unlockaction" => {
|
"!unlockaction" => {
|
||||||
|
|
|
@ -90,6 +90,8 @@ pub enum ToServer {
|
||||||
DebugNewNpc(ClientId, u32),
|
DebugNewNpc(ClientId, u32),
|
||||||
/// Spawn an enemy debug NPC.
|
/// Spawn an enemy debug NPC.
|
||||||
DebugNewEnemy(ClientId, u32),
|
DebugNewEnemy(ClientId, u32),
|
||||||
|
/// Spawn a debug clone.
|
||||||
|
DebugSpawnClone(ClientId, u32),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
|
|
|
@ -469,6 +469,39 @@ pub async fn server_main_loop(mut recv: Receiver<ToServer>) -> Result<(), std::i
|
||||||
spawn,
|
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) => {
|
ToServer::Disconnected(from_id) => {
|
||||||
data.to_remove.push(from_id);
|
data.to_remove.push(from_id);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue