· 6 years ago · Dec 14, 2019, 12:22 PM
1 public PlVers:__version =
2{
3 version = 5,
4 filevers = "1.8.0.6032",
5 date = "03/27/2019",
6 time = "23:40:42"
7};
8new Float:NULL_VECTOR[3];
9new String:NULL_STRING[4];
10public Extension:__ext_core =
11{
12 name = "Core",
13 file = "core",
14 autoload = 0,
15 required = 0,
16};
17new MaxClients;
18public Extension:__ext_sdktools =
19{
20 name = "SDKTools",
21 file = "sdktools.ext",
22 autoload = 1,
23 required = 1,
24};
25public Extension:__ext_cstrike =
26{
27 name = "cstrike",
28 file = "games/game.cstrike.ext",
29 autoload = 0,
30 required = 1,
31};
32public Extension:__ext_sdkhooks =
33{
34 name = "SDKHooks",
35 file = "sdkhooks.ext",
36 autoload = 1,
37 required = 1,
38};
39public Extension:__ext_regex =
40{
41 name = "Regex Extension",
42 file = "regex.ext",
43 autoload = 1,
44 required = 1,
45};
46new bool:MC_SkipList[66];
47new Handle:MC_Trie;
48new MC_TeamColors[1][3] =
49{
50 {
51 13421772, 5077314, 16728128
52 }
53};
54new String:C_Tag[18][] =
55{
56 "{default}",
57 "{darkred}",
58 "{green}",
59 "{lightgreen}",
60 "{red}",
61 "{blue}",
62 "{olive}",
63 "{lime}",
64 "{lightred}",
65 "{purple}",
66 "{grey}",
67 "{orange}",
68 "{bluegrey}",
69 "{lightblue}",
70 "{darkblue}",
71 "{grey2}",
72 "{orchid}",
73 "{lightred2}"
74};
75new String:C_TagCode[18][16] =
76{
77 "\x01",
78 "\x02",
79 "\x04",
80 "\x03",
81 "\x03",
82 "\x03",
83 "\x05",
84 "\x06",
85 "\x07",
86 "\x03",
87 "\x08",
88 "\x09",
89 "\n",
90 "\x0B",
91 "\x0C",
92 "\r",
93 "\x0E",
94 "\x0F"
95};
96new bool:C_TagReqSayText2[18] =
97{
98 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
99};
100new bool:C_EventIsHooked;
101new bool:C_SkipList[66];
102new bool:C_Profile_Colors[18] =
103{
104 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
105};
106new C_Profile_TeamIndex[18] =
107{
108 -1, ...
109};
110new bool:C_Profile_SayText2;
111new Handle:sm_show_activity = 1635151433;
112new bool:g_bCFixColors;
113public Extension:__ext_SteamWorks =
114{
115 name = "SteamWorks",
116 file = "SteamWorks.ext",
117 autoload = 1,
118 required = 1,
119};
120public SharedPlugin:__pl_lastrequest =
121{
122 name = "lastrequest",
123 file = "sm_hosties.smx",
124 required = 0,
125};
126new Handle:db;
127new bool:g_dbConnected;
128new String:g_sqlBuffer[2048];
129new bool:adi_debug;
130new Float:g_jakosc;
131new Handle:cvar_jakosc;
132new g_jezyk;
133new Handle:cvar_jezyk;
134new g_search_jezyk;
135new Handle:cvar_search_jezyk;
136new String:apikey[36];
137new Handle:cvar_apikey;
138new bool:licencja;
139new g_wyszukiwanie_menu = 1;
140new Handle:cvar_menu;
141new Handle:cvar_pattern_vip;
142new g_pattern_vip;
143new Handle:cvar_stattrak_vip;
144new g_stattrak_vip;
145new Handle:cvar_countdown;
146new Float:g_countdown;
147new Handle:cvar_zombiesv;
148new zombiesv;
149new Handle:cvar_db_clean;
150new g_db_clean;
151new Handle:cvar_extended_view;
152new g_extended_view;
153new Handle:cvar_best_weapon;
154new g_best_weapon;
155new Handle:cvar_nametag_vip;
156new g_nametag_vip;
157new countdown[66];
158new id_broni_martwy[66];
159new id_broni_st_martwy[66];
160new Handle:arbol[66];
161new Handle:Handler_TimeraMalujacego[66];
162new ostatnie_zapytanie;
163new skiny_gracza[66][100];
164new skiny_stattrak[66][100];
165new skiny_stattrak_temp[66][100];
166new skiny_seed[66][100];
167new powtorz[66];
168new bool:hosties;
169new String:skiny_nametag[66][100][40];
170new lista_skinow_id[800];
171new String:lista_skinow_nazwa[800][48];
172new ilosc_skinow_wczytanych;
173new String:gC_Knives[16][4][] =
174{
175 {
176 "42",
177 "Default CT",
178 "models/weapons/v_knife_default_ct.mdl",
179 "models/weapons/w_knife_default_ct.mdl"
180 },
181 {
182 "59",
183 "Default T",
184 "models/weapons/v_knife_default_t.mdl",
185 "models/weapons/w_knife_default_t.mdl"
186 },
187 {
188 "500",
189 "Bayonet Knife",
190 "models/weapons/v_knife_bayonet.mdl",
191 "models/weapons/w_knife_bayonet.mdl"
192 },
193 {
194 "505",
195 "Flip Knife",
196 "models/weapons/v_knife_flip.mdl",
197 "models/weapons/w_knife_flip.mdl"
198 },
199 {
200 "506",
201 "Gut Knife",
202 "models/weapons/v_knife_gut.mdl",
203 "models/weapons/w_knife_gut.mdl"
204 },
205 {
206 "507",
207 "Karambit Knife",
208 "models/weapons/v_knife_karam.mdl",
209 "models/weapons/w_knife_karam.mdl"
210 },
211 {
212 "508",
213 "M9 Bayonet Knife",
214 "models/weapons/v_knife_m9_bay.mdl",
215 "models/weapons/w_knife_m9_bay.mdl"
216 },
217 {
218 "509",
219 "Huntsman Knife",
220 "models/weapons/v_knife_tactical.mdl",
221 "models/weapons/w_knife_tactical.mdl"
222 },
223 {
224 "512",
225 "Falchion Knife",
226 "models/weapons/v_knife_falchion_advanced.mdl",
227 "models/weapons/w_knife_falchion_advanced.mdl"
228 },
229 {
230 "514",
231 "Bowie Knife",
232 "models/weapons/v_knife_survival_bowie.mdl",
233 "models/weapons/w_knife_survival_bowie.mdl"
234 },
235 {
236 "515",
237 "Butterfly Knife",
238 "models/weapons/v_knife_butterfly.mdl",
239 "models/weapons/w_knife_butterfly.mdl"
240 },
241 {
242 "516",
243 "Shaddow Daggers",
244 "models/weapons/v_knife_push.mdl",
245 "models/weapons/w_knife_push.mdl"
246 },
247 {
248 "519",
249 "Ursus Knife",
250 "models/weapons/v_knife_ursus.mdl",
251 "models/weapons/w_knife_ursus.mdl"
252 },
253 {
254 "520",
255 "Navaja Knife",
256 "models/weapons/v_knife_gypsy_jackknife.mdl",
257 "models/weapons/w_knife_gypsy_jackknife.mdl"
258 },
259 {
260 "522",
261 "Stiletto Daggers",
262 "models/weapons/v_knife_stiletto.mdl",
263 "models/weapons/w_knife_stiletto.mdl"
264 },
265 {
266 "523",
267 "Talon Knife",
268 "models/weapons/v_knife_widowmaker.mdl",
269 "models/weapons/w_knife_widowmaker.mdl"
270 }
271};
272new gI_KnifeIndexes[16][2];
273new String:gC_Weapons[35][4][] =
274{
275 {
276 "weapon_knife",
277 "Knife",
278 "2",
279 "0"
280 },
281 {
282 "weapon_ak47",
283 "AK-47",
284 "0",
285 "7"
286 },
287 {
288 "weapon_aug",
289 "AUG",
290 "0",
291 "8"
292 },
293 {
294 "weapon_awp",
295 "AWP",
296 "0",
297 "9"
298 },
299 {
300 "weapon_bizon",
301 "PP-Bizon",
302 "0",
303 "26"
304 },
305 {
306 "weapon_cz75a",
307 "CZ-75 Auto",
308 "1",
309 "63"
310 },
311 {
312 "weapon_deagle",
313 "Desert Eagle",
314 "1",
315 "1"
316 },
317 {
318 "weapon_elite",
319 "Dual Berettas",
320 "1",
321 "2"
322 },
323 {
324 "weapon_famas",
325 "FAMAS",
326 "0",
327 "10"
328 },
329 {
330 "weapon_fiveseven",
331 "Five-SeveN",
332 "1",
333 "3"
334 },
335 {
336 "weapon_g3sg1",
337 "G3SG1",
338 "0",
339 "11"
340 },
341 {
342 "weapon_galilar",
343 "Galil AR",
344 "0",
345 "13"
346 },
347 {
348 "weapon_glock",
349 "Glock-18",
350 "1",
351 "4"
352 },
353 {
354 "weapon_hkp2000",
355 "P2000",
356 "1",
357 "32"
358 },
359 {
360 "weapon_m249",
361 "M249",
362 "0",
363 "14"
364 },
365 {
366 "weapon_m4a1",
367 "M4A4",
368 "0",
369 "16"
370 },
371 {
372 "weapon_m4a1_silencer",
373 "M4A1-S",
374 "0",
375 "60"
376 },
377 {
378 "weapon_mac10",
379 "MAC-10",
380 "0",
381 "17"
382 },
383 {
384 "weapon_mag7",
385 "MAG-7",
386 "0",
387 "27"
388 },
389 {
390 "weapon_mp7",
391 "MP7",
392 "0",
393 "33"
394 },
395 {
396 "weapon_mp9",
397 "MP9",
398 "0",
399 "34"
400 },
401 {
402 "weapon_negev",
403 "Negev",
404 "0",
405 "28"
406 },
407 {
408 "weapon_nova",
409 "Nova",
410 "0",
411 "35"
412 },
413 {
414 "weapon_p250",
415 "P250",
416 "1",
417 "36"
418 },
419 {
420 "weapon_p90",
421 "P90",
422 "0",
423 "19"
424 },
425 {
426 "weapon_sawedoff",
427 "Sawed-Off",
428 "0",
429 "29"
430 },
431 {
432 "weapon_scar20",
433 "SCAR-20",
434 "0",
435 "38"
436 },
437 {
438 "weapon_sg556",
439 "SG 553",
440 "0",
441 "39"
442 },
443 {
444 "weapon_ssg08",
445 "SSG 08",
446 "0",
447 "40"
448 },
449 {
450 "weapon_tec9",
451 "Tec-9",
452 "1",
453 "30"
454 },
455 {
456 "weapon_ump45",
457 "UMP-45",
458 "0",
459 "24"
460 },
461 {
462 "weapon_usp_silencer",
463 "USP-S",
464 "1",
465 "61"
466 },
467 {
468 "weapon_xm1014",
469 "XM1014",
470 "0",
471 "25"
472 },
473 {
474 "weapon_revolver",
475 "R8 Revolver",
476 "1",
477 "64"
478 },
479 {
480 "weapon_mp5sd",
481 "MP5-SD",
482 "1",
483 "23"
484 }
485};
486public Plugin:myinfo =
487{
488 name = "WS - csgotokens.com",
489 description = "Free WS plugin for csgotokens.com users",
490 author = "Adi - live4net",
491 version = "1.10",
492 url = "https://csgotokens.com"
493};
494new ver = 110;
495public void:__ext_core_SetNTVOptional()
496{
497 MarkNativeAsOptional("GetFeatureStatus");
498 MarkNativeAsOptional("RequireFeature");
499 MarkNativeAsOptional("AddCommandListener");
500 MarkNativeAsOptional("RemoveCommandListener");
501 MarkNativeAsOptional("BfWriteBool");
502 MarkNativeAsOptional("BfWriteByte");
503 MarkNativeAsOptional("BfWriteChar");
504 MarkNativeAsOptional("BfWriteShort");
505 MarkNativeAsOptional("BfWriteWord");
506 MarkNativeAsOptional("BfWriteNum");
507 MarkNativeAsOptional("BfWriteFloat");
508 MarkNativeAsOptional("BfWriteString");
509 MarkNativeAsOptional("BfWriteEntity");
510 MarkNativeAsOptional("BfWriteAngle");
511 MarkNativeAsOptional("BfWriteCoord");
512 MarkNativeAsOptional("BfWriteVecCoord");
513 MarkNativeAsOptional("BfWriteVecNormal");
514 MarkNativeAsOptional("BfWriteAngles");
515 MarkNativeAsOptional("BfReadBool");
516 MarkNativeAsOptional("BfReadByte");
517 MarkNativeAsOptional("BfReadChar");
518 MarkNativeAsOptional("BfReadShort");
519 MarkNativeAsOptional("BfReadWord");
520 MarkNativeAsOptional("BfReadNum");
521 MarkNativeAsOptional("BfReadFloat");
522 MarkNativeAsOptional("BfReadString");
523 MarkNativeAsOptional("BfReadEntity");
524 MarkNativeAsOptional("BfReadAngle");
525 MarkNativeAsOptional("BfReadCoord");
526 MarkNativeAsOptional("BfReadVecCoord");
527 MarkNativeAsOptional("BfReadVecNormal");
528 MarkNativeAsOptional("BfReadAngles");
529 MarkNativeAsOptional("BfGetNumBytesLeft");
530 MarkNativeAsOptional("BfWrite.WriteBool");
531 MarkNativeAsOptional("BfWrite.WriteByte");
532 MarkNativeAsOptional("BfWrite.WriteChar");
533 MarkNativeAsOptional("BfWrite.WriteShort");
534 MarkNativeAsOptional("BfWrite.WriteWord");
535 MarkNativeAsOptional("BfWrite.WriteNum");
536 MarkNativeAsOptional("BfWrite.WriteFloat");
537 MarkNativeAsOptional("BfWrite.WriteString");
538 MarkNativeAsOptional("BfWrite.WriteEntity");
539 MarkNativeAsOptional("BfWrite.WriteAngle");
540 MarkNativeAsOptional("BfWrite.WriteCoord");
541 MarkNativeAsOptional("BfWrite.WriteVecCoord");
542 MarkNativeAsOptional("BfWrite.WriteVecNormal");
543 MarkNativeAsOptional("BfWrite.WriteAngles");
544 MarkNativeAsOptional("BfRead.ReadBool");
545 MarkNativeAsOptional("BfRead.ReadByte");
546 MarkNativeAsOptional("BfRead.ReadChar");
547 MarkNativeAsOptional("BfRead.ReadShort");
548 MarkNativeAsOptional("BfRead.ReadWord");
549 MarkNativeAsOptional("BfRead.ReadNum");
550 MarkNativeAsOptional("BfRead.ReadFloat");
551 MarkNativeAsOptional("BfRead.ReadString");
552 MarkNativeAsOptional("BfRead.ReadEntity");
553 MarkNativeAsOptional("BfRead.ReadAngle");
554 MarkNativeAsOptional("BfRead.ReadCoord");
555 MarkNativeAsOptional("BfRead.ReadVecCoord");
556 MarkNativeAsOptional("BfRead.ReadVecNormal");
557 MarkNativeAsOptional("BfRead.ReadAngles");
558 MarkNativeAsOptional("BfRead.GetNumBytesLeft");
559 MarkNativeAsOptional("PbReadInt");
560 MarkNativeAsOptional("PbReadFloat");
561 MarkNativeAsOptional("PbReadBool");
562 MarkNativeAsOptional("PbReadString");
563 MarkNativeAsOptional("PbReadColor");
564 MarkNativeAsOptional("PbReadAngle");
565 MarkNativeAsOptional("PbReadVector");
566 MarkNativeAsOptional("PbReadVector2D");
567 MarkNativeAsOptional("PbGetRepeatedFieldCount");
568 MarkNativeAsOptional("PbSetInt");
569 MarkNativeAsOptional("PbSetFloat");
570 MarkNativeAsOptional("PbSetBool");
571 MarkNativeAsOptional("PbSetString");
572 MarkNativeAsOptional("PbSetColor");
573 MarkNativeAsOptional("PbSetAngle");
574 MarkNativeAsOptional("PbSetVector");
575 MarkNativeAsOptional("PbSetVector2D");
576 MarkNativeAsOptional("PbAddInt");
577 MarkNativeAsOptional("PbAddFloat");
578 MarkNativeAsOptional("PbAddBool");
579 MarkNativeAsOptional("PbAddString");
580 MarkNativeAsOptional("PbAddColor");
581 MarkNativeAsOptional("PbAddAngle");
582 MarkNativeAsOptional("PbAddVector");
583 MarkNativeAsOptional("PbAddVector2D");
584 MarkNativeAsOptional("PbRemoveRepeatedFieldValue");
585 MarkNativeAsOptional("PbReadMessage");
586 MarkNativeAsOptional("PbReadRepeatedMessage");
587 MarkNativeAsOptional("PbAddMessage");
588 MarkNativeAsOptional("Protobuf.ReadInt");
589 MarkNativeAsOptional("Protobuf.ReadFloat");
590 MarkNativeAsOptional("Protobuf.ReadBool");
591 MarkNativeAsOptional("Protobuf.ReadString");
592 MarkNativeAsOptional("Protobuf.ReadColor");
593 MarkNativeAsOptional("Protobuf.ReadAngle");
594 MarkNativeAsOptional("Protobuf.ReadVector");
595 MarkNativeAsOptional("Protobuf.ReadVector2D");
596 MarkNativeAsOptional("Protobuf.GetRepeatedFieldCount");
597 MarkNativeAsOptional("Protobuf.SetInt");
598 MarkNativeAsOptional("Protobuf.SetFloat");
599 MarkNativeAsOptional("Protobuf.SetBool");
600 MarkNativeAsOptional("Protobuf.SetString");
601 MarkNativeAsOptional("Protobuf.SetColor");
602 MarkNativeAsOptional("Protobuf.SetAngle");
603 MarkNativeAsOptional("Protobuf.SetVector");
604 MarkNativeAsOptional("Protobuf.SetVector2D");
605 MarkNativeAsOptional("Protobuf.AddInt");
606 MarkNativeAsOptional("Protobuf.AddFloat");
607 MarkNativeAsOptional("Protobuf.AddBool");
608 MarkNativeAsOptional("Protobuf.AddString");
609 MarkNativeAsOptional("Protobuf.AddColor");
610 MarkNativeAsOptional("Protobuf.AddAngle");
611 MarkNativeAsOptional("Protobuf.AddVector");
612 MarkNativeAsOptional("Protobuf.AddVector2D");
613 MarkNativeAsOptional("Protobuf.RemoveRepeatedFieldValue");
614 MarkNativeAsOptional("Protobuf.ReadMessage");
615 MarkNativeAsOptional("Protobuf.ReadRepeatedMessage");
616 MarkNativeAsOptional("Protobuf.AddMessage");
617 VerifyCoreVersion();
618 return void:0;
619}
620
621bool:StrEqual(String:str1[], String:str2[], bool:caseSensitive)
622{
623 return strcmp(str1, str2, caseSensitive) == 0;
624}
625
626CharToLower(chr)
627{
628 if (IsCharUpper(chr))
629 {
630 return chr | 32;
631 }
632 return chr;
633}
634
635ExplodeString(String:text[], String:split[], String:buffers[][], maxStrings, maxStringLength, bool:copyRemainder)
636{
637 new reloc_idx;
638 new idx;
639 new total;
640 new var1;
641 if (maxStrings < 1 || !split[0])
642 {
643 return 0;
644 }
645 while ((idx = SplitString(text[reloc_idx], split, buffers[total], maxStringLength)) != -1)
646 {
647 reloc_idx = idx + reloc_idx;
648 total++;
649 if (maxStrings == total)
650 {
651 if (copyRemainder)
652 {
653 strcopy(buffers[total + -1], maxStringLength, text[reloc_idx - idx]);
654 }
655 return total;
656 }
657 }
658 total++;
659 strcopy(buffers[total], maxStringLength, text[reloc_idx]);
660 return total;
661}
662
663Handle:CreateDataTimer(Float:interval, Timer:func, &Handle:datapack, flags)
664{
665 datapack = DataPack.DataPack();
666 flags |= 512;
667 return CreateTimer(interval, func, datapack, flags);
668}
669
670Handle:StartMessageOne(String:msgname[], client, flags)
671{
672 new players[1];
673 players[0] = client;
674 return StartMessage(msgname, players, 1, flags);
675}
676
677bool:HasEntProp(entity, PropType:type, String:prop[])
678{
679 if (type == PropType:1)
680 {
681 return FindDataMapInfo(entity, prop, 0, 0, 0) != -1;
682 }
683 if (type)
684 {
685 return false;
686 }
687 new String:cls[64];
688 if (!GetEntityNetClass(entity, cls, 64))
689 {
690 return false;
691 }
692 return FindSendPropInfo(cls, prop, 0, 0, 0) != -1;
693}
694
695void:MC_PrintToChat(client, String:message[])
696{
697 MC_CheckTrie();
698 new var1;
699 if (client <= 0 || client > MaxClients)
700 {
701 ThrowError("Invalid client index %i", client);
702 }
703 if (!IsClientInGame(client))
704 {
705 ThrowError("Client %i is not in game", client);
706 }
707 new String:buffer[1024];
708 new String:buffer2[1024];
709 SetGlobalTransTarget(client);
710 Format(buffer, 1024, "\x01%s", message);
711 VFormat(buffer2, 1024, buffer, 3);
712 MC_ReplaceColorCodes(buffer2, 0, false, 1024);
713 MC_SendMessage(client, buffer2, 0);
714 return void:0;
715}
716
717void:MC_PrintToChatAll(String:message[])
718{
719 MC_CheckTrie();
720 new String:buffer[1024];
721 new String:buffer2[1024];
722 new i = 1;
723 while (i <= MaxClients)
724 {
725 new var1;
726 if (i && !IsClientInGame(i) && MC_SkipList[i])
727 {
728 MC_SkipList[i] = 0;
729 }
730 else
731 {
732 SetGlobalTransTarget(i);
733 Format(buffer, 1024, "\x01%s", message);
734 VFormat(buffer2, 1024, buffer, 2);
735 MC_ReplaceColorCodes(buffer2, 0, false, 1024);
736 MC_SendMessage(i, buffer2, 0);
737 }
738 i++;
739 }
740 return void:0;
741}
742
743void:MC_SendMessage(client, String:message[], author)
744{
745 if (!author)
746 {
747 author = client;
748 }
749 new String:buffer[256];
750 strcopy(buffer, 256, message);
751 new UserMsg:index = GetUserMessageId("SayText2");
752 if (index == UserMsg:-1)
753 {
754 if (GetEngineVersion() == 16)
755 {
756 new team = GetClientTeam(author);
757 if (team)
758 {
759 new String:temp[16];
760 new var2 = MC_TeamColors;
761 Format(temp, 16, "\x07%06X", var2[0][var2][team + -1]);
762 ReplaceString(buffer, 256, "\x03", temp, false);
763 }
764 else
765 {
766 ReplaceString(buffer, 256, "\x03", "\x04", false);
767 }
768 }
769 PrintToChat(client, "%s", buffer);
770 return void:0;
771 }
772 new Handle:buf = StartMessageOne("SayText2", client, 132);
773 new var1;
774 if (GetFeatureStatus(FeatureType:0, "GetUserMessageType") && GetUserMessageType() == 1)
775 {
776 PbSetInt(buf, "ent_idx", author, -1);
777 PbSetBool(buf, "chat", true, -1);
778 PbSetString(buf, "msg_name", buffer, -1);
779 PbAddString(buf, "params", "");
780 PbAddString(buf, "params", "");
781 PbAddString(buf, "params", "");
782 PbAddString(buf, "params", "");
783 }
784 else
785 {
786 BfWriteByte(buf, author);
787 BfWriteByte(buf, 1);
788 BfWriteString(buf, buffer);
789 }
790 EndMessage();
791 return void:0;
792}
793
794void:MC_CheckTrie()
795{
796 if (!MC_Trie)
797 {
798 MC_Trie = MC_InitColorTrie();
799 }
800 return void:0;
801}
802
803void:MC_ReplaceColorCodes(String:buffer[], author, bool:removeTags, maxlen)
804{
805 MC_CheckTrie();
806 if (!removeTags)
807 {
808 ReplaceString(buffer, maxlen, "{default}", "\x01", false);
809 }
810 else
811 {
812 ReplaceString(buffer, maxlen, "{default}", "", false);
813 ReplaceString(buffer, maxlen, "{teamcolor}", "", false);
814 }
815 new var1;
816 if (author && !removeTags)
817 {
818 new var2;
819 if (author < 0 || author > MaxClients)
820 {
821 ThrowError("Invalid client index %i", author);
822 }
823 if (!IsClientInGame(author))
824 {
825 ThrowError("Client %i is not in game", author);
826 }
827 ReplaceString(buffer, maxlen, "{teamcolor}", "\x03", false);
828 }
829 new cursor;
830 new value;
831 new String:tag[32];
832 new String:buff[32];
833 new output[maxlen];
834 strcopy(output, maxlen, buffer);
835 new Handle:regex = CompileRegex("{[a-zA-Z0-9]+}", 0, "", 0, 0);
836 new i;
837 while (i < 1000)
838 {
839 if (MatchRegex(regex, buffer[cursor], 0) < 1)
840 {
841 CloseHandle(regex);
842 strcopy(buffer, maxlen, output);
843 return void:0;
844 }
845 GetRegexSubString(regex, 0, tag, 32);
846 MC_StrToLower(tag);
847 cursor = StrContains(buffer[cursor], tag, false) + cursor + 1;
848 strcopy(buff, 32, tag);
849 ReplaceString(buff, 32, "{", "", true);
850 ReplaceString(buff, 32, "}", "", true);
851 if (GetTrieValue(MC_Trie, buff, value))
852 {
853 if (removeTags)
854 {
855 ReplaceString(output, maxlen, tag, "", false);
856 }
857 else
858 {
859 Format(buff, 32, "\x07%06X", value);
860 ReplaceString(output, maxlen, tag, buff, false);
861 }
862 }
863 i++;
864 }
865 LogError("[MORE COLORS] Infinite loop broken.");
866 return void:0;
867}
868
869void:MC_StrToLower(String:buffer[])
870{
871 new len = strlen(buffer);
872 new i;
873 while (i < len)
874 {
875 buffer[i] = CharToLower(buffer[i]);
876 i++;
877 }
878 return void:0;
879}
880
881Handle:MC_InitColorTrie()
882{
883 new Handle:hTrie = CreateTrie();
884 SetTrieValue(hTrie, "aliceblue", any:15792383, true);
885 SetTrieValue(hTrie, "allies", any:5077314, true);
886 SetTrieValue(hTrie, "ancient", any:15420235, true);
887 SetTrieValue(hTrie, "antiquewhite", any:16444375, true);
888 SetTrieValue(hTrie, "aqua", any:65535, true);
889 SetTrieValue(hTrie, "aquamarine", any:8388564, true);
890 SetTrieValue(hTrie, "arcana", any:11396444, true);
891 SetTrieValue(hTrie, "axis", any:16728128, true);
892 SetTrieValue(hTrie, "azure", any:32767, true);
893 SetTrieValue(hTrie, "beige", any:16119260, true);
894 SetTrieValue(hTrie, "bisque", any:16770244, true);
895 SetTrieValue(hTrie, "black", any:0, true);
896 SetTrieValue(hTrie, "blanchedalmond", any:16772045, true);
897 SetTrieValue(hTrie, "blue", any:10079487, true);
898 SetTrieValue(hTrie, "blueviolet", any:9055202, true);
899 SetTrieValue(hTrie, "brown", any:10824234, true);
900 SetTrieValue(hTrie, "burlywood", any:14596231, true);
901 SetTrieValue(hTrie, "cadetblue", any:6266528, true);
902 SetTrieValue(hTrie, "chartreuse", any:8388352, true);
903 SetTrieValue(hTrie, "chocolate", any:13789470, true);
904 SetTrieValue(hTrie, "collectors", any:11141120, true);
905 SetTrieValue(hTrie, "common", any:11584473, true);
906 SetTrieValue(hTrie, "community", any:7385162, true);
907 SetTrieValue(hTrie, "coral", any:16744272, true);
908 SetTrieValue(hTrie, "cornflowerblue", any:6591981, true);
909 SetTrieValue(hTrie, "cornsilk", any:16775388, true);
910 SetTrieValue(hTrie, "corrupted", any:10693678, true);
911 SetTrieValue(hTrie, "crimson", any:14423100, true);
912 SetTrieValue(hTrie, "cyan", any:65535, true);
913 SetTrieValue(hTrie, "darkblue", any:139, true);
914 SetTrieValue(hTrie, "darkcyan", any:35723, true);
915 SetTrieValue(hTrie, "darkgoldenrod", any:12092939, true);
916 SetTrieValue(hTrie, "darkgray", any:11119017, true);
917 SetTrieValue(hTrie, "darkgrey", any:11119017, true);
918 SetTrieValue(hTrie, "darkgreen", any:25600, true);
919 SetTrieValue(hTrie, "darkkhaki", any:12433259, true);
920 SetTrieValue(hTrie, "darkmagenta", any:9109643, true);
921 SetTrieValue(hTrie, "darkolivegreen", any:5597999, true);
922 SetTrieValue(hTrie, "darkorange", any:16747520, true);
923 SetTrieValue(hTrie, "darkorchid", any:10040012, true);
924 SetTrieValue(hTrie, "darkred", any:9109504, true);
925 SetTrieValue(hTrie, "darksalmon", any:15308410, true);
926 SetTrieValue(hTrie, "darkseagreen", any:9419919, true);
927 SetTrieValue(hTrie, "darkslateblue", any:4734347, true);
928 SetTrieValue(hTrie, "darkslategray", any:3100495, true);
929 SetTrieValue(hTrie, "darkslategrey", any:3100495, true);
930 SetTrieValue(hTrie, "darkturquoise", any:52945, true);
931 SetTrieValue(hTrie, "darkviolet", any:9699539, true);
932 SetTrieValue(hTrie, "deeppink", any:16716947, true);
933 SetTrieValue(hTrie, "deepskyblue", any:49151, true);
934 SetTrieValue(hTrie, "dimgray", any:6908265, true);
935 SetTrieValue(hTrie, "dimgrey", any:6908265, true);
936 SetTrieValue(hTrie, "dodgerblue", any:2003199, true);
937 SetTrieValue(hTrie, "exalted", any:13421773, true);
938 SetTrieValue(hTrie, "firebrick", any:11674146, true);
939 SetTrieValue(hTrie, "floralwhite", any:16775920, true);
940 SetTrieValue(hTrie, "forestgreen", any:2263842, true);
941 SetTrieValue(hTrie, "frozen", any:4817843, true);
942 SetTrieValue(hTrie, "fuchsia", any:16711935, true);
943 SetTrieValue(hTrie, "fullblue", any:255, true);
944 SetTrieValue(hTrie, "fullred", any:16711680, true);
945 SetTrieValue(hTrie, "gainsboro", any:14474460, true);
946 SetTrieValue(hTrie, "genuine", any:5076053, true);
947 SetTrieValue(hTrie, "ghostwhite", any:16316671, true);
948 SetTrieValue(hTrie, "gold", any:16766720, true);
949 SetTrieValue(hTrie, "goldenrod", any:14329120, true);
950 SetTrieValue(hTrie, "gray", any:13421772, true);
951 SetTrieValue(hTrie, "grey", any:13421772, true);
952 SetTrieValue(hTrie, "green", any:4128574, true);
953 SetTrieValue(hTrie, "greenyellow", any:11403055, true);
954 SetTrieValue(hTrie, "haunted", any:3732395, true);
955 SetTrieValue(hTrie, "honeydew", any:15794160, true);
956 SetTrieValue(hTrie, "hotpink", any:16738740, true);
957 SetTrieValue(hTrie, "immortal", any:14986803, true);
958 SetTrieValue(hTrie, "indianred", any:13458524, true);
959 SetTrieValue(hTrie, "indigo", any:4915330, true);
960 SetTrieValue(hTrie, "ivory", any:16777200, true);
961 SetTrieValue(hTrie, "khaki", any:15787660, true);
962 SetTrieValue(hTrie, "lavender", any:15132410, true);
963 SetTrieValue(hTrie, "lavenderblush", any:16773365, true);
964 SetTrieValue(hTrie, "lawngreen", any:8190976, true);
965 SetTrieValue(hTrie, "legendary", any:13839590, true);
966 SetTrieValue(hTrie, "lemonchiffon", any:16775885, true);
967 SetTrieValue(hTrie, "lightblue", any:11393254, true);
968 SetTrieValue(hTrie, "lightcoral", any:15761536, true);
969 SetTrieValue(hTrie, "lightcyan", any:14745599, true);
970 SetTrieValue(hTrie, "lightgoldenrodyellow", any:16448210, true);
971 SetTrieValue(hTrie, "lightgray", any:13882323, true);
972 SetTrieValue(hTrie, "lightgrey", any:13882323, true);
973 SetTrieValue(hTrie, "lightgreen", any:10092441, true);
974 SetTrieValue(hTrie, "lightpink", any:16758465, true);
975 SetTrieValue(hTrie, "lightsalmon", any:16752762, true);
976 SetTrieValue(hTrie, "lightseagreen", any:2142890, true);
977 SetTrieValue(hTrie, "lightskyblue", any:8900346, true);
978 SetTrieValue(hTrie, "lightslategray", any:7833753, true);
979 SetTrieValue(hTrie, "lightslategrey", any:7833753, true);
980 SetTrieValue(hTrie, "lightsteelblue", any:11584734, true);
981 SetTrieValue(hTrie, "lightyellow", any:16777184, true);
982 SetTrieValue(hTrie, "lime", any:65280, true);
983 SetTrieValue(hTrie, "limegreen", any:3329330, true);
984 SetTrieValue(hTrie, "linen", any:16445670, true);
985 SetTrieValue(hTrie, "magenta", any:16711935, true);
986 SetTrieValue(hTrie, "maroon", any:8388608, true);
987 SetTrieValue(hTrie, "mediumaquamarine", any:6737322, true);
988 SetTrieValue(hTrie, "mediumblue", any:205, true);
989 SetTrieValue(hTrie, "mediumorchid", any:12211667, true);
990 SetTrieValue(hTrie, "mediumpurple", any:9662680, true);
991 SetTrieValue(hTrie, "mediumseagreen", any:3978097, true);
992 SetTrieValue(hTrie, "mediumslateblue", any:8087790, true);
993 SetTrieValue(hTrie, "mediumspringgreen", any:64154, true);
994 SetTrieValue(hTrie, "mediumturquoise", any:4772300, true);
995 SetTrieValue(hTrie, "mediumvioletred", any:13047173, true);
996 SetTrieValue(hTrie, "midnightblue", any:1644912, true);
997 SetTrieValue(hTrie, "mintcream", any:16121850, true);
998 SetTrieValue(hTrie, "mistyrose", any:16770273, true);
999 SetTrieValue(hTrie, "moccasin", any:16770229, true);
1000 SetTrieValue(hTrie, "mythical", any:8931327, true);
1001 SetTrieValue(hTrie, "navajowhite", any:16768685, true);
1002 SetTrieValue(hTrie, "navy", any:128, true);
1003 SetTrieValue(hTrie, "normal", any:11711154, true);
1004 SetTrieValue(hTrie, "oldlace", any:16643558, true);
1005 SetTrieValue(hTrie, "olive", any:10404687, true);
1006 SetTrieValue(hTrie, "olivedrab", any:7048739, true);
1007 SetTrieValue(hTrie, "orange", any:16753920, true);
1008 SetTrieValue(hTrie, "orangered", any:16729344, true);
1009 SetTrieValue(hTrie, "orchid", any:14315734, true);
1010 SetTrieValue(hTrie, "palegoldenrod", any:15657130, true);
1011 SetTrieValue(hTrie, "palegreen", any:10025880, true);
1012 SetTrieValue(hTrie, "paleturquoise", any:11529966, true);
1013 SetTrieValue(hTrie, "palevioletred", any:14184595, true);
1014 SetTrieValue(hTrie, "papayawhip", any:16773077, true);
1015 SetTrieValue(hTrie, "peachpuff", any:16767673, true);
1016 SetTrieValue(hTrie, "peru", any:13468991, true);
1017 SetTrieValue(hTrie, "pink", any:16761035, true);
1018 SetTrieValue(hTrie, "plum", any:14524637, true);
1019 SetTrieValue(hTrie, "powderblue", any:11591910, true);
1020 SetTrieValue(hTrie, "purple", any:8388736, true);
1021 SetTrieValue(hTrie, "rare", any:4942335, true);
1022 SetTrieValue(hTrie, "red", any:16728128, true);
1023 SetTrieValue(hTrie, "rosybrown", any:12357519, true);
1024 SetTrieValue(hTrie, "royalblue", any:4286945, true);
1025 SetTrieValue(hTrie, "saddlebrown", any:9127187, true);
1026 SetTrieValue(hTrie, "salmon", any:16416882, true);
1027 SetTrieValue(hTrie, "sandybrown", any:16032864, true);
1028 SetTrieValue(hTrie, "seagreen", any:3050327, true);
1029 SetTrieValue(hTrie, "seashell", any:16774638, true);
1030 SetTrieValue(hTrie, "selfmade", any:7385162, true);
1031 SetTrieValue(hTrie, "sienna", any:10506797, true);
1032 SetTrieValue(hTrie, "silver", any:12632256, true);
1033 SetTrieValue(hTrie, "skyblue", any:8900331, true);
1034 SetTrieValue(hTrie, "slateblue", any:6970061, true);
1035 SetTrieValue(hTrie, "slategray", any:7372944, true);
1036 SetTrieValue(hTrie, "slategrey", any:7372944, true);
1037 SetTrieValue(hTrie, "snow", any:16775930, true);
1038 SetTrieValue(hTrie, "springgreen", any:65407, true);
1039 SetTrieValue(hTrie, "steelblue", any:4620980, true);
1040 SetTrieValue(hTrie, "strange", any:13593138, true);
1041 SetTrieValue(hTrie, "tan", any:13808780, true);
1042 SetTrieValue(hTrie, "teal", any:32896, true);
1043 SetTrieValue(hTrie, "thistle", any:14204888, true);
1044 SetTrieValue(hTrie, "tomato", any:16737095, true);
1045 SetTrieValue(hTrie, "turquoise", any:4251856, true);
1046 SetTrieValue(hTrie, "uncommon", any:11584473, true);
1047 SetTrieValue(hTrie, "unique", any:16766720, true);
1048 SetTrieValue(hTrie, "unusual", any:8802476, true);
1049 SetTrieValue(hTrie, "valve", any:10817401, true);
1050 SetTrieValue(hTrie, "vintage", any:4678289, true);
1051 SetTrieValue(hTrie, "violet", any:15631086, true);
1052 SetTrieValue(hTrie, "wheat", any:16113331, true);
1053 SetTrieValue(hTrie, "white", any:16777215, true);
1054 SetTrieValue(hTrie, "whitesmoke", any:16119285, true);
1055 SetTrieValue(hTrie, "yellow", any:16776960, true);
1056 SetTrieValue(hTrie, "yellowgreen", any:10145074, true);
1057 return hTrie;
1058}
1059
1060void:C_PrintToChat(client, String:szMessage[])
1061{
1062 new var1;
1063 if (client <= 0 || client > MaxClients)
1064 {
1065 ThrowError(sm_show_activity, client);
1066 }
1067 if (!IsClientInGame(client))
1068 {
1069 ThrowError("Client %d is not in game", client);
1070 }
1071 new String:szBuffer[252];
1072 new String:szCMessage[252];
1073 SetGlobalTransTarget(client);
1074 Format(szBuffer, 250, "\x01%s", szMessage);
1075 VFormat(szCMessage, 250, szBuffer, 3);
1076 new index = C_Format(szCMessage, 250, -1);
1077 if (index == -1)
1078 {
1079 PrintToChat(client, "%s", szCMessage);
1080 }
1081 else
1082 {
1083 C_SayText2(client, index, szCMessage);
1084 }
1085 return void:0;
1086}
1087
1088void:C_PrintToChatAll(String:szMessage[])
1089{
1090 new String:szBuffer[252];
1091 new i = 1;
1092 while (i <= MaxClients)
1093 {
1094 new var1;
1095 if (i > 0 && IsClientInGame(i) && !IsFakeClient(i) && !C_SkipList[i])
1096 {
1097 SetGlobalTransTarget(i);
1098 VFormat(szBuffer, 250, szMessage, 2);
1099 C_PrintToChat(i, "%s", szBuffer);
1100 }
1101 C_SkipList[i] = 0;
1102 i++;
1103 }
1104 return void:0;
1105}
1106
1107bool:C_ColorAllowed(C_Colors:color)
1108{
1109 if (!C_EventIsHooked)
1110 {
1111 C_SetupProfile();
1112 C_EventIsHooked = true;
1113 }
1114 return C_Profile_Colors[color];
1115}
1116
1117void:C_ReplaceColor(C_Colors:color, C_Colors:newColor)
1118{
1119 if (!C_EventIsHooked)
1120 {
1121 C_SetupProfile();
1122 C_EventIsHooked = true;
1123 }
1124 C_Profile_Colors[color] = C_Profile_Colors[newColor];
1125 C_Profile_TeamIndex[color] = C_Profile_TeamIndex[newColor];
1126 C_TagReqSayText2[color] = C_TagReqSayText2[newColor];
1127 Format(C_TagCode[color], 4, C_TagCode[newColor]);
1128 return void:0;
1129}
1130
1131C_Format(String:szMessage[], maxlength, author)
1132{
1133 if (!C_EventIsHooked)
1134 {
1135 C_SetupProfile();
1136 HookEvent("server_spawn", C_Event_MapStart, EventHookMode:2);
1137 C_EventIsHooked = true;
1138 }
1139 new iRandomPlayer = -1;
1140 if (GetEngineVersion() == 12)
1141 {
1142 Format(szMessage, maxlength, " %s", szMessage);
1143 }
1144 if (author != -1)
1145 {
1146 if (C_Profile_SayText2)
1147 {
1148 ReplaceString(szMessage, maxlength, "{teamcolor}", "\x03", false);
1149 iRandomPlayer = author;
1150 }
1151 else
1152 {
1153 ReplaceString(szMessage, maxlength, "{teamcolor}", C_TagCode[2], false);
1154 }
1155 }
1156 else
1157 {
1158 ReplaceString(szMessage, maxlength, "{teamcolor}", "", false);
1159 }
1160 new i;
1161 while (i < 18)
1162 {
1163 if (!(StrContains(szMessage, C_Tag[i], false) == -1))
1164 {
1165 if (!C_Profile_Colors[i])
1166 {
1167 ReplaceString(szMessage, maxlength, C_Tag[i], C_TagCode[2], false);
1168 }
1169 else
1170 {
1171 if (!C_TagReqSayText2[i])
1172 {
1173 ReplaceString(szMessage, maxlength, C_Tag[i], C_TagCode[i], false);
1174 }
1175 if (!C_Profile_SayText2)
1176 {
1177 ReplaceString(szMessage, maxlength, C_Tag[i], C_TagCode[2], false);
1178 }
1179 if (iRandomPlayer == -1)
1180 {
1181 iRandomPlayer = C_FindRandomPlayerByTeam(C_Profile_TeamIndex[i]);
1182 if (iRandomPlayer == -2)
1183 {
1184 ReplaceString(szMessage, maxlength, C_Tag[i], C_TagCode[2], false);
1185 }
1186 else
1187 {
1188 ReplaceString(szMessage, maxlength, C_Tag[i], C_TagCode[i], false);
1189 }
1190 }
1191 ThrowError("Using two team colors in one message is not allowed");
1192 }
1193 }
1194 i++;
1195 }
1196 return iRandomPlayer;
1197}
1198
1199C_FindRandomPlayerByTeam(color_team)
1200{
1201 if (color_team)
1202 {
1203 new i = 1;
1204 while (i <= MaxClients)
1205 {
1206 new var1;
1207 if (i > 0 && IsClientInGame(i) && color_team == GetClientTeam(i))
1208 {
1209 return i;
1210 }
1211 i++;
1212 }
1213 return -2;
1214 }
1215 return 0;
1216}
1217
1218void:C_SayText2(client, author, String:szMessage[])
1219{
1220 new Handle:hBuffer = StartMessageOne("SayText2", client, 132);
1221 new var1;
1222 if (GetFeatureStatus(FeatureType:0, "GetUserMessageType") && GetUserMessageType() == 1)
1223 {
1224 PbSetInt(hBuffer, "ent_idx", author, -1);
1225 PbSetBool(hBuffer, "chat", true, -1);
1226 PbSetString(hBuffer, "msg_name", szMessage, -1);
1227 PbAddString(hBuffer, "params", "");
1228 PbAddString(hBuffer, "params", "");
1229 PbAddString(hBuffer, "params", "");
1230 PbAddString(hBuffer, "params", "");
1231 }
1232 else
1233 {
1234 BfWriteByte(hBuffer, author);
1235 BfWriteByte(hBuffer, 1);
1236 BfWriteString(hBuffer, szMessage);
1237 }
1238 EndMessage();
1239 return void:0;
1240}
1241
1242void:C_SetupProfile()
1243{
1244 new EngineVersion:engine = GetEngineVersion();
1245 if (engine == EngineVersion:13)
1246 {
1247 C_Profile_Colors[3] = 1;
1248 C_Profile_Colors[4] = 1;
1249 C_Profile_Colors[5] = 1;
1250 C_Profile_Colors[6] = 1;
1251 C_Profile_TeamIndex[3] = 0;
1252 C_Profile_TeamIndex[4] = 2;
1253 C_Profile_TeamIndex[5] = 3;
1254 C_Profile_SayText2 = true;
1255 }
1256 else
1257 {
1258 if (engine == EngineVersion:12)
1259 {
1260 C_Profile_Colors[4] = 1;
1261 C_Profile_Colors[5] = 1;
1262 C_Profile_Colors[6] = 1;
1263 C_Profile_Colors[1] = 1;
1264 C_Profile_Colors[7] = 1;
1265 C_Profile_Colors[8] = 1;
1266 C_Profile_Colors[9] = 1;
1267 C_Profile_Colors[10] = 1;
1268 C_Profile_Colors[11] = 1;
1269 C_Profile_Colors[12] = 1;
1270 C_Profile_Colors[13] = 1;
1271 C_Profile_Colors[14] = 1;
1272 C_Profile_Colors[15] = 1;
1273 C_Profile_Colors[16] = 1;
1274 C_Profile_Colors[17] = 1;
1275 C_Profile_TeamIndex[4] = 2;
1276 C_Profile_TeamIndex[5] = 3;
1277 C_Profile_SayText2 = true;
1278 }
1279 if (engine == EngineVersion:17)
1280 {
1281 C_Profile_Colors[3] = 1;
1282 C_Profile_Colors[4] = 1;
1283 C_Profile_Colors[5] = 1;
1284 C_Profile_Colors[6] = 1;
1285 C_Profile_TeamIndex[3] = 0;
1286 C_Profile_TeamIndex[4] = 2;
1287 C_Profile_TeamIndex[5] = 3;
1288 C_Profile_SayText2 = true;
1289 }
1290 new var1;
1291 if (engine == EngineVersion:4 || engine == EngineVersion:7)
1292 {
1293 C_Profile_Colors[3] = 1;
1294 C_Profile_Colors[4] = 1;
1295 C_Profile_Colors[5] = 1;
1296 C_Profile_Colors[6] = 1;
1297 C_Profile_TeamIndex[3] = 0;
1298 C_Profile_TeamIndex[4] = 3;
1299 C_Profile_TeamIndex[5] = 2;
1300 C_Profile_SayText2 = true;
1301 }
1302 if (engine == EngineVersion:15)
1303 {
1304 if (GetConVarBool(FindConVar("mp_teamplay")))
1305 {
1306 C_Profile_Colors[4] = 1;
1307 C_Profile_Colors[5] = 1;
1308 C_Profile_Colors[6] = 1;
1309 C_Profile_TeamIndex[4] = 3;
1310 C_Profile_TeamIndex[5] = 2;
1311 C_Profile_SayText2 = true;
1312 }
1313 else
1314 {
1315 C_Profile_SayText2 = false;
1316 C_Profile_Colors[6] = 1;
1317 }
1318 }
1319 if (engine == EngineVersion:16)
1320 {
1321 C_Profile_Colors[6] = 1;
1322 C_Profile_SayText2 = false;
1323 }
1324 if (GetUserMessageId("SayText2") == -1)
1325 {
1326 C_Profile_SayText2 = false;
1327 }
1328 C_Profile_Colors[4] = 1;
1329 C_Profile_Colors[5] = 1;
1330 C_Profile_TeamIndex[4] = 2;
1331 C_Profile_TeamIndex[5] = 3;
1332 C_Profile_SayText2 = true;
1333 }
1334 return void:0;
1335}
1336
1337public Action:C_Event_MapStart(Event:event, String:name[], bool:dontBroadcast)
1338{
1339 C_SetupProfile();
1340 new i = 1;
1341 while (i <= MaxClients)
1342 {
1343 C_SkipList[i] = 0;
1344 i++;
1345 }
1346 return Action:0;
1347}
1348
1349void:CPrintToChat(client, String:message[])
1350{
1351 new String:buffer[252];
1352 VFormat(buffer, 250, message, 3);
1353 if (!g_bCFixColors)
1354 {
1355 CFixColors();
1356 }
1357 if (!IsSource2009())
1358 {
1359 C_PrintToChat(client, "%s", buffer);
1360 }
1361 else
1362 {
1363 MC_PrintToChat(client, "%s", buffer);
1364 }
1365 return void:0;
1366}
1367
1368void:CPrintToChatAll(String:message[])
1369{
1370 new String:buffer[252];
1371 VFormat(buffer, 250, message, 2);
1372 if (!g_bCFixColors)
1373 {
1374 CFixColors();
1375 }
1376 if (!IsSource2009())
1377 {
1378 C_PrintToChatAll("%s", buffer);
1379 }
1380 else
1381 {
1382 MC_PrintToChatAll("%s", buffer);
1383 }
1384 return void:0;
1385}
1386
1387void:CFixColors()
1388{
1389 g_bCFixColors = true;
1390 if (!C_ColorAllowed(C_Colors:3))
1391 {
1392 if (C_ColorAllowed(C_Colors:7))
1393 {
1394 C_ReplaceColor(C_Colors:3, C_Colors:7);
1395 }
1396 if (C_ColorAllowed(C_Colors:6))
1397 {
1398 C_ReplaceColor(C_Colors:3, C_Colors:6);
1399 }
1400 }
1401 return void:0;
1402}
1403
1404bool:IsSource2009()
1405{
1406 new var1;
1407 if (GetEngineVersion() == 13 || GetEngineVersion() == 15 || GetEngineVersion() == 16 || GetEngineVersion() == 17)
1408 {
1409 return true;
1410 }
1411 return false;
1412}
1413
1414bool:IsValidPlayer(client)
1415{
1416 new var1;
1417 if (client > 0 && client <= 65 && IsClientConnected(client) && IsClientInGame(client) && !IsFakeClient(client))
1418 {
1419 return true;
1420 }
1421 return false;
1422}
1423
1424public void:CSGO_PrintToChat(iClient, String:sMsg[])
1425{
1426 new String:sBuffer[512];
1427 strcopy(sBuffer, 512, sMsg);
1428 new String:sBuffer2[512];
1429 VFormat(sBuffer2, 512, sBuffer, 3);
1430 ReplaceString(sBuffer2, 512, "{white}", "\x01", false);
1431 ReplaceString(sBuffer2, 512, "{red}", "\x02", false);
1432 ReplaceString(sBuffer2, 512, "{purple}", "\x03", false);
1433 ReplaceString(sBuffer2, 512, "{green}", "\x04", false);
1434 ReplaceString(sBuffer2, 512, "{lgreen}", "\x05", false);
1435 ReplaceString(sBuffer2, 512, "{lime}", "\x06", false);
1436 ReplaceString(sBuffer2, 512, "{lred}", "\x07", false);
1437 ReplaceString(sBuffer2, 512, "{gray}", "\x08", false);
1438 ReplaceString(sBuffer2, 512, "{yellow}", "\x09", false);
1439 ReplaceString(sBuffer2, 512, "{orange}", "\x10", false);
1440 ReplaceString(sBuffer2, 512, "{grayblue}", "\n", false);
1441 ReplaceString(sBuffer2, 512, "{lblue}", "\x0B", false);
1442 ReplaceString(sBuffer2, 512, "{blue}", "\x0C", false);
1443 ReplaceString(sBuffer2, 512, "{pink}", "\x0E", false);
1444 ReplaceString(sBuffer2, 512, "{lred2}", "\x0F", false);
1445 PrintToChat(iClient, " %s", sBuffer2);
1446 return void:0;
1447}
1448
1449public __pl_lastrequest_SetNTVOptional()
1450{
1451 MarkNativeAsOptional("IsClientRebel");
1452 MarkNativeAsOptional("IsClientInLastRequest");
1453 MarkNativeAsOptional("IsLastRequestAvailable");
1454 MarkNativeAsOptional("AddLastRequestToList");
1455 MarkNativeAsOptional("RemoveLastRequestFromList");
1456 MarkNativeAsOptional("ProcessAllLastRequests");
1457 MarkNativeAsOptional("ChangeRebelStatus");
1458 MarkNativeAsOptional("InitializeLR");
1459 MarkNativeAsOptional("CleanupLR");
1460 return 0;
1461}
1462
1463public bool:Trace_FilterNothing(entity, contentsMask)
1464{
1465 return entity == 0;
1466}
1467
1468public void:OnPluginStart()
1469{
1470 LoadTranslations("csgotokens_ws.phrases");
1471 HookEvent("round_start", roundStart, EventHookMode:1);
1472 HookEvent("round_end", Event_RoundEnd, EventHookMode:1);
1473 RegConsoleCmd("sm_ws", Command_WS, "", 0);
1474 RegConsoleCmd("sm_wp", Command_WS, "", 0);
1475 RegConsoleCmd("sm_weaponskins", Command_WS, "", 0);
1476 RegConsoleCmd("sm_weaponskin", Command_WS, "", 0);
1477 RegConsoleCmd("sm_farba", Command_WS, "", 0);
1478 RegConsoleCmd("sm_farby", Command_WS, "", 0);
1479 RegConsoleCmd("sm_paints", Command_WS, "", 0);
1480 RegConsoleCmd("sm_pattern", Command_Pattern, "", 0);
1481 RegConsoleCmd("sm_wzor", Command_Pattern, "", 0);
1482 RegConsoleCmd("sm_stattrak", Command_ST, "", 0);
1483 RegConsoleCmd("sm_stattrack", Command_ST, "", 0);
1484 RegConsoleCmd("sm_statrack", Command_ST, "", 0);
1485 RegConsoleCmd("sm_statrak", Command_ST, "", 0);
1486 RegConsoleCmd("sm_nametag", Command_Nametag, "", 0);
1487 cvar_jakosc = CreateConVar("ws_quality_non_vip", "1", "skin quality for non-vip players (1 - best, 99 - worst). Default VIP flag is 'a'. You can override it by overriding 'ws_vip' command", 0, true, 1.0, true, 99.0);
1488 g_jakosc = float(GetConVarInt(cvar_jakosc)) / 100.0;
1489 cvar_jezyk = CreateConVar("ws_language", "1", "language of skins in main menu - !ws (0 = PL, 1 = EN)", 0, true, 0.0, true, 1.0);
1490 g_jezyk = GetConVarInt(cvar_jezyk);
1491 cvar_search_jezyk = CreateConVar("ws_search_language", "2", "language to search skin - !ws <name/weapon/case> (0 = PL + EN, 1 = PL, 2 = EN)", 0, true, 0.0, true, 2.0);
1492 g_search_jezyk = GetConVarInt(cvar_search_jezyk);
1493 cvar_menu = CreateConVar("ws_search_menu", "1", "0 - chage to first found skin, 1 - show list of all found skin", 0, true, 0.0, true, 1.0);
1494 g_wyszukiwanie_menu = GetConVarInt(cvar_menu);
1495 cvar_pattern_vip = CreateConVar("ws_pattern_vip", "0", "0 - everyone can change pattern, 1 - only vip can change pattern", 0, true, 0.0, true, 1.0);
1496 g_pattern_vip = GetConVarInt(cvar_pattern_vip);
1497 cvar_stattrak_vip = CreateConVar("ws_stattrak_vip", "0", "0 - everyone can use stattrak, 1 - only vip can use stattrak", 0, true, 0.0, true, 1.0);
1498 g_stattrak_vip = GetConVarInt(cvar_stattrak_vip);
1499 cvar_countdown = CreateConVar("ws_countdown", "4", "countdown to use !ws <name/weapon/case> again", 0, true, 1.0, true, 10.0);
1500 g_countdown = float(GetConVarInt(cvar_countdown));
1501 cvar_zombiesv = CreateConVar("ws_zombiesv", "0", "if you got any problems - change that setting :)", 0, true, 0.0, true, 1.0);
1502 zombiesv = GetConVarInt(cvar_zombiesv);
1503 cvar_db_clean = CreateConVar("ws_db_days", "0", "days after unused DB records will be deleted. 0 = never", 0, true, 0.0, true, 360.0);
1504 g_db_clean = GetConVarInt(cvar_db_clean);
1505 cvar_extended_view = CreateConVar("ws_extended_view", "1", "0 - show only weapon name, 1 - show weapon and case name", 0, true, 0.0, true, 1.0);
1506 g_extended_view = GetConVarInt(cvar_extended_view);
1507 cvar_best_weapon = CreateConVar("ws_select_best_weapon", "0", "1 - after player spawn automatically select best weapon from player eq (pistol or rifle)", 0, true, 0.0, true, 1.0);
1508 g_best_weapon = GetConVarInt(cvar_best_weapon);
1509 cvar_nametag_vip = CreateConVar("ws_nametag_vip", "0", "0 - everyone can set nametag, 1 - only VIP can set nametag", 0, true, 0.0, true, 1.0);
1510 g_nametag_vip = GetConVarInt(cvar_nametag_vip);
1511 HookEvent("player_death", Event_PlayerDeath, EventHookMode:1);
1512 HookEvent("player_disconnect", Event_PlayerDisconnect, EventHookMode:0);
1513 HookEvent("player_spawn", HookPlayerSpawn, EventHookMode:1);
1514 new client = 1;
1515 while (client <= MaxClients)
1516 {
1517 if (IsClientInGame(client))
1518 {
1519 OnClientPutInServer(client);
1520 }
1521 client++;
1522 }
1523 if (!g_dbConnected)
1524 {
1525 DB_Connect(true);
1526 }
1527 CreateTimer(0.1, SprawdzLicencjeTimer, any:0, 0);
1528 LogToken("Starting plugin ver: %d", ver);
1529 return void:0;
1530}
1531
1532public APLRes:AskPluginLoad2(Handle:myself, bool:late, String:error[], err_max)
1533{
1534 MarkNativeAsOptional("IsClientInLastRequest");
1535 return APLRes:0;
1536}
1537
1538public void:OnLibraryAdded(String:name[])
1539{
1540 if (StrEqual(name, "hosties", true))
1541 {
1542 hosties = true;
1543 }
1544 return void:0;
1545}
1546
1547public void:OnLibraryRemoved(String:name[])
1548{
1549 if (StrEqual(name, "hosties", true))
1550 {
1551 hosties = false;
1552 }
1553 return void:0;
1554}
1555
1556public void:OnMapStart()
1557{
1558 AutoExecConfig(true, "csgotokens_ws", "sourcemod");
1559 g_jakosc = float(GetConVarInt(cvar_jakosc)) / 100.0;
1560 g_wyszukiwanie_menu = GetConVarInt(cvar_menu);
1561 g_pattern_vip = GetConVarInt(cvar_pattern_vip);
1562 g_countdown = float(GetConVarInt(cvar_countdown));
1563 g_stattrak_vip = GetConVarInt(cvar_stattrak_vip);
1564 zombiesv = GetConVarInt(cvar_zombiesv);
1565 g_jezyk = GetConVarInt(cvar_jezyk);
1566 g_search_jezyk = GetConVarInt(cvar_search_jezyk);
1567 g_extended_view = GetConVarInt(cvar_extended_view);
1568 g_db_clean = GetConVarInt(cvar_db_clean);
1569 g_best_weapon = GetConVarInt(cvar_best_weapon);
1570 g_nametag_vip = GetConVarInt(cvar_nametag_vip);
1571 ostatnie_zapytanie = 0;
1572 if (!licencja)
1573 {
1574 CreateTimer(0.1, SprawdzLicencjeTimer, any:0, 0);
1575 }
1576 new i;
1577 while (i < 16)
1578 {
1579 new x;
1580 while (x < 2)
1581 {
1582 gI_KnifeIndexes[i][x] = PrecacheModel(gC_Knives[i][x + 2], false);
1583 x++;
1584 }
1585 i++;
1586 }
1587 return void:0;
1588}
1589
1590public void:OnConfigsExecuted()
1591{
1592 GameRules_SetProp("m_bIsQuestEligible", any:1, 4, 0, false);
1593 return void:0;
1594}
1595
1596public void:OnClientDisconnect(client)
1597{
1598 if (arbol[client])
1599 {
1600 ClearTrie(arbol[client]);
1601 CloseHandle(arbol[client]);
1602 arbol[client] = 0;
1603 }
1604 return void:0;
1605}
1606
1607public Action:roundStart(Handle:event, String:name[], bool:dontBroadcast)
1608{
1609 SprawdzLic(0);
1610 return Action:0;
1611}
1612
1613public Action:Event_RoundEnd(Handle:event, String:name[], bool:dontBroadcast)
1614{
1615 new i = 1;
1616 while (i <= MaxClients)
1617 {
1618 new var1;
1619 if (IsClientInGame(i) && !IsFakeClient(i))
1620 {
1621 new var2;
1622 if (IsPlayerVIP(i) || g_stattrak_vip)
1623 {
1624 DB_ZapiszStatTrak(i);
1625 }
1626 }
1627 i++;
1628 }
1629 return Action:0;
1630}
1631
1632public Action:Event_PlayerDeath(Handle:event, String:name[], bool:dontBroadcast)
1633{
1634 new attacker = GetClientOfUserId(GetEventInt(event, "attacker", 0));
1635 if (!IsValidPlayer(attacker))
1636 {
1637 return Action:0;
1638 }
1639 new var1;
1640 if (!IsPlayerVIP(attacker) && g_stattrak_vip == 1)
1641 {
1642 return Action:0;
1643 }
1644 new entity = GetEntPropEnt(attacker, PropType:0, "m_hActiveWeapon", 0);
1645 if (!IsValidEntity(entity))
1646 {
1647 return Action:0;
1648 }
1649 new id_broni = GetEntProp(entity, PropType:0, "m_iItemDefinitionIndex", 4, 0);
1650 if (id_broni > 100)
1651 {
1652 id_broni = 0;
1653 }
1654 if (0 <= skiny_stattrak[attacker][id_broni])
1655 {
1656 skiny_stattrak_temp[attacker][id_broni] += 1;
1657 skiny_stattrak[attacker][id_broni] += 1;
1658 }
1659 return Action:0;
1660}
1661
1662public Action:Event_PlayerDisconnect(Handle:event, String:name[], bool:dontBroadcast)
1663{
1664 new client = GetClientOfUserId(GetEventInt(event, "userid", 0));
1665 new var2;
1666 if (IsValidPlayer(client) && (IsPlayerVIP(client) || g_stattrak_vip))
1667 {
1668 DB_ZapiszStatTrak(client);
1669 }
1670 new id_broni;
1671 while (id_broni < 100)
1672 {
1673 skiny_gracza[client][id_broni] = -1;
1674 skiny_stattrak[client][id_broni] = -1;
1675 skiny_seed[client][id_broni] = 0;
1676 id_broni++;
1677 }
1678 return Action:0;
1679}
1680
1681public void:OnMapEnd()
1682{
1683 return void:0;
1684}
1685
1686void:ChangePaint(entity, id_broni, client)
1687{
1688 if (!IsValidEntity(entity))
1689 {
1690 return void:0;
1691 }
1692 if (id_broni >= 500)
1693 {
1694 id_broni = 0;
1695 }
1696 if (0 >= skiny_gracza[client][id_broni])
1697 {
1698 return void:0;
1699 }
1700 SetEntProp(entity, PropType:0, "m_nFallbackPaintKit", skiny_gracza[client][id_broni], 4, 0);
1701 SetEntProp(entity, PropType:0, "m_iItemIDLow", any:2048, 4, 0);
1702 SetEntProp(entity, PropType:0, "m_iItemIDHigh", any:0, 4, 0);
1703 SetEntProp(entity, PropType:0, "m_nFallbackSeed", skiny_seed[client][id_broni], 4, 0);
1704 if (adi_debug)
1705 {
1706 PrintToChat(client, "id broni: %d, entity: %d, id skina", id_broni, entity, skiny_gracza[client][id_broni]);
1707 }
1708 new var1;
1709 if ((IsPlayerVIP(client) || g_stattrak_vip) && skiny_stattrak[client][id_broni] >= 0)
1710 {
1711 SetEntProp(entity, PropType:0, "m_nFallbackStatTrak", skiny_stattrak[client][id_broni], 4, 0);
1712 SetEntProp(entity, PropType:0, "m_iAccountID", GetSteamAccountID(client, true), 4, 0);
1713 }
1714 new var3;
1715 if ((IsPlayerVIP(client) || g_nametag_vip) && strlen(skiny_nametag[client][id_broni]) > 1)
1716 {
1717 SetEntDataString(entity, FindSendPropInfo("CBaseAttributableItem", "m_szCustomName", 0, 0, 0), skiny_nametag[client][id_broni], 40, false);
1718 }
1719 if (IsPlayerVIP(client))
1720 {
1721 SetEntPropFloat(entity, PropType:0, "m_flFallbackWear", 1.0E-5, 0);
1722 }
1723 else
1724 {
1725 SetEntPropFloat(entity, PropType:0, "m_flFallbackWear", g_jakosc, 0);
1726 }
1727 new var5;
1728 if (powtorz[client] && zombiesv)
1729 {
1730 new DataPack:pack;
1731 Handler_TimeraMalujacego[client] = CreateDataTimer(0.0, Timer_Malujacy, pack, 0);
1732 DataPack.WriteCell(pack, client);
1733 DataPack.WriteCell(pack, entity);
1734 }
1735 powtorz[client] = 0;
1736 if (!licencja)
1737 {
1738 if (g_jezyk == 1)
1739 {
1740 CPrintToChat(client, "%s Brak licencji na WS. Aby zdobyc licencje skorzystaj z tokenow {green}csgotokens.com", "[{green}WS{default}]{lightgreen}");
1741 }
1742 CPrintToChat(client, "%s No license for WS. Use {green}csgotokens.com {default}to get license", "[{green}WS{default}]{lightgreen}");
1743 }
1744 return void:0;
1745}
1746
1747public Action:Timer_Malujacy(Handle:timer, Handle:pack)
1748{
1749 new entity;
1750 new client;
1751 ResetPack(pack, false);
1752 client = ReadPackCell(pack);
1753 entity = ReadPackCell(pack);
1754 if (!IsValidEntity(entity))
1755 {
1756 return Action:0;
1757 }
1758 DajSkina(client, entity);
1759 return Action:0;
1760}
1761
1762public void:OnClientPutInServer(client)
1763{
1764 countdown[client] = 0;
1765 DB_CzytajSkiny(client);
1766 if (!IsFakeClient(client))
1767 {
1768 SDKHook(client, SDKHookType:32, OnPostWeaponEquip);
1769 }
1770 return void:0;
1771}
1772
1773public Action:OnPostWeaponEquip(client, entity)
1774{
1775 if (0 < GetEntProp(entity, PropType:0, "m_hPrevOwner", 4, 0))
1776 {
1777 return Action:0;
1778 }
1779 new String:Classname[64];
1780 new var1;
1781 if (!GetEdictClassname(entity, Classname, 64) || StrEqual(Classname, "weapon_taser", true) || StrEqual(Classname, "weapon_c4", true))
1782 {
1783 return Action:0;
1784 }
1785 new weaponindex = GetEntProp(entity, PropType:0, "m_iItemDefinitionIndex", 4, 0);
1786 if (MogeNalozycPaint(weaponindex))
1787 {
1788 switch (weaponindex)
1789 {
1790 case 23:
1791 {
1792 strcopy(Classname, 64, "mp5sd");
1793 }
1794 case 60:
1795 {
1796 strcopy(Classname, 64, "m4a1_silencer");
1797 }
1798 case 61:
1799 {
1800 strcopy(Classname, 64, "usp_silencer");
1801 }
1802 case 63:
1803 {
1804 strcopy(Classname, 64, "cz75a");
1805 }
1806 case 64:
1807 {
1808 strcopy(Classname, 64, "revolver");
1809 }
1810 case 500:
1811 {
1812 strcopy(Classname, 64, "bayonet");
1813 }
1814 case 505:
1815 {
1816 strcopy(Classname, 64, "knife_flip");
1817 }
1818 case 506:
1819 {
1820 strcopy(Classname, 64, "knife_gut");
1821 }
1822 case 507:
1823 {
1824 strcopy(Classname, 64, "knife_karambit");
1825 }
1826 case 508:
1827 {
1828 strcopy(Classname, 64, "knife_m9_bayonet");
1829 }
1830 case 509:
1831 {
1832 strcopy(Classname, 64, "knife_tactical");
1833 }
1834 case 512:
1835 {
1836 strcopy(Classname, 64, "knife_falchion");
1837 }
1838 case 514:
1839 {
1840 strcopy(Classname, 64, "knife_survival_bowie");
1841 }
1842 case 515:
1843 {
1844 strcopy(Classname, 64, "knife_butterfly");
1845 }
1846 case 516:
1847 {
1848 strcopy(Classname, 64, "knife_push");
1849 }
1850 case 519:
1851 {
1852 strcopy(Classname, 64, "knife_ursus");
1853 }
1854 case 520:
1855 {
1856 strcopy(Classname, 64, "knife_gypsy_jackknife");
1857 }
1858 case 522:
1859 {
1860 strcopy(Classname, 64, "knife_stiletto");
1861 }
1862 case 523:
1863 {
1864 strcopy(Classname, 64, "knife_widowmaker");
1865 }
1866 default:
1867 {
1868 }
1869 }
1870 new bool:knife;
1871 switch (weaponindex)
1872 {
1873 case 500:
1874 {
1875 knife = true;
1876 }
1877 case 505:
1878 {
1879 knife = true;
1880 }
1881 case 506:
1882 {
1883 knife = true;
1884 }
1885 case 507:
1886 {
1887 knife = true;
1888 }
1889 case 508:
1890 {
1891 knife = true;
1892 }
1893 case 509:
1894 {
1895 knife = true;
1896 }
1897 case 512:
1898 {
1899 knife = true;
1900 }
1901 case 514:
1902 {
1903 knife = true;
1904 }
1905 case 515:
1906 {
1907 knife = true;
1908 }
1909 case 516:
1910 {
1911 knife = true;
1912 }
1913 case 519:
1914 {
1915 knife = true;
1916 }
1917 case 520:
1918 {
1919 knife = true;
1920 }
1921 case 522:
1922 {
1923 knife = true;
1924 }
1925 case 523:
1926 {
1927 knife = true;
1928 }
1929 default:
1930 {
1931 }
1932 }
1933 if (knife)
1934 {
1935 RequestFrame(RequestFrameCallback:145, EntIndexToEntRef(entity));
1936 }
1937 if (adi_debug)
1938 {
1939 PrintToChat(client, "entity: %d, weaponindex: %d, classname: %s, owner: %d", entity, weaponindex, Classname, GetEntProp(entity, PropType:0, "m_hPrevOwner", 4, 0));
1940 }
1941 ChangePaint(entity, weaponindex, client);
1942 return Action:0;
1943 }
1944 return Action:0;
1945}
1946
1947public Action:Command_WS(client, args)
1948{
1949 if (IsPlayerAlive(client))
1950 {
1951 new entity = GetEntPropEnt(client, PropType:0, "m_hActiveWeapon", 0);
1952 if (IsValidEntity(entity))
1953 {
1954 id_broni_martwy[client] = GetEntProp(entity, PropType:0, "m_iItemDefinitionIndex", 4, 0);
1955 }
1956 if (0 < args)
1957 {
1958 if (0 < countdown[client])
1959 {
1960 CPrintToChat(client, "%s %t", "[{green}WS{default}]{lightgreen}", "Za_Chwile");
1961 return Action:3;
1962 }
1963 countdown[client] = 1;
1964 CreateTimer(g_countdown, Timer_Countdown, client, 0);
1965 if (args == 1)
1966 {
1967 new String:arg1[32];
1968 GetCmdArg(1, arg1, 32);
1969 new var1;
1970 if (g_wyszukiwanie_menu == 1 && strlen(arg1) < 3)
1971 {
1972 CPrintToChat(client, "%s %t", "[{green}WS{default}]{lightgreen}", "Malo_Znakow");
1973 return Action:3;
1974 }
1975 ZnajdzIdSkina(client, arg1);
1976 }
1977 else
1978 {
1979 if (args == 2)
1980 {
1981 new String:arg1[32];
1982 GetCmdArg(1, arg1, 32);
1983 new String:arg2[32];
1984 GetCmdArg(2, arg2, 32);
1985 new String:nazwa_skina[32];
1986 Format(nazwa_skina, 32, "%s %s", arg1, arg2);
1987 ZnajdzIdSkina(client, nazwa_skina);
1988 }
1989 }
1990 }
1991 else
1992 {
1993 if (!args)
1994 {
1995 MenuSkiny(client, 0);
1996 }
1997 }
1998 return Action:3;
1999 }
2000 MenuBronie(client);
2001 return Action:3;
2002}
2003
2004public void:DajSkina(client, entity)
2005{
2006 if (!IsValidPlayer(client))
2007 {
2008 return void:0;
2009 }
2010 if (!IsPlayerAlive(client))
2011 {
2012 return void:0;
2013 }
2014 new var1;
2015 if (hosties && IsClientInLastRequest(client))
2016 {
2017 return void:0;
2018 }
2019 powtorz[client] = 1;
2020 new String:Classname[64];
2021 if (entity == -1)
2022 {
2023 entity = GetEntPropEnt(client, PropType:0, "m_hActiveWeapon", 0);
2024 }
2025 new var2;
2026 if (entity < 1 && !IsValidEntity(entity))
2027 {
2028 return void:0;
2029 }
2030 if (!HasEntProp(entity, PropType:0, "m_iItemDefinitionIndex"))
2031 {
2032 return void:0;
2033 }
2034 new var3;
2035 if (!GetEdictClassname(entity, Classname, 64) || StrEqual(Classname, "weapon_taser", true) || StrEqual(Classname, "weapon_c4", true) || StrContains(Classname, "grenade", false) >= 0 || StrContains(Classname, "decoy", false) >= 0 || StrContains(Classname, "molotov", false) >= 0 || StrContains(Classname, "flash", false) >= 0 || StrContains(Classname, "health", false) >= 0)
2036 {
2037 return void:0;
2038 }
2039 ReplaceString(Classname, 64, "weapon_", "", true);
2040 new id_broni = GetEntProp(entity, PropType:0, "m_iItemDefinitionIndex", 4, 0);
2041 new var4;
2042 if (id_broni == 42 || id_broni == 59)
2043 {
2044 return void:0;
2045 }
2046 new String:Classname2[64];
2047 Format(Classname2, 64, "weapon_%s", Classname);
2048 Restore(client, entity, Classname2, id_broni);
2049 FakeClientCommand(client, "use %s", Classname2);
2050 return void:0;
2051}
2052
2053void:Restore(client, windex, String:Classname[64], weaponindex)
2054{
2055 if (!IsValidPlayer(client))
2056 {
2057 return void:0;
2058 }
2059 new bool:knife;
2060 new var1;
2061 if (StrContains(Classname, "weapon_knife", false) && StrContains(Classname, "weapon_bayonet", false))
2062 {
2063 knife = true;
2064 }
2065 new ammo;
2066 new clip;
2067 if (!knife)
2068 {
2069 ammo = GetReserveAmmo(windex);
2070 clip = GetEntProp(windex, PropType:0, "m_iClip1", 4, 0);
2071 }
2072 RemovePlayerItem(client, windex);
2073 AcceptEntityInput(windex, "Kill", -1, -1, 0);
2074 new id_broni = GetEntProp(windex, PropType:0, "m_iItemDefinitionIndex", 4, 0);
2075 switch (id_broni)
2076 {
2077 case 60:
2078 {
2079 strcopy(Classname, 64, "weapon_m4a1_silencer");
2080 }
2081 case 61:
2082 {
2083 strcopy(Classname, 64, "weapon_usp_silencer");
2084 }
2085 case 63:
2086 {
2087 strcopy(Classname, 64, "weapon_cz75a");
2088 }
2089 case 64:
2090 {
2091 strcopy(Classname, 64, "weapon_revolver");
2092 }
2093 default:
2094 {
2095 }
2096 }
2097 new entity;
2098 new var2;
2099 if (zombiesv == 1 && knife)
2100 {
2101 entity = GivePlayerItem(client, "weapon_knife", 0);
2102 }
2103 else
2104 {
2105 entity = GivePlayerItem(client, Classname, 0);
2106 }
2107 if (knife)
2108 {
2109 new var3;
2110 if (weaponindex != 42 && weaponindex != 59 && zombiesv)
2111 {
2112 if (IsValidEntity(weaponindex))
2113 {
2114 EquipPlayerWeapon(client, entity);
2115 }
2116 }
2117 }
2118 else
2119 {
2120 SetReserveAmmo(entity, ammo);
2121 SetEntProp(entity, PropType:0, "m_iClip1", clip, 4, 0);
2122 }
2123 return void:0;
2124}
2125
2126GetReserveAmmo(weapon)
2127{
2128 new var1;
2129 if (!IsValidEntity(weapon) || !HasEntProp(weapon, PropType:0, "m_iPrimaryReserveAmmoCount"))
2130 {
2131 return -1;
2132 }
2133 new ammotype = GetEntProp(weapon, PropType:0, "m_iPrimaryReserveAmmoCount", 4, 0);
2134 if (ammotype == -1)
2135 {
2136 return -1;
2137 }
2138 return ammotype;
2139}
2140
2141SetReserveAmmo(weapon, ammo)
2142{
2143 if (0 <= ammo)
2144 {
2145 SetEntProp(weapon, PropType:0, "m_iPrimaryReserveAmmoCount", ammo, 4, 0);
2146 }
2147 return 0;
2148}
2149
2150public bool:DB_Connect(bool:first)
2151{
2152 new var1;
2153 if (db && g_dbConnected)
2154 {
2155 return true;
2156 }
2157 new String:error[256];
2158 if (SQL_CheckConfig("ws_csgotokens"))
2159 {
2160 db = SQL_Connect("ws_csgotokens", true, error, 255);
2161 }
2162 else
2163 {
2164 if (SQL_CheckConfig("csgotokens_ws"))
2165 {
2166 db = SQL_Connect("csgotokens_ws", true, error, 255);
2167 }
2168 db = SQL_Connect("default", true, error, 255);
2169 }
2170 if (db)
2171 {
2172 if (first)
2173 {
2174 Format(g_sqlBuffer, 2048, "CREATE TABLE IF NOT EXISTS `%s` (`accountID` int(11) NOT NULL, `id_broni` int(11) NOT NULL, `id_skina` int(11) NOT NULL DEFAULT '0', `stattrak` int(11) NOT NULL DEFAULT '0', `nametag` varchar(40) CHARACTER SET utf8 DEFAULT NULL, `seed` int(11) NOT NULL DEFAULT '0', `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY(`accountID`, `id_broni`));", "csgotokens_ws");
2175 SQL_FastQuery(db, g_sqlBuffer, -1);
2176 }
2177 g_dbConnected = true;
2178 return true;
2179 }
2180 g_dbConnected = false;
2181 LogToken("Could not connect: %s", error);
2182 return false;
2183}
2184
2185public SQLErrorCheckCallback(Handle:owner, Handle:hndl, String:error[], any:data)
2186{
2187 if (!StrEqual("", error, true))
2188 {
2189 db = MissingTAG:0;
2190 g_dbConnected = false;
2191 LogToken("Last Connect SQL Error: %s", error);
2192 }
2193 return 0;
2194}
2195
2196public void:ZapiszZmienneSkina(client, id_broni, id_skina, seed)
2197{
2198 if (id_broni > 100)
2199 {
2200 id_broni = 0;
2201 }
2202 skiny_gracza[client][id_broni] = id_skina;
2203 skiny_seed[client][id_broni] = seed;
2204 return void:0;
2205}
2206
2207public void:DB_ZapiszSkina(client, id_broni, id_skina, seed)
2208{
2209 if (DB_Connect(false))
2210 {
2211 new accountID = GetSteamAccountID(client, true);
2212 if (id_broni > 100)
2213 {
2214 id_broni = 0;
2215 }
2216 Format(g_sqlBuffer, 2048, "INSERT IGNORE INTO %s (accountID, id_broni, id_skina, seed) VALUES (%d, %d, %d, %d) ON DUPLICATE KEY UPDATE id_skina = %d, seed = %d;", "csgotokens_ws", accountID, id_broni, id_skina, seed, id_skina, seed);
2217 SQL_TQuery(db, SQLErrorCheckCallback, g_sqlBuffer, any:0, DBPriority:1);
2218 }
2219 return void:0;
2220}
2221
2222public void:DB_ZapiszStatTrak(client)
2223{
2224 if (DB_Connect(false))
2225 {
2226 new accountID = GetSteamAccountID(client, true);
2227 new bool:updejtowac;
2228 Format(g_sqlBuffer, 2048, "");
2229 new id_broni;
2230 while (id_broni < 100)
2231 {
2232 if (0 < skiny_stattrak_temp[client][id_broni])
2233 {
2234 Format(g_sqlBuffer, 2048, "UPDATE %s SET stattrak = stattrak + %d WHERE accountID = %d AND id_broni = %d; ", "csgotokens_ws", skiny_stattrak_temp[client][id_broni], accountID, id_broni);
2235 updejtowac = true;
2236 }
2237 skiny_stattrak_temp[client][id_broni] = 0;
2238 id_broni++;
2239 }
2240 new var1;
2241 if (updejtowac && DB_Connect(false))
2242 {
2243 SQL_TQuery(db, SQLErrorCheckCallback, g_sqlBuffer, any:0, DBPriority:1);
2244 }
2245 }
2246 return void:0;
2247}
2248
2249public void:DB_ZapiszNametag(client, id_broni, String:nametag[40])
2250{
2251 if (DB_Connect(false))
2252 {
2253 new accountID = GetSteamAccountID(client, true);
2254 ReplaceString(nametag, 40, "'", "", false);
2255 ReplaceString(nametag, 40, "\"", "", false);
2256 SQL_EscapeString(db, nametag, nametag, 40, 0);
2257 Format(g_sqlBuffer, 2048, "UPDATE %s SET nametag = '%s' WHERE accountID = %d AND id_broni = %d;", "csgotokens_ws", nametag, accountID, id_broni);
2258 SQL_TQuery(db, SQLErrorCheckCallback, g_sqlBuffer, any:0, DBPriority:1);
2259 }
2260 return void:0;
2261}
2262
2263public void:DB_CzytajSkiny(client)
2264{
2265 if (DB_Connect(false))
2266 {
2267 Format(g_sqlBuffer, 2048, "SELECT id_broni,id_skina,stattrak,seed,nametag FROM %s WHERE accountID = %d;", "csgotokens_ws", GetSteamAccountID(client, true));
2268 SQL_TQuery(db, Callback_CzytajSkiny, g_sqlBuffer, client, DBPriority:1);
2269 }
2270 return void:0;
2271}
2272
2273public void:Callback_CzytajSkiny(Handle:owner, Handle:query, String:error[], client)
2274{
2275 new var1;
2276 if (client && !IsClientConnected(client) && IsFakeClient(client))
2277 {
2278 return void:0;
2279 }
2280 if (query)
2281 {
2282 new id_broni;
2283 new id_skina;
2284 new stattrak;
2285 new seed;
2286 new String:nametag[40];
2287 while (SQL_FetchRow(query))
2288 {
2289 id_broni = SQL_FetchInt(query, 0, 0);
2290 id_skina = SQL_FetchInt(query, 1, 0);
2291 stattrak = SQL_FetchInt(query, 2, 0);
2292 seed = SQL_FetchInt(query, 3, 0);
2293 SQL_FetchString(query, 4, nametag, 40, 0);
2294 if (0 <= id_skina)
2295 {
2296 skiny_gracza[client][id_broni] = id_skina;
2297 }
2298 else
2299 {
2300 skiny_gracza[client][id_broni] = -1;
2301 }
2302 if (0 < stattrak)
2303 {
2304 skiny_stattrak[client][id_broni] = stattrak;
2305 }
2306 else
2307 {
2308 skiny_stattrak[client][id_broni] = -1;
2309 }
2310 if (0 < seed)
2311 {
2312 skiny_seed[client][id_broni] = seed;
2313 }
2314 else
2315 {
2316 skiny_seed[client][id_broni] = 0;
2317 }
2318 if (strlen(nametag) > 1)
2319 {
2320 }
2321 }
2322 return void:0;
2323 }
2324 LogToken("Query failed: (error: %s)", error);
2325 return void:0;
2326}
2327
2328public bool:ZnajdzIdSkina(client, String:nazwa_skina[32])
2329{
2330 if (ostatnie_zapytanie)
2331 {
2332 CPrintToChat(client, "%s %t", "[{green}WS{default}]{lightgreen}", "Za_Chwile");
2333 return false;
2334 }
2335 if (GetFeatureStatus(FeatureType:0, "SteamWorks_CreateHTTPRequest"))
2336 {
2337 PrintToServer("You need SteamWorks to use this plugin");
2338 LogToken("You need SteamWorks to use this plugin");
2339 ostatnie_zapytanie = 0;
2340 return false;
2341 }
2342 g_search_jezyk = GetConVarInt(cvar_search_jezyk);
2343 g_extended_view = GetConVarInt(cvar_extended_view);
2344 g_wyszukiwanie_menu = GetConVarInt(cvar_menu);
2345 ostatnie_zapytanie = client;
2346 new String:requestUrl[128];
2347 Format(requestUrl, 128, "http://csgotokens.com/api_skins.php?key=%s&ver=%d&menu=%d&jezyk=%d&s=%s", apikey, ver, g_wyszukiwanie_menu, g_search_jezyk, nazwa_skina);
2348 new Handle:request = SteamWorks_CreateHTTPRequest(EHTTPMethod:1, requestUrl);
2349 if (request)
2350 {
2351 SteamWorks_SetHTTPRequestGetOrPostParameter(request, "collectioncount", "1");
2352 SteamWorks_SetHTTPCallbacks(request, SteamWorksHTTPRequestCompleted:127, SteamWorksHTTPHeadersReceived:-1, SteamWorksHTTPDataReceived:-1, Handle:0);
2353 SteamWorks_SendHTTPRequest(request);
2354 return true;
2355 }
2356 PrintToServer("Failed to create HTTP request using url: %s", requestUrl);
2357 LogToken("Failed to create HTTP request using url: %s", requestUrl);
2358 ostatnie_zapytanie = 0;
2359 return false;
2360}
2361
2362public OnInfoReceived(Handle:request, bool:failure, bool:requestSuccessful, EHTTPStatusCode:statusCode, Handle:dataa)
2363{
2364 new var1;
2365 if (!failure && requestSuccessful && statusCode == EHTTPStatusCode:200)
2366 {
2367 SteamWorks_GetHTTPResponseBodyCallback(request, SteamWorksHTTPBodyCallback:67, any:0, Handle:0);
2368 }
2369 else
2370 {
2371 ostatnie_zapytanie = 0;
2372 }
2373 CloseHandle(request);
2374 return 0;
2375}