Jump to content

[Tutorial] Cum sa creezi un sistem de DMV


kwnx

Recommended Posts

Bine v-am regasit. Am observat ca multi doresc sa creeze un DMV, dar nu stiu cum sa o faca, asadar m-am decis sa le explic eu simplu si usor.

Va rog sa fiti atenti.

 

1. Crearea variabilelor.

Vom creea niste variabile pentru inceput.

new examen[4]; //Masinile de la DMV.
new CP[MAX_PLAYERS]; //Checkpoint-urile de la DMV.
new InExam[MAX_PLAYERS]; //Precizam ca jucatorul este in examen pentru a obtine permisul de conducere.

 

Bine, acum vom creea masinile de la DMV. Asadar ne vom duce la publicul OnGameModeInit()

public OnGameModeInit()
{
    return 1;
}

Unde vom adauga masinile create.

public OnGameModeInit()
{
    examen[0] = AddStaticVehicleEx(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:angle, color1, color2, respawn_delay, addsiren=0)
    examen[1] = AddStaticVehicleEx(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:angle, color1, color2, respawn_delay, addsiren=0)
    examen[2] = AddStaticVehicleEx(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:angle, color1, color2, respawn_delay, addsiren=0)
    examen[3] = AddStaticVehicleEx(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:angle, color1, color2, respawn_delay, addsiren=0)
    return 1;
}

Unde:

examen[0] - Masina numarul 1.
examen[1] - Masina numarul 2.
examen[2] - Masina numarul 3.
examen[3] - Masina numarul 4.
 

 Acum cautam publicul OnPlayerConnect(playerid) si precizam variabilile 'CP' si 'InExam' ca fiind 0.

public OnPlayerConnect(playerid)
{
    InExam[playerid] = 0;
    CP[playerid] = 0;
    return 1;
}

Cautam publicul OnPlayerStateChange si introducem:

public OnPlayerStateChange(playerid, newstate, oldstate)
{
    if(newstate == PLAYER_STATE_DRIVER)
	{
        new newcar = GetPlayerVehicleID(playerid);
        if(newcar == examen[0] || newcar == examen[1] || newcar == examen[2] || newcar == examen[3] || newcar == examen[4])
        {
			SetPlayerCheckpoint(playerid, 1271.0118,-1852.1224,13.1258, 6.0);
			CP[playerid] = 1;
			InExam[playerid] = 1;
		}
	}
    return 1;
}

Unde:

 

PLAYER_STATE_DRIVER - Ne garanteaza ca jucatorul este sofer.

SetPlayerCheckpoint - Setam primul checkpoint pentru DMV.

CP[playerid] = 1 - Setam checkpointul ca fiind '1'.

InExam[playerid] = 1 - Precizam ca jucatorul este in decursul unui examen ('0' - fals | '1' - adevarat)

Mergem la publicul OnPlayerEnterCheckpoint.

public OnPlayerEnterCheckpoint(playerid)
{
	new examcar = IsPlayerInAnyVehicle(playerid);
	new veh = GetPlayerVehicleID(playerid);
	if(CP[playerid] == 1 && examcar)
	{
		SetPlayerCheckpoint(playerid, X, Y, Z, 6.0);//
		CP[playerid] = 2
	}
	else if(CP[playerid] == 2 && examcar)
	{
        SetPlayerCheckpoint(playerid, X, Y, Z, 6.0);//
        CP[playerid] = 3;
	}
	else if(CP[playerid] == 3 && examcar)
	{
        SetPlayerCheckpoint(playerid, X, Y, Z, 6.0);//
        CP[playerid] = 4;
	}
	else if(CP[playerid] == 4 && examcar)
	{
		DisablePlayerCheckpoint(playerid);
		RemovePlayerFromVehicle(playerid);
		SetVehicleToRespawn(veh);
		InExam[playerid] = 0;
        SendClientMessage(playerid, -1, "* Ai trecut testul cu succes!");
	}
    return 1;
}

Unde:

 

examcar - Jucatorul este intr-un vehicul.

X - Pozitia X.

Y - Pozitia Y.

Z - Pozitia Z.

DisablePlayerCheckpoint(playerid) - Dezactiveaza checkpoint-urile.

RemovePlayerFromVehicle(playerid) - Scoate jucatorul din vehicul.

SeVehicleToRespawn - Respawneaza vehiculul de la DMV.

 

2. Cream comanda /examen. 

CMD:examen(playerid, params[])
{
	if(IsPlayerInRangeOfPoint(playerid, 8.0, X, Y, Z))
	{
		if(InExam[playerid] == 1) return SendClientMessage(playerid, -1, "* Dai deja testul de conducere!");
		for(new v = 0; v < 5; v++)
		{
			PutPlayerInVehicle(playerid, examen[v], 0);
		}
		SendClientMessage(playerid, -1, "* Urmareste checkpoint-urile pentru a trece examenul.");
		InExam[playerid] = 1;

	}
	else SendClientMessage(playerid, -1, "* Trebuie sa fi in checkpoint-ul de la DMV pentru a folosi aceasta comanda.");
    return 1;
}

Unde:

 

IsPlayerRangeOfPoint - Daca jucatorul este in zona DMV-ului.

PutPlayerInVehicle - Pune jucatorul automat in vehicul.

 

3. Avem grija ca jucatorii ce nu dau examenul sa nu poata intra in vehiculele de la DMV.

Ne ducem la publicul OnPlayerEnterVehicle si punem:

if(vehicleid == examen[0] || vehicleid == examen[1] || vehicleid == examen[2] || vehicleid == examen[3] || vehicleid == examen[4])
{
	SendClientMessage(playerid, -1, "* Aceste vehicule pot fi conduse doar in timpul examenului de la DMV.");
	RemovePlayerFromVehicle(playerid);
}

 

4. Avem grija ca atunci cand iesi din vehicul sa pici examenul.

Ne ducem la publicul OnPlayerExitVehicle si punem:

new newcar = GetPlayerVehicleID(playerid);
if(newcar == examen[0] || newcar == examen[1] || newcar == examen[2] || newcar == examen[3] || newcar == examen[4] || InExam[playerid] == 1)
{
	DisablePlayerCheckpoint(playerid);
	InExam[playerid] = 0;
	SendClientMessage(playerid, 0, ""FAIL"* Ai picat testul deoarece ai iesit din vehicul!");
}

Unde:

 

DisablePlayerCheckpoint(playerid) - Dezactiveaza checkpoint-urile.

InExam[playerid] = 0 - Precizam ca jucatorul nu mai se afla in examen.

 

Sper ca v-am ajutat cat de cat ca sa creati un sistem de DMV.

Edited by KnowN
  • Upvote 4

242086.png

Link to comment
Share on other sites

  • 3 weeks later...
error 017: undefined symbol "examen"
warning 215: expression has no effect
error 001: expected token: ")", but found ";"
error 036: empty statement
fatal error 107: too many error messages on one line

CMD:examen(playerid, params[])
{
	if(IsPlayerInRangeOfPoint(playerid, 8.0, 328.6702, -1512.6288, 36.0391))
	{
		if(InExam[playerid] == 1) return SendClientMessage(playerid, -1, "* Dai deja testul de conducere!");
		for(new v = examen[0]; v <= examen[4]; v++);
		{
			PutPlayerInVehicle(playerid, v, 0);
		}
		SendClientMessage(playerid, -1, "* Urmareste checkpoint-urile pentru a trece examenul.");
		InExam[playerid] = 1;

	}
	else SendClientMessage(playerid, -1, "* Trebuie sa fi in checkpoint-ul de la DMV pentru a folosi aceasta comanda.");
    return 1;
}

 

KnowN help ;)

Link to comment
Share on other sites

error 017: undefined symbol "examen"
warning 215: expression has no effect
error 001: expected token: ")", but found ";"
error 036: empty statement
fatal error 107: too many error messages on one line

CMD:examen(playerid, params[])
{
	if(IsPlayerInRangeOfPoint(playerid, 8.0, 328.6702, -1512.6288, 36.0391))
	{
		if(InExam[playerid] == 1) return SendClientMessage(playerid, -1, "* Dai deja testul de conducere!");
		for(new v = examen[0]; v <= examen[4]; v++);
		{
			PutPlayerInVehicle(playerid, v, 0);
		}
		SendClientMessage(playerid, -1, "* Urmareste checkpoint-urile pentru a trece examenul.");
		InExam[playerid] = 1;

	}
	else SendClientMessage(playerid, -1, "* Trebuie sa fi in checkpoint-ul de la DMV pentru a folosi aceasta comanda.");
    return 1;
}

 

KnowN help ;)

Pe langa celelalte new-uri adauga si new exam[4]; sau mai mare daca nu-ti merge cu 4 .

Link to comment
Share on other sites

Pe langa celelalte new-uri adauga si new exam[4]; sau mai mare daca nu-ti merge cu 4 .

Degeaba , la fel ... am incercat si eu asta ..

problema e la linia :

		for(new v = examen[0]; v <= examen[4]; v++);
		{
			PutPlayerInVehicle(playerid, v, 0);
		}

 

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.