Перейти к содержанию
Авторизация  
AMG

Спидометр для автомобилей

Рекомендуемые сообщения

AMG

Всех приветствую дорогие форумчане 

Сегодня я полазил в инете и нашёл спидометр

Спидометр предназначен для SAMP'a Но я попробовал сделать его на CR:MP и у меня это получилось

Вот решил поделиться!

Так же спидометр можно русифицировать, ну это по вкусу!

b896baa12061.png

 

Автор спидометра: wAx и thewax

 

 

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

new Text:SBox;
new Text:SBox1;
new PlayerText:CarSpeed[MAX_PLAYERS];
new PlayerText:CarFuel[MAX_PLAYERS];
new PlayerText:CarMilliage[MAX_PLAYERS];
new PlayerText:CarLights[MAX_PLAYERS];
new PlayerText:CarEngine[MAX_PLAYERS];

Переменные созданы, теперь создадим функции для создания самих текстдравов!

Глобальные:

stock CreateGlobalTextDraws()
{
        
        SBox = TextDrawCreate(626.000000, 384.540008, "usebox");
        TextDrawLetterSize(SBox, 0.000000, 5.905555);
        TextDrawTextSize(SBox, 430.799987, 0.000000);
        TextDrawAlignment(SBox, 1);
        TextDrawColor(SBox, 0);
        TextDrawUseBox(SBox, true);
        TextDrawBoxColor(SBox, 102);
        TextDrawSetShadow(SBox, 0);
        TextDrawSetOutline(SBox, 0);
        TextDrawFont(SBox, 0);

        SBox1 = TextDrawCreate(601.875000, 383.250061, "LD_SPAC:white");
        TextDrawLetterSize(SBox1, 0.000000, 0.000000);
        TextDrawTextSize(SBox1, 21.250000, 57.166625);
        TextDrawAlignment(SBox1, 1);
        TextDrawColor(SBox1, 255);
        TextDrawSetShadow(SBox1, 0);
        TextDrawSetOutline(SBox1, 0);
        TextDrawFont(SBox1, 4);
        return 1;
}

Персональные:

stock CreatePlayersTextDraw(playerid)
{
        
        CarSpeed[playerid] = CreatePlayerTextDraw(playerid, 442.399963, 386.026580, "SPEED: 100");
        PlayerTextDrawLetterSize(playerid, CarSpeed[playerid], 0.401249, 1.430832);
        PlayerTextDrawAlignment(playerid, CarSpeed[playerid], 1);
        PlayerTextDrawColor(playerid, CarSpeed[playerid], -1);
        PlayerTextDrawSetShadow(playerid, CarSpeed[playerid], 0);
        PlayerTextDrawSetOutline(playerid, CarSpeed[playerid], 1);
        PlayerTextDrawBackgroundColor(playerid, CarSpeed[playerid], 51);
        PlayerTextDrawFont(playerid, CarSpeed[playerid], 1);
        PlayerTextDrawSetProportional(playerid, CarSpeed[playerid], 1);

        CarFuel[playerid] = CreatePlayerTextDraw(playerid, 442.149963, 401.026672, "FUEL: 1000");
        PlayerTextDrawLetterSize(playerid, CarFuel[playerid], 0.401249, 1.430832);
        PlayerTextDrawAlignment(playerid, CarFuel[playerid], 1);
        PlayerTextDrawColor(playerid, CarFuel[playerid], -1);
        PlayerTextDrawSetShadow(playerid, CarFuel[playerid], 0);
        PlayerTextDrawSetOutline(playerid, CarFuel[playerid], 1);
        PlayerTextDrawBackgroundColor(playerid, CarFuel[playerid], 51);
        PlayerTextDrawFont(playerid, CarFuel[playerid], 1);
        PlayerTextDrawSetProportional(playerid, CarFuel[playerid], 1);

        CarMilliage[playerid] = CreatePlayerTextDraw(playerid, 441.899963, 416.610015, "MILLIAGE: 10000");
        PlayerTextDrawLetterSize(playerid, CarMilliage[playerid], 0.401249, 1.430832);
        PlayerTextDrawAlignment(playerid, CarMilliage[playerid], 1);
        PlayerTextDrawColor(playerid, CarMilliage[playerid], -1);
        PlayerTextDrawSetShadow(playerid, CarMilliage[playerid], 0);
        PlayerTextDrawSetOutline(playerid, CarMilliage[playerid], 1);
        PlayerTextDrawBackgroundColor(playerid, CarMilliage[playerid], 51);
        PlayerTextDrawFont(playerid, CarMilliage[playerid], 1);
        PlayerTextDrawSetProportional(playerid, CarMilliage[playerid], 1);

        CarLights[playerid] = CreatePlayerTextDraw(playerid, 608.125000, 386.166625, "L");
        PlayerTextDrawLetterSize(playerid, CarLights[playerid], 0.449999, 1.600000);
        PlayerTextDrawAlignment(playerid, CarLights[playerid], 1);
        PlayerTextDrawColor(playerid, CarLights[playerid], -1);
        PlayerTextDrawSetShadow(playerid, CarLights[playerid], 0);
        PlayerTextDrawSetOutline(playerid, CarLights[playerid], 1);
        PlayerTextDrawBackgroundColor(playerid, CarLights[playerid], 51);
        PlayerTextDrawFont(playerid, CarLights[playerid], 1);
        PlayerTextDrawSetProportional(playerid, CarLights[playerid], 1);

        CarEngine[playerid] = CreatePlayerTextDraw(playerid, 609.125000, 413.416778, "E");
        PlayerTextDrawLetterSize(playerid, CarEngine[playerid], 0.449999, 1.600000);
        PlayerTextDrawAlignment(playerid, CarEngine[playerid], 1);
        PlayerTextDrawColor(playerid, CarEngine[playerid], -1);
        PlayerTextDrawSetShadow(playerid, CarEngine[playerid], 0);
        PlayerTextDrawSetOutline(playerid, CarEngine[playerid], 1);
        PlayerTextDrawBackgroundColor(playerid, CarEngine[playerid], 51);
        PlayerTextDrawFont(playerid, CarEngine[playerid], 1);
        PlayerTextDrawSetProportional(playerid, CarEngine[playerid], 1);
        return 1;
}

в OnGameModeInit закинем:

CreateGlobalTextDraws();

в OnPlayerConnect:

CreatePlayersTextDraw();

Теперь нам надо сделать так, чтобы игрок который сел в машину на место водителя, видел спидометр
За изменение позиции игрока относительно штата, отвечает паблик OnPlayerStateChange, закинем код туда:

if(newstate == PLAYER_STATE_DRIVER)
{
if(!noeng(GetPlayerVehicleID(playerid)))
{
new v = GetPlayerVehicleID(playerid);
VehicleInfo[v][vFuel] = 50.0;
GetPlayerPos(playerid, VehicleInfo[v][vPosx],VehicleInfo[v][vPosy],VehicleInfo[v][vPosz]);
TextDrawShowForPlayer(playerid, SBox);
TextDrawShowForPlayer(playerid, SBox1);
PlayerTextDrawShow(playerid, CarSpeed[playerid]);
PlayerTextDrawShow(playerid, CarFuel[playerid]);
PlayerTextDrawShow(playerid, CarMilliage[playerid]);
PlayerTextDrawShow(playerid, CarLights[playerid]);
PlayerTextDrawShow(playerid, CarEngine[playerid]);
SpeedTimer[playerid] = SetTimerEx("UpdateSpeed",200,1,"d",playerid);
return 1;
}
}
if(oldstate == PLAYER_STATE_DRIVER)
{
TextDrawHideForPlayer(playerid, SBox);
TextDrawHideForPlayer(playerid, SBox1);
PlayerTextDrawHide(playerid, CarSpeed[playerid]);
PlayerTextDrawHide(playerid, CarFuel[playerid]);
PlayerTextDrawHide(playerid, CarMilliage[playerid]);
PlayerTextDrawHide(playerid, CarLights[playerid]);
PlayerTextDrawHide(playerid, CarEngine[playerid]);
KillTimer(SpeedTimer[playerid]);
return 1;
} 

теперь в начале мода, нам нужно создать массив для хранения характеристик авто

enum vInfo
{
        vEngine,
        Float:vFuel,
        Float:vMilliage,
        vLights,
        Float:vPosx,Float:vPosy,Float:vPosz
};
new VehicleInfo[MAX_VEHICLES][vInfo];

отлично!

Теперь создадим переменную для таймера, а также паблик самого таймера!

new SpeedTimer[MAX_PLAYERS];

и создадим паблик:

forward UpdateSpeed(playerid);
public UpdateSpeed(playerid)
{
        new string[256];
        new v = GetPlayerVehicleID(playerid);
        format(string,sizeof(string),"SPEED: %d",SpeedVehicle(playerid));
        PlayerTextDrawSetString(playerid, CarSpeed[playerid], string);
        format(string,sizeof(string),"FUEL: %d",floatround(VehicleInfo[v][vFuel]));
        PlayerTextDrawSetString(playerid, CarFuel[playerid], string);
        format(string,sizeof(string),"MILLIAGE: %d",floatround(VehicleInfo[v][vMilliage]));
        PlayerTextDrawSetString(playerid, CarMilliage[playerid], string);
        switch(VehicleInfo[v][vLights])
        {
            case 0: PlayerTextDrawSetString(playerid, CarLights[playerid], "~w~L");
            case 1: PlayerTextDrawSetString(playerid, CarLights[playerid], "~b~L");
        }
        if(VehicleInfo[v][vEngine]) PlayerTextDrawSetString(playerid, CarEngine[playerid], "~b~E");
        else PlayerTextDrawSetString(playerid, CarEngine[playerid],"~w~E");
        if(VehicleInfo[v][vFuel] <= 0)
        {
            VehicleInfo[v][vEngine] = 0;
            VehicleInfo[v][vFuel] = 0.0;
            SetVehicleParamsEx(v, VehicleInfo[v][vEngine], VehicleInfo[v][vLights],0,0,0,0,0);
        }
        if(GetPlayerDistanceFromPoint(playerid, VehicleInfo[v][vPosx], VehicleInfo[v][vPosy], VehicleInfo[v][vPosz]) > 50.0)
        {
            VehicleInfo[v][vMilliage] += 0.1;
            VehicleInfo[v][vFuel] -= 0.05;
            GetPlayerPos(playerid, VehicleInfo[v][vPosx],VehicleInfo[v][vPosy],VehicleInfo[v][
vPosz]);
        }
        return 1;
}

Теперь сделаем заводку двигателя:

в OnPlayerKeyStateChange

if(newkeys & KEY_ACTION)
        {
            if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
            {
                        new v = GetPlayerVehicleID(playerid);
                        if(!noeng(v))
                        {
                            if(!VehicleInfo[v][vFuel]) return 1;
                            if(!VehicleInfo[v][vEngine]) VehicleInfo[v][vEngine] = 1;
                            else VehicleInfo[v][vEngine] = 0;
                            SetVehicleParamsEx(v, VehicleInfo[v][vEngine], VehicleInfo[v][vLights], 0, 0, 0, 0, 0);
                            return 1;
                        }
                }
        }

и функция вычисления скорости

stock noeng(carid)
{
        new model = GetVehicleModel(carid);
        if(model == 462||model == 448||model == 509|| model == 510||model == 481||model==468||model == 471 ||
        model == 511 || model == 512||model == 593||model == 520||model == 577||model == 476||model == 519 ||
        model == 460 || model == 513||model == 472||model==473||model == 493||model == 595 || model == 484 ||
        model == 430 || model == 453||model == 452||model == 446||model == 454 ||model == 548 ||model == 425||
        model == 417||model == 487||model == 488||model == 497||model == 563||model == 447||model == 469||model == 553) return 1;
        return 0;
}
stock SpeedVehicle(playerid)
{
    new Float:ST[4];
    if(IsPlayerInAnyVehicle(playerid))
        GetVehicleVelocity(GetPlayerVehicleID(playerid),ST[0],ST[1],ST[2]);
        else GetPlayerVelocity(playerid,ST[0],ST[1],ST[2]);
    ST[3] = floatsqroot(floatpower(floatabs(ST[0]), 2.0) + floatpower(floatabs(ST[1]), 2.0) + floatpower(floatabs(ST[2]), 2.0)) * 100.3;
    return floatround(ST[3]);
}
Изменено пользователем kirill232327
  • Like 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Smolin

Скриншоты приложите и автора укажите.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
AMG

Скриншоты приложите и автора укажите.

Готово

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
SHOROOP

Спидометр предназначен для SAMP'a Но я попробовал сделать его на CR:MP и у меня это получилось

И что же это были за исправления, интересно, чтобы сабжевый скрипт на КР начал заводиться...

 

Да, табличку "сарказм" я сегодня с собой не прихватил.

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Komaroff 71

По сути,это просто копипаст.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Rici

Не очень

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Predator

Как-то все простенько.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
AMG

Прошу закрыть тему!((3a OFFTOP))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
M@RSCH@L

Прошу закрыть тему!((3a OFFTOP))

А не надо Копировать! Просто спёр! Ты меня бесишь XD ( Думаю не только меня )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.