Skip to content

Commit fbb6033

Browse files
committed
add RestartRequest, RestartResponse, fix save character
1 parent 49d98fb commit fbb6033

File tree

9 files changed

+67
-7
lines changed

9 files changed

+67
-7
lines changed

Database/index.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,14 @@ class Database {
6060
return await this._db.collection('characters').findOne({ login });
6161
}
6262

63-
async getCharactersByLogin(login) {
63+
async getCharactersByLogin(login) { // fix delete
6464
return await this._db.collection('characters').find({ login }).toArray();
6565
}
6666

67+
async getCharacterByObjectId(objectId) {
68+
return await this._db.collection('characters').findOne({ objectId });
69+
}
70+
6771
async checkCharacterNameExists(characterName) {
6872
const character = await this._db.collection('characters').findOne({
6973
'characterName': {

GameServer/Client.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,11 @@ class Client {
9393

9494
break;
9595
case 9:
96-
new clientPackets.Logout(packet, this);
96+
new clientPackets.Logout(packet, this);
9797

98-
break;
98+
break;
99+
case 70:
100+
new clientPackets.RequestRestart(packet, this);
99101
}
100102
}
101103

GameServer/ClientPackets/Logout.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@ class Logout {
77
constructor(packet, client) {
88
this._client = client;
99
this._data = new ClientPacket(packet);
10-
this._data.readC()
10+
this._data.readC();
1111

1212
this._init();
1313
}
1414

1515
async _init() {
1616
const player = players.getPlayerByClient(this._client);
17-
const character = await database.getCharacterByLogin(player.login);
17+
const character = await database.getCharacterByObjectId(player.objectId);
1818

1919
character.x = Math.floor(player.x); // fix, update all doc?
2020
character.y = Math.floor(player.y);

GameServer/ClientPackets/RequestAuthLogin.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,9 @@ class RequestAuthLogin {
5050

5151
player.update({
5252
login: this.login
53-
});
53+
}); // fix?
5454

55-
this._client.sendPacket(new serverPackets.CharacterSelectInfo(this.login, characters));
55+
this._client.sendPacket(new serverPackets.CharacterSelectInfo(player.login, characters));
5656
}
5757
}
5858

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
const serverPackets = require('./../ServerPackets/serverPackets');
2+
const ClientPacket = require("./ClientPacket");
3+
const database = require('./../../Database');
4+
const players = require('./../Models/Players');
5+
6+
class RequestRestart {
7+
constructor(packet, client) {
8+
this._client = client;
9+
this._data = new ClientPacket(packet);
10+
this._data.readC();
11+
12+
this._init();
13+
}
14+
15+
async _init() {
16+
const player = players.getPlayerByClient(this._client);
17+
const character = await database.getCharacterByObjectId(player.objectId);
18+
19+
character.x = Math.floor(player.x); // fix, update all doc?
20+
character.y = Math.floor(player.y);
21+
character.z = Math.floor(player.z);
22+
23+
await database.updateCharacterByObjectId(character.objectId, character);
24+
25+
const allowRestart = true; // fix
26+
const characters = await database.getCharactersByLogin(player.login);
27+
28+
this._client.sendPacket(new serverPackets.RestartResponse(allowRestart));
29+
this._client.sendPacket(new serverPackets.CharacterSelectInfo(player.login, characters));
30+
}
31+
}
32+
33+
module.exports = RequestRestart;

GameServer/ClientPackets/clientPackets.js

+2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ const MoveBackwardToLocation = require('./MoveBackwardToLocation');
1010
const Action = require('./Action');
1111
const RequestAttack = require('./RequestAttack');
1212
const Logout = require('./Logout');
13+
const RequestRestart = require('./RequestRestart');
1314

1415
module.exports = {
1516
ProtocolVersion,
@@ -24,4 +25,5 @@ module.exports = {
2425
Action,
2526
RequestAttack,
2627
Logout,
28+
RequestRestart,
2729
}

GameServer/Models/Player.js

+2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ class Player extends Character {
77

88
this._client = client;
99
this.target = null;
10+
// this characterObjectId fix
11+
// this getActiveChar ?
1012
}
1113

1214
getClient() {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
const ServerPacket = require('./ServerPacket.js');
2+
3+
class RestartResponse {
4+
constructor(allowRestart) {
5+
this._packet = new ServerPacket(5);
6+
this._packet.writeC(0x74)
7+
.writeD(allowRestart ? 0x01 : 0x00);
8+
}
9+
10+
getBuffer() {
11+
return this._packet.getBuffer();
12+
}
13+
}
14+
15+
module.exports = RestartResponse;

GameServer/ServerPackets/serverPackets.js

+2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ const StopRotating = require('./StopRotating');
2020
const DeleteObject = require('./DeleteObject');
2121
const StopMove = require('./StopMove');
2222
const LeaveWorld = require('./LeaveWorld');
23+
const RestartResponse = require('./RestartResponse');
2324

2425
module.exports = {
2526
CryptInit,
@@ -44,4 +45,5 @@ module.exports = {
4445
DeleteObject,
4546
StopMove,
4647
LeaveWorld,
48+
RestartResponse,
4749
}

0 commit comments

Comments
 (0)