Я и PAWN | Изучаю, потому что интересно

Сообщения
2,143
Реакции
1,223
Помог
44 раз(а)
tapexapex, а разница в чем? К тому же, вопрос был другим.
 
Сообщения
38
Реакции
8
Minni, вопрос был таков "Ещё интересует почему цикл выдаётся значение в 1, когда нет ни у кого прав: "
Ответ на лицо , права у сервера. Я ошибся? Не дал ответ?
 
Сообщения
2,143
Реакции
1,223
Помог
44 раз(а)
tapexapex, а как так получилось, что сервер является игроком?)
 
Сообщения
94
Реакции
64
Помог
5 раз(а)
достаточно убрать = с условия и всё будет ок
Код:
for(new i = 0; i <= iNum; ++i)
 
Сообщения
38
Реакции
8
Его вроде интересовало почему так , а не исправление кода )
 
Сообщения
103
Реакции
179
Вообще Pawn довольно странный язык. Он по идее высокоуровневый, но при этом там со строками приходится работать так же, как в Си. И накосячить с памятью можно точно так же.
 
Сообщения
38
Реакции
8
SNMetamorph, к примеру , когда у тебя зарезервирован массив на 32 ячейки ( как у него ) , то выборка из любой ячейки, если содержимое не изменено, будет 0, если я не ошибся. К его примеру.

1594998371172.png
Думаю ему будет полезно.
 
Последнее редактирование:
Сообщения
702
Реакции
54
tapexapex, спасибо большое! Ответ получился куда полезнее, чем я просил)

Dager, это только в случае, если этим циклом не проверяется ещё что-либо, ибо последнего игрока не будет проверять.

Осталось понять почему айпи получает локальный. Думал порыться в sypexgeo, может там чего интересного можно вытянуть.
 
Сообщения
38
Реакции
8
ThePhoenix, Отвечаю в меру понимания прочитанного. Dager написал правильно , ибо если на сервере есть хоть 1 игрок , то players[0] будет равен 1, и т.д. И того у тебя останется еще 31 ячейка для заполнения игроками. А так как массив начинается с 0 , 0-31(полный массив) то < 32 корректное условие для полного перебора(32 как пример).
17 Июл 2020
ThePhoenix, если нужно смещение , то ты всегда можешь использовать і+1 где есть необходимость.
 
Сообщения
702
Реакции
54
tapexapex, попробую, как будет время.

get_user_info случаем не может вернуть айпи? А то я не нашёл список того, что он в принципе может вернуть, а по примерам обычно возвращают инфу из setinfo или ник.
 
Сообщения
38
Реакции
8
ThePhoenix, ты хочешь чтоб у тебя на практике что то работало , или играешься в единичном примере со своим IP?
 
Сообщения
702
Реакции
54
tapexapex, я ведь играюсь со своим айпи, чтобы потом это где-то использовать, по этому хочу разобраться, почему локальный айпи получаю, а не тот, который нужно.
 
Сообщения
702
Реакции
54
Хочу подсчитать количество АВП в начале раунда, но rg_has_item_by_name ругается на плохой индекс.

Код:
L 07/19/2020 - 01:16:07: [test.amxx] player index:0  name:ThePhoenix
L 07/19/2020 - 01:16:07: [test.amxx] player index:1  name:ReHLDS LOCAL
L 07/19/2020 - 01:16:07: [ReAPI] rg_has_item_by_name: invalid player index 0 [arg_index]
L 07/19/2020 - 01:16:07: [AMXX] Displaying debug trace (plugin "test.amxx", version "0.0.1")
L 07/19/2020 - 01:16:07: [AMXX] Run time error 10: native error (native "rg_has_item_by_name")
L 07/19/2020 - 01:16:07: [AMXX]    [0] awp_block_limit.sma::CSGameRules_RestartRound_Pre (line 71)
Код:
public CSGameRules_RestartRound_Pre()
{
    new iPlayers[MAX_PLAYERS], iCount;
    get_players(iPlayers, iCount, "ach");// ach
   
    log_amx("%d - Players NUM", iCount);
   
    for(new i = 0; i <= iCount; ++i)
        {
            new name[33];
            get_user_name(iPlayers[i], name, charsmax(name))
            log_amx("player index:%d  name:%s", i, name)
           
            if(rg_has_item_by_name(iPlayers[i], "weapon_awp")) // invalid index 0
                has_awp++;
        }
}
Чего я не понимаю?)
Ну то есть почему в типичном цикле, который я использовал уже много раз, впервые вылезла ошибка, что мол, мне индекс не нравится..

При этом
Код:
i <= iCount
->
Код:
i < iCount
И ошибку, как ветром сдуло :D
 
Сообщения
14
Реакции
6
ThePhoenix, в твоём случае iCount возвращает 1 (т.к. на сервере 1 игрок), соотв., при правильном цикле, где i < iCount (т.е. 0 < 1), выполняется 1 круг и iPlayers[0] = ид нашего игрока.
При i <= iCount выполняется 2 круга (т.к. 0 < 1 и 1 == 1), iPlayers[0] = ид игрока, iPlayers[1] == 0 (т.к. get_players его не заполнило), далее ты вызываешь rg_has_item_by_name с 0 айди, отсюда и ошибка.


Код:
log_amx("player index:%d  name:%s", i, name)
->
Код:
log_amx("player index:%d  name:%s", iPlayers[i], name)
Правильнее будет, ибо индекс игрока это не i, он лишь находится в массиве iPlayers
 
Сообщения
2,143
Реакции
1,223
Помог
44 раз(а)
ThePhoenix, стоит начать с того, что ты вызываешь момент, когда еще нет рестарта (pre). Так же, спавн игроков и спавн оружия происходит после рестарта.
19 Июл 2020
далее ты вызываешь rg_has_item_by_name с 0 айди, отсюда и ошибка
Не, он вызывает rg_has_item_by_name и использует значение массива, которое хранится под 0 индексом.
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу