Mit car in Checkpoint's

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • enum e_Muell
    {
    Float:M_fx,
    Float:M_fy,
    Float:M_fz,
    Float:M_fRad
    }


    enum e_PlayerMuellInfo
    {
    bool:pmi_bAktiv,
    pmi_Checkpoint
    }


    new Muellmann[MAX_PLAYERS][e_PlayerMuellInfo];


    new Muellfuhr_Stationen[][e_Muell] =
    {
    {2091.2129,-2106.8862,13.3175,5.0},
    // 1
    // 2
    {1927.7747,-2163.7195,13.3828,5.0}
    };



    Also man Fährt in den 1 Checkpoint und der soll nur mit dem Fahrzeug Boxville gehen
    Dann soll man in ein Gabestabler steigen und dann soll ein Random Checkpoint gesetzt werden // 1 und den soll man nur mit dem Forklift machen dürfen und dann soll hinter dem Boxville ein Cp Gesetzt werden // 2


    https://m.youtube.com/watch?v=PuluZ_MyafQ


    //
    Edit Code
    Edit Erklärung verbessert
    Edit Link eingefügt

  • Auf Anfrage in PN:
    Also, ich werde dir nicht das ganze System da hinschreiben, du sollst ja dabei auch was lernen.


    Hast du denn bereits einen Code, mit dem der erste Checkpoint erstellt wird? Ohne das kannst du ja gar nicht mit dem Rest anfangen.
    Wenn du das noch nicht hast, dann mache das mal, einen Befehl (oder eben dort wo du den Checkpoint für den Spieler anzeigen willst), der den Checkpoint erstellt.


    Danach musst du mit OnPlayerEnterCheckpoint und einer Spielervariable abfragen, welchen Checkpoint der Spieler gerade sieht.


    Schau mal wie weit du kommst, und wenn du hängst poste den Code an dem du nicht weiter weißt.

  • ja habe ich wenn er in das Car einsteigt dann erstelle ich so den ersten Checkpoint


    Muellmann[playerid][pmi_Checkpoint]=0;
    Muellmann[playerid][pmi_bAktiv]=true;
    SetPlayerCheckpoint(playerid,Muellfuhr_Stationen[0][M_fx],Muellfuhr_Stationen[0][M_fy],Muellfuhr_Stationen[0][M_fz],Muellfuhr_Stationen[0][M_fRad]);
    SendClientMessage(playerid,GELB,"Du hast den Dienst als Müllman begonnen!");
    SendClientMessage(playerid,GELB,"Fahre nun die Checkpoint's ab!");

  • Oke danke
    Und wie erstelle ich hinder dem Car ein cp ?


    kann ich hier auch 3 random cp's einbauen ?
    new Muellfuhr_Stationen[][e_Muell] =
    {
    {2091.2129,-2106.8862,13.3175,5.0},
    hier dann z.b 3 mal random cp
    {1927.7747,-2163.7195,13.3828,5.0}
    };

  • stock GetPosHinterFahrzeug(vehicleid, Float:dist, &Float:x, &Float:y, &Float:z) //©Jeffry
    {
    if(GetVehicleModel(vehicleid) != 0)
    {
    new Float:a;
    GetVehicleZAngle(vehicleid, a);
    GetVehiclePos(vehicleid, x, y, z);
    x -= (dist * floatsin(-a, degrees));
    y -= (dist * floatcos(-a, degrees));
    return true;
    }
    return false;
    }



    Zwecks den Random Checkpoints:
    Kannst du schon machen, das wird dann aber etws komplizierter bei allen Abfragen. Ich würde dir raten, mach es erst mal ohne random, und wenn das geht kannst du es immernoch anpassen.

  • ich brauche ja die Random Checkpoint's
    also er soll in den 1 Fahren dann soll ein Random CP kommen dann hinter dem Car und dann 10x
    und dann halt die Strecke kann mann da hier drinne dann machen ?


    new Muellfuhr_Stationen[][e_Muell] =
    {
    {2091.2129,-2106.8862,13.3175,5.0},
    // Randomcp
    // Hinter Car CP
    // Randomcp
    // Hinter Car CP
    // Randomcp
    // Hinter Car CP
    // Randomcp
    // Hinter Car CP
    // Randomcp
    // Hinter Car CP
    // Randomcp
    // Hinter Car CP
    // Randomcp
    // Hinter Car CP
    // Randomcp
    // Hinter Car CP
    // Randomcp
    // Hinter Car CP
    // Randomcp
    // Hinter Car CP
    {1927.7747,-2163.7195,13.3828,5.0}
    };

  • Die Position hinter dem Fahrzeug musst du ja nicht in das Array packen, die kannst du ja berechnen (bzw. musst du sogar) wenn der Spieler in den Checkpoint fährt.
    Sprich du kannst dann einfach in dein Array alle Checkpoints machen, und über random eben den nächsten Anzeigen lassen, irgendeinen.

  • also so ?
    und die abfrage kann dann so bleiben ? dann wird der Checkpoint bei der abfrage auch genommen ?
    if(Muellmann[playerid][pmi_bAktiv])
    {
    Muellmann[playerid][pmi_Checkpoint]++;
    DisablePlayerCheckpoint(playerid);
    new playercp = Muellmann[playerid][pmi_Checkpoint];
    if(playercp == sizeof(Muellfuhr_Stationen))
    {
    new veh = GetPlayerVehicleID(playerid);
    PlayerPlaySound(playerid,1056,0.0,0.0,0.0);
    SendClientMessage(playerid,EGRÜN,"Du hast deine Arbeit Erledigt!");
    Muellmann[playerid][pmi_bAktiv]=false;
    SetVehicleToRespawn(veh);
    tank[veh] = 100;
    }
    else
    {
    new neuerCP = random(sizeof(Muellfuhr_Stationen));
    SetPlayerCheckpoint(playerid,Muellfuhr_Stationen[neuerCP][M_fx],Muellfuhr_Stationen[neuerCP][M_fy],Muellfuhr_Stationen[neuerCP][M_fz],Muellfuhr_Stationen[neuerCP][M_fRad]);
    }
    return 1;
    }

  • wiso geht das nicht ?


    for(new i = 0; i < sizeof(postcar); i++)
    {
    for(new f = 0; f < sizeof(forklift); f++)
    {
    switch(Post[playerid][post_Checkpoint])
    {
    case 0:
    {
    if(IsPlayerInVehicle(playerid, i))
    {
    Post[playerid][post_Checkpoint]++;
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,RandomSpawn[rand][0], RandomSpawn[rand][1],RandomSpawn[rand][2],5.0);
    return 1;
    }
    else
    {
    }
    }

  • wiso wird da immer +1 gemacht bis 10 ?
    oder wie kann ich abfragen ob ich den Random CP betrete ?
    Jeffry:
    if(Post[playerid][post_bAktiv])
    {
    new rand = random(sizeof(RandomSpawn));
    for(new i = 0; i < sizeof(postcar); i++)
    {
    for(new f = 0; f < sizeof(forklift); f++)
    {
    switch(Post[playerid][post_Checkpoint])
    {
    case 0:
    {
    if(IsPlayerInVehicle(playerid,postcar[i]))
    {
    new Float:x,Float:y,Float:z;
    new veh = GetPlayerVehicleID(playerid);
    Post[playerid][post_Checkpoint]++;
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,RandomSpawn[rand][0], RandomSpawn[rand][1],RandomSpawn[rand][2],5.0);
    GetPosHinterFahrzeug(veh,7,Float:x,Float:y,Float:z);
    sInfo[playerid][postx] = x;
    sInfo[playerid][posty] = y;
    sInfo[playerid][postz] = z;
    return 1;
    }
    else
    {
    }
    }
    default:// hier frage ich mit ab ob er den Random CP betritt
    {
    if(IsPlayerInVehicle(playerid,forklift[f]))
    {
    sInfo[playerid][post] += ;
    printf("%i",sInfo[playerid][post]);
    if(sInfo[playerid][post] == 10)
    {
    SendClientMessage(playerid,0xFF0000FF,"Fertig");
    DisablePlayerCheckpoint(playerid);
    return 1;
    }
    else
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,sInfo[playerid][postx], sInfo[playerid][posty],sInfo[playerid][postz],3.0);//wenn ich den hier setzt und in den rein fahre wird sInfo[playerid][post bis auf 10 hochgezählt
    return 1;
    }
    }
    else
    {
    }
    }
    }
    }
    }
    }

  • naja ich will die pos hinter dem car herrausfinden


    GetPosHinterFahrzeug(veh,7,Float:x,Float:y,Float:z);
    sInfo[playerid][postx] = x;
    sInfo[playerid][posty] = y;
    sInfo[playerid][postz] = z;


    oder wie kann ich das besser machen ?
    und wenn er dann ein Randomcp betritt den cp hinter dem car erstellen

  • Ok, heißt:
    Random => Hinten => Random => Hinten => ... => nach 10 Mal Ende. Ja?


    Und was hat es mit den Schleifen durch die Fahrzeuge auf sich? Muss man in einem der beiden Fahrzeuge sein, um den Checkpoint betreten zu können? Auch den Checkpoint, hinter dem Fahrzeug?

  • So, jetzt bin ich endlich dazu gekommen dir das mal umzuschreiben.
    Beim starten des Post-Jobs musst du natürlich
    Post[playerid][post_Checkpoint] = 0;
    und
    Post[playerid][post_bAktiv] = 1;
    machen, sowie dem Spieler den ersten Checkpoint anzeigen:
    new rand = random(sizeof(RandomSpawn));
    SetPlayerCheckpoint(playerid,RandomSpawn[rand][0], RandomSpawn[rand][1],RandomSpawn[rand][2],5.0);
    GetPosHinterFahrzeug(veh,7,Float:x,Float:y,Float:z);
    sInfo[playerid][postx] = x;
    sInfo[playerid][posty] = y;
    sInfo[playerid][postz] = z;


    Außerdem sieht der Code unter OnPlayerEnterCheckpoint dann so aus:
    if(Post[playerid][post_bAktiv])
    {
    if(Post[playerid][post_Checkpoint] == 1)
    {
    for(new i = 0; i < sizeof(postcar); i++)
    {
    if(IsPlayerInVehicle(playerid,postcar[i]))
    {
    new Float:x,Float:y,Float:z;
    new veh = GetPlayerVehicleID(playerid);
    Post[playerid][post_Checkpoint] = 0;
    DisablePlayerCheckpoint(playerid);
    new rand = random(sizeof(RandomSpawn));
    SetPlayerCheckpoint(playerid,RandomSpawn[rand][0], RandomSpawn[rand][1],RandomSpawn[rand][2],5.0);
    GetPosHinterFahrzeug(veh,7,Float:x,Float:y,Float:z);
    sInfo[playerid][postx] = x;
    sInfo[playerid][posty] = y;
    sInfo[playerid][postz] = z;
    return 1;
    }
    }
    }
    else
    {
    for(new f = 0; f < sizeof(forklift); f++)
    {
    if(IsPlayerInVehicle(playerid,forklift[f]))
    {
    sInfo[playerid][post]++;
    Post[playerid][post_Checkpoint] = 1;
    printf("%i",sInfo[playerid][post]);
    if(sInfo[playerid][post] == 10)
    {
    SendClientMessage(playerid,0xFF0000FF,"Fertig");
    DisablePlayerCheckpoint(playerid);
    return 1;
    }
    else
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,sInfo[playerid][postx], sInfo[playerid][posty],sInfo[playerid][postz],3.0);
    return 1;
    }
    }
    }
    }
    }


    Teste es so mal. Falls es nicht geht, beschreibe bitte das Problem und was passiert, sowie was passieren sollte.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen