Skip to content
This repository has been archived by the owner on Jun 5, 2024. It is now read-only.

Commit

Permalink
add client-side character, and account state
Browse files Browse the repository at this point in the history
  • Loading branch information
Stuyk committed Apr 7, 2023
1 parent 106130f commit f9f448a
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 5 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,9 @@ Fix Escape on Menu Close for RMLUI Menu
Athena.systems.inventory.factory.getBaseItemsAsync
Athena.systems.inventory.factory.getBaseItems
AthenaClient.systems.playerConfig.get('account-data') : Returns Filtered Account Data
AthenaClient.systems.playerConfig.get('character-data') : Returns Character Data
--------------------------------------
--- Everything Below is Before April 2
--------------------------------------
Expand Down
6 changes: 5 additions & 1 deletion src/core/client/systems/playerConfig.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import * as alt from 'alt-client';
import { PlayerConfigKeys } from '@AthenaShared/enums/playerConfigKeys';
import { Account } from '@AthenaShared/interfaces/iAccount';
import { Character } from '@AthenaShared/interfaces/character';

export type ConfigCallback = (value: any) => void;

Expand All @@ -17,14 +19,16 @@ const InternalFunctions = {
},
};

export function get(key: 'character-data'): Character | undefined;
export function get(key: 'account-data'): Account | undefined;
/**
* Get a value assigned by the server.
*
* @template ReturnType
* @param {string} key
* @return {(ReturnType | undefined)}
*/
export function get<ReturnType, CustomKeys>(key: PlayerConfigKeys | CustomKeys): ReturnType | undefined {
export function get<ReturnType, CustomKeys = PlayerConfigKeys>(key: CustomKeys): ReturnType | undefined {
return alt.getMeta(String(key)) as ReturnType;
}

Expand Down
13 changes: 10 additions & 3 deletions src/core/server/document/accountData.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,12 @@ export function bind(player: alt.Player, document: Account) {
}

cache[player.id] = document;

try {
const dataCopy = deepCloneObject<Account>(cache[player.id]);
Athena.webview.emit(player, SYSTEM_EVENTS.PLAYER_EMIT_ACCOUNT_STATE, removeRestrictedFields(dataCopy));
const cleanedData = removeRestrictedFields(dataCopy);
Athena.webview.emit(player, SYSTEM_EVENTS.PLAYER_EMIT_ACCOUNT_STATE, cleanedData);
Athena.config.player.set(player, 'account-data', cleanedData);
} catch (err) {}
}

Expand Down Expand Up @@ -153,7 +156,9 @@ export async function set<T = {}, Keys = keyof KnownKeys<Account & T>>(

try {
const dataCopy = deepCloneObject<Account>(cache[player.id]);
Athena.webview.emit(player, SYSTEM_EVENTS.PLAYER_EMIT_ACCOUNT_STATE, removeRestrictedFields(dataCopy));
const cleanedData = removeRestrictedFields(dataCopy);
Athena.config.player.set(player, 'account-data', cleanedData);
Athena.webview.emit(player, SYSTEM_EVENTS.PLAYER_EMIT_ACCOUNT_STATE, cleanedData);
} catch (err) {}

if (typeof callbacks[typeSafeFieldName] === 'undefined') {
Expand Down Expand Up @@ -190,7 +195,9 @@ export async function setBulk<T = {}, Keys = Partial<Account & T>>(player: alt.P

try {
const dataCopy = deepCloneObject<Account>(cache[player.id]);
Athena.webview.emit(player, SYSTEM_EVENTS.PLAYER_EMIT_ACCOUNT_STATE, removeRestrictedFields(dataCopy));
const cleanedData = removeRestrictedFields(dataCopy);
Athena.webview.emit(player, SYSTEM_EVENTS.PLAYER_EMIT_ACCOUNT_STATE, cleanedData);
Athena.config.player.set(player, 'account-data', cleanedData);
} catch (err) {}

Object.keys(fields).forEach((key) => {
Expand Down
4 changes: 4 additions & 0 deletions src/core/server/document/character.ts
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,8 @@ export async function set<T = {}, Keys = keyof KnownKeys<Character & T>>(
}

Athena.webview.emit(player, SYSTEM_EVENTS.PLAYER_EMIT_STATE, cache[player.id]);
Athena.config.player.set(player, 'character-data', cache[player.id]);

if (typeof callbacks[typeSafeFieldName] === 'undefined') {
return;
}
Expand Down Expand Up @@ -251,7 +253,9 @@ export async function setBulk<T = {}, Keys = Partial<Character & T>>(player: alt

cache[player.id] = Object.assign(cache[player.id], fields);
await Database.updatePartialData(cache[player.id]._id, fields, Athena.database.collections.Characters);

Athena.webview.emit(player, SYSTEM_EVENTS.PLAYER_EMIT_STATE, cache[player.id]);
Athena.config.player.set(player, 'character-data', cache[player.id]);

Object.keys(fields).forEach((key) => {
if (typeof callbacks[key] === 'undefined') {
Expand Down
2 changes: 1 addition & 1 deletion src/core/shared/enums/playerConfigKeys.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
export type PlayerConfigKeys = //
'inventory-size' | 'inventory-weight-enabled' | 'inventory-max-weight';
'inventory-size' | 'inventory-weight-enabled' | 'inventory-max-weight' | 'account-data' | 'character-data';

0 comments on commit f9f448a

Please sign in to comment.