mirror of
https://github.com/Auties00/Reboot-Launcher.git
synced 2026-01-13 19:22:22 +01:00
Compare commits
39 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2046cb14f6 | ||
|
|
e3f7a1d2cc | ||
|
|
cd6752ed3f | ||
|
|
e1df46efd9 | ||
|
|
dccd05e57f | ||
|
|
eb7745cc4d | ||
|
|
7d5e17642a | ||
|
|
6f91ad0404 | ||
|
|
0c38528e77 | ||
|
|
dfebe74518 | ||
|
|
bfe15e43d9 | ||
|
|
62dae468bf | ||
|
|
a9af28273a | ||
|
|
232bf8fbfc | ||
|
|
a787c4efc9 | ||
|
|
4c3fe9bc65 | ||
|
|
3f88d5ed80 | ||
|
|
582270849e | ||
|
|
1ef4e76768 | ||
|
|
cd8c8e6dd9 | ||
|
|
170a878e79 | ||
|
|
a2505011d9 | ||
|
|
3e2c2e96b1 | ||
|
|
00802ac6da | ||
|
|
1d68469297 | ||
|
|
83878db8c5 | ||
|
|
e3b8d7d182 | ||
|
|
45b8629207 | ||
|
|
2df1b81485 | ||
|
|
018ccb7f8e | ||
|
|
0d64251623 | ||
|
|
47adb572ea | ||
|
|
e3a42d6b81 | ||
|
|
e24f4e97b3 | ||
|
|
0a775e2f3f | ||
|
|
2bf084d120 | ||
|
|
93c5d6c56b | ||
|
|
46034aa1fa | ||
|
|
3069f3aa05 |
1
.gitattributes
vendored
Normal file
1
.gitattributes
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
backend/**/* linguist-vendored
|
||||||
23
README.md
23
README.md
@@ -1,9 +1,16 @@
|
|||||||
# Reboot Launcher
|

|
||||||
|
|
||||||

|
GUI and CLI Launcher for [Project Reboot](https://github.com/Milxnor/Project-Reboot-3.0/)
|
||||||

|
Join our discord at https://discord.gg/reboot
|
||||||

|
|
||||||

|
## Modules
|
||||||

|
|
||||||

|
- COMMON: Shared business logic for CLI and GUI modules
|
||||||

|
- CLI: Work in progress command line interface to host a Fortnite Server on a Windows VPS easily, developed in Dart
|
||||||
|
- GUI: Stable graphical user interface to play and host Fortnite S0-14
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
Check the releases section
|
||||||
|
|||||||
8
archive/README.md
Normal file
8
archive/README.md
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
# Builds Archive
|
||||||
|
|
||||||
|
Builds are stored on a Cloudflare R2 instance at `https://builds.rebootfn.org/versions.json`.
|
||||||
|
If you want to move them to another AWS-compatible object storage, run:
|
||||||
|
```
|
||||||
|
move.ps1
|
||||||
|
```
|
||||||
|
and provide the required parameters.
|
||||||
98
archive/move.ps1
Normal file
98
archive/move.ps1
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
param(
|
||||||
|
[Parameter(Mandatory=$true)]
|
||||||
|
[string]$UrlListPath, # Path to a text file with one URL per line
|
||||||
|
|
||||||
|
[Parameter(Mandatory=$true)]
|
||||||
|
[string]$BucketName, # Name of the R2 bucket
|
||||||
|
|
||||||
|
[Parameter(Mandatory=$true)]
|
||||||
|
[string]$AccessKey, # Your R2 access key
|
||||||
|
|
||||||
|
[Parameter(Mandatory=$true)]
|
||||||
|
[string]$SecretKey, # Your R2 secret key
|
||||||
|
|
||||||
|
[Parameter(Mandatory=$true)]
|
||||||
|
[string]$EndPointURL, # Your R2 endpoint URL, e.g. https://<account_id>.r2.cloudflarestorage.com
|
||||||
|
|
||||||
|
[Parameter(Mandatory=$false)]
|
||||||
|
[int]$MaxConcurrentConnections = 16, # Number of concurrent connections for each file download
|
||||||
|
|
||||||
|
[Parameter(Mandatory=$false)]
|
||||||
|
[int]$SplitCount = 16, # Number of segments to split the download into
|
||||||
|
|
||||||
|
[Parameter(Mandatory=$false)]
|
||||||
|
[string]$AwsRegion = "auto" # Region; often "auto" works for R2, but can be set if needed
|
||||||
|
)
|
||||||
|
|
||||||
|
# Set AWS environment variables for this session
|
||||||
|
$Env:AWS_ACCESS_KEY_ID = $AccessKey
|
||||||
|
$Env:AWS_SECRET_ACCESS_KEY = $SecretKey
|
||||||
|
$Env:AWS_REGION = $AwsRegion # If required, or leave as "auto"
|
||||||
|
|
||||||
|
# Read all URLs from file
|
||||||
|
$Urls = Get-Content $UrlListPath | Where-Object { $_ -and $_. Trim() -ne "" }
|
||||||
|
|
||||||
|
# Ensure aria2 is available
|
||||||
|
if (-not (Get-Command aria2c -ErrorAction SilentlyContinue)) {
|
||||||
|
Write-Error "aria2c not found in PATH. Please install aria2."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Ensure aws CLI is available
|
||||||
|
if (-not (Get-Command aws -ErrorAction SilentlyContinue)) {
|
||||||
|
Write-Error "aws CLI not found in PATH. Please install AWS CLI."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
function Process-Url {
|
||||||
|
param(
|
||||||
|
[string]$Url,
|
||||||
|
[string]$BucketName,
|
||||||
|
[string]$EndPointURL,
|
||||||
|
[int]$MaxConcurrentConnections,
|
||||||
|
[int]$SplitCount
|
||||||
|
)
|
||||||
|
|
||||||
|
# Extract the filename from the URL
|
||||||
|
$FileName = Split-Path -Leaf $Url
|
||||||
|
|
||||||
|
try {
|
||||||
|
Write-Host "Downloading: $Url"
|
||||||
|
|
||||||
|
# Use aria2c to download with multiple connections
|
||||||
|
& aria2c `
|
||||||
|
--max-connection-per-server=$MaxConcurrentConnections `
|
||||||
|
--split=$SplitCount `
|
||||||
|
--out=$FileName `
|
||||||
|
--check-certificate=false `
|
||||||
|
--header="Cookie: _c_t_c=1" `
|
||||||
|
$Url
|
||||||
|
|
||||||
|
if (!(Test-Path $FileName)) {
|
||||||
|
Write-Host "Failed to download $Url"
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "Uploading $FileName to R2 bucket: $BucketName"
|
||||||
|
& aws s3 cp $FileName "s3://$BucketName/$FileName" --endpoint-url $EndPointURL
|
||||||
|
if ($LASTEXITCODE -ne 0) {
|
||||||
|
Write-Host "Failed to upload $FileName to R2"
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "Upload successful. Deleting local file: $FileName"
|
||||||
|
Remove-Item $FileName -Force
|
||||||
|
|
||||||
|
Write-Host "Completed processing of $FileName."
|
||||||
|
|
||||||
|
} catch {
|
||||||
|
Write-Host "Error processing $Url"
|
||||||
|
Write-Host $_
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Process each URL sequentially here. If you'd like to run multiple URLs in parallel,
|
||||||
|
# you could replace the foreach loop with a ForEach-Object -Parallel block.
|
||||||
|
foreach ($Url in $Urls) {
|
||||||
|
Process-Url -Url $Url -BucketName $BucketName -EndPointURL $EndPointURL -MaxConcurrentConnections $MaxConcurrentConnections -SplitCount $SplitCount
|
||||||
|
}
|
||||||
85
archive/versions.txt
Normal file
85
archive/versions.txt
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
https://builds.rebootfn.org/1.7.2.zip
|
||||||
|
https://builds.rebootfn.org/1.8.rar
|
||||||
|
https://builds.rebootfn.org/1.8.1.rar
|
||||||
|
https://builds.rebootfn.org/1.8.2.rar
|
||||||
|
https://builds.rebootfn.org/1.9.rar
|
||||||
|
https://builds.rebootfn.org/1.9.1.rar
|
||||||
|
https://builds.rebootfn.org/1.10.rar
|
||||||
|
https://builds.rebootfn.org/1.11.zip
|
||||||
|
https://builds.rebootfn.org/2.1.0.zip
|
||||||
|
https://builds.rebootfn.org/2.2.0.rar
|
||||||
|
https://builds.rebootfn.org/2.3.rar
|
||||||
|
https://builds.rebootfn.org/2.4.0.zip
|
||||||
|
https://builds.rebootfn.org/2.4.2.zip
|
||||||
|
https://builds.rebootfn.org/2.5.0.rar
|
||||||
|
https://builds.rebootfn.org/3.0.zip
|
||||||
|
https://builds.rebootfn.org/3.1.rar
|
||||||
|
https://builds.rebootfn.org/3.1.1.zip
|
||||||
|
https://builds.rebootfn.org/3.2.zip
|
||||||
|
https://builds.rebootfn.org/3.3.rar
|
||||||
|
https://builds.rebootfn.org/3.5.rar
|
||||||
|
https://builds.rebootfn.org/3.6.zip
|
||||||
|
https://builds.rebootfn.org/4.0.zip
|
||||||
|
https://builds.rebootfn.org/4.1.zip
|
||||||
|
https://builds.rebootfn.org/4.2.zip
|
||||||
|
https://builds.rebootfn.org/4.4.rar
|
||||||
|
https://builds.rebootfn.org/4.5.rar
|
||||||
|
https://builds.rebootfn.org/5.00.rar
|
||||||
|
https://builds.rebootfn.org/5.0.1.rar
|
||||||
|
https://builds.rebootfn.org/5.10.rar
|
||||||
|
https://builds.rebootfn.org/5.21.rar
|
||||||
|
https://builds.rebootfn.org/5.30.rar
|
||||||
|
https://builds.rebootfn.org/5.40.rar
|
||||||
|
https://builds.rebootfn.org/6.00.rar
|
||||||
|
https://builds.rebootfn.org/6.01.rar
|
||||||
|
https://builds.rebootfn.org/6.1.1.rar
|
||||||
|
https://builds.rebootfn.org/6.02.rar
|
||||||
|
https://builds.rebootfn.org/6.2.1.rar
|
||||||
|
https://builds.rebootfn.org/6.10.rar
|
||||||
|
https://builds.rebootfn.org/6.10.1.rar
|
||||||
|
https://builds.rebootfn.org/6.10.2.rar
|
||||||
|
https://builds.rebootfn.org/6.21.rar
|
||||||
|
https://builds.rebootfn.org/6.22.rar
|
||||||
|
https://builds.rebootfn.org/6.30.rar
|
||||||
|
https://builds.rebootfn.org/6.31.rar
|
||||||
|
https://builds.rebootfn.org/7.00.rar
|
||||||
|
https://builds.rebootfn.org/7.10.rar
|
||||||
|
https://builds.rebootfn.org/7.20.rar
|
||||||
|
https://builds.rebootfn.org/7.30.zip
|
||||||
|
https://builds.rebootfn.org/7.40.rar
|
||||||
|
https://builds.rebootfn.org/8.00.zip
|
||||||
|
https://builds.rebootfn.org/8.20.rar
|
||||||
|
https://builds.rebootfn.org/8.30.rar
|
||||||
|
https://builds.rebootfn.org/8.40.zip
|
||||||
|
https://builds.rebootfn.org/8.50.zip
|
||||||
|
https://builds.rebootfn.org/8.51.rar
|
||||||
|
https://builds.rebootfn.org/9.00.zip
|
||||||
|
https://builds.rebootfn.org/9.01.zip
|
||||||
|
https://builds.rebootfn.org/9.10.rar
|
||||||
|
https://builds.rebootfn.org/9.21.zip
|
||||||
|
https://builds.rebootfn.org/9.30.zip
|
||||||
|
https://builds.rebootfn.org/9.40.zip
|
||||||
|
https://builds.rebootfn.org/9.41.rar
|
||||||
|
https://builds.rebootfn.org/10.00.zip
|
||||||
|
https://builds.rebootfn.org/10.10.zip
|
||||||
|
https://builds.rebootfn.org/10.20.zip
|
||||||
|
https://builds.rebootfn.org/10.31.zip
|
||||||
|
https://builds.rebootfn.org/10.40.rar
|
||||||
|
https://builds.rebootfn.org/11.00.zip
|
||||||
|
https://builds.rebootfn.org/11.31.rar
|
||||||
|
https://builds.rebootfn.org/12.00.rar
|
||||||
|
https://builds.rebootfn.org/12.21.zip
|
||||||
|
https://builds.rebootfn.org/12.50.zip
|
||||||
|
https://builds.rebootfn.org/12.61.zip
|
||||||
|
https://builds.rebootfn.org/13.00.rar
|
||||||
|
https://builds.rebootfn.org/13.40.zip
|
||||||
|
https://builds.rebootfn.org/14.00.rar
|
||||||
|
https://builds.rebootfn.org/14.40.rar
|
||||||
|
https://builds.rebootfn.org/14.60.rar
|
||||||
|
https://builds.rebootfn.org/15.30.rar
|
||||||
|
https://builds.rebootfn.org/16.40.rar
|
||||||
|
https://builds.rebootfn.org/17.30.zip
|
||||||
|
https://builds.rebootfn.org/17.50.zip
|
||||||
|
https://builds.rebootfn.org/18.40.zip
|
||||||
|
https://builds.rebootfn.org/19.10.rar
|
||||||
|
https://builds.rebootfn.org/20.40.zip"
|
||||||
0
lawin/LICENSE → backend/LICENSE
vendored
0
lawin/LICENSE → backend/LICENSE
vendored
4
backend/README.md
vendored
Normal file
4
backend/README.md
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
# Backend
|
||||||
|
Fork of LawinV1
|
||||||
|
Awaiting rewrite in Dart
|
||||||
|
Use build.bat to generate the executable
|
||||||
0
lawin/build.bat → backend/build.bat
vendored
0
lawin/build.bat → backend/build.bat
vendored
12
lawin/index.js → backend/index.js
vendored
12
lawin/index.js → backend/index.js
vendored
@@ -4,6 +4,16 @@ const fs = require("fs");
|
|||||||
const path = require("path");
|
const path = require("path");
|
||||||
const cookieParser = require("cookie-parser");
|
const cookieParser = require("cookie-parser");
|
||||||
|
|
||||||
|
const audit = require('express-requests-logger')
|
||||||
|
express.use(audit({
|
||||||
|
request: {
|
||||||
|
maxBodyLength: 150
|
||||||
|
},
|
||||||
|
response: {
|
||||||
|
maxBodyLength: 150
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
express.use(Express.json());
|
express.use(Express.json());
|
||||||
express.use(Express.urlencoded({ extended: true }));
|
express.use(Express.urlencoded({ extended: true }));
|
||||||
express.use(Express.static('public'));
|
express.use(Express.static('public'));
|
||||||
@@ -25,7 +35,7 @@ express.use(require("./structure/matchmaking.js"));
|
|||||||
express.use(require("./structure/cloudstorage.js"));
|
express.use(require("./structure/cloudstorage.js"));
|
||||||
express.use(require("./structure/mcp.js"));
|
express.use(require("./structure/mcp.js"));
|
||||||
|
|
||||||
const port = process.env.PORT || 3551;
|
const port = 3551;
|
||||||
express.listen(port, () => {
|
express.listen(port, () => {
|
||||||
console.log("LawinServer started listening on port", port);
|
console.log("LawinServer started listening on port", port);
|
||||||
|
|
||||||
0
backend/install_packages.bat
vendored
Normal file
0
backend/install_packages.bat
vendored
Normal file
248
lawin/package-lock.json → backend/package-lock.json
generated
vendored
248
lawin/package-lock.json → backend/package-lock.json
generated
vendored
@@ -11,6 +11,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"cookie-parser": "^1.4.6",
|
"cookie-parser": "^1.4.6",
|
||||||
"express": "^4.18.2",
|
"express": "^4.18.2",
|
||||||
|
"express-requests-logger": "^4.0.0",
|
||||||
"ini": "^2.0.0",
|
"ini": "^2.0.0",
|
||||||
"nexe": "^4.0.0-rc.6",
|
"nexe": "^4.0.0-rc.6",
|
||||||
"path": "^0.12.7",
|
"path": "^0.12.7",
|
||||||
@@ -388,6 +389,23 @@
|
|||||||
"node": ">v0.4.12"
|
"node": ">v0.4.12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/bunyan": {
|
||||||
|
"version": "1.8.15",
|
||||||
|
"resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz",
|
||||||
|
"integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==",
|
||||||
|
"engines": [
|
||||||
|
"node >=0.10.0"
|
||||||
|
],
|
||||||
|
"bin": {
|
||||||
|
"bunyan": "bin/bunyan"
|
||||||
|
},
|
||||||
|
"optionalDependencies": {
|
||||||
|
"dtrace-provider": "~0.8",
|
||||||
|
"moment": "^2.19.3",
|
||||||
|
"mv": "~2",
|
||||||
|
"safe-json-stringify": "~1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/bytes": {
|
"node_modules/bytes": {
|
||||||
"version": "3.1.2",
|
"version": "3.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
|
||||||
@@ -1063,6 +1081,19 @@
|
|||||||
"node": ">=4"
|
"node": ">=4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/dtrace-provider": {
|
||||||
|
"version": "0.8.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz",
|
||||||
|
"integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==",
|
||||||
|
"hasInstallScript": true,
|
||||||
|
"optional": true,
|
||||||
|
"dependencies": {
|
||||||
|
"nan": "^2.14.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/duplexer3": {
|
"node_modules/duplexer3": {
|
||||||
"version": "0.1.5",
|
"version": "0.1.5",
|
||||||
"resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz",
|
"resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz",
|
||||||
@@ -1168,6 +1199,16 @@
|
|||||||
"node": ">= 0.10.0"
|
"node": ">= 0.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/express-requests-logger": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/express-requests-logger/-/express-requests-logger-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-NHQptnDY0fceiTSWLnW0dbJSFlrvbFpCGHmY6LsTMmJLgkyO3x8qAJ+EsryQRMga20YH8Ynt/vnmg23QP07h1Q==",
|
||||||
|
"dependencies": {
|
||||||
|
"bunyan": "^1.8.14",
|
||||||
|
"flat": "^5.0.2",
|
||||||
|
"lodash": "^4.17.14"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/express/node_modules/cookie": {
|
"node_modules/express/node_modules/cookie": {
|
||||||
"version": "0.5.0",
|
"version": "0.5.0",
|
||||||
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
|
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
|
||||||
@@ -1292,6 +1333,14 @@
|
|||||||
"node": ">= 0.8"
|
"node": ">= 0.8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/flat": {
|
||||||
|
"version": "5.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
|
||||||
|
"integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
|
||||||
|
"bin": {
|
||||||
|
"flat": "cli.js"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/fn.name": {
|
"node_modules/fn.name": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz",
|
||||||
@@ -1788,6 +1837,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz",
|
||||||
"integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A=="
|
"integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A=="
|
||||||
},
|
},
|
||||||
|
"node_modules/lodash": {
|
||||||
|
"version": "4.17.21",
|
||||||
|
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
||||||
|
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
|
||||||
|
},
|
||||||
"node_modules/log-symbols": {
|
"node_modules/log-symbols": {
|
||||||
"version": "2.2.0",
|
"version": "2.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
|
||||||
@@ -1973,6 +2027,15 @@
|
|||||||
"node": ">=10"
|
"node": ">=10"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/moment": {
|
||||||
|
"version": "2.30.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz",
|
||||||
|
"integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==",
|
||||||
|
"optional": true,
|
||||||
|
"engines": {
|
||||||
|
"node": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/moo-server": {
|
"node_modules/moo-server": {
|
||||||
"version": "1.3.0",
|
"version": "1.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/moo-server/-/moo-server-1.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/moo-server/-/moo-server-1.3.0.tgz",
|
||||||
@@ -2009,6 +2072,77 @@
|
|||||||
"readable-stream": "^3.6.0"
|
"readable-stream": "^3.6.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/mv": {
|
||||||
|
"version": "2.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz",
|
||||||
|
"integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==",
|
||||||
|
"optional": true,
|
||||||
|
"dependencies": {
|
||||||
|
"mkdirp": "~0.5.1",
|
||||||
|
"ncp": "~2.0.0",
|
||||||
|
"rimraf": "~2.4.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.8.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/mv/node_modules/glob": {
|
||||||
|
"version": "6.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
|
||||||
|
"integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==",
|
||||||
|
"deprecated": "Glob versions prior to v9 are no longer supported",
|
||||||
|
"optional": true,
|
||||||
|
"dependencies": {
|
||||||
|
"inflight": "^1.0.4",
|
||||||
|
"inherits": "2",
|
||||||
|
"minimatch": "2 || 3",
|
||||||
|
"once": "^1.3.0",
|
||||||
|
"path-is-absolute": "^1.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/mv/node_modules/mkdirp": {
|
||||||
|
"version": "0.5.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
|
||||||
|
"integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
|
||||||
|
"optional": true,
|
||||||
|
"dependencies": {
|
||||||
|
"minimist": "^1.2.6"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"mkdirp": "bin/cmd.js"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/mv/node_modules/rimraf": {
|
||||||
|
"version": "2.4.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz",
|
||||||
|
"integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==",
|
||||||
|
"deprecated": "Rimraf versions prior to v4 are no longer supported",
|
||||||
|
"optional": true,
|
||||||
|
"dependencies": {
|
||||||
|
"glob": "^6.0.1"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"rimraf": "bin.js"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/nan": {
|
||||||
|
"version": "2.20.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz",
|
||||||
|
"integrity": "sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==",
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"node_modules/ncp": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==",
|
||||||
|
"optional": true,
|
||||||
|
"bin": {
|
||||||
|
"ncp": "bin/ncp"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/negotiator": {
|
"node_modules/negotiator": {
|
||||||
"version": "0.6.3",
|
"version": "0.6.3",
|
||||||
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
|
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
|
||||||
@@ -2534,6 +2668,12 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"node_modules/safe-json-stringify": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz",
|
||||||
|
"integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==",
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
"node_modules/safe-stable-stringify": {
|
"node_modules/safe-stable-stringify": {
|
||||||
"version": "2.4.3",
|
"version": "2.4.3",
|
||||||
"resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz",
|
"resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz",
|
||||||
@@ -3405,6 +3545,17 @@
|
|||||||
"wrench": "1.3.x"
|
"wrench": "1.3.x"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"bunyan": {
|
||||||
|
"version": "1.8.15",
|
||||||
|
"resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz",
|
||||||
|
"integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==",
|
||||||
|
"requires": {
|
||||||
|
"dtrace-provider": "~0.8",
|
||||||
|
"moment": "^2.19.3",
|
||||||
|
"mv": "~2",
|
||||||
|
"safe-json-stringify": "~1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"bytes": {
|
"bytes": {
|
||||||
"version": "3.1.2",
|
"version": "3.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
|
||||||
@@ -3941,6 +4092,15 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"dtrace-provider": {
|
||||||
|
"version": "0.8.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz",
|
||||||
|
"integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==",
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"nan": "^2.14.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"duplexer3": {
|
"duplexer3": {
|
||||||
"version": "0.1.5",
|
"version": "0.1.5",
|
||||||
"resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz",
|
"resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz",
|
||||||
@@ -4038,6 +4198,16 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"express-requests-logger": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/express-requests-logger/-/express-requests-logger-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-NHQptnDY0fceiTSWLnW0dbJSFlrvbFpCGHmY6LsTMmJLgkyO3x8qAJ+EsryQRMga20YH8Ynt/vnmg23QP07h1Q==",
|
||||||
|
"requires": {
|
||||||
|
"bunyan": "^1.8.14",
|
||||||
|
"flat": "^5.0.2",
|
||||||
|
"lodash": "^4.17.14"
|
||||||
|
}
|
||||||
|
},
|
||||||
"ext-list": {
|
"ext-list": {
|
||||||
"version": "2.2.2",
|
"version": "2.2.2",
|
||||||
"resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz",
|
||||||
@@ -4130,6 +4300,11 @@
|
|||||||
"unpipe": "~1.0.0"
|
"unpipe": "~1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"flat": {
|
||||||
|
"version": "5.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
|
||||||
|
"integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ=="
|
||||||
|
},
|
||||||
"fn.name": {
|
"fn.name": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz",
|
||||||
@@ -4496,6 +4671,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz",
|
||||||
"integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A=="
|
"integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A=="
|
||||||
},
|
},
|
||||||
|
"lodash": {
|
||||||
|
"version": "4.17.21",
|
||||||
|
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
||||||
|
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
|
||||||
|
},
|
||||||
"log-symbols": {
|
"log-symbols": {
|
||||||
"version": "2.2.0",
|
"version": "2.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
|
||||||
@@ -4626,6 +4806,12 @@
|
|||||||
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
|
||||||
"integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="
|
"integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="
|
||||||
},
|
},
|
||||||
|
"moment": {
|
||||||
|
"version": "2.30.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz",
|
||||||
|
"integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==",
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
"moo-server": {
|
"moo-server": {
|
||||||
"version": "1.3.0",
|
"version": "1.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/moo-server/-/moo-server-1.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/moo-server/-/moo-server-1.3.0.tgz",
|
||||||
@@ -4645,6 +4831,62 @@
|
|||||||
"readable-stream": "^3.6.0"
|
"readable-stream": "^3.6.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mv": {
|
||||||
|
"version": "2.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz",
|
||||||
|
"integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==",
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"mkdirp": "~0.5.1",
|
||||||
|
"ncp": "~2.0.0",
|
||||||
|
"rimraf": "~2.4.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"glob": {
|
||||||
|
"version": "6.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
|
||||||
|
"integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==",
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"inflight": "^1.0.4",
|
||||||
|
"inherits": "2",
|
||||||
|
"minimatch": "2 || 3",
|
||||||
|
"once": "^1.3.0",
|
||||||
|
"path-is-absolute": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mkdirp": {
|
||||||
|
"version": "0.5.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
|
||||||
|
"integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"minimist": "^1.2.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"rimraf": {
|
||||||
|
"version": "2.4.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz",
|
||||||
|
"integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==",
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"glob": "^6.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nan": {
|
||||||
|
"version": "2.20.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz",
|
||||||
|
"integrity": "sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==",
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"ncp": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==",
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
"negotiator": {
|
"negotiator": {
|
||||||
"version": "0.6.3",
|
"version": "0.6.3",
|
||||||
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
|
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
|
||||||
@@ -5000,6 +5242,12 @@
|
|||||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
||||||
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
|
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
|
||||||
},
|
},
|
||||||
|
"safe-json-stringify": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz",
|
||||||
|
"integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==",
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
"safe-stable-stringify": {
|
"safe-stable-stringify": {
|
||||||
"version": "2.4.3",
|
"version": "2.4.3",
|
||||||
"resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz",
|
"resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz",
|
||||||
3
lawin/package.json → backend/package.json
vendored
3
lawin/package.json → backend/package.json
vendored
@@ -12,7 +12,8 @@
|
|||||||
"uuid": "^8.3.2",
|
"uuid": "^8.3.2",
|
||||||
"ws": "^8.5.0",
|
"ws": "^8.5.0",
|
||||||
"xml-parser": "^1.2.1",
|
"xml-parser": "^1.2.1",
|
||||||
"xmlbuilder": "^15.1.1"
|
"xmlbuilder": "^15.1.1",
|
||||||
|
"express-requests-logger": "^4.0.0"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node index.js",
|
"start": "node index.js",
|
||||||
File diff suppressed because it is too large
Load Diff
0
backend/public/images/discord-s.png
vendored
Normal file
0
backend/public/images/discord-s.png
vendored
Normal file
0
backend/public/images/discord.png
vendored
Normal file
0
backend/public/images/discord.png
vendored
Normal file
0
backend/public/images/lawin-s.png
vendored
Normal file
0
backend/public/images/lawin-s.png
vendored
Normal file
0
backend/public/images/lawin.jpg
vendored
Normal file
0
backend/public/images/lawin.jpg
vendored
Normal file
0
backend/public/images/motd-s.png
vendored
Normal file
0
backend/public/images/motd-s.png
vendored
Normal file
0
backend/public/images/motd.png
vendored
Normal file
0
backend/public/images/motd.png
vendored
Normal file
0
backend/public/images/seasonx.png
vendored
Normal file
0
backend/public/images/seasonx.png
vendored
Normal file
0
backend/responses/CloudDir/LawinServer.chunk
vendored
Normal file
0
backend/responses/CloudDir/LawinServer.chunk
vendored
Normal file
0
backend/responses/CloudDir/LawinServer.manifest
vendored
Normal file
0
backend/responses/CloudDir/LawinServer.manifest
vendored
Normal file
@@ -75,5 +75,12 @@
|
|||||||
"direction": "OUTBOUND",
|
"direction": "OUTBOUND",
|
||||||
"created": "2024-05-31T19:50:04.738Z",
|
"created": "2024-05-31T19:50:04.738Z",
|
||||||
"favorite": false
|
"favorite": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"accountId": "Player724",
|
||||||
|
"status": "ACCEPTED",
|
||||||
|
"direction": "OUTBOUND",
|
||||||
|
"created": "2024-06-24T20:15:48.062Z",
|
||||||
|
"favorite": false
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -98,6 +98,15 @@
|
|||||||
"note": "",
|
"note": "",
|
||||||
"favorite": false,
|
"favorite": false,
|
||||||
"created": "2024-05-31T19:50:04.738Z"
|
"created": "2024-05-31T19:50:04.738Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"accountId": "Player724",
|
||||||
|
"groups": [],
|
||||||
|
"mutual": 0,
|
||||||
|
"alias": "",
|
||||||
|
"note": "",
|
||||||
|
"favorite": false,
|
||||||
|
"created": "2024-06-24T20:15:48.062Z"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"incoming": [],
|
"incoming": [],
|
||||||
0
lawin/start.bat → backend/start.bat
vendored
0
lawin/start.bat → backend/start.bat
vendored
@@ -5,7 +5,6 @@ import 'package:reboot_cli/src/game.dart';
|
|||||||
import 'package:reboot_cli/src/reboot.dart';
|
import 'package:reboot_cli/src/reboot.dart';
|
||||||
import 'package:reboot_cli/src/server.dart';
|
import 'package:reboot_cli/src/server.dart';
|
||||||
import 'package:reboot_common/common.dart';
|
import 'package:reboot_common/common.dart';
|
||||||
import 'package:reboot_common/src/util/matchmaker.dart' as matchmaker;
|
|
||||||
|
|
||||||
late String? username;
|
late String? username;
|
||||||
late bool host;
|
late bool host;
|
||||||
@@ -52,7 +51,7 @@ void main(List<String> args) async {
|
|||||||
}
|
}
|
||||||
|
|
||||||
stdout.writeln("Launching game...");
|
stdout.writeln("Launching game...");
|
||||||
var executable = version.gameExecutable;
|
var executable = version.shippingExecutable;
|
||||||
if(executable == null){
|
if(executable == null){
|
||||||
throw Exception("Missing game executable at: ${version.location.path}");
|
throw Exception("Missing game executable at: ${version.location.path}");
|
||||||
}
|
}
|
||||||
@@ -82,7 +81,7 @@ void main(List<String> args) async {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
matchmaker.writeMatchmakingIp(result["matchmaking-address"]);
|
writeMatchmakingIp(result["matchmaking-address"]);
|
||||||
autoRestart = result["auto-restart"];
|
autoRestart = result["auto-restart"];
|
||||||
await startGame();
|
await startGame();
|
||||||
}
|
}
|
||||||
@@ -12,7 +12,7 @@ Future<void> startGame() async {
|
|||||||
await _startLauncherProcess(version);
|
await _startLauncherProcess(version);
|
||||||
await _startEacProcess(version);
|
await _startEacProcess(version);
|
||||||
|
|
||||||
var executable = await version.gameExecutable;
|
var executable = await version.shippingExecutable;
|
||||||
if (executable == null) {
|
if (executable == null) {
|
||||||
throw Exception("${version.location.path} no longer contains a Fortnite executable, did you delete or move it?");
|
throw Exception("${version.location.path} no longer contains a Fortnite executable, did you delete or move it?");
|
||||||
}
|
}
|
||||||
@@ -24,7 +24,7 @@ Future<void> startGame() async {
|
|||||||
|
|
||||||
_gameProcess = await Process.start(executable.path, createRebootArgs(username!, "", host, host, ""))
|
_gameProcess = await Process.start(executable.path, createRebootArgs(username!, "", host, host, ""))
|
||||||
..exitCode.then((_) => _onClose())
|
..exitCode.then((_) => _onClose())
|
||||||
..outLines.forEach((line) => _onGameOutput(line, dll, host, verbose));
|
..stdOutput.forEach((line) => _onGameOutput(line, dll, host, verbose));
|
||||||
_injectOrShowError("cobalt.dll");
|
_injectOrShowError("cobalt.dll");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -52,6 +52,17 @@ void _onGameOutput(String line, String dll, bool hosting, bool verbose) {
|
|||||||
stdout.writeln(line);
|
stdout.writeln(line);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handleGameOutput(
|
||||||
|
line: line,
|
||||||
|
host: hosting,
|
||||||
|
onDisplayAttached: () {}, // TODO: Support virtual desktops
|
||||||
|
onLoggedIn: onLoggedIn,
|
||||||
|
onMatchEnd: onMatchEnd,
|
||||||
|
onShutdown: onShutdown,
|
||||||
|
onTokenError: onTokenError,
|
||||||
|
onBuildCorrupted: onBuildCorrupted
|
||||||
|
);
|
||||||
|
|
||||||
if (line.contains(kShutdownLine)) {
|
if (line.contains(kShutdownLine)) {
|
||||||
_onClose();
|
_onClose();
|
||||||
return;
|
return;
|
||||||
@@ -70,7 +81,7 @@ void _onGameOutput(String line, String dll, bool hosting, bool verbose) {
|
|||||||
_injectOrShowError("console.dll");
|
_injectOrShowError("console.dll");
|
||||||
}
|
}
|
||||||
|
|
||||||
_injectOrShowError("memoryleak.dll");
|
_injectOrShowError("memory.dll");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,12 +98,12 @@ Future<void> _injectOrShowError(String binary, [bool locate = true]) async {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
stdout.writeln("Injecting $binary...");
|
stdout.writeln("Injecting $binary...");
|
||||||
var dll = locate ? File("${assetsDirectory.path}\\dlls\\$binary") : File(binary);
|
var dll = locate ? File("${dllsDirectory.path}\\$binary") : File(binary);
|
||||||
if(!dll.existsSync()){
|
if(!dll.existsSync()){
|
||||||
throw Exception("Cannot inject $dll: missing file");
|
throw Exception("Cannot inject $dll: missing file");
|
||||||
}
|
}
|
||||||
|
|
||||||
await injectDll(_gameProcess!.pid, dll.path);
|
await injectDll(_gameProcess!.pid, dll);
|
||||||
} catch (exception) {
|
} catch (exception) {
|
||||||
throw Exception("Cannot inject binary: $binary");
|
throw Exception("Cannot inject binary: $binary");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,12 +7,12 @@ import 'package:reboot_common/common.dart';
|
|||||||
// TODO: Use github
|
// TODO: Use github
|
||||||
const String _baseDownload = "https://cdn.discordapp.com/attachments/1095351875961901057/1110968021373169674/cobalt.dll";
|
const String _baseDownload = "https://cdn.discordapp.com/attachments/1095351875961901057/1110968021373169674/cobalt.dll";
|
||||||
const String _consoleDownload = "https://cdn.discordapp.com/attachments/1095351875961901057/1110968095033524234/console.dll";
|
const String _consoleDownload = "https://cdn.discordapp.com/attachments/1095351875961901057/1110968095033524234/console.dll";
|
||||||
const String _memoryFixDownload = "https://cdn.discordapp.com/attachments/1095351875961901057/1110968141556756581/memoryleak.dll";
|
const String _memoryFixDownload = "https://cdn.discordapp.com/attachments/1095351875961901057/1110968141556756581/memory.dll";
|
||||||
const String _embeddedConfigDownload = "https://cdn.discordapp.com/attachments/1026121175878881290/1040679319351066644/embedded.zip";
|
const String _embeddedConfigDownload = "https://cdn.discordapp.com/attachments/1026121175878881290/1040679319351066644/embedded.zip";
|
||||||
|
|
||||||
Future<void> downloadRequiredDLLs() async {
|
Future<void> downloadRequiredDLLs() async {
|
||||||
stdout.writeln("Downloading necessary components...");
|
stdout.writeln("Downloading necessary components...");
|
||||||
var consoleDll = File("${assetsDirectory.path}\\dlls\\console.dll");
|
var consoleDll = File("${dllsDirectory.path}\\console.dll");
|
||||||
if(!consoleDll.existsSync()){
|
if(!consoleDll.existsSync()){
|
||||||
var response = await http.get(Uri.parse(_consoleDownload));
|
var response = await http.get(Uri.parse(_consoleDownload));
|
||||||
if(response.statusCode != 200){
|
if(response.statusCode != 200){
|
||||||
@@ -22,7 +22,7 @@ Future<void> downloadRequiredDLLs() async {
|
|||||||
await consoleDll.writeAsBytes(response.bodyBytes);
|
await consoleDll.writeAsBytes(response.bodyBytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
var craniumDll = File("${assetsDirectory.path}\\dlls\\cobalt.dll");
|
var craniumDll = File("${dllsDirectory.path}\\cobalt.dll");
|
||||||
if(!craniumDll.existsSync()){
|
if(!craniumDll.existsSync()){
|
||||||
var response = await http.get(Uri.parse(_baseDownload));
|
var response = await http.get(Uri.parse(_baseDownload));
|
||||||
if(response.statusCode != 200){
|
if(response.statusCode != 200){
|
||||||
@@ -32,11 +32,11 @@ Future<void> downloadRequiredDLLs() async {
|
|||||||
await craniumDll.writeAsBytes(response.bodyBytes);
|
await craniumDll.writeAsBytes(response.bodyBytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
var memoryFixDll = File("${assetsDirectory.path}\\dlls\\memoryleak.dll");
|
var memoryFixDll = File("${dllsDirectory.path}\\memory.dll");
|
||||||
if(!memoryFixDll.existsSync()){
|
if(!memoryFixDll.existsSync()){
|
||||||
var response = await http.get(Uri.parse(_memoryFixDownload));
|
var response = await http.get(Uri.parse(_memoryFixDownload));
|
||||||
if(response.statusCode != 200){
|
if(response.statusCode != 200){
|
||||||
throw Exception("Cannot download memoryleak.dll");
|
throw Exception("Cannot download memory.dll");
|
||||||
}
|
}
|
||||||
|
|
||||||
await memoryFixDll.writeAsBytes(response.bodyBytes);
|
await memoryFixDll.writeAsBytes(response.bodyBytes);
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ Future<bool> startServerCli(String? host, int? port, ServerType type) async {
|
|||||||
stdout.writeln("Starting backend server...");
|
stdout.writeln("Starting backend server...");
|
||||||
switch(type){
|
switch(type){
|
||||||
case ServerType.local:
|
case ServerType.local:
|
||||||
var result = await pingBackend(host ?? kDefaultBackendHost, port ?? kDefaultBackendPort);
|
final result = await pingBackend(host ?? kDefaultBackendHost, port ?? kDefaultBackendPort);
|
||||||
if(result == null){
|
if(result == null){
|
||||||
throw Exception("Local backend server is not running");
|
throw Exception("Local backend server is not running");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ export 'package:reboot_common/src/model/server_result.dart';
|
|||||||
export 'package:reboot_common/src/model/server_type.dart';
|
export 'package:reboot_common/src/model/server_type.dart';
|
||||||
export 'package:reboot_common/src/model/update_status.dart';
|
export 'package:reboot_common/src/model/update_status.dart';
|
||||||
export 'package:reboot_common/src/model/update_timer.dart';
|
export 'package:reboot_common/src/model/update_timer.dart';
|
||||||
|
export 'package:reboot_common/src/model/fortnite_server.dart';
|
||||||
|
export 'package:reboot_common/src/model/dll.dart';
|
||||||
export 'package:reboot_common/src/util/backend.dart';
|
export 'package:reboot_common/src/util/backend.dart';
|
||||||
export 'package:reboot_common/src/util/build.dart';
|
export 'package:reboot_common/src/util/build.dart';
|
||||||
export 'package:reboot_common/src/util/dll.dart';
|
export 'package:reboot_common/src/util/dll.dart';
|
||||||
@@ -17,3 +19,4 @@ export 'package:reboot_common/src/util/network.dart';
|
|||||||
export 'package:reboot_common/src/util/patcher.dart';
|
export 'package:reboot_common/src/util/patcher.dart';
|
||||||
export 'package:reboot_common/src/util/path.dart';
|
export 'package:reboot_common/src/util/path.dart';
|
||||||
export 'package:reboot_common/src/util/process.dart';
|
export 'package:reboot_common/src/util/process.dart';
|
||||||
|
export 'package:reboot_common/src/util/log.dart';
|
||||||
@@ -1,2 +1,3 @@
|
|||||||
const String kDefaultBackendHost = "127.0.0.1";
|
const String kDefaultBackendHost = "127.0.0.1";
|
||||||
const int kDefaultBackendPort = 3551;
|
const int kDefaultBackendPort = 3551;
|
||||||
|
const int kDefaultXmppPort = 80;
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
const String kDefaultPlayerName = "Player";
|
const String kDefaultPlayerName = "Player";
|
||||||
|
const String kDefaultHostName = "Host";
|
||||||
const String kDefaultGameServerHost = "127.0.0.1";
|
const String kDefaultGameServerHost = "127.0.0.1";
|
||||||
const String kDefaultGameServerPort = "7777";
|
const String kDefaultGameServerPort = "7777";
|
||||||
const String kInitializedLine = "Game Engine Initialized";
|
const String kInitializedLine = "Game Engine Initialized";
|
||||||
@@ -11,7 +12,7 @@ const List<String> kCorruptedBuildErrors = [
|
|||||||
"Critical error",
|
"Critical error",
|
||||||
"when 0 bytes remain",
|
"when 0 bytes remain",
|
||||||
"Pak chunk signature verification failed!",
|
"Pak chunk signature verification failed!",
|
||||||
"Couldn't find pak signature file"
|
"LogWindows:Error: Fatal error!"
|
||||||
];
|
];
|
||||||
const List<String> kCannotConnectErrors = [
|
const List<String> kCannotConnectErrors = [
|
||||||
"port 3551 failed: Connection refused",
|
"port 3551 failed: Connection refused",
|
||||||
@@ -21,3 +22,4 @@ const List<String> kCannotConnectErrors = [
|
|||||||
"UOnlineAccountCommon::ForceLogout"
|
"UOnlineAccountCommon::ForceLogout"
|
||||||
];
|
];
|
||||||
const String kGameFinishedLine = "PlayersLeft: 1";
|
const String kGameFinishedLine = "PlayersLeft: 1";
|
||||||
|
const String kDisplayInitializedLine = "Display";
|
||||||
|
|||||||
@@ -5,38 +5,50 @@ import 'package:path/path.dart' as path;
|
|||||||
import 'package:reboot_common/common.dart';
|
import 'package:reboot_common/common.dart';
|
||||||
|
|
||||||
extension FortniteVersionExtension on FortniteVersion {
|
extension FortniteVersionExtension on FortniteVersion {
|
||||||
static File? findExecutable(Directory directory, String name) {
|
static String _marker = "FortniteClient.mod";
|
||||||
|
|
||||||
|
static File? findFile(Directory directory, String name) {
|
||||||
try{
|
try{
|
||||||
final result = directory.listSync(recursive: true)
|
for(final child in directory.listSync()) {
|
||||||
.firstWhere((element) => path.basename(element.path) == name);
|
if(child is Directory) {
|
||||||
return File(result.path);
|
if(!path.basename(child.path).startsWith("\.")) {
|
||||||
|
final result = findFile(child, name);
|
||||||
|
if(result != null) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}else if(child is File) {
|
||||||
|
if(path.basename(child.path) == name) {
|
||||||
|
return child;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
}catch(_){
|
}catch(_){
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
File? get gameExecutable => findExecutable(location, "FortniteClient-Win64-Shipping.exe");
|
Future<File?> get shippingExecutable async {
|
||||||
|
final result = findFile(location, "FortniteClient-Win64-Shipping.exe");
|
||||||
Future<File?> get headlessGameExecutable async {
|
if(result == null) {
|
||||||
final result = findExecutable(location, "FortniteClient-Win64-Shipping-Headless.exe");
|
|
||||||
if(result != null) {
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
final original = findExecutable(location, "FortniteClient-Win64-Shipping.exe");
|
|
||||||
if(original == null) {
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
final output = File("${original.parent.path}\\FortniteClient-Win64-Shipping-Headless.exe");
|
final marker = findFile(location, _marker);
|
||||||
await original.copy(output.path);
|
if(marker != null) {
|
||||||
await Isolate.run(() => patchHeadless(output));
|
return result;
|
||||||
return output;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
File? get launcherExecutable => findExecutable(location, "FortniteLauncher.exe");
|
await Isolate.run(() => patchHeadless(result));
|
||||||
|
await File("${location.path}\\$_marker").create();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
File? get eacExecutable => findExecutable(location, "FortniteClient-Win64-Shipping_EAC.exe");
|
File? get launcherExecutable => findFile(location, "FortniteLauncher.exe");
|
||||||
|
|
||||||
File? get splashBitmap => findExecutable(location, "Splash.bmp");
|
File? get eacExecutable => findFile(location, "FortniteClient-Win64-Shipping_EAC.exe");
|
||||||
|
|
||||||
|
File? get splashBitmap => findFile(location, "Splash.bmp");
|
||||||
}
|
}
|
||||||
@@ -2,7 +2,7 @@ import 'dart:convert';
|
|||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
extension ProcessExtension on Process {
|
extension ProcessExtension on Process {
|
||||||
Stream<String> get stdOutput => this.stdout.expand((event) => utf8.decode(event).split("\n"));
|
Stream<String> get stdOutput => this.stdout.expand((event) => utf8.decode(event, allowMalformed: true).split("\n"));
|
||||||
|
|
||||||
Stream<String> get stdError => this.stderr.expand((event) => utf8.decode(event).split("\n"));
|
Stream<String> get stdError => this.stderr.expand((event) => utf8.decode(event, allowMalformed: true).split("\n"));
|
||||||
}
|
}
|
||||||
9
common/lib/src/model/dll.dart
Normal file
9
common/lib/src/model/dll.dart
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
enum InjectableDll {
|
||||||
|
console,
|
||||||
|
starfall,
|
||||||
|
reboot,
|
||||||
|
}
|
||||||
|
|
||||||
|
extension InjectableDllVersionAware on InjectableDll {
|
||||||
|
bool get isVersionDependent => this == InjectableDll.reboot;
|
||||||
|
}
|
||||||
@@ -1,27 +1,31 @@
|
|||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
import 'dart:isolate';
|
import 'dart:isolate';
|
||||||
|
|
||||||
|
import 'package:version/version.dart';
|
||||||
|
|
||||||
class FortniteBuild {
|
class FortniteBuild {
|
||||||
final String identifier;
|
final Version version;
|
||||||
final String version;
|
|
||||||
final String link;
|
final String link;
|
||||||
|
final bool available;
|
||||||
|
|
||||||
FortniteBuild({
|
FortniteBuild({
|
||||||
required this.identifier,
|
|
||||||
required this.version,
|
required this.version,
|
||||||
required this.link
|
required this.link,
|
||||||
|
required this.available
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
class FortniteBuildDownloadProgress {
|
class FortniteBuildDownloadProgress {
|
||||||
final double progress;
|
final double progress;
|
||||||
final int? minutesLeft;
|
final int? timeLeft;
|
||||||
final bool extracting;
|
final bool extracting;
|
||||||
|
final int speed;
|
||||||
|
|
||||||
FortniteBuildDownloadProgress({
|
FortniteBuildDownloadProgress({
|
||||||
required this.progress,
|
required this.progress,
|
||||||
required this.extracting,
|
required this.extracting,
|
||||||
this.minutesLeft,
|
required this.timeLeft,
|
||||||
|
required this.speed
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user