Jump to content
  • 0

pomoc Pomoc prosim


Pingvin

Dotaz

Zdravím mam takhle kód na ukládaní vlastního auta ale vždy když se hráč odpojí ze serveru tak hráče auto zmizne a vždy když se připojí tak se zas auto hráče spawne má otázka je jak udělat že i když hráč odejde ze serveru tak že tam auto zůstane a nezmizí ? děkuji za odpovědi 

 

 

CMD:park(playerid, params[])
{
    #pragma unused params
    if(IsPlayerConnected(playerid))
    {
        new bool:IsVehicleTrueVehicle=false;
        new vehicleseries;

        if(GetPlayerVehicleID(playerid) > 0)
        {
            for(new s=0; s<5; s++)
            {
                if(PlayerVehicle_State[playerid] == true)
                {
                    if(GetPlayerVehicleID(playerid) == PlayerVehicle[playerid])
                    {
                        IsVehicleTrueVehicle=true;
                        vehicleseries = s;
                        break;
                    }
                }
            }
        }
    
        if(GetPlayerVehicleID(playerid) == 0) return SendClientMessage(playerid, COLOR_WARNING, "[  !  ]{ffffff} Nejsi ve vozidle !");
        else if(IsVehicleTrueVehicle == false) return SendClientMessage(playerid, COLOR_WARNING, "[  !  ]{ffffff} Nejsi ve vlastném vozidle !");
        else
        {
            new way[32], Name[24];
            GetPlayerName(playerid, Name, 24);
            format(way, 32, "SL/%s.cfg", Name);
            
            new Float:x, Float:y, Float:z, Float:a;
            GetVehiclePos(GetPlayerVehicleID(playerid), x, y, z);
            GetVehicleZAngle(GetPlayerVehicleID(playerid), a);
            
            new V_posX[16], V_posY[16], V_posZ[16], V_angle[16];
            format(V_posX, 16, "V%d_posX", vehicleseries);
            format(V_posY, 16, "V%d_posY", vehicleseries);
            format(V_posZ, 16, "V%d_posZ", vehicleseries);
            format(V_angle, 16, "V%d_angle", vehicleseries);
            
            dini_FloatSet(way, V_posX, x);
            dini_FloatSet(way, V_posY, y);
            dini_FloatSet(way, V_posZ, z);
            dini_FloatSet(way, V_angle, a);
            
            FormatPlayerInfoBox(playerid, "~g~Info Box", "~w~Uspesne sis zaparkoval vozidlo!", 2750);
        }
    }
    return 1;
}

Edited by Pingvin
Link to comment
Share on other sites

1 odpověd na tuto otázku

Recommended Posts

  • 0

Až na to, že jsi neposlal kód, který má v sobě ten proces vytváření a níčení vozidla, ale pouze jeho zaparkování(a ani ten není celý, protože s vozidlem se nic nestane, pouze se zjistí jeho pozice a uloží, nic víc)... Nicméně:

Co budeš potřebovat u vozidel je nějaké jméno majitele. Nejlépe u všech, protože můžeš pak snadno rozeznat od majitele města a hráčů:

#define MAX_PLAYER_PARK_VEHS (3)

new vehOwned[MAX_VEHICLES][MAX_PLAYER_NAME + 1];

Takže následně, kdyby to vozidlo někde nakupoval, tak se akorát přidá jméno majitele, a pokud jde o jméno majitele u obyčejných vozidel, tak nemusíme dávat nic a nebo u všech změnit jméno na město např. nebo tak něco...
Pak ještě kontrolovat, jestliže teda může více vozidel, tak pokud jich nekupuje už moc, a zjistit jeho jméno a dočastné id vozidla, do kterého se to vozidlo potom vloží a vytvoří. A nakonec to všechno pro jistotu uložit, a nebo to můžeš nechat až na konec, kdy se server vypíná, ale doporučuji to ukládat co nejdříve(pouze ten řetězec, a pár nezbytných informací, co se určitě během hraní nikdy nezmění, třeba model), protože dini je pomalé a ukládat pak např. 500+- vozidel i s jménem a pozicí? Jaj.

new pVehs[MAX_PLAYERS];

/* 
	Nakupování vozidla ... Sample code...
*/
	if (pVehs[playerid] == MAX_PLAYER_PARK_VEHS) return SendClientMessage(..., "Už sis koupil moc vozidel");
	new 
		pNick[MAX_PLAYER_NAME + 1], 
		veh_id = 0;
	GetPlayerName(playerid, pNick, sizeof pNick);
	pVehs[playerid] += 1;
	veh_id = CreateVehicle(... pozice bazaru?);
	format(vehOwned, MAX_PLAYER_NAME, pNick);
	
	// Uložit vozidlo:
	dini_Set(...); // vehOwned

	// Uložit hráče ?
	dini_IntSet(...); //pVehs[]

Pokud ale chceš, aby se ukládání vozidla nechalo pouze až do doby, než se vypne server, tak stačí všechna vozidla ničit po vypnutí serveru. Nevím, jak ukládáš vozidla, tak předpokládám, že po jednom souboru:

public OnGameModeExit() {
	new file[30];
  	// IDčka vozidel začínají od 1:
	for (new i = 1; i < MAX_VEHICLES; i++) {
		if (IsValidVehicle(i)) {
			format(file, sizeof file, "SL/Vehi%i.cfg", i);
			dini_Set(file, ...); // vehOwned
			dini_FloatSet(file, ...); // X
			dini_FloatSet(file, ...); // Y
			dini_FloatSet(file, ...); // Z
			dini_FloatSet(file, ...); // A
		}
	}
}

A velmi podobný postup máš i pro zapnutí serveru(nemusíš mít dočastné veh_id a místo něj házet index cyklu i, ale to je čistě na tobě, pouze pro přehlednost):

public OnGameModeInit() {
	new 
		file[30], 
  		veh_id = 1; // IDčka vozidel začínají od 1
	for (new i = 1; i < MAX_VEHICLES; i++) {
		format(file, sizeof file, "SL/Vehi%i.cfg", i);
		veh_id = CreateVehicle(...);
		format(vehOwned[veh_id], MAX_PLAYER_NAME, dini_Get(file, ...));
		/* X = */ dini_FloatSet(file, ...);
		/* Y = */ dini_FloatSet(file, ...);
		/* Z = */ dini_FloatSet(file, ...);
		/* A = */ dini_FloatSet(file, ...);
	}
}

Takhle jediná možnost, jak by se mohla ta vozidla zničit je po vypnutí serveru.
Pozor, jde pouze o ukázku, takže některé části kódu nemusí být správně, ale princip si myslím, že je dostatečně jasný.

A taky vřele doporučuji přejít na jiné files. Nejlépe DOF2, má dost podobnou práci jako dini.

Edited by Scydo
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...