Reorganize weapons #5

Merged
ranguli merged 8 commits from reorganize-weapons into main 2022-01-31 15:02:56 -08:00
62 changed files with 1200 additions and 1205 deletions

5
armor.lua Normal file
View File

@ -0,0 +1,5 @@
if minetest.global_exists("armor") and armor.attributes then
Beanzilla commented 2022-01-30 19:21:41 -08:00 (Migrated from github.com)
Review
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
-- Why do we need 3 checks just to add 3 values? (Sorry this may be the original code base leaking it's ugly head out)
```lua 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 -- Why do we need 3 checks just to add 3 values? (Sorry this may be the original code base leaking it's ugly head out) ```
ranguli commented 2022-01-31 13:56:36 -08:00 (Migrated from github.com)
Review

This is indeed the original code being smelly. Fixed 👍

This is indeed the original code being smelly. Fixed :+1:
table.insert(armor.attributes, "bullet_res")
table.insert(armor.attributes, "ammo_save")
table.insert(armor.attributes, "ranged_dmg")
end

View File

@ -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
View 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(),
})

View File

@ -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
View File

@ -0,0 +1,6 @@
Beanzilla commented 2022-01-30 19:15:44 -08:00 (Migrated from github.com)
Review

Or make a global namespace like rangedweapons = {} then add this to that...

-- 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 `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 ```
Beanzilla commented 2022-01-30 19:15:44 -08:00 (Migrated from github.com)
Review

Or make a global namespace like rangedweapons = {} then add this to that...

-- 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 `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 = {
Beanzilla commented 2022-01-30 19:15:44 -08:00 (Migrated from github.com)
Review

Or make a global namespace like rangedweapons = {} then add this to that...

-- 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 `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",
Beanzilla commented 2022-01-30 19:15:44 -08:00 (Migrated from github.com)
Review

Or make a global namespace like rangedweapons = {} then add this to that...

-- 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 `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"
Beanzilla commented 2022-01-30 19:15:44 -08:00 (Migrated from github.com)
Review

Or make a global namespace like rangedweapons = {} then add this to that...

-- 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 `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 ```
}
Beanzilla commented 2022-01-30 19:15:44 -08:00 (Migrated from github.com)
Review

Or make a global namespace like rangedweapons = {} then add this to that...

-- 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 `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 ```
Beanzilla commented 2022-01-30 19:15:44 -08:00 (Migrated from github.com)
Review

Or make a global namespace like rangedweapons = {} then add this to that...

-- 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 `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
Beanzilla commented 2022-01-30 19:15:44 -08:00 (Migrated from github.com)
Review

Or make a global namespace like rangedweapons = {} then add this to that...

-- 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 `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 ```

View File

@ -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

View File

@ -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

View File

@ -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,
})

1681
init.lua

File diff suppressed because it is too large Load Diff

View File

@ -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)

1
scratch Normal file
View File

@ -0,0 +1 @@

View File

@ -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"

View File

@ -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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

View File

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

124
weapon.lua Normal file
View 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

View 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
View 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"},
}
})

View 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