Jump to content

ForestCZE

Uživatel
  • Příspěvků

    111
  • Registrován

  • Aktivní

Příspěvky posted by ForestCZE

  1. před 7 minutami, QWER said:

    Takže teraz by ten cyklus čo som ti hore napísal fungoval správne, nastavila by sa hodnota "18" iba premenne "fuel[0]"

    No a to je právě to, čemu jsem se chtěl vyhnout, protože GetPlayerVehicleID(playerid) začiná od 1. Ono mi to totiž nastavovalo fuel na 18 autu s vehicleid 0 a takové na serveru není

     

    PS. Sorry za ty úpravy, jsem se do toho zamotal

  2. před 6 minutami, QWER said:

    Nie. Ide o to, že keď vytvoríš array tak začína od 0 (nie od 1 ako používaš v cykle for). Takže končí "ALLV - 1"

    Príklad: Vytvoríš 

    
    new array[6];

    tak sa vytvorí premenna

    array[0] až array[5]

    Tvoj cyklus začína od 1, takže premennej array[0] nenastaví nič. A končí hodnotou 6 (lebo tam je "menší alebo rovný" čiže "<=" ). Tým pádom nastavíš hodnotu aj premenne array[6] ktorá ale neexistuje

     

    Ok, uznávám svou chybu :) Už to funguje i pod ckylem, když jsem upravil tu podmínku. Ale co když budu mít ALLV 1?

    Tak to bude:

    1 < 1 //a podmínka se nikdy nesplní

     

  3. Takže, pokud to mám takto:

     

    public OnFilterScriptInit()
    {
    	print("\n--------------------------------------");
    	print(" Tachometr by ForestCZE & DenDoSlav");
    	print("--------------------------------------\n");
    
    	CreatePickup(1650,1,1942.7909,-1774.6079,13.3906,-1);
    
    	for(new v = 1; v <= ALLV; v++)
    	{
    		fuel[v] = 18;
    	}
    	return 1;
    }

    tak to jde. Původně jsem měl nejdřív cyklus a pak až pickup. Jaký v tom je sakra rozdíl?

  4. Zdravím vespolek :)

    Mám tento kód ve FS:

    public OnFilterScriptInit()
    {
        print("\n--------------------------------------");
        print(" MyFS by ForestCZE & DenDoSlav");
        print("--------------------------------------\n");
    
        CreatePickup(1650,1,1942.7909,-1774.6079,13.3906,-1);
        return 1;
    }

    a ten pickup na serveru nevidím ani zaboha. Pokud to nastavím v GM:

    public OnGameModeInit()
    {
        CreatePickup(1650,1,1942.7909,-1774.6079,13.3906,-1);
        return 1;
    }


    tak to vidím normálně. Proč? Ve FS nelze mít pickupy nebo jak? Díky předem za vysvětlení.

  5. On 8. 3. 2018 at 18:25, DuFF said:

    Tak povedzme, že máš v GM globálnu premennú "myVar", ktorej hodnotu chceš čítať alebo meniť z nejakého FS..

    ========= v GM =========

    new myVar;

    forward SetMyVar(value);
    public SetMyVar(value)
    {
        myVar = value;
    }

    forward GetMyVar();
    public GetMyVar()
    {
        return myVar;
    }

    ========= vo FS =========

    // takto zmeníš hodnotu myVar napríklad na 42:
    CallRemoteFunction(#SetMyVar, "d", 42);

     

    Dobrý príklad nájdeš aj na samp fóre, CallRemoteFunction sa tam používa na zistenie hráčovho admin levelu.

     

    EDIT:
    Po prečítaní samp wiki som zistil, že by ti môj kód zhodil server. CallRemoteFunction vraj nesmie dostať ako argument prázdny string. (Teraz by ma zaujímalo, ako zavolať GetMyVar.. Možno použiť nejaký nadbytočný argument?)

     

    EDIT2:
    Volanie CallRemoteFunction(#Foo, "s", emptyString) vraj zhodí server (v prípade, že premenná emptyString je prázdny string),
    ale u volania CallRemoteFunction(#GetMyVar, "") si nie som istý, otestujem a dám vedieť.

    No tak získávání je mi jasné. Mám v módu:

     

    new carlocked[MAX_VEHICLES]; //Použil bych boolean, ale podle wiki se to nedá
    
    forward GetLocking(playerid);
    public GetLocking(playerid) return carlocked[GetPlayerVehicleID(playerid)];

    A ve FS pak:

    printf("%i", CallRemoteFunction("GetLocking", "i", playerid));

    To funguje v pořádku, ale nějak mi není jasné, jak přes tu fci CRF proměnnou nastavit na nějaké číslo.

     

    Je to takto správně?

    forward SetLocking(playerid, value);
    public SetLocking(playerid, value) carlocked[GetPlayerVehicleID(playerid)] = value;
    
    CallRemoteFunction("SetLocking", "i", 1); //Když chci nastavit proměnnou na číslo 1

    Ale asi by tam mělo být i to playerid. Vážně nevím, jak to má být. Poradí mi někdo, prosím? Díky :)

  6. Čau čau, rád bych vyřešil jednu věc. Mám v GameModu nějakou proměnnou, třeba:

    new test[MAX_PLAYERS];

    A pak mám admin systém jako Filterscript a potřebuju v něm pracovat s tou proměnnou. Logicky to zařve, že neexistuje ve FS a když ji nadefinuju, tak jsou ve skutečnosti dvě se stejným názvem. Dlouho jsem přemýšlel, jak to vyřešit a jednou jsem to vyřešil takto:

    GetPVarInt(playerid, "Test");
    SetPVarInt(playerid, "Test", 12345);

    No jenže zjišťuju, že potřebuju čím dál tím víc pracovat s těmi proměnými v GM i FS a nedokážu si představit, že bych takto všechny předělal.

    A navíc je tu ještě jedna věc. Jestli jsem dobře pochopil, tak tento typ funguje na hráče. Co když ale potřebuju proměnnou s autem? Např.

    new TestAuto[MAX_VEHICLES];

     

    Vím, že FS se incializuje dřív než GM. Je teda nějaká normální a easy cesta, jak s tím pracovat? Díky :)

  7. před 16 hodinami, IllidanS4 said:

    na co je ti dobré mít funkci, která zabanuje hráče po sekundě?

    Když vypíšu zprávu všem do chatu s tím, že jsem jako admin kickl/zabanoval hráče a pod tím je hned příkaz na kick/ban, tak vyhozený/zabanovaný hráč tu zprávu neuvidí, protože se mu uzavře spojení se serverem dřív, než vyskočí zpráva. Proto až po sekundě :)

  8. Čau čau, mám tu jednu věcičku. Asi to bude totální prkotina, ale já nevidím chybku.

    forward GiveBan(playerid, reason[]);

    V příkazu:

    //Pokud si zde vypíšu param2 do logu, output je v pořádku
    SetTimerEx("GiveBan", 1000, 0, "is", id, param2);

    A metoda:

    public GiveBan(playerid, reason[])
    {
    	if(IsPlayerConnected(playerid))
    	{
    	  //Pokud si zde vypíšu reason do logu, output je v pořádku	
          BanEx(playerid, reason); //tady je někde chyba - zapíše to do souboru (null)
    	}
    }

    Co je špatně? Díky :)

  9.  

    před 5 hodinami, Quiter said:

    Plánuješ s tými otázkami ďalej v GM pracovať (upravovať/meniť ich)?

    Určitě budu přidávat celkový počet, ale losovat jich to bude vždycky 5. Co by se zásadně změnilo, kdybych to nějak upravoval?

     

    před 5 hodinami, Quiter said:

    for(new a=0;a<i;a++) // spustíme cyklus od 0 po i (tj. ak si na 4 otázke tak cyklus prebehne pre čísla 0,1,2,3)

    Pokud mám těch otázek 5, nemělo by to proběhnout ještě pro číslo 4?

     

    před 5 hodinami, Quiter said:

    A musíš ich ukladať? :o Ďalej s nimi nijak nepracuješ, naviac sú obsiahnuté už v jednej premennej (u mňa vo funkcií) takže zbytočné vytvárať novú

    No asi nemusím, tady jsem zmaten :d

     

    Děkuju moc, dává to smysl a vypadá to pěkně. Zkusím to pochopit a použít a ještě budu když tak reagovat později :) 

  10. Ahoj, mám takový problém. Snažím se udělat losování otázek se správnými odpověďmi. Nějak jsem to sesmolil, ale přijde mi to krkolomné a stále mi něco říká, že by to šlo lépe.

     

    new question[20][1000]; //u té tisícovky si nejsem jistý, jestli je to v pořádku, ale toho textu je celkem dost
    new answer[20][2]; //tady také nevím, ale když bude ve stringu např. "a", tak by to mělo stačit
    Spoiler

    question[0] = "Otázka číslo 1\nA) ano\nB) ne\nC) nevim";
    question[1] = "Otázka číslo 2\nA) ano\nB) ne\nC) nevim";
    question[2] = "Otázka číslo 3\nA) ano\nB) ne\nC) nevim";
    question[3] = "Otázka číslo 4\nA) ano\nB) ne\nC) nevim";
    question[4] = "Otázka číslo 5\nA) ano\nB) ne\nC) nevim";
    question[5] = "Otázka číslo 6\nA) ano\nB) ne\nC) nevim";
    question[6] = "Otázka číslo 7\nA) ano\nB) ne\nC) nevim";
    question[7] = "Otázka číslo 8\nA) ano\nB) ne\nC) nevim";
    question[8] = "Otázka číslo 9\nA) ano\nB) ne\nC) nevim";
    question[9] = "Otázka číslo 10\nA) ano\nB) ne\nC) nevim";
    question[10] = "Otázka číslo 11\nA) ano\nB) ne\nC) nevim";
    question[11] = "Otázka číslo 12\nA) ano\nB) ne\nC) nevim";
    question[12] = "Otázka číslo 13\nA) ano\nB) ne\nC) nevim";
    question[13] = "Otázka číslo 14\nA) ano\nB) ne\nC) nevim";
    question[14] = "Otázka číslo 15\nA) ano\nB) ne\nC) nevim";
    question[15] = "Otázka číslo 16\nA) ano\nB) ne\nC) nevim";
    question[16] = "Otázka číslo 17\nA) ano\nB) ne\nC) nevim";
    question[17] = "Otázka číslo 18\nA) ano\nB) ne\nC) nevim";
    question[18] = "Otázka číslo 19\nA) ano\nB) ne\nC) nevim";
    question[19] = "Otázka číslo 20\nA) ano\nB) ne\nC) nevim";

    answer[0] = "a";
    answer[1] = "a";
    answer[2] = "c";
    answer[3] = "b";
    answer[4] = "c";
    answer[5] = "b";
    answer[6] = "a";
    answer[7] = "c";
    answer[8] = "b";
    answer[9] = "b";
    answer[10] = "a";
    answer[11] = "a";
    answer[12] = "c";
    answer[13] = "a";
    answer[14] = "c";
    answer[15] = "b";
    answer[16] = "a";
    answer[17] = "a";
    answer[18] = "c";
    answer[19] = "c";

    Pak potřebuju náhodně vybrat 5 otázek z 20 tak, aby se ve výběru žádná neopakovala:

    new allot[5];
    
    for(new i = 0; i < 5; i++)
    {
    	allot[i] = random(19);
    	//nevím, jak sestavit podmínku, aby to opravdu hodilo znovu random pokud to na nějakém indexu 0-4 najde stejné číslo
    }

    Pak uložím hráči do proměnné správné odpovědi, abych je později mohl porovnat s těmi, které zadal (v jiném dialogu):

    new correctanswer[MAX_PLAYERS][5][2]; //opět nevím, jestli stačí dva znaky pro "a"
    correctanswer[playerid][0] = answer[allot[0]];
    correctanswer[playerid][1] = answer[allot[1]];
    correctanswer[playerid][2] = answer[allot[2]];
    correctanswer[playerid][3] = answer[allot[3]];
    correctanswer[playerid][4] = answer[allot[4]];
    //toto by se také dalo přidat do toho cyklu?

    Pak to vypíšu do dialogu:

    new allquestions[1000]; //opět délka - to číslo mě děsí a zdá se mi, že i pawno déle compiluje
    format(allquestions, sizeof(allquestions), "1. %s", question[allotq[0]);
    format(allquestions, sizeof(allquestions), "%s2. %s", allquestions, question[allotq[1]]);
    format(allquestions, sizeof(allquestions), "%s3. %s", allquestions, question[allotq[2]]);
    format(allquestions, sizeof(allquestions), "%s4. %s", allquestions, question[allotq[3]]);
    format(allquestions, sizeof(allquestions), "%s5. %s", allquestions, question[allotq[4]]);
    ShowPlayerDialogEx(playerid, 0, DIALOG_STYLE_INPUT, "Otázky", allquestions, "Odeslat", "Ukončit");

    A nakonec zkontroluju odpovědi, když zadám do inputtextu např. a,b,c,a,c

    new questionout[][]; //tady nevím, jak to bude s velikostmi - myslím, že v prvním poli bude 5 jako pět částí stringu a u druhého nevím
    questioncount = strexplode(questionout, inputtext, ","); //include strlib
    if(questioncount != 5) return SCM //špatný formát
    
    //A porovnání
    if(questionout[0][0] == correctanswer[playerid][0][0]) //ta nula v druhém pole u každé podmínky je dobře? Řvalo to, že array must be indexed a snad to i funguje, ale...
    {
    	//Odpověď na otázku číslo 1 je správně
    }
    
    if(questionout[1][0] == correctanswer[playerid][1][0])
    {
    	//Odpověď na otázku číslo 2 je správně
    }
    
    if(questionout[2][0] == correctanswer[playerid][2][0])
    {
    	//Odpověď na otázku číslo 3 je správně
    }
    
    if(questionout[3][0] == correctanswer[playerid][3][0])
    {
    	//Odpověď na otázku číslo 4 je správně
    }
    
    if(questionout[4][0] == correctanswer[playerid][4][0])
    {
    	//Odpověď na otázku číslo 5 je správně
    }

    Je to snad vše :)

     

    Jde mi o:

    1) Je tohle efektivní řešení? Nevynalézám kolo?

    2) Pomoc s věcmi, u kterých opravdu nevím (viz popisky)

     

    Dal jsem si s tím opravdu práci, abych vše popsal, o co jde a mohli jsme to společně vyřešit, tak i pevně věřím, že se najde někdo ochotný, kdo si dá práci to projít a pomůže mi. Děkuji předem za pomoc všem :)

  11. Nakonec to mám takto:

    new radiolist[500]; 
    strcat(radiolist, "Stanice\tPosluchačů\n"); 
    strcat(radiolist, "Vypnout rádio\n"); 
    format(radiolist, sizeof(radiolist), "%sEvropa 2\t%i\n", radiolist, listeners[0]); 
    format(radiolist, sizeof(radiolist), "%sRádio Express\t%i\n", radiolist, listeners[1]);
    format(radiolist, sizeof(radiolist), "%sDance Rádio\t%i\n", radiolist, listeners[2]);
    ShowPlayerDialogEx(playerid, D_RADIO, DIALOG_STYLE_TABLIST_HEADERS, "Rádio", radiolist, "Zvolit", "Zavřít");

     

  12. Narazil jsem ještě na jeden problém :) Mám:

     

    new radiolist[500]; //mám těch rádií víc, ale nechci tu psát moc dlouhý text, princip pak bude stejný
    strcat(radiolist, "Stanice\tPosluchačů\n");
    strcat(radiolist, "Vypnout rádio\n");
    strcat(radiolist, "Evropa 2\t%i\n", listeners[0]);
    strcat(radiolist, "Rádio Express\t%i\n", listeners[1]);
    strcat(radiolist, "Dance Rádio\t%i", listeners[2]);
    
    new radiostring[500];
    format(radiostring, sizeof(radiostring), "%s", radiolist);
    ShowPlayerDialogEx(playerid, D_RADIO, DIALOG_STYLE_TABLIST_HEADERS, "Rádio", radiostring, "Zvolit", "Zavřít"); 

    Jak do toho strcat zakomponovat format, aby mi to vzalo ty integery? Díky :)

  13. před 54 minutami, rEf said:

    Dodatek: příště stačí pohledat už to tu na fóru je alespoň já si tu toho už několikrát všiml

    Jo, jasný ... problém, že se zeptám na nestandardní věc, ale že tu někdo chce pomoct s primitivním vytvořením pickupu a je schopen i podle dokumentace udělat chybu u něčeho tak jednoduchého, to nikomu nevadí...

    Jinak děkuji za pomoc a ochotu

    PS. Nic proti Zerovi, jen mi přijde dost hloupé, co je v tom dodatku...

  14. Ahoj, nechci zakládat nový topic kvůli takové prkotině. Rád bych se zeptal, jaký type pickupu nastavit. Když nastavím 1, tak nezmizí, ale pořád se obnovuje ta akce. Takže když mi třeba vyjede dialog a já se v listu odkážu na jiný, tak mě to snad za dvě vteřiny kopne na ten původní. Četl jsem všechny typy a ani jeden mi neříká to, co potřebuju. Jak na to?

  15. před 4 minutami, Tanga said:

    Do googlu som si dal dof2 download, prvy link, nasledne som odtialto stiahol includ, pawno->new->include dof2. Skompiluje sa to bez problemov.

    Nikdo netvrdí, že to nezkompiluje. Píšu, že je tam rekurze. Do složky pawno si dej pawn.cfg a do něj:

    -d3

    Pak mód zkompiluj znovu a všimni si rekurze

  16. před 12 minutami, Tanga said:

    a) odstraň rekurziu
    B)

     

    1) Vzniká kvůli tomu ten crash?

    2) Jak odstranit zbytečně velká pole, když se rekurze objeví v includu, který nemá s mým módem jako takovým nic společného?

  17. Mimo funkce:

    GetXYInFrontOfPlayer(playerid, &Float:vx, &Float:vy, Float:vdistance)
    {
    	new Float:va;
    	GetPlayerPos(playerid, vx, vy, va);
    	GetPlayerFacingAngle(playerid, va);
    
    	if(GetPlayerVehicleID(playerid))
    	{
    		GetVehicleZAngle(GetPlayerVehicleID(playerid), va);
    	}
    	vx += (vdistance * floatsin(-va, degrees));
    	vy += (vdistance * floatcos(-va, degrees));
    }

    A v příkazu:

     

    new Float:xyza[4];
    GetPlayerPos(playerid, xyza[0], xyza[1], xyza[2]);
    GetXYInFrontOfPlayer(playerid, xyza[0], xyza[1], 5.0);
    GetPlayerFacingAngle(playerid, xyza[3]);
    CreateVehicle(strval(inputtext), xyza[0], xyza[1], xyza[2]+2.0, xyza[3]+90.0, -1, -1, 5000);

     

×
×
  • Create New...