RedHeavenHeroПочему "магических"?
Потому что в мире программирования использовать какие-то невнятные ("магические") цифры - дурной тон, затрудняющий чтение, понимание и изменение кода. Что такое 0? Что такое 1? Это никому не известно, и из контекста неясно. Другое дело - использование именованных констант, заранее собранных в отдельном месте (в данном случае, разрабы уже предоставили такие константы), где их при необходимости можно централизованно менять.
Исключением могут быть например счётчики, такие как total = total + 1, где единица обозначает минимальный шаг. В этом случае её роль всем очевидна, и потому она не считается "магической" в таком контексте.
RedHeavenHeroГде? К тому же игроки вне игры обозначаются 4.
Судя по мануалу:
PLAYER_NOT_IN_GAME -- Игрок вне игры
PLAYER_ACTIVE -- Игрок активен
PLAYER_WON -- Игрок победил
PLAYER_LOST -- Игрок проиграл
Обычно, в подобных списках константы пробегают значения от 0 и выше, т.е. значение 4, видимо, не соответсвует ни одной из констант, и, вероятно, обозначает игроков вне игры (опять-таки из-за "магических" цифр можно только строить предположения). Но я лично не проверял на практике.
Цифра 0 взята отсюда:
n = n + (GetPlayerState(i) == 1 or 0)
Мне совершенно непонятно, что она здесь делает, а из-за отсутствия скобок, неясно даже, как будет выполняться сия конструкция, сначала проверка на равенство, а затем OR, или наоборот.