Advertisement
justiceforthe96

Dynamic Vehicle System with ORM

Aug 5th, 2015
822
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 12.75 KB | None | 0 0
  1. /*
  2.         Dynamic vehicle system with ORM created by justice96
  3.         Date created: 05/08/2015
  4.     Last updated: 07/08/2015
  5.         Note: Do not remove my name on credits!
  6.                                                         */
  7. // Includes
  8. #include <a_samp>
  9. #include <a_mysql>
  10. #include <sscanf2>
  11. #include <YSI/y_iterate>
  12. #include <izcmd>
  13.  
  14. // MySQL connection details
  15. #define HOST "localhost"
  16. #define USER "root"
  17. #define PASS ""
  18. #define DATABASE "Database"
  19.  
  20. // Function (forward & public) > (function)
  21. #define function%0(%1) \
  22.         forward%0(%1); public%0(%1)
  23. #define SEM(%0,%1); SendClientMessage(%0,COLOR_GREY,%1); // thanks to Tianmetal
  24. #define forex(%0,%1) for(new %0 = 0; %0 < %1; %0++)
  25. #define delstr(%0) strdel(%0,0,strlen(%0))
  26. #define IsNull(%1) ((!(%1[0])) || (((%1[0]) == '\1') && (!(%1[1])))) // updated function.
  27.  
  28. // Main Colors
  29. #define COLOR_LIGHTBLUE 0x33CCFFAA
  30. #define COLOR_GREY 0xAFAFAFAA
  31.  
  32. // Vehicle Func Define
  33. #define MAX_SERVER_VEHICLES 100
  34. #define MAX_PLATE_NAME 30
  35.  
  36. // Iterator
  37. new Iterator:Vehicles<MAX_SERVER_VEHICLES>;
  38.  
  39. // Enumrators
  40. enum server_veh
  41. {
  42.     ORM:ORM_ID,
  43.     ID,
  44.     Model,
  45.     Color[2],
  46.     Plate[MAX_PLATE_NAME],
  47.     Float:Spawn[4]
  48. };
  49. new ServerVehicle[MAX_SERVER_VEHICLES][server_veh];
  50. new VehicleID[MAX_SERVER_VEHICLES];
  51. new Database;
  52.  
  53. #if defined FILTERSCRIPT
  54.  
  55. public OnFilterScriptInit()
  56. {
  57.     print("\n--------------------------------------");
  58.     print(" [Debug]: justice96 (Dynamic Vehicle ORM) loaded.");
  59.     print("--------------------------------------\n");
  60.     Database = mysql_connect(HOST, USER, DATABASE, PASS);
  61.         mysql_log(LOG_ERROR | LOG_WARNING);
  62.     mysql_pquery(Database,"SELECT * FROM `server_vehicles` ORDER BY `veh_id` ASC","Vehicle_Load",""); // Load _ Vehicles by     ascending
  63.     AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
  64.     return 1;
  65. }
  66.  
  67. public OnFilterScriptExit()
  68. {
  69.     return 1;
  70. }
  71.  
  72. #else
  73.  
  74. main()
  75. {
  76.     print("\n----------------------------------");
  77.     print(" Blank Gamemode by your name here");
  78.     print("----------------------------------\n");
  79. }
  80.  
  81. #endif
  82.  
  83. public OnGameModeInit()
  84. {
  85.     // Don't use these lines if it's a filterscript
  86.     SetGameModeText("Blank Script");
  87.     return 1;
  88. }
  89.  
  90. public OnGameModeExit()
  91. {
  92.     return 1;
  93. }
  94.  
  95. public OnPlayerRequestClass(playerid, classid)
  96. {
  97.     SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
  98.     SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
  99.     SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
  100.     return 1;
  101. }
  102.  
  103. public OnPlayerConnect(playerid)
  104. {
  105.     return 1;
  106. }
  107.  
  108. public OnPlayerDisconnect(playerid, reason)
  109. {
  110.     return 1;
  111. }
  112.  
  113. public OnPlayerSpawn(playerid)
  114. {
  115.     return 1;
  116. }
  117.  
  118. public OnPlayerDeath(playerid, killerid, reason)
  119. {
  120.     return 1;
  121. }
  122.  
  123. public OnVehicleSpawn(vehicleid)
  124. {
  125.     return 1;
  126. }
  127.  
  128. public OnVehicleDeath(vehicleid, killerid)
  129. {
  130.     return 1;
  131. }
  132.  
  133. public OnPlayerText(playerid, text[])
  134. {
  135.     return 1;
  136. }
  137.  
  138. // SSCANF Menu (cmd)
  139. SSCANF:servervehiclemenu(string[])
  140. {
  141.     if(!strcmp(string,"create",true)) return 1;
  142.     else if(!strcmp(string,"add",true)) return 1;
  143.     else if(!strcmp(string,"make",true)) return 1;
  144.     else if(!strcmp(string,"remove",true)) return 2;
  145.     else if(!strcmp(string,"delete",true)) return 2;
  146.     else if(!strcmp(string,"destroy",true)) return 2;
  147.     else if(!strcmp(string,"park",true)) return 3;
  148.     else if(!strcmp(string,"parkvehicle",true)) return 3;
  149.     else if(!strcmp(string,"plate",true)) return 4;
  150.     else if(!strcmp(string,"setplate",true)) return 4;
  151.     else if(!strcmp(string,"color",true)) return 5;
  152.     else if(!strcmp(string,"colour",true)) return 5;
  153.     else if(!strcmp(string,"setcolour",true)) return 5;
  154.     else if(!strcmp(string,"setcolor",true)) return 5;
  155.     return 0;
  156. }
  157.  
  158. function Vehicle_Load()
  159. {
  160.     new rows = cache_get_row_count(Database);
  161.     if(rows != 0)
  162.     {
  163.         forex(row,rows)
  164.         {
  165.             new vehicleid = cache_get_row_int(row,0,Database);
  166.             new ORM:ormid = ServerVehicle[vehicleid][ORM_ID] = orm_create("server_vehicles",Database);
  167.             orm_addvar_int(ormid,ServerVehicle[vehicleid][ID],"veh_id");
  168.             orm_addvar_string(ormid,ServerVehicle[vehicleid][Plate],MAX_PLATE_NAME,"veh_plate");
  169.             orm_addvar_int(ormid,ServerVehicle[vehicleid][Model],"veh_model");
  170.             orm_addvar_int(ormid,ServerVehicle[vehicleid][Color][0],"veh_color_1");
  171.             orm_addvar_int(ormid,ServerVehicle[vehicleid][Color][1],"veh_color_2");
  172.             orm_addvar_float(ormid,ServerVehicle[vehicleid][Spawn][0],"veh_x");
  173.             orm_addvar_float(ormid,ServerVehicle[vehicleid][Spawn][1],"veh_y");
  174.             orm_addvar_float(ormid,ServerVehicle[vehicleid][Spawn][2],"veh_z");
  175.             orm_addvar_float(ormid,ServerVehicle[vehicleid][Spawn][3],"veh_a");
  176.             orm_apply_cache(ormid,row);
  177.             orm_setkey(ormid,"veh_id");
  178.             Vehicle_Create(vehicleid,INVALID_PLAYER_ID);
  179.         }
  180.     }
  181.     return 1;
  182. }
  183.  
  184. function Vehicle_Create(vehicleid,playerid)
  185. {
  186.     new string[144];
  187.     VehicleID[vehicleid] = CreateVehicle(ServerVehicle[vehicleid][Model],ServerVehicle[vehicleid][Spawn][0],ServerVehicle[vehicleid][Spawn][1],ServerVehicle[vehicleid][Spawn][2],ServerVehicle[vehicleid][Spawn][3],ServerVehicle[vehicleid][Color][0],ServerVehicle[vehicleid][Color][1],-1);
  188.     SetVehicleNumberPlate(ServerVehicle[vehicleid][ID],ServerVehicle[vehicleid][Plate]);
  189.     Iter_Add(Vehicles,vehicleid);
  190.     if(playerid != INVALID_PLAYER_ID)
  191.     {
  192.         format(string,sizeof(string),"<VEHICLEINFO>: {ffffff}(Server) Vehicle has been created with ({ffff00}id:%d{ffffff})({ffff00}plate:%s{ffffff})",vehicleid,ServerVehicle[vehicleid][Plate]);
  193.         SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
  194.     }
  195.     return 1;
  196. }
  197.  
  198. CMD:vehicle(playerid,params[])
  199. {
  200.     new action,string[128];
  201.     if(sscanf(params,"k<servervehiclemenu>S()[128]",action,string)) return SEM(playerid,"<USAGE>: /vehicle [create/delete/park/plate/color]");
  202.     else
  203.     {
  204.         switch(action)
  205.         {
  206.             case 1:
  207.             {
  208.                 new model,color1,color2,vehplate[MAX_PLATE_NAME];
  209.                 if(sscanf(string,"ddds["#MAX_PLATE_NAME"]",model,color1,color2,vehplate)) return SEM(playerid,"<USAGE>: /vehicle create [modelid] [color 1] [color 2] [plate name (max 30 chars)]");
  210.                 if(model < 400 || model > 611) return SEM(playerid,"<ERROR>: You have entered an invalid modelid !");
  211.                 if(Iter_Free(Vehicles) == -1) return SEM(playerid,"<ERROR>: No free vehicle slot available !");
  212.                 if(color1 < 0 || color1 > 255 || color2 < 0 || color2 > 255) return SEM(playerid,"<ERROR>: You have entered an invalid colorid !");
  213.                 new vehicleid = Iter_Free(Vehicles);
  214.                 ServerVehicle[vehicleid][Model] = model;
  215.                 ServerVehicle[vehicleid][ID] = vehicleid;
  216.                 ServerVehicle[vehicleid][Color][0] = color1;
  217.                 ServerVehicle[vehicleid][Color][1] = color2;
  218.                 strmid(ServerVehicle[vehicleid][Plate],vehplate,0,strlen(vehplate),MAX_PLATE_NAME);
  219.                 GetPlayerPos(playerid,ServerVehicle[vehicleid][Spawn][0],ServerVehicle[vehicleid][Spawn][1],ServerVehicle[vehicleid][Spawn][2]);
  220.                 GetPlayerFacingAngle(playerid,ServerVehicle[vehicleid][Spawn][3]);
  221.                 new ORM:ormid = ServerVehicle[vehicleid][ORM_ID] = orm_create("server_vehicles",Database);
  222.                 orm_addvar_int(ormid,ServerVehicle[vehicleid][ID],"veh_id");
  223.                 orm_addvar_string(ormid,ServerVehicle[vehicleid][Plate],MAX_PLATE_NAME,"veh_plate");
  224.                 orm_addvar_int(ormid,ServerVehicle[vehicleid][Model],"veh_model");
  225.                 orm_addvar_int(ormid,ServerVehicle[vehicleid][Color][0],"veh_color_1");
  226.                 orm_addvar_int(ormid,ServerVehicle[vehicleid][Color][1],"veh_color_2");
  227.                 orm_addvar_float(ormid,ServerVehicle[vehicleid][Spawn][0],"veh_x");
  228.                 orm_addvar_float(ormid,ServerVehicle[vehicleid][Spawn][1],"veh_y");
  229.                 orm_addvar_float(ormid,ServerVehicle[vehicleid][Spawn][2],"veh_z");
  230.                 orm_addvar_float(ormid,ServerVehicle[vehicleid][Spawn][3],"veh_a");
  231.                 orm_insert(ormid,"Vehicle_Create","dd",vehicleid,playerid);
  232.                 orm_setkey(ormid,"veh_id");
  233.             }
  234.             case 2:
  235.             {
  236.                 if(IsNull(string)) return SEM(playerid,"<USAGE>: /vehicle delete [vehicleid]");
  237.                 new vehicleid = strval(string);
  238.                 if(Iter_Contains(Vehicles,vehicleid))
  239.                 {
  240.                     format(string,sizeof(string),"<VEHICLEINFO>: {ffffff}(Server) Vehicle with {ffff00}id %d {ffffff}has been deleted!",vehicleid);
  241.                     SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
  242.                     DestroyVehicle(VehicleID[vehicleid]);
  243.                     orm_delete(ServerVehicle[vehicleid][ORM_ID],true);
  244.                     Iter_Remove(Vehicles,vehicleid);
  245.                 }
  246.                 else SEM(playerid,"<ERROR>: Invalid vehicleid !");
  247.             }
  248.             case 3:
  249.             {
  250.                 if(IsNull(string)) return SEM(playerid,"<USAGE>: /vehicle park [vehicleid]");
  251.                 new vehicleid = strval(string);
  252.                 if(Iter_Contains(Vehicles,vehicleid))
  253.                 {
  254.                     GetPlayerPos(playerid,ServerVehicle[vehicleid][Spawn][0],ServerVehicle[vehicleid][Spawn][1],ServerVehicle[vehicleid][Spawn][2]);
  255.                     GetPlayerFacingAngle(playerid,ServerVehicle[vehicleid][Spawn][3]);
  256.                     format(string,sizeof(string),"<VEHICLEINFO>: {ffffff}(Server) Vehicle with {ffff00}id %d {ffffff}has been parked!",vehicleid);
  257.                     SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
  258.                     orm_update(ServerVehicle[vehicleid][ORM_ID]);
  259.                 }
  260.                 else SEM(playerid,"<ERROR>: Invalid vehicleid !");
  261.             }
  262.             case 4:
  263.             {
  264.                 new vehicleid,newplate[MAX_PLATE_NAME];
  265.                 if(sscanf(string,"ds["#MAX_PLATE_NAME"]",vehicleid,newplate)) return SEM(playerid,"<USAGE>: /vehicle plate [modelid/vehicleid] [plate name (max 30 chars)]");
  266.                 if(Iter_Contains(Vehicles,vehicleid))
  267.                 {
  268.                     strmid(ServerVehicle[vehicleid][Plate],newplate,0,strlen(newplate),MAX_PLATE_NAME);
  269.                     format(string,sizeof(string),"<VEHICLEINFO>: {ffffff}You have changed the vehicle name to '{ffff00}%s{ffffff}'",newplate);
  270.                     SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
  271.                     orm_update(ServerVehicle[vehicleid][ORM_ID]);
  272.                 }
  273.                 else SEM(playerid,"<ERROR>: Invalid vehicleid !");
  274.             }
  275.             case 5:
  276.             {
  277.                 new vehicleid,color1,color2;
  278.                 if(sscanf(string,"ddd",vehicleid,color1,color2)) return SEM(playerid,"<USAGE>: /vehicle color [modelid/vehicleid] [color 1] [color 2]");
  279.                 if(Iter_Contains(Vehicles,vehicleid))
  280.                 {
  281.                     ServerVehicle[vehicleid][Color][0] = color1;
  282.                     ServerVehicle[vehicleid][Color][1] = color2;
  283.                     format(string,sizeof(string),"<VEHICLEINFO>: {ffffff}You have changed the vehicle color with '{ffff00}id %d{ffffff}'",vehicleid);
  284.                     SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
  285.                     orm_update(ServerVehicle[vehicleid][ORM_ID]);
  286.                 }
  287.                 else SEM(playerid,"<ERROR>: Invalid vehicleid !");
  288.             }
  289.             default: SEM(playerid,"<USAGE>: /vehicle [create/delete/park/plate/color]");
  290.         }
  291.     }
  292.     return CMD_SUCCESS;
  293. }
  294.  
  295. public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
  296. {
  297.     return 1;
  298. }
  299.  
  300. public OnPlayerExitVehicle(playerid, vehicleid)
  301. {
  302.     return 1;
  303. }
  304.  
  305. public OnPlayerStateChange(playerid, newstate, oldstate)
  306. {
  307.     return 1;
  308. }
  309.  
  310. public OnPlayerEnterCheckpoint(playerid)
  311. {
  312.     return 1;
  313. }
  314.  
  315. public OnPlayerLeaveCheckpoint(playerid)
  316. {
  317.     return 1;
  318. }
  319.  
  320. public OnPlayerEnterRaceCheckpoint(playerid)
  321. {
  322.     return 1;
  323. }
  324.  
  325. public OnPlayerLeaveRaceCheckpoint(playerid)
  326. {
  327.     return 1;
  328. }
  329.  
  330. public OnRconCommand(cmd[])
  331. {
  332.     return 1;
  333. }
  334.  
  335. public OnPlayerRequestSpawn(playerid)
  336. {
  337.     return 1;
  338. }
  339.  
  340. public OnObjectMoved(objectid)
  341. {
  342.     return 1;
  343. }
  344.  
  345. public OnPlayerObjectMoved(playerid, objectid)
  346. {
  347.     return 1;
  348. }
  349.  
  350. public OnPlayerPickUpPickup(playerid, pickupid)
  351. {
  352.     return 1;
  353. }
  354.  
  355. public OnVehicleMod(playerid, vehicleid, componentid)
  356. {
  357.     return 1;
  358. }
  359.  
  360. public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
  361. {
  362.     return 1;
  363. }
  364.  
  365. public OnVehicleRespray(playerid, vehicleid, color1, color2)
  366. {
  367.     return 1;
  368. }
  369.  
  370. public OnPlayerSelectedMenuRow(playerid, row)
  371. {
  372.     return 1;
  373. }
  374.  
  375. public OnPlayerExitedMenu(playerid)
  376. {
  377.     return 1;
  378. }
  379.  
  380. public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
  381. {
  382.     return 1;
  383. }
  384.  
  385. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  386. {
  387.     return 1;
  388. }
  389.  
  390. public OnRconLoginAttempt(ip[], password[], success)
  391. {
  392.     return 1;
  393. }
  394.  
  395. public OnPlayerUpdate(playerid)
  396. {
  397.     return 1;
  398. }
  399.  
  400. public OnPlayerStreamIn(playerid, forplayerid)
  401. {
  402.     return 1;
  403. }
  404.  
  405. public OnPlayerStreamOut(playerid, forplayerid)
  406. {
  407.     return 1;
  408. }
  409.  
  410. public OnVehicleStreamIn(vehicleid, forplayerid)
  411. {
  412.     return 1;
  413. }
  414.  
  415. public OnVehicleStreamOut(vehicleid, forplayerid)
  416. {
  417.     return 1;
  418. }
  419.  
  420. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  421. {
  422.     return 1;
  423. }
  424.  
  425. public OnPlayerClickPlayer(playerid, clickedplayerid, source)
  426. {
  427.     return 1;
  428. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement