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

Таблица лидеров

  1. yurv3

    yurv3

    Жители


    • Баллы

      9

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

      1 153


  2. Каин

     Каин

     Ветераны


    • Баллы

      8

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

      6 855


  3. SergeT

     SergeT

     НС


    • Баллы

      7

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

      10 451


  4. krokus

    krokus

    Жители


    • Баллы

      6

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

      6 333


Популярные публикации

Отображает публикации с лучшим балансом оценок с 29.09.2017 во всех приложениях

  1. Я бы на месте Мессера обиделся... Ходит рядом такой весь крутой из себя Меченый и жлобится аптечку дать.... Впрочем, у неписей (даже квестовых) мозгов не так уж и много.
    5 баллов
  2. В общей сложности за 46 годов получается две дочки и внук.
    3 балла
  3. Женюсь! В пятницу, 13-го октября, с утра пораньше, затем купля "двушки" и анальное рабство лет на пять-семь... Восемь лет в грехе жили, а тут на вот тебе, свабдя! Всё как у людей.
    3 балла
  4. @Yuri1957 Это для того что бы перейти на Янтарь не выполняя квестов на ДТ. Бутылкой можно открыть замок в туннеле.
    3 балла
  5. @W.A.S.P. за классику всегда плюс!
    2 балла
  6. @Каин Для тебя - Женюсь
    2 балла
  7. @Vic333 , Привет! Я на ap-pro скачал правку,(от drCarabas) что бы выкинуть все барахло ненужное, нормально, инвентарь в поряде.
    2 балла
  8. @tanzwut . Привет! Дело в том, что в моде просто не проработана система квестовых предметов( те же ключи-записьки-листочки-артефакты, что-то сразу пропадает, что-то остаётся навсегда без возможности это барахло выкинуть)). Можешь сам поправить в файле: quest_items.ltx . Названия придётся самому понимать. Краткое описание присутствует в самом файле. Удачи!
    2 балла
  9. у нас в Иваново так же было в карауле, до -43-х доходило...это когда выходишь из караулки на пост и при вдохе обжигаешься воздухом...водила так вообще спал в заведенной машине ( тоже 66-й был ) и не глушил ее...дык это ему еще ничего, в теплой то машине...а нам каково было - постовым? все лезли кто куда, лишь бы не отморозиться...сам сбивал замки в домиках, где каждая эскадрилья проводит предполетную и топил кочегарку...если был пост не на аэродроме ( арсенал там или гсм ), то разводил костер в пулеулавлывателе, накрывал его досками и спал практически на углях 89-91...
    2 балла
  10. На вышке. Ну, на территории вышка, где вход в "варлаб".
    2 балла
  11. Говорили тут как-то, что вертолёт на Генераторах плохо сбивается, ну там гаусс нужен. Ага, фигаусс. Только что сбил эту железяку из винтовки Мосина. Не зря она мне всегда нравилась, жаль, нет пехотного варианта, без оптики.
    2 балла
  12. Пацаны вот почитайте перед сном.....я второй раз поменее ржал, но усе равно.
    2 балла
  13. Привет, Бродяга! Обманки дает рандомно, синие и зеленые - лут или арт, а вот красные - после их активации у многих был вылет, решай сам...
    2 балла
  14. @nik1967 Я думаю, что объяснение гораздо проще: к тому времени всем разрабам все было до лампочки.
    2 балла
  15. Motor-Roller - Опоздавший герой рок-н-ролла (Official Lyric Video)
    2 балла
  16. @yurv3 у меня весь хабар был. Пронёс. @nasar75 знает как.
    2 балла
  17. Ошибки (опечатки) обнаружил чисто случайно на 4 патче.... лезем в task_manager.script Находим вот такой код: local soNPC = type(t.selected_target) == 'number' and alife():object(t.selected_target) if not (soNPC and IsStalker(soNPC) and soNPC:alive()) then tTask.status = "completed" return true --/> stalker died => quest finished end и меняем на: local soNPC = type(t.selected_target) == 'number' and alife():object(t.selected_target) if not (soNPC and IsStalker(soNPC) and soNPC:alive()) then t.status = "completed" return true --/> stalker died => quest finished end И даллее: local soStrn = alife():object(tTask.selected_target) --/< 'id_or_sid' local gulag = soStrn and soStrn.gulag if gulag and gulag:get_population_comed() == 0 then log("task_fail:=[%s]/[%s],Target(%s)=[%s]<~not_Pop:[%s]", task_id, p1, soGulag ~= nil, t.selected_target, "Info!") --/#~# t.status = "failed" t.last_task_time = Get_PastSeconds() -- Теперь хранит время в секундах от начала игры return true --/> no population => quest failed end Соответственно меняем на: local soStrn = alife():object(t.selected_target) --/< 'id_or_sid' local gulag = soStrn and soStrn.gulag if gulag and gulag:get_population_comed() == 0 then log("task_fail:=[%s]/[%s],Target(%s)=[%s]<~not_Pop:[%s]", task_id, p1, soStrn ~= nil, t.selected_target, "Info!") --/#~# t.status = "failed" t.last_task_time = Get_PastSeconds() -- Теперь хранит время в секундах от начала игры return true --/> no population => quest failed end И вообще что за маразм писать скрипты на венгерке?Я на 100% уверен что где-то есть еще ошибки
    2 балла
  18. Лучший спавнер всех времен и народов(со сканированием конфигов) можно взять в подписи у naxac.
    2 балла
  19. Но, для рожденных в России - это просто игра, а для нас ностальгия...
    2 балла
  20. Да мы тут все земляки. Особенно в СССР рождённые.
    2 балла
  21. Дом на болоте . Догадываетесь кто там живет ))
    2 балла
  22. Добавлена кнопка "Цитировать пост в личку" (иконка конвертика около даты поста). При ее нажатии создается новое личное сообщение автору поста с полным цитированием этого поста.
    2 балла
  23. это особенно интересно будет...дыхнул таки на химеру - она и бежать! с похмелья весело будет бегать - всё зверье будет от тебя удирать, вместе с монолитом...а то, злой сталкер с перегаром, да исчо при оружии!
    2 балла
  24. @ed_rez а скинь, пожалуйста, сейв коло арта, шибко хоцца одну теорию проверить... Ну я же говорил, что сработает: http://my-files.ru/5yl7wj
    2 балла
  25. @Незнайка13 Держи, на месте переход - http://rgho.st/8VJjQYyX4
    2 балла
  26. @ANARCHIST . Привет Бродяга! Как бы этот античит особо и не нужен. Прыжёк править не особо то и нужно. Есть стандартные методы( ремонт машин, просто запрыгнуть с обрыва( таже Окраина)), либо ещё проще дистанция обыска(взятия).Вес чуток посложней, мороки многовато, но зато абсолютно безпроблемный и усталость как рукой снимает. Удачи!
    1 балл
  27. Да, почему-то некоторые ключи можно использовать только 1 раз, а потом они пропадают.. Другие же, делаются невыбрасываемыми и становятся мёртвым грузом до конца игры
    1 балл
  28. В том-то и проблема. Насколько я помню, понятие "оксюморон" применяется к фразе. К фразе, а не к целой "песне". И когда в течении 3-5 минут слышишь этот "поток сознания", то ассоциации возникают только с химическими препаратами или там неправильными грибами. Такое вообще искусством считать не хочется, не то чтобы ещё и оценивать. ИМХО и всё такое, разумеется.
    1 балл
  29. Тогда на вот такую послухай Там просто дядька стих читает под музыку. Мне лично этот кавер не понравился. Не понравился настолько, что я отписался от этого чувака. Пусть дальше скатывается.
    1 балл
  30. Возможно, переборщил с разгоном. При наличии разгона и присутствии непонятных вылетов, первым делом следует откатиться на штатные частоты.
    1 балл
  31. @arrafal Деньги особо не копи - в конце игры поймёшь почему.
    1 балл
  32. Ни в жизнь не вылетает! Игра заканчивается. Было несколько вылетов, когда более 4-5 часов не выходил из игры. Были в Припяти вылеты по "плохим" путям у монолитовцев. Но в последнем патче вроде было поправлено, больше не вылетало.
    1 балл
  33. Я уж не знаю как оно сделано, но что-то по логам я не припомню, чтоб в Соли на каждый заход на локу вызывался код на поршень. А итем мог быть поднят на локе неделю назад. Значит есть методы обхода. Шах ведь не пишет что конкретно он задумал и что собственно хочет от всей этой рецептуры. Толку то переливать из пустого... Напишет, тогда сразу будут конкретные примеры.
    1 балл
  34. 1 балл
  35. @Invension попробуй снова первый день: - https://drive.google.com/open?id=0B0h2HnCBW9H1cy1scFdlTk1mZDQ - https://yadi.sk/d/RK854XUB3GDELh
    1 балл
  36. @dsh Слишком упрощаешь. Не просто поршень, а внутри поршня ещё артикль с описанием рецепта в ПДА + ещё проверка на наличие поршня при варке вручную или трансмутатором в амк_мод.скрипт + ещё парочка каких нибудь проверок, о которых я и понятия не имею. Скорее всего он хочет делать новый рецепт, а не юзать старые. А это уже не так просто.
    1 балл
  37. Пусть Денис вырежит побольше мутантов и добавит побольше неписей.
    1 балл
  38. @Dennis_Rogers на карте должна быть отметка - место примерно то, с которого ты телепортировался.
    1 балл
  39. @Пришелец Рандомно @tanzwut Я если все расскажу играть то интересно будет? На Янтаре будет квест. который можно пройти как автор задумал, а можно прибегая к различным хитростям. Игровым и не только. Вот при прохождении данной миссии обманки могут пригодиться.
    1 балл
  40. Эти обманки я применял чтоб вернуться к нему с "дозой", другого применения не нашел. Рандомно не было, одну и тоже выдавал.
    1 балл
  41. нет просто вы берёте задания у прапора находите 10000 рублей и тут задания не возможно было выполнить после этой правки вы идёте и вызываете хрипатого хью и и говорите с ним о паспорте
    1 балл
  42. у кого проблемы с выполнением задания Новая Жизнь на АС вот решения этой проблемы https://yadi.sk/d/hIe9o-p73NJspe
    1 балл
  43. Говоришь, админы проигнорировали? Ну да, я вспомнил, что этот фикс собирал я сам, поскольку уже тогда разработчики на все забили. Просто свел воедино правки гранат от ko1jana и положил скрипт квеста на неизвестный арт от патча 2.10 (без буковки R), где этот квест работал нормально. Надо было сразу от него квест брать. В патче 2.10R теперь есть возможности мирно получить пистолет-уник от Кузнецова, а потом проходить под мостом за символические деньги, мирно разойтись с Жекой в х18, чтобы получить от него документ и что-то еще в таком духе. Но патч 2.10R требует новой игры. Нет, не сработает, проверено.
    1 балл
  44. Выкладывай. Только простыни под спойлер не забывай прятать.
    1 балл
  45. Люди, если я тут выложу свои правки, никто не будет против?
    1 балл
  46. Создание первой игры на Unity: Часть 1. Сложность: Легко. Версия движка:5.6.2f1. После того как Вы зайдёте в редактор движка Вам однозначно станет интересно что можно сделать в нём, я по секрету скажу многое, но делать BF4 мы не будем, зато сделаем свой маленький шутер,Вы спросите почему именно шутер, а не какой нибудь там платформер, я скажу что это было-бы слишком легко для начала, а вот сделать проект после которого можно будет браться за любые другие проекты можно, и это не будет трудно. А теперь о целях данного урока, в этом уроке я расскажу как можно сделать самое примитивное управление персонажем а именно вертеть "головой". Для начала создадим основу игрока, в данном случае это можно сделать несколькими путями, но результат будет один и тот-же. За основу я выберу капсулу, почему капсулу? Потому-что она больше подходит для имитации формы человека. Что-бы создать капсулу кликните в иерархии ПКМ(Не пулемётом, а правой кнопкой мыши) по пустому месту и у Вас появиться следующее окно. Далее жмём на пункт "3D Object' и выбираем пункт "Capsule", вот скриншот того где лежит эта самая капсула(для самых маленьких). После того как нажали на капсулу она должна появиться на сцене и в иерархии. Если не видно на сцене то щёлкаем в иерархии на объект с названием "Capsule" и жмём сочетание клавиш shift+f, тогда Ваша капсула должна быть видна в сцене. Примерно так должна выглядеть сцена после того как Вы добавите капсулу. Теперь нужно эту капсулу переместить в нулевые координаты на карте, для этого щёлкнем в иерархии на объект капсулы и посмотрим в окно инспектора. Окно инспектора выделено красной рамкой. В нём есть несколько раскрывающихся окон, нам нужно окно "Transform". В данном окне указаны координаты объекта, его градусы поворота и размер. Следует заметить что в данном случае у объекта глобальные координаты. Вы спросите какие бывают ещё координаты, я отвечу локальные, Вы спросите в чём разница, я отвечу что глобальные координаты являются координатами самого первого "родителя" в группе объектов, как в Unity такие объекты называются по научному я не знаю, но я знаю что в других программах(движках, 3Д редакторах и прочих программах) они называются Рут нодами или Root node, т.е. главная нода(не узел, а нода) в цепочке нод. Локальные же координаты это координаты "ребёнка" в "родителе", т.е. отсчёт идёт от координат "родителя". Вы спросите кто эти все "Родители" и "Ребёнки", "Родителем" является объект в котором есть вложенный в него объект("Ребёнок"), при этом Родитель может являться и "Ребёнком". Увидеть расположение объекта по координатам можно тут. Ещё обращу внимание что у Rotation есть четвёртый параметр, это ось w, о ней поговорим потом. С размером ничего особенного не происходит. У любого объекта координаты располагаются в трёх осях, это X,Y,Z, X - перемещение объекта в право/влево, Y - перемещение объекта вверх/вниз, Z - перемещение объекта вперёд/назад. Теперь после того как Вы узнали что за что отвечает в Transform'e сделайте координаты капсулы нулевыми по всем осям. Просто щёлкните на поле со значениями и введите везде нули в "Position". Сделали? Отлично. Теперь создайте сферу и обнулите её координаты. После того как обнулили координаты переместите сферу в капсулу, сделать это можно просто щёлкнув ЛКМ по сфере и зажав кнопку перетащить сферу в иерархии на капсулу. Всё , Вы сделали сферу "Ребёнком" капсулы и у Вас должно получиться примерно следующее. Теперь нужно сделать главную камеру(это объект под названием "Main Camera") дочерней для сферы, но перед этим обнулите её координаты. Готово? Отлично. Так должна выглядеть сцена с иерархией после всех преобразований. Как Вы заметили "голова" смотрит из центра тела, это не дело, переместите сферу на один юниметр(юниметр равен одному метру) вверх и "голова" будет на месте, теперь стоит отключить отображение меша. Сделать это можно отключив компонент "Mesh Renderer" в инспекторе. Сделать это можно нажав на чек-бокс(кубик с галочкой) около названия компонента в инспекторе объекта. Проделав все манипуляции всё должно выглядеть так. Теперь осталось добавить пол. Нужно добавить примитив "Plane" и переместить его на нулевые координаты. После того как поместили "Plane" в нулевые координаты нужно поднять капсулу на 1 метр Должно получиться примерно так. Всё, подготовка закончена, можно приступать к скриптингу. Скрипты будем писать на C#. Первый скрипт который мы будем писать это скрипт на осмотр окружающего пространства. Что-бы создать новый скрипт нужно нажать в окне с ассетами ПКМ и выбрать пункт "Create" из выпадающего списка выбрать пункт "C# script" и создаться новый файл скрипта, при создании нового файла ему можно сразу-же прописать "имя", в данном случае мы удалим стандартное "NewBehaviourScript" и напишем "MouselLook". После этого щёлкаем дважды на файл скрипта и у Вас должна открыться MonoDevelop(Далее MD), это стандартная IDE поставляемая с Unity, но я буду работать с Visual Studio 2015(Далее VS), для кодинга вообще можно использовать и блокнот, но так как Вы новичок( наверное, я предполагаю что Вы ничего не знаете что и как настраивать) то желательно работать в IDE, я выбрал VS так как она намного удобнее для программирования под Unity на C#, ну да ладно, от лирики к делу, если хотите кодить на VS то её нужно скачать и установить, и установить дополнительные пакеты для работы под Unity, после того как всё сделали переходим в Unity и жмём в меню на пункт "Edit" а далее в выпадающем списке выбираем пункт "Preferences", открывается следующее окно. Переходим в пункт "External Tools" и жмём на кнопку в чёрной рамке и выбираем из списка VS. Всё, закрываем данное окно, настойка завершена. Открываем скрипт в VS и видим примерно следующее. Объяснять синтаксис я не буду, если надо вести уроки по шарпу то могу устроить и их, но сейчас не буду. Приступаем к делу. Объявляем две переменных(тип float) отвечающих за чувствительность мыши. Я назову их senHorX и senHorY. Теперь нужно создать две переменные(тип float) для ограничения вращения "головы" по координате X(X в rotation это вертикаль, Y горизонталь) их я назову minVertX и maxVertX, теперь добавим две переменные типа GameObject, это переменная хранит в себе информацию о любом игровом объекте, в данном случае мы будем использовать данные переменные для того что-бы вращать родитель по оси Y, а ребёнка по оси X. я их назову child и parent соответственно. После всего этого нужно создать две переменные для значения получаемые от мыши, я их назову x,y. Вот что должно быть после всех телодвижений. Теперь нужно присвоить значения получаемые от мыши значениям переменных x,y. Выглядеть всё это дело будет так. Что-же такое я написал? разберём строчку x = Input.GetAxis("Mouse Y"); Тут присваивается переменной x значение функции GetAxis(название оси) из интерфейса Input, интерфейс Input ответственен за приём сигналов от устройств ввода, метод GetAxis принимает в качестве параметра название ось мыши и возвращает её значение переменной которой он присваивается. Что-бы было какое-то ускорение(замедление) поворота головы при движении мыши мы умножим значение GetAxis(название оси) на переменную созданную ранее, а именно senHor(название оси). Что-бы значение изменялось одинаково при любом FPS мы используем Time.deltaTime, переменная deltaTime интерфейса Time возвращает значение времени прошедшее за последний кадр, а интерфейс Time отвечает за действия со временем в данном движке. После всего что мы сделали должно получиться следующее. Но перед тем как приступить к дальнейшей писанине нужно подправить код, а именно дописать - перед = в 18 строчке, что-бы получилось что мы не присваиваем, а вычитаем из данной переменной значение что-бы потом не мучить себя в будущем. Вот скрин. Переходим к ограничиванию переменной x. Присваиваем x результат работы следующей строчки Mathf.Clamp(x, minVertX, maxVertX); Что-же тут происходит? Мы используем функцию Clamp из структуры Mathf которая принимает в качестве первого параметра текущее значение и ограничивает его минимальным/максимальным значением, если изначальное значение больше максимального или меньше минимального то значение принимает тот или иной предел. Всё должно выглядеть так. теперь переходим к самому главному, повороту объекта, сделать это можно следующим образом. для родителя :parent.transform.localEulerAngles = new Vector3(0, parent.transform.localEulerAngles.y + y, 0); и для ребёнка:child.transform.localEulerAngles = new Vector3(x, 0, 0); разберём код для родителя и для ребёнка в общих чертах, мы берём переменную класса GameObject и вызываем свойство transform(это свойство содержит различные данные о Transform компоненте объекта которые можно использовать) дальше вызываем свойство localEulerAngles(это свойство как раз содержит данные rotate из компонента transform в объекте) что-бы изменить эти данные(они типа Vector3, Vector3 это тип данных который содержит три числа x,y,z) нужно присвоить данной переменной переменную данного типа, что и происходит после знака = . отличия лишь в том что у родителя идёт присвоение переменной которая равна сумме значений старого значения и переменной y, а у ребёнка сразу готовое финальное значение. Вот скрин. Теперь после того как мы дописали данный скрипт можно его сохранить и переходить в редактор, после некоторого количества времени ожидания скрипт скомпилируется и можно будет запускать игру и повертеть мышкой что-бы увидеть что скрипт работает, но не забудь добавить скрипт к объекту, сделав это можно просто перетащив скрипт на любой игровой объект, желательно на сферу, после того как перетащили скрипт, нужно заполнить пустые значения в инспекторе. Всё выглядеть должно так. Всё, можно запускать игру. Вот скрин. Всё, я завершаю данную часть этого урока.
    1 балл
  47. [stalker_terrain] 255,000,255,255 008,001,255,255;Разрешено ходить по опасным местам на баре 012,001,255,255;Разрешено ходить по опасным местам на Милитари У каждого геймвертекса в гейм.графе есть поле type(по GraphViewer), а в stalker_terrain записано что-то вроде маски. На баре у геймвертексов type бывает 08, 00, 00, 00 и 08, 01, 00, 00 Собственно расшифровка чисел в файле game_graphs.ltx location_0 - первое число, location_1 - второе и так далее В ЧН/ЗП добавили в типы гейм-вертексов еще и привязку к смарттерейнам - как я понимаю, чтобы через вражеские лагеря не ходили. Также добавились функции: add_location_type, clear_location_types При переходе из смарта в смартc помощью этих функций НПЦ добавляются новые stalker_terrain Кстати, по поводу инфопорций в ЗП: в хмл прописывать их необязательно - можно выдавать абсолютно любую инфопорцию. И теги(типа action, disable) не работают Дополню про money и infinitive, на форуме периодически проскакивают вопросы про это <money min="100" max="500" infinitive="1"/> Если поставить infinitive = "1", то денег у него все равно будет столько, сколько прописано в max. Просто при начале каждой торговли количество денег будет устанавливаться в max
    1 балл
  48. Продолжим. На очереди система профилей сталкеров, включая систему генерации имён. Если коротко, то система профилей такая: - В секции сталкера указан параметр character_profile. Если не указан, то принимается значение default. - это имя указывает на профиль из файла, который прописан в system.ltx в разделе [profiles] в параметре files. Обычно это config\gameplay\npc_profile.xml - По информации из этого профиля и по специальному алгоритму уже выбирается один из профилей, содержащих конкретную информацию о NPC. Все эти профили находятся в нескольких файлах, перечисленных в system.ltx в разделе [profiles] в параметре specific_characters_files. Теперь подробнее. Вот пример файла с двумя вариантами создания character profile: <?xml version='1.0' encoding="UTF-8"?> <xml> <character id="profile_1"> <specific_character>specific_character_profile_1</specific_character> </character> <character id="profile_2"> <class>class_name</class> <rank>500</rank> <reputation>300</reputation> </character> </xml> Два этих варианта определяют два разных алгоритма выбора конкретного specific characters profile. Первый вариант profile_1 содержит тег specific_character, который указывает на конкретный specific characters profile. В этом случае все остальные теги игнорируются. Этот вариант используется к примеру для актора. Его можно использовать для разных квестовых персонажей. Второй вариант profile_2 используется для выбора одного из многих возможных профилей, используя параметры class, rank и reputation. Алгоритм выбора будет описан далее. Пример файла с профилем персонажа: <?xml version='1.0' encoding="windows-1251"?> <xml> <specific_character id="specific_character_profile_name" no_random = "0" team_default = "1"> <class>class_name_1</class> <class>class_name_2</class> <bio>...</bio> <npc_config>...</npc_config> <icon>...</icon> <name>...</name> <panic_threshold>...</panic_threshold> <hit_probability_factor>...</hit_probability_factor> <crouch_type>...</crouch_type> <critical_wound_weights>...</critical_wound_weights> <visual>...</visual> <supplies>...</supplies> <snd_config>...</snd_config> <terrain_sect>...</terrain_sect> <community>...</community> <rank>...</rank> <reputation>...</reputation> <money min="100" max="500" infinitive="0"/> <start_dialog>...</start_dialog> <actor_dialog>...</actor_dialog> <actor_dialog>...</actor_dialog> </specific_character> </xml> no_random исключает данный профиль из списка случайного выбора (см. далее описание алгоритма выбора) team_default включает профиль в список дефолтовых при случайном выборе (см. далее описание алгоритма выбора) no_random и team_default не могут быть установлены одновременно. class - по этому параметру будет найден профиль. Этих тегов может быть несколько, т.е. разные character_profile с разными классами могут ссылаться на один и тот-же specific_character_profile. name - человеческое имя персонажа. Алгоритм генерации описан далее. icon - иконка персонажа в окне торговли panic_threshold - некое пороговое значение для паники. Непонятно, влияет ли на что-то. hit_probability_factor - фактор "меткости" сталкера. При нуле будет мазать стопроцентно. crouch_type - тип приседания: 0 - обычное, 1 - низкое (у бандитов такое), -1 - случайный выбор critical_wound_weights - какие-то весовые коэффициенты. Обычно выглядит так: <critical_wound_weights>75,25,25</critical_wound_weights> как-то управляет параметрами ранения, но как именно - не знаю. visual - путь к модели supplies - стартовый инвентарь. Примеры смотри в игре. snd_config - имя папки, из которой берутся звуки terrain_sect - ссылается на секцию в system.ltx. Пример такой секции для сталкеров. [stalker_terrain] 255,000,255,255 008,001,255,255;Разрешено ходить по опасным местам на баре 012,001,255,255;Разрешено ходить по опасным местам на Милитари Что-то это всё означает, но что - точно не знаю. community - группировка rank - ранг reputation - репутация money - количество денег. Имеют значение только атрибуты min, max и infinitive. Значение тега задавать не надо. infinitive имеет смысл задавать для торговцев. start_dialog - стартовый диалог. Это диалог, с которого всегда начинается общение. Первым в нём говорит собеседник. Стартовый диалог может быть только один. Если не задан, то устанавливается диалог с именем "hello_dialog". actor_dialog - диалог актора. В этом диалоге первую фразу говорит актор. Этот дилог можно начать после того, как закончится стартовый дилог. Их может быть несколько. читаются, но не используются bio - биография, в игре нигде не отображается. npc_config - понятия не имею, зачем нужен. Обращаю внимание на то, что часть параметров дублируются здесь и в секции спавна. Что имеет приоритет, точно не знаю. Только насчёт визуала точно знаю, что берётся именно из профиля. Теперь об алгоритме выбора профиля для варианта с тегом class. Профилей specific_character с одним классом может быть несколько. Движок находит все профайлы, в которых присутствует тег class с нужным значением (напоминаю на всякий случай, что тегов class может быть несколько). Конкретный профиль случайным образом выбирается из всех найденных. При этом имена профилей, заданные атрибутом id не важны и могут быть совершенно любыми (но не могут повторяться). Профили с включённым флажком no_random исключаются из этого алгоритма. Теперь несколько непонятных моментов. Имеется также флажок team_default и два параметра в character_profile - rank и reputation. Похоже на то, что при выборе профиля из многих подходящих по классу можно ещё и фильтровать их по этим двум параметрам. Флажок team_default также каким-то образом влияет на процесс фильтрации. Но подробностей выяснить пока не удалось. Часть из параметров, описанных в профиле, доступны со скриптовой стороны. profile_name - имя профиля. К сожалению - это имя корневого профиля character_profile, а не specific_character. Если профиль был выбран случайно, то узнать, какой именно, практически невозможно. character_name - человеческое имя, сгенерированное по описанному здесь алгоритму. character_reputation - узнать репутацию change_character_reputation - изменить репутацию character_rank - получить ранг set_character_rank - установить ранг character_community - получить имя группировки set_character_community - сменить группировку (там ещё можно менять команду и сквад) money - узнать, сколько денег transfer_money - передать деньги give_money - дать денег sound_prefix - расположение звуков (параметр, задаваемый тегом snd_config) set_start_dialog - установить новый стартовый диалог restore_default_start_dialog - вернуть исходный из профиля get_start_dialog - по идее должна вернуть строку с именем диалога, но совершенно точно не работает и возвращает nil 1. Если имя может быть транслировано функцией game.translate_string(), то это и будет имя. Так можно задавать имена уникальным персонажам. 2. Если имя имеет вид "GENERATE_NAME_<suffix>", то имя составляется из имени и фамилии так: - из system.ltx читается секция stalker_names_<suffix>, где должны быть два параметра name_cnt - количество вариантов имён, last_name_cnt - количество вариантов фамилий. - далее составляется строка вида "name_<suffix>_N", где N - случайное число в пределах [0..name_cnt] (а может до name_cnt-1). Эта строка преобразуется в локализованное имя, как если бы обрабатывалась функцией game.translate_string() (см. описание этой функции в разделе "пространства имён"). Файл с именами обычно имеет имя stable_generate_fnames.xml, но может быть и другим. И сами имена можно размещать где угодно, см. опять же описание translate_string. - аналогично получается фамилия. Составляется строка вида "lname_<suffix>_N" и получается локализованная фамилия по тому же алгоритму. - результирующее имя составляется из имени и фамилии, раделённых пробелом. 3. Если не работает ни первый, ни второй вариант, то имя принимается прямо таким, как прописано в теге name.
    1 балл
Эта таблица лидеров составлена Москва/GMT+03:00

AMK-Team.ru

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