madrazor 10 Опубликовано 13 Апреля 2023 Поделиться Опубликовано 13 Апреля 2023 3 часа назад, mole venomous сказал: @Zander_driver , так всегда было. И во всём. Но это не повод для грусти, вообще то. Я бы так сказал: Не вижу острой необходимости. Вообще то, я сам любитель рандома. Ещё со времён "Диабло". Но считаю, что он не должен быть совсем хаотичным. Ну то есть, мне не лень будет сделать с десяток дорог, из которых каждый раз будет выбрана одна. В сталкере что то с передвижением мутанта если управлять им путём move через action. На предыдущей странице как раз про это спрашивал, особенно заметно в SGM ЗП где есть мутанты компаньоны. Может через динамически создаваемый patrol path будет лучше Ссылка на комментарий
Norman Eisenherz 316 Опубликовано 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 217 Опубликовано 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 316 Опубликовано 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 824 Опубликовано 19 Апреля 2023 Поделиться Опубликовано 19 Апреля 2023 @Black_Raven_03 что-то я не понял. Если тебе мешают две конкретные аномалии, то просто удали эти две конкретные аномалии. Можно прямо в начале игры это сделать. 1 5 dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
UriZzz 1 004 Опубликовано 19 Апреля 2023 Поделиться Опубликовано 19 Апреля 2023 @Black_Raven_03 , что это за механик? Его заспавнили прямо на аномалиях? Или он не стоит на месте? Если исключить эти два варианта, то в моде имеют место быть динамические аномалии. Это значит что в скриптах нужно добавить ещё одно безопасное место, что бы туда не лезли аномалии. Ваш К.О. 1 1 1 Моя нычка, Нычка в арендованном у Опричника холодильнике Мы хорошие ребята, жаль патронов маловато:) Ссылка на комментарий
Kirgudu 1 217 Опубликовано 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 217 Опубликовано 21 Апреля 2023 Поделиться Опубликовано 21 Апреля 2023 @Black_Raven_03 и снова ты не понял, что именно я тебе пытался показать. Посмотри на строку 5 своего кода, где длинное условие, не помещающееся на экране. Там в самом конце часть условия "and distance_between_safe(...) < 900", которое никогда не выполнится, а значит, ты не попадёшь внутрь к удалению аномалий. Почему - расписал выше. 1 Инструмент Ссылка на комментарий
Zander_driver 10 334 Опубликовано 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 922 Опубликовано 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 433 Опубликовано 21 Апреля 2023 Поделиться Опубликовано 21 Апреля 2023 (изменено) А если статичные удалить непосредственно с уничтожением О-Сознания, а появление динамических предотвратить изначально в этом месте, подобно тому, как сделано ещё в АМК моде (защищённые места, где аномалии не появятся). Изменено 21 Апреля 2023 пользователем mole venomous 1 2 Здесь могла быть ваша реклама. Ссылка на комментарий
Это популярное сообщение. Zander_driver 10 334 Опубликовано 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. Ссылка на комментарий
Okichi 922 Опубликовано 22 Апреля 2023 Поделиться Опубликовано 22 Апреля 2023 (изменено) 10 часов назад, Zander_driver сказал: Есть script vars storage. Тут вопрос возник - а разве в движке ОГСР нельзя делать любых ( нужных автору ) неписей совершенно неуязвимыми для любых аномалий? В версии ОГСР в dsh-моде такое было, емнип. Потому что когда перетаскивала в NLC обходчик аномалий оттуда, то вот именно этот кусочек скрипта был "движково-ориентированный", и его адаптировать не удалось. Или там в чистом ОГСР своя версия движка? А то, может, человеку просто надо добавить в какой-нибудь конфиг имя своего уникального механика, и поплевывать этот механик будет с высокой колокольни на все аномалии, будь их хоть миллион... Изменено 22 Апреля 2023 пользователем Okichi След от кругов на воде - это тоже след (с) Ссылка на комментарий
Zander_driver 10 334 Опубликовано 22 Апреля 2023 Поделиться Опубликовано 22 Апреля 2023 29 минут назад, Okichi сказал: разве в движке ОГСР нельзя делать любых ( нужных автору ) неписей совершенно неуязвимыми для любых аномалий? В версии ОГСР в dsh-моде такое было Тут я могу с уверенностью говорить только за старый OGSR, с которого я начинал свои наработки в 2019-м году. Там такого не было. Возможно, позже появилось, а возможно, это @dsh-специфичная технология. Тут автору виднее) 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. Ссылка на комментарий
Это популярное сообщение. dsh 3 824 Опубликовано 22 Апреля 2023 Это популярное сообщение. Поделиться Опубликовано 22 Апреля 2023 Есть там это. Там много чего есть, но что вы ожидаете, если люди до сих пор нетпакеты amk скриптами разбирают. 5 1 1 2 dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Norman Eisenherz 316 Опубликовано 2 Мая 2023 Поделиться Опубликовано 2 Мая 2023 [ТЧ 1.0006] После попытки адаптации какой-то древней версии "amk_offline_alife" игра случайным образом падает на переходах с ошибкой чтения сейва и руганью на пустое значение game_difficulty. Вроде такого: https://www.amk-team.ru/forum/topic/14288-soc-kovyryaemsya-v-faylah/?do=findComment&comment=608408 Если в actor_binder:save и …load изменений нет, что еще может портить сейв? Среди файлов мода есть [amk_tools.script] с таймерами – может, это они криво записываются? В целом, что и как стоит проверять при таких вылетах? Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Zander_driver 10 334 Опубликовано 2 Мая 2023 Поделиться Опубликовано 2 Мая 2023 3 часа назад, Norman Eisenherz сказал: какой-то древней версии "amk_offline_alife" игра случайным образом падает на переходах с ошибкой чтения сейва и руганью на пустое значение game_difficulty. Видимо оно что-то делает с нетпакетом/пстором актора. Или не только актора. А зачем вообще ковырять древнее непойми что, когда на современных средствах то же самое при желании делается как два пальца? 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. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти