После распаковки идём в следующие директории и ищем следующие файлы:
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
Идём в конец файла и добавляем следующее:
["Название_достижения_на_английском_без_кавычек"] 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>
Следующее:
<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 идём в самый конец и добавляем следующее:
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
Закрываем с подтверждением на сохранение изменений.
Если рисовали собственную иконку то вписываем её координаты (по x и y осям), если решили взять уже имеющуюся то вписывайте её координаты (координаты определяются по левому верхнему углу иконки достижения) координаты можно посмотреть через WTV (Windows Texture Viewer) Удачной игры.
Создание Места для Сна Сложность:Низкая
Итак, мы решили добавить место для сна. Сначала мы распакуем 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 у нас будет спальное место в барже Ноя (координаты брались оттуда).
Создание и радактирование худа Сложная:Низкая
Раздел первый:файлы. Для работы над худом нам нужны следующие файлы(не обязательно все конешно) Текстуры: Папка - 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 - хз что это..предполагаю что реч о точках на миникарте
Причины Вылетов Сложность:Низкая
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
Создание работоющего ТV Сложность:Средняя
Итак файлы и программы которые нам понадобятся: Файл all.spawn расположенный по адресу gamedata\spawns\all.spawn Программа ACDC Cop для распаковки\запаковки файла all.spawn Теперь можно начинать. Программой ACDC Cop распаковать all.spawn После распаковки all.spawn появятся много файлов формата ltx Находим там файл alife_zaton.ltx заходим в него и листаем в самый низ… В самом низу добавляем такую секцию: [1900] ; cse_abstract properties section_name = tv_1 name = tv_1 position = 131.13690185547,-6.1206126213074,177.25036621094 direction = 0,-1.37160003185272,-0
; cse_alife_object_physic properties physic_type = 0x3 mass = 10 Все теперь сохраняем, запаковываем all.spawn и ставим его на место где он и стоял… Теперь заходим в игру и бежим на «Скадовск».Там на столе будет стоять телевизор на против Бороды… ТАК ТЕПЕРЬ ОБЪЯСНЮ ВСЕ ПОРЯДКУ: [1900] – номер секции, он не вкоем случае не должен повторятся!!! ; cse_abstract properties section_name = tv_1 – Имя секции(лучше не меняйте, а то можно и all обратно не собрать) name = tv_1 – уникальное имя секции. Можно любое position = 131.13690185547,-6.1206126213074,177.25036621094 – Координаты где будет стоять телевизор direction = 0,-1.37160003185272,-0 – В какую стороны смотрит наш ТВ
; cse_alife_object properties game_vertex_id = 296 – вертрикс координаты(без них игра не будет знать где поставить Тв) distance = 0 level_vertex_id = 1189961 – левел координаты уровня(без них игра не будет знать где поставить Тв)
object_flags = 0xffffff3a
; cse_visual properties visual_name = dynamics\el_tehnika\tv_1 – самое главное…Это наш телевизор. Вернее визуал(логика и путь к картинкам которые будет проигрывать наш ТВ находятся здесь)
; cse_ph_skeleton properties
; cse_alife_object_physic properties physic_type = 0x3 mass = 10
Ну вот и все. Будьте внимательны потому что малейшая ошибка и все all.spawn вы не соберёте!
Создание новой группировки Сложность:Средняя
И так тут я решил быть добрее. 1. Подготовте файлы: configs\creatures\game_relations.ltx configs\creatures\spawn_sections_general.ltx configs\gameplay\character_desc_general.xml con figs\gameplay\npc_profile.xml configs\misc\death_items_by_communities.ltx configs\misc\dialog_manager.ltx configs\text\rus\st_dialog_mana ger.xml scripts\death_manager.script
2. Создаем группировку.
а) В файле game_relations вписываем:
в конец строки "communities" дописываем название группировки, например "ветер" и добавляем порядковый номер: 11
ниже в таблицу communities_relations добавляем (по горизонтали и вертикали) veter и прописываем отношение к другим группировкам (-5000 - полный враг, 0 - нейтрал, 5000 - друг до конца жизни)
ниже в конец строки communities_sympathy добавляем: veter = 0.0
Б) В конец файла death_items_by_communities вписываем: [veter]:stalker
В) В файле death_manager.script в конец строки local community_list дописываем "veter" Выглядит это так: local community_list = { "stalker", "dolg", "freedom", "bandit", "army", "zombied", "ecolog", "killer", "monolith", "veter"}
4. Создаем самый простой диалог (чтобы при нажатии клавишы "говорить" игра не вылетала)
А) В dialog_manager.ltx в столбце LIST находим записи dm_hello и после dm_hello_17 добавляем dm_hello_18 Вот так: dm_hello_0 dm_hello_1 dm_hello_2 dm_hello_3 dm_hello_4 dm_hello_5 dm_hello_6 dm_hello_7 dm_hello_8 dm_hello_9 dm_hello_10 d m_hello_11 dm_hello_12 dm_hello_13 dm_hello_14 dm_hello_15 dm_hello_16 dm_hello_17 dm_hello_18 dm_hello_19
Б) В конец этого же файла строчку: [dm_hello_18] category = hello npc_community = veter level = all
В) В файле st_dialog_manager.xml создаем:
О, здоров, ну что, как?
Вот и всё))!Можно ставить НПС на карту и играть!
Создание радио Сложность:Средняя
Итак приступим… Для того что бы сделать новое РАБОТАЮЩЕЕ радио нам понадобятся файлы: All.spawn(распакованный) Sound_theme.script Итак сначала заходим в файл alife_zaton(он находится в распакованном all.spawn) И добавляем в конец вот такие строки [1866] ; cse_abstract properties section_name = physic_object name = zaton_radio position = 131.13690185547,-6.1206126213074,177.25036621094 direction = 0,2.40000009536743,0
; cse_alife_object_physic properties physic_type = 0x3 mass = 10 fixed_bones = link Теперь сохраняем и можно собирать all.spawn он нам больше не нужен(не забывайте ставить его на место переименовывая из файла new в all) ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( Так теперь попорядку все объясню [1866] – номер секции, он не должен повторяться.Если у вас чистый all то номер будет 1866 ; cse_abstract properties section_name = physic_object name = zaton_radio – уникальное имя position = 131.13690185547,-6.1206126213074,177.25036621094 - координаты direction = 0,2.40000009536743,0
; cse_alife_object properties game_vertex_id = 296 – координаты вертикс distance = 0.400000005960464 level_vertex_id = 1189961 - координаты уровня object_flags = 0xffffff3a custom_data = < [logic] cfg = scripts\zaton_radio.ltx – путь к логике END
; cse_visual properties visual_name = dynamics\el_tehnika\priemnik_gorizont – путь визуалу модели ogf причем заметьте что ogf т.е. формат писать не надо
; cse_ph_skeleton properties skeleton_flags = 1
; cse_alife_object_physic properties physic_type = 0x3 mass = 10 fixed_bones = link Редактируем только те места которые я откоментировал!!!) ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) Так теперь самое главное… Логика Заходим в папку gamedata//configs//scripts создаём там файл zaton_radio.ltx и в нём пишем [logic] active = ph_sound
[ph_sound] snd = music_radio looped = false min_idle = 300 max_idle = 500 random = true Сохраняем… Теперь заходим в папку gamedata\\ sound\\ characters_voice\\scenario\\ и создаем там папку zaton_radio после чего кидаем в эту папку музыкальные файлы в формате ogg и назовем их примерно так: zaton_1, zaton_2, zaton_3, zaton_4, zaton_5(я написал только 5 названий песен, потому что вам для начало и 5 треков хватит) Все с музыкальными файлами закончили… Теперь открываем файл gamedata\\script\\sound_theme.script и в самом начале посли строчки theme = {} Пишем вот это:
ph_snd_themes = {}
ph_snd_themes["music_radio"] = { "characters_voice\\scenario\\zaton_radio\\zaton_5", "characters_voice\\scenario\\zaton_radio\\zaton_4", "characters_voice\\scenario\\za ton_radio\\zaton_3", "characters_voice\\scenario\\zaton_radio\\zaton_2", "characters_voice\\scenario\\zaton_radio\\zaton_1" } Сохраняем… После последней строчки ЗАПЯТУЮ СТАВИТЬ НЕ НАДО!!! Всё можно идти на и слушать радио (оно появится в скадовске на столе) (ТЕПЕРЬ ДЛЯ ТЕХ КТО ЕЩЕ НЕ ПОНЯЛ, СТРОКИ В ВИДЕ : "characters_voice\\scenario\\zaton_radio\\zaton_1" ЭТО СПИСКИ ПЕСЕН КОТОРЫЕ БУДЕТ ПРОИГРЫВАТЬ НАШЕ РАДИО) ВНИМАНИЕ: этот метод проверялся на чистом сталкере зов припяти версии 1.6.00 На некоторых модах может не работать из-за не совместимости
Создание спального мешка Сложность:Средняя
Для начала заходим в файл gamedata\configs\misc\items.ltx И в самый конец добавляем вот это: ; Спальник [spalnik]:identity_immunities discovery_dependency = $spawn = "food and drugs\antirad" $prefetch = 32 class = S_FOOD cform = skeleton ; eatable item eat_health = 0 eat_satiety = 0 eat_power = 0 eat_radiation = 0 eat_alcohol = 0 wounds_heal_perc = 0 eat_portions_num = 1 ; food item animation_slot = 4 ;hud item hud = wpn_vodka_hud
visual = dynamics\workshop_room\banka_kraski_1.ogf description = enc_spalnik inv_name = spalnik inv_name_short = spalnik_s inv_weight = 1 inv_grid_width = 2 inv_grid_height = 2 inv_grid_x = 14 inv_grid_y = 23 cost = 2200 Сохраняем… Теперь идём в файл bind_stalker.script и после строчек get_console():execute("snd_volume_eff 0") else пишем вот это: if (spalnik) then spalnik.use_inventory_item(s_obj) end --Idler используем спальник? end сохраняем… Теперь в папке gamedata\scripts создадим файл spalnik.script и в него впишем: --[[ File: spalnik.script rev: 12/10/09.01 Обработчик для спальника ]]
-- функции АМК function spawn_item_in_inv(spawn_item, npc) if npc==nil then npc=db.actor end return alife():create(spawn_item, npc:position(), npc:level_vertex_id(), npc:game_vertex_id(), npc:id()) end
-- функции спальника function use(s_obj) if not s_obj then return end if (surge_manager.actor_in_cover()) then ui_sleep_dialog.sleep() give_info("sleep_active") else news_manager.send_tip(db.actor, game.translate_string("st_spalnik_nosleep")) end
spawn_item_in_inv("spalnik") end
function use_inventory_item(s_obj) if s_obj and s_obj.section_name and s_obj:section_name()=="spalnik" then use(s_obj) end end все можно сохранять... Теперь идем в файл gamadata\configs\text\rus\st_items_equipment.xml И в конце перед строчкой вписываем вот это:
Спальный мешок
Спальный мешок
Походный спальный мешок. Пожалуй, самый удобный способ переночевать в Зоне. Но от радиации не спасёт, поэтому для ночевки нужно искать места по-укромнее. Например такие, где можно переждать выброс.
Сохраняем… Теперь идем в туже папку в файл ui_st_screen.xml и в конце перед строчкой пишем вот это:
В этом месте не заснуть. Нужно найти укрытие в котором можно переждать выброс.
Теперь идем в файл: Gamedata\configs\gamepley\character_desc_general.xml и там после строчки: stalker_outfit \n пишем: spalnik \n Сохраняем… Все можно заходить в игру и проверять…Спальный мешок появится у вас в начале новой игры!!! НО ЕСТЬ ДВА НЕДОСТАТКА!!!У СПАЛЬНОГО МЕШКА НЕТ ИКОНКИ ИНВЕНТАРЯ И У МОДЕЛЬ У НЕГО НЕ СПАЛЬНОГО МЕШКА, А БАНКИ КРАСКИ…ИКОНКУ СДЕЛАЙТЕ САМИ, ДУМАЮ ЗНАЕТЕ КАК, НУ А ЕСЛИ У ВАС И МОДЕЛЬ СПАЛЬНОГО МЕШКА ЕСТЬ ТО ЭТО ВООБЩЕ ОТЛИЧНО…ДУМАЮ КАК ЕЁ ВСТАВИТЬ ВЫ ТОЖЕ ЗНАТЕ… Так по моему не чего не забыл. НА ЧИСТОЙ ВЕРСИИ 1.6.00 ВСЕ РАБОТАЛО ОТЛИЧНО! Cпать можно только в тех местах где можно укрыться от выброса!
Учим новую группировку расговаривать и играть на гитаре Сложность:Низкая
Создали новую группировку, но все неписи новой группировки тупо молчат и не когда не играют на гитаре, так вот в этой теме я раскажу вам как заставить их это делать... Для этого нам понадобятся следующие файлы: gamedata\configs\misc\script_sound.ltx gamedata\configs\misc\script_sound_music_and_stories.ltx Итак начнём... Итак заходим в файл script_sound.ltx лестаем вниз и видим вот такие строки с названием группировок: avail_communities = stalker, bandit, dolg, freedom, army Теперь поставьте запятую и допишите свою группировку.получится примерно вот так: avail_communities = stalker, bandit, dolg, freedom, army, csky (У КАЖДОГО В КОНЦЕ БУДЕТ СВОЁ НАЗВАНИЕ ГРУППИРОВКИ, ПИШИТЕ ВНИМАТЕЛЬНО А НЕ ТУПО КОПИРУЙТЕ, а то ведь и такие бывают!!!) И так во всех таких строчках.... В файле script_sound_music_and_stories.ltx делаем все тоже самое) Вот и все)Теперь ваша группировка умеет рассговаривать и играть на гитаре)
1. Подготовте файлы: Возмите из чистого неба, папки creatures файл, например кошки (m_cat.ltx) Файл (из ЗП) creatures\monsters.ltx И возмите модельки, текстуры из оригинала ТЧ
1. Адоптирование конфига. Кошка. Вставляем в файл m_cat.ltx следующюю запись:
; ЗНАЧЕНИЯ visibility_threshold ДОЛЖНЫ БЫТЬ РАВНЫ для денжера и фри, ; иначе возникают артефакты с потерей видимости при переходе от денжера во фри.
[cat_vision_free] min_view_distance = 0.5 ; коэффициент, который множится на eye_range, в зависимости от угла max_view_distance = 1.0 ; коэффициент, который множится на eye_range, в зависимости от угла visibility_threshold = 100.0 ; значение, при достижении суммой которого объект считается видимым always_visible_distance = 0.3 time_quant = 0.001 decrease_value = 0.01 ; значение, на которое уменьшается вес, если объект попал в фрустум, но отсёкся по каким-то причинам velocity_factor = 0.5 luminocity_factor = 0.5 ; фактор освещения (только для Актёра) transparency_threshold = 0.25
[cat_vision_danger] min_view_distance = 0.5 ; коэффициент, который множится на eye_range, в зависимости от угла max_view_distance = 1.0 ; коэффициент, который множится на eye_range, в зависимости от угла visibility_threshold = 100.0 ; значение, при достижении суммой которого объект считается видимым always_visible_distance = 0.3 time_quant = 0.001 decrease_value = 0.01 ; значение, на которое уменьшается вес, если объект попал в фрустум, но отсёкся по каким-то причинам velocity_factor = 0.5 luminocity_factor = 0.5 ; фактор освещения (только для Актёра) transparency_threshold = 0.25
; ЗНАЧЕНИЯ visibility_threshold ДОЛЖНЫ БЫТЬ РАВНЫ для денжера и фри, ; иначе возникают артефакты с потерей видимости при переходе от денжера во фри.
[izlom_vision_free] min_view_distance = 0.4 ; коэффициент, который множится на eye_range, в зависимости от угла max_view_distance = 1.0 ; коэффициент, который множится на eye_range, в зависимости от угла visibility_threshold = 100.0 ; значение, при достижении суммой которого объект считается видимым always_visible_distance = 0.3 time_quant = 0.001 decrease_value = 0.01 ; значение, на которое уменьшается вес, если объект попал в фрустум, но отсёкся по каким-то причинам velocity_factor = 0.5 luminocity_factor = 0.5 ; фактор освещения (только для Актёра) transparency_threshold = 0.25
[izlom_vision_danger] min_view_distance = 0.4 ; коэффициент, который множится на eye_range, в зависимости от угла max_view_distance = 1.0 ; коэффициент, который множится на eye_range, в зависимости от угла visibility_threshold = 100.0 ; значение, при достижении суммой которого объект считается видимым always_visible_distance = 0.3 time_quant = 0.001 decrease_value = 0.01 ; значение, на которое уменьшается вес, если объект попал в фрустум, но отсёкся по каким-то причинам velocity_factor = 0.5 luminocity_factor = 0.5 ; фактор освещения (только для Актёра) transparency_threshold = 0.25
2. Вписка в список читаемых файлов
В файл monsters.ltx вписываем строчку #include "m_cat.ltx" - если добавили кошку #include "m_fracture.ltx" - если добавили излома Обе строчки если добавили и кошку и излома
3. Добавление моделек и текстур Модельки кошки поместить в meshes\monsters\cat излома в meshes\monsters\izlom Текстуры поместить в папку textures\act
Получились сквады: simulation_izloms_mix - Среднее число изломов и simulation_izloms_pisec Огромное число изломов (до 20 штук) Эти сквады можно поставить на карты.
Все! Можно играть. [img]http://s60.radikal.ru/i167/1006 /75/bcaa0af3e66b.jpg[/img] В конец файла m_facture.ltx впиши:
Нам нужны следующие файлы: - \configs\creatures\spawn_sections_zaton.ltx - \configs\gameplay\npc_profile.ltx - \Configs\gameplay\charecter_desc_zaton.ltx - \scripts\db.script И создадим сами файлы - \scripts\npc.script - \configs\sripts\snaiper_lg.ltx
- Для начала создадим нашему неписю логику(( после мы её сможем часто пользоваться).
- Для этого заходим в \configs\sripts\snaiper_lg.ltx И там вбиваем следующие строки:
[logic] active = remark1 danger = danger_ignore anim = desk_idle
Теперь всё по порядку: [[logic]– обозночает, что это функция логики active = remark1- функция его действий danger = danger_ignore – можно ли рядом достать оружие anim = desk_idle- анимка, но вроде не влияет
[danger_ignore] ignore_distance = 5 – на сколько близко можно махать стволом
[remark1] invulnerable = true - бессмерте. True-бессмертный, false- смертный no_move = true (будет стоять на месте) или false что б ходил meet = meet_guide название функции
[meet_guide] сама функция close_anim = nil- анимка при прощании close_victim = nil- вроде анимка при встречи far_anim = nil far_victim = nil close_distance = 0 far_distance = 0 close_snd_distance = 3- на каком расстоянии будет слышен звук приветствия abuse = false- вроде разрешение говорить use = {=actor_enemy} false, true- ? allow_break = false- ? meet_on_talking = false –говорить можно(диалог) meet_on_talking = false- говорить можно(диалог)
Теперь заходим в \configs\creatures\spawn_sections_zaton.ltx После
$spawn = "respawn\snaiper"- респавн character_profile = snaiper spec_rank = master ранг community = stalker группировка( здесь роли не играет custom_data = scripts\snaiper_lg.ltx Логика, которую мы создали story_id = stalker_snaiper - уникальный ID , не знаю но вроде что-то про квесты
Тепрь заходим в - \configs\gameplay\npc_profile.ltx И в самый конец ( перед хмл)пишем
Где: <specific_character id="snaiper" team_default="1"> - ID <name>Дрюня</name> -имя <icon>ui_inGame2_merc_4</icon>- иконка <map_icon x="1" y="0">- иконка на карте </map_icon>-? <bio>Опытный сталкер. Детальная информация отсутствует.</bio> в игре не используется
Теперь создаём скрипт спавна - \scripts\npc.script Вбиваем в него
function snaiper () if not db.actor:has_info("spawn_snaiper") then
alife():create("snaiper",vector():set(116.238,2.250,183.199),1165999,316) db.actor:give_info_po rtion("spawn_snaiper") end end
Строчка alife():create("snaiper",vector():set(116.238,2.250,183.199),1165999,316) отвечает за координаты, на которых спавнится объект. В нашем случае- непись. Подробнее о них: Pos- 116.238,2.250,183.199 Ivid- 1165999 Gvid- 316
Чтобы их получить качаем позишн информер. - И последнее- регестрация скрипта в \scripts\db.script Открываем дБ скрипт. Находим строки
function add_actor( obj ) actor = obj actor_proxy:net_spawn( obj ) add_obj( obj ) end
И меняем на такие function add_actor( obj ) actor = obj actor_proxy:net_spawn( obj ) add_obj( obj ) npc.snaiper() end
Создаём новый квест Сложность:Сложная
icon - иконка квеста Пример использования: icon = ui_inGame2_Put_v_pripyat
prior - приоритет квеста Пример использования: prior = 112
storyline - флаг задания (true - сюжетное, false - несюжетное) Пример использования: storyline = true
title - название задание (id из xml) - если брать название не из xml, то в игре оно будет отображаться без пробелов Пример использования: title = zat_a9_way_gates_check_transport_workshop_name
descr - описание задания (id из xml) - если брать название не из xml, то в игре оно будет отображаться без пробелов Пример использования: descr = zat_a9_way_gates_check_transport_workshop_text
target - цель на карте (метка) Примеры использования: target =zat_a2_stalker_barmen (ID нпц, на которого будет поставлена метка) target = {+название_инфопоршня}zat_a2_stalker_barmen -- проверка инфопоршня, после которого метка будет поставлена на нпц
on_init - инфопоршень, который "включает" задание Пример использования: on_init = %+название_инфопоршня%
condlist_x -- блок условий. возможные значения complete, reversed, fail Примеры использования: condlist_0 = {+название_инфопоршня} complete - если поршень есть, задание выполнено condlist_1 = {+название_инфопоршня} reversed - если поршень есть, есть возможность повторить задание condlist_2 = {+название_инфопоршня} fail - если поршень есть, задание провалено
on_complete - действия, которые выполняются, если задание выполнено on_reversed - действия, которые выполняются, если задание провалено Примеры использования: on_complete = %=inc_faction_goodwill_to_actor(stalker:200)% -- повышаем репу у сталкеров (функция юзаются из xr_effect) on_reversed = {+название_ифопоршня} %=inc_faction_goodwill_to_actor(stalker:200)% -- повышаем репу у сталкеров, только если есть опр.инфопоршень on_complete = %+название_инфопоршня% -- выдаем инфопоршень
reward_money - денежная награда Пример использования: reward_money = 5000
Далее добавляем наши диалоги Бороде. Открываем файл character_desc_zaton.xml Находим строчку <actor_dialog>zat_a2_stalker_barmen_actor_info</actor_dialog> и под ней пишем Код <actor_dialog>vodka_quest_dialog</actor_dialog> <actor_dialog>vodka_quest_prines</actor_dialog>
Сохраняем
Инфопоршни и скриптовые функции Открываем файл info_zaton.xml и добавляем перед </game_information_portions>: Код <info_portion id="quest_vodka_give"></info_portion> <info_portion id="quest_has_vodka"></info_portion> <info_portion id="quest_vodka_done"></info_portion>
Открываем файл dialogs_zaton.script и в начало записываем: Код function give_vodka_quest() task_manager.get_task_manager():give_task("quest_vodka_give") end function is_has_vodka_borode() if db.actor:object("vodka") then return true end return false end function transfer_vodka_to_boroda(first_speaker, second_speaker) dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "vodka") end
Сохраняем
Сам квест Открываем файл tm_zaton.ltx и в конец пишем: Код [quest_vodka_give] icon = ui_inGame2_Put_v_pripyat prior = 2 storyline = false title = {=actor_has_item(vodka)}vodka_barmen_prinesti_name, vodka_barmen_naiti_name descr = vodka_barmen_descr target = {=actor_has_item(vodka)}zat_a2_stalker_barmen condlist_0 = {+quest_vodka_done} complete
Открываем файл st_quests_zaton.xml и добавляем после <string_table> Код <string id="vodka_barmen_naiti_name"> <text>Найти водку для бармена</text> </string> <string id="vodka_barmen_prinesti_name"> <text>Принести водку бармену</text> </string> <string id="vodka_barmen_descr"> <text>Бармен в тестовых целях попросил найти и принести ему 2 бутылки водки</text> </string>
Спавн предметов Сложность:Средняя
Для начала попробуем заспавнить что-нибудь……например…… О, вертолёт !!!!
Что для этого нам нужно ?
* 1)ACDC для ЗП * 2)Activeperl 8.7. * 3)Распакованная игра (CoP)
Начнём:
Поместим файл All.spawn(который находится по адресу: Gamedata\spawns) в папку с 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
Помните !!!!! Всё должно быть по порядкку !!!!!Если перед этим номер скрипта был допустим [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 -- поворот верталёта
Пока-что нету(Но если что придумаю сразу напишу) Зашитим МоНоЛиТ братья!!! [Танковый Клан "Celestial Warriors". Позывной: Zmax_111. Должность: Глава Клана]