Guest User

PARKING METAR PREVEO FRANK(BALKAN-SAMP.COM)

a guest
Mar 7th, 2017
578
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.14 KB | None | 0 0
  1. /********************* PARKING METAR PREVEO FRANK(2017) *********************/
  2. /******** KOMANDE: /napraviparkingm, /izbrisiparkingm, /parkirajmasinu *******/
  3. /********************* PARKING METER BY JAKE ELITE (2017) *********************/
  4. ///************ BALKAN-SAMP.COM **************/
  5.  
  6. #include <a_samp>
  7. #include <zcmd>
  8. #include <sscanf2>
  9. #include <streamer>
  10.  
  11. native IsValidVehicle(vehicleid);
  12.  
  13. new DB: pmeter;
  14.  
  15. new VehicleNames[212][] = {
  16. {"Landstalker"},{"Bravura"},{"Buffalo"},{"Linerunner"},{"Perrenial"},{"Sentinel"},{"Dumper"},
  17. {"Firetruck"},{"Trashmaster"},{"Stretch"},{"Manana"},{"Infernus"},{"Voodoo"},{"Pony"},{"Mule"},
  18. {"Cheetah"},{"Ambulance"},{"Leviathan"},{"Moonbeam"},{"Esperanto"},{"Taxi"},{"Washington"},
  19. {"Bobcat"},{"Mr Whoopee"},{"BF Injection"},{"Hunter"},{"Premier"},{"Enforcer"},{"Securicar"},
  20. {"Banshee"},{"Predator"},{"Bus"},{"Rhino"},{"Barracks"},{"Hotknife"},{"Trailer 1"},{"Previon"},
  21. {"Coach"},{"Cabbie"},{"Stallion"},{"Rumpo"},{"RC Bandit"},{"Romero"},{"Packer"},{"Monster"},
  22. {"Admiral"},{"Squalo"},{"Seasparrow"},{"Pizzaboy"},{"Tram"},{"Trailer 2"},{"Turismo"},
  23. {"Speeder"},{"Reefer"},{"Tropic"},{"Flatbed"},{"Yankee"},{"Caddy"},{"Solair"},{"Berkley's RC Van"},
  24. {"Skimmer"},{"PCJ-600"},{"Faggio"},{"Freeway"},{"RC Baron"},{"RC Raider"},{"Glendale"},{"Oceanic"},
  25. {"Sanchez"},{"Sparrow"},{"Patriot"},{"Quad"},{"Coastguard"},{"Dinghy"},{"Hermes"},{"Sabre"},
  26. {"Rustler"},{"ZR-350"},{"Walton"},{"Regina"},{"Comet"},{"BMX"},{"Burrito"},{"Camper"},{"Marquis"},
  27. {"Baggage"},{"Dozer"},{"Maverick"},{"News Chopper"},{"Rancher"},{"FBI Rancher"},{"Virgo"},{"Greenwood"},
  28. {"Jetmax"},{"Hotring"},{"Sandking"},{"Blista Compact"},{"Police Maverick"},{"Boxville"},{"Benson"},
  29. {"Mesa"},{"RC Goblin"},{"Hotring Racer A"},{"Hotring Racer B"},{"Bloodring Banger"},{"Rancher"},
  30. {"Super GT"},{"Elegant"},{"Journey"},{"Bike"},{"Mountain Bike"},{"Beagle"},{"Cropdust"},{"Stunt"},
  31. {"Tanker"}, {"Roadtrain"},{"Nebula"},{"Majestic"},{"Buccaneer"},{"Shamal"},{"Hydra"},{"FCR-900"},
  32. {"NRG-500"},{"HPV1000"},{"Cement Truck"},{"Tow Truck"},{"Fortune"},{"Cadrona"},{"FBI Truck"},
  33. {"Willard"},{"Forklift"},{"Tractor"},{"Combine"},{"Feltzer"},{"Remington"},{"Slamvan"},
  34. {"Blade"},{"Freight"},{"Streak"},{"Vortex"},{"Vincent"},{"Bullet"},{"Clover"},{"Sadler"},
  35. {"Firetruck LA"},{"Hustler"},{"Intruder"},{"Primo"},{"Cargobob"},{"Tampa"},{"Sunrise"},{"Merit"},
  36. {"Utility"},{"Nevada"},{"Yosemite"},{"Windsor"},{"Monster A"},{"Monster B"},{"Uranus"},{"Jester"},
  37. {"Sultan"},{"Stratum"},{"Elegy"},{"Raindance"},{"RC Tiger"},{"Flash"},{"Tahoma"},{"Savanna"},
  38. {"Bandito"},{"Freight Flat"},{"Streak Carriage"},{"Kart"},{"Mower"},{"Duneride"},{"Sweeper"},
  39. {"Broadway"},{"Tornado"},{"AT-400"},{"DFT-30"},{"Huntley"},{"Stafford"},{"BF-400"},{"Newsvan"},
  40. {"Tug"},{"Trailer 3"},{"Emperor"},{"Wayfarer"},{"Euros"},{"Hotdog"},{"Club"},{"Freight Carriage"},
  41. {"Trailer 3"},{"Andromada"},{"Dodo"},{"RC Cam"},{"Launch"},{"Police Car (LSPD)"},{"Police Car (SFPD)"},
  42. {"Police Car (LVPD)"},{"Police Ranger"},{"Picador"},{"S.W.A.T. Van"},{"Alpha"},{"Phoenix"},{"Glendale"},
  43. {"Sadler"},{"Luggage Trailer A"},{"Luggage Trailer B"},{"Stair Trailer"},{"Boxville"},{"Farm Plow"},
  44. {"Utility Trailer"}
  45. };
  46.  
  47. #define MAX_METERS 100 // Max parkinga na serveru.
  48. #define CASH_PER_MINUTES 750 // $750 po minuti
  49.  
  50. enum ParkingMeters
  51. {
  52. parkObject,
  53. parkVehicle,
  54. parkSeconds,
  55. Text3D:parkLabel,
  56. parkID,
  57. Float:parkX,
  58. Float:parkY,
  59. Float:parkZ,
  60. Float:parkA,
  61. bool:parkAvailable
  62. };
  63. new pMeter[MAX_METERS][ParkingMeters];
  64.  
  65. ////////////////////////////////////////////////////////////////////////////////
  66.  
  67. public OnFilterScriptInit()
  68. {
  69. SetTimer("MeterCheck", 1000, true);
  70.  
  71. pmeter = db_open("parkingmeters.db");
  72. db_query(pmeter, "CREATE TABLE IF NOT EXISTS `pmeters` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `x` FLOAT, `y` FLOAT, `z` FLOAT, `angle` FLOAT)");
  73.  
  74. for(new i; i < MAX_METERS; i++)
  75. {
  76. pMeter[i][parkID] = -1;
  77. pMeter[i][parkX] = 0.0;
  78. pMeter[i][parkY] = 0.0;
  79. pMeter[i][parkZ] = 0.0;
  80. pMeter[i][parkA] = 0.0;
  81. pMeter[i][parkVehicle] = 0;
  82. pMeter[i][parkAvailable] = false;
  83. }
  84. LoadParkMeters();
  85. return 1;
  86. }
  87.  
  88. public OnFilterScriptExit()
  89. {
  90. db_close(pmeter);
  91. return 1;
  92. }
  93.  
  94. forward MeterCheck();
  95. public MeterCheck()
  96. {
  97. new string[128], vid;
  98.  
  99. for(new i; i < MAX_METERS; i++)
  100. {
  101. if(pMeter[i][parkID] > -1)
  102. {
  103. vid = GetClosestVehicleInObject(pMeter[i][parkObject]);
  104.  
  105. switch(pMeter[i][parkAvailable])
  106. {
  107. case true:
  108. {
  109. format(string, sizeof(string), "# (%d)\nDOSTUPNO ZA PARKIRANJE\nVreme: /", i);
  110. UpdateDynamic3DTextLabelText(pMeter[i][parkLabel], 0x33AA33FF, string);
  111. }
  112. case false:
  113. {
  114. if(pMeter[i][parkVehicle] != vid)
  115. {
  116. pMeter[i][parkSeconds] = 0;
  117. pMeter[i][parkAvailable] = true;
  118. pMeter[i][parkVehicle] = 0;
  119. }
  120. else
  121. {
  122. pMeter[i][parkSeconds] --;
  123. if(pMeter[i][parkSeconds] < 1)
  124. {
  125. pMeter[i][parkSeconds] = 0;
  126. pMeter[i][parkAvailable] = true;
  127. pMeter[i][parkVehicle] = 0;
  128. }
  129. }
  130.  
  131. format(string, sizeof(string), "# %d\nNIJE DOSTUPNO ZA PARKIRANJE\nVreme: %d", i, pMeter[i][parkSeconds]);
  132. UpdateDynamic3DTextLabelText(pMeter[i][parkLabel], 0xFF6347FF, string);
  133. if(vid != pMeter[i][parkVehicle])
  134. {
  135. pMeter[i][parkSeconds] = 0;
  136. pMeter[i][parkAvailable] = true;
  137. pMeter[i][parkVehicle] = 0;
  138. }
  139. }
  140. }
  141. }
  142. }
  143. return 1;
  144. }
  145.  
  146. public OnPlayerConnect(playerid)
  147. {
  148. return 1;
  149. }
  150.  
  151. public OnPlayerDisconnect(playerid, reason)
  152. {
  153. return 1;
  154. }
  155.  
  156. ////////////////////////////////////////////////////////////////////////////////
  157.  
  158. CMD:napraviparkingm(playerid, params[])
  159. {
  160. if(IsPlayerAdmin(playerid))
  161. {
  162. new id = -1, string[128];
  163.  
  164. if(IsPlayerNearParkMeter(playerid) != -1)
  165. return SendClientMessage(playerid, -1, "* Postoji još jedan parking metar pored tebe, pomeri malo.");
  166.  
  167. new Float:x, Float:y, Float:z, Float:a;
  168. GetPlayerPos(playerid, x, y, z);
  169. GetPlayerFacingAngle(playerid, a);
  170. id = InsertParkMeters(x, y, z, a);
  171.  
  172. if(id == -1)
  173. return SendClientMessage(playerid, -1, "* Server ne može da kreira novi parking metar, zato što je dostigao granicu "#MAX_METERS" parking metrova.");
  174.  
  175. format(string, sizeof(string), "* Postavili ste novi parking metar # %d", id);
  176. SendClientMessage(playerid, 0xFFFF00FF, string);
  177. }
  178. else
  179. {
  180. SendClientMessage(playerid, -1, "* Moras biti admin da bi izvrsio ovu komandu retarde.");
  181. }
  182. return 1;
  183. }
  184.  
  185. CMD:izbrisiparkingm(playerid, params[])
  186. {
  187. if(IsPlayerAdmin(playerid))
  188. {
  189. new id, string[128];
  190.  
  191. if(sscanf(params, "d", id))
  192. return SendClientMessage(playerid, -1, "[?] /izbrisiparkingm [ID]");
  193.  
  194. if(id < 0 || pMeter[id][parkID] < 0 || id >= MAX_METERS)
  195. return SendClientMessage(playerid, -1, "* Invalid ID.");
  196.  
  197. format(string, sizeof(string), "* Izbrisali ste parking metar # %d", id);
  198. SendClientMessage(playerid, 0xFFFF00FF, string);
  199.  
  200. EraseParkMeter(id);
  201. }
  202. else
  203. {
  204. SendClientMessage(playerid, -1, "* Moras biti admin da bi izvrsio ovu komandu retarde.");
  205. }
  206. return 1;
  207. }
  208.  
  209. CMD:parkirajmasinu(playerid, params[])
  210. {
  211. new id = -1, vid = -1, Float:x, Float:y, Float:z, cash, string[128];
  212.  
  213. if(IsPlayerInAnyVehicle(playerid))
  214. return SendClientMessage(playerid, -1, "* Moras biti van kola da bi izvrsio ovu komandu.");
  215.  
  216. if((id = IsPlayerNearParkMeter(playerid)) != -1)
  217. {
  218. if(sscanf(params, "d", cash))
  219. return SendClientMessage(playerid, -1, "[?] /parkirajmasinu [minute] = $"#CASH_PER_MINUTES" po minuti");
  220.  
  221. if(cash < 1 || cash > 30)
  222. return SendClientMessage(playerid, -1, "[!] Mozete parkirati samo od 1 do 30min.");
  223.  
  224. if(GetPlayerMoney(playerid) < cash * CASH_PER_MINUTES)
  225. {
  226. format(string, sizeof(string), "* Ne mozete $%d da postavite park metar na %d minute(s).", cash * CASH_PER_MINUTES, cash);
  227. return SendClientMessage(playerid, -1, string);
  228. }
  229.  
  230. for(new i = 1; i < MAX_VEHICLES; i++)
  231. {
  232. if(IsValidVehicle(i))
  233. {
  234. GetVehiclePos(i, x, y, z);
  235. if(IsPlayerInRangeOfPoint(playerid, 6.0, x, y, z))
  236. {
  237. vid = i;
  238. break;
  239. }
  240. }
  241. }
  242.  
  243. if(vid != -1)
  244. {
  245. format(string, sizeof(string), "* Platili ste $%d i postavili parking metar na (%d), Sada je %s legalno parkiran.", cash * CASH_PER_MINUTES, cash, VehicleNames[GetVehicleModel(vid)-400]);
  246. SendClientMessage(playerid, 0x33AA33FF, string);
  247.  
  248. GivePlayerMoney(playerid, - cash * CASH_PER_MINUTES);
  249.  
  250. pMeter[id][parkSeconds] = cash * 60;
  251. pMeter[id][parkVehicle] = vid;
  252. pMeter[id][parkAvailable] = false;
  253. }
  254. else
  255. {
  256. SendClientMessage(playerid, -1, "* Nema vozila blizu park metra!");
  257. }
  258. }
  259. else
  260. {
  261. SendClientMessage(playerid, -1, "* Niste blizu parking metra.");
  262. }
  263. return 1;
  264. }
  265.  
  266. ////////////////////////////////////////////////////////////////////////////////
  267.  
  268. stock InsertParkMeters(Float:x, Float:y, Float:z, Float:angle)
  269. {
  270. new nextid = -1, query[128];
  271.  
  272. for(new i; i < MAX_METERS; i++)
  273. {
  274. if(pMeter[i][parkID] == -1)
  275. {
  276. nextid = i;
  277. break;
  278. }
  279. }
  280.  
  281. if(nextid < 0)
  282. {
  283. print("* Ne mozes napraviti novi parking metar, nema slobodnih ID-ova za koriscenje - parkingmetar.amx");
  284. }
  285. else
  286. {
  287. printf("* Novi parking metar je napravljen ID %d - parkingmetar.amx", nextid);
  288.  
  289. pMeter[nextid][parkID] = nextid;
  290. pMeter[nextid][parkX] = x;
  291. pMeter[nextid][parkY] = y;
  292. pMeter[nextid][parkZ] = z;
  293. pMeter[nextid][parkA] = angle;
  294. pMeter[nextid][parkAvailable] = true;
  295. pMeter[nextid][parkVehicle] = 0;
  296. pMeter[nextid][parkSeconds] = 0;
  297.  
  298. format(query, sizeof(query), "INSERT INTO `pmeters` (`x`, `y`, `z`, `angle`) VALUES(%.4f, %.4f, %.4f, %.4f)", pMeter[nextid][parkX], pMeter[nextid][parkY], pMeter[nextid][parkZ], pMeter[nextid][parkA]);
  299. db_query(pmeter, query);
  300.  
  301. if(IsValidDynamicObject(pMeter[nextid][parkObject]))
  302. DestroyDynamicObject(pMeter[nextid][parkObject]);
  303.  
  304. if(IsValidDynamic3DTextLabel(pMeter[nextid][parkLabel]))
  305. DestroyDynamic3DTextLabel(pMeter[nextid][parkLabel]);
  306.  
  307. pMeter[nextid][parkObject] = CreateDynamicObject(1269, pMeter[nextid][parkX], pMeter[nextid][parkY], pMeter[nextid][parkZ] - 0.50, 0.0, 0.0, pMeter[nextid][parkA]);
  308. pMeter[nextid][parkLabel] = CreateDynamic3DTextLabel("PARK METER CREATED", 0xFF6347AA, pMeter[nextid][parkX], pMeter[nextid][parkY], pMeter[nextid][parkZ], 15.0);
  309. }
  310. return nextid;
  311. }
  312.  
  313. stock EraseParkMeter(id)
  314. {
  315. new query[92];
  316.  
  317. if(pMeter[id][parkID] > - 1)
  318. {
  319. if(IsValidDynamicObject(pMeter[id][parkObject]))
  320. DestroyDynamicObject(pMeter[id][parkObject]);
  321.  
  322. if(IsValidDynamic3DTextLabel(pMeter[id][parkLabel]))
  323. DestroyDynamic3DTextLabel(pMeter[id][parkLabel]);
  324.  
  325. format(query, sizeof(query), "DELETE FROM `pmeters` WHERE `id` = %d", pMeter[id][parkID]);
  326. db_query(pmeter, query);
  327.  
  328. pMeter[id][parkID] = -1;
  329. pMeter[id][parkX] = 0.0;
  330. pMeter[id][parkY] = 0.0;
  331. pMeter[id][parkZ] = 0.0;
  332. pMeter[id][parkA] = 0.0;
  333. pMeter[id][parkAvailable] = true;
  334. pMeter[id][parkVehicle] = 0;
  335. pMeter[id][parkSeconds] = 0;
  336. }
  337. return 1;
  338. }
  339.  
  340. stock LoadParkMeters()
  341. {
  342. new
  343. DBResult:dbresult,
  344. idx
  345. ;
  346.  
  347. dbresult = db_query(pmeter, "SELECT * FROM `pmeters` ORDER BY `id`");
  348.  
  349. for (new i, j = db_num_rows(dbresult); i != j; i++)
  350. {
  351. pMeter[i][parkID] = db_get_field_assoc_int(dbresult, "id");
  352. pMeter[i][parkX] = db_get_field_assoc_int(dbresult, "x");
  353. pMeter[i][parkY] = db_get_field_assoc_int(dbresult, "y");
  354. pMeter[i][parkZ] = db_get_field_assoc_int(dbresult, "z");
  355. pMeter[i][parkA] = db_get_field_assoc_int(dbresult, "angle");
  356. pMeter[i][parkAvailable] = true;
  357. pMeter[i][parkVehicle] = 0;
  358. pMeter[i][parkSeconds] = 0;
  359.  
  360. if(IsValidDynamicObject(pMeter[i][parkObject]))
  361. DestroyDynamicObject(pMeter[i][parkObject]);
  362.  
  363. if(IsValidDynamic3DTextLabel(pMeter[i][parkLabel]))
  364. DestroyDynamic3DTextLabel(pMeter[i][parkLabel]);
  365.  
  366. pMeter[i][parkObject] = CreateDynamicObject(1269, pMeter[i][parkX], pMeter[i][parkY], pMeter[i][parkZ] - 0.50, 0.0, 0.0, pMeter[i][parkA]);
  367. pMeter[i][parkLabel] = CreateDynamic3DTextLabel("_", 0xFF6347AA, pMeter[i][parkX], pMeter[i][parkY], pMeter[i][parkZ], 15.0);
  368.  
  369. idx++;
  370.  
  371. db_next_row(dbresult);
  372. }
  373. db_free_result(dbresult);
  374.  
  375. printf("* Ucitan %d parking metar parkingmetar.amx", idx);
  376. return 1;
  377. }
  378.  
  379. stock IsPlayerNearParkMeter(playerid)
  380. {
  381. new id = -1;
  382.  
  383. for(new i; i < MAX_METERS; i++)
  384. {
  385. if(pMeter[i][parkID] > -1 && IsPlayerInRangeOfPoint(playerid, 3.0, pMeter[i][parkX], pMeter[i][parkY], pMeter[i][parkZ]))
  386. {
  387. return i;
  388. }
  389. }
  390. return id;
  391. }
  392.  
  393. stock GetClosestVehicleInObject(objectid)
  394. {
  395. new vid, Float:x, Float:y, Float:z, Float:distance;
  396. GetDynamicObjectPos(objectid, x, y, z);
  397. for(new i; i < MAX_VEHICLES; i++)
  398. {
  399. if(IsValidVehicle(i))
  400. {
  401. distance = GetVehicleDistanceFromPoint(i, x, y, z);
  402. if(distance <= 6)
  403. {
  404. vid = i;
  405. break;
  406. }
  407. }
  408. }
  409. return vid;
  410. }
Advertisement
Add Comment
Please, Sign In to add comment