Как можно заставить объект двигаться к определенной точке.
Правда иногда пропадают кадры, т.е. плейсы...Neverwinter Script
//ПЕРЕДВИЖЕНИЕ ПЛЕЙСА
// object oSelf - Объект управлЯющий передвижением
// string sGtTag - тэг передвигаемого объекта
// float fDist=0.1 - дистанциЯ одного шага
// float fSpeed=0.3 - скорость кадра
// int iShag=20 количество создаваемых объектов (кадров)
// float fOrient=180.0 - направление движениЯ
void multik(object oSelf, string sGtTag, float fDist=0.1, float fSpeed=0.3, int iShag=20, float fOrient=180.0);
//____________________ ПЕРЕДВИЖЕНИЕ ПЛЕЙСА _____________________________________
void multik(object oSelf, string sGtTag, float fDist=0.1, float fSpeed=0.3, int iShag=20, float fOrient=180.0)
{
if (GetLocalInt(oSelf,"STENA") == 1) return;
object oPlace = GetNearestObjectByTag(sGtTag, oSelf);
effect eVis = EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY); // невидимость
effect eIskra = EffectVisualEffect(VFX_COM_SPARKS_PARRY);
int i;
AssignCommand(oSelf, ClearAllActions());
AssignCommand(oSelf, ActionPlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE
));
ApplyEffectToObject(DURATION_TYPE_INSTANT, eIskra, oSelf);
DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eVis, oPlace));
for (i=1; i<iShag; i++)
{
vector vSpawn = GetPosition(oPlace);
float fFacing = GetFacing(oPlace);
vSpawn.x += cos(fFacing) * fDist*i;
vSpawn.y += sin(fFacing) * fDist*i;
// Если отрицательное значение, то locSpawn позади oPC
location locSpawn = Location(GetArea(oPlace), vSpawn, fOrient+fFacing);
object oNew = CreateObject(OBJECT_TYPE_PLACEABLE, GetResRef(oPlace), locSpawn, FALSE, sGtTag);
SetPlotFlag(oNew, TRUE); // Сюжетный
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eVis, oNew);
AssignCommand(oSelf, ActionDoCommand(RemoveEffect(oNew, GetFirstEffect(oNew))));
if (i<(iShag-1))
{
if (i<3) AssignCommand(oSelf, ActionWait(1.0));
else AssignCommand(oSelf, ActionWait(fSpeed));
AssignCommand(oSelf, ActionDoCommand(ApplyEffectToObject(DURATION_TYPE_
PERMANENT, eVis, oNew)));
AssignCommand(oSelf, ActionDoCommand(DestroyObject(oNew, 0.5)));
}
}
AssignCommand(oPlace,PlaySound("al_cv_millwheel1"));
DelayCommand(4.0, AssignCommand(oPlace,PlaySound("as_cv_minercar1")));
SetLocalInt(oSelf,"STENA",1);
AssignCommand(oSelf, ActionDoCommand(ApplyEffectToObject(DURATION_TYPE_
INSTANT, eIskra, oSelf)));
AssignCommand(oSelf, ActionPlayAnimation(ANIMATION_PLACEABLE_ACTIVATE))
;
AssignCommand(oSelf, ActionDoCommand(SetLocalInt(oSelf,"STENA",0)));
AssignCommand(oSelf, ActionDoCommand(DestroyObject(oPlace)));
}
// object oSelf - Объект управлЯющий передвижением
// string sGtTag - тэг передвигаемого объекта
// float fDist=0.1 - дистанциЯ одного шага
// float fSpeed=0.3 - скорость кадра
// int iShag=20 количество создаваемых объектов (кадров)
// float fOrient=180.0 - направление движениЯ
void multik(object oSelf, string sGtTag, float fDist=0.1, float fSpeed=0.3, int iShag=20, float fOrient=180.0);
//____________________ ПЕРЕДВИЖЕНИЕ ПЛЕЙСА _____________________________________
void multik(object oSelf, string sGtTag, float fDist=0.1, float fSpeed=0.3, int iShag=20, float fOrient=180.0)
{
if (GetLocalInt(oSelf,"STENA") == 1) return;
object oPlace = GetNearestObjectByTag(sGtTag, oSelf);
effect eVis = EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY); // невидимость
effect eIskra = EffectVisualEffect(VFX_COM_SPARKS_PARRY);
int i;
AssignCommand(oSelf, ClearAllActions());
AssignCommand(oSelf, ActionPlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE
));
ApplyEffectToObject(DURATION_TYPE_INSTANT, eIskra, oSelf);
DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eVis, oPlace));
for (i=1; i<iShag; i++)
{
vector vSpawn = GetPosition(oPlace);
float fFacing = GetFacing(oPlace);
vSpawn.x += cos(fFacing) * fDist*i;
vSpawn.y += sin(fFacing) * fDist*i;
// Если отрицательное значение, то locSpawn позади oPC
location locSpawn = Location(GetArea(oPlace), vSpawn, fOrient+fFacing);
object oNew = CreateObject(OBJECT_TYPE_PLACEABLE, GetResRef(oPlace), locSpawn, FALSE, sGtTag);
SetPlotFlag(oNew, TRUE); // Сюжетный
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eVis, oNew);
AssignCommand(oSelf, ActionDoCommand(RemoveEffect(oNew, GetFirstEffect(oNew))));
if (i<(iShag-1))
{
if (i<3) AssignCommand(oSelf, ActionWait(1.0));
else AssignCommand(oSelf, ActionWait(fSpeed));
AssignCommand(oSelf, ActionDoCommand(ApplyEffectToObject(DURATION_TYPE_
PERMANENT, eVis, oNew)));
AssignCommand(oSelf, ActionDoCommand(DestroyObject(oNew, 0.5)));
}
}
AssignCommand(oPlace,PlaySound("al_cv_millwheel1"));
DelayCommand(4.0, AssignCommand(oPlace,PlaySound("as_cv_minercar1")));
SetLocalInt(oSelf,"STENA",1);
AssignCommand(oSelf, ActionDoCommand(ApplyEffectToObject(DURATION_TYPE_
INSTANT, eIskra, oSelf)));
AssignCommand(oSelf, ActionPlayAnimation(ANIMATION_PLACEABLE_ACTIVATE))
;
AssignCommand(oSelf, ActionDoCommand(SetLocalInt(oSelf,"STENA",0)));
AssignCommand(oSelf, ActionDoCommand(DestroyObject(oPlace)));
}