1
Fork 0
mirror of https://github.com/redstrate/Kawari.git synced 2025-05-19 17:27:45 +00:00

Move LuaPlayer to it's own module

This commit is contained in:
Joshua Goins 2025-03-28 00:26:31 -04:00
parent 4a36581b19
commit a992393435
3 changed files with 68 additions and 54 deletions

View file

@ -1,4 +1,3 @@
use mlua::{UserData, UserDataMethods};
use tokio::net::TcpStream; use tokio::net::TcpStream;
use crate::{ use crate::{
@ -11,7 +10,7 @@ use crate::{
}; };
use super::{ use super::{
Inventory, Item, Zone, Inventory, Item, LuaPlayer, Zone,
ipc::{ ipc::{
ActorSetPos, ClientZoneIpcSegment, ContainerInfo, ContainerType, InitZone, ItemInfo, ActorSetPos, ClientZoneIpcSegment, ContainerInfo, ContainerType, InitZone, ItemInfo,
ServerZoneIpcData, ServerZoneIpcSegment, StatusEffect, StatusEffectList, UpdateClassInfo, ServerZoneIpcData, ServerZoneIpcSegment, StatusEffect, StatusEffectList, UpdateClassInfo,
@ -325,54 +324,3 @@ impl ZoneConnection {
} }
} }
} }
#[derive(Default)]
pub struct LuaPlayer {
pub player_data: PlayerData,
pub status_effects: StatusEffects,
queued_segments: Vec<PacketSegment<ServerZoneIpcSegment>>,
}
impl LuaPlayer {
fn queue_segment(&mut self, segment: PacketSegment<ServerZoneIpcSegment>) {
self.queued_segments.push(segment);
}
fn send_message(&mut self, message: &str) {
let ipc = ServerZoneIpcSegment {
op_code: ServerZoneIpcType::ServerChatMessage,
timestamp: timestamp_secs(),
data: ServerZoneIpcData::ServerChatMessage {
message: message.to_string(),
unk: 0,
},
..Default::default()
};
self.queue_segment(PacketSegment {
source_actor: self.player_data.actor_id,
target_actor: self.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
});
}
fn give_status_effect(&mut self, effect_id: u16, duration: f32) {
self.status_effects.add(effect_id, duration);
}
}
impl UserData for LuaPlayer {
fn add_methods<M: UserDataMethods<Self>>(methods: &mut M) {
methods.add_method_mut("send_message", |_, this, message: String| {
this.send_message(&message);
Ok(())
});
methods.add_method_mut(
"give_status_effect",
|_, this, (effect_id, duration): (u16, f32)| {
this.give_status_effect(effect_id, duration);
Ok(())
},
);
}
}

63
src/world/lua.rs Normal file
View file

@ -0,0 +1,63 @@
use mlua::{UserData, UserDataMethods};
use crate::{
common::timestamp_secs,
opcodes::ServerZoneIpcType,
packet::{PacketSegment, SegmentType},
};
use super::{
PlayerData, StatusEffects,
ipc::{ServerZoneIpcData, ServerZoneIpcSegment},
};
#[derive(Default)]
pub struct LuaPlayer {
pub player_data: PlayerData,
pub status_effects: StatusEffects,
pub queued_segments: Vec<PacketSegment<ServerZoneIpcSegment>>,
}
impl LuaPlayer {
fn queue_segment(&mut self, segment: PacketSegment<ServerZoneIpcSegment>) {
self.queued_segments.push(segment);
}
fn send_message(&mut self, message: &str) {
let ipc = ServerZoneIpcSegment {
op_code: ServerZoneIpcType::ServerChatMessage,
timestamp: timestamp_secs(),
data: ServerZoneIpcData::ServerChatMessage {
message: message.to_string(),
unk: 0,
},
..Default::default()
};
self.queue_segment(PacketSegment {
source_actor: self.player_data.actor_id,
target_actor: self.player_data.actor_id,
segment_type: SegmentType::Ipc { data: ipc },
});
}
fn give_status_effect(&mut self, effect_id: u16, duration: f32) {
self.status_effects.add(effect_id, duration);
}
}
impl UserData for LuaPlayer {
fn add_methods<M: UserDataMethods<Self>>(methods: &mut M) {
methods.add_method_mut("send_message", |_, this, message: String| {
this.send_message(&message);
Ok(())
});
methods.add_method_mut(
"give_status_effect",
|_, this, (effect_id, duration): (u16, f32)| {
this.give_status_effect(effect_id, duration);
Ok(())
},
);
}
}

View file

@ -7,10 +7,13 @@ mod chat_handler;
pub use chat_handler::ChatHandler; pub use chat_handler::ChatHandler;
mod connection; mod connection;
pub use connection::{LuaPlayer, PlayerData, StatusEffects, ZoneConnection}; pub use connection::{PlayerData, StatusEffects, ZoneConnection};
mod database; mod database;
pub use database::{CharacterData, WorldDatabase}; pub use database::{CharacterData, WorldDatabase};
mod inventory; mod inventory;
pub use inventory::{EquippedContainer, Inventory, Item}; pub use inventory::{EquippedContainer, Inventory, Item};
mod lua;
pub use lua::LuaPlayer;