# # @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 "dotnet\runtime" Set-Variable resourcesDir -option Constant -value "dotnet\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 "client_packages\game_resources\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 " # 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