Jump to content

Format [**]


Hip

Recommended Posts

  • Globální moderátor

Format

 

Obtížnost: award_star_gold_2.pngaward_star_gold_2.pngaward_star_silver_2.pngaward_star_silver_2.pngaward_star_silver_2.png

 

Ahoj nevšiml jsem si že by tu někde byl návod jak a kde využít funkci format. A protože nám v domě odmontovali elektroměr, tak sem z nudy napsal tenhle návod...

 

Obsah:

  • [*:3182an6c]Předmluva[*:3182an6c]Syntaxe a funkce[*:3182an6c]Vysvětlení[*:3182an6c]Použití + Příklady

 

 

 

Předmluva:

 

Funkce formát se používá k formátování textu. Příklad: Chcete aby se jméno odwarpovaného hráče zobrazilo v textu nebo vypsat proměnou. Formát má spoustu využití a to všude. Například dialogové menu kde je cokoliv co se musí od někud nahrát obsahuje funkci formát (třeba info dialog). Je dobré si předem rozmyslet. zde není jednodušší použít strcat než format. Ještě maličká připomínka - tyto uvozvky " se nikde nepíší, pouze ohraničují začátek a konec příkladu. A teď tedy pojďme k samotnému návodu...


Syntaxe a funkce:

 

format(output[], len, const format[], {Float,_}:...)

 

takže vše popořadě:

format - název funkce/příkazu (dále nebudu rozepisovat)

output - string se kterým budeme pracovat

len - maximální délka textu, kterou bude formát odesílat

const format[] - samotný text do kterého se pak bude vše vypisovat

{Float,_}:... - proměné které se budou v textu vypisovat


Vysvětlení:

 

output

do tohoto pole se dosadí proměná kterou si předem připravíme:

new string[128];

 

a dosadíme pouze "string"

 

len

u outputu jsem si dali new string[128]; 128 je hodnota stringu, tedy maximální délka znaků, která se dá do proměné zapsat.

Na místo len se dájí dát dva způsoby

1. číslo, neboli maximální velikost, kterou formát odešle (nezáleží na velikosti proměné, když se proměná naplní, tak se další text nevypíše)

2. napsáním sizeof(string) to znamená velikost a do závorek proměná. Velikost proměné je 128, takže se dosadí hodnota 128.

 

My si dosadíme "sizeof(string)"

 

Pozn.: Je na každém jestli bude psát číslo nebo sizeof(proměná)... Jde jen o zvyk :)

 

cons format[]

Toto je text který se bude vypisovat. Zapisuje se do něj stejné jako v SendClientMessage (nebudu vysvětlovat)

Proměnou vypíšeme pomocí integru:

 

%d - číslo/proměná

%f - desetinné číslo

%s - text

%% - vloží procento, pokud by jste tam dali pouze jedno procento bez ničeho, byla by tam mezera(nic)

 

Pozn.: Nejsou zde všechny, dal jsem sem jen ty základní.

 

My si uděláme svůj text:

"Moje Score: %d" Pozor: Zde je vyjímka - zde se píší uvozovky

 

{Float,_}:...

Zde se zapisují, jak už jsem zmínil, proměné či jiné příkazy, které se vypíší v textu

 

př.:

GetPlayerScore(playerid)

 

dosadíme "GetPlayerScore(playerid)"

 

1. Pozn.: Za každým dalším vypsaným příkazem se píše čárka ","

2. Pozn.: Pokud by jste chtěli změnit barvu tak HEX barvy do {...} --> {00FF00}

 

Nebudu to více vysvětlovat ale ukážu to na příkladu.


Použití + Příklady:

 

Jak by měl vypadat náš konečný výsledek:

new string[128];
format(string,sizeof(string),"Moje score: %d",GetPlayerScore(playerid));
//Použití takto:
SendClientMessage(playerid,0xFFFFFFFF,string);

Toto vypíše hráči zprávu:

Moje IP: 255:255:255:255 Můj Nick: Hip

 

2. Příklad:

new string[128];
new Float:x;Float:y;Float:z;
GetPlayerPos(playerid,x,y,z);
format(string,sizeof(string),"{FF0000}Moje pozice: {00FF00}X = %f Y = %f Z = %f",x,y,z);
SendClientMessage(playerid,0xFFFFFFFF,string);

 

3. Příklad:

stock

Link to comment
Share on other sites

  • Administrátor

Jen tak že ti do toho kecám jo tak tvůj příklad co máš dole nebude fungovat :p

jinak třeba by se hodila i tato definice

#define formatex(%0,%1,%2) format(%0,sizeof(%0),%1,%2)

Link to comment
Share on other sites

  • Globální moderátor
Téměř to samé, jen si to víc rozepsal format-t13134.html?hilit=Format avšak :potlesk:

promiň kdybych ho našel tak bych neosal ... :)

 

Jen tak že ti do toho kecám jo tak tvůj příklad co máš dole nebude fungovat :p

jinak třeba by se hodila i tato definice

#define formatex(%0,%1,%2) format(%0,sizeof(%0),%1,%2)

definice by se více méně hodila to jo :)

 

a řekni mi co nebude fungovat na tom příkladě? jediné co si nejsem jist je IP :d

Link to comment
Share on other sites

  • Administrátor

GetPlayerIP(playerid) ani GetPlayerName(playerid) nemá jen jeden argument a rozhodně není návratovou hodnotou string pokud se nemýlím tak obě vrací 1 pokud je zjištovaný připojen ..

 

 

EDIT tak ne GetplayerName vrací délku jména :) a GetPlayerIp 0 kdyz se nepodari a 1 když se podaří

Link to comment
Share on other sites

  • Globální moderátor
GetPlayerIP(playerid) ani GetPlayerName(playerid) nemá jen jeden argument a rozhodně není návratovou hodnotou string pokud se nemýlím tak obě vrací 1 pokud je zjištovaný připojen ..

 

 

EDIT tak ne GetplayerName vrací délku jména :) a GetPlayerIp 0 kdyz se nepodari a 1 když se podaří

 

aha už si to uvědomuju :d já si asi zaměnil PlayerName s GetlayerName sakra jdu to předělat

Link to comment
Share on other sites

  • Administrátor

No jo holt se stává no :d osobě nechápu proč to už dávno není změněné ... ale to je od tématu :d

 

 

Ještě bych doplnil že lze také pracovat se samotnými operátory když to tak řeknu ...

Například :

new H,M,S;
Gettime(H,M,S);
new string[80];
format(string,80,"%d:%d %d",H,M,S);

Tím pádem dejme tomu přes ně o půlnoci bude hodnota stringu 0:0 0 což je alespoň podle mě neestetické :d

takže je možné udělat to takto

format(string,80,"%02d:%02d %02d",H,M,S);

Nyní bude o půlnoci hodnota 00:00 00

stejným způůsobem jde omezovat počet desetiných míst u Floatu

%.2f výsledný float bude tedy jen na dvě místa :)

Link to comment
Share on other sites

  • Administrátor
A ještě napiš, co dělat, když se nechce vypsat zavináč.

Jinak fakt hezký tutoriál.

Se zavináčem snad problém není normálně bych ho vypsal přes %c jako znak nebo %s jako string .... se znaménkem procenta je problém to se ve formátu vypisuje pomocí %%

Link to comment
Share on other sites

A ještě napiš, co dělat, když se nechce vypsat zavináč.

Jinak fakt hezký tutoriál.

Se zavináčem snad problém není normálně bych ho vypsal přes %c jako znak nebo %s jako string .... se znaménkem procenta je problém to se ve formátu vypisuje pomocí %%

 

Já nevím, jelikož, já jsme měl svůj MySQL systém, a formátoval jsem si email z DB do logu. A zavináč to neformátovalo ani pře %c ani %s. Nešlo to ani v dialogu, ani se chat message.

Link to comment
Share on other sites

  • 4 weeks later...

Dobrý TuT ale...

 

 

new string[128];

format(string,sizeof(string),"Moje score: %d",GetPlayerScore(playerid));

//Použití takto:

SendClientMessage(playerid,0xFFFFFFFF,string);[/code]

Toto vypíše hráči zprávu:

Moje IP: 255:255:255:255 Můj Nick: Hip

 

 

"Moje score: %s" a prý že mu to vypíše Moje IP: 255:... Můj Nick: Hip? WTF?

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