">>>>Как отослать сообщение Меченому на ПДА<<<<"
Сложность: Легко
Файлы:Любой стандартный диалог
1.Создаём файл ваше_название_скрипта.script в папке gamedata/scripts и пишем в него:
Код
function ваш_текст(first_speaker, second_speaker)
news_manager.send_tip(db.actor, "%c[255,255,128,128]ПРИМЕР:
%c[default]ВАШ ТЕКСТ", nil, nil, 30000)
end
news_manager.send_tip - это сама функция, которая отсылает сообщение.
"%c[255,255,128,128] - это цвет сообщения, идет по моему по цветам RGB.
%c[default] - это конец кода цвета сообщения, дальше текст идёт в стандартном цвете.
- это перенос на другую строчку.
2.В любой диалог пишем функцию:
<action>ваше_название_скрипта.ваш_текст</action>
Например в dialogs_trading.xml в диалоге doctor_dialog_start после фразы doctor_dialog_start_13
Пишем
<action>ваше_название_скрипта.ваш_текст</action>
Теперь после того как поговорите с Доктором (NLC5) на ПДА придёт сообщение с вашим текстом.
">>>>Cоздание тайника<<<<"
Сложность: Средне
Файлы:spawn_sections.script,devices.ltx,любой стандартный диалог.
Для того, чтобы замерить координаты можно воспользоватся аддончиком Position Informer. (В теме инструментарий для мододелов)
1.Создаём файл ваше_название_скрипта.script в папке gamedata/scripts и пишем в него:
Код
function ваше_название_функции() $НАЗВАНИЕ ФУНКЦИИ$
alife():create(section,position,levelvertex,gamevertex) $ЭТО ТОЧКА ГДЕ СПАВНИТСЯ ПРЕДМЕТ$
end
2.В папке config/scripts создаём файл m_taynik.ltx и пишем в него:
Код
[spawn] $ Это то, что появится в тайнике $
предмет
предмет
предмет
предмет
предмет
3. Открываем файл spawn_sections.script из папки gamedata/scripts и пишем:
Код
[m_taynik]:ваш_текст
visual = equipments\item_rukzak
radius = 1
custom_data = scripts\m_taynik.ltx
4. Открываем файл devices.ltx и пишем:
Код
[ваш_текст]
GroupControlSection = spawn_group
discovery_dependency =
$spawn = "devices\inventory box"
class = O_INVBOX
cform = skeleton
visual = physics\box\expl_dinamit.ogf
script_binding = bind_physic_object.init
5. Пихаем в любой диалог функцию спавна:
Код
<action>ваше_название_скрипта.ваше_название_функция</action>
Например в dialogs_trading.xml в диалоге doctor_dialog_start после фразы doctor_dialog_start_13
Пишем <action>ваше_название_скрипта.ваше_название_функции</action>
Теперь после того как поговорите с Доктором (NLC5) по заданным координатам появится рюкзак.
">>>>Создание уникального костюма<<<<"
Cложность:Легко
Файлы:unique_items.ltx
Создание костюма, который например является модификацией существующего.
1.Открываем файл unique_items.ltx (gamedata/config/misc) и в конец файла пишем:
Код
[любой_текст_m1]:novice_outfit;Модифицированный костюм
$spawn = "outfit\uniq\любой_текст_m1"
inv_name = название в конфиге
inv_name_short = название в конфиге
description = описание в конфиге
cost = 3000
health_restore_speed = 0.0004
bleeding_restore_speed = -0.002
inv_grid_x = 12
inv_grid_y = 21
Тут прописаны отличия от самого костюма. В данном случае от novice_outfit
inv_name - название
inv_name_short - название
description - описание
cost - цена
health_restore_speed- скорость восстановления здоровья когда одет этот костюм
bleeding_restore_speed - скорость уменьшения кровотечения
inv_grid_x
и
inv_grid_y - иконка.
Получается, что в отличие от куртки новичка у этой куртки повышенная цена, она быстрее восстанавливает здоровье, убирает кровотечение, у куртки другое описание и название, другая иконка.
" >>>>Создание абсолютно нового костюма<<<<"
Как создать абсолютно новый костюм с уникальным визуалом.
Сложность:Тяжело
1. Открываем outfit.ltx (gamedata/config/misc)
Копируем секцию например СКАТ-10М в конец файла и редактируем:
Код
[ваше_название_костюма]:outfit_base
GroupControlSection = spawn_group
discovery_dependency =
$spawn = "outfit\ваше_название_костюма"
;$prefetch = 32
class = E_STLK
cform = skeleton
visual = equipments\ваше_название_костюма
actor_visual = actors\soldier\ваша_модель.ogf
ef_equipment_type = 4
inv_name = ваше_название_костюма_в_конфиге
inv_name_short = ваше_название_костюма_в_конфиге
description = ваше_название_костюма_описание_в_конфиге
inv_weight = 16.0;;;;ВЕС КОСТЮМА;;;;
slot = 6
inv_grid_width = 2;;;;КООРДИНАТЫ ИКОНКИ;;;;
inv_grid_height = 3
inv_grid_x = 18
inv_grid_y = 17
full_icon_name = npc_icon_militaryspec_outfit
cost = 48000;;;;СТОИМОСТЬ КОСТЮМА;;;;
full_scale_icon = 10,6;иконка сталкера в костюме в полный рост
immunities_sect = ваше_название_костюма_immunities;;;;ЭТО УВЕЛИЧЕНИЕ ЗАЩИТЫ КОСТЮМА;;;;
; MEDIUM RESISTANCE
burn_protection = 0.5
strike_protection = 0.5
shock_protection = 0.5
wound_protection = 0.5
radiation_protection = 0.5
telepatic_protection = 0.5
chemical_burn_protection = 0.5
explosion_protection = 0.5
fire_wound_protection = 0.5
bones_koeff_protection = armor_helmet_damage
[ваше_название_костюма_immunities]
burn_immunity = 0.004;коэффициенты иммунитета самого
костюма
strike_immunity = 0.003
shock_immunity = 0.003
wound_immunity = 0.005
radiation_immunity = 0.00
telepatic_immunity = 0.00
chemical_burn_immunity = 0.003
explosion_immunity = 0.004
fire_wound_immunity = 0.006
2.Открываем файл string_table_outfits.xml из папки (gamedata/config/text/rus) и в конец файла
пишем:
Код
<string id="ваше_название_костюма_в_конфиге">
<text>То, что отображается в игре (название)</text>
</string>
<string id="ваше_название_костюма_описание_в_конфиге">
<text>То, что отображается в игре (описание)</text>
</string>
3. Находим в папке gamedata/meshes/actors/soldier файл stalker_military_black.ogf делаем его
копию и переназываем её как хочется.
Например в stalker_military_white.ogf
Открываем её блокнотом и находим это: act\act_stalker_military_1.
Меняем на любой текст, но главное чтобы символов было столько же, иначе модель не будет работать. Меняем например на это:
_ct_stalker_military
4.Делаем тоже самое с stalker_comander_suit.ogf (gamedata/meshes/equipments).
Получаем stalker_comander_suit_white.ogf
5.Создаём текстуру с названием _ct_stalker_military.dds (можно взять готовую из любого
текстурного мода и переназвать как надо.
6.Прописываем в продажу торговцу и радуемся.
">>>>Диалоги Часть1<<<<"
Сложность: Легко
Как сделать простой диалог.
1. Открываем, например файл dialogs_escape.xml (gamedata/config/gameplay) и пишем в конец:
Код
<dialog id="test_dialog">
<phrase_list>
<phrase id="0">
<text>test_dialog_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>test_dialog_1</text>
</phrase>
</phrase_list>
</dialog>
Это скелет диалога. В нём будут написаны все инфопоршни и actions.
<dialog id="test_dialog"> - это название диалога, которое нужно будет написать НПС.
<phrase id="0"> - номер фразы.
<text>test_dialog_0</text> - это текст фразы.
<next>?</next> - переход к фразе.
2. Теперь нужно написать тексты диалога. Заходим в файл "stable_dialogs_bar.xml" (gamedata/config/text/rus) и пишем в конце:
Код
<string id="test_dialog_0">
<text>Это тэстовый диалог</text>
</string>
<string id="test_dialog_1">
<text>Угу.</text>
</string>
<string id="test_dialog_0"> - это то, на что ссылается скелет диалога.
<text>Это тэстовый диалог</text> - собственно текст.
!!!ВНИМАНИЕ!!!
Все диалоги начинаются со слов Меченого.
3. Теперь нужно прописать этот диалог НПС. Например Бармену.
Открываем файл "character_desc_bar.xml" и находим секцию Бармена. Она идёт самой первой.
После всех
<actor_dialog>???</actor_dialog>
Прописываем свой:
<actor_dialog>test_dialog</actor_dialog>
">>>>Диалоги Часть2<<<<"
Сложность:Средне
Как создать диалог посложнее.
Как создать диалог с разными вариантами ответов.
Как создать диалог который исчезнет после прочтения.
1. Открываем, например файл dialogs_escape.xml (gamedata/config/gameplay) и пишем в конец:
Код
<dialog id="test_dialog">
<phrase_list>
<phrase id="0">
<text>test_dialog_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>test_dialog_1</text>
<next>2</next>
<next>3</next>
</phrase>
<phrase id="2">
<text>test_dialog_2</text>
</phrase>
<phrase id="3">
<text>test_dialog_3</text>
</phrase>
</phrase_list>
</dialog>
<next>2</next>
и
<next>3</next> это возможные ответы Меченого.
2. Теперь нужно написать тексты диалога. Заходим в файл "stable_dialogs_bar.xml" (gamedata/config/text/rus) и пишем в конце:
Код
<string id="test_dialog_0">
<text>Как дела?</text>
</string>
<string id="test_dialog_1">
<text>Нормально, а у тебя?</text>
</string>
<string id="test_dialog_2">
<text>Нормально</text>
</string>
<string id="test_dialog_3">
<text>Хреново.</text>
</string>
3.Чтобы этот диалог не появлялся, пишем инфопоршень. Например в файле info_l01escape.xml
Пишем:
<info_portion id="test_pogovoril"></info_portion>
4.Дописываем инфопоршень в скелет диалога:
Код
<dialog id="test_dialog">
<dont_has_info>test_pogovoril</dont_has_info>
<phrase_list>
<phrase id="0">
<text>test_dialog_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>test_dialog_1</text>
<next>2</next>
<next>3</next>
</phrase>
<phrase id="2">
<text>test_dialog_2</text>
<give_info>test_pogovoril</give_info>
</phrase>
<phrase id="3">
<text>test_dialog_3</text>
<give_info>test_pogovoril</give_info>
</phrase>
</phrase_list>
</dialog>
<dont_has_info>test_pogovoril</dont_has_info> - если ГГ получил инфопоршень, диалог не показывать.
<give_info>test_pogovoril</give_info> - дать ГГ инфопоршень.
Получается, что когда ГГ скажет любую из 2 фраз, диалог больше не появится.
">>>>Диалоги Часть3<<<<"
Сложность:Сложно
-Как сделать разные action в диалогах.
1.Создаём обычный диалог:
Код
<dialog id="test_dialog">
<dont_has_info>test_pogovoril</dont_has_info>
<phrase_list>
<phrase id="0">
<text>test_dialog_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>test_dialog_1</text>
<next>2</next>
<next>3</next>
<next>4</next>
</phrase>
<phrase id="2">
<text>test_dialog_2</text>
</phrase>
<phrase id="3">
<text>test_dialog_3</text>
</phrase>
<phrase id="4">
<text>test_dialog_4</text>
</phrase>
</phrase_list>
</dialog>
C такими текстами:
Код
<string id="test_dialog_0">
<text>Я тестю функции.</text>
</string>
<string id="test_dialog_1">
<text>Ок, какую?</text>
</string>
<string id="test_dialog_2">
<text>Дать деньги</text>
</string>
<string id="test_dialog_3">
<text>Дать ПМ</text>
</string>
<string id="test_dialog_4">
<text>Заспавнить ПМ</text>
</string>
2.Создаём свой скрипт в папке gamedata/script например test.script и пишем в него 3 функции:
Код
function dat_dengi(first_speaker, second_speaker)
dialogs.relocate_money(second_speaker, 3000, "in")
end
Это функция отдачи денег ГГ. На месте 3000 любое число.
На месте dat_dengi любое название.
------------------------------------------------------------
Код
function dat_item(first_speaker, second_speaker)
dialogs.relocate_item_section(second_speaker, "wpn_pm", "in")
end
Это функция отдачи предмета ГГ. На месте wpn_pm любой предмет.
На месте dat_item любое название.
------------------------------------------------------------
Код
function spawn_item_or_monster_or_stalker()
alife():create("wpn_pm",vector():set(pos),lvid,gvid)
end
Это функция спавна чего либо. На месте wpn_pm любой предмет,монстр или сталкер.
На месте (pos),lvid,gvid) любые координаты.
На месте spawn_item_or_monster_or_stalker любое название.
------------------------------------------------------------
Так же функция может быть одна, но с несколькими действиями.
Например:
Код
function all(first_speaker, second_speaker)
dialogs.relocate_money(second_speaker, 3000, "in")
dialogs.relocate_item_section(second_speaker, "wpn_pm", "in")
alife():create("wpn_pm",vector():set(pos),lvid,gvid)
end
Значит что одновременно ГГ дадут 3000 рублей, ПМ и по заданным координатам заспавнится ПМ.
------------------------------------------------------------
3.Впишем функции в диалог:
Код
<dialog id="test_dialog">
<phrase_list>
<phrase id="0">
<text>test_dialog_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>test_dialog_1</text>
<next>2</next>
<next>3</next>
<next>4</next>
</phrase>
<phrase id="2">
<text>test_dialog_2</text>
<action>test.dat_dengi</action>
</phrase>
<phrase id="3">
<text>test_dialog_3</text>
<action>test.dat_item</action>
</phrase>
<phrase id="4">
<text>test_dialog_4</text>
<action>test.spawn_item_or_monster_or_stalker</action>
</phrase>
</phrase_list>
</dialog>
Это значит что после после фразы
<text>test_dialog_2</text>
ГГ дадут 3000руб.
Это значит что после после фразы
<text>test_dialog_3</text>
ГГ дадут ПМ.
Это значит что после после фразы
<text>test_dialog_3</text>
Заспавнится ПМ.
">>>>Диалоги Часть4<<<<"
Cложность: Сложно.
-Как сделать разные precondition в диалогах.
Прекондишоны - это проверки на появление диалога
1.Создаём обычный диалог:
Код
<dialog id="test_dialog">
<phrase_list>
<phrase id="0">
<text>test_dialog_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>test_dialog_1</text>
<next>2</next>
<next>3</next>
</phrase>
<phrase id="2">
<text>test_dialog_2</text>
</phrase>
<phrase id="3">
<text>test_dialog_3</text>
</phrase>
</phrase_list>
</dialog>
C такими текстами:
Код
<string id="test_dialog_0">
<text>Тест прекондишонов.</text>
</string>
<string id="test_dialog_1">
<text>Какой?</text>
</string>
<string id="test_dialog_2">
<text>Эта фраза появляется если у ГГ есть ??? рублей.</text>
</string>
<string id="test_dialog_3">
<text>Эта фраза появляется если у ГГ есть ??? предмет.</text>
</string>
2.Создаём свой скрипт в папке gamedata/script например test.script и пишем в него 3
функции-прекондишона:
Код
function has_money_???()
local money = math.floor(200 *
xr_statistic_freeplay.get_freeplay_statistic():get_found_pda_discount())
return db.actor:money()>=money
end
Это функция проверки количества денег ГГ. На месте 200 любое число.
На месте has_money_??? любое название.
------------------------------------------------------------
Код
function has_item(task, objective)
if db.actor ~= nil then
return db.actor:object("wpn_pm") ~= nil
end
return false
end
Это функция проверки наличия какого либо предмета у ГГ. На месте wpn_pm любой предмет.
На месте has_item любое название.
------------------------------------------------------------
3.Впишем функции в диалог:
Код
<dialog id="test_dialog">
<phrase_list>
<phrase id="0">
<text>test_dialog_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>test_dialog_1</text>
<next>2</next>
<next>3</next>
</phrase>
<phrase id="2">
<text>test_dialog_2</text>
<precondition>test.has_money???</precondition>
</phrase>
<phrase id="3">
<text>test_dialog_3</text>
<precondition>test.has_item</precondition>
</phrase>
</phrase_list>
</dialog>
Это значит что фраза <text>test_dialog_2</text> появится если у ГГ есть 200рублей
Это значит что фраза <text>test_dialog_3</text> появится если у ГГ есть ПМ.
">>>>Как прописать свои файлы текстов в игру<<<<"
Сложность:Легко
Допустим вы захотели написать много диалогов, и не хочется их писать в оригинальные файлы.
Делаем так:
1. Открываем localization.ltx и прописываем в самый конец:
Код
ваш_файл_текстов
2. Создаём ваш_файл_текстов в папке "gamedata/config/text/rus/" и пишем в них диалоги/описания/любые тексты по анологии с другими файлами в папке "rus"
">>>>Редактирование персонажей<<<<"
Сложность: Средне
Все характеристики персонажей находятся в файлах "character_desc_...xml".
Откроем файл "character_desc_escape.xml" из папки gamedata/config/gameplay/
Находим секцию Волка:
Код
<!---------------------------------------esc_wolf----------------------------------------------------->
<specific_character id="esc_wolf" team_default = "1"> $Это id персонажа: на него ссылается например "all.spawn"$
<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
eytral\stalker_neytral_balon_1</visual> $Это визуал персонажа. Какой визуал - такой и костюм
<supplies>
[spawn]
$Это спавн вещей, которые появятся у персонажа$