Add files via upload

master
DokimiCU 2018-04-01 12:24:05 +12:00 committed by GitHub
parent 8506ab323f
commit 14de5df373
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
30 changed files with 4143 additions and 0 deletions

134
defender.lua Normal file
View File

@ -0,0 +1,134 @@
mobs:register_mob("mobs_war:defender", {
type = "npc",
passive = false,
damage = 3,
pathfinding = 1,
attack_type = "dogshoot",
attacks_monsters = true,
group_attack = true,
specific_attack = shooters,
dogshoot_switch = 1,
dogshoot_count_max = 60,
dogshoot_count2_max = 10,
reach = 2,
shoot_interval = 1,
arrow = "mobs_war:shot",
shoot_offset = 1,
hp_min = 12,
hp_max = 35,
armor = 100,
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
visual = "mesh",
mesh = "character.b3d",
textures = {
{"mobs_defender.png"},
{"mobs_defender2.png"},
{"mobs_defender3.png"},
},
blood_texture = "mobs_blood.png",
makes_footstep_sound = true,
sounds = {
random = "mobs_war_breathing",
war_cry = "",
death = "mobs_war_damage",
damage = "mobs_war_damage",
attack = "mobs_war_buzz",
shoot_attack = "mobs_war_shot2",
distance = 50,
},
replace_what = {
{"air", "mobs_war:marker_defender", 0},
{"mobs_war:marker_shooter", "mobs_war:marker_defender", 0},
{"default:dirt_with_grass", "default:dirt", -1.5},
{"default:dirt_with_dry_grass","default:dirt", -1.5},
{"default:dirt_with_snow","default:dirt", -1.5}
},
replace_rate = 1,
walk_chance = 8,
walk_velocity = 4,
run_velocity = 6,
runaway = true,
jump = true,
jump_height = 2,
drops = {
{name = "farming:bread", chance = 2, min = 1, max = 4},
{name = "default:sword_steel", chance = 5, min = 1, max = 1},
{name = "mobs_war:defender_rifle", chance = 1, min = 1, max = 1},
{name = "tnt:gunpowder", chance = 1, min = 1, max = 50},
},
on_die = function(self, pos)
local below = {x = pos.x, y = pos.y -1, z = pos.z}
minetest.set_node(below, {name = "mobs_war:mobs_war_corpse"})
end,
water_damage = 0,
lava_damage = 2,
light_damage = 0,
view_range = 25,
follow = {"tnt:gunpowder", "tnt:tnt", "mobs_war:defender_rifle", "mobs_war:defender_machinegun", "mobs_war:bazooka", "mobs_war:flamethrower", "mobs_war:landmine",},
fear_height = 3,
floats = 1,
animation = {
stand_start = 0,
stand_end = 79,
walk_start = 168,
walk_end = 187,
run_start = 168,
run_end = 187,
punch_start = 189,
punch_end = 198,
shoot_start = 200,
shoot_end = 219,
speed_normal = 30,
speed_run = 30,
},
on_rightclick = function(self, clicker)
-- make sure player is clicking
if not clicker or not clicker:is_player() then
return
end
-- feed, tame or heal
if mobs:feed_tame(self, clicker, 1, false, true) then
self.order = stand
self.nametag = "Rifleman"
self.object:set_properties({walk_chance = 0})
minetest.chat_send_player(clicker:get_player_name(),
"Rifleman ready and standing ground commander!")
return
end
--order to stand
if self.tamed and self.owner == clicker:get_player_name() then
if clicker:get_wielded_item():get_name() ~= "default:torch" then
self.order = stand
self.object:set_properties({walk_chance = 0})
minetest.chat_send_player(clicker:get_player_name(),
"Rifleman holding ground commander!")
return
end
end
--order to follow
if self.tamed and self.owner == clicker:get_player_name() then
if clicker:get_wielded_item():get_name() == "default:torch" then
self.order = follow
self.object:set_properties({walk_chance = 200})
minetest.chat_send_player(clicker:get_player_name(),
"Rifleman following commander!")
return
end
end
end
})
mobs:register_egg("mobs_war:defender", "Defender", "mobs_war_drone_launcher.png", 1)

72
defender_autocannon.lua Normal file
View File

@ -0,0 +1,72 @@
mobs:register_mob("mobs_war:defender_autocannon", {
type = "npc",
passive = false,
damage = 2,
attack_type = "shoot",
attacks_monsters = true,
group_attack = true,
specific_attack = shooters,
reach = 2,
shoot_interval = 0.15,
arrow = "mobs_war:cannon_shot",
shoot_offset = 1,
hp_min = 5000,
hp_max = 10000,
armor = 500,
collisionbox = {-1.2, 0, -1.2, 1.2, 1.2, 1.2},
visual = "mesh",
mesh = "autocannon.obj",
textures = {"mobs_war_autocannon.png"},
--blood_texture = "mobs_blood.png",
makes_footstep_sound = false,
sounds = {
random = "",
war_cry = "",
death = "mobs_war_explode",
damage = "",
attack = "",
shoot_attack = "mobs_war_cannon3",
distance = 50,
},
replace_what = {
{"air", "mobs_war:marker_defender", 0},
{"mobs_war:marker_shooter", "mobs_war:marker_defender", 0},
{"default:dirt_with_grass", "default:dirt", -1.5},
{"default:dirt_with_dry_grass","default:dirt", -1.5},
{"default:dirt_with_snow","default:dirt", -1.5}
},
walk_chance = 0,
walk_velocity = 0,
run_velocity = 0,
runaway = false,
jump = false,
jump_height = 0,
drops = {
{name = "mobs_war:defender_machinegun", chance = 1, min = 1, max = 1},
{name = "tnt:gunpowder", chance = 4, min = 1, max = 50},
},
on_die = function(self, pos)
local below = {x = pos.x, y = pos.y -1, z = pos.z}
minetest.set_node(below, {name = "default:steelblock"})
minetest.set_node(pos, {name = "fire:basic_flame"})
end,
water_damage = 1,
lava_damage = 2,
light_damage = 0,
view_range = 20,
fear_height = 3,
floats = 0,
knock_back = 0,
on_rightclick = function(self, clicker)
mobs:capture_mob(self, clicker, 100, 0, 0, true, "mobs_war:defender_autocannon")
end
})
mobs:register_egg("mobs_war:defender_autocannon", "Autocannon Defender", "mobs_war_drone_launcher.png", 1)

135
defender_bazooka.lua Normal file
View File

@ -0,0 +1,135 @@
mobs:register_mob("mobs_war:defender_bazooka", {
type = "npc",
passive = false,
damage = 1,
pathfinding = 1,
attack_type = "dogshoot",
attacks_monsters = true,
group_attack = true,
specific_attack = shooters,
dogshoot_switch = 1,
dogshoot_count_max = 120,
dogshoot_count2_max = 20,
reach = 2,
shoot_interval = 12,
arrow = "mobs_war:shot_bazooka",
shoot_offset = 1,
hp_min = 12,
hp_max = 35,
armor = 100,
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
visual = "mesh",
mesh = "character.b3d",
textures = {
{"mobs_defender.png"},
{"mobs_defender2.png"},
{"mobs_defender3.png"},
},
blood_texture = "mobs_blood.png",
makes_footstep_sound = true,
sounds = {
random = "mobs_war_breathing",
war_cry = "",
death = "mobs_war_damage",
damage = "mobs_war_damage",
attack = "mobs_war_buzz",
shoot_attack = "mobs_war_shot_sniper",
distance = 50,
},
replace_what = {
{"air", "mobs_war:marker_defender", 0},
{"mobs_war:marker_shooter", "mobs_war:marker_defender", 0},
{"default:dirt_with_grass", "default:dirt", -1.5},
{"default:dirt_with_dry_grass","default:dirt", -1.5},
{"default:dirt_with_snow","default:dirt", -1.5}
},
replace_rate = 1,
walk_chance = 6,
walk_velocity = 3,
run_velocity = 4,
runaway = true,
jump = true,
jump_height = 1,
drops = {
{name = "default:shovel_steel", chance = 5, min = 1, max = 1},
{name = "tnt:tnt", chance = 2, min = 1, max = 10},
{name = "mobs_war:bazooka", chance = 1, min = 1, max = 1},
},
on_die = function(self, pos)
local below = {x = pos.x, y = pos.y -1, z = pos.z}
minetest.set_node(below, {name = "mobs_war:mobs_war_corpse"})
end,
water_damage = 0,
lava_damage = 2,
light_damage = 0,
view_range = 25,
fear_height = 3,
floats = 1,
animation = {
stand_start = 0,
stand_end = 79,
walk_start = 168,
walk_end = 187,
run_start = 168,
run_end = 187,
punch_start = 189,
punch_end = 198,
shoot_start = 200,
shoot_end = 219,
speed_normal = 30,
speed_run = 30,
},
follow = {"tnt:gunpowder", "tnt:tnt", "mobs_war:defender_rifle", "mobs_war:defender_machinegun", "mobs_war:bazooka", "mobs_war:flamethrower", "mobs_war:landmine",},
on_rightclick = function(self, clicker)
-- make sure player is clicking
if not clicker or not clicker:is_player() then
return
end
-- feed, tame or heal
if mobs:feed_tame(self, clicker, 1, false, true) then
self.order = stand
self.nametag = "Bazooka"
self.object:set_properties({walk_chance = 0})
minetest.chat_send_player(clicker:get_player_name(),
"Bazooka ready and standing ground commander!")
return
end
--order to stand
if self.tamed and self.owner == clicker:get_player_name() then
if clicker:get_wielded_item():get_name() ~= "default:torch" then
self.order = stand
self.object:set_properties({walk_chance = 0})
minetest.chat_send_player(clicker:get_player_name(),
"Bazooka holding ground commander!")
return
end
end
--order to follow
if self.tamed and self.owner == clicker:get_player_name() then
if clicker:get_wielded_item():get_name() == "default:torch" then
self.order = follow
self.object:set_properties({walk_chance = 200})
minetest.chat_send_player(clicker:get_player_name(),
"Bazooka following commander!")
return
end
end
end
})
mobs:register_egg("mobs_war:defender_bazooka", "Bazooka Defender", "mobs_war_drone_launcher.png", 1)

133
defender_cannon.lua Normal file
View File

@ -0,0 +1,133 @@
mobs:register_mob("mobs_war:defender_cannon", {
type = "npc",
passive = false,
damage = 2,
pathfinding = 1,
attack_type = "dogshoot",
attacks_monsters = true,
group_attack = true,
specific_attack = shooters,
dogshoot_switch = 1,
dogshoot_count_max = 3,
dogshoot_count2_max = 2,
reach = 2,
shoot_interval = 0.15,
arrow = "mobs_war:cannon_shot",
shoot_offset = 1,
hp_min = 12,
hp_max = 35,
armor = 100,
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
visual = "mesh",
mesh = "character.b3d",
textures = {
{"mobs_defender.png"},
{"mobs_defender2.png"},
{"mobs_defender3.png"},
},
blood_texture = "mobs_blood.png",
makes_footstep_sound = true,
sounds = {
random = "mobs_war_breathing",
war_cry = "",
death = "mobs_war_damage",
damage = "mobs_war_damage",
attack = "mobs_war_buzz",
shoot_attack = "mobs_war_cannon",
distance = 50,
},
replace_what = {
{"air", "mobs_war:marker_defender", 0},
{"mobs_war:marker_shooter", "mobs_war:marker_defender", 0},
{"default:dirt_with_grass", "default:dirt", -1.5},
{"default:dirt_with_dry_grass","default:dirt", -1.5},
{"default:dirt_with_snow","default:dirt", -1.5}
},
replace_rate = 0,
walk_chance = 8,
walk_velocity = 2,
run_velocity = 4,
runaway = true,
jump = true,
jump_height = 2,
drops = {
{name = "default:axe_steel", chance = 5, min = 1, max = 1},
{name = "mobs_war:defender_machinegun", chance = 1, min = 1, max = 1},
{name = "tnt:gunpowder", chance = 4, min = 1, max = 50},
},
on_die = function(self, pos)
local below = {x = pos.x, y = pos.y -1, z = pos.z}
minetest.set_node(below, {name = "mobs_war:mobs_war_corpse"})
end,
water_damage = 0,
lava_damage = 2,
light_damage = 0,
view_range = 20,
fear_height = 3,
floats = 1,
animation = {
stand_start = 0,
stand_end = 79,
walk_start = 168,
walk_end = 187,
run_start = 168,
run_end = 187,
punch_start = 189,
punch_end = 198,
shoot_start = 200,
shoot_end = 219,
speed_normal = 30,
speed_run = 30,
},
follow = {"tnt:gunpowder", "tnt:tnt", "mobs_war:defender_rifle", "mobs_war:defender_machinegun", "mobs_war:bazooka", "mobs_war:flamethrower", "mobs_war:landmine",},
on_rightclick = function(self, clicker)
-- make sure player is clicking
if not clicker or not clicker:is_player() then
return
end
-- feed, tame or heal
if mobs:feed_tame(self, clicker, 1, false, true) then
self.order = stand
self.nametag = "Machine-gunner"
self.object:set_properties({walk_chance = 0})
minetest.chat_send_player(clicker:get_player_name(),
"Machine-gunner ready and standing ground commander!")
return
end
--order to stand
if self.tamed and self.owner == clicker:get_player_name() then
if clicker:get_wielded_item():get_name() ~= "default:torch" then
self.order = stand
self.object:set_properties({walk_chance = 0})
minetest.chat_send_player(clicker:get_player_name(),
"Machine-gunner holding ground commander!")
return
end
end
--order to follow
if self.tamed and self.owner == clicker:get_player_name() then
if clicker:get_wielded_item():get_name() == "default:torch" then
self.order = follow
self.object:set_properties({walk_chance = 200})
minetest.chat_send_player(clicker:get_player_name(),
"Machine-gunner following commander!")
return
end
end
end
})
mobs:register_egg("mobs_war:defender_cannon", "Cannon Defender", "mobs_war_drone_launcher.png", 1)

62
defender_drone.lua Normal file
View File

@ -0,0 +1,62 @@
mobs:register_mob("mobs_war:defender_drone", {
type = "npc",
passive = false,
damage = 1,
pathfinding = 1,
attack_type = "explode",
explosion_radius = 2,
attacks_monsters = true,
group_attack = true,
specific_attack = shooters,
reach = 3,
hp_min = 2,
hp_max = 5,
armor = 1,
collisionbox = {-0.5, -0.25, -0.5, 0.5, 0.20, 0.5},
visual = "mesh",
mesh = "drone.obj",
textures = {"mobs_war_drone.png"},
--blood_texture = "mobs_blood.png",
makes_footstep_sound = false,
sounds = {
random = "mobs_war_drone_hovering",
war_cry = "mobs_war_drone_hovering",
explode = "mobs_war_explode",
attack = "mobs_war_drone_hovering",
distance = 50,
},
replace_rate = 100,
walk_chance = 20,
walk_velocity = 4,
run_velocity = 8,
runaway = false,
fall_speed = 1,
stepheight = 6,
fly = true,
fly_mode = "rise",
fly_in = {"air", "mobs_war:marker_defender", "mobs_war:marker_shooter"},
jump = true,
jump_height = 10,
drops = {
{name = "tnt:tnt", chance = 3, min = 1, max = 2},
},
water_damage = 1,
lava_damage = 2,
light_damage = 0,
view_range = 20,
fear_height = 500,
floats = 0,
on_rightclick = function(self, clicker)
mobs:capture_mob(self, clicker, 100, 0, 0, true, "mobs_war:defender_drone")
end
})
mobs:register_egg("mobs_war:defender_drone", "Drone Defender", "mobs_war_drone_launcher.png", 1)

195
defender_engineer.lua Normal file
View File

@ -0,0 +1,195 @@
mobs:register_mob("mobs_war:defender_engineer", {
type = "npc",
passive = false,
damage = 1,
pathfinding = 2,
attack_type = "dogfight",
attacks_monsters = true,
group_attack = true,
specific_attack = shooters,
reach = 2,
hp_min = 40,
hp_max = 50,
armor = 100,
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
visual = "mesh",
mesh = "character.b3d",
textures = {
{"mobs_defender.png"},
{"mobs_defender2.png"},
{"mobs_defender3.png"},
},
blood_texture = "mobs_blood.png",
makes_footstep_sound = true,
sounds = {
random = "mobs_war_breathing",
war_cry = "",
death = "mobs_war_damage",
damage = "mobs_war_damage",
attack = "mobs_war_buzz",
shoot_attack = "mobs_war_shot2",
distance = 50,
},
replace_what = {
{"mobs_war:drone_launcher_shooter", "default:steelblock", 0.5},
{"air", "mobs_war:marker_defender", 0.5},
{"mobs_war:marker_shooter", "mobs_war:marker_defender", 0},
{"default:dirt_with_grass", "mobs_war:landmine", -1.5},
{"default:dirt_with_dry_grass","mobs_war:landmine", -1.5},
{"default:dirt_with_snow","mobs_war:landmine", -1.5}
},
replace_rate = 1,
walk_chance = 30,
walk_velocity = 5,
run_velocity = 7,
runaway = true,
jump = true,
jump_height = 2,
drops = {
{name = "mobs_war:landmine", chance = 1, min = 1, max = 10},
{name = "default:pick_steel", chance = 5, min = 1, max = 1},
{name = "mobs_war:defender_autocannon", chance = 3, min = 1, max = 2},
{name = "mobs_war:drone_launcher_defender", chance = 4, min = 1, max = 2},
{name = "tnt:gunpowder", chance = 2, min = 1, max = 50},
},
on_die = function(self, pos)
local below = {x = pos.x, y = pos.y -1, z = pos.z}
minetest.set_node(below, {name = "mobs_war:mobs_war_corpse"})
end,
water_damage = 0,
lava_damage = 2,
light_damage = 0,
view_range = 25,
fear_height = 3,
floats = 1,
animation = {
stand_start = 0,
stand_end = 79,
walk_start = 168,
walk_end = 187,
run_start = 168,
run_end = 187,
punch_start = 189,
punch_end = 198,
shoot_start = 200,
shoot_end = 219,
speed_normal = 30,
speed_run = 30,
},
follow = {"tnt:gunpowder", "tnt:tnt", "mobs_war:defender_rifle", "mobs_war:defender_machinegun", "mobs_war:bazooka", "mobs_war:flamethrower", "mobs_war:landmine",},
on_rightclick = function(self, clicker)
-- make sure player is clicking
if not clicker or not clicker:is_player() then
return
end
-- feed, tame or heal
if mobs:feed_tame(self, clicker, 1, false, true) then
self.order = stand
self.nametag = "Engineer"
self.object:set_properties({walk_chance = 0})
minetest.chat_send_player(clicker:get_player_name(),
"Engineer ready and standing ground commander!")
return
end
--order to stand
if self.tamed and self.owner == clicker:get_player_name() then
if clicker:get_wielded_item():get_name() ~= "default:torch" then
self.order = stand
self.object:set_properties({walk_chance = 0})
minetest.chat_send_player(clicker:get_player_name(),
"Engineer holding ground commander!")
return
end
end
--order to follow
if self.tamed and self.owner == clicker:get_player_name() then
if clicker:get_wielded_item():get_name() == "default:torch" then
self.order = follow
self.object:set_properties({walk_chance = 200})
minetest.chat_send_player(clicker:get_player_name(),
"Engineer following commander!")
return
end
end
end
})
mobs:register_egg("mobs_war:defender_engineer", "Engineer Defender", "mobs_war_drone_launcher.png", 1)
--Engineer create autocannon
minetest.register_abm{
nodenames = {"mobs_war:marker_defender"},
interval = 20,
chance = 50,
action = function(pos, node, active_object_count, active_object_count_wider)
local above = {x = pos.x, y = pos.y +1, z = pos.z}
local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 1)
for k, obj in pairs(objs) do
if obj:get_luaentity() ~= nil then
if obj:get_luaentity().name == "mobs_war:defender_engineer" and obj:get_luaentity().name ~= "mobs_war:defender_autocannon" then
minetest.add_entity(above, "mobs_war:defender_autocannon")
end
end
end
end,
}
--Engineer create drone launcher
minetest.register_abm{
nodenames = {"mobs_war:marker_defender"},
neighbors = {"group:soil", "group:sand", "group:stone"},
interval = 30,
chance = 60,
action = function(pos, node, active_object_count, active_object_count_wider)
local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 1)
for k, obj in pairs(objs) do
if obj:get_luaentity() ~= nil then
if obj:get_luaentity().name == "mobs_war:defender_engineer" and obj:get_luaentity().name ~= "mobs_war:defender_autocannon" then
minetest.set_node(pos, {name = "mobs_war:drone_launcher_defender"})
end
end
end
end,
}
--Engineer wire
minetest.register_abm{
nodenames = {"air"},
neighbors = {"group:soil", "group:sand", "group:stone"},
interval = 30,
chance = 100,
action = function(pos, node, active_object_count, active_object_count_wider)
local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 1)
for k, obj in pairs(objs) do
if obj:get_luaentity() ~= nil then
if obj:get_luaentity().name == "mobs_war:defender_engineer" and obj:get_luaentity().name ~= "mobs_war:defender_autocannon" then
minetest.set_node(pos, {name = "mobs_war:wire"})
end
end
end
end,
}

136
defender_flamethrower.lua Normal file
View File

@ -0,0 +1,136 @@
mobs:register_mob("mobs_war:defender_flamethrower", {
type = "npc",
passive = false,
damage = 1,
pathfinding = 1,
attack_type = "dogshoot",
attacks_monsters = true,
group_attack = true,
specific_attack = shooters,
dogshoot_switch = 1,
dogshoot_count_max = 120,
dogshoot_count2_max = 20,
reach = 2,
shoot_interval = 4,
arrow = "mobs_war:shot_flamethrower",
shoot_offset = 1,
hp_min = 12,
hp_max = 35,
armor = 100,
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
visual = "mesh",
mesh = "character.b3d",
textures = {
{"mobs_defender.png"},
{"mobs_defender2.png"},
{"mobs_defender3.png"},
},
blood_texture = "mobs_blood.png",
makes_footstep_sound = true,
sounds = {
random = "mobs_war_breathing",
war_cry = "",
death = "mobs_war_damage",
damage = "mobs_war_damage",
attack = "mobs_war_buzz",
shoot_attack = "mobs_war_flamethrower",
distance = 50,
},
replace_what = {
{"air", "mobs_war:marker_defender", 0},
{"mobs_war:marker_shooter", "mobs_war:marker_defender", 0},
{"default:dirt_with_grass", "default:dirt", -1.5},
{"default:dirt_with_dry_grass","default:dirt", -1.5},
{"default:dirt_with_snow","default:dirt", -1.5}
},
replace_rate = 1,
walk_chance = 6,
walk_velocity = 3,
run_velocity = 4,
runaway = true,
jump = true,
jump_height = 1,
drops = {
{name = "default:torch", chance = 5, min = 1, max = 5},
{name = "tnt:tnt", chance = 2, min = 1, max = 10},
{name = "mobs_war:flamethrower", chance = 1, min = 1, max = 1},
},
on_die = function(self, pos)
local below = {x = pos.x, y = pos.y -1, z = pos.z}
minetest.set_node(below, {name = "mobs_war:mobs_war_corpse"})
end,
water_damage = 0,
lava_damage = 2,
light_damage = 0,
view_range = 15,
fear_height = 3,
floats = 1,
animation = {
stand_start = 0,
stand_end = 79,
walk_start = 168,
walk_end = 187,
run_start = 168,
run_end = 187,
punch_start = 189,
punch_end = 198,
shoot_start = 200,
shoot_end = 219,
speed_normal = 30,
speed_run = 30,
},
follow = {"tnt:gunpowder", "tnt:tnt", "mobs_war:defender_rifle", "mobs_war:defender_machinegun", "mobs_war:bazooka", "mobs_war:flamethrower", "mobs_war:landmine",},
on_rightclick = function(self, clicker)
-- make sure player is clicking
if not clicker or not clicker:is_player() then
return
end
-- feed, tame or heal
if mobs:feed_tame(self, clicker, 1, false, true) then
self.order = stand
self.nametag = "Flamethrower"
self.object:set_properties({walk_chance = 0})
minetest.chat_send_player(clicker:get_player_name(),
"Flamethrower ready and standing ground commander!")
return
end
--order to stand
if self.tamed and self.owner == clicker:get_player_name() then
if clicker:get_wielded_item():get_name() ~= "default:torch" then
self.order = stand
self.object:set_properties({walk_chance = 0})
minetest.chat_send_player(clicker:get_player_name(),
"Flamethrower holding ground commander!")
return
end
end
--order to follow
if self.tamed and self.owner == clicker:get_player_name() then
if clicker:get_wielded_item():get_name() == "default:torch" then
self.order = follow
self.object:set_properties({walk_chance = 200})
minetest.chat_send_player(clicker:get_player_name(),
"Flamethrower following commander!")
return
end
end
end
})
mobs:register_egg("mobs_war:defender_flamethrower", "Flamethrower Defender", "mobs_war_drone_launcher.png", 1)

126
defender_helicopter.lua Normal file
View File

@ -0,0 +1,126 @@
mobs:register_mob("mobs_war:defender_helicopter", {
type = "npc",
passive = false,
damage = 3,
pathfinding = 1,
attack_type = "shoot",
attacks_monsters = true,
group_attack = true,
specific_attack = shooters,
reach = 2,
shoot_interval = 0.1,
arrow = "mobs_war:cannon_shot",
shoot_offset = 1,
hp_min = 220,
hp_max = 550,
armor = 500,
collisionbox = {-2.7, 0, -2.7, 2.7, 2.7, 2.7},
visual = "mesh",
mesh = "apache.b3d",
textures = {"vehicles_helicopter2.png"},
--blood_texture = "mobs_blood.png",
makes_footstep_sound = true,
sounds = {
random = "mobs_war_helicopter_hovering",
war_cry = "mobs_war_helicopter_hovering",
death = "mobs_war_explode",
attack = "mobs_war_helicopter_hovering",
shoot_attack = "mobs_war_cannon3",
distance = 50,
},
replace_what = {
{"air", "mobs_war:marker_defender", 0},
{"mobs_war:marker_shooter", "mobs_war:marker_defender", 0},
{"default:dirt_with_grass", "default:dirt", -1.5},
{"default:dirt_with_dry_grass","default:dirt", -1.5},
{"default:dirt_with_snow","default:dirt", -1.5}
},
replace_rate = 100,
walk_chance = 10,
walk_velocity = 30,
run_velocity = 50,
runaway = false,
fall_speed = 1,
stepheight = 5,
fly = true,
fly_mode = "rise",
fly_in = {"air", "mobs_war:marker_defender", "mobs_war:marker_shooter"},
jump = true,
jump_height = 10,
drops = {
{name = "default:steelblock", chance = 1, min = 1, max = 1},
{name = "tnt:gunpowder", chance = 3, min = 1, max = 50},
},
on_die = function(self, pos)
minetest.set_node(pos, {name = "fire:basic_flame"})
end,
water_damage = 1,
lava_damage = 2,
light_damage = 0,
view_range = 50,
fear_height = 500,
floats = 0,
animation = {
stand_start = 2,
stand_end = 18,
walk_start = 2,
walk_end = 18,
run_start = 2,
run_end = 18,
punch_start = 2,
punch_end = 18,
shoot_start = 2,
shoot_end = 18,
speed_normal = 35,
speed_run = 35,
},
follow = {"tnt:gunpowder", "tnt:tnt", "mobs_war:defender_rifle", "mobs_war:defender_machinegun", "mobs_war:bazooka", "mobs_war:flamethrower", "mobs_war:landmine",},
on_rightclick = function(self, clicker)
-- make sure player is clicking
if not clicker or not clicker:is_player() then
return
end
-- feed, tame or heal
if mobs:feed_tame(self, clicker, 1, false, true) then
self.order = stand
self.nametag = "Helicopter"
self.object:set_properties({walk_chance = 0})
minetest.chat_send_player(clicker:get_player_name(),
"Helicopter ready and standing ground commander!")
return
end
--order to stand
if self.tamed and self.owner == clicker:get_player_name() then
if clicker:get_wielded_item():get_name() ~= "default:torch" then
self.order = stand
self.object:set_properties({walk_chance = 0})
minetest.chat_send_player(clicker:get_player_name(),
"Helicopter holding ground commander!")
return
end
end
--order to follow
if self.tamed and self.owner == clicker:get_player_name() then
if clicker:get_wielded_item():get_name() == "default:torch" then
self.order = follow
self.object:set_properties({walk_chance = 200})
minetest.chat_send_player(clicker:get_player_name(),
"Helicopter following commander!")
return
end
end
end
})
mobs:register_egg("mobs_war:defender_helicopter", "Helicopter Defender", "mobs_war_drone_launcher.png", 1)

132
defender_sniper.lua Normal file
View File

@ -0,0 +1,132 @@
mobs:register_mob("mobs_war:defender_sniper", {
type = "npc",
passive = false,
damage = 7,
pathfinding = 1,
attack_type = "dogshoot",
attacks_monsters = true,
group_attack = true,
specific_attack = shooters,
dogshoot_switch = 1,
dogshoot_count_max = 120,
dogshoot_count2_max = 1,
reach = 2,
shoot_interval = 8,
arrow = "mobs_war:shot_sniper",
shoot_offset = 1,
hp_min = 17,
hp_max = 35,
armor = 100,
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
visual = "mesh",
mesh = "character.b3d",
textures = {
{"mobs_defender.png"},
{"mobs_defender2.png"},
{"mobs_defender3.png"},
},
blood_texture = "mobs_blood.png",
makes_footstep_sound = true,
sounds = {
random = "mobs_war_breathing",
war_cry = "",
death = "mobs_war_damage",
damage = "mobs_war_damage",
attack = "mobs_war_buzz",
shoot_attack = "mobs_war_shot_sniper2",
distance = 50,
},
replace_what = {
{"air", "mobs_war:marker_defender", 0},
{"mobs_war:marker_shooter", "mobs_war:marker_defender", 0},
{"default:dirt_with_grass", "default:dirt", -1.5},
{"default:dirt_with_dry_grass","default:dirt", -1.5},
{"default:dirt_with_snow","default:dirt", -1.5},
},
replace_rate = 1,
walk_chance = 8,
walk_velocity = 5,
run_velocity = 7,
runaway = true,
jump = true,
jump_height = 4,
drops = {
{name = "tnt:gunpowder", chance = 5, min = 1, max = 50},
{name = "default:pick_steel", chance = 7, min = 1, max = 1},
{name = "mobs_war:rifle_sniper", chance = 1, min = 1, max = 1},
},
on_die = function(self, pos)
local below = {x = pos.x, y = pos.y -1, z = pos.z}
minetest.set_node(below, {name = "mobs_war:mobs_war_corpse"})
end,
water_damage = 0,
lava_damage = 2,
light_damage = 0,
view_range = 50,
fear_height = 3,
floats = 1,
animation = {
stand_start = 0,
stand_end = 79,
walk_start = 168,
walk_end = 187,
run_start = 168,
run_end = 187,
punch_start = 189,
punch_end = 198,
shoot_start = 200,
shoot_end = 219,
speed_normal = 30,
speed_run = 30,
},
follow = {"tnt:gunpowder", "tnt:tnt", "mobs_war:defender_rifle", "mobs_war:defender_machinegun", "mobs_war:bazooka", "mobs_war:flamethrower", "mobs_war:landmine",},
on_rightclick = function(self, clicker)
-- make sure player is clicking
if not clicker or not clicker:is_player() then
return
end
-- feed, tame or heal
if mobs:feed_tame(self, clicker, 1, false, true) then
self.order = stand
self.nametag = "Sniper"
self.object:set_properties({walk_chance = 0})
minetest.chat_send_player(clicker:get_player_name(),
"Sniper ready and standing ground commander!")
return
end
--order to stand
if self.tamed and self.owner == clicker:get_player_name() then
if clicker:get_wielded_item():get_name() ~= "default:torch" then
self.order = stand
self.object:set_properties({walk_chance = 0})
minetest.chat_send_player(clicker:get_player_name(),
"Sniper holding ground commander!")
return
end
end
--order to follow
if self.tamed and self.owner == clicker:get_player_name() then
if clicker:get_wielded_item():get_name() == "default:torch" then
self.order = follow
self.object:set_properties({walk_chance = 200})
minetest.chat_send_player(clicker:get_player_name(),
"Sniper following commander!")
return
end
end
end
})
mobs:register_egg("mobs_war:defender_sniper", "Sniper Defender", "mobs_war_drone_launcher.png", 1)

124
defender_tank.lua Normal file
View File

@ -0,0 +1,124 @@
mobs:register_mob("mobs_war:defender_tank", {
type = "npc",
passive = false,
damage = 3,
pathfinding = 1,
attack_type = "shoot",
attacks_monsters = true,
group_attack = true,
specific_attack = shooters,
reach = 2,
shoot_interval = 2,
arrow = "mobs_war:shot_bazooka",
shoot_offset = 1,
hp_min = 1000,
hp_max = 2000,
armor = 700,
collisionbox = {-1.7, 0, -1.7, 1.7, 2.6, 1.7},
visual = "mesh",
mesh = "tank.b3d",
textures = {"vehicles_tank.png"},
--blood_texture = "mobs_blood.png",
makes_footstep_sound = true,
sounds = {
random = "mobs_war_tank_engine",
war_cry = "mobs_war_tank_engine",
death = "mobs_war_explode",
attack = "mobs_war_tank_engine",
shoot_attack = "mobs_war_shot_tank",
distance = 50,
},
replace_what = {
{"air", "mobs_war:marker_defender", 0},
{"mobs_war:marker_shooter", "mobs_war:marker_defender", 0},
{"default:dirt_with_grass", "default:dirt", -1.5},
{"default:dirt_with_dry_grass","default:dirt", -1.5},
{"default:dirt_with_snow","default:dirt", -1.5}
},
replace_rate = 1,
walk_chance = 8,
walk_velocity = 1,
run_velocity = 2,
runaway = false,
jump = false,
knock_back = 0,
--jump_height = 1,
drops = {
{name = "tnt:tnt", chance = 1, min = 1, max = 50},
},
on_die = function(self, pos)
local below = {x = pos.x, y = pos.y -1, z = pos.z}
minetest.set_node(below, {name = "default:steelblock"})
minetest.set_node(pos, {name = "fire:basic_flame"})
end,
water_damage = 1,
lava_damage = 2,
light_damage = 0,
view_range = 20,
fear_height = 2,
floats = 0,
animation = {
stand_start = 1,
stand_end = 1,
walk_start = 3,
walk_end = 8,
run_start = 3,
run_end = 8,
punch_start = 1,
punch_end = 1,
shoot_start = 1,
shoot_end = 11,
speed_normal = 35,
speed_run = 35,
},
follow = {"tnt:gunpowder", "tnt:tnt", "mobs_war:defender_rifle", "mobs_war:defender_machinegun", "mobs_war:bazooka", "mobs_war:flamethrower", "mobs_war:landmine",},
on_rightclick = function(self, clicker)
-- make sure player is clicking
if not clicker or not clicker:is_player() then
return
end
-- feed, tame or heal
if mobs:feed_tame(self, clicker, 1, false, true) then
self.order = stand
self.nametag = "Tank"
self.object:set_properties({walk_chance = 0})
minetest.chat_send_player(clicker:get_player_name(),
"Tank ready and standing ground commander!")
return
end
--order to stand
if self.tamed and self.owner == clicker:get_player_name() then
if clicker:get_wielded_item():get_name() ~= "default:torch" then
self.order = stand
self.object:set_properties({walk_chance = 0})
minetest.chat_send_player(clicker:get_player_name(),
"Tank holding ground commander!")
return
end
end
--order to follow
if self.tamed and self.owner == clicker:get_player_name() then
if clicker:get_wielded_item():get_name() == "default:torch" then
self.order = follow
self.object:set_properties({walk_chance = 200})
minetest.chat_send_player(clicker:get_player_name(),
"Tank following commander!")
return
end
end
end
})
mobs:register_egg("mobs_war:defender_tank", "Tank Defender", "mobs_war_drone_launcher.png", 1)

109
defender_vehicle.lua Normal file
View File

@ -0,0 +1,109 @@
mobs:register_mob("mobs_war:defender_vehicle", {
type = "npc",
passive = false,
damage = 3,
pathfinding = 1,
attack_type = "shoot",
attacks_monsters = true,
group_attack = true,
specific_attack = shooters,
reach = 2,
shoot_interval = 0.1,
arrow = "mobs_war:cannon_shot",
shoot_offset = 1,
hp_min = 220,
hp_max = 550,
armor = 500,
collisionbox = {-1.5, 0, -1.5, 1.5, 1.5, 1.5},
visual = "mesh",
mesh = "ute.b3d",
textures = {"vehicles_ute.png"},
--blood_texture = "mobs_blood.png",
makes_footstep_sound = false,
sounds = {
random = "mobs_war_engine",
war_cry = "mobs_war_engine",
death = "mobs_war_explode",
attack = "mobs_war_engine",
shoot_attack = "mobs_war_cannon5",
distance = 50,
},
replace_what = {
{"air", "mobs_war:marker_defender", 0},
{"mobs_war:marker_shooter", "mobs_war:marker_defender", 0},
{"default:dirt_with_grass", "default:dirt", -1.5},
{"default:dirt_with_dry_grass","default:dirt", -1.5},
{"default:dirt_with_snow","default:dirt", -1.5}
},
replace_rate = 1,
walk_chance = 10,
walk_velocity = 8,
run_velocity = 15,
runaway = true,
jump = false,
--jump_height = 1,
knock_back = 0,
drops = {
{name = "tnt:gunpowder", chance = 3, min = 1, max = 50},
},
on_die = function(self, pos)
local below = {x = pos.x, y = pos.y -1, z = pos.z}
minetest.set_node(below, {name = "default:steelblock"})
minetest.set_node(pos, {name = "fire:basic_flame"})
end,
water_damage = 1,
lava_damage = 2,
light_damage = 0,
view_range = 20,
fear_height = 3,
floats = 0,
follow = {"tnt:gunpowder", "tnt:tnt", "mobs_war:defender_rifle", "mobs_war:defender_machinegun", "mobs_war:bazooka", "mobs_war:flamethrower", "mobs_war:landmine",},
on_rightclick = function(self, clicker)
-- make sure player is clicking
if not clicker or not clicker:is_player() then
return
end
-- feed, tame or heal
if mobs:feed_tame(self, clicker, 1, false, true) then
self.order = stand
self.nametag = "Vehicle"
self.object:set_properties({walk_chance = 0})
minetest.chat_send_player(clicker:get_player_name(),
"Vehicle ready and standing ground commander!")
return
end
--order to stand
if self.tamed and self.owner == clicker:get_player_name() then
if clicker:get_wielded_item():get_name() ~= "default:torch" then
self.order = stand
self.object:set_properties({walk_chance = 0})
minetest.chat_send_player(clicker:get_player_name(),
"Vehicle holding ground commander!")
return
end
end
--order to follow
if self.tamed and self.owner == clicker:get_player_name() then
if clicker:get_wielded_item():get_name() == "default:torch" then
self.order = follow
self.object:set_properties({walk_chance = 200})
minetest.chat_send_player(clicker:get_player_name(),
"Vehicle following commander!")
return
end
end
end
})
mobs:register_egg("mobs_war:defender_vehicle", "Vehicle Defender", "mobs_war_drone_launcher.png", 1)

9
depends.txt Normal file
View File

@ -0,0 +1,9 @@
default
tnt
fire
farming
bones
beds
doors
mobs
squaresville?

168
init.lua Normal file
View File

@ -0,0 +1,168 @@
local path = minetest.get_modpath("mobs_war")
dofile(path .. "/weapons.lua")
dofile(path .. "/weapons_player.lua")
dofile(path .. "/spawn.lua")
dofile(path .. "/nodes.lua")
dofile(path .. "/shooter.lua")
dofile(path .. "/defender.lua")
dofile(path .. "/shooter_bazooka.lua")
dofile(path .. "/defender_bazooka.lua")
dofile(path .. "/shooter_suicide.lua")
dofile(path .. "/defender_sniper.lua")
dofile(path .. "/defender_cannon.lua")
dofile(path .. "/shooter_cannon.lua")
dofile(path .. "/defender_flamethrower.lua")
dofile(path .. "/shooter_flamethrower.lua")
dofile(path .. "/defender_vehicle.lua")
dofile(path .. "/shooter_vehicle.lua")
dofile(path .. "/defender_helicopter.lua")
dofile(path .. "/shooter_helicopter.lua")
dofile(path .. "/defender_engineer.lua")
dofile(path .. "/shooter_engineer.lua")
dofile(path .. "/defender_tank.lua")
dofile(path .. "/shooter_tank.lua")
dofile(path .. "/defender_autocannon.lua")
dofile(path .. "/shooter_autocannon.lua")
dofile(path .. "/defender_drone.lua")
dofile(path .. "/shooter_drone.lua")
print ("[MOD] Mobs Redo 'War' loaded")
--Mob lists
local defenders = {"player", "mobs_war:defender", "mobs_war:defender_bazooka", "mobs_war:defender_cannon", "mobs_war:defender_sniper", "mobs_war:defender_flamethrower", "mobs_war:defender_vehicle", "mobs_war:defender_helicopter", "mobs_war:defender_engineer", "mobs_war:defender_tank", "mobs_war:defender_autocannon", "mobs_war:defender_drone"}
local shooters = {"mobs_war:shooter", "mobs_war:shooter_bazooka", "mobs_war:shooter_suicide", "mobs_war:shooter_cannon", "mobs_war:shooter_flamethrower", "mobs_war:shooter_vehicle", "mobs_war:shooter_helicopter", "mobs_war:shooter", "mobs_war:shooter_tank", "mobs_war:shooter_autocannon", "mobs_war:shooter_drone"}
------------------------------------------------------------------MARKER NODES
-- So that the sides can gain and lose territory
--placed in air by mobs
--spawning can only occur near their markers
-------------------------------------------------------------
minetest.register_node("mobs_war:marker_defender", {
description = "Marker Defender",
tiles = {"mobs_war_defender_marker.png"},
drawtype = "airlike",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
protected = true,
on_blast = function(pos)
end,
})
minetest.register_node("mobs_war:marker_shooter", {
description = "Marker Shooter",
drawtype = "airlike",
tiles = {"mobs_war_shooter_marker.png"},
paramtype = "light",
sunlight_propagates = true,
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
protected = true,
on_blast = function(pos)
end,
})
--DISAPPATE MARKERS
--so that ground can be lost
minetest.register_abm{
nodenames = {"mobs_war:marker_defender"},
interval = 60,
chance = 240,
catch_up = false,
action = function(pos)
minetest.set_node(pos, {name = "air"})
end
}
minetest.register_abm{
nodenames = {"mobs_war:marker_shooter"},
interval = 60,
chance = 240,
catch_up = false,
action = function(pos)
minetest.set_node(pos, {name = "air"})
end
}
-- SET MARKER AROUND PLAYER if armed with friendly light arms
--set in air around player
minetest.register_abm{
nodenames = {"air"},
interval = 5,
chance = 1,
action = function(pos, node, active_object_count, active_object_count_wider)
local objs = minetest.env:get_objects_inside_radius(pos, 1)
for k, player in pairs(objs) do
if player:get_player_name() ~=nil then
local pname = player:get_player_name()
local inv = minetest.get_inventory({type="player", name=pname})
if inv ~=nil then
if inv:contains_item("main", "mobs_war:defender_machinegun") or inv:contains_item("main", "mobs_war:defender_rifle") then
minetest.set_node(pos, {name = "mobs_war:marker_defender"})
end
end
end
end
end,
}
--set in hostile around player
minetest.register_abm{
nodenames = {"mobs_war:marker_shooter"},
interval = 5,
chance = 1,
action = function(pos, node, active_object_count, active_object_count_wider)
local objs = minetest.env:get_objects_inside_radius(pos, 1)
for k, player in pairs(objs) do
if player:get_player_name() ~=nil then
local pname = player:get_player_name()
local inv = minetest.get_inventory({type="player", name=pname})
if inv ~=nil then
if inv:contains_item("main", "mobs_war:defender_machinegun") or inv:contains_item("main", "mobs_war:defender_rifle") then
minetest.set_node(pos, {name = "mobs_war:marker_defender"})
end
end
end
end
end,
}

1
mod.conf Normal file
View File

@ -0,0 +1 @@
name = mobs_war

156
nodes.lua Normal file
View File

@ -0,0 +1,156 @@
-------------------------------------------------------------
--CORPSE
--Bones:Bones don't blow up so give weird looking results
--use substitute instead
minetest.register_node("mobs_war:mobs_war_corpse", {
description = "Corpse",
tiles = {
"mobs_war_corpse_top.png^[transform2",
"mobs_war_corpse_bottom.png",
"mobs_war_corpse_side.png",
"mobs_war_corpse_side.png",
"mobs_war_corpse_rear.png",
"mobs_war_corpse_front.png"
},
paramtype2 = "facedir",
groups = {dig_immediate = 2, falling_node = 1},
sounds = default.node_sound_gravel_defaults(),
})
--NODES For Launcher
minetest.register_node("mobs_war:drone_launcher_defender", {
description = "Defender Drone Launcher",
tiles = {"mobs_war_drone_launcher_top.png", "mobs_war_drone_launcher_top.png", "mobs_war_drone_launcher.png"},
sounds = default.node_sound_metal_defaults(),
groups = {cracky = 1, level = 2},
})
minetest.register_node("mobs_war:drone_launcher_shooter", {
description = "Shooter Drone Launcher",
tiles = {"mobs_war_drone_launcher_top.png", "mobs_war_drone_launcher_top.png", "mobs_war_drone_launcher_shooter.png"},
sounds = default.node_sound_metal_defaults(),
groups = {cracky = 1, level = 2},
})
---Craft enemy drone launcher into friendly
minetest.register_craft({
output = "mobs_war:drone_launcher_defender",
recipe = {{"mobs_war:drone_launcher_shooter"}}
})
--BUIDLING NODES
--Bunker
minetest.register_node("mobs_war:bunker", {
description = "Bunker Concrete",
tiles = {"mobs_war_bunker.png"},
sounds = default.node_sound_stone_defaults(),
groups = {cracky = 3, level = 2},
on_blast = function(pos)
minetest.set_node(pos, {name = "mobs_war:bunker_weak"})
end,
})
--Bunker weak
minetest.register_node("mobs_war:bunker_weak", {
description = "Bunker Concrete (weakened)",
tiles = {"mobs_war_bunker_weak.png"},
sounds = default.node_sound_stone_defaults(),
groups = {cracky = 3},
on_blast = function(pos)
minetest.set_node(pos, {name = "mobs_war:bunker_damaged"})
end,
})
--Bunker damaged
minetest.register_node("mobs_war:bunker_damaged", {
description = "Bunker Concrete (damaged)",
tiles = {"mobs_war_bunker_damaged.png"},
sounds = default.node_sound_stone_defaults(),
groups = {cracky = 2, stone = 1},
on_blast = function(pos)
minetest.set_node(pos, {name = "mobs_war:bunker_badly_damaged"})
end,
})
--Bunker badly damaged
minetest.register_node("mobs_war:bunker_badly_damaged", {
description = "Bunker Concrete (badly damaged)",
tiles = {"mobs_war_bunker_badly_damaged.png"},
sounds = default.node_sound_stone_defaults(),
groups = {cracky = 1, stone = 1},
on_blast = function(pos)
minetest.set_node(pos, {name = "default:gravel"})
end,
})
---Craft bunker
minetest.register_craft({
output = "mobs_war:bunker 6",
recipe = {{"group:stone"}, {"group:sand"}, {"default:gravel"}}
})
--Barbed Wire
minetest.register_node("mobs_war:wire", {
description = "Barbed Wire",
drawtype = "firelike",
paramtype = "light",
tiles = {"mobs_war_wire.png"},
sounds = default.node_sound_metal_defaults(),
groups = {snappy = 3},
walkable = false,
damage_per_second = 1,
selection_box = {
type = "fixed",
fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3},
},
})
---Craft wire
minetest.register_craft({
output = "mobs_war:wire 16",
recipe = {{"default:steel_ingot"}}
})
--Sandbags
minetest.register_node("mobs_war:sandbags", {
description = "Sandbags",
tiles = {"mobs_war_sandbags.png"},
sounds = default.node_sound_sand_defaults(),
groups = {crumbly = 3, falling_node = 1},
on_blast = function(pos)
minetest.set_node(pos, {name = "default:sand"})
end,
})
---Craft sandbags
minetest.register_craft({
output = "mobs_war:sandbags 16",
recipe = {{"group:sand"}, {"wool:wool"}}
})

15
settingtypes.txt Normal file
View File

@ -0,0 +1,15 @@
# Rate at which friendly mobs are spawned.
# Lower numbers are faster.
# default = 5500
mobs_war_friendly_rate(Friendly Spawn Rate) float 5500
# Rate at which hostile mobs are spawned.
# Lower numbers are faster.
# default = 4000
mobs_war_hostile_rate(Hostile Spawn Rate) float 4000

91
shooter.lua Normal file
View File

@ -0,0 +1,91 @@
mobs:register_mob("mobs_war:shooter", {
type = "monster",
passive = false,
damage = 3,
pathfinding = 1,
attack_type = "dogshoot",
group_attack = true,
specific_attack = defenders,
dogshoot_switch = 1,
dogshoot_count_max = 60,
dogshoot_count2_max = 10,
reach = 2,
shoot_interval = 1,
arrow = "mobs_war:shot",
shoot_offset = 1,
hp_min = 12,
hp_max = 35,
armor = 100,
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
visual = "mesh",
mesh = "character.b3d",
textures = {
{"mobs_shooter.png"},
{"mobs_shooter2.png"},
{"mobs_shooter3.png"},
},
blood_texture = "mobs_blood.png",
makes_footstep_sound = true,
sounds = {
random = "mobs_war_breathing",
war_cry = "",
death = "mobs_war_damage",
damage = "mobs_war_damage",
attack = "mobs_war_buzz",
shoot_attack = "mobs_war_shot",
distance = 50,
},
replace_what = {
{"air", "mobs_war:marker_shooter", 0},
{"mobs_war:marker_defender", "mobs_war:marker_shooter", 0},
{"default:dirt_with_grass", "default:dirt", -1.5},
{"default:dirt_with_dry_grass","default:dirt", -1.5},
{"default:dirt_with_snow","default:dirt", -1.5},
},
replace_rate = 1,
walk_chance = 8,
walk_velocity = 4,
run_velocity = 6,
runaway = true,
jump = true,
jump_height = 2,
drops = {
{name = "farming:bread", chance = 2, min = 1, max = 4},
{name = "default:sword_steel", chance = 5, min = 1, max = 1},
{name = "mobs_war:shooter_rifle", chance = 1, min = 1, max = 1},
{name = "tnt:gunpowder", chance = 1, min = 1, max = 50},
},
on_die = function(self, pos)
local below = {x = pos.x, y = pos.y -1, z = pos.z}
minetest.set_node(below, {name = "mobs_war:mobs_war_corpse"})
end,
water_damage = 0,
lava_damage = 2,
light_damage = 0,
view_range = 25,
fear_height = 3,
floats = 1,
animation = {
stand_start = 0,
stand_end = 79,
walk_start = 168,
walk_end = 187,
run_start = 168,
run_end = 187,
punch_start = 189,
punch_end = 198,
shoot_start = 200,
shoot_end = 219,
speed_normal = 30,
speed_run = 30,
},
})
mobs:register_egg("mobs_war:shooter", "Shooter", "mobs_war_shot.png", 1)

69
shooter_autocannon.lua Normal file
View File

@ -0,0 +1,69 @@
mobs:register_mob("mobs_war:shooter_autocannon", {
type = "monster",
passive = false,
damage = 2,
attack_type = "shoot",
group_attack = true,
specific_attack = defenders,
reach = 2,
shoot_interval = 0.15,
arrow = "mobs_war:cannon_shot",
shoot_offset = 1,
hp_min = 5000,
hp_max = 10000,
armor = 500,
collisionbox = {-1.2, 0, -1.2, 1.2, 1.2, 1.2},
visual = "mesh",
mesh = "autocannon.obj",
textures = {"mobs_war_autocannon2.png"},
--blood_texture = "mobs_blood.png",
makes_footstep_sound = false,
sounds = {
random = "",
war_cry = "",
death = "mobs_war_explode",
damage = "",
attack = "",
shoot_attack = "mobs_war_cannon4",
distance = 50,
},
replace_what = {
{"air", "mobs_war:marker_shooter", 0},
{"mobs_war:marker_defender", "mobs_war:marker_shooter", 0},
{"default:dirt_with_grass", "default:dirt", -1.5},
{"default:dirt_with_dry_grass","default:dirt", -1.5},
{"default:dirt_with_snow","default:dirt", -1.5},
},
walk_chance = 0,
walk_velocity = 0,
run_velocity = 0,
runaway = false,
jump = false,
jump_height = 0,
drops = {
{name = "mobs_war:shooter_machinegun", chance = 1, min = 1, max = 1},
{name = "tnt:gunpowder", chance = 4, min = 1, max = 50},
},
on_die = function(self, pos)
local below = {x = pos.x, y = pos.y -1, z = pos.z}
minetest.set_node(below, {name = "default:steelblock"})
minetest.set_node(pos, {name = "fire:basic_flame"})
end,
water_damage = 1,
lava_damage = 2,
light_damage = 0,
view_range = 20,
fear_height = 3,
floats = 0,
knock_back = 0,
})
mobs:register_egg("mobs_war:shooter_autocannon", "Autocannon Shooter", "mobs_war_shot.png", 1)

92
shooter_bazooka.lua Normal file
View File

@ -0,0 +1,92 @@
mobs:register_mob("mobs_war:shooter_bazooka", {
type = "monster",
passive = false,
damage = 1,
pathfinding = 1,
attack_type = "dogshoot",
group_attack = true,
specific_attack = defenders,
dogshoot_switch = 1,
dogshoot_count_max = 120,
dogshoot_count2_max = 20,
reach = 2,
shoot_interval = 12,
arrow = "mobs_war:shot_bazooka",
shoot_offset = 1,
hp_min = 12,
hp_max = 35,
armor = 100,
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
visual = "mesh",
mesh = "character.b3d",
textures = {
{"mobs_shooter.png"},
{"mobs_shooter2.png"},
{"mobs_shooter3.png"},
},
blood_texture = "mobs_blood.png",
makes_footstep_sound = true,
sounds = {
random = "mobs_war_breathing",
war_cry = "",
death = "mobs_war_damage",
damage = "mobs_war_damage",
attack = "mobs_war_buzz",
shoot_attack = "mobs_war_shot_sniper",
distance = 50,
},
replace_what = {
{"air", "mobs_war:marker_shooter", 0},
{"mobs_war:marker_defender", "mobs_war:marker_shooter", 0},
{"default:dirt_with_grass", "default:dirt", -1.5},
{"default:dirt_with_dry_grass","default:dirt", -1.5},
{"default:dirt_with_snow","default:dirt", -1.5},
},
replace_rate = 1,
walk_chance = 6,
walk_velocity = 3,
run_velocity = 4,
runaway = true,
jump = true,
jump_height = 1,
drops = {
{name = "default:shovel_steel", chance = 5, min = 1, max = 1},
{name = "tnt:tnt", chance = 2, min = 1, max = 10},
{name = "mobs_war:bazooka", chance = 1, min = 1, max = 1},
},
on_die = function(self, pos)
local below = {x = pos.x, y = pos.y -1, z = pos.z}
minetest.set_node(below, {name = "mobs_war:mobs_war_corpse"})
end,
water_damage = 0,
lava_damage = 2,
light_damage = 0,
view_range = 25,
fear_height = 3,
floats = 1,
animation = {
stand_start = 0,
stand_end = 79,
walk_start = 168,
walk_end = 187,
run_start = 168,
run_end = 187,
punch_start = 189,
punch_end = 198,
shoot_start = 200,
shoot_end = 219,
speed_normal = 30,
speed_run = 30,
},
})
mobs:register_egg("mobs_war:shooter_bazooka", "Bazooka Shooter", "mobs_war_shot.png", 1)

91
shooter_cannon.lua Normal file
View File

@ -0,0 +1,91 @@
mobs:register_mob("mobs_war:shooter_cannon", {
type = "monster",
passive = false,
damage = 2,
pathfinding = 1,
attack_type = "dogshoot",
group_attack = true,
specific_attack = defenders,
dogshoot_switch = 1,
dogshoot_count_max = 3,
dogshoot_count2_max = 2,
reach = 2,
shoot_interval = 0.15,
arrow = "mobs_war:cannon_shot",
shoot_offset = 1,
hp_min = 12,
hp_max = 35,
armor = 100,
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
visual = "mesh",
mesh = "character.b3d",
textures = {
{"mobs_shooter.png"},
{"mobs_shooter2.png"},
{"mobs_shooter3.png"},
},
blood_texture = "mobs_blood.png",
makes_footstep_sound = true,
sounds = {
random = "mobs_war_breathing",
war_cry = "",
death = "mobs_war_damage",
damage = "mobs_war_damage",
attack = "mobs_war_buzz",
shoot_attack = "mobs_war_cannon2",
distance = 50,
},
replace_what = {
{"air", "mobs_war:marker_shooter", 0},
{"mobs_war:marker_defender", "mobs_war:marker_shooter", 0},
{"default:dirt_with_grass", "default:dirt", -1.5},
{"default:dirt_with_dry_grass","default:dirt", -1.5},
{"default:dirt_with_snow","default:dirt", -1.5},
},
replace_rate = 1,
walk_chance = 8,
walk_velocity = 2,
run_velocity = 4,
runaway = true,
jump = true,
jump_height = 2,
drops = {
{name = "default:axe_steel", chance = 5, min = 1, max = 1},
{name = "mobs_war:shooter_machinegun", chance = 1, min = 1, max = 1},
{name = "tnt:gunpowder", chance = 4, min = 1, max = 50},
},
on_die = function(self, pos)
local below = {x = pos.x, y = pos.y -1, z = pos.z}
minetest.set_node(below, {name = "mobs_war:mobs_war_corpse"})
end,
water_damage = 0,
lava_damage = 2,
light_damage = 0,
view_range = 20,
fear_height = 3,
floats = 1,
animation = {
stand_start = 0,
stand_end = 79,
walk_start = 168,
walk_end = 187,
run_start = 168,
run_end = 187,
punch_start = 189,
punch_end = 198,
shoot_start = 200,
shoot_end = 219,
speed_normal = 30,
speed_run = 30,
},
})
mobs:register_egg("mobs_war:shooter_cannon", "Cannon Shooter", "mobs_war_shot.png", 1)

58
shooter_drone.lua Normal file
View File

@ -0,0 +1,58 @@
mobs:register_mob("mobs_war:shooter_drone", {
type = "monster",
passive = false,
damage = 1,
pathfinding = 1,
attack_type = "explode",
explosion_radius = 2,
group_attack = true,
specific_attack = defenders,
reach = 3,
hp_min = 2,
hp_max = 5,
armor = 1,
collisionbox = {-0.5, -0.25, -0.5, 0.5, 0.20, 0.5},
visual = "mesh",
mesh = "drone.obj",
textures = {"mobs_war_drone_shooter.png"},
--blood_texture = "mobs_blood.png",
makes_footstep_sound = false,
sounds = {
random = "mobs_war_drone_hovering",
war_cry = "mobs_war_drone_hovering",
explode = "mobs_war_explode",
attack = "mobs_war_drone_hovering",
distance = 50,
},
replace_rate = 100,
walk_chance = 20,
walk_velocity = 4,
run_velocity = 8,
runaway = false,
fall_speed = 1,
stepheight = 6,
fly = true,
fly_mode = "rise",
fly_in = {"air", "mobs_war:marker_defender", "mobs_war:marker_shooter"},
jump = true,
jump_height = 10,
drops = {
{name = "tnt:tnt", chance = 3, min = 1, max = 2},
},
water_damage = 1,
lava_damage = 2,
light_damage = 0,
view_range = 20,
fear_height = 500,
floats = 0,
})
mobs:register_egg("mobs_war:shooter_drone", "Drone Shooter", "mobs_war_shot.png", 1)

155
shooter_engineer.lua Normal file
View File

@ -0,0 +1,155 @@
mobs:register_mob("mobs_war:shooter_engineer", {
type = "monster",
passive = false,
damage = 1,
pathfinding = 2,
attack_type = "dogfight",
group_attack = true,
specific_attack = defenders,
reach = 2,
hp_min = 40,
hp_max = 50,
armor = 100,
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
visual = "mesh",
mesh = "character.b3d",
textures = {
{"mobs_shooter.png"},
{"mobs_shooter2.png"},
{"mobs_shooter3.png"},
},
blood_texture = "mobs_blood.png",
makes_footstep_sound = true,
sounds = {
random = "mobs_war_breathing",
war_cry = "",
death = "mobs_war_damage",
damage = "mobs_war_damage",
attack = "mobs_war_buzz",
shoot_attack = "mobs_war_shot",
distance = 50,
},
replace_what = {
{"mobs_war:drone_launcher_defender", "default:steelblock", 0.5},
{"air", "mobs_war:marker_shooter", 0},
{"mobs_war:marker_defender", "mobs_war:marker_shooter", 0},
{"default:dirt_with_grass", "mobs_war:landmine", -1.5},
{"default:dirt_with_dry_grass","mobs_war:landmine", -1.5},
{"default:dirt_with_snow","mobs_war:landmine", -1.5}
},
replace_rate = 1,
walk_chance = 30,
walk_velocity = 5,
run_velocity = 7,
runaway = true,
jump = true,
jump_height = 2,
drops = {
{name = "mobs_war:landmine", chance = 1, min = 1, max = 10},
{name = "default:pick_steel", chance = 5, min = 1, max = 1},
{name = "mobs_war:shooter_autocannon", chance = 3, min = 1, max = 2},
{name = "mobs_war:drone_launcher_shooter", chance = 4, min = 1, max = 2},
{name = "tnt:gunpowder", chance = 2, min = 1, max = 50},
},
on_die = function(self, pos)
local below = {x = pos.x, y = pos.y -1, z = pos.z}
minetest.set_node(below, {name = "mobs_war:mobs_war_corpse"})
end,
water_damage = 0,
lava_damage = 2,
light_damage = 0,
view_range = 25,
fear_height = 3,
floats = 1,
animation = {
stand_start = 0,
stand_end = 79,
walk_start = 168,
walk_end = 187,
run_start = 168,
run_end = 187,
punch_start = 189,
punch_end = 198,
shoot_start = 200,
shoot_end = 219,
speed_normal = 30,
speed_run = 30,
},
})
mobs:register_egg("mobs_war:shooter_engineer", "Engineer Shooter", "mobs_war_shot.png", 1)
--Engineer create autocannon
-- make more frequent than defenders, to compensate for bias toward friendly
minetest.register_abm{
nodenames = {"mobs_war:marker_shooter"},
interval = 17,
chance = 45,
action = function(pos, node, active_object_count, active_object_count_wider)
local above = {x = pos.x, y = pos.y +1, z = pos.z}
local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 1)
for k, obj in pairs(objs) do
if obj:get_luaentity() ~= nil then
if obj:get_luaentity().name == "mobs_war:shooter_engineer" and obj:get_luaentity().name ~= "mobs_war:shooter_autocannon" then
minetest.add_entity(above, "mobs_war:shooter_autocannon")
end
end
end
end,
}
--Engineer create drone launcher
-- make more frequent than defenders, to compensate for bias toward friendly
minetest.register_abm{
nodenames = {"mobs_war:marker_shooter"},
neighbors = {"group:soil", "group:sand", "group:stone"},
interval = 17,
chance = 45,
action = function(pos, node, active_object_count, active_object_count_wider)
local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 1)
for k, obj in pairs(objs) do
if obj:get_luaentity() ~= nil then
if obj:get_luaentity().name == "mobs_war:shooter_engineer" and obj:get_luaentity().name ~= "mobs_war:shooter_autocannon" then
minetest.set_node(pos, {name = "mobs_war:drone_launcher_shooter"})
end
end
end
end,
}
--Engineer wire
minetest.register_abm{
nodenames = {"air"},
neighbors = {"group:soil", "group:sand", "group:stone"},
interval = 30,
chance = 100,
action = function(pos, node, active_object_count, active_object_count_wider)
local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 1)
for k, obj in pairs(objs) do
if obj:get_luaentity() ~= nil then
if obj:get_luaentity().name == "mobs_war:shooter_engineer" and obj:get_luaentity().name ~= "mobs_war:shooter_autocannon" then
minetest.set_node(pos, {name = "mobs_war:wire"})
end
end
end
end,
}

92
shooter_flamethrower.lua Normal file
View File

@ -0,0 +1,92 @@
mobs:register_mob("mobs_war:shooter_flamethrower", {
type = "monster",
passive = false,
damage = 1,
pathfinding = 1,
attack_type = "dogshoot",
group_attack = true,
specific_attack = defenders,
dogshoot_switch = 1,
dogshoot_count_max = 120,
dogshoot_count2_max = 20,
reach = 2,
shoot_interval = 4,
arrow = "mobs_war:shot_flamethrower",
shoot_offset = 1,
hp_min = 12,
hp_max = 35,
armor = 100,
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
visual = "mesh",
mesh = "character.b3d",
textures = {
{"mobs_shooter.png"},
{"mobs_shooter2.png"},
{"mobs_shooter3.png"},
},
blood_texture = "mobs_blood.png",
makes_footstep_sound = true,
sounds = {
random = "mobs_war_breathing",
war_cry = "",
death = "mobs_war_damage",
damage = "mobs_war_damage",
attack = "mobs_war_buzz",
shoot_attack = "mobs_war_flamethrower",
distance = 50,
},
replace_what = {
{"air", "mobs_war:marker_shooter", 0},
{"mobs_war:marker_defender", "mobs_war:marker_shooter", 0},
{"default:dirt_with_grass", "default:dirt", -1.5},
{"default:dirt_with_dry_grass","default:dirt", -1.5},
{"default:dirt_with_snow","default:dirt", -1.5},
},
replace_rate = 1,
walk_chance = 6,
walk_velocity = 3,
run_velocity = 4,
runaway = true,
jump = true,
jump_height = 1,
drops = {
{name = "default:torch", chance = 5, min = 1, max = 5},
{name = "tnt:tnt", chance = 2, min = 1, max = 10},
{name = "mobs_war:flamethrower", chance = 1, min = 1, max = 1},
},
on_die = function(self, pos)
local below = {x = pos.x, y = pos.y -1, z = pos.z}
minetest.set_node(below, {name = "mobs_war:mobs_war_corpse"})
end,
water_damage = 0,
lava_damage = 2,
light_damage = 0,
view_range = 15,
fear_height = 3,
floats = 1,
animation = {
stand_start = 0,
stand_end = 79,
walk_start = 168,
walk_end = 187,
run_start = 168,
run_end = 187,
punch_start = 189,
punch_end = 198,
shoot_start = 200,
shoot_end = 219,
speed_normal = 30,
speed_run = 30,
},
})
mobs:register_egg("mobs_war:shooter_flamethrower", "Flamethrower Shooter", "mobs_war_shot.png", 1)

87
shooter_helicopter.lua Normal file
View File

@ -0,0 +1,87 @@
mobs:register_mob("mobs_war:shooter_helicopter", {
type = "monster",
passive = false,
damage = 3,
pathfinding = 1,
attack_type = "shoot",
attacks_monsters = true,
group_attack = true,
specific_attack = defenders,
reach = 2,
shoot_interval = 0.1,
arrow = "mobs_war:cannon_shot",
shoot_offset = 1,
hp_min = 220,
hp_max = 550,
armor = 500,
collisionbox = {-1.7, 0, -1.7, 1.7, 1.7, 1.7},
visual = "mesh",
mesh = "helicopter.b3d",
textures = {"mobs_war_vehicles_helicopter_shooter.png"},
--blood_texture = "mobs_blood.png",
makes_footstep_sound = true,
sounds = {
random = "mobs_war_helicopter_hovering",
war_cry = "mobs_war_helicopter_hovering",
death = "mobs_war_explode",
attack = "mobs_war_helicopter_hovering",
shoot_attack = "mobs_war_cannon4",
distance = 50,
},
replace_what = {
{"air", "mobs_war:marker_shooter", 0},
{"mobs_war:marker_defender", "mobs_war:marker_shooter", 0},
{"default:dirt_with_grass", "default:dirt", -1.5},
{"default:dirt_with_dry_grass","default:dirt", -1.5},
{"default:dirt_with_snow","default:dirt", -1.5},
},
replace_rate = 100,
walk_chance = 10,
walk_velocity = 30,
run_velocity = 50,
runaway = false,
fall_speed = 1,
stepheight = 5,
fly = true,
fly_mode = "rise",
fly_in = {"air", "mobs_war:marker_defender", "mobs_war:marker_shooter"},
jump = true,
jump_height = 10,
drops = {
{name = "default:steelblock", chance = 1, min = 1, max = 1},
{name = "tnt:gunpowder", chance = 3, min = 1, max = 50},
},
on_die = function(self, pos)
minetest.set_node(pos, {name = "fire:basic_flame"})
end,
water_damage = 1,
lava_damage = 2,
light_damage = 0,
view_range = 50,
fear_height = 500,
floats = 0,
animation = {
stand_start = 2,
stand_end = 18,
walk_start = 2,
walk_end = 18,
run_start = 2,
run_end = 18,
punch_start = 2,
punch_end = 18,
shoot_start = 2,
shoot_end = 18,
speed_normal = 35,
speed_run = 35,
},
})
mobs:register_egg("mobs_war:shooter_helicopter", "Helicopter Shooter", "mobs_war_shot.png", 1)

85
shooter_suicide.lua Normal file
View File

@ -0,0 +1,85 @@
mobs:register_mob("mobs_war:shooter_suicide", {
type = "monster",
passive = false,
damage = 1,
pathfinding = 1,
attack_type = "explode",
explosion_radius = 3,
group_attack = true,
specific_attack = defenders,
reach = 2,
hp_min = 25,
hp_max = 35,
armor = 150,
collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35},
visual = "mesh",
mesh = "character.b3d",
textures = {
{"mobs_shooter.png"},
{"mobs_shooter2.png"},
{"mobs_shooter3.png"},
},
blood_texture = "mobs_blood.png",
makes_footstep_sound = true,
sounds = {
random = "mobs_war_breathing",
war_cry = "",
explode = "mobs_war_explode",
damage = "mobs_war_damage",
death = "mobs_war_damage",
attack = "mobs_war_buzz",
distance = 50,
},
replace_what = {
{"air", "mobs_war:marker_shooter", 0},
{"mobs_war:marker_defender", "mobs_war:marker_shooter", 0},
{"default:dirt_with_grass", "default:dirt", -1.5},
{"default:dirt_with_dry_grass","default:dirt", -1.5},
{"default:dirt_with_snow","default:dirt", -1.5},
},
replace_rate = 1,
walk_chance = 20,
walk_velocity = 4,
run_velocity = 6,
runaway = false,
jump = true,
jump_height = 3,
drops = {
{name = "default:pick_steel", chance = 7, min = 1, max = 1},
{name = "tnt:tnt", chance = 1, min = 1, max = 50},
{name = "tnt:gunpowder", chance = 1, min = 1, max = 50},
},
on_die = function(self, pos)
local below = {x = pos.x, y = pos.y -1, z = pos.z}
minetest.set_node(below, {name = "mobs_war:mobs_war_corpse"})
end,
water_damage = 0,
lava_damage = 3,
light_damage = 0,
view_range = 25,
fear_height = 5,
floats = 1,
animation = {
stand_start = 0,
stand_end = 79,
walk_start = 168,
walk_end = 187,
run_start = 168,
run_end = 187,
punch_start = 189,
punch_end = 198,
shoot_start = 200,
shoot_end = 219,
speed_normal = 30,
speed_run = 30,
},
})
mobs:register_egg("mobs_war:shooter_suicide", "Suicide Shooter", "mobs_war_shot.png", 1)

83
shooter_tank.lua Normal file
View File

@ -0,0 +1,83 @@
mobs:register_mob("mobs_war:shooter_tank", {
type = "monster",
passive = false,
damage = 3,
pathfinding = 1,
attack_type = "shoot",
group_attack = true,
specific_attack = defenders,
reach = 2,
shoot_interval = 2,
arrow = "mobs_war:shot_bazooka",
shoot_offset = 1,
hp_min = 1000,
hp_max = 2000,
armor = 700,
collisionbox = {-1.7, 0, -1.7, 1.7, 2.6, 1.7},
visual = "mesh",
mesh = "tank.b3d",
textures = {"vehicles_tank2.png"},
--blood_texture = "mobs_blood.png",
makes_footstep_sound = true,
sounds = {
random = "mobs_war_tank_engine",
war_cry = "mobs_war_tank_engine",
death = "mobs_war_explode",
attack = "mobs_war_tank_engine",
shoot_attack = "mobs_war_shot_tank",
distance = 50,
},
replace_what = {
{"air", "mobs_war:marker_shooter", 0},
{"mobs_war:marker_defender", "mobs_war:marker_shooter", 0},
{"default:dirt_with_grass", "default:dirt", -1.5},
{"default:dirt_with_dry_grass","default:dirt", -1.5},
{"default:dirt_with_snow","default:dirt", -1.5},
},
replace_rate = 1,
walk_chance = 8,
walk_velocity = 1,
run_velocity = 2,
runaway = false,
jump = false,
--jump_height = 1,
knock_back = 0,
drops = {
{name = "tnt:tnt", chance = 1, min = 1, max = 50},
},
on_die = function(self, pos)
local below = {x = pos.x, y = pos.y -1, z = pos.z}
minetest.set_node(below, {name = "default:steelblock"})
minetest.set_node(pos, {name = "fire:basic_flame"})
end,
water_damage = 1,
lava_damage = 2,
light_damage = 0,
view_range = 20,
fear_height = 2,
floats = 0,
animation = {
stand_start = 1,
stand_end = 1,
walk_start = 3,
walk_end = 8,
run_start = 3,
run_end = 8,
punch_start = 1,
punch_end = 1,
shoot_start = 1,
shoot_end = 11,
speed_normal = 35,
speed_run = 35,
},
})
mobs:register_egg("mobs_war:shooter_tank", "Tank Shooter", "mobs_war_shot.png", 1)

69
shooter_vehicle.lua Normal file
View File

@ -0,0 +1,69 @@
mobs:register_mob("mobs_war:shooter_vehicle", {
type = "monster",
passive = false,
damage = 3,
pathfinding = 1,
attack_type = "shoot",
group_attack = true,
specific_attack = defenders,
reach = 2,
shoot_interval = 0.1,
arrow = "mobs_war:cannon_shot",
shoot_offset = 1,
hp_min = 220,
hp_max = 550,
armor = 500,
collisionbox = {-1.7, 0, -1.7, 1.7, 1.7, 1.7},
visual = "mesh",
mesh = "ute.b3d",
textures = {"mobs_war_vehicles_ute_shooter.png"},
--blood_texture = "mobs_blood.png",
makes_footstep_sound = false,
sounds = {
random = "mobs_war_engine",
war_cry = "mobs_war_engine",
death = "mobs_war_explode",
attack = "mobs_war_engine",
shoot_attack = "mobs_war_cannon5",
distance = 50,
},
replace_what = {
{"air", "mobs_war:marker_shooter", 0},
{"mobs_war:marker_defender", "mobs_war:marker_shooter", 0},
{"default:dirt_with_grass", "default:dirt", -1.5},
{"default:dirt_with_dry_grass","default:dirt", -1.5},
{"default:dirt_with_snow","default:dirt", -1.5},
},
replace_rate = 1,
walk_chance = 10,
walk_velocity = 8,
run_velocity = 15,
runaway = true,
jump = false,
--jump_height = 1,
knock_back = 0,
drops = {
{name = "tnt:gunpowder", chance = 3, min = 1, max = 50},
},
on_die = function(self, pos)
local below = {x = pos.x, y = pos.y -1, z = pos.z}
minetest.set_node(below, {name = "default:steelblock"})
minetest.set_node(pos, {name = "fire:basic_flame"})
end,
water_damage = 1,
lava_damage = 2,
light_damage = 0,
view_range = 20,
fear_height = 3,
floats = 0,
})
mobs:register_egg("mobs_war:shooter_vehicle", "Vehicle Shooter", "mobs_war_shot.png", 1)

609
spawn.lua Normal file
View File

@ -0,0 +1,609 @@
--make spawning favour the enemy to compensate for spending more time in friendly territory
local base_spawn_rate = minetest.setting_get("mobs_war_friendly_rate") or 5500
local base_spawn_rate_hostile = minetest.setting_get("mobs_war_hostile_rate") or 4000
local spawn_on = {"default:dirt", "default:dirt_with_grass", "default:dirt_with_dry_grass", "default:dirt_with_snow", "default:dirt_with_rainforest_litter", "default:sand", "default:desert_sand", "default:silver_sand", "default:snow", "default:snowblock", "default:gravel", "default:mossycobble",}
---not currently compatible with squaresville...markers cant get created by regular means...
if minetest.get_modpath("squaresville") then
spawn_on = {"default:dirt", "default:dirt_with_grass", "default:dirt_with_dry_grass", "default:dirt_with_snow", "default:dirt_with_rainforest_litter", "default:sand", "default:desert_sand", "default:silver_sand", "default:snow", "default:snowblock", "default:gravel", "default:mossycobble", "squaresville:roof", "squaresville:sidewalk", "squaresville:road", "squaresville:floor_ceiling", "squaresville:concrete_broken", "squaresville:concrete"}
end
--Destructive and large mobs only spawn at front lines i.e. neighbouring enemy
-- DEFENDERS
mobs:spawn({
name = "mobs_war:defender_drone",
nodes = "mobs_war:drone_launcher_defender",
chance = 5,
active_object_count = 5,
max_height = 20000,
})
mobs:spawn({
name = "mobs_war:defender",
nodes = "mobs_war:marker_defender",
chance = base_spawn_rate,
active_object_count = 1,
max_height = 20000,
})
mobs:spawn({
name = "mobs_war:defender_cannon",
nodes = "mobs_war:marker_defender",
chance = base_spawn_rate * 2,
active_object_count = 1,
max_height = 20000,
})
mobs:spawn({
name = "mobs_war:defender_bazooka",
nodes = "mobs_war:marker_defender",
neighbors = "mobs_war:marker_shooter",
chance = base_spawn_rate * 3,
active_object_count = 1,
max_height = 20000,
})
mobs:spawn({
name = "mobs_war:defender_sniper",
nodes = "mobs_war:marker_defender",
chance = base_spawn_rate * 5,
active_object_count = 1,
max_height = 20000,
})
mobs:spawn({
name = "mobs_war:defender_flamethrower",
nodes = "mobs_war:marker_defender",
neighbors = "mobs_war:marker_shooter",
chance = base_spawn_rate * 8,
active_object_count = 1,
max_height = 20000,
})
mobs:spawn({
name = "mobs_war:defender_vehicle",
nodes = "mobs_war:marker_defender",
neighbors = "mobs_war:marker_shooter",
chance = base_spawn_rate * 8,
active_object_count = 1,
max_height = 20000,
})
mobs:spawn({
name = "mobs_war:defender_helicopter",
nodes = "mobs_war:marker_defender",
neighbors = "mobs_war:marker_shooter",
chance = base_spawn_rate * 13,
active_object_count = 1,
max_height = 20000,
min_height = 10,
})
mobs:spawn({
name = "mobs_war:defender_engineer",
nodes = "mobs_war:marker_defender",
neighbors = "mobs_war:marker_shooter",
chance = base_spawn_rate * 13,
active_object_count = 1,
max_height = 20000,
})
mobs:spawn({
name = "mobs_war:defender_tank",
nodes = "mobs_war:marker_defender",
neighbors = "mobs_war:marker_shooter",
chance = base_spawn_rate * 21,
active_object_count = 1,
max_height = 20000,
})
--SHOOTERS
mobs:spawn({
name = "mobs_war:shooter_drone",
nodes = "mobs_war:drone_launcher_shooter",
chance = 5,
active_object_count = 5,
max_height = 20000,
})
mobs:spawn({
name = "mobs_war:shooter",
nodes = "mobs_war:marker_shooter",
chance = base_spawn_rate_hostile,
active_object_count = 1,
max_height = 20000,
})
mobs:spawn({
name = "mobs_war:shooter_cannon",
nodes = "mobs_war:marker_shooter",
chance = base_spawn_rate_hostile * 2,
active_object_count = 1,
max_height = 20000,
})
mobs:spawn({
name = "mobs_war:shooter_bazooka",
nodes = "mobs_war:marker_shooter",
neighbors = "mobs_war:marker_defender",
chance = base_spawn_rate_hostile * 3,
active_object_count = 1,
max_height = 20000,
})
mobs:spawn({
name = "mobs_war:shooter_suicide",
nodes = "mobs_war:marker_shooter",
chance = base_spawn_rate_hostile * 5,
active_object_count = 1,
max_height = 20000,
})
mobs:spawn({
name = "mobs_war:shooter_flamethrower",
nodes = "mobs_war:marker_shooter",
neighbors = "mobs_war:marker_defender",
chance = base_spawn_rate_hostile * 8,
active_object_count = 1,
max_height = 20000,
})
mobs:spawn({
name = "mobs_war:shooter_vehicle",
nodes = "mobs_war:marker_shooter",
neighbors = "mobs_war:marker_defender",
chance = base_spawn_rate_hostile * 8,
active_object_count = 1,
max_height = 20000,
})
mobs:spawn({
name = "mobs_war:shooter_helicopter",
nodes = "mobs_war:marker_shooter",
neighbors = "mobs_war:marker_defender",
chance = base_spawn_rate_hostile * 11,
active_object_count = 1,
max_height = 20000,
min_height = 10,
})
--make a little more common than defender
mobs:spawn({
name = "mobs_war:shooter_engineer",
nodes = "mobs_war:marker_shooter",
neighbors = "mobs_war:marker_defender",
chance = base_spawn_rate_hostile * 8,
active_object_count = 1,
max_height = 20000,
})
mobs:spawn({
name = "mobs_war:shooter_tank",
nodes = "mobs_war:marker_shooter",
neighbors = "mobs_war:marker_defender",
chance = base_spawn_rate_hostile * 20,
active_object_count = 1,
max_height = 20000,
})
--MAP SPAWN MARKERS
--Main blocks... divides up the landscape into seperate zones
--give shooters a slight advantage for a challange...
--shooter
--give them larger areas to compensate for player being better at taking territory
minetest.register_decoration({
deco_type = "simple",
place_on = spawn_on,
sidelen = 16,
noise_params = {
offset = 0,
scale = 5,
spread = {x = 300, y = 300, z = 300},
seed = 666,
octaves = 4,
persist = 1
},
y_min = -10,
y_max = 31000,
decoration = "mobs_war:marker_shooter",
})
--defender
minetest.register_decoration({
deco_type = "simple",
place_on = spawn_on,
noise_params = {
offset = 0,
scale = 3,
spread = {x = 250, y = 200, z = 250},
seed = 777,
octaves = 4,
persist = 1
},
y_min = -10,
y_max = 31000,
decoration = "mobs_war:marker_defender",
})
--Rogues... to scatter through no man's lands and infiltrate
--defender
minetest.register_decoration({
deco_type = "simple",
place_on = spawn_on,
noise_params = {
offset = 0,
scale = 0.05,
spread = {x = 300, y = 300, z = 300},
seed = 777,
octaves = 2,
persist = 0.1
},
y_min = -20,
y_max = 31000,
decoration = "mobs_war:marker_defender",
})
--shooter
minetest.register_decoration({
deco_type = "simple",
place_on = spawn_on,
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.05,
spread = {x = 300, y = 300, z = 300},
seed = 666,
octaves = 2,
persist = 0.1
},
y_min = -20,
y_max = 31000,
decoration = "mobs_war:marker_shooter",
})
--shooter Drones
minetest.register_decoration({
deco_type = "simple",
place_on = spawn_on,
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.004,
spread = {x = 300, y = 300, z = 300},
seed = 666,
octaves = 1,
persist = 0.1
},
y_min = -20,
y_max = 31000,
decoration = "mobs_war:drone_launcher_shooter",
})
-------------------------------------------------------------
---BUILDINGS
------------------------------------------------------------
local spawn_on_building = {"default:dirt", "default:dirt_with_grass", "default:dirt_with_dry_grass", "default:dirt_with_snow", "default:dirt_with_rainforest_litter", "default:sand", "default:desert_sand", "default:silver_sand", "default:snow", "default:snowblock",}
---Sandbag Cross
minetest.register_decoration({
deco_type = "schematic",
place_on = spawn_on_building,
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.0002,
spread = {x = 550, y = 250, z = 550},
seed = 6661,
octaves = 1,
persist = 0.45
},
y_min = -1,
y_max = 31000,
schematic = minetest.get_modpath("mobs_war") .. "/schematics/bag_crosswire.mts",
flags = {place_center_x = true, place_center_y = true, place_center_z = true, force_placement = true},
})
---Sandbag house
minetest.register_decoration({
deco_type = "schematic",
place_on = spawn_on_building,
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.0002,
spread = {x = 550, y = 250, z = 550},
seed = 7772,
octaves = 1,
persist = 0.45
},
y_min = -1,
y_max = 31000,
schematic = minetest.get_modpath("mobs_war") .. "/schematics/bag_house.mts",
flags = {place_center_x = true, place_center_y = true, place_center_z = true, force_placement = true},
})
---Sandbag pit
minetest.register_decoration({
deco_type = "schematic",
place_on = spawn_on_building,
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.0002,
spread = {x = 550, y = 250, z = 550},
seed = 6663,
octaves = 2,
persist = 0.45
},
y_min = 1,
y_max = 31000,
schematic = minetest.get_modpath("mobs_war") .. "/schematics/bag_pit.mts",
flags = {place_center_x = true, place_center_y = true, place_center_z = true, force_placement = true},
})
---Sandbag pit covered
minetest.register_decoration({
deco_type = "schematic",
place_on = spawn_on_building,
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.0002,
spread = {x = 550, y = 250, z = 550},
seed = 7774,
octaves = 2,
persist = 0.45
},
y_min = 1,
y_max = 31000,
schematic = minetest.get_modpath("mobs_war") .. "/schematics/bag_pit_covered.mts",
flags = {place_center_x = true, place_center_y = true, place_center_z = true, force_placement = true},
})
---Sandbag pit covered large
minetest.register_decoration({
deco_type = "schematic",
place_on = spawn_on_building,
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.0002,
spread = {x = 250, y = 250, z = 250},
seed = 6665,
octaves = 2,
persist = 0.45
},
y_min = 1,
y_max = 31000,
schematic = minetest.get_modpath("mobs_war") .. "/schematics/bag_pit_covered_large.mts",
flags = {place_center_x = true, place_center_y = true, place_center_z = true, force_placement = true},
})
---Sandbag trench
minetest.register_decoration({
deco_type = "schematic",
place_on = spawn_on_building,
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.0002,
spread = {x = 250, y = 250, z = 250},
seed = 7776,
octaves = 2,
persist = 0.45
},
y_min = 1,
y_max = 31000,
schematic = minetest.get_modpath("mobs_war") .. "/schematics/bag_trench.mts",
flags = {place_center_x = true, place_center_y = true, place_center_z = true, force_placement = true},
})
---bunker 1
minetest.register_decoration({
deco_type = "schematic",
place_on = spawn_on_building,
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.0001,
spread = {x = 550, y = 250, z = 550},
seed = 6667,
octaves = 1,
persist = 0.45
},
y_min = 1,
y_max = 31000,
schematic = minetest.get_modpath("mobs_war") .. "/schematics/bunker_1.mts",
flags = {place_center_x = true, place_center_y = true, place_center_z = true, force_placement = true},
})
---bunker 2
minetest.register_decoration({
deco_type = "schematic",
place_on = spawn_on_building,
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.0001,
spread = {x = 550, y = 250, z = 550},
seed = 7778,
octaves = 1,
persist = 0.45
},
y_min = 1,
y_max = 31000,
schematic = minetest.get_modpath("mobs_war") .. "/schematics/bunker_2.mts",
flags = {place_center_x = true, place_center_y = true, place_center_z = true, force_placement = true},
})
---bunker 3
minetest.register_decoration({
deco_type = "schematic",
place_on = spawn_on_building,
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.0001,
spread = {x = 550, y = 250, z = 550},
seed = 6669,
octaves = 1,
persist = 0.45
},
y_min = 1,
y_max = 31000,
schematic = minetest.get_modpath("mobs_war") .. "/schematics/bunker_3.mts",
flags = {place_center_x = true, place_center_y = true, place_center_z = true, force_placement = true},
})
---bunker pillbox 1
minetest.register_decoration({
deco_type = "schematic",
place_on = spawn_on_building,
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.0001,
spread = {x = 550, y = 250, z = 550},
seed = 77710,
octaves = 1,
persist = 0.45
},
y_min = 1,
y_max = 31000,
schematic = minetest.get_modpath("mobs_war") .. "/schematics/bunker_pillbox_1.mts",
flags = {place_center_x = true, place_center_y = true, place_center_z = true, force_placement = true},
})
---bunker pillbox 2
minetest.register_decoration({
deco_type = "schematic",
place_on = spawn_on_building,
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.0001,
spread = {x = 550, y = 250, z = 550},
seed = 66611,
octaves = 1,
persist = 0.45
},
y_min = 1,
y_max = 31000,
schematic = minetest.get_modpath("mobs_war") .. "/schematics/bunker_pillbox_2.mts",
flags = {place_center_x = true, place_center_y = true, place_center_z = true, force_placement = true},
})
---bunker tower
minetest.register_decoration({
deco_type = "schematic",
place_on = spawn_on_building,
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.0001,
spread = {x = 550, y = 250, z = 550},
seed = 77712,
octaves = 1,
persist = 0.45
},
y_min = 1,
y_max = 31000,
schematic = minetest.get_modpath("mobs_war") .. "/schematics/bunker_tower.mts",
flags = {place_center_x = true, place_center_y = true, place_center_z = true, force_placement = true},
})
---bunker underground
minetest.register_decoration({
deco_type = "schematic",
place_on = spawn_on_building,
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.0001,
spread = {x = 550, y = 250, z = 550},
seed = 66613,
octaves = 1,
persist = 0.45
},
y_min = -20,
y_max = 31000,
schematic = minetest.get_modpath("mobs_war") .. "/schematics/bunker_underground.mts",
flags = {place_center_x = true, place_center_y = true, place_center_z = true, force_placement = true},
})
---bunker underground large
minetest.register_decoration({
deco_type = "schematic",
place_on = spawn_on_building,
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.0001,
spread = {x = 550, y = 550, z = 550},
seed = 77714,
octaves = 1,
persist = 0.45
},
y_min = -20,
y_max = 31000,
schematic = minetest.get_modpath("mobs_war") .. "/schematics/bunker_underground_large.mts",
flags = {place_center_x = true, place_center_y = true, place_center_z = true, force_placement = true},
})
---bunker underground lit
minetest.register_decoration({
deco_type = "schematic",
place_on = spawn_on_building,
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.0001,
spread = {x = 550, y = 550, z = 550},
seed = 66615,
octaves = 1,
persist = 0.45
},
y_min = -20,
y_max = 31000,
schematic = minetest.get_modpath("mobs_war") .. "/schematics/bunker_underground_lit.mts",
flags = {place_center_x = true, place_center_y = true, place_center_z = true, force_placement = true},
})

185
weapons.lua Normal file
View File

@ -0,0 +1,185 @@
local bullet_speed = 60
local bullet_scale = 0.01
-- SHOT
mobs:register_arrow("mobs_war:shot", {
visual = "sprite",
visual_size = {x = bullet_scale, y = bullet_scale},
textures = {"mobs_war_shot.png"},
velocity = bullet_speed,
hit_player = function(self, player)
player:punch(self.object, 1.0, {
full_punch_interval = 0.2,
damage_groups = {fleshy = 3},
}, nil)
minetest.sound_play("player_damage", {pos = pos, gain = 1, max_hear_distance = 4,})
end,
hit_mob = function(self, player)
player:punch(self.object, 1.0, {
full_punch_interval = 0.2,
damage_groups = {fleshy = 3},
}, nil)
end,
hit_node = function(self, pos, node)
--mobs:explosion(pos, 0, 0, 0)
minetest.sound_play("mobs_war_thud", {pos = pos, gain = 0.2, max_hear_distance = 4,})
end
})
-- BAZOOKA SHOT
--mobs:explosion(pos, radius, fire, smoke)
mobs:register_arrow("mobs_war:shot_bazooka", {
visual = "sprite",
visual_size = {x = bullet_scale, y = bullet_scale},
textures = {"mobs_war_shot.png"},
velocity = bullet_speed/4,
hit_player = function(self, player)
player:punch(self.object, 1.0, {
full_punch_interval = 0.2,
damage_groups = {fleshy = 25},
}, nil)
local pos = self.object:getpos()
minetest.sound_play("mobs_war_explode", {pos = pos, gain = 5, max_hear_distance = 50,})
mobs:explosion(pos, 1, 1, 1)
end,
hit_mob = function(self, player)
player:punch(self.object, 1.0, {
full_punch_interval = 0.2,
damage_groups = {fleshy = 25},
}, nil)
local pos = self.object:getpos()
minetest.sound_play("mobs_war_explode", {pos = pos, gain = 5, max_hear_distance = 50,})
mobs:explosion(pos, 1, 1, 1)
end,
hit_node = function(self, pos, node)
mobs:explosion(pos, 1, 1, 1)
minetest.sound_play("mobs_war_explode", {pos = pos, gain = 5, max_hear_distance = 50,})
end
})
-- CANNON SHOT
mobs:register_arrow("mobs_war:cannon_shot", {
visual = "sprite",
visual_size = {x = bullet_scale, y = bullet_scale},
textures = {"mobs_war_shot.png"},
velocity = bullet_speed,
tail = 1,
tail_texture = "mobs_war_shot.png",
tail_size = {x = 0.2, y = 0.2},
expire = 0.1,
glow = 10,
hit_player = function(self, player)
player:punch(self.object, 1.0, {
full_punch_interval = 0.1,
damage_groups = {fleshy = 1},
}, nil)
minetest.sound_play("player_damage", {pos = pos, gain = 1, max_hear_distance = 4,})
end,
hit_mob = function(self, player)
player:punch(self.object, 1.0, {
full_punch_interval = 0.2,
damage_groups = {fleshy = 1},
}, nil)
end,
hit_node = function(self, pos, node)
--mobs:explosion(pos, 0, 0, 0)
minetest.sound_play("mobs_war_thud", {pos = pos, gain = 0.2, max_hear_distance = 4,})
end
})
-- SHOT SNIPER
mobs:register_arrow("mobs_war:shot_sniper", {
visual = "sprite",
visual_size = {x = bullet_scale, y = bullet_scale},
textures = {"mobs_war_shot.png"},
velocity = bullet_speed,
hit_player = function(self, player)
player:punch(self.object, 1.0, {
full_punch_interval = 0.2,
damage_groups = {fleshy = 35},
}, nil)
minetest.sound_play("player_damage", {pos = pos, gain = 1, max_hear_distance = 4,})
end,
hit_mob = function(self, player)
player:punch(self.object, 1.0, {
full_punch_interval = 0.2,
damage_groups = {fleshy = 35},
}, nil)
end,
hit_node = function(self, pos, node)
--mobs:explosion(pos, 0, 0, 0)
minetest.sound_play("mobs_war_thud", {pos = pos, gain = 0.8, max_hear_distance = 4,})
end
})
-- FlAMETHROWER SHOT
--fire:basic_flame
mobs:register_arrow("mobs_war:shot_flamethrower", {
visual = "sprite",
visual_size = {x = 2, y = 2},
textures = {"fire_basic_flame.png"},
velocity = bullet_speed/8,
tail = 1,
tail_texture = "fire_basic_flame.png",
tail_size = {x = 2, y = 2},
expire = 0.5,
glow = 10,
hit_player = function(self, player)
player:punch(self.object, 1.0, {
full_punch_interval = 0.2,
damage_groups = {fleshy = 20},
}, nil)
local pos = self.object:getpos()
minetest.sound_play("fire_large", {pos = pos, gain = 1, max_hear_distance = 50,})
minetest.set_node(pos, {name = "fire:basic_flame"})
end,
hit_mob = function(self, player)
player:punch(self.object, 1.0, {
full_punch_interval = 0.2,
damage_groups = {fleshy = 20},
}, nil)
local pos = self.object:getpos()
minetest.sound_play("fire_large", {pos = pos, gain = 1, max_hear_distance = 50,})
minetest.set_node(pos, {name = "fire:basic_flame"})
end,
hit_node = function(self, pos, node)
local newplace = minetest.get_node(pos)
if minetest.get_item_group(newplace.name, "flammable") == 1 then
minetest.sound_play("fire_large", {pos = pos, gain = 1, max_hear_distance = 50,})
minetest.set_node(pos, {name = "fire:basic_flame"})
end
end
})

670
weapons_player.lua Normal file
View File

@ -0,0 +1,670 @@
local bullet_speed = 200
local bullet_scale = 0.15
-- DEFENDER RIFLE
minetest.register_tool("mobs_war:defender_rifle", {
description = "Defender Rifle",
inventory_image = "mobs_war_defender_rifle.png",
wield_scale = {x = 1.5, y = 1.5, z = 1},
tool_capabilities = {
full_punch_interval = 1,
max_drop_level=1,
groupcaps={
snappy={times={[1]=2.0, [2]=1.00, [3]=0.35}, uses=30, maxlevel=3},
},
damage_groups = {fleshy=1},
},
on_use = function(item, placer, pointed_thing)
local dir = placer:get_look_dir();
local playerpos = placer:getpos();
local pname = placer:get_player_name();
local inv = minetest.get_inventory({type="player", name=pname});
if inv:contains_item("main", "tnt:gunpowder") then
local remov = inv:remove_item("main", "tnt:gunpowder")
local obj = minetest.env:add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+1.6+dir.y,z=playerpos.z+0+dir.z}, "mobs_war:rifle_bullet_defender")
local object = obj:get_luaentity()
object.launcher = placer
object.vehicle = nil
local vec = {x=dir.x*6,y=dir.y*6,z=dir.z*6}
obj:setvelocity(vec)
return item
end
end,
})
minetest.register_entity("mobs_war:rifle_bullet_defender", {
visual = "sprite",
visual_size = {x = bullet_scale, y = bullet_scale},
textures = {"mobs_war_shot.png"},
velocity = bullet_speed,
acceleration = -0.1,
damage = 1,
collisionbox = {0, 0, 0, 0, 0, 0},
on_activate = function(self)
local pos = self.object:getpos()
minetest.sound_play("mobs_war_shot2",
{gain = 1, max_hear_distance = 50, loop = false})
end,
on_step = function(self, obj, pos)
minetest.after(10, function()
self.object:remove()
end)
local pos = self.object:getpos()
local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 1)
for k, obj in pairs(objs) do
if obj:get_luaentity() ~= nil then
if obj:get_luaentity().name ~= "mobs_war:rifle_bullet_defender" and obj:get_luaentity().name ~= "__builtin:item" then
obj:punch(self.launcher, 1.0, {
full_punch_interval=0.2,
damage_groups={fleshy=3},
}, nil)
self.object:remove()
end
end
end
for dx=-1,1 do
for dy=-1,1 do
for dz=-1,1 do
local p = {x=pos.x+dx, y=pos.y, z=pos.z+dz}
local t = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz}
local n = minetest.env:get_node(p).name
if n ~= "mobs_war:rifle_bullet_defender" and n ~= "air" and n ~= "mobs_war:marker_defender" and n ~= "mobs_war:marker_shooter" and n ~= "mobs_war:shot" and n ~= "mobs_war:cannon_shot" and n~= "mobs_war:shot_sniper" then
self.object:remove()
return
end
end
end
end
end,
})
-- SHOOTER RIFLE
minetest.register_tool("mobs_war:shooter_rifle", {
description = "Shooter Rifle",
inventory_image = "mobs_war_shooter_rifle.png",
wield_scale = {x = 1.5, y = 1.5, z = 1},
tool_capabilities = {
full_punch_interval = 1,
max_drop_level=1,
groupcaps={
snappy={times={[1]=2.0, [2]=1.00, [3]=0.35}, uses=30, maxlevel=3},
},
damage_groups = {fleshy=1},
},
on_use = function(item, placer, pointed_thing)
local dir = placer:get_look_dir();
local playerpos = placer:getpos();
local pname = placer:get_player_name();
local inv = minetest.get_inventory({type="player", name=pname});
if inv:contains_item("main", "tnt:gunpowder") then
local remov = inv:remove_item("main", "tnt:gunpowder")
local obj = minetest.env:add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+1.6+dir.y,z=playerpos.z+0+dir.z}, "mobs_war:rifle_bullet_shooter")
local object = obj:get_luaentity()
object.launcher = placer
object.vehicle = nil
local vec = {x=dir.x*6,y=dir.y*6,z=dir.z*6}
obj:setvelocity(vec)
return item
end
end,
})
minetest.register_entity("mobs_war:rifle_bullet_shooter", {
visual = "sprite",
visual_size = {x = bullet_scale, y = bullet_scale},
textures = {"mobs_war_shot.png"},
velocity = bullet_speed,
acceleration = -0.1,
damage = 1,
collisionbox = {0, 0, 0, 0, 0, 0},
on_activate = function(self)
local pos = self.object:getpos()
minetest.sound_play("mobs_war_shot",
{gain = 1, max_hear_distance = 50, loop = false})
end,
on_step = function(self, obj, pos)
minetest.after(10, function()
self.object:remove()
end)
local pos = self.object:getpos()
local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 1)
for k, obj in pairs(objs) do
if obj:get_luaentity() ~= nil then
if obj:get_luaentity().name ~= "mobs_war:rifle_bullet_shooter" and obj:get_luaentity().name ~= "__builtin:item" then
obj:punch(self.launcher, 1.0, {
full_punch_interval=0.2,
damage_groups={fleshy=3},
}, nil)
self.object:remove()
end
end
end
for dx=-1,1 do
for dy=-1,1 do
for dz=-1,1 do
local p = {x=pos.x+dx, y=pos.y, z=pos.z+dz}
local t = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz}
local n = minetest.env:get_node(p).name
if n ~= "mobs_war:rifle_bullet_shooter" and n ~= "air" and n ~= "mobs_war:marker_defender" and n ~= "mobs_war:marker_shooter" and n ~= "mobs_war:shot" and n ~= "mobs_war:cannon_shot" and n~= "mobs_war:shot_sniper" then
self.object:remove()
return
end
end
end
end
end,
})
-- BAZOOKA
minetest.register_tool("mobs_war:bazooka", {
description = "Bazooka",
inventory_image = "mobs_war_bazooka.png",
wield_scale = {x = 1.5, y = 1.5, z = 1},
tool_capabilities = {
full_punch_interval = 1,
max_drop_level=1,
groupcaps={
snappy={times={[1]=2.0, [2]=1.00, [3]=0.35}, uses=30, maxlevel=3},
},
damage_groups = {fleshy=1},
},
on_use = function(item, placer, pointed_thing)
local dir = placer:get_look_dir();
local playerpos = placer:getpos();
local pname = placer:get_player_name();
local inv = minetest.get_inventory({type="player", name=pname});
if inv:contains_item("main", "tnt:tnt") then
local remov = inv:remove_item("main", "tnt:tnt")
local obj = minetest.env:add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+1.6+dir.y,z=playerpos.z+0+dir.z}, "mobs_war:bazooka_bullet")
local object = obj:get_luaentity()
object.launcher = placer
object.vehicle = nil
local vec = {x=dir.x*6,y=dir.y*6,z=dir.z*6}
obj:setvelocity(vec)
return item
end
end,
})
minetest.register_entity("mobs_war:bazooka_bullet", {
visual = "sprite",
visual_size = {x = bullet_scale, y = bullet_scale},
textures = {"mobs_war_shot.png"},
velocity = bullet_speed/2,
acceleration = -0.6,
damage = 1,
collisionbox = {0, 0, 0, 0, 0, 0},
on_activate = function(self)
local pos = self.object:getpos()
minetest.sound_play("mobs_war_shot_sniper",
{gain = 1, max_hear_distance = 50, loop = false})
end,
on_step = function(self, obj, pos)
minetest.after(10, function()
self.object:remove()
end)
local velo = self.object:getvelocity()
if velo.y <= 1.2 and velo.y >= -1.2 then
self.object:set_animation({x=1, y=1}, 5, 0)
elseif velo.y <= -1.2 then
self.object:set_animation({x=4, y=4}, 5, 0)
elseif velo.y >= 1.2 then
self.object:set_animation({x=2, y=2}, 5, 0)
end
local pos = self.object:getpos()
local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 1)
for k, obj in pairs(objs) do
if obj:get_luaentity() ~= nil then
if obj:get_luaentity().name ~= "mobs_war:bazooka_bullet" and obj:get_luaentity().name ~= "__builtin:item" then
obj:punch(self.launcher, 1.0, {
full_punch_interval=1.0,
damage_groups={fleshy=25},
}, nil)
tnt.boom(pos, {damage_radius=2,radius=2,ignore_protection=false})
minetest.sound_play("mobs_war_explode",
{gain = 5, max_hear_distance = 50, loop = false})
self.object:remove()
end
end
end
for dx=-1,1 do
for dy=-1,1 do
for dz=-1,1 do
local p = {x=pos.x+dx, y=pos.y, z=pos.z+dz}
local t = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz}
local n = minetest.env:get_node(p).name
if n ~= "mobs_war:bazooka_bullet" and n ~= "air" and n ~= "mobs_war:marker_defender" and n ~= "mobs_war:marker_shooter" and n ~= "mobs_war:shot" and n ~= "mobs_war:cannon_shot" and n~= "mobs_war:shot_sniper" then
local pos = self.object:getpos()
tnt.boom(pos, {damage_radius=2,radius=2,ignore_protection=false})
minetest.sound_play("mobs_war_explode",
{gain = 5, max_hear_distance = 50, loop = false})
self.object:remove()
return
end
end
end
end
end,
})
-- DEFENDER MACHINE GUN
minetest.register_tool("mobs_war:defender_machinegun", {
description = "Defender machinegun",
inventory_image = "mobs_war_defender_machinegun.png",
wield_scale = {x = 1.5, y = 1.5, z = 1},
tool_capabilities = {
full_punch_interval = 1,
max_drop_level=1,
groupcaps={
snappy={times={[1]=2.0, [2]=1.00, [3]=0.35}, uses=30, maxlevel=3},
},
damage_groups = {fleshy=1},
},
on_use = function(item, placer, pointed_thing)
local dir = placer:get_look_dir();
local playerpos = placer:getpos();
local pname = placer:get_player_name();
local inv = minetest.get_inventory({type="player", name=pname});
if inv:contains_item("main", "tnt:gunpowder") then
local remov = inv:remove_item("main", "tnt:gunpowder 4")
local obj = minetest.env:add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+1.6+dir.y,z=playerpos.z+0+dir.z}, "mobs_war:machinegun_bullet_defender")
local object = obj:get_luaentity()
object.launcher = placer
object.vehicle = nil
local vec = {x=dir.x*6,y=dir.y*6,z=dir.z*6}
obj:setvelocity(vec)
return item
end
end,
})
minetest.register_entity("mobs_war:machinegun_bullet_defender", {
visual = "sprite",
visual_size = {x = bullet_scale, y = bullet_scale},
textures = {"mobs_war_shot.png"},
velocity = bullet_speed,
acceleration = -0.2,
damage = 1,
collisionbox = {0, 0, 0, 0, 0, 0},
on_activate = function(self)
local pos = self.object:getpos()
minetest.sound_play("mobs_war_cannon",
{gain = 1, max_hear_distance = 50, loop = false})
end,
on_step = function(self, obj, pos)
minetest.after(10, function()
self.object:remove()
end)
local pos = self.object:getpos() minetest.add_particle({
pos = pos,
velocity = {x = 0, y = 0, z = 0},
acceleration = {x = 0, y = 0, z = 0},
expirationtime = 0.1,
collisiondetection = false,
texture = "mobs_war_shot.png",
size = {x = bullet_scale, y = bullet_scale},
glow = 10,
})
local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 1)
for k, obj in pairs(objs) do
if obj:get_luaentity() ~= nil then
if obj:get_luaentity().name ~= "mobs_war:machinegun_bullet_defender" and obj:get_luaentity().name ~= "__builtin:item" then
obj:punch(self.launcher, 1.0, {
full_punch_interval=0.2,
damage_groups={fleshy=12},
}, nil)
self.object:remove()
end
end
end
for dx=-1,1 do
for dy=-1,1 do
for dz=-1,1 do
local p = {x=pos.x+dx, y=pos.y, z=pos.z+dz}
local t = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz}
local n = minetest.env:get_node(p).name
if n ~= "mobs_war:machinegun_bullet_defender" and n ~= "air" and n ~= "mobs_war:marker_defender" and n ~= "mobs_war:marker_shooter" and n ~= "mobs_war:shot" and n ~= "mobs_war:cannon_shot" and n~= "mobs_war:shot_sniper" then
self.object:remove()
return
end
end
end
end
end,
})
-- SHOOTER MACHINE GUN
minetest.register_tool("mobs_war:shooter_machinegun", {
description = "Shooter machinegun",
inventory_image = "mobs_war_shooter_machinegun.png",
wield_scale = {x = 1.5, y = 1.5, z = 1},
tool_capabilities = {
full_punch_interval = 1,
max_drop_level=1,
groupcaps={
snappy={times={[1]=2.0, [2]=1.00, [3]=0.35}, uses=30, maxlevel=3},
},
damage_groups = {fleshy=1},
},
on_use = function(item, placer, pointed_thing)
local dir = placer:get_look_dir();
local playerpos = placer:getpos();
local pname = placer:get_player_name();
local inv = minetest.get_inventory({type="player", name=pname});
if inv:contains_item("main", "tnt:gunpowder") then
local remov = inv:remove_item("main", "tnt:gunpowder 4")
local obj = minetest.env:add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+1.6+dir.y,z=playerpos.z+0+dir.z}, "mobs_war:machinegun_bullet_shooter")
local object = obj:get_luaentity()
object.launcher = placer
object.vehicle = nil
local vec = {x=dir.x*6,y=dir.y*6,z=dir.z*6}
obj:setvelocity(vec)
return item
end
end,
})
minetest.register_entity("mobs_war:machinegun_bullet_shooter", {
visual = "sprite",
visual_size = {x = bullet_scale, y = bullet_scale},
textures = {"mobs_war_shot.png"},
velocity = bullet_speed,
acceleration = -0.2,
damage = 1,
collisionbox = {0, 0, 0, 0, 0, 0},
on_activate = function(self)
local pos = self.object:getpos()
minetest.sound_play("mobs_war_cannon2",
{gain = 1, max_hear_distance = 50, loop = false})
end,
on_step = function(self, obj, pos)
minetest.after(10, function()
self.object:remove()
end)
local pos = self.object:getpos() minetest.add_particle({
pos = pos,
velocity = {x = 0, y = 0, z = 0},
acceleration = {x = 0, y = 0, z = 0},
expirationtime = 0.1,
collisiondetection = false,
texture = "mobs_war_shot.png",
size = {x = bullet_scale, y = bullet_scale},
glow = 10,
})
local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2)
for k, obj in pairs(objs) do
if obj:get_luaentity() ~= nil then
if obj:get_luaentity().name ~= "mobs_war:machinegun_bullet_shooter" and obj:get_luaentity().name ~= "__builtin:item" then
obj:punch(self.launcher, 1.0, {
full_punch_interval=0.2,
damage_groups={fleshy=12},
}, nil)
self.object:remove()
end
end
end
for dx=-1,1 do
for dy=-1,1 do
for dz=-1,1 do
local p = {x=pos.x+dx, y=pos.y, z=pos.z+dz}
local t = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz}
local n = minetest.env:get_node(p).name
if n ~= "mobs_war:machinegun_bullet_shooter" and n ~= "air" and n ~= "mobs_war:marker_defender" and n ~= "mobs_war:marker_shooter" and n ~= "mobs_war:shot" and n ~= "mobs_war:cannon_shot" and n~= "mobs_war:shot_sniper" then
self.object:remove()
return
end
end
end
end
end,
})
-- SNIPER RIFLE
minetest.register_tool("mobs_war:rifle_sniper", {
description = "Sniper Rifle",
inventory_image = "mobs_war_rifle_sniper.png",
wield_scale = {x = 1.5, y = 1.5, z = 1},
tool_capabilities = {
full_punch_interval = 1,
max_drop_level=1,
groupcaps={
snappy={times={[1]=2.0, [2]=1.00, [3]=0.35}, uses=30, maxlevel=3},
},
damage_groups = {fleshy=1},
},
on_use = function(item, placer, pointed_thing)
local dir = placer:get_look_dir();
local playerpos = placer:getpos();
local pname = placer:get_player_name();
local inv = minetest.get_inventory({type="player", name=pname});
if inv:contains_item("main", "tnt:gunpowder") then
local remov = inv:remove_item("main", "tnt:gunpowder 8")
local obj = minetest.env:add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+1.6+dir.y,z=playerpos.z+0+dir.z}, "mobs_war:rifle_bullet_sniper")
local object = obj:get_luaentity()
object.launcher = placer
object.vehicle = nil
local vec = {x=dir.x*6,y=dir.y*6,z=dir.z*6}
obj:setvelocity(vec)
return item
end
end,
})
minetest.register_entity("mobs_war:rifle_bullet_sniper", {
visual = "sprite",
visual_size = {x = bullet_scale, y = bullet_scale},
textures = {"mobs_war_shot.png"},
velocity = bullet_speed,
acceleration = -0.05,
damage = 1,
collisionbox = {0, 0, 0, 0, 0, 0},
on_activate = function(self)
local pos = self.object:getpos()
minetest.sound_play("mobs_war_shot_sniper2",
{gain = 1, max_hear_distance = 50, loop = false})
end,
on_step = function(self, obj, pos)
minetest.after(10, function()
self.object:remove()
end)
local pos = self.object:getpos()
local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 1)
for k, obj in pairs(objs) do
if obj:get_luaentity() ~= nil then
if obj:get_luaentity().name ~= "mobs_war:rifle_bullet_sniper" and obj:get_luaentity().name ~= "__builtin:item" then
obj:punch(self.launcher, 1.0, {
full_punch_interval=0.2,
damage_groups={fleshy=35},
}, nil)
self.object:remove()
end
end
end
for dx=-1,1 do
for dy=-1,1 do
for dz=-1,1 do
local p = {x=pos.x+dx, y=pos.y, z=pos.z+dz}
local t = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz}
local n = minetest.env:get_node(p).name
if n ~= "mobs_war:rifle_bullet_defender" and n ~= "air" and n ~= "mobs_war:marker_defender" and n ~= "mobs_war:marker_shooter" and n ~= "mobs_war:shot" and n ~= "mobs_war:cannon_shot" and n~= "mobs_war:shot_sniper" then
self.object:remove()
return
end
end
end
end
end,
})
-- FLAMETHROWER
minetest.register_tool("mobs_war:flamethrower", {
description = "Flamethrower",
inventory_image = "mobs_war_flamethrower.png",
wield_scale = {x = 1.5, y = 1.5, z = 1},
tool_capabilities = {
full_punch_interval = 1,
max_drop_level=1,
groupcaps={
snappy={times={[1]=2.0, [2]=1.00, [3]=0.35}, uses=30, maxlevel=3},
},
damage_groups = {fleshy=1},
},
on_use = function(item, placer, pointed_thing)
local dir = placer:get_look_dir();
local playerpos = placer:getpos();
local pname = placer:get_player_name();
local inv = minetest.get_inventory({type="player", name=pname});
if inv:contains_item("main", "tnt:gunpowder") then
local remov = inv:remove_item("main", "tnt:gunpowder 1")
local obj = minetest.env:add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+1.6+dir.y,z=playerpos.z+0+dir.z}, "mobs_war:flamethrower_bullet")
local object = obj:get_luaentity()
object.launcher = placer
object.vehicle = nil
local vec = {x=dir.x*6,y=dir.y*6,z=dir.z*6}
obj:setvelocity(vec)
return item
end
end,
})
minetest.register_entity("mobs_war:flamethrower_bullet", {
visual = "sprite",
visual_size = {x = 1, y = 1},
textures = {"fire_basic_flame.png"},
velocity = bullet_speed/10,
acceleration = -20,
damage = 1,
collisionbox = {0, 0, 0, 0, 0, 0},
on_activate = function(self)
local pos = self.object:getpos()
minetest.sound_play("mobs_war_flamethrower",
{gain = 1, max_hear_distance = 50, loop = false})
end,
on_step = function(self, obj, pos)
minetest.after(10, function()
self.object:remove()
end)
local pos = self.object:getpos() minetest.add_particle({
pos = pos,
velocity = {x = 0, y = 0, z = 0},
acceleration = {x = 0, y = 0, z = 0},
expirationtime = 0.5,
collisiondetection = false,
texture = "fire_basic_flame.png",
size = {x = 1, y = 1},
glow = 10,
})
local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2)
for k, obj in pairs(objs) do
if obj:get_luaentity() ~= nil then
if obj:get_luaentity().name ~= "mobs_war:flamethrower_bullet" and obj:get_luaentity().name ~= "__builtin:item" then
obj:punch(self.launcher, 1.0, {
full_punch_interval=0.2,
damage_groups={fleshy=20},
}, nil)
minetest.set_node(pos, {name = "fire:basic_flame"})
minetest.sound_play("fire_large", {pos = pos, gain = 1, max_hear_distance = 50,})
self.object:remove()
end
end
end
for dx=-1,1 do
for dy=-1,1 do
for dz=-1,1 do
local p = {x=pos.x+dx, y=pos.y, z=pos.z+dz}
local t = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz}
local n = minetest.env:get_node(p).name
if n ~= "mobs_war:flamethrower_bullet" and n ~= "air" and n ~= "mobs_war:marker_defender" and n ~= "mobs_war:marker_shooter" and n ~= "mobs_war:shot" and n ~= "mobs_war:cannon_shot" and n~= "mobs_war:shot_sniper" then
minetest.set_node(pos, {name = "fire:basic_flame"})
minetest.sound_play("fire_large", {pos = pos, gain = 1, max_hear_distance = 50,})
self.object:remove()
return
end
end
end
end
end,
})
--LANDMINE
minetest.register_node("mobs_war:landmine", {
description = "Landmine",
tiles = {"default_dirt.png"},
paramtype = "light",
groups = {crumbly = 3, oddly_breakable_by_hand=1},
sounds = default.node_sound_metal_defaults(),
on_punch = function(pos, node, puncher)
tnt.boom(pos, {damage_radius=2,radius=1,ignore_protection=false})
minetest.sound_play("mobs_war_explode",
{gain = 5, max_hear_distance = 50, loop = false})
end,
})
--detonate landmine
minetest.register_abm{
nodenames = {"mobs_war:landmine"},
interval = 1,
chance = 4,
catch_up = false,
action = function(pos)
local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y + 1,z=pos.z}, 1)
for k, obj in pairs(objs) do
if obj:get_luaentity() ~= nil and obj:get_luaentity().name ~= "__builtin:item" then
if obj:get_luaentity().name ~= "mobs_war:defender_engineer" and obj:get_luaentity().name ~= "mobs_war:shooter_engineer" then
tnt.boom(pos, {damage_radius=1,radius=1,ignore_protection=false})
minetest.sound_play("mobs_war_explode", {pos = pos, gain = 4, max_hear_distance = 50,})
end
end
end
for k, player in pairs(objs) do
if player:get_player_name()~=nil then
tnt.boom(pos, {damage_radius=1,radius=1,ignore_protection=false})
minetest.sound_play("mobs_war_explode", {pos = pos, gain = 4, max_hear_distance = 50,})
end
end
end
}