Лекс, спасибо за критику! Чуть модернизировал скрипт, может кому пригодится…
Бывает необходимость привлечь внимание игрока к определенному персонажу, тогда вам поможет такой небольшой универсальный скрипт подхода на вход триггера, и старт диалога героя с НПС. Нужно очертить триггер вокруг НПС, и проставить в поле ключа триггера, тэг нашего НПС Сам скрипт:
Neverwinter Script Source
/////////////////////////////////////////////////
//:: Герой подходит к NPC и начинает диалог
//:: File name: camera_dialog
//:://////////////////////////////////////////////////
void main()
{
object oPC = GetEnteringObject();
object oSP = GetHenchman(oPC);
vector vFace = GetPosition(oPC);
string sName = GetLockKeyTag(OBJECT_SELF);
int i = 1;
float fTime;
object oDL = GetNearestObjectByTag(sName, oPC, i);
int iA = GetGoodEvilValue(oPC);
if (!GetIsPC(oPC)) return;
while (GetIsObjectValid(oDL))
{
if (!GetIsInCombat(oPC)&&!GetIsInCombat(oDL)&&!GetIsEnemy(oPC, oDL)&&
!GetIsDead(oDL) && GetObjectType(oDL) == OBJECT_TYPE_CREATURE)
{
fTime = GetDistanceBetween(oPC, oDL);
SetLocalInt(OBJECT_SELF,"VALID",1);
break;
}
i++;
oDL = GetNearestObjectByTag(sName, oPC, i);
}
if (GetLocalInt(OBJECT_SELF, "VALID") != 1) return; // Проверить
if(fTime < 5.0) fTime = 7.5;
string sPC = "Заткнись! Если что не то - порву!";
if (iA>30 && iA<70) sPC = "Не кричи! Иду, иду...";
if (iA>=70 && iA<100) sPC = "Уже иду... Что случилось?";
if (iA==100) sPC = "Уже иду! Что там у вас случилось?";
AssignCommand(oDL, ClearAllActions());
AssignCommand(oDL, SetFacingPoint(vFace));
AssignCommand(oDL, ActionPlayAnimation(ANIMATION_LOOPING_PAUSE, 1.0, 2.5));
AssignCommand(oDL, ActionPlayAnimation(ANIMATION_FIREFORGET_GREETING));
AssignCommand(oDL, ActionWait(fTime-3.0));
AssignCommand(oDL, ActionStartConversation(oPC)); // диалог персонажа
AssignCommand(oDL, ActionDoCommand(SetCommandable(TRUE, oDL))); // разблокировать очередь
DelayCommand(0.1, SetCommandable(FALSE, oDL)); // заблокировать очередь
DelayCommand(0.2, SetCutsceneMode(oPC, TRUE));
DelayCommand(0.3, AssignCommand(oPC, ClearAllActions(TRUE)));
DelayCommand(0.4, AssignCommand(oSP, ClearAllActions(TRUE)));
DelayCommand(1.5, AssignCommand(oPC, ActionForceMoveToObject(oDL, FALSE, 1.0, fTime-2.0)));
DelayCommand(1.5, AssignCommand(oSP, ActionForceMoveToObject(oPC, FALSE, 1.0, fTime-2.0)));
DelayCommand(2.0, AssignCommand(oDL, SpeakString("<c у >Подойдите ко мне! Это очень важно!</c>")));
DelayCommand(fTime-3.5, AssignCommand(oPC, SpeakString(sPC)));
DelayCommand(fTime, SetCutsceneMode(oPC, FALSE));
DelayCommand(fTime, SetCommandable(TRUE, oDL)); // разблокировать очередь
DelayCommand(fTime+0.1, AssignCommand(oPC, ActionStartConversation(oDL))); // диалог персонажа
DestroyObject(OBJECT_SELF, fTime+1.0);
}