I notice a problem though. You don't need to create a new player variable in the foreach loop. This is because the "ii" and "iv" are index AND value. When I first created that loop, I used the abbreviation "ii" as "iterator index" and "iv" as "iterator value". I think I should've mentioned that before but I don't think I ever did. It was just for readability purposes.
If you use "iv" as your player variable while inside the loop, then it should work. The "iv" is a pointer to the instance for the player and can be used just like any "player" instance.
Example:
iv.Skin = 1;
Does the exact same thing as this:
local player = FindPlayer( ii );
player.Skin = 1;