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);
}
}
}
Problem mit meinem Mapsystem
- Oskaar1994
- Geschlossen
- Erledigt
-
-
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? -
Und die Debug Nachrichten erscheinen in der Konsole garnicht erst -
Wie ist denn ServerMaps definiert, und wie wird ihm ein Wert zugewiesen?
-
enum Maps
{
MapID,
mapname[64],
objects[MAX_MAP_OBJECTS]
};
new ServerMaps[MAX_MAPS][Maps];
Der Wert wird bem Laden der Objekte zugewießen. In "objects" werden die Objekt- Id's gespeichert. -
Das würde dann nur gehen, wenn MAX_MAPS 2 ist.
Ändere mal:
sizeof(ServerMaps)
zu:
(strlen(ServerMaps) - 1) -
Überall im Dialog ? Oder nur wenn es um die nicht geladenen Maps geht ? Weil bei den geladenen funktioniert alles.
-
Überall im Dialog. Die geladenen sollten trotzdem noch funktionieren.
-
Überall im Dialog. Die geladenen sollten trotzdem noch funktionieren.
Bekomme dann den Fehler "array dimensions do not match". Ich dachte auch man kann strlen in dem Fall nicht benutzen ? -
Oh, nicht dran gedacht.
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. -
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?
-
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 !
-
breadfish.de
Hat das Thema geschlossen.