ban.pwn 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503
  1. #include <YSI\y_hooks>
  2. hook OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
  3. if(arrAntiCheat[playerid][ac_iFlags][AC_DIALOGSPOOFING] > 0) return 1;
  4. switch(dialogid) {
  5. case DIALOG_MONEYFARMING: {
  6. if(response) {
  7. if(strcmp(inputtext, "Ban All", true) == 0) {
  8. new szIP[16];
  9. GetPVarString(playerid, "MF_IP", szIP, sizeof(szIP));
  10. format(szMiscArray, sizeof(szMiscArray), "%s 90 Moneyfarming", szIP);
  11. cmd_banip(playerid, szMiscArray);
  12. }
  13. }
  14. }
  15. }
  16. return 0;
  17. }
  18. CreateBan(iBanCreator, iBanned, iPlayerID, szIPAddress[], szReason[], iLength, iSilentBan = 0, iPermBan = 0) {
  19. // SPECIFY INVALID ID for iBanCreator for System Bans
  20. // SPECIFY INVALID ID for iBanned when banning IP Addresses
  21. // iBanCreator - IG Player ID of the Ban Creator
  22. // iBanned = SQL ID of the player to be banned
  23. // iPlayerID = IG player ID of the person to be banned
  24. // szIPAddress = IP Address to be banned
  25. szMiscArray[0] = 0;
  26. if(iLength > 5000) iLength = 5000;
  27. mysql_format(MainPipeline, szMiscArray, sizeof(szMiscArray), "INSERT INTO `ban` (`bannedid`, `creatorid`, `IP`, `reason`, `createdate`, `liftdate`, `active`) \
  28. VALUES ('%d', '%d', '%s', '%e', UNIX_TIMESTAMP(), UNIX_TIMESTAMP(DATE_ADD(CURDATE(),INTERVAL %d DAY)), 1)",
  29. iBanned, iBanCreator == INVALID_PLAYER_ID ? INVALID_PLAYER_ID:PlayerInfo[iBanCreator][pId], szIPAddress, szReason, iLength);
  30. mysql_tquery(MainPipeline, szMiscArray, "OnCreateBan", "iisisiii", iBanCreator, iPlayerID, szIPAddress, iBanned, szReason, iLength, iSilentBan, iPermBan);
  31. return 1;
  32. }
  33. forward OnCreateBan(iBanCreator, iPlayerID, szIPAddress[], iBanned, szReason[], iLength, iSilentBan, iPermBan);
  34. public OnCreateBan(iBanCreator, iPlayerID, szIPAddress[], iBanned, szReason[], iLength, iSilentBan, iPermBan) {
  35. new
  36. string[128];
  37. if(!mysql_errno(MainPipeline)) {
  38. if (iPlayerID == INVALID_PLAYER_ID) {
  39. szMiscArray[0] = 0;
  40. GetPVarString(iBanCreator, "BanningName", szMiscArray, MAX_PLAYER_NAME);
  41. DeletePVar(iBanCreator, "BanningName");
  42. format(szMiscArray, sizeof(szMiscArray), "AdmCmd: %s was offline banned by %s", szMiscArray, GetPlayerNameEx(iBanCreator));
  43. return ABroadCast(COLOR_LIGHTRED, szMiscArray, 2);
  44. }
  45. else if(iPlayerID != INVALID_PLAYER_ID && IsPlayerConnected(iPlayerID)) {
  46. if(iBanCreator == INVALID_PLAYER_ID) {
  47. format(szMiscArray, sizeof(szMiscArray), "AdmCmd: %s was auto-banned (%s)", GetPlayerNameEx(iPlayerID), szReason);
  48. }
  49. else if(iBanCreator != INVALID_PLAYER_ID && iPermBan == 0) {
  50. format(szMiscArray, sizeof(szMiscArray), "AdmCmd: %s was banned by %s (%s)", GetPlayerNameEx(iPlayerID), GetPlayerNameEx(iBanCreator), szReason);
  51. }
  52. else if(iBanCreator != INVALID_PLAYER_ID && iPermBan == 1) {
  53. format(szMiscArray, sizeof(szMiscArray), "AdmCmd: %s was permanently banned by %s (%s)", GetPlayerNameEx(iPlayerID), GetPlayerNameEx(iBanCreator), szReason);
  54. }
  55. if(!iSilentBan) {
  56. SendClientMessageToAllEx(COLOR_LIGHTRED, szMiscArray);
  57. SendClientMessageEx(iPlayerID, COLOR_LIGHTRED, szMiscArray);
  58. }
  59. else {
  60. format(string, sizeof(string), "[Silent] %s", szMiscArray);
  61. ABroadCast(COLOR_LIGHTRED, string, 2);
  62. SendClientMessageEx(iPlayerID, COLOR_LIGHTRED, szMiscArray);
  63. }
  64. return SetTimerEx("KickEx", 1000, false, "i", iPlayerID);
  65. }
  66. else {
  67. format(szMiscArray, sizeof(szMiscArray), "AdmCmd: %s has banned IP %s (%s)", GetPlayerNameEx(iBanCreator), szIPAddress, szReason);
  68. return ABroadCast(COLOR_LIGHTRED, szMiscArray, 2);
  69. }
  70. }
  71. else SendClientMessageEx(iBanCreator, COLOR_YELLOW, "There was an issue creating that ban ...");
  72. return 1;
  73. }
  74. RemoveBan(iRemover, iBanned, szIPAddress[]) {
  75. if(iBanned != INVALID_PLAYER_ID) {
  76. mysql_format(MainPipeline, szMiscArray, sizeof(szMiscArray), "UPDATE `ban` SET `active` = 0 WHERE `bannedid` = '%d' OR `IP` = '%s'", iBanned, szIPAddress);
  77. }
  78. else {
  79. mysql_format(MainPipeline, szMiscArray, sizeof(szMiscArray), "UPDATE `ban` SET `active` = 0 WHERE `IP` = '%e'", szIPAddress);
  80. }
  81. mysql_tquery(MainPipeline, szMiscArray, "OnRemoveBan", "iis", iRemover, iBanned, szIPAddress);
  82. return 1;
  83. }
  84. forward OnRemoveBan(iRemover, iBanned, szIPAddress[]);
  85. public OnRemoveBan(iRemover, iBanned, szIPAddress[]) {
  86. if(iRemover == INVALID_PLAYER_ID) return 1;
  87. if(!mysql_errno(MainPipeline)) {
  88. new iRows = cache_affected_rows();
  89. if(!iRows) return SendClientMessageEx(iRemover, COLOR_YELLOW, "No bans matching that criteria were found");
  90. else {
  91. if(!isnull(szIPAddress)) {
  92. format(szMiscArray, sizeof(szMiscArray), "%s unbanned IP %s", GetPlayerNameEx(iRemover), szIPAddress);
  93. ABroadCast(COLOR_YELLOW, szMiscArray, 2);
  94. Log("logs/unbans.log", szMiscArray);
  95. }
  96. if(iBanned != INVALID_PLAYER_ID) {
  97. szMiscArray[0] = 0;
  98. GetPVarString(iRemover, "UnbanName", szMiscArray, MAX_PLAYER_NAME);
  99. DeletePVar(iRemover, "UnbanName");
  100. format(szMiscArray, sizeof(szMiscArray), "%s unbanned %s.", GetPlayerNameEx(iRemover), szMiscArray);
  101. ABroadCast(COLOR_YELLOW, szMiscArray, 2);
  102. Log("logs/unbans.log", szMiscArray);
  103. }
  104. format(szMiscArray, sizeof(szMiscArray), "%d ban records removed.", iRows);
  105. SendClientMessageEx(iRemover, COLOR_WHITE, szMiscArray);
  106. }
  107. }
  108. else SendClientMessageEx(iRemover, COLOR_YELLOW, "There was an issue removing that ban ...");
  109. return 1;
  110. }
  111. forward InitiateUnban(iRemover);
  112. public InitiateUnban(iRemover) {
  113. new
  114. szIPAddress[16],
  115. id,
  116. iRows;
  117. cache_get_row_count(iRows);
  118. if(iRows) {
  119. cache_get_value_name_int(0, "id", id);
  120. cache_get_value_name(0, "IP", szIPAddress);
  121. return RemoveBan(iRemover, id, szIPAddress);
  122. }
  123. return 1;
  124. }
  125. forward InitiateOfflineBan(iBanCreator, szReason[], iLength);
  126. public InitiateOfflineBan(iBanCreator, szReason[], iLength) {
  127. new
  128. szIPAddress[16],
  129. id,
  130. iRows,
  131. value;
  132. cache_get_row_count(iRows);
  133. if(iRows) {
  134. cache_get_value_name_int(0, "id", id);
  135. cache_get_value_name(0, "IP", szIPAddress);
  136. if(cache_get_value_name_int(0, "AdminLevel", value) > PlayerInfo[iBanCreator][pAdmin]) {
  137. return SendClientMessageEx(iBanCreator, COLOR_GREY, "You cannot ban a player with a higher admin level than you.");
  138. }
  139. return CreateBan(iBanCreator, id, INVALID_PLAYER_ID, szIPAddress, szReason, iLength);
  140. }
  141. return 1;
  142. }
  143. forward InitiateIPBan(iBanCreator, szReason[], iLength);
  144. public InitiateIPBan(iBanCreator, szReason[], iLength) {
  145. new iRows,
  146. szIPAddress[16],
  147. szName[MAX_PLAYER_NAME],
  148. id,
  149. iCount,
  150. value;
  151. cache_get_row_count(iRows);
  152. if(iRows) {
  153. while(iCount < iRows) {
  154. cache_get_value_name_int(iCount, "id", id);
  155. cache_get_value_name(iCount, "IP", szIPAddress);
  156. cache_get_value_name(iCount, "Username", szName, MAX_PLAYER_NAME);
  157. SetPVarString(iBanCreator, "BanningName", szName);
  158. if(cache_get_value_name_int(iCount, "AdminLevel", value) > PlayerInfo[iBanCreator][pAdmin]) {
  159. format(szMiscArray, sizeof(szMiscArray), "[SYSTEM]: Couldn't ban account ID %d (higher admin level than you).", id);
  160. SendClientMessageEx(iBanCreator, COLOR_GREY, szMiscArray);
  161. }
  162. else CreateBan(iBanCreator, id, INVALID_PLAYER_ID, szIPAddress, szReason, iLength);
  163. iCount++;
  164. }
  165. }
  166. return 1;
  167. }
  168. CheckBan(iPlayerID) {
  169. mysql_format(MainPipeline, szMiscArray, sizeof(szMiscArray), "SELECT * FROM `ban` WHERE `active` = '1' AND (`bannedid` = '%d' OR `IP` = '%s')", PlayerInfo[iPlayerID][pId], PlayerInfo[iPlayerID][pIP]);
  170. mysql_tquery(MainPipeline, szMiscArray, "OnCheckBan", "i", iPlayerID);
  171. return 1;
  172. }
  173. forward OnCheckBan(iPlayerID);
  174. public OnCheckBan(iPlayerID)
  175. {
  176. new iRows, iDate;
  177. cache_get_row_count(iRows);
  178. if(iRows) {
  179. cache_get_value_name(0, "reason", szMiscArray);
  180. cache_get_value_name_int(0, "liftdate", iDate);
  181. /*
  182. SendClientMessageEx(iPlayerID, COLOR_RED, "This account/IP is currently banned.");
  183. format(szMiscArray, sizeof(szMiscArray), "Reason: %s - Unban Time (Server Time): %s", szMiscArray, date(iDate, 1));
  184. SendClientMessage(iPlayerID, COLOR_RED, szMiscArray);
  185. SetTimerEx("KickEx", 1000, false, "i", iPlayerID);
  186. */
  187. if(iDate > gettime()) {
  188. SendClientMessageEx(iPlayerID, COLOR_RED, "This account or IP is currently banned.");
  189. format(szMiscArray, sizeof(szMiscArray), "Reason: %s - Days left (GMT 0): %s", szMiscArray, date(iDate, 1));
  190. SendClientMessage(iPlayerID, COLOR_RED, szMiscArray);
  191. SetTimerEx("KickEx", 1000, false, "i", iPlayerID);
  192. return 1;
  193. }
  194. else {
  195. SendClientMessageEx(iPlayerID, COLOR_WHITE, "Your ban has expired. You have now been unbanned.");
  196. RemoveBan(INVALID_PLAYER_ID, PlayerInfo[iPlayerID][pId], PlayerInfo[iPlayerID][pIP]);
  197. return 1;
  198. }
  199. }
  200. return 1;
  201. }
  202. CMD:unbanip(playerid, params[]) {
  203. if(PlayerInfo[playerid][pAdmin] < 1337) return SendClientMessageEx(playerid, COLOR_GREY, "You are not authorized to use this command");
  204. if(isnull(params)) return SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /unbanip [ip]");
  205. RemoveBan(playerid, INVALID_PLAYER_ID, params);
  206. return 1;
  207. }
  208. CMD:unban(playerid, params[]) {
  209. if(PlayerInfo[playerid][pAdmin] < 4 && PlayerInfo[playerid][pBanAppealer] < 1 && PlayerInfo[playerid][pASM] < 1) return SendClientMessageEx(playerid, COLOR_GREY, "You are not authorized to use this command");
  210. if(isnull(params)) return SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /unban [username]");
  211. //if(strfind(params, "_", true, 0) != -1) SendClientMessage(playerid, COLOR_GRAD1, "Please use an underscore as spaces for non-admin accounts.");
  212. SetPVarString(playerid, "UnbanName", params);
  213. mysql_format(MainPipeline, szMiscArray, sizeof(szMiscArray), "SELECT `id`,`IP` FROM `accounts` WHERE `Username` = '%e' LIMIT 1", params);
  214. mysql_tquery(MainPipeline, szMiscArray, "InitiateUnban", "i", playerid);
  215. return 1;
  216. }
  217. CMD:ban(playerid, params[]) {
  218. new
  219. iTargetID,
  220. szReason[64],
  221. iLength,
  222. iSilentBan = 0;
  223. if(PlayerInfo[playerid][pAdmin] < 2) return SendClientMessageEx(playerid, COLOR_GREY, "You are not authorized to use this command");
  224. if(sscanf(params, "udD(0)s[64]", iTargetID, iLength, iSilentBan, szReason)) {
  225. SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /ban [playerid] [length in days] [silent(1=yes 2=no)] [reason]");
  226. SendClientMessageEx(playerid, COLOR_GREY, "** 1 = Yes, the ban will only broadcast to admins | 2 = No, the ban will be globally broadcasted **");
  227. return 1;
  228. }
  229. if(!IsPlayerConnected(iTargetID)) return SendClientMessageEx(playerid, COLOR_GREY, "That player is not connected");
  230. if(!(0 <= iSilentBan < 2)) {
  231. SendClientMessageEx(playerid, COLOR_GREY, "You must specify a value that is either 0 or 1");
  232. SendClientMessageEx(playerid, COLOR_GREY, "** 1 = Yes, the ban will only broadcast to admins | 2 = No, the ban will be globally broadcasted **");
  233. return 1;
  234. }
  235. if(PlayerInfo[playerid][pAdmin] < PlayerInfo[iTargetID][pAdmin]) return SendClientMessageEx(playerid, COLOR_GREY, "That player is a higher ranking admin than you");
  236. CreateBan(playerid, PlayerInfo[iTargetID][pId], iTargetID, GetPlayerIpEx(iTargetID), szReason, iLength, iSilentBan);
  237. return 1;
  238. }
  239. CMD:permban(playerid, params[]) {
  240. new
  241. iTargetID,
  242. szReason[64],
  243. iSilentBan = 0;
  244. if(PlayerInfo[playerid][pAdmin] < 1337) return SendClientMessageEx(playerid, COLOR_GREY, "You are not authorized to use this command");
  245. if(sscanf(params, "us[64]D(0)", iTargetID, szReason, iSilentBan)) {
  246. SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /permban [playerid] [reason] [silent(optional)]");
  247. SendClientMessageEx(playerid, COLOR_GREY, "** Acceptable values for silent are 0=No and 1=Yes, Default is 0 **");
  248. return 1;
  249. }
  250. if(!IsPlayerConnected(iTargetID)) return SendClientMessageEx(playerid, COLOR_GREY, "That player is not connected");
  251. if(!(0 <= iSilentBan < 2)) {
  252. SendClientMessageEx(playerid, COLOR_GREY, "You must specify a value that is either 0 or 1");
  253. SendClientMessageEx(playerid, COLOR_GREY, "** 1 = Yes, the ban will only broadcast to admins | 2 = No, the ban will be globally broadcasted **");
  254. return 1;
  255. }
  256. if(PlayerInfo[playerid][pAdmin] < PlayerInfo[iTargetID][pAdmin]) return SendClientMessageEx(playerid, COLOR_GREY, "That player is a higher ranking admin than you");
  257. CreateBan(playerid, PlayerInfo[iTargetID][pId], iTargetID, GetPlayerIpEx(iTargetID), szReason, 9999999, iSilentBan, 1);
  258. return 1;
  259. }
  260. CMD:hackban(playerid, params[]) {
  261. new
  262. iTargetID,
  263. iSilentBan = 0;
  264. if(PlayerInfo[playerid][pAdmin] < 2) return SendClientMessageEx(playerid, COLOR_GREY, "You are not authorized to use this command");
  265. if(sscanf(params, "uD(0)", iTargetID, iSilentBan)) {
  266. SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /hackban [playerid] [silent(optional)]");
  267. SendClientMessageEx(playerid, COLOR_GREY, "** Acceptable values for silent are 0=No and 1=Yes, Default is 0 **");
  268. return 1;
  269. }
  270. if(!IsPlayerConnected(iTargetID)) return SendClientMessageEx(playerid, COLOR_GREY, "That player is not connected");
  271. if(!(0 <= iSilentBan < 2)) {
  272. SendClientMessageEx(playerid, COLOR_GREY, "You must specify a value that is either 0 or 1");
  273. SendClientMessageEx(playerid, COLOR_GREY, "** 1 = Yes, the ban will only broadcast to admins | 2 = No, the ban will be globally broadcasted **");
  274. return 1;
  275. }
  276. if(PlayerInfo[playerid][pAdmin] < PlayerInfo[iTargetID][pAdmin]) return SendClientMessageEx(playerid, COLOR_GREY, "That player is a higher ranking admin than you");
  277. CreateBan(playerid, PlayerInfo[iTargetID][pId], iTargetID, GetPlayerIpEx(iTargetID), "Hacking", 180, iSilentBan);
  278. return 1;
  279. }
  280. CMD:saban(playerid, params[]) {
  281. new
  282. iTargetID,
  283. iSilentBan = 0;
  284. if(PlayerInfo[playerid][pAdmin] < 2) return SendClientMessageEx(playerid, COLOR_GREY, "You are not authorized to use this command");
  285. if(sscanf(params, "uD(0)", iTargetID, iSilentBan)) {
  286. SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /saban [playerid] [silent(optional)]");
  287. SendClientMessageEx(playerid, COLOR_GREY, "** Acceptable values for silent are 0=No and 1=Yes, Default is 0 **");
  288. return 1;
  289. }
  290. if(!IsPlayerConnected(iTargetID)) return SendClientMessageEx(playerid, COLOR_GREY, "That player is not connected");
  291. if(!(0 <= iSilentBan < 2)) {
  292. SendClientMessageEx(playerid, COLOR_GREY, "You must specify a value that is either 0 or 1");
  293. SendClientMessageEx(playerid, COLOR_GREY, "** 1 = Yes, the ban will only broadcast to admins | 2 = No, the ban will be globally broadcasted **");
  294. return 1;
  295. }
  296. if(PlayerInfo[playerid][pAdmin] < PlayerInfo[iTargetID][pAdmin]) return SendClientMessageEx(playerid, COLOR_GREY, "That player is a higher ranking admin than you");
  297. CreateBan(playerid, PlayerInfo[iTargetID][pId], iTargetID, GetPlayerIpEx(iTargetID), "Server Advertising", 180, iSilentBan);
  298. return 1;
  299. }
  300. CMD:moneyfarmban(playerid, params[]) {
  301. if(PlayerInfo[playerid][pAdmin] < 99999) return 1;
  302. new uPlayer;
  303. if(sscanf(params, "u", uPlayer)) return SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /moneyfarmban [playerid / name]");
  304. mysql_format(MainPipeline, szMiscArray, sizeof(szMiscArray), "SELECT `Username`, `IP`, `Money`, `Bank`, `SPos_x`, `SPos_y`, `SPos_z` FROM `accounts` WHERE `IP` = '%s'", GetPlayerIpEx(uPlayer));
  305. mysql_tquery(MainPipeline, szMiscArray, "OnCheckMoneyFarm", "is", playerid, GetPlayerIpEx(uPlayer));
  306. return 1;
  307. }
  308. forward OnCheckMoneyFarm(playerid, szIP[]);
  309. public OnCheckMoneyFarm(playerid, szIP[]) {
  310. szMiscArray[0] = 0;
  311. new iRows,
  312. iCount,
  313. Float:iFloat,
  314. iValue,
  315. szTitle[48],
  316. szName[MAX_PLAYER_NAME],
  317. szZone[MAX_ZONE_NAME];
  318. cache_get_row_count(iRows);
  319. while(iCount < iRows) {
  320. cache_get_value_name(iCount, "Username", szName);
  321. cache_get_value_name(iCount, "IP", szIP, 16);
  322. Get3DZone(cache_get_value_name_float(iCount, "SPos_x", iFloat),
  323. cache_get_value_name_float(iCount, "SPos_y", iFloat),
  324. cache_get_value_name_float(iCount, "SPos_z", iFloat),
  325. szZone, MAX_ZONE_NAME);
  326. format(szMiscArray, sizeof(szMiscArray), "%s\n%s - %s - Hand: $%s Bank: $%s - LastLocation: %s", szMiscArray, szName, szIP,
  327. number_format(cache_get_value_name_int(iCount, "Money", iValue)), number_format(cache_get_value_name_int(iCount, "Bank", iValue)), szZone);
  328. iCount++;
  329. }
  330. strcat(szMiscArray, "\n___________________\nBan All", sizeof(szMiscArray));
  331. SetPVarString(playerid, "MF_IP", szIP);
  332. format(szTitle, sizeof(szTitle), "%s - Moneyfarm check", szIP);
  333. ShowPlayerDialogEx(playerid, DIALOG_MONEYFARMING, DIALOG_STYLE_LIST, szTitle, szMiscArray, "Select", "<<");
  334. }
  335. CMD:banip(playerid, params[]) {
  336. new
  337. szIP[MAX_PLAYER_NAME],
  338. szReason[64],
  339. iLength;
  340. if(PlayerInfo[playerid][pAdmin] < 1337) return SendClientMessageEx(playerid, COLOR_GREY, "You are not authorized to use this command");
  341. if(sscanf(params, "s[16]ds[64]", szIP, iLength, szReason)) return SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /banip [ip] [length in days] [reason]");
  342. if(IsPlayerConnected(ReturnUserFromIP(szIP))) return SendClientMessageEx(playerid, COLOR_GREY, "That player is currently connected, use /ban.");
  343. mysql_format(MainPipeline, szMiscArray, sizeof(szMiscArray), "SELECT `id`,`AdminLevel`,`IP` FROM `accounts` WHERE `IP` = '%e'", szIP);
  344. mysql_tquery(MainPipeline, szMiscArray, "InitiateIPBan","isi", playerid, szReason, iLength);
  345. return 1;
  346. }
  347. CMD:banaccount(playerid, params[]) {
  348. new
  349. szName[MAX_PLAYER_NAME],
  350. szReason[64],
  351. iLength;
  352. if(PlayerInfo[playerid][pAdmin] < 4 && PlayerInfo[playerid][pBanAppealer] < 2 && PlayerInfo[playerid][pASM] < 1) return SendClientMessageEx(playerid, COLOR_GREY, "You are not authorized to use this command");
  353. if(sscanf(params, "s[24]ds[64]", szName, iLength, szReason)) return SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /banaccount [username] [length in days] [reason]");
  354. if(IsPlayerConnected(ReturnUser(szName))) return SendClientMessageEx(playerid, COLOR_GREY, "That player is currently connected, use /ban.");
  355. SetPVarString(playerid, "BanningName", szName);
  356. mysql_format(MainPipeline, szMiscArray, sizeof(szMiscArray), "SELECT `id`,`AdminLevel`,`IP` FROM `accounts` WHERE `Username` = '%e' LIMIT 1", szName);
  357. mysql_tquery(MainPipeline, szMiscArray, "InitiateOfflineBan","isi", playerid, szReason, iLength);
  358. return 1;
  359. }
  360. CMD:oldunban(playerid, params[])
  361. {
  362. if(PlayerInfo[playerid][pAdmin] >= 1337 || PlayerInfo[playerid][pBanAppealer] >= 1)
  363. {
  364. new string[128], query[256], tmpName[24];
  365. if(isnull(params)) return SendClientMessageEx(playerid, COLOR_WHITE, "USAGE: /oldunban [player name]");
  366. mysql_escape_string(params, tmpName);
  367. SetPVarString(playerid, "OnUnbanPlayer", tmpName);
  368. mysql_format(MainPipeline, query, sizeof(query), "UPDATE `accounts` SET `Band`=0, `Warnings`=0, `Disabled`=0 WHERE `Username`='%s' AND `PermBand` < 3", tmpName);
  369. format(string, sizeof(string), "Attempting to unban %s...", tmpName);
  370. SendClientMessageEx(playerid, COLOR_YELLOW, string);
  371. mysql_tquery(MainPipeline, query, "OnUnbanPlayer", "i", playerid);
  372. mysql_format(MainPipeline, query, sizeof(query), "SELECT `IP` FROM `accounts` WHERE `Username`='%s'", tmpName);
  373. mysql_tquery(MainPipeline, query, "OnUnbanIP", "i", playerid);
  374. }
  375. else
  376. {
  377. SendClientMessageEx(playerid, COLOR_GRAD1, "You are not authorized to use that command!");
  378. }
  379. return 1;
  380. }