Jump to content

Cum sa creezi o poarta miscatoare.


WiDuAlK

Recommended Posts

Buna ziua, buna seara pentru mine :D, la cererea lui Jirk am sa fac acest tutorial.

Pentru inceput aveti nevoie de urmatoarele:

- MAP EDITOR

- STREAMER

- Multa atentie , si executati pasii pe care ii parcurg si eu in tutorial.

 

 Pentru inceput mergem si plasam obiectul. Eu voi plasa o poarta cu ID = 980. Voi plasati ce obiect vreti.

 

oJVEqa0.jpg

 

Am introdus obiectul si il pozitionam in locul dorit. Acum avem nevoie de coordonatele lui:

 

jnWllrd.jpg

 

Acum mergem si o sa creem codul in pawn:

new poarta;

public OnGameModeInit()
{
	poarta = CreateDynamicObject(980,1587.8665, -1637.9141, 14.8116, 0.0000, 0.0000, 0.0000);
	// si ce mai aveti voi
	return 1;
}

Acum sa explicam:

Am creat o noua variabila numita "poarta" care am definito ca fiind obiect(Acel createdynamicobject).

980- reprezinta id obiectului

1587.8665, -1637.9141, 14.8116- reprezinta pozitia lui pe harta San Andreas

0.0000, 0.0000, 0.0000- reprezinta rotatiile lui.

 

Acum mergem si coboram obiectul ( il miscam ).

 

mDlBKYn.jpg

 

Acum voi crea sub 2 forma. Prima forma este cea care, folosesti o tasta , iar a 2-a este cea in care folosesti o comanda.

Vom crea un nou callback la care vom apela cu un timer pentru a se inchide poarta. Daca nu se creaza acest timer, atunci aceasta poarta va ramane pozitionata jos, nu se va ridica la pozitia initiala.

forward MoveInitialPoarta();

public MoveInitialPoarta()
{
	MoveDynamicObject(poarta,1587.8665, -1637.9141, 14.8116, 5.0, 0.0000, 0.0000, 0.0000);
	return 1;
}

MoveDynamicObject- functia cu care mutam obiectul

 

poarta- cum am definit mai sus, este obiectul pe care il miscam

1587.8665, -1637.9141, 14.8116- coordonatele initiale

5.0- viteza cu care deplasam obiectul

0.0000, 0.0000, 0.0000 - rotatia. Nu este necesar, dar este recomandat sa se puna si rotatia pentru a nu avea probleme.

 

Prima metoda:

 

mergem la publicul OnPlayerKeyStateChange, alegem o tasta de AICI si vom crea codurile:

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    if (newkeys & KEY_CROUCH )
	{
	    if(IsPlayerInRangeOfPoint(playerid,15, 1587.8665, -1637.9141, 14.8116))
	    {
	            MoveDynamicObject(poarta,1587.8665, -1637.9141, 9.7766, 5.0, 0.0000, 0.0000, 0.0000);
	            SetTimer("MoveInitialPoarta",5000,0);
	            SendClientMessage(playerid,-1,"Ai deschis poarta 5 secunde!");
	    }
	}
        // liniile voastre
	return 1;
}

if (newkeys & KEY_CROUCH )- este tasta H(cand esti in masina) si C (cand esti pe jos, de pe site-ul de mai sus)

if(IsPlayerInRangeOfPoint(playerid,15, 1587.8665, -1637.9141, 14.8116)) - verificam ca, atunci este langa poarta( 15- reprezinta distanta, 1587.8665, -1637.9141, 14.8116- reprezinta coordonatele, adica cand playerul este la 15 m cel mult de poarta)

MoveDynamicObject- reprezinta functia cu care miscam obiectul

1587.8665, -1637.9141, 9.7766- coordonatele cand obiectul este plasat in partea de jos, din imaginea 3

5.0 - viteza cu care miscam obiectul

0.0000, 0.0000, 0.0000- rotatiile unde plasam obiectul

 

SetTimer("MoveInitialPoarta",5000,0); - apelam la acest timer ca dupa 5 secunde(5000) parta sa se mute la pozitia initiala

 

SendClientMessage(playerid,-1,"Ai deschis poarta 5 secunde!"); - Dam un mesaj corespunzator celui care coboara poarta.

 

Metoda comenzii.

 

Vom crea comanda , dar folosim aceleasi functii ca si la metoda 1.

if (strcmp("/deschidegate", cmdtext, true, 10) == 0)
	{
	    if(IsPlayerConnected(playerid))
	    {
			if(IsPlayerInRangeOfPoint(playerid,15, 1587.8665, -1637.9141, 14.8116))
		    {
		            MoveDynamicObject(poarta,1587.8665, -1637.9141, 9.7766, 5.0, 0.0000, 0.0000, 0.0000);
		            SetTimer("MoveInitialPoarta",5000,0);
		            SendClientMessage(playerid,-1,"Ai deschis poarta 5 secunde!");
		    }
		    else
		        return SendClientMessage(playerid,-1,"Nu esti langa poarta!");
		}
	        
		return 1;
	}

else
         return SendClientMessage(playerid,-1,"Nu esti langa poarta!"); - atunci cand playerul tasteaza comanda, si nu este in jurul portii la distanta de cel mult 15 m, sa ii spuna ca nu este langa poarta.

 

La comanda, mai putem adauga

GivePlayerMoney(playerid,-1000);

daca vrem sa punem o vama, si sa plateasca cand o trece si va fi cam asa:

if (strcmp("/deschidegate", cmdtext, true, 10) == 0)
	{
	    if(IsPlayerConnected(playerid))
	    {
			if(IsPlayerInRangeOfPoint(playerid,15, 1587.8665, -1637.9141, 14.8116))
		    {
		            MoveDynamicObject(poarta,1587.8665, -1637.9141, 9.7766, 5.0, 0.0000, 0.0000, 0.0000);
		            SetTimer("MoveInitialPoarta",5000,0);
		            GivePlayerMoney(playerid,-1000);
		            SendClientMessage(playerid,-1,"Ai trecut vama, si ai platit suma de 1000$!");
		    }
		    else
		        return SendClientMessage(playerid,-1,"Nu esti langa poarta!");
		}
	        
		return 1;
	}

Voi il puteti infrumuseta cum vreti voi. Sper ca acestu tutorial sa prinda bine si altora. Tutorialul este scris si facut de mine, nu il gasiti in alta parte!

  • Like 1
  • Upvote 3
Link to comment
Share on other sites

  • 3 weeks later...

Folositor tutorialul ;)

Ofer servicii de web designer/developer(contact me pentru portofoliu etc)

Metode de plata: Paysafecard,Skrill,PayPal,Bitcoin

Ofer si servicii de Penetration Testing.

Vand si VPN-uri. 5 euro pe luna

Skype: live:mrtunne.tkcode

Discord: https://mrtunne.info/discord

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.