Epic/mods/fantasy_mobs/goblins.lua

150 lines
4.6 KiB
Lua

local search_replace2 = function(
self,
search_rate,
search_rate_above,
search_rate_below,
search_offset,
search_offset_above,
search_offset_below,
replace_rate,
replace_what,
replace_with)
if math.random(1, search_rate) == 1 then
local pos = self.object:get_pos() --
local pos1 = self.object:get_pos()
local pos2 = self.object:get_pos()
-- if we are looking, will we look below and by how much?
if math.random(1, search_rate_below) == 1 then
pos1.y = pos1.y - search_offset_below
end
-- if we are looking, will we look above and by how much?
if math.random(1, search_rate_above) == 1 then
pos2.y = pos2.y + search_offset_above
end
pos1.x = pos1.x - search_offset
pos1.z = pos1.z - search_offset
pos2.x = pos2.x + search_offset
pos2.z = pos2.z + search_offset
local nodelist = minetest.find_nodes_in_area(pos1, pos2, replace_what)
if #nodelist > 0 then
for key,value in pairs(nodelist) do
-- ok we see some nodes around us, are we going to replace them?
if math.random(1, replace_rate) == 1 then
minetest.set_node(value, {name = replace_with})
end
minetest.sound_play(self.sounds.replace, {
object = self.object,
max_hear_distance = self.sounds.distance
})
end
end
end
end
local goblin_sounds = {
random = "goblins_goblin_ambient",
warcry = "goblins_goblin_attack",
attack = "goblins_goblin_attack",
damage = "goblins_goblin_damage",
death = "goblins_goblin_death",
distance = 7,
}
mobs:register_mob('fantasy_mobs:goblin', {
description = 'Goblin',
type = 'monster',
passive = false,
damage = 8,
damage_max = 12,
damage_chance = 95,
attack_type = 'dogfight',
hp_min = 20,
hp_max = 50,
armor = 100,
collisionbox = {-0.35,-1,-0.35, 0.35,-.1,0.35},
visual = 'mesh',
mesh = 'fantasy_goblin.b3d',
textures = {
{'fantasy_goblin_1.png'},
{'fantasy_goblin_2.png'},
{'fantasy_goblin_3.png'},
{'fantasy_goblin_4.png'},
{'fantasy_goblin_5.png'},
{'fantasy_goblin_6.png'},
{'fantasy_goblin_7.png'},
{'fantasy_goblin_8.png'},
{'fantasy_goblin_9.png'},
{'fantasy_goblin_10.png'},
{'fantasy_goblin_11.png'},
{'fantasy_goblin_12.png'},
},
makes_footstep_sound = true,
sounds = goblin_sounds,
walk_velocity = 2,
run_velocity = 3,
jump = true,
drops = {
{name = 'default:mossycobble', chance = 1, min = 1, max = 3},
{name = 'default:apple', chance = 2, min = 1, max = 2},
{name = 'default:torch', chance = 3, min = 1, max = 10},
{name = 'default:coal_lump', chance = 10, min = 1, max = 15},
{name = 'stations:scroll_anti_fire', chance = 30, min = 1, max = 1},
{name = 'stations:scroll_sulfur_dust', chance = 30, min = 1, max = 1},
{name = 'stations:scroll_gunpowder', chance = 30, min = 1, max = 1},
{name = 'default:diamond', chance = 500, min = 0, max = 20},
{name = 'farming:coffee_beans', chance = 300, min = 0, max = 5},
{name = 'stations:scroll_ash', chance = 1, min = 0, max = 1},
{name = 'epic:reaver', chance = 150, min = 0, max = 1},
{name = 'illuminati:cone_off', chance = 150, min = 0, max = 1},
{name = 'illuminati:core_off', chance = 150, min = 0, max = 1},
{name = 'fantasy_mobs:goblin_sketch', chance = 10, min = 1, max = 1},
},
water_damage = 0,
lava_damage = 2,
light_damage = 0,
follow = {'default:diamond', 'default:apple', 'farming:bread'},
view_range = 10,
animation = {
speed_normal = 30,
speed_run = 30,
stand_start = 0,
stand_end = 79,
walk_start = 168,
walk_end = 187,
run_start = 168,
run_end = 187,
punch_start = 200,
punch_end = 219,
},
replace_what = {'default:torch', 'default:torch_wall', 'default:torch_ceiling'},
do_custom = function(self)
search_replace2(
self,
10, --search_rate
1, --search_rate_above
1, --search_rate_below
1, --search_offset
2, --search_offset_above
1, --search_offset_below
5, --replace_rate
{'default:torch', 'default:torch_wall', 'default:torch_ceiling'}, --replace_what
'air') --replace_with
end,
})
mobs:spawn({
name = 'fantasy_mobs:goblin',
nodes = {'default:mossycobble'},
max_light = 13,
min_height = -31000,
max_height = -10,
interval = 30,
chance = 250,
active_object_count = 10,
})