Refactor generator to support future features (#7214)

Co-authored-by: Akkarinage <mike.langford@industrial-illusions.net>
Co-authored-by: Aleos <aleos89@users.noreply.github.com>
This commit is contained in:
Vincent Stumpf 2022-09-25 00:37:21 -07:00 committed by GitHub
parent c2e19bcf06
commit 47c9a36215
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 777 additions and 24 deletions

View File

@ -0,0 +1,26 @@
# Map Server Generator
This is a tool to generate files that are hard to manually create.
Only navigation files can be generated at this time.
## How to run
### Linux
Run `make tools`.
This creates a new binary called `map-server-generator`.
It can be ran with: `./map-server-generator`
### Windows
It can be ran with `./map-server-generator.exe`, or with the provided `.bat` files.
## Available options
On Linux, prefix with `--`
On Windows, prefix with `/`
option | feature
---|---
generate-navi | create navigation files

View File

@ -59,6 +59,11 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "map-server", "src\map\map-s
{F8FD7B1E-8E1C-4CC3-9CD1-2E28F77B6559} = {F8FD7B1E-8E1C-4CC3-9CD1-2E28F77B6559}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "map-server-generator", "src\map\map-server-generator.vcxproj", "{EB03BC16-8A47-43B9-B5BB-D0200E4A2775}"
ProjectSection(ProjectDependencies) = postProject
{F8FD7B1E-8E1C-4CC3-9CD1-2E28F77B6559} = {F8FD7B1E-8E1C-4CC3-9CD1-2E28F77B6559}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "common-minicore", "src\common\common-minicore.vcxproj", "{352B45B3-FE88-4431-9D89-48CF811446DB}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{9F328FE9-129D-4C0C-820B-BE4AA5996652}"
@ -149,6 +154,14 @@ Global
{B4114A9C-EEA4-433C-A830-56119A984F24}.Release|Win32.Build.0 = Release|Win32
{B4114A9C-EEA4-433C-A830-56119A984F24}.Release|x64.ActiveCfg = Release|x64
{B4114A9C-EEA4-433C-A830-56119A984F24}.Release|x64.Build.0 = Release|x64
{EB03BC16-8A47-43B9-B5BB-D0200E4A2775}.Debug|Win32.ActiveCfg = Debug|Win32
{EB03BC16-8A47-43B9-B5BB-D0200E4A2775}.Debug|Win32.Build.0 = Debug|Win32
{EB03BC16-8A47-43B9-B5BB-D0200E4A2775}.Debug|x64.ActiveCfg = Debug|x64
{EB03BC16-8A47-43B9-B5BB-D0200E4A2775}.Debug|x64.Build.0 = Debug|x64
{EB03BC16-8A47-43B9-B5BB-D0200E4A2775}.Release|Win32.ActiveCfg = Release|Win32
{EB03BC16-8A47-43B9-B5BB-D0200E4A2775}.Release|Win32.Build.0 = Release|Win32
{EB03BC16-8A47-43B9-B5BB-D0200E4A2775}.Release|x64.ActiveCfg = Release|x64
{EB03BC16-8A47-43B9-B5BB-D0200E4A2775}.Release|x64.Build.0 = Release|x64
{352B45B3-FE88-4431-9D89-48CF811446DB}.Debug|Win32.ActiveCfg = Debug|Win32
{352B45B3-FE88-4431-9D89-48CF811446DB}.Debug|Win32.Build.0 = Debug|Win32
{352B45B3-FE88-4431-9D89-48CF811446DB}.Debug|x64.ActiveCfg = Debug|x64
@ -232,6 +245,7 @@ Global
{864805EA-FD39-453D-9248-C581951BA058} = {6D9F5D00-2988-4812-844D-D155C4F588DC}
{FED3A941-0AF7-49FE-85CF-E1DFDC0EBB23} = {6D9F5D00-2988-4812-844D-D155C4F588DC}
{B4114A9C-EEA4-433C-A830-56119A984F24} = {6D9F5D00-2988-4812-844D-D155C4F588DC}
{EB03BC16-8A47-43B9-B5BB-D0200E4A2775} = {9F328FE9-129D-4C0C-820B-BE4AA5996652}
{352B45B3-FE88-4431-9D89-48CF811446DB} = {C0A6FC9A-3A5C-48F8-A4B6-8D463C61C021}
{FC4C071B-2C26-4B03-948A-335C94A88B5E} = {9F328FE9-129D-4C0C-820B-BE4AA5996652}
{61D6A599-6BED-4154-A9FC-40553BD972E0} = {6ABA1767-6242-4CA0-BA22-A30972DC8918}

View File

@ -88,6 +88,10 @@ int cli_get_options(int argc, char ** argv) {
for (i = 1; i < argc; i++) {
const char* arg = argv[i];
// to temporarily support mapgenerator options
if (!arg)
continue;
if (arg[0] != '-' && (arg[0] != '/' || arg[1] == '-')) {// -, -- and /
ShowError("Unknown option '%s'.\n", argv[i]);
exit(EXIT_FAILURE);

View File

@ -36,7 +36,7 @@ else
endif
TOOLS_DEPENDS=map-server-generator
TOOLS_FLAGS="-DGENERATE_NAVI"
TOOLS_FLAGS="-DMAP_GENERATOR"
@SET_MAKE@

View File

@ -10473,7 +10473,7 @@ void battle_adjust_conf()
ShowWarning("Battle setting 'custom_cell_stack_limit' takes no effect as this server was compiled without Cell Stack Limit support.\n");
#endif
#ifdef GENERATE_NAVI
#ifdef MAP_GENERATOR
battle_config.dynamic_mobs = 1;
#endif
}

View File

@ -0,0 +1,372 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{EB03BC16-8A47-43B9-B5BB-D0200E4A2775}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>mapserver</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(SolutionDir)</OutDir>
<IntDir>$(SolutionDir).vs\build\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(SolutionDir)</OutDir>
<IntDir>$(SolutionDir).vs\build\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)</OutDir>
<IntDir>$(SolutionDir).vs\build\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)</OutDir>
<IntDir>$(SolutionDir).vs\build\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<VcpkgUseStatic>true</VcpkgUseStatic>
</PropertyGroup>
<PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<VcpkgUseStatic>true</VcpkgUseStatic>
</PropertyGroup>
<PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<VcpkgUseStatic>true</VcpkgUseStatic>
</PropertyGroup>
<PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<VcpkgUseStatic>true</VcpkgUseStatic>
</PropertyGroup>
<PropertyGroup Label="Vcpkg">
<VcpkgEnabled>false</VcpkgEnabled>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>$(DefineConstants);MAP_GENERATOR;WIN32;FD_SETSIZE=4096;PCRE_SUPPORT;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_WINSOCK_DEPRECATED_NO_WARNINGS;LIBCONFIG_STATIC;YY_USE_CONST;_DEBUG;_CONSOLE;_LIB;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<DisableSpecificWarnings>4018;4200</DisableSpecificWarnings>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<AdditionalIncludeDirectories>$(SolutionDir)\3rdparty\rapidyaml\src;$(SolutionDir)\3rdparty\rapidyaml\ext\c4core\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>ws2_32.lib;$(SolutionDir).vs\build\ryml.lib;$(SolutionDir).vs\build\common.lib;$(SolutionDir).vs\build\libconfig.lib;$(SolutionDir)3rdparty\zlib\lib\$(Platform)\zlib.lib;$(SolutionDir)3rdparty\pcre\lib\$(Platform)\pcre8.lib;$(SolutionDir)3rdparty\mysql\lib\$(Platform)\libmysql.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>$(DefineConstants);MAP_GENERATOR;WIN32;FD_SETSIZE=4096;PCRE_SUPPORT;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_WINSOCK_DEPRECATED_NO_WARNINGS;LIBCONFIG_STATIC;YY_USE_CONST;_DEBUG;_CONSOLE;_LIB;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<DisableSpecificWarnings>4018</DisableSpecificWarnings>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<AdditionalIncludeDirectories>$(SolutionDir)\3rdparty\rapidyaml\src;$(SolutionDir)\3rdparty\rapidyaml\ext\c4core\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>ws2_32.lib;$(SolutionDir).vs\build\ryml.lib;$(SolutionDir).vs\build\common.lib;$(SolutionDir).vs\build\libconfig.lib;$(SolutionDir)3rdparty\zlib\lib\$(Platform)\zlib.lib;$(SolutionDir)3rdparty\pcre\lib\$(Platform)\pcre8.lib;$(SolutionDir)3rdparty\mysql\lib\$(Platform)\libmysql.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>$(DefineConstants);MAP_GENERATOR;WIN32;FD_SETSIZE=4096;PCRE_SUPPORT;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_WINSOCK_DEPRECATED_NO_WARNINGS;LIBCONFIG_STATIC;YY_USE_CONST;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<DisableSpecificWarnings>4018</DisableSpecificWarnings>
<AdditionalIncludeDirectories>$(SolutionDir)\3rdparty\rapidyaml\src;$(SolutionDir)\3rdparty\rapidyaml\ext\c4core\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>ws2_32.lib;$(SolutionDir).vs\build\ryml.lib;$(SolutionDir).vs\build\common.lib;$(SolutionDir).vs\build\libconfig.lib;$(SolutionDir)3rdparty\zlib\lib\$(Platform)\zlib.lib;$(SolutionDir)3rdparty\pcre\lib\$(Platform)\pcre8.lib;$(SolutionDir)3rdparty\mysql\lib\$(Platform)\libmysql.lib;%(AdditionalDependencies)</AdditionalDependencies>
<Profile>true</Profile>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>$(DefineConstants);MAP_GENERATOR;WIN32;FD_SETSIZE=4096;PCRE_SUPPORT;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_WINSOCK_DEPRECATED_NO_WARNINGS;LIBCONFIG_STATIC;YY_USE_CONST;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<DisableSpecificWarnings>4018</DisableSpecificWarnings>
<AdditionalIncludeDirectories>$(SolutionDir)\3rdparty\rapidyaml\src;$(SolutionDir)\3rdparty\rapidyaml\ext\c4core\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>ws2_32.lib;$(SolutionDir).vs\build\ryml.lib;$(SolutionDir).vs\build\common.lib;$(SolutionDir).vs\build\libconfig.lib;$(SolutionDir)3rdparty\zlib\lib\$(Platform)\zlib.lib;$(SolutionDir)3rdparty\pcre\lib\$(Platform)\pcre8.lib;$(SolutionDir)3rdparty\mysql\lib\$(Platform)\libmysql.lib;%(AdditionalDependencies)</AdditionalDependencies>
<Profile>true</Profile>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="achievement.hpp" />
<ClInclude Include="atcommand.hpp" />
<ClInclude Include="battle.hpp" />
<ClInclude Include="battleground.hpp" />
<ClInclude Include="buyingstore.hpp" />
<ClInclude Include="cashshop.hpp" />
<ClInclude Include="channel.hpp" />
<ClInclude Include="chat.hpp" />
<ClInclude Include="chrif.hpp" />
<ClInclude Include="clan.hpp" />
<ClInclude Include="clif.hpp" />
<ClInclude Include="clif_obfuscation.hpp" />
<ClInclude Include="clif_packetdb.hpp" />
<ClInclude Include="clif_shuffle.hpp" />
<ClInclude Include="date.hpp" />
<ClInclude Include="duel.hpp" />
<ClInclude Include="elemental.hpp" />
<ClInclude Include="guild.hpp" />
<ClInclude Include="homunculus.hpp" />
<ClInclude Include="instance.hpp" />
<ClInclude Include="intif.hpp" />
<ClInclude Include="itemdb.hpp" />
<ClInclude Include="log.hpp" />
<ClInclude Include="mail.hpp" />
<ClInclude Include="map.hpp" />
<ClInclude Include="mapreg.hpp" />
<ClInclude Include="mercenary.hpp" />
<ClInclude Include="mob.hpp" />
<ClInclude Include="navi.hpp" />
<ClInclude Include="npc.hpp" />
<ClInclude Include="packets.hpp" />
<ClInclude Include="packets_struct.hpp" />
<ClInclude Include="party.hpp" />
<ClInclude Include="path.hpp" />
<ClInclude Include="pc.hpp" />
<ClInclude Include="pc_groups.hpp" />
<ClInclude Include="pet.hpp" />
<ClInclude Include="quest.hpp" />
<ClInclude Include="script.hpp" />
<ClInclude Include="script_constants.hpp" />
<ClInclude Include="searchstore.hpp" />
<ClInclude Include="skill.hpp" />
<ClInclude Include="status.hpp" />
<ClInclude Include="storage.hpp" />
<ClInclude Include="trade.hpp" />
<ClInclude Include="unit.hpp" />
<ClInclude Include="vending.hpp" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="achievement.cpp" />
<ClCompile Include="atcommand.cpp" />
<ClCompile Include="battle.cpp" />
<ClCompile Include="battleground.cpp" />
<ClCompile Include="buyingstore.cpp" />
<ClCompile Include="cashshop.cpp" />
<ClCompile Include="channel.cpp" />
<ClCompile Include="chat.cpp" />
<ClCompile Include="chrif.cpp" />
<ClCompile Include="clan.cpp" />
<ClCompile Include="clif.cpp" />
<ClCompile Include="date.cpp" />
<ClCompile Include="duel.cpp" />
<ClCompile Include="elemental.cpp" />
<ClCompile Include="guild.cpp" />
<ClCompile Include="homunculus.cpp" />
<ClCompile Include="instance.cpp" />
<ClCompile Include="intif.cpp" />
<ClCompile Include="itemdb.cpp" />
<ClCompile Include="log.cpp" />
<ClCompile Include="mail.cpp" />
<ClCompile Include="map.cpp" />
<ClCompile Include="mapreg.cpp" />
<ClCompile Include="mercenary.cpp" />
<ClCompile Include="mob.cpp">
<Optimization Condition="'$(Configuration)'=='Release'">Disabled</Optimization>
</ClCompile>
<ClCompile Include="navi.cpp" />
<ClCompile Include="npc.cpp" />
<ClCompile Include="npc_chat.cpp" />
<ClCompile Include="party.cpp" />
<ClCompile Include="path.cpp" />
<ClCompile Include="pc.cpp" />
<ClCompile Include="pc_groups.cpp" />
<ClCompile Include="pet.cpp" />
<ClCompile Include="quest.cpp" />
<ClCompile Include="script.cpp" />
<ClCompile Include="searchstore.cpp" />
<ClCompile Include="skill.cpp" />
<ClCompile Include="status.cpp" />
<ClCompile Include="storage.cpp" />
<ClCompile Include="trade.cpp" />
<ClCompile Include="unit.cpp" />
<ClCompile Include="vending.cpp" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
<Target Name="AfterClean">
<Delete Files="$(SolutionDir)libmysql.dll" ContinueOnError="true" />
<Delete Files="$(SolutionDir)zlib.dll" ContinueOnError="true" />
<Delete Files="$(SolutionDir)pcre8.dll" ContinueOnError="true" />
<Delete Files="$(SolutionDir)navigenerator.bat" ContinueOnError="true" />
</Target>
<Target Name="AfterBuild">
<Copy SourceFiles="$(SolutionDir)3rdparty\mysql\lib\$(Platform)\libmysql.dll" DestinationFolder="$(SolutionDir)" ContinueOnError="true" Condition="!Exists('$(SolutionDir)libmysql.dll')" />
<Copy SourceFiles="$(SolutionDir)3rdparty\pcre\lib\$(Platform)\pcre8.dll" DestinationFolder="$(SolutionDir)" ContinueOnError="true" Condition="!Exists('$(SolutionDir)pcre8.dll')" />
<Copy SourceFiles="$(SolutionDir)3rdparty\zlib\lib\$(Platform)\zlib.dll" DestinationFolder="$(SolutionDir)" ContinueOnError="true" Condition="!Exists('$(SolutionDir)zlib.dll')" />
<Copy SourceFiles="$(SolutionDir)tools\navigenerator.bat" DestinationFolder="$(SolutionDir)" ContinueOnError="true" Condition="!Exists('$(SolutionDir)navigenerator.bat')" />
<Copy SourceFiles="$(SolutionDir)conf\import-tmpl\atcommands.yml" DestinationFolder="$(SolutionDir)conf\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)conf\import\atcommands.yml')" />
<Copy SourceFiles="$(SolutionDir)conf\import-tmpl\battle_conf.txt" DestinationFolder="$(SolutionDir)conf\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)conf\import\battle_conf.txt')" />
<Copy SourceFiles="$(SolutionDir)conf\import-tmpl\char_conf.txt" DestinationFolder="$(SolutionDir)conf\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)conf\import\char_conf.txt')" />
<Copy SourceFiles="$(SolutionDir)conf\import-tmpl\groups.yml" DestinationFolder="$(SolutionDir)conf\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)conf\import\groups.yml')" />
<Copy SourceFiles="$(SolutionDir)conf\import-tmpl\inter_conf.txt" DestinationFolder="$(SolutionDir)conf\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)conf\import\inter_conf.txt')" />
<Copy SourceFiles="$(SolutionDir)conf\import-tmpl\inter_server.yml" DestinationFolder="$(SolutionDir)conf\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)conf\import\inter_server.yml')" />
<Copy SourceFiles="$(SolutionDir)conf\import-tmpl\log_conf.txt" DestinationFolder="$(SolutionDir)conf\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)conf\import\log_conf.txt')" />
<Copy SourceFiles="$(SolutionDir)conf\import-tmpl\login_conf.txt" DestinationFolder="$(SolutionDir)conf\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)conf\import\login_conf.txt')" />
<Copy SourceFiles="$(SolutionDir)conf\import-tmpl\map_conf.txt" DestinationFolder="$(SolutionDir)conf\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)conf\import\map_conf.txt')" />
<Copy SourceFiles="$(SolutionDir)conf\import-tmpl\packet_conf.txt" DestinationFolder="$(SolutionDir)conf\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)conf\import\packet_conf.txt')" />
<Copy SourceFiles="$(SolutionDir)conf\import-tmpl\script_conf.txt" DestinationFolder="$(SolutionDir)conf\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)conf\import\script_conf.txt')" />
<Copy SourceFiles="$(SolutionDir)conf\msg_conf\import-tmpl\map_msg_chn_conf.txt" DestinationFolder="$(SolutionDir)conf\msg_conf\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)conf\msg_conf\import\map_msg_chn_conf.txt')" />
<Copy SourceFiles="$(SolutionDir)conf\msg_conf\import-tmpl\map_msg_eng_conf.txt" DestinationFolder="$(SolutionDir)conf\msg_conf\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)conf\msg_conf\import\map_msg_eng_conf.txt')" />
<Copy SourceFiles="$(SolutionDir)conf\msg_conf\import-tmpl\map_msg_frn_conf.txt" DestinationFolder="$(SolutionDir)conf\msg_conf\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)conf\msg_conf\import\map_msg_frn_conf.txt')" />
<Copy SourceFiles="$(SolutionDir)conf\msg_conf\import-tmpl\map_msg_grm_conf.txt" DestinationFolder="$(SolutionDir)conf\msg_conf\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)conf\msg_conf\import\map_msg_grm_conf.txt')" />
<Copy SourceFiles="$(SolutionDir)conf\msg_conf\import-tmpl\map_msg_idn_conf.txt" DestinationFolder="$(SolutionDir)conf\msg_conf\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)conf\msg_conf\import\map_msg_idn_conf.txt')" />
<Copy SourceFiles="$(SolutionDir)conf\msg_conf\import-tmpl\map_msg_mal_conf.txt" DestinationFolder="$(SolutionDir)conf\msg_conf\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)conf\msg_conf\import\map_msg_mal_conf.txt')" />
<Copy SourceFiles="$(SolutionDir)conf\msg_conf\import-tmpl\map_msg_por_conf.txt" DestinationFolder="$(SolutionDir)conf\msg_conf\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)conf\msg_conf\import\map_msg_por_conf.txt')" />
<Copy SourceFiles="$(SolutionDir)conf\msg_conf\import-tmpl\map_msg_rus_conf.txt" DestinationFolder="$(SolutionDir)conf\msg_conf\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)conf\msg_conf\import\map_msg_rus_conf.txt')" />
<Copy SourceFiles="$(SolutionDir)conf\msg_conf\import-tmpl\map_msg_spn_conf.txt" DestinationFolder="$(SolutionDir)conf\msg_conf\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)conf\msg_conf\import\map_msg_spn_conf.txt')" />
<Copy SourceFiles="$(SolutionDir)conf\msg_conf\import-tmpl\map_msg_tha_conf.txt" DestinationFolder="$(SolutionDir)conf\msg_conf\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)conf\msg_conf\import\map_msg_tha_conf.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\abra_db.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\abra_db.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\achievement_db.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\achievement_db.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\achievement_level_db.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\achievement_level_db.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\attendance.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\attendance.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\attr_fix.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\attr_fix.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\battleground_db.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\battleground_db.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\castle_db.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\castle_db.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\const.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\const.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\create_arrow_db.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\create_arrow_db.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\elemental_db.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\elemental_db.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\enchantgrade.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\enchantgrade.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\exp_homun.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\exp_homun.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\exp_guild.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\exp_guild.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\guild_skill_tree.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\guild_skill_tree.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\homun_skill_tree.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\homun_skill_tree.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\homunculus_db.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\homunculus_db.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\instance_db.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\instance_db.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\item_cash_db.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\item_cash_db.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\item_combos.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\item_combos.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\item_db.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\item_db.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\item_group_db.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\item_group_db.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\item_noequip.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\item_noequip.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\item_randomopt_db.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\item_randomopt_db.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\item_randomopt_group.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\item_randomopt_group.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\item_reform.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\item_reform.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\job_noenter_map.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\job_noenter_map.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\job_stats.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\job_stats.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\laphine_synthesis.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\laphine_synthesis.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\laphine_upgrade.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\laphine_upgrade.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\level_penalty.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\level_penalty.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\magicmushroom_db.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\magicmushroom_db.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\map_cache.dat" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\map_cache.dat')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\map_drops.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\map_drops.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\map_index.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\map_index.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\mercenary_db.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\mercenary_db.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\mob_avail.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\mob_avail.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\mob_summon.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\mob_summon.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\mob_chat_db.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\mob_chat_db.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\mob_db.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\mob_db.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\mob_item_ratio.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\mob_item_ratio.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\mob_skill_db.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\mob_skill_db.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\pet_db.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\pet_db.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\produce_db.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\produce_db.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\quest_db.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\quest_db.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\refine.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\refine.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\reputation.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\reputation.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\size_fix.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\size_fix.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\skill_changematerial_db.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\skill_changematerial_db.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\skill_damage_db.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\skill_damage_db.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\skill_db.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\skill_db.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\skill_nocast_db.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\skill_nocast_db.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\skill_tree.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\skill_tree.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\spellbook_db.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\spellbook_db.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\statpoint.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\statpoint.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\status_disabled.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\status_disabled.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\status.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\status.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\stylist.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\stylist.yml')" />
<MakeDir Directories="$(SolutionDir)generated\clientside\data\luafiles514\lua files\navigation\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)generated\clientside\data\luafiles514\lua files\navigation\')" />
</Target>
</Project>

View File

@ -0,0 +1,284 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="achievement.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="atcommand.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="battle.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="battleground.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="buyingstore.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="cashshop.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="channel.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="chat.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="chrif.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="clan.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="clif.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="clif_obfuscation.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="clif_packetdb.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="clif_shuffle.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="date.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="duel.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="elemental.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="guild.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="homunculus.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="instance.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="intif.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="itemdb.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="log.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="mail.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="map.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="mapreg.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="mercenary.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="mob.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="navi.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="npc.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="packets.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="packets_struct.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="party.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="path.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="pc.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="pc_groups.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="pet.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="quest.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="script.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="script_constants.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="searchstore.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="skill.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="status.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="storage.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="trade.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="unit.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="vending.hpp">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="achievement.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="atcommand.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="battle.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="battleground.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="buyingstore.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="cashshop.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="channel.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="chat.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="chrif.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="clan.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="clif.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="date.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="duel.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="elemental.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="guild.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="homunculus.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="instance.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="intif.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="itemdb.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="log.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="mail.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="map.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="mapreg.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="mercenary.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="mob.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="navi.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="npc.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="npc_chat.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="party.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="path.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="pc.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="pc_groups.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="pet.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="quest.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="script.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="searchstore.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="skill.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="status.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="storage.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="trade.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="unit.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="vending.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>

View File

@ -188,6 +188,12 @@ int console = 0;
int enable_spy = 0; //To enable/disable @spy commands, which consume too much cpu time when sending packets. [Skotlex]
int enable_grf = 0; //To enable/disable reading maps from GRF files, bypassing mapcache [blackhole89]
#ifdef MAP_GENERATOR
struct s_generator_options {
bool navi;
} gen_options;
#endif
/**
* Get the map data
* @param mapid: Map ID to lookup
@ -4871,7 +4877,7 @@ void do_final(void){
do_final_battle();
do_final_chrif();
do_final_clan();
#ifndef GENERATE_NAVI
#ifndef MAP_GENERATOR
do_final_clif();
#endif
do_final_npc();
@ -5078,6 +5084,42 @@ const char* map_msg_txt(struct map_session_data *sd, int msg_number){
return "??";
}
/**
* Read the option specified in command line
* and assign the confs used by the different server.
* @param argc: Argument count
* @param argv: Argument values
* @return true or Exit on failure.
*/
int mapgenerator_get_options(int argc, char** argv) {
#ifdef MAP_GENERATOR
bool optionSet = false;
for (int i = 1; i < argc; i++) {
const char *arg = argv[i];
if (arg[0] != '-' && (arg[0] != '/' || arg[1] == '-')) {// -, -- and /
} else if (arg[0] == '/' || (++arg)[0] == '-') {// long option
arg++;
if (strcmp(arg, "generate-navi") == 0) {
gen_options.navi = true;
} else {
// pass through to default get_options
continue;
}
// clear option
argv[i] = nullptr;
optionSet = true;
}
}
if (!optionSet) {
ShowError("No options passed to the map generator, you must set at least one.\n");
exit(1);
}
#endif
return 1;
}
/// Called when a terminate signal is received.
void do_shutdown(void)
@ -5136,6 +5178,9 @@ int do_init(int argc, char *argv[])
inter_config.emblem_woe_change = true;
inter_config.emblem_transparency_limit = 80;
#ifdef MAP_GENERATOR
mapgenerator_get_options(argc, argv);
#endif
cli_get_options(argc,argv);
rnd_init();
@ -5208,7 +5253,7 @@ int do_init(int argc, char *argv[])
do_init_instance();
do_init_chrif();
do_init_clan();
#ifndef GENERATE_NAVI
#ifndef MAP_GENERATOR
do_init_clif();
#endif
do_init_script();
@ -5240,10 +5285,12 @@ int do_init(int argc, char *argv[])
if (battle_config.pk_mode)
ShowNotice("Server is running on '" CL_WHITE "PK Mode" CL_RESET "'.\n");
#ifndef MAP_GENERATOR
ShowStatus("Server is '" CL_GREEN "ready" CL_RESET "' and listening on port '" CL_WHITE "%d" CL_RESET "'.\n\n", map_port);
#ifdef GENERATE_NAVI
navi_create_lists();
#else
// depending on gen_options, generate the correct things
if (gen_options.navi)
navi_create_lists();
runflag = CORE_ST_STOP;
#endif

View File

@ -813,7 +813,7 @@ struct map_data {
/* speeds up clif_updatestatus processing by causing hpmeter to run only when someone with the permission can view it */
unsigned short hpmeter_visible;
#ifdef GENERATE_NAVI
#ifdef MAP_GENERATOR
struct {
std::vector<const struct npc_data *> npcs;
std::vector<const struct navi_link *> warps_into;

View File

@ -1,6 +1,6 @@
#include "../config/core.hpp"
#ifdef GENERATE_NAVI
#ifdef MAP_GENERATOR
#include <sys/stat.h>
#include <algorithm>
@ -12,8 +12,9 @@
#include <vector>
#include "../common/db.hpp"
#include "../common/showmsg.hpp"
#include "../common/malloc.hpp"
#include "../common/showmsg.hpp"
#include "../common/utils.hpp"
#include "map.hpp"
#include "mob.hpp"
#include "navi.hpp"
@ -424,6 +425,13 @@ void write_object_lists() {
auto npc_file = std::ofstream(filePrefix + "./navi_npc_krpri.lub");
auto map_file = std::ofstream(filePrefix + "./navi_map_krpri.lub");
if (!mob_file) {
ShowError("Failed to create mobfile.\n");
ShowError("Maybe the file directory \"%s\" does not exist?\n", filePrefix.c_str());
ShowInfo("Create the directory and rerun map-server-generator\n");
exit(1);
}
int warp_count = 0;
int npc_count = 0;
int spawn_count = 0;
@ -623,12 +631,6 @@ void navi_create_lists() {
auto starttime = std::chrono::system_clock::now();
if (!fileExists(filePrefix)) {
ShowError("File directory %s does not exist.\n", filePrefix.c_str());
ShowInfo("Create the directory and rerun map-server");
exit(1);
}
npc_event_runall(script_config.navi_generate_name);
write_object_lists();
@ -646,4 +648,4 @@ void navi_create_lists() {
BHEAP_CLEAR(g_open_set);
}
#endif
#endif

View File

@ -3,7 +3,7 @@
#include "../config/core.hpp"
#ifdef GENERATE_NAVI
#ifdef MAP_GENERATOR
struct navi_pos {
int m;
int x;
@ -39,5 +39,5 @@ struct navi_walkpath_data {
void navi_create_lists();
#endif // ifdef GENERATE_NAVI
#endif // ifdef MAP_GENERATOR
#endif

View File

@ -3716,7 +3716,7 @@ struct npc_data *npc_create_npc(int16 m, int16 x, int16 y){
nd->progressbar.timeout = 0;
nd->vd = npc_viewdb[0]; // Default to JT_INVISIBLE
#ifdef GENERATE_NAVI
#ifdef MAP_GENERATOR
nd->navi.pos = {m, x, y};
nd->navi.id = 0;
nd->navi.npc = nd;
@ -3842,7 +3842,7 @@ static const char* npc_parse_warp(char* w1, char* w2, char* w3, char* w4, const
nd->u.warp.xs = xs;
nd->u.warp.ys = ys;
#ifdef GENERATE_NAVI
#ifdef MAP_GENERATOR
nd->navi.warp_dest = {map_mapindex2mapid(i), to_x, to_y};
#endif

View File

@ -208,7 +208,7 @@ struct npc_data {
unsigned long color;
} progressbar;
#ifdef GENERATE_NAVI
#ifdef MAP_GENERATOR
struct navi_link navi; // for warps and the src of npcs
std::vector<navi_link> links; // for extra links, like warper npc
#endif

View File

@ -26009,7 +26009,7 @@ BUILDIN_FUNC(getenchantgrade){
}
BUILDIN_FUNC(naviregisterwarp) {
#ifdef GENERATE_NAVI
#ifdef MAP_GENERATOR
TBL_NPC* nd;
int x, y, m;
const char *warpname, *mapname=NULL;
@ -26085,7 +26085,7 @@ BUILDIN_FUNC( openstylist ){
}
BUILDIN_FUNC(navihide) {
#ifdef GENERATE_NAVI
#ifdef MAP_GENERATOR
TBL_NPC *nd;
nd = map_id2nd(st->oid);

4
tools/navigenerator.bat Normal file
View File

@ -0,0 +1,4 @@
@ECHO OFF
map-server-generator.exe /generate-navi
ECHO.
pause