trucoshi 9.3.0 → 10.0.0-rc2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/events.d.ts CHANGED
@@ -1,6 +1,5 @@
1
- import { EMatchState } from "@trucoshi/prisma";
2
1
  import { SocketError } from "./server";
3
- import { IAccountDetails, IChatMessage, ILobbyOptions, IMatchDetails, IPlayerRanking, IPublicChatRoom, IPublicMatch, IPublicMatchInfo, IPublicMatchStats, ITrucoshiStats, IUserData, IWaitingPlayData, IWaitingSayData } from "./types";
2
+ import { EMatchState, IAccountDetails, IChatMessage, ILobbyOptions, IMatchDetails, IPlayerRanking, IPublicChatRoom, IPublicMatch, IPublicMatchInfo, IPublicMatchStats, ITrucoshiStats, IUserData, IWaitingPlayData, IWaitingSayData } from "./types";
4
3
  export type IEventCallback<T = {}> = (args: {
5
4
  success: boolean;
6
5
  error?: SocketError;
@@ -16,6 +15,9 @@ export declare enum EServerEvent {
16
15
  KICK_PLAYER = "PLAYER_KICKED",
17
16
  UPDATE_ACTIVE_MATCHES = "UPDATE_ACTIVE_MATCHES",
18
17
  UPDATE_PUBLIC_MATCHES = "UPDATE_PUBLIC_MATCHES",
18
+ PAUSE_MATCH_REQUEST = "PAUSE_MATCH_REQUEST",
19
+ UNPAUSE_STARTED = "UNPAUSE_STARTED",
20
+ PLAY_AGAIN_REQUEST = "PLAY_AGAIN_REQUEST",
19
21
  WAITING_POSSIBLE_SAY = "WAITING_POSSIBLE_SAY",
20
22
  UPDATE_CHAT = "UPDAET_CHAT",
21
23
  UPDATE_STATS = "UPDATE_STATS"
@@ -28,6 +30,9 @@ export interface ServerToClientEvents {
28
30
  [EServerEvent.UPDATE_ACTIVE_MATCHES]: (activeMatches: IPublicMatchInfo[]) => void;
29
31
  [EServerEvent.UPDATE_PUBLIC_MATCHES]: (publicMatches: IPublicMatchInfo[]) => void;
30
32
  [EServerEvent.UPDATE_MATCH]: (match: IPublicMatch, stats?: IPublicMatchStats, callback?: () => void) => void;
33
+ [EServerEvent.PAUSE_MATCH_REQUEST]: (roomId: string, fromOpponent: boolean, requestExpiresAt: number, answer: (answer: boolean) => void) => void;
34
+ [EServerEvent.PLAY_AGAIN_REQUEST]: (roomId: string, requestExpiresAt: number) => void;
35
+ [EServerEvent.UNPAUSE_STARTED]: (roomId: string, unpausesAt: number) => void;
31
36
  [EServerEvent.KICK_PLAYER]: (match: IPublicMatch, session: string, reason?: string) => void;
32
37
  [EServerEvent.MATCH_DELETED]: (matchSessionId: string) => void;
33
38
  [EServerEvent.SET_SESSION]: (userData: IUserData, serverVersion: string, activeMatches: Array<IPublicMatchInfo>) => void;
@@ -44,10 +49,12 @@ export declare enum EClientEvent {
44
49
  SET_MATCH_OPTIONS = "SET_MATCH_OPTIONS",
45
50
  LIST_MATCHES = "LIST_MATCHES",
46
51
  LIST_RANKING = "LIST_RANKING",
52
+ SET_PLAYER_READY = "SET_PLAYER_READY",
47
53
  JOIN_MATCH = "JOIN_MATCH",
48
54
  START_MATCH = "START_MATCH",
55
+ PAUSE_MATCH = "PAUSE_MATCH",
56
+ PLAY_AGAIN = "PLAY_AGAIN",
49
57
  ADD_BOT = "ADD_BOT",
50
- SET_PLAYER_READY = "SET_PLAYER_READY",
51
58
  FETCH_MATCH = "FETCH_MATCH",
52
59
  FETCH_CHAT_ROOM = "FETCH_CHAT_ROOM",
53
60
  KICK_PLAYER = "KICK_PLAYER",
@@ -88,6 +95,12 @@ export interface ClientToServerEvents {
88
95
  matchSessionId?: string;
89
96
  }>) => void;
90
97
  [EClientEvent.KICK_PLAYER]: (matchSessionId: string, key: string, callback: IEventCallback) => void;
98
+ [EClientEvent.PAUSE_MATCH]: (matchSessionId: string, pause: boolean, callback?: IEventCallback<{
99
+ paused?: boolean;
100
+ }>) => void;
101
+ [EClientEvent.PLAY_AGAIN]: (matchSessionId: string, callback?: IEventCallback<{
102
+ newMatchSessionId?: string;
103
+ }>) => void;
91
104
  [EClientEvent.FETCH_MATCH]: (matchSessionId: string, callback: IEventCallback<{
92
105
  match: IPublicMatch | null;
93
106
  }>) => void;
package/dist/events.js CHANGED
@@ -10,6 +10,9 @@ export var EServerEvent;
10
10
  EServerEvent["KICK_PLAYER"] = "PLAYER_KICKED";
11
11
  EServerEvent["UPDATE_ACTIVE_MATCHES"] = "UPDATE_ACTIVE_MATCHES";
12
12
  EServerEvent["UPDATE_PUBLIC_MATCHES"] = "UPDATE_PUBLIC_MATCHES";
13
+ EServerEvent["PAUSE_MATCH_REQUEST"] = "PAUSE_MATCH_REQUEST";
14
+ EServerEvent["UNPAUSE_STARTED"] = "UNPAUSE_STARTED";
15
+ EServerEvent["PLAY_AGAIN_REQUEST"] = "PLAY_AGAIN_REQUEST";
13
16
  EServerEvent["WAITING_POSSIBLE_SAY"] = "WAITING_POSSIBLE_SAY";
14
17
  EServerEvent["UPDATE_CHAT"] = "UPDAET_CHAT";
15
18
  EServerEvent["UPDATE_STATS"] = "UPDATE_STATS";
@@ -24,10 +27,12 @@ export var EClientEvent;
24
27
  EClientEvent["SET_MATCH_OPTIONS"] = "SET_MATCH_OPTIONS";
25
28
  EClientEvent["LIST_MATCHES"] = "LIST_MATCHES";
26
29
  EClientEvent["LIST_RANKING"] = "LIST_RANKING";
30
+ EClientEvent["SET_PLAYER_READY"] = "SET_PLAYER_READY";
27
31
  EClientEvent["JOIN_MATCH"] = "JOIN_MATCH";
28
32
  EClientEvent["START_MATCH"] = "START_MATCH";
33
+ EClientEvent["PAUSE_MATCH"] = "PAUSE_MATCH";
34
+ EClientEvent["PLAY_AGAIN"] = "PLAY_AGAIN";
29
35
  EClientEvent["ADD_BOT"] = "ADD_BOT";
30
- EClientEvent["SET_PLAYER_READY"] = "SET_PLAYER_READY";
31
36
  EClientEvent["FETCH_MATCH"] = "FETCH_MATCH";
32
37
  EClientEvent["FETCH_CHAT_ROOM"] = "FETCH_CHAT_ROOM";
33
38
  EClientEvent["KICK_PLAYER"] = "KICK_PLAYER";
@@ -60,7 +60,7 @@ export function dealCards(table, deck) {
60
60
  if (cheat_lots_of_flowers) {
61
61
  deck.shuffle(players[0].idx);
62
62
  for (const player of players) {
63
- if (Math.random() > 0.5) {
63
+ if (Math.random() > 0.33) {
64
64
  const first = deck.takeCard();
65
65
  const second = deck.pick(deck.cards.find((c) => c.charAt(1) === first.charAt(1)));
66
66
  const third = deck.pick(deck.cards.find((c) => c.charAt(1) === first.charAt(1)));
@@ -2,6 +2,8 @@ import { ICard } from "../types";
2
2
  export declare const PLAYER_ABANDON_TIMEOUT: number;
3
3
  export declare const PLAYER_TURN_TIMEOUT: number;
4
4
  export declare const PREVIOUS_HAND_ACK_TIMEOUT: number;
5
+ export declare const PAUSE_REQUEST_TIMEOUT: number;
6
+ export declare const UNPAUSE_TIME: number;
5
7
  export declare const CARDS: {
6
8
  "1e": number;
7
9
  "1b": number;
@@ -1,6 +1,8 @@
1
1
  export const PLAYER_ABANDON_TIMEOUT = 1000 * 60 * 2;
2
2
  export const PLAYER_TURN_TIMEOUT = 1000 * 30;
3
3
  export const PREVIOUS_HAND_ACK_TIMEOUT = 1000 * 3;
4
+ export const PAUSE_REQUEST_TIMEOUT = 1000 * 30;
5
+ export const UNPAUSE_TIME = 1000 * 10;
4
6
  export const CARDS = {
5
7
  "1e": 13,
6
8
  "1b": 12,
@@ -1,8 +1,9 @@
1
1
  import { IHand } from "../truco";
2
- import { ICard } from "../types";
2
+ import { ICard, IPlayer, ITeam } from "../types";
3
3
  import memoize from "lodash.memoize";
4
4
  export declare const memoizeMinute: typeof memoize;
5
5
  export declare function getMaxNumberIndex<T = number>(array: Array<T>): number;
6
6
  export declare function getMinNumberIndex<T = number>(array: Array<T>): number;
7
7
  export declare function getCardValue(card: ICard): number;
8
+ export declare function getOpponentTeam(teamIdx: 0 | 1 | number | Pick<ITeam, "id"> | Pick<IPlayer, "teamIdx"> | null): 0 | 1;
8
9
  export declare function checkHandWinner(hand: IHand, forehandTeamIdx: 0 | 1): null | 0 | 1;
package/dist/lib/utils.js CHANGED
@@ -20,6 +20,13 @@ export function getMinNumberIndex(array) {
20
20
  export function getCardValue(card) {
21
21
  return CARDS[card] !== undefined ? CARDS[card] : -2;
22
22
  }
23
+ export function getOpponentTeam(teamIdx) {
24
+ if (teamIdx === null) {
25
+ return 0;
26
+ }
27
+ const idx = typeof teamIdx === "number" ? teamIdx : "teamIdx" in teamIdx ? teamIdx.teamIdx : teamIdx.id;
28
+ return Number(!idx);
29
+ }
23
30
  export function checkHandWinner(hand, forehandTeamIdx) {
24
31
  var _a, _b, _c, _d;
25
32
  const roundsWon = {
package/dist/types.d.ts CHANGED
@@ -11,7 +11,8 @@ export declare enum EMatchState {
11
11
  UNREADY = "UNREADY",
12
12
  READY = "READY",
13
13
  STARTED = "STARTED",
14
- FINISHED = "FINISHED"
14
+ FINISHED = "FINISHED",
15
+ PAUSED = "PAUSED"
15
16
  }
16
17
  export type IPlayerRanking = Omit<UserStats, "id" | "satsBet" | "satsWon" | "satsLost"> & Pick<User, "name" | "avatarUrl">;
17
18
  export interface IMatchDetails extends Match {
@@ -304,6 +305,7 @@ export interface IPlayer {
304
305
  session: string;
305
306
  payRequestId?: number;
306
307
  abandonedTime: number;
308
+ disconnectedAt: number | null;
307
309
  hand: Array<ICard>;
308
310
  usedHand: Array<ICard>;
309
311
  prevHand: Array<ICard>;
@@ -321,7 +323,9 @@ export interface IPlayer {
321
323
  value: number;
322
324
  cards: ICard[];
323
325
  } | null;
324
- didSomething: boolean;
326
+ _didSomething: boolean;
327
+ get didSomething(): boolean;
328
+ set didSomething(value: boolean);
325
329
  hasSaidFlor: boolean;
326
330
  hasSaidEnvidoPoints: boolean;
327
331
  hasSaidTruco: boolean;
@@ -350,6 +354,7 @@ export interface IPlayer {
350
354
  setPayRequest(id?: number): void;
351
355
  setMatchPlayerId(id?: number): void;
352
356
  setTurn(turn: boolean): void;
357
+ delayTurnExpiration(ms: number): void;
353
358
  setTurnExpiration(...args: [number, number | null] | [null, null]): void;
354
359
  setEnvidoTurn(turn: boolean): void;
355
360
  getPublicPlayer(session?: string | "log"): IPublicPlayer;
package/dist/types.js CHANGED
@@ -6,6 +6,7 @@ export var EMatchState;
6
6
  EMatchState["READY"] = "READY";
7
7
  EMatchState["STARTED"] = "STARTED";
8
8
  EMatchState["FINISHED"] = "FINISHED";
9
+ EMatchState["PAUSED"] = "PAUSED";
9
10
  })(EMatchState || (EMatchState = {}));
10
11
  export var EChatSystem;
11
12
  (function (EChatSystem) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "trucoshi",
3
- "version": "9.3.0",
3
+ "version": "10.0.0-rc2",
4
4
  "description": "Truco Game Server",
5
5
  "main": "dist/types.js",
6
6
  "license": "GPL-3.0",