AMXX-BG.INFO WPMGPrintChatColor.inc Raw include

WPMGPrintChatColor.inc

Original include source with line numbers.

Back Download .inc
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 }