Firestarter 3 Опубликовано 9 Ноября 2021 Поделиться Опубликовано 9 Ноября 2021 Только что, Space.Marine сказал: Как-то так ) Ну, по порядку: Скрытый текст 1)Если я правильно понял, то первый выброс, исходя из файла surge_manager.script, это: local START_MIN_SURGE_TIME = 2*60*60 local START_MAX_SURGE_TIME = 4*60*60 т.е. это от двух до четырёх часов игрового времени? Судя по личному опыту - так и есть, первый выброс относительно быстро после старта случается. А вот уже в дальнейшем: local MIN_SURGE_TIME = 12*60*60 local MAX_SURGE_TIME = 24*60*60 Что тоже верно, исходя из игры. 2)По поводу влияния взятого квеста на шанс появления того или иного арта, скорее всего, я ошибался. Чуть погуглив, по пути: ...\gamedata\configs\scripts\zaton\anomaly можно обнаружить файлы аномалий, а в них: [anomal_zone] layers_count = 3 respawn_tries = 1 max_artefacts = 2 ;applying_force_xz = 200 ;applying_force_y = 400 artefacts = af_medusa, af_cristall_flower, af_night_star, af_vyvert, af_gravi, af_gold_fish start_artefact = af_night_star coeff = 3, 3, 2, 2, 1, 1 artefact_ways = zat_b14_af_way, zat_b14_af_way_2, zat_b14_af_way_3 field_name = zat_b14_zone_field_radioactive_weak Ну это как одна из аномалий, zaton_b14. Самое интересующее, это конечно же: coeff = 3, 3, 2, 2, 1, 1 То есть это коэффициенты, которые соответствуют артефактам (6 коэф. = 6 артов), и чем выше число, тем выше шанс выпадения арта. Но хотелось бы большего понимания - что это цифры значат? Т.е. конкретика - сколько 3 в процентах (думал, что 30, но в каждом файле по-разному есть соотношение этих коэффициентов.) 3)Пока не нашёл файла влияния выбросов на появление артов. Перерою весь сталкер по ключевым словам, надеюсь, найду...и буду признателен вам, если вспомните/поищете этот скрипт. 4)про обмен у групп сталкеров оружия на арты, если честно, слышу впервые, но, судя по скрипту, имеет место быть. Хотя, ИМХО, это совершенно бесполезная штука Отнюдь. Борода даёт максимальную цену за артефакты на заказ - от 18000 до 24000 рублей. Поэтому имеет смысл выловить вовремя группу соперников и толкнуть им хороший ствол (особенно на Затоне если такое провернуть). Также, с начала игры на Скадовске, мы ограничены детектором Медведь, который поможет нам найти малое кол-во артов из запрашиваемых Бородой Всё несколько иначе. Медведь не позволяет найти ни одного артефакта, что заказывает Борода - нужен Велес. Велес можно получить, как минимум, тремя способами: 1)От Бороды в качестве награды за уничтожение логова кровососов - и это ближайший и быстрейший путь получения Велеса. 2)Если убивать группы сталкеров, что идут к Бороде с найденным артефактом (если убить две группы, Борода прекратит выдавать задания на поиск артов, так что надо быть поаккуратнее. Да и такое это дело...мочить сталкеров.) 3)Когда есть квест "Артефакт на заказ" от Бороды, группы соперников можно будет обнаружить в различных аномалиях (чаще в тех, где теоретически может появиться искомый арт). Как минимум у главаря будет Велес. И, если я правильно понял, за убийство таких сталкеров Борода ничего не скажет (не проверял). Да и такое это дело...мочить сталкеров. (4)(возможно) Будет продавать Сыч после получения достижения "Состоятельный клиент". Точно не уверен, не понял влияния этой ачивки на шансы в торговле (там что-то связано с припиской scientific, и то ли это ачивка "Научный сотрудник" влияет, то ли выполнение квеста Сыча по доставке трёх Велесов учёным). Поясню, зачем вообще весь этот сыр-бор учинил. Т.к. шанс найти редкий артефакт - низок, а очень хочется уже сразу иметь Золотую Рыбку, ведь я любитель мародёрить всё что плохо лежит, то я предположил, что это можно будет сделать через соперников. Взял у Бороды квест на арт, и стал ждать. Предварительно я сбегал на Сгоревший хутор (вроде так локация называется), где забрал ВСС Винторез, что является тайником (он же как раз "good_gun"). В этот раз как нельзя быстро артефакт был ими найден. В таком случае, задание обновляется, и можно успеть перехватить эту группу - будет на карте указано их местоположение, и даже будет видно их передвижение. И тут уже что хочешь делай - обменяйся, убей, можно даже выкупить (ну за Светляк они просили что-то около 39000 р, офигеть). Артефакт я у них благополучно выменял, но не стал отдавать Бороде - самому нужнее, хороший реген. Вот только забавный баг произошёл - тот самый командир соперников зачем-то пришёл на баржу и постоянно там отсиживается в разных местах на корточках. Вроде бы, если отоспаться, то задание будет провалено и сталкер исчезнет, ну да и бог с ним. Таким образом можно на самом старте, если бы мне повезло, получить вожделенную рыбку. Но ничто не мешает вновь и вновь брать задания и просто ждать сталкеров. Хороших пушек, правда, раз-два и обчёлся, но! Их продажа принесёт куда меньше денег/пользы, чем деньги/польза от полученного арта. 1 Ссылка на комментарий
Norman Eisenherz 286 Опубликовано 9 Ноября 2021 Поделиться Опубликовано 9 Ноября 2021 @Colder Spoiler [scripts\xr_motivator.script] -- биндер NPC function motivator_binder:hit_callback(…) if amount > 0 проверить активный слот: 0 = нож 1 1 Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Labadal 59 Опубликовано 10 Ноября 2021 Поделиться Опубликовано 10 Ноября 2021 (изменено) 22 часа назад, Colder сказал: Возможно ли скриптово отследить удар ножом (ТЧ) Попробуй просто отследить, что на момент получения целью урона, в руках у гг был нож. local wpn = db.actor:active_item() if wpn and wpn:section()=="wpn_knife" then *твои действия* end Вопрос касательно ТЧ. Есть у меня переменная, по умолчанию объявлена как local energia = 10 Есть предмет, использующий энергию - при каждом использовании тратится одна, то есть, без подзарядки у меня всего 10 использований. Но как только я делаю сейв-лоад, переменная снова становится равной 10, что даёт ещё 10 использований. Как "сохранить" текущее значение переменной? Спасибо Изменено 10 Ноября 2021 пользователем Labadal God save Hatsune Miku! Ссылка на комментарий
Space.Marine 464 Опубликовано 10 Ноября 2021 Поделиться Опубликовано 10 Ноября 2021 (изменено) 10 часов назад, Firestarter сказал: влияния выбросов на появление артов Тыц. Там для Misery, но какая разница. bind_anomaly_zone.script: if math.random(1,100) > 17 then Изменено 10 Ноября 2021 пользователем Space.Marine 1 Ссылка на комментарий
ted.80 251 Опубликовано 10 Ноября 2021 Поделиться Опубликовано 10 Ноября 2021 8 часов назад, Labadal сказал: Попробуй просто отследить, что на момент получения целью урона, в руках у гг был нож Очень не правильно - что-то подобное пробовал очень давно - поясню: если выстрелить из рпг или подствольника ну или гренку кинуть, и переключиться на нож - то твой скрипт покажет что урон нанесён ножом, Увы даже на костыль не тянет Личный АРХИВ по S.T.A.L.K.E.R Ссылка на комментарий
Labadal 59 Опубликовано 10 Ноября 2021 Поделиться Опубликовано 10 Ноября 2021 10 минут назад, ted.80 сказал: Очень не правильно - что-то подобное пробовал очень давно - поясню: если выстрелить из рпг или подствольника ну или гренку кинуть, и переключиться на нож - то твой скрипт покажет что урон нанесён ножом, Увы даже на костыль не тянет Я так упавшую звезду проходил, кидал в нпс гранатами и переключался на метательные ножи. 1 1 God save Hatsune Miku! Ссылка на комментарий
ted.80 251 Опубликовано 10 Ноября 2021 Поделиться Опубликовано 10 Ноября 2021 14 минут назад, Labadal сказал: Я так упавшую звезду проходил "Молодец" - что ещё сказать, только задавали вопрос ни как налюбить игру - а как отловить именно удар ножом так что твой совет весьма сомнителен Личный АРХИВ по S.T.A.L.K.E.R Ссылка на комментарий
Labadal 59 Опубликовано 10 Ноября 2021 Поделиться Опубликовано 10 Ноября 2021 (изменено) 1 час назад, ted.80 сказал: "Молодец" - что ещё сказать, только задавали вопрос ни как налюбить игру - а как отловить именно удар ножом так что твой совет весьма сомнителен Окей, вот тебе подробный "туториал" как это сделать. 1. подключить X-ray Extensions 2. подключить OGSE.dll 3. подключить каллбек before_hit 4. function motivator_binder:before_hit_callback(p_s_hit, p_ignore_flags) self.last_hit_data = read_hit_data(p_s_hit) local who = level.object_by_id(self.last_hit_data.who_id) if who:id() == db.actor:id() then local wpn = level.object_by_id(self.last_hit_data.weapon_id) weapon_kill = wpn:section() end end 5. Теперь переменная weapon_kill хранит себе название оружия, которым был убит нпс. То есть в ней всё равно будет храниться, допустим, grenade_f1, даже если ты кинул гранату и быстро достал нож. 6. а дальше все просто if weapon_kill=="wpn_knife" then *что-то делается* end 7. В принципе, всё довольно просто. А используя оригинальные возможности, лучше тех вариантов, которые предложил я и товарищ Norman Eisenherz не придумаешь. Изменено 10 Ноября 2021 пользователем Labadal 1 God save Hatsune Miku! Ссылка на комментарий
Firestarter 3 Опубликовано 10 Ноября 2021 Поделиться Опубликовано 10 Ноября 2021 12 часов назад, Space.Marine сказал: Тыц. Там для Misery, но какая разница. bind_anomaly_zone.script: if math.random(1,100) > 17 then Спасибо большое что помогли, я проверил это на своём сталкере. Но тут уже начинается моя проблема, языка Lua я не знаю, и поэтому сам бы я не допёр, что это означает процент шанса. Да и щас не понимаю, я не понимаю всех этих строчек. Обидно, конечно, что если хочешь что-то более-менее даже просто узнать, нужно изучать язык. Ссылка на комментарий
ted.80 251 Опубликовано 10 Ноября 2021 Поделиться Опубликовано 10 Ноября 2021 13 часов назад, Labadal сказал: Есть у меня переменная, по умолчанию объявлена как local energia = 10 local energia = 10 Как я понял в каком-то скрипте у тебя объявляется переменная, и она равна = 10 при использовании чего-либо она уменьшается, (тут все понятно) но при сейв/лоад - скрипт грузится поновой, и переменная опять объявляется и она = 10 (вот тут и трабла?) для сохранности надо делать по другому Скрытый текст local energia = xr_logic.pstor_retrieve(db.actor, "nrg", nil) if not energia then -- | тут энергии нет впринципе xr_logic.pstor_store(db.actor, "nrg", 10) -- | тут выдаём 10 end для использования вот так Скрытый текст local energia = xr_logic.pstor_retrieve(db.actor, "nrg", nil) if energia then -- | тут энергия есть if energia > 0 then -- | тут её больше нуля else -- | тут её меньше или равно нулю end end 1 Личный АРХИВ по S.T.A.L.K.E.R Ссылка на комментарий
Lieutenant Novikov 15 Опубликовано 10 Ноября 2021 Поделиться Опубликовано 10 Ноября 2021 Здравствуйте. Столкнулся с такой проблемой. Как известно Call of Chernobyl хотя и масштабный мод, имеет несколько неприятных багов. Один из них: НПС у костра после того как их потревожит противник, возвращались к костру и молчали, застревая на одной анимации, до перезагрузки. Я решил исправить этот баг, и методом тыка вычислил файл который отвечает за поведение НПС у костра, xr_animpoint_predicates.script. Я взял файл из ЗП и заменил им COCовский, проблема исчезла, но появился побочный эффект, теперь НПС у костра всегда с одной анимацией, и разговаривают только "о жизни", не едят, не играют на гитаре, вообщем ведут себя как будто не в зоне кампа. Все попытки отредактировать файл не к чему не привели, отчасти потому что я плохо разбираюсь в скриптах. Может кто разбирается и увидит что не так? Вроде бы в этом замешаны эти фрагменты. Скрытый текст -------------------------------------------------------------------------------- -- Predicate functions for xr_animpoint actions -------------------------------- -------------------------------------------------------------------------------- function const_predicate_true(id) local npc = db.storage[id] and db.storage[id].object if (npc and db.storage[id].need_sleep) then return false end return true end function animpoint_predicate_bread(id) local npc = db.storage[id] and db.storage[id].object if (npc and not db.storage[id].need_sleep) then return true end return false end function animpoint_predicate_kolbasa(id) local npc = db.storage[id] and db.storage[id].object if (npc and not db.storage[id].need_sleep) then return true end return false end function animpoint_predicate_vodka(id) local npc = db.storage[id] and db.storage[id].object if (npc and not db.storage[id].need_sleep) then return true end return false end function animpoint_predicate_energy(id) local npc = db.storage[id] and db.storage[id].object if (npc and not db.storage[id].need_sleep) then return true end return false end function animpoint_predicate_guitar(id, camp) if not (camp) then return false end local npc = db.storage[id] and db.storage[id].object if (npc and not db.storage[id].need_sleep) then return true end return false end function animpoint_predicate_harmonica(id, camp) if not (camp) then return false end local npc = db.storage[id] and db.storage[id].object if (npc and not db.storage[id].need_sleep) then return true end return false end function animpoint_predicate_weapon(id) return true end Скрытый текст function const_predicate_true(npc_id) return true end function animpoint_predicate_bread(npc_id) if(db.storage[npc_id] and db.storage[npc_id].object and eatable_visuals[db.storage[npc_id].object:get_visual_name()] and db.storage[npc_id].object:object("bread")) == true then return true end return false end function animpoint_predicate_kolbasa(npc_id) if(db.storage[npc_id] and db.storage[npc_id].object and eatable_visuals[db.storage[npc_id].object:get_visual_name()] and db.storage[npc_id].object:object("kolbasa")) then return true end return false end function animpoint_predicate_vodka(npc_id) if(db.storage[npc_id] and db.storage[npc_id].object and eatable_visuals[db.storage[npc_id].object:get_visual_name()] and db.storage[npc_id].object:object("vodka")) then return true end return false end function animpoint_predicate_energy(npc_id) if(db.storage[npc_id] and db.storage[npc_id].object and eatable_visuals[db.storage[npc_id].object:get_visual_name()] and db.storage[npc_id].object:object("energy_drink")) then return true end return false end function animpoint_predicate_guitar(npc_id, is_in_camp) --printf(" predicate_guitar %s", npc_id) --printf(" registred_camp %s", tostring(is_in_camp)) if is_in_camp == true and db.storage[npc_id] and db.storage[npc_id].object and db.storage[npc_id].object:object("guitar_a") then --printf(" return true") return true end --printf(" return false") return false end function animpoint_predicate_harmonica(npc_id, is_in_camp) --printf(" predicate_harmonica %s", npc_id) --printf(" registred_camp %s", tostring(is_in_camp)) if is_in_camp == true and db.storage[npc_id] and db.storage[npc_id].object and harmonica_visuals[db.storage[npc_id].object:get_visual_name()] and db.storage[npc_id].object:object("harmonica_a") then --printf(" return true") return true end --printf(" return false") return false end function animpoint_predicate_weapon(npc_id) if(db.storage[npc_id] and db.storage[npc_id].object) then local smart = xr_gulag.get_npc_smart(db.storage[npc_id].object) if(smart) then for k,v in pairs(smart_table) do if smart:name() == v then return false end end end end return true end Ссылка на комментарий
Labadal 59 Опубликовано 10 Ноября 2021 Поделиться Опубликовано 10 Ноября 2021 @ted.80 чет туплю жестко, сплошные вылеты ловлю. где вставить этот кусок? Можно ли переменную сделать глобальной? (Для использования в других скриптах небоходимо) God save Hatsune Miku! Ссылка на комментарий
Norman Eisenherz 286 Опубликовано 10 Ноября 2021 Поделиться Опубликовано 10 Ноября 2021 @Labadal Можно привязать условную энергию к состоянию предмета: при каждом использовании менять через obj:set_condition( старое значение - 0.1 ) и отключать использование при obj:condition() < 0.1. Состояние при этом будет храниться в штатном нетпакете без дополнительных действий в скриптах. В OGSE так хранится состояние расходуемых ремкомплектов, а в NLC-7 – состояние постепенно теряющих силу артефактов. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Labadal 59 Опубликовано 10 Ноября 2021 Поделиться Опубликовано 10 Ноября 2021 @Norman Eisenherz Проблема в том, что используемый предмет расходует "энергию" бронекостюма, который надет на гг. Тут уж кондишн не отнимешь. (не в том смысле, что нельзя, а в том, что задумка) God save Hatsune Miku! Ссылка на комментарий
Norman Eisenherz 286 Опубликовано 11 Ноября 2021 Поделиться Опубликовано 11 Ноября 2021 @Labadal Можно спавнить "аккумулятор" с невидимой иконкой и без собственного веса, считая, что предмет вставлен в броню. 1 Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Labadal 59 Опубликовано 11 Ноября 2021 Поделиться Опубликовано 11 Ноября 2021 @Norman Eisenherz Вариант. Все же попробую первый способ. Не получится - сделаю так God save Hatsune Miku! Ссылка на комментарий
AndreySol 215 Опубликовано 11 Ноября 2021 Поделиться Опубликовано 11 Ноября 2021 @Labadal Объяви свою переменную глобально, затем сохраняй ее в pstor, а при загрузке игры читай оттуда сохраненное значение. Ссылка на комментарий
Labadal 59 Опубликовано 11 Ноября 2021 Поделиться Опубликовано 11 Ноября 2021 @AndreySol это понятно, но как сохранять? Где сохранять? God save Hatsune Miku! Ссылка на комментарий
mole venomous 3 288 Опубликовано 11 Ноября 2021 Поделиться Опубликовано 11 Ноября 2021 1 час назад, Labadal сказал: как сохранять Скрытый текст -- Записываем переменную function save(variable_name, value) xr_logic.pstor_store(db.actor, variable_name, value) end -- Загружаем переменную function load(variable_name, value_if_not_found) return xr_logic.pstor_retrieve(db.actor, variable_name, value_if_not_found) end -- Удаляем переменную function del(variable_name) if db.storage[db.actor:id()].pstor[variable_name] then db.storage[db.actor:id()].pstor[variable_name] = nil end end Здесь могла быть ваша реклама. Ссылка на комментарий
Labadal 59 Опубликовано 11 Ноября 2021 Поделиться Опубликовано 11 Ноября 2021 @mole venomous Допустим, где вызывать эти функцию? God save Hatsune Miku! Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти