Advertisement
PedroHUN52

Szkript Liga vol. 3 » Régió I >Pedró<

Oct 1st, 2016
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 9.88 KB | None | 0 0
  1. /*
  2. SAMPFORUM » Szkript Liga vol. 3 » Régió I
  3.  
  4. Nem 100% precízen mentettem le a pozíciókat (Időtakarékosság miatt), és emiatt a 3D TextLabelek a szelvény-határtól picit árébb találhatóak, emiatt nincs a helyén, így zavaró lehet, hogy "Állj!"-t ír, miközben még el sem haladtunk ott.
  5. Emellett a szelvények területei is néhol 1-2 koordinátányi hézagot magukba foglalnak, de a scriptben ez nem okoz gondot, azon az 1-2 másodpercen kívül, míg áthalad a vonat ott.
  6. A ciklusokat lemértem, maximum 1ms-es időt vesznek igénybe.
  7. Csak csatlakozz fel, és felül van 1 TD ami írja az infókat, azon kívül, hogy a labelek is írják, hogy a következendő szelvény folyamán mit kell tennünk.
  8. Próbáltam a legjobb tudásom szerint megírni, köszönöm a lehetőséget. :)
  9.  
  10. /mycommand paranccsal az egyik vonathoz teleportálhatsz.
  11.  
  12. 2016. 10. 01. 13:30 - Pedró
  13.  
  14. Jóslat: 3.5M Nem szavazat lesz, illetve 500K érvénytelen, illetve 300K Igen szavazat.
  15. */
  16.  
  17. #define FILTERSCRIPT
  18.  
  19. #include <a_samp>
  20. #include <streamer>
  21.  
  22. #if !defined IsValidVehicle
  23. native IsValidVehicle(vehicleid);
  24. #endif
  25.  
  26. forward Labelek();
  27. forward Allapotjelzo(playerid);
  28.  
  29. enum e_Szakaszok { Float:szakasz_minx, Float:szakasz_miny, Float:szakasz_maxx, Float:szakasz_maxy, szakasz_areaid, Float:szakasz_hatarx, Float:szakasz_hatary, Float:szakasz_hatarz, Text3D:szakasz_labelid }
  30. enum e_Vonatok { vonat_modelid, Float:vonat_posx, Float:vonat_posy, Float:vonat_posz, Float:vonat_posa, vonat_vehicleid }
  31.  
  32. new Szakaszok[][e_Szakaszok] = {
  33.     //  [ Szelvények területei ]        [ Area ID ]     [ Szelvények közötti határpontok ]
  34.     { 1205.5, 2614.0, 2115.5, 2734.0,       -2,     1266.872558, 2632.250000, 12.1256190 },
  35.     { 2115.5, 2325.0, 2609.5, 2720.0,       -2,     2121.173828, 2694.125000, 12.2504081 },
  36.     { 2396.5, 1937.0, 2889.5, 2325.0,       -2,     2553.451904, 2311.148925, 4.6881192 },
  37.     { 2753.5, 1510.0, 2906.5, 1937.0,       -2,     2781.000000, 1921.303588, 6.2574723 },
  38.     { 2753.5, 913.0, 2885.5, 1510.0,        -2,     2864.750000, 1461.005126, 12.125619 },
  39.     { 2735.5, 197.0, 2871.5, 913.0,         -2,     2764.750000, 907.654541, 12.2506195 },
  40.     { 2727.5, -381.0, 2886.5, 197.0,        -2,     2797.405273, 194.247161, 14.4350466 },
  41.     { 2510.5, -396.0, 2727.5, -245.0,       -2,     2721.997070, -283.049560, 18.0324787 },
  42.     { 1942.5, -420.0, 2510.5, -245.0,       -2,     2509.364257, -279.637695, 18.2335038 },
  43.     { 1942.5, -668.0, 2207.5, -420.0,       -2,     2002.869262, -434.857452, 70.9677209 },
  44.     { 2093.5, -1123.0, 2405.5, -668.0,      -2,     2165.864257, -680.980468, 51.60496510 },
  45.     { 2219.5, -1558.0, 2359.5, -1123.0,     -2,     2284.875000, -1165.943847, 27.78687011 },
  46.     { 2169.5, -1964.0, 2256.5, -1558.0,     -2,     2242.609619, -1563.812988, 20.30160712 },
  47.     { 1686.5, -1973.0, 2169.5, -1887.0,     -2,     2142.475585, -1953.750000, 15.12561913 },
  48.     { 852.5, -1973.0, 1686.5, -878.0,       -2,     1630.518798, -1953.666992, 14.87561914 },
  49.     { 109.5, -1758.0, 852.5, -662.0,        -2,     813.211547, -1365.021484, -0.21868815 },
  50.     { -623.5, -1270.0, 108.5, -1000.0,      -2,     50.017269, -1018.053161, 22.68371316 },
  51.     { -975.5, -1541.0, -623.5, -1000.0,     -2,     -667.610473, -1123.282470, 50.38497117 },
  52.     { -1319.5, -1574.0, -975.5, -1444.0,    -2,     -1009.199462, -1501.271484, 80.62905818 },
  53.     { -2111.5, -1574.0, -1319.5, -1129.0,   -2,     -1329.708740, -1510.195434, 25.00061919 },
  54.     { -2092.5, -1129.0, -1903.5, -589.0,    -2,     -1951.229614, -1116.607421, 17.92725520 },
  55.     { -2075.5, -589.0, -1883.5, 221.0,      -2,     -1979.939819, -528.688476, 27.00061921 },
  56.     { -2006.5, 221.0, -1633.5, 545.0,       -2,     -1919.774536, 275.882202, 20.58722622 },
  57.     { -1633.5, 459.0, -747.5, 983.0,        -2,     -1615.132080, 501.720336, 27.79645323 },
  58.     { -990.5, 983.0, -310.5, 1290.0,        -2,     -921.840942, 1005.392211, 35.87561724 },
  59.     { -310.5, 1182.0, 782.5, 1322.0,        -2,     -286.222595, 1259.097412, 30.45894425 },
  60.     { 571.5, 1322.0, 833.5, 2278.0,         -2,     681.535583, 1336.197143, 13.12561926 },
  61.     { 675.5, 2278.0, 835.5, 2600.0,         -2,     726.049499, 2337.985351, 20.50285727 },
  62.     { 669.5, 2600.0, 1205.5, 2797.0,        -2,     817.386718, 2640.970947, 22.12561928 }
  63. };
  64.  
  65. new Vonatok[][e_Vonatok] = {
  66.     {538, 1462.0745,  2630.8787,  10.8203, 200.0},  //LV
  67.     {538, -1942.7950, 168.4164,   27.0006, 200.0}//SF
  68.     {538, 1700.7551,  -1953.6531, 14.8756, 200.0}   //LS
  69. };
  70.  
  71. new PlayerText:td2;
  72. new Timer1[MAX_PLAYERS] = {-1, ...};
  73. new LabelekTimer;
  74.  
  75. public OnFilterScriptInit() {
  76.     for(new x; x < MAX_PLAYERS; x++) {
  77.         td2 = CreatePlayerTextDraw(x, 0, 0, "HALADJON");
  78.     }
  79.     if(!GetSVarInt("Vonatok")) {
  80.         for(new x; x < sizeof(Vonatok); x++) {
  81.             switch(Vonatok[x][vonat_modelid]) {
  82.                 case 537, 538, 449: Vonatok[x][vonat_vehicleid] = AddStaticVehicle(Vonatok[x][vonat_modelid], Vonatok[x][vonat_posx], Vonatok[x][vonat_posy], Vonatok[x][vonat_posz], Vonatok[x][vonat_posa], -1, -1);
  83.                 default: printf("Hiba, érvénytelen ModelID lett megadva a Vonatok tömbben. (%i. sor)", x+1);
  84.             }
  85.         }
  86.         SetSVarInt("Vonatok", 1);
  87.     }
  88.    
  89.     if(!GetSVarInt("Szakaszok")) {
  90.         for(new x; x < sizeof(Szakaszok); x++) {
  91.             Szakaszok[x][szakasz_areaid] = CreateDynamicRectangle(Szakaszok[x][szakasz_minx], Szakaszok[x][szakasz_miny], Szakaszok[x][szakasz_maxx], Szakaszok[x][szakasz_maxy], 0, 0, -1);
  92.         }
  93.  
  94.         SetSVarInt("Szakaszok", 1);
  95.     }
  96.  
  97.     if(!GetSVarInt("Labelek")) {
  98.         for(new x; x < sizeof(Szakaszok); x++) {
  99.             Szakaszok[x][szakasz_labelid] = CreateDynamic3DTextLabel("VASÚTI BERENDEZÉS:\n{FF0000}!", 0x00FF00FF, Szakaszok[x][szakasz_hatarx], Szakaszok[x][szakasz_hatary], Szakaszok[x][szakasz_hatarz], 100.0);
  100.         }
  101.        
  102.         LabelekTimer = SetTimer("Labelek", 2000, true);
  103.  
  104.         SetSVarInt("Labelek", 1);
  105.     }
  106.     return 1;
  107. }
  108.  
  109. public OnFilterScriptExit() {
  110.     if(GetSVarInt("Vonatok")) {
  111.         for(new x; x < sizeof(Vonatok); x++) DestroyVehicle(Vonatok[x][vonat_vehicleid]);
  112.     }
  113.  
  114.     for(new x; x < MAX_PLAYERS; x++) {
  115.         PlayerTextDrawDestroy(x, td2);
  116.  
  117.         if(Timer1[x] != -1) {
  118.             KillTimer(Timer1[x]);
  119.             Timer1[x] = -1;
  120.         }
  121.     }
  122.  
  123.     if(GetSVarInt("Szakaszok")) {
  124.         for(new x; x < sizeof(Szakaszok); x++) {
  125.             DestroyDynamicArea(Szakaszok[x][szakasz_areaid]);
  126.             Szakaszok[x][szakasz_areaid] = -2;
  127.         }
  128.     }
  129.    
  130.     if(GetSVarInt("Labelek")) {
  131.         for(new x; x < sizeof(Szakaszok); x++) {
  132.             DestroyDynamic3DTextLabel(Szakaszok[x][szakasz_labelid]);
  133.         }
  134.  
  135.         KillTimer(LabelekTimer);
  136.         LabelekTimer = -1;
  137.     }
  138.  
  139.     DeleteSVar("Szakaszok");
  140.     DeleteSVar("Labelek");
  141.     DeleteSVar("Vonatok");
  142.     return 1;
  143. }
  144.  
  145.  
  146. public OnPlayerConnect(playerid) {
  147.     td2 = CreatePlayerTextDraw(playerid, 0, 0, "HALADJON");
  148.     return 1;
  149. }
  150.  
  151. public OnPlayerDisconnect(playerid, reason) {
  152.     PlayerTextDrawDestroy(playerid, td2);
  153.  
  154.     if(Timer1[playerid] != -1) {
  155.         KillTimer(Timer1[playerid]);
  156.         Timer1[playerid] = -1;
  157.     }
  158.     return 1;
  159. }
  160.  
  161. public OnPlayerCommandText(playerid, cmdtext[]) {
  162.     if (strcmp("/mycommand", cmdtext, true, 10) == 0) {
  163.         SetPlayerPos(playerid, 1462.0745,2630.8787,13.8203);
  164.         return 1;
  165.     }
  166.     return 0;
  167. }
  168.  
  169. public OnPlayerStateChange(playerid, newstate, oldstate) {
  170.     if(newstate == PLAYER_STATE_DRIVER && oldstate != PLAYER_STATE_DRIVER) {
  171.         for(new x; x < sizeof(Vonatok); x++) {
  172.             if(GetPlayerVehicleID(playerid) == Vonatok[x][vonat_vehicleid]) {
  173.                 Timer1[playerid] = SetTimerEx("Allapotjelzo", 1000, true, "i", playerid);
  174.             }
  175.         }
  176.     }
  177.  
  178.     if(newstate != PLAYER_STATE_DRIVER && oldstate == PLAYER_STATE_DRIVER) {
  179.         if(Timer1[playerid] != -1) {
  180.             KillTimer(Timer1[playerid]);
  181.             Timer1[playerid] = -1;
  182.             PlayerTextDrawHide(playerid, td2);
  183.         }
  184.     }
  185.     return 1;
  186. }
  187.  
  188. public Labelek() {
  189.     new allapot, allapot2;
  190.     for(new x; x < sizeof(Szakaszok); x++) {
  191.         allapot = SzakaszAllapot(x);
  192.         allapot2 = SzakaszAllapot(KovetkezoSzakasz(x));
  193.  
  194.         if(allapot) UpdateDynamic3DTextLabelText(Szakaszok[x][szakasz_labelid], 0x00FF00FF, "VASÚTI BERENDEZÉS:\n{FF0000}ÁLLJ!");
  195.         else if(allapot2) UpdateDynamic3DTextLabelText(Szakaszok[x][szakasz_labelid], 0x00FF00FF, "VASÚTI BERENDEZÉS:\n{FFBB00}LASSÍTSON!");
  196.         else if(allapot == 0) UpdateDynamic3DTextLabelText(Szakaszok[x][szakasz_labelid], 0x00FF00FF, "VASÚTI BERENDEZÉS:\n{00FF00}HALADJON!");
  197.     }
  198.     return 1;
  199. }
  200.  
  201. public Allapotjelzo(playerid) {
  202.     new szakaszid, string[120];
  203.     szakaszid = JelenlegiSzakasz(playerid);
  204.  
  205.     new allapot1 = SzakaszAllapot(szakaszid);
  206.     new allapot2 = SzakaszAllapot(KovetkezoSzakasz(szakaszid));
  207.  
  208.     if(allapot1 > 1) {
  209.         format(string, 120, "~d~ SZELVENY: %i  ~r~ALLJ! ~w~ ALLAPOT: %i KOVETKEZO ALLAPOT: %i", szakaszid, allapot1, allapot2);
  210.         PlayerTextDrawSetString(playerid, td2, string);
  211.     }
  212.     else if(allapot2) {
  213.         format(string, 120, "~>~ SZELVENY: %i  ~p~LASSITSON! ~w~ ALLAPOT: %i KOVETKEZO ALLAPOT: %i", szakaszid, allapot1, allapot2);
  214.         PlayerTextDrawSetString(playerid, td2, string);
  215.     }else{
  216.         format(string, 120, "~u~ SZELVENY: %i ~g~HALADJON! ~w~ ALLAPOT: %i KOVETKEZO ALLAPOT: %i", szakaszid, allapot1, allapot2);
  217.         PlayerTextDrawSetString(playerid, td2, string);
  218.     }
  219.  
  220.     PlayerTextDrawShow(playerid, td2);
  221.     return 1;
  222. }
  223.  
  224. stock SzakaszAllapot(szakaszid) {
  225.     if(szakaszid < 0 || szakaszid >= sizeof(Szakaszok)) return -1;
  226.     new Float: vpos[3], jarmuvek, vehicleid;
  227.     for(new x; x < sizeof(Vonatok); x++) {
  228.         vehicleid = Vonatok[x][vonat_vehicleid];
  229.         if(!IsValidVehicle(vehicleid)) continue;
  230.         GetVehiclePos(vehicleid, vpos[0], vpos[1], vpos[2]);
  231.         if(IsPointInDynamicArea(Szakaszok[szakaszid][szakasz_areaid], vpos[0], vpos[1], vpos[2]))
  232.             jarmuvek++;
  233.     }
  234.     if(jarmuvek) return jarmuvek;
  235.     return 0;
  236. }
  237.  
  238. stock JelenlegiSzakasz(playerid) {
  239.     if(!IsPlayerInAnyVehicle(playerid) || !IsPlayerInAnyDynamicArea(playerid, 1)) return -1;
  240.  
  241.     new Float: vpos[3], vehicleid;
  242.     vehicleid = GetPlayerVehicleID(playerid);
  243.  
  244.     GetVehiclePos(vehicleid, vpos[0], vpos[1], vpos[2]);
  245.     for(new x; x < sizeof(Szakaszok); x++)
  246.         if(IsPlayerInDynamicArea(playerid, Szakaszok[x][szakasz_areaid], 1)) return x;
  247.     return -2;
  248. }
  249.  
  250. stock KovetkezoSzakasz(szakaszid) {
  251.     new kovetkezo = szakaszid+1;
  252.     if(kovetkezo == sizeof(Szakaszok)) kovetkezo = 0;
  253.     return kovetkezo;
  254. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement