Maps laden nicht richtig

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
  • Hallo Community.
    Wenn eine Random map geladen wird und der Ordner Name zu Groß ist dann wird die Map nicht geladen.
    Grund ist, der Ordner Name ist zu groß und bei ca 40 Zeichen ist Schluss.
    Aber die Ordner Namen haben Durchschnittlich 50-60 Zeichen.


    Jeffry:


    Ist aus dem Include ^^


    stock LoadRandomMap(Float:offZ = 5.0)
    {
    new rand;
    do {
    rand = random(LoadData[lMaxMaps]-10000000)+10000000;
    }
    while(LoadData[lLastMap] == rand);
    LoadData[lLastMap] = rand;
    new loadstr[256];
    if(!existproperty(0, "", rand))return print("Es konnte keine Map geladen werden!"),0;
    getproperty(0, "", rand, loadstr);
    strunpack(loadstr, loadstr, 256);
    strins(loadstr,"/Racemaps/",0);
    strcat(loadstr,"/objects.map");
    print(loadstr);
    return LoadMap(loadstr,offZ);
    }


    stock LoadMap(path[], Float:offZ = 5.0)
    {
    if(UnloadMap()){
    new loadstr[400],mapValues[mapData],count;
    if(!fexist(path))return 0;
    new length = strfind(path,"/",true,2), lstring[128];
    strmid(lstring,path,length,strfind(path,"/",true,++length));
    format(LoadData[lLastMapName],128,lstring);


    // GetAuthorName
    new file[256];
    format(file, sizeof(file), "/Racemaps/%s/meta.xml", LoadData[lLastMapName]);
    new XML:xml = xml_open(file);
    new buf[128];
    xml_get_string(xml, "meta/info/@author", buf);
    format(LoadData[Author], sizeof(LoadData[Author]), buf);

    format(file, sizeof(file), "/Racemaps/%s/meta.xml", LoadData[lLastMapName]);
    new item[128];
    new File:thandle = fopen(file, io_read);
    while (fread(thandle, item))
    {
    if(strfind(item, "#time") != -1)
    {
    strmid(item, item, strfind(item, "value=")+7, strfind(item,":"));
    SetWorldTime(strval(item));
    }
    }
    fclose(thandle);


    new File:fhandle = fopen(path,io_read);
    while(fread(fhandle, loadstr))
    {
    if(!loadstr[0])continue;
    if(!sscanf(loadstr, "p<">'object''model='d'posX='f'posY='f'posZ='f'rotX='f'rotY='f'rotZ='f",mapValues[pMmodelid], mapValues[pMX], mapValues[pMY], mapValues[pMZ], mapValues[pMRX], mapValues[pMRY], mapValues[pMRZ]))
    {
    CreateDynamicObject(mapValues[pMmodelid], mapValues[pMX], mapValues[pMY], mapValues[pMZ]+offZ, mapValues[pMRX], mapValues[pMRY], mapValues[pMRZ],-1,-1,-1,300.0,300.0);
    }
    else if(!sscanf(loadstr, "p<">'racepickup''type='s[30]'vehicle='d'posX='f'posY='f'posZ='f'rotX='f'rotY='f'rotZ='f",mapValues[pMtype],mapValues[pMmodelid], mapValues[pMX], mapValues[pMY], mapValues[pMZ], mapValues[pMRX], mapValues[pMRY], mapValues[pMRZ]))
    {
    if(strcmp(mapValues[pMtype],"nitro") == 0)CreateRacePickup(mapValues[pMX], mapValues[pMY], mapValues[pMZ]+offZ,1);
    else if(strcmp(mapValues[pMtype],"repair") == 0)CreateRacePickup(mapValues[pMX], mapValues[pMY], mapValues[pMZ]+offZ,2);
    else if(strcmp(mapValues[pMtype],"vehiclechange") == 0)CreateRacePickup(mapValues[pMX], mapValues[pMY], mapValues[pMZ]+offZ,3,mapValues[pMmodelid]);
    }
    else if(!sscanf(loadstr, "p<">'spawnpoint''vehicle='d'posX='f'posY='f'posZ='f'rotX='f'rotY='f'rotZ='f",mapValues[pMmodelid], mapValues[pMX], mapValues[pMY], mapValues[pMZ], mapValues[pMRX], mapValues[pMRY], mapValues[pMRZ]))
    {
    ++count;
    CreateRaceSpawn(mapValues[pMmodelid], mapValues[pMX], mapValues[pMY], mapValues[pMZ]+offZ, mapValues[pMRZ],count);
    }
    else if(!sscanf(loadstr, "p<">'marker''color='s[10]'posX='f'posY='f'posZ='f",mapValues[pMtype],mapValues[pMX], mapValues[pMY], mapValues[pMZ]))
    {
    mapValues[pMmodelid] = CreateDynamicObject(1559,mapValues[pMX], mapValues[pMY], mapValues[pMZ]+offZ,0.0,0.0,0.0,-1,-1,-1,400.0,400.0);
    mapValues[pMcolorID] = ConvertStringToHex(mapValues[pMtype]);
    SetDynamicObjectMaterial(mapValues[pMmodelid], 0, 1231, "dynsigns", "white64", mapValues[pMcolorID]);
    }
    else if(!sscanf(loadstr, "p<">'speedboost''posX='f'posY='f'posZ='f'veloX='f'veloY='f'veloZ='f",mapValues[pMX], mapValues[pMY], mapValues[pMZ], mapValues[pMRX], mapValues[pMRY], mapValues[pMRZ]))
    {
    CreateRacePickup(mapValues[pMX], mapValues[pMY], mapValues[pMZ]+offZ,4, 0 ,mapValues[pMRX], mapValues[pMRY], mapValues[pMRZ]);
    }
    else if(!sscanf(loadstr, "p<">'teleport''posX='f'posY='f'posZ='f'nposX='f'nposY='f'nposZ='f'rotX='f'rotY='f'rotZ='f",mapValues[pMX], mapValues[pMY], mapValues[pMZ], mapValues[pMRX], mapValues[pMRY], mapValues[pMRZ],mapValues[pNMRZ],mapValues[pNMRZ],mapValues[pNMRZ]))
    {
    CreateRacePickup(mapValues[pMX], mapValues[pMY], mapValues[pMZ]+offZ,5 , 0 ,mapValues[pMRX], mapValues[pMRY], mapValues[pMRZ]+offZ,mapValues[pNMRZ]);
    }
    }
    fclose(fhandle);
    if(!count)return print("Map konnte nicht geladen werden"),0;
    strdel(path,strfind(path,"objects.map"),strlen(path));
    strdel(loadstr,0,sizeof(loadstr));
    format(loadstr,128,"/Racemaps/%s/meta.xml",LoadData[lLastMapName]);
    LoadFromMeta(loadstr);
    }
    return 1;
    }


    Debug:

    Code
    /Racemaps/(DM) RaZoR ft. =Maty=! - Melancholic Pi/objects.map

    Einmal editiert, zuletzt von Pascal. ()

  • Ja, die Maps die ein langen Ordner Namen haben werden nicht geladen.
    loadstr ist der Pfad, den ich bei LoadRandomMap printe.
    Bei längeren Ordner Name ist dort nicht der vollständige Name, dann wird die Map auch nicht geladen.


    //EDIT:


    Unten in mein Thread ist ein Debug code, das wird ausgegeben, daran sieht man auch das der Ordner Name nicht ganz geladen wird.

    Einmal editiert, zuletzt von Pascal. ()

  • Unten in mein Thread ist ein Debug code, das wird ausgegeben, daran sieht man auch das der Ordner Name nicht ganz geladen wird.


    Ach ich dachte das Ding heißt so.


    Hast du mal versucht, die 256 von loadstr, überall wo das verwendet wird, auf 512 zu ändern?
    Wenn das nicht geht, zeig mal wie du das Property setzt.


    Alternativ kannst du auch einfach über ein ganz normales Array arbeiten.

  • Ich hatte es schon mit einer anderen Größe versucht, leider ging das auch nicht.
    Da alles nicht so geklappt hat habe ich das ganz anders gemacht.
    Nun muss man einfach sobald man eine Map downloadet, den Name in der meta.xml umschreiben.
    So klappt es eigentlich auch bisher sehr gut.
    Deshalb kann man das hier abschließen, ich bedanke mich trotzdem für die Hilfe.