1

Перейти к содержимому


       Торент трекер от http://stalker-worlds.ru        Хранилище сайта http://stalker-worlds.ru        Онлайн Сталкер Канал Унесенные Сталкером Присоединяйся к нашему сообществу на facebook Вступай в нашу группу в контакте


Добро пожаловать к нам на сайт! Про Ваш статус и права можно прочитать в Этой теме

Для просмотра картинок и скачивания файлов с форума - пройдите регистрацию!   Проблемы с регистрацией - вам сюда


Фотография

Различные уроки.


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 28

#1
Виталий_Зверь

Виталий_Зверь

    Убийца тушканов

  • Не в сети
  • Старожилы
  • Завсегдатай - больше 1 год на сайте
<- Информация ->
  • Регистрация:
    14-March 09
  • 1376 Cообщений
  • Пропуск №: 281


Репутация: 5524 Постов: 1376
  • Страна проживания:Россия
  • Реальное имя:Виталий
  • Пол:Мужчина
  • Город:ЕКБ, Россия
Здесь можно выложить уроки по модостроению в ТЧ.

Выложу пару уроков...
"Как сделать рандомную музыку в меню".
Автор мне неизвестен.

 
При заходе на экран главного меня муз. заставка будет выбираться случайно из добавленных вами.
1. В директорию gamedata\sounds\music\ положить два канальных ogg-файла с нужной музыкой, например: my_music_l.ogg (левый канал) и my_music_r.ogg (правый канал)
2. Открыть файл gamedata\config\ui\ui_mm_main.xml, найти в нем строку:

и заменить на:

3. В этом же файле найти строку:
music\wasteland2
и ниже нее выставить следующую строку:
music\my_music
4. Сохранить файл.
5. Если требуется вставить больше муз. заставок, то в параметре random укажите их количество.

!!! Возьмите на заметку !!!

в строке
вместо 0 указывайте не количество композиций, а количество композиций - 1, то есть, если вы добавили скажем еще одну мелодию, к той, что была по дефаулту у вас получится примерно так:

 

music\wasteland2
music\my_music


"Изменение предметов в рюкзаке сталкера после смерти".

 
Добавление вещей в рюкзак сталкера после смерти.
Редактируем файл death_items_by_communities.ltx :
[stalker] ;Указывается вероятность заспаунить или нет (будет ли у сталкера данный предмет после смерти)
;Артефакты
af_medusa = 0.015 (если заменить 0.015 на 1.0), то будет 100% вероятность что после смерти у сталкера в рюкзаке будет артефакт медуза
af_cristall_flower = 0.01
af_night_star = 0.005
af_vyvert = 0.015
af_gravi = 0.01
af_gold_fish = 0.005
af_blood = 0.015
af_mincer_meat = 0.01
af_soul = 0.005
af_electra_sparkler = 0.015
af_electra_flash = 0.01
af_electra_moonlight = 0.005
af_rusty_thorn = 0.015
af_rusty_kristall = 0.01
af_rusty_sea-urchin = 0.005
af_ameba_slime = 0.015
af_ameba_slug = 0.01
af_ameba_mica = 0.005
af_drops = 0.015
af_fireball = 0.01
af_cristall = 0.005
af_dummy_glassbeads = 0.005
af_dummy_pellicle = 0.005
af_dummy_battery = 0.005
af_dummy_dummy = 0.005
af_dummy_spring = 0.005
af_fuzz_kolobok = 0.005;Аммуниция
ammo_9x18_fmj = 1
ammo_9x18_pmm = 1
ammo_9x19_pbp = 1
ammo_9x19_fmj = 1
ammo_11.43x23_hydro = 1
ammo_11.43x23_fmj = 1
ammo_12x70_buck = 1
ammo_12x76_dart = 1
ammo_12x76_zhekan = 1
ammo_5.45x39_ap = 1
ammo_5.45x39_fmj = 1
ammo_9x39_sp5 = 1
ammo_9x39_ap = 1
ammo_9x39_pab9 = 1
ammo_5.56x45_ss190 = 1
ammo_5.56x45_ap = 1
ammo_7.62x54_7h14 = 1
ammo_7.62x54_7h1 = 1
ammo_7.62x54_ap = 1
ammo_gauss = 1
ammo_og-7b = 1
ammo_vog-25p = 0.1
ammo_vog-25 = 0.1
grenade_f1 = 0.1 (если поставить 1.0, то после смерти вы 100% найдете гранату F1)
grenade_rgd5 = 0.1
ammo_m209 = 0.1
;Медикаменты
bandage = 0.4 (если поставить 0, то после смерти вы не найдете у сталкера бинты)
medkit = 0.2 (если поставить 0, то после смерти вы не найдете у сталкера аптечку)
medkit_army = 0
medkit_scientic = 0.05 (если поставить 1, то после смерти вы 100% найдете у сталкера научную аптечку)
antirad = 0.2
;Еда
bread = 0.2(если поставить 1, то после смерти вы 100% найдете у сталкера булку аптечку)
kolbasa = 0.2(если поставить 0.02, то после смерти вы с 2% вероятностью найдете у сталкера колбасу)
conserva = 0.1
vodka = 0.1
energy_drink = 0.1
 

Аллоды Онлайн - off (4 года)
ArcheAge - off (6 месяцев)
Свободный поиск ММОРПГ

#2
Виталий_Зверь

Виталий_Зверь

    Убийца тушканов

  • Не в сети
  • Старожилы
  • Завсегдатай - больше 1 год на сайте
<- Информация ->
  • Регистрация:
    14-March 09
  • 1376 Cообщений
  • Пропуск №: 281


Репутация: 5524 Постов: 1376
  • Страна проживания:Россия
  • Реальное имя:Виталий
  • Пол:Мужчина
  • Город:ЕКБ, Россия
Установка нескольких "Сталкеров" на один комп.

Способ из шпаргалки.

Два "Сталкера" на одном компе возможно?

Вот, кстати, сейчас решил поковырять реестр на свой страх и риск-)И получилось! Вобщем, заходишь: Пуск-Выполнить, там пишешь regedit.
Открывается окно редактора реестра, в нем находишь раздел:
HKEY_LOCAL_MACHINE\SOFTWARE\GSC Game World, удаляешь GSC Game World и вуаля!
Старый "Сталкер" работает и нового можно поставить.


Способ 2, если вы пользуетесь ноудвд.

Берём установленую игру и копируем по любому адресу, в папку бин закидываем нодвд, создаём с него ярлык и всё работает...

Устанавливаем несколько модов на одного "Сталкера"

(при условии, что патч одинаковый требуется).

У нас установлен, к примеру, мод АМК, что бы не заводить ещё один "Сталкер" на компе берём папку геймдата, переименовываем в геймдата1.... Спокойно ставим следующий мод. При надобности включения первого мода, переименовываем вторую геймдату, а первую возвращаем...
Аллоды Онлайн - off (4 года)
ArcheAge - off (6 месяцев)
Свободный поиск ММОРПГ

#3
Виталий_Зверь

Виталий_Зверь

    Убийца тушканов

  • Не в сети
  • Старожилы
  • Завсегдатай - больше 1 год на сайте
<- Информация ->
  • Регистрация:
    14-March 09
  • 1376 Cообщений
  • Пропуск №: 281


Репутация: 5524 Постов: 1376
  • Страна проживания:Россия
  • Реальное имя:Виталий
  • Пол:Мужчина
  • Город:ЕКБ, Россия

*
Популярное сообщение!

Спавн транспорта.


 
Для спавна трантспорта надо иметь немного знаний.
Умение расспаковывать и запаковывать алл.спавн.

Открываем файл алл.спавна той локации, где мы хотим спавнить транспорт и вставляем секцию:
 
[номер секции(не должен повторяться]
; cse_abstract properties
section_name = m_car
name = niva
position = Ставим свои координаты
direction = Ставим свои координаты

; cse_alife_object properties
game_vertex_id = Ставим свои координаты
distance = Ставим свои координаты
level_vertex_id = 129150
object_flags = 0xffffffba

; cse_visual properties
visual_name = physics\vehicles\niva\veh_niva_u_01

cse_alife_object_breakable properties
healht = 1

Запаковываем, вставляем в игру.

Далее находим ...\GSC World Publishing\S.T.A.L.K.E.R\gamedata\config\creatures\vechicles.ltx
и вставляем туда:
 
[niva]
GroupControlSection = spawn_group
$spawn = "vehicles\vehicle_btr"
class = SCRPTCAR
cform = skeleton
visual = physics\vehicles\niva\veh_niva_u_01.ogf
actor_visual = physics\vehicles\niva\veh_niva_u_01.ogf
ef_equipment_type = 3
ph_mass = 100000
script_binding = bind_physic_object.init

НИ и машина стоит и ждёт Вас...

Аллоды Онлайн - off (4 года)
ArcheAge - off (6 месяцев)
Свободный поиск ММОРПГ

#4
Виталий_Зверь

Виталий_Зверь

    Убийца тушканов

  • Не в сети
  • Старожилы
  • Завсегдатай - больше 1 год на сайте
<- Информация ->
  • Регистрация:
    14-March 09
  • 1376 Cообщений
  • Пропуск №: 281


Репутация: 5524 Постов: 1376
  • Страна проживания:Россия
  • Реальное имя:Виталий
  • Пол:Мужчина
  • Город:ЕКБ, Россия

*
Популярное сообщение!

Создание простого диалога.

 

Автор я sm7.gif

 
В файле dialogs_какойто_там.xml
по адресу: .....\Program Files\GSC World Publishing\S.T.A.L.K.E.R\gamedata\config\gameplay

создаём такую запись:
 
<dialog id="der_com_start">
<phrase_list>
<phrase id="0">
<text>der_com_start_0</text>
<next>1</next>
</phrase>      
<phrase id="1">
<text>der_com_start_1</text>
<next>2</next>
</phrase>      
<phrase id="2">
<text>der_com_start_2</text>
<next>3</next>
</phrase>      
<phrase id="3">
<text>der_com_start_3</text>
<next>4</next>
</phrase>      
<phrase id="4">
<text>der_com_start_4</text>
<next>5</next>
</phrase>      
<phrase id="5">
<text>der_com_start_5</text>
</phrase>      
</phrase_list>
</dialog>
Пояснения:
<dialog id="der_com_start">             название диалога.
<phrase id="0">                                вызывается строка.
<text>der_com_start_0</text>         эта строка в файле папки с текстами.   
<next>1</next>                               переход к следущей строке.
В файле stable_dialogs_какой_то.xml
по адресу: .....\Program Files\GSC World Publishing\S.T.A.L.K.E.R\gamedata\config\text\rus
прописываем наш диалог, как он будет выглядеть на экране:
 
<string id="der_com_start_0">
             <text>Ты кто?</text>
         </string>
<string id="der_com_start_1">
             <text>Я, это я</text>
         </string>
         <string id="der_com_start_2">
             <text>Ты уверен?</text>
         </string>
         <string id="der_com_start_3">
             <text>Конечно.</text>
         </string>
         <string id="der_com_start_4">
             <text>А ты сможешь доказать?</text>
         </string>
         <string id="der_com_start_5">
             <text>Я надеюсь.</text>
         </string>

Диалог готов. Что бы он появился нужно добавить его в профиль неписю.

Берём файл character_desc_какойто_там.xml
по адресу: ......\Program Files\GSC World Publishing\S.T.A.L.K.E.R\gamedata\config\gameplay
и добавляем строку:
 
<actor_dialog>сюда вставим название диалога</actor_dialog>
и получим строку: <actor_dialog>der_com_start</actor_dialog>


вот, к примеру, эта секция:
 
<?------------------------------------------------------->
<specific_character id="agr_krot" team_default = "1">
         <name>agr_krot_name</name>
         <icon>ui_npc_u_stalker_neytral_rukzak_4</icon>
         <map_icon x="0" y="0"></map_icon>
         <bio>agr_krot_bio</bio>

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

         <rank>507</rank>
         <reputation>49</reputation>
              
         <money min="600" max="2000" infinitive="0"></money>
              
         <panic_threshold>0.0</panic_threshold>

         <visual>actors\neytral\stalker_neytral_rukzak_4</visual>
         <snd_config>characters_voice\human_02\stalker\</snd_config>
         <crouch_type>-1</crouch_type>

         <supplies>
           [spawn] \n
           wpn_walther_m1 \n
           ammo_9x18_pmm = 2 \n
           wpn_ak74 = 1\n
           ammo_5.45x39_ap \n
           device_torch \n
         #include "gameplay\character_food.xml"
         </supplies>
              
#include "gameplay\character_criticals_4.xml"

         <start_dialog>agr_krot_help</start_dialog>
      <actor_dialog>agr_krot_story</actor_dialog>
             <actor_dialog>der_com_start</actor_dialog>
#include "gameplay\character_dialogs.xml"        
       </specific_character>


Всё, бежим смотреть наше творчество!!!!!!


Инфопоршни и другое.

Автор я sm7.gif

 
== Диалог читается один раз и больше не появляется.==
=====================================================

в info_какойто_там.xml
 
<info_portion id="Название"></info_portion>


в dialogs_какойто_там.xml

В начало и конец диалога:
 
<dialog id="Название диалога">
<dont_has_info>Название</dont_has_info>

В конец диалога:
 
<give_info>Название</give_info>
</phrase>
</phrase_list>
</dialog>

после прочтения диалога, он больше не появится.

==============================
== Проверка на наличие денег==
==============================
файл dialogs_какойто_там.xml

под название диалога вставляем:

 
<precondition>имя_скрипта.proverka_money_10000</precondition>

файл имя_скрипта.script

вставляем:
 
function proverka_money_10000()
return db.actor:money()>=10000
end

если не будет 10000 диалог не не появится.

 

================
==Выдача денег==
================
Файл dialogs_какойто_там.xml
Под нужной нам строкой далога вставляем:

 
<action>имя_скрипта.dengi_za_prohod</action>
файл имя_скрипта.script
вставляем:
 
function dengi_za_prohod(first_speaker, second_speaker)
dialogs.relocate_money(second_speaker, 10000, "in")
end

Будет выдано 10000.

 

 

=================
==Изьятие денег==
=================
Файл dialogs_какойто_там.xml
под нужной нам строкой диалога вставляем:
 
<action>имя скрипта.give_money_10000</action>


файл имя_скрипта.script
в скрипт вставляем:
function give_money_10000(t1,t2)
local npc=t1
if npc:id()==db.actor:id() then
npc=t2
end
dialogs.relocate_money(npc,10000,"out")
end
Изымется 10000 монет.


Список будет продолжен.

Создание файлов для диалогов и квестов.

Автор я. sm7.gif

 
Спросите - для чего это надо? Отвечу коротко и, надеюсь, понятно.

Для более удобного совмещения модов.

Создадим файл dialogs_zver_kopdon.txt , далее его, с помощью тотал командера( или чем вы пользуетесь), меняем окончание
.txt на .xml и получаем готовый файл - dialogs_zver_kopdon.xml
открываем его и вставляем в него следущее:
 
<?xml version="1.0" encoding="windows-1251" ?>
<string_table>

</string_table>


Всё, наш файл готов к работе, здесь можно прописывать русскоязычные диалоги.
Помещаем его по адресу: .....\Program Files\GSC World Publishing\S.T.A.L.K.E.R\gamedata\config\text\rus
Что бы его игра увидела, нужно его прописать. Открываем файл localization.ltx ,
который находится по адресу: ....\Program Files\GSC World Publishing\S.T.A.L.K.E.R\gamedata\config.
Находим строку:
;список xml файлов, содержащих таблицы символов
и в самом конце списка через запятую прописываем dialogs_zver_kopdon

Всё, можно работать!!!

Создадим файл zver_kordon_dialogs.xml . Пропустим создание, так как оно подробно расписано выше.
Откроем файл и вставим:
 
<?xml version="1.0" encoding="windows-1251" ?>
<game_dialogs>

</game_dialogs>

Файл готов к работе. Здесь формулу диалога. Положим его по адресу:
...\Program Files\GSC World Publishing\S.T.A.L.K.E.R\gamedata\config\gameplay
Прописываем что бы видела игра по адресу
...\Program Files\GSC World Publishing\S.T.A.L.K.E.R\gamedata\config\system.ltx
Находим строку: [dialogs] в конце списка прописываем zver_kordon_dialogs .

Всё, работаем!!!

Создадим файл инфо где будут прописываться инфопоршни.
Создадим файл info_zver_kordon.xml
Откроем файл и вставим:
 
<?xml version='1.0' encoding="windows-1251"?>

<game_information_portions>

</game_information_portions>


Файл готов к работе. Положим его по адресу:
...\Program Files\GSC World Publishing\S.T.A.L.K.E.R\gamedata\config\gameplay
Прописываем что бы видела игра по адресу:
...\Program Files\GSC World Publishing\S.T.A.L.K.E.R\gamedata\config\system.ltx
Находим строку: [info_portions] в конце списка прописываем info_zver_kordon.xml

Всё, можно работать!!!

Про файл скрипт, он тоже нам нужен в квестописании.

просто создаём файл zver_1.script и помещаем его по адресу:
D:\Program Files\GSC World Publishing\S.T.A.L.K.E.R\gamedata\scripts

Всё, можно работать!!!

И, как бонус, создание файла из серии character_desc_......xml .

Создадим файл character_desc_zver.xml .

Откроем файл и вставим:
 
<?xml version='1.0' encoding="windows-1251"?>

<xml>

</xml>


Файл готов к работе. Здесь мы прописываем профили неписей. Положим его по адресу:
...\Program Files\GSC World Publishing\S.T.A.L.K.E.R\gamedata\config\gameplay .
Прописываем что бы видела игра по адресу:
...\Program Files\GSC World Publishing\S.T.A.L.K.E.R\gamedata\config\system.ltx .
Находим строку: [profiles] в конце списка прописываем character_desc_zver .

Всё, работаем!!!

Аллоды Онлайн - off (4 года)
ArcheAge - off (6 месяцев)
Свободный поиск ММОРПГ

#5
Виталий_Зверь

Виталий_Зверь

    Убийца тушканов

  • Не в сети
  • Старожилы
  • Завсегдатай - больше 1 год на сайте
<- Информация ->
  • Регистрация:
    14-March 09
  • 1376 Cообщений
  • Пропуск №: 281


Репутация: 5524 Постов: 1376
  • Страна проживания:Россия
  • Реальное имя:Виталий
  • Пол:Мужчина
  • Город:ЕКБ, Россия
Как найти что либо в игре


 
Очень много возникает вопросов о названии предметов в игре, а так же функций и поршней. Я решил написать этот тутор, что бы практически любой игрок мог найти всё самостоятельно.

Для этого нам понадобится "тотал командер" (я использую сборку Total Commander DreamLair, она бесплатна и имеет большой функционал) и расспакованая геймдата.

Запускаем тотал и находим в нём нашу геймдату, открываем её. Находим в строке управления кнопку "Поиск файлов" и нажимаем её. Появляется окно. Нам не нужен поиск файлов, поэтому мы выбираем строку с текстом. Вводим туда строку нужного нам диалога. К примеру "В корнях увядшего гиганта". В конце поиска мы видим, что найден один файл. Кликаем по кнопке "Перейти к файлу" и видим выделеный файл. Открывем его в блокноте и поиском блокнота находим нашу строку:
 
<string id="ziklop_stix2_0">
<text>Привет, телепат, выручай, Голограмма к тебе отправил...</text>
</string>
<string id="ziklop_stix2_1">
<text>Здорово, Стрелок. Я в курсе. Слушай, что на ум пришло - сразу горорю, крутились в голове слова сталка одного, Valerich кличут, я только подправил на свой лад...\n\n  В корнях увядшего гиганта\nПрипрятан тайничок с добром\nТам, где незрячие снуют без дела\nМежду фонящим хламом и холмом\nЧто ближе всех к Долине Беспредела\n\nСтрелок, я уверен, что ты это место отлично знаешь...</text>
</string>
<string id="ziklop_stix2_2">
<text>Ну, местный Пушкин... Надо записать, чтобы потом сто раз не бегать с вопросами... Ты бы хоть намекнул, на какой это локации...</text>
</string>
<string id="ziklop_stix2_3">
<text>Да, запиши, чтоб не забыть... Вдумайся в слова, а найти - не трудно... Удачи.</text>
</string>

ziklop_stix2_0 Копируем эту запись и возвращаемся к ТК, там возвращаем нашу геймдату и вбиваем в поиск тотала копированую запись. Поиск находит нам два файла, один из них мы уже пользовали, а второй мы будем изучать сейчас. Откроем его... В этом файле мынаходим с помощью поиска блокнота следующие строки:
<dialog id="ziklop_stix2">
<dont_has_info>ziklop_stix2_start</dont_has_info>
<has_info>golo_detektor_nayti_done</has_info>
<phrase_list>
<phrase id="0">
<text>ziklop_stix2_0</text>
<next>1</next>
</phrase>   
<phrase id="1">
<text>ziklop_stix2_1</text>
<next>2</next>
</phrase>   
<phrase id="2">
<text>ziklop_stix2_2</text>
<next>3</next>
</phrase>   
<phrase id="3">
<text>ziklop_stix2_3</text>
<give_info>ziklop_stix2_start</give_info>
<action>arhara_dialog.new_inventory18</action>
</phrase>   
</phrase_list>
</dialog>  

Прошу заметить, что диалог начинается с <dialog id, а заканчивается </dialog>. Это нам нужно для того, что бы полностью увидеть диалог.
Ну-с... начнём копаться в чужом творении...
 
<dont_has_info>ziklop_stix2_start</dont_has_info> и
<give_info>ziklop_stix2_start</give_info>

Это для того, что бы диалог появился один раз, нам это не надо.
 
<has_info>golo_detektor_nayti_done</has_info>

Этот поршень проверяет когда появится этот диалог, если его убрать, то диалог появится при первой встрече с персонажем кому принадлежит сей разговор.
 
<action>arhara_dialog.new_inventory18</action>

Вот это экшен - это и есть то, что являет нам вещи и НПС в игре...
Экшен состоит из двух частей arhara_dialog (это название скрипта, который находится по адресу ...\GSC World Publishing\S.T.A.L.K.E.R\gamedata\scripts) Вторая часть - это название функции(new_inventory18), что ж переместимся в скрипт arhara_dialog.
--' рюкзачок тайника вора
function new_inventory18()
local se_obj = alife():create("m_inventory_box18", vector():set(195.210,-1.436,53.253),339324,384)
end
Вот это и есть функция которая спавнит тайник. m_inventory_box18- это и есть обьект спавна.

Приведу ещё пример функции спавна для усвоения прочитаного..
 
function spawn_new_dok()
local obj = alife():create("old_doc_4",vector():set(-44.533,20.47,2.048),2377,1530)
end


old_doc_4 - если пропишем в продажу, то получим...

Ну вот, вроде, и всё... Удачи, чито-сталкеры)))

Аллоды Онлайн - off (4 года)
ArcheAge - off (6 месяцев)
Свободный поиск ММОРПГ

#6
Korpus

Korpus

    Сталкер

  • Не в сети
  • Старожилы
  • Спонсор сайта Завсегдатай - больше 1 год на сайте
<- Информация ->
  • Регистрация:
    21-February 10
  • 1011 Cообщений
  • Пропуск №: 877


Репутация: 3742 Постов: 1011
  • Пол:Мужчина
  • Город:Коренная Пустынь, Россия
Создание новых диалогов.

 

Ещё один вариант урока по указанному в заглавии вопросу.
Автор не я, уточню - пропишу. Лексика и стилистика сохранены. Исправлены только небрежности в грамматике.


К примеру: ты хочешь написать диалог Сидоровичу, заходишь в character_desc_escape.xml и со строчки:

 
< specific_character id="escape_trader" no_random = "1">
до:
< /specific_character>

это описание самого Сидоровича. Диалоги, которые можно с ним вести, написаны так:

 
< start_dialog>escape_trader_start_dialog< /start_dialog>
< actor_dialog>escape_trader_talk_info< /actor_dialog>
< actor_dialog>escape_trader_jobs< /actor_dialog>
< actor_dialog>tm_trader_dialog< /actor_dialog>
< actor_dialog>tm_trader_reward< /actor_dialog>
 


Добавляешь свою строчку. Ну, к примеру:

< actor_dialog>escape_trader_para_voprosov< /actor_dialog>


Выглядеть это будет так:

 

 
< start_dialog>escape_trader_start_dialog< /start_dialog>
< actor_dialog>escape_trader_talk_info< /actor_dialog>
< actor_dialog>escape_trader_jobs< /actor_dialog>
< actor_dialog>tm_trader_dialog< /actor_dialog>
< actor_dialog>tm_trader_reward< /actor_dialog>
< actor_dialog>escape_trader_para_voprosov< /actor_dialog>
 


То, что подчёркнуто, можно назвать по другому. Далее ты, наверное, определился, какой у тебя будет диалог, ну так вот составляем диалог. Идёшь в configtextrusstable_dialogs_escape.xml
и начинаешь писать (у меня вот такой диалог):

 
< string id="escape_trader_para_voprosov_0"> --это начало диалога должно быть 0
< text >Сидорович, у меня к тебе несколько вопросов. Мог бы ты мне на них ответить?.< /text > --сам текст
< /string>
< string id="escape_trader_para_voprosov_1">
< text >Ну, задавай. Чё знаю, то скажу.< /text >
< /string>
< string id="escape_trader_para_voprosov_2">
< text >Кто такой Стрелок?< /text >
< /string>
< string id="escape_trader_para_voprosov_3">
< text >Не могу вспомнить, кто я. Ты меня раньше видал?< /text >
< /string>
< string id="escape_trader_para_voprosov_4">
< text >А что дальше за военым блокпостом?< /text >
< /string>
< text >Что дальше за мостом?< /text >
< /string>
< text >Что здесь вообще нужно делать?< /text >
< /string>
< string id="escape_trader_para_voprosov_7">
< text >Как ты сюда попал?< /text >
< /string>
< string id="escape_trader_para_voprosov_8">
< text >Стрелок - это очень крутой Сталкер. Говорят, что он смог пробраться к центру Зоны, и вернуться обратно живым. Больше этого, кроме него и его команды, никто не смог сделать.< /text >
< /string>
< text >Ты мне кого-то напоминаешь... Вот только не могу вспомнить. Заходил ко мне похожий на тебя, но только я не могу вспомнить.< /text >
< /string>
< string id="escape_trader_para_voprosov_10">
< text >А что поможет тебе вспомнить?< /text >
< /string>
< text >Ого! Серьёзный ты человек, Меченый. Да ладно. Серьёзно говорю, что вспомнить не могу, сам понимаешь возраст.< /text >
< /string>
< text >За военным блокпостом совершенно другой мир, там гражданские со своими правами. Ну, в общем, это там совсем не то что Зона!< /text >
< /string>
< string id="escape_trader_para_voprosov_13">
< text >Ну, дальше за мостом продолжается кордон метров так 400, а там уже идёт свалка - не очень хорошее место ...< /text >
< /string>
< string id="escape_trader_para_voprosov_14">
< text >Что здесь нужно делать? Странный вопрос. Здесь нужно выживать, стрелять, бегать и может останешься жив.< /text >
< /string>
< string id="escape_trader_para_voprosov_15">
< text >Эх, Меченый... Попал я сюда давно ещё, когда был молодым и еще зеленым сталкером. На свободе мне не было места, да и проблемы с законом. Потом освоился. А, ведь, на воле я тоже торговлей занимался. Тоже продавал незаконно и много... Вот и посадили, а потом выдался случай мне. Сидели мы не далеко от Зоны... Ну, километра так 4. И вот в одну ночь (ну, так как я был торгашом), я всё же договорился с подполковником (не помню как его зовут), что я смогу на 2 часа в конвое съездить домой повидать родственников. За это он с меня требовал 2000 долларов! Ну, что делать. Я согласился и мы поехали. Приехал я  домой, а никаких родственников у меня уже не было, даже не знаю куда они пропали, отдал деньги майору, который меня сопровождал. И тут возле раковины увидал я нож, когда в дверь кто-то постучал… Майор оглянулся, два солдата, сопровождающих меня, подошли к двери, открыли, а там никого. Я в это время вспомнил, что у меня под раковиной пистолет, тихо нашарив пистолет я выскочил, а в это время они стояли все у двери, и выстрелил.< /text >
< /string>
< string id="escape_trader_para_voprosov_16">
< text >И что дальше?< /text >
< /string>
< text >Быстро обыскав солдат, нашел там всего 1000 рублей забрал свои 2000 долларов, 2 АК, и 2 Пм, рванул к машине, завёл и сам не понимая, как и куда, приехал сюда. Остановился в деревне новичков. Они меня сразу приняли за сталкера. Ну, вот так я и стал Сидоровичем!< /text >
< /string>
 


Ну, вот. Вроде бы и написали. Теперь идём в configgameplaydialogs_escape.xml

и там пишем такое:
--идентификатор нашего диалога, ну к какому диалогу в stable_dialogs_escape.xml будет обращаться

 

 
< dialog id="escape_trader_para_voprosov"> --идентификатор диалога, обязательно!
< phrase_list > --обязательный тег типа лист фразы
< phrase id="0"> --начало диалога т. е. первое, что будет сказано
< text >escape_trader_para_voprosov_0< /text > --сам текст, также берётся из stable_dialogs_escape.xml escape_trader_para_voprosov_0
< next >1< /next > -- следующая фраза
< /phrase>
< phrase id="1">
< text >escape_trader_para_voprosov_1< /text >
< next >2< /next > --вот тут имеется выбор у Меченого, какой вопрос задать Сидоровичу
< next >3< /next >
< next >4< /next >
< next >5< /next >
< next >6< /next >
< next >7< /next >
< /phrase>
< phrase id="2">
< text >escape_trader_para_voprosov_2< /text >
< next >8< /next >
< /phrase>
< phrase id="3">
< text >escape_trader_para_voprosov_3< /text >
< next >9< /next >
< /phrase>
< phrase id="4">
< text >escape_trader_para_voprosov_4< /text >
< next >12< /next >
< /phrase>
< phrase id="5">
< text >escape_trader_para_voprosov_5< /text >
< next >13< /next >
< /phrase>
< phrase id="6">
< text >escape_trader_para_voprosov_6< /text >
< next >14< /next >
< /phrase>
< phrase id="7">
< text >escape_trader_para_voprosov_7< /text >
< next >15< /next >
< /phrase>
< phrase id="8">
< text >escape_trader_para_voprosov_8< /text >
< next >10< /next >
< /phrase>
< phrase id="9">
< text >escape_trader_para_voprosov_9< /text >
< next >11< /next >
< /phrase>
< phrase id="10">
< text >escape_trader_para_voprosov_10< /text >
< next >11< /next >
< /phrase>
< phrase id="11">
< text >escape_trader_para_voprosov_11< /text >
< /phrase> --нет перехода на другую фразу значит заканчивается
< phrase id="12">
< text >escape_trader_para_voprosov_12< /text >
< /phrase>
< phrase id="13">
< text >escape_trader_para_voprosov_13< /text >
< /phrase>
< phrase id="14">
< text >escape_trader_para_voprosov_14< /text >
< /phrase>
< phrase id="15">
< text >escape_trader_para_voprosov_15< /text >
< next >16< /next >
< /phrase>
< phrase id="16">
< text >escape_trader_para_voprosov_16< /text >
< next >17< /next >
< /phrase>
< phrase id="17">
< text >escape_trader_para_voprosov_17< /text >
< /phrase>
< /phrase_list>
< /dialog> --диалог закончился

 

Ну, всё. Теперь, когда будешь у Сидоровича, сможешь задать ему "пару вопросов".


2b8f7224f7209e1ca6d4cb6c8ac42c555f8b4c10
Как корабль назовёшь,так он и потонет... -
Глупость всё увидит, Разум многое не станет замечать.

На все вопросы по игре отвечаю только на форуме


#7
Valerich

Valerich

    Бывалый

  • В сети
  • Неактивированные

<- Информация ->
  • PipPipPip
  • Регистрация:
    05-April 10
  • 80 Cообщений
  • Пропуск №: 1114


Репутация: 114 Постов: 80
  • Пол:Мужчина
  • Город:Ярославль, Россия

Урок по замене текстур артефактов без редактирования в 3Д редакторах и СДК.
 

 
Я не буду писать где, откуда и что взялось (для этого уйма всего написано на разных сайтах по "Сталкеру")
Начнем.
У Вас есть модель арта с текстурами. Пишу по примеру своих работ.
Модель расположена по пути: ...\gamedata\meshes\physics\anomaly ( Вы можете создать дополнительную папку , чтоб не путать с другими моделями, например, как я: ...\gamedata\meshes\physics\anomaly\danek и туда ложить все Ваши модели артов).
Соответственно, в секциях артефакта нужно прописывать правильный путь до модели (смотри строку в коде visual ):
 
;------------------------------- "Гиря" -------------------------------
[af_dummy_dumbbell]:af_base
GroupControlSection = spawn_group
$spawn = "artifacts\dummy dumbbell"
$npc = on; option for Level Editor
;$prefetch = 3
cform = skeleton
class = ARTEFACT

visual = physics\anomaly\danek\artefact_dumbbell.ogf
description = enc_zone_artifact_af-dummy-dumbbell
inv_name = af-dummy-dumbbell
inv_name_short =
inv_weight = 18.0

inv_grid_x = 28
inv_grid_y = 9
jump_height = 0.1

cost = 20000
particles = anomaly2\artefact\artefact_zharka

lights_enabled = false


Далее смотрим, наша модель арта имеет название artefact_dumbbell.ogf
Я открываю этот файл прогой Notepad++ и вижу там вот такие крякозябры:
d0b31ccc8fe0461de3b00a603c03c0a56da155804f14d40472cd4d5c98a0d35b18920fd06da15580
То, что нам нужно обведено красным - это как раз текстуры, которые использует артефакт. Также это можно увидеть с помощью проги RST_Model_Viewer, кликнув на соответствующие вкладки.
Отвлеклись...
Значит, наш арт использует текстуры artifact_myasorubka1.dds и capsule_artifact_1.dds и находятся они по пути: gamedata\textures\artifact, и как раз получается вид артефакта вот такой:
f93df56408840af3e517c293d344cdc75f56fc48
Но нас этот вид, допустим, не устраивает, и мы хотим поменять его раскрас, да и ещё чтоб не затронуть другие арты, т.к. обе текстуры могут использоваться и другими артами ( соответственно, если мы их поменяеи и оставим под прежними названиями, то и у других артов поменяется раскраска). Нам этого не надо.
Значит, сначало ищем текстуры какие нам по душе (я использую Фотошоп или прогу WTV 0.84b).
Я ничего не искал ,а сделал их сам из абстракций в фотошопе (в нете полным полно)
bd938e89c1bcc409715c100c9df037cc6da15580ee83da8cc20beff1242a43d04e060f116da15580
Допустим, название новых текстур art_new_1.dds и art_new_2.dds.
Теперь, чтоб вставить безболезненно для текстур других артов, мы должны в файле artefact_dumbbell.ogf с помощью блокнота поменять названия.
Приступим. Открываем этот файл ( модель арта) и строку artefact\artifact_myasorubka1 изменяем на, допустим : artefact\artifact_myasorub100 , а artefact\capsule_artifact_1 изменяем на, допустим: artefact\capsule_artifac100.
(ВНИМАНИЕ ! Ваше название должно иметь СТОЛЬКО ЖЕ знаков по количеству, как и оригинал. )

Сохраняем изменения в файле модели арта (... .ogf).
Далее вставляем наши новые текстуры (art_new_1.dds и art_new_2.dds ) в папку artifact по пути: gamedata\textures . Затем переименовываем НАШИ НОВЫЕ текстуры в artifact_myasorub100 и capsule_artifac100 и вуаля , вот что у нас получилось:
fceb160d3d447aee731a33d45a15967f6da16080
В файлах ogf (модель) могут быть и ссылки на другие папки с текстурами (такие как pfx и др.) - смотреть внимательно.

автор Valerich


Профессионалами НЕ рождаются - ими становятся.

#8
Korpus

Korpus

    Сталкер

  • Не в сети
  • Старожилы
  • Спонсор сайта Завсегдатай - больше 1 год на сайте
<- Информация ->
  • Регистрация:
    21-February 10
  • 1011 Cообщений
  • Пропуск №: 877


Репутация: 3742 Постов: 1011
  • Пол:Мужчина
  • Город:Коренная Пустынь, Россия
Маленький урок по созданию озвучек.

Простенький пример:
Создание такой фишки, как озвучка еды:

В папке Scripts создаем чистый скриптовый файл с именем inv_food и в него поместим функцию:
local eat = nil



function use_med()

if eat and type(eat) == 'number' then

if not level.object_by_id( eat ) then

local snd_obj = xr_sound.get_safe_sound_object([[interfaceinv_food]])   <---

snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)

end

eat = nil

end



if eat and type(eat) == 'userdata' then

eat = eat:id()

else

eat = nil

end

end



function drop_med(obj)

local obj_sect = obj:section()

if obj_sect == 'conserva' or obj_sect == 'kolbasa' or obj_sect == 'bread' then

eat = obj

end

end


где, (отмечено <---) local snd_obj = xr_sound.get_safe_sound_object([[interfaceinv_food]])- это путь к звуку;
if obj_sect == 'conserva' or obj_sect == 'kolbasa' or obj_sect == 'bread' then, это объекты на которые распространяется озвучка.

Затем в файле bind_stalker.script лежащий в папке script под строчкой function actor_binder:update(delta) напишем следующие:

-- озвучка для жратвы (еды, пищи, хавчика и пр.) sm2.gif
inv_food.use_med()

в этом же файле под строчкой function actor_binder:on_item_drop (obj) пишем:

inv_food.drop_med(obj)

Вот и всё. По образу и подобию создаем озвучку и для водки с энергетиком и аптечки, так же можно использовать для всего, на что хватит фантазии. Стоит заметить, что в микрофон можно "нашептать", что угодно - чавканье, сопение, бульканье - записать в любом звуковом редакторе и сконвертировать в нужный файл с расширением ogg и поместить его в нужную папку в нужное место (\sound).

 

Выражается благодарность Fantom2323.

2b8f7224f7209e1ca6d4cb6c8ac42c555f8b4c10
Как корабль назовёшь,так он и потонет... -
Глупость всё увидит, Разум многое не станет замечать.

На все вопросы по игре отвечаю только на форуме


#9
Korpus

Korpus

    Сталкер

  • Не в сети
  • Старожилы
  • Спонсор сайта Завсегдатай - больше 1 год на сайте
<- Информация ->
  • Регистрация:
    21-February 10
  • 1011 Cообщений
  • Пропуск №: 877


Репутация: 3742 Постов: 1011
  • Пол:Мужчина
  • Город:Коренная Пустынь, Россия
Создание нового НПС в игру.

маленький урок-пример

 
Для того, чтобы создать нового НПС понадобятся координаты нужного места, где и будет заспаунен наш НПС. Возьмём Кордон, лагерь новичков. Можно снять координаты самим, а можно взять уже снятые: (-218.20,-20.2,-145.63),35362,47). Далее. Создаём файл в папке gamedata/scripts файл, скажем, esc_unik_npc.script.
В нём создаём функцию -
function esc_unik_npc () alife():create("esc_unik_npc",vector():set(-218.20,-20.2,-145.63),35362,47) end
Теперь в файле npc_profile.xml (в папке gameplay) добавляем нового НПС.
Для примера находим:
<character id="escape_trader">
<class>Trader</class>
<specific_character>escape_trader</specific_character>
</character>

Копируем или создаём по его образцу свой блок (так как нового торговца нам не надо):
<character id="esc_unik_npc">
<class>esc_unik_npc</class>
<specific_character>esc_unik_npc</specific_character>
</character>

Теперь создадим секцию нашего персонажа.
В файле spawn_section.ltx (gamedata/config/creatures) в блоке:
--------Escape--------------
--------neutrals------------

создаём свою секцию:
[esc_unik_npc]:stalker $spawn = "respawnesc_unik_npc" character_profile = esc_unik_npc spec_rank = regular community = dolg
В строке с community можно вместо Долга вписать другую группировку. Однако, если надо, чтобы персонаж не гулял по Зоне, пока не наткнётся на первую же аномалию, то пропишем так, чтобы он стоял на месте. Для этого под строкой с community вставляем:
custom_data = scriptsesc_unik_npc.ltx
Далее заходим в gamedata/config в папку scripts. В папке создаём файл esc_unik_npc.ltx. В этот созданный файл вставляется:

[logic]
active = remark1
danger = danger_ignore

[danger_ignore]
ignore_distance = 5

[remark1]
no_move = true

Всё. Новый НПС будет стоять на месте своего спауна.
Едем дальше. Нам надо активировать нашего персонажа. Для этого мы должны вставить строку:
<action>esc_unik_npc.esc_unik_npc</action>

либо в диалог, либо в какой-нибудь квест. Давайте вставим строку в файл info_portions.xml (gamedata/gameplay) под строку
<game_information_portions>

строки:
<info_portion id="storyline_actor_start">  
<task>storyline_eliminate_gunslinger</task>

Выглядеть это будет так:

<game_information_portions>
<info_portion id="storyline_actor_start">  
<task>storyline_eliminate_gunslinger</task>  
<action>esc_unik_npc.esc_unik_npc</action>  
</info_portion>

 

Однако, ещё не прописан сам НПС, как личность. В файле character_desc_escape.xml (gamedata/gameplay) добавляем:

 
<specific_character id="esc_unik_npc" team_default = "1">
<name>GENERATE_NAME_bandit</name>
<icon>ui_npc_u_stalker_bandit_3</icon> <bio>esc_wolf_bio</bio>

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

<rank>367</rank>
<reputation>-60</reputation>
<money min="600" max="2000" infinitive="1"/>

<snd_config>characters_voicehuman_01monolith</snd_config>
<crouch_type>-1</crouch_type>

<visual>actors\bandit\stalker_bandit_3</visual>
<supplies>

[spawn] \n
wpn_groza \n
ammo_9x39_pab9 \n

#include "gameplaycharacter_items.xml"
#include "gameplaycharacter_food.xml"
</supplies>

#include "gameplaycharacter_criticals_3.xml"
#include "gameplaycharacter_dialogs.xml"

</specific_character>

Правда, тут получится, что появляется долговец в одежде бандита, говорящий голосом монолитовца. sm2.gif
Всё сохраняем. НПС готов.

Так же можно добавить нашему НПС диалог. Как добавлять диалог уже написано в других постах. Если надо сделать нашему НПС своё уникальное имя, то в файле stable_bio_name.xml (gamedata/config/text/rus) добавляем:

 
<string id="esc_unik_npc">
<text>Вася Пупкин</text>
</string>

А в файле сharacter_desc_escape.xml(gamedata/gameplay) находим нашего уже прописанного НПС и вставляем в секцию (а у нас в ней уже написано GENERATE_NAME_bandit) - вместо того, что в скобочках - esc_unik_npc.

Всё.

 

С позволения Korpus-а, небольшое уточнение по логике (файл esc_unik_npc.ltx)...
active = remark
Такая активная схема, по большому счёту, неприемлима. В активной схеме необходимо указывать walker, kamp или какую-нибудь другую. Тогда придётся распаковывать all.spawn и прописывать в нём пути. 
remark предназначен для переключения между схемами, когда надо, например, чтоб сталкер проиграл анимацию, звук и т.п. 

Я всего один раз использовал  remark в качестве активной, но там сталкеру жить было очень недолго, по задумке он должен был довольно быстро "откинуть копыта" и мне стало лень возиться с путями, координатами (для  walker-а).

Fagot

 

2b8f7224f7209e1ca6d4cb6c8ac42c555f8b4c10
Как корабль назовёшь,так он и потонет... -
Глупость всё увидит, Разум многое не станет замечать.

На все вопросы по игре отвечаю только на форуме


#10
Labys

Labys

    Пришедший

  • Не в сети
  • Пользователь

<- Информация ->
  • Регистрация:
    27-January 11
  • 3 Cообщений
  • Пропуск №: 3703


Репутация: 0
  • Пол:Мужчина
  • Город:Гродно, Беларусь

Добавление режима freeplay в "Тени Чернобыля".

Автор мне неизвестен!
Делается это так:

 
в файле gamedata/script/xr_effects.script ищем строку :

function after_credits(actor, npc)

и ниже находим вот что: c:execute("disconnect") . Меняем "disconnect" ,например, на hud_crosshair 1 и все, после концовок (похоже, даже фальшивых) будет возможно продолжить игру... Теперь добавляйте точки перехода (например, на Припять) и все, freeplay работает.


Сообщение отредактировал Fagot: 25 February 2014 - 15:14


#11
Comador

Comador

    Бывалый

  • Не в сети
  • Пользователь

<- Информация ->
  • Регистрация:
    08-December 10
  • 93 Cообщений
  • Пропуск №: 3283


Репутация: 0 Постов: 93
  • Пол:Мужчина
  • Город:Кировоград, Украина

Переключаем моды BAT файлом.
 

Статья

В свое время на глаза попалась статья камрада max о том, как с помощью BAT файла переключать моды. Статья заинтересовала тем, что дает возможность хранить разные моды в одной папке, при этом на каждый мод создается BAT файл (с помощью которого мод запускается). Итак, приступим.
В качестве примера приведу свою папку, где установлены: Народная солянка, Тайные тропы 2, Sigerous Mod (под ТЧ). Основа для всех их ТЧ с 4 патчем. Сохранки, логи, скрины хранятся в этой же папке (F:\STALKER).
Для каждого мода создана своя папка gamedata: igra_gamedata (НС), gamedata_TT2 (ТТ2), gamedata_SGM_SC (Sigerous Mod).
Создадим в корне игры три текстовых документа:
Igra.bat

ren igra_gamedata gamedata      

      cd bin      

      XR_3DA.exe -nointro -noshadows -noprefetch      

      cd..      

      ren gamedata igra_gamedata

 



TT2.bat

ren gamedata_TT2 gamedata      

      cd bin      

      XR_3DA.exe -nointro -noshadows -noprefetch      

      cd..      

      ren gamedata gamedata_TT2

 



SGM_SC.bat

ren gamedata_SGM_SC gamedata      

      cd bin      

      XR_3DA.exe -nointro -noshadows -noprefetch      

      cd..      

      ren gamedata gamedata_SGM_SC

Теперь каждый мод запускается своим батником. Но так как моды находятся в одной папке, то и сохранения их будут пересекаться, что не есть хорошо.
Создаем в корне игры для каждого мода папку, где будут хранится сохранки, логи и скрины. В итоге имеем три папки: Igra (НС), TT2 (Тайные тропы) и SGM_SC (Sigerous Mod). Берем файл fsgame.ltx и переименовываем его в Igra_fsgame.ltx, открываем блокнотом и изменяем путь до папки с сохранками:

$app_data_root$=true|false|F:\|STALKER\Igra

 



Теперь добавим строки в батник запуска этого мода. Вот, что должно получиться:

ren igra_gamedata gamedata      

      ren Igra_fsgame.ltx fsgame.ltx      

      cd bin      

      XR_3DA.exe -nointro -noshadows -noprefetch      

      cd..      

      ren gamedata igra_gamedata      

      ren fsgame.ltx Igra_fsgame.ltx

 


Теперь при запуске мода НС ч/з этот батник, сохранки, логи и скрины будут писаться в папку Igra, что нам и нужно.
Такие же манипуляции проводим для оставшихся двух модов.
Создаем файл TT2_fsgame.ltx, открываем блокнотом и изменяем путь до папки с сохранками:

$app_data_root$=true|false|F:\|STALKER\TT2

Правим батник для этого мода:

ren gamedata_TT2 gamedata      

      ren TT2_fsgame.ltx fsgame.ltx      

      cd bin      

      XR_3DA.exe -nointro -noshadows -noprefetch      

      cd..      

      ren gamedata gamedata_TT2      

      ren fsgame.ltx TT2_fsgame.ltx

 


И, наконец, создаем файл SGM_SC_fsgame.ltx, открываем блокнотом и изменяем путь до папки с сохранками:

$app_data_root$=true|false|F:\|STALKER\SGM_SC

 


Правим батник запуска:

ren gamedata_SGM_SC gamedata      

      ren SGM_SC_fsgame.ltx fsgame.ltx      

      cd bin      

      XR_3DA.exe -nointro -noshadows -noprefetch      

      cd..      

      ren gamedata gamedata_SGM_SC      

      ren fsgame.ltx SGM_SC_fsgame.ltx

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


Сообщение отредактировал Fagot: 25 November 2013 - 04:37


Не столь важно что ты делаешь, важно как ты это делаешь! (Джимми Лансфорд)

#12
Comador

Comador

    Бывалый

  • Не в сети
  • Пользователь

<- Информация ->
  • Регистрация:
    08-December 10
  • 93 Cообщений
  • Пропуск №: 3283


Репутация: 0 Постов: 93
  • Пол:Мужчина
  • Город:Кировоград, Украина
Худ: создание, редактирование.

Многие задавались вопросом: какие файлы отвечают за худ, что мы видим во время игры на экране? Приведу небольшое руководство.

 
Руководство
 
Для вывода худа на экран используются текстуры и конфигурационные файлы, в частности
текстуры из папки - textures\ui:
1- ui_hud.dds (собственно, опорный файл содержащий почти все текстуры худа);
2 - cursor.dds (текстура прицела без оружия в руках, попросту кругляшка);
3 - hud_map_arrow.dds (стрелка компаса).

Конфиги из папки - config\ui:
1 - maingame.xml (содержит конфиги индикаторов здоровья и состояния брони, индикаторов состояния ГГ (радиация,поломка оружия и т.п.), окно патронов и всё, что с ним связано, пояс артефактов, мигающая иконка ПДА и кол-во контактов, а так же состояние машины);
2 - motion_icon.xml (содержит конфиги положения ГГ (сидит,стоит и т.п.), а так же полоски выносливости, уровня шума и заметности ГГ);
3 - ui_custom_msgs.xml (часы, худы повреждений);
4 - zone_map.xml (миникарта).

Теперь более подробно разберем конфигурационные файлы.
Открываем файл maingame.xml и видим:

<static_health - положение "колбы" здоровья,
<progress_bar_health- полоска здоровья,

<static_armor - положение "колбы" состояния брони,
<progress_bar_armor - полоска брони,

<static_weapon - окно патронов + тип патронов,
<static_ammo - количество патронов,
<static_wpn_icon - иконка коробки от патронов,

<car_panel - состояние машины,

<static_pda_online - счётчик контактов,

<quick_info - задания и инфа об обучения в начале игры,

<icons_scroll_view - список индикаторов состояния ГГ (радиация, голод и т.п.).
Далее идёт сам список, но он не поддаётся правке индивидуально. Правим только всё сразу строчкой <icons_scroll_view:

<flashing_icons> - мигающий ПДА,

<pick_up_item - "поднять предмет",

<artefact_panel - панель артов.

Открываем файл motion_icon.xml и видим:

<background - текстура, на которой будет всё отображаться.

список иконок положения ГГ:
начиная от <state_normal и заканчивая <state_sprint

<power_progress - полоска выносливости,
<luminosity_progress - полоска заметности ГГ,
<noise_progress- полоска издаваемого шума.

Открываем файл ui_custom_msgs.xml:

<hud_timer - текстура часов,
<hud_timer_text - цифры часов,

<controller_fx- худ повреждения от контролёра,
<controller_fx2 - худ повреждения от контролёра,

<monster_claws - худ повреждения от мутанта (царапины),

<main_task - "главное задание".

Предупреждения:
<cs_psy_danger - о сильном излучении,
<cs_radiation_danger - о высоком уровне радиации,

<game_saved - "игра сохранена",
<autosave - "автосохранение".

Инфа:
<item_used- "использован .... " (аптечка и т.п),
<gun_jammed - "оружее заклинило",
<cant_walk - "вы слишком истощены",
<cant_walk_weight - "вы перегружены",
<not_enough_money_mine - у ГГ не хватает денег,
<not_enough_money_other - у НПС не хватает денег.

Далее идут строчки с координатами сообщений связанных с пингом (это для мультиплеера).

Открываем файл zone_map.xml:

<level_frame - сама карта,
<background - рамка карты,
<dist_text - расстояние до цели,
<compass - компас,
<center - это точка ГГ на карте (изменяя ширину width и высоту height можно увеличить/уменьшить точку ГГ на карте).
 

Сообщение отредактировал Fagot: 25 November 2013 - 04:37


Не столь важно что ты делаешь, важно как ты это делаешь! (Джимми Лансфорд)

#13
Serious

Serious

    Сталкер

  • Не в сети
  • Пользователь

<- Информация ->
  • Регистрация:
    07-October 10
  • 256 Cообщений
  • Пропуск №: 2788


Репутация: 0 Постов: 256
  • Пол:Мужчина
  • Город:Кемерово, Россия
Дополнение к посту Виталия_Зверя по теме:
"Установка нескольких "Сталкеров" на один компьютер."

 

Инструкция
 
1. В любом месте создать папку с любым именем, но лучше на English. Например: D:\STALK ;
2. Скопировать в неё всё содержимое папки C:\Program Files\GSC World Publishing\S.T.A.L.K.E.R. ;
3. Создать папку для сейвов, логов и скринов, например: Stalk_saves ;
4. Открыть файл D:\STALK\fsgame.ltx ;
5. Изменить строку $app_data_root$=true|false|C:\Documents and Settings\All Users\Документы\STALKER-SHOC\ на $app_data_root$=true|false|D:\Stalk_saves\ .

Так можно поставить столько "Сталкеров", на сколько хватит места. ©

Сообщение отредактировал Fagot: 25 November 2013 - 04:37


#14
Valerich

Valerich

    Бывалый

  • В сети
  • Неактивированные

<- Информация ->
  • PipPipPip
  • Регистрация:
    05-April 10
  • 80 Cообщений
  • Пропуск №: 1114


Репутация: 114 Постов: 80
  • Пол:Мужчина
  • Город:Ярославль, Россия

Как сделать иконку.
Рассчитан на тех пользователей, кто уже работал с Фотошопом, т.к. начало действа выбирать Вам, как и окончание, а промежуточные я описал.

 
 
Для начала, подгони сетку в фотошопе под файл иконок Сталкера:
4fe1de110baf59d0ac42ffad8ea3e89c6da16692d0312976da01ed15fbdcbd661d7e44206da16692
Делаем, как обведено КРАСНЫМ.

Короче, не важно какая картинка, лишь бы нас устраивало качество и сам вид того, для чего делаем иконку. Вырезаем из картинки то, что нам нужно. Про это писать не буду - кто как умеет, тот так пусть и делает, или учится более удобным способом. Итак, мы вырезали из картинки то, что нам нужно, но у нас получилось много свободного места. Убираем его с помощью Тримминга (см. скрины):
bc1c4b986f5b32d9c74cc5199a6505a96da1669287e6a1419567ab8bb0f86149f2810f246da16692

Вот мы и обрезали лишнее, далее создаем ДУБДИКАТ файла (копия):
ff15d9b60e96d27c3c50b248538e1dfa6da16692

И уже работая с копией делаем так (см. скрины):
6342d3b7765910970116f7776f6180706da1669290751698df07f0a5bfa9ec63211c59576da16692

Передвигаем курсор до конца ВПРАВО и получим такое:
610fcb766b2f0ee1238b3565178c8ea16da16692

Всё с тем же файлом (копия), творим далее (см. скрины):
cc3bfdb423f8592fb490764e1e4a0dcf6da16692 получим 4ed5b828a1248892950d2323d7a9275d6da16692

Чушь какая то, правда ? Эээ нет, всё это для того, чтоб НЕ МАЯТЬСЯ С АЛЬФА-КАНАЛОМ.

Всё, теперь переходим к оригиналу, нажимаем внизу "кнопечку", тем самым создавая альфа-канал в нашем оригинальном файле.
240e571c79be3bb1f3edd6bc78d52f226da16692
Далее переходим в КОПИЮ, выделяем её с помощью прямоугольной обводки (см. скрин):
7fbea3de5a9b8d759f24defa94a432bd6da16692
Нажимаем Ctrl+C (на копии).
Переходим в ОРИГИНАЛ с активированным (выделенным) альфа-каналом и нажимаем Ctrl+V. Щелкаем ЛКМ и получим вот такой альфа-канал:
4c6dc685476f178b83f75382f841663e6da16692
Ну вот, теперь у нас всё готово, за исключением одного - размер велик. Сейчас уменьшим - делаем так, как на скринах:
5e7115db6a163e5740069f6a309ebc796da16692c0ec6fdc32e63e9d27da254c9815cf696da16692
Так как мы заранее побеспокоились о том, чтобы у нас размер был в пикселях и так как у меня АРТЕФАКТ, то мне необходим размер не более 50х50, вот я и меняю больший размер (тот что 544) на 49 (не хочу чтоб арт был по самому краю), соответственно, т.к. у нас отмечено сохранение масштаба, то прога сама выдаст другое число:
e5f04f6adeb0c28d73d0d2ef16b594486da16692
Нажимаем ОК - всё готово.
Теперь с помощью Ctrl+C,Ctrl+V,Ctrl+Т определенных (выделенных) каналов творим чудеса вставки и перемещения в файле иконок - это описывать не буду.
Всем удачи.

Сообщение отредактировал Fagot: 25 November 2013 - 04:37

Профессионалами НЕ рождаются - ими становятся.

#15
Хабарович

Хабарович

    Лидер "Изобретателей"

  • Не в сети
  • Неактивированные

<- Информация ->
  • PipPip
  • Регистрация:
    21-September 10
  • 46 Cообщений
  • Пропуск №: 2627


Репутация: 0
  • Пол:Мужчина
  • Город:Серпухов, Россия
Цитата (Shumak)
Как сделать, чтобы по завершению диалога, например с Сидоровичем, в рюкзаке Меченого появился определённый предмет?
 

Напишу...

Даем ГГ предмет после какого-либо разговора. Создадим для этого новую ветку диалога у Сидоровича.
Для этого нам понадобится:
1) в папке ...\gamedata\config\gameplay
character_desc_escape.xml
dialogs_escape.xml
2) в папке ...\gamedata\scripts
Чтобы не путаться создадим свой файл. Назовем его My_scr.script .
Сразу же в нем пропишем это:

function add_item_sidor(first_speaker, second_speaker)
local actor, npc
if db.actor and db.actor:id() == first_speaker:id() then
actor = first_speaker
npc = second_speaker
else
actor = second_speaker
npc = first_speaker
end
dialogs.relocate_item_section(actor, "af_gravi", "in")

В этой ф-ции мы выявляем ГГ и даем ему артефакт "Грави".

Откроем character_desc_escape.xml ,
в поиске вводим слово "trader" - это Сидорович.
Добавляем туды диалог "poluchit_gravi" :

<specific_character id="escape_trader" no_random = "1">
....
<actor_dialog>poluchit_gravi</actor_dialog>
</specific_character>

Отлично. Мы разобрали второй шаг. У нас есть корень. Осталось сделать на него ссылку. Движемся дальше.
открываем dialogs_escape.xml
и в любом месте пишем:

<dialog id="poluchit_gravi">
<phrase_list>
<phrase id="0">
<text>Привет, Сидор, у тебя нет случаем артефакта "Грави"?</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>Для тебя, мой дорогой, есть все. Держи.</text>
<action>my_scr.add_item_sidor</action>
</phrase>
</phrase_list>
</dialog>

Все. Идем к Сидору, ищем диалог, тыкаем, получаем "Грави".
По аналогии можно поставить любой предмет.

 

Как привязать к какому-либо предмету какой-нибудь скрипт?

Начну, как обычно. Понадобятся след. файлы:
...\gamedata\config\misc\items.ltx
...\gamedata\scripts\bind_stalker.script
А так же создадим свой собственный файл. Назовем его my_scr.script и поместим его в директорию \gamedata\scripts\
Итак, для начала создадим, собственно, вещь, которую хотим видеть уникальной.
Открываем файл items.ltx и в самом верху вставляем строки:
[army_bread]:identity_immunities
GroupControlSection    = spawn_group
discovery_dependency =
$spawn     = "food and drugs\army_bread"
;$prefetch    = 32
class    = II_ATTCH
cform    = skeleton
visual    = weapons\bred\bred.ogf

description   = "Армейский хлеб. Такой есть только у военных. Если такой хлеб есть у игрока - он военный."

inv_name    = "Армейский хлеб"
inv_name_short   = "Армейский хлеб"
inv_weight   = 0.03
inv_grid_width   = 1
inv_grid_height  = 1
inv_grid_x   = 19
inv_grid_y   = 45
cost     = 10000

Теперь напишем код, который будет присваивать группировку "Военный" игроку.
Откроем файл, который мы создали: My_scr.script .
Напишем в нем:
function join_military(actor, npc)
if db.actor ~= nil then
db.actor:set_character_community("stranger", 0, 0)
local chkgoodwill = relation_registry.community_goodwill("military", db.actor:id())
if chkgoodwill < 0 then
chkgoodwill = chkgoodwill + 1600
relation_registry.set_community_goodwill ("military", db.actor:id(), chkgoodwill)
else
relation_registry.set_community_goodwill ("military", db.actor:id(), 1600)
end
end
end

function bread_item_take(obj)
local info=nil
if obj:section()=="army_bread" then join_black_stalker(obj)
end
end
Таким образом мы задали две ф-ции: 1 - само "принятие" в группировку, а 2 - инициализация предмета.
Идем дальше.

Мы сделали почти что все, что нужно, нам осталось только привязать наш код к предмету.
Делаемся это в файле bind_stalker.script .
Открываем его, ищем строку function actor_binder:on_item_take (obj) - это то, что нам нужно.
Дальше спускаемся почти в самый низ ф-ции.
Перед строками:
if rx_ai then
rx_ai.actor_item_take(obj)
end

пишем ссылку на наш код.
В общем виде должно получится вот так:
function actor_binder:on_item_take (obj)

dmx_mod.dmx_item_take(obj) -- DMX MOD

level_tasks.proceed(self.object)
local item = obj
--AMK UTILS--
amk.on_item_take(obj)
amk_utils.actor_item_take(obj)
sak.check_used_item(obj)
braad_test.checking_use_item(obj)
if xrs_ai then xrs_ai.actor_item_take(obj)
end

--AMK UTILS--
babah.on_item_take(obj)
inventory.on_item_take(item)
arhara_dialog.checking_taken_item58(obj)

---------------------------------
my_scr.bread_item_take(obj)
---------------------------------

if rx_ai then
rx_ai.actor_item_take(obj)
end
end
Все. последний этап пройден.

 

Создаем свою группировку.

Нам понадобится:
1)...\gamedata\config\creatures\game_relations.ltx
2)...\gamedata\config\text\rus\string_table_general.xml
3)...\gamedata\scriptsse_respawn.script
4)...\gamedata\scriptsxr_statistic.script
Теперь начнем.
Заглядываем в первый файл и ищем строчку "communities"
и прописываем в конце:
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, sniper, 18, green, 20, nebo, 22, lastday, 24, fotoman, 26, black_stalker, 28
28 - идентификатор нашей группировки.
Теперь ищем строку "[communities_relations]" и пишем в самом низу нашу группировку и ее отношения к остальным, чтобы получилось вот так:
[communities_relations]
; |actor|act_dol|act_fre|stalker|monolit|military|killer|ecolog|dolg|freedom|bandit|zombied|stranger|trader |arena_enemy|sniper|green|nebo|lastday|fotoman|
black_stalker    = 0,  0,    0,    0,    0,     0,     0,     0,     0,   0,     0,    0,   0,  0,   0,    0,   0,   0, 0, 0
[rank_relations]

black_stalker - это наша группировка. Сделаем так, чтобы она была абсолютно нейтральна(даже зомби будут нейтралами sm2.gif )

Дальше в этом же файле ищем строку "[communities_sympathy]"
и дописываем внизу фразу. Должно получится вот так:
[communities_sympathy]
actor   = 0.0
actor_dolg  = 0.0
actor_freedom  = 0.0
stalker   = 0.0
...
black_stalker = 0.0           

[rank_kill_points]
Отлично. С этим файлом все, идем дальше.
Сделаем так, чтобы в окне данных ГГ отображалась группировка на русском языке, а не "black stalker" .
Открываем второй файл и пишем в самом начале:
            <string id="black_stalker">
              <text>Черный сталкер</text>
            </string>
Тут все. Теперь нюансы. Делаем так, чтобы все сталкеры из нашей группировки могли респавниться.
Открываем третий файл и сразу же видим строку: "local simMaxCount = {..." Она нам и нужна.
Нам нужно вписать строку между сталкерами и монстрами. Должно получится так:
local simMaxCount = {
            stalker_novice = 30, stalker_regular = 35, stalker_veteran = 35, stalker_master = 35,
            monolith_novice = 10, monolith_regular = 35, monolith_veteran = 39, monolith_master = 45,
...
            black_stalker_novice = 20, black_stalker_regular = 20, black_stalker_veteran = 20, black_stalker_master = 6,
                      
            cat_weak = 30, cat_normal = 30,cat_strong = 30,
Отлично. Теперь перестрахуемся и сделаем так, чтобы, если мы убьем члена группировки Черных Сталкеров, нас не выбросило из игры с крашем.
Открываем четвертый файл и так же, как и в предыдущем пишем:
local killCountProps = {
           neutral_novice = 1,  neutral_experienced = 2,  neutral_veteran = 3,  neutral_master = 4,
           monolith_novice = 1,  monolith_experienced = 2,  monolith_veteran = 3,  monolith_master = 4,
           military_novice = 1,  military_experienced = 2,  military_veteran = 3,  military_master = 4,
           killer_novice = 1,  killer_experienced = 2,  killer_veteran = 3,  killer_master = 4,
           ecolog_novice = 1,  ecolog_experienced = 2,  ecolog_veteran = 3,  ecolog_master = 4,
...
           black_stalker_novice = 1, black_stalker_experienced = 2, black_stalker_veteran = 3, black_stalker_master = 4,
...
           tushkano_weak = 1,
                  rat_weak = 1,           rat_normal = 2,         rat_strong = 3,
...

Все. Мы сделали основную часть.
Дальше можно поступить по-разному: написать небольшой код на принятие в группировку и вставить какому-либо неписю или сделать так, как я написал перед этим ("Как привязать к какому-либо предмету какой-нибудь скрипт? ").
Либо же вовсе создать нового НПЦ со своим диалогом, торговлей и пр. и через него входить в группировку.

Автор: Кирилл Н. (тобишь я)

Сообщение отредактировал Fagot: 25 February 2014 - 15:16


#16
Хабарович

Хабарович

    Лидер "Изобретателей"

  • Не в сети
  • Неактивированные

<- Информация ->
  • PipPip
  • Регистрация:
    21-September 10
  • 46 Cообщений
  • Пропуск №: 2627


Репутация: 0
  • Пол:Мужчина
  • Город:Серпухов, Россия

от drondu

как добавить точку перехода?

 

Разберем процесс создания точки перехода.

 

Довольно трудоемкая работа. Советую делать тем, у кого установлена Солянка и есть скрипты Сяка. Начнем.
Нам нужно:
1)\gamedata\scripts\level_new.script
2)\gamedata\scripts\level_tasks.script
Открываем и приступаем к созданию перехода. Как пример рассмотрим переход с Кордона прямиков к "вратам" бара, но обратно перехода не делаем.
В самой шапке файла пишем:
function create_kordon-bar()
          level_new.create_level_changer(99999, vector():set(-171.4188, -19.93194, -165.5464),76655,52,
          35877,  1233, vector():set(122.669631, 0.036333, 19.7726402), vector():set(-0.8196038,0,0.57293063 ),"l05_bar",0)
end

Теперь у нас в самом начале игры будет открыт переход Кордон-Бар. Переход будет в домике в лагере новичков.
Теперь подробно:
         p_story_id,    -- STORY_ID нового level_changer (понадобится нам позже)
          p_position,    -- вектор, координаты точки, в которой будет располагаться центр нового level_changer
          p_lvertex_id,    -- level_vertext_id  - идентифицируют уровень, на котором будет создан level_changer
          p_gvertex_id,    -- game_vertext_id             
                   
          p_dest_lv,    -- level_vertex_id   - идентифицируют уровень, на который level_changer будет перебрасывать игрока          
          p_dest_gv,    -- game_vertex_id
          p_dest_pos,    -- координаты точки, в которой на новом уровне окажется игрок
          p_dest_dir,    -- направрение взгляда игрока
          p_dest_level,    -- название уровня, например "L11_Pripyat"
          p_silent    -- следует задать 1, чтобы подавить вопрос о смене уровня (автоматический переход)

Все. Переход есть. Но мы его не сможем увидеть, ведь на карте-то его нет).
Открываем файл level_tasks.script ,
в нем находим строку "function add_lchanger_location()"
и в конец этой ф-ции добавляем наш переход. Должно выйти примерно так:
function add_lchanger_location()
          local sim = alife()
          local actor = db.actor
          if sim then
           -- escape
           local obj = sim:story_object(91)
           if obj then
            level.map_add_object_spot(obj.id, "level_changer", "На Свалку")
           end
                          
           obj = sim:story_object(99999)
              if obj then
            level.map_add_object_spot(obj.id, "level_changer", "В Бар")
                   end
По аналогии можно делать переход обратно, а так же в другие места. Удачи.

Автор: Кирилл Н. (тобишь я)

Сообщение отредактировал Fagot: 25 November 2013 - 05:53


#17
bogdan161RUS

bogdan161RUS

    Пришедший

  • Не в сети
  • Пользователь

<- Информация ->
  • Регистрация:
    01-August 12
  • 6 Cообщений
  • Пропуск №: 6901


Репутация: 0
  • Пол:Мужчина
  • Город:Ростов-на-Дону, Россия

Создание ремонт-комплектов.
Я опишу пример создания рем.комплекта для костюмов. Дело в том, что различия в создании рем.комплектов для оружия и костюмов почти нет.

 
1. Для начала нам нужно создать сам рем.комплект, то есть предмет, а уже потом вешать на него функцию при использовании. Для этого в config\misc\items.ltx в конец добавляем конфиг нашего предмета:
[repair_kit_outfit]:identity_immunities
GroupControlSection = spawn_group
discovery_dependency =
$spawn = "food and drugs\repair kit outfit"
$prefetch = 32
class = II_ANTIR ;класс не трогаем!
cform = skeleton
visual = equipments\item_merger.ogf ;модель
description = enc_equipment_repair_kit_outfit ;ссылка на описание в config\text\rus\....xml

inv_name = repair_kit_outfit_name ;ссылка на название в config\text\rus\....xml
inv_name_short = repair_kit_outfit_name ;тоже самое, что и inv_name
inv_weight = 6.0 ;вес

inv_grid_width = 2 ;ширина иконки
inv_grid_height = 1 ;высота иконки
inv_grid_x = 8 ;координата x иконки
inv_grid_y = 18 ;координата y иконки
cost = 10000 ;цена
;всё ниже написанное не трогаем, оно нам и не нужно
eat_health = 0
eat_satiety = 0
eat_power = 0
eat_radiation = 0
wounds_heal_perc = 0
eat_portions_num = 1
animation_slot = 4
hud = wpn_vodka_hud
2. Теперь добавим название и описание. Для этого в файле config\text\rus\string_table_enc_equipment.xml в конец между </string> и </string_table> добавляем строки по аналогии с уже написанными:
<string id="repair_kit_outfit_name">
<text>Ремонт комплект ДПК</text>
</string>
<string id="enc_equipment_repair_kit_outfit">
<text>Новинка от Вани Болта - ремонт комплект ДПК для быстрой и эффективной починки костюмов. При его создании были учтены все недочёты и, следовательно, удалены. Благодаря улучшенным инструментам и деталям, а также облегченному весу весьма ценен. С его помощью можно увеличить состояние костюма до 100%, если он повреждён не больше 30%. Незаменимая вещь во время вылазки.</text>
</string>

Отлично, с предметом закончили. Теперь приступим к самому главному - скриптам.

Работа со скриптами.

1. Вешаем функцию починки при использовании нашего рем.комплекта. Для этого в файле scripts\bind_stalker.script находим функцию: function actor_binder:reinit() и после строки self.object:set_callback(callback.take_item_from_box, self.take_item_from_box, self) пишем:
self.object:set_callback(callback.use_object, self.repair_outfit_start, self)
Теперь в папке scripts создаёте свой скриптовой фаил "ваше_название_скрипта.script". Но! Название должно быть написано на английском языке и вместо пробелов должен стоять знак "_". Опять открываем bind_stalker.script и в самый конец добавляем эту функцию:
function actor_binder:repair_outfit_start(obj, who)
if obj then
if obj:section() == "repair_kit_outfit" then --здесь указываем предмет, при использование которого будет срабатывать функция ниже
ваше_название_скрипта.repair_outfit() --здесь указываем ссылку на функцию. Сначала скрипт, в котором она написана, потом название самой функции
end
end
end
2. Добавляем саму функцию ремонта. Для этого в файле ваше_название_скрипта.script пишем:
-- Рем.комплект для костюмов
function repair_outfit()
local item_s6 = db.actor:item_in_slot(6) --объявляем переменную (item_s6)
if item_s6 ~= nil and item_s6:condition() >=0.30 and item_s6:condition() ~=1 then --когда костюм можно чинить (состояние больше или равно 30%)
item_s6:set_condition(1)
local snd_obj = xr_sound.get_safe_sound_object([[interface\inv_detach_addon]])
snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,0,255,0]Ремонт костюма завершен."
db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(83,470,83,47), 1000, 5000)
elseif item_s6 == nil then --когда костюма нет
local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,255,0,0]Ремонт невозможен: нужно одеть коcтюм."
db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(83,470,83,47), 1000, 5000)
alife():create("repair_kit_outfit", db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id())
elseif item_s6:condition() <0.30 then --когда костюм нельзя чинить (состояние меньше 30%)
local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,255,0,0]Ремонт невозможен: костюм слишком сильно повреждён."
db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(83,470,83,47), 1000, 5000)
alife():create("repair_kit_outfit", db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id())
elseif item_s6:condition() ==1 then --когда костюм в отличном состояние
local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,255,0,0]Ремонт невозможен: %c[255,0,255,0]костюм в отличном состояние."
db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(83,470,83,47), 1000, 5000)
alife():create("repair_kit_outfit", db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id())
end
end
Всё! Теперь заходим в игру и наслаждаемся.

Небольшая заметка:
1. Чтобы сделать рем.комплект для оружия проделываем тоже самое, только переименовываем всё вместо outfit на weapon и в функцие починки ставим слот 1 или 2 (оружейные слоты) вместо 6 (слот костюмов).
Ещё нужно заменить переменную item_s6 ,например, на item_s1 или item_s2.

2. Число 0.30 - минимальное состояние изношенности костюма, следовательно, его можно менять на любое вам угодное.


Источник: S.T.A.L.K.E.R. Inside 


Сообщение отредактировал Fagot: 25 November 2013 - 04:31


#18
VIP1Strel0k

VIP1Strel0k

    Пришедший

  • Не в сети
  • Пользователь

<- Информация ->
  • Регистрация:
    14-January 13
  • 13 Cообщений
  • Пропуск №: 7664


Репутация: 0
  • Пол:Мужчина
  • Город:Хабаровск, Россия
Создаём укрытие от выброса в ЗП.

 

Пропишем нужному нам смарт-терейну укрытие:

"gamedata\configs\misc\simulation_objects_props.ltx"

[esc_sim_13]:default      
      surge = 1  ; прописали возможность укрытия      
      territory = 1      
      sim_avail = true

Регистрируем наше укрытие:
"gamedata\configs\misc\surge_manager.ltx"

;escape      
      esc_surge_hide_sim_13

Зарегистрируем нашу локацию в скриптах:
"gamedata\scripts\sim_board.script"


--'******************************************************
--'* Реестр смарт-террейнов. Игровое поле симуляции.
--'******************************************************
--' В этом ltx хранятся дескрипторы сквадов.      
      squad_ltx = system_ini()      
      setting_ini = ini_file("misc\\simulation.ltx")      

      local group_id_by_levels = {zaton = 1,      
      pripyat = 2,      
      jupiter = 3,      
      labx8 = 4,      
      jupiter_underground = 5,      
      escape = 6}
 

"gamedata\scripts\smart_terrain.script":

--строка 1196      
      function surge_stats()      
      local sim_obj_registry = simulation_objects.get_sim_obj_registry().objects      
      local sim_squads = {      
      ["zaton"] = {},      
      ["jupiter"] = {},      
      ["pripyat"] = {},      
      ["escape"] = {}      
      }      
      local sim_smarts = {      
      ["zaton"] = {},      
      ["jupiter"] = {},      
      ["pripyat"] = {},      
      ["escape"] = {}       
      }      
      --строка 1241      
      print_smarts_and_squads_by_level("zaton")      
      print_smarts_and_squads_by_level("jupiter")      
      print_smarts_and_squads_by_level("pripyat")      
      print_smarts_and_squads_by_level("escape")

"gamedata\scripts\surge_manager.script":

--строка 38      
      self.levels_respawn = {zaton = false, jupiter = false, pripyat = false, escape = false}      
      --строка 194      
      xr_sound.set_sound_play(db.actor:id(), "zat_a2_stalker_barmen_after_surge")      
      elseif(level.name()=="jupiter") then      
      xr_sound.set_sound_play(db.actor:id(), "jup_a6_stalker_medik_after_surge")      
      elseif not has_alife_info("pri_b305_fifth_cam_end") then      
      xr_sound.set_sound_play(db.actor:id(), "pri_a17_kovalsky_after_surge")      
      elseif(level.name()=="escape") then      
      xr_sound.set_sound_play(db.actor:id(), "zat_a2_stalker_barmen_after_surge")      
      --строка 249      
      if(level.name()=="zaton") then      
      xr_sound.set_sound_play(db.actor:id(), "zat_a2_stalker_barmen_surge_phase_2")      
      elseif(level.name()=="jupiter") then      
      xr_sound.set_sound_play(db.actor:id(), "jup_a6_stalker_medik_phase_2")      
      elseif not has_alife_info("pri_b305_fifth_cam_end") then      
      xr_sound.set_sound_play(db.actor:id(), "pri_a17_kovalsky_surge_phase_2")      
      elseif(level.name()=="escape") then      
      xr_sound.set_sound_play(db.actor:id(), "zat_a2_stalker_barmen_surge_phase_2")      
      --строка 273      
      if(level.name()=="zaton") then      
      xr_sound.set_sound_play(db.actor:id(), "zat_a2_stalker_barmen_surge_phase_1")      
      elseif(level.name()=="jupiter") then      
      xr_sound.set_sound_play(db.actor:id(), "jup_a6_stalker_medik_phase_1")      
      elseif not has_alife_info("pri_b305_fifth_cam_end") then      
      xr_sound.set_sound_play(db.actor:id(), "pri_a17_kovalsky_surge_phase_1")      
      elseif(level.name()=="escape") then      
      xr_sound.set_sound_play(db.actor:id(), "zat_a2_stalker_barmen_surge_phase_1")      
      --строка 329      
      self.levels_respawn = {zaton = true, jupiter = true, pripyat = true, escape = true}      
      --строка 352      
      self.levels_respawn = {zaton = true, jupiter = true, pripyat = true, escape = true}      
      --строка 638      
      packet:w_bool(self.levels_respawn.zaton)      
      packet:w_bool(self.levels_respawn.jupiter)      
      packet:w_bool(self.levels_respawn.pripyat)      
      packe t:w_bool(self.levels_respawn.escape)      
      --строка 665      
      self.levels_respawn.zaton = packet:r_bool()      
      self.levels_respawn.jupiter = packet:r_bool()      
      self.levels_respawn.pripyat = packet:r_bool()      
      self.levels_respawn.escape = packet:r_bool()

переходим к олл.спавн - создаем секцию укрытия:
"alife_escape.ltx"

[xxxx]      
      ; cse_abstract properties      
      section_name = space_restrictor      
      name = esc_surge_hide_sim_13      
      position = -11.2279901504517,2.46390247344971,57.3380393981934      
      direction = 0,0,0      
      version = 0x7c      
      script_version = 8      

      ; cse_alife_object properties      
      game_vertex_id = 934      
      distance = 0      
      level_vertex_id = 3366      
      object_flags = 0xffffff3e      

      ; cse_shape properties      
      shapes = shape0      
      shape0:type = box      
      shape0:axis_x = 3.27519989013672,0,0      
      shape0:axis_y = 0,5.44060039520264,0      
      shape0:axis_z = 0,0,7.41159915924072      
      shape0:offset = 0,0,0      

      ; cse_alife_space_restrictor properties      
      restrictor_type = 0

Создаем точки пути по колличеству мест в укрытии:
"way_escape.ltx"

[esc_sim_13_surge_1_look]      
      points = p0      
      p0:name = name00      
      p0:position = -11.0934257507324,2.45600557327271,56.0012626647949      
      p0:game_vertex_id = 1051      
      p0:level_vertex_id = 286804      

      [esc_sim_13_surge_1_walk]      
      points = p0      
      p0:name = name00      
      p0:position = -12.587254524231,2.45982217788696,54.6062545776367      
      p0:game_vertex_id = 1051      
      p0:level_vertex_id = 284937      

      [esc_sim_13_surge_2_look]      
      points = p0      
      p0:name = name00      
      p0:position = -11.7026491165161,2.45731353759766,55.4043731689453      
      p0:game_vertex_id = 1051      
      p0:level_vertex_id = 285862      

      [esc_sim_13_surge_2_walk]      
      points = p0      
      p0:name = name00      
      p0:position = -11.7085494995117,2.45401954650879,54.6906051635742      
      p0:game_vertex_id = 1051      
      p0:level_vertex_id = 285861      

      [esc_sim_13_surge_3_look]      
      points = p0      
      p0:name = name00      
      p0:position = -11.700403213501,2.46191310882568,55.9261016845703      
      p0:game_vertex_id = 1051      
      p0:level_vertex_id = 285863      

      [esc_sim_13_surge_3_walk]      
      points = p0      
      p0:name = name00      
      p0:position = -10.5211238861084,2.45401906967163,54.5706977844238      
      p0:game_vertex_id = 1051      
      p0:level_vertex_id = 287736      

      [esc_sim_13_surge_4_look]      
      points = p0      
      p0:name = name00      
      p0:position = -12.1378507614136,2.46710777282715,55.9775772094727      
      p0:game_vertex_id = 1051      
      p0:level_vertex_id = 285863      

      [esc_sim_13_surge_4_walk]      
      points = p0      
      p0:name = name00      
      p0:position = -12.5659475326538,2.4704270362854,55.9364585876465      
      p0:game_vertex_id = 1051      
      p0:level_vertex_id = 284939      

      [esc_sim_13_surge_5_look]      
      points = p0      
      p0:name = name00      
      p0:position = -11.3268537521362,2.45915699005127,56.0716171264648      
      p0:game_vertex_id = 1051      
      p0:level_vertex_id = 286804      

      [esc_sim_13_surge_5_walk]      
      points = p0      
      p0:name = name00      
      p0:position = -11.4233283996582,2.45504951477051,55.4901466369629      
      p0:game_vertex_id = 1051      
      p0:level_vertex_id = 286803      

      [esc_sim_13_surge_6_look]      
      points = p0      
      p0:name = name00      
      p0:position = -11.951548576355,2.46743059158325,56.5034790039063      
      p0:game_vertex_id = 1051      
      p0:level_vertex_id = 285864      

      [esc_sim_13_surge_6_walk]      
      points = p0      
      p0:name = name00      
      p0:position = -10.5399560928345,2.45401906967163,55.9832763671875      
      p0:game_vertex_id = 1051      
      p0:level_vertex_id = 287738      

      [esc_sim_13_surge_7_look]      
      points = p0      
      p0:name = name00      
      p0:position = -11.060601234436,2.46146583557129,56.6575355529785      
      p0:game_vertex_id = 1051      
      p0:level_vertex_id = 286805      

      [esc_sim_13_surge_7_walk]      
      points = p0      
      p0:name = name00      
      p0:position = -12.5727767944336,2.47284889221191,57.334114074707      
      p0:game_vertex_id = 1051      
      p0:level_vertex_id = 284941      

      [esc_sim_13_surge_8_look]      
      points = p0      
      p0:name = name00      
      p0:position = -11.7709636688232,2.46654939651489,57.2202682495117      
      p0:game_vertex_id = 1051      
      p0:level_vertex_id = 285865      

      [esc_sim_13_surge_8_walk]      
      points = p0      
      p0:name = name00      
      p0:position = -11.6660528182983,2.4660382270813,56.7951736450195      
      p0:game_vertex_id = 1051      
      p0:level_vertex_id = 285864      

      [esc_sim_13_surge_9_look]      
      points = p0      
      p0:name = name00      
      p0:position = -11.4014568328857,2.4647479057312,57.3022918701172      
      p0:game_vertex_id = 1051      
      p0:level_vertex_id = 286806      

      [esc_sim_13_surge_9_walk]      
      points = p0      
      p0:name = name00      
      p0:position = -10.5875377655029,2.46077871322632,57.3240737915039      
      p0:game_vertex_id = 1051      
      p0:level_vertex_id = 287740      

      [esc_sim_13_surge_10_look]      
      points = p0      
      p0:name = name00      
      p0:position = -12.009449005127,2.47024631500244,58.7685432434082      
      p0:game_vertex_id = 1051      
      p0:level_vertex_id = 285867      

      [esc_sim_13_surge_10_walk]      
      points = p0      
      p0:name = name00      
      p0:position = -12.5359506607056,2.47053003311157,58.6904754638672      
      p0:game_vertex_id = 1051      
      p0:level_vertex_id = 284943      

      [esc_sim_13_surge_11_look]      
      points = p0      
      p0:name = name00      
      p0:position = -11.6696643829346,2.47010707855225,58.7928047180176      
      p0:game_vertex_id = 1051      
      p0:level_vertex_id = 285867      

      [esc_sim_13_surge_11_walk]      
      points = p0      
      p0:name = name00      
      p0:position = -11.7617807388306,2.47143888473511,58.0255508422852      
      p0:game_vertex_id = 1051      
      p0:level_vertex_id = 285866      

      [esc_sim_13_surge_12_look]      
      points = p0      
      p0:name = name00      
      p0:position = -11.1556959152222,2.46973323822021,58.9260101318359      
      p0:game_vertex_id = 1051      
      p0:level_vertex_id = 286808      

      [esc_sim_13_surge_12_walk]      
      points = p0      
      p0:name = name00      
      p0:position = -10.5822420120239,2.46985769271851,58.7564964294434      
      p0:game_vertex_id = 1051      
      p0:level_vertex_id = 287742

Сообщение отредактировал Fagot: 25 November 2013 - 04:36


#19
VIP1Strel0k

VIP1Strel0k

    Пришедший

  • Не в сети
  • Пользователь

<- Информация ->
  • Регистрация:
    14-January 13
  • 13 Cообщений
  • Пропуск №: 7664


Репутация: 0
  • Пол:Мужчина
  • Город:Хабаровск, Россия
Прототип динамических новостей.
 

Создание прототипа динамических новостей.
Вобщем, для этого нужно создать скрипт с названием, типа: ваше_название.script и нужно иметь чистый файл bind_stalker.script. Сделаем свой скрипт и запишем сюда нечто типа этого:

-- Прототип динамичеких новостей          

         local ant_spam ={          

         "Слышал что на АТП с Темной Долины зомбаки ходят. Осторожнее там.",          

         "Тимыч: Кто флудить будет тому оторву кой-чего.",          

         "Кто нибудь знает куда Стрелок делся?",          

         "Военные вообще оборзели! Две тысячи рублей за проход на север кордона - это не хило!",          

         "Завелся Чак Норрис в наших местах. Бандос это с прозвищем таким. Дебил полный.",         

         "Комбат как-то говорил что Тополь пропал. Неизвестно куда. Разминулись в подземке Агропрома",         

         "Долг: Блин переходите на свою волну. А то запалите Свободе планы",         

         "Свобода: Секач опять на Кота наехал. Кого-то скоро по закону Зоны на бой вызывать будут.",         

         "Похоже мне еще в лагере сидеть. Блин долг когда я этот Сидоровичу то отдам?!"         

         }         

                   

         time_news = 0 -- переменная промежутка времени         

                   

         function time_update_spam() -- функция промежутка времени         

          local time = time_global() -- переменная времени         

           if time_news < time then         

             time_news = time + 30000 -- время через которое будет вызываться сообщение         

             ваше_название.update_spam()         

            end         

         end         

                   

         function update_spam()         

           news_manager.send_tip(db.actor, (ant_spam[math.random(9)]), nil, nil, 30000)          

         end
Теперь зайдем в файл bind_stalker.script и после строки:
xr_sound.update_actor()

пишем:

ваше_название.time_update_spam()

Теперь в игре будут через несколько секунд приходить новости. Чем больше время в строке time_news = time + 30000, тем дольше будет промежуток.

 

--------------------------------------

К какой игре (ТЧ,ЧН,ЗП) применимо? Урок твой, или скопировал откуда-нибудь?
Отредактировал орфографию и пунктуацию!

Fagot


#20
VIP1Strel0k

VIP1Strel0k

    Пришедший

  • Не в сети
  • Пользователь

<- Информация ->
  • Регистрация:
    14-January 13
  • 13 Cообщений
  • Пропуск №: 7664


Репутация: 0
  • Пол:Мужчина
  • Город:Хабаровск, Россия

Разбор системы квестов в S.T.A.L.K.E.R.-Зов Припяти.

Разберём параметры:

icon - иконка квеста
Пример использования: icon = ui_inGame2_Put_v_pripyat

prior - приоритет квеста
Пример использования: prior = 112

storyline - флаг задания (true - сюжетное, false - несюжетное)
Пример использования: storyline = true

title - название задание (id из xml) - если брать название не из xml, то в игре оно будет отображаться без пробелов
Пример использования: title = zat_a9_way_gates_check_transport_workshop_name

descr - описание задания (id из xml) - если брать название не из xml, то в игре оно будет отображаться без пробелов
Пример использования: descr = zat_a9_way_gates_check_transport_workshop_text

target - цель на карте (метка)
Примеры использования:
target =zat_a2_stalker_barmen (ID нпц, на которого будет поставлена метка)
target = {+название_инфопоршня}zat_a2_stalker_barmen -- проверка инфопоршня, после которого метка будет поставлена на нпц

on_init - инфопоршень, который "включает" задание
Пример использования: on_init = %+название_инфопоршня%

condlist_x -- блок условий. возможные значения complete, reversed, fail
Примеры использования:
condlist_0 = {+название_инфопоршня} complete - если поршень есть, задание выполнено
condlist_1 = {+название_инфопоршня} reversed - если поршень есть, есть возможность повторить задание
condlist_2 = {+название_инфопоршня} fail - если поршень есть, задание провалено

on_complete - действия, которые выполняются, если задание выполнено
on_reversed - действия, которые выполняются, если задание провалено
Примеры использования:
on_complete = %=inc_faction_goodwill_to_actor(stalker:200)% -- повышаем репу у сталкеров (функция юзаются из xr_effect)
on_reversed = {+название_ифопоршня} %=inc_faction_goodwill_to_actor(stalker:200)% -- повышаем репу у сталкеров, только если есть опр.инфопоршень
on_complete = %+название_инфопоршня% -- выдаем инфопоршень

reward_money - денежная награда
Пример использования: reward_money = 5000

Создаем простой квест:

Используемые файлы:
configs\gameplay\dialogs_zaton.xml
configs\gameplay\info_zaton.xml
configs\gameplay\character_desc_zaton.xml
configs\text\rus\st_ quests_zaton.xml
configs\misc\tm_zaton.ltx
scripts\dialogs_zaton.script
 

Создание диалога.


Открываем файл dialogs_zaton.xml и добавляем перед </game_dialogs>:

<dialog id="vodka_quest_dialog">

<dont_has_info>quest_vodka_done</dont_has_info>

<dont_has_info>quest_vodka_give</dont_has_info>

<phrase_list>

<phrase id="1">

<text>Принеси бутылочку</text>

<give_info>quest_vodka_give</give_info>

<action>dialogs_zaton.give_vodka_quest</action>

</phrase>

<phrase id="0">

<text>Привет, тебе водки не принести?</text>

<next>1</next>

</phrase>

</phrase_list>

</dialog>



<dialog id="vodka_quest_prines">

<has_info>quest_vodka_give</has_info>

<precondition>dialogs_zaton.is_has_vodka_borode</precondition>

<phrase_list>

<phrase id="1">

<text>Спасибо, чувак. Выручил</text>

<give_info>quest_vodka_done</give_info>

</phrase>

<phrase id="0">

<has_info>quest_has_vodka</has_info>

<text>Вот твоя водяра</text>

<action>dialogs_zaton.transfer_vodka_to_boroda</action>

<next>1</next>

</phrase>

</phrase_list>

</dialog>Далее добавляем наши диалоги Бороде.

Открываем файл character_desc_zaton.xml ,
находим строчку <actor_dialog>zat_a2_stalker_barmen_actor_info</actor_dialog> и под ней пишем:

<actor_dialog>vodka_quest_dialog</actor_dialog>
<actor_dialog>vodka_quest_prines</actor_dialog>

Сохраняем.

Инфопоршни и скриптовые функции.


Открываем файл info_zaton.xml и добавляем перед </game_information_portions> пишем:

<info_portion id="quest_vodka_give"></info_portion>

<info_portion id="quest_has_vodka"></info_portion>

<info_portion id="quest_vodka_done"></info_portion>

 Открываем файл dialogs_zaton.script и в начало записываем:

function give_vodka_quest()

task_manager.get_task_manager():give_task("quest_vodka_give")

end

function is_has_vodka_borode()

if db.actor:object("vodka") then

return true

end

return false

end

function transfer_vodka_to_boroda(first_speaker, second_speaker)

dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "vodka")

end

Сохраняем.

 

Сам квест.


Открываем файл tm_zaton.ltx и в конец пишем:

[quest_vodka_give]

icon = ui_inGame2_Put_v_pripyat

prior = 2

storyline = false

title = {=actor_has_item(vodka)}vodka_barmen_prinesti_name, vodka_barmen_naiti_name

descr = vodka_barmen_descr

target = {=actor_has_item(vodka)}zat_a2_stalker_barmen

condlist_0 = {+quest_vodka_done} complete

Открываем файл st_quests_zaton.xml и добавляем после <string_table> :

<string id="vodka_barmen_naiti_name">

<text>Найти водку для бармена</text>

</string>

<string id="vodka_barmen_prinesti_name">

<text>Принести водку бармену</text>

</string>ее

<string id="vodka_barmen_descr">

<text>Бармен в тестовых целях попросил найти и принести ему 2 бутылки водки</text>

</string>

Готово!

---------------------

Отредактировал.

Fagot


Сообщение отредактировал Fagot: 25 February 2014 - 15:18





Количество пользователей, читающих эту тему: 0

0 members, 0 guests, 0 anonymous users

яндекс.метрика
Button automatically alert search engines 31x31 WHOIS.UANIC.NAME - Identify traffic by Google

реклама на сайте подключена