The #2 option of PJ is certainly clean, but I wanted something more sophisticated, like the count of corpses, or tags of goblins destroyed like Lugaid said. Of course, if this option fails somehow, or I encounter a bug, then I will just assume and hope the PC will talk to the NPC after the battle. I mean... who wouldn't

?
Lugaid, some questions on this script:
The second function tat checks if the companion is dead, do I need it if he is immortal? Assuming that the object oSolja is a companion in your work that is

.
You check 3 times for iDead for goblins with different tags. In my situation there are like 15 hobgoblins. Do I need to check 15 times, and give them separate tags?
And finally, I haven't tested it, but I tried to create one with Lilacs, that will increment a variable every time an enemy dies, as PJ said. What could cause problems with this, and you had to use a variation Lugaid?
void main()
{
object oCyril;
int nValue;
// Get the creature who triggered this event.
object oPC = GetLastKiller();
// We are really interested in the ultimate master of the killer.
while ( GetMaster(oPC) != OBJECT_INVALID )
oPC = GetMaster(oPC);
// Set a local integer.
nValue = GetLocalInt(oPC, "cyril_encounter_count") + 1;
SetLocalInt(oPC, "cyril_encounter_count", nValue);
// If the local int is exactly 15.
if ( GetLocalInt(oPC, "cyril_encounter_count") == 15 )
{
// Have "cyril" strike up a conversation with the PC.
oCyril = GetNearestObjectByTag("cyril", oPC);
AssignCommand(oCyril, ActionStartConversation(oPC, "cyril_encounter_finish", FALSE, FALSE, TRUE,FALSE));
}
}