Форум Игромании
 
Регистрация
Справка
Пользователи Календарь Сообщения за день

"Пикник на обочине" Раздел по популярному проекту S.T.A.L.K.E.R.

Ответ
 
Опции темы
Старый 13.04.2007, 21:44   #1
Опытный игрок
 
Аватар для Jesh
 
Регистрация: 19.08.2007
Сообщений: 1,050
Репутация: 145 [+/-]
S.T.A.L.K.E.R. - Создание модов


Мануал по созданию модификаций для начинающих
Часть 1.
Часть 2.

Что необходимо:


Статьи участников:
Скрытый текст:
А
Активация артефактов
В
В Зоне только день
В Зоне только день способ 2
Вывод координат на екран
Выдача Волком оружия
Выдача оружия в ЧН
Д
Добавление транспорта
Динамические диалоги
Добавление новых локаций в ЧН и ЗП
И
Изменение первоначального инвентаря у Меченого(1-й урок читерства)
Имитация намокания дороги во время дождя
К
Как менять ломкость брони
Качание оружия при хотьбе
М
Материал про: активацию артефактов, добавление статей в ПДА, редактирование НПС, создание новой группировки, вычисление координат
Н
Настройка AI Wrapper от bardak'a
Настройка конвертора bardak'a
NPC покупают и продают оружие
Носимый вес
О
Описание Actor.ltx
П
Параметры оружия с описанием
Прорисовка уровня и изменение дистанции видимости
Прототип динамических новостей
Р
Работа с acdc от Bardak-a
Размер раны
Редактирование мультиплеерных карт, для последующего их запуска в сингле
С
Создание механика
Создание уровня для сингла
Создание нового оружия
Создание скриптовых роликов
Создание квеста
Создание нового НПС путём редактрирования all.spawn
Создание HUD модели оружия
Спавн предметов в инвентарь (2-й урок читерства)
Свойства костюмов
Cпавн монстра
Т
Транспорт в игре
У
Уменьшение сытости ГГ


Работы участников:

Разрабатываемые моды:
Скрытый текст:
antdiablon, Минор
Nacek 2


Полезные ссылки

Мод-портал. - Официальная вики по модам для сталкера (Не обновляется)
S.T.A.L.K.E.R. Inside Wiki. - Фанатская вики по модострою для сталкера.

X-Ray SDK. Ныне все вопросы с ним обсуждаются тут.
S.T.A.L.K.E.R. Universal Extractor.


Внимание: если Вы новичок, то сперва ознакомьтесь с мануалом по созданию модификаций для начинающих
При вылетах также прилагайте лог ошибки!!!

Последний раз редактировалось DoctorWagner; 26.02.2023 в 22:25.
Jesh вне форума  
Ответить с цитированием
Старый 06.10.2011, 20:13   #3601
Игрок
 
Аватар для venom9875
 
Регистрация: 07.03.2009
Адрес: Галактика Млечный Путь
Сообщений: 615
Репутация: 169 [+/-]
Вот работаю сейчас над логикой персонажа. Пытаюсь сделать возможным встречу ГГ с ним. Когда ГГ подходит к персонажу, он должен поприветствовать его типа "Привет, как дела?". Так вот, вставил свои звуки в папку gamedata\sounds\characters_voice\scenario\моя_папк а\моя_вторая_папка\. Взял файл sсript_sound.ltx из папки gamedata\config\misc\, вписал отсылку на свой звук. Втавил в схему встречи... Когда ГГ подходит к неписю, выкидывает с ошибкой, мол illegal play sound (буквально - нелегальный проигрываемый звук). Ставлю вместо него звук Дезертира ("Не стреляйте, пожалуйста!") - всё работает, хоть и правильность отсылки и путь указал верно.

Осуществлять встречу пытаюсь через схему remark - стараюсь обходить walker'ов с их ковырянием all.spawn'а.

Вот пример:
Скрытый текст:
[meet]
meet_state = 10| wait
meet_state_wpn = 10| wait@мой_звук

Когда же меняю так:
[meet]
meet_state = 10| wait
meet_state_wpn = 10| wait@agr_dont_shoot - звук Дезертира "Не стреляйте, пожалуста!" - реакция на поднятое оружие.

То всё проходит хорошо. Как всё-таки можно вставить и назначить звук в файле sсript_sound.ltx?
__________________
Кому вообще какая разница, что думают другие, а? Загляните в свое сердце и делайте то, что поможет стать вам счастливее.

Роберт Келсо

Последний раз редактировалось venom9875; 11.10.2011 в 00:18.
venom9875 вне форума  
Отправить сообщение для venom9875 с помощью ICQ Ответить с цитированием
Старый 11.10.2011, 17:31   #3602
Игрок
 
Аватар для venom9875
 
Регистрация: 07.03.2009
Адрес: Галактика Млечный Путь
Сообщений: 615
Репутация: 169 [+/-]
Отбой, проблема решена.

Чтобы вставить звук, который можно будет потом использовать в логике (в моём примере - при встрече), нужно этот звук "зарегистрировать" в двух файлах - в файле gamedata\sсripts\sound_theme.sсript и файле gamedata\config\misc\sсript_sound.ltx

В первом файле можно посмотреть, как зарегистрированы уникальные звуки и, взяв за шаблон какой-нибудь один, просто скопировать-вставить, поменять своё обозначение, своего рода ник. Во втором файле то же самое. Ник должен быть одним и тем же, что и в первом файле.

Разобраться думаю, не составит особого труда.
__________________
Кому вообще какая разница, что думают другие, а? Загляните в свое сердце и делайте то, что поможет стать вам счастливее.

Роберт Келсо
venom9875 вне форума  
Отправить сообщение для venom9875 с помощью ICQ Ответить с цитированием
Старый 12.10.2011, 12:17   #3603
Useless Cowboy
 
Аватар для Fargus
 
Регистрация: 24.12.2009
Сообщений: 377
Репутация: -7 [+/-]
Пипл хэлп!!!! хочу сделать так что-бы бандиты ходили в заре специальной)) и чего-то не выходит... помогите кто чем может)
__________________
тыкай сюда
Fargus вне форума  
Отправить сообщение для Fargus с помощью ICQ Ответить с цитированием
Старый 12.10.2011, 18:02   #3604
Игрок
 
Аватар для venom9875
 
Регистрация: 07.03.2009
Адрес: Галактика Млечный Путь
Сообщений: 615
Репутация: 169 [+/-]
Fargus, могу только подсказать. Вот ссылка, где можно посмотреть, как создать свой костюм на базе готового. С иконками и визуалом посмотрите там же. По поводу того, как прописать броню персонажу - вот.

В файлах gamedata\config\gameplay\character_desc_******.xml есть параметр <visual>указываете путь к модели</visual>, который отвечает за обмундирование персонажа.
__________________
Кому вообще какая разница, что думают другие, а? Загляните в свое сердце и делайте то, что поможет стать вам счастливее.

Роберт Келсо
venom9875 вне форума  
Отправить сообщение для venom9875 с помощью ICQ Ответить с цитированием
Старый 01.11.2011, 19:24   #3605
Новичок
 
Регистрация: 01.11.2011
Сообщений: 6
Репутация: 0 [+/-]
Цитата:
Сообщение от SHOPEN1111 Посмотреть сообщение
Инфа по созданию модов:
Материал про: активацию артефактов, добавление статей в ПДА, редактирование НПС, создание новой группировки, вычисление координат.


Скрытый текст:
Активация артефактов
Распишу по пунктам как добавить например к "огненому шару" аномалию Жарка...
Открываете файл: gamedata/config/misc/artefacts.ltx
И там в самом начале файла такая секция:
;Артефакты, которые при активизации создают аномальные зоны
;формат: {секция_артефакта} = {секция_зоны},Radius,Power
[artefact_spawn_zones]
af_medusa = zone_mosquito_bald_weak, 2.0, 30.0

Обозначает что артефакт af_medusa при активации создаст аномальную зону zone_mosquito_bald_weak с радиусом 2 метра и мощностью 30 (возможно влияет и на время жизни аномалии)
Кончается этот список по идее строчкой: mp_af_electra_flash = zone_witches_galantine, 3, 50.0
и сразу после неё пишете: af_fireball = zone_zharka_static, 3, 30.0
В принципе можно прописать там не статик а zone_zharka_weak незнаю что из них правильнее использовать... статик работает тоже.В той-же папке есть файл zone_zharka, где описаны свойства зон _weak, _average, _strong( слабая, средняя, сильная), а также зона zone_zharka_static.
После этого у вас игра станет вылетать с ошибкой про невозможность обнаружить последовательность описывающую анимацию активации аномалии.
А это всё там же в начале файла чуть ниже того где вы добавили новый артефакт в список есть такие строчки:
[af_activation_gravi]
;----------------------------------------------------------------------------------------------------------------------------------------
;format: time(sec), sound_name, light_R,G,B, light_range, particle_name, af_animation_name
;----------------------------------------------------------------------------------------------------------------------------------------
starting = 5.0, anomalygravi_idle00, 0.5, 1.0, 1.5, 5.0, "anomaly2artefact_gravi_blast_start", "idle"
flying = 2.0, anomalygravi_idle01, 0.8, 1.0, 1.2, 3.0, "anomaly2artefactartefact_gravi", "idle"
idle_before_spawning = 5.0, anomalygravi_blowout5, 1.0, 1.0, 1, 0.0, "anomaly2artefact_gravi_blast_finished", "idle"
spawning = 1, anomalygravity_entrance, 0.9, 1.1, 1.01, 0.0, "", "idle"

Что как раз и описывает анимацию..
По-хорошему надо написать свою анимацию к жарке но это честно говоря не обязательно... потому что нам сейчас важна не красота а работоспособность.... Так вот... из заголовка "[af_activation_gravi]" берем название последовательности af_activation_gravi и ищем сам артефакт af_fireball (кто уже забыл зачем, мы на него собирались вешать новую активацию)
Найдете что-то вроде:
[af_fireball]:af_base
GroupControlSection = spawn_group
$spawn = "artifactszharka fireball"
$npc = on ; option for Level Editor
;$prefetch = 3
cform = skeleton
class = ARTEFACT

visual = physicsanomalyartefact_fire.ogf
description = enc_zone_artifact_af-fireball
inv_name = af-fireball
И где-нибудь тут добавляете строчку: artefact_activation_seq = af_activation_gravi
И на этом всё. Прописываем в artefacts.ltx в блоке [af_base]:identity_immunities вместо ;slot=10 вот это: slot=1. Насколько я знаю, знак ; зоначает, что строка закомментирована(неактивна) У себя я прописывал slot=1 между строчками inv_name = af-electra-moonlight inv_name_short = inv_weight = 0.05 slot = 1 inv_grid_x = 10 inv_grid_y = 10 для того артефакта, который хочу активировать.
В игре берем артефакт в первый слот и активируем.
By XiaNi
Получено с http://www.stalkerin.gameru.net/wiki...82%D0%BE%D0%B2


Добавление статей в PDA
Добавление статьи
На примере статьи из Artefact Activation Mod разберем их добавление в PDA:
• Добавим в файл config\gameplay\encyclopedia_zone.xml новую статью:
<!-------------------------------- Activation - Basic ----------------------------->

<article id="zone_anomalies_activation_basic" name="zone_anomalies_activation-basic" group="Anomalies">
<texture x="500" y="150" width="100" height="100">ui_icon_photo</texture>
<text>enc_zone_anomalies_activation_basic</text>
</article>
Здесь:

o article id - внутреннее имя статьи, именно на него ссылаются в файлах игры
o name - имя статьи, отображаемое в игре, подгружается из строкового массива
o texture - картинка и её позиция в статье, в данном случае мы использовали обычный белый шум
o text - текст статьи, отображаемый в игре, подгружается из строкового массива
• Добавим в, например, config\gameplay\info_l01escape.xml (инфопорции уровня "Кордон") ссылку на получение статьи - скажем, к трупу у туннеля, при обыске которого выдается информация о аномалиях в туннеле (вы его обнаруживаете, проходя второе спецзадание от Сидоровича). Найдем эти строки и дополним их:
<!-- труп у аномалии -->
<info_portion id="esc_tutorial_dead_novice">
<article>tutorial_moving_anomaly</article>
'''<article>zone_anomalies_activation_basic</article>'''
</info_portion>
Главное - никогда не путайте article id, name и text статьи. Я в данном примере это сделать легко. Лучше называйте их непохожими друг на друга названиями.
• Так как в статье у нас есть такое поле:
<text>enc_zone_anomalies_activation_basic</text>
Да и название тоже не написано прямо, а ссылается на определенную строку, то добавим этот самый text в config\text\rus\string_table_enc_zone.xml, в нашем случае:
<string id="enc_zone_anomalies_activation-basic">
<text>Активация - базис</text>
</string>
<string id="enc_zone_anomalies_activation_basic">
<text>С артефактами связана, помимо всего прочего, ''(ну, и так далее, там большой текст)''...</text>
</string>
[править]
Дополнительно
Чтобы статья добавлялась при получении определенного задания, в ..._task.xml (вместо ... стоит название уровня) нужно прописать конструкцию вида:
<article>название_задания_descr</article>


Редактирование NPC
Вступление
В этой статье мы научимся редактировать NPC: изменять содержимое их инвентаря, реплики, поведение, имя, и другие параметры.
Параметры
За параметры NPC отвечают файлы:
\config\gameplay\character_desc_[название локации].xml
Каждый из них разбит на секции - по одной на NPC. Используются следующие параметры:
• <name>...</name> - Имя (ссылка на строку в текстовом массиве).
• <icon>ui_npc_...</icon> - Иконка для диалогов/торговли.
• <bio>..._bio</bio> - Биография (в игре не используется).
• <class>...</class> - Класс (лучше не трогать).Imp 12:46, 12 августа 2007 (EEST)Нужно для того что-бы автоматические респавнеры могли спавнить немного разных персонажей. То есть например в игре есть описание восьми (кажеться может и больше) разных новичков и что бы при автоматическом респавне не получалась куча братьев-близнецов, респавнер настраивается на класс персонажей и спавнит случайным образом разных персонажей одного класса.
• <community>...</community> - Группировка.
• <rank>...</rank> - Ранг.
• <reputation>...</reputation> - Репутация.
• <money min="..." max="..." infinitive="..."/> - Количество денег (infinitive="1" - бесконечные деньги).
• <snd_config>...</snd_config> - Набор звуков.
• <crouch_type>-1</crouch_type> - Тип приседания. Лучше не трогать.
• <visual>actors\...</visual> - Внешность. Влияет как на внешний вид костюма, так и на его свойства. Укажите здесь экзоскелет - и персонаж действительно в нем окажется: как по внешности, так и по свойствам.
• <supplies>...</supplies> - Предметы, находящиеся у него в инвентаре. Некоторые из них в игре не отображаются, поэтому не удивляйтесь присутствию здесь предметов вроде рации или фонарика.
В игре отображаються все предметы, просто при торговле есть ограничения на допустимые к торговле предметы, а при смерти персонажа, "запрещенные" предметы удаляються скриптом. Imp 12:46, 12 августа 2007 (EEST)
• <start_dialog>...<start_dialog> - Приветственный диалог. Их может быть несколько, с различными условиями появления.
• <actor_dialog>...</actor_dialog> - Диалоги с игроком.
Практика
Изменим, например, параметры NPC по имени Волк.
Откроем файл:
\config\gameplay\character_desc_escape.xml
И найдем в нем раздел, ему соответствующий:
<!---------------------esc_wolf--------------------->

<specific_character id="esc_wolf" team_default = "1">
<name>esc_wolf_name</name>
<icon>ui_npc_u_stalker_neytral_balon_1</icon>
<bio>esc_wolf_bio</bio>

<class>esc_wolf</class>
<community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect>

<rank>434</rank>
<reputation>5</reputation>
<money min="600" max="2000" infinitive="0"/>

<snd_config>characters_voice\human_01\stalker\</snd_config>
<crouch_type>-1</crouch_type>

<visual>actors\neytral\stalker_neytral_balon_1</visual>
<supplies>
[spawn] \n
wpn_pm \n
ammo_9x18_fmj = 1 \n
wpn_ak74u \n
ammo_5.45x39_fmj \n
device_torch \n
hand_radio \n
</supplies>

#include "gameplay\character_criticals_4.xml" //

<start_dialog>escape_lager_volk_talk</start_dialog>
<start_dialog>dm_hello_dialog</start_dialog>
<actor_dialog>dm_cool_info_dialog</actor_dialog>
<actor_dialog>dm_help_wounded_medkit_dialog</actor_dialog>
<actor_dialog>tm_wolf_dialog</actor_dialog>
<actor_dialog>tm_wolf_reward</actor_dialog>
</specific_character>
Изменим некоторые параметры. Выдадим ему FN2000 и Desert Eagle, примем в "Долг" и сделаем неограниченное количество денег:
<!---------------------esc_wolf--------------------->

<specific_character id="esc_wolf" team_default = "1">
<name>esc_wolf_name</name>
<icon>ui_npc_u_stalker_neytral_balon_1</icon>
<bio>esc_wolf_bio</bio>

<class>esc_wolf</class>
<community>dolg</community> <terrain_sect>stalker_terrain</terrain_sect>

<rank>434</rank>
<reputation>5</reputation>
<money min="600" max="2000" infinitive="1"/>

<snd_config>characters_voice\human_01\stalker\</snd_config>
<crouch_type>-1</crouch_type>

<visual>actors\neytral\stalker_neytral_balon_1</visual>
<supplies>
[spawn] \n
wpn_deagle \n
ammo_11.43x23_fmj = 1 \n
wpn_fn2000 \n
ammo_5.56x45_ap \n
ammo_5.45x39_fmj \n
device_torch \n
hand_radio \n
</supplies>

#include "gameplay\character_criticals_4.xml" //

<start_dialog>escape_lager_volk_talk</start_dialog>
<start_dialog>dm_hello_dialog</start_dialog>
<actor_dialog>dm_cool_info_dialog</actor_dialog>
<actor_dialog>dm_help_wounded_medkit_dialog</actor_dialog>
<actor_dialog>tm_wolf_dialog</actor_dialog>
<actor_dialog>tm_wolf_reward</actor_dialog>
</specific_character>


Создание новой группировки
Новая группировка
Сегодня мы создадим новую группировку. Назовем её, скажем, "Ветер". Не суть важно.
Практика:
Базовый уровень
1. Для начала в game_relations.ltx и в таблицу отношений группировок в конце и в заголовке добавляем название своей группировки и коэффициенты отношений к ней у других группировок. Также, не забываем прописать её собственное отношение к другим группировкам:
[communities_relations]
;|actor |act_dol|act_fre|stalker|monolit|militar|killer |ecolog |dolg |freedom|bandit |zombied|strange|trader|arena_enemy|wind|
;================================================= ================================================== ==============================
actor = 0, 0, 0, 0, -5000, -5000, -5000, 0, 0, 0, -5000, -5000, 0, 0, -5000, 0
actor_dolg = 0, 0, 0, 0, -5000, -500, -5000, 5000, 600, -5000, -5000, -5000, 0, 0, -5000
actor_freedom = 0, 0, 0, 0, -5000, -5000, -5000, -1500, -5000, 5000, 0, -5000, 0, 0, -5000, 0

stalker = 0, 0, 0, 0, -5000, -5000, -5000, 0, 0, 0, -5000, -5000, 0, 0, -5000, 0
monolith = -5000, -5000, -5000, -5000, 5000, -5000, -5000, -5000, -5000, -5000, 5000, 5000, -5000, 0, -5000, 0
military = -5000, -5000, -5000, -5000, -5000, 5000, -5000, 0, -5000, -5000, -5000, -5000, 0, 0, -5000, 0
killer = -5000, -5000, 0, -5000, -5000, -5000, 5000, -5000, -5000, -5000, 0, -5000, -5000, 0, -5000, 0
ecolog = 0, 600, -5000, 0, -5000, 1000, -5000, 5000, 500, -5000, -500, -5000, 0, 0, 0, 0
dolg = 0, 600, -5000, 0, -5000, -500, -5000, 5000, 5000, -5000, -5000, -5000, 0, 0, 0, 0
freedom = 0, -5000, 600, 0, -5000, -5000, -5000, -1500, -5000, 5000, 0, -5000, 0, 0, 0, 0
bandit = -5000, -5000, 0, -5000, -5000, -500, 0, -5000, -5000, 0, 0, -5000, -5000, 0, -5000, 0
zombied = -5000, -5000, -5000, -5000, 5000, -5000, -5000, -5000, -5000, -5000, -5000, 5000, -5000, 0, -5000, 0
stranger = 0, 0, 0, 0, -5000, -5000, -5000, 0, 0, 0, -500, -5000, 0, 0, 0, 0
trader = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
arena_enemy = -5000, -5000, -5000, -5000, -5000, -5000, 0, 0, 0, -5000, -5000, 0, 0, 0, 0, 0

wind = 0, 0, 0, 0, -5000, -5000, -5000, 0, 0, 0, -5000, -5000, 0, 0, -5000, 0
Также, изменим эту строку, добавив туда имя и номер группировки:
;названия группировок
communities = actor, 0, actor_dolg, 1, actor_freedom, 2, stalker, 5, monolith, 6, military, 7, killer, 8, ecolog, 9, dolg, 10,
freedom, 11, bandit, 12, zombied, 13, stranger, 14, trader, 15, arena_enemy, 16, wind, 18,
Отсчет идет построчно начиная сверху. Хотя есть небольшой нюанс. У первых трех строк - нумерация начинается с нуля, с остальных группировок она идет как надо. Для wind выставили 18, так как мы эту группировку отделили от других.
Далее, в разделе [communities_sympathy] в конце добавляем свою группировку и коэффициент "впечатлительности" - чем он меньше, тем меньше отношение группировки будет меняться к вам в целом:
[communities_sympathy]
actor = 0.0
actor_dolg = 0.0
actor_freedom = 0.0
stalker = 0.0
monolith = 0.0
military = 0.0
killer = 0.0
ecolog = 0.0
dolg = 0.1
freedom = 0.1
bandit = 0.0
zombied = 0.0
trader = 0.0
stranger = 0.0
arena_enemy = 0.0
wind = 0.0
2. После этого в файле death_manager*****ipt ищем строку local community_list и в скобках добавляем название своей группировки:
function init_drop_settings()
local community_list = { "stalker", "dolg", "freedom", "bandit", "military", "zombied", "ecolog", "killer", "monolith",
"arena_enemy", "actor_dolg", "wind" }
3. В файле death_items_by_communities.ltx пишем [x]:stalker (вместо x - название вашей группировки):
[...]
af_dummy_spring = 0
af_fuzz_kolobok = 0

;Еда
vodka = 0

[arena_enemy]
[actor_dolg]

[wind]: stalker
bread = 0
kolbasa = 0
vodka = 0
energy_drink = 0.3
4. Если предусматривается респавн бойцов новой группировки, в se_respawn*****ipt прописываем в local simMaxCount = { после строчек с зомбированными сталкерами строку:
wind_novice = 20, wind_regular = 20, wind_veteran = 20, wind_master = 6,
5. Чтобы при убийстве непися новой группировки игра не вылетала в xr_statistic*****ipt,
после строки:
zombied_novice = 1, zombied_experienced = 2, zombied_veteran = 3, zombied_master = 4,
пишем
dark_stalker_novice = 1, dark_stalker_experienced = 2, dark_stalker_veteran = 3, dark_stalker_master = 4,

6. Ну а в character_desk_x.xml выбираем любого NPC (или группу) и меняем группировку на свою:
<!---esc_wolf--->
<specific_character id="esc_wolf" team_default = "1">
<name>esc_wolf_name</name>
<icon>ui_npc_u_stalker_neytral_balon_1</icon>
<bio>esc_wolf_bio</bio>

<class>esc_wolf</class>
<community>wind</community>
[...]
7. Чтобы у персонажа в графе "Группировка" отображалось не "wind", а "Ветер", зарегистрируем соответствующую строку в файле string_table_general.xml:
<?xml version="1.0" encoding="windows-1251" ?>
<string_table>
<string id="wind">
<text>Ветер</text>
</string>
<string id="actor">
<text>Одиночка</text>
</string>
[...]
8. Существует возможность создать для нашей новой группировки места, где они будут ходить (*_terrain брать из m_stalker.ltx):
То есть, к примеру, существует секция:
[stalker_terrain]
255,000,255,255
008,001,255,255 ;Разрешено ходить по опасным местам на баре
012,001,255,255 ;Разрешено ходить по опасным местам на Милитари
Тогда можно создать новую, по аналогии:
[wind_terrain]
255,000,255,255
008,001,255,255 ;Разрешено ходить по опасным местам на баре
012,001,255,255 ;Разрешено ходить по опасным местам на Милитари
010,001,255,255 ;Разрешено ходить по опасным местам на янтаре

Здесь, очевидно, указаны координаты самого уровня. Для каждого уровня существует своя начальная координата.
Продвинутый уровень:
Такой метод достаточно примитивен. Это не полноценная группировка. Нам нужны соответствующие диалоги, возможность получения квестов и вступления в группировку, уникальные NPC.
Квесты:
Добавим квесты, которые нужно выполнить для группировки. Пока - простые поручения распространенных типов.
Во-первых, пропишите в список диалогов персонажа следующие строки:
<actor_dialog>[что-нибудь]_dialog</actor_dialog>
<actor_dialog>[что-нибудь]_reward</actor_dialog>
Примеры названий: tm_trader_dialog, tm_wolf_dialog...
Внимание! Метод не проверен.
Этим мы добавили ему ветку диалога "Есть работа?", а также ветку для награды за квест/отказа от него. Теперь зарегистрируем в task_manager.ltx набор новых заданий. [list]

[...]

;--------Wind------------------------
;----------Kill Stalker----
wind_kill_stalker
;----------Find Item----
wind_find_item

[...]

;tasks for Wind

[wind_find_item]
type = find_item
community = actor
text = [ссылка на текст с рассказом заказчика о задании]
description = [ссылка на текст с описанием задания]
parent = [имя NPC-заказчика]
target = scientific_outfit
reward_money = 5000
reward_reputation = +5
reward_rank = 4
reward_item = wpn_sig_m1
time = 86400


[wind_kill_stalker]
type = kill_stalker
community = actor
text = [ссылка на текст с рассказом заказчика о задании]
description = [ссылка на текст с описанием задания]
parent = [имя NPC-заказчика]
target = sim_stalker_master_master
reward_money = 4000
reward_reputation = +5
reward_rank = 9
reward_item = ammo_5.56x45_ap, ammo_5.56x45_ap, ammo_5.56x45_ap
time = 86400
Не забудьте прописать описания заданий в текстовые массивы. Подробнее о редактировании task_manager.ltx читайте в уроке, посвященном однотипным квестам.
Да, и зарегистрируйте сами ветки диалогов в файле dialogs.xml. Вот пример того, как это сделано для заданий "Долга":
<dialog id="tm_dolg_dialog" priority="-1">
<init_func>task_manager.init_dolg_task_dialog</init_func>
</dialog>
<dialog id="tm_dolg_reward" priority="0">
<init_func>task_manager.init_dolg_reward_dialog</init_func>
<precondition>task_manager.has_active_vendor_tas k</precondition>
</dialog>
Соответственно, пройдем туда, куда указывает строка task_manager.init_dolg_task_dialog - в task_manager*****ipt:
function init_dolg_task_dialog(dlg)
get_random_task():init_task_dialog(dlg, "dolg")
По аналогии делаем и с нашим "Ветром".
Вступление в группировку:
Реализуем возможность вступления в группировку.
Прописываем в dialogs*****ipt такие action'ы:
-----------------------------------------------------------------------------------
-- Community
-----------------------------------------------------------------------------------

[...]

function actor_set_wind (actor, npc)
printf ("ACTOR NOW IN WIND COMMUNITY"
if db.actor then
db.actor:set_character_community ("actor_wind", 0, 0)
end
return true
end
После чего создадим диалог, и сделаем в нем фразу с action'ом вида <action>actor_set_wind</action>. Советую изучить урок, посвященный диалогам.
[править]
Новые NPC
Лучше всего всё вышеприведенное повесить на нового, уникального персонажа. Способ его спавна описан здесь.


Вычисляем координаты
Нашел на одном форуме, достаточно интересно.
Как получить координаты для спавна предмета или НПЦ. Скрипт сей найден на каком-то форуме, проверен и работает функция спавна имеет вид
alife():create(section,position,levelvertex,gameve rtex)
Где:
section - имя того/чего спавним
position,levelvertex,gamevertex - координаты, позиция вершины обьекта, и сектора карты.
Напишу подробно, как очень про100 их узнать:
Заходим, предварительно распаковав, в каталог gamedata/scripts/ И там в файле ui_main_menu*****ipt в конце дописываем это:
function main_menu:OnButton_credits_clicked()
local text
local vid
local gvid
local a = vector()
local text
a = db.actor:position()
vid = db.actor:level_vertex_id()
gvid = db.actor:game_vertex_id()
text = "Позиция:\\nX= "..a.x.."\\nY= "..a.y.."\\nZ= "..a.z.."\\nlevel_vertex= "..vid.."\\ngame_vertex_id= "..gvid
news_manager.send_tip(db.actor, text, nil, nil, 30000)
end
Теперь в игре идём на то место (или ногами или деморекордом), где спавним обьект, выходим в меню игры, и жмём на клавишу СОЗДАТЕЛИ (CREDITS) - соответственно нашему взоры не предстаёт никакой список создателей, а мы услышим звуковой сигнал, после чего выходим в игру из меню, и в строке сообщений высветиться вся инфа. Всё - F12 или на бумажку.
Помогите пжалста!
Координаты я снял. Решил заспавнить Экзоскелет через скрипт. В bind_stalker*****ipt после pda.fill_sleep_zones() ввёл my_spawn.spawn() Создал скрипт my_spawn, а в нём вписал:

function spawn()

alife():create("exo_outfit",vector():set(),L_V,G_V )

end

где X,Y,Z – координаты, а L_V, G_V – левел и гейм вертекс. Загружаю, смотрю, экзоскелет лежит где надо. Но он начинает "клонироваться"! Спустя минуту на том месте лежало 64 экзоскелета (я считал)! Что нужно сделать чтобы там лежал 1 экзоскелет?
SLAV6 вне форума  
Ответить с цитированием
Старый 02.11.2011, 13:03   #3606
Игрок
 
Аватар для venom9875
 
Регистрация: 07.03.2009
Адрес: Галактика Млечный Путь
Сообщений: 615
Репутация: 169 [+/-]
SLAV6, дык ты наверно вписал bind_stalker.sсript в строчке bind_stalker:update() - эта функция отвечает за постоянное обновление всего происходящего в игре, чтобы не стояло всё на одном и том же месте (постоянная проверка и лечение здоровья ГГ, отыгрывание звуков, анимаций и т.п.). Поэтому твой экзоскелет с каждым апдейтом (обновлением) и спавнится в одной и той же точке. Проще спавнить через скрипт ui_main_menu.sсript, если для теста - вот ссылка на небольшой урок.. А если хочется заспавнить сразу, без дальнейших изменений - то лучше вызывать через диалог или через тот же bind_stalker.sсript в функцию on_net_spawn (или как там её...). Вот.
__________________
Кому вообще какая разница, что думают другие, а? Загляните в свое сердце и делайте то, что поможет стать вам счастливее.

Роберт Келсо
venom9875 вне форума  
Отправить сообщение для venom9875 с помощью ICQ Ответить с цитированием
Старый 03.11.2011, 14:53   #3607
Новичок
 
Регистрация: 01.11.2011
Сообщений: 6
Репутация: 0 [+/-]
А можно ли с помощью скрипта изменить координаты начала игры?

Добавлено через 19 часов 30 минут
Я создал НПС и заспавнил его. Как сделать чтобы он лежал трупом?

Последний раз редактировалось SLAV6; 04.11.2011 в 10:24. Причина: Добавлено сообщение
SLAV6 вне форума  
Ответить с цитированием
Старый 04.11.2011, 21:24   #3608
Игрок
 
Аватар для venom9875
 
Регистрация: 07.03.2009
Адрес: Галактика Млечный Путь
Сообщений: 615
Репутация: 169 [+/-]
SLAV6, изменить координаты в начале - это через all.spawn. А по поводу трупа через скрипт - вот.
__________________
Кому вообще какая разница, что думают другие, а? Загляните в свое сердце и делайте то, что поможет стать вам счастливее.

Роберт Келсо
venom9875 вне форума  
Отправить сообщение для venom9875 с помощью ICQ Ответить с цитированием
Старый 05.11.2011, 06:20   #3609
Игрок
 
Аватар для MBM98
 
Регистрация: 14.07.2010
Адрес: Между складками Логвинова
Сообщений: 890
Репутация: 100 [+/-]
SLAV6, venom9875, ну вообще, можно через скрипт задать старт игры вот так
Скрытый текст:
function teleport_hero()
db.actor:set_actor_position(vector():set(X,Y,Z),LV ,GV)
end

На месте Х Y Z ставим соответствующие координаты, LV и GV левел и гейм вертексы. Все это исправно работает.

Добавлено через 7 минут
Исправно кстати работает способ без инфопоршней, через update(delta).

Скрытый текст:
Собственно надо ставить в начале функции спавна ставим переменную (назовем ее просто – spawn):

Local spawn = 0
-- Дальше ставить проверку если spawn равен 0 тогда
If spawn==0 then
Потом после спавна делать вот так
spawn = 1 -- Это мы переключаем переменную spawn на 1
-- Ставим еще один end в конце ф-ии
__________________
Ice blue silver sky
Fades into grey
To a grey hope that omens to be
Starless and bible black

Последний раз редактировалось MBM98; 05.11.2011 в 06:27. Причина: Добавлено сообщение
MBM98 вне форума  
Ответить с цитированием
Старый 05.11.2011, 06:41   #3610
Новичок
 
Регистрация: 01.11.2011
Сообщений: 6
Репутация: 0 [+/-]
antdiablon, В какой скрипт нужно вписать строки "function teleport_hero()
db.actor:set_actor_position(vector():set(X,Y,Z),LV ,GV)
end"?
SLAV6 вне форума  
Ответить с цитированием
Старый 05.11.2011, 22:57   #3611
Игрок
 
Аватар для venom9875
 
Регистрация: 07.03.2009
Адрес: Галактика Млечный Путь
Сообщений: 615
Репутация: 169 [+/-]
antdiablon,
SLAV6, set_actor_position задаёт координаты только для того уровня, на котором находится ГГ. Через него нельзя задавать другие уровни. А через all.spawn можно заспавнить ГГ хоть в комнате с голограммой О-сознания...
__________________
Кому вообще какая разница, что думают другие, а? Загляните в свое сердце и делайте то, что поможет стать вам счастливее.

Роберт Келсо
venom9875 вне форума  
Отправить сообщение для venom9875 с помощью ICQ Ответить с цитированием
Старый 08.11.2011, 12:54   #3612
Новичок
 
Регистрация: 01.11.2011
Сообщений: 6
Репутация: 0 [+/-]
Мда. Тут вам такие вопросы глупые задают. Я хоть в языке Lua неразбираюсь, однако неплохо шарю по конфигам. Это даёт мне выход из положения. venom9875, а ты выкладывал где-нибудь свой мод?
SLAV6 вне форума  
Ответить с цитированием
Старый 09.11.2011, 22:29   #3613
Новичок
 
Аватар для kliknik
 
Регистрация: 19.12.2009
Адрес: svetoforniko@yandex.ru
Сообщений: 10
Репутация: 0 [+/-]
Halp!!!
Создал анимированную дверь, ну то есть не совсем дверь как здесь , а аниммированный объект в виде двери которая периодически , сама по себе открывается, закрывается. Скомпилил всё нормально, в игре всё работает, но вот не задача Гг проходит сквозь неё. В каких настройках указать и какие параметры, что бы это вылечить?
kliknik вне форума  
Ответить с цитированием
Старый 10.11.2011, 23:04   #3614
Игрок
 
Аватар для venom9875
 
Регистрация: 07.03.2009
Адрес: Галактика Млечный Путь
Сообщений: 615
Репутация: 169 [+/-]
SLAV6, нет. "Модец" мой в долгой разработке - заимствую фишки из других модов (выброс, сон...), правлю скрипты, конфиги, текстуры, создаю интересные квесты (надеюсь), правлю 3d-модели и создаю свои... Муторное дело для одного человека.

kliknik, ГГ проходит через неё небось потому, что она не имеет физической оболочки. Помимо визуального каркаса должен быть ещё и движковый физический. Если ты экспортировал дверь через X-Ray SDK, то посоветую скачать с сайта Stalker Inside Wiki утилитки для СДК от Bardak'а. В них найдёшь конвертер моделей из *.ogf в формат СДК *.object. Посмотри оригинальную модель двери, что в бункере у Сидоровича, посмотри, как там она устроена. Сам я не проверял динамические объекты по типу дверей - занимаюсь в основном Неписями, артефактами и другими "не картными" объектами.
__________________
Кому вообще какая разница, что думают другие, а? Загляните в свое сердце и делайте то, что поможет стать вам счастливее.

Роберт Келсо
venom9875 вне форума  
Отправить сообщение для venom9875 с помощью ICQ Ответить с цитированием
Старый 14.11.2011, 12:50   #3615
Новичок
 
Регистрация: 01.11.2011
Сообщений: 6
Репутация: 0 [+/-]
Как сделать этот батник для актив перл?
SLAV6 вне форума  
Ответить с цитированием
Старый 14.11.2011, 15:01   #3616
Опытный игрок
 
Аватар для Jesh
 
Регистрация: 19.08.2007
Сообщений: 1,050
Репутация: 145 [+/-]
kliknik
Глянь ещё одну няшку также, что с шейпами у тебя?
__________________
"Чем больше нас, тем меньше их..."
Jesh вне форума  
Ответить с цитированием
Старый 14.11.2011, 23:45   #3617
Новичок
 
Аватар для kliknik
 
Регистрация: 19.12.2009
Адрес: svetoforniko@yandex.ru
Сообщений: 10
Репутация: 0 [+/-]
Вот как всё у меня настроено:

Скрытый текст:
kliknik вне форума  
Ответить с цитированием
Старый 19.11.2011, 21:26   #3618
Игрок
 
Аватар для venom9875
 
Регистрация: 07.03.2009
Адрес: Галактика Млечный Путь
Сообщений: 615
Репутация: 169 [+/-]
Дабы тема не умирала, задам давно интересующий меня вопрос: куда в классе net_packet() нужно впихнуть параметр story_id?

Я смотрел и скрипты amk-мода, и ogsm-мода - везде story_id вписываются как _s32(). Но пробуя этот параметр и проверяя его в игре при помощи функции из мода AMK mylog(), нет таких объектов с задаваемым мной story_id.

проверяю это при помощи конструкции:
Скрытый текст:
local sim_object = alife():story_object(story_id)
if sim_object then
amk.mylog("Объект с таким ID есть.")
else
amk.mylog("Нет объекта с таким ID. Попробуйте снова.")
end

Примечание: функция из скрипта amk.mylog() высвечивает во время игры на экране тот текст, который вы вписываете сами - в качестве своеобразного отчёта работы скриптов. Текст отображается в игре как обычное сообщение на ПДА.

Кто знает, помогите пожалуйста!!!
__________________
Кому вообще какая разница, что думают другие, а? Загляните в свое сердце и делайте то, что поможет стать вам счастливее.

Роберт Келсо

Последний раз редактировалось venom9875; 19.11.2011 в 21:35.
venom9875 вне форума  
Отправить сообщение для venom9875 с помощью ICQ Ответить с цитированием
Старый 21.11.2011, 10:03   #3619
Игрок
 
Аватар для MBM98
 
Регистрация: 14.07.2010
Адрес: Между складками Логвинова
Сообщений: 890
Репутация: 100 [+/-]
Jesh вернулся, снимайте меня с куркторства, передавайте ему
__________________
Ice blue silver sky
Fades into grey
To a grey hope that omens to be
Starless and bible black
MBM98 вне форума  
Ответить с цитированием
Старый 27.11.2011, 13:08   #3620
Игрок
 
Аватар для AutoAndroid
 
Регистрация: 14.01.2010
Адрес: Санкт-Петербург
Сообщений: 597
Репутация: 118 [+/-]
Ребят, какой конфиг отвечает за "Загрузочный экран"?(а то все конфиги облазил, ничё не нашел)
P.S. Желательно узнать по "Чистому Небо" и "Зов Припяти".
AutoAndroid вне форума  
Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 12:10.


Powered by vBulletin® Version 3.8.0
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Rambler's Top100 Яндекс цитирования