Beiträge von Jeffry

    dcmd_createff(playerid,params[])
    {
    new fdatei[128];
    format(fdatei,sizeof(fdatei),"/FPickups/Pickup.txt");
    if(!fexist(fdatei)) dini_Create(fdatei);
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid,x,y,z);
    dini_FloatSet(fdatei,"Pos_X",x);
    dini_FloatSet(fdatei,"Pos_Y",y);
    dini_FloatSet(fdatei,"Pos_Z",z);
    Create3DTextLabel("Fastfood Restaurant!", hellrot, x, y, z, 5.0, 0, 1 );
    return 1;
    }


    Allerdings kannst du so natürlich nur ein Restaurant erstellen.


    Falls du ein dynamisches System erstellen willst, rate ich dir dazu dir dieses Tutorial anzuschauen: [jTuT] Fraktions-Fahrzeug-System mit Dini 1.6

    Du hast vergessen beim Timer die playerid mit anzugeben

    Die braucht es gar nicht, da er es für alle anzeigt.


    Mache es so:
    ocmd:co(playerid,params[])
    {
    SetTimerEx("timer", 1000, false, "i", 5);
    return 1;
    }


    forward timer(zahl);
    public timer(zahl)
    {
    new str[16];
    format(str, sizeof(str), "%i", zahl);
    if(zahl > 0) SetTimerEx("timer", 1000, false, "i", zahl-1); //Startet den Timer erneut, solange zahl > 0 ist.
    else format(str, sizeof(str), "Looos!!");
    GameTextForAll(str, 1200, 1);
    return 1;
    }

    Ändere im Befehl:
    new string[MAX_PLAYER_NAME * MAX_PLAYERS];
    zu:
    new string[512];


    Dann müsste die Meldung weg gehen.
    Ich habe es über MAX_PLAYERS deklariert, da ich nicht weiß, wie viele Slots du hast, wahrscheinlich reicht es aber auch so.


    Alternativ kannst du versuchen, unter den Includes das einzufügen:
    #pragma dynamic 100000


    Schaue auch mal, ob du in der a_samp.inc die MAX_PLAYERS Anzahl auf die Anzahl deiner Slots im Server gesetzt hast, das spart ressourcen, sonst wird es immer mit 500 oder mehr kompiliert, obwohl du z.B. nur 50 Slots hast.

    Dann den Befehl so:
    ocmd:tickets(playerid,params[])
    {
    if(isPlayerAnAdmin(playerid,1) || isPlayerUservertreter(playerid,1))
    {
    new string[MAX_PLAYER_NAME * MAX_PLAYERS];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(GetPVarInt(i,"Ticket") == 1)
    {
    format(string, sizeof(string), "%s%s\n",string,SpielerName(i));
    }
    }
    }
    ShowPlayerDialog(playerid,DIALOG_TICKETS,DIALOG_STYLE_LIST,"Offene Tickets",string,"Ok","Abbrechen");
    return 1;
    }
    else
    {
    SendClientMessage(playerid,RED,"FEHLER: Du bist kein Admin oder Uservertreter!");
    return 1;
    }
    }


    Und in OnDialogResponse:
    if(dialogid == DIALOG_TICKETS)
    {
    if(!response) return 1;
    new count = -1;
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(GetPVarInt(i,"Ticket") == 1)
    {
    count++;
    if(count == listitem)
    {
    new string[145];
    format(string, sizeof(string), "Spieler %s (ID: %d) in Zeile %d wurde angeklickt.", SpielerName(i), i, listitem);
    SendClientMessage(playerid, 0xFFFFFFFF, string);
    return 1;
    }
    }
    }
    }
    return 1;
    }


    Beachte aber, dass es sein könnte, dass ein Spieler in der Liste den Server verlässt, während du die Liste offen hast, sprich dann stimmt die Liste eventuell nicht mehr und es wird bei der Auswahl ein falscher Spieler ausgewählt.
    Um das zu verhindern habe ich hier ein Tutorial, mit dem man solche Dialoge aktualisieren lassen kann: [jTuT] Interaktive Dialoge


    Alternativ könnte man noch prüfen, ob der Spieler mit dem ausgewählten Name noch online ist, dann sieht es so aus:
    if(dialogid == DIALOG_TICKETS)
    {
    if(!response) return 1;
    new count = -1;
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(GetPVarInt(i,"Ticket") == 1)
    {
    count++;
    if(count == listitem)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(i, name, MAX_PLAYER_NAME);
    if(strcmp(name, inputtext))
    {
    SendClientMessage(playerid, 0xFF0000FF, "Error: Der Spieler ist nicht mehr online.");
    return 1;
    }
    new string[145];
    format(string, sizeof(string), "Spieler %s (ID: %d) in Zeile %d wurde angeklickt.", SpielerName(i), i, listitem);
    SendClientMessage(playerid, 0xFFFFFFFF, string);
    return 1;
    }
    }
    }
    }
    return 1;
    }
    Das geht allerdings nur so, wenn du im Dialog nur den Name anzeigst, da der inputtext bei einem Listdialog dem Text der Zeile entspricht, die ausgewählt wurde. So wie der Befehl momentan ist, kannst du es so nutzen.

    random(5) gibt der Variable RandomExplosion hier eine zufällige Zahl von *0 - 5.

    Stimmt nicht ganz, bei random(5) ist es von 0 bis 4 (0,1,2,3,4 = 5 Werte).


    Etwas aufgeräumter kann man es so schreiben:
    if(pData[playerid][P_HaveExplosion] == 1)
    {
    switch(random(5))
    {
    case 0,2,4:
    {
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    CreateExplosion(x, y, z, 2, 5.0);
    }
    }
    }
    Dann gibt es eine Explosion, wenn 0, 2 oder 4 raus kommt, und keine Explosion, wenn 1 oder 3 raus kommt.

    Die Fehlermeldung ist auch der Grund, warum du mit dem Server keine Verbindung herstellen kannst.
    Du hast irgendwas an den Einstellungen verbogen, sodass keine Verbindung mehr hergestellt werden kann. Was genau kann ich dir nicht sagen.


    Am besten du entfernst nochmal alles was zu XAMPP gehört (De-Installieren und Installationspfad komplett leeren) und installierst es nach dem Tutorial noch einmal, Schritt für Schritt. Dann sollte es wieder klappen.

    Zwischenfrage zum Verständnis:
    Warum zeigst du beim Befehl /tickets immer 3 Namen pro Zeile an? So kann meinem Verständnis nach doch nicht eindeutig eine Zeile einem Spieler zugeordnet werden, oder? Oder hat das einen anderen Sinn (x-Variable)?

    mysql_fetch_field("kennzeichen",data); format(cInfo[i][kennzeichen], 64, data);


    Das SetVehicleNumberPlate dann direkt unter dem CreateVehicle.

    Prinzipiell alles was irgendwie auf das Array zugreift, in das die Tuning IDs geschrieben werden, da die ja zwar drin sind, aber etwas später weg sind.


    Den genauen Grund kann ich dir aber nicht sagen, das kann vieles sein. Das muss man debuggen und eventuell den Code etwas auseinander nehmen.

    Willkommen auf Breadfish!



    1.)
    Erstelle dazu ein globales Array:
    new sentID[MAX_PLAYERS];


    In dem Befehl dann:
    sentID[pID] = playerid;
    Somit weiß die pID, dass sie von der playerid die Einladung bekommen hat.


    Im Dialog kannst du den Namen dann so ausgeben:
    printf("Fahrlehrer Name: %s", SpielerName(sentID[playerid]));


    2.)
    Poste bitte den Befehl, den du dazu erstellt hast. Analog dazu muss nämlich der Code von OnDialogResponse aufgebaut sein.