Skip to content

Commit 771accc

Browse files
Merge branch 'master' into woodcutting
2 parents c357510 + e310da0 commit 771accc

File tree

12 files changed

+241
-215
lines changed

12 files changed

+241
-215
lines changed

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
"description": "",
55
"main": "src/game-server.ts",
66
"scripts": {
7-
"start": "concurrently \"npm run build:watch\" \"node --max-old-space-size=4096 dist/main.js\"",
8-
"start:server": "concurrently \"npm run build\" \"node --max-old-space-size=4096 dist/main.js\"",
7+
"start": "npm run build && concurrently \"npm run build:watch\" \"node --max-old-space-size=4096 dist/main.js\"",
8+
"start:server": "npm run build && node --max-old-space-size=4096 dist/main.js",
99
"lint": "tslint --project tsconfig.json",
1010
"fake-players": "concurrently \"npm run build:watch\" \"node --max-old-space-size=4096 dist/main.js -fakePlayers\"",
1111
"fake-players-tick": "concurrently \"npm run build:watch\" \"node --max-old-space-size=4096 dist/main.js -fakePlayers -tickTime\"",

src/error-handling.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ export function initErrorHandling(): void {
3535
}
3636

3737
logger.error(`Unhandled promise rejection from ${promise}, reason: ${error}`);
38-
if(error.hasOwnProperty('stack')) {
38+
if(error && error.hasOwnProperty('stack')) {
3939
logger.error((error as any).stack);
4040
}
4141
});

src/game-server.ts

Lines changed: 43 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,38 @@ function generateCrcTable(): void {
7777
crcTable = buffer;
7878
}
7979

80-
export function runGameServer(): void {
80+
function openServer(): void {
81+
net.createServer(socket => {
82+
socket.setNoDelay(true);
83+
socket.setKeepAlive(true);
84+
socket.setTimeout(30000);
85+
86+
let clientConnection = new ClientConnection(socket);
87+
88+
socket.on('data', data => {
89+
if(clientConnection) {
90+
clientConnection.parseIncomingData(new ByteBuffer(data));
91+
}
92+
});
93+
94+
socket.on('close', () => {
95+
if(clientConnection) {
96+
clientConnection.connectionDestroyed();
97+
clientConnection = null;
98+
}
99+
});
100+
101+
socket.on('error', error => {
102+
logger.error('Socket destroyed due to connection error.');
103+
logger.error(error.message);
104+
socket.destroy();
105+
});
106+
}).listen(serverConfig.port, serverConfig.host);
107+
108+
logger.info(`Game server listening on port ${ serverConfig.port }.`);
109+
}
110+
111+
export async function runGameServer(): Promise<void> {
81112
serverConfig = parseServerConfig();
82113

83114
if(!serverConfig) {
@@ -90,52 +121,22 @@ export function runGameServer(): void {
90121
});
91122
generateCrcTable();
92123

93-
delete cache.dataChannel;
94-
delete cache.metaChannel;
95-
delete cache.indexChannels;
96-
delete cache.indices;
124+
// @TODO keep these in the login server so they don't eat game server memory :)
125+
// delete cache.dataChannel;
126+
// delete cache.metaChannel;
127+
// delete cache.indexChannels;
128+
// delete cache.indices;
97129

98130
world = new World();
99-
injectPlugins().then(() => {
100-
world.init();
101-
102-
delete cache.mapData;
103-
104-
if(process.argv.indexOf('-fakePlayers') !== -1) {
105-
world.generateFakePlayers();
106-
}
131+
await injectPlugins();
107132

108-
net.createServer(socket => {
109-
logger.info('Socket opened');
133+
world.init(); // .then(() => delete cache.mapData);
110134

111-
socket.setNoDelay(true);
112-
socket.setKeepAlive(true);
113-
socket.setTimeout(30000);
114-
115-
let clientConnection = new ClientConnection(socket);
116-
117-
socket.on('data', data => {
118-
if(clientConnection) {
119-
clientConnection.parseIncomingData(new ByteBuffer(data));
120-
}
121-
});
122-
123-
socket.on('close', () => {
124-
if(clientConnection) {
125-
clientConnection.connectionDestroyed();
126-
clientConnection = null;
127-
}
128-
});
129-
130-
socket.on('error', error => {
131-
logger.error(error.message);
132-
socket.destroy();
133-
logger.error('Socket destroyed due to connection error.');
134-
});
135-
}).listen(serverConfig.port, serverConfig.host);
135+
if(process.argv.indexOf('-fakePlayers') !== -1) {
136+
world.generateFakePlayers();
137+
}
136138

137-
logger.info(`Game server listening on port ${serverConfig.port}.`);
138-
});
139+
openServer();
139140

140141
const watcher = watch('dist/plugins/');
141142
watcher.on('ready', () => {

src/plugins/combat/combat.js

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,25 @@
1-
import { ActionType, DamageType, schedule } from '../rune.js';
1+
import { DamageType } from '../../world/actor/update-flags';
2+
import { ActionType } from '../plugin';
3+
import { loopingAction, walkToAction } from '../../world/actor/player/action/action';
4+
import { schedule } from '../../task/task';
25

6+
// Work-in-progress...
37
const action = async details => {
48
const { player, npc } = details;
59

6-
npc.updateFlags.addDamage(1, DamageType.DAMAGE, 4, 5);
7-
npc.say(`Ow!`);
10+
const loop = loopingAction({ ticks: 5, player, npc });
11+
const loopSub = loop.event.subscribe(async () => {
12+
if(player.position.distanceBetween(npc.position) > 1) {
13+
walkToAction(player, npc.position);
14+
return;
15+
}
816

9-
await schedule(4);
17+
npc.updateFlags.addDamage(1, DamageType.DAMAGE, 4, 5);
1018

11-
player.updateFlags.addDamage(1, DamageType.DAMAGE, 4, 5);
19+
await schedule(3);
20+
21+
player.updateFlags.addDamage(1, DamageType.DAMAGE, 4, 5);
22+
});
1223
};
1324

1425
module.exports = {

src/plugins/commands/path-command.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const action: commandAction = (details) => {
99
const y: number = args.y as number;
1010
const pathingDiameter: number = args.diameter as number;
1111

12-
player.pathfinding.walkTo(new Position(x, y, player.position.level), { pathingDiameter });
12+
player.pathfinding.walkTo(new Position(x, y, player.position.level), { pathingSearchRadius: pathingDiameter });
1313
};
1414

1515
export default new RunePlugin({
File renamed without changes.

src/plugins/player/follow-player-plugin.ts

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { ActionType, RunePlugin } from '@server/plugins/plugin';
22
import { playerAction } from '@server/world/actor/player/action/player-action';
33
import { Player } from '@server/world/actor/player/player';
4-
import { logger } from '@runejs/logger';
4+
55

66
async function pathTo(player: Player, otherPlayer: Player): Promise<boolean> {
77
const distance = Math.floor(otherPlayer.position.distanceBetween(player.position));
@@ -11,27 +11,26 @@ async function pathTo(player: Player, otherPlayer: Player): Promise<boolean> {
1111
throw new Error(`Distance too great!`);
1212
}
1313

14-
if(distance <= 1) {
15-
return Promise.resolve(false);
14+
let ignoreDestination = true;
15+
let desiredPosition = otherPlayer.position;
16+
if(otherPlayer.lastMovementPosition/* && otherPlayer.lastMovementPosition.distanceBetween(otherPlayer.position) < 1*/) {
17+
desiredPosition = otherPlayer.lastMovementPosition;
18+
ignoreDestination = false;
1619
}
1720

18-
try {
19-
await player.pathfinding.walkTo(otherPlayer.position, {
20-
pathingDiameter: distance + 6,
21-
ignoreDestination: true
22-
});
21+
await player.pathfinding.walkTo(desiredPosition, {
22+
pathingSearchRadius: distance + 2,
23+
ignoreDestination
24+
});
2325

24-
return Promise.resolve(true);
25-
} catch(error) {
26-
player.clearFaceActor();
27-
logger.warn(error.message);
28-
}
26+
return Promise.resolve(true);
2927
}
3028

3129
export const action: playerAction = (details) => {
3230
const { player, otherPlayer } = details;
3331

3432
player.face(otherPlayer, false, false, false);
33+
3534
pathTo(player, otherPlayer);
3635

3736
const subscription = otherPlayer.movementEvent.subscribe(() => {

src/world/actor/actor.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ export abstract class Actor {
2828
private _busy: boolean;
2929
public readonly metadata: { [key: string]: any } = {};
3030
private _combatActions: CombatAction[];
31-
public readonly pathfinding: Pathfinding;
31+
public pathfinding: Pathfinding;
32+
public lastMovementPosition: Position;
3233

3334
protected constructor() {
3435
this.updateFlags = new UpdateFlags();

0 commit comments

Comments
 (0)