Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- SAMPFORUM » Szkript Liga vol. 3 » Régió I
- 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.
- 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.
- A ciklusokat lemértem, maximum 1ms-es időt vesznek igénybe.
- 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.
- Próbáltam a legjobb tudásom szerint megírni, köszönöm a lehetőséget. :)
- /mycommand paranccsal az egyik vonathoz teleportálhatsz.
- 2016. 10. 01. 13:30 - Pedró
- Jóslat: 3.5M Nem szavazat lesz, illetve 500K érvénytelen, illetve 300K Igen szavazat.
- */
- #define FILTERSCRIPT
- #include <a_samp>
- #include <streamer>
- #if !defined IsValidVehicle
- native IsValidVehicle(vehicleid);
- #endif
- forward Labelek();
- forward Allapotjelzo(playerid);
- 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 }
- enum e_Vonatok { vonat_modelid, Float:vonat_posx, Float:vonat_posy, Float:vonat_posz, Float:vonat_posa, vonat_vehicleid }
- new Szakaszok[][e_Szakaszok] = {
- // [ Szelvények területei ] [ Area ID ] [ Szelvények közötti határpontok ]
- { 1205.5, 2614.0, 2115.5, 2734.0, -2, 1266.872558, 2632.250000, 12.1256190 },
- { 2115.5, 2325.0, 2609.5, 2720.0, -2, 2121.173828, 2694.125000, 12.2504081 },
- { 2396.5, 1937.0, 2889.5, 2325.0, -2, 2553.451904, 2311.148925, 4.6881192 },
- { 2753.5, 1510.0, 2906.5, 1937.0, -2, 2781.000000, 1921.303588, 6.2574723 },
- { 2753.5, 913.0, 2885.5, 1510.0, -2, 2864.750000, 1461.005126, 12.125619 },
- { 2735.5, 197.0, 2871.5, 913.0, -2, 2764.750000, 907.654541, 12.2506195 },
- { 2727.5, -381.0, 2886.5, 197.0, -2, 2797.405273, 194.247161, 14.4350466 },
- { 2510.5, -396.0, 2727.5, -245.0, -2, 2721.997070, -283.049560, 18.0324787 },
- { 1942.5, -420.0, 2510.5, -245.0, -2, 2509.364257, -279.637695, 18.2335038 },
- { 1942.5, -668.0, 2207.5, -420.0, -2, 2002.869262, -434.857452, 70.9677209 },
- { 2093.5, -1123.0, 2405.5, -668.0, -2, 2165.864257, -680.980468, 51.60496510 },
- { 2219.5, -1558.0, 2359.5, -1123.0, -2, 2284.875000, -1165.943847, 27.78687011 },
- { 2169.5, -1964.0, 2256.5, -1558.0, -2, 2242.609619, -1563.812988, 20.30160712 },
- { 1686.5, -1973.0, 2169.5, -1887.0, -2, 2142.475585, -1953.750000, 15.12561913 },
- { 852.5, -1973.0, 1686.5, -878.0, -2, 1630.518798, -1953.666992, 14.87561914 },
- { 109.5, -1758.0, 852.5, -662.0, -2, 813.211547, -1365.021484, -0.21868815 },
- { -623.5, -1270.0, 108.5, -1000.0, -2, 50.017269, -1018.053161, 22.68371316 },
- { -975.5, -1541.0, -623.5, -1000.0, -2, -667.610473, -1123.282470, 50.38497117 },
- { -1319.5, -1574.0, -975.5, -1444.0, -2, -1009.199462, -1501.271484, 80.62905818 },
- { -2111.5, -1574.0, -1319.5, -1129.0, -2, -1329.708740, -1510.195434, 25.00061919 },
- { -2092.5, -1129.0, -1903.5, -589.0, -2, -1951.229614, -1116.607421, 17.92725520 },
- { -2075.5, -589.0, -1883.5, 221.0, -2, -1979.939819, -528.688476, 27.00061921 },
- { -2006.5, 221.0, -1633.5, 545.0, -2, -1919.774536, 275.882202, 20.58722622 },
- { -1633.5, 459.0, -747.5, 983.0, -2, -1615.132080, 501.720336, 27.79645323 },
- { -990.5, 983.0, -310.5, 1290.0, -2, -921.840942, 1005.392211, 35.87561724 },
- { -310.5, 1182.0, 782.5, 1322.0, -2, -286.222595, 1259.097412, 30.45894425 },
- { 571.5, 1322.0, 833.5, 2278.0, -2, 681.535583, 1336.197143, 13.12561926 },
- { 675.5, 2278.0, 835.5, 2600.0, -2, 726.049499, 2337.985351, 20.50285727 },
- { 669.5, 2600.0, 1205.5, 2797.0, -2, 817.386718, 2640.970947, 22.12561928 }
- };
- new Vonatok[][e_Vonatok] = {
- {538, 1462.0745, 2630.8787, 10.8203, 200.0}, //LV
- {538, -1942.7950, 168.4164, 27.0006, 200.0}, //SF
- {538, 1700.7551, -1953.6531, 14.8756, 200.0} //LS
- };
- new PlayerText:td2;
- new Timer1[MAX_PLAYERS] = {-1, ...};
- new LabelekTimer;
- public OnFilterScriptInit() {
- for(new x; x < MAX_PLAYERS; x++) {
- td2 = CreatePlayerTextDraw(x, 0, 0, "HALADJON");
- }
- if(!GetSVarInt("Vonatok")) {
- for(new x; x < sizeof(Vonatok); x++) {
- switch(Vonatok[x][vonat_modelid]) {
- 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);
- default: printf("Hiba, érvénytelen ModelID lett megadva a Vonatok tömbben. (%i. sor)", x+1);
- }
- }
- SetSVarInt("Vonatok", 1);
- }
- if(!GetSVarInt("Szakaszok")) {
- for(new x; x < sizeof(Szakaszok); x++) {
- Szakaszok[x][szakasz_areaid] = CreateDynamicRectangle(Szakaszok[x][szakasz_minx], Szakaszok[x][szakasz_miny], Szakaszok[x][szakasz_maxx], Szakaszok[x][szakasz_maxy], 0, 0, -1);
- }
- SetSVarInt("Szakaszok", 1);
- }
- if(!GetSVarInt("Labelek")) {
- for(new x; x < sizeof(Szakaszok); x++) {
- 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);
- }
- LabelekTimer = SetTimer("Labelek", 2000, true);
- SetSVarInt("Labelek", 1);
- }
- return 1;
- }
- public OnFilterScriptExit() {
- if(GetSVarInt("Vonatok")) {
- for(new x; x < sizeof(Vonatok); x++) DestroyVehicle(Vonatok[x][vonat_vehicleid]);
- }
- for(new x; x < MAX_PLAYERS; x++) {
- PlayerTextDrawDestroy(x, td2);
- if(Timer1[x] != -1) {
- KillTimer(Timer1[x]);
- Timer1[x] = -1;
- }
- }
- if(GetSVarInt("Szakaszok")) {
- for(new x; x < sizeof(Szakaszok); x++) {
- DestroyDynamicArea(Szakaszok[x][szakasz_areaid]);
- Szakaszok[x][szakasz_areaid] = -2;
- }
- }
- if(GetSVarInt("Labelek")) {
- for(new x; x < sizeof(Szakaszok); x++) {
- DestroyDynamic3DTextLabel(Szakaszok[x][szakasz_labelid]);
- }
- KillTimer(LabelekTimer);
- LabelekTimer = -1;
- }
- DeleteSVar("Szakaszok");
- DeleteSVar("Labelek");
- DeleteSVar("Vonatok");
- return 1;
- }
- public OnPlayerConnect(playerid) {
- td2 = CreatePlayerTextDraw(playerid, 0, 0, "HALADJON");
- return 1;
- }
- public OnPlayerDisconnect(playerid, reason) {
- PlayerTextDrawDestroy(playerid, td2);
- if(Timer1[playerid] != -1) {
- KillTimer(Timer1[playerid]);
- Timer1[playerid] = -1;
- }
- return 1;
- }
- public OnPlayerCommandText(playerid, cmdtext[]) {
- if (strcmp("/mycommand", cmdtext, true, 10) == 0) {
- SetPlayerPos(playerid, 1462.0745,2630.8787,13.8203);
- return 1;
- }
- return 0;
- }
- public OnPlayerStateChange(playerid, newstate, oldstate) {
- if(newstate == PLAYER_STATE_DRIVER && oldstate != PLAYER_STATE_DRIVER) {
- for(new x; x < sizeof(Vonatok); x++) {
- if(GetPlayerVehicleID(playerid) == Vonatok[x][vonat_vehicleid]) {
- Timer1[playerid] = SetTimerEx("Allapotjelzo", 1000, true, "i", playerid);
- }
- }
- }
- if(newstate != PLAYER_STATE_DRIVER && oldstate == PLAYER_STATE_DRIVER) {
- if(Timer1[playerid] != -1) {
- KillTimer(Timer1[playerid]);
- Timer1[playerid] = -1;
- PlayerTextDrawHide(playerid, td2);
- }
- }
- return 1;
- }
- public Labelek() {
- new allapot, allapot2;
- for(new x; x < sizeof(Szakaszok); x++) {
- allapot = SzakaszAllapot(x);
- allapot2 = SzakaszAllapot(KovetkezoSzakasz(x));
- if(allapot) UpdateDynamic3DTextLabelText(Szakaszok[x][szakasz_labelid], 0x00FF00FF, "VASÚTI BERENDEZÉS:\n{FF0000}ÁLLJ!");
- else if(allapot2) UpdateDynamic3DTextLabelText(Szakaszok[x][szakasz_labelid], 0x00FF00FF, "VASÚTI BERENDEZÉS:\n{FFBB00}LASSÍTSON!");
- else if(allapot == 0) UpdateDynamic3DTextLabelText(Szakaszok[x][szakasz_labelid], 0x00FF00FF, "VASÚTI BERENDEZÉS:\n{00FF00}HALADJON!");
- }
- return 1;
- }
- public Allapotjelzo(playerid) {
- new szakaszid, string[120];
- szakaszid = JelenlegiSzakasz(playerid);
- new allapot1 = SzakaszAllapot(szakaszid);
- new allapot2 = SzakaszAllapot(KovetkezoSzakasz(szakaszid));
- if(allapot1 > 1) {
- format(string, 120, "~d~ SZELVENY: %i ~r~ALLJ! ~w~ ALLAPOT: %i KOVETKEZO ALLAPOT: %i", szakaszid, allapot1, allapot2);
- PlayerTextDrawSetString(playerid, td2, string);
- }
- else if(allapot2) {
- format(string, 120, "~>~ SZELVENY: %i ~p~LASSITSON! ~w~ ALLAPOT: %i KOVETKEZO ALLAPOT: %i", szakaszid, allapot1, allapot2);
- PlayerTextDrawSetString(playerid, td2, string);
- }else{
- format(string, 120, "~u~ SZELVENY: %i ~g~HALADJON! ~w~ ALLAPOT: %i KOVETKEZO ALLAPOT: %i", szakaszid, allapot1, allapot2);
- PlayerTextDrawSetString(playerid, td2, string);
- }
- PlayerTextDrawShow(playerid, td2);
- return 1;
- }
- stock SzakaszAllapot(szakaszid) {
- if(szakaszid < 0 || szakaszid >= sizeof(Szakaszok)) return -1;
- new Float: vpos[3], jarmuvek, vehicleid;
- for(new x; x < sizeof(Vonatok); x++) {
- vehicleid = Vonatok[x][vonat_vehicleid];
- if(!IsValidVehicle(vehicleid)) continue;
- GetVehiclePos(vehicleid, vpos[0], vpos[1], vpos[2]);
- if(IsPointInDynamicArea(Szakaszok[szakaszid][szakasz_areaid], vpos[0], vpos[1], vpos[2]))
- jarmuvek++;
- }
- if(jarmuvek) return jarmuvek;
- return 0;
- }
- stock JelenlegiSzakasz(playerid) {
- if(!IsPlayerInAnyVehicle(playerid) || !IsPlayerInAnyDynamicArea(playerid, 1)) return -1;
- new Float: vpos[3], vehicleid;
- vehicleid = GetPlayerVehicleID(playerid);
- GetVehiclePos(vehicleid, vpos[0], vpos[1], vpos[2]);
- for(new x; x < sizeof(Szakaszok); x++)
- if(IsPlayerInDynamicArea(playerid, Szakaszok[x][szakasz_areaid], 1)) return x;
- return -2;
- }
- stock KovetkezoSzakasz(szakaszid) {
- new kovetkezo = szakaszid+1;
- if(kovetkezo == sizeof(Szakaszok)) kovetkezo = 0;
- return kovetkezo;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement