/
setter.ts
80 lines (68 loc) · 2.6 KB
/
setter.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import * as alt from 'alt-server';
import * as Athena from '../api';
import * as emit from './emit';
import * as PlayerEvents from '@AthenaServer/player/events';
import { SYSTEM_EVENTS } from '@AthenaShared/enums/system';
import { ActionMenu } from '@AthenaShared/interfaces/actions';
import { Account } from '../../shared/interfaces/iAccount';
import { Collections } from '../database/collections';
import { PLAYER_SYNCED_META } from '@AthenaShared/enums/playerSynced';
import Database from '@stuyk/ezmongodb';
/**
* Set the current account data for this player.
*
* @param {Partial<Account>} accountData
* @return {Promise<void>}
*
*/
export async function account(player: alt.Player, accountData: Account): Promise<void> {
if (Overrides.account) {
return Overrides.account(player, accountData);
}
// Setup JWT Storage
accountData._id = accountData._id.toString();
const newToken = await Athena.systems.jwt.create(accountData as Account);
alt.emitClient(player, SYSTEM_EVENTS.QUICK_TOKEN_UPDATE, newToken);
player.setSyncedMeta(PLAYER_SYNCED_META.ACCOUNT_ID, accountData.id);
emit.meta(player, 'permissions', accountData.permissions);
Athena.document.account.bind(player, accountData);
PlayerEvents.trigger('set-account-data', player);
}
export function actionMenu(player: alt.Player, actionMenu: ActionMenu) {
if (Overrides.actionMenu) {
return Overrides.actionMenu(player, actionMenu);
}
alt.emitClient(player, SYSTEM_EVENTS.SET_ACTION_MENU, actionMenu);
}
/**
* Set this player as respawned.
* @param {(alt.Vector3 | null)} position Use null to find closest hospital.
*
*/
export function respawned(player: alt.Player, position: alt.IVector3): void {
if (Overrides.respawned) {
return Overrides.respawned(player, position);
}
Athena.document.character.set(player, 'isDead', false);
emit.meta(player, 'isDead', false);
PlayerEvents.trigger('respawned', player, position);
}
interface SetterFunctions {
account: typeof account;
actionMenu: typeof actionMenu;
respawned: typeof respawned;
}
const Overrides: Partial<SetterFunctions> = {};
export function override(functionName: 'account', callback: typeof account);
export function override(functionName: 'actionMenu', callback: typeof actionMenu);
export function override(functionName: 'respawned', callback: typeof respawned);
/**
* Used to override any setter functions
*
*
* @param {keyof SetterFunctions} functionName
* @param {*} callback
*/
export function override(functionName: keyof SetterFunctions, callback: any): void {
Overrides[functionName] = callback;
}