Sign in to follow this  
Followers 0
Guest

Урок № 4 Константы const

1 post in this topic

Константы



Константа - величина, не меняющаяся в процессе выполнения скрипта. В Pawn константы объявляются почти так же, как и переменные, однако каждое объявление начинается со слова const:

const <тип>:<имя> = <значение>;

 


Для примера объявим число Пи:

const Float:M_PI = 3.141593;

 


Теперь объявим целочисленную константу (как и в new, для целых чисел указание типа не потребуется):

const MAX_BYTE = 255;

 


Внимание! В отличие от переменных (new), в константах нужно обязательно указывать значение.

Правила задания имён у констант те же, что и у переменных, за исключением одного необязательного:

  • Имя константы должно записываться в верхнем регистре (все буквы большие), чтобы было легче отличить его от имён переменных и функций.

Примеры имён констант: MAX_PLAYERS, MAX_VEHICLES, MAX_PLAYER_NAME.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • Jawn
      By Jawn
      В предыдущем моем уроке я рассказал о том, как пользоваться перехватом функций. Также я сказал, что перехваты функций применяются для того, чтобы можно было изменить поведение конкретной функции. Сегодня я постараюсь объяснить принцип создания античита и для примера написать для Вас античит на деньги.
       
      Как работает античит? Рассмотрим такую ситуацию. При помощи запрещенных программных обеспечений Вы изменяете количество денег у своего игрока. Но спустя несколько секунд (а обычно даже секунду) это количество денег возвращается в прежнее состояние. Можно предположить, что существует какой-то таймер с интервалом, например, в секунду, внутри которого идет проверка: соответствует ли количество денег игрока сейчас тем цифрам, что были во время прежней проверки.
       
      Итак, мы можем получить деньги игрока в данный момент при помощи функции GetPlayerMoney. А с чем нам сверять полученное количество средств? Следует создать новую переменную, в которую уже стоит заносить количество средств, которое должно быть у игрока. Следовательно, нам нужно перехватить функции, связанные с изменением денег, в которых уже производить изменения в значении переменной.
       
      Далее, как я ранее упомянул, следует создать таймер, где уже производить проверку на то, пользуется ли игрок запрещенным программным обеспечением. На этом, в принципе, принцип написания античита завершен. Ровным счетом так же пишутся античиты на здоровье, броню, очки (уровень), телепортацию и многие други. То есть логика везде одинакова.
       
      Начинаем писать античит.
      Мое мнение таково, что античиты следует выносить в отдельные файлы (инклуды). Для этого предлагаю создать в папке "include" новую папку - "anticheats". Внутри новой папки создаем файл "ac_money.inc". Открываем файл.
       
      Прежде всего нам следует задать некое начало нашему файлу, в котором стоит написать проверку на переподключение файла (об этом еще будет урок позже, в данный момент от Вас требуется просто скопировать данный мною ниже код):
      #if defined INC_AC_MONEY #endinput #endif #define INC_AC_MONEY Далее мы объявим переменные, в которых будем хранить количество денег игрока (сколько у него должно быть) и ID таймера для игрока, чтобы могли удалять его после того, как игрок отключился.
      static gPlayerMoney[MAX_PLAYERS], // количество денег, которое должно быть у игрока gPlayerTimer[MAX_PLAYERS]; // ID таймера для игрока, в котором будет идти проверка его баланса Теперь приступим к перехватам. Запуск таймера мы начнем в функции OnPlayerConnect (вызывается, когда игрок подключается), а удалять таймер будем в OnPlayerDisconnect.
      public OnPlayerConnect(playerid) { // создаем таймер, где будем проверять игрока на пользование читами gPlayerTimer[playerid] = SetTimerEx("ac_money_OnPlayerSecondTimer", 1000*1, true, "i", playerid); #if defined ac_money_OnPlayerConnect return ac_money_OnPlayerConnect(playerid); #else return 1; #endif } #if defined _ALS_OnPlayerConnect #undef OnPlayerConnect #else #define _ALS_OnPlayerConnect #endif #define OnPlayerConnect ac_money_OnPlayerConnect #if defined ac_money_OnPlayerConnect forward ac_money_OnPlayerConnect(playerid); #endif public OnPlayerDisconnect(playerid, reason) { KillTimer(ac_timerid[playerid]); // удалим таймер для этого игрока #if defined ac_money_OnPlayerDisconnect return ac_money_OnPlayerDisconnect(playerid, reason); #else return 1; #endif } #if defined _ALS_OnPlayerDisconnect #undef OnPlayerDisconnect #else #define _ALS_OnPlayerDisconnect #endif #define OnPlayerDisconnect ac_money_OnPlayerDisconnect #if defined ac_money_OnPlayerDisconnect forward ac_money_OnPlayerDisconnect(playerid); #endif Мы перехватили две функции - OnPlayerConnect и OnPlayerDisconnect, в которых будем создавать и удалять таймер для проверки игрока на пользование читами. Далее мы должны перехватить функции изменения денег (ResetPlayerMoney, GivePlayerMoney), чтобы в них происходило изменение значения переменной, где записано количество денежных средств данного игрока:
      stock ac_money_GivePlayerMoney(playerid, money) // перехватываем функцию GivePlayerMoney { gPlayerMoney[playerid] += money; return GivePlayerMoney(playerid, money); } #if defined _ALS_GivePlayerMoney #undef GivePlayerMoney #else #define _ALS_GivePlayerMoney #endif #define GivePlayerMoney ac_money_GivePlayerMoney stock ac_money_ResetPlayerMoney(playerid) // перехватим функцию ResetPlayerMoney { gPlayerMoney[playerid] = 0; return ResetPlayerMoney(playerid); } #if defined _ALS_ResetPlayerMoney #undef ResetPlayerMoney #else #define _ALS_ResetPlayerMoney #endif #define ResetPlayerMoney ac_money_ResetPlayerMoney Последнее, что мы не сделали - функцию, в которой будем производить проверку: пользуется ли игрок запрещенными программными обеспечениями? Создаем ее (обратите внимание - я создаю функцию с модификатором public потому, что это будет таймер, а все таймеры следует объявлять с модификаторами public).
      forward ac_money_OnPlayerSecond(playerid); public ac_money_OnPlayerSecond(playerid) { if(GetPlayerMoney(playerid) == gPlayerMoney[playerid]) return 1; // все хорошо, деньги "тогда" и сейчас совпадают SendClientMessage(playerid, -1, "Система расценила Ваши действия как действия читера. Количество средств не совпадает."); Kick(playerid); // выкинем игрока с сервера за пользование сторонними ПО return 0; } На этом, вроде бы, все. файл с античитом, который должен был получиться у Вас, если Вы следовали согласно данному уроку, я приложу ниже. Спасибо за внимание.
       
      Автор данного урока: @Jawn
      AntiCheat money.inc
    • Doc_Block
      By Doc_Block

      ______________________________________
      Приветствую всех пользователей форума или просто гостей.
      На данный момент у меня есть достаточное количество готовых сайтов для проектов SA:MP, буду выкладывать по чуть-чуть.
       
      Скачать: Pawno-Rus (2021 HTML).rar
      Скриншоты (фотокарточки сайта):
       
       
       
      Архив с сайтом прикреплен к теме.
      Пишите свои предложения по улучшению, всё учту.
       
    • Doc_Block
      By Doc_Block

      ______________________________________
      Приветствую всех пользователей форума или просто гостей.
      Сейчас покажу Вам пару способов как защитить свой сайт от копирования.
       
      1. Использование скрипта для запрета копирования:
      <script type="text/javascript"> document.ondragstart = noselect; // запрет на перетаскивание document.onselectstart = noselect; // запрет на выделение элементов страницы document.oncontextmenu = noselect; // запрет на выведение контекстного меню function noselect() {return false;} </script> 2. Запрет выделения текста в CSS-стилях:
      <style type="text/css"> /* Отключение возможности выделения в теге DIV */ .noselect { -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; -o-user-select: none; user-select: none; } </style> 3. Запрет на использование кнопок CTRL+SHIFT+I, F12, CTRL+SHIFT+J, CTRL+U на странице сайта:
      <script type="text/javascript"> document.onkeydown = function(e) { if(event.keyCode == 123) { return false; } if(e.ctrlKey && e.shiftKey && e.keyCode == 'I'.charCodeAt(0)){ return false; } if(e.ctrlKey && e.shiftKey && e.keyCode == 'J'.charCodeAt(0)){ return false; } if(e.ctrlKey && e.keyCode == 'U'.charCodeAt(0)){ return false; } } </script>  
      Если у вас есть еще способы, пишите в данную тему, добавлю.
    • FanVan
      By FanVan
      Здаров, скачал какой-то слитый мод, жрет очень много процессора. Может ли в нем быть майнер?
    • Jawn
      By Jawn
      1. Описание макроса.
      Данный макрос возвращает модуль указанного числа.
      2. Исходный код макроса.
      #if defined abs #undef abs #endif #define abs(%0)\ (%0 < 0) ? (-(%0)) : (%0) 3. Пример использования макроса.
      new a = random(100)-90; // значение переменной может быть отрицательным и положительным printf("Исходное число: %d. Модуль числа: %d.", a, abs(a));