Browse Source

work

1993-leagues
Shaun 11 months ago
parent
commit
9d7b1a91c3
10 changed files with 72 additions and 29 deletions
  1. +1
    -1
      src/server/components/extensions/factionVendor.js
  2. +25
    -1
      src/server/config/consts.js
  3. +1
    -1
      src/server/config/serverConfig.js
  4. +2
    -0
      src/server/items/generator.js
  5. +2
    -2
      src/server/items/generators/stats.js
  6. +6
    -1
      src/server/security/connections.js
  7. +1
    -1
      src/server/server/index.js
  8. +5
    -2
      src/server/world/instancer.js
  9. +25
    -19
      src/server/world/threadManager.js
  10. +4
    -1
      src/server/world/worker.js

+ 1
- 1
src/server/components/extensions/factionVendor.js View File

@@ -74,7 +74,7 @@ module.exports = {
for (let i = 0; i < itemCount; i++) {
let minLevel = blueprint.items.minLevel || Math.max(1, list.level * 0.75);
let maxLevel = blueprint.items.maxLevel || (list.level * 1.25);
let level = Math.min(20, ~~(minLevel + (Math.random() * (maxLevel - minLevel))));
let level = Math.min(consts.maxLevel, ~~(minLevel + (Math.random() * (maxLevel - minLevel))));

let item = generator.generate({
noSpell: true,


+ 25
- 1
src/server/config/consts.js View File

@@ -1,3 +1,7 @@
//Imports
const eventEmitter = require('../misc/events');

//Module
module.exports = {
//At which interval does each zone tick in ms
tickTime: 350,
@@ -15,5 +19,25 @@ module.exports = {
viewDistanceX: 25,

//How far a player can see objects vertically
viewDistanceY: 14
viewDistanceY: 14,

init: function (threadArgs) {
const emBeforeGetConsts = {
threadArgs,
constValues: {}
};

Object.entries(this).forEach(([k, v]) => {
if (typeof(v) === 'function')
return;

emBeforeGetConsts.constValues[k] = v;
});

eventEmitter.emit('beforeGetConsts', emBeforeGetConsts);

Object.entries(emBeforeGetConsts.constValues).forEach(([k, v]) => {
this[k] = v;
});
}
};

+ 1
- 1
src/server/config/serverConfig.js View File

@@ -3,7 +3,7 @@
module.exports = {
version: '0.11.0',
port: 4000,
startupMessage: 'Server: ready',
startupMessage: 'Ready: Server',

nodeEnv: process.env.NODE_ENV,



+ 2
- 0
src/server/items/generator.js View File

@@ -48,6 +48,8 @@ module.exports = {
currencyChance = 0;
else if (blueprint.level < 14)
currencyChance *= (blueprint.level - 4) / 11;
else if (blueprint.level > consts.maxLevel)
blueprint.level = consts.maxLevel;

//If you kill a mob that's too low of a level, idols are much more rare
if (


+ 2
- 2
src/server/items/generators/stats.js View File

@@ -590,7 +590,7 @@ module.exports = {

if (!value) {
if (statBlueprint.generator) {
let level = Math.min(20, item.originalLevel || item.level);
let level = Math.min(consts.maxLevel, item.originalLevel || item.level);
value = Math.ceil(this.generators[statBlueprint.generator](item, level, blueprint, blueprint.perfection, null, statBlueprint));
} else if (!blueprint.perfection)
value = Math.ceil(random.norm(statBlueprint.min, statBlueprint.max));
@@ -675,7 +675,7 @@ module.exports = {
}
};

const itemLevel = Math.min(20, item.level);
const itemLevel = Math.min(consts.maxLevel, item.level);
stat.value = Math.ceil(generator(item, itemLevel, blueprint));
} else
stat.value = Math.ceil(random.norm(statBlueprint.min, statBlueprint.max) * i.valueMult);


+ 6
- 1
src/server/security/connections.js View File

@@ -93,8 +93,11 @@ module.exports = {
keys.forEach(function (k) {
let val = player[k];
if (val && val.type) {
if (['player', 'auth', 'syncer'].indexOf(val.type) === -1)
if (['player', 'auth', 'syncer'].indexOf(val.type) === -1) {
delete player[k];

player.components.spliceWhere(c => c.type === val.type);
}
}
});

@@ -111,11 +114,13 @@ module.exports = {
//If we don't do this, the atlas will try to remove it from the thread
delete player.zoneName;
delete player.name;
delete player.zoneId;

//A hack to allow us to actually call methods again (like retrieve the player list)
player.dead = false;
player.permadead = false;
delete player.auth.charname;
player.id = objects.getNextId();

this.modifyPlayerCount(-1);



+ 1
- 1
src/server/server/index.js View File

@@ -12,7 +12,7 @@ const rest = require('../security/rest');

const {
port = 4000,
startupMessage = 'Server: Ready',
startupMessage = 'Ready: Server',
nodeEnv
} = require('../config/serverConfig');



+ 5
- 2
src/server/world/instancer.js View File

@@ -26,6 +26,9 @@ module.exports = {

lastTime: 0,

mapName: null,
threadArgs: null,

init: function (args) {
const { zoneId, zoneName } = args;

@@ -65,7 +68,7 @@ module.exports = {
map.randomMap.init(fakeInstance);
this.startRegen();
} else
_.log('(M ' + map.name + '): Ready');
_.log(`Ready: ${JSON.stringify(this.threadArgs, null, '\t')}`);

map.clientMap.zoneId = this.zoneId;

@@ -164,7 +167,7 @@ module.exports = {

this.addQueue = [];

_.log('(M ' + map.name + '): Ready');
_.log(`Ready: ${JSON.stringify(this.threadArgs, null, '\t')}`);
},

tick: function () {


+ 25
- 19
src/server/world/threadManager.js View File

@@ -166,32 +166,20 @@ const onMessage = (thread, message) => {
messageHandlers[message.method](thread, message);
};

const spawnThread = async ({ name, path, instanced, destroyWhenEmptyForMs = -1 }, obj) => {
const spawnThread = async ({ map: { name, path, instanced, destroyWhenEmptyForMs = -1 }, obj }) => {
let cbOnInitialized;

const promise = new Promise(resolveOnReady => {
cbOnInitialized = resolveOnReady;
});

const worker = childProcess.fork('./world/worker', [name]);

let id = instanced ? _.getGuid() : name;
const emBeforeGetThreadId = {
id,
obj,
name,
instanced
};
events.emit('beforeGetThreadId', emBeforeGetThreadId);

id = emBeforeGetThreadId.id;

const thread = {
id,
name,
instanced,
path,
worker,
worker: null,
isReady: false,
promise,
cbOnInitialized,
@@ -199,10 +187,25 @@ const spawnThread = async ({ name, path, instanced, destroyWhenEmptyForMs = -1 }
playersCurrent: [],
birthEpoch: +new Date(),
destroyWhenEmptyForMs,
emptySinceEpoch: null
emptySinceEpoch: null,
sendArgsToWorker: ['name', 'id']
};

worker.on('message', onMessage.bind(null, thread));
const emBeforeSpawnThread = {
thread,
spawnForObject: obj
};
events.emit('beforeSpawnThread', emBeforeSpawnThread);

const workerArgs = JSON.stringify(
Object.fromEntries(
thread.sendArgsToWorker.map(a => [a, thread[a]])
)
);

thread.worker = childProcess.fork('./world/worker', [workerArgs]);

thread.worker.on('message', onMessage.bind(null, thread));

threads.push(thread);

@@ -221,16 +224,19 @@ const getThread = async ({ zoneName, zoneId, obj }) => {
map = mapList.find(m => m.name === clientConfig.config.defaultZone);

let thread = threads.find(t => t.id === zoneId && t.name === zoneName);
//Maybe this player has been in a thread for this map before
if (!thread)
if (!thread)
thread = threads.find(t => t.name === zoneName && t.players.includes(obj.id));

if (!thread) {
if (map.instanced)
result.resetObjPosition = true;

thread = await spawnThread(map, obj);
thread = await spawnThread({
map,
obj
});
}

if (!thread.isReady)


+ 4
- 1
src/server/world/worker.js View File

@@ -26,7 +26,9 @@ const profanities = require('../misc/profanities');
const eventEmitter = require('../misc/events');

//Worker
instancer.mapName = process.argv[2];
const threadArgs = JSON.parse(process.argv[2]);
instancer.mapName = threadArgs.name;
instancer.threadArgs = threadArgs;

const onCpnsReady = async function () {
factions.init();
@@ -51,6 +53,7 @@ const onCpnsReady = async function () {
};

const onModsReady = function () {
consts.init(threadArgs);
components.init(onCpnsReady);
};



Loading…
Cancel
Save