Dynamic Adminrang problem

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Ich bekomme diese Errors:
    C:\Users\kevin\Desktop\server\gamemodes\selfneu.pwn(628) : error 027: invalid character constant
    C:\Users\kevin\Desktop\server\gamemodes\selfneu.pwn(628) : error 027: invalid character constant
    C:\Users\kevin\Desktop\server\gamemodes\selfneu.pwn(678) : warning 217: loose indentation
    C:\Users\kevin\Desktop\server\gamemodes\selfneu.pwn(1534) : warning 202: number of arguments does not match definition
    C:\Users\kevin\Desktop\server\gamemodes\selfneu.pwn(1553) : warning 217: loose indentation
    C:\Users\kevin\Desktop\server\gamemodes\selfneu.pwn(1554) : warning 217: loose indentation
    C:\Users\kevin\Desktop\server\gamemodes\selfneu.pwn(1554) : error 017: undefined symbol "Data"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    3 Errors.


    Der Code:
    http://pastebin.com/B2SaqZ60


    Danke im voraus :)

  • Hey,
    hast du irgendwo new db:Data; stehen?
    Du nutzt ja SQLLite, sprich du musst ja eine Datenbank angeben in dem fall Data


    Du nutzt MySQL und SQLLite in einem?


    Dazu kannst du ARANG abkürzen dann ist es nicht so lang und unübersichtlich
    case DIALOG_ARANG:
    {
    new string[128];
    if(response == 0)return 1;
    else
    {
    format(string,sizeof(string),"Gebe den Namen für Adminrang %d ein",listitem+1);
    ShowPlayerDialog(playerid,DIALOG_AEINGABE,DIALOG_STYLE_INPUT,"Rangeingabe",string,"Weiter","Abbrechen");
    arang[playerid]=listitem+1;
    }
    }
    AEINGABE lässt sich auch so kürzen
    Müsste genau so klappen wie das alte nur halt übersichtlicher und kürzer
    case DIALOG_AEINGABE:
    {
    new query[256],string[128];
    if(response == 0)return 1;
    else
    {
    format(query, sizeof(query), "UPDATE `rank` SET arang%d = '%s'",arang[playerid],inputtext);
    format(string, sizeof(string), "Du hast den Adminrang %d in %s umbenannt'",arang[playerid],inputtext);
    mysql_query(query);
    SendClientMessage(playerid,Rot,string);
    arang[playerid]=0;
    }
    updaterang();
    }
    }

  • Nein ich nutze nur MYSQL
    Wie muss ich das denn hier mit MYSQL R5 Plugin machen?
    stock updaterang()
    {
    new DBResult:Result, str[512],id=0;
    format(str, sizeof(str), "SELECT * FROM `aranks`");
    Result = db_query(Data,str);


    db_get_field_assoc(Result,"arang1",str,sizeof(str));
    format(arang1[id],21,"%s",str);
    db_get_field_assoc(Result,"arang2",str,sizeof(str));
    format(arang2[id],21,"%s",str);
    db_get_field_assoc(Result,"arang3",str,sizeof(str));
    format(arang3[id],21,"%s",str);
    db_get_field_assoc(Result,"arang4",str,sizeof(str));
    format(arang4[id],21,"%s",str);
    }


    //edit Fehlerzeilen:

    C:\Users\kevin\Desktop\server\gamemodes\selfneu.pwn(628) : error 027: invalid character constant
    C:\Users\kevin\Desktop\server\gamemodes\selfneu.pwn(628) : error 027: invalid character constant
    format(string,sizeof(string),"Rang 1:%s \nRang 2:%s\nRang 3:%s\nRang 4:%s\Rang 5:%s\nRang 6:%s",arang1[pID],arang2[pID],arang3[pID],arang4[pID],arang5[pID],arang6[pID]);


    C:\Users\kevin\Desktop\server\gamemodes\selfneu.pwn(1534) : warning 202: number of arguments does not match definition
    ShowPlayerDialog(playerid,DIALOG_AMENU,DIALOG_STYLE_LIST,"Adminränge","Auswählen","Abbrechen");

  • Fehler behoben,aber nurnoch das hier:
    stock updaterang()
    {
    new DBResult:Result, str[512],id=0;
    format(str, sizeof(str), "SELECT * FROM `aranks`");
    Result = db_query(Data,str);


    db_get_field_assoc(Result,"arang1",str,sizeof(str));
    format(arang1[id],21,"%s",str);
    db_get_field_assoc(Result,"arang2",str,sizeof(str));
    format(arang2[id],21,"%s",str);
    db_get_field_assoc(Result,"arang3",str,sizeof(str));
    format(arang3[id],21,"%s",str);
    db_get_field_assoc(Result,"arang4",str,sizeof(str));
    format(arang4[id],21,"%s",str);
    }
    Auf MYSQL machen,aber wie?

    Einmal editiert, zuletzt von [PeL]Smiley ()

  • Prinzipiell so, aber das kann je nach Tabellenstruktur auch anders aussehen:
    stock updaterang()
    {
    new str[512],id=0;
    mysql_query("SELECT * FROM `aranks`");
    mysql_store_result();
    if(mysql_retrieve_row())
    {
    mysql_fetch_field_row(arang1[id],"arang1");
    mysql_fetch_field_row(arang2[id],"arang2");
    mysql_fetch_field_row(arang3[id],"arang3");
    mysql_fetch_field_row(arang4[id],"arang4");
    }
    mysql_free_result();
    return 1;
    }

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Spoiler anzeigen
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    switch(dialogid)
    {
    case DIALOG_AMENU:
    {
    if(response)
    {
    switch(listitem)
    {
    case 0:
    {
    new string[400],pID;
    format(string,sizeof(string),"Rang 1:%s \nRang 2:%s\nRang 3:%s\nRang 4:%s\Rang 5:%s\nRang 6:%s",arang1[pID],arang2[pID],arang3[pID],arang4[pID],arang5[pID],arang6[pID]);
    ShowPlayerDialog(playerid,DIALOG_ARANG,DIALOG_STYLE_LIST,"Rangmenue",string,"Auswählen","Abbrechen");
    }
    }
    }
    }
    case DIALOG_ARANG:
    {
    if(response)
    {
    switch(listitem)
    {
    case 0:
    {
    ShowPlayerDialog(playerid,DIALOG_AEINGABE,DIALOG_STYLE_INPUT,"Rangeingabe","Gebe den Namen für Adminrang 1 ein","Weiter","Abbrechen");
    arang[playerid]=1;
    }
    case 1:
    {
    ShowPlayerDialog(playerid,DIALOG_AEINGABE,DIALOG_STYLE_INPUT,"Rangeingabe","Gebe den Namen für Adminrang 2 ein","Weiter","Abbrechen");
    arang[playerid]=2;
    }
    case 2:
    {
    ShowPlayerDialog(playerid,DIALOG_AEINGABE,DIALOG_STYLE_INPUT,"Rangeingabe","Gebe den Namen für Adminrang 3 ein","Weiter","Abbrechen");
    arang[playerid]=3;
    }
    case 3:
    {
    ShowPlayerDialog(playerid,DIALOG_AEINGABE,DIALOG_STYLE_INPUT,"Rangeingabe","Gebe den Namen für Adminrang 4 ein","Weiter","Abbrechen");
    arang[playerid]=4;
    }
    case 4:
    {
    ShowPlayerDialog(playerid,DIALOG_AEINGABE,DIALOG_STYLE_INPUT,"Rangeingabe","Gebe den Namen für Adminrang 5 ein","Weiter","Abbrechen");
    arang[playerid]=5;
    }
    case 5:
    {
    ShowPlayerDialog(playerid,DIALOG_AEINGABE,DIALOG_STYLE_INPUT,"Rangeingabe","Gebe den Namen für Adminrang 6 ein","Weiter","Abbrechen");
    arang[playerid]=6;
    }
    }
    }
    }
    case DIALOG_AEINGABE:
    {
    if(response)
    {
    new query[256],string[128];
    if(arang[playerid]==1)
    {
    format(query, sizeof(query), "UPDATE `rank` SET arang1 = '%s'",inputtext);
    format(string, sizeof(string), "Du hast den Adminrang 1 in %s umbenannt'",inputtext);
    mysql_query(query);
    SendClientMessage(playerid,Rot,string);
    arang[playerid]=0;
    }
    else if(arang[playerid]==2)
    {
    format(query, sizeof(query), "UPDATE `rank` SET arang2 = '%s'",inputtext);
    format(string, sizeof(string), "Du hast den Adminrang 2 in %s umbenannt'",inputtext);
    mysql_query(query);
    SendClientMessage(playerid,Rot,string);
    arang[playerid]=0;
    }
    else if(arang[playerid]==3)
    {
    format(query, sizeof(query), "UPDATE `rank` SET arang3 = '%s'",inputtext);
    format(string, sizeof(string), "Du hast den Adminrang 3 in %s umbenannt'",inputtext);
    mysql_query(query);
    SendClientMessage(playerid,Rot,string);
    arang[playerid]=0;
    }
    else if(arang[playerid]==4)
    {
    format(query, sizeof(query), "UPDATE `rank` SET arang4 = '%s'",inputtext);
    format(string, sizeof(string), "Du hast den Adminrang 4 in %s umbenannt'",inputtext);
    mysql_query(query);
    SendClientMessage(playerid,Rot,string);
    arang[playerid]=0;
    }
    else if(arang[playerid]==5)
    {
    format(query, sizeof(query), "UPDATE `rank` SET arang5 = '%s'",inputtext);
    format(string, sizeof(string), "Du hast den Adminrang 5 in %s umbenannt'",inputtext);
    mysql_query(query);
    SendClientMessage(playerid,Rot,string);
    arang[playerid]=0;
    }
    else if(arang[playerid]==6)
    {
    format(query, sizeof(query), "UPDATE `rank` SET arang6 = '%s'",inputtext);
    format(string, sizeof(string), "Du hast den Adminrang 6 in %s umbenannt'",inputtext);
    mysql_query(query);
    SendClientMessage(playerid,Rot,string);
    arang[playerid]=0;
    }
    updaterang();
    }
    }


    stock updaterang()
    {
    new id=0;
    mysql_query("SELECT * FROM `aranks`");
    mysql_store_result();
    if(mysql_retrieve_row())
    {
    mysql_fetch_field_row(arang1[id],"arang1");
    mysql_fetch_field_row(arang2[id],"arang2");
    mysql_fetch_field_row(arang3[id],"arang3");
    mysql_fetch_field_row(arang4[id],"arang4");
    mysql_fetch_field_row(arang5[id],"arang5");
    mysql_fetch_field_row(arang6[id],"arang6");
    }
    mysql_free_result();
    return 1;
    }


    Und die Tabelle so:



    MYSQL Log:

    Spoiler anzeigen
    [19:40:22] CMySQLHandler::StoreResult() - Result was stored.

    Spoiler anzeigen
    [19:40:22] >> mysql_fetch_int( Connection handle: 1 )

    Spoiler anzeigen
    [19:40:22] CMySQLHandler::FetchRow() - Return: 0

    Spoiler anzeigen
    [19:40:22] >> mysql_free_result( Connection handle: 1 )

    Spoiler anzeigen
    [19:40:22] CMySQLHandler::FreeResult() - Result was successfully free'd.

    Spoiler anzeigen
    [19:40:27] >> mysql_query( Connection handle: 1 )

    Spoiler anzeigen
    [19:40:28] CMySQLHandler::Query(UPDATE `aranks` SET arang6 = 'test') - Successfully executed.

    Spoiler anzeigen
    [19:40:28] >> mysql_query( Connection handle: 1 )

    Spoiler anzeigen
    [19:40:28] CMySQLHandler::Query(SELECT * FROM `aranks`) - Successfully executed.

    Spoiler anzeigen
    [19:40:28] >> mysql_store_result( Connection handle: 1 )

    Spoiler anzeigen
    [19:40:28] CMySQLHandler::StoreResult() - Result was stored.

    Spoiler anzeigen
    [19:40:28] >> mysql_retrieve_row( Connection handle: 1 )

    Spoiler anzeigen
    [19:40:28] >> mysql_fetch_field_row( Connection handle: 1 )

    Spoiler anzeigen
    [19:40:28] CMySQLHandler::FetchField("arang1") - test

    Spoiler anzeigen
    [19:40:28] >> mysql_fetch_field_row( Connection handle: 1 )

  • Na da erkenne ich doch mein System wieder :D


    Füge mal die Abfrage hinzu, ob sich überhaupt Datensätze in der Tabelle befinden.

    stock updaterang()
    {
    new id=0;
    mysql_query("SELECT * FROM `aranks`");
    mysql_store_result();
    if(mysql_num_row())
    {
    if(mysql_retrieve_row())
    {
    mysql_fetch_field_row(arang1[id],"arang1");
    mysql_fetch_field_row(arang2[id],"arang2");
    mysql_fetch_field_row(arang3[id],"arang3");
    mysql_fetch_field_row(arang4[id],"arang4");
    mysql_fetch_field_row(arang5[id],"arang5");
    mysql_fetch_field_row(arang6[id],"arang6");
    }
    }
    mysql_free_result();
    return 1;
    }

  • [20:58:32] >> mysql_query( Connection handle: 1 )


    [20:58:33] CMySQLHandler::Query(UPDATE `aranks` SET arang3 = 'testadmin') - Successfully executed.


    [20:58:33] >> mysql_query( Connection handle: 1 )


    [20:58:33] CMySQLHandler::Query(SELECT * FROM `aranks`) - Successfully executed.


    [20:58:33] >> mysql_store_result( Connection handle: 1 )


    [20:58:33] CMySQLHandler::StoreResult() - Result was stored.


    [20:58:33] >> mysql_num_rows( Connection handle: 1 )


    [20:58:33] CMySQLHandler::NumRows() - Returned 1 row(s)


    [20:58:33] >> mysql_retrieve_row( Connection handle: 1 )


    [20:58:33] >> mysql_fetch_field_row( Connection handle: 1 )


    [20:58:33] CMySQLHandler::FetchField("arang1") - Leiter


    [20:58:33] >> mysql_fetch_field_row( Connection handle: 1 )



    Wenn ich ein Namen ändere,stürzt der Server ab.
    Und die Namen z.B "Leiter" Wird auch nicht im Dialog angezeigt.

  • Schreibe das mal so:
    stock updaterang()
    {
    new id=0;
    mysql_query("SELECT * FROM `aranks`");
    mysql_store_result();
    new string[256];
    mysql_fetch_row_format(string);
    strins(string, "|", strlen(string));
    printf("string: %s", string);
    new oldi=0;
    new count=0;
    for(new i=0; i<strlen(string); i++)
    {
    if(string[i]=='|')
    {
    count++;
    new tmpstring[sizeof(string)]; tmpstring=string;
    strdel(tmpstring, i, strlen(tmpstring));
    strdel(tmpstring, 0, oldi+1);
    switch(count)
    {
    case 1: format(arang1[id], 64, tmpstring);
    case 2: format(arang2[id], 64, tmpstring);
    case 3: format(arang3[id], 64, tmpstring);
    case 4: format(arang4[id], 64, tmpstring);
    case 5: format(arang5[id], 64, tmpstring);
    case 6: format(arang6[id], 64, tmpstring);
    }
    oldi=i;
    }
    }
    mysql_free_result();
    return 1;
    }


    Wenn es nicht geht: Was sagt der MySQL Log und was der Server Log?

  • Und wie kann ich die Adminrangs auslesen lassen und z.B
    Hier drin verwenden?
    ocmd:makeadmin(playerid, params[])
    {
    new pid,level,string[128],string1[128];
    if(SpielerInfo[playerid][pAdminlevel] < 6) return SendClientMessage(playerid,Rot,"M�glich ab: "COLO" Adminrank 6");
    if(!IsPlayerConnected(pid)) return SendClientMessage(playerid,Rot,"Keiner ist Verbunden mit dieser ID!");
    if(sscanf(params,"ud", pid, level)) return SendClientMessage(playerid, Rot,""COLO"Verwendung :"COLR" /makeadmin [ID] [Level]");
    SpielerInfo[pid][pAdminlevel] = level;
    SavePlayer(pid);
    format(string,sizeof(string),""COLO"[%s] %s"COLR" hat dir das Adminlevel"COLO" %d "COLR"gegeben ",adminrang(playerid),GetName(playerid),level);
    format(string1,sizeof(string1),"Du hast "COLO"%s "COLR"das Adminlevel "COLO"%d "COLR"gegeben ",GetName(pid),level);
    SendClientMessage(playerid,Rot,string1);
    SendClientMessage(pid,Rot,string);
    return 1;
    }

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen