feat: archon shard removal #724
@ -40,6 +40,25 @@ export const infestedFoundryController: RequestHandler = async (req, res) => {
 | 
				
			|||||||
            break;
 | 
					            break;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case "x": {
 | 
				
			||||||
 | 
					            // shard removal
 | 
				
			||||||
 | 
					            const request = getJSONfromString(String(req.body)) as IShardUninstallRequest;
 | 
				
			||||||
 | 
					            const inventory = await getInventory(accountId);
 | 
				
			||||||
 | 
					            const suit = inventory.Suits.find(suit => suit._id.toString() == request.SuitId.$oid)!;
 | 
				
			||||||
 | 
					            suit.ArchonCrystalUpgrades![request.Slot] = {};
 | 
				
			||||||
 | 
					            const bile = inventory.InfestedFoundry!.Resources!.find(
 | 
				
			||||||
 | 
					                x => x.ItemType == "/Lotus/Types/Items/InfestedFoundry/HelminthBile"
 | 
				
			||||||
 | 
					            )!;
 | 
				
			||||||
 | 
					            bile.Count -= 300;
 | 
				
			||||||
 | 
					            await inventory.save();
 | 
				
			||||||
 | 
					            res.json({
 | 
				
			||||||
 | 
					                InventoryChanges: {
 | 
				
			||||||
 | 
					                    InfestedFoundry: inventory.toJSON().InfestedFoundry
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
| 
						
							
	
	
	
	
	
	
	
	 | 
				|||||||
 | 
					
 | 
				
			||||||
        case "n": {
 | 
					        case "n": {
 | 
				
			||||||
            // name the beast
 | 
					            // name the beast
 | 
				
			||||||
            const request = getJSONfromString(String(req.body)) as IHelminthNameRequest;
 | 
					            const request = getJSONfromString(String(req.body)) as IHelminthNameRequest;
 | 
				
			||||||
@ -251,6 +270,11 @@ interface IShardInstallRequest {
 | 
				
			|||||||
    Color: string;
 | 
					    Color: string;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					interface IShardUninstallRequest {
 | 
				
			||||||
 | 
					    SuitId: IOid;
 | 
				
			||||||
 | 
					    Slot: number;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
interface IHelminthNameRequest {
 | 
					interface IHelminthNameRequest {
 | 
				
			||||||
    newName: string;
 | 
					    newName: string;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	
⚠️ Potential issue
Handle insufficient HelminthBile gracefully
The code subtracts 300 from the HelminthBile count without checking if there is enough HelminthBile in the inventory, potentially resulting in a negative count. Consider adding a defensive check to prevent negative inventory:
📝 Committable suggestion
🛠️ Refactor suggestion
Validate slot range to avoid out-of-bounds indexing
The code sets
suit.ArchonCrystalUpgrades![request.Slot]without validating whetherrequest.Slotis within the expected range of 0–4 (since there are five archon crystal upgrade slots). This could cause runtime errors or unexpected behavior ifrequest.Slotis out of range.📝 Committable suggestion