Skip to content

Align Rapid Fire parsing and preserve ammo on insufficient effective MP

Idan Cohen requested to merge fix/issue-1-skill-wire-resources into genocide

Rapid Fire parsing consumes a per-target trailer that its packet omits, corrupting following targets. Ranged casts can also consume ammunition before authoritative MP payment rejects them; raw-cost anti-cheat can flag valid Concentrate/Infinity casts.

Correct the Rapid Fire exception while preserving other skills' existing effective handling. Add read-only MP preflight using payment's existing amplification/discount calculation before ranged inventory/cooldown side effects, and use the same cost check for MP anti-cheat. Payment remains in applyTo; no resource formula changes.

Validation: all production Java sources compile; the existing disposable Docker runner passes 1,202 offline handler assertions, 353 WZ pool assertions, 27 migration assertions, 22 draft-dialogue assertions and 1,096 running-server assertions. Paired native C++ fixtures pass 72 actual-parser cases and check actual target HP, MP, ammunition, insufficient-MP preservation, Concentrate, Infinity, stacked amplifications and eight incoming Achilles outcomes. No campaign connection or population consumption.

The native bridge supplies fixed one-point attack values; it does not establish correct client damage formulas, input or complete skill support. Other HP/meso/cooldown transaction ordering remains unverified. See tests/classless-skills/README.md for exact tested pair and reproduction.

Related to client issue #1; keep the issue open. Paired client MR and versioned report are linked below. No deployment or merge is requested by this branch.

Paired client: https://gitlab.mapplestrudel.com/idanc/mapplestrudel-client/-/merge_requests/16

Merge request reports