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

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

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

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

Мануал Реалистичная заводка двигателя

faraday.

Эксперт
Регистрация
15 Окт 2015
Сообщения
1,667
Лучшие ответы
77
Репутация
1,008
Награды
1
Ранее публиковал тему Заводка двигателя со звуком
Но потом сделал более улучшенную версию, чтоб не потерялась решил опубликовать.

Суть функции: При зажатии клавиши 'R' включается звук no_engine.mp3
При задержании клавиши на ~2 cекунды включается звук engine.mp3 и двигатель заведен.
Выглядит вполне красиво. видео не передает хороший звук.



Нам потребуется макрос зажатия клавиши:
PHP:
#define PRESSED(%0) \
        (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))//зажал
#define RELEASED(%0) \
        (((newkeys & (%0)) != (%0)) && ((oldkeys & (%0)) == (%0)))//отпустил после зажатия
к new:
PHP:
new engine_car[MAX_VEHICLES],
    engine_stat[MAX_PLAYERS];
    
new engine,lights,alarm,doors,bonnet,boot,objective; // данные переменные есть практически в любом моде.
в public OnPlayerKeyStateChange
PHP:
       if(PRESSED(262144) && GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
	{
		if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 481 || GetVehicleModel(GetPlayerVehicleID(playerid)) == 510) return 1; //проверка на велосипед (Добавить)
		if(!engine_car[GetPlayerVehicleID(playerid)])//заводим
		{
			//if(/*проверка топлива*/ < 1) return SendClientMessage(playerid, -1, "В данном автомобиле нет бензина.");

			engine_stat[playerid] = 0;
			SetPVarInt(playerid,"engine_start", 1);
			SetPVarInt(playerid, "engine_timer", SetTimerEx("engine_timer",50, true, "i", playerid));
			PlayAudioStreamForPlayer(playerid,"http://localhost/denwer/no_engine.mp3");
		}
		else if(engine_car[GetPlayerVehicleID(playerid)] == 1)//глушим
		{
			GetVehicleParamsEx(GetPlayerVehicleID(playerid),engine,lights,alarm,doors,bonnet,boot,objective);
			SetVehicleParamsEx(GetPlayerVehicleID(playerid),VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
            engine_car[GetPlayerVehicleID(playerid)] = 0;
            PlayerPlaySound(playerid, 31810, 0.0, 0.0, 0.0);
		}
		return 1;
	}
	if(RELEASED(262144) && GetPlayerState(playerid) == PLAYER_STATE_DRIVER && GetPVarInt(playerid, "engine_start"))//если отпустил во время заводки
	{
        KillTimer(GetPVarInt(playerid, "engine_timer"));
		StopAudioStreamForPlayer(playerid);
	    if (engine_stat[playerid] < 40)
		{
			DeletePVar(playerid,"engine_start");
			KillTimer(GetPVarInt(playerid, "engine_timer"));
			engine_stat[playerid] = 0;
		}
	}
Таймер:

PHP:
forward  engine_timer(playerid);
public engine_timer(playerid)
{
	engine_stat[playerid] ++;
	if(engine_stat[playerid] == 40)
	{
	    DeletePVar(playerid,"engine_start");
	    GetVehicleParamsEx(GetPlayerVehicleID(playerid),engine,lights,alarm,doors,bonnet,boot,objective);
		SetVehicleParamsEx(GetPlayerVehicleID(playerid) ,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,  objective);
		engine_car[GetPlayerVehicleID(playerid)] =1;
		engine_stat[playerid] = 0;
		PlayAudioStreamForPlayer(playerid,"http://localhost/denwer/engine.mp3");//путь указан на localhost ставьте свой путь
		KillTimer(GetPVarInt(playerid, "engine_timer"));
	}
}

Ссылка на звуки:
Автор: unreal.
 
Последнее редактирование:
Сверху Снизу