Доступ к архиву

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

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

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

Спидометр

Статус
В этой теме нельзя размещать новые ответы.

Vladaman

Ученик
На форуме не нашел ни одного урока по созданию спидометра. Решил выложить.

Скажу сразу, если кому-то не нравится, то прошу не флудить здесь и не засорять тему ненужными высказываниями.

Вот скрин спидометра: (прошу не расценивать, как рекламу)

Для начала подумаем, как его сделать. Вариант функцией SendClientMessage сразу отпадает, так как текст, созданный ею, не может обновляться и отсылает сообщения в чат, а вниз экрана.
Функция GameTextForPlayer подошла бы, но не у всех стоят хорошие шрифты.
Единственный вариант сделать это в той или иной степени без багов, это использовать текстдрав (динамический).

Как вы видели на том скриншоте в спидометре 3 критерия: скорость, бензин и hp авто. Если hp автомобиля можно узнать встроенной функцией (GetVehicleHealth), то функции определения скорости и бензина придется сделать самим.


Теперь надо создать функцию для получения скорости. Нам поможет функция GetVehicleVelocity.

PHP:
stock GetVehicleSpeed(playerid)
{  
    new Float:speed[4]; // Объявляем одномерный массив с вещественным типом переменных
    if(IsPlayerInAnyVehicle(playerid)) GetVehicleVelocity(GetPlayerVehicleID(playerid),speed[0],speed[1],speed[2]); // Если игрок в каком-либо транспорте, то узнаем скорость его ТС по x, y и z и записываем их в массив
    speed[3] = floatsqroot(floatpower(floatabs(speed[0]), 2.0) + floatpower(floatabs(speed[1]), 2.0) + floatpower(floatabs(speed[2]), 2.0)) * 253.3; // узнаем квадратный корень и записываем в speed[3]
    return floatround(speed[3]); // возвращаем
}
Вот мы создали функцию определения скорости.

Следующий шаг: создание самого спидометра

В начало мода вставляем:

PHP:
new Text:Speed[MAX_PLAYERS];
Идем в public OnPlayerConnect и делаем textdraw.

PHP:
Speed[playerid] = TextDrawCreate(260.0, 431.0,"~y~km/h: ~w~0   ~y~Benzin: ~w~0   ~y~Health: ~w~0"); // Делаем textdraw (~y~ - желтый цвет; ~w~ - белый) \
    TextDrawAlignment(Speed[playerid],0); // Выравнивание. В данном случае 0 (нет 0) А вообще 1 - по левому краю, 2 - по ширине, 3 - по правому краю
    TextDrawBackgroundColor(Speed[playerid],0x000000FF); // Цвет обводки (в данном случае черный)
    TextDrawFont(Speed[playerid],1); // Тип ТекстДрава 
    TextDrawSetOutline(Speed[playerid], 2); //Толщина обводки
    TextDrawLetterSize(Speed[playerid],0.350000,1.300000); // Размер символов 
    TextDrawColor(Speed[playerid],0xFFFFFFFF);//цвет символов
    TextDrawSetProportional(Speed[playerid],1); //
Это мы создали текстдрав.


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

В начало мода вставим:

PHP:
forward SpeedUpdate();
В OnGameModeInit:

PHP:
SetTimer("SpeedUpdate",1000,1); // 1000 - это время в миллисекундах, через которое будет обновляться текстдрав (1000 миллисекунд = 1 секунда)
В конец мода:

PHP:
public SpeedUpdate()
{
	new string[255]; // объявляем одномерный массив
	for(new i; i<MAX_PLAYERS; i++) // объявляем цикл 
	{
	    if(GetPlayerState(i) == PLAYER_STATE_DRIVER) // Если игрок - водитель ТС
		{
		    new Float:vhealth; // объявляем переменную вещественного типа (hp авто)
		    GetVehicleHealth(GetPlayerVehicleID(i), vhealth); // Узнаем hp авто и запишем его в переменную vhealth
			format(string, sizeof(string), "~y~Km/h: ~w~%d   ~y~Benzin: ~w~%d   ~y~Health: ~w~%.f", GetVehicleSpeed(i), Fuel[GetPlayerVehicleID(i)], vhealth); // Создадим текст, который будет в текстдраве
		    TextDrawSetString(Speed[i], string); // Обновим текстдрав
  		}
	}
	return 1;
}
Все. Теперь текстдрав будет обновляться.


Сделаем, чтобы он показывался игроку.

Вставляем в public OnPlayerStateChange:

PHP:
if(newstate == PLAYER_STATE_DRIVER) // Если игрок стал водителем
	{
TextDrawShowForPlayer(playerid, Speed[playerid]); // Теперь он будет показываться
}

Сделаем, чтобы он скрывался при выходе игрока из авто.

PHP:
if(newstate == PLAYER_STATE_ONFOOT) // Если игрок стал пешеходом
	{
TextDrawHideForPlayer(playerid, Speed[playerid]);  // скроем текстдрав
}
Вот и все.
При создании урока, я опирался не на мод gf и ему подобные, а на моды, которые пишутся с нуля, так как считаю gf безнадежным модом

P.S. Если есть замечания, пишите!
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу