Jump to content
  • 0

pomoc premenná[parameter]


niko777112

Dotaz

Prajem pekný večer!

 

Rád by som niekoho poprosil či by mi toto nevysvetlil:

Ako fungujé a čo robí premenná typu: new premmna[MAX_PLAYERS] a aký je rozdiel v new premenna.

Ak tomu správne chápem, premenna by bola pre vsetkych a premenna[MAX_PLAYERS] pre kazdeho zvlast?

 

Vopred vám ďakujem za pomoc!

 


 

 

 

Radčej sa spýtať a byť debilom na pár minút ako mlčať a ostať debilom do konca života - Čínske príslovie

 

 

 

 

Link to comment
Share on other sites

18 odpovědí na tuto otázku

Recommended Posts

  • 0

Do

new promenna;

uložíš pouze jednu hodnotu

promena = 10; // proměnná je teď 10
promena = -50; // teď je její hodnoota -50
promena = 'o'; // teď '0' ..
...

Kdežto do pole

new promenna[pocet prvku];

uložíš hodnot více, konkrétně tolik, kolik máš počet prvků.

Řekněme, že máš

new promenna[10];

do tohoto pole uložíš 10 hodnot

promenna[0] = 5;
promenna[1] = 8;
...
promenna[9] = 20;

Číslo v hranatých závorkách se nazývá index. Počet prvků máme 10, ale indexy začínají od 0, takže nejvyšší index je 9.

Pokud zadáš větší index než je počet prvků, nastane chyba. To stejné pokud zadáš záporné číslo (index není snad nikdy záporný). Je tedy třeba dbát na dosazování správných čísel.

 

Kód výše můžeš klidné nahradit něčím takovým:

new promenna0 = 5;
new promenna1 = 8;
...
new promenna9 = 20; 

ale není to moc pěkné a hůře se s tím pracuje. Například pokud bys chtěl tyto hodnoty vypsat, museli bychom je vypisovat manuálně 

piš promenna0;
piš promenna1;
...
piš promenna9;

U pole je to ale jednodušší, protože do indexu můžeme dosadit proměnnou. To nám dovoluje něco takového

for(new i = 0; i < 10 ;i++) piš promenna[ i ]; // vypíše promenna[0], promenna[1] ... promenna[9]

V tvém případě máš pole o 500 prvcích (defaultně je MAX_PLAYERS definováno na číslo 500). Můžeš tak docílit proměnné "pro každého", protože za index většinou dosazuješ konkrétní id hráče. Tedy u každého hráče pracuješ s jiným indexem a jinou hodnotou.

Například

money[ id_hráče ] = částka;

zase by toto šlo nahradit za

new money0 = 50; // Hráč id 0 má 50$
new money1 = 10; // ..

ale zas je zde špatný přístup k proměnné.

switch(playerid)
{
    case 0: money0 = 99;
    case 1: money1 = 55;
    ...
}

mnohem lehčí je dosadit za index rovnou playerid. S proměnnou playerid se setkáváme nejčastěji, proto tu je uvedena jako příklad. Můžeme tam dosadit téměř jakoukoliv proměnnou (celočíselnou!).

 

Toto není návod, jen takové menší osvětlení. Pokud chceš do toho více zasvětit, tak tě odkazuji na návody o polích (arrays), kde to vše budeš mít detailněji rozepsané :)

 

// EDIT:

Jedním z příkladů pole je i "string".

new str[10] = "AHOJ";

Zde jsme si vytvořili string o velikosti 10 prvků.

str[ 0 ] obsahuje znak 'A', str[ 1 ] obsahuje 'H' atd.

Prostě string není nic jiného, než pole nějakých hodnot, reprezentujících znaky (v ascii tabulce si můžeš ke každému znaku najít příslušnou hodnotu).

Edited by Lukasz
  • Líbí se mi to! (+1) 3
Link to comment
Share on other sites

  • 0

Ďakujem za vysvetlenie. keď sa už pÿtam, ako sa to používa?

 

new premenna[MAX_PLAYERS] a chcem do nej napr ci ma alebo nema hrac wanted, ak ma tak kolko, + vypisanie

Dalo by sa spravit nieco podobne z ID vozidlami? myslim ulozit do premennej motor, ktore auto ho ma zapnuty a ktore nie?

Link to comment
Share on other sites

  • 0

Ano, za počet prvků dosadíš počet vozidel na serveru (maximální, tj definováno jako MAX_VEHICLES) a pak za index dáváš id vozidla.

new wanted[MAX_PLAYERS];

if(wanted[ id ] == wantedlevel)
{
     // zformátování a vypsání
}
new motor[MAX_VEHICLES];
...
motor[ id_vozidla ] = 0; // třeba vypnutý
motor[ id_vozidla ] = 1; // zapnutý
Edited by Lukasz
Link to comment
Share on other sites

  • 0

new pole[7];
for(new i = 1; i <= MAX_VEHICLES; i++)
{
if(IsValidVehicle(i))
{
GetVehicleParamsEx(i, pole[0], pole[1], pole[2], pole[3], pole[4], pole[5], pole[6]);
SetVehicleParamsEx(i, false, pole[1], pole[2], pole[3], pole[4], pole[5], pole[6]);
}
}

A detail k tvojí předchozí otázce. Můžeš zjistit stav motoru (zapnutý/vypnutý) pomocí funkce GetVehicleParamsEx(..)

Edited by Lukasz
Link to comment
Share on other sites

  • 0

Mne to funguje presne tak ako som ti to napísal.

Len mi pre zmenu nefunguje toto:

 

    if(GetVehicleModel(vehicleid) == 481 || GetVehicleModel(vehicleid) == 409 || GetVehicleModel(vehicleid) == 410)
        {
            GetVehicleParamsEx(GetPlayerVehicleID(playerid), engine,lights,alarm,doors,bonnet,boot,objective);
            SetVehicleParamsEx(GetPlayerVehicleID(playerid), 1, lights,alarm,doors,bonnet,boot,objective);
        }

Link to comment
Share on other sites

  • 0

 

 

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
    if(GetVehicleModel(vehicleid) == 481 || GetVehicleModel(vehicleid) == 409 || GetVehicleModel(vehicleid) == 410)
        {
            GetVehicleParamsEx(GetPlayerVehicleID(playerid), engine,lights,alarm,doors,bonnet,boot,objective);
            SetVehicleParamsEx(GetPlayerVehicleID(playerid), 1, lights,alarm,doors,bonnet,boot,objective);
        }
    return 1;
}

 

 


Potreboval by som proste aby po štarte módu mali všetky autá vypnuté motory (to už mám) okrem bicyklov (o to sa snažin)

Chcel som to spraviť tak že vypnú sa všetkým motory, a ak hráč nastúpi na bicykel tak sa mu motor zapne, no nefunguje to aj keď tam chybu nevidiím :(

Edited by niko777112
Link to comment
Share on other sites

  • 0

Tyto proměnné někde deklarované máš?

engine,lights,alarm,doors,bonnet,boot,objective

Jinak problém je v tom, že OnPlayerEnterVehicle se volá, když hráč NASTUPUJE do vozidla. To znamená, že ve vozidle ještě není a tak ti toto 

GetPlayerVehicleID(playerid)

vrací špatnou hodnotu (respektive správnou). GetPlayerVehicleID(..) ale vůbec používat nemusíš, protože víš id vozidla, máš ho v proměnné vehicleid. Takže místo GetPlayerVehicleID(..) dej vehicleid.

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