Can anyone refer me to a good modern Gun tutorial or set-up?

Ok, I have spent the last 30min looking for a good gun tutorial for a game I’m workin on.
the problem is I’m only finding GOOD videos from 2015, even with ‘2019’ or ‘2020’ in my search

And I looked on here, but what I found was code based, not logic-block based. Help?

EDIT_1: Ok, so I found an old Youtube comment with the same issue, however the solution did not work for me… The solution from what i know was the hide the collection your ‘bullet’ was in, However trying this got me nowhere.

For weapons and bullets need make collections or link library(for version on based 2.79) and connect to you game file and make setup logic in collection or library, good tutorial to a gun and bullets in youtube in channel Thetimster, all good tutorial based in code or script - because get for user full control over guns and bullets. Script for bullet or guns very simple its add object to scene and check events - collision and calculation damage and calculation ammo

import bge
from bge import logic as GL
scene = GL.getCurrentScene()

def gun(cont):
    own = cont.owner
    right_hand = own.children['Right_Hend_Collider'] # get hand collider mesh
    select_gun = own['select_gun']    

    key2 = cont.sensors['Key2'] # control connect keyboard sensor

    if ['pistol'] in own and own['pistol']==1 and own['select_gun']!='pistol' and key2.positive:
        own['select_gun'] = 'pistol' # assign select gun in property
        gun = scene.addObject("Pistol_Model_Collider", right_hand, 0) #add gun
        gun.setParent(right_hand, True) # assign parent for gun model
        gun.worldPosition = right_hand.worldPosition # set position for gun in hand
        gun.worldOrientation = right_hand.worldOrientation # set orientation for gun in hand

def bullet(cont):
    own = cont.owner
    speed = own['speed']

    ray = cont.sensors['Ray']
    ray.range = own['speed'] #assign ray distance range how equal speed

    if not ray.positive:
        own.applyMovement((0.0, -speed, 0.0), True) # motion bullet -Y axis
    elif ray.positive: # detect somebody collision
        obj = ray.hitObject
        if 'health' in obj:
            obj['health'] -= 10 # substract health if health in object
            own.endObject() # end object life
        elif not 'health' in obj: # bullet collision wall, box, or objects not use health
  • 2.79 uses Scenes, not Collections

  • You don’t need to make a overlay scene for rendering player weapons or items, they can be in the same scene
    It still is suggested to do the latter, else you’ll need to setup your post-processing in more than one scene.

  • Most games use raycast bullets for collisions, and only use physical meshes for visualizations of bullets
    If you use physical bullets for checking collisions, not only is this performance heavy on physics, you’re probably running logic on each spawned bullet, which is also not good for logic performance.

  • If you choose to link in your assets, you’'re either going to need to include your external blend-files in your exported build folder, thus making them publicly open to the public, or you’ll need to encrypt the external blend-files.

I know that there are only collections in eevee and there are none in 2.79, so I wrote through “or” why is there an indication that there are only collections in eevee? I used the generation of about 1500 bullets for a minigun with the described logic that exist in the scene of 5000 units, the fps loss was 4-7 frames, I do not think that these are over critical losses. Do you think it’s worth worrying about someone opening your files? it’s funny when there are programs that cut out of games that are sufficiently protected models, textures, animations and even scripts that work in the game when it is gutted through such programs, even if someone opens your blend file with a bullet, he will see only the logic and the bullet model, the same with models of actors or monsters, if they are encrypted, they will last a little longer but will be opened