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:
parent
fa2caa6647
commit
ef58358756
5 changed files with 53 additions and 10 deletions
38
Cargo.lock
generated
38
Cargo.lock
generated
|
@ -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"
|
||||
|
|
|
@ -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 }
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
function doAction(player)
|
||||
effects = EffectsBuilder()
|
||||
effects:damage(20)
|
||||
effects:damage("Normal", "Slashing", "Unaspected", 20)
|
||||
|
||||
return effects
|
||||
end
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Add table
Reference in a new issue