Forgot to mention in the commit message, Add and Remove return false if they couldn't perform the action, either because the entity is already added or pending addition, or absent or pending removal. The returned value is used in two places only:
To tell whether or not a timer is alive (so if it's pending addition for example, it's considered alive).
In ABrain.Start since ControlledNPCState_AGGRO.Think calls it constantly (indirectly via SendObjectUpdate). Returning false when it's already added or pending addition prevents ControlledNpcBrain.Start from calling FollowOwner over and over again.
Forgot to mention in the commit message,
Add
andRemove
return false if they couldn't perform the action, either because the entity is already added or pending addition, or absent or pending removal. The returned value is used in two places only:ABrain.Start
sinceControlledNPCState_AGGRO.Think
calls it constantly (indirectly viaSendObjectUpdate
). Returning false when it's already added or pending addition preventsControlledNpcBrain.Start
from callingFollowOwner
over and over again.