S.T.A.L.K.E.R.: Call of Pripyat - Другое - Модостроительство - Советы начинающим

Создание анимации через файл *.seq

Что за файл таой *.seq - этот файл отвечает за прокрутку файлов формата .dds и .ogf, например курсора в игре.
К примеру, создадим файл "gamedata\ui\ui_ani_cursor.txt", потом изменим ему расширение на .seq. Открываем его в notepad++ или блокнотом и начинаем вписывать (без коментариев).


19 - интервал прокрутки, эту строчку следует редактировать если у вас текстур больше
ui\ui_ani_cursor_01  - название текстуры
ui\ui_ani_cursor_02
ui\ui_ani_cursor_03
ui\ui_ani_cursor_04
ui\ui_ani_cursor_05
ui\ui_ani_cursor_06
ui\ui_ani_cursor_07
ui\ui_ani_cursor_08 


!!!текстуры вписываем без расширения!!! 


Сохраняем его и радуемся. 


Если вы хотите добавить новый курсор то преимениуйте его как написано выше (от 01 до ....), если у вас текстур больше то переименуйте его например.
ui\ui_ani_cursor_09 


Внимание! Не пишите _010 а то фиг что сработает, надо писать так _10


И так по порядку.
Тоже самое можно сделать и с главным меню - это как гиф сделать.
Это всё я далал методом пальцем в небо и всё плучилось!
Автор статьи Mr.MEX

Создание новой группировки

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

Назовем нашу группировку (айди) grom


  1. Открываем файл gamedata-configs-creatures-game_relations.ltx ; названия группировок (порядок должен совпадать с communities_relations)

communities = actor, 0, bandit, 1, dolg, 2, ecolog, 3, freedom, 4, killer, 5, army, 6, monolith, 7, monster, 8, stalker, 9, zombied, 10,grom, 11
   - пишем группировку за следующей как в таблице, и указываем номер, по счету из таблицы, после последней запятая не нужна!!!

[communities_relations]
; |actor|bandit| dolg|ecolog|freedom|killer| army|monolith|monster|stalker| zombied|grom
;===============================================================================
====================
actor = 0, 0, 0, 0, 0, -1000, 0, -5000, -5000, 0, -5000
bandit = 0, 5000,-5000, 0, -5000, 0, -5000, -5000, -5000, -1000, -5000, -5000
dolg = 0, -5000, 5000, 0, -5000, 0, 0, -5000, -5000, 0, -5000, 0
ecolog = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
freedom = 0, -5000,-5000, 0, 5000, 0, 0, -5000, -5000, 0, -5000, 0
killer = -1000, 0, 0, 0, 0, 1000, -5000, -5000, -5000, 0, -5000, 0
army = 0, -5000, 0, 0, 0, -5000, 1000, -5000, -5000, 0, -5000, 0
monolith = -5000, -5000,-5000, 0, -5000, -5000, -5000, 1000, -5000, -5000, 1000, -5000
monster = -5000, -5000,-5000, 0, -5000, -5000, -5000, -5000, 0, -5000, -5000, -5000
stalker = 0, -1000, 0, 0, 0, 0, 0, -5000, -5000, 0, -5000, 5000
zombied = -5000, -5000,-5000, 0, -5000, -5000, -5000, 1000, -5000, -5000, 1000, -5000
grom = -5000, -1000, 0, 0, 0, 0, 0, -5000, -5000, 0, -5000, 5000

Добавляем группировку в таблицу, прописываем отношение к другим группировкам, НЕ ЗАБЫВАЕМ добавлять по еще одному значению по вертикали!

;(порядок должен совпадать с communities_relations)
[communities_sympathy]
actor = 0.0
bandit = 0.0
dolg = 0.0
ecolog = 0.0
freedom = 0.0
killer = 0.0
army = 0.0
monolith = 0.0
monster = 0.0
stalker = 0.0;0.01
zombied = 0.0
grom = 0.0

Сюда тоже добавляем в таком же порядке...


  1. Создаем профайл сталкера в gamedata-configs-gameplay-character_desc_general.xml (ну или другой, который вы прописали, или на уровнях). Думаю это вы умеете, но один нюанс - в строке community вставляем нашу группировку , то есть grom
  2. в файле gamedata-configs-gameplay-npc_profile.xml создаем класс нпс, вписываем его айди из профайла и класс.

gamedata-configs-creatures-spawn_sections_general.ltx
создаем секцию для спавна

[ваше название секции]:stalker
$spawn = "respawnваше название секции"
character_profile = grom spez -айди нпс_профайла
spec_rank = novice
community = grom ---группировка как в профайле


  1. death_manager.script

local community_list = { "stalker", "dolg", "freedom", "bandit", "army", "zombied", "ecolog", "killer", "monolith","grom"}


  1. в файле gamedata-configs-misc-death_items_by_communities.ltx

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


  1. Чтоб название было по русски в любом файле с текстами

[string id="grom"]
  [text]Вольный сталкер[/text]
  [/string]

P.S. В пункте 6 Все штуки "[" и "]" заменить на "<" и ">"


  1. Осталось заспавнить, берем секции из спавн_сектионс....

Мануал не мой, я только подредактировал, чтобы он на ПГ заработал

Добавление физического объекта на локацию

В этой статье я подробно напишу как добавить на локацию физический объект через all.spawn. Создадим на затоне на Земснаряде газовую плиту (В комнатке или как там она называется =))))

Нам потребуются файлы: all.spawn и распаковщик all.spawn’а.

Положим сам all.spawn в распаковщик и нажимаем Декомпиляция или по другому там написано Decompile. Нажимаем начинается распаковка. Все готово.

Теперь открываем файл alife_zaton и найдем например под номером [215]


[215]

; cse_abstract properties

section_name = physic_object

name = zat_physic_object_0019

position = -403.127868652344,40.0000381469727,-339.5419921875

direction = 0,0,0

 

; cse_alife_object properties

game_vertex_id = 0

distance = 0

level_vertex_id = 293223

object_flags = 0xffffff3a

 

; cse_visual properties

visual_name = dynamicsboxexpl_dinamit

 

; cse_ph_skeleton properties

skeleton_flags = 1

 

; cse_alife_object_physic properties

physic_type = 0x3

mass = 10


В section_name не писать что попало а писать само секционное имя.

В name можно написать любое имя например напишем zaton_gaz_plita

Если будете спавнить несколько таких плит то имя должно БЫТЬ ИНДИВИДУАЛЬНЫМ т.е если вы ещё захотите заспавнить плиту с таким именем  то в name напишем zaton_gaz_plita_2  и т.д понятно? =)))

 

Position - это координаты места спавна снять  их можно при помощи проги Position Extraktor

 

game_vertex_id Гейм вертекс

level_vertex_id Левел вертекс

visual_name тут уже идет на саму модель плиты то вот что мы напишем dynamicskitchen_roomgaz_plita_small

Ну а остальные строчки не важны =)))


Ну что же приступим? =))

А alife_zaton важно посмотреть последний номер если он например [1920] то при создании нового вы должны написать [1921] ну т.е должно быть индивидуальным


[1921]

; cse_abstract properties

section_name = physic_object

name = zat_gaz_plita

position = 413.30670166016,-4.8858957290649,231.87609863281

direction = 0,0,0

 

; cse_alife_object properties

game_vertex_id = 7

distance = 0

level_vertex_id = 1643764

object_flags = 0xffffff3a

 

; cse_visual properties

visual_name = dynamicskitchen_roomgaz_plita_small

 

; cse_ph_skeleton properties

skeleton_flags = 1

 

; cse_alife_object_physic properties

physic_type = 0x3

mass = 10

за поворот объекта  отвечает значение direction. Нужно указать x, y, z значения поворота объекта на уровне.

Если вы хотите чтоб объект был закреплен на месте т.е чтоб он стоял на месте и не двигался то в самом конце напишем fixed_bones = link. НУ вот и все . Сохраняем файл и нажимаем Компиляция или по другому написано Compile …..ждём….. все запаковалось и появился файлик new.spawn  копируем его в папку spawn  и переименовываем в all.spawn. Все запускаем игру бежим в то место где спавнили и вуаля …радуемся….


Если кто-то не понял обращайтесь ко мне в асю : 555905622

Или на мыло: kirill_95-08@mail.ru

Изменение старта главного героя

1)  ACDC для ЗП
(narod.ru/disk/17377026000/ACDC%20Cop.rar.html
2)  Блокнот (надеюсь он у тя есть XD )
3)  Снималка координат (в поисковике так и введи СКАЧАТЬ 
        СНИМАЛКУ КООРДИНАТ ДЛЯ СТАЛКЕРА)
 
4)  ActivePerl-5.10.0.1004 (в поисковике так и введи СКАЧАТЬ 
     ActivePerl-5.10.0.1004)
 
5)  Распакованная игра 


Чуть не забыл руки! Но если руки растут не оттуда, наверное, это ноги! ;) 


Начнем:
1)  Скачиваем ActivePerl-5.10.0.1004

2)  Скачиваем ACDC

3)  Устанавливаем ActivePerl-5.10.0.1004

4)  Открываем папку gamedata/spawn/ копируем от туда файл
all.spawn

5)  Открываем папку в которой находится ACDC

6)  Вставляем туда all.spawn

7)  Распаковываем all.spawn соответствующим bat файлом
(decompile.bat) если нет такого, проделываем такие
операции: 

Нам потребуются: 
       А) Создаем 2 файла в формате *.txt 
       Б) Открываем первый и пишем  
   perl acdccop.pl -c all.ltx -o all.spawn.new 
   pause  

   (причPм слово pause НА НОВОЙ СТРОКЕ это ВАЖНО!!!) 
       В) Закрываем файл и даем ему имя compile.bat  
      (при появлении окна, которое говорит о замене формата говорим ДА) 
       Г) Открываем второй и пишем  
   perl acdccop.pl -d all.spawn 
   pause 
 
   (причPм слово pause НА НОВОЙ СТРОКЕ это ВАЖНО!!!) 
       Д) Закрываем файл и даем ему имя decompile.bat  
   (при появлении окна, которое говорит о замене формата говорим ДА)  


8)  После этого открываем игру, бежим в то место где хотим
начинать игру, снимаем координаты. Координаты должны
выглядеть так:

x=
y=
z=
game_vertex=
level_vertex=
 
9)  Закрываем игру, открываем папку с ACDC, там видим кучу
файлов. Открываем файл alife_zaton.ltx

10)  В нем находим строку: 


[982]
; cse_abstract properties
section_name = actor
name = zaton_actor

position = x,y,z

direction =0,0,0
s_flags = 0x29
 
; cse_alife_object properties  

game_vertex_id = game_vertex 

distance = 38.5

level_vertex_id = level_vertex

object_flags = 0xffffffbf
 
; cse_visual properties
visual_name = actorsstalker_neutralstalker_neutral_1
 
; cse_alife_creature_abstract properties
g_team = 0
g_squad = 0
g_group = 0
health = 1
dynamic_out_restrictions = 
dynamic_in_restrictions = 
 
upd:health = 1
upd:timestamp = 0xc2ba3333
upd:creature_flags = 0x99
upd:position =  x,y,z
upd:o_model = 0
upd:o_torso = 2.81339907646179,-0.0120869996026158,0
upd:g_team = 0
upd:g_squad = 0
upd:g_group = 0
 
; cse_alife_trader_abstract properties
money = 15000
trader_flags = 0
character_profile = actor
cse_alife_trader_abstract__unk1_u8 = 1
 
; cse_ph_skeleton properties
 
; cse_alife_creature_actor properties
 
upd:actor_state = 0
upd:actor_accel_header = 0
upd:actor_accel_data = 0
upd:actor_velocity_header = 0
upd:actor_velocity_data = 0
upd:actor_radiation = 0
upd:actor_weapon = 215
upd:num_items = 0
 
; se_actor properties


11)  x,y,z – меняем на цифры свои «смотри пункт 8»,
level_vertex и game_vertex то же меняем на свои

12)  Сохраняешь файл и запускаем этот файл - compile.bat

13)  Немного ждем и в папке с ACDC появится файл
all.spawn.new

14)  Копируем его в папку gamedata/spawn/ и
переименовываешь в all.spawn
 
ВСЕ! :)

Вывод сообщения на экран

Что нужно для работы:

 

  1. Распаковщик ресурсов.
  2. Блокнот, notepad ++. Я работаю с нотепадом т. к. у него есть подсветка синтаксиса.
  3. Прямые руки. Кривые не подойдут.
  4. Светлая голова.
  5. Терпение.

 


Методом проб и ошибок научился выводить сообщения на экран, сейчас распишу как:

 

Для вывода сообщения на экран нужен любой исполняемый файл, к примеру возьмем

файл gamedatascriptsui_main_menu.script - все файлы *.script написаны на языке LUA.

Итак приступим:
 


Находим в файле вот это:

 

function main_menu:OnKeyboard(dik, keyboard_action)  --virtual function

CUIScriptWnd.OnKeyboard(self,dik,keyboard_action)

local bind = dik_to_bind(dik)

local console = get_console()

 

if keyboard_action == ui_events.WINDOW_KEY_PRESSED then

if dik == DIK_keys.DIK_ESCAPE then

if level.present() and

( ((db.actor ~= nil)and(db.actor:alive())) or

(false==IsGameTypeSingle())

) then

self.OnButton_return_game()                      --' xStream 02.2008

-- console:execute("main_menu off")   --' xStream 02.2008

end

end

 

-- if dik == DIK_keys.DIK_S then

-- self:OnButton_load_spawn()

 

-- else

if dik == DIK_keys.DIK_Q then

self:OnMessageQuitWin()

end

 

end

 

return true

end

 


И вставляем вот это:

 

elseif dik == DIK_keys.DIK_F1 then

       self:sms()

 


Под это:

 

if dik == DIK_keys.DIK_Q then

        self:OnMessageQuitWin()

 


Должно получится вот так:

 

function main_menu:OnKeyboard(dik, keyboard_action)  --virtual function

CUIScriptWnd.OnKeyboard(self,dik,keyboard_action)

local bind = dik_to_bind(dik)

local console = get_console()

 

if keyboard_action == ui_events.WINDOW_KEY_PRESSED then

if dik == DIK_keys.DIK_ESCAPE then

if level.present() and

( ((db.actor ~= nil)and(db.actor:alive())) or

(false==IsGameTypeSingle())

) then

self.OnButton_return_game()                      --' xStream 02.2008

-- console:execute("main_menu off")   --' xStream 02.2008

end

end

 

-- if dik == DIK_keys.DIK_S then

-- self:OnButton_load_spawn()

 

-- else

if dik == DIK_keys.DIK_Q then

self:OnMessageQuitWin()

 

                elseif dik == DIK_keys.DIK_F1 then

                        self:sms()

end

 

end

 

return true

end

 


Далее пишем в самый конец файла:

 

function main_menu:sms()

sms.sms()

end

 


Сохраняем и помещаем файл в gamedatascripts

 

Теперь создадим файл sms.txt и переименуем его в sms.script

 


Откроем и впишем в него:

 

function sms()

local text 

local a = vector()  

local text 

a = db.actor:position()  

text = "%c[239,255,6,13]Свободу тушканчикам!\nТушканчики всех стран объединяйтесь!"

news_manager.send_tip(db.actor, text, nil, nil, 30000)

end

 


Сохраняем и помещаем файл в gamedatascripts

 

Поясняю строчки:

 

text = "%c[239,255,6,13]Свободу тушканчикам!\nТушканчики всех стран объединяйтесь!"

news_manager.send_tip(db.actor, text, nil, nil, 30000)

 

%c[239,255,6,13] - цвет шрифта

 

Свободу тушканчикам! - сообщение

 

\n - перенос сообщения на другую строчку

 

30000 - время показа сообщения в милисекундах

 


Теперь заходим в игру, начинаем новую игру после того как игра загрузилась выходим в главное меню ESC

жмём F1 возвращаемся в игру и видим своё сообщение, таким образам можно вызвать сообщение хоть от куска колбасы.

 


P.S. Если кто знает как сменить иконку сообщения напишите в личку

 

Автор статьи (_MeX@NiC_) или Штайнэр.

Изменение HUD'a

Файлы

Для работы над худом нам нужны следующие файлы(не обязательно все конешно) 

  • Текстуры: 

Папка - texturesui 

Файлы + описание: 

  1. ui_hud.dds (собственно опорный файл содержащий почти все текстуры худа) 
  2. cursor.dds (текстура причела без оружия в руках,попросту кругляшка) 
  3. hud_map_arrow.dds (стрелка компаса) 
  • Конфиги: 

Папка - configui 

Файлы + описание:  

  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 - список индикаторов состояния ГГ (радиация,голод и тп.)Далее идёт сам список,НО он не поддаётся правке индивидуально. Правим только всё сразу строчкой упомянутой выше. 

 

<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 - часы 

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

<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 - хз что это..предполагаю что реч о точках на миникарте 

 

 


 

Советы: 

Если вам нужно убрать текстуру - просто убираем в конфиге путь к текстуре. 

Если нужно убрать текст - либо убираем сам текст либо ставим а="0" 

Многие элементы передвигаются в связке.К примеру патроны - окно,количество и иконку можно двигать меняя координаты окна.Координаты остального подразумеваются в рамках размера окна(а не всего экрана) 

 

Если вы хотите задать текстуре определённый размер то - пишем нужный width и height а после пишем stretch="1"

Спавн предметов

Вот решил внести свой вклад в модостроение)) 

 

Тема которая будет расмотрена в данной статье, это спавн предметов в ЗП. 

 

Для начала попробуем заспавнить что-нибудь……например…… О, вертолёт !!!! 

 

Что для этого нам нужно ? 

  1. ACDC для ЗП 
  2. Activeperl 8.7. 
  3. Распакованная игра (CoP) 

Начнём: 

 

Поместим файл All.spawn(который находится по адресу: Gamedataspawns) в папку с ACDC. Распаковываем. 

 

В итоге появятся Файлы .Ltx С названием секций. Нас интересуют Файлы alife_*******.ltx Так как они отвечают за спавн. 

 

Для Начала нам нужно снять координаты того места Где должен появится наш вертолёт. 

 

Для этого открываем ui_main_menu.script и находим вот примерно такое: 

 


 

if dik == DIK_keys.DIK_Q then

self:OnMessageQuitWin()

end
 


 и делаем так : 

 

if dik == DIK_keys.DIK_Q then

self:OnMessageQuitWin()

elseif dik==DIK_keys.DIK_W then

self:position_info()

end

 Изображение:Example vert.jpg 

 


И в конец фаила. В Самый Конец!!! 

 


 

function main_menu:position_info()

local a = db.actor:position()

local vid = db.actor:level_vertex_id()

local gvid = db.actor:game_vertex_id()

local text = "GPS:\nX= "..a.x.."\nY= "..a.y.."\nZ= "..a.z.."\nlevel_vertex= "..vid.."\ngame_vertex_id= "..gvid

news_manager.send_tip(db.actor, text, nil, nil, 30000)

end


 Сохраняем!!! 

 


Заходим в игру, добегаем до места где бы хотели чтобы видеть вертолёт,выходим в меню и жмём на W , потом возвращаемся в игру и делаем скриншот (F12) 

 

Я выбрал место спавна прямо на палубе Скадовска. 

 

Всё теперь спавним вертолёт. 

 

Выберем поправившуюся секцию. Для примера я взял Затон, поэтому открываем alife_zaton.ltx и добавляем : 

 


 

[1922]

; cse_abstract properties

section_name = helicopter

name = pri_a28_heli_1

position = 154.740036,-2.654960,182.621597

direction = 0,-0.0252000000327826,0

 

; cse_alife_object properties

game_vertex_id = 316

distance = 0

level_vertex_id = 1216486

object_flags = 0xffffffb2

 

; cse_visual properties

visual_name = dynamicsvehiclesmi24veh_mi24_u_01

 

; cse_motion properties

 

; cse_ph_skeleton properties

skeleton_name = idle

 

; cse_alife_helicopter properties

startup_animation = idle

engine_sound = vehicleshelicopterhelicopter

 


Помните !!!!! Всё должно быть по порядкку !!!!!Если перед этим номер скрипта был допустим [1921] то в номер нашего будет [1922] 

 


Теперь с пояснениями: 

 


[1922]
 

; cse_abstract properties

section_name = helicopter -- Имя секции

name = pri_a28_heli_1 -- Уникальное имя скрипта

position = 154.740036,-2.654960,182.621597 -- координаты места где мы хотим чтобы появился вертолёт

direction = 0,-0.0252000000327826,0 -- поворот верталёта

 

; cse_alife_object properties

game_vertex_id = 316 -- гейм вертекс уровня

distance = 0

level_vertex_id = 1216486 -- Левел уровень

object_flags = 0xffffffb2

 

; cse_visual properties

visual_name = dynamicsvehiclesmi24veh_mi24_u_01 -- визуал верталёта

 

; cse_motion properties

 

; cse_ph_skeleton properties

skeleton_name = idle

 

; cse_alife_helicopter properties

startup_animation = idle

engine_sound = vehicleshelicopterhelicopter

 


Всё вставляем скрипт в секцию (без комментов конечно) 

 


Сохраняем!

Спавн аномалии

Значит распаковываем алл.спавн с помощью ACDC...Распаковали. Откроем,например,alife_zaton.ltx и в самом конце допишем: 

 

[6464] --порядковый номер

section_name = zone_burning_fuzz_strong --секция

name = zone_burning_fuzz_strong --уникальное имя в алайф_лока.лтх

position = 417.848663330078,41.630443572998,-106.000648498535 --координаты спана

direction = 0,0,0 --угол поворота

game_vertex_id = 73 --гейм вертекс

distance = 18.1999988555908 -- ?

level_vertex_id = 1650842 --левел вертекс

object_flags = 0xffffff3e --?

shapes = shape0 --шейпы(можно задавать несколько).

shape0:type = sphere --тип шейпа(сфера.так же есть box - коробка)

shape0:offset = 0,0,0 -- ?

shape0:radius = 0.100000001490116 --радиус шейпа

restrictor_type = 3 --?

max_power = 0 --максимальная сила(?)

offline_interactive_radius = 30 --?

artefact_spawn_count = 32 --максимальное число спавна артов

visual_name = dynamicsanomalytopolinypuh_big --визуал(партикл)

idle_animation = idle --?(скорее всего партикл)

attack_animation = idle --?(скорее всего партикл)


 

 

Так выглядит без комментов: 

 

[6464]section_name = zone_burning_fuzz_strong

name = zone_burning_fuzz_strong

position = 417.848663330078,41.630443572998,-106.000648498535direction = 0,0,0

game_vertex_id = 73distance = 18.1999988555908

level_vertex_id = 1650842

object_flags = 0xffffff3e

shapes = shape0

shape0:type = sphere

shape0:offset = 0,0,0

shape0:radius = 0.100000001490116

restrictor_type = 3

max_power = 0

offline_interactive_radius = 30

artefact_spawn_count = 32

visual_name = dynamicsanomalytopolinypuh_bigi

dle_animation = idle

attack_animation = idle

Создаем собственную еду

Для начала отрываем файл: items из директории: gamedataconfigsmisc

Идём в самый конец файла и добавляем туда это:

(Показываю на примере водки)


[my_napitok]:booster
$spawn = "food and drugsmy_napitok "
cform = skeleton
visual = dynamicsdevicesdev_vodkadev_vodka.ogf
description = st_my_napitok_descr

inv_name = st_my_napitok
inv_name_short = st_my_napitok
inv_weight = 0.6 ;0.2

inv_grid_width = 1
inv_grid_height = 1
inv_grid_x = 5
inv_grid_y = 2
cost = 150

attach_angle_offset = 0.000000, 0.000000, 0.000000
attach_position_offset = 0.087266, -0.078540, 0.052360
attach_bone_name = bip01_r_hand
auto_attach = false

bone_name = bip01_r_hand
position_offset = 0.0,0.0,0.0
angle_offset = 1.570790,1.570790,3.92699

break_particles = destroy_fxdestroy_bottle
break_sound = materialbottlecollidebottle_break_1

boost_time = 5.0
boost_radiation_restore = 0.005
eat_alcohol = 0.1
eat_satiety = -0.2

use_sound = interfaceinv_vodka


Теперь поясню:

[my_napitok]:booster – имя которое воспринимает игра.
$spawn = "food and drugsmy_napitok " – просто так, но имя надо писать
cform = skeleton - Нетрогайте
visual = dynamicsdevicesdev_vodkadev_vodka.ogf – модель придмета
description = st_my_napitok_descr – ссылка на описание

inv_name = st_my_napitok - ссылка на имя
inv_name_short = st_my_napitok - ссылка на имя
inv_weight = 0.6 ;0.2 – вес предмета(изменяйте первое число)

inv_grid_width = 1 – высота иконки по клеткам
inv_grid_height = 1 – ширина иконки по клеткам
inv_grid_x = 5 – координата иконки по оси х
inv_grid_y = 2 – координата иконки по оси y
cost = 150 - стоимость

attach_angle_offset = 0.000000, 0.000000, 0.000000 - не трогайте
attach_position_offset = 0.087266, -0.078540, 0.052360 - не трогайте

attach_bone_name = bip01_r_hand - не трогайте

auto_attach = false - не трогайте

bone_name = bip01_r_hand
position_offset = 0.0,0.0,0.0
angle_offset = 1.570790,1.570790,3.92699

break_particles = destroy_fxdestroy_bottle
break_sound = materialbottlecollidebottle_break_1

boost_time = 5.0 – время действия
boost_radiation_restore = 0.005 – собственно какое действие, может быть несколько.
eat_alcohol = 0.1 – собственно какое действие, может быть несколько.
eat_satiety = -0.2 – собственно какое действие, может быть несколько.

use_sound = interfaceinv_vodka - не трогать

После того как всё сделали, сохраняем.


Идём в файл: st_items_equipment. В папке: gamedataconfigstextrus

Сразу после строчки: <string_table> пишем это:


<string id=" my_napitok ">
<text>Название которое будет высвечиваться в игре </text>
</string>
<string id=" st_ my_napitok _descr ">
<text>Любое описание какое захотите.</text>
</string>


Сделали? Если да то сохраняем и идём дальше…


Нам осталось только добавить наш супер-напиток торговцу, Бороде например

Итак, идём в файл: trade_zat_a2_barmen в папке: gamedataconfigsmisctrade

И везде где есть слово еда: прописываем по аналогии с другой едой, например с хлебом.

Не следует забывать о том, что надо писать название которое понимает игра. В нашем случае это : my_napitok

Спавн НПС через скрипт

Открываем файл configscreaturesspawn_sections_zaton 

В самое начало добавляем это: 

 

[my_stalker]:stalker 

$spawn = "respawnmy_stalker" 

character_profile = my_stalker 

spec_rank = master 

community = stalker 

custom_data = scriptszatonmy_stalker_npc_logic.ltx 

 

Сохраняем… 
 


Идем в папку configsgameplay 

 

Открываем character_desc_zaton 

В самый конец добавляем, но перед <xml>! 

<specific_character id="my_stalker" team_default = "1"> 

<name>Tris</name> 

<icon>ui_inGame2_neutral_4</icon> 

<map_icon x="1" y="0"></map_icon> 

<bio>Опытный сталкер. Детальная информация отсутствует.</bio> 

 

<class>my_stalker</class> 

<community>stalker</community> 

<terrain_sect>stalker_terrain</terrain_sect> 

<snd_config>characters_voicehuman_01stalker</snd_config> 

 

<rank>65</rank> 

<reputation>0</reputation> 

<money min="2500" max="5000" infinitive="0"/> 

 

<visual>actorsstalker_neutralstalker_neutral_4</visual> 

<supplies> 

[spawn] n 

wpn_beretta = 1 n 

ammo_9x19_fmj = 1 n 

grenade_rgd5 = 1 n 

#include "gameplaycharacter_items.xml" 

#include "gameplaycharacter_food.xml" 

#include "gameplaycharacter_drugs.xml" 

</supplies> 

 

#include "gameplaycharacter_criticals_4.xml" 

<start_dialog>hello_dialog_my_stalker</start_dialog> 

<actor_dialog>actor_dialog_my_stalker</actor_dialog> 

</specific_character> 

 

Сохраняем…
 


Открываем файл в этой же папке dialogs_zaton 

Вставляем это но перед </game_dialogs>

<dialog id="hello_dialog_my_stalker"> 

<phrase_list> 

<phrase id="0"> 

<text>Кто научил тебя ,меня создавать?</text> 

</phrase> 

</phrase_list> 

</dialog> 

<dialog id="actor_dialog_my_stalker"> 

<phrase_list> 

<phrase id="0"> 

<text>Tris!!! Скажу ему спасибо.</text> 

<action>dialogs.break_dialog</action> 

</phrase> 

</phrase_list> 

</dialog> 

 


И открываем все в этой же папке: npc_profile 
 

После строчки <!-- НОВЫЕ ПРОФИЛЯ --> добавляем 

<character id="my_stalker"> 

<class>my_stalker</class> 

</character> 

 

Создадим логику для него:
 

configsscriptszaton а там файл my_stalker_npc_logic 

И пишем там 


Логика для бессмертного. Вставляем это: 

[logic] 

active = remark1 

danger = danger_ignore 

invulnerable = true 

 

[danger_ignore] 

ignore_distance = 5 

 

[remark1] 

no_move = true 

anim = choose 

on_actor_dist_le = 2| remark@hello 

invulnerable = true 

meet = meet_guide 

 

[meet_guide] 

abuse = false 

use = true 

allow_break = false 

meet_on_talking = false 

 

[remark@hello] 

no_move = true 

invulnerable = true 

meet = meet_guide 

on_actor_dist_le = 10| remark1 

 


А если смертного, то вставляем это:
 

[logic] 

active = remark1 

danger = danger_ignore 

invulnerable = false 

 

[danger_ignore] 

ignore_distance = 5 

 

[remark1] 

no_move = true 

anim = choose 

on_actor_dist_le = 2| remark@hello 

invulnerable = false 

meet = meet_guide 

 

[meet_guide] 

abuse = false 

use = true 

allow_break = false 

meet_on_talking = false 

 

[remark@hello] 

no_move = true 

invulnerable = false 

meet = meet_guide 

on_actor_dist_le = 10| remark1 

Далее… 

Идём в: 

 

gamedatascripts 

И создаем скрипт sniper_add.script 
 


И пишем там : 

 

function start_add_spawn()-- 

-- 

-- 

spawn_sniper_one() 

end 

 

function spawn_sniper_one() 

local x= 111.75521087646 

local y= -3.9362425804138 

local z= 185.2212677022 

local level_vertex= 1158851 

local game_vertex_id= 316 

alife():create("my_stalker",vector():set(x,y,z),level_vertex,game_vertex_id) 

end 

 

function save_variable(variable_name, value) 

xr_logic.pstor_store(db.actor, variable_name, value) 

end 

function load_variable(variable_name, value_if_not_found) 

return xr_logic.pstor_retrieve(db.actor, variable_name, value_if_not_found) 

end 

 


И открываем скрипт : bind_stalker.script 

 

Ищем строку:

 

function actor_binder:update(delta) 

object_binder.update(self, delta) 

 

if string.find(command_line(), "-designer") then 

return 

end 

 



И после неё пишем это:

 

if sniper_add.load_variable("spawn_sniper",false)==false then 

sniper_add.start_add_spawn() 

sniper_add.save_variable("spawn_sniper",true) 

end 

 


Всё мы заспаунили НПС он появится около Сыча если всё правильно Сделали… 

Удачи!

Как создать тайник

Надеюсь, распаковывать all.spawn умеем?

После распаковки открываем файлы alife_zaton
Например находим строчки под номером [52]


[52]
; cse_abstract properties
section_name = inventory_box
name = level_prefix_inventory_box_0000
position = -447.109985351563,-6.13000011444092,183.639999389648
direction = -0.062830001115799,-2.99324011802673,-0.169295996427536

; cse_alife_object properties
game_vertex_id = 0
distance = 0
level_vertex_id = 293223
object_flags = 0xffffff3f
custom_data = <<END
[spawn]
wpn_pb
ammo_9x18_pmm
medkit_army
drug_antidot
END

; cse_visual properties
visual_name = dynamicsequipment_cacheequipment_box_02_case

; cse_alife_inventory_box properties
tip = inventory_box_use

Далее копируем их в самый конец


 Внимание!!! надо сменить [52] на [1866] нельзя чтобы были номера одинаковыми.


Далее рассмотрим...

[1866]
; cse_abstract properties
section_name = inventory_box секц. имя лучше не трогать
name = level_prefix_inventory_box_0000 имя можно не изменять
position = -447.109985351563,- 6.13000011444092,183.639999389648 координаты тайника
direction = -0.062830001115799,-2.99324011802673,-0.169295996427536

; cse_alife_object properties
game_vertex_id = 0 гейм вертекс
distance = 0
level_vertex_id = 293223 левел вертекс
object_flags = 0xffffff3f
custom_data = <<END
[spawn] здесь прописаны вещи которые будут лежать в тайнике
wpn_pb
wpn_ak74
ammo_9x18_pmm
medkit_army
drug_antidot
END

; cse_visual properties
visual_name = dynamicsequipment_cacheequipment_box_02_case это визуал тайника сейчас стоит ящик можно сменить на рюкзак.


Если хотите рюкзак пропишите это:

dynamicsdevicesdev_rukzakdev_rukzak.ogf

; cse_alife_inventory_box properties
tip = inventory_box_use

Координаты можно отснять прогой Position Extraktor


И вот что выйдет

[1866]
; cse_abstract properties
section_name = inventory_box
name = level_prefix_inventory_box_0000
position = -431.11749267578,2.8822407722473,5.8084812164307
direction = -0.062830001115799,-2.99324011802673,-0.169295996427536

; cse_alife_object properties
game_vertex_id = 14
distance = 0
level_vertex_id = 133074
object_flags = 0xffffff3f
custom_data = <<END
[spawn]
wpn_l85
ammo_5.56x45_ap = 3
medkit_scientic = 3
grenade_f1 = 2
ammo_12x70_buck = 2
wpn_hpsa
ammo_9x19_pbp = 4
END

; cse_visual properties
visual_name = dynamicsdevicesdev_rukzakdev_rukzak.ogf

; cse_alife_inventory_box properties
tip = inventory_box_use


Всё запаковываем all.spawn и появится файлик new. Копируем его в сталкера в папку spawn и переименовываем в all.spawn

Параметры погоды

  • [sect_default_weather]

01:00:00 = default_weather_01
02:00:00 = default_weather_02


Здесь указывается время смены секций погоды, каждая секция включает в себя свой скайбокс и индивидуальные параметры освещения, дождя, грозы, и звука окружения. Переход между секциями осуществляется не скачкообразно, а плавно, практически не заметно. Имена секций можно ставить произвольные, используя латиницу, время так же можно выставить любое, но не рекомендуется.


  • [default_weather_01] ; имя секции погоды, описание которой ведется в этом блоке.

flares = flares_gradient1 ; здесь указывается имя заготовки блика от солнца (заготовки прописаны в файле flares.ltx).

sky_texture = skysky_14_cube ; это имя используемого скайбокса. cкайбокс - это куб, окружающий всю локацию, на 6 граней которого натянуты 6 текстур из файла, указанного в этой строке. нужно обратить внимание, что строка содержит еще и путь к файлу.

sky_rotation = 0 ; определяет положение (азимут) скайбокса на описываемый час. Если выставить в соседних секциях разные значения азимута, то в переходах между секциями скайбокс будет плавно совершать вращение от одного значения к другому.

sky_color = 1.0, 1.0, 1.0 ; это цвет неба, или, точнее, цвет рассеянного света,
формат из 3 цифр, как и в параметрах ниже, подразумевает цветовую модель RGB, учитывая то, что здесь максимальная интенсивность цвета (255), здесь равна 1.0.

Например, цвет неба, равный [1.0, 0.0, 0.0] - зальет окрестность ярко красным светом. стоит учитывать, что здесь описывается не цвет, а свет, поэтому параметр, например, [0,0,0] - даст не черный цвет, а отсутствие вообще какого либо света.

Аналогично эффекту смешивания в фотошопе (screen). НО! Опытным путем установлено, что движок может работать со значениями больше единицы.

clouds_texture = skysky_oblaka ; это - имя тектуры облаков. не путать со скайбоксом.

clouds_color = 0.333, 0.341, 0.431, 0.7, 1.7 ; это цвет облаков, первые 3 цифры - это RGB (см.выше), четвертая - это видимость (непрозрачность) текстуры облаков, т.е 0 - облаков не видно, а 1 - полная видимость. пятая цифра - скорость движения облаков.

far_plane = 350 ; это, судя по всему, дальность видимости (расстояние, на котором "обрезается" карта).

fog_distance = 350 ; в DX9 это расстояние, на котором туман фактически "прекращает" действовать. непосредственно дымка, интенсивность которой задаётся fog_density, "висит" в радиусе fog_distance. за пределами этого радиуса часть геометрии "съедается"
и вместо неё отображается небо (скайбокс). правильно подобранная текстура неба имитирует вдали клубы тумана. а уже дальше снова проявляется геометрия уровня (холмы и т.д.). в DX8-режиме туман рудиментарен и обсуждать его нет особого смысла.

fog_color = 0.043, 0.043, 0.055 ; непосредственно сам цвет тумана. При слишком высоких значениях параметра объекты вдали будут светлее неба, поэтому если вдали видим "белые сосны", то проблема именно в этом параметре.

fog_density = 0.9 ; это плотность тумана, выставив значение в 0, можно увидеть четкие края карты, а если поставить значение больше единицы, то туман будет виден прямо перед носом.

rain_density = 0.2 ; это плотность дождя, действует, видимо, как и туман. Примечательно, что зависимость от параметра нелинейна, и значение 0.2 практически не отличается от единицы. Чтобы сделать действительно слабый дождь, надо экспериментировать с очень маленькими значениями.

rain_color = 0.21, 0.21, 0.27 ; цвет (непосредственно капель) падающего дождя.

thunderbolt = thunderbolt_collection_default ; это имя заготовки грозы, если грозы не предусмотрено, значение можно оставить пустым.

bolt_period = 4.5f ; это время между вспышками молний. значение прописано не в секундах. В принципе, эмпирически установлено, что в грозовую погоду желательно ставить значения около 20f, в дождливую - в районе 50f.

bolt_duration = 0.35f ; это собственно продолжительность фазы вспышки молнии. выставив высокое значение, можно вовсе получить не молнию, а некое плавно нарастающее свечение.

wind_velocity = 0.0 ; сила ветра. На что влияет - не понятно.

wind_direction = 0.0 ; направление ветра. На что влияет - не понятно.

ambient = 0.0425, 0.045, 0.0475 ; общее освещение локации, те тона, в которые она будет окрашена (цвет и интенсивность света фонового освещения там, где не светит солнце - выставив значения в [0,0,0] - получим кромешную тьму в зданиях и под навесами. работает только на R2.

lmap_color = 1.0, 1.0, 1.0 ; видимо, цвет лайтмапа.

hemi_color = 0.0425, 0.045, 0.0475, 0.1 ; по слухам, параметр, идентичный амбиенту, только предназначенный для статичного освещения. насчет четвертой цифры - не в курсе.

sun_color = 0.0, 0.0, 0.0 ; свет солнца, его интенсивность также влияет на тени, если солнце не светит, теней от него не будет. Зависимость глубины тени от значений света не линейна.

sun_dir = -18.0, 291 ; положение солнца, первая цифра - это высота, знак минус означает, что солнце выше горизонта. от горизонта до горизонта солнце описывает полукруг, значения в игре соотносятся с градусами, то есть от -0 до -180, зенит -90, вторая цифра определяет положение солнца относительно сторон горизонта, нулевое значение вроде соответствует югу.

env_ambient = ambient_env_rain ; это набор звуков окружения.

Создание оружия

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


Итак, нам понадобятся следующие файлы:

  • gamedataconfigsweapons - w - ваше назване оружия на англиском.
  • gamedataconfigsweapons - weapons - суда мы позже пропишем наше название файла.
  • gamedataconfigstextrus - st_items_weapons - здесь будет хранится название и описание нашего оружия.
  • gamedataconfigsmp - mp_ranks - чтобы игра не вылетала необходимо прописать его в этом файле, об этом позже.
  • gamedataconfigsmisctrade - trade_zat_b30_stalker_trader - добавим наше оружие Сычю.

Модернизация

gamedataconfigsmisc - inventory_upgrades - прописываем здесь.

gamedataconfigsmisc - stalkers_upgrade_info - прописываем здесь.

Все эти файлы мы должны подготовить перед тем как начать. Если вы готовы то продолжим...


Ну для начала создадим сам конфиг оружия. Например: w_ak47
Содержание можно взять с ак-74 и немного поправить характеристики и визуал.

За характеристики отвечают эти строки:

;-ТТХ---------------------------------------------------------------------------
hit_power = 0.58, 0.59, 0.60, 0.62 ----------------------------------------------------Мощность выстрела.
hit_impulse = 130 ; size of physic impulse by bullet -----------------------------------Импульс выстрела.
hit_type = fire_wound ; [] type of the wound
fire_distance = 800 ;1000 ; maximum fire distance that bullet can fly----дальность полёта пули.
bullet_speed = 715 ; starting bullet speed---------------------------------Скорость пули.
rpm = 570 ; max round per minute
rpm_empty_click = 200

И нужно будет исправить эту строку: hud и поставить = wpn_ak47_hud Должно получиться так: hud = wpn_ak47_hud

Эту строку visual= dynamicsweaponswpn_ak47wpn_ak47.ogf - это путь папок к вашей модели. (Модель скачайте где-нибудь, хоть на амк форуме)

И эту строку item_visual = dynamicsweaponswpn_ak47wpn_ak47_hud.ogf - это худ вашего оружия, то есть у вас в руках.(Модель скачайте где-нибудь, хоть на амк форуме)

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


Отрываем файл: weapons

И видим такую структуру:

#include "w_ak74.ltx"
#include "w_ak74u.ltx"
#include "w_fn2000.ltx"
#include "w_rpg7.ltx"
#include "w_knife.ltx"
#include "w_bolt.ltx"
#include "w_f1.ltx"
#include "w_rgd5.ltx"
#include "w_gd5.ltx"
#include "w_rg6.ltx"


Прописываем по анологии, должно получиться так:

#include "w_ak74.ltx"
#include "w_ak74u.ltx"
#include "w_fn2000.ltx"
#include "w_rpg7.ltx"
#include "w_knife.ltx"
#include "w_bolt.ltx"
#include "w_f1.ltx"
#include "w_rgd5.ltx"
#include "w_gd5.ltx"
#include "w_rg6.ltx"
#include "w_ak47.ltx" ----Наше оружие.

Всё сохраняем, и идём дальше.


Открываем файл: st_items_weapons

И в самый конец (но перед </string_table>!) добавляем это:

<string id="st_wpn_ak47">
<text>«Ак-47»</text>
</string>
<string id="st_wpn_ak47_descr">
<text>Советский автомат Ак-47.</text>
</string>

Проверяем, если всё правельно сохраняем, и идём вперед.


Открываем файл: mp_ranks

И в каждой строке: ;----------------- new items ------------------------- в available_items: Пишем название нашего оружия.

Пример:
;----------------- new items -------------------------
available_items = mp_wpn_knife,mp_wpn_pm,mp_wpn_commando,mp_wpn_ak47---наше оружие


Внимание!!! пишите с приставкой "mp_" Обязательно!!!!


После того как везде прописали сахраняем.


Отрываем файл trade_zat_b30_stalker_trader.

И там где написано ";Оружие" ниже прописываем название нашего оружия.

Пример:

;Оружие
wpn_pm = 0.3, 0.2
wpn_pb = 0.3, 0.2
wpn_fort = 0.3, 0.2
wpn_hpsa = 0.3, 0.2
wpn_beretta = 0.3, 0.2
wpn_walther = 0.3, 0.2
wpn_sig220 = 0.3, 0.2
...................................................
wpn_ak47 = 0.3, 0.2 -----Наше оружие.

Эти цифры = 0.3, 0.2 ----Пишите по аналогии.

Ну и теперь как обешал БОНУС!!! Научу вас делать чтобы добавленное оружие можно было улучшать.


Открываем Файл inventory_upgrades

И видим:

wpn_bm16
wpn_toz34
wpn_wincheaster1300
wpn_spas12
wpn_protecta


После этих строк добавляем наше название оружия.

Сохраняем.


отрываем файл stalkers_upgrade_info

Видим напись:
;************************************************
;****************** Кардан **********************
;************************************************э

И после неё Пишем наше название оружия.

Пример:

wpn_pm
wpn_pb
wpn_fort
wpn_ak47 ---Наше оружие


Потом ищем Азота и делаем тоже самое.


Всё!!! (ЕЕЕ...Ну наконец-то а то писать уже пальцы болят) Мы добавели новое оружие, оно появится у Сыча, если не появилось просто перезагрузитесь.

Добавление места для сна

  1. Итак, мы решили добавить место для сна. Сначала мы распакуем all.spawn, откроем alife_zaton.ltx и добавим в конце секцию

[Ваш номер секции]
; cse_abstract properties
section_name = space_restrictor
name = произвольное название вашего места
position=155.8231048584,-6.5563974380493,-138.71978759766
direction = 0,0,0
version = 0x7c
script_version = 8

; cse_alife_object properties
level_vertex_id=1233171
game_vertex_id=13
distance = 9.09999942779541
object_flags = 0xffffff2e
custom_data = <<END
[story_object]
story_id = произвольное название вашего места_id

[logic]
cfg = scriptssr_sleep.ltx
END

; cse_shape properties
shapes = shape0
shape0:type = box
shape0:axis_x = 5.02119588851929,0,0
shape0:axis_y = 0,5.0482006072998,0
shape0:axis_z = 0,0,2.23479747772217
shape0:offset = 0,0,0

; cse_alife_space_restrictor properties
restrictor_type = 3


  1. Потом идем в pda.script, ищем строки

local sleep_zones_tbl =

{
{target = "zat_a2_sr_sleep_id", hint = "st_ui_pda_sleep_place"},
{target = "jup_a6_sr_sleep_id", hint = "st_ui_pda_sleep_place"},
{target = "pri_a16_sr_sleep_id", hint = "st_ui_pda_sleep_place"},
}


И меняем на:

local sleep_zones_tbl =
{
{target = "zat_a2_sr_sleep_id", hint = "st_ui_pda_sleep_place"},
{target = "jup_a6_sr_sleep_id", hint = "st_ui_pda_sleep_place"},
{target = "pri_a16_sr_sleep_id", hint = "st_ui_pda_sleep_place"},
{target = "произвольное название вашего места_id", hint = "st_ui_pda_sleep_place"},
}


  1. Открываем xr_effects.script, ищем строки:

function sleep(actor, npc)
local sleep_zones = {
"zat_a2_sr_sleep",
"jup_a6_sr_sleep",
"pri_a16_sr_sleep",
"actor_surge_hide_2"
}


И также меняем на:

function sleep(actor, npc)
local sleep_zones = {
"произвольное название вашего места",
"zat_a2_sr_sleep",
"jup_a6_sr_sleep",
"pri_a16_sr_sleep",
"actor_surge_hide_2"
}


Собираем all.spawn. Готово! Теперь после запуска игры с новым all.spawn у нас будет спальное место в барже Ноя (координаты брались оттуда).

Вывод информации о своём моде в главном меню

Я увидел в sgm версию мода, хотел попытатся сделать тоже самое но ничего не вышло. Методом проб и ошибок я научился выводить версию и название мода изменив всего 3 файла, а в sgm наверно таких файлов штук так 10 и тем более своих.

Сегодня я напишу в этом уроке как выводить инфу о своем моде в главном меню.

Сложность: очень очень очень легко


 

  1. Первым делом нам нужен распаковщик реурсов запускаем его...
  2. Распаковали. Теперь создаём папку в корне игры назовём её gamedata
  3. В ней же создаём папку scripts и configs, в configs создаём папку ui.
  4. Вытаскиваем из распакованной игры файл ui_main_menu.script в папку gamedata]scripts] и открываем его блокнотом или notepad++ (есть подсветка синтаксиса)
  5. Внимание все файлы формата *.script написаны на языке LUA.

В самом начале видим вот это:

-- File:        UI_MAIN_MENU.SCRIPT

-- Description: Load Dialog for STALKER

-- Created:     28.10.2004

-- Lasd edit: 22.11.2009

-- Copyright:   2004 GSC Game World

-- Author:      Serhiy Vynnychenko (narrator@gsc-game.kiev.ua)

-- Version:     0.9

 

class "main_menu" (CUIScriptWnd)

 

function main_menu:__init() super()

self.mbox_mode = 0

    self:InitControls()

    self:InitCallBacks()

    xr_s.on_main_menu_on()     --' Distemper 03.2008 --

end

 

function main_menu:__finalize()

end

 

function main_menu:InitControls()

self:SetWndRect (Frect():set(0,0,1024,768))

 

    local xml = CScriptXmlInit()

    xml:ParseFile ("ui_mm_main.xml")

 

    xml:InitStatic ("background", self)

    self.shniaga = xml:InitMMShniaga("shniaga_wnd",self);

 

self.message_box = CUIMessageBoxEx()

self:Register (self.message_box, "msg_box")

 

local _ver = xml:InitStatic ("static_version",self)

local mm = _G.main_menu.get_main_menu()

_ver:TextControl():SetText ("ver. " .. mm:GetGSVer())

 

    self.l_mgr = mm:GetLoginMngr()

    self.acc_mgr = mm:GetAccountMngr()

    self.profile_store = mm:GetProfileStore()

    self.gs_profile = self.l_mgr:get_current_profile()

    

    if (self.gs_profile and not(level.present())) then

self.shniaga:ShowPage(CUIMMShniaga.epi_new_network_game) --fake

self.shniaga:SetPage(CUIMMShniaga.epi_main, "ui_mm_main.xml", "menu_main_logout")

self.shniaga:ShowPage(CUIMMShniaga.epi_main)

    end

end

 


И под это:
 

local _ver = xml:InitStatic ("static_version",self)

local mm = _G.main_menu.get_main_menu()

_ver:TextControl():SetText ("ver. " .. mm:GetGSVer()) -- к стати ver. можно помеять на Версия:

 

Вот это:
 

local mod_ver = xml:InitStatic ("mod_version",self)

local mm = _G.main_menu.get_main_menu()

mod_ver:TextControl():SetText ("Ваше название и версия мода")

 


Сохраняем

 


Вырываем из игры ещё 2 файла:
 

ui_mm_main.xml и ui_mm_main_16.xml

И запихиваем их в папку:

gamedata]cofigs]ui]

 


Открываем файл ui_mm_main.xml идём в самый конц и видим это:
 

    <menu_sound random="0" >

<menu_music>musicmenu</menu_music>

    </menu_sound>

 

<static_version x="15" y="740" width="100" height="30">

<text align="l" font="graffiti19" a="135" r="135" g="123" b="116" complex_mode="0"/>

</static_version>

</w>

 


И добавляем под это:
 

<static_version x="15" y="740" width="100" height="30">

<text align="l" font="graffiti19" a="135" r="135" g="123" b="116" complex_mode="0"/>

</static_version>

 

Вот это:

 

<mod_version x="15" y="720" width="100" height="30">

<text align="l" font="graffiti19" a="135" r="135" g="123" b="116" complex_mode="0"/>

</mod_version>

 


Должно получится вот так:

 

    <menu_sound random="0" >

<menu_music>musicmenu</menu_music>

    </menu_sound>

 

<static_version x="15" y="740" width="100" height="30">

<text align="l" font="graffiti19" a="135" r="135" g="123" b="116" complex_mode="0"/>

</static_version>

 

<mod_version x="15" y="720" width="100" height="30">

<text align="l" font="graffiti19" a="135" r="135" g="123" b="116" complex_mode="0"/>

</mod_version>

</w>

 


Сохраняем

 


Теперь открываем ui_mm_main_16.xml идем в конец видим вот это:

 

    <menu_sound random="0" >

<menu_music>musicmenu</menu_music>

    </menu_sound>

 

<static_version x="14" y="740" width="80" height="30">

<text align="l" font="graffiti19" a="135" r="135" g="123" b="116" complex_mode="0"/>

</static_version>

</w>

 


И под это:

 

<static_version x="14" y="740" width="80" height="30">

<text align="l" font="graffiti19" a="135" r="135" g="123" b="116" complex_mode="0"/>

</static_version>

 

Добавляем вот это:

 

<mod_version x="14" y="720" width="80" height="30">

<text align="l" font="graffiti19" a="135" r="135" g="123" b="116" complex_mode="0"/>

</mod_version>

 


Должно получится вот так:

 

    <menu_sound random="0" >

<menu_music>musicmenu</menu_music>

    </menu_sound>

 

<static_version x="14" y="740" width="80" height="30">

<text align="l" font="graffiti19" a="135" r="135" g="123" b="116" complex_mode="0"/>

</static_version>

 

<mod_version x="14" y="720" width="80" height="30">

<text align="l" font="graffiti19" a="135" r="135" g="123" b="116" complex_mode="0"/>

</mod_version>

</w>

 


Сохраняем, запускаем игру и в главном меню над версией игры видим название и версию своего мода!

 

ВНИМАНИЕ! ВСЕ СИМВОЛЫ [ и ] заменить на слэши

 


Урок закончен!

 

Автор статьи: Штайнэр или (_MeX@NiC_)

P.S.

Этот гайд склеен из многих документов в один как всеобъемляющий. Авторы поздразделов:

  • [NEW WORLD]-GER-DOS- - Изменение старта главного героя
  • [W0LF] - Создание новой группировки
  • Niko1995 - Добавление физического объекта на локацию
  • Mr.MEX - Изменение старта главного меню ; Вывод сообщения на экран ; Изменение HUD'a ; Спавн предметов ; Спавн аномалии ; Жрачка ; Спавн НПС через скрипт ; Как создать тайник ; Параметры погоды ; Создание оружия ; Добавление места для сна ; Вывод информации о своём моде в главном меню ; Создание анимации через файл *.seq
Комментарии: 5
Ваш комментарий

Спасибо, что не забываете авторов(:

10

Спасибо, что не забываете авторов(: [2] Даже не думал, что мой гайд двухлетней давности кому-либо пригодится. :D

10

Молодец, хоть попдправил

6

спасибо, очень пригодилось

3