Add files via upload
parent
8506ab323f
commit
14de5df373
|
@ -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)
|
||||
|
||||
|
||||
|
||||
|
|
@ -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)
|
|
@ -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)
|
||||
|
||||
|
||||
|
||||
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
@ -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)
|
||||
|
||||
|
||||
|
||||
|
|
@ -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,
|
||||
}
|
||||
|
||||
|
|
@ -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)
|
||||
|
||||
|
||||
|
||||
|
|
@ -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)
|
||||
|
||||
|
||||
|
||||
|
|
@ -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)
|
||||
|
||||
|
||||
|
||||
|
|
@ -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)
|
||||
|
||||
|
||||
|
||||
|
|
@ -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)
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
default
|
||||
tnt
|
||||
fire
|
||||
farming
|
||||
bones
|
||||
beds
|
||||
doors
|
||||
mobs
|
||||
squaresville?
|
|
@ -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,
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -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"}}
|
||||
})
|
||||
|
||||
|
|
@ -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
|
|
@ -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)
|
||||
|
||||
|
||||
|
||||
|
|
@ -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)
|
||||
|
|
@ -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)
|
||||
|
||||
|
||||
|
||||
|
|
@ -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)
|
||||
|
||||
|
||||
|
||||
|
|
@ -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)
|
||||
|
||||
|
||||
|
||||
|
|
@ -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,
|
||||
}
|
||||
|
|
@ -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)
|
||||
|
||||
|
||||
|
||||
|
|
@ -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)
|
||||
|
||||
|
||||
|
||||
|
|
@ -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)
|
||||
|
||||
|
||||
|
||||
|
|
@ -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)
|
||||
|
||||
|
||||
|
||||
|
|
@ -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)
|
||||
|
||||
|
||||
|
||||
|
|
@ -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},
|
||||
})
|
|
@ -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
|
||||
})
|
||||
|
|
@ -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
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue