Типа скрипт
вычисляет дистанцию (тут я взял готовый код с здум вики) между игроком (TID 10) и объектом (TID 3), и если она больше 500 в данном случае то телепортит в точку (коорд игрока по X + 100)(коорд игрока по Y + 100).
вот важная часть скрипта
Код
int x, y, z, x1, y1, z1, len;
while (TRUE)
{
y = getactory(10) - getactory(3);
x = getactorx(10) - getactorx(3);
z = getactorz(10) - getactorz(3);
int ang = vectorangle(x,y);
if(((ang+0.125)%0.5) > 0.25) len = fixeddiv(y, sin(ang));
else len = fixeddiv(x, cos(ang));
ang = vectorangle(len, z);
if(((ang+0.125)%0.5) > 0.25) len = fixeddiv(z, sin(ang));
else len = fixeddiv(len, cos(ang));
print(f:len);
if (len>500.0)
{
SetActorPosition(3, 100.0+getactorx(10), 100.0+getactory(10), 0, 1);
delay(1);
}
файл с тестом (дружелюбная мумия) я прилепил.
еще заодно продемонстрирую другой скрипт,
где злобный мобик должен притягивать к себе чела, перед атакой.
256 -- это игрок, 5 -- это плохой дядя, в принципе места ThrustThing можно использовать чтонить другое, да и силу тут полюбому лучше уменьшить наверно, для массы игрока эт слишком много, но идея такая. Запуск скрипта в моем случае был прописан в декорейте плохого мобика
Код
script 12 (void)
{
int vang, angle;
vang = VectorAngle (GetActorX (5) - GetActorX (256), GetActorY (5) - GetActorY (256));
angle = vang >> 8;
print(d:angle);
ThrustThing(angle, 50, 0, 256);
}
принты есесно везде ток для отладки использовались...)