Skocz do zawartości
Bartcislaw

Niedziałający separator

Rekomendowane odpowiedzi

Cześć, chciałem sobie spróbować napisać komendę /me. Działała prawidłowo przez jakiś czas póki nie wpadłem na coś innego. Konkretnie to nie działa tworzenie nowej linijki czyli przenoszenie znaków. Sam nie mogę dostrzec błędu, stąd też proszę Was o pomoc.

CMD:me(playerid, params[])
{
	new name[MAX_PLAYERS], string[128];
	GetPlayerName(playerid, name, sizeof(name)); 

	if(strlen(params) <= 64)
	{
		format(string, sizeof(string), "** (ID: %d) %s %s",playerid, name, params);
		SendClientMessage(playerid, KOLOR_ME, string);
		return 1;
	 }
	else
	{
		new string_me1[64], string_me2[64];  
		strmid(string_me1, params, 0, 63); strmid(string_me2, params, 64, 128);
		format(string, sizeof(string), "** (ID: %d) %s %s\n(...) %s", playerid, name, string_me1, string_me2);
		SendClientMessage(playerid, KOLOR_ME, string);
		return 1;
	 }
}

\n ---> nie zaczyna nowej linii 

Edytowane przez Frank

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
CMD:me(playerid, params[])
{
	new name[MAX_PLAYERS], string[128];
	GetPlayerName(playerid, name, sizeof(name));

	if(strlen(params) <= 64)
	{
		format(string, sizeof(string), "** (ID: %d) %s %s",playerid, name, params);
		SendClientMessage(playerid, -1, string);
		return 1;
	 }
	else
	{
		new string_me1[64], string_me2[64];
		strmid(string_me1, params, 0, 63); strmid(string_me2, params, 64, 128);
		format(string, sizeof(string), "** (ID: %d) %s %s (...)", playerid, name, string_me1, string_me2);
		SendClientMessage(playerid, KOLOR_ME, string);
		SendClientMessage(playerid, KOLOR_ME, string_me2);
		return 1;
	 }
}

Nie da się za pomocą \n oddzielić dwóch wiadomości. Trzeba wysyłać odnowa. 

Komenda działa - testowałem. Przenosi do nowej linii tak jak trzeba.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Czekaj, coś źle. Przetestowałem jeszcze raz komendę i jednak przenosić - przenosi, ale ucina jedną literkę/cyferkę w pierwszej wiadomości gdy te są dwie. Próbuje to naprawić, ale nie wiem czy mi to wyjdzie.  :ph34r:

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Mógłbyś mi powiedzieć czy ten kod wygląda całkiem w porządku 

Nie mam zastrzeżeń. :D

W późniejszym czasie, nie pobieraj w każdej komendzie nicku gracza, tylko stwórz jakąś funkcję. 

 

 

i ewentualnie czy można podejść do tego z lepszym pomysłem?

Ja lepszego rozwiązania nie widzę, choć osoby bardziej znające pawn pewnie coś wymyślą. ;)

 

Już ogarnąłem dlaczego ucinało tą literkę/cyferkę w pierwszej wiadomości. xD

Edytowane przez Nortal

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

W jednej linijce chatu mogą być maksymalnie 144 znaki.

CMD: me(playerid, params[])
{
  new pname[MAX_PLAYER_NAME];
  GetPlayerName(playerid, pname, sizeof(pname)); 

  new msg[216]; // (144 / 2) + 144 = 216
  format(msg, sizeof(msg), "** (ID: %d) %s %s", playerid,pname,params);

  if (msg[72] != 0) // 144 / 2 = 72
  {
    new str[144];
    strins(str, msg, 72, 215);
    msg[72]= 0; strcat(msg, " (...)");
    strcat(str, "(...) ");

    SendClientMessage(playerid, KOLOR_ME, msg);
    SendClientMessage(playerid, KOLOR_ME, str);
  }
  else
  {
    msg[144]= 0; // null-terminator
    SendClientMessage(playerid, KOLOR_ME, msg);
  }

  return 1;
}

Taka moja propozycja :D

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

×