Jump to content

návod Format


Tanga

Recommended Posts

Toto je prvá séria návodov pre úplnych začiatočníkov.
 

Čo je to format:
  • Je to funkcia, ktorá spojí viac rozličných textov.

Kedy použijem funkciu format:

  •  Napríklad ak chcem, aby som z textov "ahoj" a "hráč" dostal "ahoj hráč"!
Ako vyzerá funkcia format:
Nasledujúci text si prečítaj velmi pozorne, podla toho budeš robiť.

format(vysledokspojenia,sizeof(vysledokspojenia),"SKRATKA1 SKRATKA2",zdrojprvejskratky,zdrojdruhejskratky,...);

Skratky, ktoré môžeš použiť:


%s - použi toto ak zdrojskratky je text
%d - použi toto ak zdrojskratky je celé číslo
%f  - použi toto ak zdrojskratky je desatinné číslo
%c - použi toto ak zdrojskratky je len jeden znak
*Existuje ešte pár typov, ale tie ti zaručene nebude treba

 

Postup použitia format:
Tento postup používaj vždy a všade.


1. Vytvor si premennú do ktorej uložíš výsledok spojenia textov.
2. Napíš si tvar ktorý chceš, aby to malo.
3. Napíš si funkciu a vyplň ju.
4. Do tvaru tvojho textu vlož skratky
5. Napíš, čo ktorá skratka znamená.
6. Napíš počet znakov výsledku do definovania výsledku.

 

 

Príklady použitia format:

1. Spojenie mena a priezviska:

#include <a_samp>
//Krok postupu 1 - vytvorím si premenné...
new PrveMeno[20]; // Lebo meno hráča má max 20 znakov
new Priezvisko[20];
new CeleMeno[5+20+20]; //Ak nechápeš 5+20+20 len čítaj ďalej, tam je to vysvetlené

//Krok 2 - tvar výsledku - chceme "PrveMeno_Priezvisko"

/*Krok 3 - napíš si funkciu
format(CeleMeno,sizeof(CeleMeno),"PrveMeno_Priezvisko"....);*/

/*Krok 4 - použi skratky a aj Krok 5 - za tvar dopíš akú skratku si použil (musia byť zaradom)
format(CeleMeno,sizeof(CeleMeno),"%s_%s",PrveMeno,Priezvisko);*/

/* Krok 6 - spočítaj si počet znakov a doplň celkový počet znakov do výslednej premennej
%s_%s          =  5
PrveMeno[20]   = 20
Priezvisko[20] = 20
CeleMeno[5+20+20] */

format(CeleMeno,sizeof(CeleMeno),"%s_%s",PrveMeno,Priezvisko); // Výsledná funkcia

SendClientMessage(playerid,VASA_FARBA,CeleMeno); // Toto vypíše to meno

//Táto funkcia by fungovala, keby ste v okne SAMP mohli zadať meno aj priezvisko, čo však nie je možné. Je to len príklad.


2. Správa "Vitaj na serveri, menohráča."

#include <a_samp>
public OnPlayerConnect(playerid)
{
    new MenoHraca[20];
    new VyslednaSprava[21+20];
    GetPlayerName(playerid,MenoHraca,sizeof(MenoHraca));
    format(VyslednaSprava,sizeof(VyslednaSprava),"%s, vitaj na serveri!",MenoHraca);
    /* Sčítanie znakov:
    %s, vitaj na serveri! = 21
    MenoHraca[20]         = 20
    VyslednaSprava[21+20] */
    SendClientMessage(playerid,VASA_FARBA,VyslednaSprava);
}

 


3. Vynadanie hráčovi pomocou príkazu


 

#include <a_samp>
#include <zcmd>
#define DIALOG_NADAVKA 1

command(vynadat,playerid,params[])
{
    if(IsPlayerAdmin(playerid)
    {
        ShowPlayerDialog(playerid,DIALOG_NADAVKA,DIALOG_STYLE_INPUT,"Vynadanie","Zadaj ID hráča, ktorému chceš vynadať:","Vynadať!","");
    }
    return true;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == DIALOG_NADAVKA)
    {
        if(!response || !strlen(inputtext)) return true;  // Ak hráč zrušil dialóg, alebo nenapísal ID, neurobiť nič
        new MenoHraca[20];
        new IDHraca = strval(inputtext); // premena textu na číslo
        new VyslednaSprava[39+20];
        GetPlayerName(IDHraca,MenoHraca,sizeof(MenoHraca));
        format(VyslednaSprava,sizeof(VyslednaSprava),"Administrátor rozhodol, že %s je deb*l!",MenoHraca);
        SendClientMessageToAll(VASA_FARBA,VyslednaSprava);
    }
    return true;
}    

 


4. Vynadanie hráčovi pomocou príkazu aj s menom admina


 

#include <a_samp>
#include <zcmd>
#define DIALOG_NADAVKA 1

command(vynadat,playerid,params[])
{
    if(IsPlayerAdmin(playerid)
    {
        ShowPlayerDialog(playerid,DIALOG_NADAVKA,DIALOG_STYLE_INPUT,"Vynadanie","Zadaj ID hráča, ktorému chceš vynadať:","Vynadať!","");
    }
    return true;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == DIALOG_NADAVKA)
    {
        if(!response || !strlen(inputtext)) return true;  // Ak hráč zrušil dialóg, alebo nenapísal ID, neurobiť nič
        new MenoHraca[20];
        new MenoAdmina[20];
        new IDHraca = strval(inputtext); // premena textu na číslo
        new VyslednaSprava[35+20+20];
        GetPlayerName(IDHraca,MenoHraca,sizeof(MenoHraca));
        GetPlayerName(playerid,MenoAdmina,sizeof(MenoAdmina)); // tu zasa získanie meno admina z jeho ID
        format(VyslednaSprava,sizeof(VyslednaSprava),"Šéfino %s rozhodol, že %s je deb*l!",MenoAdmina, MenoHraca);
        SendClientMessageToAll(VASA_FARBA,VyslednaSprava);
    }
    return true;
}

 

 

 

 

Dúfam, že tento typ jednoduchého návodu s postupom je efektívny.
Alebo prepadák jak hovado.
Upozornenie pre skúsených:


1. Nepíš mi, že premenné sa dali definovať do jedného riadka
2. Nepíš mi, že definícia formatu je nepresná
3. Nepíš mi, že som mohol použiť strcat

 

Informační návod - Návod označen jako platný

Ten to návod byl označen jako platný.Návod může být kdykoli označen jako nevhodný či neplatný

  • Líbí se mi to! (+1) 2
Link to comment
Share on other sites

jo, pro nováčky se hodí, je to přehledná, rozepsané :)

------------------------------------------------------------------

UF, prvý náraz som prežil, uvidím ďalšie kolá crashtastu :d.

Hej, mne sa to tiež páči, ako v škole, nie ako na nete...

Je to skrátka iné..

Len ma štve že do spoilera sa nedá dať farebný kód, lebo s farebným kódom v spojleri by to bolo TOP.

Link to comment
Share on other sites

format(vysledokspojenia,sizeof(vysledokspojenia),"SKRATKA1 SKRATKA2",zdrojprvejskratky,zdrojdruhejskratky,...);

1. Toto je absolútne nevalidné, miesto sizeof(vysledokspojenia) použi sizeof(vysledokspojenia) - 1

    To - 1 tam musí byť pretože posledná bunka v poli je '/0' ;)

 

2. ,zdrojprvejskratky,zdrojdruhejskratky,... tam nemá čo hladať pokiaľ nemáš v 3. arg. %d,%s,%i,%f,...

Link to comment
Share on other sites

- Meno hráča môže obsahovať aj viac znakov ako 14 (neviem s kade si nabral číslo 14).

- V časti "2. Správa "Vitaj na serveri, menohráča." ti chýba GetPlayerName a v časti "Vynadanie hráčovi pomocou príkazu" už zase je.

- Nemyslím si že by tento návod bol nejak super prehľadný.

Link to comment
Share on other sites

1. Toto je absolútne nevalidné, miesto sizeof(vysledokspojenia) použi sizeof(vysledokspojenia) - 1

    To - 1 tam musí byť pretože posledná bunka v poli je '/0' ;)

----------------------------------------------------------------------------------------

Doprdele, na toho bastarda som zabudol hneď to tam pridám :d.

EDIT: Nepridám, zdá sa mi že MAXPLAYERNAME neobsahuje ukončovací charakter, to mu pridáva SAMP automaticky - muselo by byť MAX_PLAYER_NAME+1.

*Ak sa mýlim, oprav ma.

 

 

2. ,zdrojprvejskratky,zdrojdruhejskratky,... tam nemá čo hladať pokiaľ nemáš v 3. arg. %d,%s,%i,%f,...

-----------------------------------------------------------------------------------------------------------------------------

Format použijem len tam, kde mám v argumente tie ukazovatele adresy. Zbytočné hovoriť o tom, že to tam nemá čo hladať...

 

 

- V časti "2. Správa "Vitaj na serveri, menohráča." ti chýba GetPlayerName a v časti "Vynadanie hráčovi pomocou príkazu" už zase je.

---------------------------------------------------------------------------------------------------------------------------------------------------------------------

Mal si mi napísať SZ, ako je to na spodu skriptu, keďže to nebolo testované, očakával som chyby ;) Dík.

 

 

- Nemyslím si že by tento návod bol nejak super prehľadný.

-----------------------------------------------------------------------------

Neobsahuje cudzie programovacie termíny, ktoré by nováčik nemusel poznať => ja si myslím, že je prehľadný.

 

 

- Meno hráča môže obsahovať aj viac znakov ako 14.

-----------------------------------------------------------------------

No jasné, to mi ušlo, od 0.3d či kedy je 20.

 

Dík za komenty, upravené.cvičenie robí majstra

Link to comment
Share on other sites

----------------------------------------------------------------------------------------

EDIT: Nepridám, zdá sa mi že MAXPLAYERNAME neobsahuje ukončovací charakter, to mu pridáva SAMP automaticky - muselo by byť MAX_PLAYER_NAME+1.

*Ak sa mýlim, oprav ma.

 

 

Áno, mýliš sa. Každé pole musí mať ukončovaciu bunku bez ohľadu na jeho obsah. SAMP nezasahuje po kompilácii niak do kódu. Preto tam MUSÍ byť - 1. Funkcia sizeof() vracia veľkosť pola aj s ukončovacou bunkou.

 

Doporučujem toto:

#define charsmax(%1) (sizeof(%1) - 1)

a potom už len jednoducho:

format(array,charsmax(array),"...")
Link to comment
Share on other sites

  • Hlavní moderátor

 

Je to funkcia, ktorá spojí viac rozličných textov.

to tedy je nepřesná definice, a ano, upozorním tě na to, k čemu to nováčkům bude, když se to už teď špatně naučí... format nespojuje texty, nýbrž nahrazuje zástupné značky (specifikátory) hodnotami proměnných a výsledný řetězec ukládá do nové proměnné

 

potom by možná stálo za to uvést, že proměnné musí být uvedeny ve stejném pořadí jako je pořadí zástupných značek (i taková chyba se v nějakém helpu objevila), ale to už je maličkost :)

Link to comment
Share on other sites

String a text je to isté.
String doslova znamená reťazec, reťazec znakov (písmen).
Nechcel som však použiť cudzie slová v návode pre začiatočníkov.

Link to comment
Share on other sites

Když jsem přečetl: „Je to funkcia, ktorá spojí viac rozličných textov.”, tak jsem se musel znovu podívat na název topicu, jestli opravdu děláš tutoriál na metodu format a ne na slučování stringů. Já bych to tedy definoval jako: Nahradí formátovací položky v zadaném řetězci obsahem zadaného objektu. Dál jsem to nečetl a jen projel očima a nevšiml jsem si, že bys někde psal parametry téhle metody, co tu popisuješ.

 

 

format(vysledokspojenia,sizeof(vysledokspojenia),"SKRATKA1 SKRATKA2",zdrojprvejskratky,zdrojdruhejskratky,...);

Tenhle řádek mě hned praštil do očí. To nebude fungovat, protože ti tam chybí formátovací položky(string, double, float, char, integer, etc.)

A ten poslední parametr(ty tečky) berou často začátečníci jako součást kódu, takže to bych z toho taky vyjmul.

 

Dále jsem si všiml, že jsi tam implementoval zcmd, ale tohle není tutoriál na zcmd a začátečníka to může zmást.

 

format(VyslednaSprava,sizeof(VyslednaSprava),"Administrátor rozhodol, že %s je deb*l!",MenoHraca);

Používat v tutoriálu vulgarismy je též zajímavé. No, když vezmu v potaz, že tohle je fórum plné dětí, tak nějaký ten vulgarismus navíc neuškodí. Oni už to stejně moc dobře znají, ale nevím co by si o tobě pomyslel nějaký vyspělejší nováček, který by sem jen tak náhodou zabloudil.

 

A taky jak koukám. tak není úplně vše popsáno a to co je, tak ale velmi "lajcky".

 

Je hezké, že je v tvém zájmu rozvinout zkušenosti a schopnosti začátečníků, ale nejdřív by jsi se měl sám to pořádně naučit a vysvětlit. Nezapomínej, že když tomu co jsi napsal rozumíš ty, tak tomu nemusí rozumět někdo jiný. Daný tutoriál potom značně ztrácí na kvalitě.

 

Btw omlouvám se případně za úplně nepřesnou "terminologii". Jsem vysazený na C#.

Link to comment
Share on other sites

1021.gif
Nepoužívaj takéto gify keď nevieš kedy.
Ináč to dopadne katastrofálne. (viď tvoj príspevok)
facepalm_moments_that_the_web_has_to_off
pwned .


Doom-
Omluva přijata - každý jazyk používa rovnakú terminológiu, ale povedzme, že to nevadí.
Nadávka v návode je preto, že tak to nováčik má rád. Preto žiaci v škole nadávajú. Kým nebude profík, bude sa mu páčiť toto, nie komplexnosť skriptu.
Práve robím návod na ZCMD, nech je začiatočník akokolvek začiatočný, toto by pochopil a ak nie, môže sa spýtať ;).
Áno je to popsáno laicky - moje návody sú špecifické JEDNODUCHOSŤOU, kde sa napríklad aj skúsený ako WILSZON35 naučí čo je to string (len príklad :d ).
A či je to spájanie stringov? Úplne hore to bolo napísané asi týždeň, kým som to nezmazal... BOLO TAM NEKOMENTOVAŤ AK POZNÁTE STRCAT. Keďže však som myslel, že každý to už videl, alebo mu dojde, že začiatočník nepotrebuje presnú terminológiu, lebo si ju nezapamätá, tak som to odtial zmazal.
---
Ďakujem za koment, ale čítanie s porozumením by okomentovalo automaticky tie tvoje komenty.

Link to comment
Share on other sites

1021.gif

Nepoužívaj takéto gify keď nevieš kedy.

Ináč to dopadne katastrofálne. (viď tvoj príspevok)

facepalm_moments_that_the_web_has_to_off

pwned .

Doom-

Omluva přijata - každý jazyk používa rovnakú terminológiu, ale povedzme, že to nevadí.

Nadávka v návode je preto, že tak to nováčik má rád. Preto žiaci v škole nadávajú. Kým nebude profík, bude sa mu páčiť toto, nie komplexnosť skriptu.

Práve robím návod na ZCMD, nech je začiatočník akokolvek začiatočný, toto by pochopil a ak nie, môže sa spýtať ;).

Áno je to popsáno laicky - moje návody sú špecifické JEDNODUCHOSŤOU, kde sa napríklad aj skúsený ako WILSZON35 naučí čo je to string (len príklad :d ).

A či je to spájanie stringov? Úplne hore to bolo napísané asi týždeň, kým som to nezmazal... BOLO TAM NEKOMENTOVAŤ AK POZNÁTE STRCAT. Keďže však som myslel, že každý to už videl, alebo mu dojde, že začiatočník nepotrebuje presnú terminológiu, lebo si ju nezapamätá, tak som to odtial zmazal.

---

Ďakujem za koment, ale čítanie s porozumením by okomentovalo automaticky tie tvoje komenty.

řeknu ti to takle pawno umím ale když mám neco vysvetlil tak jsem v prdeli todle byl jen můj názor :d

Link to comment
Share on other sites

Jasne, veď to bol len vtip s tými gifmi :) :).

A Doom, zabudol som - mám tam aj tie argumenty napísané, keby si to čítal poriadne..

Doom, neber to ako ukážku a ani ostatní:
Nesnažte sa prosím machrovať, ak ste si neprečítali celý návod, aj s časťou, že je pre začiatočníkov a preto nepoužíva terminológiu.
Obzvlášť, keď ani neviete čo píšete.

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