It looks easy to understand, but there are tons of AND between PROC and THEN, I understand there might be a place for OR, but for state machine like process you guys have, might as well assume all lines are AND by default between PROC/THEN.
So from what I manual copy/paste from the video, it could look like this.

PROC
ProcessTheft( (CHARACTER)_Character, _Spotter, _Owner )
NOT InvolvmentAsserted(_Character, 1 )
Relation(_Spotter, _Owner,( INTEGER)_R )
IntegerDivide( _R, 2, _I )
THEN
InvolvmentTheft( _Character, _I );
InvolvmentAsserted( _Character,1 );

Or use some simple C like symbol & |.
Reason being after long hour of typing those, it could easily doing typo for AND(ie. ANDD, ADN, ANS), missed one, and hard to follow. In above example, experienced coder can more easily spot those 4 conditions then have all the AND line separated them in last update video.

And from the script, do you guys checked if people can just keep move/throw stuff away from the owner, or just out of sight of the owner, and another player pick it up right before chat box showed up? Or if you can throw it far enough, you can just pick it up when no one can saw you. That might be kinda easy exploit for any outdoor, or rooms connected to outdoor environment.

And I wonder under what condition the script runs, is it per thread for each event happened? Or is it a world pause sequence check? I wonder if you have say like 50 NPCs in a market, and then steal something, does it affect performance?

my 2 cents.