-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathmake.ps1
More file actions
151 lines (129 loc) · 6.06 KB
/
make.ps1
File metadata and controls
151 lines (129 loc) · 6.06 KB
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
param([switch]$Setup = $false, [switch]$Build = $false, [switch]$Workbench = $false, [switch]$Diag = $false, [switch]$Server = $false, [switch]$Exp = $false)
$mod = "Carim"
$key = "S:\Drive\DayZKeys\schana.biprivatekey"
$publicKey = "S:\Drive\DayZKeys\schana.bikey"
$dayZExtract = "C:\Program Files\Wardog\DayZ Extract\DayZExtract.exe"
$pboProject = "C:\Program Files (x86)\Mikero\DePboTools\bin\pboProject.exe"
$steamRoot = "S:\SteamLibrary\steamapps\common"
$expClientDir = "$steamRoot\DayZ Exp"
$expServerDir = "$steamRoot\DayZ Server Exp"
$expToolsDir = "$steamRoot\DayZ Experimental Tools"
$clientDir = "$steamRoot\DayZ"
$serverDir = "$steamRoot\DayZServer"
$toolsDir = "$steamRoot\DayZ Tools"
$workshopMods = "$clientDir\!Workshop"
$projectDrive = "P:"
$root = $(Convert-Path $(git rev-parse --show-toplevel))
$localMods = "$root\build"
$missions = "$root\missions"
$missionName = "dayzOffline.chernarusplus"
function Setup-Project {
# Clean previous setups
if ((Test-Path -Path "$projectDrive\DZ")) {
Remove-Item "$projectDrive\*" -Recurse -Force
}
if ((Test-Path -Path "$missions\$missionName")) {
Remove-Item "$missions\$missionName" -Recurse -Force
Remove-Item "$missions\profiles" -Recurse -Force
Remove-Item "$missions\serverDZ.cfg" -Force
}
# Extract game data to project drive
if ($Exp) {
Check-Result -FilePath "$dayZExtract" -ArgumentList "P:", "--experimental", "--unattended"
}
else {
Check-Result -FilePath "$dayZExtract" -ArgumentList "P:", "--unattended"
}
# Create the junction, since pboProject doesn't work with symbolic links
cmd /c mklink /J "$projectDrive\$mod" "$root\$mod"
#New-Item -Path "$projectDrive\$mod" -Value "$sourceRoot\$mod" -ItemType SymbolicLink
$workingServerDir = $serverDir
$workingClientDir = $clientDir
if ($Exp) {
$workingServerDir = $expServerDir
$workingClientDir = $expClientDir
}
# Ensure the keys are present
if (!(Test-Path -Path "$workingClientDir\keys")) {
Copy-Item "$workingServerDir\keys" -Destination "$workingClientDir\keys" -Recurse
Copy-Item "$publicKey" -Destination "$workingClientDir\keys"
Copy-Item "$publicKey" -Destination "$workingServerDir\keys"
}
# Setup the mission used for testing
Copy-Item "$workingServerDir\mpmissions\$missionName" -Destination "$missions\$missionName" -Recurse
Copy-Item "$workingServerDir\serverDZ.cfg" -Destination "$missions\"
(Get-Content "$missions\serverDZ.cfg").Replace($missionName, "$missions\$missionName") | Set-Content "$missions\serverDZ.cfg"
(Get-Content "$missions\serverDZ.cfg").Replace("maxPlayers = 60;", "enableCfgGameplayFile=1;`nmaxPlayers = 60;") | Set-Content "$missions\serverDZ.cfg"
$cfggameplay = Get-Content "$missions\$missionName\cfggameplay.json" -raw | ConvertFrom-Json
# map config
$cfggameplay.MapData.ignoreMapOwnership = $true
$cfggameplay.MapData.ignoreNavItemsOwnership = $true
$cfggameplay.MapData.displayPlayerPosition = $true
$cfggameplay.MapData.displayNavInfo = $true
# unlimited stamina
$cfggameplay.PlayerData.StaminaData.sprintStaminaModifierErc = 0.0
$cfggameplay.PlayerData.StaminaData.sprintStaminaModifierCro = 0.0
$cfggameplay.PlayerData.StaminaData.staminaWeightLimitThreshold = 60000.0
$cfggameplay.PlayerData.StaminaData.staminaMax = 9999.0
$cfggameplay.PlayerData.StaminaData.staminaKgToStaminaPercentPenalty = 0.0
$cfggameplay.PlayerData.StaminaData.staminaMinCap = 9999.0
$cfggameplay.PlayerData.StaminaData.sprintSwimmingStaminaModifier = 0.0
$cfggameplay.PlayerData.StaminaData.sprintLadderStaminaModifier = 0.0
$cfggameplay.PlayerData.StaminaData.meleeStaminaModifier = 0.0
$cfggameplay.PlayerData.StaminaData.obstacleTraversalStaminaModifier = 0.0
$cfggameplay.PlayerData.StaminaData.holdBreathStaminaModifier = 0.0
# write
$cfggameplay | ConvertTo-Json -Depth 32 -Compress | Set-Content "$missions\$missionName\cfggameplay.json"
(Get-Content "$missions\$missionName\db\globals.xml").Replace('<var name="TimeLogin" type="0" value="15"/>', '<var name="TimeLogin" type="0" value="1"/>') | Set-Content "$missions\$missionName\db\globals.xml"
}
function Start-Workbench {
$workingDir = $toolsDir
if ($Exp) {
$workingDir = $expToolsDir
}
Start-Process -FilePath workbenchApp.exe -WorkingDirectory "$workingDir\Bin\Workbench" -ArgumentList "-mod=$projectDrive\$mod\$mod;$projectDrive\$mod\${mod}Deprecated;"
}
function Build-Project {
$outputs = Get-ChildItem "$localMods" | Where-Object { $_.PSISContainer }
foreach ($output in $outputs) {
Check-Result -FilePath $pboProject -ArgumentList "$projectDrive\$mod\$output".Replace('@', ''), "+M=$localMods\$output", "+E=DAYZSA", "+K=$key", "+T", "+H", "+$", "+B", "+C", "-P"
}
}
function Diag-Project {
$mods = "$localMods\@$mod;$localMods\@${mod}MapStyle"
$workingDir = $clientDir
if ($Exp) {
$workingDir = $expClientDir
}
Start-Process -FilePath "$workingDir\DayZDiag_x64.exe" -WorkingDirectory "$workingDir" -ArgumentList "-mod=$mods -profiles=$missions\profiles\server -doLogs -server -config=$missions\serverDZ.cfg -limitFPS=1000"
Start-Process -FilePath "$workingDir\DayZDiag_x64.exe" -WorkingDirectory "$workingDir" -ArgumentList "-mod=$mods -profiles=$missions\profiles\client -doLogs -name=cnofafva -connect=127.0.0.1 -port=2302"
}
function Run-Server {
$mods = "$localMods\@$mod;$localMods\@${mod}MapStyle"
$workingDir = $serverDir
if ($Exp) {
$workingDir = $expServerDir
}
Start-Process -FilePath "$workingDir\DayZServer_x64.exe" -WorkingDirectory "$workingDir" -ArgumentList "-mod=$mods -profiles=$missions\profiles\server -doLogs -config=$missions\serverDZ.cfg -limitFPS=1000"
}
function Check-Result {
$process = (Start-Process -Wait -PassThru @args)
if ($process.ExitCode) {
throw "Failed"
}
}
if ($Setup) {
Setup-Project
}
if ($Build) {
Build-Project
}
if ($Workbench) {
Start-Workbench
}
if ($Diag) {
Diag-Project
}
if ($Server) {
Run-Server
}