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

Wyświetlanie znaku %


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

#1 csMaster

    Wszechwiedzący

  • Power User

Reputacja: 14
Początkujący

  • Postów:542
  • Lokalizacja:localhost
Offline

Napisano 09.07.2018 15:04

Zablokowałem message SayText i dodałem na serwer swój chat, żeby wyświetlać na nim nowe kolory. Ogólnie wszystko działa dobrze, ale jeśli chce wpisać na nim znaki "%s, %%%s, %%%%%s, ..." to zamiast tych znaków, wyświetla mi mój nick. Tak sie dzieje tylko przy wpisywaniu 's' po znakach %.

 

Próbowałem użyć replace_all:

replace_all(szText, charsmax(szText), "%", "%%");
replace_all(szText, charsmax(szText), "%s", "%%s");

ale w pierwszym przypadku na chacie przy wpisaniu samego znaku '%' wyświetlały się dwa, a w drugim, jeśli wpisze więcej znaków % na say, też zamiast nich wyświetlało się co innego.

 

Czy moge jakoś to poprawić, żeby po wpisaniu %%, %s, %%s, itd... wyświetlały się tylko te znaki ?

	remove_quotes(szText); // szText - wiadomość wysylana przez gracza
	trim(szText);
	
	if(!strlen(szText))
		return;

//...

	format(szMsg, charsmax(szMsg), "%s &x03%s :  %x01%s", szPrefix, szName, szText);
	CC_SendMessage(0, szMsg);

  • +
  • -
  • 0

#2 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 09.07.2018 16:24

Wg mnie dzieje sie tak bo w format() pojawia się dodatkowy tag %s i to się coś marszczy z tym wszystkim.


  • +
  • -
  • 0

#3 csMaster

    Wszechwiedzący

  • Autor tematu
  • Power User

Reputacja: 14
Początkujący

  • Postów:542
  • Lokalizacja:localhost
Offline

Napisano 09.07.2018 16:40

Też tak myśle, ale co zrobić żeby tak nie było :/


  • +
  • -
  • 0

#4 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 985
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 09.07.2018 17:11

użyj 

replace_all(szText, charsmax(szText), "%", "%%");

 

a po format przywróć podwójne %% do %

 

replace_all(szText, charsmax(szText), "%%", "%");

 

szybka myśl :P


  • +
  • -
  • 0

#5 csMaster

    Wszechwiedzący

  • Autor tematu
  • Power User

Reputacja: 14
Początkujący

  • Postów:542
  • Lokalizacja:localhost
Offline

Napisano 10.07.2018 12:02

użyj 

replace_all(szText, charsmax(szText), "%", "%%");

 

a po format przywróć podwójne %% do %

 

replace_all(szText, charsmax(szText), "%%", "%");

 

szybka myśl :P

 

Po format jak już to jedynie moge użyć replace_all z tablicą szMsg.

Ale mimo to teraz jeśli wpisze 2, 4, 6, ... razy znak '%' wyświetla się tylko 1, 3, 5, ... takich znaków.

A jeśli wpisze '%s' na tym chacie, to nie wysyła żadnej wiadomości a w logach jest error:

L 07/10/2018 - 13:00:14: String formatted incorrectly - parameter 3 (total 2)

  • +
  • -
  • 0

#6 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 985
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 10.07.2018 12:18

Pomiń w format szText całkowicie i dodaj ją poprzez add już do zformatowanego stringa
  • +
  • -
  • 0

#7 csMaster

    Wszechwiedzący

  • Autor tematu
  • Power User

Reputacja: 14
Początkujący

  • Postów:542
  • Lokalizacja:localhost
Offline

Napisano 10.07.2018 12:41

Ten sam efekt co wcześniej.

Może czegoś nie zrozumiałem ?

replace_all(szText, charsmax(szText), "%", "%%");

//...

format(szMsg, charsmax(szMsg), "%s &x03%s :  %x01", szPrefix, szName);
replace_all(szText, charsmax(szText), "%%", "%");
add(szMsg, charsmax(szMsg), szText, charsmax(szText));

CC_SendMessage(0, szMsg);

Dodam, że sam natyw CC_SendMessage może formatować wiadomość.

stock CC_SendMessage(const id, const szInput[], any:...)

  • +
  • -
  • 0

#8 Robiin

    Godlike

  • Support Team

Reputacja: 1 107
Super Hero

  • Postów:2 051
  • Imię:Robert
  • Lokalizacja:Wrocław
Offline

Napisano 10.07.2018 15:58

Dobrze widzę?

format(szMsg, charsmax(szMsg), "%s &x03%s :  %x01", szPrefix, szName);

Pierwsze %s do szPrefix, drugie szName, a po dwukropku to co to za %?


  • +
  • -
  • 0

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.


#9 csMaster

    Wszechwiedzący

  • Autor tematu
  • Power User

Reputacja: 14
Początkujący

  • Postów:542
  • Lokalizacja:localhost
Offline

Napisano 10.07.2018 17:00

Widzisz taki błąd w przepisywaniu ,d

        format(szMsg, charsmax(szMsg), "%s &x03%s :  &x01", szPrefix, szName);
	add(szMsg, charsmax(szMsg), szText, charsmax(szText));
	
	replace_all(szMsg, charsmax(szMsg), "%", "%%");
	
	CC_SendMessage(0, szMsg);
}

Tak aktualnie wygląda końcówka kodu.

Kilka znaków '%' teraz moge wpisać, ale przy '%s' dalej mi wpisuje mój nick :/ Jeśli bym troche pospamił tymi '%' i 's' to mi jakieś chińskie litery wyjdą >.<


  • +
  • -
  • 0

#10 Robiin

    Godlike

  • Support Team

Reputacja: 1 107
Super Hero

  • Postów:2 051
  • Imię:Robert
  • Lokalizacja:Wrocław
Offline

Napisano 10.07.2018 17:33

Jak wyglda CC_SendMessage?


  • +
  • -
  • 0

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.


#11 csMaster

    Wszechwiedzący

  • Autor tematu
  • Power User

Reputacja: 14
Początkujący

  • Postów:542
  • Lokalizacja:localhost
Offline

Napisano 10.07.2018 17:40

Spoiler

 

Chyba o to ci chodziło ?


  • +
  • -
  • 0




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

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