Перейти к контенту

Dennis_Chikin

Жители
  • Число публикаций

    6 272
  • Регистрация

  • Последнее посещение

  • Дней в топе

    33
  • AMKoin

    513 [Подарить AMKoin]

Весь контент пользователя Dennis_Chikin

  1. В чистом ТЧ - скорее никак, чем как-то. Происходит замена тушки живого непися на тушку дохлого.
  2. Мне последнее время вообще ничего не нравится. И, да, то, что ничего не читают, не собираются, и этим гордятся - факт.

    1. Dennis_Chikin

      Dennis_Chikin

      Вот Вам, кстати, свежий пример в soc-ковырялке. Именно что читать не будут, ибо автор текста с ответом на вопрос бездуховен и постил текст с неподобающим выражением морды лица.

  3. В игре огнемет собран нетрезвым Шурупом из палок, веревок, манометра и горелки. Для внесения каких-либо изменений в данную конструкцию нужно принять внутрь сами-знаете-чего как минимум столько-же, сколько обычно принимает сам Шуруп. А это, на минуточку, для нормального человека - 3 гарантированно смертельных дозы.
  4. Это в следующей части. Там будут не просто грабли, там - целый склад сельхозинвентаря разнообразного. А вот в том куске, что разобрал - либо if name == "none" then return disagreed, либо elseif name == self:name() then return agreed_exclusive Что найдем в цикле первым. Как бы по-хорошему - none надо хранить и проверять отдельно, а уж если не выполнилось, то уже потом выбирать условия по local t = obj.smart_terrain_conditions[self:name()] if t and xr_logic.pick_section_from_condlist( db.actor_proxy, obj, t ) then return agreed_exclusive end return disagreed ну или типа того. Хотя на самом деле вообще не так, ибо дальше опять же сельхозсклад.
  5. Продолжаем разговор: почему неписи/монстры не идут под смарт? function se_smart_terrain:enabled( obj ) if self.disabled then return false end self:register_if_needed() self:initialize_if_needed() if self:is_gulag_available() and not self.population_locked then local b = self:obj_accepts_smart_terrain( obj ) local a = self:smart_terrain_accepts_obj( obj, b ) return a else return false end end Собственно, здесь у нас на входе непись или монстр, которые перебираются в апдейте с частотой из, вроде как, alife.ltx (но проверять - лень), для которых в свою очередь перебираются все существующие в игре смарты. Ну и есть принудительный апдейт непися "вот прям счаз" - см. se_respawn.script Если у нас есть флажок disabled - смарт отключен совсем. Изначально применялся с отладочной целью, но если руки шаловливые нигде не покопались - и так нормально работает. Сохранять его, или нет - дело, опять же - хозяйское. Далее попытки включить смарт и прочитать для него откуда-нибудь все нужные данные, если это не сделано раньше (ну вот такая вот конструкция, задом наперед), и проверка if self:is_gulag_available() ... function se_smart_terrain:is_gulag_available() if self.gparams.cond then local bb = xr_logic.pick_section_from_condlist( db.actor_proxy, self, self.gparams.cond ) ~= nil return bb else return true end end "Гулаг" - это такая запчасть от некогда задуманных но недопиленных "умных зон", которые вроде как должны были когда-то управлять табунами неписей в онлайне, и перекочевали сюда по принципу "для симулятора вертолета мы будем использовать симуляторы кенгуру, в которых использован симулятор борьбы с моджахедами на базе симулятора ПВО..." Короче, "объектно-ориентированное погромирование" как оно есть. gparams.cond - это табличка, которая заполняется при инициализации смарта из custom data вида [smart_terrain] type = esc_boars_flesh cond = {+esc_boar_dogs_restrictor} capacity = 4 preset = l01_escape squad = 1 groups = 1 stay = long в данном случае - в смарт кого-либо пустят только тогда, когда выполнено условие {+esc_boar_dogs_restrictor} Если условие не задано - в смарт желающих таки берут, но при условии, что пройдены остальные проверки. self.population_locked - очередной способ в смарт никого не пускать, но при этом из него никого и не выпускать. Далее, проверка - может ли этот непись или монстр вообще находиться в этом смарте: function se_smart_terrain:obj_accepts_smart_terrain( obj ) if obj.smart_terrain_conditions then local any_exclusive = false local s for name, condlist in pairs(obj.smart_terrain_conditions) do s = xr_logic.pick_section_from_condlist( db.actor_proxy, obj, condlist ) if s ~= nil then if name == "none" then return disagreed elseif name == self:name() then return agreed_exclusive end else if name == self:name() then return disagreed end end end end return agreed end Здесь, избавившись от изрядного количества мусора, мы видим весьма странную конструкцию с перебором в цикле таблички условий, которая была создана на основе custom data непися при его создании или загрузке игры. Если ее нет, то непись "на все согласный", если есть - сравниваем имя смарта, возвращенное по результатам проверки условий, со своим. То есть, если взять пример из предшествующего текста, с [smart_terrains] none = {-agroprom_military_case_have} mil_lager = {+agroprom_military_case_have} - непись пойдет в этот смарт, если выполнено условие {+agroprom_military_case_have} и смарт называется mil_lager, ИЛИ не пойдет в него, если если выполнено условие {-agroprom_military_case_have} ИМЕННО ТАК: может пойти, а может не пойти. В зависимости от расположения меркурия в созвездии скорпиона. Чтобы узнать точное расположение меркурия - надо еще проверить в вашем конкретном моде способ вычисления орбиты этого самого меркурия или где-то что-то поменять. Но вроде как-то срабатывает. Иногда. Примерно как в случае с указанием в логике непися on_info =, on_info2 =, on_timer = с одинаковыми секциями, но это уже другая тема. Хорошая новость состоит в том, что хэш от none вроде как меньше, чем от обычно используемых имен смартов, и это условие скорее всего будет все-же проверено первым. Плохая - "но это ... не точно?" (C) В общем, когда пишем условия - ДУМАЕМ, что из этого вообще может получиться или не получиться во всех возможных вариантах. На этом Шахерезада прекращает дозволенные речи, пока редактор окончательно не пришел в состояние полного изумления.
  6. Бармен сейчас в работе, огнемет - ну а в куда его разряжать? Надо будет просто заблокировать, и у него, и у гравипушки. Записка - да, одна в вагончике, вторая - в кузове грузовика. Вообще, надо будет с ними что-нибудь сделать, ибо не место им там. Толика - вот даже не знаю - править, или оставить возможность троллить...
  7. Dennis_Chikin

    У Костра XVII

    Ну так у нас же здесь сталкеровский форум. Задания брать - бери, выполнять - выполняй, но за репутацией - следи.
  8. .parent_id 0 - актор, 65535 - земля. Как только что писал - "все равно никто не читает".
  9. https://drive.google.com/open?id=11vKOz4moZon8VTJ1p_elTs0SCTDfLkdp Закинуть в gamedata\scripts, потом вернуть старый. Гранатами его можно убить, да.
  10. function rostok_chase3() if not rostok_strn3 then rostok_strn3 = alife():object( "bar_freedom_chasers_attack" ) end local g = rostok_strn3 and rostok_strn3.gulag if g and g.population_comed >= 1 then return false elseif actor:dont_has_info( "bar_ambush_dead" ) then actor:give_info_portion( "bar_ambush_dead" ) end return true end Впрочем, и этот пост, как и соседнюю тему, все равно никто читать не будет. Не для этого на сей форум заходят, чтобы что-то там читать.
  11. Dennis_Chikin

    У Костра XVII

    Ну так-то можно вообще баню без стен делать. Устанавливаем тепловые пушки в достаточном количестве, подводим к ним ЛЭП - профит!
  12. Кстати, с этим редактором надо что-то делать. Еле впихал текст абы как, и что-то в нем трогать теперь банально боюсь. Если так будет продолжаться - придется переползать куда-нибудь в гуглодиск, а сюда кидать исключительно ссылки.
  13. Продолжаем разговор: неписи и смарты Как неписи (или монстры) захватываются под смарт, и почему они НЕ хахватываются. Разбор будет в несколько непривычной форме, поскольку тот случай, когда имеет место быть изрядное "спагетти". Итак, первым делом, когда непись создается, или загужается, он попадает в епархию se_stalker.script (для монстров - se_monster.script) Собственно, вот оно, начало спагетти: 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 Здесь читается custom data, и наше спагетти ведет нас в недра собственно smart_terrain.script Но прежде коснемся тоже наболевшего вопроса о том, почему "не работает" так называемая "сякологика", она же - "amk-логика". На самом деле - вполне себе работает, но дело в том, в обоих случаях возможность записать свою custom data появялется уже ПОСЛЕ того, как она была прочитана, и в соответствии с ней что-то поделали в нижерассматриваемом. Второе - custom data может содержать в себе отсылку на файл с загружаемой логикой, но не наоборот. Чтобы из файла, на который ссылаемся в [logic] cfg = блабла.ltx читалось что-то еще - надо код дорабатывать. А чтобы custom data, которую мы сами прописываем в создаваемый объект была прочитана до s/l - надо переносить или дублировать ее чтение из on_before_register() в более другое место. Есть еще вариант, про который говорилось в статье про конфиги неписей: spawn_sections.ltx и его аналоги, где можно явно задать все то, что должно быть в custom data, например: [nosmart_monolith_1]:stalker character_profile = sim_monolith_regular spec_rank = experienced community = monolith custom_data = scripts\nosmart.ltx Недостаток такого решения - очень-очень-очень много конфигов на каждый чих - тоже плохо. В общем, тут, как говорится, каждый - сам себе злобный буратино, и может выбрать тот вариант, какой ему больше всего не надо, а мы едем дальше. Собственно, smart_terrain.script: local smart_section = "smart_terrains" ... function read_smart_terrain_conditions( self ) if self.ini and self.ini:section_exist( smart_section ) then local conds = {} local accepts = false local result, field, str local n = self.ini:line_count( smart_section ) if n > 0 then for i = 0, n-1 do result, field, str = self.ini:r_line( smart_section, i, "", "" ) conds[field] = xr_logic.parse_condlist(self, smart_section, field, str) end return conds end end return nil end self.ini - это у нас прочитанная ранее custom data, в которой мы ищем что-нибудь типа [smart_terrains] none = {-agroprom_military_case_have} mil_lager = {+agroprom_military_case_have} Это я взял первое, что под руку попалось. none - не пускать ни под какие смарты mil_lager - какой-то смарт, когда выполнилось условие для него и при этом не действует условие для none = xr_logic.parse_condlist() собственно и разбирает эти строчки в табличку, которая будет возвращена взад. Ну финал данных скачек тудыть-сюдыть обратно - for name, condlist in pairs(self.smart_terrain_conditions) do smart_terrain.exclusives[name] = (smart_terrain.exclusives[name] or 0) + 1 end - заполнение таблички по смартам общим количеством неписей, у которых этот смарт так или иначе упоминается. В чем смысл сего действа? В том, что в какой-то момент, когда неписю будет позволено/предписано отправиться в тот или иной смарт - там было место, незанятое всякими прочими, которых иначе пришлось бы куда-то девать. Кстати, неявный момент: емкость смарта, с учетом таких вот "подготовительных мероприятий" вполне может стать отрицательной - НЕ ИСПРАВЛЯЙТЕ ЭТО В СКРИПТАХ. Лучше, следите, чтобы недопускать ТАКОГО количества "избранных". Продолжение следует.
  14. Dennis_Chikin

    У Костра XVII

    Холода, однако, начались... У мну уже -21, а голова по-прежнему трещит. А в баньке тепло... И, да, спор Петровича с остальными специалистами по банестроению уже можно рассудить явно не в пользу Петровича: камушки и дымок - оно, конечно, хорошо, но когда на улице мороз - все тепло высвистает мгновенно. Не, не для наших краев.
  15. Стандартный снайперский, бронебойный снайперский (да, и бьет сильнее, и через некоторые преграды лучше достает), и дешевый, который бьет чуть сильнее снайперского, но больший разброс и портит ствол быстрее. Аналогично с ПАБ-9 - бьет сильнее, чем СП-5, но больше разброс и быстрее портит ствол.
  16. Oversized netpacket before write! [8202 > 8192] ... s\op-2.1\gamedata\scripts\binders\binder_safe.script:61 ... Предупреждали же: не пихайте все в один рюкзак. Лучше положить 10 рядом, и заполнять так, чтобы список влезал на одну страницу.
  17. Dennis_Chikin

    У Костра XVII

    Хе-хе... Вы его призывали, и он призвался. Щас что-то будет... А ведь сказано было: "Не поминай всуе!"
  18. Судя по тому, что ссылки на этот мальварь вообще существуют - на свободе много кто, кому бы ну вот совсем не надо.
  19. {условие} вероятность создания при каждом апдейте, вероятность при невыполнении условия. Я вроде эту часть тоже разбирал подробно.
  20. Dennis_Chikin

    У Костра XVII

    Гм, боюсь, истории из текущей реальности таки будут сочтены за политику. Что же касается свинцовых мерзостей из прошлого, так более чем достаточно уже того факта, что даже айфонов не было.
  21. Dennis_Chikin

    У Костра XVII

    Думаю, ближе к вечеру стоит скайп запустить. А то у меня с праздников еще кое-какие остатки остались. (Хм, посмотрел - и сейчас запущен. Но все равно лучше вечером.) В целом же - да, вот та самая иллюстрация к производственным отношениям. Желания, как мы видим, разные бывают, но конечный результат вовсе не обязательно соответствует. Впрочем, лично я для себя границу допустимого в другом месте провел, и просто даю три попытки, а по исчерпанию - ограничиваю контакт с неаппетитными субстанциями на столько, на сколько в моих силах.
  22. Dennis_Chikin

    У Костра XVII

    Всегда 12!(С) Но это... не точно?
  23. Dennis_Chikin

    У Костра XVII

    Вот как раз если отставить в сторону политику, и заниматься собственно историей, "всех нас" не получается. Ну и, хе-хе, производственные отношения - опять же предмет объективный, а не субъективный, в противном случае что Смит, что Кейнс с полным на то основанием именовались Великими Магами, благо - толк в заклинаниях знали. Касательно же "всех нас" - тут совершенно другой вопрос: о подверженности этих самых нас воздействию религии. На уровне самых что ни есть дикарей примитивных.
  24. Dennis_Chikin

    У Костра XVII

    Тетя? 8-O
  25. Все, осознал. Больше никаких правок делать не буду. Простите, дяденьки-тетеньки, кого этим раньше оскорбил-унизил.

×
×
  • Создать...