Reorganize weapons #5
5
armor.lua
Normal file
@ -0,0 +1,5 @@
|
||||
if minetest.global_exists("armor") and armor.attributes then
|
||||
|
||||
table.insert(armor.attributes, "bullet_res")
|
||||
table.insert(armor.attributes, "ammo_save")
|
||||
table.insert(armor.attributes, "ranged_dmg")
|
||||
end
|
58
beretta.lua
@ -1,58 +0,0 @@
|
||||
|
||||
|
||||
minetest.register_tool("rangedweapons:beretta_rld", {
|
||||
stack_max= 1,
|
||||
wield_scale = {x=1.1,y=1.1,z=1.05},
|
||||
description = "",
|
||||
range = 0,
|
||||
loaded_gun = "rangedweapons:beretta",
|
||||
groups = {not_in_creative_inventory = 1},
|
||||
inventory_image = "rangedweapons_beretta_rld.png",
|
||||
})
|
||||
minetest.register_tool("rangedweapons:beretta_r", {
|
||||
stack_max= 1,
|
||||
wield_scale = {x=1.1,y=1.1,z=1.05},
|
||||
description = "",
|
||||
rw_next_reload = "rangedweapons:beretta",
|
||||
load_sound = "rangedweapons_handgun_mag_in",
|
||||
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", "Gun damage: 4\n")..core.colorize("#FFFFFF", "Accuracy: 94%\n") ..core.colorize("#FFFFFF", "gun knockback: 4\n") ..core.colorize("#FFFFFF", "Gun crit chance: 13%\n")..core.colorize("#FFFFFF", "Critical efficiency: 2.1x\n") ..core.colorize("#FFFFFF", "Reload delay: 0.5\n")..core.colorize("#FFFFFF", "Clip size: 15\n") ..core.colorize("#FFFFFF", "Ammunition: 9x19mm Parabellum\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",
|
||||
RW_gun_capabilities = {
|
||||
gun_damage = {fleshy=4,knockback=4},
|
||||
gun_crit = 15,
|
||||
gun_critEffc = 2.1,
|
||||
suitable_ammo = {{"rangedweapons:9mm",15}},
|
||||
gun_skill = {"handgun_skill",43},
|
||||
gun_magazine = "rangedweapons:handgun_mag_black",
|
||||
gun_icon = "rangedweapons_beretta_icon.png",
|
||||
gun_unloaded = "rangedweapons:beretta_r",
|
||||
gun_cooling = "rangedweapons:beretta_rld",
|
||||
gun_velocity = 25,
|
||||
gun_accuracy = 94,
|
||||
gun_cooldown = 0.4,
|
||||
gun_reload = 0.5,
|
||||
gun_projectiles = 1,
|
||||
has_shell = 1,
|
||||
gun_durability = 1150,
|
||||
gun_smokeSize = 5,
|
||||
gun_unload_sound = "rangedweapons_handgun_mag_out",
|
||||
gun_sound = "rangedweapons_beretta",
|
||||
},
|
||||
on_secondary_use = function(itemstack, user, pointed_thing)
|
||||
rangedweapons_reload_gun(itemstack, user)
|
||||
return itemstack
|
||||
end,
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
rangedweapons_shoot_gun(itemstack, user)
|
||||
return itemstack
|
||||
end,
|
||||
})
|
||||
|
8
blocks/antigun_block.lua
Normal file
@ -0,0 +1,8 @@
|
||||
local modpath = minetest.get_modpath(minetest.get_current_modname())
|
||||
|
||||
minetest.register_node("rangedweapons:antigun_block", {
|
||||
description = core.colorize(ranged_weapons.colors.title_color, "Anti-gun block\n") .. core.colorize(ranged_weapons.colors.white, "Prevents people from using guns, in 10 node radius to each side from this block"),
|
||||
tiles = {"rangedweapons_antigun_block.png"},
|
||||
groups = {choppy = 3, oddly_breakable_by_hand = 3},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
})
|
@ -1,5 +1,3 @@
|
||||
|
||||
|
||||
minetest.register_craftitem("rangedweapons:308shot", {
|
||||
wield_scale = {x=1.0,y=1.0,z=1.0},
|
||||
inventory_image = "rangedweapons_308_shot.png",
|
||||
|
6
colors.lua
Normal file
@ -0,0 +1,6 @@
|
||||
![]() Or make a global namespace like
Or make a global namespace like `rangedweapons = {}` then add this to that...
```lua
-- In Init.lua
rangedweapons = {}
-- In this file
rangedweapons.colors = {}
local colors = rangedwepons.colors
colors.white = "#FFFFFF"
-- In any file that uses colors
ranged.weapons.colors.white
```
![]() Or make a global namespace like
Or make a global namespace like `rangedweapons = {}` then add this to that...
```lua
-- In Init.lua
rangedweapons = {}
-- In this file
rangedweapons.colors = {}
local colors = rangedwepons.colors
colors.white = "#FFFFFF"
-- In any file that uses colors
ranged.weapons.colors.white
```
|
||||
ranged_weapons.colors = {
|
||||
![]() Or make a global namespace like
Or make a global namespace like `rangedweapons = {}` then add this to that...
```lua
-- In Init.lua
rangedweapons = {}
-- In this file
rangedweapons.colors = {}
local colors = rangedwepons.colors
colors.white = "#FFFFFF"
-- In any file that uses colors
ranged.weapons.colors.white
```
|
||||
white = "#ffffff",
|
||||
![]() Or make a global namespace like
Or make a global namespace like `rangedweapons = {}` then add this to that...
```lua
-- In Init.lua
rangedweapons = {}
-- In this file
rangedweapons.colors = {}
local colors = rangedwepons.colors
colors.white = "#FFFFFF"
-- In any file that uses colors
ranged.weapons.colors.white
```
|
||||
turquoise = "35cdff"
|
||||
![]() Or make a global namespace like
Or make a global namespace like `rangedweapons = {}` then add this to that...
```lua
-- In Init.lua
rangedweapons = {}
-- In this file
rangedweapons.colors = {}
local colors = rangedwepons.colors
colors.white = "#FFFFFF"
-- In any file that uses colors
ranged.weapons.colors.white
```
|
||||
}
|
||||
![]() Or make a global namespace like
Or make a global namespace like `rangedweapons = {}` then add this to that...
```lua
-- In Init.lua
rangedweapons = {}
-- In this file
rangedweapons.colors = {}
local colors = rangedwepons.colors
colors.white = "#FFFFFF"
-- In any file that uses colors
ranged.weapons.colors.white
```
|
||||
|
||||
![]() Or make a global namespace like
Or make a global namespace like `rangedweapons = {}` then add this to that...
```lua
-- In Init.lua
rangedweapons = {}
-- In this file
rangedweapons.colors = {}
local colors = rangedwepons.colors
colors.white = "#FFFFFF"
-- In any file that uses colors
ranged.weapons.colors.white
```
|
||||
ranged_weapons.colors.title_color = ranged_weapons.colors.turquoise
|
||||
![]() Or make a global namespace like
Or make a global namespace like `rangedweapons = {}` then add this to that...
```lua
-- In Init.lua
rangedweapons = {}
-- In this file
rangedweapons.colors = {}
local colors = rangedwepons.colors
colors.white = "#FFFFFF"
-- In any file that uses colors
ranged.weapons.colors.white
```
|
@ -1,12 +1,7 @@
|
||||
minetest.register_globalstep(function(dtime, player)
|
||||
for _, player in pairs(minetest.get_connected_players()) do
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
local w_item = player:get_wielded_item()
|
||||
|
||||
local w_item = player:get_wielded_item()
|
||||
|
||||
local controls = player:get_player_control()
|
||||
if w_item:get_definition().weapon_zoom ~= nil then
|
||||
@ -33,7 +28,7 @@ player:hud_change(scope_hud, "text", "rangedweapons_empty_icon.png")
|
||||
if player:get_properties().zoom_fov ~= new_zoom_fov then
|
||||
player:set_properties({zoom_fov = new_zoom_fov})
|
||||
end
|
||||
else
|
||||
else
|
||||
new_zoom_fov = 0
|
||||
if player:get_properties().zoom_fov ~= new_zoom_fov then
|
||||
player:set_properties({zoom_fov = new_zoom_fov})
|
||||
@ -53,9 +48,9 @@ end
|
||||
local itemstack = player:get_wielded_item()
|
||||
|
||||
if controls.LMB then
|
||||
if player:get_wielded_item():get_definition().RW_gun_capabilities then
|
||||
if player:get_wielded_item():get_definition().rw_gun_data then
|
||||
if
|
||||
player:get_wielded_item():get_definition().RW_gun_capabilities.automatic_gun and player:get_wielded_item():get_definition().RW_gun_capabilities.automatic_gun > 0 then
|
||||
player:get_wielded_item():get_definition().rw_gun_data.automatic_gun and player:get_wielded_item():get_definition().rw_gun_data.automatic_gun > 0 then
|
||||
|
||||
rangedweapons_shoot_gun(itemstack, player)
|
||||
player:set_wielded_item(itemstack)
|
||||
@ -70,10 +65,6 @@ end end
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
||||
--minetest.chat_send_all(u_meta:get_float("rw_cooldown"))
|
||||
|
||||
if u_meta:get_float("rw_cooldown") <= 0 then
|
||||
if player:get_wielded_item():get_definition().loaded_gun ~= nil then
|
||||
local itemstack = player:get_wielded_item()
|
||||
@ -83,7 +74,7 @@ minetest.sound_play(itemstack:get_definition().loaded_sound, {player})
|
||||
end
|
||||
itemstack:set_name(player:get_wielded_item():get_definition().loaded_gun)
|
||||
player:set_wielded_item(itemstack)
|
||||
end
|
||||
end
|
||||
|
||||
if player:get_wielded_item():get_definition().rw_next_reload ~= nil then
|
||||
local itemstack = player:get_wielded_item()
|
||||
@ -91,7 +82,7 @@ if player:get_wielded_item():get_definition().rw_next_reload ~= nil then
|
||||
minetest.sound_play(itemstack:get_definition().load_sound, {player})
|
||||
end
|
||||
gunMeta = itemstack:get_meta()
|
||||
u_meta:set_float("rw_cooldown",gunMeta:get_float("RW_reload_delay"))
|
||||
u_meta:set_float("rw_cooldown",gunMeta:get_float("rw_reload_delay"))
|
||||
itemstack:set_name(player:get_wielded_item():get_definition().rw_next_reload)
|
||||
player:set_wielded_item(itemstack)
|
||||
end
|
||||
|
13
crafting.lua
@ -1,5 +1,3 @@
|
||||
----------------------------
|
||||
----------------------------
|
||||
if rweapons_gun_crafting == "true" then
|
||||
|
||||
minetest.register_craft({
|
||||
@ -117,15 +115,6 @@ minetest.register_craft({
|
||||
}
|
||||
})
|
||||
|
||||
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"},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "rangedweapons:jackhammer",
|
||||
recipe = {
|
||||
@ -638,4 +627,4 @@ minetest.register_craft({
|
||||
}
|
||||
})
|
||||
|
||||
end
|
||||
end
|
||||
|
84
glock17.lua
@ -1,84 +0,0 @@
|
||||
|
||||
|
||||
minetest.register_tool("rangedweapons:glock17_rld", {
|
||||
stack_max= 1,
|
||||
wield_scale = {x=1.1,y=1.1,z=1.05},
|
||||
description = "",
|
||||
loaded_gun = "rangedweapons:glock17",
|
||||
range = 0,
|
||||
groups = {not_in_creative_inventory = 1},
|
||||
inventory_image = "rangedweapons_glock17_rld.png",
|
||||
})
|
||||
|
||||
|
||||
minetest.register_tool("rangedweapons:glock17_r", {
|
||||
stack_max= 1,
|
||||
wield_scale = {x=1.2,y=1.2,z=1.2},
|
||||
description = "",
|
||||
rw_next_reload = "rangedweapons:glock17_rr",
|
||||
load_sound = "rangedweapons_handgun_mag_in",
|
||||
range = 0,
|
||||
groups = {not_in_creative_inventory = 1},
|
||||
inventory_image = "rangedweapons_glock17.png",
|
||||
})
|
||||
|
||||
minetest.register_tool("rangedweapons:glock17_rr", {
|
||||
stack_max= 1,
|
||||
wield_scale = {x=1.2,y=1.2,z=1.2},
|
||||
description = "",
|
||||
rw_next_reload = "rangedweapons:glock17_rrr",
|
||||
load_sound = "rangedweapons_reload_a",
|
||||
range = 0,
|
||||
groups = {not_in_creative_inventory = 1},
|
||||
inventory_image = "rangedweapons_glock17.png",
|
||||
})
|
||||
|
||||
minetest.register_tool("rangedweapons:glock17_rrr", {
|
||||
stack_max= 1,
|
||||
wield_scale = {x=1.2,y=1.2,z=1.2},
|
||||
description = "",
|
||||
rw_next_reload = "rangedweapons:glock17",
|
||||
load_sound = "rangedweapons_reload_b",
|
||||
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", "Gun damage: 5\n") ..core.colorize("#FFFFFF", "Accuracy: 96%\n") ..core.colorize("#FFFFFF", "Gun knockback: 4\n") ..core.colorize("#FFFFFF", "Gun Critical chance: 15%\n") ..core.colorize("#FFFFFF", "Gun Critical efficiency: 2.2x\n") ..core.colorize("#FFFFFF", "Reload delay: 0.9\n")..core.colorize("#FFFFFF", "Clip size: 17/17/17\n") ..core.colorize("#FFFFFF", "Ammunition: 9x19mm Parabellum/10mm Auto/.45acp\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",
|
||||
RW_gun_capabilities = {
|
||||
gun_damage = {fleshy=5,knockback=4},
|
||||
gun_crit = 15,
|
||||
gun_critEffc = 2.2,
|
||||
suitable_ammo = {{"rangedweapons:9mm",17},{"rangedweapons:10mm",17},{"rangedweapons:45acp",17}},
|
||||
gun_skill = {"handgun_skill",45},
|
||||
gun_magazine = "rangedweapons:handgun_mag_black",
|
||||
gun_icon = "rangedweapons_glock17_icon.png",
|
||||
gun_unloaded = "rangedweapons:glock17_r",
|
||||
gun_cooling = "rangedweapons:glock17_rld",
|
||||
gun_velocity = 30,
|
||||
gun_accuracy = 96,
|
||||
gun_cooldown = 0.35,
|
||||
gun_reload = 0.9/4,
|
||||
gun_projectiles = 1,
|
||||
has_shell = 1,
|
||||
gun_durability = 1400,
|
||||
gun_smokeSize = 5,
|
||||
gun_unload_sound = "rangedweapons_handgun_mag_out",
|
||||
gun_sound = "rangedweapons_glock",
|
||||
},
|
||||
on_secondary_use = function(itemstack, user, pointed_thing)
|
||||
rangedweapons_reload_gun(itemstack, user)
|
||||
return itemstack
|
||||
end,
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
rangedweapons_shoot_gun(itemstack, user)
|
||||
return itemstack
|
||||
end,
|
||||
})
|
@ -1,139 +0,0 @@
|
||||
|
||||
|
||||
|
||||
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)
|
||||
|
||||
|
||||
|
31
settings.lua
@ -1,4 +1,3 @@
|
||||
|
||||
rweapons_player_dmg_multiplier = 1.0
|
||||
rweapons_mob_dmg_multiplier = 1.0
|
||||
rweapons_headshot_dmg_multiplier = 1.75
|
||||
@ -8,20 +7,22 @@ rweapons_bloodyness = 10
|
||||
|
||||
rweapons_gun_crafting = "true"
|
||||
rweapons_gun_durability = "true"
|
||||
rweapons_shurikens = "true"
|
||||
rweapons_handguns = "true"
|
||||
rweapons_forceguns = "true"
|
||||
rweapons_javelins = "true"
|
||||
rweapons_power_weapons = "true"
|
||||
rweapons_machine_pistols = "true"
|
||||
rweapons_shotguns = "true"
|
||||
rweapons_auto_shotguns = "true"
|
||||
rweapons_smgs = "true"
|
||||
rweapons_rifles = "true"
|
||||
rweapons_assault_rifles = "true"
|
||||
rweapons_heavy_machineguns = "true"
|
||||
rweapons_revolvers = "true"
|
||||
rweapons_explosives = "true"
|
||||
|
||||
-- Enable/Disable types of weapons
|
||||
rweapons_allow_throwables = "true"
|
||||
rweapons_allow_handguns = "true"
|
||||
rweapons_allow_revolvers = "true"
|
||||
rweapons_allow_sub_machine_gun = "true"
|
||||
rweapons_allow_machine_pistols = "true"
|
||||
rweapons_allow_machineguns = "true"
|
||||
rweapons_allow_shotguns = "true"
|
||||
rweapons_allow_auto_shotguns = "true"
|
||||
rweapons_allow_rifles = "true"
|
||||
rweapons_allow_auto_rifles = "true"
|
||||
rweapons_allow_explosives = "true"
|
||||
rweapons_allow_power_weapons = "true"
|
||||
rweapons_allow_forceguns = "true"
|
||||
|
||||
rweapons_glass_breaking = "true"
|
||||
rweapons_door_breaking = "true"
|
||||
rweapons_other_weapon_crafting = "true"
|
||||
|
34
skills.lua
@ -44,10 +44,10 @@ minetest.register_chatcommand("gunskills", {
|
||||
for _, player in pairs(minetest.get_connected_players()) do
|
||||
local meta = player:get_meta()
|
||||
local handguns = meta:get_int("handgun_skill")
|
||||
local mps = meta:get_int("mp_skill")
|
||||
local smgs = meta:get_int("smg_skill")
|
||||
local shotguns = meta:get_int("shotgun_skill")
|
||||
local heavy = meta:get_int("heavy_skill")
|
||||
local mps = meta:get_int("mp_skill")
|
||||
local smgs = meta:get_int("smg_skill")
|
||||
local shotguns = meta:get_int("shotgun_skill")
|
||||
local heavy = meta:get_int("heavy_skill")
|
||||
local arifle = meta:get_int("arifle_skill")
|
||||
local revolver = meta:get_int("revolver_skill")
|
||||
local rifle = meta:get_int("rifle_skill")
|
||||
@ -86,65 +86,65 @@ minetest.register_globalstep(function(dtime, player)
|
||||
for _, player in pairs(minetest.get_connected_players()) do
|
||||
local meta = player:get_meta()
|
||||
local handguns = meta:get_int("handgun_skill")
|
||||
local mps = meta:get_int("mp_skill")
|
||||
local smgs = meta:get_int("smg_skill")
|
||||
local shotguns = meta:get_int("shotgun_skill")
|
||||
local heavy = meta:get_int("heavy_skill")
|
||||
local mps = meta:get_int("mp_skill")
|
||||
local smgs = meta:get_int("smg_skill")
|
||||
local shotguns = meta:get_int("shotgun_skill")
|
||||
local heavy = meta:get_int("heavy_skill")
|
||||
local arifle = meta:get_int("arifle_skill")
|
||||
local revolver = meta:get_int("revolver_skill")
|
||||
local rifle = meta:get_int("rifle_skill")
|
||||
local throw = meta:get_int("throw_skill")
|
||||
if math.random(1, 40) == 1 then
|
||||
if handguns > rweapons_min_gun_efficiency then
|
||||
meta:set_int("handgun_skill", handguns - 1)
|
||||
meta:set_int("handgun_skill", handguns - 1)
|
||||
minetest.chat_send_player(player:get_player_name(), "" ..core.colorize("#ff0000","Handgun skill degraded! "))
|
||||
end
|
||||
end
|
||||
if math.random(1, 40) == 1 then
|
||||
if mps > rweapons_min_gun_efficiency then
|
||||
meta:set_int("mp_skill", mps - 1)
|
||||
meta:set_int("mp_skill", mps - 1)
|
||||
minetest.chat_send_player(player:get_player_name(), "" ..core.colorize("#ff0000","Machine Pistol skill degraded! "))
|
||||
end
|
||||
end
|
||||
if math.random(1, 40) == 1 then
|
||||
if smgs > rweapons_min_gun_efficiency then
|
||||
meta:set_int("smg_skill", smgs - 1)
|
||||
meta:set_int("smg_skill", smgs - 1)
|
||||
minetest.chat_send_player(player:get_player_name(), "" ..core.colorize("#ff0000","S.M.G skill degraded! "))
|
||||
end
|
||||
end
|
||||
if math.random(1, 40) == 1 then
|
||||
if shotguns > rweapons_min_gun_efficiency then
|
||||
meta:set_int("shotgun_skill", shotguns - 1)
|
||||
meta:set_int("shotgun_skill", shotguns - 1)
|
||||
minetest.chat_send_player(player:get_player_name(), "" ..core.colorize("#ff0000","Shotgun skill degraded! "))
|
||||
end
|
||||
end
|
||||
if math.random(1, 40) == 1 then
|
||||
if heavy > rweapons_min_gun_efficiency then
|
||||
meta:set_int("heavy_skill", heavy - 1)
|
||||
meta:set_int("heavy_skill", heavy - 1)
|
||||
minetest.chat_send_player(player:get_player_name(), "" ..core.colorize("#ff0000","Heavy.MG skill degraded! "))
|
||||
end
|
||||
end
|
||||
if math.random(1, 40) == 1 then
|
||||
if arifle > rweapons_min_gun_efficiency then
|
||||
meta:set_int("arifle_skill", arifle - 1)
|
||||
meta:set_int("arifle_skill", arifle - 1)
|
||||
minetest.chat_send_player(player:get_player_name(), "" ..core.colorize("#ff0000","A.Rifle skill degraded! "))
|
||||
end
|
||||
end
|
||||
if math.random(1, 40) == 1 then
|
||||
if revolver > rweapons_min_gun_efficiency then
|
||||
meta:set_int("revolver_skill", revolver - 1)
|
||||
meta:set_int("revolver_skill", revolver - 1)
|
||||
minetest.chat_send_player(player:get_player_name(), "" ..core.colorize("#ff0000","Revolver/magnum skill degraded! "))
|
||||
end
|
||||
end
|
||||
if math.random(1, 40) == 1 then
|
||||
if rifle > rweapons_min_gun_efficiency then
|
||||
meta:set_int("rifle_skill", rifle - 1)
|
||||
meta:set_int("rifle_skill", rifle - 1)
|
||||
minetest.chat_send_player(player:get_player_name(), "" ..core.colorize("#ff0000","Rifle skill degraded! "))
|
||||
end
|
||||
end
|
||||
if math.random(1, 40) == 1 then
|
||||
if throw > rweapons_min_gun_efficiency then
|
||||
meta:set_int("throw_skill", throw - 1)
|
||||
meta:set_int("throw_skill", throw - 1)
|
||||
minetest.chat_send_player(player:get_player_name(), "" ..core.colorize("#ff0000","Throwing skill degraded! "))
|
||||
end
|
||||
end
|
||||
|
Before Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
124
weapon.lua
Normal file
@ -0,0 +1,124 @@
|
||||
local modpath = minetest.get_modpath(minetest.get_current_modname())
|
||||
local weapon = {}
|
||||
|
||||
weapon.weapons = {
|
||||
handgun = {'glock17', 'luger', 'makarov', 'deagle', 'beretta', 'm1991'},
|
||||
revolver = {'python', 'taurus'},
|
||||
rifle = {},
|
||||
auto_rifle = {'ak47', 'g36', 'm16', 'scar'},
|
||||
sniper_rifle = {'awp', 'm200'},
|
||||
shotgun = {'remington', 'spas12', 'benelli'},
|
||||
auto_shotgun = {'aa12', 'jackhammer'},
|
||||
machine_gun = {'rpk', 'm60', 'minigun'},
|
||||
machine_pistol = {'tmp', 'uzi', 'tec9'},
|
||||
sub_machine_gun = {'mp40', 'mp5', 'kriss_sv', 'ump', 'thompson'},
|
||||
force_weapon = {'forcegun'},
|
||||
power_weapon = {'laser_blaster', 'laser_rifle', 'laser_shotgun'},
|
||||
throwable = {'shuriken', 'javelin'},
|
||||
explosive = {'m79', 'milkor', 'rpg', 'hand_grenade'}
|
||||
}
|
||||
|
||||
weapon.weapons_directory = "weapons"
|
||||
|
||||
function weapon.get_weapon_path(modpath, weapon_type, weapon_name)
|
||||
return modpath .. "/" .. weapon.weapons_directory .. "/" .. weapon_type .. "/" .. weapon_name .. ".lua"
|
||||
end
|
||||
|
||||
|
||||
function weapon.get_texture_name(weapon_name, texture_name)
|
||||
return ranged_weapons.mod_name .. "_" .. weapon_name .. "_" .. texture_name
|
||||
end
|
||||
|
||||
function weapon.generate_description(weapon_data)
|
||||
local description = ""
|
||||
local text = {
|
||||
string.format("%s", weapon_data.name),
|
||||
string.format("Damage: %d", weapon_data.damage),
|
||||
string.format("Accuracy: %d", weapon_data.accuracy).."%",
|
||||
string.format("Velocity: %d", weapon_data.velocity),
|
||||
string.format("Knockback: %d", weapon_data.knock_back),
|
||||
string.format("Critical chance: %d", weapon_data.critical_chance).."%",
|
||||
string.format("Critical efficiency: %d", weapon_data.critical_efficiency),
|
||||
string.format("Reload delay: %.2f", weapon_data.reload_delay),
|
||||
string.format("Capacity: %d", weapon_data.capacity),
|
||||
string.format("Ammunition: %s", weapon_data.ammunition_string),
|
||||
string.format("Rate of fire: %.2f", weapon_data.fire_rate),
|
||||
}
|
||||
|
||||
for i,v in ipairs(text) do
|
||||
if i == 0 then
|
||||
color_text = core.colorize(ranged_weapons.colors.title_color, v)
|
||||
else
|
||||
color_text = core.colorize(ranged_weapons.colors.white, v)
|
||||
end
|
||||
|
||||
description = description .. color_text
|
||||
end
|
||||
|
||||
return description
|
||||
|
||||
end
|
||||
|
||||
function weapon.drop_magazine(player, gun_data)
|
||||
--TODO: This should probably be abstracted into a more general
|
||||
--function for dropping stuff on the ground and not just magazines.
|
||||
--
|
||||
local pos = player:get_pos()
|
||||
local dir = player:get_look_dir()
|
||||
local yaw = player:get_look_horizontal()
|
||||
|
||||
if pos and dir and yaw then
|
||||
pos.y = pos.y + 1.4
|
||||
|
||||
local obj = minetest.add_entity(pos, "rangedweapons:mag")
|
||||
|
||||
--TODO: Make some sense out of these magic values from the
|
||||
--original codebase:
|
||||
if obj then
|
||||
obj:set_properties({textures = {gun_data.magazine}})
|
||||
obj:set_velocity({x = dir.x * 2, y = dir.y * 2, z = dir.z * 2})
|
||||
obj:set_acceleration({x = 0, y = -5, z = 0})
|
||||
obj:set_rotation({x = 0, y = yaw + math.pi, z = 0})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function weapon.eject_shell(itemstack, player, rld_item, rld_time, rldsound, shell)
|
||||
local meta = player:get_meta()
|
||||
local gun_meta = itemstack:get_meta()
|
||||
local bulletStack = ItemStack({name = gun_meta:get_string("rw_ammo_name")})
|
||||
|
||||
local pos = player:get_pos()
|
||||
local dir = player:get_look_dir()
|
||||
local yaw = player:get_look_horizontal()
|
||||
|
||||
minetest.sound_play(rldsound, {player})
|
||||
itemstack:set_name(rld_item)
|
||||
meta:set_float("rw_cooldown", rld_time)
|
||||
|
||||
if pos and dir and yaw then
|
||||
pos.y = pos.y + 1.6
|
||||
local obj = minetest.add_entity(pos, "rangedweapons:empty_shell")
|
||||
|
||||
if AmmoCaps and bulletStack ~= "" then
|
||||
AmmoCaps = bulletStack:get_definition().RW_ammo_capabilities
|
||||
|
||||
local bullet_shell_visual = "wielditem"
|
||||
local bullet_shell_texture = "rangedweapons:shelldrop"
|
||||
|
||||
bullet_shell_visual = AmmoCaps.shell_visual or "wielditem"
|
||||
bullet_shell_texture = AmmoCaps.shell_texture or "rangedweapons:shelldrop"
|
||||
|
||||
obj:set_properties({textures = {bullet_shell_texture}})
|
||||
obj:set_properties({visual = bullet_shell_visual})
|
||||
end
|
||||
if obj then
|
||||
obj:set_velocity({x = dir.x * -10, y = dir.y * -10, z = dir.z * -10})
|
||||
obj:set_acceleration({x = dir.x * -5, y = -10, z = dir.z * -5})
|
||||
obj:set_yaw(yaw + math.pi)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return weapon
|
70
weapons/handgun/beretta.lua
Normal file
@ -0,0 +1,70 @@
|
||||
local weapon_type = "handgun"
|
||||
local weapon_name = "beretta"
|
||||
|
||||
local weapon_item_name = ranged_weapons.mod_name .. ":" .. weapon_name
|
||||
local modpath = minetest.get_modpath(minetest.get_current_modname())
|
||||
|
||||
|
||||
local weapon = dofile(modpath.."/weapon.lua")
|
||||
local handgun = dofile(modpath.."/weapons".."/handgun".."/handgun.lua")
|
||||
|
||||
local beretta_data = {
|
||||
name = "Beretta 92",
|
||||
capacity = 15,
|
||||
ammunition_string = "9mm Ammo",
|
||||
texture = {
|
||||
icon = weapon.get_texture_name(weapon_type, weapon_name, "icon.png"),
|
||||
default = weapon.get_texture_name(weapon_type, weapon_name, "texture.png"),
|
||||
reload = weapon.get_texture_name(weapon_type, weapon_name, "reload.png"),
|
||||
},
|
||||
unloaded = ranged_weapons.mod_name .. ":beretta_r",
|
||||
cooling = ranged_weapons.mod_name .. ":beretta_rld",
|
||||
fire_sound = ranged_weapons.mod_name .. "_beretta",
|
||||
}
|
||||
|
||||
beretta_data["suitable_ammo"] = {{"rangedweapons:9mm",beretta_data["capacity"]}}
|
||||
|
||||
-- Populate any unset values with handgun defaults
|
||||
for k,v in pairs(handgun) do
|
||||
if beretta_data[k] == nil then
|
||||
beretta_data[k] = v
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_tool("rangedweapons:beretta_rld", {
|
||||
stack_max=1,
|
||||
wield_scale = {x=1.1,y=1.1,z=1.05},
|
||||
description = "",
|
||||
range = 0,
|
||||
loaded_gun = weapon_item_name,
|
||||
groups = {not_in_creative_inventory = 1},
|
||||
inventory_image = beretta_data["texture"]["reload"]
|
||||
})
|
||||
|
||||
minetest.register_tool("rangedweapons:beretta_r", {
|
||||
stack_max= 1,
|
||||
wield_scale = {x=1.1,y=1.1,z=1.05},
|
||||
description = "",
|
||||
rw_next_reload = weapon_item_name,
|
||||
load_sound = handgun["load_sound"],
|
||||
range = 0,
|
||||
groups = {not_in_creative_inventory = 1},
|
||||
inventory_image = beretta_data["texture"]["reload"]
|
||||
})
|
||||
|
||||
minetest.register_tool(weapon_item_name, {
|
||||
description = weapon.generate_description(beretta_data),
|
||||
wield_scale = {x=1.1,y=1.1,z=1.05},
|
||||
range = 0,
|
||||
inventory_image = beretta_data["texture"]["default"],
|
||||
RW_gun_capabilities = beretta_data,
|
||||
on_secondary_use = function(itemstack, user, pointed_thing)
|
||||
rangedweapons_reload_gun(itemstack, user)
|
||||
return itemstack
|
||||
end,
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
rangedweapons_shoot_gun(itemstack, user)
|
||||
return itemstack
|
||||
end,
|
||||
})
|
||||
|
106
weapons/handgun/glock17.lua
Normal file
@ -0,0 +1,106 @@
|
||||
local modpath = minetest.get_modpath(minetest.get_current_modname())
|
||||
|
||||
local weapon = dofile(modpath.."/weapon.lua")
|
||||
local handgun = dofile(modpath.."/weapons".."/handgun".."/handgun.lua")
|
||||
|
||||
local weapon_type = "handgun"
|
||||
local weapon_name = "glock17"
|
||||
|
||||
local weapon_item_name = ranged_weapons.mod_name .. ":" .. weapon_name
|
||||
|
||||
-- Attributes for the weapon
|
||||
local glock_data = {
|
||||
name = "Glock 17",
|
||||
capacity = 17,
|
||||
ammunition_string = "9mm Ammo",
|
||||
texture = {
|
||||
icon = "rangedweapons_glock17_icon.png",
|
||||
default = "rangedweapons_glock17.png",
|
||||
reload = "rangedweapons_glock17_rld.png",
|
||||
},
|
||||
fire_sound = "rangedweapons_glock",
|
||||
wield_scale = {x = 1.2, y = 1.2, z =1.2}
|
||||
}
|
||||
|
||||
glock_data.suitable_ammo = {{ranged_weapons.mod_name .. ":" .. "9mm", glock_data.capacity}}
|
||||
|
||||
-- Populate any unset values with handgun defaults
|
||||
for k,v in pairs(handgun) do
|
||||
if glock_data[k] == nil then
|
||||
glock_data[k] = v
|
||||
end
|
||||
end
|
||||
|
||||
-- Define the Glock 17 item
|
||||
minetest.register_tool("rangedweapons:glock17", {
|
||||
description = weapon.generate_description(glock_data),
|
||||
wield_scale = glock_data.default_wield_scale,
|
||||
range = 0,
|
||||
inventory_image = glock_data.texture.default,
|
||||
rw_gun_data = glock_data,
|
||||
on_secondary_use = function(itemstack, user, pointed_thing)
|
||||
rangedweapons_reload_gun(itemstack, user)
|
||||
return itemstack
|
||||
end,
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
rangedweapons_shoot_gun(itemstack, user)
|
||||
return itemstack
|
||||
end,
|
||||
})
|
||||
|
||||
-- This is a trick that creates multiple in-game items for each step of the
|
||||
-- reload animation.
|
||||
minetest.register_tool("rangedweapons:glock17_rld", {
|
||||
stack_max= 1,
|
||||
wield_scale = {x=1.1,y=1.1,z=1.05},
|
||||
description = "",
|
||||
loaded_gun = weapon_item_name,
|
||||
range = 0,
|
||||
groups = {not_in_creative_inventory = 1},
|
||||
inventory_image = glock_data.texture.reload,
|
||||
})
|
||||
|
||||
minetest.register_tool("rangedweapons:glock17_r", {
|
||||
stack_max= 1,
|
||||
wield_scale = glock_data.wield_scale,
|
||||
description = "",
|
||||
rw_next_reload = "rangedweapons:glock17_rr",
|
||||
load_sound = "rangedweapons_handgun_mag_in",
|
||||
range = 0,
|
||||
groups = {not_in_creative_inventory = 1},
|
||||
inventory_image = glock_data.texture.default,
|
||||
})
|
||||
|
||||
minetest.register_tool("rangedweapons:glock17_rr", {
|
||||
stack_max= 1,
|
||||
wield_scale = glock_data.default_wield_scale,
|
||||
description = "",
|
||||
rw_next_reload = "rangedweapons:glock17_rrr",
|
||||
load_sound = "rangedweapons_reload_a",
|
||||
range = 0,
|
||||
groups = {not_in_creative_inventory = 1},
|
||||
inventory_image = glock_data.texture.default,
|
||||
})
|
||||
|
||||
minetest.register_tool("rangedweapons:glock17_rrr", {
|
||||
stack_max= 1,
|
||||
wield_scale = glock_data.default_wield_scale,
|
||||
description = "",
|
||||
rw_next_reload = "rangedweapons:glock17",
|
||||
load_sound = "rangedweapons_reload_b",
|
||||
range = 0,
|
||||
groups = {not_in_creative_inventory = 1},
|
||||
inventory_image = glock_data.texture.reload,
|
||||
})
|
||||
|
||||
|
||||
|
||||
-- Crafting recipe for the Glock 17
|
||||
minetest.register_craft({
|
||||
output = weapon_item_name,
|
||||
recipe = {
|
||||
{"rangedweapons:plastic_sheet", "rangedweapons:plastic_sheet", "rangedweapons:plastic_sheet"},
|
||||
{"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"},
|
||||
{"", "default:diamond", "rangedweapons:plastic_sheet"},
|
||||
}
|
||||
})
|
22
weapons/handgun/handgun.lua
Normal file
@ -0,0 +1,22 @@
|
||||
-- General defaults for a handgun.
|
||||
|
||||
local handgun = {
|
||||
damage = 4,
|
||||
knock_back=4,
|
||||
critical_chance = 15,
|
||||
critical_efficiency = 2,
|
||||
velocity = 25,
|
||||
skill = {"handgun_skill",43},
|
||||
magazine = "rangedweapons:handgun_mag_black",
|
||||
accuracy = 94,
|
||||
fire_rate = 0.9,
|
||||
cooldown = 0.4,
|
||||
reload_delay = 0.5,
|
||||
projectiles = 1,
|
||||
has_shell = 1,
|
||||
durability = 1150,
|
||||
smoke_size = 5,
|
||||
unload_sound = "rangedweapons_handgun_mag_out",
|
||||
}
|
||||
|
||||
return handgun
|
This is indeed the original code being smelly. Fixed 👍