Ok, let me try to explain. We work here with two different things: Procedures and Functions. The only difference between this two is that a Function will return a variable (a boolean, string, integer etc.). What the function returns is called the 'result'.
OnPlayerCommand is a function. This function will return a boolean (true or false). If it returns True then soldat will disable all commands accept the ones you discribe in OnPlayerCommand. Therefor you usually want to have result := false somewhere in the OnPlayerCommand function.
OnPlayerSpeak is a Procedure, it doesn't return anything. So if you put 'result' in OnPlayerSpeak the compiler will tell you that the identifier was not found.