Add translation support

This commit is contained in:
Sainan 2025-03-12 21:19:08 +01:00
parent d67231b4d7
commit d3a2b5652c
8 changed files with 223 additions and 58 deletions

24
_components/loc.php Normal file
View File

@ -0,0 +1,24 @@
<?php
$lang_names = [
"en" => "English",
"de" => "Deutsch",
];
$lang_code = $_GET["lang"] ?? "en";
if (!array_key_exists($lang_code, $lang_names))
{
$lang_code = "en";
}
$data = json_decode(file_get_contents(__DIR__."/../_lang/$lang_code.json"), true);
function loc($key)
{
global $data;
$str = $data[$key];
if (substr($str, 0, 15) == "[UNTRANSLATED] ")
{
$str = substr($str, 15);
}
return $str;
}

View File

@ -1,21 +1,40 @@
<?php <?php
$ext = substr($_SERVER["SERVER_SOFTWARE"] ?? "", 0, 3) == "PHP" ? ".php" : ""; function getQueryForLang($code)
{
if ($code != "en")
{
return "?lang=".$code;
}
return "";
}
$query = getQueryForLang($lang_code);
$ext = (substr($_SERVER["SERVER_SOFTWARE"] ?? "", 0, 3) == "PHP" ? ".php" : "") . $query;
$path = strtok($_SERVER["REQUEST_URI"], '?');
?> ?>
<nav class="navbar navbar-expand bg-body-tertiary"> <nav class="navbar navbar-expand bg-body-tertiary">
<div class="container"> <div class="container">
<a class="navbar-brand" href="/" <?php if ($_SERVER["REQUEST_URI"] == "/"): ?> onclick="event.preventDefault();" <?php endif; ?>>OpenWF</a> <a class="navbar-brand" href="/<?=$query;?>" <?php if ($path == "/"): ?> onclick="event.preventDefault();" <?php endif; ?>>OpenWF</a>
<ul class="navbar-nav me-auto mb-0"> <ul class="navbar-nav me-auto mb-0">
<li class="nav-item dropdown"> <li class="nav-item dropdown">
<a class="nav-link dropdown-toggle<?=((substr($_SERVER["REQUEST_URI"], 0, 6) == "/guide" || substr($_SERVER["REQUEST_URI"], 0, 25) == "/asset-replacements-guide") ? " active" : ""); ?>" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">Guides</a> <a class="nav-link dropdown-toggle<?=((substr($path, 0, 6) == "/guide" || substr($path, 0, 25) == "/asset-replacements-guide") ? " active" : ""); ?>" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false"><?=loc("guides");?></a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li><a class="dropdown-item<?=(substr($_SERVER["REQUEST_URI"], 0, 6) == "/guide" ? " active" : ""); ?>" href="/guide<?=$ext;?>">Setup</a></li> <li><a class="dropdown-item<?=(substr($path, 0, 6) == "/guide" ? " active" : ""); ?>" href="/guide<?=$ext;?>">Setup</a></li>
<li><a class="dropdown-item<?=(substr($_SERVER["REQUEST_URI"], 0, 25) == "/asset-replacements-guide" ? " active" : ""); ?>" href="/asset-replacements-guide<?=$ext;?>">Asset Replacements</a></li> <li><a class="dropdown-item<?=(substr($path, 0, 25) == "/asset-replacements-guide" ? " active" : ""); ?>" href="/asset-replacements-guide<?=$ext;?>">Asset Replacements</a></li>
</ul> </ul>
</li> </li>
<li class="nav-item">
<a class="nav-link" href="https://discord.gg/PNNZ3asUuY" target="_blank">Discord</a>
</li>
</ul> </ul>
<ul class="navbar-nav ms-auto mb-0"> <ul class="navbar-nav ms-auto mb-0">
<li class="nav-item"> <li class="nav-item dropdown">
<a class="nav-link" href="https://discord.gg/PNNZ3asUuY" target="_blank">Discord</a> <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false"><?=$lang_names[$lang_code];?></a>
<ul class="dropdown-menu">
<?php foreach ($lang_names as $code => $name): ?>
<li><a class="dropdown-item<?=($lang_code == $code ? " active" : ""); ?>" href="<?=$path.getQueryForLang($code); ?>"><?=$name;?></a></li>
<?php endforeach; ?>
</ul>
</li> </li>
</ul> </ul>
</div> </div>

21
_lang/_update.php Normal file
View File

@ -0,0 +1,21 @@
<?php
php_sapi_name() == "cli" or die("CLI only!");
$source = json_decode(file_get_contents("en.json"), true);
foreach (["de"] as $code)
{
$target = json_decode(file_get_contents("$code.json"), true);
$rewritten = [];
foreach ($source as $key => $value)
{
if (array_key_exists($key, $target))
{
$rewritten[$key] = $target[$key];
}
else
{
$rewritten[$key] = "[UNTRANSLATED] ".$source[$key];
}
}
file_put_contents("$code.json", json_encode($rewritten, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE));
}

50
_lang/de.json Normal file
View File

@ -0,0 +1,50 @@
{
"about.title": "Über OpenWF",
"about.0": "OpenWF ist eine Software-Suite zur Anpassung von Warframe, die Folgendes umfasst:",
"about.1": "<b>SpaceNinjaServer</b> — eine <a href=\"https://openwf.io/SpaceNinjaServer.git\">Open-Source</a>-Reimplementierung der Webdienste des Spiels. Da wir eigene Server-Software haben, vermeidet OpenWF Eingriffe in das Live-Spiel und ermöglicht gleichzeitig eine vollständige Anpassung der Spieldaten.",
"about.2": "Der <b>Bootstrapper</b> — unsere Haupt-DLL für die neueste Spielversion. Ihr Hauptzweck ist die Verbindung zu benutzerdefinierten Servern, aber sie bietet auch einige QoL-Funktionen und Cheats sowie eine Skripting-API, Label-Ersetzungen und Metadaten-Patches an, die eine umfassende Anpassung des Spiels ermöglichen.",
"about.cta": "Jetzt Loslegen",
"preservation.title": "Warframe bewahren",
"preservation.0": "Ein langfristiges Ziel des Projekts ist es, Warframe auch nach der Abschaltung der offiziellen Server zu erhalten und tatsächlich jedes Update spielbar zu machen.",
"preservation.1": "Unser Hauptfokus liegt derzeit darauf, mit dem Spiel aktuell zu bleiben. Es gibt jedoch eine DLL + einen Fork von SpaceNinjaServer, mit dem man Warframe aus dem Jahr 2013 erneut erleben kann. Weitere Informationen dazu findest du <a href=\"https://discord.gg/PNNZ3asUuY\">auf unserem Discord</a>, insbesondere <a href=\"https://discord.com/channels/1108159019635462206/1280628166825873510/1280628233355923497\">in diesem Thread</a>.",
"tm_disclaimer": "Warframe ist eine eingetragene Marke von Digital Extremes. Die Verwendung dient ausschließlich zur Identifikation und impliziert keine Zugehörigkeit zu oder Unterstützung durch Digital Extremes.",
"guides": "Anleitungen",
"setup.title": "[UNTRANSLATED] OpenWF Setup Guide",
"setup.c.title": "[UNTRANSLATED] Client/Boostrapper",
"setup.c.simple": "[UNTRANSLATED] To use OpenWF, you only need to download the |DLL| and put it in your game's installation folder (the one where Warframe.x64.exe is in).",
"setup.c.dblclk": "[UNTRANSLATED] As long as this DLL is in the game folder, you can double-click Warframe.x64.exe to start the game with OpenWF.",
"setup.c.laurvt": "[UNTRANSLATED] Opening the game's launcher will revert it back to normal.",
"setup.c.docshttp": "[UNTRANSLATED] The DLL is <a href=\"bootstrapper-manual\" 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:61558/\" target=\"_blank\">http://localhost:61558/</a> to manage options, cheats, and scripts.",
"setup.c.next": "[UNTRANSLATED] <b>Next steps:</b> By default, the DLL redirects requests to localhost — meaning the same machine you're playing on — so you'll either need to set up a server or change the server_host to point to a different machine that's already got a server running. You can use <a href=\"/server-list\">a public server</a> if you don't need to be able to play offline and have full control.",
"setup.s.prereq": "[UNTRANSLATED] Server Prerequisites",
"download": "[UNTRANSLATED] Download",
"setup.s.install": "[UNTRANSLATED] Server Installation",
"setup.s.install.1": "[UNTRANSLATED] Run <code>git clone https://openwf.io/SpaceNinjaServer.git</code> in a command prompt to download SpaceNinjaServer in the current working directory",
"setup.s.install.2": "[UNTRANSLATED] Open the SpaceNinjaServer folder (<code>cd SpaceNinjaServer</code>)",
"setup.s.install.3": "[UNTRANSLATED] Run <code>copy config.json.example config.json</code> to create a config.json from config.json.example",
"setup.s.install.4": "[UNTRANSLATED] (Optional) Edit the config.json to match your MongoDB settings (if not default) and however else you would like to configure the server",
"setup.s.install.5": "[UNTRANSLATED] (Optional) If you want stripped assets (~622 <abbr title=\"mebibytes (1 MiB = 1048576 bytes)\">MiB</abbr>) which the client will request from the server on-demand (most notably, <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>), run <code>git clone https://openwf.io/0.git</code> in the <code>static/data</code> folder",
"setup.s.install.6": "[UNTRANSLATED] Run <code>npm i</code> (or <code>npm install</code>) to install library dependencies",
"setup.s.install.7": "[UNTRANSLATED] Now, to start the server, run <code>npm run dev</code> (if this is too slow on your machine, you can use <code>npm run build</code> followed by <code>npm run start</code>)",
"setup.s.update": "[UNTRANSLATED] Server Update",
"setup.s.update.wineasy": "[UNTRANSLATED] Windows users can simply double-click the <code>UPDATE AND START SERVER.bat</code>, but otherwise the steps are pretty simple:",
"setup.s.update.1": "[UNTRANSLATED] Run <code>git pull</code> in the SpaceNinjaServer folder",
"setup.s.update.2": "[UNTRANSLATED] (Optional) If you have the stripped assets, run <code>git pull</code> in the <code>static/data/0</code> folder",
"setup.s.update.3": "[UNTRANSLATED] Run <code>npm i</code> (or <code>npm install</code>) to synchronize library dependencies",
"setup.s.update.4": "[UNTRANSLATED] Now to start the server again, run <code>npm run dev</code> (if this is too slow on your machine, you can use <code>npm run build</code> followed by <code>npm run start</code>)",
"setup.irc": "[UNTRANSLATED] IRC Server",
"setup.irc.leadin": "[UNTRANSLATED] In addition to SpaceNinjaServer, you can also set up an IRC server for the in-game chat:",
"setup.irc.wheel": "[UNTRANSLATED] <a href=\"https://github.com/Sainan/warframe-irc-server/releases\" target=\"_blank\">warframe-irc-server</a> — an IRC server specifically made for Warframe. Talks to SpaceNinjaServer to give \"chat moderator\" permissions and report dropped connections.",
"setup.irc.inspircd": "[UNTRANSLATED] 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=\"/supplementals/IRC.zip\" download>here</a>.",
"arep.title": "[UNTRANSLATED] Asset Replacements Guide | OpenWF",
"arep.desc": "[UNTRANSLATED] This guide will go through the steps to modify a texture used by Warframe via the OpenWF Bootstrapper.",
"arep.what": "[UNTRANSLATED] 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.",
"arep.explore": "[UNTRANSLATED] 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>.",
"arep.1": "[UNTRANSLATED] Clone <a href=\"https://github.com/Sainan/warframe-cache-tools\" target=\"_blank\">warframe-cache-tools</a>.",
"arep.2": "[UNTRANSLATED] 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.",
"arep.3": "[UNTRANSLATED] Head inside of the <code>assets</code> folder until you find <code>PolarityPoint.png.dds</code>.",
"arep.4": "[UNTRANSLATED] 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.",
"arep.5": "[UNTRANSLATED] 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.",
"arep.6": "[UNTRANSLATED] To build your assets, run <code>pluto build.pluto</code> within the warframe-cache-tools directory.",
"arep.7": "[UNTRANSLATED] Finally, to get the assets into the game, you can copy the <code>content (managed)</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 (managed)</code> folder."
}

50
_lang/en.json Normal file
View File

@ -0,0 +1,50 @@
{
"about.title": "About OpenWF",
"about.0": "OpenWF is a software suite centered around customizing Warframe, including:",
"about.1": "<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.",
"about.2": "The <b>Bootstrapper</b> — our main DLL targeting the latest game version. Its core precept is connecting to custom servers, but 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 game.",
"about.cta": "Get Started",
"preservation.title": "Preserving Warframe",
"preservation.0": "A long-term goal of the project is to preserve Warframe after the official servers have shut down, and indeed being able to play any update.",
"preservation.1": "Our main focus right now is on staying up-to-date with the game, but there is a DLL + fork of SpaceNinjaServer that can be used to revisit 2013 Warframe. More information about this can be found <a href=\"https://discord.gg/PNNZ3asUuY\">on our Discord</a>, specifically <a href=\"https://discord.com/channels/1108159019635462206/1280628166825873510/1280628233355923497\">in this thread</a>.",
"tm_disclaimer": "Warframe is a registered trademark of Digital Extremes. Its use is for identification purposes only and does not imply any affiliation with or endorsement by Digital Extremes.",
"guides": "Guides",
"setup.title": "OpenWF Setup Guide",
"setup.c.title": "Client/Boostrapper",
"setup.c.simple": "To use OpenWF, you only need to download the |DLL| and put it in your game's installation folder (the one where Warframe.x64.exe is in).",
"setup.c.dblclk": "As long as this DLL is in the game folder, you can double-click Warframe.x64.exe to start the game with OpenWF.",
"setup.c.laurvt": "Opening the game's launcher will revert it back to normal.",
"setup.c.docshttp": "The DLL is <a href=\"bootstrapper-manual\" 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:61558/\" target=\"_blank\">http://localhost:61558/</a> to manage options, cheats, and scripts.",
"setup.c.next": "<b>Next steps:</b> By default, the DLL redirects requests to localhost — meaning the same machine you're playing on — so you'll either need to set up a server or change the server_host to point to a different machine that's already got a server running. You can use <a href=\"/server-list\">a public server</a> if you don't need to be able to play offline and have full control.",
"setup.s.prereq": "Server Prerequisites",
"download": "Download",
"setup.s.install": "Server Installation",
"setup.s.install.1": "Run <code>git clone https://openwf.io/SpaceNinjaServer.git</code> in a command prompt to download SpaceNinjaServer in the current working directory",
"setup.s.install.2": "Open the SpaceNinjaServer folder (<code>cd SpaceNinjaServer</code>)",
"setup.s.install.3": "Run <code>copy config.json.example config.json</code> to create a config.json from config.json.example",
"setup.s.install.4": "(Optional) Edit the config.json to match your MongoDB settings (if not default) and however else you would like to configure the server",
"setup.s.install.5": "(Optional) If you want stripped assets (~622 <abbr title=\"mebibytes (1 MiB = 1048576 bytes)\">MiB</abbr>) which the client will request from the server on-demand (most notably, <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>), run <code>git clone https://openwf.io/0.git</code> in the <code>static/data</code> folder",
"setup.s.install.6": "Run <code>npm i</code> (or <code>npm install</code>) to install library dependencies",
"setup.s.install.7": "Now, to start the server, run <code>npm run dev</code> (if this is too slow on your machine, you can use <code>npm run build</code> followed by <code>npm run start</code>)",
"setup.s.update": "Server Update",
"setup.s.update.wineasy": "Windows users can simply double-click the <code>UPDATE AND START SERVER.bat</code>, but otherwise the steps are pretty simple:",
"setup.s.update.1": "Run <code>git pull</code> in the SpaceNinjaServer folder",
"setup.s.update.2": "(Optional) If you have the stripped assets, run <code>git pull</code> in the <code>static/data/0</code> folder",
"setup.s.update.3": "Run <code>npm i</code> (or <code>npm install</code>) to synchronize library dependencies",
"setup.s.update.4": "Now to start the server again, run <code>npm run dev</code> (if this is too slow on your machine, you can use <code>npm run build</code> followed by <code>npm run start</code>)",
"setup.irc": "IRC Server",
"setup.irc.leadin": "In addition to SpaceNinjaServer, you can also set up an IRC server for the in-game chat:",
"setup.irc.wheel": "<a href=\"https://github.com/Sainan/warframe-irc-server/releases\" target=\"_blank\">warframe-irc-server</a> — an IRC server specifically made for Warframe. Talks to SpaceNinjaServer to give \"chat moderator\" permissions and report dropped connections.",
"setup.irc.inspircd": "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=\"/supplementals/IRC.zip\" download>here</a>.",
"arep.title": "Asset Replacements Guide | OpenWF",
"arep.desc": "This guide will go through the steps to modify a texture used by Warframe via the OpenWF Bootstrapper.",
"arep.what": "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.",
"arep.explore": "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>.",
"arep.1": "Clone <a href=\"https://github.com/Sainan/warframe-cache-tools\" target=\"_blank\">warframe-cache-tools</a>.",
"arep.2": "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.",
"arep.3": "Head inside of the <code>assets</code> folder until you find <code>PolarityPoint.png.dds</code>.",
"arep.4": "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.",
"arep.5": "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.",
"arep.6": "To build your assets, run <code>pluto build.pluto</code> within the warframe-cache-tools directory.",
"arep.7": "Finally, to get the assets into the game, you can copy the <code>content (managed)</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 (managed)</code> folder."
}

View File

@ -1,26 +1,27 @@
<?php require "_components/loc.php"; ?>
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<title>Asset Replacements Guide | OpenWF</title> <title><?=loc("arep.title");?></title>
<meta name="viewport" content="width=device-width, initial-scale=1"> <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"> <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> </head>
<body data-bs-theme="dark"> <body data-bs-theme="dark">
<?php require "_components/navbar.php"; ?> <?php require "_components/navbar.php"; ?>
<div class="container mt-3"> <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><?=loc("arep.desc");?></p>
<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/> <?=loc("arep.what");?><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>. <?=loc("arep.explore");?>
</p> </p>
<ol> <ol>
<li>Clone <a href="https://github.com/Sainan/warframe-cache-tools" target="_blank">warframe-cache-tools</a>.</li> <li><?=loc("arep.1");?></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><?=loc("arep.2");?></li>
<li>Head inside of the <code>assets</code> folder until you find <code>PolarityPoint.png.dds</code>.</li> <li><?=loc("arep.3");?></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><?=loc("arep.4");?></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><?=loc("arep.5");?></li>
<li>To build your assets, run <code>pluto build.pluto</code> within the warframe-cache-tools directory.</li> <li><?=loc("arep.6");?></li>
<li>Finally, to get the assets into the game, you can copy the <code>content (managed)</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 (managed)</code> folder.</li> <li><?=loc("arep.7");?></li>
</ol> </ol>
</div> </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://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>

View File

@ -1,56 +1,55 @@
<?php <?php
require "_components/loc.php";
$dll_version = @file_get_contents("supplementals/client drop-in/latest.txt"); $dll_version = @file_get_contents("supplementals/client drop-in/latest.txt");
$version = ""; //json_decode(file_get_contents("supplementals/static data/buildConfig.json"), true)["version"]; $version = ""; //json_decode(file_get_contents("supplementals/static data/buildConfig.json"), true)["version"];
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<title>OpenWF Setup Guide</title> <title><?=loc("setup.title");?></title>
<meta name="viewport" content="width=device-width, initial-scale=1"> <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"> <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> </head>
<body data-bs-theme="dark"> <body data-bs-theme="dark">
<?php require "_components/navbar.php"; ?> <?php require "_components/navbar.php"; ?>
<div class="container mt-3"> <div class="container mt-3">
<h2>Client/Boostrapper</h3> <h2><?=loc("setup.c.title");?></h3>
<p>To use OpenWF, you only need to download the <a href="/supplementals/client%20drop-in/<?=$dll_version;?>/dwmapi.dll" download>dwmapi.dll</a> and put it in your game's installation folder (the one where Warframe.x64.exe is in).</p> <p><?=str_replace("|DLL|", '<a href="/supplementals/client%20drop-in/'.$dll_version.'/dwmapi.dll" download>dwmapi.dll</a>', loc("setup.c.simple"));?></p>
<ul> <ul>
<li>As long as this DLL is in the game folder, you can double-click Warframe.x64.exe to start the game with OpenWF.</li> <li><?=loc("setup.c.dblclk");?></li>
<li>Opening the game's launcher will revert it back to normal.</li> <li><?=loc("setup.c.laurvt");?></li>
</ul> </ul>
<p>The DLL is <a href="bootstrapper-manual" 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:61558/" target="_blank">http://localhost:61558/</a> to manage options, cheats, and scripts.</p> <p><?=loc("setup.c.docshttp");?></p>
<p><b>Next steps:</b> By default, the DLL redirects requests to localhost meaning the same machine you're playing on — so you'll either need to set up a server or change the server_host to point to a different machine that's already got a server running. You can use <a href="/server-list">a public server</a> if you don't need to be able to play offline and have full control.</p> <p><?=loc("setup.c.next");?></p>
<h2>Server Prerequisites</h2> <h2><?=loc("setup.s.prereq");?></h2>
<ul> <ul>
<li>Git (<a href="https://git-scm.com/downloads" target="_blank">Download</a>)</li> <li>Git (<a href="https://git-scm.com/downloads" target="_blank"><?=loc("download");?></a>)</li>
<li>Node.js (<a href="https://nodejs.org/en/download" target="_blank">Download</a>)</li> <li>Node.js (<a href="https://nodejs.org/en/download" target="_blank"><?=loc("download");?></a></a>)</li>
<li>MongoDB (<a href="https://www.mongodb.com/try/download/community" target="_blank">Download</a>)</li> <li>MongoDB (<a href="https://www.mongodb.com/try/download/community" target="_blank"><?=loc("download");?></a></a>)</li>
</ul> </ul>
<h2>Server Installation</h2> <h2><?=loc("setup.s.install");?></h2>
<ol> <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><?=loc("setup.s.install.1");?></li>
<li>Open the SpaceNinjaServer folder (<code>cd SpaceNinjaServer</code>)</li> <li><?=loc("setup.s.install.2");?></li>
<li>Run <code>copy config.json.example config.json</code> to create a config.json from config.json.example</li> <li><?=loc("setup.s.install.3");?></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><?=loc("setup.s.install.4");?></li>
<!-- <li>Download <a href="/supplementals/static%20data/buildConfig.json" download>buildConfig.json</a> and <a href="/supplementals/static%20data/H.Cache_<?=$version;?>.bin" download>H.Cache_<?=$version;?>.bin</a> and put them in the server's <code>static/data</code> folder</li> --> <li><?=loc("setup.s.install.5");?></li>
<li>(Optional) If you want stripped assets (~622 <abbr title="mebibytes (1 MiB = 1048576 bytes)">MiB</abbr>) which the client will request from the server on-demand (most notably, <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>), run <code>git clone https://openwf.io/0.git</code> in the <code>static/data</code> folder</li> <li><?=loc("setup.s.install.6");?></li>
<li>Run <code>npm i</code> (or <code>npm install</code>) to install library dependencies</li> <li><?=loc("setup.s.install.7");?></li>
<li>Now, to start the server, run <code>npm run dev</code> (if this is too slow on your machine, you can use <code>npm run build</code> followed by <code>npm run start</code>)</li>
</ol> </ol>
<h2>Server Update</h2> <h2><?=loc("setup.s.update");?></h2>
<p>Windows users can simply double-click the <code>UPDATE AND START SERVER.bat</code>, but otherwise the steps are pretty simple:</p> <p><?=loc("setup.s.update.wineasy");?></p>
<ol> <ol>
<!-- <li>For game updates, ensure the <code>static/data</code> folder has the latest <a href="/supplementals/static%20data/buildConfig.json" download>buildConfig.json</a> and cache (<a href="/supplementals/static%20data/H.Cache_<?=$version;?>.bin" download>H.Cache_<?=$version;?>.bin</a>)</li> --> <li><?=loc("setup.s.update.1");?></li>
<li>Run <code>git pull</code> in the SpaceNinjaServer folder</li> <li><?=loc("setup.s.update.2");?></li>
<li>(Optional) If you have the stripped assets, run <code>git pull</code> in the <code>static/data/0</code> folder</li> <li><?=loc("setup.s.update.3");?></li>
<li>Run <code>npm i</code> (or <code>npm install</code>) to synchronize library dependencies</li> <li><?=loc("setup.s.update.4");?></li>
<li>Now to start the server again, run <code>npm run dev</code> (if this is too slow on your machine, you can use <code>npm run build</code> followed by <code>npm run start</code>)</li>
</ol> </ol>
<h2>IRC Server</h2> <h2><?=loc("setup.irc");?></h2>
<p>In addition to SpaceNinjaServer, you can also set up an IRC server for the in-game chat:</p> <p><?=loc("setup.irc.leadin");?></p>
<ul> <ul>
<li><a href="https://github.com/Sainan/warframe-irc-server/releases" target="_blank">warframe-irc-server</a> an IRC server specifically made for Warframe. Talks to SpaceNinjaServer to give "chat moderator" permissions and report dropped connections.</li> <li><?=loc("setup.irc.wheel");?></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="/supplementals/IRC.zip" download>here</a>.</li> <li><?=loc("setup.irc.inspircd");?></li>
</ul> </ul>
</div> </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://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>

View File

@ -1,26 +1,27 @@
<?php require "_components/loc.php"; ?>
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<title>About OpenWF</title> <title><?=loc("about.title");?></title>
<meta name="viewport" content="width=device-width, initial-scale=1"> <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"> <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> </head>
<body data-bs-theme="dark"> <body data-bs-theme="dark">
<?php require "_components/navbar.php"; ?> <?php require "_components/navbar.php"; ?>
<div class="container mt-3"> <div class="container mt-3">
<p>OpenWF is a software suite centered around customizing Warframe, including:</p> <p><?=loc("about.0");?></p>
<ul> <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><?=loc("about.1");?></li>
<li>The <b>Bootstrapper</b> our main DLL targeting the latest game version. Its core precept is connecting to custom servers, but 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 game.</li> <li><?=loc("about.2");?></li>
</ul> </ul>
<a href="/guide<?=$ext;?>" class="btn btn-primary">Get Started</a> <a href="/guide<?=$ext;?>" class="btn btn-primary"><?=loc("about.cta");?></a>
<h3 class="mt-3">Preserving Warframe</h3> <h3 class="mt-3"><?=loc("preservation.title");?></h3>
<p> <p>
A long-term goal of the project is to preserve Warframe after the official servers have shut down, and indeed being able to play any update.<br/> <?=loc("preservation.0");?><br/>
Our main focus right now is on staying up-to-date with the game, but there is a DLL + fork of SpaceNinjaServer that can be used to revisit 2013 Warframe. More information about this can be found <a href="https://discord.gg/PNNZ3asUuY">on our Discord</a>, specifically <a href="https://discord.com/channels/1108159019635462206/1280628166825873510/1280628233355923497">in this thread</a>. <?=loc("preservation.1");?>
</p> </p>
<hr> <hr>
<p>Warframe is a registered trademark of Digital Extremes. Its use is for identification purposes only and does not imply any affiliation with or endorsement by Digital Extremes.</p> <p><?=loc("tm_disclaimer");?></p>
</div> </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://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
</body> </body>