forked from simrail/simrail.pro
add missing files
This commit is contained in:
parent
fec84ae109
commit
873a38768e
10
scripts/clear-redis.js
Normal file
10
scripts/clear-redis.js
Normal file
@ -0,0 +1,10 @@
|
||||
import { createClient } from 'redis';
|
||||
|
||||
createClient({url: process.env.REDIS_URI}).connect().then(async (x) => {
|
||||
await x.json.del('stations_occupied');
|
||||
await x.json.del('stations');
|
||||
await x.json.del('trains');
|
||||
await x.json.del('trains_occupied');
|
||||
console.log('done')
|
||||
process.exit(1);
|
||||
})
|
47
src/modules/trains.ts
Normal file
47
src/modules/trains.ts
Normal file
@ -0,0 +1,47 @@
|
||||
import { Server, Station, Train } from '@simrail/types';
|
||||
import { MLog } from '../mongo/logs.js';
|
||||
import { IPlayer } from '../types/player.js';
|
||||
import { SimrailClientEvents } from '../util/SimrailClient.js';
|
||||
import { v4 } from 'uuid';
|
||||
import { getVehicle } from '../util/contants.js';
|
||||
import { MProfile } from '../mongo/profile.js';
|
||||
import { MTrainLog } from '../mongo/trainLogs.js';
|
||||
|
||||
export class TrainsModule {
|
||||
public static load() {
|
||||
|
||||
client.on(SimrailClientEvents.TrainLeft, async (server: Server, train: Train, player: IPlayer, joinedAt: number, leftAt: number, points: number, distance: number, vehicle: string) => {
|
||||
if (distance) {
|
||||
const userProfile = await MProfile.findOne({ steam: player.steamid }) ?? await MProfile.create({ steam: player.steamid, id: v4() });
|
||||
|
||||
const vehicleName = getVehicle(vehicle) ?? vehicle;
|
||||
|
||||
if (!userProfile.trainStats) userProfile.trainStats = {};
|
||||
|
||||
if (userProfile.trainStats[vehicleName]) {
|
||||
userProfile.trainStats[vehicleName].distance = userProfile.trainStats[vehicleName].distance + distance;
|
||||
userProfile.trainStats[vehicleName].score = userProfile.trainStats[vehicleName].score + points;
|
||||
} else {
|
||||
userProfile.trainStats[vehicleName] = {
|
||||
distance, score: points
|
||||
}
|
||||
}
|
||||
|
||||
await MProfile.findOneAndUpdate({ id: userProfile.id }, { trainStats: userProfile.trainStats })
|
||||
|
||||
}
|
||||
|
||||
MTrainLog.create({
|
||||
id: v4(),
|
||||
userSteamId: player.steamid,
|
||||
userAvatar: player.avatarfull,
|
||||
userUsername: player.personaname,
|
||||
joinedDate: joinedAt,
|
||||
leftDate: leftAt,
|
||||
trainNumber: train.TrainNoLocal,
|
||||
server: server.ServerCode,
|
||||
distance, points
|
||||
});
|
||||
})
|
||||
}
|
||||
}
|
46
src/mongo/profile.ts
Normal file
46
src/mongo/profile.ts
Normal file
@ -0,0 +1,46 @@
|
||||
import { Model, model, Schema } from 'mongoose';
|
||||
|
||||
|
||||
export const raw_schema = {
|
||||
id: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
steam: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
trainStats: {
|
||||
type: Object,
|
||||
required: false,
|
||||
default: {}
|
||||
},
|
||||
dispatcherStats: {
|
||||
type: Object,
|
||||
required: false,
|
||||
default: {}
|
||||
},
|
||||
}
|
||||
|
||||
const schema = new Schema<IProfile>(raw_schema);
|
||||
|
||||
|
||||
export type TMProfile = Model<IProfile>
|
||||
|
||||
export const MProfile = model<IProfile>('profile', schema);
|
||||
|
||||
export interface IProfile {
|
||||
id: string
|
||||
steam: string
|
||||
trainStats: {
|
||||
[trainName: string]: {
|
||||
score: number,
|
||||
distance: number
|
||||
}
|
||||
}
|
||||
dispatcherStats: {
|
||||
[name: string]: {
|
||||
time: number
|
||||
}
|
||||
}
|
||||
}
|
67
src/mongo/trainLogs.ts
Normal file
67
src/mongo/trainLogs.ts
Normal file
@ -0,0 +1,67 @@
|
||||
import { Model, model, Schema } from 'mongoose';
|
||||
|
||||
|
||||
export const raw_schema = {
|
||||
id: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
trainNumber: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
userSteamId: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
userUsername: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
userAvatar: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
joinedDate: {
|
||||
type: Number,
|
||||
required: false,
|
||||
default: undefined
|
||||
},
|
||||
leftDate: {
|
||||
type: Number,
|
||||
required: true
|
||||
},
|
||||
distance: {
|
||||
type: Number,
|
||||
required: false,
|
||||
default: 0
|
||||
},
|
||||
points: {
|
||||
type: Number,
|
||||
required: false,
|
||||
default: 0
|
||||
},
|
||||
server: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
}
|
||||
|
||||
const schema = new Schema<ITrainLog>(raw_schema);
|
||||
|
||||
export type TMTrainLog = Model<ITrainLog>
|
||||
|
||||
export const MTrainLog = model<ITrainLog>('train_logs', schema);
|
||||
|
||||
export interface ITrainLog {
|
||||
id: string
|
||||
userSteamId: string
|
||||
userUsername: string
|
||||
userAvatar: string
|
||||
joinedDate?: number
|
||||
leftDate: number
|
||||
trainNumber: string
|
||||
distance: number
|
||||
points: number
|
||||
server: string
|
||||
}
|
127
src/util/contants.ts
Normal file
127
src/util/contants.ts
Normal file
@ -0,0 +1,127 @@
|
||||
import wcmatch from 'wildcard-match'
|
||||
|
||||
/*
|
||||
E186_134 = "Traxx/E186-134",
|
||||
E186_929 = "Traxx/E186-929",
|
||||
E6ACTa_014 = "Dragon2/E6ACTa-014",
|
||||
E6ACTa_016 = "Dragon2/E6ACTa-016",
|
||||
E6ACTadb_027 = "Dragon2/E6ACTadb-027",
|
||||
ED250_018 = "Pendolino/ED250-018 Variant",
|
||||
EN57_009 = "EN57/EN57-009",
|
||||
EN57_047 = "EN57/EN57-047",
|
||||
EN57_1000 = "EN57/EN57-1000",
|
||||
EN57_1003 = "EN57/EN57-1003",
|
||||
EN57_1051 = "EN57/EN57-1051",
|
||||
EN57_1219 = "EN57/EN57-1219",
|
||||
EN57_1316 = "EN57/EN57-1316",
|
||||
EN57_1458 = "EN57/EN57-1458",
|
||||
EN57_1567 = "EN57/EN57-1567",
|
||||
EN57_1571 = "EN57/EN57-1571",
|
||||
EN57_1752 = "EN57/EN57-1752",
|
||||
EN57_1755 = "EN57/EN57-1755",
|
||||
EN57_1796 = "EN57/EN57-1796",
|
||||
EN57_1821 = "EN57/EN57-1821",
|
||||
EN57_614 = "EN57/EN57-614",
|
||||
EN71_005 = "EN57/EN71-005",
|
||||
EN71_011 = "EN57/EN71-011",
|
||||
EN76_006 = "Elf/EN76-006",
|
||||
EN76_022 = "Elf/EN76-022",
|
||||
EN96_001 = "Elf/EN96-001",
|
||||
EP07_135 = "4E/EP07-135",
|
||||
EP07_174 = "4E/EP07-174",
|
||||
EP08_001 = "4E/EP08-001",
|
||||
EP08_013 = "4E/EP08-013",
|
||||
ET22_1163 = "201E/ET22-1163", -- DLC required: 2868050
|
||||
ET22_243 = "201E/ET22-243", -- DLC required: 2868050
|
||||
ET22_256 = "201E/ET22-256", -- DLC required: 2868050
|
||||
ET22_644 = "201E/ET22-644", -- DLC required: 2868050
|
||||
ET22_836 = "201E/ET22-836", -- DLC required: 2868050
|
||||
ET22_911 = "201E/ET22-911", -- DLC required: 2868050
|
||||
ET25_002 = "Dragon2/ET25-002",
|
||||
EU07_005 = "4E/EU07-005",
|
||||
EU07_068 = "4E/EU07-068",
|
||||
EU07_085 = "4E/EU07-085",
|
||||
EU07_092 = "4E/EU07-092",
|
||||
EU07_096 = "4E/EU07-096",
|
||||
EU07_241 = "4E/EU07-241",
|
||||
*/
|
||||
|
||||
export const trainsList = [
|
||||
{
|
||||
train: 'Traxx (E186)',
|
||||
pattern: [
|
||||
'Traxx/E186-*',
|
||||
]
|
||||
},
|
||||
{
|
||||
train: 'Dragon2 (E6ACTa, E6ACTadb)',
|
||||
pattern: [
|
||||
'Dragon2/E6ACTa-*',
|
||||
'Dragon2/E6ACTadb-*'
|
||||
]
|
||||
},
|
||||
{
|
||||
train: 'Dragon2 (ET25)',
|
||||
pattern: [
|
||||
'Dragon2/ET25-*',
|
||||
]
|
||||
},
|
||||
{
|
||||
train: 'Pendolino (ED250)',
|
||||
pattern: [
|
||||
'Pendolino/ED250-*',
|
||||
]
|
||||
},
|
||||
{
|
||||
train: 'EN57',
|
||||
pattern: [
|
||||
'EN57/EN57-*',
|
||||
]
|
||||
},
|
||||
{
|
||||
train: 'EN71',
|
||||
pattern: [
|
||||
'EN57/EN71-*',
|
||||
]
|
||||
},
|
||||
{
|
||||
train: 'EN96',
|
||||
pattern: [
|
||||
'Elf/EN76-*',
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
train: 'EP07',
|
||||
pattern: [
|
||||
'4E/EP07-*',
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
train: 'EP08',
|
||||
pattern: [
|
||||
'4E/EP08-*',
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
train: 'ET22',
|
||||
pattern: [
|
||||
'201E/ET22-*',
|
||||
]
|
||||
},
|
||||
|
||||
|
||||
{
|
||||
train: 'EU07',
|
||||
pattern: [
|
||||
'4E/EU07-*',
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
export const getVehicle = (name: string) => {
|
||||
return trainsList.find(x => wcmatch(x.pattern)(name))?.train;
|
||||
};
|
Loading…
x
Reference in New Issue
Block a user