Jump to content

[REZOLVAT] speedometer


CosminAK
 Share

Recommended Posts

  • Username :CSORIN
  • Problema întâlnită: Nu reusesc sa fac un speedometer pe un gm de la 0
  • Detalii despre problemă:.
  • Ce ai încercat să faci înainte să postezi?:.
  • Cod sursa (recomandat pastebin.com) : .
  • Alte detalii : daca ma poate ajuta cineva sa fac un speedometer a imi arate cat prinde masina
Link to comment
Share on other sites

Creezi un timer in care verifici daca jucatorul este intr-un vehicul. Daca este ii afisezi textdraw-ul tau pentru kilometraj, iar cand iese din masina il ascunzi.

Spre exemplu:

timer OneSecondTimer[1000]()
{
	new query[256];
	foreach(new playerid : Player)
	{
		if(IsPlayerInAnyVehicle(playerid) && GetPlayerState(playerid) != PLAYER_STATE_ONFOOT)
		{
			new engine,lights,alarm,doors,bonnet,boot,objective;
			GetVehicleParamsEx(GetPlayerVehicleID(playerid), engine, lights, alarm, doors, bonnet, boot, objective)
			format(query, 50, aVehicleNames[GetVehicleModel(GetPlayerVehicleID(playerid))-400]);
			PlayerTextDrawSetString(playerid, TachoPTD[playerid][0], query);
			PlayerTextDrawShow(playerid, TachoPTD[playerid][0]);
			format(query, 50, "SPEED:_%d_KM/H", Carspeed(playerid));
			PlayerTextDrawSetString(playerid, TachoPTD[playerid][1], query);
			PlayerTextDrawShow(playerid, TachoPTD[playerid][1]);
			format(query, 50, "FUEL:_%d_L", VehFuel[GetPlayerVehicleID(playerid)]);
			PlayerTextDrawSetString(playerid, TachoPTD[playerid][2], query);
			PlayerTextDrawShow(playerid, TachoPTD[playerid][2]);
			format(query, 50, "%s", (doors < 1) ? ("~g~UNLOCKED") : ("~r~LOCKED"));
			PlayerTextDrawSetString(playerid, TachoPTD[playerid][3], query);
			PlayerTextDrawShow(playerid, TachoPTD[playerid][3]);
		}
	}
	return 1;
}

Avem un timer de o secunda (ysi_timer) in care verific din toti jucatorii care este in vehicul. Daca jucatorul este intr-unul, atunci ii iau datele despre vehicul si i le afisez in textdraw-uri.

Cand iese jucatorul din vehicul ii ascund textdraw-urile:

public OnPlayerStateChange(playerid, newstate, oldstate)
{
	switch(newstate)
	{
		case PLAYER_STATE_ONFOOT: for(new i = 0; i < 4; i++) PlayerTextDrawHide(playerid, TachoPTD[playerid][i]);
	}
	return 1;
}

De asemenea, te poti folosi de functia asta pentru a-i lua viteza jucatorului:

Carspeed(playerid)
{
    new Float:Speed[3];
    if(IsPlayerInAnyVehicle(playerid)) GetVehicleVelocity(GetPlayerVehicleID(playerid),Speed[0],Speed[1],Speed[2]);
	else GetPlayerVelocity(playerid, Speed[0], Speed[1], Speed[2]);
    return floatround(1.61*floatsqroot(floatpower(floatabs(Speed[0]), 2.0) + floatpower(floatabs(Speed[1]), 2.0) + floatpower(floatabs(Speed[2]), 2.0)) * 99.38);
}

 

Respecta si vei fi respectat.

 

BigInt Pawn:

Pacman C++: 

Snake C++:

Minesweeper C++:

 

mattbb.cash

leaks.ro

Link to comment
Share on other sites

  • Retired
Acum 5 ore, Matt a spus:

Creezi un timer in care verifici daca jucatorul este intr-un vehicul. Daca este ii afisezi textdraw-ul tau pentru kilometraj, iar cand iese din masina il ascunzi.

Spre exemplu:


timer OneSecondTimer[1000]()
{
	new query[256];
	foreach(new playerid : Player)
	{
		if(IsPlayerInAnyVehicle(playerid) && GetPlayerState(playerid) != PLAYER_STATE_ONFOOT)
		{
			new engine,lights,alarm,doors,bonnet,boot,objective;
			GetVehicleParamsEx(GetPlayerVehicleID(playerid), engine, lights, alarm, doors, bonnet, boot, objective)
			format(query, 50, aVehicleNames[GetVehicleModel(GetPlayerVehicleID(playerid))-400]);
			PlayerTextDrawSetString(playerid, TachoPTD[playerid][0], query);
			PlayerTextDrawShow(playerid, TachoPTD[playerid][0]);
			format(query, 50, "SPEED:_%d_KM/H", Carspeed(playerid));
			PlayerTextDrawSetString(playerid, TachoPTD[playerid][1], query);
			PlayerTextDrawShow(playerid, TachoPTD[playerid][1]);
			format(query, 50, "FUEL:_%d_L", VehFuel[GetPlayerVehicleID(playerid)]);
			PlayerTextDrawSetString(playerid, TachoPTD[playerid][2], query);
			PlayerTextDrawShow(playerid, TachoPTD[playerid][2]);
			format(query, 50, "%s", (doors < 1) ? ("~g~UNLOCKED") : ("~r~LOCKED"));
			PlayerTextDrawSetString(playerid, TachoPTD[playerid][3], query);
			PlayerTextDrawShow(playerid, TachoPTD[playerid][3]);
		}
	}
	return 1;
}

Avem un timer de o secunda (ysi_timer) in care verific din toti jucatorii care este in vehicul. Daca jucatorul este intr-unul, atunci ii iau datele despre vehicul si i le afisez in textdraw-uri.

Cand iese jucatorul din vehicul ii ascund textdraw-urile:


public OnPlayerStateChange(playerid, newstate, oldstate)
{
	switch(newstate)
	{
		case PLAYER_STATE_ONFOOT: for(new i = 0; i < 4; i++) PlayerTextDrawHide(playerid, TachoPTD[playerid][i]);
	}
	return 1;
}

De asemenea, te poti folosi de functia asta pentru a-i lua viteza jucatorului:


Carspeed(playerid)
{
    new Float:Speed[3];
    if(IsPlayerInAnyVehicle(playerid)) GetVehicleVelocity(GetPlayerVehicleID(playerid),Speed[0],Speed[1],Speed[2]);
	else GetPlayerVelocity(playerid, Speed[0], Speed[1], Speed[2]);
    return floatround(1.61*floatsqroot(floatpower(floatabs(Speed[0]), 2.0) + floatpower(floatabs(Speed[1]), 2.0) + floatpower(floatabs(Speed[2]), 2.0)) * 99.38);
}

 

daca tot ii areti cum sa faca, dece nu il faci mai optim creand un timer pentru fiecare jucator care e in veh si asa nu faci verificari in fiecare secunda.

Macar sa invete si el cate cv

Link to comment
Share on other sites

Acum 1 minut, Nurdock a spus:

daca tot ii areti cum sa faca, dece nu il faci mai optim creand un timer pentru fiecare jucator care e in veh si asa nu faci verificari in fiecare secunda.

Macar sa invete si el cate cv

Nu e mai optim sa creezi un timer pentru fiecare jucator in parte. Orice gm are un timer din secunda in secunda, deci evident ca o sa il foloseasca. 

Btw, este exclus sa faci cate un timer pentru fiecare jucator in parte.

Respecta si vei fi respectat.

 

BigInt Pawn:

Pacman C++: 

Snake C++:

Minesweeper C++:

 

mattbb.cash

leaks.ro

Link to comment
Share on other sites

  • Retired
Acum 6 minute, Matt a spus:

Nu e mai optim sa creezi un timer pentru fiecare jucator in parte. Orice gm are un timer din secunda in secunda, deci evident ca o sa il foloseasca. 

Btw, este exclus sa faci cate un timer pentru fiecare jucator in parte.

apoi nah, eu am vaz ca y_less a zis ca mai optim e sa faci mai multe timere decat unul si sa fie apelat pentru orice in fiecare secuna, asa daca nu este nici un player in veh nu se face nicio verificare. dar nah, fiecare dupa cum gandeste

Link to comment
Share on other sites

  • Administrator

Pentru inceput, ai nevoie de un textdraw pentru a face un speedometru.

 

Pentru a afla viteza unui vehicul, te folosesti de acest stock:

stock GetVehicleSpeed(vehicleid)
{
	new Float: velX, Float: velY, Float: velZ;
	GetVehicleVelocity(vehicleid, velX, velY, velZ);
	return floatround(((floatsqroot(((velX * velX) + (velY * velY) + (velZ * velZ))) * 170.0)) * 1);
}

 

Faci un timer pentru fiecare jucator folosind y_timers:

ptask oneSecondPlayerTimer[1000](playerid)
{
	if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
	{
		new veh_id = GetPlayerVehicleID(playerid);
		new speed = GetVehicleSpeed(veh_id);

		// Iar aici formatezi textdraw-ul pentru speedometru, exemplu:

		new string[64];
		format(string, 64, "%d km/h", speed);
		PlayerTextDrawSetString(playerid, TextDraw, string);
		PlayerTextDrawShow(playerid, TextDraw);
	}	
	
	return 1;
}

 

Link to comment
Share on other sites

  • Retired
Acum 7 ore, Leonard a spus:

Pentru inceput, ai nevoie de un textdraw pentru a face un speedometru.

 

Pentru a afla viteza unui vehicul, te folosesti de acest stock:


stock GetVehicleSpeed(vehicleid)
{
	new Float: velX, Float: velY, Float: velZ;
	GetVehicleVelocity(vehicleid, velX, velY, velZ);
	return floatround(((floatsqroot(((velX * velX) + (velY * velY) + (velZ * velZ))) * 170.0)) * 1);
}

 

Faci un timer pentru fiecare jucator folosind y_timers:


ptask oneSecondPlayerTimer[1000](playerid)
{
	if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
	{
		new veh_id = GetPlayerVehicleID(playerid);
		new speed = GetVehicleSpeed(veh_id);

		// Iar aici formatezi textdraw-ul pentru speedometru, exemplu:

		new string[64];
		format(string, 64, "%d km/h", speed);
		PlayerTextDrawSetString(playerid, TextDraw, string);
		PlayerTextDrawShow(playerid, TextDraw);
	}	
	
	return 1;
}

 

Tot una ii daca faci cu ptask sau pui la timerul global...

Ca sa faci un timer pentru fiecare jucator faci un timer care il pornesti cand intra in veh si il opresti cand se da jos.

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...