fix: track FreeFavorsEarned & FreeFavorsUsed #792
@ -50,6 +50,13 @@ export const syndicateSacrificeController: RequestHandler = async (request, resp
|
||||
syndicate.Title ??= 0;
|
||||
syndicate.Title += 1;
|
||||
|
||||
if (syndicate.Title > 0 && manifest.favours.length != 0) {
|
||||
syndicate.FreeFavorsEarned ??= [];
|
||||
if (!syndicate.FreeFavorsEarned.includes(syndicate.Title)) {
|
||||
syndicate.FreeFavorsEarned.push(syndicate.Title);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
await inventory.save();
|
||||
|
||||
if (reward) {
|
||||
|
@ -79,23 +79,33 @@ export const handlePurchase = async (
|
||||
|
||||
switch (purchaseRequest.PurchaseParams.Source) {
|
||||
case 2:
|
||||
if (!purchaseRequest.PurchaseParams.UseFreeFavor!) {
|
||||
{
|
||||
const syndicateTag = purchaseRequest.PurchaseParams.SyndicateTag!;
|
||||
const syndicate = ExportSyndicates[syndicateTag];
|
||||
if (syndicate) {
|
||||
const favour = syndicate.favours.find(x => x.storeItem == purchaseRequest.PurchaseParams.StoreItem);
|
||||
if (favour) {
|
||||
const inventory = await getInventory(accountId);
|
||||
const affiliation = inventory.Affiliations.find(x => x.Tag == syndicateTag);
|
||||
if (affiliation) {
|
||||
purchaseResponse.Standing = [
|
||||
{
|
||||
Tag: syndicateTag,
|
||||
Standing: favour.standingCost
|
||||
}
|
||||
];
|
||||
affiliation.Standing -= favour.standingCost;
|
||||
await inventory.save();
|
||||
if (purchaseRequest.PurchaseParams.UseFreeFavor!) {
|
||||
const inventory = await getInventory(accountId);
|
||||
const affiliation = inventory.Affiliations.find(x => x.Tag == syndicateTag)!;
|
||||
affiliation.FreeFavorsUsed ??= [];
|
||||
affiliation.FreeFavorsUsed.push(affiliation.FreeFavorsEarned![affiliation.FreeFavorsUsed.length]);
|
||||
await inventory.save();
|
||||
} else {
|
||||
const syndicate = ExportSyndicates[syndicateTag];
|
||||
if (syndicate) {
|
||||
const favour = syndicate.favours.find(
|
||||
x => x.storeItem == purchaseRequest.PurchaseParams.StoreItem
|
||||
);
|
||||
if (favour) {
|
||||
const inventory = await getInventory(accountId);
|
||||
const affiliation = inventory.Affiliations.find(x => x.Tag == syndicateTag);
|
||||
if (affiliation) {
|
||||
purchaseResponse.Standing = [
|
||||
{
|
||||
Tag: syndicateTag,
|
||||
Standing: favour.standingCost
|
||||
}
|
||||
];
|
||||
![]() ⚠️ Potential issue Fix potential array index out of bounds and add validation The current implementation has several critical issues:
Apply this diff to fix these issues:
📝 Committable suggestion
_:warning: Potential issue_
**Fix potential array index out of bounds and add validation**
The current implementation has several critical issues:
1. No validation that `FreeFavorsEarned` exists
2. Potential array index out of bounds when accessing `FreeFavorsEarned`
3. No check if there are available favors to use
Apply this diff to fix these issues:
```diff
if (purchaseRequest.PurchaseParams.UseFreeFavor!) {
const inventory = await getInventory(accountId);
const affiliation = inventory.Affiliations.find(x => x.Tag == syndicateTag)!;
+ if (!affiliation.FreeFavorsEarned?.length) {
+ throw new Error("No free favors available");
+ }
affiliation.FreeFavorsUsed ??= [];
- affiliation.FreeFavorsUsed.push(affiliation.FreeFavorsEarned![affiliation.FreeFavorsUsed.length]);
+ const availableFavors = affiliation.FreeFavorsEarned.length - (affiliation.FreeFavorsUsed?.length || 0);
+ if (availableFavors <= 0) {
+ throw new Error("All free favors have been used");
+ }
+ affiliation.FreeFavorsUsed.push(affiliation.FreeFavorsEarned[affiliation.FreeFavorsUsed.length]);
await inventory.save();
```
<!-- suggestion_start -->
<details>
<summary>📝 Committable suggestion</summary>
> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
`````suggestion
if (purchaseRequest.PurchaseParams.UseFreeFavor!) {
const inventory = await getInventory(accountId);
const affiliation = inventory.Affiliations.find(x => x.Tag == syndicateTag)!;
if (!affiliation.FreeFavorsEarned?.length) {
throw new Error("No free favors available");
}
affiliation.FreeFavorsUsed ??= [];
const availableFavors = affiliation.FreeFavorsEarned.length - (affiliation.FreeFavorsUsed?.length || 0);
if (availableFavors <= 0) {
throw new Error("All free favors have been used");
}
affiliation.FreeFavorsUsed.push(affiliation.FreeFavorsEarned[affiliation.FreeFavorsUsed.length]);
await inventory.save();
`````
</details>
<!-- suggestion_end -->
<!-- This is an auto-generated comment by CodeRabbit -->
|
||||
affiliation.Standing -= favour.standingCost;
|
||||
await inventory.save();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user
⚠️ Potential issue
Add null check for manifest and type safety
The code needs additional safety checks:
manifest
before accessingfavours
FreeFavorsEarned
Apply this diff to add the necessary checks:
📝 Committable suggestion