From ac5872411b8d9997a79a63a6418802f457736807 Mon Sep 17 00:00:00 2001 From: david Date: Fri, 2 Apr 2021 22:15:46 -0400 Subject: [PATCH] Unpacking ZIPs DONE Stage 5: Unpack of 0.4 Making v0.4 branch here. Unpacking completed. --- aa12.lua | 262 ++--- ak47.lua | 233 ++-- ammo.lua | 848 ++++++++++++-- awp.lua | 263 ++--- benelli.lua | 286 +---- beretta.lua | 214 +--- bullet_knockback.lua | 15 + cooldown_stuff.lua | 102 ++ crafting.lua | 641 ++++++++++ deagle.lua | 276 ++--- depends.txt | 6 +- explosives.lua | 13 +- forcegun.lua | 148 +++ g36.lua | 231 +--- generator.lua | 30 +- glass_breaking.lua | 81 -- glock17.lua | 240 ++-- hand_grenade.lua | 111 +- init.lua | 996 +++++++++++++--- jackhammer.lua | 273 +---- javelin - Copy.lua | 139 +++ javelin.lua | 169 +-- kriss_sv.lua | 227 +--- laser_blaster.lua | 179 +-- laser_rifle.lua | 179 +-- laser_shotgun.lua | 207 +--- license.txt | 2 +- luger.lua | 240 +--- m16.lua | 230 +--- m1991.lua | 78 ++ m200.lua | 268 ++--- m60.lua | 209 +--- m79.lua | 133 +-- makarov.lua | 236 +--- milkor.lua | 136 +-- minigun.lua | 216 +--- misc.lua | 54 +- mod.conf | 4 + mp40.lua | 226 +--- mp5.lua | 228 +--- python.lua | 240 +--- remington.lua | 269 +---- rpg.lua | 152 +-- rpk.lua | 226 +--- scar.lua | 230 +--- settings.lua | 45 +- shurikens.lua | 1040 ++++------------- skills.lua | 154 +++ sounds/hit.ogg | Bin 0 -> 5031 bytes sounds/rangedweapons_handgun_mag_in.ogg | Bin 0 -> 9044 bytes sounds/rangedweapons_handgun_mag_out.ogg | Bin 0 -> 6874 bytes sounds/rangedweapons_rifle_clip_in.ogg | Bin 0 -> 6478 bytes sounds/rangedweapons_rifle_clip_out.ogg | Bin 0 -> 6433 bytes sounds/rangedweapons_rifle_reload_a.ogg | Bin 0 -> 6026 bytes sounds/rangedweapons_rifle_reload_b.ogg | Bin 0 -> 5595 bytes sounds/rangedweapons_shell_insert.ogg | Bin 0 -> 6631 bytes sounds/rengedweapons_ricochet.ogg | Bin 0 -> 10279 bytes spas12.lua | 287 +---- svd.lua | 262 ++--- taurus.lua | 242 +--- tec9.lua | 231 +--- textures/rangedweapons_408cheytac.png | Bin 0 -> 3114 bytes textures/rangedweapons_44.png | Bin 0 -> 3007 bytes textures/rangedweapons_45acp.png | Bin 0 -> 3011 bytes textures/rangedweapons_50ae.png | Bin 0 -> 3046 bytes textures/rangedweapons_aa12_icon.png | Bin 0 -> 3171 bytes textures/rangedweapons_aa12_rld.png | Bin 0 -> 3300 bytes textures/rangedweapons_ak47_icon.png | Bin 0 -> 3371 bytes textures/rangedweapons_ak47_rld.png | Bin 0 -> 3333 bytes textures/rangedweapons_antigun_block.png | Bin 0 -> 2984 bytes textures/rangedweapons_arifle_img.png | Bin 0 -> 2982 bytes textures/rangedweapons_assaultrifle_mag.png | Bin 0 -> 2918 bytes textures/rangedweapons_awp_icon.png | Bin 0 -> 3295 bytes textures/rangedweapons_awp_noclip.png | Bin 0 -> 3375 bytes textures/rangedweapons_benelli_icon.png | Bin 0 -> 3157 bytes textures/rangedweapons_beretta_icon.png | Bin 0 -> 3082 bytes textures/rangedweapons_blood.png | Bin 0 -> 3106 bytes textures/rangedweapons_blood_alt.png | Bin 0 -> 2854 bytes textures/rangedweapons_blue_ray.png | Bin 0 -> 2991 bytes textures/rangedweapons_boltaction_img.png | Bin 0 -> 2898 bytes textures/rangedweapons_buckball.png | Bin 3017 -> 2891 bytes textures/rangedweapons_bullethole.png | Bin 0 -> 2819 bytes textures/rangedweapons_bulletshot.png | Bin 0 -> 2935 bytes textures/rangedweapons_crit.png | Bin 0 -> 3309 bytes textures/rangedweapons_crithit.png | Bin 0 -> 2918 bytes textures/rangedweapons_deagle_icon.png | Bin 0 -> 3219 bytes textures/rangedweapons_drum_mag.png | Bin 0 -> 2988 bytes .../rangedweapons_emergency_ammo_icon.png | Bin 0 -> 2971 bytes textures/rangedweapons_emergency_gun_icon.png | Bin 0 -> 3103 bytes textures/rangedweapons_empty_icon.png | Bin 0 -> 2823 bytes textures/rangedweapons_fire_particle.png | Bin 0 -> 3743 bytes textures/rangedweapons_force_blast.png | Bin 0 -> 6038 bytes textures/rangedweapons_force_bullet.png | Bin 0 -> 2954 bytes textures/rangedweapons_forcegun.png | Bin 0 -> 3422 bytes textures/rangedweapons_g36_icon.png | Bin 0 -> 3177 bytes textures/rangedweapons_g36_rld.png | Bin 0 -> 3340 bytes textures/rangedweapons_glock17_icon.png | Bin 0 -> 3050 bytes textures/rangedweapons_golden_deagle.png | Bin 0 -> 3093 bytes textures/rangedweapons_golden_deagle_icon.png | Bin 0 -> 3247 bytes textures/rangedweapons_golden_deagle_rld.png | Bin 0 -> 3103 bytes textures/rangedweapons_green_ray.png | Bin 0 -> 3000 bytes textures/rangedweapons_handgun_img.png | Bin 0 -> 2939 bytes textures/rangedweapons_handgun_mag_black.png | Bin 0 -> 2861 bytes textures/rangedweapons_handgun_mag_white.png | Bin 0 -> 2861 bytes textures/rangedweapons_headhit.png | Bin 0 -> 2914 bytes textures/rangedweapons_headshot.png | Bin 0 -> 3316 bytes textures/rangedweapons_heavy_img.png | Bin 0 -> 2964 bytes textures/rangedweapons_hit.png | Bin 0 -> 2901 bytes textures/rangedweapons_jackhammer.png | Bin 3444 -> 3467 bytes textures/rangedweapons_jackhammer_icon.png | Bin 0 -> 3325 bytes textures/rangedweapons_jackhammer_rld.png | Bin 0 -> 3431 bytes textures/rangedweapons_kriss_sv_icon.png | Bin 0 -> 3358 bytes textures/rangedweapons_kriss_sv_rld.png | Bin 0 -> 3453 bytes textures/rangedweapons_leaf.png | Bin 0 -> 3249 bytes textures/rangedweapons_luger_icon.png | Bin 0 -> 3297 bytes textures/rangedweapons_m16_icon.png | Bin 0 -> 3155 bytes textures/rangedweapons_m16_rld.png | Bin 0 -> 3168 bytes textures/rangedweapons_m1991.png | Bin 0 -> 3050 bytes textures/rangedweapons_m1991_icon.png | Bin 0 -> 3158 bytes textures/rangedweapons_m1991_rld.png | Bin 0 -> 3050 bytes textures/rangedweapons_m200_icon.png | Bin 0 -> 3144 bytes textures/rangedweapons_m200_noclip.png | Bin 0 -> 3286 bytes textures/rangedweapons_m60_icon.png | Bin 0 -> 3396 bytes textures/rangedweapons_m60_rld.png | Bin 0 -> 3281 bytes textures/rangedweapons_m79_icon.png | Bin 0 -> 3147 bytes textures/rangedweapons_machinepistol_img.png | Bin 0 -> 2977 bytes textures/rangedweapons_machinepistol_mag.png | Bin 0 -> 2855 bytes textures/rangedweapons_magazine_handgun.png | Bin 0 -> 2876 bytes textures/rangedweapons_magazine_mp5.png | Bin 0 -> 2912 bytes textures/rangedweapons_magazine_smg.png | Bin 0 -> 2875 bytes textures/rangedweapons_makarov_icon.png | Bin 0 -> 3146 bytes textures/rangedweapons_milkor_icon.png | Bin 0 -> 3449 bytes textures/rangedweapons_minigun_icon.png | Bin 0 -> 3199 bytes textures/rangedweapons_minigun_rld.png | Bin 0 -> 3573 bytes textures/rangedweapons_mp40_icon.png | Bin 0 -> 3224 bytes textures/rangedweapons_mp40_rld.png | Bin 0 -> 3201 bytes textures/rangedweapons_mp5_icon.png | Bin 0 -> 3133 bytes textures/rangedweapons_mp5_rld.png | Bin 0 -> 3348 bytes textures/rangedweapons_python_icon.png | Bin 0 -> 3262 bytes textures/rangedweapons_red_ray.png | Bin 0 -> 2914 bytes textures/rangedweapons_remington_icon.png | Bin 0 -> 3186 bytes textures/rangedweapons_revolver_img.png | Bin 0 -> 3037 bytes textures/rangedweapons_rifle_img.png | Bin 0 -> 2898 bytes textures/rangedweapons_rifle_mag.png | Bin 0 -> 2902 bytes textures/rangedweapons_rpg_icon.png | Bin 0 -> 3230 bytes textures/rangedweapons_rpk_icon.png | Bin 0 -> 3367 bytes textures/rangedweapons_rpk_rld.png | Bin 0 -> 3357 bytes textures/rangedweapons_scar.png | Bin 3531 -> 3512 bytes textures/rangedweapons_scar_icon.png | Bin 0 -> 3337 bytes textures/rangedweapons_scar_rld.png | Bin 0 -> 3485 bytes textures/rangedweapons_scopehud.png | Bin 0 -> 18294 bytes textures/rangedweapons_shotgun_img.png | Bin 0 -> 2929 bytes textures/rangedweapons_smg_img.png | Bin 0 -> 2965 bytes textures/rangedweapons_spark.png | Bin 0 -> 2858 bytes textures/rangedweapons_spas12_icon.png | Bin 0 -> 3218 bytes textures/rangedweapons_squirtgun.png | Bin 0 -> 3107 bytes textures/rangedweapons_squirtgun_rld.png | Bin 0 -> 3069 bytes textures/rangedweapons_sriffle_img.png | Bin 0 -> 2925 bytes textures/rangedweapons_svd_icon.png | Bin 0 -> 3322 bytes textures/rangedweapons_svd_noclip.png | Bin 0 -> 3444 bytes textures/rangedweapons_taurus_icon.png | Bin 0 -> 3256 bytes textures/rangedweapons_tec9_icon.png | Bin 0 -> 3145 bytes textures/rangedweapons_tec9_rld.png | Bin 0 -> 3050 bytes textures/rangedweapons_thompson.png | Bin 0 -> 3261 bytes textures/rangedweapons_thompson_icon.png | Bin 0 -> 3195 bytes textures/rangedweapons_thompson_rld.png | Bin 0 -> 3240 bytes textures/rangedweapons_tmp_icon.png | Bin 0 -> 3098 bytes textures/rangedweapons_tmp_rld.png | Bin 0 -> 3066 bytes textures/rangedweapons_ump_icon.png | Bin 0 -> 3132 bytes textures/rangedweapons_ump_rld.png | Bin 0 -> 3276 bytes textures/rangedweapons_uzi_icon.png | Bin 0 -> 3207 bytes textures/rangedweapons_uzi_rld.png | Bin 0 -> 3306 bytes textures/rangedweapons_yeetable_img.png | Bin 0 -> 2926 bytes thompson.lua | 72 ++ tmp.lua | 227 +--- ump.lua | 232 +--- uzi.lua | 230 +--- 177 files changed, 5257 insertions(+), 7511 deletions(-) create mode 100644 bullet_knockback.lua create mode 100644 cooldown_stuff.lua create mode 100644 crafting.lua create mode 100644 forcegun.lua create mode 100644 javelin - Copy.lua create mode 100644 m1991.lua create mode 100644 mod.conf create mode 100644 skills.lua create mode 100644 sounds/hit.ogg create mode 100644 sounds/rangedweapons_handgun_mag_in.ogg create mode 100644 sounds/rangedweapons_handgun_mag_out.ogg create mode 100644 sounds/rangedweapons_rifle_clip_in.ogg create mode 100644 sounds/rangedweapons_rifle_clip_out.ogg create mode 100644 sounds/rangedweapons_rifle_reload_a.ogg create mode 100644 sounds/rangedweapons_rifle_reload_b.ogg create mode 100644 sounds/rangedweapons_shell_insert.ogg create mode 100644 sounds/rengedweapons_ricochet.ogg create mode 100644 textures/rangedweapons_408cheytac.png create mode 100644 textures/rangedweapons_44.png create mode 100644 textures/rangedweapons_45acp.png create mode 100644 textures/rangedweapons_50ae.png create mode 100644 textures/rangedweapons_aa12_icon.png create mode 100644 textures/rangedweapons_aa12_rld.png create mode 100644 textures/rangedweapons_ak47_icon.png create mode 100644 textures/rangedweapons_ak47_rld.png create mode 100644 textures/rangedweapons_antigun_block.png create mode 100644 textures/rangedweapons_arifle_img.png create mode 100644 textures/rangedweapons_assaultrifle_mag.png create mode 100644 textures/rangedweapons_awp_icon.png create mode 100644 textures/rangedweapons_awp_noclip.png create mode 100644 textures/rangedweapons_benelli_icon.png create mode 100644 textures/rangedweapons_beretta_icon.png create mode 100644 textures/rangedweapons_blood.png create mode 100644 textures/rangedweapons_blood_alt.png create mode 100644 textures/rangedweapons_blue_ray.png create mode 100644 textures/rangedweapons_boltaction_img.png create mode 100644 textures/rangedweapons_bullethole.png create mode 100644 textures/rangedweapons_bulletshot.png create mode 100644 textures/rangedweapons_crit.png create mode 100644 textures/rangedweapons_crithit.png create mode 100644 textures/rangedweapons_deagle_icon.png create mode 100644 textures/rangedweapons_drum_mag.png create mode 100644 textures/rangedweapons_emergency_ammo_icon.png create mode 100644 textures/rangedweapons_emergency_gun_icon.png create mode 100644 textures/rangedweapons_empty_icon.png create mode 100644 textures/rangedweapons_fire_particle.png create mode 100644 textures/rangedweapons_force_blast.png create mode 100644 textures/rangedweapons_force_bullet.png create mode 100644 textures/rangedweapons_forcegun.png create mode 100644 textures/rangedweapons_g36_icon.png create mode 100644 textures/rangedweapons_g36_rld.png create mode 100644 textures/rangedweapons_glock17_icon.png create mode 100644 textures/rangedweapons_golden_deagle.png create mode 100644 textures/rangedweapons_golden_deagle_icon.png create mode 100644 textures/rangedweapons_golden_deagle_rld.png create mode 100644 textures/rangedweapons_green_ray.png create mode 100644 textures/rangedweapons_handgun_img.png create mode 100644 textures/rangedweapons_handgun_mag_black.png create mode 100644 textures/rangedweapons_handgun_mag_white.png create mode 100644 textures/rangedweapons_headhit.png create mode 100644 textures/rangedweapons_headshot.png create mode 100644 textures/rangedweapons_heavy_img.png create mode 100644 textures/rangedweapons_hit.png create mode 100644 textures/rangedweapons_jackhammer_icon.png create mode 100644 textures/rangedweapons_jackhammer_rld.png create mode 100644 textures/rangedweapons_kriss_sv_icon.png create mode 100644 textures/rangedweapons_kriss_sv_rld.png create mode 100644 textures/rangedweapons_leaf.png create mode 100644 textures/rangedweapons_luger_icon.png create mode 100644 textures/rangedweapons_m16_icon.png create mode 100644 textures/rangedweapons_m16_rld.png create mode 100644 textures/rangedweapons_m1991.png create mode 100644 textures/rangedweapons_m1991_icon.png create mode 100644 textures/rangedweapons_m1991_rld.png create mode 100644 textures/rangedweapons_m200_icon.png create mode 100644 textures/rangedweapons_m200_noclip.png create mode 100644 textures/rangedweapons_m60_icon.png create mode 100644 textures/rangedweapons_m60_rld.png create mode 100644 textures/rangedweapons_m79_icon.png create mode 100644 textures/rangedweapons_machinepistol_img.png create mode 100644 textures/rangedweapons_machinepistol_mag.png create mode 100644 textures/rangedweapons_magazine_handgun.png create mode 100644 textures/rangedweapons_magazine_mp5.png create mode 100644 textures/rangedweapons_magazine_smg.png create mode 100644 textures/rangedweapons_makarov_icon.png create mode 100644 textures/rangedweapons_milkor_icon.png create mode 100644 textures/rangedweapons_minigun_icon.png create mode 100644 textures/rangedweapons_minigun_rld.png create mode 100644 textures/rangedweapons_mp40_icon.png create mode 100644 textures/rangedweapons_mp40_rld.png create mode 100644 textures/rangedweapons_mp5_icon.png create mode 100644 textures/rangedweapons_mp5_rld.png create mode 100644 textures/rangedweapons_python_icon.png create mode 100644 textures/rangedweapons_red_ray.png create mode 100644 textures/rangedweapons_remington_icon.png create mode 100644 textures/rangedweapons_revolver_img.png create mode 100644 textures/rangedweapons_rifle_img.png create mode 100644 textures/rangedweapons_rifle_mag.png create mode 100644 textures/rangedweapons_rpg_icon.png create mode 100644 textures/rangedweapons_rpk_icon.png create mode 100644 textures/rangedweapons_rpk_rld.png create mode 100644 textures/rangedweapons_scar_icon.png create mode 100644 textures/rangedweapons_scar_rld.png create mode 100644 textures/rangedweapons_scopehud.png create mode 100644 textures/rangedweapons_shotgun_img.png create mode 100644 textures/rangedweapons_smg_img.png create mode 100644 textures/rangedweapons_spark.png create mode 100644 textures/rangedweapons_spas12_icon.png create mode 100644 textures/rangedweapons_squirtgun.png create mode 100644 textures/rangedweapons_squirtgun_rld.png create mode 100644 textures/rangedweapons_sriffle_img.png create mode 100644 textures/rangedweapons_svd_icon.png create mode 100644 textures/rangedweapons_svd_noclip.png create mode 100644 textures/rangedweapons_taurus_icon.png create mode 100644 textures/rangedweapons_tec9_icon.png create mode 100644 textures/rangedweapons_tec9_rld.png create mode 100644 textures/rangedweapons_thompson.png create mode 100644 textures/rangedweapons_thompson_icon.png create mode 100644 textures/rangedweapons_thompson_rld.png create mode 100644 textures/rangedweapons_tmp_icon.png create mode 100644 textures/rangedweapons_tmp_rld.png create mode 100644 textures/rangedweapons_ump_icon.png create mode 100644 textures/rangedweapons_ump_rld.png create mode 100644 textures/rangedweapons_uzi_icon.png create mode 100644 textures/rangedweapons_uzi_rld.png create mode 100644 textures/rangedweapons_yeetable_img.png create mode 100644 thompson.lua diff --git a/aa12.lua b/aa12.lua index 81544b7..e32f77a 100644 --- a/aa12.lua +++ b/aa12.lua @@ -1,207 +1,75 @@ -minetest.register_craft({ - output = 'rangedweapons:aa12', - recipe = { - {'rangedweapons:gunsteel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, - {'default:diamondblock', 'default:steel_ingot', 'rangedweapons:plastic_sheet'}, - {'default:steel_ingot', 'dye:black', 'rangedweapons:plastic_sheet'}, - } -}) -minetest.register_craft({ - output = 'rangedweapons:aa12', - recipe = { - {'moreores:silver_ingot', 'default:steel_ingot', 'default:steel_ingot'}, - {'default:diamondblock', 'default:steel_ingot', 'rangedweapons:plastic_sheet'}, - {'default:steel_ingot', 'dye:black', 'rangedweapons:plastic_sheet'}, - } -}) - minetest.register_craftitem("rangedweapons:aa12", { +minetest.register_tool("rangedweapons:aa12_r", { stack_max= 1, - wield_scale = {x=1.75,y=1.75,z=1.3}, - description = "" ..core.colorize("#35cdff","AA-12\n") ..core.colorize("#FFFFFF", "Ranged damage: 2-6 X 10\n") ..core.colorize("#FFFFFF", "Accuracy: 65%\n") ..core.colorize("#FFFFFF", "Mob knockback: 2\n")..core.colorize("#FFFFFF", "Critical chance: 3%\n") ..core.colorize("#FFFFFF", "Critical damage: 8-16 X 10\n") ..core.colorize("#FFFFFF", "Ammunition: 12 gauge shells\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.2\n") ..core.colorize("#FFFFFF", "Gun type: Auto-shotgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 20"), + wield_scale = {x=1.9,y=1.9,z=1.4}, + description = "", + rw_next_reload = "rangedweapons:aa12_rr", + load_sound = "rangedweapons_rifle_clip_in", range = 0, + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_aa12_rld.png", +}) +minetest.register_tool("rangedweapons:aa12_rr", { + stack_max= 1, + wield_scale = {x=1.9,y=1.9,z=1.4}, + description = "", + rw_next_reload = "rangedweapons:aa12_rrr", + load_sound = "rangedweapons_reload_a", + range = 0, + groups = {not_in_creative_inventory = 1}, inventory_image = "rangedweapons_aa12.png", }) +minetest.register_tool("rangedweapons:aa12_rrr", { + stack_max= 1, + wield_scale = {x=1.9,y=1.9,z=1.4}, + description = "", + rw_next_reload = "rangedweapons:aa12", + load_sound = "rangedweapons_reload_b", + range = 0, + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_aa12.png", +}) +------------------------------------------- + + minetest.register_tool("rangedweapons:aa12", { + stack_max= 1, + wield_scale = {x=1.9,y=1.9,z=1.4}, + description = "" ..core.colorize("#35cdff","AA-12\n") ..core.colorize("#FFFFFF", "Ranged damage: 1\n") ..core.colorize("#FFFFFF", "projectiles: 5\n") ..core.colorize("#FFFFFF", "Gun gravity: 4\n") ..core.colorize("#FFFFFF", "accuracy: 40%\n") ..core.colorize("#FFFFFF", "knockback: 5\n") ..core.colorize("#FFFFFF", "Reload delay: 1.5\n") ..core.colorize("#FFFFFF", "Clip size: 20\n") ..core.colorize("#FFFFFF", "Critical chance: 5%\n") ..core.colorize("#FFFFFF", "Critical efficiency: 2.0x\n") ..core.colorize("#FFFFFF", "Ammunition: 12 gauge shell\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.2 (full-auto)\n") ..core.colorize("#FFFFFF", "Gun type: shotgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 25"), + range = 0, + inventory_image = "rangedweapons_aa12.png", + RW_gun_capabilities = { + automatic_gun = 1, + gun_damage = {fleshy=1,knockback=5}, + gun_crit = 5, + gun_critEffc = 2.0, + suitable_ammo = {{"rangedweapons:shell",20}}, + gun_skill = {"shotgun_skill",40}, + gun_magazine = "rangedweapons:drum_mag", + gun_icon = "rangedweapons_aa12_icon.png", + gun_unloaded = "rangedweapons:aa12_r", + gun_velocity = 25, + gun_accuracy = 40, + gun_cooldown = 0.2, + gun_reload = 1.5/4, + gun_projectiles = 1, + has_shell = 1, + gun_durability = 750, + gun_smokeSize = 8, + gun_door_breaking = 1, + gun_projectiles = 5, + gun_gravity = 4, + gun_unload_sound = "rangedweapons_rifle_clip_out", + gun_sound = "rangedweapons_shotgun_shot", + }, + on_secondary_use = function(itemstack, user, pointed_thing) +rangedweapons_reload_gun(itemstack, user) +return itemstack +end, +}) + + -local timer = 0 -minetest.register_globalstep(function(dtime, player) - timer = timer + dtime; - if timer >= 0.2 then - for _, player in pairs(minetest.get_connected_players()) do - local inv = player:get_inventory() - local controls = player:get_player_control() - if controls.LMB then - timer = 0 - local wielded_item = player:get_wielded_item():get_name() - if wielded_item == "rangedweapons:aa12" then - if not inv:contains_item("main", "rangedweapons:shell") then -minetest.sound_play("rangedweapons_empty", {object=player}) - else - if wielded_item == "rangedweapons:aa12" then - inv:remove_item("main", "rangedweapons:shell") - local pos = player:getpos() - local dir = player:get_look_dir() - local yaw = player:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:aa12shot") - if obj then - minetest.sound_play("rangedweapons_shotgun_shot", {object=obj}) - obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)}) - obj:setacceleration({x=dir.x * math.random(-3.5,3.5), y=math.random(-3.5,3.5), z=dir.z * math.random(-3.5,3.5)}) ------------------------------------------------------------- - local obj = minetest.add_entity(pos, "rangedweapons:aa12shot") - obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)}) - obj:setacceleration({x=dir.x * math.random(-3.5,3.5), y=math.random(-3.5,3.5), z=dir.z * math.random(-3.5,3.5)}) ------------------------------------------------------------- - local obj = minetest.add_entity(pos, "rangedweapons:aa12shot") - obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)}) - obj:setacceleration({x=dir.x * math.random(-3.5,3.5), y=math.random(-3.5,3.5), z=dir.z * math.random(-3.5,3.5)}) ------------------------------------------------------------- - local obj = minetest.add_entity(pos, "rangedweapons:aa12shot") - obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)}) - obj:setacceleration({x=dir.x * math.random(-3.5,3.5), y=math.random(-3.5,3.5), z=dir.z * math.random(-3.5,3.5)}) ------------------------------------------------------------- - local obj = minetest.add_entity(pos, "rangedweapons:aa12shot") - obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)}) - obj:setacceleration({x=dir.x * math.random(-3.5,3.5), y=math.random(-3.5,3.5), z=dir.z * math.random(-3.5,3.5)}) ------------------------------------------------------------- - local obj = minetest.add_entity(pos, "rangedweapons:aa12shot") - obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)}) - obj:setacceleration({x=dir.x * math.random(-3.5,3.5), y=math.random(-3.5,3.5), z=dir.z * math.random(-3.5,3.5)}) ------------------------------------------------------------- - local obj = minetest.add_entity(pos, "rangedweapons:aa12shot") - obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)}) - obj:setacceleration({x=dir.x * math.random(-3.5,3.5), y=math.random(-3.5,3.5), z=dir.z * math.random(-3.5,3.5)}) ------------------------------------------------------------- - local obj = minetest.add_entity(pos, "rangedweapons:aa12shot") - obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)}) - obj:setacceleration({x=dir.x * math.random(-3.5,3.5), y=math.random(-3.5,3.5), z=dir.z * math.random(-3.5,3.5)}) ------------------------------------------------------------- - local obj = minetest.add_entity(pos, "rangedweapons:aa12shot") - obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)}) - obj:setacceleration({x=dir.x * math.random(-3.5,3.5), y=math.random(-3.5,3.5), z=dir.z * math.random(-3.5,3.5)}) ------------------------------------------------------------- - local obj = minetest.add_entity(pos, "rangedweapons:aa12shot") - obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)}) - obj:setacceleration({x=dir.x * math.random(-3.5,3.5), y=math.random(-3.5,3.5), z=dir.z * math.random(-3.5,3.5)}) - pos.y = pos.y + 0 - local obj = minetest.add_entity(pos, "rangedweapons:empty_shell_shotgun") - minetest.sound_play("", {object=obj}) - obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) - obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) - obj:setyaw(yaw + math.pi) - minetest.add_particle({ - pos = pos, - velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} , - acceleration = {x=dir.x * -4, y=2, z=dir.z * -4}, - expirationtime = 0.5, - size = 6, - collisiondetection = false, - vertical = false, - texture = "tnt_smoke.png", - glow = 5, - }) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or player - end - end - end - end -end - -end - end - end - end - end) - -local rangedweapons_aa12shot = { - physical = false, - timer = 0, - visual = "sprite", - visual_size = {x=0.1, y=0.1}, - textures = {"rangedweapons_buckball.png"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_aa12shot.on_step = function(self, dtime, node, pos) - self.timer = self.timer + dtime - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.20 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:aa12shot" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 3 then - local damage = math.random(8,16) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=4}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(2,6) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 2}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - if math.random(1, 100) <= 3 then - local damage = math.random(8,16) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(2,6) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - if self.timer >= 4.0 then - self.object:remove() - end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") then - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - if node.name == "rangedweapons:barrel" or - node.name == "doors:door_wood_a" or - node.name == "doors:door_wood_b" or - node.name == "doors:door_glass_a" or - node.name == "doors:door_glass_b" or - node.name == "xpanes:pane" or - node.name == "xpanes:pane_flat" or - node.name == "vessels:drinking_glass" or - node.name == "vessels:glass_bottle" or - node.name == "default:glass" then - minetest.get_node_timer(pos):start(0) - end - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end -end -end -minetest.register_entity("rangedweapons:aa12shot", rangedweapons_aa12shot ) \ No newline at end of file diff --git a/ak47.lua b/ak47.lua index b3ee74b..d7ba109 100644 --- a/ak47.lua +++ b/ak47.lua @@ -1,177 +1,76 @@ -minetest.register_craft({ - output = 'rangedweapons:ak47', - recipe = { - {'default:diamond', 'default:steel_ingot', 'default:tree'}, - {'default:tree', 'default:mese', 'default:steel_ingot'}, - {'default:steel_ingot', '', 'default:tree'}, - } -}) - minetest.register_craftitem("rangedweapons:ak47", { + +minetest.register_tool("rangedweapons:ak47_r", { stack_max= 1, wield_scale = {x=1.75,y=1.75,z=1.3}, - description = "" ..core.colorize("#35cdff","AK-47\n") ..core.colorize("#FFFFFF", "Ranged damage: 6-16\n") ..core.colorize("#FFFFFF", "Accuracy: 77%\n") ..core.colorize("#FFFFFF", "Mob knockback: 5\n")..core.colorize("#FFFFFF", "Critical chance: 16%\n") ..core.colorize("#FFFFFF", "Critical damage: 17-26\n") ..core.colorize("#FFFFFF", "Ammunition: 7.26mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.165\n") ..core.colorize("#FFFFFF", "Gun type: Assault rifle\n") ..core.colorize("#FFFFFF", "Bullet velocity: 40"), + description = "", + rw_next_reload = "rangedweapons:ak47_rr", + load_sound = "rangedweapons_rifle_clip_in", range = 0, + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_ak47_rld.png", +}) + +minetest.register_tool("rangedweapons:ak47_rr", { + stack_max= 1, + wield_scale = {x=1.75,y=1.75,z=1.3}, + description = "", + rw_next_reload = "rangedweapons:ak47_rrr", + load_sound = "rangedweapons_rifle_reload_a", + range = 0, + groups = {not_in_creative_inventory = 1}, inventory_image = "rangedweapons_ak47.png", }) -local timer = 0 -minetest.register_globalstep(function(dtime, player) - timer = timer + dtime; - if timer >= 0.165 then - for _, player in pairs(minetest.get_connected_players()) do - local inv = player:get_inventory() - local controls = player:get_player_control() - if controls.LMB then - timer = 0 - local wielded_item = player:get_wielded_item():get_name() - if wielded_item == "rangedweapons:ak47" then - if not inv:contains_item("main", "rangedweapons:726mm") then -minetest.sound_play("rangedweapons_empty", {object=player}) - else - if wielded_item == "rangedweapons:ak47" then - inv:remove_item("main", "rangedweapons:726mm") - local pos = player:getpos() - local dir = player:get_look_dir() - local yaw = player:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:ak47shot") - if obj then - minetest.sound_play("rangedweapons_ak", {object=obj}) - obj:setvelocity({x=dir.x * 40, y=dir.y * 40, z=dir.z * 40}) - obj:setacceleration({x=dir.x * math.random(-2.3,2.3), y=math.random(-2.3,2.3), z=dir.z * math.random(-2.3,2.3)}) - obj:setyaw(yaw + math.pi) - pos.y = pos.y + 0 - local obj = minetest.add_entity(pos, "rangedweapons:empty_shell") - minetest.sound_play("", {object=obj}) - obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) - obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) - obj:setyaw(yaw + math.pi) - minetest.add_particle({ - pos = pos, - velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} , - acceleration = {x=dir.x * -4, y=2, z=dir.z * -4}, - expirationtime = 0.5, - size = 4, - collisiondetection = false, - vertical = false, - texture = "tnt_smoke.png", - glow = 5, - }) - - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or player - end - end - end - end -end - -end - end - end - end - end) - -local rangedweapons_ak47shot = { - physical = false, - timer = 0, - visual = "sprite", - visual_size = {x=0.3, y=0.3}, - textures = {"rangedweapons_invisible.png"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_ak47shot.on_step = function(self, dtime, node, pos) - self.timer = self.timer + dtime - local tiem = 0.002 - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.08 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:ak47shot" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 16 then - local damage = math.random(17,26) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=10}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(6,16) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 5}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - if math.random(1, 100) <= 16 then - local damage = math.random(17,26) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(6,16) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - if timer >= 0.002 + tiem then - minetest.add_particle({ - pos = pos, - velocity = 0, - acceleration = {x=0, y=0, z=0}, - expirationtime = 0.06, - size = 3, - collisiondetection = false, - vertical = false, - texture = "rangedweapons_bullet_fly.png", - glow = 15, - }) - tiem = tiem + 0.002 - end - if self.timer >= 4.0 then - self.object:remove() - end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") then - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - if node.name == "rangedweapons:barrel" or - node.name == "doors:door_glass_a" or - node.name == "doors:door_glass_b" or - node.name == "xpanes:pane" or - node.name == "xpanes:pane_flat" or - node.name == "vessels:drinking_glass" or - node.name == "vessels:glass_bottle" or - node.name == "default:glass" then - minetest.get_node_timer(pos):start(0) - end - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end -end -end +minetest.register_tool("rangedweapons:ak47_rrr", { + stack_max= 1, + wield_scale = {x=1.75,y=1.75,z=1.3}, + description = "", + rw_next_reload = "rangedweapons:ak47", + load_sound = "rangedweapons_rifle_reload_b", + range = 0, + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_ak47.png", +}) + minetest.register_tool("rangedweapons:ak47", { + stack_max= 1, + wield_scale = {x=1.75,y=1.75,z=1.3}, + description = "" ..core.colorize("#35cdff","AK-47\n") ..core.colorize("#FFFFFF", "Gun damage: 7\n") ..core.colorize("#FFFFFF", "accuracy: 77%\n") ..core.colorize("#FFFFFF", "Gun knockback: 5\n") ..core.colorize("#FFFFFF", "Gun Critical chance: 12%\n")..core.colorize("#FFFFFF", "Critical efficiency: 2.9x\n") ..core.colorize("#FFFFFF", "Reload delay: 1.4\n") ..core.colorize("#FFFFFF", "Clip size: 30\n") ..core.colorize("#FFFFFF", "Ammunition: 7.62mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.10(full-auto)\n") ..core.colorize("#FFFFFF", "Gun type: assault rifle\n") ..core.colorize("#FFFFFF", "Block penetration: 5%\n") +..core.colorize("#FFFFFF", "Enemy penetration: 15%\n") ..core.colorize("#FFFFFF", "Bullet velocity: 40"), + range = 0, + inventory_image = "rangedweapons_ak47.png", + RW_gun_capabilities = { + automatic_gun = 1, + gun_damage = {fleshy=7,knockback=5}, + gun_crit = 12, + gun_critEffc = 2.9, + suitable_ammo = {{"rangedweapons:762mm",30}}, + gun_skill = {"arifle_skill",50}, + gun_magazine = "rangedweapons:assaultrifle_mag", + gun_icon = "rangedweapons_ak47_icon.png", + gun_unloaded = "rangedweapons:ak47_r", + gun_velocity = 40, + gun_accuracy = 77, + gun_cooldown = 0.1, + gun_reload = 1.4/4, + gun_projectiles = 1, + has_shell = 1, + gun_gravity = 0, + gun_durability = 1200, + gun_smokeSize = 5, + gun_mob_penetration = 15, + gun_node_penetration = 5, + gun_unload_sound = "rangedweapons_rifle_clip_out", + gun_sound = "rangedweapons_ak", + }, + on_secondary_use = function(itemstack, user, pointed_thing) +rangedweapons_reload_gun(itemstack, user) +return itemstack +end, + + inventory_image = "rangedweapons_ak47.png", +}) + -minetest.register_entity("rangedweapons:ak47shot", rangedweapons_ak47shot ) \ No newline at end of file diff --git a/ammo.lua b/ammo.lua index 3729f0f..db8f01e 100644 --- a/ammo.lua +++ b/ammo.lua @@ -1,154 +1,778 @@ +forbidden_ents = { +"", +} + + +minetest.register_alias("rangedweapons:726mm", "rangedweapons:762mm") + +bullet_particles = bullet_particles or "rangedweapons_bullet_fly.png" + + +minetest.register_craftitem("rangedweapons:shot_bullet_visual", { + wield_scale = {x=1.0,y=1.0,z=1.0}, + inventory_image = "rangedweapons_bulletshot.png", +}) + + +local rangedweapons_shot_bullet = { + timer = 0, +initial_properties = { + physical = true, + hp_max = 420, + glow = 100, + visual = "wielditem", + visual_size = {x=0.75, y=0.75}, + textures = {"rangedweapons:shot_bullet_visual"}, + lastpos = {}, + collide_with_objects = false, + collisionbox = {-0.0025, -0.0025, -0.0025, 0.0025, 0.0025, 0.0025}, +}, +} +rangedweapons_shot_bullet.on_step = function(self, dtime, moveresult) +---------------------------------------- +--------------------------------------- + +if self.owner == nil then +self.object:remove() +end + +local sparks = self.sparks or 0 +local ignite = self.ignite or 0 +local size = self.size or 0.0025 + +local SBP = self.bullet_particles +if SBP ~= nil then +for i=1,math.random(SBP.amount[1],SBP.amount[2]) do + minetest.add_particle({ + pos = {x=self.object:get_pos().x+(math.random(-SBP.pos_randomness,SBP.pos_randomness)/100),y=self.object:get_pos().y+(math.random(-SBP.pos_randomness,SBP.pos_randomness)/100),z=self.object:get_pos().z+(math.random(-SBP.pos_randomness,SBP.pos_randomness)/100)}, + velocity = {x=math.random(-SBP.velocity.x,SBP.velocity.x), y=math.random(-SBP.velocity.y,SBP.velocity.y), z=math.random(-SBP.velocity.z,SBP.velocity.z)}, + acceleration = {x=math.random(-SBP.acceleration.x,SBP.acceleration.x), y=math.random(-SBP.acceleration.y,SBP.acceleration.y)-SBP.gravity, z=math.random(-SBP.acceleration.z,SBP.acceleration.z)}, + expirationtime = SBP.lifetime, + size = math.random(SBP.minsize,SBP.maxsize)/10, + collisiondetection = SBP.collisiondetection, + vertical = false, + texture = SBP.texture, + animation = {type="vertical_frames", aspect_w=8, aspect_h=8, length = SBP.lifetime+0.1,}, + glow = SBP.glow, + }) +end end + + +self.timer = self.timer + dtime + +if self.timer > 0.06 then +self.object:set_properties({collide_with_objects = true}) +self.object:set_properties({collisionbox = {-size, -size, -size, size, size, size}}) +end + +if self.timer > 10 then +self.object:remove() +end + +if moveresult.collides == true then +if moveresult.collisions[1] ~= nil then + +local mobPen = self.mobPen or 0 +local nodePen = self.nodePen or 0 +local door_break = self.door_break or 0 +local glass_break = self.glass_break or 0 + +if moveresult.collisions[1].type == "node" then + +minetest.check_for_falling(moveresult.collisions[1].node_pos) + + +if minetest.registered_nodes[minetest.get_node(moveresult.collisions[1].node_pos).name] and +minetest.registered_nodes[minetest.get_node(moveresult.collisions[1].node_pos).name].tiles and +minetest.registered_nodes[minetest.get_node(moveresult.collisions[1].node_pos).name].tiles[1] +then + +local hit_texture = minetest.registered_nodes[minetest.get_node(moveresult.collisions[1].node_pos).name].tiles[1] + +if hit_texture.name ~= nil then +hit_texture = hit_texture.name +end + + minetest.add_particle({ + pos = self.object:get_pos(), + velocity = {x=0, y=0, z=0}, + acceleration = {x=0, y=0, z=0}, + expirationtime = 30, + size = math.random(10,20)/10, + collisiondetection = false, + vertical = false, + texture = "rangedweapons_bullethole.png", + glow = 0, + }) + + for i=1,math.random(4,8) do + minetest.add_particle({ + pos = self.object:get_pos(), + velocity = {x=math.random(-3.0,3.0), y=math.random(2.0,5.0), z=math.random(-3.0,3.0)}, + acceleration = {x=math.random(-3.0,3.0), y=math.random(-10.0,-15.0), z=math.random(-3.0,3.0)}, + expirationtime = 0.5, + size = math.random(10,20)/10, + collisiondetection = true, + vertical = false, + texture = ""..hit_texture.."^[resize:4x4".."", + glow = 0, + }) + end + +end + + +minetest.sound_play("default_dig_cracky", {self.object:get_pos(), gain = 1.0}) + +if ignite > 0 then + +if minetest.get_node(moveresult.collisions[1].node_pos).name == "rangedweapons:barrel" then +minetest.swap_node(moveresult.collisions[1].node_pos, {name = "air"}) +tnt.boom(moveresult.collisions[1].node_pos, {radius = 3}) +end + +if minetest.get_node(moveresult.collisions[1].node_pos).name == "tnt:tnt" then +minetest.swap_node(moveresult.collisions[1].node_pos, {name = "tnt:tnt_burning"}) + minetest.sound_play("tnt_ignite", {moveresult.collisions[1].node_pos}, true) + minetest.get_node_timer(moveresult.collisions[1].node_pos):start(3) + minetest.check_for_falling(moveresult.collisions[1].node_pos) +end + +end + + +if rweapons_door_breaking == "true" and door_break > 0 then +if string.find(minetest.get_node(moveresult.collisions[1].node_pos).name,"door_wood") then + +minetest.swap_node(moveresult.collisions[1].node_pos, {name = "air"}) +minetest.add_item(moveresult.collisions[1].node_pos, "default:wood 5") +minetest.sound_play("rangedweapons_woodbreak",{moveresult.collisions[1].node_pos}) + +end end + +if rweapons_glass_breaking == "true" and glass_break > 0 then + +local nodeName = minetest.get_node(moveresult.collisions[1].node_pos).name + + if nodeName == "default:glass" then + minetest.swap_node(moveresult.collisions[1].node_pos, {name = "rangedweapons:broken_glass"}) +minetest.sound_play("glass_break",{moveresult.collisions[1].node_pos}) + end + if nodeName == "xpanes:pane" or + nodeName == "xpanes:pane_flat" then +minetest.swap_node(moveresult.collisions[1].node_pos, {name = "air"}) +minetest.add_item(moveresult.collisions[1].node_pos, "rangedweapons:glass_shards") +minetest.sound_play("glass_break",{moveresult.collisions[1].node_pos}) + end +if string.find(nodeName,"door_glass") then +minetest.swap_node(moveresult.collisions[1].node_pos, {name = "air"}) +minetest.add_item(moveresult.collisions[1].node_pos, "vessels:glass_fragments 5") +minetest.sound_play("glass_break",{moveresult.collisions[1].node_pos}) + end +end + + +if minetest.get_item_group(minetest.get_node(moveresult.collisions[1].node_pos).name, "level") > 1 then +self.object:set_velocity(moveresult.collisions[1].old_velocity) + +if sparks > 0 then +make_sparks(self.object:get_pos()) +end + +local objVel = moveresult.collisions[1].old_velocity +local objRot = self.object:get_rotation() + +if objRot and objVel then +if moveresult.collisions[1].axis == "x" then +self.object:set_rotation({x=0,y=objRot.y,z=objRot.z+3}) +self.object:set_velocity({x=objVel.x*-1,y=objVel.y,z=objVel.z}) +end + +if moveresult.collisions[1].axis == "z" then +self.object:set_rotation({x=0,y=objRot.y,z=objRot.z+3}) +self.object:set_velocity({x=objVel.x,y=objVel.y,z=objVel.z*-1}) +end + +if moveresult.collisions[1].axis == "y" then +self.object:set_rotation({x=0,y=objRot.y+3,z=objRot.z+3}) +self.object:set_velocity({x=objVel.x,y=objVel.y*-1,z=objVel.z}) +end end + + +else + +if math.random(1,100) <= nodePen then + for i=1,10 do + minetest.add_particle({ + pos = self.object:get_pos(), + velocity = {x=1.5, y=1.5, z=1.5} , + acceleration = {x=math.random(-3.0,3.0), y=math.random(-4.0,4.0), z=math.random(-3.0,3.0)}, + expirationtime = 1.25, + size = math.random(3,6), + collisiondetection = false, + vertical = false, + texture = "tnt_smoke.png", + glow = 2, + }) + end +minetest.sound_play("default_dig_cracky", {self.object:get_pos(), gain = 1.0}) +self.object:set_properties({collisionbox = {0,0,0,0,0,0}}) +--minetest.chat_send_all("hit") +self.object:set_velocity(moveresult.collisions[1].old_velocity) +else + +if minetest.get_item_group(minetest.get_node(moveresult.collisions[1].node_pos).name, "leaves") > 0 then + +minetest.sound_play("default_dig_snappy", {self.object:get_pos(), gain = 1.5}) + +for i = 1,math.random(3,6) do + minetest.add_particle({ + pos = self.object:get_pos(), + velocity = {x=math.random(-2,2), y=math.random(3,6), z=math.random(-2,2)}, + acceleration = {x=math.random(-2,2), y=math.random(-3,-6), z=math.random(-2,2)}, + expirationtime = math.random(2,4), + size = math.random(6,9), + collisiondetection = true, + collision_removal = false, + vertical = false, + texture = "rangedweapons_leaf.png", + animation = {type="vertical_frames", aspect_w=8, aspect_h=8, length = 0.8,}, + glow = 15, + }) +end + +self.object:set_properties({collisionbox = {0,0,0,0,0,0}}) +self.object:set_velocity(moveresult.collisions[1].old_velocity) + +else +if self.OnCollision ~= nil then +self.OnCollision(self.owner,self,moveresult.collisions[1]) +end +self.object:remove() +end +end +end + +end + +if moveresult.collisions[1].type == "object" then + + +local actualDamage = self.damage or {fleshy=1} +local damage = {} +local crit = self.crit or 0 +local critEffc = self.critEffc or 1 +local owner = minetest.get_player_by_name(self.owner) +local hit_texture = "rangedweapons_hit.png" +local dps = self.dps or 0 +local skill = self.skill_value or 1 + +for _, dmg in pairs(actualDamage) do +damage[_] = actualDamage[_] +end + +if moveresult.collisions[1].object:is_player() then +for _, player_dmg in pairs(damage) do +damage[_] = damage[_] * rweapons_player_dmg_multiplier +end +if self.object:get_pos().y - moveresult.collisions[1].object:get_pos().y > 1.5 then +for _, hs_dmg in pairs(damage) do +damage[_] = damage[_] * rweapons_headshot_dmg_multiplier +end +end +knockback = damage.knockback or 0 +projectile_kb(moveresult.collisions[1].object,self.object,knockback) +else +for _, mob_dmg in pairs(damage) do +damage[_] = damage[_] * rweapons_mob_dmg_multiplier +end +end + +for _, bonus_dmg in pairs(damage) do +damage[_] = (damage[_]*skill) + (self.dps*self.timer) +end + +--minetest.chat_send_all(critEffc) +if math.random(1,100) <= crit+((skill*10)-10) then +for _, critDmg in pairs(damage) do +damage[_] = damage[_] * critEffc +end + + +entpos = self.object:get_pos() +minetest.add_particle ({ +pos = entpos, velocity = 0, acceleration = {x=0, y=5, z=0}, +expirationtime = 0.75, size = 12, collisiondetection = false, +vertical = false, texture = "rangedweapons_crit.png", glow = 30,}) +hit_texture = "rangedweapons_crithit.png" +end + +moveresult.collisions[1].object:punch(owner, 1.0, { + full_punch_interval = 1.0, + damage_groups = damage,}, nil) +owner:hud_change(hit, "text", hit_texture) + + for i=1,math.random(math.ceil(rweapons_bloodyness*0.66),math.ceil(rweapons_bloodyness*1.5)) do + minetest.add_particle({ + pos = self.object:get_pos(), + velocity = {x=math.random(-15.0,15.0)/10, y=math.random(2.0,5.0), z=math.random(-15.0,15.0)/10}, + acceleration = {x=math.random(-3.0,3.0), y=math.random(-10.0,-15.0), z=math.random(-3.0,3.0)}, + expirationtime = 0.75, + size = math.random(10,20)/10, + collisiondetection = true, + vertical = false, + texture = "rangedweapons_blood.png", + animation = {type="vertical_frames", aspect_w=8, aspect_h=8, length = 0.8,}, + glow = 0, + }) + end + + +if math.random(1,100) <= mobPen then + for i=1,10 do + minetest.add_particle({ + pos = self.object:get_pos(), + velocity = {x=1.5, y=1.5, z=1.5} , + acceleration = {x=math.random(-3.0,3.0), y=math.random(-4.0,4.0), z=math.random(-3.0,3.0)}, + expirationtime = 1.25, + size = math.random(3,6), + collisiondetection = false, + vertical = false, + texture = "tnt_smoke.png", + glow = 2, + }) + end +minetest.sound_play("default_dig_cracky", {self.object:get_pos(), gain = 1.0}) +self.object:set_properties({collisionbox = {0,0,0,0,0,0}}) +self.object:set_velocity(moveresult.collisions[1].old_velocity) +else +if self.OnCollision ~= nil then +self.OnCollision(self.owner,self,moveresult.collisions[1]) +end +self.object:remove() +end +end + + +else + +self.object:remove() + +end +end + +end + +minetest.register_entity("rangedweapons:shot_bullet", rangedweapons_shot_bullet) + + + +--- +--- actual mags +--- + +--- +--- visual drop mags +--- + +minetest.register_craftitem("rangedweapons:drum_mag", { + wield_scale = {x=1.0,y=1.0,z=1.5}, + inventory_image = "rangedweapons_drum_mag.png", +}) + +minetest.register_craftitem("rangedweapons:handgun_mag_black", { + wield_scale = {x=0.6,y=0.6,z=0.8}, + inventory_image = "rangedweapons_magazine_handgun.png", +}) +local rangedweapons_mag = { + physical = false, + timer = 0, + visual = "wielditem", + visual_size = {x=0.3, y=0.3}, + textures = {"rangedweapons:handgun_mag_black"}, + lastpos= {}, + collisionbox = {0, 0, 0, 0, 0, 0}, +} +rangedweapons_mag.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=0, y=0, z=0}) + self.object:set_acceleration({x=0, y=0, z=0}) + end end + end + if self.timer > 2.0 then + self.object:remove() + + end + self.lastpos= {x = pos.x, y = pos.y, z = pos.z} +end + +minetest.register_entity("rangedweapons:mag", rangedweapons_mag) + +minetest.register_craftitem("rangedweapons:handgun_mag_white", { + wield_scale = {x=0.6,y=0.6,z=0.8}, + inventory_image = "rangedweapons_handgun_mag_white.png", +}) + +minetest.register_craftitem("rangedweapons:machinepistol_mag", { + wield_scale = {x=0.6,y=0.6,z=0.8}, + inventory_image = "rangedweapons_machinepistol_mag.png", +}) + +minetest.register_craftitem("rangedweapons:assaultrifle_mag", { + wield_scale = {x=0.6,y=0.6,z=0.8}, + inventory_image = "rangedweapons_assaultrifle_mag.png", +}) + +minetest.register_craftitem("rangedweapons:rifle_mag", { + wield_scale = {x=0.6,y=0.6,z=0.8}, + inventory_image = "rangedweapons_rifle_mag.png", +}) minetest.register_craftitem("rangedweapons:9mm", { - stack_max= 10000, + stack_max= 500, wield_scale = {x=0.4,y=0.4,z=1.2}, - description = "" ..core.colorize("#35cdff","9mm round\n")..core.colorize("#FFFFFF", "Ammunition for handguns, machine-pistols and rarely sub-machineguns"), + description = "" ..core.colorize("#35cdff","9x19mm Parabellum\n")..core.colorize("#FFFFFF", "Bullet damage: 1 \n") ..core.colorize("#FFFFFF", "Bullet crit efficiency: 0.25 \n") ..core.colorize("#FFFFFF", "Bullet crit chance: 1% \n") ..core.colorize("#FFFFFF", "Bullet velocity: 25 \n") ..core.colorize("#FFFFFF", "Bullet knockback: 1 \n") ..core.colorize("#FFFFFF", "Ammunition for some guns"), inventory_image = "rangedweapons_9mm.png", -}) - - -minetest.register_craft({ - output = 'rangedweapons:9mm 30', - recipe = { - {'default:steel_ingot', '', ''}, - {'tnt:gunpowder', '', ''}, - {'default:copper_ingot', '', ''}, + RW_ammo_capabilities = { + ammo_damage = {fleshy=1,knockback=1}, + ammo_critEffc = 0.25, + ammo_crit = 1, + ammo_velocity = 25, + ammo_glass_breaking = 1, + ammo_entity = "rangedweapons:shot_bullet", + ammo_visual = "wielditem", + ammo_texture = "rangedweapons:shot_bullet_visual", + shell_entity = "rangedweapons:empty_shell", + shell_visual = "wielditem", + shell_texture = "rangedweapons:shelldrop", + ammo_projectile_size = 0.0025, + has_sparks = 1, + ignites_explosives = 1, } }) - -minetest.register_craftitem("rangedweapons:10mm", { - stack_max= 1500, +minetest.register_craftitem("rangedweapons:45acp", { + stack_max= 450, wield_scale = {x=0.4,y=0.4,z=1.2}, - description = "" ..core.colorize("#35cdff","10mm round\n")..core.colorize("#FFFFFF", "Ammunition for sub-machineguns"), - inventory_image = "rangedweapons_10mm.png", + description = "" ..core.colorize("#35cdff",".45ACP catridge\n")..core.colorize("#FFFFFF", "Bullet damage: 2 \n") ..core.colorize("#FFFFFF", "Bullet crit efficiency: 0.50 \n") ..core.colorize("#FFFFFF", "Bullet crit chance: 2% \n") +..core.colorize("#FFFFFF", "Bullet velocity: 20 \n") +..core.colorize("#FFFFFF", "Bullet knockback: 2 \n") ..core.colorize("#FFFFFF", "Ammunition for some guns"), + inventory_image = "rangedweapons_45acp.png", + RW_ammo_capabilities = { + ammo_damage = {fleshy=2,knockback=1}, + ammo_critEffc = 0.50, + ammo_crit = 1, + ammo_velocity = 20, + ammo_glass_breaking = 1, + ammo_entity = "rangedweapons:shot_bullet", + ammo_visual = "wielditem", + ammo_texture = "rangedweapons:shot_bullet_visual", + shell_entity = "rangedweapons:empty_shell", + shell_visual = "wielditem", + shell_texture = "rangedweapons:shelldrop", + ammo_projectile_size = 0.0025, + has_sparks = 1, + ignites_explosives = 1, + }, }) - - -minetest.register_craft({ - output = 'rangedweapons:10mm 60', - recipe = { - {'', 'default:bronze_ingot', ''}, - {'default:steel_ingot', 'tnt:gunpowder', 'default:steel_ingot'}, - {'default:steel_ingot', 'tnt:gunpowder', 'default:steel_ingot'}, +minetest.register_craftitem("rangedweapons:10mm", { + stack_max= 400, + wield_scale = {x=0.4,y=0.4,z=1.2}, + description = "" ..core.colorize("#35cdff","10mm Auto\n")..core.colorize("#FFFFFF", "Bullet damage: 2 \n") ..core.colorize("#FFFFFF", "Bullet crit efficiency:0.30 \n") ..core.colorize("#FFFFFF", "Bullet velocity: 25 \n") +..core.colorize("#FFFFFF", "Bullet knockback: 1 \n") ..core.colorize("#FFFFFF", "Bullet crit chance: 1% \n") ..core.colorize("#FFFFFF", "Ammunition for some guns"), + inventory_image = "rangedweapons_10mm.png", + RW_ammo_capabilities = { + ammo_damage = {fleshy=2,knockback=1}, + ammo_critEffc = 0.3, + ammo_crit = 1, + ammo_velocity = 25, + ammo_glass_breaking = 1, + ammo_entity = "rangedweapons:shot_bullet", + ammo_visual = "wielditem", + ammo_texture = "rangedweapons:shot_bullet_visual", + shell_entity = "rangedweapons:empty_shell", + shell_visual = "wielditem", + shell_texture = "rangedweapons:shell_whitedrop", + ammo_projectile_size = 0.0025, + has_sparks = 1, + ignites_explosives = 1, } }) minetest.register_craftitem("rangedweapons:357", { + stack_max= 150, + wield_scale = {x=0.4,y=0.4,z=1.2}, + description = "" ..core.colorize("#35cdff",".357 magnum round\n")..core.colorize("#FFFFFF", "Bullet damage: 4 \n") ..core.colorize("#FFFFFF", "Bullet crit efficiency: 0.6 \n") ..core.colorize("#FFFFFF", "Bullet crit chance: 3% \n") ..core.colorize("#FFFFFF", "Bullet knockback: 5 \n") ..core.colorize("#FFFFFF", "Bullet enemy Penetration: 5%\n") ..core.colorize("#FFFFFF", "Bullet velocity: 45 \n") ..core.colorize("#FFFFFF", "Ammunition for some guns"), + inventory_image = "rangedweapons_357.png", + RW_ammo_capabilities = { + ammo_damage = {fleshy=4,knockback=5}, + ammo_critEffc = 0.6, + ammo_crit = 3, + ammo_velocity = 45, + ammo_glass_breaking = 1, + ammo_mob_penetration = 5, + ammo_entity = "rangedweapons:shot_bullet", + ammo_visual = "wielditem", + ammo_texture = "rangedweapons:shot_bullet_visual", + shell_entity = "rangedweapons:empty_shell", + shell_visual = "wielditem", + shell_texture = "rangedweapons:shelldrop", + ammo_projectile_size = 0.0025, + has_sparks = 1, + ignites_explosives = 1, + } +}) + +minetest.register_craftitem("rangedweapons:50ae", { + stack_max= 100, + wield_scale = {x=0.6,y=0.6,z=1.5}, + description = "" ..core.colorize("#35cdff",".50AE catridge\n")..core.colorize("#FFFFFF", "Bullet damage: 8 \n") ..core.colorize("#FFFFFF", "Bullet crit efficiency: 0.9 \n") ..core.colorize("#FFFFFF", "Bullet crit chance: 6% \n") ..core.colorize("#FFFFFF", "Bullet knockback: 10 \n") ..core.colorize("#FFFFFF", "Bullet enemy Penetration: 15%\n") ..core.colorize("#FFFFFF", "Bullet velocity: 55 \n") ..core.colorize("#FFFFFF", "Ammunition for some guns"), + inventory_image = "rangedweapons_50ae.png", + RW_ammo_capabilities = { + ammo_damage = {fleshy=8,knockback=10}, + ammo_critEffc = 0.9, + ammo_crit = 6, + ammo_velocity = 55, + ammo_glass_breaking = 1, + ammo_mob_penetration = 15, + ammo_entity = "rangedweapons:shot_bullet", + ammo_visual = "wielditem", + ammo_texture = "rangedweapons:shot_bullet_visual", + shell_entity = "rangedweapons:empty_shell", + shell_visual = "wielditem", + shell_texture = "rangedweapons:shelldrop", + ammo_projectile_size = 0.0025, + has_sparks = 1, + ignites_explosives = 1, + } +}) + +minetest.register_craftitem("rangedweapons:44", { + stack_max= 150, + wield_scale = {x=0.4,y=0.4,z=1.2}, + description = "" ..core.colorize("#35cdff",".44 magnum round\n")..core.colorize("#FFFFFF", "Bullet damage: 4 \n") ..core.colorize("#FFFFFF", "Bullet crit efficiency: 0.7 \n") ..core.colorize("#FFFFFF", "Bullet crit chance: 4% \n") ..core.colorize("#FFFFFF", "Bullet knockback: 6 \n") ..core.colorize("#FFFFFF", "Bullet enemy Penetration: 6%\n") ..core.colorize("#FFFFFF", "Bullet velocity: 50 \n") ..core.colorize("#FFFFFF", "Ammunition for some guns"), + inventory_image = "rangedweapons_44.png", + RW_ammo_capabilities = { + ammo_damage = {fleshy=4,knockback=6}, + ammo_critEffc = 0.7, + ammo_crit = 4, + ammo_velocity = 50, + ammo_glass_breaking = 1, + ammo_mob_penetration = 6, + ammo_entity = "rangedweapons:shot_bullet", + ammo_visual = "wielditem", + ammo_texture = "rangedweapons:shot_bullet_visual", + shell_entity = "rangedweapons:empty_shell", + shell_visual = "wielditem", + shell_texture = "rangedweapons:shelldrop", + ammo_projectile_size = 0.0025, + has_sparks = 1, + ignites_explosives = 1, + } +}) +minetest.register_craftitem("rangedweapons:762mm", { stack_max= 250, wield_scale = {x=0.4,y=0.4,z=1.2}, - description = "" ..core.colorize("#35cdff",".357 magnum round\n")..core.colorize("#FFFFFF", "Ammunition for magnums/revolvers"), - inventory_image = "rangedweapons_357.png", -}) - - -minetest.register_craft({ - output = 'rangedweapons:357 15', - recipe = { - {'default:copper_ingot', '', ''}, - {'tnt:gunpowder', '', ''}, - {'default:gold_ingot', '', ''}, - } -}) - -minetest.register_craftitem("rangedweapons:726mm", { - stack_max= 2000, - wield_scale = {x=0.4,y=0.4,z=1.2}, - description = "" ..core.colorize("#35cdff","7.26mm round\n")..core.colorize("#FFFFFF", "Ammunition for Heavy machineguns and some assault rifles"), + description = "" ..core.colorize("#35cdff","7.62mm round\n")..core.colorize("#FFFFFF", "Bullet damage: 4 \n") ..core.colorize("#FFFFFF", "Bullet crit efficiency: 0.5 \n") ..core.colorize("#FFFFFF", "Bullet crit chance: 2% \n") ..core.colorize("#FFFFFF", "Bullet velocity: 40 \n") ..core.colorize("#FFFFFF", "Bullet knockback: 4 \n") ..core.colorize("#FFFFFF", "Bullet enemy Penetration: 5%\n") ..core.colorize("#FFFFFF", "Ammunition for some guns"), inventory_image = "rangedweapons_762mm.png", + RW_ammo_capabilities = { + ammo_damage = {fleshy=4,knockback=4}, + ammo_critEffc = 0.5, + ammo_crit = 2, + ammo_velocity = 40, + ammo_glass_breaking = 1, + ammo_entity = "rangedweapons:shot_bullet", + ammo_visual = "wielditem", + ammo_texture = "rangedweapons:shot_bullet_visual", + shell_entity = "rangedweapons:empty_shell", + shell_visual = "wielditem", + shell_texture = "rangedweapons:shelldrop", + ammo_mob_penetration = 5, + ammo_projectile_size = 0.0025, + has_sparks = 1, + ignites_explosives = 1, + }, }) - - -minetest.register_craft({ - output = 'rangedweapons:726mm 50', - recipe = { - {'default:bronze_ingot', 'tnt:gunpowder', 'default:bronze_ingot'}, - {'default:gold_ingot', 'tnt:gunpowder', 'default:gold_ingot'}, - {'default:gold_ingot', 'tnt:gunpowder', 'default:gold_ingot'}, - } -}) - minetest.register_craftitem("rangedweapons:556mm", { - stack_max= 1000, + stack_max= 300, wield_scale = {x=0.4,y=0.4,z=1.2}, - description = "" ..core.colorize("#35cdff","5.56mm round\n")..core.colorize("#FFFFFF", "Ammunition for most assault rifles"), + description = "" ..core.colorize("#35cdff","5.56mm round\n")..core.colorize("#FFFFFF", "Bullet damage: 3 \n") ..core.colorize("#FFFFFF", "Bullet crit efficiency: 0.4 \n") ..core.colorize("#FFFFFF", "Bullet crit chance: 2% \n") ..core.colorize("#FFFFFF", "Bullet velocity: 35 \n") ..core.colorize("#FFFFFF", "Bullet knockback: 3 \n") ..core.colorize("#FFFFFF", "Ammunition for some guns"), inventory_image = "rangedweapons_556mm.png", + RW_ammo_capabilities = { + ammo_damage = {fleshy=3,knockback=3}, + ammo_critEffc = 0.4, + ammo_crit = 2, + ammo_velocity = 35, + ammo_glass_breaking = 1, + ammo_entity = "rangedweapons:shot_bullet", + ammo_visual = "wielditem", + ammo_texture = "rangedweapons:shot_bullet_visual", + shell_entity = "rangedweapons:empty_shell", + shell_visual = "wielditem", + shell_texture = "rangedweapons:shelldrop", + ammo_projectile_size = 0.0025, + has_sparks = 1, + ignites_explosives = 1, + }, }) - - -minetest.register_craft({ - output = 'rangedweapons:556mm 75', - recipe = { - {'', 'default:gold_ingot', ''}, - {'default:gold_ingot', 'tnt:gunpowder', 'default:gold_ingot'}, - {'default:gold_ingot', 'tnt:gunpowder', 'default:gold_ingot'}, - } -}) - minetest.register_craftitem("rangedweapons:shell", { - stack_max= 84, + stack_max= 50, wield_scale = {x=0.4,y=0.4,z=1.2}, - description = "" ..core.colorize("#35cdff","12 gauge shell\n")..core.colorize("#FFFFFF", "Ammunition for shotguns"), + description = "" ..core.colorize("#35cdff","12 Gauge shell\n")..core.colorize("#FFFFFF", "Bullet damage: 2 \n") ..core.colorize("#FFFFFF", "Bullet crit efficiency: 0.15 \n") ..core.colorize("#FFFFFF", "Bullet crit chance: 1% \n") ..core.colorize("#FFFFFF", "Bullet velocity: 20 \n") ..core.colorize("#FFFFFF", "Bullet knockback: 4 \n") ..core.colorize("#FFFFFF", "Bullet gravity: 5 \n") ..core.colorize("#FFFFFF", "Bullet projectile multiplier: 1.5x\n") ..core.colorize("#FFFFFF", "Ammunition for some guns"), inventory_image = "rangedweapons_shell.png", + RW_ammo_capabilities = { + ammo_damage = {fleshy=2,knockback=4}, + ammo_projectile_multiplier = 1.5, + ammo_critEffc = 0.15, + ammo_crit = 1, + ammo_velocity = 20, + ammo_glass_breaking = 1, + ammo_entity = "rangedweapons:shot_bullet", + ammo_visual = "sprite", + ammo_texture = "rangedweapons_buckball.png", + shell_entity = "rangedweapons:empty_shell", + shell_visual = "wielditem", + shell_texture = "rangedweapons:shell_shotgundrop", + ammo_gravity = 5, + ammo_projectile_size = 0.00175, + ammo_projectile_glow = 0, + has_sparks = 1, + ignites_explosives = 1, + }, }) - - -minetest.register_craft({ - output = 'rangedweapons:shell 12', - recipe = { - {'default:bronze_ingot', 'default:steel_ingot', 'default:bronze_ingot'}, - {'default:bronze_ingot', 'tnt:gunpowder', 'default:bronze_ingot'}, - {'default:gold_ingot', 'tnt:gunpowder', 'default:gold_ingot'}, - } -}) - minetest.register_craftitem("rangedweapons:308winchester", { - stack_max= 120, + stack_max= 75, wield_scale = {x=0.4,y=0.4,z=1.2}, - description = "" ..core.colorize("#35cdff","308.winchester round\n")..core.colorize("#FFFFFF", "Ammunition for rifles"), + description = "" ..core.colorize("#35cdff",".308 winchester round\n")..core.colorize("#FFFFFF", "Bullet damage: 8 \n") ..core.colorize("#FFFFFF", "Bullet crit efficiency: 0.75 \n") ..core.colorize("#FFFFFF", "Bullet crit chance: 4% \n") ..core.colorize("#FFFFFF", "Bullet velocity: 60 \n") ..core.colorize("#FFFFFF", "Bullet knockback: 10 \n") ..core.colorize("#FFFFFF", "Damage gain over 1 sec of flight time: 40 \n") ..core.colorize("#FFFFFF", "Bullet enemy Penetration: 20%\n") ..core.colorize("#FFFFFF", "Bullet node Penetration: 10%\n") ..core.colorize("#FFFFFF", "Ammunition for some guns"), inventory_image = "rangedweapons_308winchester.png", + RW_ammo_capabilities = { + ammo_damage = {fleshy=8,knockback=10}, + ammo_critEffc = 0.75, + ammo_crit = 2, + ammo_velocity = 60, + ammo_glass_breaking = 1, + ammo_entity = "rangedweapons:shot_bullet", + ammo_visual = "wielditem", + ammo_texture = "rangedweapons:shot_bullet_visual", + shell_entity = "rangedweapons:empty_shell", + shell_visual = "wielditem", + shell_texture = "rangedweapons:shelldrop", + ammo_mob_penetration = 20, + ammo_node_penetration = 10, + ammo_projectile_size = 0.0025, + ammo_dps = 40, + has_sparks = 1, + ignites_explosives = 1, + }, }) - -minetest.register_craft({ - output = 'rangedweapons:308winchester 15', - recipe = { - {'', 'default:steel_ingot', ''}, - {'default:bronze_ingot', 'tnt:gunpowder', 'default:bronze_ingot'}, - {'default:gold_ingot', 'tnt:gunpowder', 'default:gold_ingot'}, - } +minetest.register_craftitem("rangedweapons:408cheytac", { + stack_max= 40, + wield_scale = {x=0.65,y=0.65,z=1.5}, + description = "" ..core.colorize("#35cdff",".408 chey tac\n")..core.colorize("#FFFFFF", "Bullet damage: 10 \n") ..core.colorize("#FFFFFF", "Bullet crit efficiency: 0.8 \n") ..core.colorize("#FFFFFF", "Bullet crit chance: 5% \n") ..core.colorize("#FFFFFF", "Bullet velocity: 70 \n") ..core.colorize("#FFFFFF", "Bullet knockback: 15 \n") ..core.colorize("#FFFFFF", "Damage gain over 1 sec of flight time: 80 \n") ..core.colorize("#FFFFFF", "Bullet enemy Penetration: 45%\n") ..core.colorize("#FFFFFF", "Bullet node Penetration: 20%\n") ..core.colorize("#FFFFFF", "Ammunition for some guns"), + inventory_image = "rangedweapons_408cheytac.png", + RW_ammo_capabilities = { + ammo_damage = {fleshy=10,knockback=15}, + ammo_critEffc = 0.8, + ammo_crit = 5, + ammo_velocity = 70, + ammo_glass_breaking = 1, + ammo_entity = "rangedweapons:shot_bullet", + ammo_visual = "wielditem", + ammo_texture = "rangedweapons:shot_bullet_visual", + shell_entity = "rangedweapons:empty_shell", + shell_visual = "wielditem", + shell_texture = "rangedweapons:shelldrop", + ammo_mob_penetration = 45, + ammo_node_penetration = 20, + ammo_projectile_size = 0.0025, + ammo_dps = 80, + has_sparks = 1, + ignites_explosives = 1, + }, }) minetest.register_craftitem("rangedweapons:40mm", { - stack_max= 48, + stack_max= 25, wield_scale = {x=0.8,y=0.8,z=2.4}, - description = "" ..core.colorize("#35cdff","40mm grenade\n")..core.colorize("#FFFFFF", "Ammunition for grenade launchers"), + description = "" ..core.colorize("#35cdff",".40mm grenade\n")..core.colorize("#FFFFFF", "Bullet damage: 10 \n") ..core.colorize("#FFFFFF", "Bullet crit efficiency: 1.0 \n") ..core.colorize("#FFFFFF", "Bullet crit chance: 1% \n") ..core.colorize("#FFFFFF", "Bullet velocity: 15 \n") ..core.colorize("#FFFFFF", "Bullet knockback: 10 \n") ..core.colorize("#FFFFFF", "Bullet gravity: 5 \n") ..core.colorize("#FFFFFF", "explodes on impact with a radius of 2\n") ..core.colorize("#FFFFFF", "Ammunition for grenade launchers"), inventory_image = "rangedweapons_40mm.png", -}) + RW_ammo_capabilities = { + ammo_damage = {fleshy=10,knockback=15}, + ammo_critEffc = 1.0, + ammo_crit = 1, + ammo_velocity = 15, + ammo_glass_breaking = 1, + ammo_entity = "rangedweapons:shot_bullet", + ammo_visual = "sprite", + ammo_texture = "rangedweapons_rocket_fly.png", + shell_entity = "rangedweapons:empty_shell", + shell_visual = "wielditem", + shell_texture = "rangedweapons:shell_grenadedrop", + ammo_projectile_size = 0.15, + has_sparks = 1, + ammo_gravity = 5, + ignites_explosives = 1, - -minetest.register_craft({ - output = 'rangedweapons:40mm 6', - recipe = { - {'', 'default:gold_ingot', ''}, - {'default:steel_ingot', 'tnt:gunpowder', 'default:steel_ingot'}, - {'tnt:gunpowder', 'default:bronze_ingot', 'tnt:gunpowder'}, - } +OnCollision = function(player,bullet,target) + tnt.boom(bullet.object:get_pos(), {radius = 2}) +end, +ammo_particles = { + velocity = {x=1,y=1,z=1}, + acceleration = {x=1,y=1,z=1}, + collisiondetection = true, + lifetime = 1, + texture = "tnt_smoke.png", + minsize = 50, + maxsize = 75, + pos_randomness = 50, + glow = 20, + gravity = 10, + amount = {1,1} +}, +}, }) minetest.register_craftitem("rangedweapons:rocket", { - stack_max= 25, + stack_max= 15, wield_scale = {x=1.2,y=1.2,z=2.4}, - description = "" ..core.colorize("#35cdff","Rocket\n")..core.colorize("#FFFFFF", "Ammunition for rocket launchers"), + description = "" ..core.colorize("#35cdff","rocket\n")..core.colorize("#FFFFFF", "Bullet damage: 15 \n") ..core.colorize("#FFFFFF", "Bullet crit efficiency: 1.0 \n") ..core.colorize("#FFFFFF", "Bullet crit chance: 1% \n") ..core.colorize("#FFFFFF", "Bullet velocity: 20 \n") ..core.colorize("#FFFFFF", "Bullet knockback: 20 \n") ..core.colorize("#FFFFFF", "Bullet gravity: 5 \n") ..core.colorize("#FFFFFF", "explodes on impact with a radius of 3\n") ..core.colorize("#FFFFFF", "Ammunition for rocket launchers"), inventory_image = "rangedweapons_rocket.png", + RW_ammo_capabilities = { + ammo_damage = {fleshy=15,knockback=20}, + ammo_critEffc = 1.0, + ammo_crit = 1, + ammo_velocity = 20, + ammo_glass_breaking = 1, + ammo_entity = "rangedweapons:shot_bullet", + ammo_visual = "sprite", + ammo_texture = "rangedweapons_rocket_fly.png", + ammo_projectile_size = 0.15, + has_sparks = 1, + ignites_explosives = 1, + +OnCollision = function(player,bullet,target) + tnt.boom(bullet.object:get_pos() , {radius = 3}) +end, +ammo_particles = { + velocity = {x=1,y=1,z=1}, + acceleration = {x=1,y=1,z=1}, + collisiondetection = true, + lifetime = 1, + texture = "tnt_smoke.png", + minsize = 50, + maxsize = 75, + pos_randomness = 50, + glow = 20, + gravity = 10, + amount = {1,1} +}, +}, }) - - -minetest.register_craft({ - output = 'rangedweapons:rocket 1', - recipe = { - {'', '', 'rangedweapons:40mm'}, - {'', 'tnt:gunpowder', ''}, - {'default:steel_ingot', '', ''}, - } -}) \ No newline at end of file diff --git a/awp.lua b/awp.lua index 8c4b41a..57540d4 100644 --- a/awp.lua +++ b/awp.lua @@ -1,219 +1,102 @@ -minetest.register_craft({ - output = 'rangedweapons:awp_uld', - recipe = { - {'rangedweapons:gunsteel_ingot', 'default:diamondblock', 'rangedweapons:gunsteel_ingot'}, - {'rangedweapons:gunsteel_ingot', 'rangedweapons:gunsteel_ingot', 'rangedweapons:gunsteel_ingot'}, - {'dye:dark_green', 'default:diamond', 'rangedweapons:plastic_sheet'}, - } -}) -minetest.register_craftitem("rangedweapons:awp_uld", { + +minetest.register_tool("rangedweapons:awp_uld", { stack_max= 1, wield_scale = {x=1.9,y=1.9,z=1.1}, range = 0, - description = "" ..core.colorize("#35cdff","A.W.P. \n") ..core.colorize("#FFFFFF", "Ranged damage: 100/sec of bullet lifetime\n") ..core.colorize("#FFFFFF", "Accuracy: 100%\n") ..core.colorize("#FFFFFF", "Mob knockback: 15\n") ..core.colorize("#FFFFFF", "Critical chance: 45%\n") ..core.colorize("#FFFFFF", "Critical damage: 250/sec of bullet lifetime\n") ..core.colorize("#FFFFFF", "Ammunition: 308.Winchester rounds\n") ..core.colorize("#FFFFFF", "Reload time: 1.5\n") ..core.colorize("#be0d00", "The gun is NOT loaded! (Right-click to load)\n")..core.colorize("#FFFFFF", "Gun type: Rifle\n") ..core.colorize("#FFFFFF", "Bullet velocity: 60"), + description = "" ..core.colorize("#35cdff","A.W.P. \n") ..core.colorize("#FFFFFF", "Ranged damage:18 + 35/sec of bullet lifetime\n")..core.colorize("#FFFFFF", "Accuracy: 100%\n") ..core.colorize("#FFFFFF", "knockback: 15\n") ..core.colorize("#FFFFFF", "Critical chance: 30%\n") ..core.colorize("#FFFFFF", "Critical efficiency: x3\n") ..core.colorize("#FFFFFF", "Ammunition: 7.62mm round/308.Winchester rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 1.0\n") ..core.colorize("#FFFFFF", "Reload time: 2.0\n") ..core.colorize("#FFFFFF", "Zoom: 12x\n") ..core.colorize("#be0d00", "Right-click to eject empty bullet shell\n") ..core.colorize("#FFFFFF", "Clip size: 10/10\n") ..core.colorize("#FFFFFF", "Enemy penetration:30%\n") ..core.colorize("#FFFFFF", "Block penetration:10%\n") ..core.colorize("#FFFFFF", "Gun type: Rifle\n") ..core.colorize("#FFFFFF", "Bullet velocity: 75"), + groups = {not_in_creative_inventory = 1}, inventory_image = "rangedweapons_awp.png", + weapon_zoom = 7.5, on_use = function(user) minetest.sound_play("rangedweapons_empty", {user}) end, +on_secondary_use = function(itemstack, user, pointed_thing) +eject_shell(itemstack,user,"rangedweapons:awp_rld",1.0,"rangedweapons_rifle_reload_a","rangedweapons:empty_shell") +return itemstack +end, }) - local timer = 0 -minetest.register_globalstep(function(dtime, player) - timer = timer + dtime; - if timer >= 0.001 then - for _, player in pairs(minetest.get_connected_players()) do - local inv = player:get_inventory() - local controls = player:get_player_control() - if player:get_wielded_item():get_name() == "rangedweapons:awp_uld" - and inv:contains_item("main", "rangedweapons:308winchester")then - if controls.RMB then - inv:remove_item("main", "rangedweapons:308winchester") - player:set_wielded_item("rangedweapons:awp_rld") - local pos = player:getpos() - local dir = player:get_look_dir() - local yaw = player:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:empty_shell") - minetest.sound_play("", {object=obj}) - obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) - obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) - obj:setyaw(yaw + math.pi) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or player - end - end - timer = 0 - minetest.sound_play("rangedweapons_reload_a", {player}) -end - end - - if timer >= 1.5 and - player:get_wielded_item():get_name() == "rangedweapons:awp_rld" then - player:set_wielded_item("rangedweapons:awp") - timer = 0 - minetest.sound_play("rangedweapons_reload_b", {player}) +minetest.register_tool("rangedweapons:awp_r", { + rw_next_reload = "rangedweapons:awp_rr", + load_sound = "rangedweapons_rifle_clip_in", + range = 0, + wield_scale = {x=1.9,y=1.9,z=1.1}, + description = "", + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_awp_noclip.png", +}) +minetest.register_tool("rangedweapons:awp_rr", { + rw_next_reload = "rangedweapons:awp_rrr", + load_sound = "rangedweapons_rifle_reload_a", + range = 0, + wield_scale = {x=1.9,y=1.9,z=1.1}, + description = "", + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_awp.png", +}) +minetest.register_tool("rangedweapons:awp_rrr", { + rw_next_reload = "rangedweapons:awp", + load_sound = "rangedweapons_rifle_reload_b", + range = 0, + wield_scale = {x=1.9,y=1.9,z=1.1}, + description = "", + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_awp_rld.png", +}) - - end - end - end - end) - - -minetest.register_craftitem("rangedweapons:awp_rld", { +minetest.register_tool("rangedweapons:awp_rld", { stack_max= 1, range = 0, wield_scale = {x=1.9,y=1.9,z=1.1}, - description = "**RELOADING A.W.P.**", + description = "", + loaded_gun = "rangedweapons:awp", + loaded_sound = "rangedweapons_rifle_reload_b", groups = {not_in_creative_inventory = 1}, inventory_image = "rangedweapons_awp_rld.png", }) minetest.register_tool("rangedweapons:awp", { - description = "" ..core.colorize("#35cdff","A.W.P. \n") ..core.colorize("#FFFFFF", "Ranged damage: 100/sec of bullet lifetime\n")..core.colorize("#FFFFFF", "Accuracy: 100%\n") ..core.colorize("#FFFFFF", "Mob knockback: 15\n") ..core.colorize("#FFFFFF", "Critical chance: 45%\n") ..core.colorize("#FFFFFF", "Critical damage: 250/sec of bullet lifetime\n") ..core.colorize("#FFFFFF", "Ammunition: 308.Winchester rounds\n") ..core.colorize("#FFFFFF", "Reload time: 1.5\n") ..core.colorize("#27a600", "The gun is loaded!\n")..core.colorize("#FFFFFF", "Gun type: Rifle\n") ..core.colorize("#FFFFFF", "Bullet velocity: 60"), + description = "" ..core.colorize("#35cdff","A.W.P. \n") ..core.colorize("#FFFFFF", "Ranged damage:18 + 35/sec of bullet lifetime\n")..core.colorize("#FFFFFF", "Accuracy: 100%\n") ..core.colorize("#FFFFFF", "knockback: 15\n") ..core.colorize("#FFFFFF", "Critical chance: 30%\n") ..core.colorize("#FFFFFF", "Critical efficiency: x3\n") ..core.colorize("#FFFFFF", "Ammunition: 7.62mm round/308.Winchester rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 1.0\n") ..core.colorize("#FFFFFF", "Reload time: 2.0\n") ..core.colorize("#FFFFFF", "Zoom: 12x\n") ..core.colorize("#27a600", "The gun is loaded!\n") ..core.colorize("#FFFFFF", "Clip size: 10/10\n") ..core.colorize("#FFFFFF", "Enemy penetration:30%\n") ..core.colorize("#FFFFFF", "Block penetration:10%\n") ..core.colorize("#FFFFFF", "Gun type: Rifle\n") ..core.colorize("#FFFFFF", "Bullet velocity: 75"), range = 0, - groups = {not_in_creative_inventory = 1}, + weapon_zoom = 7.5, wield_scale = {x=1.9,y=1.9,z=1.1}, inventory_image = "rangedweapons_awp.png", +RW_gun_capabilities = { + gun_damage = {fleshy=18,knockback=15}, + gun_crit = 30, + gun_critEffc = 3.0, + suitable_ammo = {{"rangedweapons:762mm",10},{"rangedweapons:308winchester",10}}, + gun_skill = {"rifle_skill",20}, + gun_magazine = "rangedweapons:rifle_mag", + gun_icon = "rangedweapons_awp_icon.png", + gun_unloaded = "rangedweapons:awp_r", + gun_cooling = "rangedweapons:awp_uld", + gun_velocity = 75, + gun_accuracy = 100, + gun_cooldown = 1.0, + gun_reload = 2.0/4, + gun_projectiles = 1, + has_shell = 0, + gun_durability = 700, + gun_smokeSize = 8, + gun_dps = 35, + gun_mob_penetration = 30, + gun_node_penetration = 10, + gun_unload_sound = "rangedweapons_rifle_clip_out", + gun_sound = "rangedweapons_rifle_b", + }, + on_secondary_use = function(itemstack, user, pointed_thing) +rangedweapons_reload_gun(itemstack, user) +return itemstack +end, on_use = function(itemstack, user, pointed_thing) - local pos = user:getpos() - local dir = user:get_look_dir() - local yaw = user:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:awpshot") - if obj then - minetest.sound_play("rangedweapons_rifle_a", {object=obj}) - obj:setvelocity({x=dir.x * 60, y=dir.y * 60, z=dir.z * 60}) - obj:setacceleration({x=dir.x * 0, y=0, z=dir.z * 0}) - obj:setyaw(yaw + math.pi) - minetest.add_particle({ - pos = pos, - velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} , - acceleration = {x=dir.x * -4, y=2, z=dir.z * -4}, - expirationtime = 1.5, - size = 8, - collisiondetection = false, - vertical = false, - texture = "tnt_smoke.png", - glow = 5, - }) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or user - itemstack = "rangedweapons:awp_uld" - end - end - end - return itemstack +rangedweapons_shoot_gun(itemstack, user) +return itemstack end, + }) -local rangedweapons_awpshot = { - physical = false, - timer = 0, - visual = "sprite", - visual_size = {x=0.3, y=0.3}, - textures = {"rangedweapons_invisible.png"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_awpshot.on_step = function(self, dtime, node, pos) - self.timer = self.timer + dtime - local tiem = 0.002 - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.05 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1.5) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:awpshot" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 45 then - local damage = 250 * self.timer - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 30}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = 100 * self.timer - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 15}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - if math.random(1, 100) <= 45 then - local damage = 250 * self.timer - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = 100 * self.timer - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - if timer >= 0.002 + tiem then - minetest.add_particle({ - pos = pos, - velocity = 0, - acceleration = {x=0, y=0, z=0}, - expirationtime = 0.06, - size = 3, - collisiondetection = false, - vertical = false, - texture = "rangedweapons_bullet_fly.png", - glow = 15, - }) - tiem = tiem + 0.002 - end - if self.timer >= 4.0 then - self.object:remove() - end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") then - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - if node.name == "rangedweapons:barrel" or - node.name == "doors:door_glass_a" or - node.name == "doors:door_glass_b" or - node.name == "xpanes:pane" or - node.name == "xpanes:pane_flat" or - node.name == "vessels:drinking_glass" or - node.name == "vessels:glass_bottle" or - node.name == "default:glass" then - minetest.get_node_timer(pos):start(0) - end - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end -end -end - - - -minetest.register_entity("rangedweapons:awpshot", rangedweapons_awpshot ) - - diff --git a/benelli.lua b/benelli.lua index 7afff38..d99bf4c 100644 --- a/benelli.lua +++ b/benelli.lua @@ -1,249 +1,63 @@ -minetest.register_craft({ - output = "rangedweapons:benelli_uld", - recipe = { - {"rangedweapons:gunsteel_ingot", "default:diamond", "default:steelblock"}, - {"rangedweapons:plastic_sheet", "default:diamond", "default:steel_ingot"}, - } -}) - -minetest.register_craftitem("rangedweapons:benelli_uld", { - stack_max= 1, - wield_scale = {x=2.0,y=2.0,z=1.20}, - range = 0, - description = "" ..core.colorize("#35cdff","Benelli M3\n") ..core.colorize("#FFFFFF", "Ranged damage: 3-9 X 12\n") ..core.colorize("#FFFFFF", "Accuracy: 62%\n") ..core.colorize("#FFFFFF", "Mob knockback: 6\n") ..core.colorize("#FFFFFF", "Critical chance: 4%\n") ..core.colorize("#FFFFFF", "Critical damage: 9-19 X 12\n") ..core.colorize("#FFFFFF", "Ammunition: 12 gauge shells\n") ..core.colorize("#FFFFFF", "Reload time: 0.60\n") ..core.colorize("#be0d00", "The gun is NOT loaded! (Right-click to load)\n")..core.colorize("#FFFFFF", "Gun type: shotgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 20"), - inventory_image = "rangedweapons_benelli.png", - on_use = function(user) - minetest.sound_play("rangedweapons_empty", {user}) - end, -}) - - local timer = 0 -minetest.register_globalstep(function(dtime, player) - timer = timer + dtime; - if timer >= 0.001 then - for _, player in pairs(minetest.get_connected_players()) do - local inv = player:get_inventory() - local controls = player:get_player_control() - if player:get_wielded_item():get_name() == "rangedweapons:benelli_uld" - and inv:contains_item("main", "rangedweapons:shell")then - if controls.RMB then - inv:remove_item("main", "rangedweapons:shell") - player:set_wielded_item("rangedweapons:benelli_rld") - local pos = player:getpos() - local dir = player:get_look_dir() - local yaw = player:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:empty_shell_shotgun") - minetest.sound_play("", {object=obj}) - obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) - obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) - obj:setyaw(yaw + math.pi) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or player - end - end - timer = 0 - minetest.sound_play("rangedweapons_shotgun_reload_a", {player}) - -end - end - - if timer >= 0.60 and - player:get_wielded_item():get_name() == "rangedweapons:benelli_rld" then - player:set_wielded_item("rangedweapons:benelli") - timer = 0 - minetest.sound_play("rangedweapons_shotgun_reload_b", {player}) - - - - end - end - end - end) - - -minetest.register_craftitem("rangedweapons:benelli_rld", { +minetest.register_tool("rangedweapons:benelli_rld", { stack_max= 1, range = 0, - wield_scale = {x=2.0,y=2.0,z=1.20}, - description = "**RELOADING BENELLI M3**", + wield_scale = {x=1.9,y=1.9,z=1.1}, + description = "", + loaded_gun = "rangedweapons:benelli", + loaded_sound = "rangedweapons_shotgun_reload_b", groups = {not_in_creative_inventory = 1}, inventory_image = "rangedweapons_benelli_rld.png", }) - minetest.register_tool("rangedweapons:benelli", { - description = "" ..core.colorize("#35cdff","Benelli M3\n") ..core.colorize("#FFFFFF", "Ranged damage: 3-9 X 12\n") ..core.colorize("#FFFFFF", "Accuracy: 62%\n")..core.colorize("#FFFFFF", "Mob knockback: 6\n") ..core.colorize("#FFFFFF", "Critical chance: 4%\n") ..core.colorize("#FFFFFF", "Critical damage: 9-19 X 12\n") ..core.colorize("#FFFFFF", "Ammunition: 12 gauge shells\n") ..core.colorize("#FFFFFF", "Reload time: 0.60\n") ..core.colorize("#27a600", "The gun is loaded!\n")..core.colorize("#FFFFFF", "Gun type: shotgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 20"), + description = "" ..core.colorize("#35cdff","benelli m3\n") ..core.colorize("#FFFFFF", "Ranged damage: 2\n") ..core.colorize("#FFFFFF", "projectiles: 5\n") ..core.colorize("#FFFFFF", "Gun gravity: 4\n") ..core.colorize("#FFFFFF", "Accuracy: 48%\n")..core.colorize("#FFFFFF", "knockback: 6\n") ..core.colorize("#FFFFFF", "Critical chance: 6%\n") ..core.colorize("#FFFFFF", "Critical efficiency: 2.0x\n") ..core.colorize("#FFFFFF", "Ammunition: 12 gauge shells\n") ..core.colorize("#FFFFFF", "Pump delay: 0.6\n")..core.colorize("#FFFFFF", "Clip size: 7\n") ..core.colorize("#27a600", "Gun is ready to fire!\n") ..core.colorize("#fff21c", "Right-click to load in a bullet!\n") ..core.colorize("#FFFFFF", "Gun type: shotgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 26"), range = 0, - groups = {not_in_creative_inventory = 1}, - wield_scale = {x=2.0,y=2.0,z=1.20}, + wield_scale = {x=1.9,y=1.9,z=1.1}, inventory_image = "rangedweapons_benelli.png", +RW_gun_capabilities = { + gun_damage = {fleshy=2,knockback=6}, + gun_crit = 6, + gun_critEffc = 2.0, + suitable_ammo = {{"rangedweapons:shell",7}}, + gun_skill = {"shotgun_skill",20}, + gun_icon = "rangedweapons_benelli_icon.png", + gun_unloaded = "rangedweapons:benelli_rld", + gun_cooling = "rangedweapons:benelli_uld", + gun_velocity = 25, + gun_accuracy = 48, + gun_cooldown = 0.6, + gun_gravity = 4, + gun_reload = 0.25, + gun_projectiles = 5, + has_shell = 0, + gun_durability = 325, + gun_smokeSize = 14, + gun_door_breaking = 1, + gun_sound = "rangedweapons_shotgun_shot", + gun_unload_sound = "rangedweapons_shell_insert", + }, + on_secondary_use = function(itemstack, user, pointed_thing) +rangedweapons_single_load_gun(itemstack, user, "") +return itemstack +end, on_use = function(itemstack, user, pointed_thing) - local pos = user:getpos() - local dir = user:get_look_dir() - local yaw = user:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:benellishot") - if obj then - minetest.sound_play("rangedweapons_shotgun_shot", {object=obj}) - obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)}) - obj:setacceleration({x=dir.x * math.random(-3.8,3.8), y=math.random(-3.8,3.8), z=dir.z * math.random(-3.8,3.8)}) ------------------------------------------------------ - local obj = minetest.add_entity(pos, "rangedweapons:benellishot") - obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)}) - obj:setacceleration({x=dir.x * math.random(-3.8,3.8), y=math.random(-3.8,3.8), z=dir.z * math.random(-3.8,3.8)}) ------------------------------------------------------ - local obj = minetest.add_entity(pos, "rangedweapons:benellishot") - obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)}) - obj:setacceleration({x=dir.x * math.random(-3.8,3.8), y=math.random(-3.8,3.8), z=dir.z * math.random(-3.8,3.8)}) ------------------------------------------------------ - local obj = minetest.add_entity(pos, "rangedweapons:benellishot") - obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)}) - obj:setacceleration({x=dir.x * math.random(-3.8,3.8), y=math.random(-3.8,3.8), z=dir.z * math.random(-3.8,3.8)}) ------------------------------------------------------ - local obj = minetest.add_entity(pos, "rangedweapons:benellishot") - obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)}) - obj:setacceleration({x=dir.x * math.random(-3.8,3.8), y=math.random(-3.8,3.8), z=dir.z * math.random(-3.8,3.8)}) ------------------------------------------------------ - local obj = minetest.add_entity(pos, "rangedweapons:benellishot") - obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)}) - obj:setacceleration({x=dir.x * math.random(-3.8,3.8), y=math.random(-3.8,3.8), z=dir.z * math.random(-3.8,3.8)}) ------------------------------------------------------ - local obj = minetest.add_entity(pos, "rangedweapons:benellishot") - obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)}) - obj:setacceleration({x=dir.x * math.random(-3.8,3.8), y=math.random(-3.8,3.8), z=dir.z * math.random(-3.8,3.8)}) ------------------------------------------------------ - local obj = minetest.add_entity(pos, "rangedweapons:benellishot") - obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)}) - obj:setacceleration({x=dir.x * math.random(-3.8,3.8), y=math.random(-3.8,3.8), z=dir.z * math.random(-3.8,3.8)}) ------------------------------------------------------ - local obj = minetest.add_entity(pos, "rangedweapons:benellishot") - obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)}) - obj:setacceleration({x=dir.x * math.random(-3.8,3.8), y=math.random(-3.8,3.8), z=dir.z * math.random(-3.8,3.8)}) ------------------------------------------------------ - local obj = minetest.add_entity(pos, "rangedweapons:benellishot") - obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)}) - obj:setacceleration({x=dir.x * math.random(-3.8,3.8), y=math.random(-3.8,3.8), z=dir.z * math.random(-3.8,3.8)}) ------------------------------------------------------ - local obj = minetest.add_entity(pos, "rangedweapons:benellishot") - obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)}) - obj:setacceleration({x=dir.x * math.random(-3.8,3.8), y=math.random(-3.8,3.8), z=dir.z * math.random(-3.8,3.8)}) ------------------------------------------------------ - local obj = minetest.add_entity(pos, "rangedweapons:benellishot") - obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)}) - obj:setacceleration({x=dir.x * math.random(-3.8,3.8), y=math.random(-3.8,3.8), z=dir.z * math.random(-3.8,3.8)}) ------------------------------------------------------ - minetest.add_particle({ - pos = pos, - velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} , - acceleration = {x=dir.x * -4, y=2, z=dir.z * -4}, - expirationtime = 1.25, - size = 10, - collisiondetection = false, - vertical = false, - texture = "tnt_smoke.png", - glow = 5, - }) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or user - itemstack = "rangedweapons:benelli_uld" - end - end - end - return itemstack +rangedweapons_shoot_gun(itemstack, user) +return itemstack end, }) -local rangedweapons_benellishot = { - physical = false, - timer = 0, - visual = "sprite", - visual_size = {x=0.1, y=0.1}, - textures = {"rangedweapons_buckball.png"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_benellishot.on_step = function(self, dtime, node, pos) - self.timer = self.timer + dtime - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.225 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1.25) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:benellishot" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 4 then - local damage = math.random(9,19) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 12}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(3,9) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 6}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - if math.random(1, 100) <= 4 then - local damage = math.random(9,19) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(3,9) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - if self.timer >= 4.0 then - self.object:remove() - end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") then - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - if node.name == "rangedweapons:barrel" or - node.name == "doors:door_wood_a" or - node.name == "doors:door_wood_b" or - node.name == "doors:door_glass_a" or - node.name == "doors:door_glass_b" or - node.name == "xpanes:pane" or - node.name == "xpanes:pane_flat" or - node.name == "vessels:drinking_glass" or - node.name == "vessels:glass_bottle" or - node.name == "default:glass" then - minetest.get_node_timer(pos):start(0) - end - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end -end -end - - - -minetest.register_entity("rangedweapons:benellishot", rangedweapons_benellishot ) - - +minetest.register_tool("rangedweapons:benelli_uld", { + stack_max= 1, + wield_scale = {x=1.9,y=1.9,z=1.1}, + range = 0, + description = "" ..core.colorize("#35cdff","benelli m3\n") ..core.colorize("#FFFFFF", "Ranged damage: 2\n") ..core.colorize("#FFFFFF", "projectiles: 5\n") ..core.colorize("#FFFFFF", "Gun gravity: 4\n") ..core.colorize("#FFFFFF", "Accuracy: 48%\n")..core.colorize("#FFFFFF", "knockback: 6\n") ..core.colorize("#FFFFFF", "Critical chance: 6%\n") ..core.colorize("#FFFFFF", "Critical efficiency: 2.0x\n") ..core.colorize("#FFFFFF", "Ammunition: 12 gauge shells\n") ..core.colorize("#FFFFFF", "Pump delay: 0.6\n")..core.colorize("#FFFFFF", "Clip size: 7\n") ..core.colorize("#be0d00", "Right-click, to eject the empty shell!\n") ..core.colorize("#fff21c", "Right-click to load in a bullet!\n") ..core.colorize("#FFFFFF", "Gun type: shotgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 25"), + inventory_image = "rangedweapons_benelli.png", + groups = {not_in_creative_inventory = 1}, + on_use = function(user) + minetest.sound_play("rangedweapons_empty", {user}) + end, +on_secondary_use = function(itemstack, user, pointed_thing) +eject_shell(itemstack,user,"rangedweapons:benelli_rld",0.6,"rangedweapons_shotgun_reload_a","rangedweapons:empty_shell") +return itemstack +end, +}) diff --git a/beretta.lua b/beretta.lua index 580d6ec..a0d1f87 100644 --- a/beretta.lua +++ b/beretta.lua @@ -1,190 +1,58 @@ - local timer = 0 -minetest.register_globalstep(function(dtime, player) - timer = timer + dtime; - if timer >= 0.4 then - for _, player in pairs(minetest.get_connected_players()) do - if player:get_wielded_item():get_name() == "rangedweapons:beretta_rld" then - player:set_wielded_item("rangedweapons:beretta") - minetest.sound_play("", {player}) - end - end - end - end) - - -minetest.register_craftitem("rangedweapons:beretta_rld", { +minetest.register_tool("rangedweapons:beretta_rld", { stack_max= 1, wield_scale = {x=1.1,y=1.1,z=1.05}, - description = "***RELOADING BERETTA M9***", + description = "", + range = 0, + loaded_gun = "rangedweapons:beretta", + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_beretta_rld.png", +}) +minetest.register_tool("rangedweapons:beretta_r", { + stack_max= 1, + wield_scale = {x=1.1,y=1.1,z=1.05}, + description = "", + rw_next_reload = "rangedweapons:beretta", + load_sound = "rangedweapons_handgun_mag_in", range = 0, groups = {not_in_creative_inventory = 1}, inventory_image = "rangedweapons_beretta_rld.png", }) - minetest.register_tool("rangedweapons:beretta", { - description = "" ..core.colorize("#35cdff","Beretta M9\n") ..core.colorize("#FFFFFF", "Ranged damage: 5-8\n") ..core.colorize("#FFFFFF", "Accuracy: 94%\n") ..core.colorize("#FFFFFF", "Mob knockback: 3\n") ..core.colorize("#FFFFFF", "Critical chance: 15%\n") ..core.colorize("#FFFFFF", "Critical damage: 9-14\n") ..core.colorize("#FFFFFF", "Ammunition: 9mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.4\n") ..core.colorize("#FFFFFF", "Gun type: Handgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 25"), + description = "" ..core.colorize("#35cdff","Beretta M9\n") ..core.colorize("#FFFFFF", "Gun damage: 4\n")..core.colorize("#FFFFFF", "Accuracy: 94%\n") ..core.colorize("#FFFFFF", "gun knockback: 4\n") ..core.colorize("#FFFFFF", "Gun crit chance: 13%\n")..core.colorize("#FFFFFF", "Critical efficiency: 2.1x\n") ..core.colorize("#FFFFFF", "Reload delay: 0.5\n")..core.colorize("#FFFFFF", "Clip size: 15\n") ..core.colorize("#FFFFFF", "Ammunition: 9x19mm Parabellum\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.4\n") ..core.colorize("#FFFFFF", "Gun type: Handgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 25"), wield_scale = {x=1.1,y=1.1,z=1.05}, range = 0, inventory_image = "rangedweapons_beretta.png", +RW_gun_capabilities = { + gun_damage = {fleshy=4,knockback=4}, + gun_crit = 15, + gun_critEffc = 2.1, + suitable_ammo = {{"rangedweapons:9mm",15}}, + gun_skill = {"handgun_skill",43}, + gun_magazine = "rangedweapons:handgun_mag_black", + gun_icon = "rangedweapons_beretta_icon.png", + gun_unloaded = "rangedweapons:beretta_r", + gun_cooling = "rangedweapons:beretta_rld", + gun_velocity = 25, + gun_accuracy = 94, + gun_cooldown = 0.4, + gun_reload = 0.5, + gun_projectiles = 1, + has_shell = 1, + gun_durability = 1150, + gun_smokeSize = 5, + gun_unload_sound = "rangedweapons_handgun_mag_out", + gun_sound = "rangedweapons_beretta", + }, + on_secondary_use = function(itemstack, user, pointed_thing) +rangedweapons_reload_gun(itemstack, user) +return itemstack +end, on_use = function(itemstack, user, pointed_thing) - timer = 0 - local inv = user:get_inventory() - if not inv:contains_item("main", "rangedweapons:9mm 1") then - minetest.sound_play("rangedweapons_empty", {object=user}) - return itemstack - end - if not minetest.setting_getbool("creative_mode") then - inv:remove_item("main", "rangedweapons:9mm") - end - local pos = user:getpos() - local dir = user:get_look_dir() - local yaw = user:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:berettashot") - if obj then - minetest.sound_play("rangedweapons_beretta", {object=obj}) - obj:setvelocity({x=dir.x * 25, y=dir.y * 25, z=dir.z * 25}) - obj:setacceleration({x=dir.x * math.random(-0.6,0.6), y=math.random(-0.6,0.6), z=dir.z * math.random(-0.6,0.6)}) - obj:setyaw(yaw + math.pi) - pos.y = pos.y + 0 - local obj = minetest.add_entity(pos, "rangedweapons:empty_shell") - minetest.sound_play("", {object=obj}) - obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) - obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) - obj:setyaw(yaw + math.pi) - local obj = minetest.add_entity(pos, "rangedweapons:smoke") - minetest.add_particle({ - pos = pos, - velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} , - acceleration = {x=dir.x * -4, y=2, z=dir.z * -4}, - expirationtime = 0.7, - size = 5, - collisiondetection = false, - vertical = false, - texture = "tnt_smoke.png", - glow = 5, - }) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or user - itemstack = "rangedweapons:beretta_rld" - end - end - end - return itemstack +rangedweapons_shoot_gun(itemstack, user) +return itemstack end, }) -minetest.register_craft({ - output = 'rangedweapons:beretta', - recipe = { - {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, - {'', 'default:mese_crystal', 'rangedweapons:plastic_sheet'}, - {'', '', 'rangedweapons:plastic_sheet'}, - } -}) - -local rangedweapons_berettashot = { - physical = false, - timer = 0, - visual = "sprite", - visual_size = {x=0.3, y=0.3}, - textures = {"rangedweapons_invisible.png"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_berettashot.on_step = function(self, dtime, node, pos) - self.timer = self.timer + dtime - local tiem = 0.002 - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.11 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:berettashot" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 15 then - local damage = math.random(9,14) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=6}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(5,8) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=3}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - if math.random(1, 100) <= 15 then - local damage = math.random(9,14) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(5,8) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - if timer >= 0.002 + tiem then - minetest.add_particle({ - pos = pos, - velocity = 0, - acceleration = {x=0, y=0, z=0}, - expirationtime = 0.06, - size = 3, - collisiondetection = false, - vertical = false, - texture = "rangedweapons_bullet_fly.png", - glow = 15, - }) - tiem = tiem + 0.002 - end - if self.timer >= 4.0 then - self.object:remove() - end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") then - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - if node.name == "rangedweapons:barrel" or - node.name == "doors:door_glass_a" or - node.name == "doors:door_glass_b" or - node.name == "xpanes:pane" or - node.name == "xpanes:pane_flat" or - node.name == "vessels:drinking_glass" or - node.name == "vessels:glass_bottle" or - node.name == "default:glass" then - minetest.get_node_timer(pos):start(0) - end - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} - end - end - end - - -minetest.register_entity("rangedweapons:berettashot", rangedweapons_berettashot ) - diff --git a/bullet_knockback.lua b/bullet_knockback.lua new file mode 100644 index 0000000..65cf5d3 --- /dev/null +++ b/bullet_knockback.lua @@ -0,0 +1,15 @@ +function projectile_kb(victim,projectile,kbamount) + +if victim:get_pos() and projectile:get_pos() then +rw_proj_kb_pos_x = victim:get_pos().x - projectile:get_pos().x +rw_proj_kb_pos_y = victim:get_pos().y - projectile:get_pos().y +rw_proj_kb_pos_z = victim:get_pos().z - projectile:get_pos().z +else +rw_proj_kb_pos_x = 1 +rw_proj_kb_pos_y = 1 +rw_proj_kb_pos_z = 1 +end + +victim:add_player_velocity({x=kbamount*(rw_proj_kb_pos_x*2),y= kbamount*(math.abs(rw_proj_kb_pos_y)/2), z=kbamount*(rw_proj_kb_pos_z*2)}) + +end \ No newline at end of file diff --git a/cooldown_stuff.lua b/cooldown_stuff.lua new file mode 100644 index 0000000..2d6dcd6 --- /dev/null +++ b/cooldown_stuff.lua @@ -0,0 +1,102 @@ +minetest.register_globalstep(function(dtime, player) + for _, player in pairs(minetest.get_connected_players()) do + + + + + + local w_item = player:get_wielded_item() + + +local controls = player:get_player_control() +if w_item:get_definition().weapon_zoom ~= nil then + + if controls.zoom then +player:hud_change(scope_hud, "text", "rangedweapons_scopehud.png") + else +player:hud_change(scope_hud, "text", "rangedweapons_empty_icon.png") + end + +local wpn_zoom = w_item:get_definition().weapon_zoom + if player:get_properties().zoom_fov ~= wpn_zoom then + player:set_properties({zoom_fov = wpn_zoom}) + + end + +end + +if w_item:get_definition().weapon_zoom == nil then +player:hud_change(scope_hud, "text", "rangedweapons_empty_icon.png") + if player:get_inventory():contains_item( + "main", "binoculars:binoculars") then + new_zoom_fov = 10 + if player:get_properties().zoom_fov ~= new_zoom_fov then + player:set_properties({zoom_fov = new_zoom_fov}) + end + else + new_zoom_fov = 0 + if player:get_properties().zoom_fov ~= new_zoom_fov then + player:set_properties({zoom_fov = new_zoom_fov}) + end + end +end + + +local u_meta = player:get_meta() +local cool_down = u_meta:get_float("rw_cooldown") or 0 + + +if u_meta:get_float("rw_cooldown") > 0 then +u_meta:set_float("rw_cooldown", cool_down - dtime) +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_capabilities.automatic_gun and player:get_wielded_item():get_definition().RW_gun_capabilities.automatic_gun > 0 then + +rangedweapons_shoot_gun(itemstack, player) +player:set_wielded_item(itemstack) +end end + +if player:get_wielded_item():get_definition().RW_powergun_capabilities then +if player:get_wielded_item():get_definition().RW_powergun_capabilities.automatic_gun and player:get_wielded_item():get_definition().RW_powergun_capabilities.automatic_gun > 0 then + +rangedweapons_shoot_powergun(itemstack, player) +player:set_wielded_item(itemstack) +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() + +if player:get_wielded_item():get_definition().loaded_sound ~= nil then +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 + +if player:get_wielded_item():get_definition().rw_next_reload ~= nil then + local itemstack = player:get_wielded_item() + if itemstack:get_definition().load_sound ~= 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")) + itemstack:set_name(player:get_wielded_item():get_definition().rw_next_reload) + player:set_wielded_item(itemstack) +end +end + +end end) + + diff --git a/crafting.lua b/crafting.lua new file mode 100644 index 0000000..b821ab8 --- /dev/null +++ b/crafting.lua @@ -0,0 +1,641 @@ +---------------------------- +---------------------------- +if rweapons_gun_crafting == "true" then + +minetest.register_craft({ + output = "rangedweapons:aa12", + recipe = { + {"rangedweapons:gunsteel_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"default:diamondblock", "default:steel_ingot", "rangedweapons:plastic_sheet"}, + {"default:steel_ingot", "dye:black", "rangedweapons:plastic_sheet"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:aa12", + recipe = { + {"moreores:silver_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"default:diamondblock", "default:steel_ingot", "rangedweapons:plastic_sheet"}, + {"default:steel_ingot", "dye:black", "rangedweapons:plastic_sheet"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:ak47", + recipe = { + {"default:diamond", "default:steel_ingot", "default:tree"}, + {"default:tree", "default:mese", "default:steel_ingot"}, + {"default:steel_ingot", "", "default:tree"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:awp", + recipe = { + {"rangedweapons:gunsteel_ingot", "default:diamondblock", "rangedweapons:gunsteel_ingot"}, + {"rangedweapons:gunsteel_ingot", "rangedweapons:gunsteel_ingot", "rangedweapons:gunsteel_ingot"}, + {"dye:dark_green", "default:diamond", "rangedweapons:plastic_sheet"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:benelli", + recipe = { + {"rangedweapons:gunsteel_ingot", "default:diamond", "default:steel_ingot"}, + {"rangedweapons:plastic_sheet", "default:diamond", "default:steel_ingot"}, + {"", "default:mese_crystal", ""}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:beretta", + recipe = { + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"", "default:mese_crystal", "rangedweapons:plastic_sheet"}, + {"", "", "rangedweapons:plastic_sheet"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:m1991", + recipe = { + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"", "default:mese_crystal", "default:tree"}, + {"", "", "default:tree"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:deagle", + recipe = { + {"rangedweapons:gunsteel_ingot", "rangedweapons:gunsteel_ingot", "rangedweapons:gunsteel_ingot"}, + {"rangedweapons:gunsteel_ingot", "default:diamond", "rangedweapons:plastic_sheet"}, + {"", "", "rangedweapons:plastic_sheet"}, + } +}) +minetest.register_craft({ + output = "rangedweapons:golden_deagle", + recipe = { + {"default:gold_ingot", "default:gold_ingot", "default:gold_ingot"}, + {"default:gold_ingot", "rangedweapons:deagle", "default:gold_ingot"}, + {"default:gold_ingot", "default:gold_ingot", "default:gold_ingot"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:deagle", + recipe = { + {"moreores:silver_ingot", "moreores:silver_ingot", "moreores:silver_ingot"}, + {"moreores:silver_ingot", "default:diamond", "rangedweapons:plastic_sheet"}, + {"", "", "rangedweapons:plastic_sheet"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:python", + recipe = { + {"rangedweapons:gunsteel_ingot", "rangedweapons:gunsteel_ingot", "rangedweapons:gunsteel_ingot"}, + {"", "default:diamond", "rangedweapons:tree"}, + {"", "default:mese_crystal", "rangedweapons:tree"}, + } +}) +minetest.register_craft({ + output = "rangedweapons:python", + recipe = { + {"moreores:silver_ingot", "moreores:silver_ingot", "moreores:silver_ingot"}, + {"", "default:diamond", "rangedweapons:tree"}, + {"", "default:mese_crystal", "rangedweapons:tree"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:g36", + recipe = { + {"default:diamond", "default:mese", "default:diamond"}, + {"default:steel_ingot", "default:diamond", "default:steel_ingot"}, + {"default:steel_ingot", "", "default:steel_ingot"}, + } +}) + +minetest.register_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 = { + {"", "rangedweapons:gunsteel_ingot", "rangedweapons:gunsteel_ingot"}, + {"default:mese", "default:steelblock", "default:diamondblock"}, + {"", "default:mese", "default:diamondblock"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:kriss_sv", + recipe = { + {"rangedweapons:plastic_sheet", "rangedweapons:plastic_sheet", "rangedweapons:plastic_sheet"}, + {"default:gold_ingot", "default:mese_crystal", "rangedweapons:plastic_sheet"}, + {"rangedweapons:plastic_sheet", "default:gold_ingot", ""}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:laser_blaster", + recipe = { + {"default:steel_ingot", "rangedweapons:gun_power_core", "default:steel_ingot"}, + {"rangedweapons:gunsteel_ingot", "rangedweapons:gunsteel_ingot", "rangedweapons:gunsteel_ingot"}, + {"", "default:mese_crystal_fragment", "default:steel_ingot"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:forcegun", + recipe = { + {"rangedweapons:gunsteel_ingot", "default:diamondblock", "default:mese"}, + {"rangedweapons:gunsteel_ingot", "rangedweapons:gunsteel_ingot", "rangedweapons:gunsteel_ingot"}, + {"", "rangedweapons:gun_power_core", "default:steel_ingot"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:laser_rifle", + recipe = { + {"rangedweapons:ultra_gunsteel_ingot", "rangedweapons:gun_power_core", "rangedweapons:ultra_gunsteel_ingot"}, + {"rangedweapons:gun_power_core", "rangedweapons:ultra_gunsteel_ingot", "default:gold_ingot"}, + {"default:gold_ingot", "default:mese", "rangedweapons:ultra_gunsteel_ingot"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:laser_shotgun", + recipe = { + {"rangedweapons:ultra_gunsteel_ingot", "rangedweapons:gun_power_core", "rangedweapons:ultra_gunsteel_ingot"}, + {"rangedweapons:gun_power_core", "rangedweapons:gun_power_core", "rangedweapons:ultra_gunsteel_ingot"}, + {"", "rangedweapons:ultra_gunsteel_ingot", "rangedweapons:ultra_gunsteel_ingot"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:luger", + recipe = { + {"", "", "default:mese_crystal_fragment"}, + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"", "default:mese_crystal_fragment", "default:tree"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:m16", + recipe = { + {"default:diamond", "default:steelblock", "default:steel_ingot"}, + {"default:steel_ingot", "default:diamond", "default:steel_ingot"}, + {"default:steel_ingot", "", "default:steel_ingot"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:m60", + recipe = { + {"default:diamond", "default:mese", "default:mese"}, + {"default:steel_ingot", "default:steelblock", "default:steelblock"}, + {"dye:black", "default:diamond", "default:steel_ingot"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:m79", + recipe = { + {"default:steel_ingot", "", "default:mese_crystal"}, + {"default:steelblock", "default:diamond", "default:tree"}, + {"default:tree", "default:tree", "default:tree"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:m200", + recipe = { + {"default:diamondblock", "default:steel_ingot", "default:diamondblock"}, + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"default:steel_ingot", "default:diamond", "default:steel_ingot"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:makarov", + recipe = { + {"", "default:steel_ingot", "default:steel_ingot"}, + {"", "default:mese_crystal_fragment", "default:tree"}, + {"", "", "dye:black"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:milkor", + recipe = { + {"default:diamond", "default:steel_ingot", "default:diamond"}, + {"default:steel_ingot", "default:steelblock", "default:steel_ingot"}, + {"default:steel_ingot", "default:mese", "default:steel_ingot"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:minigun", + recipe = { + {"", "default:steelblock", "default:mese"}, + {"default:diamondblock", "default:diamondblock", "default:diamondblock"}, + {"default:steelblock", "default:steelblock", "default:steelblock"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:mp5", + recipe = { + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"default:steel_ingot", "default:diamond", "default:steel_ingot"}, + {"default:steel_ingot", "rangedweapons:plastic_sheet", "dye:black"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:thompson", + recipe = { + {"default:steel_ingot", "default:steel_ingot", "default:diamond"}, + {"default:tree", "default:tree", "default:steel_ingot"}, + {"default:steel_ingot", "default:diamond", "default:tree"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:mp40", + recipe = { + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"default:steel_ingot", "default:mese_crystal", "default:steel_ingot"}, + {"default:steel_ingot", "default:mese_crystal_fragment", ""}, + } +}) + + + +minetest.register_craft({ + output = "rangedweapons:remington", + recipe = { + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"default:tree", "default:mese_crystal", "default:tree"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:rpg", + recipe = { + {"default:diamond", "default:steel_ingot", ""}, + {"default:steelblock", "default:tree", "default:diamondblock"}, + {"default:diamond", "default:tree", ""}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:rpk", + recipe = { + {"default:diamond", "rangedweapons:ak47", ""}, + {"default:steel_ingot", "default:steelblock", "default:tree"}, + {"", "default:diamond", "default:steel_ingot"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:scar", + recipe = { + {"default:diamond", "default:mese", "default:mese"}, + {"default:steel_ingot", "default:steel_ingot", "default:mese"}, + {"rangedweapons:plastic_sheet", "", "default:mese_crystal"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:spas12", + recipe = { + {"", "default:steel_ingot", "default:steel_ingot"}, + {"default:steel_ingot", "default:mese", "default:diamond"}, + {"rangedweapons:plastic_sheet", "default:diamond", "default:steel_ingot"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:svd", + recipe = { + {"default:steel_ingot", "default:diamondblock", "default:steel_ingot"}, + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"default:tree", "default:diamond", "default:tree"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:taurus", + recipe = { +{"rangedweapons:gunsteel_ingot", "default:mese_crystal", "default:mese_crystal_fragment"}, +{"rangedweapons:gunsteel_ingot", "default:diamondblock", "rangedweapons:gunsteel_ingot"}, + {"", "rangedweapons:gunsteel_ingot", "rangedweapons:plastic_sheet"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:taurus", + recipe = { +{"moreores:silver_ingot", "default:mese_crystal", "default:mese_crystal_fragment"}, +{"moreores:silver_ingot", "default:diamondblock", "moreores:silver_ingot"}, + {"", "moreores:silver_ingot", "rangedweapons:plastic_sheet"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:tec9", + recipe = { + {"rangedweapons:plastic_sheet", "rangedweapons:plastic_sheet", "rangedweapons:plastic_sheet"}, + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"default:steel_ingot", "default:mese_crystal_fragment", "default:steel_ingot"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:tmp", + recipe = { + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"default:steel_ingot", "default:mese_crystal_fragment", "default:steel_ingot"}, + {"", "dye:black", "default:steel_ingot"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:ump", + recipe = { + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"rangedweapons:gunsteel_ingot", "default:diamond", "default:diamond"}, + {"default:steel_ingot", "default:mese_crystal", "default:steel_ingot"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:uzi", + recipe = { + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"default:diamond", "rangedweapons:plastic_sheet", "default:steel_ingot"}, + {"", "default:steel_ingot", ""}, + } +}) + +end +---------------------------------- +---------------------------------- +if rweapons_other_weapon_crafting == "true" then + +minetest.register_craft({ + output = "rangedweapons:barrel", + recipe = { + {"default:wood", "tnt:gunpowder", "default:wood"}, + {"default:wood", "tnt:tnt", "default:wood"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:hand_grenade", + recipe = { + {"", "", "default:mese_crystal_fragment"}, + {"default:steel_ingot", "tnt:gunpowder", ""}, + {"tnt:gunpowder", "tnt:gunpowder", ""}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:javelin 1", + recipe = { + {"default:diamond", "default:steel_ingot", ""}, + {"default:steel_ingot", "", "group:stick"}, + {"", "", "group:stick"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:wooden_shuriken 20", + recipe = { + {"", "group:wood", ""}, + {"group:wood", "", "group:wood"}, + {"", "group:wood", ""}, + } +}) +minetest.register_craft({ + output = "rangedweapons:stone_shuriken 10", + recipe = { + {"", "default:cobble", ""}, + {"default:cobble", "", "default:cobble"}, + {"", "default:cobble", ""}, + } +}) +minetest.register_craft({ + output = "rangedweapons:steel_shuriken 30", + recipe = { + {"", "default:steel_ingot", ""}, + {"default:steel_ingot", "", "default:steel_ingot"}, + {"", "default:steel_ingot", ""}, + } +}) +minetest.register_craft({ + output = "rangedweapons:bronze_shuriken 35", + recipe = { + {"", "default:bronze_ingot", ""}, + {"default:bronze_ingot", "", "default:bronze_ingot"}, + {"", "default:bronze_ingot", ""}, + } +}) +minetest.register_craft({ + output = "rangedweapons:golden_shuriken 42", + recipe = { + {"", "default:gold_ingot", ""}, + {"default:gold_ingot", "", "default:gold_ingot"}, + {"", "default:gold_ingot", ""}, + } +}) +minetest.register_craft({ + output = "rangedweapons:mese_shuriken 55", + recipe = { + {"", "default:mese_crystal", ""}, + {"default:mese_crystal", "", "default:mese_crystal"}, + {"", "default:mese_crystal", ""}, + } +}) +minetest.register_craft({ + output = "rangedweapons:diamond_shuriken 69", + recipe = { + {"", "default:diamond", ""}, + {"default:diamond", "", "default:diamond"}, + {"", "default:diamond", ""}, + } +}) + +end +------------------------------------ +------------------------------------ +if rweapons_ammo_crafting == "true" then + +minetest.register_craft({ + output = "rangedweapons:9mm 40", + recipe = { + {"default:steel_ingot", "", ""}, + {"tnt:gunpowder", "", ""}, + {"default:copper_ingot", "", ""}, + } +}) +minetest.register_craft({ + output = "rangedweapons:45acp 40", + recipe = { + {"","default:bronze_ingot", ""}, + {"default:gold_ingot","tnt:gunpowder", "default:gold_ingot"}, + {"","default:tin_ingot", ""}, + } +}) +minetest.register_craft({ + output = "rangedweapons:10mm 60", + recipe = { + {"", "default:bronze_ingot", ""}, + {"default:steel_ingot", "tnt:gunpowder", "default:steel_ingot"}, + {"default:steel_ingot", "tnt:gunpowder", "default:steel_ingot"}, + } +}) +minetest.register_craft({ + output = "rangedweapons:357 15", + recipe = { + {"default:copper_ingot", "", ""}, + {"tnt:gunpowder", "", ""}, + {"default:gold_ingot", "", ""}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:50ae 15", + recipe = { + {"default:bronze_ingot", "default:coal_lump", "default:bronze_ingot"}, + {"default:gold_ingot", "tnt:gunpowder", "default:gold_ingot"}, + {"default:gold_ingot", "tnt:gunpowder", "default:gold_ingot"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:44 15", + recipe = { + {"default:bronze_ingot", "default:coal_lump", ""}, + {"tnt:gunpowder", "", ""}, + {"default:gold_ingot", "", ""}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:762mm 50", + recipe = { + {"default:bronze_ingot", "tnt:gunpowder", "default:bronze_ingot"}, + {"default:gold_ingot", "tnt:gunpowder", "default:gold_ingot"}, + {"default:gold_ingot", "tnt:gunpowder", "default:gold_ingot"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:408cheytac 10", + recipe = { + {"default:bronze_ingot", "tnt:gunpowder", "default:bronze_ingot"}, + {"default:gold_ingot", "default:gold_ingot", "default:gold_ingot"}, + {"default:gold_ingot", "tnt:gunpowder", "default:gold_ingot"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:556mm 90", + recipe = { + {"", "default:gold_ingot", ""}, + {"default:gold_ingot", "tnt:gunpowder", "default:gold_ingot"}, + {"default:gold_ingot", "tnt:gunpowder", "default:gold_ingot"}, + } +}) +minetest.register_craft({ + output = "rangedweapons:shell 12", + recipe = { + {"default:bronze_ingot", "default:steel_ingot", "default:bronze_ingot"}, + {"default:bronze_ingot", "tnt:gunpowder", "default:bronze_ingot"}, + {"default:gold_ingot", "tnt:gunpowder", "default:gold_ingot"}, + } +}) +minetest.register_craft({ + output = "rangedweapons:308winchester 15", + recipe = { + {"", "default:steel_ingot", ""}, + {"default:bronze_ingot", "tnt:gunpowder", "default:bronze_ingot"}, + {"default:gold_ingot", "tnt:gunpowder", "default:gold_ingot"}, + } +}) +minetest.register_craft({ + output = "rangedweapons:40mm 5", + recipe = { + {"", "default:gold_ingot", ""}, + {"default:steel_ingot", "tnt:gunpowder", "default:steel_ingot"}, + {"tnt:gunpowder", "default:bronze_ingot", "tnt:gunpowder"}, + } +}) +minetest.register_craft({ + output = "rangedweapons:rocket 1", + recipe = { + {"", "", "rangedweapons:40mm"}, + {"", "tnt:gunpowder", ""}, + {"default:steel_ingot", "", ""}, + } +}) + +end +------------------------------------- +------------------------------------- +if rweapons_item_crafting == "true" then + +minetest.register_craft({ + output = "rangedweapons:generator", + recipe = { +{"default:gold_ingot", "default:gold_ingot", "default:gold_ingot"}, + {"rangedweapons:gunsteel_ingot", "rangedweapons:gun_power_core", "rangedweapons:gunsteel_ingot"}, + {"rangedweapons:gunsteel_ingot", "rangedweapons:gunsteel_ingot", "rangedweapons:gunsteel_ingot"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:gunsteel_ingot", + recipe = { + {"default:steel_ingot", "default:tin_ingot", "default:coal_lump"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:ultra_gunsteel_ingot", + recipe = { + {"", "default:mese_crystal", ""}, + {"default:gold_ingot", "rangedweapons:gunsteel_ingot", "default:gold_ingot"}, + {"", "default:diamond", ""}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:plastic_sheet", + recipe = { + {"default:tree", "default:coal_lump", "default:tree"}, + {"default:coal_lump", "default:tree", "default:coal_lump"}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:gun_power_core", + recipe = { + {"rangedweapons:gunsteel_ingot", "default:goldblock", "rangedweapons:gunsteel_ingot"}, + {"default:diamondblock", "default:mese", "default:diamondblock"}, + {"rangedweapons:gunsteel_ingot", "default:goldblock", "rangedweapons:gunsteel_ingot"}, + } +}) + +end \ No newline at end of file diff --git a/deagle.lua b/deagle.lua index 4e7e6e2..82ddec2 100644 --- a/deagle.lua +++ b/deagle.lua @@ -1,197 +1,121 @@ - local timer = 0 -minetest.register_globalstep(function(dtime, player) - timer = timer + dtime; - if timer >= 0.75 then - for _, player in pairs(minetest.get_connected_players()) do - if player:get_wielded_item():get_name() == "rangedweapons:deagle_rld" then - player:set_wielded_item("rangedweapons:deagle") - minetest.sound_play("", {player}) - end - end - end - end) - -minetest.register_craftitem("rangedweapons:deagle_rld", { +minetest.register_tool("rangedweapons:deagle_rld", { stack_max= 1, wield_scale = {x=1.25,y=1.25,z=1.5}, - description = "***RELOADING DESERT EAGLE***", + description = "", range = 0, + loaded_gun = "rangedweapons:deagle", + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_deagle_rld.png", +}) +minetest.register_tool("rangedweapons:deagle_r", { + stack_max= 1, + wield_scale = {x=1.25,y=1.25,z=1.5}, + description = "", + range = 0, + rw_next_reload = "rangedweapons:deagle", + load_sound = "rangedweapons_handgun_mag_in", groups = {not_in_creative_inventory = 1}, inventory_image = "rangedweapons_deagle_rld.png", }) - minetest.register_tool("rangedweapons:deagle", { - description = "" ..core.colorize("#35cdff","Desert Eagle\n")..core.colorize("#FFFFFF", "Ranged damage: 11-18\n") ..core.colorize("#FFFFFF", "Accuracy: 85%\n") ..core.colorize("#FFFFFF", "Mob knockback: 9\n") ..core.colorize("#FFFFFF", "Critical chance: 29%\n") ..core.colorize("#FFFFFF", "Critical damage: 25-44\n") ..core.colorize("#FFFFFF", "Ammunition: .357 Magnum rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.75\n") ..core.colorize("#FFFFFF", "Gun type: Magnum\n") ..core.colorize("#FFFFFF", "Bullet velocity: 45"), + description = "" ..core.colorize("#35cdff","Desert Eagle\n")..core.colorize("#FFFFFF", "Ranged damage: 11\n") ..core.colorize("#FFFFFF", "Accuracy: 85%\n") ..core.colorize("#FFFFFF", "knockback: 6\n") ..core.colorize("#FFFFFF", "Critical chance: 20%\n") ..core.colorize("#FFFFFF", "Critical efficiency: 3x\n")..core.colorize("#FFFFFF", "Reload delay: 0.6\n")..core.colorize("#FFFFFF", "Clip size: 9/8/7\n") ..core.colorize("#FFFFFF", "Ammunition: .357 Magnum rounds/.44 magnum rounds/.50AE catridges\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.7\n") ..core.colorize("#FFFFFF", "Gun type: Magnum\n") ..core.colorize("#FFFFFF", "Block penetration: 5%\n") +..core.colorize("#FFFFFF", "penetration: 15%\n")..core.colorize("#FFFFFF", "Bullet velocity: 50"), wield_scale = {x=1.25,y=1.25,z=1.5}, range = 0, inventory_image = "rangedweapons_deagle.png", +RW_gun_capabilities = { + gun_damage = {fleshy=11,knockback=6}, + gun_crit = 20, + gun_critEffc = 2.2, + suitable_ammo = {{"rangedweapons:357",9},{"rangedweapons:44",8},{"rangedweapons:50ae",7}}, + gun_skill = {"revolver_skill",40}, + gun_magazine = "rangedweapons:handgun_mag_white", + gun_icon = "rangedweapons_deagle_icon.png", + gun_unloaded = "rangedweapons:deagle_r", + gun_cooling = "rangedweapons:deagle_rld", + gun_velocity = 50, + gun_accuracy = 85, + gun_cooldown = 0.7, + gun_reload = 0.6/1, + gun_projectiles = 1, + has_shell = 1, + gun_durability = 900, + gun_smokeSize = 7, + gun_mob_penetration = 15, + gun_node_penetration = 5, + gun_unload_sound = "rangedweapons_handgun_mag_out", + gun_sound = "rangedweapons_deagle", + }, + on_secondary_use = function(itemstack, user, pointed_thing) +rangedweapons_reload_gun(itemstack, user) +return itemstack +end, on_use = function(itemstack, user, pointed_thing) - timer = 0 - local inv = user:get_inventory() - if not inv:contains_item("main", "rangedweapons:357 1") then - minetest.sound_play("rangedweapons_empty", {object=user}) - return itemstack - end - if not minetest.setting_getbool("creative_mode") then - inv:remove_item("main", "rangedweapons:357") - end - local pos = user:getpos() - local dir = user:get_look_dir() - local yaw = user:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:deagleshot") - if obj then - minetest.sound_play("rangedweapons_deagle", {object=obj}) - obj:setvelocity({x=dir.x * 45, y=dir.y * 45, z=dir.z * 45}) - obj:setacceleration({x=dir.x * math.random(-1.5,1.5), y=math.random(-1.5,1.5), z=dir.z * math.random(-1.5,1.5)}) - obj:setyaw(yaw + math.pi) - pos.y = pos.y + 0 - local obj = minetest.add_entity(pos, "rangedweapons:empty_shell") - minetest.sound_play("", {object=obj}) - obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) - obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) - obj:setyaw(yaw + math.pi) - minetest.add_particle({ - pos = pos, - velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} , - acceleration = {x=dir.x * -4, y=2, z=dir.z * -4}, - expirationtime = 1.0, - size = 8, - collisiondetection = false, - vertical = false, - texture = "tnt_smoke.png", - glow = 5, - }) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or user - itemstack = "rangedweapons:deagle_rld" - end - end - end - return itemstack +rangedweapons_shoot_gun(itemstack, user) +return itemstack end, }) -minetest.register_craft({ - output = 'rangedweapons:deagle', - recipe = { - {'rangedweapons:gunsteel_ingot', 'rangedweapons:gunsteel_ingot', 'rangedweapons:gunsteel_ingot'}, - {'rangedweapons:gunsteel_ingot', 'default:diamond', 'rangedweapons:plastic_sheet'}, - {'', '', 'rangedweapons:plastic_sheet'}, - } + +minetest.register_tool("rangedweapons:golden_deagle_rld", { + stack_max= 1, + wield_scale = {x=1.25,y=1.25,z=1.5}, + description = "", + range = 0, + loaded_gun = "rangedweapons:golden_deagle", + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_golden_deagle_rld.png", }) -minetest.register_craft({ - output = 'rangedweapons:deagle', - recipe = { - {'moreores:silver_ingot', 'moreores:silver_ingot', 'moreores:silver_ingot'}, - {'moreores:silver_ingot', 'default:diamond', 'rangedweapons:plastic_sheet'}, - {'', '', 'rangedweapons:plastic_sheet'}, - } +minetest.register_tool("rangedweapons:golden_deagle_r", { + stack_max= 1, + wield_scale = {x=1.25,y=1.25,z=1.5}, + description = "", + range = 0, + rw_next_reload = "rangedweapons:golden_deagle", + load_sound = "rangedweapons_handgun_mag_in", + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_golden_deagle_rld.png", }) -local rangedweapons_deagleshot = { - physical = false, - timer = 0, - visual = "sprite", - visual_size = {x=0.3, y=0.3}, - textures = {"rangedweapons_invisible.png"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_deagleshot.on_step = function(self, dtime, node, pos) - self.timer = self.timer + dtime - local tiem = 0.002 - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.065 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1.25) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:deagleshot" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 29 then - local damage = math.random(25,44) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=18}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(11,18) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=9}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - if math.random(1, 100) <= 29 then - local damage = math.random(25,44) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(11,18) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - if timer >= 0.002 + tiem then - minetest.add_particle({ - pos = pos, - velocity = 0, - acceleration = {x=0, y=0, z=0}, - expirationtime = 0.06, - size = 3, - collisiondetection = false, - vertical = false, - texture = "rangedweapons_bullet_fly.png", - glow = 15, - }) - tiem = tiem + 0.002 - end - if self.timer >= 4.0 then - self.object:remove() - end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") then - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - if node.name == "rangedweapons:barrel" or - node.name == "doors:door_glass_a" or - node.name == "doors:door_glass_b" or - node.name == "xpanes:pane" or - node.name == "xpanes:pane_flat" or - node.name == "vessels:drinking_glass" or - node.name == "vessels:glass_bottle" or - node.name == "default:glass" then - minetest.get_node_timer(pos):start(0) - end - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} - end - end - end - - -minetest.register_entity("rangedweapons:deagleshot", rangedweapons_deagleshot ) - +minetest.register_tool("rangedweapons:golden_deagle", { + description = "" ..core.colorize("#35cdff","Golden Desert Eagle\n")..core.colorize("#FFFFFF", "Ranged damage: 14\n") ..core.colorize("#FFFFFF", "Accuracy: 90%\n") ..core.colorize("#FFFFFF", "knockback: 6\n") ..core.colorize("#FFFFFF", "Critical chance: 23%\n") ..core.colorize("#FFFFFF", "Critical efficiency: 3x\n")..core.colorize("#FFFFFF", "Reload delay: 0.6\n")..core.colorize("#FFFFFF", "Clip size: 9/8/7\n") ..core.colorize("#FFFFFF", "Ammunition: .357 Magnum rounds/.44 magnum rounds/.50AE catridges\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.75\n") ..core.colorize("#FFFFFF", "Gun type: Magnum\n") ..core.colorize("#FFFFFF", "Block penetration: 5%\n") +..core.colorize("#FFFFFF", "penetration: 15%\n")..core.colorize("#FFFFFF", "Bullet velocity: 50"), + wield_scale = {x=1.25,y=1.25,z=1.5}, + range = 0, + inventory_image = "rangedweapons_golden_deagle.png", +RW_gun_capabilities = { + gun_damage = {fleshy=14,knockback=6}, + gun_crit = 23, + gun_critEffc = 2.2, + suitable_ammo = {{"rangedweapons:357",9},{"rangedweapons:44",8},{"rangedweapons:50ae",7}}, + gun_skill = {"revolver_skill",38}, + gun_magazine = "rangedweapons:handgun_mag_white", + gun_icon = "rangedweapons_golden_deagle_icon.png", + gun_unloaded = "rangedweapons:golden_deagle_r", + gun_cooling = "rangedweapons:golden_deagle_rld", + gun_velocity = 50, + gun_accuracy = 90, + gun_cooldown = 0.75, + gun_reload = 0.6/1, + gun_projectiles = 1, + has_shell = 1, + gun_durability = 1000, + gun_smokeSize = 7, + gun_mob_penetration = 15, + gun_node_penetration = 5, + gun_unload_sound = "rangedweapons_handgun_mag_out", + gun_sound = "rangedweapons_deagle", + }, + 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/depends.txt b/depends.txt index b77902c..e1310e1 100644 --- a/depends.txt +++ b/depends.txt @@ -3,4 +3,8 @@ tnt doors? xpanes? vessels? -moreores? \ No newline at end of file +moreores? +3d_armor? + + + diff --git a/explosives.lua b/explosives.lua index 91e677f..78122a8 100644 --- a/explosives.lua +++ b/explosives.lua @@ -169,14 +169,6 @@ local barrel_boom = { } tnt.register_tnt(barrel_boom) -minetest.register_craft({ - output = "rangedweapons:barrel", - recipe = { - {"default:wood", "tnt:gunpowder", "default:wood"}, - {"default:wood", "tnt:tnt", "default:wood"}, - } -}) - minetest.register_node("rangedweapons:barrel", { description = "" ..core.colorize("#35cdff","Explosive barrel\n")..core.colorize("#FFFFFF", "It will explode if shot by gun"), tiles = { @@ -190,11 +182,8 @@ minetest.register_node("rangedweapons:barrel", { drawtype = "nodebox", paramtype = "light", groups = {choppy = 3, oddly_breakable_by_hand = 3}, - on_timer = function(pos) - tnt.boom(pos, barrel_boom) - end, on_blast = function(pos) - tnt.boom(pos, barrel_boom) + tnt.boom(pos, {radius = 3}) end, sounds = default.node_sound_wood_defaults(), node_box = { diff --git a/forcegun.lua b/forcegun.lua new file mode 100644 index 0000000..08e76d5 --- /dev/null +++ b/forcegun.lua @@ -0,0 +1,148 @@ +minetest.register_tool("rangedweapons:forcegun", { + description = "" ..core.colorize("#35cdff","Force gun\n") ..core.colorize("#FFFFFF", "Completelly harmless... by itself...\n")..core.colorize("#FFFFFF", "It's projectile will push either the entity it hits directly, or everyone near the node it collides with far away.\n") ..core.colorize("#FFFFFF", "Perfect for rocket-jumping or YEETing enemies away.\n")..core.colorize("#FFFFFF", "Power usage: 40\n")..core.colorize("#FFFFFF", "Gun type:Power Special-gun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 60"), + range = 0, + wield_scale = {x=2.0,y=2.0,z=1.75}, + inventory_image = "rangedweapons_forcegun.png", + on_use = function(itemstack, user, pointed_thing) + + local pos = user:get_pos() + local dir = user:get_look_dir() + local yaw = user:get_look_yaw() + local inv = user:get_inventory() +if inv:contains_item("main", "rangedweapons:power_particle 40") then + if pos and dir then + inv:remove_item("main", "rangedweapons:power_particle 25") + pos.y = pos.y + 1.5 + local obj = minetest.add_entity(pos, "rangedweapons:forceblast") + if obj then + minetest.sound_play("rangedweapons_rocket", {object=obj}) + obj:set_velocity({x=dir.x * 60, y=dir.y * 60, z=dir.z * 60}) + + obj:setyaw(yaw + math.pi) + proj_dir = dir + local ent = obj:get_luaentity() + if ent then + ent.player = ent.player or user + end + end + end + end + end, +}) + +local rangedweapons_forceblast = { + timer = 0, +initial_properties = { + physical = true, + hp_max = 420, + glow = 30, + visual = "sprite", + visual_size = {x=0.4, y=0.4,}, + textures = {"rangedweapons_force_bullet.png"}, + lastpos = {}, + collide_with_objects = false, + collisionbox = {-0.25, -0.25, -0.25, 0.25, 0.25, 0.25}, +}, + +} +rangedweapons_forceblast.on_step = function(self, dtime, moveresult) + self.timer = self.timer + dtime + local pos = self.object:get_pos() + proj_dir = proj_dir or ({x=0,y=0,z=0}) + + +if self.timer > 10 then +self.object:remove() +end + +if self.timer > 0.05 then +self.object:set_properties({collide_with_objects = true}) +end + +if moveresult.collides == true then +if moveresult.collisions[1] ~= nil then + +if moveresult.collisions[1].type == "object" then +if moveresult.collisions[1].object:is_player() then + +moveresult.collisions[1].object:add_player_velocity({x=proj_dir.x * 20, y=5+ (proj_dir.y * 20), z=proj_dir.z * 20}) + else +moveresult.collisions[1].object:add_velocity({x=proj_dir.x * 20, y=5+ (proj_dir.y * 20), z=proj_dir.z * 20}) + +end + minetest.add_particle({ + pos = ({x = pos.x, y = pos.y, z = pos.z}), + velocity ={x=0,y=0,z=0}, + acceleration ={x=0,y=0,z=0}, + expirationtime = 0.20, + size = 16, + collisiondetection = true, + collision_removal = false, + vertical = false, + texture = "rangedweapons_force_blast.png", + glow = 20, + animation = {type="vertical_frames", aspect_w=64, aspect_h=64, length = 0.20,}, + }) + self.object:remove() +end + +if moveresult.collisions[1].type == "node" then + +local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 7) + for k, obj in pairs(objs) do + +if obj:get_pos() then +posd_x = pos.x - obj:get_pos().x +posd_y = pos.y - obj:get_pos().y +posd_z = pos.z - obj:get_pos().z +else +posd_x = 1 +posd_y = 1 +posd_z = 1 +end + + +if posd_y < 0 and posd_y > -1 then posd_y = -1 end +if posd_y > 0 and posd_y < 1 then posd_y = 1 end + +if posd_y > 0 then posd_y=posd_y*3 end + +posd_y = (posd_y + 0.5) * (((math.abs(posd_x)+0.5)+(math.abs(posd_z)+0.5))/2) + +if posd_y > -1.0 and posd_y < 0 then posd_y = -1.0 end + + if obj:get_luaentity() ~= nil then + if obj:get_luaentity().name ~= "rangedweapons:forceblast" then + obj:add_velocity({x=10*(-posd_x), y=30*(-1/posd_y), z=10*(-posd_z)}) + self.object:remove() +end + else + obj:add_player_velocity({x=30*((-posd_x)/(1+math.abs(posd_x))), y=25*(-1/posd_y), z=30*((-posd_z)/(1+math.abs(posd_z)))}) + self.object:remove() + +end +end + + minetest.add_particle({ + pos = ({x = pos.x, y = pos.y, z = pos.z}), + velocity ={x=0,y=0,z=0}, + acceleration ={x=0,y=0,z=0}, + expirationtime = 0.20, + size = 128, + collisiondetection = true, + collision_removal = false, + vertical = false, + texture = "rangedweapons_force_blast.png", + glow = 20, + animation = {type="vertical_frames", aspect_w=64, aspect_h=64, length = 0.20,}, + }) + self.object:remove() + end + + self.lastpos= {x = pos.x, y = pos.y, z = pos.z} +end +end +end + + +minetest.register_entity("rangedweapons:forceblast", rangedweapons_forceblast) diff --git a/g36.lua b/g36.lua index 91b9d60..58643b1 100644 --- a/g36.lua +++ b/g36.lua @@ -1,177 +1,74 @@ -minetest.register_craft({ - output = 'rangedweapons:g36', - recipe = { - {'default:diamond', 'default:mese', 'default:diamond'}, - {'default:steel_ingot', 'default:diamond', 'default:steel_ingot'}, - {'default:steel_ingot', '', 'default:steel_ingot'}, - } -}) - minetest.register_craftitem("rangedweapons:g36", { + +minetest.register_tool("rangedweapons:g36_r", { stack_max= 1, wield_scale = {x=1.75,y=1.75,z=1.3}, - description = "" ..core.colorize("#35cdff","G36\n") ..core.colorize("#FFFFFF", "Ranged damage: 6-13\n") ..core.colorize("#FFFFFF", "Accuracy: 84%\n") ..core.colorize("#FFFFFF", "Mob knockback: 3\n")..core.colorize("#FFFFFF", "Critical chance: 10%\n") ..core.colorize("#FFFFFF", "Critical damage: 12-25\n") ..core.colorize("#FFFFFF", "Ammunition: 5.56mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.14\n") ..core.colorize("#FFFFFF", "Gun type: Assault rifle\n") ..core.colorize("#FFFFFF", "Bullet velocity: 35"), + description = "", + rw_next_reload = "rangedweapons:g36_rr", + load_sound = "rangedweapons_handgun_mag_in", range = 0, + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_g36_rld.png", +}) + +minetest.register_tool("rangedweapons:g36_rr", { + stack_max= 1, + wield_scale = {x=1.75,y=1.75,z=1.3}, + description = "", + rw_next_reload = "rangedweapons:g36_rrr", + load_sound = "rangedweapons_rifle_reload_a", + range = 0, + groups = {not_in_creative_inventory = 1}, inventory_image = "rangedweapons_g36.png", }) -local timer = 0 -minetest.register_globalstep(function(dtime, player) - timer = timer + dtime; - if timer >= 0.14 then - for _, player in pairs(minetest.get_connected_players()) do - local inv = player:get_inventory() - local controls = player:get_player_control() - if controls.LMB then - timer = 0 - local wielded_item = player:get_wielded_item():get_name() - if wielded_item == "rangedweapons:g36" then - if not inv:contains_item("main", "rangedweapons:556mm") then -minetest.sound_play("rangedweapons_empty", {object=player}) - else - if wielded_item == "rangedweapons:g36" then - inv:remove_item("main", "rangedweapons:556mm") - local pos = player:getpos() - local dir = player:get_look_dir() - local yaw = player:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:g36shot") - if obj then - minetest.sound_play("rangedweapons_smg", {object=obj}) - obj:setvelocity({x=dir.x * 35, y=dir.y * 35, z=dir.z * 35}) - obj:setacceleration({x=dir.x * math.random(-1.6,1.6), y=math.random(-1.6,1.6), z=dir.z * math.random(-1.6,1.6)}) - obj:setyaw(yaw + math.pi) - pos.y = pos.y + 0 - local obj = minetest.add_entity(pos, "rangedweapons:empty_shell") - minetest.sound_play("", {object=obj}) - obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) - obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) - obj:setyaw(yaw + math.pi) - minetest.add_particle({ - pos = pos, - velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} , - acceleration = {x=dir.x * -4, y=2, z=dir.z * -4}, - expirationtime = 0.5, - size = 4, - collisiondetection = false, - vertical = false, - texture = "tnt_smoke.png", - glow = 5, - }) - - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or player - end - end - end - end -end - -end - end - end - end - end) - -local rangedweapons_g36shot = { - physical = false, - timer = 0, - visual = "sprite", - visual_size = {x=0.3, y=0.3}, - textures = {"rangedweapons_invisible.png"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_g36shot.on_step = function(self, dtime, node, pos) - self.timer = self.timer + dtime - local tiem = 0.002 - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.085 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:g36shot" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 10 then - local damage = math.random(12,25) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=6}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(6,13) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 3}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - if math.random(1, 100) <= 10 then - local damage = math.random(12,25) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(6,13) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - if timer >= 0.002 + tiem then - minetest.add_particle({ - pos = pos, - velocity = 0, - acceleration = {x=0, y=0, z=0}, - expirationtime = 0.06, - size = 3, - collisiondetection = false, - vertical = false, - texture = "rangedweapons_bullet_fly.png", - glow = 15, - }) - tiem = tiem + 0.002 - end - if self.timer >= 4.0 then - self.object:remove() - end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") then - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - if node.name == "rangedweapons:barrel" or - node.name == "doors:door_glass_a" or - node.name == "doors:door_glass_b" or - node.name == "xpanes:pane" or - node.name == "xpanes:pane_flat" or - node.name == "vessels:drinking_glass" or - node.name == "vessels:glass_bottle" or - node.name == "default:glass" then - minetest.get_node_timer(pos):start(0) - end - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end -end -end +minetest.register_tool("rangedweapons:g36_rrr", { + stack_max= 1, + wield_scale = {x=1.75,y=1.75,z=1.3}, + description = "", + rw_next_reload = "rangedweapons:g36", + load_sound = "rangedweapons_rifle_reload_b", + range = 0, + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_g36.png", +}) + minetest.register_tool("rangedweapons:g36", { + stack_max= 1, + wield_scale = {x=1.75,y=1.75,z=1.3}, + description = "" ..core.colorize("#35cdff","g36\n") ..core.colorize("#FFFFFF", "Gun damage: 7\n") ..core.colorize("#FFFFFF", "accuracy: 80%\n") ..core.colorize("#FFFFFF", "Gun knockback: 5\n") ..core.colorize("#FFFFFF", "Gun Critical chance: 12%\n")..core.colorize("#FFFFFF", "Critical efficiency: 2.9x\n") ..core.colorize("#FFFFFF", "Reload delay: 1.2\n") ..core.colorize("#FFFFFF", "Clip size: 30\n") ..core.colorize("#FFFFFF", "Ammunition: 5.56mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.08(full-auto)\n") ..core.colorize("#FFFFFF", "Gun type: assault rifle\n") ..core.colorize("#FFFFFF", "Block penetration: 6%\n") +..core.colorize("#FFFFFF", "Enemy penetration: 17%\n") ..core.colorize("#FFFFFF", "Bullet velocity: 40"), + range = 0, + inventory_image = "rangedweapons_g36.png", + RW_gun_capabilities = { + automatic_gun = 1, + gun_damage = {fleshy=7,knockback=5}, + gun_crit = 12, + gun_critEffc = 2.9, + suitable_ammo = {{"rangedweapons:556mm",30}}, + gun_skill = {"arifle_skill",55}, + gun_magazine = "rangedweapons:assaultrifle_mag", + gun_icon = "rangedweapons_g36_icon.png", + gun_unloaded = "rangedweapons:g36_r", + gun_velocity = 40, + gun_accuracy = 80, + gun_cooldown = 0.08, + gun_reload = 1.2/4, + gun_projectiles = 1, + has_shell = 1, + gun_gravity = 0, + gun_durability = 1500, + gun_smokeSize = 5, + gun_mob_penetration = 17, + gun_node_penetration = 6, + gun_unload_sound = "rangedweapons_handgun_mag_out", + gun_sound = "rangedweapons_smg", + }, + on_secondary_use = function(itemstack, user, pointed_thing) +rangedweapons_reload_gun(itemstack, user) +return itemstack +end, -minetest.register_entity("rangedweapons:g36shot", rangedweapons_g36shot ) \ No newline at end of file + inventory_image = "rangedweapons_g36.png", +}) \ No newline at end of file diff --git a/generator.lua b/generator.lua index a079198..060e027 100644 --- a/generator.lua +++ b/generator.lua @@ -1,14 +1,7 @@ -minetest.register_craft({ - output = 'rangedweapons:generator', - recipe = { -{'default:gold_ingot', 'default:gold_ingot', 'default:gold_ingot'}, - {'rangedweapons:gunsteel_ingot', 'rangedweapons:gun_power_core', 'rangedweapons:gunsteel_ingot'}, - {'rangedweapons:gunsteel_ingot', 'rangedweapons:gunsteel_ingot', 'rangedweapons:gunsteel_ingot'}, - } -}) + minetest.register_node("rangedweapons:generator", { - description = "" ..core.colorize("#35cdff","Power particle generator\n")..core.colorize("#FFFFFF", "generates 6 power particles on top of itself, every 15 seconds"), + description = "" ..core.colorize("#35cdff","Power particle generator\n")..core.colorize("#FFFFFF", "generates 1 power particle every 3 seconds (can hold up to 200). Punch to harvest them"), tiles = { "rangedweapons_generator_top.png", "rangedweapons_generator_bottom.png", @@ -18,14 +11,25 @@ minetest.register_node("rangedweapons:generator", { "rangedweapons_generator_side.png" }, paramtype = "light", + light_source = 9, groups = {cracky = 3, oddly_breakable_by_hand = 3}, on_timer = function(pos, elapsed) - minetest.get_node_timer(pos):start(15) - pos.y = pos.y+1 - minetest.add_item(pos, "rangedweapons:power_particle 6") + minetest.get_node_timer(pos):start(3) + local nodemeta = minetest.get_meta(pos) +if nodemeta:get_int("power_generated") < 200 then + nodemeta:set_int("power_generated",nodemeta:get_int("power_generated")+1) + nodemeta:set_string("infotext", "currently generated power:"..nodemeta:get_int("power_generated")) +end + end, + on_punch = function(pos, node, puncher) +local nodemeta = minetest.get_meta(pos) +local inv = puncher:get_inventory() +inv:add_item("main", "rangedweapons:power_particle "..nodemeta:get_int("power_generated")) +nodemeta:set_int("power_generated",0) +nodemeta:set_string("infotext", "currently generated power:"..nodemeta:get_int("power_generated")) end, on_construct = function(pos) - minetest.get_node_timer(pos):start(15) + minetest.get_node_timer(pos):start(3) end, sounds = default.node_sound_wood_defaults(), }) diff --git a/glass_breaking.lua b/glass_breaking.lua index 8f4e00b..2110b4d 100644 --- a/glass_breaking.lua +++ b/glass_breaking.lua @@ -9,14 +9,6 @@ minetest.register_craft({ } }) -minetest.override_item("default:glass", { - on_timer = function(pos) - minetest.swap_node(pos, {name = "rangedweapons:broken_glass"}) - minetest.sound_play("glass_break",{pos}) - end, -}) - - minetest.register_node("rangedweapons:broken_glass", { description = "Broken glass", drawtype = "glasslike", @@ -37,76 +29,3 @@ minetest.register_node("rangedweapons:broken_glass", { groups = {oddly_breakable_by_hand = 3}, }) -if minetest.get_modpath("doors") then - -minetest.override_item("doors:door_glass_a", { - on_timer = function(pos) - minetest.swap_node(pos, {name = "air"}) - minetest.add_item(pos, "vessels:glass_fragments 5") - minetest.sound_play("glass_break",{pos}) - end, -}) - -minetest.override_item("doors:door_glass_b", { - on_timer = function(pos) - minetest.swap_node(pos, {name = "air"}) - minetest.add_item(pos, "vessels:glass_fragments 5") - minetest.sound_play("glass_break",{pos}) - end, -}) - -end - -if minetest.get_modpath("xpanes") then - -minetest.override_item("xpanes:pane", { - on_timer = function(pos) - minetest.swap_node(pos, {name = "air"}) - minetest.add_item(pos, "rangedweapons:glass_shards") - minetest.sound_play("glass_break",{pos}) - end, -}) - -minetest.override_item("xpanes:pane_flat", { - on_timer = function(pos) - minetest.swap_node(pos, {name = "air"}) - minetest.add_item(pos, "rangedweapons:glass_shards") - minetest.sound_play("glass_break",{pos}) - end, -}) - -end - -if minetest.get_modpath("vessels") then - -minetest.override_item("vessels:glass_bottle", { - on_timer = function(pos) - minetest.swap_node(pos, {name = "air"}) - minetest.add_item(pos, "rangedweapons:glass_shards") - minetest.sound_play("glass_break",{pos}) - end, - walkable = true, - node_box = { - type = "fixed", - fixed = { - {-0.2, -0.5, -0.2, 0.2, -0.1, 0.2}, - }, - }, -}) - -minetest.override_item("vessels:drinking_glass", { - on_timer = function(pos) - minetest.swap_node(pos, {name = "air"}) - minetest.add_item(pos, "rangedweapons:glass_shards") - minetest.sound_play("glass_break",{pos}) - end, - walkable = true, - node_box = { - type = "fixed", - fixed = { - {-0.2, -0.5, -0.2, 0.2, -0.1, 0.2}, - }, - }, -}) - -end diff --git a/glock17.lua b/glock17.lua index d8f45a8..02140a3 100644 --- a/glock17.lua +++ b/glock17.lua @@ -1,190 +1,84 @@ - local timer = 0 -minetest.register_globalstep(function(dtime, player) - timer = timer + dtime; - if timer >= 0.35 then - for _, player in pairs(minetest.get_connected_players()) do - if player:get_wielded_item():get_name() == "rangedweapons:glock17_rld" then - player:set_wielded_item("rangedweapons:glock17") - minetest.sound_play("", {player}) - end - end - end - end) - - -minetest.register_craftitem("rangedweapons:glock17_rld", { +minetest.register_tool("rangedweapons:glock17_rld", { stack_max= 1, wield_scale = {x=1.1,y=1.1,z=1.05}, - description = "***RELOADING GLOCK 17 ***", + description = "", + loaded_gun = "rangedweapons:glock17", range = 0, groups = {not_in_creative_inventory = 1}, inventory_image = "rangedweapons_glock17_rld.png", }) +minetest.register_tool("rangedweapons:glock17_r", { + stack_max= 1, + wield_scale = {x=1.2,y=1.2,z=1.2}, + description = "", + rw_next_reload = "rangedweapons:glock17_rr", + load_sound = "rangedweapons_handgun_mag_in", + range = 0, + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_glock17.png", +}) + +minetest.register_tool("rangedweapons:glock17_rr", { + stack_max= 1, + wield_scale = {x=1.2,y=1.2,z=1.2}, + description = "", + rw_next_reload = "rangedweapons:glock17_rrr", + load_sound = "rangedweapons_reload_a", + range = 0, + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_glock17.png", +}) + +minetest.register_tool("rangedweapons:glock17_rrr", { + stack_max= 1, + wield_scale = {x=1.2,y=1.2,z=1.2}, + description = "", + rw_next_reload = "rangedweapons:glock17", + load_sound = "rangedweapons_reload_b", + range = 0, + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_glock17_rld.png", +}) + + + + minetest.register_tool("rangedweapons:glock17", { - description = "" ..core.colorize("#35cdff","Glock 17\n") ..core.colorize("#FFFFFF", "Ranged damage: 7-11\n") ..core.colorize("#FFFFFF", "Accuracy: 96%\n") ..core.colorize("#FFFFFF", "Mob knockback: 4\n") ..core.colorize("#FFFFFF", "Critical chance: 19%\n") ..core.colorize("#FFFFFF", "Critical damage: 12-22\n") ..core.colorize("#FFFFFF", "Ammunition: 9mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.35\n") ..core.colorize("#FFFFFF", "Gun type: Handgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 30"), + description = "" ..core.colorize("#35cdff","Glock 17\n") ..core.colorize("#FFFFFF", "Gun damage: 5\n") ..core.colorize("#FFFFFF", "Accuracy: 96%\n") ..core.colorize("#FFFFFF", "Gun knockback: 4\n") ..core.colorize("#FFFFFF", "Gun Critical chance: 15%\n") ..core.colorize("#FFFFFF", "Gun Critical efficiency: 2.2x\n") ..core.colorize("#FFFFFF", "Reload delay: 0.9\n")..core.colorize("#FFFFFF", "Clip size: 17/17/17\n") ..core.colorize("#FFFFFF", "Ammunition: 9x19mm Parabellum/10mm Auto/.45acp\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.35\n") ..core.colorize("#FFFFFF", "Gun type: Handgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 30"), wield_scale = {x=1.2,y=1.2,z=1.2}, range = 0, inventory_image = "rangedweapons_glock17.png", +RW_gun_capabilities = { + gun_damage = {fleshy=5,knockback=4}, + gun_crit = 15, + gun_critEffc = 2.2, + suitable_ammo = {{"rangedweapons:9mm",17},{"rangedweapons:10mm",17},{"rangedweapons:45acp",17}}, + gun_skill = {"handgun_skill",45}, + gun_magazine = "rangedweapons:handgun_mag_black", + gun_icon = "rangedweapons_glock17_icon.png", + gun_unloaded = "rangedweapons:glock17_r", + gun_cooling = "rangedweapons:glock17_rld", + gun_velocity = 30, + gun_accuracy = 96, + gun_cooldown = 0.35, + gun_reload = 0.9/4, + gun_projectiles = 1, + has_shell = 1, + gun_durability = 1400, + gun_smokeSize = 5, + gun_unload_sound = "rangedweapons_handgun_mag_out", + gun_sound = "rangedweapons_glock", + }, + on_secondary_use = function(itemstack, user, pointed_thing) +rangedweapons_reload_gun(itemstack, user) +return itemstack +end, on_use = function(itemstack, user, pointed_thing) - timer = 0 - local inv = user:get_inventory() - if not inv:contains_item("main", "rangedweapons:9mm 1") then - minetest.sound_play("rangedweapons_empty", {object=user}) - return itemstack - end - if not minetest.setting_getbool("creative_mode") then - inv:remove_item("main", "rangedweapons:9mm") - end - local pos = user:getpos() - local dir = user:get_look_dir() - local yaw = user:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:glock17shot") - if obj then - minetest.sound_play("rangedweapons_glock", {object=obj}) - obj:setvelocity({x=dir.x * 30, y=dir.y * 30, z=dir.z * 30}) - obj:setacceleration({x=dir.x * math.random(-0.4,0.4), y=math.random(-0.4,0.4), z=dir.z * math.random(-0.4,0.4)}) - obj:setyaw(yaw + math.pi) - pos.y = pos.y + 0 - local obj = minetest.add_entity(pos, "rangedweapons:empty_shell") - minetest.sound_play("", {object=obj}) - obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) - obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) - obj:setyaw(yaw + math.pi) - local obj = minetest.add_entity(pos, "rangedweapons:smoke") - minetest.add_particle({ - pos = pos, - velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} , - acceleration = {x=dir.x * -4, y=2, z=dir.z * -4}, - expirationtime = 0.7, - size = 5, - collisiondetection = false, - vertical = false, - texture = "tnt_smoke.png", - glow = 5, - }) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or user - itemstack = "rangedweapons:glock17_rld" - end - end - end - return itemstack +rangedweapons_shoot_gun(itemstack, user) +return itemstack end, }) -minetest.register_craft({ - output = 'rangedweapons:glock17', - recipe = { - {'rangedweapons:plastic_sheet', 'rangedweapons:plastic_sheet', 'rangedweapons:plastic_sheet'}, - {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, - {'', 'default:diamond', 'rangedweapons:plastic_sheet'}, - } -}) - -local rangedweapons_glock17shot = { - physical = false, - timer = 0, - visual = "sprite", - visual_size = {x=0.3, y=0.3}, - textures = {"rangedweapons_invisible.png"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_glock17shot.on_step = function(self, dtime, node, pos) - self.timer = self.timer + dtime - local tiem = 0.002 - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.1 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:glock17shot" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 19 then - local damage = math.random(12,22) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=8}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(7,11) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=4}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - if math.random(1, 100) <= 19 then - local damage = math.random(12,22) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(7,11) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - if timer >= 0.002 + tiem then - minetest.add_particle({ - pos = pos, - velocity = 0, - acceleration = {x=0, y=0, z=0}, - expirationtime = 0.06, - size = 3, - collisiondetection = false, - vertical = false, - texture = "rangedweapons_bullet_fly.png", - glow = 15, - }) - tiem = tiem + 0.002 - end - if self.timer >= 4.0 then - self.object:remove() - end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") then - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - if node.name == "rangedweapons:barrel" or - node.name == "doors:door_glass_a" or - node.name == "doors:door_glass_b" or - node.name == "xpanes:pane" or - node.name == "xpanes:pane_flat" or - node.name == "vessels:drinking_glass" or - node.name == "vessels:glass_bottle" or - node.name == "default:glass" then - minetest.get_node_timer(pos):start(0) - end - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} - end - end - end - - -minetest.register_entity("rangedweapons:glock17shot", rangedweapons_glock17shot ) - - diff --git a/hand_grenade.lua b/hand_grenade.lua index 3219edb..a24967c 100644 --- a/hand_grenade.lua +++ b/hand_grenade.lua @@ -1,11 +1,4 @@ -minetest.register_craft({ - output = "rangedweapons:hand_grenade", - recipe = { - {"", "", "default:mese_crystal_fragment"}, - {"default:steel_ingot", "tnt:gunpowder", ""}, - {"tnt:gunpowder", "tnt:gunpowder", ""}, - } -}) + minetest.register_craftitem("rangedweapons:pin", { wield_scale = {x=2.5,y=2.5,z=1.0}, @@ -22,7 +15,7 @@ local rangedweapons_grenade_pin = { } rangedweapons_grenade_pin.on_step = function(self, dtime, pos) self.timer = self.timer + dtime - local pos = self.object:getpos() + local pos = self.object:get_pos() local node = minetest.get_node(pos) if self.lastpos.x ~= nil then if minetest.registered_nodes[node.name].walkable then @@ -48,14 +41,38 @@ local grenade_boom = { burning = "rangedweapons_invisible.png" }, } - + local gtimer = 0 minetest.register_craftitem("rangedweapons:hand_grenade", { stack_max= 1, wield_scale = {x=1.1,y=1.1,z=1.05}, description = "" ..core.colorize("#35cdff","Hand grenade\n") ..core.colorize("#FFFFFF", "Explosion radius: 3\n")..core.colorize("#FFFFFF", "Throw force: 12\n") ..core.colorize("#FFFFFF", "Grenade gravitational pull: 6\n") ..core.colorize("#ffc000", "Right-click to unpin, Left click to throw after unpinning\n") ..core.colorize("#ffc000", "Thrown or not, it will explode after 3 secons from unpinning, be careful!"), range = 0, inventory_image = "rangedweapons_hand_grenade.png", + on_secondary_use = function(itemstack, user, pointed_thing) +if minetest.find_node_near(user:get_pos(), 10,"rangedweapons:antigun_block") +then + minetest.chat_send_player(user:get_player_name(), "" ..core.colorize("#ff0000","Grenades are prohibited in this area!")) + return itemstack + end + + gtimer = 0 + minetest.sound_play("rangedweapons_reload_a", {user}) + itemstack = "rangedweapons:hand_grenade_nopin" +local pos = user:get_pos() +pos.y = pos.y + 1.5 +local pinEnt = minetest.add_entity(pos, "rangedweapons:grenade_pin") +if pinEnt then +local dir = user:get_look_dir() +local yaw = user:get_look_yaw() +local svertical = user:get_look_vertical() +pinEnt:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) +pinEnt:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) +pinEnt:set_rotation({x=0,y=yaw + math.pi,z=-svertical}) +end + return itemstack end, }) + + minetest.register_craftitem("rangedweapons:hand_grenade_nopin", { stack_max= 1, wield_scale = {x=1.1,y=1.1,z=1.05}, @@ -63,17 +80,19 @@ minetest.register_craftitem("rangedweapons:hand_grenade_nopin", { range = 0, inventory_image = "rangedweapons_hand_grenade_nopin.png", groups = {not_in_creative_inventory = 1}, + on_use = function(itemstack, user, pointed_thing) - local pos = user:getpos() + local pos = user:get_pos() local dir = user:get_look_dir() local yaw = user:get_look_yaw() if pos and dir and yaw then pos.y = pos.y + 1.6 local obj = minetest.add_entity(pos, "rangedweapons:grenade") if obj then - obj:setvelocity({x=dir.x * 12, y=dir.y * 12, z=dir.z * 12}) - obj:setacceleration({x=dir.x * -1, y=-6, z=dir.z * -1}) - obj:setyaw(yaw + math.pi) + obj:set_velocity({x=dir.x * 12, y=dir.y * 12, z=dir.z * 12}) + obj:set_acceleration({x=0, y=-6, z=0}) + obj:set_yaw(yaw + math.pi) + btimer = gtimer local ent = obj:get_luaentity() if ent then ent.player = ent.player or user @@ -87,69 +106,35 @@ minetest.register_craftitem("rangedweapons:hand_grenade_nopin", { tnt.register_tnt(grenade_boom) - local timer = 0 + minetest.register_globalstep(function(dtime, player, pos) - timer = timer + dtime; - if timer >= 0.001 then + gtimer = gtimer + dtime; + if gtimer >= 3.0 then for _, player in pairs(minetest.get_connected_players()) do - local pos = player:getpos() - local controls = player:get_player_control() - if player:get_wielded_item():get_name() == "rangedweapons:hand_grenade" then - if controls.RMB then - player:set_wielded_item("rangedweapons:hand_grenade_nopin") - timer = 0 - minetest.sound_play("rangedweapons_reload_a", {player}) - local dir = player:get_look_dir() - local yaw = player:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:grenade_pin") - minetest.sound_play("", {object=obj}) -obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) -obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) - obj:setyaw(yaw + math.pi) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or player - end - end - -end - end - - if timer >= 3.0 and - player:get_wielded_item():get_name() == "rangedweapons:hand_grenade_nopin" then + local pos = player:get_pos() + if player:get_wielded_item():get_name() == "rangedweapons:hand_grenade_nopin" then player:set_wielded_item("") - timer = 0 + gtimer = 0 tnt.boom(pos, grenade_boom) - - end - end - end - end) + end end end end) local rangedweapons_grenade = { - physical = false, + physical = true, + btimer = 0, timer = 0, + hp_max = 420, visual = "sprite", visual_size = {x=0.5, y=0.5}, textures = {"rangedweapons_hand_grenade_nopin.png"}, lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, + collisionbox = {-0.1, -0.1, -0.1, 0.1, 0.1, 0.1}, } rangedweapons_grenade.on_step = function(self, dtime, pos) - local pos = self.object:getpos() + local pos = self.object:get_pos() local node = minetest.get_node(pos) - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - local vel = self.object:getvelocity() - local acc = self.object:getacceleration() - self.object:setvelocity({x=vel.x*-0.3, y=vel.y*-1, z=vel.z*-0.3}) - self.object:setacceleration({x=acc.x, y=acc.y, z=acc.z}) - end - end - self.timer = timer - if self.timer > 3.0 then + local btimer = btimer or 0 + self.timer = self.timer + dtime + if self.timer > (3.0 - btimer) then tnt.boom(pos, grenade_boom) self.object:remove() end diff --git a/init.lua b/init.lua index f0c67b6..d8064ce 100644 --- a/init.lua +++ b/init.lua @@ -1,73 +1,853 @@ + + local modpath = minetest.get_modpath(minetest.get_current_modname()) -dofile(modpath.."/settings.lua") -dofile(modpath.."/misc.lua") -dofile(modpath.."/ammo.lua") -dofile(modpath.."/bullet_stuff.lua") +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 -if shurikens == true then +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_yaw() + 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_yaw() + 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: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_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_yaw() + 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 +--------------------------------------------------- + + + +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") + +if rweapons_shurikens == "true" then dofile(modpath.."/shurikens.lua") end -if handguns == true then +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 javelins == true then +if rweapons_forceguns == "true" then + dofile(modpath.."/forcegun.lua") +end + +if rweapons_javelins == "true" then dofile(modpath.."/javelin.lua") end -if power_weapons == true then +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 machine_pistols == true then +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 shotguns == true then +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 sub_machineguns == true then +if rweapons_smgs == "true" then dofile(modpath.."/mp5.lua") dofile(modpath.."/ump.lua") dofile(modpath.."/mp40.lua") + dofile(modpath.."/thompson.lua") end -if rifles == true then +if rweapons_rifles == "true" then dofile(modpath.."/awp.lua") dofile(modpath.."/svd.lua") dofile(modpath.."/m200.lua") end -if heavy_machineguns == true then +if rweapons_heavy_machineguns == "true" then dofile(modpath.."/m60.lua") dofile(modpath.."/rpk.lua") dofile(modpath.."/minigun.lua") end -if magnums_and_revolvers == true then - dofile(modpath.."/deagle.lua") +if rweapons_revolvers == "true" then dofile(modpath.."/python.lua") dofile(modpath.."/taurus.lua") end -if assault_rifles == true then +if rweapons_assault_rifles == "true" then dofile(modpath.."/m16.lua") dofile(modpath.."/g36.lua") dofile(modpath.."/ak47.lua") dofile(modpath.."/scar.lua") end -if explosives == true then +if rweapons_explosives == "true" then dofile(modpath.."/explosives.lua") dofile(modpath.."/m79.lua") dofile(modpath.."/milkor.lua") @@ -75,21 +855,18 @@ if explosives == true then dofile(modpath.."/hand_grenade.lua") end -if door_breaking == true then - dofile(modpath.."/door_breaking.lua") -end -if glass_breaking == true then +if rweapons_glass_breaking == "true" then dofile(modpath.."/glass_breaking.lua") end -if glass_breaking == false then +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 = "air" + node.name = "default:glass" minetest.set_node(pos, node) end end @@ -107,16 +884,17 @@ local rangedweapons_empty_shell = { } rangedweapons_empty_shell.on_step = function(self, dtime, pos) self.timer = self.timer + dtime - local pos = self.object:getpos() + 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:getvelocity() - local acc = self.object:getacceleration() - self.object:setvelocity({x=vel.x*-0.3, y=vel.y*-0.75, z=vel.z*-0.3}) + 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:setacceleration({x=acc.x, y=acc.y, z=acc.z}) - end + 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}) @@ -129,108 +907,6 @@ end minetest.register_entity("rangedweapons:empty_shell", rangedweapons_empty_shell ) - -local rangedweapons_empty_shell_shotgun = { - physical = false, - timer = 0, - visual = "wielditem", - visual_size = {x=0.35, y=0.35}, - textures = {"rangedweapons:shell_shotgundrop"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_empty_shell_shotgun.on_step = function(self, dtime, pos) - self.timer = self.timer + dtime - local pos = self.object:getpos() - local node = minetest.get_node(pos) - if self.lastpos.y ~= nil then - if minetest.registered_nodes[node.name].walkable then - local vel = self.object:getvelocity() - local acc = self.object:getacceleration() - self.object:setvelocity({x=vel.x*-0.3, y=vel.y*-0.75, z=vel.z*-0.3}) - minetest.sound_play("rangedweapons_shellhit", {pos = self.lastpos, gain = 0.8}) - self.object:setacceleration({x=acc.x, y=acc.y, z=acc.z}) - 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_shotgun", rangedweapons_empty_shell_shotgun ) - - - -local rangedweapons_empty_shell_white = { - physical = false, - timer = 0, - visual = "wielditem", - visual_size = {x=0.30, y=0.30}, - textures = {"rangedweapons:shell_whitedrop"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_empty_shell_white.on_step = function(self, dtime, pos) - self.timer = self.timer + dtime - local pos = self.object:getpos() - local node = minetest.get_node(pos) - if self.lastpos.y ~= nil then - if minetest.registered_nodes[node.name].walkable then - local vel = self.object:getvelocity() - local acc = self.object:getacceleration() - self.object:setvelocity({x=vel.x*-0.3, y=vel.y*-0.75, z=vel.z*-0.3}) - minetest.sound_play("rangedweapons_shellhit", {pos = self.lastpos, gain = 0.8}) - self.object:setacceleration({x=acc.x, y=acc.y, z=acc.z}) - 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_white", rangedweapons_empty_shell_white ) - - - -local rangedweapons_empty_shell_grenade = { - physical = false, - timer = 0, - visual = "wielditem", - visual_size = {x=0.30, y=0.30}, - textures = {"rangedweapons:shell_grenadedrop"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_empty_shell_grenade.on_step = function(self, dtime, pos) - self.timer = self.timer + dtime - local pos = self.object:getpos() - local node = minetest.get_node(pos) - if self.lastpos.y ~= nil then - if minetest.registered_nodes[node.name].walkable then - local vel = self.object:getvelocity() - local acc = self.object:getacceleration() - self.object:setvelocity({x=vel.x*-0.3, y=vel.y*-0.75, z=vel.z*-0.3}) - minetest.sound_play("rangedweapons_shellhit", {pos = self.lastpos, gain = 0.8}) - self.object:setacceleration({x=acc.x, y=acc.y, z=acc.z}) - 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_grenade", rangedweapons_empty_shell_grenade ) - - minetest.register_abm({ nodenames = {"doors:hidden"}, interval = 1, @@ -245,4 +921,62 @@ minetest.register_abm({ 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) diff --git a/jackhammer.lua b/jackhammer.lua index 0814847..bcd1ced 100644 --- a/jackhammer.lua +++ b/jackhammer.lua @@ -1,218 +1,69 @@ -minetest.register_craft({ - output = 'rangedweapons:jackhammer', - recipe = { - {'', 'rangedweapons:gunsteel_ingot', 'rangedweapons:gunsteel_ingot'}, - {'default:mese', 'default:steelblock', 'default:diamondblock'}, - {'', 'default:mese', 'default:diamondblock'}, - } -}) - minetest.register_craftitem("rangedweapons:jackhammer", { + +minetest.register_tool("rangedweapons:jackhammer_r", { stack_max= 1, wield_scale = {x=2.6,y=2.6,z=1.8}, - description = "" ..core.colorize("#35cdff","Jackhammer\n") ..core.colorize("#FFFFFF", "Ranged damage: 5-12 X 15\n") ..core.colorize("#FFFFFF", "Accuracy: 70%\n") ..core.colorize("#FFFFFF", "Mob knockback: 3\n")..core.colorize("#FFFFFF", "Critical chance: 5%\n") ..core.colorize("#FFFFFF", "Critical damage: 13-25 X 15\n") ..core.colorize("#FFFFFF", "Ammunition: 12 gauge shells\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.35\n") ..core.colorize("#FFFFFF", "Gun type: Auto-shotgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 25"), + description = "", + rw_next_reload = "rangedweapons:jackhammer_rr", + load_sound = "rangedweapons_rifle_clip_in", range = 0, + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_jackhammer_rld.png", +}) +minetest.register_tool("rangedweapons:jackhammer_rr", { + stack_max= 1, + wield_scale = {x=2.6,y=2.6,z=1.8}, + description = "", + rw_next_reload = "rangedweapons:jackhammer_rrr", + load_sound = "rangedweapons_reload_a", + range = 0, + groups = {not_in_creative_inventory = 1}, inventory_image = "rangedweapons_jackhammer.png", }) +minetest.register_tool("rangedweapons:jackhammer_rrr", { + stack_max= 1, + wield_scale = {x=2.6,y=2.6,z=1.8}, + description = "", + rw_next_reload = "rangedweapons:jackhammer", + load_sound = "rangedweapons_reload_b", + range = 0, + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_jackhammer.png", +}) +------------------------------------------- -local timer = 0 -minetest.register_globalstep(function(dtime, player) - timer = timer + dtime; - if timer >= 0.35 then - for _, player in pairs(minetest.get_connected_players()) do - local inv = player:get_inventory() - local controls = player:get_player_control() - if controls.LMB then - timer = 0 - local wielded_item = player:get_wielded_item():get_name() - if wielded_item == "rangedweapons:jackhammer" then - if not inv:contains_item("main", "rangedweapons:shell") then -minetest.sound_play("rangedweapons_empty", {object=player}) - else - if wielded_item == "rangedweapons:jackhammer" then - inv:remove_item("main", "rangedweapons:shell") - local pos = player:getpos() - local dir = player:get_look_dir() - local yaw = player:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:jackhammershot") - if obj then - minetest.sound_play("rangedweapons_shotgun_shot", {object=obj}) - obj:setvelocity({x=dir.x * math.random(23,27), y=dir.y * math.random(23,27), z=dir.z * math.random(23,27)}) - obj:setacceleration({x=dir.x * math.random(-3.0,3.0), y=math.random(-3.0,3.0), z=dir.z * math.random(-3.0,3.0)}) ------------------------------------------------------------- - local obj = minetest.add_entity(pos, "rangedweapons:jackhammershot") - obj:setvelocity({x=dir.x * math.random(23,27), y=dir.y * math.random(23,27), z=dir.z * math.random(23,27)}) - obj:setacceleration({x=dir.x * math.random(-3.0,3.0), y=math.random(-3.0,3.0), z=dir.z * math.random(-3.0,3.0)}) ------------------------------------------------------------- - local obj = minetest.add_entity(pos, "rangedweapons:jackhammershot") - obj:setvelocity({x=dir.x * math.random(23,27), y=dir.y * math.random(23,27), z=dir.z * math.random(23,27)}) - obj:setacceleration({x=dir.x * math.random(-3.0,3.0), y=math.random(-3.0,3.0), z=dir.z * math.random(-3.0,3.0)}) ------------------------------------------------------------- - local obj = minetest.add_entity(pos, "rangedweapons:jackhammershot") - obj:setvelocity({x=dir.x * math.random(23,27), y=dir.y * math.random(23,27), z=dir.z * math.random(23,27)}) - obj:setacceleration({x=dir.x * math.random(-3.0,3.0), y=math.random(-3.0,3.0), z=dir.z * math.random(-3.0,3.0)}) ------------------------------------------------------------- - local obj = minetest.add_entity(pos, "rangedweapons:jackhammershot") - obj:setvelocity({x=dir.x * math.random(23,27), y=dir.y * math.random(23,27), z=dir.z * math.random(23,27)}) - obj:setacceleration({x=dir.x * math.random(-3.0,3.0), y=math.random(-3.0,3.0), z=dir.z * math.random(-3.0,3.0)}) ------------------------------------------------------------- - local obj = minetest.add_entity(pos, "rangedweapons:jackhammershot") - obj:setvelocity({x=dir.x * math.random(23,27), y=dir.y * math.random(23,27), z=dir.z * math.random(23,27)}) - obj:setacceleration({x=dir.x * math.random(-3.0,3.0), y=math.random(-3.0,3.0), z=dir.z * math.random(-3.0,3.0)}) ------------------------------------------------------------- - local obj = minetest.add_entity(pos, "rangedweapons:jackhammershot") - obj:setvelocity({x=dir.x * math.random(23,27), y=dir.y * math.random(23,27), z=dir.z * math.random(23,27)}) - obj:setacceleration({x=dir.x * math.random(-3.0,3.0), y=math.random(-3.0,3.0), z=dir.z * math.random(-3.0,3.0)}) ------------------------------------------------------------- - local obj = minetest.add_entity(pos, "rangedweapons:jackhammershot") - obj:setvelocity({x=dir.x * math.random(23,27), y=dir.y * math.random(23,27), z=dir.z * math.random(23,27)}) - obj:setacceleration({x=dir.x * math.random(-3.0,3.0), y=math.random(-3.0,3.0), z=dir.z * math.random(-3.0,3.0)}) ------------------------------------------------------------- - local obj = minetest.add_entity(pos, "rangedweapons:jackhammershot") - obj:setvelocity({x=dir.x * math.random(23,27), y=dir.y * math.random(23,27), z=dir.z * math.random(23,27)}) - obj:setacceleration({x=dir.x * math.random(-3.0,3.0), y=math.random(-3.0,3.0), z=dir.z * math.random(-3.0,3.0)}) ------------------------------------------------------------- - local obj = minetest.add_entity(pos, "rangedweapons:jackhammershot") - obj:setvelocity({x=dir.x * math.random(23,27), y=dir.y * math.random(23,27), z=dir.z * math.random(23,27)}) - obj:setacceleration({x=dir.x * math.random(-3.0,3.0), y=math.random(-3.0,3.0), z=dir.z * math.random(-3.0,3.0)}) ------------------------------------------------------------- - local obj = minetest.add_entity(pos, "rangedweapons:jackhammershot") - obj:setvelocity({x=dir.x * math.random(23,27), y=dir.y * math.random(23,27), z=dir.z * math.random(23,27)}) - obj:setacceleration({x=dir.x * math.random(-3.0,3.0), y=math.random(-3.0,3.0), z=dir.z * math.random(-3.0,3.0)}) ------------------------------------------------------------- - local obj = minetest.add_entity(pos, "rangedweapons:jackhammershot") - obj:setvelocity({x=dir.x * math.random(23,27), y=dir.y * math.random(23,27), z=dir.z * math.random(23,27)}) - obj:setacceleration({x=dir.x * math.random(-3.0,3.0), y=math.random(-3.0,3.0), z=dir.z * math.random(-3.0,3.0)}) ------------------------------------------------------------- - local obj = minetest.add_entity(pos, "rangedweapons:jackhammershot") - obj:setvelocity({x=dir.x * math.random(23,27), y=dir.y * math.random(23,27), z=dir.z * math.random(23,27)}) - obj:setacceleration({x=dir.x * math.random(-3.0,3.0), y=math.random(-3.0,3.0), z=dir.z * math.random(-3.0,3.0)}) ------------------------------------------------------------- - local obj = minetest.add_entity(pos, "rangedweapons:jackhammershot") - obj:setvelocity({x=dir.x * math.random(23,27), y=dir.y * math.random(23,27), z=dir.z * math.random(23,27)}) - obj:setacceleration({x=dir.x * math.random(-3.0,3.0), y=math.random(-3.0,3.0), z=dir.z * math.random(-3.0,3.0)}) ------------------------------------------------------------- - local obj = minetest.add_entity(pos, "rangedweapons:jackhammershot") - obj:setvelocity({x=dir.x * math.random(23,27), y=dir.y * math.random(23,27), z=dir.z * math.random(23,27)}) - obj:setacceleration({x=dir.x * math.random(-3.0,3.0), y=math.random(-3.0,3.0), z=dir.z * math.random(-3.0,3.0)}) - pos.y = pos.y + 0 - local obj = minetest.add_entity(pos, "rangedweapons:empty_shell_shotgun") - minetest.sound_play("", {object=obj}) - obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) - obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) - obj:setyaw(yaw + math.pi) - minetest.add_particle({ - pos = pos, - velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} , - acceleration = {x=dir.x * -4, y=2, z=dir.z * -4}, - expirationtime = 0.5, - size = 6, - collisiondetection = false, - vertical = false, - texture = "tnt_smoke.png", - glow = 5, - }) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or player - end - end - end - end -end - -end - end - end - end - end) - -local rangedweapons_jackhammershot = { - physical = false, - timer = 0, - visual = "sprite", - visual_size = {x=0.1, y=0.1}, - textures = {"rangedweapons_buckball.png"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_jackhammershot.on_step = function(self, dtime, node, pos) - self.timer = self.timer + dtime - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.17 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:jackhammershot" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 5 then - local damage = math.random(13,25) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=6}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(5,12) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 3}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - if math.random(1, 100) <= 5 then - local damage = math.random(13,25) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(5,12) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - if self.timer >= 4.0 then - self.object:remove() - end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") then - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - if node.name == "rangedweapons:barrel" or - node.name == "doors:door_wood_a" or - node.name == "doors:door_wood_b" or - node.name == "doors:door_glass_a" or - node.name == "doors:door_glass_b" or - node.name == "xpanes:pane" or - node.name == "xpanes:pane_flat" or - node.name == "vessels:drinking_glass" or - node.name == "vessels:glass_bottle" or - node.name == "default:glass" then - minetest.get_node_timer(pos):start(0) - end - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end -end -end - - - -minetest.register_entity("rangedweapons:jackhammershot", rangedweapons_jackhammershot ) \ No newline at end of file + minetest.register_tool("rangedweapons:jackhammer", { + stack_max= 1, + wield_scale = {x=2.6,y=2.6,z=1.8}, + description = "" ..core.colorize("#35cdff","Jackhammer\n") ..core.colorize("#FFFFFF", "Ranged damage: 3\n") ..core.colorize("#FFFFFF", "projectiles: 8\n") ..core.colorize("#FFFFFF", "Gun gravity: 3\n") ..core.colorize("#FFFFFF", "accuracy: 35%\n") ..core.colorize("#FFFFFF", "knockback: 6\n") ..core.colorize("#FFFFFF", "Reload delay: 1.6\n") ..core.colorize("#FFFFFF", "Clip size: 10\n") ..core.colorize("#FFFFFF", "Critical chance: 7%\n") ..core.colorize("#FFFFFF", "Critical efficiency: 2.2x\n") ..core.colorize("#FFFFFF", "Ammunition: 12 gauge shell\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.25 (full-auto)\n") ..core.colorize("#FFFFFF", "Gun type: shotgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 30"), + range = 0, + inventory_image = "rangedweapons_jackhammer.png", + RW_gun_capabilities = { + automatic_gun = 1, + gun_damage = {fleshy=3,knockback=6}, + gun_crit = 7, + gun_critEffc = 2.2, + suitable_ammo = {{"rangedweapons:shell",10}}, + gun_skill = {"shotgun_skill",35}, + gun_magazine = "rangedweapons:drum_mag", + gun_icon = "rangedweapons_jackhammer_icon.png", + gun_unloaded = "rangedweapons:jackhammer_r", + gun_velocity = 30, + gun_accuracy = 35, + gun_cooldown = 0.25, + gun_reload = 1.6/4, + gun_projectiles = 1, + has_shell = 1, + gun_durability = 825, + gun_smokeSize = 9, + gun_door_breaking = 1, + gun_projectiles = 8, + gun_gravity = 3, + gun_unload_sound = "rangedweapons_rifle_clip_out", + gun_sound = "rangedweapons_shotgun_shot", + }, + on_secondary_use = function(itemstack, user, pointed_thing) +rangedweapons_reload_gun(itemstack, user) +return itemstack +end, +}) diff --git a/javelin - Copy.lua b/javelin - Copy.lua new file mode 100644 index 0000000..4168f19 --- /dev/null +++ b/javelin - Copy.lua @@ -0,0 +1,139 @@ + + + +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/javelin.lua b/javelin.lua index dbba345..349bb56 100644 --- a/javelin.lua +++ b/javelin.lua @@ -6,142 +6,53 @@ minetest.register_craftitem("rangedweapons:thrown_javelin", { 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") , +minetest.register_tool("rangedweapons:javelin", { + description = "" ..core.colorize("#35cdff","Javelin\n") ..core.colorize("#FFFFFF", "Melee damage: 8\n") ..core.colorize("#FFFFFF", "Melee range: 4.5\n")..core.colorize("#FFFFFF", "Full punch interval: 1.25\n") ..core.colorize("#FFFFFF", "Ranged damage: 9\n") ..core.colorize("#FFFFFF", "Accuracy: 92%\n") ..core.colorize("#FFFFFF", "knockback: 10\n") ..core.colorize("#FFFFFF", "Critical chance: 11%\n") ..core.colorize("#FFFFFF", "Critical efficiency: 2.5x\n") ..core.colorize("#FFFFFF", "Projectile gravity: 6\n") ..core.colorize("#FFFFFF", "Projectile velocity: 35\n") ..core.colorize("#FFFFFF", "Enemy penetration: 50%\n") ..core.colorize("#ffc000", "Right-click to throw, Left-click to stab\n")..core.colorize("#ffc000", "Throwing wears the javelin out 5x faster than stabbing.") , wield_scale = {x=2.0,y=2.0,z=1.0}, - range = 5, - stack_max= 10, + range = 4.5, 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}, + stabby = {times={[1]=0.25, [2]=0.50, [3]=0.75}, uses=66.6, maxlevel=2}, }, - damage_groups = {fleshy=9,knockback=10}, - } -}) - -local rangedweapons_javelin = { - physical = false, - timer = 0, - visual = "wielditem", - visual_size = {x=0.5, y=0.5,}, - textures = {"rangedweapons:thrown_javelin"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_javelin.on_step = function(self, dtime) - self.timer = self.timer + dtime - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.15 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:javelin" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 15 then - local damage = math.random(25,45) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=20}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - if not minetest.setting_getbool("creative_mode") and math.random(1, 100) <= 95 then - minetest.add_item(self.lastpos, "rangedweapons:javelin") - end - else - local damage = math.random(4,16) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=10}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - if not minetest.setting_getbool("creative_mode") and math.random(1, 100) <= 95 then - minetest.add_item(self.lastpos, "rangedweapons:javelin") - end - end - end - else - - if math.random(1, 100) <= 15 then - local damage = math.random(25,45) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - if not minetest.setting_getbool("creative_mode") and math.random(1, 100) <= 95 then - minetest.add_item(self.lastpos, "rangedweapons:javelin") - end - else - local damage = math.random(4,16) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - if not minetest.setting_getbool("creative_mode") and math.random(1, 100) <= 95 then - minetest.add_item(self.lastpos, "rangedweapons:javelin") - end - end - end -end -end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") and math.random(1, 100) <= 95 then - minetest.add_item(self.lastpos, "rangedweapons:javelin") - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end - -minetest.register_entity("rangedweapons:javelin", rangedweapons_javelin) - -minetest.register_craft({ - output = 'rangedweapons:javelin 1', - recipe = { - {'default:diamond', 'default:steel_ingot', ''}, - {'default:steel_ingot', '', 'group:stick'}, - {'', '', 'group:stick'}, - } + damage_groups = {fleshy=8,knockback=10}, + }, +RW_throw_capabilities = { + throw_damage = {fleshy=9,knockback=10}, + throw_crit = 11, + throw_critEffc = 2.5, + throw_skill = {"throw_skill",20}, + throw_velocity = 40, + throw_accuracy = 92, + throw_cooldown = 0.0, + throw_projectiles = 1, + throw_gravity = 6, + throw_sound = "rangedweapons_throw", + throw_dps = 0, + throw_mob_penetration = 50, + throw_node_penetration = 0, + throw_entity = "rangedweapons:shot_bullet", + throw_visual = "wielditem", + throw_texture = "rangedweapons:thrown_javelin", + throw_projectile_size = 0.15, + throw_glass_breaking = 1, + has_sparks = 1, + ignites_explosives = 0, + throw_door_breaking = 0, +OnCollision = function(player,bullet,target) +local throwDur = 40 +if bullet.wear+(65535/throwDur) < 65535 then +javStack = {name="rangedweapons:javelin",wear=(bullet.wear)+(65535/throwDur)} +minetest.add_item(bullet.object:get_pos(),javStack) end end, + }, + on_secondary_use = function(itemstack, user, pointed_thing) +rangedweapons_yeet(itemstack, user) +return itemstack + end, }) + + diff --git a/kriss_sv.lua b/kriss_sv.lua index 68df21a..eba47b3 100644 --- a/kriss_sv.lua +++ b/kriss_sv.lua @@ -1,177 +1,68 @@ -minetest.register_craft({ - output = 'rangedweapons:kriss_sv', - recipe = { - {'rangedweapons:plastic_sheet', 'rangedweapons:plastic_sheet', 'rangedweapons:plastic_sheet'}, - {'default:gold_ingot', 'default:mese_crystal', 'rangedweapons:plastic_sheet'}, - {'rangedweapons:plastic_sheet', 'default:gold_ingot', ''}, - } -}) - minetest.register_craftitem("rangedweapons:kriss_sv", { +minetest.register_tool("rangedweapons:kriss_sv_r", { stack_max= 1, wield_scale = {x=1.75,y=1.75,z=1.15}, - description = "" ..core.colorize("#35cdff","Kriss Super V\n") ..core.colorize("#FFFFFF", "Ranged damage: 2-4\n") ..core.colorize("#FFFFFF", "accuracy: 60%\n") ..core.colorize("#FFFFFF", "Mob knockback: 0\n") ..core.colorize("#FFFFFF", "Critical chance: 5%\n") ..core.colorize("#FFFFFF", "Critical damage: 3-7\n") ..core.colorize("#FFFFFF", "Ammunition: 9mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.06\n") ..core.colorize("#FFFFFF", "Gun type: machine pistol\n") ..core.colorize("#FFFFFF", "Bullet velocity: 20"), + description = "", + rw_next_reload = "rangedweapons:kriss_sv_rr", + load_sound = "rangedweapons_handgun_mag_in", range = 0, + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_kriss_sv_rld.png", +}) + +minetest.register_tool("rangedweapons:kriss_sv_rr", { + stack_max= 1, + wield_scale = {x=1.75,y=1.75,z=1.15}, + description = "", + rw_next_reload = "rangedweapons:kriss_sv_rrr", + load_sound = "rangedweapons_reload_a", + range = 0, + groups = {not_in_creative_inventory = 1}, inventory_image = "rangedweapons_kriss_sv.png", }) -local timer = 0 -minetest.register_globalstep(function(dtime, player) - timer = timer + dtime; - if timer >= 0.06 then - for _, player in pairs(minetest.get_connected_players()) do - local inv = player:get_inventory() - local controls = player:get_player_control() - if controls.LMB then - timer = 0 - local wielded_item = player:get_wielded_item():get_name() - if wielded_item == "rangedweapons:kriss_sv" then - if not inv:contains_item("main", "rangedweapons:9mm") then -minetest.sound_play("rangedweapons_empty", {object=player}) - else - if wielded_item == "rangedweapons:kriss_sv" then - inv:remove_item("main", "rangedweapons:9mm") - local pos = player:getpos() - local dir = player:get_look_dir() - local yaw = player:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:kriss_svshot") - if obj then - minetest.sound_play("rangedweapons_machine_pistol", {object=obj}) - obj:setvelocity({x=dir.x * 20, y=dir.y * 20, z=dir.z * 20}) - obj:setacceleration({x=dir.x * math.random(-4.0,4.0), y=math.random(-3.8,3.8), z=dir.z * math.random(-4.0,4.0)}) - obj:setyaw(yaw + math.pi) - pos.y = pos.y + 0 - local obj = minetest.add_entity(pos, "rangedweapons:empty_shell") - minetest.sound_play("", {object=obj}) - obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) - obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) - obj:setyaw(yaw + math.pi) - minetest.add_particle({ - pos = pos, - velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} , - acceleration = {x=dir.x * -4, y=2, z=dir.z * -4}, - expirationtime = 0.30, - size = 4, - collisiondetection = false, - vertical = false, - texture = "tnt_smoke.png", - glow = 5, - }) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or player - - end - end - end - end -end - -end - end - end - end - end) - -local rangedweapons_kriss_svshot = { - physical = false, - timer = 0, - visual = "sprite", - visual_size = {x=0.3, y=0.3}, - textures = {"rangedweapons_invisible.png"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_kriss_svshot.on_step = function(self, dtime, node, pos) - self.timer = self.timer + dtime - local tiem = 0.002 - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.17 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:kriss_svshot" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 5 then - local damage = math.random(3,7) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=0}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(2,4) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 0}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - if math.random(1, 100) <= 5 then - local damage = math.random(3,7) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(2,4) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - if timer >= 0.002 + tiem then - minetest.add_particle({ - pos = pos, - velocity = 0, - acceleration = {x=0, y=0, z=0}, - expirationtime = 0.06, - size = 3, - collisiondetection = false, - vertical = false, - texture = "rangedweapons_bullet_fly.png", - glow = 15, - }) - tiem = tiem + 0.002 - end - if self.timer >= 4.0 then - self.object:remove() - end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") then - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - if node.name == "rangedweapons:barrel" or - node.name == "doors:door_glass_a" or - node.name == "doors:door_glass_b" or - node.name == "xpanes:pane" or - node.name == "xpanes:pane_flat" or - node.name == "vessels:drinking_glass" or - node.name == "vessels:glass_bottle" or - node.name == "default:glass" then - minetest.get_node_timer(pos):start(0) - end - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end -end -end +minetest.register_tool("rangedweapons:kriss_sv_rrr", { + stack_max= 1, + wield_scale = {x=1.75,y=1.75,z=1.15}, + description = "", + rw_next_reload = "rangedweapons:kriss_sv", + load_sound = "rangedweapons_reload_b", + range = 0, + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_kriss_sv.png", +}) - -minetest.register_entity("rangedweapons:kriss_svshot", rangedweapons_kriss_svshot ) \ No newline at end of file + minetest.register_tool("rangedweapons:kriss_sv", { + stack_max= 1, + wield_scale = {x=1.75,y=1.75,z=1.15}, + description = "" ..core.colorize("#35cdff","Kriss Super V\n") ..core.colorize("#FFFFFF", "Gun damage: 1\n") ..core.colorize("#FFFFFF", "accuracy: 60%\n") ..core.colorize("#FFFFFF", "Gun knockback: 0\n") ..core.colorize("#FFFFFF", "Gun Critical chance: 6%\n") ..core.colorize("#FFFFFF", "Critical efficiency: 1.85x\n") ..core.colorize("#FFFFFF", "Reload delay: 0.9\n") ..core.colorize("#FFFFFF", "Clip size: 33/33/13\n") ..core.colorize("#FFFFFF", "Ammunition: 9x19mm parabellum/10mm auto/.45 acp\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.05\n") ..core.colorize("#FFFFFF", "Gun type: machine pistol\n") ..core.colorize("#FFFFFF", "Bullet velocity: 20"), + range = 0, + inventory_image = "rangedweapons_kriss_sv.png", + RW_gun_capabilities = { + automatic_gun = 1, + gun_damage = {fleshy=1,knockback=0}, + gun_crit = 6, + gun_critEffc = 1.95, + suitable_ammo = {{"rangedweapons:9mm",33},{"rangedweapons:10mm",33},{"rangedweapons:45acp",13}}, + gun_skill = {"mp_skill",90}, + gun_magazine = "rangedweapons:machinepistol_mag", + gun_icon = "rangedweapons_kriss_sv_icon.png", + gun_unloaded = "rangedweapons:kriss_sv_r", + gun_velocity = 20, + gun_accuracy = 60, + gun_cooldown = 0.05, + gun_reload = 0.9/4, + gun_projectiles = 1, + has_shell = 1, + gun_gravity = 0, + gun_durability = 1750, + gun_smokeSize = 4, + gun_unload_sound = "rangedweapons_handgun_mag_out", + gun_sound = "rangedweapons_machine_pistol", + }, + on_secondary_use = function(itemstack, user, pointed_thing) +rangedweapons_reload_gun(itemstack, user) +return itemstack +end, +}) diff --git a/laser_blaster.lua b/laser_blaster.lua index 54e1f53..8f5113a 100644 --- a/laser_blaster.lua +++ b/laser_blaster.lua @@ -1,153 +1,46 @@ -minetest.register_craft({ - output = 'rangedweapons:laser_blaster', - recipe = { - {'default:steel_ingot', 'rangedweapons:gun_power_core', 'default:steel_ingot'}, - {'rangedweapons:gunsteel_ingot', 'rangedweapons:gunsteel_ingot', 'rangedweapons:gunsteel_ingot'}, - {'', 'default:mese_crystal_fragment', 'default:steel_ingot'}, - } +minetest.register_craftitem("rangedweapons:blue_ray_visual", { + wield_scale = {x=1.75,y=1.75,z=1.75}, + inventory_image = "rangedweapons_blue_ray.png", }) - minetest.register_craftitem("rangedweapons:laser_blaster", { + minetest.register_tool("rangedweapons:laser_blaster", { stack_max= 1, wield_scale = {x=1.15,y=1.15,z=1.15}, - description = "" ..core.colorize("#35cdff","Laser blaster\n") ..core.colorize("#FFFFFF", "Ranged damage: 12-18\n") ..core.colorize("#FFFFFF", "accuracy: 100%\n") ..core.colorize("#FFFFFF", "Mob knockback: 0\n") ..core.colorize("#FFFFFF", "Critical chance: 10%\n") ..core.colorize("#FFFFFF", "Critical damage: 28-40\n") ..core.colorize("#FFFFFF", "Power usage: 1\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.35\n") ..core.colorize("#FFFFFF", "Gun type: power pistol\n") ..core.colorize("#FFFFFF", "Bullet velocity: 15"), + description = "" ..core.colorize("#35cdff","Laser blaster\n") ..core.colorize("#FFFFFF", "Ranged damage: 15\n") ..core.colorize("#FFFFFF", "accuracy: 100%\n") ..core.colorize("#FFFFFF", "knockback: 0\n") ..core.colorize("#FFFFFF", "Critical chance: 10%\n") ..core.colorize("#FFFFFF", "Critical efficiency: 2.0x\n") ..core.colorize("#FFFFFF", "Power usage: 10\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.3\n") ..core.colorize("#FFFFFF", "Enemy penetration: 50%\n") ..core.colorize("#FFFFFF", "Gun type: power pistol\n") ..core.colorize("#FFFFFF", "Bullet velocity: 65"), range = 0, inventory_image = "rangedweapons_laser_blaster.png", +RW_powergun_capabilities = { + power_damage = {fleshy=15,knockback=0}, + power_crit = 10, + power_critEffc = 2.0, + power_skill = {"",1}, + power_cooling = "rangedweapons:laser_blaster", + power_velocity = 65, + power_accuracy = 100, + power_cooldown = 0.3, + power_projectiles = 1, + power_durability = 5000, + power_sound = "rangedweapons_laser", + power_glass_breaking = 1, + power_door_breaking = 1, + power_dps = 0, + power_mob_penetration = 50, + power_node_penetration = 0, + power_dps = 0, + power_consumption = 10, + power_entity = "rangedweapons:shot_bullet", + power_visual = "wielditem", + power_texture = "rangedweapons:blue_ray_visual", + power_projectile_size = 0.1, + has_sparks = 0, + ignites_explosives = 1, + }, + on_use = function(itemstack, user, pointed_thing) +rangedweapons_shoot_powergun(itemstack, user) +return itemstack + end, + }) -local timer = 0 -minetest.register_globalstep(function(dtime, player) - timer = timer + dtime; - if timer >= 0.35 then - for _, player in pairs(minetest.get_connected_players()) do - local inv = player:get_inventory() - local controls = player:get_player_control() - if controls.LMB then - timer = 0 - local wielded_item = player:get_wielded_item():get_name() - if wielded_item == "rangedweapons:laser_blaster" then - if not inv:contains_item("main", "rangedweapons:power_particle") then -minetest.sound_play("rangedweapons_empty", {object=player}) - else - if wielded_item == "rangedweapons:laser_blaster" then - inv:remove_item("main", "rangedweapons:power_particle") - local pos = player:getpos() - local dir = player:get_look_dir() - local yaw = player:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:laser_blastershot") - if obj then - minetest.sound_play("rangedweapons_laser", {object=obj}) - obj:setvelocity({x=dir.x * 15, y=dir.y * 15, z=dir.z * 15}) - obj:setacceleration({x=dir.x * math.random(0,0), y=math.random(0,0), z=dir.z * math.random(0,0)}) - obj:setyaw(yaw + math.pi) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or player - - end - end - end - end -end - -end - end - end - end - end) - -local rangedweapons_laser_blastershot = { - physical = false, - timer = 0, - visual = "sprite", - visual_size = {x=0.3, y=0.3}, - textures = {"rangedweapons_invisible.png"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_laser_blastershot.on_step = function(self, dtime, node, pos) - self.timer = self.timer + dtime - local tiem = 0.002 - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.21 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:laser_blastershot" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 10 then - local damage = math.random(28,40) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=0}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(12,18) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 0}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - if math.random(1, 100) <= 10 then - local damage = math.random(28,40) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(12,18) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - if timer >= 0.002 + tiem then - minetest.add_particle({ - pos = pos, - velocity = 0, - acceleration = {x=0, y=0, z=0}, - expirationtime = 0.2, - size = 7, - collisiondetection = false, - vertical = false, - texture = "rangedweapons_ray_blue.png", - glow = 30, - }) - tiem = tiem + 0.002 - end - if self.timer >= 4.0 then - self.object:remove() - end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") then - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - if node.name == "rangedweapons:barrel" then - minetest.get_node_timer(pos):start(0) - end - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end -end -end - -minetest.register_entity("rangedweapons:laser_blastershot", rangedweapons_laser_blastershot ) \ No newline at end of file diff --git a/laser_rifle.lua b/laser_rifle.lua index b7ce16a..c2449f1 100644 --- a/laser_rifle.lua +++ b/laser_rifle.lua @@ -1,153 +1,38 @@ -minetest.register_craft({ - output = 'rangedweapons:laser_rifle', - recipe = { - {'rangedweapons:ultra_gunsteel_ingot', 'rangedweapons:gun_power_core', 'rangedweapons:ultra_gunsteel_ingot'}, - {'rangedweapons:gun_power_core', 'rangedweapons:ultra_gunsteel_ingot', 'default:gold_ingot'}, - {'default:gold_ingot', 'default:mese', 'rangedweapons:ultra_gunsteel_ingot'}, - } +minetest.register_craftitem("rangedweapons:red_ray_visual", { + wield_scale = {x=1.5,y=1.5,z=2.0}, + inventory_image = "rangedweapons_red_ray.png", }) - minetest.register_craftitem("rangedweapons:laser_rifle", { - stack_max= 1, + minetest.register_tool("rangedweapons:laser_rifle", { wield_scale = {x=1.9,y=1.9,z=2.5}, - description = "" ..core.colorize("#35cdff","Laser rifle\n") ..core.colorize("#FFFFFF", "Ranged damage: 10-20\n") ..core.colorize("#FFFFFF", "accuracy: 100%\n") ..core.colorize("#FFFFFF", "Mob knockback: 0\n") ..core.colorize("#FFFFFF", "Critical chance: 8%\n") ..core.colorize("#FFFFFF", "Critical damage: 22-46\n") ..core.colorize("#FFFFFF", "Power usage: 2\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.1\n") ..core.colorize("#FFFFFF", "Gun type: power assault rifle\n") ..core.colorize("#FFFFFF", "Bullet velocity: 20"), + description = "" ..core.colorize("#35cdff","Laser rifle\n") ..core.colorize("#FFFFFF", "Ranged damage: 12\n") ..core.colorize("#FFFFFF", "accuracy: 100%\n") ..core.colorize("#FFFFFF", "knockback: 0\n") ..core.colorize("#FFFFFF", "Critical chance: 9%\n") ..core.colorize("#FFFFFF", "Critical efficiency: 2.0x\n") ..core.colorize("#FFFFFF", "Power usage: 8\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.1 (full-auto)\n") ..core.colorize("#FFFFFF", "Enemy penetration: 40%\n") ..core.colorize("#FFFFFF", "Gun type: power assault rifle\n") ..core.colorize("#FFFFFF", "Bullet velocity: 60"), range = 0, +RW_powergun_capabilities = { + automatic_gun = 1, + power_damage = {fleshy=12,knockback=0}, + power_crit = 9, + power_critEffc = 2.0, + power_skill = {"",1}, + power_cooling = "rangedweapons:laser_rifle", + power_velocity = 60, + power_accuracy = 100, + power_cooldown = 0.1, + power_projectiles = 1, + power_durability = 12500, + power_sound = "rangedweapons_laser", + power_glass_breaking = 1, + power_door_breaking = 1, + power_dps = 0, + power_mob_penetration = 40, + power_node_penetration = 0, + power_dps = 0, + power_consumption = 8, + power_entity = "rangedweapons:shot_bullet", + power_visual = "wielditem", + power_texture = "rangedweapons:red_ray_visual", + power_projectile_size = 0.075, + has_sparks = 0, + ignites_explosives = 1, + }, inventory_image = "rangedweapons_laser_rifle.png", }) - -local timer = 0 -minetest.register_globalstep(function(dtime, player) - timer = timer + dtime; - if timer >= 0.1 then - for _, player in pairs(minetest.get_connected_players()) do - local inv = player:get_inventory() - local controls = player:get_player_control() - if controls.LMB then - timer = 0 - local wielded_item = player:get_wielded_item():get_name() - if wielded_item == "rangedweapons:laser_rifle" then - if not inv:contains_item("main", "rangedweapons:power_particle 2") then -minetest.sound_play("rangedweapons_empty", {object=player}) - else - if wielded_item == "rangedweapons:laser_rifle" then - inv:remove_item("main", "rangedweapons:power_particle 2") - local pos = player:getpos() - local dir = player:get_look_dir() - local yaw = player:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:laser_rifleshot") - if obj then - minetest.sound_play("rangedweapons_laser", {object=obj}) - obj:setvelocity({x=dir.x * 20, y=dir.y * 20, z=dir.z * 20}) - obj:setacceleration({x=dir.x * math.random(0,0), y=math.random(0,0), z=dir.z * math.random(0,0)}) - obj:setyaw(yaw + math.pi) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or player - - end - end - end - end -end - -end - end - end - end - end) - -local rangedweapons_laser_rifleshot = { - physical = false, - timer = 0, - visual = "sprite", - visual_size = {x=0.3, y=0.3}, - textures = {"rangedweapons_invisible.png"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_laser_rifleshot.on_step = function(self, dtime, node, pos) - self.timer = self.timer + dtime - local tiem = 0.002 - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.175 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:laser_rifleshot" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 8 then - local damage = math.random(22,46) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=0}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(10,20) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 0}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - if math.random(1, 100) <= 8 then - local damage = math.random(22,46) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(12,18) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - if timer >= 0.002 + tiem then - minetest.add_particle({ - pos = pos, - velocity = 0, - acceleration = {x=0, y=0, z=0}, - expirationtime = 0.2, - size = 7, - collisiondetection = false, - vertical = false, - texture = "rangedweapons_ray_red.png", - glow = 30, - }) - tiem = tiem + 0.002 - end - if self.timer >= 4.0 then - self.object:remove() - end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") then - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - if node.name == "rangedweapons:barrel" then - minetest.get_node_timer(pos):start(0) - end - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end -end -end - - - -minetest.register_entity("rangedweapons:laser_rifleshot", rangedweapons_laser_rifleshot ) \ No newline at end of file diff --git a/laser_shotgun.lua b/laser_shotgun.lua index c90e60b..4bd5ab1 100644 --- a/laser_shotgun.lua +++ b/laser_shotgun.lua @@ -1,178 +1,39 @@ -minetest.register_craft({ - output = 'rangedweapons:laser_shotgun', - recipe = { - {'rangedweapons:ultra_gunsteel_ingot', 'rangedweapons:gun_power_core', 'rangedweapons:ultra_gunsteel_ingot'}, - {'rangedweapons:gun_power_core', 'rangedweapons:gun_power_core', 'rangedweapons:ultra_gunsteel_ingot'}, - {'', 'rangedweapons:ultra_gunsteel_ingot', 'rangedweapons:ultra_gunsteel_ingot'}, - } -}) - - minetest.register_craftitem("rangedweapons:laser_shotgun", { + minetest.register_tool("rangedweapons:laser_shotgun", { stack_max= 1, wield_scale = {x=2.0,y=2.0,z=1.75}, - description = "" ..core.colorize("#35cdff","Laser shotgun\n") ..core.colorize("#FFFFFF", "Ranged damage: 15-26 X 5\n") ..core.colorize("#FFFFFF", "accuracy: 100%\n") ..core.colorize("#FFFFFF", "Mob knockback: 0\n") ..core.colorize("#FFFFFF", "Critical chance: 12%\n") ..core.colorize("#FFFFFF", "Critical damage: 31-59 X 5\n") ..core.colorize("#FFFFFF", "Power usage: 7\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.75\n") ..core.colorize("#FFFFFF", "Gun type: power shotgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 15"), + description = "" ..core.colorize("#35cdff","Laser shotgun\n") ..core.colorize("#FFFFFF", "Ranged damage: 10\n") ..core.colorize("#FFFFFF", "accuracy: 40%\n") ..core.colorize("#FFFFFF", "projectiles: 6\n") ..core.colorize("#FFFFFF", "knockback: 0\n") ..core.colorize("#FFFFFF", "Critical chance: 8%\n") ..core.colorize("#FFFFFF", "Critical efficiency: 2.2x\n") ..core.colorize("#FFFFFF", "Power usage: 30\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.5\n") ..core.colorize("#FFFFFF", "Enemy penetration: 40%\n") ..core.colorize("#FFFFFF", "Gun type: power pistol\n") ..core.colorize("#FFFFFF", "Bullet velocity: 55"), range = 0, inventory_image = "rangedweapons_laser_shotgun.png", -}) +RW_powergun_capabilities = { + power_damage = {fleshy=10,knockback=0}, + power_crit = 8, + power_critEffc = 2.2, + power_skill = {"",1}, + power_cooling = "rangedweapons:laser_shotgun", + power_velocity = 55, + power_accuracy = 40, + power_cooldown = 0.5, + power_projectiles = 1, + power_durability = 2000, + power_sound = "rangedweapons_laser", + power_glass_breaking = 1, + power_door_breaking = 1, + power_dps = 0, + power_mob_penetration = 40, + power_node_penetration = 0, + power_dps = 0, + power_consumption = 30, + power_entity = "rangedweapons:shot_bullet", + power_visual = "sprite", + power_texture = "rangedweapons_green_ray.png", + power_projectile_size = 0.005, + power_projectiles = 6, + has_sparks = 0, + ignites_explosives = 1, + }, + on_use = function(itemstack, user, pointed_thing) +rangedweapons_shoot_powergun(itemstack, user) +return itemstack + end, -local timer = 0 -minetest.register_globalstep(function(dtime, player) - timer = timer + dtime; - if timer >= 0.75 then - for _, player in pairs(minetest.get_connected_players()) do - local inv = player:get_inventory() - local controls = player:get_player_control() - if controls.LMB then - timer = 0 - local wielded_item = player:get_wielded_item():get_name() - if wielded_item == "rangedweapons:laser_shotgun" then - if not inv:contains_item("main", "rangedweapons:power_particle 7") then -minetest.sound_play("rangedweapons_empty", {object=player}) - else - if wielded_item == "rangedweapons:laser_shotgun" then - inv:remove_item("main", "rangedweapons:power_particle 7") - local pos = player:getpos() - local dir = player:get_look_dir() - local yaw = player:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:laser_shotgunshot") - if obj then - minetest.sound_play("rangedweapons_laser", {object=obj}) - obj:setvelocity({x=dir.x * 15, y=dir.y * 15, z=dir.z * 15}) - obj:setacceleration({x=dir.x * math.random(0,0), y=math.random(0,0), z=dir.z * math.random(0,0)}) - obj:setyaw(yaw + math.pi) ------------------------------------------------------------- - local obj = minetest.add_entity(pos, "rangedweapons:laser_shotgunshot") - minetest.sound_play("rangedweapons_laser", {object=obj}) - obj:setvelocity({x=dir.x * 15, y=dir.y * 15, z=dir.z * 18}) - obj:setacceleration({x=dir.x * math.random(0,0), y=math.random(0,0), z=dir.z * math.random(0,0)}) - obj:setyaw(yaw + math.pi) ------------------------------------------------------------- - local obj = minetest.add_entity(pos, "rangedweapons:laser_shotgunshot") - minetest.sound_play("rangedweapons_laser", {object=obj}) - obj:setvelocity({x=dir.x * 15, y=dir.y * 15, z=dir.z * 21}) - obj:setacceleration({x=dir.x * math.random(0,0), y=math.random(0,0), z=dir.z * math.random(0,0)}) - obj:setyaw(yaw + math.pi) ------------------------------------------------------------- - local obj = minetest.add_entity(pos, "rangedweapons:laser_shotgunshot") - minetest.sound_play("rangedweapons_laser", {object=obj}) - obj:setvelocity({x=dir.x * 18, y=dir.y * 15, z=dir.z * 15}) - obj:setacceleration({x=dir.x * math.random(0,0), y=math.random(0,0), z=dir.z * math.random(0,0)}) - obj:setyaw(yaw + math.pi) ------------------------------------------------------------- - local obj = minetest.add_entity(pos, "rangedweapons:laser_shotgunshot") - minetest.sound_play("rangedweapons_laser", {object=obj}) - obj:setvelocity({x=dir.x * 21, y=dir.y * 15, z=dir.z * 15}) - obj:setacceleration({x=dir.x * math.random(0,0), y=math.random(0,0), z=dir.z * math.random(0,0)}) - obj:setyaw(yaw + math.pi) - - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or player - - end - end - end - end -end - -end - end - end - end - end) - -local rangedweapons_laser_shotgunshot = { - physical = false, - timer = 0, - visual = "sprite", - visual_size = {x=0.3, y=0.3}, - textures = {"rangedweapons_invisible.png"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_laser_shotgunshot.on_step = function(self, dtime, node, pos) - self.timer = self.timer + dtime - local tiem = 0.002 - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.22 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:laser_shotgunshot" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 12 then - local damage = math.random(31,59) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=0}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(15,26) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 0}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - if math.random(1, 100) <= 12 then - local damage = math.random(31,59) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(15,26) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - if timer >= 0.002 + tiem then - minetest.add_particle({ - pos = pos, - velocity = 0, - acceleration = {x=0, y=0, z=0}, - expirationtime = 0.2, - size = 7, - collisiondetection = false, - vertical = false, - texture = "rangedweapons_ray_green.png", - glow = 30, - }) - tiem = tiem + 0.002 - end - if self.timer >= 4.0 then - self.object:remove() - end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") then - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - if node.name == "rangedweapons:barrel" then - minetest.get_node_timer(pos):start(0) - end - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end -end -end - - - -minetest.register_entity("rangedweapons:laser_shotgunshot", rangedweapons_laser_shotgunshot ) \ No newline at end of file +}) \ No newline at end of file diff --git a/license.txt b/license.txt index b9242b1..1113ff7 100644 --- a/license.txt +++ b/license.txt @@ -1 +1 @@ -cc-by-sa 3.0 \ No newline at end of file +cc-by-sa 4.0 \ No newline at end of file diff --git a/luger.lua b/luger.lua index 1e53d64..24ee421 100644 --- a/luger.lua +++ b/luger.lua @@ -1,192 +1,78 @@ - - - local timer = 0 -minetest.register_globalstep(function(dtime, player) - timer = timer + dtime; - if timer >= 0.75 then - for _, player in pairs(minetest.get_connected_players()) do - if player:get_wielded_item():get_name() == "rangedweapons:luger_rld" then - player:set_wielded_item("rangedweapons:luger") - minetest.sound_play("", {player}) - - end - - end - end - end) - - -minetest.register_craftitem("rangedweapons:luger_rld", { +------------reload-------------------- +minetest.register_tool("rangedweapons:luger_r", { stack_max= 1, wield_scale = {x=0.9,y=0.9,z=1.0}, - description = "***RELOADING LUGER P08***", + description = "", range = 0, groups = {not_in_creative_inventory = 1}, + rw_next_reload = "rangedweapons:luger_rr", + load_sound = "rangedweapons_handgun_mag_in", + inventory_image = "rangedweapons_luger.png", +}) +minetest.register_tool("rangedweapons:luger_rr", { + stack_max= 1, + wield_scale = {x=0.9,y=0.9,z=1.0}, + description = "", + range = 0, + groups = {not_in_creative_inventory = 1}, + rw_next_reload = "rangedweapons:luger_rrr", + load_sound = "rangedweapons_reload_a", + inventory_image = "rangedweapons_luger.png", +}) +minetest.register_tool("rangedweapons:luger_rrr", { + stack_max= 1, + wield_scale = {x=0.9,y=0.9,z=1.0}, + description = "", + range = 0, + groups = {not_in_creative_inventory = 1}, + rw_next_reload = "rangedweapons:luger", + load_sound = "rangedweapons_reload_b", + inventory_image = "rangedweapons_luger_rld.png", +}) +minetest.register_tool("rangedweapons:luger_rld", { + stack_max= 1, + wield_scale = {x=0.9,y=0.9,z=1.0}, + description = "", + range = 0, + loaded_gun = "rangedweapons:luger", + groups = {not_in_creative_inventory = 1}, inventory_image = "rangedweapons_luger_rld.png", }) - +-----------------gun-------------- minetest.register_tool("rangedweapons:luger", { - description = "" ..core.colorize("#35cdff","Luger P08\n") ..core.colorize("#FFFFFF", "Ranged damage: 3-6\n")..core.colorize("#FFFFFF", "Accuracy: 85%\n") ..core.colorize("#FFFFFF", "Mob knockback: 3\n") ..core.colorize("#FFFFFF", "Critical chance: 10%\n") ..core.colorize("#FFFFFF", "Critical damage: 7-11\n") ..core.colorize("#FFFFFF", "Ammunition: 9mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.75\n") ..core.colorize("#FFFFFF", "Gun type: Handgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 20"), + description = "" ..core.colorize("#35cdff","Luger P08\n") ..core.colorize("#FFFFFF", "Ranged damage: 4\n")..core.colorize("#FFFFFF", "Accuracy: 92%\n") ..core.colorize("#FFFFFF", "Gun knockback: 3\n") ..core.colorize("#FFFFFF", "Critical chance: 10%\n") ..core.colorize("#FFFFFF", "Critical efficiency: 2x\n") ..core.colorize("#FFFFFF", "Ammunition: 9x19mm parabellum\n")..core.colorize("#FFFFFF", "Reload delay: 1.0\n")..core.colorize("#FFFFFF", "Clip size: 8\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.625\n") ..core.colorize("#FFFFFF", "Gun type: Handgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 20"), range = 0, wield_scale = {x=0.9,y=0.9,z=1.0}, inventory_image = "rangedweapons_luger.png", + RW_gun_capabilities = { + gun_damage = {fleshy=4,knockback=3}, + gun_crit = 10, + gun_critEffc = 2.0, + suitable_ammo = {{"rangedweapons:9mm",8}}, + gun_skill = {"handgun_skill",40}, + gun_magazine = "rangedweapons:handgun_mag_black", + gun_icon = "rangedweapons_luger_icon.png", + gun_unloaded = "rangedweapons:luger_r", + gun_cooling = "rangedweapons:luger_rld", + gun_velocity = 20, + gun_accuracy = 92, + gun_cooldown = 0.625, + gun_reload = 1.0/4, + gun_projectiles = 1, + has_shell = 1, + gun_durability = 600, + 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) - timer = 0 - local inv = user:get_inventory() - if not inv:contains_item("main", "rangedweapons:9mm 1") then - minetest.sound_play("rangedweapons_empty", {object=user}) - return itemstack - end - if not minetest.setting_getbool("creative_mode") then - inv:remove_item("main", "rangedweapons:9mm") - end - local pos = user:getpos() - local dir = user:get_look_dir() - local yaw = user:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:lugershot") - if obj then - minetest.sound_play("rangedweapons_makarov", {object=obj}) - obj:setvelocity({x=dir.x * 20, y=dir.y * 20, z=dir.z * 20}) - obj:setacceleration({x=dir.x * math.random(-1.5,1.5), y=math.random(-1.5,1.5), z=dir.z * math.random(-1.5,1.5)}) - obj:setyaw(yaw + math.pi) - pos.y = pos.y + 0 - local obj = minetest.add_entity(pos, "rangedweapons:empty_shell") - minetest.sound_play("", {object=obj}) - obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) - obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) - obj:setyaw(yaw + math.pi) - minetest.add_particle({ - pos = pos, - velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} , - acceleration = {x=dir.x * -4, y=2, z=dir.z * -4}, - expirationtime = 0.75, - size = 5, - collisiondetection = false, - vertical = false, - texture = "tnt_smoke.png", - glow = 5, - }) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or user - itemstack = "rangedweapons:luger_rld" - end - end - end - return itemstack +rangedweapons_shoot_gun(itemstack, user) +return itemstack end, }) -minetest.register_craft({ - output = 'rangedweapons:luger', - recipe = { - {'', 'default:steel_ingot', 'default:steel_ingot'}, - {'', '', 'default:tree'}, - {'', '', ''}, - } -}) - -local rangedweapons_lugershot = { - physical = false, - timer = 0, - visual = "sprite", - visual_size = {x=0.3, y=0.3}, - textures = {"rangedweapons_invisible.png"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_lugershot.on_step = function(self, dtime, node, pos) - self.timer = self.timer + dtime - local tiem = 0.002 - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.165 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:lugershot" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 10 then - local damage = math.random(7,11) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 6}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(3,6) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 3}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - if math.random(1, 100) <= 10 then - local damage = math.random(7,11) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(3,6) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - if timer >= 0.002 + tiem then - minetest.add_particle({ - pos = pos, - velocity = 0, - acceleration = {x=0, y=0, z=0}, - expirationtime = 0.06, - size = 3, - collisiondetection = false, - vertical = false, - texture = "rangedweapons_bullet_fly.png", - glow = 15, - }) - tiem = tiem + 0.002 - end - if self.timer >= 4.0 then - self.object:remove() - end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") then - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - if node.name == "rangedweapons:barrel" or - node.name == "doors:door_glass_a" or - node.name == "doors:door_glass_b" or - node.name == "xpanes:pane" or - node.name == "xpanes:pane_flat" or - node.name == "vessels:drinking_glass" or - node.name == "vessels:glass_bottle" or - node.name == "default:glass" then - minetest.get_node_timer(pos):start(0) - end - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end -end -end - - - -minetest.register_entity("rangedweapons:lugershot", rangedweapons_lugershot ) - diff --git a/m16.lua b/m16.lua index 3691453..08b1473 100644 --- a/m16.lua +++ b/m16.lua @@ -1,177 +1,73 @@ -minetest.register_craft({ - output = 'rangedweapons:m16', - recipe = { - {'default:diamond', 'default:steelblock', 'default:steel_ingot'}, - {'default:steel_ingot', 'default:diamond', 'default:steel_ingot'}, - {'default:steel_ingot', '', 'default:steel_ingot'}, - } -}) - minetest.register_craftitem("rangedweapons:m16", { + +minetest.register_tool("rangedweapons:m16_r", { stack_max= 1, wield_scale = {x=1.75,y=1.75,z=1.3}, - description = "" ..core.colorize("#35cdff","Colt M16\n") ..core.colorize("#FFFFFF", "Ranged damage: 4-10\n") ..core.colorize("#FFFFFF", "Accuracy: 80%\n") ..core.colorize("#FFFFFF", "Mob knockback: 3\n")..core.colorize("#FFFFFF", "Critical chance: 9%\n") ..core.colorize("#FFFFFF", "Critical damage: 9-19\n") ..core.colorize("#FFFFFF", "Ammunition: 5.56mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.125\n") ..core.colorize("#FFFFFF", "Gun type: Assault rifle\n") ..core.colorize("#FFFFFF", "Bullet velocity: 35"), + description = "", + rw_next_reload = "rangedweapons:m16_rr", + load_sound = "rangedweapons_handgun_mag_in", range = 0, + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_m16_rld.png", +}) + +minetest.register_tool("rangedweapons:m16_rr", { + stack_max= 1, + wield_scale = {x=1.75,y=1.75,z=1.3}, + description = "", + rw_next_reload = "rangedweapons:m16_rrr", + load_sound = "rangedweapons_rifle_reload_a", + range = 0, + groups = {not_in_creative_inventory = 1}, inventory_image = "rangedweapons_m16.png", }) -local timer = 0 -minetest.register_globalstep(function(dtime, player) - timer = timer + dtime; - if timer >= 0.125 then - for _, player in pairs(minetest.get_connected_players()) do - local inv = player:get_inventory() - local controls = player:get_player_control() - if controls.LMB then - timer = 0 - local wielded_item = player:get_wielded_item():get_name() - if wielded_item == "rangedweapons:m16" then - if not inv:contains_item("main", "rangedweapons:556mm") then -minetest.sound_play("rangedweapons_empty", {object=player}) - else - if wielded_item == "rangedweapons:m16" then - inv:remove_item("main", "rangedweapons:556mm") - local pos = player:getpos() - local dir = player:get_look_dir() - local yaw = player:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:m16shot") - if obj then - minetest.sound_play("rangedweapons_smg", {object=obj}) - obj:setvelocity({x=dir.x * 35, y=dir.y * 35, z=dir.z * 35}) - obj:setacceleration({x=dir.x * math.random(-2.0,2.0), y=math.random(-2.0,2.0), z=dir.z * math.random(-2.0,2.0)}) - obj:setyaw(yaw + math.pi) - pos.y = pos.y + 0 - local obj = minetest.add_entity(pos, "rangedweapons:empty_shell") - minetest.sound_play("", {object=obj}) - obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) - obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) - obj:setyaw(yaw + math.pi) - minetest.add_particle({ - pos = pos, - velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} , - acceleration = {x=dir.x * -4, y=2, z=dir.z * -4}, - expirationtime = 0.5, - size = 4, - collisiondetection = false, - vertical = false, - texture = "tnt_smoke.png", - glow = 5, - }) - - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or player - end - end - end - end -end - -end - end - end - end - end) - -local rangedweapons_m16shot = { - physical = false, - timer = 0, - visual = "sprite", - visual_size = {x=0.3, y=0.3}, - textures = {"rangedweapons_invisible.png"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_m16shot.on_step = function(self, dtime, node, pos) - self.timer = self.timer + dtime - local tiem = 0.002 - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.085 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:m16shot" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 9 then - local damage = math.random(9,19) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=6}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(4,10) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 3}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - if math.random(1, 100) <= 9 then - local damage = math.random(9,19) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(4,10) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - if timer >= 0.002 + tiem then - minetest.add_particle({ - pos = pos, - velocity = 0, - acceleration = {x=0, y=0, z=0}, - expirationtime = 0.06, - size = 3, - collisiondetection = false, - vertical = false, - texture = "rangedweapons_bullet_fly.png", - glow = 15, - }) - tiem = tiem + 0.002 - end - if self.timer >= 4.0 then - self.object:remove() - end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") then - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - if node.name == "rangedweapons:barrel" or - node.name == "doors:door_glass_a" or - node.name == "doors:door_glass_b" or - node.name == "xpanes:pane" or - node.name == "xpanes:pane_flat" or - node.name == "vessels:drinking_glass" or - node.name == "vessels:glass_bottle" or - node.name == "default:glass" then - minetest.get_node_timer(pos):start(0) - end - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end -end -end +minetest.register_tool("rangedweapons:m16_rrr", { + stack_max= 1, + wield_scale = {x=1.75,y=1.75,z=1.3}, + description = "", + rw_next_reload = "rangedweapons:m16", + load_sound = "rangedweapons_rifle_reload_b", + range = 0, + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_m16.png", +}) + minetest.register_tool("rangedweapons:m16", { + stack_max= 1, + wield_scale = {x=1.75,y=1.75,z=1.3}, + description = "" ..core.colorize("#35cdff","m16\n") ..core.colorize("#FFFFFF", "Gun damage: 6\n") ..core.colorize("#FFFFFF", "accuracy: 75%\n") ..core.colorize("#FFFFFF", "Gun knockback: 4\n") ..core.colorize("#FFFFFF", "Gun Critical chance: 11%\n")..core.colorize("#FFFFFF", "Critical efficiency: 2.75x\n") ..core.colorize("#FFFFFF", "Reload delay: 1.0\n") ..core.colorize("#FFFFFF", "Clip size: 20\n") ..core.colorize("#FFFFFF", "Ammunition: 5.56mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.067(full-auto)\n") ..core.colorize("#FFFFFF", "Gun type: assault rifle\n") +..core.colorize("#FFFFFF", "Enemy penetration: 10%\n") ..core.colorize("#FFFFFF", "Bullet velocity: 35"), + range = 0, + inventory_image = "rangedweapons_m16.png", + RW_gun_capabilities = { + automatic_gun = 1, + gun_damage = {fleshy=6,knockback=4}, + gun_crit = 11, + gun_critEffc = 2.75, + suitable_ammo = {{"rangedweapons:556mm",20}}, + gun_skill = {"arifle_skill",55}, + gun_magazine = "rangedweapons:assaultrifle_mag", + gun_icon = "rangedweapons_m16_icon.png", + gun_unloaded = "rangedweapons:m16_r", + gun_velocity = 35, + gun_accuracy = 75, + gun_cooldown = 0.067, + gun_reload = 1.0/4, + gun_projectiles = 1, + has_shell = 1, + gun_gravity = 0, + gun_durability = 1350, + gun_smokeSize = 5, + gun_mob_penetration = 10, + gun_unload_sound = "rangedweapons_handgun_mag_out", + gun_sound = "rangedweapons_smg", + }, + on_secondary_use = function(itemstack, user, pointed_thing) +rangedweapons_reload_gun(itemstack, user) +return itemstack +end, -minetest.register_entity("rangedweapons:m16shot", rangedweapons_m16shot ) \ No newline at end of file + inventory_image = "rangedweapons_m16.png", +}) \ No newline at end of file diff --git a/m1991.lua b/m1991.lua new file mode 100644 index 0000000..58c06c6 --- /dev/null +++ b/m1991.lua @@ -0,0 +1,78 @@ + + +minetest.register_tool("rangedweapons:m1991_rld", { + stack_max= 1, + wield_scale = {x=1.1,y=1.1,z=1.05}, + description = "", + range = 0, + loaded_gun = "rangedweapons:m1991", + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_m1991_rld.png", +}) +minetest.register_tool("rangedweapons:m1991_r", { + stack_max= 1, + wield_scale = {x=1.1,y=1.1,z=1.05}, + description = "", + rw_next_reload = "rangedweapons:m1991_rr", + load_sound = "rangedweapons_handgun_mag_in", + range = 0, + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_m1991.png", +}) +minetest.register_tool("rangedweapons:m1991_rr", { + stack_max= 1, + wield_scale = {x=1.1,y=1.1,z=1.05}, + description = "", + rw_next_reload = "rangedweapons:m1991_rrr", + load_sound = "rangedweapons_reload_a", + range = 0, + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_m1991.png", +}) +minetest.register_tool("rangedweapons:m1991_rrr", { + stack_max= 1, + wield_scale = {x=1.1,y=1.1,z=1.05}, + description = "", + rw_next_reload = "rangedweapons:m1991", + load_sound = "rangedweapons_reload_b", + range = 0, + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_m1991_rld.png", +}) + +minetest.register_tool("rangedweapons:m1991", { + description = "" ..core.colorize("#35cdff","m1991\n") ..core.colorize("#FFFFFF", "Gun damage: 4\n")..core.colorize("#FFFFFF", "Accuracy: 92%\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: 1.0\n")..core.colorize("#FFFFFF", "Clip size: 8\n") ..core.colorize("#FFFFFF", "Ammunition: .45acp\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.4\n") ..core.colorize("#FFFFFF", "Gun type: Handgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 25"), + wield_scale = {x=1.1,y=1.1,z=1.05}, + range = 0, + inventory_image = "rangedweapons_m1991.png", +RW_gun_capabilities = { + gun_damage = {fleshy=4,knockback=4}, + gun_crit = 15, + gun_critEffc = 2.1, + suitable_ammo = {{"rangedweapons:45acp",8}}, + gun_skill = {"handgun_skill",40}, + gun_magazine = "rangedweapons:handgun_mag_black", + gun_icon = "rangedweapons_m1991_icon.png", + gun_unloaded = "rangedweapons:m1991_r", + gun_cooling = "rangedweapons:m1991_rld", + gun_velocity = 25, + gun_accuracy = 92, + gun_cooldown = 0.4, + gun_reload = 1.0/4, + gun_projectiles = 1, + has_shell = 1, + gun_durability = 1000, + gun_smokeSize = 5, + gun_unload_sound = "rangedweapons_handgun_mag_out", + gun_sound = "rangedweapons_beretta", + }, + on_secondary_use = function(itemstack, user, pointed_thing) +rangedweapons_reload_gun(itemstack, user) +return itemstack +end, + on_use = function(itemstack, user, pointed_thing) +rangedweapons_shoot_gun(itemstack, user) +return itemstack + end, +}) + diff --git a/m200.lua b/m200.lua index 53e78ac..b1ac66a 100644 --- a/m200.lua +++ b/m200.lua @@ -1,219 +1,103 @@ -minetest.register_craft({ - output = 'rangedweapons:m200_uld', - recipe = { - {'default:diamondblock', 'default:steel_ingot', 'default:diamondblock'}, - {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, - {'default:steel_ingot', 'default:diamond', 'default:steel_ingot'}, - } -}) -minetest.register_craftitem("rangedweapons:m200_uld", { + +minetest.register_tool("rangedweapons:m200_uld", { stack_max= 1, - wield_scale = {x=2.1,y=2.1,z=1.4}, + wield_scale = {x=2.1,y=2.1,z=1.2}, range = 0, - description = "" ..core.colorize("#35cdff","M200 Intervention \n") ..core.colorize("#FFFFFF", "Ranged damage: 150/sec of bullet lifetime\n") ..core.colorize("#FFFFFF", "Accuracy: 100%\n") ..core.colorize("#FFFFFF", "Mob knockback: 20\n") ..core.colorize("#FFFFFF", "Critical chance: 50%\n") ..core.colorize("#FFFFFF", "Critical damage: 400/sec of bullet lifetime\n") ..core.colorize("#FFFFFF", "Ammunition: 308.Winchester rounds\n") ..core.colorize("#FFFFFF", "Reload time: 1.75\n") ..core.colorize("#be0d00", "The gun is NOT loaded! (Right-click to load)\n")..core.colorize("#FFFFFF", "Gun type: Rifle\n") ..core.colorize("#FFFFFF", "Bullet velocity: 64"), + description = "" ..core.colorize("#35cdff","m200 intervention \n") ..core.colorize("#FFFFFF", "Ranged damage:22 + 75/sec of bullet lifetime\n")..core.colorize("#FFFFFF", "Accuracy: 100%\n") ..core.colorize("#FFFFFF", "knockback: 20\n") ..core.colorize("#FFFFFF", "Critical chance: 33%\n") ..core.colorize("#FFFFFF", "Critical efficiency: x3.25\n") ..core.colorize("#FFFFFF", "Ammunition: .408 chey tac\n") ..core.colorize("#FFFFFF", "Rate of fire: 1.5\n") ..core.colorize("#FFFFFF", "Reload time: 2.5\n") ..core.colorize("#FFFFFF", "Zoom: 15x\n") ..core.colorize("#be0d00", "Right-click to eject empty bullet shell\n") ..core.colorize("#FFFFFF", "Clip size: 7\n") ..core.colorize("#FFFFFF", "Enemy penetration:45%\n") ..core.colorize("#FFFFFF", "Block penetration:15%\n") ..core.colorize("#FFFFFF", "Gun type: Rifle\n") ..core.colorize("#FFFFFF", "Bullet velocity: 80"), + groups = {not_in_creative_inventory = 1}, inventory_image = "rangedweapons_m200.png", + weapon_zoom = 7.5, on_use = function(user) minetest.sound_play("rangedweapons_empty", {user}) end, +on_secondary_use = function(itemstack, user, pointed_thing) +eject_shell(itemstack,user,"rangedweapons:m200_rld",1.0,"rangedweapons_rifle_reload_a","rangedweapons:empty_shell") +return itemstack +end, }) - local timer = 0 -minetest.register_globalstep(function(dtime, player) - timer = timer + dtime; - if timer >= 0.001 then - for _, player in pairs(minetest.get_connected_players()) do - local inv = player:get_inventory() - local controls = player:get_player_control() - if player:get_wielded_item():get_name() == "rangedweapons:m200_uld" - and inv:contains_item("main", "rangedweapons:308winchester")then - if controls.RMB then - inv:remove_item("main", "rangedweapons:308winchester") - player:set_wielded_item("rangedweapons:m200_rld") - local pos = player:getpos() - local dir = player:get_look_dir() - local yaw = player:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:empty_shell") - minetest.sound_play("", {object=obj}) - obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) - obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) - obj:setyaw(yaw + math.pi) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or player - end - end - timer = 0 - minetest.sound_play("rangedweapons_reload_a", {player}) -end - end - - if timer >= 1.75 and - player:get_wielded_item():get_name() == "rangedweapons:m200_rld" then - player:set_wielded_item("rangedweapons:m200") - timer = 0 - minetest.sound_play("rangedweapons_reload_b", {player}) +minetest.register_tool("rangedweapons:m200_r", { + rw_next_reload = "rangedweapons:m200_rr", + load_sound = "rangedweapons_rifle_clip_in", + range = 0, + wield_scale = {x=2.1,y=2.1,z=1.2}, + description = "", + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_m200_noclip.png", +}) +minetest.register_tool("rangedweapons:m200_rr", { + rw_next_reload = "rangedweapons:m200_rrr", + load_sound = "rangedweapons_rifle_reload_a", + range = 0, + wield_scale = {x=2.1,y=2.1,z=1.2}, + description = "", + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_m200.png", +}) +minetest.register_tool("rangedweapons:m200_rrr", { + rw_next_reload = "rangedweapons:m200", + load_sound = "rangedweapons_rifle_reload_b", + range = 0, + wield_scale = {x=2.1,y=2.1,z=1.2}, + description = "", + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_m200_rld.png", +}) - - end - end - end - end) - - -minetest.register_craftitem("rangedweapons:m200_rld", { +minetest.register_tool("rangedweapons:m200_rld", { stack_max= 1, range = 0, - wield_scale = {x=2.1,y=2.1,z=1.4}, - description = "**RELOADING M200 INTERVENTION**", + wield_scale = {x=2.1,y=2.1,z=1.2}, + description = "", + loaded_gun = "rangedweapons:m200", + loaded_sound = "rangedweapons_rifle_reload_b", groups = {not_in_creative_inventory = 1}, inventory_image = "rangedweapons_m200_rld.png", }) minetest.register_tool("rangedweapons:m200", { - description = "" ..core.colorize("#35cdff","M200 Intervention \n") ..core.colorize("#FFFFFF", "Ranged damage: 150/sec of bullet lifetime\n")..core.colorize("#FFFFFF", "Accuracy: 100%\n") ..core.colorize("#FFFFFF", "Mob knockback: 20\n") ..core.colorize("#FFFFFF", "Critical chance: 50%\n") ..core.colorize("#FFFFFF", "Critical damage: 400/sec of bullet lifetime\n") ..core.colorize("#FFFFFF", "Ammunition: 308.Winchester rounds\n") ..core.colorize("#FFFFFF", "Reload time: 1.75\n") ..core.colorize("#27a600", "The gun is loaded!\n")..core.colorize("#FFFFFF", "Gun type: Rifle\n") ..core.colorize("#FFFFFF", "Bullet velocity: 64"), + description = "" ..core.colorize("#35cdff","m200 intervention \n") ..core.colorize("#FFFFFF", "Ranged damage:22 + 75/sec of bullet lifetime\n")..core.colorize("#FFFFFF", "Accuracy: 100%\n") ..core.colorize("#FFFFFF", "knockback: 20\n") ..core.colorize("#FFFFFF", "Critical chance: 33%\n") ..core.colorize("#FFFFFF", "Critical efficiency: x3.25\n") ..core.colorize("#FFFFFF", "Ammunition: .408 chey tac\n") ..core.colorize("#FFFFFF", "Rate of fire: 1.5\n") ..core.colorize("#FFFFFF", "Reload time: 2.5\n") ..core.colorize("#FFFFFF", "Zoom: 15x\n") ..core.colorize("#27a600", "The gun is loaded!\n") ..core.colorize("#FFFFFF", "Clip size: 7\n") ..core.colorize("#FFFFFF", "Enemy penetration:45%\n") ..core.colorize("#FFFFFF", "Block penetration:15%\n") ..core.colorize("#FFFFFF", "Gun type: Rifle\n") ..core.colorize("#FFFFFF", "Bullet velocity: 80"), range = 0, - groups = {not_in_creative_inventory = 1}, - wield_scale = {x=2.1,y=2.1,z=1.4}, + weapon_zoom = 6, + wield_scale = {x=2.1,y=2.1,z=1.2}, inventory_image = "rangedweapons_m200.png", +RW_gun_capabilities = { + gun_damage = {fleshy=22,knockback=20}, + gun_crit = 33, + gun_critEffc = 3.25, + suitable_ammo = {{"rangedweapons:408cheytac",7}}, + gun_skill = {"rifle_skill",12}, + gun_magazine = "rangedweapons:rifle_mag", + gun_icon = "rangedweapons_m200_icon.png", + gun_unloaded = "rangedweapons:m200_r", + gun_cooling = "rangedweapons:m200_uld", + gun_velocity = 80, + gun_accuracy = 100, + gun_cooldown = 1.5, + gun_reload = 2.5/4, + gun_projectiles = 1, + has_shell = 0, + gun_durability = 900, + gun_smokeSize = 8, + gun_dps = 75, + gun_mob_penetration = 45, + gun_node_penetration = 15, + gun_unload_sound = "rangedweapons_rifle_clip_out", + gun_sound = "rangedweapons_rifle_b", + }, + on_secondary_use = function(itemstack, user, pointed_thing) +rangedweapons_reload_gun(itemstack, user) +return itemstack +end, on_use = function(itemstack, user, pointed_thing) - local pos = user:getpos() - local dir = user:get_look_dir() - local yaw = user:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:m200shot") - if obj then - minetest.sound_play("rangedweapons_rifle_a", {object=obj}) - obj:setvelocity({x=dir.x * 64, y=dir.y * 64, z=dir.z * 64}) - obj:setacceleration({x=dir.x * 0, y=0, z=dir.z * 0}) - obj:setyaw(yaw + math.pi) - minetest.add_particle({ - pos = pos, - velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} , - acceleration = {x=dir.x * -4, y=2, z=dir.z * -4}, - expirationtime = 1.5, - size = 8, - collisiondetection = false, - vertical = false, - texture = "tnt_smoke.png", - glow = 5, - }) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or user - itemstack = "rangedweapons:m200_uld" - end - end - end - return itemstack +rangedweapons_shoot_gun(itemstack, user) +return itemstack end, + }) -local rangedweapons_m200shot = { - physical = false, - timer = 0, - visual = "sprite", - visual_size = {x=0.3, y=0.3}, - textures = {"rangedweapons_invisible.png"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_m200shot.on_step = function(self, dtime, node, pos) - self.timer = self.timer + dtime - local tiem = 0.002 - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.05 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1.6) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:m200shot" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 50 then - local damage = 400 * self.timer - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 40}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = 150 * self.timer - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 20}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - if math.random(1, 100) <= 50 then - local damage = 400 * self.timer - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = 150 * self.timer - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - if timer >= 0.002 + tiem then - minetest.add_particle({ - pos = pos, - velocity = 0, - acceleration = {x=0, y=0, z=0}, - expirationtime = 0.06, - size = 3, - collisiondetection = false, - vertical = false, - texture = "rangedweapons_bullet_fly.png", - glow = 15, - }) - tiem = tiem + 0.002 - end - if self.timer >= 4.0 then - self.object:remove() - end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") then - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - if node.name == "rangedweapons:barrel" or - node.name == "doors:door_glass_a" or - node.name == "doors:door_glass_b" or - node.name == "xpanes:pane" or - node.name == "xpanes:pane_flat" or - node.name == "vessels:drinking_glass" or - node.name == "vessels:glass_bottle" or - node.name == "default:glass" then - minetest.get_node_timer(pos):start(0) - end - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end -end -end - - - -minetest.register_entity("rangedweapons:m200shot", rangedweapons_m200shot ) - diff --git a/m60.lua b/m60.lua index 398dac7..130761f 100644 --- a/m60.lua +++ b/m60.lua @@ -1,176 +1,53 @@ -minetest.register_craft({ - output = 'rangedweapons:m60', - recipe = { - {'default:diamond', 'default:steel_ingot', 'default:mese'}, - {'default:steel_ingot', 'default:steelblock', 'default:steelblock'}, - {'dye:black', 'default:diamond', 'default:steel_ingot'}, - } + +minetest.register_tool("rangedweapons:m60_r", { + stack_max= 1, + wield_scale = {x=2.0,y=2.0,z=1.4}, + description = "", + rw_next_reload = "rangedweapons:m60", + load_sound = "rangedweapons_rifle_clip_in", + range = 0, + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_m60_rld.png", }) - minetest.register_craftitem("rangedweapons:m60", { + minetest.register_tool("rangedweapons:m60", { stack_max= 1, - wield_scale = {x=2.5,y=2.5,z=1.5}, - description = "" ..core.colorize("#35cdff","M60\n") ..core.colorize("#FFFFFF", "Ranged damage: 2-6\n") ..core.colorize("#FFFFFF", "Accuracy: 55%\n") ..core.colorize("#FFFFFF", "Mob knockback: 2\n") ..core.colorize("#FFFFFF", "Critical chance: 8%\n") ..core.colorize("#FFFFFF", "Critical damage: 5-10\n") ..core.colorize("#FFFFFF", "Ammunition: 7.26mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.04\n") ..core.colorize("#FFFFFF", "Gun type: heavy machinegun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 30"), + wield_scale = {x=2.0,y=2.0,z=1.4}, + description = "" ..core.colorize("#35cdff","m60\n") ..core.colorize("#FFFFFF", "Gun damage: 9\n") ..core.colorize("#FFFFFF", "accuracy: 65%\n") ..core.colorize("#FFFFFF", "Gun knockback: 7\n") ..core.colorize("#FFFFFF", "Gun Critical chance: 13%\n")..core.colorize("#FFFFFF", "Critical efficiency: 3.0x\n") ..core.colorize("#FFFFFF", "Reload delay: 1.0\n") ..core.colorize("#FFFFFF", "Clip size: 100\n") ..core.colorize("#FFFFFF", "Ammunition: 7.62mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.09(full-auto)\n") ..core.colorize("#FFFFFF", "Gun type: heavy machinegun\n") ..core.colorize("#FFFFFF", "Block penetration: 12%\n") +..core.colorize("#FFFFFF", "Enemy penetration: 27%\n") ..core.colorize("#FFFFFF", "Bullet velocity: 64"), range = 0, inventory_image = "rangedweapons_m60.png", + RW_gun_capabilities = { + automatic_gun = 1, + gun_damage = {fleshy=9,knockback=7}, + gun_crit = 13, + gun_critEffc = 3.0, + suitable_ammo = {{"rangedweapons:762mm",100}}, + gun_skill = {"heavy_skill",60}, + gun_icon = "rangedweapons_m60_icon.png", + gun_unloaded = "rangedweapons:m60_r", + gun_velocity = 64, + gun_accuracy = 65, + gun_cooldown = 0.09, + gun_reload = 1.0, + gun_projectiles = 1, + has_shell = 1, + gun_gravity = 0, + gun_durability = 2750, + gun_smokeSize = 5, + gun_mob_penetration = 27, + gun_node_penetration = 12, + gun_unload_sound = "rangedweapons_rifle_clip_out", + gun_sound = "rangedweapons_machinegun", + }, + on_secondary_use = function(itemstack, user, pointed_thing) +rangedweapons_reload_gun(itemstack, user) +return itemstack +end, + + inventory_image = "rangedweapons_m60.png", }) -local timer = 0 -minetest.register_globalstep(function(dtime, player) - timer = timer + dtime; - if timer >= 0.04 then - for _, player in pairs(minetest.get_connected_players()) do - local inv = player:get_inventory() - local controls = player:get_player_control() - if controls.LMB then - timer = 0 - local wielded_item = player:get_wielded_item():get_name() - if wielded_item == "rangedweapons:m60" then - if not inv:contains_item("main", "rangedweapons:726mm") then -minetest.sound_play("rangedweapons_empty", {object=player}) - else - if wielded_item == "rangedweapons:m60" then - inv:remove_item("main", "rangedweapons:726mm") - local pos = player:getpos() - local dir = player:get_look_dir() - local yaw = player:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:m60shot") - if obj then - minetest.sound_play("rangedweapons_machinegun", {object=obj}) - obj:setvelocity({x=dir.x * 30, y=dir.y * 30, z=dir.z * 30}) - obj:setacceleration({x=dir.x * math.random(-4.5,4.5), y=math.random(-4.5,4.5), z=dir.z * math.random(-4.5,4.5)}) - obj:setyaw(yaw + math.pi) - pos.y = pos.y + 0 - local obj = minetest.add_entity(pos, "rangedweapons:empty_shell") - minetest.sound_play("", {object=obj}) - obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) - obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) - obj:setyaw(yaw + math.pi) - minetest.add_particle({ - pos = pos, - velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} , - acceleration = {x=dir.x * -4, y=2, z=dir.z * -4}, - expirationtime = 0.25, - size = 4, - collisiondetection = false, - vertical = false, - texture = "tnt_smoke.png", - glow = 5, - }) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or player - end - end - end - end -end - -end - end - end - end - end) - -local rangedweapons_m60shot = { - physical = false, - timer = 0, - visual = "sprite", - visual_size = {x=0.3, y=0.3}, - textures = {"rangedweapons_invisible.png"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_m60shot.on_step = function(self, dtime, node, pos) - self.timer = self.timer + dtime - local tiem = 0.002 - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.11 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:m60shot" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 8 then - local damage = math.random(5,10) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=4}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(2,6) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 2}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - if math.random(1, 100) <= 8 then - local damage = math.random(5,10) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(2,6) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - if timer >= 0.002 + tiem then - minetest.add_particle({ - pos = pos, - velocity = 0, - acceleration = {x=0, y=0, z=0}, - expirationtime = 0.06, - size = 3, - collisiondetection = false, - vertical = false, - texture = "rangedweapons_bullet_fly.png", - glow = 15, - }) - tiem = tiem + 0.002 - end - if self.timer >= 4.0 then - self.object:remove() - end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") then - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - if node.name == "rangedweapons:barrel" or - node.name == "doors:door_glass_a" or - node.name == "doors:door_glass_b" or - node.name == "xpanes:pane" or - node.name == "xpanes:pane_flat" or - node.name == "vessels:drinking_glass" or - node.name == "vessels:glass_bottle" or - node.name == "default:glass" then - minetest.get_node_timer(pos):start(0) - end - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end -end -end -minetest.register_entity("rangedweapons:m60shot", rangedweapons_m60shot ) \ No newline at end of file diff --git a/m79.lua b/m79.lua index 67e873c..3b1ca07 100644 --- a/m79.lua +++ b/m79.lua @@ -1,117 +1,48 @@ -minetest.register_craft({ - output = 'rangedweapons:m79_uld', - recipe = { - {'default:steel_ingot', '', 'default:mese_crystal'}, - {'default:steelblock', 'default:steelblock', 'default:tree'}, - {'default:tree', 'default:tree', 'default:tree'}, - } -}) -minetest.register_craftitem("rangedweapons:m79_uld", { +minetest.register_tool("rangedweapons:m79_r", { stack_max= 1, wield_scale = {x=2.0,y=2.0,z=2.5}, range = 0, - description = "" ..core.colorize("#35cdff","M79\n") ..core.colorize("#FFFFFF", "Explosion radius: 2\n") ..core.colorize("#FFFFFF", "Bullet gravitational pull: 5\n") ..core.colorize("#FFFFFF", "Ammunition: 40mm grenades\n") ..core.colorize("#FFFFFF", "Reload time: 1.25\n") ..core.colorize("#be0d00", "The gun is NOT loaded! (Right-click to load)\n")..core.colorize("#FFFFFF", "Gun type:Grenade launcher\n") ..core.colorize("#FFFFFF", "Bullet velocity: 15"), - inventory_image = "rangedweapons_m79.png", - on_use = function(user) - minetest.sound_play("rangedweapons_empty", {user}) - end, -}) - - local timer = 0 -minetest.register_globalstep(function(dtime, player) - timer = timer + dtime; - if timer >= 0.001 then - for _, player in pairs(minetest.get_connected_players()) do - local inv = player:get_inventory() - local controls = player:get_player_control() - if player:get_wielded_item():get_name() == "rangedweapons:m79_uld" - and inv:contains_item("main", "rangedweapons:40mm")then - if controls.RMB then - inv:remove_item("main", "rangedweapons:40mm") - player:set_wielded_item("rangedweapons:m79_rld") - local pos = player:getpos() - local dir = player:get_look_dir() - local yaw = player:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:empty_shell_grenade") - minetest.sound_play("", {object=obj}) - obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) - obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) - obj:setyaw(yaw + math.pi) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or player - end - end - timer = 0 - minetest.sound_play("rangedweapons_reload_a", {player}) - -end - end - - if timer >= 1.25 and - player:get_wielded_item():get_name() == "rangedweapons:m79_rld" then - player:set_wielded_item("rangedweapons:m79") - timer = 0 - minetest.sound_play("rangedweapons_reload_b", {player}) - - - - end - end - end - end) - - -minetest.register_craftitem("rangedweapons:m79_rld", { - stack_max= 1, - range = 0, - wield_scale = {x=2.0,y=2.0,z=2.5}, - description = "**RELOADING M79**", + description = "", groups = {not_in_creative_inventory = 1}, + rw_next_reload = "rangedweapons:m79", + load_sound = "rangedweapons_reload_a", inventory_image = "rangedweapons_m79_rld.png", }) - minetest.register_tool("rangedweapons:m79", { - description = "" ..core.colorize("#35cdff","M79\n") ..core.colorize("#FFFFFF", "Explosion radius: 2\n") ..core.colorize("#FFFFFF", "Bullet gravitational pull: 5\n") ..core.colorize("#FFFFFF", "Ammunition: 40mm grenades\n") ..core.colorize("#FFFFFF", "Reload time: 1.25\n") ..core.colorize("#27a600", "The gun is loaded!\n")..core.colorize("#FFFFFF", "Gun type:Grenade launcher\n") ..core.colorize("#FFFFFF", "Bullet velocity: 15"), + description = "" ..core.colorize("#35cdff","m79\n") ..core.colorize("#FFFFFF", "Direct contact damage: 10\n")..core.colorize("#FFFFFF", "Accuracy: 92%\n") ..core.colorize("#FFFFFF", "direct contact knockback: 25\n") ..core.colorize("#FFFFFF", "Gun crit chance: 8%\n")..core.colorize("#FFFFFF", "Critical efficiency: 3x\n") ..core.colorize("#FFFFFF", "Reload delay: 0.9\n")..core.colorize("#FFFFFF", "Clip size: 1\n") ..core.colorize("#FFFFFF", "Gun gravity: 5\n")..core.colorize("#FFFFFF", "Ammunition: 40mm grenades\n")..core.colorize("#FFFFFF", "Gun type: grenade launcher\n") ..core.colorize("#FFFFFF", "Bullet velocity: 20"), range = 0, - groups = {not_in_creative_inventory = 1}, wield_scale = {x=2.0,y=2.0,z=2.5}, inventory_image = "rangedweapons_m79.png", + RW_gun_capabilities = { + gun_damage = {fleshy=10,knockback=25}, + gun_crit = 8, + gun_critEffc = 3.0, + suitable_ammo = {{"rangedweapons:40mm",1}}, + gun_skill = {"",1}, + gun_magazine = "rangedweapons:shell_grenadedrop", + gun_icon = "rangedweapons_m79_icon.png", + gun_unloaded = "rangedweapons:m79_r", + gun_cooling = "rangedweapons:m79", + gun_velocity = 20, + gun_accuracy = 92, + gun_cooldown = 0.0, + gun_reload = 0.9, + gun_projectiles = 1, + gun_smokeSize = 15, + gun_durability = 100, + gun_gravity = 5, + gun_unload_sound = "rangedweapons_handgun_mag_out", + gun_sound = "rangedweapons_rocket", + }, + on_secondary_use = function(itemstack, user, pointed_thing) +rangedweapons_reload_gun(itemstack, user) +return itemstack +end, on_use = function(itemstack, user, pointed_thing) - local pos = user:getpos() - local dir = user:get_look_dir() - local yaw = user:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:he_grenade") - if obj then - minetest.sound_play("rangedweapons_rocket", {object=obj}) - obj:setvelocity({x=dir.x * 15, y=dir.y * 15, z=dir.z * 15}) - obj:setacceleration({x=dir.x * -1, y=-5, z=dir.z * -1}) - obj:setyaw(yaw + math.pi) - minetest.add_particle({ - pos = pos, - velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} , - acceleration = {x=dir.x * -4, y=2, z=dir.z * -4}, - expirationtime = 1.5, - size = 10, - collisiondetection = false, - vertical = false, - texture = "tnt_smoke.png", - glow = 5, - }) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or user - itemstack = "rangedweapons:m79_uld" - end - end - end - return itemstack +rangedweapons_shoot_gun(itemstack, user) +return itemstack end, }) diff --git a/makarov.lua b/makarov.lua index bffc696..52495f3 100644 --- a/makarov.lua +++ b/makarov.lua @@ -1,192 +1,82 @@ - local timer = 0 -minetest.register_globalstep(function(dtime, player) - timer = timer + dtime; - if timer >= 0.5 then - for _, player in pairs(minetest.get_connected_players()) do - if player:get_wielded_item():get_name() == "rangedweapons:makarov_rld" then - player:set_wielded_item("rangedweapons:makarov") - minetest.sound_play("", {player}) - - end - - end - end - end) - - -minetest.register_craftitem("rangedweapons:makarov_rld", { +minetest.register_tool("rangedweapons:makarov_rld", { stack_max= 1, wield_scale = {x=0.9,y=0.9,z=1.0}, - description = "***RELOADING MAKAROV PISTOL***", + description = "", + range = 0, + loaded_gun = "rangedweapons:makarov", + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_makarov_rld.png", +}) +minetest.register_tool("rangedweapons:makarov_r", { + stack_max= 1, + wield_scale = {x=0.9,y=0.9,z=1.0}, + description = "", + range = 0, + rw_next_reload = "rangedweapons:makarov_rr", + load_sound = "rangedweapons_handgun_mag_in", + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_makarov.png", +}) + +minetest.register_tool("rangedweapons:makarov_rr", { + stack_max= 1, + wield_scale = {x=0.9,y=0.9,z=1.0}, + description = "", + range = 0, + rw_next_reload = "rangedweapons:makarov_rrr", + load_sound = "rangedweapons_reload_a", + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_makarov.png", +}) + +minetest.register_tool("rangedweapons:makarov_rrr", { + stack_max= 1, + wield_scale = {x=0.9,y=0.9,z=1.0}, + description = "", range = 0, groups = {not_in_creative_inventory = 1}, + rw_next_reload = "rangedweapons:makarov", + load_sound = "rangedweapons_reload_b", inventory_image = "rangedweapons_makarov_rld.png", }) minetest.register_tool("rangedweapons:makarov", { - description = "" ..core.colorize("#35cdff","Makarov pistol\n") ..core.colorize("#FFFFFF", "Ranged damage: 4-6\n")..core.colorize("#FFFFFF", "Accuracy: 90%\n") ..core.colorize("#FFFFFF", "Mob knockback: 3\n") ..core.colorize("#FFFFFF", "Critical chance: 12%\n") ..core.colorize("#FFFFFF", "Critical damage: 8-12\n") ..core.colorize("#FFFFFF", "Ammunition: 9mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.5\n") ..core.colorize("#FFFFFF", "Gun type: Handgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 20"), + description = "" ..core.colorize("#35cdff","Makarov pistol\n") ..core.colorize("#FFFFFF", "Gun damage: 3\n")..core.colorize("#FFFFFF", "Accuracy: 90%\n") ..core.colorize("#FFFFFF", "gun knockback: 3\n") ..core.colorize("#FFFFFF", "Gun crit chance: 10%\n")..core.colorize("#FFFFFF", "Critical efficiency: 2x\n") ..core.colorize("#FFFFFF", "Reload delay: 1.1\n")..core.colorize("#FFFFFF", "Clip size: 8\n") ..core.colorize("#FFFFFF", "Ammunition: 9x19mm Parabellum\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.5\n") ..core.colorize("#FFFFFF", "Gun type: Handgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 20"), range = 0, wield_scale = {x=0.9,y=0.9,z=1.0}, inventory_image = "rangedweapons_makarov.png", + RW_gun_capabilities = { + gun_damage = {fleshy=3,knockback=3}, + gun_crit = 10, + gun_critEffc = 2.0, + suitable_ammo = {{"rangedweapons:9mm",8}}, + gun_skill = {"handgun_skill",40}, + gun_magazine = "rangedweapons:handgun_mag_black", + gun_icon = "rangedweapons_makarov_icon.png", + gun_unloaded = "rangedweapons:makarov_r", + gun_cooling = "rangedweapons:makarov_rld", + gun_velocity = 20, + gun_accuracy = 90, + gun_cooldown = 0.5, + gun_reload = 1.1/4, + gun_projectiles = 1, + gun_smokeSize = 5, + has_shell = 1, + gun_durability = 450, + 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) - timer = 0 - local inv = user:get_inventory() - if not inv:contains_item("main", "rangedweapons:9mm 1") then - minetest.sound_play("rangedweapons_empty", {object=user}) - return itemstack - end - if not minetest.setting_getbool("creative_mode") then - inv:remove_item("main", "rangedweapons:9mm") - end - local pos = user:getpos() - local dir = user:get_look_dir() - local yaw = user:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:makarovshot") - if obj then - minetest.sound_play("rangedweapons_makarov", {object=obj}) - obj:setvelocity({x=dir.x * 20, y=dir.y * 20, z=dir.z * 20}) - obj:setacceleration({x=dir.x * math.random(-1.0,1.0), y=math.random(-1.0,1.0), z=dir.z * math.random(-1.0,1.0)}) - obj:setyaw(yaw + math.pi) - pos.y = pos.y + 0 - local obj = minetest.add_entity(pos, "rangedweapons:empty_shell") - minetest.sound_play("", {object=obj}) - obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) - obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) - obj:setyaw(yaw + math.pi) - minetest.add_particle({ - pos = pos, - velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} , - acceleration = {x=dir.x * -4, y=2, z=dir.z * -4}, - expirationtime = 0.75, - size = 5, - collisiondetection = false, - vertical = false, - texture = "tnt_smoke.png", - glow = 5, - }) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or user - itemstack = "rangedweapons:makarov_rld" - end - end - end - return itemstack +rangedweapons_shoot_gun(itemstack, user) +return itemstack end, }) -minetest.register_craft({ - output = 'rangedweapons:makarov', - recipe = { - {'', 'default:steel_ingot', 'default:steel_ingot'}, - {'', 'default:mese_crystal_fragment', 'default:tree'}, - {'', '', 'dye:black'}, - } -}) - -local rangedweapons_makarovshot = { - physical = false, - timer = 0, - visual = "sprite", - visual_size = {x=0.3, y=0.3}, - textures = {"rangedweapons_invisible.png"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_makarovshot.on_step = function(self, dtime, node, pos) - self.timer = self.timer + dtime - local tiem = 0.002 - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.165 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:makarovshot" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 12 then - local damage = math.random(8,12) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 6}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(4,6) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 3}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - if math.random(1, 100) <= 12 then - local damage = math.random(8,12) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(4,6) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - if timer >= 0.002 + tiem then - minetest.add_particle({ - pos = pos, - velocity = 0, - acceleration = {x=0, y=0, z=0}, - expirationtime = 0.06, - size = 3, - collisiondetection = false, - vertical = false, - texture = "rangedweapons_bullet_fly.png", - glow = 15, - }) - tiem = tiem + 0.002 - end - if self.timer >= 4.0 then - self.object:remove() - end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") then - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - if node.name == "rangedweapons:barrel" or - node.name == "doors:door_glass_a" or - node.name == "doors:door_glass_b" or - node.name == "xpanes:pane" or - node.name == "xpanes:pane_flat" or - node.name == "vessels:drinking_glass" or - node.name == "vessels:glass_bottle" or - node.name == "default:glass" then - minetest.get_node_timer(pos):start(0) - end - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end -end -end - - - -minetest.register_entity("rangedweapons:makarovshot", rangedweapons_makarovshot ) diff --git a/milkor.lua b/milkor.lua index 0c306fe..2afc9ce 100644 --- a/milkor.lua +++ b/milkor.lua @@ -1,121 +1,47 @@ -minetest.register_craft({ - output = "rangedweapons:milkor_uld", - recipe = { - {"default:diamond", "default:steel_ingot", "default:diamond"}, - {"default:steel_ingot", "default:steelblock", "default:steel_ingot"}, - {"default:steel_ingot", "default:steelblock", "default:steel_ingot"}, - } -}) -minetest.register_craftitem("rangedweapons:milkor_uld", { - stack_max= 1, - wield_scale = {x=1.75,y=1.75,z=2.0}, - range = 0, - description = "" ..core.colorize("#35cdff","Milkor\n") ..core.colorize("#FFFFFF", "Explosion radius: 2\n") ..core.colorize("#FFFFFF", "Bullet gravitational pull: 5\n") ..core.colorize("#FFFFFF", "Ammunition: 40mm grenades\n") ..core.colorize("#FFFFFF", "Reload time: 0.70\n") ..core.colorize("#be0d00", "The gun is NOT loaded! (Right-click to load)\n")..core.colorize("#FFFFFF", "Gun type:Grenade launcher\n") ..core.colorize("#FFFFFF", "Bullet velocity: 15"), - inventory_image = "rangedweapons_milkor.png", - on_use = function(user) - minetest.sound_play("rangedweapons_empty", {user}) - end, -}) - - local timer = 0 -minetest.register_globalstep(function(dtime, player) - timer = timer + dtime; - if timer >= 0.001 then - for _, player in pairs(minetest.get_connected_players()) do - local inv = player:get_inventory() - local controls = player:get_player_control() - if player:get_wielded_item():get_name() == "rangedweapons:milkor_uld" - and inv:contains_item("main", "rangedweapons:40mm")then - if controls.RMB then - inv:remove_item("main", "rangedweapons:40mm") - player:set_wielded_item("rangedweapons:milkor_rld") - local pos = player:getpos() - local dir = player:get_look_dir() - local yaw = player:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:empty_shell_grenade") - minetest.sound_play("", {object=obj}) - obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) - obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) - obj:setyaw(yaw + math.pi) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or player - end - end - timer = 0 - minetest.sound_play("rangedweapons_reload_a", {player}) - -end - end - - if timer >= 0.70 and - player:get_wielded_item():get_name() == "rangedweapons:milkor_rld" then - player:set_wielded_item("rangedweapons:milkor") - - timer = 0 - minetest.sound_play("rangedweapons_reload_b", {player}) - - - - end - end - end - end) - - -minetest.register_craftitem("rangedweapons:milkor_rld", { +minetest.register_tool("rangedweapons:milkor_rld", { stack_max= 1, range = 0, wield_scale = {x=1.75,y=1.75,z=2.0}, - description = "**RELOADING MILKOR MGL**", + description = "", + loaded_gun = "rangedweapons:milkor", groups = {not_in_creative_inventory = 1}, inventory_image = "rangedweapons_milkor_rld.png", }) minetest.register_tool("rangedweapons:milkor", { - description = "" ..core.colorize("#35cdff","Milkor MGL\n") ..core.colorize("#FFFFFF", "Explosion radius: 2\n") ..core.colorize("#FFFFFF", "Bullet gravitational pull: 4\n") ..core.colorize("#FFFFFF", "Ammunition: 40mm grenades\n") ..core.colorize("#FFFFFF", "Reload time: 0.70\n") ..core.colorize("#27a600", "The gun is loaded!\n")..core.colorize("#FFFFFF", "Gun type:Grenade launcher\n") ..core.colorize("#FFFFFF", "Bullet velocity: 20"), + description = "" ..core.colorize("#35cdff","Milkor MGL\n") ..core.colorize("#FFFFFF", "Direct contact damage: 15\n")..core.colorize("#FFFFFF", "Accuracy: 96%\n") ..core.colorize("#FFFFFF", "Direct contact knockback: 25\n") ..core.colorize("#FFFFFF", "Critical chance: 9%\n") ..core.colorize("#FFFFFF", "Critical efficiency: 3.0x\n") ..core.colorize("#FFFFFF", "Ammunition: 40mm grenades\n") ..core.colorize("#FFFFFF", "Reload time: 0.75\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.35\n") ..core.colorize("#FFFFFF", "Gun gravity: 1\n") ..core.colorize("#FFFFFF", "Clip Size: 6\n")..core.colorize("#FFFFFF", "Gun type: grenade launcher\n") ..core.colorize("#FFFFFF", "Bullet velocity: 30"), range = 0, - groups = {not_in_creative_inventory = 1}, wield_scale = {x=1.75,y=1.75,z=2.0}, inventory_image = "rangedweapons_milkor.png", +RW_gun_capabilities = { + gun_damage = {fleshy=15,knockback=25}, + gun_crit = 9, + gun_critEffc = 3.0, + suitable_ammo = {{"rangedweapons:40mm",6}}, + gun_skill = {"",1}, + gun_magazine = "rangedweapons:shell_grenadedrop", + gun_icon = "rangedweapons_milkor_icon.png", + gun_unloaded = "rangedweapons:milkor_rld", + gun_cooling = "rangedweapons:milkor", + gun_velocity = 30, + gun_accuracy = 96, + gun_cooldown = 0.35, + gun_reload = 0.75, + gun_projectiles = 1, + gun_durability = 225, + gun_smokeSize = 15, + gun_gravity = 1, + gun_unload_sound = "rangedweapons_shell_insert", + gun_sound = "rangedweapons_rocket", + }, on_use = function(itemstack, user, pointed_thing) - local pos = user:getpos() - local dir = user:get_look_dir() - local yaw = user:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:he_grenade") - if obj then - minetest.sound_play("rangedweapons_rocket", {object=obj}) - obj:setvelocity({x=dir.x * 20, y=dir.y * 20, z=dir.z * 20}) - obj:setacceleration({x=dir.x * -1, y=-4, z=dir.z * -1}) - obj:setyaw(yaw + math.pi) - minetest.add_particle({ - pos = pos, - velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} , - acceleration = {x=dir.x * -4, y=2, z=dir.z * -4}, - expirationtime = 1.5, - size = 10, - collisiondetection = false, - vertical = false, - texture = "tnt_smoke.png", - glow = 5, - }) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or user - itemstack = "rangedweapons:milkor_uld" - end - end - end - return itemstack +rangedweapons_shoot_gun(itemstack, user) +return itemstack end, + on_secondary_use = function(itemstack, user, pointed_thing) +rangedweapons_single_load_gun(itemstack, user) +return itemstack +end, }) - - - - diff --git a/minigun.lua b/minigun.lua index 6e8b13f..2a442a0 100644 --- a/minigun.lua +++ b/minigun.lua @@ -1,182 +1,52 @@ -if minigun_aswell == true then +if minetest.settings:get_bool("minigun_aswell") then -minetest.register_craft({ - output = 'rangedweapons:minigun', - recipe = { - {'', 'default:steelblock', 'default:mese'}, - {'default:diamondblock', 'default:diamondblock', 'default:diamondblock'}, - {'default:steelblock', 'default:steelblock', 'default:steelblock'}, - } +minetest.register_tool("rangedweapons:minigun_r", { + stack_max= 1, + wield_scale = {x=3.0,y=3.0,z=3.0}, + description = "", + rw_next_reload = "rangedweapons:minigun", + load_sound = "rangedweapons_rifle_clip_in", + range = 0, + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_minigun_rld.png", }) - minetest.register_craftitem("rangedweapons:minigun", { + minetest.register_tool("rangedweapons:minigun", { stack_max= 1, - wield_scale = {x=4.0,y=4.0,z=4.0}, - description = "" ..core.colorize("#35cdff","MINI-GUN\n") ..core.colorize("#FFFFFF", "Ranged damage: 5-13\n") ..core.colorize("#FFFFFF", "Accuracy: 50%\n") ..core.colorize("#FFFFFF", "Mob knockback: 3\n") ..core.colorize("#FFFFFF", "Critical chance: 12%\n") ..core.colorize("#FFFFFF", "Critical damage: 12-25\n") ..core.colorize("#FFFFFF", "Ammunition: 7.26mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.025\n") ..core.colorize("#FFFFFF", "Gun type: heavy machinegun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 30"), + wield_scale = {x=3.0,y=3.0,z=3.0}, + description = "" ..core.colorize("#35cdff","minigun\n") ..core.colorize("#FFFFFF", "Gun damage: 10\n") ..core.colorize("#FFFFFF", "accuracy: 50%\n") ..core.colorize("#FFFFFF", "Gun knockback: 8\n") ..core.colorize("#FFFFFF", "Gun Critical chance: 14%\n")..core.colorize("#FFFFFF", "Critical efficiency: 3.0x\n") ..core.colorize("#FFFFFF", "Reload delay: 2.0\n") ..core.colorize("#FFFFFF", "Clip size: 100\n") ..core.colorize("#FFFFFF", "Ammunition: 7.62mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.04(full-auto)\n") ..core.colorize("#FFFFFF", "Gun type: heavy machinegun\n") ..core.colorize("#FFFFFF", "Block penetration: 15%\n") +..core.colorize("#FFFFFF", "Enemy penetration: 33%\n") ..core.colorize("#FFFFFF", "Bullet velocity: 70"), range = 0, inventory_image = "rangedweapons_minigun.png", + RW_gun_capabilities = { + automatic_gun = 1, + gun_damage = {fleshy=10,knockback=8}, + gun_crit = 14, + gun_critEffc = 3.0, + suitable_ammo = {{"rangedweapons:762mm",200}}, + gun_skill = {"heavy_skill",100}, + gun_icon = "rangedweapons_minigun_icon.png", + gun_unloaded = "rangedweapons:minigun_r", + gun_velocity = 70, + gun_accuracy = 50, + gun_cooldown = 0.04, + gun_reload = 2.0, + gun_projectiles = 1, + has_shell = 1, + gun_gravity = 0, + gun_durability = 4000, + gun_smokeSize = 5, + gun_mob_penetration = 33, + gun_node_penetration = 15, + gun_unload_sound = "rangedweapons_rifle_clip_out", + gun_sound = "rangedweapons_machinegun", + }, + on_secondary_use = function(itemstack, user, pointed_thing) +rangedweapons_reload_gun(itemstack, user) +return itemstack +end, + + inventory_image = "rangedweapons_minigun.png", }) -local timer = 0 -minetest.register_globalstep(function(dtime, player) - timer = timer + dtime; - if timer >= 0.025 then - for _, player in pairs(minetest.get_connected_players()) do - local inv = player:get_inventory() - local controls = player:get_player_control() - if controls.LMB then - timer = 0 - local wielded_item = player:get_wielded_item():get_name() - if wielded_item == "rangedweapons:minigun" then - if not inv:contains_item("main", "rangedweapons:726mm") then -minetest.sound_play("rangedweapons_empty", {object=player}) - else - if wielded_item == "rangedweapons:minigun" then - inv:remove_item("main", "rangedweapons:726mm") - local pos = player:getpos() - local dir = player:get_look_dir() - local yaw = player:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:minigunshot") - if obj then - minetest.sound_play("rangedweapons_machinegun", {object=obj}) - obj:setvelocity({x=dir.x * 30, y=dir.y * 30, z=dir.z * 30}) - obj:setacceleration({x=dir.x * math.random(-5.0,5.0), y=math.random(-5.0,5.0), z=dir.z * math.random(-5.0,5.0)}) - obj:setyaw(yaw + math.pi) - pos.y = pos.y + 0 - local obj = minetest.add_entity(pos, "rangedweapons:empty_shell") - minetest.sound_play("", {object=obj}) - obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) - obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) - obj:setyaw(yaw + math.pi) - minetest.add_particle({ - pos = pos, - velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} , - acceleration = {x=dir.x * -4, y=2, z=dir.z * -4}, - expirationtime = 0.15, - size = 3, - collisiondetection = false, - vertical = false, - texture = "tnt_smoke.png", - glow = 5, - }) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or player - end - end - end - end -end - -end - end - end - end - end) - -local rangedweapons_minigunshot = { - physical = false, - timer = 0, - visual = "sprite", - visual_size = {x=0.3, y=0.3}, - textures = {"rangedweapons_invisible.png"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_minigunshot.on_step = function(self, dtime, node, pos) - self.timer = self.timer + dtime - local tiem = 0.002 - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.11 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:minigunshot" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 12 then - local damage = math.random(12,25) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=6}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(5,13) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 3}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - if math.random(1, 100) <= 12 then - local damage = math.random(12,25) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(5,13) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - if self.timer >= 0.002 + tiem then - minetest.add_particle({ - pos = pos, - velocity = 0, - acceleration = {x=0, y=0, z=0}, - expirationtime = 0.04, - size = 3, - collisiondetection = false, - vertical = false, - texture = "rangedweapons_bullet_fly.png", - glow = 15, - }) - tiem = tiem + 0.002 - end - if self.timer >= 4.0 then - self.object:remove() - end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") then - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - if node.name == "rangedweapons:barrel" or - node.name == "doors:door_glass_a" or - node.name == "doors:door_glass_b" or - node.name == "doors:door_wood_a" or - node.name == "doors:door_wood_b" or - node.name == "xpanes:pane" or - node.name == "xpanes:pane_flat" or - node.name == "vessels:drinking_glass" or - node.name == "vessels:glass_bottle" or - node.name == "default:glass" then - minetest.get_node_timer(pos):start(0) - end - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end -end -end - - - -minetest.register_entity("rangedweapons:minigunshot", rangedweapons_minigunshot ) - end \ No newline at end of file diff --git a/misc.lua b/misc.lua index 559e0c8..247adb6 100644 --- a/misc.lua +++ b/misc.lua @@ -29,72 +29,22 @@ minetest.register_craftitem("rangedweapons:gunsteel_ingot", { description = "" ..core.colorize("#35cdff","GunSteel ingot\n")..core.colorize("#FFFFFF", "A strong, but light alloy, used in guncraft"), inventory_image = "rangedweapons_gunsteel_ingot.png", }) -minetest.register_craft({ - output = "rangedweapons:gunsteel_ingot", - recipe = { - {"default:steel_ingot", "default:tin_ingot", "default:coal_lump"}, - } -}) + minetest.register_craftitem("rangedweapons:ultra_gunsteel_ingot", { description = "" ..core.colorize("#35cdff","Ultra-GunSteel ingot\n")..core.colorize("#FFFFFF", "A even stronger alloy, for even stronger guns."), inventory_image = "rangedweapons_ultra_gunsteel_ingot.png", }) -minetest.register_craft({ - output = "rangedweapons:ultra_gunsteel_ingot", - recipe = { - {"", "default:mese_crystal", ""}, - {"default:gold_ingot", "rangedweapons:gunsteel_ingot", "default:gold_ingot"}, - {"", "default:diamond", ""}, - } -}) -minetest.register_craft({ - output = "rangedweapons:plastic_sheet", - recipe = { - {"default:tree", "default:coal_lump", "default:tree"}, - {"default:coal_lump", "default:tree", "default:coal_lump"}, - } -}) minetest.register_craftitem("rangedweapons:gun_power_core", { description = "" ..core.colorize("#35cdff","Gun Power Core\n")..core.colorize("#FFFFFF", "A powerful core, for making the most powerful weapons"), inventory_image = "rangedweapons_gun_power_core.png", }) -minetest.register_craft({ - output = "rangedweapons:gun_power_core", - recipe = { - {"rangedweapons:gunsteel_ingot", "default:goldblock", "rangedweapons:gunsteel_ingot"}, - {"default:diamondblock", "default:mese", "default:diamondblock"}, - {"rangedweapons:gunsteel_ingot", "default:goldblock", "rangedweapons:gunsteel_ingot"}, - } -}) + minetest.register_craftitem("rangedweapons:power_particle", { description = "" ..core.colorize("#35cdff","Power Particle\n")..core.colorize("#FFFFFF", "A power unit, that strangelly can be carryed arround with no vessel, used by power guns"), stack_max = 10000, inventory_image = "rangedweapons_power_particle.png", }) -local rangedweapons_smoke = { - physical = false, - timer = 0, - visual = "sprite", - visual_size = {x=0.5, y=0.5}, - textures = {"tnt_smoke.png"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_smoke.on_step = function(self, dtime, pos) - self.timer = self.timer + dtime - local pos = self.object:getpos() - local node = minetest.get_node(pos) - if self.lastpos.x ~= nil then - if self.timer > 0.30 then - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end - -minetest.register_entity("rangedweapons:smoke", rangedweapons_smoke ) - diff --git a/mod.conf b/mod.conf new file mode 100644 index 0000000..6a11f89 --- /dev/null +++ b/mod.conf @@ -0,0 +1,4 @@ +name = rangedweapons +description = A mod that adds guns and throwable weapons +depends = default, tnt +optional_depends = doors, xpanes, vessels, moreores, 3d_armor diff --git a/mp40.lua b/mp40.lua index 0692aeb..03ec887 100644 --- a/mp40.lua +++ b/mp40.lua @@ -1,177 +1,63 @@ -minetest.register_craft({ - output = 'rangedweapons:mp40', - recipe = { - {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, - {'default:steel_ingot', 'default:mese_crystal', 'default:steel_ingot'}, - {'default:steel_ingot', 'default:mese_crystal_fragment', ''}, - } -}) - minetest.register_craftitem("rangedweapons:mp40", { - stack_max= 1, + minetest.register_tool("rangedweapons:mp40_r", { wield_scale = {x=1.75,y=1.75,z=1.5}, - description = "" ..core.colorize("#35cdff","MP-40\n") ..core.colorize("#FFFFFF", "Ranged damage: 3-6\n") ..core.colorize("#FFFFFF", "accuracy: 70%\n") ..core.colorize("#FFFFFF", "Mob knockback: 0\n") ..core.colorize("#FFFFFF", "Critical chance: 8%\n") ..core.colorize("#FFFFFF", "Critical damage: 5-11\n") ..core.colorize("#FFFFFF", "Ammunition: 9mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.14\n") ..core.colorize("#FFFFFF", "Gun type: sub-machinegun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 25"), + description = "", + range = 0, + rw_next_reload = "rangedweapons:mp40_rr", + load_sound = "rangedweapons_handgun_mag_in", + inventory_image = "rangedweapons_mp40_rld.png", + groups = {not_in_creative_inventory = 1}, +}) + minetest.register_tool("rangedweapons:mp40_rr", { + wield_scale = {x=1.75,y=1.75,z=1.5}, + description = "", + range = 0, + rw_next_reload = "rangedweapons:mp40_rrr", + load_sound = "rangedweapons_reload_a", + inventory_image = "rangedweapons_mp40.png", + groups = {not_in_creative_inventory = 1}, +}) + minetest.register_tool("rangedweapons:mp40_rrr", { + wield_scale = {x=1.75,y=1.75,z=1.5}, + description = "", range = 0, inventory_image = "rangedweapons_mp40.png", + rw_next_reload = "rangedweapons:mp40", + load_sound = "rangedweapons_reload_b", + groups = {not_in_creative_inventory = 1}, }) -local timer = 0 -minetest.register_globalstep(function(dtime, player) - timer = timer + dtime; - if timer >= 0.14 then - for _, player in pairs(minetest.get_connected_players()) do - local inv = player:get_inventory() - local controls = player:get_player_control() - if controls.LMB then - timer = 0 - local wielded_item = player:get_wielded_item():get_name() - if wielded_item == "rangedweapons:mp40" then - if not inv:contains_item("main", "rangedweapons:9mm") then -minetest.sound_play("rangedweapons_empty", {object=player}) - else - if wielded_item == "rangedweapons:mp40" then - inv:remove_item("main", "rangedweapons:9mm") - local pos = player:getpos() - local dir = player:get_look_dir() - local yaw = player:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:mp40shot") - if obj then - minetest.sound_play("rangedweapons_beretta", {object=obj}) - obj:setvelocity({x=dir.x * 25, y=dir.y * 25, z=dir.z * 25}) - obj:setacceleration({x=dir.x * math.random(-3.0,3.0), y=math.random(-3.0,3.0), z=dir.z * math.random(-3.0,3.0)}) - obj:setyaw(yaw + math.pi) - pos.y = pos.y + 0 - local obj = minetest.add_entity(pos, "rangedweapons:empty_shell") - minetest.sound_play("", {object=obj}) - obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) - obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) - obj:setyaw(yaw + math.pi) - minetest.add_particle({ - pos = pos, - velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} , - acceleration = {x=dir.x * -4, y=2, z=dir.z * -4}, - expirationtime = 0.30, - size = 4, - collisiondetection = false, - vertical = false, - texture = "tnt_smoke.png", - glow = 5, - }) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or player + minetest.register_tool("rangedweapons:mp40", { + stack_max= 1, + wield_scale = {x=1.75,y=1.75,z=1.5}, + description = "" ..core.colorize("#35cdff","MP-40\n") ..core.colorize("#FFFFFF", "Ranged damage: 2\n") ..core.colorize("#FFFFFF", "accuracy: 75%\n") ..core.colorize("#FFFFFF", "Gun knockback: 1\n") ..core.colorize("#FFFFFF", "Critical chance: 8%\n") ..core.colorize("#FFFFFF", "Critical efficiency: 2x\n") ..core.colorize("#FFFFFF", "Ammunition: 9x19mm parabellum\n") ..core.colorize("#FFFFFF", "Clip size: 32\n") ..core.colorize("#FFFFFF", "Reload delay: 1.3\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.14\n") ..core.colorize("#FFFFFF", "Gun type: sub-machinegun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 25"), + range = 0, + inventory_image = "rangedweapons_mp40.png", + RW_gun_capabilities = { + automatic_gun = 1, + gun_damage = {fleshy=2,knockback=1}, + gun_crit = 8, + gun_critEffc = 2.0, + suitable_ammo = {{"rangedweapons:9mm",32}}, + gun_skill = {"smg_skill",75}, + gun_magazine = "rangedweapons:machinepistol_mag", + gun_icon = "rangedweapons_mp40_icon.png", + gun_unloaded = "rangedweapons:mp40_r", + gun_velocity = 25, + gun_accuracy = 75, + gun_cooldown = 0.14, + gun_reload = 1.3/4, + gun_projectiles = 1, + has_shell = 1, + gun_gravity = 0, + gun_durability = 1500, + gun_smokeSize = 4, + gun_unload_sound = "rangedweapons_handgun_mag_out", + gun_sound = "rangedweapons_machine_pistol", + }, + on_secondary_use = function(itemstack, user, pointed_thing) +rangedweapons_reload_gun(itemstack, user) +return itemstack +end, - end - end - end - end -end - -end - end - end - end - end) - -local rangedweapons_mp40shot = { - physical = false, - timer = 0, - visual = "sprite", - visual_size = {x=0.3, y=0.3}, - textures = {"rangedweapons_invisible.png"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_mp40shot.on_step = function(self, dtime, node, pos) - self.timer = self.timer + dtime - local tiem = 0.002 - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.16 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:mp40shot" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 8 then - local damage = math.random(5,11) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=0}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(3,6) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 0}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - if math.random(1, 100) <= 8 then - local damage = math.random(5,11) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(3,6) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - if timer >= 0.002 + tiem then - minetest.add_particle({ - pos = pos, - velocity = 0, - acceleration = {x=0, y=0, z=0}, - expirationtime = 0.06, - size = 3, - collisiondetection = false, - vertical = false, - texture = "rangedweapons_bullet_fly.png", - glow = 15, - }) - tiem = tiem + 0.002 - end - if self.timer >= 4.0 then - self.object:remove() - end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") then - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - if node.name == "rangedweapons:barrel" or - node.name == "doors:door_glass_a" or - node.name == "doors:door_glass_b" or - node.name == "xpanes:pane" or - node.name == "xpanes:pane_flat" or - node.name == "vessels:drinking_glass" or - node.name == "vessels:glass_bottle" or - node.name == "default:glass" then - minetest.get_node_timer(pos):start(0) - end - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end -end -end - - - -minetest.register_entity("rangedweapons:mp40shot", rangedweapons_mp40shot ) \ No newline at end of file +}) diff --git a/mp5.lua b/mp5.lua index d0916b9..e931595 100644 --- a/mp5.lua +++ b/mp5.lua @@ -1,178 +1,68 @@ -minetest.register_craft({ - output = 'rangedweapons:mp5', - recipe = { - {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, - {'default:steel_ingot', 'default:diamond', 'default:steel_ingot'}, - {'default:steel_ingot', 'rangedweapons:plastic_sheet', 'dye:black'}, - } -}) - minetest.register_craftitem("rangedweapons:mp5", { +minetest.register_tool("rangedweapons:mp5_r", { stack_max= 1, wield_scale = {x=1.75,y=1.75,z=1.20}, - description = "" ..core.colorize("#35cdff","MP5\n") ..core.colorize("#FFFFFF", "Ranged damage: 3-7\n") ..core.colorize("#FFFFFF", "Accuracy: 74%\n") ..core.colorize("#FFFFFF", "Mob knockback: 1\n") ..core.colorize("#FFFFFF", "Critical chance: 7%\n") ..core.colorize("#FFFFFF", "Critical damage: 7-13\n") ..core.colorize("#FFFFFF", "Ammunition: 10mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.10\n") ..core.colorize("#FFFFFF", "Gun type: Sub-machinegun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 25"), + description = "", + rw_next_reload = "rangedweapons:mp5_rr", + load_sound = "rangedweapons_handgun_mag_in", range = 0, + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_mp5_rld.png", +}) + +minetest.register_tool("rangedweapons:mp5_rr", { + stack_max= 1, + wield_scale = {x=1.75,y=1.75,z=1.20}, + description = "", + rw_next_reload = "rangedweapons:mp5_rrr", + load_sound = "rangedweapons_reload_a", + range = 0, + groups = {not_in_creative_inventory = 1}, inventory_image = "rangedweapons_mp5.png", }) -local timer = 0 -minetest.register_globalstep(function(dtime, player) - timer = timer + dtime; - if timer >= 0.10 then - for _, player in pairs(minetest.get_connected_players()) do - local inv = player:get_inventory() - local controls = player:get_player_control() - if controls.LMB then - timer = 0 - local wielded_item = player:get_wielded_item():get_name() - if wielded_item == "rangedweapons:mp5" then - if not inv:contains_item("main", "rangedweapons:10mm") then -minetest.sound_play("rangedweapons_empty", {object=player}) - else - if wielded_item == "rangedweapons:mp5" then - inv:remove_item("main", "rangedweapons:10mm") - local pos = player:getpos() - local dir = player:get_look_dir() - local yaw = player:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:mp5shot") - if obj then - minetest.sound_play("rangedweapons_machine_pistol", {object=obj}) - obj:setvelocity({x=dir.x * 25, y=dir.y * 25, z=dir.z * 25}) - obj:setacceleration({x=dir.x * math.random(-2.6,2.6), y=math.random(-2.6,2.6), z=dir.z * math.random(-2.6,2.6)}) - obj:setyaw(yaw + math.pi) - pos.y = pos.y + 0 - local obj = minetest.add_entity(pos, "rangedweapons:empty_shell_white") - minetest.sound_play("", {object=obj}) - obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) - obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) - obj:setyaw(yaw + math.pi) - minetest.add_particle({ - pos = pos, - velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} , - acceleration = {x=dir.x * -4, y=2, z=dir.z * -4}, - expirationtime = 0.35, - size = 4, - collisiondetection = false, - vertical = false, - texture = "tnt_smoke.png", - glow = 5, - }) - obj:setyaw(yaw + math.pi) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or player - - end - end - end - end -end - -end - end - end - end - end) - -local rangedweapons_mp5shot = { - physical = false, - timer = 0, - visual = "sprite", - visual_size = {x=0.3, y=0.3}, - textures = {"rangedweapons_invisible.png"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_mp5shot.on_step = function(self, dtime, node, pos) - self.timer = self.timer + dtime - local tiem = 0.002 - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.12 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:mp5shot" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 7 then - local damage = math.random(7,13) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=2}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(3,7) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 1}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - if math.random(1, 100) <= 7 then - local damage = math.random(7,13) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(3,7) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - if timer >= 0.002 + tiem then - minetest.add_particle({ - pos = pos, - velocity = 0, - acceleration = {x=0, y=0, z=0}, - expirationtime = 0.06, - size = 3, - collisiondetection = false, - vertical = false, - texture = "rangedweapons_bullet_fly.png", - glow = 15, - }) - tiem = tiem + 0.002 - end - if self.timer >= 4.0 then - self.object:remove() - end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") then - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - if node.name == "rangedweapons:barrel" or - node.name == "doors:door_glass_a" or - node.name == "doors:door_glass_b" or - node.name == "xpanes:pane" or - node.name == "xpanes:pane_flat" or - node.name == "vessels:drinking_glass" or - node.name == "vessels:glass_bottle" or - node.name == "default:glass" then - minetest.get_node_timer(pos):start(0) - end - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end -end -end +minetest.register_tool("rangedweapons:mp5_rrr", { + stack_max= 1, + wield_scale = {x=1.75,y=1.75,z=1.20}, + description = "", + rw_next_reload = "rangedweapons:mp5", + load_sound = "rangedweapons_reload_b", + range = 0, + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_mp5.png", +}) - -minetest.register_entity("rangedweapons:mp5shot", rangedweapons_mp5shot ) \ No newline at end of file + minetest.register_tool("rangedweapons:mp5", { + stack_max= 1, + wield_scale = {x=1.75,y=1.75,z=1.20}, + description = "" ..core.colorize("#35cdff","MP5\n") ..core.colorize("#FFFFFF", "Gun damage: 3\n") ..core.colorize("#FFFFFF", "accuracy: 74%\n") ..core.colorize("#FFFFFF", "Gun knockback: 1\n") ..core.colorize("#FFFFFF", "Gun Critical chance: 7%\n")..core.colorize("#FFFFFF", "Critical efficiency: 2.0x\n") ..core.colorize("#FFFFFF", "Reload delay: 1.0\n") ..core.colorize("#FFFFFF", "Clip size: 40/40\n") ..core.colorize("#FFFFFF", "Ammunition: 9x19mm parabellum/10mm auto\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.075(full-auto)\n") ..core.colorize("#FFFFFF", "Gun type: sub-machinegun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 25"), + range = 0, + inventory_image = "rangedweapons_mp5.png", + RW_gun_capabilities = { + automatic_gun = 1, + gun_damage = {fleshy=3,knockback=1}, + gun_crit = 7, + gun_critEffc = 2.0, + suitable_ammo = {{"rangedweapons:9mm",40},{"rangedweapons:10mm",40}}, + gun_skill = {"smg_skill",75}, + gun_magazine = "rangedweapons:machinepistol_mag", + gun_icon = "rangedweapons_mp5_icon.png", + gun_unloaded = "rangedweapons:mp5_r", + gun_velocity = 25, + gun_accuracy = 74, + gun_cooldown = 0.075, + gun_reload = 1.0/4, + gun_projectiles = 1, + has_shell = 1, + gun_gravity = 0, + gun_durability = 1600, + gun_smokeSize = 4, + gun_unload_sound = "rangedweapons_handgun_mag_out", + gun_sound = "rangedweapons_machine_pistol", + }, + on_secondary_use = function(itemstack, user, pointed_thing) +rangedweapons_reload_gun(itemstack, user) +return itemstack +end, +}) diff --git a/python.lua b/python.lua index 4aed646..f4938ad 100644 --- a/python.lua +++ b/python.lua @@ -1,228 +1,52 @@ -minetest.register_craft({ - output = 'rangedweapons:python_uld', - recipe = { -{'rangedweapons:gunsteel_ingot', 'default:diamond', 'default:mese_crystal_fragment'}, -{'rangedweapons:gunsteel_ingot', 'default:diamond', 'rangedweapons:gunsteel_ingot'}, - {'', 'default:mese_crystal', 'default:tree'}, - } -}) - -minetest.register_craft({ - output = 'rangedweapons:python_uld', - recipe = { -{'moreores:silver_ingot', 'default:diamond', 'default:mese_crystal_fragment'}, -{'moreores:silver_ingot', 'default:diamond', 'moreores:silver_ingot'}, - {'', 'default:mese_crystal', 'default:tree'}, - } -}) - -minetest.register_craftitem("rangedweapons:python_uld", { - stack_max= 1, - wield_scale = {x=1.25,y=1.25,z=1.1}, - range = 0, - description = "" ..core.colorize("#35cdff","Colt Python \n") ..core.colorize("#FFFFFF", "Ranged damage: 10-15\n") ..core.colorize("#FFFFFF", "Accuracy: 95%\n") ..core.colorize("#FFFFFF", "Mob knockback: 8\n") ..core.colorize("#FFFFFF", "Critical chance: 32%\n") ..core.colorize("#FFFFFF", "Critical damage: 20-35\n") ..core.colorize("#FFFFFF", "Ammunition: .357 Magnum rounds\n") ..core.colorize("#FFFFFF", "Reload time: 0.3\n") ..core.colorize("#be0d00", "The gun is NOT loaded! (Right-click to load)\n")..core.colorize("#FFFFFF", "Gun type: Revolver\n") ..core.colorize("#FFFFFF", "Bullet velocity: 50"), - inventory_image = "rangedweapons_python.png", - on_use = function(user) - minetest.sound_play("rangedweapons_empty", {user}) - end, -}) - - local timer = 0 -minetest.register_globalstep(function(dtime, player) - timer = timer + dtime; - if timer >= 0.001 then - for _, player in pairs(minetest.get_connected_players()) do - local inv = player:get_inventory() - local controls = player:get_player_control() - if player:get_wielded_item():get_name() == "rangedweapons:python_uld" - and inv:contains_item("main", "rangedweapons:357")then - if controls.RMB then - inv:remove_item("main", "rangedweapons:357") - player:set_wielded_item("rangedweapons:python_rld") - local pos = player:getpos() - local dir = player:get_look_dir() - local yaw = player:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:empty_shell") - minetest.sound_play("", {object=obj}) - obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) - obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) - obj:setyaw(yaw + math.pi) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or player - end - end - timer = 0 - minetest.sound_play("rangedweapons_reload_b", {player}) - -end - end - - if timer >= 0.3 and - player:get_wielded_item():get_name() == "rangedweapons:python_rld" then - player:set_wielded_item("rangedweapons:python") - timer = 0 - minetest.sound_play("rangedweapons_reload_a", {player}) - end - end - end - end) - -minetest.register_craftitem("rangedweapons:python_rld", { +minetest.register_tool("rangedweapons:python_rld", { stack_max= 1, range = 0, wield_scale = {x=1.25,y=1.25,z=1.1}, - description = "**RELOADING COLT PYTHON**", + description = "", + loaded_gun = "rangedweapons:python", groups = {not_in_creative_inventory = 1}, inventory_image = "rangedweapons_python_rld.png", }) minetest.register_tool("rangedweapons:python", { - description = "" ..core.colorize("#35cdff","Colt Python \n") ..core.colorize("#FFFFFF", "Ranged damage: 10-15\n")..core.colorize("#FFFFFF", "Accuracy: 95%\n") ..core.colorize("#FFFFFF", "Mob knockback: 8\n") ..core.colorize("#FFFFFF", "Critical chance: 32%\n") ..core.colorize("#FFFFFF", "Critical damage: 20-35\n") ..core.colorize("#FFFFFF", "Ammunition: .357 Magnum rounds\n") ..core.colorize("#FFFFFF", "Reload time: 0.3\n") ..core.colorize("#27a600", "The gun is loaded!\n")..core.colorize("#FFFFFF", "Gun type: Revolver\n") ..core.colorize("#FFFFFF", "Bullet velocity: 50"), + description = "" ..core.colorize("#35cdff","Colt Python \n") ..core.colorize("#FFFFFF", "Ranged damage: 10\n")..core.colorize("#FFFFFF", "Accuracy: 95%\n") ..core.colorize("#FFFFFF", "Gun knockback: 6\n") ..core.colorize("#FFFFFF", "Critical chance: 19%\n") ..core.colorize("#FFFFFF", "Critical efficiency: 2.5x\n") ..core.colorize("#FFFFFF", "Ammunition: .357 Magnum rounds\n") ..core.colorize("#FFFFFF", "Reload time: 0.25\n") ..core.colorize("#FFFFFF", "Clip Size: 6\n")..core.colorize("#FFFFFF", "Gun type: Revolver\n")..core.colorize("#FFFFFF", "Block penetration: 5%\n") +..core.colorize("#FFFFFF", "penetration: 15%\n") ..core.colorize("#FFFFFF", "Bullet velocity: 55"), range = 0, - groups = {not_in_creative_inventory = 1}, wield_scale = {x=1.25,y=1.25,z=1.1}, inventory_image = "rangedweapons_python.png", +RW_gun_capabilities = { + gun_damage = {fleshy=10,knockback=6}, + gun_crit = 19, + gun_critEffc = 2.2, + suitable_ammo = {{"rangedweapons:357",6}}, + gun_skill = {"revolver_skill",40}, + gun_icon = "rangedweapons_python_icon.png", + gun_unloaded = "rangedweapons:python_rld", + gun_cooling = "rangedweapons:python", + gun_velocity = 55, + gun_accuracy = 95, + gun_cooldown = 0.2, + gun_reload = 0.4, + gun_projectiles = 1, + gun_durability = 1000, + gun_smokeSize = 7, + gun_mob_penetration = 15, + gun_node_penetration = 5, + gun_unload_sound = "rangedweapons_shell_insert", + gun_sound = "rangedweapons_deagle", + }, on_use = function(itemstack, user, pointed_thing) - local pos = user:getpos() - local dir = user:get_look_dir() - local yaw = user:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:pythonshot") - if obj then - minetest.sound_play("rangedweapons_revolver", {object=obj}) - obj:setvelocity({x=dir.x * 50, y=dir.y * 50, z=dir.z * 50}) - obj:setacceleration({x=dir.x * math.random(-0.5,0.5), y=math.random(-0.5,0.5), z=dir.z * math.random(-0.5,0.5)}) - obj:setyaw(yaw + math.pi) - minetest.add_particle({ - pos = pos, - velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} , - acceleration = {x=dir.x * -4, y=2, z=dir.z * -4}, - expirationtime = 1.5, - size = 8, - collisiondetection = false, - vertical = false, - texture = "tnt_smoke.png", - glow = 5, - }) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or user - itemstack = "rangedweapons:python_uld" - end - end - end - return itemstack +rangedweapons_shoot_gun(itemstack, user) +return itemstack end, + on_secondary_use = function(itemstack, user, pointed_thing) +rangedweapons_single_load_gun(itemstack, user) +return itemstack +end, }) -local rangedweapons_pythonshot = { - physical = false, - timer = 0, - visual = "sprite", - visual_size = {x=0.3, y=0.3}, - textures = {"rangedweapons_invisible.png"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_pythonshot.on_step = function(self, dtime, node, pos) - self.timer = self.timer + dtime - local tiem = 0.002 - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.065 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1.5) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:pythonshot" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 32 then - local damage = math.random(20,35) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 16}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(10,15) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 8}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - if math.random(1, 100) <= 32 then - local damage = math.random(20,35) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(10,15) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - if timer >= 0.002 + tiem then - minetest.add_particle({ - pos = pos, - velocity = 0, - acceleration = {x=0, y=0, z=0}, - expirationtime = 0.06, - size = 3, - collisiondetection = false, - vertical = false, - texture = "rangedweapons_bullet_fly.png", - glow = 15, - }) - tiem = tiem + 0.002 - end - if self.timer >= 4.0 then - self.object:remove() - end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") then - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - if node.name == "rangedweapons:barrel" or - node.name == "doors:door_glass_a" or - node.name == "doors:door_glass_b" or - node.name == "xpanes:pane" or - node.name == "xpanes:pane_flat" or - node.name == "vessels:drinking_glass" or - node.name == "vessels:glass_bottle" or - node.name == "default:glass" then - minetest.get_node_timer(pos):start(0) - end - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end -end -end - - - -minetest.register_entity("rangedweapons:pythonshot", rangedweapons_pythonshot ) - - diff --git a/remington.lua b/remington.lua index a95a0bb..d05e200 100644 --- a/remington.lua +++ b/remington.lua @@ -1,237 +1,64 @@ -minetest.register_craft({ - output = "rangedweapons:remington_uld", - recipe = { - {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, - {"default:tree", "default:mese_crystal", "default:tree"}, - } -}) - -minetest.register_craftitem("rangedweapons:remington_uld", { - stack_max= 1, - wield_scale = {x=1.9,y=1.9,z=1.1}, - range = 0, - description = "" ..core.colorize("#35cdff","Remington 870\n") ..core.colorize("#FFFFFF", "Ranged damage: 2-7 X 9\n") ..core.colorize("#FFFFFF", "Accuracy: 60%\n") ..core.colorize("#FFFFFF", "Mob knockback: 5\n") ..core.colorize("#FFFFFF", "Critical chance: 3%\n") ..core.colorize("#FFFFFF", "Critical damage: 6-15 X 9\n") ..core.colorize("#FFFFFF", "Ammunition: 12 gauge shells\n") ..core.colorize("#FFFFFF", "Reload time: 0.8\n") ..core.colorize("#be0d00", "The gun is NOT loaded! (Right-click to load)\n")..core.colorize("#FFFFFF", "Gun type: shotgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 15"), - inventory_image = "rangedweapons_remington.png", - on_use = function(user) - minetest.sound_play("rangedweapons_empty", {user}) - end, -}) - - local timer = 0 -minetest.register_globalstep(function(dtime, player) - timer = timer + dtime; - if timer >= 0.001 then - for _, player in pairs(minetest.get_connected_players()) do - local inv = player:get_inventory() - local controls = player:get_player_control() - if player:get_wielded_item():get_name() == "rangedweapons:remington_uld" - and inv:contains_item("main", "rangedweapons:shell")then - if controls.RMB then - inv:remove_item("main", "rangedweapons:shell") - player:set_wielded_item("rangedweapons:remington_rld") - local pos = player:getpos() - local dir = player:get_look_dir() - local yaw = player:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:empty_shell_shotgun") - minetest.sound_play("", {object=obj}) - obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) - obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) - obj:setyaw(yaw + math.pi) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or player - end - end - timer = 0 - minetest.sound_play("rangedweapons_shotgun_reload_a", {player}) - -end - end - - if timer >= 0.8 and - player:get_wielded_item():get_name() == "rangedweapons:remington_rld" then - player:set_wielded_item("rangedweapons:remington") - timer = 0 - minetest.sound_play("rangedweapons_shotgun_reload_b", {player}) - - - - end - end - end - end) - - -minetest.register_craftitem("rangedweapons:remington_rld", { +minetest.register_tool("rangedweapons:remington_rld", { stack_max= 1, range = 0, wield_scale = {x=1.9,y=1.9,z=1.1}, - description = "**RELOADING REMINGTON870**", + description = "", + loaded_gun = "rangedweapons:remington", + loaded_sound = "rangedweapons_shotgun_reload_b", groups = {not_in_creative_inventory = 1}, inventory_image = "rangedweapons_remington_rld.png", }) - minetest.register_tool("rangedweapons:remington", { - description = "" ..core.colorize("#35cdff","Remington 870\n") ..core.colorize("#FFFFFF", "Ranged damage: 2-7 X 9\n") ..core.colorize("#FFFFFF", "Accuracy: 60%\n")..core.colorize("#FFFFFF", "Mob knockback: 5\n") ..core.colorize("#FFFFFF", "Critical chance: 3%\n") ..core.colorize("#FFFFFF", "Critical damage: 6-15 X 9\n") ..core.colorize("#FFFFFF", "Ammunition: 12 gauge shells\n") ..core.colorize("#FFFFFF", "Reload time: 0.8\n") ..core.colorize("#27a600", "The gun is loaded!\n")..core.colorize("#FFFFFF", "Gun type: shotgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 15"), + description = "" ..core.colorize("#35cdff","Remington 870\n") ..core.colorize("#FFFFFF", "Ranged damage: 1\n") ..core.colorize("#FFFFFF", "projectiles: 4\n") ..core.colorize("#FFFFFF", "Gun gravity: 5\n") ..core.colorize("#FFFFFF", "Accuracy: 40%\n")..core.colorize("#FFFFFF", "knockback: 5\n") ..core.colorize("#FFFFFF", "Critical chance: 4%\n") ..core.colorize("#FFFFFF", "Critical efficiency: 2.0x\n") ..core.colorize("#FFFFFF", "Ammunition: 12 gauge shells\n") ..core.colorize("#FFFFFF", "Pump delay: 0.8\n")..core.colorize("#FFFFFF", "Clip size: 4\n") ..core.colorize("#27a600", "Gun is ready to fire!\n") ..core.colorize("#fff21c", "Right-click to load in a bullet!\n") ..core.colorize("#FFFFFF", "Gun type: shotgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 18"), range = 0, - groups = {not_in_creative_inventory = 1}, wield_scale = {x=1.9,y=1.9,z=1.1}, inventory_image = "rangedweapons_remington.png", +RW_gun_capabilities = { + gun_damage = {fleshy=1,knockback=5}, + gun_crit = 4, + gun_critEffc = 2.0, + suitable_ammo = {{"rangedweapons:shell",4}}, + gun_skill = {"shotgun_skill",20}, + gun_icon = "rangedweapons_remington_icon.png", + gun_unloaded = "rangedweapons:remington_rld", + gun_cooling = "rangedweapons:remington_uld", + gun_velocity = 18, + gun_accuracy = 40, + gun_cooldown = 0.8, + gun_gravity = 5, + gun_reload = 0.25, + gun_projectiles = 4, + has_shell = 0, + gun_durability = 275, + gun_smokeSize = 14, + gun_door_breaking = 1, + gun_sound = "rangedweapons_shotgun_shot", + gun_unload_sound = "rangedweapons_shell_insert", + }, + on_secondary_use = function(itemstack, user, pointed_thing) +rangedweapons_single_load_gun(itemstack, user, "") +return itemstack +end, on_use = function(itemstack, user, pointed_thing) - local pos = user:getpos() - local dir = user:get_look_dir() - local yaw = user:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:remingtonshot") - if obj then - minetest.sound_play("rangedweapons_shotgun_shot", {object=obj}) - obj:setvelocity({x=dir.x * math.random(13,17), y=dir.y * math.random(13,17), z=dir.z * math.random(13,17)}) - obj:setacceleration({x=dir.x * math.random(-4.0,4.0), y=math.random(-4.0,4.0), z=dir.z * math.random(-4.0,4.0)}) ------------------------------------------------------ - local obj = minetest.add_entity(pos, "rangedweapons:remingtonshot") - obj:setvelocity({x=dir.x * math.random(13,17), y=dir.y * math.random(13,17), z=dir.z * math.random(13,17)}) - obj:setacceleration({x=dir.x * math.random(-4.0,4.0), y=math.random(-4.0,4.0), z=dir.z * math.random(-4.0,4.0)}) ------------------------------------------------------ - local obj = minetest.add_entity(pos, "rangedweapons:remingtonshot") - obj:setvelocity({x=dir.x * math.random(13,17), y=dir.y * math.random(13,17), z=dir.z * math.random(13,17)}) - obj:setacceleration({x=dir.x * math.random(-4.0,4.0), y=math.random(-4.0,4.0), z=dir.z * math.random(-4.0,4.0)}) ------------------------------------------------------ - local obj = minetest.add_entity(pos, "rangedweapons:remingtonshot") - obj:setvelocity({x=dir.x * math.random(13,17), y=dir.y * math.random(13,17), z=dir.z * math.random(13,17)}) - obj:setacceleration({x=dir.x * math.random(-4.0,4.0), y=math.random(-4.0,4.0), z=dir.z * math.random(-4.0,4.0)}) ------------------------------------------------------ - local obj = minetest.add_entity(pos, "rangedweapons:remingtonshot") - obj:setvelocity({x=dir.x * math.random(13,17), y=dir.y * math.random(13,17), z=dir.z * math.random(13,17)}) - obj:setacceleration({x=dir.x * math.random(-4.0,4.0), y=math.random(-4.0,4.0), z=dir.z * math.random(-4.0,4.0)}) ------------------------------------------------------ - local obj = minetest.add_entity(pos, "rangedweapons:remingtonshot") - obj:setvelocity({x=dir.x * math.random(13,17), y=dir.y * math.random(13,17), z=dir.z * math.random(13,17)}) - obj:setacceleration({x=dir.x * math.random(-4.0,4.0), y=math.random(-4.0,4.0), z=dir.z * math.random(-4.0,4.0)}) ------------------------------------------------------ - local obj = minetest.add_entity(pos, "rangedweapons:remingtonshot") - obj:setvelocity({x=dir.x * math.random(13,17), y=dir.y * math.random(13,17), z=dir.z * math.random(13,17)}) - obj:setacceleration({x=dir.x * math.random(-4.0,4.0), y=math.random(-4.0,4.0), z=dir.z * math.random(-4.0,4.0)}) ------------------------------------------------------ - local obj = minetest.add_entity(pos, "rangedweapons:remingtonshot") - obj:setvelocity({x=dir.x * math.random(13,17), y=dir.y * math.random(13,17), z=dir.z * math.random(13,17)}) - obj:setacceleration({x=dir.x * math.random(-4.0,4.0), y=math.random(-4.0,4.0), z=dir.z * math.random(-4.0,4.0)}) ------------------------------------------------------ - local obj = minetest.add_entity(pos, "rangedweapons:remingtonshot") - obj:setvelocity({x=dir.x * math.random(13,17), y=dir.y * math.random(13,17), z=dir.z * math.random(13,17)}) - obj:setacceleration({x=dir.x * math.random(-4.0,4.0), y=math.random(-4.0,4.0), z=dir.z * math.random(-4.0,4.0)}) ------------------------------------------------------ - minetest.add_particle({ - pos = pos, - velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} , - acceleration = {x=dir.x * -4, y=2, z=dir.z * -4}, - expirationtime = 1.25, - size = 10, - collisiondetection = false, - vertical = false, - texture = "tnt_smoke.png", - glow = 5, - }) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or user - itemstack = "rangedweapons:remington_uld" - end - end - end - return itemstack +rangedweapons_shoot_gun(itemstack, user) +return itemstack end, }) -local rangedweapons_remingtonshot = { - physical = false, - timer = 0, - visual = "sprite", - visual_size = {x=0.1, y=0.1}, - textures = {"rangedweapons_buckball.png"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_remingtonshot.on_step = function(self, dtime, node, pos) - self.timer = self.timer + dtime - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.3 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1.25) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:remingtonshot" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 3 then - local damage = math.random(6,15) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 10}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(2,7) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 5}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - if math.random(1, 100) <= 3 then - local damage = math.random(6,15) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(2,7) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - if self.timer >= 4.0 then - self.object:remove() - end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") then - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - if node.name == "rangedweapons:barrel" or - node.name == "doors:door_wood_a" or - node.name == "doors:door_wood_b" or - node.name == "doors:door_glass_a" or - node.name == "doors:door_glass_b" or - node.name == "xpanes:pane" or - node.name == "xpanes:pane_flat" or - node.name == "vessels:drinking_glass" or - node.name == "vessels:glass_bottle" or - node.name == "default:glass" then - minetest.get_node_timer(pos):start(0) - end - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end -end -end - - - -minetest.register_entity("rangedweapons:remingtonshot", rangedweapons_remingtonshot ) - +minetest.register_tool("rangedweapons:remington_uld", { + stack_max= 1, + wield_scale = {x=1.9,y=1.9,z=1.1}, + range = 0, + description = "" ..core.colorize("#35cdff","Remington 870\n") ..core.colorize("#FFFFFF", "Ranged damage: 1\n") ..core.colorize("#FFFFFF", "projectiles: 4\n") ..core.colorize("#FFFFFF", "Gun gravity: 5\n") ..core.colorize("#FFFFFF", "Accuracy: 40%\n")..core.colorize("#FFFFFF", "knockback: 5\n") ..core.colorize("#FFFFFF", "Critical chance: 4%\n") ..core.colorize("#FFFFFF", "Critical efficiency: 2.0x\n") ..core.colorize("#FFFFFF", "Ammunition: 12 gauge shells\n") ..core.colorize("#FFFFFF", "Pump delay: 0.8\n")..core.colorize("#FFFFFF", "Clip size: 4\n") ..core.colorize("#be0d00", "Right-click, to eject the empty shell!\n") ..core.colorize("#fff21c", "Right-click to load in a bullet!\n") ..core.colorize("#FFFFFF", "Gun type: shotgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 20"), + inventory_image = "rangedweapons_remington.png", + groups = {not_in_creative_inventory = 1}, + on_use = function(user) + minetest.sound_play("rangedweapons_empty", {user}) + end, +on_secondary_use = function(itemstack, user, pointed_thing) +eject_shell(itemstack,user,"rangedweapons:remington_rld",0.8,"rangedweapons_shotgun_reload_a","rangedweapons:empty_shell") +return itemstack +end, +}) diff --git a/rpg.lua b/rpg.lua index 332b7ec..f80e4b8 100644 --- a/rpg.lua +++ b/rpg.lua @@ -1,106 +1,74 @@ -minetest.register_craft({ - output = 'rangedweapons:rpg_uld', - recipe = { - {'default:diamond', 'default:steel_ingot', ''}, - {'default:steelblock', 'default:tree', 'default:diamondblock'}, - {'default:diamond', 'default:tree', ''}, - } -}) - -minetest.register_craftitem("rangedweapons:rpg_uld", { - stack_max= 1, - wield_scale = {x=2.5,y=2.5,z=3.75}, +minetest.register_tool("rangedweapons:rpg_rld", { + description = "" ..core.colorize("#35cdff","rpg7\n") ..core.colorize("#FFFFFF", "Direct contact damage: 20\n")..core.colorize("#FFFFFF", "Accuracy: 100%\n") ..core.colorize("#FFFFFF", "direct contact knockback: 35\n") ..core.colorize("#FFFFFF", "Gun crit chance: 10%\n")..core.colorize("#FFFFFF", "Critical efficiency: 3x\n") ..core.colorize("#FFFFFF", "Reload delay: 1.0\n")..core.colorize("#FFFFFF", "Clip size: 1\n") ..core.colorize("#FFFFFF", "Gun gravity: 5\n")..core.colorize("#FFFFFF", "Ammunition: rockets\n")..core.colorize("#FFFFFF", "Gun type: rocket launcher\n") ..core.colorize("#FFFFFF", "Bullet velocity: 25"), range = 0, - description = "" ..core.colorize("#35cdff","rpg\n") ..core.colorize("#FFFFFF", "Explosion radius: 3\n") ..core.colorize("#FFFFFF", "Ammunition: rockets\n") ..core.colorize("#FFFFFF", "Reload time: 1.0\n") ..core.colorize("#be0d00", "The gun is NOT loaded! (Right-click to load)\n")..core.colorize("#FFFFFF", "Gun type:Rocket launcher\n") ..core.colorize("#FFFFFF", "Bullet velocity: 15"), - inventory_image = "rangedweapons_rpg.png", - on_use = function(user) - minetest.sound_play("rangedweapons_empty", {user}) + wield_scale = {x=2.5,y=2.5,z=3.75}, + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_rpg_rld.png", + RW_gun_capabilities = { + gun_damage = {fleshy=20,knockback=35}, + gun_crit = 10, + gun_critEffc = 3.0, + suitable_ammo = {{"rangedweapons:rocket",1}}, + gun_skill = {"",1}, + gun_icon = "rangedweapons_rpg_icon.png", + gun_unloaded = "rangedweapons:rpg_rld", + gun_cooling = "rangedweapons:rpg", + gun_velocity = 25, + gun_accuracy = 100, + gun_cooldown = 1.0, + gun_reload = 1.0, + gun_projectiles = 1, + gun_smokeSize = 15, + gun_durability = 150, + gun_unload_sound = "", + gun_sound = "rangedweapons_rocket", + }, + 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, }) - local timer = 0 -minetest.register_globalstep(function(dtime, player) - timer = timer + dtime; - if timer >= 0.001 then - for _, player in pairs(minetest.get_connected_players()) do - local inv = player:get_inventory() - local controls = player:get_player_control() - if player:get_wielded_item():get_name() == "rangedweapons:rpg_uld" - and inv:contains_item("main", "rangedweapons:rocket")then - if controls.RMB then - inv:remove_item("main", "rangedweapons:rocket") - player:set_wielded_item("rangedweapons:rpg_rld") - end - timer = 0 - minetest.sound_play("", {player}) - - - - end - - if timer >= 1.25 and - player:get_wielded_item():get_name() == "rangedweapons:rpg_rld" then - player:set_wielded_item("rangedweapons:rpg") - timer = 0 - minetest.sound_play("rangedweapons_reload_b", {player}) - - - - end - end - end - end) - - -minetest.register_craftitem("rangedweapons:rpg_rld", { - stack_max= 1, - range = 0, - wield_scale = {x=2.5,y=2.5,z=3.75}, - description = "**RELOADING rpg**", - groups = {not_in_creative_inventory = 1}, - inventory_image = "rangedweapons_rpg.png", -}) - - minetest.register_tool("rangedweapons:rpg", { - description = "" ..core.colorize("#35cdff","rpg\n") ..core.colorize("#FFFFFF", "Explosion radius: 3\n") ..core.colorize("#FFFFFF", "Ammunition: rockets\n") ..core.colorize("#FFFFFF", "Reload time: 1.0\n") ..core.colorize("#27a600", "The gun is loaded!\n")..core.colorize("#FFFFFF", "Gun type:Rocket launcher\n") ..core.colorize("#FFFFFF", "Bullet velocity: 15"), + description = "" ..core.colorize("#35cdff","rpg7\n") ..core.colorize("#FFFFFF", "Direct contact damage: 20\n")..core.colorize("#FFFFFF", "Accuracy: 100%\n") ..core.colorize("#FFFFFF", "direct contact knockback: 35\n") ..core.colorize("#FFFFFF", "Gun crit chance: 10%\n")..core.colorize("#FFFFFF", "Critical efficiency: 3x\n") ..core.colorize("#FFFFFF", "Reload delay: 1.0\n")..core.colorize("#FFFFFF", "Clip size: 1\n") ..core.colorize("#FFFFFF", "Gun gravity: 5\n")..core.colorize("#FFFFFF", "Ammunition: rockets\n")..core.colorize("#FFFFFF", "Gun type: rocket launcher\n") ..core.colorize("#FFFFFF", "Bullet velocity: 25"), range = 0, - groups = {not_in_creative_inventory = 1}, wield_scale = {x=2.5,y=2.5,z=3.75}, - inventory_image = "rangedweapons_rpg_rld.png", + inventory_image = "rangedweapons_rpg.png", + RW_gun_capabilities = { + gun_damage = {fleshy=20,knockback=35}, + gun_crit = 10, + gun_critEffc = 3.0, + suitable_ammo = {{"rangedweapons:rocket",1}}, + gun_skill = {"",1}, + gun_icon = "rangedweapons_rpg_icon.png", + gun_unloaded = "rangedweapons:rpg_rld", + gun_cooling = "rangedweapons:rpg", + gun_velocity = 25, + gun_accuracy = 100, + gun_cooldown = 1.0, + gun_reload = 1.0, + gun_projectiles = 1, + gun_smokeSize = 15, + gun_durability = 150, + gun_unload_sound = "", + gun_sound = "rangedweapons_rocket", + gun_unload_sound = "rangedweapons_shell_insert", + }, + on_secondary_use = function(itemstack, user, pointed_thing) +rangedweapons_reload_gun(itemstack, user) +return itemstack +end, on_use = function(itemstack, user, pointed_thing) - local pos = user:getpos() - local dir = user:get_look_dir() - local yaw = user:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:rocket") - if obj then - minetest.sound_play("rangedweapons_rocket", {object=obj}) - obj:setvelocity({x=dir.x * 15, y=dir.y * 15, z=dir.z * 15}) - obj:setyaw(yaw + math.pi) - minetest.add_particle({ - pos = pos, - velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} , - acceleration = {x=dir.x * -4, y=2, z=dir.z * -4}, - expirationtime = 1.5, - size = 10, - collisiondetection = false, - vertical = false, - texture = "tnt_smoke.png", - glow = 5, - }) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or user - itemstack = "rangedweapons:rpg_uld" - end - end - end - return itemstack +rangedweapons_shoot_gun(itemstack, user) +return itemstack end, }) + diff --git a/rpk.lua b/rpk.lua index badb276..45b03c3 100644 --- a/rpk.lua +++ b/rpk.lua @@ -1,176 +1,76 @@ -minetest.register_craft({ - output = 'rangedweapons:rpk', - recipe = { - {'default:diamond', 'default:mese', ''}, - {'default:steel_ingot', 'default:steelblock', 'default:tree'}, - {'', 'default:diamond', 'default:steel_ingot'}, - } + +minetest.register_tool("rangedweapons:rpk_r", { + stack_max= 1, + wield_scale = {x=1.75,y=1.75,z=1.3}, + description = "", + rw_next_reload = "rangedweapons:rpk_rr", + load_sound = "rangedweapons_rifle_clip_in", + range = 0, + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_rpk_rld.png", }) - minetest.register_craftitem("rangedweapons:rpk", { +minetest.register_tool("rangedweapons:rpk_rr", { stack_max= 1, - wield_scale = {x=2.5,y=2.5,z=1.5}, - description = "" ..core.colorize("#35cdff","RPK\n") ..core.colorize("#FFFFFF", "Ranged damage: 2-5\n") ..core.colorize("#FFFFFF", "Accuracy: 55%\n") ..core.colorize("#FFFFFF", "Mob knockback: 2\n") ..core.colorize("#FFFFFF", "Critical chance: 8%\n") ..core.colorize("#FFFFFF", "Critical damage: 4-9\n") ..core.colorize("#FFFFFF", "Ammunition: 7.26mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.05\n") ..core.colorize("#FFFFFF", "Gun type: heavy machinegun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 30"), + wield_scale = {x=1.75,y=1.75,z=1.3}, + description = "", + rw_next_reload = "rangedweapons:rpk_rrr", + load_sound = "rangedweapons_rifle_reload_a", range = 0, + groups = {not_in_creative_inventory = 1}, inventory_image = "rangedweapons_rpk.png", }) -local timer = 0 -minetest.register_globalstep(function(dtime, player) - timer = timer + dtime; - if timer >= 0.05 then - for _, player in pairs(minetest.get_connected_players()) do - local inv = player:get_inventory() - local controls = player:get_player_control() - if controls.LMB then - timer = 0 - local wielded_item = player:get_wielded_item():get_name() - if wielded_item == "rangedweapons:rpk" then - if not inv:contains_item("main", "rangedweapons:726mm") then -minetest.sound_play("rangedweapons_empty", {object=player}) - else - if wielded_item == "rangedweapons:rpk" then - inv:remove_item("main", "rangedweapons:726mm") - local pos = player:getpos() - local dir = player:get_look_dir() - local yaw = player:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:rpkshot") - if obj then - minetest.sound_play("rangedweapons_machinegun", {object=obj}) - obj:setvelocity({x=dir.x * 30, y=dir.y * 30, z=dir.z * 30}) - obj:setacceleration({x=dir.x * math.random(-4.5,4.5), y=math.random(-4.5,4.5), z=dir.z * math.random(-4.5,4.5)}) - obj:setyaw(yaw + math.pi) - pos.y = pos.y + 0 - local obj = minetest.add_entity(pos, "rangedweapons:empty_shell") - minetest.sound_play("", {object=obj}) - obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) - obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) - obj:setyaw(yaw + math.pi) - minetest.add_particle({ - pos = pos, - velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} , - acceleration = {x=dir.x * -4, y=2, z=dir.z * -4}, - expirationtime = 0.25, - size = 4, - collisiondetection = false, - vertical = false, - texture = "tnt_smoke.png", - glow = 5, - }) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or player - end - end - end - end -end +minetest.register_tool("rangedweapons:rpk_rrr", { + stack_max= 1, + wield_scale = {x=1.75,y=1.75,z=1.3}, + description = "", + rw_next_reload = "rangedweapons:rpk", + load_sound = "rangedweapons_rifle_reload_b", + range = 0, + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_rpk.png", +}) -end - end - end - end - end) -local rangedweapons_rpkshot = { - physical = false, - timer = 0, - visual = "sprite", - visual_size = {x=0.3, y=0.3}, - textures = {"rangedweapons_invisible.png"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_rpkshot.on_step = function(self, dtime, node, pos) - self.timer = self.timer + dtime - local tiem = 0.002 - local pos = self.object:getpos() - local node = minetest.get_node(pos) + minetest.register_tool("rangedweapons:rpk", { + stack_max= 1, + wield_scale = {x=1.75,y=1.75,z=1.3}, + description = "" ..core.colorize("#35cdff","rpk\n") ..core.colorize("#FFFFFF", "Gun damage: 7\n") ..core.colorize("#FFFFFF", "accuracy: 60%\n") ..core.colorize("#FFFFFF", "Gun knockback: 6\n") ..core.colorize("#FFFFFF", "Gun Critical chance: 12%\n")..core.colorize("#FFFFFF", "Critical efficiency: 3.0x\n") ..core.colorize("#FFFFFF", "Reload delay: 2.0\n") ..core.colorize("#FFFFFF", "Clip size: 75\n") ..core.colorize("#FFFFFF", "Ammunition: 7.62mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.10(full-auto)\n") ..core.colorize("#FFFFFF", "Gun type: heavy machinegun\n") ..core.colorize("#FFFFFF", "Block penetration: 10%\n") +..core.colorize("#FFFFFF", "Enemy penetration: 25%\n") ..core.colorize("#FFFFFF", "Bullet velocity: 55"), + range = 0, + inventory_image = "rangedweapons_rpk.png", + RW_gun_capabilities = { + automatic_gun = 1, + gun_damage = {fleshy=7,knockback=6}, + gun_crit = 12, + gun_critEffc = 3.0, + suitable_ammo = {{"rangedweapons:762mm",75}}, + gun_skill = {"heavy_skill",55}, + gun_magazine = "rangedweapons:drum_mag", + gun_icon = "rangedweapons_rpk_icon.png", + gun_unloaded = "rangedweapons:rpk_r", + gun_velocity = 55, + gun_accuracy = 70, + gun_cooldown = 0.1, + gun_reload = 2.0/4, + gun_projectiles = 1, + has_shell = 1, + gun_gravity = 0, + gun_durability = 2250, + gun_smokeSize = 5, + gun_mob_penetration = 25, + gun_node_penetration = 10, + gun_unload_sound = "rangedweapons_rifle_clip_out", + gun_sound = "rangedweapons_ak", + }, + on_secondary_use = function(itemstack, user, pointed_thing) +rangedweapons_reload_gun(itemstack, user) +return itemstack +end, - if self.timer > 0.11 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:rpkshot" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 8 then - local damage = math.random(4,9) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=4}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(2,5) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 2}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - if math.random(1, 100) <= 8 then - local damage = math.random(4,9) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(2,5) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - if timer >= 0.002 + tiem then - minetest.add_particle({ - pos = pos, - velocity = 0, - acceleration = {x=0, y=0, z=0}, - expirationtime = 0.06, - size = 3, - collisiondetection = false, - vertical = false, - texture = "rangedweapons_bullet_fly.png", - glow = 15, - }) - tiem = tiem + 0.002 - end - if self.timer >= 4.0 then - self.object:remove() - end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") then - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - if node.name == "rangedweapons:barrel" or - node.name == "doors:door_glass_a" or - node.name == "doors:door_glass_b" or - node.name == "xpanes:pane" or - node.name == "xpanes:pane_flat" or - node.name == "vessels:drinking_glass" or - node.name == "vessels:glass_bottle" or - node.name == "default:glass" then - minetest.get_node_timer(pos):start(0) - end - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end -end -end + inventory_image = "rangedweapons_rpk.png", +}) -minetest.register_entity("rangedweapons:rpkshot", rangedweapons_rpkshot ) \ No newline at end of file diff --git a/scar.lua b/scar.lua index 550b06b..13d0003 100644 --- a/scar.lua +++ b/scar.lua @@ -1,177 +1,75 @@ -minetest.register_craft({ - output = 'rangedweapons:scar', - recipe = { - {'default:diamond', 'default:mese', 'default:mese'}, - {'default:steel_ingot', 'default:steel_ingot', 'default:mese'}, - {'rangedweapons:plastic_sheet', '', 'default:mese_crystal'}, - } -}) - minetest.register_craftitem("rangedweapons:scar", { +minetest.register_tool("rangedweapons:scar_r", { stack_max= 1, wield_scale = {x=1.7,y=1.7,z=1.25}, - description = "" ..core.colorize("#35cdff","FN SCAR 16\n") ..core.colorize("#FFFFFF", "Ranged damage: 9-24\n") ..core.colorize("#FFFFFF", "Accuracy: 85%\n") ..core.colorize("#FFFFFF", "Mob knockback: 6\n")..core.colorize("#FFFFFF", "Critical chance: 14%\n") ..core.colorize("#FFFFFF", "Critical damage: 20-42\n") ..core.colorize("#FFFFFF", "Ammunition: 7.26mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.15\n") ..core.colorize("#FFFFFF", "Gun type: Assault rifle\n") ..core.colorize("#FFFFFF", "Bullet velocity: 45"), + description = "", + rw_next_reload = "rangedweapons:scar_rr", + load_sound = "rangedweapons_rifle_clip_in", range = 0, + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_scar_rld.png", +}) + +minetest.register_tool("rangedweapons:scar_rr", { + stack_max= 1, + wield_scale = {x=1.7,y=1.7,z=1.25}, + description = "", + rw_next_reload = "rangedweapons:scar_rrr", + load_sound = "rangedweapons_rifle_reload_a", + range = 0, + groups = {not_in_creative_inventory = 1}, inventory_image = "rangedweapons_scar.png", }) -local timer = 0 -minetest.register_globalstep(function(dtime, player) - timer = timer + dtime; - if timer >= 0.15 then - for _, player in pairs(minetest.get_connected_players()) do - local inv = player:get_inventory() - local controls = player:get_player_control() - if controls.LMB then - timer = 0 - local wielded_item = player:get_wielded_item():get_name() - if wielded_item == "rangedweapons:scar" then - if not inv:contains_item("main", "rangedweapons:726mm") then -minetest.sound_play("rangedweapons_empty", {object=player}) - else - if wielded_item == "rangedweapons:scar" then - inv:remove_item("main", "rangedweapons:726mm") - local pos = player:getpos() - local dir = player:get_look_dir() - local yaw = player:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:scarshot") - if obj then - minetest.sound_play("rangedweapons_ak", {object=obj}) - obj:setvelocity({x=dir.x * 45, y=dir.y * 45, z=dir.z * 45}) - obj:setacceleration({x=dir.x * math.random(-1.5,1.5), y=math.random(-1.5,1.5), z=dir.z * math.random(-1.5,1.5)}) - obj:setyaw(yaw + math.pi) - pos.y = pos.y + 0 - local obj = minetest.add_entity(pos, "rangedweapons:empty_shell") - minetest.sound_play("", {object=obj}) - obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) - obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) - obj:setyaw(yaw + math.pi) - minetest.add_particle({ - pos = pos, - velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} , - acceleration = {x=dir.x * -4, y=2, z=dir.z * -4}, - expirationtime = 0.5, - size = 4, - collisiondetection = false, - vertical = false, - texture = "tnt_smoke.png", - glow = 5, - }) +minetest.register_tool("rangedweapons:scar_rrr", { + stack_max= 1, + wield_scale = {x=1.7,y=1.7,z=1.25}, + description = "", + rw_next_reload = "rangedweapons:scar", + load_sound = "rangedweapons_rifle_reload_b", + range = 0, + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_scar.png", +}) + + minetest.register_tool("rangedweapons:scar", { + stack_max= 1, + wield_scale = {x=1.7,y=1.7,z=1.25}, + description = "" ..core.colorize("#35cdff","FN SCAR 16\n") ..core.colorize("#FFFFFF", "Ranged damage: 9\n") ..core.colorize("#FFFFFF", "Accuracy: 85%\n") ..core.colorize("#FFFFFF", "Gun knockback: 6\n")..core.colorize("#FFFFFF", "Critical chance: 11%\n") ..core.colorize("#FFFFFF", "Critical efficiency: 2.75x\n") ..core.colorize("#FFFFFF", "Ammunition: 7.62mm rounds/5.56mm rounds\n") ..core.colorize("#FFFFFF", "Reload delay: 1.2\n") ..core.colorize("#FFFFFF", "Clip size: 20/30\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.15\n") ..core.colorize("#FFFFFF", "Block penetration: 7%\n") +..core.colorize("#FFFFFF", "penetration: 20%\n") ..core.colorize("#FFFFFF", "Gun type: Assault rifle\n") ..core.colorize("#FFFFFF", "Bullet velocity: 45"), + range = 0, + inventory_image = "rangedweapons_scar.png", + RW_gun_capabilities = { + automatic_gun = 1, + gun_damage = {fleshy=9,knockback=6}, + gun_crit = 11, + gun_critEffc = 2.75, + suitable_ammo = {{"rangedweapons:762mm",20},{"rangedweapons:556mm",30}}, + gun_skill = {"arifle_skill",50}, + gun_magazine = "rangedweapons:assaultrifle_mag", + gun_icon = "rangedweapons_scar_icon.png", + gun_unloaded = "rangedweapons:scar_r", + gun_velocity = 45, + gun_accuracy = 85, + gun_cooldown = 0.15, + gun_reload = 1.2/4, + gun_projectiles = 1, + has_shell = 1, + gun_gravity = 0, + gun_durability = 1600, + gun_smokeSize = 5, + gun_mob_penetration = 20, + gun_node_penetration = 7, + gun_unload_sound = "rangedweapons_rifle_clip_out", + gun_sound = "rangedweapons_ak", + }, + on_secondary_use = function(itemstack, user, pointed_thing) +rangedweapons_reload_gun(itemstack, user) +return itemstack +end, + inventory_image = "rangedweapons_scar.png", +}) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or player - end - end - end - end -end - -end - end - end - end - end) - -local rangedweapons_scarshot = { - physical = false, - timer = 0, - visual = "sprite", - visual_size = {x=0.3, y=0.3}, - textures = {"rangedweapons_invisible.png"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_scarshot.on_step = function(self, dtime, node, pos) - self.timer = self.timer + dtime - local tiem = 0.002 - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.06 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:scarshot" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 14 then - local damage = math.random(20,42) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=12}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(9,24) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 6}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - if math.random(1, 100) <= 14 then - local damage = math.random(20,42) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(9,24) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - if timer >= 0.002 + tiem then - minetest.add_particle({ - pos = pos, - velocity = 0, - acceleration = {x=0, y=0, z=0}, - expirationtime = 0.06, - size = 3, - collisiondetection = false, - vertical = false, - texture = "rangedweapons_bullet_fly.png", - glow = 15, - }) - tiem = tiem + 0.002 - end - if self.timer >= 4.0 then - self.object:remove() - end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") then - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - if node.name == "rangedweapons:barrel" or - node.name == "doors:door_glass_a" or - node.name == "doors:door_glass_b" or - node.name == "xpanes:pane" or - node.name == "xpanes:pane_flat" or - node.name == "vessels:drinking_glass" or - node.name == "vessels:glass_bottle" or - node.name == "default:glass" then - minetest.get_node_timer(pos):start(0) - end - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end -end -end -minetest.register_entity("rangedweapons:scarshot", rangedweapons_scarshot ) \ No newline at end of file diff --git a/settings.lua b/settings.lua index d1ef7e6..1170aa3 100644 --- a/settings.lua +++ b/settings.lua @@ -1,20 +1,29 @@ --- change "true" to "false" in order to disable a feature, or --- "false" to "true" to enable it -explosives = true -javelins = true -shurikens = true -handguns = true -shotguns = true -rifles = true -magnums_and_revolvers = true -machine_pistols = true -sub_machineguns = true -assault_rifles = true -power_weapons = true -glass_breaking = true -door_breaking = true -heavy_machineguns = true -minigun_aswell = true +rweapons_player_dmg_multiplier = 1.0 +rweapons_mob_dmg_multiplier = 1.0 +rweapons_headshot_dmg_multiplier = 1.75 +rweapons_max_gun_efficiency = 300 +rweapons_min_gun_efficiency = 40 +rweapons_bloodyness = 10 - \ No newline at end of file +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" +rweapons_glass_breaking = "true" +rweapons_door_breaking = "true" +rweapons_other_weapon_crafting = "true" +rweapons_ammo_crafting = "true" +rweapons_item_crafting = "true" diff --git a/shurikens.lua b/shurikens.lua index 4b2d293..64ef876 100644 --- a/shurikens.lua +++ b/shurikens.lua @@ -1,877 +1,269 @@ ----wooden--- -minetest.register_craftitem("rangedweapons:shuriken_wooden", { - wield_scale = {x=0.5,y=0.5,z=0.20}, - inventory_image = "rangedweapons_wooden_shuriken.png", -}) - minetest.register_craftitem("rangedweapons:wooden_shuriken", { - description = "" ..core.colorize("#35cdff","Wooden shuriken\n") ..core.colorize("#FFFFFF", "Ranged damage: 1-3\n") ..core.colorize("#FFFFFF", "Accuracy: 100%\n") ..core.colorize("#FFFFFF", "Mob knockback: 4\n") ..core.colorize("#FFFFFF", "Critical chance: 4%\n") ..core.colorize("#FFFFFF", "Critical damage: 2-5\n") ..core.colorize("#FFFFFF", "Shuriken survival rate: 10%\n")..core.colorize("#FFFFFF", "Projectile gravity: 8\n") ..core.colorize("#FFFFFF", "Projectile velocity: 12"), + description = "" ..core.colorize("#35cdff","Wooden shuriken\n") ..core.colorize("#FFFFFF", "Ranged damage: 2\n") ..core.colorize("#FFFFFF", "Accuracy: 80%\n") ..core.colorize("#FFFFFF", "knockback: 5\n") ..core.colorize("#FFFFFF", "Critical chance: 6%\n") ..core.colorize("#FFFFFF", "Critical efficiency: 2x\n") ..core.colorize("#FFFFFF", "Shuriken survival rate: 10%\n") ..core.colorize("#FFFFFF", "Projectile gravity: 10\n") ..core.colorize("#FFFFFF", "Throwing cooldown: 0.35\n") ..core.colorize("#FFFFFF", "Projectile velocity: 25"), range = 0, stack_max= 100, + wield_scale = {x=0.6,y=0.6,z=0.5}, inventory_image = "rangedweapons_wooden_shuriken.png", + RW_throw_capabilities = { + throw_damage = {fleshy=2,knockback=5}, + throw_crit = 6, + throw_critEffc = 2.0, + throw_skill = {"throw_skill",35}, + throw_velocity = 25, + throw_accuracy = 80, + throw_cooldown = 0.35, + throw_projectiles = 1, + throw_gravity = 10, + throw_sound = "rangedweapons_throw", + throw_dps = 0, + throw_mob_penetration = 0, + throw_node_penetration = 0, + throw_entity = "rangedweapons:shot_bullet", + throw_visual = "wielditem", + throw_texture = "rangedweapons:wooden_shuriken", + throw_projectile_size = 0.15, + throw_glass_breaking = 0, + has_sparks = 0, + ignites_explosives = 0, + throw_door_breaking = 0, +OnCollision = function(player,bullet,target) +if math.random(1, 100) <= 10 then +minetest.add_item(bullet.object:get_pos(), "rangedweapons:wooden_shuriken") end end, + }, on_use = function(itemstack, user, pointed_thing) - if not minetest.setting_getbool("creative_mode") then itemstack:take_item() - end - if pointed_thing.type ~= "nothing" then - local pointed = minetest.get_pointed_thing_position(pointed_thing) - if vector.distance(user:getpos(), pointed) < 8 then - return itemstack - end - end - local pos = user:getpos() - local dir = user:get_look_dir() - local yaw = user:get_look_yaw() - if pos and dir then - pos.y = pos.y + 1.5 - local obj = minetest.add_entity(pos, "rangedweapons:woodensr") - if obj then - minetest.sound_play("rangedweapons_throw", {object=obj}) - obj:setvelocity({x=dir.x * 12, y=dir.y * 12, z=dir.z * 12}) - obj:setacceleration({x=dir.x * -1, y=-8, z=dir.z * -1}) - obj:setyaw(yaw + math.pi) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or user - end - end - end - return itemstack +rangedweapons_yeet(itemstack, user) +return itemstack end, }) -local rangedweapons_woodensr = { - physical = false, - timer = 0, - visual = "wielditem", - visual_size = {x=0.33, y=0.33,}, - textures = {"rangedweapons:shuriken_wooden"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_woodensr.on_step = function(self, dtime) - self.timer = self.timer + dtime - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.25 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:woodensr" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 4 then - local damage = math.random(2,5) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=8}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(1,3) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=4}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - - if math.random(1, 100) <= 4 then - local damage = math.random(2,5) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(1,3) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end -end -end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") and math.random(1, 100) <= 10 then - minetest.add_item(self.lastpos, "rangedweapons:wooden_shuriken") - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end - -minetest.register_entity("rangedweapons:woodensr", rangedweapons_woodensr) - -minetest.register_craft({ - output = 'rangedweapons:wooden_shuriken 20', - recipe = { - {'', 'group:wood', ''}, - {'group:wood', '', 'group:wood'}, - {'', 'group:wood', ''}, - } -}) - - ----stone--- - - -minetest.register_craftitem("rangedweapons:shuriken_stone", { - wield_scale = {x=0.5,y=0.5,z=0.20}, - inventory_image = "rangedweapons_stone_shuriken.png", -}) minetest.register_craftitem("rangedweapons:stone_shuriken", { - description = "" ..core.colorize("#35cdff","stone shuriken\n") ..core.colorize("#FFFFFF", "Ranged damage: 2-5\n") ..core.colorize("#FFFFFF", "Accuracy: 100%\n") ..core.colorize("#FFFFFF", "Mob knockback: 7\n") ..core.colorize("#FFFFFF", "Critical chance: 5%\n") ..core.colorize("#FFFFFF", "Critical damage: 4-8\n") ..core.colorize("#FFFFFF", "Shuriken survival rate: 15%\n")..core.colorize("#FFFFFF", "Projectile gravity: 9\n") ..core.colorize("#FFFFFF", "Projectile velocity: 10"), + description = "" ..core.colorize("#35cdff","Stone shuriken\n") ..core.colorize("#FFFFFF", "Ranged damage: 4\n") ..core.colorize("#FFFFFF", "Accuracy: 75%\n") ..core.colorize("#FFFFFF", "knockback: 8\n") ..core.colorize("#FFFFFF", "Critical chance: 7%\n") ..core.colorize("#FFFFFF", "Critical efficiency: 2.1x\n") ..core.colorize("#FFFFFF", "Shuriken survival rate: 15%\n") ..core.colorize("#FFFFFF", "Projectile gravity: 15\n") ..core.colorize("#FFFFFF", "Throwing cooldown: 0.35\n") ..core.colorize("#FFFFFF", "Projectile velocity: 20"), range = 0, stack_max= 125, + wield_scale = {x=0.6,y=0.6,z=0.5}, inventory_image = "rangedweapons_stone_shuriken.png", + RW_throw_capabilities = { + throw_damage = {fleshy=4,knockback=8}, + throw_crit = 7, + throw_critEffc = 2.1, + throw_skill = {"throw_skill",30}, + throw_velocity = 20, + throw_accuracy = 75, + throw_cooldown = 0.5, + throw_projectiles = 1, + throw_gravity = 15, + throw_sound = "rangedweapons_throw", + throw_dps = 0, + throw_mob_penetration = 0, + throw_node_penetration = 0, + throw_entity = "rangedweapons:shot_bullet", + throw_visual = "wielditem", + throw_texture = "rangedweapons:stone_shuriken", + throw_projectile_size = 0.15, + throw_glass_breaking = 1, + has_sparks = 0, + ignites_explosives = 0, + throw_door_breaking = 0, +OnCollision = function(player,bullet,target) +if math.random(1, 100) <= 15 then +minetest.add_item(bullet.object:get_pos(), "rangedweapons:stone_shuriken") end end, + }, on_use = function(itemstack, user, pointed_thing) - if not minetest.setting_getbool("creative_mode") then itemstack:take_item() - end - if pointed_thing.type ~= "nothing" then - local pointed = minetest.get_pointed_thing_position(pointed_thing) - if vector.distance(user:getpos(), pointed) < 8 then - return itemstack - end - end - local pos = user:getpos() - local dir = user:get_look_dir() - local yaw = user:get_look_yaw() - if pos and dir then - pos.y = pos.y + 1.5 - local obj = minetest.add_entity(pos, "rangedweapons:stonesr") - if obj then - minetest.sound_play("rangedweapons_throw", {object=obj}) - obj:setvelocity({x=dir.x * 10, y=dir.y * 10, z=dir.z * 10}) - obj:setacceleration({x=dir.x * -1, y=-9, z=dir.z * -1}) - obj:setyaw(yaw + math.pi) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or user - end - end - end - return itemstack +rangedweapons_yeet(itemstack, user) +return itemstack end, }) -local rangedweapons_stonesr = { - physical = false, - timer = 0, - visual = "wielditem", - visual_size = {x=0.33, y=0.33,}, - textures = {"rangedweapons:shuriken_stone"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_stonesr.on_step = function(self, dtime) - self.timer = self.timer + dtime - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.30 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:stonesr" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 5 then - local damage = math.random(4,8) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=14}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(2,5) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=7}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - - if math.random(1, 100) <= 5 then - local damage = math.random(4,8) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(2,5) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end -end -end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") and math.random(1, 100) <= 15 then - minetest.add_item(self.lastpos, "rangedweapons:stone_shuriken") - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end - -minetest.register_entity("rangedweapons:stonesr", rangedweapons_stonesr) - -minetest.register_craft({ - output = 'rangedweapons:stone_shuriken 10', - recipe = { - {'', 'default:cobble', ''}, - {'default:cobble', '', 'default:cobble'}, - {'', 'default:cobble', ''}, - } -}) - ----steel--- - - -minetest.register_craftitem("rangedweapons:shuriken_steel", { - wield_scale = {x=0.5,y=0.5,z=0.20}, - inventory_image = "rangedweapons_steel_shuriken.png", -}) minetest.register_craftitem("rangedweapons:steel_shuriken", { - description = "" ..core.colorize("#35cdff","steel shuriken\n") ..core.colorize("#FFFFFF", "Ranged damage: 3-8\n") ..core.colorize("#FFFFFF", "Accuracy: 100%\n") ..core.colorize("#FFFFFF", "Mob knockback: 2\n") ..core.colorize("#FFFFFF", "Critical chance: 6%\n") ..core.colorize("#FFFFFF", "Critical damage: 7-16\n") ..core.colorize("#FFFFFF", "Shuriken survival rate: 25%\n")..core.colorize("#FFFFFF", "Projectile gravity: 6\n") ..core.colorize("#FFFFFF", "Projectile velocity: 15"), + description = "" ..core.colorize("#35cdff","Steel shuriken\n") ..core.colorize("#FFFFFF", "Ranged damage: 6\n") ..core.colorize("#FFFFFF", "Accuracy: 85%\n") ..core.colorize("#FFFFFF", "knockback: 3\n") ..core.colorize("#FFFFFF", "Critical chance: 8%\n") ..core.colorize("#FFFFFF", "Critical efficiency: 2.2x\n") ..core.colorize("#FFFFFF", "Shuriken survival rate: 35%\n") ..core.colorize("#FFFFFF", "Projectile gravity: 8\n") ..core.colorize("#FFFFFF", "Throwing cooldown: 0.25\n") ..core.colorize("#FFFFFF", "Projectile velocity: 30"), range = 0, - stack_max= 175, + stack_max= 150, + wield_scale = {x=0.6,y=0.6,z=0.5}, inventory_image = "rangedweapons_steel_shuriken.png", + RW_throw_capabilities = { + throw_damage = {fleshy=6,knockback=3}, + throw_crit = 8, + throw_critEffc = 2.2, + throw_skill = {"throw_skill",40}, + throw_velocity = 30, + throw_accuracy = 85, + throw_cooldown = 0.25, + throw_projectiles = 1, + throw_gravity = 8, + throw_sound = "rangedweapons_throw", + throw_dps = 0, + throw_mob_penetration = 0, + throw_node_penetration = 0, + throw_entity = "rangedweapons:shot_bullet", + throw_visual = "wielditem", + throw_texture = "rangedweapons:steel_shuriken", + throw_projectile_size = 0.15, + throw_glass_breaking = 0, + has_sparks = 1, + ignites_explosives = 0, + throw_door_breaking = 0, +OnCollision = function(player,bullet,target) +if math.random(1, 100) <= 35 then +minetest.add_item(bullet.object:get_pos(), "rangedweapons:steel_shuriken") end end, + }, on_use = function(itemstack, user, pointed_thing) - if not minetest.setting_getbool("creative_mode") then itemstack:take_item() - end - if pointed_thing.type ~= "nothing" then - local pointed = minetest.get_pointed_thing_position(pointed_thing) - if vector.distance(user:getpos(), pointed) < 8 then - return itemstack - end - end - local pos = user:getpos() - local dir = user:get_look_dir() - local yaw = user:get_look_yaw() - if pos and dir then - pos.y = pos.y + 1.5 - local obj = minetest.add_entity(pos, "rangedweapons:steelsr") - if obj then - minetest.sound_play("rangedweapons_throw", {object=obj}) - obj:setvelocity({x=dir.x * 15, y=dir.y * 15, z=dir.z * 15}) - obj:setacceleration({x=dir.x * -1, y=-6, z=dir.z * -1}) - obj:setyaw(yaw + math.pi) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or user - end - end - end - return itemstack +rangedweapons_yeet(itemstack, user) +return itemstack end, }) -local rangedweapons_steelsr = { - physical = false, - timer = 0, - visual = "wielditem", - visual_size = {x=0.33, y=0.33,}, - textures = {"rangedweapons:shuriken_steel"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_steelsr.on_step = function(self, dtime) - self.timer = self.timer + dtime - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.17 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:steelsr" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 6 then - local damage = math.random(7,16) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=4}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(3,8) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=2}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - - if math.random(1, 100) <= 6 then - local damage = math.random(7,16) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(3,8) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end -end -end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") and math.random(1, 100) <= 25 then - minetest.add_item(self.lastpos, "rangedweapons:steel_shuriken") - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end - -minetest.register_entity("rangedweapons:steelsr", rangedweapons_steelsr) - -minetest.register_craft({ - output = 'rangedweapons:steel_shuriken 30', - recipe = { - {'', 'default:steel_ingot', ''}, - {'default:steel_ingot', '', 'default:steel_ingot'}, - {'', 'default:steel_ingot', ''}, - } -}) - ----bronze--- - - -minetest.register_craftitem("rangedweapons:shuriken_bronze", { - wield_scale = {x=0.5,y=0.5,z=0.20}, - inventory_image = "rangedweapons_bronze_shuriken.png", -}) - minetest.register_craftitem("rangedweapons:bronze_shuriken", { - description = "" ..core.colorize("#35cdff","bronze shuriken\n") ..core.colorize("#FFFFFF", "Ranged damage: 3-8\n") ..core.colorize("#FFFFFF", "Accuracy: 100%\n") ..core.colorize("#FFFFFF", "Mob knockback: 2\n") ..core.colorize("#FFFFFF", "Critical chance: 6%\n") ..core.colorize("#FFFFFF", "Critical damage: 7-16\n") ..core.colorize("#FFFFFF", "Shuriken survival rate: 30%\n")..core.colorize("#FFFFFF", "Projectile gravity: 6\n") ..core.colorize("#FFFFFF", "Projectile velocity: 15"), + description = "" ..core.colorize("#35cdff","Bronze shuriken\n") ..core.colorize("#FFFFFF", "Ranged damage: 6\n") ..core.colorize("#FFFFFF", "Accuracy: 85%\n") ..core.colorize("#FFFFFF", "knockback: 3\n") ..core.colorize("#FFFFFF", "Critical chance: 8%\n") ..core.colorize("#FFFFFF", "Critical efficiency: 2.2x\n") ..core.colorize("#FFFFFF", "Shuriken survival rate: 30%\n") ..core.colorize("#FFFFFF", "Projectile gravity: 8\n") ..core.colorize("#FFFFFF", "Throwing cooldown: 0.25\n") ..core.colorize("#FFFFFF", "Projectile velocity: 30"), range = 0, - stack_max= 200, + stack_max= 150, + wield_scale = {x=0.6,y=0.6,z=0.5}, inventory_image = "rangedweapons_bronze_shuriken.png", + RW_throw_capabilities = { + throw_damage = {fleshy=6,knockback=3}, + throw_crit = 8, + throw_critEffc = 2.2, + throw_skill = {"throw_skill",40}, + throw_velocity = 30, + throw_accuracy = 85, + throw_cooldown = 0.25, + throw_projectiles = 1, + throw_gravity = 8, + throw_sound = "rangedweapons_throw", + throw_dps = 0, + throw_mob_penetration = 0, + throw_node_penetration = 0, + throw_entity = "rangedweapons:shot_bullet", + throw_visual = "wielditem", + throw_texture = "rangedweapons:bronze_shuriken", + throw_projectile_size = 0.15, + throw_glass_breaking = 0, + has_sparks = 1, + ignites_explosives = 0, + throw_door_breaking = 0, +OnCollision = function(player,bullet,target) +if math.random(1, 100) <= 30 then +minetest.add_item(bullet.object:get_pos(), "rangedweapons:bronze_shuriken") end end, + }, on_use = function(itemstack, user, pointed_thing) - if not minetest.setting_getbool("creative_mode") then itemstack:take_item() - end - if pointed_thing.type ~= "nothing" then - local pointed = minetest.get_pointed_thing_position(pointed_thing) - if vector.distance(user:getpos(), pointed) < 8 then - return itemstack - end - end - local pos = user:getpos() - local dir = user:get_look_dir() - local yaw = user:get_look_yaw() - if pos and dir then - pos.y = pos.y + 1.5 - local obj = minetest.add_entity(pos, "rangedweapons:bronzesr") - if obj then - minetest.sound_play("rangedweapons_throw", {object=obj}) - obj:setvelocity({x=dir.x * 15, y=dir.y * 15, z=dir.z * 15}) - obj:setacceleration({x=dir.x * -1, y=-6, z=dir.z * -1}) - obj:setyaw(yaw + math.pi) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or user - end - end - end - return itemstack +rangedweapons_yeet(itemstack, user) +return itemstack end, }) -local rangedweapons_bronzesr = { - physical = false, - timer = 0, - visual = "wielditem", - visual_size = {x=0.33, y=0.33,}, - textures = {"rangedweapons:shuriken_bronze"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_bronzesr.on_step = function(self, dtime) - self.timer = self.timer + dtime - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.17 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:bronzesr" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 6 then - local damage = math.random(7,16) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=4}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(3,8) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=2}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - - if math.random(1, 100) <= 6 then - local damage = math.random(7,16) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(3,8) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end -end -end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") and math.random(1, 100) <= 30 then - minetest.add_item(self.lastpos, "rangedweapons:bronze_shuriken") - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end - -minetest.register_entity("rangedweapons:bronzesr", rangedweapons_bronzesr) - -minetest.register_craft({ - output = 'rangedweapons:bronze_shuriken 35', - recipe = { - {'', 'default:bronze_ingot', ''}, - {'default:bronze_ingot', '', 'default:bronze_ingot'}, - {'', 'default:bronze_ingot', ''}, - } -}) - ----golden--- - - -minetest.register_craftitem("rangedweapons:shuriken_golden", { - wield_scale = {x=0.5,y=0.5,z=0.20}, - inventory_image = "rangedweapons_golden_shuriken.png", -}) - minetest.register_craftitem("rangedweapons:golden_shuriken", { - description = "" ..core.colorize("#35cdff","golden shuriken\n") ..core.colorize("#FFFFFF", "Ranged damage: 4-10\n") ..core.colorize("#FFFFFF", "Accuracy: 100%\n") ..core.colorize("#FFFFFF", "Mob knockback: 4\n") ..core.colorize("#FFFFFF", "Critical chance: 7%\n") ..core.colorize("#FFFFFF", "Critical damage: 10-22\n") ..core.colorize("#FFFFFF", "Shuriken survival rate: 36%\n")..core.colorize("#FFFFFF", "Projectile gravity: 7\n") ..core.colorize("#FFFFFF", "Projectile velocity: 12"), + description = "" ..core.colorize("#35cdff","Golden shuriken\n") ..core.colorize("#FFFFFF", "Ranged damage: 8\n") ..core.colorize("#FFFFFF", "Accuracy: 75%\n") ..core.colorize("#FFFFFF", "knockback: 10\n") ..core.colorize("#FFFFFF", "Critical chance: 12%\n") ..core.colorize("#FFFFFF", "Critical efficiency: 2.5x\n") ..core.colorize("#FFFFFF", "Shuriken survival rate: 25%\n") ..core.colorize("#FFFFFF", "Projectile gravity: 15\n") ..core.colorize("#FFFFFF", "Throwing cooldown: 0.4\n") ..core.colorize("#FFFFFF", "Projectile velocity: 25"), range = 0, - stack_max= 275, + stack_max= 175, + wield_scale = {x=0.6,y=0.6,z=0.5}, inventory_image = "rangedweapons_golden_shuriken.png", + RW_throw_capabilities = { + throw_damage = {fleshy=8,knockback=10}, + throw_crit = 12, + throw_critEffc = 2.5, + throw_skill = {"throw_skill",35}, + throw_velocity = 25, + throw_accuracy = 75, + throw_cooldown = 0.4, + throw_projectiles = 1, + throw_gravity = 15, + throw_sound = "rangedweapons_throw", + throw_dps = 0, + throw_mob_penetration = 0, + throw_node_penetration = 0, + throw_entity = "rangedweapons:shot_bullet", + throw_visual = "wielditem", + throw_texture = "rangedweapons:golden_shuriken", + throw_projectile_size = 0.15, + throw_glass_breaking = 1, + has_sparks = 1, + ignites_explosives = 0, + throw_door_breaking = 0, +OnCollision = function(player,bullet,target) +if math.random(1, 100) <= 25 then +minetest.add_item(bullet.object:get_pos(), "rangedweapons:golden_shuriken") end end, + }, on_use = function(itemstack, user, pointed_thing) - if not minetest.setting_getbool("creative_mode") then itemstack:take_item() - end - if pointed_thing.type ~= "nothing" then - local pointed = minetest.get_pointed_thing_position(pointed_thing) - if vector.distance(user:getpos(), pointed) < 8 then - return itemstack - end - end - local pos = user:getpos() - local dir = user:get_look_dir() - local yaw = user:get_look_yaw() - if pos and dir then - pos.y = pos.y + 1.5 - local obj = minetest.add_entity(pos, "rangedweapons:goldensr") - if obj then - minetest.sound_play("rangedweapons_throw", {object=obj}) - obj:setvelocity({x=dir.x * 12, y=dir.y * 12, z=dir.z * 12}) - obj:setacceleration({x=dir.x * -1, y=-7, z=dir.z * -1}) - obj:setyaw(yaw + math.pi) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or user - end - end - end - return itemstack +rangedweapons_yeet(itemstack, user) +return itemstack end, }) -local rangedweapons_goldensr = { - physical = false, - timer = 0, - visual = "wielditem", - visual_size = {x=0.33, y=0.33,}, - textures = {"rangedweapons:shuriken_golden"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_goldensr.on_step = function(self, dtime) - self.timer = self.timer + dtime - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.24 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:goldensr" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 7 then - local damage = math.random(10,22) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=8}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(4,10) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=4}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - - if math.random(1, 100) <= 7 then - local damage = math.random(10,22) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(4,10) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end -end -end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") and math.random(1, 100) <= 36 then - minetest.add_item(self.lastpos, "rangedweapons:golden_shuriken") - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end - -minetest.register_entity("rangedweapons:goldensr", rangedweapons_goldensr) - -minetest.register_craft({ - output = 'rangedweapons:golden_shuriken 42', - recipe = { - {'', 'default:gold_ingot', ''}, - {'default:gold_ingot', '', 'default:gold_ingot'}, - {'', 'default:gold_ingot', ''}, - } -}) - ----mese--- - - -minetest.register_craftitem("rangedweapons:shuriken_mese", { - wield_scale = {x=0.5,y=0.5,z=0.20}, - inventory_image = "rangedweapons_mese_shuriken.png", -}) - minetest.register_craftitem("rangedweapons:mese_shuriken", { - description = "" ..core.colorize("#35cdff","mese shuriken\n") ..core.colorize("#FFFFFF", "Ranged damage: 5-12\n") ..core.colorize("#FFFFFF", "Accuracy: 100%\n") ..core.colorize("#FFFFFF", "Mob knockback: 1\n") ..core.colorize("#FFFFFF", "Critical chance: 8%\n") ..core.colorize("#FFFFFF", "Critical damage: 13-28\n") ..core.colorize("#FFFFFF", "Shuriken survival rate: 45%\n")..core.colorize("#FFFFFF", "Projectile gravity: 5\n") ..core.colorize("#FFFFFF", "Projectile velocity: 20"), + description = "" ..core.colorize("#35cdff","MESE shuriken\n") ..core.colorize("#FFFFFF", "Ranged damage: 7\n") ..core.colorize("#FFFFFF", "Accuracy: 90%\n") ..core.colorize("#FFFFFF", "knockback: 2\n") ..core.colorize("#FFFFFF", "Critical chance: 9%\n") ..core.colorize("#FFFFFF", "Critical efficiency: 2.3x\n") ..core.colorize("#FFFFFF", "Shuriken survival rate: 50%\n") ..core.colorize("#FFFFFF", "Projectile gravity: 5\n") ..core.colorize("#FFFFFF", "Throwing cooldown: 0.2\n") ..core.colorize("#FFFFFF", "Enemy penetration: 25%\n") ..core.colorize("#FFFFFF", "Projectile velocity: 35"), range = 0, - stack_max= 340, + stack_max= 175, + wield_scale = {x=0.6,y=0.6,z=0.5}, inventory_image = "rangedweapons_mese_shuriken.png", + RW_throw_capabilities = { + throw_damage = {fleshy=7,knockback=2}, + throw_crit = 9, + throw_critEffc = 2.3, + throw_skill = {"throw_skill",45}, + throw_velocity = 35, + throw_accuracy = 90, + throw_cooldown = 0.2, + throw_projectiles = 1, + throw_gravity = 5, + throw_sound = "rangedweapons_throw", + throw_dps = 0, + throw_mob_penetration = 25, + throw_node_penetration = 0, + throw_entity = "rangedweapons:shot_bullet", + throw_visual = "wielditem", + throw_texture = "rangedweapons:mese_shuriken", + throw_projectile_size = 0.15, + throw_glass_breaking = 1, + has_sparks = 1, + ignites_explosives = 0, + throw_door_breaking = 0, +OnCollision = function(player,bullet,target) +if math.random(1, 100) <= 50 then +minetest.add_item(bullet.object:get_pos(), "rangedweapons:mese_shuriken") end end, + }, on_use = function(itemstack, user, pointed_thing) - if not minetest.setting_getbool("creative_mode") then itemstack:take_item() - end - if pointed_thing.type ~= "nothing" then - local pointed = minetest.get_pointed_thing_position(pointed_thing) - if vector.distance(user:getpos(), pointed) < 8 then - return itemstack - end - end - local pos = user:getpos() - local dir = user:get_look_dir() - local yaw = user:get_look_yaw() - if pos and dir then - pos.y = pos.y + 1.5 - local obj = minetest.add_entity(pos, "rangedweapons:mesesr") - if obj then - minetest.sound_play("rangedweapons_throw", {object=obj}) - obj:setvelocity({x=dir.x * 20, y=dir.y * 20, z=dir.z * 20}) - obj:setacceleration({x=dir.x * -1, y=-5, z=dir.z * -1}) - obj:setyaw(yaw + math.pi) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or user - end - end - end - return itemstack +rangedweapons_yeet(itemstack, user) +return itemstack end, }) -local rangedweapons_mesesr = { - physical = false, - timer = 0, - visual = "wielditem", - visual_size = {x=0.33, y=0.33,}, - textures = {"rangedweapons:shuriken_mese"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_mesesr.on_step = function(self, dtime) - self.timer = self.timer + dtime - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.15 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:mesesr" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 8 then - local damage = math.random(13,28) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=2}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(5,12) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=1}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - - if math.random(1, 100) <= 8 then - local damage = math.random(13,28) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(5,12) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end -end -end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") and math.random(1, 100) <= 45 then - minetest.add_item(self.lastpos, "rangedweapons:mese_shuriken") - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end - -minetest.register_entity("rangedweapons:mesesr", rangedweapons_mesesr) - -minetest.register_craft({ - output = 'rangedweapons:mese_shuriken 55', - recipe = { - {'', 'default:mese_crystal', ''}, - {'default:mese_crystal', '', 'default:mese_crystal'}, - {'', 'default:mese_crystal', ''}, - } -}) - ----diamond--- - - -minetest.register_craftitem("rangedweapons:shuriken_diamond", { - wield_scale = {x=0.5,y=0.5,z=0.20}, - inventory_image = "rangedweapons_diamond_shuriken.png", -}) - minetest.register_craftitem("rangedweapons:diamond_shuriken", { - description = "" ..core.colorize("#35cdff","diamond shuriken\n") ..core.colorize("#FFFFFF", "Ranged damage: 6-15\n") ..core.colorize("#FFFFFF", "Accuracy: 100%\n") ..core.colorize("#FFFFFF", "Mob knockback: 1\n") ..core.colorize("#FFFFFF", "Critical chance: 9%\n") ..core.colorize("#FFFFFF", "Critical damage: 18-35\n") ..core.colorize("#FFFFFF", "Shuriken survival rate: 60%\n")..core.colorize("#FFFFFF", "Projectile gravity: 4\n") ..core.colorize("#FFFFFF", "Projectile velocity: 25"), + description = "" ..core.colorize("#35cdff","Diamond shuriken\n") ..core.colorize("#FFFFFF", "Ranged damage: 8\n") ..core.colorize("#FFFFFF", "Accuracy: 95%\n") ..core.colorize("#FFFFFF", "knockback: 2\n") ..core.colorize("#FFFFFF", "Critical chance: 10%\n") ..core.colorize("#FFFFFF", "Critical efficiency: 2.4x\n") ..core.colorize("#FFFFFF", "Shuriken survival rate: 60%\n") ..core.colorize("#FFFFFF", "Projectile gravity: 5\n") ..core.colorize("#FFFFFF", "Throwing cooldown: 0.15\n") ..core.colorize("#FFFFFF", "Enemy penetration: 33%\n") ..core.colorize("#FFFFFF", "Projectile velocity: 40"), range = 0, - stack_max= 420, + stack_max= 200, + wield_scale = {x=0.6,y=0.6,z=0.5}, inventory_image = "rangedweapons_diamond_shuriken.png", + RW_throw_capabilities = { + throw_damage = {fleshy=8,knockback=2}, + throw_crit = 10, + throw_critEffc = 2.4, + throw_skill = {"throw_skill",50}, + throw_velocity = 40, + throw_accuracy = 95, + throw_cooldown = 0.15, + throw_projectiles = 1, + throw_gravity = 5, + throw_sound = "rangedweapons_throw", + throw_dps = 0, + throw_mob_penetration = 33, + throw_node_penetration = 0, + throw_entity = "rangedweapons:shot_bullet", + throw_visual = "wielditem", + throw_texture = "rangedweapons:diamond_shuriken", + throw_projectile_size = 0.15, + throw_glass_breaking = 1, + has_sparks = 1, + ignites_explosives = 0, + throw_door_breaking = 0, +OnCollision = function(player,bullet,target) +if math.random(1, 100) <= 60 then +minetest.add_item(bullet.object:get_pos(), "rangedweapons:diamond_shuriken") end end, + }, on_use = function(itemstack, user, pointed_thing) - if not minetest.setting_getbool("creative_mode") then itemstack:take_item() - end - if pointed_thing.type ~= "nothing" then - local pointed = minetest.get_pointed_thing_position(pointed_thing) - if vector.distance(user:getpos(), pointed) < 8 then - return itemstack - end - end - local pos = user:getpos() - local dir = user:get_look_dir() - local yaw = user:get_look_yaw() - if pos and dir then - pos.y = pos.y + 1.5 - local obj = minetest.add_entity(pos, "rangedweapons:diamondsr") - if obj then - minetest.sound_play("rangedweapons_throw", {object=obj}) - obj:setvelocity({x=dir.x * 25, y=dir.y * 25, z=dir.z * 25}) - obj:setacceleration({x=dir.x * -1, y=-4, z=dir.z * -1}) - obj:setyaw(yaw + math.pi) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or user - end - end - end - return itemstack +rangedweapons_yeet(itemstack, user) +return itemstack end, -}) - -local rangedweapons_diamondsr = { - physical = false, - timer = 0, - visual = "wielditem", - visual_size = {x=0.33, y=0.33,}, - textures = {"rangedweapons:shuriken_diamond"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_diamondsr.on_step = function(self, dtime) - self.timer = self.timer + dtime - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.12 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:diamondsr" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 9 then - local damage = math.random(18,35) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=2}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(6,15) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=1}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - - if math.random(1, 100) <= 9 then - local damage = math.random(18,35) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(6,15) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end -end -end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") and math.random(1, 100) <= 60 then - minetest.add_item(self.lastpos, "rangedweapons:diamond_shuriken") - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end - -minetest.register_entity("rangedweapons:diamondsr", rangedweapons_diamondsr) - -minetest.register_craft({ - output = 'rangedweapons:diamond_shuriken 69', - recipe = { - {'', 'default:diamond', ''}, - {'default:diamond', '', 'default:diamond'}, - {'', 'default:diamond', ''}, - } -}) - - +}) \ No newline at end of file diff --git a/skills.lua b/skills.lua new file mode 100644 index 0000000..050b98b --- /dev/null +++ b/skills.lua @@ -0,0 +1,154 @@ +minetest.register_on_joinplayer(function(player) +local meta = player:get_meta() +if meta:get_int("handgun_skill") == 0 +then + meta:set_int("handgun_skill",100) +end +if meta:get_int("mp_skill") == 0 +then + meta:set_int("mp_skill",100) +end +if meta:get_int("smg_skill") == 0 +then + meta:set_int("smg_skill",100) +end +if meta:get_int("shotgun_skill") == 0 +then + meta:set_int("shotgun_skill",100) +end +if meta:get_int("heavy_skill") == 0 +then + meta:set_int("heavy_skill",100) +end +if meta:get_int("arifle_skill") == 0 +then + meta:set_int("arifle_skill",100) +end +if meta:get_int("revolver_skill") == 0 +then + meta:set_int("revolver_skill",100) +end +if meta:get_int("rifle_skill") == 0 +then + meta:set_int("rifle_skill",100) +end +if meta:get_int("throw_skill") == 0 +then + meta:set_int("throw_skill",100) +end +end) + + +minetest.register_chatcommand("gunskills", { + func = function(name, param) + 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 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") + minetest.show_formspec(name, "rangedweapons:gunskills_form", +"size[11,7]".. +"label[0,0;Gun efficiency: increases damage, accuracy and crit chance.]".. +"image[0,1;1,1;rangedweapons_handgun_img.png]".. +"label[1,1.2;Handgun efficiency: " .. handguns .. "%]".. +"image[0,2;1,1;rangedweapons_machinepistol_img.png]".. +"label[1,2.2;M.Pistol efficiency: " .. mps .. "%]".. +"image[0,3;1,1;rangedweapons_smg_img.png]".. +"label[1,3.2;S.M.G efficiency: " .. smgs .. "%]".. +"image[0,4;1,1;rangedweapons_shotgun_img.png]".. +"label[1,4.2;Shotgun efficiency: " .. shotguns .. "%]".. +"image[0,5;1,1;rangedweapons_heavy_img.png]".. +"label[1,5.2;Heavy.MG efficiency: " .. heavy .. "%]".. +"image[0,6;1,1;rangedweapons_arifle_img.png]".. +"label[1,6.2;A.rifle efficiency: " .. arifle .. "%]".. +"image[5,1;1,1;rangedweapons_revolver_img.png]".. +"label[6,1.2;Revl./mgn. efficiency: " .. revolver .. "%]".. +"image[5,2;1,1;rangedweapons_rifle_img.png]".. +"label[6,2.2;Rifle efficiency: " .. rifle .. "%]".. +"image[5,3;1,1;rangedweapons_yeetable_img.png]".. +"label[6,3.2;Throwing efficiency: " .. throw .. "%]".. +"button_exit[9,0;2,1;exit;Done]") + +end + end +}) + + local timer = 0 +minetest.register_globalstep(function(dtime, player) + timer = timer + dtime; + if timer >= 60.0 then + 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 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) + 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) + 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) + 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) + 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) + 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) + 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) + 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) + 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) + minetest.chat_send_player(player:get_player_name(), "" ..core.colorize("#ff0000","Throwing skill degraded! ")) + end + end + timer = 0 + end + end + end) diff --git a/sounds/hit.ogg b/sounds/hit.ogg new file mode 100644 index 0000000000000000000000000000000000000000..1281384ddb1d0771435c111143560cc907378df7 GIT binary patch literal 5031 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 literal 0 HcmV?d00001 diff --git a/sounds/rangedweapons_rifle_clip_out.ogg b/sounds/rangedweapons_rifle_clip_out.ogg new file mode 100644 index 0000000000000000000000000000000000000000..5892b4835fcd85e9ff534c24cf71a849d39ce0ee GIT binary patch literal 6433 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 CD7TOR literal 0 HcmV?d00001 diff --git a/sounds/rangedweapons_rifle_reload_a.ogg b/sounds/rangedweapons_rifle_reload_a.ogg new file mode 100644 index 0000000000000000000000000000000000000000..11b5e81751ad035023fc960b4c2fa963d1a6cad7 GIT binary patch literal 6026 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 literal 0 HcmV?d00001 diff --git a/sounds/rangedweapons_rifle_reload_b.ogg b/sounds/rangedweapons_rifle_reload_b.ogg new file mode 100644 index 0000000000000000000000000000000000000000..0c91a8478a1f8df6afdc3e33743d1ce63ac15456 GIT binary patch literal 5595 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 Z^TeT&68uxowT$><{yUpj^Xykc{{cxe?zI2_ literal 0 HcmV?d00001 diff --git a/sounds/rangedweapons_shell_insert.ogg b/sounds/rangedweapons_shell_insert.ogg new file mode 100644 index 0000000000000000000000000000000000000000..e7a5b8be16d62768a6f1f4f0da9aa9fe90d04c2d GIT binary patch literal 6631 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 literal 0 HcmV?d00001 diff --git a/sounds/rengedweapons_ricochet.ogg b/sounds/rengedweapons_ricochet.ogg new file mode 100644 index 0000000000000000000000000000000000000000..715fac6a2a38fb675993a6d7b4c447a7c41ed3b7 GIT binary patch literal 10279 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 literal 0 HcmV?d00001 diff --git a/spas12.lua b/spas12.lua index 74f2ee5..d1c3026 100644 --- a/spas12.lua +++ b/spas12.lua @@ -1,250 +1,63 @@ -minetest.register_craft({ - output = "rangedweapons:spas12_uld", - recipe = { - {"", "default:steel_ingot", "default:steel_ingot"}, - {"default:steel_ingot", "default:mese", "default:diamond"}, - {"rangedweapons:plastic_sheet", "default:diamond", "default:steel_ingot"}, - } -}) - -minetest.register_craftitem("rangedweapons:spas12_uld", { - stack_max= 1, - wield_scale = {x=2.1,y=2.1,z=1.25}, - range = 0, - description = "" ..core.colorize("#35cdff","Franchi SPAS-12\n") ..core.colorize("#FFFFFF", "Ranged damage: 4-10 X 12\n") ..core.colorize("#FFFFFF", "Accuracy: 67%\n") ..core.colorize("#FFFFFF", "Mob knockback: 7\n") ..core.colorize("#FFFFFF", "Critical chance: 5%\n") ..core.colorize("#FFFFFF", "Critical damage: 10-22 X 12\n") ..core.colorize("#FFFFFF", "Ammunition: 12 gauge shells\n") ..core.colorize("#FFFFFF", "Reload time: 0.45\n") ..core.colorize("#be0d00", "The gun is NOT loaded! (Right-click to load)\n")..core.colorize("#FFFFFF", "Gun type: shotgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 20"), - inventory_image = "rangedweapons_spas12.png", - on_use = function(user) - minetest.sound_play("rangedweapons_empty", {user}) - end, -}) - - local timer = 0 -minetest.register_globalstep(function(dtime, player) - timer = timer + dtime; - if timer >= 0.001 then - for _, player in pairs(minetest.get_connected_players()) do - local inv = player:get_inventory() - local controls = player:get_player_control() - if player:get_wielded_item():get_name() == "rangedweapons:spas12_uld" - and inv:contains_item("main", "rangedweapons:shell")then - if controls.RMB then - inv:remove_item("main", "rangedweapons:shell") - player:set_wielded_item("rangedweapons:spas12_rld") - local pos = player:getpos() - local dir = player:get_look_dir() - local yaw = player:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:empty_shell_shotgun") - minetest.sound_play("", {object=obj}) - obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) - obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) - obj:setyaw(yaw + math.pi) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or player - end - end - timer = 0 - minetest.sound_play("rangedweapons_shotgun_reload_a", {player}) - -end - end - - if timer >= 0.45 and - player:get_wielded_item():get_name() == "rangedweapons:spas12_rld" then - player:set_wielded_item("rangedweapons:spas12") - timer = 0 - minetest.sound_play("rangedweapons_shotgun_reload_b", {player}) - - - - end - end - end - end) - - -minetest.register_craftitem("rangedweapons:spas12_rld", { +minetest.register_tool("rangedweapons:spas12_rld", { stack_max= 1, range = 0, - wield_scale = {x=2.1,y=2.1,z=1.25}, - description = "**RELOADING FRANCHI SPAS-12**", + wield_scale = {x=1.9,y=1.9,z=1.1}, + description = "", + loaded_gun = "rangedweapons:spas12", + loaded_sound = "rangedweapons_shotgun_reload_b", groups = {not_in_creative_inventory = 1}, inventory_image = "rangedweapons_spas12_rld.png", }) - minetest.register_tool("rangedweapons:spas12", { - description = "" ..core.colorize("#35cdff","Franchi SPAS-12\n") ..core.colorize("#FFFFFF", "Ranged damage: 4-10 X 12\n") ..core.colorize("#FFFFFF", "Accuracy: 67%\n")..core.colorize("#FFFFFF", "Mob knockback: 7\n") ..core.colorize("#FFFFFF", "Critical chance: 5%\n") ..core.colorize("#FFFFFF", "Critical damage: 10-22 X 12\n") ..core.colorize("#FFFFFF", "Ammunition: 12 gauge shells\n") ..core.colorize("#FFFFFF", "Reload time: 0.45\n") ..core.colorize("#27a600", "The gun is loaded!\n")..core.colorize("#FFFFFF", "Gun type: shotgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 20"), + description = "" ..core.colorize("#35cdff","spas-12\n") ..core.colorize("#FFFFFF", "Ranged damage: 3\n") ..core.colorize("#FFFFFF", "projectiles: 6\n") ..core.colorize("#FFFFFF", "Gun gravity: 3\n") ..core.colorize("#FFFFFF", "Accuracy: 52%\n")..core.colorize("#FFFFFF", "knockback: 7\n") ..core.colorize("#FFFFFF", "Critical chance: 7%\n") ..core.colorize("#FFFFFF", "Critical efficiency: 2.1x\n") ..core.colorize("#FFFFFF", "Ammunition: 12 gauge shells\n") ..core.colorize("#FFFFFF", "Pump delay: 0.45\n")..core.colorize("#FFFFFF", "Clip size: 8\n") ..core.colorize("#27a600", "Gun is ready to fire!\n") ..core.colorize("#fff21c", "Right-click to load in a bullet!\n") ..core.colorize("#FFFFFF", "Gun type: shotgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 32"), range = 0, - groups = {not_in_creative_inventory = 1}, - wield_scale = {x=2.1,y=2.1,z=1.25}, + wield_scale = {x=1.9,y=1.9,z=1.1}, inventory_image = "rangedweapons_spas12.png", +RW_gun_capabilities = { + gun_damage = {fleshy=3,knockback=7}, + gun_crit = 7, + gun_critEffc = 2.1, + suitable_ammo = {{"rangedweapons:shell",8}}, + gun_skill = {"shotgun_skill",20}, + gun_icon = "rangedweapons_spas12_icon.png", + gun_unloaded = "rangedweapons:spas12_rld", + gun_cooling = "rangedweapons:spas12_uld", + gun_velocity = 32, + gun_accuracy = 52, + gun_cooldown = 0.45, + gun_gravity = 3, + gun_reload = 0.25, + gun_projectiles = 6, + has_shell = 0, + gun_durability = 550, + gun_smokeSize = 15, + gun_door_breaking = 1, + gun_sound = "rangedweapons_shotgun_shot", + gun_unload_sound = "rangedweapons_shell_insert", + }, + on_secondary_use = function(itemstack, user, pointed_thing) +rangedweapons_single_load_gun(itemstack, user, "") +return itemstack +end, on_use = function(itemstack, user, pointed_thing) - local pos = user:getpos() - local dir = user:get_look_dir() - local yaw = user:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:spas12shot") - if obj then - minetest.sound_play("rangedweapons_shotgun_shot", {object=obj}) - obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)}) - obj:setacceleration({x=dir.x * math.random(-3.3,3.3), y=math.random(-3.3,3.3), z=dir.z * math.random(-3.3,3.3)}) ------------------------------------------------------ - local obj = minetest.add_entity(pos, "rangedweapons:spas12shot") - obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)}) - obj:setacceleration({x=dir.x * math.random(-3.3,3.3), y=math.random(-3.3,3.3), z=dir.z * math.random(-3.3,3.3)}) ------------------------------------------------------ - local obj = minetest.add_entity(pos, "rangedweapons:spas12shot") - obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)}) - obj:setacceleration({x=dir.x * math.random(-3.3,3.3), y=math.random(-3.3,3.3), z=dir.z * math.random(-3.3,3.3)}) ------------------------------------------------------ - local obj = minetest.add_entity(pos, "rangedweapons:spas12shot") - obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)}) - obj:setacceleration({x=dir.x * math.random(-3.3,3.3), y=math.random(-3.3,3.3), z=dir.z * math.random(-3.3,3.3)}) ------------------------------------------------------ - local obj = minetest.add_entity(pos, "rangedweapons:spas12shot") - obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)}) - obj:setacceleration({x=dir.x * math.random(-3.3,3.3), y=math.random(-3.3,3.3), z=dir.z * math.random(-3.3,3.3)}) ------------------------------------------------------ - local obj = minetest.add_entity(pos, "rangedweapons:spas12shot") - obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)}) - obj:setacceleration({x=dir.x * math.random(-3.3,3.3), y=math.random(-3.3,3.3), z=dir.z * math.random(-3.3,3.3)}) ------------------------------------------------------ - local obj = minetest.add_entity(pos, "rangedweapons:spas12shot") - obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)}) - obj:setacceleration({x=dir.x * math.random(-3.3,3.3), y=math.random(-3.3,3.3), z=dir.z * math.random(-3.3,3.3)}) ------------------------------------------------------ - local obj = minetest.add_entity(pos, "rangedweapons:spas12shot") - obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)}) - obj:setacceleration({x=dir.x * math.random(-3.3,3.3), y=math.random(-3.3,3.3), z=dir.z * math.random(-3.3,3.3)}) ------------------------------------------------------ - local obj = minetest.add_entity(pos, "rangedweapons:spas12shot") - obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)}) - obj:setacceleration({x=dir.x * math.random(-3.3,3.3), y=math.random(-3.3,3.3), z=dir.z * math.random(-3.3,3.3)}) ------------------------------------------------------ - local obj = minetest.add_entity(pos, "rangedweapons:spas12shot") - obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)}) - obj:setacceleration({x=dir.x * math.random(-3.3,3.3), y=math.random(-3.3,3.3), z=dir.z * math.random(-3.3,3.3)}) ------------------------------------------------------ - local obj = minetest.add_entity(pos, "rangedweapons:spas12shot") - obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)}) - obj:setacceleration({x=dir.x * math.random(-3.3,3.3), y=math.random(-3.3,3.3), z=dir.z * math.random(-3.3,3.3)}) ------------------------------------------------------ - local obj = minetest.add_entity(pos, "rangedweapons:spas12shot") - obj:setvelocity({x=dir.x * math.random(18,22), y=dir.y * math.random(18,22), z=dir.z * math.random(18,22)}) - obj:setacceleration({x=dir.x * math.random(-3.3,3.3), y=math.random(-3.3,3.3), z=dir.z * math.random(-3.3,3.3)}) ------------------------------------------------------ - minetest.add_particle({ - pos = pos, - velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} , - acceleration = {x=dir.x * -4, y=2, z=dir.z * -4}, - expirationtime = 1.25, - size = 10, - collisiondetection = false, - vertical = false, - texture = "tnt_smoke.png", - glow = 5, - }) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or user - itemstack = "rangedweapons:spas12_uld" - end - end - end - return itemstack +rangedweapons_shoot_gun(itemstack, user) +return itemstack end, }) -local rangedweapons_spas12shot = { - physical = false, - timer = 0, - visual = "sprite", - visual_size = {x=0.1, y=0.1}, - textures = {"rangedweapons_buckball.png"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_spas12shot.on_step = function(self, dtime, node, pos) - self.timer = self.timer + dtime - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.225 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1.25) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:spas12shot" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 5 then - local damage = math.random(10,22) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 14}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(4,10) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 7}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - if math.random(1, 100) <= 5 then - local damage = math.random(10,22) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(4,10) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - if self.timer >= 4.0 then - self.object:remove() - end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") then - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - if node.name == "rangedweapons:barrel" or - node.name == "doors:door_wood_a" or - node.name == "doors:door_wood_b" or - node.name == "doors:door_glass_a" or - node.name == "doors:door_glass_b" or - node.name == "xpanes:pane" or - node.name == "xpanes:pane_flat" or - node.name == "vessels:drinking_glass" or - node.name == "vessels:glass_bottle" or - node.name == "default:glass" then - minetest.get_node_timer(pos):start(0) - end - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end -end -end - - - -minetest.register_entity("rangedweapons:spas12shot", rangedweapons_spas12shot ) - - +minetest.register_tool("rangedweapons:spas12_uld", { + stack_max= 1, + wield_scale = {x=1.9,y=1.9,z=1.1}, + range = 0, + description = "" ..core.colorize("#35cdff","spas-12\n") ..core.colorize("#FFFFFF", "Ranged damage: 2\n") ..core.colorize("#FFFFFF", "projectiles: 6\n") ..core.colorize("#FFFFFF", "Gun gravity: 3\n") ..core.colorize("#FFFFFF", "Accuracy: 52%\n")..core.colorize("#FFFFFF", "knockback: 7\n") ..core.colorize("#FFFFFF", "Critical chance: 7%\n") ..core.colorize("#FFFFFF", "Critical efficiency: 2.1x\n") ..core.colorize("#FFFFFF", "Ammunition: 12 gauge shells\n") ..core.colorize("#FFFFFF", "Pump delay: 0.45\n")..core.colorize("#FFFFFF", "Clip size: 8\n") ..core.colorize("#be0d00", "Right-click, to eject the empty shell!\n") ..core.colorize("#fff21c", "Right-click to load in a bullet!\n") ..core.colorize("#FFFFFF", "Gun type: shotgun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 28"), + inventory_image = "rangedweapons_spas12.png", + groups = {not_in_creative_inventory = 1}, + on_use = function(user) + minetest.sound_play("rangedweapons_empty", {user}) + end, +on_secondary_use = function(itemstack, user, pointed_thing) +eject_shell(itemstack,user,"rangedweapons:spas12_rld",0.6,"rangedweapons_shotgun_reload_a","rangedweapons:empty_shell") +return itemstack +end, +}) diff --git a/svd.lua b/svd.lua index f2b0f79..4f3e2db 100644 --- a/svd.lua +++ b/svd.lua @@ -1,219 +1,103 @@ -minetest.register_craft({ - output = 'rangedweapons:svd_uld', - recipe = { - {'default:steel_ingot', 'default:diamondblock', 'default:steel_ingot'}, - {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, - {'default:tree', 'default:diamond', 'default:tree'}, - } -}) -minetest.register_craftitem("rangedweapons:svd_uld", { + +minetest.register_tool("rangedweapons:svd_uld", { stack_max= 1, wield_scale = {x=1.9,y=1.9,z=1.1}, range = 0, - description = "" ..core.colorize("#35cdff","S.V.D \n") ..core.colorize("#FFFFFF", "Ranged damage: 80/sec of bullet lifetime\n") ..core.colorize("#FFFFFF", "Accuracy: 100%\n") ..core.colorize("#FFFFFF", "Mob knockback: 14\n") ..core.colorize("#FFFFFF", "Critical chance: 42%\n") ..core.colorize("#FFFFFF", "Critical damage: 200/sec of bullet lifetime\n") ..core.colorize("#FFFFFF", "Ammunition: 308.Winchester rounds\n") ..core.colorize("#FFFFFF", "Reload time: 1.15\n") ..core.colorize("#be0d00", "The gun is NOT loaded! (Right-click to load)\n")..core.colorize("#FFFFFF", "Gun type: Rifle\n") ..core.colorize("#FFFFFF", "Bullet velocity: 60"), + description = "" ..core.colorize("#35cdff","S.V.D. \n") ..core.colorize("#FFFFFF", "Ranged damage:17 + 30/sec of bullet lifetime\n")..core.colorize("#FFFFFF", "Accuracy: 100%\n") ..core.colorize("#FFFFFF", "knockback: 14\n") ..core.colorize("#FFFFFF", "Critical chance: 30%\n") ..core.colorize("#FFFFFF", "Critical efficiency: x3\n") ..core.colorize("#FFFFFF", "Ammunition: 7.62mm round\n") ..core.colorize("#FFFFFF", "Rate of fire: 1.0\n") ..core.colorize("#FFFFFF", "Reload time: 2.0\n") ..core.colorize("#FFFFFF", "Zoom: 10x\n") ..core.colorize("#be0d00", "Right-click to eject empty bullet shell\n") ..core.colorize("#FFFFFF", "Clip size: 10\n") ..core.colorize("#FFFFFF", "Enemy penetration:30%\n") ..core.colorize("#FFFFFF", "Block penetration:10%\n") ..core.colorize("#FFFFFF", "Gun type: Rifle\n") ..core.colorize("#FFFFFF", "Bullet velocity: 75"), + groups = {not_in_creative_inventory = 1}, inventory_image = "rangedweapons_svd.png", + weapon_zoom = 9, on_use = function(user) minetest.sound_play("rangedweapons_empty", {user}) end, +on_secondary_use = function(itemstack, user, pointed_thing) +eject_shell(itemstack,user,"rangedweapons:svd_rld",1.0,"rangedweapons_rifle_reload_a","rangedweapons:empty_shell") +return itemstack +end, }) - local timer = 0 -minetest.register_globalstep(function(dtime, player) - timer = timer + dtime; - if timer >= 0.001 then - for _, player in pairs(minetest.get_connected_players()) do - local inv = player:get_inventory() - local controls = player:get_player_control() - if player:get_wielded_item():get_name() == "rangedweapons:svd_uld" - and inv:contains_item("main", "rangedweapons:308winchester")then - if controls.RMB then - inv:remove_item("main", "rangedweapons:308winchester") - player:set_wielded_item("rangedweapons:svd_rld") - local pos = player:getpos() - local dir = player:get_look_dir() - local yaw = player:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:empty_shell") - minetest.sound_play("", {object=obj}) - obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) - obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) - obj:setyaw(yaw + math.pi) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or player - end - end - timer = 0 - minetest.sound_play("rangedweapons_reload_a", {player}) -end - end - - if timer >= 1.15 and - player:get_wielded_item():get_name() == "rangedweapons:svd_rld" then - player:set_wielded_item("rangedweapons:svd") - timer = 0 - minetest.sound_play("rangedweapons_reload_b", {player}) +minetest.register_tool("rangedweapons:svd_r", { + rw_next_reload = "rangedweapons:svd_rr", + load_sound = "rangedweapons_rifle_clip_in", + range = 0, + wield_scale = {x=1.9,y=1.9,z=1.1}, + description = "", + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_svd_noclip.png", +}) +minetest.register_tool("rangedweapons:svd_rr", { + rw_next_reload = "rangedweapons:svd_rrr", + load_sound = "rangedweapons_rifle_reload_a", + range = 0, + wield_scale = {x=1.9,y=1.9,z=1.1}, + description = "", + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_svd.png", +}) +minetest.register_tool("rangedweapons:svd_rrr", { + rw_next_reload = "rangedweapons:svd", + load_sound = "rangedweapons_rifle_reload_b", + range = 0, + wield_scale = {x=1.9,y=1.9,z=1.1}, + description = "", + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_svd_rld.png", +}) - - end - end - end - end) - - -minetest.register_craftitem("rangedweapons:svd_rld", { +minetest.register_tool("rangedweapons:svd_rld", { stack_max= 1, range = 0, wield_scale = {x=1.9,y=1.9,z=1.1}, - description = "**RELOADING S.V.D.**", + description = "", + loaded_gun = "rangedweapons:svd", + loaded_sound = "rangedweapons_rifle_reload_b", groups = {not_in_creative_inventory = 1}, inventory_image = "rangedweapons_svd_rld.png", }) minetest.register_tool("rangedweapons:svd", { - description = "" ..core.colorize("#35cdff","S.V.D. \n") ..core.colorize("#FFFFFF", "Ranged damage: 80/sec of bullet lifetime\n")..core.colorize("#FFFFFF", "Accuracy: 100%\n") ..core.colorize("#FFFFFF", "Mob knockback: 14\n") ..core.colorize("#FFFFFF", "Critical chance: 42%\n") ..core.colorize("#FFFFFF", "Critical damage: 200/sec of bullet lifetime\n") ..core.colorize("#FFFFFF", "Ammunition: 308.Winchester rounds\n") ..core.colorize("#FFFFFF", "Reload time: 1.15\n") ..core.colorize("#27a600", "The gun is loaded!\n")..core.colorize("#FFFFFF", "Gun type: Rifle\n") ..core.colorize("#FFFFFF", "Bullet velocity: 60"), + description = "" ..core.colorize("#35cdff","S.V.D. \n") ..core.colorize("#FFFFFF", "Ranged damage:17 + 30/sec of bullet lifetime\n")..core.colorize("#FFFFFF", "Accuracy: 100%\n") ..core.colorize("#FFFFFF", "knockback: 14\n") ..core.colorize("#FFFFFF", "Critical chance: 30%\n") ..core.colorize("#FFFFFF", "Critical efficiency: x3\n") ..core.colorize("#FFFFFF", "Ammunition: 7.62mm round\n") ..core.colorize("#FFFFFF", "Rate of fire: 1.0\n") ..core.colorize("#FFFFFF", "Reload time: 2.0\n") ..core.colorize("#FFFFFF", "Zoom: 10x\n") ..core.colorize("#27a600", "The gun is loaded!\n") ..core.colorize("#FFFFFF", "Clip size: 10\n") ..core.colorize("#FFFFFF", "Enemy penetration:30%\n") ..core.colorize("#FFFFFF", "Block penetration:10%\n") ..core.colorize("#FFFFFF", "Gun type: Rifle\n") ..core.colorize("#FFFFFF", "Bullet velocity: 75"), range = 0, - groups = {not_in_creative_inventory = 1}, + weapon_zoom = 9, wield_scale = {x=1.9,y=1.9,z=1.1}, inventory_image = "rangedweapons_svd.png", +RW_gun_capabilities = { + gun_damage = {fleshy=17,knockback=14}, + gun_crit = 30, + gun_critEffc = 3.0, + suitable_ammo = {{"rangedweapons:762mm",10}}, + gun_skill = {"rifle_skill",20}, + gun_magazine = "rangedweapons:rifle_mag", + gun_icon = "rangedweapons_svd_icon.png", + gun_unloaded = "rangedweapons:svd_r", + gun_cooling = "rangedweapons:svd_uld", + gun_velocity = 75, + gun_accuracy = 100, + gun_cooldown = 1.0, + gun_reload = 2.0/4, + gun_projectiles = 1, + has_shell = 0, + gun_durability = 700, + gun_smokeSize = 8, + gun_dps = 30, + gun_mob_penetration = 30, + gun_node_penetration = 10, + gun_unload_sound = "rangedweapons_rifle_clip_out", + gun_sound = "rangedweapons_rifle_b", + }, + on_secondary_use = function(itemstack, user, pointed_thing) +rangedweapons_reload_gun(itemstack, user) +return itemstack +end, on_use = function(itemstack, user, pointed_thing) - local pos = user:getpos() - local dir = user:get_look_dir() - local yaw = user:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:svdshot") - if obj then - minetest.sound_play("rangedweapons_rifle_a", {object=obj}) - obj:setvelocity({x=dir.x * 60, y=dir.y * 60, z=dir.z * 60}) - obj:setacceleration({x=dir.x * 0, y=0, z=dir.z * 0}) - obj:setyaw(yaw + math.pi) - minetest.add_particle({ - pos = pos, - velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} , - acceleration = {x=dir.x * -4, y=2, z=dir.z * -4}, - expirationtime = 1.5, - size = 8, - collisiondetection = false, - vertical = false, - texture = "tnt_smoke.png", - glow = 5, - }) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or user - itemstack = "rangedweapons:svd_uld" - end - end - end - return itemstack +rangedweapons_shoot_gun(itemstack, user) +return itemstack end, + }) -local rangedweapons_svdshot = { - physical = false, - timer = 0, - visual = "sprite", - visual_size = {x=0.3, y=0.3}, - textures = {"rangedweapons_invisible.png"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_svdshot.on_step = function(self, dtime, node, pos) - self.timer = self.timer + dtime - local tiem = 0.002 - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.05 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1.5) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:svdshot" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 80) <= 42 then - local damage = 200 * self.timer - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 28}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = 80 * self.timer - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 14}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - if math.random(1, 100) <= 42 then - local damage = 200 * self.timer - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = 80 * self.timer - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - if timer >= 0.002 + tiem then - minetest.add_particle({ - pos = pos, - velocity = 0, - acceleration = {x=0, y=0, z=0}, - expirationtime = 0.06, - size = 3, - collisiondetection = false, - vertical = false, - texture = "rangedweapons_bullet_fly.png", - glow = 15, - }) - tiem = tiem + 0.002 - end - if self.timer >= 4.0 then - self.object:remove() - end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") then - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - if node.name == "rangedweapons:barrel" or - node.name == "doors:door_glass_a" or - node.name == "doors:door_glass_b" or - node.name == "xpanes:pane" or - node.name == "xpanes:pane_flat" or - node.name == "vessels:drinking_glass" or - node.name == "vessels:glass_bottle" or - node.name == "default:glass" then - minetest.get_node_timer(pos):start(0) - end - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end -end -end - - - -minetest.register_entity("rangedweapons:svdshot", rangedweapons_svdshot ) - diff --git a/taurus.lua b/taurus.lua index 7a64f0e..fe0ca33 100644 --- a/taurus.lua +++ b/taurus.lua @@ -1,228 +1,50 @@ -minetest.register_craft({ - output = 'rangedweapons:taurus_uld', - recipe = { -{'rangedweapons:gunsteel_ingot', 'default:mese_crystal', 'default:mese_crystal_fragment'}, -{'rangedweapons:gunsteel_ingot', 'default:diamondblock', 'rangedweapons:gunsteel_ingot'}, - {'', 'rangedweapons:gunsteel_ingot', 'rangedweapons:plastic_sheet'}, - } -}) -minetest.register_craft({ - output = 'rangedweapons:taurus_uld', - recipe = { -{'moreores:silver_ingot', 'default:mese_crystal', 'default:mese_crystal_fragment'}, -{'moreores:silver_ingot', 'default:diamondblock', 'moreores:silver_ingot'}, - {'', 'moreores:silver_ingot', 'rangedweapons:plastic_sheet'}, - } -}) - -minetest.register_craftitem("rangedweapons:taurus_uld", { - stack_max= 1, - wield_scale = {x=1.25,y=1.25,z=1.1}, - range = 0, - description = "" ..core.colorize("#35cdff","Taurus\n") ..core.colorize("#FFFFFF", "Ranged damage: 14-24\n") ..core.colorize("#FFFFFF", "Accuracy: 95%\n") ..core.colorize("#FFFFFF", "Mob knockback: 10\n") ..core.colorize("#FFFFFF", "Critical chance: 36%\n") ..core.colorize("#FFFFFF", "Critical damage: 30-50\n") ..core.colorize("#FFFFFF", "Ammunition: .357 Magnum rounds\n") ..core.colorize("#FFFFFF", "Reload time: 0.35\n") ..core.colorize("#be0d00", "The gun is NOT loaded! (Right-click to load)\n")..core.colorize("#FFFFFF", "Gun type: Revolver\n") ..core.colorize("#FFFFFF", "Bullet velocity: 55"), - inventory_image = "rangedweapons_taurus.png", - on_use = function(user) - minetest.sound_play("rangedweapons_empty", {user}) - end, -}) - - local timer = 0 -minetest.register_globalstep(function(dtime, player) - timer = timer + dtime; - if timer >= 0.001 then - for _, player in pairs(minetest.get_connected_players()) do - local inv = player:get_inventory() - local controls = player:get_player_control() - if player:get_wielded_item():get_name() == "rangedweapons:taurus_uld" - and inv:contains_item("main", "rangedweapons:357")then - if controls.RMB then - inv:remove_item("main", "rangedweapons:357") - player:set_wielded_item("rangedweapons:taurus_rld") - local pos = player:getpos() - local dir = player:get_look_dir() - local yaw = player:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:empty_shell") - minetest.sound_play("", {object=obj}) - obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) - obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) - obj:setyaw(yaw + math.pi) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or player - end - end - timer = 0 - minetest.sound_play("rangedweapons_reload_b", {player}) - -end - end - - if timer >= 0.35 and - player:get_wielded_item():get_name() == "rangedweapons:taurus_rld" then - player:set_wielded_item("rangedweapons:taurus") - timer = 0 - minetest.sound_play("rangedweapons_reload_a", {player}) - - - - end - end - end - end) - - -minetest.register_craftitem("rangedweapons:taurus_rld", { +minetest.register_tool("rangedweapons:taurus_rld", { stack_max= 1, range = 0, wield_scale = {x=1.25,y=1.25,z=1.1}, - description = "**RELOADING COLT taurus**", + description = "", + loaded_gun = "rangedweapons:taurus", groups = {not_in_creative_inventory = 1}, inventory_image = "rangedweapons_taurus_rld.png", }) minetest.register_tool("rangedweapons:taurus", { - description = "" ..core.colorize("#35cdff","Taurus \n") ..core.colorize("#FFFFFF", "Ranged damage: 14-24\n")..core.colorize("#FFFFFF", "Accuracy: 95%\n") ..core.colorize("#FFFFFF", "Mob knockback: 10\n") ..core.colorize("#FFFFFF", "Critical chance: 36%\n") ..core.colorize("#FFFFFF", "Critical damage: 30-50\n") ..core.colorize("#FFFFFF", "Ammunition: .357 Magnum rounds\n") ..core.colorize("#FFFFFF", "Reload time: 0.35\n") ..core.colorize("#27a600", "The gun is loaded!\n")..core.colorize("#FFFFFF", "Gun type: Revolver\n") ..core.colorize("#FFFFFF", "Bullet velocity: 55"), + description = "" ..core.colorize("#35cdff","Taurus raging bull \n") ..core.colorize("#FFFFFF", "Ranged damage: 14\n")..core.colorize("#FFFFFF", "Accuracy: 97%\n") ..core.colorize("#FFFFFF", "Gun knockback: 8\n") ..core.colorize("#FFFFFF", "Critical chance: 22%\n") ..core.colorize("#FFFFFF", "Critical efficiency: 3.1x\n") ..core.colorize("#FFFFFF", "Ammunition: .44 Magnum rounds\n") ..core.colorize("#FFFFFF", "Reload time: 0.25\n") ..core.colorize("#FFFFFF", "Clip Size: 6\n") ..core.colorize("#FFFFFF", "Block penetration: 8%\n") +..core.colorize("#FFFFFF", "penetration: 24%\n") ..core.colorize("#FFFFFF", "Gun type: Revolver\n") ..core.colorize("#FFFFFF", "Bullet velocity: 64"), range = 0, - groups = {not_in_creative_inventory = 1}, wield_scale = {x=1.25,y=1.25,z=1.1}, inventory_image = "rangedweapons_taurus.png", +RW_gun_capabilities = { + gun_damage = {fleshy=14,knockback=8}, + gun_crit = 22, + gun_critEffc = 3.1, + suitable_ammo = {{"rangedweapons:44",6}}, + gun_skill = {"revolver_skill",40}, + gun_icon = "rangedweapons_taurus_icon.png", + gun_unloaded = "rangedweapons:taurus_rld", + gun_cooling = "rangedweapons:taurus", + gun_velocity = 55, + gun_accuracy = 97, + gun_cooldown = 0.2, + gun_reload = 0.4, + gun_projectiles = 1, + gun_durability = 1750, + gun_smokeSize = 7, + gun_mob_penetration = 24, + gun_node_penetration = 8, + gun_unload_sound = "rangedweapons_shell_insert", + gun_sound = "rangedweapons_deagle", + }, on_use = function(itemstack, user, pointed_thing) - local pos = user:getpos() - local dir = user:get_look_dir() - local yaw = user:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:taurusshot") - if obj then - minetest.sound_play("rangedweapons_revolver", {object=obj}) - obj:setvelocity({x=dir.x * 55, y=dir.y * 55, z=dir.z * 55}) - obj:setacceleration({x=dir.x * math.random(-0.5,0.5), y=math.random(-0.5,0.5), z=dir.z * math.random(-0.5,0.5)}) - obj:setyaw(yaw + math.pi) - minetest.add_particle({ - pos = pos, - velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} , - acceleration = {x=dir.x * -4, y=2, z=dir.z * -4}, - expirationtime = 1.5, - size = 8, - collisiondetection = false, - vertical = false, - texture = "tnt_smoke.png", - glow = 5, - }) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or user - itemstack = "rangedweapons:taurus_uld" - end - end - end - return itemstack +rangedweapons_shoot_gun(itemstack, user) +return itemstack end, + on_secondary_use = function(itemstack, user, pointed_thing) +rangedweapons_single_load_gun(itemstack, user) +return itemstack +end, }) -local rangedweapons_taurusshot = { - physical = false, - timer = 0, - visual = "sprite", - visual_size = {x=0.3, y=0.3}, - textures = {"rangedweapons_invisible.png"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_taurusshot.on_step = function(self, dtime, node, pos) - self.timer = self.timer + dtime - local tiem = 0.002 - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.06 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1.5) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:taurusshot" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 36 then - local damage = math.random(30,50) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 20}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(14,24) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 10}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - if math.random(1, 100) <= 36 then - local damage = math.random(30,50) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(14,24) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - if timer >= 0.002 + tiem then - minetest.add_particle({ - pos = pos, - velocity = 0, - acceleration = {x=0, y=0, z=0}, - expirationtime = 0.06, - size = 3, - collisiondetection = false, - vertical = false, - texture = "rangedweapons_bullet_fly.png", - glow = 15, - }) - tiem = tiem + 0.002 - end - if self.timer >= 4.0 then - self.object:remove() - end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") then - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - if node.name == "rangedweapons:barrel" or - node.name == "doors:door_glass_a" or - node.name == "doors:door_glass_b" or - node.name == "xpanes:pane" or - node.name == "xpanes:pane_flat" or - node.name == "vessels:drinking_glass" or - node.name == "vessels:glass_bottle" or - node.name == "default:glass" then - minetest.get_node_timer(pos):start(0) - end - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end -end -end - - - -minetest.register_entity("rangedweapons:taurusshot", rangedweapons_taurusshot ) - diff --git a/tec9.lua b/tec9.lua index 0261652..5e92944 100644 --- a/tec9.lua +++ b/tec9.lua @@ -1,177 +1,72 @@ -minetest.register_craft({ - output = 'rangedweapons:tec9', - recipe = { - {'rangedweapons:plastic_sheet', 'rangedweapons:plastic_sheet', 'rangedweapons:plastic_sheet'}, - {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, - {'default:steel_ingot', 'default:mese_crystal_fragment', 'default:steel_ingot'}, - } + + + +minetest.register_craftitem("rangedweapons:tec9_r", { + stack_max= 1, + wield_scale = {x=1.25,y=1.25,z=1.50}, + description = "", + range = 0, + rw_next_reload = "rangedweapons:tec9_rr", + load_sound = "rangedweapons_handgun_mag_in", + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_tec9_rld.png", }) +minetest.register_craftitem("rangedweapons:tec9_rr", { + stack_max= 1, + wield_scale = {x=1.25,y=1.25,z=1.50}, + description = "", + range = 0, + rw_next_reload = "rangedweapons:tec9_rrr", + load_sound = "rangedweapons_reload_a", + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_tec9.png", +}) + +minetest.register_craftitem("rangedweapons:tec9_rrr", { + stack_max= 1, + wield_scale = {x=1.25,y=1.25,z=1.50}, + description = "", + range = 0, + rw_next_reload = "rangedweapons:tec9", + load_sound = "rangedweapons_reload_b", + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_tec9.png", +}) + + + minetest.register_craftitem("rangedweapons:tec9", { stack_max= 1, wield_scale = {x=1.25,y=1.25,z=1.50}, - description = "" ..core.colorize("#35cdff","TEC-9\n") ..core.colorize("#FFFFFF", "Ranged damage: 2-4\n") ..core.colorize("#FFFFFF", "accuracy: 75%\n") ..core.colorize("#FFFFFF", "Mob knockback: 0\n") ..core.colorize("#FFFFFF", "Critical chance: 10%\n") ..core.colorize("#FFFFFF", "Critical damage: 4-7\n") ..core.colorize("#FFFFFF", "Ammunition: 9mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.2\n") ..core.colorize("#FFFFFF", "Gun type: machine pistol\n") ..core.colorize("#FFFFFF", "Bullet velocity: 20"), + description = "" ..core.colorize("#35cdff","TEC-9\n") ..core.colorize("#FFFFFF", "Gun damage: 1\n") ..core.colorize("#FFFFFF", "accuracy: 75%\n") ..core.colorize("#FFFFFF", "Gun knockback: 0\n") ..core.colorize("#FFFFFF", "Gun Critical chance: 9%\n") ..core.colorize("#FFFFFF", "Gun Critical efficiency: 1.9x\n") ..core.colorize("#FFFFFF", "Reload delay: 1.0\n") ..core.colorize("#FFFFFF", "Clip size: 50\n") ..core.colorize("#FFFFFF", "Ammunition: 9x19mm parabellum\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.2\n") ..core.colorize("#FFFFFF", "Gun type: machine pistol\n") ..core.colorize("#FFFFFF", "Bullet velocity: 20"), range = 0, inventory_image = "rangedweapons_tec9.png", + RW_gun_capabilities = { + automatic_gun = 1, + gun_damage = {fleshy=1,knockback=0}, + gun_crit = 9, + gun_critEffc = 1.9, + suitable_ammo = {{"rangedweapons:9mm",50}}, + gun_skill = {"mp_skill",80}, + gun_magazine = "rangedweapons:machinepistol_mag", + gun_icon = "rangedweapons_tec9_icon.png", + gun_unloaded = "rangedweapons:tec9_r", + gun_velocity = 20, + gun_accuracy = 75, + gun_cooldown = 0.2, + gun_reload = 1.0/4, + gun_projectiles = 1, + has_shell = 1, + gun_gravity = 0, + gun_durability = 1100, + gun_smokeSize = 4, + gun_unload_sound = "rangedweapons_handgun_mag_out", + gun_sound = "rangedweapons_machine_pistol", + }, + on_secondary_use = function(itemstack, user, pointed_thing) +rangedweapons_reload_gun(itemstack, user) +return itemstack +end, }) -local timer = 0 -minetest.register_globalstep(function(dtime, player) - timer = timer + dtime; - if timer >= 0.2 then - for _, player in pairs(minetest.get_connected_players()) do - local inv = player:get_inventory() - local controls = player:get_player_control() - if controls.LMB then - timer = 0 - local wielded_item = player:get_wielded_item():get_name() - if wielded_item == "rangedweapons:tec9" then - if not inv:contains_item("main", "rangedweapons:9mm") then -minetest.sound_play("rangedweapons_empty", {object=player}) - else - if wielded_item == "rangedweapons:tec9" then - inv:remove_item("main", "rangedweapons:9mm") - local pos = player:getpos() - local dir = player:get_look_dir() - local yaw = player:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:tec9shot") - if obj then - minetest.sound_play("rangedweapons_machine_pistol", {object=obj}) - obj:setvelocity({x=dir.x * 20, y=dir.y * 20, z=dir.z * 20}) - obj:setacceleration({x=dir.x * math.random(-2.5,2.5), y=math.random(-2.5,2.5), z=dir.z * math.random(-2.5,2.5)}) - obj:setyaw(yaw + math.pi) - pos.y = pos.y + 0 - local obj = minetest.add_entity(pos, "rangedweapons:empty_shell") - minetest.sound_play("", {object=obj}) - obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) - obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) - obj:setyaw(yaw + math.pi) - minetest.add_particle({ - pos = pos, - velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} , - acceleration = {x=dir.x * -4, y=2, z=dir.z * -4}, - expirationtime = 0.30, - size = 4, - collisiondetection = false, - vertical = false, - texture = "tnt_smoke.png", - glow = 5, - }) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or player - - end - end - end - end -end - -end - end - end - end - end) - -local rangedweapons_tec9shot = { - physical = false, - timer = 0, - visual = "sprite", - visual_size = {x=0.3, y=0.3}, - textures = {"rangedweapons_invisible.png"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_tec9shot.on_step = function(self, dtime, node, pos) - self.timer = self.timer + dtime - local tiem = 0.002 - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.17 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:tec9shot" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 10 then - local damage = math.random(4,7) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=0}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(2,4) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 0}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - if math.random(1, 100) <= 10 then - local damage = math.random(4,7) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(2,4) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - if timer >= 0.002 + tiem then - minetest.add_particle({ - pos = pos, - velocity = 0, - acceleration = {x=0, y=0, z=0}, - expirationtime = 0.06, - size = 3, - collisiondetection = false, - vertical = false, - texture = "rangedweapons_bullet_fly.png", - glow = 15, - }) - tiem = tiem + 0.002 - end - if self.timer >= 4.0 then - self.object:remove() - end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") then - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - if node.name == "rangedweapons:barrel" or - node.name == "doors:door_glass_a" or - node.name == "doors:door_glass_b" or - node.name == "xpanes:pane" or - node.name == "xpanes:pane_flat" or - node.name == "vessels:drinking_glass" or - node.name == "vessels:glass_bottle" or - node.name == "default:glass" then - minetest.get_node_timer(pos):start(0) - end - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end -end -end - - - -minetest.register_entity("rangedweapons:tec9shot", rangedweapons_tec9shot ) \ No newline at end of file diff --git a/textures/rangedweapons_408cheytac.png b/textures/rangedweapons_408cheytac.png new file mode 100644 index 0000000000000000000000000000000000000000..c3319485655d49828306a3915bf410b25ff3979e GIT binary patch literal 3114 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 FV1i~4mD&IR literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_50ae.png b/textures/rangedweapons_50ae.png new file mode 100644 index 0000000000000000000000000000000000000000..b58681890ee543fe1767b5df677e4b70a51c186e GIT binary patch literal 3046 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 JPDHLkV1nAf--!SK literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_aa12_rld.png b/textures/rangedweapons_aa12_rld.png new file mode 100644 index 0000000000000000000000000000000000000000..e3d1ea707cf6d9f52634327d25baddab2bc1d275 GIT binary patch literal 3300 zcmV))_P)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} z0006HNklB3C zkRXu+dH=wf;)Ya^)KsneR!y%oZD~u(jwzY6e7|`!?|Z|D2wyo^WSBVmYkKyUEboP2 zyCDFue$H9j#rrY<_g`Gnbsa~4P1(Z1c0*wpc2Zmo?!CUV{eF)$#Nd1)+qMygA&Qh~ zbqfH%e{pF#ox-+lIF17VkW%9B2RZ}j%iuqNTDhia==FL403k%D5PcbdrzaxAWS7eY zaU3TK2q7^3j?S#YvlEYo;CYjegy2pKzsHd*$tw2;(KtZVIY&L5JqSh8fhRM<}w;)uami_0qrqV@*$p+^W&FAxEP6&aq zl;pZDMxzmajK^%Z+mTfz4eO33KD->MlU zMQYtAq`Y!RD=x^cJ}bbG#K(JX}OA$J4RiE#D%a5yC3odV=Fs_d3MM1i8> icco$7)GRtLp9280KLZ*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} z00073Nklk^ zkjZPnUOHs3hb#d@i$$Xh0ui`kZcl(4_+160EZiw&pxe7rz&lr;j)Ly!se*6%bYaXls z0PFP{0AQLXD5aZc(KZ+iB4Zbeg#=E(+ZTjNmd?K0=fd&G4|qK10C0Wx6dBjEsuD2u zS-@}{2gBiT)8;r17-Ld@N+~F%c$jthMJ*2lCJiF$QMlD=eMH;$&;Mc-7iaTeg^|0&k6$u?hyo(gPHQ!Sk-L_-Z#5tjkmfiUTe;`p&I3?`^Os6V?4Kkpu literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_ak47_rld.png b/textures/rangedweapons_ak47_rld.png new file mode 100644 index 0000000000000000000000000000000000000000..fc54533dffc020f2cf73b595eee6cdd0ffa669c5 GIT binary patch literal 3333 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 P00000NkvXXu0mjfw~8~* literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_antigun_block.png b/textures/rangedweapons_antigun_block.png new file mode 100644 index 0000000000000000000000000000000000000000..9e87ea0fa6bf29a341eecac37dfb424e4a929259 GIT binary patch literal 2984 zcmV;Z3s>}sP)004&%004{+008|`004nN004b?008NW002DY000@xb3BE2000U( zX+uL$P-t&-Z*ypGa3D!TLm+T+Z)Rz1WdHz3$DNjUR8-d%htIutdZEoQ0#b(FyTAa_ zdy`&8VVD_UC<6{NG_fI~0ue<-nj%P0#DLLIBvwSR5EN9f2P6n6F&ITuEN@2Ei>|D^ z_ww@lRz|vC zuzLs)$;-`!o*{AqUjza0dRV*yaMRE;fKCVhpQKsoe1Yhg01=zBIT!&C1$=TK@rP|Ibo3vKKm@PqnO#LJhq6%Ij6Hz*<$V$@wQAMN5qJ)hzm2h zoGcOF60t^#FqJFfH{#e-4l@G)6iI9sa9D{VHW4w29}?su;^hF~NC{tY+*d5%WDCTX za!E_i;d2ub1#}&jF5T4HnnCyEWTkKf0>c0%E1Ah>(_PY1)0w;+02c53Su*0<(nUqK zG_|(0G&D0Z{i;y^b@OjZ+}lNZ8Th$p5Uu}MTtq^NHl*T1?CO*}7&0ztZsv2j*bmJyf3G7=Z`5B*PvzoDiKdLpOAxi2$L0#SX*@cY z_n(^h55xYX#km%V()bZjV~l{*bt*u9?FT3d5g^g~#a;iSZ@&02Abxq_DwB(I|L-^b zXThc7C4-yrInE_0gw7K3GZ**7&k~>k0Z0NWkO#^@9q0fwx1%qj zZ=)yBuQ3=54Wo^*!gyjLF-e%Um=erBOdIALW)L%unZshS@>qSW9o8Sq#0s#5*edK% z>{;v(b^`kbN5rY%%y90wC>#%$kE_5P!JWYk;U;klcqzOl-UjcFXXA75rT9jCH~u<) z0>40zCTJ7v2qAyk54cquI@7b&LHdZ`+zlTss6bJ7%PQ)z$cROu4wBhpu-r)01) zS~6}jY?%U?gEALn#wiFzo#H}aQ8rT=DHkadR18&{>P1bW7E`~Y4p3)hWn`DhhRJ5j z*2tcg9i<^OEt(fCg;q*CP8+7ZTcWhYX$fb^_9d-LhL+6BEtPYWVlfKTBusSTASKKb%HuWJzl+By+?gkLq)?+BTu761 zjmyXF)a;mc^>(B7bo*HQ1NNg1st!zt28YLv>W*y3CdWx9U8f|cqfXDAO`Q48?auQq zHZJR2&bcD49Ip>EY~kKEPV6Wm+eXFV)D)_R=tM0@&p?(!V*Qu1PXHG9o^ zTY0bZ?)4%01p8F`JoeS|<@=<@RE7GY07EYX@lwd>4oW|Yi!o+Su@M`;WuSK z8LKk71XR(_RKHM1xJ5XYX`fk>`6eqY>qNG6HZQwBM=xi4&Sb88?zd}EYguc1@>KIS z<&CX#T35dwS|7K*XM_5Nf(;WJJvJWRMA($P>8E^?{IdL4o5MGE7bq2MEEwP7v8AO@ zqL5!WvekBL-8R%V?zVyL=G&{be=K4bT`e{#t|)$A!YaA?jp;X)-+bB;zhj`(vULAW z%ue3U;av{94wp%n<(7@__S@Z2PA@Mif3+uO&y|X06?J#oSi8M;ejj_^(0<4Lt#wLu#dYrva1Y$6_o(k^&}yhSh&h;f@JVA>W8b%o zZ=0JGnu?n~9O4}sJsfnnx7n(>`H13?(iXTy*fM=I`sj`CT)*pTHEgYKqqP+u1IL8N zo_-(u{qS+0<2@%BCt82d{Gqm;(q7a7b>wu+b|!X?c13m#p7cK1({0<`{-e>4hfb-U zsyQuty7Ua;Ou?B?XLHZaol8GAb3Wnxcu!2v{R_`T4=x`(GvqLI{-*2AOSimk zUAw*F_TX^n@STz9kDQ z$NC=!KfXWC8h`dn#xL(D3Z9UkR7|Q&Hcy#Notk!^zVUSB(}`#4&lYA1f0h2V_PNgU zAAWQEt$#LRcH#y9#i!p(Udq2b^lI6wp1FXzN3T;~FU%Lck$-deE#qz9yYP3D3t8{6 z?<+s(e(3(_^YOu_)K8!O1p}D#{JO;G(*OVf32;bRa{vGi!~g&e!~vBn4jTXf0NF`I zK~y+TV?2NU{C{C#VFq#mv9uGU&3fLxqS3Kh7UvU;#0%|NYG%bYKTq(9qD3 z0q80)8y7fg>&y_w&I4vMfk`L;X-1~80c6b}fMNhLz-96?2xq|JbOFrSAk8p<%@C{xVABi& z=-~qb7zSX|j7=j9pcsJ5W)Q$-2;2bVs6tkZ&vp<1XQpp?B~UK$K$Dr3LG|)!hyhSB el7XS2Ap-#BNMORnCAV<^0000KLZ*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} z0002dNklw@{ZvP?Ugz(`>VU{_NXPB0?Q`)RY=c_5k!c3pt+V>gx#__w4|KbL4=uhf@Hw z)&N**-Oy$mx}=S9uo5r;9M(H`shK1IB)79Hoz0}*ZB-dOY8KLZ*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} z0001yNkl>oQddDJ3!uS`v}ZT2)VHLvK}PHs=E#>dy_9W=75#stV@= z{iea5{*}QIzN&8;Sa5fP7Tij&44e<7s@<^p1m^?A7`x!+C+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} z0006CNklReLfr!GX;o<@a`i3 z5y@Ot{6YxeoIA^_BfGZ<5JFhJoTnfNN_kCLwsV66Kq&b=e+-{xBviB%F525dCUT8I;xDy_KW1TN&&H1Gy);;BPY3mA7u>E1~h$c zUgq(5M6XRwt+z{>uV(PfA8VbPuVzks?;kH&+24Or@%r`z003us$?&`A5%>`>#?ol- zqzmK~aiKD0O?l?EjsWwXDW{1ZtpGUePq^ML=@#Ax0Eok+Fe1+KlJ4!ke$wdu+zF}+ zLhA@P>`&MvZO-yi7zNsZI7}e$qclAck;Gd=Kg!TXc002ovPDHLkV1frT8*Kmp literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_awp_noclip.png b/textures/rangedweapons_awp_noclip.png new file mode 100644 index 0000000000000000000000000000000000000000..5825b8704bf48c8116380c32ba8aafcb4a1b49d3 GIT binary patch literal 3375 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 FV1l1eNACat literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_benelli_icon.png b/textures/rangedweapons_benelli_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..eb575cd90ea3a7acd17988296d033556ccf78276 GIT binary patch literal 3157 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 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_beretta_icon.png b/textures/rangedweapons_beretta_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b1309f4cec4f99bb84235c355f499ed9e1f60a80 GIT binary patch literal 3082 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 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_blue_ray.png b/textures/rangedweapons_blue_ray.png new file mode 100644 index 0000000000000000000000000000000000000000..96e1eb5deee34847dcdb9005b577ff7898731a7d GIT binary patch literal 2991 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 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_boltaction_img.png b/textures/rangedweapons_boltaction_img.png new file mode 100644 index 0000000000000000000000000000000000000000..ee655bb595a52da46052cee6aa5a7f264f805b31 GIT binary patch literal 2898 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 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_buckball.png b/textures/rangedweapons_buckball.png index c30a1a81de0d887fbd9ec19f2d193ec3990245a0..342f44262637414934be5948d5604735414292d0 100644 GIT binary patch delta 148 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 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_empty_icon.png b/textures/rangedweapons_empty_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ae7ff3fde436a70fa5fa17b192c7e90e59ff4731 GIT binary patch literal 2823 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 z0000oNklCES literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_fire_particle.png b/textures/rangedweapons_fire_particle.png new file mode 100644 index 0000000000000000000000000000000000000000..2a0ddd3aba9a3af0f04500062faf4bf5d91dd284 GIT binary patch literal 3743 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 AuK)l5 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_g36_icon.png b/textures/rangedweapons_g36_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..46ea728f065d2a81c1e9bc5781b068ca79c4f92f GIT binary patch literal 3177 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 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_golden_deagle.png b/textures/rangedweapons_golden_deagle.png new file mode 100644 index 0000000000000000000000000000000000000000..bf517d6194e2543578a7861aaa5018daebdc0f80 GIT binary patch literal 3093 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 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_golden_deagle_icon.png b/textures/rangedweapons_golden_deagle_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..03a109e02b0b4e37b710919d258799c69d2f8ede GIT binary patch literal 3247 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 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_golden_deagle_rld.png b/textures/rangedweapons_golden_deagle_rld.png new file mode 100644 index 0000000000000000000000000000000000000000..b68ca20b688d686127791e89c28cc3c1ee66e02a GIT binary patch literal 3103 zcmV+)4B+#LP)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} z0003>Nkl^~;M$h-O%hcxe_%#iJn_K&90asd-4n0neTa z8I@3J^~6S2L0-c9Ef}w%5bfv2upB|xfNTSv*8}8aM}-EykdIDrgw)$_Oa(L#a%#WP z3y_6vj?NxAT+At1yHZb`@sdQL%ss4002ovPDHLkV1gz!!oL6j literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_green_ray.png b/textures/rangedweapons_green_ray.png new file mode 100644 index 0000000000000000000000000000000000000000..1093b76e0fecd886d42697933116767fc8ab189b GIT binary patch literal 3000 zcmV;p3rF;cP)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} z0002vNklxcFUf5%5jT0`9nc)U$wIy9u|bCIVWwsO)o+#sh|gb+w~%2p97} uQ7UZ?XsR|a3X4JFF<&prtNcvA)N=p^b8Z&5Kh#7300003xxEEP)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{NklBIe`13;!&iK50 z_b!~RtgOs{P=lna8LK$s(9cYO0RXk1KyiS@>|y`_002ovPDHLkV1j}!dOrXF literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_handgun_mag_black.png b/textures/rangedweapons_handgun_mag_black.png new file mode 100644 index 0000000000000000000000000000000000000000..236cdee15e9609cb3d42394ae1b2bfa21193df98 GIT binary patch literal 2861 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 LNkvXXu0mjfG(b*U literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_handgun_mag_white.png b/textures/rangedweapons_handgun_mag_white.png new file mode 100644 index 0000000000000000000000000000000000000000..7bd3425f521cf0ac354220ee5771c8a02acdb52f GIT binary patch literal 2861 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 LNkvXXu0mjfST##a literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_headhit.png b/textures/rangedweapons_headhit.png new file mode 100644 index 0000000000000000000000000000000000000000..705a9aa4797ea8eccff5792a9ff97df364891872 GIT binary patch literal 2914 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 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_headshot.png b/textures/rangedweapons_headshot.png new file mode 100644 index 0000000000000000000000000000000000000000..03384df96ba1552433da2df4d073f04b360fb76e GIT binary patch literal 3316 zcmVKLZ*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} z0006XNklAXL12H|oX&46|u!wdij7nrNBD_f1Hn0bGI-TBmx0h2%OU;TnN87|OWU+-nB+a& z7DI1$ByrU5%^8idBBXt+phLILm zDXV&o6PwJ6hdPcfVTxn8E?D`nAG*UoK@y_-=8E3RQr6&`gN$P#;qHbUkU9^!M}*!ryd~g-$!R16 y!v!W>fY6(-4Hv=)lv1rKLZ*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} z0002LNklbY5!hM;4lxG5VoXmk zh-L}h{t!|@cxtmR@5{?fhRh60w8BFD9*_V)ez=XA`TqPGP;)H^0J5|;RfTU$YA(AD zFsBflZ7?NOMV8hU{|x}!O=Zm7Grjj<&IeFt?jBMZaH0eNoO4iBIOlo*5g8B14MYUY zJR69s_W-^v$+wZS27uZEKLZ*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} z0001hNklS$cFR26o-MvrDR`RNog$(7dLZg31#pXNNH*gc0^aiL@wX!Y$UyhH@A2{c5b93XI zbNG#KETwcp2uLX%e&G{aYq4A|@$m5QD-f~&bA5dcYweFijEsLVAcVkLi=(3>6h-m# z3TUlC2*KmyBczl+szR)kiU7b`3qlB%%O!r&l#z3P>!fMw2qB=9;`sO&N-1Pn76~C5 zVLbdGCIo;y&m(IsR;yJ|LI~j)V*mioIXLG404XKfz_tcxf{;?e7z4%_wASItr_*UP z1Vr34nCE$S_VZP=8Cxmd@cp`3_ z@W*g=cJ{4GjN05?-^@dNhZ3W8eHjF1pg4^3$%x1ITiMoGUN~!IV@GAw3F{s~+BuVh} z^n|Ocs}D+W&Y`vLoRV>uMTC%W-u`AhKR@H}@bDic>Yf-3fKm!V2z=+PL!6$T;_mJ) zK=kbqao2^E(y)1x67%^S=jZ3(ocGFuc$@fag7A?0`}@5hIsvR!tJb-qC@>z6A*Do~ z=e;4~K2Lx9xmRedF&>X`a&qF|Cj*4m8flttgxGiun~M71BuTKhw}+jb9qjJzf>Mgb zVu7lv!h6GHGC`i_t;US|p1Us&0PFP{udlCoe}Bi@+gm8El!{(nUH|}PS$?U+sIU3z zIbYv&yTszOllG)-}NdFkrwCX)#U@jw@U_=1bY z0swGvae=Zdzl`QV0Gc5D`ETkAg8_Vo@UguqmInp+Y|Jh_;m-igePEh7xQQzO0000< KMNUMnLSTZigklT; delta 705 zcmV;y0zUnV8}u5mzzTn#Nkl1w3D?|j@IAF1f-4)Bily(7G(0bbx z>%mor)A$qo2{r@Qo?GmHP)L)`GO!39T%jqmsl-m^stN0wb(6iEJFp~dhRl=qeZOx8 zV+`l#=f)VrCVs9`%7kHvQp&J_;TA=~{rx?gf^hB4rXbub%gBH8yo5;8bTbO%dCtSb z14^k+RlzaF5Qd@geIL*B5JJ%F^+=Kgt+n$h0Cq%CWU3&-FsxK0NfM_u3jijQiBl8> zd7hV{wCVszDUnhFpp;@6*xCS95K1YsEW`KxGN4<#SI*C0U!67}-dHd{?28A30li)i ztu?;ylVurOyH|e>!0YpcQA(k;UfYgJfG`Y=loBBXaU54dNGX~A`R)Mx`1aeZ3*jz% zU~L!-2E=i^)D8fx_1c;E(1Q8W{9j5e1!w|cGqDcDhXBhU07jz`37qCrRRD zSw>M5<^MqtaCv#jXf!G_@%nsW<{A{OSTL`E_1mft1Ob1KkB^+4oxM>)N=cfgwJmV# zO!7RhOuns*r>7?l4-eld(R4Sh1t5gL^E`le5XZ;ITwh<85KZ?8x9&tCMEUY6CC1}1 zCnqOJDI4_zcb)cG1)-Ee2*JU@K_iG-0QSUGHR3oXilQ&ntpY4U n*tWf@Ew>7=7|c3*!ruV^h)+^6=(aSF00000NkvXXu0mjfX>(BZ diff --git a/textures/rangedweapons_jackhammer_icon.png b/textures/rangedweapons_jackhammer_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f5cb670df6c8decf26284f8dd438e6c000f6dc50 GIT binary patch literal 3325 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 Hu0mjfxg;;U literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_jackhammer_rld.png b/textures/rangedweapons_jackhammer_rld.png new file mode 100644 index 0000000000000000000000000000000000000000..47120202836e3ad9df51bbe0e2853db8a690977c GIT binary patch literal 3431 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 JPDHLkV1ls?T>k(7 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_kriss_sv_icon.png b/textures/rangedweapons_kriss_sv_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5ee40c03c5bdc7c1c3d03422e83e62d389590049 GIT binary patch literal 3358 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 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_leaf.png b/textures/rangedweapons_leaf.png new file mode 100644 index 0000000000000000000000000000000000000000..ac228fddea1317772a7151f45b10d5b58332b11a GIT binary patch literal 3249 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 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_luger_icon.png b/textures/rangedweapons_luger_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2b4dccc440ce4739931bbc90d75e109a05040063 GIT binary patch literal 3297 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 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_m16_icon.png b/textures/rangedweapons_m16_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6fa3218f7b2360811018d7db40e63e060ab0f7a8 GIT binary patch literal 3155 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 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_m200_icon.png b/textures/rangedweapons_m200_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b12283805e583832347d55a6e46ea190cffa8de3 GIT binary patch literal 3144 zcmV-O47c-%P)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} z0004VNkl7Ri2(=_>U9034eSr#zHfam}K`@Wy_H%`R_&fRlk%mr`>1R{p-d7gv6JrSLZ zr+Ue;QiX}Tr0%@5nzR^bxJ88H?6p`yd|w2Cm1a3Nhpeazti0000KLZ*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} z00063NklCUIjOrrjbJ-wANybISxcbAR;)OPSSOqSZjsH{_FE&=O_@B z8dGa6ZQEj+CIG-Vj_R3;T5Aa*sN8I*rRpFE08G=g2%@!?x~}1zLoP_Mba4Ra`ySIY zVac!rFvg&+>&I{2U0>;+hY%EH<}v3SuGg#FZZ{Rj0Dv(jKQ%ODYS4JwS}Xics5|B}|aAEFUm+U8C>&U8Va{ zi5P^YbIv`^#~?Im9Jf^wwPl`2-5ysB0I56Yb*80FbofWWIsjsD8UX%MbdQqixLFz-Xm5eUTb4x7Q|9Y(sXF8#e4q} zBpV_%XWZZjInOg*fn-C_2lG55grL$+OAy8_ffTtalx4Zv@~f&6rpbH%tBb1KH?Vjj zdzLEBAxu{q`}G&bT&o^7vcB&ZKLZ*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} z0007SNkl+B5IF?^QJ=w6%PE|CG62T_!H>Lqc9J9q)3Bchw01@44r-iR%OV7HO>qQ>Q43#CtMJ_0%?r-=d8%5c#dw9hH9TrO)?^y!dO zT5H^W$Weazi67UGNLF)v{G)zlSjfi^XD;cF(xG zy=gEYlxl}c2=K_Kv6S+lRw#s^&1M4t7^~f`6JmgCQ&$Rf*(!vf5bL5)^tr8!>CaQm z3?T+EOZ-vVWk%oq3@{f;24U7VsPwHLOWJAx5eXs^ekJGip+VAGH~u|lq3F9)))4wl zIVRuT-XK}cvAT|stmd7OP1AIAfLstdC&A~E5CfRLQv%KPF6x`951F;6t^t0IGZ=9k z*DM%YgZTZkU_jp#c$B}v=aM!CgeW{k2Rd5@Ox1R0|04t3E^us_opTMiFyO*~3j>}k ae+K|jkxou4)b&dM0000++F literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_m60_rld.png b/textures/rangedweapons_m60_rld.png new file mode 100644 index 0000000000000000000000000000000000000000..b0aff91d2624f97d69ef4b672308827d56ef417f GIT binary patch literal 3281 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 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_machinepistol_img.png b/textures/rangedweapons_machinepistol_img.png new file mode 100644 index 0000000000000000000000000000000000000000..353df2d08672c41565d522fa0f02246fd95c9f91 GIT binary patch literal 2977 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 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_machinepistol_mag.png b/textures/rangedweapons_machinepistol_mag.png new file mode 100644 index 0000000000000000000000000000000000000000..f473cda59d3b38e4524984dd21059b86636840a5 GIT binary patch literal 2855 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 FV1lPnORWF^ literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_magazine_handgun.png b/textures/rangedweapons_magazine_handgun.png new file mode 100644 index 0000000000000000000000000000000000000000..a27f5ca4004567ddfddaa7c559c598118df9452b GIT binary patch literal 2876 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 KMNUMnLSTYkRb@{A literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_magazine_smg.png b/textures/rangedweapons_magazine_smg.png new file mode 100644 index 0000000000000000000000000000000000000000..478baaba9d5df873973e86469147b8e592839399 GIT binary patch literal 2875 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 ZH2{U%8~uuWIXM6T002ovPDHLkV1nNtRyzOy literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_makarov_icon.png b/textures/rangedweapons_makarov_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a9e5668858763cd25b35695132da620c522613dc GIT binary patch literal 3146 zcmV-Q47Kx#P)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} z0004XNklNY>CoMukptga2mN7Hp?NJEkD%7#th| zQpw^$8l+0NPNw#Z#-l}t-ZLGSyl;N@eq9LX9OqOCXO;p`0A~lNh#URE7yuCXl-tgT z$T$mp$^k&Mdw#q+9$@3hbzOKKl^PPR>jFS#cgz8ZIEYNsH}Wl7mcMW80O&Mo(BE#j z^dKsdn3~@zw+mzy_>}9q4m*y}Y1DQibN|kWx{Us;1`ej8*#_e1^Z?t1`3kMDl@Au7 k`Xf>R3P1t;JAkhN0FnooYO|))$p8QV07*qoM6N<$f`TyAI{*Lx literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_milkor_icon.png b/textures/rangedweapons_milkor_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..99677f43e885d5be25b042112ab41e163ed05172 GIT binary patch literal 3449 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

?Q#ZMXF$2?(F)aA2|VT`}GJ;^z!VD7AcP z!zD9GBYdT77zWW83o@l_y1!iEr zI_k62Lwb1g6^FO>&cAZ2p5q|5NEI4sYkO4?e22*m-D!S*+ppoSABfHX8-L^90#aEi bv7Z3|ys@`<6PJyR00000NkvXXu0mjfSi@$N literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_minigun_icon.png b/textures/rangedweapons_minigun_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3935f72644bbc2175ba214089384a4231e24f4c9 GIT binary patch literal 3199 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 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_minigun_rld.png b/textures/rangedweapons_minigun_rld.png new file mode 100644 index 0000000000000000000000000000000000000000..3881e9a8c8b40e7034e5918d8ebda29fbad98b1b GIT binary patch literal 3573 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 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_mp40_icon.png b/textures/rangedweapons_mp40_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c7171c64a9354bc6885e74686d48b0426af50bfb GIT binary patch literal 3224 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 KMNUMnLSTZea{tQ! literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_mp40_rld.png b/textures/rangedweapons_mp40_rld.png new file mode 100644 index 0000000000000000000000000000000000000000..4e01ec0eab7d024a3f80f676686b1c51058cfecd GIT binary patch literal 3201 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 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_mp5_icon.png b/textures/rangedweapons_mp5_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..247f868d66654db4bd90c470072053766d9ac6f1 GIT binary patch literal 3133 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 M07*qoM6N<$f`Q&<-T(jq literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_remington_icon.png b/textures/rangedweapons_remington_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..587576f9f10b74979f5935e27236494a9dd1b8ce GIT binary patch literal 3186 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 Y06^WX`0z3`H~;_u07*qoM6N<$g6J9S1poj5 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_revolver_img.png b/textures/rangedweapons_revolver_img.png new file mode 100644 index 0000000000000000000000000000000000000000..96ea77d65ff53992f3ad1c5339f7012c4a26fd87 GIT binary patch literal 3037 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 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_rifle_mag.png b/textures/rangedweapons_rifle_mag.png new file mode 100644 index 0000000000000000000000000000000000000000..60fc871e6d985c220c7c596ed57b3ec71cd4b690 GIT binary patch literal 2902 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 A00000 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_rpg_icon.png b/textures/rangedweapons_rpg_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f1df51c816bb8b1ca5810bf433784bfaff30030a GIT binary patch literal 3230 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 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_rpk_rld.png b/textures/rangedweapons_rpk_rld.png new file mode 100644 index 0000000000000000000000000000000000000000..b9a80fd16c3dfe9bf68b7bb5c6079286f3975bab GIT binary patch literal 3357 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 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_scar.png b/textures/rangedweapons_scar.png index 5ecbbdd6d8f1351043a995f9187006974e65f3ff..8e5c98757ad5d7e01e9e96c0a7c7afbd6d1bb74a 100644 GIT binary patch delta 808 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 LNkvXXu0mjf=H7J# literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_scopehud.png b/textures/rangedweapons_scopehud.png new file mode 100644 index 0000000000000000000000000000000000000000..aa523dfd39da373bf87abc46ee382b41245c93e8 GIT binary patch literal 18294 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 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_shotgun_img.png b/textures/rangedweapons_shotgun_img.png new file mode 100644 index 0000000000000000000000000000000000000000..bb2754cb08ba5bbe7cbaad35aeca05480eed0ecd GIT binary patch literal 2929 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 LNkvXXu0mjfFx-S6 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_spark.png b/textures/rangedweapons_spark.png new file mode 100644 index 0000000000000000000000000000000000000000..f372cdcc64150e807b8c18110e29e78c8b0e4808 GIT binary patch literal 2858 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 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_spas12_icon.png b/textures/rangedweapons_spas12_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9543646447da09308ca59a5769386ecc97f938ab GIT binary patch literal 3218 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 Ef-2+p0ssI2 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_squirtgun.png b/textures/rangedweapons_squirtgun.png new file mode 100644 index 0000000000000000000000000000000000000000..e00514cd1729d4cba38c6766e5417db719e34b0d GIT binary patch literal 3107 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 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_squirtgun_rld.png b/textures/rangedweapons_squirtgun_rld.png new file mode 100644 index 0000000000000000000000000000000000000000..188644033b60047e1bdab75595f3d8a9147e361b GIT binary patch literal 3069 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 Ef|^?`2><{9 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_svd_noclip.png b/textures/rangedweapons_svd_noclip.png new file mode 100644 index 0000000000000000000000000000000000000000..a541e97b6b96e0db04bf8c44ae00f9f7e6995ff9 GIT binary patch literal 3444 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 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_tec9_icon.png b/textures/rangedweapons_tec9_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..012d1125fbb3154cd07ef2157fdf50e977015068 GIT binary patch literal 3145 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 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_tec9_rld.png b/textures/rangedweapons_tec9_rld.png new file mode 100644 index 0000000000000000000000000000000000000000..6cae31dfaef116a7f671663e1c7c41a60076959b GIT binary patch literal 3050 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 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_thompson.png b/textures/rangedweapons_thompson.png new file mode 100644 index 0000000000000000000000000000000000000000..afec2d47796e0c6ca4c75c355ba1ca0e01363f57 GIT binary patch literal 3261 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 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_thompson_icon.png b/textures/rangedweapons_thompson_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..61e942e03ccea1c53e387fcdfad7d82dbe8ea32b GIT binary patch literal 3195 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 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_tmp_rld.png b/textures/rangedweapons_tmp_rld.png new file mode 100644 index 0000000000000000000000000000000000000000..ce36a463cc2d5e06a8ea6caac1b30d1183a95993 GIT binary patch literal 3066 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 IM6N<$g5F)Wr2qf` literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_ump_icon.png b/textures/rangedweapons_ump_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..abc89e2d17387c137f42ac7a5701344c3c1dca4e GIT binary patch literal 3132 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 KMNUMnLSTYek`RFa literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_uzi_icon.png b/textures/rangedweapons_uzi_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1f76cb248499419e33aa721e3ec6079508da8bda GIT binary patch literal 3207 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 literal 0 HcmV?d00001 diff --git a/textures/rangedweapons_yeetable_img.png b/textures/rangedweapons_yeetable_img.png new file mode 100644 index 0000000000000000000000000000000000000000..7239a3eeb0f09a279f6fe1f601ee0f836e12446e GIT binary patch literal 2926 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 Y0O1v-qd= 0.08 then - for _, player in pairs(minetest.get_connected_players()) do - local inv = player:get_inventory() - local controls = player:get_player_control() - if controls.LMB then - timer = 0 - local wielded_item = player:get_wielded_item():get_name() - if wielded_item == "rangedweapons:tmp" then - if not inv:contains_item("main", "rangedweapons:9mm") then -minetest.sound_play("rangedweapons_empty", {object=player}) - else - if wielded_item == "rangedweapons:tmp" then - inv:remove_item("main", "rangedweapons:9mm") - local pos = player:getpos() - local dir = player:get_look_dir() - local yaw = player:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:tmpshot") - if obj then - minetest.sound_play("rangedweapons_machine_pistol", {object=obj}) - obj:setvelocity({x=dir.x * 20, y=dir.y * 20, z=dir.z * 20}) - obj:setacceleration({x=dir.x * math.random(-3.8,3.8), y=math.random(-3.8,3.8), z=dir.z * math.random(-3.8,3.8)}) - obj:setyaw(yaw + math.pi) - pos.y = pos.y + 0 - local obj = minetest.add_entity(pos, "rangedweapons:empty_shell") - minetest.sound_play("", {object=obj}) - obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) - obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) - obj:setyaw(yaw + math.pi) - minetest.add_particle({ - pos = pos, - velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} , - acceleration = {x=dir.x * -4, y=2, z=dir.z * -4}, - expirationtime = 0.30, - size = 4, - collisiondetection = false, - vertical = false, - texture = "tnt_smoke.png", - glow = 5, - }) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or player +minetest.register_tool("rangedweapons:tmp_rrr", { + stack_max= 1, + wield_scale = {x=1.15,y=1.15,z=1.15}, + description = "", + range = 0, + rw_next_reload = "rangedweapons:tmp", + load_sound = "rangedweapons_reload_b", + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_tmp.png", +}) - end - end - end - end -end + minetest.register_tool("rangedweapons:tmp", { + stack_max= 1, + wield_scale = {x=1.15,y=1.15,z=1.15}, + description = "" ..core.colorize("#35cdff","Steyr T.M.P.\n") ..core.colorize("#FFFFFF", "Gun damage: 1\n") ..core.colorize("#FFFFFF", "accuracy: 64%\n") ..core.colorize("#FFFFFF", "Gun knockback: 0\n") ..core.colorize("#FFFFFF", "Gun Critical chance: 4%\n")..core.colorize("#FFFFFF", "Critical efficiency: 1.85x\n") ..core.colorize("#FFFFFF", "Reload delay: 1.0\n") ..core.colorize("#FFFFFF", "Clip size: 30\n") ..core.colorize("#FFFFFF", "Ammunition: 9x19mm parabellum\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.066(full-auto)\n") ..core.colorize("#FFFFFF", "Gun type: machine pistol\n") ..core.colorize("#FFFFFF", "Bullet velocity: 20"), + range = 0, + inventory_image = "rangedweapons_tmp.png", + RW_gun_capabilities = { + automatic_gun = 1, + gun_damage = {fleshy=1,knockback=0}, + gun_crit = 4, + gun_critEffc = 1.85, + suitable_ammo = {{"rangedweapons:9mm",30}}, + gun_skill = {"mp_skill",85}, + gun_magazine = "rangedweapons:machinepistol_mag", + gun_icon = "rangedweapons_tmp_icon.png", + gun_unloaded = "rangedweapons:tmp_r", + gun_velocity = 20, + gun_accuracy = 64, + gun_cooldown = 0.066, + gun_reload = 1.0/4, + gun_projectiles = 1, + has_shell = 1, + gun_gravity = 0, + gun_durability = 1200, + gun_smokeSize = 4, + gun_unload_sound = "rangedweapons_handgun_mag_out", + gun_sound = "rangedweapons_machine_pistol", + }, + on_secondary_use = function(itemstack, user, pointed_thing) +rangedweapons_reload_gun(itemstack, user) +return itemstack +end, +}) -end - end - end - end - end) - -local rangedweapons_tmpshot = { - physical = false, - timer = 0, - visual = "sprite", - visual_size = {x=0.3, y=0.3}, - textures = {"rangedweapons_invisible.png"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_tmpshot.on_step = function(self, dtime, node, pos) - self.timer = self.timer + dtime - local tiem = 0.002 - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.17 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:tmpshot" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 4 then - local damage = math.random(3,6) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=0}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(1,4) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 0}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - if math.random(1, 100) <= 4 then - local damage = math.random(3,6) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(1,4) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - if timer >= 0.002 + tiem then - minetest.add_particle({ - pos = pos, - velocity = 0, - acceleration = {x=0, y=0, z=0}, - expirationtime = 0.06, - size = 3, - collisiondetection = false, - vertical = false, - texture = "rangedweapons_bullet_fly.png", - glow = 15, - }) - tiem = tiem + 0.002 - end - if self.timer >= 4.0 then - self.object:remove() - end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") then - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - if node.name == "rangedweapons:barrel" or - node.name == "doors:door_glass_a" or - node.name == "doors:door_glass_b" or - node.name == "xpanes:pane" or - node.name == "xpanes:pane_flat" or - node.name == "vessels:drinking_glass" or - node.name == "vessels:glass_bottle" or - node.name == "default:glass" then - minetest.get_node_timer(pos):start(0) - end - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end -end -end - - - -minetest.register_entity("rangedweapons:tmpshot", rangedweapons_tmpshot ) \ No newline at end of file diff --git a/ump.lua b/ump.lua index dd92755..b7e4cd6 100644 --- a/ump.lua +++ b/ump.lua @@ -1,178 +1,70 @@ -minetest.register_craft({ - output = 'rangedweapons:ump', - recipe = { - {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, - {'rangedweapons:gunsteel_ingot', 'default:diamond', 'default:steel_ingot'}, - {'default:steel_ingot', '', 'default:steel_ingot'}, - } -}) - minetest.register_craftitem("rangedweapons:ump", { + + +minetest.register_tool("rangedweapons:ump_r", { stack_max= 1, - wield_scale = {x=1.75,y=1.75,z=1.20}, - description = "" ..core.colorize("#35cdff","UMP-9\n") ..core.colorize("#FFFFFF", "Ranged damage: 4-8\n") ..core.colorize("#FFFFFF", "Accuracy: 77%\n") ..core.colorize("#FFFFFF", "Mob knockback: 1\n") ..core.colorize("#FFFFFF", "Critical chance: 8%\n") ..core.colorize("#FFFFFF", "Critical damage: 9-18\n") ..core.colorize("#FFFFFF", "Ammunition: 10mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.115\n") ..core.colorize("#FFFFFF", "Gun type: Sub-machinegun\n") ..core.colorize("#FFFFFF", "Bullet velocity: 25"), + wield_scale = {x=1.9,y=1.9,z=1.25}, + description = "", + rw_next_reload = "rangedweapons:ump_rr", + load_sound = "rangedweapons_handgun_mag_in", range = 0, + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_ump_rld.png", +}) +minetest.register_tool("rangedweapons:ump_rr", { + stack_max= 1, + wield_scale = {x=1.9,y=1.9,z=1.25}, + description = "", + rw_next_reload = "rangedweapons:ump_rrr", + load_sound = "rangedweapons_reload_a", + range = 0, + groups = {not_in_creative_inventory = 1}, inventory_image = "rangedweapons_ump.png", }) +minetest.register_tool("rangedweapons:ump_rrr", { + stack_max= 1, + wield_scale = {x=1.9,y=1.9,z=1.25}, + description = "", + rw_next_reload = "rangedweapons:ump", + load_sound = "rangedweapons_reload_b", + range = 0, + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_ump.png", +}) +------------------------------------------- -local timer = 0 -minetest.register_globalstep(function(dtime, player) - timer = timer + dtime; - if timer >= 0.115 then - for _, player in pairs(minetest.get_connected_players()) do - local inv = player:get_inventory() - local controls = player:get_player_control() - if controls.LMB then - timer = 0 - local wielded_item = player:get_wielded_item():get_name() - if wielded_item == "rangedweapons:ump" then - if not inv:contains_item("main", "rangedweapons:10mm") then -minetest.sound_play("rangedweapons_empty", {object=player}) - else - if wielded_item == "rangedweapons:ump" then - inv:remove_item("main", "rangedweapons:10mm") - local pos = player:getpos() - local dir = player:get_look_dir() - local yaw = player:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:umpshot") - if obj then - minetest.sound_play("rangedweapons_machine_pistol", {object=obj}) - obj:setvelocity({x=dir.x * 25, y=dir.y * 25, z=dir.z * 25}) - obj:setacceleration({x=dir.x * math.random(-2.3,2.3), y=math.random(-2.3,2.3), z=dir.z * math.random(-2.3,2.3)}) - obj:setyaw(yaw + math.pi) - pos.y = pos.y + 0 - local obj = minetest.add_entity(pos, "rangedweapons:empty_shell_white") - minetest.sound_play("", {object=obj}) - obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) - obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) - obj:setyaw(yaw + math.pi) - minetest.add_particle({ - pos = pos, - velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} , - acceleration = {x=dir.x * -4, y=2, z=dir.z * -4}, - expirationtime = 0.35, - size = 4, - collisiondetection = false, - vertical = false, - texture = "tnt_smoke.png", - glow = 5, - }) - obj:setyaw(yaw + math.pi) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or player - - end - end - end - end -end - -end - end - end - end - end) - -local rangedweapons_umpshot = { - physical = false, - timer = 0, - visual = "sprite", - visual_size = {x=0.3, y=0.3}, - textures = {"rangedweapons_invisible.png"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_umpshot.on_step = function(self, dtime, node, pos) - self.timer = self.timer + dtime - local tiem = 0.002 - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.12 then - local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= "rangedweapons:umpshot" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 8 then - local damage = math.random(9,18) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=2}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(4,8) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 1}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - if math.random(1, 100) <= 8 then - local damage = math.random(9,18) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(4,8) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - if timer >= 0.002 + tiem then - minetest.add_particle({ - pos = pos, - velocity = 0, - acceleration = {x=0, y=0, z=0}, - expirationtime = 0.06, - size = 3, - collisiondetection = false, - vertical = false, - texture = "rangedweapons_bullet_fly.png", - glow = 15, - }) - tiem = tiem + 0.002 - end - if self.timer >= 4.0 then - self.object:remove() - end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") then - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - if node.name == "rangedweapons:barrel" or - node.name == "doors:door_glass_a" or - node.name == "doors:door_glass_b" or - node.name == "xpanes:pane" or - node.name == "xpanes:pane_flat" or - node.name == "vessels:drinking_glass" or - node.name == "vessels:glass_bottle" or - node.name == "default:glass" then - minetest.get_node_timer(pos):start(0) - end - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end -end -end + minetest.register_tool("rangedweapons:ump", { + stack_max= 1, + wield_scale = {x=1.9,y=1.9,z=1.25}, + description = "" ..core.colorize("#35cdff","UMP-9\n") ..core.colorize("#FFFFFF", "Ranged damage: 5\n") ..core.colorize("#FFFFFF", "accuracy: 79%\n") ..core.colorize("#FFFFFF", "knockback: 1\n") ..core.colorize("#FFFFFF", "Reload delay: 1.25\n") ..core.colorize("#FFFFFF", "Clip size: 25/25\n") ..core.colorize("#FFFFFF", "Critical chance: 9%\n") ..core.colorize("#FFFFFF", "Critical efficiency: 2.0x\n") ..core.colorize("#FFFFFF", "Ammunition: 9x19mm parabellum/.45acp\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.115 (full-auto)\n") ..core.colorize("#FFFFFF", "Gun type: smg\n") ..core.colorize("#FFFFFF", "Bullet velocity: 32"), + range = 0, + inventory_image = "rangedweapons_ump.png", + RW_gun_capabilities = { + automatic_gun = 1, + gun_damage = {fleshy=5,knockback=1}, + gun_crit = 9, + gun_critEffc = 2.0, + suitable_ammo = {{"rangedweapons:9mm",25},{"rangedweapons:45acp",25}}, + gun_skill = {"smg_skill",60}, + gun_magazine = "rangedweapons:machinepistol_mag", + gun_icon = "rangedweapons_ump_icon.png", + gun_unloaded = "rangedweapons:ump_r", + gun_velocity = 32, + gun_accuracy = 79, + gun_cooldown = 0.115, + gun_reload = 1.25/4, + gun_projectiles = 1, + has_shell = 1, + gun_gravity = 0, + gun_durability = 1500, + gun_smokeSize = 4, + gun_unload_sound = "rangedweapons_handgun_mag_out", + gun_sound = "rangedweapons_smg", + }, + on_secondary_use = function(itemstack, user, pointed_thing) +rangedweapons_reload_gun(itemstack, user) +return itemstack +end, +}) - -minetest.register_entity("rangedweapons:umpshot", rangedweapons_umpshot ) \ No newline at end of file diff --git a/uzi.lua b/uzi.lua index a2a1c88..782b334 100644 --- a/uzi.lua +++ b/uzi.lua @@ -1,178 +1,72 @@ -minetest.register_craft({ - output = 'rangedweapons:uzi', - recipe = { - {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, - {'default:diamond', 'rangedweapons:plastic_sheet', 'default:steel_ingot'}, - {'', 'default:steel_ingot', ''}, - } -}) - minetest.register_craftitem("rangedweapons:uzi", { + +minetest.register_tool("rangedweapons:uzi_r", { stack_max= 1, wield_scale = {x=1.6,y=1.6,z=1.10}, - description = "" ..core.colorize("#35cdff","UZI\n") ..core.colorize("#FFFFFF", "Ranged damage: 2-5\n") ..core.colorize("#FFFFFF", "accuracy: 69%\n") ..core.colorize("#FFFFFF", "Mob knockback: 0\n") ..core.colorize("#FFFFFF", "Critical chance: 5%\n") ..core.colorize("#FFFFFF", "Critical damage: 4-8\n") ..core.colorize("#FFFFFF", "Ammunition: 9mm rounds\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.08\n") ..core.colorize("#FFFFFF", "Gun type: machine pistol\n") ..core.colorize("#FFFFFF", "Bullet velocity: 25"), + description = "", + rw_next_reload = "rangedweapons:uzi_rr", + load_sound = "rangedweapons_handgun_mag_in", range = 0, + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_uzi_rld.png", +}) +minetest.register_tool("rangedweapons:uzi_rr", { + stack_max= 1, + wield_scale = {x=1.6,y=1.6,z=1.10}, + description = "", + rw_next_reload = "rangedweapons:uzi_rrr", + load_sound = "rangedweapons_reload_a", + range = 0, + groups = {not_in_creative_inventory = 1}, inventory_image = "rangedweapons_uzi.png", }) +minetest.register_tool("rangedweapons:uzi_rrr", { + stack_max= 1, + wield_scale = {x=1.6,y=1.6,z=1.10}, + description = "", + rw_next_reload = "rangedweapons:uzi", + load_sound = "rangedweapons_reload_b", + range = 0, + groups = {not_in_creative_inventory = 1}, + inventory_image = "rangedweapons_uzi.png", +}) +------------------------------------------- + + minetest.register_tool("rangedweapons:uzi", { + stack_max= 1, + wield_scale = {x=1.6,y=1.6,z=1.10}, + description = "" ..core.colorize("#35cdff","UZI\n") ..core.colorize("#FFFFFF", "Ranged damage: 2\n") ..core.colorize("#FFFFFF", "accuracy: 72%\n") ..core.colorize("#FFFFFF", "knockback: 0\n") ..core.colorize("#FFFFFF", "Reload delay: 1.2\n") ..core.colorize("#FFFFFF", "Clip size: 40/22\n") ..core.colorize("#FFFFFF", "Critical chance: 5%\n") ..core.colorize("#FFFFFF", "Critical efficiency: 1.9x\n") ..core.colorize("#FFFFFF", "Ammunition: 9x19mm parabellum/.45acp\n") ..core.colorize("#FFFFFF", "Rate of fire: 0.08 (full-auto)\n") ..core.colorize("#FFFFFF", "Gun type: machine pistol\n") ..core.colorize("#FFFFFF", "Bullet velocity: 25"), + range = 0, + inventory_image = "rangedweapons_uzi.png", + RW_gun_capabilities = { + automatic_gun = 1, + gun_damage = {fleshy=2,knockback=0}, + gun_crit = 5, + gun_critEffc = 1.9, + suitable_ammo = {{"rangedweapons:9mm",40},{"rangedweapons:45acp",22}}, + gun_skill = {"mp_skill",80}, + gun_magazine = "rangedweapons:machinepistol_mag", + gun_icon = "rangedweapons_uzi_icon.png", + gun_unloaded = "rangedweapons:uzi_r", + gun_velocity = 25, + gun_accuracy = 72, + gun_cooldown = 0.08, + gun_reload = 1.2/4, + gun_projectiles = 1, + has_shell = 1, + gun_gravity = 0, + gun_durability = 1500, + gun_smokeSize = 4, + gun_unload_sound = "rangedweapons_handgun_mag_out", + gun_sound = "rangedweapons_machine_pistol", + }, + on_secondary_use = function(itemstack, user, pointed_thing) +rangedweapons_reload_gun(itemstack, user) +return itemstack +end, +}) + -local timer = 0 -minetest.register_globalstep(function(dtime, player) - timer = timer + dtime; - if timer >= 0.08 then - for _, player in pairs(minetest.get_connected_players()) do - local inv = player:get_inventory() - local controls = player:get_player_control() - if controls.LMB then - timer = 0 - local wielded_item = player:get_wielded_item():get_name() - if wielded_item == "rangedweapons:uzi" then - if not inv:contains_item("main", "rangedweapons:9mm") then -minetest.sound_play("rangedweapons_empty", {object=player}) - else - if wielded_item == "rangedweapons:uzi" then - inv:remove_item("main", "rangedweapons:9mm") - local pos = player:getpos() - local dir = player:get_look_dir() - local yaw = player:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "rangedweapons:uzishot") - if obj then - minetest.sound_play("rangedweapons_machine_pistol", {object=obj}) - obj:setvelocity({x=dir.x * 25, y=dir.y * 25, z=dir.z * 25}) - obj:setacceleration({x=dir.x * math.random(-3.1,3.1), y=math.random(-3.1,3.1), z=dir.z * math.random(-3.1,3.1)}) - obj:setyaw(yaw + math.pi) - pos.y = pos.y + 0 - local obj = minetest.add_entity(pos, "rangedweapons:empty_shell") - minetest.sound_play("", {object=obj}) - obj:setvelocity({x=dir.x * -10, y=dir.y * -10, z=dir.z * -10}) - obj:setacceleration({x=dir.x * -5, y= -10, z=dir.z * -5}) - obj:setyaw(yaw + math.pi) - minetest.add_particle({ - pos = pos, - velocity = {x=dir.x * 3, y=dir.y * 3, z=dir.z * 3} , - acceleration = {x=dir.x * -4, y=2, z=dir.z * -4}, - expirationtime = 0.30, - size = 4, - collisiondetection = false, - vertical = false, - texture = "tnt_smoke.png", - glow = 5, - }) - local ent = obj:get_luaentity() - if ent then - ent.player = ent.player or player - - end - end - end - end -end - -end - end - end - end - end) - -local rangedweapons_uzishot = { - physical = false, - timer = 0, - visual = "sprite", - visual_size = {x=0.3, y=0.3}, - textures = {"rangedweapons_invisible.png"}, - lastpos= {}, - collisionbox = {0, 0, 0, 0, 0, 0}, -} -rangedweapons_uzishot.on_step = function(self, dtime, node, pos) - self.timer = self.timer + dtime - local tiem = 0.002 - local pos = self.object:getpos() - local node = minetest.get_node(pos) - - if self.timer > 0.125 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:uzishot" and obj:get_luaentity().name ~= "__builtin:item" then - if math.random(1, 100) <= 5 then - local damage = math.random(4,8) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback=0}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(2,5) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage, knockback = 0}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - else - if math.random(1, 100) <= 5 then - local damage = math.random(4,8) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("crit", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - else - local damage = math.random(2,5) - obj:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups= {fleshy = damage}, - }, nil) - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - self.object:remove() - end - end - if timer >= 0.002 + tiem then - minetest.add_particle({ - pos = pos, - velocity = 0, - acceleration = {x=0, y=0, z=0}, - expirationtime = 0.06, - size = 3, - collisiondetection = false, - vertical = false, - texture = "rangedweapons_bullet_fly.png", - glow = 15, - }) - tiem = tiem + 0.002 - end - if self.timer >= 4.0 then - self.object:remove() - end - if self.lastpos.x ~= nil then - if minetest.registered_nodes[node.name].walkable then - if not minetest.setting_getbool("creative_mode") -then - end - minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) - if node.name == "rangedweapons:barrel" or - node.name == "doors:door_glass_a" or - node.name == "doors:door_glass_b" or - node.name == "xpanes:pane" or - node.name == "xpanes:pane_flat" or - node.name == "vessels:drinking_glass" or - node.name == "vessels:glass_bottle" or - node.name == "default:glass" then - minetest.get_node_timer(pos):start(0) - end - self.object:remove() - end - end - self.lastpos= {x = pos.x, y = pos.y, z = pos.z} -end -end -end -minetest.register_entity("rangedweapons:uzishot", rangedweapons_uzishot ) \ No newline at end of file