Jump to content
Sign in to follow this  
V3ct0r

Карта мира (Аскарон, Магический океан и Великий синий океан на одной карте)

Recommended Posts

Карта мира (Аскарон, Магический океан и Великий синий океан на одной карте)

 

screenshot.jpg

 

Объединенная игровая карта мира с основными континентами и островами на одной карте.

 

 

Установка карты


Клиент:
1) Поместить файлы world.map, world.obj, world.rbo в папке "Client\map" из приложенного архива в соответствующую папку игрового клиента;
2) Поместить файл миникарты "Client\texture\minimap\world\world.pk" из приложенного архива в соответствующую папку игрового клиента;
3) Добавить в файл mapinfo.txt ("Клиент\scripts\table") строку:

XX    world    World    1    2202,2782        255,255,255

Где XX – последний незанятый ID.
4) Скомпилировать mapinfo.bin.


Сервер:
1) Поместить папку "GameServer\resource\world" из приложенного архива в папку "GameServer\resource" Ваших серверных файлов;
2)  Добавить следующую строку в файл "GameServer\resource\script\MisScript\ScriptDefine.lua"

AddMap("world", "World")

3) Добавить карту в GameServer.cfg для запуска:

map = world

 

 

Некоторые полезные координаты


Основные города:

Аргент     2145, 3410 (&move 2145, 3410, world)
Шайтан     3085, 3250 (&move 3085, 3250, world)
Ледынь     1015,  500 (&move 1015, 500, world)
Громоград   650, 2080 (&move 650, 2080, world)

 

Острова:

Остров Лета       3455, 1755 (&move 3455, 1755, world)
Остров Весны      3506,  797 (&move 3506, 797, world)
Остров Осени      2915, 1460 (&move 2915, 1460, world)
Остров Удачи      1600, 1320 (&move 1600, 1320, world)
Остров Зефира     1405, 2405 (&move 1405, 2405, world)
Остров Купидона   2055, 2490 (&move 2055, 2490, world)
Остров Канареек   3900, 3450 (&move 3900, 3450, world)
Остров Стужи      3050, 2280 (&move 3050, 2280, world)
Ледниковый Остров 2240, 1940 (&move 2240, 1940, world)
Остров Руин       2720, 3670 (&move 2720, 3670, world)
Остров Арены      1225, 2765 (&move 1225, 2765, world)

 


Особенности практического применения


1) Карта не продумывалась в плане дизайна и проектировалась "на глаз" чтобы уместить основные континенты и острова на площади 4096 x 4096. Так, например, не учитывались географические и климатические особенности: "летние" острова находятся рядом с заснеженным континентом, а "зимние" – рядом с пустынным. Целью создания данной карты являлась демонстрация возможности подобных разработок;

2) Карта совершенно пустая. Это означает что на неё нужно добавить: точки возрождения персонажей игроков, NPC, точки возрождения монстров, ресурсы, порталы, причалы, регионы погоды и тому подобное;

3) Поскольку на одной карте будет множество объектов, включая персонажей игроков, неизвестно как будет работать GameServer.exe в плане производительности и хватит ли ему памяти. Вероятно, три основных континента были разделены разработчиками игры на разные карты именно из соображений производительности и распределения ресурсов. Тем не менее, можно попробовать настраивать следующие параметры из GameServer.cfg:

[Entity]
max_ply = 3000
max_cha = 15000                
max_item = 30000        
max_tnpc = 300

4) Серверные файлы world.atr и world.blk были получены с помощью программы YAMMI. При конвертации .map файла в .atr и .blk было получено предупреждение, что данная функция экспериментальная и, при использовании этих файлов на стороне сервера, могут возникнуть непредвиденные проблемы. Если такие проблемы действительно возникнут, и при должной необходимости, рассматривается разработка собственного конвертера .map -> .atr и .map -> .blk;

5) Генерация миникарты занимает около 4 часов, а итоговый файл .pk весит 849 Мегабайт (размер целого клиента!). Это связано с тем, что каждый фрагмент миникарты имеет разрешение 256 x 256 и сохраняется в формате .bmp, а также из-за большего числа фрагментов, чем на любой другой карте ("пустые" фрагменты с морем не сохраняются в .pk файл).  При этом, фрагменты, например, из миникарты garner имеют размеры всего 64 x 64. Поэтому в теории можно существенно сократить размер файла world.pk, если пропатчить Game.exe и заставить его генерировать фрагменты размером 64 x 64. Также стоит отметить, что PK Viewer не работает с такими большими .pk файлами;

6) Файлы карты имеют большие размеры: world.map (86,4 МБ), world.obj (22,3 МБ), world.atr (48,0 МБ), world.blk (8,00 МБ).

 

 

Получение карты

 

Данная карта была получена с помощью Инструмента для обрезания и склеивания карт со следующей программой:

#include <iostream>
#include "Map.h"

// Entry point
int main(int argc, char* argv[])
{
    // Path to directory with maps
    const std::string base{ "C:\\pkodev\\map" };

    // Print a welcome message
    std::cout << "Map cut & glue tool by V3ct0r from PKODev.NET" << std::endl;
    std::cout << std::endl;

    try
    {
        // Write a message
        std::cout << "Building world map, it can take a time . . ." << std::endl;

        // Main maps
        pkodev::MapWrapper garner, magicsea, darkblue;

        // Load main maps
        garner.load(base + "\\garner");
        magicsea.load(base + "\\magicsea");
        darkblue.load(base + "\\darkblue");

        // Main continents
        pkodev::MapWrapper argent, shaitan, icicle;

        // Cut main continents from main maps
        argent  =   garner.cut( { 168, 980  }, { 2364, 3272 } );
        shaitan = magicsea.cut( { 522, 2816 }, { 1880, 3900 } );
        icicle  = darkblue.cut( { 386, 178  }, { 3248, 1076 } );

        // Some islands
        pkodev::MapWrapper autsumspr, fortune, cupid,
            arena, bridge, chill, glacier, zephyr;

        // Cut islands from main maps
        autsumspr = darkblue.cut( { 2088, 2371 }, { 4000, 3660 } ); // Autumn island + Summer island + Spring island
        fortune   = darkblue.cut( { 1414, 1681 }, { 1771, 2024 } ); // Isle of Fortune
        cupid     = magicsea.cut( { 2368, 2330 }, { 2675, 2608 } ); // Cupid isle
        arena     = darkblue.cut( { 372, 3376  }, { 518, 3498  } ); // Arena isle
        bridge    = darkblue.cut( { 762, 3344  }, { 964, 3524  } ); // Unknown isle nearly arena isle
        chill     = magicsea.cut( { 2274, 370  }, { 2554, 782  } ); // Isle of Chill
        glacier   =   garner.cut( { 2134, 1069 }, { 2325, 1222 } ); // Glacier isle
        zephyr    =   garner.cut ({ 3200, 3045 }, { 3610, 3390 } ); // Zephyr isle

        // Use Ascaron map as base map
        garner.del( { 0, 112 }, { 4095, 4000 } );

        // Free main maps
        magicsea.clear();
        darkblue.clear();

        // Add main continents + Autumn/Summer/Spring islands to the base map
        garner.glue( { 80, 1600   }, argent);    argent.clear();
        garner.glue( { 2700, 2500 }, shaitan);   shaitan.clear();
        garner.glue( { 2200, 600  }, autsumspr); autsumspr.clear();
        garner.glue( { 80, 160    }, icicle);    icicle.clear();
           
        // Remove some garbage from the map
        garner.del( { 1119,1872  }, { 2372,2987  });
        garner.del( { 1265, 1660 }, { 1770, 1980 });
        garner.del( { 2621, 1765 }, { 2945, 1935 });
        garner.del( { 2016, 1810 }, { 2115, 1875 });
        garner.del( { 3912, 2623 }, { 4095, 3050 });
        garner.del( { 1082, 1980 }, { 1124, 2024 });
        garner.del( { 1125, 1819 }, { 1246, 1864 });
        garner.del( { 2239, 3000 }, { 2289, 3036 });
        garner.del( { 2948, 600  }, { 2970, 648  });
        garner.del( { 245, 588   }, { 282, 620   });
        garner.del( { 324, 680   }, { 390, 906   });
        garner.del( { 2768, 3442 }, { 2882, 3480 });
        garner.del( { 2935, 3428 }, { 2965, 3460 });
        garner.del( { 3096, 3404 }, { 3226, 3447 });
        garner.del( { 2240, 3572 }, { 2279, 3605 });
        garner.del( { 3383, 3327 }, { 3603, 3459 });
        garner.del( { 3743, 3204 }, { 3864, 3257 });
        garner.del( { 3880, 3076 }, { 3915, 3105 });
        garner.del( { 4010, 3168 }, { 4036, 3205 });
        garner.del( { 3359, 908  }, { 3607, 1090 });
        garner.del( { 1032, 1944 }, { 1055, 1968 });
        garner.del( { 3254, 1192 }, { 3367, 1299 });
        garner.del( { 3093, 1471 }, { 3153, 1610 });
        garner.del( { 3075, 1679 }, { 3117, 1714 });
        garner.del( { 3783, 671  }, { 3881, 793  });
        garner.del( { 3695, 805  }, { 3727, 836  });
        garner.del( { 2963, 615  }, { 2977, 631  });
        garner.del( { 2040, 1685 }, { 2224, 1850 });

        // Add islands to the map
        garner.glue( { 1388, 1036 }, fortune); fortune.clear();
        garner.glue( { 1900, 2420 }, cupid);   cupid.clear();
        garner.glue( { 1125, 2740 }, arena);   arena.clear();
        garner.glue( { 2944, 1932 }, chill);   chill.clear();
        garner.glue( { 2656, 3632 }, bridge);  bridge.clear();
        garner.glue( { 2096, 1885 }, glacier); glacier.clear();
        garner.glue( { 1348, 2160 }, zephyr);  zephyr.clear();

        // Save new map to file
        garner.save(base + "\\garner");

        // Write a message
        std::cout << "Done!" << std::endl;
    }
    catch (const pkodev::map_file_exception& e)
    {
        std::cout << ".map file error: " << e.what() << std::endl;
        return 1;
    }
    catch (const pkodev::obj_file_exception& e)
    {
        std::cout << ".obj file error: " << e.what() << std::endl;
        return 2;
    }
    catch (...)
    {
        std::cout << "Unknown error!" << std::endl;
        return 3;
    }

    return 0;
}

 

Скачать карту (596,3 МБ)

  • Like 3
  • Thanks 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...