Use LF instead of CRLF
This commit is contained in:
parent
70e6e7362a
commit
d2bf421ef8
@ -1,3 +1,3 @@
|
||||
{
|
||||
"dirs": [".", "supplementals"]
|
||||
{
|
||||
"dirs": [".", "supplementals"]
|
||||
}
|
||||
1
.gitattributes
vendored
Normal file
1
.gitattributes
vendored
Normal file
@ -0,0 +1 @@
|
||||
* text=auto eof=lf
|
||||
@ -1,2 +1,2 @@
|
||||
<?php
|
||||
header("Location: https://github.com/de-eznuts/stripped-assets.git".substr($_SERVER["REQUEST_URI"], 6)); // "/0.git"
|
||||
<?php
|
||||
header("Location: https://github.com/de-eznuts/stripped-assets.git".substr($_SERVER["REQUEST_URI"], 6)); // "/0.git"
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
<?php
|
||||
//header("Location: https://github.com/spaceninjaserver/SpaceNinjaServer".substr($_SERVER["REQUEST_URI"], 21)); // "/SpaceNinjaServer.git"
|
||||
//header("Location: http://209.141.38.3/OpenWF/SpaceNinjaServer".substr($_SERVER["REQUEST_URI"], 21)); // "/SpaceNinjaServer.git"
|
||||
header("Location: https://onlyg.it/OpenWF/SpaceNinjaServer".substr($_SERVER["REQUEST_URI"], 21)); // "/SpaceNinjaServer.git"
|
||||
<?php
|
||||
//header("Location: https://github.com/spaceninjaserver/SpaceNinjaServer".substr($_SERVER["REQUEST_URI"], 21)); // "/SpaceNinjaServer.git"
|
||||
//header("Location: http://209.141.38.3/OpenWF/SpaceNinjaServer".substr($_SERVER["REQUEST_URI"], 21)); // "/SpaceNinjaServer.git"
|
||||
header("Location: https://onlyg.it/OpenWF/SpaceNinjaServer".substr($_SERVER["REQUEST_URI"], 21)); // "/SpaceNinjaServer.git"
|
||||
|
||||
@ -1,40 +1,40 @@
|
||||
<?php
|
||||
$ext = (!empty($_DYNSTAT) ? ".html" : (substr($_SERVER["SERVER_SOFTWARE"] ?? "", 0, 3) == "PHP" ? ".php" : ""));
|
||||
$path = strtok($_SERVER["REQUEST_URI"], '?');
|
||||
?>
|
||||
<nav class="navbar navbar-expand-sm bg-body-tertiary">
|
||||
<div class="container">
|
||||
<a class="navbar-brand" href="." <?php if ($path == "/"): ?> onclick="event.preventDefault();" <?php endif; ?>>OpenWF</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbar-content" aria-controls="navbar-content" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbar-content">
|
||||
<ul class="navbar-nav me-auto mb-0">
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle<?=((substr($path, 0, 6) == "/guide" || substr($path, 0, 7) == "/import" || substr($path, 0, 25) == "/asset-replacements-guide" || substr($path, 0, 13) == "/old-versions") ? " active" : ""); ?>" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">Guides</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a class="dropdown-item<?=(substr($path, 0, 6) == "/guide" ? " active" : ""); ?>" href="guide<?=$ext;?>">Setup</a></li>
|
||||
<li><a class="dropdown-item<?=(substr($path, 0, 7) == "/import" ? " active" : ""); ?>" href="import<?=$ext;?>">Importing</a></li>
|
||||
<li><a class="dropdown-item<?=(substr($path, 0, 25) == "/asset-replacements-guide" ? " active" : ""); ?>" href="asset-replacements-guide<?=$ext;?>">Asset Replacements</a></li>
|
||||
<li><a class="dropdown-item<?=(substr($path, 0, 13) == "/old-versions" ? " active" : ""); ?>" href="old-versions<?=$ext;?>">Old Versions</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="nav-item"><a class="nav-link<?=(substr($path, 0, 11) == "/contribute" ? " active" : ""); ?>" href="contribute<?=$ext;?>">Contribute</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="https://discord.gg/PNNZ3asUuY" target="_blank">Discord</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<script>
|
||||
// Disable navbar links that point back to this page.
|
||||
document.querySelectorAll(".navbar-nav .nav-link.active, .navbar-nav .dropdown-item.active").forEach(elm =>
|
||||
{
|
||||
elm.onclick = (event) => { event.preventDefault() };
|
||||
});
|
||||
|
||||
// User-facing stuff really has no reason to be served over insecure HTTP.
|
||||
if (location.host == "openwf.io" && location.protocol == "http:")
|
||||
{
|
||||
location.protocol = "https:";
|
||||
}
|
||||
<?php
|
||||
$ext = (!empty($_DYNSTAT) ? ".html" : (substr($_SERVER["SERVER_SOFTWARE"] ?? "", 0, 3) == "PHP" ? ".php" : ""));
|
||||
$path = strtok($_SERVER["REQUEST_URI"], '?');
|
||||
?>
|
||||
<nav class="navbar navbar-expand-sm bg-body-tertiary">
|
||||
<div class="container">
|
||||
<a class="navbar-brand" href="." <?php if ($path == "/"): ?> onclick="event.preventDefault();" <?php endif; ?>>OpenWF</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbar-content" aria-controls="navbar-content" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbar-content">
|
||||
<ul class="navbar-nav me-auto mb-0">
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle<?=((substr($path, 0, 6) == "/guide" || substr($path, 0, 7) == "/import" || substr($path, 0, 25) == "/asset-replacements-guide" || substr($path, 0, 13) == "/old-versions") ? " active" : ""); ?>" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">Guides</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a class="dropdown-item<?=(substr($path, 0, 6) == "/guide" ? " active" : ""); ?>" href="guide<?=$ext;?>">Setup</a></li>
|
||||
<li><a class="dropdown-item<?=(substr($path, 0, 7) == "/import" ? " active" : ""); ?>" href="import<?=$ext;?>">Importing</a></li>
|
||||
<li><a class="dropdown-item<?=(substr($path, 0, 25) == "/asset-replacements-guide" ? " active" : ""); ?>" href="asset-replacements-guide<?=$ext;?>">Asset Replacements</a></li>
|
||||
<li><a class="dropdown-item<?=(substr($path, 0, 13) == "/old-versions" ? " active" : ""); ?>" href="old-versions<?=$ext;?>">Old Versions</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="nav-item"><a class="nav-link<?=(substr($path, 0, 11) == "/contribute" ? " active" : ""); ?>" href="contribute<?=$ext;?>">Contribute</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="https://discord.gg/PNNZ3asUuY" target="_blank">Discord</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<script>
|
||||
// Disable navbar links that point back to this page.
|
||||
document.querySelectorAll(".navbar-nav .nav-link.active, .navbar-nav .dropdown-item.active").forEach(elm =>
|
||||
{
|
||||
elm.onclick = (event) => { event.preventDefault() };
|
||||
});
|
||||
|
||||
// User-facing stuff really has no reason to be served over insecure HTTP.
|
||||
if (location.host == "openwf.io" && location.protocol == "http:")
|
||||
{
|
||||
location.protocol = "https:";
|
||||
}
|
||||
</script>
|
||||
@ -1,29 +1,29 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Asset Replacements Guide | OpenWF</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
|
||||
</head>
|
||||
<body data-bs-theme="dark">
|
||||
<?php require "_components/navbar.php"; ?>
|
||||
<div class="container mt-3">
|
||||
<p>This guide will go through the steps to modify a texture used by Warframe via the OpenWF Bootstrapper.</p>
|
||||
<p>
|
||||
Before we start: <b>know what you're replacing</b>. I am going to be using <code>/Lotus/Interface/PolarityPoint.png</code> as an example, which is the icon for the Vazarin polarity.<br/>
|
||||
To explore textures, I can recommend using the GUI of <a href="https://github.com/Puxtril/Warframe-Exporter" target="_blank">Puxtril's Warframe Exporter</a>. </p>
|
||||
<ol>
|
||||
<li>Clone <a href="https://github.com/Sainan/warframe-cache-tools" target="_blank">warframe-cache-tools</a>.</li>
|
||||
<li>Within your copy of warframe-cache-tools, you can now run <code>pluto extract.pluto /Lotus/Interface/PolarityPoint.png</code> to download & export the texture to the <code>assets</code> folder.</li>
|
||||
<li>Head inside of the <code>assets</code> folder until you find <code>PolarityPoint.png.dds</code>.</li>
|
||||
<li>Open the DDS file inside of a hex editor like <a href="https://hexed.it/" target="_blank">HexEd.it</a> or <a href="https://mh-nexus.de/en/hxd/" target="_blank">HxD</a> and take note of the format, e.g. you will see the string <code>DXT1</code> or <code>DXT5</code> in the 6th row.</li>
|
||||
<li>You are now free to modify the image however you want. Just take care that the file has the same name, dimensions/resolution, and format/encoding as seen before.</li>
|
||||
<li>To build your assets, run <code>pluto build.pluto</code> within the warframe-cache-tools directory.</li>
|
||||
<li>Finally, to get the assets into the game, you can copy the <code>Content Replacements</code> folder from warframe-cache-tools into the OpenWF folder of your client. The Bootstrapper will automatically patch the game to use your modified content, and if you ever wanna stop using it, you can simply remove the client's <code>Content Replacements</code> folder.</li>
|
||||
</ol>
|
||||
</div>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
|
||||
<script src="https://censorcanary.org/censorcanary.js" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Asset Replacements Guide | OpenWF</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
|
||||
</head>
|
||||
<body data-bs-theme="dark">
|
||||
<?php require "_components/navbar.php"; ?>
|
||||
<div class="container mt-3">
|
||||
<p>This guide will go through the steps to modify a texture used by Warframe via the OpenWF Bootstrapper.</p>
|
||||
<p>
|
||||
Before we start: <b>know what you're replacing</b>. I am going to be using <code>/Lotus/Interface/PolarityPoint.png</code> as an example, which is the icon for the Vazarin polarity.<br/>
|
||||
To explore textures, I can recommend using the GUI of <a href="https://github.com/Puxtril/Warframe-Exporter" target="_blank">Puxtril's Warframe Exporter</a>. </p>
|
||||
<ol>
|
||||
<li>Clone <a href="https://github.com/Sainan/warframe-cache-tools" target="_blank">warframe-cache-tools</a>.</li>
|
||||
<li>Within your copy of warframe-cache-tools, you can now run <code>pluto extract.pluto /Lotus/Interface/PolarityPoint.png</code> to download & export the texture to the <code>assets</code> folder.</li>
|
||||
<li>Head inside of the <code>assets</code> folder until you find <code>PolarityPoint.png.dds</code>.</li>
|
||||
<li>Open the DDS file inside of a hex editor like <a href="https://hexed.it/" target="_blank">HexEd.it</a> or <a href="https://mh-nexus.de/en/hxd/" target="_blank">HxD</a> and take note of the format, e.g. you will see the string <code>DXT1</code> or <code>DXT5</code> in the 6th row.</li>
|
||||
<li>You are now free to modify the image however you want. Just take care that the file has the same name, dimensions/resolution, and format/encoding as seen before.</li>
|
||||
<li>To build your assets, run <code>pluto build.pluto</code> within the warframe-cache-tools directory.</li>
|
||||
<li>Finally, to get the assets into the game, you can copy the <code>Content Replacements</code> folder from warframe-cache-tools into the OpenWF folder of your client. The Bootstrapper will automatically patch the game to use your modified content, and if you ever wanna stop using it, you can simply remove the client's <code>Content Replacements</code> folder.</li>
|
||||
</ol>
|
||||
</div>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
|
||||
<script src="https://censorcanary.org/censorcanary.js" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -1,167 +1,167 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>OpenWF Bootstrapper Manual</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<style>
|
||||
/* https://calamity-inc.github.io/Silver/base.css */
|
||||
|
||||
html
|
||||
{
|
||||
background: #111;
|
||||
color: #fff;
|
||||
|
||||
font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
||||
}
|
||||
|
||||
body
|
||||
{
|
||||
margin: 8px 12px;
|
||||
}
|
||||
|
||||
h1
|
||||
{
|
||||
font-weight: 400;
|
||||
font-size: 2.5em;
|
||||
margin-block: 0.3em;
|
||||
}
|
||||
|
||||
h2
|
||||
{
|
||||
font-weight: 350;
|
||||
font-size: 2em;
|
||||
margin-block-end: 0.4em;
|
||||
}
|
||||
|
||||
h3
|
||||
{
|
||||
font-weight: 300;
|
||||
font-size: 1.5em;
|
||||
margin-block-end: 0.4em;
|
||||
}
|
||||
|
||||
p
|
||||
{
|
||||
margin-block: 0.5em;
|
||||
}
|
||||
|
||||
code
|
||||
{
|
||||
padding: 1px 2px;
|
||||
border: 1px solid #2f2f2f;
|
||||
}
|
||||
|
||||
li:not(:last-child)
|
||||
{
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
a
|
||||
{
|
||||
color: #257afb
|
||||
}
|
||||
|
||||
a:hover
|
||||
{
|
||||
color: #3586ff;
|
||||
}
|
||||
|
||||
a:focus
|
||||
{
|
||||
color: #4791ff;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>OpenWF Bootstrapper Manual</h1>
|
||||
<p>While the main feature of the bootstrapper (wtsapi32.dll, dwmapi.dll, or version.dll) is to use a custom server with the game, it has other features as well.</p>
|
||||
<h2>Client Config.json</h2>
|
||||
<p>The bootstrapper's configuration is in <code>OpenWF/Client Config.json</code> relative to your game folder. It has the following fields:</p>
|
||||
<ul>
|
||||
<li><code>fallback_language</code> — If not empty, this language will be used when Warframe.x64.exe is invoked without a <code>language</code> command line argument.</li>
|
||||
<li><code>fallback_languageVO</code> — If not empty, this voiceover language will be used when Warframe.x64.exe is invoked without a <code>languageVO</code> command line argument.</li>
|
||||
<li><code>fallback_graphicsDriver</code> — If not empty, this graphics driver will be used when Warframe.x64.exe is invoked without a <code>graphicsDriver</code> command line argument.</li>
|
||||
<li><code>fallback_cluster</code> — The cluster to use when Warframe.x64.exe was double-clicked or the argument was simply omitted. Can be <code>public</code>, <code>test</code>, or <code>dev</code> — the latter two enable some more logging.</li>
|
||||
|
||||
<li><code>server_host</code> — The hostname or IP address to redirect game traffic to. This should match <code>myAddress</code> in SpaceNinjaServer.</li>
|
||||
<li><code>http_port</code> — The port to use for HTTP traffic. This should match <code>httpPort</code> in SpaceNinjaServer.</li>
|
||||
<li><code>https_port</code> — The port to use for HTTPS traffic. This should match <code>httpsPort</code> in SpaceNinjaServer.</li>
|
||||
<li><code>autologin</code> — Uses the provided credentials to automatically login on startup. If another instance is logged in on the same account, it will be forcefully logged out.</li>
|
||||
<li><code>autologin_email</code></li>
|
||||
<li><code>autologin_password</code> — The whirlpool hash of the password to use for autologin. You can simply enter your password and it will automatically be hashed and overwritten.</li>
|
||||
|
||||
<li><code>high_damage_numbers_patch</code> — If true, patches the game to display the exact number of damage that you dealt to fix -2147483648 showing up on high damage.</li>
|
||||
<li><code>simulacrum_blacklisted</code> — If true, blacklisted enemies are shown in the Simulacrum. Defaults to false to match the game.</li>
|
||||
<li><code>simulacrum_whitelisted</code> — If true, whitelisted enemies are shown in the Simulacrum. Defaults to true to match the game.</li>
|
||||
<li><code>pause_always_stops_time</code></li>
|
||||
<li><code>disable_nrs_connection</code> — If true, disables NRS connections, preventing the game from showing "Please ensure that your firewall permits UDP ports 4950 & 4955."</li>
|
||||
|
||||
<li><code>ee_log_in_console</code> — If true, writes everything that gets written to EE.log to the console as well.</li>
|
||||
<li><code>skip_mission_start_timer</code> — If true, disables the 5 second wait before a mission starts.</li>
|
||||
<li><code>logout_on_request_failure</code> — If false, the game will ignore HTTP request failures/timeouts instead of forcing a logout.</li>
|
||||
<li><code>fov_override</code> — If not 0, overrides the game's FOV setting. You can use any value from 1 to 226.</li>
|
||||
<li><code>forced_profile_dir</code> — An absolute path to a folder that will be used to read and write your game settings. Notably, this can be used to have the same settings regardless of username.</li>
|
||||
<li><code>auto_start_scripts</code> — A list of scripts to automatically start.</li>
|
||||
<li><code>alternative_loading</code> — Enables an alternative loading mode (<code>Server.FastLoad</code>) which also skips intro cutscenes when loading into a relay. However, this breaks some parts of The New War and possibly other missions.</li>
|
||||
<li><code>dont_resolve_labels</code> — If true, shows language tags instead of their associated value, e.g. <code>/Menu/Confirm_Item_Yes</code> instead of <code>YES</code>.</li>
|
||||
<li><code>save_all_metadata</code> — If true, implicitly creates an empty patch on every metadata read to make it available for get_effective_metadata requests. May degrade performance.</li>
|
||||
<li><code>write_all_metadata_reads_to_console</code> — If true, writes all metadata reads to the console. May degrade performance.</li>
|
||||
<li><code>write_all_metadata_reads_to_ee_log</code> — If true, writes all metadata reads to EE.log. May degrade performance.</li>
|
||||
<li><code>write_patches_metadata_reads_to_console</code> — If true, writes patched metadata reads to the console. May degrade performance.</li>
|
||||
<li><code>write_patches_metadata_reads_to_ee_log</code> — If true, writes patched metadata reads to EE.log. May degrade performance.</li>
|
||||
</ul>
|
||||
<h2>HTTP Interface</h2>
|
||||
<p>While the game is running, you can visit <a href="http://localhost:6155/" target="_blank">http://localhost:6155/</a> to modify some of the above options, access additional features like teleportation, and use scripts.</p>
|
||||
<p>This web interface uses the game's language or <code>?lang=</code> query parameter to check for translations. The builtin translations are mirrored from <a href="https://onlyg.it/OpenWF/Translations">https://onlyg.it/OpenWF/Translations</a>. You can provide a <code>OpenWF/dict.cat.txt</code> file to provide a custom work-in-progress translation.</p>
|
||||
<p>Developers can also use the HTTP interface to interact with the bootstrapper. In addition to commands (documented below), the following routes are available: <code>/ping</code>, <code>/save_all_metadata</code>, <code>/write_all_metadata_reads_to_console</code>, <code>/write_all_metadata_reads_to_ee_log</code>, <code>/write_patched_metadata_reads_to_console</code>, <code>/write_patched_metadata_reads_to_ee_log</code>, <code>/pause_always_stops_time</code>, <code>/server_host</code>, <code>/status</code>, <code>/toggle_console</code>, <code>/scripts</code>, <code>/start_script</code>, <code>/start_script_inline</code>, <code>/autostart_scripts</code>, <code>/add_autostart_script</code>, <code>/remove_autostart_script</code>, <code>/apply_hotfix</code>, <code>/version</code>, <code>/game_version</code>, <code>/check_label_replacements</code>, <code>/memory</code>, <code>/get_effective_metadata</code></p>
|
||||
<h2>Command Line Arguments</h2>
|
||||
<p>The bootstrapper adds the <code>owfServerHost</code> command line argument, which can be used to override the <code>server_host</code> in the config.</p>
|
||||
<h2>Tunables</h2>
|
||||
<p>When connecting to a server, the bootstrapper requests <code>/custom/tunables.json</code>. The resulting JSON object may provide the following fields:</p>
|
||||
<ul>
|
||||
<li><code>token</code> — if given, this string will be provided as a query parameter in the login request to indicate acknowledgement of the tunables</li>
|
||||
<li><code>prohibit_skip_mission_start_timer</code> — if true, prohibits <code>skip_mission_start_timer</code></li>
|
||||
<li><code>prohibit_fov_override</code> — if true, prohibits <code>fov_override</code></li>
|
||||
<li><code>prohibit_freecam</code> — if true, prohibits <code>freecam</code></li>
|
||||
<li><code>prohibit_teleport</code> — if true, prohibits <code>teleport</code></li>
|
||||
<li><code>prohibit_scripts</code> — if true, prohibits the execution of user-defined scripts</li>
|
||||
</ul>
|
||||
<p>To aid in troubleshooting, the bootstrapper assumes that a compatible server responds to this request with status code 200 and a valid JSON object, otherwise showing a warning popup.</p>
|
||||
<h2>Traffic Deviations</h2>
|
||||
<ul>
|
||||
<li>login.php & worldState.php requests have the extra query parameter <code>buildLabel</code> to indicate the client's buildLabel.</li>
|
||||
<li>login.php requests also have an extra <code>clientMod</code> parameter indicating the Bootstrapper's name and version. If Metadata Patches are in use, <code>metadataPatchesInUse=1</code> is added as well.</li>
|
||||
<li>inventory.php & missionInventoryUpdate.php requests have the extra query parameter <code>xpBasedLevelCapDisabled</code> to indicate that the client has been patched to accept any PlayerLevel and doesn't need XPInfo to match.</li>
|
||||
<li>The IRC <code>USER</code> message is adjusted to contain <code>nonce=...</code> in the 'realname' field.</li>
|
||||
</ul>
|
||||
<h2>Metadata Patches</h2>
|
||||
<p>Metadata Patches are loaded from <code>.txt</code> files in the <code>OpenWF/Metadata Patches/</code> folder.</p>
|
||||
<p>They are parsed line by line. If a line starts with <code>/</code>, a new patch for the given absolute path is started.</p>
|
||||
<p>It is possible to have a single patch affect multiple paths by using ampersands. The start of a patch can also take up multiple lines if the ampersand is at the end of the line or the beginning of the next line.</p>
|
||||
<p>For the remaining processing, leading and trailing spaces and tabs are ignored:</p>
|
||||
<ul>
|
||||
<li>Lines starting with <code>></code> also start a new patch but can be used at any indentation level.</li>
|
||||
<li>Any line not starting with a special token (<code>></code>, <code>r|</code>, ...) is added as a prefix to the effective metadata. This works to add top-level properties but also to replace them because the game resolves duplicates by ignoring subsequent entries.</li>
|
||||
<li>Lines starting with <code>r|</code> create replacements, e.g. <code>r|A|Z</code> replaces all instances of <code>A</code> with <code>Z</code> in affected metadata.</li>
|
||||
<li>Lines starting with <code>s|</code> create regex substitutions, e.g. <code>s|(?m)^(.+)=1$|$1=0</code> would replace a value of 1 on any line with a 0, using the 'm' flag here so ^ and $ also match on line boundaries. See <a href="https://github.com/calamity-inc/Soup/blob/senpai/docs/user/regex.md" target="_blank">here</a> for more information about the Regex engine.</li>
|
||||
</ul>
|
||||
<p>If multiple patches affect the same absolute path, they are combined.</p>
|
||||
<h2>Content Management</h2>
|
||||
<p>The bootstrapper handles the client's content requests by consulting the <code>OpenWF/Content/</code> folder, forwarding the request to the configured server in case a file is not found.</p>
|
||||
<p>At minimum, the client will request <code>/0/H.Cache.bin!D_---------------------w</code>. The bootstrapper has 3 modes for managing this file:</p>
|
||||
<ul>
|
||||
<li><b>Managed</b> — If content replacements are in use, they are copied over into the content folder along with backups, and new cache manifests (<code>B.Cache.Windows.bin</code> and <code>H.Cache.bin</code>) will be created to ensure your content is loaded. Otherwise,</li>
|
||||
<li><b>Unmanaged</b> — If <code>OpenWF/Content/0/UNMANAGED</code> exists, it is assumed that <code>OpenWF/Content/0/H.Cache.bin!D_---------------------w</code> is correctly in place and no attempts to correct it will be made. Otherwise,</li>
|
||||
<li><b>Default</b> — The bootstrapper will provide a <code>OpenWF/Content/0/H.Cache.bin!D_---------------------w</code> file that should require no extra content requests except for undoing content replacements.</li>
|
||||
</ul>
|
||||
<h2>WebSocket Connection to Server</h2>
|
||||
<p>After login, the bootstrapper will attempt to establish a WebSocket connection with <code>ws://server_host:http_port/custom/ws</code>. If the WebSocket upgrade succeeds, the bootstrapper sends <code>{"auth_game":{"accountId":...,"nonce":...}}</code>. With this connection in place, the server can send <code>{"sync_inventory":true}</code> to cause the client to resync from <code>inventory.php</code> or <code>{"tunables":{...}}</code> to send updated tunables.</p>
|
||||
<h2>Command API</h2>
|
||||
<p>The command API is a versatile way for developers to interact with the bootstrapper. Commands are available via HTTP, WebSocket, and the scripting API. For example, to enable <code>skip_mission_start_timer</code>, one can use HTTP with <code>/skip_mission_start_timer?true</code>, WebSocket with <code>send("skip_mission_start_timer?true")</code> or scripting with <code>owf_command("skip_mission_start_timer?true")</code>.</p>
|
||||
<p>The following commands are available: <code>logout</code>, <code>save_config</code>, <code>reload_hotkeys</code>, <code>reload_label_replacements</code>, <code>reload_metadata_patches</code>, <code>available_scripts</code>, <code>running_scripts</code>, <code>autostart_scripts</code>, <code>script_log</code>, <code>clear_script_log</code>, <code>stop_script</code>, <code>high_damage_numbers_patch</code>, <code>skip_mission_start_timer</code>, <code>simulacrum_blacklisted</code>, <code>simulacrum_whitelisted</code>, <code>alternative_loading</code>, <code>ee_log_in_console</code>, <code>dont_resolve_labels</code>, <code>fov_override</code>, <code>freecam</code>, <code>lockcam</code>, <code>gamecam</code>, <code>teleport</code>, <code>enable_pause_always_stops_time</code>, <code>disable_pause_always_stops_time</code>, <code>request_bgscript_broadcasts</code>, <code>download_latest_hotfix</code>, <code>check_for_updates</code></p>
|
||||
<h2>Feedback</h2>
|
||||
<p>I hope this document was useful. If you have any feature requests or bug reports regarding the bootstrapper, feel free to submit them at <a href="https://onlyg.it/OpenWF/Bootstrapper/issues">https://onlyg.it/OpenWF/Bootstrapper/issues</a>.</p>
|
||||
<br>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>OpenWF Bootstrapper Manual</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<style>
|
||||
/* https://calamity-inc.github.io/Silver/base.css */
|
||||
|
||||
html
|
||||
{
|
||||
background: #111;
|
||||
color: #fff;
|
||||
|
||||
font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
||||
}
|
||||
|
||||
body
|
||||
{
|
||||
margin: 8px 12px;
|
||||
}
|
||||
|
||||
h1
|
||||
{
|
||||
font-weight: 400;
|
||||
font-size: 2.5em;
|
||||
margin-block: 0.3em;
|
||||
}
|
||||
|
||||
h2
|
||||
{
|
||||
font-weight: 350;
|
||||
font-size: 2em;
|
||||
margin-block-end: 0.4em;
|
||||
}
|
||||
|
||||
h3
|
||||
{
|
||||
font-weight: 300;
|
||||
font-size: 1.5em;
|
||||
margin-block-end: 0.4em;
|
||||
}
|
||||
|
||||
p
|
||||
{
|
||||
margin-block: 0.5em;
|
||||
}
|
||||
|
||||
code
|
||||
{
|
||||
padding: 1px 2px;
|
||||
border: 1px solid #2f2f2f;
|
||||
}
|
||||
|
||||
li:not(:last-child)
|
||||
{
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
a
|
||||
{
|
||||
color: #257afb
|
||||
}
|
||||
|
||||
a:hover
|
||||
{
|
||||
color: #3586ff;
|
||||
}
|
||||
|
||||
a:focus
|
||||
{
|
||||
color: #4791ff;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>OpenWF Bootstrapper Manual</h1>
|
||||
<p>While the main feature of the bootstrapper (wtsapi32.dll, dwmapi.dll, or version.dll) is to use a custom server with the game, it has other features as well.</p>
|
||||
<h2>Client Config.json</h2>
|
||||
<p>The bootstrapper's configuration is in <code>OpenWF/Client Config.json</code> relative to your game folder. It has the following fields:</p>
|
||||
<ul>
|
||||
<li><code>fallback_language</code> — If not empty, this language will be used when Warframe.x64.exe is invoked without a <code>language</code> command line argument.</li>
|
||||
<li><code>fallback_languageVO</code> — If not empty, this voiceover language will be used when Warframe.x64.exe is invoked without a <code>languageVO</code> command line argument.</li>
|
||||
<li><code>fallback_graphicsDriver</code> — If not empty, this graphics driver will be used when Warframe.x64.exe is invoked without a <code>graphicsDriver</code> command line argument.</li>
|
||||
<li><code>fallback_cluster</code> — The cluster to use when Warframe.x64.exe was double-clicked or the argument was simply omitted. Can be <code>public</code>, <code>test</code>, or <code>dev</code> — the latter two enable some more logging.</li>
|
||||
|
||||
<li><code>server_host</code> — The hostname or IP address to redirect game traffic to. This should match <code>myAddress</code> in SpaceNinjaServer.</li>
|
||||
<li><code>http_port</code> — The port to use for HTTP traffic. This should match <code>httpPort</code> in SpaceNinjaServer.</li>
|
||||
<li><code>https_port</code> — The port to use for HTTPS traffic. This should match <code>httpsPort</code> in SpaceNinjaServer.</li>
|
||||
<li><code>autologin</code> — Uses the provided credentials to automatically login on startup. If another instance is logged in on the same account, it will be forcefully logged out.</li>
|
||||
<li><code>autologin_email</code></li>
|
||||
<li><code>autologin_password</code> — The whirlpool hash of the password to use for autologin. You can simply enter your password and it will automatically be hashed and overwritten.</li>
|
||||
|
||||
<li><code>high_damage_numbers_patch</code> — If true, patches the game to display the exact number of damage that you dealt to fix -2147483648 showing up on high damage.</li>
|
||||
<li><code>simulacrum_blacklisted</code> — If true, blacklisted enemies are shown in the Simulacrum. Defaults to false to match the game.</li>
|
||||
<li><code>simulacrum_whitelisted</code> — If true, whitelisted enemies are shown in the Simulacrum. Defaults to true to match the game.</li>
|
||||
<li><code>pause_always_stops_time</code></li>
|
||||
<li><code>disable_nrs_connection</code> — If true, disables NRS connections, preventing the game from showing "Please ensure that your firewall permits UDP ports 4950 & 4955."</li>
|
||||
|
||||
<li><code>ee_log_in_console</code> — If true, writes everything that gets written to EE.log to the console as well.</li>
|
||||
<li><code>skip_mission_start_timer</code> — If true, disables the 5 second wait before a mission starts.</li>
|
||||
<li><code>logout_on_request_failure</code> — If false, the game will ignore HTTP request failures/timeouts instead of forcing a logout.</li>
|
||||
<li><code>fov_override</code> — If not 0, overrides the game's FOV setting. You can use any value from 1 to 226.</li>
|
||||
<li><code>forced_profile_dir</code> — An absolute path to a folder that will be used to read and write your game settings. Notably, this can be used to have the same settings regardless of username.</li>
|
||||
<li><code>auto_start_scripts</code> — A list of scripts to automatically start.</li>
|
||||
<li><code>alternative_loading</code> — Enables an alternative loading mode (<code>Server.FastLoad</code>) which also skips intro cutscenes when loading into a relay. However, this breaks some parts of The New War and possibly other missions.</li>
|
||||
<li><code>dont_resolve_labels</code> — If true, shows language tags instead of their associated value, e.g. <code>/Menu/Confirm_Item_Yes</code> instead of <code>YES</code>.</li>
|
||||
<li><code>save_all_metadata</code> — If true, implicitly creates an empty patch on every metadata read to make it available for get_effective_metadata requests. May degrade performance.</li>
|
||||
<li><code>write_all_metadata_reads_to_console</code> — If true, writes all metadata reads to the console. May degrade performance.</li>
|
||||
<li><code>write_all_metadata_reads_to_ee_log</code> — If true, writes all metadata reads to EE.log. May degrade performance.</li>
|
||||
<li><code>write_patches_metadata_reads_to_console</code> — If true, writes patched metadata reads to the console. May degrade performance.</li>
|
||||
<li><code>write_patches_metadata_reads_to_ee_log</code> — If true, writes patched metadata reads to EE.log. May degrade performance.</li>
|
||||
</ul>
|
||||
<h2>HTTP Interface</h2>
|
||||
<p>While the game is running, you can visit <a href="http://localhost:6155/" target="_blank">http://localhost:6155/</a> to modify some of the above options, access additional features like teleportation, and use scripts.</p>
|
||||
<p>This web interface uses the game's language or <code>?lang=</code> query parameter to check for translations. The builtin translations are mirrored from <a href="https://onlyg.it/OpenWF/Translations">https://onlyg.it/OpenWF/Translations</a>. You can provide a <code>OpenWF/dict.cat.txt</code> file to provide a custom work-in-progress translation.</p>
|
||||
<p>Developers can also use the HTTP interface to interact with the bootstrapper. In addition to commands (documented below), the following routes are available: <code>/ping</code>, <code>/save_all_metadata</code>, <code>/write_all_metadata_reads_to_console</code>, <code>/write_all_metadata_reads_to_ee_log</code>, <code>/write_patched_metadata_reads_to_console</code>, <code>/write_patched_metadata_reads_to_ee_log</code>, <code>/pause_always_stops_time</code>, <code>/server_host</code>, <code>/status</code>, <code>/toggle_console</code>, <code>/scripts</code>, <code>/start_script</code>, <code>/start_script_inline</code>, <code>/autostart_scripts</code>, <code>/add_autostart_script</code>, <code>/remove_autostart_script</code>, <code>/apply_hotfix</code>, <code>/version</code>, <code>/game_version</code>, <code>/check_label_replacements</code>, <code>/memory</code>, <code>/get_effective_metadata</code></p>
|
||||
<h2>Command Line Arguments</h2>
|
||||
<p>The bootstrapper adds the <code>owfServerHost</code> command line argument, which can be used to override the <code>server_host</code> in the config.</p>
|
||||
<h2>Tunables</h2>
|
||||
<p>When connecting to a server, the bootstrapper requests <code>/custom/tunables.json</code>. The resulting JSON object may provide the following fields:</p>
|
||||
<ul>
|
||||
<li><code>token</code> — if given, this string will be provided as a query parameter in the login request to indicate acknowledgement of the tunables</li>
|
||||
<li><code>prohibit_skip_mission_start_timer</code> — if true, prohibits <code>skip_mission_start_timer</code></li>
|
||||
<li><code>prohibit_fov_override</code> — if true, prohibits <code>fov_override</code></li>
|
||||
<li><code>prohibit_freecam</code> — if true, prohibits <code>freecam</code></li>
|
||||
<li><code>prohibit_teleport</code> — if true, prohibits <code>teleport</code></li>
|
||||
<li><code>prohibit_scripts</code> — if true, prohibits the execution of user-defined scripts</li>
|
||||
</ul>
|
||||
<p>To aid in troubleshooting, the bootstrapper assumes that a compatible server responds to this request with status code 200 and a valid JSON object, otherwise showing a warning popup.</p>
|
||||
<h2>Traffic Deviations</h2>
|
||||
<ul>
|
||||
<li>login.php & worldState.php requests have the extra query parameter <code>buildLabel</code> to indicate the client's buildLabel.</li>
|
||||
<li>login.php requests also have an extra <code>clientMod</code> parameter indicating the Bootstrapper's name and version. If Metadata Patches are in use, <code>metadataPatchesInUse=1</code> is added as well.</li>
|
||||
<li>inventory.php & missionInventoryUpdate.php requests have the extra query parameter <code>xpBasedLevelCapDisabled</code> to indicate that the client has been patched to accept any PlayerLevel and doesn't need XPInfo to match.</li>
|
||||
<li>The IRC <code>USER</code> message is adjusted to contain <code>nonce=...</code> in the 'realname' field.</li>
|
||||
</ul>
|
||||
<h2>Metadata Patches</h2>
|
||||
<p>Metadata Patches are loaded from <code>.txt</code> files in the <code>OpenWF/Metadata Patches/</code> folder.</p>
|
||||
<p>They are parsed line by line. If a line starts with <code>/</code>, a new patch for the given absolute path is started.</p>
|
||||
<p>It is possible to have a single patch affect multiple paths by using ampersands. The start of a patch can also take up multiple lines if the ampersand is at the end of the line or the beginning of the next line.</p>
|
||||
<p>For the remaining processing, leading and trailing spaces and tabs are ignored:</p>
|
||||
<ul>
|
||||
<li>Lines starting with <code>></code> also start a new patch but can be used at any indentation level.</li>
|
||||
<li>Any line not starting with a special token (<code>></code>, <code>r|</code>, ...) is added as a prefix to the effective metadata. This works to add top-level properties but also to replace them because the game resolves duplicates by ignoring subsequent entries.</li>
|
||||
<li>Lines starting with <code>r|</code> create replacements, e.g. <code>r|A|Z</code> replaces all instances of <code>A</code> with <code>Z</code> in affected metadata.</li>
|
||||
<li>Lines starting with <code>s|</code> create regex substitutions, e.g. <code>s|(?m)^(.+)=1$|$1=0</code> would replace a value of 1 on any line with a 0, using the 'm' flag here so ^ and $ also match on line boundaries. See <a href="https://github.com/calamity-inc/Soup/blob/senpai/docs/user/regex.md" target="_blank">here</a> for more information about the Regex engine.</li>
|
||||
</ul>
|
||||
<p>If multiple patches affect the same absolute path, they are combined.</p>
|
||||
<h2>Content Management</h2>
|
||||
<p>The bootstrapper handles the client's content requests by consulting the <code>OpenWF/Content/</code> folder, forwarding the request to the configured server in case a file is not found.</p>
|
||||
<p>At minimum, the client will request <code>/0/H.Cache.bin!D_---------------------w</code>. The bootstrapper has 3 modes for managing this file:</p>
|
||||
<ul>
|
||||
<li><b>Managed</b> — If content replacements are in use, they are copied over into the content folder along with backups, and new cache manifests (<code>B.Cache.Windows.bin</code> and <code>H.Cache.bin</code>) will be created to ensure your content is loaded. Otherwise,</li>
|
||||
<li><b>Unmanaged</b> — If <code>OpenWF/Content/0/UNMANAGED</code> exists, it is assumed that <code>OpenWF/Content/0/H.Cache.bin!D_---------------------w</code> is correctly in place and no attempts to correct it will be made. Otherwise,</li>
|
||||
<li><b>Default</b> — The bootstrapper will provide a <code>OpenWF/Content/0/H.Cache.bin!D_---------------------w</code> file that should require no extra content requests except for undoing content replacements.</li>
|
||||
</ul>
|
||||
<h2>WebSocket Connection to Server</h2>
|
||||
<p>After login, the bootstrapper will attempt to establish a WebSocket connection with <code>ws://server_host:http_port/custom/ws</code>. If the WebSocket upgrade succeeds, the bootstrapper sends <code>{"auth_game":{"accountId":...,"nonce":...}}</code>. With this connection in place, the server can send <code>{"sync_inventory":true}</code> to cause the client to resync from <code>inventory.php</code> or <code>{"tunables":{...}}</code> to send updated tunables.</p>
|
||||
<h2>Command API</h2>
|
||||
<p>The command API is a versatile way for developers to interact with the bootstrapper. Commands are available via HTTP, WebSocket, and the scripting API. For example, to enable <code>skip_mission_start_timer</code>, one can use HTTP with <code>/skip_mission_start_timer?true</code>, WebSocket with <code>send("skip_mission_start_timer?true")</code> or scripting with <code>owf_command("skip_mission_start_timer?true")</code>.</p>
|
||||
<p>The following commands are available: <code>logout</code>, <code>save_config</code>, <code>reload_hotkeys</code>, <code>reload_label_replacements</code>, <code>reload_metadata_patches</code>, <code>available_scripts</code>, <code>running_scripts</code>, <code>autostart_scripts</code>, <code>script_log</code>, <code>clear_script_log</code>, <code>stop_script</code>, <code>high_damage_numbers_patch</code>, <code>skip_mission_start_timer</code>, <code>simulacrum_blacklisted</code>, <code>simulacrum_whitelisted</code>, <code>alternative_loading</code>, <code>ee_log_in_console</code>, <code>dont_resolve_labels</code>, <code>fov_override</code>, <code>freecam</code>, <code>lockcam</code>, <code>gamecam</code>, <code>teleport</code>, <code>enable_pause_always_stops_time</code>, <code>disable_pause_always_stops_time</code>, <code>request_bgscript_broadcasts</code>, <code>download_latest_hotfix</code>, <code>check_for_updates</code></p>
|
||||
<h2>Feedback</h2>
|
||||
<p>I hope this document was useful. If you have any feature requests or bug reports regarding the bootstrapper, feel free to submit them at <a href="https://onlyg.it/OpenWF/Bootstrapper/issues">https://onlyg.it/OpenWF/Bootstrapper/issues</a>.</p>
|
||||
<br>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -1,31 +1,31 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Contributing to OpenWF</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
|
||||
</head>
|
||||
<body data-bs-theme="dark">
|
||||
<?php require "_components/navbar.php"; ?>
|
||||
<div class="container mt-3">
|
||||
<h2>Code</h2>
|
||||
<p>Code contributions would be most welcome, especially on SpaceNinjaServer, with <a href='https://onlyg.it/OpenWF/SpaceNinjaServer/issues' target='_blank'>many open issues</a>.</p>
|
||||
<h2>Translations</h2>
|
||||
<p>Most OpenWF software has support for translations:</p>
|
||||
<ul>
|
||||
<li><a href="https://onlyg.it/OpenWF/SpaceNinjaServer/src/branch/main/static/webui/translations" target="_blank">SpaceNinjaServer WebUI</a></li>
|
||||
<li><a href="https://onlyg.it/OpenWF/Translations/src/branch/main/bootstrapper" target="_blank">Bootstrapper WebUI</a></li>
|
||||
</ul>
|
||||
<h2>Seeding</h2>
|
||||
<p>We are looking into IPFS for censorship-resistance. You could help the project out by pinning some things to your own node(s):</p>
|
||||
<ul>
|
||||
<li>OpenWF Website: <code>ipfs pin add /ipns/openwf.io</code></li>
|
||||
<li>SpaceNinjaServer git mirror: <code>ipfs pin add /ipns/sns.openwf.io</code> (<a href="https://ipfs.io/ipns/k51qzi5uqu5diybf2prwdxnyiewvnjn5jshwiv5awoqrn9z5tfen8p31x15jk9/#repo=https%3A%2F%2Fipfs.io%2Fipns%2Fsns.openwf.io" target="_blank">gitview</a>)</li>
|
||||
</ul>
|
||||
<p>Note that IPNS names are resolved to their CID when pinning, so an hourly cronjob is recommended.</p>
|
||||
</div>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
|
||||
<script src="https://censorcanary.org/censorcanary.js" defer></script>
|
||||
</body>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Contributing to OpenWF</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
|
||||
</head>
|
||||
<body data-bs-theme="dark">
|
||||
<?php require "_components/navbar.php"; ?>
|
||||
<div class="container mt-3">
|
||||
<h2>Code</h2>
|
||||
<p>Code contributions would be most welcome, especially on SpaceNinjaServer, with <a href='https://onlyg.it/OpenWF/SpaceNinjaServer/issues' target='_blank'>many open issues</a>.</p>
|
||||
<h2>Translations</h2>
|
||||
<p>Most OpenWF software has support for translations:</p>
|
||||
<ul>
|
||||
<li><a href="https://onlyg.it/OpenWF/SpaceNinjaServer/src/branch/main/static/webui/translations" target="_blank">SpaceNinjaServer WebUI</a></li>
|
||||
<li><a href="https://onlyg.it/OpenWF/Translations/src/branch/main/bootstrapper" target="_blank">Bootstrapper WebUI</a></li>
|
||||
</ul>
|
||||
<h2>Seeding</h2>
|
||||
<p>We are looking into IPFS for censorship-resistance. You could help the project out by pinning some things to your own node(s):</p>
|
||||
<ul>
|
||||
<li>OpenWF Website: <code>ipfs pin add /ipns/openwf.io</code></li>
|
||||
<li>SpaceNinjaServer git mirror: <code>ipfs pin add /ipns/sns.openwf.io</code> (<a href="https://ipfs.io/ipns/k51qzi5uqu5diybf2prwdxnyiewvnjn5jshwiv5awoqrn9z5tfen8p31x15jk9/#repo=https%3A%2F%2Fipfs.io%2Fipns%2Fsns.openwf.io" target="_blank">gitview</a>)</li>
|
||||
</ul>
|
||||
<p>Note that IPNS names are resolved to their CID when pinning, so an hourly cronjob is recommended.</p>
|
||||
</div>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
|
||||
<script src="https://censorcanary.org/censorcanary.js" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
108
guide.php
108
guide.php
@ -1,54 +1,54 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>OpenWF Setup Guide</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
|
||||
</head>
|
||||
<body data-bs-theme="dark">
|
||||
<?php require "_components/navbar.php"; ?>
|
||||
<div class="container mt-3">
|
||||
<h2>Server Prerequisites</h2>
|
||||
<ul>
|
||||
<li>Git (<a href="https://git-scm.com/downloads" target="_blank">Download</a>)</li>
|
||||
<li>Node.js (<a href="https://nodejs.org/en/download" target="_blank">Download</a></a>)</li>
|
||||
<li>MongoDB (<a href="https://www.mongodb.com/try/download/community" target="_blank">Download</a></a>)</li>
|
||||
</ul>
|
||||
<h2>Server Installation</h2>
|
||||
<ol>
|
||||
<li>Run <code>git clone https://openwf.io/SpaceNinjaServer.git</code> in a command prompt to download SpaceNinjaServer in the current working directory</li>
|
||||
<li>Open the SpaceNinjaServer folder (<code>cd SpaceNinjaServer</code>)</li>
|
||||
<li>Copy config-vanilla.json to create a config.json</li>
|
||||
<li>(Optional) Edit the config.json to match your MongoDB settings (if not default) and however else you would like to configure the server</li>
|
||||
<li>(Optional) If you have a GB of free space, you might want to download stripped assets such as <abbr title="Ability videos show a brief clip of an ability in action. They can be seen by hovering over an ability in the Arsenal, Codex, etc.">ability videos</abbr> so the client can request them on-demand: Run <code>git clone https://openwf.io/0.git</code> in the <code>static/data</code> folder</li>
|
||||
<li>Run <code>npm install --omit=dev --omit=optional</code> to install library dependencies</li>
|
||||
<li>Now you can run <code>npm run raw</code> to start the server anytime</li>
|
||||
</ol>
|
||||
<h2>Server Update</h2>
|
||||
<p>You can simply run the <code>UPDATE AND START SERVER</code> script for this, but otherwise the steps are pretty simple:</p>
|
||||
<ol>
|
||||
<li>Run <code>git pull</code> in the SpaceNinjaServer folder</li>
|
||||
<li>(Optional) If you have the stripped assets, run <code>git pull</code> in the <code>static/data/0</code> folder</li>
|
||||
<li>Run <code>npm install --omit=dev --omit=optional</code> to synchronize library dependencies</li>
|
||||
<li>Now you can use <code>npm run raw</code> to start the server again</li>
|
||||
</ol>
|
||||
<h2>Client Patch</h2>
|
||||
<p>In order to connect to custom servers, the client needs to be patched, which is what the boostrapper is for.</p>
|
||||
<ul>
|
||||
<li><b>Prerequisite:</b> Because this is a project about preservation, we do not support the latest versions immediately. Please see <a href="old-versions<?=$ext;?>" target="_blank">here</a> for supported versions and download instructions.</li>
|
||||
<li><b>Setup:</b> Download <a href="https://openwf.io/supplementals/client%20drop-in/latest_dll" target="_blank">the boostrapper DLL (wtsapi32.dll)</a> and put it in your game's installation folder (the one where Warframe.x64.exe is in). On Linux, you may need to rename it to dwmapi.dll and/or use <code>WINEDLLOVERRIDE</code>.</li>
|
||||
<li><b>Usage:</b> With the DLL in place, you can double-click Warframe.x64.exe to start the game with OpenWF.<!-- Opening the game's launcher will revert it back to normal. --></li>
|
||||
</ul>
|
||||
<p>The bootstrapper is <a href="bootstrapper-manual<?=(!empty($ext) ? ".html" : "");?>" target="_blank">fully documented here</a>, but the most important point is that, while the game is running, you can visit <a href="http://localhost:6155/" target="_blank">http://localhost:6155/</a> to manage options, cheats, and scripts.</p>
|
||||
<h2>IRC Server</h2>
|
||||
<p>In addition to SpaceNinjaServer, you can also set up an IRC server for the in-game chat:</p>
|
||||
<ul>
|
||||
<li><a href="https://github.com/Sainan/warframe-irc-server/releases" target="_blank">warframe-irc-server</a> — an IRC server specifically made for OpenWF. Talks to SpaceNinjaServer to give "chat moderator" permissions and report dropped connections.</li>
|
||||
<li>InspIRCd — a well-known IRC server implementation used by DE themselves (albeit with unknown modifications). A pre-configured Windows copy of it can be downloaded <a href="https://openwf.io/supplementals/IRC.zip" download>here</a>.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
|
||||
<script src="https://censorcanary.org/censorcanary.js" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>OpenWF Setup Guide</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
|
||||
</head>
|
||||
<body data-bs-theme="dark">
|
||||
<?php require "_components/navbar.php"; ?>
|
||||
<div class="container mt-3">
|
||||
<h2>Server Prerequisites</h2>
|
||||
<ul>
|
||||
<li>Git (<a href="https://git-scm.com/downloads" target="_blank">Download</a>)</li>
|
||||
<li>Node.js (<a href="https://nodejs.org/en/download" target="_blank">Download</a></a>)</li>
|
||||
<li>MongoDB (<a href="https://www.mongodb.com/try/download/community" target="_blank">Download</a></a>)</li>
|
||||
</ul>
|
||||
<h2>Server Installation</h2>
|
||||
<ol>
|
||||
<li>Run <code>git clone https://openwf.io/SpaceNinjaServer.git</code> in a command prompt to download SpaceNinjaServer in the current working directory</li>
|
||||
<li>Open the SpaceNinjaServer folder (<code>cd SpaceNinjaServer</code>)</li>
|
||||
<li>Copy config-vanilla.json to create a config.json</li>
|
||||
<li>(Optional) Edit the config.json to match your MongoDB settings (if not default) and however else you would like to configure the server</li>
|
||||
<li>(Optional) If you have a GB of free space, you might want to download stripped assets such as <abbr title="Ability videos show a brief clip of an ability in action. They can be seen by hovering over an ability in the Arsenal, Codex, etc.">ability videos</abbr> so the client can request them on-demand: Run <code>git clone https://openwf.io/0.git</code> in the <code>static/data</code> folder</li>
|
||||
<li>Run <code>npm install --omit=dev --omit=optional</code> to install library dependencies</li>
|
||||
<li>Now you can run <code>npm run raw</code> to start the server anytime</li>
|
||||
</ol>
|
||||
<h2>Server Update</h2>
|
||||
<p>You can simply run the <code>UPDATE AND START SERVER</code> script for this, but otherwise the steps are pretty simple:</p>
|
||||
<ol>
|
||||
<li>Run <code>git pull</code> in the SpaceNinjaServer folder</li>
|
||||
<li>(Optional) If you have the stripped assets, run <code>git pull</code> in the <code>static/data/0</code> folder</li>
|
||||
<li>Run <code>npm install --omit=dev --omit=optional</code> to synchronize library dependencies</li>
|
||||
<li>Now you can use <code>npm run raw</code> to start the server again</li>
|
||||
</ol>
|
||||
<h2>Client Patch</h2>
|
||||
<p>In order to connect to custom servers, the client needs to be patched, which is what the boostrapper is for.</p>
|
||||
<ul>
|
||||
<li><b>Prerequisite:</b> Because this is a project about preservation, we do not support the latest versions immediately. Please see <a href="old-versions<?=$ext;?>" target="_blank">here</a> for supported versions and download instructions.</li>
|
||||
<li><b>Setup:</b> Download <a href="https://openwf.io/supplementals/client%20drop-in/latest_dll" target="_blank">the boostrapper DLL (wtsapi32.dll)</a> and put it in your game's installation folder (the one where Warframe.x64.exe is in). On Linux, you may need to rename it to dwmapi.dll and/or use <code>WINEDLLOVERRIDE</code>.</li>
|
||||
<li><b>Usage:</b> With the DLL in place, you can double-click Warframe.x64.exe to start the game with OpenWF.<!-- Opening the game's launcher will revert it back to normal. --></li>
|
||||
</ul>
|
||||
<p>The bootstrapper is <a href="bootstrapper-manual<?=(!empty($ext) ? ".html" : "");?>" target="_blank">fully documented here</a>, but the most important point is that, while the game is running, you can visit <a href="http://localhost:6155/" target="_blank">http://localhost:6155/</a> to manage options, cheats, and scripts.</p>
|
||||
<h2>IRC Server</h2>
|
||||
<p>In addition to SpaceNinjaServer, you can also set up an IRC server for the in-game chat:</p>
|
||||
<ul>
|
||||
<li><a href="https://github.com/Sainan/warframe-irc-server/releases" target="_blank">warframe-irc-server</a> — an IRC server specifically made for OpenWF. Talks to SpaceNinjaServer to give "chat moderator" permissions and report dropped connections.</li>
|
||||
<li>InspIRCd — a well-known IRC server implementation used by DE themselves (albeit with unknown modifications). A pre-configured Windows copy of it can be downloaded <a href="https://openwf.io/supplementals/IRC.zip" download>here</a>.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
|
||||
<script src="https://censorcanary.org/censorcanary.js" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
50
import.php
50
import.php
@ -1,25 +1,25 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Importing Guide | OpenWF</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
|
||||
</head>
|
||||
<body data-bs-theme="dark">
|
||||
<?php require "_components/navbar.php"; ?>
|
||||
<div class="container mt-3">
|
||||
<p>This guide will go over how to get your inventory data from live servers and import it in SpaceNinjaServer.</p>
|
||||
<h2>Export via AlecaFrame</h2>
|
||||
<p>If you use AlecaFrame, you already have an encrypted version of your inventory. You can use <a href="https://sainan.github.io/alecaframe-inventory-parser/" target="_blank">this tool</a> to help you locate and decrypt it.</p>
|
||||
<h2>Export via warframe-api-helper</h2>
|
||||
<p>You can use <a href="https://github.com/Sainan/warframe-api-helper/releases/latest">warframe-api-helper</a> to get your credentials while the game is running & logged in on live. It will download your inventory for you and store it in <code>inventory.json</code>.</p>
|
||||
<p>However, using the credentials (<code>?accountId=...&nonce=...</code>), it is also possible to get your personal rooms: <code>https://api.warframe.com/api/getShip.php?accountId=...&nonce=...</code></p>
|
||||
<h2>Import to SpaceNinjaServer</h2>
|
||||
<p>Now that you have your inventory, open the SpaceNinjaServer WebUI and select the Import tab. You can simply paste the entire thing in the textbox and press the Submit button.</p>
|
||||
<p>If you have a getShip response, you can import it the same way. Otherwise, you are advised to use Unlock All Ship Features in the Cheats tab to avoid being locked out of most things.</p>
|
||||
</div>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
|
||||
<script src="https://censorcanary.org/censorcanary.js" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Importing Guide | OpenWF</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
|
||||
</head>
|
||||
<body data-bs-theme="dark">
|
||||
<?php require "_components/navbar.php"; ?>
|
||||
<div class="container mt-3">
|
||||
<p>This guide will go over how to get your inventory data from live servers and import it in SpaceNinjaServer.</p>
|
||||
<h2>Export via AlecaFrame</h2>
|
||||
<p>If you use AlecaFrame, you already have an encrypted version of your inventory. You can use <a href="https://sainan.github.io/alecaframe-inventory-parser/" target="_blank">this tool</a> to help you locate and decrypt it.</p>
|
||||
<h2>Export via warframe-api-helper</h2>
|
||||
<p>You can use <a href="https://github.com/Sainan/warframe-api-helper/releases/latest">warframe-api-helper</a> to get your credentials while the game is running & logged in on live. It will download your inventory for you and store it in <code>inventory.json</code>.</p>
|
||||
<p>However, using the credentials (<code>?accountId=...&nonce=...</code>), it is also possible to get your personal rooms: <code>https://api.warframe.com/api/getShip.php?accountId=...&nonce=...</code></p>
|
||||
<h2>Import to SpaceNinjaServer</h2>
|
||||
<p>Now that you have your inventory, open the SpaceNinjaServer WebUI and select the Import tab. You can simply paste the entire thing in the textbox and press the Submit button.</p>
|
||||
<p>If you have a getShip response, you can import it the same way. Otherwise, you are advised to use Unlock All Ship Features in the Cheats tab to avoid being locked out of most things.</p>
|
||||
</div>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
|
||||
<script src="https://censorcanary.org/censorcanary.js" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
48
index.php
48
index.php
@ -1,24 +1,24 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>About OpenWF</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
|
||||
</head>
|
||||
<body data-bs-theme="dark">
|
||||
<?php require "_components/navbar.php"; ?>
|
||||
<div class="container mt-3">
|
||||
<p>OpenWF is a software suite centered around customizing Warframe, including:</p>
|
||||
<ul>
|
||||
<li><b>SpaceNinjaServer</b> — an <a href="https://openwf.io/SpaceNinjaServer.git">open-source</a> reimplementation of the game's web services. As we have custom server software, OpenWF avoids interference with the live game while allowing full customization of savedata.</li>
|
||||
<li>The <b>Bootstrapper</b> — our main DLL patching the client to connect to custom servers, but for newer versions, it also has some QoL features and cheats as well as a scripting API, label replacements and metadata patches, allowing for extensive customization of the experience. <a href="https://onlyg.it/OpenWF/Mods" target="_blank">Browse mods.</a></li>
|
||||
</ul>
|
||||
<a href="guide<?=$ext;?>" class="btn btn-primary">Get Started</a>
|
||||
<h3 class="mt-3">Preservation</h3>
|
||||
<p>OpenWF works entirely offline, so the versions supported by OpenWF will always be available to play and revisit, and it is indeed already possible to <a href="old-versions<?=$ext;?>">revisit old versions</a>.</p>
|
||||
</div>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
|
||||
<script src="https://censorcanary.org/censorcanary.js" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>About OpenWF</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
|
||||
</head>
|
||||
<body data-bs-theme="dark">
|
||||
<?php require "_components/navbar.php"; ?>
|
||||
<div class="container mt-3">
|
||||
<p>OpenWF is a software suite centered around customizing Warframe, including:</p>
|
||||
<ul>
|
||||
<li><b>SpaceNinjaServer</b> — an <a href="https://openwf.io/SpaceNinjaServer.git">open-source</a> reimplementation of the game's web services. As we have custom server software, OpenWF avoids interference with the live game while allowing full customization of savedata.</li>
|
||||
<li>The <b>Bootstrapper</b> — our main DLL patching the client to connect to custom servers, but for newer versions, it also has some QoL features and cheats as well as a scripting API, label replacements and metadata patches, allowing for extensive customization of the experience. <a href="https://onlyg.it/OpenWF/Mods" target="_blank">Browse mods.</a></li>
|
||||
</ul>
|
||||
<a href="guide<?=$ext;?>" class="btn btn-primary">Get Started</a>
|
||||
<h3 class="mt-3">Preservation</h3>
|
||||
<p>OpenWF works entirely offline, so the versions supported by OpenWF will always be available to play and revisit, and it is indeed already possible to <a href="old-versions<?=$ext;?>">revisit old versions</a>.</p>
|
||||
</div>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
|
||||
<script src="https://censorcanary.org/censorcanary.js" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
1516
old-versions.php
1516
old-versions.php
File diff suppressed because it is too large
Load Diff
@ -1,12 +1,12 @@
|
||||
if (Test-Path "Warframe.x64.exe") {
|
||||
if (!(Test-Path "OpenWF/Download Latest DLL.ps1")) {
|
||||
[System.IO.Directory]::CreateDirectory("OpenWF") | Out-Null
|
||||
Invoke-WebRequest -Uri "https://openwf.io/supplementals/Download%20Latest%20DLL.ps1" -OutFile "OpenWF/Download Latest DLL.ps1"
|
||||
}
|
||||
Set-Location -Path OpenWF
|
||||
& "$PSScriptRoot\OpenWF\Download Latest DLL.ps1"
|
||||
}
|
||||
else {
|
||||
Write-Host "Please put this script into your Warframe installation folder (the one where Warframe.x64.exe is in) before running it."
|
||||
Start-Sleep -Seconds 864000
|
||||
}
|
||||
if (Test-Path "Warframe.x64.exe") {
|
||||
if (!(Test-Path "OpenWF/Download Latest DLL.ps1")) {
|
||||
[System.IO.Directory]::CreateDirectory("OpenWF") | Out-Null
|
||||
Invoke-WebRequest -Uri "https://openwf.io/supplementals/Download%20Latest%20DLL.ps1" -OutFile "OpenWF/Download Latest DLL.ps1"
|
||||
}
|
||||
Set-Location -Path OpenWF
|
||||
& "$PSScriptRoot\OpenWF\Download Latest DLL.ps1"
|
||||
}
|
||||
else {
|
||||
Write-Host "Please put this script into your Warframe installation folder (the one where Warframe.x64.exe is in) before running it."
|
||||
Start-Sleep -Seconds 864000
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user