So indeed one has to always pass the rBaseObject to an rVar when passing in a base object (in vanilla scripts "formID" syntax is valid - is it valid in obse ? What about editorIDs ?) ?
Some OBSE functions can operate on a variety of object types but the parameter types Oblivion's scripting system allows are somewhat restrictive. There is no generic "object" parameter type so functions like SetName, which can take any named object, are defined as taking an inventory object. The upshot of this is that you can pass an inventory object to that function directly, but will get a compiler error trying to pass in some other type of object (like an actor) unless it's stored in a ref variable. The vast majority of affected commands use Inventory Object because it's the closest OB has to a "generic object" param type.
Similarly I read that "most functions must be called on a reference variable rather than on a reference" somewhere in the forums - if this is indeed the case I think now is a nice opportunity to update the info - write something like rVariable.doSomething instead of ref.doSomething in the Function Calling Conventions section or in some particular functions syntax as necessary.
I can't think of any situation where the calling ref would be required to be in a reference variable.
The syntax for passing in a particular ref id should be explicitly mentioned (getIsID "00000191" is valid for instance, no ref variable required, while an editor id would also work (and probably also a syntax involving a variable). Is this syntax possible in obse ?)
Scripts should use editorIDs, not integer formIDs. FormIDs are of use in the console; any OBSE command that works from the console will accept them.
More of a question to the OBSE team, how is it possible there are that many string_vars assigned to Oblivion.esm? Wouldn't that only happen if a vanilla script were to create the string itself?
Either (1) a mod edits a vanilla script directly, adding string variable functionality to it, or (2) the OP used the 0018 beta which briefly broke the string ownership system.
The warning was introduced with this release because we had a handful of mods during beta which leaked string var's massively. It's just that - a warning - and doesn't necessarily mean there's actual leakage (it's conceivable a mod really does need > 100 string variables). Basically if someone complains about excessive load times, we can quickly check their obse.log to determine what mod(s) might be contributing to the problem.
@TheMagician: Looks good. I agree with TheNiceOne's suggestion about sv_Construct and MessageBoxEx. I can try to find some time to compile a list of commands which make persistent changes to objects.