Вышло новое обновление для серверов. На этот поступок нас сподвигло DoS-нападение на некоторые популярные сервера.
Внимание: это не 0.3b. Это опциональное обновление серверов, и только. Оно не исправляет все существующие баги, многие из которых удастся исправить только в следующей версии обновления клиента/сервера. Версия сервера 0.3a R5 исправляет уязвимость для DoS-аттак, когда игрок посылает на сервер неверные данные, сгенерированные внешними программами, что могло использоваться для получения отладочных данных сервера и приводило к его отключению.
Кроме того, новая версия серверов поддерживает новые воможности скриптинга, упущенные в базовом релизе:
Информация о камере:
Благодаря этой возможности вы можете определить куда смотрит игрок. Обратите внимание, что информацию о камере можно получить лишь тогда, когда игрок пешком, в режиме спектакора или за рулём транспорта, со специальными "турелями" типа пожарной машины и водомёта.
Функции работы с камерой:
native GetPlayerWeaponState(playerid);
native GetPlayerCameraPos(playerid, &Float:x, &Float:y, &Float:z);
native GetPlayerCameraFrontVector(playerid, &Float:x, &Float:y, &Float:z);
native GetPlayerCameraUpVector(playerid, &Float:x, &Float:y, &Float:z); |
Система переменных Per-player: (PVars):
Первоначально SA-MP был рассчитан на 100 игроков. Это значит, что в PAWN массив с размером MAX_PLAYERS, например такой как PlayerInfo[MAX_PLAYERS], работал нормально. Теперь же лимит MAX_PLAYERS возрос до отметки в 500 ироков, программисты умудряются создавать массивы с 500 элементами для хранения одного флага, что есть нерациональное использование памяти. Эти переменные необходимо обнулить вручную, когда игрок выходит с сервера.
Преимущества использования PVars перед массивами MAX_PLAYERS:
1) PVars могут быть доступны через скрипты игровых модов и фильтр-скрипты, облегчая модуляризацию кода.
2) PVars автоматически удаляются при выходе игрока с сервера, т.е. вам не придётся вручную (или посредством скрипта) обнулять переменные для других присоединяющихся игроков.
3) Нет необходимости в сложных вычислениях информационных структур об игроках.
4) Экономит память благодаря отсутствию выделения для ID игроков массива в PAWN, который может и не использоваться никогда.
5) Вы можете легко составить перечень отображения/хранения списка переменных PVar. Это облегчает хранение и использование информации об игроках.
6) Даже если PVar не был определён, определится стандартное значение: 0.
7) PVars может обрабатывать очень большие значения, используя динамическое распределение памяти.
// Система переменных Per-player (PVars)
native SetPVarInt(playerid, varname[], int_value);
native GetPVarInt(playerid, varname[]);
native SetPVarString(playerid, varname[], string_value[]);
native GetPVarString(playerid, varname[], string_return[], len);
native SetPVarFloat(playerid, varname[], Float:float_value);
native Float:GetPVarFloat(playerid, varname[]);
native DeletePVar(playerid, varname[]);
// Перечень PVar
#define PLAYER_VARTYPE_NONE 0
#define PLAYER_VARTYPE_INT 1
#define PLAYER_VARTYPE_STRING 2
#define PLAYER_VARTYPE_FLOAT 3
native GetPVarsUpperIndex(playerid);
native GetPVarNameAtIndex(playerid, index, ret_varname[], ret_len);
native GetPVarType(playerid, varname[]); |
Дополнения для маркеров игроков:
Если у маркеров игроков стоит мод PLAYER_MARKERS_MODE_GLOBAL, вы можете ограничить радиус "стрима", т.е. расстояния, на котором станут видны маркеры этих игроков другим игрокам. Это может быть полезным, а иногда и важным на некоторых серверах, где количество маркеров ограничено лимитом San-Andreas.
native LimitPlayerMarkerRadius(Float:marker_radius); |
Добавление к функции повреждения транспорта:
Функция повреждения транспорта вызывается тогда, когда игрок обновляет информацию о повреждении своего авто (OnPlayerUpdate). Новая функция позволяет получать и устанавливать информацию о повреждении транспорта.
forward OnVehicleDamageStatusUpdate(vehicleid, playerid);
native GetVehicleDamageStatus(vehicleid, &panels, &doors, &lights, &tires);
native UpdateVehicleDamageStatus(vehicleid, panels, doors, lights, tires); |
Другое:
Исправлена работа функции fseek() в pawno.
Автор: Kye
|