Unpacking ZIPs

Stage 4: Unpack 0.3

  Making v0.3 branch here.
pull/2/head v0.3
david 2021-04-02 22:14:02 -04:00
parent 1d1cdab90c
commit ee57054beb
178 changed files with 8590 additions and 2541 deletions

207
aa12.lua Normal file
View File

@ -0,0 +1,207 @@
minetest.register_craft({
output = 'rangedweapons:aa12',
recipe = {
{'rangedweapons:gunsteel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
{'default:diamondblock', 'default:steel_ingot', 'rangedweapons:plastic_sheet'},
{'default:steel_ingot', 'dye:black', 'rangedweapons:plastic_sheet'},
}
})
minetest.register_craft({
output = 'rangedweapons:aa12',
recipe = {
{'moreores:silver_ingot', 'default:steel_ingot', 'default:steel_ingot'},
{'default:diamondblock', 'default:steel_ingot', 'rangedweapons:plastic_sheet'},
{'default:steel_ingot', 'dye:black', 'rangedweapons:plastic_sheet'},
}
})
minetest.register_craftitem("rangedweapons:aa12", {
stack_max= 1,
wield_scale = {x=1.75,y=1.75,z=1.3},
description = "" ..core.colorize("#35cdff","AA-12\n") ..core.colorize("#FFFFFF", "Ranged damage: 2-6 X 10\n") ..core.colorize("#FFFFFF", "Accuracy: 65%\n") ..core.colorize("#FFFFFF", "Mob knockback: 2\n")..core.colorize("#FFFFFF", "Critical chance: 3%\n") ..core.colorize("#FFFFFF", "Critical damage: 8-16 X 10\n") ..core.colorize("#FFFFFF", "Ammunition: 12 gauge shells\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.2\n") ..core.colorize("#FFFFFF", "Gun type: Auto-shotgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 20"),
range = 0,
inventory_image = "rangedweapons_aa12.png",
})
local timer = 0
minetest.register_globalstep(function(dtime, player)
timer = timer + dtime;
if timer >= 0.2 then
for _, player in pairs(minetest.get_connected_players()) do
local inv = player:get_inventory()
local controls = player:get_player_control()
if controls.LMB then
timer = 0
local wielded_item = player:get_wielded_item():get_name()
if wielded_item == "rangedweapons:aa12" then
if not inv:contains_item("main", "rangedweapons:shell") then
minetest.sound_play("rangedweapons_empty", {object=player})
else
if wielded_item == "rangedweapons:aa12" then
inv:remove_item("main", "rangedweapons:shell")
local pos = player:getpos()
local dir = player:get_look_dir()
local yaw = player:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:aa12shot")
if obj then
minetest.sound_play("rangedweapons_shotgun_shot", {object=obj})
obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)})
obj:setacceleration({x=dir.x * math.random(-3.5,3.5), y=math.random(-3.5,3.5), z=dir.z * math.random(-3.5,3.5)})
------------------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:aa12shot")
obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)})
obj:setacceleration({x=dir.x * math.random(-3.5,3.5), y=math.random(-3.5,3.5), z=dir.z * math.random(-3.5,3.5)})
------------------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:aa12shot")
obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)})
obj:setacceleration({x=dir.x * math.random(-3.5,3.5), y=math.random(-3.5,3.5), z=dir.z * math.random(-3.5,3.5)})
------------------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:aa12shot")
obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)})
obj:setacceleration({x=dir.x * math.random(-3.5,3.5), y=math.random(-3.5,3.5), z=dir.z * math.random(-3.5,3.5)})
------------------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:aa12shot")
obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)})
obj:setacceleration({x=dir.x * math.random(-3.5,3.5), y=math.random(-3.5,3.5), z=dir.z * math.random(-3.5,3.5)})
------------------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:aa12shot")
obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)})
obj:setacceleration({x=dir.x * math.random(-3.5,3.5), y=math.random(-3.5,3.5), z=dir.z * math.random(-3.5,3.5)})
------------------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:aa12shot")
obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)})
obj:setacceleration({x=dir.x * math.random(-3.5,3.5), y=math.random(-3.5,3.5), z=dir.z * math.random(-3.5,3.5)})
------------------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:aa12shot")
obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)})
obj:setacceleration({x=dir.x * math.random(-3.5,3.5), y=math.random(-3.5,3.5), z=dir.z * math.random(-3.5,3.5)})
------------------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:aa12shot")
obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)})
obj:setacceleration({x=dir.x * math.random(-3.5,3.5), y=math.random(-3.5,3.5), z=dir.z * math.random(-3.5,3.5)})
------------------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:aa12shot")
obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)})
obj:setacceleration({x=dir.x * math.random(-3.5,3.5), y=math.random(-3.5,3.5), z=dir.z * math.random(-3.5,3.5)})
pos.y = pos.y + 0
local obj = minetest.add_entity(pos, "rangedweapons:empty_shell_shotgun")
minetest.sound_play("", {object=obj})
obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10})
obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5})
obj:setyaw(yaw + math.pi)
minetest.add_particle({
pos = pos,
velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} ,
acceleration = {x=dir.x * -4, y=2, z=dir.z * -4},
expirationtime = 0.5,
size = 6,
collisiondetection = false,
vertical = false,
texture = "tnt_smoke.png",
glow = 5,
})
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or player
end
end
end
end
end
end
end
end
end
end)
local rangedweapons_aa12shot = {
physical = false,
timer = 0,
visual = "sprite",
visual_size = {x=0.1, y=0.1},
textures = {"rangedweapons_buckball.png"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_aa12shot.on_step = function(self, dtime, node, pos)
self.timer = self.timer + dtime
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.20 then
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 ~= "rangedweapons:aa12shot" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 3 then
local damage = math.random(8,16)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=4},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(2,6)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 2},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 3 then
local damage = math.random(8,16)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(2,6)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
if self.timer >= 4.0 then
self.object:remove()
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") then
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
if node.name == "rangedweapons:barrel" or
node.name == "doors:door_wood_a" or
node.name == "doors:door_wood_b" or
node.name == "doors:door_glass_a" or
node.name == "doors:door_glass_b" or
node.name == "xpanes:pane" or
node.name == "xpanes:pane_flat" or
node.name == "vessels:drinking_glass" or
node.name == "vessels:glass_bottle" or
node.name == "default:glass" then
minetest.get_node_timer(pos):start(0)
end
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
end
end
minetest.register_entity("rangedweapons:aa12shot", rangedweapons_aa12shot )

177
ak47.lua Normal file
View File

@ -0,0 +1,177 @@
minetest.register_craft({
output = 'rangedweapons:ak47',
recipe = {
{'default:diamond', 'default:steel_ingot', 'default:tree'},
{'default:tree', 'default:mese', 'default:steel_ingot'},
{'default:steel_ingot', '', 'default:tree'},
}
})
minetest.register_craftitem("rangedweapons:ak47", {
stack_max= 1,
wield_scale = {x=1.75,y=1.75,z=1.3},
description = "" ..core.colorize("#35cdff","AK-47\n") ..core.colorize("#FFFFFF", "Ranged damage: 6-16\n") ..core.colorize("#FFFFFF", "Accuracy: 77%\n") ..core.colorize("#FFFFFF", "Mob knockback: 5\n")..core.colorize("#FFFFFF", "Critical chance: 16%\n") ..core.colorize("#FFFFFF", "Critical damage: 17-26\n") ..core.colorize("#FFFFFF", "Ammunition: 7.26mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.165\n") ..core.colorize("#FFFFFF", "Gun type: Assault rifle\n") ..core.colorize("#FFFFFF", "Bullet velocity: 40"),
range = 0,
inventory_image = "rangedweapons_ak47.png",
})
local timer = 0
minetest.register_globalstep(function(dtime, player)
timer = timer + dtime;
if timer >= 0.165 then
for _, player in pairs(minetest.get_connected_players()) do
local inv = player:get_inventory()
local controls = player:get_player_control()
if controls.LMB then
timer = 0
local wielded_item = player:get_wielded_item():get_name()
if wielded_item == "rangedweapons:ak47" then
if not inv:contains_item("main", "rangedweapons:726mm") then
minetest.sound_play("rangedweapons_empty", {object=player})
else
if wielded_item == "rangedweapons:ak47" then
inv:remove_item("main", "rangedweapons:726mm")
local pos = player:getpos()
local dir = player:get_look_dir()
local yaw = player:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:ak47shot")
if obj then
minetest.sound_play("rangedweapons_ak", {object=obj})
obj:setvelocity({x=dir.x * 40, y=dir.y * 40, z=dir.z * 40})
obj:setacceleration({x=dir.x * math.random(-2.3,2.3), y=math.random(-2.3,2.3), z=dir.z * math.random(-2.3,2.3)})
obj:setyaw(yaw + math.pi)
pos.y = pos.y + 0
local obj = minetest.add_entity(pos, "rangedweapons:empty_shell")
minetest.sound_play("", {object=obj})
obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10})
obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5})
obj:setyaw(yaw + math.pi)
minetest.add_particle({
pos = pos,
velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} ,
acceleration = {x=dir.x * -4, y=2, z=dir.z * -4},
expirationtime = 0.5,
size = 4,
collisiondetection = false,
vertical = false,
texture = "tnt_smoke.png",
glow = 5,
})
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or player
end
end
end
end
end
end
end
end
end
end)
local rangedweapons_ak47shot = {
physical = false,
timer = 0,
visual = "sprite",
visual_size = {x=0.3, y=0.3},
textures = {"rangedweapons_invisible.png"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_ak47shot.on_step = function(self, dtime, node, pos)
self.timer = self.timer + dtime
local tiem = 0.002
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.08 then
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 ~= "rangedweapons:ak47shot" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 16 then
local damage = math.random(17,26)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=10},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(6,16)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 5},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 16 then
local damage = math.random(17,26)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(6,16)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
if timer >= 0.002 + tiem then
minetest.add_particle({
pos = pos,
velocity = 0,
acceleration = {x=0, y=0, z=0},
expirationtime = 0.06,
size = 3,
collisiondetection = false,
vertical = false,
texture = "rangedweapons_bullet_fly.png",
glow = 15,
})
tiem = tiem + 0.002
end
if self.timer >= 4.0 then
self.object:remove()
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") then
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
if node.name == "rangedweapons:barrel" or
node.name == "doors:door_glass_a" or
node.name == "doors:door_glass_b" or
node.name == "xpanes:pane" or
node.name == "xpanes:pane_flat" or
node.name == "vessels:drinking_glass" or
node.name == "vessels:glass_bottle" or
node.name == "default:glass" then
minetest.get_node_timer(pos):start(0)
end
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
end
end
minetest.register_entity("rangedweapons:ak47shot", rangedweapons_ak47shot )

154
ammo.lua Normal file
View File

@ -0,0 +1,154 @@
minetest.register_craftitem("rangedweapons:9mm", {
stack_max= 10000,
wield_scale = {x=0.4,y=0.4,z=1.2},
description = "" ..core.colorize("#35cdff","9mm round\n")..core.colorize("#FFFFFF", "Ammunition for handguns, machine-pistols and rarely sub-machineguns"),
inventory_image = "rangedweapons_9mm.png",
})
minetest.register_craft({
output = 'rangedweapons:9mm 30',
recipe = {
{'default:steel_ingot', '', ''},
{'tnt:gunpowder', '', ''},
{'default:copper_ingot', '', ''},
}
})
minetest.register_craftitem("rangedweapons:10mm", {
stack_max= 1500,
wield_scale = {x=0.4,y=0.4,z=1.2},
description = "" ..core.colorize("#35cdff","10mm round\n")..core.colorize("#FFFFFF", "Ammunition for sub-machineguns"),
inventory_image = "rangedweapons_10mm.png",
})
minetest.register_craft({
output = 'rangedweapons:10mm 60',
recipe = {
{'', 'default:bronze_ingot', ''},
{'default:steel_ingot', 'tnt:gunpowder', 'default:steel_ingot'},
{'default:steel_ingot', 'tnt:gunpowder', 'default:steel_ingot'},
}
})
minetest.register_craftitem("rangedweapons:357", {
stack_max= 250,
wield_scale = {x=0.4,y=0.4,z=1.2},
description = "" ..core.colorize("#35cdff",".357 magnum round\n")..core.colorize("#FFFFFF", "Ammunition for magnums/revolvers"),
inventory_image = "rangedweapons_357.png",
})
minetest.register_craft({
output = 'rangedweapons:357 15',
recipe = {
{'default:copper_ingot', '', ''},
{'tnt:gunpowder', '', ''},
{'default:gold_ingot', '', ''},
}
})
minetest.register_craftitem("rangedweapons:726mm", {
stack_max= 2000,
wield_scale = {x=0.4,y=0.4,z=1.2},
description = "" ..core.colorize("#35cdff","7.26mm round\n")..core.colorize("#FFFFFF", "Ammunition for Heavy machineguns and some assault rifles"),
inventory_image = "rangedweapons_762mm.png",
})
minetest.register_craft({
output = 'rangedweapons:726mm 50',
recipe = {
{'default:bronze_ingot', 'tnt:gunpowder', 'default:bronze_ingot'},
{'default:gold_ingot', 'tnt:gunpowder', 'default:gold_ingot'},
{'default:gold_ingot', 'tnt:gunpowder', 'default:gold_ingot'},
}
})
minetest.register_craftitem("rangedweapons:556mm", {
stack_max= 1000,
wield_scale = {x=0.4,y=0.4,z=1.2},
description = "" ..core.colorize("#35cdff","5.56mm round\n")..core.colorize("#FFFFFF", "Ammunition for most assault rifles"),
inventory_image = "rangedweapons_556mm.png",
})
minetest.register_craft({
output = 'rangedweapons:556mm 75',
recipe = {
{'', 'default:gold_ingot', ''},
{'default:gold_ingot', 'tnt:gunpowder', 'default:gold_ingot'},
{'default:gold_ingot', 'tnt:gunpowder', 'default:gold_ingot'},
}
})
minetest.register_craftitem("rangedweapons:shell", {
stack_max= 84,
wield_scale = {x=0.4,y=0.4,z=1.2},
description = "" ..core.colorize("#35cdff","12 gauge shell\n")..core.colorize("#FFFFFF", "Ammunition for shotguns"),
inventory_image = "rangedweapons_shell.png",
})
minetest.register_craft({
output = 'rangedweapons:shell 12',
recipe = {
{'default:bronze_ingot', 'default:steel_ingot', 'default:bronze_ingot'},
{'default:bronze_ingot', 'tnt:gunpowder', 'default:bronze_ingot'},
{'default:gold_ingot', 'tnt:gunpowder', 'default:gold_ingot'},
}
})
minetest.register_craftitem("rangedweapons:308winchester", {
stack_max= 120,
wield_scale = {x=0.4,y=0.4,z=1.2},
description = "" ..core.colorize("#35cdff","308.winchester round\n")..core.colorize("#FFFFFF", "Ammunition for rifles"),
inventory_image = "rangedweapons_308winchester.png",
})
minetest.register_craft({
output = 'rangedweapons:308winchester 15',
recipe = {
{'', 'default:steel_ingot', ''},
{'default:bronze_ingot', 'tnt:gunpowder', 'default:bronze_ingot'},
{'default:gold_ingot', 'tnt:gunpowder', 'default:gold_ingot'},
}
})
minetest.register_craftitem("rangedweapons:40mm", {
stack_max= 48,
wield_scale = {x=0.8,y=0.8,z=2.4},
description = "" ..core.colorize("#35cdff","40mm grenade\n")..core.colorize("#FFFFFF", "Ammunition for grenade launchers"),
inventory_image = "rangedweapons_40mm.png",
})
minetest.register_craft({
output = 'rangedweapons:40mm 6',
recipe = {
{'', 'default:gold_ingot', ''},
{'default:steel_ingot', 'tnt:gunpowder', 'default:steel_ingot'},
{'tnt:gunpowder', 'default:bronze_ingot', 'tnt:gunpowder'},
}
})
minetest.register_craftitem("rangedweapons:rocket", {
stack_max= 25,
wield_scale = {x=1.2,y=1.2,z=2.4},
description = "" ..core.colorize("#35cdff","Rocket\n")..core.colorize("#FFFFFF", "Ammunition for rocket launchers"),
inventory_image = "rangedweapons_rocket.png",
})
minetest.register_craft({
output = 'rangedweapons:rocket 1',
recipe = {
{'', '', 'rangedweapons:40mm'},
{'', 'tnt:gunpowder', ''},
{'default:steel_ingot', '', ''},
}
})

219
awp.lua Normal file
View File

@ -0,0 +1,219 @@
minetest.register_craft({
output = 'rangedweapons:awp_uld',
recipe = {
{'rangedweapons:gunsteel_ingot', 'default:diamondblock', 'rangedweapons:gunsteel_ingot'},
{'rangedweapons:gunsteel_ingot', 'rangedweapons:gunsteel_ingot', 'rangedweapons:gunsteel_ingot'},
{'dye:dark_green', 'default:diamond', 'rangedweapons:plastic_sheet'},
}
})
minetest.register_craftitem("rangedweapons:awp_uld", {
stack_max= 1,
wield_scale = {x=1.9,y=1.9,z=1.1},
range = 0,
description = "" ..core.colorize("#35cdff","A.W.P. \n") ..core.colorize("#FFFFFF", "Ranged damage: 100/sec of bullet lifetime\n") ..core.colorize("#FFFFFF", "Accuracy: 100%\n") ..core.colorize("#FFFFFF", "Mob knockback: 15\n") ..core.colorize("#FFFFFF", "Critical chance: 45%\n") ..core.colorize("#FFFFFF", "Critical damage: 250/sec of bullet lifetime\n") ..core.colorize("#FFFFFF", "Ammunition: 308.Winchester rounds\n") ..core.colorize("#FFFFFF", "Reload time: 1.5\n") ..core.colorize("#be0d00", "The gun is NOT loaded! (Right-click to load)\n")..core.colorize("#FFFFFF", "Gun type: Rifle\n") ..core.colorize("#FFFFFF", "Bullet velocity: 60"),
inventory_image = "rangedweapons_awp.png",
on_use = function(user)
minetest.sound_play("rangedweapons_empty", {user})
end,
})
local timer = 0
minetest.register_globalstep(function(dtime, player)
timer = timer + dtime;
if timer >= 0.001 then
for _, player in pairs(minetest.get_connected_players()) do
local inv = player:get_inventory()
local controls = player:get_player_control()
if player:get_wielded_item():get_name() == "rangedweapons:awp_uld"
and inv:contains_item("main", "rangedweapons:308winchester")then
if controls.RMB then
inv:remove_item("main", "rangedweapons:308winchester")
player:set_wielded_item("rangedweapons:awp_rld")
local pos = player:getpos()
local dir = player:get_look_dir()
local yaw = player:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:empty_shell")
minetest.sound_play("", {object=obj})
obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10})
obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5})
obj:setyaw(yaw + math.pi)
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or player
end
end
timer = 0
minetest.sound_play("rangedweapons_reload_a", {player})
end
end
if timer >= 1.5 and
player:get_wielded_item():get_name() == "rangedweapons:awp_rld" then
player:set_wielded_item("rangedweapons:awp")
timer = 0
minetest.sound_play("rangedweapons_reload_b", {player})
end
end
end
end)
minetest.register_craftitem("rangedweapons:awp_rld", {
stack_max= 1,
range = 0,
wield_scale = {x=1.9,y=1.9,z=1.1},
description = "**RELOADING A.W.P.**",
groups = {not_in_creative_inventory = 1},
inventory_image = "rangedweapons_awp_rld.png",
})
minetest.register_tool("rangedweapons:awp", {
description = "" ..core.colorize("#35cdff","A.W.P. \n") ..core.colorize("#FFFFFF", "Ranged damage: 100/sec of bullet lifetime\n")..core.colorize("#FFFFFF", "Accuracy: 100%\n") ..core.colorize("#FFFFFF", "Mob knockback: 15\n") ..core.colorize("#FFFFFF", "Critical chance: 45%\n") ..core.colorize("#FFFFFF", "Critical damage: 250/sec of bullet lifetime\n") ..core.colorize("#FFFFFF", "Ammunition: 308.Winchester rounds\n") ..core.colorize("#FFFFFF", "Reload time: 1.5\n") ..core.colorize("#27a600", "The gun is loaded!\n")..core.colorize("#FFFFFF", "Gun type: Rifle\n") ..core.colorize("#FFFFFF", "Bullet velocity: 60"),
range = 0,
groups = {not_in_creative_inventory = 1},
wield_scale = {x=1.9,y=1.9,z=1.1},
inventory_image = "rangedweapons_awp.png",
on_use = function(itemstack, user, pointed_thing)
local pos = user:getpos()
local dir = user:get_look_dir()
local yaw = user:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:awpshot")
if obj then
minetest.sound_play("rangedweapons_rifle_a", {object=obj})
obj:setvelocity({x=dir.x * 60, y=dir.y * 60, z=dir.z * 60})
obj:setacceleration({x=dir.x * 0, y=0, z=dir.z * 0})
obj:setyaw(yaw + math.pi)
minetest.add_particle({
pos = pos,
velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} ,
acceleration = {x=dir.x * -4, y=2, z=dir.z * -4},
expirationtime = 1.5,
size = 8,
collisiondetection = false,
vertical = false,
texture = "tnt_smoke.png",
glow = 5,
})
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or user
itemstack = "rangedweapons:awp_uld"
end
end
end
return itemstack
end,
})
local rangedweapons_awpshot = {
physical = false,
timer = 0,
visual = "sprite",
visual_size = {x=0.3, y=0.3},
textures = {"rangedweapons_invisible.png"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_awpshot.on_step = function(self, dtime, node, pos)
self.timer = self.timer + dtime
local tiem = 0.002
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.05 then
local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1.5)
for k, obj in pairs(objs) do
if obj:get_luaentity() ~= nil then
if obj:get_luaentity().name ~= "rangedweapons:awpshot" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 45 then
local damage = 250 * self.timer
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 30},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = 100 * self.timer
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 15},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 45 then
local damage = 250 * self.timer
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = 100 * self.timer
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
if timer >= 0.002 + tiem then
minetest.add_particle({
pos = pos,
velocity = 0,
acceleration = {x=0, y=0, z=0},
expirationtime = 0.06,
size = 3,
collisiondetection = false,
vertical = false,
texture = "rangedweapons_bullet_fly.png",
glow = 15,
})
tiem = tiem + 0.002
end
if self.timer >= 4.0 then
self.object:remove()
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") then
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
if node.name == "rangedweapons:barrel" or
node.name == "doors:door_glass_a" or
node.name == "doors:door_glass_b" or
node.name == "xpanes:pane" or
node.name == "xpanes:pane_flat" or
node.name == "vessels:drinking_glass" or
node.name == "vessels:glass_bottle" or
node.name == "default:glass" then
minetest.get_node_timer(pos):start(0)
end
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
end
end
minetest.register_entity("rangedweapons:awpshot", rangedweapons_awpshot )

249
benelli.lua Normal file
View File

@ -0,0 +1,249 @@
minetest.register_craft({
output = "rangedweapons:benelli_uld",
recipe = {
{"rangedweapons:gunsteel_ingot", "default:diamond", "default:steelblock"},
{"rangedweapons:plastic_sheet", "default:diamond", "default:steel_ingot"},
}
})
minetest.register_craftitem("rangedweapons:benelli_uld", {
stack_max= 1,
wield_scale = {x=2.0,y=2.0,z=1.20},
range = 0,
description = "" ..core.colorize("#35cdff","Benelli M3\n") ..core.colorize("#FFFFFF", "Ranged damage: 3-9 X 12\n") ..core.colorize("#FFFFFF", "Accuracy: 62%\n") ..core.colorize("#FFFFFF", "Mob knockback: 6\n") ..core.colorize("#FFFFFF", "Critical chance: 4%\n") ..core.colorize("#FFFFFF", "Critical damage: 9-19 X 12\n") ..core.colorize("#FFFFFF", "Ammunition: 12 gauge shells\n") ..core.colorize("#FFFFFF", "Reload time: 0.60\n") ..core.colorize("#be0d00", "The gun is NOT loaded! (Right-click to load)\n")..core.colorize("#FFFFFF", "Gun type: shotgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 20"),
inventory_image = "rangedweapons_benelli.png",
on_use = function(user)
minetest.sound_play("rangedweapons_empty", {user})
end,
})
local timer = 0
minetest.register_globalstep(function(dtime, player)
timer = timer + dtime;
if timer >= 0.001 then
for _, player in pairs(minetest.get_connected_players()) do
local inv = player:get_inventory()
local controls = player:get_player_control()
if player:get_wielded_item():get_name() == "rangedweapons:benelli_uld"
and inv:contains_item("main", "rangedweapons:shell")then
if controls.RMB then
inv:remove_item("main", "rangedweapons:shell")
player:set_wielded_item("rangedweapons:benelli_rld")
local pos = player:getpos()
local dir = player:get_look_dir()
local yaw = player:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:empty_shell_shotgun")
minetest.sound_play("", {object=obj})
obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10})
obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5})
obj:setyaw(yaw + math.pi)
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or player
end
end
timer = 0
minetest.sound_play("rangedweapons_shotgun_reload_a", {player})
end
end
if timer >= 0.60 and
player:get_wielded_item():get_name() == "rangedweapons:benelli_rld" then
player:set_wielded_item("rangedweapons:benelli")
timer = 0
minetest.sound_play("rangedweapons_shotgun_reload_b", {player})
end
end
end
end)
minetest.register_craftitem("rangedweapons:benelli_rld", {
stack_max= 1,
range = 0,
wield_scale = {x=2.0,y=2.0,z=1.20},
description = "**RELOADING BENELLI M3**",
groups = {not_in_creative_inventory = 1},
inventory_image = "rangedweapons_benelli_rld.png",
})
minetest.register_tool("rangedweapons:benelli", {
description = "" ..core.colorize("#35cdff","Benelli M3\n") ..core.colorize("#FFFFFF", "Ranged damage: 3-9 X 12\n") ..core.colorize("#FFFFFF", "Accuracy: 62%\n")..core.colorize("#FFFFFF", "Mob knockback: 6\n") ..core.colorize("#FFFFFF", "Critical chance: 4%\n") ..core.colorize("#FFFFFF", "Critical damage: 9-19 X 12\n") ..core.colorize("#FFFFFF", "Ammunition: 12 gauge shells\n") ..core.colorize("#FFFFFF", "Reload time: 0.60\n") ..core.colorize("#27a600", "The gun is loaded!\n")..core.colorize("#FFFFFF", "Gun type: shotgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 20"),
range = 0,
groups = {not_in_creative_inventory = 1},
wield_scale = {x=2.0,y=2.0,z=1.20},
inventory_image = "rangedweapons_benelli.png",
on_use = function(itemstack, user, pointed_thing)
local pos = user:getpos()
local dir = user:get_look_dir()
local yaw = user:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:benellishot")
if obj then
minetest.sound_play("rangedweapons_shotgun_shot", {object=obj})
obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)})
obj:setacceleration({x=dir.x * math.random(-3.8,3.8), y=math.random(-3.8,3.8), z=dir.z * math.random(-3.8,3.8)})
-----------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:benellishot")
obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)})
obj:setacceleration({x=dir.x * math.random(-3.8,3.8), y=math.random(-3.8,3.8), z=dir.z * math.random(-3.8,3.8)})
-----------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:benellishot")
obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)})
obj:setacceleration({x=dir.x * math.random(-3.8,3.8), y=math.random(-3.8,3.8), z=dir.z * math.random(-3.8,3.8)})
-----------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:benellishot")
obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)})
obj:setacceleration({x=dir.x * math.random(-3.8,3.8), y=math.random(-3.8,3.8), z=dir.z * math.random(-3.8,3.8)})
-----------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:benellishot")
obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)})
obj:setacceleration({x=dir.x * math.random(-3.8,3.8), y=math.random(-3.8,3.8), z=dir.z * math.random(-3.8,3.8)})
-----------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:benellishot")
obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)})
obj:setacceleration({x=dir.x * math.random(-3.8,3.8), y=math.random(-3.8,3.8), z=dir.z * math.random(-3.8,3.8)})
-----------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:benellishot")
obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)})
obj:setacceleration({x=dir.x * math.random(-3.8,3.8), y=math.random(-3.8,3.8), z=dir.z * math.random(-3.8,3.8)})
-----------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:benellishot")
obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)})
obj:setacceleration({x=dir.x * math.random(-3.8,3.8), y=math.random(-3.8,3.8), z=dir.z * math.random(-3.8,3.8)})
-----------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:benellishot")
obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)})
obj:setacceleration({x=dir.x * math.random(-3.8,3.8), y=math.random(-3.8,3.8), z=dir.z * math.random(-3.8,3.8)})
-----------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:benellishot")
obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)})
obj:setacceleration({x=dir.x * math.random(-3.8,3.8), y=math.random(-3.8,3.8), z=dir.z * math.random(-3.8,3.8)})
-----------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:benellishot")
obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)})
obj:setacceleration({x=dir.x * math.random(-3.8,3.8), y=math.random(-3.8,3.8), z=dir.z * math.random(-3.8,3.8)})
-----------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:benellishot")
obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)})
obj:setacceleration({x=dir.x * math.random(-3.8,3.8), y=math.random(-3.8,3.8), z=dir.z * math.random(-3.8,3.8)})
-----------------------------------------------------
minetest.add_particle({
pos = pos,
velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} ,
acceleration = {x=dir.x * -4, y=2, z=dir.z * -4},
expirationtime = 1.25,
size = 10,
collisiondetection = false,
vertical = false,
texture = "tnt_smoke.png",
glow = 5,
})
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or user
itemstack = "rangedweapons:benelli_uld"
end
end
end
return itemstack
end,
})
local rangedweapons_benellishot = {
physical = false,
timer = 0,
visual = "sprite",
visual_size = {x=0.1, y=0.1},
textures = {"rangedweapons_buckball.png"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_benellishot.on_step = function(self, dtime, node, pos)
self.timer = self.timer + dtime
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.225 then
local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1.25)
for k, obj in pairs(objs) do
if obj:get_luaentity() ~= nil then
if obj:get_luaentity().name ~= "rangedweapons:benellishot" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 4 then
local damage = math.random(9,19)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 12},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(3,9)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 6},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 4 then
local damage = math.random(9,19)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(3,9)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
if self.timer >= 4.0 then
self.object:remove()
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") then
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
if node.name == "rangedweapons:barrel" or
node.name == "doors:door_wood_a" or
node.name == "doors:door_wood_b" or
node.name == "doors:door_glass_a" or
node.name == "doors:door_glass_b" or
node.name == "xpanes:pane" or
node.name == "xpanes:pane_flat" or
node.name == "vessels:drinking_glass" or
node.name == "vessels:glass_bottle" or
node.name == "default:glass" then
minetest.get_node_timer(pos):start(0)
end
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
end
end
minetest.register_entity("rangedweapons:benellishot", rangedweapons_benellishot )

190
beretta.lua Normal file
View File

@ -0,0 +1,190 @@
local timer = 0
minetest.register_globalstep(function(dtime, player)
timer = timer + dtime;
if timer >= 0.4 then
for _, player in pairs(minetest.get_connected_players()) do
if player:get_wielded_item():get_name() == "rangedweapons:beretta_rld" then
player:set_wielded_item("rangedweapons:beretta")
minetest.sound_play("", {player})
end
end
end
end)
minetest.register_craftitem("rangedweapons:beretta_rld", {
stack_max= 1,
wield_scale = {x=1.1,y=1.1,z=1.05},
description = "***RELOADING BERETTA M9***",
range = 0,
groups = {not_in_creative_inventory = 1},
inventory_image = "rangedweapons_beretta_rld.png",
})
minetest.register_tool("rangedweapons:beretta", {
description = "" ..core.colorize("#35cdff","Beretta M9\n") ..core.colorize("#FFFFFF", "Ranged damage: 5-8\n") ..core.colorize("#FFFFFF", "Accuracy: 94%\n") ..core.colorize("#FFFFFF", "Mob knockback: 3\n") ..core.colorize("#FFFFFF", "Critical chance: 15%\n") ..core.colorize("#FFFFFF", "Critical damage: 9-14\n") ..core.colorize("#FFFFFF", "Ammunition: 9mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.4\n") ..core.colorize("#FFFFFF", "Gun type: Handgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 25"),
wield_scale = {x=1.1,y=1.1,z=1.05},
range = 0,
inventory_image = "rangedweapons_beretta.png",
on_use = function(itemstack, user, pointed_thing)
timer = 0
local inv = user:get_inventory()
if not inv:contains_item("main", "rangedweapons:9mm 1") then
minetest.sound_play("rangedweapons_empty", {object=user})
return itemstack
end
if not minetest.setting_getbool("creative_mode") then
inv:remove_item("main", "rangedweapons:9mm")
end
local pos = user:getpos()
local dir = user:get_look_dir()
local yaw = user:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:berettashot")
if obj then
minetest.sound_play("rangedweapons_beretta", {object=obj})
obj:setvelocity({x=dir.x * 25, y=dir.y * 25, z=dir.z * 25})
obj:setacceleration({x=dir.x * math.random(-0.6,0.6), y=math.random(-0.6,0.6), z=dir.z * math.random(-0.6,0.6)})
obj:setyaw(yaw + math.pi)
pos.y = pos.y + 0
local obj = minetest.add_entity(pos, "rangedweapons:empty_shell")
minetest.sound_play("", {object=obj})
obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10})
obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5})
obj:setyaw(yaw + math.pi)
local obj = minetest.add_entity(pos, "rangedweapons:smoke")
minetest.add_particle({
pos = pos,
velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} ,
acceleration = {x=dir.x * -4, y=2, z=dir.z * -4},
expirationtime = 0.7,
size = 5,
collisiondetection = false,
vertical = false,
texture = "tnt_smoke.png",
glow = 5,
})
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or user
itemstack = "rangedweapons:beretta_rld"
end
end
end
return itemstack
end,
})
minetest.register_craft({
output = 'rangedweapons:beretta',
recipe = {
{'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
{'', 'default:mese_crystal', 'rangedweapons:plastic_sheet'},
{'', '', 'rangedweapons:plastic_sheet'},
}
})
local rangedweapons_berettashot = {
physical = false,
timer = 0,
visual = "sprite",
visual_size = {x=0.3, y=0.3},
textures = {"rangedweapons_invisible.png"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_berettashot.on_step = function(self, dtime, node, pos)
self.timer = self.timer + dtime
local tiem = 0.002
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.11 then
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 ~= "rangedweapons:berettashot" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 15 then
local damage = math.random(9,14)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=6},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(5,8)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=3},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 15 then
local damage = math.random(9,14)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(5,8)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
if timer >= 0.002 + tiem then
minetest.add_particle({
pos = pos,
velocity = 0,
acceleration = {x=0, y=0, z=0},
expirationtime = 0.06,
size = 3,
collisiondetection = false,
vertical = false,
texture = "rangedweapons_bullet_fly.png",
glow = 15,
})
tiem = tiem + 0.002
end
if self.timer >= 4.0 then
self.object:remove()
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") then
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
if node.name == "rangedweapons:barrel" or
node.name == "doors:door_glass_a" or
node.name == "doors:door_glass_b" or
node.name == "xpanes:pane" or
node.name == "xpanes:pane_flat" or
node.name == "vessels:drinking_glass" or
node.name == "vessels:glass_bottle" or
node.name == "default:glass" then
minetest.get_node_timer(pos):start(0)
end
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
end
end
minetest.register_entity("rangedweapons:berettashot", rangedweapons_berettashot )

38
bullet_stuff.lua Normal file
View File

@ -0,0 +1,38 @@
minetest.register_craftitem("rangedweapons:308shot", {
wield_scale = {x=1.0,y=1.0,z=1.0},
inventory_image = "rangedweapons_308_shot.png",
})
minetest.register_craftitem("rangedweapons:handgunshot", {
wield_scale = {x=1.0,y=1.0,z=1.0},
inventory_image = "rangedweapons_9mm_shot.png",
})
minetest.register_craftitem("rangedweapons:smgshot", {
wield_scale = {x=1.0,y=1.0,z=1.0},
inventory_image = "rangedweapons_10mm_shot.png",
})
minetest.register_craftitem("rangedweapons:heavy_shot", {
wield_scale = {x=1.0,y=1.0,z=1.0},
inventory_image = "rangedweapons_726mm_shot.png",
})
minetest.register_craftitem("rangedweapons:assault_shot", {
wield_scale = {x=1.0,y=1.0,z=1.0},
inventory_image = "rangedweapons_556mm_shot.png",
})
minetest.register_craftitem("rangedweapons:magnum_shot", {
wield_scale = {x=1.0,y=1.0,z=1.0},
inventory_image = "rangedweapons_44_shot.png",
})

197
deagle.lua Normal file
View File

@ -0,0 +1,197 @@
local timer = 0
minetest.register_globalstep(function(dtime, player)
timer = timer + dtime;
if timer >= 0.75 then
for _, player in pairs(minetest.get_connected_players()) do
if player:get_wielded_item():get_name() == "rangedweapons:deagle_rld" then
player:set_wielded_item("rangedweapons:deagle")
minetest.sound_play("", {player})
end
end
end
end)
minetest.register_craftitem("rangedweapons:deagle_rld", {
stack_max= 1,
wield_scale = {x=1.25,y=1.25,z=1.5},
description = "***RELOADING DESERT EAGLE***",
range = 0,
groups = {not_in_creative_inventory = 1},
inventory_image = "rangedweapons_deagle_rld.png",
})
minetest.register_tool("rangedweapons:deagle", {
description = "" ..core.colorize("#35cdff","Desert Eagle\n")..core.colorize("#FFFFFF", "Ranged damage: 11-18\n") ..core.colorize("#FFFFFF", "Accuracy: 85%\n") ..core.colorize("#FFFFFF", "Mob knockback: 9\n") ..core.colorize("#FFFFFF", "Critical chance: 29%\n") ..core.colorize("#FFFFFF", "Critical damage: 25-44\n") ..core.colorize("#FFFFFF", "Ammunition: .357 Magnum rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.75\n") ..core.colorize("#FFFFFF", "Gun type: Magnum\n") ..core.colorize("#FFFFFF", "Bullet velocity: 45"),
wield_scale = {x=1.25,y=1.25,z=1.5},
range = 0,
inventory_image = "rangedweapons_deagle.png",
on_use = function(itemstack, user, pointed_thing)
timer = 0
local inv = user:get_inventory()
if not inv:contains_item("main", "rangedweapons:357 1") then
minetest.sound_play("rangedweapons_empty", {object=user})
return itemstack
end
if not minetest.setting_getbool("creative_mode") then
inv:remove_item("main", "rangedweapons:357")
end
local pos = user:getpos()
local dir = user:get_look_dir()
local yaw = user:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:deagleshot")
if obj then
minetest.sound_play("rangedweapons_deagle", {object=obj})
obj:setvelocity({x=dir.x * 45, y=dir.y * 45, z=dir.z * 45})
obj:setacceleration({x=dir.x * math.random(-1.5,1.5), y=math.random(-1.5,1.5), z=dir.z * math.random(-1.5,1.5)})
obj:setyaw(yaw + math.pi)
pos.y = pos.y + 0
local obj = minetest.add_entity(pos, "rangedweapons:empty_shell")
minetest.sound_play("", {object=obj})
obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10})
obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5})
obj:setyaw(yaw + math.pi)
minetest.add_particle({
pos = pos,
velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} ,
acceleration = {x=dir.x * -4, y=2, z=dir.z * -4},
expirationtime = 1.0,
size = 8,
collisiondetection = false,
vertical = false,
texture = "tnt_smoke.png",
glow = 5,
})
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or user
itemstack = "rangedweapons:deagle_rld"
end
end
end
return itemstack
end,
})
minetest.register_craft({
output = 'rangedweapons:deagle',
recipe = {
{'rangedweapons:gunsteel_ingot', 'rangedweapons:gunsteel_ingot', 'rangedweapons:gunsteel_ingot'},
{'rangedweapons:gunsteel_ingot', 'default:diamond', 'rangedweapons:plastic_sheet'},
{'', '', 'rangedweapons:plastic_sheet'},
}
})
minetest.register_craft({
output = 'rangedweapons:deagle',
recipe = {
{'moreores:silver_ingot', 'moreores:silver_ingot', 'moreores:silver_ingot'},
{'moreores:silver_ingot', 'default:diamond', 'rangedweapons:plastic_sheet'},
{'', '', 'rangedweapons:plastic_sheet'},
}
})
local rangedweapons_deagleshot = {
physical = false,
timer = 0,
visual = "sprite",
visual_size = {x=0.3, y=0.3},
textures = {"rangedweapons_invisible.png"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_deagleshot.on_step = function(self, dtime, node, pos)
self.timer = self.timer + dtime
local tiem = 0.002
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.065 then
local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1.25)
for k, obj in pairs(objs) do
if obj:get_luaentity() ~= nil then
if obj:get_luaentity().name ~= "rangedweapons:deagleshot" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 29 then
local damage = math.random(25,44)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=18},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(11,18)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=9},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 29 then
local damage = math.random(25,44)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(11,18)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
if timer >= 0.002 + tiem then
minetest.add_particle({
pos = pos,
velocity = 0,
acceleration = {x=0, y=0, z=0},
expirationtime = 0.06,
size = 3,
collisiondetection = false,
vertical = false,
texture = "rangedweapons_bullet_fly.png",
glow = 15,
})
tiem = tiem + 0.002
end
if self.timer >= 4.0 then
self.object:remove()
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") then
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
if node.name == "rangedweapons:barrel" or
node.name == "doors:door_glass_a" or
node.name == "doors:door_glass_b" or
node.name == "xpanes:pane" or
node.name == "xpanes:pane_flat" or
node.name == "vessels:drinking_glass" or
node.name == "vessels:glass_bottle" or
node.name == "default:glass" then
minetest.get_node_timer(pos):start(0)
end
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
end
end
minetest.register_entity("rangedweapons:deagleshot", rangedweapons_deagleshot )

View File

@ -1,2 +1,6 @@
default
moreores
tnt
doors?
xpanes?
vessels?
moreores?

21
door_breaking.lua Normal file
View File

@ -0,0 +1,21 @@
if minetest.get_modpath("doors") then
minetest.override_item("doors:door_wood_a", {
on_timer = function(pos)
minetest.swap_node(pos, {name = "air"})
minetest.add_item(pos, "default:wood 5")
minetest.sound_play("rangedweapons_woodbreak",{pos})
end,
})
minetest.override_item("doors:door_wood_b", {
on_timer = function(pos)
minetest.swap_node(pos, {name = "air"})
minetest.add_item(pos, "default:wood 5")
minetest.sound_play("rangedweapons_woodbreak",{pos})
end,
})
end

214
explosives.lua Normal file
View File

@ -0,0 +1,214 @@
local he_boom = {
name = "rangedweapons:he_explosion",
--description = "DuN mInD mEh...",
radius = 2,
tiles = {
side = "rangedweapons_invisible.png",
top = "rangedweapons_invisible.png",
bottom = "rangedweapons_invisible.png",
burning = "rangedweapons_invisible.png"
},
}
tnt.register_tnt(he_boom)
local rocket_boom = {
name = "rangedweapons:rocket_explosion",
--description = "DuN mInD mEh...",
radius = 3,
tiles = {
side = "rangedweapons_invisible.png",
top = "rangedweapons_invisible.png",
bottom = "rangedweapons_invisible.png",
burning = "rangedweapons_invisible.png"
},
}
tnt.register_tnt(rocket_boom)
local rangedweapons_rocket = {
physical = false,
timer = 0,
visual = "sprite",
visual_size = {x=0.0, y=0.0},
textures = {"rangedweapons_invisible.png"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_rocket.on_step = function(self, dtime, pos)
self.timer = self.timer + dtime
local tiem = 0.002
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer >= 0.002 then
minetest.add_particle({
pos = pos,
velocity = 0,
acceleration = {x=0, y=0, z=0},
expirationtime = 0.04,
size = 7,
collisiondetection = false,
vertical = false,
texture = "rangedweapons_rocket_fly.png",
glow = 15,
})
minetest.add_particle({
pos = pos,
velocity = 0,
acceleration = {x=0, y=6, z=0},
expirationtime = 0.4,
size = 4,
collisiondetection = false,
vertical = false,
texture = "tnt_smoke.png",
glow = 5,
})
tiem = tiem + 0.002
end
if self.timer >= 0.375 then
local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1.5)
for k, obj in pairs(objs) do
if obj:get_luaentity() ~= nil then
if obj:get_luaentity().name ~= "rangedweapons:rocket" and obj:get_luaentity().name ~= "__builtin:item" then
tnt.boom(pos, rocket_boom)
self.object:remove()
end
end
end
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
tnt.boom(pos, rocket_boom)
self.object:remove()
end
if self.timer >= 7.5 then
tnt.boom(pos, rocket_boom)
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
minetest.register_entity("rangedweapons:rocket", rangedweapons_rocket)
local rangedweapons_he_grenade = {
physical = false,
timer = 0,
visual = "sprite",
visual_size = {x=0.0, y=0.0},
textures = {"rangedweapons_invisible.png"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_he_grenade.on_step = function(self, dtime, pos)
self.timer = self.timer + dtime
local tiem = 0.002
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer >= 0.002 then
minetest.add_particle({
pos = pos,
velocity = 0,
acceleration = {x=0, y=0, z=0},
expirationtime = 0.04,
size = 7,
collisiondetection = false,
vertical = false,
texture = "rangedweapons_rocket_fly.png",
glow = 15,
})
minetest.add_particle({
pos = pos,
velocity = 0,
acceleration = {x=0, y=16, z=0},
expirationtime = 0.4,
size = 4,
collisiondetection = false,
vertical = false,
texture = "tnt_smoke.png",
glow = 5,
})
tiem = tiem + 0.002
end
if self.timer >= 0.4 then
local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1.5)
for k, obj in pairs(objs) do
if obj:get_luaentity() ~= nil then
if obj:get_luaentity().name ~= "rangedweapons:he_grenade" and obj:get_luaentity().name ~= "__builtin:item" then
tnt.boom(pos, rocket_boom)
self.object:remove()
end
end
end
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
tnt.boom(pos, he_boom)
self.object:remove()
end
if self.timer >= 7.5 then
tnt.boom(pos, he_boom)
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
minetest.register_entity("rangedweapons:he_grenade", rangedweapons_he_grenade)
local barrel_boom = {
name = "rangedweapons:explosion",
--description = "DuN mInD mEh...",
radius = 3,
tiles = {
side = "rangedweapons_invisible.png",
top = "rangedweapons_invisible.png",
bottom = "rangedweapons_invisible.png",
burning = "rangedweapons_invisible.png"
},
}
tnt.register_tnt(barrel_boom)
minetest.register_craft({
output = "rangedweapons:barrel",
recipe = {
{"default:wood", "tnt:gunpowder", "default:wood"},
{"default:wood", "tnt:tnt", "default:wood"},
}
})
minetest.register_node("rangedweapons:barrel", {
description = "" ..core.colorize("#35cdff","Explosive barrel\n")..core.colorize("#FFFFFF", "It will explode if shot by gun"),
tiles = {
"rangedweapons_barrel_top.png",
"rangedweapons_barrel_top.png",
"rangedweapons_barrel_side.png",
"rangedweapons_barrel_side.png",
"rangedweapons_barrel_side.png",
"rangedweapons_barrel_side.png"
},
drawtype = "nodebox",
paramtype = "light",
groups = {choppy = 3, oddly_breakable_by_hand = 3},
on_timer = function(pos)
tnt.boom(pos, barrel_boom)
end,
on_blast = function(pos)
tnt.boom(pos, barrel_boom)
end,
sounds = default.node_sound_wood_defaults(),
node_box = {
type = "fixed",
fixed = {
{-0.1875, -0.5, -0.5, 0.1875, 0.5, 0.5}, -- NodeBox1
{-0.5, -0.5, -0.1875, 0.5, 0.5, 0.1875}, -- NodeBox2
{-0.4375, -0.5, -0.3125, 0.4375, 0.5, 0.3125}, -- NodeBox3
{-0.3125, -0.5, -0.4375, 0.3125, 0.5, 0.4375}, -- NodeBox4
{-0.375, -0.5, -0.375, 0.375, 0.5, 0.375}, -- NodeBox5
}
}
})

177
g36.lua Normal file
View File

@ -0,0 +1,177 @@
minetest.register_craft({
output = 'rangedweapons:g36',
recipe = {
{'default:diamond', 'default:mese', 'default:diamond'},
{'default:steel_ingot', 'default:diamond', 'default:steel_ingot'},
{'default:steel_ingot', '', 'default:steel_ingot'},
}
})
minetest.register_craftitem("rangedweapons:g36", {
stack_max= 1,
wield_scale = {x=1.75,y=1.75,z=1.3},
description = "" ..core.colorize("#35cdff","G36\n") ..core.colorize("#FFFFFF", "Ranged damage: 6-13\n") ..core.colorize("#FFFFFF", "Accuracy: 84%\n") ..core.colorize("#FFFFFF", "Mob knockback: 3\n")..core.colorize("#FFFFFF", "Critical chance: 10%\n") ..core.colorize("#FFFFFF", "Critical damage: 12-25\n") ..core.colorize("#FFFFFF", "Ammunition: 5.56mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.14\n") ..core.colorize("#FFFFFF", "Gun type: Assault rifle\n") ..core.colorize("#FFFFFF", "Bullet velocity: 35"),
range = 0,
inventory_image = "rangedweapons_g36.png",
})
local timer = 0
minetest.register_globalstep(function(dtime, player)
timer = timer + dtime;
if timer >= 0.14 then
for _, player in pairs(minetest.get_connected_players()) do
local inv = player:get_inventory()
local controls = player:get_player_control()
if controls.LMB then
timer = 0
local wielded_item = player:get_wielded_item():get_name()
if wielded_item == "rangedweapons:g36" then
if not inv:contains_item("main", "rangedweapons:556mm") then
minetest.sound_play("rangedweapons_empty", {object=player})
else
if wielded_item == "rangedweapons:g36" then
inv:remove_item("main", "rangedweapons:556mm")
local pos = player:getpos()
local dir = player:get_look_dir()
local yaw = player:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:g36shot")
if obj then
minetest.sound_play("rangedweapons_smg", {object=obj})
obj:setvelocity({x=dir.x * 35, y=dir.y * 35, z=dir.z * 35})
obj:setacceleration({x=dir.x * math.random(-1.6,1.6), y=math.random(-1.6,1.6), z=dir.z * math.random(-1.6,1.6)})
obj:setyaw(yaw + math.pi)
pos.y = pos.y + 0
local obj = minetest.add_entity(pos, "rangedweapons:empty_shell")
minetest.sound_play("", {object=obj})
obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10})
obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5})
obj:setyaw(yaw + math.pi)
minetest.add_particle({
pos = pos,
velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} ,
acceleration = {x=dir.x * -4, y=2, z=dir.z * -4},
expirationtime = 0.5,
size = 4,
collisiondetection = false,
vertical = false,
texture = "tnt_smoke.png",
glow = 5,
})
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or player
end
end
end
end
end
end
end
end
end
end)
local rangedweapons_g36shot = {
physical = false,
timer = 0,
visual = "sprite",
visual_size = {x=0.3, y=0.3},
textures = {"rangedweapons_invisible.png"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_g36shot.on_step = function(self, dtime, node, pos)
self.timer = self.timer + dtime
local tiem = 0.002
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.085 then
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 ~= "rangedweapons:g36shot" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 10 then
local damage = math.random(12,25)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=6},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(6,13)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 3},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 10 then
local damage = math.random(12,25)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(6,13)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
if timer >= 0.002 + tiem then
minetest.add_particle({
pos = pos,
velocity = 0,
acceleration = {x=0, y=0, z=0},
expirationtime = 0.06,
size = 3,
collisiondetection = false,
vertical = false,
texture = "rangedweapons_bullet_fly.png",
glow = 15,
})
tiem = tiem + 0.002
end
if self.timer >= 4.0 then
self.object:remove()
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") then
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
if node.name == "rangedweapons:barrel" or
node.name == "doors:door_glass_a" or
node.name == "doors:door_glass_b" or
node.name == "xpanes:pane" or
node.name == "xpanes:pane_flat" or
node.name == "vessels:drinking_glass" or
node.name == "vessels:glass_bottle" or
node.name == "default:glass" then
minetest.get_node_timer(pos):start(0)
end
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
end
end
minetest.register_entity("rangedweapons:g36shot", rangedweapons_g36shot )

35
generator.lua Normal file
View File

@ -0,0 +1,35 @@
minetest.register_craft({
output = 'rangedweapons:generator',
recipe = {
{'default:gold_ingot', 'default:gold_ingot', 'default:gold_ingot'},
{'rangedweapons:gunsteel_ingot', 'rangedweapons:gun_power_core', 'rangedweapons:gunsteel_ingot'},
{'rangedweapons:gunsteel_ingot', 'rangedweapons:gunsteel_ingot', 'rangedweapons:gunsteel_ingot'},
}
})
minetest.register_node("rangedweapons:generator", {
description = "" ..core.colorize("#35cdff","Power particle generator\n")..core.colorize("#FFFFFF", "generates 6 power particles on top of itself, every 15 seconds"),
tiles = {
"rangedweapons_generator_top.png",
"rangedweapons_generator_bottom.png",
"rangedweapons_generator_side.png",
"rangedweapons_generator_side.png",
"rangedweapons_generator_side.png",
"rangedweapons_generator_side.png"
},
paramtype = "light",
groups = {cracky = 3, oddly_breakable_by_hand = 3},
on_timer = function(pos, elapsed)
minetest.get_node_timer(pos):start(15)
pos.y = pos.y+1
minetest.add_item(pos, "rangedweapons:power_particle 6")
end,
on_construct = function(pos)
minetest.get_node_timer(pos):start(15)
end,
sounds = default.node_sound_wood_defaults(),
})

112
glass_breaking.lua Normal file
View File

@ -0,0 +1,112 @@
minetest.register_craftitem("rangedweapons:glass_shards", {
description = "" ..core.colorize("#35cdff","Glass shards\n")..core.colorize("#FFFFFF", "3 of those, can be crafted into a file of glass fragments"),
inventory_image = "rangedweapons_glass_shards.png",
})
minetest.register_craft({
output = "vessels:glass_fragments",
recipe = {
{"rangedweapons:glass_shards", "rangedweapons:glass_shards", "rangedweapons:glass_shards"},
}
})
minetest.override_item("default:glass", {
on_timer = function(pos)
minetest.swap_node(pos, {name = "rangedweapons:broken_glass"})
minetest.sound_play("glass_break",{pos})
end,
})
minetest.register_node("rangedweapons:broken_glass", {
description = "Broken glass",
drawtype = "glasslike",
tiles = {
"rangedweapons_broken_glass.png"
},
paramtype = "light",
walkable = false,
is_ground_content = false,
liquidtype = "source",
liquid_alternative_flowing = "rangedweapons:broken_glass",
liquid_alternative_source = "rangedweapons:broken_glass",
liquid_viscosity = 7,
alpha = 160,
liquid_range= 0,
liquid_renewable = false,
damage_per_second = 2,
groups = {oddly_breakable_by_hand = 3},
})
if minetest.get_modpath("doors") then
minetest.override_item("doors:door_glass_a", {
on_timer = function(pos)
minetest.swap_node(pos, {name = "air"})
minetest.add_item(pos, "vessels:glass_fragments 5")
minetest.sound_play("glass_break",{pos})
end,
})
minetest.override_item("doors:door_glass_b", {
on_timer = function(pos)
minetest.swap_node(pos, {name = "air"})
minetest.add_item(pos, "vessels:glass_fragments 5")
minetest.sound_play("glass_break",{pos})
end,
})
end
if minetest.get_modpath("xpanes") then
minetest.override_item("xpanes:pane", {
on_timer = function(pos)
minetest.swap_node(pos, {name = "air"})
minetest.add_item(pos, "rangedweapons:glass_shards")
minetest.sound_play("glass_break",{pos})
end,
})
minetest.override_item("xpanes:pane_flat", {
on_timer = function(pos)
minetest.swap_node(pos, {name = "air"})
minetest.add_item(pos, "rangedweapons:glass_shards")
minetest.sound_play("glass_break",{pos})
end,
})
end
if minetest.get_modpath("vessels") then
minetest.override_item("vessels:glass_bottle", {
on_timer = function(pos)
minetest.swap_node(pos, {name = "air"})
minetest.add_item(pos, "rangedweapons:glass_shards")
minetest.sound_play("glass_break",{pos})
end,
walkable = true,
node_box = {
type = "fixed",
fixed = {
{-0.2, -0.5, -0.2, 0.2, -0.1, 0.2},
},
},
})
minetest.override_item("vessels:drinking_glass", {
on_timer = function(pos)
minetest.swap_node(pos, {name = "air"})
minetest.add_item(pos, "rangedweapons:glass_shards")
minetest.sound_play("glass_break",{pos})
end,
walkable = true,
node_box = {
type = "fixed",
fixed = {
{-0.2, -0.5, -0.2, 0.2, -0.1, 0.2},
},
},
})
end

190
glock17.lua Normal file
View File

@ -0,0 +1,190 @@
local timer = 0
minetest.register_globalstep(function(dtime, player)
timer = timer + dtime;
if timer >= 0.35 then
for _, player in pairs(minetest.get_connected_players()) do
if player:get_wielded_item():get_name() == "rangedweapons:glock17_rld" then
player:set_wielded_item("rangedweapons:glock17")
minetest.sound_play("", {player})
end
end
end
end)
minetest.register_craftitem("rangedweapons:glock17_rld", {
stack_max= 1,
wield_scale = {x=1.1,y=1.1,z=1.05},
description = "***RELOADING GLOCK 17 ***",
range = 0,
groups = {not_in_creative_inventory = 1},
inventory_image = "rangedweapons_glock17_rld.png",
})
minetest.register_tool("rangedweapons:glock17", {
description = "" ..core.colorize("#35cdff","Glock 17\n") ..core.colorize("#FFFFFF", "Ranged damage: 7-11\n") ..core.colorize("#FFFFFF", "Accuracy: 96%\n") ..core.colorize("#FFFFFF", "Mob knockback: 4\n") ..core.colorize("#FFFFFF", "Critical chance: 19%\n") ..core.colorize("#FFFFFF", "Critical damage: 12-22\n") ..core.colorize("#FFFFFF", "Ammunition: 9mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.35\n") ..core.colorize("#FFFFFF", "Gun type: Handgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 30"),
wield_scale = {x=1.2,y=1.2,z=1.2},
range = 0,
inventory_image = "rangedweapons_glock17.png",
on_use = function(itemstack, user, pointed_thing)
timer = 0
local inv = user:get_inventory()
if not inv:contains_item("main", "rangedweapons:9mm 1") then
minetest.sound_play("rangedweapons_empty", {object=user})
return itemstack
end
if not minetest.setting_getbool("creative_mode") then
inv:remove_item("main", "rangedweapons:9mm")
end
local pos = user:getpos()
local dir = user:get_look_dir()
local yaw = user:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:glock17shot")
if obj then
minetest.sound_play("rangedweapons_glock", {object=obj})
obj:setvelocity({x=dir.x * 30, y=dir.y * 30, z=dir.z * 30})
obj:setacceleration({x=dir.x * math.random(-0.4,0.4), y=math.random(-0.4,0.4), z=dir.z * math.random(-0.4,0.4)})
obj:setyaw(yaw + math.pi)
pos.y = pos.y + 0
local obj = minetest.add_entity(pos, "rangedweapons:empty_shell")
minetest.sound_play("", {object=obj})
obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10})
obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5})
obj:setyaw(yaw + math.pi)
local obj = minetest.add_entity(pos, "rangedweapons:smoke")
minetest.add_particle({
pos = pos,
velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} ,
acceleration = {x=dir.x * -4, y=2, z=dir.z * -4},
expirationtime = 0.7,
size = 5,
collisiondetection = false,
vertical = false,
texture = "tnt_smoke.png",
glow = 5,
})
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or user
itemstack = "rangedweapons:glock17_rld"
end
end
end
return itemstack
end,
})
minetest.register_craft({
output = 'rangedweapons:glock17',
recipe = {
{'rangedweapons:plastic_sheet', 'rangedweapons:plastic_sheet', 'rangedweapons:plastic_sheet'},
{'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
{'', 'default:diamond', 'rangedweapons:plastic_sheet'},
}
})
local rangedweapons_glock17shot = {
physical = false,
timer = 0,
visual = "sprite",
visual_size = {x=0.3, y=0.3},
textures = {"rangedweapons_invisible.png"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_glock17shot.on_step = function(self, dtime, node, pos)
self.timer = self.timer + dtime
local tiem = 0.002
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.1 then
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 ~= "rangedweapons:glock17shot" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 19 then
local damage = math.random(12,22)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=8},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(7,11)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=4},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 19 then
local damage = math.random(12,22)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(7,11)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
if timer >= 0.002 + tiem then
minetest.add_particle({
pos = pos,
velocity = 0,
acceleration = {x=0, y=0, z=0},
expirationtime = 0.06,
size = 3,
collisiondetection = false,
vertical = false,
texture = "rangedweapons_bullet_fly.png",
glow = 15,
})
tiem = tiem + 0.002
end
if self.timer >= 4.0 then
self.object:remove()
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") then
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
if node.name == "rangedweapons:barrel" or
node.name == "doors:door_glass_a" or
node.name == "doors:door_glass_b" or
node.name == "xpanes:pane" or
node.name == "xpanes:pane_flat" or
node.name == "vessels:drinking_glass" or
node.name == "vessels:glass_bottle" or
node.name == "default:glass" then
minetest.get_node_timer(pos):start(0)
end
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
end
end
minetest.register_entity("rangedweapons:glock17shot", rangedweapons_glock17shot )

164
hand_grenade.lua Normal file
View File

@ -0,0 +1,164 @@
minetest.register_craft({
output = "rangedweapons:hand_grenade",
recipe = {
{"", "", "default:mese_crystal_fragment"},
{"default:steel_ingot", "tnt:gunpowder", ""},
{"tnt:gunpowder", "tnt:gunpowder", ""},
}
})
minetest.register_craftitem("rangedweapons:pin", {
wield_scale = {x=2.5,y=2.5,z=1.0},
inventory_image = "rangedweapons_pin.png",
})
local rangedweapons_grenade_pin = {
physical = false,
timer = 0,
visual = "wielditem",
visual_size = {x=0.15, y=0.15},
textures = {"rangedweapons:pin"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_grenade_pin.on_step = function(self, dtime, pos)
self.timer = self.timer + dtime
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
self.object:remove()
minetest.sound_play("rangedweapons_bulletdrop", {pos = self.lastpos, gain = 0.8})
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
minetest.register_entity("rangedweapons:grenade_pin", rangedweapons_grenade_pin)
local grenade_boom = {
name = "rangedweapons:grenade_explosion",
--description = "DuN mInD mEh...",
radius = 3,
tiles = {
side = "rangedweapons_invisible.png",
top = "rangedweapons_invisible.png",
bottom = "rangedweapons_invisible.png",
burning = "rangedweapons_invisible.png"
},
}
minetest.register_craftitem("rangedweapons:hand_grenade", {
stack_max= 1,
wield_scale = {x=1.1,y=1.1,z=1.05},
description = "" ..core.colorize("#35cdff","Hand grenade\n") ..core.colorize("#FFFFFF", "Explosion radius: 3\n")..core.colorize("#FFFFFF", "Throw force: 12\n") ..core.colorize("#FFFFFF", "Grenade gravitational pull: 6\n") ..core.colorize("#ffc000", "Right-click to unpin, Left click to throw after unpinning\n") ..core.colorize("#ffc000", "Thrown or not, it will explode after 3 secons from unpinning, be careful!"),
range = 0,
inventory_image = "rangedweapons_hand_grenade.png",
})
minetest.register_craftitem("rangedweapons:hand_grenade_nopin", {
stack_max= 1,
wield_scale = {x=1.1,y=1.1,z=1.05},
description = "***HURRY UP AND THROW IT!!!***",
range = 0,
inventory_image = "rangedweapons_hand_grenade_nopin.png",
groups = {not_in_creative_inventory = 1},
on_use = function(itemstack, user, pointed_thing)
local pos = user:getpos()
local dir = user:get_look_dir()
local yaw = user:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:grenade")
if obj then
obj:setvelocity({x=dir.x * 12, y=dir.y * 12, z=dir.z * 12})
obj:setacceleration({x=dir.x * -1, y=-6, z=dir.z * -1})
obj:setyaw(yaw + math.pi)
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or user
itemstack = ""
end
end
end
return itemstack
end,
})
tnt.register_tnt(grenade_boom)
local timer = 0
minetest.register_globalstep(function(dtime, player, pos)
timer = timer + dtime;
if timer >= 0.001 then
for _, player in pairs(minetest.get_connected_players()) do
local pos = player:getpos()
local controls = player:get_player_control()
if player:get_wielded_item():get_name() == "rangedweapons:hand_grenade" then
if controls.RMB then
player:set_wielded_item("rangedweapons:hand_grenade_nopin")
timer = 0
minetest.sound_play("rangedweapons_reload_a", {player})
local dir = player:get_look_dir()
local yaw = player:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:grenade_pin")
minetest.sound_play("", {object=obj})
obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10})
obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5})
obj:setyaw(yaw + math.pi)
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or player
end
end
end
end
if timer >= 3.0 and
player:get_wielded_item():get_name() == "rangedweapons:hand_grenade_nopin" then
player:set_wielded_item("")
timer = 0
tnt.boom(pos, grenade_boom)
end
end
end
end)
local rangedweapons_grenade = {
physical = false,
timer = 0,
visual = "sprite",
visual_size = {x=0.5, y=0.5},
textures = {"rangedweapons_hand_grenade_nopin.png"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_grenade.on_step = function(self, dtime, pos)
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
local vel = self.object:getvelocity()
local acc = self.object:getacceleration()
self.object:setvelocity({x=vel.x*-0.3, y=vel.y*-1, z=vel.z*-0.3})
self.object:setacceleration({x=acc.x, y=acc.y, z=acc.z})
end
end
self.timer = timer
if self.timer > 3.0 then
tnt.boom(pos, grenade_boom)
self.object:remove()
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
minetest.register_entity("rangedweapons:grenade", rangedweapons_grenade)

2692
init.lua

File diff suppressed because it is too large Load Diff

218
jackhammer.lua Normal file
View File

@ -0,0 +1,218 @@
minetest.register_craft({
output = 'rangedweapons:jackhammer',
recipe = {
{'', 'rangedweapons:gunsteel_ingot', 'rangedweapons:gunsteel_ingot'},
{'default:mese', 'default:steelblock', 'default:diamondblock'},
{'', 'default:mese', 'default:diamondblock'},
}
})
minetest.register_craftitem("rangedweapons:jackhammer", {
stack_max= 1,
wield_scale = {x=2.6,y=2.6,z=1.8},
description = "" ..core.colorize("#35cdff","Jackhammer\n") ..core.colorize("#FFFFFF", "Ranged damage: 5-12 X 15\n") ..core.colorize("#FFFFFF", "Accuracy: 70%\n") ..core.colorize("#FFFFFF", "Mob knockback: 3\n")..core.colorize("#FFFFFF", "Critical chance: 5%\n") ..core.colorize("#FFFFFF", "Critical damage: 13-25 X 15\n") ..core.colorize("#FFFFFF", "Ammunition: 12 gauge shells\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.35\n") ..core.colorize("#FFFFFF", "Gun type: Auto-shotgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 25"),
range = 0,
inventory_image = "rangedweapons_jackhammer.png",
})
local timer = 0
minetest.register_globalstep(function(dtime, player)
timer = timer + dtime;
if timer >= 0.35 then
for _, player in pairs(minetest.get_connected_players()) do
local inv = player:get_inventory()
local controls = player:get_player_control()
if controls.LMB then
timer = 0
local wielded_item = player:get_wielded_item():get_name()
if wielded_item == "rangedweapons:jackhammer" then
if not inv:contains_item("main", "rangedweapons:shell") then
minetest.sound_play("rangedweapons_empty", {object=player})
else
if wielded_item == "rangedweapons:jackhammer" then
inv:remove_item("main", "rangedweapons:shell")
local pos = player:getpos()
local dir = player:get_look_dir()
local yaw = player:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:jackhammershot")
if obj then
minetest.sound_play("rangedweapons_shotgun_shot", {object=obj})
obj:setvelocity({x=dir.x * math.random(23,27), y=dir.y * math.random(23,27), z=dir.z * math.random(23,27)})
obj:setacceleration({x=dir.x * math.random(-3.0,3.0), y=math.random(-3.0,3.0), z=dir.z * math.random(-3.0,3.0)})
------------------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:jackhammershot")
obj:setvelocity({x=dir.x * math.random(23,27), y=dir.y * math.random(23,27), z=dir.z * math.random(23,27)})
obj:setacceleration({x=dir.x * math.random(-3.0,3.0), y=math.random(-3.0,3.0), z=dir.z * math.random(-3.0,3.0)})
------------------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:jackhammershot")
obj:setvelocity({x=dir.x * math.random(23,27), y=dir.y * math.random(23,27), z=dir.z * math.random(23,27)})
obj:setacceleration({x=dir.x * math.random(-3.0,3.0), y=math.random(-3.0,3.0), z=dir.z * math.random(-3.0,3.0)})
------------------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:jackhammershot")
obj:setvelocity({x=dir.x * math.random(23,27), y=dir.y * math.random(23,27), z=dir.z * math.random(23,27)})
obj:setacceleration({x=dir.x * math.random(-3.0,3.0), y=math.random(-3.0,3.0), z=dir.z * math.random(-3.0,3.0)})
------------------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:jackhammershot")
obj:setvelocity({x=dir.x * math.random(23,27), y=dir.y * math.random(23,27), z=dir.z * math.random(23,27)})
obj:setacceleration({x=dir.x * math.random(-3.0,3.0), y=math.random(-3.0,3.0), z=dir.z * math.random(-3.0,3.0)})
------------------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:jackhammershot")
obj:setvelocity({x=dir.x * math.random(23,27), y=dir.y * math.random(23,27), z=dir.z * math.random(23,27)})
obj:setacceleration({x=dir.x * math.random(-3.0,3.0), y=math.random(-3.0,3.0), z=dir.z * math.random(-3.0,3.0)})
------------------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:jackhammershot")
obj:setvelocity({x=dir.x * math.random(23,27), y=dir.y * math.random(23,27), z=dir.z * math.random(23,27)})
obj:setacceleration({x=dir.x * math.random(-3.0,3.0), y=math.random(-3.0,3.0), z=dir.z * math.random(-3.0,3.0)})
------------------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:jackhammershot")
obj:setvelocity({x=dir.x * math.random(23,27), y=dir.y * math.random(23,27), z=dir.z * math.random(23,27)})
obj:setacceleration({x=dir.x * math.random(-3.0,3.0), y=math.random(-3.0,3.0), z=dir.z * math.random(-3.0,3.0)})
------------------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:jackhammershot")
obj:setvelocity({x=dir.x * math.random(23,27), y=dir.y * math.random(23,27), z=dir.z * math.random(23,27)})
obj:setacceleration({x=dir.x * math.random(-3.0,3.0), y=math.random(-3.0,3.0), z=dir.z * math.random(-3.0,3.0)})
------------------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:jackhammershot")
obj:setvelocity({x=dir.x * math.random(23,27), y=dir.y * math.random(23,27), z=dir.z * math.random(23,27)})
obj:setacceleration({x=dir.x * math.random(-3.0,3.0), y=math.random(-3.0,3.0), z=dir.z * math.random(-3.0,3.0)})
------------------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:jackhammershot")
obj:setvelocity({x=dir.x * math.random(23,27), y=dir.y * math.random(23,27), z=dir.z * math.random(23,27)})
obj:setacceleration({x=dir.x * math.random(-3.0,3.0), y=math.random(-3.0,3.0), z=dir.z * math.random(-3.0,3.0)})
------------------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:jackhammershot")
obj:setvelocity({x=dir.x * math.random(23,27), y=dir.y * math.random(23,27), z=dir.z * math.random(23,27)})
obj:setacceleration({x=dir.x * math.random(-3.0,3.0), y=math.random(-3.0,3.0), z=dir.z * math.random(-3.0,3.0)})
------------------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:jackhammershot")
obj:setvelocity({x=dir.x * math.random(23,27), y=dir.y * math.random(23,27), z=dir.z * math.random(23,27)})
obj:setacceleration({x=dir.x * math.random(-3.0,3.0), y=math.random(-3.0,3.0), z=dir.z * math.random(-3.0,3.0)})
------------------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:jackhammershot")
obj:setvelocity({x=dir.x * math.random(23,27), y=dir.y * math.random(23,27), z=dir.z * math.random(23,27)})
obj:setacceleration({x=dir.x * math.random(-3.0,3.0), y=math.random(-3.0,3.0), z=dir.z * math.random(-3.0,3.0)})
------------------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:jackhammershot")
obj:setvelocity({x=dir.x * math.random(23,27), y=dir.y * math.random(23,27), z=dir.z * math.random(23,27)})
obj:setacceleration({x=dir.x * math.random(-3.0,3.0), y=math.random(-3.0,3.0), z=dir.z * math.random(-3.0,3.0)})
pos.y = pos.y + 0
local obj = minetest.add_entity(pos, "rangedweapons:empty_shell_shotgun")
minetest.sound_play("", {object=obj})
obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10})
obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5})
obj:setyaw(yaw + math.pi)
minetest.add_particle({
pos = pos,
velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} ,
acceleration = {x=dir.x * -4, y=2, z=dir.z * -4},
expirationtime = 0.5,
size = 6,
collisiondetection = false,
vertical = false,
texture = "tnt_smoke.png",
glow = 5,
})
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or player
end
end
end
end
end
end
end
end
end
end)
local rangedweapons_jackhammershot = {
physical = false,
timer = 0,
visual = "sprite",
visual_size = {x=0.1, y=0.1},
textures = {"rangedweapons_buckball.png"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_jackhammershot.on_step = function(self, dtime, node, pos)
self.timer = self.timer + dtime
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.17 then
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 ~= "rangedweapons:jackhammershot" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 5 then
local damage = math.random(13,25)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=6},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(5,12)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 3},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 5 then
local damage = math.random(13,25)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(5,12)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
if self.timer >= 4.0 then
self.object:remove()
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") then
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
if node.name == "rangedweapons:barrel" or
node.name == "doors:door_wood_a" or
node.name == "doors:door_wood_b" or
node.name == "doors:door_glass_a" or
node.name == "doors:door_glass_b" or
node.name == "xpanes:pane" or
node.name == "xpanes:pane_flat" or
node.name == "vessels:drinking_glass" or
node.name == "vessels:glass_bottle" or
node.name == "default:glass" then
minetest.get_node_timer(pos):start(0)
end
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
end
end
minetest.register_entity("rangedweapons:jackhammershot", rangedweapons_jackhammershot )

147
javelin.lua Normal file
View File

@ -0,0 +1,147 @@
minetest.register_craftitem("rangedweapons:thrown_javelin", {
wield_scale = {x=2.0,y=2.0,z=1.0},
inventory_image = "rangedweapons_thrown_javelin.png",
})
minetest.register_craftitem("rangedweapons:javelin", {
description = "" ..core.colorize("#35cdff","Javelin\n") ..core.colorize("#FFFFFF", "Mele damage: 9\n") ..core.colorize("#FFFFFF", "Mele range: 5\n")..core.colorize("#FFFFFF", "Full punch interval: 1.25\n") ..core.colorize("#FFFFFF", "Ranged damage: 4-16\n") ..core.colorize("#FFFFFF", "Accuracy: 100%\n") ..core.colorize("#FFFFFF", "Mob knockback: 10\n") ..core.colorize("#FFFFFF", "Critical chance: 15%\n") ..core.colorize("#FFFFFF", "Critical damage: 25-45\n") ..core.colorize("#FFFFFF", "javelin survival rate: 95%\n")..core.colorize("#FFFFFF", "Projectile gravity: 4\n") ..core.colorize("#FFFFFF", "Projectile velocity: 20\n")..core.colorize("#ffc000", "Right-click to throw, Left-click to stab") ,
wield_scale = {x=2.0,y=2.0,z=1.0},
range = 5,
stack_max= 10,
inventory_image = "rangedweapons_javelin.png",
on_secondary_use = function(itemstack, user, pointed_thing)
if not minetest.setting_getbool("creative_mode") then itemstack:take_item()
end
if pointed_thing.type ~= "nothing" then
local pointed = minetest.get_pointed_thing_position(pointed_thing)
if vector.distance(user:getpos(), pointed) < 8 then
return itemstack
end
end
local pos = user:getpos()
local dir = user:get_look_dir()
local yaw = user:get_look_yaw()
if pos and dir then
pos.y = pos.y + 1.5
local obj = minetest.add_entity(pos, "rangedweapons:javelin")
if obj then
minetest.sound_play("rangedweapons_throw", {object=obj})
obj:setvelocity({x=dir.x * 20, y=dir.y * 20, z=dir.z * 20})
obj:setacceleration({x=dir.x * -1, y=-4, z=dir.z * -1})
obj:setyaw(yaw + math.pi)
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or user
end
end
end
return itemstack
end,
tool_capabilities = {
full_punch_interval = 1.25,
max_drop_level = 0,
groupcaps = {
stabby = {times={[1]=0.25, [2]=0.50, [3]=0.75}, uses=0, maxlevel=1},
},
damage_groups = {fleshy=9,knockback=10},
}
})
local rangedweapons_javelin = {
physical = false,
timer = 0,
visual = "wielditem",
visual_size = {x=0.5, y=0.5,},
textures = {"rangedweapons:thrown_javelin"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_javelin.on_step = function(self, dtime)
self.timer = self.timer + dtime
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.15 then
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 ~= "rangedweapons:javelin" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 15 then
local damage = math.random(25,45)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=20},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
if not minetest.setting_getbool("creative_mode") and math.random(1, 100) <= 95 then
minetest.add_item(self.lastpos, "rangedweapons:javelin")
end
else
local damage = math.random(4,16)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=10},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
if not minetest.setting_getbool("creative_mode") and math.random(1, 100) <= 95 then
minetest.add_item(self.lastpos, "rangedweapons:javelin")
end
end
end
else
if math.random(1, 100) <= 15 then
local damage = math.random(25,45)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
if not minetest.setting_getbool("creative_mode") and math.random(1, 100) <= 95 then
minetest.add_item(self.lastpos, "rangedweapons:javelin")
end
else
local damage = math.random(4,16)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
if not minetest.setting_getbool("creative_mode") and math.random(1, 100) <= 95 then
minetest.add_item(self.lastpos, "rangedweapons:javelin")
end
end
end
end
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") and math.random(1, 100) <= 95 then
minetest.add_item(self.lastpos, "rangedweapons:javelin")
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
minetest.register_entity("rangedweapons:javelin", rangedweapons_javelin)
minetest.register_craft({
output = 'rangedweapons:javelin 1',
recipe = {
{'default:diamond', 'default:steel_ingot', ''},
{'default:steel_ingot', '', 'group:stick'},
{'', '', 'group:stick'},
}
})

177
kriss_sv.lua Normal file
View File

@ -0,0 +1,177 @@
minetest.register_craft({
output = 'rangedweapons:kriss_sv',
recipe = {
{'rangedweapons:plastic_sheet', 'rangedweapons:plastic_sheet', 'rangedweapons:plastic_sheet'},
{'default:gold_ingot', 'default:mese_crystal', 'rangedweapons:plastic_sheet'},
{'rangedweapons:plastic_sheet', 'default:gold_ingot', ''},
}
})
minetest.register_craftitem("rangedweapons:kriss_sv", {
stack_max= 1,
wield_scale = {x=1.75,y=1.75,z=1.15},
description = "" ..core.colorize("#35cdff","Kriss Super V\n") ..core.colorize("#FFFFFF", "Ranged damage: 2-4\n") ..core.colorize("#FFFFFF", "accuracy: 60%\n") ..core.colorize("#FFFFFF", "Mob knockback: 0\n") ..core.colorize("#FFFFFF", "Critical chance: 5%\n") ..core.colorize("#FFFFFF", "Critical damage: 3-7\n") ..core.colorize("#FFFFFF", "Ammunition: 9mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.06\n") ..core.colorize("#FFFFFF", "Gun type: machine pistol\n") ..core.colorize("#FFFFFF", "Bullet velocity: 20"),
range = 0,
inventory_image = "rangedweapons_kriss_sv.png",
})
local timer = 0
minetest.register_globalstep(function(dtime, player)
timer = timer + dtime;
if timer >= 0.06 then
for _, player in pairs(minetest.get_connected_players()) do
local inv = player:get_inventory()
local controls = player:get_player_control()
if controls.LMB then
timer = 0
local wielded_item = player:get_wielded_item():get_name()
if wielded_item == "rangedweapons:kriss_sv" then
if not inv:contains_item("main", "rangedweapons:9mm") then
minetest.sound_play("rangedweapons_empty", {object=player})
else
if wielded_item == "rangedweapons:kriss_sv" then
inv:remove_item("main", "rangedweapons:9mm")
local pos = player:getpos()
local dir = player:get_look_dir()
local yaw = player:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:kriss_svshot")
if obj then
minetest.sound_play("rangedweapons_machine_pistol", {object=obj})
obj:setvelocity({x=dir.x * 20, y=dir.y * 20, z=dir.z * 20})
obj:setacceleration({x=dir.x * math.random(-4.0,4.0), y=math.random(-3.8,3.8), z=dir.z * math.random(-4.0,4.0)})
obj:setyaw(yaw + math.pi)
pos.y = pos.y + 0
local obj = minetest.add_entity(pos, "rangedweapons:empty_shell")
minetest.sound_play("", {object=obj})
obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10})
obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5})
obj:setyaw(yaw + math.pi)
minetest.add_particle({
pos = pos,
velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} ,
acceleration = {x=dir.x * -4, y=2, z=dir.z * -4},
expirationtime = 0.30,
size = 4,
collisiondetection = false,
vertical = false,
texture = "tnt_smoke.png",
glow = 5,
})
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or player
end
end
end
end
end
end
end
end
end
end)
local rangedweapons_kriss_svshot = {
physical = false,
timer = 0,
visual = "sprite",
visual_size = {x=0.3, y=0.3},
textures = {"rangedweapons_invisible.png"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_kriss_svshot.on_step = function(self, dtime, node, pos)
self.timer = self.timer + dtime
local tiem = 0.002
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.17 then
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 ~= "rangedweapons:kriss_svshot" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 5 then
local damage = math.random(3,7)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=0},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(2,4)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 0},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 5 then
local damage = math.random(3,7)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(2,4)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
if timer >= 0.002 + tiem then
minetest.add_particle({
pos = pos,
velocity = 0,
acceleration = {x=0, y=0, z=0},
expirationtime = 0.06,
size = 3,
collisiondetection = false,
vertical = false,
texture = "rangedweapons_bullet_fly.png",
glow = 15,
})
tiem = tiem + 0.002
end
if self.timer >= 4.0 then
self.object:remove()
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") then
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
if node.name == "rangedweapons:barrel" or
node.name == "doors:door_glass_a" or
node.name == "doors:door_glass_b" or
node.name == "xpanes:pane" or
node.name == "xpanes:pane_flat" or
node.name == "vessels:drinking_glass" or
node.name == "vessels:glass_bottle" or
node.name == "default:glass" then
minetest.get_node_timer(pos):start(0)
end
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
end
end
minetest.register_entity("rangedweapons:kriss_svshot", rangedweapons_kriss_svshot )

153
laser_blaster.lua Normal file
View File

@ -0,0 +1,153 @@
minetest.register_craft({
output = 'rangedweapons:laser_blaster',
recipe = {
{'default:steel_ingot', 'rangedweapons:gun_power_core', 'default:steel_ingot'},
{'rangedweapons:gunsteel_ingot', 'rangedweapons:gunsteel_ingot', 'rangedweapons:gunsteel_ingot'},
{'', 'default:mese_crystal_fragment', 'default:steel_ingot'},
}
})
minetest.register_craftitem("rangedweapons:laser_blaster", {
stack_max= 1,
wield_scale = {x=1.15,y=1.15,z=1.15},
description = "" ..core.colorize("#35cdff","Laser blaster\n") ..core.colorize("#FFFFFF", "Ranged damage: 12-18\n") ..core.colorize("#FFFFFF", "accuracy: 100%\n") ..core.colorize("#FFFFFF", "Mob knockback: 0\n") ..core.colorize("#FFFFFF", "Critical chance: 10%\n") ..core.colorize("#FFFFFF", "Critical damage: 28-40\n") ..core.colorize("#FFFFFF", "Power usage: 1\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.35\n") ..core.colorize("#FFFFFF", "Gun type: power pistol\n") ..core.colorize("#FFFFFF", "Bullet velocity: 15"),
range = 0,
inventory_image = "rangedweapons_laser_blaster.png",
})
local timer = 0
minetest.register_globalstep(function(dtime, player)
timer = timer + dtime;
if timer >= 0.35 then
for _, player in pairs(minetest.get_connected_players()) do
local inv = player:get_inventory()
local controls = player:get_player_control()
if controls.LMB then
timer = 0
local wielded_item = player:get_wielded_item():get_name()
if wielded_item == "rangedweapons:laser_blaster" then
if not inv:contains_item("main", "rangedweapons:power_particle") then
minetest.sound_play("rangedweapons_empty", {object=player})
else
if wielded_item == "rangedweapons:laser_blaster" then
inv:remove_item("main", "rangedweapons:power_particle")
local pos = player:getpos()
local dir = player:get_look_dir()
local yaw = player:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:laser_blastershot")
if obj then
minetest.sound_play("rangedweapons_laser", {object=obj})
obj:setvelocity({x=dir.x * 15, y=dir.y * 15, z=dir.z * 15})
obj:setacceleration({x=dir.x * math.random(0,0), y=math.random(0,0), z=dir.z * math.random(0,0)})
obj:setyaw(yaw + math.pi)
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or player
end
end
end
end
end
end
end
end
end
end)
local rangedweapons_laser_blastershot = {
physical = false,
timer = 0,
visual = "sprite",
visual_size = {x=0.3, y=0.3},
textures = {"rangedweapons_invisible.png"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_laser_blastershot.on_step = function(self, dtime, node, pos)
self.timer = self.timer + dtime
local tiem = 0.002
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.21 then
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 ~= "rangedweapons:laser_blastershot" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 10 then
local damage = math.random(28,40)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=0},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(12,18)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 0},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 10 then
local damage = math.random(28,40)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(12,18)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
if timer >= 0.002 + tiem then
minetest.add_particle({
pos = pos,
velocity = 0,
acceleration = {x=0, y=0, z=0},
expirationtime = 0.2,
size = 7,
collisiondetection = false,
vertical = false,
texture = "rangedweapons_ray_blue.png",
glow = 30,
})
tiem = tiem + 0.002
end
if self.timer >= 4.0 then
self.object:remove()
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") then
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
if node.name == "rangedweapons:barrel" then
minetest.get_node_timer(pos):start(0)
end
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
end
end
minetest.register_entity("rangedweapons:laser_blastershot", rangedweapons_laser_blastershot )

153
laser_rifle.lua Normal file
View File

@ -0,0 +1,153 @@
minetest.register_craft({
output = 'rangedweapons:laser_rifle',
recipe = {
{'rangedweapons:ultra_gunsteel_ingot', 'rangedweapons:gun_power_core', 'rangedweapons:ultra_gunsteel_ingot'},
{'rangedweapons:gun_power_core', 'rangedweapons:ultra_gunsteel_ingot', 'default:gold_ingot'},
{'default:gold_ingot', 'default:mese', 'rangedweapons:ultra_gunsteel_ingot'},
}
})
minetest.register_craftitem("rangedweapons:laser_rifle", {
stack_max= 1,
wield_scale = {x=1.9,y=1.9,z=2.5},
description = "" ..core.colorize("#35cdff","Laser rifle\n") ..core.colorize("#FFFFFF", "Ranged damage: 10-20\n") ..core.colorize("#FFFFFF", "accuracy: 100%\n") ..core.colorize("#FFFFFF", "Mob knockback: 0\n") ..core.colorize("#FFFFFF", "Critical chance: 8%\n") ..core.colorize("#FFFFFF", "Critical damage: 22-46\n") ..core.colorize("#FFFFFF", "Power usage: 2\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.1\n") ..core.colorize("#FFFFFF", "Gun type: power assault rifle\n") ..core.colorize("#FFFFFF", "Bullet velocity: 20"),
range = 0,
inventory_image = "rangedweapons_laser_rifle.png",
})
local timer = 0
minetest.register_globalstep(function(dtime, player)
timer = timer + dtime;
if timer >= 0.1 then
for _, player in pairs(minetest.get_connected_players()) do
local inv = player:get_inventory()
local controls = player:get_player_control()
if controls.LMB then
timer = 0
local wielded_item = player:get_wielded_item():get_name()
if wielded_item == "rangedweapons:laser_rifle" then
if not inv:contains_item("main", "rangedweapons:power_particle 2") then
minetest.sound_play("rangedweapons_empty", {object=player})
else
if wielded_item == "rangedweapons:laser_rifle" then
inv:remove_item("main", "rangedweapons:power_particle 2")
local pos = player:getpos()
local dir = player:get_look_dir()
local yaw = player:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:laser_rifleshot")
if obj then
minetest.sound_play("rangedweapons_laser", {object=obj})
obj:setvelocity({x=dir.x * 20, y=dir.y * 20, z=dir.z * 20})
obj:setacceleration({x=dir.x * math.random(0,0), y=math.random(0,0), z=dir.z * math.random(0,0)})
obj:setyaw(yaw + math.pi)
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or player
end
end
end
end
end
end
end
end
end
end)
local rangedweapons_laser_rifleshot = {
physical = false,
timer = 0,
visual = "sprite",
visual_size = {x=0.3, y=0.3},
textures = {"rangedweapons_invisible.png"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_laser_rifleshot.on_step = function(self, dtime, node, pos)
self.timer = self.timer + dtime
local tiem = 0.002
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.175 then
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 ~= "rangedweapons:laser_rifleshot" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 8 then
local damage = math.random(22,46)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=0},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(10,20)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 0},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 8 then
local damage = math.random(22,46)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(12,18)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
if timer >= 0.002 + tiem then
minetest.add_particle({
pos = pos,
velocity = 0,
acceleration = {x=0, y=0, z=0},
expirationtime = 0.2,
size = 7,
collisiondetection = false,
vertical = false,
texture = "rangedweapons_ray_red.png",
glow = 30,
})
tiem = tiem + 0.002
end
if self.timer >= 4.0 then
self.object:remove()
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") then
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
if node.name == "rangedweapons:barrel" then
minetest.get_node_timer(pos):start(0)
end
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
end
end
minetest.register_entity("rangedweapons:laser_rifleshot", rangedweapons_laser_rifleshot )

178
laser_shotgun.lua Normal file
View File

@ -0,0 +1,178 @@
minetest.register_craft({
output = 'rangedweapons:laser_shotgun',
recipe = {
{'rangedweapons:ultra_gunsteel_ingot', 'rangedweapons:gun_power_core', 'rangedweapons:ultra_gunsteel_ingot'},
{'rangedweapons:gun_power_core', 'rangedweapons:gun_power_core', 'rangedweapons:ultra_gunsteel_ingot'},
{'', 'rangedweapons:ultra_gunsteel_ingot', 'rangedweapons:ultra_gunsteel_ingot'},
}
})
minetest.register_craftitem("rangedweapons:laser_shotgun", {
stack_max= 1,
wield_scale = {x=2.0,y=2.0,z=1.75},
description = "" ..core.colorize("#35cdff","Laser shotgun\n") ..core.colorize("#FFFFFF", "Ranged damage: 15-26 X 5\n") ..core.colorize("#FFFFFF", "accuracy: 100%\n") ..core.colorize("#FFFFFF", "Mob knockback: 0\n") ..core.colorize("#FFFFFF", "Critical chance: 12%\n") ..core.colorize("#FFFFFF", "Critical damage: 31-59 X 5\n") ..core.colorize("#FFFFFF", "Power usage: 7\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.75\n") ..core.colorize("#FFFFFF", "Gun type: power shotgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 15"),
range = 0,
inventory_image = "rangedweapons_laser_shotgun.png",
})
local timer = 0
minetest.register_globalstep(function(dtime, player)
timer = timer + dtime;
if timer >= 0.75 then
for _, player in pairs(minetest.get_connected_players()) do
local inv = player:get_inventory()
local controls = player:get_player_control()
if controls.LMB then
timer = 0
local wielded_item = player:get_wielded_item():get_name()
if wielded_item == "rangedweapons:laser_shotgun" then
if not inv:contains_item("main", "rangedweapons:power_particle 7") then
minetest.sound_play("rangedweapons_empty", {object=player})
else
if wielded_item == "rangedweapons:laser_shotgun" then
inv:remove_item("main", "rangedweapons:power_particle 7")
local pos = player:getpos()
local dir = player:get_look_dir()
local yaw = player:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:laser_shotgunshot")
if obj then
minetest.sound_play("rangedweapons_laser", {object=obj})
obj:setvelocity({x=dir.x * 15, y=dir.y * 15, z=dir.z * 15})
obj:setacceleration({x=dir.x * math.random(0,0), y=math.random(0,0), z=dir.z * math.random(0,0)})
obj:setyaw(yaw + math.pi)
------------------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:laser_shotgunshot")
minetest.sound_play("rangedweapons_laser", {object=obj})
obj:setvelocity({x=dir.x * 15, y=dir.y * 15, z=dir.z * 18})
obj:setacceleration({x=dir.x * math.random(0,0), y=math.random(0,0), z=dir.z * math.random(0,0)})
obj:setyaw(yaw + math.pi)
------------------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:laser_shotgunshot")
minetest.sound_play("rangedweapons_laser", {object=obj})
obj:setvelocity({x=dir.x * 15, y=dir.y * 15, z=dir.z * 21})
obj:setacceleration({x=dir.x * math.random(0,0), y=math.random(0,0), z=dir.z * math.random(0,0)})
obj:setyaw(yaw + math.pi)
------------------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:laser_shotgunshot")
minetest.sound_play("rangedweapons_laser", {object=obj})
obj:setvelocity({x=dir.x * 18, y=dir.y * 15, z=dir.z * 15})
obj:setacceleration({x=dir.x * math.random(0,0), y=math.random(0,0), z=dir.z * math.random(0,0)})
obj:setyaw(yaw + math.pi)
------------------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:laser_shotgunshot")
minetest.sound_play("rangedweapons_laser", {object=obj})
obj:setvelocity({x=dir.x * 21, y=dir.y * 15, z=dir.z * 15})
obj:setacceleration({x=dir.x * math.random(0,0), y=math.random(0,0), z=dir.z * math.random(0,0)})
obj:setyaw(yaw + math.pi)
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or player
end
end
end
end
end
end
end
end
end
end)
local rangedweapons_laser_shotgunshot = {
physical = false,
timer = 0,
visual = "sprite",
visual_size = {x=0.3, y=0.3},
textures = {"rangedweapons_invisible.png"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_laser_shotgunshot.on_step = function(self, dtime, node, pos)
self.timer = self.timer + dtime
local tiem = 0.002
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.22 then
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 ~= "rangedweapons:laser_shotgunshot" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 12 then
local damage = math.random(31,59)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=0},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(15,26)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 0},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 12 then
local damage = math.random(31,59)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(15,26)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
if timer >= 0.002 + tiem then
minetest.add_particle({
pos = pos,
velocity = 0,
acceleration = {x=0, y=0, z=0},
expirationtime = 0.2,
size = 7,
collisiondetection = false,
vertical = false,
texture = "rangedweapons_ray_green.png",
glow = 30,
})
tiem = tiem + 0.002
end
if self.timer >= 4.0 then
self.object:remove()
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") then
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
if node.name == "rangedweapons:barrel" then
minetest.get_node_timer(pos):start(0)
end
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
end
end
minetest.register_entity("rangedweapons:laser_shotgunshot", rangedweapons_laser_shotgunshot )

1
license.txt Normal file
View File

@ -0,0 +1 @@
cc-by-sa 3.0

192
luger.lua Normal file
View File

@ -0,0 +1,192 @@
local timer = 0
minetest.register_globalstep(function(dtime, player)
timer = timer + dtime;
if timer >= 0.75 then
for _, player in pairs(minetest.get_connected_players()) do
if player:get_wielded_item():get_name() == "rangedweapons:luger_rld" then
player:set_wielded_item("rangedweapons:luger")
minetest.sound_play("", {player})
end
end
end
end)
minetest.register_craftitem("rangedweapons:luger_rld", {
stack_max= 1,
wield_scale = {x=0.9,y=0.9,z=1.0},
description = "***RELOADING LUGER P08***",
range = 0,
groups = {not_in_creative_inventory = 1},
inventory_image = "rangedweapons_luger_rld.png",
})
minetest.register_tool("rangedweapons:luger", {
description = "" ..core.colorize("#35cdff","Luger P08\n") ..core.colorize("#FFFFFF", "Ranged damage: 3-6\n")..core.colorize("#FFFFFF", "Accuracy: 85%\n") ..core.colorize("#FFFFFF", "Mob knockback: 3\n") ..core.colorize("#FFFFFF", "Critical chance: 10%\n") ..core.colorize("#FFFFFF", "Critical damage: 7-11\n") ..core.colorize("#FFFFFF", "Ammunition: 9mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.75\n") ..core.colorize("#FFFFFF", "Gun type: Handgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 20"),
range = 0,
wield_scale = {x=0.9,y=0.9,z=1.0},
inventory_image = "rangedweapons_luger.png",
on_use = function(itemstack, user, pointed_thing)
timer = 0
local inv = user:get_inventory()
if not inv:contains_item("main", "rangedweapons:9mm 1") then
minetest.sound_play("rangedweapons_empty", {object=user})
return itemstack
end
if not minetest.setting_getbool("creative_mode") then
inv:remove_item("main", "rangedweapons:9mm")
end
local pos = user:getpos()
local dir = user:get_look_dir()
local yaw = user:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:lugershot")
if obj then
minetest.sound_play("rangedweapons_makarov", {object=obj})
obj:setvelocity({x=dir.x * 20, y=dir.y * 20, z=dir.z * 20})
obj:setacceleration({x=dir.x * math.random(-1.5,1.5), y=math.random(-1.5,1.5), z=dir.z * math.random(-1.5,1.5)})
obj:setyaw(yaw + math.pi)
pos.y = pos.y + 0
local obj = minetest.add_entity(pos, "rangedweapons:empty_shell")
minetest.sound_play("", {object=obj})
obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10})
obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5})
obj:setyaw(yaw + math.pi)
minetest.add_particle({
pos = pos,
velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} ,
acceleration = {x=dir.x * -4, y=2, z=dir.z * -4},
expirationtime = 0.75,
size = 5,
collisiondetection = false,
vertical = false,
texture = "tnt_smoke.png",
glow = 5,
})
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or user
itemstack = "rangedweapons:luger_rld"
end
end
end
return itemstack
end,
})
minetest.register_craft({
output = 'rangedweapons:luger',
recipe = {
{'', 'default:steel_ingot', 'default:steel_ingot'},
{'', '', 'default:tree'},
{'', '', ''},
}
})
local rangedweapons_lugershot = {
physical = false,
timer = 0,
visual = "sprite",
visual_size = {x=0.3, y=0.3},
textures = {"rangedweapons_invisible.png"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_lugershot.on_step = function(self, dtime, node, pos)
self.timer = self.timer + dtime
local tiem = 0.002
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.165 then
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 ~= "rangedweapons:lugershot" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 10 then
local damage = math.random(7,11)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 6},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(3,6)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 3},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 10 then
local damage = math.random(7,11)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(3,6)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
if timer >= 0.002 + tiem then
minetest.add_particle({
pos = pos,
velocity = 0,
acceleration = {x=0, y=0, z=0},
expirationtime = 0.06,
size = 3,
collisiondetection = false,
vertical = false,
texture = "rangedweapons_bullet_fly.png",
glow = 15,
})
tiem = tiem + 0.002
end
if self.timer >= 4.0 then
self.object:remove()
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") then
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
if node.name == "rangedweapons:barrel" or
node.name == "doors:door_glass_a" or
node.name == "doors:door_glass_b" or
node.name == "xpanes:pane" or
node.name == "xpanes:pane_flat" or
node.name == "vessels:drinking_glass" or
node.name == "vessels:glass_bottle" or
node.name == "default:glass" then
minetest.get_node_timer(pos):start(0)
end
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
end
end
minetest.register_entity("rangedweapons:lugershot", rangedweapons_lugershot )

177
m16.lua Normal file
View File

@ -0,0 +1,177 @@
minetest.register_craft({
output = 'rangedweapons:m16',
recipe = {
{'default:diamond', 'default:steelblock', 'default:steel_ingot'},
{'default:steel_ingot', 'default:diamond', 'default:steel_ingot'},
{'default:steel_ingot', '', 'default:steel_ingot'},
}
})
minetest.register_craftitem("rangedweapons:m16", {
stack_max= 1,
wield_scale = {x=1.75,y=1.75,z=1.3},
description = "" ..core.colorize("#35cdff","Colt M16\n") ..core.colorize("#FFFFFF", "Ranged damage: 4-10\n") ..core.colorize("#FFFFFF", "Accuracy: 80%\n") ..core.colorize("#FFFFFF", "Mob knockback: 3\n")..core.colorize("#FFFFFF", "Critical chance: 9%\n") ..core.colorize("#FFFFFF", "Critical damage: 9-19\n") ..core.colorize("#FFFFFF", "Ammunition: 5.56mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.125\n") ..core.colorize("#FFFFFF", "Gun type: Assault rifle\n") ..core.colorize("#FFFFFF", "Bullet velocity: 35"),
range = 0,
inventory_image = "rangedweapons_m16.png",
})
local timer = 0
minetest.register_globalstep(function(dtime, player)
timer = timer + dtime;
if timer >= 0.125 then
for _, player in pairs(minetest.get_connected_players()) do
local inv = player:get_inventory()
local controls = player:get_player_control()
if controls.LMB then
timer = 0
local wielded_item = player:get_wielded_item():get_name()
if wielded_item == "rangedweapons:m16" then
if not inv:contains_item("main", "rangedweapons:556mm") then
minetest.sound_play("rangedweapons_empty", {object=player})
else
if wielded_item == "rangedweapons:m16" then
inv:remove_item("main", "rangedweapons:556mm")
local pos = player:getpos()
local dir = player:get_look_dir()
local yaw = player:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:m16shot")
if obj then
minetest.sound_play("rangedweapons_smg", {object=obj})
obj:setvelocity({x=dir.x * 35, y=dir.y * 35, z=dir.z * 35})
obj:setacceleration({x=dir.x * math.random(-2.0,2.0), y=math.random(-2.0,2.0), z=dir.z * math.random(-2.0,2.0)})
obj:setyaw(yaw + math.pi)
pos.y = pos.y + 0
local obj = minetest.add_entity(pos, "rangedweapons:empty_shell")
minetest.sound_play("", {object=obj})
obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10})
obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5})
obj:setyaw(yaw + math.pi)
minetest.add_particle({
pos = pos,
velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} ,
acceleration = {x=dir.x * -4, y=2, z=dir.z * -4},
expirationtime = 0.5,
size = 4,
collisiondetection = false,
vertical = false,
texture = "tnt_smoke.png",
glow = 5,
})
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or player
end
end
end
end
end
end
end
end
end
end)
local rangedweapons_m16shot = {
physical = false,
timer = 0,
visual = "sprite",
visual_size = {x=0.3, y=0.3},
textures = {"rangedweapons_invisible.png"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_m16shot.on_step = function(self, dtime, node, pos)
self.timer = self.timer + dtime
local tiem = 0.002
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.085 then
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 ~= "rangedweapons:m16shot" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 9 then
local damage = math.random(9,19)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=6},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(4,10)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 3},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 9 then
local damage = math.random(9,19)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(4,10)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
if timer >= 0.002 + tiem then
minetest.add_particle({
pos = pos,
velocity = 0,
acceleration = {x=0, y=0, z=0},
expirationtime = 0.06,
size = 3,
collisiondetection = false,
vertical = false,
texture = "rangedweapons_bullet_fly.png",
glow = 15,
})
tiem = tiem + 0.002
end
if self.timer >= 4.0 then
self.object:remove()
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") then
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
if node.name == "rangedweapons:barrel" or
node.name == "doors:door_glass_a" or
node.name == "doors:door_glass_b" or
node.name == "xpanes:pane" or
node.name == "xpanes:pane_flat" or
node.name == "vessels:drinking_glass" or
node.name == "vessels:glass_bottle" or
node.name == "default:glass" then
minetest.get_node_timer(pos):start(0)
end
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
end
end
minetest.register_entity("rangedweapons:m16shot", rangedweapons_m16shot )

219
m200.lua Normal file
View File

@ -0,0 +1,219 @@
minetest.register_craft({
output = 'rangedweapons:m200_uld',
recipe = {
{'default:diamondblock', 'default:steel_ingot', 'default:diamondblock'},
{'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
{'default:steel_ingot', 'default:diamond', 'default:steel_ingot'},
}
})
minetest.register_craftitem("rangedweapons:m200_uld", {
stack_max= 1,
wield_scale = {x=2.1,y=2.1,z=1.4},
range = 0,
description = "" ..core.colorize("#35cdff","M200 Intervention \n") ..core.colorize("#FFFFFF", "Ranged damage: 150/sec of bullet lifetime\n") ..core.colorize("#FFFFFF", "Accuracy: 100%\n") ..core.colorize("#FFFFFF", "Mob knockback: 20\n") ..core.colorize("#FFFFFF", "Critical chance: 50%\n") ..core.colorize("#FFFFFF", "Critical damage: 400/sec of bullet lifetime\n") ..core.colorize("#FFFFFF", "Ammunition: 308.Winchester rounds\n") ..core.colorize("#FFFFFF", "Reload time: 1.75\n") ..core.colorize("#be0d00", "The gun is NOT loaded! (Right-click to load)\n")..core.colorize("#FFFFFF", "Gun type: Rifle\n") ..core.colorize("#FFFFFF", "Bullet velocity: 64"),
inventory_image = "rangedweapons_m200.png",
on_use = function(user)
minetest.sound_play("rangedweapons_empty", {user})
end,
})
local timer = 0
minetest.register_globalstep(function(dtime, player)
timer = timer + dtime;
if timer >= 0.001 then
for _, player in pairs(minetest.get_connected_players()) do
local inv = player:get_inventory()
local controls = player:get_player_control()
if player:get_wielded_item():get_name() == "rangedweapons:m200_uld"
and inv:contains_item("main", "rangedweapons:308winchester")then
if controls.RMB then
inv:remove_item("main", "rangedweapons:308winchester")
player:set_wielded_item("rangedweapons:m200_rld")
local pos = player:getpos()
local dir = player:get_look_dir()
local yaw = player:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:empty_shell")
minetest.sound_play("", {object=obj})
obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10})
obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5})
obj:setyaw(yaw + math.pi)
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or player
end
end
timer = 0
minetest.sound_play("rangedweapons_reload_a", {player})
end
end
if timer >= 1.75 and
player:get_wielded_item():get_name() == "rangedweapons:m200_rld" then
player:set_wielded_item("rangedweapons:m200")
timer = 0
minetest.sound_play("rangedweapons_reload_b", {player})
end
end
end
end)
minetest.register_craftitem("rangedweapons:m200_rld", {
stack_max= 1,
range = 0,
wield_scale = {x=2.1,y=2.1,z=1.4},
description = "**RELOADING M200 INTERVENTION**",
groups = {not_in_creative_inventory = 1},
inventory_image = "rangedweapons_m200_rld.png",
})
minetest.register_tool("rangedweapons:m200", {
description = "" ..core.colorize("#35cdff","M200 Intervention \n") ..core.colorize("#FFFFFF", "Ranged damage: 150/sec of bullet lifetime\n")..core.colorize("#FFFFFF", "Accuracy: 100%\n") ..core.colorize("#FFFFFF", "Mob knockback: 20\n") ..core.colorize("#FFFFFF", "Critical chance: 50%\n") ..core.colorize("#FFFFFF", "Critical damage: 400/sec of bullet lifetime\n") ..core.colorize("#FFFFFF", "Ammunition: 308.Winchester rounds\n") ..core.colorize("#FFFFFF", "Reload time: 1.75\n") ..core.colorize("#27a600", "The gun is loaded!\n")..core.colorize("#FFFFFF", "Gun type: Rifle\n") ..core.colorize("#FFFFFF", "Bullet velocity: 64"),
range = 0,
groups = {not_in_creative_inventory = 1},
wield_scale = {x=2.1,y=2.1,z=1.4},
inventory_image = "rangedweapons_m200.png",
on_use = function(itemstack, user, pointed_thing)
local pos = user:getpos()
local dir = user:get_look_dir()
local yaw = user:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:m200shot")
if obj then
minetest.sound_play("rangedweapons_rifle_a", {object=obj})
obj:setvelocity({x=dir.x * 64, y=dir.y * 64, z=dir.z * 64})
obj:setacceleration({x=dir.x * 0, y=0, z=dir.z * 0})
obj:setyaw(yaw + math.pi)
minetest.add_particle({
pos = pos,
velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} ,
acceleration = {x=dir.x * -4, y=2, z=dir.z * -4},
expirationtime = 1.5,
size = 8,
collisiondetection = false,
vertical = false,
texture = "tnt_smoke.png",
glow = 5,
})
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or user
itemstack = "rangedweapons:m200_uld"
end
end
end
return itemstack
end,
})
local rangedweapons_m200shot = {
physical = false,
timer = 0,
visual = "sprite",
visual_size = {x=0.3, y=0.3},
textures = {"rangedweapons_invisible.png"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_m200shot.on_step = function(self, dtime, node, pos)
self.timer = self.timer + dtime
local tiem = 0.002
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.05 then
local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1.6)
for k, obj in pairs(objs) do
if obj:get_luaentity() ~= nil then
if obj:get_luaentity().name ~= "rangedweapons:m200shot" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 50 then
local damage = 400 * self.timer
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 40},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = 150 * self.timer
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 20},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 50 then
local damage = 400 * self.timer
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = 150 * self.timer
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
if timer >= 0.002 + tiem then
minetest.add_particle({
pos = pos,
velocity = 0,
acceleration = {x=0, y=0, z=0},
expirationtime = 0.06,
size = 3,
collisiondetection = false,
vertical = false,
texture = "rangedweapons_bullet_fly.png",
glow = 15,
})
tiem = tiem + 0.002
end
if self.timer >= 4.0 then
self.object:remove()
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") then
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
if node.name == "rangedweapons:barrel" or
node.name == "doors:door_glass_a" or
node.name == "doors:door_glass_b" or
node.name == "xpanes:pane" or
node.name == "xpanes:pane_flat" or
node.name == "vessels:drinking_glass" or
node.name == "vessels:glass_bottle" or
node.name == "default:glass" then
minetest.get_node_timer(pos):start(0)
end
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
end
end
minetest.register_entity("rangedweapons:m200shot", rangedweapons_m200shot )

176
m60.lua Normal file
View File

@ -0,0 +1,176 @@
minetest.register_craft({
output = 'rangedweapons:m60',
recipe = {
{'default:diamond', 'default:steel_ingot', 'default:mese'},
{'default:steel_ingot', 'default:steelblock', 'default:steelblock'},
{'dye:black', 'default:diamond', 'default:steel_ingot'},
}
})
minetest.register_craftitem("rangedweapons:m60", {
stack_max= 1,
wield_scale = {x=2.5,y=2.5,z=1.5},
description = "" ..core.colorize("#35cdff","M60\n") ..core.colorize("#FFFFFF", "Ranged damage: 2-6\n") ..core.colorize("#FFFFFF", "Accuracy: 55%\n") ..core.colorize("#FFFFFF", "Mob knockback: 2\n") ..core.colorize("#FFFFFF", "Critical chance: 8%\n") ..core.colorize("#FFFFFF", "Critical damage: 5-10\n") ..core.colorize("#FFFFFF", "Ammunition: 7.26mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.04\n") ..core.colorize("#FFFFFF", "Gun type: heavy machinegun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 30"),
range = 0,
inventory_image = "rangedweapons_m60.png",
})
local timer = 0
minetest.register_globalstep(function(dtime, player)
timer = timer + dtime;
if timer >= 0.04 then
for _, player in pairs(minetest.get_connected_players()) do
local inv = player:get_inventory()
local controls = player:get_player_control()
if controls.LMB then
timer = 0
local wielded_item = player:get_wielded_item():get_name()
if wielded_item == "rangedweapons:m60" then
if not inv:contains_item("main", "rangedweapons:726mm") then
minetest.sound_play("rangedweapons_empty", {object=player})
else
if wielded_item == "rangedweapons:m60" then
inv:remove_item("main", "rangedweapons:726mm")
local pos = player:getpos()
local dir = player:get_look_dir()
local yaw = player:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:m60shot")
if obj then
minetest.sound_play("rangedweapons_machinegun", {object=obj})
obj:setvelocity({x=dir.x * 30, y=dir.y * 30, z=dir.z * 30})
obj:setacceleration({x=dir.x * math.random(-4.5,4.5), y=math.random(-4.5,4.5), z=dir.z * math.random(-4.5,4.5)})
obj:setyaw(yaw + math.pi)
pos.y = pos.y + 0
local obj = minetest.add_entity(pos, "rangedweapons:empty_shell")
minetest.sound_play("", {object=obj})
obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10})
obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5})
obj:setyaw(yaw + math.pi)
minetest.add_particle({
pos = pos,
velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} ,
acceleration = {x=dir.x * -4, y=2, z=dir.z * -4},
expirationtime = 0.25,
size = 4,
collisiondetection = false,
vertical = false,
texture = "tnt_smoke.png",
glow = 5,
})
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or player
end
end
end
end
end
end
end
end
end
end)
local rangedweapons_m60shot = {
physical = false,
timer = 0,
visual = "sprite",
visual_size = {x=0.3, y=0.3},
textures = {"rangedweapons_invisible.png"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_m60shot.on_step = function(self, dtime, node, pos)
self.timer = self.timer + dtime
local tiem = 0.002
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.11 then
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 ~= "rangedweapons:m60shot" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 8 then
local damage = math.random(5,10)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=4},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(2,6)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 2},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 8 then
local damage = math.random(5,10)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(2,6)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
if timer >= 0.002 + tiem then
minetest.add_particle({
pos = pos,
velocity = 0,
acceleration = {x=0, y=0, z=0},
expirationtime = 0.06,
size = 3,
collisiondetection = false,
vertical = false,
texture = "rangedweapons_bullet_fly.png",
glow = 15,
})
tiem = tiem + 0.002
end
if self.timer >= 4.0 then
self.object:remove()
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") then
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
if node.name == "rangedweapons:barrel" or
node.name == "doors:door_glass_a" or
node.name == "doors:door_glass_b" or
node.name == "xpanes:pane" or
node.name == "xpanes:pane_flat" or
node.name == "vessels:drinking_glass" or
node.name == "vessels:glass_bottle" or
node.name == "default:glass" then
minetest.get_node_timer(pos):start(0)
end
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
end
end
minetest.register_entity("rangedweapons:m60shot", rangedweapons_m60shot )

120
m79.lua Normal file
View File

@ -0,0 +1,120 @@
minetest.register_craft({
output = 'rangedweapons:m79_uld',
recipe = {
{'default:steel_ingot', '', 'default:mese_crystal'},
{'default:steelblock', 'default:steelblock', 'default:tree'},
{'default:tree', 'default:tree', 'default:tree'},
}
})
minetest.register_craftitem("rangedweapons:m79_uld", {
stack_max= 1,
wield_scale = {x=2.0,y=2.0,z=2.5},
range = 0,
description = "" ..core.colorize("#35cdff","M79\n") ..core.colorize("#FFFFFF", "Explosion radius: 2\n") ..core.colorize("#FFFFFF", "Bullet gravitational pull: 5\n") ..core.colorize("#FFFFFF", "Ammunition: 40mm grenades\n") ..core.colorize("#FFFFFF", "Reload time: 1.25\n") ..core.colorize("#be0d00", "The gun is NOT loaded! (Right-click to load)\n")..core.colorize("#FFFFFF", "Gun type:Grenade launcher\n") ..core.colorize("#FFFFFF", "Bullet velocity: 15"),
inventory_image = "rangedweapons_m79.png",
on_use = function(user)
minetest.sound_play("rangedweapons_empty", {user})
end,
})
local timer = 0
minetest.register_globalstep(function(dtime, player)
timer = timer + dtime;
if timer >= 0.001 then
for _, player in pairs(minetest.get_connected_players()) do
local inv = player:get_inventory()
local controls = player:get_player_control()
if player:get_wielded_item():get_name() == "rangedweapons:m79_uld"
and inv:contains_item("main", "rangedweapons:40mm")then
if controls.RMB then
inv:remove_item("main", "rangedweapons:40mm")
player:set_wielded_item("rangedweapons:m79_rld")
local pos = player:getpos()
local dir = player:get_look_dir()
local yaw = player:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:empty_shell_grenade")
minetest.sound_play("", {object=obj})
obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10})
obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5})
obj:setyaw(yaw + math.pi)
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or player
end
end
timer = 0
minetest.sound_play("rangedweapons_reload_a", {player})
end
end
if timer >= 1.25 and
player:get_wielded_item():get_name() == "rangedweapons:m79_rld" then
player:set_wielded_item("rangedweapons:m79")
timer = 0
minetest.sound_play("rangedweapons_reload_b", {player})
end
end
end
end)
minetest.register_craftitem("rangedweapons:m79_rld", {
stack_max= 1,
range = 0,
wield_scale = {x=2.0,y=2.0,z=2.5},
description = "**RELOADING M79**",
groups = {not_in_creative_inventory = 1},
inventory_image = "rangedweapons_m79_rld.png",
})
minetest.register_tool("rangedweapons:m79", {
description = "" ..core.colorize("#35cdff","M79\n") ..core.colorize("#FFFFFF", "Explosion radius: 2\n") ..core.colorize("#FFFFFF", "Bullet gravitational pull: 5\n") ..core.colorize("#FFFFFF", "Ammunition: 40mm grenades\n") ..core.colorize("#FFFFFF", "Reload time: 1.25\n") ..core.colorize("#27a600", "The gun is loaded!\n")..core.colorize("#FFFFFF", "Gun type:Grenade launcher\n") ..core.colorize("#FFFFFF", "Bullet velocity: 15"),
range = 0,
groups = {not_in_creative_inventory = 1},
wield_scale = {x=2.0,y=2.0,z=2.5},
inventory_image = "rangedweapons_m79.png",
on_use = function(itemstack, user, pointed_thing)
local pos = user:getpos()
local dir = user:get_look_dir()
local yaw = user:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:he_grenade")
if obj then
minetest.sound_play("rangedweapons_rocket", {object=obj})
obj:setvelocity({x=dir.x * 15, y=dir.y * 15, z=dir.z * 15})
obj:setacceleration({x=dir.x * -1, y=-5, z=dir.z * -1})
obj:setyaw(yaw + math.pi)
minetest.add_particle({
pos = pos,
velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} ,
acceleration = {x=dir.x * -4, y=2, z=dir.z * -4},
expirationtime = 1.5,
size = 10,
collisiondetection = false,
vertical = false,
texture = "tnt_smoke.png",
glow = 5,
})
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or user
itemstack = "rangedweapons:m79_uld"
end
end
end
return itemstack
end,
})

192
makarov.lua Normal file
View File

@ -0,0 +1,192 @@
local timer = 0
minetest.register_globalstep(function(dtime, player)
timer = timer + dtime;
if timer >= 0.5 then
for _, player in pairs(minetest.get_connected_players()) do
if player:get_wielded_item():get_name() == "rangedweapons:makarov_rld" then
player:set_wielded_item("rangedweapons:makarov")
minetest.sound_play("", {player})
end
end
end
end)
minetest.register_craftitem("rangedweapons:makarov_rld", {
stack_max= 1,
wield_scale = {x=0.9,y=0.9,z=1.0},
description = "***RELOADING MAKAROV PISTOL***",
range = 0,
groups = {not_in_creative_inventory = 1},
inventory_image = "rangedweapons_makarov_rld.png",
})
minetest.register_tool("rangedweapons:makarov", {
description = "" ..core.colorize("#35cdff","Makarov pistol\n") ..core.colorize("#FFFFFF", "Ranged damage: 4-6\n")..core.colorize("#FFFFFF", "Accuracy: 90%\n") ..core.colorize("#FFFFFF", "Mob knockback: 3\n") ..core.colorize("#FFFFFF", "Critical chance: 12%\n") ..core.colorize("#FFFFFF", "Critical damage: 8-12\n") ..core.colorize("#FFFFFF", "Ammunition: 9mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.5\n") ..core.colorize("#FFFFFF", "Gun type: Handgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 20"),
range = 0,
wield_scale = {x=0.9,y=0.9,z=1.0},
inventory_image = "rangedweapons_makarov.png",
on_use = function(itemstack, user, pointed_thing)
timer = 0
local inv = user:get_inventory()
if not inv:contains_item("main", "rangedweapons:9mm 1") then
minetest.sound_play("rangedweapons_empty", {object=user})
return itemstack
end
if not minetest.setting_getbool("creative_mode") then
inv:remove_item("main", "rangedweapons:9mm")
end
local pos = user:getpos()
local dir = user:get_look_dir()
local yaw = user:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:makarovshot")
if obj then
minetest.sound_play("rangedweapons_makarov", {object=obj})
obj:setvelocity({x=dir.x * 20, y=dir.y * 20, z=dir.z * 20})
obj:setacceleration({x=dir.x * math.random(-1.0,1.0), y=math.random(-1.0,1.0), z=dir.z * math.random(-1.0,1.0)})
obj:setyaw(yaw + math.pi)
pos.y = pos.y + 0
local obj = minetest.add_entity(pos, "rangedweapons:empty_shell")
minetest.sound_play("", {object=obj})
obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10})
obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5})
obj:setyaw(yaw + math.pi)
minetest.add_particle({
pos = pos,
velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} ,
acceleration = {x=dir.x * -4, y=2, z=dir.z * -4},
expirationtime = 0.75,
size = 5,
collisiondetection = false,
vertical = false,
texture = "tnt_smoke.png",
glow = 5,
})
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or user
itemstack = "rangedweapons:makarov_rld"
end
end
end
return itemstack
end,
})
minetest.register_craft({
output = 'rangedweapons:makarov',
recipe = {
{'', 'default:steel_ingot', 'default:steel_ingot'},
{'', 'default:mese_crystal_fragment', 'default:tree'},
{'', '', 'dye:black'},
}
})
local rangedweapons_makarovshot = {
physical = false,
timer = 0,
visual = "sprite",
visual_size = {x=0.3, y=0.3},
textures = {"rangedweapons_invisible.png"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_makarovshot.on_step = function(self, dtime, node, pos)
self.timer = self.timer + dtime
local tiem = 0.002
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.165 then
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 ~= "rangedweapons:makarovshot" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 12 then
local damage = math.random(8,12)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 6},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(4,6)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 3},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 12 then
local damage = math.random(8,12)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(4,6)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
if timer >= 0.002 + tiem then
minetest.add_particle({
pos = pos,
velocity = 0,
acceleration = {x=0, y=0, z=0},
expirationtime = 0.06,
size = 3,
collisiondetection = false,
vertical = false,
texture = "rangedweapons_bullet_fly.png",
glow = 15,
})
tiem = tiem + 0.002
end
if self.timer >= 4.0 then
self.object:remove()
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") then
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
if node.name == "rangedweapons:barrel" or
node.name == "doors:door_glass_a" or
node.name == "doors:door_glass_b" or
node.name == "xpanes:pane" or
node.name == "xpanes:pane_flat" or
node.name == "vessels:drinking_glass" or
node.name == "vessels:glass_bottle" or
node.name == "default:glass" then
minetest.get_node_timer(pos):start(0)
end
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
end
end
minetest.register_entity("rangedweapons:makarovshot", rangedweapons_makarovshot )

121
milkor.lua Normal file
View File

@ -0,0 +1,121 @@
minetest.register_craft({
output = "rangedweapons:milkor_uld",
recipe = {
{"default:diamond", "default:steel_ingot", "default:diamond"},
{"default:steel_ingot", "default:steelblock", "default:steel_ingot"},
{"default:steel_ingot", "default:steelblock", "default:steel_ingot"},
}
})
minetest.register_craftitem("rangedweapons:milkor_uld", {
stack_max= 1,
wield_scale = {x=1.75,y=1.75,z=2.0},
range = 0,
description = "" ..core.colorize("#35cdff","Milkor\n") ..core.colorize("#FFFFFF", "Explosion radius: 2\n") ..core.colorize("#FFFFFF", "Bullet gravitational pull: 5\n") ..core.colorize("#FFFFFF", "Ammunition: 40mm grenades\n") ..core.colorize("#FFFFFF", "Reload time: 0.70\n") ..core.colorize("#be0d00", "The gun is NOT loaded! (Right-click to load)\n")..core.colorize("#FFFFFF", "Gun type:Grenade launcher\n") ..core.colorize("#FFFFFF", "Bullet velocity: 15"),
inventory_image = "rangedweapons_milkor.png",
on_use = function(user)
minetest.sound_play("rangedweapons_empty", {user})
end,
})
local timer = 0
minetest.register_globalstep(function(dtime, player)
timer = timer + dtime;
if timer >= 0.001 then
for _, player in pairs(minetest.get_connected_players()) do
local inv = player:get_inventory()
local controls = player:get_player_control()
if player:get_wielded_item():get_name() == "rangedweapons:milkor_uld"
and inv:contains_item("main", "rangedweapons:40mm")then
if controls.RMB then
inv:remove_item("main", "rangedweapons:40mm")
player:set_wielded_item("rangedweapons:milkor_rld")
local pos = player:getpos()
local dir = player:get_look_dir()
local yaw = player:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:empty_shell_grenade")
minetest.sound_play("", {object=obj})
obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10})
obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5})
obj:setyaw(yaw + math.pi)
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or player
end
end
timer = 0
minetest.sound_play("rangedweapons_reload_a", {player})
end
end
if timer >= 0.70 and
player:get_wielded_item():get_name() == "rangedweapons:milkor_rld" then
player:set_wielded_item("rangedweapons:milkor")
timer = 0
minetest.sound_play("rangedweapons_reload_b", {player})
end
end
end
end)
minetest.register_craftitem("rangedweapons:milkor_rld", {
stack_max= 1,
range = 0,
wield_scale = {x=1.75,y=1.75,z=2.0},
description = "**RELOADING MILKOR MGL**",
groups = {not_in_creative_inventory = 1},
inventory_image = "rangedweapons_milkor_rld.png",
})
minetest.register_tool("rangedweapons:milkor", {
description = "" ..core.colorize("#35cdff","Milkor MGL\n") ..core.colorize("#FFFFFF", "Explosion radius: 2\n") ..core.colorize("#FFFFFF", "Bullet gravitational pull: 4\n") ..core.colorize("#FFFFFF", "Ammunition: 40mm grenades\n") ..core.colorize("#FFFFFF", "Reload time: 0.70\n") ..core.colorize("#27a600", "The gun is loaded!\n")..core.colorize("#FFFFFF", "Gun type:Grenade launcher\n") ..core.colorize("#FFFFFF", "Bullet velocity: 20"),
range = 0,
groups = {not_in_creative_inventory = 1},
wield_scale = {x=1.75,y=1.75,z=2.0},
inventory_image = "rangedweapons_milkor.png",
on_use = function(itemstack, user, pointed_thing)
local pos = user:getpos()
local dir = user:get_look_dir()
local yaw = user:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:he_grenade")
if obj then
minetest.sound_play("rangedweapons_rocket", {object=obj})
obj:setvelocity({x=dir.x * 20, y=dir.y * 20, z=dir.z * 20})
obj:setacceleration({x=dir.x * -1, y=-4, z=dir.z * -1})
obj:setyaw(yaw + math.pi)
minetest.add_particle({
pos = pos,
velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} ,
acceleration = {x=dir.x * -4, y=2, z=dir.z * -4},
expirationtime = 1.5,
size = 10,
collisiondetection = false,
vertical = false,
texture = "tnt_smoke.png",
glow = 5,
})
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or user
itemstack = "rangedweapons:milkor_uld"
end
end
end
return itemstack
end,
})

182
minigun.lua Normal file
View File

@ -0,0 +1,182 @@
if minigun_aswell == true then
minetest.register_craft({
output = 'rangedweapons:minigun',
recipe = {
{'', 'default:steelblock', 'default:mese'},
{'default:diamondblock', 'default:diamondblock', 'default:diamondblock'},
{'default:steelblock', 'default:steelblock', 'default:steelblock'},
}
})
minetest.register_craftitem("rangedweapons:minigun", {
stack_max= 1,
wield_scale = {x=4.0,y=4.0,z=4.0},
description = "" ..core.colorize("#35cdff","MINI-GUN\n") ..core.colorize("#FFFFFF", "Ranged damage: 5-13\n") ..core.colorize("#FFFFFF", "Accuracy: 50%\n") ..core.colorize("#FFFFFF", "Mob knockback: 3\n") ..core.colorize("#FFFFFF", "Critical chance: 12%\n") ..core.colorize("#FFFFFF", "Critical damage: 12-25\n") ..core.colorize("#FFFFFF", "Ammunition: 7.26mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.025\n") ..core.colorize("#FFFFFF", "Gun type: heavy machinegun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 30"),
range = 0,
inventory_image = "rangedweapons_minigun.png",
})
local timer = 0
minetest.register_globalstep(function(dtime, player)
timer = timer + dtime;
if timer >= 0.025 then
for _, player in pairs(minetest.get_connected_players()) do
local inv = player:get_inventory()
local controls = player:get_player_control()
if controls.LMB then
timer = 0
local wielded_item = player:get_wielded_item():get_name()
if wielded_item == "rangedweapons:minigun" then
if not inv:contains_item("main", "rangedweapons:726mm") then
minetest.sound_play("rangedweapons_empty", {object=player})
else
if wielded_item == "rangedweapons:minigun" then
inv:remove_item("main", "rangedweapons:726mm")
local pos = player:getpos()
local dir = player:get_look_dir()
local yaw = player:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:minigunshot")
if obj then
minetest.sound_play("rangedweapons_machinegun", {object=obj})
obj:setvelocity({x=dir.x * 30, y=dir.y * 30, z=dir.z * 30})
obj:setacceleration({x=dir.x * math.random(-5.0,5.0), y=math.random(-5.0,5.0), z=dir.z * math.random(-5.0,5.0)})
obj:setyaw(yaw + math.pi)
pos.y = pos.y + 0
local obj = minetest.add_entity(pos, "rangedweapons:empty_shell")
minetest.sound_play("", {object=obj})
obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10})
obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5})
obj:setyaw(yaw + math.pi)
minetest.add_particle({
pos = pos,
velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} ,
acceleration = {x=dir.x * -4, y=2, z=dir.z * -4},
expirationtime = 0.15,
size = 3,
collisiondetection = false,
vertical = false,
texture = "tnt_smoke.png",
glow = 5,
})
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or player
end
end
end
end
end
end
end
end
end
end)
local rangedweapons_minigunshot = {
physical = false,
timer = 0,
visual = "sprite",
visual_size = {x=0.3, y=0.3},
textures = {"rangedweapons_invisible.png"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_minigunshot.on_step = function(self, dtime, node, pos)
self.timer = self.timer + dtime
local tiem = 0.002
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.11 then
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 ~= "rangedweapons:minigunshot" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 12 then
local damage = math.random(12,25)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=6},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(5,13)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 3},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 12 then
local damage = math.random(12,25)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(5,13)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
if self.timer >= 0.002 + tiem then
minetest.add_particle({
pos = pos,
velocity = 0,
acceleration = {x=0, y=0, z=0},
expirationtime = 0.04,
size = 3,
collisiondetection = false,
vertical = false,
texture = "rangedweapons_bullet_fly.png",
glow = 15,
})
tiem = tiem + 0.002
end
if self.timer >= 4.0 then
self.object:remove()
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") then
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
if node.name == "rangedweapons:barrel" or
node.name == "doors:door_glass_a" or
node.name == "doors:door_glass_b" or
node.name == "doors:door_wood_a" or
node.name == "doors:door_wood_b" or
node.name == "xpanes:pane" or
node.name == "xpanes:pane_flat" or
node.name == "vessels:drinking_glass" or
node.name == "vessels:glass_bottle" or
node.name == "default:glass" then
minetest.get_node_timer(pos):start(0)
end
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
end
end
minetest.register_entity("rangedweapons:minigunshot", rangedweapons_minigunshot )
end

100
misc.lua Normal file
View File

@ -0,0 +1,100 @@
minetest.register_craftitem("rangedweapons:shell_shotgundrop", {
wield_scale = {x=2.5,y=1.5,z=1.0},
inventory_image = "rangedweapons_shelldrop_shotgun.png",
})
minetest.register_craftitem("rangedweapons:shell_whitedrop", {
wield_scale = {x=2.5,y=1.5,z=1.0},
inventory_image = "rangedweapons_shelldrop_white.png",
})
minetest.register_craftitem("rangedweapons:shell_grenadedrop", {
wield_scale = {x=2.5,y=1.5,z=3.0},
inventory_image = "rangedweapons_shelldrop_grenade.png",
})
minetest.register_craftitem("rangedweapons:shelldrop", {
wield_scale = {x=2.5,y=1.5,z=1.0},
inventory_image = "rangedweapons_shelldrop.png",
})
minetest.register_craftitem("rangedweapons:plastic_sheet", {
description = "" ..core.colorize("#35cdff","Black plastic sheet\n")..core.colorize("#FFFFFF", "Used in guncraft"),
inventory_image = "rangedweapons_plastic_sheet.png",
})
minetest.register_craftitem("rangedweapons:gunsteel_ingot", {
description = "" ..core.colorize("#35cdff","GunSteel ingot\n")..core.colorize("#FFFFFF", "A strong, but light alloy, used in guncraft"),
inventory_image = "rangedweapons_gunsteel_ingot.png",
})
minetest.register_craft({
output = "rangedweapons:gunsteel_ingot",
recipe = {
{"default:steel_ingot", "default:tin_ingot", "default:coal_lump"},
}
})
minetest.register_craftitem("rangedweapons:ultra_gunsteel_ingot", {
description = "" ..core.colorize("#35cdff","Ultra-GunSteel ingot\n")..core.colorize("#FFFFFF", "A even stronger alloy, for even stronger guns."),
inventory_image = "rangedweapons_ultra_gunsteel_ingot.png",
})
minetest.register_craft({
output = "rangedweapons:ultra_gunsteel_ingot",
recipe = {
{"", "default:mese_crystal", ""},
{"default:gold_ingot", "rangedweapons:gunsteel_ingot", "default:gold_ingot"},
{"", "default:diamond", ""},
}
})
minetest.register_craft({
output = "rangedweapons:plastic_sheet",
recipe = {
{"default:tree", "default:coal_lump", "default:tree"},
{"default:coal_lump", "default:tree", "default:coal_lump"},
}
})
minetest.register_craftitem("rangedweapons:gun_power_core", {
description = "" ..core.colorize("#35cdff","Gun Power Core\n")..core.colorize("#FFFFFF", "A powerful core, for making the most powerful weapons"),
inventory_image = "rangedweapons_gun_power_core.png",
})
minetest.register_craft({
output = "rangedweapons:gun_power_core",
recipe = {
{"rangedweapons:gunsteel_ingot", "default:goldblock", "rangedweapons:gunsteel_ingot"},
{"default:diamondblock", "default:mese", "default:diamondblock"},
{"rangedweapons:gunsteel_ingot", "default:goldblock", "rangedweapons:gunsteel_ingot"},
}
})
minetest.register_craftitem("rangedweapons:power_particle", {
description = "" ..core.colorize("#35cdff","Power Particle\n")..core.colorize("#FFFFFF", "A power unit, that strangelly can be carryed arround with no vessel, used by power guns"),
stack_max = 10000,
inventory_image = "rangedweapons_power_particle.png",
})
local rangedweapons_smoke = {
physical = false,
timer = 0,
visual = "sprite",
visual_size = {x=0.5, y=0.5},
textures = {"tnt_smoke.png"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_smoke.on_step = function(self, dtime, pos)
self.timer = self.timer + dtime
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.lastpos.x ~= nil then
if self.timer > 0.30 then
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
minetest.register_entity("rangedweapons:smoke", rangedweapons_smoke )

177
mp40.lua Normal file
View File

@ -0,0 +1,177 @@
minetest.register_craft({
output = 'rangedweapons:mp40',
recipe = {
{'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
{'default:steel_ingot', 'default:mese_crystal', 'default:steel_ingot'},
{'default:steel_ingot', 'default:mese_crystal_fragment', ''},
}
})
minetest.register_craftitem("rangedweapons:mp40", {
stack_max= 1,
wield_scale = {x=1.75,y=1.75,z=1.5},
description = "" ..core.colorize("#35cdff","MP-40\n") ..core.colorize("#FFFFFF", "Ranged damage: 3-6\n") ..core.colorize("#FFFFFF", "accuracy: 70%\n") ..core.colorize("#FFFFFF", "Mob knockback: 0\n") ..core.colorize("#FFFFFF", "Critical chance: 8%\n") ..core.colorize("#FFFFFF", "Critical damage: 5-11\n") ..core.colorize("#FFFFFF", "Ammunition: 9mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.14\n") ..core.colorize("#FFFFFF", "Gun type: sub-machinegun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 25"),
range = 0,
inventory_image = "rangedweapons_mp40.png",
})
local timer = 0
minetest.register_globalstep(function(dtime, player)
timer = timer + dtime;
if timer >= 0.14 then
for _, player in pairs(minetest.get_connected_players()) do
local inv = player:get_inventory()
local controls = player:get_player_control()
if controls.LMB then
timer = 0
local wielded_item = player:get_wielded_item():get_name()
if wielded_item == "rangedweapons:mp40" then
if not inv:contains_item("main", "rangedweapons:9mm") then
minetest.sound_play("rangedweapons_empty", {object=player})
else
if wielded_item == "rangedweapons:mp40" then
inv:remove_item("main", "rangedweapons:9mm")
local pos = player:getpos()
local dir = player:get_look_dir()
local yaw = player:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:mp40shot")
if obj then
minetest.sound_play("rangedweapons_beretta", {object=obj})
obj:setvelocity({x=dir.x * 25, y=dir.y * 25, z=dir.z * 25})
obj:setacceleration({x=dir.x * math.random(-3.0,3.0), y=math.random(-3.0,3.0), z=dir.z * math.random(-3.0,3.0)})
obj:setyaw(yaw + math.pi)
pos.y = pos.y + 0
local obj = minetest.add_entity(pos, "rangedweapons:empty_shell")
minetest.sound_play("", {object=obj})
obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10})
obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5})
obj:setyaw(yaw + math.pi)
minetest.add_particle({
pos = pos,
velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} ,
acceleration = {x=dir.x * -4, y=2, z=dir.z * -4},
expirationtime = 0.30,
size = 4,
collisiondetection = false,
vertical = false,
texture = "tnt_smoke.png",
glow = 5,
})
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or player
end
end
end
end
end
end
end
end
end
end)
local rangedweapons_mp40shot = {
physical = false,
timer = 0,
visual = "sprite",
visual_size = {x=0.3, y=0.3},
textures = {"rangedweapons_invisible.png"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_mp40shot.on_step = function(self, dtime, node, pos)
self.timer = self.timer + dtime
local tiem = 0.002
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.16 then
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 ~= "rangedweapons:mp40shot" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 8 then
local damage = math.random(5,11)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=0},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(3,6)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 0},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 8 then
local damage = math.random(5,11)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(3,6)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
if timer >= 0.002 + tiem then
minetest.add_particle({
pos = pos,
velocity = 0,
acceleration = {x=0, y=0, z=0},
expirationtime = 0.06,
size = 3,
collisiondetection = false,
vertical = false,
texture = "rangedweapons_bullet_fly.png",
glow = 15,
})
tiem = tiem + 0.002
end
if self.timer >= 4.0 then
self.object:remove()
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") then
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
if node.name == "rangedweapons:barrel" or
node.name == "doors:door_glass_a" or
node.name == "doors:door_glass_b" or
node.name == "xpanes:pane" or
node.name == "xpanes:pane_flat" or
node.name == "vessels:drinking_glass" or
node.name == "vessels:glass_bottle" or
node.name == "default:glass" then
minetest.get_node_timer(pos):start(0)
end
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
end
end
minetest.register_entity("rangedweapons:mp40shot", rangedweapons_mp40shot )

178
mp5.lua Normal file
View File

@ -0,0 +1,178 @@
minetest.register_craft({
output = 'rangedweapons:mp5',
recipe = {
{'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
{'default:steel_ingot', 'default:diamond', 'default:steel_ingot'},
{'default:steel_ingot', 'rangedweapons:plastic_sheet', 'dye:black'},
}
})
minetest.register_craftitem("rangedweapons:mp5", {
stack_max= 1,
wield_scale = {x=1.75,y=1.75,z=1.20},
description = "" ..core.colorize("#35cdff","MP5\n") ..core.colorize("#FFFFFF", "Ranged damage: 3-7\n") ..core.colorize("#FFFFFF", "Accuracy: 74%\n") ..core.colorize("#FFFFFF", "Mob knockback: 1\n") ..core.colorize("#FFFFFF", "Critical chance: 7%\n") ..core.colorize("#FFFFFF", "Critical damage: 7-13\n") ..core.colorize("#FFFFFF", "Ammunition: 10mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.10\n") ..core.colorize("#FFFFFF", "Gun type: Sub-machinegun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 25"),
range = 0,
inventory_image = "rangedweapons_mp5.png",
})
local timer = 0
minetest.register_globalstep(function(dtime, player)
timer = timer + dtime;
if timer >= 0.10 then
for _, player in pairs(minetest.get_connected_players()) do
local inv = player:get_inventory()
local controls = player:get_player_control()
if controls.LMB then
timer = 0
local wielded_item = player:get_wielded_item():get_name()
if wielded_item == "rangedweapons:mp5" then
if not inv:contains_item("main", "rangedweapons:10mm") then
minetest.sound_play("rangedweapons_empty", {object=player})
else
if wielded_item == "rangedweapons:mp5" then
inv:remove_item("main", "rangedweapons:10mm")
local pos = player:getpos()
local dir = player:get_look_dir()
local yaw = player:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:mp5shot")
if obj then
minetest.sound_play("rangedweapons_machine_pistol", {object=obj})
obj:setvelocity({x=dir.x * 25, y=dir.y * 25, z=dir.z * 25})
obj:setacceleration({x=dir.x * math.random(-2.6,2.6), y=math.random(-2.6,2.6), z=dir.z * math.random(-2.6,2.6)})
obj:setyaw(yaw + math.pi)
pos.y = pos.y + 0
local obj = minetest.add_entity(pos, "rangedweapons:empty_shell_white")
minetest.sound_play("", {object=obj})
obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10})
obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5})
obj:setyaw(yaw + math.pi)
minetest.add_particle({
pos = pos,
velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} ,
acceleration = {x=dir.x * -4, y=2, z=dir.z * -4},
expirationtime = 0.35,
size = 4,
collisiondetection = false,
vertical = false,
texture = "tnt_smoke.png",
glow = 5,
})
obj:setyaw(yaw + math.pi)
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or player
end
end
end
end
end
end
end
end
end
end)
local rangedweapons_mp5shot = {
physical = false,
timer = 0,
visual = "sprite",
visual_size = {x=0.3, y=0.3},
textures = {"rangedweapons_invisible.png"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_mp5shot.on_step = function(self, dtime, node, pos)
self.timer = self.timer + dtime
local tiem = 0.002
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.12 then
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 ~= "rangedweapons:mp5shot" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 7 then
local damage = math.random(7,13)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=2},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(3,7)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 1},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 7 then
local damage = math.random(7,13)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(3,7)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
if timer >= 0.002 + tiem then
minetest.add_particle({
pos = pos,
velocity = 0,
acceleration = {x=0, y=0, z=0},
expirationtime = 0.06,
size = 3,
collisiondetection = false,
vertical = false,
texture = "rangedweapons_bullet_fly.png",
glow = 15,
})
tiem = tiem + 0.002
end
if self.timer >= 4.0 then
self.object:remove()
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") then
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
if node.name == "rangedweapons:barrel" or
node.name == "doors:door_glass_a" or
node.name == "doors:door_glass_b" or
node.name == "xpanes:pane" or
node.name == "xpanes:pane_flat" or
node.name == "vessels:drinking_glass" or
node.name == "vessels:glass_bottle" or
node.name == "default:glass" then
minetest.get_node_timer(pos):start(0)
end
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
end
end
minetest.register_entity("rangedweapons:mp5shot", rangedweapons_mp5shot )

228
python.lua Normal file
View File

@ -0,0 +1,228 @@
minetest.register_craft({
output = 'rangedweapons:python_uld',
recipe = {
{'rangedweapons:gunsteel_ingot', 'default:diamond', 'default:mese_crystal_fragment'},
{'rangedweapons:gunsteel_ingot', 'default:diamond', 'rangedweapons:gunsteel_ingot'},
{'', 'default:mese_crystal', 'default:tree'},
}
})
minetest.register_craft({
output = 'rangedweapons:python_uld',
recipe = {
{'moreores:silver_ingot', 'default:diamond', 'default:mese_crystal_fragment'},
{'moreores:silver_ingot', 'default:diamond', 'moreores:silver_ingot'},
{'', 'default:mese_crystal', 'default:tree'},
}
})
minetest.register_craftitem("rangedweapons:python_uld", {
stack_max= 1,
wield_scale = {x=1.25,y=1.25,z=1.1},
range = 0,
description = "" ..core.colorize("#35cdff","Colt Python \n") ..core.colorize("#FFFFFF", "Ranged damage: 10-15\n") ..core.colorize("#FFFFFF", "Accuracy: 95%\n") ..core.colorize("#FFFFFF", "Mob knockback: 8\n") ..core.colorize("#FFFFFF", "Critical chance: 32%\n") ..core.colorize("#FFFFFF", "Critical damage: 20-35\n") ..core.colorize("#FFFFFF", "Ammunition: .357 Magnum rounds\n") ..core.colorize("#FFFFFF", "Reload time: 0.3\n") ..core.colorize("#be0d00", "The gun is NOT loaded! (Right-click to load)\n")..core.colorize("#FFFFFF", "Gun type: Revolver\n") ..core.colorize("#FFFFFF", "Bullet velocity: 50"),
inventory_image = "rangedweapons_python.png",
on_use = function(user)
minetest.sound_play("rangedweapons_empty", {user})
end,
})
local timer = 0
minetest.register_globalstep(function(dtime, player)
timer = timer + dtime;
if timer >= 0.001 then
for _, player in pairs(minetest.get_connected_players()) do
local inv = player:get_inventory()
local controls = player:get_player_control()
if player:get_wielded_item():get_name() == "rangedweapons:python_uld"
and inv:contains_item("main", "rangedweapons:357")then
if controls.RMB then
inv:remove_item("main", "rangedweapons:357")
player:set_wielded_item("rangedweapons:python_rld")
local pos = player:getpos()
local dir = player:get_look_dir()
local yaw = player:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:empty_shell")
minetest.sound_play("", {object=obj})
obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10})
obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5})
obj:setyaw(yaw + math.pi)
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or player
end
end
timer = 0
minetest.sound_play("rangedweapons_reload_b", {player})
end
end
if timer >= 0.3 and
player:get_wielded_item():get_name() == "rangedweapons:python_rld" then
player:set_wielded_item("rangedweapons:python")
timer = 0
minetest.sound_play("rangedweapons_reload_a", {player})
end
end
end
end)
minetest.register_craftitem("rangedweapons:python_rld", {
stack_max= 1,
range = 0,
wield_scale = {x=1.25,y=1.25,z=1.1},
description = "**RELOADING COLT PYTHON**",
groups = {not_in_creative_inventory = 1},
inventory_image = "rangedweapons_python_rld.png",
})
minetest.register_tool("rangedweapons:python", {
description = "" ..core.colorize("#35cdff","Colt Python \n") ..core.colorize("#FFFFFF", "Ranged damage: 10-15\n")..core.colorize("#FFFFFF", "Accuracy: 95%\n") ..core.colorize("#FFFFFF", "Mob knockback: 8\n") ..core.colorize("#FFFFFF", "Critical chance: 32%\n") ..core.colorize("#FFFFFF", "Critical damage: 20-35\n") ..core.colorize("#FFFFFF", "Ammunition: .357 Magnum rounds\n") ..core.colorize("#FFFFFF", "Reload time: 0.3\n") ..core.colorize("#27a600", "The gun is loaded!\n")..core.colorize("#FFFFFF", "Gun type: Revolver\n") ..core.colorize("#FFFFFF", "Bullet velocity: 50"),
range = 0,
groups = {not_in_creative_inventory = 1},
wield_scale = {x=1.25,y=1.25,z=1.1},
inventory_image = "rangedweapons_python.png",
on_use = function(itemstack, user, pointed_thing)
local pos = user:getpos()
local dir = user:get_look_dir()
local yaw = user:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:pythonshot")
if obj then
minetest.sound_play("rangedweapons_revolver", {object=obj})
obj:setvelocity({x=dir.x * 50, y=dir.y * 50, z=dir.z * 50})
obj:setacceleration({x=dir.x * math.random(-0.5,0.5), y=math.random(-0.5,0.5), z=dir.z * math.random(-0.5,0.5)})
obj:setyaw(yaw + math.pi)
minetest.add_particle({
pos = pos,
velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} ,
acceleration = {x=dir.x * -4, y=2, z=dir.z * -4},
expirationtime = 1.5,
size = 8,
collisiondetection = false,
vertical = false,
texture = "tnt_smoke.png",
glow = 5,
})
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or user
itemstack = "rangedweapons:python_uld"
end
end
end
return itemstack
end,
})
local rangedweapons_pythonshot = {
physical = false,
timer = 0,
visual = "sprite",
visual_size = {x=0.3, y=0.3},
textures = {"rangedweapons_invisible.png"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_pythonshot.on_step = function(self, dtime, node, pos)
self.timer = self.timer + dtime
local tiem = 0.002
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.065 then
local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1.5)
for k, obj in pairs(objs) do
if obj:get_luaentity() ~= nil then
if obj:get_luaentity().name ~= "rangedweapons:pythonshot" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 32 then
local damage = math.random(20,35)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 16},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(10,15)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 8},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 32 then
local damage = math.random(20,35)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(10,15)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
if timer >= 0.002 + tiem then
minetest.add_particle({
pos = pos,
velocity = 0,
acceleration = {x=0, y=0, z=0},
expirationtime = 0.06,
size = 3,
collisiondetection = false,
vertical = false,
texture = "rangedweapons_bullet_fly.png",
glow = 15,
})
tiem = tiem + 0.002
end
if self.timer >= 4.0 then
self.object:remove()
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") then
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
if node.name == "rangedweapons:barrel" or
node.name == "doors:door_glass_a" or
node.name == "doors:door_glass_b" or
node.name == "xpanes:pane" or
node.name == "xpanes:pane_flat" or
node.name == "vessels:drinking_glass" or
node.name == "vessels:glass_bottle" or
node.name == "default:glass" then
minetest.get_node_timer(pos):start(0)
end
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
end
end
minetest.register_entity("rangedweapons:pythonshot", rangedweapons_pythonshot )

237
remington.lua Normal file
View File

@ -0,0 +1,237 @@
minetest.register_craft({
output = "rangedweapons:remington_uld",
recipe = {
{"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"},
{"default:tree", "default:mese_crystal", "default:tree"},
}
})
minetest.register_craftitem("rangedweapons:remington_uld", {
stack_max= 1,
wield_scale = {x=1.9,y=1.9,z=1.1},
range = 0,
description = "" ..core.colorize("#35cdff","Remington 870\n") ..core.colorize("#FFFFFF", "Ranged damage: 2-7 X 9\n") ..core.colorize("#FFFFFF", "Accuracy: 60%\n") ..core.colorize("#FFFFFF", "Mob knockback: 5\n") ..core.colorize("#FFFFFF", "Critical chance: 3%\n") ..core.colorize("#FFFFFF", "Critical damage: 6-15 X 9\n") ..core.colorize("#FFFFFF", "Ammunition: 12 gauge shells\n") ..core.colorize("#FFFFFF", "Reload time: 0.8\n") ..core.colorize("#be0d00", "The gun is NOT loaded! (Right-click to load)\n")..core.colorize("#FFFFFF", "Gun type: shotgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 15"),
inventory_image = "rangedweapons_remington.png",
on_use = function(user)
minetest.sound_play("rangedweapons_empty", {user})
end,
})
local timer = 0
minetest.register_globalstep(function(dtime, player)
timer = timer + dtime;
if timer >= 0.001 then
for _, player in pairs(minetest.get_connected_players()) do
local inv = player:get_inventory()
local controls = player:get_player_control()
if player:get_wielded_item():get_name() == "rangedweapons:remington_uld"
and inv:contains_item("main", "rangedweapons:shell")then
if controls.RMB then
inv:remove_item("main", "rangedweapons:shell")
player:set_wielded_item("rangedweapons:remington_rld")
local pos = player:getpos()
local dir = player:get_look_dir()
local yaw = player:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:empty_shell_shotgun")
minetest.sound_play("", {object=obj})
obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10})
obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5})
obj:setyaw(yaw + math.pi)
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or player
end
end
timer = 0
minetest.sound_play("rangedweapons_shotgun_reload_a", {player})
end
end
if timer >= 0.8 and
player:get_wielded_item():get_name() == "rangedweapons:remington_rld" then
player:set_wielded_item("rangedweapons:remington")
timer = 0
minetest.sound_play("rangedweapons_shotgun_reload_b", {player})
end
end
end
end)
minetest.register_craftitem("rangedweapons:remington_rld", {
stack_max= 1,
range = 0,
wield_scale = {x=1.9,y=1.9,z=1.1},
description = "**RELOADING REMINGTON870**",
groups = {not_in_creative_inventory = 1},
inventory_image = "rangedweapons_remington_rld.png",
})
minetest.register_tool("rangedweapons:remington", {
description = "" ..core.colorize("#35cdff","Remington 870\n") ..core.colorize("#FFFFFF", "Ranged damage: 2-7 X 9\n") ..core.colorize("#FFFFFF", "Accuracy: 60%\n")..core.colorize("#FFFFFF", "Mob knockback: 5\n") ..core.colorize("#FFFFFF", "Critical chance: 3%\n") ..core.colorize("#FFFFFF", "Critical damage: 6-15 X 9\n") ..core.colorize("#FFFFFF", "Ammunition: 12 gauge shells\n") ..core.colorize("#FFFFFF", "Reload time: 0.8\n") ..core.colorize("#27a600", "The gun is loaded!\n")..core.colorize("#FFFFFF", "Gun type: shotgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 15"),
range = 0,
groups = {not_in_creative_inventory = 1},
wield_scale = {x=1.9,y=1.9,z=1.1},
inventory_image = "rangedweapons_remington.png",
on_use = function(itemstack, user, pointed_thing)
local pos = user:getpos()
local dir = user:get_look_dir()
local yaw = user:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:remingtonshot")
if obj then
minetest.sound_play("rangedweapons_shotgun_shot", {object=obj})
obj:setvelocity({x=dir.x * math.random(13,17), y=dir.y * math.random(13,17), z=dir.z * math.random(13,17)})
obj:setacceleration({x=dir.x * math.random(-4.0,4.0), y=math.random(-4.0,4.0), z=dir.z * math.random(-4.0,4.0)})
-----------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:remingtonshot")
obj:setvelocity({x=dir.x * math.random(13,17), y=dir.y * math.random(13,17), z=dir.z * math.random(13,17)})
obj:setacceleration({x=dir.x * math.random(-4.0,4.0), y=math.random(-4.0,4.0), z=dir.z * math.random(-4.0,4.0)})
-----------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:remingtonshot")
obj:setvelocity({x=dir.x * math.random(13,17), y=dir.y * math.random(13,17), z=dir.z * math.random(13,17)})
obj:setacceleration({x=dir.x * math.random(-4.0,4.0), y=math.random(-4.0,4.0), z=dir.z * math.random(-4.0,4.0)})
-----------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:remingtonshot")
obj:setvelocity({x=dir.x * math.random(13,17), y=dir.y * math.random(13,17), z=dir.z * math.random(13,17)})
obj:setacceleration({x=dir.x * math.random(-4.0,4.0), y=math.random(-4.0,4.0), z=dir.z * math.random(-4.0,4.0)})
-----------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:remingtonshot")
obj:setvelocity({x=dir.x * math.random(13,17), y=dir.y * math.random(13,17), z=dir.z * math.random(13,17)})
obj:setacceleration({x=dir.x * math.random(-4.0,4.0), y=math.random(-4.0,4.0), z=dir.z * math.random(-4.0,4.0)})
-----------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:remingtonshot")
obj:setvelocity({x=dir.x * math.random(13,17), y=dir.y * math.random(13,17), z=dir.z * math.random(13,17)})
obj:setacceleration({x=dir.x * math.random(-4.0,4.0), y=math.random(-4.0,4.0), z=dir.z * math.random(-4.0,4.0)})
-----------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:remingtonshot")
obj:setvelocity({x=dir.x * math.random(13,17), y=dir.y * math.random(13,17), z=dir.z * math.random(13,17)})
obj:setacceleration({x=dir.x * math.random(-4.0,4.0), y=math.random(-4.0,4.0), z=dir.z * math.random(-4.0,4.0)})
-----------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:remingtonshot")
obj:setvelocity({x=dir.x * math.random(13,17), y=dir.y * math.random(13,17), z=dir.z * math.random(13,17)})
obj:setacceleration({x=dir.x * math.random(-4.0,4.0), y=math.random(-4.0,4.0), z=dir.z * math.random(-4.0,4.0)})
-----------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:remingtonshot")
obj:setvelocity({x=dir.x * math.random(13,17), y=dir.y * math.random(13,17), z=dir.z * math.random(13,17)})
obj:setacceleration({x=dir.x * math.random(-4.0,4.0), y=math.random(-4.0,4.0), z=dir.z * math.random(-4.0,4.0)})
-----------------------------------------------------
minetest.add_particle({
pos = pos,
velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} ,
acceleration = {x=dir.x * -4, y=2, z=dir.z * -4},
expirationtime = 1.25,
size = 10,
collisiondetection = false,
vertical = false,
texture = "tnt_smoke.png",
glow = 5,
})
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or user
itemstack = "rangedweapons:remington_uld"
end
end
end
return itemstack
end,
})
local rangedweapons_remingtonshot = {
physical = false,
timer = 0,
visual = "sprite",
visual_size = {x=0.1, y=0.1},
textures = {"rangedweapons_buckball.png"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_remingtonshot.on_step = function(self, dtime, node, pos)
self.timer = self.timer + dtime
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.3 then
local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1.25)
for k, obj in pairs(objs) do
if obj:get_luaentity() ~= nil then
if obj:get_luaentity().name ~= "rangedweapons:remingtonshot" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 3 then
local damage = math.random(6,15)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 10},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(2,7)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 5},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 3 then
local damage = math.random(6,15)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(2,7)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
if self.timer >= 4.0 then
self.object:remove()
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") then
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
if node.name == "rangedweapons:barrel" or
node.name == "doors:door_wood_a" or
node.name == "doors:door_wood_b" or
node.name == "doors:door_glass_a" or
node.name == "doors:door_glass_b" or
node.name == "xpanes:pane" or
node.name == "xpanes:pane_flat" or
node.name == "vessels:drinking_glass" or
node.name == "vessels:glass_bottle" or
node.name == "default:glass" then
minetest.get_node_timer(pos):start(0)
end
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
end
end
minetest.register_entity("rangedweapons:remingtonshot", rangedweapons_remingtonshot )

106
rpg.lua Normal file
View File

@ -0,0 +1,106 @@
minetest.register_craft({
output = 'rangedweapons:rpg_uld',
recipe = {
{'default:diamond', 'default:steel_ingot', ''},
{'default:steelblock', 'default:tree', 'default:diamondblock'},
{'default:diamond', 'default:tree', ''},
}
})
minetest.register_craftitem("rangedweapons:rpg_uld", {
stack_max= 1,
wield_scale = {x=2.5,y=2.5,z=3.75},
range = 0,
description = "" ..core.colorize("#35cdff","rpg\n") ..core.colorize("#FFFFFF", "Explosion radius: 3\n") ..core.colorize("#FFFFFF", "Ammunition: rockets\n") ..core.colorize("#FFFFFF", "Reload time: 1.0\n") ..core.colorize("#be0d00", "The gun is NOT loaded! (Right-click to load)\n")..core.colorize("#FFFFFF", "Gun type:Rocket launcher\n") ..core.colorize("#FFFFFF", "Bullet velocity: 15"),
inventory_image = "rangedweapons_rpg.png",
on_use = function(user)
minetest.sound_play("rangedweapons_empty", {user})
end,
})
local timer = 0
minetest.register_globalstep(function(dtime, player)
timer = timer + dtime;
if timer >= 0.001 then
for _, player in pairs(minetest.get_connected_players()) do
local inv = player:get_inventory()
local controls = player:get_player_control()
if player:get_wielded_item():get_name() == "rangedweapons:rpg_uld"
and inv:contains_item("main", "rangedweapons:rocket")then
if controls.RMB then
inv:remove_item("main", "rangedweapons:rocket")
player:set_wielded_item("rangedweapons:rpg_rld")
end
timer = 0
minetest.sound_play("", {player})
end
if timer >= 1.25 and
player:get_wielded_item():get_name() == "rangedweapons:rpg_rld" then
player:set_wielded_item("rangedweapons:rpg")
timer = 0
minetest.sound_play("rangedweapons_reload_b", {player})
end
end
end
end)
minetest.register_craftitem("rangedweapons:rpg_rld", {
stack_max= 1,
range = 0,
wield_scale = {x=2.5,y=2.5,z=3.75},
description = "**RELOADING rpg**",
groups = {not_in_creative_inventory = 1},
inventory_image = "rangedweapons_rpg.png",
})
minetest.register_tool("rangedweapons:rpg", {
description = "" ..core.colorize("#35cdff","rpg\n") ..core.colorize("#FFFFFF", "Explosion radius: 3\n") ..core.colorize("#FFFFFF", "Ammunition: rockets\n") ..core.colorize("#FFFFFF", "Reload time: 1.0\n") ..core.colorize("#27a600", "The gun is loaded!\n")..core.colorize("#FFFFFF", "Gun type:Rocket launcher\n") ..core.colorize("#FFFFFF", "Bullet velocity: 15"),
range = 0,
groups = {not_in_creative_inventory = 1},
wield_scale = {x=2.5,y=2.5,z=3.75},
inventory_image = "rangedweapons_rpg_rld.png",
on_use = function(itemstack, user, pointed_thing)
local pos = user:getpos()
local dir = user:get_look_dir()
local yaw = user:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:rocket")
if obj then
minetest.sound_play("rangedweapons_rocket", {object=obj})
obj:setvelocity({x=dir.x * 15, y=dir.y * 15, z=dir.z * 15})
obj:setyaw(yaw + math.pi)
minetest.add_particle({
pos = pos,
velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} ,
acceleration = {x=dir.x * -4, y=2, z=dir.z * -4},
expirationtime = 1.5,
size = 10,
collisiondetection = false,
vertical = false,
texture = "tnt_smoke.png",
glow = 5,
})
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or user
itemstack = "rangedweapons:rpg_uld"
end
end
end
return itemstack
end,
})

176
rpk.lua Normal file
View File

@ -0,0 +1,176 @@
minetest.register_craft({
output = 'rangedweapons:rpk',
recipe = {
{'default:diamond', 'default:mese', ''},
{'default:steel_ingot', 'default:steelblock', 'default:tree'},
{'', 'default:diamond', 'default:steel_ingot'},
}
})
minetest.register_craftitem("rangedweapons:rpk", {
stack_max= 1,
wield_scale = {x=2.5,y=2.5,z=1.5},
description = "" ..core.colorize("#35cdff","RPK\n") ..core.colorize("#FFFFFF", "Ranged damage: 2-5\n") ..core.colorize("#FFFFFF", "Accuracy: 55%\n") ..core.colorize("#FFFFFF", "Mob knockback: 2\n") ..core.colorize("#FFFFFF", "Critical chance: 8%\n") ..core.colorize("#FFFFFF", "Critical damage: 4-9\n") ..core.colorize("#FFFFFF", "Ammunition: 7.26mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.05\n") ..core.colorize("#FFFFFF", "Gun type: heavy machinegun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 30"),
range = 0,
inventory_image = "rangedweapons_rpk.png",
})
local timer = 0
minetest.register_globalstep(function(dtime, player)
timer = timer + dtime;
if timer >= 0.05 then
for _, player in pairs(minetest.get_connected_players()) do
local inv = player:get_inventory()
local controls = player:get_player_control()
if controls.LMB then
timer = 0
local wielded_item = player:get_wielded_item():get_name()
if wielded_item == "rangedweapons:rpk" then
if not inv:contains_item("main", "rangedweapons:726mm") then
minetest.sound_play("rangedweapons_empty", {object=player})
else
if wielded_item == "rangedweapons:rpk" then
inv:remove_item("main", "rangedweapons:726mm")
local pos = player:getpos()
local dir = player:get_look_dir()
local yaw = player:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:rpkshot")
if obj then
minetest.sound_play("rangedweapons_machinegun", {object=obj})
obj:setvelocity({x=dir.x * 30, y=dir.y * 30, z=dir.z * 30})
obj:setacceleration({x=dir.x * math.random(-4.5,4.5), y=math.random(-4.5,4.5), z=dir.z * math.random(-4.5,4.5)})
obj:setyaw(yaw + math.pi)
pos.y = pos.y + 0
local obj = minetest.add_entity(pos, "rangedweapons:empty_shell")
minetest.sound_play("", {object=obj})
obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10})
obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5})
obj:setyaw(yaw + math.pi)
minetest.add_particle({
pos = pos,
velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} ,
acceleration = {x=dir.x * -4, y=2, z=dir.z * -4},
expirationtime = 0.25,
size = 4,
collisiondetection = false,
vertical = false,
texture = "tnt_smoke.png",
glow = 5,
})
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or player
end
end
end
end
end
end
end
end
end
end)
local rangedweapons_rpkshot = {
physical = false,
timer = 0,
visual = "sprite",
visual_size = {x=0.3, y=0.3},
textures = {"rangedweapons_invisible.png"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_rpkshot.on_step = function(self, dtime, node, pos)
self.timer = self.timer + dtime
local tiem = 0.002
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.11 then
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 ~= "rangedweapons:rpkshot" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 8 then
local damage = math.random(4,9)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=4},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(2,5)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 2},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 8 then
local damage = math.random(4,9)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(2,5)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
if timer >= 0.002 + tiem then
minetest.add_particle({
pos = pos,
velocity = 0,
acceleration = {x=0, y=0, z=0},
expirationtime = 0.06,
size = 3,
collisiondetection = false,
vertical = false,
texture = "rangedweapons_bullet_fly.png",
glow = 15,
})
tiem = tiem + 0.002
end
if self.timer >= 4.0 then
self.object:remove()
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") then
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
if node.name == "rangedweapons:barrel" or
node.name == "doors:door_glass_a" or
node.name == "doors:door_glass_b" or
node.name == "xpanes:pane" or
node.name == "xpanes:pane_flat" or
node.name == "vessels:drinking_glass" or
node.name == "vessels:glass_bottle" or
node.name == "default:glass" then
minetest.get_node_timer(pos):start(0)
end
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
end
end
minetest.register_entity("rangedweapons:rpkshot", rangedweapons_rpkshot )

177
scar.lua Normal file
View File

@ -0,0 +1,177 @@
minetest.register_craft({
output = 'rangedweapons:scar',
recipe = {
{'default:diamond', 'default:mese', 'default:mese'},
{'default:steel_ingot', 'default:steel_ingot', 'default:mese'},
{'rangedweapons:plastic_sheet', '', 'default:mese_crystal'},
}
})
minetest.register_craftitem("rangedweapons:scar", {
stack_max= 1,
wield_scale = {x=1.7,y=1.7,z=1.25},
description = "" ..core.colorize("#35cdff","FN SCAR 16\n") ..core.colorize("#FFFFFF", "Ranged damage: 9-24\n") ..core.colorize("#FFFFFF", "Accuracy: 85%\n") ..core.colorize("#FFFFFF", "Mob knockback: 6\n")..core.colorize("#FFFFFF", "Critical chance: 14%\n") ..core.colorize("#FFFFFF", "Critical damage: 20-42\n") ..core.colorize("#FFFFFF", "Ammunition: 7.26mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.15\n") ..core.colorize("#FFFFFF", "Gun type: Assault rifle\n") ..core.colorize("#FFFFFF", "Bullet velocity: 45"),
range = 0,
inventory_image = "rangedweapons_scar.png",
})
local timer = 0
minetest.register_globalstep(function(dtime, player)
timer = timer + dtime;
if timer >= 0.15 then
for _, player in pairs(minetest.get_connected_players()) do
local inv = player:get_inventory()
local controls = player:get_player_control()
if controls.LMB then
timer = 0
local wielded_item = player:get_wielded_item():get_name()
if wielded_item == "rangedweapons:scar" then
if not inv:contains_item("main", "rangedweapons:726mm") then
minetest.sound_play("rangedweapons_empty", {object=player})
else
if wielded_item == "rangedweapons:scar" then
inv:remove_item("main", "rangedweapons:726mm")
local pos = player:getpos()
local dir = player:get_look_dir()
local yaw = player:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:scarshot")
if obj then
minetest.sound_play("rangedweapons_ak", {object=obj})
obj:setvelocity({x=dir.x * 45, y=dir.y * 45, z=dir.z * 45})
obj:setacceleration({x=dir.x * math.random(-1.5,1.5), y=math.random(-1.5,1.5), z=dir.z * math.random(-1.5,1.5)})
obj:setyaw(yaw + math.pi)
pos.y = pos.y + 0
local obj = minetest.add_entity(pos, "rangedweapons:empty_shell")
minetest.sound_play("", {object=obj})
obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10})
obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5})
obj:setyaw(yaw + math.pi)
minetest.add_particle({
pos = pos,
velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} ,
acceleration = {x=dir.x * -4, y=2, z=dir.z * -4},
expirationtime = 0.5,
size = 4,
collisiondetection = false,
vertical = false,
texture = "tnt_smoke.png",
glow = 5,
})
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or player
end
end
end
end
end
end
end
end
end
end)
local rangedweapons_scarshot = {
physical = false,
timer = 0,
visual = "sprite",
visual_size = {x=0.3, y=0.3},
textures = {"rangedweapons_invisible.png"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_scarshot.on_step = function(self, dtime, node, pos)
self.timer = self.timer + dtime
local tiem = 0.002
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.06 then
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 ~= "rangedweapons:scarshot" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 14 then
local damage = math.random(20,42)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=12},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(9,24)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 6},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 14 then
local damage = math.random(20,42)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(9,24)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
if timer >= 0.002 + tiem then
minetest.add_particle({
pos = pos,
velocity = 0,
acceleration = {x=0, y=0, z=0},
expirationtime = 0.06,
size = 3,
collisiondetection = false,
vertical = false,
texture = "rangedweapons_bullet_fly.png",
glow = 15,
})
tiem = tiem + 0.002
end
if self.timer >= 4.0 then
self.object:remove()
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") then
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
if node.name == "rangedweapons:barrel" or
node.name == "doors:door_glass_a" or
node.name == "doors:door_glass_b" or
node.name == "xpanes:pane" or
node.name == "xpanes:pane_flat" or
node.name == "vessels:drinking_glass" or
node.name == "vessels:glass_bottle" or
node.name == "default:glass" then
minetest.get_node_timer(pos):start(0)
end
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
end
end
minetest.register_entity("rangedweapons:scarshot", rangedweapons_scarshot )

20
settings.lua Normal file
View File

@ -0,0 +1,20 @@
-- change "true" to "false" in order to disable a feature, or
-- "false" to "true" to enable it
explosives = true
javelins = true
shurikens = true
handguns = true
shotguns = true
rifles = true
magnums_and_revolvers = true
machine_pistols = true
sub_machineguns = true
assault_rifles = true
power_weapons = true
glass_breaking = true
door_breaking = true
heavy_machineguns = true
minigun_aswell = true

877
shurikens.lua Normal file
View File

@ -0,0 +1,877 @@
---wooden---
minetest.register_craftitem("rangedweapons:shuriken_wooden", {
wield_scale = {x=0.5,y=0.5,z=0.20},
inventory_image = "rangedweapons_wooden_shuriken.png",
})
minetest.register_craftitem("rangedweapons:wooden_shuriken", {
description = "" ..core.colorize("#35cdff","Wooden shuriken\n") ..core.colorize("#FFFFFF", "Ranged damage: 1-3\n") ..core.colorize("#FFFFFF", "Accuracy: 100%\n") ..core.colorize("#FFFFFF", "Mob knockback: 4\n") ..core.colorize("#FFFFFF", "Critical chance: 4%\n") ..core.colorize("#FFFFFF", "Critical damage: 2-5\n") ..core.colorize("#FFFFFF", "Shuriken survival rate: 10%\n")..core.colorize("#FFFFFF", "Projectile gravity: 8\n") ..core.colorize("#FFFFFF", "Projectile velocity: 12"),
range = 0,
stack_max= 100,
inventory_image = "rangedweapons_wooden_shuriken.png",
on_use = function(itemstack, user, pointed_thing)
if not minetest.setting_getbool("creative_mode") then itemstack:take_item()
end
if pointed_thing.type ~= "nothing" then
local pointed = minetest.get_pointed_thing_position(pointed_thing)
if vector.distance(user:getpos(), pointed) < 8 then
return itemstack
end
end
local pos = user:getpos()
local dir = user:get_look_dir()
local yaw = user:get_look_yaw()
if pos and dir then
pos.y = pos.y + 1.5
local obj = minetest.add_entity(pos, "rangedweapons:woodensr")
if obj then
minetest.sound_play("rangedweapons_throw", {object=obj})
obj:setvelocity({x=dir.x * 12, y=dir.y * 12, z=dir.z * 12})
obj:setacceleration({x=dir.x * -1, y=-8, z=dir.z * -1})
obj:setyaw(yaw + math.pi)
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or user
end
end
end
return itemstack
end,
})
local rangedweapons_woodensr = {
physical = false,
timer = 0,
visual = "wielditem",
visual_size = {x=0.33, y=0.33,},
textures = {"rangedweapons:shuriken_wooden"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_woodensr.on_step = function(self, dtime)
self.timer = self.timer + dtime
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.25 then
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 ~= "rangedweapons:woodensr" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 4 then
local damage = math.random(2,5)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=8},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(1,3)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=4},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 4 then
local damage = math.random(2,5)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(1,3)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
end
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") and math.random(1, 100) <= 10 then
minetest.add_item(self.lastpos, "rangedweapons:wooden_shuriken")
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
minetest.register_entity("rangedweapons:woodensr", rangedweapons_woodensr)
minetest.register_craft({
output = 'rangedweapons:wooden_shuriken 20',
recipe = {
{'', 'group:wood', ''},
{'group:wood', '', 'group:wood'},
{'', 'group:wood', ''},
}
})
---stone---
minetest.register_craftitem("rangedweapons:shuriken_stone", {
wield_scale = {x=0.5,y=0.5,z=0.20},
inventory_image = "rangedweapons_stone_shuriken.png",
})
minetest.register_craftitem("rangedweapons:stone_shuriken", {
description = "" ..core.colorize("#35cdff","stone shuriken\n") ..core.colorize("#FFFFFF", "Ranged damage: 2-5\n") ..core.colorize("#FFFFFF", "Accuracy: 100%\n") ..core.colorize("#FFFFFF", "Mob knockback: 7\n") ..core.colorize("#FFFFFF", "Critical chance: 5%\n") ..core.colorize("#FFFFFF", "Critical damage: 4-8\n") ..core.colorize("#FFFFFF", "Shuriken survival rate: 15%\n")..core.colorize("#FFFFFF", "Projectile gravity: 9\n") ..core.colorize("#FFFFFF", "Projectile velocity: 10"),
range = 0,
stack_max= 125,
inventory_image = "rangedweapons_stone_shuriken.png",
on_use = function(itemstack, user, pointed_thing)
if not minetest.setting_getbool("creative_mode") then itemstack:take_item()
end
if pointed_thing.type ~= "nothing" then
local pointed = minetest.get_pointed_thing_position(pointed_thing)
if vector.distance(user:getpos(), pointed) < 8 then
return itemstack
end
end
local pos = user:getpos()
local dir = user:get_look_dir()
local yaw = user:get_look_yaw()
if pos and dir then
pos.y = pos.y + 1.5
local obj = minetest.add_entity(pos, "rangedweapons:stonesr")
if obj then
minetest.sound_play("rangedweapons_throw", {object=obj})
obj:setvelocity({x=dir.x * 10, y=dir.y * 10, z=dir.z * 10})
obj:setacceleration({x=dir.x * -1, y=-9, z=dir.z * -1})
obj:setyaw(yaw + math.pi)
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or user
end
end
end
return itemstack
end,
})
local rangedweapons_stonesr = {
physical = false,
timer = 0,
visual = "wielditem",
visual_size = {x=0.33, y=0.33,},
textures = {"rangedweapons:shuriken_stone"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_stonesr.on_step = function(self, dtime)
self.timer = self.timer + dtime
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.30 then
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 ~= "rangedweapons:stonesr" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 5 then
local damage = math.random(4,8)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=14},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(2,5)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=7},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 5 then
local damage = math.random(4,8)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(2,5)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
end
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") and math.random(1, 100) <= 15 then
minetest.add_item(self.lastpos, "rangedweapons:stone_shuriken")
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
minetest.register_entity("rangedweapons:stonesr", rangedweapons_stonesr)
minetest.register_craft({
output = 'rangedweapons:stone_shuriken 10',
recipe = {
{'', 'default:cobble', ''},
{'default:cobble', '', 'default:cobble'},
{'', 'default:cobble', ''},
}
})
---steel---
minetest.register_craftitem("rangedweapons:shuriken_steel", {
wield_scale = {x=0.5,y=0.5,z=0.20},
inventory_image = "rangedweapons_steel_shuriken.png",
})
minetest.register_craftitem("rangedweapons:steel_shuriken", {
description = "" ..core.colorize("#35cdff","steel shuriken\n") ..core.colorize("#FFFFFF", "Ranged damage: 3-8\n") ..core.colorize("#FFFFFF", "Accuracy: 100%\n") ..core.colorize("#FFFFFF", "Mob knockback: 2\n") ..core.colorize("#FFFFFF", "Critical chance: 6%\n") ..core.colorize("#FFFFFF", "Critical damage: 7-16\n") ..core.colorize("#FFFFFF", "Shuriken survival rate: 25%\n")..core.colorize("#FFFFFF", "Projectile gravity: 6\n") ..core.colorize("#FFFFFF", "Projectile velocity: 15"),
range = 0,
stack_max= 175,
inventory_image = "rangedweapons_steel_shuriken.png",
on_use = function(itemstack, user, pointed_thing)
if not minetest.setting_getbool("creative_mode") then itemstack:take_item()
end
if pointed_thing.type ~= "nothing" then
local pointed = minetest.get_pointed_thing_position(pointed_thing)
if vector.distance(user:getpos(), pointed) < 8 then
return itemstack
end
end
local pos = user:getpos()
local dir = user:get_look_dir()
local yaw = user:get_look_yaw()
if pos and dir then
pos.y = pos.y + 1.5
local obj = minetest.add_entity(pos, "rangedweapons:steelsr")
if obj then
minetest.sound_play("rangedweapons_throw", {object=obj})
obj:setvelocity({x=dir.x * 15, y=dir.y * 15, z=dir.z * 15})
obj:setacceleration({x=dir.x * -1, y=-6, z=dir.z * -1})
obj:setyaw(yaw + math.pi)
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or user
end
end
end
return itemstack
end,
})
local rangedweapons_steelsr = {
physical = false,
timer = 0,
visual = "wielditem",
visual_size = {x=0.33, y=0.33,},
textures = {"rangedweapons:shuriken_steel"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_steelsr.on_step = function(self, dtime)
self.timer = self.timer + dtime
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.17 then
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 ~= "rangedweapons:steelsr" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 6 then
local damage = math.random(7,16)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=4},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(3,8)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=2},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 6 then
local damage = math.random(7,16)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(3,8)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
end
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") and math.random(1, 100) <= 25 then
minetest.add_item(self.lastpos, "rangedweapons:steel_shuriken")
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
minetest.register_entity("rangedweapons:steelsr", rangedweapons_steelsr)
minetest.register_craft({
output = 'rangedweapons:steel_shuriken 30',
recipe = {
{'', 'default:steel_ingot', ''},
{'default:steel_ingot', '', 'default:steel_ingot'},
{'', 'default:steel_ingot', ''},
}
})
---bronze---
minetest.register_craftitem("rangedweapons:shuriken_bronze", {
wield_scale = {x=0.5,y=0.5,z=0.20},
inventory_image = "rangedweapons_bronze_shuriken.png",
})
minetest.register_craftitem("rangedweapons:bronze_shuriken", {
description = "" ..core.colorize("#35cdff","bronze shuriken\n") ..core.colorize("#FFFFFF", "Ranged damage: 3-8\n") ..core.colorize("#FFFFFF", "Accuracy: 100%\n") ..core.colorize("#FFFFFF", "Mob knockback: 2\n") ..core.colorize("#FFFFFF", "Critical chance: 6%\n") ..core.colorize("#FFFFFF", "Critical damage: 7-16\n") ..core.colorize("#FFFFFF", "Shuriken survival rate: 30%\n")..core.colorize("#FFFFFF", "Projectile gravity: 6\n") ..core.colorize("#FFFFFF", "Projectile velocity: 15"),
range = 0,
stack_max= 200,
inventory_image = "rangedweapons_bronze_shuriken.png",
on_use = function(itemstack, user, pointed_thing)
if not minetest.setting_getbool("creative_mode") then itemstack:take_item()
end
if pointed_thing.type ~= "nothing" then
local pointed = minetest.get_pointed_thing_position(pointed_thing)
if vector.distance(user:getpos(), pointed) < 8 then
return itemstack
end
end
local pos = user:getpos()
local dir = user:get_look_dir()
local yaw = user:get_look_yaw()
if pos and dir then
pos.y = pos.y + 1.5
local obj = minetest.add_entity(pos, "rangedweapons:bronzesr")
if obj then
minetest.sound_play("rangedweapons_throw", {object=obj})
obj:setvelocity({x=dir.x * 15, y=dir.y * 15, z=dir.z * 15})
obj:setacceleration({x=dir.x * -1, y=-6, z=dir.z * -1})
obj:setyaw(yaw + math.pi)
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or user
end
end
end
return itemstack
end,
})
local rangedweapons_bronzesr = {
physical = false,
timer = 0,
visual = "wielditem",
visual_size = {x=0.33, y=0.33,},
textures = {"rangedweapons:shuriken_bronze"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_bronzesr.on_step = function(self, dtime)
self.timer = self.timer + dtime
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.17 then
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 ~= "rangedweapons:bronzesr" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 6 then
local damage = math.random(7,16)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=4},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(3,8)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=2},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 6 then
local damage = math.random(7,16)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(3,8)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
end
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") and math.random(1, 100) <= 30 then
minetest.add_item(self.lastpos, "rangedweapons:bronze_shuriken")
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
minetest.register_entity("rangedweapons:bronzesr", rangedweapons_bronzesr)
minetest.register_craft({
output = 'rangedweapons:bronze_shuriken 35',
recipe = {
{'', 'default:bronze_ingot', ''},
{'default:bronze_ingot', '', 'default:bronze_ingot'},
{'', 'default:bronze_ingot', ''},
}
})
---golden---
minetest.register_craftitem("rangedweapons:shuriken_golden", {
wield_scale = {x=0.5,y=0.5,z=0.20},
inventory_image = "rangedweapons_golden_shuriken.png",
})
minetest.register_craftitem("rangedweapons:golden_shuriken", {
description = "" ..core.colorize("#35cdff","golden shuriken\n") ..core.colorize("#FFFFFF", "Ranged damage: 4-10\n") ..core.colorize("#FFFFFF", "Accuracy: 100%\n") ..core.colorize("#FFFFFF", "Mob knockback: 4\n") ..core.colorize("#FFFFFF", "Critical chance: 7%\n") ..core.colorize("#FFFFFF", "Critical damage: 10-22\n") ..core.colorize("#FFFFFF", "Shuriken survival rate: 36%\n")..core.colorize("#FFFFFF", "Projectile gravity: 7\n") ..core.colorize("#FFFFFF", "Projectile velocity: 12"),
range = 0,
stack_max= 275,
inventory_image = "rangedweapons_golden_shuriken.png",
on_use = function(itemstack, user, pointed_thing)
if not minetest.setting_getbool("creative_mode") then itemstack:take_item()
end
if pointed_thing.type ~= "nothing" then
local pointed = minetest.get_pointed_thing_position(pointed_thing)
if vector.distance(user:getpos(), pointed) < 8 then
return itemstack
end
end
local pos = user:getpos()
local dir = user:get_look_dir()
local yaw = user:get_look_yaw()
if pos and dir then
pos.y = pos.y + 1.5
local obj = minetest.add_entity(pos, "rangedweapons:goldensr")
if obj then
minetest.sound_play("rangedweapons_throw", {object=obj})
obj:setvelocity({x=dir.x * 12, y=dir.y * 12, z=dir.z * 12})
obj:setacceleration({x=dir.x * -1, y=-7, z=dir.z * -1})
obj:setyaw(yaw + math.pi)
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or user
end
end
end
return itemstack
end,
})
local rangedweapons_goldensr = {
physical = false,
timer = 0,
visual = "wielditem",
visual_size = {x=0.33, y=0.33,},
textures = {"rangedweapons:shuriken_golden"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_goldensr.on_step = function(self, dtime)
self.timer = self.timer + dtime
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.24 then
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 ~= "rangedweapons:goldensr" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 7 then
local damage = math.random(10,22)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=8},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(4,10)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=4},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 7 then
local damage = math.random(10,22)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(4,10)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
end
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") and math.random(1, 100) <= 36 then
minetest.add_item(self.lastpos, "rangedweapons:golden_shuriken")
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
minetest.register_entity("rangedweapons:goldensr", rangedweapons_goldensr)
minetest.register_craft({
output = 'rangedweapons:golden_shuriken 42',
recipe = {
{'', 'default:gold_ingot', ''},
{'default:gold_ingot', '', 'default:gold_ingot'},
{'', 'default:gold_ingot', ''},
}
})
---mese---
minetest.register_craftitem("rangedweapons:shuriken_mese", {
wield_scale = {x=0.5,y=0.5,z=0.20},
inventory_image = "rangedweapons_mese_shuriken.png",
})
minetest.register_craftitem("rangedweapons:mese_shuriken", {
description = "" ..core.colorize("#35cdff","mese shuriken\n") ..core.colorize("#FFFFFF", "Ranged damage: 5-12\n") ..core.colorize("#FFFFFF", "Accuracy: 100%\n") ..core.colorize("#FFFFFF", "Mob knockback: 1\n") ..core.colorize("#FFFFFF", "Critical chance: 8%\n") ..core.colorize("#FFFFFF", "Critical damage: 13-28\n") ..core.colorize("#FFFFFF", "Shuriken survival rate: 45%\n")..core.colorize("#FFFFFF", "Projectile gravity: 5\n") ..core.colorize("#FFFFFF", "Projectile velocity: 20"),
range = 0,
stack_max= 340,
inventory_image = "rangedweapons_mese_shuriken.png",
on_use = function(itemstack, user, pointed_thing)
if not minetest.setting_getbool("creative_mode") then itemstack:take_item()
end
if pointed_thing.type ~= "nothing" then
local pointed = minetest.get_pointed_thing_position(pointed_thing)
if vector.distance(user:getpos(), pointed) < 8 then
return itemstack
end
end
local pos = user:getpos()
local dir = user:get_look_dir()
local yaw = user:get_look_yaw()
if pos and dir then
pos.y = pos.y + 1.5
local obj = minetest.add_entity(pos, "rangedweapons:mesesr")
if obj then
minetest.sound_play("rangedweapons_throw", {object=obj})
obj:setvelocity({x=dir.x * 20, y=dir.y * 20, z=dir.z * 20})
obj:setacceleration({x=dir.x * -1, y=-5, z=dir.z * -1})
obj:setyaw(yaw + math.pi)
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or user
end
end
end
return itemstack
end,
})
local rangedweapons_mesesr = {
physical = false,
timer = 0,
visual = "wielditem",
visual_size = {x=0.33, y=0.33,},
textures = {"rangedweapons:shuriken_mese"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_mesesr.on_step = function(self, dtime)
self.timer = self.timer + dtime
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.15 then
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 ~= "rangedweapons:mesesr" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 8 then
local damage = math.random(13,28)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=2},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(5,12)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=1},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 8 then
local damage = math.random(13,28)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(5,12)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
end
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") and math.random(1, 100) <= 45 then
minetest.add_item(self.lastpos, "rangedweapons:mese_shuriken")
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
minetest.register_entity("rangedweapons:mesesr", rangedweapons_mesesr)
minetest.register_craft({
output = 'rangedweapons:mese_shuriken 55',
recipe = {
{'', 'default:mese_crystal', ''},
{'default:mese_crystal', '', 'default:mese_crystal'},
{'', 'default:mese_crystal', ''},
}
})
---diamond---
minetest.register_craftitem("rangedweapons:shuriken_diamond", {
wield_scale = {x=0.5,y=0.5,z=0.20},
inventory_image = "rangedweapons_diamond_shuriken.png",
})
minetest.register_craftitem("rangedweapons:diamond_shuriken", {
description = "" ..core.colorize("#35cdff","diamond shuriken\n") ..core.colorize("#FFFFFF", "Ranged damage: 6-15\n") ..core.colorize("#FFFFFF", "Accuracy: 100%\n") ..core.colorize("#FFFFFF", "Mob knockback: 1\n") ..core.colorize("#FFFFFF", "Critical chance: 9%\n") ..core.colorize("#FFFFFF", "Critical damage: 18-35\n") ..core.colorize("#FFFFFF", "Shuriken survival rate: 60%\n")..core.colorize("#FFFFFF", "Projectile gravity: 4\n") ..core.colorize("#FFFFFF", "Projectile velocity: 25"),
range = 0,
stack_max= 420,
inventory_image = "rangedweapons_diamond_shuriken.png",
on_use = function(itemstack, user, pointed_thing)
if not minetest.setting_getbool("creative_mode") then itemstack:take_item()
end
if pointed_thing.type ~= "nothing" then
local pointed = minetest.get_pointed_thing_position(pointed_thing)
if vector.distance(user:getpos(), pointed) < 8 then
return itemstack
end
end
local pos = user:getpos()
local dir = user:get_look_dir()
local yaw = user:get_look_yaw()
if pos and dir then
pos.y = pos.y + 1.5
local obj = minetest.add_entity(pos, "rangedweapons:diamondsr")
if obj then
minetest.sound_play("rangedweapons_throw", {object=obj})
obj:setvelocity({x=dir.x * 25, y=dir.y * 25, z=dir.z * 25})
obj:setacceleration({x=dir.x * -1, y=-4, z=dir.z * -1})
obj:setyaw(yaw + math.pi)
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or user
end
end
end
return itemstack
end,
})
local rangedweapons_diamondsr = {
physical = false,
timer = 0,
visual = "wielditem",
visual_size = {x=0.33, y=0.33,},
textures = {"rangedweapons:shuriken_diamond"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_diamondsr.on_step = function(self, dtime)
self.timer = self.timer + dtime
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.12 then
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 ~= "rangedweapons:diamondsr" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 9 then
local damage = math.random(18,35)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=2},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(6,15)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=1},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 9 then
local damage = math.random(18,35)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(6,15)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
end
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") and math.random(1, 100) <= 60 then
minetest.add_item(self.lastpos, "rangedweapons:diamond_shuriken")
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
minetest.register_entity("rangedweapons:diamondsr", rangedweapons_diamondsr)
minetest.register_craft({
output = 'rangedweapons:diamond_shuriken 69',
recipe = {
{'', 'default:diamond', ''},
{'default:diamond', '', 'default:diamond'},
{'', 'default:diamond', ''},
}
})

BIN
sounds/crit.ogg Normal file

Binary file not shown.

BIN
sounds/glass_break.ogg Normal file

Binary file not shown.

BIN
sounds/rangedweapons_ak.ogg Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

250
spas12.lua Normal file
View File

@ -0,0 +1,250 @@
minetest.register_craft({
output = "rangedweapons:spas12_uld",
recipe = {
{"", "default:steel_ingot", "default:steel_ingot"},
{"default:steel_ingot", "default:mese", "default:diamond"},
{"rangedweapons:plastic_sheet", "default:diamond", "default:steel_ingot"},
}
})
minetest.register_craftitem("rangedweapons:spas12_uld", {
stack_max= 1,
wield_scale = {x=2.1,y=2.1,z=1.25},
range = 0,
description = "" ..core.colorize("#35cdff","Franchi SPAS-12\n") ..core.colorize("#FFFFFF", "Ranged damage: 4-10 X 12\n") ..core.colorize("#FFFFFF", "Accuracy: 67%\n") ..core.colorize("#FFFFFF", "Mob knockback: 7\n") ..core.colorize("#FFFFFF", "Critical chance: 5%\n") ..core.colorize("#FFFFFF", "Critical damage: 10-22 X 12\n") ..core.colorize("#FFFFFF", "Ammunition: 12 gauge shells\n") ..core.colorize("#FFFFFF", "Reload time: 0.45\n") ..core.colorize("#be0d00", "The gun is NOT loaded! (Right-click to load)\n")..core.colorize("#FFFFFF", "Gun type: shotgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 20"),
inventory_image = "rangedweapons_spas12.png",
on_use = function(user)
minetest.sound_play("rangedweapons_empty", {user})
end,
})
local timer = 0
minetest.register_globalstep(function(dtime, player)
timer = timer + dtime;
if timer >= 0.001 then
for _, player in pairs(minetest.get_connected_players()) do
local inv = player:get_inventory()
local controls = player:get_player_control()
if player:get_wielded_item():get_name() == "rangedweapons:spas12_uld"
and inv:contains_item("main", "rangedweapons:shell")then
if controls.RMB then
inv:remove_item("main", "rangedweapons:shell")
player:set_wielded_item("rangedweapons:spas12_rld")
local pos = player:getpos()
local dir = player:get_look_dir()
local yaw = player:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:empty_shell_shotgun")
minetest.sound_play("", {object=obj})
obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10})
obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5})
obj:setyaw(yaw + math.pi)
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or player
end
end
timer = 0
minetest.sound_play("rangedweapons_shotgun_reload_a", {player})
end
end
if timer >= 0.45 and
player:get_wielded_item():get_name() == "rangedweapons:spas12_rld" then
player:set_wielded_item("rangedweapons:spas12")
timer = 0
minetest.sound_play("rangedweapons_shotgun_reload_b", {player})
end
end
end
end)
minetest.register_craftitem("rangedweapons:spas12_rld", {
stack_max= 1,
range = 0,
wield_scale = {x=2.1,y=2.1,z=1.25},
description = "**RELOADING FRANCHI SPAS-12**",
groups = {not_in_creative_inventory = 1},
inventory_image = "rangedweapons_spas12_rld.png",
})
minetest.register_tool("rangedweapons:spas12", {
description = "" ..core.colorize("#35cdff","Franchi SPAS-12\n") ..core.colorize("#FFFFFF", "Ranged damage: 4-10 X 12\n") ..core.colorize("#FFFFFF", "Accuracy: 67%\n")..core.colorize("#FFFFFF", "Mob knockback: 7\n") ..core.colorize("#FFFFFF", "Critical chance: 5%\n") ..core.colorize("#FFFFFF", "Critical damage: 10-22 X 12\n") ..core.colorize("#FFFFFF", "Ammunition: 12 gauge shells\n") ..core.colorize("#FFFFFF", "Reload time: 0.45\n") ..core.colorize("#27a600", "The gun is loaded!\n")..core.colorize("#FFFFFF", "Gun type: shotgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 20"),
range = 0,
groups = {not_in_creative_inventory = 1},
wield_scale = {x=2.1,y=2.1,z=1.25},
inventory_image = "rangedweapons_spas12.png",
on_use = function(itemstack, user, pointed_thing)
local pos = user:getpos()
local dir = user:get_look_dir()
local yaw = user:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:spas12shot")
if obj then
minetest.sound_play("rangedweapons_shotgun_shot", {object=obj})
obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)})
obj:setacceleration({x=dir.x * math.random(-3.3,3.3), y=math.random(-3.3,3.3), z=dir.z * math.random(-3.3,3.3)})
-----------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:spas12shot")
obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)})
obj:setacceleration({x=dir.x * math.random(-3.3,3.3), y=math.random(-3.3,3.3), z=dir.z * math.random(-3.3,3.3)})
-----------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:spas12shot")
obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)})
obj:setacceleration({x=dir.x * math.random(-3.3,3.3), y=math.random(-3.3,3.3), z=dir.z * math.random(-3.3,3.3)})
-----------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:spas12shot")
obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)})
obj:setacceleration({x=dir.x * math.random(-3.3,3.3), y=math.random(-3.3,3.3), z=dir.z * math.random(-3.3,3.3)})
-----------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:spas12shot")
obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)})
obj:setacceleration({x=dir.x * math.random(-3.3,3.3), y=math.random(-3.3,3.3), z=dir.z * math.random(-3.3,3.3)})
-----------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:spas12shot")
obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)})
obj:setacceleration({x=dir.x * math.random(-3.3,3.3), y=math.random(-3.3,3.3), z=dir.z * math.random(-3.3,3.3)})
-----------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:spas12shot")
obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)})
obj:setacceleration({x=dir.x * math.random(-3.3,3.3), y=math.random(-3.3,3.3), z=dir.z * math.random(-3.3,3.3)})
-----------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:spas12shot")
obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)})
obj:setacceleration({x=dir.x * math.random(-3.3,3.3), y=math.random(-3.3,3.3), z=dir.z * math.random(-3.3,3.3)})
-----------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:spas12shot")
obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)})
obj:setacceleration({x=dir.x * math.random(-3.3,3.3), y=math.random(-3.3,3.3), z=dir.z * math.random(-3.3,3.3)})
-----------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:spas12shot")
obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)})
obj:setacceleration({x=dir.x * math.random(-3.3,3.3), y=math.random(-3.3,3.3), z=dir.z * math.random(-3.3,3.3)})
-----------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:spas12shot")
obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)})
obj:setacceleration({x=dir.x * math.random(-3.3,3.3), y=math.random(-3.3,3.3), z=dir.z * math.random(-3.3,3.3)})
-----------------------------------------------------
local obj = minetest.add_entity(pos, "rangedweapons:spas12shot")
obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)})
obj:setacceleration({x=dir.x * math.random(-3.3,3.3), y=math.random(-3.3,3.3), z=dir.z * math.random(-3.3,3.3)})
-----------------------------------------------------
minetest.add_particle({
pos = pos,
velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} ,
acceleration = {x=dir.x * -4, y=2, z=dir.z * -4},
expirationtime = 1.25,
size = 10,
collisiondetection = false,
vertical = false,
texture = "tnt_smoke.png",
glow = 5,
})
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or user
itemstack = "rangedweapons:spas12_uld"
end
end
end
return itemstack
end,
})
local rangedweapons_spas12shot = {
physical = false,
timer = 0,
visual = "sprite",
visual_size = {x=0.1, y=0.1},
textures = {"rangedweapons_buckball.png"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_spas12shot.on_step = function(self, dtime, node, pos)
self.timer = self.timer + dtime
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.225 then
local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1.25)
for k, obj in pairs(objs) do
if obj:get_luaentity() ~= nil then
if obj:get_luaentity().name ~= "rangedweapons:spas12shot" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 5 then
local damage = math.random(10,22)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 14},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(4,10)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 7},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 5 then
local damage = math.random(10,22)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(4,10)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
if self.timer >= 4.0 then
self.object:remove()
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") then
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
if node.name == "rangedweapons:barrel" or
node.name == "doors:door_wood_a" or
node.name == "doors:door_wood_b" or
node.name == "doors:door_glass_a" or
node.name == "doors:door_glass_b" or
node.name == "xpanes:pane" or
node.name == "xpanes:pane_flat" or
node.name == "vessels:drinking_glass" or
node.name == "vessels:glass_bottle" or
node.name == "default:glass" then
minetest.get_node_timer(pos):start(0)
end
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
end
end
minetest.register_entity("rangedweapons:spas12shot", rangedweapons_spas12shot )

219
svd.lua Normal file
View File

@ -0,0 +1,219 @@
minetest.register_craft({
output = 'rangedweapons:svd_uld',
recipe = {
{'default:steel_ingot', 'default:diamondblock', 'default:steel_ingot'},
{'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
{'default:tree', 'default:diamond', 'default:tree'},
}
})
minetest.register_craftitem("rangedweapons:svd_uld", {
stack_max= 1,
wield_scale = {x=1.9,y=1.9,z=1.1},
range = 0,
description = "" ..core.colorize("#35cdff","S.V.D \n") ..core.colorize("#FFFFFF", "Ranged damage: 80/sec of bullet lifetime\n") ..core.colorize("#FFFFFF", "Accuracy: 100%\n") ..core.colorize("#FFFFFF", "Mob knockback: 14\n") ..core.colorize("#FFFFFF", "Critical chance: 42%\n") ..core.colorize("#FFFFFF", "Critical damage: 200/sec of bullet lifetime\n") ..core.colorize("#FFFFFF", "Ammunition: 308.Winchester rounds\n") ..core.colorize("#FFFFFF", "Reload time: 1.15\n") ..core.colorize("#be0d00", "The gun is NOT loaded! (Right-click to load)\n")..core.colorize("#FFFFFF", "Gun type: Rifle\n") ..core.colorize("#FFFFFF", "Bullet velocity: 60"),
inventory_image = "rangedweapons_svd.png",
on_use = function(user)
minetest.sound_play("rangedweapons_empty", {user})
end,
})
local timer = 0
minetest.register_globalstep(function(dtime, player)
timer = timer + dtime;
if timer >= 0.001 then
for _, player in pairs(minetest.get_connected_players()) do
local inv = player:get_inventory()
local controls = player:get_player_control()
if player:get_wielded_item():get_name() == "rangedweapons:svd_uld"
and inv:contains_item("main", "rangedweapons:308winchester")then
if controls.RMB then
inv:remove_item("main", "rangedweapons:308winchester")
player:set_wielded_item("rangedweapons:svd_rld")
local pos = player:getpos()
local dir = player:get_look_dir()
local yaw = player:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:empty_shell")
minetest.sound_play("", {object=obj})
obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10})
obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5})
obj:setyaw(yaw + math.pi)
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or player
end
end
timer = 0
minetest.sound_play("rangedweapons_reload_a", {player})
end
end
if timer >= 1.15 and
player:get_wielded_item():get_name() == "rangedweapons:svd_rld" then
player:set_wielded_item("rangedweapons:svd")
timer = 0
minetest.sound_play("rangedweapons_reload_b", {player})
end
end
end
end)
minetest.register_craftitem("rangedweapons:svd_rld", {
stack_max= 1,
range = 0,
wield_scale = {x=1.9,y=1.9,z=1.1},
description = "**RELOADING S.V.D.**",
groups = {not_in_creative_inventory = 1},
inventory_image = "rangedweapons_svd_rld.png",
})
minetest.register_tool("rangedweapons:svd", {
description = "" ..core.colorize("#35cdff","S.V.D. \n") ..core.colorize("#FFFFFF", "Ranged damage: 80/sec of bullet lifetime\n")..core.colorize("#FFFFFF", "Accuracy: 100%\n") ..core.colorize("#FFFFFF", "Mob knockback: 14\n") ..core.colorize("#FFFFFF", "Critical chance: 42%\n") ..core.colorize("#FFFFFF", "Critical damage: 200/sec of bullet lifetime\n") ..core.colorize("#FFFFFF", "Ammunition: 308.Winchester rounds\n") ..core.colorize("#FFFFFF", "Reload time: 1.15\n") ..core.colorize("#27a600", "The gun is loaded!\n")..core.colorize("#FFFFFF", "Gun type: Rifle\n") ..core.colorize("#FFFFFF", "Bullet velocity: 60"),
range = 0,
groups = {not_in_creative_inventory = 1},
wield_scale = {x=1.9,y=1.9,z=1.1},
inventory_image = "rangedweapons_svd.png",
on_use = function(itemstack, user, pointed_thing)
local pos = user:getpos()
local dir = user:get_look_dir()
local yaw = user:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:svdshot")
if obj then
minetest.sound_play("rangedweapons_rifle_a", {object=obj})
obj:setvelocity({x=dir.x * 60, y=dir.y * 60, z=dir.z * 60})
obj:setacceleration({x=dir.x * 0, y=0, z=dir.z * 0})
obj:setyaw(yaw + math.pi)
minetest.add_particle({
pos = pos,
velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} ,
acceleration = {x=dir.x * -4, y=2, z=dir.z * -4},
expirationtime = 1.5,
size = 8,
collisiondetection = false,
vertical = false,
texture = "tnt_smoke.png",
glow = 5,
})
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or user
itemstack = "rangedweapons:svd_uld"
end
end
end
return itemstack
end,
})
local rangedweapons_svdshot = {
physical = false,
timer = 0,
visual = "sprite",
visual_size = {x=0.3, y=0.3},
textures = {"rangedweapons_invisible.png"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_svdshot.on_step = function(self, dtime, node, pos)
self.timer = self.timer + dtime
local tiem = 0.002
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.05 then
local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1.5)
for k, obj in pairs(objs) do
if obj:get_luaentity() ~= nil then
if obj:get_luaentity().name ~= "rangedweapons:svdshot" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 80) <= 42 then
local damage = 200 * self.timer
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 28},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = 80 * self.timer
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 14},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 42 then
local damage = 200 * self.timer
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = 80 * self.timer
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
if timer >= 0.002 + tiem then
minetest.add_particle({
pos = pos,
velocity = 0,
acceleration = {x=0, y=0, z=0},
expirationtime = 0.06,
size = 3,
collisiondetection = false,
vertical = false,
texture = "rangedweapons_bullet_fly.png",
glow = 15,
})
tiem = tiem + 0.002
end
if self.timer >= 4.0 then
self.object:remove()
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") then
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
if node.name == "rangedweapons:barrel" or
node.name == "doors:door_glass_a" or
node.name == "doors:door_glass_b" or
node.name == "xpanes:pane" or
node.name == "xpanes:pane_flat" or
node.name == "vessels:drinking_glass" or
node.name == "vessels:glass_bottle" or
node.name == "default:glass" then
minetest.get_node_timer(pos):start(0)
end
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
end
end
minetest.register_entity("rangedweapons:svdshot", rangedweapons_svdshot )

228
taurus.lua Normal file
View File

@ -0,0 +1,228 @@
minetest.register_craft({
output = 'rangedweapons:taurus_uld',
recipe = {
{'rangedweapons:gunsteel_ingot', 'default:mese_crystal', 'default:mese_crystal_fragment'},
{'rangedweapons:gunsteel_ingot', 'default:diamondblock', 'rangedweapons:gunsteel_ingot'},
{'', 'rangedweapons:gunsteel_ingot', 'rangedweapons:plastic_sheet'},
}
})
minetest.register_craft({
output = 'rangedweapons:taurus_uld',
recipe = {
{'moreores:silver_ingot', 'default:mese_crystal', 'default:mese_crystal_fragment'},
{'moreores:silver_ingot', 'default:diamondblock', 'moreores:silver_ingot'},
{'', 'moreores:silver_ingot', 'rangedweapons:plastic_sheet'},
}
})
minetest.register_craftitem("rangedweapons:taurus_uld", {
stack_max= 1,
wield_scale = {x=1.25,y=1.25,z=1.1},
range = 0,
description = "" ..core.colorize("#35cdff","Taurus\n") ..core.colorize("#FFFFFF", "Ranged damage: 14-24\n") ..core.colorize("#FFFFFF", "Accuracy: 95%\n") ..core.colorize("#FFFFFF", "Mob knockback: 10\n") ..core.colorize("#FFFFFF", "Critical chance: 36%\n") ..core.colorize("#FFFFFF", "Critical damage: 30-50\n") ..core.colorize("#FFFFFF", "Ammunition: .357 Magnum rounds\n") ..core.colorize("#FFFFFF", "Reload time: 0.35\n") ..core.colorize("#be0d00", "The gun is NOT loaded! (Right-click to load)\n")..core.colorize("#FFFFFF", "Gun type: Revolver\n") ..core.colorize("#FFFFFF", "Bullet velocity: 55"),
inventory_image = "rangedweapons_taurus.png",
on_use = function(user)
minetest.sound_play("rangedweapons_empty", {user})
end,
})
local timer = 0
minetest.register_globalstep(function(dtime, player)
timer = timer + dtime;
if timer >= 0.001 then
for _, player in pairs(minetest.get_connected_players()) do
local inv = player:get_inventory()
local controls = player:get_player_control()
if player:get_wielded_item():get_name() == "rangedweapons:taurus_uld"
and inv:contains_item("main", "rangedweapons:357")then
if controls.RMB then
inv:remove_item("main", "rangedweapons:357")
player:set_wielded_item("rangedweapons:taurus_rld")
local pos = player:getpos()
local dir = player:get_look_dir()
local yaw = player:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:empty_shell")
minetest.sound_play("", {object=obj})
obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10})
obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5})
obj:setyaw(yaw + math.pi)
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or player
end
end
timer = 0
minetest.sound_play("rangedweapons_reload_b", {player})
end
end
if timer >= 0.35 and
player:get_wielded_item():get_name() == "rangedweapons:taurus_rld" then
player:set_wielded_item("rangedweapons:taurus")
timer = 0
minetest.sound_play("rangedweapons_reload_a", {player})
end
end
end
end)
minetest.register_craftitem("rangedweapons:taurus_rld", {
stack_max= 1,
range = 0,
wield_scale = {x=1.25,y=1.25,z=1.1},
description = "**RELOADING COLT taurus**",
groups = {not_in_creative_inventory = 1},
inventory_image = "rangedweapons_taurus_rld.png",
})
minetest.register_tool("rangedweapons:taurus", {
description = "" ..core.colorize("#35cdff","Taurus \n") ..core.colorize("#FFFFFF", "Ranged damage: 14-24\n")..core.colorize("#FFFFFF", "Accuracy: 95%\n") ..core.colorize("#FFFFFF", "Mob knockback: 10\n") ..core.colorize("#FFFFFF", "Critical chance: 36%\n") ..core.colorize("#FFFFFF", "Critical damage: 30-50\n") ..core.colorize("#FFFFFF", "Ammunition: .357 Magnum rounds\n") ..core.colorize("#FFFFFF", "Reload time: 0.35\n") ..core.colorize("#27a600", "The gun is loaded!\n")..core.colorize("#FFFFFF", "Gun type: Revolver\n") ..core.colorize("#FFFFFF", "Bullet velocity: 55"),
range = 0,
groups = {not_in_creative_inventory = 1},
wield_scale = {x=1.25,y=1.25,z=1.1},
inventory_image = "rangedweapons_taurus.png",
on_use = function(itemstack, user, pointed_thing)
local pos = user:getpos()
local dir = user:get_look_dir()
local yaw = user:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:taurusshot")
if obj then
minetest.sound_play("rangedweapons_revolver", {object=obj})
obj:setvelocity({x=dir.x * 55, y=dir.y * 55, z=dir.z * 55})
obj:setacceleration({x=dir.x * math.random(-0.5,0.5), y=math.random(-0.5,0.5), z=dir.z * math.random(-0.5,0.5)})
obj:setyaw(yaw + math.pi)
minetest.add_particle({
pos = pos,
velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} ,
acceleration = {x=dir.x * -4, y=2, z=dir.z * -4},
expirationtime = 1.5,
size = 8,
collisiondetection = false,
vertical = false,
texture = "tnt_smoke.png",
glow = 5,
})
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or user
itemstack = "rangedweapons:taurus_uld"
end
end
end
return itemstack
end,
})
local rangedweapons_taurusshot = {
physical = false,
timer = 0,
visual = "sprite",
visual_size = {x=0.3, y=0.3},
textures = {"rangedweapons_invisible.png"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_taurusshot.on_step = function(self, dtime, node, pos)
self.timer = self.timer + dtime
local tiem = 0.002
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.06 then
local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1.5)
for k, obj in pairs(objs) do
if obj:get_luaentity() ~= nil then
if obj:get_luaentity().name ~= "rangedweapons:taurusshot" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 36 then
local damage = math.random(30,50)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 20},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(14,24)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 10},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 36 then
local damage = math.random(30,50)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(14,24)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
if timer >= 0.002 + tiem then
minetest.add_particle({
pos = pos,
velocity = 0,
acceleration = {x=0, y=0, z=0},
expirationtime = 0.06,
size = 3,
collisiondetection = false,
vertical = false,
texture = "rangedweapons_bullet_fly.png",
glow = 15,
})
tiem = tiem + 0.002
end
if self.timer >= 4.0 then
self.object:remove()
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") then
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
if node.name == "rangedweapons:barrel" or
node.name == "doors:door_glass_a" or
node.name == "doors:door_glass_b" or
node.name == "xpanes:pane" or
node.name == "xpanes:pane_flat" or
node.name == "vessels:drinking_glass" or
node.name == "vessels:glass_bottle" or
node.name == "default:glass" then
minetest.get_node_timer(pos):start(0)
end
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
end
end
minetest.register_entity("rangedweapons:taurusshot", rangedweapons_taurusshot )

177
tec9.lua Normal file
View File

@ -0,0 +1,177 @@
minetest.register_craft({
output = 'rangedweapons:tec9',
recipe = {
{'rangedweapons:plastic_sheet', 'rangedweapons:plastic_sheet', 'rangedweapons:plastic_sheet'},
{'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
{'default:steel_ingot', 'default:mese_crystal_fragment', 'default:steel_ingot'},
}
})
minetest.register_craftitem("rangedweapons:tec9", {
stack_max= 1,
wield_scale = {x=1.25,y=1.25,z=1.50},
description = "" ..core.colorize("#35cdff","TEC-9\n") ..core.colorize("#FFFFFF", "Ranged damage: 2-4\n") ..core.colorize("#FFFFFF", "accuracy: 75%\n") ..core.colorize("#FFFFFF", "Mob knockback: 0\n") ..core.colorize("#FFFFFF", "Critical chance: 10%\n") ..core.colorize("#FFFFFF", "Critical damage: 4-7\n") ..core.colorize("#FFFFFF", "Ammunition: 9mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.2\n") ..core.colorize("#FFFFFF", "Gun type: machine pistol\n") ..core.colorize("#FFFFFF", "Bullet velocity: 20"),
range = 0,
inventory_image = "rangedweapons_tec9.png",
})
local timer = 0
minetest.register_globalstep(function(dtime, player)
timer = timer + dtime;
if timer >= 0.2 then
for _, player in pairs(minetest.get_connected_players()) do
local inv = player:get_inventory()
local controls = player:get_player_control()
if controls.LMB then
timer = 0
local wielded_item = player:get_wielded_item():get_name()
if wielded_item == "rangedweapons:tec9" then
if not inv:contains_item("main", "rangedweapons:9mm") then
minetest.sound_play("rangedweapons_empty", {object=player})
else
if wielded_item == "rangedweapons:tec9" then
inv:remove_item("main", "rangedweapons:9mm")
local pos = player:getpos()
local dir = player:get_look_dir()
local yaw = player:get_look_yaw()
if pos and dir and yaw then
pos.y = pos.y + 1.6
local obj = minetest.add_entity(pos, "rangedweapons:tec9shot")
if obj then
minetest.sound_play("rangedweapons_machine_pistol", {object=obj})
obj:setvelocity({x=dir.x * 20, y=dir.y * 20, z=dir.z * 20})
obj:setacceleration({x=dir.x * math.random(-2.5,2.5), y=math.random(-2.5,2.5), z=dir.z * math.random(-2.5,2.5)})
obj:setyaw(yaw + math.pi)
pos.y = pos.y + 0
local obj = minetest.add_entity(pos, "rangedweapons:empty_shell")
minetest.sound_play("", {object=obj})
obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10})
obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5})
obj:setyaw(yaw + math.pi)
minetest.add_particle({
pos = pos,
velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} ,
acceleration = {x=dir.x * -4, y=2, z=dir.z * -4},
expirationtime = 0.30,
size = 4,
collisiondetection = false,
vertical = false,
texture = "tnt_smoke.png",
glow = 5,
})
local ent = obj:get_luaentity()
if ent then
ent.player = ent.player or player
end
end
end
end
end
end
end
end
end
end)
local rangedweapons_tec9shot = {
physical = false,
timer = 0,
visual = "sprite",
visual_size = {x=0.3, y=0.3},
textures = {"rangedweapons_invisible.png"},
lastpos= {},
collisionbox = {0, 0, 0, 0, 0, 0},
}
rangedweapons_tec9shot.on_step = function(self, dtime, node, pos)
self.timer = self.timer + dtime
local tiem = 0.002
local pos = self.object:getpos()
local node = minetest.get_node(pos)
if self.timer > 0.17 then
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 ~= "rangedweapons:tec9shot" and obj:get_luaentity().name ~= "__builtin:item" then
if math.random(1, 100) <= 10 then
local damage = math.random(4,7)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback=0},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(2,4)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage, knockback = 0},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
else
if math.random(1, 100) <= 10 then
local damage = math.random(4,7)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8})
self.object:remove()
else
local damage = math.random(2,4)
obj:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups= {fleshy = damage},
}, nil)
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
self.object:remove()
end
end
if timer >= 0.002 + tiem then
minetest.add_particle({
pos = pos,
velocity = 0,
acceleration = {x=0, y=0, z=0},
expirationtime = 0.06,
size = 3,
collisiondetection = false,
vertical = false,
texture = "rangedweapons_bullet_fly.png",
glow = 15,
})
tiem = tiem + 0.002
end
if self.timer >= 4.0 then
self.object:remove()
end
if self.lastpos.x ~= nil then
if minetest.registered_nodes[node.name].walkable then
if not minetest.setting_getbool("creative_mode") then
end
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
if node.name == "rangedweapons:barrel" or
node.name == "doors:door_glass_a" or
node.name == "doors:door_glass_b" or
node.name == "xpanes:pane" or
node.name == "xpanes:pane_flat" or
node.name == "vessels:drinking_glass" or
node.name == "vessels:glass_bottle" or
node.name == "default:glass" then
minetest.get_node_timer(pos):start(0)
end
self.object:remove()
end
end
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
end
end
end
minetest.register_entity("rangedweapons:tec9shot", rangedweapons_tec9shot )

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Some files were not shown because too many files have changed in this diff Show More