Making different weapons have different commands from inputs

Yes! That’s pretty much it.

You can also have, for example, a base GameplayAbility BP called “Shoot”, and then create some child BPs that inherit from it like “ShootPistol”, “ShootShotgun”, etc, so you can reuse the common logic, like executing an AnimMontage, blocking movement, etc.

Another handy feature is that for each GameplayAbility you can configure a GameplayTag that gets added to the owning character while the ability is active, and you can configure an ability to cancel or be blocked by tags from other abilities, which cleanly solves issues like “you can’t shoot while jumping”.

You can grant and remove abilities on the fly via the AbilitySystemComponent attached to the characters (for example when switching weapons). As you dig deeper, you’ll find a lot of useful features like these ones.