Перейти к контенту

Рекомендуемые сообщения

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

То он спавнится сразу на поясе при наличии свободного места. И ГГ бессмертен) Заспавнил арт - бессмертен. Удалил - все как обычно)

Ссылка на комментарий

proper70,

с костями фишка не работает

Я вообще-то проверил, прежде чем написать. Однако, в чём-то ты прав, там всё не так просто. Вот что я как раз выяснил. Из той секции, на которую указывает параметр bones_koeff_protection, на самом деле берутся только два значения: default, который указывает защиту для всех неуказанных костей и hit_fraction. А вот защита для остальных костей устанавливается так: из этой секции перебираются все строки, из каждой строки берётся только ключ, т.е. имя кости, значение по ключу (параметры защиты кости) игнорируется и вместо этого читается из визуала, ассоциированного с этим костюмом.

Т.е. получается, что противопульная защита костей и для сталкеров и для актора всегда берётся из визуала.

Однако, всё-таки для актора параметр default таки берётся из этой секции, а если в этой секции кости не указывать вообще, то они и из визуала читаться не будут, а будет использоваться только дефолтовая защита. Я, когда проверял, именно так и сделал, поскольку стояла задача сделать актора неуязвимым, и задавать каждую кость очевидно не нужно.

 

Для меня остался только один нерешённый вопрос: что курили пысовцы, когда делали эту систему? Настолько извращённого алгоритма я даже представить себе не мог.

  • Нравится 1
 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Ссылка на комментарий
что курили пысовцы, когда делали эту систему?

Я за время изготовления ОП-2 такого в скриптах начитался, что уже ничему не удивляюсь)) В любом случае, спасибо за помощь!

Ссылка на комментарий

А разве параметры strike_immunity, wound_immunity, explosion_immunity, fire_wound_immunity дают хоть какой-то эффект? На сколько я помню, в ТЧ они только в инвентаре циферки показываю "+5%", а реально защиты не дают. И я даже не удивился, что в ЗП эти параметры вырезали из артов. Или всё же есть ньюансы?

Ссылка на комментарий

Shredder,

смотря для чего. У артефактов эти параметры прекрасно работают. А собственно зачем ещё были бы нужны артефакты? А вот у костюмов эти параметры означают устойчивость к повреждению самого костюма, а защита актора там задаётся иначе.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Ссылка на комментарий

Может кто нибудь помочь вывести векторную формулу?

У меня совсем туго с векторной алгеброй =\

 

Суть в том, что я спавню физический объект перед камерой игрока, и мне надо чтобы его нос был направлен туда, куда смотрит игрок.

 

Что есть:

v1 = device().cam_pos -- Вектор. Позиция камеры игрока

v1_dir = device().cam_dir -- Направляющий (?) вектор, v1 + v1_dir = точка в метре от игрока, в которую он смотрит

 

Мне нужно из этой информации получить вектор в радианах, который содержит поворот объекта по каждой из трёх осей (x,y,z, значения от 0 до 3.14)

 

Мысли в голове крутятся, но никак не могу что то сообразить стоящее =\

Лишь тыкать наугад формулами. Подозреваю что мне надо получить углы между осями каждого вектора и перевести их в радианы, но опять таки как это правильно сделать...

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

Ссылка на комментарий

*Shoker*, если не секрет конечно, по средством какого метода ты пытаешься развернуть объект при спавне?

Изменено пользователем ColR_iT
Ссылка на комментарий

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

Изменено пользователем Shredder
Ссылка на комментарий
вектор в радианах

Нормально - никак не получишь. cam_dir - нормализованный view-space вектор направления камеры. Если тебе нужны углы Эйлера, нужно возиться с матрицами поворота и арксинусами/арккосинусами. В принципе, вся нужная инфа есть даже в википедии.

Если тебе надо не очень точно, лучше взять direction у актора. Там как раз углы Эйлера, только вот обновляются они реже, чем хотелось бы.

Изменено пользователем KD87
Ссылка на комментарий

*Shoker*, если не секрет конечно, по средством какого метода ты пытаешься развернуть объект при спавне?

Меняю в момент спавна, переписывая abstract-пакет объекта в STATE_Write, старый метод ещё с ТЧ.

ColR_iT, я не знаю про какую версию игры идёт речь, но в ЗП у серверного объекта есть свойство angle, которое доступно и на запись. Кусок из treasure_manager:

​Речь про ЧН, но ЗП тоже подразумевается. Про angle знаю, но нет в ЧН + тоже не даёт требуемой точности.

Нормально - никак не получишь. cam_dir - нормализованный view-space вектор направления камеры. Если тебе нужны углы Эйлера, нужно возиться с матрицами поворота и арксинусами/арккосинусами. В принципе, вся нужная инфа есть даже в википедии.

Если тебе надо не очень точно, лучше взять direction у актора. Там как раз углы Эйлера, только вот обновляются они реже, чем хотелось бы.

Подстава =\

Нужна именно высокая точность, т.к объект спавнится близко к экрану. А дирекция игрока от ног идёт.... хотя попробую, м.б такой хватит. Знаний для работы с матрицами поворота у меня не хватает.

 

Оффтоп: где то уже говорили, но как отключить выделение элементов сайта при попытке копирования. А то я даже имя не могу скопировать чтобы вместе с ним не скопировался фон сайта и шрифт текста.

 

_______________________

 

Ладно, вопрос в принципе снимается, в итоге решил отказаться от своей затеи и просто рэндомную дирекцию делать. Также db.actor:position() не похоже что содержит углы Эйлера, он по моему аналогичен cam_dir.

Хотя если у кого то будут всё же идеи как повернуть объект по направлению взгляда ГГ то на будущее рад буду если подскажите.

Всем спасибо за помощь :)

Изменено пользователем *Shoker*

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

Ссылка на комментарий

Создал что-то типо сверхскромного мини-меню. В нем если параметр helltime равен 0 происходит вызов noupdate.zzz()-пустой функции простоя. Если же helltime = 1 то по идее произойдет то что под звездами на пример спавн мутантов. Верен ли скрипт воопще и будет ли работать??

 

 

function helltime_update()

 

local helltime = 0

 

if helltime == 0 then

 

noupdate.zzz()

 

else

 

helltime == 1

---

***

---

 

end

end

 

 

Не соответствует правилам.

Ссылка на комментарий

CRAZY_STALKER666, совершенно не верно.

local helltime = 0
if helltime == 0 then

Тут всегда будет истина, ты же сам пишешь, что переменная равна нулю, потом сравниваешь с нулем, так что эти строки бессмысленны.

else
helltime == 1

Что ты тут хочешь сделать? Начнем с того, что это приведет к вылету. Если ты хочешь сделать дополнительную проверку, если переменная всетаки не ноль, то это будет так elseif helltime == 0 then и далее по коду.

 

Почитай про программирование и про язык луа побольше, а еще лучше не просто читать, но и понимать. Также, пойми суть, того, что ты хочешь сделать и что ты делаешь, если ты не понимаешь, то и получается такая нелепость.

ТЧ 1.0004. SAP и Trans mod

github

Ссылка на комментарий

То ли я дурак, то ли класс 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>

Что я делаю не так, или все-же класс кастрирован?

Ссылка на комментарий

=\

В наличии есть нормированный направляющий вектор, смотрящий ровно вперёд от объекта

Надо каким то образом из него получить похожий вектор, но направленный уже строго вправо относительно объекта и строго вверх относительно объекта.

 

Для игрока в классе камеры эти векторы уже доступны через:

 

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

Конкретно поворот на произвольный угол не интересует, мне лишь нужно найти формулу для расчёта перпендикулярных векторов....

 

Чёрт, только щас дошло -___-

_____________________________________________________________________

Кто нибудь может пож-ста словами или готовым кодом написать формулу для нахождения перпендикулярного вектора направленного вбок от искомого и перпендикулярного вектора, направленного вверх от искомого? Только полную пож-ста, сокращённые или перегруженные коды на просторах сети мой мозг отказывается переваривать =\

Изменено пользователем *Shoker*

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

Ссылка на комментарий

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

 

Ссылка на комментарий
Ежели игрок наклоняет голову, то точка начинает выписывать овал. Я так понял что поворот вектора по оси Y идёт не относительно СВОЕЙ оси Y а относительно некого вектора (0,1,0).

Да нет, если ты вращаешь вектор не только относительно оси Y ("Ежели игрок наклоняет голову"), то одной матрицы поворота уже недостаточно. Ты же еще относительно другой оси вращаешь, для нее надо считать свою матрицу, а потом перемножать их. Непонятно, правда, зачем нужен вектор, смотрящий вправо от _камеры_, а не от объекта. Можно было бы просто за вектор up взять (0,1,0) и посчитать right простым векторным произведением, как Malandrinus и расписал.

Ссылка на комментарий

Спасибище всем за помощь :ny_santa: Сам бы врятли справился бы.

Простое решение как обычно прошло мимо меня :D

 

Получилось что то такое:

 

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 (наклон объекта вбок)

То есть если игрок выглядывает из за угла (наклоняется вправо\влево), то этот наклон не учитывается при расчёте боковых векторов.

Есть ли не шибко сложный способ это поправить?

 

Функцию юзаю на оружии в руках у НПС, а они могут например стрелять из укрытия, заваливая ствол на бок.

Это в принципе для меня не настолько критично но всё же если есть способ то лучше поправить.

Изменено пользователем *Shoker*

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

Ссылка на комментарий

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, например.

Изменено пользователем abramcumner
Ссылка на комментарий

Shoker,

не учитывает Roll (наклон объекта вбок)

То есть если игрок выглядывает из за угла (наклоняется вправо\влево), то этот наклон не учитывается при расчёте боковых векторов.

Какой такой наклон у объектов? Где ты это видел? А если это ГГ, то зачем тебе эти пляски, если можно не заморачиваясь взять уже готовую камеру?

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Ссылка на комментарий

Shoker,

Какой такой наклон у объектов? Где ты это видел? А если это ГГ, то зачем тебе эти пляски, если можно не заморачиваясь взять уже готовую камеру?

Он же привел в пример калаш. Явно у него и наклон должен быть. Его в руках крутят, как хотят.

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...