From 17b77262d5618217cc455378c234ce9a52af8746 Mon Sep 17 00:00:00 2001 From: ranguli Date: Sun, 30 Jan 2022 16:26:45 -0330 Subject: [PATCH 1/8] Re-organize weapons file structure --- init.lua | 132 ++++++----------- javelin - Copy.lua | 139 ------------------ .../explosive/hand_grenade.lua | 0 m79.lua => weapons/explosive/m79.lua | 0 milkor.lua => weapons/explosive/milkor.lua | 0 rpg.lua => weapons/explosive/rpg.lua | 0 .../force_weapon/forcegun.lua | 0 beretta.lua => weapons/handgun/beretta.lua | 0 deagle.lua => weapons/handgun/deagle.lua | 0 glock17.lua => weapons/handgun/glock17.lua | 0 luger.lua => weapons/handgun/luger.lua | 0 m1991.lua => weapons/handgun/m1991.lua | 0 makarov.lua => weapons/handgun/makarov.lua | 0 python.lua => weapons/handgun/python.lua | 0 taurus.lua => weapons/handgun/taurus.lua | 0 m60.lua => weapons/machine_gun/m60.lua | 0 .../machine_gun/minigun.lua | 0 rpk.lua => weapons/machine_gun/rpk.lua | 0 .../power_weapon/laser_blaster.lua | 0 .../power_weapon/laser_rifle.lua | 0 .../power_weapon/laser_shotgun.lua | 0 ak47.lua => weapons/rifle/ak47.lua | 0 awp.lua => weapons/rifle/awp.lua | 0 g36.lua => weapons/rifle/g36.lua | 0 m16.lua => weapons/rifle/m16.lua | 0 m200.lua => weapons/rifle/m200.lua | 0 scar.lua => weapons/rifle/scar.lua | 0 svd.lua => weapons/rifle/svd.lua | 0 aa12.lua => weapons/shotgun/aa12.lua | 0 benelli.lua => weapons/shotgun/benelli.lua | 0 .../shotgun/jackhammer.lua | 0 .../shotgun/remington.lua | 0 spas12.lua => weapons/shotgun/spas12.lua | 0 .../sub_machine_gun/kriss_sv.lua | 0 mp40.lua => weapons/sub_machine_gun/mp40.lua | 0 mp5.lua => weapons/sub_machine_gun/mp5.lua | 0 tec9.lua => weapons/sub_machine_gun/tec9.lua | 0 .../sub_machine_gun/thompson.lua | 0 tmp.lua => weapons/sub_machine_gun/tmp.lua | 0 ump.lua => weapons/sub_machine_gun/ump.lua | 0 uzi.lua => weapons/sub_machine_gun/uzi.lua | 0 javelin.lua => weapons/throwable/javelin.lua | 0 .../throwable/shuriken.lua | 0 43 files changed, 42 insertions(+), 229 deletions(-) delete mode 100644 javelin - Copy.lua rename hand_grenade.lua => weapons/explosive/hand_grenade.lua (100%) rename m79.lua => weapons/explosive/m79.lua (100%) rename milkor.lua => weapons/explosive/milkor.lua (100%) rename rpg.lua => weapons/explosive/rpg.lua (100%) rename forcegun.lua => weapons/force_weapon/forcegun.lua (100%) rename beretta.lua => weapons/handgun/beretta.lua (100%) rename deagle.lua => weapons/handgun/deagle.lua (100%) rename glock17.lua => weapons/handgun/glock17.lua (100%) rename luger.lua => weapons/handgun/luger.lua (100%) rename m1991.lua => weapons/handgun/m1991.lua (100%) rename makarov.lua => weapons/handgun/makarov.lua (100%) rename python.lua => weapons/handgun/python.lua (100%) rename taurus.lua => weapons/handgun/taurus.lua (100%) rename m60.lua => weapons/machine_gun/m60.lua (100%) rename minigun.lua => weapons/machine_gun/minigun.lua (100%) rename rpk.lua => weapons/machine_gun/rpk.lua (100%) rename laser_blaster.lua => weapons/power_weapon/laser_blaster.lua (100%) rename laser_rifle.lua => weapons/power_weapon/laser_rifle.lua (100%) rename laser_shotgun.lua => weapons/power_weapon/laser_shotgun.lua (100%) rename ak47.lua => weapons/rifle/ak47.lua (100%) rename awp.lua => weapons/rifle/awp.lua (100%) rename g36.lua => weapons/rifle/g36.lua (100%) rename m16.lua => weapons/rifle/m16.lua (100%) rename m200.lua => weapons/rifle/m200.lua (100%) rename scar.lua => weapons/rifle/scar.lua (100%) rename svd.lua => weapons/rifle/svd.lua (100%) rename aa12.lua => weapons/shotgun/aa12.lua (100%) rename benelli.lua => weapons/shotgun/benelli.lua (100%) rename jackhammer.lua => weapons/shotgun/jackhammer.lua (100%) rename remington.lua => weapons/shotgun/remington.lua (100%) rename spas12.lua => weapons/shotgun/spas12.lua (100%) rename kriss_sv.lua => weapons/sub_machine_gun/kriss_sv.lua (100%) rename mp40.lua => weapons/sub_machine_gun/mp40.lua (100%) rename mp5.lua => weapons/sub_machine_gun/mp5.lua (100%) rename tec9.lua => weapons/sub_machine_gun/tec9.lua (100%) rename thompson.lua => weapons/sub_machine_gun/thompson.lua (100%) rename tmp.lua => weapons/sub_machine_gun/tmp.lua (100%) rename ump.lua => weapons/sub_machine_gun/ump.lua (100%) rename uzi.lua => weapons/sub_machine_gun/uzi.lua (100%) rename javelin.lua => weapons/throwable/javelin.lua (100%) rename shurikens.lua => weapons/throwable/shuriken.lua (100%) diff --git a/init.lua b/init.lua index d8064ce..6ec121b 100644 --- a/init.lua +++ b/init.lua @@ -26,7 +26,7 @@ make_sparks = function(pos) minetest.sound_play("rengedweapons_ricochet", {pos, gain = 0.75}) for i=1,9 do minetest.add_particle({ - pos = pos, + pos = pos, velocity = {x=math.random(-6.0,6.0), y=math.random(-10.0,15.0), z=math.random(-6.0,6.0)}, acceleration = {x=math.random(-9.0,9.0), y=math.random(-15.0,-3.0), z=math.random(-9.0,9.0)}, expirationtime = 1.0, @@ -140,7 +140,7 @@ player:hud_change(gunammo, "text", gunMeta:get_int("RW_bullets")) if GunCaps.gun_magazine ~= nil then local pos = player:get_pos() local dir = player:get_look_dir() - local yaw = player:get_look_yaw() + 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") @@ -233,7 +233,7 @@ inv:add_item("main",ammoName.." "..ammoCount) gunMeta:set_int("RW_bullets",0) end -if inv:contains_item("main",reload_ammo:get_name()) and +if inv:contains_item("main",reload_ammo:get_name()) and gunMeta:get_int("RW_bullets") < clipSize then inv:remove_item("main",reload_ammo:get_name()) gunMeta:set_int("RW_bullets",gunMeta:get_int("RW_bullets")+1) @@ -368,7 +368,7 @@ end local gunMeta = itemstack:get_meta() local playerMeta = player:get_meta() -if gunMeta:get_int("RW_bullets") > 0 and +if gunMeta:get_int("RW_bullets") > 0 and playerMeta:get_float("rw_cooldown") <= 0 then playerMeta:set_float("rw_cooldown", gun_cooldown) @@ -561,7 +561,7 @@ end local inv = player:get_inventory() local playerMeta = player:get_meta() -if inv:contains_item("main", "rangedweapons:power_particle "..PowerCaps.power_consumption) and +if inv:contains_item("main", "rangedweapons:power_particle "..PowerCaps.power_consumption) and playerMeta:get_float("rw_cooldown") <= 0 then playerMeta:set_float("rw_cooldown", power_cooldown) @@ -657,7 +657,7 @@ rangedweapons_launch_projectile = function(player,projNum,projDmg,projEnt,visual ---------------------------------- local pos = player:get_pos() local dir = player:get_look_dir() - local yaw = player:get_look_yaw() + local yaw = player:get_look_horizontal() local svertical = player:get_look_vertical() if pos and dir and yaw then @@ -666,13 +666,13 @@ rangedweapons_launch_projectile = function(player,projNum,projDmg,projEnt,visual if has_shell > 0 then local shl = minetest.add_entity(pos, shellEnt) -shl:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) -shl:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) +shl:set_velocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) +shl:set_acceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) shl:set_rotation({x=0,y=yaw + math.pi,z=-svertical}) shl:set_properties({ textures = {shellTexture}, visual = shellVisual,}) - end + end if smokeSize > 0 then minetest.add_particle({ pos = pos, @@ -742,7 +742,7 @@ local bulletStack = ItemStack({name = gunMeta:get_string("RW_ammo_name")}) minetest.sound_play(rldsound, {player}) local pos = player:get_pos() local dir = player:get_look_dir() - local yaw = player:get_look_yaw() + local yaw = player:get_look_horizontal() if pos and dir and yaw then pos.y = pos.y + 1.6 local obj = minetest.add_entity(pos, "rangedweapons:empty_shell") @@ -766,7 +766,34 @@ obj:set_acceleration({x=dir.x*-5, y=-10, z=dir.z*-5}) obj:set_yaw(yaw + math.pi) end end end --------------------------------------------------- +-- +function get_weapon_path(modpath, weapons_directory, weapon_type, weapon_name) + return modpath .. "/" .. weapons_directory .. "/" .. weapon_type .. "/" .. weapon_name .. ".lua" +end + + +local weapons = { + handgun = {'glock17', 'luger', 'makarov', 'python', 'deagle', 'taurus', 'beretta', 'm1991'}, + rifle = {'ak47', 'g36', 'm16', 'scar', 'awp', 'm200'}, + shotgun = {'aa12', 'remington', 'spas12', 'benelli', 'jackhammer'}, + machine_gun = {'rpk', 'm60', 'minigun'}, + sub_machine_gun = {'mp40', 'mp5', 'uzi', 'kriss_sv', 'ump', 'tec9', 'thompson', 'tmp'}, + force_weapon = {'forcegun'}, + power_weapon = {'laser_blaster', 'laser_rifle', 'laser_shotgun'}, + throwable = {'shuriken', 'javelin'}, + explosive = {'m79', 'milkor', 'rpg', 'hand_grenade'} +} + +local weapons_directory = "weapons" + +for k, v in pairs(weapons) do + weapon_type = k + + for i, weapon in ipairs(v) do + dofile(get_weapon_path(modpath, weapons_directory, weapon_type, weapon)) + end +end dofile(modpath.."/settings.lua") @@ -777,85 +804,10 @@ dofile(modpath.."/bullet_knockback.lua") dofile(modpath.."/ammo.lua") dofile(modpath.."/crafting.lua") -if rweapons_shurikens == "true" then - dofile(modpath.."/shurikens.lua") -end - -if rweapons_handguns == "true" then - dofile(modpath.."/makarov.lua") - dofile(modpath.."/luger.lua") - dofile(modpath.."/beretta.lua") - dofile(modpath.."/m1991.lua") - dofile(modpath.."/glock17.lua") - dofile(modpath.."/deagle.lua") -end - -if rweapons_forceguns == "true" then - dofile(modpath.."/forcegun.lua") -end - -if rweapons_javelins == "true" then - dofile(modpath.."/javelin.lua") -end - -if rweapons_power_weapons == "true" then - dofile(modpath.."/generator.lua") - dofile(modpath.."/laser_blaster.lua") - dofile(modpath.."/laser_rifle.lua") - dofile(modpath.."/laser_shotgun.lua") -end - -if rweapons_machine_pistols == "true" then - dofile(modpath.."/tmp.lua") - dofile(modpath.."/tec9.lua") - dofile(modpath.."/uzi.lua") - dofile(modpath.."/kriss_sv.lua") -end -if rweapons_shotguns == "true" then - dofile(modpath.."/remington.lua") - dofile(modpath.."/spas12.lua") - dofile(modpath.."/benelli.lua") -end -if rweapons_auto_shotguns == "true" then - dofile(modpath.."/jackhammer.lua") - dofile(modpath.."/aa12.lua") -end -if rweapons_smgs == "true" then - dofile(modpath.."/mp5.lua") - dofile(modpath.."/ump.lua") - dofile(modpath.."/mp40.lua") - dofile(modpath.."/thompson.lua") -end -if rweapons_rifles == "true" then - dofile(modpath.."/awp.lua") - dofile(modpath.."/svd.lua") - dofile(modpath.."/m200.lua") -end -if rweapons_heavy_machineguns == "true" then - dofile(modpath.."/m60.lua") - dofile(modpath.."/rpk.lua") - dofile(modpath.."/minigun.lua") -end -if rweapons_revolvers == "true" then - dofile(modpath.."/python.lua") - dofile(modpath.."/taurus.lua") -end -if rweapons_assault_rifles == "true" then - dofile(modpath.."/m16.lua") - dofile(modpath.."/g36.lua") - dofile(modpath.."/ak47.lua") - dofile(modpath.."/scar.lua") -end - if rweapons_explosives == "true" then dofile(modpath.."/explosives.lua") - dofile(modpath.."/m79.lua") - dofile(modpath.."/milkor.lua") - dofile(modpath.."/rpg.lua") - dofile(modpath.."/hand_grenade.lua") end - if rweapons_glass_breaking == "true" then dofile(modpath.."/glass_breaking.lua") end @@ -922,7 +874,7 @@ minetest.register_abm({ }) minetest.register_on_joinplayer(function(player) - gunammo = + gunammo = player:hud_add({ hud_elem_type = "text", name = "gunammo", @@ -933,7 +885,7 @@ minetest.register_on_joinplayer(function(player) offset = {x = 30, y = 100}, alignment = {x = 0, y = -1} }) - gunimg = + gunimg = player:hud_add({ hud_elem_type = "image", text = "rangedweapons_empty_icon.png", @@ -942,7 +894,7 @@ minetest.register_on_joinplayer(function(player) offset = {x = 30, y = 100}, alignment = {x = 0, y = -1} }) - ammoimg = + ammoimg = player:hud_add({ hud_elem_type = "image", text = "rangedweapons_empty_icon.png", @@ -951,7 +903,7 @@ minetest.register_on_joinplayer(function(player) offset = {x = 30, y = 100}, alignment = {x = 0, y = -1} }) - hit = + hit = player:hud_add({ hud_elem_type = "image", text = "rangedweapons_empty_icon.png", @@ -960,7 +912,7 @@ minetest.register_on_joinplayer(function(player) offset = {x = 0, y = 0}, alignment = {x = 0, y = 0} }) -scope_hud = +scope_hud = player:hud_add({ hud_elem_type = "image", position = { x=0.5, y=0.5 }, diff --git a/javelin - Copy.lua b/javelin - Copy.lua deleted file mode 100644 index 4168f19..0000000 --- a/javelin - Copy.lua +++ /dev/null @@ -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) - - - diff --git a/hand_grenade.lua b/weapons/explosive/hand_grenade.lua similarity index 100% rename from hand_grenade.lua rename to weapons/explosive/hand_grenade.lua diff --git a/m79.lua b/weapons/explosive/m79.lua similarity index 100% rename from m79.lua rename to weapons/explosive/m79.lua diff --git a/milkor.lua b/weapons/explosive/milkor.lua similarity index 100% rename from milkor.lua rename to weapons/explosive/milkor.lua diff --git a/rpg.lua b/weapons/explosive/rpg.lua similarity index 100% rename from rpg.lua rename to weapons/explosive/rpg.lua diff --git a/forcegun.lua b/weapons/force_weapon/forcegun.lua similarity index 100% rename from forcegun.lua rename to weapons/force_weapon/forcegun.lua diff --git a/beretta.lua b/weapons/handgun/beretta.lua similarity index 100% rename from beretta.lua rename to weapons/handgun/beretta.lua diff --git a/deagle.lua b/weapons/handgun/deagle.lua similarity index 100% rename from deagle.lua rename to weapons/handgun/deagle.lua diff --git a/glock17.lua b/weapons/handgun/glock17.lua similarity index 100% rename from glock17.lua rename to weapons/handgun/glock17.lua diff --git a/luger.lua b/weapons/handgun/luger.lua similarity index 100% rename from luger.lua rename to weapons/handgun/luger.lua diff --git a/m1991.lua b/weapons/handgun/m1991.lua similarity index 100% rename from m1991.lua rename to weapons/handgun/m1991.lua diff --git a/makarov.lua b/weapons/handgun/makarov.lua similarity index 100% rename from makarov.lua rename to weapons/handgun/makarov.lua diff --git a/python.lua b/weapons/handgun/python.lua similarity index 100% rename from python.lua rename to weapons/handgun/python.lua diff --git a/taurus.lua b/weapons/handgun/taurus.lua similarity index 100% rename from taurus.lua rename to weapons/handgun/taurus.lua diff --git a/m60.lua b/weapons/machine_gun/m60.lua similarity index 100% rename from m60.lua rename to weapons/machine_gun/m60.lua diff --git a/minigun.lua b/weapons/machine_gun/minigun.lua similarity index 100% rename from minigun.lua rename to weapons/machine_gun/minigun.lua diff --git a/rpk.lua b/weapons/machine_gun/rpk.lua similarity index 100% rename from rpk.lua rename to weapons/machine_gun/rpk.lua diff --git a/laser_blaster.lua b/weapons/power_weapon/laser_blaster.lua similarity index 100% rename from laser_blaster.lua rename to weapons/power_weapon/laser_blaster.lua diff --git a/laser_rifle.lua b/weapons/power_weapon/laser_rifle.lua similarity index 100% rename from laser_rifle.lua rename to weapons/power_weapon/laser_rifle.lua diff --git a/laser_shotgun.lua b/weapons/power_weapon/laser_shotgun.lua similarity index 100% rename from laser_shotgun.lua rename to weapons/power_weapon/laser_shotgun.lua diff --git a/ak47.lua b/weapons/rifle/ak47.lua similarity index 100% rename from ak47.lua rename to weapons/rifle/ak47.lua diff --git a/awp.lua b/weapons/rifle/awp.lua similarity index 100% rename from awp.lua rename to weapons/rifle/awp.lua diff --git a/g36.lua b/weapons/rifle/g36.lua similarity index 100% rename from g36.lua rename to weapons/rifle/g36.lua diff --git a/m16.lua b/weapons/rifle/m16.lua similarity index 100% rename from m16.lua rename to weapons/rifle/m16.lua diff --git a/m200.lua b/weapons/rifle/m200.lua similarity index 100% rename from m200.lua rename to weapons/rifle/m200.lua diff --git a/scar.lua b/weapons/rifle/scar.lua similarity index 100% rename from scar.lua rename to weapons/rifle/scar.lua diff --git a/svd.lua b/weapons/rifle/svd.lua similarity index 100% rename from svd.lua rename to weapons/rifle/svd.lua diff --git a/aa12.lua b/weapons/shotgun/aa12.lua similarity index 100% rename from aa12.lua rename to weapons/shotgun/aa12.lua diff --git a/benelli.lua b/weapons/shotgun/benelli.lua similarity index 100% rename from benelli.lua rename to weapons/shotgun/benelli.lua diff --git a/jackhammer.lua b/weapons/shotgun/jackhammer.lua similarity index 100% rename from jackhammer.lua rename to weapons/shotgun/jackhammer.lua diff --git a/remington.lua b/weapons/shotgun/remington.lua similarity index 100% rename from remington.lua rename to weapons/shotgun/remington.lua diff --git a/spas12.lua b/weapons/shotgun/spas12.lua similarity index 100% rename from spas12.lua rename to weapons/shotgun/spas12.lua diff --git a/kriss_sv.lua b/weapons/sub_machine_gun/kriss_sv.lua similarity index 100% rename from kriss_sv.lua rename to weapons/sub_machine_gun/kriss_sv.lua diff --git a/mp40.lua b/weapons/sub_machine_gun/mp40.lua similarity index 100% rename from mp40.lua rename to weapons/sub_machine_gun/mp40.lua diff --git a/mp5.lua b/weapons/sub_machine_gun/mp5.lua similarity index 100% rename from mp5.lua rename to weapons/sub_machine_gun/mp5.lua diff --git a/tec9.lua b/weapons/sub_machine_gun/tec9.lua similarity index 100% rename from tec9.lua rename to weapons/sub_machine_gun/tec9.lua diff --git a/thompson.lua b/weapons/sub_machine_gun/thompson.lua similarity index 100% rename from thompson.lua rename to weapons/sub_machine_gun/thompson.lua diff --git a/tmp.lua b/weapons/sub_machine_gun/tmp.lua similarity index 100% rename from tmp.lua rename to weapons/sub_machine_gun/tmp.lua diff --git a/ump.lua b/weapons/sub_machine_gun/ump.lua similarity index 100% rename from ump.lua rename to weapons/sub_machine_gun/ump.lua diff --git a/uzi.lua b/weapons/sub_machine_gun/uzi.lua similarity index 100% rename from uzi.lua rename to weapons/sub_machine_gun/uzi.lua diff --git a/javelin.lua b/weapons/throwable/javelin.lua similarity index 100% rename from javelin.lua rename to weapons/throwable/javelin.lua diff --git a/shurikens.lua b/weapons/throwable/shuriken.lua similarity index 100% rename from shurikens.lua rename to weapons/throwable/shuriken.lua -- 2.30.2 From 1aeadf965db3b71cfe39adabada099f1ac11c4fc Mon Sep 17 00:00:00 2001 From: ranguli Date: Sun, 30 Jan 2022 20:44:18 -0330 Subject: [PATCH 2/8] Yak shaving --- armor.lua | 9 + blocks/antigun_block.lua | 6 + bullet_stuff.lua | 2 - colors.lua | 6 + constants.lua | 5 + init.lua | 1914 +++++++++-------- item.lua | 6 + scratch | 1 + settings.lua | 31 +- textures/rangedweapons_bereta.png | Bin 2925 -> 0 bytes .../rangedweapons_handgun_beretta_icon.png} | Bin .../rangedweapons_handgun_beretta_reload.png} | Bin ...rangedweapons_handgun_beretta_texture.png} | Bin weapon.lua | 66 + weapons/{rifle => auto_rifle}/ak47.lua | 0 weapons/{rifle => auto_rifle}/g36.lua | 0 weapons/{rifle => auto_rifle}/m16.lua | 0 weapons/{rifle => auto_rifle}/scar.lua | 0 weapons/{shotgun => auto_shotgun}/aa12.lua | 0 .../{shotgun => auto_shotgun}/jackhammer.lua | 0 weapons/handgun/beretta.lua | 72 +- weapons/handgun/handgun.lua | 22 + .../tec9.lua | 0 .../tmp.lua | 0 .../uzi.lua | 0 weapons/{handgun => revolver}/python.lua | 0 weapons/{handgun => revolver}/taurus.lua | 0 weapons/{rifle => sniper_rifle}/awp.lua | 0 weapons/{rifle => sniper_rifle}/m200.lua | 0 weapons/{rifle => sniper_rifle}/svd.lua | 0 30 files changed, 1194 insertions(+), 946 deletions(-) create mode 100644 armor.lua create mode 100644 blocks/antigun_block.lua create mode 100644 colors.lua create mode 100644 constants.lua create mode 100644 item.lua create mode 100644 scratch delete mode 100644 textures/rangedweapons_bereta.png rename textures/{rangedweapons_beretta_icon.png => weapons/handgun/beretta/rangedweapons_handgun_beretta_icon.png} (100%) rename textures/{rangedweapons_beretta_rld.png => weapons/handgun/beretta/rangedweapons_handgun_beretta_reload.png} (100%) rename textures/{rangedweapons_beretta.png => weapons/handgun/beretta/rangedweapons_handgun_beretta_texture.png} (100%) create mode 100644 weapon.lua rename weapons/{rifle => auto_rifle}/ak47.lua (100%) rename weapons/{rifle => auto_rifle}/g36.lua (100%) rename weapons/{rifle => auto_rifle}/m16.lua (100%) rename weapons/{rifle => auto_rifle}/scar.lua (100%) rename weapons/{shotgun => auto_shotgun}/aa12.lua (100%) rename weapons/{shotgun => auto_shotgun}/jackhammer.lua (100%) create mode 100644 weapons/handgun/handgun.lua rename weapons/{sub_machine_gun => machine_pistol}/tec9.lua (100%) rename weapons/{sub_machine_gun => machine_pistol}/tmp.lua (100%) rename weapons/{sub_machine_gun => machine_pistol}/uzi.lua (100%) rename weapons/{handgun => revolver}/python.lua (100%) rename weapons/{handgun => revolver}/taurus.lua (100%) rename weapons/{rifle => sniper_rifle}/awp.lua (100%) rename weapons/{rifle => sniper_rifle}/m200.lua (100%) rename weapons/{rifle => sniper_rifle}/svd.lua (100%) diff --git a/armor.lua b/armor.lua new file mode 100644 index 0000000..6b77967 --- /dev/null +++ b/armor.lua @@ -0,0 +1,9 @@ +if minetest.global_exists("armor") and armor.attributes then + table.insert(armor.attributes, "bullet_res") +end +if minetest.global_exists("armor") and armor.attributes then + table.insert(armor.attributes, "ammo_save") +end +if minetest.global_exists("armor") and armor.attributes then + table.insert(armor.attributes, "ranged_dmg") +end diff --git a/blocks/antigun_block.lua b/blocks/antigun_block.lua new file mode 100644 index 0000000..55b5746 --- /dev/null +++ b/blocks/antigun_block.lua @@ -0,0 +1,6 @@ +minetest.register_node("rangedweapons:antigun_block", { + description = "" ..core.colorize("#35cdff","Anti-gun block\n")..core.colorize("#FFFFFF", "Prevents people from using guns, in 10 node radius to each side from this block"), + tiles = {"textures/blocks/antigun_block.png"}, + groups = {choppy = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_wood_defaults(), +}) diff --git a/bullet_stuff.lua b/bullet_stuff.lua index cc338e5..e2b6d79 100644 --- a/bullet_stuff.lua +++ b/bullet_stuff.lua @@ -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", diff --git a/colors.lua b/colors.lua new file mode 100644 index 0000000..b8495af --- /dev/null +++ b/colors.lua @@ -0,0 +1,6 @@ +local color = {} + +color.white = "#FFFFFF" + + +return color diff --git a/constants.lua b/constants.lua new file mode 100644 index 0000000..4d48859 --- /dev/null +++ b/constants.lua @@ -0,0 +1,5 @@ +local constants = {} + +constants.mod_name = "rangedweapons" + +return constants diff --git a/init.lua b/init.lua index 6ec121b..1f103ca 100644 --- a/init.lua +++ b/init.lua @@ -1,934 +1,1042 @@ - - local modpath = minetest.get_modpath(minetest.get_current_modname()) -if minetest.global_exists("armor") and armor.attributes then - table.insert(armor.attributes, "bullet_res") -end -if minetest.global_exists("armor") and armor.attributes then - table.insert(armor.attributes, "ammo_save") -end -if minetest.global_exists("armor") and armor.attributes then - table.insert(armor.attributes, "ranged_dmg") +local weapon = dofile(modpath .. "/weapon.lua") + +dofile(modpath .. "/settings.lua") +dofile(modpath .. "/cooldown_stuff.lua") +dofile(modpath .. "/skills.lua") +dofile(modpath .. "/misc.lua") +dofile(modpath .. "/bullet_knockback.lua") +dofile(modpath .. "/ammo.lua") +dofile(modpath .. "/crafting.lua") +dofile(modpath .. "/armor.lua") + +dofile(modpath .. "/blocks/antigun_block.lua") + +-- Load all weapons +for k, v in pairs(weapon.weapons) do + weapon_type = k + + for i, weapon_data in ipairs(v) do + dofile(weapon.get_weapon_path(modpath, weapon_type, weapon_data)) + end end -minetest.register_node("rangedweapons:antigun_block", { - description = "" ..core.colorize("#35cdff","Anti-gun block\n")..core.colorize("#FFFFFF", "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(), -}) ---- ---- gun_funcs ---- make_sparks = function(pos) -minetest.sound_play("rengedweapons_ricochet", {pos, gain = 0.75}) - for i=1,9 do - minetest.add_particle({ - pos = pos, - velocity = {x=math.random(-6.0,6.0), y=math.random(-10.0,15.0), z=math.random(-6.0,6.0)}, - acceleration = {x=math.random(-9.0,9.0), y=math.random(-15.0,-3.0), z=math.random(-9.0,9.0)}, - expirationtime = 1.0, - size = math.random(1,2), - collisiondetection = true, - vertical = false, - texture = "rangedweapons_spark.png", - glow = 25, - }) -end -end - - -rangedweapons_gain_skill = function(player,skill,chance) - -if math.random(1, chance) == 1 then - local p_meta = player:get_meta() -local skill_num = p_meta:get_int(skill) -if skill_num < rweapons_max_gun_efficiency then -p_meta:set_int(skill, skill_num + 1) - minetest.chat_send_player(player:get_player_name(), "" ..core.colorize("#25c200","You've improved your skill with this type of gun!")) -end -end - -end - - -rangedweapons_reload_gun = function(itemstack, player) - -GunCaps = itemstack:get_definition().RW_gun_capabilities - -if GunCaps ~= nil then -gun_unload_sound = GunCaps.gun_unload_sound or "" -end - -minetest.sound_play(gun_unload_sound, {player}) - - -local gun_reload = 0.25 - -if GunCaps ~= nil then -gun_reload = GunCaps.gun_reload or 0.25 -end - -local playerMeta = player:get_meta() -local gunMeta = itemstack:get_meta() - -gunMeta:set_float("RW_reload_delay",gun_reload) - -playerMeta:set_float("rw_cooldown",gun_reload) - -local player_has_ammo = 0 -local clipSize = 0 -local reload_ammo = "" - -if GunCaps.suitable_ammo ~= nil then -local inv = player:get_inventory() -for i = 1,inv:get_size("main") do - -for _, ammo in pairs(GunCaps.suitable_ammo) do -if inv:get_stack("main",i):get_name() == ammo[1] then -reload_ammo = inv:get_stack("main",i) -clipSize = ammo[2] - -player_has_ammo = 1 -break -end end - -if player_has_ammo == 1 then -break -end - -end end - -if player_has_ammo == 1 then -local gun_icon = "rangedweapons_emergency_gun_icon.png" - -if GunCaps.gun_icon ~= nil then -gun_icon = GunCaps.gun_icon -end - -local ammo_icon = "rangedweapons_emergency_ammo_icon.png" - -if reload_ammo:get_definition().inventory_image ~= nil then -ammo_icon = reload_ammo:get_definition().inventory_image -end - - player:hud_change(gunimg, "text", gun_icon) - player:hud_change(ammoimg, "text", ammo_icon) - -local gunMeta = itemstack:get_meta() -local ammoCount = gunMeta:get_int("RW_bullets") -local ammoName = gunMeta:get_string("RW_ammo_name") -local inv = player:get_inventory() - -inv:add_item("main",ammoName.." "..ammoCount) - - -if inv:contains_item("main",reload_ammo:get_name().." "..clipSize) then -inv:remove_item("main",reload_ammo:get_name().." "..clipSize) -gunMeta:set_int("RW_bullets",clipSize) -else -gunMeta:set_int("RW_bullets",reload_ammo:get_count()) -inv:remove_item("main",reload_ammo:get_name().." "..reload_ammo:get_count()) -end - -gunMeta:set_string("RW_ammo_name",reload_ammo:get_name()) - -player:hud_change(gunammo, "text", gunMeta:get_int("RW_bullets")) - -if GunCaps.gun_magazine ~= nil then - 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") - if obj then -obj:set_properties({textures = {GunCaps.gun_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 - -if GunCaps.gun_unloaded ~= nil then -itemstack:set_name(GunCaps.gun_unloaded) -end - - -end -end - - - -rangedweapons_single_load_gun = function(itemstack, player) - -GunCaps = itemstack:get_definition().RW_gun_capabilities - -if GunCaps ~= nil then -gun_unload_sound = GunCaps.gun_unload_sound or "" -end - -minetest.sound_play(gun_unload_sound, {player}) - -local gun_reload = 0.25 - -if GunCaps ~= nil then -gun_reload = GunCaps.gun_reload or 0.25 -end - -local playerMeta = player:get_meta() -local gunMeta = itemstack:get_meta() - -gunMeta:set_float("RW_reload_delay",gun_reload) - -playerMeta:set_float("rw_cooldown",gun_reload) - -local player_has_ammo = 0 -local clipSize = 0 -local reload_ammo = "" - -if GunCaps.suitable_ammo ~= nil then -local inv = player:get_inventory() -for i = 1,inv:get_size("main") do - -for _, ammo in pairs(GunCaps.suitable_ammo) do -if inv:get_stack("main",i):get_name() == ammo[1] then -reload_ammo = inv:get_stack("main",i) -clipSize = ammo[2] - -player_has_ammo = 1 -break -end end - -if player_has_ammo == 1 then -break -end - -end end - -if player_has_ammo == 1 then -local gun_icon = "rangedweapons_emergency_gun_icon.png" - -if GunCaps.gun_icon ~= nil then -gun_icon = GunCaps.gun_icon -end - -local ammo_icon = "rangedweapons_emergency_ammo_icon.png" - -if reload_ammo:get_definition().inventory_image ~= nil then -ammo_icon = reload_ammo:get_definition().inventory_image -end - - player:hud_change(gunimg, "text", gun_icon) - player:hud_change(ammoimg, "text", ammo_icon) - -local gunMeta = itemstack:get_meta() -local ammoCount = gunMeta:get_int("RW_bullets") -local ammoName = gunMeta:get_string("RW_ammo_name") -local inv = player:get_inventory() - -if ammoName ~= reload_ammo:get_name() then -inv:add_item("main",ammoName.." "..ammoCount) -gunMeta:set_int("RW_bullets",0) -end - -if inv:contains_item("main",reload_ammo:get_name()) and -gunMeta:get_int("RW_bullets") < clipSize then -inv:remove_item("main",reload_ammo:get_name()) -gunMeta:set_int("RW_bullets",gunMeta:get_int("RW_bullets")+1) -end - -gunMeta:set_string("RW_ammo_name",reload_ammo:get_name()) - -player:hud_change(gunammo, "text", gunMeta:get_int("RW_bullets")) - -if GunCaps.gun_unloaded ~= nil then -itemstack:set_name(GunCaps.gun_unloaded) -end - -end -end - -rangedweapons_yeet = function(itemstack, player) - -if minetest.find_node_near(player:getpos(), 10,"rangedweapons:antigun_block") -then - minetest.chat_send_player(player:get_player_name(), "" ..core.colorize("#ff0000","throwable weapons are prohibited in this area!")) -else - -ThrowCaps = itemstack:get_definition().RW_throw_capabilities -playerMeta = player:get_meta() - -if ThrowCaps ~= nil then -throw_cooldown = ThrowCaps.throw_cooldown or 0 -end - -if playerMeta:get_float("rw_cooldown") <= 0 then - -playerMeta:set_float("rw_cooldown", throw_cooldown) - -local throw_damage = {fleshy=1} -local throw_sound = "rangedweapons_throw" -local throw_velocity = 20 -local throw_accuracy = 100 -local throw_cooling = 0 -local throw_crit = 0 -local throw_critEffc = 1 -local throw_mobPen = 0 -local throw_nodePen = 0 -local throw_dps = 0 -local throw_gravity = 0 -local throw_door_breaking = 0 -local throw_skill = "" -local throw_skillChance = 0 -local throw_smokeSize = 0 -local throw_ent = "rangedweapons:shot_bullet" -local throw_visual = "wielditem" -local throw_texture = "rangedweapons:shot_bullet_visual" -local throw_glass_breaking = 0 -local throw_particles = {} -local throw_sparks = 0 -local throw_bomb_ignite = 0 -local throw_size = 0 -local throw_glow = 0 - -if ThrowCaps ~= nil then -throw_damage = ThrowCaps.throw_damage or {fleshy=1} -throw_sound = ThrowCaps.throw_sound or "rangedweapons_glock" -throw_velocity = ThrowCaps.throw_velocity or 20 -throw_accuracy = ThrowCaps.throw_accuracy or 100 -throw_cooling = ThrowCaps.throw_cooling or itemstack:get_name() -throw_crit = ThrowCaps.throw_crit or 0 -throw_critEffc = ThrowCaps.throw_critEffc or 1 -throw_projectiles = ThrowCaps.throw_projectiles or 1 -throw_mobPen = ThrowCaps.throw_mob_penetration or 0 -throw_nodePen = ThrowCaps.throw_node_penetration or 0 -throw_dps = ThrowCaps.throw_dps or 0 -throw_gravity = ThrowCaps.throw_gravity or 0 -throw_door_breaking = ThrowCaps.throw_door_breaking or 0 -throw_ent = ThrowCaps.throw_entity or "rangedweapons:shot_bullet" -throw_visual = ThrowCaps.throw_visual or "wielditem" -throw_texture = ThrowCaps.throw_texture or "rangedweapons:shot_bullet_visual" -throw_glass_breaking = ThrowCaps.throw_glass_breaking or 0 -throw_particles = ThrowCaps.throw_particles or nil -throw_sparks = ThrowCaps.throw_sparks or 0 -throw_bomb_ignite = ThrowCaps.ignites_explosives or 0 -throw_size = ThrowCaps.throw_projectile_size or 0 -throw_glow = ThrowCaps.throw_projectile_glow or 0 -OnCollision = ThrowCaps.OnCollision or function()end - -if ThrowCaps.throw_skill ~= nil then -throw_skill = ThrowCaps.throw_skill[1] or "" -throw_skillChance = ThrowCaps.throw_skill[2] or 0 -else -throw_skill = "" -throw_skillChance = 0 -end -end - -if throw_skillChance > 0 and throw_skill ~= "" then -rangedweapons_gain_skill(player,throw_skill,throw_skillChance) -end - -if throw_skill ~= "" then -skill_value = playerMeta:get_int(throw_skill)/100 -else -skill_value = 1 -end - -rangedweapons_launch_projectile(player,throw_projectiles,throw_damage,throw_ent,throw_visual,throw_texture,throw_sound,throw_velocity,throw_accuracy,skill_value,OnCollision,throw_crit,throw_critEffc,throw_mobPen,throw_nodePen,0,"","","",throw_dps,throw_gravity,throw_door_breaking,throw_glass_breaking,throw_particles,throw_sparks,throw_bomb_ignite,throw_size,0,itemstack:get_wear(),throw_glow) - -itemstack:take_item() - -end -end - -end - - -rangedweapons_shoot_gun = function(itemstack, player) - -if minetest.find_node_near(player:getpos(), 10,"rangedweapons:antigun_block") -then -minetest.sound_play("rangedweapons_empty", {player}) - minetest.chat_send_player(player:get_player_name(), "" ..core.colorize("#ff0000","Guns are prohibited in this area!")) - -else - -local gun_cooldown = 0 -local GunCaps = itemstack:get_definition().RW_gun_capabilities -local gun_ammo_save = 0 - -if GunCaps ~= nil then -gun_cooldown = GunCaps.gun_cooldown or 0 -gun_ammo_save = GunCaps.ammo_saving or 0 -end - -local gunMeta = itemstack:get_meta() -local playerMeta = player:get_meta() - -if gunMeta:get_int("RW_bullets") > 0 and -playerMeta:get_float("rw_cooldown") <= 0 then - -playerMeta:set_float("rw_cooldown", gun_cooldown) - -if math.random(1,100) > gun_ammo_save then -gunMeta:set_int("RW_bullets",gunMeta:get_int("RW_bullets")-1) -end - -player:hud_change(gunammo, "text", gunMeta:get_int("RW_bullets")) - -local gun_icon = "rangedweapons_emergency_gun_icon.png" -if GunCaps.gun_icon ~= nil then -gun_icon = GunCaps.gun_icon -end - player:hud_change(gunimg, "text", gun_icon) - -local OnCollision = function() end - -local bulletStack = ItemStack({name = gunMeta:get_string("RW_ammo_name")}) -AmmoCaps = bulletStack:get_definition().RW_ammo_capabilities - -local gun_damage = {fleshy=1} -local gun_sound = "rangedweapons_glock" -local gun_velocity = 20 -local gun_accuracy = 100 -local gun_cooling = 0 -local gun_crit = 0 -local gun_critEffc = 1 -local gun_mobPen = 0 -local gun_nodePen = 0 -local gun_shell = 0 -local gun_durability = 0 -local gun_dps = 0 -local gun_gravity = 0 -local gun_door_breaking = 0 -local gun_skill = "" -local gun_skillChance = 0 -local gun_smokeSize = 0 - -local bullet_damage = {fleshy=0} -local bullet_velocity = 0 -local bullet_ent = "rangedweapons:shot_bullet" -local bullet_visual = "wielditem" -local bullet_texture = "rangedweapons:shot_bullet_visual" -local bullet_crit = 0 -local bullet_critEffc = 0 -local bullet_projMult = 1 -local bullet_mobPen = 0 -local bullet_nodePen = 0 -local bullet_shell_ent = "rangedweapons:empty_shell" -local bullet_shell_visual = "wielditem" -local bullet_shell_texture = "rangedweapons:shelldrop" -local bullet_dps = 0 -local bullet_gravity = 0 -local bullet_glass_breaking = 0 -local bullet_particles = {} -local bullet_sparks = 0 -local bullet_bomb_ignite = 0 -local bullet_size = 0 -local bullet_glow = 20 - - - -if GunCaps ~= nil then -gun_damage = GunCaps.gun_damage or {fleshy=1} -gun_sound = GunCaps.gun_sound or "rangedweapons_glock" -gun_velocity = GunCaps.gun_velocity or 20 -gun_accuracy = GunCaps.gun_accuracy or 100 -gun_cooling = GunCaps.gun_cooling or itemstack:get_name() -gun_crit = GunCaps.gun_crit or 0 -gun_critEffc = GunCaps.gun_critEffc or 1 -gun_projectiles = GunCaps.gun_projectiles or 1 -gun_mobPen = GunCaps.gun_mob_penetration or 0 -gun_nodePen = GunCaps.gun_node_penetration or 0 -gun_shell = GunCaps.has_shell or 0 -gun_durability = GunCaps.gun_durability or 0 -gun_dps = GunCaps.gun_dps or 0 -gun_ammo_save = GunCaps.ammo_saving or 0 -gun_gravity = GunCaps.gun_gravity or 0 -gun_door_breaking = GunCaps.gun_door_breaking or 0 -gun_smokeSize = GunCaps.gun_smokeSize or 0 - -if GunCaps.gun_skill ~= nil then -gun_skill = GunCaps.gun_skill[1] or "" -gun_skillChance = GunCaps.gun_skill[2] or 0 -else -gun_skill = "" -gun_skillChance = 0 -end - -end - -if gun_skillChance > 0 and gun_skill ~= "" then -rangedweapons_gain_skill(player,gun_skill,gun_skillChance) -end - -local ammo_icon = "rangedweapons_emergency_ammo_icon.png" -if bulletStack:get_definition().inventory_image ~= nil then -ammo_icon = bulletStack:get_definition().inventory_image -end -player:hud_change(ammoimg, "text", ammo_icon) - -if AmmoCaps ~= nil then - -OnCollision = AmmoCaps.OnCollision or function()end -bullet_damage = AmmoCaps.ammo_damage or {fleshy=1} -bullet_velocity = AmmoCaps.ammo_velocity or 0 -bullet_ent = AmmoCaps.ammo_entity or "rangedweapons:shot_bullet" -bullet_visual = AmmoCaps.ammo_visual or "wielditem" -bullet_texture = AmmoCaps.ammo_texture or "rangedweapons:shot_bullet_visual" -bullet_crit = AmmoCaps.ammo_crit or 0 -bullet_critEffc = AmmoCaps.ammo_critEffc or 0 -bullet_projMult = AmmoCaps.ammo_projectile_multiplier or 1 -bullet_mobPen = AmmoCaps.ammo_mob_penetration or 0 -bullet_nodePen = AmmoCaps.ammo_node_penetration or 0 -bullet_shell_ent = AmmoCaps.shell_entity or "rangedweapons:empty_shell" -bullet_shell_visual = AmmoCaps.shell_visual or "wielditem" -bullet_shell_texture = AmmoCaps.shell_texture or "rangedweapons:shelldrop" -bullet_dps = AmmoCaps.ammo_dps or 0 -bullet_gravity = AmmoCaps.ammo_gravity or 0 -bullet_glass_breaking = AmmoCaps.ammo_glass_breaking or 0 -bullet_particles = AmmoCaps.ammo_particles or nil -bullet_sparks = AmmoCaps.has_sparks or 0 -bullet_bomb_ignite = AmmoCaps.ignites_explosives or 0 -bullet_size = AmmoCaps.ammo_projectile_size or 0.0025 -bullet_glow = AmmoCaps.ammo_projectile_glow or 20 -end - - -local combined_crit = gun_crit + bullet_crit -local combined_critEffc = gun_critEffc + bullet_critEffc -local combined_velocity = gun_velocity + bullet_velocity -local combined_projNum = math.ceil(gun_projectiles * bullet_projMult) -local combined_mobPen = gun_mobPen + bullet_mobPen -local combined_nodePen = gun_nodePen + bullet_nodePen -local combined_dps = gun_dps + bullet_dps -local combined_dmg = {} -local combined_gravity = gun_gravity + bullet_gravity - -for _, gunDmg in pairs(gun_damage) do -if bullet_damage[_] ~= nil then -combined_dmg[_] = gun_damage[_] + bullet_damage[_] -else -combined_dmg[_] = gun_damage[_] -end -end -for _, bulletDmg in pairs(bullet_damage) do -if gun_damage[_] == nil then -combined_dmg[_] = bullet_damage[_] -end -end - ---minetest.chat_send_all(minetest.serialize(combined_dmg)) - -if gun_skill ~= "" then -skill_value = playerMeta:get_int(gun_skill)/100 -else -skill_value = 1 -end - -rangedweapons_launch_projectile(player,combined_projNum,combined_dmg,bullet_ent,bullet_visual,bullet_texture,gun_sound,combined_velocity,gun_accuracy,skill_value,OnCollision,combined_crit,combined_critEffc,combined_mobPen,combined_nodePen,gun_shell,bullet_shell_ent,bullet_shell_texture,bullet_shell_visual,combined_dps,combined_gravity,gun_door_breaking,bullet_glass_breaking,bullet_particles,bullet_sparks,bullet_bomb_ignite,bullet_size,gun_smokeSize,0,bullet_glow) - -if rweapons_gun_durability == "true" then -itemstack:add_wear(65535/gun_durability) -end -itemstack:set_name(gun_cooling) - -end -end end - - - - -rangedweapons_shoot_powergun = function(itemstack, player) - -if minetest.find_node_near(player:getpos(), 10,"rangedweapons:antigun_block") -then -minetest.sound_play("rangedweapons_empty", {player}) - minetest.chat_send_player(player:get_player_name(), "" ..core.colorize("#ff0000","Guns are prohibited in this area!")) -else -local power_cooldown = 0 - -PowerCaps = itemstack:get_definition().RW_powergun_capabilities - -if PowerCaps ~= nil then -power_cooldown = PowerCaps.power_cooldown or 0 -power_consumption = PowerCaps.power_consumption or 0 -end - -local inv = player:get_inventory() -local playerMeta = player:get_meta() - -if inv:contains_item("main", "rangedweapons:power_particle "..PowerCaps.power_consumption) and -playerMeta:get_float("rw_cooldown") <= 0 then -playerMeta:set_float("rw_cooldown", power_cooldown) - -local OnCollision = function() end - -local power_damage = {fleshy=1} -local power_sound = "rangedweapons_laser" -local power_velocity = 20 -local power_accuracy = 100 -local power_cooling = 0 -local power_crit = 0 -local power_critEffc = 1 -local power_mobPen = 0 -local power_nodePen = 0 -local power_durability = 0 -local power_dps = 0 -local power_gravity = 0 -local power_door_breaking = 0 -local power_skill = "" -local power_skillChance = 0 -local power_ent = "rangedweapons:shot_bullet" -local power_visual = "wielditem" -local power_texture = "rangedweapons:shot_bullet_visual" -local power_glass_breaking = 0 -local power_particles = {} -local power_sparks = 0 -local power_bomb_ignite = 0 -local power_size = 0 -local power_glow = 20 - -if PowerCaps ~= nil then -power_damage = PowerCaps.power_damage or {fleshy=1} -power_sound = PowerCaps.power_sound or "rangedweapons_glock" -power_velocity = PowerCaps.power_velocity or 20 -power_accuracy = PowerCaps.power_accuracy or 100 -power_cooling = PowerCaps.power_cooling or itemstack:get_name() -power_crit = PowerCaps.power_crit or 0 -power_critEffc = PowerCaps.power_critEffc or 1 -power_projectiles = PowerCaps.power_projectiles or 1 -power_mobPen = PowerCaps.power_mob_penetration or 0 -power_nodePen = PowerCaps.power_node_penetration or 0 -power_durability = PowerCaps.power_durability or 0 -power_dps = PowerCaps.power_dps or 0 -power_gravity = PowerCaps.power_gravity or 0 -power_door_breaking = PowerCaps.power_door_breaking or 0 -OnCollision = PowerCaps.OnCollision or function()end -power_ent = PowerCaps.power_entity or "rangedweapons:shot_bullet" -power_visual = PowerCaps.power_visual or "wielditem" -power_texture = PowerCaps.power_texture or "rangedweapons:shot_bullet_visual" -power_glass_breaking = PowerCaps.power_glass_breaking or 0 -power_particles = PowerCaps.power_particles or nil -power_sparks = PowerCaps.has_sparks or 0 -power_bomb_ignite = PowerCaps.ignites_explosives or 0 -power_size = PowerCaps.power_projectile_size or 0.0025 -power_glow = PowerCaps.power_projectile_glow or 20 - -if PowerCaps.power_skill ~= nil then -power_skill = PowerCaps.power_skill[1] or "" -power_skillChance = PowerCaps.power_skill[2] or 0 -else -power_skill = "" -power_skillChance = 0 -end - -end - -if power_skillChance > 0 and power_skill ~= "" then -rangedweapons_gain_skill(player,power_skill,power_skillChance) -end - -if power_skill ~= "" then -skill_value = playerMeta:get_int(power_skill)/100 -else -skill_value = 1 -end - -rangedweapons_launch_projectile(player,power_projectiles,power_damage,power_ent,power_visual,power_texture,power_sound,power_velocity,power_accuracy,skill_value,OnCollision,power_crit,power_critEffc,power_mobPen,power_nodePen,0,"","","",power_dps,power_gravity,power_door_breaking,power_glass_breaking,power_particles,power_sparks,power_bomb_ignite,power_size,0,0,power_glow) - -if rweapons_gun_durability == "true" then -itemstack:add_wear(65535/power_durability) -end -itemstack:set_name(power_cooling) - -inv:remove_item("main", "rangedweapons:power_particle "..PowerCaps.power_consumption) - -end -end end - -rangedweapons_launch_projectile = function(player,projNum,projDmg,projEnt,visualType,texture,shoot_sound,combined_velocity,accuracy,skill_value,ColResult,projCrit,projCritEffc,mobPen,nodePen,has_shell,shellEnt,shellTexture,shellVisual,dps,gravity,door_break,glass_break,bullet_particles,sparks,ignite,size,smokeSize,proj_wear,proj_glow) - ---minetest.chat_send_all(accuracy) - ----------------------------------- - local pos = player:get_pos() - local dir = player:get_look_dir() - local yaw = player:get_look_horizontal() - local svertical = player:get_look_vertical() - - if pos and dir and yaw then - minetest.sound_play(shoot_sound, {player}) - pos.y = pos.y + 1.45 - - if has_shell > 0 then - local shl = minetest.add_entity(pos, shellEnt) -shl:set_velocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) -shl:set_acceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) -shl:set_rotation({x=0,y=yaw + math.pi,z=-svertical}) -shl:set_properties({ -textures = {shellTexture}, -visual = shellVisual,}) - end -if smokeSize > 0 then - minetest.add_particle({ - pos = pos, - velocity = {x=(dir.x*3)+(math.random(-10,10)/10), y=(dir.y*3)+(math.random(-10,10)/10), z=(dir.z*3)+(math.random(-10,10)/10)} , - acceleration = {x=dir.x * -3, y=2, z=dir.z * -3}, - expirationtime = math.random(5,10)/10, - size = smokeSize, - collisiondetection = false, - vertical = false, - texture = "tnt_smoke.png", - glow = 5, - }) -end - - projectiles = projNum or 1 - for i=1,projectiles do - rndacc = (100 - accuracy) or 0 -local spawnpos_x = pos.x + (math.random(-rndacc,rndacc)/100) -local spawnpos_y = pos.y + (math.random(-rndacc,rndacc)/100) -local spawnpos_z = pos.z + (math.random(-rndacc,rndacc)/100) - - local obj = minetest.add_entity({x=spawnpos_x,y=spawnpos_y,z=spawnpos_z}, projEnt) - local ent = obj:get_luaentity() - -obj:set_properties( -{textures = {texture}, -visual = visualType, -collisionbox = {-size,-size,-size, size,size,size}, -glow = proj_glow,} -) - ent.owner = player:get_player_name() - if obj then - ent.damage = projDmg - ent.crit = projCrit - ent.critEffc = projCritEffc - ent.OnCollision = ColResult - ent.mobPen = mobPen - ent.nodePen = nodePen - ent.dps = dps - ent.door_break = door_break - ent.glass_break = glass_break - ent.skill_value = skill_value - ent.bullet_particles = bullet_particles - ent.sparks = sparks - ent.ignite = ignite - ent.size = size - ent.timer = 0 + (combined_velocity/2000) - ent.wear = proj_wear - obj:set_velocity({x=dir.x * combined_velocity, y=dir.y * combined_velocity, z=dir.z * combined_velocity}) - acc = ((( 100 - accuracy ) / 10) / skill_value ) or 0 - obj:set_acceleration({x=math.random(-acc,acc), y=math.random(-acc,acc)-gravity, z=math.random(-acc,acc)}) -obj:set_rotation({x=0,y=yaw + math.pi,z=-svertical}) - end end end - - -end - -eject_shell = function(itemstack,player,rld_item,rld_time,rldsound,shell) - itemstack:set_name(rld_item) - local meta = player:get_meta() - meta:set_float("rw_cooldown", rld_time) - -local gunMeta = itemstack:get_meta() - -local bulletStack = ItemStack({name = gunMeta:get_string("RW_ammo_name")}) - -minetest.sound_play(rldsound, {player}) - 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.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 ---------------------------------------------------- --- - -function get_weapon_path(modpath, weapons_directory, weapon_type, weapon_name) - return modpath .. "/" .. weapons_directory .. "/" .. weapon_type .. "/" .. weapon_name .. ".lua" -end - - -local weapons = { - handgun = {'glock17', 'luger', 'makarov', 'python', 'deagle', 'taurus', 'beretta', 'm1991'}, - rifle = {'ak47', 'g36', 'm16', 'scar', 'awp', 'm200'}, - shotgun = {'aa12', 'remington', 'spas12', 'benelli', 'jackhammer'}, - machine_gun = {'rpk', 'm60', 'minigun'}, - sub_machine_gun = {'mp40', 'mp5', 'uzi', 'kriss_sv', 'ump', 'tec9', 'thompson', 'tmp'}, - force_weapon = {'forcegun'}, - power_weapon = {'laser_blaster', 'laser_rifle', 'laser_shotgun'}, - throwable = {'shuriken', 'javelin'}, - explosive = {'m79', 'milkor', 'rpg', 'hand_grenade'} -} - -local weapons_directory = "weapons" - -for k, v in pairs(weapons) do - weapon_type = k - - for i, weapon in ipairs(v) do - dofile(get_weapon_path(modpath, weapons_directory, weapon_type, weapon)) + minetest.sound_play("rengedweapons_ricochet", {pos, gain = 0.75}) + for i = 1, 9 do + minetest.add_particle( + { + pos = pos, + velocity = {x = math.random(-6.0, 6.0), y = math.random(-10.0, 15.0), z = math.random(-6.0, 6.0)}, + acceleration = {x = math.random(-9.0, 9.0), y = math.random(-15.0, -3.0), z = math.random(-9.0, 9.0)}, + expirationtime = 1.0, + size = math.random(1, 2), + collisiondetection = true, + vertical = false, + texture = "rangedweapons_spark.png", + glow = 25 + } + ) end end +rangedweapons_gain_skill = function(player, skill, chance) + if math.random(1, chance) == 1 then + local p_meta = player:get_meta() + local skill_num = p_meta:get_int(skill) + if skill_num < rweapons_max_gun_efficiency then + p_meta:set_int(skill, skill_num + 1) + minetest.chat_send_player( + player:get_player_name(), + "" .. core.colorize("#25c200", "You've improved your skill with this type of gun!") + ) + end + end +end -dofile(modpath.."/settings.lua") -dofile(modpath.."/cooldown_stuff.lua") -dofile(modpath.."/skills.lua") -dofile(modpath.."/misc.lua") -dofile(modpath.."/bullet_knockback.lua") -dofile(modpath.."/ammo.lua") -dofile(modpath.."/crafting.lua") +rangedweapons_reload_gun = function(itemstack, player) + GunCaps = itemstack:get_definition().RW_gun_capabilities + + if GunCaps ~= nil then + gun_unload_sound = GunCaps.gun_unload_sound or "" + end + + minetest.sound_play(gun_unload_sound, {player}) + + local gun_reload = 0.25 + + if GunCaps ~= nil then + gun_reload = GunCaps.gun_reload or 0.25 + end + + local playerMeta = player:get_meta() + local gunMeta = itemstack:get_meta() + + gunMeta:set_float("RW_reload_delay", gun_reload) + + playerMeta:set_float("rw_cooldown", gun_reload) + + local player_has_ammo = 0 + local clipSize = 0 + local reload_ammo = "" + + if GunCaps.suitable_ammo ~= nil then + local inv = player:get_inventory() + for i = 1, inv:get_size("main") do + for _, ammo in pairs(GunCaps.suitable_ammo) do + if inv:get_stack("main", i):get_name() == ammo[1] then + reload_ammo = inv:get_stack("main", i) + clipSize = ammo[2] + + player_has_ammo = 1 + break + end + end + + if player_has_ammo == 1 then + break + end + end + end + + if player_has_ammo == 1 then + local gun_icon = "rangedweapons_emergency_gun_icon.png" + + if GunCaps.gun_icon ~= nil then + gun_icon = GunCaps.gun_icon + end + + local ammo_icon = "rangedweapons_emergency_ammo_icon.png" + + if reload_ammo:get_definition().inventory_image ~= nil then + ammo_icon = reload_ammo:get_definition().inventory_image + end + + player:hud_change(gunimg, "text", gun_icon) + player:hud_change(ammoimg, "text", ammo_icon) + + local gunMeta = itemstack:get_meta() + local ammoCount = gunMeta:get_int("RW_bullets") + local ammoName = gunMeta:get_string("RW_ammo_name") + local inv = player:get_inventory() + + inv:add_item("main", ammoName .. " " .. ammoCount) + + if inv:contains_item("main", reload_ammo:get_name() .. " " .. clipSize) then + inv:remove_item("main", reload_ammo:get_name() .. " " .. clipSize) + gunMeta:set_int("RW_bullets", clipSize) + else + gunMeta:set_int("RW_bullets", reload_ammo:get_count()) + inv:remove_item("main", reload_ammo:get_name() .. " " .. reload_ammo:get_count()) + end + + gunMeta:set_string("RW_ammo_name", reload_ammo:get_name()) + + player:hud_change(gunammo, "text", gunMeta:get_int("RW_bullets")) + + if GunCaps.gun_magazine ~= nil then + 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") + if obj then + obj:set_properties({textures = {GunCaps.gun_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 + + if GunCaps.gun_unloaded ~= nil then + itemstack:set_name(GunCaps.gun_unloaded) + end + end +end + +rangedweapons_single_load_gun = function(itemstack, player) + GunCaps = itemstack:get_definition().RW_gun_capabilities + + if GunCaps ~= nil then + gun_unload_sound = GunCaps.gun_unload_sound or "" + end + + minetest.sound_play(gun_unload_sound, {player}) + + local gun_reload = 0.25 + + if GunCaps ~= nil then + gun_reload = GunCaps.gun_reload or 0.25 + end + + local playerMeta = player:get_meta() + local gunMeta = itemstack:get_meta() + + gunMeta:set_float("RW_reload_delay", gun_reload) + + playerMeta:set_float("rw_cooldown", gun_reload) + + local player_has_ammo = 0 + local clipSize = 0 + local reload_ammo = "" + + if GunCaps.suitable_ammo ~= nil then + local inv = player:get_inventory() + for i = 1, inv:get_size("main") do + for _, ammo in pairs(GunCaps.suitable_ammo) do + if inv:get_stack("main", i):get_name() == ammo[1] then + reload_ammo = inv:get_stack("main", i) + clipSize = ammo[2] + + player_has_ammo = 1 + break + end + end + + if player_has_ammo == 1 then + break + end + end + end + + if player_has_ammo == 1 then + local gun_icon = "rangedweapons_emergency_gun_icon.png" + + if GunCaps.gun_icon ~= nil then + gun_icon = GunCaps.gun_icon + end + + local ammo_icon = "rangedweapons_emergency_ammo_icon.png" + + if reload_ammo:get_definition().inventory_image ~= nil then + ammo_icon = reload_ammo:get_definition().inventory_image + end + + player:hud_change(gunimg, "text", gun_icon) + player:hud_change(ammoimg, "text", ammo_icon) + + local gunMeta = itemstack:get_meta() + local ammoCount = gunMeta:get_int("RW_bullets") + local ammoName = gunMeta:get_string("RW_ammo_name") + local inv = player:get_inventory() + + if ammoName ~= reload_ammo:get_name() then + inv:add_item("main", ammoName .. " " .. ammoCount) + gunMeta:set_int("RW_bullets", 0) + end + + if inv:contains_item("main", reload_ammo:get_name()) and gunMeta:get_int("RW_bullets") < clipSize then + inv:remove_item("main", reload_ammo:get_name()) + gunMeta:set_int("RW_bullets", gunMeta:get_int("RW_bullets") + 1) + end + + gunMeta:set_string("RW_ammo_name", reload_ammo:get_name()) + + player:hud_change(gunammo, "text", gunMeta:get_int("RW_bullets")) + + if GunCaps.gun_unloaded ~= nil then + itemstack:set_name(GunCaps.gun_unloaded) + end + end +end + +rangedweapons_yeet = function(itemstack, player) + if minetest.find_node_near(player:getpos(), 10, "rangedweapons:antigun_block") then + minetest.chat_send_player( + player:get_player_name(), + "" .. core.colorize("#ff0000", "throwable weapons are prohibited in this area!") + ) + else + ThrowCaps = itemstack:get_definition().RW_throw_capabilities + playerMeta = player:get_meta() + + if ThrowCaps ~= nil then + throw_cooldown = ThrowCaps.throw_cooldown or 0 + end + + if playerMeta:get_float("rw_cooldown") <= 0 then + playerMeta:set_float("rw_cooldown", throw_cooldown) + + local throw_damage = {fleshy = 1} + local throw_sound = "rangedweapons_throw" + local throw_velocity = 20 + local throw_accuracy = 100 + local throw_cooling = 0 + local throw_crit = 0 + local throw_critEffc = 1 + local throw_mobPen = 0 + local throw_nodePen = 0 + local throw_dps = 0 + local throw_gravity = 0 + local throw_door_breaking = 0 + local throw_skill = "" + local throw_skillChance = 0 + local throw_smokeSize = 0 + local throw_ent = "rangedweapons:shot_bullet" + local throw_visual = "wielditem" + local throw_texture = "rangedweapons:shot_bullet_visual" + local throw_glass_breaking = 0 + local throw_particles = {} + local throw_sparks = 0 + local throw_bomb_ignite = 0 + local throw_size = 0 + local throw_glow = 0 + + if ThrowCaps ~= nil then + throw_damage = ThrowCaps.throw_damage or {fleshy = 1} + throw_sound = ThrowCaps.throw_sound or "rangedweapons_glock" + throw_velocity = ThrowCaps.throw_velocity or 20 + throw_accuracy = ThrowCaps.throw_accuracy or 100 + throw_cooling = ThrowCaps.throw_cooling or itemstack:get_name() + throw_crit = ThrowCaps.throw_crit or 0 + throw_critEffc = ThrowCaps.throw_critEffc or 1 + throw_projectiles = ThrowCaps.throw_projectiles or 1 + throw_mobPen = ThrowCaps.throw_mob_penetration or 0 + throw_nodePen = ThrowCaps.throw_node_penetration or 0 + throw_dps = ThrowCaps.throw_dps or 0 + throw_gravity = ThrowCaps.throw_gravity or 0 + throw_door_breaking = ThrowCaps.throw_door_breaking or 0 + throw_ent = ThrowCaps.throw_entity or "rangedweapons:shot_bullet" + throw_visual = ThrowCaps.throw_visual or "wielditem" + throw_texture = ThrowCaps.throw_texture or "rangedweapons:shot_bullet_visual" + throw_glass_breaking = ThrowCaps.throw_glass_breaking or 0 + throw_particles = ThrowCaps.throw_particles or nil + throw_sparks = ThrowCaps.throw_sparks or 0 + throw_bomb_ignite = ThrowCaps.ignites_explosives or 0 + throw_size = ThrowCaps.throw_projectile_size or 0 + throw_glow = ThrowCaps.throw_projectile_glow or 0 + OnCollision = ThrowCaps.OnCollision or function() + end + + if ThrowCaps.throw_skill ~= nil then + throw_skill = ThrowCaps.throw_skill[1] or "" + throw_skillChance = ThrowCaps.throw_skill[2] or 0 + else + throw_skill = "" + throw_skillChance = 0 + end + end + + if throw_skillChance > 0 and throw_skill ~= "" then + rangedweapons_gain_skill(player, throw_skill, throw_skillChance) + end + + if throw_skill ~= "" then + skill_value = playerMeta:get_int(throw_skill) / 100 + else + skill_value = 1 + end + + rangedweapons_launch_projectile( + player, + throw_projectiles, + throw_damage, + throw_ent, + throw_visual, + throw_texture, + throw_sound, + throw_velocity, + throw_accuracy, + skill_value, + OnCollision, + throw_crit, + throw_critEffc, + throw_mobPen, + throw_nodePen, + 0, + "", + "", + "", + throw_dps, + throw_gravity, + throw_door_breaking, + throw_glass_breaking, + throw_particles, + throw_sparks, + throw_bomb_ignite, + throw_size, + 0, + itemstack:get_wear(), + throw_glow + ) + + itemstack:take_item() + end + end +end + +rangedweapons_shoot_gun = function(itemstack, player) + if minetest.find_node_near(player:getpos(), 10, "rangedweapons:antigun_block") then + minetest.sound_play("rangedweapons_empty", {player}) + minetest.chat_send_player( + player:get_player_name(), + "" .. core.colorize("#ff0000", "Guns are prohibited in this area!") + ) + else + local gun_cooldown = 0 + local GunCaps = itemstack:get_definition().RW_gun_capabilities + local gun_ammo_save = 0 + + if GunCaps ~= nil then + gun_cooldown = GunCaps.gun_cooldown or 0 + gun_ammo_save = GunCaps.ammo_saving or 0 + end + + local gunMeta = itemstack:get_meta() + local playerMeta = player:get_meta() + + if gunMeta:get_int("RW_bullets") > 0 and playerMeta:get_float("rw_cooldown") <= 0 then + playerMeta:set_float("rw_cooldown", gun_cooldown) + + if math.random(1, 100) > gun_ammo_save then + gunMeta:set_int("RW_bullets", gunMeta:get_int("RW_bullets") - 1) + end + + player:hud_change(gunammo, "text", gunMeta:get_int("RW_bullets")) + + local gun_icon = "rangedweapons_emergency_gun_icon.png" + if GunCaps.gun_icon ~= nil then + gun_icon = GunCaps.gun_icon + end + player:hud_change(gunimg, "text", gun_icon) + + local OnCollision = function() + end + + local bulletStack = ItemStack({name = gunMeta:get_string("RW_ammo_name")}) + AmmoCaps = bulletStack:get_definition().RW_ammo_capabilities + + local gun_damage = {fleshy = 1} + local gun_sound = "rangedweapons_glock" + local gun_velocity = 20 + local gun_accuracy = 100 + local gun_cooling = 0 + local gun_crit = 0 + local gun_critEffc = 1 + local gun_mobPen = 0 + local gun_nodePen = 0 + local gun_shell = 0 + local gun_durability = 0 + local gun_dps = 0 + local gun_gravity = 0 + local gun_door_breaking = 0 + local gun_skill = "" + local gun_skillChance = 0 + local gun_smokeSize = 0 + + local bullet_damage = {fleshy = 0} + local bullet_velocity = 0 + local bullet_ent = "rangedweapons:shot_bullet" + local bullet_visual = "wielditem" + local bullet_texture = "rangedweapons:shot_bullet_visual" + local bullet_crit = 0 + local bullet_critEffc = 0 + local bullet_projMult = 1 + local bullet_mobPen = 0 + local bullet_nodePen = 0 + local bullet_shell_ent = "rangedweapons:empty_shell" + local bullet_shell_visual = "wielditem" + local bullet_shell_texture = "rangedweapons:shelldrop" + local bullet_dps = 0 + local bullet_gravity = 0 + local bullet_glass_breaking = 0 + local bullet_particles = {} + local bullet_sparks = 0 + local bullet_bomb_ignite = 0 + local bullet_size = 0 + local bullet_glow = 20 + + if GunCaps ~= nil then + gun_damage = GunCaps.gun_damage or {fleshy = 1} + gun_sound = GunCaps.gun_sound or "rangedweapons_glock" + gun_velocity = GunCaps.gun_velocity or 20 + gun_accuracy = GunCaps.gun_accuracy or 100 + gun_cooling = GunCaps.gun_cooling or itemstack:get_name() + gun_crit = GunCaps.gun_crit or 0 + gun_critEffc = GunCaps.gun_critEffc or 1 + gun_projectiles = GunCaps.gun_projectiles or 1 + gun_mobPen = GunCaps.gun_mob_penetration or 0 + gun_nodePen = GunCaps.gun_node_penetration or 0 + gun_shell = GunCaps.has_shell or 0 + gun_durability = GunCaps.gun_durability or 0 + gun_dps = GunCaps.gun_dps or 0 + gun_ammo_save = GunCaps.ammo_saving or 0 + gun_gravity = GunCaps.gun_gravity or 0 + gun_door_breaking = GunCaps.gun_door_breaking or 0 + gun_smokeSize = GunCaps.gun_smokeSize or 0 + + if GunCaps.gun_skill ~= nil then + gun_skill = GunCaps.gun_skill[1] or "" + gun_skillChance = GunCaps.gun_skill[2] or 0 + else + gun_skill = "" + gun_skillChance = 0 + end + end + + if gun_skillChance > 0 and gun_skill ~= "" then + rangedweapons_gain_skill(player, gun_skill, gun_skillChance) + end + + local ammo_icon = "rangedweapons_emergency_ammo_icon.png" + if bulletStack:get_definition().inventory_image ~= nil then + ammo_icon = bulletStack:get_definition().inventory_image + end + player:hud_change(ammoimg, "text", ammo_icon) + + if AmmoCaps ~= nil then + OnCollision = AmmoCaps.OnCollision or function() + end + bullet_damage = AmmoCaps.ammo_damage or {fleshy = 1} + bullet_velocity = AmmoCaps.ammo_velocity or 0 + bullet_ent = AmmoCaps.ammo_entity or "rangedweapons:shot_bullet" + bullet_visual = AmmoCaps.ammo_visual or "wielditem" + bullet_texture = AmmoCaps.ammo_texture or "rangedweapons:shot_bullet_visual" + bullet_crit = AmmoCaps.ammo_crit or 0 + bullet_critEffc = AmmoCaps.ammo_critEffc or 0 + bullet_projMult = AmmoCaps.ammo_projectile_multiplier or 1 + bullet_mobPen = AmmoCaps.ammo_mob_penetration or 0 + bullet_nodePen = AmmoCaps.ammo_node_penetration or 0 + bullet_shell_ent = AmmoCaps.shell_entity or "rangedweapons:empty_shell" + bullet_shell_visual = AmmoCaps.shell_visual or "wielditem" + bullet_shell_texture = AmmoCaps.shell_texture or "rangedweapons:shelldrop" + bullet_dps = AmmoCaps.ammo_dps or 0 + bullet_gravity = AmmoCaps.ammo_gravity or 0 + bullet_glass_breaking = AmmoCaps.ammo_glass_breaking or 0 + bullet_particles = AmmoCaps.ammo_particles or nil + bullet_sparks = AmmoCaps.has_sparks or 0 + bullet_bomb_ignite = AmmoCaps.ignites_explosives or 0 + bullet_size = AmmoCaps.ammo_projectile_size or 0.0025 + bullet_glow = AmmoCaps.ammo_projectile_glow or 20 + end + + local combined_crit = gun_crit + bullet_crit + local combined_critEffc = gun_critEffc + bullet_critEffc + local combined_velocity = gun_velocity + bullet_velocity + local combined_projNum = math.ceil(gun_projectiles * bullet_projMult) + local combined_mobPen = gun_mobPen + bullet_mobPen + local combined_nodePen = gun_nodePen + bullet_nodePen + local combined_dps = gun_dps + bullet_dps + local combined_dmg = {} + local combined_gravity = gun_gravity + bullet_gravity + + for _, gunDmg in pairs(gun_damage) do + if bullet_damage[_] ~= nil then + combined_dmg[_] = gun_damage[_] + bullet_damage[_] + else + combined_dmg[_] = gun_damage[_] + end + end + for _, bulletDmg in pairs(bullet_damage) do + if gun_damage[_] == nil then + combined_dmg[_] = bullet_damage[_] + end + end + + --minetest.chat_send_all(minetest.serialize(combined_dmg)) + + if gun_skill ~= "" then + skill_value = playerMeta:get_int(gun_skill) / 100 + else + skill_value = 1 + end + + rangedweapons_launch_projectile( + player, + combined_projNum, + combined_dmg, + bullet_ent, + bullet_visual, + bullet_texture, + gun_sound, + combined_velocity, + gun_accuracy, + skill_value, + OnCollision, + combined_crit, + combined_critEffc, + combined_mobPen, + combined_nodePen, + gun_shell, + bullet_shell_ent, + bullet_shell_texture, + bullet_shell_visual, + combined_dps, + combined_gravity, + gun_door_breaking, + bullet_glass_breaking, + bullet_particles, + bullet_sparks, + bullet_bomb_ignite, + bullet_size, + gun_smokeSize, + 0, + bullet_glow + ) + + if rweapons_gun_durability == "true" then + itemstack:add_wear(65535 / gun_durability) + end + itemstack:set_name(gun_cooling) + end + end +end + +rangedweapons_shoot_powergun = function(itemstack, player) + if minetest.find_node_near(player:getpos(), 10, "rangedweapons:antigun_block") then + minetest.sound_play("rangedweapons_empty", {player}) + minetest.chat_send_player( + player:get_player_name(), + "" .. core.colorize("#ff0000", "Guns are prohibited in this area!") + ) + else + local power_cooldown = 0 + + PowerCaps = itemstack:get_definition().RW_powergun_capabilities + + if PowerCaps ~= nil then + power_cooldown = PowerCaps.power_cooldown or 0 + power_consumption = PowerCaps.power_consumption or 0 + end + + local inv = player:get_inventory() + local playerMeta = player:get_meta() + + if + inv:contains_item("main", "rangedweapons:power_particle " .. PowerCaps.power_consumption) and + playerMeta:get_float("rw_cooldown") <= 0 + then + playerMeta:set_float("rw_cooldown", power_cooldown) + + local OnCollision = function() + end + + local power_damage = {fleshy = 1} + local power_sound = "rangedweapons_laser" + local power_velocity = 20 + local power_accuracy = 100 + local power_cooling = 0 + local power_crit = 0 + local power_critEffc = 1 + local power_mobPen = 0 + local power_nodePen = 0 + local power_durability = 0 + local power_dps = 0 + local power_gravity = 0 + local power_door_breaking = 0 + local power_skill = "" + local power_skillChance = 0 + local power_ent = "rangedweapons:shot_bullet" + local power_visual = "wielditem" + local power_texture = "rangedweapons:shot_bullet_visual" + local power_glass_breaking = 0 + local power_particles = {} + local power_sparks = 0 + local power_bomb_ignite = 0 + local power_size = 0 + local power_glow = 20 + + if PowerCaps ~= nil then + power_damage = PowerCaps.power_damage or {fleshy = 1} + power_sound = PowerCaps.power_sound or "rangedweapons_glock" + power_velocity = PowerCaps.power_velocity or 20 + power_accuracy = PowerCaps.power_accuracy or 100 + power_cooling = PowerCaps.power_cooling or itemstack:get_name() + power_crit = PowerCaps.power_crit or 0 + power_critEffc = PowerCaps.power_critEffc or 1 + power_projectiles = PowerCaps.power_projectiles or 1 + power_mobPen = PowerCaps.power_mob_penetration or 0 + power_nodePen = PowerCaps.power_node_penetration or 0 + power_durability = PowerCaps.power_durability or 0 + power_dps = PowerCaps.power_dps or 0 + power_gravity = PowerCaps.power_gravity or 0 + power_door_breaking = PowerCaps.power_door_breaking or 0 + OnCollision = PowerCaps.OnCollision or function() + end + power_ent = PowerCaps.power_entity or "rangedweapons:shot_bullet" + power_visual = PowerCaps.power_visual or "wielditem" + power_texture = PowerCaps.power_texture or "rangedweapons:shot_bullet_visual" + power_glass_breaking = PowerCaps.power_glass_breaking or 0 + power_particles = PowerCaps.power_particles or nil + power_sparks = PowerCaps.has_sparks or 0 + power_bomb_ignite = PowerCaps.ignites_explosives or 0 + power_size = PowerCaps.power_projectile_size or 0.0025 + power_glow = PowerCaps.power_projectile_glow or 20 + + if PowerCaps.power_skill ~= nil then + power_skill = PowerCaps.power_skill[1] or "" + power_skillChance = PowerCaps.power_skill[2] or 0 + else + power_skill = "" + power_skillChance = 0 + end + end + + if power_skillChance > 0 and power_skill ~= "" then + rangedweapons_gain_skill(player, power_skill, power_skillChance) + end + + if power_skill ~= "" then + skill_value = playerMeta:get_int(power_skill) / 100 + else + skill_value = 1 + end + + rangedweapons_launch_projectile( + player, + power_projectiles, + power_damage, + power_ent, + power_visual, + power_texture, + power_sound, + power_velocity, + power_accuracy, + skill_value, + OnCollision, + power_crit, + power_critEffc, + power_mobPen, + power_nodePen, + 0, + "", + "", + "", + power_dps, + power_gravity, + power_door_breaking, + power_glass_breaking, + power_particles, + power_sparks, + power_bomb_ignite, + power_size, + 0, + 0, + power_glow + ) + + if rweapons_gun_durability == "true" then + itemstack:add_wear(65535 / power_durability) + end + itemstack:set_name(power_cooling) + + inv:remove_item("main", "rangedweapons:power_particle " .. PowerCaps.power_consumption) + end + end +end + +rangedweapons_launch_projectile = function( + player, + projNum, + projDmg, + projEnt, + visualType, + texture, + shoot_sound, + combined_velocity, + accuracy, + skill_value, + ColResult, + projCrit, + projCritEffc, + mobPen, + nodePen, + has_shell, + shellEnt, + shellTexture, + shellVisual, + dps, + gravity, + door_break, + glass_break, + bullet_particles, + sparks, + ignite, + size, + smokeSize, + proj_wear, + proj_glow) + --minetest.chat_send_all(accuracy) + + ---------------------------------- + local pos = player:get_pos() + local dir = player:get_look_dir() + local yaw = player:get_look_horizontal() + local svertical = player:get_look_vertical() + + if pos and dir and yaw then + minetest.sound_play(shoot_sound, {player}) + pos.y = pos.y + 1.45 + + if has_shell > 0 then + local shl = minetest.add_entity(pos, shellEnt) + shl:set_velocity({x = dir.x * -10, y = dir.y * -10, z = dir.z * -10}) + shl:set_acceleration({x = dir.x * -5, y = -10, z = dir.z * -5}) + shl:set_rotation({x = 0, y = yaw + math.pi, z = -svertical}) + shl:set_properties( + { + textures = {shellTexture}, + visual = shellVisual + } + ) + end + if smokeSize > 0 then + minetest.add_particle( + { + pos = pos, + velocity = { + x = (dir.x * 3) + (math.random(-10, 10) / 10), + y = (dir.y * 3) + (math.random(-10, 10) / 10), + z = (dir.z * 3) + (math.random(-10, 10) / 10) + }, + acceleration = {x = dir.x * -3, y = 2, z = dir.z * -3}, + expirationtime = math.random(5, 10) / 10, + size = smokeSize, + collisiondetection = false, + vertical = false, + texture = "tnt_smoke.png", + glow = 5 + } + ) + end + + projectiles = projNum or 1 + for i = 1, projectiles do + rndacc = (100 - accuracy) or 0 + local spawnpos_x = pos.x + (math.random(-rndacc, rndacc) / 100) + local spawnpos_y = pos.y + (math.random(-rndacc, rndacc) / 100) + local spawnpos_z = pos.z + (math.random(-rndacc, rndacc) / 100) + + local obj = minetest.add_entity({x = spawnpos_x, y = spawnpos_y, z = spawnpos_z}, projEnt) + local ent = obj:get_luaentity() + + obj:set_properties( + { + textures = {texture}, + visual = visualType, + collisionbox = {-size, -size, -size, size, size, size}, + glow = proj_glow + } + ) + ent.owner = player:get_player_name() + if obj then + ent.damage = projDmg + ent.crit = projCrit + ent.critEffc = projCritEffc + ent.OnCollision = ColResult + ent.mobPen = mobPen + ent.nodePen = nodePen + ent.dps = dps + ent.door_break = door_break + ent.glass_break = glass_break + ent.skill_value = skill_value + ent.bullet_particles = bullet_particles + ent.sparks = sparks + ent.ignite = ignite + ent.size = size + ent.timer = 0 + (combined_velocity / 2000) + ent.wear = proj_wear + obj:set_velocity( + {x = dir.x * combined_velocity, y = dir.y * combined_velocity, z = dir.z * combined_velocity} + ) + acc = (((100 - accuracy) / 10) / skill_value) or 0 + obj:set_acceleration( + {x = math.random(-acc, acc), y = math.random(-acc, acc) - gravity, z = math.random(-acc, acc)} + ) + obj:set_rotation({x = 0, y = yaw + math.pi, z = -svertical}) + end + end + end +end + +eject_shell = function(itemstack, player, rld_item, rld_time, rldsound, shell) + itemstack:set_name(rld_item) + local meta = player:get_meta() + meta:set_float("rw_cooldown", rld_time) + + local gunMeta = itemstack:get_meta() + + local bulletStack = ItemStack({name = gunMeta:get_string("RW_ammo_name")}) + + minetest.sound_play(rldsound, {player}) + 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.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 +--------------------------------------------------- if rweapons_explosives == "true" then - dofile(modpath.."/explosives.lua") + dofile(modpath .. "/explosives.lua") end if rweapons_glass_breaking == "true" then - dofile(modpath.."/glass_breaking.lua") + dofile(modpath .. "/glass_breaking.lua") end + if not minetest.settings:get_bool("glass_breaking") then -minetest.register_abm({ - nodenames = {"rangedweapons:broken_glass"}, - interval = 1, - chance = 1, - action = function(pos, node) - if minetest.get_node(pos).name == "rangedweapons:broken_glass" then - node.name = "default:glass" - minetest.set_node(pos, node) - end - end -}) + minetest.register_abm( + { + nodenames = {"rangedweapons:broken_glass"}, + interval = 1, + chance = 1, + action = function(pos, node) + if minetest.get_node(pos).name == "rangedweapons:broken_glass" then + node.name = "default:glass" + minetest.set_node(pos, node) + end + end + } + ) end local rangedweapons_empty_shell = { - physical = false, - timer = 0, - visual = "wielditem", - visual_size = {x=0.3, y=0.3}, - textures = {"rangedweapons:shelldrop"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, + physical = false, + timer = 0, + visual = "wielditem", + visual_size = {x = 0.3, y = 0.3}, + textures = {"rangedweapons:shelldrop"}, + lastpos = {}, + collisionbox = {0, 0, 0, 0, 0, 0} } rangedweapons_empty_shell.on_step = function(self, dtime, pos) - self.timer = self.timer + dtime - local pos = self.object:get_pos() - local node = minetest.get_node(pos) - if self.lastpos.y ~= nil then - if minetest.registered_nodes[node.name]~= nil then - if minetest.registered_nodes[node.name].walkable then - local vel = self.object:get_velocity() - local acc = self.object:get_acceleration() - self.object:set_velocity({x=vel.x*-0.3, y=vel.y*-0.75, z=vel.z*-0.3}) - minetest.sound_play("rangedweapons_shellhit", {pos = self.lastpos, gain = 0.8}) - self.object:set_acceleration({x=acc.x, y=acc.y, z=acc.z}) - end end - end - if self.timer > 1.69 then - minetest.sound_play("rangedweapons_bulletdrop", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} + self.timer = self.timer + dtime + local pos = self.object:get_pos() + local node = minetest.get_node(pos) + if self.lastpos.y ~= nil then + if minetest.registered_nodes[node.name] ~= nil then + if minetest.registered_nodes[node.name].walkable then + local vel = self.object:get_velocity() + local acc = self.object:get_acceleration() + self.object:set_velocity({x = vel.x * -0.3, y = vel.y * -0.75, z = vel.z * -0.3}) + minetest.sound_play("rangedweapons_shellhit", {pos = self.lastpos, gain = 0.8}) + self.object:set_acceleration({x = acc.x, y = acc.y, z = acc.z}) + end + end + end + if self.timer > 1.69 then + minetest.sound_play("rangedweapons_bulletdrop", {pos = self.lastpos, gain = 0.8}) + self.object:remove() + end + self.lastpos = {x = pos.x, y = pos.y, z = pos.z} end -minetest.register_entity("rangedweapons:empty_shell", rangedweapons_empty_shell ) +minetest.register_entity("rangedweapons:empty_shell", rangedweapons_empty_shell) +minetest.register_abm( + { + nodenames = {"doors:hidden"}, + interval = 1, + chance = 1, + action = function(pos, node) + pos.y = pos.y - 1 + if minetest.get_node(pos).name == "air" then + pos.y = pos.y + 1 + node.name = "air" + minetest.set_node(pos, node) + end + end + } +) -minetest.register_abm({ - nodenames = {"doors:hidden"}, - interval = 1, - chance = 1, - action = function(pos, node) - pos.y = pos.y-1 - if minetest.get_node(pos).name == "air" then - pos.y = pos.y+1 - node.name = "air" - minetest.set_node(pos, node) - end - end -}) +minetest.register_on_joinplayer( + function(player) + gunammo = + player:hud_add( + { + hud_elem_type = "text", + name = "gunammo", + text = "", + number = 0xFFFFFF, + scale = {x = 100, y = 20}, + position = {x = 0.7, y = 0.1}, + offset = {x = 30, y = 100}, + alignment = {x = 0, y = -1} + } + ) + gunimg = + player:hud_add( + { + hud_elem_type = "image", + text = "rangedweapons_empty_icon.png", + scale = {x = 2, y = 2}, + position = {x = 0.7, y = 0.065}, + offset = {x = 30, y = 100}, + alignment = {x = 0, y = -1} + } + ) + ammoimg = + player:hud_add( + { + hud_elem_type = "image", + text = "rangedweapons_empty_icon.png", + scale = {x = 1.5, y = 1.5}, + position = {x = 0.725, y = 0.1}, + offset = {x = 30, y = 100}, + alignment = {x = 0, y = -1} + } + ) + hit = + player:hud_add( + { + hud_elem_type = "image", + text = "rangedweapons_empty_icon.png", + scale = {x = 2, y = 2}, + position = {x = 0.5, y = 0.5}, + offset = {x = 0, y = 0}, + alignment = {x = 0, y = 0} + } + ) + scope_hud = + player:hud_add( + { + hud_elem_type = "image", + position = {x = 0.5, y = 0.5}, + scale = {x = -100, y = -100}, + text = "rangedweapons_empty_icon.png" + } + ) + end +) -minetest.register_on_joinplayer(function(player) - gunammo = - player:hud_add({ - hud_elem_type = "text", - name = "gunammo", - text = "", - number = 0xFFFFFF, - scale = {x = 100, y = 20}, - position = {x = 0.7, y = 0.1}, - offset = {x = 30, y = 100}, - alignment = {x = 0, y = -1} - }) - gunimg = - player:hud_add({ - hud_elem_type = "image", - text = "rangedweapons_empty_icon.png", - scale = {x = 2, y = 2}, - position = {x = 0.7, y = 0.065}, - offset = {x = 30, y = 100}, - alignment = {x = 0, y = -1} - }) - ammoimg = - player:hud_add({ - hud_elem_type = "image", - text = "rangedweapons_empty_icon.png", - scale = {x = 1.5, y = 1.5}, - position = {x = 0.725, y = 0.1}, - offset = {x = 30, y = 100}, - alignment = {x = 0, y = -1} - }) - hit = - player:hud_add({ - hud_elem_type = "image", - text = "rangedweapons_empty_icon.png", - scale = {x = 2, y = 2}, - position = {x = 0.5, y = 0.5}, - offset = {x = 0, y = 0}, - alignment = {x = 0, y = 0} - }) -scope_hud = - player:hud_add({ - hud_elem_type = "image", - position = { x=0.5, y=0.5 }, - scale = { x=-100, y=-100 }, - text = "rangedweapons_empty_icon.png", - }) -end) - - local timer = 0 -minetest.register_globalstep(function(dtime, player) - timer = timer + dtime; - if timer >= 1.0 then - for _, player in pairs(minetest.get_connected_players()) do -player:hud_change(hit, "text", "rangedweapons_empty_icon.png") - timer = 0 - end - end - end) +local timer = 0 +minetest.register_globalstep( + function(dtime, player) + timer = timer + dtime + if timer >= 1.0 then + for _, player in pairs(minetest.get_connected_players()) do + player:hud_change(hit, "text", "rangedweapons_empty_icon.png") + timer = 0 + end + end + end +) diff --git a/item.lua b/item.lua new file mode 100644 index 0000000..7f6408d --- /dev/null +++ b/item.lua @@ -0,0 +1,6 @@ +local item = {} + +item.title_color = "#35cdff" + + +return item diff --git a/scratch b/scratch new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/scratch @@ -0,0 +1 @@ + diff --git a/settings.lua b/settings.lua index 1170aa3..64ce745 100644 --- a/settings.lua +++ b/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" diff --git a/textures/rangedweapons_bereta.png b/textures/rangedweapons_bereta.png deleted file mode 100644 index 94ea0fedc83e90a8e858259869bb286cae9f5199..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2925 zcmV-z3zGDSP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0001(Nkl diff --git a/textures/rangedweapons_beretta_icon.png b/textures/weapons/handgun/beretta/rangedweapons_handgun_beretta_icon.png similarity index 100% rename from textures/rangedweapons_beretta_icon.png rename to textures/weapons/handgun/beretta/rangedweapons_handgun_beretta_icon.png diff --git a/textures/rangedweapons_beretta_rld.png b/textures/weapons/handgun/beretta/rangedweapons_handgun_beretta_reload.png similarity index 100% rename from textures/rangedweapons_beretta_rld.png rename to textures/weapons/handgun/beretta/rangedweapons_handgun_beretta_reload.png diff --git a/textures/rangedweapons_beretta.png b/textures/weapons/handgun/beretta/rangedweapons_handgun_beretta_texture.png similarity index 100% rename from textures/rangedweapons_beretta.png rename to textures/weapons/handgun/beretta/rangedweapons_handgun_beretta_texture.png diff --git a/weapon.lua b/weapon.lua new file mode 100644 index 0000000..eb4a139 --- /dev/null +++ b/weapon.lua @@ -0,0 +1,66 @@ +local modpath = minetest.get_modpath(minetest.get_current_modname()) +local colors = dofile(modpath.."/colors.lua") +local constants = dofile(modpath.."/constants.lua") + +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_type, weapon_name, texture_name) + return constants.mod_name .. "_" .. weapon_type .. "_" .. 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(item.title_color, v) + else + color_text = core.colorize(colors.white, v) + end + + description = description .. color_text + end + + return description + +end + +return weapon diff --git a/weapons/rifle/ak47.lua b/weapons/auto_rifle/ak47.lua similarity index 100% rename from weapons/rifle/ak47.lua rename to weapons/auto_rifle/ak47.lua diff --git a/weapons/rifle/g36.lua b/weapons/auto_rifle/g36.lua similarity index 100% rename from weapons/rifle/g36.lua rename to weapons/auto_rifle/g36.lua diff --git a/weapons/rifle/m16.lua b/weapons/auto_rifle/m16.lua similarity index 100% rename from weapons/rifle/m16.lua rename to weapons/auto_rifle/m16.lua diff --git a/weapons/rifle/scar.lua b/weapons/auto_rifle/scar.lua similarity index 100% rename from weapons/rifle/scar.lua rename to weapons/auto_rifle/scar.lua diff --git a/weapons/shotgun/aa12.lua b/weapons/auto_shotgun/aa12.lua similarity index 100% rename from weapons/shotgun/aa12.lua rename to weapons/auto_shotgun/aa12.lua diff --git a/weapons/shotgun/jackhammer.lua b/weapons/auto_shotgun/jackhammer.lua similarity index 100% rename from weapons/shotgun/jackhammer.lua rename to weapons/auto_shotgun/jackhammer.lua diff --git a/weapons/handgun/beretta.lua b/weapons/handgun/beretta.lua index a0d1f87..98fc4de 100644 --- a/weapons/handgun/beretta.lua +++ b/weapons/handgun/beretta.lua @@ -1,3 +1,42 @@ +local weapon_type = "handgun" +local weapon_name = "beretta" + +local modpath = minetest.get_modpath(minetest.get_current_modname()) + +local item = dofile(modpath.."/item.lua") +local weapon = dofile(modpath.."/weapon.lua") +local handgun = dofile(modpath.."/weapons".."/handgun".."/handgun.lua") +local colors = dofile(modpath.."/colors.lua") +local constants = dofile(modpath.."/constants.lua") + +local beretta_data = { + name = "Beretta 92", + damage = handgun["damage"], + accuracy = handgun["accuracy"], + velocity = handgun["velocity"], + knock_back = handgun["knockback"], + critical_chance = handgun["critical_chance"], + critical_efficiency = handgun.critical_efficiency, + gun_skill = {"handgun_skill",43}, + capacity = 15, + suitable_ammo = {{"rangedweapons:9mm",capacity}}, + reload_delay = handgun.reload_delay, + cool_down = handgun.cool_down, + ammunition_string = "9mm Ammo", + fire_rate = handgun.fire_rate, + magazine = handgun.magazine, + icon = weapon.get_texture_name(weapon_type, weapon_name, "icon.png"), + texture = weapon.get_texture_name(weapon_type, weapon_name, "texture.png"), + reload_icon = weapon.get_texture_name(weapon_type, weapon_name, "reload.png"), + unloaded = constants.mod_name .. ":beretta_r", + cooling = constants.mod_name .. ":beretta_rld", + fire_sound = "rangedweapons_beretta", + unload_sound = handgun.unload_sound, + gun_projectiles = 1, + has_shell = 1, + gun_durability = 1150, + gun_smokeSize = 5, +} minetest.register_tool("rangedweapons:beretta_rld", { @@ -7,45 +46,26 @@ minetest.register_tool("rangedweapons:beretta_rld", { range = 0, loaded_gun = "rangedweapons:beretta", groups = {not_in_creative_inventory = 1}, - inventory_image = "rangedweapons_beretta_rld.png", + inventory_image = beretta_data["reload_icon"] }) + 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", + load_sound = handgun["load_sound"], range = 0, groups = {not_in_creative_inventory = 1}, - inventory_image = "rangedweapons_beretta_rld.png", + inventory_image = beretta_data["reload_icon"] }) 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"), + description = weapon.generate_description(beretta_data), 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", - }, + inventory_image = beretta_data.texture, + RW_gun_capabilities = beretta_data, on_secondary_use = function(itemstack, user, pointed_thing) rangedweapons_reload_gun(itemstack, user) return itemstack diff --git a/weapons/handgun/handgun.lua b/weapons/handgun/handgun.lua new file mode 100644 index 0000000..be2ebd4 --- /dev/null +++ b/weapons/handgun/handgun.lua @@ -0,0 +1,22 @@ +-- General defaults for a handgun. + +local handgun = { + damage = 4, + knockback=4, + critical_chance = 15, + critical_efficiency = 2, + velocity = 25, + skill = {"handgun_skill",43}, + magazine = "rangedweapons:handgun_mag_black", + accuracy = 94, + fire_rate = 0.9, + cool_down = 0.4, + reload_delay = 0.5, + projectiles = 1, + has_shell = 1, + durability = 1150, + smoke_size = 5, + unload_sound = "rangedweapons_handgun_mag_out", +} + +return handgun diff --git a/weapons/sub_machine_gun/tec9.lua b/weapons/machine_pistol/tec9.lua similarity index 100% rename from weapons/sub_machine_gun/tec9.lua rename to weapons/machine_pistol/tec9.lua diff --git a/weapons/sub_machine_gun/tmp.lua b/weapons/machine_pistol/tmp.lua similarity index 100% rename from weapons/sub_machine_gun/tmp.lua rename to weapons/machine_pistol/tmp.lua diff --git a/weapons/sub_machine_gun/uzi.lua b/weapons/machine_pistol/uzi.lua similarity index 100% rename from weapons/sub_machine_gun/uzi.lua rename to weapons/machine_pistol/uzi.lua diff --git a/weapons/handgun/python.lua b/weapons/revolver/python.lua similarity index 100% rename from weapons/handgun/python.lua rename to weapons/revolver/python.lua diff --git a/weapons/handgun/taurus.lua b/weapons/revolver/taurus.lua similarity index 100% rename from weapons/handgun/taurus.lua rename to weapons/revolver/taurus.lua diff --git a/weapons/rifle/awp.lua b/weapons/sniper_rifle/awp.lua similarity index 100% rename from weapons/rifle/awp.lua rename to weapons/sniper_rifle/awp.lua diff --git a/weapons/rifle/m200.lua b/weapons/sniper_rifle/m200.lua similarity index 100% rename from weapons/rifle/m200.lua rename to weapons/sniper_rifle/m200.lua diff --git a/weapons/rifle/svd.lua b/weapons/sniper_rifle/svd.lua similarity index 100% rename from weapons/rifle/svd.lua rename to weapons/sniper_rifle/svd.lua -- 2.30.2 From 602baa558802c2ccc68cf94a5064c4679563e4a2 Mon Sep 17 00:00:00 2001 From: ranguli Date: Sun, 30 Jan 2022 22:29:23 -0330 Subject: [PATCH 3/8] this is the most insane codebase i've ever seen --- init.lua | 223 ++++++------------ .../glock17}/rangedweapons_glock17.png | Bin .../glock17}/rangedweapons_glock17_icon.png | Bin .../glock17}/rangedweapons_glock17_rld.png | Bin weapon.lua | 42 +++- weapons/handgun/beretta.lua | 47 ++-- weapons/handgun/glock17.lua | 78 ++++-- weapons/handgun/glock19.lua | 83 +++++++ weapons/handgun/handgun.lua | 2 +- 9 files changed, 272 insertions(+), 203 deletions(-) rename textures/{ => weapons/handgun/glock17}/rangedweapons_glock17.png (100%) rename textures/{ => weapons/handgun/glock17}/rangedweapons_glock17_icon.png (100%) rename textures/{ => weapons/handgun/glock17}/rangedweapons_glock17_rld.png (100%) create mode 100644 weapons/handgun/glock19.lua diff --git a/init.lua b/init.lua index 1f103ca..96be539 100644 --- a/init.lua +++ b/init.lua @@ -17,7 +17,7 @@ dofile(modpath .. "/blocks/antigun_block.lua") for k, v in pairs(weapon.weapons) do weapon_type = k - for i, weapon_data in ipairs(v) do + for _, weapon_data in ipairs(v) do dofile(weapon.get_weapon_path(modpath, weapon_type, weapon_data)) end end @@ -60,37 +60,38 @@ rangedweapons_gain_skill = function(player, skill, chance) end rangedweapons_reload_gun = function(itemstack, player) - GunCaps = itemstack:get_definition().RW_gun_capabilities + local gun_data = itemstack:get_definition().rw_gun_data - if GunCaps ~= nil then - gun_unload_sound = GunCaps.gun_unload_sound or "" + if gun_data ~= nil then + gun_unload_sound = gun_data.gun_unload_sound or "" end minetest.sound_play(gun_unload_sound, {player}) - local gun_reload = 0.25 - - if GunCaps ~= nil then - gun_reload = GunCaps.gun_reload or 0.25 - end - local playerMeta = player:get_meta() local gunMeta = itemstack:get_meta() - gunMeta:set_float("RW_reload_delay", gun_reload) + gunMeta:set_float("RW_reload_delay", gun_data["reload_delay"]) - playerMeta:set_float("rw_cooldown", gun_reload) + playerMeta:set_float("rw_cooldown", gun_data["reload_delay"]) local player_has_ammo = 0 local clipSize = 0 local reload_ammo = "" - if GunCaps.suitable_ammo ~= nil then + -- If we have the right type of ammo in our inventory? + if gun_data.suitable_ammo ~= nil then + -- Get the players inventory and iterate over it local inv = player:get_inventory() for i = 1, inv:get_size("main") do - for _, ammo in pairs(GunCaps.suitable_ammo) do + -- For each type of suitable ammo in the inventory, + -- if the ammo is the kind we're looking for + for _, ammo in pairs(gun_data.suitable_ammo) do if inv:get_stack("main", i):get_name() == ammo[1] then + -- Then mark that stack of ammo as what we will use + -- to reload reload_ammo = inv:get_stack("main", i) + -- And set the clipsize?? clipSize = ammo[2] player_has_ammo = 1 @@ -105,19 +106,13 @@ rangedweapons_reload_gun = function(itemstack, player) end if player_has_ammo == 1 then - local gun_icon = "rangedweapons_emergency_gun_icon.png" - - if GunCaps.gun_icon ~= nil then - gun_icon = GunCaps.gun_icon - end - local ammo_icon = "rangedweapons_emergency_ammo_icon.png" if reload_ammo:get_definition().inventory_image ~= nil then ammo_icon = reload_ammo:get_definition().inventory_image end - player:hud_change(gunimg, "text", gun_icon) + player:hud_change(gunimg, "text", gun_data["texture"]["icon"]) player:hud_change(ammoimg, "text", ammo_icon) local gunMeta = itemstack:get_meta() @@ -139,7 +134,7 @@ rangedweapons_reload_gun = function(itemstack, player) player:hud_change(gunammo, "text", gunMeta:get_int("RW_bullets")) - if GunCaps.gun_magazine ~= nil then + if gun_data.gun_magazine ~= nil then local pos = player:get_pos() local dir = player:get_look_dir() local yaw = player:get_look_horizontal() @@ -147,7 +142,7 @@ rangedweapons_reload_gun = function(itemstack, player) pos.y = pos.y + 1.4 local obj = minetest.add_entity(pos, "rangedweapons:mag") if obj then - obj:set_properties({textures = {GunCaps.gun_magazine}}) + obj:set_properties({textures = {gun_data.gun_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}) @@ -155,42 +150,31 @@ rangedweapons_reload_gun = function(itemstack, player) end end - if GunCaps.gun_unloaded ~= nil then - itemstack:set_name(GunCaps.gun_unloaded) + if gun_data.gun_unloaded ~= nil then + itemstack:set_name(gun_data.gun_unloaded) end end end rangedweapons_single_load_gun = function(itemstack, player) - GunCaps = itemstack:get_definition().RW_gun_capabilities + local gun_data = itemstack:get_definition().rw_gun_data - if GunCaps ~= nil then - gun_unload_sound = GunCaps.gun_unload_sound or "" - end - - minetest.sound_play(gun_unload_sound, {player}) - - local gun_reload = 0.25 - - if GunCaps ~= nil then - gun_reload = GunCaps.gun_reload or 0.25 - end + local reload_delay = gun_data["reload_delay"] local playerMeta = player:get_meta() local gunMeta = itemstack:get_meta() - gunMeta:set_float("RW_reload_delay", gun_reload) - - playerMeta:set_float("rw_cooldown", gun_reload) + gunMeta:set_float("RW_reload_delay", reload_delay) + playerMeta:set_float("rw_cooldown", reload_delay) local player_has_ammo = 0 local clipSize = 0 local reload_ammo = "" - if GunCaps.suitable_ammo ~= nil then + if gun_data.suitable_ammo ~= nil then local inv = player:get_inventory() for i = 1, inv:get_size("main") do - for _, ammo in pairs(GunCaps.suitable_ammo) do + for _, ammo in pairs(gun_data.suitable_ammo) do if inv:get_stack("main", i):get_name() == ammo[1] then reload_ammo = inv:get_stack("main", i) clipSize = ammo[2] @@ -209,8 +193,8 @@ rangedweapons_single_load_gun = function(itemstack, player) if player_has_ammo == 1 then local gun_icon = "rangedweapons_emergency_gun_icon.png" - if GunCaps.gun_icon ~= nil then - gun_icon = GunCaps.gun_icon + if gun_data.gun_icon ~= nil then + gun_icon = gun_data.gun_icon end local ammo_icon = "rangedweapons_emergency_ammo_icon.png" @@ -241,8 +225,8 @@ rangedweapons_single_load_gun = function(itemstack, player) player:hud_change(gunammo, "text", gunMeta:get_int("RW_bullets")) - if GunCaps.gun_unloaded ~= nil then - itemstack:set_name(GunCaps.gun_unloaded) + if gun_data.gun_unloaded ~= nil then + itemstack:set_name(gun_data.gun_unloaded) end end end @@ -278,7 +262,6 @@ rangedweapons_yeet = function(itemstack, player) local throw_door_breaking = 0 local throw_skill = "" local throw_skillChance = 0 - local throw_smokeSize = 0 local throw_ent = "rangedweapons:shot_bullet" local throw_visual = "wielditem" local throw_texture = "rangedweapons:shot_bullet_visual" @@ -380,30 +363,23 @@ rangedweapons_shoot_gun = function(itemstack, player) "" .. core.colorize("#ff0000", "Guns are prohibited in this area!") ) else - local gun_cooldown = 0 - local GunCaps = itemstack:get_definition().RW_gun_capabilities - local gun_ammo_save = 0 + local gun_data = itemstack:get_definition().rw_gun_data - if GunCaps ~= nil then - gun_cooldown = GunCaps.gun_cooldown or 0 - gun_ammo_save = GunCaps.ammo_saving or 0 + if gun_data ~= nil then + gun_ammo_save = gun_data.ammo_saving or 0 end local gunMeta = itemstack:get_meta() local playerMeta = player:get_meta() if gunMeta:get_int("RW_bullets") > 0 and playerMeta:get_float("rw_cooldown") <= 0 then - playerMeta:set_float("rw_cooldown", gun_cooldown) - - if math.random(1, 100) > gun_ammo_save then - gunMeta:set_int("RW_bullets", gunMeta:get_int("RW_bullets") - 1) - end + playerMeta:set_float("rw_cooldown", gun_data["gun_cooldown"]) player:hud_change(gunammo, "text", gunMeta:get_int("RW_bullets")) local gun_icon = "rangedweapons_emergency_gun_icon.png" - if GunCaps.gun_icon ~= nil then - gun_icon = GunCaps.gun_icon + if gun_data.gun_icon ~= nil then + gun_icon = gun_data.gun_icon end player:hud_change(gunimg, "text", gun_icon) @@ -453,28 +429,27 @@ rangedweapons_shoot_gun = function(itemstack, player) local bullet_size = 0 local bullet_glow = 20 - if GunCaps ~= nil then - gun_damage = GunCaps.gun_damage or {fleshy = 1} - gun_sound = GunCaps.gun_sound or "rangedweapons_glock" - gun_velocity = GunCaps.gun_velocity or 20 - gun_accuracy = GunCaps.gun_accuracy or 100 - gun_cooling = GunCaps.gun_cooling or itemstack:get_name() - gun_crit = GunCaps.gun_crit or 0 - gun_critEffc = GunCaps.gun_critEffc or 1 - gun_projectiles = GunCaps.gun_projectiles or 1 - gun_mobPen = GunCaps.gun_mob_penetration or 0 - gun_nodePen = GunCaps.gun_node_penetration or 0 - gun_shell = GunCaps.has_shell or 0 - gun_durability = GunCaps.gun_durability or 0 - gun_dps = GunCaps.gun_dps or 0 - gun_ammo_save = GunCaps.ammo_saving or 0 - gun_gravity = GunCaps.gun_gravity or 0 - gun_door_breaking = GunCaps.gun_door_breaking or 0 - gun_smokeSize = GunCaps.gun_smokeSize or 0 + if gun_data ~= nil then + gun_damage = gun_data.gun_damage or {fleshy = 1} + gun_sound = gun_data.gun_sound or "rangedweapons_glock" + gun_velocity = gun_data.gun_velocity or 20 + gun_accuracy = gun_data.gun_accuracy or 100 + gun_cooling = gun_data.gun_cooling or itemstack:get_name() + gun_crit = gun_data.gun_crit or 0 + gun_critEffc = gun_data.gun_critEffc or 1 + gun_projectiles = gun_data.gun_projectiles or 1 + gun_mobPen = gun_data.gun_mob_penetration or 0 + gun_nodePen = gun_data.gun_node_penetration or 0 + gun_shell = gun_data.has_shell or 0 + gun_durability = gun_data.gun_durability or 0 + gun_dps = gun_data.gun_dps or 0 + gun_gravity = gun_data.gun_gravity or 0 + gun_door_breaking = gun_data.gun_door_breaking or 0 + gun_smokeSize = gun_data.gun_smokeSize or 0 - if GunCaps.gun_skill ~= nil then - gun_skill = GunCaps.gun_skill[1] or "" - gun_skillChance = GunCaps.gun_skill[2] or 0 + if gun_data.gun_skill ~= nil then + gun_skill = gun_data.gun_skill[1] or "" + gun_skillChance = gun_data.gun_skill[2] or 0 else gun_skill = "" gun_skillChance = 0 @@ -527,16 +502,16 @@ rangedweapons_shoot_gun = function(itemstack, player) local combined_dmg = {} local combined_gravity = gun_gravity + bullet_gravity - for _, gunDmg in pairs(gun_damage) do - if bullet_damage[_] ~= nil then - combined_dmg[_] = gun_damage[_] + bullet_damage[_] + for i, _ in pairs(gun_damage) do + if bullet_damage[i] ~= nil then + combined_dmg[i] = gun_damage[i] + bullet_damage[i] else - combined_dmg[_] = gun_damage[_] + combined_dmg[i] = gun_damage[i] end end - for _, bulletDmg in pairs(bullet_damage) do - if gun_damage[_] == nil then - combined_dmg[_] = bullet_damage[_] + for i, _ in pairs(bullet_damage) do + if gun_damage[i] == nil then + combined_dmg[i] = bullet_damage[i] end end @@ -807,9 +782,9 @@ rangedweapons_launch_projectile = function( ) end - projectiles = projNum or 1 + local projectiles = projNum or 1 for i = 1, projectiles do - rndacc = (100 - accuracy) or 0 + local rndacc = (100 - accuracy) or 0 local spawnpos_x = pos.x + (math.random(-rndacc, rndacc) / 100) local spawnpos_y = pos.y + (math.random(-rndacc, rndacc) / 100) local spawnpos_z = pos.z + (math.random(-rndacc, rndacc) / 100) @@ -856,42 +831,6 @@ rangedweapons_launch_projectile = function( end end -eject_shell = function(itemstack, player, rld_item, rld_time, rldsound, shell) - itemstack:set_name(rld_item) - local meta = player:get_meta() - meta:set_float("rw_cooldown", rld_time) - - local gunMeta = itemstack:get_meta() - - local bulletStack = ItemStack({name = gunMeta:get_string("RW_ammo_name")}) - - minetest.sound_play(rldsound, {player}) - 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.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 --------------------------------------------------- if rweapons_explosives == "true" then @@ -969,9 +908,7 @@ minetest.register_abm( minetest.register_on_joinplayer( function(player) - gunammo = - player:hud_add( - { + player:hud_add({ hud_elem_type = "text", name = "gunammo", text = "", @@ -980,44 +917,32 @@ minetest.register_on_joinplayer( position = {x = 0.7, y = 0.1}, offset = {x = 30, y = 100}, alignment = {x = 0, y = -1} - } - ) - gunimg = - player:hud_add( - { + }) + player:hud_add({ hud_elem_type = "image", text = "rangedweapons_empty_icon.png", scale = {x = 2, y = 2}, position = {x = 0.7, y = 0.065}, offset = {x = 30, y = 100}, alignment = {x = 0, y = -1} - } - ) - ammoimg = - player:hud_add( - { + }) + player:hud_add({ hud_elem_type = "image", text = "rangedweapons_empty_icon.png", scale = {x = 1.5, y = 1.5}, position = {x = 0.725, y = 0.1}, offset = {x = 30, y = 100}, alignment = {x = 0, y = -1} - } - ) - hit = - player:hud_add( - { + }) + player:hud_add({ hud_elem_type = "image", text = "rangedweapons_empty_icon.png", scale = {x = 2, y = 2}, position = {x = 0.5, y = 0.5}, offset = {x = 0, y = 0}, alignment = {x = 0, y = 0} - } - ) - scope_hud = - player:hud_add( - { + }) + player:hud_add({ hud_elem_type = "image", position = {x = 0.5, y = 0.5}, scale = {x = -100, y = -100}, diff --git a/textures/rangedweapons_glock17.png b/textures/weapons/handgun/glock17/rangedweapons_glock17.png similarity index 100% rename from textures/rangedweapons_glock17.png rename to textures/weapons/handgun/glock17/rangedweapons_glock17.png diff --git a/textures/rangedweapons_glock17_icon.png b/textures/weapons/handgun/glock17/rangedweapons_glock17_icon.png similarity index 100% rename from textures/rangedweapons_glock17_icon.png rename to textures/weapons/handgun/glock17/rangedweapons_glock17_icon.png diff --git a/textures/rangedweapons_glock17_rld.png b/textures/weapons/handgun/glock17/rangedweapons_glock17_rld.png similarity index 100% rename from textures/rangedweapons_glock17_rld.png rename to textures/weapons/handgun/glock17/rangedweapons_glock17_rld.png diff --git a/weapon.lua b/weapon.lua index eb4a139..a0360f7 100644 --- a/weapon.lua +++ b/weapon.lua @@ -28,11 +28,10 @@ function weapon.get_weapon_path(modpath, weapon_type, weapon_name) end -function weapon.get_texture_name(weapon_type, weapon_name, texture_name) - return constants.mod_name .. "_" .. weapon_type .. "_" .. weapon_name .. "_" .. texture_name +function weapon.get_texture_name(weapon_name, texture_name) + return constants.mod_name .. "_" .. weapon_name .. "_" .. texture_name end - function weapon.generate_description(weapon_data) local description = "" local text = { @@ -63,4 +62,41 @@ function weapon.generate_description(weapon_data) end +function weapon.eject_shell(itemstack, player, rld_item, rld_time, rldsound, shell) + itemstack:set_name(rld_item) + local meta = player:get_meta() + meta:set_float("rw_cooldown", rld_time) + + local gunMeta = itemstack:get_meta() + + local bulletStack = ItemStack({name = gunMeta:get_string("RW_ammo_name")}) + + minetest.sound_play(rldsound, {player}) + 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.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 diff --git a/weapons/handgun/beretta.lua b/weapons/handgun/beretta.lua index 98fc4de..ff87345 100644 --- a/weapons/handgun/beretta.lua +++ b/weapons/handgun/beretta.lua @@ -11,33 +11,28 @@ local constants = dofile(modpath.."/constants.lua") local beretta_data = { name = "Beretta 92", - damage = handgun["damage"], - accuracy = handgun["accuracy"], - velocity = handgun["velocity"], - knock_back = handgun["knockback"], - critical_chance = handgun["critical_chance"], - critical_efficiency = handgun.critical_efficiency, - gun_skill = {"handgun_skill",43}, capacity = 15, - suitable_ammo = {{"rangedweapons:9mm",capacity}}, - reload_delay = handgun.reload_delay, - cool_down = handgun.cool_down, ammunition_string = "9mm Ammo", - fire_rate = handgun.fire_rate, - magazine = handgun.magazine, - icon = weapon.get_texture_name(weapon_type, weapon_name, "icon.png"), - texture = weapon.get_texture_name(weapon_type, weapon_name, "texture.png"), - reload_icon = weapon.get_texture_name(weapon_type, weapon_name, "reload.png"), - unloaded = constants.mod_name .. ":beretta_r", - cooling = constants.mod_name .. ":beretta_rld", + 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 = constants.mod_name .. ":beretta_r", + unloaded = "rangedweapons:beretta_r", + --cooling = constants.mod_name .. ":beretta_rld", + cooling = "rangedweapons:beretta_rld", fire_sound = "rangedweapons_beretta", - unload_sound = handgun.unload_sound, - gun_projectiles = 1, - has_shell = 1, - gun_durability = 1150, - gun_smokeSize = 5, } +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, @@ -46,7 +41,7 @@ minetest.register_tool("rangedweapons:beretta_rld", { range = 0, loaded_gun = "rangedweapons:beretta", groups = {not_in_creative_inventory = 1}, - inventory_image = beretta_data["reload_icon"] + inventory_image = beretta_data["texture"]["reload"] }) minetest.register_tool("rangedweapons:beretta_r", { @@ -57,17 +52,17 @@ minetest.register_tool("rangedweapons:beretta_r", { load_sound = handgun["load_sound"], range = 0, groups = {not_in_creative_inventory = 1}, - inventory_image = beretta_data["reload_icon"] + inventory_image = beretta_data["texture"]["reload"] }) minetest.register_tool("rangedweapons:beretta", { description = weapon.generate_description(beretta_data), wield_scale = {x=1.1,y=1.1,z=1.05}, range = 0, - inventory_image = beretta_data.texture, + inventory_image = beretta_data["texture"]["default"], RW_gun_capabilities = beretta_data, on_secondary_use = function(itemstack, user, pointed_thing) -rangedweapons_reload_gun(itemstack, user) + rangedweapons_reload_gun(itemstack, user) return itemstack end, on_use = function(itemstack, user, pointed_thing) diff --git a/weapons/handgun/glock17.lua b/weapons/handgun/glock17.lua index 02140a3..44ac2ec 100644 --- a/weapons/handgun/glock17.lua +++ b/weapons/handgun/glock17.lua @@ -1,4 +1,34 @@ +local weapon_type = "handgun" +local weapon_name = "glock17" +local modpath = minetest.get_modpath(minetest.get_current_modname()) + +local item = dofile(modpath.."/item.lua") +local weapon = dofile(modpath.."/weapon.lua") +local handgun = dofile(modpath.."/weapons".."/handgun".."/handgun.lua") +local colors = dofile(modpath.."/colors.lua") +local constants = dofile(modpath.."/constants.lua") + +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", +} + +glock_data["suitable_ammo"] = {{"rangedweapons: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 minetest.register_tool("rangedweapons:glock17_rld", { stack_max= 1, @@ -7,7 +37,7 @@ minetest.register_tool("rangedweapons:glock17_rld", { loaded_gun = "rangedweapons:glock17", range = 0, groups = {not_in_creative_inventory = 1}, - inventory_image = "rangedweapons_glock17_rld.png", + inventory_image = glock_data["texture"]["reload"], }) @@ -48,31 +78,31 @@ minetest.register_tool("rangedweapons:glock17_rrr", { 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"), + description = weapon.generate_description(glock_data), 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", - }, + inventory_image = glock_data["texture"]["default"], + rw_gun_data = { + 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 diff --git a/weapons/handgun/glock19.lua b/weapons/handgun/glock19.lua new file mode 100644 index 0000000..0998870 --- /dev/null +++ b/weapons/handgun/glock19.lua @@ -0,0 +1,83 @@ +minetest.register_tool("rangedweapons:glock19_rld", { + stack_max= 1, + wield_scale = {x=1.1,y=1.1,z=1.05}, + description = "", + loaded_gun = "rangedweapons:glock19", + range = 0, + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_glock17_rld.png", +}) + + +minetest.register_tool("rangedweapons:glock19_r", { + stack_max= 1, + wield_scale = {x=1.2,y=1.2,z=1.2}, + description = "", + rw_next_reload = "rangedweapons:glock19_rr", + load_sound = "rangedweapons_handgun_mag_in", + range = 0, + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_glock17.png", +}) + +minetest.register_tool("rangedweapons:glock19_rr", { + stack_max= 1, + wield_scale = {x=1.2,y=1.2,z=1.2}, + description = "", + rw_next_reload = "rangedweapons:glock19_rrr", + load_sound = "rangedweapons_reload_a", + range = 0, + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_glock17.png", +}) + +minetest.register_tool("rangedweapons:glock19_rrr", { + stack_max= 1, + wield_scale = {x=1.2,y=1.2,z=1.2}, + description = "", + rw_next_reload = "rangedweapons:glock19", + load_sound = "rangedweapons_reload_b", + range = 0, + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_glock17_rld.png", +}) + + + + +minetest.register_tool("rangedweapons:glock19", { + description = "" ..core.colorize("#35cdff","Glock 19\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:glock19_r", + gun_cooling = "rangedweapons:glock19_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, +}) + diff --git a/weapons/handgun/handgun.lua b/weapons/handgun/handgun.lua index be2ebd4..2d4e612 100644 --- a/weapons/handgun/handgun.lua +++ b/weapons/handgun/handgun.lua @@ -2,7 +2,7 @@ local handgun = { damage = 4, - knockback=4, + knock_back=4, critical_chance = 15, critical_efficiency = 2, velocity = 25, -- 2.30.2 From 5f4f9233a741c181277a2034595131070512bf02 Mon Sep 17 00:00:00 2001 From: ranguli Date: Sun, 30 Jan 2022 23:56:42 -0330 Subject: [PATCH 4/8] Rollback some breaking changes --- blocks/antigun_block.lua | 7 +- colors.lua | 8 +- cooldown_stuff.lua | 15 +-- init.lua | 92 +++++++++--------- .../glock17 => }/rangedweapons_glock17.png | Bin weapons/handgun/glock17.lua | 28 +----- weapons/handgun/glock19.lua | 83 ---------------- 7 files changed, 66 insertions(+), 167 deletions(-) rename textures/{weapons/handgun/glock17 => }/rangedweapons_glock17.png (100%) delete mode 100644 weapons/handgun/glock19.lua diff --git a/blocks/antigun_block.lua b/blocks/antigun_block.lua index 55b5746..a9f0c7e 100644 --- a/blocks/antigun_block.lua +++ b/blocks/antigun_block.lua @@ -1,6 +1,9 @@ +local modpath = minetest.get_modpath(minetest.get_current_modname()) +local colors = dofile(modpath.."/colors.lua") + minetest.register_node("rangedweapons:antigun_block", { - description = "" ..core.colorize("#35cdff","Anti-gun block\n")..core.colorize("#FFFFFF", "Prevents people from using guns, in 10 node radius to each side from this block"), - tiles = {"textures/blocks/antigun_block.png"}, + description = core.colorize(colors["title_color"], "Anti-gun block\n") .. core.colorize(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(), }) diff --git a/colors.lua b/colors.lua index b8495af..f077938 100644 --- a/colors.lua +++ b/colors.lua @@ -1,6 +1,8 @@ -local color = {} - -color.white = "#FFFFFF" +local color = { + white = "#ffffff", + turquoise = "#35cdff" +} +color.title_color = color["turquoise"] return color diff --git a/cooldown_stuff.lua b/cooldown_stuff.lua index 2d6dcd6..a7befcc 100644 --- a/cooldown_stuff.lua +++ b/cooldown_stuff.lua @@ -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) @@ -83,7 +78,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() diff --git a/init.lua b/init.lua index 96be539..1184f8f 100644 --- a/init.lua +++ b/init.lua @@ -906,51 +906,53 @@ minetest.register_abm( } ) -minetest.register_on_joinplayer( - function(player) - player:hud_add({ - hud_elem_type = "text", - name = "gunammo", - text = "", - number = 0xFFFFFF, - scale = {x = 100, y = 20}, - position = {x = 0.7, y = 0.1}, - offset = {x = 30, y = 100}, - alignment = {x = 0, y = -1} - }) - player:hud_add({ - hud_elem_type = "image", - text = "rangedweapons_empty_icon.png", - scale = {x = 2, y = 2}, - position = {x = 0.7, y = 0.065}, - offset = {x = 30, y = 100}, - alignment = {x = 0, y = -1} - }) - player:hud_add({ - hud_elem_type = "image", - text = "rangedweapons_empty_icon.png", - scale = {x = 1.5, y = 1.5}, - position = {x = 0.725, y = 0.1}, - offset = {x = 30, y = 100}, - alignment = {x = 0, y = -1} - }) - player:hud_add({ - hud_elem_type = "image", - text = "rangedweapons_empty_icon.png", - scale = {x = 2, y = 2}, - position = {x = 0.5, y = 0.5}, - offset = {x = 0, y = 0}, - alignment = {x = 0, y = 0} - }) - player:hud_add({ - hud_elem_type = "image", - position = {x = 0.5, y = 0.5}, - scale = {x = -100, y = -100}, - text = "rangedweapons_empty_icon.png" - } - ) - end -) +minetest.register_on_joinplayer(function(player) + gunammo = + player:hud_add({ + hud_elem_type = "text", + name = "gunammo", + text = "", + number = 0xFFFFFF, + scale = {x = 100, y = 20}, + position = {x = 0.7, y = 0.1}, + offset = {x = 30, y = 100}, + alignment = {x = 0, y = -1} + }) + gunimg = + player:hud_add({ + hud_elem_type = "image", + text = "rangedweapons_empty_icon.png", + scale = {x = 2, y = 2}, + position = {x = 0.7, y = 0.065}, + offset = {x = 30, y = 100}, + alignment = {x = 0, y = -1} + }) + ammoimg = + player:hud_add({ + hud_elem_type = "image", + text = "rangedweapons_empty_icon.png", + scale = {x = 1.5, y = 1.5}, + position = {x = 0.725, y = 0.1}, + offset = {x = 30, y = 100}, + alignment = {x = 0, y = -1} + }) + hit = + player:hud_add({ + hud_elem_type = "image", + text = "rangedweapons_empty_icon.png", + scale = {x = 2, y = 2}, + position = {x = 0.5, y = 0.5}, + offset = {x = 0, y = 0}, + alignment = {x = 0, y = 0} + }) +scope_hud = + player:hud_add({ + hud_elem_type = "image", + position = { x=0.5, y=0.5 }, + scale = { x=-100, y=-100 }, + text = "rangedweapons_empty_icon.png", + }) +end) local timer = 0 minetest.register_globalstep( diff --git a/textures/weapons/handgun/glock17/rangedweapons_glock17.png b/textures/rangedweapons_glock17.png similarity index 100% rename from textures/weapons/handgun/glock17/rangedweapons_glock17.png rename to textures/rangedweapons_glock17.png diff --git a/weapons/handgun/glock17.lua b/weapons/handgun/glock17.lua index 44ac2ec..c3422f7 100644 --- a/weapons/handgun/glock17.lua +++ b/weapons/handgun/glock17.lua @@ -49,7 +49,7 @@ minetest.register_tool("rangedweapons:glock17_r", { load_sound = "rangedweapons_handgun_mag_in", range = 0, groups = {not_in_creative_inventory = 1}, - inventory_image = "rangedweapons_glock17.png", + inventory_image = glock_data["texture"]["default"], }) minetest.register_tool("rangedweapons:glock17_rr", { @@ -60,7 +60,7 @@ minetest.register_tool("rangedweapons:glock17_rr", { load_sound = "rangedweapons_reload_a", range = 0, groups = {not_in_creative_inventory = 1}, - inventory_image = "rangedweapons_glock17.png", + inventory_image = glock_data["texture"]["default"], }) minetest.register_tool("rangedweapons:glock17_rrr", { @@ -71,7 +71,7 @@ minetest.register_tool("rangedweapons:glock17_rrr", { load_sound = "rangedweapons_reload_b", range = 0, groups = {not_in_creative_inventory = 1}, - inventory_image = "rangedweapons_glock17_rld.png", + inventory_image = glock_data["texture"]["reload"], }) @@ -82,27 +82,7 @@ minetest.register_tool("rangedweapons:glock17", { wield_scale = {x=1.2,y=1.2,z=1.2}, range = 0, inventory_image = glock_data["texture"]["default"], - rw_gun_data = { - 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", - }, + rw_gun_data = glock_data, on_secondary_use = function(itemstack, user, pointed_thing) rangedweapons_reload_gun(itemstack, user) return itemstack diff --git a/weapons/handgun/glock19.lua b/weapons/handgun/glock19.lua deleted file mode 100644 index 0998870..0000000 --- a/weapons/handgun/glock19.lua +++ /dev/null @@ -1,83 +0,0 @@ -minetest.register_tool("rangedweapons:glock19_rld", { - stack_max= 1, - wield_scale = {x=1.1,y=1.1,z=1.05}, - description = "", - loaded_gun = "rangedweapons:glock19", - range = 0, - groups = {not_in_creative_inventory = 1}, - inventory_image = "rangedweapons_glock17_rld.png", -}) - - -minetest.register_tool("rangedweapons:glock19_r", { - stack_max= 1, - wield_scale = {x=1.2,y=1.2,z=1.2}, - description = "", - rw_next_reload = "rangedweapons:glock19_rr", - load_sound = "rangedweapons_handgun_mag_in", - range = 0, - groups = {not_in_creative_inventory = 1}, - inventory_image = "rangedweapons_glock17.png", -}) - -minetest.register_tool("rangedweapons:glock19_rr", { - stack_max= 1, - wield_scale = {x=1.2,y=1.2,z=1.2}, - description = "", - rw_next_reload = "rangedweapons:glock19_rrr", - load_sound = "rangedweapons_reload_a", - range = 0, - groups = {not_in_creative_inventory = 1}, - inventory_image = "rangedweapons_glock17.png", -}) - -minetest.register_tool("rangedweapons:glock19_rrr", { - stack_max= 1, - wield_scale = {x=1.2,y=1.2,z=1.2}, - description = "", - rw_next_reload = "rangedweapons:glock19", - load_sound = "rangedweapons_reload_b", - range = 0, - groups = {not_in_creative_inventory = 1}, - inventory_image = "rangedweapons_glock17_rld.png", -}) - - - - -minetest.register_tool("rangedweapons:glock19", { - description = "" ..core.colorize("#35cdff","Glock 19\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:glock19_r", - gun_cooling = "rangedweapons:glock19_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, -}) - -- 2.30.2 From bc414719f1750a5c62cc52ecbe6c012b2595ec05 Mon Sep 17 00:00:00 2001 From: ranguli Date: Mon, 31 Jan 2022 18:21:34 -0330 Subject: [PATCH 5/8] Move constants to namespaced table, cleanup code, fix line endings --- blocks/antigun_block.lua | 3 +- colors.lua | 8 +-- constants.lua | 5 -- crafting.lua | 13 +--- init.lua | 7 +- skills.lua | 34 +++++----- weapon.lua | 3 +- weapons/handgun/beretta.lua | 20 +++--- weapons/handgun/glock17.lua | 126 ++++++++++++++++++++---------------- 9 files changed, 104 insertions(+), 115 deletions(-) delete mode 100644 constants.lua diff --git a/blocks/antigun_block.lua b/blocks/antigun_block.lua index a9f0c7e..067e99c 100644 --- a/blocks/antigun_block.lua +++ b/blocks/antigun_block.lua @@ -1,8 +1,7 @@ local modpath = minetest.get_modpath(minetest.get_current_modname()) -local colors = dofile(modpath.."/colors.lua") minetest.register_node("rangedweapons:antigun_block", { - description = core.colorize(colors["title_color"], "Anti-gun block\n") .. core.colorize(colors.white, "Prevents people from using guns, in 10 node radius to each side from this block"), + description = core.colorize(rangedweapons.colors.title_color, "Anti-gun block\n") .. core.colorize(rangedweapons.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(), diff --git a/colors.lua b/colors.lua index f077938..e441f55 100644 --- a/colors.lua +++ b/colors.lua @@ -1,8 +1,6 @@ -local color = { +rangedweapons.colors = { white = "#ffffff", - turquoise = "#35cdff" + turquoise = "35cdff" } -color.title_color = color["turquoise"] - -return color +ranged_weapons.color.title_color = color.turquoise diff --git a/constants.lua b/constants.lua deleted file mode 100644 index 4d48859..0000000 --- a/constants.lua +++ /dev/null @@ -1,5 +0,0 @@ -local constants = {} - -constants.mod_name = "rangedweapons" - -return constants diff --git a/crafting.lua b/crafting.lua index b821ab8..1008913 100644 --- a/crafting.lua +++ b/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 \ No newline at end of file +end diff --git a/init.lua b/init.lua index 1184f8f..80f3ce4 100644 --- a/init.lua +++ b/init.lua @@ -13,6 +13,9 @@ dofile(modpath .. "/armor.lua") dofile(modpath .. "/blocks/antigun_block.lua") +rangedweapons = {} +rangedweapons.mod_name = "rangedweapons" + -- Load all weapons for k, v in pairs(weapon.weapons) do weapon_type = k @@ -22,10 +25,6 @@ for k, v in pairs(weapon.weapons) do end end ----- ----- gun_funcs ----- - make_sparks = function(pos) minetest.sound_play("rengedweapons_ricochet", {pos, gain = 0.75}) for i = 1, 9 do diff --git a/skills.lua b/skills.lua index 050b98b..585a682 100644 --- a/skills.lua +++ b/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 diff --git a/weapon.lua b/weapon.lua index a0360f7..14ce312 100644 --- a/weapon.lua +++ b/weapon.lua @@ -1,5 +1,4 @@ local modpath = minetest.get_modpath(minetest.get_current_modname()) -local colors = dofile(modpath.."/colors.lua") local constants = dofile(modpath.."/constants.lua") local weapon = {} @@ -52,7 +51,7 @@ function weapon.generate_description(weapon_data) if i == 0 then color_text = core.colorize(item.title_color, v) else - color_text = core.colorize(colors.white, v) + color_text = core.colorize(rangedweapons.colors.white, v) end description = description .. color_text diff --git a/weapons/handgun/beretta.lua b/weapons/handgun/beretta.lua index ff87345..f7657a4 100644 --- a/weapons/handgun/beretta.lua +++ b/weapons/handgun/beretta.lua @@ -1,13 +1,13 @@ local weapon_type = "handgun" local weapon_name = "beretta" +local weapon_item_name = rangedweapons.mod_name .. ":" .. weapon_name + local modpath = minetest.get_modpath(minetest.get_current_modname()) local item = dofile(modpath.."/item.lua") local weapon = dofile(modpath.."/weapon.lua") local handgun = dofile(modpath.."/weapons".."/handgun".."/handgun.lua") -local colors = dofile(modpath.."/colors.lua") -local constants = dofile(modpath.."/constants.lua") local beretta_data = { name = "Beretta 92", @@ -18,11 +18,9 @@ local beretta_data = { default = weapon.get_texture_name(weapon_type, weapon_name, "texture.png"), reload = weapon.get_texture_name(weapon_type, weapon_name, "reload.png"), }, - --unloaded = constants.mod_name .. ":beretta_r", - unloaded = "rangedweapons:beretta_r", - --cooling = constants.mod_name .. ":beretta_rld", - cooling = "rangedweapons:beretta_rld", - fire_sound = "rangedweapons_beretta", + unloaded = rangedweapons.mod_name .. ":beretta_r", + cooling = rangedweapons.mod_name .. ":beretta_rld", + fire_sound = rangedweapons.mod_name .. "_beretta", } beretta_data["suitable_ammo"] = {{"rangedweapons:9mm",beretta_data["capacity"]}} @@ -35,11 +33,11 @@ for k,v in pairs(handgun) do end minetest.register_tool("rangedweapons:beretta_rld", { - stack_max= 1, + stack_max=1, wield_scale = {x=1.1,y=1.1,z=1.05}, description = "", range = 0, - loaded_gun = "rangedweapons:beretta", + loaded_gun = weapon_item_name, groups = {not_in_creative_inventory = 1}, inventory_image = beretta_data["texture"]["reload"] }) @@ -48,14 +46,14 @@ 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", + 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("rangedweapons:beretta", { +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, diff --git a/weapons/handgun/glock17.lua b/weapons/handgun/glock17.lua index c3422f7..7cfdbf3 100644 --- a/weapons/handgun/glock17.lua +++ b/weapons/handgun/glock17.lua @@ -1,14 +1,14 @@ -local weapon_type = "handgun" -local weapon_name = "glock17" +local weapon = dofile(modpath.."/weapon.lua") +local handgun = dofile(modpath.."/weapons".."/handgun".."/handgun.lua") local modpath = minetest.get_modpath(minetest.get_current_modname()) -local item = dofile(modpath.."/item.lua") -local weapon = dofile(modpath.."/weapon.lua") -local handgun = dofile(modpath.."/weapons".."/handgun".."/handgun.lua") -local colors = dofile(modpath.."/colors.lua") -local constants = dofile(modpath.."/constants.lua") +local weapon_type = "handgun" +local weapon_name = "glock17" +local weapon_item_name = rangedweapons.mod_name .. ":" .. weapon_name + +-- Attributes for the weapon local glock_data = { name = "Glock 17", capacity = 17, @@ -19,9 +19,10 @@ local glock_data = { reload = "rangedweapons_glock17_rld.png", }, fire_sound = "rangedweapons_glock", + wield_scale = {x = 1.2, y = 1.2, z =1.2} } -glock_data["suitable_ammo"] = {{"rangedweapons:9mm",glock_data["capacity"]}} +glock_data.suitable_ammo = {{rangedweapons.mod_name .. ":" .. "9mm", glock_data.capacity}} -- Populate any unset values with handgun defaults for k,v in pairs(handgun) do @@ -30,58 +31,12 @@ for k,v in pairs(handgun) do end end -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 = glock_data["texture"]["reload"], -}) - - -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 = glock_data["texture"]["default"], -}) - -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 = glock_data["texture"]["default"], -}) - -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 = glock_data["texture"]["reload"], -}) - - - - +-- Define the Glock 17 item minetest.register_tool("rangedweapons:glock17", { description = weapon.generate_description(glock_data), - wield_scale = {x=1.2,y=1.2,z=1.2}, + wield_scale = glock_data.default_wield_scale, range = 0, - inventory_image = glock_data["texture"]["default"], + inventory_image = glock_data.texture.default, rw_gun_data = glock_data, on_secondary_use = function(itemstack, user, pointed_thing) rangedweapons_reload_gun(itemstack, user) @@ -92,3 +47,60 @@ 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"}, + } +}) -- 2.30.2 From ee29de43b6d539051203713f1882c7af9fad363f Mon Sep 17 00:00:00 2001 From: ranguli Date: Mon, 31 Jan 2022 18:24:10 -0330 Subject: [PATCH 6/8] Change item.lua stuff into namespaced table --- item.lua | 6 ------ weapon.lua | 2 +- weapons/handgun/beretta.lua | 1 - 3 files changed, 1 insertion(+), 8 deletions(-) delete mode 100644 item.lua diff --git a/item.lua b/item.lua deleted file mode 100644 index 7f6408d..0000000 --- a/item.lua +++ /dev/null @@ -1,6 +0,0 @@ -local item = {} - -item.title_color = "#35cdff" - - -return item diff --git a/weapon.lua b/weapon.lua index 14ce312..bc3a745 100644 --- a/weapon.lua +++ b/weapon.lua @@ -49,7 +49,7 @@ function weapon.generate_description(weapon_data) for i,v in ipairs(text) do if i == 0 then - color_text = core.colorize(item.title_color, v) + color_text = core.colorize(rangedweapons.colors.title_color, v) else color_text = core.colorize(rangedweapons.colors.white, v) end diff --git a/weapons/handgun/beretta.lua b/weapons/handgun/beretta.lua index f7657a4..ccf0d38 100644 --- a/weapons/handgun/beretta.lua +++ b/weapons/handgun/beretta.lua @@ -5,7 +5,6 @@ local weapon_item_name = rangedweapons.mod_name .. ":" .. weapon_name local modpath = minetest.get_modpath(minetest.get_current_modname()) -local item = dofile(modpath.."/item.lua") local weapon = dofile(modpath.."/weapon.lua") local handgun = dofile(modpath.."/weapons".."/handgun".."/handgun.lua") -- 2.30.2 From 3f7df33cc1ce8424d6266d4e99ea6bc820e81cf8 Mon Sep 17 00:00:00 2001 From: ranguli Date: Mon, 31 Jan 2022 18:26:15 -0330 Subject: [PATCH 7/8] Remove redundant if statements in armor.lua --- armor.lua | 4 ---- 1 file changed, 4 deletions(-) diff --git a/armor.lua b/armor.lua index 6b77967..3cf705e 100644 --- a/armor.lua +++ b/armor.lua @@ -1,9 +1,5 @@ if minetest.global_exists("armor") and armor.attributes then table.insert(armor.attributes, "bullet_res") -end -if minetest.global_exists("armor") and armor.attributes then table.insert(armor.attributes, "ammo_save") -end -if minetest.global_exists("armor") and armor.attributes then table.insert(armor.attributes, "ranged_dmg") end -- 2.30.2 From 392a6554332482445d43639d518c8487323036e7 Mon Sep 17 00:00:00 2001 From: ranguli Date: Mon, 31 Jan 2022 19:25:31 -0330 Subject: [PATCH 8/8] Refactor out a drop_magazine function, lots of variable name tweaking --- blocks/antigun_block.lua | 2 +- colors.lua | 4 +- cooldown_stuff.lua | 6 +- init.lua | 121 ++++++++++++++---------------------- weapon.lua | 75 ++++++++++++++-------- weapons/handgun/beretta.lua | 10 +-- weapons/handgun/glock17.lua | 8 +-- weapons/handgun/handgun.lua | 2 +- 8 files changed, 108 insertions(+), 120 deletions(-) diff --git a/blocks/antigun_block.lua b/blocks/antigun_block.lua index 067e99c..3ece762 100644 --- a/blocks/antigun_block.lua +++ b/blocks/antigun_block.lua @@ -1,7 +1,7 @@ local modpath = minetest.get_modpath(minetest.get_current_modname()) minetest.register_node("rangedweapons:antigun_block", { - description = core.colorize(rangedweapons.colors.title_color, "Anti-gun block\n") .. core.colorize(rangedweapons.colors.white, "Prevents people from using guns, in 10 node radius to each side from this 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(), diff --git a/colors.lua b/colors.lua index e441f55..53db3d4 100644 --- a/colors.lua +++ b/colors.lua @@ -1,6 +1,6 @@ -rangedweapons.colors = { +ranged_weapons.colors = { white = "#ffffff", turquoise = "35cdff" } -ranged_weapons.color.title_color = color.turquoise +ranged_weapons.colors.title_color = ranged_weapons.colors.turquoise diff --git a/cooldown_stuff.lua b/cooldown_stuff.lua index a7befcc..f7e1109 100644 --- a/cooldown_stuff.lua +++ b/cooldown_stuff.lua @@ -65,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() @@ -86,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 diff --git a/init.lua b/init.lua index 80f3ce4..afc0129 100644 --- a/init.lua +++ b/init.lua @@ -1,7 +1,11 @@ local modpath = minetest.get_modpath(minetest.get_current_modname()) +ranged_weapons = {} +ranged_weapons.mod_name = "rangedweapons" + local weapon = dofile(modpath .. "/weapon.lua") +dofile(modpath .. "/colors.lua") dofile(modpath .. "/settings.lua") dofile(modpath .. "/cooldown_stuff.lua") dofile(modpath .. "/skills.lua") @@ -13,8 +17,6 @@ dofile(modpath .. "/armor.lua") dofile(modpath .. "/blocks/antigun_block.lua") -rangedweapons = {} -rangedweapons.mod_name = "rangedweapons" -- Load all weapons for k, v in pairs(weapon.weapons) do @@ -61,47 +63,39 @@ end rangedweapons_reload_gun = function(itemstack, player) local gun_data = itemstack:get_definition().rw_gun_data - if gun_data ~= nil then - gun_unload_sound = gun_data.gun_unload_sound or "" - end - - minetest.sound_play(gun_unload_sound, {player}) + minetest.sound_play(gun_data.unload_sound, {player}) local playerMeta = player:get_meta() local gunMeta = itemstack:get_meta() - gunMeta:set_float("RW_reload_delay", gun_data["reload_delay"]) + gunMeta:set_float("rw_reload_delay", gun_data.reload_delay) - playerMeta:set_float("rw_cooldown", gun_data["reload_delay"]) + playerMeta:set_float("rw_cooldown", gun_data.reload_delay) local player_has_ammo = 0 local clipSize = 0 local reload_ammo = "" - -- If we have the right type of ammo in our inventory? - if gun_data.suitable_ammo ~= nil then - -- Get the players inventory and iterate over it - local inv = player:get_inventory() - for i = 1, inv:get_size("main") do - -- For each type of suitable ammo in the inventory, - -- if the ammo is the kind we're looking for - for _, ammo in pairs(gun_data.suitable_ammo) do - if inv:get_stack("main", i):get_name() == ammo[1] then - -- Then mark that stack of ammo as what we will use - -- to reload - reload_ammo = inv:get_stack("main", i) - -- And set the clipsize?? - clipSize = ammo[2] - player_has_ammo = 1 - break - end - end + local inv = player:get_inventory() - if player_has_ammo == 1 then + -- TODO: break out into separate function. + -- Iterate over player inventory searching for ammo, and mark it + -- for use during reload. + for i = 1, inv:get_size("main") do + for _, ammo in pairs(gun_data.suitable_ammo) do + if inv:get_stack("main", i):get_name() == ammo[1] then + reload_ammo = inv:get_stack("main", i) + clipSize = ammo[2] + + player_has_ammo = 1 break end end + + if player_has_ammo == 1 then + break + end end if player_has_ammo == 1 then @@ -111,43 +105,29 @@ rangedweapons_reload_gun = function(itemstack, player) ammo_icon = reload_ammo:get_definition().inventory_image end - player:hud_change(gunimg, "text", gun_data["texture"]["icon"]) + player:hud_change(gunimg, "text", gun_data.texture.icon) player:hud_change(ammoimg, "text", ammo_icon) local gunMeta = itemstack:get_meta() - local ammoCount = gunMeta:get_int("RW_bullets") - local ammoName = gunMeta:get_string("RW_ammo_name") + local ammoCount = gunMeta:get_int("rw_bullets") + local ammoName = gunMeta:get_string("rw_ammo_name") local inv = player:get_inventory() inv:add_item("main", ammoName .. " " .. ammoCount) if inv:contains_item("main", reload_ammo:get_name() .. " " .. clipSize) then inv:remove_item("main", reload_ammo:get_name() .. " " .. clipSize) - gunMeta:set_int("RW_bullets", clipSize) + gunMeta:set_int("rw_bullets", clipSize) else - gunMeta:set_int("RW_bullets", reload_ammo:get_count()) + gunMeta:set_int("rw_bullets", reload_ammo:get_count()) inv:remove_item("main", reload_ammo:get_name() .. " " .. reload_ammo:get_count()) end - gunMeta:set_string("RW_ammo_name", reload_ammo:get_name()) + gunMeta:set_string("rw_ammo_name", reload_ammo:get_name()) - player:hud_change(gunammo, "text", gunMeta:get_int("RW_bullets")) + player:hud_change(gunammo, "text", gunMeta:get_int("rw_bullets")) - if gun_data.gun_magazine ~= nil then - 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") - if obj then - obj:set_properties({textures = {gun_data.gun_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 + weapon.drop_magazine(player, gun_data) if gun_data.gun_unloaded ~= nil then itemstack:set_name(gun_data.gun_unloaded) @@ -157,13 +137,12 @@ end rangedweapons_single_load_gun = function(itemstack, player) local gun_data = itemstack:get_definition().rw_gun_data - - local reload_delay = gun_data["reload_delay"] + local reload_delay = gun_data.reload_delay local playerMeta = player:get_meta() local gunMeta = itemstack:get_meta() - gunMeta:set_float("RW_reload_delay", reload_delay) + gunMeta:set_float("rw_reload_delay", reload_delay) playerMeta:set_float("rw_cooldown", reload_delay) local player_has_ammo = 0 @@ -190,39 +169,33 @@ rangedweapons_single_load_gun = function(itemstack, player) end if player_has_ammo == 1 then - local gun_icon = "rangedweapons_emergency_gun_icon.png" - - if gun_data.gun_icon ~= nil then - gun_icon = gun_data.gun_icon - end - local ammo_icon = "rangedweapons_emergency_ammo_icon.png" if reload_ammo:get_definition().inventory_image ~= nil then ammo_icon = reload_ammo:get_definition().inventory_image end - player:hud_change(gunimg, "text", gun_icon) + player:hud_change(gunimg, "text", gun_data.texture.icon) player:hud_change(ammoimg, "text", ammo_icon) local gunMeta = itemstack:get_meta() - local ammoCount = gunMeta:get_int("RW_bullets") - local ammoName = gunMeta:get_string("RW_ammo_name") + local ammoCount = gunMeta:get_int("rw_bullets") + local ammoName = gunMeta:get_string("rw_ammo_name") local inv = player:get_inventory() if ammoName ~= reload_ammo:get_name() then inv:add_item("main", ammoName .. " " .. ammoCount) - gunMeta:set_int("RW_bullets", 0) + gunMeta:set_int("rw_bullets", 0) end - if inv:contains_item("main", reload_ammo:get_name()) and gunMeta:get_int("RW_bullets") < clipSize then + if inv:contains_item("main", reload_ammo:get_name()) and gunMeta:get_int("rw_bullets") < clipSize then inv:remove_item("main", reload_ammo:get_name()) - gunMeta:set_int("RW_bullets", gunMeta:get_int("RW_bullets") + 1) + gunMeta:set_int("rw_bullets", gunMeta:get_int("rw_bullets") + 1) end - gunMeta:set_string("RW_ammo_name", reload_ammo:get_name()) + gunMeta:set_string("rw_ammo_name", reload_ammo:get_name()) - player:hud_change(gunammo, "text", gunMeta:get_int("RW_bullets")) + player:hud_change(gunammo, "text", gunMeta:get_int("rw_bullets")) if gun_data.gun_unloaded ~= nil then itemstack:set_name(gun_data.gun_unloaded) @@ -371,21 +344,17 @@ rangedweapons_shoot_gun = function(itemstack, player) local gunMeta = itemstack:get_meta() local playerMeta = player:get_meta() - if gunMeta:get_int("RW_bullets") > 0 and playerMeta:get_float("rw_cooldown") <= 0 then - playerMeta:set_float("rw_cooldown", gun_data["gun_cooldown"]) + if gunMeta:get_int("rw_bullets") > 0 and playerMeta:get_float("rw_cooldown") <= 0 then + playerMeta:set_float("rw_cooldown", gun_data.cooldown) - player:hud_change(gunammo, "text", gunMeta:get_int("RW_bullets")) + player:hud_change(gunammo, "text", gunMeta:get_int("rw_bullets")) - local gun_icon = "rangedweapons_emergency_gun_icon.png" - if gun_data.gun_icon ~= nil then - gun_icon = gun_data.gun_icon - end - player:hud_change(gunimg, "text", gun_icon) + player:hud_change(gunimg, "text", gun_data.texture.icon) local OnCollision = function() end - local bulletStack = ItemStack({name = gunMeta:get_string("RW_ammo_name")}) + local bulletStack = ItemStack({name = gunMeta:get_string("rw_ammo_name")}) AmmoCaps = bulletStack:get_definition().RW_ammo_capabilities local gun_damage = {fleshy = 1} diff --git a/weapon.lua b/weapon.lua index bc3a745..5c81c94 100644 --- a/weapon.lua +++ b/weapon.lua @@ -1,6 +1,4 @@ local modpath = minetest.get_modpath(minetest.get_current_modname()) -local constants = dofile(modpath.."/constants.lua") - local weapon = {} weapon.weapons = { @@ -28,30 +26,30 @@ end function weapon.get_texture_name(weapon_name, texture_name) - return constants.mod_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"]), + 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(rangedweapons.colors.title_color, v) + color_text = core.colorize(ranged_weapons.colors.title_color, v) else - color_text = core.colorize(rangedweapons.colors.white, v) + color_text = core.colorize(ranged_weapons.colors.white, v) end description = description .. color_text @@ -61,19 +59,44 @@ function weapon.generate_description(weapon_data) end -function weapon.eject_shell(itemstack, player, rld_item, rld_time, rldsound, shell) - itemstack:set_name(rld_item) - local meta = player:get_meta() - meta:set_float("rw_cooldown", rld_time) - - local gunMeta = itemstack:get_meta() - - local bulletStack = ItemStack({name = gunMeta:get_string("RW_ammo_name")}) - - minetest.sound_play(rldsound, {player}) +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") diff --git a/weapons/handgun/beretta.lua b/weapons/handgun/beretta.lua index ccf0d38..8108de4 100644 --- a/weapons/handgun/beretta.lua +++ b/weapons/handgun/beretta.lua @@ -1,10 +1,10 @@ local weapon_type = "handgun" local weapon_name = "beretta" -local weapon_item_name = rangedweapons.mod_name .. ":" .. weapon_name - +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") @@ -17,9 +17,9 @@ local beretta_data = { default = weapon.get_texture_name(weapon_type, weapon_name, "texture.png"), reload = weapon.get_texture_name(weapon_type, weapon_name, "reload.png"), }, - unloaded = rangedweapons.mod_name .. ":beretta_r", - cooling = rangedweapons.mod_name .. ":beretta_rld", - fire_sound = rangedweapons.mod_name .. "_beretta", + 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"]}} diff --git a/weapons/handgun/glock17.lua b/weapons/handgun/glock17.lua index 7cfdbf3..198c666 100644 --- a/weapons/handgun/glock17.lua +++ b/weapons/handgun/glock17.lua @@ -1,12 +1,12 @@ +local modpath = minetest.get_modpath(minetest.get_current_modname()) + local weapon = dofile(modpath.."/weapon.lua") local handgun = dofile(modpath.."/weapons".."/handgun".."/handgun.lua") -local modpath = minetest.get_modpath(minetest.get_current_modname()) - local weapon_type = "handgun" local weapon_name = "glock17" -local weapon_item_name = rangedweapons.mod_name .. ":" .. weapon_name +local weapon_item_name = ranged_weapons.mod_name .. ":" .. weapon_name -- Attributes for the weapon local glock_data = { @@ -22,7 +22,7 @@ local glock_data = { wield_scale = {x = 1.2, y = 1.2, z =1.2} } -glock_data.suitable_ammo = {{rangedweapons.mod_name .. ":" .. "9mm", glock_data.capacity}} +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 diff --git a/weapons/handgun/handgun.lua b/weapons/handgun/handgun.lua index 2d4e612..e1636e3 100644 --- a/weapons/handgun/handgun.lua +++ b/weapons/handgun/handgun.lua @@ -10,7 +10,7 @@ local handgun = { magazine = "rangedweapons:handgun_mag_black", accuracy = 94, fire_rate = 0.9, - cool_down = 0.4, + cooldown = 0.4, reload_delay = 0.5, projectiles = 1, has_shell = 1, -- 2.30.2