Jump to content

Recommended Posts

Posted (edited)

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
Posted
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
Posted

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

Posted (edited)
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
  • 4 weeks later...
Posted
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
  • 3 months later...
Posted
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.🔥

Posted (edited)
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
  • 2 years later...
Posted

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;
}

 

  • 3 weeks later...
Posted (edited)
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
Posted
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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • 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.