nPawn - обновление Pawn до самой новой версии
В SA-MP из коробки используется Pawn версии 3.2.*, которая является очень устаревшей: в ней не только нет нового функционала, но и нет необходимых исправлений, некоторые из которых могут крашнуть сервер (valstr или работа с запакованными строками, к примеру). Данный плагин обновляет Pawn до последней версии из официального репозитория CompuPhase (последнее изменение 21 час назад на момент создания темы). Совместим со всеми версиями SA-MP (с CR-MP тоже).
Известные баги:
- Возможно использовать только мод, скрипты (filterscripts) использовать нельзя. Это сделано для поддержки всех версий SA-MP, а также для сохранения производительности
- Возможна некорректная работа с некоторыми плагинами
Небольшой обзор некоторых новых возможностей:
Структуры - замена enum
new msg[.text{30}, .priority];
msg.priority = 10;
strpack(msg.text, "update: {30} means [30 char]");
print(msg.text);
Новые перечисления
Пример из file.inc:
const filemode:
{
io_read = 0, /* file must exist */
io_write, /* creates a new file */
io_readwrite, /* opens an existing file, or creates a new file */
io_append, /* appends to file (write-only) */
}
Работа с INI из коробки, а также новые функции для файлов
INI:
native readcfg(const filename[]=``'', const section[]=``'', const key[], value[], size=sizeof value, const defvalue[]=``'', bool:pack=true);
native readcfgvalue(const filename[]=``'', const section[]=``'', const key[], defvalue=0);
native bool: writecfg(const filename[]=``'', const section[]=``'', const key[], const value[]);
native bool: writecfgvalue(const filename[]=``'', const section[]=``'', const key[], value);
native bool: deletecfg(const filename[]=``'', const section[]=``'', const key[]=``'');
Новые функции file.inc:
native bool: fcopy(const source[], const target[]);
native bool: frename(const oldname[], const newname[]);
native bool: fcreatedir(const name[]);
native bool: fstat(name[], &size = 0, ×tamp = 0, &mode = 0, &inode = 0);
native bool: fattrib(const name[], timestamp=0, attrib=0x0f);
native filecrc(const name[]);
И многое другое, некоторые изменения есть здесь: http://www.compuphase.com/pawn/pawnhistory.htm, также рекомендую посмотреть стандартные примеры https://github.com/g3o0or/npawn-samp.../pawn/examples и поковыряться в обновленных инклудах.
Изменения в API, не связанные напрямую с обновлением Pawn:
1. Все строки в аргументах кэллбеков запакованы
2. Запакованные строки можно использовать со всеми функциями SA-MP
3. Для функций вроде GetPlayerName (т. е. для тех, которые записывают строку в аргумент) добавлен последний аргумент bool:ispacked. По умолчанию он равен true.
4. В SA-MP использовалась функция format, взятая из AMXMODX. Она заменена функцией strformat, вся разница в том, что она работает с запакованными строками и добавлен третий аргумент ispacked.
5. Добавлен инклуд a_vec.inc (по умолчанию включен в a_samp.inc), который включает в себя некоторые (будут добавляться) функции, использующие одну переменную Vector3, а не три float, у них добавлен суффикс Vec. Vector3 является структурой с полями Float:x, Float:y и Float:z. Пример:
PHP код:
new pos[Vector3];
GetPlayerPosVec(playerid, pos);
pos.z += 20.0;
SetPlayerPosVec(playerid, pos);
Примеры использования новых фич:
http://image.prntscr.com/image/b819c...2070c1858a.png
Автор: g3o0or
Исходный код: https://github.com/g3o0or/npawn-samp
Бинарники: https://github.com/g3o0or/npawn-samp/releases
Инклуды, которые необходимо заменить: https://github.com/g3o0or/npawn-samp...ources/include