1
Fork 0
mirror of https://github.com/redstrate/Kawari.git synced 2025-04-20 06:37:45 +00:00

Expose Damage kind, element and type in Lua API

This commit is contained in:
Joshua Goins 2025-04-18 14:32:39 -04:00
parent fa2caa6647
commit ef58358756
5 changed files with 53 additions and 10 deletions

38
Cargo.lock generated
View file

@ -333,6 +333,16 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
[[package]]
name = "erased-serde"
version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7"
dependencies = [
"serde",
"typeid",
]
[[package]] [[package]]
name = "errno" name = "errno"
version = "0.3.11" version = "0.3.11"
@ -904,11 +914,14 @@ checksum = "d3f763c1041eff92ffb5d7169968a327e1ed2ebfe425dac0ee5a35f29082534b"
dependencies = [ dependencies = [
"bstr", "bstr",
"either", "either",
"erased-serde",
"futures-util", "futures-util",
"mlua-sys", "mlua-sys",
"num-traits", "num-traits",
"parking_lot", "parking_lot",
"rustc-hash", "rustc-hash",
"serde",
"serde-value",
] ]
[[package]] [[package]]
@ -954,6 +967,15 @@ version = "1.21.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
[[package]]
name = "ordered-float"
version = "2.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c"
dependencies = [
"num-traits",
]
[[package]] [[package]]
name = "parking_lot" name = "parking_lot"
version = "0.12.3" version = "0.12.3"
@ -1199,6 +1221,16 @@ dependencies = [
"serde_derive", "serde_derive",
] ]
[[package]]
name = "serde-value"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c"
dependencies = [
"ordered-float",
"serde",
]
[[package]] [[package]]
name = "serde_derive" name = "serde_derive"
version = "1.0.219" version = "1.0.219"
@ -1492,6 +1524,12 @@ version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
[[package]]
name = "typeid"
version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c"
[[package]] [[package]]
name = "unicode-ident" name = "unicode-ident"
version = "1.0.18" version = "1.0.18"

View file

@ -87,7 +87,7 @@ rusqlite = { version = "0.34", features = ["bundled"], default-features = false
bitflags = { version = "1.3", default-features = false } bitflags = { version = "1.3", default-features = false }
# For server-side scripting # For server-side scripting
mlua = { version = "0.10", features = ["lua51", "vendored", "send", "async"], default-features = false } mlua = { version = "0.10", features = ["lua51", "vendored", "send", "async", "serialize"], default-features = false }
# For character backup decompression # For character backup decompression
zip = { version = "2.6", features = ["deflate", "lzma", "bzip2"], default-features = false } zip = { version = "2.6", features = ["deflate", "lzma", "bzip2"], default-features = false }

View file

@ -1,6 +1,6 @@
function doAction(player) function doAction(player)
effects = EffectsBuilder() effects = EffectsBuilder()
effects:damage(20) effects:damage("Normal", "Slashing", "Unaspected", 20)
return effects return effects
end end

View file

@ -1,10 +1,11 @@
use binrw::binrw; use binrw::binrw;
use serde::{Deserialize, Serialize};
use crate::common::{ObjectTypeId, read_quantized_rotation, write_quantized_rotation}; use crate::common::{ObjectTypeId, read_quantized_rotation, write_quantized_rotation};
// TODO: this might be a flag? // TODO: this might be a flag?
#[binrw] #[binrw]
#[derive(Debug, Eq, PartialEq, Clone, Copy, Default)] #[derive(Debug, Eq, PartialEq, Clone, Copy, Default, Deserialize, Serialize)]
#[brw(repr = u8)] #[brw(repr = u8)]
pub enum DamageKind { pub enum DamageKind {
#[default] #[default]
@ -40,7 +41,7 @@ pub enum EffectKind {
BeginCombo, BeginCombo,
} }
#[derive(Debug, Eq, PartialEq, Clone, Copy, Default)] #[derive(Debug, Eq, PartialEq, Clone, Copy, Default, Deserialize, Serialize)]
pub enum DamageType { pub enum DamageType {
Unknown, Unknown,
Slashing, Slashing,
@ -71,7 +72,7 @@ impl From<u8> for DamageType {
} }
} }
#[derive(Debug, Eq, PartialEq, Clone, Copy, Default)] #[derive(Debug, Eq, PartialEq, Clone, Copy, Default, Deserialize, Serialize)]
pub enum DamageElement { pub enum DamageElement {
Unknown, Unknown,
Fire, Fire,

View file

@ -1,4 +1,4 @@
use mlua::{FromLua, Lua, UserData, UserDataMethods, Value}; use mlua::{FromLua, Lua, LuaSerdeExt, UserData, UserDataMethods, Value};
use crate::{ use crate::{
common::{ObjectId, ObjectTypeId, Position, timestamp_secs}, common::{ObjectId, ObjectTypeId, Position, timestamp_secs},
@ -172,12 +172,16 @@ pub struct EffectsBuilder {
impl UserData for EffectsBuilder { impl UserData for EffectsBuilder {
fn add_methods<M: UserDataMethods<Self>>(methods: &mut M) { fn add_methods<M: UserDataMethods<Self>>(methods: &mut M) {
methods.add_method_mut("damage", |_, this, amount: u16| { methods.add_method_mut("damage", |lua, this, (damage_kind, damage_type, damage_element, amount): (Value, Value, Value, u16)| {
let damage_kind: DamageKind = lua.from_value(damage_kind).unwrap();
let damage_type: DamageType = lua.from_value(damage_type).unwrap();
let damage_element: DamageElement = lua.from_value(damage_element).unwrap();
this.effects.push(ActionEffect { this.effects.push(ActionEffect {
kind: EffectKind::Damage { kind: EffectKind::Damage {
damage_kind: DamageKind::Normal, damage_kind,
damage_type: DamageType::Slashing, damage_type,
damage_element: DamageElement::Unaspected, damage_element,
bonus_percent: 0, bonus_percent: 0,
unk3: 0, unk3: 0,
unk4: 0, unk4: 0,