Таблица лидеров
Популярные публикации
Отображает публикации с лучшим балансом оценок с 12.08.2015 во всех приложениях
-
Для Buhar1@ix Самая чёткая пушка была у царя Гороха. Экологически чистая (стреляла горохом), с применением новейших разработок биоинженерии (мушка представляла собой аналог натуральной мухи це це). Так что вам лучше у царя спросить... p.s. А вы как будете показывать - в анфас, или в профиль ?6 баллов
-
Подходит кот к миске. 1-ый день: “Фу! Гречка!” 2-ой день: “Фу! вчерашняя гречка…” 3-ий день: “Вау!!! гречка!!!”5 баллов
-
Торопыга ты наш, если уж что-то не показывает или двери заело, то сразу нужно откатываться, а не бежать в мыле. Бери пример с Ирбиса, он часами на закаты-рассветы любуется.5 баллов
-
Да чего ссоритесь ребятки, представления о чёткой пушке обычно у каждого свои. Единого мнения по данной теме мировая общественность не достигнет никогда.5 баллов
-
5 баллов
-
У нас было два кота, теперь один. Перс замечательный добродушный, с характером собаки, ел сыр, колбасу, кукурузные хлопья, консервы, сухой корм, и любое мясо сырое или вареное - ему без разницы было. Умер месяц назад от сердечного приступа(( Другого такого не будет, т.к. забрали его из семьи, где он жил с тремя собаками с детства. 10 лет ему всего было. А второй помоложе, ему лет пять, ласковая скотинка. Подобрали на улице год назад. Умеет есть только консервы и сухой корм, иногда ворует булку. На все остальное смотрит дурными глазами - видно бывшие хозяева никакой другой еды ему не давали даже пробовать. Любит опорожняться в ванну - тоже видно приучили на старом месте. Но знает что туда нельзя ходить и когда видит, что я заметила что он в ванну пошел, вздыхает и идет в лоток копаться. И трус трусом, боится всего. Вчера волосы в кулек собрала на голове, а кончики волос над головой торчали как веер. Так он увидел, боком встал, напыжится весь, глаза как блюда - страашно, прическа новая у хозяйки )) Но красивый зараза, видно у него тоже персы в крови прогулялись. Один хвост чего стоит А вот еще)) Это я новый рулон мешков для мусора положила. Так он минут 10 туда подойти пытался, все не мог осмелиться Всем доброго.4 балла
-
Приветствую всех. Года 4 назад, попал мне в руки неизвестный мод 2007 года выпуска на ТЧ, сыграв я в нем увидел более 600 разных артефактов правда со стандартными моделями. Я уже тогда моделил уродские артефакты, и тут мне в личку постучался Resident evil, и предложил делать арты для мода ОП-2. И тут у меня загорелась идея создать арт-аддон с огромным количеством артефактов для мода ОП-2, ну и конечно план был частично выполнен 110 артов с разными моделями ,правда арты так и непопали в мод ОП-2, потом на год заморозил проект по личным причинам, ну вот полтора года назад не нашел свой аддончик, и взялся создать артефакт-пак с нуля, через месяц каркас мода был готов в него было добавлено 800 артов но вот загвоздка только название артов, не могу придумать характеристики, описание и легенды про арты, ни чего в голову не лезет, как оказалась непосильная для меня работа, теперь потихоньку под каждый артефакт моделки делаю, Вот и прошу вашей помощи. Вот список артов в моем аддончике Хоть кто нибудь, подкиньте идеи характеристики, описание или легенды про арты которые в списке.4 балла
-
800 артов для Сталкера? Бред собачий...Куда их столько?Если только для того, чтобы народ мог выбирать из десятка один, наиболее привлекательный. Сделай 80 штук как положено - и то будет зашибись. Названия и характеристики - от балды, лишь бы вылетов не было. И народ к тебе потянется.3 балла
-
3 балла
-
, второй и третий варианты озвучки новичков из ТЧ добавить не получится, так как в ТЧ отсутствует очень много специфических фраз, которые есть в озвучке ЧН (нет озвучки ВГ). Я в своё время "Бандитам" (help/wounded_thanx и talk/use), "Наёмникам" (states/meet) и "Военным" (help/wounded_thanx, talk/use и threat/drop_weapon) кое-как насобирал фраз более менее подходящих, а с новичками вообще не проходной вариант. Ещё пару лет назад всякие варианты пробовал - остановился на том, что есть сейчас. Лучше не сделать.3 балла
-
Котов надо воспитывать с детства и приучать к горшку, а то каждый второй будет на улицу вылетать.2 балла
-
А у меня персидская кошка, привередливая до ужаса! Она в основном курицу ест, только вареную и только филе. Но если понимает, что курицу ей не дадут, то спокойно ест и остальные продукты. Любит поиграться, бросаясь на ноги или обнимая за руку, типа ну поиграй со мной! Очень ласковая,но немного трусливая)))Если интерестно, прикрепляю фотографию.2 балла
-
Дык а кто спорит то? Модят всё подряд...Ну а мы модим сталкера. Ну может потому, что другое модить не умеем, а может и потому что именно нам больше нравится модить сталкера. Такой ответ устраивает?2 балла
-
Исходя из практики могу сказать, что такие вещи придумываются и проще и интереснее, если есть модель.2 балла
-
2 балла
-
2 балла
-
2 балла
-
@BFG, торговал с кем? Точно со сталкером? Если ты торгуешь не с торговцем и не со сталкером, то кирдык, этот вылет и будет. Скрытый посыл тут в том, что может не быть либо сталкера, либо торговца, либо актора, выводы и действия сами думайте.2 балла
-
@Червонец, Драгунов дает чип после того, как примет у тебя заказанные арты. Ты бы выложил сейв перед Драгуновым. Посмотрят люди что еще у тебя не так. Только укажи какие правки стоят. Как крайний вариант - выпиши через спавнер cube_chip .2 балла
-
Ни в коем разе не хочу разжигать трения между фотошопперами и остальными "графически отсталыми" юзерами, однако для работы с текстурами за глаза хватает бесплатных Paint.Net`a и GIMP`a. Первый свободно работает с *.dds*. Второй с плагином и имеет всё то, что имеет ФШ, практически на 90 %, а уж для Сталкера и подавно. То что я увидел в выше указанном уроке для ФШ, это конечно всё так, но.... зачем столько утомительных эротических мышкодвижений ? Поскольку сам я никогда уроков не составлял, попытаюсь в нескольких скринах показать, как вопрос юзера решается за 1 минуту в Paint.Net Возможно опытным юзерам тут всё более чем понятно. Однако для новичков думаю пригодится.2 балла
-
Это скриптовый файл, дающий новый способ создания диалогов, и не отменяя старые. Новый способ прост и не требует от пользователя знания скриптов, помогает быстро и легко отловить все распространенные ошибки в диалогах, а так же существенно упрощает сам процесс создания и редактирования, особенно в случае больших, сложных и разветвленных диалогов, по сравнению со старыми методами. Диалог пишется в файле ltx-конфига, и избавлен от громоздкой мишуры xml-тегов. Возможно это мое субъективное мнение, но форма написания диалога получается более наглядной. Сохраняются все возможности диалогов созданных по-старинке: к любой фразе можно прицепить прекондишен, повесить вызов функции, выдачу/отнятие инфопоршня, проверку на наличие/отсутствие инфопоршня. Добавлена возможность написания диалоговых блоков - своего рода готовых деталей для сборки. И диалог можно составлять как из простых фраз, так и из готовых блоков, в любом сочетании. Сложность и размеры диалоговых блоков практически не ограничены, любой диалоговый блок сам так же может быть составлен из других, более мелких диалоговых блоков. Вы можете использовать одни и те же диалоговые блоки в различных диалогах, это как детали конструктора. Ряд возможных ошибок при составлении диалога, ранее приводивших к неинформативным или безлоговым вылетам, теперь сопровождаются более ясной информацией в логе. примеры: 1) Старые методы: При указании функции для прекондишена, допущена опечатка/функция не существует. Результат: пока не добраться до той фразы, все работает. Дойдя до проблемной фразы, уже разговаривая с нпс в игре, получаем безлоговый вылет. Новый метод: Еще при формировании диалога, выполняется проверка существования всех вызываемых в нем функций. В случае, если функция не существует, произойдет вылет: Новый метод: Еще при формировании диалога, проверяется его структура. В случае такой ошибки произойдет вылет: Новый метод: Существует возможность настроить отслеживание фраз. обычный диалог - первая фраза принадлежит актору. старт-диалог - первая фраза принадлежит нпс. Если чередование фраз нарушено, Это будет обнаружено еще при формировании диалога, и произойдет такой вылет: Так же есть возможность отключить отслеживание чередования для отдельно взятого диалога. Dialog <имя диалога>; line <номер строки в диалоге>: function <файл>.<функция> not exist 2) Старые методы: В большом разветвленном диалоге, из-за ошибки в связях между фразами, к какой-либо фразе отсутствует входящая связь. Результат: насколько я помню, довольно неинформативный вылет, никак не помогающий найти ошибку. Отсутствует входящий линк для фразы. section <имя диалога>, phrase <номер строки> 3) Старые методы: По ошибке/невнимательности, модостроитель при составлении сложноразветвленного диалога, допустил нарушение чередования фраз актор/нпс. Результат: непредсказуемое поведение диалога в игре, как правило не то что ожидалось, причину приходится искать вручную. Нарушено чередование фраз npc/actor. section <имя диалога>, line <номер строки> указывающий точно, где именно произошло "столкновение" с фразой, принадлежащей не тому собеседнику. Единственный недостаток - чтобы начать делать диалоги по-новому, придется изучить набор команд, используемых при написании. Это достаточно просто и не займет много времени у любого пользователя. 1. скачать можно тут https://yadi.sk/d/XxUqwIvthfeWo 2. распаковываем архив, кидаем файл в папку gamedata/scripts 3. пользуемся новыми возможностями. Никакого совмещения не требуется. Встроена проверка версий, так что модуль будет работать на любой версии игры. (ТЧ любой патч / ЧН / ЗП). Правда, я не тестировал на других версиях Если я ошибся и что-то не работает, пишите. * Для того чтобы правильно работали функции отслеживания ошибок, у вас должны быть рабочие функции abort и log. Ну для начала, раз теперь у нас диалоги пишутся в ltx-файлах конфигов, неплохо бы завести для них отдельное место. Это не обязательное действие, просто для удобства следует выполнить следующее: 1. в папке config создаем новую папку dialogs 2. создаем в нем текстовый файл, называем его dialogs.ltx 3. открываем в папке config файл system.ltx, и в самый его конец пишем: #include "dialogs\dialogs.ltx" 4. теперь можно в папке dialogs создавать новые файлы, писать в них свои диалоги, к примеру мы создали файл my_first_dialog.ltx, его надо подключить к игре. открываем наш файл dialogs.ltx, и в нем пишем #include "my_first_dialog.ltx" Но, сторонники бардака и беспорядка могут писать свои диалоги в любых файлах конфигов где угодно, только не забудьте так или иначе подключить их к system.ltx. Как создать диалог. 1. Каждый диалог в новой системе имеет секцию конфига. таким образом, создав в файле конфига секцию [my_first_dialog] вы уже создали новый диалог. Правда пока он не имеет ни единой фразы, но мы решим этот вопрос позже. Пока надо сделать чтобы скрипты его увидели. 2. Идем в gamedata/config/gameplay, открываем файл dialogs.xml, Где-нибудь между уже имеющихся диалогов, добавляем в него следущее: 4. Открываем его, вставляем такой код: <dialog id="my_first_dialog"> <init_func>dialogs_new_system.my_first_dialog</init_func> </dialog> 3. Идем в gamedata/scripts, создаем новый текстовый файл, называем его dialogs_new_system.script function my_first_dialog(dlg) assembly_dialogs.construct_dialog("my_first_dialog",dlg) end Все, игра его видит. Правда он все еще не написан. Пишем диалог... 1. Идем в gamedata\config\dialogs, открываем наш файл my_first_dialog.ltx, где мы создали пока еще пустую, секцию диалога. Диалог в конфиге пишется при помощи команд, далее я напишу какие команды что делают. 2. НЕОБЯЗАТЕЛЬНО. Настраиваем чередование фраз. Вначале можно настроить, надо ли в этом диалоге отслеживать чередование фраз. если мы напишем params_sequence = actor значит это обычный диалог, где первую фразу говорит актор. система будет отслеживать чтобы собеседники говорили по очереди не нарушая порядок. Если написать params_sequence = npc значит это старт-диалог, и в нем первая фраза принадлежит НПС. система так же будет отслеживать порядок фраз. А если мы напишем params_sequence = free То чередование фраз отслеживаться не будет. Если не указывать этот параметр, то по умолчанию считается что params_sequence = actor, т.е. это обычный диалог, первая фраза принадлежит актору, отслеживание активно. 3. добавляем фразы, и связи между ними вот пример простенького диалога: [my_first_dialog] x0 = текст_первой_фразы link0 = 1 x1 = текст_второй_фразы link1 = 2 x2 = текст_третьей_фразы Тут все, я думаю, очевидно и понятно. команды x<номер фразы> - создают новую фразу в диалоге. значение команды это ее текст. Можно писать текст прямо тут, можно приводить string_id из файлов папки config/text/rus. рекомендуется второй вариант. Диалог всегда начинается с фразы x0, она здесь обязательна. команды link<номер фразы> = № следующей фразы - создают связи между фразами. Теперь возьмем пример посложнее. [my_first_dialog] x0 = текст_первой_фразы link0 = 1 x1 = текст_второй_фразы link1 = 10, 20, 30 x10 = текст_фразы_10 link10 = 11 x11 = текст_фразы_11 x20 = текст_фразы_20 link20 = 21 x21 = text link21 = 22 x22 = text x30 = text link30 = 31 x31 = text Тут у нас актор произносит фразу х0, нпс ему отвечает фразой х1, а далее актору открывается выбор из трех фраз, х10, х20, х30, каждая из которых ведет в свою ветку диалога. Из любой фразы можно сделать неограниченное число линков, разделяя их запятыми. Этот пример так же показывает тот факт, что нумерация фраз не обязана быть сплошной. В них могут быть разрывы до сотни. И еще вот такой пример: [my_first_dialog] x0 = text link0 = 1 x1 = text link1 = 2 x2 = text link2 = 3 x3 = text link3 = 4 x4 = text link4 = 1, 5 x5 = text link5 = 6 x6 = text здесь после 4-й фразы (нпс) актору открывается выбор, продолжить диалог или вернуться к началу. Думаю, с созданием фраз и связей между ними, все уже понятно. 4. Добавляем другие команды все команды пишутся по принципу <команда><номер фразы> команда a - добавит вызов функции в указанной фразе (аналогично тегу <action>) команда p - добавит прекондишен (проверку условия) в указанной фразе (аналогично тегу <precondition>) команда h - добавит проверку наличия инфопоршня в указанной фразе (аналогично тегу <has_info>) команда d - добавит проверку отсутствия инфопоршня в указанной фразе (аналогично тегу <dont_has_info>) команда gi - выдать актору инфопоршень в указанной фразе (аналогично тегу <give_info>) команда di - отнять у актора инфопоршень в указанной фразе. (аналогично тегу <disable_info>) команда item - заспавнить в инвентарь актора итем указанной секции и количества. количество пишется через точку, если не указано то считается равным единице. пример: item5 = bandage.10, medkit.5 ; заспавнит 10 бинтов и 5 аптечек пример2: item5 = antirad, wpn_pm.2 ; заспавнит 1 антирад и два ПМа. команда remove - удалить из инвентаря актора итемы указанных секций и количества. Если у актора меньше итемов, удаляются те что есть. Т.е. проверка необходимого количества здесь не выполняется. Если такая проверка нужна, используйте команду has_item. пример: remove5 = wpn_pm ; удалит ПМ пример2: remove5 = bandage.2, medkit.3, antirad.4, vodka.5 ; удалит 2 бинта, 3 аптечки, 4 антирада и 5 бутылок водки. если чего-то не хватает, это не помешает. команда has_item - вставляет проверку наличия в инвентаре актора, указанных предметов в указанном количестве. фраза не будет пропущена, если хоть какого-то из указанных итемов не хватает. пример: has_item5 = wpn_abakan ; фраза будет доступна если у актора есть абакан пример2: has_item5 = af_medusa.10, bandage.4 ; фраза будет доступна если у актора есть 10 медуз и 4 бинта. команда donthas_item - вставляет проверку, что в инвентаре актора указанных предметов меньше заданного количества. пример: donthas_item5 = wpn_pm, wpn_abakan, wpn_mp5, medkit ; фраза будет доступна только если у актора нет ничего из перечисленного оружия и нет аптечек. пример2: donthas_item5 = bandage.25, medkit ; фраза будет доступна если у актора нет ни одной аптечки, и количество бинтов в его инвентаре менее 25. пример: [my_first_dialog] x0 = text link0 = 1 a0 = spawn.minigun x1 = text link1 = 5, 10, 15 gi1 = answer_infoportion x5 = text link5 = 6 p5 = my_script.answer_function x6 = text a6 = spawn.ammo_1, spawn.medkit, xr_motivator.kill_all_bandits x10 = text h10 = какой_то_поршень_1, какой_то_поршень_2 link10 = 11 x11 = text x15 = text link15 = 16 x16 = text link16 = 17 x17 = text тут мы в стартовой фразе х0, вызываем скриптовую функцию spawn.minigun, в следующей выдаем актору некий инфопоршень, затем у нас развилка на три ветки. первая ветка начинается с фразы 5, в ней предусловие - my_script.answer_function и если указанная функция вернет истину, то только тогда эта ветка диалога будет доступна. в следующей фразе вызываем три функции, spawn.ammo_1, spawn.medkit, xr_motivator.kill_all_bandits - для любой команды, можно указывать любое количество аргументов, разделяя их запятыми. при вызове, очередность их следования будет соблюдаться. в другой ветке, начинающейся с фразы x10, на входе мы проверяем наличие двух каких-то инфопоршней. ветка будет доступна если у актора есть оба. третья ветка, начинается с фразы x15, доступна в любом случае и не снабжена никакими командами. что можно сказать по итогам. К каждой фразе можно прицепить неограниченное количество каких вам угодно команд, и каждой указать любое количество аргументов через запятую. Не надо только повторять команды. к примеру такая запись: x5 = text a5 = my_script.xxx_function link5 = 6 a5 = my_file.answer_function неправильна, из двух команд a5, читаться будет только одна. Правильный способ записи в таком случае будет выглядеть так: x5 = text a5 = my_script.xxx_function, my_file.answer_function link5 = 6 5. прописываем в профиле любого удобного вам НПС, новый диалог <actor_dialog>my_first_dialog</actor_dialog> И идем проверять как все работает. Щас уже поздно, так что пока хватит. Утром допишу про создание блоков, и компоновку диалога из них. Это одно из главных преимуществ новой системы. Зачем отдельная тема - затем что я предполагаю, кроме обсуждения, еще код каких-нибудь широко-употребимых блоков, написанный в этой системе, будет здесь же выкладываться. К модераторам просьба, организуйте мне кураторство в этой теме. Для начала, что такое диалоговый блок. Это некоторый фрагмент диалога, у него есть вход - начальная фраза. Некоторое число фраз, от одной до - много. и есть фразы, (от нуля до сколько захотите), которые считаются выходами диалогового блока. Я не случайно говорю "от нуля" - выходы могут и отсутствовать. Что такое выходы - это те фразы, к которым будет подключать линки на последующие внешние для этого блока, фразы, внешний для него же, конструктор диалога. Пока все может быть не очень понятно, наберитесь терпения. когда доберемся до конкретных примеров, все станет яснее. Как создаются диалоговые блоки? А точно так же как и диалоги. создаем секцию, в нее пишем фразы, линки и команды. Начальная фраза - вход, выходов может быть нет, может быть есть один, может быть много. Чем же отличается диалоговый блок, от самого диалога? А отличается он тем, что может быть подключен к другому диалогу, в любом месте. Для создания выходов диалогового блока, существует команда exit. аргумент, который для нее указывается - это порядковый номер выхода. Давайте уже перейдем к примерам. Создадим простенький диалоговый блок с одним выходом: [dlg_block_test] x1 = text_phrase_1 link1 = 2 x2 = text_phrase_2 link2 = 3 x3 = text_phrase_3 link3 = 4 x4 = text_phrase_4 link4 = 1, 5 x5 = text_phrase_5 link5 = 6 x6 = text_phrase_6 link6 = 7, 8 x7 = text_phrase_7 link7 = 9 x8 = text_phrase_8 x9 = text_phrase_9 exit9 = 1 Как видим, в середине есть возможность вернуться в начало, образуя петлю, в конце есть развилка, одна ветка ведет вникуда, т.е. приводит к обрыванию диалога, другая - вроде бы тоже, но в ней объявлен пока загадочный для нас ВЫХОД. Пока получается что-то похожее на диалог, правда? Кстати обратите внимание на еще одно отличие - в диалоговом блоке первая фраза x1, а не x0. Ну и, не лишне будет сказать, при создании диалоговых блоков так же можно пользоваться всеми командами, описанными выше. Теперь идем далее. Слегка усложним один из примеров диалогов, приведенных ранее. Это не диалоговый блок, это сам диалог. [my_first_dialog] params_sequence = actor x0 = text0 link0 = 1 x1 = text1 link1 = 10, 20, 30 x10 = text10 link10 = 11 x11 = text11 link11 = 12 x12 = text12 link12 = 40 x20 = text20 link20 = 21 x21 = text21 link21 = 22 x22 = text22 link22 = 40 x30 = text30 link30 = 31 x31 = text31 link31 = 32 x32 = text32 link32 = 40 x40 = text40 link40 = 41 x41 = text41 link41 = 42 x42 = text42 link42 = 43 x43 = text43 Тут у нас диалог ветвится на три потока, которые затем опять сходятся в один. Ну так вот. любую фразу в диалоге можно заменить на диалоговый блок. Делается это например так: Берем вот этот кусок x31 = text31 link31 = 32 x32 = text32 link32 = 40 И меняем вот так: x31 = text31 link31 = 32 block32 = dlg_block_test, block_1 link32 = 40 вместо команды x (создание фразы) - команда block. подключение диалогового блока. первый аргумент команды - секция конфига подключаемого блока. второй аргумент - имя блока, должно быть уникальным для данного блока. Вы ведь уже поняли что можно вставлять один и тот же блок несколько раз в разных местах диалога? имена только им надо давать разные. Например, вставим наш блок вместо фраз 12, 22, 32: block12 = dlg_block_test, block_1 ... block22 = dlg_block_test, block_2 ... block32 = dlg_block_test, block_3 Мы сделали это с тем диалогом что приведен выше, my_first_dialog. Что же в итоге получится? А вот что: Граф диалога усложнился в разы а мы всего лишь три строчки поменяли. В любой диалог, в любом его месте, можно вставить какой угодно диалоговый блок. При желании можно практически весь диалог из блоков и строить, только начальная фраза должна оставаться фразой. Ну и теперь самый смак. помните, что я говорил, что при создании диалогового блока доступны все те же команды что и для диалога? Так вот. команда block - тоже доступна. Вы можете составлять блоки из блоков, а те в свою очередь еще из блоков - сколько уровней вложенности вам понадобится, столько и будет. Единственное, чего не стоит делать, это вставлять диалоговый блок внутри себя самого. Спровоцируете бесконечный цикл, который завершится переполнением стека и вылетом. Таким образом, в код диалогового блока можно вставлять любые другие блоки, кроме него самого. Давайте немного обленимся, просто возьмем вот такой код [test_block_2] x1 = text1 link1 = 10, 20, 30 x10 = text10 link10 = 11 x11 = text11 link11 = 12 x12 = text12 link12 = 40 x20 = text20 link20 = 21 x21 = text21 link21 = 22 x22 = text22 link22 = 40 x30 = text30 link30 = 31 x31 = text31 link31 = 32 x32 = text32 link32 = 40 x40 = text40 link40 = 41 x41 = text41 link41 = 42 x42 = text42 link42 = 43 x43 = text43 Как видите это уже знакомый вам диалог на три ветки, сходящиеся потом в одну. Мы из него выкинули начальную фразу, и превратили в диалоговый блок. Добавим в него 4 выхода. [test_block_2] x1 = text1 link1 = 10, 20, 30 x10 = text10 link10 = 11 x11 = text11 link11 = 12 exit11 = 1 x12 = text12 link12 = 40 x20 = text20 link20 = 21 x21 = text21 link21 = 22 exit21 = 2 x22 = text22 link22 = 40 x30 = text30 link30 = 31 x31 = text31 link31 = 32 exit31 = 3 x32 = text32 link32 = 40 x40 = text40 link40 = 41 x41 = text41 link41 = 42 x42 = text42 link42 = 43 exit42 = 4 x43 = text43 Напомню, аргумент команды exit - это порядковый номер выхода. Что такое выход - думаю уже понятно. Это та фраза, или тот адрес, куда будут подключаться связи, которые должны выходить из диалогового блока. Но их несколько и они в разных местах. как же с ними обращаться? пишем такой диалог: [my_second_dialog] x0 = text0 link0 = 1 x1 = text1 link1 = 2 x2 = text2 link2 = 3 block3 = test_block_2, inserted_block link3 = 10 | 20 | 30, 40 | 50 x10 = text10 link10 = 11 x11 = text11 x20 = text20 link20 = 21 x21 = text21 x30 = text30 link30 = 31 x31 = text31 x40 = text40 link40 = 41 x41 = text41 x50 = text50 link50 = 51 x51 = text51 Зеленые фразы и синие стрелки - Встроенный диалоговый блок. Желтые фразы и фиолетовые стрелки - внешний диалог. Оранжевые стрелки - связи подключенные к выходам диалогового блока. Обратите внимание, как оформлены аргументы команды link, выходящей из диалогового блока: link3 = 10 | 20 | 30, 40 | 50 Символ запятая, по прежнему разделяет адреса связей, исходящих из одной и той же фразы. А символы | разделяют потоки, выходящие из разных выходов. Можно к примеру сделать так, что в каждой из 4-х фраз-выходов диалогового блока, будет выбор, в какую из веток пойти. сделаем все 5 веток доступными для всех выходов: link3 = 10, 20, 30, 40, 50 | 10, 20, 30, 40, 50 | 10, 20, 30, 40, 50 | 10, 20, 30, 40, 50 Или например: к второму и третьему выходу не будем ничего подключать: link3 = 10, 20, 30, 40, 50 | | | 10, 20, 30, 40, 50 Или еще пример: оставим к каждому выходу одну фразу, 50 и 51 фразы удалим из диалога: link3 = 10 | 20 | 30 | 40 Как видите, каждый выход из диалогового блока - может подключаться к любому числу фраз или не подключаться никуда, каждым выходом-потоком можно управлять отдельно. Тут есть один момент. При написании аргумента к команде link диалогового блока, можно записать меньше потоков, чем есть в блоке. Проблем от этого не возникнет, например если я сделаю так: link3 = 10, 20, 30, 40 | 50 то будут подключены 10,20,30,40-я фразы к первому выходу, 50-я ко второму. к остальным двум выходам не будет подключено ничего. А вот если я сделаю так: link3 = 10 | 20 | 30 | 40 | 50 Получится запись которая требует 5 выходов. А у этого диалогового блока есть только четыре. В таком случае произойдет такой вылет: Dialog <имя диалога>; line <номер строки>: Число выходов диалогового блока недостаточно для подключаемых входов. Число потоков, подключаемых к выходам диалогового блока, не должно превышать число имеющихся у него выходов. Вышеописанными блочными конструкциями, возможности модуля не ограничиваются. Если вы скриптер, вы можете писать свои функции, для динамической генерации диалоговых блоков, и точно так же подключать их в любое место любого диалога. Возьмем диалог из последнего примера. Там диалоговый блок подключался вот так: block3 = test_block_2, inserted_block link3 = 10 | 20 | 30, 40 | 50 и тут, все характеристики этого блока читаются из конфига, который, как ни крути, статичен. Однако можно сделать иначе: block3 = barter_manager_3.buy_terminal_all, inserted_block link3 = 10, 20, 30, 40, 50 Здесь - диалоговый блок это не секция конфига. Это указание вида файл.функция. На свою функцию формирования диалогового блока. inserted_block - все так же, уникальное имя этого блока в этом диалоге. И вы можете свои функции для формирования диалоговых блоков, писать в любом файле скрипта, где вам удобно. Генератор диалога сначала проверит, что такая функция существует, затем ее вызовет, предоставив ей генерировать диалоговый блок по своему разумению. Для того чтобы работать с этой системой, ваша скриптовая функция должна выполнять ряд правил: 1. генератор вызывая вашу функцию, передает ей 5 аргументов: *table: phr_tbl, - таблица, хранящая объекты фраз генерируемого диалога (точнее, ссылка на нее) number: phr_k, - следующий индекс, в который вам предоставлено писать свои фразы *userdata: dlg, - ссылка на объект диалога, созданный движком, и переданный в скрипты для генерации string: block_name, - уникальное имя диалогового блока string: block_input_key - адрес фразы, из которой подан линк на вход вашего блока. Это не id фразы, а ее адрес в системе генератора. 2. ваша функция обязана после завершения своей работы, вернуть генератору аргумент - таблицу. В этой таблице должны быть два элемента, с числовыми ключами. Первый - следующий после вас, свободный индекс в таблице фраз. Второй - еще таблица, в которой по числовым индексам, хранятся строковые адреса фраз, являющихся выходами вашего блока. 3. при каждом добавлении фразы, обязательно добавлять счетчик фраз на единицу. 4. адреса фраз, создаваемых внутри вашей функции, составлять с применением выданного на входе, имени диалогового блока. Так вы обеспечите уникальность адресов в тех случаях, когда ваш диалоговый блок будет подключаться несколько раз к одному диалогу. Если вы уверены что такого не будет, то 4-е правило соблюдать не обязательно. еще, в качестве рекомендации, для добавления фраз советую обратить внимание на функцию assembly_dialogs.assembly_phrase_ex. формирует фразы, опираясь не на конфиг, а на переданные в нее данные. Для наглядного примера, привожу код своего блока, это блок для бартерной системы торговли, он позволяет актору выбрать средство оплаты для уже выбранных покупок, производится перебор всех существующих в игре артефактов, формируются фразы на разное их количество, навешиваются прекондишены для проверки того что у актора есть в наличии нужное количество выбранных артов, и того что такой вариант подходит по цене к выбранному товару. Это лишь пример, цели диалоговых блоков могут быть любыми. function dlgblock_select_costitem(section_item, cnt_item, phr_tbl, phr_k, dlg, type_key, input_key) --[[ блок выбора артефакта/трофея для оплаты. цена оплаты определена до этого, наличие у ГГ ценных предметов определено до этого Actor Название х Количество Прекондишн: проверить наличие требуемого количества нужных артов Прекондишн: проверить что это та цена которая требуется Акшн: внести выбранное название в память. Блок в одну фразу. все построение блока сводится к формированию функций обработки фразы. ]] --printf(string.format("dlgblock_select_costitem %s", section_item)) --local inside_key = 1 --local lost_attempts = 0 --local inside_links = {} --local block_links = {} -- источник - полный адрес. цель - номер в локальной сети. local exit_table = {} --local item_count = barter_manager_3.Get_Art_Count(section_item) if not din_functions_dlg then _G.din_functions_dlg = {} end din_functions_dlg[string.format("costprec_%s_%i", section_item, cost_increment_table[cnt_item])] = function(a, local item_count = barter_manager_3.Get_Art_Count(section_item) if cnt_item > item_count then return false end -- у ГГ нет столько артов этого вида local cost_level = af_memory.level local self_cost = af_ranks[section_item] + cost_increment_table[cnt_item] return cost_level == self_cost end local p_tbl = {string.format("din_functions_dlg.costprec_%s_%i", section_item, cost_increment_table[cnt_item])} local cost_level = af_memory.level din_functions_dlg[string.format("costact_%s_%i", section_item, cost_increment_table[cnt_item])] = function(a, barter_manager_3.set_af_memory(section_item, cnt_item, cost_level) end local a_tbl = {string.format("din_functions_dlg.costact_%s_%i", section_item, cost_increment_table[cnt_item])} local textn = ltx:r_string(section_item, "inv_name") local text = string.format("%s x %i", game.translate_string(textn), cnt_item) assembly_dialogs.assembly_phrase_ex(text, phr_tbl, phr_k, dlg, string.format("%s%i", type_key, 1), input_key, a_tbl, p_tbl) phr_k = phr_k + 1 exit_table[1] = string.format("%s%i", type_key, 1) --- после завершения формирования реальных фраз, надо обработать массив дополнительных линков. --phr_k = assembly_dialogs.final_link_BD(inside_key, inside_links, phr_tbl, phr_k, dlg, type_key) --phr_k = assembly_dialogs.final_blocklink_BD(block_links, phr_tbl, phr_k, dlg, type_key) return {phr_k, exit_table} --- возвращаем следующий свободный ид в таблице фраз, и таблицу полных ид фраз, являющихся выходами данного блока. end function buy_terminal_all(phr_tbl, phr_k, dlg, block_name, block_input_key) --[[ блок выбора оплаты, можно подключать к стандартно-формируемым диалогам. выбор производится по всем категориям средств оплаты структура: NPC Actor NPC чем расплатишься? -> [1 артефакт "А"] -> Хорошо, получаются у нас [2 артефакта "А"] вот такие условия сделки: [4 артефакта "А"] (вывод условий сделки) * * * [1 артефакт "B"] * * * ]] local exit_table = {} local exit_blocks_data = {} local text = "Чем расплатишься?" local PHR_id = block_name.."buy_terminal_all_input" local a_tbl, p_tbl = {}, {} assembly_dialogs.assembly_phrase_ex(text, phr_tbl, phr_k, dlg, PHR_id, block_input_key, a_tbl, p_tbl) phr_k = phr_k + 1 for k, v in pairs(af_ranks) do local a = 1 while a < 100 do local BD = barter_manager_3.dlgblock_select_costitem(k, a, phr_tbl, phr_k, dlg, string.format("sel_cost_all_%s_%i", k, a), PHR_id) phr_k = BD[1] local n_exit = BD[2] table.insert(exit_blocks_data, n_exit[1]) a = a * 2 end end text = "Итак, получается у нас с тобой сделка на таких условиях:" local PHR_exit = block_name.."buy_terminal_all_exit" local exit_created = false local exit_a_tbl = { "barter_manager_3.get_params_transaction" } for i, j in pairs(exit_blocks_data) do if exit_created then phr_tbl[phr_k] = dlg:AddPhrase("", assembly_dialogs.dia(PHR_exit), assembly_dialogs.dia(j), 0) phr_k = phr_k + 1 else assembly_dialogs.assembly_phrase_ex(text, phr_tbl, phr_k, dlg, PHR_exit, j, exit_a_tbl, p_tbl) phr_k = phr_k + 1 exit_created = true end end exit_table[1] = PHR_exit return {phr_k, exit_table} --- возвращаем следующий свободный ид в таблице фраз, и таблицу полных ид фраз, являющихся выходами данного блока. end Тут все наверно в курсе, что я занимаюсь разработкой мода "Судьба Зоны" который уже год. Ну так вот, выложенный здесь модуль - это одна из технологий этого мода. В несколько более горбатом виде, но понятном "для своих", этот модуль существовал в моде еще два года назад. Все до единого диалоги мода, были написаны с помощью этой технологии. Забегая дальше, кто-то может помнит, что у меня было в планах написать скриптовый гуи-интерфейс для окна диалога, планы эти никуда не делись, в версиях мода после 0.5 это все будет. И в частности могу пообещать что тот скриптовый гуи будет воспринимать диалоги, написанные по вот этой выложенной здесь технологии. https://yadi.sk/d/XxUqwIvthfeWo1 балл
-
дети кошку обозвали Фудзияма, кличут Фудзя или Фуся Характерная до безобразия, сестра жены даже её шугается когда в гостях, она на весь женский коллектив наш охотится.1 балл
-
А вот как по мне, чем больше артефактов, тем интереснее. Это как раз единственный элемент, которого не может быть много, в отличие от "стопицот оружий".1 балл
-
Критиковать все могут, но все таки 8 сотен это слишком. Как я делал арты из первого сборника: целью было дальнейшее использование в трансмутациях, поэтому я продумывал визуальное сходство с другими артами. Не со всеми так, были и полеты фантазии. Но я перфекционист, поэтому например те же текстурные развертки я вкрадчиво подгонял и использовал уже выбранные для конкретной модели текстуры. Это сложно, поэтому меня не хватило на второй сборник. Что я хотел сказать этим - придумать 800 разных артов весьма сложная задача, может лучше сделать небольшое количество качественных артов? А то, боюсь, получится конвейер из булыжников. PS: еще же и анимация, омг, как я про нее забыл, та еще запарка. PPS: удачи, я серьезно, это адский труд.1 балл
-
Тепловоз ТУ-4 который планировали разместить в Подземельях Припяти товарищи из GSC, но после смены концепции от месторождения (переехало в рыжий лес)\экскаватора (переехал в карьер)\вагонеток (переехали в рыжий лес) решили отказаться, и он исчез. Скачать: Я.Диск Авторы: GSC1 балл
-
800 конечно много! Из всех моделей выбрать 150-200 самых удачных и для них придумывать названия. На данный момент слушаю книги По тематике Сталкер , слышал очень много новых названий и истории есть связанные с ними. Буду по свободней напишу что помню.1 балл
-
1 балл
-
Ыыыыы Оно вроде как и грешно смеятся, но не удержался, простите уж на глаза попалось *9.Колобок-маньяк* одел такой и погнал по зоне кровососов насиловать..1 балл
-
Да нет, скорей проблема в том, кто и каким местом их делает. Ну и "И так сойдёт" тут тоже решает.1 балл
-
Это делал DEXXX при моём непосредственном участии. Изначально, ЕМНИП, там были бандиты (в кривой версии 1.7, которую мы затем начали дорабатывать всем сообществом). Я тогда мало что понимал в группировках и их настройках (да и сейчас не особо лезу за пределы скриптов). Вот почему DEXXX решил так поступить - сказать не могу. Может, так ему было проще и быстрее, чем создавать новую группировку. Ведь последние правки этих персонажей в Лиманске и за мостом в РЛ делались им буквально перед выпуском финальной версии OGSM, за пару недель до этого. Можно считать, что практически на коленке.1 балл
-
@monk, ну смотри сам. Момент не такой уж и критичный - вполне можно смириться с этим "костылём". Хотя не знаю, почему Alex Ros поступил именно так - а не сделал из бандитов в Лиманске просто "обособленных" бандитов. Но а так вообще, "Ренегаты" - это небольшая группа отщепенцев, объединённых судьбой. Не думаю, что их даже можно называть группировкой. Так что вряд ли они дальше Болот нос суют. А достижение ими Лиманска - это вообще немного абсурд. У них ведь нет ни чёткой организации, ни возможности добычи продвинутого снаряжения. У бандитов таких проблем, думаю, нет. Поэтому их продвижение к центру Зоны выглядит куда более логично и обоснованно. Но повторюсь, Ренегаты в Лиманске - это всего лишь "костыль" ради сохранения баланса. И, думаю, многие игроки всё равно представляют их именно бандитами.1 балл
-
В папку на ЯДиске залил архив с недостающей текстурой item_helm_gp7.dds. Ссылка: https://yadi.sk/d/v7tRx2J3iQHGS1 балл
-
@Dimus, наследие дефолта. Прошу читать тему внимательнее. Вот мой пост: http://www.amk-team.ru/forum/index.php?showtopic=12743&p=954759 В котором, в частности, написано: То есть данные НПС всегда будут враждебны к ГГ. Если описание нечёткое, то поправлю, во избежание недоразумений. Новый вариант описания: - Теперь НПС из группировки «Бандиты» по квестам на Кордоне, ТД и Агропроме будут всегда враждебны по отношению к ГГ. При убийствах данных НПС у ГГ не будет падать репутация в группировке «Бандиты». - Теперь не должна падать репутация ГГ в группировке «Нейтралы» при убийствах НПС «Нейтралов» в РЛ и нападении на Стрелка в РЛ и на ЧАЭС. З.Ы. И попрошу конкретизировать к кому именно ты обращаешься со своими вопросами. Твои вопросы в "пустоту" раздражают. Не нравлюсь я, претит обращаться ко мне лично - прошу не заходить в тему и ничего тут не писать. Если проигнорируешь мою просьбу, то отвечать на такие твои посты более не буду.1 балл
-
А я коту на работу купил мойвы, а он не жрёт её. Придётся мне котом побыть и пожрать мойвы сегодня.1 балл
-
1 балл
-
@Vadyanchikus, посчитай в ручную массу всех предметов, выведи в например лог с округлением хоть до десяти знаков, и сам убедись . В общем игра не округляет, я при своем мнении, и могу пруфануть .1 балл
-
Подтверждаю - аналогичный вылет на Янтаре, только у меня без лога. Обойти не удается.1 балл
-
1 балл
-
Это касается абсолютно ЛЮБОГО человека, который за время своей жизни давал хотя бы одну подписку о секретности. При чём степень допуска иной раз не имеет значения. "Невыездность" данного индивидуума, будет зависеть от личности сидящей в 1 отделе ОВиРа. Будет плохое настроение - станешь невыездным, даже с 3 допуском. Меня так разок дёрнули "в кабинет", где полковник с проницательным взглядом и холодным сердцем, сказал : " А ты знаешь что ты невыездной, и куда ж ты милок собралси то, радимааай ? ". Но взглянув в мои честные, патриотические глаза, понял....что секретов которые я позабыл, я уже и не выдам никогда. Так я стал "выездным". Впрочем надолго ли, кто знает ? Возможно до следующей "загранки".1 балл
-
Я вас приветствую, земляне, Даю вам инфу из Арктура. Хочу открыть завесу знаний, У вас не жесткая натура. Подвижность вашего мышленья От смерти нынешней спасает. В потоке волеизъявленья Вибраций тонких поднимает. В раскрытьи нужного портала, Совсем немного вам до грани. Природа-мать от зла устала, Но надо вспомнить, вы земляне! Не стоит "темным" поклоняться, Иначе свет в себе убьёте. Нельзя быть жестким и бояться, И в благе солнца расцветёте. Нельзя нести пороки в сердце, Что души грязью разрушают. Вам никуда теперь не деться От перемен, что наступают. В потоке волеизъявленья Подняться трудная задача. Но в деле мега становленья Ваш Дух не полностью растрачен. Мы расположим в небе фильтры И руку помощи протянем. По растянувшимся орбитам Весь негатив в "ничто" затянем. - Ежели шо - ушол в астрал1 балл
-
Посмотрел исходники на предмет оффлайн-перемещения. По каким-то причинам перемещение по путям там напрочь заблокировано, плюс некоторые экспортируемые функции не работают. Но это можно исправить. Во-первых, в файле alife_monster_movement_manager_script.cpp надо исправить экспорт метода path_type. Во-вторых, в файле alife_monster_patrol_path_manager.cpp надо добавить метод1 балл
-
@monk, не знаю, как он читает, но здесь Dimus оказался невнимательным. Он сказал, что нейтральные отношения между "Бандитами", "Ренегатами" и "Свободой" - моя больная фантазия. Я чётко сказал, что это было ещё в дефолте ЧН. Не имею к этому никакого отношения. Только ребёнок не поймёт... @Priboj37, зачем переписывать сюжет?.. Бред какой-то. Вы знаете, что такое "Легенды о Зоне в стиле OGSM"? Ознакомьтесь, поиграйте хоть разок в этот мод...1 балл
-
Я так на этой песне проиграл человеку ящик водки. Спорили до пены изо рта, чуть до драки не дошло. А потом он мне показал старинную книжку с этими стихами. Скажем так... был сражён наповал...1 балл
-
Смотря как посмотреть... Кто-то приписывает авторство именно этой песни конкретному лицу.1 балл
-
Четыре вида текстур землепокрытия. Какая придется по душе, той и пользуйтесь. В архиве все четыре вида: https://yadi.sk/d/FyNaKRlJiCucB Установка: копировать в папку mods. Удаление: просто удалить из папки mods Сделал скриншоты: zemlia2: zemlia: zemlia_relief: zemlia_OGSE: Пятый вариант ( сам предпочитаю его ): Ссылка: http://rghost.ru/6qFTc8wdm1 балл
-
К выше сказанному хочу добавить, что нужно хорошо думать прежде, чем набивать свой ник при регистрации. Это имена нам даны родителями, не спрося нашего желания, а ник сами выбираем.1 балл
-
Так можно ж тупо удалить этот рестриктор - aes2_space_restrictor_eartquake как глючный объект, после первого же захода на ЧАЭС-2, когда тряска первый раз запускается.. Чтоб не мешала монолитовцев отстреливать, пока по всем телепортам прыгаешь. В ОП-2 - выйти в Гл. меню - настройки игры, вписать название рестриктора в строку удаления глючных - применить, вернуться в игру - сохраниться - перезагрузиться.. Все. И не нужно никаких лишних ковыряний и добавления лишних файлов в свою геймдату с правками.1 балл
-
Вот мой город Новочеркасск Новочеркасск столица мироваго казачества.Также у нас есть НПИ знаменитый унИверситет в котором учатся люди с разных стран(даже китайцы). Что-то фотка первая не открывается. И почему такое мелкое? В превью нельзя было запихнуть? Дыда1 балл
-
Тесла. Создаётся аномалией "Электра" в течении первых 10 минут Выброса. Представляет собой несколько замкнутых контуров из сверхпроводящего металлополимера и органическую структуру органов эвристического анализа и жизнеобеспечения. Обладает значительным электрическим зарядом, сохраняет работоспособность в течении двух-трёх недель. Количество нервных узлов колеблется от семи до одиннадцати. Изолированная псевдокровеносная система. Питание от организма носителя получает через плацентарный орган. Взаимообен веществ при этом не столь эффективный, как у адаптантов с прямой системой питания. Для активации следует размещать на локтевом сгибе, в подмышечной впадине, ключичной ямке. Обязательным условием является хорошая "венозность" кожи в месте контакта. Активно потребляет гликоген из крови носителя, несколько нарушая при этом инсулиновый баланс. В рацион питания носителя при использовании "Теслы" следует включать повышенное количество высокогликемических углеводов. Для этой цели хорошо зарекомендовал себя автоиньектор с раствором глюкозы. Основное защитное действие "Теслы" заключается в генерации магнитных полей с хаотически меняющейся частотой (так называемый "белый шум"). Реагирование нервных центров на повышенную напряжённость электрических полей вокруг симбиотической пары "артефакт-носитель" колеблется от двух до пяти наносекунд. Уровень электромагнитного поля в достаточной мере защищает носителя от статических электроразрядов до семидесяти киловольт включительно... Так может выглядеть "батарейка"1 балл
-
Симбион. Сложный конгломерат, состоящий из нервной ткани и кремниевых полимеров. Артефакт действительно живой, обладает запасом питательных веществ, что позволяет ему находиться в спящем состоянии до двух недель. Адаптация к организму носителя происходит в течении часа. Для активации размещается в районе четвёртого шейного позвонка. В течении первой фазы, длящейся около пятнадцати минут, выделяет сложный гормональный комплекс, проникающий через эпителий и подготавливающий организм носителя к симбиозу. Вторая фаза протекает от пяти до десяти минут, при этом проникновение псевдоподий-катетеров в сонные артерии сопровождается небольшим наркотическим эффектом. После объединения кровеносных систем, наступает третья, окончательная фаза внедрения в ЦНС... Сахаров приходит в ярость, когда его спрашивают, как ЭТО работает. Все попытки создать эквивалент как в лабораторных условиях, так и в аномалиях, оказались безуспешными. Встречается крайне редко, основной источник - Закрытые Территории, изолированные в ходе войны Чистого Неба и находящиеся под контролем Тёмных. Неизвестно, какие ритуалы проводят лидеры Клана при создании Симбиона, однако, обрывочные сведения из доклада Хемуля указывают на сложную последовательность добровольных жертвоприношений членов Клана с высокой социальной значимостью...1 балл
Эта таблица лидеров составлена Москва/GMT+03:00
УЧИМСЯ МОДДИНГУ
ИГРАЕМ В МОДЫ НА ТЧ
ИГРАЕМ В МОДЫ НА ЧН И ЗП
- [ЧН] OGSM CS 1.8 CE Fixes
- [ЧН] HARDWARMOD 3.2
- [ЗП] The Long Road
- [ЧН] New vision of War
- [ЧН] Old Good Stalker Mod - Clear Sky
- [ЗП] Unofficial Patch
- [ЗП] Смерти вопреки
- [ЗП] Контракт на хорошую жизнь
- [ЗП] Shoker Weapon Mod 2.1
- [ЗП] Hardcore pack for SGM 2.2
- [ЗП] Контракт Синдиката
- [ЗП] Клондайк 2.0
- ...и другие моды
ПОЛЕЗНОЕ И РАЗНОЕ