WPMGPrintChatColor.inc
Original include source with line numbers.
| 1 | /* |
| 2 | WWW WWWW WWW PPPPPPPPPPPPPPP MMMMMM MMMMMM GGGGGGGGGGGG |
| 3 | WWW WWWW WWW PPPPPPPPPPPPPPPP MMM MMM MMM MMM GGG GGG |
| 4 | WWW WWWW WWW PPP PPP MMM MMM MMM MMM GGG GGG |
| 5 | WWW WWW WWW WWW PPP PPP MMM MMM MMM MMM GGG GGG |
| 6 | WWW WWW WWW WWW PPP PPP MMM MMM MMM MMM GGG GGG |
| 7 | WWW WWW WWW WWW PPP PPP MMM MMM MMM MMM GGG |
| 8 | WWW WWW WWW WWW PPPPPPPPPPPPPPPP MMM MMM MMM MMM GGG |
| 9 | WWW WWW WWW WWW PPPPPPPPPPPPPPP MMM MMMMM MMM GGG |
| 10 | WWW WWW WWW WWW PPP MMM MMM GGG GGGGGGGGGGG |
| 11 | WWW WWW WWW WWW PPP MMM MMM GGG GGG |
| 12 | WWW WWW WWW WWW PPP MMM MMM GGG GGG |
| 13 | WWW WWW WWW WWW PPP MMM MMM GGG GGG |
| 14 | WWWW WWWW PPP MMM MMM GGG GGG |
| 15 | WWWW WWWW PPP MMM MMM GGG GGG |
| 16 | WWWW WWWW PPP MMM MMM GGGGGGGGGGGGGGG |
| 17 | |
| 18 | TTTTTTTTTTTTTTTTTTTTTTTTTTT |
| 19 | TTTTTTTTTTTTTTTTTTTTTTTTTTT |
| 20 | TTT |
| 21 | TTT |
| 22 | TTT |
| 23 | TTT eeeeeeeeeeee aaaaaaaaaaaaaaaaaaa mmm mmmmmmmmm mmmmmmmmm |
| 24 | TTT eee eee aaa aaa mmm mmm mmm mmm mmm |
| 25 | TTT eee eee aaa mmmmmm mmm mmm mmm |
| 26 | TTT eee eee aaa mmmmm mmm mmm mmm |
| 27 | TTT eeeeeeeeeeeeeeeeeeee aaaaaaaaaaaaaaaaaa mmmm mm mm mmm |
| 28 | TTT eee aaa aaa mmm mmm mmm |
| 29 | TTT eee aaa aaa mmm mmm mmm |
| 30 | TTT eee aaa aaa mmm mmm mmm |
| 31 | TTT eee eee aaa aaa mmm mmm mmm |
| 32 | TTT eeeeeeeeeeee aaaaaaaaaaaaaaaaaaa mmm mmm mmm |
| 33 | |
| 34 | Print Chat Color by WPMG PRoSToTeM@. |
| 35 | */ |
| 36 | |
| 37 | #if defined WPMGPrintChatColorIncluded |
| 38 | #endinput |
| 39 | #endif |
| 40 | |
| 41 | #define WPMGPrintChatColorIncluded |
| 42 | |
| 43 | #include <cstrike> |
| 44 | |
| 45 | // Максимальное количество %L в сообщении |
| 46 | #define MAX_LANG_ARGS 5 |
| 47 | |
| 48 | // Цвета сообщений |
| 49 | enum |
| 50 | { |
| 51 | PRINT_COLOR_GREY, // Серый |
| 52 | PRINT_COLOR_RED, // Красный |
| 53 | PRINT_COLOR_BLUE, // Синий |
| 54 | PRINT_COLOR_PLAYERTEAM // Цвет команды игрока которому мы отсылаем или цвет команды определённого игрока (если PRINT_COLOR_PLAYERTEAM + id) |
| 55 | }; |
| 56 | |
| 57 | // Имена команд |
| 58 | static const g_aszTeamNames[][] = |
| 59 | { |
| 60 | "UNASSIGNED", |
| 61 | "TERRORIST", |
| 62 | "CT", |
| 63 | "SPECTATOR" |
| 64 | }; |
| 65 | |
| 66 | stock PrintChatColor(pReceiver, iColor = PRINT_COLOR_PLAYERTEAM, const szMessage[], any:...) |
| 67 | { |
| 68 | // Сообщение |
| 69 | new szBuffer[256]; |
| 70 | |
| 71 | // Количество аргументов |
| 72 | new iArgs = numargs(); |
| 73 | |
| 74 | // Отсылаем одному игроку |
| 75 | if (pReceiver) |
| 76 | { |
| 77 | // Заменяем все LANG_PLAYER, на ID получателя |
| 78 | for (new iArg = 3; iArg < iArgs; iArg++) |
| 79 | { |
| 80 | // Если аргумент не равен LANG_PLAYER идём дальше |
| 81 | if (getarg(iArg) != LANG_PLAYER) |
| 82 | continue; |
| 83 | |
| 84 | // Меняем численное значение аргумента |
| 85 | setarg(iArg, _, pReceiver); |
| 86 | } |
| 87 | |
| 88 | // Форматируем сообщение |
| 89 | vformat(szBuffer, 255, szMessage, 4); |
| 90 | |
| 91 | // Заменяем !y, !t, !g на цвета |
| 92 | while (replace(szBuffer, 255, "!y", "^1")) {} |
| 93 | while (replace(szBuffer, 255, "!t", "^3")) {} |
| 94 | while (replace(szBuffer, 255, "!g", "^4")) {} |
| 95 | |
| 96 | // Если цвет PLAYERTEAM |
| 97 | if (iColor >= PRINT_COLOR_PLAYERTEAM) |
| 98 | // Отсылаем сообщение игроку, за отправителя берём либо получателя, либо указанного игрока |
| 99 | UTIL_SayText(MSG_ONE, _, pReceiver, (iColor > PRINT_COLOR_PLAYERTEAM) ? iColor - PRINT_COLOR_PLAYERTEAM : pReceiver, szBuffer); |
| 100 | else |
| 101 | { |
| 102 | // Получаем команду получателя |
| 103 | new iTeam = _:cs_get_user_team(pReceiver); |
| 104 | |
| 105 | // Если команда равна цвету сразу отслылаем сообщение |
| 106 | if (iTeam % 3 == iColor) |
| 107 | UTIL_SayText(MSG_ONE, _, pReceiver, pReceiver, szBuffer); |
| 108 | else |
| 109 | { |
| 110 | // Меняем команду (для цвета) |
| 111 | UTIL_TeamInfo(MSG_ONE, _, pReceiver, pReceiver, g_aszTeamNames[iColor]); |
| 112 | // Отсылаем сообщение |
| 113 | UTIL_SayText(MSG_ONE, _, pReceiver, pReceiver, szBuffer); |
| 114 | // Возвращаем команду |
| 115 | UTIL_TeamInfo(MSG_ONE, _, pReceiver, pReceiver, g_aszTeamNames[iTeam]); |
| 116 | } |
| 117 | } |
| 118 | } |
| 119 | // Отсылаем всем |
| 120 | else |
| 121 | { |
| 122 | // Массив для аргументов |
| 123 | new aiChangeArgs[MAX_LANG_ARGS]; |
| 124 | // Количество аргументов, текущий аргумент |
| 125 | new iChangeArgs, iArg; |
| 126 | |
| 127 | // Записываем все аргументы содержащие LANG_PLAYER |
| 128 | for (iArg = 3; iArg < iArgs; iArg++) |
| 129 | { |
| 130 | // Если аргумент не равен LANG_PLAYER идём дальше |
| 131 | if (getarg(iArg) != LANG_PLAYER) |
| 132 | continue; |
| 133 | |
| 134 | // Записываем в массив |
| 135 | aiChangeArgs[iChangeArgs++] = iArg; |
| 136 | |
| 137 | // Если достигнут максимум выходим из цикла |
| 138 | if (iChangeArgs == MAX_LANG_ARGS) |
| 139 | break; |
| 140 | } |
| 141 | |
| 142 | // Массив из игроков |
| 143 | new apPlayers[32]; |
| 144 | // Всего игроков |
| 145 | new iPlayers; |
| 146 | // Последний игрок |
| 147 | new pPlayer; |
| 148 | |
| 149 | // Получаем игроков |
| 150 | get_players(apPlayers, iPlayers); |
| 151 | |
| 152 | // Делаем цикл из игроков |
| 153 | for (new i = 0; i < iPlayers; i++) |
| 154 | { |
| 155 | // Сохраняем последнего игрока |
| 156 | pPlayer = apPlayers[i]; |
| 157 | |
| 158 | // Меняем аргументы LANG_PLAYER на ID игрока |
| 159 | for (iArg = 0; iArg < iChangeArgs; iArg++) |
| 160 | setarg(aiChangeArgs[iArg], _, pPlayer); |
| 161 | |
| 162 | // Форматируем сообщение |
| 163 | vformat(szBuffer, 255, szMessage, 4); |
| 164 | |
| 165 | // Заменяем !y, !t, !g на цвета |
| 166 | while (replace(szBuffer, 255, "!y", "^1")) {} |
| 167 | while (replace(szBuffer, 255, "!t", "^3")) {} |
| 168 | while (replace(szBuffer, 255, "!g", "^4")) {} |
| 169 | |
| 170 | // Если цвет PLAYERTEAM |
| 171 | if (iColor >= PRINT_COLOR_PLAYERTEAM) |
| 172 | // Отсылаем сообщение игроку, за отправителя берём либо получателя, либо указанного игрока |
| 173 | UTIL_SayText(MSG_ONE, _, pPlayer, (iColor > PRINT_COLOR_PLAYERTEAM) ? iColor - PRINT_COLOR_PLAYERTEAM : pPlayer, szBuffer); |
| 174 | else |
| 175 | { |
| 176 | // Получаем команду получателя |
| 177 | new iTeam = _:cs_get_user_team(pPlayer); |
| 178 | |
| 179 | // Если команда равна цвету сразу отслылаем сообщение |
| 180 | if (iTeam % 3 == iColor) |
| 181 | UTIL_SayText(MSG_ONE, _, pPlayer, pPlayer, szBuffer); |
| 182 | else |
| 183 | { |
| 184 | // Меняем команду (для цвета) |
| 185 | UTIL_TeamInfo(MSG_ONE, _, pPlayer, pPlayer, g_aszTeamNames[iColor]); |
| 186 | // Отсылаем сообщение |
| 187 | UTIL_SayText(MSG_ONE, _, pPlayer, pPlayer, szBuffer); |
| 188 | // Возвращаем команду |
| 189 | UTIL_TeamInfo(MSG_ONE, _, pPlayer, pPlayer, g_aszTeamNames[iTeam]); |
| 190 | } |
| 191 | } |
| 192 | } |
| 193 | } |
| 194 | } |
| 195 | |
| 196 | // Утилита отсылки SayText |
| 197 | stock UTIL_SayText(iDest, const vecOrigin[3] = {0, 0, 0}, pEntity, pSender, const szMessage[], const szArg1[] = "", const szArg2[] = "") |
| 198 | { |
| 199 | // Получаем ID сообщения SayText |
| 200 | static msgSayText; |
| 201 | |
| 202 | if (!msgSayText) |
| 203 | msgSayText = get_user_msgid("SayText"); |
| 204 | |
| 205 | // Отсылаем SayText |
| 206 | message_begin(iDest, msgSayText, vecOrigin, pEntity); |
| 207 | write_byte(pSender); |
| 208 | write_string(szMessage); |
| 209 | if (szArg1[0]) |
| 210 | { |
| 211 | write_string(szArg1); |
| 212 | |
| 213 | if (szArg2[0]) |
| 214 | write_string(szArg2); |
| 215 | } |
| 216 | message_end(); |
| 217 | } |
| 218 | |
| 219 | // Утилита отсылки TeamInfo |
| 220 | stock UTIL_TeamInfo(iDest, const vecOrigin[3] = {0, 0, 0}, pEntity, pPlayer, const szTeamName[]) |
| 221 | { |
| 222 | // Получаем ID сообщения TeamInfo |
| 223 | static msgTeamInfo; |
| 224 | |
| 225 | if (!msgTeamInfo) |
| 226 | msgTeamInfo = get_user_msgid("TeamInfo"); |
| 227 | |
| 228 | // Отсылаем TeamInfo |
| 229 | message_begin(iDest, msgTeamInfo, vecOrigin, pEntity); |
| 230 | write_byte(pPlayer); |
| 231 | write_string(szTeamName); |
| 232 | message_end(); |
| 233 | } |