Advertisement
Guest User

Dynamic Car Shop

a guest
Jul 31st, 2012
335
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 24.62 KB | None | 0 0
  1. //Autohaus von Elias939
  2. //Bitte Credits drin lassen
  3. //Sieht ja keiner :)
  4.  
  5.  
  6. #include <a_samp>
  7.  
  8. #define MAX_CARS_AT_SHOP 30 //Hier schreiben, wieviele Wagen es im Shop MAXIMAL geben
  9.  
  10. new Float:carspawn[4],Float:bpcoords[3],csPickup,LoadedVehicles=-1,VehicleDoorStatus[MAX_VEHICLES],ReviewingVehicleID[MAX_PLAYERS]={-1,...},ShowingVehicle[MAX_PLAYERS]={-1,...};
  11.  
  12. new VehicleName[212][] = {
  13. "Landstalker", "Bravura", "Buffalo", "Linerunner", "Perrenial", "Sentinel", "Dumper", "Firetruck", "Trashmaster", "Stretch", "Manana",
  14. "Infernus", "Voodoo", "Pony", "Mule", "Cheetah", "Ambulance", "Leviathan", "Moonbeam", "Esperanto", "Taxi", "Washington", "Bobcat",
  15. "Whoopee", "BF Injection", "Hunter", "Premier", "Enforcer", "Securicar", "Banshee", "Predator", "Bus", "Rhino", "Barracks", "Hotknife",
  16. "Trailer 1", "Previon", "Coach", "Cabbie", "Stallion", "Rumpo", "RC Bandit", "Romero", "Packer", "Monster", "Admiral", "Squalo",
  17. "Seasparrow", "Pizzaboy", "Tram", "Trailer 2", "Turismo", "Speeder", "Reefer", "Tropic", "Flatbed", "Yankee", "Caddy", "Solair",
  18. "Berkley's RC Van", "Skimmer", "PCJ-600", "Faggio", "Freeway", "RC Baron", "RC Raider", "Glendale", "Oceanic", "Sanchez", "Sparrow",
  19. "Patriot", "Quad", "Coastguard", "Dinghy", "Hermes", "Sabre", "Rustler", "ZR-350", "Walton", "Regina", "Comet", "BMX", "Burrito",
  20. "Camper", "Marquis", "Baggage", "Dozer", "Maverick", "News Chopper", "Rancher", "FBI Rancher", "Virgo", "Greenwood", "Jetmax", "Hotring",
  21. "Sandking", "Blista Compact", "Police Maverick", "Boxvillde", "Benson", "Mesa", "RC Goblin", "Hotring Racer A", "Hotring Racer B",
  22. "Bloodring Banger", "Rancher", "Super GT", "Elegant", "Journey", "Bike", "Mountain Bike", "Beagle", "Cropduster","Stunt", "Tanker",
  23. "Roadtrain", "Nebula", "Majestic", "Buccaneer", "Shamal", "Hydra", "FCR-900", "NRG-500", "HPV1000", "Cement Truck", "Tow Truck", "Fortune",
  24. "Cadrona", "FBI Truck", "Willard", "Forklift", "Tractor", "Combine", "Feltzer", "Remington", "Slamvan", "Blade", "Freight", "Streak",
  25. "Vortex", "Vincent", "Bullet", "Clover", "Sadler", "Firetruck LA", "Hustler", "Intruder", "Primo", "Cargobob", "Tampa", "Sunrise", "Merit",
  26. "Utility", "Nevada", "Yosemite", "Windsor", "Monster A", "Monster B", "Uranus", "Jester", "Sultan", "Stratum", "Elegy", "Raindance",
  27. "RC Tiger", "Flash", "Tahoma", "Savanna", "Bandito", "Freight Flat", "Streak Carriage", "Kart", "Mower", "Dune", "Sweeper", "Broadway",
  28. "Tornado", "AT-400", "DFT-30", "Huntley", "Stafford", "BF-400", "News Van", "Tug", "Trailer 3", "Emperor", "Wayfarer", "Euros", "Hotdog",
  29. "Club", "Freight Carriage", "Trailer 4", "Andromada", "Dodo", "RC Cam", "Launch", "Police Car (LSPD)", "Police Car (SFPD)",
  30. "Police Car (LVPD)", "Police Ranger", "Picador", "S.W.A.T", "Alpha", "Phoenix", "Glendale", "Sadler", "Luggage Trailer A",
  31. "Luggage Trailer B", "Stairs", "Boxville", "Tiller", "Utility Trailer" };
  32.  
  33. enum e_PlayerVehicle
  34. {
  35.     pvID,
  36.     pvModel,
  37.     Float:pvX,
  38.     Float:pvY,
  39.     Float:pvZ,
  40.     Float:pvA,
  41.     pvColor1,
  42.     pvColor2,
  43.     pvPaintjob,
  44.     pvModSlot[14]
  45. }
  46. new PlayerVehicle[MAX_PLAYERS][2][e_PlayerVehicle];
  47.  
  48. enum e_ShopVehicle
  49. {
  50.     svModel,
  51.     svCost
  52. }
  53. new ShopVehicle[MAX_CARS_AT_SHOP][e_ShopVehicle];
  54.  
  55. enum e_VehicleReviewData
  56. {
  57.     Float:vrVehiclePos[4],
  58.     Float:vrCameraPos[3]
  59. }
  60. new VehicleReviewData[e_VehicleReviewData];
  61.  
  62. public OnFilterScriptInit()
  63. {
  64.     //LOADING SHOP PICKUP AND CAR SPAWN COORDINATES
  65.     new File:csfile,readline[256],bpModel;
  66.     if(!fexist("carshop.cfg")) { //Die PickupID beim Shop, die Pickup Positionen und die Spawnpositionen vom Wagen, die der Spieler neulich gekauft hat
  67.         csfile=fopen("carshop.cfg",io_write);
  68.         fwrite(csfile,"shopPickup=1210\r\nbuyposX=0.0\r\nbuyposY=0.0\r\nbuyposZ=0.0\r\ncarspawnX=0.0\r\ncarspawnY=0.0\r\ncarspawnZ=0.0\r\ncarspawnA=0.0");
  69.         fclose(csfile); }
  70.     else {
  71.         csfile=fopen("carshop.cfg",io_read);
  72.         while(fread(csfile,readline)) {
  73.             if(!strcmp(readline,"shopPickup=",true,11)) { bpModel=strval(strpart(readline,1,'=')); }
  74.             else if(!strcmp(readline,"buyposX=",true,8)) { bpcoords[0]=floatstr(strpart(readline,1,'=')); }
  75.             else if(!strcmp(readline,"buyposY=",true,8)) { bpcoords[1]=floatstr(strpart(readline,1,'=')); }
  76.             else if(!strcmp(readline,"buyposZ=",true,8)) { bpcoords[2]=floatstr(strpart(readline,1,'=')); csPickup=CreatePickup(bpModel,2,bpcoords[0],bpcoords[1],bpcoords[2]); }
  77.             else if(!strcmp(readline,"carspawnX=",true,10)) { carspawn[0]=floatstr(strpart(readline,1,'=')); }
  78.             else if(!strcmp(readline,"carspawnY=",true,10)) { carspawn[1]=floatstr(strpart(readline,1,'=')); }
  79.             else if(!strcmp(readline,"carspawnZ=",true,10)) { carspawn[2]=floatstr(strpart(readline,1,'=')); }
  80.             else if(!strcmp(readline,"carspawnA=",true,10)) { carspawn[3]=floatstr(strpart(readline,1,'=')); } }
  81.         fclose(csfile); }
  82.  
  83.     if(!fexist("carshopreview.cfg")) {  //falls "carshopreview.cfg" nicht existiert, werden die standart Review positionen genommen. Keine sorge, es ist an einem sehr schönen, sogar perfekten platz ;)
  84.         VehicleReviewData[vrVehiclePos][0]=1937.6018;
  85.         VehicleReviewData[vrVehiclePos][1]=1628.1865;
  86.         VehicleReviewData[vrVehiclePos][2]=72.2850;
  87.         VehicleReviewData[vrVehiclePos][3]=299.3142;
  88.         VehicleReviewData[vrCameraPos][0]=1945.2854;
  89.         VehicleReviewData[vrCameraPos][1]=1630.0295;
  90.         VehicleReviewData[vrCameraPos][2]=75.5296;
  91.         csfile=fopen("carshopreview.cfg",io_write);
  92.         format(readline,sizeof(readline),"carPosAtReviewX=%f\r\ncarPosAtReviewY=%f\r\ncarPosAtReviewZ=%f\r\ncarPosAtReviewA=%f\r\ncamPosAtReviewX=%f\r\ncamPosAtReviewY=%f\r\ncamPosAtReviewZ=%f",VehicleReviewData[vrVehiclePos][0],VehicleReviewData[vrVehiclePos][1],VehicleReviewData[vrVehiclePos][2],VehicleReviewData[vrVehiclePos][3],VehicleReviewData[vrCameraPos][0],VehicleReviewData[vrCameraPos][1],VehicleReviewData[vrCameraPos][2]);
  93.         fwrite(csfile,readline),fclose(csfile); }
  94.     else {
  95.         csfile=fopen("carshopreview.cfg",io_read);
  96.         while(fread(csfile,readline)) {
  97.             if(!strcmp(readline,"carPosAtReviewX=",true,16)) { VehicleReviewData[vrVehiclePos][0]=floatstr(strpart(readline,1,'=')); }
  98.             else if(!strcmp(readline,"carPosAtReviewY=",true,16)) { VehicleReviewData[vrVehiclePos][1]=floatstr(strpart(readline,1,'=')); }
  99.             else if(!strcmp(readline,"carPosAtReviewZ=",true,16)) { VehicleReviewData[vrVehiclePos][2]=floatstr(strpart(readline,1,'=')); }
  100.             else if(!strcmp(readline,"carPosAtReviewA=",true,16)) { VehicleReviewData[vrVehiclePos][3]=floatstr(strpart(readline,1,'=')); }
  101.             else if(!strcmp(readline,"camPosAtReviewX=",true,16)) { VehicleReviewData[vrCameraPos][0]=floatstr(strpart(readline,1,'=')); }
  102.             else if(!strcmp(readline,"camPosAtReviewY=",true,16)) { VehicleReviewData[vrCameraPos][1]=floatstr(strpart(readline,1,'=')); }
  103.             else if(!strcmp(readline,"camPosAtReviewZ=",true,16)) { VehicleReviewData[vrCameraPos][2]=floatstr(strpart(readline,1,'=')); } }
  104.         fclose(csfile); }
  105.  
  106.     if(!fexist("shopcars.cfg")) {  //shopcars.cfg enthaltet die Wagen-ID's und Kosten, die im Shop verkauft werden.
  107.         csfile=fopen("shopcars.cfg",io_write);
  108.         fwrite(csfile,"--> Bitte schreibe hier die Wagen-id's und Kosten der Wagen, die verkauft werden sollen.\r\n--> In dieser Form:\r\n--> \"AUTOMODELLID KOSTEN\"");
  109.         print("--> Bitte schreibe in scriptfiles/shopcars.cfg die Wagen-id's und Kosten der Wagen, die verkauft werden sollen.\r\n--> In dieser Form:\r\n--> \"AUTOMODELLID KOSTEN\"");
  110.         fclose(csfile); }
  111.     else {
  112.         csfile=fopen("shopcars.cfg",io_read);
  113.         for(new i=0;fread(csfile,readline);i++) {
  114.             if(!strcmp(readline,"-->")) { print("--> Bitte schreibe in scriptfiles/shopcars.cfg die Wagen-id's und Kosten der Wagen, die verkauft werden sollen.\r\n--> In dieser Form:\r\n--> \"AUTOMODELLID KOSTEN\""); break; }
  115.             ShopVehicle[i][svModel]=strval(strpart(readline,0)); ShopVehicle[i][svCost]=strval(strpart(readline,1));
  116.             LoadedVehicles++; }
  117.         fclose(csfile); }
  118.  
  119.  
  120.     print("\r\n------------------------");
  121.     print(" Dynamic Car-Shop Loaded!");
  122.     print("--------------------------\r\n");
  123.     return 1;
  124. }
  125.  
  126. public OnFilterScriptExit()
  127. {
  128.     DestroyPickup(csPickup);
  129.     return 1;
  130. }
  131.  
  132. public OnPlayerConnect(playerid)
  133. {
  134.     LoadPlayerVehicle(playerid);
  135.     return 1;
  136. }
  137.  
  138. public OnPlayerDisconnect(playerid, reason)
  139. {
  140.     new readline[MAX_PLAYER_NAME];
  141.     GetPlayerName(playerid,readline,sizeof(readline));
  142.     format(readline,sizeof(readline),"PlayerVehicles/%s.car",readline);
  143.     if(fexist(readline)) {
  144.         DestroyVehicle(PlayerVehicle[playerid][0][pvID]);
  145.         DestroyVehicle(PlayerVehicle[playerid][1][pvID]);
  146.         SavePlayerVehicle(playerid); }
  147.     if(ShowingVehicle[playerid]>-1) {
  148.         SetPlayerVirtualWorld(playerid,0);
  149.         DestroyVehicle(ReviewingVehicleID[playerid]);
  150.         ReviewingVehicleID[playerid]=-1;
  151.         ShowingVehicle[playerid]=-1; }
  152.     return 1;
  153. }
  154.  
  155. public OnVehicleSpawn(vehicleid)
  156. {
  157.     return 1;
  158. }
  159.  
  160. public OnPlayerCommandText(playerid, cmdtext[])
  161. {
  162.     if(!strcmp(cmdtext,"/car",true,4))
  163.     {
  164.         new pChoise[5];
  165.         strpack(pChoise,strpart(cmdtext,1));
  166.         if(!strlen(pChoise))
  167.         {
  168.             SendClientMessage(playerid,0xFF6347AA,"BENUTZUNG: {FFFFFF}/car [aktion]");
  169.             SendClientMessage(playerid,0xFF6347AA,"AKTIONEN:");
  170.             SendClientMessage(playerid,0xFF6347AA,"'lock': {FFFFFF}Fahrzeug ab- und aufschließen.");
  171.             SendClientMessage(playerid,0xFF6347AA,"'park': {FFFFFF}Fahrzeug parken.");
  172.             SendClientMessage(playerid,0xFF6347AA,"'sell': {FFFFFF}Fahrzeug verkaufen.");
  173.             return 1;
  174.         }
  175.         if(!strcmp(pChoise,"lock",true))
  176.         {
  177.             new vehtolock=0;
  178.             if(!IsPlayerNearVehicle(playerid,PlayerVehicle[playerid][0][pvID],2.0) && !IsPlayerNearVehicle(playerid,PlayerVehicle[playerid][1][pvID],2.0)) { return SendClientMessage(playerid,0xFFFFFFFF,"Du bist nicht bei deinem Fahrzeug!"); }
  179.             if(!IsPlayerNearVehicle(playerid,PlayerVehicle[playerid][0][pvID],2.0)) { vehtolock=1; }
  180.             if(!VehicleDoorStatus[PlayerVehicle[playerid][vehtolock][pvID]]) { //falls der Wagen aufgeschlossen ist...:
  181.                 VehicleDoorStatus[PlayerVehicle[playerid][vehtolock][pvID]]=1;
  182.                 GameTextForPlayer(playerid,"~r~abgeschlossen",3000,6); }
  183.             else { //...andernfalls...:
  184.                 VehicleDoorStatus[PlayerVehicle[playerid][vehtolock][pvID]]=0;
  185.                 GameTextForPlayer(playerid,"~g~aufgeschlossen",3000,6); }
  186.             SetVehicleParamsForAll(PlayerVehicle[playerid][vehtolock][pvID],0,VehicleDoorStatus[PlayerVehicle[playerid][vehtolock][pvID]]);
  187.             return 1;
  188.         }
  189.         if(!strcmp(pChoise,"sell",true))
  190.         {
  191.             new vehtosell,str[4],pName[MAX_PLAYER_NAME],string[64],i,File:csfile;
  192.             if(!IsPlayerInRangeOfPoint(playerid,7.0,bpcoords[0],bpcoords[1],bpcoords[2]) || (!IsPlayerInVehicle(playerid,PlayerVehicle[playerid][0][pvID]) && !IsPlayerInVehicle(playerid,PlayerVehicle[playerid][1][pvID]))) { return SendClientMessage(playerid,0xFFFFFFFF,"Bitte steige in dein Wagen, fahre nahe dem Kaufpickup und tippe '/car sell'!"); }
  193.             if(!IsPlayerInVehicle(playerid,PlayerVehicle[playerid][0][pvID])) { vehtosell=1; }
  194.             PlayerVehicle[playerid][vehtosell][pvModel]=0;
  195.             PlayerVehicle[playerid][vehtosell][pvX]=0.0;
  196.             PlayerVehicle[playerid][vehtosell][pvY]=0.0;
  197.             PlayerVehicle[playerid][vehtosell][pvZ]=0.0;
  198.             PlayerVehicle[playerid][vehtosell][pvA]=0.0;
  199.             PlayerVehicle[playerid][vehtosell][pvColor1]=0;
  200.             PlayerVehicle[playerid][vehtosell][pvColor2]=0;
  201.             PlayerVehicle[playerid][vehtosell][pvPaintjob]=0;
  202.             for(i=0;i<13;i++) {
  203.                 PlayerVehicle[playerid][vehtosell][pvModSlot][i]=0; }
  204.             SetPlayerPos(playerid,carspawn[0],carspawn[1],carspawn[2]);
  205.             DestroyVehicle(PlayerVehicle[playerid][vehtosell][pvID]);
  206.             PlayerVehicle[playerid][vehtosell][pvID]=0;
  207.             format(str,4,"[%d",vehtosell);
  208.             GetPlayerName(playerid,pName,MAX_PLAYER_NAME);
  209.             format(string,sizeof(string),"PlayerVehicles/%s.car",pName);
  210.             csfile=fopen(string,io_read);
  211.             for(i=0; fread(csfile,string); i++) { if(!strcmp(string,str,false,2)) { break; } }
  212.             fclose(csfile);
  213.             format(string,sizeof(string),"PlayerVehicles/%s.car",pName);
  214.             fremoveline(string,i);
  215.             csfile=fopen(string,io_read);
  216.             fread(csfile,string),fclose(csfile);
  217.             if(!strlen(string)) { format(string,sizeof(string),"PlayerVehicles/%s.car",pName); fremove(string); }
  218.             for(i=0;i<MAX_CARS_AT_SHOP;i++) { if(ShopVehicle[i][svModel]==PlayerVehicle[playerid][vehtosell][pvModel]) break; }
  219.             GivePlayerMoney(playerid,ShopVehicle[i][svCost]/2);
  220.             SendClientMessage(playerid,0x33CCFF,"AUTOHAUS: {FFFFFF}Du hast deinen Wagen zurück verkauft und hast die hälfte des Fahrzeugkosten zurück erhalten.");
  221.             return 1;
  222.         }
  223.         if(!strcmp(pChoise,"park",true))
  224.         {
  225.             new vehtopark;
  226.             if(!IsPlayerInVehicle(playerid,PlayerVehicle[playerid][0][pvID]) && !IsPlayerInVehicle(playerid,PlayerVehicle[playerid][1][pvID])) { return SendClientMessage(playerid,0xFFFFFFFF,"Bitte steige in dein Wagen, fahre nahe dem Kaufpickup und tippe '/car sell'!"); }
  227.             if(!IsPlayerInVehicle(playerid,PlayerVehicle[playerid][0][pvID])) { vehtopark=1; }
  228.             GetVehiclePos(PlayerVehicle[playerid][0][pvID],PlayerVehicle[playerid][vehtopark][pvX],PlayerVehicle[playerid][vehtopark][pvY],PlayerVehicle[playerid][vehtopark][pvZ]);
  229.             GetVehicleZAngle(PlayerVehicle[playerid][0][pvID],PlayerVehicle[playerid][vehtopark][pvA]);
  230.             SendClientMessage(playerid,0x9EC73D,"INFO: {FFFFFF}Dein Fahrzeug wurde hier {FF6347}erfolgreich {FFFFFF}geparkt!");
  231.             SavePlayerVehicle(playerid);
  232.             SendClientMessage(playerid,0x9EC73D,"INFO: {FFFFFF}Du kannst dein Fahrzeug nun wenn du dich einloggst, immer {33CCFF}hier {FFFFFF}finden!");
  233.             return 1;
  234.         }
  235.         return 1;
  236.     }
  237.     return 0;
  238. }
  239.  
  240. public OnPlayerPickUpPickup(playerid, pickupid)
  241. {
  242.     new string[64];
  243.     if(pickupid==csPickup)
  244.     {
  245.         if(PlayerVehicle[playerid][0][pvModel] && PlayerVehicle[playerid][1][pvModel]) { return SendClientMessage(playerid,0x33CCFF,"AUTOHAUS: {FFFFFF}Du besitzt bereits 2 wagen! Du musst erst einen verkaufen, wenn du einen anderen kaufen willst."); }
  246.         SetPlayerVirtualWorld(playerid,playerid); //jeder Spieler hat die Virtuelle welt von seiner spielerid. so hat jeder seine eigene virtuelle welt, und so gibt es auch kein Weg dass 2 spieler sich treffen, während sie wagen auswählen =)
  247.         TogglePlayerControllable(playerid,0);
  248.         SetPlayerPos(playerid,VehicleReviewData[vrVehiclePos][0],VehicleReviewData[vrVehiclePos][1],(VehicleReviewData[vrVehiclePos][2]-5));
  249.         SetPlayerCameraPos(playerid,VehicleReviewData[vrCameraPos][0],VehicleReviewData[vrCameraPos][1],VehicleReviewData[vrCameraPos][2]);
  250.         SetPlayerCameraLookAt(playerid,VehicleReviewData[vrVehiclePos][0],VehicleReviewData[vrVehiclePos][1],VehicleReviewData[vrVehiclePos][2]);
  251.  
  252.         ShowingVehicle[playerid]=0;
  253.         ReviewingVehicleID[playerid]=CreateVehicle(ShopVehicle[0][svModel],VehicleReviewData[vrVehiclePos][0],VehicleReviewData[vrVehiclePos][1],VehicleReviewData[vrVehiclePos][2],VehicleReviewData[vrVehiclePos][3],-1,-1,60);
  254.         SetVehicleParamsForAll(ReviewingVehicleID[playerid],1,1);
  255.         SetVehicleVirtualWorld(ReviewingVehicleID[playerid],playerid);
  256.         SendClientMessage(playerid,0x33CCFF,"AUTOHAUS: {FFFFFF}Mit Maustaste rechts & Maustaste Links kannst du Die Autos switchen.");
  257.         SendClientMessage(playerid,0x33CCFF,"AUTOHAUS: {FFFFFF}Mit Enter kannst du den Shop verlassen.");
  258.         SendClientMessage(playerid,0x33CCFF,"AUTOHAUS: {FFFFFF}Drücke Leertaste um das Auto zu kaufen.");
  259.         format(string,sizeof(string),"~w~%s~n~~g~$%d",VehicleName[ShopVehicle[0][svModel]-400],ShopVehicle[0][svCost]);
  260.         GameTextForPlayer(playerid,string,30000,4);
  261.     }
  262.     return 1;
  263. }
  264.  
  265. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  266. {
  267.     new string[64];
  268.     if(ShowingVehicle[playerid]>-1)
  269.     {
  270.         if((newkeys == KEY_FIRE) || (newkeys == KEY_HANDBRAKE)) //Vorheriger Fahrzeug / Nächster Fahrzeug
  271.         {
  272.             if(newkeys==KEY_FIRE) {
  273.                 ShowingVehicle[playerid]--;
  274.                 if(ShowingVehicle[playerid]<0) { ShowingVehicle[playerid]=LoadedVehicles; } }
  275.             else if(newkeys==KEY_HANDBRAKE) {
  276.                 ShowingVehicle[playerid]++;
  277.                 if(ShowingVehicle[playerid]>LoadedVehicles) { ShowingVehicle[playerid]=0; } }
  278.             DestroyVehicle(ReviewingVehicleID[playerid]);
  279.             ReviewingVehicleID[playerid]=CreateVehicle(ShopVehicle[ShowingVehicle[playerid]][svModel],VehicleReviewData[vrVehiclePos][0],VehicleReviewData[vrVehiclePos][1],VehicleReviewData[vrVehiclePos][2],VehicleReviewData[vrVehiclePos][3],-1,-1,60);
  280.             SetVehicleParamsForAll(ReviewingVehicleID[playerid],1,1);
  281.             SetVehicleVirtualWorld(ReviewingVehicleID[playerid],playerid);
  282.             format(string,sizeof(string),"~w~%s~n~~g~$%d",VehicleName[ShopVehicle[ShowingVehicle[playerid]][svModel]-400],ShopVehicle[ShowingVehicle[playerid]][svCost]);
  283.             GameTextForPlayer(playerid,string,30000,4);
  284.             return 1;
  285.         }
  286.         if(newkeys & KEY_SPRINT) //Kaufen
  287.         {
  288.             if(ShopVehicle[ShowingVehicle[playerid]][svCost]>GetPlayerMoney(playerid)) { return SendClientMessage(playerid,0x33CCFF,"AUTOHAUS: {FFFFFF}Du kannst dir diesen Wagen nicht leisten..."),SendClientMessage(playerid,0x33CCFF,"AUTOHAUS: {FFFFFF}Kein problem, schau weiter, wir haben eventuell noch billigere Modelle zu bieten, die du dir leisten kannst!"); }
  289.             new pbvn=0;
  290.             DestroyVehicle(ReviewingVehicleID[playerid]);
  291.             ReviewingVehicleID[playerid]=-1;
  292.             if(PlayerVehicle[playerid][0][pvModel]) { pbvn=1; }
  293.             PlayerVehicle[playerid][pbvn][pvModel]=ShopVehicle[ShowingVehicle[playerid]][svModel];
  294.             PlayerVehicle[playerid][pbvn][pvX]=carspawn[0];
  295.             PlayerVehicle[playerid][pbvn][pvY]=carspawn[1];
  296.             PlayerVehicle[playerid][pbvn][pvZ]=carspawn[2];
  297.             PlayerVehicle[playerid][pbvn][pvA]=carspawn[3];
  298.             PlayerVehicle[playerid][pbvn][pvColor1]=-1;
  299.             PlayerVehicle[playerid][pbvn][pvColor2]=-1;
  300.             PlayerVehicle[playerid][pbvn][pvPaintjob]=3;
  301.             for(new i=0;i<14;i++) {
  302.                 PlayerVehicle[playerid][pbvn][pvModSlot][i]=-1; }
  303.             GivePlayerMoney(playerid,-ShopVehicle[ShowingVehicle[playerid]][svCost]);
  304.             SavePlayerVehicle(playerid);
  305.             PlayerVehicle[playerid][pbvn][pvID]=CreateVehicle(PlayerVehicle[playerid][pbvn][pvModel],carspawn[0],carspawn[1],carspawn[2],carspawn[3],-1,-1,600000);
  306.             SetVehicleParamsForAll(PlayerVehicle[playerid][pbvn][pvID],0,1);
  307.             VehicleDoorStatus[PlayerVehicle[playerid][pbvn][pvID]]=1;
  308.             SetPlayerVirtualWorld(playerid,0);
  309.             SetPlayerPos(playerid,carspawn[0],carspawn[1],carspawn[2]+5);
  310.             TogglePlayerControllable(playerid,1);
  311.             GameTextForPlayer(playerid," ",1000,4);
  312.             SendClientMessage(playerid,0x33CCFF,"AUTOHAUS: {FFFFFF}Glückwunsch, du hast einen neuen Wagen gekauft!");
  313.             SendClientMessage(playerid,0x33CCFF,"AUTOHAUS: {FFFFFF}Benutze '/car' um alle Befehle für deinen Wagen zu sehen.");
  314.             SendClientMessage(playerid,0x33CCFF,"AUTOHAUS: {FFFFFF}Dein Fahrzeug ist erstmal abgeschlossen, damit kein anderer vor dir einsteigt, benutze '/car lock' um es aufzuschließen.");
  315.             SetCameraBehindPlayer(playerid);
  316.             ShowingVehicle[playerid]=-1;
  317.             return 1;
  318.         }
  319.         if(newkeys & KEY_SECONDARY_ATTACK) //Verlassen ohne etwas zu kaufen
  320.         {
  321.             SetPlayerPos(playerid,carspawn[0],carspawn[1],carspawn[2]);
  322.             SetPlayerVirtualWorld(playerid,0);
  323.             TogglePlayerControllable(playerid,1);
  324.             SetCameraBehindPlayer(playerid);
  325.             GameTextForPlayer(playerid," ",1000,4);
  326.             DestroyVehicle(ReviewingVehicleID[playerid]);
  327.             ReviewingVehicleID[playerid]=-1;
  328.             ShowingVehicle[playerid]=-1;
  329.             return 1;
  330.         }
  331.     }
  332.     return 1;
  333. }
  334.  
  335. public OnPlayerUpdate(playerid)
  336. {
  337.     return 1;
  338. }
  339.  
  340. public OnVehicleStreamIn(vehicleid, forplayerid)
  341. {
  342.     for(new i,pcnt=GetMaxPlayers();i<pcnt;i++) {
  343.         if(IsPlayerConnected(i)) {
  344.             for(new x;x<2;x++) {
  345.                 if(PlayerVehicle[i][x][pvID]==vehicleid) {
  346.                     SetVehicleParamsForPlayer(vehicleid,forplayerid,0,VehicleDoorStatus[vehicleid]); } } } }
  347.     return 1;
  348. }
  349.  
  350. /**********************************************************************************************
  351.  **********************************************************************************************/
  352.  
  353. stock LoadPlayerVehicle(playerid) {
  354.     new readline[256];
  355.     GetPlayerName(playerid,readline,MAX_PLAYER_NAME);
  356.     format(readline,sizeof(readline),"PlayerVehicles/%s.car",readline);
  357.     if(fexist(readline)) {
  358.         new File:csfile=fopen(readline,io_read);
  359.         while(fread(csfile,readline)) {
  360.             new lpvid;
  361.             if(!strcmp(readline,"[0",false,2)) { lpvid=0; }
  362.             else if(!strcmp(readline,"[1",false,2)) { lpvid=1; }
  363.             PlayerVehicle[playerid][lpvid][pvModel]=strval(strpart(readline,1));
  364.             PlayerVehicle[playerid][lpvid][pvX]=floatstr(strpart(readline,2));
  365.             PlayerVehicle[playerid][lpvid][pvY]=floatstr(strpart(readline,3));
  366.             PlayerVehicle[playerid][lpvid][pvZ]=floatstr(strpart(readline,4));
  367.             PlayerVehicle[playerid][lpvid][pvA]=floatstr(strpart(readline,5));
  368.             PlayerVehicle[playerid][lpvid][pvColor1]=strval(strpart(readline,6));
  369.             PlayerVehicle[playerid][lpvid][pvColor2]=strval(strpart(readline,7));
  370.             PlayerVehicle[playerid][lpvid][pvPaintjob]=strval(strpart(readline,8));
  371.             PlayerVehicle[playerid][lpvid][pvID]=CreateVehicle(PlayerVehicle[playerid][lpvid][pvModel],PlayerVehicle[playerid][lpvid][pvX],PlayerVehicle[playerid][lpvid][pvY],PlayerVehicle[playerid][lpvid][pvZ],PlayerVehicle[playerid][lpvid][pvA],PlayerVehicle[playerid][lpvid][pvColor1],PlayerVehicle[playerid][lpvid][pvColor2],30);
  372.             ChangeVehiclePaintjob(PlayerVehicle[playerid][lpvid][pvID],PlayerVehicle[playerid][lpvid][pvPaintjob]);
  373.             for(new i=0;i<13;i++) {
  374.                 PlayerVehicle[playerid][lpvid][pvModSlot][i]=strval(strpart(readline,i+9));
  375.                 if(PlayerVehicle[playerid][lpvid][pvModSlot][i]!=-1) { AddVehicleComponent(PlayerVehicle[playerid][lpvid][pvID],PlayerVehicle[playerid][lpvid][pvModSlot][i]); } }
  376.             fclose(csfile); } }
  377.     return 1; }
  378.  
  379. stock SavePlayerVehicle(playerid) {
  380.     new string[256],pName[MAX_PLAYER_NAME],File:pvfile;
  381.     GetPlayerName(playerid,pName,MAX_PLAYER_NAME);
  382.     format(string,sizeof(string),"PlayerVehicles/%s.car",pName);
  383.     pvfile=fopen(string,io_write);
  384.     for(new i=0; i<2; i++) {
  385.         if(PlayerVehicle[playerid][i][pvModel]) {
  386.             new str[2][64];
  387.             format(string,sizeof(string),"[%d] %d %f %f %f %f %d %d %d ",i,PlayerVehicle[playerid][i][pvModel],PlayerVehicle[playerid][i][pvX],PlayerVehicle[playerid][i][pvY],PlayerVehicle[playerid][i][pvZ],PlayerVehicle[playerid][i][pvA],PlayerVehicle[playerid][i][pvColor1],PlayerVehicle[playerid][i][pvColor2],PlayerVehicle[playerid][i][pvPaintjob]);
  388.             format(str[0],64,"%d %d %d %d %d %d %d ",PlayerVehicle[playerid][i][pvModSlot][0],PlayerVehicle[playerid][i][pvModSlot][1],PlayerVehicle[playerid][i][pvModSlot][2],PlayerVehicle[playerid][i][pvModSlot][3],PlayerVehicle[playerid][i][pvModSlot][4],PlayerVehicle[playerid][i][pvModSlot][5],PlayerVehicle[playerid][i][pvModSlot][6]);
  389.             format(str[1],64,"%d %d %d %d %d %d %d\r\n",PlayerVehicle[playerid][i][pvModSlot][7],PlayerVehicle[playerid][i][pvModSlot][8],PlayerVehicle[playerid][i][pvModSlot][9],PlayerVehicle[playerid][i][pvModSlot][10],PlayerVehicle[playerid][i][pvModSlot][11],PlayerVehicle[playerid][i][pvModSlot][12],PlayerVehicle[playerid][i][pvModSlot][13]);
  390.             strins(string,str[0],strlen(string)),strins(string,str[1],strlen(string));
  391.             fwrite(pvfile,string); } }
  392.     return fclose(pvfile); }
  393.  
  394. /**********************************************************************************************
  395.  **********************************************************************************************/
  396. stock IsPlayerNearVehicle(FXF_playerid, FXF_vehicleid, Float:radi) {
  397.     new Float:FXF_oldposx, Float:FXF_oldposy, Float:FXF_oldposz,
  398.         Float:FXF_tempposx, Float:FXF_tempposy, Float:FXF_tempposz,
  399.         Float:x,Float:y,Float:z;
  400.     GetPlayerPos(FXF_playerid,x,y,z);
  401.     GetVehiclePos(FXF_vehicleid, FXF_oldposx, FXF_oldposy, FXF_oldposz);
  402.     FXF_tempposx = (FXF_oldposx -x);
  403.     FXF_tempposy = (FXF_oldposy -y);
  404.     FXF_tempposz = (FXF_oldposz -z);
  405.     if(((FXF_tempposx < radi) && (FXF_tempposx > -radi)) && ((FXF_tempposy < radi) && (FXF_tempposy > -radi)) && ((FXF_tempposz < radi) && (FXF_tempposz > -radi))) {
  406.         return 1; }
  407.     return 0; }
  408.  
  409. stock SetVehicleParamsForAll(vehicleid, objective, doorslocked) {
  410.     for(new i=0;i<MAX_PLAYERS;i++) { SetVehicleParamsForPlayer(vehicleid,i,objective,doorslocked); } }
  411.  
  412. stock fremoveline(filedir[],line)
  413. {
  414.     if(!fexist(filedir)) { return 0; }
  415.     new rdline[256],str[1024],File:tmpfile = fopen(filedir,io_read);
  416.     for(new i=0;fread(tmpfile,rdline); i++) {
  417.         if(i==line) { continue; }
  418.         strins(str,rdline,strlen(str)); }
  419.     fclose(tmpfile),fremove(filedir);
  420.     tmpfile=fopen(filedir,io_write);
  421.     return fwrite(tmpfile,str),fclose(tmpfile),1;
  422. }
  423.  
  424. stock strpart(const string[], strpos=0, sep=' ') {
  425.  
  426.     new tmpstr[128],cnt[2];
  427.     format(tmpstr,128,"%s",string);
  428.     for(new i=0,len=strlen(tmpstr); i<len; ++i) {
  429.         if(tmpstr[i]==sep) {
  430.             if(!strpos) { strdel(tmpstr,i,128); break; }
  431.             else if(strpos==cnt[1]) { strdel(tmpstr,i,128); break; }
  432.             else if(strpos==(cnt[1]+1)) { cnt[0]=i+1; strdel(tmpstr,0,cnt[0]); i=0; len=strlen(tmpstr); cnt[1]++; continue; }
  433.             else { cnt[1]++; } } }
  434.     if(!strcmp(tmpstr,string)) { tmpstr="\0"; }
  435.     return tmpstr; }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement