Chenko

Untitled

May 9th, 2013
269
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 8.00 KB | None | 0 0
  1.  
  2. #define FILTERSCRIPT
  3.  
  4. #include <a_samp>
  5. #include <zcmd>
  6. #include <sscanf2>
  7. #include <YSI\y_ini>
  8.  
  9. #define MAX_CAR_PARKS   30
  10. #define GREEN           0x21DD00FF
  11.  
  12. enum data
  13. {
  14.     Float:exteriorPos[3],
  15.     exteriorVW,
  16.     Price,
  17.     cpIconID,
  18.     cpIcon,
  19.     Text3D:cpLabel,
  20. };
  21. new carPark[MAX_CAR_PARKS][data];
  22.  
  23. #if defined FILTERSCRIPT
  24.  
  25. public OnFilterScriptInit()
  26. {
  27.     print("\n--------------------------------------");
  28.     print(" Bolt Dynamic Car Parks by Chenko");
  29.     print("--------------------------------------\n");
  30.    
  31.     for(new i = 1; i < MAX_CAR_PARKS; i++)
  32.     {
  33.         LoadCarPark(i);
  34.     }
  35.    
  36.     //Car park mapping
  37.     CreateObject(10010, 57.44, 1812.52, -93.95,   0.00, 0.00, 0.00);
  38.     CreateObject(3037, 23.84, 1845.51, -91.42,   0.00, 0.00, 90.00);
  39.     CreateObject(3037, 34.06, 1845.53, -91.42,   0.00, 0.00, 90.00);
  40.     CreateObject(3037, 23.84, 1845.53, -87.03,   0.00, 0.00, 90.00);
  41.     CreateObject(3037, 34.06, 1845.54, -87.03,   0.00, 0.00, 90.00);
  42.    
  43.     return 1;
  44. }
  45.  
  46. public OnPlayerConnect(playerid)
  47. {
  48.     SetPVarInt(playerid, "inCP", -1);
  49.     return 1;
  50. }
  51.  
  52. public OnFilterScriptExit()
  53. {
  54.     return 1;
  55. }
  56.  
  57. #endif
  58.  
  59. stock saveCarPark(idx)
  60. {
  61.     new fileName[64];
  62.     format(fileName, sizeof(fileName), "CarParks/CarPark_%d.ini", idx);
  63.    
  64.     new INI:file = INI_Open(fileName);
  65.     INI_WriteFloat(file, "ExteriorX", carPark[idx][exteriorPos][0]);
  66.     INI_WriteFloat(file, "ExteriorY", carPark[idx][exteriorPos][1]);
  67.     INI_WriteFloat(file, "ExteriorZ", carPark[idx][exteriorPos][2]);
  68.     INI_WriteInt(file, "ExteriorVW", carPark[idx][exteriorVW]);
  69.     INI_WriteInt(file, "IconType", carPark[idx][cpIcon]);
  70.     INI_WriteInt(file, "Price", carPark[idx][Price]);
  71.     INI_Close(file);
  72.     printf("[BoltCarParks] Car park %d saved", idx);
  73.     return 1;
  74. }
  75.  
  76. stock LoadCarPark(id)
  77. {
  78.     new file[64];
  79.     format(file, sizeof(file), "CarParks/CarPark_%d.ini", id);
  80.     if(fexist(file))
  81.         INI_ParseFile(file, "loadCarPark", .bExtra = true, .extra = id, .bPassTag = true);
  82.    
  83.     new string[128];
  84.     if(carPark[id][Price] > 0)
  85.         format(string, sizeof(string), "Car Park %d\nPrice per hour: %d\nType /entercarpark to enter.", id, carPark[id][Price]);
  86.     else format(string, sizeof(string), "Car Park %d\nFree Parking\nType /entercarpark to enter.", id, carPark[id][Price]);
  87.    
  88.     carPark[id][cpLabel] = Create3DTextLabel(string, GREEN, carPark[id][exteriorPos][0], carPark[id][exteriorPos][1], carPark[id][exteriorPos][2], 50, carPark[id][exteriorVW]);
  89.     carPark[id][cpIconID] = CreatePickup(carPark[id][cpIcon], 1, carPark[id][exteriorPos][0], carPark[id][exteriorPos][1], carPark[id][exteriorPos][2], -1);
  90.     Create3DTextLabel("Type /exitcarpark to exit", GREEN, 24.0939, 1842.4647, -92.8708, 50, 1500 + id);
  91.     printf("[BoltCarParks] Car park %d loaded.", id);
  92.     return 1;
  93. }
  94.  
  95. forward loadCarPark(idx, tag[], name[], value[]);
  96. public loadCarPark(idx, tag[], name[], value[])
  97. {
  98.     INI_Float("ExteriorX", carPark[idx][exteriorPos][0]);
  99.     INI_Float("ExteriorY", carPark[idx][exteriorPos][1]);
  100.     INI_Float("ExteriorZ", carPark[idx][exteriorPos][2]);
  101.     INI_Int("ExteriorVW", carPark[idx][exteriorVW]);
  102.     INI_Int("IconType", carPark[idx][cpIcon]);
  103.     INI_Int("Price", carPark[idx][Price]);
  104.     return 1;
  105. }
  106.  
  107. CMD:createcarpark(playerid, params[])
  108. {
  109.     if(!IsPlayerAdmin(playerid))
  110.         return 1;
  111.        
  112.     new newID = -1, file[64];
  113.    
  114.     for(new i = 1; i < MAX_CAR_PARKS; i++)
  115.     {
  116.         format(file, sizeof(file), "CarParks/CarPark_%d.ini", i);
  117.         if(!fexist(file)) {
  118.             newID = i;
  119.             break;
  120.         }
  121.     }
  122.    
  123.     if(newID == -1)
  124.         return SendClientMessage(playerid, -1, "No more car parks can be created.");
  125.    
  126.     new iconID, price;
  127.     if(sscanf(params, "dd", iconID, price))
  128.         return SendClientMessage(playerid, -1, "SYNTAX: /createcarpark [icon id] [price per hour]");
  129.    
  130.     new Float:pPos[3];
  131.     GetPlayerPos(playerid, pPos[0], pPos[1], pPos[2]);
  132.    
  133.     carPark[newID][exteriorPos][0] = pPos[0];
  134.     carPark[newID][exteriorPos][1] = pPos[1];
  135.     carPark[newID][exteriorPos][2] = pPos[2];
  136.     carPark[newID][exteriorVW] = GetPlayerVirtualWorld(playerid);
  137.     carPark[newID][cpIcon] = iconID;
  138.     carPark[newID][Price] = price;
  139.    
  140.     new string[128];
  141.     if(carPark[newID][Price] > 0)
  142.         format(string, sizeof(string), "Car Park %d\nCost: %d\nType /entercarpark to enter.", newID, carPark[newID][Price]);
  143.     else format(string, sizeof(string), "Car Park %d\nFree Parking\nType /entercarpark to enter.", newID, carPark[newID][Price]);
  144.    
  145.     carPark[newID][cpLabel] = Create3DTextLabel(string, GREEN, carPark[newID][exteriorPos][0], carPark[newID][exteriorPos][1], carPark[newID][exteriorPos][2], 50, carPark[newID][exteriorVW]);
  146.     carPark[newID][cpIconID] = CreatePickup(carPark[newID][cpIcon], 1, carPark[newID][exteriorPos][0], carPark[newID][exteriorPos][1], carPark[newID][exteriorPos][2], -1);
  147.     Create3DTextLabel("Type /exitcarpark to exit", GREEN, 24.0939, 1842.4647, -92.8708, 50, 1500 + newID);
  148.    
  149.     saveCarPark(newID);
  150.     format(string, sizeof(string), "You have created car park ID %d", newID);
  151.     SendClientMessage(playerid, -1, string);
  152.     printf("[BoltCarParks] Car park %d created.", newID);
  153.     return 1;
  154. }
  155.  
  156. CMD:deletecarpark(playerid, params[])
  157. {
  158.     if(!IsPlayerAdmin(playerid))
  159.         return 1;
  160.        
  161.     new cpID;
  162.     if(sscanf(params, "d", cpID))
  163.         return SendClientMessage(playerid, -1, "SYNTAX: /deletecarpark [car park id]");
  164.        
  165.     new file[64];
  166.     format(file, sizeof(file), "CarParks/CarPark_%d.ini", cpID);
  167.     if(!fexist(file))
  168.         return SendClientMessage(playerid, -1, "That car park ID does not exist.");
  169.        
  170.     carPark[cpID][exteriorPos][0] = -1;
  171.     carPark[cpID][exteriorPos][1] = -1;
  172.     carPark[cpID][exteriorPos][2] = -1;
  173.     carPark[cpID][exteriorVW] = -1;
  174.     carPark[cpID][cpIcon] = -1;
  175.     carPark[cpID][Price] = -1;
  176.     DestroyPickup(carPark[cpID][cpIconID]);
  177.     Delete3DTextLabel(carPark[cpID][cpLabel]);
  178.     fremove(file);
  179.     format(file, sizeof(file), "You have deleted car park ID %d", cpID);
  180.     SendClientMessage(playerid, -1, file);
  181.     printf("[BoltCarParks] Car park %d deleted.", cpID);
  182.     return 1;
  183. }
  184.    
  185. stock GetClosestCarPark(playerid)
  186. {
  187.     new Float:dist, id;
  188.     for(new i = 1; i < MAX_CAR_PARKS; i ++)
  189.     {
  190.         if(id < 1 || dist > GetPlayerDistanceFromPoint(playerid, carPark[i][exteriorPos][0], carPark[i][exteriorPos][1], carPark[i][exteriorPos][2]))
  191.         {
  192.             id = i;
  193.             dist = GetPlayerDistanceFromPoint(playerid, carPark[i][exteriorPos][0], carPark[i][exteriorPos][1], carPark[i][exteriorPos][2]);
  194.         }
  195.     }
  196.     return id;
  197. }
  198.    
  199. //21.5899,1840.9188,-93.1398   
  200. CMD:entercarpark(playerid, params[])
  201. {
  202.     new id = GetClosestCarPark(playerid);
  203.    
  204.     if(!IsPlayerInRangeOfPoint(playerid, 10, carPark[id][exteriorPos][0], carPark[id][exteriorPos][1], carPark[id][exteriorPos][2]))
  205.         return SendClientMessage(playerid, -1, "You aren't close enough to any car park!");
  206.    
  207.     if(IsPlayerInAnyVehicle(playerid))
  208.     {
  209.         new vehID = GetPlayerVehicleID(playerid);
  210.         SetVehiclePos(vehID, 21.5899,1840.9188,-93.1398);
  211.         SetVehicleVirtualWorld(vehID, 1500 + id);
  212.     }
  213.     else
  214.     {
  215.         SetPlayerPos(playerid, 21.5899,1840.9188,-93.1398);
  216.     }
  217.     SetPVarInt(playerid, "inCP", id);
  218.     SetPlayerVirtualWorld(playerid, 1500 + id);
  219.     return 1;
  220. }
  221.  
  222. CMD:exitcarpark(playerid, params[])
  223. {
  224.     new id = GetPVarInt(playerid, "inCP");
  225.    
  226.     if(id == -1)
  227.         return SendClientMessage(playerid, -1, "You are not inside a car park!");
  228.    
  229.     if(!IsPlayerInRangeOfPoint(playerid, 10, 21.5899,1840.9188,-93.1398))
  230.         return SendClientMessage(playerid, -1, "You aren't close enough to the exit!");
  231.    
  232.     if(IsPlayerInAnyVehicle(playerid))
  233.     {
  234.         if(GetPlayerMoney(playerid) < carPark[id][Price] && carPark[id][Price] > 0)
  235.             return SendClientMessage(playerid, -1, "You can't afford this!");
  236.        
  237.         new vehID = GetPlayerVehicleID(playerid);
  238.         SetVehiclePos(vehID, carPark[id][exteriorPos][0], carPark[id][exteriorPos][1], carPark[id][exteriorPos][2]);
  239.         SetVehicleVirtualWorld(vehID, carPark[id][exteriorVW]);
  240.         if(carPark[id][Price] > 0)
  241.             GivePlayerMoney(playerid,  0 - carPark[id][Price]);
  242.     }
  243.     else SetPlayerPos(playerid, carPark[id][exteriorPos][0], carPark[id][exteriorPos][1], carPark[id][exteriorPos][2]);
  244.     SetPlayerVirtualWorld(playerid, carPark[id][exteriorVW]);
  245.     SetPVarInt(playerid, "inCP", -1);
  246.     return 1;
  247. }
Advertisement
Add Comment
Please, Sign In to add comment