-
Notifications
You must be signed in to change notification settings - Fork 4
/
buildArmaMod.ps1
107 lines (83 loc) · 4.26 KB
/
buildArmaMod.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
param ([switch]$debug)
# The reason for this function is simply to not have the path "D:/SteamLibrary/steamapps/common/Arma 3 Tools" or similar hard coded
# If this gives you trouble, you can just return the path to your Arma 3 Tools directory (like above) from this function.
# It should be reliable, though - unless Steam changes it's vdf format or how it stores the steam install in the registry.
# Those have been stable for a very long time, though.
function Get-Arma3ToolsPath()
{
# Strategy:
# We're going to find the location of Arma 3 Tools by getting the steam install directory from the registry
# We then look at the app install directories which are listed in steamapps/libraryfolders.vdf
# In that file there may be multiple steam library locations. We look for the app ID of arma tools
# and get the library location directly preceding it.
# From there we go to <that library location>/<a hard coded path to the AddonBuilder tool>
[string]$SteamPath = (Get-ItemProperty -Path HKCU:\SOFTWARE\Valve\Steam).SteamPath
if($SteamPath -eq $null -or $SteamPath -eq '') {
throw "Unrecoverable error: Could not find steam install path. Is steam installed?"
}
[string]$vdfPathPath = $SteamPath + "/steamapps/libraryfolders.vdf"
if(-not (Test-Path -Path $vdfPathPath)) {
throw "Unrecoverable error: Could not find steamapps/libraryfolders.vdf at the steam install path: $SteamPath"
}
[string]$vdf = Get-Content -Path $vdfPathPath
if($vdf -eq $null -or $vdf -eq '') {
throw "Unrecoverable error: Could not open $vdfPathPath"
}
[string]$armaToolsAppId = "233800"
[int32]$armaToolsAppIdIndexInVdf = $vdf.IndexOf($armaToolsAppId)
[int32]$lastInstallDirectoryIndex = $vdf.LastIndexOf('"path"');
while($lastInstallDirectoryIndex -gt -1) {
if($lastInstallDirectoryIndex -lt $armaToolsAppIdIndexInVdf) {
break;
}
Write-Host $lastInstallDirectoryIndex of $vdf.length
$lastInstallDirectoryIndex = $vdf.LastIndexOf('"path"', $lastInstallDirectoryIndex);
}
if($lastInstallDirectoryIndex -eq -1) {
throw "Could not find the Arma 3 tools install directory. Are the Arma 3 tools installed through steam?"
}
$lastInstallDirectoryIndex += '"path"'.length;
[int]$pathStartIndex = $vdf.IndexOf('"', $lastInstallDirectoryIndex);
[int]$pathEndIndex = $vdf.IndexOf('"', $pathStartIndex+1);
[string]$arma3ToolsLibraryPath = $vdf.SubString($pathStartIndex+1, $pathEndIndex-$pathStartIndex-1);
$arma3ToolsLibraryPath = $arma3ToolsLibraryPath.Replace("\\", "/")
$arma3ToolsLibraryPath = $arma3ToolsLibraryPath.Replace("\", "/")
return "$arma3ToolsLibraryPath/steamapps/common/Arma 3 Tools"
}
###################################################################################################
Push-Location
"Ensure directories.."
New-Item "_build/@filext" -ItemType Directory -Force
New-Item "_build/@filext/storage" -ItemType Directory -Force
"Copy extra files.."
Copy-Item "Arma mod/mod.cpp" "_build/@filext"
if($debug) {
Write-Host "Copy DLLs... (debug)"
Copy-Item "Build_Win64/Debug/filext.dll" "_build/@filext/filext_x64.dll"
Copy-Item "Build_Win32/Debug/filext.dll" "_build/@filext/filext.dll"
Copy-Item "Build_Linux/libFileXT.so" "_build/@filext/filext_x64.so"
Copy-Item "Build_Win64/Debug/filext.pdb" "_build/@filext/filext_x64.pdb"
Copy-Item "Build_Win32/Debug/filext.pdb" "_build/@filext/filext.pdb"
}
else {
Write-Host "Copy DLLs... (release)"
Copy-Item "Build_Win64/Release/filext.dll" "_build/@filext/filext_x64.dll"
Copy-Item "Build_Win32/Release/filext.dll" "_build/@filext/filext.dll"
Copy-Item "Build_Linux/libFileXT.so" "_build/@filext/filext_x64.so"
}
"Build pbos..."
[string]$arma3ToolsPath = Get-Arma3ToolsPath
# Specific Arma 3 Tools
[string]$addonBuilderPath = "$arma3ToolsPath/AddonBuilder/AddonBuilder.exe"
[string]$thisLoc = $PSScriptRoot.Replace("\", "/")
[string]$addonPath = "$thisLoc/Arma mod/addons/filext"
[string]$builtPath = "$thisLoc/_build/@filext/addons"
[string[]]$addonBuilderArgs=@(
"`"$addonPath`"",
"`"$builtPath`"",
"-packonly",
"-prefix=`"filext`""
)
Start-Process -FilePath $addonBuilderPath -ArgumentList $addonBuilderArgs -NoNewWindow -Wait
Pop-Location
"`n`nDone!"