I think there are a couple bugs in the crates code.
Firstly, the ping ID needs to be stored in an array, not a single variable, since there can be multiple crates at one time. It should be like this in the SelectivlyPlaceCrate and CheckCratesRule functions:
CRATES_PingIDs[playerIndex + 1]
instead of just:
You may want to double check for sure though.
Deleted a bunch of stuff that no longer applies.