Очень много вопросов

gnull

Участник
Сообщения
4
Реакции
0
1. MAXPLAYERS
В clients.inc MAXPLAYERS это константа равная 65. В таком случае что это за конструкция MAXPLAYERS+1, например, new headshot[MAXPLAYERS+1] ?
В моем понимании я вижу это как new headshot[65+1] и тогда в чем смысл этой конструкции?

2. Как называет R1KO "мистическая" переменная client aka iClient aka i

Понятно то, что она хранит в себе индекс игрока.

Вопрос 2.1. Переменная client изначально хранит в себе индекс игрока или его нужно получать с помощью конструкции int iUserID = hEvent.GetInt("userid"); int iClient = GetClientOfUserId(iUserID); ?

Вопрос 2.2. Если она изначально не хранит в себе индекс игрока, то как получить индекс НЕ через отлавливание событий? И вообще как лучше получать индекс игроков без колхоза?

3. Enum
Есть такой код
Code:
enum ePlayer
{
    pKills,         // Кол-во убийств
    pDeaths,        // Кол-во смертей
}
new player[ePlayer][MAXPLAYERS];

то как как сделать тоже самое, но с enum struct без ошибки error 174: symbol 'ePlayer' is a type and cannot be used as a value
code:
enum struct ePlayer {
  int pKills;
  int pDeaths;
}
new player[ePlayer][MAXPLAYERS];
 

danil253467

💘Italo-Disco & Neon One Love💘
Сообщения
90
Реакции
52
3. Enum
Есть такой код
C-подобный:
enum ePlayer
{
pKills, // Кол-во убийств
pDeaths, // Кол-во смертей
}
new player[ePlayer][MAXPLAYERS];
то как как сделать тоже самое, но с enum struct без ошибки error 174: symbol 'ePlayer' is a type and cannot be used as a value
C-подобный:
enum struct ePlayer {
int pKills;
int pDeaths;
}
new player[ePlayer][MAXPLAYERS];
Здесь нужно сделать таким образом

Это:
PHP:
enum struct ePlayer {
  int pKills;
  int pDeaths;
}
new player[ePlayer][MAXPLAYERS];

Заменить на это:

PHP:
enum struct ePlayer {
  int pKills;
  int pDeaths;
}
ePlayer player[MAXPLAYERS+1];
 

DeathScore13

пирожок. пирожочек.
Сообщения
734
Реакции
403
1. смысл в использовании индекса клиента как ячейку. sourcetv занимает 65-й слот, если создаём массив из 65 ячеек, то получается что 65 не объявлен (т.к. старт - 0)
2. это просто переменная содержащая слот/энтити игрока и имеет значение 1-64 (0 - сервер или ошибка, зависит от функции, 65 - сорств)
3. можно, но смысла нет. enum struct - оболочка над массивами и использование его в твоëм примере не имеет никакой логики. enum - перечисления, следующий элемент которых имеет +1 от предыдущего (старт - 0)
 

xtance

Участник
Сообщения
513
Реакции
743
1) Вроде как из-за того, что сервер тоже считается за клиента, таким образом реальное кол-во клиентов может быть на 1 больше чем кол-во клиентов, допустимое на сервере (отсюда)
2.1) Переменная client не берётся из ниоткуда, её передают разные функции. Например в плагине стоит обработчик на форвард: public void OnClientConnected(x) { код ... }, он будет вызван каждый раз при подключении клиента, как назвать аргумент функции - не имеет значения, там будет индекс клиента в любом случае. Обычно называют client или iClient . Не каждый форвард передаёт клиента (пример: OnPluginStart)
Если приходит не индекс игрока, а что-то другое, то поступаем исходя из того, что мы имеем...
Если это событие, смотрим документацию по этому событию, если оно предоставляет поле userid, то да, как вы написали - правильное получение клиента, но есть события не предоставляющие клиента.
2.2) Ну, если нужен конкретный игрок, а из информации о нём только (например) ник то можно его найти в цикле по всем игрокам.
3) [Статья] Способ хранения переменных для каждого игрока

Также по поводу userid и clientid, первый полезен тем что уникален в пределах одного запуска сервера, таким образом если нужно что-то сделать с клиентом в будущем (таймер), то нужно получить из clientid его userid, и когда этот таймер выполнится, то обратно сконвертировать userid в clientid. Если клиент за это время куда-то ливнул, то вернётся 0. А если этого не сделать и работать только с clientid, то к этому времени его номер может занять другой клиент, и код исполнится на не том, на ком нужно. А clientid полезен тем, что, собственно, практически все функции работают с ним а не с userid.
 
Последнее редактирование:
Сверху Снизу