6 changes: 6 additions & 0 deletions src/script/lua_api/l_nodetimer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ NodeTimerRef* NodeTimerRef::checkobject(lua_State *L, int narg)

int NodeTimerRef::l_set(lua_State *L)
{
MAP_LOCK_REQUIRED;
NodeTimerRef *o = checkobject(L, 1);
ServerEnvironment *env = o->m_env;
if(env == NULL) return 0;
Expand All @@ -50,6 +51,7 @@ int NodeTimerRef::l_set(lua_State *L)

int NodeTimerRef::l_start(lua_State *L)
{
MAP_LOCK_REQUIRED;
NodeTimerRef *o = checkobject(L, 1);
ServerEnvironment *env = o->m_env;
if(env == NULL) return 0;
Expand All @@ -60,6 +62,7 @@ int NodeTimerRef::l_start(lua_State *L)

int NodeTimerRef::l_stop(lua_State *L)
{
MAP_LOCK_REQUIRED;
NodeTimerRef *o = checkobject(L, 1);
ServerEnvironment *env = o->m_env;
if(env == NULL) return 0;
Expand All @@ -69,6 +72,7 @@ int NodeTimerRef::l_stop(lua_State *L)

int NodeTimerRef::l_is_started(lua_State *L)
{
MAP_LOCK_REQUIRED;
NodeTimerRef *o = checkobject(L, 1);
ServerEnvironment *env = o->m_env;
if(env == NULL) return 0;
Expand All @@ -80,6 +84,7 @@ int NodeTimerRef::l_is_started(lua_State *L)

int NodeTimerRef::l_get_timeout(lua_State *L)
{
MAP_LOCK_REQUIRED;
NodeTimerRef *o = checkobject(L, 1);
ServerEnvironment *env = o->m_env;
if(env == NULL) return 0;
Expand All @@ -91,6 +96,7 @@ int NodeTimerRef::l_get_timeout(lua_State *L)

int NodeTimerRef::l_get_elapsed(lua_State *L)
{
MAP_LOCK_REQUIRED;
NodeTimerRef *o = checkobject(L, 1);
ServerEnvironment *env = o->m_env;
if(env == NULL) return 0;
Expand Down
5 changes: 5 additions & 0 deletions src/script/lua_api/l_noise.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -410,6 +410,7 @@ const luaL_reg LuaPerlinNoiseMap::methods[] = {
int LuaPseudoRandom::l_next(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;

LuaPseudoRandom *o = checkobject(L, 1);
int min = 0;
int max = 32767;
Expand Down Expand Up @@ -437,6 +438,8 @@ int LuaPseudoRandom::l_next(lua_State *L)

int LuaPseudoRandom::create_object(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;

int seed = luaL_checknumber(L, 1);
LuaPseudoRandom *o = new LuaPseudoRandom(seed);
*(void **)(lua_newuserdata(L, sizeof(void *))) = o;
Expand Down Expand Up @@ -532,6 +535,8 @@ int LuaPcgRandom::l_rand_normal_dist(lua_State *L)

int LuaPcgRandom::create_object(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;

lua_Integer seed = luaL_checknumber(L, 1);
LuaPcgRandom *o = lua_isnumber(L, 2) ?
new LuaPcgRandom(seed, lua_tointeger(L, 2)) :
Expand Down
34 changes: 22 additions & 12 deletions src/script/lua_api/l_object.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "hud.h"
#include "scripting_game.h"

#define GET_ENV_PTR ServerEnvironment* env = \
dynamic_cast<ServerEnvironment*>(getEnv(L)); \
if (env == NULL) return 0

struct EnumString es_HudElementType[] =
{
{HUD_ELEM_IMAGE, "image"},
Expand Down Expand Up @@ -132,7 +128,6 @@ int ObjectRef::gc_object(lua_State *L) {
// remove(self)
int ObjectRef::l_remove(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
GET_ENV_PTR;

ObjectRef *ref = checkobject(L, 1);
Expand Down Expand Up @@ -409,6 +404,7 @@ int ObjectRef::l_get_armor_groups(lua_State *L)
// physics_override_gravity, sneak, sneak_glitch)
int ObjectRef::l_set_physics_override(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
PlayerSAO *co = (PlayerSAO *) getobject(ref);
if (co == NULL) return 0;
Expand Down Expand Up @@ -441,6 +437,7 @@ int ObjectRef::l_set_physics_override(lua_State *L)
// get_physics_override(self)
int ObjectRef::l_get_physics_override(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
PlayerSAO *co = (PlayerSAO *)getobject(ref);
if (co == NULL)
Expand Down Expand Up @@ -509,7 +506,7 @@ int ObjectRef::l_get_animation(lua_State *L)
// set_local_animation(self, {stand/idle}, {walk}, {dig}, {walk+dig}, frame_speed)
int ObjectRef::l_set_local_animation(lua_State *L)
{
//NO_MAP_LOCK_REQUIRED;
NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
Expand All @@ -534,7 +531,7 @@ int ObjectRef::l_set_local_animation(lua_State *L)
// get_local_animation(self)
int ObjectRef::l_get_local_animation(lua_State *L)
{
//NO_MAP_LOCK_REQUIRED
NO_MAP_LOCK_REQUIRED
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
Expand All @@ -555,7 +552,7 @@ int ObjectRef::l_get_local_animation(lua_State *L)
// set_eye_offset(self, v3f first pv, v3f third pv)
int ObjectRef::l_set_eye_offset(lua_State *L)
{
//NO_MAP_LOCK_REQUIRED;
NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
Expand Down Expand Up @@ -585,7 +582,7 @@ int ObjectRef::l_set_eye_offset(lua_State *L)
// get_eye_offset(self)
int ObjectRef::l_get_eye_offset(lua_State *L)
{
//NO_MAP_LOCK_REQUIRED;
NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
Expand Down Expand Up @@ -642,7 +639,6 @@ int ObjectRef::l_get_bone_position(lua_State *L)
// set_attach(self, parent, bone, position, rotation)
int ObjectRef::l_set_attach(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
GET_ENV_PTR;

ObjectRef *ref = checkobject(L, 1);
Expand Down Expand Up @@ -681,7 +677,6 @@ int ObjectRef::l_set_attach(lua_State *L)
// get_attach(self)
int ObjectRef::l_get_attach(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
GET_ENV_PTR;

ObjectRef *ref = checkobject(L, 1);
Expand Down Expand Up @@ -709,7 +704,6 @@ int ObjectRef::l_get_attach(lua_State *L)
// set_detach(self)
int ObjectRef::l_set_detach(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
GET_ENV_PTR;

ObjectRef *ref = checkobject(L, 1);
Expand Down Expand Up @@ -1137,6 +1131,7 @@ int ObjectRef::l_get_player_control_bits(lua_State *L)
// hud_add(self, form)
int ObjectRef::l_hud_add(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
Expand Down Expand Up @@ -1199,6 +1194,7 @@ int ObjectRef::l_hud_add(lua_State *L)
// hud_remove(self, id)
int ObjectRef::l_hud_remove(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
Expand All @@ -1218,6 +1214,7 @@ int ObjectRef::l_hud_remove(lua_State *L)
// hud_change(self, id, stat, data)
int ObjectRef::l_hud_change(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
Expand Down Expand Up @@ -1294,6 +1291,7 @@ int ObjectRef::l_hud_change(lua_State *L)
// hud_get(self, id)
int ObjectRef::l_hud_get(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
Expand Down Expand Up @@ -1344,6 +1342,7 @@ int ObjectRef::l_hud_get(lua_State *L)
// hud_set_flags(self, flags)
int ObjectRef::l_hud_set_flags(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
Expand All @@ -1369,6 +1368,7 @@ int ObjectRef::l_hud_set_flags(lua_State *L)

int ObjectRef::l_hud_get_flags(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
Expand All @@ -1394,6 +1394,7 @@ int ObjectRef::l_hud_get_flags(lua_State *L)
// hud_set_hotbar_itemcount(self, hotbar_itemcount)
int ObjectRef::l_hud_set_hotbar_itemcount(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
Expand All @@ -1411,6 +1412,7 @@ int ObjectRef::l_hud_set_hotbar_itemcount(lua_State *L)
// hud_get_hotbar_itemcount(self)
int ObjectRef::l_hud_get_hotbar_itemcount(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
Expand All @@ -1425,6 +1427,7 @@ int ObjectRef::l_hud_get_hotbar_itemcount(lua_State *L)
// hud_set_hotbar_image(self, name)
int ObjectRef::l_hud_set_hotbar_image(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
Expand All @@ -1439,6 +1442,7 @@ int ObjectRef::l_hud_set_hotbar_image(lua_State *L)
// hud_get_hotbar_image(self)
int ObjectRef::l_hud_get_hotbar_image(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
Expand All @@ -1452,6 +1456,7 @@ int ObjectRef::l_hud_get_hotbar_image(lua_State *L)
// hud_set_hotbar_selected_image(self, name)
int ObjectRef::l_hud_set_hotbar_selected_image(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
Expand All @@ -1466,6 +1471,7 @@ int ObjectRef::l_hud_set_hotbar_selected_image(lua_State *L)
// hud_get_hotbar_selected_image(self)
int ObjectRef::l_hud_get_hotbar_selected_image(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
Expand All @@ -1479,6 +1485,7 @@ int ObjectRef::l_hud_get_hotbar_selected_image(lua_State *L)
// set_sky(self, bgcolor, type, list)
int ObjectRef::l_set_sky(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
Expand Down Expand Up @@ -1517,6 +1524,7 @@ int ObjectRef::l_set_sky(lua_State *L)
// get_sky(self)
int ObjectRef::l_get_sky(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
Expand Down Expand Up @@ -1544,6 +1552,7 @@ int ObjectRef::l_get_sky(lua_State *L)
// override_day_night_ratio(self, brightness=0...1)
int ObjectRef::l_override_day_night_ratio(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
Expand All @@ -1566,6 +1575,7 @@ int ObjectRef::l_override_day_night_ratio(lua_State *L)
// get_day_night_ratio(self)
int ObjectRef::l_get_day_night_ratio(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
Expand Down
6 changes: 6 additions & 0 deletions src/script/lua_api/l_particles.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
// texture = e.g."default_wood.png"
int ModApiParticles::l_add_particle(lua_State *L)
{
MAP_LOCK_REQUIRED;

// Get parameters
v3f pos, vel, acc;
pos = vel = acc = v3f(0, 0, 0);
Expand Down Expand Up @@ -119,6 +121,8 @@ int ModApiParticles::l_add_particle(lua_State *L)
// texture = e.g."default_wood.png"
int ModApiParticles::l_add_particlespawner(lua_State *L)
{
MAP_LOCK_REQUIRED;

// Get parameters
u16 amount = 1;
v3f minpos, maxpos, minvel, maxvel, minacc, maxacc;
Expand Down Expand Up @@ -208,6 +212,8 @@ int ModApiParticles::l_add_particlespawner(lua_State *L)
// player (string) is optional
int ModApiParticles::l_delete_particlespawner(lua_State *L)
{
MAP_LOCK_REQUIRED;

// Get parameters
u32 id = luaL_checknumber(L, 1);
std::string playername = "";
Expand Down
4 changes: 4 additions & 0 deletions src/script/lua_api/l_rollback.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ void push_RollbackNode(lua_State *L, RollbackNode &node)
// rollback_get_node_actions(pos, range, seconds, limit) -> {{actor, pos, time, oldnode, newnode}, ...}
int ModApiRollback::l_rollback_get_node_actions(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;

v3s16 pos = read_v3s16(L, 1);
int range = luaL_checknumber(L, 2);
time_t seconds = (time_t) luaL_checknumber(L, 3);
Expand Down Expand Up @@ -79,6 +81,8 @@ int ModApiRollback::l_rollback_get_node_actions(lua_State *L)
// rollback_revert_actions_by(actor, seconds) -> bool, log messages
int ModApiRollback::l_rollback_revert_actions_by(lua_State *L)
{
MAP_LOCK_REQUIRED;

std::string actor = luaL_checkstring(L, 1);
int seconds = luaL_checknumber(L, 2);
Server *server = getServer(L);
Expand Down
1 change: 1 addition & 0 deletions src/script/lua_api/l_server.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
// request_shutdown()
int ModApiServer::l_request_shutdown(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
const char *msg = lua_tolstring(L, 1, NULL);
bool reconnect = lua_toboolean(L, 2);
getServer(L)->requestShutdown(msg ? msg : "", reconnect);
Expand Down
6 changes: 6 additions & 0 deletions src/script/lua_api/l_util.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,8 @@ int ModApiUtil::l_is_yes(lua_State *L)

int ModApiUtil::l_get_builtin_path(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;

std::string path = porting::path_share + DIR_DELIM + "builtin";
lua_pushstring(L, path.c_str());
return 1;
Expand All @@ -268,6 +270,8 @@ int ModApiUtil::l_get_builtin_path(lua_State *L)
// compress(data, method, level)
int ModApiUtil::l_compress(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;

size_t size;
const char *data = luaL_checklstring(L, 1, &size);

Expand All @@ -287,6 +291,8 @@ int ModApiUtil::l_compress(lua_State *L)
// decompress(data, method)
int ModApiUtil::l_decompress(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;

size_t size;
const char *data = luaL_checklstring(L, 1, &size);

Expand Down
32 changes: 15 additions & 17 deletions src/script/lua_api/l_vmanip.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "server.h"
#include "mapgen.h"

#define GET_ENV_PTR ServerEnvironment* env = \
dynamic_cast<ServerEnvironment*>(getEnv(L)); \
if (env == NULL) return 0

// garbage collector
int LuaVoxelManip::gc_object(lua_State *L)
{
Expand All @@ -43,6 +39,8 @@ int LuaVoxelManip::gc_object(lua_State *L)

int LuaVoxelManip::l_read_from_map(lua_State *L)
{
MAP_LOCK_REQUIRED;

LuaVoxelManip *o = checkobject(L, 1);
MMVManip *vm = o->vm;

Expand Down Expand Up @@ -108,6 +106,8 @@ int LuaVoxelManip::l_set_data(lua_State *L)

int LuaVoxelManip::l_write_to_map(lua_State *L)
{
MAP_LOCK_REQUIRED;

LuaVoxelManip *o = checkobject(L, 1);
MMVManip *vm = o->vm;

Expand All @@ -119,23 +119,25 @@ int LuaVoxelManip::l_write_to_map(lua_State *L)
int LuaVoxelManip::l_get_node_at(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
GET_ENV_PTR;

INodeDefManager *ndef = getServer(L)->getNodeDefManager();

LuaVoxelManip *o = checkobject(L, 1);
v3s16 pos = check_v3s16(L, 2);

pushnode(L, o->vm->getNodeNoExNoEmerge(pos), env->getGameDef()->ndef());
pushnode(L, o->vm->getNodeNoExNoEmerge(pos), ndef);
return 1;
}

int LuaVoxelManip::l_set_node_at(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
GET_ENV_PTR;

INodeDefManager *ndef = getServer(L)->getNodeDefManager();

LuaVoxelManip *o = checkobject(L, 1);
v3s16 pos = check_v3s16(L, 2);
MapNode n = readnode(L, 3, env->getGameDef()->ndef());
MapNode n = readnode(L, 3, ndef);

o->vm->setNodeNoEmerge(pos, n);

Expand Down Expand Up @@ -313,14 +315,12 @@ int LuaVoxelManip::l_set_param2_data(lua_State *L)

int LuaVoxelManip::l_update_map(lua_State *L)
{
GET_ENV_PTR;

LuaVoxelManip *o = checkobject(L, 1);
if (o->is_mapgen_vm)
return 0;

Environment *env = getEnv(L);
if (!env)
return 0;

Map *map = &(env->getMap());

// TODO: Optimize this by using Mapgen::calcLighting() instead
Expand Down Expand Up @@ -359,6 +359,8 @@ int LuaVoxelManip::l_was_modified(lua_State *L)

int LuaVoxelManip::l_get_emerged_area(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;

LuaVoxelManip *o = checkobject(L, 1);

push_v3s16(L, o->vm->m_area.MinEdge);
Expand Down Expand Up @@ -400,11 +402,7 @@ LuaVoxelManip::~LuaVoxelManip()
// Creates an LuaVoxelManip and leaves it on top of stack
int LuaVoxelManip::create_object(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;

Environment *env = getEnv(L);
if (!env)
return 0;
GET_ENV_PTR;

Map *map = &(env->getMap());
LuaVoxelManip *o = (lua_istable(L, 1) && lua_istable(L, 2)) ?
Expand Down