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:
parent
4a36581b19
commit
a992393435
3 changed files with 68 additions and 54 deletions
|
@ -1,4 +1,3 @@
|
|||
use mlua::{UserData, UserDataMethods};
|
||||
use tokio::net::TcpStream;
|
||||
|
||||
use crate::{
|
||||
|
@ -11,7 +10,7 @@ use crate::{
|
|||
};
|
||||
|
||||
use super::{
|
||||
Inventory, Item, Zone,
|
||||
Inventory, Item, LuaPlayer, Zone,
|
||||
ipc::{
|
||||
ActorSetPos, ClientZoneIpcSegment, ContainerInfo, ContainerType, InitZone, ItemInfo,
|
||||
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
63
src/world/lua.rs
Normal 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(())
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
|
@ -7,10 +7,13 @@ mod chat_handler;
|
|||
pub use chat_handler::ChatHandler;
|
||||
|
||||
mod connection;
|
||||
pub use connection::{LuaPlayer, PlayerData, StatusEffects, ZoneConnection};
|
||||
pub use connection::{PlayerData, StatusEffects, ZoneConnection};
|
||||
|
||||
mod database;
|
||||
pub use database::{CharacterData, WorldDatabase};
|
||||
|
||||
mod inventory;
|
||||
pub use inventory::{EquippedContainer, Inventory, Item};
|
||||
|
||||
mod lua;
|
||||
pub use lua::LuaPlayer;
|
||||
|
|
Loading…
Add table
Reference in a new issue