Like Failed.Bard said, to use DetermineCombatRound you need the following line at the very start of the script:
#include "NW_I0_GENERIC"
because that function is defined there, not in the engine. In general, it pays to add functions from the right-hand pane of the script editor. If a function is missing, refer to the Lexicon for the library file you need to include.
As a rule-of-thumb, scripts don't work reliably when running on objects that are about to die (or be destroyed). Simple commands do work, because they're executed immediately, before the object disappears, but assigned and delayed commands generally don't, because they're flushed when the object ceases to exist (a bit like an army running away when the general is killed).
There are many ways to achieve what you want here. One is to change the appearance of the speaker into a monster, so that it is never destroyed. Another is to have the speaker assign a command to the Module:
AssignCommand(GetModule(), .... // Put function here that creates monster and gives it commands
The module is an exception to the general rule here.