ApplyStatus is the Osiris/story call, CharacterApplyStatus is the behaviour script call.
I have added the documentation for
ApplyStatus. My guess is that you are calling ApplyStatus without _Force = 1, in which case the armour of the NPC may block the status. It doesn't help that the autocompletion/parameter help of the story editor only shows the definition of one of the overloads, and there is an overload for the Osiris call without the _Force parameter.
There are two main ways you can make the character stay put:
* there is already a status you can use to block a character from moving/acting: QUEST_TIEDUP.
* alternatively, if you make the character e.g. sit on a chair by making it
use it, you can add "Constrain" to the "Use Actions" of that chair. If you do that, then once an NPC sits on (= CharacterUseItem) that chair, they will be stuck there until story explicitly moves them away from it, or someone teleports them away.
To prevent the NPC from absorbing the source puddles, you can use
CharacterOverrideMaxSourcePoints to set that NPC's maximum source points to 0.
This answer came to you with several contributions by my very esteemed colleague Ilya.