Beiträge von D4rkCl3ric

    Oder man macht es einfacher:
    Ganz oben:
    new Spielerid[MAX_PLAYERS], Gegnerid[MAX_PLAYERS];


    ocmd:repair(playerid,params[])
    {
    new pID;
    if(!SpielerInfo[playerid][Job] == 1))return SendClientMessage(playerid,Rot,"Du bist kein Mechaniker.");
    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,Hellblau,"/repair [ID]");
    Spielerid[playerid] = playerid;
    Gegnerid[playerid] = pID;
    ShowPlayerDialog(pID,DIALOG_ME,DIALOG_STYLE_MSGBOX,"Mechaniker - Repair","Dir wird eine Reperatur für 90$ angeboten.","Annehmen","Ablehnen");
    return 1;
    }


    if(dialogid==DIALOG_ME)
    {
    if(reponse==0)
    {
    format(string,sizeof(string),"Dein Auftrag wurde von %s Abgelehnt",Gegnerid[playerid]);
    SendClientMessage(Spielerid[playerid],Rot,string);
    return 1;
    }
    }
    Das ganze ist ungetestet sieht aber akzeptabel aus.

    Doch na klar, das Filterscript heißt "attachments", du hast dort auch eine .pwn Datei davon. Öffne sie und such den Befehl "SetPlayerAttachedObject", Im Script ist er ausgeklammert also wird nicht verwendet ( // SetPlayerAttachedObject ) wenn du ihn aktivierst bekommst du eine automatische Nachricht wo die Position + ID und alles drinnen steht mit SendClientMessage. Oder du kannst auch in der Console nachsehen dort steht auch alles


    @[GSF]Zunno, mit diesem Filterscript ist es um einiges einfacher, und glaub mir selbst es zu machen ist so gut wie unmöglich. Ich habe zum beispiel eine Uhr erstellt wo mehrere Koordinaten folgendermaßen aussehen: "0.000495" wenn du es mit freiem Auge so gut erkennen kannst, dann wirst du bei der NASA gebraucht und nicht in SAMP

    Es ist ja im Grunde genommen identisch das gleiche, außer die Zahl die erhöht sich immer um 1. Und bei deinem Befehl musst du noch eine Abfrage einfügen:
    ocmd:checkpoint(playerid,params[])
    {
    new pID,Checkpoints;
    if(sscanf(params, "ui", pID, Checkpoints)) return SendClientMessage(playerid,COLOR,"Benutze: /Checkpoint [ID] [Anzahl der Checkpoints]");


    if(Checkpoints == 0) return SendClientMessage(playerid,COLOR,"Mindestens 1 Checkpoint");
    if(Checkpoints > 100) return SendClientMessage(playerid,COLOR,"Es dürfen nicht mehr als 100 Checkpoints erscheinen"); // Diese Zeile hier einfügen
    CheckpointPointer[playerid] = Checkpoints;
    SetPlayerCheckpoint(playerid,X,Y,Z,Größe); // Min. 1 muss er doch wohl abfahren
    Checkpoint[playerid] = 1;
    }

    Sorry habe es gestern nicht mehr ausgehalten und bin direkt ins bett :P Du musst zum Beispiel:
    forward LoadAutos();
    danach unter OnPlayerConnect:
    LoadAutos();


    und ganz unten:
    public LoadAutos()
    {
    new playername[20], speichern[128];
    format(speichern, sizeof(speichern), "/Autos/%s.ini", GetPlayerName(i,playername,sizeof(playername));
    if(fexist(speichern))
    {
    Park[playerid][Park_X] = dini_Float(speichern,"Car_X");
    Park[playerid][Park_Y] = dini_Float(speichern,"Car_Y");
    Park[playerid][Park_Z] = dini_Float(speichern,"Car_Z");
    }


    }
    So liest du die X,Y,Z Koordinaten aus, diese musst du nun nur noch in ein AddStaticVehicle oder CreateVehicle umwandeln (Einfach anstatt der X koordinate, Park[playerid][Park_X] verwenden)
    Ich hoffe ich konnte dir helfen und weiterhin viel glück :thumbup:

    Nicht falsch, aber nicht direkt nötig,
    ist ja eine if - else abfrage, Naja außer zum schluss unter das "else" dort gehört ein return 1; hin da hast du vollkommen Recht

    dan schreib es so:
    public ParkSave()
    {
    for(new i; i < MAX_PLAYERS; i++)
    {
    new playername[20], speichern[128];
    GetPlayerName(i,playername,sizeof(playername));
    format(speichern, sizeof(speichern), "/Autos/%s.ini", playername); // /Ordner/%s.ini wenn du nur /%s.ini schreibst speichert er alle autos unter den scriptfiles
    if(fexist(speichern))
    {
    dini_FloatSet(speichern,"Car_X",Park[i][Park_x]);
    dini_FloatSet(speichern,"Car_Y",Park[i][Park_y]);
    dini_FloatSet(speichern,"Car_Z",Park[i][Park_z]);
    }
    }
    }

    Sorry bin total müde zurzeit, du stellst dich normal an der Fehler lag bei mir ;) du musst "public ParkSave()" zu folgendem umschreiben:


    public ParkSave()
    {
    for(new i; i < MAX_PLAYERS; i++)
    {
    new playername[20], speichern[128];
    format(speichern, sizeof(speichern), "/Autos/%s.ini", GetPlayerName(i,playername,sizeof(playername)); // /Ordner/%s.ini wenn du nur /%s.ini schreibst speichert er alle autos unter den scriptfiles
    if(fexist(speichern))
    {
    dini_FloatSet(speichern,"Car_X",Park[i][Park_x]);
    dini_FloatSet(speichern,"Car_Y",Park[i][Park_y]);
    dini_FloatSet(speichern,"Car_Z",Park[i][Park_z]);
    }
    }
    }

    Kommt drauf an wie du deinen Waffenschein definiert hast:
    if(strcmp(cmd,"/shop",true) == 0)
    {
    if(IsPlayerInRangeOfPoint(playerid,3.0,290.2523,-106.7863,1001.5156))
    {
    if(Waffenschein[playerid] == 0) return SendClientMessage(playerid,COLOR,"Du hast keinen Waffenschein!");
    ShowPlayerDialog(playerid, DIALOG_SHOP, DIALOG_STYLE_LIST, "Waffenshop", "Deagle : 1500€\nM4 : 5000€\nAk47 : 8000€\nMP5 : 2500€\nBaseball Schläger : 500€\nSchutzweste : 1000€\nSchrotflinte : 3000€", "Auswählen", "Abbruch");
    }
    else
    {
    SendClientMessage(playerid, COLOR_RED, "Du bist nicht im Waffenshop bei der Bank!");
    }
    }

    Allerdings, ja ^^
    Schreibe ganz oben irgendwohin:
    forward ParkSave();
    Benutze zum Beispiel ein enum:
    enum parkInfo
    {
    Float:Park_x,
    Float:Park_y,
    Float:Park_z
    }
    new Park[MAX_PLAYERS][parkInfo];


    nun unter deinen Befehl /park:
    new Float:x,Float:y,Float:z;
    GetVehiclePos(vehicleid,x,y,z);
    Park[playerid][Park_x] = x;
    Park[playerid][Park_y] = y;
    Park[playerid][Park_z] = z;
    ParkSave();


    Nun ganz unten:
    public ParkSave()
    {
    new playername[20], speichern[128];
    format(speichern, sizeof(speichern), "/Autos/%s.ini", GetPlayerName(playerid,playername,sizeof(playername)); // /Ordner/%s.ini wenn du nur /%s.ini schreibst speichert er alle autos unter den scriptfiles
    if(fexist(speichern))
    {
    dini_FloatSet(speichern,"Car_X",Park[playerid][Park_x]);
    dini_FloatSet(speichern,"Car_Y",Park[playerid][Park_y]);
    dini_FloatSet(speichern,"Car_Z",Park[playerid][Park_z]);
    }
    }


    MfG.
    D4rkCl3ric

    Such dir zum Beispiel aus einem Vorgefertigtem GodFather script die /handy funktionen raus. Copy Paste - Verfahren. Da lernst du zwar nichts dabei aber du hast es im Script. Solltest du dann noch Errors bekommen oder bestimmte Zeilen nicht verstehen kannst du ja immernoch nachfragen.

    Da gibt es mehrere Möglichkeiten, benutzt du dini oder mySQL ?
    Koordinaten speicherst du ja zum Beispiel über ein enum oder über eine Variable.
    Variable = GetVehiclePos(vehicleid, x, y, z);

    Piet du hast Recht, das ist sowas wie eine unnötige Zeile im Script.


    //Der Befehl ist schon richtig von 4#Future, du hast vielleicht "sscanf" in deinen plugin ordner nicht getan oder die include vergessen.
    OMG Natürlich, es heißt "if(sscanf(params..." nicht "if(sscanf(playerid..."
    Peinlich Peinlich :S


    // Edit peinlichen Fehler ausgebessert.

    Aus welchem Grund führt meine Schleife zu Problemen? Das ist im Grunde genommen so gut wie das gleiche nur dass die Schleife so lange läuft so viele User auf dem Server als MAX_PLAYERS definiert wurden

    Ganz oben zu "new Checkpoint[playerid] = 0;"
    new CheckpointPointer[playerid] = 0;


    ocmd:checkpoint(playerid,params[])
    {
    new pID,Checkpoints;
    if(sscanf(params, "ui", pID, Checkpoints)) return SendClientMessage(playerid,COLOR,"Benutze: /Checkpoint [ID] [Anzahl der Checkpoints]");


    if(Checkpoints == 0) return SendClientMessage(playerid,COLOR,"Mindestens 1 Checkpoint");
    CheckpointPointer[playerid] = Checkpoints;
    SetPlayerCheckpoint(playerid,X,Y,Z,Größe); // Min. 1 muss er doch wohl abfahren
    Checkpoint[playerid] = 1;
    }


    Nun wird es bisschen komplizierter weil du müsstest einen Maximalen Wert an Checkpoints vordefinieren. Ansonsten kannst du unter OnPlayerEnterCheckpoint folgendes schreiben:
    if(Checkpoint[playerid] == 1)
    {
    // Hier machen was ich unten getan habe.
    if(Checkpoint[playerid] == CheckpointPointer[playerid]) break; // das heißt er bricht hier ab weil es der letzte Checkpoint ist
    }
    else if(Checkpoint[playerid] == 2)
    {
    // Hier machen was ich unten getan habe.
    if(Checkpoint[playerid] == CheckpointPointer[playerid]) break; // hier genauso
    }
    Das ist natürlich nur eine von vielen Möglichkeiten. Aber ich glaube dass ist die einfachste (Sorry, falls ich daneben liege)

    1. Vielleicht liegt es an folgendem:
    Create3DTextLabel("Tippe:\n'/Autoschein'",Rot,2047.1578,-1898.5199,13.5469,179.3428,25,10,0); // Auto
    denn mit dieser Zahl (umgeändert auf 10) definiert man wie weit man diesen Text sehen kann.


    2. Versuch mal all deine CreatePickups zu:
    AddStaticPickup(Model, Typ, X, Y, Z, -1);
    ändern. Vielleicht hilft es

    Vielleicht liegt es nur an mir, aber ich habe dein Problem nicht so ganz Verstanden. SAMP Objekte sind ALLE Objekte aus dem SinglePlayer + noch extra Objekte. Du kannst zum Beispiel als Mapphilfprogramm MTA(Multi Theft Auto) benutzen. Es gibt Objekte welche einfach Tagsüber nicht leuchten und erst anfangen zu leuchten wenn es dunkel ist. Entweder suchst du neue Objekte oder du stellst immer die Zeit von jedem Spieler um (auf Nacht) der die Geschicklichkeitsparkour Halle betritt.

    Du benötigst die andere Spielerid. Wenn nun jemand /call NUMMER schreibt musst du Abfragen ob die NUMMER mit deiner Übereinstimmt, wenn ja hebst du ab und kannst mit ihm reden. Das reden musst du über "OnPlayerText" einstellen.