Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // -------------------------------------------------------------------------------------*-
- stock SendClientMessageBreaks( chars, playerid, color, const message[ ] )
- {
- new
- result [ 145 ], // Максимальная длина сообщения 144
- cc [ 9 ],
- len = strlen( message ),
- k = 0,
- ki = 0,
- i = 0,
- li = 0,
- count = 0,
- lc = 0
- ;
- // Проверка на минимум chars
- if ( chars < 2 || chars > 120 )
- return 0;
- while ( i < len )
- {
- // Проверка на начало нового сообщения
- if (
- k == 0 &&
- i != 0
- )
- {
- // Если это новое сообщение,
- // то добавляем пробел и увеличиваем счетчик
- result[ k++ ] = ' ';
- ++count;
- // Если в предыдущем сообщении был цвет
- // и в искомом тексте не начало нового цвета,
- // то добавляем старый цвет
- if (
- cc[ 0 ] &&
- !(
- i + 7 < len &&
- message[ i ] == '{' &&
- message[ i + 7 ] == '}'
- )
- )
- {
- result[ k++ ] = cc[ 0 ];
- result[ k++ ] = cc[ 1 ];
- result[ k++ ] = cc[ 2 ];
- result[ k++ ] = cc[ 3 ];
- result[ k++ ] = cc[ 4 ];
- result[ k++ ] = cc[ 5 ];
- result[ k++ ] = cc[ 6 ];
- result[ k++ ] = cc[ 7 ];
- }
- }
- // Достигнут лимит букв в сообщении
- if ( k == sizeof( result ) - 1 )
- {
- count = chars;
- }
- else
- {
- result[ k ] = message[ i ];
- switch ( result[ k ] )
- {
- // Если это пробел или табуляция,
- // ставим индекс на возврат
- case ' ','\t':
- {
- ki = k;
- li = i;
- }
- // Если это новая строка, ставим индекс на возврат
- // и переходим к выводу сообщения
- case '\n':
- {
- ki = k;
- li = i;
- count = chars;
- }
- // Если это начало цвета, то записываем цвет
- case '{':
- {
- // Проверка что это действительно цвет
- if (
- i + 7 < len &&
- message[ i + 7 ] == '}'
- )
- {
- // Проверка на лимит букв в сообщении
- if ( k + 7 >= sizeof( result ) )
- {
- count = chars;
- }
- else
- {
- // Удаляем повторные цвета {FFFFFF}{FF00FF}
- if ( lc == k - 8 )
- k = lc;
- lc = k;
- cc[ 0 ] = '{';
- result[ ++k ] = message[ ++i ];
- cc[ 1 ] = message[ i ];
- result[ ++k ] = message[ ++i ];
- cc[ 2 ] = message[ i ];
- result[ ++k ] = message[ ++i ];
- cc[ 3 ] = message[ i ];
- result[ ++k ] = message[ ++i ];
- cc[ 4 ] = message[ i ];
- result[ ++k ] = message[ ++i ];
- cc[ 5 ] = message[ i ];
- result[ ++k ] = message[ ++i ];
- cc[ 6 ] = message[ i ];
- result[ ++k ] = message[ ++i ];
- cc[ 7 ] = '}';
- cc[ 8 ] = '\0';
- continue;
- }
- }
- }
- }
- }
- // Вывод сообщения
- if ( count == chars )
- {
- count = 0;
- // Если был найден пробел, таб или новая линия,
- // то сдвигаем курсор назад
- if ( ki > 0 )
- {
- k = ki;
- i = li + 1;
- }
- // Если текст кончается цветом, удаляем его
- if (
- k >= 8 &&
- result[ k - 1 ] == '}' &&
- result[ k - 8 ] == '{'
- )
- {
- result[ k - 8 ] = '\0';
- }
- else
- {
- result[ k ] = '\0';
- }
- if ( !SendClientMessage( playerid, color, result ) )
- return 0;
- k = 0;
- ki = 0;
- continue;
- }
- ++k;
- ++i;
- ++count;
- }
- // Если текст кончается цветом удаляем его
- if (
- k >= 8 &&
- result[ k - 1 ] == '}' &&
- result[ k - 8 ] == '{'
- )
- {
- result[ k - 8 ] = '\0';
- }
- else
- {
- result[ k ] = '\0';
- }
- return SendClientMessage( playerid, color, result );
- }
- // -------------------------------------------------------------------------------------*-
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement