Add object reference to Lua on_place/dig/punchnode parameters
authorPerttu Ahola <celeron55@gmail.com>
Fri, 25 Nov 2011 17:49:20 +0000 (19:49 +0200)
committerPerttu Ahola <celeron55@gmail.com>
Tue, 29 Nov 2011 17:13:52 +0000 (19:13 +0200)
data/mods/default/init.lua
src/scriptapi.cpp
src/scriptapi.h
src/server.cpp

index e6342c357d8c22058285d293ae7250bd2252271b..11fac245d80e41a959de05e0fe9dc42084418604 100644 (file)
@@ -82,8 +82,9 @@ end
 -- minetest.register_node(name, {lots of stuff})
 -- minetest.register_craft({output=item, recipe={...})
 -- minetest.register_globalstep(func)
--- minetest.register_on_placenode(func)
--- minetest.register_on_dignode(func)
+-- minetest.register_on_placenode(func(pos, newnode, placer))
+-- minetest.register_on_dignode(func(pos, oldnode, digger))
+-- minetest.register_on_punchnode(func(pos, node, puncher))
 --
 -- Global objects:
 -- minetest.env - environment reference
index 5ef4f9972fab5a8670970e642b78b3f7999e3c02..a5454bea519886699207f0a2fc3aab7ada72a304 100644 (file)
@@ -1432,7 +1432,8 @@ void scriptapi_environment_step(lua_State *L, float dtime)
        }
 }
 
-void scriptapi_environment_on_placenode(lua_State *L, v3s16 p, MapNode newnode)
+void scriptapi_environment_on_placenode(lua_State *L, v3s16 p, MapNode newnode,
+               ServerActiveObject *placer)
 {
        realitycheck(L);
        assert(lua_checkstack(L, 20));
@@ -1459,13 +1460,15 @@ void scriptapi_environment_on_placenode(lua_State *L, v3s16 p, MapNode newnode)
                // Call function
                pushpos(L, p);
                pushnode(L, newnode, ndef);
-               if(lua_pcall(L, 2, 0, 0))
+               objectref_get_or_create(L, placer);
+               if(lua_pcall(L, 3, 0, 0))
                        script_error(L, "error: %s\n", lua_tostring(L, -1));
                // value removed, keep key for next iteration
        }
 }
 
-void scriptapi_environment_on_dignode(lua_State *L, v3s16 p, MapNode oldnode)
+void scriptapi_environment_on_dignode(lua_State *L, v3s16 p, MapNode oldnode,
+               ServerActiveObject *digger)
 {
        realitycheck(L);
        assert(lua_checkstack(L, 20));
@@ -1492,13 +1495,15 @@ void scriptapi_environment_on_dignode(lua_State *L, v3s16 p, MapNode oldnode)
                // Call function
                pushpos(L, p);
                pushnode(L, oldnode, ndef);
-               if(lua_pcall(L, 2, 0, 0))
+               objectref_get_or_create(L, digger);
+               if(lua_pcall(L, 3, 0, 0))
                        script_error(L, "error: %s\n", lua_tostring(L, -1));
                // value removed, keep key for next iteration
        }
 }
 
-void scriptapi_environment_on_punchnode(lua_State *L, v3s16 p, MapNode oldnode)
+void scriptapi_environment_on_punchnode(lua_State *L, v3s16 p, MapNode node,
+               ServerActiveObject *puncher)
 {
        realitycheck(L);
        assert(lua_checkstack(L, 20));
@@ -1524,8 +1529,9 @@ void scriptapi_environment_on_punchnode(lua_State *L, v3s16 p, MapNode oldnode)
                luaL_checktype(L, -1, LUA_TFUNCTION);
                // Call function
                pushpos(L, p);
-               pushnode(L, oldnode, ndef);
-               if(lua_pcall(L, 2, 0, 0))
+               pushnode(L, node, ndef);
+               objectref_get_or_create(L, puncher);
+               if(lua_pcall(L, 3, 0, 0))
                        script_error(L, "error: %s\n", lua_tostring(L, -1));
                // value removed, keep key for next iteration
        }
index 46bc8233b2f50ad9516b337d051c38d9f5495109..33f090f744877e832ed0b52dd43b67f8055c1c30 100644 (file)
@@ -41,11 +41,14 @@ void scriptapi_rm_object_reference(lua_State *L, ServerActiveObject *cobj);
 // On environment step
 void scriptapi_environment_step(lua_State *L, float dtime);
 // After adding node
-void scriptapi_environment_on_placenode(lua_State *L, v3s16 p, MapNode newnode);
+void scriptapi_environment_on_placenode(lua_State *L, v3s16 p, MapNode newnode,
+               ServerActiveObject *placer);
 // After removing node
-void scriptapi_environment_on_dignode(lua_State *L, v3s16 p, MapNode oldnode);
+void scriptapi_environment_on_dignode(lua_State *L, v3s16 p, MapNode oldnode,
+               ServerActiveObject *digger);
 // When punching node
-void scriptapi_environment_on_punchnode(lua_State *L, v3s16 p, MapNode node);
+void scriptapi_environment_on_punchnode(lua_State *L, v3s16 p, MapNode node,
+               ServerActiveObject *puncher);
 
 /* luaentity */
 // Returns true if succesfully added into Lua; false otherwise.
index 12026054e70d67ab18b1640109eb6cbeee1e14b5..fea103e1c62e551c73c89923b249f9724b4ce44e 100644 (file)
@@ -2529,7 +2529,8 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
                        /*
                                Run script hook
                        */
-                       scriptapi_environment_on_punchnode(m_lua, p_under, n);
+                       ServerRemotePlayer *srp = (ServerRemotePlayer*)player;
+                       scriptapi_environment_on_punchnode(m_lua, p_under, n, srp);
 
                } // action == 0
 
@@ -2769,7 +2770,8 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
                        /*
                                Run script hook
                        */
-                       scriptapi_environment_on_dignode(m_lua, p_under, n);
+                       ServerRemotePlayer *srp = (ServerRemotePlayer*)player;
+                       scriptapi_environment_on_dignode(m_lua, p_under, n, srp);
                }
                
                /*
@@ -2916,7 +2918,8 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
                                /*
                                        Run script hook
                                */
-                               scriptapi_environment_on_placenode(m_lua, p_over, n);
+                               ServerRemotePlayer *srp = (ServerRemotePlayer*)player;
+                               scriptapi_environment_on_placenode(m_lua, p_over, n, srp);
 
                                /*
                                        Calculate special events