AndreY.eXe
Специалист
Привет!
Похожую реализацию я делал с загрузкой объектов (кликабельно). И вот решил сделать спидометр в таком же стиле.
Сразу отошлю тех, кто будет писать мне про bar'ы: попробуй растянуть бар, и я посмотрю, что у тебя выйдет...
Да, и, как по мне, с ТД проще =) (Обсирайте меня, (про)павнеры xD)
В начало мода:
Дальше добавим TextDraw's:
В OnGameModeInit:
В OnPlayerConnect (OnPlayerDisconnect):
В OnPlayerStateChange:
В конец мода:
Вот и все! Если нашли баг или ошибку, то просьба отписать сюда - исправлю.
Похожую реализацию я делал с загрузкой объектов (кликабельно). И вот решил сделать спидометр в таком же стиле.
Сразу отошлю тех, кто будет писать мне про 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"
};
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
(кликабельно)В OnGameModeInit:
PHP:
ManualVehicleEngineAndLights();
for(new i; i < MAX_VEHICLES; i ++) EngineCar[i] = false;
PHP:
KillTimer(SpeedometrTimer[playerid]);
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;
}
