Beiträge von SLaYz

    Ich steh gerade auf dem Schlauch... wie kann ich Fraktionsnamen im einem switch definieren und dann in den Stock FraktionName(fID) einbauen?

    so ca:



    stock GetFactionRanks(f, Rank)
    {
    new str[40];
    switch(Rank)
    {
    case 0: format(str, sizeof(str), "---");
    case 1: format(str, sizeof(str), "%s", cF->fRank1[f]);
    case 2: format(str, sizeof(str), "%s", cF->fRank2[f]);
    case 3: format(str, sizeof(str), "%s", cF->fRank3[f]);
    case 4: format(str, sizeof(str), "%s", cF->fRank4[f]);
    case 5: format(str, sizeof(str), "%s", cF->fRank5[f]);
    case 6: format(str, sizeof(str), "%s", cF->fRank6[f]);
    case 7: format(str, sizeof(str), "%s", cF->fRank7[f]);
    }
    return str;
    }


    dcmd_setadmin(playerid, params[])
    {
    new pID, Level, string[100], playername[MAX_PLAYER_NAME];
    if(sSpieler[playerid][Adminlevel] != 5) return SendClientMessage(playerid, 0xC8C8C8FF, "Dein Adminlevel reicht nicht aus, um diesen Befehl zu benutzen.");
    if(sscanf(params, "ud", pID, Level)) return SendClientMessage(playerid, 0xC8C8C8FF, "Tippe: /setadmin [Spielername / ID] [Adminlevel 0-5]");
    if(Level < 0 || Level > 5) return SendClientMessage(playerid, 0xC8C8C8FF, "Das Adminlevel muss zwichen 0 [Uninvite] und 5 liegen.");
    GetPlayerName(playerid, playername, MAX_PLAYER_NAME);
    format(string, sizeof(string), "* %s hat dir das Adminlevel %d zugewiesen.", playername, Level);
    SendClientMessage(pID, 0xC8C8C8FF, string);
    GetPlayerName(pID, playername, MAX_PLAYER_NAME);
    format(string, sizeof(string), "* Du hast %s das Adminlevel %d zugewiesen.", playername, Level);
    SendClientMessage(playerid, 0xC8C8C8FF, string);
    sSpieler[pID][Adminlevel] = Level;
    return 1;
    }

    Sollte gehen^^ hatte ein Groß/Klein Fehler drin.


    dcmd_setadmin(playerid, params[])
    {
    new pID, level, string[100], playername[MAX_PLAYER_NAME];
    if(sSpieler[playerid][Adminlevel] != 5) return SendClientMessage(playerid, 0xC8C8C8FF, "Dein Adminlevel reicht nicht aus, um diesen Befehl zu benutzen.");
    if(sscanf(params, "ud", pID, level)) return SendClientMessage(playerid, 0xC8C8C8FF, "Tippe: /setadmin [Spielername / ID] [Adminlevel 0-5]");
    if(strval(Level) < 0 || strval(Level) > 5) return SendClientMessage(playerid, 0xC8C8C8FF, "Das Adminlevel muss zwichen 0 [Uninvite] und 5 liegen.");
    GetPlayerName(playerid, playername, MAX_PLAYER_NAME);
    format(string, sizeof(string), "* %s hat dir das Adminlevel %d zugewiesen.", playername, Level);
    SendClientMessage(pID, 0xC8C8C8FF, string);
    GetPlayerName(pID, playername, MAX_PLAYER_NAME);
    format(string, sizeof(string), "* Du hast %s das Adminlevel %d zugewiesen.", playername, Level);
    SendClientMessage(playerid, 0xC8C8C8FF, string);
    sSpieler[pID][Adminlevel] = strval(Level);
    return 1;
    }

    Versuch es mal so:



    dcmd_setadmin(playerid, params[])
    {
    new pID, level, string[100], playername[MAX_PLAYER_NAME];
    if(sSpieler[playerid][Adminlevel] != 5) return SendClientMessage(playerid, 0xC8C8C8FF, "Dein Adminlevel reicht nicht aus, um diesen Befehl zu benutzen.");
    if(sscanf(params, "ud", pID, level)) return SendClientMessage(playerid, 0xC8C8C8FF, "Tippe: /setadmin [Spielername / ID] [Adminlevel 0-5]");
    if(strval(Level) < 0 || strval(Level) > 5) return SendClientMessage(playerid, 0xC8C8C8FF, "Das Adminlevel muss zwichen 0 [Uninvite] und 5 liegen.");
    GetPlayerName(playerid, playername, MAX_PLAYER_NAME);
    format(string, sizeof(string), "* %s hat dir das Adminlevel %d zugewiesen.", playername, Level));
    SendClientMessage(pID, 0xC8C8C8FF, string);
    GetPlayerName(pID, playername, MAX_PLAYER_NAME);
    format(string, sizeof(string), "* Du hast %s das Adminlevel %d zugewiesen.", playername, Level);
    SendClientMessage(playerid, 0xC8C8C8FF, string);
    sSpieler[pID][Adminlevel] = strval(Level);
    return 1;
    }

    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;
    }

    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.

    Ist es schlimm, wenn du SSCANF und einen anderen Commandprozessor benutzen würdest?
    Es wäre dann übersichtlicher :P


    Beispiel:

    ocmd:newbiz(playerid, params[])
    {
    new price, businessname[30], Float:Pos[3], query[130];
    if(!IsPlayerAdmin(playerid) || PlayerInfo[playerid][ALeve] == 0) return SendClientMessage(playerid, -1, "Dieser Befehl ist nur für Admins!");
    if(PlayerInfo[playerid][ALevel] == 1) return SendClientMessage(playerid, -1, "Supporter sind nur für Supports da!");
    if(sscanf(params, "ds[30]", price, businessname)) return SendClientMessage(playerid, -1, "Tippe: /newbiz [Preis] [Business Name]");
    GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
    ladebize++;
    format(query, sizeof(query), "INSERT INTO biz (id, name, besitzer, x, y, z, kostet) VALUES (%d, '%s', 'Niemand', %f, %f, %f, %d", ladebize, businessname, Pos[0], Pos[1], Pos[2], price);
    mysql_query(query);
    return 1;
    }

    Der geht nur als Rcon-Admin. Die Texte, das man als Supporter nur Supporten kann und so sollten kommen.


    Entscheidend ist diese Abfrage:
    if(IsPlayerAdmin(playerid))