Учимся использовать функции скриптинга

Аватара пользователя
MrVeiron
Администратор
Сообщения: 8
Зарегистрирован: 16 июн 2018, 16:45

Учимся использовать функции скриптинга

Сообщение MrVeiron » 17 июн 2018, 19:12

Приветствую тебя, скриптер. Для начала открой в новой вкладке полный список функций (жми сюда), чтобы в дальнейшем у тебя была возможность сразу же попрактиковаться.

Итак, что же собой представляют функции? Это наша реализация API, которая поможет тебе получать и изменять локальные переменные пользователя, а также взаимодействовать с другими объектами на твоём игровом сервере (например с транспортными средствами). Давай для примера возьмём локальную переменную, которая индивидуально присваивается каждому игроку - здоровье. На момент написания данного урока у нас есть две функции, взаимодействующие с ней - одна для проверки её текущего значения (вот она), а вторая для его изменения (она родимая). Итак, для начала перейди по ссылкам указанным в скобочках, и ознакомься с их описанием и примерами из нашего wiki-хранилища.

Ну что же, а теперь давай рассмотрим их подробней. Первая функция - GetPlayerHealth, которая принимает один единственный параметр - playerid. Т.е. тебе нужно будет указать id игрока, чьё здоровье ты хочешь узнать. Давай попробуем получить здоровье текущего игрока (от чьего лица будет выполняться функция), и поместить это значение в новую переменную, которую назовём health. ID игрока, от лица которого выполняется процесс, хранится в переменной playerid. Получаем следующий код:

Код: Выделить всё

new health = GetPlayerHealth(playerid);
Этот же код можно реализовать и другим способом. Например, объявив переменную, и лишь потом поместив туда какое-либо значение:

Код: Выделить всё

new health;
health = GetPlayerHealth(playerid);
Зачем нам нужен второй вариант, если первый имеет на одну строчку кода меньше? А вот здесь, мой друг, возникает необходимость осознавать, в какой ситуации практичней использовать тот или иной вариант. Например, если вы пишите команду, которая просто выводит в чат уровень здоровья указанного игрока - нужно использовать первый вариант. Но в том случае, если, например, у вашей конструкции есть несколько вариантов исхода событий, и не во всех из них вам пригодится знать здоровье - то лучше объявить переменную в начале, а функцию вызывать лишь в тот момент, когда она нам понадобилась. Например:

Код: Выделить всё

new health;
switch(listitem)
{
      case 0:
      {
            // Здесь какой-то код, не требующий уровень здоровья.
      }
      case 1:
      {
            // Здесь мы должны узнать уровень здоровья игрока, и в том случае, если его значение меньше или равно 50 - установить новое, равное стам.
            health = GetPlayerHealth(playerid);
            if(health <= 50)
            {
                  SetPlayerHealth(playerid, 100);
            }
      }
      case 2:
      {
            // Здесь какой-то код, не требующий уровень здоровья.
      }
}
Запомни! Лучше один раз объявить переменную сверху, чем сделать это несколько раз во время выполнения необходимых условий. Это связано с тем, что каждая конструкция объявления переменной выделяет под неё место при компиляции.
Правильный пример приведён выше, поэтому было бы уместным также показать и то, как делать не нужно.

Код: Выделить всё

switch(listitem)
{
      case 0:
      {
            // Здесь какой-то код, не требующий уровень здоровья.
      }
      case 1:
      {
            new health = GetPlayerHealth(playerid);
            if(health <= 50)
            {
                  SetPlayerHealth(playerid, 100);
            }
      }
      case 2:
      {
            // Здесь какой-то код, не требующий уровень здоровья.
      }
      case 3:
      {
            new health = GetPlayerHealth(playerid);
            if(health <= 50)
            {
                  SetPlayerHealth(playerid, 100);
            }
      }
}