Colder 12 Опубликовано 3 Декабря 2023 Поделиться Опубликовано 3 Декабря 2023 (изменено) Скрытый текст local t = 0 local BACKPACK_SLOT = 8 function ItTank(obj) if not obj then return false end local list = { ["airtank"] = true, } return list[obj:section()] end local toxic_level = ini_file([[items\settings\txr_toxic_level.ltx]]):r_float("hit_level", level.name()) local min_cond = sys_ini:r_float_ex("airtank", "inv_condition") function item_to_tank() local slot = db.actor:item_in_slot(BACKPACK_SLOT) local function list(actor,obj) if slot and ItTank(obj) then if t < time_global() then local cond = obj:condition() obj:set_condition(cond-min_cond) db.actor.health = toxic_level+0.001 t = time_global() + 1000 end end end db.actor:iterate_inventory(list,db.actor) end Всем привет. У меня такая проблема если вставить в слот airtank, потом вытащить его и поставить другой. То хит наноситься всё равно 1 airtank который стоял до этого в слоте. Я так понимаю нужно присвоить ид предмету? Как мне это сделать? Изменено 3 Декабря 2023 пользователем Colder Ссылка на комментарий
WinCap 313 Опубликовано 3 Декабря 2023 Поделиться Опубликовано 3 Декабря 2023 @Colder, функция "item_in_slot" возвращает объект, находящийся в заданном слоте. Перебирать инвентарь не нужно, можно сразу работать с полученным объектом и описанная "проблема" отпадёт сама собой. 1 2 1 S.T.A.L.K.E.R. CoP Objects (upd 30.09.24) Ссылка на комментарий
Norman Eisenherz 286 Опубликовано 12 Декабря 2023 Поделиться Опубликовано 12 Декабря 2023 Чем obj:set_fastcall(fx, obj) лучше/хуже level.add_call(fx1, fx2)? Оба варианта проверки активны только в онлайне, у обоих есть авто-отключение проверки при выполнении заданного условия и, если верить старым постам, одинаково частое срабатывание отдельно от апдейта ГГ. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Это популярное сообщение. Kirgudu 1 176 Опубликовано 12 Декабря 2023 Это популярное сообщение. Поделиться Опубликовано 12 Декабря 2023 @Norman Eisenherz не лучше и не хуже, просто работают по-разному. Это примерно как разница между while do и repeat until. В add_call функция fx2 будет запущена только в том случае, если функция fx1 вернёт true (я бы сказал, что с оговорками аналог while ... do ...). А в set_fastcall функция fx будет выполнена в любом случае (repeat ... until ...). 1 6 Инструмент Ссылка на комментарий
Colder 12 Опубликовано 14 Декабря 2023 Поделиться Опубликовано 14 Декабря 2023 (изменено) Всем привет. Создал спальник который при использовании спавнит, матрас к гг под ноги и компресионый мешок в инвентарь. Возникла проблема что при использовании компресионого мешка на НЕ разрешеной дистанции компресионый мешок не спавнится обратно к гг. Скрытый текст local spawned_sleepbags = {} local dist = 1.5 function on_item_sleep(obj) if obj:section() == "sleep_bag" then -- спальный мешок alife():create("compression_bag", pos, lvid, gvid, pid) -- спавним компресионый мешок гг pos.x = pos.x + 1 pos.z = pos.z + 0 local matt = alife():create("mattress", pos, lvid, gvid) -- спавним матрас spawned_sleepbags[matt.id] = true elseif obj:section() == "compression_bag" then for id, v in pairs(spawned_sleepbags) do local sp = level.object_by_id(id) if sp and (v == true) then local sp_distance = sp:position():distance_to(db.actor:position()) if (sp_distance < dist) then alife():release(alife():object(sp:id()), true) -- удаляем матрас и спавним мешок обратно alife():create("sleep_bag", pos, lvid, gvid, pid) local bag = db.actor:object("compression_bag") -- удаляем компресионый мешок у гг alife():release(alife():object(bag:id()), true) spawned_sleepbags[id] = nil break end end end end end Изменено 14 Декабря 2023 пользователем Colder Ссылка на комментарий
Zander_driver 10 330 Опубликовано 15 Декабря 2023 Поделиться Опубликовано 15 Декабря 2023 4 часа назад, Colder сказал: Возникла проблема что при использовании компресионого мешка на НЕ разрешеной дистанции компресионый мешок не спавнится обратно к гг. Ну так надо его заспавнить?) В коде этого и НЕ делается. Добавь bool флаг, записывай в него результат каждой проверки в цикле, по окончании цикла если флаг останется в false, то компрессионный мешок надо спавнить обратно. 3 Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
Colder 12 Опубликовано 16 Декабря 2023 Поделиться Опубликовано 16 Декабря 2023 Я пробывал спавнить гг но он спавниться каждым действием при использовании Ссылка на комментарий
Zander_driver 10 330 Опубликовано 16 Декабря 2023 Поделиться Опубликовано 16 Декабря 2023 3 часа назад, Colder сказал: он спавниться каждым действием Логично, если ты без всяких условий спавнишь, то так и будет. 15.12.2023 в 04:45, Zander_driver сказал: Добавь bool флаг, записывай в него результат каждой проверки в цикле, по окончании цикла если флаг останется в false, то А вот это я просто так, для красоты написал? 1 Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
naxac 2 421 Опубликовано 16 Декабря 2023 Поделиться Опубликовано 16 Декабря 2023 @Colder , можно: вместо break сделай return, а сразу после цикла поставь спавн этого мешка. Получится, если в цикле return не сработал, значит дистанция больше, значит спавним мешок обратно. 1 1 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
RayTwitty 492 Опубликовано 19 Декабря 2023 Поделиться Опубликовано 19 Декабря 2023 Понадобилось тут разобраться с поворотом объектов. Оказывается есть целых 3 ключевых понятия: direction, angle и rotation. С последними двумя все просто, углы поворота над плоскостью, первый в радианах, второй в градусах (именно это значение мы видим в SDK). А вот первое - это направление в диапазоне от -1 до 1. Набросал функции получения direction имея angle/rotation, которые должны работать по идее даже в оригинале (где имеется полурабочий класс матрицы, но его достаточно): function angle_to_direction(angle) local m = matrix() m:setXYZ(angle.x, angle.y, angle.z) return m.k end function rotation_to_direction(angle) local m = matrix() m:setXYZ(utils.deg2rad(angle.x), utils.deg2rad(angle.y), utils.deg2rad(angle.z)) return m.k end А вот чтобы обратно получить angle/rotation имея direction, нужно, как я понял получить доступ к матрице трансформации объекта (XFORM), применив к нему getXYZ (ну или getHPB). Прав ли я в рассуждениях и что такое на самом деле direction? Направление относительно чего? P.S. Частично угол поворота можно восстановить при помощи методов вектора getH и getP, но только yaw и pitch. 3 Ссылка на комментарий
Zander_driver 10 330 Опубликовано 19 Декабря 2023 Поделиться Опубликовано 19 Декабря 2023 1 час назад, RayTwitty сказал: чтобы обратно получить angle/rotation имея direction, нужно, как я понял получить доступ к матрице трансформации объекта (XFORM), применив к нему getXYZ (ну или getHPB). Прав ли я в рассуждениях Да, прав. Вообще общепринято во всех 3D-движках, положение и ориентацию в пространстве любого объекта выражать через матрицу. В Unreal Engine она называется Transform, в X-Ray - XFORM, но суть одна и та же. Вся информация о положении и ротации хранится там, и получается оттуда. 1 час назад, RayTwitty сказал: что такое на самом деле direction? Направление относительно чего? Тут могу ошибиться в деталях формулировки, но емнип, так: У каждого 3д-объекта можно взять условно направление "вперед" - обычно это положительное направление по одной из осей локальных координат этого объекта. (А вот +x или +z считается направлением "вперед" в X-Ray... блин, уже не помню) но одно из них). direction это направление этого локального вектора "вперед", у данного объекта, в глобальной системе координат игры. Т.е. буквально направление куда объект "смотрит". Относительно его позиции, в той же глобальной системе координат. 1 2 Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
CiberZold 142 Опубликовано 19 Декабря 2023 Поделиться Опубликовано 19 Декабря 2023 28 минут назад, Zander_driver сказал: А вот +x или +z считается направлением "вперед" в X-Ray... блин, уже не помню наверное это ещё зависит от того как ориентирована сама локация/плоскость на которую ставиться объект, потому что если сама плоскость или лока ориентирована не строго по осям в глобальной системе коорд-т, то чтобы объект подвинуть вперёд возможно надо уменьшать x, а на какой-то плоскости z, а на третьей и x и z или наоборот, вообще чтоб представить положение объекта в 3D-пространстве на 2D-мониторе довольно трудно, тут надо иметь или хорошее воображение в голове или 3 Д шлем/очки или сделать модель в реальном мире и подвигать её физически 1 Ссылка на комментарий
Zander_driver 10 330 Опубликовано 19 Декабря 2023 Поделиться Опубликовано 19 Декабря 2023 13 минут назад, CiberZold сказал: наверное это ещё зависит от того как ориентирована сама локация/плоскость на которую ставиться объект, потому что если сама плоскость или лока ориентирована не строго по осям в глобальной системе коорд-т НЕТ! "Вперед" - это ведь ВСЕГДА, понятие в локальной системе координат объекта. Не зависит и не может оно зависеть от локации, где объект находится. Только от общепринятых (в данном конкретном движке, игре, игровой студии) дефиниций. Глобальный смысл у дирекции появляется тогда, когда мы ее переводим в глобальную же систему координат. До этого "вперед" это просто общепринятое вперед, одинаковое для любых объектов в этом движке. Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
CiberZold 142 Опубликовано 19 Декабря 2023 Поделиться Опубликовано 19 Декабря 2023 12 минут назад, Zander_driver сказал: "Вперед" - это ведь ВСЕГДА, понятие в локальной системе координат объекта. Не зависит и не может оно зависеть от локации, где объект находится. так ты сам себе противоречишь если говоришь, что ВПЕРЁД это локальное понятие, а потом что оно не может зависеть от локации когда мы говорим вперёд то по логике имеем ввиду вперёд относительно чего-то, в глобальном понимании это не имеет смысла, как представь объект, который летает в космосе, в глобальной системе коорд-т, да он может подвинуться типа вперёд (двинуть по оси z например), но это не имеет никакого смысла, потому что там нет ни лева/права, верха/низа, вперёд/назад, это всё приобретает смысл только относительно ещё какого-то объекта или плоскости, так же как ты можешь идти вперёд по улице в своём городе строго прямо и на север по компасу) но это вперёд относительно поверхности Земли, в глобальной системе коорд-т ты можешь в этом момент двигаться по вектору между осями z, y, x одновременно, который ещё и меняет направление в течении дня, т.к. Земля ещё движется вокруг Солнца и своей оси, так что когда говоришь вперёд это локально и зависит от локации, глобальное вперёд может и существует, но не имеет смысла на практике. 1 Ссылка на комментарий
Zander_driver 10 330 Опубликовано 19 Декабря 2023 Поделиться Опубликовано 19 Декабря 2023 2 минуты назад, CiberZold сказал: так ты сам себе противоречишь Хорошо. Где можно прочесть составленный вами учебник векторной математики? Или как называется написанный вами 3D-движок, действующий по вашим правилам пространственной геометрии? Очень необычно. Хочу ознакомиться для расширения кругозора. @CiberZold Ну или как вариант. Прочитай сам какой-то приличный учебник по теме. Или вникни как работает 3D движок любой приличный, хоть даже X-Ray. Чтобы пурги не нести. 1 Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
CiberZold 142 Опубликовано 19 Декабря 2023 Поделиться Опубликовано 19 Декабря 2023 (изменено) 16 минут назад, Zander_driver сказал: 3D-движок, действующий по вашим правилам пространственной геометрии? я же не говорю что движок работает не так, понятно что движок работает по глобальной системе, он же не может подстраиваться под каждую локацию, я говорю о том что это малоудобно практически, человек хочет подвинуть объект вперёд на локации относительно самой локации, относительно других объектов, и по твоему совету двигает по оси Z типа вперёд, уменьшая эти коорд-ты, а у него по факту, этот объект по твоему совету, двигается не вперёд, а вправо и назад например, потому что так ориентирована локация, и что ему дело до твоего движка и теоретических рассуждений Изменено 19 Декабря 2023 пользователем CiberZold 1 Ссылка на комментарий
Zander_driver 10 330 Опубликовано 19 Декабря 2023 Поделиться Опубликовано 19 Декабря 2023 Ну что тут можно сказать. Не изучайте в школе математику, физику, геометрию. В том числе трехмерную. И тогда мир вокруг вас будет наполнен магией и волшебством. Кому-то может быть, так и прикольнее. 1 1 Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
RayTwitty 492 Опубликовано 19 Декабря 2023 Поделиться Опубликовано 19 Декабря 2023 1 час назад, Zander_driver сказал: У каждого 3д-объекта можно взять условно направление "вперед" - обычно это положительное направление по одной из осей локальных координат этого объекта Просто в игре у объектов, расположенных совершенно по-разному - один на стене, другой на потолке - может быть вектор с одинаковым значением direction. Как будто бы direction это вращение вокруг какой-то своей оси координат, изначально заданной углами вращения в глобальной системе координат. Ссылка на комментарий
Это популярное сообщение. Zander_driver 10 330 Опубликовано 20 Декабря 2023 Это популярное сообщение. Поделиться Опубликовано 20 Декабря 2023 2 минуты назад, RayTwitty сказал: у объектов, расположенных совершенно по-разному - один на стене, другой на потолке - может быть вектор с одинаковым значением direction. Может. direction - это не ротация. Не ориентация в пространстве, строго говоря. Два прожектора, из которых один закреплен на полу, а другой на потолке, могут светить в одном и том же направлении. И для обоих это будет направление по касательной к их поверхности на которой закреплены. И так же два прожектора, из которых оба закреплены на полу, могут светить в противоположных направлениях. Причем для обоих это будет направление по касательной к их поверхности на которой закреплены. direction может годиться для выяснения, "насколько в разные / одинаковые стороны смотрят два объекта?", т.е. грубо говоря для сравнения их направлений. Только в том случае, когда базовая плоскость у них одна и та же. Грубо говоря они все стоят на полу. Или все на потолке. Если один на полу, другой на стене, третий на потолке... этого мало) Для полного описания манипуляций вращения, без математических артефактов, применяют Кватернионы. В X-Ray тоже. 2 3 Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
Colder 12 Опубликовано 24 Декабря 2023 Поделиться Опубликовано 24 Декабря 2023 (изменено) @naxac когда в рюкзаке 2 спальника, то компрессионый мешок все равно спавниться постоянно Изменено 24 Декабря 2023 пользователем Colder 1 Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти