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

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

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

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

Мануал Spawner Vehicles | New Version

Статус
В этой теме нельзя размещать новые ответы.

Mathian

Лев Попов
Пользователь
Регистрация
3 Фев 2013
Сообщения
3,003
Лучшие ответы
6
Репутация
813
Награды
2
Всем Хай!
Многие из вас видели тему: http://pawno-info.ru/showthread.php?t=249058

Так вот... Лично у меня возникли не большие проблемы по данной системе.
Да и есть там маленький Fail, если игрока нет в машине, то машина спавнится. И это не удобно в некоторых случаях.
Так же я не юзал Timer и Циклы. Да и кода получилось меньше.​

И так... Не все в курсе, да и я только недавно узнал от Alex_Lenez'а о:
Он срабатывает при движении Свободного Транспорта(Без водителя). Писал я совсем другую систему, появились 5 минут и написал эту xD
PHP:
public OnUnoccupiedVehicleUpdate(vehicleid, playerid, passenger_seat, Float:new_x, Float:new_y, Float:new_z, Float:vel_x, Float:vel_y, Float:vel_z)
Видео:

Приступим... Создадим глобальную переменную, которая будет отвечать за координаты Транспорта:
PHP:
new Float: VehPos[3][MAX_VEHICLES];
Далее в public OnUnoccupiedVehicleUpdate(vehicleid, playerid, passenger_seat, Float:new_x, Float:new_y, Float:new_z, Float:vel_x, Float:vel_y, Float:vel_z):
PHP:
    new Float: VPos[3];
	GetVehiclePos(vehicleid, VPos[0], VPos[1], VPos[2]);
	if(VPos[0] != VehPos[0][vehicleid] || VPos[1] != VehPos[1][vehicleid] || VPos[2] != VehPos[2][vehicleid])
	{
		SetVehiclePos(vehicleid, VehPos[0][vehicleid], VehPos[1][vehicleid], VehPos[2][vehicleid]);
	}
И создаём в конце stock:
PHP:
stock FixCreateVehicle(type, Float: x, Float: y, Float: z, Float: rotation, color1, color2, respawn_delay)
{
    new carid = CreateVehicle (type, x, y, z, rotation, color1, color2, respawn_delay);
    VehPos[0][carid] = x, VehPos[1][carid] = y, VehPos[2][carid] = z;
    return carid;
}
Далее, для того, чтобы машина не вставала на место спавна, при выходе из Транспорта сохраним координаты, в public OnPlayerExitVehicle(playerid, vehicleid):
PHP:
    GetVehiclePos(vehicleid, VehPos[0][vehicleid], VehPos[1][vehicleid], VehPos[2][vehicleid]);
Весь код:
PHP:
#include <a_samp>

new Float: VehPos[3][MAX_VEHICLES];

public OnPlayerExitVehicle(playerid, vehicleid)
{
    GetVehiclePos(vehicleid, VehPos[0][vehicleid], VehPos[1][vehicleid], VehPos[2][vehicleid]);
	return true;
}
public OnUnoccupiedVehicleUpdate(vehicleid, playerid, passenger_seat, Float:new_x, Float:new_y, Float:new_z, Float:vel_x, Float:vel_y, Float:vel_z)
{
    new Float: VPos[3];
	GetVehiclePos(vehicleid, VPos[0], VPos[1], VPos[2]);
	if(VPos[0] != VehPos[0][vehicleid] || VPos[1] != VehPos[1][vehicleid] || VPos[2] != VehPos[2][vehicleid]) SetVehiclePos(vehicleid, VehPos[0][vehicleid], VehPos[1][vehicleid], VehPos[2][vehicleid]);
	return true;
}
stock FixCreateVehicle(type, Float: x, Float: y, Float: z, Float: rotation, color1, color2, respawn_delay)
{
    new carid = CreateVehicle (type, x, y, z, rotation, color1, color2, respawn_delay);
    VehPos[0][carid] = x, VehPos[1][carid] = y, VehPos[2][carid] = z;
    return carid;
}
Никита мне подсказал, что лучше округлить переменные с координатами, вот вариант с округлением(Если вы криво расставляете кары):
Нужно просто проверку заменить на:
PHP:
if(VPos[0] != floatround(VehPos[0][vehicleid]) || VPos[1] != floatround(VehPos[1][vehicleid]) || VPos[2] != floatround(VehPos[2][vehicleid])) SetVehiclePos(vehicleid, VehPos[0][vehicleid], VehPos[1][vehicleid], VehPos[2][vehicleid]);
И будет так:
PHP:
#include <a_samp>

new Float: VehPos[3][MAX_VEHICLES];

public OnPlayerExitVehicle(playerid, vehicleid)
{
    GetVehiclePos(vehicleid, VehPos[0][vehicleid], VehPos[1][vehicleid], VehPos[2][vehicleid]);
	return true;
}
public OnUnoccupiedVehicleUpdate(vehicleid, playerid, passenger_seat, Float:new_x, Float:new_y, Float:new_z, Float:vel_x, Float:vel_y, Float:vel_z)
{
    new Float: VPos[3];
	GetVehiclePos(vehicleid, VPos[0], VPos[1], VPos[2]);
	if(VPos[0] != floatround(VehPos[0][vehicleid]) || VPos[1] != floatround(VehPos[1][vehicleid]) || VPos[2] != floatround(VehPos[2][vehicleid])) SetVehiclePos(vehicleid, VehPos[0][vehicleid], VehPos[1][vehicleid], VehPos[2][vehicleid]);
	return true;
}
stock FixCreateVehicle(type, Float: x, Float: y, Float: z, Float: rotation, color1, color2, respawn_delay)
{
    new carid = CreateVehicle (type, x, y, z, rotation, color1, color2, respawn_delay);
    VehPos[0][carid] = x, VehPos[1][carid] = y, VehPos[2][carid] = z;
    return carid;
}
Не забудьте создание транспорта заменить на FixCreateVehicle, иначе могут быть проблемы.

P.S. Повторюсь Функция срабатывает только тогда, когда движется транспорт без водителя. Так что, по-моему, не будет такой проблемы как с public OnPlayerUpdate(playerid)

Всем Спасибо за внимание xD
Автор: Я((Lev_Popov))
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу