Репутация: 308
Регистрация: 03.10.2009
Город: Lost
Создание нового достижения
Для начала нужно распаковать игру анпакером.
После распаковки идём в следующие директории и ищем следующие файлы:
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 и ищем такую вот запись:
Code
[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
Добавим в конце название_достижения_на_английском. Пример:
Code
[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 и добавим между:
<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
Закрываем с подтверждением на сохранение изменений.
Если рисовали собственную иконку то вписываем её координаты (по x и y осям), если решили взять уже имеющуюся то вписывайте её координаты (координаты определяются по левому верхнему углу иконки достижения) координаты можно посмотреть через WTV (Windows Texture Viewer) Удачной игры Автор: WillsherT
Создание Места для Сна
Здравствуйте, сегодня мы рассмотрим добавление места для сна в ЗП. Это моя первая статья, так что прошу сильно ногами не бить....
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
{ {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 у нас будет спальное место в барже Ноя (координаты брались оттуда).
Автор: ZeeK
Создание и радактирование худа
Раздел первый:файлы. Для работы над худом нам нужны следующие файлы(не обязательно все конешно) Текстуры: Папка - 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 - список индикаторов состояния ГГ (радиация,голод и тп.)Далее идёт сам список,НО он не поддаётся правке индивидуально. Правим только всё сразу строчкой упомянутой выше.
<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
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
описание... если есть хотя бы одна вещь, то мы получим фразу, если нет всех нет разговора ============================================================================ ПРОВЕРКА ДЕНЕГ У ГГ ============================================================================ Вариант первый(используют ПЫС)
function название функции(first_speaker, second_speaker) return first_speaker:money() >= 2000 end
========================================================================= СПАВН ПРЕДМЕТА ========================================================================= function spawn_vintar() alife():create("Название предмета",vector():set(24.725412368774,-3.6072344779968,173.83030700684),993926,210) end
========================================================================== МГНОВЕННАЯ СМЕРТЬ ГГ ==========================================================================
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
===================================================== ===================== ПРОВЕРКА НА ХОРОШЕЕ ЗДОРОВЬЕ ========================================================================== 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
Всё работаем!!!
"Я вижу мир насквозь - все счастья и проблемы земли.Я слышу мыслы все-при все, особенно сейчас твои"
2 вопроса. 1. Где в ЗП в папке геймдата находятся файлы с едой и медикаментами? 2. Можно ли как-то удалить из ЗП бустеры (бустеры - препараты типа пси-блокада, барвинок, геркулес и тд.)?
2. Можно ли как-то удалить из ЗП бустеры (бустеры - препараты типа пси-блокада, барвинок, геркулес и тд.)?
Можно удалить.
Добавлено (18.07.2011, 16:50:33) --------------------------------------------- Добавление новой групировки (Зов Припяти) Для начала распакуйте архивы игры Базовый урок , ничего сложного, смарт-терейны не переписывал, сами будете добавлять.... назовем нашу группировку (айди) grom
;названия группировок (порядок должен совпадать с 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) [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
Сюда тоже добавляем в таком же порядке...
2) Создаем профайл сталкера в gamedata-configs-gameplay-character_desc_general.xml (ну или другой, который вы прописали, или на уровнях)
думаю это вы умеете, но один нюанс -
в строке community вставляем нашу группировку , то есть grom
3) в файле 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 ---группировка как в профайле
Добавляем секцию с группировкой, и продукты для нее...., теоретически можно не трогать этот файл, все будет по дефолту и вылетов не будет тоже, проверял.
6)Чтоб название было по русски в любом файле с текстами
Редактирование костюмов Разбор параметров В этой статье мы рассмотрим значения параметров костюмов. Все параметры, не упомянутые ниже, изменять строго не рекомендуется! Итак, секции с параметрами находятся в файле: config\misc\outfit.ltx Разберем, например, параметры классического костюма сталкера. [stalker_outfit]:outfit_base
; название секции костюма. именно к нему игра будет обращаться. outfit_base - базовая (наследуемая) секция (изменять строго не рекомендуется).
visual = equipments\stalker_suit ; модель, используемая для сложенного костюма, лежащего на земле.
actor_visual = actors\hero\stalker_hood.ogf ; модель, используемая для игрока, когда на нем надет костюм.
inv_name = stalker_outfit_name ; название в инвентаре.
inv_name_short = stalker_outfit_name ; название в инвентаре (в принципе, можно здесь продублировать значение предыдущего параметра - так чаще всего и делают).
description = stalker_outfit_description ; ссылка на текстовую строку с описанием.
inv_weight = 5.0 ; вес.
; далее идут параметры иконки в инвентаре (см. примечание 1).
[sect_stalker_outfit_immunities] ; коэффициенты иммунитета самого костюма, то есть - то, насколько сильно он сам подвержен повреждениям от различных типов воздействий. по значениям каждого типа - см. выше.
Редактирование оружия Общие положения Сегодня мы разберем то, каким образом можно редактировать оружие в игре - от характеристик до описания. Характеристики оружия хранятся здесь: ...\S.T.A.L.K.E.R\gamedata\config\weapons\w_[...].ltx Разбор структуры конфига Возьмем, для примера, конфиг w_g36.ltx. Он делится на разделы: Первый раздел Здесь хранится общая информация о оружии - его класс, тип, ссылки на спавн и т.д. Нас интересуют следующие строки: • description = enc_weapons1_wpn-g36 - ссылка на string_id, из которого игра подгружает описание этого оружия. • ef_main_weapon_type = 2 - основной тип, к которому принадлежит оружие • ef_weapon_type = 6 - подтип, к которому принадлежит оружие Второй раздел Содержит модификаторы, которые даются к углу зрения/дальности обзора NPC, держащего это оружие в руках: • holder_range_modifier = 1.85 - во сколько раз увеличивается eye_range • holder_fov_modifier = 0.3 - во сколько раз увеличивается eye_fov Третий раздел Содержит данные о самом оружии, его некоторых характеристиках: • cost = 18000 - базовая цена (торговцы умножают её на некоторый коэффициент) • weapon_class = assault_rifle - класс оружия (здесь - штурмовая винтовка) • ammo_mag_size = 30 - размер магазина • ammo_class = ammo_5.56x45_ss190, ammo_5.56x45_ap - типы используемых патронов • grenade_class = ammo_m209 - тип используемых гранат • fire_modes = 1, -1 - режимы ведения огня • hand_dependence = 1 - засивимость о рук (?) - возможно, речь идет о качании ствола • single_handed = 0 - держится ли только в одной руке • slot = 2 - слот в инвентаре • animation_slot = 2 - вид анимации (для пистолета/для винтовки) • inv_name = wpn-g36 - ссылка на имя, отображаемое в инвентаре, тоже берется из string table, как и описание • inv_name_short = wpn-g36 - короткое имя; в данном случае используется то же самое • inv_weight = 3.6 - вес • inv_grid_width = 5 - координаты первого угла иконки по x • inv_grid_height = 2 - координаты первого угла иконки по y • inv_grid_x = 0 - координаты второго угла иконки по x • inv_grid_y = 10 - координаты второго угла иконки по y Четвертый раздел В четвертом разделе хранится информация о износе/отдаче оружия. Практически все параметры там снабжены комментариями, поэтому приведу лишь самые интересные: • cam_relax_speed = 5.7 - скорость возврата в исходное положение • cam_dispersion = 0.2 - увеличения угла (в градусах) с каждым выстрелом • fire_dispersion_condition_factor = 5 - увеличение дисперсии в процентах при максимальном износе • misfire_probability = 0.003 - вероятность осечки при максимальном износе • misfire_condition_k = 0.05 - порог (в данном случае - 5%), после которого оружие может заклинивать • condition_shot_dec = 0.0002 - увеличение износа при каждом выстреле Пятый раздел Здесь хранится множество параметров, из которых наиболее интересны эти: • hit_power = 0.50, 0.54, 0.57, 0.60 - сила выстрела • hit_impulse = 105 - импульс пули (сила, которую летящая пуля передает жертве, влияет на поведение ragdoll-тела) • hit_type = fire_wound - тип причиняемых повреждений, в данном случае - пулевые ранения (параметр в синглплеере ни на что не влияет) • fire_distance = 600 - максимальная дистанция для выстрела • bullet_speed = 925 - начальная скорость пули • hud = wpn_g36_hud - внешний вид оружия Шестой раздел • position = -0.026, -0.132, 0.0 - позиция по отношению к игроку (?) • orientation = 0, 0, 0 - направление, в которое смотрит ствол (?) Седьмой раздел Содержит описания визуальной стороны оружия и некоторые другие параметры: • startup_ammo = 90 - как нетрудно догадаться, стартовое количество патронов (в синглплеере ни на что не влияет) • visual = weapons\g36\wpn_g36.ogf - модель оружия, используемая NPC, а также игроком при виде от третьего лица • ph_mass = 4 - физическая масса, используемая при расчетах • scope_status = 1 - ситуация со съемным прицелом • silencer_status = 0 - ситуация со съемным глушителем • grenade_launcher_status = 0 - ситуация с подствольным гранатометом • Параметры: o 0 - нет, новый прикрепить нельзя o 1 - уже есть, несъемный o 2 - нет, но можно установить новый • zoom_enabled = true - есть ли зум (прицеливание) • scope_zoom_factor = 33.3 - какой зум дает прицеливание (здесь - 1.8х) • scope_texture = wpn\wpn_crosshair_g36 - текстура прицельной сетки • shell_point = 0.15, 0.0, -0.05 - точка вылета гильз • shell_dir = 0.0, 1.0, 0.0 • fire_point = -0.000000,0.062000,0.134000 - точка выстрела • fire_point2 = 0.30, 0.00, 0.05 - точка выстрела (2) • fire_bone = wpn_body • orientation = 0, 0, 0 - направление • position = 0, 0, 0 - позиция • visual = weapons\g36\wpn_g36_hud.ogf - модель, отображаемая у нас в руках Изменение описаний Описания оружия хранятся в файле: ...\S.T.A.L.K.E.R\gamedata\config\text\rus\string_table_enc_weapons.xml В нем хранятся строки с названиями и описаниями, на которые ссылаются конфиги оружия. Например, тот же G36 ссылается сюда: [...] Штурмовая винтовка немецкого производства, представляющая собой первоклассный образец современного оружия - лёгкого, надёжного и эргономичного.\n Боеприпасы:\n обычный 5,56x45 мм SS109,\n бронебойный 5,56x45 мм АР. [...] ГП37 [...] Меняя их содержимое, мы меняем описания/названия данного оружия. Изменение патронов Параметры патронов хранятся в файле: ...\S.T.A.L.K.E.R\gamedata\config\weapons\weapons.ltx Найдем, например, раздел, отвечающий за патроны к тому же G36 (о них мы узнали из параметра ammo_class), и разберем, что означает каждый параметр:
• visual = weapons\ammo\ammo_556x45_ss190.ogf - модель коробки с патронами • description = enc_weapons1_ammo_ammo-5.56x45-ss190 - ссылка на string_id, из которого игра подгружает описание этого типа патронов • cost = 320 - стоимость одной коробки • box_size = 30 - количество патронов в одной коробке • inv_name = ammo-5.56x45-ss190 - ссылка на string_id, содержащий имя для инвентаря • inv_name_short = ammo-5.56x45-ss190_s - ссылка на string_id, содержащий краткое имя для инвентаря • inv_weight = 0.33 - вес • inv_grid_width = 2 - координаты первого угла иконки по x • inv_grid_height = 1 - координаты первого угла иконки по y • inv_grid_x = 14 - координаты второго угла иконки по x • inv_grid_y = 11 - координаты второго угла иконки по y
• k_dist = 1 - коэффициент дальности, сама дальность - в стволе, тупо расстояние. • k_disp = 2.5 - кучность, завязана с кучностью в стволе • k_hit = 1 - убойность, завязана с убойностью в стволе • k_impulse = 1 - чисто наскока эффектно ногами непись дрыгнет во время кердыка • k_pierce = 1 - коэффициент наскока испорится броня при попадании
• impair = 1 - коэффициент износа ствола от пули • buck_shot = 1 - кол-во составляющих в пуле (напр картечь - 4, пуля - 1) • tracer = on - является ли патрон трассирующим (on/off) • wm_size = 0.05 - визуальный размер дырки на стене от пули
Создание оружия
Создание нового оружия В этой статье мы научимся создавать новые образцы вооружения. Для начала, мы будем использовать модели из оригинальной игры. Если вы хотите создать оружие, имеющее уникальный внешний вид, ознакомьтесь с уроком по созданию моделей. Добавим в игру АК101. Внешний вид Позаботимся о том, чтобы наше оружие отличалось внешне от того же АК74. Текстуры Нарисуем для оружия новую текстуру. Подробно останавливаться на этом процессе не буду, ознакомьтесь с примером, приведенным здесь. Итак, основываясь на текстуре АК74, мы сделали вот такую текстуру:
Файлы текстур мы назвали: • wpn_ak10.dds • wpn_ak10_bump#.dds • wpn_ak10_bump.dds Модели Новых моделей мы пока делать не станем, просто воспользуемся дублированными моделями от АК74. Скопируем папку: gamedata\meshes\weapons\ak47\ И назовем её ak-101. Содержимое, соответственно, переименуем в: • wpn_ak101.ogf • wpn_ak101_hud.ogf. Теперь пропишем в эти модели созданные нами текстуры. Иконки Добавим в игру иконки, которыми оружие будет отображаться в инвентаре. Вот, что получилось в конечном итоге:
Конфиги Новое оружие мы будем делать на базе оригинальных конфигурационных файлов. Создадим АК101 на базе конфигов АК74. Свойства оружия Скопируем файл из папки: gamedata\config\ak74.ltx Назовем его ak101.ltx.
Отредактируем свойства по своему усмотрению (но лучше - в соответствии с достоверной информацией о характеристиках оружия, т.к. АК101 - всё-таки оружие реально существующее). Редактирование конфигов оружия подробно описано в отдельном уроке. В данном случае конфиг был составлен таким образом: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [wpn_ak101]:identity_immunities GroupControlSection = spawn_group discovery_dependency = $spawn = "weapons\ak-101" ; name and section in level editor $npc = on $prefetch = 8 scheduled = off ;[] option for ALife Simulator cform = skeleton class = WP_AK74 ; class of the weapon that corresponding to CPP class min_radius = 30 ; [] for AI max_radius = 100 ; [] for AI description = enc_weapons1_wpn-ak101
ef_main_weapon_type = 2 ef_weapon_type = 6
;----------------------------------------------------------------------------------- holder_range_modifier = 1.0 ; во сколько раз увеличивается eye_range holder_fov_modifier = 0.7 ; во сколько раз увеличивается eye_fov ;-----------------------------------------------------------------------------------
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;HUD offset in zoom mode (to all) ;(use CONSOLE: hud_adjust_mode 0,1,2, then keys WSADQE and P to show current value in console)
; same as above, but for attached grenade launcher for ; in GRENADE mode
grenade_zoom_offset = -0.039600,-0.433100,0.000000 grenade_zoom_rotate_x = -0.538700 grenade_zoom_rotate_y = -0.033800 Регистрация Итак, с характеристиками разобрались. Теперь зарегистрируем оружие в файле weapons.ltx. Для этого пропишем в него строку следующего вида: #include "w_ak101.ltx" Также, необходимо прописать модели, используемые для отображения оружия, в prefetch.ltx: [...] weapons\abakan\wpn_abakan weapons\abakan\wpn_abakan_hud weapons\ak-101\wpn_ak101 weapons\ak-101\wpn_ak101_hud weapons\ak74\wpn_ak74 weapons\ak74\wpn_ak74_hud [...] Так же не забудте в файле mp_ranks.ltx прописать после available_items (которое внизу) прописать название своего оружия. Это предотвратит вылет при убийстве ГГ. Добавление в игру Осталось добавить оружие в игру. Выдайте его некоторым NPC, расширьте ассортимент торговцев.
Сейчас,сейчас,дорогой, вот только кирзунки патронами набью, и сразу, понимаешь!.....
Репутация: 22
Регистрация: 30.06.2011
Город: Самара
как сделать бессмертными ключевых персонажей? А то во концовке игры военные настолько тупые, что стреляют друг в друга, в результате чего мало кого удается довести до вертолетов.
"Умереть достойно умеет каждый человек, вокруг которого умирают часто... Умереть красиво - удел сильных духом... А победить, тогда, когда красиво умирают другие, - значит выполнить Дао Дракона... Победить даже тогда, когда против тебя все" С.Самаров "Дао воина"
Вобще характиристики ГГ изменяются в actor.ltx там не сложно я так делал на ТЧ, вес до бесконечности, бесмертие,прыжок на 30м , бесконечный бег не нажимая кнопку бега и т.д.
Если у тебя паранойя, это не значит, что за тобой никто не следит.
HELP MY!!!!!! нужна помощь советом..... файлы ЗП распаковал универсалэкстрактором, мод распаковал в UEgamedata, подскажите что теперь из исходных файлов удалить и что делать с UEgamedat-ой чтобы игра пошла на новых файлах??? Заранее спасибо всем кто поможет новичку.
shepard185, о Господи... Чтобы игра пошла на новых файлах, нужно все новые файлы сложить в иерархическом порядке в папку gamedata
Ушёл с ресурса из-за занятости. Если что-то экстренное - пишите в ЛС: приду, посмотрю, отвечу. Полноправно вернуться в сообщество планирую после релиза второй части игры. ----------------------------------------------------------------- Всем удачи и не скучать.