Beiträge von Jeffry

    Auf Nachfrage von @[LnD]JustMe.77 habe ich mir gedacht ich schreibe das kurz für den DIALOG_STYLE_MSGBOX zusammen und poste es hier, falls mal wieder jemand danach sucht bzw. jemand es benötigt.


    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.



    Unter den Includes die Variablen sowie der Hook für die Dialoge:
    #define DIALOG_TEST 1337
    new testCount[MAX_PLAYERS];


    new pDialog[MAX_PLAYERS] = {-1,...};
    stock my_ShowPlayerDialog(playerid, dialogid, style, caption[], info[], button1[], button2[]) //©Jeffry
    {
    if(!IsPlayerConnected(playerid)) return 0;
    pDialog[playerid] = dialogid;
    ShowPlayerDialog(playerid, dialogid, style, caption, info, button1, button2);
    return 1;
    }


    #if defined _ALS_ShowPlayerDialog
    #undef ShowPlayerDialog
    #else
    #define _ALS_ShowPlayerDialog
    #endif
    #define ShowPlayerDialog my_ShowPlayerDialog


    Bei OnFilterScriptInit/OnGameModeInit:
    SetTimer("ReshowDialog", 460, true);


    Bei OnPlayerDisconnect:
    pDialog[playerid] = -1;


    Hier einen Test-Befehl für OnPlayerCommandText:

    if(!strcmp(cmdtext, "/dialog", true))
    {
    testCount[playerid] = gettime();
    ShowPlayerDialog(playerid, DIALOG_TEST, DIALOG_STYLE_MSGBOX, "Test Dialog", "Du hast diesen Dialog offen seit: 00:00", "Ok", "Abbrechen");
    return 1;
    }


    Dann der Teil zu OnDialogResponse:
    //Ganz oben als erstes in OnDialogResponse:
    pDialog[playerid] = -1;
    Sowie:if(dialogid == DIALOG_TEST)
    {
    if(response)
    {
    SendClientMessage(playerid, 0xFFFFFFFF, "Hallo Welt!");
    }
    else
    {
    SendClientMessage(playerid, 0xFF0000FF, "Hallo Welt!");
    }
    return 1;
    }


    Und dann ganz unten im Filterscript/Gamemode:
    forward ReshowDialog();
    public ReshowDialog()
    {
    new str[128];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(pDialog[i] == -1) continue;
    if(pDialog[i] == DIALOG_TEST)
    {
    new t = gettime() - testCount[i];
    format(str, sizeof(str), "Du hast diesen Dialog offen seit: %02d:%02d", t/60, t%60);
    ShowPlayerDialog(i, DIALOG_TEST, DIALOG_STYLE_MSGBOX, "Test Dialog", str, "Ok", "Abbrechen");
    }
    //andere Dialoge...
    }
    return 1;
    }



    Oder alternativ hier das ganze als kompletten Filterscript:

    Wenn du nur INSERT als Anweisung hast, dann kann das nicht funktionieren, sondern dir werden lauter Errors im MySQL Log ausgegeben, bzw. das Fahrzeug X-Mal erstellt, je nach Datenbank Aufbau.


    Was aber für mich nicht schlüssig ist, ist, dass du ja den gleichen Code aufrufst, daher sollte das dann auch gleich funktionieren, insofern es dann tut.


    Poste bitte mal alles was mit dem Speichern der Fahrzeuge zu tun hat.

    Die Funktion GetVehicleModelInfo gibt die Koordinaten des Tankdeckels ausgesehen von der Mitte des Fahrzeugs zurück, das ist also nur ein Offset. Daher musst du die tatsächlichen Koordinaten noch dazu rechnen, und die Abfrage dann mit IsPlayerInRangeOfPoint machen. Ich habe zwar noch nie mit der Funktion GetVehicleModelInfo gearbeitet, aber insofern ich sie dann richtig verstehe, sollte es so aussehen:
    if(strcmp(cmd, "/tanken", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    if(gPlayerLogged[playerid] == 0) return SendClientMessage(playerid, COLOR_WHITE, "Du bist {FF8484}nicht{FFFFFF} angemeldet!");
    new Float:x, Float:y, Float:z, Floatxx, Float:yy, Float:zz, vid = GetPlayerVehicleID(playerid);
    GetVehiclePos(vid, x, y, z);
    GetVehicleModelInfo(GetVehicleModel(vid), VEHICLE_MODEL_INFO_PETROLCAP, xx, yy, zz);
    x += xx;
    y += yy;
    z += zz;
    if(IsPlayerInRangeOfPoint(playerid, 2.0, x, y, z))
    {
    SendClientMessage(playerid,COLOR_WHITE," Dein Fahrzeug wird {A4FF85}betankt{FFFFFF}, Bitte warten....");
    }
    else SendClientMessage(playerid, COLOR_WHITE, "Du bist {FF8484}nicht{FFFFFF} am Tankdeckel des Fahrzeuges!");
    }
    return 1;
    }


    Gegebenenfalls musst du den Range (2.0) noch anpassen.

    Also bei mir klappt es ohne Probleme, habe genau die gleichen Bezeichnungen genommen.
    Du kannst ja mal versuchen, dir das SA-MP Paket nochmal neu herunterzuladen, und es dort einzufügen.


    Dann öffne die pawno.exe und wähle deinen Code über "öffnen" aus, achte darauf, dass es der richtige Pfad ist, wenn du den Code vielleicht mehrmals hast. Ging mir mal so, da habe ich in einem Backup herumgewerkelt, und hab es nicht gemerkt, dann kam auch so ein unerklärlicher Fehler zustande.


    Die Funktion sollte übrigens so aussehen:
    stock PlayerName(playerid){
    new str[MAX_PLAYER_NAME];
    GetPlayerName(playerid, str, sizeof(str));
    return str;
    }

    Ja, das meinte ich.


    Bei der Datenbankstruktur, mach da bei der Slot ID das "NOT NULL" weg, und erstelle die Tabelle dann nochmal neu. Dann sollte der Eintrag mit Slot ID 0 da sein.

    Als Hinweis an euch beide @reaL. und @PrideGame :


    Mit der Umstellung auf WBB4 wurden alle Themen, die zum Zeitpunkt davor gepostet wurden auf erledigt gestellt, daher sind alle Themen vor September 2015 auf erledigt.
    Dazu kam noch, dass in der Zeit um Weihnachten/Neujahr nochmals eine kleine Änderung war, die erneut alle Themen, die bis dahin gepostet waren, auf erledigt gesetzt hat. Deshalb sind nun alle Themen, die vor 2016 gepostet wurden auf erledigt. Man kann also bei den älteren Threads nicht wirklich sagen, ob sie nun erledigt sind oder nicht.


    Aber: Dieses Thema ist nun fast ein Jahr alt, wäre das noch "aktuell", dann hätte sich der Threadstarter sicher nochmals gemeldet. Gegebenenfalls macht es mehr Sinn, wenn jemand diese Systeme für ihn erstellen will, ihn per PN/Mail zu kontaktieren, die Chance ist größer, dass das gesehen wird.

    Das ist alles korrekt, für mich ist das nicht schlüssig, warum du in Zeile 1 (Kommentar) einen Error bekommst.
    Was du mal probieren kannst ist, dir den aktuellen Server-Ordner nochmal runterzuladen (sa-mp.com) und dann mit der dort beigelegten pawno.exe deinen Code versuchen zu kompilieren, indem du deinen Code dort zu den gamemodes einfügst.
    Geht es dann?


    Wenn nicht, dann kann ich dir anbieten, dass du mir in PN mal den ganzen Code schickst, via Dropbox/OneDrive/GoogleDrive/... dann versuche ich mal bei mir ob ich es kompilieren kann.

    Das Problem taucht in aller Regel dann auf, wenn zu viele Spieler zu vielen Objekten nahe sind, denn es können auch mit Streamer nur 1000 Objekte angezeigt werden, die die zu weit weg sind werden solange eben temporär gelöscht.
    Dies kann auch dadurch verursacht werden, dass zu viele Objekte noch mit CreateObject anstatt mit CreateDynamicObject erstellt werden, die sind nämlich dauerhaft dann da. Am besten man hat alle Objekte mit CreateDynamicObject erstellt.


    In seltenen Fällen hilft es auch, das Streamer Plugin zu aktualisieren, ansonsten mal versuchen, weniger Maps zu verwenden, vor allem diese nicht, die in einem kleinen Umkreis Unmengen an Objekten nutzen.

    Dann leere bitte deinen MySQL Log, lösche die Tabelle und mache das gleiche nochmal.
    Dann poste den MySQL Log, möglicherweise wird da ein Fehler ausgegeben.

    Hast du die Tabelle gelöscht und neu erstellt? Wenn nicht, mache das mal.
    Dem Code nach passt es eigentlich, die Zeile mit dem Slot 0 sollte angelegt werden, wenn es die Tabelle erlaubt. Lösche die mal und lasse sie neu erstellen.