diff --git a/.gitignore b/.gitignore
index d42e621e..3e4b5a55 100644
--- a/.gitignore
+++ b/.gitignore
@@ -336,4 +336,7 @@ ASALocalRun/
launchSettings.json
tmp/
-index.js
\ No newline at end of file
+index.js
+
+# post build config
+postbuild.config.xml
\ No newline at end of file
diff --git a/ReallifeGamemode.Server/ReallifeGamemode.Server.csproj b/ReallifeGamemode.Server/ReallifeGamemode.Server.csproj
index c01cba6b..5bec592a 100644
--- a/ReallifeGamemode.Server/ReallifeGamemode.Server.csproj
+++ b/ReallifeGamemode.Server/ReallifeGamemode.Server.csproj
@@ -19,6 +19,7 @@
+
all
@@ -40,7 +41,7 @@
..\..\bridge\runtime\Bootstrapper.dll
-
-
+
+
\ No newline at end of file
diff --git a/ReallifeGamemode.Server/Scripts/moveItems.ps1 b/ReallifeGamemode.Server/Scripts/moveItems.ps1
deleted file mode 100644
index 78f828b2..00000000
--- a/ReallifeGamemode.Server/Scripts/moveItems.ps1
+++ /dev/null
@@ -1,38 +0,0 @@
-# Verschiebt die Dateien aus dem Output-Verzeichnis in den resources Ordner
-
-param (
- [string]$outDir,
- [string]$outFile
-)
-
-$rootPath = "$PSScriptRoot\.."
-
-$outputPath = "$rootPath\$outDir"
-
-$bridgePath = "$rootPath\..\..\bridge\"
-
-$resourcePath = "$bridgePath\resources\reallife-gamemode"
-$runtimePath = "$bridgePath\runtime"
-
-# Pruefen, ob Output-Pfad existiert
-if(!(Test-Path $outputPath))
-{
- $absoluteOutputPath = Resolve-Path $outputPath
- Write-Host "Output Folder ($absoluteOutputPath) does not exist."
- Exit 0
-}
-
-# Pruefen, ob resources-Pfad existiert
-# Wenn NEIN => erstellen
-if(!(Test-Path $resourcePath))
-{
- Write-Host "Creating 'reallife-gamemode' resources directory"
- New-Item -ItemType Directory -Path $resourcePath | Out-Null
-}
-
-# Gamemode und Meta-Datei verschieben
-Copy-Item "$outputPath\$outFile" "$resourcePath\" -Force
-Copy-Item "$outputPath\meta.xml" "$resourcePath\" -Force
-
-# Abhaengige DLLs in runtime Ordner verschieben
-Copy-Item "$outputPath\*.dll" "$runtimePath\" -Exclude "ReallifeGamemode.Server.dll"
\ No newline at end of file
diff --git a/ReallifeGamemode.sln b/ReallifeGamemode.sln
index 8c3f7e5e..7dc75b14 100644
--- a/ReallifeGamemode.sln
+++ b/ReallifeGamemode.sln
@@ -13,6 +13,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
.gitignore = .gitignore
.gitlab-ci.yml = .gitlab-ci.yml
readme.md = readme.md
+ postbuild.ps1 = postbuild.ps1
+ postbuild.config.xml = postbuild.config.xml
EndProjectSection
EndProject
Global
diff --git a/postbuild.ps1 b/postbuild.ps1
new file mode 100644
index 00000000..cca2e937
--- /dev/null
+++ b/postbuild.ps1
@@ -0,0 +1,183 @@
+#
+# @author Codename
+# @copyright (c) 2008 - 2019 Life of German
+# @warning Start this script only once, after building server dll
+# @description This powershell script copies necessary files to (local/remote) server dir for windows developers
+#
+
+# set parameters
+param (
+ [string]$buildDirectory,
+ [string]$buildFilename
+)
+
+# set constant path
+Set-Variable configPath -option Constant -value "$PSScriptRoot\postbuild.config.xml"
+Set-Variable serverProjectPath -option Constant -value "$PSScriptRoot\ReallifeGamemode.Server"
+Set-Variable clientProjectPath -option Constant -value "$PSScriptRoot\ReallifeGamemode.Client"
+Set-Variable sourceAssetsPath -option Constant -value "$PSScriptRoot\ReallifeGamemode.Client\assets"
+Set-Variable sourceIndexJsPath -option Constant -value "$PSScriptRoot\ReallifeGamemode.Client\index.js"
+Set-Variable sourceDlcPacksPath -option Constant -value "$PSScriptRoot\ReallifeGamemode.Client\dlcpacks"
+
+# set constant dirs
+Set-Variable runtimeDir -option Constant -value "bridge\runtime"
+Set-Variable resourcesDir -option Constant -value "bridge\resources"
+Set-Variable gamemodeDir -option Constant -value "reallife-gamemode"
+Set-Variable assetsDir -option Constant -value "client_packages\assets"
+Set-Variable indexJsDir -option Constant -value "client_packages"
+Set-Variable dlcPacksDir -option Constant -value "source_dlcpacks"
+Set-Variable fullBuildDir -option Constant -value "$serverProjectPath\$buildDirectory"
+
+# create default config file if not exist
+if (![System.IO.File]::Exists($configPath)) {
+ # resolve default server path (default: .\..)
+ $defaultServerPath = (Resolve-Path -Path "$PSScriptRoot\..")
+ if (!$defaultServerPath) {
+ Write-Error "resolving local server path failed"
+ exit 1
+ }
+
+ $defaultXmlContent = "
+
+
+ true
+ $defaultServerPath
+
+
+ true
+ true
+
+
+ false
+ false
+ false
+
+
+
+
+ false
+ 127.0.0.1
+ 21
+ USERNAME
+ PASSWORD
+ .
+
+
+ false
+ false
+
+
+ false
+ false
+ false
+
+
+
+"
+
+ # create default content
+ New-Item $configPath
+ Set-Content $configPath $defaultXmlContent
+}
+
+# load existing xml config file
+[xml]$xmlConfig = Get-Content -Path $configPath
+if (!$xmlConfig) {
+ throw "opening XML config file failed"
+}
+
+# first compile typescript files if enabled in config file
+if (($xmlConfig.config.local.update.client.indexJs -eq "true" -and $xmlConfig.config.local.enabled -eq "true") -or
+ ($xmlConfig.config.remote.update.client.indexJs -eq "true" -and $xmlConfig.config.remote.enabled -eq "true")) {
+ $path = $PSScriptRoot
+ Set-Location -Path $clientProjectPath
+ npx webpack --config webpack.config.build.js
+ Set-Location -Path $path
+}
+
+# update local files if enabled in config file
+if ($xmlConfig.config.local.enabled -eq "true") {
+ # get local server path from xml config file
+ Set-Variable serverPath -option Constant -value $xmlConfig.config.local.rageMpServerPath
+ if (!$serverPath) {
+ Write-Error "empty local rage mp server path in config file"
+ exit 1
+ }
+
+ # check if local server path exists
+ if (!(Test-Path $serverPath)) {
+ Write-Error "local rage mp server path ($serverPath) not found. Have you moved your local rage mp directory?"
+ exit 1
+ }
+
+ # check if local resources path exists
+ Set-Variable resourcesPath -option Constant -value "$serverPath\$resourcesDir"
+ if (!(Test-Path $resourcesPath)) {
+ Write-Error "local resources path ($resourcesPath) not found. Please set up C# Bridge locally first,
+ see https://wiki.gtanet.work/index.php?title=Setting_up_the_Bridge_on_Linux/Windows"
+ exit 1
+ }
+
+ # create local gamemode dir if not exist
+ Set-Variable gamemodePath -option Constant -value "$resourcesPath\$gamemodeDir"
+ if (!(Test-Path $gamemodePath)) {
+ New-Item -ItemType Directory -Force -Path $gamemodePath
+ }
+
+ # copy compiled gamemode to local gamemode path
+ Copy-Item "$fullBuildDir\$buildFilename" $gamemodePath -Force
+
+ # copy meta.xml to local gamemode path if 'local.update.server.metaXml' is set to 'true' in config file
+ if ($xmlConfig.config.local.update.server.metaXml -eq "true") {
+ Copy-Item "$fullBuildDir\meta.xml" $gamemodePath -Force
+ }
+
+ # copy dependencies to local runtime path if 'local.update.server.allDependencies' is set to 'true' in config file
+ if ($xmlConfig.config.local.update.server.allDependencies -eq "true") {
+ # check if local runtime path exists
+ Set-Variable runtimePath -option Constant -value "$serverPath\$runtimeDir"
+ if (!(Test-Path $runtimePath)) {
+ Write-Error "local runtime path ($runtimePath) not found. Please set up C# Bridge locally first,
+ see https://wiki.gtanet.work/index.php?title=Setting_up_the_Bridge_on_Linux/Windows"
+ exit 1
+ }
+ Copy-Item "$fullBuildDir\*.dll" $runtimePath -Exclude "*$buildFilename*" -Force
+ }
+
+ # copy assets to local client packages path if 'local.update.client.assets' is set to 'true' in config file
+ if ($xmlConfig.config.local.update.client.assets -eq "true") {
+ # create local assets path if not exist
+ Set-Variable assetsPath -option Constant -value "$serverPath\$assetsDir"
+ if (!(Test-Path $assetsPath)) {
+ New-Item -ItemType Directory -Force -Path $assetsPath
+ }
+ robocopy $sourceAssetsPath $assetsPath /MIR
+ }
+
+ # copy index.js to local client packages path if 'local.update.client.indexJs' is set to 'true' in config file
+ if ($xmlConfig.config.local.update.client.indexJs -eq "true") {
+ # create local client packages if not exist
+ Set-Variable indexJsPath -option Constant -value "$serverPath\$indexJsDir"
+ if (!(Test-Path $indexJsPath)) {
+ New-Item -ItemType Directory -Force -Path $indexJsPath
+ }
+ Copy-Item $sourceIndexJsPath $indexJsPath -Force
+ }
+
+ # copy dlc packs to local dlc packs path if 'local.update.client.dlcPacks' is set to 'true' in config file
+ if ($xmlConfig.config.local.update.client.dlcPacks -eq "true") {
+ # create local dlc packs path if not exist
+ Set-Variable dlcPacksPath -option Constant -value "$serverPath\$dlcPacksDir"
+ if (!(Test-Path $dlcPacksPath)) {
+ New-Item -ItemType Directory -Force -Path $dlcPacksPath
+ }
+ robocopy $sourceDlcPacksPath $dlcPacksPath /MIR
+ }
+}
+
+# update remote files if enabled in config file
+if ($xmlConfig.config.remote.enabled -eq "true") {
+ # TODO: connect to remote ftp server and update files
+}
+
+exit 0
\ No newline at end of file