Compare commits
39 Commits
1.3
...
3c0b07e61a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3c0b07e61a | ||
|
|
2640c8f1a6 | ||
|
|
c964e840e4 | ||
| 0060f37e6c | |||
| 9bfe3d6d99 | |||
| 63c4616645 | |||
|
|
645e5d4279 | ||
|
|
7ce21cdddc | ||
|
|
8d6e546628 | ||
|
|
6e881cbfaf | ||
|
|
8d5a8df023 | ||
|
|
e02f94604d | ||
|
|
2fcbb9ba06 | ||
|
|
a0f2ec90d0 | ||
|
|
d21b0040fd | ||
|
|
1a9c467758 | ||
|
|
c2cd2d5cd6 | ||
|
|
53bf47d6da | ||
|
|
c6e3316003 | ||
|
|
9c5338da2d | ||
|
|
c997ab96ec | ||
|
|
17ca1f3c24 | ||
|
|
71d3b970fc | ||
|
|
4def3b6028 | ||
|
|
0cdf3df4d4 | ||
|
|
65c2914ef9 | ||
|
|
54f083c22d | ||
|
|
79bee6f1e4 | ||
|
|
24a802facc | ||
|
|
33be67f7e9 | ||
|
|
d09f06fb26 | ||
|
|
812ddeb0b8 | ||
|
|
5cbe30f39f | ||
|
|
78b6c86410 | ||
|
|
bfac6e9250 | ||
|
|
6f42297102 | ||
|
|
5d5dce9647 | ||
|
|
f321ebdf56 | ||
|
|
3f6b2e3e58 |
5
.gitattributes
vendored
Normal 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
@@ -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
|
||||
21
LICENSE.md
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2020-2022 OpenFusion Contributors
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
131
assets/css/openfusion.css
Normal 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;
|
||||
}
|
||||
|
Before Width: | Height: | Size: 692 KiB After Width: | Height: | Size: 692 KiB |
|
Before Width: | Height: | Size: 141 KiB After Width: | Height: | Size: 141 KiB |
|
Before Width: | Height: | Size: 829 KiB After Width: | Height: | Size: 829 KiB |
|
Before Width: | Height: | Size: 123 B After Width: | Height: | Size: 123 B |
|
Before Width: | Height: | Size: 123 B After Width: | Height: | Size: 123 B |
|
Before Width: | Height: | Size: 123 B After Width: | Height: | Size: 123 B |
|
Before Width: | Height: | Size: 83 KiB After Width: | Height: | Size: 83 KiB |
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 9.6 KiB After Width: | Height: | Size: 9.6 KiB |
|
Before Width: | Height: | Size: 176 B After Width: | Height: | Size: 176 B |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 722 KiB After Width: | Height: | Size: 722 KiB |
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
@@ -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);
|
||||
});
|
||||
10
build/delete-default-app.js
Normal 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
|
After Width: | Height: | Size: 329 KiB |
62
build/utils/LICENSE.WEBPLAYER.md
Normal file
@@ -0,0 +1,62 @@
|
||||
Web Player License Agreement
|
||||
|
||||
Last updated: June 21, 2013
|
||||
|
||||
PLEASE READ CAREFULLY: BY INSTALLING THE SOFTWARE (AS DEFINED BELOW), YOU (EITHER ON BEHALF OF YOURSELF AS AN INDIVIDUAL OR ON BEHALF OF AN ENTITY AS ITS AUTHORIZED REPRESENTATIVE) AGREE TO ALL OF THE TERMS OF THIS END USER LICENSE AGREEMENT REGARDING THE USE OF THE SOFTWARE.
|
||||
1. GRANT OF LICENSE:
|
||||
|
||||
You may install this Software on your computer to experience Unity web content.
|
||||
2. TITLE:
|
||||
|
||||
You acknowledge that no title to the intellectual property in the Software is transferred to you. Title, ownership, rights, and intellectual property rights in and to the Software shall remain that of Unity Technologies. The Software is protected by copyright laws of the United States and international treaties.
|
||||
3. ANONYMOUS USAGE STATISTICS:
|
||||
|
||||
You accept that the first time the Unity Web Player is used, anonymous information about the computer it's loaded on is submitted to Unity Technologies ApS. This only happens once time, and contains no personally identifiable information. The information submitted is:
|
||||
|
||||
(a) Operating system and version
|
||||
|
||||
(b) The make of the CPU, and number of CPUs present
|
||||
|
||||
(c) The graphics card type and vendor name
|
||||
|
||||
(d) Graphics card driver name and version (example: "nv4disp.dll 6.10.93.71")
|
||||
|
||||
(e) Which graphics API is in use (example: "OpenGL 2.1" or "Direct3D 9.0c")
|
||||
|
||||
(f) Amount of system and video RAM present
|
||||
|
||||
(g) Current desktop resolution
|
||||
|
||||
(h) Version of the Unity Web Player
|
||||
|
||||
(i) A number describing whether running on Mac or Windows
|
||||
|
||||
(j) A checksum of all the data that gets sent to verify that it did transmit correctly
|
||||
3. DISTRIBUTION:
|
||||
|
||||
You acknowledge that only Unity Technologies ApS and its designated distribution partners may distribute the Unity Web Player, without a special permission.
|
||||
4. CEASE OF DISTRIBUTION:
|
||||
|
||||
In case Unity Technologies ApS and its designated distribution partners permanently cease to distribute the Unity Web Player, versions of the Unity Web Player that have previously been distributed by Unity Technologies ApS become freely redistributable.
|
||||
5. DISCLAIMER OF WARRANTY:
|
||||
|
||||
YOU AGREE THAT UNITY TECHNOLOGIES APS HAS MADE NO EXPRESS WARRANTIES, ORAL OR WRITTEN, TO YOU REGARDING THE PRODUCTS AND THAT THE PRODUCTS ARE BEING PROVIDED TO YOU 'AS IS' WITHOUT WARRANTY OF ANY KIND. UNITY TECHNOLOGIES APS DISCLAIMS ANY AND ALL OTHER WARRANTIES, WHETHER EXPRESSED, IMPLIED, OR STATUTORY. YOUR RIGHTS MAY VARY DEPENDING ON THE STATE IN WHICH YOU LIVE. UNITY TECHNOLOGIES APS SHALL NOT BE LIABLE FOR INDIRECT, INCIDENTAL, SPECIAL, COVER, RELIANCE, OR CONSEQUENTIAL DAMAGES RESULTING FROM THE USE OF THIS PRODUCT.
|
||||
6. LIMITATION OF LIABILITY:
|
||||
|
||||
YOU USE THIS PROGRAM SOLELY AT YOUR OWN RISK. IN NO EVENT SHALL UNITY TECHNOLOGIES APS BE LIABLE TO YOU FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO ANY LOSS, OR OTHER INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND ARISING OUT OF THE USE OF THE SOFTWARE, EVEN IF UNITY TECHNOLOGIES APS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. IN NO EVENT WILL UNITY TECHNOLOGIES APS BE LIABLE FOR ANY CLAIM, WHETHER IN CONTRACT, TORT, OR ANY OTHER THEORY OF LIABILITY, EXCEED THE COST OF THE SOFTWARE. THIS LIMITATION SHALL APPLY TO CLAIMS OF PERSONAL INJURY TO THE EXTENT PERMITTED BY LAW.
|
||||
7. TERMINATION:
|
||||
|
||||
This Agreement shall terminate automatically if you fail to comply with the limitations described in this Agreement. No notice shall be required to effectuate such termination. Upon termination, you must remove and destroy all copies of the Software.
|
||||
8. MISCELLANEOUS:
|
||||
|
||||
Severability: In the event of invalidity of any provision of this Agreement, the parties agree that such invalidity shall not affect the validity of the remaining portions of this Agreement.
|
||||
|
||||
Export: You agree that you will not export or re-export the Software outside of the jurisdiction in which you obtained it without the appropriate United States or foreign government licenses.
|
||||
|
||||
Governing Law: This Agreement will be governed by the laws of the State of Denmark as they are applied to agreements between Denmark residents entered into and to be performed entirely within Denmark. The United Nations Convention on Contracts for the International Sale of Goods is specifically disclaimed.
|
||||
|
||||
Entire Agreement: You agree that this is the entire agreement between you and Unity Technologies ApS, which supersedes any prior agreement, whether written or oral, and all other communications between Unity Technologies ApS and you relating to the subject matter of this Agreement.
|
||||
|
||||
Reservation of rights: All rights not expressly granted in this Agreement are reserved by Unity Technologies ApS.
|
||||
|
||||
Derivative work: Whether you are licensing the Software as an individual or on behalf of an entity, you may not: (a) reverse engineer, decompile, or disassemble the Software or attempt to discover the source code; (b) modify, or create derivative works based upon, the Software in whole or in part without the express written consent of Unity Technologies ApS; (c) distribute copies of the Software; (d) remove any proprietary notices or labels on the Software; (e) resell, lease, rent, transfer, sublicense, or otherwise transfer rights to the Software.
|
||||
BIN
build/utils/WebPlayer/loader/_UnityWebPluginAX.ocx
Normal file
BIN
build/utils/WebPlayer/mono/fusion-2.x.x/UnityWebPlayerUpdate.exe
Normal file
BIN
build/utils/WebPlayer/mono/fusion-2.x.x/UnityWebPluginAX.ocx
Normal file
BIN
build/utils/WebPlayer/mono/fusion-2.x.x/npUnity3D32.dll
Normal file
BIN
build/utils/WebPlayer/mono/fusion-2.x.x/webplayer_win.dll
Normal file
BIN
build/utils/WebPlayer/player/fusion-2.x.x/Data/lib/Boo.Lang.dll
Normal file
BIN
build/utils/WebPlayer/player/fusion-2.x.x/UnityWebPluginAX.ocx
Normal file
BIN
build/utils/WebPlayer/player/fusion-2.x.x/npUnity3D32.dll
Normal file
BIN
build/utils/WebPlayer/player/fusion-2.x.x/wrap_oal.dll
Normal file
5
defaults/config.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"autoupdate-check": true,
|
||||
"cache-swapping": true,
|
||||
"last-version-initialized": "1.4"
|
||||
}
|
||||
@@ -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
@@ -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/"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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 <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 <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('https://github.com/OpenFusionProject/OpenFusion','_blank');"><i class="fab fa-github" style="font-size: 24px;"></i></button><button class="btn btn-primary border rounded border-primary pb-1 pt-1 pl-2 pr-2" data-toggle="tooltip" data-bs-tooltip="" type="button" title="DIscord Chat" onclick="window.open('https://discord.gg/DYavckB','_blank');"><i class="fab fa-discord" style="font-size: 24px; position:relative; top: 1px;"></i></button></div>
|
||||
<div class="col"><button class="btn btn-primary border rounded border-primary pb-1 pt-1 mr-2 pl-2 pr-2" data-toggle="tooltip" data-bs-tooltip="" type="button" title="Github Page" onclick="window.open('https://github.com/OpenFusionProject/OpenFusion','_blank');"><i class="fab fa-github" style="font-size: 24px;"></i></button><button class="btn btn-primary border rounded border-primary pb-1 pt-1 pl-2 pr-2" data-toggle="tooltip" data-bs-tooltip="" type="button" title="Discord Chat" onclick="window.open('https://discord.gg/DYavckB','_blank');"><i class="fab fa-discord" style="font-size: 24px; position:relative; top: 1px;"></i></button></div>
|
||||
<div class="col text-right"><button class="btn btn-primary border rounded border-primary" type="button" data-dismiss="modal">Close</button></div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -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: </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
@@ -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
69
package.json
Normal 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"
|
||||
}
|
||||
}
|
||||
13
patches/electron-prebuilt+0.31.2.patch
Normal 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) {
|
||||
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"autoupdate-check": true,
|
||||
"cache-swapping": false,
|
||||
"initial-setup-completed": true
|
||||
}
|
||||
@@ -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/"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
http://ht.cdn.turner.com/ff/big/beta-20100104/
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
assets/img/welcome.png
|
||||
@@ -1 +0,0 @@
|
||||
144.202.52.9:23000
|
||||
@@ -1 +0,0 @@
|
||||
http://api.dexlabs.systems/getranks
|
||||
@@ -1 +0,0 @@
|
||||
assets/img/welcome.png
|
||||
@@ -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()
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"name" : "OpenFusionClient",
|
||||
"version" : "1.3.0",
|
||||
"main" : "index.js"
|
||||
}
|
||||