
Создание анимации через файл *.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
- Открываем файл 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
Сюда тоже добавляем в таком же порядке...
- Создаем профайл сталкера в gamedata-configs-gameplay-character_desc_general.xml (ну или другой, который вы прописали, или на уровнях). Думаю это вы умеете, но один нюанс - в строке community вставляем нашу группировку , то есть grom
- в файле 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 ---группировка как в профайле
- death_manager.script
local community_list = { "stalker", "dolg", "freedom", "bandit", "army", "zombied", "ecolog", "killer", "monolith","grom"}
- в файле gamedata-configs-misc-death_items_by_communities.ltx
Добавляем секцию с группировкой, и продукты для нее...., теоретически можно не трогать этот файл, все будет по дефолту и вылетов не будет тоже, проверял.
- Чтоб название было по русски в любом файле с текстами
[string id="grom"]
[text]Вольный сталкер[/text]
[/string]
P.S. В пункте 6 Все штуки "[" и "]" заменить на "<" и ">"
- Осталось заспавнить, берем секции из спавн_сектионс....
Мануал не мой, я только подредактировал, чтобы он на ПГ заработал
Добавление физического объекта на локацию
В этой статье я подробно напишу как добавить на локацию физический объект через 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
ВСЕ! :)
Вывод сообщения на экран
Что нужно для работы:
- Распаковщик ресурсов.
- Блокнот, notepad ++. Я работаю с нотепадом т. к. у него есть подсветка синтаксиса.
- Прямые руки. Кривые не подойдут.
- Светлая голова.
- Терпение.
Методом проб и ошибок научился выводить сообщения на экран, сейчас распишу как:
Для вывода сообщения на экран нужен любой исполняемый файл, к примеру возьмем
файл 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
Файлы + описание:
- ui_hud.dds (собственно опорный файл содержащий почти все текстуры худа)
- cursor.dds (текстура причела без оружия в руках,попросту кругляшка)
- hud_map_arrow.dds (стрелка компаса)
- Конфиги:
Папка - configui
Файлы + описание:
- maingame.xml (содержит конфиги индикаторов здоровья и состояния брони,индикаторов состояния ГГ(радиация,поломка оружия и тп) , окно патронов и всё с ним связаное,пояс артефактов ,мигающая иконка ПДА и кол во контактов. Так же состояние машины)
- motion_icon.xml (содержит конфиги положения ГГ (сидит,стоит и тп) ,а так же полоски выносливости,уровня шума и заметности ГГ.)
- ui_custom_msgs.xml (часы + всякая лабуда типо укусов...вообщем худы повреждений)
- 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"
Спавн предметов
Вот решил внести свой вклад в модостроение))
Тема которая будет расмотрена в данной статье, это спавн предметов в ЗП.
Для начала попробуем заспавнить что-нибудь……например…… О, вертолёт !!!!
Что для этого нам нужно ?
- ACDC для ЗП
- Activeperl 8.7.
- Распакованная игра (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 ---Наше оружие
Потом ищем Азота и делаем тоже самое.
Всё!!! (ЕЕЕ...Ну наконец-то а то писать уже пальцы болят) Мы добавели новое оружие, оно появится у Сыча, если не появилось просто перезагрузитесь.
Добавление места для сна
- Итак, мы решили добавить место для сна. Сначала мы распакуем 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
- Потом идем в 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"},
}
- Открываем 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 и тем более своих.
Сегодня я напишу в этом уроке как выводить инфу о своем моде в главном меню.
Сложность: очень очень очень легко
- Первым делом нам нужен распаковщик реурсов запускаем его...
- Распаковали. Теперь создаём папку в корне игры назовём её gamedata
- В ней же создаём папку scripts и configs, в configs создаём папку ui.
- Вытаскиваем из распакованной игры файл ui_main_menu.script в папку gamedata]scripts] и открываем его блокнотом или notepad++ (есть подсветка синтаксиса)
- Внимание все файлы формата *.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
Спасибо, что не забываете авторов(:
Спасибо, что не забываете авторов(: [2] Даже не думал, что мой гайд двухлетней давности кому-либо пригодится. :D
Добавлю в тему на форуме.
Молодец, хоть попдправил
спасибо, очень пригодилось
а как менять визуал гг?