Jump to content
Geplaatst:
comment_1592746

Tutorial: Velocity

Wat is velocity?

Velocity is de hoeveelheid x, y, z coords van de huidige positie waarnaar de speler zich beweegt ik geef een voorbeeld:

Speler: X: 2540.0 Y: 1250.0 Z: 10.0

De speler gaat nu bijvoorbeeld in een auto beginnen rijden.

Velocity: X: 5.0 Y: 2.0 Z: 0.0

X+X(Velocity) = 2545.0 Y+Y(Velocity) = 1252 Z+Z(Velocity) = 10.0

De speler zal dus eindigen op die coords als de huidige actie niet onderbroken word de velocity past zich de hele tijd aan, als je stil staat is het vanzelfsprekend dat alles in de velocity op 0 staat.

Functies

SetPlayerVelocity(playerid, Float:x, Float:y, Float:z);

Je kan met deze functie handmatig een speler zijn velocity instellen, dit werkt enkel als de speler te voet is.

SetVehicleVelocity(vehicleid, Float:x, Float:y, Float:z);

Stel de velocity van een voertuig in.

GetPlayerVelocity(playerid, &Float:x, &Float:y, &Float:z);

Verkrijg de velocity van een speler en slaag deze op.

GetVehicleVelocity(vehicleid, &Float:x, &Float:y, &Float:z);

Verkrijg de velocity van een voertuig en slaag deze op.

Voorbeelden

Je kan met velocity een speler in de lucht laten springen net als een voertuig ik geef een voorbeeld van hoe je een /jump commando maakt:

// Bij OnPlayerCommandText
if (!strcmp("/jump", cmdtext)) // commando /jump
{
   	if(IsPlayerInAnyVehicle(playerid)) // Kijk of de speler in een voertuig zit.
   	{
           	SetVehicleVelocity(GetPlayerVehicleID(playerid), 0.0, 0.0,3); // Laat voertuig springen.
   	}
   	else
   	{
           	SetPlayerVelocity(playerid,0.0,0.0,25); // Laat speler springen.
   	}
   	return 1;
}

Een speedboost functie die ook werkt te voet:

// Bij OnPlayerCommandText
if (!strcmp("/speed", cmdtext)) // commando /jump
{
   	new Float:x, Float:y, Float:z;
   	if(IsPlayerInAnyVehicle(playerid)) // Kijk of de speler in een voertuig zit.
   	{
           	GetVehicleVelocity(GetPlayerVehicleID(playerid),x,y,z); // Haal de huidige speler velocity op.
           	SetVehicleVelocity(GetPlayerVehicleID(playerid), x*1.2, y*1.2, z*1.2); // Stel voertuig velocity in (*1.2)
   	}
   	else
   	{
           	GetPlayerVelocity(playerid,x,y,z); // Haal de huidige speler velocity op.
           	SetPlayerVelocity(playerid, x*1.2, y*1.2, z*1.2); // Stel speler velocity in (*1.2).
   	}
   	return 1;
}

Snelheid (in kmh) ophalen van de speler (met dank aan Wanted):

stock GetPlayerSpeed(playerid) // zet dit vanonder in je gamemode!
{
   	new Float:X, Float:Y, Float:Z;
   	if(IsPlayerInAnyVehicle(playerid))
   	{
           	GetVehicleVelocity(GetPlayerVehicleID(playerid), X, Y, Z);
           	return floatround(floatmul(floatmul(floatsqroot(floatpower(floatabs(X), 2) + floatpower(floatabs(Y), 2) + floatpower(floatabs(Z), 2)), 100), 1.621371192), floatround_round);
   	}
   	else
   	{
           	GetPlayerVelocity(playerid, X, Y, Z);
           	return floatround(floatmul(floatmul(floatsqroot(floatpower(floatabs(X), 2) + floatpower(floatabs(Y), 2) + floatpower(floatabs(Z), 2)), 100), 1.621371192), floatround_round);
   	}
}

// voorbeeld om snelheid voor speler op te halen.
new Str[128];
format(Str, sizeof(Str), "Je rijd nu %d kilometer per uur!", GetPlayerSpeed(playerid));
SendClientMessage(playerid, Str);
return 1;

Mijn tutorial is nu afgelopen, heb je ideeën of vragen, meld het in dit topic.

Bewerkt: door megadreams

Featured Replies

Geplaatst:
  • Auteur
comment_1592756

Dan rij je ongeloofelijk snel vooruit, maar dan ook enkel vooruit er word bij je huidige velocity wat bijgeteld.

Bewerkt: door megadreams

Geplaatst:
comment_1592759

Dan rij je ongeloofelijk snel naar de coords die de velocity zal aanduiden.

o.o maar kan je ook met velocity iets maken waar je 200 km rijd? en dat je dat met alt moet doen?

Geplaatst:
comment_1592774

AANVRAAG: Het herstellen van de indentatie, deze word verpest door het forum systeem, en ik krijg die op geen enkele manier goed.

Natuurlijk wil ik dat wel even voor je doen. :D

// Bij OnPlayerCommandText
if (!strcmp("/jump", cmdtext)) // commando /jump
{
if(IsPlayerInAnyVehicle(playerid)) // Kijk of de speler in een voertuig zit.
{
	SetVehicleVelocity(GetPlayerVehicleID(playerid), 0.0, 0.0,3); // Laat voertuig springen.
}
else
{
	SetPlayerVelocity(playerid,0.0,0.0,25); // Laat speler springen.
}
return 1;
}

// Bij OnPlayerCommandText
if (!strcmp("/speed", cmdtext)) // commando /jump
{
new Float:x, Float:y, Float:z;
if(IsPlayerInAnyVehicle(playerid)) // Kijk of de speler in een voertuig zit.
{
	GetVehicleVelocity(GetPlayerVehicleID(playerid),x,y,z); // Haal de huidige speler velocity op.
	SetVehicleVelocity(GetPlayerVehicleID(playerid), x*1.2, y*1.2, z*1.2); // Stel voertuig velocity in (*1.2)
}
else
{
	GetPlayerVelocity(playerid,x,y,z); // Haal de huidige speler velocity op.
	SetPlayerVelocity(playerid, x*1.2, y*1.2, z*1.2); // Stel speler velocity in (*1.2).
}
return 1;
}

Verder is het een makkelijke tutorial voor beginners, die nog niets van Velocity snappen.

Geplaatst:
comment_1592827

Zou je kunnen vertellen he je de snelheid in kilometers berekent?

Daarvoor heb ik een handige functie gemaakt. :puh:

Plaats onderstaande code in je gamemode (NIET in een andere functie).

stock GetPlayerSpeed(playerid)
{
new Float:X, Float:Y, Float:Z;
if(IsPlayerInAnyVehicle(playerid))
{
	GetVehicleVelocity(GetPlayerVehicleID(playerid), X, Y, Z);
	return floatround(floatmul(floatmul(floatsqroot(floatpower(floatabs(X), 2) + floatpower(floatabs(Y), 2) + floatpower(floatabs(Z), 2)), 100), 1.621371192), floatround_round);
}
else
{
	GetPlayerVelocity(playerid, X, Y, Z);
	return floatround(floatmul(floatmul(floatsqroot(floatpower(floatabs(X), 2) + floatpower(floatabs(Y), 2) + floatpower(floatabs(Z), 2)), 100), 1.621371192), floatround_round);
}
}

Voorbeeld van hoe je de functie dan kan gebruiken:

new Str[128];
format(Str, sizeof(Str), "Je rijd nu %d kilometer per uur!", GetPlayerSpeed(playerid));
SendClientMessage(playerid, Str);
return 1;

MVG,

Wanted

Geplaatst:
  • Auteur
comment_1592849

Daarvoor heb ik een handige functie gemaakt. puh2.gif

Plaats onderstaande code in je gamemode (NIET in een andere functie).

CODE

Voorbeeld van hoe je de functie dan kan gebruiken:

CODE

MVG,

Wanted

Ik heb dat als voorbeeld in de tutorial geplaatst ;)

Geplaatst:
comment_1594530

Hallo!

Ik had nog een paar vragen nadat ik de speedcheckdinges heb zitten doorlezen/proberen te begrijpen.

Het betreft deze line:

floatround(floatmul(floatmul(floatsqroot(floatpower(floatabs(X), 2) + floatpower(floatabs(Y), 2) + floatpower(floatabs(Z), 2)), 100), 1.621371192), floatround_round);

Ik snap dat ik er niets van hoef te snappen, maar toch wil ik er wat van snappen :)

Na wat 'onderzoek' gedaan te hebben op wiki.sa-mp.com, ben ik tot de volgende conclusie's gekomen:

Floatround = Float Afronden

Floatmul = Float x Float

Floatpower = Float x Getal

Floatround_round = afronden naar boven (hoort bij Floatround)

Klopt dit, en wat zijn dan Floatsqroot en Floatabs? Ze staan wel op de wiki, maar hier begrijp ik bijster weinig van.

Hartelijk dank als je me kan antwoorden :)

Geplaatst:
comment_1594532

Floatsqroot is volgens mij de wortel ergens van uitrekenen, en Floatabs geeft de absolute waarde van een float.

EDIT: Floatround_round = afronden naar het dichtstbijzijnde ronde getal (hoort bij Floatround)

Bewerkt: door Wanted

Geplaatst:
comment_1594533

Floatsqroot is volgens mij de wortel ergens van uitrekenen, en Floatabs geeft de absolute waarde van een float.

EDIT: Floatround_round = afronden naar het dichtstbijzijnde ronde getal (hoort bij Floatround)

Oké, hartelijk dank :)

[offtopic]

jippie, ben een autodief :)

[/offtopic]

Bewerkt: door VonLeeuwen

Een reactie plaatsen

Je kan nu een reactie plaatsen en pas achteraf registreren. Als je al lid bent, log eerst in om met je eigen account een reactie te plaatsen.

Gast
Op dit onderwerp reageren...

Recent actief 0

  • Er zijn hier geen geregistreerde gebruikers aanwezig.