Looking good!
Ideas to add/Ignore :P
For Fall Damage Check and No Recoil check, You should set their Movement to null.
Also for no recoil Player.Inventory.AddItem(Item, Slot, Amount) -> Player.Inventory.AddItem("M4", 30, 23) well save reloading.
You could probably also send an RPC message to...