· 4 years ago · Mar 14, 2021, 10:34 PM
1/*
2CREATE TABLE IF NOT EXISTS bluerp_ip_logging (
3 entry INT NOT NULL AUTO_INCREMENT,
4 steam_id VARCHAR(64),
5 ip VARCHAR(32),
6 date DATE,
7 name VARCHAR(128),
8 PRIMARY KEY(entry)
9);
10*/
11#include <sourcemod>
12#include <multicolors>
13
14Database g_Database = null;
15bool g_Late = false;
16
17char SelectedPlayersName[65][65];
18
19bool QueryRunning = false;
20char CurrentQuerySteamids[256][65];
21//char CurrentQueryIpAddresses[256][65];
22int CurrentQuerySteamidCount;
23//int CurrentQueryIPAddressCount;
24
25public Plugin myinfo =
26{
27 name = "[Orizon]-IpActivity",
28 author = "Sidezz, backwards",
29 description = "SGgsghjhedjh.",
30 version = "1",
31 url = "www.coldcommunity.com"
32}
33
34public void OnPluginStart()
35{
36 Database.Connect(SQL_ConnectDatabase, "ip_activity");
37 HookEvent("player_changename", Event_ChangeName);
38
39 RegAdminCmd("sm_activity", Command_Activity, ADMFLAG_CUSTOM6, "View IP Logs of a player");
40}
41
42public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max)
43{
44 g_Late = late;
45}
46
47public Action Command_Activity(int client, int args)
48{
49 //variable args accepted:
50 switch(args)
51 {
52 //0 args = open player menu:
53 case 0:
54 {
55 if(client == 0)
56 {
57 CReplyToCommand(client, "{green}[IP Activity]{default} This variant cannot be ran from server console.");
58 return Plugin_Handled;
59 }
60
61 Menu menu = new Menu(Handler_ActivityList);
62 menu.SetTitle("Select a Player:");
63 for(int i = 1; i <= MaxClients; i++)
64 {
65 if(!IsClientConnected(i) || !IsClientAuthorized(i)) continue;
66 char id[8]; IntToString(i, id, sizeof(id));
67 char name[MAX_NAME_LENGTH]; GetClientName(i, name, sizeof(name));
68 menu.AddItem(id, name);
69 }
70
71 menu.Display(client, 30);
72 return Plugin_Handled;
73 }
74
75 //1 args = targeted player:
76 case 1:
77 {
78 char arg[32]; GetCmdArg(1, arg, sizeof(arg));
79 int target = FindTarget(client, arg, true, false);
80
81 //Invalid Target:
82 if(target == -1)
83 {
84 CReplyToCommand(client, "{green}[IP Activity]{default} Invalid Player: {green}%s{default}.", arg);
85 return Plugin_Handled;
86 }
87
88 char steamid[32]; GetClientAuthId(target, AuthId_Steam2, steamid, sizeof(steamid));
89 char query[256]; Format(query, sizeof(query), "SELECT DISTINCT ip FROM bluerp_ip_logging WHERE steam_id = '%s';", steamid);
90 g_Database.Query(SQL_GetPlayerActivity, query, GetClientSerial(client));
91 return Plugin_Handled;
92 }
93
94 default:
95 {
96 if(client == 0)
97 {
98 CReplyToCommand(client, "{green}[IP Activity]{default} This variant cannot be ran from server console.");
99 return Plugin_Handled;
100 }
101
102 Menu menu = new Menu(Handler_ActivityList);
103 menu.SetTitle("Select a Player:");
104 for(int i = 1; i <= MaxClients; i++)
105 {
106 if(!IsClientConnected(i) || !IsClientAuthorized(i)) continue;
107 char id[8]; IntToString(i, id, sizeof(id));
108 char name[MAX_NAME_LENGTH]; GetClientName(i, name, sizeof(name));
109 menu.AddItem(id, name);
110 }
111
112 menu.Display(client, 30);
113 return Plugin_Handled;
114 }
115 }
116}
117
118public int Handler_ActivityList(Menu hMenu, MenuAction action, int client, int selection)
119{
120 switch(action)
121 {
122 case MenuAction_Select:
123 {
124 //Info = Client Index:
125 char info[64]; hMenu.GetItem(selection, info, sizeof(info));
126 int target = StringToInt(info);
127
128 if(!IsClientConnected(target) || !IsClientAuthorized(target))
129 {
130 PrintToChat(client, "\x01\x02 \x02Target Not Valid Anymore!");
131 return 0;
132 }
133 char ip[16];
134 GetClientIP(target, ip, sizeof(ip));
135
136 char name[MAX_NAME_LENGTH];
137 GetClientName(target, name, sizeof(name));
138
139 Format(SelectedPlayersName[client], 64, "%s", name);
140
141 //char steamid[32]; GetClientAuthId(target, AuthId_Steam2, steamid, sizeof(steamid));
142 char query[256]; Format(query, sizeof(query), "SELECT DISTINCT name, steam_id FROM bluerp_ip_logging WHERE ip = '%s';", ip);
143 g_Database.Query(SQL_GetPlayerActivity, query, GetClientSerial(client));
144
145 QueryRunning = true;
146
147 return 1;
148 }
149
150 case MenuAction_End:
151 {
152 delete hMenu;
153 return 0;
154 }
155 }
156
157 return 1;
158}
159
160public void OnClientAuthorized(int client)
161{
162 InsertPlayerData(client);
163}
164
165public void Event_ChangeName(Event e, const char[] name, bool noBroadcast)
166{
167 //This is called the frame after the event occurs so newname will be in effect already
168 int client = GetClientOfUserId(e.GetInt("userid"));
169 InsertPlayerData(client);
170}
171
172void InsertPlayerData(int client)
173{
174 //Run this to stop from inserting STEAM_ID_RETVALS into the database:
175 if(!IsClientConnected(client) || !IsClientAuthorized(client)) return;
176
177 char steamid[32], ip[16], name[MAX_NAME_LENGTH], safeName[129];
178 GetClientAuthId(client, AuthId_Steam2, steamid, sizeof(steamid));
179 GetClientIP(client, ip, sizeof(ip));
180 GetClientName(client, name, sizeof(name));
181 g_Database.Escape(name, safeName, sizeof(safeName));
182
183 char query[256];
184 Format(query, sizeof(query), "INSERT INTO bluerp_ip_logging (steam_id, ip, date, name) VALUES ('%s', '%s', date('now'), '%s');", steamid, ip, safeName);
185 g_Database.Query(SQL_GenericQuery, query);
186}
187
188public int Handler_PlayerActivity(Menu hMenu, MenuAction action, int client, int selection)
189{
190 switch(action)
191 {
192 case MenuAction_Select:
193 {
194 char info[64], display[32]; hMenu.GetItem(selection, info, sizeof(info), _, display, sizeof(display));
195 char query[256]; Format(query, sizeof(query), "SELECT DISTINCT name, steam_id FROM bluerp_ip_logging WHERE ip = '%s';", display);
196 g_Database.Query(SQL_CommonUsers, query, GetClientSerial(client));
197 return 1;
198 }
199
200 case MenuAction_End:
201 {
202 delete hMenu;
203 return 1;
204 }
205 }
206
207 return 1;
208}
209
210public void SQL_CommonUsers(Database db, DBResultSet results, const char[] error, any data)
211{
212 if(db == null)
213 {
214 LogError("[IP Activity] SQL_CommonUsers Error >> %s", error);
215 PrintToServer("IP Activity >> Failed to query: %s", error);
216 return;
217 }
218
219 if(results == null)
220 {
221 LogError("[IP Activity] SQL_CommonUsers Error >> %s", error);
222 PrintToServer("IP Activity >> Failed to query: %s", error);
223 return;
224 }
225
226 int client = GetClientFromSerial(data);
227
228 int nameCol, steamidCol;
229 results.FieldNameToNum("name", nameCol);
230 results.FieldNameToNum("steam_id", steamidCol);
231
232 int count = 0;
233 Menu menu = new Menu(Handler_ExpandInfo);
234 menu.SetTitle("Common Users of this IP:");
235
236 while(results.FetchRow())
237 {
238 count++;
239 char name[MAX_NAME_LENGTH]; results.FetchString(nameCol, name, sizeof(name));
240 char steamid[32]; results.FetchString(steamidCol, steamid, sizeof(steamid));
241 menu.AddItem(steamid, name);
242 }
243
244 menu.ExitBackButton = true;
245 menu.Display(client, 30);
246}
247
248public int Handler_Nothing(Menu hMenu, MenuAction action, int client, int selection)
249{
250 switch(action)
251 {
252 case MenuAction_Select:
253 {
254 return 1;
255 }
256
257 case MenuAction_End:
258 {
259 delete hMenu;
260 return 1;
261 }
262 }
263
264 return 1;
265}
266
267public int Handler_ExpandInfo(Menu hMenu, MenuAction action, int client, int selection)
268{
269 switch(action)
270 {
271 case MenuAction_Select:
272 {
273 char info[64], display[MAX_NAME_LENGTH]; hMenu.GetItem(selection, info, sizeof(info), _, display, sizeof(display));
274 Menu menu = new Menu(Handler_Nothing);
275 menu.SetTitle("Expanded Information:");
276
277 menu.AddItem("1", info);
278 menu.AddItem("2", display);
279
280 menu.ExitBackButton = true;
281 menu.Display(client, 30);
282 return 1;
283 }
284
285 case MenuAction_End:
286 {
287 delete hMenu;
288 return 1;
289 }
290 }
291
292 return 1;
293}
294
295public void SQL_GetPlayerActivity(Database db, DBResultSet results, const char[] error, any data)
296{
297 int client = GetClientFromSerial(data);
298
299 if(db == null)
300 {
301 LogError("[IP Activity] SQL_GetPlayerActivity Error >> %s", error);
302 PrintToServer("IP Activity >> Failed to query: %s", error);
303 PrintToChat(client, "\x01\x02 \x02Failed to query %s", error);
304 return;
305 }
306
307 if(results == null)
308 {
309 LogError("[IP Activity] SQL_GetPlayerActivity Error >> %s", error);
310 PrintToServer("IP Activity >> Failed to query: %s", error);
311 PrintToChat(client, "\x01\x02 \x02Failed to query %s", error);
312 return;
313 }
314
315 PrintToChat(client, "\x01\x02 \x0BSteam Accounts \01from \07%s:", SelectedPlayersName[client]);
316
317 int count = 1;
318 while (results.FetchRow())
319 {
320 char playername[64];
321 char steamid[64];
322
323 results.FetchString(0, playername, sizeof(playername));
324 results.FetchString(1, steamid, sizeof(steamid));
325
326 bool AlreadyPrintedSteam = false;
327
328 for(int i = 0;i<CurrentQuerySteamidCount;i++)
329 {
330 if(StrEqual(steamid, CurrentQuerySteamids[i], false))
331 AlreadyPrintedSteam = true;
332
333 //char query[256]; Format(query, sizeof(query), "SELECT DISTINCT name, ip FROM bluerp_ip_logging WHERE steam_id = '%s';", steamid);
334 //g_Database.Query(SQL_GetPlayerActivitybyID, query, GetClientSerial(client));
335 //CurrentQuerySteamidCount++;
336
337 //PrintToChat(client, "\x01\x02 \x10%i. %s: %s", count, playername, steamid);
338 //count++;
339 }
340
341 if(!AlreadyPrintedSteam)
342 {
343 PrintToChat(client, "\06 \06%i. \10%s: \01%s", count, playername, steamid);
344 count++;
345
346 Format(CurrentQuerySteamids[CurrentQuerySteamidCount], 64, steamid);
347 CurrentQuerySteamidCount++;
348 }
349 }
350
351 for(int i = 0;i<CurrentQuerySteamidCount;i++)
352 {
353 Format(CurrentQuerySteamids[CurrentQuerySteamidCount], 64, "\0");
354 }
355
356 CurrentQuerySteamidCount = 0;
357
358 /*int ipCol;
359 results.FieldNameToNum("ip", ipCol);
360
361 int count = 0;
362 Menu menu = new Menu(Handler_PlayerActivity);
363 menu.SetTitle("Player IP Activity:");
364
365 while(results.FetchRow())
366 {
367 count++;
368 char ip[32]; results.FetchString(ipCol, ip, sizeof(ip));
369 char id[16]; IntToString(count, id, sizeof(id));
370 menu.AddItem(id, ip);
371 }
372
373 menu.ExitBackButton = true;
374 menu.Display(client, 30);*/
375}
376
377public void SQL_GenericQuery(Database db, DBResultSet results, const char[] error, any data)
378{
379 if(db == null)
380 {
381 LogError("[IP Activity] SQL_GenericQuery Error >> %s", error);
382 PrintToServer("IP Activity >> Failed to query: %s", error);
383 return;
384 }
385
386 if(results == null)
387 {
388 LogError("[IP Activity] SQL_GenericQuery Error >> %s", error);
389 PrintToServer("IP Activity >> Failed to query: %s", error);
390 return;
391 }
392}
393
394public void SQL_ConnectDatabase(Database db, const char[] error, any data)
395{
396 //Error:
397 if(db == null)
398 {
399 LogError("[IP Activity] SQL_ConnectDatabase Error >> %s", error);
400 PrintToServer("IP Activity >> Failed to connect to database: %s", error);
401 return;
402 }
403
404 g_Database = db;
405
406 char query[256];
407 Format(query, sizeof(query), "create table bluerp_ip_logging (steam_id varchar(64), ip varchar(64), date datetime, name varchar(64))");
408 g_Database.Query(SQL_GenericQuery, query);
409
410 if(g_Late)
411 {
412 for(int i = 1; i <= MaxClients; i++)
413 {
414 InsertPlayerData(i);
415 }
416 }
417 return;
418}