I am currently make a game and a huge component is the losing and regrowing limbs. The limbs regrow on in the order below, and if you lose something that has two limbs, both limbs will regrow at the same time, but slower. Each limb’s regrowth speed is determined by the volume of that part.
Limb Regrowth Order
You can regenerate all parts, so long as the previous part is regrown. You can’t regrow your RightHand, before your RightUpperArm and RightLowerArm have regrown.
Current Method
Clone players limb, connect the parts together with constraints, put it it into the workspace on the client, handle additional effects there.
Make the original limb transparent, with a value inside of it that determines the percent healed it is.
Parts of the limbs heal in order. On the client, bind a clone of the limb to the limbs position and resize it based on a value in the parts that changes every second.
On the server, make an invisible part that acts as the hitbox for the growing limb.
Notable Pitfalls
Hit detection will still detect arms/legs that have been removed and walking will still happen.
Conclusion
This is my system, and I have spent a couple days planning in testing it, but I just wanted to make sure there were no other better options for me to attempt. Let me know your thoughts!
Your current system sounds fine to me, however my go to would be to keep a duplicate of their Character on spawn and then when they go to regrow I’d unsize the parts they don’t have and set their character to this clone.
From there you can easily regenerate the parts without having to worry about connecting them back.
I am not actually destroying the limbs though, simply making them transparent. Once the limb is done growing, I will make them completely visible and remove the client effect.
The clone and connecting process comes from limbs falling apart, which I will use a BallSocketConstraint to connect to attachments in the limbs.
After some thinking, I came up with two ideas for this:
Make sure the part is visible before continuing
Set that part to physics group that doesn’t collide with anything.
I think the latter is the best way to go since I don’t have to have as many if statements at the beginning of each touched event, but if not I will default to checking the part’s transparency.