· 6 years ago · Dec 18, 2019, 08:10 AM
1#include <amxmodx>
2#include <sqlx>
3#include <cstrike>
4#include <csgo>
5#include <fun>
6/* DEFINES */
7#define TABLE_NAME "csgo_team"
8#define MAX_MEMBERS 5
9#define PREFIX "^1[^4dev^1]"
10/* DEFINE END*/
11
12/* MYSQL CONFIGS */
13new Host[] = "176.223.125.228"
14new User[] = "bskro_servercs"
15new Pass[] = "#zyp*a3PlBS6"
16new Db[] = "bskro_servercs"
17
18new MySQL_Query[512]
19new Handle:MySQL_Tuple
20new Handle:MySQL_Connection
21/* MYSQL END */
22
23
24/* TEAM VARS */
25
26new bool:g_bInTeam[33], g_sPlayerTeam[33][32], g_iPos[33];
27
28new g_sTeamName[33][32];
29new g_bNameValid[33];
30new g_iMemberCount[33];
31new g_sTeamMembers[33][5][32];
32new g_sRemoved[33][32];
33
34/* TEAM END */
35
36/* CVARS */
37
38new cvar_teamCost;
39
40new g_szHTML[364] = "http://csgrand.lt/forumasdbfgMJHGM/clan/";
41
42/* CVARDS END */
43
44
45public plugin_init()
46{
47 //Menu redirectas
48 register_clcmd( "say /team","Redirect" );
49 register_clcmd( "say_team /team","Redirect" );
50 register_clcmd( "say /clan","Redirect" );
51 register_clcmd( "say_team /clan","Redirect" );
52 register_clcmd( "say /team15","ShowTop" );
53 register_clcmd( "say_team /team15","ShowTop" );
54 register_clcmd( "say /clan15","ShowTop" );
55 register_clcmd( "say_team /clan15","ShowTop" );
56
57 //Cvarai
58 register_concmd("team_name", "TeamTag");
59 cvar_teamCost = register_cvar("go_teamcost", "100.0");
60
61 register_clcmd( "say /debug","Debug" );
62}
63
64public plugin_precache( )
65{
66 MySQL_Tuple = SQL_MakeDbTuple( Host, User, Pass, Db )
67 #if AMXX_VERSION_NUM >= 183
68 SQL_SetCharset(MySQL_Tuple,"utf8");
69 #endif
70
71 new ErrorCode
72 MySQL_Connection = SQL_Connect( MySQL_Tuple, ErrorCode, MySQL_Query, charsmax( MySQL_Query ) )
73
74 if( MySQL_Connection == Empty_Handle )
75 set_fail_state( MySQL_Query )
76
77 new szTables[640];
78 format(szTables, 640, "CREATE TABLE IF NOT EXISTS `%s` (username VARCHAR(128) COLLATE utf8_lithuanian_ci NOT NULL, team VARCHAR(128) COLLATE utf8_lithuanian_ci NOT NULL, position INT(1), PRIMARY KEY (username))", TABLE_NAME);
79 SQL_ThreadQuery( MySQL_Tuple, "SQL_TrashHandler", szTables)
80}
81
82public client_putinserver(id) {
83 g_bInTeam[id] = false;
84 g_sPlayerTeam[id] = "";
85 g_sTeamName[id] = "";
86 g_iPos[id] = 0;
87 g_iMemberCount[id] = 0;
88 g_bNameValid[id] = false;
89
90 SQL_Load(id);
91}
92public client_disconnected(id) {
93 g_bInTeam[id] = false;
94 g_sPlayerTeam[id] = "";
95 g_sTeamName[id] = "";
96 g_iPos[id] = 0;
97 g_iMemberCount[id] = 0;
98 g_bNameValid[id] = false;
99}
100
101public ShowTop(id) {
102 new szMotd[126];
103 formatex(szMotd, charsmax(szMotd), g_szHTML);
104 show_motd(id, szMotd, "Top 15 komandos");
105}
106
107public client_death(Killer, Victim, wpnindex, hitplace, TK)
108{
109 if(Killer == Victim) { return PLUGIN_CONTINUE; }
110 if(g_bInTeam[Victim]) { MySQL_UpdateSkill(Victim); }
111 if(g_bInTeam[Killer]) { MySQL_UpdateSkill(Killer); }
112}
113
114
115public MySQL_UpdateSkill( id ) {
116 new szName[32];
117 get_user_name(id, szName, 31);
118
119 formatex( MySQL_Query, charsmax( MySQL_Query ), "UPDATE `%s` SET `skill` = '%.2f' WHERE `username` = '%s'", TABLE_NAME, get_user_skill(id), get_user_name_sql(id))
120 SQL_ThreadQuery(MySQL_Tuple, "SQL_TrashHandler", MySQL_Query);
121}
122/*
123======
124MENIU PARINKIMAS PAGAL NARIO STATUSA [Be komandos, komandoje, lyderis]
125======
126*/
127
128public Redirect(id) {
129 switch(g_bInTeam[id]) {
130 case false: {
131 CreateMenu(id);
132 }
133 case true: {
134 SQL_Count(id);
135 switch(g_iPos[id]) {
136 case 0: {
137 MemberMenu(id);
138 }
139 case 1: {
140 LeaderMenu(id);
141 }
142 }
143 }
144 }
145 return PLUGIN_HANDLED;
146}
147
148/*
149======
150KOMANDOS KURIMO MENIU
151
152Komandos kūrimas [Kaina: x] || X = cvar_teamCost
153
1541. Komandos pavadinimas:
1552. Kurti!
156
157
1580. Exit
159======
160*/
161
162//========================
163
164public CreateMenu(id) {
165 new menu, szText[256];
166 new Float:Cost = get_pcvar_float(cvar_teamCost);
167 formatex(szText, sizeof(szText), "\wCreate Team [Cost: %.2f Eur.]", Cost);
168 menu = menu_create(szText, "create_handler");
169
170 formatex(szText, sizeof(szText), "\wTeam Name: %s", g_sTeamName[id]);
171 menu_additem(menu, szText);
172 menu_additem(menu, "Create!")
173 menu_setprop(menu, MPROP_EXITNAME, "\wExit")
174 menu_display( id, menu, 0 );
175}
176
177public create_handler( id, menu, item )
178{
179 //Do a check to see if they exited because menu_item_getinfo ( see below ) will give an error if the item is MENU_EXIT
180 if ( item == MENU_EXIT )
181 {
182 menu_destroy( menu );
183 return PLUGIN_HANDLED;
184 }
185 new Float:Cost = get_pcvar_float(cvar_teamCost);
186 switch(item) {
187 case 0: {
188 client_cmd(id, "messagemode team_name");
189 CreateMenu(id);
190 }
191 case 1: {
192 if(get_user_euro(id) >= Cost) {
193 SQL_IsNameValid(id);
194 if(g_bNameValid[id]) {
195 g_sPlayerTeam[id] = g_sTeamName[id];
196 g_iPos[id] = 1;
197 g_bInTeam[id] = true;
198 set_user_euro(id, get_user_euro(id) - Cost);
199 client_print_color(id, print_team_default, "%s You've successfuly created ^4%s ^1team.", PREFIX, g_sPlayerTeam[id])
200 SQL_AddMember(id);
201 }
202 else {
203 client_print(id, print_center, "Name is taken!")
204 CreateMenu(id);
205 }
206 }
207 else {
208 client_print_color(id, print_team_default, "%s Not enough euro to create team.", PREFIX)
209 }
210 }
211 }
212
213
214 menu_destroy( menu );
215 return PLUGIN_HANDLED;
216}
217
218public TeamTag(id)
219{
220 new Data[32];
221 read_args(Data, 31);
222 remove_quotes(Data);
223
224 if(strlen(Data) < 2) {
225 client_print(id, print_center, "Name too short! Min. 2 symbols")
226 }
227 else {
228 g_sTeamName[id] = Data;
229 CreateMenu(id);
230 SQL_IsNameValid(id);
231 }
232 return PLUGIN_HANDLED;
233}
234
235//========================
236/*
237======
238KOMANDOS LYDERIO MENIU
239
240Y Komanda || Y = Komandos pavadinimas
241
2421. Nariai [0/5]
2432. Pakviesti žaidėją
2443. Išmesti narį
2454. Ištrinti komandą
246
2470. Exit
248======
249*/
250
251public LeaderMenu(id) {
252 new menu, szText[256];
253 formatex(szText, sizeof(szText), "\r%s \wteam", g_sPlayerTeam[id]);
254 menu = menu_create(szText, "leader_handler");
255
256 formatex(szText, sizeof(szText), "\wMembers: [%d/5]", g_iMemberCount[id]);
257 menu_additem(menu, szText);
258 menu_additem(menu, "\wInvite Player");
259 menu_additem(menu, "\wKick Member");
260 menu_additem(menu, "\yTop Teams^n\r----------------------------");
261 menu_additem(menu, "\rDelete Team");
262 menu_setprop(menu, MPROP_EXITNAME, "\wExit");
263 menu_display( id, menu, 0 );
264}
265
266public leader_handler( id, menu, item )
267{
268 if ( item == MENU_EXIT )
269 {
270 menu_destroy( menu );
271 return PLUGIN_HANDLED;
272 }
273
274 switch(item) {
275 case 0: {
276 MembersList(id);
277 }
278
279 case 1: {
280 InvitePlayer(id);
281 }
282 case 2: {
283 RemoveMember(id);
284 }
285 case 3: {
286 ShowTop(id);
287 Redirect(id);
288 }
289 case 4: {
290 SQL_DeleteTeam(id);
291 g_bInTeam[id] = false;
292 g_sPlayerTeam[id] = "";
293 g_iPos[id] = 0;
294 Redirect(id);
295 }
296 }
297 return PLUGIN_HANDLED;
298}
299
300//=============
301
302//NARIU SARASAS
303
304public MembersList(id) {
305 new menu, szText[256];
306 formatex(szText, sizeof(szText), "\r%s \wTeam Members", g_sPlayerTeam[id]);
307 menu = menu_create(szText, "member_handler");
308
309 for(new i = 0; i < g_iMemberCount[id]; i++) {
310 formatex(szText, sizeof(szText), "%s %s", g_sTeamMembers[id][i], (i == 0) ? "\r[Leader]\w" : "");
311 menu_additem(menu, szText, g_sTeamMembers[id][i], 0);
312 }
313
314
315 menu_setprop(menu, MPROP_EXITNAME, "\wExit")
316 menu_display( id, menu, 0 );
317}
318
319public member_handler(id, menu, item) {
320 if ( item == MENU_EXIT )
321 {
322 menu_destroy( menu );
323 return PLUGIN_HANDLED;
324 }
325
326 LeaderMenu(id);
327 return PLUGIN_HANDLED;
328}
329
330//============
331
332//ZAIDEJU SARASAS PAKVIETIMAMS
333
334
335public InvitePlayer(id)
336{
337 if(get_playersnum() < 2) {
338 LeaderMenu(id);
339 return PLUGIN_HANDLED;
340 }
341
342 new menu = menu_create( "\wInvite Player:", "invite_handler" );
343 new players[32], pnum, tempid, szText[256];
344 get_players( players, pnum, "ch" )
345 for ( new i; i < pnum; i++ )
346 {
347 tempid = players[i];
348
349 if(id == tempid || g_bInTeam[tempid])
350 continue;
351
352 formatex(szText, sizeof(szText), "%s", get_user_name_ex(tempid));
353 menu_additem(menu, szText, get_user_name_ex(tempid), 0);
354 }
355 menu_setprop(menu, MPROP_EXITNAME, "\wExit")
356 menu_display( id, menu, 0 );
357
358 return PLUGIN_HANDLED;
359}
360
361public invite_handler( id, menu, item )
362{
363 if ( item == MENU_EXIT )
364 {
365 menu_destroy( menu );
366 return PLUGIN_HANDLED;
367 }
368
369 new szData[64], szName[64];
370 new _access, item_callback;
371 menu_item_getinfo( menu, item, _access, szData,charsmax( szData ), szName,charsmax( szName ), item_callback );
372
373 client_print_color(id, print_team_default, "%s Invitation has been sent to ^4%s^1.", PREFIX, szData);
374
375 new player_id = find_player("a", szData);
376
377 Invitation(id, player_id);
378 menu_destroy( menu );
379 Redirect(id);
380 return PLUGIN_HANDLED;
381}
382
383//ZAIDEJU SARASAS PAKVIETIMAMAS
384
385//PAKVIETIMAS
386
387public Invitation(id, target)
388{
389 new szText[64], szName[32]
390 get_user_name(id, szName, charsmax(szName))
391 formatex(szText, charsmax(szText), "\w%s Invited you to join \r%s \wteam.", get_user_name_ex(id), g_sPlayerTeam[id])
392 new menu = menu_create(szText, "invitation_handler");
393
394 formatex(szText, charsmax(szText), "JOIN|%d", id)
395 menu_additem(menu, "Accept!", szText)
396 menu_additem(menu, "Decline!", szText)
397
398 menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER)
399 menu_display(target, menu, 0)
400}
401
402public invitation_handler(id, menu, item)
403{
404 if(item == MENU_EXIT)
405 {
406 menu_destroy(menu);
407 return PLUGIN_HANDLED;
408 }
409
410 new sData[12], paccess, iCallback;
411 menu_item_getinfo(menu, item, paccess, sData, charsmax(sData), "", 0, iCallback)
412 menu_destroy(menu)
413
414 if(equal(sData, "JOIN", 4))
415 {
416 strtok(sData, "", 0, sData, charsmax(sData), '|')
417 new player = str_to_num(sData);
418 if(!is_user_connected(player)) return PLUGIN_HANDLED;
419
420 switch( item )
421 {
422 case 0:
423 {
424 g_bInTeam[id] = true;
425 g_sPlayerTeam[id] = g_sPlayerTeam[player];
426 g_iPos[id] = 0;
427 client_print_color(player, print_team_default, "%s ^3%s ^1has joined ^4%s ^1team!", PREFIX, get_user_name_ex(id), g_sPlayerTeam[player])
428 client_print_color(id, print_team_default, "%s ^3You've joined ^4%s ^1team!", PREFIX, g_sPlayerTeam[player]);
429 SQL_AddMember(id);
430 }
431 case 1:
432 {
433 client_print_color(player, print_team_default, "%s ^3%s ^1declined invitation to join ^4%s ^1team!", PREFIX, get_user_name_ex(id), g_sPlayerTeam[player])
434
435 }
436 }
437 return PLUGIN_HANDLED;
438 }
439 return PLUGIN_HANDLED;
440}
441//PAKVIETIMAS
442
443public RemoveMember(id) {
444 if(g_iMemberCount[id] < 2) {
445 LeaderMenu(id);
446 return PLUGIN_HANDLED;
447 }
448 new menu, szText[256];
449 formatex(szText, sizeof(szText), "\wKick Member");
450 menu = menu_create(szText, "remove_handler");
451
452 for(new i = 1; i < g_iMemberCount[id]; i++) {
453 formatex(szText, sizeof(szText), "%s", g_sTeamMembers[id][i]);
454 menu_additem(menu, szText, g_sTeamMembers[id][i], 0);
455 }
456
457
458 menu_setprop(menu, MPROP_EXITNAME, "\wExit")
459 menu_display( id, menu, 0 );
460
461 return PLUGIN_HANDLED;
462}
463
464public remove_handler(id, menu, item) {
465 if ( item == MENU_EXIT )
466 {
467 menu_destroy( menu );
468 return PLUGIN_HANDLED;
469 }
470
471 new szData[32], szName[64];
472 new _access, item_callback;
473 menu_item_getinfo( menu, item, _access, szData,charsmax( szData ), szName,charsmax( szName ), item_callback );
474
475 g_sRemoved[id] = szData;
476 new player_id = find_player("a", szData);
477 if(player_id) {
478 g_bInTeam[player_id] = false;
479 g_sPlayerTeam[player_id] = "";
480 }
481
482 client_print_color(id, print_team_default, "%s %s has been kicked out of team.", PREFIX, g_sRemoved[id]);
483
484 SQL_RemoveMember(id);
485 LeaderMenu(id);
486
487 return PLUGIN_HANDLED;
488}
489
490
491// KOMANDOS NARIO MENIU
492
493/*
494x komanda
495
4961. Nariai [x/5]
497
4980. Išeiti
499
500*/
501
502public MemberMenu(id) {
503 new szText[64], szName[32]
504 get_user_name(id, szName, charsmax(szName))
505 formatex(szText, charsmax(szText), "\r%s \wteam.", g_sPlayerTeam[id])
506 new menu = menu_create(szText, "members_handler");
507
508 formatex(szText, sizeof(szText), "\wMembers: [%d/5]", g_iMemberCount[id]);
509 menu_additem(menu, szText);
510 menu_additem(menu, "Top Teams");
511
512 menu_setprop(menu, MPROP_EXITNAME, "\wExit")
513 menu_display( id, menu, 0 );
514}
515
516public members_handler(id, menu, item) {
517 if ( item == MENU_EXIT )
518 {
519 menu_destroy( menu );
520 return PLUGIN_HANDLED;
521 }
522
523 switch(item) {
524 case 0: {
525 MembersList(id);
526 }
527 case 1: {
528 ShowTop(id);
529 Redirect(id);
530 }
531 }
532
533 return PLUGIN_HANDLED;
534}
535
536/*---------------
537------MySQL------
538---------------*/
539
540//GAUNAMI ZAIDEJO DUOMENYS
541public SQL_Load( id )
542{
543 new Temp[1]
544 Temp[0] = id
545
546 formatex(MySQL_Query, charsmax(MySQL_Query), "SELECT * FROM `%s` WHERE `username` = '%s'", TABLE_NAME, get_user_name_sql(id))
547 SQL_ThreadQuery(MySQL_Tuple, "RES_Load", MySQL_Query, Temp, sizeof(Temp))
548}
549
550public RES_Load( FailState, Handle:Query, Error[ ], Errcode, Data[ ], DataSize )
551{
552 new id = Data[0]
553
554 if(!is_user_connected(id)) {
555 return;
556 }
557
558 if(SQL_NumResults(Query) > 0 )
559 {
560 g_bInTeam[id] = true;
561 SQL_ReadResult(Query, 1, g_sPlayerTeam[id], 32);
562 g_iPos[id] = SQL_ReadResult( Query, 2 );
563 SQL_Count(id);
564 }
565}
566//============
567
568//GAUNAMAS KOMANDOS NARIU SKAICIUS
569public SQL_Count(id)
570{
571 new Temp[1]
572 Temp[0] = id
573
574 formatex(MySQL_Query, charsmax(MySQL_Query), "SELECT * FROM `%s` WHERE `team` = '%s' ORDER BY `position` DESC", TABLE_NAME, g_sPlayerTeam[id])
575 SQL_ThreadQuery(MySQL_Tuple, "RES_Count", MySQL_Query, Temp, sizeof(Temp))
576}
577
578public RES_Count( FailState, Handle:Query, Error[ ], Errcode, Data[ ], DataSize )
579{
580 new id = Data[0]
581
582 if(!is_user_connected(id)) {
583 return;
584 }
585
586 g_iMemberCount[id] = SQL_NumResults(Query);
587
588 for(new i; i < g_iMemberCount[id]; i++) {
589 SQL_ReadResult(Query, 0, g_sTeamMembers[id][i], 32);
590 SQL_NextRow(Query);
591 }
592}
593
594public SQL_AddMember(id) {
595 formatex( MySQL_Query, charsmax( MySQL_Query ), "INSERT INTO `%s` SET `username` = '%s', `team` = '%s', `position` = '%d'", TABLE_NAME, get_user_name_sql(id), g_sPlayerTeam[id], g_iPos[id]);
596 SQL_ThreadQuery(MySQL_Tuple, "SQL_TrashHandler", MySQL_Query);
597}
598
599public SQL_RemoveMember(id) {
600 formatex( MySQL_Query, charsmax( MySQL_Query ), "DELETE FROM `%s` WHERE `username` = '%s'", TABLE_NAME, g_sRemoved[id]);
601 SQL_ThreadQuery(MySQL_Tuple, "SQL_TrashHandler", MySQL_Query);
602
603 SQL_Count(id);
604}
605
606public SQL_DeleteTeam(id) {
607 formatex( MySQL_Query, charsmax( MySQL_Query ), "DELETE FROM `%s` WHERE `team` = '%s'", TABLE_NAME, g_sPlayerTeam[id]);
608 SQL_ThreadQuery(MySQL_Tuple, "SQL_TrashHandler", MySQL_Query);
609}
610
611
612public SQL_IsNameValid(id) {
613 new Temp[1];
614 Temp[0] = id;
615
616 formatex( MySQL_Query, charsmax(MySQL_Query), "SELECT * FROM `%s` WHERE `team` = '%s'", TABLE_NAME, g_sTeamName[id])
617 SQL_ThreadQuery(MySQL_Tuple, "RES_IsNameValid", MySQL_Query, Temp, sizeof(Temp))
618}
619
620public RES_IsNameValid(FailState, Handle:Query, Error[], Errcode, Data[], DataSize)
621{
622 new id = Data[0]
623
624 if(!is_user_connected(id))
625 return
626
627 if(SQL_NumResults(Query) == 0)
628 {
629 g_bNameValid[id] = true;
630 }
631 else {
632 g_bNameValid[id] = false;
633 }
634}
635
636
637public SQL_TrashHandler( FailState,Handle:Query, Error[ ], Errcode,Data[ ], DataSize )
638{
639 SQL_FreeHandle( Query )
640}
641
642public plugin_end( )
643{
644 SQL_FreeHandle( MySQL_Connection )
645}
646
647stock get_user_name_sql(id)
648{
649 new szName[33];
650 get_user_name(id, szName, charsmax(szName));
651
652 replace_all(szName, charsmax(szName), "'", "\'");
653 replace_all(szName, charsmax(szName), "^"", "\^"");
654
655 return szName;
656}
657stock get_user_name_ex(id)
658{
659 new szName[33];
660 get_user_name(id, szName, charsmax(szName));
661
662 return szName;
663}
664
665public plugin_natives()
666{
667 register_native("get_user_clan", "native_get_user_clan");
668}
669
670public native_get_user_clan(plugin, params)
671{
672 new id = get_param(1);
673 new name[33];
674
675 formatex( name, charsmax( name ), g_sPlayerTeam[id] );
676
677 set_string(2, name, get_param(3));
678}
679
680public Debug(id) {
681 //new Float:Cost = get_pcvar_float(cvar_teamCost);
682 //client_print(id, print_chat, "%.2f; %.2f", get_user_euro(id), Cost)
683}