proper70 74 Опубликовано 25 Января 2013 Поделиться Опубликовано 25 Января 2013 malandrinus, с костями фишка не работает) Похоже, эти кости только на неписей влияют. На гг они никакого эффекта не оказали. Зависимость его иммунитетов я заметил только при правке защит в actor.ltx. Но: если сделать вот такой конфиг арта: [af_invul]:af_blood inv_weight = 0 inv_grid_width = 0 inv_grid_height = 0 cost = 0 belt = true default_to_ruck = false ;скорости увеличения (уменьшения) health_restore_speed = 0.0 radiation_restore_speed = 0.0 satiety_restore_speed = 0.0 power_restore_speed = 0.0 bleeding_restore_speed = 0.0 hit_absorbation_sect = af_invul_absorbation [af_invul_absorbation] burn_immunity = 0.0 ;коэффициенты иммунитета strike_immunity = 0.0 shock_immunity = 0.0 wound_immunity = 0.0 radiation_immunity = 0.0 telepatic_immunity = 0.0 chemical_burn_immunity = 0.0 explosion_immunity = 0.0 fire_wound_immunity = 0.0 То он спавнится сразу на поясе при наличии свободного места. И ГГ бессмертен) Заспавнил арт - бессмертен. Удалил - все как обычно) Ссылка на комментарий
Malandrinus 615 Опубликовано 25 Января 2013 Поделиться Опубликовано 25 Января 2013 proper70, с костями фишка не работает Я вообще-то проверил, прежде чем написать. Однако, в чём-то ты прав, там всё не так просто. Вот что я как раз выяснил. Из той секции, на которую указывает параметр bones_koeff_protection, на самом деле берутся только два значения: default, который указывает защиту для всех неуказанных костей и hit_fraction. А вот защита для остальных костей устанавливается так: из этой секции перебираются все строки, из каждой строки берётся только ключ, т.е. имя кости, значение по ключу (параметры защиты кости) игнорируется и вместо этого читается из визуала, ассоциированного с этим костюмом. Т.е. получается, что противопульная защита костей и для сталкеров и для актора всегда берётся из визуала. Однако, всё-таки для актора параметр default таки берётся из этой секции, а если в этой секции кости не указывать вообще, то они и из визуала читаться не будут, а будет использоваться только дефолтовая защита. Я, когда проверял, именно так и сделал, поскольку стояла задача сделать актора неуязвимым, и задавать каждую кость очевидно не нужно. Для меня остался только один нерешённый вопрос: что курили пысовцы, когда делали эту систему? Настолько извращённого алгоритма я даже представить себе не мог. 1 Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
proper70 74 Опубликовано 25 Января 2013 Поделиться Опубликовано 25 Января 2013 что курили пысовцы, когда делали эту систему? Я за время изготовления ОП-2 такого в скриптах начитался, что уже ничему не удивляюсь)) В любом случае, спасибо за помощь! Ссылка на комментарий
Shredder 49 Опубликовано 25 Января 2013 Поделиться Опубликовано 25 Января 2013 А разве параметры strike_immunity, wound_immunity, explosion_immunity, fire_wound_immunity дают хоть какой-то эффект? На сколько я помню, в ТЧ они только в инвентаре циферки показываю "+5%", а реально защиты не дают. И я даже не удивился, что в ЗП эти параметры вырезали из артов. Или всё же есть ньюансы? Ссылка на комментарий
Malandrinus 615 Опубликовано 25 Января 2013 Поделиться Опубликовано 25 Января 2013 Shredder, смотря для чего. У артефактов эти параметры прекрасно работают. А собственно зачем ещё были бы нужны артефакты? А вот у костюмов эти параметры означают устойчивость к повреждению самого костюма, а защита актора там задаётся иначе. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
*Shoker* 322 Опубликовано 27 Января 2013 Поделиться Опубликовано 27 Января 2013 Может кто нибудь помочь вывести векторную формулу? У меня совсем туго с векторной алгеброй =\ Суть в том, что я спавню физический объект перед камерой игрока, и мне надо чтобы его нос был направлен туда, куда смотрит игрок. Что есть: v1 = device().cam_pos -- Вектор. Позиция камеры игрока v1_dir = device().cam_dir -- Направляющий (?) вектор, v1 + v1_dir = точка в метре от игрока, в которую он смотрит Мне нужно из этой информации получить вектор в радианах, который содержит поворот объекта по каждой из трёх осей (x,y,z, значения от 0 до 3.14) Мысли в голове крутятся, но никак не могу что то сообразить стоящее =\ Лишь тыкать наугад формулами. Подозреваю что мне надо получить углы между осями каждого вектора и перевести их в радианы, но опять таки как это правильно сделать... Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
ColR_iT 171 Опубликовано 27 Января 2013 Поделиться Опубликовано 27 Января 2013 (изменено) *Shoker*, если не секрет конечно, по средством какого метода ты пытаешься развернуть объект при спавне? Изменено 27 Января 2013 пользователем ColR_iT Ссылка на комментарий
Shredder 49 Опубликовано 27 Января 2013 Поделиться Опубликовано 27 Января 2013 (изменено) ColR_iT, я не знаю про какую версию игры идёт речь, но в ЗП у серверного объекта есть свойство angle, которое доступно и на запись. Кусок из treasure_manager: local se_obj = alife():object(item_params[num].item_ids[i]) local obj = alife():create( item_section, se_obj.position, se_obj.m_level_vertex_id, se_obj.m_game_vertex_id) obj.angle = se_obj.angle Изменено 27 Января 2013 пользователем Shredder Ссылка на комментарий
KD87 718 Опубликовано 27 Января 2013 Поделиться Опубликовано 27 Января 2013 (изменено) вектор в радианах Нормально - никак не получишь. cam_dir - нормализованный view-space вектор направления камеры. Если тебе нужны углы Эйлера, нужно возиться с матрицами поворота и арксинусами/арккосинусами. В принципе, вся нужная инфа есть даже в википедии. Если тебе надо не очень точно, лучше взять direction у актора. Там как раз углы Эйлера, только вот обновляются они реже, чем хотелось бы. Изменено 27 Января 2013 пользователем KD87 Ссылка на комментарий
*Shoker* 322 Опубликовано 27 Января 2013 Поделиться Опубликовано 27 Января 2013 (изменено) *Shoker*, если не секрет конечно, по средством какого метода ты пытаешься развернуть объект при спавне? Меняю в момент спавна, переписывая abstract-пакет объекта в STATE_Write, старый метод ещё с ТЧ. ColR_iT, я не знаю про какую версию игры идёт речь, но в ЗП у серверного объекта есть свойство angle, которое доступно и на запись. Кусок из treasure_manager: Речь про ЧН, но ЗП тоже подразумевается. Про angle знаю, но нет в ЧН + тоже не даёт требуемой точности. Нормально - никак не получишь. cam_dir - нормализованный view-space вектор направления камеры. Если тебе нужны углы Эйлера, нужно возиться с матрицами поворота и арксинусами/арккосинусами. В принципе, вся нужная инфа есть даже в википедии. Если тебе надо не очень точно, лучше взять direction у актора. Там как раз углы Эйлера, только вот обновляются они реже, чем хотелось бы. Подстава =\ Нужна именно высокая точность, т.к объект спавнится близко к экрану. А дирекция игрока от ног идёт.... хотя попробую, м.б такой хватит. Знаний для работы с матрицами поворота у меня не хватает. Оффтоп: где то уже говорили, но как отключить выделение элементов сайта при попытке копирования. А то я даже имя не могу скопировать чтобы вместе с ним не скопировался фон сайта и шрифт текста. _______________________ Ладно, вопрос в принципе снимается, в итоге решил отказаться от своей затеи и просто рэндомную дирекцию делать. Также db.actor:position() не похоже что содержит углы Эйлера, он по моему аналогичен cam_dir. Хотя если у кого то будут всё же идеи как повернуть объект по направлению взгляда ГГ то на будущее рад буду если подскажите. Всем спасибо за помощь Изменено 27 Января 2013 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 4 Февраля 2013 Поделиться Опубликовано 4 Февраля 2013 Создал что-то типо сверхскромного мини-меню. В нем если параметр helltime равен 0 происходит вызов noupdate.zzz()-пустой функции простоя. Если же helltime = 1 то по идее произойдет то что под звездами на пример спавн мутантов. Верен ли скрипт воопще и будет ли работать?? function helltime_update() local helltime = 0 if helltime == 0 then noupdate.zzz() else helltime == 1 --- *** --- end end Не соответствует правилам. Ссылка на комментарий
Desertir 202 Опубликовано 4 Февраля 2013 Поделиться Опубликовано 4 Февраля 2013 CRAZY_STALKER666, совершенно не верно. local helltime = 0 if helltime == 0 then Тут всегда будет истина, ты же сам пишешь, что переменная равна нулю, потом сравниваешь с нулем, так что эти строки бессмысленны. else helltime == 1 Что ты тут хочешь сделать? Начнем с того, что это приведет к вылету. Если ты хочешь сделать дополнительную проверку, если переменная всетаки не ноль, то это будет так elseif helltime == 0 then и далее по коду. Почитай про программирование и про язык луа побольше, а еще лучше не просто читать, но и понимать. Также, пойми суть, того, что ты хочешь сделать и что ты делаешь, если ты не понимаешь, то и получается такая нелепость. ТЧ 1.0004. SAP и Trans mod github Ссылка на комментарий
ХОВАН 3 Опубликовано 4 Февраля 2013 Поделиться Опубликовано 4 Февраля 2013 То ли я дурак, то ли класс CUIComboBox в ЗП (1.6.02) кастрирован... --Создаю: self.items_num = xml:InitComboBox("form_new:items_num_combo", self.form) --Заполняю: for i=1,5 do if actor_count>=i then self.items_num:AddItem(i.." / "..actor_count) else break end end -- И начинаются интересности: self.items_num:SetCurrentID(1) -- По сути, должен установится первый или второй элемент списка (невозможно проверить), но выбивает ошибку, т.к. не находит сего метода self.items_num:CurrentID() -- По сути, должен возвращать ID выбранного элемента, но возвращает всегда 0 Ну и колбеки на ui_events.WINDOW_LBUTTON_DOWN и ui_events.LIST_ITEM_SELECT не работают А в xml такое: <items_num_combo x="800" y="120" width="140" height="25" always_show_scroll="1" can_select="1"> <list_font r="170" g="170" b="170" font="letterica16"/> <text_color> <e r="170" g="170" b="170"/> </text_color> </items_num_combo> Что я делаю не так, или все-же класс кастрирован? Ссылка на комментарий
*Shoker* 322 Опубликовано 4 Февраля 2013 Поделиться Опубликовано 4 Февраля 2013 (изменено) =\ В наличии есть нормированный направляющий вектор, смотрящий ровно вперёд от объекта Надо каким то образом из него получить похожий вектор, но направленный уже строго вправо относительно объекта и строго вверх относительно объекта. Для игрока в классе камеры эти векторы уже доступны через: vector cam_dir; // единичный вектор направления взгляда vector cam_right; // единичный вектор, перпендикулярный направлению камеры и направленный вправо vector cam_top; // единичный вектор, перпендикулярный направлению камеры и направленный вверх Однако для объектов два нижних вектора не доступны, доступен лишь вектор направления. Соответственно я стал эксперементировать на игроке с вектором cam_dir дабы вывести формулу для получения двух оставшихся. Сперва я попытался получить вектор cam_right путём поворота (через матрицы) направляющего вектора cam_dir по оси Y на 90 градусов вбок. Однако этот приём работает лишь когда игрок смотрит ровно прямо, без наклона головы вверх\вниз --\\ Поворот вектора на заданные углы function vector_rotate(V, rY) local vI = vector():set(math.cos(rY), 0, math.sin(rY)) local vJ = vector():set(0, 1, 0) local vK = vector():set(-math.sin(rY), 0, math.cos(rY)) V.x = vI.x * V.x + vI.y * V.y + vI.z * V.z V.y = vJ.x * V.x + vJ.y * V.y + vJ.z * V.z V.z = vK.x * V.x + vK.y * V.y + vK.z * V.z return V end Ежели игрок наклоняет голову, то точка начинает выписывать овал. Я так понял что поворот вектора по оси Y идёт не относительно СВОЕЙ оси Y а относительно некого вектора (0,1,0). Какую формулу мне надо использовать дабы вектор крутился вокруг своей собственной оси Y? (и в перспективе аналогичный метод для оси X) Или какие ещё методы можно применить для получения искомых векторов cam_right и cam_top Конкретно поворот на произвольный угол не интересует, мне лишь нужно найти формулу для расчёта перпендикулярных векторов.... Чёрт, только щас дошло -___- _____________________________________________________________________ Кто нибудь может пож-ста словами или готовым кодом написать формулу для нахождения перпендикулярного вектора направленного вбок от искомого и перпендикулярного вектора, направленного вверх от искомого? Только полную пож-ста, сокращённые или перегруженные коды на просторах сети мой мозг отказывается переваривать =\ Изменено 4 Февраля 2013 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Malandrinus 615 Опубликовано 4 Февраля 2013 Поделиться Опубликовано 4 Февраля 2013 Shoker, Кто нибудь может пож-ста словами или готовым кодом написать формулу для нахождения перпендикулярного вектора направленного вбок от искомого и перпендикулярного вектора, направленного вверх от искомого? ок. Пусть вектор dir - это вектор направления. Обязательным условием является его невертикальность. единичный вектор, смотрящий вправо, получаем так: right = dir x vert / |dir x vert| где vert - вектор вертикали (в системе координат сталкера будет (0,1,0)) x - векторное произведение (в сталкере метод crossproduct) |dir x vert| - длина вектора (функция magnitude) Или просто взять сначала произведение, получить ненормированный вектор, затем нормировать (в сталкере метод normalize) Затем получаем единичный вектор, перпендикулярный первым двум, т.е. направленный вверх (вверх относительно исходного направления естественно, а не мировой системы координат): up = right x dir 2 Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
KD87 718 Опубликовано 5 Февраля 2013 Поделиться Опубликовано 5 Февраля 2013 Ежели игрок наклоняет голову, то точка начинает выписывать овал. Я так понял что поворот вектора по оси Y идёт не относительно СВОЕЙ оси Y а относительно некого вектора (0,1,0). Да нет, если ты вращаешь вектор не только относительно оси Y ("Ежели игрок наклоняет голову"), то одной матрицы поворота уже недостаточно. Ты же еще относительно другой оси вращаешь, для нее надо считать свою матрицу, а потом перемножать их. Непонятно, правда, зачем нужен вектор, смотрящий вправо от _камеры_, а не от объекта. Можно было бы просто за вектор up взять (0,1,0) и посчитать right простым векторным произведением, как Malandrinus и расписал. Ссылка на комментарий
*Shoker* 322 Опубликовано 6 Февраля 2013 Поделиться Опубликовано 6 Февраля 2013 (изменено) Спасибище всем за помощь :ny_santa: Сам бы врятли справился бы. Простое решение как обычно прошло мимо меня Получилось что то такое: function get_all_direction(dir) --* "Вправо" local dir_right = vector() dir_right:crossproduct(dir, vector():set(0,1,0)) dir_right = dir_right:normalize() --* "Вверх" local dir_up = vector() dir_up:crossproduct(dir_right, dir) dir_up = dir_up:normalize() return dir_right:invert(), dir_up end local item = db.actor:active_item() local vX, vY = get_all_direction(item:direction()) В принципе теперь я могу доделать то, что планировал Однако в данной функции есть один недостаток - она не учитывает Roll (наклон объекта вбок) То есть если игрок выглядывает из за угла (наклоняется вправо\влево), то этот наклон не учитывается при расчёте боковых векторов. Есть ли не шибко сложный способ это поправить? Функцию юзаю на оружии в руках у НПС, а они могут например стрелять из укрытия, заваливая ствол на бок. Это в принципе для меня не настолько критично но всё же если есть способ то лучше поправить. Изменено 6 Февраля 2013 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
abramcumner 1 159 Опубликовано 6 Февраля 2013 Поделиться Опубликовано 6 Февраля 2013 (изменено) local item = db.actor:active_item() local vX, vY = get_all_direction(item:direction()) vY у тебя всегда должен быть равен 0, 1, 0. Хотя скорее -1 В принципе теперь я могу доделать то, что планировал Лучше расскажи, что ты планировал, а то пока непонятно даже, что ты хочешь. Однако в данной функции есть один недостаток - она не учитывает Roll (наклон объекта вбок) Ну да, ты указываешь, что верх у тебя вверху (0, 1, 0) Если пользуешься xray-extensions можно попробовать получать оси из xform, например. Изменено 6 Февраля 2013 пользователем abramcumner Ссылка на комментарий
Malandrinus 615 Опубликовано 6 Февраля 2013 Поделиться Опубликовано 6 Февраля 2013 Shoker, не учитывает Roll (наклон объекта вбок)То есть если игрок выглядывает из за угла (наклоняется вправо\влево), то этот наклон не учитывается при расчёте боковых векторов. Какой такой наклон у объектов? Где ты это видел? А если это ГГ, то зачем тебе эти пляски, если можно не заморачиваясь взять уже готовую камеру? Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
abramcumner 1 159 Опубликовано 6 Февраля 2013 Поделиться Опубликовано 6 Февраля 2013 Shoker, Какой такой наклон у объектов? Где ты это видел? А если это ГГ, то зачем тебе эти пляски, если можно не заморачиваясь взять уже готовую камеру? Он же привел в пример калаш. Явно у него и наклон должен быть. Его в руках крутят, как хотят. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти