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/
*.dll
*.pak
*.bin
*.php
OpenFusionClient.exe
rankurl.txt
icudtl.dat
version
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

@@ -3,9 +3,9 @@ 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 christmasBegin = new Date(today.getFullYear(), 11, 23);
var christmasEnd = new Date(today.getFullYear(), 12, 8);
var sf
var sf;
if((today >= christmasBegin && today <= christmasEnd)) {
console.log("Christmas Activated.");
@@ -15,5 +15,5 @@ if((today >= christmasBegin && today <= christmasEnd)) {
function stopEasterEggs(){
if (sf != null) {
sf.destroy();
}
}
}
}

View File

@@ -1,80 +1,80 @@
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();
}
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();
}

View File

@@ -1,155 +1,269 @@
var remote = require("remote");
var remotefs = remote.require('fs');
var userdir = remote.require('app').getPath('userData');
var versionarray
var serverarray
function enableServerListButtons() {
$('#of-connect-button').removeClass('disabled');
$('#of-connect-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-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 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 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');
});
}
function loadConfig() {
// TODO: actually use these values
var configjson = 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];
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);
});
}
$('#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-deleteservermodal').on('show.bs.modal', function (e) {
var result = serverarray.filter(function(obj) {return (obj.uuid === getSelectedServer());})[0];
$("#deleteserver-servername").html(result.description);
});
var remote = require("remote");
var remotefs = remote.require('fs-extra');
var dns = remote.require('dns');
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);
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/");
}
}
// 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.
// 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 = 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);
});

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

@@ -1,19 +1,19 @@
{
"servers": [
{
"uuid": "d9773558-6ddf-4d00-8803-d830a22a842b",
"description": "OpenFusion Public Server - Original",
"ip": "144.202.52.9: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",
"version": "beta-20111013",
"endpoint": "https://api.dexlabs.systems/academy/"
}
],
"favorites": []
}
{
"servers": [
{
"uuid": "d9773558-6ddf-4d00-8803-d830a22a842b",
"description": "OpenFusion Public Server - Original",
"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": "play.dexlabs.systems:24000",
"version": "beta-20111013",
"endpoint": "https://api.dexlabs.systems/academy/"
}
],
"favorites": []
}

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 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 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 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&nbsp;<i class="fas fa-angle-double-right"></i></button>
</div>
</div>
</div>
<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>
</div>
<div class="modal-body">
<p class="text-monospace">Version 1.3</p>
<p>©2020 OpenFusion Contributors<br>OpenFusion is licensed under MIT.<br></p>
<p class="text-monospace">Version 1.4</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 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(&#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>
</div>
@@ -75,6 +82,19 @@
</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-dialog modal-dialog-centered" role="document">
<div class="modal-content">
@@ -88,7 +108,20 @@
</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>
<div id="client" style="width: 100%;height: 100%;margin: 0;padding: 0;background: #000;clear:both;"></div>
@@ -103,4 +136,4 @@
<script src="assets/js/eastereggs.js"></script>
</body>
</html>
</html>

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.