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

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

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

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

Мануал Спидометр

AndreY.eXe

Специалист
Привет!

Похожую реализацию я делал с загрузкой объектов (кликабельно). И вот решил сделать спидометр в таком же стиле.
Сразу отошлю тех, кто будет писать мне про bar'ы: попробуй растянуть бар, и я посмотрю, что у тебя выйдет...
Да, и, как по мне, с ТД проще =) (Обсирайте меня, (про)павнеры xD)

В данном мануале были использованы инклуды:
(Кликабельно)
(Кликабельно)​

В начало мода:

PHP:
new Text: speedometr_TD[15];
new PlayerText: speedometr_PTD[MAX_PLAYERS][10];

new bool: EngineCar[MAX_VEHICLES];
new SpeedometrTimer[MAX_PLAYERS];

static const VehicleName[212][25] =
{
	"Landstalker","Bravura","Buffalo","Linerunner","Perenniel","Sentinel","Dumper","Firetruck","Trashmaster","Stretch","Manana","Infernus","Voodoo",
	"Pony","Mule","Cheetah","Ambulance","Leviathan","Moonbeam","Esperanto","Taxi","Washington","Bobcat","Mr Whoopee","BF Injection","Hunter","Premier",
	"Enforcer","Securicar","Banshee","Predator","Bus","Rhino","Barracks","Hotknife","Article Trailer","Previon","Coach","Cabbie","Stallion","Rumpo","RC Bandit",
	"Romero","Packer","Monster","Admiral","Squallo","Seasparrow","Pizzaboy","Tram","Article Trailer 2","Turismo","Speeder","Reefer","Tropic","Flatbed","Yankee",
	"Caddy","Solair","Berkley's RC Van","Skimmer","PCJ-600","Faggio","Freeway","RC Baron","RC Raider","Glendale","Oceanic","Sanchez","Sparrow","Patriot","Quad",
	"Coastguard","Dinghy","Hermes","Sabre","Rustler","ZR-350","Walton","Regina","Comet","BMX","Burrito","Camper","Marquis","Baggage","Dozer","Maverick","SAN News Maverick",
	"Rancher","FBI Rancher","Virgo","Greenwood","Jetmax","Hotring Racer","Sandking","Blista Compact","Police Maverick","Boxville","Benson","Mesa","RC Goblin","Hotring Racer",
	"Hotring Racer","Bloodring Banger","Rancher","Super GT","Elegant","Journey","Bike","Mountain Bike","Beagle","Cropduster","Stuntplane","Tanker","Roadtrain","Nebula","Majestic",
	"Buccaneer","Shamal","Hydra","FCR-900","NRG-500","HPV1000","Cement Truck","Towtruck","Fortune","Cadrona","FBI Truck","Willard","Forklift","Tractor","Combine Harvester","Feltzer",
	"Remington","Slamvan","Blade","Freight","Brownstreak",	"Vortex","Vincent","Bullet","Clover","Sadler","Firetruck LA","Hustler","Intruder","Primo","Cargobob","Tampa","Sunrise",
	"Merit","Utility Van","Nevada","Yosemite","Windsor","Monster A","Monster B","Uranus","Jester","Sultan","Stratum","Elegy","Raindance","RC Tiger","Flash","Tahoma","Savanna",
	"Bandito","Freight Flat Trailer","Streak Trailer","Kart","Mower","Dune","Sweeper","Broadway","Tornado","AT400","DFT-30","Huntley","Stafford","BF-400","Newsvan","Tug","Petrol Trailer",
	"Emperor","Wayfarer","Euros","Hotdog","Club","Freight Box Trailer","Article Trailer 3","Andromada","Dodo","RC Cam","Launch","Police Car (LSPD)","Police Car (SFPD)","Police Car (LVPD)",
	"Police Ranger","Picador","Police SF.","Alpha","Phoenix","Glendale Shit","Sadler Shit","Baggage Trailer A","Baggage Trailer B","Tug Stairs Trailer","Boxville","Farm Trailer","Utility Trailer"
};
Дальше добавим TextDraw's: (кликабельно)

В OnGameModeInit:

PHP:
ManualVehicleEngineAndLights();

for(new i; i < MAX_VEHICLES; i ++) EngineCar[i] = false;
В OnPlayerConnect (OnPlayerDisconnect):

PHP:
KillTimer(SpeedometrTimer[playerid]);
В OnPlayerStateChange:

PHP:
	if(newstate == PLAYER_STATE_DRIVER)
	{
		for(new i; i < 15; i ++) TextDrawShowForPlayer(playerid, speedometr_TD[i]);
		for(new i; i < 10; i ++) PlayerTextDrawShow(playerid, speedometr_PTD[playerid][i]);
		PlayerTextDrawSetString(playerid, speedometr_PTD[playerid][0], VehicleName[GetVehicleModel(GetPlayerVehicleID(playerid))-400]);

		SpeedometrTimer[playerid] = SetTimerEx("UpdateSpeedometr", 50, true, "ii", playerid, GetPlayerVehicleID(playerid));
		EngineVehicle(GetPlayerVehicleID(playerid), EngineCar[GetPlayerVehicleID(playerid)], playerid);
		// Сюда нужно добавить LightVehicle и DoorsVehicle
	}
	if(oldstate == PLAYER_STATE_DRIVER)
	{
		for(new i; i < 15; i ++) TextDrawHideForPlayer(playerid, speedometr_TD[i]);
		for(new i; i < 10; i ++) PlayerTextDrawHide(playerid, speedometr_PTD[playerid][i]);

		KillTimer(SpeedometrTimer[playerid]);
	}
В конец мода:

PHP:
VehicleSpeed(carid)
{
	new Float:X, Float:Y, Float:Z;
	GetVehicleVelocity(carid,X,Y,Z);
	return floatround( floatsqroot( X * X + Y * Y + Z * Z ) * 180.0 );
}

// Если Вы задаете статус двигателя транспорту, в котором нет игрока, то ничего не пишите под playerid (EngineVehicle(carid, false))
// Или же наоборот, если игрок находится в транспорте (EngineVehicle(carid, false, playerid))
// Так же делаем и с LightEngine и DoorsVehicle
EngineVehicle(carid, bool: status, playerid = -1)
{
	GetVehicleParamsEx(carid, engine, lights, alarm, doors, bonnet, boot, objective);
	EngineCar[carid] = status;
	SetVehicleParamsEx(carid, status, lights, alarm, doors, bonnet, boot, objective);

	if(playerid != -1)
	{
		PlayerTextDrawColor(playerid, speedometr_PTD[playerid][7], EngineCar[carid] ? (1198074879) : (2050175999));
		PlayerTextDrawShow(playerid, speedometr_PTD[playerid][7]);
	}
}

/*
Так же делаем и с Lights и Doors

LightVehicle(carid, bool: status, playerid = -1)
{
	GetVehicleParamsEx(carid, engine, lights, alarm, doors, bonnet, boot, objective);
	Lights[carid] = status;
	SetVehicleParamsEx(carid, engine, status, alarm, doors, bonnet, boot, objective);

	if(playerid != -1)
	{
		PlayerTextDrawColor(playerid, speedometr_PTD[playerid][8], Lights[carid] ? (1198074879) : (2050175999));
		PlayerTextDrawShow(playerid, speedometr_PTD[playerid][8]);
	}
}

DoorsVehicle(carid, bool: status, playerid = -1)
{
	GetVehicleParamsEx(carid, engine, lights, alarm, doors, bonnet, boot, objective);
	Doors[carid] = status;
	SetVehicleParamsEx(carid, engine, lights, alarm, status, bonnet, boot, objective);

	if(playerid != -1)
	{
		PlayerTextDrawColor(playerid, speedometr_PTD[playerid][8], Doors[carid] ? (2050175999) : (1198074879));
		PlayerTextDrawShow(playerid, speedometr_PTD[playerid][8]);
	}
}

*Lights and Doors - Ваши переменные фар и замка
*/

forward UpdateSpeedometr(playerid, carid);
public UpdateSpeedometr(playerid, carid)
{
	new Float: size = 0.0;
	if(VehicleSpeed(carid) < 221)
	{
		for(new i; i < VehicleSpeed(carid); i ++) size -= 0.212;
	}
	else size = -47.0;
	PlayerTextDrawTextSize(playerid, speedometr_PTD[playerid][1], 16.6999, size);
	PlayerTextDrawShow(playerid, speedometr_PTD[playerid][1]);
	new VehSpeed[4]; format(VehSpeed, 4, "%d", VehicleSpeed(carid));
	PlayerTextDrawSetString(playerid, speedometr_PTD[playerid][4], VehSpeed);

	size = 0.0;
	new Float: health; GetVehicleHealth(carid, health);
	if(health < 1000.0)
	{
		for(new i; i < health; i ++) size -= 0.047;
	}
	else size = -47.0;
	PlayerTextDrawTextSize(playerid, speedometr_PTD[playerid][2], 16.6999, size);
	PlayerTextDrawShow(playerid, speedometr_PTD[playerid][2]);
	new VehHealth[4]; format(VehHealth, 4, "%d", floatround(health, floatround_round)/10); // Делим на 10, т.к в ТД показываем в 100% хп, а не в 1000
	PlayerTextDrawSetString(playerid, speedometr_PTD[playerid][5], VehHealth);

	/*
		Так же делаем с fuel.
		Чтобы узнать, сколько нужно прибавлять к size, нужно 46 (изначальный размер) поделить на максимальное количество бензина: 46/100 = 0.46 (как пример)

		size = 0.0;
		if(Fuel[carid] < 100.0)
		{
			for(new i; i < Fuel[carid]; i ++) size += 0.47;
		}
		else size = -47.0;
		PlayerTextDrawTextSize(playerid, speedometr_PTD[playerid][3], 16.6999, size);
		PlayerTextDrawShow(playerid, speedometr_PTD[playerid][3]);
		new VehFuel[4]; format(VehSpeed, 4, "%d", Fuel[carid]);
		PlayerTextDrawSetString(playerid, speedometr_PTD[playerid][6], VehFuel);

		*Fuel - Ваша переменная бензина
	*/
	return true;
}

cmd:engine(playerid)
{
	if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER)return true;

	new carid = GetPlayerVehicleID(playerid);
	if(!EngineCar[carid]) EngineVehicle(carid, true, playerid);
	else EngineVehicle(carid, false, playerid);
	return true;
}
Вот и все! Если нашли баг или ошибку, то просьба отписать сюда - исправлю.

​
 
Сверху Снизу