forked from Mirrorlandia_minetest/minetest
Implement minetest.register_on_dieplayer()
This commit is contained in:
parent
bc743ca7ce
commit
4f2c1e36a1
@ -435,6 +435,7 @@ minetest.registered_on_dignodes, minetest.register_on_dignode = make_registratio
|
|||||||
minetest.registered_on_punchnodes, minetest.register_on_punchnode = make_registration()
|
minetest.registered_on_punchnodes, minetest.register_on_punchnode = make_registration()
|
||||||
minetest.registered_on_generateds, minetest.register_on_generated = make_registration()
|
minetest.registered_on_generateds, minetest.register_on_generated = make_registration()
|
||||||
minetest.registered_on_newplayers, minetest.register_on_newplayer = make_registration()
|
minetest.registered_on_newplayers, minetest.register_on_newplayer = make_registration()
|
||||||
|
minetest.registered_on_dieplayers, minetest.register_on_dieplayer = make_registration()
|
||||||
minetest.registered_on_respawnplayers, minetest.register_on_respawnplayer = make_registration()
|
minetest.registered_on_respawnplayers, minetest.register_on_respawnplayer = make_registration()
|
||||||
|
|
||||||
-- END
|
-- END
|
||||||
|
@ -101,8 +101,10 @@
|
|||||||
-- minetest.register_on_punchnode(func(pos, node, puncher))
|
-- minetest.register_on_punchnode(func(pos, node, puncher))
|
||||||
-- minetest.register_on_generated(func(minp, maxp))
|
-- minetest.register_on_generated(func(minp, maxp))
|
||||||
-- minetest.register_on_newplayer(func(ObjectRef))
|
-- minetest.register_on_newplayer(func(ObjectRef))
|
||||||
|
-- minetest.register_on_dieplayer(func(ObjectRef))
|
||||||
-- minetest.register_on_respawnplayer(func(ObjectRef))
|
-- minetest.register_on_respawnplayer(func(ObjectRef))
|
||||||
-- ^ return true in func to disable regular player placement
|
-- ^ return true in func to disable regular player placement
|
||||||
|
-- ^ currently called _before_ repositioning of player occurs
|
||||||
-- minetest.register_on_chat_message(func(name, message))
|
-- minetest.register_on_chat_message(func(name, message))
|
||||||
-- minetest.add_to_creative_inventory(itemstring)
|
-- minetest.add_to_creative_inventory(itemstring)
|
||||||
-- minetest.setting_get(name) -> string or nil
|
-- minetest.setting_get(name) -> string or nil
|
||||||
|
@ -3638,6 +3638,32 @@ void scriptapi_on_newplayer(lua_State *L, ServerActiveObject *player)
|
|||||||
// value removed, keep key for next iteration
|
// value removed, keep key for next iteration
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void scriptapi_on_dieplayer(lua_State *L, ServerActiveObject *player)
|
||||||
|
{
|
||||||
|
realitycheck(L);
|
||||||
|
assert(lua_checkstack(L, 20));
|
||||||
|
StackUnroller stack_unroller(L);
|
||||||
|
|
||||||
|
// Get minetest.registered_on_dieplayers
|
||||||
|
lua_getglobal(L, "minetest");
|
||||||
|
lua_getfield(L, -1, "registered_on_dieplayers");
|
||||||
|
luaL_checktype(L, -1, LUA_TTABLE);
|
||||||
|
int table = lua_gettop(L);
|
||||||
|
// Foreach
|
||||||
|
lua_pushnil(L);
|
||||||
|
while(lua_next(L, table) != 0){
|
||||||
|
// key at index -2 and value at index -1
|
||||||
|
luaL_checktype(L, -1, LUA_TFUNCTION);
|
||||||
|
// Call function
|
||||||
|
objectref_get_or_create(L, player);
|
||||||
|
if(lua_pcall(L, 1, 0, 0))
|
||||||
|
script_error(L, "error: %s", lua_tostring(L, -1));
|
||||||
|
// value removed, keep key for next iteration
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool scriptapi_on_respawnplayer(lua_State *L, ServerActiveObject *player)
|
bool scriptapi_on_respawnplayer(lua_State *L, ServerActiveObject *player)
|
||||||
{
|
{
|
||||||
realitycheck(L);
|
realitycheck(L);
|
||||||
|
@ -62,6 +62,7 @@ void scriptapi_environment_on_generated(lua_State *L, v3s16 minp, v3s16 maxp);
|
|||||||
|
|
||||||
/* misc */
|
/* misc */
|
||||||
void scriptapi_on_newplayer(lua_State *L, ServerActiveObject *player);
|
void scriptapi_on_newplayer(lua_State *L, ServerActiveObject *player);
|
||||||
|
void scriptapi_on_dieplayer(lua_State *L, ServerActiveObject *player);
|
||||||
bool scriptapi_on_respawnplayer(lua_State *L, ServerActiveObject *player);
|
bool scriptapi_on_respawnplayer(lua_State *L, ServerActiveObject *player);
|
||||||
void scriptapi_get_creative_inventory(lua_State *L, ServerRemotePlayer *player);
|
void scriptapi_get_creative_inventory(lua_State *L, ServerRemotePlayer *player);
|
||||||
|
|
||||||
|
@ -4537,7 +4537,8 @@ void Server::HandlePlayerHP(Player *player, s16 damage)
|
|||||||
|
|
||||||
player->hp = 0;
|
player->hp = 0;
|
||||||
|
|
||||||
//TODO: Throw items around
|
// Trigger scripted stuff
|
||||||
|
scriptapi_on_dieplayer(m_lua, srp);
|
||||||
|
|
||||||
// Handle players that are not connected
|
// Handle players that are not connected
|
||||||
if(player->peer_id == PEER_ID_INEXISTENT){
|
if(player->peer_id == PEER_ID_INEXISTENT){
|
||||||
|
Loading…
Reference in New Issue
Block a user