To jest całe napisane zadanie 
//********************************************************
//			ZADANIE
//********************************************************
INSTANCE DIA_Kyle_Zadanie (C_INFO)
{
	npc				= Vlk_536_Kyle;
	nr				= 10;
	condition		= DIA_Kyle_Zadanie_Condition;
	information		= DIA_Kyle_Zadanie_Info;
	permanent		= 0;
	important		= 0;
	description		= "Może będę mógł Ci pomóc.";
};
FUNC INT DIA_Kyle_Zadanie_Condition()
{
	if (Npc_KnowsInfo (hero, DIA_Kyle_Problem))
	{
		return 1;
	};
};
FUNC VOID DIA_Kyle_Zadanie_Info()
{
	AI_Output (other, self,"DIA_Kyle_Zadanie_15_00"); //Słuchaj, może będę mógł Ci pomóc.
	AI_Output (self, other,"DIA_Kyle_Zadanie_10_01"); //Co? Na prawdę możesz coś z tym zrobić?
	AI_Output (other, self,"DIA_Kyle_Zadanie_15_03"); //Daj mi czas a na pewno coś wymyślę.
	AI_Output (self, other,"DIA_Kyle_Zadanie_10_04"); //Dzięki stary! Jednak nie zrzucają do tej dziury samych samolubnych dupków.
	Log_CreateTopic		(CH1_Kylehelp, LOG_MISSION);
	B_LogEntry 			(CH1_Kylehelp,"Kopacz Kyle wybudował chatę zbyt blisko rowu i teraz ma parę dodatkowych drzwi i jego dom służy za przejście. Jeśli mu pomogę będę mógł liczyć na drobny prezent. Może jakiś strażnik może mi pomóc...");
	Log_SetTopicStatus	(CH1_Kylehelp, LOG_RUNNING);
};
//**********************************************************
//				SUKCES ZADANIA WRZÓD
//**********************************************************
INSTANCE DIA_Kyle_Zadanie_SUKw (C_INFO)
{
	npc				= Vlk_536_Kyle;
	nr				= 4;
	condition		= DIA_Kyle_Zadanie_SUKw_Condition;
	information		= DIA_Kyle_Zadanie_SUKw_Info;
	permanent		= 0;
	description		= "Znalazłem Ci chatę.";
};
FUNC INT DIA_Kyle_Zadanie_SUKw_Condition()
{
	if(Npc_KnowsInfo(hero, DIA_MUD_CHUT_SUK))
	{
		return 1;
	};
};
FUNC VOID DIA_Kyle_Zadanie_SUKw_Info()
{
	AI_Output (other, self,"DIA_Kyle_Zadanie_SUKw_15_00"); //Znalazłem Ci chatę.
	AI_Output (other, self,"DIA_Kyle_Zadanie_SUKw_15_01"); //Jeden z kopaczy, nazywa się wrzód, zgodził się zamienić na chaty.
	AI_Output (self, other,"DIA_Kyle_Zadanie_SUKw_10_02"); //Serio?! Jak go do tego przekonałeś?
	AI_Output (other, self,"DIA_Kyle_Zadanie_SUKw_15_03"); //Powiedzmy, ze nasz przyjaciel panicznie boi się duchów.
	AI_Output (self, other,"DIA_Kyle_Zadanie_SUKw_10_04"); //No cóż ważne, że będę miał nową chatę. To gdzie ona jest?
	AI_Output (other, self,"DIA_Kyle_Zadanie_SUKw_15_03"); //Chata znajduje się na lewo od bramy do zamku. Jak zobaczysz kucharza imieniem Snaf, to znaczy, że jesteś na miejscu.
	AI_Output (self, other,"DIA_Kyle_Zadanie_SUKw_10_05"); //Od razu zaczynam się pakować!
	B_LogEntry			(CH1_Kylehelp, "Kyle był zadowolony, że znalazłem mu nowe lokum. Może odwiedzę go za parę dni aby zobaczyć jak sobie radzi w nowym domu.");
	AI_StopProcessInfos	(self);
	B_ExchangeRoutine (Vlk_536_Kyle, "NOWACHATAMUD");
	B_ExchangeRoutine (VLK_574_Mud, "NOWACHATA");
};
//**********************************************************
//				SUKCES ZADANIA DUSTY
//**********************************************************
INSTANCE DIA_Kyle_Zadanie_SUKd (C_INFO)
{
	npc				= Vlk_536_Kyle;
	nr				= 5;
	condition		= DIA_Kyle_Zadanie_SUKd_Condition;
	information		= DIA_Kyle_Zadanie_SUKd_Info;
	permanent		= 0;
	description		= "Znalazłem Ci chatę.";
};
FUNC INT DIA_Kyle_Zadanie_SUKd_Condition()
{
	if(Npc_KnowsInfo(hero, DIA_BaalTondral_DustySuccess))
	{
	return 1;
	};
};
FUNC VOID DIA_Kyle_Zadanie_SUKd_Info()
{
	AI_Output (other, self,"DIA_Kyle_Zadanie_SUKd_15_00"); //Znalazłem Ci chatę.
	AI_Output (other, self,"DIA_Kyle_Zadanie_SUKd_15_01"); //Jeden z kopaczy, nazywa się Dusty, wyniósł się do obozu sekty i jego chata pozostaje wolna.
	AI_Output (self, other,"DIA_Kyle_Zadanie_SUKd_10_02"); //No cóż ważne, że będę miał nową chatę. To gdzie ona jest?
	AI_Output (other, self,"DIA_Kyle_Zadanie_SUKd_15_03"); //Chata znajduje się nad urwiskiem na targowisku.
	AI_Output (self, other,"DIA_Kyle_Zadanie_SUKd_10_04"); //Od razu zaczynam się pakować!
	AI_StopProcessInfos	(self);
	B_LogEntry			(CH1_Kylehelp, "Kyle był zadowolony, że znalazłem mu nowe lokum. Może odwiedzę go za parę dni aby zobaczyć jak sobie radzi w nowym domu.");
	B_ExchangeRoutine (Vlk_536_Kyle, "NOWACHATADUSTY");
};
//**********************************************************
//				ODEBRANIE NAGRODY DUSTY
//**********************************************************
INSTANCE DIA_Kyle_Zadanie_NAd (C_INFO)
{
	npc				= Vlk_536_Kyle;
	nr				= 6;
	condition		= DIA_Kyle_Zadanie_NAd_Condition;
	information		= DIA_Kyle_Zadanie_NAd_Info;
	permanent		= 0;
	description		= "I jak Ci się tu żyje?";
};
FUNC INT DIA_Kyle_Zadanie_NAd_Condition()
{
	if(Npc_KnowsInfo(hero, DIA_Kyle_Zadanie_SUKd))
	{
	return 1;
	};
};
FUNC VOID DIA_Kyle_Zadanie_NAd_Info()
{
	AI_Output (other, self,"DIA_Kyle_Zadanie_NAd_15_00"); //I jak Ci się tu żyje?
	AI_Output (self, other,"DIA_Kyle_Zadanie_NAd_10_01"); //Jest świetnie! Cisza i spokój. Już nikt nie przebiega mi przez chatę i mam spokój od strażników.
	AI_Output (self, other,"DIA_Kyle_Zadanie_NAd_10_03"); //Dziękuję Ci przyjacielu. Niewiem jak się odwdzięczyć weź chociaż trochę rudy.
	B_GiveXP(100);
	B_GiveInvItems	(self, other, itminugget,100);
	B_LogEntry			(CH1_Kylehelp, "Kyle był zachwycony, nowa chata spisuje się świetnie! W końcu może odpocząć od niechcianych gości. ");
	Log_SetTopicStatus	(CH1_Kylehelp, LOG_SUCCESS);
};
//**********************************************************
//				ODEBRANIE NAGRODY WRZÓD
//**********************************************************
INSTANCE DIA_Kyle_Zadanie_NAw (C_INFO)
{
	npc				= Vlk_536_Kyle;
	nr				= 7;
	condition		= DIA_Kyle_Zadanie_NAw_Condition;
	information		= DIA_Kyle_Zadanie_NAw_Info;
	permanent		= 0;
	description		= "I jak Ci się tu żyje?";
};
FUNC INT DIA_Kyle_Zadanie_NAw_Condition()
{
	if(Npc_KnowsInfo(hero, DIA_Kyle_Zadanie_SUKw))
	{
	return 1;
	};
};
FUNC VOID DIA_Kyle_Zadanie_NAw_Info()
{
	AI_Output (other, self,"DIA_Kyle_Zadanie_NAw_15_00"); //I jak Ci się tu żyje?
	AI_Output (self, other,"DIA_Kyle_Zadanie_NAw_10_01"); //Rudera jakich mało, pełna szczurów i karaluchów. Ale chociaż mam tu święty spokój.
	AI_Output (self, other,"DIA_Kyle_Zadanie_NAw_10_02"); //Mimo wszystko dzięki za starania.
	B_GiveXP(50);
	B_GiveInvItems	(self, other, itminugget,50);
	B_LogEntry			(CH1_Kylehelp, "Kyle nie był zachwycony nowym domem. Nie mogę powiedzieć, że go nie rozumiem, sam nie chciałbym mieszkać w tej szopie. Mimo wszystko podziękował mi za pomoc.");
	Log_SetTopicStatus	(CH1_Kylehelp, LOG_SUCCESS);
};
A tu część, o którą mi chodzi i problem gdzie muszę czekać aż NPC przejdzie całą drogę i dopiero dialog się wyłącza.
FUNC VOID DIA_Kyle_Zadanie_SUKw_Info()
{
	AI_Output (other, self,"DIA_Kyle_Zadanie_SUKw_15_00"); //Znalazłem Ci chatę.
	AI_Output (other, self,"DIA_Kyle_Zadanie_SUKw_15_01"); //Jeden z kopaczy, nazywa się wrzód, zgodził się zamienić na chaty.
	AI_Output (self, other,"DIA_Kyle_Zadanie_SUKw_10_02"); //Serio?! Jak go do tego przekonałeś?
	AI_Output (other, self,"DIA_Kyle_Zadanie_SUKw_15_03"); //Powiedzmy, ze nasz przyjaciel panicznie boi się duchów.
	AI_Output (self, other,"DIA_Kyle_Zadanie_SUKw_10_04"); //No cóż ważne, że będę miał nową chatę. To gdzie ona jest?
	AI_Output (other, self,"DIA_Kyle_Zadanie_SUKw_15_03"); //Chata znajduje się na lewo od bramy do zamku. Jak zobaczysz kucharza imieniem Snaf, to znaczy, że jesteś na miejscu.
	AI_Output (self, other,"DIA_Kyle_Zadanie_SUKw_10_05"); //Od razu zaczynam się pakować!
	B_LogEntry			(CH1_Kylehelp, "Kyle był zadowolony, że znalazłem mu nowe lokum. Może odwiedzę go za parę dni aby zobaczyć jak sobie radzi w nowym domu.");
	AI_StopProcessInfos	(self);
	B_ExchangeRoutine (Vlk_536_Kyle, "NOWACHATAMUD");
	B_ExchangeRoutine (VLK_574_Mud, "NOWACHATA");
};
Z rutynami jest wszystko w porządku każdy NPC ma wpisane nowe z dokładnie takimi nazwami i są one prawidłowo zamieniane, tylko, że podczas dialogu a nie po jego zakończeniu. 
Edit.
Zmieniłem B_ExchangeRoutine( ) na Npc_ExchangeRoutine( ) i o dziwo zadziałało. Może nie idealnie tzn. Wrzód pojawia się w chacie Kyle'a natychmiastowo w chwili rozmowy z Kylem ale z drugiej strony ten kończy rozmowę i dopiero wtedy rusza do nowej chaty.