Beiträge von Jeffry

    Erstellst du die Automaten auch per Befehl aus dem Spiel heraus? Wenn ja, dann musst du die Variable da auch angeben, für die objectID.

    ATMInfo[i][objectID] = CreateDynamicObject(19324, ATMInfo[i][aX], ATMInfo[i][aY], ATMInfo[i][aZ] - 0.5, 0, 0, ATMInfo[i][aA]);


    Dann kannst du es darüber auch wieder entfernen.

    Dann mache bitte mal folgendes:
    Setze zwischen jede Zeile im Befehl einen print mit einer Zahl, also so:
    print("1");
    //Code
    print("2");
    //...


    Dann führe den Befehl aus und schau im Log nach, bis zu welchem print es dir ausgegeben wird. Poste dann eventuell den Log und den veränderten Befehl.

    Zuvor ging es doch, oder?
    Die Änderung die ich gemacht habe sollte den Fehler eigentlich nicht verursachen, habe nichts am format geändert.
    Hast du daran etwas geändert?


    Siehst du diese Nachricht noch?
    SendClientMessage(playerid,CLR_BLUE,"Erfolgreich umgeparkt. Euer Fraktauto wird nun immer hier spawnen!");


    Sind eventuell noch anderen format's in dem Befehl?

    Ich hätte auch noch eine Frage ob das eine gute Weise ist abzufragen, ob 1. die vID die gleiche wie in der DB ist und ob die fID vom Spieler die gleiche ist wie in der DB der Besitzer, oder ob das viel besser geht.

    Mache es über die vehicleid, also so:
    //Auszug aus /fpark
    new id=GetPlayerVehicleID(playerid);
    new vID=GetVehicleModel(id);
    new fID=pInfo[playerid][fraktion];
    for(new i=0;i<sizeof(fcInfo);i++)
    {
    printf("vID ist %i und fmodel ist %i",vID,fcInfo[i][fmodel]); // Das waren nur ein paar Überprüfungsversuche ob alles klappt
    printf("fID ist %i und fbesitzer ist %i",fID,fcInfo[i][fbesitzer]);
    if(id==fcInfo[i][id_x])
    {
    GetVehiclePos(fcInfo[i][id_x],fcInfo[i][fc_x],fcInfo[i][fc_y],fcInfo[i][fc_z]);
    GetVehicleZAngle(fcInfo[i][id_x],fcInfo[i][fc_r]);
    new query[256];
    format(query,sizeof(query),"UPDATE fraktautos SET x='%f',y='%f',z='%f',r='%f' WHERE besitzer='%i' AND id='%i'",fcInfo[i][fc_x],fcInfo[i][fc_y],fcInfo[i][fc_z],fcInfo[i][fc_r],fID,fcInfo[i][fdb_id]);
    mysql_function_query(dbhandle,query,false,"","");
    SendClientMessage(playerid,CLR_BLUE,"Erfolgreich umgeparkt. Euer Fraktauto wird nun immer hier spawnen!");


    Dann sollte auch das beschriebene Problem nicht mehr auftreten.

    Laut dem Log wurde es sofort ausgeführt:

    Zitat

    [13:40:24] UPDATE accounts SET level = '1', money = '10000', adminlevel = '4', banned = '0' WHERE id = '1'
    [13:40:24] Server wird beendet.
    [13:40:24] UPDATE accounts SET level = '1', money = '10000', adminlevel = '4', banned = '0' WHERE id = '1'


    Die erste Zeile ist die Speicherung vom Befehl.
    Die zweite Zeile ist der Print aus dem public, das der Timer aufruft (keine Sekunde vergangen).
    Die dritte Zeile ist die Speicherung durch den GMX (OnPlayerDisconnect).


    Zwischen 1 und 2 muss etwas mehr Zeit liegen, damit das erste Query ausgeführt werden kann => Keine Warnung mehr (1. Warnung).
    Dann musst du bei dem public Server_Restart eine globale Variable auf "true" setzen, und diese fragst du dann bei OnPlayerDisconnect ab:
    if(serverInRestart == true) return 1;
    Das verhindert dann, dass doppelt gespeichert wird und somit, dass die zweite Warnung auftritt.

    Warum er jedoch 2 mal speichert, dafür könnte es nur eine Erklärung geben.
    Bei restart werden alles disconnected, dementsprechen speichert er vorher wegen der for-Schleife

    Ja, der GMX ruft OnPlayerDisconnect für alle Spieler auf.
    Prinzipiell würde ich mich daran aber nicht stören lassen, besser es speichert doppelt, als gar nicht.



    Um das Warning wegzubekommen, habe ich aber noch keine Lösung.

    Poste bitte den Server Log mit dem Print den ich dir noch in den Befehl eingebaut habe.
    Da der GMX sofort ausgefürt wurde als der Befehl eingegeben wurde kommt die Warnung, da keine Verbindung mehr vorhanden war.

    Versuche es so:
    ocmd:restart(playerid, params[]){
    new str[128], ms, second, minute;
    if(pData[playerid][pAdminLevel] < 4) return SendClientMessage(playerid, COLOR_RED, "Du darfst diesen Befehl nicht nutzen!");
    if(sscanf(params, "i", ms)) return SendClientMessage(playerid, COLOR_LGREY, "Nutze: /changepw [Zeit in Minuten(60000 = 1 Minute)]");
    minute = (ms / 1000)/60; second = ms / 1000;
    format(str, sizeof(str), "Der Server wird in %i Minuten und %i Sekunden neugestartet. Außerdem werden alle eure Daten gespeichert.", minute, second);
    SendClientMessageToAll(COLOR_ORANGE, str);
    for(new i = 0; i < MAX_PLAYERS; i++){
    if(!IsPlayerConnected(i) || IsPlayerNPC(i)) continue;
    Save_Player_Data(i);
    }
    printf("Starte Server in %d ms neu.", ms);
    SetTimerEx("Server_Restart", ms, false, "i", playerid);
    return 1;
    }


    Bitte gebe bei dem Befehl "5000" ein. Laut dem Log wurde "Server_Restart" sofort ausgeführt.