Поиск по сайту
Меню
Энциклопедия
Группировки

Мы не участвуем в войне группировок, не стремимся завоевать власть или нажиться на продаже хабара. Сталкеры нашего клана это надежные и подготовленные люди. Главная цель группировки – изучение Зоны и разработка методов борьбы с ее распространением. Присоединившись к нам, ты будешь обеспечен всем, включая уникальное оружие и снаряжение!
Опрос
Найти в хабаре лучше:
Всего ответов: 281
Новые сообщения · Участники · Правила форума · Поиск · RSS
  • Страница 1 из 1
  • 1
Форум » Обсуждаем S.T.A.L.K.E.R. » S.T.A.L.K.E.R.Зов припяти » Уроки Модифицирования ЗП (Модифицирования ЗП)
Уроки Модифицирования ЗП
дантистДата: Пятница, 19.10.2012, 01:56 | Сообщение # 1
Глава Монолита. Разведчик. Старший Хабаровщик.
Группа: Администраторы

Ранг:
Сообщений: 202
Награды: 5
Репутация: 35 Пол: Сталкерша
Проживаю в-
Создание нового достижения

Для начала нужно распаковать игру анпакером.

После распаковки идём в следующие директории и ищем следующие файлы:

Code
info_x.xml ---> configs\gameplay\ (где "x" название локации на которой хотим получить достижение например jupiter) этот файл нужен для просмотра списка квестов на локации, зачем нам это узнаете позже.
achievements.ltx ---> configs\misc\
st_achievement.xml ---> configs\text\rus\
ui_actor_achivments.xml ---> configs\ui\textures_descr\
xr_statistic.script ---> scripts\
ui_actor_achivments.dds ---> textures\ui\
xr_conditions.script ---> scripts\


И так, приступаем к работе.

Откроем файл achievements.ltx и ищем такую вот запись:

[achievements]
pioneer
mutant_hunter
detective
one_of_the_lads
kingpin
herald_of_justice
seeker
b a ttle_sys tems_mas ter
h igh_tech_master
skilled_s talker
leader
diplomat
research_man
friend_of_duty
friend_of_free dom
b a lance_a dvocate
wealthy
keeper_of_secrets
marked_by_zone
inf ormation_dealer
friend_of_stalkers


Добавим в конце название_достижения_на_английском. Пример:

[achievements]
pioneer
mutant_hunter
detective
one_of_the_lads
kingpin
herald_of_justice
seeker
b a ttle_sys tems_mas ter
h igh_tech_master
skilled_s talker
leader
diplomat
research_man
friend_of_duty
friend_of_free dom
b a lance_a dvocate
wealthy
keeper_of_secrets
marked_by_zone
inf ormation_dealer
friend_of_stalkers
al l_stal kers_y our_fr iend


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

Code
["Название_достижения_на_английском_без_кавычек"]
icon = ui_inGame2_имя_иконки_на_английском
hint = st_sp_achievement_22_hint <--- То, что будет выводиться в КПК при наведении на иконку достижения (надо оставлять так же меняя только числа, чтоб они шли по порядку)
name = st_sp_achievement_22_name <--- Имя достижения
desc = st_sp_achievement_22_descr <--- Описание достижения
functor = xr_statistic.название_достижения_на_английском_functor <--- функция для получения нашего достижения


Закрываем сохраняя изменения в файле

Далее откроем файл st_achievement.xml и добавим между:

Code

<string id="st_sp_achievement_21_name">
<text>Друг сталкеров</text>
</string>


и

Code
<string id="st_sp_achievement_1_hint">
<text>Совокупность новых данных позволила профессорам Герману и Озёрскому синтезировать в условиях Зоны экспериментальный анабиотик.</text>
</string>


Следующее:

Code
<string id="st_sp_achievement_22_hint">
<text>Ваш текст который будет высвечиваться в КПК при наведении мышки на иконку достижения.</text>
</string>
<string id="st_sp_achievement_22_descr">
<text>Полное описание достижения.</text>
</string>
<string id="st_sp_achievement_22_name">
<text>Имя достижения</text>
</string>

Закрываем с подтверждением на сохранение изменений

Открываем xr_statistic.script идём в самый конец и добавляем следующее:

Code
function название_вашей_функции()
if not has_alife_info("пишем_что_хотим_на_английсокм") then <--- проверка на раннее получение этого достижения
if has_alife_info("название_квеста_или_действия") <--- квест или действие после которого будет получено достижение
and has_alife_info("название_квеста_или_действия") <--- эта функция если квестов несколько
db.actor:give_info_portion("пишем_что_писали_в_проверке_на_получение_ранее_достижения")
news _man ager .sen d_ti p(db.actor, "st_ach_название_вашего_достижения_на_английском", nil, "название_вашего_достижения_на_английском", nil, nil)
xr_effects.inc_faction_goodwill_to_actor(db.actor, nil, {"stalker", 100}) <--- прибавление репутации сталкеров при получении данного достижения (если - то убавление), можно вписать любую другую группировку (использовать несколько команд если хотите прибавить или убавить репутацию у нескольких группировок)
end
end
return has_alife_info("пишем_что_писали_в_проверке_на_получение_ранее_достижения")
end

Закрываем с подтверждением на сохранение изменений.

Откроем xr_conditions.script найдём:

Code
friend_of_stalkers_functor = xr_statistic.friend_of_stalkers_functor

И после пишем:

Code
название_вашей_функции = xr_statistic.название_вашей_функции

Закрываем с подтверждением на сохранение изменений.

Рисуем в ui_actor_achivments.dds иконку для нашего достижения (можно взять и старую).

Открываем файл ui_actor_achivments.xml и добавляем там:

Code
<texture id="ui_inGame2_название_вашей_иконки" x="0" y="0" width="121" height="121" />

Если рисовали собственную иконку то вписываем её координаты (по x и y осям), если решили взять уже имеющуюся то вписывайте её координаты (координаты определяются по левому верхнему углу иконки достижения) координаты можно посмотреть через WTV (Windows Texture Viewer) Удачной игры

Создание Места для Сна

Здравствуйте, сегодня мы рассмотрим добавление места для сна в ЗП. Это моя первая статья, так что прошу сильно ногами не бить....

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 = scripts\sr_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

2. Потом идем в 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"},
}

3. Открываем 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 у нас будет спальное место в барже Ноя (координаты брались оттуда).

Создание и редактирование худа

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

Собственно это стандартный набор...он естественно не полный...есть ещё пара конфигов .... типо координаты новостей на худе...но они редко правятся.

Раздел второй:правка конфигов.

Открываем файлик maingame.xml

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

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

<static_weapon - окно патронов + тип патронов
<static_ammo - количество патронов
<static_wpn_icon - иконка коробки от патронов
<car_panel - состояние машины
<static_pda_online - счётчик контактов
<quick_info - задания и всякая лабуда типо обучения в начале игры.
<icons_scroll_view - список индикаторов состояния ГГ (радиация,голод и тп.)Далее идёт сам список,НО он не поддаётся правке индивидуально. Правим только всё сразу строчкой упомянутой выше.

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

Сборка скриптовых функций

=======================================================================
ВЫДАЁМ ПРЕДМЕТ АКТОРУ
=======================================================================
function название функции (first_speaker, second_speaker)
dialogs.relocate_item_section(second_speaker, "название предмета", "in")
end

Размещается в файлах скрипт.

Выдача поршня вставляется под строку действия.
<action>название скрипта.название функции</action>

Примечание, что бы выдать два одинаковых предмета пишем

function название функции (first_speaker, second_speaker)
dialogs.relocate_item_section(second_speaker, "название предмета", "in",2)
end

Если надо больше меняем цифру 2 на нужную нам.
=========================================================================
ОТБИРАЕМ ПРЕДМЕТ У АКТОРА.
=========================================================================
function название функции(first_speaker, second_speaker)
dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "название предмета")
end

размещается в файлах скрипт

выдача поршня вставляется под строку действия
<action>название скрипта.название функции</action>

Примечание, что бы отобрать два одинаковых предмета пишем

function название функции(first_speaker, second_speaker)
dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "название предмета",2)
end

Если надо больше меняем цифру 2 на нужную нам.
=======================================================================
СПАВНИМ ВЕЩЬ В РЮКЗАК гг
=======================================================================
function название функции()
local obj = alife():create("ВЕЩЬ", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
end

В диалог
<action>название скрипта.название функции</action>

===========================================================================
ПРОВЕРКА НАЛИЧИЯ У АКТОРА ПРЕДМЕТА
===========================================================================
Вариант первый
function Название функции()
if db.actor:object("название предмета") then
return true
end
return false
end

в диалог

<precondition>имя скрипта.название функции</precondition>

<---------как вариант(пользуются ПЫС)------------------>

function название функции(first_speaker, second_speaker)
return first_speaker:object("название предмета") ~= nil
end

в диалог

<precondition>имя скрипта.название функции</precondition>
===========================================================================
ПРОВЕРКА ВЕЩЕЙ У ГГ
===========================================================================
function Название функции(first_speaker, second_speaker)
return first_speaker:object("название предмета") ~= nil or
first_speaker:object("название предмета") ~= nil or
first_speaker:object("название предмета") ~= nil
end

в диалог

<precondition>имя скрипта.название функции</precondition>

описание... если есть хотя бы одна вещь, то мы получим фразу, если нет всех нет разговора
============================================================================
ПРОВЕРКА ДЕНЕГ У ГГ
============================================================================
Вариант первый(используют ПЫС)

function название функции(first_speaker, second_speaker)
return first_speaker:money() >= 2000
end

в диалог

<precondition>имя скрипта.название функции</precondition>

<-----------Вариант два-------------->
Использовал на ТЧ, но и в ЗП работает

function название функции()
return db.actor:money()>=10000
end
в диалог

<precondition>имя скрипта.название функции</precondition>

=========================================================================
СПАВН ПРЕДМЕТА
=========================================================================
function spawn_vintar()
alife():create("Название предмета",vector():set(24.725412368774,-3.6072344779968,173.83030700684),993926,210)
end

В диалог

<action>название скрипта.название функции</action>

==========================================================================
МГНОВЕННАЯ СМЕРТЬ ГГ
==========================================================================

function название функции(npc, actor)
npc:kill(actor)
end

В диалог

<action>название скрипта.название функции</action>
===========================================================================
ПРОВЕРКА КОЛ_ВА ОДИНАКОВЫХ ПРЕДМЕТОВ
===========================================================================
function название функции(first_speaker, second_speaker)
local item_sections = {"Предмет"}
local needed = количество одинаковых предметов, ставится цифра без знаков
local count = 0
local item_section
local function calc(temp, item)
if item:section() == item_section then
count = count + 1
end
end
for k,v in pairs(item_sections) do
item_section = v
get_story_object("actor"):iterate_inventory(calc, actor)
end
return count >= needed
end

в диалог
<precondition>имя скрипта.название функции</precondition>
==========================================================================
ЛЕЧЕНИЕ ГГ
==========================================================================
Вставим этот актион в диалог

<action>dialogs.medic_magic_potion</action>
==========================================================================
ВЫДАЧА ДЕНЕГ от НПС ГГ
==========================================================================

function название функции(first_speaker, second_speaker)
dialogs.relocate_money_to_actor(first_speaker, second_speaker, 2000)
end

В диалог

<action>название скрипта.название функции</action>
==========================================================================

===================================================== =====================
ПРОВЕРКА НА ХОРОШЕЕ ЗДОРОВЬЕ
==========================================================================
function actor_good(first_speaker, second_speaker)
if db.actor.health > 0.75 or --уровень здоровья, при котором диалог уже будет появляться(от 0 до 1)
db.actor.radiation < 0.1 or -- уровень радиации,при котором диалог уже будет появляться(от 0 до 1)
db.actor.bleeding < 0.1 then --уровень кровотечения, при котором диалог уже будет появляться(от 0 до 1)
return true
end
return false
end
==========================================================================
ПРОВЕРКА НА ОТНОШЕНИЯ ГРУППИРОВКИ К ГГ
==========================================================================
function if_enemy_to_actor(first_speaker, second_speaker)
local npc = dialogs.who_is_npc(first_speaker, second_speaker)
local actor = dialogs.who_is_actor(first_speaker, second_speaker)
return xr_conditions.is_faction_enemy_to_actor(actor, npc, {"Название группировки"})
end

если надо когда группировка не враждебна к актору, то return not
если надо когда группировка друзья,то return xr_conditions.is_faction_friend_to_actor(actor, npc, {"Название группировки"})
когда нейтралы, return xr_conditions.is_faction_neutral_to_actor(actor, npc, {"Название группировки"})
;------------------------------------------------------------------------------------------------------
;ПРОВЕРКА НА УБИЙСТВО
;------------------------------------------------------------------------------------------------------
local npc = ТУТ НУЖНО ЗАДАТЬ НЕПИСЯ
if db.actor:has_info(НАЗВАНИЕ ИНФОПОРШНЯ ВЫДАННОГО ЗАДАНИЯ)
if npc:alive() then
db.actor:give_info_portion(НАЗВАНИЕ ИНФОПОРШНЯ С УКАЗАНИЕМ ПОДОЙТИ К НЕПИСЮ)
db.actor:disable_info_portion(НАЗВАНИЕ ИНФОПОРШНЯ ВЫДАННОГО ЗАДАНИЯ)
end
end
;------------------------------------------------------------------------------------------------------
;ЛЕВЕЛ_ЧЕНДЖЕРЫ
;------------------------------------------------------------------------------------------------------
function add_new_lc(levch,levchn,levchm,info)
local objt = alife():story_object(levch)
if not objt then
alife():create(levchn)
end
local obj = alife():story_object(levch)
if obj then
level.map_add_object_spot(obj.id, "level_changer",levchm)
db.actor:give_info_portion(info)
info_received()
end
end

Все мы знаем, что движок ведёт себя, как капризная невеста, и вылетает от малейшего чиха
Причины Вылетов
1. Синтаксические ошибки в коде. Как правило, лог при этом содержит что-то вроде
Код
attempt to index global '<имя файла>' (a nil value)
т.е. движку не удалось скомпилить модуль и его значение (модуля) равно нулю

2. Ошибки времени выполнения Lua. Лог обычно содержит указание ошибки модуль и строку, в которой ошибка произошла. Типа такого:
Код
LUA error: ....k.e.r. 1.0004\gamedata\scripts\<имя файла>.script:<номер строки>: attempt to index global 'npc' (a nil value)
К типичным ошибка относятся попытки вызвать несуществующий метод класса (и вообще индексировать что-бы то ни было несуществующим ключом) или, к примеру, конкатенация строки с nil.

3. Ошибки времени выполнения самого игрового движка. Лога обычно нет, т.е. движок тихо слетает, сам в лог ничего не пишет, а забуферизированный до этого момента лог теряется. Иногда, правда, что-то в логе есть, но бывает это весьма редко. Ошибки движка вызваны неправильным использованием функций самого движка. Например, попытка заспавнить объект с несуществующей секцией.


Создаем файлы для работы с диалогами

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

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

Создадим файл dialogs_zver_kopdon.txt далее его с помощью тотал командера( или чем вы пользуетесь) меняем окончание
.txt на .xml и получаем готовый файл. dialogs_zver_kopdon.xml
открываем его и вставляем в него следущее:

Код
<?xml version="1.0" encoding="windows-1251" ?>
<string_table>

</string_table>

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

и в самом конце списка через запятую прописываем dialogs_zver_kopdon

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

Создадим файл zver_kordon_dialogs.xml пропустим создание, так как оно подробно рассписано выше.

откроем файл и и вставим:

Код
<?xml version="1.0" encoding="windows-1251" ?>
<game_dialogs>

</game_dialogs>

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

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

Создадим файл инфо где будут прописываться инфопоршни.
Создадим файл info_zver_kordon.xml
Откроем файл и вставим

Код
<?xml version='1.0' encoding="windows-1251"?>

<game_information_portions>

</game_information_portions>

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

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

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

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

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

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

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

Откроем файл и вставим:

Код
<?xml version='1.0' encoding="windows-1251"?>

<xml>

</xml>

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

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


Форум » Обсуждаем S.T.A.L.K.E.R. » S.T.A.L.K.E.R.Зов припяти » Уроки Модифицирования ЗП (Модифицирования ЗП)
  • Страница 1 из 1
  • 1
Поиск:
IP: 95.134.150.26
БРАУЗЕР: chrome 20.0
Администратор сайта Лис

Используются технологии uCoz