Beiträge von Jeffry

    Mit einer Spielervariable:


    Beim einschalten:
    SetPVarInt(playerid, "RadioAn", 1);
    beim ausschalten:
    SetPVarInt(playerid, "RadioAn", 0);


    Beim einsteigen:
    if(GetPVarInt(playerid, "RadioAn") == 1)
    {
    //Stream starten
    }


    Oder äquivalent mit einem Array.

    Schreibe die Funktion mal so, geht es dann?
    Wenn nein, wer von den 4'en ist online?


    stock OnlineByName(string[])
    {
    for(new i; i < MAX_PLAYERS ; ++i) if(IsPlayerConnected(i) && !strcmp(string,PlayerInfo[i][pLeaderListe],false) && strlen(PlayerInfo[i][pLeaderListe]) > 1) return 1;
    return 0;
    }

    Gibt dir der Code keine Errors? :huh:


    Schreibe es mal so:
    if(dialogid==DIALOG_CARKEYS)
    {
    if(response)
    {
    for(new mv;mv<MaxVeh;mv++)
    {
    new wstring[145];
    Dtc_PlayerKey[playerid]=listitem;
    if(Dtc_PlayerHaveCar[playerid][listitem])
    {
    format(wstring, sizeof(wstring), "Du nimmst deinen %dten Auto-Schlüssel, für deinen %s!",listitem+1,CarName[PlayerCar[playerid][listitem][CarModel]-400]);
    SendClientMessage(playerid,blau,wstring);
    break;
    }
    else
    {
    format(wstring, sizeof(wstring), "Du nimmst deinen %dten Auto-Schlüssel, für deinen einen freien Platz!",listitem+1);
    SendClientMessage(playerid,blau,wstring);
    break;
    }
    }
    }
    return 1;
    }


    Ich nehme an, das ist dein Schlüssel: Dtc_PlayerKey[playerid]

    Immer dieses sscanf...


    Schreibe es so:

    Spoiler anzeigen
    if(strcmp("/leaderlist", cmd, true) == 0)
    {
    new data[128],fName,sName[MAX_PLAYER_NAME],showList[1200];
    mysql_query("SELECT `Name`, `Leader` FROM `users` WHERE `Leader` > 0");
    mysql_store_result();
    while(mysql_fetch_row_format(data)){
    strins(data, "|", strlen(data));
    printf("data: %s", data);
    new oldi=0, count=0;
    for(new i=0; i<strlen(data); i++)
    {
    if(data[i]=='|')
    {
    count++;
    new tmpstring[sizeof(data)]; tmpstring=data;
    strdel(tmpstring, i, strlen(tmpstring));
    strdel(tmpstring, 0, oldi+1);
    switch(count)
    {
    case 1: format(sName, sizeof(sName), "%s", tmpstring);
    case 2: fName = strval(tmpstring);
    }
    oldi=i;
    }
    }
    printf("sName: %s | fName: %d | return: %s", sName, fName, GetFraktion(fName));
    format(showList,sizeof(showList),"%s{FFFFFF}%s Leader: %s (%s{FFFFFF})\n",showList,GetFraktion(fName),sName,((!OnlineByName(sName))?("{F6000F}Offline"):("{00EE14}Online")));
    }
    mysql_free_result();
    ShowPlayerDialog(playerid,DIALOG_VOGELLEADER,DIALOG_STYLE_MSGBOX,"Leaders",showList,"Bestätigen","");
    return 1;
    }


    Ist im Prinzip das gleiche wie sscanf, nur manuell.


    Nutzt du die Funktion oder das Plugin?




    EDIT: Edit erst nach dem posten gesehen.
    Ok, gut.



    Dann poste mal deine OnlineByName Funktion.

    So sollte es dann klappen:
    if(strcmp("/leaderlist", cmd, true) == 0)
    {
    new data[128],fName,sName[MAX_PLAYER_NAME],showList[1200];
    mysql_query("SELECT `Name`, `Leader` FROM `users` WHERE `Leader` > 0");
    mysql_store_result();
    while(mysql_fetch_row_format(data)){
    format(data, sizeof(data), "%s|", data);
    printf("data: %s", data);
    sscanf(data,"p<|>s[20]d",sName,fName);
    printf("sName: %s | fName: %d | return: %s", sName, fName, GetFraktion(fName));
    format(showList,sizeof(showList),"%s{FFFFFF}%s Leader: %s (%s{FFFFFF})\n",showList,GetFraktion(fName),sName,((!OnlineByName(sName))?("{F6000F}Offline"):("{00EE14}Online")));
    }
    mysql_free_result();
    ShowPlayerDialog(playerid,DIALOG_VOGELLEADER,DIALOG_STYLE_MSGBOX,"Leaders",showList,"Bestätigen","");
    return 1;
    }


    Wenn nicht, poste nochmal den Log.

    Was wird geprintet, wenn du es so schreibst?
    if(strcmp("/leaderlist", cmd, true) == 0)
    {
    new data[128],fName,sName[MAX_PLAYER_NAME],showList[1200];
    mysql_query("SELECT `Name`, `Leader` FROM `users` WHERE `Leader` > 0");
    mysql_store_result();
    while(mysql_fetch_row_format(data)){
    printf("data: %s", data);
    sscanf(data,"p<|>s[20]d",sName,fName);
    printf("sName: %s | fName: %d | return: %s", sName, fName, GetFraktion(fName));
    format(showList,sizeof(showList),"%s{FFFFFF}%s Leader: %s (%s{FFFFFF})\n",showList,GetFraktion(fName),sName,((!OnlineByName(sName))?("{F6000F}Offline"):("{00EE14}Online")));
    }
    mysql_free_result();
    ShowPlayerDialog(playerid,DIALOG_VOGELLEADER,DIALOG_STYLE_MSGBOX,"Leaders",showList,"Bestätigen","");
    return 1;
    }

    Ok, hätte ich nicht erwartet. Öh, ja, eigentlich habe ich nicht wirklich was geändert, außer die drei Variablen raus geschmissen, aber das kann nicht der Grund sein.


    Und dann eben hier noch ein format eingefügt:
    cache_get_field_content(i,"Ort",tmp,dbhandle);
    format(gpsInfo[i][gpse_ort], 64, tmp);


    Ich tippe darauf, dass die cache Funktion nicht mit dem Array in enum klar kommt, vor allen weil auch im Log als max_len 1 steht.

    Zitat

    [13:48:53] [DEBUG] cache_get_field_content - row: 0, field_name: "Ort", connection: 1, max_len: 1

    Schreibe den Ladevorgang mal so:
    public gpsload()
    {
    new num_rows,num_fields, tmp[128];
    cache_get_data(num_rows,num_fields,dbhandle);
    for(new i=0;i<num_rows;i++)
    {
    cache_get_field_content(i,"Ort",tmp,dbhandle);
    printf("Lade: %d - Name: %s", i, tmp);
    format(gpsInfo[i][gpse_ort], 64, tmp);
    printf("Gespeichert: %s", gpsInfo[i][gpse_ort]);
    cache_get_field_content(i,"X",tmp,dbhandle);
    gpsInfo[i][gpse_x]=floatstr(tmp);
    cache_get_field_content(i,"Y",tmp,dbhandle);
    gpsInfo[i][gpse_y]=floatstr(tmp);
    cache_get_field_content(i,"Z",tmp,dbhandle);
    gpsInfo[i][gpse_z]=floatstr(tmp);
    }
    return 1;
    }


    Wenn es nicht klappt, was steht im server_log wenn du den Server startest?

    Ah, das hast aber reineditiert, als ich gepostet habe war das noch nicht da. :D


    Schreibe das mal so:
    ocmd@3:gps,navi,navigation(playerid,params[])
    {
    new string[500];
    for(new i=0;i<sizeof(gpsInfo);i++)
    {
    if(strlen(gpsInfo[i][gpse_ort])) format(string,sizeof(string),"%s%s\n",string,gpsInfo[i][gpse_ort]);
    }
    ShowPlayerDialog(playerid,DIALOG_GPS,DIALOG_STYLE_LIST,"Navigation",string,"Auswählen","Abbrechen");
    return 1;
    }


    Und hast du
    new gpsInfo[][gpsEnum]={
    {}
    };
    zu
    new gpsInfo[100][gpsEnum];
    geändert? Sonst ist sizeof 1, sprich es zeigt dir nur den ersten Wert an.

    Das ist aber nicht der Befehl der den Dialog anzeigen soll. ;)


    Übrigens, das solltest du zu:
    #define MAX_LOCATIONS 100
    new gpsInfo[MAX_LOCATIONS][gpsEnum];
    ändern.

    Das stimmt doch dann.
    Der Ort Test ist an den Koordinaten 0/0/0 (laut Screenshot).


    Das wird auch geladen:


    Was genau ist das Problem jetzt? :huh: