Skip to content

Commit

Permalink
UPDATE: Various fixes to ensure Server.exe works
Browse files Browse the repository at this point in the history
  • Loading branch information
paulov-t committed Jul 11, 2022
1 parent bfa5c25 commit c0c3a6a
Show file tree
Hide file tree
Showing 13 changed files with 153 additions and 133 deletions.
18 changes: 18 additions & 0 deletions _CreateBuildDir_Minimum.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
rmdir Build /s/q
mkdir Build

copy "Server.exe" "Build/Server.exe"
xcopy "db" "Build/db/" /s/i/y
xcopy "res" "Build/res/" /s/i/y
xcopy "user" "Build/user/" /s/i/y

rmdir "Build/user/cache/" /s/q
rmdir "Build/user/events/" /s/q
rmdir "Build/user/logs/" /s/q
rmdir "Build/user/profiles/" /s/q
rmdir "Build/user/mods" /s/q

del "Build\user\configs\gameplay.json" /q
del "Build\user\configs\server.json" /q

pause
20 changes: 10 additions & 10 deletions bin/www.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ const app = require('../express/app');
const http = require('http');
const https = require('https');
const fs = require('fs');
const ws = require('ws');
// const ws = require('ws');
const { certificate } = require('./../core/server/certGenerator');
const { ConfigController } = require('./../src/Controllers/ConfigController')
var serverIp = "127.0.0.1";
Expand Down Expand Up @@ -44,15 +44,15 @@ const httpsServer = https.createServer({
cert: certs.cert
}, app);

const io = require('socket.io')(httpsServer,{
perMessageDeflate :false
});
io.on('connection', (socket) => {
console.log('a user connected');
socket.on('disconnect', () => {
console.log('user disconnected');
});
});
// const io = require('socket.io')(httpsServer,{
// perMessageDeflate :false
// });
// io.on('connection', (socket) => {
// console.log('a user connected');
// socket.on('disconnect', () => {
// console.log('user disconnected');
// });
// });

/** ======================================================================================================
* Https Server running on whatever port determined by outcome above
Expand Down
3 changes: 2 additions & 1 deletion core/initializer.js
Original file line number Diff line number Diff line change
Expand Up @@ -354,7 +354,8 @@ class Initializer {
for (let file of loadOrder) {
loadedModules += file.replace(".js", ", ");
let name = file.replace(".js", "").toLowerCase() + "_f"; // fixes the weaponbuilds.js file bug ... lol
global[name] = require(process.cwd() + "/src/classes/" + file);
// global[name] = require(process.cwd() + "/src/classes/" + file);
global[name] = require(__dirname + "/../src/classes/" + file);
}
// logger.logInfo("[Modules] " + loadedModules.slice(0, -2));
}
Expand Down
7 changes: 6 additions & 1 deletion core/util/logger.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,17 @@ const colorData = [
class Logger {
constructor() {
let file = utility.getDate() + "_" + utility.getTime() + ".log";

if (!fileIO.exist('user')) {
fileIO.mkDir('user');
}

let folder = "user/logs/";
let filepath = folder + file;

// create log folder
if (!fileIO.exist(folder)) {
+fileIO.mkDir(folder);
fileIO.mkDir(folder);
}

// create log file
Expand Down
8 changes: 3 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,13 @@
"express": "^4.18.1",
"mathjs": "^10.6.1",
"selfsigned": "^2.0.1",
"socket.io": "^4.5.0",
"uuid": "^8.3.2",
"write-json-file": "^4.3.0",
"ws": "^8.5.0"
"write-json-file": "^4.3.0"
},
"bin": "bin/www.js",
"pkg": {
"scripts": "",
"assets": "",
"scripts": [ "core/**/*.js", "src/**/*.js" ],
"assets": [ "res/**/*", "db/**/*", "public/**/*", "express/views/**/*" ],
"targets": [
"node16-win"
]
Expand Down
70 changes: 30 additions & 40 deletions src/Controllers/AccountController.js
Original file line number Diff line number Diff line change
Expand Up @@ -101,19 +101,20 @@ class AccountController
return fullyLoadedAccounts;
}

static reloadAccountBySessionID(sessionID) {
static reloadAccountBySessionID(sessionID) {
if (!fileIO.exist(`./user/profiles/${sessionID}/account.json`)) {
logger.logWarning(`Account file for account ${sessionID} does not exist.`);
} else {
// Does the session exist?
if (!AccountController.accounts[sessionID]) {
if (AccountController.accounts[sessionID] === undefined) {
logger.logWarning(`Tried to load session ${sessionID} but it wasn't cached, loading.`);
// Reload the account from disk.
AccountController.accounts[sessionID] = fileIO.readParsed(`./user/profiles/${sessionID}/account.json`);
} else {
// Reload the account from disk.
AccountController.accounts[sessionID] = fileIO.readParsed(`./user/profiles/${sessionID}/account.json`);
}
}
// else {
// // Reload the account from disk.
// AccountController.accounts[sessionID] = fileIO.readParsed(`./user/profiles/${sessionID}/account.json`);
// }
}
}

Expand Down Expand Up @@ -228,12 +229,11 @@ class AccountController
}

static getPmcPath(sessionID) {
let pmcPath = db.user.profiles.character;
return pmcPath.replace("__REPLACEME__", sessionID);
const path = `${process.cwd()}/user/profiles/${sessionID}/character.json`;
// console.log(path);
return path;
}



/*
* Get profile with sessionID of type (profile type in string, i.e. 'pmc').
* If we don't have a profile for this sessionID yet, then load it and other related data
Expand Down Expand Up @@ -333,7 +333,7 @@ class AccountController
* If the sessionID is specified, AccountController function will save the specified account file to disk, if the file wasn't modified elsewhere and the current memory content differs from the content on disk.
* @param {*} sessionID
*/
static saveToDisk(sessionID) {
static saveToDisk(sessionID, force = false, releaseMemory = false) {

if(sessionID === undefined)
return;
Expand All @@ -342,11 +342,16 @@ class AccountController
fs.mkdirSync(`user/profiles/`);
}

AccountController.saveToDiskAccount(sessionID);
AccountController.saveToDiskProfile(sessionID);
AccountController.saveToDiskAccount(sessionID, force);
AccountController.saveToDiskProfile(sessionID, force);
if(releaseMemory) {
delete AccountController.accounts[sessionID];
delete AccountController.profiles[sessionID];
logger.logSuccess(sessionID + " has been released from memory.")
}
}

static saveToDiskAccount(sessionID) {
static saveToDiskAccount(sessionID, force = false) {
// Does the account file exist? (Required for new accounts)
if (!fileIO.exist(`./user/profiles/${sessionID}/account.json`)) {
logger.logInfo(`Registering New account ${sessionID}.`);
Expand All @@ -355,26 +360,26 @@ class AccountController
} else {
let currentAccount = AccountController.accounts[sessionID];
let savedAccount = fileIO.readParsed(`./user/profiles/${sessionID}/account.json`);
if (JSON.stringify(currentAccount) !== JSON.stringify(savedAccount)) {
if (force || JSON.stringify(currentAccount) !== JSON.stringify(savedAccount)) {
// Save memory content to disk
fileIO.write(`./user/profiles/${sessionID}/account.json`, AccountController.accounts[sessionID]);
logger.logSuccess(`Account file for account ${sessionID} was saved to disk.`);
}
}
}

static saveToDiskProfile(sessionID) {
static saveToDiskProfile(sessionID, force = false) {
// Check if a PMC character exists in the server memory.
if (AccountController.profiles[sessionID] === undefined) {
logger.logError(`Profile ${sessionID} doesn't exist in memory`);
// logger.logError(`Profile ${sessionID} doesn't exist in memory`);
return;
}

const profilePath = AccountController.getPmcPath(sessionID);
let prof = AccountController.getPmcProfile(sessionID);
// prof = AccountController.FixTradersInfo(prof);
const diskProf = JSON.stringify(JSON.parse(fs.readFileSync(profilePath)));
if(diskProf !== JSON.stringify(prof)) {
if(force || diskProf !== JSON.stringify(prof)) {
fileIO.write(profilePath, prof);
logger.logSuccess(`Profile for AID ${sessionID} was saved.`);
}
Expand Down Expand Up @@ -441,8 +446,8 @@ class AccountController
* @param {*} sessionID
*/
static createProfile(info, sessionID) {
console.log("createProfile");
console.log(info);
// console.log("createProfile");
// console.log(info);

// Load account data //
const account = AccountController.find(sessionID);
Expand Down Expand Up @@ -500,7 +505,7 @@ console.log(info);
// AccountController.setWipe(account.id, false);
account.wipe = false;
AccountController.initializeProfile(sessionID);
AccountController.saveToDisk(sessionID);
// AccountController.saveToDisk(sessionID);
}

/**
Expand Down Expand Up @@ -584,7 +589,7 @@ console.log(info);
// AccountController needs to be at the top to check for changed accounts.
AccountController.reloadAccountBySessionID(sessionID);
let account = AccountController.find(sessionID);
if (typeof account.lang == "undefined") {
if (account.lang === undefined) {
account.lang = "en";
AccountController.saveToDisk(sessionID);
}
Expand All @@ -596,29 +601,14 @@ console.log(info);
* @param {*} sessionID
*/
static reloadProfileBySessionID(sessionID) {
if (sessionID === undefined) {
logger.throwErr("Session ID is undefined");
return;
}
try {
if(AccountController.profiles[sessionID] === undefined) {

// Check if the profile file exists
if (global.internal.fs.existsSync(AccountController.getPmcPath(sessionID))) {
if (fs.existsSync(AccountController.getPmcPath(sessionID))) {
//Load the PMC profile from disk.
AccountController.profiles[sessionID]["pmc"] = fileIO.readParsed(AccountController.getPmcPath(sessionID));
}
} catch (e) {
if (e instanceof SyntaxError) {
return logger.logError(
`There is a syntax error in the character.json file for AID ${sessionID}. This likely means you edited something improperly. Call stack: \n${e.stack}`
);
} else {
logger.logData(sessionID);
logger.logError(`There was an issue loading the user profile with session ID ${sessionID}. Call stack:`);
logger.logData(e);
return;
}
}

}
}

Expand Down
2 changes: 1 addition & 1 deletion src/Controllers/ResponseController.js
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ action: (url, info, sessionID) => {
action: (url, info, sessionID) => {
const account = AccountController.find(sessionID);
account.wipe = false;
AccountController.saveToDisk(sessionID);
AccountController.saveToDisk(sessionID, true, true);
}
},
{
Expand Down
80 changes: 44 additions & 36 deletions src/Controllers/TradingController.js
Original file line number Diff line number Diff line change
Expand Up @@ -418,7 +418,11 @@ static getLoyalty(pmcData, traderID) {
break;
}
}
} else { return "ragfair" }
}
else {
// return "ragfair"
return playerLevel;
}

return calculatedLoyalty;
}
Expand Down Expand Up @@ -475,42 +479,46 @@ static getLoyalty(pmcData, traderID) {
const assort = TradingController.getTraderAssort(traderId, sessionID);
const pmcData = AccountController.getPmcProfile(sessionID);
const traderLevel = TradingController.getLoyalty(pmcData, traderId);
let traderQuestAssort = global._database.traders[traderId].questassort;

// Get all items filtered by level
for (const key in assort.loyal_level_items) {
const requiredLevel = assort.loyal_level_items[key];
if(requiredLevel <= traderLevel) {
const itemIndex = assort.items.findIndex(x=>x._id === key);
if(itemIndex !== -1) {
const questStatus = quest_f.getQuestStatus(pmcData, traderQuestAssort.started[key]);

if (
key in traderQuestAssort.started && questStatus !== "Started"
) {
continue;
}

if (
key in traderQuestAssort.success &&
quest_f.getQuestStatus(pmcData, traderQuestAssort.success[key]) !==
"Success"
) {
continue;
}

if (
key in traderQuestAssort.fail &&
quest_f.getQuestStatus(pmcData, traderQuestAssort.fail[key]) !== "Fail"
) {
continue;
if (traderLevel !== "ragfair"
&& traderId !== "ragfair"
&& global._database.traders[traderId].questassort !== undefined) {
let traderQuestAssort = global._database.traders[traderId].questassort;

// Get all items filtered by level
for (const key in assort.loyal_level_items) {
const requiredLevel = assort.loyal_level_items[key];
if(requiredLevel <= traderLevel) {
const itemIndex = assort.items.findIndex(x=>x._id === key);
if(itemIndex !== -1) {
const questStatus = quest_f.getQuestStatus(pmcData, traderQuestAssort.started[key]);

if (
key in traderQuestAssort.started && questStatus !== "Started"
) {
continue;
}

if (
key in traderQuestAssort.success &&
quest_f.getQuestStatus(pmcData, traderQuestAssort.success[key]) !==
"Success"
) {
continue;
}

if (
key in traderQuestAssort.fail &&
quest_f.getQuestStatus(pmcData, traderQuestAssort.fail[key]) !== "Fail"
) {
continue;
}

newAssort.barter_scheme[key] = assort.barter_scheme[key];
newAssort.loyal_level_items[key] = requiredLevel;

const assortItem = assort.items[itemIndex];
newAssort.items.push(assortItem);
}

newAssort.barter_scheme[key] = assort.barter_scheme[key];
newAssort.loyal_level_items[key] = requiredLevel;

const assortItem = assort.items[itemIndex];
newAssort.items.push(assortItem);
}
}
}
Expand Down
7 changes: 4 additions & 3 deletions src/classes/item.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,9 @@ class ItemServer {

handleRoutes(info, sessionID) {
this.resetOutput(sessionID);
let pmcData = AccountController.getPmcProfile(sessionID);

for (let body of info.data) {
let pmcData = AccountController.getPmcProfile(sessionID);
if (body.Action in this.routes) {
this.routes[body.Action](pmcData, body, sessionID);
} else {
Expand All @@ -95,12 +96,12 @@ class ItemServer {

resetOutput(sessionID) {
if (sessionID == "" || typeof sessionID == "undefined") {
logger.logError(`[MISSING SESSION ID] resetOutput(sessionID) is blank or undefined; returning.`);
// logger.logError(`[MISSING SESSION ID] resetOutput(sessionID) is blank or undefined; returning.`);
return;
}
let _profile = AccountController.getPmcProfile(sessionID);
if (utility.isUndefined(_profile)) {
logger.logError(`[MISSING PROFILE] Profile with sessionID: ${sessionID} is missing?`);
// logger.logError(`[MISSING PROFILE] Profile with sessionID: ${sessionID} is missing?`);
return;
}

Expand Down
Loading

0 comments on commit c0c3a6a

Please sign in to comment.