end
end
end
-
- mob_register.fall_damage = function(self)
- local vel = self.object:get_velocity()
- if vel and self.oldvel then
- if self.oldvel.y < -7 and vel.y == 0 then
- local damage = math.abs(self.oldvel.y + 7)
- damage = math.floor(damage/1.5)
- self.object:punch(self.object, 2,
- {
- full_punch_interval=1.5,
- damage_groups = {damage=damage},
- })
- end
+ if def.takes_fall_damage == nil or def.takes_fall_damage == true then
+ mob_register.fall_damage = function(self)
+ local vel = self.object:get_velocity()
+ if vel and self.oldvel then
+ if self.oldvel.y < -7 and vel.y == 0 then
+ local damage = math.abs(self.oldvel.y + 7)
+ damage = math.floor(damage/1.5)
+ self.object:punch(self.object, 2,
+ {
+ full_punch_interval=1.5,
+ damage_groups = {damage=damage},
+ })
+ end
+ end
+ self.oldvel = vel
end
- self.oldvel = vel
end
--this controls what happens when the mob gets punched
local hp = hp-hurt
if (self.punched_timer <= 0 and hp > 1) and not self.dead then
- self.object:set_texture_mod("^[colorize:red:130")
+ self.object:set_texture_mod("^[colorize:"..self.damage_color..":130")
self.hurt_color_timer = 0.25
if puncher ~= self.object then
self.punched_timer = 0.8
self.object:add_velocity(dir)
self.add_sword_wear(self, puncher, time_from_last_punch, tool_capabilities, dir)
elseif (self.punched_timer <= 0 and self.death_animation_timer == 0) then
- self.object:set_texture_mod("^[colorize:red:130")
+ self.object:set_texture_mod("^[colorize:"..self.damage_color..":130")
self.hurt_color_timer = 0.25
if puncher ~= self.object then
self.punched_timer = 0.8
--only throw items if registered
if self.item_drop then
--detect if multiple items are going to be added
- if self.item_amount and self.item_minumum then
- local data_item_amount = math.random(self.item_minimum, self.item_amount)
- for i = self.item_minimum,data_item_amount do
- minetest.throw_item(pos,self.item_drop)
+ if self.item_max then
+ local data_item_amount = math.random(self.item_minimum, self.item_max)
+ for i = 1 ,data_item_amount do
+ minetest.throw_item(vector.new(pos.x,pos.y+0.1,pos.z),self.item_drop)
end
else
- minetest.throw_item(pos,self.item_drop)
+ minetest.throw_item(vector.new(pos.x,pos.y+0.1,pos.z),self.item_drop)
end
end
global_mob_amount = global_mob_amount - 1
print("Mobs Died. Current Mobs: "..global_mob_amount)
+ if self.custom_on_death then
+ self.custom_on_death(self)
+ end
+
self.object:remove()
end
--print(self.hostile)
if self.hostile == true then
local distance = vector.distance(pos,pos2)
-
+ self.following_pos = vector.new(pos2.x,pos2.y-1.625,pos2.z)
+
--punch the player
if self.attack_type == "punch" then
if distance < 2.5 and self.punch_timer <= 0 and object:get_hp() > 0 then
if self.projectile_timer <= 0 then
self.projectile_timer = self.projectile_timer_cooldown
- local obj = minetest.add_entity(pos, self.projectile_type)
+ local obj = minetest.add_entity(vector.new(pos.x,pos.y+self.object:get_properties().collisionbox[5],pos.z), self.projectile_type)
if obj then
- local dir = vector.multiply(vector.direction(pos,pos2), 50)
+ local dir = vector.multiply(vector.direction(pos,vector.new(pos2.x,pos2.y-3,pos2.z)), 50)
obj:set_velocity(dir)
obj:get_luaentity().timer = 2
+ obj:get_luaentity().owner = self.object
end
end
end
- self.direction = vector.direction(vector.new(pos.x,0,pos.z),vector.new(pos2.x,0,pos2.z))
+ --smart
+ if self.path_data and table.getn(self.path_data) > 0 then
+ self.direction = vector.direction(vector.new(pos.x,0,pos.z), vector.new(self.path_data[1].x,0,self.path_data[1].z))
+ --dumb
+ else
+ self.direction = vector.direction(vector.new(pos.x,0,pos.z),vector.new(pos2.x,0,pos2.z))
+ end
self.speed = self.max_speed
self.following = true
end
end
--stare straight if not found
if player_found == false then
- self.move_head(self,nil,dtime)
+ if self.move_head then
+ self.move_head(self,nil,dtime)
+ end
+ if self.following_pos then
+ self.following_pos = nil
+ end
if self.manage_hostile_timer then
self.manage_hostile_timer(self,dtime)
end
end
return(mob_register)
-end
+end
\ No newline at end of file