Advertisement
gamer931215

vDealer 1.1

May 9th, 2011
2,399
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 27.55 KB | None | 0 0
  1. /*
  2.     vDealer by Gamer931215
  3.     ©2011, you may use/edit this script for yourself, but NOT re-release, sell, mirror
  4.     or make profit of this!
  5.  
  6.     V1.1:
  7.         - Bug fixed with dialogspam (thanks to [KO]KillerThriller for reporting)
  8.         - You can now define the pickupmodel if you want to change it
  9.         - System can now also use checkpoints instead of pickups
  10.         - OnGameModeInit bug fixed (i failed, lol)
  11.         - System is now using Incognito's streamer
  12.  
  13.  
  14.     native CreateVehicleDealer(dealername[],Float:x,Float:y,Float:z)
  15.     native ToggleDealer(dealerid,toggle)
  16.     native AddVehicleToDealer(dealerid,vehiclename[],modelid,price)
  17.     native ToggleDealerVehicle(dealerid,dealervehicleid,toggle)
  18. */
  19.  
  20. #include <a_samp>
  21. #include <zcmd>
  22. #include <streamer>
  23. /*==============================================================================================================
  24.                                                     Settings
  25. ===============================================================================================================*/
  26. //LIMITS
  27. #define M_VEHICLES          500     //maximum ammount of private vehicles
  28. #define M_DEALERS           100     //maximum ammount of vehicleDealers
  29. #define M_DEALER_VEHICLES   15      //maximum vehicles per dealer
  30. #define M_PLAYERS           32      //Maximum playersin your server (should be equal to your ammount of serverslots)
  31.  
  32. //main settings
  33. #define RESPAWN_DELAY       5000    //Respawn time in miliseconds
  34. #define DIALOG_RANGE        0       //dialog range
  35. #define DIALOG_STRING_SIZE  256     //string size of generated dialog
  36. #define PICKUP_MODEL        1318    //ModelID for pickup
  37. #define MAP_ICON            55      //mapicon for dealer
  38. #define PICKUP_ANTISPAM     10000   //Antispam timer for OnPlayerPickupPickup (time in miliseconds)
  39. #define USE_CP              false   //will use checkpoints instead of pickups
  40. #define CP_SIZE             1
  41.  
  42. //sell vehicle settings
  43. #define SELL_DIVIDE         5       //Original price / SELL_DIVIDE = sellback money you get
  44.  
  45. //streamer settings
  46. #define STREAMER_DISTANCE   100     //Streamdistance for the build-in streamer
  47. #define STREAMER_INTERVAL   1000    //Streamer tickratio (due to the loops, this shouldnt be really lower as 600-700 i think, i recommend setting it to 1000 though)
  48.  
  49. //FILEPATHS
  50. #define VEHICLE_PATH        "vDealer_vehicles/%i.ini"
  51.  
  52. //SQL Settings:
  53. #define USE_MYSQL_DATABASE  false
  54. #define SQL_SERVER          "localhost"
  55. #define SQL_TABLE           "vDealer_vehicles"
  56. #define SQL_USER            "root"
  57. #define SQL_PASS            ""
  58. /*==============================================================================================================
  59.                                             Variables/Color defines
  60. ===============================================================================================================*/
  61. #if USE_MYSQL_DATABASE == true
  62.     #include <yoursql>
  63.     #include <sscanf2>
  64. #else
  65.     #include <YSI/y_ini>
  66. #endif
  67. #define vDEALER: new
  68. #define DIALOG_SELL DIALOG_RANGE
  69. #define DIALOG_DEALER_VEHICLES DIALOG_RANGE +1
  70. #define DIALOG_DEALER_PRIMARY_COLOR DIALOG_RANGE +2
  71. #define DIALOG_DEALER_SECONDARY_COLOR DIALOG_RANGE +3
  72. #define COLOR_RED 0xFF1400FF
  73. #define COLOR_YELLOW 0xFFFF00FF
  74. #define COLOR_WHITE 0xFFFFFFFF
  75. //dealer vehicleinfo per dealer
  76. enum vehicle
  77. {
  78.     _name[32],
  79.     _modelid,
  80.     _price,
  81.     bool:_active
  82. }
  83. new DealerVehicles[M_DEALERS][M_DEALER_VEHICLES][vehicle];
  84.  
  85. //Dealers
  86. enum _dealer
  87. {
  88.     _dealername[64],
  89.     Float:_x,
  90.     Float:_y,
  91.     Float:_z,
  92.     bool:_active,
  93.     _pickupid,
  94.     _mapicon,
  95.     Text3D:_3dtextlabel
  96. }
  97. new Dealers[M_DEALERS][_dealer];
  98.  
  99. //vehicles
  100. enum PrivateVehicle
  101. {
  102.     _owner[MAX_PLAYER_NAME],
  103.     _modelid,
  104.     Float:_x,
  105.     Float:_y,
  106.     Float:_z,
  107.     Float:_rot,
  108.     _c1,
  109.     _c2,
  110.     _price,
  111.     _vehicleid
  112. }
  113. new PrivateVehicles[M_VEHICLES][PrivateVehicle];
  114. /*==============================================================================================================
  115.                                             Public player related functions
  116. ===============================================================================================================*/
  117. #if defined FILTERSCRIPT
  118.     public OnFilterScriptInit()
  119.     {
  120.         vdealer_init();
  121.         return CallLocalFunction("vdealer_OnFilterScriptInit","");
  122.     }
  123.     #if defined _ALS_OnFilterScriptInit
  124.         #undef OnFilterScriptInit
  125.     #else
  126.         #define _ALS_OnFilterScriptInit
  127.     #endif
  128.     #define OnFilterScriptInit vdealer_OnFilterScriptInit
  129.     forward vdealer_OnFilterScriptInit();
  130.  
  131.     public OnFilterScriptExit()
  132.     {
  133.         vdealer_exit();
  134.         return CallLocalFunction("vdealer_OnFilterScriptExit","");
  135.     }
  136.     #if defined _ALS_OnFilterScriptExit
  137.         #undef OnFilterScriptExit
  138.     #else
  139.         #define _ALS_OnFilterScriptExit
  140.     #endif
  141.     #define OnFilterScriptExit vdealer_OnFilterScriptExit
  142.     forward vdealer_OnFilterScriptExit();
  143. #else
  144.     public OnGameModeInit()
  145.     {
  146.         vdealer_init();
  147.         return CallLocalFunction("vdealer_OnGameModeInit","");
  148.     }
  149.     #if defined _ALS_OnGameModeInit
  150.         #undef OnGameModeInit
  151.     #else
  152.         #define _ALS_OnGameModeInit
  153.     #endif
  154.     #define OnGameModeInit vdealer_OnGameModeInit
  155.     forward vdealer_OnGameModeInit();
  156.  
  157.     public OnGameModeExit()
  158.     {
  159.         vdealer_exit();
  160.         return CallLocalFunction("vdealer_OnGameModeExit","");
  161.     }
  162.     #if defined _ALS_OnGameModeExit
  163.         #undef OnGameModeExit
  164.     #else
  165.         #define _ALS_OnGameModeExit
  166.     #endif
  167.     #define OnGameModeExit vdealer_OnGameModeExit
  168.     forward vdealer_OnGameModeExit();
  169. #endif
  170.  
  171.  
  172.  
  173. public OnPlayerStateChange(playerid,newstate,oldstate)
  174. {
  175.     if(newstate == PLAYER_STATE_DRIVER)
  176.     {
  177.         new veh = GetPlayerVehicleID(playerid);
  178.         new pName[MAX_PLAYER_NAME];
  179.         GetPlayerName(playerid,pName,sizeof pName);
  180.         if(IsVehiclePrivate(veh))
  181.         {
  182.             if(!strcmp(pName,PrivateVehicles[ConvertVID(veh)][_owner])) return 0;
  183.             RemovePlayerFromVehicle(playerid);
  184.             SendClientMessageEx(playerid,COLOR_YELLOW,"sss","You are not the owner of this vehicle! This vehicle is owned by {FFFFFF}",PrivateVehicles[ConvertVID(veh)][_owner],"{FFFF00}.");
  185.         }
  186.     }
  187.     return CallLocalFunction("vdealer_OnPlayerStateChange","iii",playerid,newstate,oldstate);
  188. }
  189. #if defined _ALS_OnPlayerStateChange
  190.     #undef OnPlayerStateChange
  191. #else
  192.     #define _ALS_OnPlayerStateChange
  193. #endif
  194. #define OnPlayerStateChange vdealer_OnPlayerStateChange
  195. forward vdealer_OnPlayerStateChange(playerid,newstate,oldstate);
  196.  
  197. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  198. {
  199.     if(!response)
  200.     {
  201.         DeletePVar(playerid,"dealerid");
  202.         DeletePVar(playerid,"modelid");
  203.         DeletePVar(playerid,"c1");
  204.         DeletePVar(playerid,"c2");
  205.         DeletePVar(playerid,"price");
  206.         #if USE_CP == true
  207.             DeletePVar(playerid,"DisablePickups");
  208.         #else
  209.             SetTimerEx("EnablePickups",PICKUP_ANTISPAM,false,"i",playerid);
  210.         #endif
  211.         return CallLocalFunction("vdealer_OnDialogResponse","iiiis",playerid, dialogid, response, listitem, inputtext);
  212.     }
  213.     switch(dialogid)
  214.     {
  215.         case DIALOG_SELL:
  216.         {
  217.             GivePlayerMoney(playerid,(PrivateVehicles[ConvertVID(GetPlayerVehicleID(playerid))][_price] / SELL_DIVIDE));
  218.             SendClientMessageEx(playerid,COLOR_YELLOW,"si","You've succesfully sold your vehicle for {FFFFFF}$",(PrivateVehicles[ConvertVID(GetPlayerVehicleID(playerid))][_price] / SELL_DIVIDE));
  219.             RemoveVehicle(GetPlayerVehicleID(playerid));
  220.         }
  221.         case DIALOG_DEALER_VEHICLES:
  222.         {
  223.             new dealerid = GetPVarInt(playerid,"dealerid");
  224.             DeletePVar(playerid,"dealerid");
  225.             if(GetPlayerMoney(playerid) - DealerVehicles[dealerid][listitem][_price] < 0)
  226.             {
  227.                 DeletePVar(playerid,"DisabledPickups");
  228.                 return SendClientMessage(playerid,COLOR_RED,"You've got not enough money for this vehicle!");
  229.             }
  230.             SetPVarInt(playerid,"price",DealerVehicles[dealerid][listitem][_price]);
  231.             SetPVarInt(playerid,"modelid",DealerVehicles[dealerid][listitem][_modelid]);
  232.             ShowPlayerDialog(playerid,DIALOG_DEALER_PRIMARY_COLOR,DIALOG_STYLE_LIST,"Select primary color","Red\nGreen\nBlue\nOrange\nBlack\nWhite\nPink","OK","");
  233.         }
  234.         case DIALOG_DEALER_PRIMARY_COLOR:
  235.         {
  236.             switch(listitem)
  237.             {
  238.                 case 0:
  239.                 {
  240.                     SetPVarInt(playerid,"c1",3);
  241.                 }
  242.                 case 1:
  243.                 {
  244.                     SetPVarInt(playerid,"c1",86);
  245.                 }
  246.                 case 2:
  247.                 {
  248.                     SetPVarInt(playerid,"c1",79);
  249.                 }
  250.                 case 3:
  251.                 {
  252.                     SetPVarInt(playerid,"c1",6);
  253.                 }
  254.                 case 4:
  255.                 {
  256.                     SetPVarInt(playerid,"c1",0);
  257.                 }
  258.                 case 5:
  259.                 {
  260.                     SetPVarInt(playerid,"c1",1);
  261.                 }
  262.                 case 6:
  263.                 {
  264.                     SetPVarInt(playerid,"c1",183);
  265.                 }
  266.             }
  267.             ShowPlayerDialog(playerid,DIALOG_DEALER_SECONDARY_COLOR,DIALOG_STYLE_LIST,"Select secondary color","Red\nGreen\nBlue\nOrange\nBlack\nWhite\nPink","OK","");
  268.         }
  269.         case DIALOG_DEALER_SECONDARY_COLOR:
  270.         {
  271.             switch(listitem)
  272.             {
  273.                 case 0:
  274.                 {
  275.                     SetPVarInt(playerid,"c2",3);
  276.                 }
  277.                 case 1:
  278.                 {
  279.                     SetPVarInt(playerid,"c2",86);
  280.                 }
  281.                 case 2:
  282.                 {
  283.                     SetPVarInt(playerid,"c2",79);
  284.                 }
  285.                 case 3:
  286.                 {
  287.                     SetPVarInt(playerid,"c2",6);
  288.                 }
  289.                 case 4:
  290.                 {
  291.                     SetPVarInt(playerid,"c2",0);
  292.                 }
  293.                 case 5:
  294.                 {
  295.                     SetPVarInt(playerid,"c2",1);
  296.                 }
  297.                 case 6:
  298.                 {
  299.                     SetPVarInt(playerid,"c2",183);
  300.                 }
  301.             }
  302.             new id,pName[MAX_PLAYER_NAME],Float:x,Float:y,Float:z,Float:angle;
  303.             GetPlayerPos(playerid,x,y,z);GetPlayerName(playerid,pName,sizeof pName);GetPlayerFacingAngle(playerid,angle);
  304.             GivePlayerMoney(playerid,-DealerVehicles[GetPVarInt(playerid,"dealerid")][listitem][_price]);
  305.  
  306.             id = CreatePrivateVehicle(pName,GetPVarInt(playerid,"modelid"),x,y,z,angle,GetPVarInt(playerid,"c1"),GetPVarInt(playerid,"c2"),GetPVarInt(playerid,"price"));
  307.  
  308.             PutPlayerInVehicle(playerid,id,0);
  309.  
  310.             SendClientMessage(playerid,COLOR_YELLOW,"You've succesfully bought a vehicle! You can use {FFFFFF}/park {FFFF00}to park your vehicle and {FFFFFF}/sellvehicle {FFFF00}to sell it!");
  311.  
  312.             DeletePVar(playerid,"dealerid");
  313.             DeletePVar(playerid,"modelid");
  314.             DeletePVar(playerid,"c1");
  315.             DeletePVar(playerid,"c2");
  316.             DeletePVar(playerid,"price");
  317.             DeletePVar(playerid,"DisablePickups");
  318.         }
  319.     }
  320.     return CallLocalFunction("vdealer_OnDialogResponse","iiiis",playerid, dialogid, response, listitem, inputtext);
  321. }
  322. #if defined _ALS_OnDialogResponse
  323.     #undef OnDialogResponse
  324. #else
  325.     #define _ALS_OnDialogResponse
  326. #endif
  327. #define OnDialogResponse vdealer_OnDialogResponse
  328. forward vdealer_OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]);
  329. forward EnablePickups(playerid);
  330.  
  331. public EnablePickups(playerid)
  332. {
  333.     DeletePVar(playerid,"DisablePickups");
  334.     return 1;
  335. }
  336.  
  337. #if USE_CP == true
  338.     public OnPlayerEnterDynamicCP(playerid)
  339.     {
  340.         if(IsPlayerInAnyVehicle(playerid)) return 1;
  341.         new string[DIALOG_STRING_SIZE],dealerid = GetClosestDealerForPlayer(playerid);
  342.         if(dealerid == -1) return 1;
  343.         SetPVarInt(playerid,"dealerid",dealerid);
  344.         for(new i = 0;i<M_DEALER_VEHICLES;i++)
  345.         {
  346.             if(DealerVehicles[dealerid][i][_active] != true) continue;
  347.             format(string,sizeof string,"%s%s - {00FF00}$%i\n",string,DealerVehicles[dealerid][i][_name],DealerVehicles[dealerid][i][_price]);
  348.         }
  349.         ShowPlayerDialog(playerid,DIALOG_DEALER_VEHICLES,DIALOG_STYLE_LIST,"Which vehicle do you want to buy?",string,"Buy","Leave");
  350.         return 1;
  351.     }
  352. #else
  353.     public OnPlayerPickUpDynamicPickup(playerid, pickupid)
  354.     {
  355.         if(GetPVarInt(playerid,"DisablePickups") == 1) return 1;
  356.         SetPVarInt(playerid,"DisablePickups",1);
  357.         new string[DIALOG_STRING_SIZE],dealerid = GetClosestDealerForPlayer(playerid);
  358.         if(dealerid == -1) return 1;
  359.         SetPVarInt(playerid,"dealerid",dealerid);
  360.         for(new i = 0;i<M_DEALER_VEHICLES;i++)
  361.         {
  362.             if(DealerVehicles[dealerid][i][_active] != true) continue;
  363.             format(string,sizeof string,"%s%s - {00FF00}$%i\n",string,DealerVehicles[dealerid][i][_name],DealerVehicles[dealerid][i][_price]);
  364.         }
  365.         ShowPlayerDialog(playerid,DIALOG_DEALER_VEHICLES,DIALOG_STYLE_LIST,"Which vehicle do you want to buy?",string,"Buy","Leave");
  366.         return 1;
  367.     }
  368. #endif
  369. /*==============================================================================================================
  370.                                              Public Vehicle related functions
  371. ===============================================================================================================*/
  372. public OnVehicleRespray(playerid, vehicleid, color1, color2)
  373. {
  374.     new veh = GetPlayerVehicleID(playerid);
  375.     PrivateVehicles[ConvertVID(veh)][_c1] = color1;
  376.     PrivateVehicles[ConvertVID(veh)][_c2] = color2;
  377.     return CallLocalFunction("vdealer_OnVehicleRespray","iiii",playerid,vehicleid,color1,color2);
  378. }
  379. #if defined _ALS_OnVehicleRespray
  380.     #undef OnVehicleRespray
  381. #else
  382.     #define _ALS_OnVehicleRespray
  383. #endif
  384. #define OnVehicleRespray vdealer_OnVehicleRespray
  385. forward vdealer_OnVehicleRespray(playerid,vehicleid,color1,color2);
  386.  
  387. public OnVehicleDeath(vehicleid)
  388. {
  389.     if(IsVehiclePrivate(vehicleid))
  390.     {
  391.         SetVehicleToRespawn(vehicleid);
  392.         SetVehiclePos(vehicleid,-5,-5,-5);
  393.         SetTimerEx("Spawn_On_Park_Pos",RESPAWN_DELAY,false,"i",vehicleid);
  394.     }
  395.     return CallLocalFunction("OnVehicleDeath","i",vehicleid);
  396. }
  397. #if defined _ALS_OnVehicleDeath
  398.     #undef OnVehicleDeath
  399. #else
  400.     #define _ALS_OnVehicleDeath
  401. #endif
  402. #define OnVehicleDeath vdealer_OnVehicleDeath
  403. forward vdealer_OnVehicleDeath(vehicleid);
  404.  
  405. forward Spawn_On_Park_Pos(vehicleid);
  406. public Spawn_On_Park_Pos(vehicleid)
  407. {
  408.     new pvid = ConvertVID(vehicleid);
  409.     SetVehiclePos(vehicleid,PrivateVehicles[pvid][_x],PrivateVehicles[pvid][_y],PrivateVehicles[pvid][_z]);
  410.     SetVehicleZAngle(vehicleid,PrivateVehicles[pvid][_rot]);
  411.     return 1;
  412. }
  413. /*==============================================================================================================
  414.                                                 vDealer related functions
  415. ===============================================================================================================*/
  416. //Public Functions:
  417. stock CreateVehicleDealer(dealername[],Float:x,Float:y,Float:z)
  418. {
  419.     new id = GenerateID(1);
  420.     format(Dealers[id][_dealername],64,"%s",dealername);
  421.     Dealers[id][_x] = x;
  422.     Dealers[id][_y] = y;
  423.     Dealers[id][_z] = z;
  424.     Dealers[id][_active] = true;
  425.     #if USE_CP == true
  426.         Dealers[id][_pickupid] = CreateDynamicCP(x,y,z,CP_SIZE);
  427.     #else
  428.         Dealers[id][_pickupid] = CreateDynamicPickup(PICKUP_MODEL,23,x,y,z);
  429.     #endif
  430.     Dealers[id][_3dtextlabel] = CreateDynamic3DTextLabel(dealername,COLOR_YELLOW,x,y,z +1,STREAMER_DISTANCE);
  431.     Dealers[id][_mapicon] = CreateDynamicMapIcon(x,y,z,MAP_ICON,0);
  432.     return id;
  433. }
  434. stock AddVehicleToDealer(dealerid,vehiclename[],modelid,price)
  435. {
  436.     new id = GenerateID(2,dealerid);
  437.     format(DealerVehicles[dealerid][id][_name],32,"%s",vehiclename);
  438.     DealerVehicles[dealerid][id][_modelid] = modelid;
  439.     DealerVehicles[dealerid][id][_price] = price;
  440.     DealerVehicles[dealerid][id][_active] = true;
  441.     return id;
  442. }
  443. stock ToggleDealer(dealerid,toggle)
  444. {
  445.     switch(toggle)
  446.     {
  447.         case 0:
  448.         {
  449.             #if USE_CP == true
  450.                 DestroyDynamicCP(Dealers[dealerid][_pickupid]);
  451.             #else
  452.                 DestroyDynamicPickup(Dealers[dealerid][_pickupid]);
  453.             #endif
  454.             DestroyDynamic3DTextLabel(Dealers[dealerid][_3dtextlabel]);
  455.             DestroyDynamicMapIcon(Dealers[dealerid][_mapicon]);
  456.             Dealers[dealerid][_active] = false;
  457.         }
  458.         case 1:
  459.         {
  460.             #if USE_CP == true
  461.                 Dealers[dealerid][_pickupid] = CreateDynamicCP(Dealers[dealerid][_x],Dealers[dealerid][_y],Dealers[dealerid][_z],CP_SIZE);
  462.             #else
  463.                 Dealers[dealerid][_pickupid] = CreateDynamicPickup(PICKUP_MODEL,23,Dealers[dealerid][_x],Dealers[dealerid][_y],Dealers[dealerid][_z]);
  464.             #endif
  465.             Dealers[dealerid][_3dtextlabel] = CreateDynamic3DTextLabel(Dealers[dealerid][_dealername],COLOR_YELLOW,Dealers[dealerid][_x],Dealers[dealerid][_y],Dealers[dealerid][_z] +1,STREAMER_DISTANCE);
  466.             Dealers[dealerid][_mapicon] = CreateDynamicMapIcon(Dealers[dealerid][_x],Dealers[dealerid][_y],Dealers[dealerid][_z],MAP_ICON,0);
  467.             Dealers[dealerid][_active] = true;
  468.         }
  469.     }
  470.     return 1;
  471. }
  472. stock ToggleDealerVehicle(dealerid,dealervehicleid,toggle)
  473. {
  474.     switch(toggle)
  475.     {
  476.         case 0:
  477.         {
  478.             DealerVehicles[dealerid][dealervehicleid][_active] = false;
  479.         }
  480.         case 1:
  481.         {
  482.             DealerVehicles[dealerid][dealervehicleid][_active] = true;
  483.         }
  484.     }
  485.     return 1;
  486. }
  487.  
  488.  
  489. //Internal Functions
  490. stock vdealer_init()
  491. {
  492.     #if USE_MYSQL_DATABASE == true
  493.         yoursql_connect(SQL_SERVER,SQL_USER,SQL_TABLE,SQL_PASS);
  494.     #endif
  495.     SetTimer("stream",STREAMER_INTERVAL,true);
  496.     LoadVehicles();
  497. }
  498.  
  499. stock vdealer_exit()
  500. {
  501.     for(new i = 0;i < (M_VEHICLES); i++)
  502.     {
  503.         DestroyVehicle(PrivateVehicles[i][_vehicleid]);
  504.     }
  505.     for(new i = 0;i<M_DEALERS;i++)
  506.     {
  507.         DestroyDynamic3DTextLabel(Dealers[i][_3dtextlabel]);
  508.         #if USE_CP == true
  509.             DestroyDynamicCP(Dealers[i][_pickupid]);
  510.         #else
  511.             DestroyDynamicPickup(Dealers[i][_pickupid]);
  512.         #endif
  513.     }
  514. }
  515. stock CreatePrivateVehicle(playername[],modelid,Float:x,Float:y,Float:z,Float:rot,c1,c2,price)
  516. {
  517.     new id = GenerateID();
  518.     if(id == -1)
  519.     {
  520.         printf("vDealer: Error! Max ammount of private vehicles reached (%i)! could not create vehicle",M_VEHICLES);
  521.         return 1;
  522.     }
  523.  
  524.     format(PrivateVehicles[id][_owner],MAX_PLAYER_NAME,"%s",playername);
  525.     PrivateVehicles[id][_modelid] = modelid;
  526.     PrivateVehicles[id][_x] = x;
  527.     PrivateVehicles[id][_y] = y;
  528.     PrivateVehicles[id][_z] = z;
  529.     PrivateVehicles[id][_rot] = rot;
  530.     PrivateVehicles[id][_c1] = c1;
  531.     PrivateVehicles[id][_c2] = c2;
  532.     PrivateVehicles[id][_price] = price;
  533.  
  534.     #if USE_MYSQL_DATABASE == true
  535.         yoursql_insert("vehicles","isiffffiii",id,playername,modelid,x,y,z,rot,c1,c2,price);
  536.     #else
  537.         new file[64];
  538.         format(file,sizeof file,VEHICLE_PATH,id);
  539.         new INI:handler = INI_Open(file);
  540.         INI_WriteString(handler,"_owner",playername);
  541.         INI_WriteInt(handler,"_modelid",modelid);
  542.         INI_WriteFloat(handler,"_x",x);
  543.         INI_WriteFloat(handler,"_y",y);
  544.         INI_WriteFloat(handler,"_z",z);
  545.         INI_WriteFloat(handler,"_rot",rot);
  546.         INI_WriteInt(handler,"_c1",c1);
  547.         INI_WriteInt(handler,"_c2",c2);
  548.         INI_WriteInt(handler,"_price",price);
  549.         INI_Close(handler);
  550.     #endif
  551.     PrivateVehicles[id][_vehicleid] = AddStaticVehicle(modelid,x,y,z,rot,c1,c2);
  552.     SetVehicleNumberPlate(PrivateVehicles[id][_vehicleid],PrivateVehicles[id][_owner]);
  553.     SetVehicleToRespawn(PrivateVehicles[id][_vehicleid]);
  554.     return PrivateVehicles[id][_vehicleid];
  555. }
  556.  
  557. stock SaveVehicle(vehicleid)
  558. {
  559.     new veh = ConvertVID(vehicleid);
  560.     #if USE_MYSQL_DATABASE == true
  561.         new identifier[64];format(identifier,sizeof identifier,"`id` = %i",veh);
  562.         new query[164];format(query,sizeof query,"`x` = %f, `y` = %f, `z` = %f, `rot` = %f, `c1` = %i, `c2` = %i",PrivateVehicles[veh][_x],PrivateVehicles[veh][_y],PrivateVehicles[veh][_z],PrivateVehicles[veh][_rot],PrivateVehicles[veh][_c1],PrivateVehicles[veh][_c2]);
  563.         yoursql_update("vehicles",query,identifier);
  564.     #else
  565.         new file[64];
  566.         format(file,sizeof file,VEHICLE_PATH,veh);
  567.         new INI:handler = INI_Open(file);
  568.         INI_WriteString(handler,"_owner",PrivateVehicles[veh][_owner]);
  569.         INI_WriteInt(handler,"_modelid",PrivateVehicles[veh][_modelid]);
  570.         INI_WriteFloat(handler,"_x",PrivateVehicles[veh][_x]);
  571.         INI_WriteFloat(handler,"_y",PrivateVehicles[veh][_y]);
  572.         INI_WriteFloat(handler,"_z",PrivateVehicles[veh][_z]);
  573.         INI_WriteFloat(handler,"_rot",PrivateVehicles[veh][_rot]);
  574.         INI_WriteInt(handler,"_c1",PrivateVehicles[veh][_c1]);
  575.         INI_WriteInt(handler,"_c2",PrivateVehicles[veh][_c2]);
  576.         INI_WriteInt(handler,"_price",PrivateVehicles[veh][_price]);
  577.         INI_Close(handler);
  578.     #endif
  579.     return 1;
  580. }
  581.  
  582. stock LoadVehicles()
  583. {
  584.     #if USE_MYSQL_DATABASE == true
  585.         new query[128],counter = 0,i = 0;
  586.         format(query,sizeof query,"SELECT `owner`,`modelid`,`x`,`y`,`z`,`rot`,`c1`,`c2`,`price` FROM vehicles WHERE `id` = 0");
  587.         for(i = 0;yoursql_countrows(query) != 0;i++)
  588.         {
  589.             new buffer[1];format(buffer,sizeof buffer,"%s",yoursql_receive(query));
  590.             sscanf(query,"p<|>e<s[24]iffffiii>",PrivateVehicles[i]);
  591.             PrivateVehicles[i][_vehicleid] = AddStaticVehicle(PrivateVehicles[i][_modelid],PrivateVehicles[i][_x],PrivateVehicles[i][_y],PrivateVehicles[i][_z],PrivateVehicles[i][_rot],PrivateVehicles[i][_c1],PrivateVehicles[i][_c2]);
  592.             SetVehicleNumberPlate(PrivateVehicles[i][_vehicleid],PrivateVehicles[i][_owner]);
  593.             SetVehicleToRespawn(PrivateVehicles[i][_vehicleid]);
  594.             format(query,sizeof query,"SELECT `owner`,`modelid`,`x`,`y`,`z`,`rot`,`c1`,`c2`,`price` FROM vehicles WHERE `id` = %i", (i +1));
  595.             counter++;
  596.         }
  597.     #else
  598.     new counter = 0;
  599.     for(new i = 0;i<M_VEHICLES;i++)
  600.     {
  601.         new file[64];format(file,sizeof file,VEHICLE_PATH,i);
  602.         if(fexist(file))
  603.         {
  604.             new INI:handler = INI_Open(file);
  605.             INI_ParseFile(file,"LoadVehicle",.bExtra = true, .extra = i);
  606.             PrivateVehicles[i][_vehicleid] = AddStaticVehicle(PrivateVehicles[i][_modelid],PrivateVehicles[i][_x],PrivateVehicles[i][_y],PrivateVehicles[i][_z],PrivateVehicles[i][_rot],PrivateVehicles[i][_c1],PrivateVehicles[i][_c2]);
  607.             SetVehicleNumberPlate(PrivateVehicles[i][_vehicleid],PrivateVehicles[i][_owner]);
  608.             SetVehicleToRespawn(PrivateVehicles[i][_vehicleid]);
  609.             INI_Close(handler);
  610.             counter++;
  611.         }
  612.     }
  613.     #endif
  614.     printf("vDealer: %i vehicle(s) loaded.",counter);
  615. }
  616. #if USE_MYSQL_DATABASE == false
  617. forward LoadVehicle(i,name[],value[]);
  618. public LoadVehicle(i,name[],value[])
  619. {
  620.     if(!strcmp(name,"_owner")){format(PrivateVehicles[i][_owner],MAX_PLAYER_NAME,"%s",value);}
  621.     INI_Int("_modelid",PrivateVehicles[i][_modelid]);
  622.     INI_Float("_x",PrivateVehicles[i][_x]);
  623.     INI_Float("_y",PrivateVehicles[i][_y]);
  624.     INI_Float("_z",PrivateVehicles[i][_z]);
  625.     INI_Float("_rot",PrivateVehicles[i][_rot]);
  626.     INI_Int("_c1",PrivateVehicles[i][_c1]);
  627.     INI_Int("_c2",PrivateVehicles[i][_c2]);
  628.     INI_Int("_price",PrivateVehicles[i][_price]);
  629.     return 1;
  630. }
  631. #endif
  632.  
  633. stock RemoveVehicle(vehicleid)
  634. {
  635.     new id = ConvertVID(vehicleid);
  636.     format(PrivateVehicles[id][_owner],MAX_PLAYER_NAME,"");
  637.     PrivateVehicles[id][_x] = 0;
  638.     PrivateVehicles[id][_y] = 0;
  639.     PrivateVehicles[id][_z] = 0;
  640.     PrivateVehicles[id][_rot] = 0;
  641.     PrivateVehicles[id][_c1] = 0;
  642.     PrivateVehicles[id][_c2] = 0;
  643.     PrivateVehicles[id][_price] = 0;
  644.     DestroyVehicle(vehicleid);
  645.     #if USE_MYSQL_DATABASE == true
  646.         new identifier[64];
  647.         format(identifier,sizeof identifier,"'id' = %i",id);
  648.         yoursql_delete("vehicles",identifier);
  649.     #else
  650.         new file[64];
  651.         format(file,sizeof file,VEHICLE_PATH,id);
  652.         fremove(file);
  653.     #endif
  654.     return 1;
  655. }
  656.  
  657. stock GenerateID(type = 0,dealer = 0)
  658. {
  659.     if(type == 0)                       //vehicle ids
  660.     {
  661.         for(new i = 0; i < M_VEHICLES; i++)
  662.         {
  663.             #if USE_MYSQL_DATABASE == true
  664.                 new query[64];format(query,sizeof query,"SELECT * FROM vehicles");
  665.                 return yoursql_countrows(query);
  666.             #else
  667.                 new file[64];format(file,sizeof file,VEHICLE_PATH,i);
  668.                 if(!fexist(file)) return i;
  669.             #endif
  670.         }
  671.     } else if (type == 1) {             //dealer ids
  672.         for(new i = 0; i < M_DEALERS; i++)
  673.         {
  674.             if(Dealers[i][_active] == false) return i;
  675.         }
  676.     } else if (type == 2) {             //vehicle ids in dealermenu
  677.         for(new i = 0; i < M_DEALER_VEHICLES; i++)
  678.         {
  679.             if(DealerVehicles[dealer][i][_active] == false) return i;
  680.         }
  681.     }
  682.     return -1;
  683. }
  684.  
  685. stock ConvertVID(vehicleid)
  686. {
  687.     for(new i = 0;i < (M_VEHICLES); i++)
  688.     {
  689.         if(PrivateVehicles[i][_vehicleid] == vehicleid)
  690.         {
  691.             return i;
  692.         }
  693.     }
  694.     return -1;
  695. }
  696.  
  697. stock IsVehiclePrivate(vehicleid)
  698. {
  699.     for(new i = 0;i < (M_VEHICLES); i++)
  700.     {
  701.         if(PrivateVehicles[i][_vehicleid] == vehicleid)
  702.         {
  703.             return 1;
  704.         }
  705.     }
  706.     return 0;
  707. }
  708.  
  709. stock GetClosestDealerForPlayer(playerid)
  710. {
  711.     new dealer = -1;
  712.     new Float:distance = STREAMER_DISTANCE;
  713.     new Float:x,Float:y,Float:z;GetPlayerPos(playerid,x,y,z);
  714.     for(new i = 0;i<M_DEALERS;i++)
  715.     {
  716.         new Float:temp1, Float:temp2;
  717.         temp1 = x-Dealers[i][_x];temp2 = y-Dealers[i][_y];
  718.         if(floatsqroot(temp1*temp1+temp2*temp2) < distance)
  719.         {
  720.             distance = floatsqroot(temp1*temp1+temp2*temp2);
  721.             dealer = i;
  722.         }
  723.     }
  724.     return dealer;
  725. }
  726. /*==============================================================================================================
  727.                                                         Player commands
  728. ===============================================================================================================*/
  729. COMMAND:park(playerid,params[])
  730. {
  731.     if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,COLOR_RED,"You are not in a vehicle!");
  732.     new veh = GetPlayerVehicleID(playerid),Float:x,Float:y,Float:z,Float:rot;
  733.     if(!IsVehiclePrivate(veh)) return SendClientMessage(playerid,COLOR_RED,"You are not in a private vehicle!");
  734.     new pName[MAX_PLAYER_NAME];GetPlayerName(playerid,pName,sizeof pName);
  735.     GetVehiclePos(veh,x,y,z);GetVehicleZAngle(veh,rot);
  736.  
  737.     if(strcmp(pName,PrivateVehicles[ConvertVID(veh)][_owner])) return SendClientMessage(playerid,COLOR_RED,"You are not the owner of this vehicle!");
  738.  
  739.     veh = ConvertVID(veh);
  740.     PrivateVehicles[veh][_x] = x;
  741.     PrivateVehicles[veh][_y] = y;
  742.     PrivateVehicles[veh][_z] = z;
  743.     PrivateVehicles[veh][_rot] = rot;
  744.  
  745.     SaveVehicle(PrivateVehicles[veh][_vehicleid]);
  746.     SendClientMessage(playerid,COLOR_YELLOW,"You've succesfully parked your vehicle.");
  747.     return 1;
  748. }
  749.  
  750. COMMAND:sellvehicle(playerid,params)
  751. {
  752.     if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,COLOR_RED,"You are not in a vehicle!");
  753.     new veh = GetPlayerVehicleID(playerid);
  754.     if(!IsVehiclePrivate(veh)) return SendClientMessage(playerid,COLOR_RED,"You are not in a private vehicle!");
  755.     new pName[MAX_PLAYER_NAME];GetPlayerName(playerid,pName,sizeof pName);if(strcmp(pName,PrivateVehicles[ConvertVID(veh)][_owner])) return SendClientMessage(playerid,COLOR_RED,"You are not the owner of this vehicle!");
  756.  
  757.     new str[93];format(str,sizeof str,"{FFFF00}Are you sure you want to sell your vehicle ? You will receive {FFFFFF}$%i",(PrivateVehicles[ConvertVID(veh)][_price] / SELL_DIVIDE));
  758.     ShowPlayerDialog(playerid,DIALOG_SELL,0,"Selling your vehicle",str,"Yes","no");
  759.     return 1;
  760. }
  761. /*==============================================================================================================
  762.                                              Non-vDealer related functions
  763. ===============================================================================================================*/
  764. stock SendClientMessageEx(playerid,color,type[],{Float,_}:...)
  765. {
  766.     new string[128];
  767.     for(new i = 0;i<numargs() -2;i++)
  768.     {
  769.         switch(type[i])
  770.         {
  771.             case 's':
  772.             {
  773.                 new result[128];
  774.                 for(new a= 0;getarg(i +3,a) != 0;a++)
  775.                 {
  776.                     result[a] = getarg(i +3,a);
  777.                 }
  778.                 if(!strlen(string))
  779.                 {
  780.                     format(string,sizeof string,"%s",result);
  781.                 } else format(string,sizeof string,"%s%s",string,result);
  782.             }
  783.  
  784.             case 'i':
  785.             {
  786.                 new result = getarg(i +3);
  787.                 if(!strlen(string))
  788.                 {
  789.                     format(string,sizeof string,"%i",result);
  790.                 } else format(string,sizeof string,"%s%i",string,result);
  791.             }
  792.  
  793.             case 'f':
  794.             {
  795.                 new Float:result = Float:getarg(i +3);
  796.                 if(!strlen(string))
  797.                 {
  798.                     format(string,sizeof string,"%f",result);
  799.                 } else format(string,sizeof string,"%s%f",string,result);
  800.             }
  801.         }
  802.     }
  803.     SendClientMessage(playerid,color,string);
  804.     return 1;
  805. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement