Skip to content

Instantly share code, notes, and snippets.

@swatkins818
Forked from OneFaced/UpdateArcDps.cmd
Last active December 5, 2022 14:27
Show Gist options
  • Save swatkins818/4ba37f89dbfd9e2b6aa8bf4d7c90eee5 to your computer and use it in GitHub Desktop.
Save swatkins818/4ba37f89dbfd9e2b6aa8bf4d7c90eee5 to your computer and use it in GitHub Desktop.
GuildWars 2 ArcDps Update Script
REM <#
@echo off
copy UpdateArcDpsDX11.cmd UpdateArcDpsDX11.ps1 >NUL
PowerShell.exe -ExecutionPolicy Unrestricted -NoProfile -Command "&{Set-Alias REM Write-Host; .\UpdateArcDpsDX11.ps1}"
del UpdateArcDpsDX11.ps1
exit
REM #>
<# ---- Command Line Arguments ----
Add any commandline arguments you need here separated by a comma and encloded in single quotes
List of arguments available at https://wiki.guildwars2.com/wiki/Command_line_arguments
E.g.: $arguments = '-clientport 80','-maploadinfo'
#>
$arguments = ""
<# ---- GuildWars 2 Path ----
Modify as required. Points to the default install location
You can use environment variables here or absolute paths, e.g. E:\gw2
#>
$GW2Path = "$env:ProgramFiles\Guild Wars 2\"
<# ---- Extract Directory and current version file ----
Modify as required. Points to initial directory location for files.
#>
$extractDirectory = "$GW2Path\addons\arcdps\extract_directory"
<# ---- GuildWars 2 Executable Name
#This is the default executable name. Adjust as required. Do not include the .exe extension
#>
$gw = 'Gw2-64'
#Arc Extract Path Don't change unless arc does
$md5Uri = 'https://www.deltaconnected.com/arcdps/x64/d3d11.dll.md5sum'
$d3d11Uri = 'https://www.deltaconnected.com/arcdps/x64/d3d11.dll'
#ArcExtras Extract Path Don't change unless arcExtras does
$arcExtrasDll = "arcdps_unofficial_extras.dll"
$arcExtrasRepoName = "Krappa322/arcdps_unofficial_extras_releases"
$arcExtrasReleasesUri = "https://api.github.com/repos/$arcExtrasRepoName/releases/latest"
$arcExtrasUri = "https://github.com/$arcExtrasRepoName/releases/latest/download/$arcExtrasDll"
#ArcMech Extract Path Don't change unless arcMech does
$arcMechDll = "d3d9_arcdps_mechanics.dll"
$arcMechRepoName = "knoxfighter/GW2-ArcDPS-Mechanics-Log"
$arcMechReleasesUri = "https://api.github.com/repos/$arcMechRepoName/releases/latest"
$arcMechUri = "https://github.com/$arcMechRepoName/releases/latest/download/$arcMechDll"
#ArcBoon Extract Path Don't change unless arcBoon does
$arcBoonDll = "d3d9_arcdps_table.dll"
$arcBoonRepoName = "knoxfighter/GW2-ArcDPS-Boon-Table"
$arcBoonReleasesUri = "https://api.github.com/repos/$arcBoonRepoName/releases/latest"
$arcBoonUri = "https://github.com/$arcBoonRepoName/releases/latest/download/$arcBoonDll"
#ArcHeal Extract Path Don't change unless arcHeal does
$arcHealDll = "arcdps_healing_stats.dll"
$arcHealRepoName = "Krappa322/arcdps_healing_stats"
$arcHealReleasesUri = "https://api.github.com/repos/$arcHealRepoName/releases/latest"
$arcHealUri = "https://github.com/$arcHealRepoName/releases/latest/download/$arcHealDll"
#ArcClears Extract Path Don't change unless arcClears does
$arcClearsDll = "arcdps_clears.dll"
$arcClearsRepoName = "gw2scratch/arcdps-clears"
$arcClearsReleasesUri = "https://api.github.com/repos/$arcClearsRepoName/releases/latest"
$arcClearsUri = "https://github.com/$arcClearsRepoName/releases/latest/download/$arcClearsDll"
#ArcSquad Extract Path Don't change unless arcSquad does
$arcSquadDll = "squadmanager.dll"
$arcSquadRepoName = "RaidcoreGG/GW2-CommandersToolkit"
$arcSquadReleasesUri = "https://api.github.com/repos/$arcSquadRepoName/releases/latest"
$arcSquadUri = "https://github.com/$arcSquadRepoName/releases/latest/download/$arcSquadDll"
#ArcKp Extract Path Don't change unless arcKp does
$arcKpDll = "d3d9_arcdps_killproof_me.dll"
$arcKpRepoName = "knoxfighter/arcdps-killproof.me-plugin"
$arcKpReleasesUri = "https://api.github.com/repos/$arcKpRepoName/releases/latest"
$arcKpUri = "https://github.com/$arcKpRepoName/releases/latest/download/$arcKpDll"
#ArcBlish Extract Path Don't change unless arcBlish does
$arcBlishRepoName = "blish-hud/arcdps-bhud"
$arcBlishAssetPattern = "arcdps-bhud-*-pc-windows-msvc.zip"
$arcBlishReleasesUri = "https://api.github.com/repos/$arcBlishRepoName/releases/latest"
#ArcUploader Extract Path Don't change unless arcUpload does
$arcUploaderDll = "d3d9_uploader.dll"
$arcUploaderRepoName = "datatobridge/arcdps-uploader"
$arcUploaderReleasesUri = "https://api.github.com/repos/$arcUploaderRepoName/releases/latest"
$arcUploaderUri = "https://github.com/$arcUploaderRepoName/releases/latest/download/$arcUploaderDll"
function Invoke-ArchiveCheck
{
if((Get-Process $gw -ErrorAction 0).Count -gt 0)
{
Exit
}
$directoryExists = Test-Path "$extractDirectory\old"
if($directoryExists)
{
Write-Verbose 'Directory exists'
}
else
{
mkdir "$extractDirectory\old"
Write-Verbose 'Directory Created'
}
$iniExists = Test-Path "$($extractDirectory)\Current_Release_Versions.ini"
if($iniExists)
{
Write-Verbose 'Current Release Version file exists'
}
else
{
Set-Content "$($extractDirectory)\Current_Release_Versions.ini" "DO NOT EDIT`n(2) arcExtras`nNot Installed`n(4) arcMech`nNot Installed`n(6) arcBoon`nNot Installed`n(8) arcHeal`nNot Installed`n(10) arcClears`nNot Installed`n(12) arcSquad`nNot Installed`n(14) arcKp`nNot Installed`n(16) arcBlish`nNot Installed`n(18) arcUpload`nNot Installed"
Write-Verbose 'Current Release Version file created'
}
}
function Invoke-ArcDpsCheck
{
$arcDpsExists = Test-Path "$($extractDirectory)\d3d11.dll"
if($arcDpsExists)
{
$currD3d11 = Get-FileHash "$($extractDirectory)\d3d11.dll" -Algorithm MD5
try
{
$md5response = Invoke-WebRequest -Uri $md5Uri
}
catch {
Write-Verbose 'Failed to download MD5 sum'
Exit
}
if(!$currD3d11.Hash.Equals(($md5response.ToString().Split(" ",[System.StringSplitOptions]::RemoveEmptyEntries)[0]),
[System.StringComparison]::InvariantCultureIgnoreCase))
{
Write-Verbose 'ArcDps is out of date'
Copy-Item "$($extractDirectory)\d3d11.dll" -Destination "$($extractDirectory)\old\d3d11_old.bak" -Force
Get-ArcDps
}
else
{
Write-Verbose 'ArcDps is up to date'
}
}
else
{
Get-ArcDps
}
}
function Get-ArcDps
{
Write-Verbose 'Downloading ArcDps'
$d3d11Response = Invoke-WebRequest -Uri $d3d11Uri
Set-Content -Path "$($extractDirectory)\d3d11.dll" -Encoding Byte -Value $d3d11Response.Content
Copy-Item "$($extractDirectory)\d3d11.dll" -Destination "$($GW2Path)\d3d11.dll" -Force
Write-Verbose 'Completed ArcDps install'
}
function Invoke-ArcExtrasCheck
{
$arcExtrasApi = Invoke-WebRequest $arcExtrasReleasesUri | ConvertFrom-Json
$arcExtrasTagName = $arcExtrasApi.tag_name
$arcExtrasExists = Test-Path "$($extractDirectory)\$arcExtrasDll"
if($arcExtrasExists)
{
$version = Get-Content -Path "$($extractDirectory)\Current_Release_Versions.ini"
if($version[2] -eq $arcExtrasTagName)
{
Write-Verbose 'ArcExtras is up to date'
}
else
{
Write-Verbose 'ArcExtras is out of date'
Copy-Item "$($extractDirectory)\$arcExtrasDll" -Destination "$($extractDirectory)\old\($arcExtrasDll)_old.bak" -Force
Get-ArcExtras
}
}
else
{
Get-ArcExtras
}
}
function Get-ArcExtras
{
Write-Verbose 'Downloading ArcExtras'
$arcExtrasResponse = Invoke-WebRequest -Uri $arcExtrasUri
Set-Content -Path "$($extractDirectory)\$arcExtrasDll" -Encoding Byte -Value $arcExtrasResponse.Content
Copy-Item "$($extractDirectory)\$arcExtrasDll" -Destination "$($GW2Path)\bin64\$arcExtrasDll" -Force
$version = Get-Content -Path "$($extractDirectory)\Current_Release_Versions.ini"
$version[2] = $arcExtrasTagName
$version | Set-Content -Path "$($extractDirectory)\Current_Release_Versions.ini"
Write-Verbose 'Completed ArcExtras install'
}
function Invoke-ArcMechCheck
{
$arcMechApi = Invoke-WebRequest $arcMechReleasesUri | ConvertFrom-Json
$arcMechTagName = $arcMechApi.tag_name
$arcMechExists = Test-Path "$($extractDirectory)\$arcMechDll"
if($arcMechExists)
{
$version = Get-Content -Path "$($extractDirectory)\Current_Release_Versions.ini"
if($version[4] -eq $arcMechTagName)
{
Write-Verbose 'ArcMech is up to date'
}
else
{
Write-Verbose 'ArcMech is out of date'
Copy-Item "$($extractDirectory)\$arcMechDll" -Destination "$($extractDirectory)\old\($arcMechDll)_old.bak" -Force
Get-ArcMech
}
}
else
{
Get-ArcMech
}
}
function Get-ArcMech
{
Write-Verbose 'Downloading ArcMech'
$arcMechResponse = Invoke-WebRequest -Uri $arcMechUri
Set-Content -Path "$($extractDirectory)\$arcMechDll" -Encoding Byte -Value $arcMechResponse.Content
Copy-Item "$($extractDirectory)\$arcMechDll" -Destination "$($GW2Path)\bin64\$arcMechDll" -Force
$version = Get-Content -Path "$($extractDirectory)\Current_Release_Versions.ini"
$version[4] = $arcMechTagName
$version | Set-Content -Path "$($extractDirectory)\Current_Release_Versions.ini"
Write-Verbose 'Completed ArcMech install'
}
function Invoke-ArcBoonCheck
{
$arcBoonApi = Invoke-WebRequest $arcBoonReleasesUri | ConvertFrom-Json
$arcBoonTagName = $arcBoonApi.tag_name
$arcBoonExists = Test-Path "$($extractDirectory)\$arcBoonDll"
if($arcBoonExists)
{
$version = Get-Content -Path "$($extractDirectory)\Current_Release_Versions.ini"
if($version[6] -eq $arcBoonTagName)
{
Write-Verbose 'ArcBoon is up to date'
}
else
{
Write-Verbose 'ArcBoon is out of date'
Copy-Item "$($extractDirectory)\$arcBoonDll" -Destination "$($extractDirectory)\old\($arcBoonDll)_old.bak" -Force
Get-ArcBoon
}
}
else
{
Get-ArcBoon
}
}
function Get-ArcBoon
{
Write-Verbose 'Downloading ArcBoon'
$arcBoonResponse = Invoke-WebRequest -Uri $arcBoonUri
Set-Content -Path "$($extractDirectory)\$arcBoonDll" -Encoding Byte -Value $arcBoonResponse.Content
Copy-Item "$($extractDirectory)\$arcBoonDll" -Destination "$($GW2Path)\bin64\$arcBoonDll" -Force
$version = Get-Content -Path "$($extractDirectory)\Current_Release_Versions.ini"
$version[6] = $arcBoonTagName
$version | Set-Content -Path "$($extractDirectory)\Current_Release_Versions.ini"
Write-Verbose 'Completed ArcBoon install'
}
function Invoke-ArcHealCheck
{
$arcHealApi = Invoke-WebRequest $arcHealReleasesUri | ConvertFrom-Json
$arcHealTagName = $arcHealApi.tag_name
$arcHealExists = Test-Path "$($extractDirectory)\$arcHealDll"
if($arcHealExists)
{
$version = Get-Content -Path "$($extractDirectory)\Current_Release_Versions.ini"
if($version[8] -eq $arcHealTagName)
{
Write-Verbose 'ArcHeal is up to date'
}
else
{
Write-Verbose 'ArcHeal is out of date'
Copy-Item "$($extractDirectory)\$arcHealDll" -Destination "$($extractDirectory)\old\($arcHealDll)_old.bak" -Force
Get-ArcHeal
}
}
else
{
Get-ArcHeal
}
}
function Get-ArcHeal
{
Write-Verbose 'Downloading ArcHeal'
$arcHealResponse = Invoke-WebRequest -Uri $arcHealUri
Set-Content -Path "$($extractDirectory)\$arcHealDll" -Encoding Byte -Value $arcHealResponse.Content
Copy-Item "$($extractDirectory)\$arcHealDll" -Destination "$($GW2Path)\bin64\$arcHealDll" -Force
$version = Get-Content -Path "$($extractDirectory)\Current_Release_Versions.ini"
$version[8] = $arcHealTagName
$version | Set-Content -Path "$($extractDirectory)\Current_Release_Versions.ini"
Write-Verbose 'Completed ArcHeal install'
}
function Invoke-ArcClearsCheck
{
$arcClearsApi = Invoke-WebRequest $arcClearsReleasesUri | ConvertFrom-Json
$arcClearsTagName = $arcClearsApi.tag_name
$arcClearsExists = Test-Path "$($extractDirectory)\$arcClearsDll"
if($arcClearsExists)
{
$version = Get-Content -Path "$($extractDirectory)\Current_Release_Versions.ini"
if($version[10] -eq $arcClearsTagName)
{
Write-Verbose 'ArcClears is up to date'
}
else
{
Write-Verbose 'ArcClears is out of date'
Copy-Item "$($extractDirectory)\$arcClearsDll" -Destination "$($extractDirectory)\old\($arcClearsDll)_old.bak" -Force
Get-ArcClears
}
}
else
{
Get-ArcClears
}
}
function Get-ArcClears
{
Write-Verbose 'Downloading ArcClears'
$arcClearsResponse = Invoke-WebRequest -Uri $arcClearsUri
Set-Content -Path "$($extractDirectory)\$arcClearsDll" -Encoding Byte -Value $arcClearsResponse.Content
Copy-Item "$($extractDirectory)\$arcClearsDll" -Destination "$($GW2Path)\bin64\$arcClearsDll" -Force
$version = Get-Content -Path "$($extractDirectory)\Current_Release_Versions.ini"
$version[10] = $arcClearsTagName
$version | Set-Content -Path "$($extractDirectory)\Current_Release_Versions.ini"
Write-Verbose 'Completed ArcClears install'
}
function Invoke-ArcSquadCheck
{
$arcSquadApi = Invoke-WebRequest $arcSquadReleasesUri | ConvertFrom-Json
$arcSquadTagName = $arcSquadApi.tag_name
$arcSquadExists = Test-Path "$($extractDirectory)\$arcSquadDll"
if($arcSquadExists)
{
$version = Get-Content -Path "$($extractDirectory)\Current_Release_Versions.ini"
if($version[12] -eq $arcSquadTagName)
{
Write-Verbose 'ArcSquad is up to date'
}
else
{
Write-Verbose 'ArcSquad is out of date'
Copy-Item "$($extractDirectory)\$arcSquadDll" -Destination "$($extractDirectory)\old\($arcSquadDll)_old.bak" -Force
Get-ArcSquad
}
}
else
{
Get-ArcSquad
}
}
function Get-ArcSquad
{
Write-Verbose 'Downloading ArcSquad'
$arcSquadResponse = Invoke-WebRequest -Uri $arcSquadUri
Set-Content -Path "$($extractDirectory)\$arcSquadDll" -Encoding Byte -Value $arcSquadResponse.Content
Copy-Item "$($extractDirectory)\$arcSquadDll" -Destination "$($GW2Path)\bin64\$arcSquadDll" -Force
$version = Get-Content -Path "$($extractDirectory)\Current_Release_Versions.ini"
$version[12] = $arcSquadTagName
$version | Set-Content -Path "$($extractDirectory)\Current_Release_Versions.ini"
Write-Verbose 'Completed ArcSquad install'
}
function Invoke-ArcKpCheck
{
$arcKpKpi = Invoke-WebRequest $arcKpReleasesUri | ConvertFrom-Json
$arcKpTagName = $arcKpKpi.tag_name
$arcKpExists = Test-Path "$($extractDirectory)\$arcKpDll"
if($arcKpExists)
{
$version = Get-Content -Path "$($extractDirectory)\Current_Release_Versions.ini"
if($version[14] -eq $arcKpTagName)
{
Write-Verbose 'ArcKp is up to date'
}
else
{
Write-Verbose 'ArcKp is out of date'
Copy-Item "$($extractDirectory)\$arcKpDll" -Destination "$($extractDirectory)\old\($arcKpDll)_old.bak" -Force
Get-ArcKp
}
}
else
{
Get-ArcKp
}
}
function Get-ArcKp
{
Write-Verbose 'Downloading ArcKp'
$arcKpResponse = Invoke-WebRequest -Uri $arcKpUri
Set-Content -Path "$($extractDirectory)\$arcKpDll" -Encoding Byte -Value $arcKpResponse.Content
Copy-Item "$($extractDirectory)\$arcKpDll" -Destination "$($GW2Path)\bin64\$arcKpDll" -Force
$version = Get-Content -Path "$($extractDirectory)\Current_Release_Versions.ini"
$version[14] = $arcKpTagName
$version | Set-Content -Path "$($extractDirectory)\Current_Release_Versions.ini"
Write-Verbose 'Completed ArcKp install'
}
function Invoke-ArcBlishCheck
{
$arcBlishApi = Invoke-WebRequest $arcBlishReleasesUri | ConvertFrom-Json
$arcBlishTagName = $arcBlishApi.tag_name
$arcBlishExists = Test-Path "$($extractDirectory)\$arcBlishAssetPattern"
if($arcBlishExists)
{
$version = Get-Content -Path "$($extractDirectory)\Current_Release_Versions.ini"
if($version[16] -eq $arcBlishTagName)
{
Write-Verbose 'ArcBlish is up to date'
}
else
{
Write-Verbose 'ArcBlish is out of date'
Copy-Item "$($extractDirectory)\$arcBlishAssetPattern" -Destination "$($extractDirectory)\old\" -Force
Get-ArcBlish
}
}
else
{
Get-ArcBlish
}
}
function Get-ArcBlish
{
Write-Verbose 'Downloading ArcBlish'
$arcBlishAsset = $arcBlishApi.assets | Where-Object name -like $arcBlishAssetPattern
$arcBlishDownloadUri = $arcBlishAsset.browser_download_url
$arcBlishExtractPath = [System.IO.Path]::Combine($extractDirectory, $arcBlishAsset.name)
Invoke-WebRequest -Uri $arcBlishDownloadUri -Out $arcBlishExtractPath
Expand-Archive -LiteralPath "$arcBlishExtractPath" -DestinationPath "$($GW2Path)\bin64\" -Force
$version = Get-Content -Path "$($extractDirectory)\Current_Release_Versions.ini"
$version[16] = $arcBlishTagName
$version | Set-Content -Path "$($extractDirectory)\Current_Release_Versions.ini"
Write-Verbose 'Completed ArcBlish install'
}
function Invoke-ArcUploaderCheck
{
$arcUploaderKpi = Invoke-WebRequest $arcUploaderReleasesUri | ConvertFrom-Json
$arcUploaderTagName = $arcUploaderKpi.tag_name
$arcUploaderExists = Test-Path "$($extractDirectory)\$arcUploaderDll"
if($arcUploaderExists)
{
$version = Get-Content -Path "$($extractDirectory)\Current_Release_Versions.ini"
if($version[18] -eq $arcUploaderTagName)
{
Write-Verbose 'ArcUploader is up to date'
}
else
{
Write-Verbose 'ArcUploader is out of date'
Copy-Item "$($extractDirectory)\$arcUploaderDll" -Destination "$($extractDirectory)\old\($arcUploaderDll)_old.bak" -Force
Get-ArcUploader
}
}
else
{
Get-ArcUploader
}
}
function Get-ArcUploader
{
Write-Verbose 'Downloading ArcUploader'
$arcUploaderResponse = Invoke-WebRequest -Uri $arcUploaderUri
Set-Content -Path "$($extractDirectory)\$arcUploaderDll" -Encoding Byte -Value $arcUploaderResponse.Content
Copy-Item "$($extractDirectory)\$arcUploaderDll" -Destination "$($GW2Path)\$arcUploaderDll" -Force
$version = Get-Content -Path "$($extractDirectory)\Current_Release_Versions.ini"
$version[18] = $arcUploaderTagName
$version | Set-Content -Path "$($extractDirectory)\Current_Release_Versions.ini"
Write-Verbose 'Completed ArcUploader install'
}
function Start-GW2
{
Write-Verbose 'Starting GuildWars 2...'
if($arguments.Length -lt 1)
{
Start-Process -FilePath "$($GW2Path)\$($gw)"
}
else
{
Start-Process -FilePath "$($GW2Path)\$($gw).exe" -ArgumentList $arguments
}
}
function Start-GW2
{
Write-Verbose 'Starting GuildWars 2...'
if($arguments.Length -lt 1)
{
Start-Process -FilePath "$($GW2Path)\$($gw)"
}
else
{
Start-Process -FilePath "$($GW2Path)\$($gw).exe" -ArgumentList $arguments
}
}
Invoke-ArchiveCheck
Invoke-ArcDpsCheck
Invoke-ArcExtrasCheck
Invoke-ArcMechCheck
Invoke-ArcBoonCheck
Invoke-ArcHealCheck
Invoke-ArcClearsCheck
Invoke-ArcSquadCheck
Invoke-ArcKpCheck
Invoke-ArcBlishCheck
Invoke-ArcUploaderCheck
Start-GW2
@swatkins818
Copy link
Author

swatkins818 commented Sep 6, 2022

Edited to add Unofficial Extras, Squad Manager, and Kp.me Arc plugins. Also streamlined a little.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment