fix: track FreeFavorsEarned & FreeFavorsUsed #792
@ -50,6 +50,13 @@ export const syndicateSacrificeController: RequestHandler = async (request, resp
|
|||||||
syndicate.Title ??= 0;
|
syndicate.Title ??= 0;
|
||||||
syndicate.Title += 1;
|
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();
|
await inventory.save();
|
||||||
|
|
||||||
if (reward) {
|
if (reward) {
|
||||||
|
@ -79,23 +79,33 @@ export const handlePurchase = async (
|
|||||||
|
|
||||||
switch (purchaseRequest.PurchaseParams.Source) {
|
switch (purchaseRequest.PurchaseParams.Source) {
|
||||||
case 2:
|
case 2:
|
||||||
if (!purchaseRequest.PurchaseParams.UseFreeFavor!) {
|
{
|
||||||
const syndicateTag = purchaseRequest.PurchaseParams.SyndicateTag!;
|
const syndicateTag = purchaseRequest.PurchaseParams.SyndicateTag!;
|
||||||
const syndicate = ExportSyndicates[syndicateTag];
|
if (purchaseRequest.PurchaseParams.UseFreeFavor!) {
|
||||||
if (syndicate) {
|
const inventory = await getInventory(accountId);
|
||||||
const favour = syndicate.favours.find(x => x.storeItem == purchaseRequest.PurchaseParams.StoreItem);
|
const affiliation = inventory.Affiliations.find(x => x.Tag == syndicateTag)!;
|
||||||
if (favour) {
|
affiliation.FreeFavorsUsed ??= [];
|
||||||
const inventory = await getInventory(accountId);
|
affiliation.FreeFavorsUsed.push(affiliation.FreeFavorsEarned![affiliation.FreeFavorsUsed.length]);
|
||||||
const affiliation = inventory.Affiliations.find(x => x.Tag == syndicateTag);
|
await inventory.save();
|
||||||
if (affiliation) {
|
} else {
|
||||||
purchaseResponse.Standing = [
|
const syndicate = ExportSyndicates[syndicateTag];
|
||||||
{
|
if (syndicate) {
|
||||||
Tag: syndicateTag,
|
const favour = syndicate.favours.find(
|
||||||
Standing: favour.standingCost
|
x => x.storeItem == purchaseRequest.PurchaseParams.StoreItem
|
||||||
}
|
);
|
||||||
];
|
if (favour) {
|
||||||
affiliation.Standing -= favour.standingCost;
|
const inventory = await getInventory(accountId);
|
||||||
await inventory.save();
|
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