Advertisement
ZiGGi

QuidemSys v2.7

Feb 25th, 2012
467
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 15.23 KB | None | 0 0
  1. /*
  2.  
  3.     Название: QuidemSys v2.7
  4.     Описание:
  5.         Спидометр с системой бензина и заправок. У каждого вида транспорта свой объём бензобака.
  6.         Расход топлива в зависимости от скорости.
  7.         Закрытие/открытие транспорта.
  8.         Постепенная заправка транспорта на заправке.
  9.         Рандомное количество топлива в баке при спавне транспорта и инициализации скрипта(не меньше половины бака).
  10.    
  11.     Автор: ZiGGi (ziggi.org, me@ziggi.org)
  12.     Дата: 2012-03-04
  13.    
  14.     Платформа: sa-mp server версии 0.3c и выше
  15.     Компилятор: Pawn 3.2.3664
  16.  
  17. */
  18.  
  19. #define FILTERSCRIPT
  20.  
  21. #include <..\compiler\includes\a_samp>
  22. #include "foreach"
  23.  
  24. #define TD_FONT     2 // используемый id шрифта в текстдраве
  25. #define FUEL_SPEED  2 // количество бензина, заправляемого за 1 секунду
  26. #define FUEL_TARIF  1 // цена одного литра бензина, в долларах
  27. #define RUS_TD // если задефайнено, то текст в текстдраве будет русским
  28.  
  29. #define MAX_STRING  128
  30.  
  31. #define COLOR_RED       0xAA3333AA
  32. #define COLOR_GREEN     0x33AA33AA
  33. #define COLOR_YELLOW    0xFFFF00AA
  34.  
  35.  
  36. enum Fuel_Info {
  37.     Float:Coord_X,
  38.     Float:Coord_Y,
  39.     Float:Coord_Z
  40. }
  41.  
  42. new FuelStations[][Fuel_Info] = {
  43.     {1595.5406, 2198.0520, 10.3863},
  44.     {2202.0649, 2472.6697, 10.5677},
  45.     {2115.1929, 919.9908, 10.5266},
  46.     {2640.7209, 1105.9565, 10.5274},
  47.     {608.5971, 1699.6238, 6.9922},
  48.     {618.4878, 1684.5792, 6.9922},
  49.     {2146.3467, 2748.2893, 10.5245},
  50.     {-1679.4595, 412.5129, 6.9973},
  51.     {-1327.5607, 2677.4316, 49.8093},
  52.     {-1470.0050, 1863.2375, 32.3521},
  53.     {-2409.2200, 976.2798, 45.2969},
  54.     {-2244.1396, -2560.5833, 31.9219},
  55.     {-1606.0544, -2714.3083, 48.5335},
  56.     {1937.4293, -1773.1865, 13.3828},
  57.     {-91.3854, -1169.9175, 2.4213},
  58.     {1383.4221, 462.5385, 20.1506},
  59.     {660.4590, -565.0394, 16.3359},
  60.     {1381.7206, 459.1907, 20.3452},
  61.     {-1605.7156, -2714.4573, 48.5335}
  62. };
  63.  
  64. new FuelList[] = {
  65. 70,45,40,298,40,40,200,80,60,40,40,40,40,45,45,40,70,100,
  66. 45,40,40,40,45,45,20,200,40,70,70,40,45,60,90,100,35,0,
  67. 40,50,40,40,45,5,40,50,65,40,35,90,20,60,0,40,20,20,
  68. 20,60,50,20,40,45,90,30,20,35,5,5,40,40,20,90,90,20,
  69. 20,20,40,40,40,40,40,45,40,0,45,45,20,20,30,90,90,70,
  70. 70,40,40,20,40,45,40,90,50,50,40,5,40,40,40,50,40,40,
  71. 50,0,0,90,90,90,298,298,40,40,40,400,400,30,30,30,50,50,
  72. 40,40,50,40,20,20,60,40,40,40,40,50,50,20,40,40,40,50,
  73. 70,40,40,40,90,40,40,40,40,300,50,40,80,80,40,40,40,40,
  74. 40,90,90,40,45,45,20,0,50,10,20,50,20,40,40,300,50,50,
  75. 40,30,50,20,0,40,30,40,50,40,0,0,300,200,0,20,40,40,
  76. 40,50,40,60,40,40,40,45,0,0,0,50,0,0,
  77. };
  78.  
  79. new Text:white, Text:black, Text:speedom[MAX_PLAYERS];
  80. new Float:Fuel[MAX_VEHICLES], IsLocked[MAX_VEHICLES char];
  81. new fill_TimerID[MAX_PLAYERS] = {0,...}, SpeedTimer = 0;
  82.  
  83.  
  84. public OnFilterScriptInit()
  85. {
  86.     ManualVehicleEngineAndLights();
  87.     new Float:max_fuel,model;
  88.     for (new i = 1; i < MAX_VEHICLES; i++)
  89.     {
  90.         if ((model = GetVehicleModel(i)) != 0)
  91.         {
  92.             max_fuel = FuelList[ model-400 ] / 2;
  93.             Fuel[i] = random(floatround( max_fuel )) + max_fuel;
  94.         }
  95.     }
  96.     black = TextDrawCreate(494.000000, 379.000000, "_");
  97.     TextDrawUseBox(black, 1);
  98.     TextDrawBoxColor(black, 0x00000085);
  99.     TextDrawTextSize(black, 626.000000, 0.000000);
  100.     TextDrawAlignment(black, 0);
  101.     TextDrawBackgroundColor(black, 0x000000FF);
  102.     TextDrawFont(black, 2);
  103.     TextDrawLetterSize(black, 1.700000, 3.940000);
  104.     TextDrawColor(black, 0x000000FF);
  105.     TextDrawSetOutline(black, 1);
  106.     TextDrawSetProportional(black, 1);
  107.     TextDrawSetShadow(black, 1);
  108.  
  109.     white = TextDrawCreate(495.000000, 380.000000, "_");
  110.     TextDrawUseBox(white, 1);
  111.     TextDrawBoxColor(white, 0xAAAAAA77);
  112.     TextDrawTextSize(white, 625.500000, 0.000000);
  113.     TextDrawAlignment(white, 0);
  114.     TextDrawBackgroundColor(white, 0x000000FF);
  115.     TextDrawFont(white, 2);
  116.     TextDrawLetterSize(white, 1.350000, 3.720000);
  117.     TextDrawColor(white, 0xAAAAAA88);
  118.     TextDrawSetOutline(white, 1);
  119.     TextDrawSetProportional(white, 1);
  120.     TextDrawSetShadow(white, 1);
  121.    
  122.     foreach (Player, playerid)
  123.     {
  124.         create_playerTD(playerid);
  125.     }
  126.    
  127.     SpeedTimer = SetTimer("speed_Timer",500,1);
  128.     print("QuidemSys v2.7 initialized.");
  129.     return 1;
  130. }
  131.  
  132. stock create_playerTD(playerid)
  133. {
  134.     speedom[playerid] = TextDrawCreate(495.000000, 377.700000, "-");
  135.     TextDrawAlignment(speedom[playerid], 0);
  136.     TextDrawBackgroundColor(speedom[playerid], 0x000000FF);
  137.     TextDrawFont(speedom[playerid], TD_FONT);
  138.     TextDrawLetterSize(speedom[playerid], 0.299999, 1.000000);
  139.     TextDrawColor(speedom[playerid], 0xFFFFFFFF);
  140.     TextDrawSetOutline(speedom[playerid], 1);
  141.     TextDrawSetProportional(speedom[playerid], 1);
  142.     return 1;
  143. }
  144.  
  145. public OnFilterScriptExit()
  146. {
  147.     TextDrawHideForAll(black);
  148.     TextDrawHideForAll(white);
  149.    
  150.     TextDrawDestroy(black);
  151.     TextDrawDestroy(white);
  152.    
  153.     foreach (Player, playerid)
  154.     {
  155.         TextDrawHideForPlayer(playerid, speedom[playerid]);
  156.         TextDrawDestroy(speedom[playerid]);
  157.     }
  158.     if (SpeedTimer != 0) KillTimer(SpeedTimer);
  159.     return 1;
  160. }
  161.  
  162. public OnVehicleSpawn(vehicleid)
  163. {
  164.     new Float:max_fuel = FuelList[ GetVehicleModel(vehicleid)-400 ] / 2;
  165.     Fuel[vehicleid] = random(floatround( max_fuel )) + max_fuel;
  166.     return 1;
  167. }
  168.  
  169. public OnPlayerCommandText(playerid, cmdtext[])
  170. {
  171.     new vehicleid = GetPlayerVehicleID(playerid);
  172.  
  173.     if (!strcmp(cmdtext, "/fill", true))
  174.     {
  175.         if (vehicleid == 0)
  176.             return SendClientMessage(playerid, COLOR_RED, "Вы не в транспортном средстве!");
  177.        
  178.         if (!IsPlayerAtFuelStation(playerid))
  179.             return SendClientMessage(playerid, COLOR_RED, "Вы не на заправке!");
  180.        
  181.         if (GetPVarInt(playerid,"Refueling"))
  182.             return SendClientMessage(playerid, COLOR_RED, "Вы уже заправляете автомобиль!");
  183.        
  184.         new vehiclemodel = GetVehicleModel(vehicleid);
  185.         switch (vehiclemodel)
  186.         {
  187.             case 481,509,510:
  188.             {
  189.                 return SendClientMessage(playerid, COLOR_YELLOW, "Ошибка: это транспортное средство не использует бензин.");
  190.             }
  191.         }
  192.        
  193.         if (Fuel[vehicleid] >= FuelList[vehiclemodel-400])
  194.             return SendClientMessage(playerid, COLOR_YELLOW, ".:: Ваш бензобак уже полон.");
  195.        
  196.         SetPVarFloat(playerid,"OldFuel",Fuel[vehicleid]);
  197.         fill_TimerID[playerid] = SetTimerEx("fill_Timer", 1000, 1, "i", playerid);
  198.         SetPVarInt(playerid,"Refueling",1);
  199.         return 1;
  200.     }
  201.    
  202.     if (!strcmp(cmdtext, "/lock", true))
  203.     {
  204.         if (vehicleid == 0)
  205.             return SendClientMessage(playerid, COLOR_RED, "Вы не в транспортном средстве!");
  206.        
  207.         switch (IsLocked{vehicleid})
  208.         {
  209.             case 0:
  210.             {
  211.                 SendClientMessage(playerid, COLOR_RED, "Транспорт закрыт.");
  212.                 IsLocked{vehicleid} = 1;
  213.             }
  214.             case 1:
  215.             {
  216.                 SendClientMessage(playerid, COLOR_GREEN, "Транспорт открыт.");
  217.                 IsLocked{vehicleid} = 0;
  218.             }
  219.         }
  220.         foreach (Player, i)
  221.         {
  222.             SetVehicleParamsForPlayer(vehicleid, i, 0, IsLocked{vehicleid});
  223.         }
  224.         SetVehicleParamsForPlayer(vehicleid, playerid, 0, 0);
  225.         return PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  226.     }
  227.    
  228.     if (!strcmp(cmdtext, "/engine", true))
  229.     {
  230.         if (vehicleid == 0)
  231.             return SendClientMessage(playerid, COLOR_RED, "Вы не в транспортном средстве!");
  232.        
  233.         if (Fuel[vehicleid] <= 0.1)
  234.         {
  235.             SendClientMessage(playerid, COLOR_YELLOW, "В транспортном средстве нет топлива. Заправьте его и заведите(/engine).");
  236.         }
  237.         else
  238.         {
  239.             new engine, lights, alarm, doors, bonnet, boot, objective;
  240.             GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
  241.             SetVehicleParamsEx(vehicleid, VEHICLE_PARAMS_ON, lights, alarm, doors, bonnet, boot, objective);
  242.         }
  243.         return 1;
  244.     }
  245.  
  246.     return 0;
  247. }
  248.  
  249. forward fill_Timer(playerid);
  250. public fill_Timer(playerid)
  251. {
  252.     new vehicleid = GetPlayerVehicleID(playerid);
  253.    
  254.     Fuel[vehicleid] += FUEL_SPEED;
  255.     if (vehicleid == 0 || !IsPlayerAtFuelStation(playerid) || Fuel[vehicleid] >= FuelList[ GetVehicleModel(vehicleid)-400 ])
  256.     {
  257.         new RefueledAmount = floatround( Fuel[vehicleid] - GetPVarFloat(playerid,"OldFuel") ) * FUEL_TARIF;
  258.         GivePlayerMoney(playerid, -RefueledAmount);
  259.        
  260.         new string[MAX_STRING];
  261.         format(string, sizeof(string), "Ваш транспорт был заправлен за $%d.", RefueledAmount);
  262.         SendClientMessage(playerid, COLOR_YELLOW, string);
  263.        
  264.         if (fill_TimerID[playerid] != 0) KillTimer(fill_TimerID[playerid]);
  265.         SetPVarInt(playerid,"Refueling",0);
  266.     }
  267.     return 0;
  268. }
  269.  
  270. forward speed_Timer();
  271. public speed_Timer()
  272. {
  273.     new string[MAX_STRING], Float:health, vehicleid, vehiclemodel, locked[16], speed[16], speed_temp[5], speed_count=0;
  274.    
  275.     foreach (Player, playerid)
  276.     {
  277.         vehicleid = GetPlayerVehicleID(playerid);
  278.        
  279.         if (vehicleid == 0)
  280.         {
  281.             TextDrawHideForPlayer(playerid, black);
  282.             TextDrawHideForPlayer(playerid, white);
  283.             TextDrawHideForPlayer(playerid, speedom[playerid]);
  284.             continue;
  285.         }
  286.        
  287.         vehiclemodel = GetVehicleModel(vehicleid);
  288.        
  289.         if (FuelList[vehiclemodel-400] == 0)
  290.         {
  291.             continue;
  292.         }
  293.        
  294.         if (Fuel[vehicleid] <= 0.1)
  295.         {
  296.             new engine, lights, alarm, doors, bonnet, boot, objective;
  297.             GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
  298.             SetVehicleParamsEx(vehicleid, VEHICLE_PARAMS_OFF, lights, alarm, doors, bonnet, boot, objective);
  299.             Fuel[vehicleid] = 0.0;
  300.         }
  301.        
  302.         GetVehicleHealth(vehicleid, health);
  303.        
  304.         if (Fuel[vehicleid] > FuelList[vehiclemodel-400])
  305.         {
  306.             Fuel[vehicleid] = FuelList[vehiclemodel-400];
  307.         }
  308.        
  309.         speed_count = GetVehicleSpeed(vehicleid);
  310.         speed[0] = '\0';
  311.         if (Fuel[vehicleid] == 0.0)
  312.         {
  313.             strcat(speed,"~W~");
  314.         }
  315.         else
  316.         {
  317.             switch (speed_count)
  318.             {
  319.                 case 0:
  320.                 {
  321.                     strcat(speed,"~G~");
  322.                     Fuel[vehicleid] -= 0.0002;
  323.                 }
  324.                 case 1..60:
  325.                 {
  326.                     strcat(speed,"~G~");
  327.                     Fuel[vehicleid] -= 0.003;
  328.                 }
  329.                 case 61..90:
  330.                 {
  331.                     strcat(speed,"~Y~");
  332.                     Fuel[vehicleid] -= 0.006;
  333.                 }
  334.                 default:
  335.                 {
  336.                     strcat(speed,"~R~");
  337.                     Fuel[vehicleid] -= 0.010;
  338.                 }
  339.             }
  340.         }
  341.         valstr(speed_temp, speed_count);
  342.         strcat(speed, speed_temp);
  343.  
  344.     #if defined RUS_TD
  345.         switch (IsLocked{vehicleid})
  346.         {
  347.             case 0: locked = "~G~Открыто";
  348.             case 1: locked = "~R~Закрыто";
  349.         }
  350.         format(string,sizeof(string),
  351.             "~B~Скорость: %sкм/ч~N~~B~Бензин: ~W~%0.1f лит.~N~~B~Здоровье: ~W~%0.0f%%~N~~B~Статус: %s",
  352.             speed, Fuel[vehicleid], health/10, locked
  353.         );
  354.         string = rusText(string);
  355.     #else
  356.         switch (IsLocked{vehicleid})
  357.         {
  358.             case 0: locked = "~G~Opened";
  359.             case 1: locked = "~R~Closed";
  360.         }
  361.         format(string,sizeof(string),
  362.             "~B~Speed: %skm/h~N~~B~Fuel: ~W~%0.1f lit.~N~~B~Health: ~W~%0.0f%%~N~~B~Status: %s",
  363.             speed, Fuel[vehicleid], health/10, locked
  364.         );
  365.     #endif
  366.         TextDrawSetString(speedom[playerid], string);
  367.         TextDrawShowForPlayer(playerid, speedom[playerid]);
  368.         TextDrawShowForPlayer(playerid, black);
  369.         TextDrawShowForPlayer(playerid, white);
  370.     }
  371.     return 1;
  372. }
  373.  
  374. public OnPlayerConnect(playerid)
  375. {
  376.     create_playerTD(playerid);
  377.     return 1;
  378. }
  379.  
  380. public OnPlayerDisconnect(playerid, reason)
  381. {
  382.     TextDrawDestroy(speedom[playerid]);
  383.     return 1;
  384. }
  385.  
  386. public OnPlayerStateChange(playerid, newstate, oldstate)
  387. {
  388.     new vehicleid = GetPlayerVehicleID(playerid);
  389.    
  390.     if (FuelList[ GetVehicleModel(vehicleid)-400 ] == 0)
  391.     {
  392.         return 0;
  393.     }
  394.    
  395.     if (newstate == PLAYER_STATE_DRIVER)
  396.     {
  397.         new engine, lights, alarm, doors, bonnet, boot, objective;
  398.         GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
  399.         if (Fuel[vehicleid] <= 0.1)
  400.         {
  401.             SetVehicleParamsEx(vehicleid, VEHICLE_PARAMS_OFF, lights, alarm, doors, bonnet, boot, objective);
  402.             SendClientMessage(playerid, COLOR_YELLOW, "В транспортном средстве нет топлива. Заправьте его и заведите(/engine).");
  403.         }
  404.         else
  405.         {
  406.             SetVehicleParamsEx(vehicleid, VEHICLE_PARAMS_ON, lights, alarm, doors, bonnet, boot, objective);
  407.         }
  408.         return 1;
  409.     }
  410.     if (oldstate == PLAYER_STATE_DRIVER)
  411.     {
  412.         TextDrawHideForPlayer(playerid, black);
  413.         TextDrawHideForPlayer(playerid, white);
  414.         TextDrawHideForPlayer(playerid, speedom[playerid]);
  415.         return 1;
  416.     }
  417.     return 1;
  418. }
  419.  
  420. stock IsPlayerAtFuelStation(playerid)
  421. {
  422.     for (new fuelid = 0; fuelid < sizeof(FuelStations); fuelid++)
  423.     {
  424.         if (IsPlayerInRangeOfPoint(playerid, 10, FuelStations[fuelid][Coord_X], FuelStations[fuelid][Coord_Y], FuelStations[fuelid][Coord_Z]))
  425.         {
  426.             return 1;
  427.         }
  428.     }
  429.     return 0;
  430. }
  431.  
  432. stock GetVehicleSpeed(vehicleid)
  433. {
  434.     new Float:pos[3];
  435.     GetVehicleVelocity(vehicleid, pos[0], pos[1], pos[2]);
  436.     return floatround( floatsqroot(pos[0]*pos[0] + pos[1]*pos[1] + pos[2]*pos[2]) * 100 );
  437. }
  438.  
  439. #if defined RUS_TD
  440. stock rusText(string[]) // by Alex009
  441. {
  442.     new result[MAX_STRING];
  443.     for (new i = 0; i < sizeof(result); i++)
  444.     {
  445.         switch (string[i])
  446.         {
  447.             case 'а': result[i] = 'a';
  448.             case 'А': result[i] = 'A';
  449.             case 'б': result[i] = '—';
  450.             case 'Б': result[i] = 'Ђ';
  451.             case 'в': result[i] = 'ў';
  452.             case 'В': result[i] = '‹';
  453.             case 'г': result[i] = '™';
  454.             case 'Г': result[i] = '‚';
  455.             case 'д': result[i] = 'љ';
  456.             case 'Д': result[i] = 'ѓ';
  457.             case 'е': result[i] = 'e';
  458.             case 'Е': result[i] = 'E';
  459.             case 'ё': result[i] = 'e';
  460.             case 'Ё': result[i] = 'E';
  461.             case 'ж': result[i] = '›';
  462.             case 'Ж': result[i] = '„';
  463.             case 'з': result[i] = 'џ';
  464.             case 'З': result[i] = '€';
  465.             case 'и': result[i] = 'њ';
  466.             case 'И': result[i] = '…';
  467.             case 'й': result[i] = 'ќ';
  468.             case 'Й': result[i] = '…';
  469.             case 'к': result[i] = 'k';
  470.             case 'К': result[i] = 'K';
  471.             case 'л': result[i] = 'ћ';
  472.             case 'Л': result[i] = '‡';
  473.             case 'м': result[i] = 'Ї';
  474.             case 'М': result[i] = 'M';
  475.             case 'н': result[i] = '®';
  476.             case 'Н': result[i] = '­';
  477.             case 'о': result[i] = 'o';
  478.             case 'О': result[i] = 'O';
  479.             case 'п': result[i] = 'Ј';
  480.             case 'П': result[i] = 'Њ';
  481.             case 'р': result[i] = 'p';
  482.             case 'Р': result[i] = 'P';
  483.             case 'с': result[i] = 'c';
  484.             case 'С': result[i] = 'C';
  485.             case 'т': result[i] = '¦';
  486.             case 'Т': result[i] = 'Џ';
  487.             case 'у': result[i] = 'y';
  488.             case 'У': result[i] = 'Y';
  489.             case 'ф': result[i] = ' ';
  490.             case 'Ф': result[i] = 'Ѓ';
  491.             case 'х': result[i] = 'x';
  492.             case 'Х': result[i] = 'X';
  493.             case 'ц': result[i] = ' ';
  494.             case 'Ц': result[i] = '‰';
  495.             case 'ч': result[i] = '¤';
  496.             case 'Ч': result[i] = 'Ќ';
  497.             case 'ш': result[i] = 'Ґ';
  498.             case 'Ш': result[i] = 'Ћ';
  499.             case 'щ': result[i] = 'Ў';
  500.             case 'Щ': result[i] = 'Љ';
  501.             case 'ь': result[i] = '©';
  502.             case 'Ь': result[i] = '’';
  503.             case 'ъ': result[i] = 'ђ';
  504.             case 'Ъ': result[i] = '§';
  505.             case 'ы': result[i] = 'Ё';
  506.             case 'Ы': result[i] = '‘';
  507.             case 'э': result[i] = 'Є';
  508.             case 'Э': result[i] = '“';
  509.             case 'ю': result[i] = '«';
  510.             case 'Ю': result[i] = '”';
  511.             case 'я': result[i] = '¬';
  512.             case 'Я': result[i] = '•';
  513.             default: result[i] = string[i];
  514.         }
  515.     }
  516.     return result;
  517. }
  518. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement