Guest User

NexBank by Ne[X]oR

a guest
Sep 4th, 2016
281
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 28.88 KB | None | 0 0
  1. // Dynamic Bank System
  2. // Scripted & Designed by Ne[X]oR - Niv
  3. // Based on MySQL
  4. // -------------
  5. // MySQL Defines
  6. #include <a_mysql>
  7. #define mysql_host "localhost"
  8. #define mysql_user "root"
  9. #define mysql_pass ""
  10. #define mysql_db "bank"
  11. static mysql;
  12. // Defines
  13. #define MAX_ATMs 50
  14. #define REQUIRE_POSITION (1)
  15. #define RESET_ON_DEATH (1)
  16. #define ATM_OBJECT (19324)
  17. #define COLOR_LIGHTGREEN 0x00FF00FF
  18. #define COLOR_RED 0xFF0000FF
  19. #define FILTERSCRIPT
  20. // Includes
  21. #include <a_samp>
  22. #include <foreach>
  23. #include <zcmd>
  24. #include <sscanf2>
  25. // Variables
  26. enum bInfo
  27. {
  28. bLogged = 0,
  29. bIP[16],
  30. bPass[128],
  31. bMoney,
  32. bCash
  33. }
  34. new PlayerInfo[MAX_PLAYERS][bInfo];
  35. enum aInfo
  36. {
  37. Float:xPos,
  38. Float:yPos,
  39. Float:zPos,
  40. Float:rPos
  41. }
  42. new ATMInfo[MAX_ATMs+1][aInfo];
  43. new ATM[MAX_ATMs+1];
  44. new Editing[MAX_PLAYERS];
  45. // Publics
  46. #if defined FILTERSCRIPT
  47. public OnFilterScriptInit()
  48. {
  49. print("\n--------------------------------------");
  50. print(" NexBank - Dynamic Bank System by Ne[X]oR is now loading.");
  51. print("--------------------------------------\n");
  52. mysql = mysql_connect(mysql_host, mysql_user, mysql_db, mysql_pass);
  53. mysql_log(LOG_ALL);
  54. if(mysql_errno(mysql) != 0) print("NexBank: Can't access MySQL database, Loading has failed.");
  55. else print("NexBank Filterscript has been loaded successfully.");
  56. // User Table Creation
  57. mysql_tquery(mysql, "CREATE TABLE IF NOT EXISTS `Users` ( "\
  58. "`Username` varchar(24) NOT NULL," \
  59. "`Password` varchar(128) NOT NULL," \
  60. "`Money` int(1) NOT NULL," \
  61. "`IP` varchar(16) NOT NULL," \
  62. " PRIMARY KEY (`Username`)" \
  63. ") ENGINE = InnoDB DEFAULT CHARSET = latin1");
  64. // Load online users
  65. foreach(new i : Player)
  66. {
  67. if(IsPlayerConnected(i))
  68. {
  69. new query[128];
  70. mysql_format(mysql, query, sizeof(query), "SELECT * FROM `Users` WHERE `Username`='%e' LIMIT 1", RPN(i));
  71. mysql_tquery(mysql, query, "BankCheck", "i", i);
  72. }
  73. }
  74. // ATM Table Creation
  75. mysql_tquery(mysql, "CREATE TABLE IF NOT EXISTS `ATMs` ( "\
  76. "`ATMID` int(3) NOT NULL," \
  77. "`xPos` float NOT NULL," \
  78. "`yPos` float NOT NULL," \
  79. "`zPos` float NOT NULL," \
  80. "`rPos` float NOT NULL," \
  81. " PRIMARY KEY (`ATMID`)" \
  82. ") ENGINE = InnoDB DEFAULT CHARSET = latin1");
  83. // ATM Loading
  84. for(new i = 0; i <= MAX_ATMs; i++)
  85. {
  86. new query[128];
  87. mysql_format(mysql, query, sizeof(query), "SELECT * From `ATMs` WHERE `ATMID`='%d' LIMIT 1", i);
  88. mysql_tquery(mysql, query, "ATMLoad", "i", i);
  89. }
  90. SetTimer("MoneyCheck", 5000, 1);
  91. return 1;
  92. }
  93.  
  94. public OnFilterScriptExit()
  95. {
  96. print(" Dynamic Bank System has been un-loaded.");
  97. for(new idx = 0; idx <= MAX_ATMs; idx++) if(ATM[idx])
  98. {
  99. new query[128];
  100. mysql_format(mysql, query, sizeof(query), "UPDATE `ATMs` SET `xPos`='%f', `yPos`='%f', `zPos`='%f', `rPos`='%f' WHERE `ATMID`='%d'", ATMInfo[idx][xPos], ATMInfo[idx][yPos], ATMInfo[idx][zPos], ATMInfo[idx][rPos], idx);
  101. mysql_tquery(mysql, query);
  102. DestroyObject(ATM[idx]);
  103. ATM[idx] = 0;
  104. ATMInfo[idx][xPos] = 0;
  105. ATMInfo[idx][yPos] = 0;
  106. ATMInfo[idx][zPos] = 0;
  107. ATMInfo[idx][rPos] = 0;
  108. }
  109. print(" NexBank: ATMs saved successfully.");
  110. foreach(new i : Player)
  111. {
  112. if(IsPlayerConnected(i))
  113. {
  114. new query[128];
  115. mysql_format(mysql, query, sizeof(query), "UPDATE `Users` SET `Money`='%i' WHERE `Username`='%e'", PlayerInfo[i][bMoney], RPN(i));
  116. mysql_tquery(mysql, query);
  117. }
  118. }
  119. print(" NexBank: Users saved successfully.");
  120. mysql_close(mysql);
  121. return 1;
  122. }
  123. #endif
  124. forward BankCheck(playerid);
  125. public BankCheck(playerid)
  126. {
  127. new rows, fields;
  128. cache_get_data(rows, fields, mysql);
  129. if(rows)
  130. {
  131. cache_get_field_content(0, "Password", PlayerInfo[playerid][bPass], mysql, 128);
  132. cache_get_field_content(0, "IP", PlayerInfo[playerid][bIP], mysql, 16);
  133. PlayerInfo[playerid][bMoney] = cache_get_field_content_int(0, "Money", mysql);
  134. if(!strcmp(PlayerInfo[playerid][bIP], RPIP(playerid)))
  135. {
  136. PlayerInfo[playerid][bLogged] = 1;
  137. SendClientMessage(playerid, COLOR_RED, "You have been automatically logged into your bank account.");
  138. return 1;
  139. }
  140. else return SendClientMessage(playerid, COLOR_RED, "To log into your bank account please type /BLogin.");
  141. }
  142. else return SendClientMessage(playerid, COLOR_RED, "You are not registered to the Bank System, Register using /BRegister.");
  143. }
  144.  
  145. forward ATMLoad(atmid);
  146. public ATMLoad(atmid)
  147. {
  148. new rows, fields;
  149. cache_get_data(rows, fields, mysql);
  150. if(rows)
  151. {
  152. ATMInfo[atmid][xPos] = cache_get_field_content_float(0, "xPos");
  153. ATMInfo[atmid][yPos] = cache_get_field_content_float(0, "yPos");
  154. ATMInfo[atmid][zPos] = cache_get_field_content_float(0, "zPos");
  155. ATMInfo[atmid][rPos] = cache_get_field_content_float(0, "rPos");
  156. ATM[atmid] = CreateObject(ATM_OBJECT, ATMInfo[atmid][xPos], ATMInfo[atmid][yPos], ATMInfo[atmid][zPos], 0, 0, ATMInfo[atmid][rPos]);
  157. }
  158. return 1;
  159. }
  160.  
  161. public OnPlayerConnect(playerid)
  162. {
  163. new query[128];
  164. mysql_format(mysql, query, sizeof(query), "SELECT * FROM `Users` WHERE `Username`='%e' LIMIT 1", RPN(playerid));
  165. mysql_tquery(mysql, query, "BankCheck", "i", playerid);
  166. return 1;
  167. }
  168.  
  169. public OnPlayerDisconnect(playerid, reason)
  170. {
  171. new query[128];
  172. mysql_format(mysql, query, sizeof(query), "UPDATE `Users` SET `Money`='%i' WHERE `Username`='%e'", PlayerInfo[playerid][bMoney], RPN(playerid));
  173. mysql_tquery(mysql, query);
  174. PlayerInfo[playerid][bCash] = 0;
  175. PlayerInfo[playerid][bMoney] = 0;
  176. format(PlayerInfo[playerid][bPass], 128, "");
  177. format(PlayerInfo[playerid][bIP], 16, "");
  178. PlayerInfo[playerid][bLogged] = 0;
  179. Editing[playerid] = 0;
  180. CancelEdit(playerid);
  181. return 1;
  182. }
  183.  
  184. public OnPlayerDeath(playerid, killerid, reason)
  185. {
  186. #if RESET_ON_DEATH == 1
  187. GiveNexMoney(playerid, -GetPlayerMoney(playerid));
  188. #endif
  189. return 1;
  190. }
  191.  
  192. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  193. {
  194. return 1;
  195. }
  196.  
  197. public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ)
  198. {
  199. if(!response) for(new idx = 0; idx <= MAX_ATMs; idx++) if(ATM[idx] == objectid)
  200. {
  201. if(ATMInfo[idx][xPos] == 0)
  202. {
  203. DestroyObject(ATM[idx]);
  204. ATM[idx] = 0;
  205. Editing[playerid] = 0;
  206. SendClientMessage(playerid, COLOR_RED, "You have cancelled the ATM edition, therefore the ATM has been deleted.");
  207. return 1;
  208. }
  209. else
  210. {
  211. SendClientMessage(playerid, COLOR_RED, "You have cancelled the ATM edition, it was returned to it's original position.");
  212. Editing[playerid] = 0;
  213. SetObjectPos(ATM[idx], ATMInfo[idx][xPos], ATMInfo[idx][yPos], ATMInfo[idx][zPos]);
  214. SetObjectRot(ATM[idx], 0, 0, ATMInfo[idx][rPos]);
  215. return 1;
  216. }
  217. }
  218. if(response == 1) for(new idx = 0; idx <= MAX_ATMs; idx++) if(ATM[idx] == objectid)
  219. {
  220. if(ATMInfo[idx][xPos] == 0)
  221. {
  222. new query[128], string[80];
  223. ATMInfo[idx][xPos] = fX;
  224. ATMInfo[idx][yPos] = fY;
  225. ATMInfo[idx][zPos] = fZ;
  226. ATMInfo[idx][rPos] = fRotZ;
  227. SetObjectPos(ATM[idx], ATMInfo[idx][xPos], ATMInfo[idx][yPos], ATMInfo[idx][zPos]);
  228. SetObjectRot(ATM[idx], 0, 0, ATMInfo[idx][rPos]);
  229. mysql_format(mysql, query, sizeof(query), "INSERT INTO `ATMs` (`ATMID`, `xPos`, `yPos`, `zPos`, `rPos`) VALUES ('%d', '%f', '%f', %f, %f)", idx, fX, fY, fZ, fRotZ);
  230. mysql_tquery(mysql, query);
  231. format(string, sizeof(string), "You have successfully created & saved ATM ID: %d.", idx);
  232. SendClientMessage(playerid, COLOR_RED, string);
  233. Editing[playerid] = 0;
  234. return 1;
  235. }
  236. else
  237. {
  238. new string[80], query[128];
  239. Editing[playerid] = 0;
  240. ATMInfo[idx][xPos] = fX;
  241. ATMInfo[idx][yPos] = fY;
  242. ATMInfo[idx][zPos] = fZ;
  243. ATMInfo[idx][rPos] = fRotZ;
  244. SetObjectPos(ATM[idx], ATMInfo[idx][xPos], ATMInfo[idx][yPos], ATMInfo[idx][zPos]);
  245. SetObjectRot(ATM[idx], 0, 0, ATMInfo[idx][rPos]);
  246. mysql_format(mysql, query, sizeof(query), "UPDATE `ATMs` SET `xPos`='%f', `yPos`='%f', `zPos`='%f', `rPos`='%f' WHERE `ATMID`='%d' LIMIT 1", fX, fY, fZ, fRotZ, idx);
  247. mysql_tquery(mysql, query);
  248. format(string, sizeof(string), "You have finished editing ATM ID: %d, it was saved & synced automatically.", idx);
  249. SendClientMessage(playerid, COLOR_LIGHTGREEN, string);
  250. return 1;
  251. }
  252. }
  253. return 1;
  254. }
  255.  
  256. public OnQueryError(errorid, error[], callback[], query[], connectionHandle) print(error);
  257.  
  258. forward MoneyCheck();
  259. public MoneyCheck()
  260. {
  261. foreach(new i : Player) if(GetPlayerMoney(i) != PlayerInfo[i][bCash])
  262. {
  263. GivePlayerMoney(i, -GetPlayerMoney(i));
  264. GiveNexMoney(i, PlayerInfo[i][bCash]);
  265. }
  266. return 1;
  267. }
  268. // Commands
  269. CMD:bankhelp(playerid)
  270. {
  271. SendClientMessage(playerid, COLOR_RED, "List of Bank System related Commands:");
  272. SendClientMessage(playerid, COLOR_LIGHTGREEN, "/bregister | /(bl)ogin | /deposit | /withdraw | /balance | /transfer | /changebpass | /pay");
  273. SendClientMessage(playerid, COLOR_RED, "--------------------------------------------------------------------");
  274. return 1;
  275. }
  276.  
  277. CMD:abankhelp(playerid)
  278. {
  279. SendClientMessage(playerid, COLOR_LIGHTGREEN, "List of Bank System Administration related Commands:");
  280. SendClientMessage(playerid, COLOR_RED, "/(g)ive(m)oney(all) | /(g)ive(b)ank(m)oney(all) | /depositall | /fine(all) | /atmhelp");
  281. SendClientMessage(playerid, COLOR_LIGHTGREEN, "--------------------------------------------------------------------");
  282. return 1;
  283. }
  284.  
  285. CMD:atmhelp(playerid)
  286. {
  287. SendClientMessage(playerid, COLOR_LIGHTGREEN, "ATM Setup related Commands:");
  288. SendClientMessage(playerid, COLOR_RED, "/createatm | /deleteatm | /atms | /gotoatm | /editatm | /saveatms | /reloadatms");
  289. SendClientMessage(playerid, COLOR_LIGHTGREEN, "--------------------------------------------------------------------");
  290. return 1;
  291. }
  292.  
  293. CMD:bregister(playerid, params[])
  294. {
  295. if(strlen(PlayerInfo[playerid][bPass]) > 0) return SendClientMessage(playerid, COLOR_RED, "You are already registered to the Bank System, use /BLogin to log in.");
  296. new pass[128];
  297. if(sscanf(params, "s[128]", pass)) return SendClientMessage(playerid, COLOR_RED, "USAGE: /BRegister [Bank Password]");
  298. new query[248];
  299. mysql_format(mysql, query, sizeof(query), "INSERT INTO `Users` (`Username`, `Password`, `Money`, `IP`) VALUES ('%e', '%e', '%i', '%e')", RPN(playerid), pass, PlayerInfo[playerid][bMoney], RPIP(playerid));
  300. mysql_tquery(mysql, query);
  301. SendClientMessage(playerid, COLOR_LIGHTGREEN, "You have registered to the Bank System, therefore you've been auto-logged in.");
  302. format(PlayerInfo[playerid][bPass], 128, "%s", pass);
  303. PlayerInfo[playerid][bLogged] = 1;
  304. PlayerInfo[playerid][bMoney] = 10000;
  305. return 1;
  306. }
  307.  
  308. CMD:blogin(playerid, params[])
  309. {
  310. return cmd_bl(playerid, params);
  311. }
  312.  
  313. CMD:bl(playerid, params[])
  314. {
  315. if(strlen(PlayerInfo[playerid][bPass]) == 0) return SendClientMessage(playerid, COLOR_RED, "You are not registered at the bank, register using /bregister.");
  316. if(PlayerInfo[playerid][bLogged]) return SendClientMessage(playerid, COLOR_RED, "You are already logged into your bank account.");
  317. new pass[128];
  318. if(sscanf(params, "s[128]", pass)) return SendClientMessage(playerid, -1, "USAGE: /BLogin [Password]");
  319. if(!strcmp(pass, PlayerInfo[playerid][bPass], false))
  320. {
  321. PlayerInfo[playerid][bLogged] = 1;
  322. SendClientMessage(playerid, COLOR_LIGHTGREEN, "You have successfully logged into your bank account.");
  323. new query[80];
  324. mysql_format(mysql, query, sizeof(query), "UPDATE `Users` SET `IP`='%e' WHERE `Username`='%e' LIMIT 1", RPIP(playerid), RPN(playerid));
  325. mysql_tquery(mysql, query);
  326. return 1;
  327. }
  328. else return SendClientMessage(playerid, COLOR_RED, "Wrong bank password.");
  329. }
  330.  
  331. CMD:deposit(playerid, params[])
  332. {
  333. if(!PlayerInfo[playerid][bLogged]) return SendClientMessage(playerid, COLOR_RED, "You have to be logged into your bank account to perform this command.");
  334. #if REQUIRE_POSITION == 1
  335. if(!IsPlayerNearATM(playerid, 3)) return SendClientMessage(playerid, -1, "You must be near an ATM to perform this command.");
  336. #endif
  337. new amount;
  338. if(sscanf(params, "i", amount)) return SendClientMessage(playerid, -1, "USAGE: /deposit [amount]");
  339. if(amount <= 0) return SendClientMessage(playerid, COLOR_RED, "Amount of money must be above $1.");
  340. if(GetPlayerMoney(playerid) < amount) return SendClientMessage(playerid, COLOR_RED, "You don't have this amount of money on you.");
  341. GiveNexMoney(playerid, -amount);
  342. PlayerInfo[playerid][bMoney] += amount;
  343. new string[80];
  344. format(string, sizeof(string), "You have deposited $%d into your bank account.", amount);
  345. SendClientMessage(playerid, COLOR_LIGHTGREEN, string);
  346. return 1;
  347. }
  348.  
  349. CMD:withdraw(playerid, params[])
  350. {
  351. if(!PlayerInfo[playerid][bLogged]) return SendClientMessage(playerid, COLOR_RED, "You have to be logged into your bank account to perform this command.");
  352. #if REQUIRE_POSITION == 1
  353. if(!IsPlayerNearATM(playerid, 3)) return SendClientMessage(playerid, -1, "You must be near an ATM to perform this command.");
  354. #endif
  355. new amount;
  356. if(sscanf(params, "i", amount)) return SendClientMessage(playerid, -1, "USAGE: /withdraw [amount]");
  357. if(amount <= 0) return SendClientMessage(playerid, COLOR_RED, "Amount of money must be above $1.");
  358. if(PlayerInfo[playerid][bMoney] < amount) return SendClientMessage(playerid, COLOR_RED, "You don't have this amount of money in your bank account.");
  359. GiveNexMoney(playerid, amount);
  360. PlayerInfo[playerid][bMoney] -= amount;
  361. new string[80];
  362. format(string, sizeof(string), "You have withdrawn $%d from your bank account.", amount);
  363. SendClientMessage(playerid, COLOR_LIGHTGREEN, string);
  364. return 1;
  365. }
  366.  
  367. CMD:transfer(playerid, params[])
  368. {
  369. if(!PlayerInfo[playerid][bLogged]) return SendClientMessage(playerid, COLOR_RED, "You have to be logged into your bank account to perform this command.");
  370. #if REQUIRE_POSITION == 1
  371. if(!IsPlayerNearATM(playerid, 3)) return SendClientMessage(playerid, -1, "You must be near an ATM to perform this command.");
  372. #endif
  373. new amount, playerb;
  374. if(sscanf(params, "ui", playerb, amount)) return SendClientMessage(playerid, -1, "USAGE: /pay [playerid] [amount]");
  375. if(!IsPlayerConnected(playerb)) return SendClientMessage(playerid, COLOR_RED, "Invalid ID.");
  376. if(amount <= 0) return SendClientMessage(playerid, COLOR_RED, "Amount of money must be above $1.");
  377. if(PlayerInfo[playerid][bMoney] < amount) return SendClientMessage(playerid, COLOR_RED, "You don't have this amount of money in your bank account.");
  378. PlayerInfo[playerid][bMoney] -= amount;
  379. PlayerInfo[playerb][bMoney] += amount;
  380. new string[80];
  381. format(string, sizeof(string), "You have transfered $%d from your bank account to %s's bank account.", amount, RPN(playerb));
  382. SendClientMessage(playerid, COLOR_LIGHTGREEN, string);
  383. format(string, sizeof(string), "You have received a $%d transfer from %s's bank account.", amount, RPN(playerid));
  384. SendClientMessage(playerb, COLOR_LIGHTGREEN, string);
  385. return 1;
  386. }
  387.  
  388. CMD:balance(playerid, params[])
  389. {
  390. if(!PlayerInfo[playerid][bLogged]) return SendClientMessage(playerid, COLOR_RED, "You have to be logged into your bank account to perform this command.");
  391. #if REQUIRE_POSITION == 1
  392. if(!IsPlayerNearATM(playerid, 3)) return SendClientMessage(playerid, -1, "You must be near an ATM to perform this command.");
  393. #endif
  394. new string[80];
  395. format(string, sizeof(string), "Your bank balance is $%d", PlayerInfo[playerid][bMoney]);
  396. SendClientMessage(playerid, COLOR_LIGHTGREEN, string);
  397. return 1;
  398. }
  399.  
  400. CMD:changebpass(playerid, params[])
  401. {
  402. if(!PlayerInfo[playerid][bLogged]) return SendClientMessage(playerid, COLOR_RED, "You have to be logged into your bank account to perform this command.");
  403. new pass[128];
  404. if(sscanf(params, "s[128]", pass)) return SendClientMessage(playerid, -1, "USAGE: /changebpass [new password]");
  405. new query[128];
  406. mysql_format(mysql, query, sizeof(query), "UPDATE `Users` SET `Password`='%e' WHERE `Username`='%e' LIMIT 1", pass, RPN(playerid));
  407. mysql_tquery(mysql, query);
  408. SendClientMessage(playerid, COLOR_LIGHTGREEN, "You have changed your bank password.");
  409. return 1;
  410. }
  411.  
  412. CMD:pay(playerid, params[])
  413. {
  414. if(!PlayerInfo[playerid][bLogged]) return SendClientMessage(playerid, COLOR_RED, "You have to be logged into your bank account to perform this command.");
  415. new amount, playerb;
  416. if(sscanf(params, "ui", playerb, amount)) return SendClientMessage(playerid, -1, "USAGE: /transfer [playerid] [amount]");
  417. if(!IsPlayerConnected(playerb)) return SendClientMessage(playerid, COLOR_RED, "Invalid ID.");
  418. #if REQUIRE_POSITION == 1
  419. if(!IsPlayerNearPlayer(playerid, playerb, 3)) return SendClientMessage(playerid, COLOR_RED, "You must be near this player to perform this command.");
  420. #endif
  421. if(amount <= 0) return SendClientMessage(playerid, COLOR_RED, "Amount of money must be above $1.");
  422. if(GetPlayerMoney(playerid) < amount) return SendClientMessage(playerid, COLOR_RED, "You don't have this amount of money on you.");
  423. GiveNexMoney(playerid, -amount);
  424. GiveNexMoney(playerb, amount);
  425. new string[80];
  426. format(string, sizeof(string), "%s has paid you $%d.", RPN(playerid), amount);
  427. SendClientMessage(playerb, COLOR_LIGHTGREEN, string);
  428. format(string, sizeof(string), "You have paid %s $%d.", RPN(playerb), amount);
  429. SendClientMessage(playerid, COLOR_LIGHTGREEN, string);
  430. return 1;
  431. }
  432. // Administrator Commands (Give Money etc)
  433. CMD:givemoney(playerid, params[])
  434. {
  435. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_RED, "You are not authorized to use this command.");
  436. new playerb, amount;
  437. if(sscanf(params, "ud", playerb, amount)) return SendClientMessage(playerid, -1, "USAGE: /givemoney [playerid] [amount]");
  438. if(!IsPlayerConnected(playerb)) return SendClientMessage(playerid, COLOR_RED, "Invalid ID.");
  439. if(amount <= 0) return SendClientMessage(playerid, COLOR_RED, "Amount of money must be above $1.");
  440. new string[80];
  441. GiveNexMoney(playerb, amount);
  442. format(string, sizeof(string), "Administrator %s has given you $%d.", RPN(playerid), amount);
  443. SendClientMessage(playerb, COLOR_LIGHTGREEN, string);
  444. format(string, sizeof(string), "You have given %s $%d.", RPN(playerb), amount);
  445. SendClientMessage(playerb, COLOR_LIGHTGREEN, string);
  446. return 1;
  447. }
  448.  
  449. CMD:gm(playerid, params[])
  450. {
  451. return cmd_givemoney(playerid, params);
  452. }
  453.  
  454. CMD:givemoneyall(playerid, params[])
  455. {
  456. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_RED, "You are not authorized to use this command.");
  457. new amount;
  458. if(sscanf(params, "d", amount)) return SendClientMessage(playerid, -1, "USAGE: /givemoneyall [amount]");
  459. if(amount <= 0) return SendClientMessage(playerid, COLOR_RED, "Amount of money must be above $1.");
  460. new string[80];
  461. foreach(new i : Player) if(IsPlayerConnected(i)) GiveNexMoney(i, amount);
  462. format(string, sizeof(string), "Administrator %s has given everyone $%d.", RPN(playerid), amount);
  463. SendClientMessageToAll(COLOR_LIGHTGREEN, string);
  464. return 1;
  465. }
  466.  
  467. CMD:gmall(playerid, params[])
  468. {
  469. return cmd_givemoneyall(playerid, params);
  470. }
  471.  
  472. CMD:fine(playerid, params[])
  473. {
  474. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_RED, "You are not authorized to use this command.");
  475. new playerb, amount;
  476. if(sscanf(params, "ui", playerb, amount)) return SendClientMessage(playerid, -1, "USAGE: /fine [playerid] [amount]");
  477. if(!IsPlayerConnected(playerb)) return SendClientMessage(playerid, COLOR_RED, "Invalid ID.");
  478. if(amount <= 0) return SendClientMessage(playerid, COLOR_RED, "Amount of money must be above $1.");
  479. new string[80];
  480. GiveNexMoney(playerb, -amount);
  481. format(string, sizeof(string), "Administrator %s has fined $%d from your money.", RPN(playerid), amount);
  482. SendClientMessage(playerb, COLOR_RED, string);
  483. format(string, sizeof(string), "You have fined %d from %s's money.", amount, RPN(playerb));
  484. SendClientMessage(playerb, COLOR_RED, string);
  485. return 1;
  486. }
  487.  
  488. CMD:fineall(playerid, params[])
  489. {
  490. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_RED, "You are not authorized to use this command.");
  491. new amount;
  492. if(sscanf(params, "d", amount)) return SendClientMessage(playerid, -1, "USAGE: /fineall [amount]");
  493. if(amount <= 0) return SendClientMessage(playerid, COLOR_RED, "Amount of money must be above $1.");
  494. new string[80];
  495. foreach(new i : Player) if(IsPlayerConnected(i)) GiveNexMoney(i, -amount);
  496. format(string, sizeof(string), "Administrator %s has fined $%d from everyone's money.", RPN(playerid), amount);
  497. SendClientMessageToAll(COLOR_RED, string);
  498. return 1;
  499. }
  500.  
  501. CMD:givebankmoney(playerid, params[])
  502. {
  503. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_RED, "You are not authorized to use this command.");
  504. new playerb, amount;
  505. if(sscanf(params, "ud", playerb, amount)) return SendClientMessage(playerid, -1, "USAGE: /givebankmoney [playerid] [amount]");
  506. if(!IsPlayerConnected(playerb)) return SendClientMessage(playerid, COLOR_RED, "Invalid ID.");
  507. if(amount <= 0) return SendClientMessage(playerid, COLOR_RED, "Amount of money must be above $1.");
  508. new string[80];
  509. PlayerInfo[playerid][bMoney] += amount;
  510. format(string, sizeof(string), "Administrator %s has added $%d to your bank account.", RPN(playerid), amount);
  511. SendClientMessage(playerb, COLOR_LIGHTGREEN, string);
  512. format(string, sizeof(string), "You have added $%d into %s's bank account.", amount, RPN(playerb));
  513. SendClientMessage(playerid, COLOR_LIGHTGREEN, string);
  514. return 1;
  515. }
  516.  
  517. CMD:gbm(playerid, params[])
  518. {
  519. return cmd_givebankmoney(playerid, params);
  520. }
  521.  
  522. CMD:givebankmoneyall(playerid, params[])
  523. {
  524. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_RED, "You are not authorized to use this command.");
  525. new amount;
  526. if(sscanf(params, "d", amount)) return SendClientMessage(playerid, -1, "USAGE: /givebankmoneyall [amount]");
  527. if(amount <= 0) return SendClientMessage(playerid, COLOR_RED, "Amount of money must be above $1.");
  528. new string[80];
  529. foreach(new i : Player) if(IsPlayerConnected(i)) PlayerInfo[i][bMoney] += amount;
  530. format(string, sizeof(string), "Administrator %s has added $%d into everyone's bank account.", RPN(playerid), amount);
  531. SendClientMessageToAll(COLOR_LIGHTGREEN, string);
  532. return 1;
  533. }
  534.  
  535. CMD:gbmall(playerid, params[])
  536. {
  537. return cmd_givebankmoneyall(playerid, params);
  538. }
  539.  
  540. CMD:depositall(playerid, params[])
  541. {
  542. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_RED, "You are not authorized to use this command.");
  543. foreach(new i : Player) if(IsPlayerConnected(i))
  544. {
  545. PlayerInfo[i][bMoney] += GetPlayerMoney(i);
  546. GiveNexMoney(i, -GetPlayerMoney(i));
  547. }
  548. new string[80];
  549. format(string, sizeof(string), "Administrator %s has deposited everyone's money into their banks.", RPN(playerid));
  550. SendClientMessageToAll(COLOR_LIGHTGREEN, string);
  551. return 1;
  552. }
  553. // ATM related commands
  554. CMD:reloadatms(playerid)
  555. {
  556. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_RED, "You are not authorized to use this command.");
  557. for(new i = 0; i <= MAX_ATMs; i++) if(ATM[i])
  558. {
  559. DestroyObject(ATM[i]);
  560. ATM[i] = 0;
  561. ATMInfo[i][xPos] = 0;
  562. ATMInfo[i][yPos] = 0;
  563. ATMInfo[i][zPos] = 0;
  564. ATMInfo[i][rPos] = 0;
  565. }
  566. for(new i = 0; i <= MAX_ATMs; i++)
  567. {
  568. new query[128];
  569. mysql_format(mysql, query, sizeof(query), "SELECT * From `ATMs` WHERE `ATMID`='%d' LIMIT 1", i);
  570. mysql_tquery(mysql, query, "ATMLoad", "i", i);
  571. }
  572. new string[50];
  573. format(string, sizeof(string), "Administrator %s has reloaded the ATMs.", RPN(playerid));
  574. SendClientMessageToAll(COLOR_RED, string);
  575. return 1;
  576. }
  577.  
  578. CMD:saveatms(playerid)
  579. {
  580. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_RED, "You are not authorized to use this command.");
  581. for(new idx = 0; idx <= MAX_ATMs; idx++) if(ATM[idx])
  582. {
  583. new query[128];
  584. mysql_format(mysql, query, sizeof(query), "UPDATE `ATMs` SET `xPos`='%f', `yPos`='%f', `zPos`='%f', `rPos`='%f' WHERE `ATMID`='%d'", ATMInfo[idx][xPos], ATMInfo[idx][yPos], ATMInfo[idx][zPos], ATMInfo[idx][rPos], idx);
  585. mysql_tquery(mysql, query);
  586. }
  587. new string[80];
  588. format(string, sizeof(string), "Administrator %s has initiated an ATM saving, completed successfully.", RPN(playerid));
  589. SendClientMessageToAll(COLOR_RED, string);
  590. return 1;
  591. }
  592.  
  593. CMD:createatm(playerid)
  594. {
  595. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_RED, "You are not authorized to use this command.");
  596. if(ATM[MAX_ATMs]) return SendClientMessage(playerid, COLOR_RED, "The server has passed the maximum amount of ATMs.");
  597. if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_RED, "You have to be on foot in order to create an ATM.");
  598. if(Editing[playerid]) return SendClientMessage(playerid, COLOR_RED, "First finish editing your current ATM.");
  599. for(new idx = 0; idx <= MAX_ATMs; idx++) if(!ATM[idx])
  600. {
  601. new Float:pos[3], string[80];
  602. GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
  603. ATM[idx] = CreateObject(ATM_OBJECT, pos[0]-1.0, pos[1], pos[2], 0, 0, 0);
  604. EditObject(playerid, ATM[idx]);
  605. format(string, sizeof(string), "You have created a new ATM with the ID: %d, Edit it as you wish.", idx);
  606. SendClientMessage(playerid, COLOR_RED, string);
  607. Editing[playerid] = 1;
  608. return 1;
  609. }
  610. return 1;
  611. }
  612.  
  613. CMD:deleteatm(playerid, params[])
  614. {
  615. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_RED, "You are not authorized to use this command.");
  616. new idx;
  617. if(sscanf(params, "i", idx)) return SendClientMessage(playerid, -1, "USAGE: /deleteatm [ATM ID]");
  618. if( idx < 0 || idx > MAX_ATMs) return SendClientMessage(playerid, COLOR_RED, "Invalid ATM ID.");
  619. if(!ATM[idx]) return SendClientMessage(playerid, COLOR_RED, "Invalid ATM ID.");
  620. new query[128], string[80];
  621. mysql_format(mysql, query, sizeof(string), "DELETE FROM `ATMs` WHERE `ATMID`='%d' LIMIT 1", idx);
  622. mysql_tquery(mysql, query);
  623. DestroyObject(ATM[idx]);
  624. ATM[idx] = 0;
  625. ATMInfo[idx][xPos] = 0;
  626. ATMInfo[idx][yPos] = 0;
  627. ATMInfo[idx][zPos] = 0;
  628. ATMInfo[idx][rPos] = 0;
  629. format(string, sizeof(string), "You have successfully deleted ATM ID: %d.", idx);
  630. SendClientMessage(playerid, COLOR_RED, string);
  631. return 1;
  632. }
  633.  
  634. CMD:editatm(playerid, params[])
  635. {
  636. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_RED, "You are not authorized to use this command.");
  637. if(Editing[playerid]) return SendClientMessage(playerid, COLOR_RED, "First finish edit the current ATM you're editing.");
  638. new idx;
  639. if(sscanf(params, "i", idx)) return SendClientMessage(playerid, -1, "USAGE: /editatm [ATM ID]");
  640. if( idx < 0 || idx > MAX_ATMs) return SendClientMessage(playerid, COLOR_RED, "Invalid ATM ID.");
  641. if(!ATM[idx]) return SendClientMessage(playerid, COLOR_RED, "Invalid ATM ID.");
  642. Editing[playerid] = 1;
  643. EditObject(playerid, ATM[idx]);
  644. new string[80];
  645. format(string, sizeof(string), "You are now editing ATM ID: %d", idx);
  646. SendClientMessage(playerid, COLOR_LIGHTGREEN, string);
  647. return 1;
  648. }
  649.  
  650. CMD:atms(playerid)
  651. {
  652. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_RED, "You are not authorized to use this command.");
  653. SendClientMessage(playerid, COLOR_LIGHTGREEN, "List of ATMs (IDs & Positions)");
  654. new string[80];
  655. for(new i = 0; i <= MAX_ATMs; i++) if(ATM[i])
  656. {
  657. format(string, sizeof(string), "ATM ID: %d || X Pos: %f || Y Pos: %f || Z Pos: %f", i, ATMInfo[i][xPos], ATMInfo[i][yPos], ATMInfo[i][zPos]);
  658. SendClientMessage(playerid, COLOR_RED, string);
  659. }
  660. SendClientMessage(playerid, COLOR_LIGHTGREEN, "--------------------------------");
  661. return 1;
  662. }
  663.  
  664. CMD:gotoatm(playerid, params[])
  665. {
  666. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_RED, "You are not authorized to use this command.");
  667. new atm;
  668. if(sscanf(params, "i", atm)) return SendClientMessage(playerid, -1, "USAGE: /gotoatm [ATM ID]");
  669. if(atm < 0 || atm > MAX_ATMs) return SendClientMessage(playerid, COLOR_RED, "Invalid ATM ID.");
  670. if(!ATM[atm]) return SendClientMessage(playerid, COLOR_RED, "Invalid ATM ID.");
  671. SetPlayerPos(playerid, ATMInfo[atm][xPos] - 1, ATMInfo[atm][yPos], ATMInfo[atm][zPos]);
  672. new string [56];
  673. format(string, sizeof(string), "You have teleported to ATM ID: %d.", atm);
  674. SendClientMessage(playerid, COLOR_RED, string);
  675. return 1;
  676. }
  677. // Stocks
  678. stock RPN(playerid)
  679. {
  680. new name[MAX_PLAYER_NAME];
  681. GetPlayerName(playerid, name, sizeof(name));
  682. return name;
  683. }
  684.  
  685. stock RPIP(playerid)
  686. {
  687. new ip[16];
  688. GetPlayerIp(playerid, ip, sizeof(ip));
  689. return ip;
  690. }
  691.  
  692. stock GiveNexMoney(playerid, amount)
  693. {
  694. new string[128];
  695. if(amount < 0) format(string, sizeof(string), "~r~-$%d", amount*-1);
  696. else if(amount > 0) format(string, sizeof(string), "~g~+$%d", amount);
  697. GameTextForPlayer(playerid, string, 3000, 1);
  698. PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
  699. PlayerInfo[playerid][bCash] += amount;
  700. GivePlayerMoney(playerid, amount);
  701. return 1;
  702. }
  703.  
  704. stock IsPlayerNearATM(playerid, Float:range)
  705. {
  706. for(new i = 0; i <= MAX_ATMs; i++)
  707. {
  708. if(IsPlayerInRangeOfPoint(playerid, range, ATMInfo[i][xPos], ATMInfo[i][yPos], ATMInfo[i][zPos])) return true;
  709. }
  710. return false;
  711. }
  712.  
  713. stock IsPlayerNearPlayer(playerid, n_playerid, Float:radius)
  714. {
  715. new Float:npx, Float:npy, Float:npz;
  716. GetPlayerPos(n_playerid, npx, npy, npz);
  717. if(IsPlayerInRangeOfPoint(playerid, radius, npx, npy, npz)) return true;
  718. else return false;
  719. }
Add Comment
Please, Sign In to add comment