Beiträge von [EGC] selEcT

    ne, er testet jedes mal, wenn ein Spieler Online kommt, ob die verbindung noch da ist:


    OnPlayerConnect
    MySQLCheck();


    MySQLCheck()

    stock MySQLCheck()
    {
    if(mysql_ping()==0)
    {
    return 1;
    }
    else
    {
    print("MySQL: Verbindung abgebrochen, neuer Versuch...");
    mysql_close();
    MySQLConnect();
    if(mysql_ping()==0)
    {
    print("MySQL: Verbindung zur Datenbank hergestellt.");
    return 1;
    }
    else
    {
    print("MySQL: Verbindung zur Datenbank konnte nicht hergestellt werden.");
    print("MySQL: Server wird beendet.");
    SendRconCommand("exit");
    return 0;
    }
    }
    }


    MySQLConnect()



    stock MySQLConnect()
    {
    new arrCoords[19][64], strFromFile2[256], host[32], user[32], pass[32], db[32];
    new File: file = fopen("config/mysql.cfg", io_read);
    if (file)
    {
    fread(file, strFromFile2);
    spliter(strFromFile2, arrCoords, '|');
    strmid(host, arrCoords[0], 0, strlen(arrCoords[0]), 255);
    strmid(user, arrCoords[1], 0, strlen(arrCoords[1]), 255);
    strmid(pass, arrCoords[2], 0, strlen(arrCoords[2]), 255);
    strmid(db, arrCoords[3], 0, strlen(arrCoords[3]), 255);
    fclose(file);
    }
    else
    {
    print("Datei 'scriptfiles/config/mysql.cfg' wurde nicht gefunden.");
    print("Server wird beendet.");
    SendRconCommand("exit");
    return 0;
    }
    print("---------------MYSQL-Connection----------------");
    print("MySQL: Verbindung zur Datenbank wird hergestellt...");
    new MySQL:connection = mysql_init();
    mysql_connect(host, user, pass, db, connection);
    if(mysql_ping()==0)
    {
    print("MySQL: Verbindung zur Datenbank hergestellt.");
    print("-----------------------------------------------");
    print(" ");
    return 1;
    }
    else
    {
    print("MySQL: Verbindungsproblem, neuer Versuch...");
    mysql_connect(host, user, pass, db, connection);
    if(mysql_ping()==0)
    {
    print("MySQL: Verbindung zur Datenbank hergestellt.");
    return 1;
    }
    else
    {
    print("MySQL: Verbindung zur Datenbank konnte nicht hergestellt werden.");
    print("MySQL: Server wird beendet.");
    SendRconCommand("exit");
    return 0;
    }
    }
    }


    edit: das funktioniert so ja richtig, aber halt nach einer zeitlang irgendwie dann nicht mehr, dann stürzt der server ab.. oder muss ich irgendwie einen timer einbauen, der jede 10 minuten die verbindung prüft?

    Hallo zusammen


    Irgendwie ein bisschen komisch.


    Ich starte den Server, alles wird geladen ganz normal, ich kann connecten, geht, bekomme meine daten, geht auch. Dann spiel ich (oder jemand anders) ne weile und geh raus. Dann bleibt der server einige zeit leer und niemand ist drauf... der server läuft immernoch.. dann kommt nach vielleicht 5 stunden wieder einer, mysql versucht sich zu verbinden, schafft dies auch und stürzt dann laut log ab:



    warum macht der das? wie kann ich das ändern? Ist das plugin von strickenkid..


    MFG

    hab ich mir auch schon gedacht.


    if(PlayerToPoint(3, playerid,HouseInfo[i][hExitx], HouseInfo[i][hExity], HouseInfo[i][hExitz]) && GetPlayerVirtualWorld(playerid) == i)
    {
    SetPlayerInterior(playerid,0);
    SetPlayerPos(playerid,HouseInfo[i][hEntrancex],HouseInfo[i][hEntrancey],HouseInfo[i][hEntrancez]);


    geht aber auch nicht so richtig.


    Beim eintreten in ein Haus geb ich dem Spieler die Virtualworld der id des hauses, also haus 1 hat vw 1 etc.


    //edit: ich find einfach nichts was falsch sein könnte. Am anfang speichert er alles von einer mysql tabelle in den variablen. das "i" sollte doch immer die gleiche nummer sein, oder ist die for schleife schneller als das spiel reagiert (kA..)?


    Mehr Codes wären nicht schlecht!
    Ich kann so keinen fehler sehen.


    und was für ein Code brauchst du mehr..?


    //edit: neue erkenntnis: wenn ich mit /houseo zu jedem haus springe, dann springt er immer zu einem anderen, also sollte eigentlich die variablenzuweisung stimmen..


    hier noch der gesamte code zum rein und rausgehen (per taste):



    for(new i = 0; i < sizeof(HouseInfo); i++)
    {
    if(PlayerToPoint(3, playerid,HouseInfo[i][hExitx], HouseInfo[i][hExity], HouseInfo[i][hExitz]) && GetPlayerVirtualWorld(playerid) == i)
    {
    SetPlayerPos(playerid,HouseInfo[i][hEntrancex],HouseInfo[i][hEntrancey],HouseInfo[i][hEntrancez]);
    SetPlayerInterior(playerid,0);
    PlayerInfo[playerid][pInt] = 0;
    PlayerInfo[playerid][pLocal] = 255;
    SetPlayerVirtualWorld(playerid,0);
    if(HouseInfo[i][hHel] == 1)
    {
    new Float:tempheal;
    GetPlayerHealth(playerid,tempheal);
    if(tempheal < 100.0) { SetPlayerHealth(playerid,100.0); }
    return 1;
    }
    }
    else if (PlayerToPoint(3, playerid,HouseInfo[i][hEntrancex], HouseInfo[i][hEntrancey], HouseInfo[i][hEntrancez]))
    {
    if(PlayerInfo[playerid][pPhousekey] == i || HouseInfo[i][hLock] == 0)
    {
    SetPlayerInterior(playerid,HouseInfo[i][hInt]);
    SetPlayerPos(playerid,HouseInfo[i][hExitx],HouseInfo[i][hExity],HouseInfo[i][hExitz]);
    GameTextForPlayer(playerid, "~w~Willkommen zuhause", 5000, 1);
    PlayerInfo[playerid][pInt] = HouseInfo[i][hInt];
    PlayerInfo[playerid][pLocal] = i;
    SetPlayerVirtualWorld(playerid,i);
    return 1;
    }
    else
    {
    GameTextForPlayer(playerid, "~r~Geschlossen", 5000, 1);
    return 1;
    }
    }
    }


    //edit: kann es sein, das es nur nicht geht, weil alle das selbe interior haben? Aber bei einigen anderen Leuten geht das wahrscheinlich auch, oder net?
    Ich hab was rausgefunden: wenn man bei einem haus steht, das das selbe interior hat, kommt man trotzdem beim ersten Haus mit diesem Interior raus, sollte ja nicht so sein oder?!

    Hallo leute.


    Ich kauf ein Haus. Ich werde ins Haus gespawnt. Ich gehe raus. ABER ich lande beim Haus gegenüber?! Warum passiert das?


    So geh ich raus:


    if(PlayerToPoint(3, playerid,HouseInfo[i][hExitx], HouseInfo[i][hExity], HouseInfo[i][hExitz]))
    {
    SetPlayerInterior(playerid,0);
    SetPlayerPos(playerid,HouseInfo[i][hEntrancex],HouseInfo[i][hEntrancey],HouseInfo[i][hEntrancez]);


    ich seh das nicht warum das nicht funzt.. es sind zwar die selben interiors (d.h. auch die selben ausgangspunkte), haben aber ne andere vw..


    Hoffe jemand kann mir helfen.


    MFG

    ich meine, wie kann ich machen, das es halt nicht while(idx < 15) steht, sondern irgendwie while(idx < MAX_REIHEN_IN_MYSQL_TABELLE) oder so was in der art..


    und das idx+1 ist dazu da, die richtige ID zu nehmen, da TankstellenInfo[0] in der Mysql tabelle ID 1 ist ;)


    MFG

    Hallo zusammen!


    Die, die jetzt fragen, warum ich einen neuen thread mache --> ganz einfach, weil es zwei verschiedene Sachen sind..


    Also, zum thema zurück.


    wie kann ich das besser machen? Also das statt idx < 15 etwas eindeutiges steht?


    stock SaveTankstellen()
    {
    MySQLCheck();
    new query[MAX_STRING];new idx;
    while(idx < 15) //mit anzahl in mysqltabelle verändern
    {
    format(query, MAX_STRING, "UPDATE gasstation SET tBenzin=%d,tPosX=%f,tPosY=%f,tPosZ=%f WHERE ID=%d",TankstellenInfo[idx][tBenzin],TankstellenInfo[idx][tPosX],TankstellenInfo[idx][tPosY],TankstellenInfo[idx][tPosZ],idx+1);
    mysql_query(query);
    idx++;
    }
    return 1;
    }



    MFG

    Hauptsache du machst eine while schleife, aber zählst da eine variable hoch..
    Es gibt Dinge, die werd ich nie verstehen :P


    for ftw


    die variable ist ja unabhängig von der while schleife o_O die ist nur dazu da, um die Arrays zu füllen..


    Hi


    Why machst du das eig net mit einer for-schleife? oO Geht doch genauso gut wie mit while^^
    Probiers ma ;)


    MFG, Robdeflop®


    hmm und wie soll ich das machen? X( kann ich in der for schleife mysql_fetch_row(data) mitnehmen?


    Also


    for(new i=0;i<sizeof(mysql_fetch_row(data));i++)


    oder


    for(new i=0;i<sizeof(mysql_num_rows());i++)


    oder wie sonst?



    edit: Es funktioniert nun mit dem while. Ich hab vergessen die Variable heraufzuzählen, also von TanktellenInfo[14] auf TankstellenInfo[15].. blöder fehler.. xD lustig ist aber das mir das im schlaf eingefallen ist X( Aber es wäre schon noch gut zu wissen, wie das mit der forschleife geht.


    aber noch was..


    stock SaveTankstellen()
    {
    MySQLCheck();
    new query[MAX_STRING];new idx;
    while(idx < 15) //mit anzahl in mysqltabelle verändern
    {
    format(query, MAX_STRING, "UPDATE gasstation SET tBenzin=%d,tPosX=%f,tPosY=%f,tPosZ=%f WHERE ID=%d",TankstellenInfo[idx][tBenzin],TankstellenInfo[idx][tPosX],TankstellenInfo[idx][tPosY],TankstellenInfo[idx][tPosZ],idx+1);
    mysql_query(query);
    idx++;
    }
    return 1;
    }


    wie kann ich das besser machen? Also das statt idx < 15 etwas eindeutiges steht..


    MFG

    das wäre nice :D es ist wirklich ein blödes problem, es passiert nur bei dem.. das ist sehr ärgerlich.. hat jemand ne andere variante, wie er die sachen rausliest?


    //edit:


    ich habs jetzt mal so versucht.


    stock LoadTankstellen()
    {
    MySQLCheck();
    new idx;new data[256];
    mysql_query("SELECT * FROM gasstation");
    mysql_store_result();
    if(mysql_num_rows() > 0)
    {
    while(mysql_fetch_row(data))
    {
    TankstellenInfo[idx][tID] = idx;
    mysql_fetch_field("tBenzin",data);TankstellenInfo[idx][tBenzin] = strval(data);
    mysql_fetch_field("tPosX",data);TankstellenInfo[idx][tPosX] = floatstr(data);
    mysql_fetch_field("tPosY",data);TankstellenInfo[idx][tPosY] = floatstr(data);
    mysql_fetch_field("tPosZ",data);TankstellensInfo[idx][tPosZ] = floatstr(data);
    printf("ID: %d, Benzin: %d, PosX: %f, PosY: %f, PosZ: %f",TankstellenInfo[idx][tID],TankstellenInfo[idx][tGas],TankstellenInfo[idx][tPosX],TankstellenInfo[idx][tPosY],TankstellenInfo[idx][tPosZ]);
    idx++;
    }
    }
    mysql_free_result();
    return 1;
    }


    funzt aber trotzdem nicht. Hab die Tabelle auch schon neu gemacht, kein Erfolg.

    hab ich ja auch.. aber dann bringts ja nix, ich muss ja noch schauen, ob der spieler auf das objekt schiesst..


    if(GetPlayerWeapon(i) == 42)
    {
    for(new o=0;o<sizeof(feuer);o++)
    {
    new string[24],Float:X,Float:Y,Float:Z;
    GetObjectPos(feuer[o], X, Y, Z);
    if(PlayerAimToPoint(i,X,Y,Z,25))
    {
    feuerhealth[o]--;
    format(string, sizeof(string),"%i/%i",feuerhealth[o],feuermaxhealth);
    Update3DTextLabelText(feuertext[o],COLOR_WHITE,string);
    if(feuerhealth[o] == 0)
    {
    DestroyObject(feuer[o]);
    feuerhealth[o] = feuermaxhealth;
    Delete3DTextLabel(feuertext[o]);
    feueranzahl--;
    if(feueranzahl == 0)
    {
    feueraktiv = 0;
    SendFamilyMessage(4, COLOR_GREEN, "Das Feuer wurde geloescht!");
    GivePlayerMoney(i, feuergeld);
    KillTimer(feuertimer);
    return 1;
    }
    }
    }
    }
    }

    ja, die hab ich ja, ich les die koordinaten aus (GetObjectPos).. es geht auch alles wies soll, allerdings zählt er runter (hab da ein 3D text drüber), nur wenn ich schon in der Nähe stehe.. und auch wenn ich nicht mit einer waffe drauf schiesse.

    hmm, der server läuft zwar, allerdings werden trotzdem nicht alle tankstellen geladen.. kann es sein, das es am plugin liegt? nicht oder? denn bei linux und windows, werden nur die ersten 14 tankstellen ausgelesen..