Beiträge von Jeffry

    Die Zeit in der Datenbank sieht doch richtig aus, oder was ist daran falsch? Es ist der Unix Timestamp, plus die gebannte Zeit.


    Poste bitte dein OnQueryFinish nochmal, sowie dein OnPlayerConnect, wie beides jetzt aussieht.

    Dann bist du wahrscheinlich nicht an der Position.
    Füge es mal so ein, und poste dann was im Log steht:
    forward CheckPos();
    public CheckPos()
    {
    printf("CheckPos aufgerufen");
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i)) printf("connected: %d / range: %d", IsPlayerInRangeOfPoint(i, 5.0,1911.7549,-2502.7502,13.5391));
    if(IsPlayerInRangeOfPoint(i, 5.0,1911.7549,-2502.7502,13.5391))
    {
    printf("SetPos!");
    SetPlayerPos(i,1856.6919,-2447.9382,51.0390);
    }
    }
    return 1;
    }

    Corvus:
    stock EnterToLog(const log[], const logtext[])
    {
    new filestring[512];
    format(filestring, sizeof filestring, "logs/%s.txt", log);
    new File:file = fopen(filestring, io_append);
    fwrite(file, logtext);
    fclose(file);
    return 1;
    }


    @[LnD]JustMe.77:
    Timer bei OnGameModeInit gestartet?

    Ok, das ist doch gut, dann funktioniert der Code doch, es stimmt nur die Reihenfolge nicht, das bezieht sich aber genau auf den Teil den ich schon angesprochen habe.
    Der Login Dialog muss im else-Teil von "if(rows)" angezeigt werden (siehe meinen Code).


    Probiere das mal. Nimm den Login Dialog aus OnPlayerConnect raus und setze es an die von mir markierte Stelle.

    Mach das mal wieder weg, dann wie ich gesagt habe:


    OnGameModeInit:
    SetTimer("CheckPos", 200, true);


    Unten im Code (gaaaanz unten, in die allerletze Zeile der Datei):
    forward CheckPos();
    public CheckPos()
    {
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerInRangeOfPoint(i, 5.0,1911.7549,-2502.7502,13.5391))
    {
    SetPlayerPos(i,1856.6919,-2447.9382,51.0390);
    }
    }
    return 1;
    }

    Es reicht wenn du ihn, wie du vorhin gesagt hast, bei OnGameModeInit startest, einmalig.
    Dafür habe ich dir den Code extra angepasst.
    Das ist auch ressourcentechnisch gesehen die beste Variante.

    Der Timer soll ja aber für die anderen Spieler auf dem Server noch laufen, oder hast du nur 1 Fahrzeug auf dem Server? ;)
    Dass es den Spieler nicht zuspammt, habe ich hiermit abgefangen:
    if(vehiclehp <= 350 && engine == VEHICLE_PARAMS_ON)


    Die Nachricht kommt nur, wenn der Motor an ist, du brauchst den Timer also nicht zu killen.

    Unter die Includes:
    new meinPuckup;


    public OnGameModeInit()
    {
    meinPickup = CreatePickup(1273, 1, 1911.2902,-2505.4646,13.5391, -1);


    Und das hier dann so:
    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    if(pickupid == meinPickup)
    {
    SetPlayerPos(playerid,1856.6919,-2447.9382,51.0390);
    return 1;
    }
    return 1;
    }

    Das Anzeigen des Login Dialogs musst du in OnQueryFinish packen, da es ja nach der Prüfung auf einen Ban geschehen soll.
    Ich hab es dir hier markiert, wo es rein muss:

    Spoiler anzeigen
    public OnQueryFinish(index[],sqlresultid,extraid,SconnectionHandle)
    {
    new rows,fields;
    switch(sqlresultid)
    {
    case MySQL_Check_Ban:
    {
    new zeit,query[126],Admin[24],Grund[126],result[25];
    cache_get_data(rows,fields);
    if(rows)
    {
    cache_get_field_content(0,"Grund",Grund);
    cache_get_field_content(0,"Admin",Admin);
    cache_get_field_content(0,"Zeit",result);
    zeit = strval(result);
    if(zeit == -1)
    {
    format(query,sizeof(query),"%s, du wurdest vom Server Gesperrt.\nFalls du zu unrecht Gesperrt wurdest,\nmelde dich bei einem Teammitglied im Forum, oder schreibe uns im Teamspeak³ an!\n\nGrund:%s\nTeammitglied:%s",Spielername(extraid),Grund,Admin);
    ShowPlayerDialog(extraid,Dialog_Gebannt,DIALOG_STYLE_MSGBOX,"{FFFFFF}SmR: {308EAD}Gesperrt",query,"Verlassen","");
    TogglePlayerControllable(extraid,0);
    KickUser(extraid,"System", "Spieler wurde Gebannt!");
    return 1;
    }
    else
    {
    if(gettime() < zeit)
    {
    new timebanned = zeit-gettime();
    SendClientMessage(extraid,0xEE8613FF,"Verbindung unterbrochen...");
    if(floatround(timebanned/86400) > 0)//Tage
    {
    format(query,sizeof(query),"%s, du wurdest vom Server Gesperrt.\nFalls du zu unrecht Gesperrt wurdest,\nmelde dich bei einem Teammitglied im Forum, oder schreibe uns im Teamspeak³ an!\n\nDauer: %i\nGrund:%s\nTeammitglied:%s",Spielername(extraid),timebanned/86400,Grund,Admin);
    }
    else if(floatround(timebanned/3600) > 0)//Stunden
    {
    format(query,sizeof(query),"%s, du wurdest vom Server Gesperrt.\nFalls du zu unrecht Gesperrt wurdest,\nmelde dich bei einem Teammitglied im Forum, oder schreibe uns im Teamspeak³ an!\n\nDauer: %i\nGrund:%s\nTeammitglied:%s",Spielername(extraid),timebanned/3600,Grund,Admin);
    }
    else if(floatround(timebanned/60) > 0 || floatround(timebanned%60) > 0)//Minuten,Sekunden
    {
    format(query,sizeof(query),"%s, du wurdest vom Server Gesperrt.\nFalls du zu unrecht Gesperrt wurdest,\nmelde dich bei einem Teammitglied im Forum, oder schreibe uns im Teamspeak³ an!\n\nDauer: %i\nGrund:%s\nTeammitglied:%s",Spielername(extraid),timebanned/60,timebanned%60,Grund,Admin);
    }
    ShowPlayerDialog(extraid,Dialog_Gebannt,DIALOG_STYLE_MSGBOX,"{FFFFFF}SmR: {308EAD}Gesperrt",query,"Verlassen","");
    TogglePlayerControllable(extraid,0);
    KickUser(extraid,"System", "Spieler wurde Gebannt!");
    }
    else
    {
    format(query,sizeof(query),"DELETE FROM `Banned` WHERE IP ='%s' OR Name = '%s'",SpielerIP(extraid),Spielername(extraid));
    mysql_function_query(DBHandle,query,false,"","");
    }
    return 1;
    }
    }
    else
    {
    //Login Dialog anzeigen HIER
    }
    }
    }
    return 1;
    }


    Wenn es dann noch immer nicht klappt, poste mal den MySQL Log.

    Puuh, möglicherweise fehlt dir dann auf deinem Windows System irgendwas (.Net oder MS Visual C++).
    Weder am Code noch am Log ist was falsch (ist ja auch klar, sonst würde es auf Linux auch nicht gehen).


    Hast du es mal auf einem anderen Recher probiert?


    Ansonsten könntest du es mit der manuellen Split-Methode machen, siehe hier:
    MYSQL Lädt falsche werte


    Ist zwar umständlicher, aber vielleicht geht das ja.


    Oder, was natürlich das beste wäre: Upgrade den Code auf MySQL R39-2.

    Müsste so passen:
    ocmd:dm(playerid,params[])
    {
    if(inDM[playerid] == 1)
    {
    SendClientMessage(playerid,COLOR_ORANGE,"** Du kannst diesen Befehl nicht benuzten, weil du bereits in einer Arena bist. **");
    return 1;
    }
    if(busy[playerid] == 1)
    {
    SendClientMessage(playerid,COLOR_ORANGE,"** Du kannst diesen Befehl nicht benuzten, weil du im Gefängnis sitzt. **");
    return 1;
    }
    SetPlayerPos(playerid,1939.1534,-1771.2437,19.5250);
    SetPlayerFacingAngle(playerid, 88.5281);
    busy[playerid] = 1;
    inDM[playerid] = 1;
    return 1;
    }


    ocmd:exit(playerid,params[])
    {
    if(inDM[playerid] == 0)
    {
    SendClientMessage(playerid,COLOR_ORANGE,"** Du kannst diesen Befehl nicht benuzten, weil du nicht in einer Arena bist. **");
    return 1;
    }
    if(inJail[playerid] == 0)
    {
    SetPlayerPos(playerid,1763.2980,-1896.6514,13.5625);
    SetPlayerFacingAngle(playerid, 276.7087);
    busy[playerid] = 0;
    inDM[playerid] = 0;
    return 1;
    }
    if(busy[playerid] == 1)
    {
    SendClientMessage(playerid,COLOR_ORANGE,"** Du kannst diesen Befehl nicht benuzten, weil du im Gefängnis sitzt. **");
    return 1;
    }
    return 1;
    }

    Du darfst den Timer nicht killen, dann läuft der ja nicht mehr.
    Das mit der Datenbank kann man ja noch hinzufügen, wenn du mir sagst, wie du die Datenbankfahrzeuge aus der Datenbank lädst.

    Ja, klar, das geht so ja auch nicht, deshalb habe ich es weg gemacht.
    Warum hast du den Code verändert? :rolleyes:


    Außerdem geben die Schleifen so keinen Sinn. Versuche es doch mal mit dem Code den ich dir gegeben habe, ohne was zu ändern.

    Schreibe es mal so:
    forward CheckHealth();
    public CheckHealth()
    {
    new engine,lightss,alarm,doors,bonnet,boot,objective,vehicleid,Float:vehiclehp;
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i) && IsPlayerInAnyVehicle(i))
    {
    vehicleid = GetPlayerVehicleID(i);
    GetVehicleParamsEx(vehicleid,engine,lightss,alarm,doors,bonnet,boot,objective);
    GetVehicleHealth(vehicleid,vehiclehp);
    if(vehiclehp <= 350 && engine == VEHICLE_PARAMS_ON)
    {
    SendClientMessage(playerid,0xFF6900AA,"Dieses Fahrzeug hat einen Motorschaden! Du kannst nicht mehr weiterfahren.");
    SetVehicleHealth(vehicleid,350.0);
    MotorDown[vehicleid] = 1;
    VehicleStarted[vehicleid] = 0;
    SetVehicleParamsEx(vehicleid,VEHICLE_PARAMS_OFF,lightss,alarm,doors,bonnet,boot,objective);
    }
    }
    }
    return 1;
    }