Advertisement
Guest User

VEHICLE OWNERSHIP

a guest
Oct 3rd, 2011
568
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 36.26 KB | None | 0 0
  1. /* =============== CHANGE LOG: =================
  2.  
  3. April 25, 2011:
  4. * Minor optimizations & known bugs fixed.
  5. * Fixed a bug where the car would spawn but the plate wouldn't set!
  6. * Added /RemoveVeh command for the .INI version!
  7. * Added 'TogglePlayerControllable(playerid, true);' when removing the vehicle, else you would be frozen.
  8. * Merge the FILE and MySQL version together. Togable commenting/uncommenting the line: #define USE_MYSQL_VERSION
  9. * Added some security for the MySQL version.
  10. * Added Paint Job saving for both .INI and MySQL versions!
  11. April 26, 2011:
  12. * Added mod saving for both versions!!
  13. * Cleaned up the code a bit.
  14. May 18, 2011:
  15. * Fixed a few errors regarding the mod loading for the .INI version.
  16. * Added /lock /unlock commands. /Exit command has been renamed to /VExit.
  17. * Added Max Ownable Vehicles per player. Current limit is set to 2 vehicles.
  18. * Fixed all known bugs ( Most recent bugs reported on the topic )
  19. May 24, 2011:
  20. * Fixed the vehicles not getting their mods after death.
  21. * Cleaned up the code a bit.
  22. */
  23.  
  24. #include <a_samp>
  25. #include <zcmd>
  26.  
  27. native sscanf(const data[], const format[], {Float,_}:...);
  28. native unformat(const data[], const format[], {Float,_}:...) = sscanf;
  29.  
  30. //========
  31. #define USE_MYSQL_VERSION // < Uncomment this line to use INI FILE version! EX: //#define USE_MYSQL_VERSION
  32. //========
  33.  
  34. #if defined USE_MYSQL_VERSION
  35. #include <a_mysql>
  36. #else
  37. #include <SII>
  38. #endif
  39.  
  40. #define COLOR_GREY 0xAFAFAFAA
  41. #define COLOR_RED 0xFF0000FF
  42.  
  43. #define CYELLOW "{9DBD1E}"
  44. #define CORANGE "{E68C0E}"
  45. #define CBLUE "{39AACC}"
  46. #define CDGREEN "{6FA828}"
  47. #define CWHITE "{FFFFFF}"
  48. #define CRED "{FF0000}"
  49. #define CGREY "{7D8584}"
  50.  
  51. #if defined USE_MYSQL_VERSION
  52. // Edit your MySQL settings
  53. #define SQL_HOST "" // HOST
  54. #define SQL_USER "" // USER
  55. #define SQL_PASS "" // PASS
  56. #define SQL_DB "" // DB
  57. #define mysql_fetch_row(%1) mysql_fetch_row_format(%1,"|")
  58. #endif
  59.  
  60. #define MAX_BUYABLE_VEH 50 // Change to the ammount of vehicles
  61. #define MAX_VEH_MODS 12 // Max mods ( Do not edit )
  62. #define MAX_OWNABLE_VEH 2 // Change to the ammount of vehicles a player can own!
  63.  
  64. #define OwnedVeh(%0) ivCreated[%0]
  65.  
  66. enum _VINFO
  67. {
  68. vModel,
  69. vColor1,
  70. vColor2,
  71. vPrice,
  72. vOwner[MAX_PLAYER_NAME],
  73. Float:vPosX,
  74. Float:vPosY,
  75. Float:vPosZ,
  76. Float:vPosA,
  77. vPlate[32],
  78. vPaintJ,
  79. vLocked
  80. }
  81. new
  82. vInfo[MAX_BUYABLE_VEH][_VINFO],
  83. ivCreated[MAX_VEHICLES],
  84. Total_Veh_Created,
  85. vMods[MAX_BUYABLE_VEH][MAX_VEH_MODS],
  86. Total_Player_Vehicles[MAX_PLAYERS];
  87.  
  88. public OnFilterScriptInit()
  89. {
  90. #if defined USE_MYSQL_VERSION
  91. mysql_connect(SQL_HOST, SQL_USER, SQL_DB, SQL_PASS);
  92. mysql_debug(1);
  93. #endif
  94.  
  95. LoadPVehicles();
  96. return 1;
  97. }
  98.  
  99. public OnFilterScriptExit()
  100. {
  101. for(new i = 0; i < MAX_BUYABLE_VEH; ++i) DestroyVehicle(i);
  102. return 1;
  103. }
  104.  
  105. public OnVehicleSpawn(vehicleid)
  106. {
  107. return 1;
  108. }
  109.  
  110. public OnVehicleDeath(vehicleid, killerid)
  111. {
  112. if(OwnedVeh(vehicleid) != 0)
  113. {
  114. new
  115. vCreated = OwnedVeh(vehicleid);
  116.  
  117. DestroyVehicle(vehicleid);
  118.  
  119. new
  120. NewVeh = CreateVehicle(vInfo[vCreated][vModel], vInfo[vCreated][vPosX], vInfo[vCreated][vPosY], vInfo[vCreated][vPosZ], vInfo[vCreated][vPosA], vInfo[vCreated][vColor1], vInfo[vCreated][vColor2], 500000);
  121. SetVehicleNumberPlate(NewVeh, vInfo[vCreated][vPlate]);
  122. ChangeVehiclePaintjob(NewVeh, vInfo[vCreated][vPaintJ]);
  123.  
  124. for(new iMod = 0; iMod < MAX_VEH_MODS; ++iMod)
  125. {
  126. if(vMods[vCreated][iMod] > 0)
  127. {
  128. AddVehicleComponent(NewVeh, vMods[vCreated][iMod]);
  129. }
  130. }
  131.  
  132. printf("=- Vehicle id: %i has been re-created -=", vCreated);
  133. }
  134. return 1;
  135. }
  136.  
  137. public OnPlayerStateChange(playerid, newstate, oldstate)
  138. {
  139. if(newstate == PLAYER_STATE_DRIVER)
  140. {
  141. new
  142. iVehicleID = GetPlayerVehicleID(playerid),
  143. iMsg[120];
  144.  
  145. if(OwnedVeh(iVehicleID) != 0)
  146. {
  147. if(strmatch(vInfo[OwnedVeh(iVehicleID)][vOwner], "Unbought"))
  148. {
  149. format(iMsg, sizeof(iMsg), ""#CBLUE"Hello! You can purchase this vehicle for: "#CDGREEN"$%i", vInfo[OwnedVeh(iVehicleID)][vPrice]);
  150. SendClientMessage(playerid, -1, iMsg);
  151.  
  152. SendClientMessage(playerid, COLOR_GREY, "Please type /Buyveh to purchase it. Or type /Exit to exit this vehicle!");
  153. TogglePlayerControllable(playerid, false);
  154. }
  155. else if(strmatch(vInfo[OwnedVeh(iVehicleID)][vOwner], pName(playerid)))
  156. {
  157. format(iMsg, sizeof(iMsg), ""#CBLUE"Hello: "#CDGREEN"%s(%d)! "#CBLUE"Welcome back to your vehicle..", pName(playerid), playerid);
  158. SendClientMessage(playerid, COLOR_RED, iMsg);
  159. }
  160. else if(strmatch(vInfo[OwnedVeh(iVehicleID)][vOwner], pName(playerid)) || vInfo[OwnedVeh(iVehicleID)][vLocked] == 1)
  161. {
  162. format(iMsg, sizeof(iMsg), ""CBLUE"Hello: "#CDGREEN"%s(%d)! "#CBLUE"This vehicle is belongs to: "#CDGREEN"%s!", pName(playerid), playerid, vInfo[OwnedVeh(iVehicleID)][vOwner]);
  163. SendClientMessage(playerid, -1, iMsg);
  164. SendClientMessage(playerid, -1, ""#CYELLOW"This vehicle is "#CRED"locked! "#CYELLOW"Please use /exit to get out of this vehicle!");
  165. TogglePlayerControllable(playerid, false);
  166. }
  167. else if(strmatch(vInfo[OwnedVeh(iVehicleID)][vOwner], pName(playerid)) || vInfo[OwnedVeh(iVehicleID)][vLocked] == 0)
  168. {
  169. format(iMsg, sizeof(iMsg), ""CBLUE"Hello: "#CDGREEN"%s(%d)! "#CBLUE"Welcome to: "#CDGREEN"%s's vehicle!", pName(playerid), playerid, vInfo[OwnedVeh(iVehicleID)][vOwner]);
  170. SendClientMessage(playerid, -1, iMsg);
  171. SendClientMessage(playerid, -1, ""#CYELLOW"This vehicle is "#CDGREEN"unlocked!");
  172. }
  173. else
  174. {
  175. format(iMsg, sizeof(iMsg), ""#CBLUE"The owner of this vehicle is: "#CDGREEN"%s", vInfo[OwnedVeh(iVehicleID)][vOwner]);
  176. SendClientMessage(playerid, -1, iMsg);
  177.  
  178. RemovePlayerFromVehicle(playerid);
  179. }
  180. }
  181. }
  182. return 1;
  183. }
  184.  
  185. public OnVehicleRespray(playerid, vehicleid, color1, color2)
  186. {
  187. if(OwnedVeh(vehicleid) != 0)
  188. {
  189. vInfo[OwnedVeh(vehicleid)][vColor1] = color1;
  190. vInfo[OwnedVeh(vehicleid)][vColor2] = color2;
  191.  
  192. SavePrivVeh(OwnedVeh(vehicleid));
  193.  
  194. printf("=- Vehicle id: %i has changed colors to: %i - %i -=", OwnedVeh(vehicleid), color1, color2);
  195. }
  196. return 1;
  197. }
  198.  
  199. public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
  200. {
  201. if(OwnedVeh(vehicleid) != 0)
  202. {
  203. vInfo[OwnedVeh(vehicleid)][vPaintJ] = paintjobid;
  204.  
  205. SavePrivVeh(OwnedVeh(vehicleid));
  206.  
  207. printf("=- Vehicle id: %i has changed paintjob to: %i -=", OwnedVeh(vehicleid), paintjobid);
  208. }
  209. return 1;
  210. }
  211.  
  212. public OnVehicleMod(playerid, vehicleid, componentid)
  213. {
  214. new
  215. Total_V_Mods = 0;
  216.  
  217. for(new i = 0; i < MAX_VEH_MODS; ++i)
  218. {
  219. if(vMods[OwnedVeh(vehicleid)][i] == 0)//Info[OwnedVeh(vehicleid)][vMods][i] == 0) If there's an empty mod slot
  220. {
  221. vMods[OwnedVeh(vehicleid)][i] = componentid;
  222.  
  223. SavePrivVeh(OwnedVeh(vehicleid));
  224.  
  225. printf("=- Vehicle id: %i has changed mod to: %i -=", OwnedVeh(vehicleid), componentid);
  226.  
  227. ++ Total_V_Mods;
  228. break;
  229. }
  230. }
  231. if(Total_V_Mods == 0) SendClientMessage(playerid, COLOR_RED, "You cannot add more mods to your vehicle!");
  232. return 1;
  233. }
  234.  
  235. #if defined USE_MYSQL_VERSION
  236. CMD:vcreate(playerid, params[])
  237. {
  238. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_RED, "You must be admin to use this command!");
  239.  
  240. new
  241. Float:Pos[4],
  242. ivModel,
  243. ivPrice,
  244. ivColors[2],
  245. Query[256],
  246. iMsg[148];
  247.  
  248. if(sscanf(params, "iiii", ivModel, ivPrice, ivColors[0], ivColors[1])) return SendClientMessage(playerid, -1, ""#CRED"Usage: "#CORANGE"/VCreate < Vehicle Model > < Price > < Color 1 > < Color 2 >");
  249.  
  250. GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
  251. GetPlayerFacingAngle(playerid, Pos[3]);
  252.  
  253. ++ Total_Veh_Created;
  254.  
  255. vInfo[Total_Veh_Created][vModel] = ivModel;
  256. vInfo[Total_Veh_Created][vColor1] = ivColors[0];
  257. vInfo[Total_Veh_Created][vColor2] = ivColors[1];
  258. vInfo[Total_Veh_Created][vPrice] = ivPrice;
  259. vInfo[Total_Veh_Created][vPosX] = Pos[0];
  260. vInfo[Total_Veh_Created][vPosY] = Pos[1];
  261. vInfo[Total_Veh_Created][vPosZ] = Pos[2];
  262. vInfo[Total_Veh_Created][vPosA] = Pos[3];
  263. strmid(vInfo[Total_Veh_Created][vOwner], "Unbought", 0, 20, 20);
  264. strmid(vInfo[Total_Veh_Created][vPlate], "ChangeME", 0, 32, 32);
  265. vInfo[Total_Veh_Created][vPaintJ] = 0;
  266. vInfo[Total_Veh_Created][vLocked] = 1;
  267.  
  268. for(new i = 0; i < MAX_VEH_MODS; ++i) vMods[Total_Veh_Created][i] = 0;
  269.  
  270. format(Query, sizeof(Query), "INSERT INTO `privateveh` (`vID`, `vModel`, `vColor1`, `vColor2`, `vPrice`, `vOwner`, `vPosX`, `vPosY`, `vPosZ`, `vPosA`, `vPlate`, `vPaintJ`) VALUES (%d, %d, %d, %d, %d, 'Unbought', %f, %f, %f, %f, 'ChangeME', 0)",
  271. Total_Veh_Created,
  272. ivModel,
  273. ivColors[0],
  274. ivColors[1],
  275. ivPrice,
  276. Pos[0],
  277. Pos[1],
  278. Pos[2],
  279. Pos[3]);
  280. mysql_query(Query);
  281.  
  282. new
  283. cCar = CreateVehicle(ivModel, Pos[0], Pos[1], Pos[2], Pos[3], ivColors[0], ivColors[1], 500000);
  284. SetVehicleNumberPlate(cCar, "ChangeME");
  285.  
  286. OwnedVeh(cCar) = Total_Veh_Created;
  287.  
  288. SavePrivVeh(Total_Veh_Created);
  289.  
  290. format(iMsg, sizeof(iMsg), ""#CYELLOW"Vehicle: "#CBLUE"%i (VID: %i) "#CYELLOW"has been created. Price: "#CBLUE"$%i "#CYELLOW"Plate: "#CBLUE"ChangeME", ivModel, Total_Veh_Created, ivPrice);
  291. SendClientMessage(playerid, -1, iMsg);
  292. return 1;
  293. }
  294.  
  295. CMD:removeveh(playerid, params[])
  296. {
  297. if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_RED, "You must be in a vehicle to use this command!");
  298. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_RED, "You must be admin to use this command!");
  299.  
  300. new
  301. ivID = GetPlayerVehicleID(playerid);
  302.  
  303. if(OwnedVeh(ivID) != 0)
  304. {
  305. new
  306. Query[80];
  307.  
  308. format(Query, sizeof(Query), "DELETE FROM `privateveh` WHERE `vID` = %i LIMIT 1", OwnedVeh(ivID));
  309. mysql_query(Query);
  310.  
  311. vInfo[OwnedVeh(ivID)][vModel] = 0;
  312. vInfo[OwnedVeh(ivID)][vPosX] = 0.0;
  313. vInfo[OwnedVeh(ivID)][vPosY] = 0.0;
  314. vInfo[OwnedVeh(ivID)][vPosZ] = 0.0;
  315. vInfo[OwnedVeh(ivID)][vPosA] = 0.0;
  316. vInfo[OwnedVeh(ivID)][vColor1] = 0;
  317. vInfo[OwnedVeh(ivID)][vColor2] = 0;
  318. vInfo[OwnedVeh(ivID)][vPrice] = 0;
  319. strmid(vInfo[OwnedVeh(ivID)][vOwner], " ", 0, 5, 5);
  320. strmid(vInfo[OwnedVeh(ivID)][vPlate], " ", 0, 5, 5);
  321. vInfo[OwnedVeh(ivID)][vPaintJ] = 0;
  322. vInfo[OwnedVeh(ivID)][vLocked] = 0;
  323.  
  324. DestroyVehicle(ivID);
  325. OwnedVeh(OwnedVeh(ivID)) = 0;
  326.  
  327. -- Total_Veh_Created;
  328. TogglePlayerControllable(playerid, true);
  329.  
  330. SendClientMessage(playerid, COLOR_GREY, "This vehicle has been removed!");
  331. return 1;
  332. }
  333. else return SendClientMessage(playerid, COLOR_RED, "This vehicle is not ownable!");
  334. }
  335.  
  336. #else
  337.  
  338. CMD:vcreate(playerid, params[])
  339. {
  340. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_RED, "You must be admin to use this command!");
  341.  
  342. new
  343. Float:Pos[4],
  344. ivModel,
  345. ivPrice,
  346. ivColors[2],
  347. iMsg[148];
  348.  
  349. if(sscanf(params, "iiii", ivModel, ivPrice, ivColors[0], ivColors[1])) return SendClientMessage(playerid, -1, ""#CRED"Usage: "#CORANGE"/VCreate < Vehicle Model > < Price > < Color 1 > < Color 2 >");
  350.  
  351. GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
  352. GetPlayerFacingAngle(playerid, Pos[3]);
  353.  
  354. ++ Total_Veh_Created;
  355.  
  356. vInfo[Total_Veh_Created][vModel] = ivModel;
  357. vInfo[Total_Veh_Created][vColor1] = ivColors[0];
  358. vInfo[Total_Veh_Created][vColor2] = ivColors[1];
  359. vInfo[Total_Veh_Created][vPrice] = ivPrice;
  360. vInfo[Total_Veh_Created][vPosX] = Pos[0];
  361. vInfo[Total_Veh_Created][vPosY] = Pos[1];
  362. vInfo[Total_Veh_Created][vPosZ] = Pos[2];
  363. vInfo[Total_Veh_Created][vPosA] = Pos[3];
  364. strmid(vInfo[Total_Veh_Created][vOwner], "Unbought", 0, 20, 20);
  365. strmid(vInfo[Total_Veh_Created][vPlate], "ChangeME", 0, 32, 32);
  366. vInfo[Total_Veh_Created][vPaintJ] = 0;
  367. vInfo[Total_Veh_Created][vLocked] = 1;
  368.  
  369. new
  370. vFile[15];
  371. format(vFile, sizeof(vFile), "%d.ini", Total_Veh_Created);
  372.  
  373. INI_Open(vFile);
  374.  
  375. INI_WriteInt("Model", vModel);
  376. INI_WriteInt("Color1", ivColors[0]);
  377. INI_WriteInt("Color2", ivColors[1]);
  378. INI_WriteInt("Price", ivPrice);
  379. INI_WriteString("Owner", "Unbought");
  380. INI_WriteFloat("vPosX", Pos[0]);
  381. INI_WriteFloat("vPosY", Pos[1]);
  382. INI_WriteFloat("vPosZ", Pos[2]);
  383. INI_WriteFloat("vPosA", Pos[3]);
  384. INI_WriteString("Plate", "ChangeME");
  385. INI_WriteInt("PaintJ", 0);
  386.  
  387. INI_Save();
  388. INI_Close();
  389.  
  390. new
  391. cCar = CreateVehicle(ivModel, Pos[0], Pos[1], Pos[2], Pos[3], ivColors[0], ivColors[1], 500000);
  392. SetVehicleNumberPlate(cCar, "ChangeME");
  393.  
  394. OwnedVeh(cCar) = Total_Veh_Created;
  395.  
  396. SavePrivVeh(Total_Veh_Created);
  397.  
  398. format(iMsg, sizeof(iMsg), ""#CYELLOW"Vehicle: "#CBLUE"%i (VID: %i) "#CYELLOW"has been created. Price: "#CBLUE"$%i "#CYELLOW"Plate: "#CBLUE"ChangeME", ivModel, Total_Veh_Created, ivPrice);
  399. SendClientMessage(playerid, -1, iMsg);
  400. return 1;
  401. }
  402.  
  403. CMD:removeveh(playerid, params[])
  404. {
  405. if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_RED, "You must be in a vehicle to use this command!");
  406. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_RED, "You must be admin to use this command!");
  407.  
  408. new
  409. ivID = GetPlayerVehicleID(playerid);
  410.  
  411. if(OwnedVeh(ivID) != 0)
  412. {
  413. new
  414. vFile[12];
  415.  
  416. format(vFile, sizeof(vFile), "%d.ini", OwnedVeh(ivID));
  417. INI_Remove(vFile);
  418.  
  419. vInfo[OwnedVeh(ivID)][vModel] = 0;
  420. vInfo[OwnedVeh(ivID)][vPosX] = 0.0;
  421. vInfo[OwnedVeh(ivID)][vPosY] = 0.0;
  422. vInfo[OwnedVeh(ivID)][vPosZ] = 0.0;
  423. vInfo[OwnedVeh(ivID)][vPosA] = 0.0;
  424. vInfo[OwnedVeh(ivID)][vColor1] = 0;
  425. vInfo[OwnedVeh(ivID)][vColor2] = 0;
  426. vInfo[OwnedVeh(ivID)][vPrice] = 0;
  427. strmid(vInfo[OwnedVeh(ivID)][vOwner], " ", 0, 5, 5);
  428. strmid(vInfo[OwnedVeh(ivID)][vPlate], " ", 0, 5, 5);
  429. vInfo[OwnedVeh(ivID)][vPaintJ] = 0;
  430. vInfo[OwnedVeh(ivID)][vLocked] = 1;
  431.  
  432. DestroyVehicle(ivID);
  433. OwnedVeh(OwnedVeh(ivID)) = 0;
  434.  
  435. -- Total_Veh_Created;
  436. TogglePlayerControllable(playerid, true);
  437.  
  438. SendClientMessage(playerid, COLOR_GREY, "This vehicle has been removed!");
  439. return 1;
  440. }
  441. else return SendClientMessage(playerid, COLOR_RED, "This vehicle is not ownable!");
  442. }
  443. #endif
  444.  
  445. CMD:buyveh(playerid, params[])
  446. {
  447. for(new i = 0; i < MAX_BUYABLE_VEH; ++i)
  448. {
  449. if(strmatch(vInfo[i][vOwner], pName(playerid)))
  450. {
  451. Total_Player_Vehicles[playerid] = Total_Player_Vehicles[playerid] + 1;
  452. }
  453. }
  454.  
  455. if(Total_Player_Vehicles[playerid] >= MAX_OWNABLE_VEH) return SendClientMessage(playerid, -1, ""#CRED"You've reached the limit of "#CBLUE""#MAX_OWNABLE_VEH" "#CRED"ownable vehicles!!");
  456.  
  457. if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_RED, "You need to be in a buyable vehicle to purchase it!");
  458.  
  459. new
  460. ivID = GetPlayerVehicleID(playerid);
  461.  
  462. if(OwnedVeh(ivID) != 0)
  463. {
  464. if(strmatch(vInfo[OwnedVeh(ivID)][vOwner], pName(playerid)))
  465. {
  466. SendClientMessage(playerid, COLOR_RED, "This vehicle already has an owner!");
  467. return 1;
  468. }
  469. if(strmatch(vInfo[OwnedVeh(ivID)][vOwner], "Unbought"))
  470. {
  471. if(vInfo[OwnedVeh(ivID)][vPrice] < GetPlayerMoney(playerid))
  472. {
  473. strmid(vInfo[OwnedVeh(ivID)][vOwner], pName(playerid), 0, 128, 128);
  474.  
  475. new
  476. Float:vPos[4];
  477.  
  478. GetVehiclePos(ivID, vPos[0], vPos[1], vPos[2]);
  479. GetVehicleZAngle(ivID, vPos[3]);
  480.  
  481. strmid(vInfo[OwnedVeh(ivID)][vPlate], pName(playerid), 0, 32, 32);
  482. vInfo[OwnedVeh(ivID)][vLocked] = 1;
  483.  
  484. SetVehicleNumberPlate(ivID, pName(playerid));
  485. SetVehicleToRespawn(ivID);
  486. SetVehiclePos(ivID, vPos[0], vPos[1], vPos[2]);
  487. SetVehicleZAngle(ivID, vPos[3]);
  488. PutPlayerInVehicle(playerid, ivID, 0);
  489.  
  490. GivePlayerMoney(playerid, - vInfo[OwnedVeh(ivID)][vPrice]);
  491.  
  492. SendClientMessage(playerid, -1, ""#CYELLOW"Have fun with your private vehicle!");
  493. SendClientMessage(playerid, -1, ""#CBLUE"Your vehicle is "#CDGREEN"locked.");
  494.  
  495. TogglePlayerControllable(playerid, true);
  496.  
  497. SavePrivVeh(OwnedVeh(ivID));
  498.  
  499. printf("=- Vehicle id: %i has been bought by: %s -=", OwnedVeh(ivID), pName(playerid));
  500. return 1;
  501. }
  502. else return SendClientMessage(playerid, COLOR_RED, "You don't have enough cash to purchase this vehicle!");
  503. }
  504. else return SendClientMessage(playerid, COLOR_RED, "This vehicle is not for sale!");
  505. }
  506. else return SendClientMessage(playerid, COLOR_RED, "This is not a buyable vehicle!");
  507. }
  508.  
  509. CMD:sellveh(playerid, params[])
  510. {
  511. if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_RED, "You must be in a vehicle to use this command!");
  512.  
  513. new
  514. ivID = GetPlayerVehicleID(playerid),
  515. Float:Pos[4];
  516.  
  517. GetVehiclePos(ivID, Pos[0], Pos[1], Pos[2]);
  518. GetVehicleZAngle(ivID, Pos[3]);
  519.  
  520. if(OwnedVeh(ivID) != 0)
  521. {
  522. if(strmatch(vInfo[OwnedVeh(ivID)][vOwner], pName(playerid)))
  523. {
  524. vInfo[OwnedVeh(ivID)][vPosX] = Pos[0];
  525. vInfo[OwnedVeh(ivID)][vPosY] = Pos[1];
  526. vInfo[OwnedVeh(ivID)][vPosZ] = Pos[2];
  527. vInfo[OwnedVeh(ivID)][vPosA] = Pos[3];
  528. vInfo[OwnedVeh(ivID)][vPrice] = vInfo[OwnedVeh(ivID)][vPrice];
  529. strmid(vInfo[OwnedVeh(ivID)][vOwner], "Unbought", 0, 20, 20);
  530. strmid(vInfo[OwnedVeh(ivID)][vPlate], "ChangeME", 0, 32, 32);
  531. vInfo[OwnedVeh(ivID)][vLocked] = 1;
  532.  
  533. GivePlayerMoney(playerid, vInfo[OwnedVeh(ivID)][vPrice] - 10000);
  534. SendClientMessage(playerid, COLOR_GREY, "You've sold this vehicle and the money has been given back!");
  535.  
  536. SetVehicleNumberPlate(ivID, "ChangeME");
  537. SetVehicleToRespawn(ivID);
  538. SetVehiclePos(ivID, Pos[0], Pos[1], Pos[2]);
  539. SetVehicleZAngle(ivID, Pos[3]);
  540.  
  541. SavePrivVeh(OwnedVeh(ivID));
  542. printf("=- Vehicle id: %i has been sold by: %s -=", OwnedVeh(ivID), pName(playerid));
  543. return 1;
  544. }
  545. else return SendClientMessage(playerid, COLOR_RED, "This vehicle does not belong to you!");
  546. }
  547. else return SendClientMessage(playerid, COLOR_RED, "This vehicle is not ownable!");
  548. }
  549.  
  550. CMD:park(playerid, params[])
  551. {
  552. if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_RED, "You must be in a vehicle to use this command!");
  553.  
  554. new
  555. ivID = GetPlayerVehicleID(playerid),
  556. Float:Pos[4];
  557.  
  558. if(OwnedVeh(ivID) != 0)
  559. {
  560. if(strmatch(vInfo[OwnedVeh(ivID)][vOwner], pName(playerid)))
  561. {
  562. GetVehiclePos(ivID, Pos[0], Pos[1], Pos[2]);
  563. GetVehicleZAngle(ivID, Pos[3]);
  564.  
  565. vInfo[OwnedVeh(ivID)][vPosX] = Pos[0];
  566. vInfo[OwnedVeh(ivID)][vPosY] = Pos[1];
  567. vInfo[OwnedVeh(ivID)][vPosZ] = Pos[2];
  568. vInfo[OwnedVeh(ivID)][vPosA] = Pos[3];
  569.  
  570. SendClientMessage(playerid, COLOR_GREY, "This vehicle has been parked here. This will also be the spawn point!");
  571.  
  572. SavePrivVeh(OwnedVeh(ivID));
  573.  
  574. printf("=- Vehicle id: %i has been parked by: %s at: x: %.2f .. y: %.2f .. z: %.2f .. a: %.2f -=", OwnedVeh(ivID), pName(playerid), Pos[0], Pos[1], Pos[2], Pos[3]);
  575. return 1;
  576. }
  577. else return SendClientMessage(playerid, COLOR_RED, "This vehicle does not belong to you!");
  578. }
  579. else return SendClientMessage(playerid, COLOR_RED, "This vehicle is not ownable!");
  580. }
  581.  
  582. CMD:removemods(playerid, params[])
  583. {
  584. if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_RED, "You must be in a vehicle to use this command!");
  585.  
  586. new
  587. ivID = GetPlayerVehicleID(playerid);
  588.  
  589. if(OwnedVeh(ivID) != 0)
  590. {
  591. if(strmatch(vInfo[OwnedVeh(ivID)][vOwner], pName(playerid)))
  592. {
  593. for(new i = 0; i < MAX_VEH_MODS; ++i) vMods[OwnedVeh(ivID)][i] = 0;
  594.  
  595. SendClientMessage(playerid, COLOR_GREY, "All mods on this vehicle have been successfully removed!");
  596.  
  597. SavePrivVeh(OwnedVeh(ivID));
  598.  
  599. printf("=- Vehicle id: %i has had all its mods removed -=", OwnedVeh(ivID));
  600. return 1;
  601. }
  602. else return SendClientMessage(playerid, COLOR_RED, "This vehicle does not belong to you!");
  603. }
  604. else return SendClientMessage(playerid, COLOR_RED, "This vehicle is not ownable!");
  605. }
  606.  
  607. CMD:plate(playerid, params[])
  608. {
  609. if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_RED, "You must be in a vehicle to use this command!");
  610.  
  611. new
  612. ivID = GetPlayerVehicleID(playerid),
  613. iMsg[120];
  614.  
  615. if(isnull(params)) return SendClientMessage(playerid, -1, ""#CRED"Usage: "#CORANGE"/Plate < Plate Number / Name >");
  616.  
  617. if(strlen(params) < 0 || strlen(params) > 32) return SendClientMessage(playerid, COLOR_RED, "The plate number / name must be between 0 - 32 characters!");
  618.  
  619. if(OwnedVeh(ivID) != 0)
  620. {
  621. if(strmatch(vInfo[OwnedVeh(ivID)][vOwner], pName(playerid)))
  622. {
  623. new
  624. Float:vPos[4];
  625.  
  626. GetVehiclePos(ivID, vPos[0], vPos[1], vPos[2]);
  627. GetVehicleZAngle(ivID, vPos[3]);
  628.  
  629. strmid(vInfo[OwnedVeh(ivID)][vPlate], params, 0, 32, 32);
  630.  
  631. SetVehicleNumberPlate(ivID, params);
  632. SetVehicleToRespawn(ivID);
  633. SetVehiclePos(ivID, vPos[0], vPos[1], vPos[2]);
  634. SetVehicleZAngle(ivID, vPos[3]);
  635. PutPlayerInVehicle(playerid, ivID, 0);
  636.  
  637. format(iMsg, sizeof(iMsg), ""#CBLUE"You've set your vehicle's plate number to: "#CDGREEN"%s", params);
  638. SendClientMessage(playerid, -1, iMsg);
  639.  
  640. SavePrivVeh(ivID);
  641. return 1;
  642. }
  643. else return SendClientMessage(playerid, COLOR_RED, "This vehicle does not belong to you!");
  644. }
  645. else return SendClientMessage(playerid, COLOR_RED, "This vehicle is not ownable!");
  646. }
  647.  
  648. CMD:lock(playerid, params[])
  649. {
  650. if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_RED, "You must be in a vehicle to use this command!");
  651.  
  652. new
  653. ivID = GetPlayerVehicleID(playerid);
  654.  
  655. if(OwnedVeh(ivID) != 0)
  656. {
  657. if(strmatch(vInfo[OwnedVeh(ivID)][vOwner], pName(playerid)))
  658. {
  659. vInfo[OwnedVeh(ivID)][vLocked] = 1;
  660.  
  661. SendClientMessage(playerid, -1, ""#CBLUE"You've successfully "#CDGREEN"locked "#CBLUE"your vehicle!");
  662.  
  663. SavePrivVeh(OwnedVeh(ivID));
  664. return 1;
  665. }
  666. else return SendClientMessage(playerid, COLOR_RED, "This vehicle does not belong to you!");
  667. }
  668. else return SendClientMessage(playerid, COLOR_RED, "This vehicle is not ownable!");
  669. }
  670.  
  671. CMD:unlock(playerid, params[])
  672. {
  673. if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_RED, "You must be in a vehicle to use this command!");
  674.  
  675. new
  676. ivID = GetPlayerVehicleID(playerid);
  677.  
  678. if(OwnedVeh(ivID) != 0)
  679. {
  680. if(strmatch(vInfo[OwnedVeh(ivID)][vOwner], pName(playerid)))
  681. {
  682. vInfo[OwnedVeh(ivID)][vLocked] = 0;
  683.  
  684. SendClientMessage(playerid, -1, ""#CBLUE"You've successfully "#CRED"unlocked "#CBLUE"your vehicle!");
  685.  
  686. SavePrivVeh(OwnedVeh(ivID));
  687. return 1;
  688. }
  689. else return SendClientMessage(playerid, COLOR_RED, "This vehicle does not belong to you!");
  690. }
  691. else return SendClientMessage(playerid, COLOR_RED, "This vehicle is not ownable!");
  692. }
  693.  
  694. CMD:vsetprice(playerid, params[])
  695. {
  696. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_RED, "You must be admin to use this command!");
  697. if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_RED, "You need to be in a buyable vehicle to set a price!");
  698.  
  699. new
  700. ivPrice = strval(params),
  701. ivID = GetPlayerVehicleID(playerid),
  702. iMsg[75];
  703.  
  704. if(isnull(params)) return SendClientMessage(playerid, -1, ""#CRED"Usage: "#CORANGE"/VSetPrice < Price >");
  705.  
  706. if(OwnedVeh(ivID) != 0)
  707. {
  708. vInfo[OwnedVeh(ivID)][vPrice] = ivPrice;
  709.  
  710. format(iMsg, sizeof(iMsg), ""#CDGREEN"The price for this vehicle has been set to: "#CBLUE"$%i", ivPrice);
  711. SendClientMessage(playerid, -1, iMsg);
  712.  
  713. SavePrivVeh(OwnedVeh(ivID));
  714.  
  715. printf("=- Vehicle id: %i's price has been set to: $%i by: %s -=", OwnedVeh(ivID), ivPrice, pName(playerid));
  716. return 1;
  717. }
  718. else return SendClientMessage(playerid, COLOR_RED, "This is not a buyable vehicle!");
  719. }
  720.  
  721. CMD:vsetowner(playerid, params[])
  722. {
  723. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_RED, "You must be admin to use this command!");
  724. if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_RED, "You need to be in a vehicle to set an owner!");
  725.  
  726. new
  727. nvOwner,
  728. iMsg[95],
  729. Float:aPos[3],
  730. ivID = GetPlayerVehicleID(playerid);
  731.  
  732. if(sscanf(params, "u", nvOwner)) return SendClientMessage(playerid, -1, ""#CRED"Usage: "#CORANGE"/vSetOwner < New Owner >");
  733.  
  734. if(!IsPlayerConnected(nvOwner)) return SendClientMessage(playerid, COLOR_RED, "That user is not online!");
  735.  
  736. if(OwnedVeh(ivID) != 0)
  737. {
  738. strmid(vInfo[OwnedVeh(ivID)][vOwner], pName(nvOwner), 0, 24, 24);
  739. strmid(vInfo[OwnedVeh(ivID)][vPlate], pName(nvOwner), 0, 32, 32);
  740.  
  741. format(iMsg, sizeof(iMsg), ""#CDGREEN"You've made: "#CBLUE"%s(%d) "#CDGREEN"owner of this vehicle!", pName(nvOwner), nvOwner);
  742. SendClientMessage(playerid, -1, iMsg);
  743.  
  744. GetPlayerPos(playerid, aPos[0], aPos[1], aPos[2]);
  745.  
  746. format(iMsg, sizeof(iMsg), ""#CDGREEN"Admin: "#CBLUE"%s(%d) "#CDGREEN"has made you owner of vehicle id: "#CBLUE"%i", pName(playerid), playerid, OwnedVeh(ivID));
  747. SendClientMessage(nvOwner, -1, iMsg);
  748.  
  749. SetPlayerPos(nvOwner, aPos[0], aPos[1], aPos[2]);
  750.  
  751. SavePrivVeh(OwnedVeh(ivID));
  752. return 1;
  753. }
  754. else return SendClientMessage(playerid, COLOR_RED, "This is not a buyable vehicle!");
  755. }
  756.  
  757. CMD:vsetcolor(playerid, params[])
  758. {
  759. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_RED, "You must be admin to use this command!");
  760. if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_RED, "You must be in a vehicle to change its color!");
  761.  
  762. new
  763. vColors[2],
  764. iMsg[65],
  765. ivID = GetPlayerVehicleID(playerid);
  766.  
  767. if(sscanf(params, "ii", vColors[0], vColors[1])) return SendClientMessage(playerid, -1, ""#CRED"Usage: "#CORANGE"/vSetColor < Color1 > < Color2 >");
  768.  
  769. if(OwnedVeh(ivID) != 0)
  770. {
  771. ChangeVehicleColor(OwnedVeh(ivID), vColors[0], vColors[1]);
  772.  
  773. vInfo[OwnedVeh(ivID)][vColor1] = vColors[0];
  774. vInfo[OwnedVeh(ivID)][vColor2] = vColors[1];
  775.  
  776. format(iMsg, sizeof(iMsg), ""#CDGREEN"You've set this vehicle's color to: "#CBLUE"%i - %i", vColors[0], vColors[1]);
  777. SendClientMessage(playerid, -1, iMsg);
  778.  
  779. SavePrivVeh(OwnedVeh(ivID));
  780. return 1;
  781. }
  782. else return SendClientMessage(playerid, COLOR_RED, "This is not a buyable vehicle!");
  783. }
  784.  
  785. CMD:vexit(playerid, params[])
  786. {
  787. if(ivCreated[GetPlayerVehicleID(playerid)] != 0)
  788. {
  789. RemovePlayerFromVehicle(playerid);
  790. TogglePlayerControllable(playerid, true);
  791. }
  792. return 1;
  793. }
  794.  
  795. #if defined USE_MYSQL_VERSION
  796. stock SavePrivVeh(iVehicleID)
  797. {
  798. new
  799. Query[512],
  800. SQL_vOwner[MAX_PLAYER_NAME],
  801. SQL_vPlate[32];
  802.  
  803. mysql_real_escape_string(vInfo[iVehicleID][vOwner], SQL_vOwner);
  804. mysql_real_escape_string(vInfo[iVehicleID][vPlate], SQL_vPlate);
  805.  
  806. format(Query, sizeof(Query), "UPDATE `privateveh` SET `vModel` = %i, `vColor1` = %i, `vColor2` = %i, `vPrice` = %i, `vOwner` = '%s', `vPosX` = %f, `vPosY` = %f, `vPosZ` = %f, `vPosA` = %f, `vPlate` = '%s', `vPaintJ` = %i,\
  807. `vMod1` = %i, `vMod2` = %i, `vMod3` = %i, `vMod4` = %i, `vMod5` = %i, `vMod6` = %i, `vMod7` = %i, `vMod8` = %i, `vMod9` = %i, `vMod10` = %i, `vMod11` = %i, `vMod12` = %i, `Locked` = %i WHERE `vID` = %i LIMIT 1",
  808.  
  809. vInfo[iVehicleID][vModel],
  810. vInfo[iVehicleID][vColor1],
  811. vInfo[iVehicleID][vColor2],
  812. vInfo[iVehicleID][vPrice],
  813. SQL_vOwner,
  814. vInfo[iVehicleID][vPosX],
  815. vInfo[iVehicleID][vPosY],
  816. vInfo[iVehicleID][vPosZ],
  817. vInfo[iVehicleID][vPosA],
  818. SQL_vPlate,
  819. vInfo[iVehicleID][vPaintJ],
  820. vMods[iVehicleID][0],
  821. vMods[iVehicleID][1],
  822. vMods[iVehicleID][2],
  823. vMods[iVehicleID][3],
  824. vMods[iVehicleID][4],
  825. vMods[iVehicleID][5],
  826. vMods[iVehicleID][6],
  827. vMods[iVehicleID][7],
  828. vMods[iVehicleID][8],
  829. vMods[iVehicleID][9],
  830. vMods[iVehicleID][10],
  831. vMods[iVehicleID][11],
  832. vInfo[iVehicleID][vLocked],
  833. iVehicleID);
  834.  
  835. mysql_query(Query);
  836. return 1;
  837. }
  838.  
  839. stock LoadPVehicles()
  840. {
  841. new
  842. Query[1024],
  843. vModel2,
  844. vC[2],
  845. vPrice2,
  846. vOwner2[MAX_PLAYER_NAME],
  847. Float:Pos[4],
  848. vID,
  849. PlateNum[32],
  850. vPaint_Job,
  851. vModsToLoad[12],
  852. vLock;
  853.  
  854. mysql_query("SELECT * FROM `privateveh` WHERE `vID` < "#MAX_BUYABLE_VEH" ORDER BY vID");
  855. mysql_store_result();
  856.  
  857. if(mysql_num_rows() > 0)
  858. {
  859. while(mysql_fetch_row(Query))
  860. {
  861. print("\n==============================================================\n");
  862. sscanf(Query, "p<|>iiiiis[24]ffffs[32]iiiiiiiiiiiiii",
  863. vID, vModel2, vC[0], vC[1], vPrice2, vOwner2, Pos[0], Pos[1], Pos[2], Pos[3], PlateNum, vPaint_Job,
  864.  
  865. vModsToLoad[0], vModsToLoad[1], vModsToLoad[2], vModsToLoad[3], vModsToLoad[4], vModsToLoad[5],
  866. vModsToLoad[6], vModsToLoad[7], vModsToLoad[8], vModsToLoad[9], vModsToLoad[10], vModsToLoad[11], vLock);
  867.  
  868. printf("VID:\t\t%i", vID);
  869. vInfo[vID][vModel] = vModel2; printf("Model:\t\t%i", vModel2);
  870. vInfo[vID][vColor1] = vC[0]; printf("Color 1:\t%i", vC[0]);
  871. vInfo[vID][vColor2] = vC[1]; printf("Color 2:\t%i", vC[1]);
  872. vInfo[vID][vPrice] = vPrice2; printf("Price:\t\t$%i", vPrice2);
  873. strmid(vInfo[vID][vOwner], vOwner2, 0, 24, 24); printf("Owner:\t\t%s", vOwner2);
  874. vInfo[vID][vPosX] = Pos[0]; printf("Spawn X:\t%f", Pos[0]);
  875. vInfo[vID][vPosY] = Pos[1]; printf("Spawn Y:\t%f", Pos[1]);
  876. vInfo[vID][vPosZ] = Pos[2]; printf("Spawn Z:\t%f", Pos[2]);
  877. vInfo[vID][vPosA] = Pos[3]; printf("Spawn A:\t%f", Pos[3]);
  878. strmid(vInfo[vID][vPlate], PlateNum, 0, 32, 32); printf("Plate:\t\t%s", PlateNum);
  879. vInfo[vID][vPaintJ] = vPaint_Job; printf("PaintJ:\t\t%i", vPaint_Job);
  880. vInfo[vID][vLocked] = vLock; printf("Locked:\t\t%i", vLock);
  881.  
  882. vMods[vID][0] = vModsToLoad[0]; printf("Mod 1:\t\t%i", vModsToLoad[0]);
  883. vMods[vID][1] = vModsToLoad[1]; printf("Mod 2:\t\t%i", vModsToLoad[1]);
  884. vMods[vID][2] = vModsToLoad[2]; printf("Mod 3:\t\t%i", vModsToLoad[2]);
  885. vMods[vID][3] = vModsToLoad[3]; printf("Mod 4:\t\t%i", vModsToLoad[3]);
  886. vMods[vID][4] = vModsToLoad[4]; printf("Mod 5:\t\t%i", vModsToLoad[4]);
  887. vMods[vID][5] = vModsToLoad[5]; printf("Mod 6:\t\t%i", vModsToLoad[5]);
  888. vMods[vID][6] = vModsToLoad[6]; printf("Mod 7:\t\t%i", vModsToLoad[6]);
  889. vMods[vID][7] = vModsToLoad[7]; printf("Mod 8:\t\t%i", vModsToLoad[7]);
  890. vMods[vID][8] = vModsToLoad[8]; printf("Mod 9:\t\t%i", vModsToLoad[8]);
  891. vMods[vID][9] = vModsToLoad[9]; printf("Mod 10:\t\t%i", vModsToLoad[9]);
  892. vMods[vID][10] = vModsToLoad[10]; printf("Mod 11:\t\t%i", vModsToLoad[10]);
  893. vMods[vID][11] = vModsToLoad[11]; printf("Mod 12:\t\t%i", vModsToLoad[11]);
  894. print("\n==============================================================\n");
  895.  
  896. new
  897. vCarID = CreateVehicle(vInfo[vID][vModel], vInfo[vID][vPosX], vInfo[vID][vPosY], vInfo[vID][vPosZ], vInfo[vID][vPosA], vInfo[vID][vColor1], vInfo[vID][vColor2], 500000);
  898. SetVehicleNumberPlate(vCarID, vInfo[vID][vPlate]);
  899. ChangeVehiclePaintjob(vCarID, vInfo[vID][vPaintJ]);
  900.  
  901. for(new iMod = 0; iMod < MAX_VEH_MODS; ++iMod)
  902. {
  903. if(vMods[vCarID][iMod] > 0)
  904. {
  905. AddVehicleComponent(vCarID, vMods[vCarID][iMod]);
  906. }
  907. }
  908.  
  909. OwnedVeh(vCarID) = vID;
  910.  
  911. ++ Total_Veh_Created;
  912. }
  913. }
  914. mysql_free_result();
  915. printf("** A total of: \"%i\" vehicle(s) were loaded!", Total_Veh_Created);
  916.  
  917. print("\n==============================================================");
  918. print("Dynamic Vehicle Ownership By: [U]214 - MySQL Version Loaded...");
  919. print("==============================================================\n");
  920. return Total_Veh_Created;
  921. }
  922.  
  923. #else
  924.  
  925. stock SavePrivVeh(iVehicleID)
  926. {
  927. new
  928. iStr[15];
  929.  
  930. format(iStr, sizeof(iStr), "%d.ini", iVehicleID);
  931. if(INI_Open(iStr))
  932. {
  933. INI_WriteInt("Model", vInfo[iVehicleID][vModel]);
  934. INI_WriteInt("Color1", vInfo[iVehicleID][vColor1]);
  935. INI_WriteInt("Color2", vInfo[iVehicleID][vColor2]);
  936. INI_WriteInt("Price", vInfo[iVehicleID][vPrice]);
  937. INI_WriteString("Owner", vInfo[iVehicleID][vOwner]);
  938. INI_WriteFloat("vPosX", vInfo[iVehicleID][vPosX]);
  939. INI_WriteFloat("vPosY", vInfo[iVehicleID][vPosY]);
  940. INI_WriteFloat("vPosZ", vInfo[iVehicleID][vPosZ]);
  941. INI_WriteFloat("vPosA", vInfo[iVehicleID][vPosA]);
  942. INI_WriteString("Plate", vInfo[iVehicleID][vPlate]);
  943. INI_WriteInt("PaintJ", vInfo[iVehicleID][vPaintJ]);
  944. // Mod loading
  945. INI_WriteInt("vMod1", vMods[iVehicleID][0]);
  946. INI_WriteInt("vMod2", vMods[iVehicleID][1]);
  947. INI_WriteInt("vMod3", vMods[iVehicleID][2]);
  948. INI_WriteInt("vMod4", vMods[iVehicleID][3]);
  949. INI_WriteInt("vMod5", vMods[iVehicleID][4]);
  950. INI_WriteInt("vMod6", vMods[iVehicleID][5]);
  951. INI_WriteInt("vMod7", vMods[iVehicleID][6]);
  952. INI_WriteInt("vMod8", vMods[iVehicleID][7]);
  953. INI_WriteInt("vMod9", vMods[iVehicleID][8]);
  954. INI_WriteInt("vMod10", vMods[iVehicleID][9]);
  955. INI_WriteInt("vMod11", vMods[iVehicleID][10]);
  956. INI_WriteInt("vMod12", vMods[iVehicleID][11]);
  957. INI_WriteInt("Locked", vInfo[iVehicleID][vLocked]);
  958.  
  959. INI_Save();
  960. INI_Close();
  961. }
  962. return 1;
  963. }
  964.  
  965. stock LoadPVehicles()
  966. {
  967. for(new i = 0; i < MAX_BUYABLE_VEH; ++i)
  968. {
  969. new
  970. vFile[15];
  971.  
  972. format(vFile, sizeof(vFile), "%d.ini", i);
  973.  
  974. if(INI_Exist(vFile))
  975. {
  976. INI_Open(vFile);
  977.  
  978. print("\n=============================================================\n");
  979. vInfo[i][vModel] = INI_ReadInt("Model"); printf("Model:\t\t%i", vInfo[i][vModel]);
  980. vInfo[i][vColor1] = INI_ReadInt("Color1"); printf("Color 1:\t%i", vInfo[i][vColor1]);
  981. vInfo[i][vColor2] = INI_ReadInt("Color2"); printf("Color 2:\t%i", vInfo[i][vColor2]);
  982. vInfo[i][vPrice] = INI_ReadInt("Price"); printf("Price:\t\t$%i", vInfo[i][vPrice]);
  983. INI_ReadString(vInfo[i][vOwner], "Owner", 24); printf("Owner:\t\t%s", vInfo[i][vOwner]);
  984. vInfo[i][vPosX] = INI_ReadFloat("vPosX"); printf("Spawn X:\t%f", vInfo[i][vPosX]);
  985. vInfo[i][vPosY] = INI_ReadFloat("vPosY"); printf("Spawn Y:\t%f", vInfo[i][vPosY]);
  986. vInfo[i][vPosZ] = INI_ReadFloat("vPosZ"); printf("Spawn Z:\t%f", vInfo[i][vPosZ]);
  987. vInfo[i][vPosA] = INI_ReadFloat("vPosA"); printf("Spawn A:\t%f", vInfo[i][vPosA]);
  988. INI_ReadString(vInfo[i][vPlate], "Plate", 32); printf("Plate:\t\t%s", vInfo[i][vPlate]);
  989. vInfo[i][vPaintJ] = INI_ReadInt("PaintJ"); printf("PaintJ:\t\t%i", vInfo[i][vPaintJ]);
  990. vInfo[i][vLocked] = INI_ReadInt("Locked"); printf("Locked:\t\t%i", vInfo[i][vLocked]);
  991.  
  992. vMods[i][0] = INI_ReadInt("vMod1"); printf("Mod 1:\t\t%i", vMods[i][0]);
  993. vMods[i][1] = INI_ReadInt("vMod2"); printf("Mod 2:\t\t%i", vMods[i][1]);
  994. vMods[i][2] = INI_ReadInt("vMod3"); printf("Mod 3:\t\t%i", vMods[i][2]);
  995. vMods[i][3] = INI_ReadInt("vMod4"); printf("Mod 4:\t\t%i", vMods[i][3]);
  996. vMods[i][4] = INI_ReadInt("vMod5"); printf("Mod 5:\t\t%i", vMods[i][4]);
  997. vMods[i][5] = INI_ReadInt("vMod6"); printf("Mod 6:\t\t%i", vMods[i][5]);
  998. vMods[i][6] = INI_ReadInt("vMod7"); printf("Mod 7:\t\t%i", vMods[i][6]);
  999. vMods[i][7] = INI_ReadInt("vMod8"); printf("Mod 8:\t\t%i", vMods[i][7]);
  1000. vMods[i][8] = INI_ReadInt("vMod9"); printf("Mod 9:\t\t%i", vMods[i][8]);
  1001. vMods[i][9] = INI_ReadInt("vMod10"); printf("Mod 10:\t\t%i", vMods[i][9]);
  1002. vMods[i][10] = INI_ReadInt("vMod11"); printf("Mod 11:\t\t%i", vMods[i][10]);
  1003. vMods[i][11] = INI_ReadInt("vMod12"); printf("Mod 12:\t\t%i", vMods[i][11]);
  1004. print("\n=============================================================\n");
  1005.  
  1006. new
  1007. vCarID = CreateVehicle(vInfo[i][vModel], vInfo[i][vPosX], vInfo[i][vPosY], vInfo[i][vPosZ], vInfo[i][vPosA], vInfo[i][vColor1], vInfo[i][vColor2], 500000);
  1008. SetVehicleNumberPlate(vCarID, vInfo[i][vPlate]);
  1009. ChangeVehiclePaintjob(vCarID, vInfo[i][vPaintJ]);
  1010.  
  1011. for(new iMod = 0; iMod < MAX_VEH_MODS; ++iMod)
  1012. {
  1013. if(vMods[vCarID][iMod] > 0)
  1014. {
  1015. AddVehicleComponent(vCarID, vMods[vCarID][iMod]);
  1016. }
  1017. }
  1018.  
  1019. OwnedVeh(vCarID) = i;
  1020.  
  1021. ++ Total_Veh_Created;
  1022.  
  1023. INI_Close();
  1024. }
  1025. }
  1026. printf("** A total of: \"%i\" vehicle(s) were loaded!", Total_Veh_Created);
  1027.  
  1028. print("\n=============================================================");
  1029. print("Dynamic Vehicle Ownership By: [U]214 - .INI Version Loaded...");
  1030. print("=============================================================\n");
  1031. return 1;
  1032. }
  1033. #endif
  1034.  
  1035. stock strmatch(const String1[], const String2[])
  1036. {
  1037. if ((strcmp(String1, String2, true, strlen(String2)) == 0) && (strlen(String2) == strlen(String1)))
  1038. {
  1039. return true;
  1040. }
  1041. else
  1042. {
  1043. return false;
  1044. }
  1045. }
  1046.  
  1047. stock pName(iPlayer)
  1048. {
  1049. new
  1050. iName[MAX_PLAYER_NAME];
  1051.  
  1052. GetPlayerName(iPlayer, iName, sizeof(iName));
  1053. return iName;
  1054. }
  1055.  
  1056.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement