From 3d0f7f362dd2bc3585719f5906232167d98cc8a3 Mon Sep 17 00:00:00 2001 From: Evoleo <44549380+evolutionleo@users.noreply.github.com> Date: Mon, 27 Mar 2023 21:27:17 +0300 Subject: [PATCH] [v5.0.1] js typing fixes --- Client/options/operagx/options_operagx.yy | 2 +- JavascriptServer/internal/concepts/client.js | 55 ++++++++++++++---- JavascriptServer/internal/concepts/lobby.js | 25 +++++++- JavascriptServer/internal/schemas/account.js | 3 +- .../internal/schemas/friend_request.js | 9 +-- JavascriptServer/internal/schemas/profile.js | 3 +- JavascriptServer/jsconfig.json | 20 +++++++ Release/GMClient.zip | Bin 157516 -> 157606 bytes Release/JSServer.zip | Bin 40925 -> 41068 bytes Release/TSServer.zip | Bin 47035 -> 47180 bytes Release/Warp.yymps | Bin 157516 -> 157606 bytes TypescriptServer/jsconfig.json | 20 +++++++ .../src/internal/concepts/client.ts | 55 ++++++++++++++---- .../src/internal/concepts/lobby.ts | 27 ++++++++- .../src/internal/schemas/account.ts | 3 +- .../src/internal/schemas/friend_request.ts | 11 +--- .../src/internal/schemas/profile.ts | 3 +- 17 files changed, 190 insertions(+), 46 deletions(-) create mode 100644 JavascriptServer/jsconfig.json create mode 100644 TypescriptServer/jsconfig.json diff --git a/Client/options/operagx/options_operagx.yy b/Client/options/operagx/options_operagx.yy index bb157d5..36530da 100644 --- a/Client/options/operagx/options_operagx.yy +++ b/Client/options/operagx/options_operagx.yy @@ -7,7 +7,7 @@ }, "option_operagx_display_cursor": true, "option_operagx_editUrl": "", - "option_operagx_game_name": "${project_name}", + "option_operagx_game_name": "Client", "option_operagx_guid": "", "option_operagx_internalShareUrl": "", "option_operagx_interpolate_pixels": true, diff --git a/JavascriptServer/internal/concepts/client.js b/JavascriptServer/internal/concepts/client.js index 7e203e4..02032d8 100644 --- a/JavascriptServer/internal/concepts/client.js +++ b/JavascriptServer/internal/concepts/client.js @@ -15,25 +15,35 @@ import MatchMaker from '#util/matchmaker'; // this is a wrapper around sockets export default class Client extends SendStuff { name = ''; - socket = null; /** @type {import('ws').WebSocket | import('net').Socket} */ - type; /** @type {'ws' | 'tcp'} */ + /** @type {import('ws').WebSocket | import('net').Socket} */ + socket = null; + /** @type {'ws' | 'tcp'} */ + type; ip; - lobby = null; /** @type {Lobby} */ - room = null; /** @type {Room} */ - party = null; /** @type {Party} */ + /** @type {Lobby} */ + lobby = null; + /** @type {Room} */ + room = null; + /** @type {Party} */ + party = null; party_invites = []; - account = null; /** @type {Account} */ - profile = null; /** @type {Profile} */ + /** @type {Account} */ + account = null; + /** @type {Profile} */ + profile = null; // used internally in packet.ts - halfpack; /** @type {Buffer} */ + /** @type {Buffer} */ + halfpack; - entity = null; /** @type {PlayerEntity} */ + /** @type {PlayerEntity} */ + entity = null; - ping; /** @type {number} */ + /** @type {number} */ + ping; room_join_timer = -1; // if >0 - joined recently @@ -272,6 +282,10 @@ export default class Client extends SendStuff { } } + /** + * @param {Client|IProfile} user_to + * @returns {Promise} + */ async friendRequestSend(user_to) { user_to = user_to instanceof Client ? user_to.profile : user_to; if (!this.logged_in) @@ -283,6 +297,11 @@ export default class Client extends SendStuff { return await FriendRequest.create({ sender, receiver }); } + /** + * @param {Client|IProfile} user_from + * @param {Client|IProfile} user_to + * @returns {Promise} + */ async friendRequestFind(user_from, user_to) { user_from = user_from instanceof Client ? user_from.profile : user_from; user_to = user_to instanceof Client ? user_to.profile : user_to; @@ -290,6 +309,9 @@ export default class Client extends SendStuff { return await FriendRequest.findRequestId(user_from._id, user_to._id); } + /** + * @param {Client|IProfile} user_from + */ async friendRequestAccept(user_from) { user_from = user_from instanceof Client ? user_from.profile : user_from; if (!this.logged_in) @@ -302,6 +324,9 @@ export default class Client extends SendStuff { } } + /** + * @param {Client|IProfile} user_from + */ async friendRequestReject(user_from) { user_from = user_from instanceof Client ? user_from.profile : user_from; if (!this.logged_in) @@ -314,6 +339,9 @@ export default class Client extends SendStuff { } } + /** + * @param {Client|IProfile} user_to + */ async friendRequestCancel(user_to) { user_to = user_to instanceof Client ? user_to.profile : user_to; if (!this.logged_in) @@ -326,6 +354,9 @@ export default class Client extends SendStuff { } } + /** + * @param {Client|IProfile} friend + */ async friendRemove(friend) { friend = friend instanceof Client ? friend.profile : friend; if (!this.logged_in) @@ -340,7 +371,6 @@ export default class Client extends SendStuff { } - partyCreate() { if (this.party) this.partyLeave(); @@ -363,6 +393,9 @@ export default class Client extends SendStuff { this.sendPartyInviteSent(); } + /** + * @param {string} partyid + */ partyJoin(partyid) { let party = partyGet(partyid); party.addMember(this); diff --git a/JavascriptServer/internal/concepts/lobby.js b/JavascriptServer/internal/concepts/lobby.js index 11851d9..b9c2d1b 100644 --- a/JavascriptServer/internal/concepts/lobby.js +++ b/JavascriptServer/internal/concepts/lobby.js @@ -45,9 +45,11 @@ export function lobbyList() { // in context of an MMO this is a shard/separated world export default class Lobby extends EventEmitter { - lobbyid = "-1"; // assigned when created + lobbyid = '-1'; // assigned when created status = 'open'; + /** @type {Client[]} */ players = []; + /** @type {Room[]} */ rooms = []; max_players = global.config.lobby.max_players || undefined; // smells like Java @@ -66,6 +68,10 @@ export default class Lobby extends EventEmitter { } } + /** + * @param {Client} player + * @returns {void|-1} + */ addPlayer(player) { if (this.full) { trace('warning: can\'t add a player - the lobby is full!'); @@ -101,6 +107,11 @@ export default class Lobby extends EventEmitter { } } + /** + * @param {Client} player + * @param {string?} reason + * @param {boolean?} forced + */ kickPlayer(player, reason, forced) { var idx = this.players.indexOf(player); this.players.splice(idx, 1); @@ -115,6 +126,9 @@ export default class Lobby extends EventEmitter { } } + /** + * @param {Client} player + */ addIntoPlay(player) { if (player.lobby === this) { player.onPlay(); @@ -124,10 +138,17 @@ export default class Lobby extends EventEmitter { } } + /** + * @param {string} room_name + * @returns {Room} room + */ findRoomByMapName(room_name) { return this.rooms.find(r => r.map.name === room_name); } + /** + * @param {object} data + */ broadcast(data) { this.players.forEach(function (player) { player.write(data); @@ -142,7 +163,7 @@ export default class Lobby extends EventEmitter { } close() { - // kick all plaayers + // kick all players this.players.forEach((player) => this.kickPlayer(player, 'lobby is closing!', true)); this.status = 'closed'; } diff --git a/JavascriptServer/internal/schemas/account.js b/JavascriptServer/internal/schemas/account.js index f65d76d..3b79f49 100644 --- a/JavascriptServer/internal/schemas/account.js +++ b/JavascriptServer/internal/schemas/account.js @@ -1,7 +1,8 @@ // this section contains a schema for saving players' account info import trace from '#util/logging'; -import { model, Schema } from 'mongoose'; +import mongoose from 'mongoose'; +const { model, Schema } = mongoose; import { hashPassword, verifyPassword } from '#util/password_encryption'; // you can edit this schema! diff --git a/JavascriptServer/internal/schemas/friend_request.js b/JavascriptServer/internal/schemas/friend_request.js index 9be0ee3..6923255 100644 --- a/JavascriptServer/internal/schemas/friend_request.js +++ b/JavascriptServer/internal/schemas/friend_request.js @@ -1,8 +1,5 @@ -import { createRequire } from 'module'; -const require = createRequire(import.meta.url); - -const mongoose = require('mongoose'); -const { Schema, model } = mongoose; +import mongoose from 'mongoose'; +const { model, Schema } = mongoose; import Profile from '#schemas/profile'; const friendRequestSchema = new Schema({ @@ -41,5 +38,5 @@ friendRequestSchema.statics.cancel = async function (req_id) { await FriendRequest.findByIdAndDelete(req_id); }; -export const FriendRequest = new model('FriendRequest', friendRequestSchema); +export const FriendRequest = model('FriendRequest', friendRequestSchema); export default FriendRequest; diff --git a/JavascriptServer/internal/schemas/profile.js b/JavascriptServer/internal/schemas/profile.js index 1d8f2f9..b6daa38 100644 --- a/JavascriptServer/internal/schemas/profile.js +++ b/JavascriptServer/internal/schemas/profile.js @@ -1,5 +1,6 @@ // This schema is for profiles -import { Schema, model } from 'mongoose'; +import mongoose from 'mongoose'; +const { model, Schema } = mongoose; // this holds the state of the profile // you can edit this schema! diff --git a/JavascriptServer/jsconfig.json b/JavascriptServer/jsconfig.json new file mode 100644 index 0000000..f995e4e --- /dev/null +++ b/JavascriptServer/jsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "paths": { + "#schemas/*": ["internal/schemas/*"], + "#entity/*": ["internal/entities/entity_types/*"], + "#entities/*": ["internal/entities/*"], + "#initializers/*": ["internal/initializers/*"], + "#types/*": ["internal/types/*"], + "#concepts/*": ["internal/concepts/*"], + "#util/*": ["internal/util/*"], + + "#custom/*": ["custom/*"], + "#internal/*": ["internal/*"], + + "#root/*": ["./*"], + + "*": ["node_modules/*", "src/*"] + } + } +} \ No newline at end of file diff --git a/Release/GMClient.zip b/Release/GMClient.zip index 7787e90569cccecea225feb25f05a79a8e71b5e7..d2799b15eab8b57ee080f8cfdf3bac2ddcbb0f6a 100644 GIT binary patch delta 19056 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 KiW-E?^8W$pC@jkW delta 19042 zcmb8X1z45K6EJ?>mr%O9ySqdhq(K^_rArz?5IGWpw1Dy=h=737NGlzRpdu|@BB)4; zg$VrLa}M{a_ulXKegE@3=Q+Exv$L}^v$M0a3-<@{UcSPkG1SGvrbHl4oSdaPOGboUXf}X?=iYMzf(;xqk+(dK znBIBv$UcidFA|>{e)y_iHZRp+|ML$s(ik3gJCjhhft3W$f$zEasZm=~Ev%RDWv52A zd0V-}@wkHox{Y|nFI@WUK*@b(AqUF2qpB|T{=kPO<*ud>GKHe6q4wjqoi9ej*DQrI zl|DRQ+4)X(>wMOS^2c0aQ94dVuug zkbhbIq?PXFBezmyzM5*5*8Ng?_i_Y@*(XF9vk-~7U4N{H?~f8b3q8N_XEc`YJ4djg zQ%JLH3hfhP{ml_Kzeh3wDNZ;NXTIXB#HFRNTzI-J*n0rouUBs zePS;unU-Fn+<|8P5H-Bg&4(}En9hpL%a5$TCM`w?J*WGT_$kImi~i$dN<7}6@iGfx z=J1m_IsV0X_QO-y_~9;3?%iS2D>}%N*^)KZJ{n7wK zJpUu=6~dac=f5a_X}WoT3=%%Env#aSq^XvB_mey6d?7$!F_0doySS9TX9*bf{d}Og z)7~2TZ7E4&Kj`U zT6=fAW7-Az;obe*y{U5i%ZG^OzSm<5C9_$*R-v~(fH_EsCmY&2Z_4~Xhi$;L>wAAV zFPctU;odXAwFIrwx9;*v^`$(-wKlnZJBG98($6sweps}dMcpE;eqzzggsb+fI#roR=*tk#svvJ!;#;YR5LqF*WwF;ALiiqy z3TvhzIZVlv_rgd5Evp%#@Al91R~0u)65r6A@)}~;;5QxplvVr5aLL|{t6-8UspX7t zmgb1Xjr+v&V8z{@WsB=^+_>TvfWcv_+??nr`Jwj0Ah`XHizoNh%a%Q@pC{HZ4yXLJ4GaZ~#|jI)i}W zT={bD7GJ7-u1VGHfau1{0N$I-ML|~e3mK0K6lH1ys(a(k^m66(EX&A;#yB6uxbuZL zS&XBks{m=$Jc$9meK2Jk2)@ySw2!`H-AC0c6kh)ETf$wY{I&&_X^7-taPpwckp+5tUgL_*!{J!N96OvAkR^E1k9?P>``K zc?;3{E?~kkdGv9xIpbPIw+pVL9)&&V_#)xzWQ_{fIfW|?qR~a2eCPX+#i=OCl-rWt zZRKg)A2av5;VSoXbU(NCpsgy7EIih~e=%FJQ_|K%*42AF>S4Q8-WRfO?D8|utJpqA zq>p2LFeU!cts4#==#gvr_>DBzFK0b1pK6h9WycE=qhq@iG}V5t`?JM~}KkU!zdxc{a-1Ysq#YC{i0Y z>(nPC7RC@w$$hI`*xV=R{1cDdda2YfFw<(}WW{?o+ZEWNXy4x)ox3vnfl|@p{kZ!n`u31XcU?m(cGD%> zq|%^Rx-p^BPQT2ag<-$WGq%w&(WVBp%9poK6z(ZM%(yR{uja0xI_Z%&@~kOM1^G25 zm81InVPmCN(D@!>+Xo5(o0cXfJ+)m8ZM5b)TqAcrIp&^=Ra>@h-{naT+K)?3W#oqv zpSI3kA2?{*`}B-^>F3pT-rP*TZ`MiLT*I3?K` z!pTJr1UzzVP6dI>IJ4FGi^BTU#k)U8-M^FDc1O9rsvkKVkhpXPpSeh_(gXnLlg=H_Qu&xHiXy3S;URXt!nE;6FN3Ax}OO?4+gAm>2~r6GMy^S)RoMdBaF2;C_l^) zUHobt!*{Yp#Kp=z?O>0I@RA>LTTJkrX=p_4)f2

E-Qnd^{F-GlWaKW*t1&)On+K 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 P|IQGBFrbDH&xrpIWf4vg diff --git a/Release/JSServer.zip b/Release/JSServer.zip index 5ca4775bdb0202bc8ce50cbf012baf09eccdea07..69828b63a621eda0afb9022a1131a465424357a3 100644 GIT binary patch delta 8437 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\!tdfDh#{v8dGKFcZJ+k*I1RJ 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 diff --git a/Release/Warp.yymps b/Release/Warp.yymps index 7787e90569cccecea225feb25f05a79a8e71b5e7..d2799b15eab8b57ee080f8cfdf3bac2ddcbb0f6a 100644 GIT binary patch delta 19056 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 KiW-E?^8W$pC@jkW delta 19042 zcmb8X1z45K6EJ?>mr%O9ySqdhq(K^_rArz?5IGWpw1Dy=h=737NGlzRpdu|@BB)4; zg$VrLa}M{a_ulXKegE@3=Q+Exv$L}^v$M0a3-<@{UcSPkG1SGvrbHl4oSdaPOGboUXf}X?=iYMzf(;xqk+(dK znBIBv$UcidFA|>{e)y_iHZRp+|ML$s(ik3gJCjhhft3W$f$zEasZm=~Ev%RDWv52A zd0V-}@wkHox{Y|nFI@WUK*@b(AqUF2qpB|T{=kPO<*ud>GKHe6q4wjqoi9ej*DQrI zl|DRQ+4)X(>wMOS^2c0aQ94dVuug zkbhbIq?PXFBezmyzM5*5*8Ng?_i_Y@*(XF9vk-~7U4N{H?~f8b3q8N_XEc`YJ4djg zQ%JLH3hfhP{ml_Kzeh3wDNZ;NXTIXB#HFRNTzI-J*n0rouUBs zePS;unU-Fn+<|8P5H-Bg&4(}En9hpL%a5$TCM`w?J*WGT_$kImi~i$dN<7}6@iGfx z=J1m_IsV0X_QO-y_~9;3?%iS2D>}%N*^)KZJ{n7wK zJpUu=6~dac=f5a_X}WoT3=%%Env#aSq^XvB_mey6d?7$!F_0doySS9TX9*bf{d}Og z)7~2TZ7E4&Kj`U zT6=fAW7-Az;obe*y{U5i%ZG^OzSm<5C9_$*R-v~(fH_EsCmY&2Z_4~Xhi$;L>wAAV zFPctU;odXAwFIrwx9;*v^`$(-wKlnZJBG98($6sweps}dMcpE;eqzzggsb+fI#roR=*tk#svvJ!;#;YR5LqF*WwF;ALiiqy z3TvhzIZVlv_rgd5Evp%#@Al91R~0u)65r6A@)}~;;5QxplvVr5aLL|{t6-8UspX7t zmgb1Xjr+v&V8z{@WsB=^+_>TvfWcv_+??nr`Jwj0Ah`XHizoNh%a%Q@pC{HZ4yXLJ4GaZ~#|jI)i}W zT={bD7GJ7-u1VGHfau1{0N$I-ML|~e3mK0K6lH1ys(a(k^m66(EX&A;#yB6uxbuZL zS&XBks{m=$Jc$9meK2Jk2)@ySw2!`H-AC0c6kh)ETf$wY{I&&_X^7-taPpwckp+5tUgL_*!{J!N96OvAkR^E1k9?P>``K zc?;3{E?~kkdGv9xIpbPIw+pVL9)&&V_#)xzWQ_{fIfW|?qR~a2eCPX+#i=OCl-rWt zZRKg)A2av5;VSoXbU(NCpsgy7EIih~e=%FJQ_|K%*42AF>S4Q8-WRfO?D8|utJpqA zq>p2LFeU!cts4#==#gvr_>DBzFK0b1pK6h9WycE=qhq@iG}V5t`?JM~}KkU!zdxc{a-1Ysq#YC{i0Y z>(nPC7RC@w$$hI`*xV=R{1cDdda2YfFw<(}WW{?o+ZEWNXy4x)ox3vnfl|@p{kZ!n`u31XcU?m(cGD%> zq|%^Rx-p^BPQT2ag<-$WGq%w&(WVBp%9poK6z(ZM%(yR{uja0xI_Z%&@~kOM1^G25 zm81InVPmCN(D@!>+Xo5(o0cXfJ+)m8ZM5b)TqAcrIp&^=Ra>@h-{naT+K)?3W#oqv zpSI3kA2?{*`}B-^>F3pT-rP*TZ`MiLT*I3?K` z!pTJr1UzzVP6dI>IJ4FGi^BTU#k)U8-M^FDc1O9rsvkKVkhpXPpSeh_(gXnLlg=H_Qu&xHiXy3S;URXt!nE;6FN3Ax}OO?4+gAm>2~r6GMy^S)RoMdBaF2;C_l^) zUHobt!*{Yp#Kp=z?O>0I@RA>LTTJkrX=p_4)f2

E-Qnd^{F-GlWaKW*t1&)On+K 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 P|IQGBFrbDH&xrpIWf4vg diff --git a/TypescriptServer/jsconfig.json b/TypescriptServer/jsconfig.json new file mode 100644 index 0000000..f995e4e --- /dev/null +++ b/TypescriptServer/jsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "paths": { + "#schemas/*": ["internal/schemas/*"], + "#entity/*": ["internal/entities/entity_types/*"], + "#entities/*": ["internal/entities/*"], + "#initializers/*": ["internal/initializers/*"], + "#types/*": ["internal/types/*"], + "#concepts/*": ["internal/concepts/*"], + "#util/*": ["internal/util/*"], + + "#custom/*": ["custom/*"], + "#internal/*": ["internal/*"], + + "#root/*": ["./*"], + + "*": ["node_modules/*", "src/*"] + } + } +} \ No newline at end of file diff --git a/TypescriptServer/src/internal/concepts/client.ts b/TypescriptServer/src/internal/concepts/client.ts index 5bc4d68..1e529ad 100644 --- a/TypescriptServer/src/internal/concepts/client.ts +++ b/TypescriptServer/src/internal/concepts/client.ts @@ -29,25 +29,35 @@ export type ClientInfo = { // this is a wrapper around sockets export default class Client extends SendStuff implements IClient { name: string = ''; - socket: Sock = null; /** @type {import('ws').WebSocket | import('net').Socket} */ - type: SockType; /** @type {'ws' | 'tcp'} */ + /** @type {import('ws').WebSocket | import('net').Socket} */ + socket: Sock = null; + /** @type {'ws' | 'tcp'} */ + type: SockType; ip: string; - lobby: Lobby = null; /** @type {Lobby} */ - room: Room = null; /** @type {Room} */ - party: Party = null; /** @type {Party} */ + /** @type {Lobby} */ + lobby: Lobby = null; + /** @type {Room} */ + room: Room = null; + /** @type {Party} */ + party: Party = null; party_invites: string[] = []; - account: IAccount = null; /** @type {Account} */ - profile: IProfile = null; /** @type {Profile} */ + /** @type {Account} */ + account: IAccount = null; + /** @type {Profile} */ + profile: IProfile = null; // used internally in packet.ts - halfpack: Buffer; /** @type {Buffer} */ + /** @type {Buffer} */ + halfpack: Buffer; - entity: PlayerEntity = null; /** @type {PlayerEntity} */ + /** @type {PlayerEntity} */ + entity: PlayerEntity = null; - ping: number; /** @type {number} */ + /** @type {number} */ + ping: number; room_join_timer: number = -1; // if >0 - joined recently @@ -283,6 +293,10 @@ export default class Client extends SendStuff implements IClient { } } + /** + * @param {Client|IProfile} user_to + * @returns {Promise} + */ async friendRequestSend(user_to:Client|IProfile):Promise { user_to = user_to instanceof Client ? user_to.profile : user_to; if (!this.logged_in) return null; @@ -293,6 +307,11 @@ export default class Client extends SendStuff implements IClient { return await FriendRequest.create({ sender, receiver }); } + /** + * @param {Client|IProfile} user_from + * @param {Client|IProfile} user_to + * @returns {Promise} + */ private async friendRequestFind(user_from:Client|IProfile, user_to:Client|IProfile) { user_from = user_from instanceof Client ? user_from.profile : user_from; user_to = user_to instanceof Client ? user_to.profile : user_to; @@ -300,6 +319,9 @@ export default class Client extends SendStuff implements IClient { return await FriendRequest.findRequestId(user_from._id, user_to._id); } + /** + * @param {Client|IProfile} user_from + */ async friendRequestAccept(user_from:Client|IProfile) { user_from = user_from instanceof Client ? user_from.profile : user_from; if (!this.logged_in) return; @@ -311,6 +333,9 @@ export default class Client extends SendStuff implements IClient { } } + /** + * @param {Client|IProfile} user_from + */ async friendRequestReject(user_from:Client|IProfile) { user_from = user_from instanceof Client ? user_from.profile : user_from; if (!this.logged_in) return; @@ -322,6 +347,9 @@ export default class Client extends SendStuff implements IClient { } } + /** + * @param {Client|IProfile} user_to + */ async friendRequestCancel(user_to:Client|IProfile) { user_to = user_to instanceof Client ? user_to.profile : user_to; if (!this.logged_in) return null; @@ -333,6 +361,9 @@ export default class Client extends SendStuff implements IClient { } } + /** + * @param {Client|IProfile} friend + */ async friendRemove(friend:Client|IProfile) { friend = friend instanceof Client ? friend.profile : friend; if (!this.logged_in) return; @@ -346,7 +377,6 @@ export default class Client extends SendStuff implements IClient { } - partyCreate() { if (this.party) this.partyLeave(); @@ -367,6 +397,9 @@ export default class Client extends SendStuff implements IClient { this.sendPartyInviteSent(); } + /** + * @param {string} partyid + */ partyJoin(partyid: string) { let party = partyGet(partyid); party.addMember(this); diff --git a/TypescriptServer/src/internal/concepts/lobby.ts b/TypescriptServer/src/internal/concepts/lobby.ts index 6e1761f..c1f5fe2 100644 --- a/TypescriptServer/src/internal/concepts/lobby.ts +++ b/TypescriptServer/src/internal/concepts/lobby.ts @@ -69,9 +69,11 @@ export function lobbyList():Lobby[] { // in context of an MMO this is a shard/separated world export default class Lobby extends EventEmitter { - lobbyid:string = "-1"; // assigned when created + lobbyid:string = '-1'; // assigned when created status:LobbyStatus = 'open'; + /** @type {Client[]} */ players:Client[] = []; + /** @type {Room[]} */ rooms:Room[] = []; max_players:number = global.config.lobby.max_players || undefined; // smells like Java @@ -90,6 +92,10 @@ export default class Lobby extends EventEmitter { } } + /** + * @param {Client} player + * @returns {void|-1} + */ addPlayer(player:Client):void|-1 { if (this.full) { trace('warning: can\'t add a player - the lobby is full!'); @@ -125,6 +131,11 @@ export default class Lobby extends EventEmitter { } } + /** + * @param {Client} player + * @param {string?} reason + * @param {boolean?} forced + */ kickPlayer(player:Client, reason?:string, forced?:boolean):void { var idx = this.players.indexOf(player); this.players.splice(idx, 1); @@ -139,6 +150,9 @@ export default class Lobby extends EventEmitter { } } + /** + * @param {Client} player + */ addIntoPlay(player:Client):void { if (player.lobby === this) { player.onPlay(); @@ -148,10 +162,17 @@ export default class Lobby extends EventEmitter { } } - findRoomByMapName(room_name:string) { + /** + * @param {string} room_name + * @returns {Room} room + */ + findRoomByMapName(room_name:string):Room { return this.rooms.find(r => r.map.name === room_name); } + /** + * @param {object} data + */ broadcast(data:object):void { this.players.forEach(function(player) { player.write(data); @@ -166,7 +187,7 @@ export default class Lobby extends EventEmitter { } close():void { - // kick all plaayers + // kick all players this.players.forEach((player) => this.kickPlayer(player, 'lobby is closing!', true)); this.status = 'closed'; } diff --git a/TypescriptServer/src/internal/schemas/account.ts b/TypescriptServer/src/internal/schemas/account.ts index 86f097c..3488d71 100644 --- a/TypescriptServer/src/internal/schemas/account.ts +++ b/TypescriptServer/src/internal/schemas/account.ts @@ -1,7 +1,8 @@ // this section contains a schema for saving players' account info import trace from '#util/logging'; -import { Model, model, Document, ObjectId, Schema } from 'mongoose'; +import mongoose, { ObjectId, Document, Model } from 'mongoose'; +const { model, Schema } = mongoose; import { hashPassword, verifyPassword } from '#util/password_encryption'; diff --git a/TypescriptServer/src/internal/schemas/friend_request.ts b/TypescriptServer/src/internal/schemas/friend_request.ts index c3d4906..b11ac83 100644 --- a/TypescriptServer/src/internal/schemas/friend_request.ts +++ b/TypescriptServer/src/internal/schemas/friend_request.ts @@ -1,10 +1,5 @@ -import { createRequire } from 'module'; -const require = createRequire(import.meta.url); - -const mongoose = require('mongoose'); - -import { Model, Document, ObjectId } from 'mongoose'; -const { Schema, model } = mongoose; +import mongoose, { Model, Document, ObjectId } from 'mongoose'; +const { model, Schema } = mongoose; import { Account, IAccount } from '#schemas/account'; import Profile, { IProfile } from '#schemas/profile'; @@ -61,5 +56,5 @@ friendRequestSchema.statics.cancel = async function(req_id:OID):Promise { await FriendRequest.findByIdAndDelete(req_id); } -export const FriendRequest:IFriendRequestModel = new model('FriendRequest', friendRequestSchema); +export const FriendRequest:IFriendRequestModel = model('FriendRequest', friendRequestSchema); export default FriendRequest; \ No newline at end of file diff --git a/TypescriptServer/src/internal/schemas/profile.ts b/TypescriptServer/src/internal/schemas/profile.ts index e2a9fd7..aa56ab0 100644 --- a/TypescriptServer/src/internal/schemas/profile.ts +++ b/TypescriptServer/src/internal/schemas/profile.ts @@ -1,5 +1,6 @@ // This schema is for profiles -import { Schema, model, Document, ObjectId, Model } from 'mongoose'; +import mongoose, { Document, ObjectId, Model } from 'mongoose'; +const { model, Schema } = mongoose; import { Account, IAccount } from '#schemas/account'; export interface IProfile extends Document {