|
@ -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 )
|
|
@ -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 )
|
|
@ -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', '', ''},
|
||||
}
|
||||
})
|
|
@ -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 )
|
||||
|
||||
|
|
@ -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 )
|
||||
|
||||
|
|
@ -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 )
|
||||
|
||||
|
|
@ -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",
|
||||
})
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -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 )
|
||||
|
||||
|
|
@ -1,2 +1,6 @@
|
|||
default
|
||||
moreores
|
||||
tnt
|
||||
doors?
|
||||
xpanes?
|
||||
vessels?
|
||||
moreores?
|
|
@ -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
|
|
@ -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
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
|
||||
|
|
@ -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 )
|
|
@ -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(),
|
||||
})
|
||||
|
||||
|
||||
|
||||
|
|
@ -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
|
|
@ -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 )
|
||||
|
||||
|
|
@ -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)
|
||||
|
||||
|
|
@ -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 )
|
|
@ -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'},
|
||||
}
|
||||
})
|
||||
|
||||
|
|
@ -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 )
|
|
@ -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 )
|
|
@ -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 )
|
|
@ -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 )
|
|
@ -0,0 +1 @@
|
|||
cc-by-sa 3.0
|
|
@ -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 )
|
||||
|
||||
|
|
@ -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 )
|
|
@ -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 )
|
||||
|
||||
|
|
@ -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 )
|
|
@ -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,
|
||||
})
|
||||
|
||||
|
||||
|
||||
|
|
@ -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 )
|
||||
|
||||
|
|
@ -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,
|
||||
})
|
||||
|
||||
|
||||
|
||||
|
|
@ -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
|
|
@ -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 )
|
||||
|
|
@ -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 )
|
|
@ -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 )
|
|
@ -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 )
|
||||
|
||||
|
|
@ -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 )
|
||||
|
||||
|
|
@ -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,
|
||||
})
|
||||
|
||||
|
||||
|
||||
|
|
@ -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 )
|
|
@ -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 )
|
|
@ -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
|
||||
|
||||
|
|
@ -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', ''},
|
||||
}
|
||||
})
|
||||
|
||||
|
|
@ -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 )
|
||||
|
||||
|
|
@ -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 )
|
||||
|
||||
|
|
@ -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 )
|
||||
|
||||
|
|
@ -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 )
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 3.0 KiB |