fix: Bug fixes #218 #222 #220 #223 #215 #216 - attunement free mana, transference circular ref, guardian defeat tracking, discipline negative mana, guardian data, crafting refunds
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 1m23s
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 1m23s
This commit is contained in:
@@ -124,11 +124,20 @@ export interface CraftingCancelResult {
|
||||
logMessage: string;
|
||||
}
|
||||
|
||||
export function cancelEquipmentCrafting(blueprintId: string, manaSpent: number): CraftingCancelResult {
|
||||
export function cancelEquipmentCrafting(blueprintId: string, manaSpent: number, currentProgress?: number, requiredProgress?: number): CraftingCancelResult {
|
||||
const recipe = CRAFTING_RECIPES[blueprintId];
|
||||
if (!recipe) return { manaRefund: 0, logMessage: 'Invalid crafting recipe.' };
|
||||
|
||||
const manaRefund = Math.floor(manaSpent * MANA_REFUND_RATE);
|
||||
// Refund proportional to remaining progress: unspent portion + half of spent portion
|
||||
let refundRate: number;
|
||||
if (currentProgress !== undefined && requiredProgress && requiredProgress > 0) {
|
||||
const remainingFraction = Math.max(0, (requiredProgress - currentProgress) / requiredProgress);
|
||||
// Full refund for unspent progress, flat 50% for spent progress
|
||||
refundRate = remainingFraction + (1 - remainingFraction) * MANA_REFUND_RATE;
|
||||
} else {
|
||||
refundRate = MANA_REFUND_RATE;
|
||||
}
|
||||
const manaRefund = Math.floor(manaSpent * refundRate);
|
||||
return { manaRefund, logMessage: `🚫 Equipment crafting cancelled. Refunded ${manaRefund} mana.` };
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user