Server Systems & Source Patches
Metin2 permanent HP/SP elixirs: global non-depleting variant with bounded recovery
M2City Systems · Editorial · Published 2026-11-05 · Branch-specific details should be checked against your own source.
This variant makes all HP/SP auto-recovery items processed by AutoRecoveryItemProcess non-depleting. It removes capacity consumption and hides the remaining-percentage line in the tooltip. It is not a duration extender, selected-VNUM premium feature or whitelist. Do not install it if only a few event items should be permanent.
M2City r1 correction
The supplied deficit calculation could overflow signed 32-bit arithmetic when adding current HP/SP and pending recovery. The reviewed helper computes the deficit in 64 bits and caps the addition so pending recovery stays within signed 32-bit limits. Nonpositive maximum values and corrupt negative pending recovery add nothing. Existing dead, stun, player and arena checks are retained; commented-out legacy capacity code was removed from the reviewed copy, with the untouched original preserved.
Integration and policies
Merge the helper and reviewed AutoRecoveryItemProcess into game/char_item.cpp without discarding protections added by your branch. This review assumes signed 32-bit HP, SP and recovery points, as in the supplied code. A fork using wider point types needs its matching range, not a blind cast. The optional ENABLE_PVP_ADVANCED BlockPotion guard only covers HP in this copy; reconcile SP and duel rules with your intended game design.
The Python tooltip fragment hides remaining capacity globally and does not add an Infinite locale label. Make client/server changes together. If you need permanent items alongside normal consumable elixirs, implement a shared VNUM/type policy and preserve the normal branch for excluded items. No SQL migration, item proto or new item assets are provided.
Validation
Both supplied text fragments were read. The revised arithmetic compiled with signed-overflow traps and passed normal/full/overfilled recovery, negative pending values, INT_MIN/INT_MAX boundaries and 512 combinations. UBSan runtime was unavailable, so no sanitizer result is claimed. The full affect/item lifecycle, login restoration, arena transitions and game server were not run. Original archive and review notes are included; exact upstream author/version was not established.
Editorial resource — M2City
Version: Legacy integration fragments; exact fork unspecified; M2City r1 (2026-11-04)
Rights: Public redistribution confirmed by owner; upstream notices retained. No blanket open-source relicensing.
Validation: Revised recovery arithmetic compiled with signed-overflow traps (-ftrapv). Normal/full/overfilled, negative pending, INT_MIN/INT_MAX and 512 boundary combinations passed. UBSan runtime was unavailable; no sanitizer result is claimed. The full character/affect lifecycle and game server were not built or run.
Source: Owner-supplied source; public creator/feature reference where established
SHA-256: 279828a281f1e61a049c35f3a20e9ee300d9acc06d73a49076983eb82ca3ee52
Download package
3 download options · Sign in to download
metin2-permanent-recovery-elixirs-m2city-r1.zipM2City downloadmetin2-permanent-recovery-elixirs-m2city-r1.zipGoogle Drive mirrormetin2-permanent-recovery-elixirs-m2city-r1.zipMEGA mirrorMAKE THE NEXT ANSWER BETTER
What happened on your build?
Share a small example, the exact error and how you verified your fix. The discussion is open on the forum.
Need a scoped quest, UI or proto fix? · Explore more development guides · Check your proto files free