Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Formatowanie tekstu


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
7 odpowiedzi w tym temacie

#1 d0naciak

    Godlike

  • Power User

Reputacja: 1 029
Hero

  • Postów:2 414
  • GG:
  • Steam:steam
  • Imię:Dawid
  • Lokalizacja:Kotlarka
Offline

Napisano 04.01.2013 22:34

*
Popularny

Poradnik dla nieco zielonych, a konkretnie jest o tym jak formatować tekst.
Co mam na myśli ? Chociażby wlepianie do tekstu nicku danego gracza, fragów, zgonów i tak dalej...
Przejdźmy do rzeczy, jedną z najbardziej znanych funkcji do formatowania tekstu, jest funkcja formatex(output[] ,len ,const format[] , any:...)
Musimy wypełnić w niej jednak następujące parametry
output[] - tablica, do której trafi nasz sformatowany już tekst
len - wielkość tablicy
const format[] - tekst, który będziemy przygotowywać do formatowania
any:... - tutaj dodamy, to, co zechcemy wrzucić do tekstu :)
Formatowanie nie jest aż tak skomplikowane, lecz istnieje coś takiego jak znaki (o których wcześniej wspomniałem) formatujące
Dołączona grafika
Źródło: http://amxx.pl/dokum...a/f1366/format.
Przed każdy znak należy dodać %. Wydaje mi się że najlepiej wytłumaczyć będzie to na przykładzie
if(id == 1)
{
	new tekst[101];
	formatex(tekst, 100, "Twoj index jest rowny %d", id);
	//tekst - "Twoj index jest rowny 1"
}
Jak widać dodałem do tekstu %d, użyłem znaku d, gdzie odpowiada on za liczbe dziesiętną ze znakiem.
Oczywiście to tylko przykład, istnieje naprawdę dużoooo 'rzeczy' (naprawdę bardzo dużo), które możemy wrzucić do tekstu.
A tera trochę więcej, chcemy dodać do tekstu liczbę wymierną, lecz jest ona liczbą która nie ma końca (zapomniałem jak na takie liczby się mówi :/).
Czyli, np. 100/3 = 33.333...
Możemy ograniczyć dodawanie tych liczb (po przecinku w tym przypadku), poprzez zamiast dodanie znaku
%f
na
%.2f
Wtedy wyświetli nam się w danym miejscu 33.33
Podobnie można działać na znaku d czyli na liczbach rzeczywistych
	new tekst[101];
	formatex(tekst, 100, "Twoj index jest rowny %02d", id);
	//tekst = "Twoj index jest rowny 01"
Warto powiedzieć że w np. ColorChat mamy że tak się wyrażę wbudowane formatowanie tekstu
Pokaże na przykładzie wyświetlania nicku na chacie, kiedy ten wchodzi na serwer :)
public client_putinserver(id)
{
	new nick[64];
	get_user_name(id, nick, 63);
	ColorChat(0, GREEN, "Na serwer wchodzi^x03 %s", nick);
}
Oczywiście formatex nie jest takie doskonałe (jest szybsze od innej funkcji, http://amxx.pl/dokum...ja/f1366/format), a mianowicie, istnieje funkcja format w której można zrobić coś takiego:
new tekst[101] = "de_dust2";
format(tekst, 100, "maps/%s.bsp", tekst);
Chodzi mi tutaj o to, że tekst jako tablica do której wysyłamy sformatowany ciąg znaków, w format możemy użyć jeszcze jako jeden z parametrów do sformatowania, w formatex natomiast nie można już tak postępować.
Tak w sumie to są szanse że to zadziała, ale tylko wtedy, kiedy parametr który jest tablicą wynikową, jest na początku (Poprawka sebula ;))
Myślę że dość zrozumiałe, poradnik na tym się kończy :)

Użytkownik d0n tHe Pr0oo edytował ten post 03.02.2013 11:15

  • +
  • -
  • 6

#2 Fili:P

    Godlike

  • Power User

Reputacja: 754
Guru

  • Postów:1 679
  • Imię:Darek
  • Lokalizacja:Warszawa
Offline

Napisano 05.01.2013 09:04

Czyli, np. 100/3 = 33.333...
Możemy ograniczyć dodawanie tych liczb (po przecinku w tym przypadku), poprzez zamiast dodanie znaku
%f
na
%.2f
Wtedy wyswietli nam się w danym miejscu 33.33

Coś dla mnie nowego :D
Plus
  • +
  • -
  • 0

#3 speedkill

    Godlike

  • Przyjaciel

Reputacja: 1 592
Godlike

  • Postów:2 733
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Prudnik
Offline

Napisano 05.01.2013 09:52

Mogłeś napisać jakie są różnicę pomiędzy format, a formatex ;)
  • +
  • -
  • 0

If you can dream it, you can do it.


#4 d0naciak

    Godlike

  • Autor tematu
  • Power User

Reputacja: 1 029
Hero

  • Postów:2 414
  • GG:
  • Steam:steam
  • Imię:Dawid
  • Lokalizacja:Kotlarka
Offline

Napisano 05.01.2013 10:32

@up Dodano ;]
  • +
  • -
  • 0

#5 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 05.01.2013 12:06

new tekst[101] = "de_dust2";
formatex(tekst, 100, "%s mapka", tekst);

Wyświetli się poprawnie, czyli "de_dust2 mapka".
  • +
  • -
  • 0

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#6 Cypis'

    Master

  • Przyjaciel

Reputacja: 1 162
Super Hero

  • Postów:965
  • GG:
  • Steam:steam
  • Lokalizacja:polska
Offline

Napisano 05.01.2013 12:14

@up
nie wyświetli się tak
sprawdz sobie

@down
mój bład jak by było na odwrót najpierw napis później %s to wtedy nie wyświetli się o_O
Spoiler

sebul (05.01.2013 12:27):
Nie pisałbym tego, gdybym nie był pewien ;>
sebul (05.01.2013 14:25):
No tak, w odwrotnej kolejności nie wyświetli się dobrze.

Użytkownik Cypis' edytował ten post 05.01.2013 12:42

  • +
  • -
  • 0

#7 speedkill

    Godlike

  • Przyjaciel

Reputacja: 1 592
Godlike

  • Postów:2 733
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Prudnik
Offline

Napisano 05.01.2013 12:19

Wyświetli się.

Dołączona grafika

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "speedkill"

public plugin_init(){
	register_plugin(PLUGIN, VERSION, AUTHOR);
	register_clcmd("say /test", "test");
}
public test(id){
	new tekst[101] = "de_dust2";
	formatex(tekst, 100, "%s mapka", tekst);
	
	client_print(id, 3, "%s", tekst);
}

  • +
  • -
  • 3

If you can dream it, you can do it.


#8 d0naciak

    Godlike

  • Autor tematu
  • Power User

Reputacja: 1 029
Hero

  • Postów:2 414
  • GG:
  • Steam:steam
  • Imię:Dawid
  • Lokalizacja:Kotlarka
Offline

Napisano 05.01.2013 14:20

Cytat z dokumentacji

Szybsza wersja funkcji format, lecz nie zadziała gdy tablica wynikowa jest użyta również jako jeden z parametrów.

W takim razie, jeżeli tak jednak można robić, to jakie różnice speedkill miałeś na myśli ? To że jest szybsze ?
@edit ah już zrozumiałem, poprawione ;]

Użytkownik d0n tHe Pr0oo edytował ten post 05.01.2013 14:25

  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 1

0 użytkowników, 1 gości, 0 anonimowych