Problem mit meinem Mapsystem

In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums
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
  • Hey,
    habe ein kleines Problem mit meinem Mapsystem. Ich habe mir einen Befehl erstellt, der alle meine Maps anzeigt (in einem Listdialog). Die geladenen zuerst, dann die nicht geladenen. Wenn man auf eine Zeile klickt soll ein weiterer Dialog angezeit werden und als Überschrift soll der Dialog den Mapnamen enthalten. Bei den geladenen Maps funktioniert es, aber bei den nicht geladenen nicht. Was mache ich falsch ?
    if(dialogid == 30)
    {
    if(response == 1)
    {
    new LoadingMapName[30];
    if(listitem <= sizeof(ServerMaps))
    {
    format(LoadingMapName,sizeof(LoadingMapName),"%s",GetMapName(listitem));
    ShowPlayerDialog(playerid,56,DIALOG_STYLE_LIST,LoadingMapName,"Unload Map\nReload Map","Select","Back");
    }
    else if(listitem > sizeof(ServerMaps))
    {
    new count = 0;
    new dir:dHandle = dir_open("./scriptfiles/Maps");
    new item[40], type;
    while(dir_list(dHandle, item, type))
    {
    if(type == FM_DIR) continue;
    else if(type == FM_FILE)
    {
    if(IsMapLoaded(item)) continue;
    count++;
    if(count == (listitem+1)-sizeof(ServerMaps))
    {
    strdel(item,strlen(item)-4,strlen(item));
    format(LoadingMapName,sizeof(LoadingMapName),"%s",item);
    ShowPlayerDialog(playerid,56,DIALOG_STYLE_LIST,item,"Load Map","Select","Back");
    break;
    }
    }
    }
    dir_close(dHandle);
    }
    }
    }

  • Debugge es doch mal:
    else if(listitem > sizeof(ServerMaps))
    {
    new count = 0;
    new dir:dHandle = dir_open("./scriptfiles/Maps");
    new item[40], type;
    printf("Ungeladene Maps:");
    while(dir_list(dHandle, item, type))
    {
    if(type == FM_DIR) continue;
    else if(type == FM_FILE)
    {
    printf("Item: %s", item);
    if(IsMapLoaded(item)) continue;
    count++;
    printf("Zähle item %s -> count: %d (== %d)", item, count, (listitem+1)-sizeof(ServerMaps));
    if(count == (listitem+1)-sizeof(ServerMaps))
    {
    printf("Lade...");
    strdel(item,strlen(item)-4,strlen(item));
    format(LoadingMapName,sizeof(LoadingMapName),"%s",item);
    printf("LoadingMapName: %s", LoadingMapName);
    ShowPlayerDialog(playerid,56,DIALOG_STYLE_LIST,item,"Load Map","Select","Back");
    break;
    }
    }
    }
    dir_close(dHandle);
    }


    Was wird denn geprintet?
    Kannst du zudem vielleicht auch noch einen Screenshot von dem Dialog posten (http://www.tinypic.com) und dazu erklären, was passieren soll, wenn du die entsprechende Zeile andrückst?

  • Oh, nicht dran gedacht. :wacko:


    Poste bitte die "IsMapLoaded" und die "GetMapName" Funktion, dann kann ich nachvollziehen wie du das machst.
    Wäre auch gut wenn du gleich noch den Befehl dazu gibst, mit dem du die Maps in der Liste anzeigen lässt (1. Bild), schaden kanns ja nicht.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • stock IsMapLoaded(MapName[])
    {
    for(new i=0;i<sizeof(ServerMaps);i++)
    {
    if(!strcmp(ServerMaps[i][mapname], MapName,true) && strlen(ServerMaps[i][mapname]) > 0 && strlen(MapName) > 0) return 1;
    }
    return 0;
    }
    stock GetMapName(mapID)
    {
    new newmapname[34];
    format(newmapname,sizeof(newmapname),"%s",ServerMaps[mapID][mapname]);
    strdel(newmapname,strlen(newmapname)-4,strlen(newmapname));
    return newmapname;
    }
    CMD:maps(playerid, params[])
    {
    if(!isAdmin(playerid, 5)) return 0;
    new maps[800];
    for(new i=0;i<sizeof(ServerMaps);i++)
    {
    if(isnull(ServerMaps[i][mapname]))continue;
    format(maps,sizeof(maps),"%s{6EF83C}%s\n",maps,GetMapName(i));
    }
    new dir:dHandle = dir_open("./scriptfiles/Maps");
    new item[40], type;
    while(dir_list(dHandle, item, type))
    {
    if(type == FM_DIR) continue;
    else if(type == FM_FILE)
    {
    if(IsMapLoaded(item)) continue;
    strdel(item,strlen(item)-4,strlen(item));
    format(maps,sizeof(maps),"%s{F81414}%s\n",maps,item);
    }
    }
    dir_close(dHandle);
    ShowPlayerDialog(playerid,30,DIALOG_STYLE_LIST,"Server Maps",maps,"Select","Close");
    return 1;
    }

  • if(dialogid == 30)
    {
    if(response == 1)
    {
    new m_count = 0;
    for(new i=0; i<MAX_MAPS; i++) if(!isnull(ServerMaps[i][mapname])) m_count++;
    new LoadingMapName[30];
    if(!isnull(ServerMaps[listitem][mapname]))
    {
    format(LoadingMapName,sizeof(LoadingMapName),"%s",GetMapName(listitem));
    ShowPlayerDialog(playerid,56,DIALOG_STYLE_LIST,LoadingMapName,"Unload Map\nReload Map","Select","Back");
    }
    else
    {
    new count = 0;
    new dir:dHandle = dir_open("./scriptfiles/Maps");
    new item[40], type;
    printf("Ungeladene Maps:");
    while(dir_list(dHandle, item, type))
    {
    if(type == FM_DIR) continue;
    else if(type == FM_FILE)
    {
    printf("Item: %s", item);
    if(IsMapLoaded(item)) continue;
    count++;
    printf("Zähle item %s -> count: %d (== %d)", item, count, (listitem+1)-m_count);
    if(count == (listitem+1)-m_count)
    {
    printf("Lade...");
    strdel(item,strlen(item)-4,strlen(item));
    format(LoadingMapName,sizeof(LoadingMapName),"%s",item);
    printf("LoadingMapName: %s", LoadingMapName);
    ShowPlayerDialog(playerid,56,DIALOG_STYLE_LIST,item,"Load Map","Select","Back");
    break;
    }
    }
    }
    dir_close(dHandle);
    }
    }
    }


    So, wie sieht es damit aus?

  • Großes Danke, es hat funktioniert !