Commit Graph

41 Commits

Author SHA1 Message Date
Scott Anderson 40932b9f5f Fix bigint serialization error (#916)
## Description:

- JSON serialization, bigint to string handling
- JSON deserialization, string to bigint handling

## Please complete the following:

- [x] I have added screenshots for all UI updates
- [x] I confirm I have thoroughly tested these changes and take full
responsibility for any bugs introduced
- [x] I understand that submitting code with bugs that could have been
caught through manual testing blocks releases and new features for all
contributors

---------

Co-authored-by: Scott Anderson <662325+scottanderson@users.noreply.github.com>
2025-05-28 10:33:20 -07:00
Scott Anderson 8cf2d86a70 Convert stats to bigints (#909)
Fixes #880

## Description:

Convert numeric stat types to bigint, and serialize those values as
strings.

## Please complete the following:

- [x] I have added screenshots for all UI updates
- [ ] I confirm I have thoroughly tested these changes and take full
responsibility for any bugs introduced
- [x] I understand that submitting code with bugs that could have been
caught through manual testing blocks releases and new features for all
contributors

---------

Co-authored-by: Scott Anderson <662325+scottanderson@users.noreply.github.com>
2025-05-27 19:13:05 -07:00
evanpelle 2b1f2dca6e remove player id from Schemas, fix archive bug (#907)
## Description:

Remove all references to playerID in the archive schema, since we
reference players by client id.
Also fixed the game not archiving bug, due to invalid reference.

## Please complete the following:

- [x] I have added screenshots for all UI updates
- [x] I confirm I have thoroughly tested these changes and take full
responsibility for any bugs introduced
- [x] I understand that submitting code with bugs that could have been
caught through manual testing blocks releases and new features for all
contributors

## Please put your Discord username so you can be contacted if a bug or
regression is found:

<DISCORD USERNAME>
2025-05-27 16:34:32 -07:00
evanpelle 85006e9375 Fix game failing to archive bug, players move to info object, and archiveFullGameToR2 was not updated 2025-05-27 11:43:43 -07:00
Scott Anderson 9302af868d Combine analytics and game types (#839)
## Description:

Combine analytics and game types. Simplify and remove redundant player
information.

- Remove ip address.
- Add playerID.
- Combine redundant player tables.
- Move game metadata in to GameEndInfo type, an extension of
GameStartInfo

## Please complete the following:

- [x] I have added screenshots for all UI updates
- [x] I confirm I have thoroughly tested these changes and take full
responsibility for any bugs introduced
- [x] I understand that submitting code with bugs that could have been
caught through manual testing blocks releases and new features for all
contributors

---------

Co-authored-by: Scott Anderson <662325+scottanderson@users.noreply.github.com>
2025-05-22 15:06:30 -04:00
Scott Anderson 5aa8356513 Record player stats during the game (#784)
## Description:

Record player stats for the analytics worker to import in to to
postgres. This changes defines a new Analytics schema version, `v0.0.2`,
containing additional metadata about each player.

## Please complete the following:

- [x] I have added screenshots for all UI updates
- [x] I confirm I have thoroughly tested these changes and take full
responsibility for any bugs introduced
- [x] I understand that submitting code with bugs that could have been
caught through manual testing blocks releases and new features for all
contributors
2025-05-21 00:10:29 -04:00
Scott Anderson 70745faac4 Enable strictNullChecks, eqeqeq (#436)
## Description:

Improve type safety and runtime correctness by:
1. Enabling TypeScript's
[strictNullChecks](https://www.typescriptlang.org/tsconfig/#strictNullChecks)
compiler option.
2. Replacing all loose equality operators (`==` and `!=`) with strict
equality operators (`===` and `!==`).
3. Cleaning up of type declarations, null handling logic, and equality
expressions throughout the project.

Currently, the code allows implicit assumptions that `null` and
`undefined` are interchangeable, and relies on type-coercing equality
checks that can introduce subtle bugs. These practices make it difficult
to reason about when values may be absent and hinder the effectiveness
of static analysis.

Migrating to strict null checks and enforcing strict equality
comparisons will clarify intent, reduce bugs, and make the codebase
safer and easier to maintain.

Fixes #466 

## Please complete the following:

- [x] I have added screenshots for all UI updates
- [x] I confirm I have thoroughly tested these changes and take full
responsibility for any bugs introduced
- [x] I understand that submitting code with bugs that could have been
caught through manual testing blocks releases and new features for all
contributors

---------

Co-authored-by: Scott Anderson <662325+scottanderson@users.noreply.github.com>
Co-authored-by: evanpelle <openfrontio@gmail.com>
2025-05-15 16:39:40 -07:00
Evan b947b764b7 bugfix: npe when winner is null 2025-04-04 16:10:16 -07:00
Evan 8b6895d745 add prettier import plugin 2025-03-31 13:09:27 -07:00
evanpelle ab3f4fbac1 All players must join game before spawn (#380)
## Description:
The server stores all players that have joined, and once the game starts
it sends a list of players to all clients. Players cannot join after the
game has started. Server now generated the PlayerID instead of the
client.

The is necessary for team mode, we need to know how who is playing the
game before it starts so we can properly assign teams based on clans.

## Please complete the following:

- [x] I have added screenshots for all UI updates
- [x] I confirm I have thoroughly tested these changes and take full
responsibility for any bugs introduced
- [x] I understand that submitting code with bugs that could have been
caught through manual testing blocks releases and new features for all
contributors

## Please put your Discord username so you can be contacted if a bug or
regression is found:

evan
2025-03-30 17:04:29 -07:00
evanpelle 2c9fc7307e fix config circular dependency (#296) 2025-03-19 15:42:47 -07:00
evanpelle 6499569240 add winston logger (#289) 2025-03-18 14:36:30 -07:00
evanpelle b1035a8e77 update to hetzner deployment (#220) 2025-03-12 09:17:27 -07:00
evanpelle 5dc00bc3ab use git commit hash verification when replaying archived games (#204) 2025-03-10 12:40:36 -07:00
evanpelle 33292aec5c feat: replay archived games, gamestate hash verification (#195)
create endpoint to load archived game. when joining game client first
checks if the game is active, if not it requests the game archive from
the server. the archive is sent to LocalServer to replay the game
locally. Every 10 ticks a hash is stored on the archive, and during
replay the LocalServer verifies this hash.
2025-03-09 14:24:39 -07:00
Evan d2dd262220 update map=>mapType map is keyword 2025-03-05 16:48:52 -08:00
Evan 92594c48d0 update end => end_time, end is reserved keyword 2025-03-05 14:51:56 -08:00
Evan 303180f51f update config, fix s3 region 2025-03-05 13:50:32 -08:00
Evan bf5b3ef993 use S3 & reshift to archive 2025-03-05 07:34:07 -08:00
Evan 393ed64ab5 don't log zod validation errors 2025-02-24 13:28:14 -08:00
Evan 6a66d0c52d load archived game if not found 2025-02-17 19:30:30 -08:00
Evan 4ee37323f9 format codebase with prettier 2025-02-01 12:05:11 -08:00
Evan a103d721e4 don't throw archive error 2025-02-01 12:05:11 -08:00
Evan a5a2f46099 have client send winner to server 2025-02-01 12:05:11 -08:00
Evan 0b8950f4bc fix ip processing bug: ip was sometimes an array 2024-12-31 13:09:20 -08:00
Evan 843a1186ce log ip address for debugging (TODO remove logging before next release) 2024-12-31 13:08:55 -08:00
Evan 0693b5db65 fix ip processing bug: ip was sometimes an array 2024-12-30 13:24:09 -08:00
Evan cb75f6780c log ip address for debugging (TODO remove logging before next release) 2024-12-27 12:36:06 -08:00
Evan 23b712623d better anonymize ip function 2024-12-21 20:43:48 -08:00
Evan 361b1f7d6c retry archiving to bigquery & gcs 2024-12-21 19:44:51 -08:00
Evan a73b7eab91 use custom ip masking instead of library 2024-12-20 21:41:17 -08:00
evanpelle d26eddcf2d make ips less precise before storing 2024-12-17 14:53:52 -08:00
evanpelle 387fdcdef8 update archive error handling 2024-12-17 14:46:29 -08:00
evanpelle 1417808c14 store user's persistent id in bigquery 2024-12-17 14:30:16 -08:00
Evan d99b60b477 fix config build error, better logging in game server 2024-12-17 14:30:16 -08:00
Evan 2fc81c7d17 store client ips in bigquery table 2024-12-14 10:03:05 -08:00
Evan dfe2f27ba8 store metadata in bigquery 2024-12-10 20:28:39 -08:00
evanpelle 601f606a7f save game stats to bigquery, update enums 2024-12-10 20:28:39 -08:00
evanpelle 63b0e89d8b rebalance unit cost 2024-12-10 20:28:39 -08:00
evanpelle d290054e5c catch and log archive failure to prevent server crash 2024-12-09 13:14:59 -08:00
Evan 7669105a1b record games in gcs 2024-12-07 18:30:04 -08:00