Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!: Баг с формулой спидометра - Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[ Pawn ]
Баг с формулой спидометра

#1
Пользователь офлайн   zdronx 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию
Вообщем, решил я попробовать себя в написании серверов для сампа, поэтому камнями не кидайтесь. Опыта ещё нет.
Всё шло гладко, пока дело не дошло до создания спидометра. Видимо в формуле подсчёта допущена ошибка и из за этого он выводит космические значения
https://imgur.com/a/6MuZNzp

Для помощи в решении проблемы прилагаю код


new'ы
new PlayerText:Textdraw0[MAX_PLAYERS];
new PlayerText:Textdraw1[MAX_PLAYERS];



forward
forward updatespeed();



В gamemode init
SetTimer("updatespeed", 400, 1);



в playerentervehcile
PlayerTextDrawShow(playerid, Textdraw0[playerid]);
PlayerTextDrawShow(playerid, Textdraw1[playerid]);



в playerexitvehcile
PlayerTextDrawHide(playerid, Textdraw0[playerid]);
PlayerTextDrawHide(playerid, Textdraw1[playerid]);



в Onplayerconnect
Textdraw0[playerid] = CreatePlayerTextDraw(playerid, 580.199768, 369.351104, "0");
PlayerTextDrawLetterSize(playerid, Textdraw0[playerid], 0.766399, 3.103287);
PlayerTextDrawTextSize(playerid, Textdraw0[playerid], 266.799987, 0.000000);
PlayerTextDrawAlignment(playerid, Textdraw0[playerid], 2);
PlayerTextDrawColor(playerid, Textdraw0[playerid], -1);
PlayerTextDrawSetShadow(playerid, Textdraw0[playerid], 0);
PlayerTextDrawSetOutline(playerid, Textdraw0[playerid], 1);
PlayerTextDrawBackgroundColor(playerid, Textdraw0[playerid], 51);
PlayerTextDrawFont(playerid, Textdraw0[playerid], 0);
PlayerTextDrawSetProportional(playerid, Textdraw0[playerid], 1);

Textdraw1[playerid] = CreatePlayerTextDraw(playerid, 580.200012, 400.213470, "KM/H");
PlayerTextDrawLetterSize(playerid, Textdraw1[playerid], 0.331599, 2.072888);
PlayerTextDrawAlignment(playerid, Textdraw1[playerid], 2);
PlayerTextDrawColor(playerid, Textdraw1[playerid], -5963521);
PlayerTextDrawSetShadow(playerid, Textdraw1[playerid], 0);
PlayerTextDrawSetOutline(playerid, Textdraw1[playerid], 1);
PlayerTextDrawBackgroundColor(playerid, Textdraw1[playerid], 51);
PlayerTextDrawFont(playerid, Textdraw1[playerid], 3);
PlayerTextDrawSetProportional(playerid, Textdraw1[playerid], 1);
GetPlayerName(playerid, pInfo[playerid][name], MAX_PLAYER_NAME);




public updatespeed()
public updatespeed()
{
	for(new i; i<GetMaxPlayers(); i++)
	{
		GetSpeed(i);
	}
}




stock GetSpeed(playerid)
stock GetSpeed(playerid)
{
	new Float:vel[4], string[20];
	GetVehicleVelocity(GetPlayerVehicleID(playerid), vel[0], vel[1], vel[2]);
	vel[3] = floatround(floatsqroot(floatabs(vel[0]*vel[0]+vel[1]*vel[
1]+vel[2]*vel[2]))*91);
	format(string, sizeof(string), "%i", vel[3]);
	PlayerTextDrawSetString(playerid, Textdraw0[playerid], string);
	return true;
}


0

#2
Пользователь офлайн   continue 

  • Пользователь
  • Вставить ник
  • Раскрыть информацию
Во-первых: зачем ты обходишь всех игроков, даже которые не в машине? Лучше сделать запуск таймера при посадку в машину, а при высадки убивать таймер.
Во-вторых: как-то так:
stock SetVehicleSpeedUI(const playerid)
{
    new veh_speed = GetVehicleSpeed(GetPlayerVehicleID(playerid));
    if (veh_speed == -1)
    {
    	return 0;
    }
    format(string, sizeof(string), "%i", veh_speed);
    PlayerTextDrawSetString(playerid, Textdraw0[playerid], string);
    return 1;
}

stock GetVehicleSpeed(const vehicleid)
{
    new 
    	Float:v_x,
    	Float:v_y,
    	Float:v_z;

    if (0 == GetVehicleVelocity(vehicleid, v_x, v_y, v_z))
    {
    	return -1;
    }
    return floatround(VectorSize(v_x, v_y, v_z) * 180.0);
}



P.S: Не тестил, но вроде должно работать

Сообщение отредактировал continue: 10 июня 2021 - 16:43

0

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей


Яндекс.Метрика