Brauche Hilfe

In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums
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
  • Tag
    Ich möchte gerne, das ein Fahrlehrer eine Fahrstunde beginnen kann für seinen Fahrschüler.. jedoch hab ich errors.
    Was ich mit der "Fahrstunde" erreichen wollte: Wenn der Fahrlehrer /fahrstundeauto ID macht, soll es der pID erlaubt werden, in das Prüfungsauto einzusteigen.. wenn der Fahrlehrer den befehl nochmal macht, soll es der pID logischer Weise nichtmehr erlaubt werden.
    ich habe es so gemacht


    #include <a_samp>
    #include <dini>
    #include <dcmd>
    new fscars[MAX_VEHICLES];
    #define COLOR_LIGHTBLUE 0x00EBFFFF



    Bei OnGamemodeInit

    fscars[6] = AddStaticVehicle(551,-2093.0554,-106.9964,35.1208,177.1338,3,3);
    fscars[7] = AddStaticVehicle(551,-2089.8101,-106.9442,35.1209,178.9133,3,3);
    fscars[8] = AddStaticVehicle(551,-2085.9226,-107.0411,35.1208,179.2792,3,3);
    fscars[9] = AddStaticVehicle(551,-2082.6465,-106.8311,35.1208,184.4537,3,3);
    fscars[10] = AddStaticVehicle(551,-2079.2439,-106.8457,35.1209,182.1908,3,3);
    fscars[11] = AddStaticVehicle(551,-2075.7825,-106.9365,35.1280,183.0275,3,3);


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    dcmd(fahrstundeauto(14, cmdtext);
    return 0;
    }
    dcmd_fahrstundeauto(playerid, params[])
    {
    #pragma unused params
    new pID, name[MAX_PLAYERS_NAME],string, string2;
    if(sscanf(params,"u",pID,text))return SendClientMessage(playerid,Hellblau,"Benutze: /Fahrstundeauto [ID]");
    if(GetPVarInt(pID,"fahrstundeauto") == 0)
    {
    GetPlayerName(playerid, name, sizeof(name));
    format(string, sizeof(string), "Fahrlehrer (%d)%s hat die Fahrstunde begonnen!", name);
    SendClientMessage(pID, COLOR_LIGHTBLUE,string);
    format(string2 sizeof(string2), "Du hast mit deinem Fahrschüler (%d)%s die Fahrstunde begonnen!", name);
    SendClientMessage(playerdi, COLOR_LIGHTBLUE, string2);
    GetPVarInt(piD,"fahrstundeauto") = 1;
    }
    else if(GetPVarInt(pID, "fahrstundeauto") == 1)
    {
    GetPlayerName(playerid, name, sizeof(name));
    format(string, sizeof(string), "Fahrlehrer (%d)%s hat die Fahrstunde beendet!", name);
    SendClientMessage(pID, COLOR_LIGHTBLUE,string);
    format(string2 sizeof(string2), "Du hast die Fahrstunde mit (%d)%s wurde beendet!", name);
    SendClientMessage(playerdi, COLOR_LIGHTBLUE, string2);
    GetPVarInt(pID,"fahrstundeauto") = 0;
    }
    return 1;
    }


    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    new vehicleid = GetPlayerVehicleID(playerid);
    if(newstate == PLAYER_STATE_DRIVER)
    {
    for(new j = 0;j<sizeof fscars;j++)
    {
    if(vehicleid == fscars[j])
    {
    if(GetPVarInt(playerid,"fahrstundeauto") == 1)
    {
    }
    else if(GetPVarInt(playerid,"fahrstundeauto") == 0)
    {
    RemovePlayerFromVehicle(playerid);
    }
    }
    }
    }
    return 1;
    }


    stock LoadAccount
    {
    SetPVarInt(playerid,"fahrstundeauto",dini_Int(Spielerdatei,"fahrstundeauto"));
    }

    /edit errors vergessen zu posten :D


    4 Mal editiert, zuletzt von Sebastian. ()

  • definiere mal das Fahrschulauto wegen dem Fehler undefined Symbol Fahrstundeauto. Mach Lieber Fahrstundeauto[0] usw. nicht fscars

    Der PC ist nur so schlau wie die Person die dahinter steckt.

  • das mit dem Definieren hat nix gebracht.. und das mit den fscars[0] usw, das hat doch nix mit dem PVar zu tun.. das erlaubt es ja da einzusteigen dann
    //Edit
    Hab noch bisschen was versuchen, und jetzt sind nur noch Errors und Warnings in der Zeile

    public OnPlayerCommandText(playerid, cmdtext[])
    {
    dcmd(fahrstundeauto(14, cmdtext); //<--- 104
    return 1;
    }
    dcmd_fahrstundeauto(playerid, params[])
    {
    #pragma unused params
    new pID, name[MAX_PLAYERS_NAME],string, string2;
    if(sscanf(params,"u",pID,text))return SendClientMessage(playerid,Hellblau,"Benutze: /Fahrstundeauto [ID]");
    if(GetPVarInt(pID,"fahrstundeauto") == 0)
    {
    GetPlayerName(playerid, name, sizeof(name));
    format(string, sizeof(string), "Fahrlehrer (%d)%s hat die Fahrstunde begonnen!", name);
    SendClientMessage(pID, COLOR_LIGHTBLUE,string);
    format(string2 sizeof(string2), "Du hast mit deinem Fahrschüler (%d)%s die Fahrstunde begonnen!", name);
    SendClientMessage(playerdi, COLOR_LIGHTBLUE, string2);
    GetPVarInt(piD,"fahrstundeauto") = 1;
    }
    else if(GetPVarInt(pID, "fahrstundeauto") == 1)
    {
    GetPlayerName(playerid, name, sizeof(name));
    format(string, sizeof(string), "Fahrlehrer (%d)%s hat die Fahrstunde beendet!", name);
    SendClientMessage(pID, COLOR_LIGHTBLUE,string);
    format(string2 sizeof(string2), "Du hast die Fahrstunde mit (%d)%s wurde beendet!", name);
    SendClientMessage(playerdi, COLOR_LIGHTBLUE, string2);
    GetPVarInt(pID,"fahrstundeauto") = 0;
    }
    return 1;
    }


    Einmal editiert, zuletzt von Sebastian. ()

  • public OnPlayerCommandText(playerid, cmdtext[])
    {
    dcmd:fahrstundeauto(14, cmdtext);
    return 0;
    }
    Falsche Syntax... richtig wäre:
    dcmd(fahrstundeauto, 14, cmdtext);


    Achja in deiner sscanf-Funktion wird die Variable params doch verwendet, wofür also #pragma unused params?
    Dazu kommt noch, dass die beiden Strings "string" und "string2" als Integer erstellt wurden statt als wirkliche Strings.


    SendClientMessage(playerdi, COLOR_LIGHTBLUE, string2);
    Der Flüchtigkeitsfehler hier sollte von selbst auffallen.


    GetPVarInt(pID,"fahrstundeauto") = 1;
    Willst du den Wert der PVar setzen? Wenn ja, dann verwende die Funktion SetPVarInt.
    GetPVarInt gibt dir nur den Wert der PVar zurück.

  • schreibe mal oben in deinem Script



    #define dcmd(%1,%2,%3) if (!strcmp((%3)[1], #%1, true, (%2)) && ((((%3)[(%2) + 1] == '\0') && (dcmd_%1(playerid, ""))) || (((%3)[(%2) + 1] == ' ') && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1

    Der PC ist nur so schlau wie die Person die dahinter steckt.

  • oh :D danke
    jedoch: immernoch die Errors, obwohl ich dcmd drin hab, und das sonst immer funktioniert hat

  • soo.. hab das ganze einfachmal "neugestartet" und siehe an D:
    er erkennt nun dini net mehr.. und ja :D es ist im include ordner von pawno

    Code
    D:\window 0.3e\samp03e_svr_win32\gamemodes\Fahrschule.pwn(6) : fatal error 100: cannot read from file: "dini"
    
    
    Compilation aborted.Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase
    
    
    
    
    1 Error.
  • :o damn.. der wollte das mit dem Internet explorer öffnen.. wtf :D
    nunja.. diese Errors bleiben trotzdem weiterhin bestehen ^^

  • oh ja.. sry D:

    public OnPlayerCommandText(playerid, cmdtext[])
    {
    dcmd(fahrstundeauto(14, cmdtext); //<--- Zeile 106
    return 1;
    }
    dcmd_fahrstundeauto(playerid, params[])
    {
    new pID, name[MAX_PLAYERS_NAME],string, string2;
    if(sscanf(params,"u",pID,text))return SendClientMessage(playerid,Hellblau,"Benutze: /Fahrstundeauto [ID]");
    if(GetPVarInt(pID,"fahrstundeauto") == 0)
    {
    GetPlayerName(playerid, name, sizeof(name));
    format(string, sizeof(string), "Fahrlehrer (%d)%s hat die Fahrstunde begonnen!", name);
    SendClientMessage(pID, COLOR_LIGHTBLUE,string);
    format(string2 sizeof(string2), "Du hast mit deinem Fahrschüler (%d)%s die Fahrstunde begonnen!", name);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, string2);
    SetPVarInt(piD,"fahrstundeauto") = 1;
    }
    else if(GetPVarInt(pID, "fahrstundeauto") == 1)
    {
    GetPlayerName(playerid, name, sizeof(name));
    format(string, sizeof(string), "Fahrlehrer (%d)%s hat die Fahrstunde beendet!", name);
    SendClientMessage(pID, COLOR_LIGHTBLUE,string);
    format(string2 sizeof(string2), "Du hast die Fahrstunde mit (%d)%s wurde beendet!", name);
    SendClientMessage(playerdi, COLOR_LIGHTBLUE, string2);
    SetPVarInt(pID,"fahrstundeauto") = 0;
    }
    return 1;
    }

  • Immerhin sind wir jetzt schon mal einen kleinen Schritt weiter. :)
    Sehe aber, dass die meisten Fehler, die ich eben bereits angesprochen habe, nicht (oder falsch) verbessert wurden.


    dcmd(fahrstundeauto(14, cmdtext);
    Fast derselbe Fehler wie vorhin - immer noch eine falsche Syntax.
    dcmd(fahrstundeauto, 14, cmdtext);
    So ist sie richtig.


    if(sscanf(params,"u",pID,text))
    Wofür soll die Variable text (welche wahrscheinlich nicht einmal existiert) da nützlich sein? Weg damit. :D


    Die Variablen "string" und "string2" sollten auch als Stringserstellt werden und nicht als Integer.


    SetPVarInt(piD,"fahrstundeauto") = 1;
    Schau dir mal die Funktion SetPVarInt an - besonders die Syntax (aber auch das Beispiel dazu).
    ACHTUNG: PAWN ist Case-sensitive - d.h. PAWN unterscheidet zwischen Groß- und Kleinschreibung.
    piD ist also nicht dasselbe wie pID.
    Daher in diesem Fall "piD" durch "pID" ersetzen.


    SendClientMessage(playerdi, COLOR_LIGHTBLUE, string2);
    Einen Schreibfehler hast du beim Überarbeiten vergessen. ;)


    .. ganz schön lange Liste.
    Nimm dir Zeit beim Überarbeiten und schau bei Bedarf auch im Wiki nach.

  • Ist dieses Problem noch offen oder ist es geklärt?


    Falls nein, editiere ich gleich.

  • soweit geklärt, bis auf die Errors, wobei ich es mit diesen "strings" net ganz gebacken kriege



    public OnPlayerCommandText(playerid, cmdtext[])
    {
    dcmd(fahrstundeauto, 14, cmdtext);
    return 1;
    }
    dcmd_fahrstundeauto(playerid, params[])
    {
    new pID;
    new name[MAX_PLAYERS_NAME];
    new string, string2;
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,COLOR_LIGHTBLUE,"Benutze: /Fahrstundeauto [ID]");
    if(GetPVarInt(pID,"fahrstundeauto") == 0)
    {
    GetPlayerName(playerid, name, sizeof(name));
    format(string, sizeof(string), "Fahrlehrer (%d)%s hat die Fahrstunde begonnen!", name);
    SendClientMessage(pID, COLOR_LIGHTBLUE,string);
    format(string2 sizeof(string2), "Du hast mit deinem Fahrschüler (%d)%s die Fahrstunde begonnen!", name);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, string2);
    SetPVarInt(pID,"fahrstundeauto") = 1;
    }
    else if(GetPVarInt(pID, "fahrstundeauto") == 1)
    {
    GetPlayerName(playerid, name, sizeof(name));
    format(string, sizeof(string), "Fahrlehrer (%d)%s hat die Fahrstunde beendet!", name);
    SendClientMessage(pID, COLOR_LIGHTBLUE,string);
    format(string2 sizeof(string2), "Du hast die Fahrstunde mit (%d)%s wurde beendet!", name);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, string2);
    SetPVarInt(pID,"fahrstundeauto") = 0;
    }
    return 1;
    }

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