Jump to content
  • 0

pomoc Dva řádky textu.


ActiV3Drifter

Dotaz

Pěkný večer přeji :) , mám takovou prozbu a ihned na začátku říkám že jsem projížděl google a našel jsem pár rad jak to udělat ale nefungovalo to!

 

Potřeboval bych převéct text z jednoho řádku na dva řádky... Jde o to že já tam mám svůj vlastní formát ale ten píše až na konec obrazovky a nebo se vůbec neukáže.... Takže bych to potřeboval upravit tak aby to šlo na 2 řádky...

 

 

format(stringtext, 256, "{DEB887}%s %s{%06x} %s{FFFFFF} [iD: %d]: %s", GetTitle(playerid), GetVIP(playerid), GetPlayerColor(playerid) >>> 8, PlayerName(playerid), playerid, text);

SendClientMessageToAll(GetPlayerColor(playerid),stringtext);

 

 

Doufám že si někdo udělá čas a vysvětlí mi jak to mám udělat a nejlépe rovnou udělal :d

Děkuji moc :)

Link to comment
Share on other sites

16 odpovědí na tuto otázku

Recommended Posts

  • 0

YJlr4.png

 

Když člověk píše i s mezerami tak to jde až za obrazovku.... a já to právě potřebuji někde v půlce jakby stříhnout a aby to psalo na druhém řádku, je to často na RP serverech....

Link to comment
Share on other sites

  • 0
#define DELKA_RADKU 145


new str[DELKA_RADKU];
format(str, sizeof(str), "{DEB887}%s %s{%06x} %s{FFFFFF} [ID: %d]: %s", GetTitle(playerid), GetVIP(playerid), GetPlayerColor(playerid) >>> 8, PlayerName(playerid), playerid, text); 
SendClientMessage(playerid, -1, str);
if(strlen(text) + blabla > DELKA_RADKU - 1) SendClientMessage(playerid, -1, text[DELKA_RADKU - 1 - blabla]);

Za blabla si dosaď délku tohoto: 

{DEB887}%s %s{%06x} %s{FFFFFF} [ID: %d]: 

Počítej ale se dosazenýma stringama, takže nějaké VIP, Admin atd

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

  • 0

Tak to asi nějak nefunguje :d

8kcAw.png

 

Zkusím to nějak opravit ale za rady jak bych byl moc rád :d

 

EDIT:: Tak nic už se s tím trápím 3 hodiny a stále bez uspěchu... mohl by mi někdo pomoct?
 

Edited by ActiV3Drifter
Link to comment
Share on other sites

  • 0

Špatně jsi počítal no, já to mám dobře

 

Jen ještě uprav toto

SendClientMessage(playerid, -1, text[DELKA_RADKU - 1 - blabla]);

Musíš vzít délku tohoto po zformátování

"{DEB887}%s %s{%06x} %s{FFFFFF} [ID: %d]: 

a dosadit to za blabla

Link to comment
Share on other sites

  • 0

Však to počítej pro každého hráče :d

 

// EDIT:

SCM odesílá pouze 144 znaků dlouhé zprávy, což je normální délka. To, že ty máš takhle dlouhou zprávu přes celý monitor je tvůj problém s rozlišením..

Edited by Lukasz
Link to comment
Share on other sites

  • 0

http://jpeg.cz/images/2015/08/26/ercMW.png

Tak a ted mi to píše zase na jeden řádek,,,

Ale spočítal jsem všechny stringy jméno titul a i id to vychází 47 ale pořád to blbne

 

new str[DELKA_RADKU];

format(str, sizeof(str), "{DEB887}%s{%06x} %s{FFFFFF} [iD: %d]: %s", GetTitle(playerid), GetPlayerColor(playerid) >>> 8, PlayerName(playerid), playerid, text);
SendClientMessageToAll(GetPlayerColor(playerid), str);

if(strlen(text) + 47 > DELKA_RADKU - 1) SendClientMessage(playerid, -1, text[DELKA_RADKU - 47]);

 

 

Dal jsem pryč to ukazování VIP abych to trochu zkrátil.

a jinak tady je seznam jak jsou dlouhý stringy:

GetTitle 15

PlayerName 24

playerid 8

Link to comment
Share on other sites

  • 0
  • Hlavní moderátor

a jinak tady je seznam jak jsou dlouhý stringy:

GetTitle 15

PlayerName 24

playerid 8

Chceš mi tvrdit, že playerid, jehož hodnotu nebude mít žádný tvůj hráč vyšší jak 499 (3 znaky), zabírá 8 znaků? :o

Link to comment
Share on other sites

  • 0

Chceš mi tvrdit, že playerid, jehož hodnotu nebude mít žádný tvůj hráč vyšší jak 499 (3 znaky), zabírá 8 znaků? :o

nekecej do toho on má upravenej samp kde může mít přes milion hráču... :)

Link to comment
Share on other sites

  • 0

Sorry že se do toho pouštím ale jakej FS máš na ten titul ?

To není žádný FS :d mám tam stock na GetTitle který zjišťuje zda je hráč admin a pokud jo tak podle lvl se mu dá prefix před jménem.

Chceš mi tvrdit, že playerid, jehož hodnotu nebude mít žádný tvůj hráč vyšší jak 499 (3 znaky), zabírá 8 znaků? :o

Omlouvám se blbě jsem to napsal... počítám ten celý text  [iD: %d]: což je 8 znaků ....

Link to comment
Share on other sites

  • 0
  • Hlavní moderátor

Omlouvám se blbě jsem to napsal... počítám ten celý text  [iD: %d]: což je 8 znaků ....

Pak tam máš málo, protože ID může být 0 až 499.

Link to comment
Share on other sites

  • 0

Tak znova, SCM ti pošle 144 znaků dlouhý text. To, že máš text přes celý monitor je tvůj problém s rozlišením.

To co jsem ti sem dal já, ti rozdělí řádek (klidně v půlce slova) a napíše to na další řádek.

 

"[iD: 0]: " je 9 znaků

"[iD: 10]: " je 10 znaků

"[iD: 100]: " je 11 znaků

 

S tím musíš počítat, protože se začáteční znak dalšího řádku odvíjí od délky stringu, ke kterému přidáváš hráčem psaný text. Tzn. že hráčovo jméno nepočítáš rovnou jako 24 ale opravdu jako délku jeho jména.

Link to comment
Share on other sites

  • 0

Tak znova, SCM ti pošle 144 znaků dlouhý text. To, že máš text přes celý monitor je tvůj problém s rozlišením.

To co jsem ti sem dal já, ti rozdělí řádek (klidně v půlce slova) a napíše to na další řádek.

 

"[iD: 0]: " je 9 znaků

"[iD: 10]: " je 10 znaků

"[iD: 100]: " je 11 znaků

 

S tím musíš počítat, protože se začáteční znak dalšího řádku odvíjí od délky stringu, ke kterému přidáváš hráčem psaný text. Tzn. že hráčovo jméno nepočítáš rovnou jako 24 ale opravdu jako délku jeho jména.

 

Dobře, to první jsem pochopil ale to další ne.... Přeci každý hráč může mít jinou délku jména tak jak mám sakra nastavit aby se to nastavovalo automaticky ( nejspíše ten string)  pro každého hráče?

Edited by ActiV3Drifter
Link to comment
Share on other sites

  • 0

Ok. Vidím, že neznáš ani základní funkci strlen(..), takže dodělat si to je pro tebe asi nemožný. Takže tu máš asi jednodušší a lepší řešení ^^

#define DELKA_RADKU 144 // změn si na co chceš



new str[DELKA_RADKU * 2 + 1]; // pole pro dva řádky
format(str, sizeof(str), "...", .. , ..); // doplň si formátování
new c = str[DELKA_RADKU + 1];
str[DELKA_RADKU + 1] = '\0';
SendClientMessage(playerid, -1, str);
if(c) 
{
    str[DELKA_RADKU + 1] = c;
    SendClientMessage(playerid, -1, str[DELKA_RADKU + 1];
}
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...