Beiträge von TimeLine

    Musst doch irgentwo die strtok funktion haben da diese kein bestandteil von samp ist.

    meinst du das ??

    stock strtok(const string[], &index)
    {
    new length = strlen(string);
    while ((index < length) && (string[index] <= ' '))
    {
    index++;
    }
    new offset = index;
    new result[256];
    while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
    {
    result[index - offset] = string[index];
    index++;
    }
    result[index - offset] = EOS;
    return result;
    }



    @XeroX

    GetPlayerName kann auch keinen Wert haben woher auch wenn der Spieler nicht Ingame ist. Nachdem ich den Code etwas ausgebessert habe sollte es nun funktionieren. Beachte die Kommentare die ich in einigen Zeilen gesetzt habe. Ausserdem rate ich zu einem command processor ala zcmd oder ocmd mit sscanf da dir das einiges an Arbeit abnimmt und sogar noch schneller als die ganze Sache mit den strcmp ist


    if(strcmp(cmd, "/contract", true) == 0){ new playermoney; new tmp[256]; new Preis, idx; // Wenn der Spieler in der Fraktion 18 ist brauchen wir auch nicht Prüfen was er eingegeben hat da er es sowieso nicht darf. if(PlayerInfo[playerid][pMember] == 18) return SCM(playerid, COLOR_GRAU, "Du kannst keinen Auftrag in deiner eigenen Agentur abgeben!"); tmp = strtok(cmdtext, idx1); if(!strlen(tmp)) { SCM(playerid, COLOR_RED, "{33CCFF}FEHLER:{FFFFFF} /contract [playerid] [kopfgeld]"); return 1; } giveplayerid = ReturnUser(tmp); // Wir prüfen hier schon ob der Spieler der selbe ist der den Command eingegeben hat dergleiche ist wie der Zielspieler // Unabhängig davon ob der Spieler der den Command eingegeben hat mehr oder weniger als 10k bzw 100k eingegeben hat. if(giveplayerid == playerid) return SCM(playerid, COLOR_GRAU, "Du kannst auf dich keinen Auftrag setzen!"); tmp = strtok(cmdtext, idx1); if(!strlen(tmp)) { SCM(playerid, COLOR_RED, "{33CCFF}FEHLER:{FFFFFF} /contract [playerid] [kopfgeld]"); return 1; } Preis = strval(tmp); if(Preis < 10000 || Preis > 100000) return SCM(playerid, COLOR_GRAU, "Nicht weniger als €10.000 oder mehr als €100.000!"); if (IsPlayerConnected(giveplayerid)) { GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer)); GetPlayerName(playerid, sendername2, sizeof(sendername2)); playermoney = PlayerMoney[playerid]; // Hat der Spieler genug Geld ? Hier brauchen wir nicht prüfen ob der Preis > 0 ist da es oben bereits limitiert wurde auf minimal 10k und maximal 100k if (playermoney >= Preis) { PlayerMoney[playerid] = SafeGivePlayerMoney(playerid, -Preis); PlayerInfo[giveplayerid][pKopfgeld]+=Preis; format(string, sizeof(string), "%s hat ein Kopfgeld auf %s ausgesetzt, Lohn €%d.",sendername2, giveplayer, Preis); SendFamilyMessage(18, COLOR_YELLOW, string); format(string, sizeof(string), "* Du hast ein kopfgeld auf %s ausgesetzt, Lohn €%d.",giveplayer, Preis); SCM(playerid, COLOR_LIGHTBLUE, string); PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0); } else { SCM(playerid, COLOR_GRAD1, "Falscher transaction Betrag."); } } else { format(string, sizeof(string), "%d ist kein Aktiver Spieler.", giveplayerid); SCM(playerid, COLOR_GRAD1, string); } return 1;}

    Ohh gott, stimmt ja :D

    immer noch €10.000 oder mehr als €100.000! egall was ich eintippe

    Erstmal räumen wir mal auf:

    Code
    format(string, sizeof(string), "%d ist kein Aktiver Spieler.", giveplayerid);
    SCM(playerid, COLOR_GRAD1, string);

    durch



    Code
    new spielername[MAX_PLAYER_NAME];
    GetPlayerName(giveplayerid, spielername, sizeof(spielername));
    format(string, sizeof(string), "%s ist kein Aktiver Spieler.", spielername);
    SCM(playerid, COLOR_GRAD1, string);

    ersetzen.

    Pn mich lieber ^^ dass kann glaub ich dauern ^^

    Das steht jetzt 65355 ist kein Aktiver Spieler

    hallo wenn ich /contract mache kommt immer Nicht weniger als €10.000 oder mehr als €100.000! aber ich verstehe nicht warum....

    if(strcmp(cmd, "/contract", true) == 0)
    {
    /*new playermoney;
    new tmp[256];
    new Preis, idx;*/
    if(IsPlayerConnectedEx(playerid))
    {
    tmp = strtok(cmdtext, idx1);
    if(!strlen(tmp))
    {
    SCM(playerid, COLOR_RED, "{33CCFF}FEHLER:{FFFFFF} /contract [playerid] [kopfgeld]");
    return 1;
    }
    giveplayerid = ReturnUser(tmp);
    tmp = strtok(cmdtext, idx1);
    if(!strlen(tmp))
    {
    SCM(playerid, COLOR_RED, "{33CCFF}FEHLER:{FFFFFF} /contract [playerid] [kopfgeld]");
    return 1;
    }



    if(PlayerInfo[playerid][pMember] == 18) return SCM(playerid, COLOR_GRAU, "Du kannst keinen Auftrag in deiner eigenen Agentur abgeben!");
    Preis = strval(tmp);
    if(Preis < 10000 || Preis > 100000) { SCM(playerid, COLOR_GRAU, "Nicht weniger als €10.000 oder mehr als €100.000!"); return 1; }
    if (IsPlayerConnectedEx(giveplayerid))
    {

    if(giveplayerid != INVALID_PLAYER_ID)
    {

    if(PlayerInfo[playerid][pMember] == 18) return SCM(playerid, COLOR_GRAU, "Du kannst keinen Auftrag in deiner eigenen Agentur abgeben!");
    if(giveplayerid == playerid) { SCM(playerid, COLOR_GRAU, "Du kannst auf dich keinen Auftrag setzen!"); return 1; }

    GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
    GetPlayerName(playerid, sendername2, sizeof(sendername2));
    playermoney = PlayerMoney[playerid];
    if (Preis > 0 && playermoney >= Preis)
    {
    PlayerMoney[playerid] = SafeGivePlayerMoney(playerid, -Preis);
    PlayerInfo[giveplayerid][pKopfgeld]+=Preis;
    format(string, sizeof(string), "%s hat ein Kopfgeld auf %s ausgesetzt, Lohn €%d.",sendername2, giveplayer, Preis);
    SendFamilyMessage(18, COLOR_YELLOW, string);
    format(string, sizeof(string), "* Du hast ein kopfgeld auf %s ausgesetzt, Lohn €%d.",giveplayer, Preis);
    SCM(playerid, COLOR_LIGHTBLUE, string);
    PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
    }
    else
    {
    SCM(playerid, COLOR_GRAD1, "Falscher transaction Betrag.");
    }
    }
    }
    else
    {
    format(string, sizeof(string), "%d ist kein Aktiver Spieler.", giveplayerid);
    SCM(playerid, COLOR_GRAD1, string);
    }
    }
    return 1;
    }

    Poste mal deinen aktuellen MySQL Log.


    [21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
    [21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
    [21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
    [21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
    [21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
    [21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
    [21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
    [21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
    [21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
    [21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
    [21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
    [21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
    [21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
    [21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
    [21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
    [21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
    [21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
    [21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

    Du musst dann mysql_format benutzen.^^
    mysql_format(sqlHandle,miniquery, sizeof(miniquery), "%s `RangName0` = '%e', `RangName1` = '%e', `RangName2` = '%e',`RangName3` = '%e',`RangName4` = '%e', `RangName5` = '%e', `RangName6` = '%e', `LongName` = '%e', `SmallName` = '%e', `MitgliederLimit` = '%d', `Status` = '%d', `BewerbungsStatus` = '%d', `PayDayPunkte` = '%d' WHERE fID = '%d'",miniquery,FrakInfo[fID][fRangName0],FrakInfo[fID][fRangName1],FrakInfo[fID][fRangName2],FrakInfo[fID][fRangName3],FrakInfo[fID][fRangName4],FrakInfo[fID][fRangName5],FrakInfo[fID][fRangName6], FrakInfo[fID][fLongName], FrakInfo[fID][fSmallName], FrakInfo[fID][fMitgliederLimit], FrakInfo[fID][fStatus], FrakInfo[fID][fBewerbungsStatus], FrakInfo[fID][fPayDayPunkte], fID);

    Speichert immer nocht nicht
    @Jeffry

    Hier auch mal mit Escaped Strings von der Query aus.
    stock SaveFraktion(fID) { new query[800], miniquery[600], string[150]; new count = GetTickCount(); format(miniquery, sizeof(miniquery), "UPDATE `frakinfo` SET `Geld` = '%d', `Drogen` = '%d', `Mats` = '%d', `Gehalt0` = '%d', `Gehalt1` = '%d', `Gehalt2` = '%d', `Gehalt3` = '%d', `Gehalt4` = '%d', `Gehalt5` = '%d',`Gehalt6` = '%d',", FrakInfo[fID][fGeld], FrakInfo[fID][fDrogen], FrakInfo[fID][fMaterials], FrakInfo[fID][fGehalt0], FrakInfo[fID][fGehalt1], FrakInfo[fID][fGehalt2], FrakInfo[fID][fGehalt3], FrakInfo[fID][fGehalt4], FrakInfo[fID][fGehalt5], FrakInfo[fID][fGehalt6]); mysql_function_query(sqlHandle, miniquery, false, "QueryMeldung", ""); format(miniquery, sizeof(miniquery), "%s `RangName0` = '%e', `RangName1` = '%e', `RangName2` = '%e',`RangName3` = '%e',`RangName4` = '%e', `RangName5` = '%e', `RangName6` = '%e', `LongName` = '%e', `SmallName` = '%e', `MitgliederLimit` = '%d', `Status` = '%d', `BewerbungsStatus` = '%d', `PayDayPunkte` = '%d' WHERE fID = '%d'", miniquery,FrakInfo[fID][fRangName0],FrakInfo[fID][fRangName1],FrakInfo[fID][fRangName2],FrakInfo[fID][fRangName3],FrakInfo[fID][fRangName4],FrakInfo[fID][fRangName5],FrakInfo[fID][fRangName6], FrakInfo[fID][fLongName], FrakInfo[fID][fSmallName], FrakInfo[fID][fMitgliederLimit], FrakInfo[fID][fStatus], FrakInfo[fID][fBewerbungsStatus], FrakInfo[fID][fPayDayPunkte], fID); mysql_function_query(sqlHandle, miniquery, false, "QueryMeldung", ""); format(string, sizeof(string), "[MySQL] Die Fraktionsinformationen von Fraktions ID %d wurde mit einer Geschwindigkeit von %d Millisekunden gespeichert!", fID, GetTickCount() - count); SendMySQLMessage(string); UpdateFraktionsSchild(fID); return 1; }

    wie gesagt ich kann es nocht ht testen gebe euch aber feedback wenn ich zuhause bin und es testen kann

    So, wenn ich nichts übersehen habe.
    Sorry für die Einrückung.. : /



    [pwn]stock SaveFraktion(fID){new query[800], miniquery[600], string[150];new count = GetTickCount();new Rang[7][50];mysql_real_escape_string(FrakInfo[fID][fRangName0], Rang[0], sqlHandle, 126);mysql_real_escape_string(FrakInfo[fID][fRangName1], Rang[1], sqlHandle, 126);mysql_real_escape_string(FrakInfo[fID][fRangName2], Rang[2], sqlHandle, 126);mysql_real_escape_string(FrakInfo[fID][fRangName3], Rang[3], sqlHandle, 126);mysql_real_escape_string(FrakInfo[fID][fRangName4], Rang[4], sqlHandle, 126);mysql_real_escape_string(FrakInfo[fID][fRangName5], Rang[5], sqlHandle, 126);mysql_real_escape_string(FrakInfo[fID][fRangName6], Rang[6], sqlHandle, 126);format(miniquery, sizeof(miniquery), "UPDATE `frakinfo` SET `Geld` = '%d', `Drogen` = '%d', `Mats` = '%d', `Gehalt0` = '%d', `Gehalt1` = '%d', `Gehalt2` = '%d', `Gehalt3` = '%d', `Gehalt4` = '%d', `Gehalt5` = '%d',`Gehalt6` = '%d',",FrakInfo[fID][fGeld], FrakInfo[fID][fDrogen], FrakInfo[fID][fMaterials], FrakInfo[fID][fGehalt0], FrakInfo[fID][fGehalt1], FrakInfo[fID][fGehalt2], FrakInfo[fID][fGehalt3], FrakInfo[fID][fGehalt4], FrakInfo[fID][fGehalt5], FrakInfo[fID][fGehalt6]);format(miniquery, sizeof(miniquery), "%s `RangName0` = '%s', `RangName1` = '%s', `RangName2` = '%s',`RangName3` = '%s',`RangName4` = '%s', `RangName5` = '%s', `RangName6` = '%s', `LongName` = '%s', `SmallName` = '%s', `MitgliederLimit` = '%d', `Status` = '%d', `BewerbungsStatus` = '%d', `PayDayPunkte` = '%d' WHERE fID = '%d'",miniquery, Rang[0], Rang[1], Rang[2], Rang[3], Rang[4], Rang[5], Rang[6], FrakInfo[fID][fLongName], FrakInfo[fID][fSmallName], FrakInfo[fID][fMitgliederLimit], FrakInfo[fID][fStatus], FrakInfo[fID][fBewerbungsStatus], FrakInfo[fID][fPayDayPunkte], fID);mysql_function_query(sqlHandle, miniquery, false, "QueryMeldung", "");format(string, sizeof(string), "[MySQL] Die Fraktionsinformationen von Fraktions ID %d wurde mit einer Geschwindigkeit von %d Millisekunden gespeichert!", fID, GetTickCount() - count);SendMySQLMessage(string);UpdateFraktionsSchild(fID);return 1;}[

    danke versuche es später wenn ich zu hause bin gebe euch dann ein feed back ob es geht

    Bei deiner ersten Miniquery, hast du am Ende ein Komma was da nicht sein Sollte. Des weiteren werden dann ALLE Datensätze gleich gesetzt da du keinen eindeutigen Eintrag einen Wert geben willst.


    Du nutzt auch die MySQL R31+ anscheinend. Dann brauchst du deine Rangnamen nicht selbst Escapen sonder kannst in der Query %e anstatt %s nehmen, dann Escaped er die selbst.

    wie meinst du das mit der minquery und daten sätze da ich bei mysql neu bin
    also bei rangnamen"%s" zu rangname"%e"Machen?

    Du solltest die zwei Strings "miniquery" und "miniquery2" auch zusammenfügen und als einen Query absenden , im ganzen betrachtet ist es ja schließlich auch nur einer.


    Aktuell hast du nur 2 Strings die du jeweils separat als Query versuchst auszuführen. Der erste funktioniert, der zweite nicht.


    So könntest du die Strings zusammenfügen:
    format(string,sizeof(string),"Ich bin der Anfang");format(string,sizeof(string),"%s und ich das Ende",string);// string = Ich bin der Anfang und ich das Ende

    meinst du das soo??



    stock SaveFraktion(fID)
    {
    new query[800], miniquery[600], string[150];
    new count = GetTickCount();
    new Rang[7][50];
    mysql_real_escape_string(FrakInfo[fID][fRangName0], Rang[0], sqlHandle, 126);
    mysql_real_escape_string(FrakInfo[fID][fRangName1], Rang[1], sqlHandle, 126);
    mysql_real_escape_string(FrakInfo[fID][fRangName2], Rang[2], sqlHandle, 126);
    mysql_real_escape_string(FrakInfo[fID][fRangName3], Rang[3], sqlHandle, 126);
    mysql_real_escape_string(FrakInfo[fID][fRangName4], Rang[4], sqlHandle, 126);
    mysql_real_escape_string(FrakInfo[fID][fRangName5], Rang[5], sqlHandle, 126);
    mysql_real_escape_string(FrakInfo[fID][fRangName6], Rang[6], sqlHandle, 126);

    format(miniquery, sizeof(miniquery), "UPDATE `frakinfo` SET `Geld` = '%d', `Drogen` = '%d', `Mats` = '%d', `Gehalt0` = '%d', `Gehalt1` = '%d', `Gehalt2` = '%d', `Gehalt3` = '%d', `Gehalt4` = '%d', `Gehalt5` = '%d',`Gehalt6` = '%d',",
    FrakInfo[fID][fGeld], FrakInfo[fID][fDrogen], FrakInfo[fID][fMaterials], FrakInfo[fID][fGehalt0], FrakInfo[fID][fGehalt1], FrakInfo[fID][fGehalt2], FrakInfo[fID][fGehalt3], FrakInfo[fID][fGehalt4], FrakInfo[fID][fGehalt5], FrakInfo[fID][fGehalt6]);
    mysql_function_query(sqlHandle, miniquery, false, "QueryMeldung", "");

    format(miniquery, sizeof(miniquery), "`RangName0` = '%s', `RangName1` = '%s', `RangName2` = '%s',`RangName3` = '%s',`RangName4` = '%s', `RangName5` = '%s', `RangName6` = '%s', `LongName` = '%s', `SmallName` = '%s', `MitgliederLimit` = '%d', `Status` = '%d', `BewerbungsStatus` = '%d', `PayDayPunkte` = '%d' WHERE fID = '%d'",
    Rang[0], Rang[1], Rang[2], Rang[3], Rang[4], Rang[5], Rang[6], FrakInfo[fID][fLongName], FrakInfo[fID][fSmallName], FrakInfo[fID][fMitgliederLimit], FrakInfo[fID][fStatus], FrakInfo[fID][fBewerbungsStatus], FrakInfo[fID][fPayDayPunkte], fID);
    mysql_function_query(sqlHandle, miniquery, false, "QueryMeldung", "");
    format(string, sizeof(string), "[MySQL] Die Fraktionsinformationen von Fraktions ID %d wurde mit einer Geschwindigkeit von %d Millisekunden gespeichert!", fID, GetTickCount() - count);
    SendMySQLMessage(string);
    UpdateFraktionsSchild(fID);
    return 1;
    }