36 Commits

Author SHA1 Message Date
0060f37e6c Clean up semicolons, whitespace and a typo 2022-06-29 00:57:30 +02:00
9bfe3d6d99 Bump copyright year to 2022 2022-06-28 23:06:05 +02:00
63c4616645 Replace default server IP with domain name
Now that the client supports domain resolution in the IP field, it makes
sense to use a domain name for future-proofing.
2022-06-28 23:02:48 +02:00
CakeLancelot
645e5d4279 Merge pull request #16 from OpenFusionProject/qol
Improved server address processing
2022-05-05 18:45:24 -05:00
gsemaj
7ce21cdddc Don't perform lookup for obvious IPs and account for async
This old version of Node forces us to use callbacks, so I had to rearrange some code to ensure the client only launches after the resolution is complete
2022-04-27 20:50:23 -04:00
gsemaj
8d6e546628 Add automatic DNS resolution for server addresses 2022-04-27 13:44:08 -04:00
gsemaj
6e881cbfaf Connect to default port 23000 if port not specified 2022-04-27 13:43:51 -04:00
gsemaj
8d5a8df023 Update package-lock for newer npm versions 2022-04-27 13:00:40 -04:00
CakeLancelot
e02f94604d Move restore default servers hyperlink to about menu 2021-09-20 14:37:24 -05:00
gsemaj
2fcbb9ba06 Fix stray 1.3 reference 2021-09-19 11:00:41 -04:00
Gent Semaj
a0f2ec90d0 Merge pull request #11 from gsemaj/onedotfour 2021-09-19 10:56:41 -04:00
Gent Semaj
d21b0040fd Merge pull request #4 from gsemaj/edit 2021-09-19 10:56:29 -04:00
gsemaj
1a9c467758 Add corner button to restore default servers 2021-09-18 20:29:08 -04:00
gsemaj
c2cd2d5cd6 Add functionality to restore default servers 2021-09-18 20:28:57 -04:00
gsemaj
53bf47d6da Update version references 2021-09-18 19:10:28 -04:00
gsemaj
c6e3316003 Add missing Unity Web Player files 2021-09-18 19:07:56 -04:00
gsemaj
9c5338da2d Check config before running cache swap logic 2021-09-18 18:21:41 -04:00
gsemaj
c997ab96ec Fix broken calls to copySync 2021-09-18 18:05:33 -04:00
gsemaj
17ca1f3c24 Add routine for migration from pre-1.4 2021-09-18 17:59:15 -04:00
gsemaj
71d3b970fc Update config file properties
- enable cache swapping by default
- replace initial-setup-completed with last-version-initialized
2021-09-18 17:40:30 -04:00
gsemaj
4def3b6028 Switch default version sources to DexLabs CDN 2021-09-18 17:25:31 -04:00
gsemaj
0cdf3df4d4 Implement Edit Modal for Server Entries 2021-09-18 13:47:20 -04:00
gsemaj
65c2914ef9 Add edit button & server deselection on add 2021-09-18 12:54:23 -04:00
CakeLancelot
54f083c22d Merge pull request #8 from gsemaj/caching
Implement basic rename-based cache switching
2021-09-16 04:56:22 -05:00
CakeLancelot
79bee6f1e4 Update copyright date 2021-09-16 04:56:03 -05:00
gsemaj
24a802facc Adjust terminology in logging 2021-09-15 15:48:01 -04:00
gsemaj
33be67f7e9 Make lastver a dotfile to keep it hidden 2021-09-15 15:46:12 -04:00
gsemaj
d09f06fb26 Implement basic rename-based cache switching 2021-09-15 15:38:16 -04:00
CakeLancelot
812ddeb0b8 Ignore unnecessary files on pack, explicitly enable shortcut creation
I *would* like for shortcuts to be an optional thing (ex. an installer page asking if you would like to create one in start, on desktop, etc.) but it seems that you need to mess with NSIS scripting. Later on, maybe.
2021-05-17 04:12:53 -05:00
CakeLancelot
5cbe30f39f Various package.json tweaks
* On `npm run dist`, build both nsis and zip
* Delete unnecessary default-app folder after pack
* Make sure installers are 32 bit
* Amend `repository` field
2021-05-17 03:09:24 -05:00
CakeLancelot
78b6c86410 Update package-lock 2021-05-16 21:19:24 -05:00
CakeLancelot
bfac6e9250 Use fs-extra for copying files synchronously
Also, sorry about the diff. Turns out some of the files in the repo were CRLF.
2021-05-16 21:06:57 -05:00
CakeLancelot
6f42297102 Enforce LF in repo 2021-05-16 20:59:01 -05:00
CakeLancelot
5d5dce9647 Move to npm for development and packaging
I had to hack the package.json to force `electron-prebuilt` to use a 32-bit binary - everything else should be fairly out of the box
2021-04-28 12:37:22 -05:00
CakeLancelot
f321ebdf56 Update .gitignore 2021-04-28 12:17:44 -05:00
CakeLancelot
3f6b2e3e58 File/folder restructuring 2021-02-07 18:04:44 -06:00
92 changed files with 9137 additions and 604 deletions

5
.gitattributes vendored Normal file
View File

@@ -0,0 +1,5 @@
*.css text eol=lf
*.html text eol=lf
*.js text eol=lf
*.json text eol=lf
*.md text eol=lf

6
.gitignore vendored
View File

@@ -1,9 +1,11 @@
locales/ locales/
*.dll
*.pak *.pak
*.bin *.bin
*.php *.php
OpenFusionClient.exe rankurl.txt
icudtl.dat icudtl.dat
version version
resources/app/files/rankurl.txt resources/app/files/rankurl.txt
node_modules/
dist/
UnityBugReporter.exe

1
.npmrc Normal file
View File

@@ -0,0 +1 @@
npm_config_arch=ia32

131
assets/css/openfusion.css Normal file
View File

@@ -0,0 +1,131 @@
:not(input):not(textarea),
:not(input):not(textarea)::after,
:not(input):not(textarea)::before {
-webkit-user-select: none;
user-select: none;
}
#server-table > .table-striped thead th {
background-color: #34476e;
}
#server-table > .table-striped tbody tr:nth-of-type(odd) {
background-color: #34476e;
}
#server-listing-placeholder > td {
background-color: #24314d;
user-select: none;
-webkit-user-select: none;
}
#server-table > .table-striped tbody tr:nth-of-type(even),
th {
background-color: #24314d;
}
#server-table {
font-size: 14pt;
opacity: 0.9;
}
#of-intro-text {
text-shadow: 1px 1px 8px #4349c4;
color: #4a76b7;
font-size: 18px;
}
img {
pointer-events: none;
}
:root {
--gray-dark: #343a40;
--primary: #6699ff;
--secondary: #384e7a;
--dark: #384e7a;
}
body {
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';
}
#of-versionnumber {
position: fixed;
bottom: 4px;
right: 8px;
}
.btn-primary {
background-image: url('../../assets/img/btn-primary-bg.png');
background-repeat: repeat;
}
.btn-success {
background-image: url('../../assets/img/btn-success-bg.png');
background-repeat: repeat;
}
.btn-danger {
background-image: url('../../assets/img/btn-danger-bg.png');
background-repeat: repeat;
}
#of-aboutmodal > .modal-dialog > .modal-content {
background-color: #093363;
border-color: #6699ff;
}
#of-addservermodal > .modal-dialog > .modal-content {
background-color: #093363;
border-color: #6699ff;
}
#of-editservermodal > .modal-dialog > .modal-content {
background-color: #093363;
border-color: #6699ff;
}
#of-deleteservermodal > .modal-dialog > .modal-content {
background-color: #093363;
border-color: #6699ff;
}
#of-restoreserversmodal > .modal-dialog > .modal-content {
background-color: #093363;
border-color: #6699ff;
}
.form-control,
.form-control:focus {
border-color: #0099ff;
background-color: #000;
color: #fff;
}
select {
border-color: #0099ff;
background-color: #000;
color: #fff;
}
button:disabled {
cursor: not-allowed;
pointer-events: all !important;
}
button > i {
pointer-events: none;
}
#of-logo {
opacity: 0.9;
}
#server-table .server-listing-entry {
cursor: pointer;
}

View File

Before

Width:  |  Height:  |  Size: 692 KiB

After

Width:  |  Height:  |  Size: 692 KiB

View File

Before

Width:  |  Height:  |  Size: 141 KiB

After

Width:  |  Height:  |  Size: 141 KiB

View File

Before

Width:  |  Height:  |  Size: 829 KiB

After

Width:  |  Height:  |  Size: 829 KiB

View File

Before

Width:  |  Height:  |  Size: 123 B

After

Width:  |  Height:  |  Size: 123 B

View File

Before

Width:  |  Height:  |  Size: 123 B

After

Width:  |  Height:  |  Size: 123 B

View File

Before

Width:  |  Height:  |  Size: 123 B

After

Width:  |  Height:  |  Size: 123 B

View File

Before

Width:  |  Height:  |  Size: 83 KiB

After

Width:  |  Height:  |  Size: 83 KiB

View File

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 72 KiB

View File

Before

Width:  |  Height:  |  Size: 9.6 KiB

After

Width:  |  Height:  |  Size: 9.6 KiB

View File

Before

Width:  |  Height:  |  Size: 176 B

After

Width:  |  Height:  |  Size: 176 B

View File

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

Before

Width:  |  Height:  |  Size: 722 KiB

After

Width:  |  Height:  |  Size: 722 KiB

View File

@@ -5,7 +5,7 @@ var today = new Date();
// so 11 is Dec. of this year, and 12 is Jan. of the next // so 11 is Dec. of this year, and 12 is Jan. of the next
var christmasBegin = new Date(today.getFullYear(), 11, 23); var christmasBegin = new Date(today.getFullYear(), 11, 23);
var christmasEnd = new Date(today.getFullYear(), 12, 8); var christmasEnd = new Date(today.getFullYear(), 12, 8);
var sf var sf;
if((today >= christmasBegin && today <= christmasEnd)) { if((today >= christmasBegin && today <= christmasEnd)) {
console.log("Christmas Activated."); console.log("Christmas Activated.");

View File

@@ -40,10 +40,10 @@ function onResize() {
} }
function launchGame() { function launchGame() {
gameRunning = true gameRunning = true;
var sel = document.getElementById("of-serverselector"); var sel = document.getElementById("of-serverselector");
sel.remove() sel.remove();
document.body.style.overflow = "hidden"; document.body.style.overflow = "hidden";
@@ -75,6 +75,6 @@ function launchGame() {
var div = document.getElementById('client'); var div = document.getElementById('client');
object.appendChild(embed); object.appendChild(embed);
div.appendChild(object); div.appendChild(object);
document.title = "OpenFusion" document.title = "OpenFusion";
onResize(); onResize();
} }

View File

@@ -1,13 +1,17 @@
var remote = require("remote"); var remote = require("remote");
var remotefs = remote.require('fs'); var remotefs = remote.require('fs-extra');
var dns = remote.require('dns');
var userdir = remote.require('app').getPath('userData'); var userdir = remote.require('app').getPath('userData');
var versionarray var versionarray;
var serverarray var serverarray;
var config;
function enableServerListButtons() { function enableServerListButtons() {
$('#of-connect-button').removeClass('disabled'); $('#of-connect-button').removeClass('disabled');
$('#of-connect-button').prop('disabled', false); $('#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').removeClass('disabled');
$('#of-deleteserver-button').prop('disabled', false); $('#of-deleteserver-button').prop('disabled', false);
} }
@@ -15,6 +19,8 @@ function enableServerListButtons() {
function disableServerListButtons() { function disableServerListButtons() {
$('#of-connect-button').addClass('disabled'); $('#of-connect-button').addClass('disabled');
$('#of-connect-button').prop('disabled', true); $('#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').addClass('disabled');
$('#of-deleteserver-button').prop('disabled', true); $('#of-deleteserver-button').prop('disabled', true);
} }
@@ -29,7 +35,21 @@ function addServer() {
server['version'] = $("#addserver-versionselect option:selected").text(); server['version'] = $("#addserver-versionselect option:selected").text();
//server['endpoint'] = //server['endpoint'] =
jsontomodify['servers'].push(server) 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)); remotefs.writeFileSync(userdir+"\\servers.json", JSON.stringify(jsontomodify, null, 4));
loadServerList(); loadServerList();
@@ -47,18 +67,24 @@ function deleteServer() {
loadServerList(); loadServerList();
} }
function restoreDefaultServers() {
remotefs.copySync(__dirname+"\\defaults\\servers.json", userdir+"\\servers.json");
loadServerList();
}
function loadGameVersions() { function loadGameVersions() {
var versionjson = JSON.parse(remotefs.readFileSync(userdir+"\\versions.json")); var versionjson = JSON.parse(remotefs.readFileSync(userdir+"\\versions.json"));
versionarray = versionjson['versions']; versionarray = versionjson['versions'];
$.each(versionarray, function( key, value ) { $.each(versionarray, function( key, value ) {
$(new Option(value.name, 'val')).appendTo('#addserver-versionselect'); $(new Option(value.name, 'val')).appendTo('#addserver-versionselect');
$(new Option(value.name, 'val')).appendTo('#editserver-versionselect');
}); });
} }
function loadConfig() { function loadConfig() {
// TODO: actually use these values // load config object globally
var configjson = JSON.parse(remotefs.readFileSync(userdir+"\\config.json")); config = JSON.parse(remotefs.readFileSync(userdir+"\\config.json"));
} }
function loadServerList() { function loadServerList() {
var serverjson = JSON.parse(remotefs.readFileSync(userdir+"\\servers.json")); var serverjson = JSON.parse(remotefs.readFileSync(userdir+"\\servers.json"));
@@ -73,13 +99,13 @@ function loadServerList() {
$.each(serverarray, function( key, value ) { $.each(serverarray, function( key, value ) {
// Create the row, and populate the cells // Create the row, and populate the cells
var row = document.createElement('tr'); var row = document.createElement('tr');
row.className = 'server-listing-entry' row.className = 'server-listing-entry';
row.setAttribute('id', value.uuid); row.setAttribute('id', value.uuid);
var cellName = document.createElement('td'); var cellName = document.createElement('td');
cellName.textContent = value.description cellName.textContent = value.description;
var cellVersion = document.createElement('td'); var cellVersion = document.createElement('td');
cellVersion.textContent = value.version cellVersion.textContent = value.version;
cellVersion.className = 'text-monospace' cellVersion.className = 'text-monospace';
row.appendChild(cellName); row.appendChild(cellName);
row.appendChild(cellVersion); row.appendChild(cellVersion);
@@ -95,13 +121,43 @@ function loadServerList() {
function setGameInfo(serverUUID) { function setGameInfo(serverUUID) {
var result = serverarray.filter(function(obj) {return (obj.uuid === serverUUID);})[0]; var result = serverarray.filter(function(obj) {return (obj.uuid === serverUUID);})[0];
var gameversion = versionarray.filter(function(obj) {return (obj.name === result.version);})[0]; var gameversion = versionarray.filter(function(obj) {return (obj.name === result.version);})[0];
window.asseturl = gameversion.url // gameclient.js needs to access this
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+"\\assetInfo.php", asseturl);
remotefs.writeFileSync(__dirname+"\\loginInfo.php", result.ip);
if (result.hasOwnProperty('endpoint')) { if (result.hasOwnProperty('endpoint')) {
var httpendpoint = result.endpoint.replace("https://", "http://") var httpendpoint = result.endpoint.replace("https://", "http://");
remotefs.writeFileSync(__dirname+"\\rankurl.txt", httpendpoint+"getranks"); remotefs.writeFileSync(__dirname+"\\rankurl.txt", httpendpoint+"getranks");
// Write these out too // Write these out too
remotefs.writeFileSync(__dirname+"\\sponsor.php", httpendpoint+"upsell/sponsor.png"); remotefs.writeFileSync(__dirname+"\\sponsor.php", httpendpoint+"upsell/sponsor.png");
@@ -114,6 +170,40 @@ function setGameInfo(serverUUID) {
remotefs.writeFileSync(__dirname+"\\images.php", "assets/img/"); remotefs.writeFileSync(__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.resolve4(address, function(err, res) {
if(!err) {
console.log("Resolved " + address + " to " + res[0]);
address = res[0];
} 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(__dirname+"\\loginInfo.php", full);
launchGame();
} }
// Returns the UUID of the server with the selected background color. // Returns the UUID of the server with the selected background color.
@@ -133,11 +223,16 @@ function connectToServer() {
setTimeout(function(){ setTimeout(function(){
$('body,html').css('pointer-events',''); $('body,html').css('pointer-events','');
setGameInfo(getSelectedServer()); setGameInfo(getSelectedServer());
launchGame();
}, 200); }, 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) { $('#server-table').on('click', '.server-listing-entry', function(event) {
enableServerListButtons(); enableServerListButtons();
$(this).addClass('bg-primary').siblings().removeClass('bg-primary'); $(this).addClass('bg-primary').siblings().removeClass('bg-primary');
@@ -149,6 +244,25 @@ $('#server-table').on('dblclick', '.server-listing-entry', function(event) {
connectToServer(); 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) { $('#of-deleteservermodal').on('show.bs.modal', function (e) {
var result = serverarray.filter(function(obj) {return (obj.uuid === getSelectedServer());})[0]; var result = serverarray.filter(function(obj) {return (obj.uuid === getSelectedServer());})[0];
$("#deleteserver-servername").html(result.description); $("#deleteserver-servername").html(result.description);

View File

@@ -0,0 +1,10 @@
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;
}
});
}

BIN
build/icon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 329 KiB

Binary file not shown.

Binary file not shown.

5
defaults/config.json Normal file
View File

@@ -0,0 +1,5 @@
{
"autoupdate-check": true,
"cache-swapping": true,
"last-version-initialized": "1.4"
}

View File

@@ -3,14 +3,14 @@
{ {
"uuid": "d9773558-6ddf-4d00-8803-d830a22a842b", "uuid": "d9773558-6ddf-4d00-8803-d830a22a842b",
"description": "OpenFusion Public Server - Original", "description": "OpenFusion Public Server - Original",
"ip": "144.202.52.9:23000", "ip": "play.dexlabs.systems:23000",
"version": "beta-20100104", "version": "beta-20100104",
"endpoint": "https://api.dexlabs.systems/" "endpoint": "https://api.dexlabs.systems/"
}, },
{ {
"uuid": "b84f6859-f500-41f2-bdfa-8e3746639ee9", "uuid": "b84f6859-f500-41f2-bdfa-8e3746639ee9",
"description": "OpenFusion Public Server - Academy", "description": "OpenFusion Public Server - Academy",
"ip": "144.202.52.9:24000", "ip": "play.dexlabs.systems:24000",
"version": "beta-20111013", "version": "beta-20111013",
"endpoint": "https://api.dexlabs.systems/academy/" "endpoint": "https://api.dexlabs.systems/academy/"
} }

108
defaults/versions.json Normal file
View File

@@ -0,0 +1,108 @@
{
"versions": [
{
"name": "beta-20100104",
"url": "http://cdn.dexlabs.systems/ff/big/beta-20100104/"
},
{
"name": "beta-20100119",
"url": "http://cdn.dexlabs.systems/ff/big/beta-20100119/"
},
{
"name": "beta-20100207",
"url": "http://cdn.dexlabs.systems/ff/big/beta-20100207/"
},
{
"name": "beta-20100307",
"url": "http://cdn.dexlabs.systems/ff/big/beta-20100307/"
},
{
"name": "beta-20100322",
"url": "http://cdn.dexlabs.systems/ff/big/beta-20100322/"
},
{
"name": "beta-20100413",
"url": "http://cdn.dexlabs.systems/ff/big/beta-20100413/"
},
{
"name": "beta-20100502",
"url": "http://cdn.dexlabs.systems/ff/big/beta-20100502/"
},
{
"name": "beta-20100524",
"url": "http://cdn.dexlabs.systems/ff/big/beta-20100524/"
},
{
"name": "beta-20100604",
"url": "http://cdn.dexlabs.systems/ff/big/beta-20100604/"
},
{
"name": "beta-20100616",
"url": "http://cdn.dexlabs.systems/ff/big/beta-20100616/"
},
{
"name": "beta-20100711",
"url": "http://cdn.dexlabs.systems/ff/big/beta-20100711/"
},
{
"name": "beta-20100728",
"url": "http://cdn.dexlabs.systems/ff/big/beta-20100728/"
},
{
"name": "beta-20100909",
"url": "http://cdn.dexlabs.systems/ff/big/beta-20100909/"
},
{
"name": "beta-20101003",
"url": "http://cdn.dexlabs.systems/ff/big/beta-20101003/"
},
{
"name": "beta-20101011",
"url": "http://cdn.dexlabs.systems/ff/big/beta-20101011/"
},
{
"name": "beta-20101028",
"url": "http://cdn.dexlabs.systems/ff/big/beta-20101028/"
},
{
"name": "beta-20101123",
"url": "http://cdn.dexlabs.systems/ff/big/beta-20101123/"
},
{
"name": "beta-20110213",
"url": "http://cdn.dexlabs.systems/ff/big/beta-20110213/"
},
{
"name": "beta-20110314",
"url": "http://cdn.dexlabs.systems/ff/big/beta-20110314/"
},
{
"name": "beta-20110330",
"url": "http://cdn.dexlabs.systems/ff/big/beta-20110330/"
},
{
"name": "beta-20110424",
"url": "http://cdn.dexlabs.systems/ff/big/beta-20110424/"
},
{
"name": "beta-20110523",
"url": "http://cdn.dexlabs.systems/ff/big/beta-20110523/"
},
{
"name": "beta-20110725",
"url": "http://cdn.dexlabs.systems/ff/big/beta-20110725/"
},
{
"name": "beta-20110818",
"url": "http://cdn.dexlabs.systems/ff/big/beta-20110818/"
},
{
"name": "beta-20110912",
"url": "http://cdn.dexlabs.systems/ff/big/beta-20110912/"
},
{
"name": "beta-20111013",
"url": "http://cdn.dexlabs.systems/ff/big/beta-20111013/"
}
]
}

View File

@@ -39,8 +39,14 @@
</div> </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="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"><i class="fas fa-plus"></i></button><button class="btn btn-danger 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 text-left d-inline-flex justify-content-xl-start">
<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&nbsp;<i class="fas fa-angle-double-right"></i></button></div> <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&nbsp;<i class="fas fa-angle-double-right"></i></button>
</div>
</div> </div>
</div> </div>
<div class="modal fade" role="dialog" tabindex="-1" id="of-aboutmodal"> <div class="modal fade" role="dialog" tabindex="-1" id="of-aboutmodal">
@@ -50,12 +56,13 @@
<h4 class="modal-title">About OpenFusionClient</h4><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> <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>
<div class="modal-body"> <div class="modal-body">
<p class="text-monospace">Version 1.3</p> <p class="text-monospace">Version 1.4</p>
<p>©2020 OpenFusion Contributors<br>OpenFusion is licensed under MIT.<br></p> <p>©2020-2022 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>
<div class="modal-footer"> <div class="modal-footer">
<div class="row flex-fill"> <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(&#39;https://github.com/OpenFusionProject/OpenFusion&#39;,&#39;_blank&#39;);"><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(&#39;https://discord.gg/DYavckB&#39;,&#39;_blank&#39;);"><i class="fab fa-discord" style="font-size: 24px; position:relative; top: 1px;"></i></button></div> <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(&#39;https://github.com/OpenFusionProject/OpenFusion&#39;,&#39;_blank&#39;);"><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(&#39;https://discord.gg/DYavckB&#39;,&#39;_blank&#39;);"><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="col text-right"><button class="btn btn-primary border rounded border-primary" type="button" data-dismiss="modal">Close</button></div>
</div> </div>
</div> </div>
@@ -75,6 +82,19 @@
</div> </div>
</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>
<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:&nbsp;</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 fade" role="dialog" tabindex="-1" id="of-deleteservermodal">
<div class="modal-dialog modal-dialog-centered" role="document"> <div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content"> <div class="modal-content">
@@ -88,7 +108,20 @@
</div> </div>
</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.3</a></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>
<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>
<section> <section>
<div id="client" style="width: 100%;height: 100%;margin: 0;padding: 0;background: #000;clear:both;"></div> <div id="client" style="width: 100%;height: 100%;margin: 0;padding: 0;background: #000;clear:both;"></div>

134
index.js Normal file
View File

@@ -0,0 +1,134 @@
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 mainWindow = null;
app.commandLine.appendSwitch('--enable-npapi');
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");
}
// 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");
console.log("JSON files copied.");
setupWindow.destroy();
showMainWindow();
})
}
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('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();
}
}
} catch(e) {
console.log("An error occurred while checking for the config.");
}
// 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);
});
mainWindow.on('closed', function() {
mainWindow = null;
});
});
function showMainWindow() {
// 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();");
});
mainWindow.webContents.on('plugin-crashed', function() {
console.log("Unity Web Player crashed.");
});
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);
}
});
}

8245
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

69
package.json Normal file
View File

@@ -0,0 +1,69 @@
{
"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-2022 OpenFusion Contributors",
"electronDownload": {
"version": "0.31.2",
"platform": "win32",
"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${/*}",
"!*.php",
"!rankurl.txt",
"!README.md",
"!.npmrc"
],
"extraFiles": [
{
"from": "build/utils",
"to": "utils"
}
],
"afterPack": "./build/delete-default-app.js"
},
"dependencies": {
"fs-extra": "^0.30.0"
}
}

View File

@@ -0,0 +1,13 @@
diff --git a/node_modules/electron-prebuilt/install.js b/node_modules/electron-prebuilt/install.js
index 3261c69..3fcb876 100644
--- a/node_modules/electron-prebuilt/install.js
+++ b/node_modules/electron-prebuilt/install.js
@@ -24,7 +24,7 @@ var paths = {
if (!paths[platform]) throw new Error('Unknown platform: ' + platform)
// downloads if not cached
-download({version: version}, extractFile)
+download({version: version, arch: 'ia32', platform: 'win32'}, extractFile)
// unzips and makes path.txt point at the correct executable
function extractFile (err, zipPath) {

View File

@@ -1,5 +0,0 @@
{
"autoupdate-check": true,
"cache-swapping": false,
"initial-setup-completed": true
}

View File

@@ -1,108 +0,0 @@
{
"versions": [
{
"name": "beta-20100104",
"url": "http://ht.cdn.turner.com/ff/big/beta-20100104/"
},
{
"name": "beta-20100119",
"url": "http://ht.cdn.turner.com/ff/big/beta-20100119/"
},
{
"name": "beta-20100207",
"url": "http://ht.cdn.turner.com/ff/big/beta-20100207/"
},
{
"name": "beta-20100307",
"url": "http://ht.cdn.turner.com/ff/big/beta-20100307/"
},
{
"name": "beta-20100322",
"url": "http://ht.cdn.turner.com/ff/big/beta-20100322/"
},
{
"name": "beta-20100413",
"url": "http://ht.cdn.turner.com/ff/big/beta-20100413/"
},
{
"name": "beta-20100502",
"url": "http://ht.cdn.turner.com/ff/big/beta-20100502/"
},
{
"name": "beta-20100524",
"url": "http://ht.cdn.turner.com/ff/big/beta-20100524/"
},
{
"name": "beta-20100604",
"url": "http://ht.cdn.turner.com/ff/big/beta-20100604/"
},
{
"name": "beta-20100616",
"url": "http://ht.cdn.turner.com/ff/big/beta-20100616/"
},
{
"name": "beta-20100711",
"url": "http://ht.cdn.turner.com/ff/big/beta-20100711/"
},
{
"name": "beta-20100728",
"url": "http://ht.cdn.turner.com/ff/big/beta-20100728/"
},
{
"name": "beta-20100909",
"url": "http://ht.cdn.turner.com/ff/big/beta-20100909/"
},
{
"name": "beta-20101003",
"url": "http://ht.cdn.turner.com/ff/big/beta-20101003/"
},
{
"name": "beta-20101011",
"url": "http://ht.cdn.turner.com/ff/big/beta-20101011/"
},
{
"name": "beta-20101028",
"url": "http://ht.cdn.turner.com/ff/big/beta-20101028/"
},
{
"name": "beta-20101123",
"url": "http://ht.cdn.turner.com/ff/big/beta-20101123/"
},
{
"name": "beta-20110213",
"url": "http://ht.cdn.turner.com/ff/big/beta-20110213/"
},
{
"name": "beta-20110314",
"url": "http://ht.cdn.turner.com/ff/big/beta-20110314/"
},
{
"name": "beta-20110330",
"url": "http://ht.cdn.turner.com/ff/big/beta-20110330/"
},
{
"name": "beta-20110424",
"url": "http://ht.cdn.turner.com/ff/big/beta-20110424/"
},
{
"name": "beta-20110523",
"url": "http://ht.cdn.turner.com/ff/big/beta-20110523/"
},
{
"name": "beta-20110725",
"url": "http://ht.cdn.turner.com/ff/big/beta-20110725/"
},
{
"name": "beta-20110818",
"url": "http://ht.cdn.turner.com/ff/big/beta-20110818/"
},
{
"name": "beta-20110912",
"url": "http://ht.cdn.turner.com/ff/big/beta-20110912/"
},
{
"name": "beta-20111013",
"url": "http://ht.cdn.turner.com/ff/big/beta-20111013/"
}
]
}

View File

@@ -1 +0,0 @@
http://ht.cdn.turner.com/ff/big/beta-20100104/

View File

@@ -1,116 +0,0 @@
:not(input):not(textarea), :not(input):not(textarea)::after, :not(input):not(textarea)::before {
-webkit-user-select: none;
user-select: none;
}
#server-table > .table-striped thead th {
background-color: #34476E;
}
#server-table > .table-striped tbody tr:nth-of-type(odd) {
background-color: #34476E;
}
#server-listing-placeholder > td {
background-color: #24314D;
user-select: none;
-webkit-user-select: none;
}
#server-table > .table-striped tbody tr:nth-of-type(even), th {
background-color: #24314D;
}
#server-table {
font-size: 14pt;
opacity: 0.9;
}
#of-intro-text {
text-shadow: 1px 1px 8px #4349C4;
color: #4A76B7;
font-size: 18px;
}
img {
pointer-events: none;
}
:root {
--gray-dark: #343a40;
--primary: #6699FF;
--secondary: #384E7A;
--dark: #384E7A;
}
body {
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";
}
#of-versionnumber {
position: fixed;
bottom: 4px;
right: 8px;
}
.btn-primary {
background-image: url("../../assets/img/btn-primary-bg.png");
background-repeat: repeat;
}
.btn-success {
background-image: url("../../assets/img/btn-success-bg.png");
background-repeat: repeat;
}
.btn-danger {
background-image: url("../../assets/img/btn-danger-bg.png");
background-repeat: repeat;
}
#of-aboutmodal > .modal-dialog > .modal-content {
background-color: #093363;
border-color: #6699FF;
}
#of-addservermodal > .modal-dialog > .modal-content {
background-color: #093363;
border-color: #6699FF;
}
#of-deleteservermodal > .modal-dialog > .modal-content {
background-color: #093363;
border-color: #6699FF;
}
.form-control, .form-control:focus {
border-color: #0099FF;
background-color: #000;
color: #fff;
}
select {
border-color: #0099FF;
background-color: #000;
color: #fff;
}
button:disabled {
cursor: not-allowed;
pointer-events: all !important;
}
button > i {
pointer-events: none;
}
#of-logo {
opacity: 0.9;
}
#server-table .server-listing-entry {
cursor: pointer;
}

View File

@@ -1 +0,0 @@
assets/img/welcome.png

View File

@@ -1 +0,0 @@
144.202.52.9:23000

View File

@@ -1 +0,0 @@
http://api.dexlabs.systems/getranks

View File

@@ -1 +0,0 @@
assets/img/welcome.png

View File

@@ -1,98 +0,0 @@
var app = require('app'); // Module to control application life.
var ipc = require('ipc');
var fs = require('fs');
var os = require('os');
var dialog = require('dialog');
var BrowserWindow = require('browser-window');
var mainWindow = null;
app.commandLine.appendSwitch('--enable-npapi');
// Node version is too old to have a built-in function
function copyFile(src, dst) {
fs.createReadStream(src).pipe(fs.createWriteStream(dst));
}
function initialSetup() {
// 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 + '/files/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.");
// Copy over files with default values
copyFile(__dirname+"\\default_config.json", app.getPath('userData')+"\\config.json");
copyFile(__dirname+"\\default_servers.json", app.getPath('userData')+"\\servers.json");
copyFile(__dirname+"\\default_versions.json", app.getPath('userData')+"\\versions.json");
console.log("JSON files copied.");
setupWindow.destroy();
showMainWindow();
})
}
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('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
try {
if (!fs.existsSync(app.getPath('userData')+"\\config.json")) {
console.log("Config file not found. Running initial setup.");
initialSetup();
} else {
showMainWindow();
}
} catch(e) {
console.log("An error occurred while checking for the config.");
}
// 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);
});
mainWindow.on('closed', function() {
mainWindow = null;
});
});
function showMainWindow() {
// and load the index.html of the app.
mainWindow.loadUrl('file://' + __dirname + '/files/index.html');
// Reduces white flash when opening the program
// Eliminating it entirely requires a newer Electron ver :(
mainWindow.webContents.on('did-finish-load', function() {
mainWindow.show();
mainWindow.webContents.executeJavaScript("loadConfig();");
mainWindow.webContents.executeJavaScript("loadGameVersions();");
mainWindow.webContents.executeJavaScript("loadServerList();");
});
//mainWindow.webContents.openDevTools()
}

View File

@@ -1,5 +0,0 @@
{
"name" : "OpenFusionClient",
"version" : "1.3.0",
"main" : "index.js"
}

Binary file not shown.