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

Прозекторская

Рекомендуемые сообщения

"Вскрытие показало, что больной умер от вскрытия."

Тема для "крупной формы", то есть, на уровне скриптов целиком или больших частей оных скриптов. "Что у него внутри, зачем оно там, и что с этим можно сделать ?"

Изменено пользователем Dennis_Chikin
Ссылка на комментарий

Вчера, 3-й раз за последние 8 лет добрался до припяти. Зачистил от всего, что шевелится, зачистил скриптами смарты с респавнерами. При зачисте сделал вывод расположения и част свойств.

Удивился... В общем, там 99% - останки от 3-х или 4-х разных сцен, которые ни кто никогда не увидит (поскольку по этим останкам замысел восстановить нвозможно).

В общем, смысл сводится к тому, что перед игроком должен быть выбор: пройти по некоему "короткому" пути, проявив сообразительность, ломиться тупо силой, или проявить Высокие Моральные Качества и в очередной раз Всех Спасти (и выжившие позавидуют мертвым).

 

В общем, господа, на самом деле я люблю хоррор и нойр, и Равенлофт - один из моих любимейших сеттингов. Возможно, когда-нибудь, на пенсии, я впишу Зону как один из равенлофтовских домейнов (право, если паропанк там вполне есть, почему бы не быть постапу, и в общем-то Зона как результат и предмет деятельности DarkPowers - вполне вписывается). Но, простите, когда я хочу играть в Равенлофт - я играю в Равенлофт.

 

Да... дело осложняется тем, что где-то с радара началось "деньги кончились, и дидлайн уже 3 года как прошел", так что игрока просто ГОНЯТ железным сапогом к финалу, не давая ни секунды на то, чтобы рассмотреть недоделки.

Так что, не "мистика", а именно куча запчастей от неизвестно чего.

И последующие "модостроители", уверенные, что именно так и должно быть, и неостановимый ежемиллисекундный респавн чего угодно куда попало - есть суть Вершина Искусства и Смысл Жизни.

 

Короче, диагноз: проще закрасить, чем отскребать.


 

Да, но вообще не про это хотел написать.

Забавно... 8 лет назад несколько человек начали эпопею с кострами. В смысле - попытки скриптово исправить Священные и Неприкосновенные конфиги и кривые путии. Методом кучи странных вычислений, от сложности которых НАСА повесится. Им бы те ресурсы, и тот энтузиазм - на марс бы давно школота на подаренных родителям мопедах летала, покурить на перемене, чтоб учителя не заловили.

 

И, я пришел к тому, что вообще-то рассадка неписей вокруг костров должна делаться... Внезапно, путями. Единственно что, при этом из скрипта снести ВСЕ проверки и вычисления, как ненужные.

И, казалось бы, все просто: пропиши в путь свободные точки (СВОБОДНЫЕ, я сказал !), пропиши точки работ так, чтоб были не далее 50 метров одна от другой, и чтобы все были в месте, свободном от аномалий. И наслаждайся результатом.

 

Но... Пути, где точек для сидения - НОЛЬ. А у костра пытаются рассадить 20 - нет, 20 - мало, давайте 50 неписей. Причем, чтобы все сидели в разных вертексах, но чтоб не далее чем в 0.3 метра от центра.

Вертексы, где соседний по номеру оказывается на другом конце локации, причем не по тому, что другая "строка", а "вот чтобы вот !". Вертексы, наложенные один поверх другого... Опять же пути, находящиеся целиком внутри рестриктора, в котором неписям быть запрещено. Пути, накрытые аномалиями... Несколько путей с одними и теми же точками...

 

В общем, сотворил систему поиска ХОТЬ КАКОЙ НИБУДЬ точки, при этом таки избавившись от непонятно зачем нужной тригонометрии, и она даже считает не по 15 минут на непися. Еще денек погоняю - выложу, если нормально пойдет. Разумеется, вся логика с 8 неписями чтоб в разных точках, но чтоб не далее 0.3 метра от центра - отправлена в игнор.

 

А потом надо будет избавить сталкеров от лютого,бешеного, сотни и тысячи раз в секунду, поиска по всем карманам водки, колбасы, гитары и гармошки...

 

P.S. https://dl.dropboxusercontent.com/u/27871782/ss_dc_02-23-17_22-30-20_(marsh).jpg- так, например, должны сидеть сталкеры согласно прописанному им в логике. (Костер, как Руль Малдера, где-то рядом.) Это еще не самый кошмарный случай.

Изменено пользователем Dennis_Chikin
Ссылка на комментарий

Избавление от лютого и бешеного поиска по карманам особого смысла не имеет. Я вчера замерял - это примерно 20 микросекунд на одного сталкера. Не стоит эта овчинка выделки. Если только из любви к искусству. И кстати, то, что ты вот тут понаписал, тоже особого смысла не имеет. Рассадить сталкеров вокруг костра - это не рокет сайнс. Все там нормально рассаживается и все там нормально сидят, если голову приложить.

Ссылка на комментарий

 

 

Все там нормально рассаживается и все там нормально сидят

Ну не скажи. Вот я заселял новую локу, "ОП-2" + "dsh-mod"(старой версии), кампы под управлением "general_lager", ну вот ещё куда ни шло: 19247e86a034e7cf79a84c7f390f3c3c5f998227

А вот под точно такой же логикой: 50577cf30f8111f9b232b8cc15fef13b5f998227d0fefb1d760b6443463bba28fbfd941e5f998227adca20bae8099d29b92091f2e0f9b71f5f998227

Встанут в одну точку, и тупят. Грешил на аи сетку - смотрел, в норме всё. Причём бывает сделаешь десяток раз "сейв-лоад" - бывает и рассядутся, но 1 раз из 10....

 

Мать: ASRock X470 Master SLI. Процессор: AMD Ryzen 9 3900X 12-Core(4200 MHz).
Память: Patriot Memory 3200 C16 Series. DDR4-3200(1600МГц), 16Гбх2(32Гб).
Видео: GeForce GTX 1060 6GB. Блок питания: CoolerMaster 750 Вт. Корпус: Zalman i3 Edge.

Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор

Ссылка на комментарий

@Romann, я же не зря написал про голову. Приложить голову - это означает переделать xr_kamp. Но для нормальной рассадки пути не обязательны. Собственно говоря, пути - это всего-лишь еще один способ расчета вертексов, куда посадить сталкеров. Можно для каждого костра сделать конфиг и там, через запятую написать вертексы. Это будет тоже самое. А можно просто рассчитать. И это даст такой же результат, но будет гибче. В том, что у тебя, оригинальный расчет, который так себе. Вот тут переделанный расчет: https://github.com/dsh2dsh/op2ogse/blob/master/gamedata/scripts/xr_kamp.script

  • Нравится 1
Ссылка на комментарий

8 человек, и все на расстоянии 0.3 метра от центра ? Не верю !

Ссылка на комментарий

@Dennis_Chikin, правильно не веришь. 0.3 от центра - это все тот же вертекс, т.ч. туда ни одного не посадить. Тем более, что в случае костра он накрыт аномалией костра, в которую сталкерам низя. Да и про 0.3 - это ты написал. Я на числах не зациклен и мне нужно, что бы сталкеры сидели около костра равномерно, не слишком близко и не слишком далеко. А будет это от центра 1.5, 2 или 2.5 - не имеет значения.

Ссылка на комментарий

 

 

Зачистил от всего, что шевелится, зачистил скриптами смарты с респавнерами. При зачисте сделал вывод расположения и част свойств. Удивился... В общем, там 99% - останки от 3-х или 4-х разных сцен, которые ни кто никогда не увидит

А можно узнать, что там можно безболезненно вырезать из all.spawn/гулагов для Припяти?

Заранее спасибо.


Подарки

  • Ссылка на комментарий

    @Капрал Хикс, ну вот глянь, что у меня там изменено: https://github.com/dsh2dsh/op2ogse/blob/master/gamedata/config/dsh/l11_pripyat.ltx

    По названиям думаю разберешься и cond-ишены поймешь. Сразу другое дело, а не бессмысленно и беспощадно.

    Ссылка на комментарий

     

     

    По названиям думаю разберешься и cond-ишены поймешь.

    Увы, глянул - у тебя слишком под себя всё сделано. Ну или мне опыта не хватает понять.


    Подарки

  • Ссылка на комментарий

    @Капрал Хикс, там просто переопределяются "cond" смартов из all.spawn. Ты можешь сделать это в all.spawn и получится тоже самое. Смысл большинство переопределений в том, что бы в определенные моменты выключать/включать определенные смарты, что бы одновременно на локации находилось меньше народа. Когда они все там - начинается лагодром. А некоторые смарты, большинство wave к примеру, вообще выключаются после первого прохода по локации, т.к. далее они бессмысленны. Ну какой смысл во всей этой толпе, которая бесконечно сидит на крышах и стреляет. Другие смарты с помощью проверок в cond включаются попеременно. Т.е. если на входе у нас имеются сталкеры, значит за углом не будет монолитовцев и наоборот и т.д. Ну и отдельно у меня рейды выключены для этих смартов, когда те же сталкеры в начале локации ломятся вперед, снова и снова. Ну не в петле времени же они живут. Да и нехорошо это. Я иду за ними и подбираю лут. Двойная выгода, и лут наберу на продажу и врагов они всех выкосят. Нехорошо.

    Изменено пользователем dsh
    Ссылка на комментарий

    +1 к вопросу по смартам, а по кострам - ну вот пожалуйста, еще:

    https://dl.dropboxusercontent.com/u/27871782/l02_garbage.jpg- и какой такой высшей математикой вот это вот можно исключить, если в пути патрульного вертекс у костра задан явно, а сам путь кампа его в исключениях не имеет ?

    Ссылка на комментарий

    @Dennis_Chikin, ты какими-то загадками говоришь или с кем-то другим. У меня тоже есть такая картинка: https://yadi.sk/i/bGpoGx2u3Ehscv

    И что в ней такого?

    Ссылка на комментарий

    На этой - ничего. А на моей, вроде, вполне хорошо видно, как патрулируюший непись сдвигает с места сидящего. И "эта музыка будет вечной".

     

    Точнее, уже не будет, поскольку для непися, сдвинутого с места н раз я добавил перевыбор точки, но вот честно - придумывать ОЧЕРЕДНУЮ затычку для очередного идиотизма - уже подутомило.

     

    P.S. Вообще, когда я думаю о людях, правящих ослпавн, вот вообще уже независимо от конкретных модов, рисуется образ, как сидит вот такой вот перед компьютером, и бормочет: "И все равно они у вас все Сдохнут, Сдохнут, Сдохнут !!! И будут Вылетать, Вылетать, Вылетать !!! И НИЧЕГО вы с этим сделать не сможете !!!"

     

    Впрочем, от одного аффтыря я именно это прямым текстом как-то и уcлышал: "Да, будет именно так, да ПУСТЬ ВЫЛЕТАЕТ !"

    Изменено пользователем Dennis_Chikin
    • Полезно 1
    Ссылка на комментарий

     

     

    как патрулируюший непись сдвигает с места сидящего.

    А ещё бывает так: за костром, допустим, сидят трое, двое уселись, а третий подxодя на своё место сдвигает одного и усаживается, этот "сдвинутый" встаёт и идёт на свою точку -> и сдвигает того кто его сдвинул и усаживается - и это всё продолжается до бесконечности, двое двигают друг друга...

    • Согласен 1
     

    Мать: ASRock X470 Master SLI. Процессор: AMD Ryzen 9 3900X 12-Core(4200 MHz).
    Память: Patriot Memory 3200 C16 Series. DDR4-3200(1600МГц), 16Гбх2(32Гб).
    Видео: GeForce GTX 1060 6GB. Блок питания: CoolerMaster 750 Вт. Корпус: Zalman i3 Edge.

    Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор

    Ссылка на комментарий

    Маленькая иллюстрация к вопросу о кострах:

     

    info~ [xr_kamp] ckampmanager(mil_freedom_camp_center1):selectposition, point: 251205, vised: 0, used_points: nil, accessible: false

    ~info~ [xr_kamp] ckampmanager(mil_freedom_camp_center1):selectposition, point: 250596, vised: 34056, used_points: 34056, accessible: true

    ~info~ [xr_kamp] ckampmanager(mil_freedom_camp_center1):selectposition, point: 251209, vised: 0, used_points: nil, accessible: false

    ~info~ [xr_kamp] ckampmanager(mil_freedom_camp_center1):selectposition, point: 252435, vised: 0, used_points: nil, accessible: false

    ~info~ [xr_kamp] ckampmanager(mil_freedom_camp_center1):selectposition, point: 252441, vised: 33562, used_points: 33562, accessible: true

    ~info~ [xr_kamp] ckampmanager(mil_freedom_camp_center1):selectposition, point: 253638, vised: 0, used_points: nil, accessible: false

    ~info~ [xr_kamp] ckampmanager(mil_freedom_camp_center1):selectposition, point: 254232, vised: 33588, used_points: 33588, accessible: true

    ~info~ [xr_kamp] ckampmanager(mil_freedom_camp_center1):selectposition, point: 253642, vised: 0, used_points: nil, accessible: false

     

    код проверки:

    if vused[v] == 0 and not used_points[v] and npc:accessible( v ) then
    	n = n + 1; t[n] = v
    end
    Ссылка на комментарий

    Маленькая иллюстрация к вопросу о кострах:

    Иии? Какой-то доброжелатель накрыл костер рестриктором радиусом 2м - в результате доступно всего 3 места. Что такого интересного? :)

    Подарки

  • Ссылка на комментарий

    Кстати, с этим редактором надо что-то делать. Еле впихал текст абы как, и что-то в нем трогать теперь банально боюсь. Если так будет продолжаться - придется переползать куда-нибудь в гуглодиск, а сюда кидать исключительно ссылки.

    Изменено пользователем Dennis_Chikin
    • Согласен 1
    Ссылка на комментарий

    Продолжаем разговор: почему неписи/монстры не идут под смарт?

    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)

    В общем, когда пишем условия - ДУМАЕМ, что из этого вообще может получиться или не получиться во всех возможных вариантах.

     

    На этом Шахерезада прекращает дозволенные речи, пока редактор окончательно не пришел в состояние полного изумления.

    • Полезно 3
    Ссылка на комментарий

    Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

    Комментарии могут оставлять только зарегистрированные пользователи

    Создать аккаунт

    Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

    Зарегистрировать новый аккаунт

    Войти

    Есть аккаунт? Войти.

    Войти
    • Недавно просматривали   0 пользователей

      Ни один зарегистрированный пользователь не просматривает эту страницу.

    AMK-Team.ru

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