OK, thinking about this:
How would I go about making someone run somewhere and then disappear? Well, I've used 'LAi_ActorGoToLocation' to make someone
walk to a location and disappear, maybe there's a 'LAi_ActorRunToLocation' as well? As it turns out, there is - like the "GoTo" version, it's defined in "LAi_Actor.c":
Code:
void LAi_ActorRunToLocation(aref chr, string groupExit, string locatorExit, string locID, string groupEnter, string locatorEnter, string quest, float timeout)
So, Windows Search for 'LAi_ActorRunToLocation', disregard any references to "quests_reaction.c" and "both_reaction.c" as they'll be storylines, and find that it's also in "quests_common.c". Look through that, and what I find is:
Code:
case "Surrendered_Captain_Run":
if(CheckAttribute(PChar,"prisonerIDX"))
{
NPChar = GetCharacter(sti(PChar.prisonerIDX));
LAi_ActorRunToLocation(NPChar, "reload", LAi_FindRandomLocator("reload"), "None", "reload", "", "", -1);
RemovePassenger(PChar,NPChar);
DeleteAttribute(NPChar,"prisoned");
DeleteAttribute(PChar,"prisonerIDX");
}
break;
Now, when I used 'LAi_ActorGoToLocation', it was with a positive timeout. I'm guessing that if the character hasn't made it to the destination point by then, he disappears anyway. I've no idea what putting "-1" for the timeout does, maybe it means the function never times out which means if the character can't get to the location then he stays where he is - which is exactly what is happening here.
Perhaps replace that "-1" with "10". If he can't get to an exit in 10 seconds then he probably can't get there at all, in which case hopefully he'll disappear from where he's standing now. This may or may not be an improvement.
Or, leave the code as it is now and see if, when you leave the hold and then return, the prisoner has already disappeared anyway. Especially if you've captured someone else since trying to release this one. Because if that happens then there's not really a problem.