Jump to content

Comanda /closestcar


FloriNNN

Recommended Posts

Salut, azi o sa va invat cum sa faceti comanda "/closestcar" dar inainte sa incep vreau sa spun ca decat comanda este facuta de mine si este cv simplu si daca topic-ul nu este ok o sa il sterg.

Avem nevoie de stock care este mai jos si de zCMD.

astea le puneti la inceputul GM-ului daca nu o aveti.
#include <zcmd>
#define COLOR_LIGHTRED   0xFF6347AA// este rosu deschis
#define COLOR_GREEN	 	 0x0ea142FF// este verde inchis
  
Stock-ul il puneti unde vreti si vreau sa spun ca acesta este luat din GM-ul BigZone
stock GetClosestVehicle2(playerid, Float:dis)
{
    new Float:X,
        Float:Y,
        Float:Z;
    if(GetPlayerPos(playerid, X, Y, Z))
    {
        new vehicleid = INVALID_VEHICLE_ID;
        for(new v, Float:temp, Float:VX, Float:VY, Float:VZ; v != MAX_VEHICLES; v++)
        {
            if(GetVehiclePos(v, VX, VY, VZ))
            {
                VX -= X, VY -= Y, VZ -= Z;
                temp = VX * VX + VY * VY + VZ * VZ;
                if(temp < dis) dis = temp, vehicleid = v;
            }
        }
        dis = floatpower(dis, 0.5);
        return vehicleid;
    }
    return INVALID_VEHICLE_ID;
}

Acum o sa facem comanda:

CMD:closestcar(playerid, params[])
{ // aici deschidem comanda
	if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_GREEN, "Nu poti folosi comanda pentru ca nu esti admin!"); // aici verificam daca este admin, daca aveti un GM de pe net o sa aveti if(PlayerInfo[playerid][pAdmin]>1)
   	if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_LIGHTRED, "Esti deja intr-o masina!"); // aici verificam daca se afla intr-o masina
   	if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT){
    new cCar = GetClosestVehicle2(playerid, 50); // GetClosestVehicle2 este stock-ul si 50 reprezinta distanta de la care poate fi pus in masina, daca vreti sa modificatati distanta trebuie sa puneti de ex: vreau sa fie maxim 2 metri asa ca trebuie sa punem 20. 
   	PutPlayerInVehicle(playerid, cCar, 0); // aici il punem in masina pe cel care a folosit comanda, 0 este locul soferului
   	}
   	else SendClientMessage(playerid, COLOR_LIGHTRED, "Nu esti in jurul unei masini!"); // aici ii dam un mesaj ca nu se afla in jurul unei masini.
	return 1;
}// aici inchidem comanda

 

Edited by FloriNNN
Link to comment
Share on other sites

1 hour ago, NuamNume said:

e ez

 

ma tu chiar esti bulangiu? cum iti permiti sa comentezi la o postare de learning "e ez" cand tu ai umplut forumul de "ajutati-ma va rog din suflet" la cele mai penibile rezolvari?
ce au ajuns copiii astia bai baiatule.

  • Haha 3
Link to comment
Share on other sites

Un tutorial inseamna sa explici cum,ce ai folosit si de ce. ( De ex. functia/stock-ul nu ai explicat-o deloc)

Pt comanda nici nu cred ca trebuia sa explici, cu putina engleza cred ca intelegea oricine.

Dar totusi pt. cine e 0 barat merge.

 

*Fara suparare

Link to comment
Share on other sites

3 hours ago, adversaru said:

ma tu chiar esti bulangiu? cum iti permiti sa comentezi la o postare de learning "e ez" cand tu ai umplut forumul de "ajutati-ma va rog din suflet" la cele mai penibile rezolvari?
ce au ajuns copiii astia bai baiatule.

uau ce scripter bun esti mars ma jigodie ordinara

Edited by NuamNume
Link to comment
Share on other sites

  • 4 weeks later...
La 29.05.2020 la 17:24, .Robert. a spus:

Un tutorial inseamna sa explici cum,ce ai folosit si de ce. ( De ex. functia/stock-ul nu ai explicat-o deloc)

Pt comanda nici nu cred ca trebuia sa explici, cu putina engleza cred ca intelegea oricine.

Dar totusi pt. cine e 0 barat merge.

 

*Fara suparare

Fratee, e un tutorial coaie, si daca nu era doar un tutorial, aia e le-a dat mura in gura o comanda, care e problema ? Dai reply cu ezz, de parca a postat cineva un sistem, da unii nu aveti putina mentalitate...

  • Haha 1
Link to comment
Share on other sites

  • 3 months later...
La 29.05.2020 la 19:58, NuamNume a spus:

uau ce scripter bun esti mars ma jigodie ordinara

Da tu, esti mare scripter la facut comenzi ascunse... csf, si apoi injuri scripterii ca tu esti.

Du-te la nani si tu

🔥Daca ii dai cuiva a doua sansa, e ca si cum i-ai oferi un glont la pistol ca sa te nimereasca.🔥

Link to comment
Share on other sites

La 29.05.2020 la 14:56, NuamNume a spus:
La 28.05.2020 la 16:29, FloriNNN a spus:

Salut, azi o sa va invat cum sa faceti comanda "/closestcar" dar inainte sa incep vreau sa spun ca decat comanda este facuta de mine si este cv simplu si daca topic-ul nu este ok o sa il sterg.

Avem nevoie de stock care este mai jos si de zCMD.





astea le puneti la inceputul GM-ului daca nu o aveti.
#include <zcmd>
#define COLOR_LIGHTRED   0xFF6347AA// este rosu deschis
#define COLOR_GREEN	 	 0x0ea142FF// este verde inchis
  
Stock-ul il puneti unde vreti si vreau sa spun ca acesta este luat din GM-ul BigZone
stock GetClosestVehicle2(playerid, Float:dis)
{
    new Float:X,
        Float:Y,
        Float:Z;
    if(GetPlayerPos(playerid, X, Y, Z))
    {
        new vehicleid = INVALID_VEHICLE_ID;
        for(new v, Float:temp, Float:VX, Float:VY, Float:VZ; v != MAX_VEHICLES; v++)
        {
            if(GetVehiclePos(v, VX, VY, VZ))
            {
                VX -= X, VY -= Y, VZ -= Z;
                temp = VX * VX + VY * VY + VZ * VZ;
                if(temp < dis) dis = temp, vehicleid = v;
            }
        }
        dis = floatpower(dis, 0.5);
        return vehicleid;
    }
    return INVALID_VEHICLE_ID;
}

Acum o sa facem comanda:





CMD:closestcar(playerid, params[])
{ // aici deschidem comanda
	if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_GREEN, "Nu poti folosi comanda pentru ca nu esti admin!"); // aici verificam daca este admin, daca aveti un GM de pe net o sa aveti if(PlayerInfo[playerid][pAdmin]>1)
   	if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_LIGHTRED, "Esti deja intr-o masina!"); // aici verificam daca se afla intr-o masina
   	if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT){
    new cCar = GetClosestVehicle2(playerid, 50); // GetClosestVehicle2 este stock-ul si 50 reprezinta distanta de la care poate fi pus in masina, daca vreti sa modificatati distanta trebuie sa puneti de ex: vreau sa fie maxim 2 metri asa ca trebuie sa punem 20. 
   	PutPlayerInVehicle(playerid, cCar, 0); // aici il punem in masina pe cel care a folosit comanda, 0 este locul soferului
   	}
   	else SendClientMessage(playerid, COLOR_LIGHTRED, "Nu esti in jurul unei masini!"); // aici ii dam un mesaj ca nu se afla in jurul unei masini.
	return 1;
}// aici inchidem comanda

 

 

E cam aiurea definită aia de MAX_VEHICLE daca mai este și default.

Edited by HPQ123
Link to comment
Share on other sites

  • 2 years later...

prea over enginereed, se poate itera doar prin vehiculele streamed ale playerului si verifici distanta dintre vehicul si player, iar daca distanta este mai mica decat ultima stocata in 'range', acela este cel mai apropiat vehicul de player, iar la final dupa ce se termina loop-ul, se returneaza vehiculul cel mai apropiat respectiv INVALID_VEHICLE_ID daca nu s-au gasit vehicule in apropiere.

GetClosestVehicle(const playerid, Float:range) {
    if(!Iter_Count(StreamedVehicles[playerid]))
        return INVALID_VEHICLE_ID;

    new 
        Float: vX, Float: vY, Float: vZ, 
        Float: distance, vehid = INVALID_VEHICLE_ID;

    foreach(new vehicleid : StreamedVehicles[playerid]) {
        GetVehiclePos(vehicleid, vX, vY, vZ);   

        distance = GetPlayerDistanceFromPoint(playerid, vX, vY, vZ);

        if(distance < range) {
            range = distance;
            vehid = vehicleid;
        }
    }
    return vehid;
}

 

Link to comment
Share on other sites

  • 3 weeks later...
UN COD PUȚIN MAI OPTIMIZAT

#include <zcmd>
#define COLOR_LIGHTRED   0xFF6347AA
#define COLOR_GREEN      0x0ea142FF

stock GetClosestVehicle2(playerid, Float:dis)
{
    new Float:X, Float:Y, Float:Z;
    
    if (GetPlayerPos(playerid, X, Y, Z))
    {
        new vehicleid = INVALID_VEHICLE_ID;
        dis *= dis; // Evităm operațiunea de radical prin compararea dis^2 cu temp^2
        for (new v, Float:VX, Float:VY, Float:VZ; v < MAX_VEHICLES; v++)
        {
            if (GetVehiclePos(v, VX, VY, VZ))
            {
                VX -= X; VY -= Y; VZ -= Z;
                new temp = VX * VX + VY * VY + VZ * VZ;
                if (temp < dis)
                {
                    dis = temp;
                    vehicleid = v;
                }
            }
        }
        dis = floatpower(dis, 0.5); // Redundant în acest context, puteți renunța la această linie
        return vehicleid;
    }
    
    return INVALID_VEHICLE_ID;
}
CMD:closestcar(playerid, params[])
{
	if(!IsPlayerAdmin(playerid))
	{
		SendClientMessage(playerid, COLOR_GREEN, "Nu poti folosi comanda pentru ca nu esti admin!");
		return 1;
	}

	if(IsPlayerInAnyVehicle(playerid))
	{
		SendClientMessage(playerid, COLOR_LIGHTRED, "Esti deja intr-o masina!");
		return 1;
	}

	if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT)
	{
		SendClientMessage(playerid, COLOR_LIGHTRED, "Nu esti in picioare langa o masina!");
		return 1;
	}

	new Float:closestDistance = 50.0; 

	new cCar = GetClosestVehicle2(playerid, closestDistance);
	if(cCar != INVALID_VEHICLE_ID)
	{
		PutPlayerInVehicle(playerid, cCar, 0);
	}
	else
	{
		SendClientMessage(playerid, COLOR_LIGHTRED, "Nu ai gasit nicio masina in apropiere!");
	}

	return 1;
}

 

Edited by khain.dev
Link to comment
Share on other sites

12 minutes ago, khain.dev said:
UN COD PUȚIN MAI OPTIMIZAT

#include <zcmd>
#define COLOR_LIGHTRED   0xFF6347AA
#define COLOR_GREEN      0x0ea142FF

stock GetClosestVehicle2(playerid, Float:dis)
{
    new Float:X, Float:Y, Float:Z;
    
    if (GetPlayerPos(playerid, X, Y, Z))
    {
        new vehicleid = INVALID_VEHICLE_ID;
        dis *= dis; // Evităm operațiunea de radical prin compararea dis^2 cu temp^2
        for (new v, Float:VX, Float:VY, Float:VZ; v < MAX_VEHICLES; v++)
        {
            if (GetVehiclePos(v, VX, VY, VZ))
            {
                VX -= X; VY -= Y; VZ -= Z;
                new temp = VX * VX + VY * VY + VZ * VZ;
                if (temp < dis)
                {
                    dis = temp;
                    vehicleid = v;
                }
            }
        }
        dis = floatpower(dis, 0.5); // Redundant în acest context, puteți renunța la această linie
        return vehicleid;
    }
    
    return INVALID_VEHICLE_ID;
}
CMD:closestcar(playerid, params[])
{
	if(!IsPlayerAdmin(playerid))
	{
		SendClientMessage(playerid, COLOR_GREEN, "Nu poti folosi comanda pentru ca nu esti admin!");
		return 1;
	}

	if(IsPlayerInAnyVehicle(playerid))
	{
		SendClientMessage(playerid, COLOR_LIGHTRED, "Esti deja intr-o masina!");
		return 1;
	}

	if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT)
	{
		SendClientMessage(playerid, COLOR_LIGHTRED, "Nu esti in picioare langa o masina!");
		return 1;
	}

	new Float:closestDistance = 50.0; 

	new cCar = GetClosestVehicle2(playerid, closestDistance);
	if(cCar != INVALID_VEHICLE_ID)
	{
		PutPlayerInVehicle(playerid, cCar, 0);
	}
	else
	{
		SendClientMessage(playerid, COLOR_LIGHTRED, "Nu ai gasit nicio masina in apropiere!");
	}

	return 1;
}

 

unde i optimizarea, ca n-o vad

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more details you can also review our Terms of Use and Privacy Policy.