mirror of
https://github.com/redstrate/Kawari.git
synced 2025-06-08 01:17:46 +00:00
Add ObjectId and ObjectTypeId structs
This is to make it easier to defaut to INVALID_OBJECT_ID. To test if this works, the actor from !spawnnpc should target the player.
This commit is contained in:
parent
9111ef6a82
commit
3f23eea9c7
3 changed files with 44 additions and 11 deletions
|
@ -4,6 +4,7 @@ use std::{
|
||||||
};
|
};
|
||||||
|
|
||||||
mod customize_data;
|
mod customize_data;
|
||||||
|
use binrw::binrw;
|
||||||
pub use customize_data::CustomizeData;
|
pub use customize_data::CustomizeData;
|
||||||
use physis::{
|
use physis::{
|
||||||
common::{Language, Platform},
|
common::{Language, Platform},
|
||||||
|
@ -17,8 +18,38 @@ pub mod custom_ipc;
|
||||||
mod position;
|
mod position;
|
||||||
pub use position::Position;
|
pub use position::Position;
|
||||||
|
|
||||||
|
#[binrw]
|
||||||
|
#[brw(little)]
|
||||||
|
#[derive(Debug, Clone)]
|
||||||
|
pub struct ObjectId(pub u32);
|
||||||
|
|
||||||
|
impl Default for ObjectId {
|
||||||
|
fn default() -> Self {
|
||||||
|
INVALID_OBJECT_ID
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// See https://github.com/aers/FFXIVClientStructs/blob/main/FFXIVClientStructs/FFXIV/Client/Game/Object/GameObject.cs#L158
|
||||||
|
#[binrw]
|
||||||
|
#[brw(little)]
|
||||||
|
#[derive(Debug, Clone)]
|
||||||
|
pub struct ObjectTypeId {
|
||||||
|
pub object_id: ObjectId,
|
||||||
|
#[brw(pad_after = 3)]
|
||||||
|
pub object_type: u8,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for ObjectTypeId {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self {
|
||||||
|
object_id: INVALID_OBJECT_ID,
|
||||||
|
object_type: 0, // TODO: not sure if correct?
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// An invalid actor/object id.
|
/// An invalid actor/object id.
|
||||||
pub const INVALID_OBJECT_ID: u32 = 0xE0000000;
|
pub const INVALID_OBJECT_ID: ObjectId = ObjectId(0xE0000000);
|
||||||
|
|
||||||
/// Maxmimum length of a character's name.
|
/// Maxmimum length of a character's name.
|
||||||
pub const CHAR_NAME_MAX_LENGTH: usize = 32;
|
pub const CHAR_NAME_MAX_LENGTH: usize = 32;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
use crate::{
|
use crate::{
|
||||||
common::{CustomizeData, INVALID_OBJECT_ID, Position, timestamp_secs},
|
common::{CustomizeData, INVALID_OBJECT_ID, ObjectId, ObjectTypeId, Position, timestamp_secs},
|
||||||
config::get_config,
|
config::get_config,
|
||||||
packet::{PacketSegment, SegmentType},
|
packet::{PacketSegment, SegmentType},
|
||||||
world::ipc::{
|
world::ipc::{
|
||||||
|
@ -191,9 +191,11 @@ impl ChatHandler {
|
||||||
spawn_index: connection.get_free_spawn_index(),
|
spawn_index: connection.get_free_spawn_index(),
|
||||||
bnpc_base: 13498,
|
bnpc_base: 13498,
|
||||||
bnpc_name: 10261,
|
bnpc_name: 10261,
|
||||||
spawner_id: connection.player_data.actor_id,
|
|
||||||
parent_actor_id: INVALID_OBJECT_ID, // TODO: make default?
|
|
||||||
object_kind: ObjectKind::BattleNpc,
|
object_kind: ObjectKind::BattleNpc,
|
||||||
|
target_id: ObjectTypeId {
|
||||||
|
object_id: ObjectId(connection.player_data.actor_id),
|
||||||
|
object_type: 0,
|
||||||
|
}, // target the player
|
||||||
level: 1,
|
level: 1,
|
||||||
models: [
|
models: [
|
||||||
0, // head
|
0, // head
|
||||||
|
@ -241,10 +243,7 @@ impl ChatHandler {
|
||||||
spawn_index: connection.get_free_spawn_index(),
|
spawn_index: connection.get_free_spawn_index(),
|
||||||
bnpc_base: 13498, // TODO: changing this prevents it from spawning...
|
bnpc_base: 13498, // TODO: changing this prevents it from spawning...
|
||||||
bnpc_name: 405,
|
bnpc_name: 405,
|
||||||
spawner_id: connection.player_data.actor_id,
|
|
||||||
parent_actor_id: INVALID_OBJECT_ID, // TODO: make default?
|
|
||||||
object_kind: ObjectKind::BattleNpc,
|
object_kind: ObjectKind::BattleNpc,
|
||||||
target_id: INVALID_OBJECT_ID as u64,
|
|
||||||
level: 1,
|
level: 1,
|
||||||
battalion: 4,
|
battalion: 4,
|
||||||
model_chara: 297,
|
model_chara: 297,
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
use binrw::binrw;
|
use binrw::binrw;
|
||||||
|
|
||||||
use crate::common::{CHAR_NAME_MAX_LENGTH, CustomizeData, Position, read_string, write_string};
|
use crate::common::{
|
||||||
|
CHAR_NAME_MAX_LENGTH, CustomizeData, INVALID_OBJECT_ID, ObjectId, ObjectTypeId, Position,
|
||||||
|
read_string, write_string,
|
||||||
|
};
|
||||||
|
|
||||||
use super::StatusEffect;
|
use super::StatusEffect;
|
||||||
|
|
||||||
|
@ -58,7 +61,7 @@ pub struct CommonSpawn {
|
||||||
pub u5b: u8,
|
pub u5b: u8,
|
||||||
pub u5c: u8,
|
pub u5c: u8,
|
||||||
|
|
||||||
pub target_id: u64,
|
pub target_id: ObjectTypeId,
|
||||||
pub u6: u32,
|
pub u6: u32,
|
||||||
pub u7: u32,
|
pub u7: u32,
|
||||||
pub main_weapon_model: u64,
|
pub main_weapon_model: u64,
|
||||||
|
@ -73,8 +76,8 @@ pub struct CommonSpawn {
|
||||||
pub bnpc_name: u32,
|
pub bnpc_name: u32,
|
||||||
pub unk3: [u8; 8],
|
pub unk3: [u8; 8],
|
||||||
pub director_id: u32, // FIXME: i think the next three are in the wrong order
|
pub director_id: u32, // FIXME: i think the next three are in the wrong order
|
||||||
pub spawner_id: u32,
|
pub spawner_id: ObjectId,
|
||||||
pub parent_actor_id: u32,
|
pub parent_actor_id: ObjectId,
|
||||||
pub hp_max: u32,
|
pub hp_max: u32,
|
||||||
pub hp_curr: u32,
|
pub hp_curr: u32,
|
||||||
pub display_flags: u32, // assumed
|
pub display_flags: u32, // assumed
|
||||||
|
|
Loading…
Add table
Reference in a new issue