A few notes:
As of r15979, "callfunc" is no longer needed. Users can call your function by only typing "achieve <ID>".
You should consider using bitwise integers (or even a conversion string) to store the permanent character values, because the script would eat up a significant portion of the 256 maximum otherwise.
Similarly, try to reduce permanent global variables, if you can. There's also a limit to those. If you can push values into arrays or use temporary values, it'd help a lot.
Also, moving this thread into "Utility Script Releases" for now.