Jump to content

IsPlayerInRangeOfPlayer


xxSPEEDYxx

Recommended Posts

M-am gandit sa postez o functie, care am vrut sa o fac de mai de mult, dar nu stiam cum. EI bine, acum m-am gandit, si iata ce a iesit.

#define MAX_DISTANCE 10.0

stock IsPlayerInRangeOfPlayer( playerid, targetid, distance = MAX_DISTANCE )
{
	if ( !IsPlayerConnected( targetid ) )
		return SendClientMessage( playerid, ~1, "Player not connected." );

	if ( playerid == targetid )
	    return 1;
	    
	new Float:p_Pos[ 3 ], Float:t_Pos[ 3 ];
	GetPlayerPos( playerid, p_Pos[ 0 ], p_Pos[ 1 ], p_Pos[ 1 ] );
	GetPlayerPos( targetid, t_Pos[ 0 ], t_Pos[ 1 ], t_Pos[ 1 ] );

	if ( IsPlayerInRangeOfPoint( playerid, distance, t_Pos[ 0 ], t_Pos[ 1 ], t_Pos[ 1 ] ) )
	    return SendClientMessage( playerid, ~1, "BLA BLA" ); //Este in razia acelui jucator
	else
	    SendClientMessage( playerid, ~1, "BLA BLA" ); //Cand nu este inca in razia unui jucator

	return 1;
}

* Functia nu este testata + cred ca este o tampenie care mi-a venit in minte, pentru ca am cautat-o cand nu stiam scripting xD

Fara reclama in semnatura!

Link to comment
Share on other sites

De ce verifici de 2 ori daca este conectat playerul?

Si de asemenea la prima verificare de ce e return 1 ?

La playerid == target id lafel e return 1. Tie iti returneaza afirmativ daca id-ul tau este acelasi cu cel selectat si daca nu e conectat player-ul.

Am verificat daca jucatorul "playerid" este conectat sau nu, da, acolo nu are rost, si la al 2-lea, daca jucatorul nu este conectat.

return 1/return 0 in asemenea cazuri, eu nu am vazut sa fie nici o diferenta daca este 1 sau 0, este tot aceeasi chestie, doar la cateva functii este putin diferit, de genul OnPlayerText, si mai sunt cateva...

Fara reclama in semnatura!

Link to comment
Share on other sites

return 1/return 0 in asemenea cazuri, eu nu am vazut sa fie nici o diferenta daca este 1 sau 0, este tot aceeasi chestie, doar la cateva functii este putin diferit, de genul OnPlayerText, si mai sunt cateva...

return 0 se pune cand nu vrei functioneze un anumit stock, callback, etc.

Ia pune return 0 la o comanda de ex, va aparea "Server unkown command".

In cazul tau daca nu vrei sa continue codul daca player-ul nu este conectat pune return 0

Link to comment
Share on other sites

return 0 se pune cand nu vrei functioneze un anumit stock, callback, etc.

Ia pune return 0 la o comanda de ex, va aparea "Server unkown command".

In cazul tau daca nu vrei sa continue codul daca player-ul nu este conectat pune return 0

Asta am spus si eu "doar la cateva functii este putin diferit, de genul OnPlayerText, si mai sunt cateva...".

Incearca sa pui tu return 1; si vezi daca va face la fel ca return 0; :))

Btw, o sa intreb pe sa-mp.com, cineva sa explice daca este vreo diferenta, dar nu prea cred...

Fara reclama in semnatura!

Link to comment
Share on other sites

Return arata in primul rand sfarsitul executarii unor instructiuni. Return mai este folosit si pentru ca o functie sa returneze o valoare, ceea ce este foarte folositor in cadrul functiilor care se folosesc la verificari ( exemplu este functia ta ). Deci, la codul tau in starea actuala, nu conteaza daca returnezi 0, 1, 2, 1337 sau chiar nu returnezi nicio valoare: "return;"

Totusi, daca vrei sa folosesti functia asta drept una pe care o poti folosi la o verificare ( if ), ai putea sa returnezi false ( 0 ) in cazul in care jucatorii nu sunt conectati / nu sunt in preajma ; sau sa returnezi true ( 1 ) daca jucatorii sunt apropiati:

stock IsPlayerInRangeOfPlayer( playerid, targetid, distance = MAX_DISTANCE )
{
	if ( !IsPlayerConnected( playerid ) || !IsPlayerConnected( targetid ) ) // daca unul din cei jucatori nu sunt conectati, se returneaza 0
		return 0;

	if ( playerid == targetid ) // daca jucatorul 1 este acelasi cu jucatorul 2, automat ca sunt "unul langa altul", deci se returneaza 1.
	    return 1;
	    
	new Float:t_Pos[ 3 ];
	GetPlayerPos( targetid, t_Pos[ 0 ], t_Pos[ 1 ], t_Pos[ 1 ] );

	return IsPlayerInRangeOfPoint( playerid, distance, t_Pos[ 0 ], t_Pos[ 1 ], t_Pos[ 1 ] ); // functia IsPlayerInRangeOfPlayer va returna aceasi valoare cu IsPlayerInRangeOfPoint, deci daca IsPlayerInRangeOfPoint va returna 1, functia custom va returna tot 1 ( aceeasi situatie si la 0 )
}
Dupa cum observi, am sters functia GetPlayerPos pentru playerid, deoarece nu este nevoie.
if ( IsPlayerInRangeOfPlayer ( playerid, giveplayerid ) ) { /* instructiuni */ }
else { /* instructiuni */ }

Sper ca ai inteles care e treaba cu return ...

Y!M: [email protected] ( nu este ID pt. help-center )

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.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • 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.