From 2ba90625ce2f12633c278a1904ad752b1400994d Mon Sep 17 00:00:00 2001 From: MihailRis Date: Thu, 21 Nov 2024 05:02:45 +0300 Subject: [PATCH] add player.is_instant_destruction, .set_instant_destruction --- doc/en/scripting/builtins/libplayer.md | 7 +++++++ doc/ru/scripting/builtins/libplayer.md | 7 +++++++ src/logic/scripting/lua/libs/libplayer.cpp | 16 ++++++++++++++++ src/objects/Player.cpp | 10 ++++++++++ src/objects/Player.hpp | 4 ++++ 5 files changed, 44 insertions(+) diff --git a/doc/en/scripting/builtins/libplayer.md b/doc/en/scripting/builtins/libplayer.md index 932b17d6..99482c68 100644 --- a/doc/en/scripting/builtins/libplayer.md +++ b/doc/en/scripting/builtins/libplayer.md @@ -63,6 +63,13 @@ player.set_infinite_items(bool) Getter and setter for infinite items (not removed from inventory after use) +```lua +player.is_instant_destruction() -> bool +player.set_instant_destruction(bool) +``` + +Getter and setter for instant destruction of blocks when the `player.destroy` binding is activated. + ``` lua player.set_spawnpoint(playerid: int, x: number, y: number, z: number) player.get_spawnpoint(playerid: int) -> number, number, number diff --git a/doc/ru/scripting/builtins/libplayer.md b/doc/ru/scripting/builtins/libplayer.md index 6da5028b..179e6b18 100644 --- a/doc/ru/scripting/builtins/libplayer.md +++ b/doc/ru/scripting/builtins/libplayer.md @@ -63,6 +63,13 @@ player.set_infinite_items(bool) Геттер и сеттер бесконечных предметов (не удаляются из инвентаря при использовании) +```lua +player.is_instant_destruction() -> bool +player.set_instant_destruction(bool) +``` + +Геттер и сеттер мнгновенного разрушения блоков при активации привязки `player.destroy`. + ```lua player.set_spawnpoint(playerid: int, x: number, y: number, z: number) player.get_spawnpoint(playerid: int) -> number, number, number diff --git a/src/logic/scripting/lua/libs/libplayer.cpp b/src/logic/scripting/lua/libs/libplayer.cpp index cbd166a6..18b29405 100644 --- a/src/logic/scripting/lua/libs/libplayer.cpp +++ b/src/logic/scripting/lua/libs/libplayer.cpp @@ -142,6 +142,20 @@ static int l_set_infinite_items(lua::State* L) { return 0; } +static int l_is_instant_destruction(lua::State* L) { + if (auto player = get_player(L, 1)) { + return lua::pushboolean(L, player->isInstantDestruction()); + } + return 0; +} + +static int l_set_instant_destruction(lua::State* L) { + if (auto player = get_player(L, 1)) { + player->setInstantDestruction(lua::toboolean(L, 2)); + } + return 0; +} + static int l_get_selected_block(lua::State* L) { if (auto player = get_player(L, 1)) { if (player->selection.vox.id == BLOCK_VOID) { @@ -236,6 +250,8 @@ const luaL_Reg playerlib[] = { {"set_noclip", lua::wrap}, {"is_infinite_items", lua::wrap}, {"set_infinite_items", lua::wrap}, + {"is_instant_destruction", lua::wrap}, + {"set_instant_destruction", lua::wrap}, {"get_selected_block", lua::wrap}, {"get_selected_entity", lua::wrap}, {"set_spawnpoint", lua::wrap}, diff --git a/src/objects/Player.cpp b/src/objects/Player.cpp index 2ab41eea..5c2a2b85 100644 --- a/src/objects/Player.cpp +++ b/src/objects/Player.cpp @@ -248,6 +248,14 @@ void Player::setInfiniteItems(bool flag) { infiniteItems = flag; } +bool Player::isInstantDestruction() const { + return instantDestruction; +} + +void Player::setInstantDestruction(bool flag) { + instantDestruction = flag; +} + entityid_t Player::getEntity() const { return eid; } @@ -282,6 +290,7 @@ dv::value Player::serialize() const { root["flight"] = flight; root["noclip"] = noclip; root["infinite-items"] = infiniteItems; + root["instant-destruction"] = instantDestruction; root["chosen-slot"] = chosenSlot; root["entity"] = eid; root["inventory"] = inventory->serialize(); @@ -310,6 +319,7 @@ void Player::deserialize(const dv::value& src) { flight = src["flight"].asBoolean(); noclip = src["noclip"].asBoolean(); src.at("infinite-items").get(infiniteItems); + src.at("instant-destruction").get(instantDestruction); setChosenSlot(src["chosen-slot"].asInteger()); eid = src["entity"].asNumber(); diff --git a/src/objects/Player.hpp b/src/objects/Player.hpp index 62c818a6..2badd9dc 100644 --- a/src/objects/Player.hpp +++ b/src/objects/Player.hpp @@ -50,6 +50,7 @@ class Player : public Object, public Serializable { bool flight = false; bool noclip = false; bool infiniteItems = true; + bool instantDestruction = true; entityid_t eid; entityid_t selectedEid; public: @@ -90,6 +91,9 @@ public: bool isInfiniteItems() const; void setInfiniteItems(bool flag); + bool isInstantDestruction() const; + void setInstantDestruction(bool flag); + entityid_t getEntity() const; void setEntity(entityid_t eid);