Skip to content

Warden's Call partial fix

Samuel Wegner requested to merge Effigy/t-engine4:wardens_call_fix into master

Fix some issues with Warden's Call

Fix 1: Improve cloning function

Previously, makeParadoxClone() temporarily cleared the actor's particles and main inventory so that they wouldn't be copied by cloneFull() when making Warden's Call clones. However, this resulted in some players losing their inventory, probably due to some race condition during lag caused by the Warden's Call memory leak.

Now, makeParadoxClone() has its own recursive table cloning function with options for skipping specific nodes or assigning them a different value from the source table. This way, we can clone an actor without modifying that actor's table.

Fix 2: Create cleanup function for Warden's Call

Added a basic cleanup function for Warden's Call clones. Currently, it just makes sure they're dead and replaces references in timed effects with references to the player, so the clones can be freed by the garbage collector. More features will likely be added as I find other causes of the memory leak.

NOTE: These changes don't fix the memory leak. It may help a little, but that issue needs more investigation.

It's probably worth pushing these changes back to v1.3.X in a minor update to fix the issue with missing player inventory. Completely fixing the memory leak may take a while.

Merge request reports