Это популярное сообщение. Dennis_Chikin 3 658 Опубликовано 16 Мая 2014 Это популярное сообщение. Поделиться Опубликовано 16 Мая 2014 Ковыряемся в файлах ТЧ Прежде чем писать в тему - внимательно читаем первый пост, и пользуемся поиском. Возможно, ответ на Ваш вопрос уже есть. Касательно телепатии: если Вы передаете Ваши файлы телепатическим путем - ответы будут передаваться тоже телепатически. Если Вы предлагаете угадать, отчего у Вас в подвале происходит странный стук - ответ будет передан стуком. 4 8 6 12 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
mole venomous 3 433 Опубликовано 18 Ноября 2020 Поделиться Опубликовано 18 Ноября 2020 8 минут назад, dsh сказал: в скриптах сделано, что бы волкеров в смарт не принимали, тогда не должен. А если нет, то что должно этому помешать? 8 минут назад, dsh сказал: Это кривые руки мододела. Вот здесь до меня доходит по тихой грусти. Заодно вопросик. Если гулагу потребовалось население, он дёргает непися. Если подходящих на этой локации нет, придут с другой. И вот вопрос - НПС выберет ближайший к себе переход из возможных, что бы добраться на локу с гулагом? Здесь могла быть ваша реклама. Ссылка на комментарий
AndrewMor 527 Опубликовано 18 Ноября 2020 Поделиться Опубликовано 18 Ноября 2020 11 минут назад, dsh сказал: Кому должен? Я может неправильно объяснил. Есть непись, у него в кастом-дате смарт_террейн = ноне, и логика - стоять на точке ( или идти по пути, если конечно, нет на этом пути рестров, в которые заходить нельзя). В таком разе он должен тупо выполнять свою работу и никуда от нее не убегать (тем более, на другую локацию). Или я что-то не так понимаю?. Коль так, проясни тонкости, плз. 1 Сталкер - наше всё! Ссылка на комментарий
mole venomous 3 433 Опубликовано 18 Ноября 2020 Поделиться Опубликовано 18 Ноября 2020 (изменено) 29 минут назад, AndrewMor сказал: в кастом-дате смарт_террейн = ноне Я уже склоняюсь к тому, что это не желательный, а обязательный пар-тр для чела с персональной логикой при работе с двиглом ОГСР. На ванили этот параметр работает, только если указан в оллспаун и в то же время я не замечал, что бы мобы, заспавненые скриптом с записью в кастомдату, дислоцировались в гулаги Изменено 18 Ноября 2020 пользователем mole venomous Здесь могла быть ваша реклама. Ссылка на комментарий
dsh 3 824 Опубликовано 18 Ноября 2020 Поделиться Опубликовано 18 Ноября 2020 38 minutes ago, mole venomous said: Если гулагу потребовалось население, он дёргает непися. Гулаг ничего не дергает. Движок периодически предлается каждого моба со smart_terrain_id == 65535 каждому смарту. Если смарт ответил согласием, движок меняет у этого моба smart_terrain_id на id этого смарта. На этом работа движка закончена. А дальше уже смарт и гулаг работаются с тем, что им предложено. 40 minutes ago, mole venomous said: НПС выберет ближайший к себе переход из возможных, что бы добраться на локу с гулагом? НПС ничего не выбирает. Как движок ему путь построит, так и пойдет. Эмпирически у меня сложилось мнение, что движок строит максимально короткий путь. 40 minutes ago, AndrewMor said: у него в кастом-дате смарт_террейн = ноне В этом случае смарты таких не принимают, поэтому и убегать ему некуда. Правда наличие в кастомной дате [smart_terrain] none = true этого не гарантирует, т.к. имеет значение, когда это появилось в кастомной дате. Если позже определенного момента, то не сработает. 29 minutes ago, mole venomous said: а обязательный пар-тр для чела с персональной логикой при работе с двиглом ОГСР Двигатель не имеет значение. Оригинальный движок работает точно так же. 30 minutes ago, mole venomous said: На ванили этот параметр работает, только если указан в оллспаун Это не так. Работает всегда. Но см. мое замечание выше. Никаких отличий между оригинальным движком и OGSR в этом плане нет. 2 2 dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
mole venomous 3 433 Опубликовано 18 Ноября 2020 Поделиться Опубликовано 18 Ноября 2020 (изменено) @dsh, Благодарю, всё понятно расписал и три вопроса разом закрылись. А то часто много противоречивой инфы или размазано всё на сорок страниц... Изменено 18 Ноября 2020 пользователем mole venomous 1 Здесь могла быть ваша реклама. Ссылка на комментарий
Colder 12 Опубликовано 18 Ноября 2020 Поделиться Опубликовано 18 Ноября 2020 Скрытый текст ---Скрипт--- local kits = { [1] = "sewing_weaplinght_", [2] = "sewing_weapweight_", [4] = "sewing_weapnew_", [6] = "sewing_outfit_" } function patch_repair(obj) if obj then local sect = obj:section() local num for k,v in pairs(kits) do if string.find(sect,v) then num = k break end end if num then local cond = math.ceil(obj:condition()*10) start_repair_out(cond,num) end end end function start_repair_out(cond,num) local itm = db.actor:item_in_slot(num) local kit = kits[num] if itm ~= nil then --// проверта что в слоте есть ITEM alife():release(alife():object(slot:num()), true) --/ удаляем обьект libery_mod.actor_random_devices() --// тут спавним (Ран.кол.запчастей) end local snd_obj = xr_sound.get_safe_sound_object([[interface\inv_repair_kit]]) snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0) local s = cond-2 local tex_s = "" if s > 0 then tex_s = "Осталось использований: "..s/2 create_repkit(kit..s) else tex_s = "Комплект использован полностью." end local text = "[d_cyan]Разбор окончен!\\n%c[default]"..tex_s send_tip(text) else send_tip("[d_red]Разбор невозможен!\\nОтсутствует объект для разбора!") create_repkit(kit..cond) end end --// ---------------------------------------------- function send_tip(news_text) local snd = xr_sound.get_safe_sound_object([[device\pda\pda_news]]) snd:play(db.actor, 0, sound_object.s2d) local msg = "%c[white]Разбор\\n".."%c"..news_text db.actor:give_game_news(msg, "ui\\ui_iconsTotal", Frect():set(249,940,83,47), 0, 4000) end function create_repkit(section) if system_ini():section_exist(section) then alife():create(section,db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id()) end end ----LTX---- [sewing_outfit_10]:conserva visual = new\repair\item_repair.ogf description = 1 inv_name = 1 inv_name_short = 1 inv_weight = 0 cost = 0 inv_grid_width = 1 inv_grid_height = 1 inv_grid_x = 25 inv_grid_y = 39 eat_health = 0 eat_satiety = 0 eat_power = 0 eat_radiation = 0 wounds_heal_perc = 0 eat_portions_num = 1 animation_slot = 4 hud = wpn_vodka_hud [sewing_outfit_8]:sewing_outfit_10 condition = 0.8 inv_name = 2 inv_name_short = 2 [sewing_outfit_6]:sewing_outfit_10 condition = 0.6 inv_name = 3 inv_name_short = 3 [sewing_outfit_4]:sewing_outfit_10 condition = 0.4 inv_name = 4 inv_name_short = 4 [sewing_outfit_2]:sewing_outfit_10 condition = 0.2 inv_name = 5 inv_name_short = 5 ----Вылет---- Expression : fatal error Function : CScriptEngine::lua_error File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: ...ü ×åðíîáûëÿ\gamedata\scripts\bind_stalker_ext.script:32: attempt to index global 'axr_repair_out' (a nil value) Парни СОС помогите кто-нибудь. В чем ошибка? Пытаюсь реализовать разбор каждого слота по отдельности на запчасти. Ссылка на комментарий
naxac 2 447 Опубликовано 18 Ноября 2020 Поделиться Опубликовано 18 Ноября 2020 34 минуты назад, Colder сказал: attempt to index global 'axr_repair_out' (a nil value) Синтаксическая ошибка в скрипте. Проверь синтакс-чекером или луа-плагином в notepad++. Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Colder 12 Опубликовано 18 Ноября 2020 Поделиться Опубликовано 18 Ноября 2020 @naxac, да уже сделал. Все работает. Спасибо! @naxac, Хотя нет все равно не то. Теперь анимация перестала проигрываться и не приходит смс о том сколько применений осталось! Скрытый текст local kits = { [1] = "sewing_weaplinght_", [2] = "sewing_weapweight_", [4] = "sewing_weapsuper_", [6] = "sewing_outfit_" } function patch_repair(obj) if obj then local sect = obj:section() local num for k,v in pairs(kits) do if string.find(sect,v) then num = k break end end if num then local cond = math.ceil(obj:condition()*10) start_repair_out(cond,num) end end end function start_repair_out(cond,num) local itm = db.actor:item_in_slot(num) local kit = kits[num] if itm ~= nil then libery_mod.actor_random_devices() alife():release(alife():object(itm:id()), true) local snd_obj = xr_sound.get_safe_sound_object([[item_sounds\inv_repair_sewing]]) snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0) local s = cond-2 local tex_s = "" if s > 0 then tex_s = "Осталось использований: "..s/2 create_repkit(kit..s) else tex_s = "Комплект использован полностью." end else send_tip("[d_red]Разбор невозможен!\\nОтсутствует объект для разбора!") create_repkit(kit..cond) end end --// ---------------------------------------------- function send_tip(news_text) local snd = xr_sound.get_safe_sound_object([[device\pda\pda_news]]) snd:play(db.actor, 0, sound_object.s2d) local msg = "%c[white]Разбор\\n".."%c"..news_text db.actor:give_game_news(msg, "ui\\ui_iconstotal", Frect():set(332,423,83,47), 0, 4000) end А ческер пишет что все нормально Ссылка на комментарий
AndrewMor 527 Опубликовано 19 Ноября 2020 Поделиться Опубликовано 19 Ноября 2020 11 часов назад, mole venomous сказал: На ванили этот параметр работает, только если указан в оллспаун и в то же время я не замечал, что бы мобы, заспавненые скриптом с записью в кастомдату, дислоцировались в гулаги Да-да-да, именно так. Выходит, и в ОГСР также скриптовая обвязка работает? 11 часов назад, dsh сказал: Если позже определенного момента, то не сработает. Позже какого момента? Если НПС уже назначена работа в гулаге? Сталкер - наше всё! Ссылка на комментарий
Это популярное сообщение. dsh 3 824 Опубликовано 19 Ноября 2020 Это популярное сообщение. Поделиться Опубликовано 19 Ноября 2020 9 hours ago, AndrewMor said: Позже какого момента? Если НПС уже назначена работа в гулаге? Не, раньше. После alife():create() уже поздно. Когда мы выполняем alife():create(), прежде чем выполнится следующая строчка скрипта, движок создает объект и вызывает его on_before_register(), потом on_register() и т.д. Например, для сталкера - это se_stalker:on_before_register() и т.д. Далее я привожу цитаты из скриптов ОП-2 2.09, т.к. под рукой есть. function se_stalker:on_before_register() self:fill_exclusives() end function se_stalker:fill_exclusives() self:get_ini() self.smart_terrain_conditions = smart_terrain.read_smart_terrain_conditions( self ) if self.smart_terrain_conditions then for name, condlist in pairs(self.smart_terrain_conditions) do smart_terrain.exclusives[name] = (smart_terrain.exclusives[name] or 0) + 1 end end end function se_stalker:get_ini() if not self.ini_initialized then self.ini = self:spawn_ini () self.ini_initialized = true if self.ini:section_exist("spawner") then self.spawner = xr_logic.parse_condlist(db.actor, "spawner", "cond", self.ini:r_string("spawner", "cond")) end end end Как видно, из on_before_register() вызывается fill_exclusives(), из которого вызывается get_ini(), который сохраняет spawn_ini(), т.е. кастомную дату, в self.ini. Т.е. мало того, что тут вызывается обработка секции [smart_terrain], так и spawn_ini() запоминается. Вот поэтому, если кастомную дату поменять после alife():create(), записав туда [smart_terrain] none = true это вступит в силу только после следующей загрузки сейва. А в on_register() есть вот такой код if self:alive() and self:smart_terrain_id() == 65535 then self:brain():update() end Т.е. есть большая вероятность, что сразу же после возврата из alife():create(), моб уже будет в каком-то смарте и добавление none = true в кастомную дату вообще уже никакого влияния не окажет. Т.е. менять кастомную дату нужно до возврата из alife():create(), внутри on_before_register(). Вот например function se_stalker:on_before_register() ... event( "se_stalker:on_before_register" ):trigger({ sobj = self }) self:get_ini() smart_terrain.fill_exclusives( self ) end 1 5 dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
AndrewMor 527 Опубликовано 19 Ноября 2020 Поделиться Опубликовано 19 Ноября 2020 (изменено) @dsh, Круто!!! Гран мерси за столь подобное разъяснение! Резюмируя: alife():create() создает НПС, и до выполнения следующей строчки скрипта (например, привязка к смарту), НПС уже может быть назначена работа в свободном смарте. Так? Выходит, чтобы спавнить НПС с привязкой к смарту, нужно модифицировать скрипт, так? Это, так понимаю, единственное правильное решение. Или все-таки правка движка разумнее? Изменено 19 Ноября 2020 пользователем AndrewMor Сталкер - наше всё! Ссылка на комментарий
Okichi 922 Опубликовано 19 Ноября 2020 Поделиться Опубликовано 19 Ноября 2020 (изменено) @AndrewMor, 1) да, только не работа - а может быть назначен любой смарт, согласившийся непися принять. И непись туда пойдет - а вот работу там он получит только тогда, когда дойдет. 2) не обязательно ничего модифицировать - можно просто создать для этого НПС отдельную секцию, там прописать путь к файлу кастомдаты ( именно она будет в таком случае использоваться в alife():create()), и уже в этой кастомдате указать либо конкретный смарт для НПС, либо none = true Именно это хотел донести @dsh, - чтобы уже в момент работы alife():create() была задана правильная ( нужная разработчику ) кастомдата 3) тем, про что написал ДиШ - движок не занимается. Это в скриптах. Изменено 19 Ноября 2020 пользователем Okichi 1 След от кругов на воде - это тоже след (с) Ссылка на комментарий
AndrewMor 527 Опубликовано 19 Ноября 2020 Поделиться Опубликовано 19 Ноября 2020 (изменено) 22 минуты назад, Okichi сказал: да, только не работа - а может быть назначен любой смарт, согласившийся непися принять. Согласен. Я и имел в виду не саму работу, а смарт, который берет НПС к себе. 22 минуты назад, Okichi сказал: не обязательно ничего модифицировать - можно просто создать для этого НПС отдельную секцию, там прописать путь к файлу кастомдаты ( именно она будет в таком случае использоваться в alife():create()), и уже в этой кастомдате указать либо конкретный смарт для НПС, либо none = true Из-за того и весь этот разговор. Есть к примеру в АМК такой скрипт. Назначение логики скриптом, но присобачить принадлежность НПС к конкретному смарту не выходит. Вокруг этого не раз дискуссии велись на страницах форума, и многие спрашивали: как скриптом привязать НПС к конкретному смарту (или не привязывать вообще). Вот теперь dsh подробно расписал механизм, а именно этого и не хватало многим для понимания процесса. А в ванили, и похоже, в более продвинутых движках (типа ОГСР), скриптовая обвязка не менялась. Ведь человек-то не просто так спрашивал. В любом случае, теперь понятен механизм!!! Изменено 19 Ноября 2020 пользователем AndrewMor 1 Сталкер - наше всё! Ссылка на комментарий
Muzafir 19 Опубликовано 19 Ноября 2020 Поделиться Опубликовано 19 Ноября 2020 Скажите, а может быть у НПС несколько секций meet? По типу для walker1 - meet1, walker2 - meet2. Пару дней уже мучаюсь с этим конструктором. Не хочет НПС отрабатывать свою логику и все тут... Ссылка на комментарий
Купер 2 921 Опубликовано 20 Ноября 2020 Поделиться Опубликовано 20 Ноября 2020 @Muzafir, ничего не понятно, но жутко интересно Скрытый текст Условно: [walker@1] meet = meet@1 .... [walker@2] meet = meet@2 [meet@1] ... [meet@2] ... Посмотри как Крот на Агропроме сделан, например. 1 Ссылка на комментарий
Ворон545 392 Опубликовано 20 Ноября 2020 Поделиться Опубликовано 20 Ноября 2020 Приветствую. В NLC7 есть такая интересная вещь: при сильном ранении ГГ "шатает". Не подскажете где ковырять, чтобы этот эффект добавить? Ссылка на комментарий
Muzafir 19 Опубликовано 20 Ноября 2020 Поделиться Опубликовано 20 Ноября 2020 @Купер, ты абсолютно правильно меня понял, хотя ничего не и не было понятно . Об этом я спрашивал. По этой же схеме пытаюсь заставить НПС работать, но он отказывается. Поэтому и закралось сомнение. Спасибо, значит дело в другом. 1 Ссылка на комментарий
mole venomous 3 433 Опубликовано 20 Ноября 2020 Поделиться Опубликовано 20 Ноября 2020 (изменено) 1 час назад, Dens сказал: И какой из указанных расчетных показателей считается лучшим? Стало быть, где циферки больше. 1 час назад, Dens сказал: правка "циферок в инвентаре"? За NLC 7 не знаю, но почти везде цифры в инвентаре действительно работают на все показатели, кроме пулестойкости. Пулестойкость это damage.ltx. 1 час назад, Dens сказал: правка в секции иммунитета самого костюма Но это проверить же совсем несложно. Изменено 20 Ноября 2020 пользователем mole venomous Здесь могла быть ваша реклама. Ссылка на комментарий
Ворон545 392 Опубликовано 20 Ноября 2020 Поделиться Опубликовано 20 Ноября 2020 (изменено) @Dens, В NLC я играл, но параметры брони не правил, поэтому не знаю, повлияют ли правки именно конфигов брони. Зато точно знаю, что заданные авторами параметры работают честно. То есть броня в NLC не просто "шкурка", как в чистом ТЧ. Изменено 20 Ноября 2020 пользователем Ворон545 Ссылка на комментарий
Colder 12 Опубликовано 21 Ноября 2020 Поделиться Опубликовано 21 Ноября 2020 Скрытый текст local kits = { [1] = "sewing_weaplinght_", [2] = "sewing_weapweight_", [4] = "sewing_weapsuper_", [6] = "sewing_outfit_" } function patch_repair(obj) if obj then local sect = obj:section() local num for k,v in pairs(kits) do if string.find(sect,v) then num = k break end end if num then local cond = math.ceil(obj:condition()*10) start_repair_out(cond,num) end end end function start_repair_out(cond,num) local itm = db.actor:item_in_slot(num) local kit = kits[num] local s = cond-2 if itm ~= nil then alife():release(alife():object(itm:id()), true) libery_mod.actor_random_devices() local snd_obj = xr_sound.get_safe_sound_object([[item_sounds\inv_repair_sewing]]) snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0) create_repkit(kit..s) else send_tip("[d_red]Разбор невозможен!\\nОтсутствует объект для разбора!") create_repkit(kit..cond) end end --// ---------------------------------------------- function send_tip(news_text) local snd = xr_sound.get_safe_sound_object([[device\pda\pda_news]]) snd:play(db.actor, 0, sound_object.s2d) local msg = "%c[white]Разбор\\n".."%c"..news_text db.actor:give_game_news(msg, "ui\\ui_iconstotal", Frect():set(332,423,83,47), 0, 4000) end function create_repkit(section) if system_ini():section_exist(section) then alife():create(section,db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id()) end end Всем привет. Парни может все таки кто-нибудь подскажет в чем проблема? Скрипт рабочий но проблема в том что перестали работать анимации и некоторые функции. Отключаю скрипт все нормально. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти