1
Fork 0
mirror of https://github.com/redstrate/Kawari.git synced 2025-04-19 22:36:49 +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"
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]]
name = "errno"
version = "0.3.11"
@ -904,11 +914,14 @@ checksum = "d3f763c1041eff92ffb5d7169968a327e1ed2ebfe425dac0ee5a35f29082534b"
dependencies = [
"bstr",
"either",
"erased-serde",
"futures-util",
"mlua-sys",
"num-traits",
"parking_lot",
"rustc-hash",
"serde",
"serde-value",
]
[[package]]
@ -954,6 +967,15 @@ version = "1.21.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
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]]
name = "parking_lot"
version = "0.12.3"
@ -1199,6 +1221,16 @@ dependencies = [
"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]]
name = "serde_derive"
version = "1.0.219"
@ -1492,6 +1524,12 @@ version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
[[package]]
name = "typeid"
version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c"
[[package]]
name = "unicode-ident"
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 }
# 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
zip = { version = "2.6", features = ["deflate", "lzma", "bzip2"], default-features = false }

View file

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

View file

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

View file

@ -1,4 +1,4 @@
use mlua::{FromLua, Lua, UserData, UserDataMethods, Value};
use mlua::{FromLua, Lua, LuaSerdeExt, UserData, UserDataMethods, Value};
use crate::{
common::{ObjectId, ObjectTypeId, Position, timestamp_secs},
@ -172,12 +172,16 @@ pub struct EffectsBuilder {
impl UserData for EffectsBuilder {
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 {
kind: EffectKind::Damage {
damage_kind: DamageKind::Normal,
damage_type: DamageType::Slashing,
damage_element: DamageElement::Unaspected,
damage_kind,
damage_type,
damage_element,
bonus_percent: 0,
unk3: 0,
unk4: 0,