Создание анимации через файл *.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.

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

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