warpPos( vector destpos )
{ //R&D by Keknehv Psaltery, 05/25/2006
//with a little poking by Strife, and a bit more
//some more munging by Talarus Luan
//Final cleanup by Keknehv Psaltery
//Changed jump value to 411 (4096 ceiling) by Jesse Barnett
// Compute the number of jumps necessary
integer jumps = (integer)(llVecDist(destpos, llGetPos()) / 10.0) + 1;
// Try and avoid stack/heap collisions
if (jumps > 411)
jumps = 411;
list rules = [ PRIM_POSITION, destpos ]; //The start for the rules list
integer count = 1;
while ( ( count = count << 1 ) < jumps)
rules = (rules=[]) + rules + rules; //should tighten memory use.
llSetPrimitiveParams( rules + llList2List( rules, (count - jumps) << 1, count) );
if ( llVecDist( llGetPos(), destpos ) > .001 ) //Failsafe
while ( --jumps )
llSetPos( destpos );
}
Есть еще такая функция. Вроде пока работает.
Тока я никак не пойму КАК она работает.
Кстати, метод просто через llSetPrimitiveParams уже не работает.

пичалько
UPDATE эта функция при значениях расстояния больше какого-то значения (около 2000 метров), выдает ошибку скрипта. Но шагать через два километра всё же быстрее чем через 10 метров.
UPDATE2 чуть больше чем 2000, где-то 2400 или около того.
UPDATE3 еще неприятность. эта функция почему-то отказывается работать больше одного раза без ресета. Прыгнуть со ста метров до 4000 в два шага не удалось - зависает на 2500. Причём вроде как скрипт продолжает работу, не останавливается и не выдаёт ошибку, но дальнейшее перемещение не происходит. Потом попробую над этим поработать... возможно придётся воспользоваться двумя скриптами.
UPDATE4 нашлось простое решение (не уверен насколько надёжное). скрипт у мя был скомпилирован в LSO. При включении моно сразу заработало. Правда почему-то с 20 метров на 4000 прыгать не хочет. А обратно прыгает. Странно...
Edited by highstaker, 20.03.12 - 17:37.