From 207c31ae3502ce580e62fde99ca3ea775f71ea67 Mon Sep 17 00:00:00 2001 From: ranguli Date: Mon, 31 Jan 2022 21:42:17 -0330 Subject: [PATCH] Refactor ak47.lua --- crafting.lua | 9 -- weapons/auto_rifle/ak47.lua | 137 ++++++++++++++++-------------- weapons/auto_rifle/auto_rifle.lua | 29 +++++++ 3 files changed, 100 insertions(+), 75 deletions(-) create mode 100644 weapons/auto_rifle/auto_rifle.lua diff --git a/crafting.lua b/crafting.lua index 1008913..56f7cff 100644 --- a/crafting.lua +++ b/crafting.lua @@ -18,15 +18,6 @@ minetest.register_craft({ } }) -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_craft({ output = "rangedweapons:awp", recipe = { diff --git a/weapons/auto_rifle/ak47.lua b/weapons/auto_rifle/ak47.lua index d7ba109..6b55695 100644 --- a/weapons/auto_rifle/ak47.lua +++ b/weapons/auto_rifle/ak47.lua @@ -1,76 +1,81 @@ +local modpath = minetest.get_modpath(minetest.get_current_modname()) +local weapon = dofile(modpath.."/weapon.lua") +local auto_rifle = dofile(modpath.."/weapons".."/auto_rifle".."/auto_rifle.lua") -minetest.register_tool("rangedweapons:ak47_r", { - stack_max= 1, - wield_scale = {x=1.75,y=1.75,z=1.3}, - description = "", - rw_next_reload = "rangedweapons:ak47_rr", - load_sound = "rangedweapons_rifle_clip_in", +local weapon_type = "auto_rifle" +local weapon_name = "ak47" + +local weapon_item_name = ranged_weapons.mod_name .. ":" .. weapon_name + +-- Attributes for the weapon +local ak_data = { + name = "AK-47", + damage = 7, + capacity = 30, + ammunition_string = "7.62x39mm Ammo", + texture = { + icon = "rangedweapons_ak47_icon.png", + default = "rangedweapons_ak47.png", + reload = "rangedweapons_ak47_rld.png", + }, + fire_sound = "rangedweapons_ak" +} + +ak_data.suitable_ammo = {{ranged_weapons.mod_name .. ":" .. "762mm", ak_data.capacity}} + +-- Populate any unset values with handgun defaults +for k,v in pairs(auto_rifle) do + if ak_data[k] == nil then + ak_data[k] = v + end +end + +-- Define the item +minetest.register_tool("rangedweapons:ak47", { + description = weapon.generate_description(ak_data), + wield_scale = ak_data.default_wield_scale, range = 0, - groups = {not_in_creative_inventory = 1}, - inventory_image = "rangedweapons_ak47_rld.png", -}) - -minetest.register_tool("rangedweapons:ak47_rr", { - stack_max= 1, - wield_scale = {x=1.75,y=1.75,z=1.3}, - description = "", - rw_next_reload = "rangedweapons:ak47_rrr", - load_sound = "rangedweapons_rifle_reload_a", - range = 0, - groups = {not_in_creative_inventory = 1}, - inventory_image = "rangedweapons_ak47.png", -}) - -minetest.register_tool("rangedweapons:ak47_rrr", { - stack_max= 1, - wield_scale = {x=1.75,y=1.75,z=1.3}, - description = "", - rw_next_reload = "rangedweapons:ak47", - load_sound = "rangedweapons_rifle_reload_b", - range = 0, - groups = {not_in_creative_inventory = 1}, - inventory_image = "rangedweapons_ak47.png", -}) - - - minetest.register_tool("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", "Gun damage: 7\n") ..core.colorize("#FFFFFF", "accuracy: 77%\n") ..core.colorize("#FFFFFF", "Gun knockback: 5\n") ..core.colorize("#FFFFFF", "Gun Critical chance: 12%\n")..core.colorize("#FFFFFF", "Critical efficiency: 2.9x\n") ..core.colorize("#FFFFFF", "Reload delay: 1.4\n") ..core.colorize("#FFFFFF", "Clip size: 30\n") ..core.colorize("#FFFFFF", "Ammunition: 7.62mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.10(full-auto)\n") ..core.colorize("#FFFFFF", "Gun type: assault rifle\n") ..core.colorize("#FFFFFF", "Block penetration: 5%\n") -..core.colorize("#FFFFFF", "Enemy penetration: 15%\n") ..core.colorize("#FFFFFF", "Bullet velocity: 40"), - range = 0, - inventory_image = "rangedweapons_ak47.png", - RW_gun_capabilities = { - automatic_gun = 1, - gun_damage = {fleshy=7,knockback=5}, - gun_crit = 12, - gun_critEffc = 2.9, - suitable_ammo = {{"rangedweapons:762mm",30}}, - gun_skill = {"arifle_skill",50}, - gun_magazine = "rangedweapons:assaultrifle_mag", - gun_icon = "rangedweapons_ak47_icon.png", - gun_unloaded = "rangedweapons:ak47_r", - gun_velocity = 40, - gun_accuracy = 77, - gun_cooldown = 0.1, - gun_reload = 1.4/4, - gun_projectiles = 1, - has_shell = 1, - gun_gravity = 0, - gun_durability = 1200, - gun_smokeSize = 5, - gun_mob_penetration = 15, - gun_node_penetration = 5, - gun_unload_sound = "rangedweapons_rifle_clip_out", - gun_sound = "rangedweapons_ak", - }, + inventory_image = ak_data.texture.default, + rw_gun_data = ak_data, on_secondary_use = function(itemstack, user, pointed_thing) rangedweapons_reload_gun(itemstack, user) return itemstack end, - - inventory_image = "rangedweapons_ak47.png", + on_use = function(itemstack, user, pointed_thing) +rangedweapons_shoot_gun(itemstack, user) +return itemstack + end, }) +-- This is a trick that animates the weapon icon in the inventory. It creates multiple in-game items for each step of the +-- reload animation, which are cycled through during the reload process. +tools = { + {name = "rangedweapons:ak47_r", next_reload = "rangedweapons:ak47_rr", load_sound = "rangedweapons_rifle_clip_in", inventory_image = "rangedweapons_ak47_rld.png"}, + {name = "rangedweapons:ak47_rr", next_reload = "rangedweapons:ak47_rrr", load_sound = "rangedweapons_rifle_reload_a", inventory_image = "rangedweapons_ak47.png"}, + {name = "rangedweapons:ak47_rrr", next_reload = "rangedweapons:ak47", load_sound = "rangedweapons_rifle_reload_b", inventory_image = "rangedweapons_ak47.png"} +} + +for i, tool in pairs() do + minetest.register_tool(tool.name, { + stack_max = 1, + wield_scale = ak_data.wield_scale, + description = "", + rw_next_reload = tool.next_reload, + load_sound = tool.load_sound, + range = 0, + groups = {not_in_creative_inventory = 1}, + inventory_image = tool.inventory_image + }) +end + +-- Crafting recipe for the AK-47 +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"}, + } +}) diff --git a/weapons/auto_rifle/auto_rifle.lua b/weapons/auto_rifle/auto_rifle.lua new file mode 100644 index 0000000..c0a9cc0 --- /dev/null +++ b/weapons/auto_rifle/auto_rifle.lua @@ -0,0 +1,29 @@ +-- General defaults for an automatic rifle. + +local auto_rifle = { + automatic_gun=true, + damage = 6, + knock_back=5, + critical_chance = 12, + critical_efficiency = 2.9, + velocity = 40, + skill = {"arifle_skill",50}, + magazine = "rangedweapons:assaultrifle_mag", + fire_rate = 0.9, + cooldown = 0.1, + reload_delay = 0.35, + projectiles = 1, + has_shell = 1, + smoke_size = 5, + unload_sound = "rangedweapons_rifle_clip_out", + accuracy = 77, + gun_projectiles = 1, + has_shell = 1, + gravity = 0, + durability = 1200, + mob_penetration = 15, + node_penetration = 5, + wield_scale = {x = 1.75, y = 1.75, z = 1.3} +} + +return auto_rifle -- 2.30.2