diff options
author | Kahrl <kahrl@gmx.net> | 2012-03-24 18:52:50 +0100 |
---|---|---|
committer | Perttu Ahola <celeron55@gmail.com> | 2012-03-29 14:27:09 +0300 |
commit | a9ddbb4bebd05f8fd9e2ee6876a34e8cbb0d8c2f (patch) | |
tree | f1a347e8fa04632175d370fed57e7f75f677401c /src/server.cpp | |
parent | f8c3743991a6897c7133bf35dc2699b8b5f9df7c (diff) | |
download | minetest-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.cpp | 23 |
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 */ |