Jump to content
  • 0

pomoc Motor vozidla


Stellet

Dotaz

CMD:motor(playerid, params[])
{
    new jmeno[MAX_PLAYER_NAME], str[300], str1[300];
    GetPlayerName(playerid, jmeno, sizeof(jmeno));
    new engine, lights, alarm, doors, bonnet, boot, objective;
	for(new i=0; i < sizeof(Vozidlo); i++)
	{
	    if(!Vozidlo[i][id_x]) continue;
	    if(!IsPlayerInAnyVehicle(playerid)) continue;
	    if(!strlen(Vozidlo[i][majitel])) continue;
	    if(!strcmp(Vozidlo[i][majitel], jmeno, true))
		{
	        if(Vozidlo[i][c_motor] == 0)
	        {
	            Vozidlo[i][c_motor] = 1;
	            format(str, sizeof(str), "* %s dává klíček do zapalování, otáčí s ním, čímž zapíná motor.", RJmeno(playerid));
	            ProxDetector(30, playerid, str, 0x64E375FF, 0x64E375FF, 0x64E375FF, 0x64E375FF, 0x64E375FF);
	            GetVehicleParamsEx(GetPlayerVehicleID(playerid), engine, lights, alarm, doors, bonnet, boot, objective);
    			SetVehicleParamsEx(GetPlayerVehicleID(playerid), VEHICLE_PARAMS_ON, lights, alarm, doors, bonnet, boot, objective);
    			ShowPlayerInfoBox(playerid, "> Motor nastartovan.");
    			format(str1, sizeof(str1), "* Motor nastartován (( %s ))", RJmeno(playerid));
				ProxDetector(30, playerid, str1, 0x64C3E3FF, 0x64C3E3FF, 0x64C3E3FF, 0x64C3E3FF, 0x64C3E3FF);
	            return 1;
	        }
	        if(Vozidlo[i][c_motor] == 1)
	        {
	            Vozidlo[i][c_motor] = 0;
	            format(str, sizeof(str), "* %s otáčí klíčkem, čímž vypíná motor a vytahuje klíček ze zapalování.", RJmeno(playerid));
	            ProxDetector(30, playerid, str, 0x64E375FF, 0x64E375FF, 0x64E375FF, 0x64E375FF, 0x64E375FF);
				format(str1, sizeof(str1), "* Motor vypnut (( %s ))", RJmeno(playerid));
    			ProxDetector(30, playerid, str1, 0x64C3E3FF, 0x64C3E3FF, 0x64C3E3FF, 0x64C3E3FF, 0x64C3E3FF);
    			GetVehicleParamsEx(GetPlayerVehicleID(playerid), engine, lights, alarm, doors, bonnet, boot, objective);
    			SetVehicleParamsEx(GetPlayerVehicleID(playerid), VEHICLE_PARAMS_OFF, lights, alarm, doors, bonnet, boot, objective);
    			ShowPlayerInfoBox(playerid, "> Motor vypnut.");
	            return 1;
	        }
	    }
	    return ShowPlayerInfoBox(playerid, "> Od tohoto vozidla nemáš klíče.");
	}
	return 1;
}

Ahoj, udělal jsem si takový system na motor, ale prostě příkaz jde jen ID 0 jinak to píše všem že nemá klíče od vozidla.. 

Edited by Sc0t
Link to comment
Share on other sites

7 odpovědí na tuto otázku

Recommended Posts

  • 0

trochu jsem to upravil..

CMD:motor(playerid, params[])
{
    if(!IsPlayerInAnyVehicle(playerid)) return (nesedí ve vozidle); // doplň nějakou zprávu, že nesedí vůbec ve vozidle
    new jmeno[MAX_PLAYER_NAME]; // tu bys mohl mít MAX_PLAYER_NAME + 1 ještě pro null ^^
    new vehicle = GetPlayerVehicleID(playerid); // zjistíme ID ve kterém sedí for fun
    GetPlayerName(playerid, jmeno, MAX_PLAYER_NAME);
    new lights, alarm, doors, bonnet, boot, objective; // šetřílek ušetří jednu proměnnou (engine)
    for(new i = 0; i < sizeof(Vozidlo); i++)
    {
       if(Vozidlo[i][id_x] != vehicle) continue; // pokud se id vozidla neshoduje s tím, ve kterém sedí..
       if(!strcmp(Vozidlo[i][majitel], jmeno, true)) // pokud je stejné jméno majitele
       {
           if(!Vozidlo[i][c_motor]) // následujou nějaké tvoje věci..
	   {
	       format(str, sizeof(str), "* %s dává klíček do zapalování, otáčí s ním, čímž zapíná motor.", RJmeno(playerid));
	       ProxDetector(30, playerid, str, 0x64E375FF, 0x64E375FF, 0x64E375FF, 0x64E375FF, 0x64E375FF);
	       GetVehicleParamsEx(GetPlayerVehicleID(playerid), lights, lights, alarm, doors, bonnet, boot, objective);
    	       SetVehicleParamsEx(GetPlayerVehicleID(playerid), VEHICLE_PARAMS_ON, lights, alarm, doors, bonnet, boot, objective);
    	       ShowPlayerInfoBox(playerid, "> Motor nastartovan.");
    	       format(str1, sizeof(str1), "* Motor nastartován (( %s ))", RJmeno(playerid));
	       ProxDetector(30, playerid, str1, 0x64C3E3FF, 0x64C3E3FF, 0x64C3E3FF, 0x64C3E3FF, 0x64C3E3FF);
	   } else {
	       format(str, sizeof(str), "* %s otáčí klíčkem, čímž vypíná motor a vytahuje klíček ze zapalování.", RJmeno(playerid));
	       ProxDetector(30, playerid, str, 0x64E375FF, 0x64E375FF, 0x64E375FF, 0x64E375FF, 0x64E375FF);
	       format(str1, sizeof(str1), "* Motor vypnut (( %s ))", RJmeno(playerid));
       	       ProxDetector(30, playerid, str1, 0x64C3E3FF, 0x64C3E3FF, 0x64C3E3FF, 0x64C3E3FF, 0x64C3E3FF);
	       GetVehicleParamsEx(GetPlayerVehicleID(playerid), lights, lights, alarm, doors, bonnet, boot, objective);
	       SetVehicleParamsEx(GetPlayerVehicleID(playerid), VEHICLE_PARAMS_OFF, lights, alarm, doors, bonnet, boot, objective);
	       ShowPlayerInfoBox(playerid, "> Motor vypnut.");
           }
           Vozidlo[i][c_motor] = !Vozidlo[i][c_motor]; // z 0 na 1 a z 1 na 0
           return 1; // vrátíme 1, protože jsme nalezli naše vozidlo ^^
	}
        break; // můžem rovnou vrátit ShowPlayerInfoBox( nemá klíče ).. nalezli jsme vozidlo, ale nepatří mu
    }
    return ShowPlayerInfoBox(playerid, "> Od tohoto vozidla nemáš klíče."); // nenalezli jsme vozidlo ve kterém sedí 
}

Jinak problém je nejspíš v

return ShowPlayerInfoBox(playerid, "> Od tohoto vozidla nemáš klíče.");

ukončuješ tím celý cyklus, když ještě nemáš otestované všechny vozidla (moje verze to má opravené)

Edited by Lukasz
Link to comment
Share on other sites

  • 0

 

break; // můžem rovnou vrátit ShowPlayerInfoBox( nemá klíče ).. nalezli jsme vozidlo, ale nepatří mu

Zde bych uplne nesouhlasil, predpokladam ze ma na serveru nekolik vozidel a hrac muze mit 0 az n vozidel. tzn pokud najdes jineho majitele, tak to nezmena, ze hrac nemuze byt majitelem jineho vozidla. Ovsem pokud to ma udelane ze kazdy hrac muze byt majitelem maximalne jednoho vozidla, jde cely kod napsat bez toho cyklu.

Link to comment
Share on other sites

  • 0
CMD:motor(playerid, params[])
{
    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,-1,"Nejsi v aute");
    new jmeno[MAX_PLAYER_NAME],vehicleid = GetPlayerVehicleID(playerid);
    GetPlayerName(playerid, jmeno, MAX_PLAYER_NAME);

    if(Vozidlo[vehicleid][majitel][0] == 0 || strcmp(Vozidlo[vehicleid][majitel],jmeno,true) != 0) return ShowPlayerInfoBox(playerid, "> Od tohoto vozidla nemáš klíče.");
    else if(!Vozidlo[vehicleid][c_motor])
    {
        format(str, sizeof(str), "* %s dává klíček do zapalování, otáčí s ním, čímž zapíná motor.", RJmeno(playerid));
        ProxDetector(30, playerid, str, 0x64E375FF, 0x64E375FF, 0x64E375FF, 0x64E375FF, 0x64E375FF);
        
        format(str1, sizeof(str1), "* Motor nastartován (( %s ))", RJmeno(playerid));
        ProxDetector(30, playerid, str1, 0x64C3E3FF, 0x64C3E3FF, 0x64C3E3FF, 0x64C3E3FF, 0x64C3E3FF);
        
        ShowPlayerInfoBox(playerid, "> Motor nastartovan.");
        
        new lights, alarm, doors, bonnet, boot, objective;
        GetVehicleParamsEx(GetPlayerVehicleID(playerid), lights, lights, alarm, doors, bonnet, boot, objective);
        SetVehicleParamsEx(GetPlayerVehicleID(playerid), VEHICLE_PARAMS_ON, lights, alarm, doors, bonnet, boot, objective);
    }else{
        format(str, sizeof(str), "* %s otáčí klíčkem, čímž vypíná motor a vytahuje klíček ze zapalování.", RJmeno(playerid));
        ProxDetector(30, playerid, str, 0x64E375FF, 0x64E375FF, 0x64E375FF, 0x64E375FF, 0x64E375FF);
        
        format(str1, sizeof(str1), "* Motor vypnut (( %s ))", RJmeno(playerid));
        ProxDetector(30, playerid, str1, 0x64C3E3FF, 0x64C3E3FF, 0x64C3E3FF, 0x64C3E3FF, 0x64C3E3FF);
        
        ShowPlayerInfoBox(playerid, "> Motor vypnut.");
        
        new lights, alarm, doors, bonnet, boot, objective;
        GetVehicleParamsEx(GetPlayerVehicleID(playerid), lights, lights, alarm, doors, bonnet, boot, objective);
        SetVehicleParamsEx(GetPlayerVehicleID(playerid), VEHICLE_PARAMS_OFF, lights, alarm, doors, bonnet, boot, objective);
    }
    Vozidlo[vehicleid][c_motor] = !Vozidlo[vehicleid][c_motor]; // z 0 na 1 a z 1 na 0
    return 1;
}

tady jsem to zoptimalizoval vzhledem k tomu ze porovnavame pouze vozidlo, ve kterem sedi, neni potreba cyklus

Edited by ATomas
Link to comment
Share on other sites

  • 0

Zde s tebou nesouhlasim ATomasi. Breaknul jsem cyklus, protoze jsme nalezli vozidlo ve kterem sedi, ale nepatri mu. Nebude sedet uz v jinem vozidle, proto si muzeme dovolit vyskocit z cyklu. Moje reseni je tedy spravne.

 

Resil bych to asi jako ty, ale autor topicu tam ma nejaky svuj system a nevim, jestli se index rovna id vozidla. V enumu ma na id vozidel 'id_x', takze jsem predpokladal, ze nemuzu pro spravnou funkcnost dosadit za index vehicleid.

Edited by Lukasz
Link to comment
Share on other sites

  • 0

 

Zde s tebou nesouhlasim ATomasi. Breaknul jsem cyklus, protoze jsme nalezli vozidlo ve kterem sedi, ale nepatri mu. Nebude sedet uz v jinem vozidle, proto si muzeme dovolit vyskocit z cyklu.

Pravda, prehledl jsem tu podminku, nepredpokladal jsem ze v cyklu budes hledat jestli se shoduje jedno auto, kdyz k nemu muzes ihned pristoupit :)

Edited by ATomas
Link to comment
Share on other sites

  • 0

To jestli k nemu muzes pristoupit rovnou ale nevis. Nevidis zpusob vytvareni. Indexy nemusi odpovidat id vozidlu..

 

//

Je to normalni primo dosazovat za index vehicleid, ale autor ma v poli ulozene i id vozidla, takze jsem myslel (myslim), ze id neodpovidaji indexum a ma to nejak sprehazene. Pokud tomu tak neni, pouzij ATomasovo reseni.

Edited by Lukasz
Link to comment
Share on other sites

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