summaryrefslogtreecommitdiff
path: root/src/scriptapi.cpp
diff options
context:
space:
mode:
authorPerttu Ahola <celeron55@gmail.com>2012-03-04 21:08:03 +0200
committerPerttu Ahola <celeron55@gmail.com>2012-03-10 11:28:13 +0200
commite9cdb938fe44282e09fb88628a6e86e5e7279c69 (patch)
treed4c017082a8de4e9fc008d8b402b2efb0f6abc48 /src/scriptapi.cpp
parentf1cb91cd931bed056bdbe37938d141e2ea068b89 (diff)
downloadminetest-e9cdb938fe44282e09fb88628a6e86e5e7279c69.tar.gz
minetest-e9cdb938fe44282e09fb88628a6e86e5e7279c69.tar.bz2
minetest-e9cdb938fe44282e09fb88628a6e86e5e7279c69.zip
Entity damage system WIP; Remove C++ mobs
Diffstat (limited to 'src/scriptapi.cpp')
-rw-r--r--src/scriptapi.cpp53
1 files changed, 25 insertions, 28 deletions
diff --git a/src/scriptapi.cpp b/src/scriptapi.cpp
index 2ee727b3f..c3059ec55 100644
--- a/src/scriptapi.cpp
+++ b/src/scriptapi.cpp
@@ -2297,17 +2297,22 @@ private:
return 0;
}
- // punch(self, puncher); puncher = an another ObjectRef
+ // punch(self, puncher, tool_capabilities, direction, time_from_last_punch)
static int l_punch(lua_State *L)
{
ObjectRef *ref = checkobject(L, 1);
- ObjectRef *ref2 = checkobject(L, 2);
+ ObjectRef *puncher_ref = checkobject(L, 2);
ServerActiveObject *co = getobject(ref);
- ServerActiveObject *co2 = getobject(ref2);
+ ServerActiveObject *puncher = getobject(puncher_ref);
if(co == NULL) return 0;
- if(co2 == NULL) return 0;
+ if(puncher == NULL) return 0;
+ ToolCapabilities toolcap = read_tool_capabilities(L, 3);
+ v3f dir = read_v3f(L, 4);
+ float time_from_last_punch = 1000000;
+ if(lua_isnumber(L, 5))
+ time_from_last_punch = lua_tonumber(L, 5);
// Do it
- co->punch(co2);
+ puncher->punch(dir, &toolcap, puncher, time_from_last_punch);
return 0;
}
@@ -2878,7 +2883,7 @@ private:
if(item.empty() || !item.isKnown(get_server(L)->idef()))
return 0;
// Do it
- ServerActiveObject *obj = new ItemSAO(env, pos, item.getItemString());
+ ServerActiveObject *obj = createItemSAO(env, pos, item.getItemString());
int objectid = env->addActiveObject(obj);
// If failed to add, return nothing (reads as nil)
if(objectid == 0)
@@ -2892,15 +2897,8 @@ private:
// pos = {x=num, y=num, z=num}
static int l_add_rat(lua_State *L)
{
- infostream<<"EnvRef::l_add_rat()"<<std::endl;
- EnvRef *o = checkobject(L, 1);
- ServerEnvironment *env = o->m_env;
- if(env == NULL) return 0;
- // pos
- v3f pos = checkFloatPos(L, 2);
- // Do it
- ServerActiveObject *obj = new RatSAO(env, pos);
- env->addActiveObject(obj);
+ infostream<<"EnvRef::l_add_rat(): C++ mobs have been removed."
+ <<" Doing nothing."<<std::endl;
return 0;
}
@@ -2908,15 +2906,8 @@ private:
// pos = {x=num, y=num, z=num}
static int l_add_firefly(lua_State *L)
{
- infostream<<"EnvRef::l_add_firefly()"<<std::endl;
- EnvRef *o = checkobject(L, 1);
- ServerEnvironment *env = o->m_env;
- if(env == NULL) return 0;
- // pos
- v3f pos = checkFloatPos(L, 2);
- // Do it
- ServerActiveObject *obj = new FireflySAO(env, pos);
- env->addActiveObject(obj);
+ infostream<<"EnvRef::l_add_firefly(): C++ mobs have been removed."
+ <<" Doing nothing."<<std::endl;
return 0;
}
@@ -4348,6 +4339,8 @@ void scriptapi_luaentity_get_properties(lua_State *L, u16 id,
/* Read stuff */
+ prop->hp_max = getintfield_default(L, -1, "hp_max", 10);
+
getboolfield(L, -1, "physical", prop->physical);
getfloatfield(L, -1, "weight", prop->weight);
@@ -4415,9 +4408,11 @@ void scriptapi_luaentity_step(lua_State *L, u16 id, float dtime)
script_error(L, "error running function 'on_step': %s\n", lua_tostring(L, -1));
}
-// Calls entity:on_punch(ObjectRef puncher, time_from_last_punch)
+// Calls entity:on_punch(ObjectRef puncher, time_from_last_punch,
+// tool_capabilities, direction)
void scriptapi_luaentity_punch(lua_State *L, u16 id,
- ServerActiveObject *puncher, float time_from_last_punch)
+ ServerActiveObject *puncher, float time_from_last_punch,
+ const ToolCapabilities *toolcap, v3f dir)
{
realitycheck(L);
assert(lua_checkstack(L, 20));
@@ -4436,8 +4431,10 @@ void scriptapi_luaentity_punch(lua_State *L, u16 id,
lua_pushvalue(L, object); // self
objectref_get_or_create(L, puncher); // Clicker reference
lua_pushnumber(L, time_from_last_punch);
- // Call with 2 arguments, 0 results
- if(lua_pcall(L, 3, 0, 0))
+ push_tool_capabilities(L, *toolcap);
+ push_v3f(L, dir);
+ // Call with 5 arguments, 0 results
+ if(lua_pcall(L, 5, 0, 0))
script_error(L, "error running function 'on_punch': %s\n", lua_tostring(L, -1));
}