Владимир_К Опубликовано 20 октября, 2010 Жалоба Поделиться Опубликовано 20 октября, 2010 Привет всем!Написал скрипт магического эффекта. Скрипт "прикреплен" к заклинанию, которое имеет Range "Self" и длительность "3".Смысл в том, чтобы при кастовании заклинантя "на себя" определялись ссылки на ближайших СУЩЕСТВ, относящихся к типам "Нежить" и "Даедра". Заодно и определялась дистанция.Заклинание кастуется "вручную" с произвольной частотой.Размещены соответствующие "цели" на участке местности. Но скрипт, срабатывая, продолжает выдавать REF только первой обнаруженной с момента запуска цели. Даже при "кастовании" непосредственно возле второй цели, скрипт продолжает выдавать REF первой обнаруженной цели. Только иногда, после длительного (минуты 2-3) хождения вокруг второй (необнаруживаемой) цели, скрипт выдает ее REF.Вот код, что мажет быть не так? scn MyScriptName ;тип скрипта - магический эффект ref RefCrfloat DistRef begin ScriptEffectStart ; расчет на то, что данный блок срабатывает 1 раз за фрейм set RefCr to GetFirstRef 36 label 11 if RefCr != 0 set DistRef to RefCr.GetDistance Player if RefCr.GetCreatureType == 2 Message “Обнаружена НЕЖИТЬ %i, Дистанция: %8,0f”, RefCr, DistRef elseif RefCr.GetCreatureType == 1 Message “Обнаружен ДАЕДРА %i, Дистанция: %8,0f”, RefCr, DistRef else Message “Никого нет” set RefCr == 0 ;на всякий случай "обнуляем" переменную endif Set RefCr to GetNextRef goto 11 endifend По-моему, явных ошибок нет...Если можно, проверьте код у себя! Ссылка на комментарий Поделиться на другие сайты Поделиться
Visman Опубликовано 20 октября, 2010 Жалоба Поделиться Опубликовано 20 октября, 2010 (изменено) scn MyScriptName ;тип скрипта - магический эффект ref RefCr float DistRef begin ScriptEffectStart ; расчет на то, что данный блок срабатывает 1 раз при старте заклинания set RefCr to GetFirstRef 36 3 label 11 if (RefCr) set DistRef to RefCr.GetDistance Player if RefCr.GetCreatureType == 2 MessageBox “Обнаружена НЕЖИТЬ %i, Дистанция: %8,0f”, RefCr, DistRef elseif RefCr.GetCreatureType == 1 MessageBox “Обнаружен ДАЕДРА %i, Дистанция: %8,0f”, RefCr, DistRef else MessageBox “Никого нет” endif Set RefCr to [тут поставь ссылку на левый существующий объект в игре] Set RefCr to GetNextRef goto 11 endif end Изменено 20 октября, 2010 пользователем Visman Ссылка на комментарий Поделиться на другие сайты Поделиться
Владимир_К Опубликовано 21 октября, 2010 Автор Жалоба Поделиться Опубликовано 21 октября, 2010 scn MyScriptName ;тип скрипта - магический эффект Вчера испытал. Работает. Спасибо!Вот только дистанция не отображается в сообщении на экране. Выдает на экране значение переменной = "0".Хотя, развивая скрипт, я поставил проверку по дальности: определение соответсвия REF типу существа только при дальности до REF<1000. Так она - работает.Неясно (мне, по крайней мере) какой тип переменной соответсвует возвращаемому значению дистанции. На Wiki пишут, что дистанция возвращается в units, но о типе этого значения (short, long, float) - ни слова. Кстати, у меня был вопрос и об очередности определения того или иного REF.И в моем (ошибочном) и в твоем (рабочем) варианте скрипта очередность определения REF одного из двух контрольных Сreatures не менялась. вне зависимости от того, какое из этих Creatures было ближе к игроку. Хотя я излазил вркруг них все пространство, меняя позиции кастования заклинания.Заметил и понял, что GetFirstRef выбирает приоритет в определении REF не по их "близости" к caster, а по их ЗНАЧЕНИЮ:Существо Cr#1 имеет REF= 04008dfd => всегда определяется первымСущество Cr#2 имеет REF= 04008dfe => всегда определяется вторым так как dfd < dfe и, значит, dfd и есть FirstRef! Так вот, проверка REF "на дальность от игрока" позволила решить стоящую задачу - обнаружение БЛИЖАЙШЕГО. Ссылка на комментарий Поделиться на другие сайты Поделиться
Visman Опубликовано 22 октября, 2010 Жалоба Поделиться Опубликовано 22 октября, 2010 Если просто нужно получить ближайшего, то достаточно сохранять параметры дальности и ссылку на предыдущий объект и сравнивать его дальность с текущим.Если же нужно получить объекты в порядке удаления/приближения, то тут намного сложнее. Нужно создавать массивы и текущий объект сравнивать с элементами массива и вставлять текущий объект на определенную позицию массива. (Если нужно получать в результат ограниченное кол-во объектов в определенном порядке, то можно обойтись несколькими переменными без массива). Ф-ии MessageBox наверное надо заменить на MessageBoxEx, т.к. ты используешь форматный вывод из OBSE, а не стандартный. Дистанция возвращается как float. Ссылка на комментарий Поделиться на другие сайты Поделиться
Владимир_К Опубликовано 22 октября, 2010 Автор Жалоба Поделиться Опубликовано 22 октября, 2010 (изменено) Если просто нужно получить ближайшего, то достаточно сохранять параметры дальности и ссылку на предыдущий объект и сравнивать его дальность с текущим.Если же нужно получить объекты в порядке удаления/приближения, то тут намного сложнее. Нужно создавать массивы и текущий объект сравнивать с элементами массива и вставлять текущий объект на определенную позицию массива. (Если нужно получать в результат ограниченное кол-во объектов в определенном порядке, то можно обойтись несколькими переменными без массива). Ф-ии MessageBox наверное надо заменить на MessageBoxEx, т.к. ты используешь форматный вывод из OBSE, а не стандартный. Дистанция возвращается как float.Спасибо за помощь !А вот еще задачка :)Имеем координаты Перса GetPos X (Y,Z).Как определить координаты границы ячейки (ну, м.б., точки на границе) для того, чтобы понять, где относительно ячейки находится Перс? Изменено 22 октября, 2010 пользователем Владимир_К Ссылка на комментарий Поделиться на другие сайты Поделиться
Visman Опубликовано 22 октября, 2010 Жалоба Поделиться Опубликовано 22 октября, 2010 Перво-наперво нужно определить, что перс находится на природе.Каждая ячейка имеет сторону в 4096.Т.е. 0-я ячейка по Х от 0 до 4096 и по Y от 0 до 4096.(GetPos X) % 4096 - будет позиция внутри ячейки по координате X от 0 до 4095,(9) Ссылка на комментарий Поделиться на другие сайты Поделиться
Владимир_К Опубликовано 23 октября, 2010 Автор Жалоба Поделиться Опубликовано 23 октября, 2010 Перво-наперво нужно определить, что перс находится на природе.Каждая ячейка имеет сторону в 4096.Т.е. 0-я ячейка по Х от 0 до 4096 и по Y от 0 до 4096.(GetPos X) % 4096 - будет позиция внутри ячейки по координате X от 0 до 4095,(9)Логично Ссылка на комментарий Поделиться на другие сайты Поделиться
Владимир_К Опубликовано 27 октября, 2010 Автор Жалоба Поделиться Опубликовано 27 октября, 2010 Не хочется "засорять" форум новыми темами, поэтому спрошу здесь. Мне нужно, чтобы "заспелленый" актер-цель медленнее двигался.Изменить скорость удалось. Но, гад, продолжает резко поворачиваться в мою сторону.Вопрос:Какая характеристика актера влияет на его быстроту поворачивания в разные стороны (вокруг себя)?Я считаю, что это - Agility. Но изменяю скриптом его величину - ничего не меняется.Строчкой до этого идет изменение Speed - все нормально.Может не Agility отвечает за то, как быстро поворачивается какой-нибудь Creatur? Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти