· 6 years ago · Aug 02, 2019, 08:28 PM
1#include <amxmodx>
2#include <ColorChat>
3#include <sqlx>
4
5#define PLUGIN "Ban CT"
6#define VERSION "1.0"
7#define AUTHOR "JAILBREAK TEAM"
8
9#define FLAGA ADMIN_BAN
10#define MAXCLIENTS 32
11#define cmax(%0) sizeof(%0) - 1
12#define is_user_admin(%0) (get_user_flags(%0) > 0 && ~get_user_flags(%0) & ADMIN_USER)
13
14#define TASK_INDEX_MYSQL 28819293
15
16#define SetBit(%0,%1) ((%0) |= (1 << (%1)))
17#define ClearBit(%0,%1) ((%0) &= ~(1 << (%1)))
18#define IsSetBit(%0,%1) ((%0) & (1 << (%1)))
19#define InvertBit(%0,%1) ((%0) ^= (1 << (%1)))
20#define IsNotSetBit(%0,%1) (~(%0) & (1 << (%1)))
21
22native jbe_informer_offset_up(id);
23native jbe_informer_offset_down(id);
24
25native jbe_get_user_team(id);
26native jbe_set_user_team(id, iTeam);
27
28new Handle:hSql, Handle:hConnected;
29new g_iBitUserBlock;
30
31new uSteamId[33][35], uIpAddress[33][23];
32
33public plugin_init()
34{
35 register_plugin("PLUGIN", VERSION, "AUTHOR");
36
37 register_cvar("ban_ct_host", "195.88.209.239");
38 register_cvar("ban_ct_user", "u2012_wa");
39 register_cvar("ban_ct_pass", "wasd123");
40 register_cvar("ban_ct_database", "u10044_wa");
41 register_cvar("ban_ct_prefix", "bk_");
42
43 register_concmd("say /block", "BanCT");
44
45 set_task(1.0, "Task_MySQL_Connect", TASK_INDEX_MYSQL);
46}
47
48public Task_MySQL_Connect(i_Task)
49{
50 new iErr, sErr[256];
51
52 hSql = SQL_MakeDbTuple(UTIL_GetCvarString("ban_ct_host"), UTIL_GetCvarString("ban_ct_user"), UTIL_GetCvarString("ban_ct_pass"), UTIL_GetCvarString("ban_ct_database"));
53
54 if((hConnected = SQL_Connect(hSql, iErr, sErr, cmax(sErr))) == Empty_Handle)
55 {
56 set_fail_state(sErr);
57 }
58 else
59 {
60 SQL_QueryAndIgnore(hConnected, "set names utf8");
61 SQL_Execute((SQL_PrepareQuery(hConnected, "CREATE TABLE IF NOT EXISTS `%slist_blocks` (`id` int(9) NOT NULL AUTO_INCREMENT,`steam_id` varchar(35) NOT NULL,`ip` varchar(32) NOT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=22;", UTIL_GetCvarString("ban_ct_prefix"))));
62 }
63
64 SQL_FreeHandle(hConnected);
65 remove_task(i_Task);
66}
67
68public client_putinserver(id)
69{
70 get_user_authid(id, uSteamId[id], cmax(uSteamId[]));
71 get_user_ip(id, uIpAddress[id], cmax(uIpAddress[]), 1);
72
73 new sQuery[256], iClient[3];
74
75 formatex(sQuery, charsmax(sQuery), "SELECT * FROM `%slist_blocks` WHERE (`steam_id` LIKE '%s')", UTIL_GetCvarString("ban_ct_prefix"), uSteamId[id]);
76
77 iClient[0] = id;
78 iClient[1] = 2;
79
80 SQL_ThreadQuery(hSql, "SQL_Handler", sQuery, iClient, sizeof iClient);
81}
82
83public client_disconnected(id)
84{
85 if(IsSetBit(g_iBitUserBlock, id))
86 {
87 ClearBit(g_iBitUserBlock, id);
88 }
89}
90
91public SQL_Handler(iFailState, Handle:iQuery, szError[], iError, szData[], iDataLen)
92{
93 switch(iFailState)
94 {
95 case TQUERY_CONNECT_FAILED: return log_amx("No connect database: %s", szError);
96 case TQUERY_QUERY_FAILED: return log_amx("Query error: %s", szError);
97 }
98
99 new id = szData[0], iType = szData[1];
100
101 switch(iType)
102 {
103 case 1:
104 {
105 if(SQL_NumResults(iQuery))
106 {
107 SetBit(g_iBitUserBlock, id);
108 }
109 else
110 {
111 new szName[33], sQuery[148], iClient[2];
112 get_user_name(id, szName, charsmax(szName));
113
114 iClient[0] = id;
115 iClient[1] = 0;
116
117 formatex(sQuery, charsmax(sQuery), "INSERT INTO `%slist_blocks` (`steam_id`, `ip`) VALUES ('%s', '%s')", UTIL_GetCvarString("ban_ct_prefix"), uSteamId[id], uIpAddress[id]);
118
119 SQL_ThreadQuery(hSql, "SQL_Handler", sQuery, iClient, sizeof iClient);
120 }
121 }
122 case 2:
123 {
124 if(SQL_NumResults(iQuery))
125 {
126 SetBit(g_iBitUserBlock, id);
127 }
128 }
129 }
130
131 return true;
132}
133
134public BanCT(id)
135{
136 if(get_user_flags(id) & FLAGA)
137 {
138 return BanCT_Menu(id);
139 }
140 return PLUGIN_HANDLED;
141}
142
143public BanCT_Menu(id)
144{
145 new sTemp[10], sDataString[128], iMenu = menu_create("\d|> Ban CT by JAILBREAK TEAM^n\yWybierz Gracza:", "Zamknij_Menu");
146
147 jbe_informer_offset_up(id);
148
149 for(new i = 1; i <= MAXCLIENTS; i++)
150 {
151 if(!is_user_connected(i) || i == id || is_user_admin(i))
152 {
153 continue;
154 }
155
156 get_user_name(i, sDataString, cmax(sDataString));
157
158 num_to_str(i, sTemp, cmax(sTemp));
159 formatex(sDataString, cmax(sDataString), "%s%s\R%s", sDataString, IsSetBit(g_iBitUserBlock, i) ? "\r*" : "", (jbe_get_user_team(i) == 2) ? "\yGUARD" : "\rPRISON");
160 menu_additem(iMenu, sDataString, sTemp);
161 }
162
163 return menu_display(id, iMenu, 0);
164}
165
166public Zamknij_Menu(id, iMenu, aItem)
167{
168 jbe_informer_offset_down(id);
169
170 new sData[30], sName[64], iAccess, iCallBack;
171 menu_item_getinfo(iMenu, aItem, iAccess, sData, cmax(sData), sName, cmax(sName), iCallBack);
172
173 new iPlayer = str_to_num(sData);
174 if(0 < iPlayer <= MAXCLIENTS)
175 {
176 new sQuery[256], iClient[3];
177
178 if(IsNotSetBit(g_iBitUserBlock, iPlayer))
179 {
180 SetBit(g_iBitUserBlock, iPlayer);
181
182 formatex(sQuery, charsmax(sQuery), "SELECT * FROM `%slist_blocks` WHERE `steam_id` LIKE '%s'", UTIL_GetCvarString("ban_ct_prefix"), uSteamId[iPlayer]);
183
184 iClient[0] = iPlayer;
185 iClient[1] = 1;
186
187 SQL_ThreadQuery(hSql, "SQL_Handler", sQuery, iClient, sizeof iClient);
188 }
189 else
190 {
191 ClearBit(g_iBitUserBlock, iPlayer);
192
193 formatex(sQuery, charsmax(sQuery), "DELETE FROM `%slist_blocks` WHERE `%slist_blocks`.`steam_id`='%s'", UTIL_GetCvarString("ban_ct_prefix"), UTIL_GetCvarString("ban_ct_prefix"), uSteamId[iPlayer]);
194
195 iClient[0] = iPlayer;
196 iClient[1] = 0;
197
198 SQL_ThreadQuery(hSql, "SQL_Handler", sQuery, iClient, sizeof iClient);
199 }
200
201 new sNickname[33], sTargetName[33];
202 get_user_name(id, sNickname, cmax(sNickname));
203 get_user_name(iPlayer, sTargetName, cmax(sTargetName));
204
205 if(jbe_get_user_team(iPlayer) == 2)
206 {
207 jbe_set_user_team(iPlayer, 1);
208 }
209 ColorChat(0, GREEN,"[BanCT]^x01 Gracz^x04 %s^x01 Zostal^x03 %s^x01 na CT przez Admina^x04 %s", sTargetName, IsSetBit(g_iBitUserBlock, iPlayer) ? "Zbanowany" : "Odbanowany", sNickname);
210
211 log_to_file("/addons/amxmodx/logs/blocks.txt", "^n^n[BanCT]^n[Admin: %s] [Gracz: %s] [Status: %s]", sNickname, sTargetName, IsSetBit(g_iBitUserBlock, iPlayer) ? "Zbanowany" : "Odbanowany");
212 }
213
214 return PLUGIN_HANDLED;
215}
216
217public plugin_natives()
218{
219 register_native("jbe_is_gblock", "jbe_is_gblock", true);
220}
221
222public jbe_is_gblock(id)
223{
224 return IsSetBit(g_iBitUserBlock, id);
225}
226
227stock UTIL_GetCvarString(const s_String[])
228{
229 new sDataString[128];
230 get_cvar_string(s_String, sDataString, cmax(sDataString));
231
232 return sDataString;
233}