Beiträge von Jeffry

    Eine Include kannst du in mehrere Filterscripts/Gamemodes einbauen. Oftmals packt man da Funktionen rein, die in mehreren Codes benötigt werden.
    Includes können nicht kompiliert werden, und können daher auch nicht separat ausgeführt werden, sie müssen in einen GM/FS eingebunden werden.


    Ein Filterscript ist wie ein Gamemode eine vom Server ausführbare Datei.


    https://wiki.sa-mp.com/wiki/Co…erver#Using_Filterscripts
    https://de.wikipedia.org/wiki/Include
    http://www.mikrocontroller.net/articles/Include-Files_(C)

    Füge das hier ganz unten in deinem Gamemode ein:
    stock IsAWheelman(veh)
    {
    for(new i = 0; i < sizeof(WheelVehs); i++)
    {
    if(WheelVehs[i] == veh) return 1;
    }
    return 0;
    }


    Und ändere dann in dem Befehl das IsACopCar zu IsAWheelman.

    Das würde nichts bringen, da ich deine Datenbank nicht habe.


    Ist der Code aus dem anderen Gamemode, in dem es klappt, ein anderer? Oder hast du ihn nur 1:1 kopiert?
    Poste mal aus dem anderen Code (R38) dein SpielerLaden als Vergleich.


    EDIT:
    Was du auch mal versuchen kannst, nutze anstatt dem R39'er Plugin das R38 (und dessen Include zum kompilieren).

    Das Problem kann ich am Code nicht nachvollziehen, bist du sicher, dass du existierende Tickets hast? Dass keine Meldung kommt kann eigentlich nicht sein. Falls doch, füge mal das crashdetect Plugin ein und schau, ob dir das etwas im Server Log ausgibt, wenn keine Meldung kommt, möglicherweise wird ein Array gesprengt.


    Zu deiner Frage:
    Das ist, damit die existierenden Tickets (im Array) zurückgesetzt werden, da du ja alle neu aus der Datenbank lädst.

    Dann versuche es so:
    CMD:bpm(playerid, params[]) {
    new cQuery[102], Reason[80], pID;



    if(sscanf(params,"uS(No reason given)[80]", pID, Reason))
    return SendClientMessage(playerid, COLOR_RED, "Use: /bpm <id> <reason>");

    if(!IsPlayerConnected(pID))
    return SendClientMessage(playerid, COLOR_RED, "Error: Spieler nicht online.");


    if(BPM[pID] == 1) {
    SendClientMessage(pID, -1, "PMs {00FF00}unblocked.");
    BPM[pID] = 0;
    BPMReason[pID] = "";
    return 1;
    }


    format(cQuery, sizeof(cQuery), "PMs{FF0000} blocked.{FFFFFF} Reason: {FF0000}%s", Reason);
    SendClientMessage(pID, -1, cQuery);


    BPM[pID] = 1;
    return 1;
    }

    Ich erkenne den Sinn hier nicht, da man vieles schon z.B. in der DB abarbeiten kann und dies perfomanter ist.

    Beispiel:
    Wenn er eine Liste von X Clans hat, deren Namen er per Befehl anzeigen will (z.B. Auswahlliste um Details über den Clan zu sehen), dann würde es keinen Sinn machen, jedes mal wenn der Befehl ausgeführt wird die Datenbank anzusprechen, das geht mehr auf die Ressourcen, als die X Clans in ein Array zu speichern, und die Datenbank nur anzusprechen, wenn sich an den Namen etwas ändert.

    Nutzt der Code aus dem du es raus genommen hast ein anderes Plugin, wenn ja, welches Plugin wird jeweils genutzt?


    Dieses Query hier scheint 2 Sekunden zu benötigen:
    format(query, sizeof(query), "SELECT * FROM accounts_scheine WHERE Username = '%s'", getPlayerName(playerid));
    mysql_function_query(dbhandle, query, true, "SpielerLaden", "ii", playerid,3);


    Klappt es flüssiger, wenn du das mal entfernst und stattdessen direkt
    OnPlayerLogin(playerid);
    aufrufst?

    Füge bei deinem LoadTickets vor dem Query das hier ein:
    for(new i = 0; i < sizeof(TicketInfo); i++) TicketInfo[i][t_id] = 0;



    Ändere außerdem:
    format(string1, sizeof(string1), "{FFFFFF}%s\t%d\t%s\t%s\t%s\n",string1,TicketInfo[i][t_id],TicketInfo[i][t_betreff],TicketInfo[i][t_absender],TicketInfo[i][t_grund]);
    zu:
    format(string1, sizeof(string1), "%s%d\t%s\t%s\t%s\n",string1,TicketInfo[i][t_id],TicketInfo[i][t_betreff],TicketInfo[i][t_absender],TicketInfo[i][t_grund]);



    Sowie:
    new string1[9000];
    zu:
    new string1[9000];
    format(string1, sizeof(string1), "{FFFFFF}");



    Der Code zum Löschen-Dialog muss so aussehen:
    if(dialogid == DIALOG_TICKET_LOESCHEN)
    {
    if(response)
    {
    if(!IsNumeric(inputtext))
    {
    SendClientMessage(playerid, COLOR_WHITE, "{FF7A7A}FEHLER{FFFFFF}: Bitte Ticket-ID eingeben um löschen zu können!");
    new str1[100];
    format(str1, sizeof(str1), "{FFFFFF}Möchtest du dieses Ticket löschen?\n{FF7A7A}Hinweis{FFFFFF}: Ticket-ID eingeben um löschen zu können.");
    ShowPlayerDialog(playerid, DIALOG_TICKET_LOESCHEN, DIALOG_STYLE_INPUT, "Support Ticket {6DCCFF}löschen",str1, "Ausführen", "Beenden");
    }
    else
    {
    new txt = strval(inputtext);
    for(new i = 0; i < sizeof(TicketInfo); i++)
    {
    if(TicketInfo[i][t_id] == txt)
    {
    PlayerNeedsHelp[GetPlayerIdFromName(TicketInfo[i][t_absender])] = 0;
    //printf("Eingabe: %i", txt);
    //printf("Vor dem löschen: %i", TicketInfo[i][t_id]);
    TicketInfo[i][t_id] = 0;
    //printf("ID löschen: %i", TicketInfo[i][t_id]);
    new query[156];
    format(query, sizeof(query), "DELETE FROM `ingameticket` WHERE id='%i'", txt);
    mysql_function_query(dbhandle, query, true, "LoadTickets", "");
    SendClientMessage(playerid, COLOR_WHITE, "Du hast das Ticket {9FFF92}erfolgreich{FFFFFF} gelöscht!");
    return 1; //Hinzugefügt
    }
    }
    SendClientMessage(playerid, COLOR_WHITE, "{FF7A7A}Falsche{FFFFFF} Ticket-ID angabe!"); //Aus der Schleife geholt
    return 1; //Hinzugefügt
    }
    }
    else SendClientMessage(playerid, COLOR_WHITE, "{FF7A7A}Abgebrochen{FFFFFF}.");
    }

    Dann vergleiche mal ob die gleichen Server Versionen installiert sind, und ob in den scriptfiles (Ordner) die gleichen Daten vorhanden sind.


    Setze dich ansonsten mal mit dem Support dort in Verbindung, wenn der 1:1 gleiche Code beim einen Host geht und beim anderen nicht. Dann liegt es auf jeden Fall nicht am Code.

    Um welchen dieser Zeitabschnitte geht es jetzt? Die sind alle relativ nahe beieinander, ich kann da nicht wirklich eine essentielle Verzögerung erkennen. Der Vorgang vom Login-Button-Klick bis zum fertigen Laden dauert - wenn ich das richtig interpretiere - 4 Sekunden. Das ist viel, aber am Code ist nichts zu erkennen, was falsch ist. Für mich sieht das so aus, als reagiert entweder die Datenbank oder der Server sehr träge.


    Auf den Eigentlichen Script ( wo ich es rausgenommen habe aber alte Mysql Version ) geht es also muss es am Code Liegen

    Wie meinst du das? Kannst du den alten Code zeitgleich testen, dort geht es?
    Ging es mit dem neuen Code vor der Neuinstallation deines PCs auch?

    Habe nun gemerkt das ich den LimitGlobalChatRadius auf 0 gesetzt hatte[...]. Direkt ausgeklammert und siehe da, es funktioniert!

    Super!
    Deine Vorgehensweise war perfekt so, genau so findet man solche doch recht unerklärlichen Fehler, zumindest wie sie auf den ersten Blick scheinen.
    Vielen Dank für die Beschreibung zur Lösungsfindung sowie die Lösung, wenn mal wieder jemand dieses Problem hat, dann hilft dies sicher sehr!