From 13c36f4629e56d7f691e6f5863bf2e29bf33c2bf Mon Sep 17 00:00:00 2001 From: MihailRis Date: Thu, 26 Dec 2024 05:47:18 +0300 Subject: [PATCH] feat: player.delete() function and update documentation --- dev/tests/chunks.lua | 2 ++ doc/en/scripting/builtins/libplayer.md | 12 ++++++++++++ doc/ru/scripting/builtins/libplayer.md | 12 ++++++++++++ src/logic/scripting/lua/libs/libplayer.cpp | 6 ++++++ src/objects/Players.cpp | 4 ++++ src/objects/Players.hpp | 2 ++ 6 files changed, 38 insertions(+) diff --git a/dev/tests/chunks.lua b/dev/tests/chunks.lua index dfc2fced..1bab108f 100644 --- a/dev/tests/chunks.lua +++ b/dev/tests/chunks.lua @@ -24,4 +24,6 @@ for i=1,25 do app.tick() end +player.delete(pid2) + app.close_world(true) diff --git a/doc/en/scripting/builtins/libplayer.md b/doc/en/scripting/builtins/libplayer.md index 52324d30..041bf442 100644 --- a/doc/en/scripting/builtins/libplayer.md +++ b/doc/en/scripting/builtins/libplayer.md @@ -1,5 +1,17 @@ # *player* library +```lua +player.create(name: str) -> int +``` + +Creates a player and returns id. + +```lua +player.delete(id: int) +``` + +Deletes a player by id. + ```lua player.get_pos(playerid: int) -> number, number, number ``` diff --git a/doc/ru/scripting/builtins/libplayer.md b/doc/ru/scripting/builtins/libplayer.md index 01a6d581..a9662015 100644 --- a/doc/ru/scripting/builtins/libplayer.md +++ b/doc/ru/scripting/builtins/libplayer.md @@ -1,5 +1,17 @@ # Библиотека *player* +```lua +player.create(name: str) -> int +``` + +Создаёт игрока и возвращает его id. + +```lua +player.delete(id: int) +``` + +Удаляет игрока по id. + ```lua player.get_pos(playerid: int) -> number, number, number ``` diff --git a/src/logic/scripting/lua/libs/libplayer.cpp b/src/logic/scripting/lua/libs/libplayer.cpp index b8800b4c..af908aea 100644 --- a/src/logic/scripting/lua/libs/libplayer.cpp +++ b/src/logic/scripting/lua/libs/libplayer.cpp @@ -279,6 +279,11 @@ static int l_create(lua::State* L) { return lua::pushinteger(L, player->getId()); } +static int l_delete(lua::State* L) { + level->players->remove(lua::tointeger(L, 1)); + return 0; +} + const luaL_Reg playerlib[] = { {"get_pos", lua::wrap}, {"set_pos", lua::wrap}, @@ -310,5 +315,6 @@ const luaL_Reg playerlib[] = { {"get_name", lua::wrap}, {"set_name", lua::wrap}, {"create", lua::wrap}, + {"delete", lua::wrap}, {NULL, NULL} }; diff --git a/src/objects/Players.cpp b/src/objects/Players.cpp index 20a4f34d..1a683a34 100644 --- a/src/objects/Players.cpp +++ b/src/objects/Players.cpp @@ -36,6 +36,10 @@ Player* Players::create() { return player; } +void Players::remove(int64_t id) { + players.erase(id); +} + dv::value Players::serialize() const { auto root = dv::object(); auto& list = root.list("players"); diff --git a/src/objects/Players.hpp b/src/objects/Players.hpp index 04b90c51..74f5c565 100644 --- a/src/objects/Players.hpp +++ b/src/objects/Players.hpp @@ -25,6 +25,8 @@ public: Player* create(); + void remove(int64_t id); + dv::value serialize() const override; void deserialize(const dv::value& src) override;