summaryrefslogtreecommitdiff
path: root/src/server.cpp
diff options
context:
space:
mode:
authorKahrl <kahrl@gmx.net>2012-03-24 18:52:50 +0100
committerPerttu Ahola <celeron55@gmail.com>2012-03-29 14:27:09 +0300
commita9ddbb4bebd05f8fd9e2ee6876a34e8cbb0d8c2f (patch)
treef1a347e8fa04632175d370fed57e7f75f677401c /src/server.cpp
parentf8c3743991a6897c7133bf35dc2699b8b5f9df7c (diff)
downloadminetest-a9ddbb4bebd05f8fd9e2ee6876a34e8cbb0d8c2f.tar.gz
minetest-a9ddbb4bebd05f8fd9e2ee6876a34e8cbb0d8c2f.tar.bz2
minetest-a9ddbb4bebd05f8fd9e2ee6876a34e8cbb0d8c2f.zip
on_joinplayer + on_leaveplayer + scriptapi_run_callbacks + bugfix
Add minetest.register_on_joinplayer and minetest.register_on_leaveplayer, make adding new callbacks to scriptapi.cpp easier by adding scriptapi_run_callbacks, also fix a minor bug with PlayerSAO <-> singleplayer mode interaction
Diffstat (limited to 'src/server.cpp')
-rw-r--r--src/server.cpp23
1 files changed, 16 insertions, 7 deletions
diff --git a/src/server.cpp b/src/server.cpp
index 163528235..8ad0d0869 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -1317,10 +1317,8 @@ void Server::AsyncRunStep()
{
RemoteClient *client = i.getNode()->getValue();
PlayerSAO *playersao = getPlayerSAO(client->peer_id);
- if(playersao == NULL){
- errorstream<<"Handling client without PlayerSAO, peer_id="<<client->peer_id<<std::endl;
+ if(playersao == NULL)
continue;
- }
/*
Handle player HPs (die if hp=0)
@@ -4533,6 +4531,8 @@ PlayerSAO* Server::emergePlayer(const char *name, u16 peer_id)
if(newplayer)
scriptapi_on_newplayer(m_lua, playersao);
+ scriptapi_on_joinplayer(m_lua, playersao);
+
/* Creative mode */
if(g_settings->getBool("creative_mode"))
playersao->createCreativeInventory();
@@ -4623,10 +4623,19 @@ void Server::handlePeerChange(PeerChange &c)
}
}
- // Remove from environment
- if(player->getPlayerSAO())
- player->getPlayerSAO()->disconnected();
-
+ /* Run scripts and remove from environment */
+ {
+ if(player != NULL)
+ {
+ PlayerSAO *playersao = player->getPlayerSAO();
+ assert(playersao);
+
+ scriptapi_on_leaveplayer(m_lua, playersao);
+
+ playersao->disconnected();
+ }
+ }
+
/*
Print out action
*/