Kyeman, разработчик San Andreas Multiplayer, выпустил критическое обновление SA-MP 0.3 R7
Обновление выпущено в связи с последними атаками на некоторые популярные серверы SA-MP. При успешно проведённой атаке, сервер отключался.
Помимо исправления критических уязвимостей, Kyeman добавил некоторые возможности, не добавленные в первом релизе 0.3а.
Информация о камере:
Благодаря этой возможности вы можете определить, куда смотрит игрок. Обратите внимание, что информацию о камере можно получить лишь тогда, когда игрок передвигается пешком/бегом, находится в режиме спектатора или за рулём транспорта, со специальными "турелями" типа пожарной машины/броневик FBI.
PAWN код:
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:
- Переменные PVars могут быть доступны через скрипты игровых модов и фильтр-скрипты, облегчая модуляризацию кода.
- PVars автоматически удаляются при выходе игрока с сервера, т.е. вам не придётся вручную (или посредством скрипта) обнулять переменные для других присоединяющихся игроков.
- Нет необходимости в сложных вычислениях информационных структур об игроках.
- Экономит память благодаря отсутствию выделения для ID игроков массива в PAWN, который может и не использоваться никогда.
- Вы можете легко составить перечень отображения/хранения списка переменных PVar. Это облегчает хранение и использование информации об игроках.
- Даже если PVar не был определён, определится стандартное значение: 0.
- PVars может обрабатывать очень большие значения, используя динамическое распределение памяти.
PAWN код:
// Система переменных 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.
PAWN код:
native LimitPlayerMarkerRadius(Float:marker_radius);
Добавление к функции повреждения транспорта:
Функция повреждения транспорта вызывается тогда, когда игрок обновляет информацию о повреждении своего авто (OnPlayerUpdate). Новая функция позволяет получать и устанавливать информацию о повреждении транспорта.
PAWN код:
forward OnVehicleDamageStatusUpdate(vehicleid, playerid);
native GetVehicleDamageStatus(vehicleid, &panels, &doors, &lights, &tires);
native UpdateVehicleDamageStatus(vehicleid, panels, doors, lights, tires);
Другое:
Исправлена работа функции fseek() в pawno.
Скачать SA-MP 0.3a R7 (сервера Windows и Linux)