Перейти к содержимому

Приветствуем вас на 99Fps.Ru - Дом, милый дом!
Зарегистрируйтесь сейчас, чтобы получить доступ ко всем нашим функциям. После регистрации и входа в систему Вы сможете создавать темы, отвечать на существующие темы, использовать систему репутации ввиде бананчиков, получить свой собственный мессенджер, размещать обновления статусов, управлять профилем и многое другое. Если у вас уже есть учетная запись, Войдите - Регистрация нового аккаунта


Фотография

[PAWN] Переменные/Модули


  • Закрытая тема Тема закрыта
Сообщений в теме: 8

#1
Eriurias

Eriurias
  • Пользователи
  • 109 сообщений





В данной статье мы узнаем как создавать переменные, объявить значения для них.

[FONT='comic sans ms']Переменные[/FONT]

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

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


new Variable
new - оператор, он создает переменную.

Variable - имя переменной, имя переменной может быть любым, но не должно иметь только число, то есть


new 1
будет ошибкой. Так же обратите внимание, что названия переменных чувствительны к регистру, то есть Variable и variable - это две разные переменные.

Существуют глобальные, локальные и статические переменные. В чем разница, спросите вы? Долой теорию, рассмотрим на примерах.

1.


#include <amxmodx>

new Variable //создали глобальную переменную, не присваивая ей значение по умолчанию


public client_putinserver(Player)//данный форвард запустится, когда игрок подключится и уже увидит первые текстуры на карте
{
    Variable = 99 //присвоили ей значение 99
    textprint(Player) //открыли форвард textprint
}

public textprint(Player) return client_print(Player, print_chat, "%s", Variable) //отправляем игроку в чат значение переменной Variable
2.


#include <amxmodx>

public client_putinserver(Player)//данный форвард запустится, когда игрок подключится и уже увидит первые текстуры на карте
{
    new Variable = 99 //создали локальную переменную и присвоили ей значение 99
    client_print(Player, print_chat, "%s", Variable) //отправляем игроку в чат значение переменной Variable
}
3. Разница между глобальными/локальными переменными и статическими.

В отличии от new, оператор static создает статическую переменную. Рассмотрим разницу в примерах:

3.1. Оператор new


public CmdNew()
{
new Variable //создали локальную переменную
Variable++//прибавили ей +1 к значению
server_print("%d", Varible)//вывели в консоль сервера значение переменной Variable
}
/* Теперь разберем:
Если вызвать форвард CmdNew два раза, то
переменная каждый раз будет заново создаваться,
то есть будет по умолчанию значение 0
мы будем прибавлять +1 и выводить в консоль, значение всегда будет 1.
Почему?
Потому что мы при каждом вызове форварда,
создаем переменную по новому и заново прибавляем +1 */ 
3.2. Оператор static


public CmdStatic()
{
static Variable //создали статическую переменную
Variable++//прибавили ей +1 к значению
server_print("%d", Varible)//вывели в консоль сервера значение переменной Variable
}
/* Теперь разберем:
Если вызвать форвард CmdStatic два раза,
мы будем прибавлять +1 и выводить в консоль, значение будет 2.
Почему?
Потому что static не пересоздает переменную, а работает с ранее созданной,
иными словами она сохраняет значение
P.S.: Принцип ее глобальности/локальности тот же самый, что и с оператором new*/  
_____________________________________

В первом примере видно, что создав глобальную переменную, мы можем работать с ней по всему нашему плагину, в каждом форварде.

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


#include <amxmodx>

public client_putinserver(Player) //вы уже знаете для чего служит этот форвард
{
    new Variable = 99 //создали локальную переменную внутри форварда client_putinserver
    textprint(Player) //открыли форвард textprint
}

public textprint(Player) return client_print(Player, print_chat, "%s", Variable)
/* мы хотим отправить значение переменной Variable в чат игроку,
но компилятор откажется компилировать плагин и сообщит об ошибке, что
переменной Variable не существует, а все почему?
Потому что она локальная и существует только внутри форварда client_putinserver */
Третий пример был рассмотрен в комментариях к коду.

[FONT='comic sans ms']Модули[/FONT]

В Amx Mod X есть свои стандартные модули, содержащие свои функции. Каждый модуль обладает своими плюсами и минусами. О них можно говорить бесконечно.

Стандартные модули:

  • Amxmodx - собственно само ядро, содержит основные функции.
  • Cstrike - содержит довольно много функций для изменения геймплея.
  • Fun - данный модуль был создан с целью изменения характеристики игрока, такие как здоровье, броня, гравитация, скорость и т.д., одно название модуля означает "Веселье".
  • Engine - позволяет работать с основными функциями движка Half-Life, например изменения свойств объектов или их создание.
  • Fakemeta - является довольно мощной альтернативой модулю Engine. Позволяет взаимодействовать почти со всем движком Half-Life, вызывая DLL, Engine функции, создание функций вызываемых при определенных событиях и другие возможности.
  • Hamsandwich - один из самых нужных, можно сказать незаменимых модулей для работы с отловом игровых событий в игровом мире, такие как получение урона, смерть, спавн и т.д., обладает функционалом, которых нет в других модулях, а если и есть, то он более шустрый и менее потребительный к ресурсам сервера.
  • GeoIP - модуль содержит функции, которые позволяют узнать некоторую информацию об игроке по его внешнему IP адресу, такие как страна, город, позволяет получать эти данные в аббревиатурах или в полном формате.
  • CSX - модуль для работы со статистикой, а так же дает возможность работать с событиями в игровом мире, данный модуль проиграл модулю Hamsandwich в его быстроте работы и потреблении ресурсов.
  • Socket - модуль содержит функции для управления сетевыми сокетами TCP/UDP.
  • SQLx - модуль позволяет работать с базой данных MySQL, альтернативы данному модулю в работе с подобным нет.

  • 10


Если человека нельзя вылечить, это не значит, что ему нельзя помочь. © Google.


#2
raynolds.

raynolds.
  • Пользователи
  • 45 сообщений





я ничего не понял, но мне понравилось.
  • 2

#3
mde...

mde...
  • Пользователи
  • 44 сообщений





Спасибо за статью, узнал немного нового)
  • 0

#4
_X7

_X7
  • Пользователи
  • 1 сообщений





большое спасибо за ваши стати, надеюсь будет новая =)
  • 0

#5
AvtoManret

AvtoManret
  • Пользователи
  • 1 сообщений





Я в pawn тоже набросал ряд чисел, но мне нужно именно последнее число, и на Pawn. Pascal ненавижу
  • 0

#6
To4ka

To4ka
  • Пользователи
  • 100 сообщений





Хотелось бы больше инфы, про переменные типа булен услышать.


new bool:To4ka[10]
Желательно бы с примером )
  • 0
Изображение

#7
sashka

sashka
  • Пользователи
  • 83 сообщений





@To4ka,  http://amxxmodx.ru/l...kl-funkcii.html
 
  • 0

#8
To4ka

To4ka
  • Пользователи
  • 100 сообщений





@To4ka,  http://amxxmodx.ru/l...kl-funkcii.html

Я тоже так умею https://ru.wikipedia.../Логический_тип
  • 0
Изображение

#9
Eriurias

Eriurias
  • Пользователи
  • 109 сообщений





@To4ka, булевые переменные отличаются лишь тем, что они могут иметь два значения: ложь (false) или истина (true) . 
  • 0


Если человека нельзя вылечить, это не значит, что ему нельзя помочь. © Google.





Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных