Dennis_Chikin 3 660 Опубликовано 26 Сентября 2014 local strn_id = obj and obj.smart_terrain_id and obj:smart_terrain_id() if strn_id and strn_id ~= 65535 then local strn = alife():object( strn_id ) ... end Schemen Sie sich ! Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 660 Опубликовано 11 Октября 2014 1. alife():object("esc_fox") 2. known_info - теоретически - выдается при разговоре/обшаривании трупа. На практике - "есть нюанс" © Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 660 Опубликовано 15 Октября 2014 (изменено) Вспышка, что, таки у серверных объектов появился и заработал метод set_dest_level_vertex_id() ? У них есть CALifeSmartTerrainTask(), но это вообще-то путь, из которого берется начальная точка работы. Изменено 15 Октября 2014 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 660 Опубликовано 23 Октября 2014 (изменено) В общем, в оригинале понавертели много всякого странного, в результате чего рано или поздно где-то пытаются сделать что-нибудь странное с nil. После чего все, что попало, тихо виснет, а потом вылетает со странными ошибками или без таковых. В амк это пытались поправить, но в результате происходит попытка освобождения несуществующего непися с несуществующих работ, с результатом опять же слегка предсказуемым. Да, миграцию неписей между смартами организовать можно, и нужно, но другими способами. А для самих работ лучше вернуть отключенную проверку на валидность, и не допускать. После того, как все добавлено/оттестировано - можно опять отключить. Изменено 23 Октября 2014 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 660 Опубликовано 27 Октября 2014 (изменено) Люди, ну читайте вы внимательно, святого Слонопотама ради ! В смарте есть гулаг. У гулага есть конфиг. В конфиге есть работы. У работы есть путь. Вот в первую точку этого пути непись и бежит. В офлайне в том числе. Собственно, именно так он и между локациями перемещается. Если переходы прописаны. Но это уже в маппинг. Изменено 27 Октября 2014 пользователем Dennis_Chikin 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 660 Опубликовано 27 Октября 2014 Ну вот сразу: local t_common = system_ini():r_s32("options","t_common") - в конфиге должны быть эти самые options. smart_terrain.prot_smt_td - ссылается на соответствующий файл из ogse. с соляночным amk.script несовместимо. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 660 Опубликовано 28 Октября 2014 Сделать можно все. Но кто это будет делать, и зачем ? То, что делаю я - выложил. Факт то, что ни в одном случае запихнуть без изменений произвольный скрипт в произвольный мод - работать не будет. А если в скрипте OGSE заменить чтение из конфига на константу, оторвать вызов из скрипта смарттеррейнов и добавить амк-респавнеры - будет скрит солянки. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 660 Опубликовано 29 Октября 2014 [smart_terrain] type = gar_ost capacity = 1 cond = {+freeplay} Ну и где этот самый freeplay выдается ? Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 660 Опубликовано 2 Ноября 2014 (изменено) function gulag:get_job_path_name( job ) local section = job.section if not self.ltx:line_exist( section, "active" ) then abort( "gulag: ltx=%s no 'active' in section %s", self.ltx_name, section ) end local active_section = self.ltx:r_string( section, "active" ) local path_field for i, v in ipairs( path_fields ) do if self.ltx:line_exist( active_section, v ) then path_field = v break end end if not path_field then abort( "gulag: ltx=%s, there is no path in section %s", self.ltx_name, active_section ) end if path_field == "center_point" then --' TODO убрать затык local path_name = self.name .. "_" .. self.ltx:r_string( active_section, path_field ) if level.patrol_path_exists( path_name .. "_task" ) then return path_name .. "_task" else return path_name end else return self.name .. "_" .. self.ltx:r_string( active_section, path_field ) end end Имеющий да усмотрит. Изменено 2 Ноября 2014 пользователем Dennis_Chikin 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 660 Опубликовано 2 Ноября 2014 А вы бы таки в приведенный кусочек кода распечаточку-то вставили бы... Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 660 Опубликовано 3 Ноября 2014 Зачем оно вообще в смарте ? А вообще, слона обычно едят по частям. Если убрать все переключения отовсюду, крота сразу прописать эксклюзивом в смарт, он с начала игры в него пойдет ? Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 660 Опубликовано 3 Ноября 2014 "Крот должен пойти под этот смарт после выдачи поршня." Ну так условие тогда прописывается Кроту, а не смарту. [smart_terrains] none = {-freeplay} gar_ost = {+freeplay} - вполне достаточно. А для поверки вообще оставить gar_ost = true Угум, сначала делаем все сразу , а потом начинаем гадать, что не работает. И, да, предикаты в работах прописываются тогда, когда их много, и сталкеров много. Чтобы ни кто чужую работу не занял. Если смарт на одного сталкера с одной работой - только тормоза лишние, и место для ошибок понаделать. 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 660 Опубликовано 3 Ноября 2014 (изменено) Если предикат не проходит - отлуп: пусть занимает какую-нибудь другую. Далее - по приоритету. Если приоритеты одинаковые... Теоретически - первая в таблице, на практике - там довольно странный и загадочный код переназначения. Гм... Еще раз перечитал, и сам ничего не понял. Если по другому сформулировать, то любой непись стремится занять свободную работу с наибольшим приоритетом. Но, если там есть предикат, и непись не прошел по условию, на эту работу его не пустят. Пример с Кордоном: работа для Волка имеет наивысший приоритет. Поэтому, пока она свободна, на нее пытаются назначить всех подряд. Но подходит только Волк, так что он на ней в итоге и оказывается. Если таких работ будет 3 - Волк займет одну, с максимальным приоритетом, остальные 2 останутся свободными. upd: А, да, самое главное западло: если работа для Волка будет иметь приоритет ниже, чем другие, Волк может попасть на любую, а его работа останется свободной, и, соответственно, кто-то из неписей может оказаться без работы. Просто у работ с предикатами приоритеты должны быть максимальны. И, да, я гулаговый скрипт переписал: там если есть предикат - приоритет автоматически поднимается, + альтернативный формат описания работ. типа вот так: ["esc_lager"] = { -- Лагерь новичков на Кордоне-- "logic@esc_lager_sleeper1" -- бункер доктора-- "logic@esc_lager_sleeper2" -- ближний бункер к Волку-- "logic@esc_lager_sleeper3" -- ближний бункер к Волку-- "logic@esc_lager_sleeper5" -- в развалинах-- "logic@esc_lager_sleeper6" -- бункер доктора-- "logic@esc_lager_sleeper7" -- дом на входе-- "logic@esc_lager_defend1" -- напротив костра -- занято под Фаната-- "logic@esc_lager_defend2" -- за кустом у развалюхи-- "logic@esc_lager_defend3" -- ХРЕНОВЫЙ. чуть дальше и правее 2. Наемники видят !-- "logic@esc_lager_defend4" -- типа за бункером, между ним и кустом. todo: в олспавне сдвинуть чуть дальше.-- "logic@esc_lager_defend5" -- ХРЕНОВЫЙ. Типа за бочкой.-- "logic@esc_lager_defend6" -- ближний бункер к Волку-- "logic@esc_lager_defend7" -- ближний бункер к Волку-- "logic@esc_lager_defend8" -- дальний-- "logic@esc_lager_defend9" -- дальний (Когда-то был Петруха)-- "logic@esc_lager_defend10" -- дальний (Толик. Был.)-- "logic@esc_lager_defend11" -- дальний-- "logic@esc_lager_defend12" -- Фанат. И ему здесь смерть, по тому что он первый, кого видят наймы еще от дороги.-- "logic@esc_lager_defend13" -- дальний, и таки Волк. -- охранники { section = "logic@esc_lager_zoneguard1", -- "logic@esc_lager_zoneguard1", idle = 0, prior = 9, state = {0, 1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" }, { section = "logic@esc_lager_zoneguard2", -- "logic@esc_lager_zoneguard2", idle = 0, prior = 9, state = {0, 1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" }, { section = "logic@esc_lager_walker3", idle = 0, prior = 8, state = {0, 1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" }, { section = "logic@esc_lager_walker4", idle = 0, prior = 8, state = {0, 1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" }, { section = "logic@esc_lager_defend2", idle = 0, prior = 14, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" }, { section = "logic@esc_lager_defend4", idle = 0, prior = 12, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" }, { section = "logic@esc_lager_defend6", idle = 0, prior = 10, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" }, { section = "logic@esc_lager_defend7", idle = 0, prior = 9, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" }, -- у костра днём { section = "logic@esc_lager_kamp1", idle = 0, prior = 6, state = {0}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" }, { section = "logic@esc_lager_kamp1", idle = 0, prior = 6, state = {0}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" }, { section = "logic@esc_lager_kamp1", idle = 0, prior = 6, state = {0}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" }, -- спящие ночью { section = "logic@esc_lager_sleeper1", idle = 0, prior = 5, state = {1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" }, { section = "logic@esc_lager_sleeper2", idle = 0, prior = 5, state = {1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" }, { section = "logic@esc_lager_sleeper3", idle = 0, prior = 5, state = {1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" }, { section = "logic@esc_lager_defend8", idle = 0, prior = 8, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" }, { section = "logic@esc_lager_defend9", idle = 0, prior = 7, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" }, { section = "logic@esc_lager_defend10", idle = 0, prior = 7, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" }, -- спящие ночью и днём { section = "logic@esc_lager_sleeper5", idle = 0, prior = 4, state = {0,1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" }, { section = "logic@esc_lager_sleeper6", idle = 0, prior = 3, state = {0,1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" }, { section = "logic@esc_lager_sleeper7", idle = 0, prior = 3, state = {0,1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" }, { section = "logic@esc_lager_defend11", idle = 0, prior = 6, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" }, -- где-то тут был Толик { section = "logic@esc_lager_defend14", -- Волка скорее всего нет idle = 0, prior = 5, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" }, { section = "logic@esc_lager_defend15", -- если Толик помер. idle = 0, prior = 4, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" }, { section = "logic@esc_lager_sleeper5", -- если все еще не лезет. idle = 0, prior = 3, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" }, -- Волк, собственной персоной. { section = "logic@esc_lager_volk", idle = 0, prior = 19, state = {0, 1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone", predicate = function(obj_info) return obj_info["profile_name"] == "esc_wolf" end }, { section = "logic@esc_lager_defend13", idle = 0, prior = 20, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone", predicate = function(obj_info) return obj_info["profile_name"] == "esc_wolf" end }, -- and not (has_alife_info("agroprom_military_case_have") and has_alife_info("esc_fanat_spawn") ) end }, -- Фанат { section = "logic@esc_lager_fanat", idle = 0, prior = 19, state = {0, 1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone", predicate = function(obj_info) return obj_info["profile_name"] == "esc_fanat" end }, { section = "logic@esc_lager_defend12", idle = 0, prior = 20, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone", predicate = function(obj_info) return obj_info["profile_name"] == "esc_fanat" end }, -- резерв на случай смерти Волкофаната. { section = "logic@esc_lager_sleeper1", idle = 0, prior = 2, state = {0}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" }, { section = "logic@esc_lager_kamp1", idle = 0, prior = 2, state = {1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" }, { section = "logic@esc_lager_defend5", -- ХРЕНОВЫЙ. Но резерв. idle = 0, prior = 2, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" }, -- Шустрый { section = "logic@esc_lager_shustryi_sleep", idle = 0, prior = 18, state = {0, 2}, in_rest = "", out_rest = "", predicate = function(obj_info) return ( obj_info["profile_name"] == "esc_shustryi" ) and has_alife_info( "tutorial_wounded_give_info" ) end }, { section = "logic@esc_lager_kamp1", idle = 0, prior = 18, state = {1}, in_rest = "", out_rest = "", predicate = function(obj_info) return ( obj_info["profile_name"] == "esc_shustryi" ) and has_alife_info( "tutorial_wounded_give_info" ) end }, { section = "logic@esc_lager_shustryi", idle = 0, prior = 17, state = {0, 1, 2}, in_rest = "", out_rest = "", predicate = function(obj_info) return ( obj_info["profile_name"] == "esc_shustryi" ) and has_alife_info( "tutorial_wounded_start" ) end }, { section = "logic@esc_lager_shustryi", idle = 0, prior = 16, state = {0, 1, 2}, in_rest = "", out_rest = "", online = false, predicate = function(obj_info) return obj_info["profile_name"] == "esc_shustryi" end }, -- резерв на случай смерти Шустрого { section = "logic@esc_lager_sleeper2", idle = 0, prior = 2, state = {0}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" }, { section = "logic@esc_lager_kamp1", idle = 0, prior = 2, state = {1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" }, { section = "logic@esc_lager_defend3", -- ХРЕНОВЫЙ. Но резерв. idle = 0, prior = 2, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" }, { section = "logic@esc_lager_kamp1", -- ну наплодили... больше некуда, кроме как к костру idle = 0, prior = 1, state = {0, 1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" }, { section = "logic@esc_lager_defend1", -- Занято под Фаната idle = 0, prior = 1, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" }, { section = "logic@esc_lager_defend16", -- Толик. Пусть дальше спит. idle = 0, prior = 16, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone", predicate = function(obj_info) return obj_info["name"] == "esc_vagon_wounded" end }}, - это уже со всеми фиксами типа бегающего Шустрого, вылета по нехватке работ, переключениях при дохлых неписях и т.д. - и все равно гораздо нагляднее. Изменено 19 Января 2015 пользователем Dennis_Chikin 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 660 Опубликовано 6 Ноября 2014 (изменено) Тот, кто сказал, что так можно делать - он Вас обманул, зачем-то. Если не знаете, что и зачем делает какая-либо строчка - не надо ее ни куда добавлять. --- Блин, достало уже автообъединение постов ! Хоть клона заводи...--- Сейчас будет по другому вопросу. Чистил сейчас "разработку НС", и наткнулся на свой древний пост: "Так, скажите кто-нибудь: эта конструкция - on_timer = 120000 | mob_home1 on_signal = sig_attacked | mob_combat - вообще в принципе работает ? Я вижу, что срабатывает всегда только переключение по первому условию. Вряд-ли это имеет отношение к вылету, но тем не менее." Потом вспомнил, как уже позже разбирал xr_logic, и нашел там целых две засады. А потом вспомнилось еще и несколько дискуссий здесь "почему у меня не работает"... Так вот записываю здесь, чтобы самому опять не забыть, и в надежде, что если вдруг кто, столкнувшись с аналогичным, сделает поиск по "переключение секций логики": Засада первая: при разборе логики в таблицы, у вас может случится так, что окажутся 2 одинаковых ключа. Скажем, true. Или false. Да, такое бывает в оригинальном скрипте. Соответственно, в таблице окажется только одно условие. Засада вторая: при проверке условий может проверяться, что они ВСЕ true или ВСЕ false. Руки дойдут - может, вытащу эти куски из оригинала с подробным разбором. Не дойдут - не вытащу. Что делать ? Оставьте в вашей логике только одно условие. И проверьте, работает ли. Потом - другое, но опять же, одно. Если по отдельности все работает так, как надо, а вместе - неправильно - см. выше причины, и попытайтесь переписать как-то иначе. Изменено 6 Ноября 2014 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 660 Опубликовано 9 Ноября 2014 Самое простое, что можно сделать со звуком, это sounds\characters_voice\бла-бла\death\* поудалять - во ВСЕХ бла-бла, и оставить в каждом по одной пустышке. Заодно и лагов по-меньше станет. А так - они привязаны к анимациям, по-ходу, и надо долго и нудно разбираться. Причем играются рандомно, и отловить попадание именно в голову как причину смерти там невозможно. P.S. А вообще, как же достало это сектанство, когда все сидят по 2-3 человека по своим маленьким уютненьким подпольям, и если что-то как-то передается, так через 10-е руки... 8( 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 660 Опубликовано 12 Ноября 2014 (изменено) prefetch за че отвечаютЕсть подозрение, что в итоге - вообще ни за что. Проверить пока ни кому не удалось за отсутствием локаций, на которых было бы только то, что указано в этих файлах. Изменено 12 Ноября 2014 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 660 Опубликовано 14 Ноября 2014 (изменено) _Dunay_, вообще-то про телепатию все сказано в шапке, но я попробую сыграть в эту викторину, и догадаться, про что был вопрос. Если не угадаю, прошу строго не наказывать. Находящиеся на поясе патроны могут быть прописаны как боеприпасы для оружия. Ну и, соответственно, этим патронавм прописан пояс и автовзятие. Если они вдруг обнаруживается не на поясе - удалять, и создавать вместо нее что-то другое. А пачки патронов в рюкзаке можно, например, прописать на классе антирада, но ни к какому оружию их, естественно, не прописывать. И при использовании создавать патроны на поясе. Либо, действительно, сразу устанавливать количество патронов в оружии. Как-то так, наверное. Если я правильно понял вопрос. Изменено 14 Ноября 2014 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 660 Опубликовано 15 Ноября 2014 (изменено) Что-то моя очередь пришла глупые вопросы задавать. Есть неписи, которые будучи выгнанными из под смарта, и назначенные в другой, добегают поразительно быстро. А есть - что, в общем-то идут (и в офлайне тоже), но как-то медленно и печально, сутками шарахаясь по одной локации, где и путей-то для них вроде ни каких нет. флаги - ffffffbf, естественно, переключения on/off не запрещены. От чего оно зависит ? Видел, что от каких-то переделок олспавна они резко ускорялись, но в подробностях совершенно не в курсе, и кто знает - делиться не хочет, почему-то. Ну, да, всякие Кости и прочие докторы в солянке, а также иже сними Кроты и долговцы с ТД. P.S. Ибо да, достали квестовые неписи, застрявшие посреди лагеря других квестовых неписей, враждебных, и ждущих, когда актор подойдет на расстояние алайфа, чтобы всех убить либо сдохнуть. Изменено 15 Ноября 2014 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 660 Опубликовано 18 Ноября 2014 Любому торговцу и даже просто неписю можно прописать сколько угодно секций, и условий, по которым они будут переключаться. Только очень аккуратно, поскольку при малейшей ошибке виснут наглухо. По аналогии с тем же торговцем на Кордоне: buy_supplies = {+esc_kill_bandits_quest_done} supplies_after_fabric, supplies_start товары, имеющиеся в наличии = {условие} секция со списком, {условие} другая секция со списком, ... и так сколько надо, секция для случая, если ни одно условие не подошло. Аналогично - цены на покупку, цены на продажу. Конкретные условия - тут уже делающему виднее, что в них прописывать, и как именно у него выжигатель отключается. Телепаты, традиционно, в отпуске. Считается, что если он способен изменить конфиг так, чтобы не попортить - то и с выжигателем как-то разобрался. Но злоупотреблять этим не стоит, поскольку конфиги читаются довольно медленно. Чем больше размер файла - тем медленее и печальнее. Прицелы и даже гранатометы - на самом деле, можно. Но не нужно. Так что эпическую поэму "о сменных гранатометах" в трех томах писать вряд-ли кто-то будет. Ночной прицел как на арбалете в НС делается точно так же, как ночной прицел на арбалете НС. Проверяется actor:accuracy(), если получено значение, какое надо, проверяется оружие в руках, и если оно тоже какое надо - включается нужный эффект, например: level.add_pp_effector( "bast.ppe", 1034, true ) - если такой есть. Хоть ночное зрение, хоть мигание, хоть пляшущие голые деффки. Регулируемый зум на СВД - берутся исходники, благо, они сейчас выложены, и исправляются на любой вкус. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение
Dennis_Chikin 3 660 Опубликовано 21 Ноября 2014 Визуал - это и есть модель, или я чего-то не понимаю ? А логика меняется вообще постоянно: xr_logic.configure_schemes( npc, ltx, self.ltx_name, stype, sect, self.name ) xr_logic.activate_by_section( npc, ltx, xr_logic.determine_section_to_activate( npc, ltx, sect, actor ), false ) Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Поделиться этим сообщением Ссылка на сообщение