oxygenium
Компетентный
Приветствую пользователей! Недавно начал заниматься системой автомобилей. Так вот. Мне нужен был спидометр, брать в паблике было не вариантом, т.к. там ужасная оптимизация. Поэтому написал свой.
Внимание: нам понадобится таймер от Xemyl (замена SetTimer на gettime()): http://pawno-info.ru/showthread.php?t=124893
Почитайте, много откроете для себя и своего сервера.
Теперь перейдем к созданию своего спидометра (Замену SetTimer на gettime мы тоже сделаем)
Переменные:
Массив pInfo:
В public OnGameModeInit()
В public OnPlayerConnect(playerid)
В public OnPlayerDisconnect(playerid, reason)
В public OnPlayerEnterVehicle(playerid, vehicle)
В public OnPlayerExitVehicle(playerid, vehicleid)
Функция для узнавания скорости автомобиля (рекомендую умножать на 80-90, но все же мы умножим на 100)
И наконец, в конец мода или если у вас есть команды ZCMD или DC_CMD, то перед ними (Это Xemyl'овский таймер)
Вот и все.
Внимание: нам понадобится таймер от 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]; // Сама скорость
PHP:
pInfo[playerid][pVehID],
В public OnGameModeInit()
PHP:
SetTimer("UpdateTimers", 250, 1);
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); // Шрифт для скорости
PHP:
PlayerTextDrawDestroy(playerid, speedometr[playerid]); // Удалили TEXTDRAW с надписью CAR SPEED
PlayerTextDrawDestroy(playerid, speed[playerid]); // Удалили TEXTDRAW со скоростью
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 секунду (для обновления скорости)
PHP:
pInfo[playerid][pVehID] = 0; // Обнулили переменную с ID автомобиля
PlayerTextDrawHide(playerid, speedometr[playerid]); // Скрыли TEXTDRAW с надписью CAR SPEED
PlayerTextDrawHide(playerid, speed[playerid]); // Скрыли TEXTDRAW со скоростью
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, будет точнее (чем больше число, тем большая скорость показывается)
}
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;
}
