From cd563473fa298db3b910009f26ba263bacd84be9 Mon Sep 17 00:00:00 2001
From: Perttu Ahola <celeron55@gmail.com>
Date: Wed, 30 Nov 2011 20:54:54 +0200
Subject: [PATCH] Add ObjectRef:punch and ObjectRef:right_click to Lua API

---
 data/mods/default/init.lua |  8 +++++---
 src/scriptapi.cpp          | 30 ++++++++++++++++++++++++++++++
 2 files changed, 35 insertions(+), 3 deletions(-)

diff --git a/data/mods/default/init.lua b/data/mods/default/init.lua
index 0e42974ef..5b94a13a0 100644
--- a/data/mods/default/init.lua
+++ b/data/mods/default/init.lua
@@ -81,6 +81,8 @@
 -- - getpos(): returns {x=num, y=num, z=num}
 -- - setpos(pos); pos={x=num, y=num, z=num}
 -- - moveto(pos, continuous=false): interpolated move
+-- - punch(puncher); puncher = an another ObjectRef
+-- - right_click(clicker); clicker = an another ObjectRef
 -- - get_wielded_itemstring()
 -- - get_wielded_item()
 -- - damage_wielded_item(num) (item damage/wear range is 0-65535)
@@ -89,9 +91,9 @@
 -- - get_hp(): returns number of hitpoints (2 * number of hearts)
 -- - set_hp(hp): set number of hitpoints (2 * number of hearts)
 -- LuaEntitySAO-only:
--- - setvelocity(self, {x=num, y=num, z=num})
--- - setacceleration(self, {x=num, y=num, z=num})
--- - getacceleration(self)
+-- - setvelocity({x=num, y=num, z=num})
+-- - setacceleration({x=num, y=num, z=num})
+-- - getacceleration()
 -- - settexturemod(mod)
 -- - setsprite(p={x=0,y=0}, num_frames=1, framelength=0.2,
 -- -           select_horiz_by_yawpitch=false)
diff --git a/src/scriptapi.cpp b/src/scriptapi.cpp
index fbdbf4a12..8a3d4a496 100644
--- a/src/scriptapi.cpp
+++ b/src/scriptapi.cpp
@@ -1642,6 +1642,34 @@ class ObjectRef
 		return 0;
 	}
 
+	// punch(self, puncher); puncher = an another ObjectRef
+	static int l_punch(lua_State *L)
+	{
+		ObjectRef *ref = checkobject(L, 1);
+		ObjectRef *ref2 = checkobject(L, 2);
+		ServerActiveObject *co = getobject(ref);
+		ServerActiveObject *co2 = getobject(ref2);
+		if(co == NULL) return 0;
+		if(co2 == NULL) return 0;
+		// Do it
+		co->punch(co2);
+		return 0;
+	}
+
+	// right_click(self, clicker); clicker = an another ObjectRef
+	static int l_right_click(lua_State *L)
+	{
+		ObjectRef *ref = checkobject(L, 1);
+		ObjectRef *ref2 = checkobject(L, 2);
+		ServerActiveObject *co = getobject(ref);
+		ServerActiveObject *co2 = getobject(ref2);
+		if(co == NULL) return 0;
+		if(co2 == NULL) return 0;
+		// Do it
+		co->rightClick(co2);
+		return 0;
+	}
+
 	// get_wielded_itemstring(self)
 	static int l_get_wielded_itemstring(lua_State *L)
 	{
@@ -1954,6 +1982,8 @@ const luaL_reg ObjectRef::methods[] = {
 	method(ObjectRef, getpos),
 	method(ObjectRef, setpos),
 	method(ObjectRef, moveto),
+	method(ObjectRef, punch),
+	method(ObjectRef, right_click),
 	method(ObjectRef, get_wielded_itemstring),
 	method(ObjectRef, get_wielded_item),
 	method(ObjectRef, damage_wielded_item),
-- 
GitLab