QUOTE(Milfes @ Sep 15 2006, 16:28) [snapback]91739[/snapback]
У меня проблема. Надо что бы когда игрок наступал на тригер к нему подбегал хенчь и начинал разговор, но если хенчь далеко то он подбегает но разговор не начинает.
Вот скрипт на он энтаре тригера:
NSS
void main()
{
object oPC = GetEnteringObject();
if (!GetIsPC(oPC)) return;
if (GetLocalInt(OBJECT_SELF,"ACTIVATED")) return;
object oIlirin = GetHenchman(oPC);
if (GetTag(oIlirin)!="ilirin01") return;
SetLocalInt(oIlirin,"D_LINE",GetLocalInt(OBJECT_SELF,"CONVERSATION_LINE"));
SetLocalInt(OBJECT_SELF,"ACTIVATED",TRUE);
DestroyObject(OBJECT_SELF,5.0);
AssignCommand(oIlirin, ClearAllActions(TRUE));
AssignCommand(oPC, ClearAllActions(TRUE));
SetCutsceneMode(oPC,TRUE);
AssignCommand(oIlirin, ActionStartConversation(oPC,"plot_ilitrin01"));
}
Может кто знает в чём ошибка.
ЗЫ так же пробовал что бы хенчь сначала подбегал при момощи ActionMoveToObjecy, а только потом начинал разговор, но всё равно не получается.
NSS
//:://////////////////////////////////////////////
//:: OnEnter am_ten_convr_npc
//:: Copyright © 2005 WRG!
//:://////////////////////////////////////////////
/*
Старт диалога с РС. Текст над РС - Name триггера
KeyTag - если больше 0, то непись ПОДБЕЖИТ.
TR_CONV_[ТАГ_НПС_ДЛЯ_ДИАЛОГА]
*/
//:://////////////////////////////////////////////
//:: Created By: Aiwan
//:: Original idea By: DBColl
//:: Created On: 22.04.2005
//:://////////////////////////////////////////////
void main()
{
object oPC = GetEnteringObject();
object oTrig = OBJECT_SELF;
string sTag = GetTag(oTrig); // Таг триггера
string sNPC = GetStringRight(sTag, (GetStringLength(sTag)- 8)); // Таг НПС
object oNPC = GetNearestObjectByTag(sNPC);
string sSpeak = GetName(oTrig); // Фраза
vector vD = GetPosition(oNPC) - GetPosition(oPC);
float fDir = VectorToAngle(vD);
int bRun = StringToInt(GetLockKeyTag(oTrig));
if (!GetIsPC(oPC)) return;
if (GetLocalInt(oTrig, "HAS_OPERATED")) return;
if (!GetIsObjectValid(oNPC)) return;
if (GetArea(OBJECT_SELF)!=GetArea(oNPC)) return;
if (GetIsEnemy(oNPC, oPC)) return;
if (GetObjectType(oNPC)!=OBJECT_TYPE_CREATURE) return;
FadeToBlack(oPC, FADE_SPEED_FASTEST);
AssignCommand(oPC, ClearAllActions());
AssignCommand(oNPC, ClearAllActions());
SetCutsceneMode(oPC);
DelayCommand(0.8, AssignCommand(oPC, SetCameraFacing(fDir, 25.0, 60.0, CAMERA_TRANSITION_TYPE_SNAP)));
AssignCommand(oNPC, ActionDoCommand(SetFacingPoint(GetPosition(oPC))));
DelayCommand(1.2, FadeFromBlack(oPC, FADE_SPEED_FAST));
DelayCommand(2.0, AssignCommand(oPC, SetCameraFacing(fDir+35.0, 8.0, 50.0, CAMERA_TRANSITION_TYPE_SLOW)));
AssignCommand(oPC, ActionDoCommand(SetFacingPoint(GetPosition(oNPC))));
if (GetDeity(oNPC)!="")
{
int iAnim = StringToInt(GetDeity(oNPC));
DelayCommand(3.0, AssignCommand(oNPC, ActionPlayAnimation(iAnim, 0.8, 2.0)));
}
DelayCommand(3.5, AssignCommand(oNPC, SpeakString(sSpeak)));
DelayCommand(4.5, AssignCommand(oNPC, ActionForceMoveToObject(oPC, bRun)));
DelayCommand(5.5, AssignCommand(oNPC, ActionDoCommand(SetCutsceneMode(oPC, FALSE))));
DelayCommand(6.0, AssignCommand(oNPC, ActionStartConversation(oPC)));
//-------------------------------------------------------
SetLocalInt(oTrig, "HAS_OPERATED", TRUE);
}
Работает уже пару лет.
Зайди в раздел хеньчмана, там есть заготовка диалога и стрингов. Все бегает все подбегает и прочее. Хеньч сложная системаскриптов. там постоянно чистят акции и прочее, сканит врагов и друзей.
NSS
//:://////////////////////////////////////////////
//:: Name: am_ten_evt_alish
//:: Copyright © 2006 WRG! Team
//:://////////////////////////////////////////////
/*
Скрипт персональных триггеров Алишан
Основан на скрипте X2_EVT_TRIGGER
*/
//:://////////////////////////////////////////////
//:: Created By: Aiwan
//:: Created On: 02.08.2006
//:://////////////////////////////////////////////
#include "x0_i0_common"
#include "x2_inc_banter"
void main()
{
object oSelf = OBJECT_SELF;
object oTrigger = GetEnteringObject();
object oAlishan = GetObjectByTag("AM_HEN_ALISHAN");
string sLl = GetLocalString(oSelf, "LOCAL_PC_01");
string sL2 = GetLocalString(oSelf, "LOCAL_PC_02");
if(GetMaster(oAlishan) == oTrigger)
{
// Если РС длаьше 20 метров то возврат. Иначе у BioWare тупо удаляется триггер...
if(GetDistanceBetweenLocations(GetLocation(oTrigger), GetLocation(oAlishan)) > 20.0)
return;
// Локальные переменные на РС при каторых триггер не сработает
if(GetLocalInt(oTrigger, sLl) || GetLocalInt(oTrigger, sL2))
{
DestroyObject(oSelf);
return;
}
string sTag = GetTag(OBJECT_SELF);
AttemptInterjectionOrPopup(OBJECT_SELF, sTag, oTrigger, 0, oAlishan);
}
}