[SourcePawn] Урок 1 - Основы языка (Часть 1)

Тема в разделе "Программирование / Скриптинг", создана пользователем R1KO, 4 сен 2016.

  1. R1KO

    R1KO Супер-модератор

    Сообщения:
    6.000
    Симпатии:
    2.992
    [SourcePawn] Урок 1 - Основы языка (Часть 1)

    <- К содержанию

    Intro:
    Учить программирование на павне не стоит. Лучше начать с c++ например (не весь конечно, только основы).
    Это даст базовые знания, понятия и терминологию для изучения других языков, ведь зная один язык разобраться в другом значительно проще.

    -> Часть 2
    1. Комментарии

      Комментарий – это текст, который предназначен для программистов и не обрабатывается компилятором. Обычно комментарии используются для создания заметок к коду для дальнейшего использования. Комментарии можно использовать при тестировании, чтобы сделать неактивными определенные строки кода.

      Комментарии записываются одним из следующих способов:
      • Однострочный
        Комментирует текст после // до конца строки.
        PHP:
        текст1 // текст2
        текст2 будет комментарием
      • Многострочный
        Комментирует весь текст между /* и */.
        PHP:
        текст1
        /*
        текст2
        */
        текст3
        текст2 будет комментарием.
        Многострочный комментарий может быть в одной строке:
        PHP:
        текст1 /* текст2 */ текст3
        Нельзя использовать многострочный комментарий внутри другого многострочного, на строку содержащую открывающий тег будет выдана ошибка, а закрывающий тег закроет первый комментарий.
    2. Переменные

      Переменная - это именованный участок оперативной памяти, используемый для временного хранения данных.
      Переменная это своего рода емкость для хранения данных. Когда информация записана в переменной, тогда эту информацию можно получать и изменять.
      Типы данных
      Каждая переменная имеет свой тип.
      Тип определяет сколько байт в памяти занимает переменная, какие значение она может принимать и как с ней вообще работать.
      SourcePawn имеет такие базовые типы:
      • int - Целые числа. (Занимает 4 байта (32 бита), имеет пределы: от −2 147 483 648 до 2 147 483 647)
      • bool - Логический. (Занимает 1 байт (8 бит), может принимать только 2 значения: true (истина) и false (ложь))
      • float - Числа с плавающей точкой. (Занимает 4 байта (32 бита), имеет пределы: от −2 147 483 648.0 до 2 147 483 647.0)
      • char - Символьный тип. (Занимает 1 байт (8 бит), имеет пределы: от 0 до 255 (хранит код символа))
      • Handle - Дескриптор, указатель на объект. (Занимает 4 байта (32 бита))
        Является родительским для ряда других типов, о которых будет говориться в других уроках.
        Большинство объектов данного типа и дочерних ему после использования необходимо удалять с помощью оператора delete:
        PHP:
        delete имя_переменной;
        // Например
        delete hMenu;
        Этот оператор освобождает память выделенную под объект но не очищает саму переменную, поэтому для безопасности после delete, переменной лучше присвоить значение null.
        Так же такие объекты можно клонировать (но не все).
        Более подробную информацию о типах и их свойствах можно найти здесь: Handles (SourceMod Scripting) - AlliedModders Wiki
      • Function - Указатель на функцию. (Занимает 4 байта (32 бита))
      Создание переменных
      Есть 2 понятия при создании переменных:
      • Объявление переменной - указание типа переменной и её имени.
      • Инициализация переменной - присвоение начального значения. Инициализация может производится как при объявлении переменной так и после этого.
      При создании переменной сначала указывается её тип, затем имя, после этого если нужно ставится символ присвоения и затем значение.
      PHP:
      int a;        // Объявление переменной типа int с именем a
      float b;    // Объявление переменной типа float с именем b

      int c 5;        // Инициализация переменной начальным значением 5
      bool d false;    // Инициализация переменной начальным значением false

      int e;
      8;    // Инициализация переменной значением 8 после объявления

      // Создаем сразу 3 переменные
      int f 7,    // Инициализация переменной f значением 7
          
      14,    // Инициализация переменной g значением 14
          
      h;          // Объявление переменной h (начальное значение будет 0)
      В SourcePawn если начальное значение не указано переменные инициализируются значением 0 для своего типа.
      Это значит что для int это 0, для float - 0.0, для bool - false, для Function - INVALID_FUNCTION, Handle и его дочерних типов - INVALID_HANDLE или null
      Преобразование типов
      В SourcePawn можно выполнять явное преобразование типов с помощью оператора view_as.
      Синтаксис: view_as<тип>(значение)
      PHP:
      int a 5;
      float b 7.0;

      float c view_as<float>(a);    // Значение переменной a преобразуется в тип float

      int d view_as<int>(3.5);    // В этом случае число 3.5 будет приведено к типу int, при этом будет отброшена дробная часть.
      //    В результате d будет равно 8
      Виды переменных
      Переменные бывают:
      • Локальные - созданные в блоке кода
      • Глобальные - созданные вне блоков кода
      Тут следует ввести понятие "Область видимости переменной" - область в которой переменная видимая и доступна.
      Если переменная глобальная - к ней можно обратиться в любой части плагина, её область видимости - весь плагин.
      Если переменная локальная - она видна только в пределах блока в котором она создана.
      Пример:
      PHP:
      int g_iGlobalVar;    // Глобальная переменная

      public void OnMapStart()
      {
          
      int iLocalVar 5;    // Локальная переменная
          
          
      if(iLocalVar == 5)
          {
              
      int iLocalVar2 iLocalVar+2;    // Локальная переменная
          
      }
      }
      Область видимости:
      upload_2016-9-4_18-10-48.png
      Так же переменные бывают:
      • Статические Локальные - область их видимости как у локальных переменных но создаются они только один раз и не удаляются после завершения функции, а сохраняют свое значение для следующего вызова.
        PHP:
        MyFunc()
        {
            static 
        float fDamage;
        // При первом вызове функции MyFunc будет объявлена переменная fDamage и буде равна 0.0
        // При последующих вызовах функции MyFunc переменная fDamage уже не будет создаваться в памяти заново, а сохранит свое значение.
            
        fDamage fDamage 5.2// 0.0 + 5.2 = 5.2;
        // При первом вызове функции, значение fDamage равно 0.0, в строке выше  к ней прибавляется значение 5.2
        // Если функция будет вызвана 2-й раз то fDamage уже будет равна 5.2 и после прибавления станет равна 10.2
        // И так будет продолжаться с каждым вызовом функции
        }
        Такие переменные применяются в функциях, которые вызываются очень часто (особенно для массивов) и поэтому есть затраты времени на создание переменных при каждом вызове.
      • Статические Глобальные - аналогично глобальной переменной но такая переменная будет видна только в пределах того файла, где она объявлена.
      Ограничение на имена переменных
      Имя переменной может содержать от одного до 32 символов. Разрешается использовать строчные и прописные буквы, цифры и символ подчёркивания. Первым символом обязательно должна быть буква или символ нижнего подчеркивания _. Имя переменной не может совпадать с зарезервированными словами.
      Рекомендации по названиям переменных
      • Первым символом имени ставить сокращение от типа переменных (int - i, float - f, bool - b, char - sz или s, Handle - h)
        PHP:
        int iVar 5;
        float fVar 3.3;
        bool bVar true;
        char szVar[] = "строка";
        Handle hPlugin null;
      • Название глобальных переменных лучше начинать с приставки g_
        PHP:
        int g_iVar 5;
        float g_fVar 3.3;
        bool g_bVar true;
        char g_szVar[] = "строка";
        Handle g_hPlugin null;
      • Имена констант писать в верхнем регистре
      • Название переменной должно кратко отобрать её назначение, если переменная состоит из нескольких слов то разделять их нижним подчеркиваний _ либо писать слитно но первую букву каждого слова писать в верхнем регистре
        PHP:
        int iClient;
        float fDamage 3.3;
        bool bVar true;
        char szPlayerName[] = "никнейм";
        Handle hPluginIterator null;
      • Например, имена i, j, k, x хорошо подходят для счетчиков в цикле

    3. Массивы
      Массив – последовательный набор элементов одного типа именуемый одним именем.
      Индекс – номер элемента массива.
      PHP:
      int iArray[6];    // Создаем массив размером 6
      Мы создали массив из 6-ти элементов. Нумерация элементов массива начинается с 0. Следовательно, мы получили 6 элементов номера которых 0 - 5.
      Для обращения к элементу массива нужно указать имя массива и в квадратных скобках индекс элемента
      PHP:
      iArray[0];    // 1-й элемент массива
      iArray[1];    // 2-й элемент массива
      ...
      iArray[4];    // 5-й элемент массива
      iArray[5];    // 6-й элемент массива

      iArray[3] = 5;    // Записываем число 5 в 4-й элемент
      Массивы так же можно инициализировать при объявлении:
      PHP:
      int iArray[4] = {416, -28};
      PHP:
      int iArray[8] = {-1, ...};    // Таким образом, весь массив будет инициализирован значением -1
      Если при объявлении указать все элементы массива, то размер массива можно не указывать. Компилятор это сделает сам.
      PHP:
      int iArray[] = {8396};    // Компилятор установит размер массива - 4
      Строки
      Строка – массив типа char.
      В строке символы записываются последовательно и конец строки обозначается нулем. Не символом нуля ( '0' ), а именно нулем ( '\0' или 0 ).
      При этом существуют понятия как размер строки и длина строки.
      • Размер строки - размер массива указанный при создании.
        PHP:
        char sString[32];    // Размер строки - 32
        Получить размер строки строки можно функцией sizeof
        PHP:
        char sString[32];
        PrintToServer("Размер строки: %i"sizeof(sString));
        Результат:
      • Длина строки - количество символов записанных в строке. (количество символов до нулевого)
        PHP:
        char sString[32] = "string";    // Размер строки - 32
        //    Длина строки - 6
      Получить длину строки строки можно функцией strlen
      PHP:
      char sString[32] = "длина строки";
      PrintToServer("Длина строки: %i"strlen(sString));
      Результат:
      К отдельным символам в строке нужно обращаться как к элементам массива
      Символ- одна ячейка в строке. Заключен в одинарные кавычки.
      PHP:
      char sString[32] = "строка";
      sString[0] = 'С'// Заменяем первый символ на 'С'
      Чтобы очистить строку достаточно установить первым элементом строки нулевой символ:
      PHP:
      char sString[32] = "строка";
      sString[0] = 0// Либо sString[0] = '\0';
      После этого строку можно считать пустой.
      Для работы со строкам в SourcePawn существуют определенные функции (string · SourceMod Scripting API Reference)

      Многомерные массивы
      PHP:
      int iArray[3][5];    // Двухмерный массив 3 на 5
      В созданном массиве iArray есть 3 элемента, на каждый из которых приходится еще 5. И того все элементы массива iArray:
      PHP:
      iArray[0][0];
      iArray[0][1];
      iArray[0][2];
      iArray[0][3];
      iArray[0][4];

      iArray[1][0];
      iArray[1][1];
      iArray[1][2];
      iArray[1][3];
      iArray[1][4];

      iArray[2][0];
      iArray[2][1];
      iArray[2][2];
      iArray[2][3];
      iArray[2][4];
      Например, массив 8*8 визуально выглядит как шахматная доска, 8*8*8 как куб по 8 элементов во все стороны.
      Динамические массивы
      SourcePawn при создании массива требует указания размера как константы. Поэтому нельзя создать массив размером, которого является значение переменной:
      PHP:
      int a 7;
      int b[a];
      Получаем ошибку:
      Эту проблему позволяют решить динамические массивы.
      PHP:
      int a 7;
      int[] = new int[a];
      Абстрактный тип данных
      В SourcePawn существуют объекты абстрактного типа данных, о них будет идти речь в следующих уроках.

    4. Операторы
      • Присвоения ( = )
        Присваивает аргументу стоящему слева от оператора, значение стоящее справа:
        PHP:
        int a 7;    // Слева a, справа 7. Присваиваем a значение 7
      • Математические:
        • Сложение ( + )
        • Вычитание ( - )
        • Умножение ( * )
        • Деление ( / )
        • Остаток от деления ( % )
        • Возведение в степень ( ^ )

      Объединение математических операторов и операторов присвоения
      PHP:
      int a 7;
      int b 4;
      += a;    // Идентично b = b + a;
      Аналогично делается и с другими операторами

      Приоритет операций
      Приоритеты описаны здесь Приоритет операций C++ — cppreference.com (не всё актуально для SourcePawn)

      Инкремент, декремент
      Инкремент (++) – операция увеличения значения на еденицу.
      Декремент (--) – операция уменьшения значения на еденицу.
      Обе эти операции бывают 2-х видов:
      • Префиксный - сначала выполняется Инкремент/Декремент, затем получается значение.
      • Постфиксный - сначала получается значение, затем выполняется Инкремент/Декремент.

      PHP:
      // Постинкремент
      int a 7;
      a++;    // a будет равно 8 

      // Преинкремент
      int a 7;
      ++
      a;    // a будет равно 8

      // В этом случае между видами инкремента не будет заметно разницы
      PHP:
      // Постинкремент
      int a 7;
      if(
      a++ == 8)    // Ложь. Сначала берется значение a, которое равно 7, сравнивается, а потом только выполняется прибавление
      {
          
      // код
      }

      // Престинкремент
      int a 7;
      if(++
      == 8)    // Истина. Сначала выполняется прибавление, затем берется значение a, которое уже будет равно 8 и сравнивается
      {
          
      // код
      }
      Условные операторы
      • Условный оператор if
        Выполняет проверку истинности условия
        PHP:
        if(условие)
        {
            
        // код, который будет выполнен если условие истинно
        }
        PHP:
        int a 5;
        if(
        2)    // Условие выполнится т.к. 5 > 2
        {
            
        // код
        }
        • Ключевое слово else
          Всегда идет после кода условия if. Выполняется в случае если условие if не выполнилось:
          PHP:
          if(условие)
          {
              
          // код если условие истинно
          }
          else 
          // Иначе
          {
              
          // код если условие не истинно
          }
          Например
          PHP:
          int a 1;
          if(
          2)    // Условие не выполнится т.к. 1 не больше 2
          {
              
          // код
          }
          else    
          // Код ниже будет выполнен т.к. не было выполнено условие if
          {
              
          // код
          }
        • Конструкция if ... else if ... else
          Например
          PHP:
          int a 5;
          if(
          9)    // Если 5 > 9
          {
              
          // код
          }
          else if(
          6)    // иначе если 5 > 6
          {
              
          // код
          }
          else if(
          3)    // иначе если 5 > 3
          {
              
          // код
          }
          else    
          // иначе
          {
              
          // код
          }
        • Сокращенный if
          Синтакис:
          PHP:
          (логическое выражение) ? (если выражение истинно) : (если выражение ложно)
          Если логическое выражение истинно то выбирается значения стоящее слева от двоеточия, иначе - значение справа.
          Применяется он для проверок внутри выражений.
          PHP:
          int a 5;
          int b 8;
          int c 10 - ((b) ? b:a);
          Если a > b то выражение примет вид:
          PHP:
          int c 10 b;
          иначе:
          PHP:
          int c 10 a;
          На примере строк:
          PHP:
          bool bValue true;
          char sBuffer[64];
          FormatEx(sBuffersizeof(sBuffer), "Значение: %s"bValue "Вкл":"Выкл");
          Если bValue будет равна true то строка примет вид:
          Код:
          "Значение: Вкл"
          Если же false то
          Код:
          "Значение: Выкл"
      • Условный оператор switch
        PHP:
        switch (выражение)
        {
            case 
        значение_1:
            {
                
        // код
            
        }
            case 
        значение_2:
            {
                
        // код
            
        }
            case 
        значение_3:
            {
                
        // код
            
        }
            case 
        значение_n:
            {
                
        // код
            
        }
            default:
            {
                
        // код
            
        }
        }
        Оператор работает следующем образом. Вычисляется значение выражения. Затем выполняются операторы, помеченные значением, совпадающим со значением выражения. То есть если, выражение принимает значение_1, то выполняются операторы_1 и т.д.. Если выражение не принимает ни одного из значений, то выполняются операторы, расположенные после слова default.
        Ветвь default может отсутствовать.
        PHP:
        int a 6
        switch (выражение)
        {
            case 
        0:
            {
                
        // a равно 6
                // код
            
        }
            case 
        1,2:
            {
                
        // a равно 1 или 2
                // код
            
        }
            case 
        3,4:
            {
                
        // a равно 3 или 4
                // код
            
        }
            case 
        5,6,7:
            {
                
        // a равно 5 или 6 или 7 
                // код
            
        }
            default:
            {
                
        // a не равно ни одному значению выше
                // код
            
        }
        }
        Выражением внутри switch() может любое целочисленное выражение, или выражение у которого есть однозначное преобразование к этому типу.

      Операторы отношения
      • Равно ( == )
        Выполняет проверку, равны ли значения слева и справа от оператора
        PHP:
        if(== b// Если a равно b
        {
            
        // код
        }
      • Не равно ( != )
        Выполняет проверку, не равны ли значения слева и справа от оператора
        PHP:
        if(!= b// Если a не равно b
        {
            
        // код
        }
        Для проверки != 0 существует сокращение
        PHP:
        // Для int
        if(iValue// Аналогично if(iValue != 0) 
        {
            
        // код
        }
            
        // Для bool
        if(bValue// // Аналогично if(bValue != false) или  if(bValue == true)
        {
            
        // код
        }
            
        // Для float
        if(fValue// // Аналогично if(fValue != 0.0) 
        {
            
        // код
        }
            
        // Для Handle и его дочерних типов
        if(hValue// // Аналогично if(hValue != null)
        {
            
        // код
        }
        Или его обратная форма:
        PHP:
        // Для int
        if(!iValue// Аналогично if(iValue == 0) 
        {
            
        // код
        }
            
        // Для bool
        if(!bValue// // Аналогично if(bValue != true) или  if(bValue == false)
        {
            
        // код
        }
            
        // Для float
        if(!fValue// // Аналогично if(fValue == 0.0) 
        {
            
        // код
        }
            
        // Для Handle и его дочерних типов
        if(!hValue// // Аналогично if(hValue == null)
        {
            
        // код
        }
      • Больше ( > )
        Выполняет проверку, больше ли значение слева от оператора, чем значение справа
        PHP:
        if(b// Если a больше b
        {
            
        // код
        }
      • Больше или равно ( >= )
        Выполняет проверку, больше или равны ли значение слева от оператора, чем значение справа
        PHP:
        if(>= b// Если a больше или равно b
        {
            
        // код
        }
      • Меньше ( < )
        Выполняет проверку, меньше ли значение слева от оператора, чем значение справа
        PHP:
        if(b// Если a меньше b
        {
            
        // код
        }
      • Меньше или равно ( <= )
        Выполняет проверку, меньше или равны ли значение слева от оператора, чем значение справа
        PHP:
        if(<= b// Если a меньше или равно b
        {
            
        // код
        }

      Логические операторы
      • И (&&)
        Возвращает истину, только если оба выражения тоже истинны
        PHP:
        if(&& c// Если a больше b и b меньше c
        {
            
        // код
        }
      • ИЛИ (||)
        Возвращает истину, только если хоть одно из выражений тоже истинно
        PHP:
        if(|| c// Если a больше b или b меньше c
        {
            
        // код
        }
      • НЕ (!)
        1. Сначала приводит аргумент к логическому типу true/false.
        2. Затем возвращает противоположное значение.
        PHP:
        if((b) && (c))
        {
          
        // код
        }
      Для соблюдения логики действий и проверок выражения лучше брать в скобки:


      Битовые операторы

      Выполняют операцию с битами в числах
      • И (&)
      • ИЛИ (|)
      • НЕ (~)
      • Исключающее ИЛИ (^)
      • Сдвиг влево (<<)
      • Сдвиг вправо (>>)
      Подробнее о них будет рассказано в следующих уроках.
    5. -> Часть 2
    Жду критики, пожеланий, предложений, отзывов.
     
    Последнее редактирование: 2 окт 2016
    diller110, 666FoX666, hearest и 8 другим нравится это.
  2. DarklSide

    DarklSide

    Сообщения:
    685
    Симпатии:
    173
    1. Комментарии

    <<Многострочный:

    [Add+] Многострочный комментарий в одну строку
    [Add+] Известные проблемы с ним:

    PHP:
    /*
    public void OnPluginStart()
    {
       /* // warning 216: nested comment
       int _iPrintName = 10;
       PrintToServer("%d", _iPrintName);
       */
    // error 054: unmatched closing brace ("}")
    */  // <-

    2. Переменные

    <<Ограничение на имена переменных:

    <<Первым символом обязательно должна быть буква
    [Add+] или символ "_" - (_iPrintName).


    <<В SourcePawn если начальное значение не указано переменные инициализируются значением 0.
    [Add+] Значением в разных типах.
    PHP:
    bool bVar// false
    float fVar// 0.0
    <<Виды переменных

    <<Переменные бывают:
    [Add+] Статические локальные
    [Add+] Статические глобальные
    И их область видимости.


    3. Массивы

    <<Строки

    <<При этом существуют понятия как размер строки и длина строки.
    [Add+] Пример их получения операторы (sizeof, length).

    (напутствие): string SourceMod Scripting API Reference.


    [Fix*] абстрактного типа данных - link.


    4. Операторы

    <<Условные операторы

    <<Выполняет проверку истинности условия
    [Add+] Подчеркнуть что ложь - может быть истинной:

    PHP:
    bool bVar false;
    if(
    bVar == false)
    {
      
    // in
    }
    else
    {
       
    // no
    }
    <<Код будет выполнен только в том случае, если условие выполняется


    <<Условный оператор switch
    [Add+] Упомянуть что выражение может быть не только целочисленное, но и у которого есть однозначное преобразование к этому типу.

    Например:
    PHP:
    GiveMenu(client)
    {
       if (
    IsClientInGame(client))
       {
         
    Menu mMenu CreateMenu(Mweapon);
         
    mMenu.SetTitle("Какое оружие?");
         switch (
    GetClientTeam(client))
         {
           case 
    2:
           {
             
    AddMenuItem(mMenu"weapon_usp_silencer""USP-S");
             
    AddMenuItem(mMenu"weapon_hkp2000""P2000");
             
    AddMenuItem(mMenu"weapon_cz75a""CZ75-Auto");
             
    AddMenuItem(mMenu"weapon_fiveseven""Five-Seven");
             
    AddMenuItem(mMenu"weapon_famas""FAMAS");
             
    AddMenuItem(mMenu"weapon_m4a1""M4A4");
             
    AddMenuItem(mMenu"weapon_m4a1_silencer""M4A1-S");
             
    AddMenuItem(mMenu"weapon_aug""AUG");
           }
           case 
    3:
           {
             
    AddMenuItem(mMenu"weapon_glock""Glock");
             
    AddMenuItem(mMenu"weapon_usp_silencer""USP-S");
             
    AddMenuItem(mMenu"weapon_cz75a""CZ75-Auto");
             
    AddMenuItem(mMenu"weapon_tec9""TEC-9");
             
    AddMenuItem(mMenu"weapon_galilar""Galil");
             
    AddMenuItem(mMenu"weapon_ak47""AK-47");
             
    AddMenuItem(mMenu"weapon_sg556""SG553");
             
    AddMenuItem(mMenu"weapon_m4a1""M4A4");
             
    AddMenuItem(mMenu"weapon_m4a1_silencer""M4A1-S");
           }
         }
         
    mMenu.ExitButton true;
         
    mMenu.Display(clientMENU_TIME_FOREVER);
       }
    }
    public 
    int Mweapon(Menu menuMenuAction actionint clientint param2)
    {
       switch (
    action)
       {
         case 
    MenuAction_Select:
         {
           
    char info[22];
           
    GetMenuItem(menuparam2infosizeof(info));
           
    int Slots;
           switch (
    info[9])
           {
             case 
    'p''o':Slots 1;
             case 
    '7''c''v':Slots 1;
             case 
    'm':Slots 0;
             case 
    'a':Slots 0;
             case 
    'g':Slots 0;
             case 
    'l':Slots 0;
             case 
    '4':Slots 0;
             case 
    '5':Slots 0;
           }
           
    GiveWeap(clientinfoSlots);
         }
       }
    }

    <<Логические операторы

    PHP:
    if(&& c// Если a больше b и b меньше c
    {
      
    // код
    }
    [Add+] Если точный приоритет операций не описан, то для начала - брать их в скобки.
    PHP:
    if((b) && (c))
    {
      
    // код
    }
    2. Функции

    <<Параметры (аргументы) функции

    [Add+] Лучше разделить и описать их принцип.


    5. Циклы
    [Add+] Описать более подробно - об условии продолжения цикла.

    P.S.: Пожелания - приводить разные примеры, не только одного типа int.
     
    Последнее редактирование: 4 сен 2016
  3. SHAREN

    SHAREN Servers-Info.Ru

    Сообщения:
    206
    Симпатии:
    13
    думаю стоит добавить в коммент что если не присваивать значение, то по умолчанию a = 0;

    Плюс ожидал увидеть это
    Код:
    (логическое выражение) ? (если выражение истинно) : (если выражение ложно);
    Можно ещё добавить такой пример когда нет логических операторов и условие должне не равняться или равняться 0.
    Код:
    if(a) // Если a не равно 0 (т.е. true), равносильно if(a != 0) 
    {
     // код
    }
    if(!a) // Если a равно 0 (т.е. false), равносильно if(a == 0) 
    {
     // код
    }
    Ещё напиши почему у тебя в назваинях названия g_iName тоже будет полезно знать.

    Сам потихоньку учусь, в основном ищу примеры на GitHub. Думаю что все было бы доходчивее если бы подкреплялись живыми примерами с GitHub, например по тем же битовым операциям, я ни разу не видел где и для чего они применяются в SourceMod.
     
  4. R1KO

    R1KO Супер-модератор

    Сообщения:
    6.000
    Симпатии:
    2.992
    @SHAREN, @DarklSide, просто все сильно торопили вот и забыл написать о многом.
    там есть написано.
    Завтра всё исправлю/дополню

    Про битовые операции потом будет отдельный разговор
    --- Добавлено позже ---
    @SHAREN, @DarklSide, дополнил
    --- Добавлено позже ---
    Дополнил информацию о Handle
     
    Последнее редактирование: 5 сен 2016