Brauche Hilfe, was für Wissende^^

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
  • Hallo Leute
    Ich habe ein Fraktionscarsystem eingebaut, so klappt auch alles habe nur mit einer sache ein Problem und zwar mit dem Respawncar befehl


    hier der Befehl
    if(strcmp(cmdtext,"/respawncars",true)==0){
    if(PlayerLeader(playerid))
    {
    new fc;while(fc<MAX_FRACTION_CARS)
    {
    if(FractionCars[fc][fVehid] >= 400 && FractionCars[fc][fVehid] <= 611)
    {
    if(FractionCars[fc][fFraction][0] == PlayerLeader(playerid))
    {
    if(GetVehicleDriver(fc) == -1)
    { //if(!IsVehicleEmpty(fc)) continue;
    SetVehicleToRespawn(fc); //<<<<<<<<<<<Wenn ich den hier Benutze dann klappt es, das die wagen nur spawnen wenn keiner drinne sitzt
    //DestroyAndCreateFractionCar(fc);//<<<<Nehme ich den Originalen dann spawnt das Auto auch wenn einer drinne sitzt
    }
    }
    }
    fc++;
    }return SendClientMessage(playerid,fColYellow,">> Du hast deine Fraktionsfahrzeuge respawnt.");
    }return SendClientMessage(playerid,fColGrey,"Du bist nicht berechtigt diesen Befehl auszuführen.");
    }
    Hier die Public von Destroy
    public DestroyAndCreateFractionCar(fc)
    {
    if(GetVehicleDriverfc(fc) == -1)
    {
    if(FractionCars[fc][fVehid] >= 400 && FractionCars[fc][fVehid] <= 611)
    {
    DestroyVehicle(FractionCars[fc][fCarid]);
    FractionCars[fc][fCarid] = CreateVehicle(FractionCars[fc][fVehid],FractionCars[fc][fPos][0],FractionCars[fc][fPos][1],FractionCars[fc][fPos][2],FractionCars[fc][fPos][3],FractionCars[fc][fCol][0],FractionCars[fc][fCol][1],-255);
    return true;
    }
    }return false;
    }



    Was hierbei ziemlich nervt ist wenn ich die Original nehme dann spawnen die cars auch wenn jemand drinne sitzt, die sollen aber nicht spwnen
    hat jemand ne idee?

  • Kenn mich nich gut damit aus aber bei mir isset so:


    if(strcmp(cmd,"/respawnnotused",true) == 0)
    {
    if(SpielerInfo[playerid][pAdmin] >= 4)
    {
    for(new v=0; v<MAX_VEHICLES; v++)
    {
    if(GetVehicleDriver(v) == -1)
    {
    SetVehicleToRespawn(v);
    }
    }
    }
    else SendClientMessage(playerid,COLOR_RED," Du bist kein Admin! oO ");
    return 1;
    }


    Villeicht konnte ich dir ja helfen.


    MfG

    Maximalpegmentierter Ösi mit Migrationshintergrund.
    #blackisthenewwhite

  • if(strcmp(cmd,"/respawnnotused",true) == 0)
    {
    if(SpielerInfo[playerid][pAdmin] >= 4)
    {
    new v=0,i;
    for(;v!=MAX_VEHICLES; v++)
    {
    i=0;
    for(;i!=MAX_PLAYERS;i++)
    {
    if(GetPlayerState == PLAYER_STATE_DRIVER || GetPlayerState == PLAYER_STATE_PASSENGER) continue;
    SetVehicleToRespawn(v);
    }
    }
    return 1;
    }
    else SendClientMessage(playerid,COLOR_RED," Du bist kein Admin! oO ");
    return 1;
    }


    In der Theorie sollte das so funktionieren ;)
    PS: Der Code definitiv nicht der schnellste

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • bei deinem in zeile 11
    bekomme ich nen error


    error 076: syntax error in the expression, or invalid function call



    //edit


    habe es jetzt so probiert, doch wieder ein reinfall


    if(strcmp(cmdtext,"/respawncars",true)==0){
    if(PlayerLeader(playerid))
    {
    new fc;while(fc<MAX_FRACTION_CARS)
    {
    if(FractionCars[fc][fVehid] >= 400 && FractionCars[fc][fVehid] <= 611)
    {
    if(FractionCars[fc][fFraction][0] == PlayerLeader(playerid))
    {
    new i;
    fc=0;
    for(;fc!=MAX_VEHICLES; fc++)
    {

    i=0;
    for(;i!=MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i) && GetPlayerState(i) == PLAYER_STATE_DRIVER && GetPlayerVehicleID(i) == fc)
    {
    DestroyAndCreateFractionCar(fc);
    }
    }
    }
    //return 1;
    }
    }
    fc++;
    }return SendClientMessage(playerid,fColYellow,">> Du hast deine Fraktionsfahrzeuge respawnt.");
    }return SendClientMessage(playerid,fColGrey,"Du bist nicht berechtigt diesen Befehl auszuführen.");
    }

    Einmal editiert, zuletzt von Patricbiker ()

  • warum übernimmst du das nicht einfach so wie ich dir das gemacht hab?
    Das ist schon optimiert >.>
    Du das ich (i) vergessen hab :D sorry


    Und was soll diese Blödsinnige abfrage?
    if(FractionCars[fc][fVehid] >= 400 && FractionCars[fc][fVehid] <= 611)


    Wenn das für die models zählt, frag ich mich wie du autos mit der modelid über 611 haben möchtest...


    //Edit:
    if(strcmp(cmdtext,"/respawncars",true)==0)
    {
    if(PlayerLeader(playerid))
    {
    new fc,i,v;
    for(;v!=MAX_VEHICLES; v++)
    {
    if(FractionCars[v][fFraction][0] != PlayerLeader(playerid)) continue;
    i=0;
    for(;i!=MAX_PLAYERS;i++)
    {
    if(GetPlayerState(i) == PLAYER_STATE_DRIVER && GetPlayerState(i) == PLAYER_STATE_PASSENGER) continue;
    DestroyAndCreateFractionCar(v);
    }
    }
    return SendClientMessage(playerid,fColYellow,">> Du hast deine Fraktionsfahrzeuge respawnt. <<");
    }
    return SendClientMessage(playerid,fColGrey,"Du bist nicht berechtigt diesen Befehl auszuführen.");
    }
    Ich hab das mal ausm Kopf geschrieben, sollte funzen, nur weiß ich net ob es deinen vorstellungen enspricht
    //Edit 2:
    Diese einrückung macht mich fertig >.>

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

    Einmal editiert, zuletzt von Akino Kiritani ()

  • Hättest du meinen Beitrag Richtig gelesen, dann hättest du diese Frage jetzt nicht gestellt


    mein Jetziger Befehl siet jetzt so aus
    if(strcmp(cmdtext,"/respawncars",true)==0){ //SetVehicleToRespawn(fc); //if(GetVehicleDriver(v) == -1)
    if(PlayerLeader(playerid))
    {
    for(new fc=0;fc<MAX_FRACTION_CARS;fc++)
    {
    if(FractionCars[fc][fVehid] >= 400 && FractionCars[fc][fVehid] <= 611)
    {
    if(FractionCars[fc][fFraction][0] == PlayerLeader(playerid))
    {
    if(GetVehicleDriver(fc) == -1)
    {
    DestroyAndCreateFractionCar(fc);


    }
    //return 1;
    }
    }

    }return SendClientMessage(playerid,fColYellow,">> Du hast deine Fraktionsfahrzeuge respawnt.");
    }return SendClientMessage(playerid,fColGrey,"Du bist nicht berechtigt diesen Befehl auszuführen.");
    }


    Nun ist es so das er die Cars auch spawnt aber das auto wo ich drinne sitze auch mit spawnt, die nächste id die lässt er aber aus
    und das bringt ja nicht viel


    und was die Fractionscar abfrage angeht, keine ahnung es ist aus einem Filterscript was ich mal gefunden hatte, wieso das so drinne ist, weiß ich nicht

  • if(strcmp(cmdtext,"/respawncars",true)==0)
    {
    if(PlayerLeader(playerid))
    {
    new i,v;
    for(;v!=MAX_VEHICLES; v++)
    {
    if(FractionCars[v][fFraction][0] != PlayerLeader(playerid)) continue;
    i=0;
    for(;i!=MAX_PLAYERS;i++)
    {
    if(GetPlayerState(i) == PLAYER_STATE_DRIVER && GetPlayerState(i) == PLAYER_STATE_PASSENGER) continue;
    DestroyAndCreateFractionCar(v);
    //SetVehicleToRespawn(v);
    }
    }
    return SendClientMessage(playerid,fColYellow,">> Du hast deine Fraktionsfahrzeuge respawnt. <<");
    }
    return SendClientMessage(playerid,fColGrey,"Du bist nicht berechtigt diesen Befehl auszuführen.");
    }


    Ich habs jetzt mal getestet und es funzt...

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Ich hab deinen befehl auch getestet und es kahm das gleiche raus, er spawnt zwar die fraktionscars, doch auch das in dem ich drinne sitze, eine fahrzeug id höher lässt er stehen,


    mit SetVehicleToRespawn(v); klappt es , nur mit dem DestroyAndCreateFractionCar(v); irgentwie nicht
    und ich kann den setveh nicht benutzen da die fahrzeuge nicht in der position geladen werden, das bringt spätestens beim ingame umparken probleme



    //edit


    ich brauche ja diese beiden sachen damits keine probleme giebt


    DestroyVehicle(FractionCars[fc][fCarid]);
    FractionCars[fc][fCarid] = CreateVehicle(FractionCars[fc][fVehid],FractionCars[fc][fPos][0],FractionCars[fc][fPos][1],FractionCars[fc][fPos][2],FractionCars[fc][fPos][3],FractionCars[fc][fCol][0],FractionCars[fc][fCol][1],-255);
    return true;



    //edit


    Warum hat denn keiner eine idee, die auch klappt?

    Einmal editiert, zuletzt von Patricbiker ()

  • //edit
    mom das war von mir zufrüh geantwortet


    //edit
    Leider hast du recht, die pwn funktion iss echt schlecht



    //edit


    Ich habe beide befehle von dir grad getestet, natürlich kleinigkeiten eben angepasst, irgentwie will es nich, ich bin am verzweifeln


    //edit hab dich in Skype angeschrieben

    2 Mal editiert, zuletzt von Patricbiker ()

  • Ich habs jetzt mal getestet und es funzt...


    Funktioniert bestimmt, aber bestimmt nicht, wie du dir das vorstellst:
    // v nicht initialisiert und ist somit nicht unbedingt = 0
    new i,v;
    for(;v!=MAX_VEHICLES; v++)
    {
    if(FractionCars[v][fFraction][0] != PlayerLeader(playerid)) continue;
    i=0;
    for(;i!=MAX_PLAYERS;i++)
    {
    // was soll diese abfrage? GetPlayerState(player) = DRIVER & PASSENGER? Habe ich noch nie gesehen, dass jemand
    // Fahrer und gleichzeitig Beifahrer ist. Ausserdem wird hier nicht ueberprueft, ob der Spieler DIESES Fahrzeug 'v'
    // faehrt, was vermutlich eigentlich ueberprueft werden sollte.
    if(GetPlayerState(i) == PLAYER_STATE_DRIVER && GetPlayerState(i) == PLAYER_STATE_PASSENGER) continue;
    DestroyAndCreateFractionCar(v);
    //SetVehicleToRespawn(v);
    }
    }

    Habe den code mal etwas ueberarbeitet:
    ...
    new i,v, destroy;
    for(v = 0;v<MAX_VEHICLES; v++)
    {
    // continue, wenn Spieler nicht leader der Fraktion dieses vehicles ist
    if( !IsPlayerLeaderOfFraction(playerid, FractionCars[v][fFraction][0])) continue;
    i = 0;
    destroy = 1;
    while ( i < MAX_PLAYER && destroy == 1 )
    {
    // Player connected & in vehicle?
    if ( IsPlayerConnected(i) && (GetPlayerState(i) == PLAYER_STATE_DRIVER || GetPlayerState(i) == PLAYER_STATE_PASSENGER)
    // in diesem vehicle?
    && GetPlayerVehicle(i) == FractionCars[v][vehicleid] )
    destroy = 0;
    i++;
    }
    if ( destroy )
    DestroyAndCreateFractionCar(v);
    //SetVehicleToRespawn(FractionCars[v][vehicleid]);
    }

    Ist aber definitiv noch nicht korrekt. Denn FractionCars[MAX_VEHICLES]? MAX_VEHICLES sollte in diesem Code mit der Nummer der Fractions autos ersetzt werden (mit sizeof, oder einer bereits vorhanden variable). Ausserdem muessten die Befehle angepasst werden und auch die Referenzen zu FractionCars[v][vehicleid].

  • Das System ist eigentlich ein Filterscript gewesen was es ermöglicht, cars direct ingame zu erstellen und umzuparken, die fahrzeuge selber werden in eine datei gespeichert, die dann abgefragt wird beim respawnen der cars, da steht dann die position und die fraktion auch drinne, so ist es möglich das die Leader ihre Fahrzeuge einfach mal umparken und natürlich respawnen können.


    Nur das Problem ist das die Fahrzeuge halt von der Fraktion alle spawnen ob einer drinne sitzt oder nicht


    //Edit


    Die Fahrzeug Id`s selber werden vor allen anderen geladen, das heist man benötigt keinerlei fahrzeuge im Script selber, was einiges sehr erleichtert^^


    //Edit
    Leider weiß ich nicht mehr wo ich das teil runtergeladen habe, und es steht im Script auch nichts drinne wer es erstellt hat, sonnst hätte ich mich mit dem auseinandergesetzt.




    //EDIT
    Kann keiner Weiterhelfen???

    2 Mal editiert, zuletzt von Patricbiker ()