/* WWW WWWW WWW PPPPPPPPPPPPPPP MMMMMM MMMMMM GGGGGGGGGGGG WWW WWWW WWW PPPPPPPPPPPPPPPP MMM MMM MMM MMM GGG GGG WWW WWWW WWW PPP PPP MMM MMM MMM MMM GGG GGG WWW WWW WWW WWW PPP PPP MMM MMM MMM MMM GGG GGG WWW WWW WWW WWW PPP PPP MMM MMM MMM MMM GGG GGG WWW WWW WWW WWW PPP PPP MMM MMM MMM MMM GGG WWW WWW WWW WWW PPPPPPPPPPPPPPPP MMM MMM MMM MMM GGG WWW WWW WWW WWW PPPPPPPPPPPPPPP MMM MMMMM MMM GGG WWW WWW WWW WWW PPP MMM MMM GGG GGGGGGGGGGG WWW WWW WWW WWW PPP MMM MMM GGG GGG WWW WWW WWW WWW PPP MMM MMM GGG GGG WWW WWW WWW WWW PPP MMM MMM GGG GGG WWWW WWWW PPP MMM MMM GGG GGG WWWW WWWW PPP MMM MMM GGG GGG WWWW WWWW PPP MMM MMM GGGGGGGGGGGGGGG TTTTTTTTTTTTTTTTTTTTTTTTTTT TTTTTTTTTTTTTTTTTTTTTTTTTTT TTT TTT TTT TTT eeeeeeeeeeee aaaaaaaaaaaaaaaaaaa mmm mmmmmmmmm mmmmmmmmm TTT eee eee aaa aaa mmm mmm mmm mmm mmm TTT eee eee aaa mmmmmm mmm mmm mmm TTT eee eee aaa mmmmm mmm mmm mmm TTT eeeeeeeeeeeeeeeeeeee aaaaaaaaaaaaaaaaaa mmmm mm mm mmm TTT eee aaa aaa mmm mmm mmm TTT eee aaa aaa mmm mmm mmm TTT eee aaa aaa mmm mmm mmm TTT eee eee aaa aaa mmm mmm mmm TTT eeeeeeeeeeee aaaaaaaaaaaaaaaaaaa mmm mmm mmm Print Chat Color by WPMG PRoSToTeM@. */ #if defined WPMGPrintChatColorIncluded #endinput #endif #define WPMGPrintChatColorIncluded #include // Максимальное количество %L в сообщении #define MAX_LANG_ARGS 5 // Цвета сообщений enum { PRINT_COLOR_GREY, // Серый PRINT_COLOR_RED, // Красный PRINT_COLOR_BLUE, // Синий PRINT_COLOR_PLAYERTEAM // Цвет команды игрока которому мы отсылаем или цвет команды определённого игрока (если PRINT_COLOR_PLAYERTEAM + id) }; // Имена команд static const g_aszTeamNames[][] = { "UNASSIGNED", "TERRORIST", "CT", "SPECTATOR" }; stock PrintChatColor(pReceiver, iColor = PRINT_COLOR_PLAYERTEAM, const szMessage[], any:...) { // Сообщение new szBuffer[256]; // Количество аргументов new iArgs = numargs(); // Отсылаем одному игроку if (pReceiver) { // Заменяем все LANG_PLAYER, на ID получателя for (new iArg = 3; iArg < iArgs; iArg++) { // Если аргумент не равен LANG_PLAYER идём дальше if (getarg(iArg) != LANG_PLAYER) continue; // Меняем численное значение аргумента setarg(iArg, _, pReceiver); } // Форматируем сообщение vformat(szBuffer, 255, szMessage, 4); // Заменяем !y, !t, !g на цвета while (replace(szBuffer, 255, "!y", "^1")) {} while (replace(szBuffer, 255, "!t", "^3")) {} while (replace(szBuffer, 255, "!g", "^4")) {} // Если цвет PLAYERTEAM if (iColor >= PRINT_COLOR_PLAYERTEAM) // Отсылаем сообщение игроку, за отправителя берём либо получателя, либо указанного игрока UTIL_SayText(MSG_ONE, _, pReceiver, (iColor > PRINT_COLOR_PLAYERTEAM) ? iColor - PRINT_COLOR_PLAYERTEAM : pReceiver, szBuffer); else { // Получаем команду получателя new iTeam = _:cs_get_user_team(pReceiver); // Если команда равна цвету сразу отслылаем сообщение if (iTeam % 3 == iColor) UTIL_SayText(MSG_ONE, _, pReceiver, pReceiver, szBuffer); else { // Меняем команду (для цвета) UTIL_TeamInfo(MSG_ONE, _, pReceiver, pReceiver, g_aszTeamNames[iColor]); // Отсылаем сообщение UTIL_SayText(MSG_ONE, _, pReceiver, pReceiver, szBuffer); // Возвращаем команду UTIL_TeamInfo(MSG_ONE, _, pReceiver, pReceiver, g_aszTeamNames[iTeam]); } } } // Отсылаем всем else { // Массив для аргументов new aiChangeArgs[MAX_LANG_ARGS]; // Количество аргументов, текущий аргумент new iChangeArgs, iArg; // Записываем все аргументы содержащие LANG_PLAYER for (iArg = 3; iArg < iArgs; iArg++) { // Если аргумент не равен LANG_PLAYER идём дальше if (getarg(iArg) != LANG_PLAYER) continue; // Записываем в массив aiChangeArgs[iChangeArgs++] = iArg; // Если достигнут максимум выходим из цикла if (iChangeArgs == MAX_LANG_ARGS) break; } // Массив из игроков new apPlayers[32]; // Всего игроков new iPlayers; // Последний игрок new pPlayer; // Получаем игроков get_players(apPlayers, iPlayers); // Делаем цикл из игроков for (new i = 0; i < iPlayers; i++) { // Сохраняем последнего игрока pPlayer = apPlayers[i]; // Меняем аргументы LANG_PLAYER на ID игрока for (iArg = 0; iArg < iChangeArgs; iArg++) setarg(aiChangeArgs[iArg], _, pPlayer); // Форматируем сообщение vformat(szBuffer, 255, szMessage, 4); // Заменяем !y, !t, !g на цвета while (replace(szBuffer, 255, "!y", "^1")) {} while (replace(szBuffer, 255, "!t", "^3")) {} while (replace(szBuffer, 255, "!g", "^4")) {} // Если цвет PLAYERTEAM if (iColor >= PRINT_COLOR_PLAYERTEAM) // Отсылаем сообщение игроку, за отправителя берём либо получателя, либо указанного игрока UTIL_SayText(MSG_ONE, _, pPlayer, (iColor > PRINT_COLOR_PLAYERTEAM) ? iColor - PRINT_COLOR_PLAYERTEAM : pPlayer, szBuffer); else { // Получаем команду получателя new iTeam = _:cs_get_user_team(pPlayer); // Если команда равна цвету сразу отслылаем сообщение if (iTeam % 3 == iColor) UTIL_SayText(MSG_ONE, _, pPlayer, pPlayer, szBuffer); else { // Меняем команду (для цвета) UTIL_TeamInfo(MSG_ONE, _, pPlayer, pPlayer, g_aszTeamNames[iColor]); // Отсылаем сообщение UTIL_SayText(MSG_ONE, _, pPlayer, pPlayer, szBuffer); // Возвращаем команду UTIL_TeamInfo(MSG_ONE, _, pPlayer, pPlayer, g_aszTeamNames[iTeam]); } } } } } // Утилита отсылки SayText stock UTIL_SayText(iDest, const vecOrigin[3] = {0, 0, 0}, pEntity, pSender, const szMessage[], const szArg1[] = "", const szArg2[] = "") { // Получаем ID сообщения SayText static msgSayText; if (!msgSayText) msgSayText = get_user_msgid("SayText"); // Отсылаем SayText message_begin(iDest, msgSayText, vecOrigin, pEntity); write_byte(pSender); write_string(szMessage); if (szArg1[0]) { write_string(szArg1); if (szArg2[0]) write_string(szArg2); } message_end(); } // Утилита отсылки TeamInfo stock UTIL_TeamInfo(iDest, const vecOrigin[3] = {0, 0, 0}, pEntity, pPlayer, const szTeamName[]) { // Получаем ID сообщения TeamInfo static msgTeamInfo; if (!msgTeamInfo) msgTeamInfo = get_user_msgid("TeamInfo"); // Отсылаем TeamInfo message_begin(iDest, msgTeamInfo, vecOrigin, pEntity); write_byte(pPlayer); write_string(szTeamName); message_end(); }