Guest User

Untitled

a guest
Oct 24th, 2014
557
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.97 KB | None | 0 0
  1. #include <a_samp>
  2. #include <dini>
  3.  
  4. #define error 0xC30000FF
  5. #define info 0x00C000FF
  6. #define FILTERSCRIPT
  7. #define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
  8. #define PREIS 4 // Preis Pro liter
  9. #define MAXFULL 30 // Maximale Literanzahl für jedes Fahrzeug.
  10. #define SECONDS 60 // Nach wieviele Sekunden verbraucht ein Fahrzeug zusätzlich 0.1 Liter.
  11. #define TANKDAUER 300 // Wielange dauert das Tanken PRO Liter. (0 = Sofort voll) (Millisekunden)
  12. #define STANDARD 10 // StandarD Menge (Standard 10)
  13. #define FOLDER "pcars" // Ordner in dem die Cars gespeichert werden (StandarD: pcars). (Ordner muss in Scriptfiles erstellt werden)
  14. #define START_MOTOR_KEY 132 // Taste bei dem der Motor startet (http://wiki.sa-mp.com/wiki/Keys) | Zeile entfernen oder auskommentieren um Funktion zu deaktivieren.
  15. #define MOTOR_OFF_KMH 50 // Ab diese km/h Anzahl kann der Spieler den Motor !NICHT! mehr ausschalten, sondern muss langsamer werden.
  16. #define LITER_PRO_KM 2 // Literverbrauch (für alle Autos) pro gefahrener Kilometer
  17.  
  18. forward Speedometer(playerid);
  19. forward FillGas(i, playerid,price);
  20. forward Gas();
  21. forward checkGas();
  22. forward IsAtGasStation(playerid);
  23. enum vehicleData {
  24. vehicleSpawnID,
  25. vehicleColor1,
  26. vehicleColor2,
  27. Float:vehicleKm,
  28. vehicleTank,
  29.  
  30. Float:vLastX,
  31. Float:vLastY,
  32. Float:vLastZ
  33. };
  34. new vehicles[MAX_VEHICLES][vehicleData];
  35.  
  36. new Text:Tacho[MAX_PLAYERS];
  37. new timer[MAX_PLAYERS];
  38. new Float:Tank[MAX_VEHICLES];
  39. new engine,lights,alarm,doors,bonnet,boot,objective;
  40. new bool:Motor[MAX_VEHICLES]=false;
  41. new PlayerVehicle[212][] = {
  42. "Landstalker", "Bravura", "Buffalo", "Linerunner", "Perrenial", "Sentinel", "Dumper", "Firetruck", "Trashmaster", "Stretch", "Manana",
  43. "Infernus", "Voodoo", "Pony", "Mule", "Cheetah", "Ambulance", "Leviathan", "Moonbeam", "Esperanto", "Taxi", "Washington", "Bobcat",
  44. "Whoopee", "BF Injection", "Hunter", "Premier", "Enforcer", "Securicar", "Banshee", "Predator", "Bus", "Rhino", "Barracks", "Hotknife",
  45. "Trailer 1", "Previon", "Coach", "Cabbie", "Stallion", "Rumpo", "RC Bandit", "Romero", "Packer", "Monster", "Admiral", "Squalo",
  46. "Seasparrow", "Pizzaboy", "Tram", "Trailer 2", "Turismo", "Speeder", "Reefer", "Tropic", "Flatbed", "Yankee", "Caddy", "Solair",
  47. "Berkley's RC Van", "Skimmer", "PCJ-600", "Faggio", "Freeway", "RC Baron", "RC Raider", "Glendale", "Oceanic", "Sanchez", "Sparrow",
  48. "Patriot", "Quad", "Coastguard", "Dinghy", "Hermes", "Sabre", "Rustler", "ZR-350", "Walton", "Regina", "Comet", "BMX", "Burrito",
  49. "Camper", "Marquis", "Baggage", "Dozer", "Maverick", "News Chopper", "Rancher", "FBI Rancher", "Virgo", "Greenwood", "Jetmax", "Hotring",
  50. "Sandking", "Blista Compact", "Police Maverick", "Boxvillde", "Benson", "Mesa", "RC Goblin", "Hotring Racer A", "Hotring Racer B",
  51. "Bloodring Banger", "Rancher", "Super GT", "Elegant", "Journey", "Bike", "Mountain Bike", "Beagle", "Cropduster","Stunt", "Tanker",
  52. "Roadtrain", "Nebula", "Majestic", "Buccaneer", "Shamal", "Hydra", "FCR-900", "NRG-500", "HPV1000", "Cement Truck", "Tow Truck", "Fortune",
  53. "Cadrona", "FBI Truck", "Willard", "Forklift", "Tractor", "Combine", "Feltzer", "Remington", "Slamvan", "Blade", "Freight", "Streak",
  54. "Vortex", "Vincent", "Bullet", "Clover", "Sadler", "Firetruck LA", "Hustler", "Intruder", "Primo", "Cargobob", "Tampa", "Sunrise", "Merit",
  55. "Utility", "Nevada", "Yosemite", "Windsor", "Monster A", "Monster B", "Uranus", "Jester", "Sultan", "Stratum", "Elegy", "Raindance",
  56. "RC Tiger", "Flash", "Tahoma", "Savanna", "Bandito", "Freight Flat", "Streak Carriage", "Kart", "Mower", "Dune", "Sweeper", "Broadway",
  57. "Tornado", "AT-400", "DFT-30", "Huntley", "Stafford", "BF-400", "News Van", "Tug", "Trailer 3", "Emperor", "Wayfarer", "Euros", "Hotdog",
  58. "Club", "Freight Carriage", "Trailer 4", "Andromada", "Dodo", "RC Cam", "Launch", "Police Car (LSPD)", "Police Car (SFPD)",
  59. "Police Car (LVPD)", "Police Ranger", "Picador", "S.W.A.T", "Alpha", "Phoenix", "Glendale", "Sadler", "Luggage Trailer A",
  60. "Luggage Trailer B", "Stairs", "Boxville", "Tiller", "Utility Trailer"
  61. };
  62.  
  63. public OnFilterScriptInit()
  64. {
  65. ManualVehicleEngineAndLights();
  66. for(new i =0; i<MAX_VEHICLES;i++) {
  67. Tank[i] = STANDARD;
  68. loadCar(i);
  69. Motor[i]=false;
  70. GetVehicleParamsEx(i,engine,lights,alarm,doors,bonnet,boot,objective);
  71. SetVehicleParamsEx(i,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
  72. }
  73. timer[1] = SetTimer("Speedometer",1000, 1);
  74. timer[2] = SetTimer("Gas", SECONDS * 1000, 1);
  75. print("\n---------------------------------------------");
  76. print(" Tank, Motor und Tacho System ");
  77. new file[255]; format(file,sizeof file, "%s",FOLDER);
  78. if ( !dini_Exists(file) ) {
  79. printf("Fehler: Der Ordner >%s< wurde nicht gefunden.",FOLDER);
  80. }
  81. print("-----------------------------------------------\n");
  82. for (new i=0; i<MAX_PLAYERS; i++) {
  83. Tacho[i] = TextDrawCreate(460.000000, 381.500000, " ");
  84. TextDrawBackgroundColor(Tacho[i], 255);
  85. TextDrawFont(Tacho[i], 1);
  86. TextDrawLetterSize(Tacho[i], 0.32, 0.97);
  87. TextDrawColor(Tacho[i], -1);
  88. TextDrawSetOutline(Tacho[i], 0);
  89. TextDrawSetProportional(Tacho[i], 1);
  90. TextDrawSetShadow(Tacho[i], 1);
  91. TextDrawHideForAll(Tacho[i]);
  92. }
  93. return 1;
  94. }
  95.  
  96. public OnFilterScriptExit() {
  97. for (new i=0; i<MAX_PLAYERS; i++) { TextDrawDestroy(Tacho[i]); }
  98. for (new i=0; i<MAX_VEHICLES; i++) {
  99. saveCar(i);
  100. }
  101. return 1;
  102. }
  103.  
  104. public OnVehicleSpawn(vehicleid) {
  105. GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
  106. SetVehicleParamsEx(vehicleid,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
  107. Motor[vehicleid] = false;
  108. return 0;
  109. }
  110.  
  111. #if defined START_MOTOR_KEY
  112. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) {
  113. if ( newkeys == (START_MOTOR_KEY) ) { toggleMotor(playerid); }
  114. return 1;
  115. }
  116. #endif
  117.  
  118. public OnPlayerConnect(playerid) {
  119. timer[playerid] = SetTimerEx("Speedometer",1000, 1,"i",playerid);
  120. return 1;
  121. }
  122.  
  123. public OnPlayerDisconnect(playerid, reason) {
  124. KillTimer(timer[playerid]);
  125. return 1;
  126. }
  127.  
  128. public Speedometer(playerid) {
  129. TextDrawHideForPlayer(playerid, Tacho[playerid]);
  130. if ( IsPlayerConnected(playerid) ) {
  131. if( IsPlayerInAnyVehicle(playerid) ) {
  132. TextDrawShowForPlayer(playerid, Tacho[playerid]);
  133. new Float:chealth, speed_string[255], kmh, vehicleid = GetPlayerVehicleID(playerid), modelid = GetVehicleModel(vehicleid);
  134. GetVehicleHealth(vehicleid, chealth);
  135. kmh = getKmh(playerid, true);
  136.  
  137. if ( GetPlayerState(playerid) == PLAYER_STATE_DRIVER ) {
  138. new Float:x2, Float:y2, Float:z2, Float:output;
  139. GetVehiclePos(vehicleid, x2, y2, z2);
  140. output = floatsqroot(floatpower(floatabs(floatsub(x2, vehicles[vehicleid][vLastX])), 2)+floatpower(floatabs(floatsub(y2, vehicles[vehicleid][vLastY])), 2)+floatpower(floatabs(floatsub(z2, vehicles[vehicleid][vLastZ])), 2));
  141. new Float:rtank = output / 1000 * LITER_PRO_KM;
  142. Tank[vehicleid] -= rtank;
  143. vehicles[vehicleid][vehicleKm] += output;
  144. vehicles[vehicleid][vLastX] = x2; vehicles[vehicleid][vLastY] = y2; vehicles[vehicleid][vLastZ] = z2;
  145. }
  146. format(speed_string,255,"~b~%s: ~w~%d%%~n~~b~Km/h: ~w~%d km/h~n~~b~Motor: %s~n~~b~Kilometer:~w~ %.2f~n~~b~Benzin: ~w~%.1f/%dl", PlayerVehicle[modelid - 400], floatround(chealth, floatround_round)/10,kmh, Motor[vehicleid]?("~g~An"):("~r~Aus"),(vehicles[vehicleid][vehicleKm]/1000), Tank[vehicleid], MAXFULL);
  147. TextDrawSetString(Tacho[playerid], speed_string);
  148. }
  149. }
  150. return 1;
  151. }
  152.  
  153. public Gas() {
  154. new vehicleid;
  155. for (new i=0; i < MAX_VEHICLES;i++) {
  156. for ( new p=0; p < MAX_PLAYERS; p++ ) {
  157. if ( IsPlayerConnected(p) ) {
  158. vehicleid = GetPlayerVehicleID(p);
  159. vehicleid = GetPlayerVehicleID(p);
  160. if ( vehicleid == i ) {
  161. if( Tank[i] <= 4 && Tank[i] >= 1 ) { PlayerPlaySound(p, 1085, 0.0, 0.0, 0.0); }
  162. }
  163. }
  164. }
  165. if ( Motor[i] == true ) {
  166. Tank[i] -= 0.1;
  167. if ( Tank[i] <= 0 ) { Motor[i] = false; SetVehicleParamsEx(i, VEHICLE_PARAMS_OFF, lights,alarm,doors,bonnet,boot,objective); }
  168. }
  169. }
  170. return 1;
  171. }
  172.  
  173. public OnPlayerStateChange(playerid, newstate, oldstate) {
  174. if( newstate == PLAYER_STATE_DRIVER) {
  175. new vehicle = GetPlayerVehicleID(playerid);
  176. GetVehicleParamsEx(vehicle,engine,lights,alarm,doors,bonnet,boot,objective);
  177. if(GetVehicleModel(vehicle) == 509 || GetVehicleModel(vehicle) == 481 || GetVehicleModel(vehicle) == 510) { SetVehicleParamsEx(vehicle,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective); }
  178. else { SendClientMessage(playerid, info, "Schalte den Motor mit an oder aus."); }
  179. if ( Motor[vehicle]==false ) { SetVehicleParamsEx(vehicle,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective); }
  180. if( Tank[vehicle] <= 0 ) {
  181. Motor[vehicle]=false;
  182. Tank[vehicle] = 0;
  183. SetVehicleParamsEx(vehicle,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
  184. GameTextForPlayer(playerid,"~r~~n~~n~~n~~n~~n~~n~~n~~n~Der Tank ist leer!",3000,3);
  185. }
  186. }
  187. return 1;
  188. }
  189.  
  190. public IsAtGasStation(playerid) {
  191. if(IsPlayerConnected(playerid)) {
  192. if(IsPlayerInRangeOfPoint(playerid,15.0,1004.0070,-939.3102,42.1797) || IsPlayerInRangeOfPoint(playerid,15.0,1944.3260,-1772.9254,13.3906)) { return 1; }
  193. else if(IsPlayerInRangeOfPoint(playerid,15.0,-90.5515,-1169.4578,2.4079) || IsPlayerInRangeOfPoint(playerid,15.0,-1609.7958,-2718.2048,48.5391)) { return 1; }
  194. else if(IsPlayerInRangeOfPoint(playerid,15.0,-2029.4968,156.4366,28.9498) || IsPlayerInRangeOfPoint(playerid,15.0,-2408.7590,976.0934,45.4175)) { return 1; }
  195. else if(IsPlayerInRangeOfPoint(playerid,15.0,-2243.9629,-2560.6477,31.8841) || IsPlayerInRangeOfPoint(playerid,6.0,-1676.6323,414.0262,6.9484)) { return 1; }
  196. else if(IsPlayerInRangeOfPoint(playerid,15.0,2202.2349,2474.3494,10.5258) || IsPlayerInRangeOfPoint(playerid,15.0,614.9333,1689.7418,6.6968)) { return 1; }
  197. else if(IsPlayerInRangeOfPoint(playerid,15.0,-1328.8250,2677.2173,49.7665) || IsPlayerInRangeOfPoint(playerid,15.0,70.3882,1218.6783,18.5165)) { return 1; }
  198. else if(IsPlayerInRangeOfPoint(playerid,15.0,2113.7390,920.1079,10.5255) || IsPlayerInRangeOfPoint(playerid,15.0,-1327.7218,2678.8723,50.0625)) { return 1; }
  199. else if(IsPlayerInRangeOfPoint(playerid,15.0,2146.6143,2748.4758,10.3852)||IsPlayerInRangeOfPoint(playerid,15.0,2639.0022,1108.0353,10.3852)) { return 1; }
  200. else if(IsPlayerInRangeOfPoint(playerid,15.0,1598.2035,2198.6448,10.3856)) { return 1; }
  201. }
  202. return 0;
  203. }
  204.  
  205. stock getKmh(playerid,bool:kmh) {
  206. new Float:x,Float:y,Float:z,Float:rtn;
  207. if(IsPlayerInAnyVehicle(playerid)) GetVehicleVelocity(GetPlayerVehicleID(playerid),x,y,z); else GetPlayerVelocity(playerid,x,y,z);
  208. rtn = floatsqroot((x*x)+(y*y)+(z*z));
  209. return kmh?floatround(rtn * 85 * 1.61):floatround(rtn * 50);
  210. }
  211.  
  212. public FillGas(i, playerid,price) {
  213. new str[50];
  214. if ( floatround(Tank[i],floatround_ceil) < MAXFULL ) {
  215. if (IsAtGasStation(playerid) && Motor[i] == false ) {
  216. format(str, sizeof str, "Du hast nicht genug Geld für ein weiteren Liter. (Kosten: %d$)", PREIS);
  217. if ( GetPlayerMoney(playerid) >= PREIS ) {
  218. Tank[i] ++;
  219. SetTimerEx("FillGas", TANKDAUER * 1, 0, "iii", i, playerid,price + PREIS);
  220. GivePlayerMoney(playerid, -PREIS);
  221. GameTextForPlayer(playerid, "~w~~n~~n~~n~~n~~n~~n~~n~~n~Dein Fahrzeug wird betankt...",TANKDAUER,3);
  222. }
  223. else { SendClientMessage(playerid,error, str); }
  224. }
  225. else { format(str, sizeof str, "Das Tanken wurde beendet."); SendClientMessage(playerid,error, str); }
  226. }
  227. else { format(str, sizeof str, "Dein Fahrzeug wurde für %d$ betankt!",price); SendClientMessage(playerid, info, str); }
  228. return 1;
  229. }
  230.  
  231. forward loadCar(carid);
  232. public loadCar(carid) {
  233. new file[255]; format(file,sizeof file, "%s/pcar_%d.cfg",FOLDER,carid);
  234. if ( !dini_Exists(file) ) { return 0; }
  235. new model = dini_Int(file,"model");
  236. vehicles[carid][vehicleKm] = dini_Float(file,"km");
  237. vehicles[carid][vehicleColor1] = dini_Int(file,"color1");
  238. vehicles[carid][vehicleColor2] = dini_Int(file,"color2");
  239. Tank[carid] = dini_Float(file,"tank");
  240. if ( Tank[carid] > MAXFULL ) { Tank[carid] = MAXFULL; }
  241. Tank[carid] -= 5.0;
  242. new Float:x = dini_Float(file,"float_x");
  243. new Float:y = dini_Float(file,"float_y");
  244. new Float:z = dini_Float(file,"float_z");
  245. new Float:r = dini_Float(file,"float_r");
  246. vehicles[carid][vehicleSpawnID] = CreateVehicle(model,x,y,z,r,vehicles[carid][vehicleColor1],vehicles[carid][vehicleColor2],0);
  247. GetVehiclePos(vehicles[carid][vehicleSpawnID],x,y,z);
  248. vehicles[carid][vLastX] = x; vehicles[carid][vLastY] = y; vehicles[carid][vLastZ] = z;
  249. return 1;
  250. }
  251.  
  252. forward saveCar(carid);
  253. public saveCar(carid) {
  254. if ( GetVehicleModel(carid) > 0 ) {
  255. new file[255]; format(file,sizeof file, "%s/pcar_%d.cfg",FOLDER,carid);
  256. if ( !dini_Exists(file) ) { dini_Create(file); }
  257. dini_IntSet(file,"model", GetVehicleModel(carid));
  258. dini_IntSet(file,"color1", vehicles[carid][vehicleColor1]);
  259. dini_IntSet(file,"color2", vehicles[carid][vehicleColor2]);
  260. dini_FloatSet(file,"tank", Tank[carid]);
  261. dini_FloatSet(file,"km", vehicles[carid][vehicleKm]);
  262. new Float:x,Float:y,Float:z,Float:r;
  263. GetVehiclePos(carid, x,y,z);
  264. GetVehicleZAngle(carid,r);
  265. dini_FloatSet(file,"float_x",x);
  266. dini_FloatSet(file,"float_y",y);
  267. dini_FloatSet(file,"float_z",z);
  268. dini_FloatSet(file,"float_r",r);
  269. DestroyVehicle(carid);
  270. }
  271. return 1;
  272. }
  273.  
  274. forward toggleMotor(playerid);
  275. public toggleMotor(playerid) {
  276. if(GetPlayerVehicleSeat(playerid) == 0) {
  277. new car = GetPlayerVehicleID(playerid);
  278. if(GetVehicleModel(car) == 509 || GetVehicleModel(car) == 481 || GetVehicleModel(car) == 510) { SendClientMessage(playerid, error, "Ein Fahrrad hat kein Motor."); }
  279. else if (Motor[car] == false) {
  280. GetVehicleParamsEx(car,engine,lights,alarm,doors,bonnet,boot,objective);
  281. if ( Tank[car] >= 1 ) { Motor[car] = true; SetVehicleParamsEx(car,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective); }
  282. else { Motor[car] = false; SetVehicleParamsEx(car,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective); GameTextForPlayer(playerid,"~w~~n~~n~~n~~n~~n~~n~~n~~n~Der Tank ist leer!",3000,3); }
  283. }
  284. else {
  285. #if defined MOTOR_OFF_KMH
  286. if ( getKmh(playerid,true) > MOTOR_OFF_KMH ) { return SendClientMessage(playerid, error, "Du fährst zu schnell um den Motor abzuschalten."); }
  287. #endif
  288. GetVehicleParamsEx(car,engine,lights,alarm,doors,bonnet,boot,objective);
  289. SetVehicleParamsEx(car,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
  290. Motor[car] = false;
  291. }
  292. }
  293. return 1;
  294. }
  295.  
  296. public OnPlayerCommandText(playerid, cmdtext[]) {
  297. dcmd(tanken,6,cmdtext);
  298. dcmd(motor, 5,cmdtext);
  299. return 0;
  300. }
  301.  
  302. dcmd_tanken(playerid, params[]) {
  303. #pragma unused params
  304. if(IsPlayerInAnyVehicle(playerid)) {
  305. if(IsAtGasStation(playerid)) {
  306. new vehicle = GetPlayerVehicleID(playerid);
  307. new liter = MAXFULL; liter -= floatround(Tank[vehicle],floatround_floor);
  308. printf("%d %f",liter,liter);
  309. if ( Motor[vehicle] == true ) { SendClientMessage(playerid, error, "Schalte den Motor vor dem Tanken bitte aus."); }
  310. else {
  311. if(GetPlayerMoney(playerid) > liter*PREIS) {
  312. TogglePlayerControllable(playerid, 1);
  313. SetTimerEx("FillGas", 1000, 0, "iii", vehicle, playerid,0);
  314. GameTextForPlayer(playerid, "~w~~n~~n~~n~~n~~n~~n~~n~~n~Dein Fahrzeug wird betankt...",TANKDAUER,3);
  315. }
  316. else { SendClientMessage(playerid, error, "Du hast nicht genug Geld."); }
  317. }
  318. }
  319. else { SendClientMessage(playerid, error, "Du bist an keiner Tankstelle."); }
  320. }
  321. return 1;
  322. }
  323.  
  324. dcmd_motor(playerid, params[]) {
  325. #pragma unused params
  326. toggleMotor(playerid);
  327. return 1;
  328. }
Advertisement
Add Comment
Please, Sign In to add comment