update libplayer.cpp

This commit is contained in:
MihailRis 2026-03-09 16:51:24 +03:00
parent b49e2106b3
commit 68ef974096

View file

@ -14,6 +14,13 @@
using namespace scripting;
static Level& require_level() {
if (level == nullptr) {
throw std::runtime_error("world is not loaded");
}
return *level;
}
inline Player* get_player(lua::State* L, int idx) {
if (!lua::isnumber(L, idx)) {
if (engine->isHeadless()) {
@ -22,7 +29,7 @@ inline Player* get_player(lua::State* L, int idx) {
);
}
}
return level->players->get(lua::tointeger(L, idx));
return require_level().players->get(lua::tointeger(L, idx));
}
static int l_get_pos(lua::State* L) {
@ -304,15 +311,18 @@ static int l_create(lua::State* L) {
if (lua::gettop(L) >= 2) {
playerId = lua::tointeger(L, 2);
}
auto player = level->players->create(playerId);
auto& level = require_level();
auto player = level.players->create(playerId);
player->setName(lua::require_string(L, 1));
return lua::pushinteger(L, player->getId());
}
static int l_delete(lua::State* L) {
auto id = lua::tointeger(L, 1);
level->players->suspend(id);
level->players->remove(id);
auto& level = require_level();
level.players->suspend(id);
level.players->remove(id);
return 0;
}
@ -324,19 +334,21 @@ static int l_is_suspended(lua::State* L) {
}
static int l_set_suspended(lua::State* L) {
auto& level = require_level();
if (lua::toboolean(L, 2)) {
level->players->suspend(lua::tointeger(L, 1));
level.players->suspend(lua::tointeger(L, 1));
} else {
level->players->resume(lua::tointeger(L, 1));
level.players->resume(lua::tointeger(L, 1));
}
return 0;
}
static int l_get_all_in_radius(lua::State* L) {
auto& level = require_level();
auto center = lua::tovec3(L, 1);
auto radius = static_cast<float>(lua::tonumber(L, 2));
auto players = level->players->getAllInRadius(center, radius);
auto players = level.players->getAllInRadius(center, radius);
lua::createtable(L, players.size(), 0);
for (size_t i = 0; i < players.size(); i++) {
lua::pushinteger(L, players[i]->getId());
@ -346,7 +358,7 @@ static int l_get_all_in_radius(lua::State* L) {
}
static int l_get_all(lua::State* L) {
auto players = level->players->getAll();
auto players = require_level().players->getAll();
lua::createtable(L, players.size(), 0);
for (size_t i = 0; i < players.size(); i++) {
lua::pushinteger(L, players[i]->getId());
@ -356,8 +368,9 @@ static int l_get_all(lua::State* L) {
}
static int l_get_nearest(lua::State* L) {
auto& level = require_level();
auto position = lua::tovec3(L, 1);
if (auto player = level->players->getNearest(position)) {
if (auto player = level.players->getNearest(position)) {
lua::pushinteger(L, player->getId());
return 1;
}