Skocz do zawartości
Nergosu

Zbyt długie SendClientMessageToAll, nie wyświetla się

Rekomendowane odpowiedzi

Eloszka, znowu ja.

Otóż bawiłem się formatowaniem SCMTA*

I wyszło, że trochę znaków mi kolorki pozjadały, więc zrobiłem str[256] zamiast [128], gdzie wyświetlało mi nie całą wiadomość.

Gdy rozszerzyłem tablicę, to wiadomości nie wyświetlają się na chacie, co zrobić?

Zrobić jakieś łamanie wierszy? A może są na to jakieś inne tricki?

Przykładowy kod:

new str[256];
format(str, sizeof(str),"Admin {DC143C}%s{FFFFFF}(ID:{DC143C}%d{FFFFFF}) uciszył gracza {DC143C}%s{FFFFFF}(ID:{DC143C}%d{FFFFFF}) na {DC143C}%d{FFFFFF} minut za: {DC143C}%s{FFFFFF}.",GetName(playerid), playerid, GetName(id), id, mins, reason);
SendClientMessageToAll(-1, str);

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Maksymalna długość tekstu na czacie to 144 znaki.

Cytuj
Image:32px-Circle-style-warning.png

Important
Notes

  • If a message is longer than 144 characters, it will not be sent. Truncation can be used to prevent this. Displaying a message on multiple lines will also solve this issue.
  • Avoid using format specifiers in your messages without formatting the string that is sent. It will result in crashes otherwise.

Możesz rozdzielić na 2 linie :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
26 minut temu, Nergosu napisał:

Czyli wystarczy zwykłe \n ? w formacie?

Hah, nie, raczej nie wystarczy :P Nie zadziała. Polecam: strcat + strmid + strins ;)

 

12 minut temu, Nergosu napisał:

Możesz przerobić mi powyższy ciąg?

Na 2 linie starczy, żeby w pierwszej było Admin uciszył, gracza, a w drugiej na ile i za co.

Nie chce mi się :D

Edytowane przez PrzMas

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

http://pastebin.com/n21QZdbN

  1. stock msg_SendClientMessageEx(playerid, color, text[])
  2. {
  3.         //printf("elo %s", text);
  4.         if(strlen(text) > 144)
  5.         {
  6.                 new msg_string3[145];
  7.                
  8.                 strmid(msg_string3, text, 0, 140);
  9.                 strins(msg_string3, "...", 0);
  10.                
  11.                 strdel(text, 0, 140);          
  12.                 SendClientMessage(playerid, color, msg_string3);
  13.                
  14.                 return SendClientMessage(playerid, color, text);
  15.         }
  16.         else
  17.         return SendClientMessage(playerid, color, text);
  18. }

 

stare ale dziala moge ci dac nowsza wersje ktora zmienia wiele lini ale w cpp i bys musial sobie na pawn przerobic. 

Edytowane przez Beata_Szydlo_2015

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
3 godziny temu, Beata_Szydlo_2015 napisał:

http://pastebin.com/n21QZdbN

  1. stock msg_SendClientMessageEx(playerid, color, text[])
  2. {
  3.         //printf("elo %s", text);
  4.         if(strlen(text) > 144)
  5.         {
  6.                 new msg_string3[145];
  7.                
  8.                 strmid(msg_string3, text, 0, 140);
  9.                 strins(msg_string3, "...", 0);
  10.                
  11.                 strdel(text, 0, 140);          
  12.                 SendClientMessage(playerid, color, msg_string3);
  13.                
  14.                 return SendClientMessage(playerid, color, text);
  15.         }
  16.         else
  17.         return SendClientMessage(playerid, color, text);
  18. }

 

stare ale dziala moge ci dac nowsza wersje ktora zmienia wiele lini ale w cpp i bys musial sobie na pawn przerobic. 

Jeśli w nowej wersji przenosi całe wyrazy (w sensie wykrywa spacje), to poproszę :)

Póki co dobry automat.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

 

bool SendClientMessageEx(int playerid, int color, std::string fmsg)
{
	int length = fmsg.length() + 1;

	while (length--) if (fmsg[length] == '%') fmsg.replace(length, length + 1, "*#");

	length = fmsg.length();
	if (length > 130)
	{
		length = fmsg.find_last_of(" ", 130);

		if (length < 100) length = 110;

		std::string str2 = fmsg.substr(0, length);
		fmsg.replace(0, length + 1, "");//aka strdel wtf?

		length = str2.find_last_of("{", 125);

		if (length > 0 && str2[length + 7] == '}')
			fmsg.insert(0, str2.substr(length, 8));

		SendClientMessage(playerid, color, (char *)str2.c_str());

		if (fmsg.length() > 130) return SendClientMessageEx(playerid, color, fmsg);
		else return SendClientMessage(playerid, color, (char *)fmsg.c_str());
	}

	return SendClientMessage(playerid, color, (char *)fmsg.c_str());
}

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×