Beiträge von Shine

    Probiere einfach mal das hier..
    Berichte was dadurch passiert.
    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {
    if(GetVehicleModel(vehicleid) == 426 && !ispassenger)
    {
    if(PlayerInfo[playerid][pLevel] > 2)
    {
    RemovePlayerFromVehicle(playerid);
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    SetPlayerPos(playerid, x, y, z+5);
    SendClientMessage(playerid,ROT,"Du brauchst Level 2 um dieses Fahrzeug zu fahren!");
    return 1;
    }
    }
    }

    Habe oben noch eine zweite Möglichkeit reingehauen über OnPLayerEnterVehicle, probiere das mal.


    //edit:
    Wenn es nicht geht, schau mal bis wohin er kommt..


    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {
    //Geht er hier rein? Mit Sicherheit..
    SendClientMessage(playerid, FARBE, "Du bist in ein Auto eingestiegen.");
    if(GetVehicleModel(vehicleid) == 426 && !ispassenger)
    {
    //Kommt er bis hier?
    SendClientMessage(playerid, FARBE, "Automodel ist 426, du bist als Fahrer eingestiegen.");
    if(PlayerInfo[playerid][pLevel] > 2)
    {
    RemovePlayerFromVehicle(playerid);
    SendClientMessage(playerid,ROT,"Du brauchst Level 2 um dieses Fahrzeug zu fahren!");
    return 1;
    }
    //Oder passiert immer das hier, egal ob du Level 1 oder 5 bist?
    else{ SendClientMessage(playerid, FARBE, "Dein Level ist 1 oder 2"); }
    }
    }

    Probiere es mal so..
    Das Level kannst du natürlich ändern, genau wie die Model-ID nach der abgefragt werden soll.
    Das Auto mit der Model-ID 462 kannst du nun ausschließlich als Level 1 oder Level 2er fahren.
    Mit allen höheren Leveln wirst du hinaus befördert.

    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(oldstate == PLAYER_STATE_ONFOOT && newstate == PLAYER_STATE_DRIVER)
    {
    if(GetVehicleModel( GetPlayerVehicleID(playerid) ) == 462)
    {
    if(PlayerInfo[playerid][pLevel] > 2)
    {
    RemovePlayerFromVehicle(playerid);
    SendClientMessage(playerid,ROT,"Du brauchst Level 2 um dieses Fahrzeug zu fahren!");
    return 1;
    }
    }
    }
    return 1;
    }


    //edit 1: Code bisschen zusammengefasst


    //edit 2:
    Ich würde allerdings die Möglichkeit via OnPlayerEnterVehicle bevorzugen..


    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {
    if(GetVehicleModel(vehicleid) == 426 && !ispassenger)
    {
    if(PlayerInfo[playerid][pLevel] > 2)
    {
    RemovePlayerFromVehicle(playerid);
    SendClientMessage(playerid,ROT,"Du brauchst Level 2 um dieses Fahrzeug zu fahren!");
    return 1;
    }
    }
    }

    Dann liegt es an deiner Abfrage.
    Und da ich dein Script nicht kenne von deinen ''RespektInfo'' und ''NeedRespekt'' kann ich dir nicht helfen.
    Ich habe lediglich, wie beschrieben, den Aufbau deines Befehls für die anderen vereinfacht da du es mit dem

    Code
    [pwn][/pwn]

    nicht gebacken bekommst.
    Zudem habe ich die Abfrage in sofern geändert, dass es übersichtlicher ist.
    So ein Einzeiler wie if(RespektInfo[GetPlayerScore(playerid)][NeedRespekt]< GetPVarInt(playerid,"RespektPunkte")) return SendClientMessage(playerid,GRAU,"Du hast noch nicht genug Respektpunkte um dir das nächste Level zu kaufen."); mag ich überhaupt nicht. Super unübersichtlich, mehr nicht.

    Blind?


    1. Wenn du ihn meinst: Er hatte da ein return drin gehabt:
    if(RespektInfo[GetPlayerScore(playerid)][NeedRespekt]< GetPVarInt(playerid,"RespektPunkte")) return SendClientMessage(playerid,GRAU,"Du hast noch nicht genug Respektpunkte um dir das nächste Level zu kaufen.");


    2. Wenn du mich meinst: Bei meinem Code muss das nicht dort hin.

    Probier es mal so..

    ocmd:buylevel(playerid,params[])
    {
    if(RespektInfo[GetPlayerScore(playerid)][NeedRespekt]< GetPVarInt(playerid,"RespektPunkte"))
    {
    SendClientMessage(playerid,GRAU,"Du hast noch nicht genug Respektpunkte um dir das nächste Level zu kaufen.");
    }
    else
    {
    SetPlayerScore(playerid,GetPlayerScore(playerid)+1); // Da er die Respekt Punkte erreicht hat
    SetPVarInt(playerid,"RespektPunkte",0); // Auf 0 Jetzt wieder von vorne
    new txt[108]; //string[200];
    format(txt,sizeof(txt),"Glückwunsch zu deinen Level Up, du hast nun das Level %i erreicht. Um das nächste Level zu erreichen brauchst du %i RespektPunkte.",GetPlayerScore(playerid),RespektInfo[GetPlayerScore(playerid)][NeedRespekt]);
    SendClientMessage(playerid,GRÜN,txt);
    }
    return 1;
    }


    //edit: Habe übrigens deinen Code nur von dem Aufbau her bearbeitet, keine Variable, Größe vom Array oder sonst etwas geändert...

    Und dafür ein neues Thema...
    1. Unlustig
    2. Er war nicht der erste mit solch einer Idee
    3. Er ist sowieso dumm....


    Ein Facepalm-Bild spare ich mir jetzt, hab gerade keine Lust ein schickes raus zu suchen...
    Obwohl es mit Sicherheit wesentlich lustiger wäre als der Startpost hier.


    //edit:

    Zitat von warstar14

    1. Er versuchr der Clown zu sein.
    2. Ihm ist sein Leben schei** egal.
    3. Er konnte es wirklich nicht.
    4. Ist ein Fake.



    Kreuzt an :P


    *Nummer 1 ankreuz*
    Aber ergänz:
    1. Er versucht der Clown zu sein, merkt aber nicht wie unlustig das wird...
    Der Gerät selbst ist schon nicht mehr lustig...

    Schau dir den 1. Beitrag in diesem Thema an.
    Da stehen doch alle Änderungen o_O
    Keine Ahnung was daran nicht so verständlich ist...
    Neue Objekte, neue Möglichkeiten beim Scripten, ..

    Ist doch klar, dass da etwas nicht stimmt.
    1. Rechtschreibfehler bei SendClientMessage,
    2. Semikolon vergessen,
    3. den Text nicht in Anführungszeichen gesetzt..
    Und wenn du

    Zitat von Towelie123


    public OnGameModeInit()
    //Pickup waffenp = CreatePickup(1239, 1,835.3406,-2063.6047,12.8672, -1);

    schreibst, ist es doch logisch dass der 'waffenp'' nicht kennt...
    Zuerst dachte ich, den Kommentar hast du nur für uns gesetzt. Aber nach den Errormeldungen steht es wohl echt so im Script...


    Probiers mit:



    public OnGameModeInit()
    {
    new waffenp = CreatePickup(1239, 1,835.3406,-2063.6047,12.8672, -1); //Waffenpickup
    //die geschlossene Klammer von OnGameModeInit habe ich weggelassen, da wird ja noch mehr stehen. Nicht dass du die einfach mit hinein kopierst...


    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    if(pickupid == waffenp)
    {
    SendClientMessage(playerid,0x00FFA0FF,"Hier ist deine Waffe.(M4A1)");
    GivePlayerWeapon(playerid,31,300);
    }
    return 1;
    }


    Und merke dir:
    1. Kommentare HINTER dem Code.
    2. Auf Rechtschreibung bei den Befehlen achten (Wichtig !!!!)
    3. Semikolon nicht vergessen..
    4. Texte (bei SendClientMessage z.B.) in Anführungszeichen setzen...



    //edit: bisle was umgeschrieben und hinzu geschrieben..
    //die andern edits für Rechtschreibung xD

    Und wo ist nun genau der Fehler?
    Passiert einfach nichts,
    gibts keine Autos,
    Compilererror,
    ...?


    Ansonsten auch mal bitte die Zeilen posten, wo du die Admincars erstellst.


    //edit2: (das edit:1 entfernt, hat mich da verguckt..)
    Von pain. stimmt es nur halb.
    Beim ersten Codeschnipsel musst du schreiben:if(PlayerInfo[playerid][pAdmin] < 1)
    {


    Und beim zweiten Beispiel schreibst duif(PlayerInfo[playerid][pAdmin] >= 1)
    {

    Weil die Vehicle Models bei 400 anfangen. Und das zweidimensionale Array bei 0.
    D.h. bei der Modelid 400-400 haste den Namen Landstalker von deinem Array.


    //edit:
    Genauer:
    Spieler sitzt im Landstalker, der hat die ID 1 und das Model 400 (http://wiki.sa-mp.com/wiki/Vehicles:All)
    Fahrzeugname[GetVehicleModel(GetPlayerVehicleID(playerid))-400]
    wird zu Fahrzeugname[GetVehicleModel(1)-400]
    wird zu Fahrzeugname[400-400]
    wird zu Fahrzeugname[0]
    wird zu "Landstalker"

    Hatte den selben Rat bekommen, Geld lieber in die GraKa stopfen und zu einem i5 greifen.


    i.d.R. ist es auch in Ordnung so, aber bei dem Budget von 1200€ solltest du doch lieber zu einem i7 greifen, gar keine Frage.
    Ich habe auch einen i5 drin und bereue bei meinem Budget (fast das gleiche von dir) keinen i7 genommen zu haben.


    Vor allem wenn du ein paar Jahre Ruhe haben möchtest (nicht aufrüsten etc) hol dir einen ordentlichen i7.
    Damit sollte sich das übertakten auch vorerst erledigt haben - braucht man nicht. Noch nicht.


    //edit: ein 'wenn' vergessen o_O

    Was willst du überhaupt genau machen?


    Willst du einmal /duty machen, anschließend einen Checkpoint angezeigt bekommen, und sobald du diesen erreichst, soll der zweite angezeigt werden, und immer so weiter?
    Falls ja, ist das eine komplett falsche Herangehensweise deinerseits.
    Denn dann musst du mit dem Public OnPlayerEnterCheckpoint arbeiten.
    http://wiki.sa-mp.com/wiki/OnPlayerEnterCheckpoint




    //edit: Ich machs dir mal...musst du nur anpassen.


    Ganz oben irgendwo new JOBNAME[MAX_PLAYERS];Die Variable JOBNAME auf deine Wünsche anpassen



    //Befehl um den Job auszuführen
    ocmd:duty(playerid,params[])
    {
    if(istPlayerJob(playerid,2))
    {
    SetPlayerCheckpoint(playerid,2041.7004,-2593.5042,13.5469,10.0);
    JOBNAME[playerid] = 1; //hier wieder den JOBNAME anpassen, wie ganz oben gesagt...
    Points[playerid] = 1;
    }
    else
    {
    //Die FARBE auf deine Wünsche anpassen
    SendClientMessage(playerid, FARBE, "Du hast nicht den erforderlichen Job.");
    }
    return 1;
    }


    //Befehl um den Job abzubrechen
    ocmd:noduty(playerid,params[])
    {
    if(istPlayerJob(playerid,2))
    {
    DisablePlayerCheckpoint(playerid);
    JOBNAME[playerid] = 0; //hier wieder den JOBNAME anpassen, wie ganz oben gesagt...
    Points[playerid] = 0;
    SendClientMessage(playerid, FARBE, "Du hast den Job abgebrochen!!"); //Hier wieder die FARBE ändern..
    }
    else
    {
    //Die FARBE auf deine Wünsche anpassen
    SendClientMessage(playerid, FARBE, "Du hast nicht den erforderlichen Job.");
    }
    return 1;
    }


    public OnPlayerEnterCheckpoint(playerid)
    {
    //Hier kannst du deine Checkpoints eintragen.
    if((istPlayerJob(playerid,2)) && (JOBNAME[playerid] == 1)) //hier wieder den JOBNAME anpassen, wie ganz oben gesagt...
    {
    switch(Points[Playerid])
    {
    case 1:
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,-1632.8308,-140.7568,14.1484,10.0);
    Points[playerid] = 2;
    break;
    case 2:
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,1389.1116,1653.4709,10.8125,10.0);
    Points[playerid] = 3;
    break;
    case 3:
    DisablePlayerCheckpoint(playerid);
    SendClientMessage(playerid, FARBE, "Du hast den Job erfolgreich beendet!");
    //hier kannst du dem Spieler z.B. Geld geben oder so, der Job ist hier beendet.
    JOBNAME[playerid] = 0; //JOBNAME wieder anpassen
    Points[playerid] = 0;
    break;
    }
    }
    return 1;
    }


    Alles aus dem Kopf geschrieben, keine Garantie, ungetestet.


    //edit: Ein s vergessen :<
    //edit: Und woanders ein s zu viel -.-' xD

    Ist doch logisch xD Erst setzt du einen ersten Checkpoint, schreibst deine Points auf 1, wenn deine Points danach auf 1 sind (die du ja eben auf 1 gesetzt hast), folgt der nächste Checkpoint.
    Machs so:


    ocmd:duty(playerid,params[])
    {
    if((istPlayerJob(playerid,2)) && (Points[playerid] == 0))
    {
    SetPlayerCheckpoint(playerid,2041.7004,-2593.5042,13.5469,10.0);
    Points[playerid] = 1;
    return 1;
    }
    if((istPlayerJob(playerid,2)) && (Points[playerid] == 1))
    {
    SetPlayerCheckpoint(playerid,-1632.8308,-140.7568,14.1484,10.0);
    Points[playerid] = 2;
    return 1;
    }
    if((istPlayerJob(playerid,2)) && (Points[playerid] == 2))
    {
    SetPlayerCheckpoint(playerid,1389.1116,1653.4709,10.8125,10.0);
    Points[playerid] = 3;
    return 1;
    }
    }


    //edit: Komplett für dich berichtigt...


    //edit 2:
    Eine wesentlich schönere Variante ist allerdings folgende:
    (ungetestet)


    ocmd:duty(playerid,params[])
    {
    if(istPlayerJob(playerid,2))
    {
    switch(Points[Playerid])
    {
    case 0:
    SetPlayerCheckpoint(playerid,2041.7004,-2593.5042,13.5469,10.0);
    Points[playerid] = 1;
    break;
    case 1:
    SetPlayerCheckpoint(playerid,-1632.8308,-140.7568,14.1484,10.0);
    Points[playerid] = 2;
    break;
    case 2:
    SetPlayerCheckpoint(playerid,1389.1116,1653.4709,10.8125,10.0);
    Points[playerid] = 3;
    break;
    }
    }
    return 1;
    }

    if(!istPlayerJob(playerid,2))
    {
    SetPlayerCheckpoint(playerid,2041.7004,-2593.5042,13.5469,10.0);
    Points[playerid] = 1;
    }Heißt übersetzt:
    Wenn ''playerid'' nicht den Job 2 besitzt, kommt bei ihm ein Checkpoint und seine Points werden auf 1 gesetzt.


    Aber du hast doch den Job!

    Zitat von SchafiSAMP

    und Ja, in meiner Userdatei steht Job 2.


    Wie sollen deine Points auf 1 gesetzt werden? Verrate es mir :)

    Deine erste Abfrage nach 'Points' lautet:

    if(Points[playerid] == 1)
    {
    SetPlayerCheckpoint(playerid,-1632.8308,-140.7568,14.1484,10.0);
    Points[playerid] = 2;
    return 1;
    }Wo wird es denn überhaupt auf 1 gesetzt? Denn wenn du den Job hast und deine Points bei 0 sind, ist logisch dass nichts passiert...

    Bei deinem ersten Beitrag fehlte da noch eine Klammer..
    Geht es denn jetzt?
    Wenn nein, was genau geht an welcher Stelle nicht?
    Error beim compilieren? Wenn ja, welche Zeile und welcher Error?

    Das passiert (bei mir zumindest) nur, wenn ich zuerst ''Nachricht zum zitieren auswählen'' und dann noch einmal ''Nachricht direkt zitieren'' klicke.
    Wenn ich aber ''Nachricht direkt zitieren'' auswähle kommt das Zitat nur einmal,
    und wenn ich ''Nachricht zum zitieren auswählen'' anklicke und danach auf den ''Antworten''-Button klicke, kommt es ebenfalls nur einmal.


    Und das verhält sich wie gewollt.


    Wo klickst du denn genau drauf?^^


    //edit: Rechtschreibung