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

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

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

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

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

AndreY.eXe

Эксперт
Пользователь
Регистрация
16 Сен 2017
Сообщения
1,327
Лучшие ответы
0
Репутация
241
Привет!

Выкладывал TD спидометра, и решил выложить систему для данного спидометра.

Приступим:

Для начала, добавьте сам TD спидометра себе в мод. (Добавлять нужно в OnPlayerConnect)


Теперь, добавим остальные части, которые нам понадобятся:

PHP:
// В конец мода

stock 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 );
}

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

new 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"

};

enum vInfo // Можно заменить на свою
{
    vFuel,
    bool:vEngine,
    bool:vDoors,
    bool:vLights,
    Float:vMileage
};

new VehInfo[MAX_VEHICLES][vInfo];
new bool: GPS[MAX_PLAYERS]; // GPS
new Float: VehMilage[MAX_VEHICLES]; // Тоже для пробега
new SpeedometrTimer[MAX_PLAYERS];



В OnPlayerConnect:

PHP:
GPS[playerid] = false;
KillTimer(SpeedometrTimer[playerid]);


В OnGameModeInit:

PHP:
ManualVehicleEngineAndLights();

    for(new i; i < MAX_VEHICLES; i ++) // Необходимо вставлять после всего созданных Вами транспорта
    {
        VehInfo[i][vFuel] = 100;
        VehInfo[i][vEngine] = false;
        VehInfo[i][vLights] = false;
        VehInfo[i][vDoors] = false;
        VehInfo[i][vMileage] = 0;
    }




Показываем спидометр игроку при посадке в транспорт, в OnPlayerStateChange:

PHP:
if(newstate == PLAYER_STATE_DRIVER)
    {
        for(new i; i < 27; i ++) PlayerTextDrawShow(playerid, Speedometr[i][playerid]);
        SpeedometrTimer[playerid] = SetTimerEx("UpdateSpeedometr", 50, true, "ii", playerid, GetPlayerVehicleID(playerid));
    }
    if(newstate == PLAYER_STATE_ONFOOT && oldstate == PLAYER_STATE_DRIVER)
    {
        for(new i; i < 27; i ++) PlayerTextDrawHide(playerid, Speedometr[i][playerid]);
        KillTimer(SpeedometrTimer[playerid]);
    }


Создаем паблик и стоки, где и будет весь функционал нашего спидометра, с любое место:

PHP:
forward UpdateSpeedometr(playerid, carid);
public UpdateSpeedometr(playerid, carid)
{
    new Float: health, string[70];
    GetVehicleHealth(carid, health);
    VehInfo[carid][vFuel] -= 0.001;
    format(string, sizeof(string), "%d", floatround(health, floatround_tozero));
    PlayerTextDrawSetString(playerid, Speedometr[13][playerid], string); // ХП
    format(string, sizeof(string), "%d", floatround(VehInfo[carid][vFuel], floatround_tozero));
    PlayerTextDrawSetString(playerid, Speedometr[17][playerid], string); // FUEL
    if(GPS[playerid]) PlayerTextDrawSetString(playerid, Speedometr[19][playerid], FixText("ВКЛ")); // GPS
    else PlayerTextDrawSetString(playerid, Speedometr[19][playerid], FixText("ВЫКЛ"));
    format(string, sizeof(string), "%s", VehicleName[GetVehicleModel(carid)-400]):
    PlayerTextDrawSetString(playerid, Speedometr[26][playerid], string); // Name Veh
    if(VehicleSpeed(carid) > 0)
    {
        VehMilage[carid] += float(VehicleSpeed(carid))/20.0;
        if(VehMilage[carid] >= 3000.0)
        {
            VehMilage[carid] = 0.0;
            VehInfo[carid][vMileage] += 1.0;
            format(string, sizeof(string), "%06.0f", VehInfo[carid][vMileage]);
            PlayerTextDrawSetString(playerid, Speedometr[21][playerid], string);
        }
        string = "";
        for(new dspeed; dspeed < floatround((17.0/200.0)*float(VehicleSpeed(car))) && dspeed<15; dspeed++)
        {
            switch(dspeed)
            {
                case 5: format(string, sizeof(string), "%s~b~", string);
                case 10: format(string, sizeof(string), "%s~r~", string);
            }
            format(string, sizeof(string), "%sI", string);
        }
        PlayerTextDrawSetString(playerid, Speedometr[8][playerid], string);
        format(string, sizeof(string), "%d", VehicleSpeed(carid));
        PlayerTextDrawSetString(playerid, Speedometr[20][playerid], string); // Скорость
    }
    else
    {
        PlayerTextDrawSetString(playerid, Speedometr[8][playerid], "_");
        PlayerTextDrawSetString(playerid, Speedometr[20][playerid], "0";
    }
    return true;
}
stock SetEngine(carid, bool:status, playerid=-1)
{
    GetVehicleParamsEx(carid, engine, lights, alarm, doors, bonnet, boot, objective);
    VehInfo[carid][vEngine] = status;
    SetVehicleParamsEx(carid, status, lights, alarm, doors, bonnet, boot, objective);
    if(playerid != -1 && IsPlayerInAnyVehicle(playerid))
    {
        PlayerTextDrawHide(playerid, Speedometr[12][playerid]);
        if(VehInfo[carid][vEngine]) PlayerTextDrawColor(playerid, Speedometr[12][playerid], 16711935);
        else PlayerTextDrawColor(playerid, Speedometr[12][playerid], -16776961);
        PlayerTextDrawShow(playerid, Speedometr[12][playerid]);
    }
    return true;
}
stock SetLights(carid, bool:status, playerid=-1)
{
    GetVehicleParamsEx(carid, engine, lights, alarm, doors, bonnet, boot, objective);
    VehInfo[carid][vLights] = status;
    SetVehicleParamsEx(carid, engine, status, alarm, doors, bonnet, boot, objective);
    if(playerid != -1 && IsPlayerInAnyVehicle(playerid))
    {
        PlayerTextDrawHide(playerid, Speedometr[15][playerid]);
        if(VehInfo[carid][vLights]) PlayerTextDrawColor(playerid, Speedometr[15][playerid], 16711935);
        else PlayerTextDrawColor(playerid, Speedometr[15][playerid], -16776961);
        PlayerTextDrawShow(playerid, Speedometr[15][playerid]);
    }
    return true;
}
stock SetDoors(carid, bool:status, playerid=-1)
{
    GetVehicleParamsEx(carid, engine, lights, alarm, doors, bonnet, boot, objective);
    VehInfo[carid][vDoors] = status;
    SetVehicleParamsEx(carid, engine, lights, alarm, status, bonnet, boot, objective);
    if(playerid != -1 && IsPlayerInAnyVehicle(playerid))
    {
           PlayerTextDrawHide(playerid, Speedometr[14][playerid]);
        if(VehInfo[carid][vDoors]) PlayerTextDrawColor(playerid, Speedometr[14][playerid], 16711935);
        else PlayerTextDrawColor(playerid, Speedometr[14][playerid], -16776961);
        PlayerTextDrawShow(playerid, Speedometr[14][playerid]);
    }
    return true;
}
Ну вот в принципе и все. Если вы захотите завести игроку машину используйте SetEngine, с дверями и фарами так же. (P/S: Если хотите завести машину/фары/двери, где нет игрока, тогда не пишите айди.)

Саму работу не тестил, т.к не было времени, но если вы нашли баг/ошибку/недоработку, то отпишите в данную тему, исправлю.

P/S: Если у вас есть система GPS, то поставьте GPS[playerid] = true; туда, где игрок выбирает место (например мэрия), и GPS[playerid] = false; там, где он уже прибывает на то место или же отключает GPS;

Если вам понравилась данная работа, или вы взяли её себе, то поблагодарите автора, нажав кнопку "Спасибо" :)
 
Сверху Снизу