Dennis_Chikin 3 658 Опубликовано 30 Января 2015 Автор Поделиться Опубликовано 30 Января 2015 (изменено) "Вскрытие показало, что больной умер от вскрытия."Тема для "крупной формы", то есть, на уровне скриптов целиком или больших частей оных скриптов. "Что у него внутри, зачем оно там, и что с этим можно сделать ?" Изменено 30 Января 2015 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 26 Февраля 2017 Автор Поделиться Опубликовано 26 Февраля 2017 (изменено) Вчера, 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- так, например, должны сидеть сталкеры согласно прописанному им в логике. (Костер, как Руль Малдера, где-то рядом.) Это еще не самый кошмарный случай. Изменено 26 Февраля 2017 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
dsh 3 824 Опубликовано 26 Февраля 2017 Поделиться Опубликовано 26 Февраля 2017 Избавление от лютого и бешеного поиска по карманам особого смысла не имеет. Я вчера замерял - это примерно 20 микросекунд на одного сталкера. Не стоит эта овчинка выделки. Если только из любви к искусству. И кстати, то, что ты вот тут понаписал, тоже особого смысла не имеет. Рассадить сталкеров вокруг костра - это не рокет сайнс. Все там нормально рассаживается и все там нормально сидят, если голову приложить. dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Romann 619 Опубликовано 26 Февраля 2017 Поделиться Опубликовано 26 Февраля 2017 Все там нормально рассаживается и все там нормально сидят Ну не скажи. Вот я заселял новую локу, "ОП-2" + "dsh-mod"(старой версии), кампы под управлением "general_lager", ну вот ещё куда ни шло: А вот под точно такой же логикой: Встанут в одну точку, и тупят. Грешил на аи сетку - смотрел, в норме всё. Причём бывает сделаешь десяток раз "сейв-лоад" - бывает и рассядутся, но 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. Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор Ссылка на комментарий
dsh 3 824 Опубликовано 26 Февраля 2017 Поделиться Опубликовано 26 Февраля 2017 @Romann, я же не зря написал про голову. Приложить голову - это означает переделать xr_kamp. Но для нормальной рассадки пути не обязательны. Собственно говоря, пути - это всего-лишь еще один способ расчета вертексов, куда посадить сталкеров. Можно для каждого костра сделать конфиг и там, через запятую написать вертексы. Это будет тоже самое. А можно просто рассчитать. И это даст такой же результат, но будет гибче. В том, что у тебя, оригинальный расчет, который так себе. Вот тут переделанный расчет: https://github.com/dsh2dsh/op2ogse/blob/master/gamedata/scripts/xr_kamp.script 1 dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 26 Февраля 2017 Автор Поделиться Опубликовано 26 Февраля 2017 8 человек, и все на расстоянии 0.3 метра от центра ? Не верю ! Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
dsh 3 824 Опубликовано 26 Февраля 2017 Поделиться Опубликовано 26 Февраля 2017 @Dennis_Chikin, правильно не веришь. 0.3 от центра - это все тот же вертекс, т.ч. туда ни одного не посадить. Тем более, что в случае костра он накрыт аномалией костра, в которую сталкерам низя. Да и про 0.3 - это ты написал. Я на числах не зациклен и мне нужно, что бы сталкеры сидели около костра равномерно, не слишком близко и не слишком далеко. А будет это от центра 1.5, 2 или 2.5 - не имеет значения. dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Капрал Хикс 522 Опубликовано 26 Февраля 2017 Поделиться Опубликовано 26 Февраля 2017 Зачистил от всего, что шевелится, зачистил скриптами смарты с респавнерами. При зачисте сделал вывод расположения и част свойств. Удивился... В общем, там 99% - останки от 3-х или 4-х разных сцен, которые ни кто никогда не увидит А можно узнать, что там можно безболезненно вырезать из all.spawn/гулагов для Припяти? Заранее спасибо. Ссылка на комментарий
dsh 3 824 Опубликовано 26 Февраля 2017 Поделиться Опубликовано 26 Февраля 2017 @Капрал Хикс, ну вот глянь, что у меня там изменено: https://github.com/dsh2dsh/op2ogse/blob/master/gamedata/config/dsh/l11_pripyat.ltx По названиям думаю разберешься и cond-ишены поймешь. Сразу другое дело, а не бессмысленно и беспощадно. dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Капрал Хикс 522 Опубликовано 26 Февраля 2017 Поделиться Опубликовано 26 Февраля 2017 По названиям думаю разберешься и cond-ишены поймешь. Увы, глянул - у тебя слишком под себя всё сделано. Ну или мне опыта не хватает понять. Ссылка на комментарий
dsh 3 824 Опубликовано 26 Февраля 2017 Поделиться Опубликовано 26 Февраля 2017 (изменено) @Капрал Хикс, там просто переопределяются "cond" смартов из all.spawn. Ты можешь сделать это в all.spawn и получится тоже самое. Смысл большинство переопределений в том, что бы в определенные моменты выключать/включать определенные смарты, что бы одновременно на локации находилось меньше народа. Когда они все там - начинается лагодром. А некоторые смарты, большинство wave к примеру, вообще выключаются после первого прохода по локации, т.к. далее они бессмысленны. Ну какой смысл во всей этой толпе, которая бесконечно сидит на крышах и стреляет. Другие смарты с помощью проверок в cond включаются попеременно. Т.е. если на входе у нас имеются сталкеры, значит за углом не будет монолитовцев и наоборот и т.д. Ну и отдельно у меня рейды выключены для этих смартов, когда те же сталкеры в начале локации ломятся вперед, снова и снова. Ну не в петле времени же они живут. Да и нехорошо это. Я иду за ними и подбираю лут. Двойная выгода, и лут наберу на продажу и врагов они всех выкосят. Нехорошо. Изменено 26 Февраля 2017 пользователем dsh dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 27 Февраля 2017 Автор Поделиться Опубликовано 27 Февраля 2017 +1 к вопросу по смартам, а по кострам - ну вот пожалуйста, еще: https://dl.dropboxusercontent.com/u/27871782/l02_garbage.jpg- и какой такой высшей математикой вот это вот можно исключить, если в пути патрульного вертекс у костра задан явно, а сам путь кампа его в исключениях не имеет ? Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
dsh 3 824 Опубликовано 27 Февраля 2017 Поделиться Опубликовано 27 Февраля 2017 @Dennis_Chikin, ты какими-то загадками говоришь или с кем-то другим. У меня тоже есть такая картинка: https://yadi.sk/i/bGpoGx2u3Ehscv И что в ней такого? dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 27 Февраля 2017 Автор Поделиться Опубликовано 27 Февраля 2017 (изменено) На этой - ничего. А на моей, вроде, вполне хорошо видно, как патрулируюший непись сдвигает с места сидящего. И "эта музыка будет вечной". Точнее, уже не будет, поскольку для непися, сдвинутого с места н раз я добавил перевыбор точки, но вот честно - придумывать ОЧЕРЕДНУЮ затычку для очередного идиотизма - уже подутомило. P.S. Вообще, когда я думаю о людях, правящих ослпавн, вот вообще уже независимо от конкретных модов, рисуется образ, как сидит вот такой вот перед компьютером, и бормочет: "И все равно они у вас все Сдохнут, Сдохнут, Сдохнут !!! И будут Вылетать, Вылетать, Вылетать !!! И НИЧЕГО вы с этим сделать не сможете !!!" Впрочем, от одного аффтыря я именно это прямым текстом как-то и уcлышал: "Да, будет именно так, да ПУСТЬ ВЫЛЕТАЕТ !" Изменено 27 Февраля 2017 пользователем Dennis_Chikin 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Romann 619 Опубликовано 27 Февраля 2017 Поделиться Опубликовано 27 Февраля 2017 как патрулируюший непись сдвигает с места сидящего. А ещё бывает так: за костром, допустим, сидят трое, двое уселись, а третий под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. Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 2 Марта 2017 Автор Поделиться Опубликовано 2 Марта 2017 Маленькая иллюстрация к вопросу о кострах: 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 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
abramcumner 1 146 Опубликовано 2 Марта 2017 Поделиться Опубликовано 2 Марта 2017 Маленькая иллюстрация к вопросу о кострах:Иии? Какой-то доброжелатель накрыл костер рестриктором радиусом 2м - в результате доступно всего 3 места. Что такого интересного? Ссылка на комментарий
Это популярное сообщение. Dennis_Chikin 3 658 Опубликовано 21 Января 2019 Автор Это популярное сообщение. Поделиться Опубликовано 21 Января 2019 (изменено) Поскольку не знаю, куда положить, положу пока сюда, и дальше, когда понадобится сослаться на этот текст, буду ссылаться тоже сюда. спавн и респавн, секции и профили, обратная реконструкция Вопрос: как узнать, что за непись, и где они создаются в каком количестве? Например, нас интересует agr_stalker_regular Ищем по файлам. Находим (я в этом примере использую то, что у меня сейчас под рукой, в разных модах может быть разное): gamedata\config\creatures\spawn_sections.ltx [agr_stalker_regular]:stalker $spawn = "respawn\agr_stalker_regular" character_profile = agr_stalker_general spec_rank = regular community = stalker Все, что не задано, наследует от [stalker] из, скорее всего, если в этом конкретном моде не поменяли, gamedata\config\creatures\m_stalker.ltx, ранг - regular, группа - нейтралы. Теперь ищем agr_stalker_general. нашли в gamedata\config\gameplay\npc_profile.xml <character id="agr_stalker_general"> <class>agr_Stalker_general</class> </character> то есть, при создании через alife():create( "agr_stalker_regular", pos, lvid, gvid ) у нас появится любой непись, подходящий под класс agr_stalker_general. Ищем agr_Stalker_general, и находим в gamedata\config\gameplay\character_desc_agroprom.xml: <specific_character id="agr_stalker_general_default1" team_default = "1"> <name>GENERATE_NAME_stalker</name> <icon>ui_npc_u_stalker_2_mask</icon> <map_icon x="1" y="0"></map_icon> <bio>sim_stalker_general_bio</bio> <class>agr_Stalker_general</class> <community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect> <rank>423</rank> <reputation>27</reputation> <money min="600" max="2000" infinitive="0"></money> <visual>actors\neytral\stalker_2_mask</visual> <crouch_type>-1</crouch_type> <snd_config>characters_voice\human_01\stalker\</snd_config> <supplies> [spawn]\n wpn_ak74u\n #include "gameplay\character_drugs.xml" #include "gameplay\character_food.xml" #include "gameplay\character_items.xml" </supplies> <actor_dialog>stalk_garb_treasure_1_dialog</actor_dialog> #include "gameplay\character_criticals_4.xml" #include "gameplay\character_dialogs.xml" </specific_character> сей сталкер имеет визуал actors\neytral\stalker_2_mask, вооружен ксюхой, ну и т.д. Кроме него находим та же еще 5 вариантов с <class>agr_Stalker_general</class>, отличающихся в основном внешним видом, вооружением и озвучкой. Теперь ищем этих agr_stalker_regular по файлам из распакованного all.spawn, и находим файл alife_marsh.ltx Ну, это он у меня один такой. В другом моде могу быть другие. Смотрим в нем: Упоминание встречается один раз: section_name = respawn name = marsh_hunters_respawn position = -21.1955337524414, 0.904048323631287, 293.252777099609 direction = 0.95497453212738, 0, 0.296687722206116 version = 118 script_version = 6 spawn_id = 11807 ; cse_alife_object properties game_vertex_id = 3411 distance = 4.9000001 level_vertex_id = 130114 object_flags = 0xffffff3e custom_data = <<END [respawn] respawn_section = marsh_hunters_respawn_1, agr_stalker_regular, military_neytral_respawn_1 max_spawn = 5 END Всего может быть 5 живых неписей, созданных в этой точке, покольку части в данном случае не указаны, то один тип неписей - 1 часть из трех. Если бы было написано, например, marsh_hunters_respawn_1,2,agr_stalker_regular,8 - было бы 8 частей из 10. Если точек респавна найдено больше одной - смотрим для каждой. Ну а кто такие marsh_hunters_respawn_1 - чтобы это узнать, повторяем процедуру сначала. Прописанное в all.spawn для объектов section_name = respawn читается, ОБЫЧНО в se_respawn.script, который частично разбирался в этой теме выше. Впрочем, совершенно не обязательно именно в all.spawn, и совершенно необязательно, что содается только в se_respawn - alife():create( section, pos, lvid, gvid ) может быть вызвана сколько угодно раз где угодно. Кроме способа с alife():create() непись (как и все остальное) может быть вписан в all.spawn "напрямую", и создается при начале игры в заданной точке. Кроме того, прямо по ходу игры может быть пересоздан или "размножен" в нужном количестве экземпляров через alife():create( spawn_id ) по вот этому самому spawn_id, который для него указали. По взаимодействию неписей со смартами и разбор граблей в smart_terrain.script - будет как только, так сразу. Изменено 21 Января 2019 пользователем Dennis_Chikin 1 4 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Это популярное сообщение. Dennis_Chikin 3 658 Опубликовано 23 Января 2019 Автор Это популярное сообщение. Поделиться Опубликовано 23 Января 2019 (изменено) Продолжаем разговор: неписи и смарты Как неписи (или монстры) захватываются под смарт, и почему они НЕ хахватываются. Разбор будет в несколько непривычной форме, поскольку тот случай, когда имеет место быть изрядное "спагетти". Итак, первым делом, когда непись создается, или загужается, он попадает в епархию 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 - заполнение таблички по смартам общим количеством неписей, у которых этот смарт так или иначе упоминается. В чем смысл сего действа? В том, что в какой-то момент, когда неписю будет позволено/предписано отправиться в тот или иной смарт - там было место, незанятое всякими прочими, которых иначе пришлось бы куда-то девать. Кстати, неявный момент: емкость смарта, с учетом таких вот "подготовительных мероприятий" вполне может стать отрицательной - НЕ ИСПРАВЛЯЙТЕ ЭТО В СКРИПТАХ. Лучше, следите, чтобы недопускать ТАКОГО количества "избранных". Продолжение следует. Изменено 23 Января 2019 пользователем Dennis_Chikin 1 4 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 23 Января 2019 Автор Поделиться Опубликовано 23 Января 2019 (изменено) Кстати, с этим редактором надо что-то делать. Еле впихал текст абы как, и что-то в нем трогать теперь банально боюсь. Если так будет продолжаться - придется переползать куда-нибудь в гуглодиск, а сюда кидать исключительно ссылки. Изменено 23 Января 2019 пользователем Dennis_Chikin 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 25 Января 2019 Автор Поделиться Опубликовано 25 Января 2019 Продолжаем разговор: почему неписи/монстры не идут под смарт? 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 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти