Maplist generator

Maplist generator 1.3

Нет прав для скачивания
Сообщения
271
Реакции
347
Помог
15 раз(а)
Хорошая идея.
 
Сообщения
327
Реакции
289
Помог
9 раз(а)
2018-12-19_22-26-45.png

И is_map_valid не нужен. Его все менюшки, работающие с maps.ini вызывают
 
Сообщения
271
Реакции
423
Помог
5 раз(а)
Советую сначала сформировать список карт, а уж потом удалять maps.ini
 
Сообщения
67
Реакции
85
Советую сначала сформировать список карт, а уж потом удалять maps.ini
По текущему алгоритму плагина версии 1.0 с функцией записи у файл внутри цикла лучше этого не делать.
Разве что запоминать список карт в отдельный массив, и потом уже удалять maps.ini и снова создавать файл, записывая туда список карт.
21 Дек 2018
zhorzh78, Благодарю. Сделал по иному варианту.
C++:
#include <amxmodx>

new const maps_list_file[] = "addons/amxmodx/configs/maps.ini"

public plugin_precache()
{
    register_plugin("Map List Generator", "1.1", "Leo_[BH]")

    new dir, mapName[32]
    dir = open_dir("maps", mapName, charsmax(mapName))

    if(dir)
    {
        delete_file(maps_list_file)

        new mapsfileid = fopen(maps_list_file,"wt")
        new lenMapName

        while(next_file(dir, mapName, charsmax(mapName)))
        {
            lenMapName = strlen(mapName)
            
            if (lenMapName > 4 && equali(mapName[lenMapName - 4], ".bsp", 4))
            {
                mapName[lenMapName-4] = '^0'
                format(mapName, charsmax(mapName), "%s^n", mapName)
                fputs(mapsfileid, mapName)
            }
        }
        
        fclose(mapsfileid)
        close_dir(dir)
    }
}
 
Сообщения
67
Реакции
85
delete_file(maps_list_file)
C++:
#include <amxmodx>

new const maps_list_file[] = "addons/amxmodx/configs/maps.ini"

public plugin_precache()
{
    register_plugin("Map List Generator", "1.2", "Leo_[BH]")

    new dir, mapName[32]
    dir = open_dir("maps", mapName, charsmax(mapName))

    if(dir)
    {
        new mapsfileid = fopen(maps_list_file,"wt")
        new lenMapName

        while(next_file(dir, mapName, charsmax(mapName)))
        {
            lenMapName = strlen(mapName)
         
            if (lenMapName > 4 && equali(mapName[lenMapName - 4], ".bsp", 4))
            {
                mapName[lenMapName-4] = '^0'
                format(mapName, charsmax(mapName), "%s^n", mapName)
                fputs(mapsfileid, mapName)
            }
        }
     
        fclose(mapsfileid)
        close_dir(dir)
    }
}
 
Сообщения
327
Реакции
289
Помог
9 раз(а)
C++:
format(mapName, charsmax(mapName), "%s^n", mapName)
fputs(mapsfileid, mapName)
fprintf(file, const fmt[], any:...);
Можно, кончено, массив создать, сформировать в нем полную отформатированную строку и в один присест добавить в файл. Не хватит размера массива- повторить операцию форматирования. 100 карт легко влезут в 1 массив на [3000]
 
Последнее редактирование:
Сообщения
67
Реакции
85
zhorzh78,
C++:
#include <amxmodx>

new const maps_list_file[] = "addons/amxmodx/configs/maps.ini"

public plugin_precache()
{
    register_plugin("Map List Generator", "1.3", "Leo_[BH]")

    new dir, mapName[32]
    dir = open_dir("maps", mapName, charsmax(mapName))

    if(dir)
    {
        new mapsfileid = fopen(maps_list_file,"wt")
        new lenMapName

        while(next_file(dir, mapName, charsmax(mapName)))
        {
            lenMapName = strlen(mapName)
            
            if (lenMapName > 4 && equali(mapName[lenMapName - 4], ".bsp", 4))
            {
                mapName[lenMapName-4] = '^0'
                fprintf(mapsfileid, "%s^n", mapName)
            }
        }
        
        fclose(mapsfileid)
        close_dir(dir)
    }
}
 
Сообщения
327
Реакции
289
Помог
9 раз(а)
Leo_BH,
C++:
#include <amxmodx>

//#define U_MEN9_MNOGO_KART
#define MAX_MAPS_ARRAY_SIZE    3000    //30 карт у меня составили 330 символов

new const maps_list_file[] = "addons/amxmodx/configs/maps.ini"

public plugin_init()
{
    register_plugin("Map List Generator", "1.2", "Leo_[BH]")

    new dir, mapName[32];
    dir = open_dir("maps", mapName, charsmax(mapName))

    if(dir)
    {
        new mapsfileid = fopen(maps_list_file,"wt");
        if(mapsfileid)
        {
            new szMaps[MAX_MAPS_ARRAY_SIZE], iLen, lenMapName;
          
            #if defined U_MEN9_MNOGO_KART
            new iSize = sizeof(szMaps);
            #endif
          
            while(next_file(dir, mapName, charsmax(mapName)))
            {
                lenMapName = strlen(mapName);
      
                if (lenMapName > 4 && equali(mapName[lenMapName - 4], ".bsp", 4))
                {
                    mapName[lenMapName-4] = EOS;
                  
                    #if defined U_MEN9_MNOGO_KART
                    if((iLen + lenMapName) >= iSize)
                    {
                        fprintf(mapsfileid, "%s", szMaps);
                        szMaps[0]= EOS;
                        iLen = 0;
                    }
                    #endif
              
                    iLen +=formatex(szMaps[iLen], charsmax(szMaps)- iLen, "%s^n", mapName);
                }
            }

            //Запишем готовую строку 1 раз, вместо 30 записей каждой карты
            if(iLen)
                fprintf(mapsfileid, "%s", szMaps);
          
            fclose(mapsfileid);
        }

        close_dir(dir);
    }
}
 
Последнее редактирование:
Сообщения
2,491
Реакции
2,790
Помог
61 раз(а)
Как по мне, так лучше интегрировать с мап менеджером от мистрика. Я когда то давно делал свой недо мам менеджер и там было нечто подобное. Суть сводится к тому чтобы не формировать файлик каждый раз, а каждый раз дополнять массив карт с значениями по умолчанию
 
Сообщения
93
Реакции
1
Помог
3 раз(а)
поставил данный плагин. работу выполняет, но карты не по алфавиту а в разброс
 

Garey

ninjaCow
Сообщения
411
Реакции
1,051
Помог
10 раз(а)
Переделал плагин под свои нужды:
- Карты сортируются по алфавиту.
- Добавлен приоритет карт для вставки их перед остальными картами.
C-like:
#include <amxmodx>

new const maps_list_file[] = "addons/amxmodx/configs/maps.ini"
new Trie:g_Trie;

new priority_maps[][] =
{
    "de_dust2",
    "de_nuke",
    "de_cbble"
}

public SortMapNames(Array:array, item1, item2, const data[], data_size)
{
    new szMap[2][32];
    new high_priority[2];
    new bool:found_priority[2];

    ArrayGetArray(array, item1, szMap[0]);
    ArrayGetArray(array, item2, szMap[1]);

    found_priority[0] = TrieGetCell(g_Trie, szMap[0], high_priority[0]);
    found_priority[1] = TrieGetCell(g_Trie, szMap[1], high_priority[1]);

    if(found_priority[0] || found_priority[1])
    {
        if(found_priority[0] && found_priority[1])       
            return high_priority[0] > high_priority[1] ? 1 : -1;       
        else if (found_priority[0])
            return -1;
        else if (found_priority[1])
            return 1;
    }
    return strcmp(szMap[0], szMap[1], true);
}



public plugin_precache()
{
    register_plugin("Map List Generator", "1.3m", "Leo_[BH]")

    new dir, mapName[32]
    dir = open_dir("maps", mapName, charsmax(mapName))
    new Array:g_ArrMaps = ArrayCreate(32);
    g_Trie = TrieCreate();

    for(new i = 0 ; i < sizeof(priority_maps); i++)
    {
        TrieSetCell(g_Trie, priority_maps[i], i);
    }
    if(dir)
    {
        new lenMapName

        while(next_file(dir, mapName, charsmax(mapName)))
        {
            lenMapName = strlen(mapName);
            
            if (lenMapName > 4 && equali(mapName[lenMapName - 4], ".bsp", 4))
            {
                mapName[lenMapName-4] = '^0'
                ArrayPushArray(g_ArrMaps, mapName);       
            }
        }
        
        close_dir(dir)
    }

    ArraySort(g_ArrMaps, "SortMapNames");
    new iSize = ArraySize(g_ArrMaps);
    new szMap[32];
    new mapsfileid = fopen(maps_list_file,"wt");
    for(new i = 0 ; i < iSize; i++)
    {       
        ArrayGetArray(g_ArrMaps, i, szMap);
        fprintf(mapsfileid, "%s^n", szMap)       
    }
    fclose(mapsfileid)
    ArrayDestroy(g_ArrMaps);
    TrieDestroy(g_Trie);
}
 
Сообщения
24
Реакции
9
Map List Generator Для Lite Map Chooser'а

Код:
#include <amxmodx>



new const maps_list_file[] = "addons/amxmodx/configs/maps.ini"



public plugin_precache()

{

    register_plugin("Map List Generator Lite Map Chooser Edition", "1.3", "Leo_[BH]")



    new dir, mapName[32]

    dir = open_dir("maps", mapName, charsmax(mapName))



    if(dir)

    {

        new mapsfileid = fopen(maps_list_file,"wt")

        new lenMapName



        while(next_file(dir, mapName, charsmax(mapName)))

        {

            lenMapName = strlen(mapName)

           

            if (lenMapName > 4 && equali(mapName[lenMapName - 4], ".bsp", 4))

            {

                mapName[lenMapName-4] = '^0'

                fprintf(mapsfileid, "%s 0 32^n", mapName)

            }

        }

       

        fclose(mapsfileid)

        close_dir(dir)

    }

}
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу