From c15ffef8ae30dd781f2ffbe933704e5e99b1e8c7 Mon Sep 17 00:00:00 2001 From: TenPlus1 Date: Mon, 5 Sep 2016 14:40:01 +0100 Subject: [PATCH] Tweaked code slightly --- api.lua | 55 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/api.lua b/api.lua index 28d159a..6a73f60 100644 --- a/api.lua +++ b/api.lua @@ -1,5 +1,5 @@ --- Mobs Api (3rd September 2016) +-- Mobs Api (5th September 2016) mobs = {} mobs.mod = "redo" @@ -27,13 +27,8 @@ end mobs.intllib = S -- Invisibility mod check - -function check_global(name) - return rawget(_G, name) ~= nil -end - local invis = {} -if check_global("invisibility") then +if rawget(_G, "invisibility") then invis = invisibility end @@ -56,6 +51,8 @@ local square = math.sqrt local sin = math.sin local cos = math.cos local abs = math.abs +local min = math.min +local max = math.max local atann = math.atan local random = math.random local floor = math.floor @@ -77,7 +74,7 @@ do_attack = function(self, player) if random(0,100) < 90 and self.sounds.war_cry then - minetest.sound_play(self.sounds.war_cry,{ + minetest.sound_play(self.sounds.war_cry, { object = self.object, max_hear_distance = self.sounds.distance }) @@ -301,7 +298,7 @@ function check_for_death(self) if self.sounds.damage then - minetest.sound_play(self.sounds.damage,{ + minetest.sound_play(self.sounds.damage, { object = self.object, gain = 1.0, max_hear_distance = self.sounds.distance @@ -353,7 +350,7 @@ function check_for_death(self) -- play death sound if self.sounds.death then - minetest.sound_play(self.sounds.death,{ + minetest.sound_play(self.sounds.death, { object = self.object, gain = 1.0, max_hear_distance = self.sounds.distance @@ -362,9 +359,13 @@ function check_for_death(self) -- execute custom death function if self.on_die then + self.on_die(self, pos) + + return true end + -- default death function self.object:remove() effect(pos, 20, "tnt_smoke.png") @@ -372,7 +373,7 @@ function check_for_death(self) return true end --- check if within map limits (-30911 to 30927) +-- check if within physical map limits (-30911 to 30927) function within_limits(pos, radius) if (pos.x - radius) > -30913 @@ -643,7 +644,7 @@ end -- find two animals of same type and breed if nearby and horny local function breed(self) - -- child take 240 seconds before growing into adult + -- child takes 240 seconds before growing into adult if self.child == true then self.hornytimer = self.hornytimer + 1 @@ -736,7 +737,7 @@ local function breed(self) ent.hornytimer = 41 -- spawn baby - minetest.after(5, function(dtime) + minetest.after(5, function() local mob = minetest.add_entity(pos, self.name) local ent2 = mob:get_luaentity() @@ -849,8 +850,7 @@ function smart_mobs(self, s, p, dist, dtime) s.y = floor(s.y + 0.5) - sheight s.z = floor(s.z + 0.5) - local ssight, sground - ssight, sground = minetest.line_of_sight(s, { + local ssight, sground = minetest.line_of_sight(s, { x = s.x, y = s.y - 4, z = s.z}, 1) -- determine node above ground @@ -949,6 +949,7 @@ function smart_mobs(self, s, p, dist, dtime) -- frustration! cant find the damn path :( if self.sounds.random then + minetest.sound_play(self.sounds.random, { object = self.object, max_hear_distance = self.sounds.distance @@ -986,7 +987,7 @@ local monster_attack = function(self) local s = self.object:getpos() local p, sp, dist - local player, type, obj, min_player = nil, nil, nil, nil + local player, type, obj, min_player local min_dist = self.view_range + 1 local objs = minetest.get_objects_inside_radius(s, self.view_range) @@ -1785,7 +1786,7 @@ local falling = function(self, pos) self.object:setacceleration({ x = 0, - y = -self.fall_speed / (math.max(1, v.y) ^ 2), + y = -self.fall_speed / (max(1, v.y) ^ 2), z = 0 }) end @@ -1906,14 +1907,14 @@ local mob_punch = function(self, hitter, tflp, tool_capabilities, dir) return end - -- add healthy afterglow when hit (can causehit lag with larger textures) --- core.after(0.1, function() --- self.object:settexturemod("^[colorize:#c9900070") + --[[ add healthy afterglow when hit (can cause hit lag with larger textures) + core.after(0.1, function() + self.object:settexturemod("^[colorize:#c9900070") --- core.after(0.3, function() --- self.object:settexturemod("") --- end) --- end) + core.after(0.3, function() + self.object:settexturemod("") + end) + end) ]] -- blood_particles if self.blood_amount > 0 @@ -1921,7 +1922,7 @@ local mob_punch = function(self, hitter, tflp, tool_capabilities, dir) local pos = self.object:getpos() - pos.y = pos.y + (-self.collisionbox[2] + self.collisionbox[5]) / 2 + pos.y = pos.y + (-self.collisionbox[2] + self.collisionbox[5]) * .5 effect(pos, self.blood_amount, self.blood_texture) end @@ -1931,7 +1932,7 @@ local mob_punch = function(self, hitter, tflp, tool_capabilities, dir) and tflp > punch_interval then local v = self.object:getvelocity() - local r = 1.4 - math.min(punch_interval, 1.4) + local r = 1.4 - min(punch_interval, 1.4) local kb = r * 5 local up = 2 @@ -2620,7 +2621,7 @@ function mobs:register_arrow(name, def) hit_player = def.hit_player, hit_node = def.hit_node, hit_mob = def.hit_mob, - drop = def.drop or false, + drop = def.drop or false, -- drops arrow as registered item when true collisionbox = {0, 0, 0, 0, 0, 0}, -- remove box around arrows timer = 0, switch = 0,