Доступ к готовым решениям

Переход в группу "Пользователь"

300.00
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info
  • Новые темы в этом разделе публикуются автоматически при добавлении файла в менеджер ресурсов.
    Ручное создание новых тем невозможно.

Pawn Plus v0.5

Wallhacker

Изучающий
Регистрация
8 Июн 2018
Сообщения
295
Лучшие ответы
0
Репутация
39
Доброго времени суток уважаемые пользователи Pawno-Info!
Хочу представить вашему вниманию, плагин Pawn Plus

Github
Dowland:
Source:
Tutorials:

Автор: IS4
Оригинал темы:

Что это за плагин?
PawnPlus улучшает язык программирования Pawn и стандартную библиотеку с новым синтаксисом, новыми функциями и механизмами, которые позволяют кодировать в Pawn, используя лучшие методы, подобные современным языкам программирования.

Пример:
PHP:
SendClientMessage(playerid, -1, "Loading...");
await LoadPlayerAsync(playerid);
SendClientMessage(playerid, -1, "Loaded!");
Оператор await приостанавливает выполнение текущего кода до завершения поставленной задачи. Тем временем может выполняться любой другой код, будь то из того же сценария или другого. Очень легко реализовать такую функцию, как LoadPlayerAsync, динамически регистрируя обработчик обратного вызова для любого обратного вызова, делая практически любое событие конвертируемым в задачи.

Динамически выделяемые строки

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

Поскольку память, назначенная строке, не хранится в AMX-машине, строковое значение может быть безопасно передано или возвращено из функций.

Строки PawnPlus не завершаются null, что означает, что они могут даже хранить нулевой символ, что делает их жизнеспособным вариантом для хранения двоичных данных в памяти. Их символы имеют Размер ячейки, что делает их способными содержать любой массив. Большинство операций с динамическими строками выполняются быстрее, чем с обычными строками, поскольку длина строки всегда доступна.


Кроме того, очень легко адаптировать почти любую функцию SA-MP или plugin, чтобы вместо нее взять строку PawnPlus. Например, SendClientMessage можно изменить следующим образом

PHP:
native SendClientMessageStr(playerid, color, AmxString:message) = SendClientMessage;

SendClientMessageStr(playerid, -1, @("Hello, id ") + str_val(playerid));
Оператор @ создает новую динамическую строку из строкового литерала. + может использоваться для создания новой строки путем объединения двух строк.

Сontainers:

PawnPlus добавляет карту и контейнеры списка (реализованные как std::unordered_map и std:: vector, соответственно). Эти контейнеры поддерживают стандартные операции, такие как добавление или удаление элементов, поиск и перебор. Кроме того, вставка любого значения в контейнер также сохраняет его тег, поэтому к элементам в контейнерах можно получить доступ типобезопасным способом.

Эти контейнеры являются гетерогенными, что означает, что они могут хранить любое количество значений любого типа, даже массивы. Также можно получить тег значения. Списки индексируются целыми числами, начиная с 0, в то время как карты могут использовать любое значение в качестве ключа (даже строки/массивы), и тег ключа также должен быть правильным при получении значения. Поскольку карта реализована с использованием хэш-таблицы, доступ к любому ключу может быть довольно быстрым, потому что нет необходимости пересекать всю карту.

Это также очень легко передавать объекты любого типа, потому что этот плагин также добавляет Тип называют вариант. Вариант-это объект, который может хранить одну ячейку или весь блок, вместе с его меткой. Он может быть, например, получен из списка и вставлен в другой список, без необходимости иметь дело с типом. str_val также работает с variant и может корректно отформатировать сохраненное значение. Варианты можно даже передать в собственные функции, вызвав pawn_call_native вместе со спецификатором формата" v". Эта функция также принимает список ("l") и обрабатывает его как переменное число аргументов.


Threads:

Несмотря на то, что асинхронное программирование является предпочтительным, также может возникнуть необходимость в выполнении параллельных вычислений. Однако, поскольку работа с потоками и примитивами синхронизации нетривиальна, вызывая распространенные ошибки кода, этот плагин использует другой подход. Любой код, который должен выполняться параллельно с сервером, содержится в потоковом блоке, который гарантирует, что код выполняется параллельно с сервером, но как только блок заканчивается, выполнение продолжается как обычно.
PHP:
print("begin");
threaded(sync_explicit)
{
    for(new i = 0; i < 10000; i++) printf("%d", i);
}
print("end");
Блок threaded инициализируется флагами синхронизации, указывающими характер потока и способ обработки вызовов. Более подробная информация здесь.

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


Сallbacks and Hooking

Также было добавлено несколько новых функций, позволяющих регистрировать и отменять регистрацию обратных вызовов во время выполнения без фактического размещения публичной функции в коде, что полезно для создания задач. Вы также можете вызвать любую собственную функцию (без указания ее в Pawn) с любым количеством аргументов, и Вы также можете подключить любую собственную функцию с любым кодом, который вы хотите, изменяя аргументы или возвращаемое значение.




P.S извиняюсь за плохой перевод, в английском не силен
 
Последнее редактирование:
  • Нравится
Реакции: Iwka
Сверху Снизу