mole venomous 3 275 Опубликовано 13 Апреля 2023 Поделиться Опубликовано 13 Апреля 2023 (изменено) 5 часов назад, dsh сказал: можно и скриптом создавать Сложно представить ситуацию, когда это нужно. Скрытый текст ситуации, когда ГГ даёт НПСу указание, как подчинённому, типа "Стоять здесь!". И он остаётся там навсегда уолкером, например, а не в ремарке. Изменено 13 Апреля 2023 пользователем mole venomous 1 Здесь могла быть ваша реклама. Ссылка на комментарий
Zander_driver 10 328 Опубликовано 13 Апреля 2023 Поделиться Опубликовано 13 Апреля 2023 8 часов назад, mole venomous сказал: Но точки путей, это объекты, которые можно заспавнить? Нет. Во всяком случае это НЕ игровой объект в его классическом представлении (серверный, клиентский, имеет id, секцию, конфиг, класс...) - нет. Точки путей это более простая вещь, которая таким объектом не является. Заспавнить их нельзя. Скриптом создать (в OGSR) - можно. 1 час назад, mole venomous сказал: Сложно представить ситуацию, когда это нужно Сложно представить? А если еще подумать? Что можно ТОЛЬКО ТАК и делать? Все случаи, когда нам надо путь динамически создать, а не прибить его раз-навсегда гвоздями в алл.спавн. Это только исключительно динамическое создание через скрипт. По другому никак. 1 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. Ссылка на комментарий
mole venomous 3 275 Опубликовано 13 Апреля 2023 Поделиться Опубликовано 13 Апреля 2023 @Zander_driver , Скрытый текст ты сейчас не согласен с тем, что сам утверждаешь? Судя по красному крестику. Если что, там у меня не вопрос, хоть и со знаком вопроса. Это недоумение. К вопросу о том, как заспавнить поинты. Ну да ладно. Не нужно быть матёрым кодером, что бы понимать, что точки путей это не объекты. Поэтому вопрос юзера был, как я считаю, некорректным. 17 минут назад, Zander_driver сказал: динамически создать Об этом я думал. И первое, что всплыло в голове, была СЗ. Не знаю, как у тебя там... Но не вижу в этом острой необходимости. Моб-хоумами с разными радиусами не так сложно поиграться, а для сталкеров я бы не стал так рандомно накидывать. Ну это моё видение, я допускаю одинаковые пути. Здесь могла быть ваша реклама. Ссылка на комментарий
Zander_driver 10 328 Опубликовано 13 Апреля 2023 Поделиться Опубликовано 13 Апреля 2023 1 минуту назад, mole venomous сказал: Но не вижу в этом острой необходимости. Скрытый текст В одно окно смотрели двое. Один увидел дождь и грязь. Другой — листвы зелёной вязь, весну и небо голубое. В одно окно смотрели двое. В чем я только-что еще раз, в стопятисотый раз убедился. Что глядя на одни и те же, вроде бы, вещи, и даже одинаково их понимая, кажется. Видеть можно совершенно противоположные, разные "явления"... Ну или не видеть. А я вижу... и почему-то только я? 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. Ссылка на комментарий
mole venomous 3 275 Опубликовано 13 Апреля 2023 Поделиться Опубликовано 13 Апреля 2023 (изменено) @Zander_driver , 8 минут назад, Zander_driver сказал: Видеть можно совершенно противоположные, разные "явления" так всегда было. И во всём. Но это не повод для грусти, вообще то. Я бы так сказал: Не вижу острой необходимости. Вообще то, я сам любитель рандома. Ещё со времён "Диабло". Но считаю, что он не должен быть совсем хаотичным. Ну то есть, мне не лень будет сделать с десяток дорог, из которых каждый раз будет выбрана одна. Изменено 13 Апреля 2023 пользователем mole venomous Здесь могла быть ваша реклама. Ссылка на комментарий
madrazor 10 Опубликовано 13 Апреля 2023 Поделиться Опубликовано 13 Апреля 2023 3 часа назад, mole venomous сказал: @Zander_driver , так всегда было. И во всём. Но это не повод для грусти, вообще то. Я бы так сказал: Не вижу острой необходимости. Вообще то, я сам любитель рандома. Ещё со времён "Диабло". Но считаю, что он не должен быть совсем хаотичным. Ну то есть, мне не лень будет сделать с десяток дорог, из которых каждый раз будет выбрана одна. В сталкере что то с передвижением мутанта если управлять им путём move через action. На предыдущей странице как раз про это спрашивал, особенно заметно в SGM ЗП где есть мутанты компаньоны. Может через динамически создаваемый patrol path будет лучше Ссылка на комментарий
Norman Eisenherz 283 Опубликовано 17 Апреля 2023 Поделиться Опубликовано 17 Апреля 2023 Здрасьте. Нашел старый пост: https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/18/#comment-661443 Интересует конкретно вот эта часть: On 1/8/2012 at 9:50 PM, xStream said: убрать имя класса из функций,вынести содержимое конструктора просто в тело скрипта, а в самом начале скрипта обозначить local self={} Как правильно переоформить приведенный ниже класс через таблицу self и как потом вызывать окно-экземпляр класса? Spoiler class "custom" (CUIScriptWnd) function custom:__init() super() self:Init(0, 0, 1, 1) end function custom:__finalize() end function custom:OnKeyboard(dik, action) CUIScriptWnd.OnKeyboard(self, dik, action) if action == ui_events.WINDOW_KEY_PRESSED then if dik == DIK_keys.DIK_X then printf("X") end end end 1 1 Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Kirgudu 1 172 Опубликовано 17 Апреля 2023 Поделиться Опубликовано 17 Апреля 2023 @Norman Eisenherz Имхо, никак, потому что здесь как раз наследование, инициализация базового класса со всеми его инкапсулированными свойствами и т. д. В цитируемом посте речь, к. м. к., шла о более простом варианте класса, типа такого: class "WeatherManager" function WeatherManager:__init() self.weather_change_day = 0 self.update_time = 0 self.update_level = "" end function WeatherManager:reset() -- ... end function WeatherManager:select_weather(now) -- ... end Который можно было бы переписать как: self = {} function reset() -- содержимое не меняется end function select_weather(now) -- содержимое не меняется end self.weather_change_day = 0 self.update_time = 0 self.update_level = "" Но зачем вообще вопрос и желание - непонятно. Академический интерес? 3 Инструмент Ссылка на комментарий
Norman Eisenherz 283 Опубликовано 18 Апреля 2023 Поделиться Опубликовано 18 Апреля 2023 16 hours ago, Kirgudu said: Академический интерес Именно. Хотелось понять, возможно ли вызвать метод OnKeyboard для окна, которое хранится просто в переменной, без описания класса. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Black_Raven_03 29 Опубликовано 19 Апреля 2023 Поделиться Опубликовано 19 Апреля 2023 (изменено) День добрый, прошу помощи! Написал такой код: if has_alife_info("freeplay") and level.name == "l11_pripyat" then -- если во фриплее и на Припяти for id = 1, 65535 do local lobj = level.object_by_id(id) if (get_clsid(lobj) == clsid.zone_bfuzz_s or get_clsid(lobj) == clsid.zone_galant_s or get_clsid(lobj) == clsid.zone_mbald_s or get_clsid(lobj) == clsid.zone_mincer_s) and distance_between_safe(lobj, level.vertex_in_direction(nil,vector():set(-45,-2,-85),9)) < 900 then -- если класса грави-аномалий и ближе 30 метров от вертекса костра у гаражей alife():set_switch_online(id, false) -- отключить онлайн alife():set_switch_offline(id, true) -- включаем офлайн alife():release(lobj, true) -- посылаем на разрушение end end end в биндере сталкера (знаю, что плохая затея, но так нужно) на движке ОГСР (точнее в моде-аддоне Ганслингер для чистого ТЧ) , чтобы удалить аномалии (две) вечно "съедающие" механика. Аномалии остались на месте, механик мёртв и возникает закономерный вопрос - что я натворил не так? Пожалуйста, ткните носом в мои ошибки! Уточнение: убрать клиентский объект по координатам я могу, а вот работать с серверными пока не научился Изменено 19 Апреля 2023 пользователем Black_Raven_03 дополнение Скрытый текст AMD FX-8100 (Bulldozer) , 16GB DDR3-1600, AFOX GeForce GTX1050Ti и нормально сталкерим в НА5.1, НА7, OGSE-0693, OGSR, НС2016, OLR, OFFLIFE, CoC, LADC, CoP Gunslinger, ShoC GA, Legend Return, Anomaly, CS OGSM! Мозг состоит на 80 процентов из жидкости, и мало того, что она тормозная, так многим еще конкретно не долили...@Denikius136 Ссылка на комментарий
dsh 3 823 Опубликовано 19 Апреля 2023 Поделиться Опубликовано 19 Апреля 2023 @Black_Raven_03 что-то я не понял. Если тебе мешают две конкретные аномалии, то просто удали эти две конкретные аномалии. Можно прямо в начале игры это сделать. 1 5 dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
UriZzz 999 Опубликовано 19 Апреля 2023 Поделиться Опубликовано 19 Апреля 2023 @Black_Raven_03 , что это за механик? Его заспавнили прямо на аномалиях? Или он не стоит на месте? Если исключить эти два варианта, то в моде имеют место быть динамические аномалии. Это значит что в скриптах нужно добавить ещё одно безопасное место, что бы туда не лезли аномалии. Ваш К.О. 1 1 1 Моя нычка, Нычка в арендованном у Опричника холодильнике Мы хорошие ребята, жаль патронов маловато:) Ссылка на комментарий
Kirgudu 1 172 Опубликовано 19 Апреля 2023 Поделиться Опубликовано 19 Апреля 2023 (изменено) @Black_Raven_03 а если говорить непосредственно о коде, то distance_between_safe(lobj, level.vertex_in_direction(nil,vector():set(-45,-2,-85),9)) < 900 где: distance_between_safe вычисляет расстояние между двумя объектами, lobj - клиентский объект аномалии, level.vertex_in_direction(nil,vector():set(-45,-2,-85),9) возвращает номер (число, а не объект) вертекса в некоем направлении и на некоем расстоянии от номера другого вертекса, который в данном случае не передан (параметр nil). В оригинале всё это в лучшем случае приведёт к значению 100000, которое точно больше 900, а значит внутрь условия ты не попадёшь. В OGSR... не знаю, может какие-то функции и модифицированы, но всё равно код выглядит ошибочным. Изменено 19 Апреля 2023 пользователем Kirgudu 1 2 Инструмент Ссылка на комментарий
Black_Raven_03 29 Опубликовано 20 Апреля 2023 Поделиться Опубликовано 20 Апреля 2023 (изменено) @dsh, @UriZzz, @Kirgudu, спасибо, что откликнулись и извините, что так плохо сформулировал вопрос (плохо соображал, когда писал)@dsh мне нужно удалить эти аномалии, только если О-Сознание убичтожено Стрелком/Меченым, не раньше;@UriZzz да - механик (Шуруп) притопал в Припять со Складов, причём с Лукашом и Кэпом из уникальных НеПиСей и ещё пятью статисами из фрименов;@Kirgudu, м-да, это я сильно тупанул с номером вертекса - мне должно было хватить vector():set(x,y,z) для сравнения расстояния; не помню - с какого бодуна я решил перестраховаться с поиском смарта с костром, к которому квад и пытаеться "рассесться", попадая в "мясорубку". переписал нафиг - от греха подальше: if has_alife_info("freeplay") and level.name == "l11_pripyat" then -- если во фриплее и на Припяти for i = 1, 65535 do local svobj = alife().object(i) local clobj = level.object_by_id(svobj.id) if (get_clsid(clobj) == clsid.zone_bfuzz_s or get_clsid(clobj) == clsid.zone_galant_s or get_clsid(clobj) == clsid.zone_mbald_s or get_clsid(clobj) == clsid.zone_mincer_s) and distance_between_safe(clobj, level.vertex_in_direction(nil,vector():set(-45,-2,-85),9)) < 900 then -- если класса грави-аномалий и ближе 30 метров от вертекса костра у гаражей alife():set_switch_online(i, false) -- отключить онлайн alife():set_switch_offline(i, true) -- включаем офлайн -- if actor:position():distance_to(clobj:position()) > 9 then -- если есть 3 метра до Меченого alife():release(svobj, true) -- посылаем на разрушение -- end end end end надеюсь теперь будет цивилизованнее Изменено 20 Апреля 2023 пользователем Black_Raven_03 Скрытый текст AMD FX-8100 (Bulldozer) , 16GB DDR3-1600, AFOX GeForce GTX1050Ti и нормально сталкерим в НА5.1, НА7, OGSE-0693, OGSR, НС2016, OLR, OFFLIFE, CoC, LADC, CoP Gunslinger, ShoC GA, Legend Return, Anomaly, CS OGSM! Мозг состоит на 80 процентов из жидкости, и мало того, что она тормозная, так многим еще конкретно не долили...@Denikius136 Ссылка на комментарий
Kirgudu 1 172 Опубликовано 21 Апреля 2023 Поделиться Опубликовано 21 Апреля 2023 @Black_Raven_03 и снова ты не понял, что именно я тебе пытался показать. Посмотри на строку 5 своего кода, где длинное условие, не помещающееся на экране. Там в самом конце часть условия "and distance_between_safe(...) < 900", которое никогда не выполнится, а значит, ты не попадёшь внутрь к удалению аномалий. Почему - расписал выше. 1 Инструмент Ссылка на комментарий
Zander_driver 10 328 Опубликовано 21 Апреля 2023 Поделиться Опубликовано 21 Апреля 2023 16 часов назад, Black_Raven_03 сказал: level.vertex_in_direction(nil,vector():set(-45,-2,-85),9) Оно не просто не выполнится, но по идее вызовет вылет. Разве можно указывать вертекс nil для функции vertex_in_direction ? По идее нельзя. Но даже если из-за каких-то изменений в движке, вылета и не будет, то результат такого вызова все равно непредсказуем - исходный вертекс не дан. 16 часов назад, Black_Raven_03 сказал: if actor:position():distance_to(clobj:position()) > 9 then -- если есть 3 метра до Меченого Опять же, тут видится ошибочное представление о работе функций. vector:distance_to(vector) -- Возвращает непосредственно дистанцию. А не квадрат дистанции. -- Если вы хотите меньше 3 метров, то и в условии надо писать 3 а не 9. 16 часов назад, Black_Raven_03 сказал: нужно удалить эти аномалии, только если О-Сознание убичтожено Стрелком/Меченым, не раньше; Почему бы не удалить их в момент уничтожения О-сознания. Там же дается какой-то инфопоршень? Повесьте на него функцию через action, и в ней удаляйте. 1 1 2 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. Ссылка на комментарий
Okichi 902 Опубликовано 21 Апреля 2023 Поделиться Опубликовано 21 Апреля 2023 @Black_Raven_03 если удаление двух вполне конкретных _статичных_ аномалий нужно сразу после отключения О-сознания, то зачем здесь такие сложности с вычислением расстояний и перебором всех объектов, да еще все это повешенное на биндер? Две эти аномалии имеют вполне конкретные гейм и левел вертексы, и однозначно заданные имена, если они прописаны в аллспавне. Почему не сделать обычный экшн по получению инфопоршня на отключения О-Сознания ( там такие в оригинале, емнип, и так выдаются, ну если не выдаются - выдать самому). Т.е. как только выдан поршень - автоматически выполняется скрипт на отключение/удаление объектов аномалий по их именам. Может, конечно, я неправильно поняла задачу - но если это аномалии из аллспавна, то и удалять их можно по именилокации-именианомалии-гейм-левелвертексуаномлии. И никакие другие проверки не потребуются. 1 1 4 1 След от кругов на воде - это тоже след (с) Ссылка на комментарий
Black_Raven_03 29 Опубликовано 21 Апреля 2023 Поделиться Опубликовано 21 Апреля 2023 (изменено) @Zander_driver, @Okichi удалять надо и статичные и динамические аномалии, ещё и синхронизируя с другими скриптами по несколько раз в секунду (соотв. имя и вертексы будут менятся, а одиночный экшн не повторит выполнения - отсюда и биндер... пока...)@Zander_driver про квадрат расстояния понял - банально не заметил, когда переписывал, спасибки что повторил Изменено 21 Апреля 2023 пользователем Black_Raven_03 Скрытый текст AMD FX-8100 (Bulldozer) , 16GB DDR3-1600, AFOX GeForce GTX1050Ti и нормально сталкерим в НА5.1, НА7, OGSE-0693, OGSR, НС2016, OLR, OFFLIFE, CoC, LADC, CoP Gunslinger, ShoC GA, Legend Return, Anomaly, CS OGSM! Мозг состоит на 80 процентов из жидкости, и мало того, что она тормозная, так многим еще конкретно не долили...@Denikius136 Ссылка на комментарий
mole venomous 3 275 Опубликовано 21 Апреля 2023 Поделиться Опубликовано 21 Апреля 2023 (изменено) А если статичные удалить непосредственно с уничтожением О-Сознания, а появление динамических предотвратить изначально в этом месте, подобно тому, как сделано ещё в АМК моде (защищённые места, где аномалии не появятся). Изменено 21 Апреля 2023 пользователем mole venomous 1 2 Здесь могла быть ваша реклама. Ссылка на комментарий
Это популярное сообщение. Zander_driver 10 328 Опубликовано 21 Апреля 2023 Это популярное сообщение. Поделиться Опубликовано 21 Апреля 2023 (изменено) 5 часов назад, Black_Raven_03 сказал: удалять надо и статичные и динамические аномалии, ещё и синхронизируя с другими скриптами по несколько раз в секунду (соотв. имя и вертексы будут менятся, а одиночный экшн не повторит выполнения - отсюда и биндер... пока...) Удалять аномалии несколько раз в секунду? Изменение имени и/или вертекса аномалии в процессе ее существования? У вас динамические аномалии спавнятся каждую секунду, что ли? (Да даже если бы и так, это не создает проблем в данном конкретном случае...) Пока мне кажется, что либо я совсем неверно понял задачу, либо (если понял правильно), вы ее совсем неправильно пытаетесь решать. Не нужны тут ни для чего биндеры, апдейты и прочее. Все можно сделать единственным однократным действием, о котором тут уже несколько человек написали. + Одиночный экшен не повторит. А зачем повторять? Заспавните в нем спейс-рестриктор, если сложно просто координаты записать. И при спавне динамических аномалий, просто проверяйте на не-попадание в этот рестриктор (Ну или проще - проверка на достаточную дистанцию от фиксированных координат, если они фиксированные). Да и не-фиксированные можно сохранять при желании. И тут совершенно не важно, с какой частотой и каким вообще образом у вас спавнятся динамические аномалии, просто внесите эту проверку туда. А в экшене ОДНО действие. И не надо никакой непонятной синхронизации между скриптами, да еще и на апдейте. 19.04.2023 в 17:36, Black_Raven_03 сказал: на движке ОГСР Есть script vars storage. В котором можно вообще почти любые скриптовые данные хранить. Так что даже рестриктор спавнить не надо, просто записать координаты "где аномалиям быть нельзя", если координаты динамические. Или прописать их прямо в код, если статические. 19.04.2023 в 17:36, Black_Raven_03 сказал: в биндере сталкера (знаю, что плохая затея, но так нужно) Для чего нужно? Зачем?.. ЗЫ. Скрытый текст Как-то грустно мне стало от всего сабжа. Когда ради двух аномалий пилится непонятный костыль и вешается на апдейт - это не плохая идея. Это идея УЖАСНАЯ. Тем более на движке OGSR, имеющем море возможностей для того чтобы сделать хорошо и правильно. В общем обычно мы так не делаем... но вот готовый код. Есть у меня такое подозрение что без него каши не сварить. local tech_pos = vector():set(-45,-2,-85) -- Это координаты техника? Замечательно. Если нет, впишите их сюда. local tech_dist = 30 -- На этой дистанции от него надо зачистить аномалии? Если не на этой, то впишите свою. local warn_anoms = { -- если из алл.спавна можно раздобыть имена этих аномалий, запишите их сюда. } function IsTargetAnomClass(obj) if get_clsid(obj) == clsid.zone_bfuzz_s or get_clsid(obj) == clsid.zone_galant_s or get_clsid(obj) == clsid.zone_mbald_s or get_clsid(obj) == clsid.zone_mincer_s then return true end return false end function OnAction() -- Это дергать из экшена инфопоршня / или при входе на локацию. local i = 1 while i < 65534 do local obj = level.object_by_id(i) if obj and IsTargetAnomClass(obj) then -- Здесь мы пользуем тот факт, что аномалии на локации везде онлайн. -- И потому их клиентские объекты можно получать. -- Более правильно это можно было бы сделать, получая гейм-вертексы объектов и по ним проверяя локацию. -- Такой вариант можно было бы вызывать с любой локации. А этот - только на той, где удаляем аномалии. local del = false local sobj = alife():object(obj:id()) if obj:position():distance_to(tech_pos) < tech_dist then del = true end if not del and #warn_anoms > 0 then for k, name in pairs(warn_anoms) do if sobj:name() == name then del = true break end end end if del then alife():release(sobj, true) -- Предварительные ласки в виде увода в оффлайн, нмв, тут совершенно излишни. -- Если в морг, значит сразу в морг. end i = i + 1 end end Если надо потом запрещать спавн динамических аномалий в этом месте, то надо там проверять ту же дистанцию до тех же координат, насколько я понял задачу. И бога ради не трогайте биндер актора для таких вещей, и тем более не трогайте апдейт. Это вот ни для чего вообще тут не может быть нужно. Изменено 21 Апреля 2023 пользователем Zander_driver 1 6 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. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти