Commit Graph
60 Commits
Author SHA1 Message Date
neckfireandClaude Opus 4.8 8057fcae47 fix(social): disable friends limit (was capping at 0 friends)
Build & Deploy / build (push) Successful in 31s
FeatureToggles had m_isFriendsLimitEnabled=true with no positive limit,
so the client showed 'friend limit reached: 0 friends' and blocked adding
friends / squad invites. Disabled the toggle (squads/social already on).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 17:31:44 +02:00
neckfireandClaude Opus 4.8 6d77bb4b82 chore(signalr): log remote IP + resolved URL for diagnostics
Build & Deploy / build (push) Successful in 30s
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 16:24:49 +02:00
neckfireandClaude Opus 4.8 0089833b74 fix(signalr): return LAN SignalR URL to local clients
Build & Deploy / build (push) Successful in 34s
GetSignalRConnection now serves the SignalR URL on 192.168.1.136 to
clients whose remote IP is on the LAN, and keeps the public domain for
external clients. The real-time WebSocket (libwebsockets, incl. under
Proton/Wine) couldn't reach the public domain from inside the LAN
(hairpin NAT) — it failed right after the intro as "error code 5".
External friends are unaffected (still get the domain).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 16:18:35 +02:00
neckfireandClaude Opus 4.8 0588849e4c feat(squad): in-memory squad/lobby state + wire squad functions
Build & Deploy / build (push) Successful in 31s
Adds SquadService (singleton, process-local) tracking squads by the
squadId the client shares across party members, plus a user->squad index
so TryGetCompleteSquadInfo (no squadId in request) can resolve the
caller's squad. Members are lazily registered on any squad call.

- TryGetCompleteSquadInfo: returns the caller's real squad.
- SquadMemberReadyForMatch: joins the squad, records readiness/map,
  returns the squad + whether everyone is ready.
- SquadMemberSelectedMap: records the member's selected map.
- DbUserService.FindByIdAsync: resolve display name for squad members.

Groundwork for the station lobby; assumes the client drives squads via
these calls with a shared squadId (to confirm with a 2-client session).
Real-time SignalR push (unknown event names) deferred; the squad is
carried in responses + TryGetCompleteSquadInfo for now.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 15:34:43 +02:00
neckfireandClaude Opus 4.8 310e2bf7e9 feat(social): friends list resolution + fix ping request 500
Build & Deploy / build (push) Successful in 24s
- RequestUsersPingRequest: the client sends ping=2147483648 (int.MaxValue+1)
  for "no ping", which overflowed the int field and made every ping request
  return 500. Widened to long.
- ClientsideFriendsImport: persist the imported Steam friend ids per user.
- GetFriendList: resolve those ids to the players that exist on this server
  (batch lookup by Steam auth key) and return them as friends. Response
  shape is best-effort pending in-game confirmation.
- DbUserService.FindManyAsync: batch-resolve auth keys to players.

First step of the station lobby (see friends on the server). Squad
formation / invite flow to follow once friends are visible.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 14:18:44 +02:00
neckfireandClaude Opus 4.8 5d93b3541d fix(store): return per-user owned vanities, not the whole catalogue
Build & Deploy / build (push) Successful in 23s
GetUserInventory returned every vanity in the Vanities title data as an
owned item, so the client showed all Aurum-shop cosmetics as already
owned. Return only the cosmetics the player actually owns: purchased
(VanityItems) plus currently equipped (CharacterVanity slots and the
GlobalVanity sprays / banner / emotes / drop pod), so the starter outfit
stays owned while the rest of the Aurum shop becomes purchasable.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 13:55:50 +02:00
neckfireandClaude Opus 4.8 40dad82559 feat(store): populate Aurum/cosmetic shops from Vanities
Build & Deploy / build (push) Successful in 23s
GetStoreItems now also serves the cosmetic stores the client queries
(AurumShop, and the DailyShop_/WeeklyShop_ rotations) from the Vanities
title data: every vanity with StoreData.Amount > 0 is offered for that
price in Aurum (AU). AurumShop lists the full priced catalogue (632
items); the daily/weekly ids show a deterministic rotating slice so they
stay stable within a period but change across periods.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 13:46:17 +02:00
neckfireandClaude Opus 4.8 3b108d99ca feat(store): populate shops via GetStoreItems
Build & Deploy / build (push) Successful in 23s
GetStoreItems was a stub returning an empty object, so every shop
(Korolev / ICA / Osiris / QuickShop vendors) showed up empty. Build the
store on the fly from the Blueprints title data: for the requested
StoreId, list every item that declares an ItemShopsCraftingData entry
for that store, converting its currency recipe ingredients into
VirtualCurrencyPrices (SoftCurrency->SC, Aurum->AU, InsuranceCurrency->IN).
Item-ingredient (crafting) entries are left to the crafting UI.

Adds the StoreId/CatalogVersion fields to the request and the
FGetStoreItemsResult / FStoreItem PlayFab response models.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 12:53:37 +02:00
neckfireandClaude Opus 4.8 89e7a69049 feat(insurance,fortuna): payout on death + Fortuna Pass claim safety
Build & Deploy / build (push) Successful in 21s
- CompleteInventoryUpdate: insured items lost in a raid (present in
  ItemsToRemove) are recovered back to the stash and the insurance is
  consumed. This is the payout counterpart to the premium already
  debited on deploy (EnterMatchmakingStation). Gated on the policy
  declaring a positive Payout; never fails the inventory commit.
- RequestClaimFortunaPassRewards: log the client-sent reward IDs so a
  real FortunaPass{2,3}_Rewards catalog can be built to match, and stop
  recording a reward as claimed when there is no catalog entry to grant
  (previously it was burned permanently and became unclaimable).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 12:30:11 +02:00
neckfireandClaude Opus 4.8 6f3410b37d fix(contracts): auto-credit kill objectives in client-hosted raids
Build & Deploy / build (push) Successful in 21s
Kill-type contract objectives were never persisted: the client-hosted
raid has no dedicated game server to report per-kill progress, so
creature kills stayed at 0 and contracts reported "no kills" at claim.

- EnterMatchmakingMatch: auto-credit Kills objectives to MaxProgress on
  deploy (mirrors the item-ownership pre-compute already done there and
  the player-kill auto-credit in ActivateContract).
- ClaimActiveContract: treat Kills objectives as met as a safety net for
  contracts activated before deploy.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 11:56:14 +02:00
neckfireandClaude Opus 4.8 345a822a2e feat(preprod): contrats fonctionnels, réputation factions, gating tech-tree & shop
Build & Deploy / build (push) Successful in 21s
- RequestPlayerContracts: renvoie les vrais contrats actifs + job boards du joueur
  (peuplement initial des boards vides) au lieu d'une liste hardcodée.
- RequestFactionProgression: renvoie la réputation réelle des 3 factions (au lieu de 0).
- StartTechTreeNodeUpgradeClient: dependency check PlayerQuarterLevelRequired.
- PurchaseWeaponShopItem: critère de déblocage par contrat (UnlockData.ContractLockPurchase).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 02:20:27 +02:00
neckfireandClaude Opus 4.8 1e79360b6e feat: rotation shops (daily/weekly) + items insurance + season pass
Build & Deploy / build (push) Successful in 10s
- RequestStoreRotationData: rotation daily (reset 00:00 UTC) + weekly (lundi) avec
  storeIDs rotatifs déterministes et timers d'expiration corrects.
- EnterMatchmakingStation: traite purchaseInsuranceRequest au déploiement — marque
  les items assurés (Insurance + owner) et débite la prime (TitleData InventoryInsurance).
- FYPurchaseInventoryInsuranceRequest: modèle complété (insuranceId + itemIds).
- RequestClaimFortunaPassRewards: claim saison-correct (S2/S3 séparés, plus d'écrasement)
  + octroi des récompenses depuis catalogue TitleData optionnel (repli sûr sinon).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-13 02:55:54 +02:00
Yury 269659b8da Stash changes 2025-03-31 01:39:22 +03:00
Yury 14097808d8 Add CompleteInventoryUpdate CloudScript function from closed beta 2025-03-31 01:38:58 +03:00
Yury 6fe4432c6e Add custom UpdatePlayerActiveContracts CloudScript function for contracts update 2025-03-31 01:38:35 +03:00
Yury d55ef94fd9 Update launchSettings for HTTP server 2025-03-31 01:35:20 +03:00
Yury 1f4640fccd Fix given amount of quest reward 2025-03-31 01:34:41 +03:00
Yury faf90c1841 Autocomplete only PvP quests now 2025-03-31 01:34:16 +03:00
Yury b3c5fa3e2b Disallow accepting already completed contracts 2025-03-31 01:32:15 +03:00
Yury 2fb730cb8c Temporary disable HTTPS redirection 2025-03-31 01:31:46 +03:00
Yury 87e1708d6b Fix inventory update on quarter level upgrade 2025-03-31 01:31:35 +03:00
Yury 2695f25242 Update contract info structure and title data
* Include information about kill conditions
* Use default client settings for MatchmakingSetup
2025-03-31 01:31:18 +03:00
Yury 81dea35778 Allow for configurable SignalR connection settings 2025-03-31 01:30:14 +03:00
Yury 704abac924 Add client version check 2025-03-31 01:29:00 +03:00
Yury 033227eb83 Revert stash size to 90 items 2025-03-25 20:40:24 +02:00
Yury 1b94cbdd8d Update TitleData to match client data 2025-03-25 20:07:29 +02:00
Yury b2e2106912 Fix insurance token name 2025-03-25 20:06:35 +02:00
Yury 3858d482e9 Fill objectives when receiving new contract after claim 2025-03-25 20:05:29 +02:00
Yury 5e42a54bbf Add JobBoardsData document for job board data per player 2025-03-25 18:54:15 +02:00
Yury 7766d47bda Add EnterMatchmaking function for CB 2025-03-25 18:53:52 +02:00
Yury 31dbcfdb4f Change durability on inventory update 2025-03-25 18:53:09 +02:00
Yury 43e2b69d66 Set objective counter before deployment 2025-03-25 18:52:55 +02:00
Yury 7a0e0d1285 Fix possible exception on non-existent quest activation 2025-03-25 18:52:28 +02:00
Yury 36d797b391 Fix item sell formula for Ammo and Ability items 2025-03-25 18:51:55 +02:00
Yury 4e0b6440d9 Fix job boards 2025-03-25 18:51:29 +02:00
Yury eec90dae91 Set max objective progress for kills and visit quests 2025-03-25 18:50:38 +02:00
Yury dfc38de7b5 Push API changes
* Fix item repair cost formula
* Add "RequestUpdateAvailableFreeLoadout" function (WIP)
* Fix item sell formula
* Fix item stack split on sell
* Fix contract progression counting for objectives other than owned items
* Refactor balance into a proper struct
* Separate and update Season 2 and Season 3 data
2025-03-04 23:39:20 +02:00
Yury 280b87314c Push changes 2025-02-24 01:06:32 +02:00
AeonLucid 9560417268 Use vcpkg manifest for minhook 2025-01-07 03:01:40 +01:00
AeonLucid 3691d229d5 Update to .NET 8 2024-07-01 21:52:30 +02:00
AeonLucid ed0f771df6 Started on UE4 server, semi working handshake 2022-01-09 06:29:02 +01:00
AeonLucid e9091d7ac3 Rename Prospect.Server.Steam to Prospect.Steam 2022-01-08 19:33:41 +01:00
AeonLucid 99c4fe49b9 Reading is hard 2022-01-07 23:31:28 +01:00
AeonLucid f51bbfb56c Verify QoS request 2022-01-07 23:28:55 +01:00
AeonLucid 93926eedf8 Add more CloudScript functions, start of EnterMatchmaking 2022-01-07 22:29:20 +01:00
AeonLucid 27649724c8 Add QoS beacon 2022-01-07 07:09:55 +01:00
AeonLucid bf14074046 Add nullable support 2022-01-07 07:09:50 +01:00
AeonLucid 2f01cf7411 Convert to new namespace stuff and implicit usings 2022-01-07 06:07:05 +01:00
AeonLucid d0c249f73c Update to .NET 6 2022-01-07 05:06:45 +01:00
AeonLucid 265dce16a0 Small changes 2022-01-07 05:01:40 +01:00