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

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

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

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

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

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

oxygenium

Компетентный
Приветствую пользователей! Недавно начал заниматься системой автомобилей. Так вот. Мне нужен был спидометр, брать в паблике было не вариантом, т.к. там ужасная оптимизация. Поэтому написал свой.

Внимание: нам понадобится таймер от Xemyl (замена SetTimer на gettime()): http://pawno-info.ru/showthread.php?t=124893
Почитайте, много откроете для себя и своего сервера.
Теперь перейдем к созданию своего спидометра (Замену SetTimer на gettime мы тоже сделаем)

Переменные:

PHP:
new PlayerText:speedometr[MAX_PLAYERS]; // Надпись CAR SPEED
new PlayerText:speed[MAX_PLAYERS]; // Сама скорость
Массив pInfo:

PHP:
pInfo[playerid][pVehID],

В public OnGameModeInit()

PHP:
SetTimer("UpdateTimers", 250, 1);
В public OnPlayerConnect(playerid)

PHP:
speedometr[playerid] = CreatePlayerTextDraw(playerid, 408.5 ,388, "CAR SPEED:"); // Создали TEXTDRAW с надписью CAR SPEED
speed[playerid] = CreatePlayerTextDraw(playerid, 500 , 388, "0"); // Создали TEXTDRAW со скоростью
PlayerTextDrawColor(playerid, speed[playerid], 0x00DB4CFF); // Цвет для скорости
PlayerTextDrawFont(playerid, speedometr[playerid], 1); // Шрифт для надписи CAR SPEED
PlayerTextDrawFont(playerid, speed[playerid], 1); // Шрифт для скорости
В public OnPlayerDisconnect(playerid, reason)

PHP:
PlayerTextDrawDestroy(playerid, speedometr[playerid]);  // Удалили TEXTDRAW с надписью CAR SPEED
PlayerTextDrawDestroy(playerid, speed[playerid]); // Удалили TEXTDRAW со скоростью
В public OnPlayerEnterVehicle(playerid, vehicle)

PHP:
pInfo[playerid][pVehID] = vehicleid; // Записали ID машины в которой сидит игрок (не путать ID и модель)
PlayerTextDrawShow(playerid, speedometr[playerid]); // Показали TEXTDRAW с надписью CAR SPEED
PlayerTextDrawShow(playerid, speed[playerid]); // Показали TEXTDRAW со скоростью
SetPVarInt(playerid, "Speed", gettime() + 1); // Установили Xemyl'овский таймер на 1 секунду (для обновления скорости)
В public OnPlayerExitVehicle(playerid, vehicleid)

PHP:
pInfo[playerid][pVehID] = 0; // Обнулили переменную с ID автомобиля
PlayerTextDrawHide(playerid, speedometr[playerid]); // Скрыли TEXTDRAW с надписью CAR SPEED
PlayerTextDrawHide(playerid, speed[playerid]); // Скрыли TEXTDRAW со скоростью
Функция для узнавания скорости автомобиля (рекомендую умножать на 80-90, но все же мы умножим на 100)

PHP:
stock GetVehicleSpeed(vehicleid)
{
    new Float:x, Float:y, Float:z;
    GetVehicleVelocity(vehicleid, x, y, z);
    return floatround(floatsqroot(x*x+y*y+z*z)*100); // Можете поставить 80, будет точнее (чем больше число, тем большая скорость показывается)
}
И наконец, в конец мода или если у вас есть команды ZCMD или DC_CMD, то перед ними (Это Xemyl'овский таймер)

PHP:
forward UpdateTimers();
public UpdateTimers()
{
	for(new i, B = GetMaxPlayers(); i != B; i++)
    {
		new GetTime = gettime();
  		if(GetPVarInt(i, "Speed") <= GetTime && GetPVarInt(i, "Speed") != 0)
                {
                        SetPVarInt(i, "Speed", 1); // Опять запустим таймер
			new spd = GetVehicleSpeed(pInfo[i][pVehID]); // Занесем в переменную скорость автомобиля
			new str[5]; // Запишем ее в string
			format(str, sizeof(str), "%d", spd); // Дадим значение string
			PlayerTextDrawSetString(i, speed[i], str); // Обновим TEXTDRAW со скоростью
                        /* Уважаемые диванные эксперты, моя жопа чувствует, что вы напишете, что можно было обойтись без стринга и сразу обновить TEXTDRAW со spd вместо str, пробуем:
                        error 035: argument type mismatch (argument 3)
                        warning 204: symbol is assigned a value that is never used: "spd"
                        Ну так присвой ячейки переменной spd вы скажете, пробуем:
                        error 008: must be a constant expression; assumed zero
                        Делайте выводы */
                }
  	}
        return true;
}
Вот и все.

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