Jump to content
  • 0

pomoc podmienka


vopojtepek

Dotaz

Zdravím, chcel by som vedieť ako spraviť v príkaze podmienku na to aby hráč si mohol spawnúť len 1 auto a kdo by bol ešte taký ochotný mi to trochu vysvetliť(podmienky, lebo v návodoch sa niako strácam).

 

 

public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/car", cmdtext, true, 10) == 0)
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid,x,y,z);
CreateVehicle(411, x+3, y, z, 90, -1, -1, -1);
     SendClientMessage(playerid, COLOR_BLUE, "Car was spawned");
return 1;
}
return 0;
}

 

Link to comment
Share on other sites

6 odpovědí na tuto otázku

Recommended Posts

  • 0

Zkus to takto.

Vysvětlovat asi nemá cenu, ten kód je podle mě samopopisný.

new PCar[MAX_PLAYERS];


public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/car", cmdtext, true, 10) == 0)
{
if(PCar[playerid]) return SendClientMessage(playerid, COLOR_BLUE, "You already have one car");
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid,x,y,z);
PCar[playerid] = CreateVehicle(411, x+3, y, z, 90, -1, -1, -1);
SendClientMessage(playerid, COLOR_BLUE, "Car was spawned");
return 1;
}
return 0;
}
Edited by DooM
Link to comment
Share on other sites

  • 0

Já ti to teda trochu vysvětlím.

Takže jak udělal DooM tu podmínku do toho budeš nahrávat hodnotu kolik aut má. Ovšem jelikož chceš použít pouze na žádné nebo 1 auto, doporučil bych ti boolean (vrací pouze hodnotu true (1) a false (0)). Pokud by jsi to chtěl na více aut, podmínka, co napsal DooM vy přišla vhod.

Následná podmínka:

if(PCar[playerid]) return SendClientMessage(playerid, COLOR_BLUE, "You already have one car");// Zde můžeš použít i PCar[playerid] == true, ovšem PCar[playerid] toto je podstatně kratší.

Dále, co patří k podmínkám a měl bys vědět, co znamenají tyto znaky: "&& a ||".

&& - pokud platí třeba obě dvě podmínky, co zadáš ("a zároveň"). Např.: Budu bankéř a chci aby majitel napsal svůj podpis a vložil své heslo, a pokud se jedno z těch dvou údajů nebude shodovat, peníze mu nevydám.

if(podpis[playerid] && heslo[playerid])//pokud se oba shodují
    GivePlayerMoney(...);
else if //jakýkoliv jiný případ
    return SCM(plid, col, "Některý z údajů je nesprávný")

|| - pokud platí alespoň jedna z podmínek ("nebo").Např.: Uplně stejná situace, ale bude mi stačit když bude alespoň jeden z údajů správný (v praxi asi nevyužiješ :d ):

If(podpis[playerid] || heslo[playerid]) //
    GivePlayerMoney(...);
else if //pokud se ani jeden neshoduje
    return SCM(plid, col, "Žádný z údajů se neshoduje")

Určitě sis všiml, že jsem neudělal složené závorky za podmínkou. Je to z toho důvodu, že když zadáváš pouze jeden příkaz, který se má vykonat, tak ti ho program vykoná, pokud by jsi ovšem zadal bez složených závorek více akcí, udělala by se ti pouze ta jedna, druhá by se třeba udělala i kdyby si podmínky nesplnil (to už záleží na kódu). Takže pokud zadáváš blok příkazů, co má program udělat musíš použít složité závorky. Jinak já spíš doporučuju je dělat všude, je to z toho důvodu, že když budeš chtít třeba něco přidat, tak budeš muset zase zadávat složené závorky a zbytečně to jenom zkomplikuješ. + se mi to zdá přehlednější. 

 

Další, o čem by jsi měl vědět je negace (možná ses to už učil ve škole), zde se na negaci používá "!":

 

Např.:

Uděláme třeba to s autama, akorád je budeš chtít zničit:

f(!PCar[playerid]) return SendClientMessage(playerid, -1, "Nemáš žádné auto vytvořené!"); //Znegujeme hodnotu PCar, pokud by zde nebyl vykřičník znamenalo by to "Je li hodnota true(1)", s ! to teďka znamená "Je-li hodnota false (0)". 
if(PCar[playerid] >= 1 && !PCar[playerid] > 0) //"Je-li alespoň jedno auto a zároveň není méně jak 0 auta"  ---> Spíše by se to hodilo k penězům. Šlo by samozřejmě použít i else if ale máš tu dvě možnosti, která by mohla proměnná PCar obsahovat a to kladnou hodnotu i zápornou, ale pochybuji, že by si někde prodával -1 auta, ale chyba by se někde vyskytnou mohla.
{
DestroyVehicle(...);
PCar--; //odečte jednu jednotku u PCar
}

Kód jako takový je samozřejmě blbě, buď by jsi musel zadat id vozidla, kdyby si jich měl víc nebo by se museli zničit všechny, na to samozřejmě cyklus a od PCar odečíst počet vozidel, co jsi měl.

 

Jinak doufám, že ti to trochu pomohlo, kdyby jsi něco nechápal, tak se klidně zeptej.

Edited by D@ndys
Link to comment
Share on other sites

  • 0

Já ti to teda trochu vysvětlím.

Takže jak udělal DooM tu podmínku do toho budeš nahrávat hodnotu kolik aut má. Ovšem jelikož chceš použít pouze na žádné nebo 1 auto, doporučil bych ti boolean (vrací pouze hodnotu true (1) a false (0)). Pokud by jsi to chtěl na více aut, podmínka, co napsal DooM vy přišla vhod.

Následná podmínka:

if(PCar[playerid]) return SendClientMessage(playerid, COLOR_BLUE, "You already have one car");// Zde můžeš použít i PCar[playerid] == true, ovšem PCar[playerid] toto je podstatně kratší.

Dále, co patří k podmínkám a měl bys vědět, co znamenají tyto znaky: "&& a ||".

&& - pokud platí třeba obě dvě podmínky, co zadáš ("a zároveň"). Např.: Budu bankéř a chci aby majitel napsal svůj podpis a vložil své heslo, a pokud se jedno z těch dvou údajů nebude shodovat, peníze mu nevydám.

if(podpis[playerid] && heslo[playerid])//pokud se oba shodují
    GivePlayerMoney(...);
else if //jakýkoliv jiný případ
    return SCM(plid, col, "Některý z údajů je nesprávný")

|| - pokud platí alespoň jedna z podmínek ("nebo").Např.: Uplně stejná situace, ale bude mi stačit když bude alespoň jeden z údajů správný (v praxi asi nevyužiješ :d ):

If(podpis[playerid] || heslo[playerid]) //
    GivePlayerMoney(...);
else if //pokud se ani jeden neshoduje
    return SCM(plid, col, "Žádný z údajů se neshoduje")

Určitě sis všiml, že jsem neudělal složené závorky za podmínkou. Je to z toho důvodu, že když zadáváš pouze jeden příkaz, který se má vykonat, tak ti ho program vykoná, pokud by jsi ovšem zadal bez složených závorek více akcí, udělala by se ti pouze ta jedna, druhá by se třeba udělala i kdyby si podmínky nesplnil (to už záleží na kódu). Takže pokud zadáváš blok příkazů, co má program udělat musíš použít složité závorky. Jinak já spíš doporučuju je dělat všude, je to z toho důvodu, že když budeš chtít třeba něco přidat, tak budeš muset zase zadávat složené závorky a zbytečně to jenom zkomplikuješ. + se mi to zdá přehlednější. 

 

Další, o čem by jsi měl vědět je negace (možná ses to už učil ve škole), zde se na negaci používá "!":

 

Např.:

Uděláme třeba to s autama, akorád je budeš chtít zničit:

f(!PCar[playerid]) return SendClientMessage(playerid, -1, "Nemáš žádné auto vytvořené!"); //Znegujeme hodnotu PCar, pokud by zde nebyl vykřičník znamenalo by to "Je li hodnota true(1)", s ! to teďka znamená "Je-li hodnota false (0)". 
if(PCar[playerid] >= 1 && !PCar[playerid] > 0) //"Je-li alespoň jedno auto a zároveň není méně jak 0 auta"  ---> Spíše by se to hodilo k penězům. Šlo by samozřejmě použít i else if ale máš tu dvě možnosti, která by mohla proměnná PCar obsahovat a to kladnou hodnotu i zápornou, ale pochybuji, že by si někde prodával -1 auta, ale chyba by se někde vyskytnou mohla.
{
DestroyVehicle(...);
PCar--; //odečte jednu jednotku u PCar
}

Kód jako takový je samozřejmě blbě, buď by jsi musel zadat id vozidla, kdyby si jich měl víc nebo by se museli zničit všechny, na to samozřejmě cyklus a od PCar odečíst počet vozidel, co jsi měl.

 

Jinak doufám, že ti to trochu pomohlo, kdyby jsi něco nechápal, tak se klidně zeptej.

 

Vysvětluješ to špatně :) ... To pole jsem použil, aby každé auto mělo individuální index, dle hráčovo ID, nikoli počet vozidel.

Link to comment
Share on other sites

  • 0

Ohh, promiň to jsem si nijak neuvědomil! :d Každopádně tam pořád boolean použít může. ;)

~> Pokud jsi trochu šikovnější, můžeš využít všechny typy deklarovaných proměnných :d...

~> A tím, že využiješ boolen si moc toho neušetříš. Je to spíše pro jistoty, kde stačí opravdu jen ano/ne a ne hodnoty do tisíců a více samozřejmě.

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