Compare commits
50 Commits
Author | SHA1 | Date |
---|---|---|
CakeLancelot | b5ab9aad2d | |
CakeLancelot | 01ee292d10 | |
CakeLancelot | 2183106c73 | |
Gent Semaj | db7370ca41 | |
CakeLancelot | ec0fc87dcd | |
CakeLancelot | cef8c1de93 | |
CakeLancelot | b73329c6de | |
CakeLancelot | 2e7dc51aa1 | |
CakeLancelot | 3fc6cabe33 | |
CakeLancelot | 71e4694ff6 | |
CakeLancelot | 76f4a05287 | |
CakeLancelot | 97144aad59 | |
CakeLancelot | 4a465ca689 | |
CakeLancelot | 43f0c8c684 | |
CakeLancelot | d4dc403e90 | |
CakeLancelot | ab5de9488d | |
CakeLancelot | dabb8bf484 | |
CakeLancelot | 043bf219e7 | |
CakeLancelot | 7131026b2f | |
dongresource | 7dd018e336 | |
CakeLancelot | e19098a13e | |
CakeLancelot | 48e2052748 | |
CakeLancelot | 7b3de1fe52 | |
CakeLancelot | 675a5fce50 | |
CakeLancelot | 2bf916ea58 | |
CakeLancelot | d554b6b968 | |
CakeLancelot | 5da0da1981 | |
CakeLancelot | 101de9d68b | |
CakeLancelot | d0f947c4a5 | |
CakeLancelot | 4726a50be7 | |
CakeLancelot | 3d9107a7f1 | |
CakeLancelot | c1db7bc047 | |
CakeLancelot | 51f7eaf33d | |
CakeLancelot | 7bc438d76a | |
CakeLancelot | 3c0b07e61a | |
Hichem Fantar | f9c041edc9 | |
Hichem Fantar | fd92f2de5e | |
Hichem Fantar | 51a876cf2b | |
CakeLancelot | 2640c8f1a6 | |
Hichem Fantar | e2b704a701 | |
Hichem Fantar | 9a083d7a04 | |
Hichem Fantar | c964e840e4 | |
dongresource | 0060f37e6c | |
dongresource | 9bfe3d6d99 | |
dongresource | 63c4616645 | |
CakeLancelot | 645e5d4279 | |
gsemaj | 7ce21cdddc | |
gsemaj | 8d6e546628 | |
gsemaj | 6e881cbfaf | |
gsemaj | 8d5a8df023 |
|
@ -0,0 +1,19 @@
|
|||
# top-most EditorConfig file
|
||||
root = true
|
||||
|
||||
# Unix-style newlines with a newline ending every file
|
||||
[*]
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
|
||||
# 4 space indentation
|
||||
[*.js, *.css, *.html, *.json]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
|
||||
# Don't enforce anything in vendored code
|
||||
[*.min.*]
|
||||
end_of_line = unset
|
||||
insert_final_newline = unset
|
||||
indent_style = unset
|
||||
indent_style = unset
|
|
@ -0,0 +1,47 @@
|
|||
name: Publish Build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "main" ]
|
||||
tags: '*'
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: windows-2022
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Set up Node.js 20.x
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20.x
|
||||
cache: 'npm'
|
||||
- name: Install dependencies
|
||||
run: npm install
|
||||
- name: Pack into zip and create installer
|
||||
run: npm run dist
|
||||
- name: Upload Artifacts
|
||||
uses: actions/upload-artifact@master
|
||||
with:
|
||||
path: dist
|
||||
|
||||
publish-release:
|
||||
if: contains(github.ref, 'refs/tags/')
|
||||
runs-on: ubuntu-latest
|
||||
needs: build
|
||||
|
||||
steps:
|
||||
- name: Download artifact
|
||||
uses: actions/download-artifact@master
|
||||
- name: Create release
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
artifacts: "artifact/*-ia32-win.zip,artifact/*.exe"
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
@ -0,0 +1,33 @@
|
|||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||
|
||||
# dependencies
|
||||
/node_modules
|
||||
/.pnp
|
||||
.pnp.js
|
||||
|
||||
# production
|
||||
/build
|
||||
|
||||
# misc
|
||||
.DS_Store
|
||||
.env.local
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
locales/
|
||||
*.pak
|
||||
*.bin
|
||||
*.php
|
||||
rankurl.txt
|
||||
icudtl.dat
|
||||
version
|
||||
resources/app/files/rankurl.txt
|
||||
node_modules/
|
||||
dist/
|
||||
UnityBugReporter.exe
|
||||
*.min.*
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"trailingComma": "es5",
|
||||
"useTabs": false,
|
||||
"tabWidth": 4,
|
||||
"singleQuote": false,
|
||||
"semi": true,
|
||||
"bracketSameLine": false,
|
||||
"bracketSpacing": true,
|
||||
"jsxSingleQuote": false,
|
||||
"quoteProps": "as-needed",
|
||||
"endOfLine": "lf"
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
// See https://go.microsoft.com/fwlink/?LinkId=827846 to learn about workspace recommendations.
|
||||
// Extension identifier format: ${publisher}.${name}. Example: vscode.csharp
|
||||
|
||||
// List of extensions which should be recommended for users of this workspace.
|
||||
"recommendations": ["esbenp.prettier-vscode"],
|
||||
// List of extensions recommended by VS Code that should not be recommended for users of this workspace.
|
||||
"unwantedRecommendations": []
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2020-2024 OpenFusion Contributors
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
52
README.md
|
@ -1,2 +1,52 @@
|
|||
# OpenFusionClient
|
||||
Electron app for joining OpenFusion servers
|
||||
|
||||
[![Current Release](https://img.shields.io/github/v/release/OpenFusionProject/OpenFusionClient?include_prereleases)](https://github.com/OpenFusionProject/OpenFusionClient/releases/latest) [![Discord](https://img.shields.io/badge/chat-on%20discord-7289da.svg?logo=discord)](https://discord.gg/DYavckB)[![License](https://img.shields.io/github/license/OpenFusionProject/OpenFusionClient)](https://github.com/OpenFusionProject/OpenFusionClient/blob/master/LICENSE.md)
|
||||
|
||||
An Electron app that allows you to easily join FusionFall servers.
|
||||
|
||||
It automatically installs FF's custom build of Unity Web Player, manages text files such as `assetInfo.php`/`loginInfo.php`, and embeds the game, all in a few clicks!
|
||||
|
||||
For an overview of how the game client worked originally, please see [this section in the OpenFusion README](https://github.com/OpenFusionProject/OpenFusion#architecture).
|
||||
|
||||
## Disclaimer
|
||||
|
||||
This repository does not contain any code from the actual FusionFall game client. **Think of it more as a launcher:** it abstracts away having to use a NPAPI plugin capable web browser, along with having to host a HTTP server for it to connect to.
|
||||
|
||||
In addition, if you are interested in contributing: do note that **this project likely cannot utilize more modern Javascript techniques**. In order to use NPAPI plugins, a very old version of Electron was needed (0.31.0). This limits the project to only a portion of ES5 in non-strict mode, and a reduced subset of Node/Electron APIs.
|
||||
|
||||
## Usage
|
||||
|
||||
Provided that you have npm installed, clone the repository, then run install like so:
|
||||
|
||||
```
|
||||
git clone https://github.com/OpenFusionProject/OpenFusionClient.git
|
||||
npm install
|
||||
```
|
||||
|
||||
After that has completed you can then test OpenFusionClient:
|
||||
|
||||
```
|
||||
npm run start
|
||||
```
|
||||
|
||||
If you would like to package it as a standalone win32 application:
|
||||
|
||||
```
|
||||
npm run pack
|
||||
```
|
||||
|
||||
You can then compress the application directory into a zip file and installer for distribution:
|
||||
|
||||
```
|
||||
npm run dist
|
||||
```
|
||||
|
||||
Before opening a PR or running pack/dist, please do a code formatting pass:
|
||||
|
||||
```
|
||||
npm run prettier
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
MIT unless specified otherwise
|
||||
|
|
|
@ -47,31 +47,36 @@ img {
|
|||
}
|
||||
|
||||
body {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
clear: both;
|
||||
user-select: none;
|
||||
background-color: #000;
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
|
||||
'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji',
|
||||
'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
|
||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
|
||||
"Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji",
|
||||
"Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
||||
}
|
||||
|
||||
#of-versionnumber {
|
||||
#of-versionnumberdiv {
|
||||
position: fixed;
|
||||
bottom: 4px;
|
||||
right: 8px;
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
background-image: url('../../assets/img/btn-primary-bg.png');
|
||||
background-image: url("../../assets/img/btn-primary-bg.png");
|
||||
background-repeat: repeat;
|
||||
}
|
||||
|
||||
.btn-success {
|
||||
background-image: url('../../assets/img/btn-success-bg.png');
|
||||
background-image: url("../../assets/img/btn-success-bg.png");
|
||||
background-repeat: repeat;
|
||||
}
|
||||
|
||||
.btn-danger {
|
||||
background-image: url('../../assets/img/btn-danger-bg.png');
|
||||
background-image: url("../../assets/img/btn-danger-bg.png");
|
||||
background-repeat: repeat;
|
||||
}
|
||||
|
||||
|
@ -129,3 +134,12 @@ button > i {
|
|||
#server-table .server-listing-entry {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#client {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background: #000;
|
||||
clear: both;
|
||||
}
|
||||
|
|
Before Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 9.6 KiB After Width: | Height: | Size: 9.6 KiB |
Before Width: | Height: | Size: 176 B After Width: | Height: | Size: 176 B |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
|
@ -1,3 +1,3 @@
|
|||
$(document).ready(function(){
|
||||
$('[data-bs-tooltip]').tooltip();
|
||||
});
|
||||
$(document).ready(function () {
|
||||
$("[data-bs-tooltip]").tooltip();
|
||||
});
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
// You're kind of ruining the surprise by reading this, but whatever
|
||||
var today = new Date();
|
||||
|
||||
var christmasBegin = new Date(today.getFullYear(), 11, 21);
|
||||
var christmasEnd = new Date(today.getFullYear(), 11, 31);
|
||||
var sf;
|
||||
|
||||
if (today >= christmasBegin && today <= christmasEnd) {
|
||||
console.log("Christmas Activated.");
|
||||
sf = new Snowflakes({ zIndex: -100 });
|
||||
}
|
||||
|
||||
function stopEasterEggs() {
|
||||
if (sf != null) {
|
||||
sf.destroy();
|
||||
}
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
// You're kind of ruining the surprise by reading this, but whatever
|
||||
var today = new Date();
|
||||
|
||||
// Check Christmas season: Date constructor in Javascript uses an index
|
||||
// so 11 is Dec. of this year, and 12 is Jan. of the next
|
||||
var christmasBegin = new Date(today.getFullYear(), 11, 23);
|
||||
var christmasEnd = new Date(today.getFullYear(), 12, 8);
|
||||
var sf
|
||||
|
||||
if((today >= christmasBegin && today <= christmasEnd)) {
|
||||
console.log("Christmas Activated.");
|
||||
sf = new Snowflakes({zIndex: -100});
|
||||
}
|
||||
|
||||
function stopEasterEggs(){
|
||||
if (sf != null) {
|
||||
sf.destroy();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,89 @@
|
|||
var ipc = require("ipc");
|
||||
var gameRunning = false;
|
||||
|
||||
// Unity invoked methods begin //
|
||||
|
||||
// Uncomment and enter credentials to skip login screen
|
||||
function authDoCallback(param) {
|
||||
/*var unity = document.getElementById('unityEmbed');
|
||||
unity.SendMessage("GlobalManager", "SetTEGid", "player");
|
||||
unity.SendMessage("GlobalManager", "SetAuthid", "0");
|
||||
unity.SendMessage("GlobalManager", "DoAuth", 0);*/
|
||||
}
|
||||
|
||||
function MarkProgress(param) {}
|
||||
|
||||
function redirect(html) {
|
||||
ipc.send("exit", 0);
|
||||
}
|
||||
function HomePage(param) {
|
||||
ipc.send("exit", 0);
|
||||
}
|
||||
function PageOut(param) {
|
||||
ipc.send("exit", 0);
|
||||
}
|
||||
function updateSocialOptions(param) {
|
||||
ipc.send("exit", 0);
|
||||
}
|
||||
function PayPage(param) {
|
||||
ipc.send("exit", 0);
|
||||
}
|
||||
|
||||
// Unity invoked methods end //
|
||||
|
||||
function onResize() {
|
||||
if (gameRunning == true) {
|
||||
var unity = document.getElementById("unityEmbed");
|
||||
unity.style.width = window.innerWidth + "px";
|
||||
unity.style.height = window.innerHeight + "px";
|
||||
}
|
||||
}
|
||||
|
||||
function launchGame() {
|
||||
gameRunning = true;
|
||||
|
||||
var sel = document.getElementById("of-serverselector");
|
||||
sel.remove();
|
||||
|
||||
document.body.style.overflow = "hidden";
|
||||
|
||||
var object = document.createElement("object");
|
||||
object.setAttribute(
|
||||
"classid",
|
||||
"clsid:444785F1-DE89-4295-863A-D46C3A781394"
|
||||
);
|
||||
object.setAttribute(
|
||||
"codebase",
|
||||
"undefined/UnityWebPlayer.cab#version=2,0,0,0"
|
||||
);
|
||||
object.setAttribute("id", "unityObject");
|
||||
object.setAttribute("width", "1264");
|
||||
object.setAttribute("height", "661");
|
||||
|
||||
var embed = document.createElement("embed");
|
||||
embed.setAttribute("type", "application/vnd.ffuwp");
|
||||
embed.setAttribute(
|
||||
"pluginspage",
|
||||
"http://www.unity3d.com/unity-web-player-2.x"
|
||||
);
|
||||
embed.setAttribute("id", "unityEmbed");
|
||||
embed.setAttribute("width", "1280");
|
||||
embed.setAttribute("height", "680");
|
||||
embed.setAttribute("src", window.assetUrl + "main.unity3d");
|
||||
embed.setAttribute("bordercolor", "000000");
|
||||
embed.setAttribute("backgroundcolor", "000000");
|
||||
embed.setAttribute("disableContextMenu", true);
|
||||
embed.setAttribute("textcolor", "ccffff");
|
||||
embed.setAttribute("logoimage", "assets/img/unity-dexlabs.png");
|
||||
embed.setAttribute("progressbarimage", "assets/img/unity-loadingbar.png");
|
||||
embed.setAttribute(
|
||||
"progressframeimage",
|
||||
"assets/img/unity-loadingframe.png"
|
||||
);
|
||||
|
||||
var div = document.getElementById("client");
|
||||
object.appendChild(embed);
|
||||
div.appendChild(object);
|
||||
document.title = "OpenFusion";
|
||||
onResize();
|
||||
}
|
|
@ -1,80 +0,0 @@
|
|||
var ipc = require("ipc");
|
||||
var gameRunning = false;
|
||||
|
||||
// Unity invoked methods begin //
|
||||
|
||||
// Uncomment and enter credentials to skip login screen
|
||||
function authDoCallback(param) {
|
||||
/*var unity = document.getElementById('Unity_embed');
|
||||
unity.SendMessage("GlobalManager", "SetTEGid", "player");
|
||||
unity.SendMessage("GlobalManager", "SetAuthid", "0");
|
||||
unity.SendMessage("GlobalManager", "DoAuth", 0);*/
|
||||
}
|
||||
|
||||
function MarkProgress(param) {}
|
||||
|
||||
function redirect(html) {
|
||||
ipc.send("exit", 0);
|
||||
}
|
||||
function HomePage(param) {
|
||||
ipc.send("exit", 0);
|
||||
}
|
||||
function PageOut(param) {
|
||||
ipc.send("exit", 0);
|
||||
}
|
||||
function updateSocialOptions(param) {
|
||||
ipc.send("exit", 0);
|
||||
}
|
||||
function PayPage(param) {
|
||||
ipc.send("exit", 0);
|
||||
}
|
||||
|
||||
// Unity invoked methods end //
|
||||
|
||||
function onResize() {
|
||||
if (gameRunning == true) {
|
||||
var unity = document.getElementById('Unity_embed');
|
||||
unity.style.width = window.innerWidth + 'px';
|
||||
unity.style.height = window.innerHeight + 'px';
|
||||
}
|
||||
}
|
||||
|
||||
function launchGame() {
|
||||
gameRunning = true
|
||||
|
||||
var sel = document.getElementById("of-serverselector");
|
||||
sel.remove()
|
||||
|
||||
document.body.style.overflow = "hidden";
|
||||
|
||||
var object = document.createElement('object');
|
||||
object.setAttribute('classid', "clsid:444785F1-DE89-4295-863A-D46C3A781394");
|
||||
object.setAttribute('codebase', "undefined/UnityWebPlayer.cab#version=2,0,0,0");
|
||||
object.setAttribute('id', "Unity_object");
|
||||
object.setAttribute('width', "1264");
|
||||
object.setAttribute('height', "661");
|
||||
|
||||
var embed = document.createElement('embed');
|
||||
embed.setAttribute('type', "application/vnd.unity");
|
||||
embed.setAttribute('pluginspage', "http://www.unity3d.com/unity-web-player-2.x");
|
||||
embed.setAttribute('id', "Unity_embed");
|
||||
embed.setAttribute('width', "1280");
|
||||
embed.setAttribute('height', "680");
|
||||
embed.setAttribute('src', window.asseturl+"main.unity3d");
|
||||
embed.setAttribute('disablecontdparaextmenu', "true");
|
||||
embed.setAttribute('bordercolor', "000000");
|
||||
embed.setAttribute('backgroundcolor', "000000");
|
||||
embed.setAttribute('disableContextMenu', true);
|
||||
embed.setAttribute('textcolor', "ccffff");
|
||||
embed.setAttribute('logoimage', "assets/img/unity_dexlabs.png");
|
||||
embed.setAttribute('progressbarimage', "assets/img/unity_loadingbar.png");
|
||||
embed.setAttribute('progressframeimage', "assets/img/unity_loadingframe.png");
|
||||
embed.setAttribute('autoupdateurlsignature', "42180ee5edc4e3d4dd706bcc17cedd8d6ec7b7ac463071fd34ab97fe181f1a78df31db5feb4526677e4f69ef53acaff44471591e68b87f041c80fd54765f0d5725b08aa28f5acf7716ffb2a04e971269f35925c7e38d57dd78f6a206530caaa3da7e32f07f19810efc0ebf29a4eae976a925ad9cc5beb4dd51564c67dc489033");
|
||||
embed.setAttribute('autoupdateurl', "http://wp-cartoonnetwork.unity3d.com/ff/big/beta-20111013/autodownload_webplugin_beta");
|
||||
|
||||
var div = document.getElementById('client');
|
||||
object.appendChild(embed);
|
||||
div.appendChild(object);
|
||||
document.title = "OpenFusion"
|
||||
onResize();
|
||||
}
|
|
@ -0,0 +1,360 @@
|
|||
var remote = require("remote");
|
||||
var remotefs = remote.require("fs-extra");
|
||||
var dns = remote.require("dns");
|
||||
var path = remote.require("path");
|
||||
|
||||
var userData = remote.require("app").getPath("userData");
|
||||
var configPath = path.join(userData, "config.json");
|
||||
var serversPath = path.join(userData, "servers.json");
|
||||
var versionsPath = path.join(userData, "versions.json");
|
||||
|
||||
var versionArray;
|
||||
var serverArray;
|
||||
var config;
|
||||
|
||||
function enableServerListButtons() {
|
||||
$("#of-connect-button").removeClass("disabled");
|
||||
$("#of-connect-button").prop("disabled", false);
|
||||
$("#of-editserver-button").removeClass("disabled");
|
||||
$("#of-editserver-button").prop("disabled", false);
|
||||
$("#of-deleteserver-button").removeClass("disabled");
|
||||
$("#of-deleteserver-button").prop("disabled", false);
|
||||
}
|
||||
|
||||
function disableServerListButtons() {
|
||||
$("#of-connect-button").addClass("disabled");
|
||||
$("#of-connect-button").prop("disabled", true);
|
||||
$("#of-editserver-button").addClass("disabled");
|
||||
$("#of-editserver-button").prop("disabled", true);
|
||||
$("#of-deleteserver-button").addClass("disabled");
|
||||
$("#of-deleteserver-button").prop("disabled", true);
|
||||
}
|
||||
|
||||
function getAppVersion() {
|
||||
appVersion = remote.require("app").getVersion();
|
||||
|
||||
// Simplify version, ex. 1.4.0 -> 1.4,
|
||||
// but only if a revision number isn't present
|
||||
if (appVersion.endsWith(".0")) {
|
||||
return appVersion.substr(0, appVersion.length - 2);
|
||||
} else {
|
||||
return appVersion;
|
||||
}
|
||||
}
|
||||
|
||||
function setAppVersionText() {
|
||||
$("#of-aboutversionnumber").text("Version " + getAppVersion());
|
||||
$("#of-versionnumber").text("v" + getAppVersion());
|
||||
}
|
||||
|
||||
function addServer() {
|
||||
var jsonToModify = JSON.parse(remotefs.readFileSync(serversPath));
|
||||
|
||||
var server = {};
|
||||
server["uuid"] = uuidv4();
|
||||
server["description"] =
|
||||
$("#addserver-descinput").val().length == 0
|
||||
? "My OpenFusion Server"
|
||||
: $("#addserver-descinput").val();
|
||||
server["ip"] =
|
||||
$("#addserver-ipinput").val().length == 0
|
||||
? "127.0.0.1:23000"
|
||||
: $("#addserver-ipinput").val();
|
||||
server["version"] = $("#addserver-versionselect option:selected").text();
|
||||
//server['endpoint'] =
|
||||
|
||||
jsonToModify["servers"].push(server);
|
||||
|
||||
remotefs.writeFileSync(serversPath, JSON.stringify(jsonToModify, null, 4));
|
||||
loadServerList();
|
||||
}
|
||||
|
||||
function editServer() {
|
||||
var jsonToModify = JSON.parse(remotefs.readFileSync(serversPath));
|
||||
$.each(jsonToModify["servers"], function (key, value) {
|
||||
if (value["uuid"] == getSelectedServer()) {
|
||||
value["description"] =
|
||||
$("#editserver-descinput").val().length == 0
|
||||
? value["description"]
|
||||
: $("#editserver-descinput").val();
|
||||
value["ip"] =
|
||||
$("#editserver-ipinput").val().length == 0
|
||||
? value["ip"]
|
||||
: $("#editserver-ipinput").val();
|
||||
value["version"] = $(
|
||||
"#editserver-versionselect option:selected"
|
||||
).text();
|
||||
}
|
||||
});
|
||||
|
||||
remotefs.writeFileSync(serversPath, JSON.stringify(jsonToModify, null, 4));
|
||||
loadServerList();
|
||||
}
|
||||
|
||||
function deleteServer() {
|
||||
var jsonToModify = JSON.parse(remotefs.readFileSync(serversPath));
|
||||
var result = jsonToModify["servers"].filter(function (obj) {
|
||||
return obj.uuid === getSelectedServer();
|
||||
})[0];
|
||||
|
||||
var resultindex = jsonToModify["servers"].indexOf(result);
|
||||
|
||||
jsonToModify["servers"].splice(resultindex, 1);
|
||||
|
||||
remotefs.writeFileSync(serversPath, JSON.stringify(jsonToModify, null, 4));
|
||||
loadServerList();
|
||||
}
|
||||
|
||||
function restoreDefaultServers() {
|
||||
remotefs.copySync(
|
||||
path.join(__dirname, "/defaults/servers.json"),
|
||||
serversPath
|
||||
);
|
||||
loadServerList();
|
||||
}
|
||||
|
||||
function loadGameVersions() {
|
||||
var versionJson = remotefs.readJsonSync(versionsPath);
|
||||
versionArray = versionJson["versions"];
|
||||
$.each(versionArray, function (key, value) {
|
||||
$(new Option(value.name, "val")).appendTo("#addserver-versionselect");
|
||||
$(new Option(value.name, "val")).appendTo("#editserver-versionselect");
|
||||
});
|
||||
}
|
||||
|
||||
function loadConfig() {
|
||||
// Load config object globally
|
||||
config = remotefs.readJsonSync(configPath);
|
||||
}
|
||||
|
||||
function loadServerList() {
|
||||
var serverJson = remotefs.readJsonSync(serversPath);
|
||||
serverArray = serverJson["servers"];
|
||||
|
||||
$(".server-listing-entry").remove(); // Clear out old stuff, if any
|
||||
disableServerListButtons(); // Disable buttons until another server is selected
|
||||
|
||||
if (serverArray.length > 0) {
|
||||
// Servers were found in the JSON
|
||||
$("#server-listing-placeholder").attr("hidden", true);
|
||||
$.each(serverArray, function (key, value) {
|
||||
// Create the row, and populate the cells
|
||||
var row = document.createElement("tr");
|
||||
row.className = "server-listing-entry";
|
||||
row.setAttribute("id", value.uuid);
|
||||
var cellName = document.createElement("td");
|
||||
cellName.textContent = value.description;
|
||||
var cellVersion = document.createElement("td");
|
||||
cellVersion.textContent = value.version;
|
||||
cellVersion.className = "text-monospace";
|
||||
|
||||
row.appendChild(cellName);
|
||||
row.appendChild(cellVersion);
|
||||
$("#server-tablebody").append(row);
|
||||
});
|
||||
} else {
|
||||
// No servers are added, make sure placeholder is visible
|
||||
$("#server-listing-placeholder").attr("hidden", false);
|
||||
}
|
||||
}
|
||||
|
||||
function performCacheSwap(newVersion) {
|
||||
var cacheRoot = path.join(
|
||||
userData,
|
||||
"/../../LocalLow/Unity/Web Player/Cache"
|
||||
);
|
||||
var currentCache = path.join(cacheRoot, "FusionFall");
|
||||
var newCache = path.join(cacheRoot, newVersion);
|
||||
var record = path.join(userData, ".lastver");
|
||||
|
||||
// If cache renaming would result in a no-op (ex. launching the same version
|
||||
// two times), then skip it. This avoids permissions errors with multiple clients
|
||||
// (file/folder is already open in another process)
|
||||
var skip = false;
|
||||
|
||||
if (remotefs.existsSync(currentCache)) {
|
||||
// Cache already exists, find out what version it belongs to
|
||||
if (remotefs.existsSync(record)) {
|
||||
var lastVersion = remotefs.readFileSync(record, (encoding = "utf8"));
|
||||
if (lastVersion != newVersion) {
|
||||
// Remove the directory we're trying to store the
|
||||
// existing cache to if it already exists for whatever
|
||||
// reason, as it would cause an EPERM error otherwise.
|
||||
// This is a no-op if the directory doesn't exist
|
||||
remotefs.removeSync(path.join(cacheRoot, lastVersion));
|
||||
// Store old cache to named directory
|
||||
remotefs.renameSync(
|
||||
currentCache,
|
||||
path.join(cacheRoot, lastVersion)
|
||||
);
|
||||
} else {
|
||||
console.log("Cached version unchanged, skipping rename");
|
||||
skip = true;
|
||||
}
|
||||
console.log("Current cache is " + lastVersion);
|
||||
}
|
||||
}
|
||||
|
||||
// Make note of what version we are launching for next launch
|
||||
remotefs.writeFileSync(record, newVersion);
|
||||
|
||||
if (remotefs.existsSync(newCache) && !skip) {
|
||||
// Rename saved cache to FusionFall
|
||||
remotefs.renameSync(newCache, currentCache);
|
||||
console.log("Current cache swapped to " + newVersion);
|
||||
}
|
||||
}
|
||||
|
||||
// For writing loginInfo.php, assetInfo.php, etc.
|
||||
function setGameInfo(serverUUID) {
|
||||
var result = serverArray.filter(function (obj) {
|
||||
return obj.uuid === serverUUID;
|
||||
})[0];
|
||||
var gameVersion = versionArray.filter(function (obj) {
|
||||
return obj.name === result.version;
|
||||
})[0];
|
||||
|
||||
// If cache swapping property exists AND is `true`, run cache swapping logic
|
||||
if (config["cache-swapping"]) {
|
||||
try {
|
||||
performCacheSwap(gameVersion.name);
|
||||
} catch (ex) {
|
||||
console.log(
|
||||
"Error when swapping cache, it may get overwritten:\n" + ex
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
window.assetUrl = gameVersion.url; // game-client.js needs to access this
|
||||
|
||||
remotefs.writeFileSync(path.join(__dirname, "assetInfo.php"), assetUrl);
|
||||
if (result.hasOwnProperty("endpoint")) {
|
||||
var httpEndpoint = result.endpoint.replace("https://", "http://");
|
||||
remotefs.writeFileSync(
|
||||
path.join(__dirname, "rankurl.txt"),
|
||||
httpEndpoint + "getranks"
|
||||
);
|
||||
// Write these out too
|
||||
remotefs.writeFileSync(
|
||||
path.join(__dirname, "sponsor.php"),
|
||||
httpEndpoint + "upsell/sponsor.png"
|
||||
);
|
||||
remotefs.writeFileSync(
|
||||
path.join(__dirname, "images.php"),
|
||||
httpEndpoint + "upsell/"
|
||||
);
|
||||
} else {
|
||||
// Remove/default the endpoint related stuff, this server won't be using it
|
||||
if (remotefs.existsSync(path.join(__dirname, "rankurl.txt"))) {
|
||||
remotefs.unlinkSync(path.join(__dirname, "rankurl.txt"));
|
||||
remotefs.writeFileSync(
|
||||
path.join(__dirname, "sponsor.php"),
|
||||
"assets/img/welcome.png"
|
||||
);
|
||||
remotefs.writeFileSync(
|
||||
path.join(__dirname, "images.php"),
|
||||
"assets/img/"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Server address parsing
|
||||
var address;
|
||||
var port;
|
||||
var sepPos = result.ip.indexOf(":");
|
||||
if (sepPos > -1) {
|
||||
address = result.ip.substr(0, sepPos);
|
||||
port = result.ip.substr(sepPos + 1);
|
||||
} else {
|
||||
address = result.ip;
|
||||
port = 23000; // default
|
||||
}
|
||||
|
||||
// DNS resolution. there is no synchronous version for some stupid reason
|
||||
if (!address.match(/^[0-9.]+$/))
|
||||
dns.lookup(address, (family = 4), function (err, resolvedAddress) {
|
||||
if (!err) {
|
||||
console.log("Resolved " + address + " to " + resolvedAddress);
|
||||
address = resolvedAddress;
|
||||
} else {
|
||||
console.log("Err: " + err.code);
|
||||
}
|
||||
prepConnection(address, port);
|
||||
});
|
||||
else {
|
||||
console.log(address + " is an IP; skipping DNS lookup");
|
||||
prepConnection(address, port);
|
||||
}
|
||||
}
|
||||
|
||||
function prepConnection(address, port) {
|
||||
var full = address + ":" + port;
|
||||
console.log("Will connect to " + full);
|
||||
remotefs.writeFileSync(path.join(__dirname, "loginInfo.php"), full);
|
||||
launchGame();
|
||||
}
|
||||
|
||||
// Returns the UUID of the server with the selected background color.
|
||||
// Yes, there are probably better ways to go about this, but it works well enough.
|
||||
function getSelectedServer() {
|
||||
return $("#server-tablebody > tr.bg-primary").prop("id");
|
||||
}
|
||||
|
||||
function connectToServer() {
|
||||
// Get ID of the selected server, which corresponds to its UUID in the json
|
||||
console.log("Connecting to server with UUID of " + getSelectedServer());
|
||||
|
||||
// Prevent the user from clicking anywhere else during the transition
|
||||
$("body,html").css("pointer-events", "none");
|
||||
stopEasterEggs();
|
||||
$("#of-serverselector").fadeOut("slow", function () {
|
||||
setTimeout(function () {
|
||||
$("body,html").css("pointer-events", "");
|
||||
setGameInfo(getSelectedServer());
|
||||
}, 200);
|
||||
});
|
||||
}
|
||||
|
||||
// If applicable, deselect currently selected server.
|
||||
function deselectServer() {
|
||||
disableServerListButtons();
|
||||
$(".server-listing-entry").removeClass("bg-primary");
|
||||
}
|
||||
|
||||
$("#server-table").on("click", ".server-listing-entry", function (event) {
|
||||
enableServerListButtons();
|
||||
$(this).addClass("bg-primary").siblings().removeClass("bg-primary");
|
||||
});
|
||||
|
||||
// QoL feature: if you double click on a server it will connect
|
||||
$("#server-table").on("dblclick", ".server-listing-entry", function (event) {
|
||||
$(this).addClass("bg-primary").siblings().removeClass("bg-primary");
|
||||
connectToServer();
|
||||
});
|
||||
|
||||
$("#of-editservermodal").on("show.bs.modal", function (e) {
|
||||
var jsonToModify = remotefs.readJsonSync(
|
||||
path.join(userData, "servers.json")
|
||||
);
|
||||
$.each(jsonToModify["servers"], function (key, value) {
|
||||
if (value["uuid"] == getSelectedServer()) {
|
||||
$("#editserver-descinput")[0].value = value["description"];
|
||||
$("#editserver-ipinput")[0].value = value["ip"];
|
||||
|
||||
var versionIndex = -1;
|
||||
$.each($("#editserver-versionselect")[0], function (key, val) {
|
||||
if (val.text === value["version"]) {
|
||||
versionIndex = key;
|
||||
}
|
||||
});
|
||||
$("#editserver-versionselect")[0].selectedIndex = versionIndex;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$("#of-deleteservermodal").on("show.bs.modal", function (e) {
|
||||
var result = serverArray.filter(function (obj) {
|
||||
return obj.uuid === getSelectedServer();
|
||||
})[0];
|
||||
$("#deleteserver-servername").html(result.description);
|
||||
});
|
|
@ -1,237 +0,0 @@
|
|||
var remote = require("remote");
|
||||
var remotefs = remote.require('fs-extra');
|
||||
|
||||
var userdir = remote.require('app').getPath('userData');
|
||||
var versionarray
|
||||
var serverarray
|
||||
var config
|
||||
|
||||
function enableServerListButtons() {
|
||||
$('#of-connect-button').removeClass('disabled');
|
||||
$('#of-connect-button').prop('disabled', false);
|
||||
$('#of-editserver-button').removeClass('disabled');
|
||||
$('#of-editserver-button').prop('disabled', false);
|
||||
$('#of-deleteserver-button').removeClass('disabled');
|
||||
$('#of-deleteserver-button').prop('disabled', false);
|
||||
}
|
||||
|
||||
function disableServerListButtons() {
|
||||
$('#of-connect-button').addClass('disabled');
|
||||
$('#of-connect-button').prop('disabled', true);
|
||||
$('#of-editserver-button').addClass('disabled');
|
||||
$('#of-editserver-button').prop('disabled', true);
|
||||
$('#of-deleteserver-button').addClass('disabled');
|
||||
$('#of-deleteserver-button').prop('disabled', true);
|
||||
}
|
||||
|
||||
function addServer() {
|
||||
var jsontomodify = JSON.parse(remotefs.readFileSync(userdir+"\\servers.json"));
|
||||
|
||||
var server = {};
|
||||
server['uuid'] = uuidv4();
|
||||
server['description'] = $("#addserver-descinput").val().length == 0 ? "My OpenFusion Server" : $("#addserver-descinput").val();
|
||||
server['ip'] = $("#addserver-ipinput").val().length == 0 ? "127.0.0.1:23000" : $("#addserver-ipinput").val();
|
||||
server['version'] = $("#addserver-versionselect option:selected").text();
|
||||
//server['endpoint'] =
|
||||
|
||||
jsontomodify['servers'].push(server)
|
||||
|
||||
remotefs.writeFileSync(userdir+"\\servers.json", JSON.stringify(jsontomodify, null, 4));
|
||||
loadServerList();
|
||||
}
|
||||
|
||||
function editServer() {
|
||||
var jsontomodify = JSON.parse(remotefs.readFileSync(userdir+"\\servers.json"));
|
||||
$.each(jsontomodify["servers"], function( key, value ) {
|
||||
if(value["uuid"] == getSelectedServer()) {
|
||||
value['description'] = $("#editserver-descinput").val().length == 0 ? value['description'] : $("#editserver-descinput").val();
|
||||
value['ip'] = $("#editserver-ipinput").val().length == 0 ? value['ip'] : $("#editserver-ipinput").val();
|
||||
value['version'] = $("#editserver-versionselect option:selected").text();
|
||||
}
|
||||
});
|
||||
|
||||
remotefs.writeFileSync(userdir+"\\servers.json", JSON.stringify(jsontomodify, null, 4));
|
||||
loadServerList();
|
||||
}
|
||||
|
||||
function deleteServer() {
|
||||
var jsontomodify = JSON.parse(remotefs.readFileSync(userdir+"\\servers.json"));
|
||||
var result = jsontomodify['servers'].filter(function(obj) {return (obj.uuid === getSelectedServer())})[0];
|
||||
|
||||
var resultindex = jsontomodify['servers'].indexOf(result);
|
||||
|
||||
jsontomodify['servers'].splice(resultindex, 1);
|
||||
|
||||
remotefs.writeFileSync(userdir+"\\servers.json", JSON.stringify(jsontomodify, null, 4));
|
||||
loadServerList();
|
||||
}
|
||||
|
||||
function restoreDefaultServers() {
|
||||
remotefs.copySync(__dirname+"\\defaults\\servers.json", userdir+"\\servers.json");
|
||||
loadServerList();
|
||||
}
|
||||
|
||||
function loadGameVersions() {
|
||||
var versionjson = JSON.parse(remotefs.readFileSync(userdir+"\\versions.json"));
|
||||
versionarray = versionjson['versions'];
|
||||
$.each(versionarray, function( key, value ) {
|
||||
$(new Option(value.name, 'val')).appendTo('#addserver-versionselect');
|
||||
$(new Option(value.name, 'val')).appendTo('#editserver-versionselect');
|
||||
});
|
||||
}
|
||||
|
||||
function loadConfig() {
|
||||
// load config object globally
|
||||
config = JSON.parse(remotefs.readFileSync(userdir+"\\config.json"));
|
||||
}
|
||||
|
||||
function loadServerList() {
|
||||
var serverjson = JSON.parse(remotefs.readFileSync(userdir+"\\servers.json"));
|
||||
serverarray = serverjson['servers'];
|
||||
|
||||
$(".server-listing-entry").remove(); // Clear out old stuff, if any
|
||||
disableServerListButtons(); // Disable buttons until another server is selected
|
||||
|
||||
if (serverarray.length > 0) {
|
||||
// Servers were found in the JSON
|
||||
$("#server-listing-placeholder").attr("hidden",true);
|
||||
$.each(serverarray, function( key, value ) {
|
||||
// Create the row, and populate the cells
|
||||
var row = document.createElement('tr');
|
||||
row.className = 'server-listing-entry'
|
||||
row.setAttribute('id', value.uuid);
|
||||
var cellName = document.createElement('td');
|
||||
cellName.textContent = value.description
|
||||
var cellVersion = document.createElement('td');
|
||||
cellVersion.textContent = value.version
|
||||
cellVersion.className = 'text-monospace'
|
||||
|
||||
row.appendChild(cellName);
|
||||
row.appendChild(cellVersion);
|
||||
$("#server-tablebody").append(row);
|
||||
});
|
||||
} else {
|
||||
// No servers are added, make sure placeholder is visible
|
||||
$("#server-listing-placeholder").attr("hidden",false);
|
||||
}
|
||||
}
|
||||
|
||||
// For writing loginInfo.php, assetInfo.php, etc.
|
||||
function setGameInfo(serverUUID) {
|
||||
var result = serverarray.filter(function(obj) {return (obj.uuid === serverUUID);})[0];
|
||||
var gameversion = versionarray.filter(function(obj) {return (obj.name === result.version);})[0];
|
||||
|
||||
if(config['cache-swapping']) { // if cache swapping property exists AND is `true`, run cache swapping logic
|
||||
// Cache folder renaming
|
||||
var cachedir = userdir + '\\..\\..\\LocalLow\\Unity\\Web Player\\Cache';
|
||||
var curversion = cachedir + '\\Fusionfall';
|
||||
var newversion = cachedir + '\\' + gameversion.name;
|
||||
var record = userdir + '\\.lastver';
|
||||
|
||||
if (remotefs.existsSync(curversion)) {
|
||||
// cache already exists
|
||||
// find out what version it belongs to
|
||||
if (remotefs.existsSync(record)) {
|
||||
var lastversion = remotefs.readFileSync(record);
|
||||
remotefs.renameSync(curversion, cachedir + '\\' + lastversion);
|
||||
console.log('Cached version ' + lastversion);
|
||||
} else {
|
||||
console.log(
|
||||
"Couldn't find last version record; cache may get overwritten"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (remotefs.existsSync(newversion)) {
|
||||
// rename saved cache to FusionFall
|
||||
remotefs.renameSync(newversion, curversion);
|
||||
console.log('Loaded cached ' + gameversion.name);
|
||||
}
|
||||
|
||||
// make note of what version we are launching for next launch
|
||||
remotefs.writeFileSync(record, gameversion.name);
|
||||
}
|
||||
|
||||
window.asseturl = gameversion.url; // gameclient.js needs to access this
|
||||
|
||||
remotefs.writeFileSync(__dirname+"\\assetInfo.php", asseturl);
|
||||
remotefs.writeFileSync(__dirname+"\\loginInfo.php", result.ip);
|
||||
|
||||
if (result.hasOwnProperty('endpoint')) {
|
||||
var httpendpoint = result.endpoint.replace("https://", "http://")
|
||||
remotefs.writeFileSync(__dirname+"\\rankurl.txt", httpendpoint+"getranks");
|
||||
// Write these out too
|
||||
remotefs.writeFileSync(__dirname+"\\sponsor.php", httpendpoint+"upsell/sponsor.png");
|
||||
remotefs.writeFileSync(__dirname+"\\images.php", httpendpoint+"upsell/");
|
||||
} else {
|
||||
// Remove/default the endpoint related stuff, this server won't be using it
|
||||
if (remotefs.existsSync(__dirname+"\\rankurl.txt")) {
|
||||
remotefs.unlinkSync(__dirname+"\\rankurl.txt");
|
||||
remotefs.writeFileSync(__dirname+"\\sponsor.php", "assets/img/welcome.png");
|
||||
remotefs.writeFileSync(__dirname+"\\images.php", "assets/img/");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Returns the UUID of the server with the selected background color.
|
||||
// Yes, there are probably better ways to go about this, but it works well enough.
|
||||
function getSelectedServer() {
|
||||
return $("#server-tablebody > tr.bg-primary").prop("id");
|
||||
}
|
||||
|
||||
function connectToServer() {
|
||||
// Get ID of the selected server, which corresponds to its UUID in the json
|
||||
console.log("Connecting to server with UUID of " + getSelectedServer());
|
||||
|
||||
// Prevent the user from clicking anywhere else during the transition
|
||||
$('body,html').css('pointer-events','none');
|
||||
stopEasterEggs();
|
||||
$('#of-serverselector').fadeOut('slow', function() {
|
||||
setTimeout(function(){
|
||||
$('body,html').css('pointer-events','');
|
||||
setGameInfo(getSelectedServer());
|
||||
launchGame();
|
||||
}, 200);
|
||||
});
|
||||
}
|
||||
|
||||
// If applicable, deselect currently selected server.
|
||||
function deselectServer() {
|
||||
disableServerListButtons();
|
||||
$(".server-listing-entry").removeClass('bg-primary');
|
||||
}
|
||||
|
||||
$('#server-table').on('click', '.server-listing-entry', function(event) {
|
||||
enableServerListButtons();
|
||||
$(this).addClass('bg-primary').siblings().removeClass('bg-primary');
|
||||
});
|
||||
|
||||
// QoL feature: if you double click on a server it will connect
|
||||
$('#server-table').on('dblclick', '.server-listing-entry', function(event) {
|
||||
$(this).addClass('bg-primary').siblings().removeClass('bg-primary');
|
||||
connectToServer();
|
||||
});
|
||||
|
||||
$('#of-editservermodal').on('show.bs.modal', function (e) {
|
||||
|
||||
var jsontomodify = JSON.parse(remotefs.readFileSync(userdir+"\\servers.json"));
|
||||
$.each(jsontomodify["servers"], function( key, value ) {
|
||||
if(value["uuid"] == getSelectedServer()) {
|
||||
$("#editserver-descinput")[0].value = value['description'];
|
||||
$("#editserver-ipinput")[0].value = value['ip'];
|
||||
|
||||
var versionIndex = -1;
|
||||
$.each($("#editserver-versionselect")[0], function( key, val ) {
|
||||
if(val.text === value['version']) {
|
||||
versionIndex = key;
|
||||
}
|
||||
});
|
||||
$("#editserver-versionselect")[0].selectedIndex = versionIndex;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$('#of-deleteservermodal').on('show.bs.modal', function (e) {
|
||||
var result = serverarray.filter(function(obj) {return (obj.uuid === getSelectedServer());})[0];
|
||||
$("#deleteserver-servername").html(result.description);
|
||||
});
|
|
@ -0,0 +1,32 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
|
||||
<assemblyIdentity type="win32" name="OpenFusion.Client" version="1.5.2.0" processorArchitecture="x86" />
|
||||
<dependency>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity type="Win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*">
|
||||
</assemblyIdentity>
|
||||
</dependentAssembly>
|
||||
</dependency>
|
||||
<asmv3:trustInfo>
|
||||
<security>
|
||||
<requestedPrivileges>
|
||||
<requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
|
||||
</requestedPrivileges>
|
||||
</security>
|
||||
</asmv3:trustInfo>
|
||||
<asmv3:application>
|
||||
<asmv3:windowsSettings>
|
||||
<activeCodePage xmlns="urn:schemas-microsoft-com:smi.2019.WindowsSettings">UTF-8</activeCodePage>
|
||||
<dpiAware xmlns="urn:schemas-microsoft-com:smi.2005.WindowsSettings">True/PM</dpiAware>
|
||||
</asmv3:windowsSettings>
|
||||
</asmv3:application>
|
||||
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
||||
<application>
|
||||
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"></supportedOS>
|
||||
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"></supportedOS>
|
||||
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"></supportedOS>
|
||||
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"></supportedOS>
|
||||
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"></supportedOS>
|
||||
</application>
|
||||
</compatibility>
|
||||
</asmv1:assembly>
|
|
@ -0,0 +1,62 @@
|
|||
Web Player License Agreement
|
||||
|
||||
Last updated: June 21, 2013
|
||||
|
||||
PLEASE READ CAREFULLY: BY INSTALLING THE SOFTWARE (AS DEFINED BELOW), YOU (EITHER ON BEHALF OF YOURSELF AS AN INDIVIDUAL OR ON BEHALF OF AN ENTITY AS ITS AUTHORIZED REPRESENTATIVE) AGREE TO ALL OF THE TERMS OF THIS END USER LICENSE AGREEMENT REGARDING THE USE OF THE SOFTWARE.
|
||||
1. GRANT OF LICENSE:
|
||||
|
||||
You may install this Software on your computer to experience Unity web content.
|
||||
2. TITLE:
|
||||
|
||||
You acknowledge that no title to the intellectual property in the Software is transferred to you. Title, ownership, rights, and intellectual property rights in and to the Software shall remain that of Unity Technologies. The Software is protected by copyright laws of the United States and international treaties.
|
||||
3. ANONYMOUS USAGE STATISTICS:
|
||||
|
||||
You accept that the first time the Unity Web Player is used, anonymous information about the computer it's loaded on is submitted to Unity Technologies ApS. This only happens once time, and contains no personally identifiable information. The information submitted is:
|
||||
|
||||
(a) Operating system and version
|
||||
|
||||
(b) The make of the CPU, and number of CPUs present
|
||||
|
||||
(c) The graphics card type and vendor name
|
||||
|
||||
(d) Graphics card driver name and version (example: "nv4disp.dll 6.10.93.71")
|
||||
|
||||
(e) Which graphics API is in use (example: "OpenGL 2.1" or "Direct3D 9.0c")
|
||||
|
||||
(f) Amount of system and video RAM present
|
||||
|
||||
(g) Current desktop resolution
|
||||
|
||||
(h) Version of the Unity Web Player
|
||||
|
||||
(i) A number describing whether running on Mac or Windows
|
||||
|
||||
(j) A checksum of all the data that gets sent to verify that it did transmit correctly
|
||||
3. DISTRIBUTION:
|
||||
|
||||
You acknowledge that only Unity Technologies ApS and its designated distribution partners may distribute the Unity Web Player, without a special permission.
|
||||
4. CEASE OF DISTRIBUTION:
|
||||
|
||||
In case Unity Technologies ApS and its designated distribution partners permanently cease to distribute the Unity Web Player, versions of the Unity Web Player that have previously been distributed by Unity Technologies ApS become freely redistributable.
|
||||
5. DISCLAIMER OF WARRANTY:
|
||||
|
||||
YOU AGREE THAT UNITY TECHNOLOGIES APS HAS MADE NO EXPRESS WARRANTIES, ORAL OR WRITTEN, TO YOU REGARDING THE PRODUCTS AND THAT THE PRODUCTS ARE BEING PROVIDED TO YOU 'AS IS' WITHOUT WARRANTY OF ANY KIND. UNITY TECHNOLOGIES APS DISCLAIMS ANY AND ALL OTHER WARRANTIES, WHETHER EXPRESSED, IMPLIED, OR STATUTORY. YOUR RIGHTS MAY VARY DEPENDING ON THE STATE IN WHICH YOU LIVE. UNITY TECHNOLOGIES APS SHALL NOT BE LIABLE FOR INDIRECT, INCIDENTAL, SPECIAL, COVER, RELIANCE, OR CONSEQUENTIAL DAMAGES RESULTING FROM THE USE OF THIS PRODUCT.
|
||||
6. LIMITATION OF LIABILITY:
|
||||
|
||||
YOU USE THIS PROGRAM SOLELY AT YOUR OWN RISK. IN NO EVENT SHALL UNITY TECHNOLOGIES APS BE LIABLE TO YOU FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO ANY LOSS, OR OTHER INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND ARISING OUT OF THE USE OF THE SOFTWARE, EVEN IF UNITY TECHNOLOGIES APS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. IN NO EVENT WILL UNITY TECHNOLOGIES APS BE LIABLE FOR ANY CLAIM, WHETHER IN CONTRACT, TORT, OR ANY OTHER THEORY OF LIABILITY, EXCEED THE COST OF THE SOFTWARE. THIS LIMITATION SHALL APPLY TO CLAIMS OF PERSONAL INJURY TO THE EXTENT PERMITTED BY LAW.
|
||||
7. TERMINATION:
|
||||
|
||||
This Agreement shall terminate automatically if you fail to comply with the limitations described in this Agreement. No notice shall be required to effectuate such termination. Upon termination, you must remove and destroy all copies of the Software.
|
||||
8. MISCELLANEOUS:
|
||||
|
||||
Severability: In the event of invalidity of any provision of this Agreement, the parties agree that such invalidity shall not affect the validity of the remaining portions of this Agreement.
|
||||
|
||||
Export: You agree that you will not export or re-export the Software outside of the jurisdiction in which you obtained it without the appropriate United States or foreign government licenses.
|
||||
|
||||
Governing Law: This Agreement will be governed by the laws of the State of Denmark as they are applied to agreements between Denmark residents entered into and to be performed entirely within Denmark. The United Nations Convention on Contracts for the International Sale of Goods is specifically disclaimed.
|
||||
|
||||
Entire Agreement: You agree that this is the entire agreement between you and Unity Technologies ApS, which supersedes any prior agreement, whether written or oral, and all other communications between Unity Technologies ApS and you relating to the subject matter of this Agreement.
|
||||
|
||||
Reservation of rights: All rights not expressly granted in this Agreement are reserved by Unity Technologies ApS.
|
||||
|
||||
Derivative work: Whether you are licensing the Software as an individual or on behalf of an entity, you may not: (a) reverse engineer, decompile, or disassemble the Software or attempt to discover the source code; (b) modify, or create derivative works based upon, the Software in whole or in part without the express written consent of Unity Technologies ApS; (c) distribute copies of the Software; (d) remove any proprietary notices or labels on the Software; (e) resell, lease, rent, transfer, sublicense, or otherwise transfer rights to the Software.
|
|
@ -1,9 +1,9 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<plist>
|
||||
<dict>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>2.5.5b4</string>
|
||||
<key>UnityBuildNumber</key>
|
||||
<string>50</string>
|
||||
</dict>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<plist>
|
||||
<dict>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>2.5.5b4</string>
|
||||
<key>UnityBuildNumber</key>
|
||||
<string>50</string>
|
||||
</dict>
|
||||
</plist>
|
|
@ -1,9 +1,9 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<plist>
|
||||
<dict>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>3.5.2f2</string>
|
||||
<key>UnityBuildNumber</key>
|
||||
<string>4c6ee796dacc</string>
|
||||
</dict>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<plist>
|
||||
<dict>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>2.5.5b4</string>
|
||||
<key>UnityBuildNumber</key>
|
||||
<string>50</string>
|
||||
</dict>
|
||||
</plist>
|
|
@ -1,13 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<plist>
|
||||
<dict>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>2.5.5b4</string>
|
||||
<key>UnityBuildNumber</key>
|
||||
<string>50</string>
|
||||
<key>monoVersion</key>
|
||||
<string>fusion-2.x.x</string>
|
||||
<key>monoMinimumRevision</key>
|
||||
<string>2.0.0f6</string>
|
||||
</dict>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<plist>
|
||||
<dict>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>2.5.5b4</string>
|
||||
<key>UnityBuildNumber</key>
|
||||
<string>50</string>
|
||||
<key>monoVersion</key>
|
||||
<string>fusion-2.x.x</string>
|
||||
<key>monoMinimumRevision</key>
|
||||
<string>2.0.0f6</string>
|
||||
</dict>
|
||||
</plist>
|
|
@ -0,0 +1,28 @@
|
|||
const fs = require('fs');
|
||||
const defaultDir = './dist/win-ia32-unpacked/resources/default_app'
|
||||
const exeFile = './dist/win-ia32-unpacked/OpenFusionClient.exe'
|
||||
|
||||
exports.default = function() {
|
||||
// remove leftover files from default electron app
|
||||
fs.rm(defaultDir, { recursive: true }, (err) => {
|
||||
if (err) {
|
||||
throw err;
|
||||
}
|
||||
});
|
||||
// patch executable for large address awareness
|
||||
fs.open(exeFile, "r+", (err, fd) => {
|
||||
if(!err) {
|
||||
fs.write(
|
||||
fd, new Uint8Array([0x22]), 0, 1, 0x166,
|
||||
(err) => {
|
||||
if(err) {
|
||||
throw err;
|
||||
}
|
||||
fs.closeSync(fd);
|
||||
}
|
||||
);
|
||||
} else {
|
||||
throw err;
|
||||
}
|
||||
});
|
||||
}
|
|
@ -1,10 +0,0 @@
|
|||
const fs = require('fs');
|
||||
const dir = './dist/win-ia32-unpacked/resources/default_app'
|
||||
|
||||
exports.default = async function(context) {
|
||||
fs.rmdir(dir, { recursive: true }, (err) => {
|
||||
if (err) {
|
||||
throw err;
|
||||
}
|
||||
});
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
PUSHD %~dp0
|
||||
.\UnityWebPlayer.exe /quiet /S
|
||||
robocopy WebPlayer "%USERPROFILE%\AppData\LocalLow\Unity\WebPlayer" /s /e
|
||||
del "%USERPROFILE%\AppData\LocalLow\Unity\WebPlayer\UnityBugReporter.exe"
|
||||
POPD
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"autoupdate-check": true,
|
||||
"cache-swapping": true,
|
||||
"last-version-initialized": "1.4"
|
||||
}
|
||||
"last-version-initialized": "1.5"
|
||||
}
|
||||
|
|
|
@ -3,17 +3,17 @@
|
|||
{
|
||||
"uuid": "d9773558-6ddf-4d00-8803-d830a22a842b",
|
||||
"description": "OpenFusion Public Server - Original",
|
||||
"ip": "144.202.52.9:23000",
|
||||
"ip": "play.dexlabs.systems:23000",
|
||||
"version": "beta-20100104",
|
||||
"endpoint": "https://api.dexlabs.systems/"
|
||||
},
|
||||
{
|
||||
"uuid": "b84f6859-f500-41f2-bdfa-8e3746639ee9",
|
||||
"description": "OpenFusion Public Server - Academy",
|
||||
"ip": "144.202.52.9:24000",
|
||||
"ip": "play.dexlabs.systems:24000",
|
||||
"version": "beta-20111013",
|
||||
"endpoint": "https://api.dexlabs.systems/academy/"
|
||||
}
|
||||
],
|
||||
"favorites": []
|
||||
}
|
||||
}
|
||||
|
|
563
index.html
|
@ -1,139 +1,472 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta
|
||||
http-equiv="Content-Type"
|
||||
contentType="text/html; charset=UTF-8"
|
||||
/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>OpenFusion: Server Selector</title>
|
||||
<link rel="stylesheet" href="assets/css/bootstrap.min.css" />
|
||||
<link rel="stylesheet" href="assets/fonts/fontawesome-all.min.css" />
|
||||
<link rel="stylesheet" href="assets/css/openfusion.css" />
|
||||
<link rel="stylesheet" href="assets/css/styles.css" />
|
||||
</head>
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
|
||||
<title>OpenFusion: Server Selector</title>
|
||||
<link rel="stylesheet" href="assets/bootstrap/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="assets/fonts/fontawesome-all.min.css">
|
||||
<link rel="stylesheet" href="assets/css/openfusion.css">
|
||||
<link rel="stylesheet" href="assets/css/styles.css">
|
||||
</head>
|
||||
|
||||
<body style="background: rgb(0,0,0);width: 100%;height: 100%;margin: 0;padding: 0;clear:both;" onresize="onResize()">
|
||||
<section id="of-serverselector">
|
||||
<div class="container" id="serverselector-container">
|
||||
<div class="row text-center mt-3" id="of-logoheader">
|
||||
<div class="col"><img class="img-fluid" id="of-logo" src="assets/img/of-3.png" width="256">
|
||||
<p id="of-intro-text">Welcome to OpenFusion.<br>Select a server from the list below to get started.</p>
|
||||
<body onresize="onResize()">
|
||||
<section id="of-serverselector">
|
||||
<div class="container" id="serverselector-container">
|
||||
<div class="row text-center mt-3" id="of-logoheader">
|
||||
<div class="col">
|
||||
<img
|
||||
class="img-fluid"
|
||||
id="of-logo"
|
||||
src="assets/img/of-3.png"
|
||||
width="256"
|
||||
/>
|
||||
<p id="of-intro-text">
|
||||
Welcome to OpenFusion.<br />Select a server from the
|
||||
list below to get started.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row d-sm-flex d-xl-flex justify-content-center justify-content-sm-center justify-content-xl-center" id="of-serverlist">
|
||||
<div class="col-8 mb-2">
|
||||
<div class="table-responsive text-center border rounded border-primary" id="server-table">
|
||||
<table class="table table-striped table-hover mb-0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Description</th>
|
||||
<th>Game Version</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="server-tablebody">
|
||||
<tr id="server-listing-placeholder">
|
||||
<td colspan="2">No servers added yet... perhaps you should find one?</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div
|
||||
class="row d-sm-flex d-xl-flex justify-content-center justify-content-sm-center justify-content-xl-center"
|
||||
id="of-serverlist"
|
||||
>
|
||||
<div class="col-8 mb-2">
|
||||
<div
|
||||
class="table-responsive text-center border rounded border-primary"
|
||||
id="server-table"
|
||||
>
|
||||
<table class="table table-striped table-hover mb-0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Description</th>
|
||||
<th>Game Version</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="server-tablebody">
|
||||
<tr id="server-listing-placeholder">
|
||||
<td colspan="2">
|
||||
No servers added yet... perhaps you
|
||||
should find one?
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="row row-cols-2 d-xl-flex justify-content-center justify-content-xl-center"
|
||||
id="of-serverbuttons"
|
||||
style="padding-bottom: 16px"
|
||||
>
|
||||
<div
|
||||
class="col-4 text-left d-inline-flex justify-content-xl-start"
|
||||
>
|
||||
<button
|
||||
class="btn btn-success mr-1"
|
||||
data-toggle="modal"
|
||||
data-bs-tooltip=""
|
||||
data-placement="bottom"
|
||||
id="of-addserver-button"
|
||||
type="button"
|
||||
title="Add Server"
|
||||
data-target="#of-addservermodal"
|
||||
onclick="deselectServer()"
|
||||
>
|
||||
<i class="fas fa-plus"></i>
|
||||
</button>
|
||||
<button
|
||||
class="btn btn-primary mr-1 disabled"
|
||||
data-toggle="modal"
|
||||
data-bs-tooltip=""
|
||||
data-placement="bottom"
|
||||
id="of-editserver-button"
|
||||
type="button"
|
||||
title="Edit Server"
|
||||
data-target="#of-editservermodal"
|
||||
disabled=""
|
||||
>
|
||||
<i class="fas fa-edit"></i>
|
||||
</button>
|
||||
<button
|
||||
class="btn btn-danger mr-1 disabled"
|
||||
data-toggle="modal"
|
||||
data-bs-tooltip=""
|
||||
data-placement="bottom"
|
||||
id="of-deleteserver-button"
|
||||
type="button"
|
||||
title="Delete Server"
|
||||
data-target="#of-deleteservermodal"
|
||||
disabled=""
|
||||
>
|
||||
<i class="fas fa-trash-alt"></i>
|
||||
</button>
|
||||
</div>
|
||||
<div class="col-4 d-inline-flex justify-content-end">
|
||||
<button
|
||||
class="btn btn-primary disabled"
|
||||
id="of-connect-button"
|
||||
type="button"
|
||||
onclick="connectToServer()"
|
||||
disabled=""
|
||||
>
|
||||
Connect <i
|
||||
class="fas fa-angle-double-right"
|
||||
></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row row-cols-2 d-xl-flex justify-content-center justify-content-xl-center" id="of-serverbuttons" style="padding-bottom: 16px;">
|
||||
<div class="col-4 text-left d-inline-flex justify-content-xl-start">
|
||||
<button class="btn btn-success mr-1" data-toggle="modal" data-bs-tooltip="" data-placement="bottom" id="of-addserver-button" type="button" title="Add Server" data-target="#of-addservermodal" onclick="deselectServer()"><i class="fas fa-plus"></i></button>
|
||||
<button class="btn btn-primary mr-1 disabled" data-toggle="modal" data-bs-tooltip="" data-placement="bottom" id="of-editserver-button" type="button" title="Edit Server" data-target="#of-editservermodal" disabled=""><i class="fas fa-edit"></i></button>
|
||||
<button class="btn btn-danger mr-1 disabled" data-toggle="modal" data-bs-tooltip="" data-placement="bottom" id="of-deleteserver-button" type="button" title="Delete Server" data-target="#of-deleteservermodal" disabled=""><i class="fas fa-trash-alt"></i></button>
|
||||
</div>
|
||||
<div class="col-4 d-inline-flex justify-content-end">
|
||||
<button class="btn btn-primary disabled" id="of-connect-button" type="button" onclick="connectToServer()" disabled="">Connect <i class="fas fa-angle-double-right"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal fade" role="dialog" tabindex="-1" id="of-aboutmodal">
|
||||
<div class="modal-dialog modal-dialog-centered" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title">About OpenFusionClient</h4><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p class="text-monospace">Version 1.4</p>
|
||||
<p>©2020-2021 OpenFusion Contributors<br>OpenFusion is licensed under MIT.<br></p>
|
||||
<a href="#of-restoreserversmodal" onclick="$('#of-aboutmodal').modal('toggle')" data-toggle="modal" data-target="#of-restoreserversmodal">Reset to Default Servers</a>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<div class="row flex-fill">
|
||||
<div class="col"><button class="btn btn-primary border rounded border-primary pb-1 pt-1 mr-2 pl-2 pr-2" data-toggle="tooltip" data-bs-tooltip="" type="button" title="Github Page" onclick="window.open('https://github.com/OpenFusionProject/OpenFusion','_blank');"><i class="fab fa-github" style="font-size: 24px;"></i></button><button class="btn btn-primary border rounded border-primary pb-1 pt-1 pl-2 pr-2" data-toggle="tooltip" data-bs-tooltip="" type="button" title="DIscord Chat" onclick="window.open('https://discord.gg/DYavckB','_blank');"><i class="fab fa-discord" style="font-size: 24px; position:relative; top: 1px;"></i></button></div>
|
||||
<div class="col text-right"><button class="btn btn-primary border rounded border-primary" type="button" data-dismiss="modal">Close</button></div>
|
||||
<div
|
||||
class="modal fade"
|
||||
role="dialog"
|
||||
tabindex="-1"
|
||||
id="of-aboutmodal"
|
||||
>
|
||||
<div class="modal-dialog modal-dialog-centered" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title">About OpenFusionClient</h4>
|
||||
<button
|
||||
type="button"
|
||||
class="close"
|
||||
data-dismiss="modal"
|
||||
aria-label="Close"
|
||||
>
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p
|
||||
id="of-aboutversionnumber"
|
||||
class="text-monospace"
|
||||
>
|
||||
APP_VERSION_NUMBER
|
||||
</p>
|
||||
<p>
|
||||
©2020-2024 OpenFusion Contributors<br />OpenFusion
|
||||
is licensed under MIT.<br />
|
||||
</p>
|
||||
<a
|
||||
href="#of-restoreserversmodal"
|
||||
onclick="$('#of-aboutmodal').modal('toggle')"
|
||||
data-toggle="modal"
|
||||
data-target="#of-restoreserversmodal"
|
||||
>Reset to Default Servers</a
|
||||
>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<div class="row flex-fill">
|
||||
<div class="col">
|
||||
<button
|
||||
class="btn btn-primary border rounded border-primary pb-1 pt-1 mr-2 pl-2 pr-2"
|
||||
data-toggle="tooltip"
|
||||
data-bs-tooltip=""
|
||||
type="button"
|
||||
title="Github Page"
|
||||
onclick="window.open('https://github.com/OpenFusionProject/OpenFusion','_blank');"
|
||||
>
|
||||
<i
|
||||
class="fab fa-github"
|
||||
style="font-size: 24px"
|
||||
></i></button
|
||||
><button
|
||||
class="btn btn-primary border rounded border-primary pb-1 pt-1 pl-2 pr-2"
|
||||
data-toggle="tooltip"
|
||||
data-bs-tooltip=""
|
||||
type="button"
|
||||
title="Discord Chat"
|
||||
onclick="window.open('https://discord.gg/DYavckB','_blank');"
|
||||
>
|
||||
<i
|
||||
class="fab fa-discord"
|
||||
style="
|
||||
font-size: 24px;
|
||||
position: relative;
|
||||
top: 1px;
|
||||
"
|
||||
></i>
|
||||
</button>
|
||||
</div>
|
||||
<div class="col text-right">
|
||||
<button
|
||||
class="btn btn-primary border rounded border-primary"
|
||||
type="button"
|
||||
data-dismiss="modal"
|
||||
>
|
||||
Close
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal fade" role="dialog" tabindex="-1" id="of-addservermodal">
|
||||
<div class="modal-dialog modal-dialog-centered" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title">Add Server</h4><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
|
||||
<div
|
||||
class="modal fade"
|
||||
role="dialog"
|
||||
tabindex="-1"
|
||||
id="of-addservermodal"
|
||||
>
|
||||
<div class="modal-dialog modal-dialog-centered" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title">Add Server</h4>
|
||||
<button
|
||||
type="button"
|
||||
class="close"
|
||||
data-dismiss="modal"
|
||||
aria-label="Close"
|
||||
>
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form id="addserver-form" class="needs-validation">
|
||||
<label for="addserver-descinput"
|
||||
>Server Description</label
|
||||
><input
|
||||
class="form-control form-row w-75"
|
||||
type="text"
|
||||
id="addserver-descinput"
|
||||
placeholder="My OpenFusion Server"
|
||||
required=""
|
||||
minlength="1"
|
||||
maxlength="70"
|
||||
/><label for="addserver-ipinput"
|
||||
>Server IP</label
|
||||
><input
|
||||
class="form-control form-row w-75"
|
||||
type="text"
|
||||
id="addserver-ipinput"
|
||||
placeholder="127.0.0.1:23000"
|
||||
required=""
|
||||
pattern="^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]):[0-9]+$"
|
||||
/><label for="addserver-versionselect"
|
||||
>Game Version: </label
|
||||
><select
|
||||
class="form-control w-50"
|
||||
id="addserver-versionselect"
|
||||
required=""
|
||||
style="margin-left: -5px"
|
||||
></select>
|
||||
</form>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button
|
||||
class="btn btn-primary border rounded border-primary btn-danger border-danger"
|
||||
id="addserver-cancel"
|
||||
type="button"
|
||||
data-dismiss="modal"
|
||||
>
|
||||
Cancel</button
|
||||
><button
|
||||
class="btn btn-primary border rounded border-primary btn-success border-success"
|
||||
id="addserver-savebutton"
|
||||
type="submit"
|
||||
data-dismiss="modal"
|
||||
form="addserver-form"
|
||||
onclick="addServer();"
|
||||
>
|
||||
Save
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form id="addserver-form" class="needs-validation"><label for="addserver-descinput">Server Description</label><input class="form-control form-row w-75" type="text" id="addserver-descinput" placeholder="My OpenFusion Server" required="" minlength="1" maxlength="70"><label for="addserver-ipinput">Server IP</label><input class="form-control form-row w-75" type="text" id="addserver-ipinput" placeholder="127.0.0.1:23000" required="" pattern="^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]):[0-9]+$"><label for="addserver-versionselect">Game Version: </label><select class="form-control w-50" id="addserver-versionselect" required="" style="margin-left: -5px;"></select></form>
|
||||
</div>
|
||||
<div class="modal-footer"><button class="btn btn-primary border rounded border-primary btn-danger border-danger" id="addserver-cancel" type="button" data-dismiss="modal">Cancel</button><button class="btn btn-primary border rounded border-primary btn-success border-success" id="addserver-savebutton" type="submit" data-dismiss="modal" form="addserver-form" onclick="addServer();">Save</button></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal fade" role="dialog" tabindex="-1" id="of-editservermodal">
|
||||
<div class="modal-dialog modal-dialog-centered" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title">Edit Server</h4><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
|
||||
<div
|
||||
class="modal fade"
|
||||
role="dialog"
|
||||
tabindex="-1"
|
||||
id="of-editservermodal"
|
||||
>
|
||||
<div class="modal-dialog modal-dialog-centered" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title">Edit Server</h4>
|
||||
<button
|
||||
type="button"
|
||||
class="close"
|
||||
data-dismiss="modal"
|
||||
aria-label="Close"
|
||||
>
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form id="editserver-form" class="needs-validation">
|
||||
<label for="editserver-descinput"
|
||||
>Server Description</label
|
||||
><input
|
||||
class="form-control form-row w-75"
|
||||
type="text"
|
||||
id="editserver-descinput"
|
||||
placeholder="My OpenFusion Server"
|
||||
required=""
|
||||
minlength="1"
|
||||
maxlength="70"
|
||||
/><label for="addserver-ipinput"
|
||||
>Server IP</label
|
||||
><input
|
||||
class="form-control form-row w-75"
|
||||
type="text"
|
||||
id="editserver-ipinput"
|
||||
placeholder="127.0.0.1:23000"
|
||||
required=""
|
||||
pattern="^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]):[0-9]+$"
|
||||
/><label for="editserver-versionselect"
|
||||
>Game Version: </label
|
||||
><select
|
||||
class="form-control w-50"
|
||||
id="editserver-versionselect"
|
||||
required=""
|
||||
style="margin-left: -5px"
|
||||
></select>
|
||||
</form>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button
|
||||
class="btn btn-primary border rounded border-primary btn-danger border-danger"
|
||||
id="editserver-cancel"
|
||||
type="button"
|
||||
data-dismiss="modal"
|
||||
>
|
||||
Cancel</button
|
||||
><button
|
||||
class="btn btn-primary border rounded border-primary btn-success border-success"
|
||||
id="addserver-savebutton"
|
||||
type="submit"
|
||||
data-dismiss="modal"
|
||||
form="editserver-form"
|
||||
onclick="editServer();"
|
||||
>
|
||||
Save
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form id="editserver-form" class="needs-validation"><label for="editserver-descinput">Server Description</label><input class="form-control form-row w-75" type="text" id="editserver-descinput" placeholder="My OpenFusion Server" required="" minlength="1" maxlength="70"><label for="addserver-ipinput">Server IP</label><input class="form-control form-row w-75" type="text" id="editserver-ipinput" placeholder="127.0.0.1:23000" required="" pattern="^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]):[0-9]+$"><label for="editserver-versionselect">Game Version: </label><select class="form-control w-50" id="editserver-versionselect" required="" style="margin-left: -5px;"></select></form>
|
||||
</div>
|
||||
<div class="modal-footer"><button class="btn btn-primary border rounded border-primary btn-danger border-danger" id="editserver-cancel" type="button" data-dismiss="modal">Cancel</button><button class="btn btn-primary border rounded border-primary btn-success border-success" id="addserver-savebutton" type="submit" data-dismiss="modal" form="editserver-form" onclick="editServer();">Save</button></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal fade" role="dialog" tabindex="-1" id="of-deleteservermodal">
|
||||
<div class="modal-dialog modal-dialog-centered" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title">Are you sure?</h4><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
|
||||
<div
|
||||
class="modal fade"
|
||||
role="dialog"
|
||||
tabindex="-1"
|
||||
id="of-deleteservermodal"
|
||||
>
|
||||
<div class="modal-dialog modal-dialog-centered" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title">Are you sure?</h4>
|
||||
<button
|
||||
type="button"
|
||||
class="close"
|
||||
data-dismiss="modal"
|
||||
aria-label="Close"
|
||||
>
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p class="lead">
|
||||
Do you really want to delete<br />"<a
|
||||
id="deleteserver-servername"
|
||||
>SERVER_NAME</a
|
||||
>"?<br /><br />You could always re-add it later.
|
||||
</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button
|
||||
class="btn btn-primary border rounded border-primary"
|
||||
type="button"
|
||||
data-dismiss="modal"
|
||||
>
|
||||
Cancel</button
|
||||
><button
|
||||
class="btn btn-primary border rounded border-primary btn-danger border-danger"
|
||||
id="deleteserver-button"
|
||||
type="button"
|
||||
data-dismiss="modal"
|
||||
onclick="deleteServer();"
|
||||
>
|
||||
Yes, Delete
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p class="lead">Do you really want to delete<br>"<a id="deleteserver-servername">SERVER_NAME</a>"?<br><br>You could always re-add it later.</p>
|
||||
</div>
|
||||
<div class="modal-footer"><button class="btn btn-primary border rounded border-primary" type="button" data-dismiss="modal">Cancel</button><button class="btn btn-primary border rounded border-primary btn-danger border-danger" id="deleteserver-button" type="button" data-dismiss="modal" onclick="deleteServer();">Yes, Delete</button></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal fade" role="dialog" tabindex="-1" id="of-restoreserversmodal">
|
||||
<div class="modal-dialog modal-dialog-centered" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title">Are you sure?</h4><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
|
||||
<div
|
||||
class="modal fade"
|
||||
role="dialog"
|
||||
tabindex="-1"
|
||||
id="of-restoreserversmodal"
|
||||
>
|
||||
<div class="modal-dialog modal-dialog-centered" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title">Are you sure?</h4>
|
||||
<button
|
||||
type="button"
|
||||
class="close"
|
||||
data-dismiss="modal"
|
||||
aria-label="Close"
|
||||
>
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p class="lead">
|
||||
Do you really want to restore the default
|
||||
servers?
|
||||
</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button
|
||||
class="btn btn-primary border rounded border-primary"
|
||||
type="button"
|
||||
data-dismiss="modal"
|
||||
>
|
||||
Cancel</button
|
||||
><button
|
||||
class="btn btn-primary border rounded border-primary btn-danger border-danger"
|
||||
id="deleteserver-button"
|
||||
type="button"
|
||||
data-dismiss="modal"
|
||||
onclick="restoreDefaultServers();"
|
||||
>
|
||||
Yes, Restore
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p class="lead">Do you really want to restore the default servers?</p>
|
||||
</div>
|
||||
<div class="modal-footer"><button class="btn btn-primary border rounded border-primary" type="button" data-dismiss="modal">Cancel</button><button class="btn btn-primary border rounded border-primary btn-danger border-danger" id="deleteserver-button" type="button" data-dismiss="modal" onclick="restoreDefaultServers();">Yes, Restore</button></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="of-versionnumber"><a class="text-monospace text-secondary" href="#of-aboutmodal" data-toggle="modal" data-target="#of-aboutmodal">v1.4</a></div>
|
||||
</section>
|
||||
<section>
|
||||
<div id="client" style="width: 100%;height: 100%;margin: 0;padding: 0;background: #000;clear:both;"></div>
|
||||
</section>
|
||||
<script src="assets/js/jquery.min.js" onload="window.$ = window.jQuery = module.exports;"></script>
|
||||
<script src="assets/bootstrap/js/bootstrap.min.js"></script>
|
||||
<script src="assets/js/bs-init.js"></script>
|
||||
<script src="assets/js/uuidv4.min.js"></script>
|
||||
<script src="assets/js/serverselector.js"></script>
|
||||
<script src="assets/js/gameclient.js"></script>
|
||||
<script src="assets/js/snowflakes.min.js"></script>
|
||||
<script src="assets/js/eastereggs.js"></script>
|
||||
</body>
|
||||
|
||||
<div id="of-versionnumberdiv">
|
||||
<a
|
||||
id="of-versionnumber"
|
||||
class="text-monospace text-secondary"
|
||||
href="#of-aboutmodal"
|
||||
data-toggle="modal"
|
||||
data-target="#of-aboutmodal"
|
||||
>v0</a
|
||||
>
|
||||
</div>
|
||||
</section>
|
||||
<section>
|
||||
<div id="client"></div>
|
||||
</section>
|
||||
<script
|
||||
src="assets/js/jquery.min.js"
|
||||
onload="window.$ = window.jQuery = module.exports;"
|
||||
></script>
|
||||
<script src="assets/js/bootstrap.min.js"></script>
|
||||
<script src="assets/js/bs-init.js"></script>
|
||||
<script src="assets/js/uuidv4.min.js"></script>
|
||||
<script src="assets/js/server-selector.js"></script>
|
||||
<script src="assets/js/game-client.js"></script>
|
||||
<script src="assets/js/snowflakes.min.js"></script>
|
||||
<script src="assets/js/easter-eggs.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
245
index.js
|
@ -1,134 +1,165 @@
|
|||
var app = require('app'); // Module to control application life.
|
||||
var ipc = require('ipc');
|
||||
var fs = require('fs-extra');
|
||||
var os = require('os');
|
||||
var dialog = require('dialog');
|
||||
var BrowserWindow = require('browser-window');
|
||||
var app = require("app"); // Module to control application life.
|
||||
var dialog = require("dialog");
|
||||
var fs = require("fs-extra");
|
||||
var ipc = require("ipc");
|
||||
var os = require("os");
|
||||
var path = require("path");
|
||||
|
||||
var BrowserWindow = require("browser-window");
|
||||
var mainWindow = null;
|
||||
|
||||
app.commandLine.appendSwitch('--enable-npapi');
|
||||
var unityHomeDir = path.join(__dirname, "../../WebPlayer");
|
||||
// If running in non-packaged / development mode, this dir will be slightly different
|
||||
if (process.env.npm_node_execpath) {
|
||||
unityHomeDir = path.join(app.getAppPath(), "/build/WebPlayer");
|
||||
}
|
||||
|
||||
process.env["UNITY_HOME_DIR"] = unityHomeDir;
|
||||
process.env["UNITY_DISABLE_PLUGIN_UPDATES"] = "yes";
|
||||
|
||||
app.commandLine.appendSwitch("enable-npapi");
|
||||
app.commandLine.appendSwitch(
|
||||
"load-plugin",
|
||||
path.join(unityHomeDir, "/loader/npUnity3D32.dll")
|
||||
);
|
||||
app.commandLine.appendSwitch("no-proxy-server");
|
||||
|
||||
var userData = app.getPath("userData");
|
||||
var configPath = path.join(userData, "config.json");
|
||||
var serversPath = path.join(userData, "servers.json");
|
||||
var versionsPath = path.join(userData, "versions.json");
|
||||
|
||||
function initialSetup(firstTime) {
|
||||
// Display a small window to inform the user that the app is working
|
||||
setupWindow = new BrowserWindow({width: 275, height: 450, resizable: false, center:true, frame:false});
|
||||
setupWindow.loadUrl('file://' + __dirname + '/initialsetup.html');
|
||||
// Exec installUnity.bat and wait for it to finish.
|
||||
var child = require('child_process').spawn('cmd.exe', ['/c', 'utils\\installUnity.bat']);
|
||||
child.on('exit', function() {
|
||||
console.log("Unity installed.");
|
||||
if(!firstTime) { // migration from pre-1.4
|
||||
// Back everything up, just in case
|
||||
fs.copySync(app.getPath('userData')+"\\config.json", app.getPath('userData')+"\\config.json.bak");
|
||||
fs.copySync(app.getPath('userData')+"\\servers.json", app.getPath('userData')+"\\servers.json.bak");
|
||||
fs.copySync(app.getPath('userData')+"\\versions.json", app.getPath('userData')+"\\versions.json.bak");
|
||||
} else { // first-time setup
|
||||
// Copy default servers
|
||||
fs.copySync(__dirname+"\\defaults\\servers.json", app.getPath('userData')+"\\servers.json");
|
||||
if (!firstTime) {
|
||||
// Migration from pre-1.4
|
||||
// Back everything up, just in case
|
||||
fs.copySync(configPath, configPath + ".bak");
|
||||
fs.copySync(serversPath, serversPath + ".bak");
|
||||
fs.copySync(versionsPath, versionsPath + ".bak");
|
||||
} else {
|
||||
// First-time setup
|
||||
// Copy default servers
|
||||
fs.copySync(
|
||||
path.join(__dirname, "/defaults/servers.json"),
|
||||
serversPath
|
||||
);
|
||||
}
|
||||
|
||||
// Copy default versions and config
|
||||
fs.copySync(__dirname+"\\defaults\\versions.json", app.getPath('userData')+"\\versions.json");
|
||||
fs.copySync(__dirname+"\\defaults\\config.json", app.getPath('userData')+"\\config.json");
|
||||
|
||||
fs.copySync(path.join(__dirname, "/defaults/versions.json"), versionsPath);
|
||||
fs.copySync(path.join(__dirname, "/defaults/config.json"), configPath);
|
||||
|
||||
console.log("JSON files copied.");
|
||||
setupWindow.destroy();
|
||||
showMainWindow();
|
||||
})
|
||||
}
|
||||
|
||||
ipc.on("exit", function(id) {
|
||||
mainWindow.destroy();
|
||||
ipc.on("exit", function (id) {
|
||||
mainWindow.destroy();
|
||||
});
|
||||
|
||||
// Quit when all windows are closed.
|
||||
app.on('window-all-closed', function() {
|
||||
if (process.platform != 'darwin')
|
||||
app.quit();
|
||||
app.on("window-all-closed", function () {
|
||||
if (process.platform != "darwin") app.quit();
|
||||
});
|
||||
|
||||
app.on('ready', function() {
|
||||
|
||||
// Check just in case the user forgot to extract the zip.
|
||||
zip_check = app.getPath('exe').includes(os.tmpdir());
|
||||
if (zip_check) {
|
||||
errormsg =
|
||||
( "It has been detected that OpenFusionClient is running from the TEMP folder.\n\n"+
|
||||
"Please extract the entire Client folder to a location of your choice before starting OpenFusionClient.");
|
||||
dialog.showErrorBox("Error!", errormsg);
|
||||
return;
|
||||
}
|
||||
|
||||
// Create the browser window.
|
||||
mainWindow = new BrowserWindow({width: 1280, height: 720, show: false, "web-preferences": {"plugins": true}});
|
||||
mainWindow.setMinimumSize(640, 480);
|
||||
|
||||
// Check for first run
|
||||
var configPath = app.getPath('userData') + "\\config.json";
|
||||
try {
|
||||
if (!fs.existsSync(configPath)) {
|
||||
console.log("Config file not found. Running initial setup.");
|
||||
initialSetup(true);
|
||||
} else {
|
||||
var config = fs.readJsonSync(configPath);
|
||||
if(!config['last-version-initialized']) {
|
||||
console.log("Pre-1.4 config detected. Running migration.");
|
||||
initialSetup(false);
|
||||
} else {
|
||||
showMainWindow();
|
||||
}
|
||||
app.on("ready", function () {
|
||||
// Check just in case the user forgot to extract the zip.
|
||||
zipCheck = app.getPath("exe").includes(os.tmpdir());
|
||||
if (zipCheck) {
|
||||
var errorMessage =
|
||||
"It has been detected that OpenFusionClient is running from the TEMP folder.\n\n" +
|
||||
"Please extract the entire Client folder to a location of your choice before starting OpenFusionClient.";
|
||||
dialog.showErrorBox("Error!", errorMessage);
|
||||
return;
|
||||
}
|
||||
} catch(e) {
|
||||
console.log("An error occurred while checking for the config.");
|
||||
}
|
||||
// Create the browser window.
|
||||
mainWindow = new BrowserWindow({
|
||||
width: 1280,
|
||||
height: 720,
|
||||
show: false,
|
||||
"web-preferences": {
|
||||
plugins: true,
|
||||
},
|
||||
});
|
||||
mainWindow.setMinimumSize(640, 480);
|
||||
|
||||
// Makes it so external links are opened in the system browser, not Electron
|
||||
mainWindow.webContents.on('new-window', function(e, url) {
|
||||
e.preventDefault();
|
||||
require('shell').openExternal(url);
|
||||
});
|
||||
// Check for first run
|
||||
try {
|
||||
if (!fs.existsSync(configPath)) {
|
||||
console.log("Config file not found. Running initial setup.");
|
||||
initialSetup(true);
|
||||
} else {
|
||||
var config = fs.readJsonSync(configPath);
|
||||
if (!config["last-version-initialized"]) {
|
||||
console.log("Pre-1.4 config detected. Running migration.");
|
||||
initialSetup(false);
|
||||
} else {
|
||||
showMainWindow();
|
||||
}
|
||||
}
|
||||
} catch (ex) {
|
||||
dialog.showErrorBox(
|
||||
"Error!",
|
||||
"An error occurred while checking for the config. Make sure you have sufficent permissions."
|
||||
);
|
||||
app.quit();
|
||||
}
|
||||
|
||||
mainWindow.on('closed', function() {
|
||||
mainWindow = null;
|
||||
});
|
||||
// Makes it so external links are opened in the system browser, not Electron
|
||||
mainWindow.webContents.on("new-window", function (event, url) {
|
||||
event.preventDefault();
|
||||
require("shell").openExternal(url);
|
||||
});
|
||||
|
||||
mainWindow.on("closed", function () {
|
||||
mainWindow = null;
|
||||
});
|
||||
});
|
||||
|
||||
function showMainWindow() {
|
||||
// Load the index.html of the app.
|
||||
mainWindow.loadUrl('file://' + __dirname + '/index.html');
|
||||
// Load the index.html of the app.
|
||||
mainWindow.loadUrl("file://" + __dirname + "/index.html");
|
||||
|
||||
// Reduces white flash when opening the program
|
||||
mainWindow.webContents.on('did-finish-load', function() {
|
||||
mainWindow.show();
|
||||
// everything's loaded, tell the renderer process to do its thing
|
||||
mainWindow.webContents.executeJavaScript("loadConfig();");
|
||||
mainWindow.webContents.executeJavaScript("loadGameVersions();");
|
||||
mainWindow.webContents.executeJavaScript("loadServerList();");
|
||||
});
|
||||
// Reduces white flash when opening the program
|
||||
mainWindow.webContents.on("did-finish-load", function () {
|
||||
mainWindow.webContents.executeJavaScript("setAppVersionText();");
|
||||
mainWindow.show();
|
||||
// everything's loaded, tell the renderer process to do its thing
|
||||
mainWindow.webContents.executeJavaScript("loadConfig();");
|
||||
mainWindow.webContents.executeJavaScript("loadGameVersions();");
|
||||
mainWindow.webContents.executeJavaScript("loadServerList();");
|
||||
});
|
||||
|
||||
mainWindow.webContents.on('plugin-crashed', function() {
|
||||
console.log("Unity Web Player crashed.");
|
||||
});
|
||||
mainWindow.webContents.on("plugin-crashed", function () {
|
||||
var errorMessage =
|
||||
"Unity Web Player has crashed - please re-open the application.\n" +
|
||||
"If this error persists, please read the FAQ or ask for support in our Discord server.";
|
||||
dialog.showErrorBox("Error!", errorMessage);
|
||||
mainWindow.destroy();
|
||||
app.quit();
|
||||
});
|
||||
|
||||
mainWindow.webContents.on('will-navigate', function(evt, url) {
|
||||
evt.preventDefault();
|
||||
// TODO: showMessageBox rather than showErrorBox?
|
||||
switch (url) {
|
||||
case "https://audience.fusionfall.com/ff/regWizard.do?_flowId=fusionfall-registration-flow":
|
||||
errormsg =
|
||||
( "The register page is currently unimplemented.\n\n"+
|
||||
"You can still create an account: type your desired username and password into the provided boxes and click \"Log In\". "+
|
||||
"Your account will then be automatically created on the server. \nBe sure to remember these details!");
|
||||
dialog.showErrorBox("Sorry!", errormsg);
|
||||
break;
|
||||
case "https://audience.fusionfall.com/ff/login.do":
|
||||
dialog.showErrorBox("Sorry!", "Account management is not available.");
|
||||
break;
|
||||
case "http://forums.fusionfall.com/":
|
||||
require('shell').openExternal("https://discord.gg/DYavckB");
|
||||
break;
|
||||
default:
|
||||
mainWindow.webContents.loadURL(url);
|
||||
}
|
||||
});
|
||||
mainWindow.webContents.on("will-navigate", function (event, url) {
|
||||
event.preventDefault();
|
||||
switch (url) {
|
||||
case "https://audience.fusionfall.com/ff/regWizard.do?_flowId=fusionfall-registration-flow":
|
||||
var errorMessage =
|
||||
"The register page is currently unimplemented.\n\n" +
|
||||
'You can still create an account: type your desired username and password into the provided boxes and click "Log In". ' +
|
||||
"Your account will then be automatically created on the server. \nBe sure to remember these details!";
|
||||
dialog.showErrorBox("Sorry!", errorMessage);
|
||||
break;
|
||||
case "https://audience.fusionfall.com/ff/login.do":
|
||||
dialog.showErrorBox(
|
||||
"Sorry!",
|
||||
"Account management is not available."
|
||||
);
|
||||
break;
|
||||
case "http://forums.fusionfall.com/":
|
||||
require("shell").openExternal("https://discord.gg/DYavckB");
|
||||
break;
|
||||
default:
|
||||
mainWindow.loadUrl(url);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1,18 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>OpenFusion: Initial Setup</title>
|
||||
</head>
|
||||
<body style="overflow:hidden;background-color:#000;user-select:none;-webkit-user-select:none;">
|
||||
<center>
|
||||
<div><img src="assets/img/of-3.png" width="256">
|
||||
<div>
|
||||
<img src="assets/img/spinner.gif" width=50px/>
|
||||
</div>
|
||||
<div style="margin-top: 15px;">
|
||||
<p style='text-shadow:1px 1px 8px #4349C4;color:#4A76B7;font-size:18px;font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";'>OpenFusion is setting up...<br>Please wait - this should take <br>less than a minute.</p>
|
||||
</div>
|
||||
</div>
|
||||
</center>
|
||||
</body>
|
||||
</html>
|
138
package.json
|
@ -1,69 +1,79 @@
|
|||
{
|
||||
"name": "openfusionclient",
|
||||
"version": "1.4.0",
|
||||
"description": "OpenFusionClient",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"postinstall": "npx patch-package && npm explore electron-prebuilt -- npm run postinstall",
|
||||
"start": "electron .",
|
||||
"build": "node build.js",
|
||||
"pack": "electron-builder --win --ia32 --dir",
|
||||
"dist": "electron-builder --win --ia32"
|
||||
},
|
||||
"author": "OpenFusion Contributors",
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"electron-prebuilt": "^0.31.2",
|
||||
"patch-package": "^6.4.7",
|
||||
"electron-builder": "^22.10.5"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/OpenFusionProject/Client.git"
|
||||
},
|
||||
"build": {
|
||||
"appId": "xyz.openfusion.client",
|
||||
"productName": "OpenFusionClient",
|
||||
"copyright": "© 2020-2021 OpenFusion Contributors",
|
||||
"electronDownload": {
|
||||
"version": "0.31.2",
|
||||
"platform": "win32",
|
||||
"arch": "ia32"
|
||||
"name": "OpenFusionClient",
|
||||
"version": "1.5.2",
|
||||
"description": "OpenFusionClient",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"postinstall": "npx patch-package && npm explore electron-prebuilt -- npm run postinstall",
|
||||
"start": "electron .",
|
||||
"pack": "electron-builder --win --ia32 --dir",
|
||||
"dist": "electron-builder --win --ia32 --publish=never",
|
||||
"prettier": "npx prettier --write ."
|
||||
},
|
||||
"electronVersion": "0.31.2",
|
||||
"win": {
|
||||
"asar": false,
|
||||
"target": [
|
||||
{
|
||||
"target": "nsis",
|
||||
"arch": "ia32"
|
||||
"author": "OpenFusion Contributors",
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"electron-builder": "^22.14.13",
|
||||
"electron-prebuilt": "^0.31.2",
|
||||
"patch-package": "^6.5.1",
|
||||
"prettier": "^2.7.1"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/OpenFusionProject/OpenFusionClient.git"
|
||||
},
|
||||
"build": {
|
||||
"appId": "xyz.openfusion.client",
|
||||
"productName": "OpenFusionClient",
|
||||
"copyright": "© 2020-2023 OpenFusion Contributors",
|
||||
"electronDownload": {
|
||||
"version": "0.31.2",
|
||||
"platform": "win32",
|
||||
"arch": "ia32"
|
||||
},
|
||||
{
|
||||
"target": "zip",
|
||||
"arch": "ia32"
|
||||
}
|
||||
]
|
||||
"electronVersion": "0.31.2",
|
||||
"win": {
|
||||
"asar": false,
|
||||
"target": [
|
||||
{
|
||||
"target": "nsis",
|
||||
"arch": "ia32"
|
||||
},
|
||||
{
|
||||
"target": "zip",
|
||||
"arch": "ia32"
|
||||
}
|
||||
]
|
||||
},
|
||||
"nsis": {
|
||||
"createDesktopShortcut": true,
|
||||
"createStartMenuShortcut": true
|
||||
},
|
||||
"files": [
|
||||
"!patches${/*}",
|
||||
"!.vscode${/*}",
|
||||
"!*.php",
|
||||
"!rankurl.txt",
|
||||
"!README.md",
|
||||
"!LICENSE.md",
|
||||
"!.npmrc",
|
||||
"!.prettierrc",
|
||||
"!.prettierignore"
|
||||
],
|
||||
"extraFiles": [
|
||||
"LICENSE.md",
|
||||
{
|
||||
"from": "build/OpenFusionClient.exe.manifest",
|
||||
"to": "OpenFusionClient.exe.manifest"
|
||||
},
|
||||
{
|
||||
"from": "build/WebPlayer",
|
||||
"to": "WebPlayer"
|
||||
}
|
||||
],
|
||||
"afterPack": "./build/after-pack.js"
|
||||
},
|
||||
"nsis": {
|
||||
"createDesktopShortcut": true,
|
||||
"createStartMenuShortcut": true
|
||||
},
|
||||
"files": [
|
||||
"!patches${/*}",
|
||||
"!*.php",
|
||||
"!rankurl.txt",
|
||||
"!README.md",
|
||||
"!.npmrc"
|
||||
],
|
||||
"extraFiles": [
|
||||
{
|
||||
"from": "build/utils",
|
||||
"to": "utils"
|
||||
}
|
||||
],
|
||||
"afterPack": "./build/delete-default-app.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"fs-extra": "^0.30.0"
|
||||
}
|
||||
"dependencies": {
|
||||
"fs-extra": "2.0.0"
|
||||
}
|
||||
}
|
||||
|
|