Тут будут собраны некоторые маленькие уроки. Простые и сложные. Каждому начинающему модостроителю будет позео здесь побывать... уроки взяты с АМК team сайта Как отослать сообщение Меченому на ПДА
Сложность: Легко Файлы:Любой стандартный диалог
1.Создаём файл ваше_название_скрипта.script в папке gamedata/scripts и пишем в него:
Код
Code
function ваш_текст(first_speaker, second_speaker) news_manager.send_tip(db.actor, "%c[255,255,128,128]ПРИМЕР:\n%c[default]ВАШ ТЕКСТ", nil, nil, 30000) end
news_manager.send_tip - это сама функция, которая отсылает сообщение.
"%c[255,255,128,128] - это цвет сообщения, идет по моему по цветам RGB.
%c[default] - это конец кода цвета сообщения, дальше текст идёт в стандартном цвете.
\n - это перенос на другую строчку.
2.В любой диалог пишем функцию:
ваше_название_скрипта.ваш_текст
Например в dialogs_trading.xml в диалоге doctor_dialog_start после фразы doctor_dialog_start_13 Пишем ваше_название_скрипта.ваш_текст
Теперь после того как поговорите с Доктором (NLC5) на ПДА придёт сообщение с вашим текстом.
Создание тайника
Сложность: Средне Файлы:spawn_sections.ltx,devices.ltx,любой стандартный диалог. Для того, чтобы замерить координаты можно воспользоватся аддончиком Position Informer. (В теме инструментарий для мододелов)
1.Создаём файл ваше_название_скрипта.script в папке gamedata/scripts и пишем в него:
Код function ваше_название_функции() $$$НАЗВАНИЕ ФУНКЦИИ$$$ alife():create(section,position,levelvertex,gamevertex) $$$ЭТО ТОЧКА ГДЕ СПАВНИТСЯ ПРЕДМЕТ$$$ end
2.В папке config/scripts создаём файл m_taynik.ltx и пишем в него: Код [spawn] $$$ Это то, что появится в тайнике $$$ предмет предмет предмет предмет предмет
3. Открываем файл spawn_sections.ltx из папки gamedata/config/creatures и пишем:
Например в dialogs_trading.xml в диалоге doctor_dialog_start после фразы doctor_dialog_start_13 Пишем ваше_название_скрипта.ваше_название_функции
Теперь после того как поговорите с Доктором (NLC5) по заданным координатам появится рюкзак.
Как прописать свои тексты в игру
Сложность:Легко Допустим вы захотели написать много диалогов, и не хочется их писать в оригинальные файлы. Делаем так: 1. Открываем localization.ltx и прописываем в самый конец: Код ваш_файл_текстов
2. Создаём ваш_файл_текстов в папке "gamedata/config/text/rus/" и пишем в них диалоги/описания/любые тексты по анологии с другими файлами в папке "rus"
Выводим часы на HUD Автор: steelrat
Для этого нам понадобятся стандартные файлы: config/ui/ui_custom_msgs.xml scripts/bind_stalker.script
Инструкция:
Сложность: Легко
1. Создаём файл ваше_название_скрипта.script в папке gamedata/scripts и пишем в него:
Код function show_time() local hud = get_hud() local cs = hud:GetCustomStatic("hud_show_time") if cs == nil then hud:AddCustomStatic("hud_time_static", true) hud:AddCustomStatic("hud_show_time", true) cs = hud:GetCustomStatic("hud_show_time") end
local time_h = level.get_time_hours() local time_m = level.get_time_minutes() local msg if time_m >= 10 then msg = string.format(" %02d:%02d\n", time_h, time_m) else msg = string.format(" %02d:%02d\n", time_h, time_m) end
if cs ~= nil then cs:wnd():SetText(msg) end end
2. Далее открываем файл ui_custom_msgs.xml в config/ui/ и пишем туда:
Код Time ui_hud_frame_clock
3. Открываем файл bind_stalker.script и пишем после:
Код function actor_binder:update(delta) object_binder.update(self, delta) local time = time_global() game_stats.update (delta, self.object)
следущее: ваше_название_скрипта.show_time()
Эффект критического раненния:
1. Создаем файл effect_blood.script и записываем туда следущее: Код
Code
lite_treshold = 0.05 -- насколько должно уменьшиться здоровье с предыдущего обновления чтоб экран окрасился в красный crit_treshold = 0.30 -- насколько должно уменьшиться здоровье с предыдущего обновления чтоб ГГ начало шатать drop_item_on_crit_prob = 0.20 -- вероятность того что ГГ выронит оружие effector_power_coeff = 0.7 prev_health = -1 chk_h_t = 0
function wounded_pp_update() if (chk_h_t or 0) < time_global() then chk_h_t = time_global()+1000 if prev_health > (db.actor.health + lite_treshold) then level.add_pp_effector("fire_hit.ppe", 2011, false) local effector_power = (prev_health - db.actor.health)*100*effector_power_coeff level.set_pp_effector_factor(2011, effector_power) if prev_health > db.actor.health + crit_treshold then level.add_cam_effector("camera_effects\\fusker.anm", 999, false, "") local snd_obj = xr_sound.get_safe_sound_object([[actor\pain_3]]) snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0) if math.random() < drop_item_on_crit_prob then local active_item = db.actor:active_item() if active_item and active_item:section() ~= "bolt" and active_item:section()~= "wpn_knife" then db.actor:drop_item(active_item) end end end end prev_health = db.actor.health end end
2. Далее открываем bind_stalker.script: после строчек: Код
Code
function actor_binder:update(delta) object_binder.update(self, delta) local time = time_global() game_stats.update (delta, self.object)
пишем: effect_blood.wounded_pp_update()
Спавн ГГ на другой локации Автор: WAWKA
Вымешайте свои уроки и найденые в интернете . По мере чем уроков больше тем шапка и шире!
Чтобы ГГ заспавнить в другом месте, надо его секцию: Код
Code
[63] ; cse_abstract properties section_name = actor name = level_prefix_actor_0001 position = -246.726303100586,-24.7932605743408,-134.433868408203 direction = 0.00431653670966625,-1.39625442028046,-0.00068671052576974 s_flags = 0x29
Удалить из alife_l01_ecape.ltx и поместить в файл того уровня, в который необходимо. Прописать новые координаты не только в строках: position game_vertex_id level_vertex_id Но и в upd:position (взять из строки position). И все дела.
Это тема для выкладывания уроков, а не стол заказов и не "вопроссница"!
Создание на лету рабочих аномалий, вертолётов, переходов между уровнями, рестрикторов, точек воспроизводства и других объектов, конструктор которых задаёт не все необходимые для полноценного функционирования параметры.
Автор: bardak [spoiler]Идея проста.
1) Создаём объект стандартным методом: local obj = alife():create(...)
2) Создаём экземпляр класса net_packet: local packet = net_packet()
3) Сохраняем состояние объекта в пакет: obj:STATE_Write(packet)
4) Считываем _все_ сохраняемые свойства в переменные: local property1 = packet:r_u32() ... local propertyN = packet:r_float()
5) Записываем эти переменные опять, меняя или дополняя необходимые параметры: packet:w_u32(property1) ... propertyN = new_value packet:w_float(propertyN)
6) Считываем модифицированное состояние объекта: packet:r_seek(0) obj:STATE_Read(packet, packet:w_tell())[/spoiler]
Создание НПС "привязанного к точке" без редактирования all.spawn Автор: меченый(стрелок) Создание Снайпера
[spoiler]*1 Для начала создадим профиль! Откроем фаил character_****.xml и создаем там новый профиль Пример: <specific_character id="название_секции" team_default = "1"> <name>GENERATE_NAME_stalker</name> <icon>иконка</icon> <map_icon x="1" y="0"></map_icon> <bio>Опытный сталкер. Детальная информация отсутствует.</bio>
<class>класс</class> <community>группировка</community> <terrain_sect>stalker_terrain</terrain_sect> <snd_config>characters_voice\human_01\папка с названием группировки\</snd_config>
<rank>цифры от 0 до 900</rank> <reputation>цифры от 0 до 1000</reputation>
<visual>путь до модели"визуала"</visual> <supplies> [spawn] \n оружие \n патроны к этому оружию = 5 \n </supplies> #include "gameplay\character_criticals_4.xml" #include "gameplay\character_dialogs.xml" </specific_character>
*2 Теперь нужно прописать класс нашего НПС в npc_profile.xml Пример: <character id="название_секции из character_****.xml"> <class>класс прописанный вами ранее</class> <specific_character>название_секции из character_****.xml</specific_character> </character>
*3 Теперь зарегистрируем Нашего НПС в spawn_section.ltx Пример: [секция спавна(название пишите сами)]:stalker $spawn = "respawn\секция спавна" character_profile = название_секции из character_****.xml spec_rank = regular ;это ранг непеся оставляйте как есть ,особой роли не играет community = группировка которую вы приписали этому (название_секции из character_****.xml) custom_data = scripts\sniper_addon\sniper_addon_***_logic.ltx;*** - если группировка НПС нейтральна к вам или дружелюбна ,то friend , в противном случае enemy
*4 Потом открываем xr_conditions.script и добавляем вот такую функцию function is_sniper_enemy(enemy, object) return enemy:id() ~= db.actor:id() end PS:Если нет такого фаила ,то возьмите из оригинальной Игры!
*5 Теперь осталось Заспавнить Нашего НПСа PS:Тем кто делает это впервые ,прочитайте дальше :),а если сталкивались ,всё равно читайте
*5.1 Для Начала нам нужно снять координаты того места Где появится наш Снайпер. Для этого открываем 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 И в конец фаила.В Самый Конец!!! 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 Сохраняем!!! *5.2 Заходим в игру ,добегаем до места где бы хотели чтобы сидел снайпер,выходим в Меню и в меню жмём на W , потом возвращаемся в игру И Делаем скриншот (F12) *5.3 Далее создаём скрипт спавна (создаётся с помощью блокнота или Notepad++) Например sniper_add.script В нём будем писать функции! function start_add_spawn()--\\*Это "список".Сюда будем вписывать вызов всех функции спавна --\\*Сюда вписываем название ваших функций --пример: spawn_sniper_one() end
function название_латиницей()--\\spawn_sniper_one() local x= смотрим скриншот и переписываем сюда x local y= смотрим скриншот и переписываем сюда y local z= смотрим скриншот и переписываем сюда z local level_vertex= смотрим скриншот и переписываем сюда level_vertex local game_vertex_id= смотрим скриншот и переписываем сюда game_vertex_id alife():create("тут название вашей из spawn_section.ltx",vector():set(x,y,z),level_vertex,game_vertex_id) end
function save_variable(variable_name, value) xr_logic.pstor_store(db.actor, variable_name, value) end function load_variable(variable_name, value_if_not_found) return xr_logic.pstor_retrieve(db.actor, variable_name, value_if_not_found) end
*5.4 Когда вписали всех наших Снайперов и все функции спавна и внесли их в "список",то добавляем вызов нашей функции в bind_stalker.script
в функцию actor_binder:update(delta) перед последнем end'ом этой функции добавляем if sniper_add.load_variable("spawn_sniper",false)==false then sniper_add.start_add_spawn() sniper_add.save_variable("spawn_sniper",true) end
Сохраняем!
*6 Теперь работаем с логикой. в папке configs/scripts создаём папку с sniper_addon , открываем её *6.1 Создаём два фаила sniper_addon_friend_logic.ltx и sniper_addon_enemy_logic.ltx *6.2 открываем sniper_addon_friend_logic.ltx и вписываем туда: ;SNIPER ADDON ;Меченый(Стрелок) [logic] active = remark@search
Строго говоря, их две: create create_ammo но различия между ними не существенны. Imp 22:45, 23 июля 2007 (EEST)
Первый параметр - секция в конфигурациях, описывающая объект, например "bolt","med_kit" - это простые секции, простых объектов а есть объекты, которые переходят в онлайн/оффлайн, это неписи, монстры и так далее, например mil_killer_respawn_2 - спавнится снайпер группировки киллеров.
С позицией, думаю объяснять не надо, только существует нюанс - высота это Y, а не Z. Задать позицию можно такой конструкцией vector():set(x,y,z), где x, y и z - координаты точки на уровне, где спавним объект.
Вертекс в игре Сталкер не тоже самое, что вертекс в трехмерной графике. Vertex - определенная зона малого размера за которой закреплен индивидуальный номер в пределах уровня или целой игры. level_vertex определяет зону на уровне, по которой можно пройти NPC. game_vertex определяют зоны для свободного хождения, т.е. под руководством ИИ, а также между уровнями. Вертексы имеют одно из первостепенных значений. Точность положения указывается уже через точку спавна. Например, можно получить вертекс ближайший к актору - db.actor:level_vertex_id()
game_vertex_id нужен для того, чтобы указать на какой карте спавнить объект.
Соответственно, чтобы заспавнить что-нибудь на другой карте, достаточно указать game_vertex_id в четвертом параметре Например:
db.actor:game_vertex_id()
Итак, чтобы, например, заспавнить болт под ногами актора, пишем:
Почему 1, а не level_vertex_id? Проверено - разницы особой нет, какой level_vertex_id, хотя в некоторых случаях надо прописывать валидный вертекс, а то предмет может просто заспавнится не там, где планировалось... Но по большей части все проходит нормально и с единицей. (Игнорирование level_vertex_id может приводить к проваливанию произведенных предметов/персонажей под землю.) А вот game_vertex решает все - он указывает на каком уровне спавнить предмет, поэтому его надо указывать. Теоретически можно просто найти для каждого уровня по одному game_vertex'у и использовать их в скриптах. На самом деле game_vertex показывает какой фрагмент карты используется (вся карта разбита на кусочки имеющие сквозную нумерацию по всем уровням и game_vertex выбирает нужный) соответсвенно неправильное использование черевато....
Кроме того - есть еще один параметр - ID объекта, если указать ID NPC или актора - то предмет заспавнится у него в инвентаре.
Пример (спавним артефакт Медуза в инвентаре у актора):
Функция спавна возвращает серверный объект, то есть ни NPC, ни монстра ни что-либо еще.
Серверный обьект позволяет свеже созданного NPC или тайник затарить разными рулезами/артефактами. Например, вот так создадим перед входом к Сидоровичу долговца и засунем в него пачку патронов:
local obj local a = vector() -- Задаем тип переменной local dir = db.actor:direction()
a.x = -243.61 -- координата X a.y = -19.52 -- высота Y a.z = -127.17 -- координата Z
obj = alife():create("bar_dolg_respawn_3", a, 13193, 8, 65535) alife():create_ammo("ammo_9x18_fmj", obj.position, obj.m_level_vertex_id, obj.m_game_vertex_id, obj.id, 20) -- число патронов
Кстати, create_ammo - практически тоже самое, что и create, разница в том, что create_ammo предназначена специально для спавна патронов и позволяет создавать неполные пачки патронов. Возможно есть еще какие-то отличия. Стоит учесть, что сами авторы игры спавнят патроны исключительно через create_ammo. Imp 22:38, 23 июля 2007 (EEST)
Просто минимальный набор - координаты, ID, секция,а из него (серверного объекта) обычно нужен только ID, так как по ID можно получить этот самый серверный объект:
(alife():object(id))
Его можно использовать, чтобы поставить метку, например, но я его лично использую для других целей - спавн сложных объектов, конкретно – NPC.
Например надо решить следующую задачу - надо создать наемника, сменить ему группировку и изменить его инвентарь, ну и в нагрузку - сделать другом для игрока.
В определенный момент заспавненый объект переходит онлайн, в этот момент вызывается callback - net_spawn.
Что мы делаем? Сверяем ID онлайн объекта с сохраненным ID!
Если они совпадают, например так:
if obj:id()==saved_id then ...
Важно то, что у серверного объекта ID - это параметр, а у онлайнового объекта ID получается с помощью функции. Это важно, а то можно прогореть.
Итак, мы поймали нашего киллера по ID.
Далее все очень просто - вызываем команды для спавна гаусса и патронов к нему в инвентаре NPC (см. выше), меняем группировку специальной функцией, и делаем его другом.
Зачем такие сложности? Просто в оффлайне NPC как бы не существует, есть только косвенное упоминание о нем, и, плюс, все эти функции работают именно с объектом типа "NPC", а не с серверными объектами.
Более простая функция спауна в одну строчку: Пример: alife():create("stalker",vector():set(0,0,0),1,135) -- спаунит сталкера на водокачке. (Игра ЧН, на уровне Болото)
alife():create(section,position,levelvertex,gamevertex) section - это секция предмета position - Это его позиция (Через vector()) Брать в игре с помощью консольной команды rs_stats 1 или rs_cam_pos 1 (Тока в ЧН) levelvertex - Пусть равно 1 gamevertex - Его Game Vertex, определяет уровень где будет спаун. GV можно взять либо скриптом, либо через распакованный all.spawn.
[править] Практика (часть 1)
1. Чтобы не повторяться в описании создания нового квеста, просто изучите статью по созданию квестов от Fr3nzy – лучшей статьи на эту тему я просто не видел Мы просто свяжем все воедино и научимся спавнить объекты из скрипта.
Небольшое отступление:
Почему предпочтительнее делать спавн скриптом, а не через тот же xrSpawner? Программа xrSpawner, при всех своих достоинствах, обладает одним недостатком, а именно – она делает спавн через файл all.spawn, что приводит к:
* Невозможности совместить два мода, такой спавн использующих * Необходимости каждый раз начинать новую игру
При спавне через скрипт ситуация иная: в подавляющем большинстве случаев, ранее сохраненные игры будут работать, что не может не радовать
Итак, определимся с квестом.
Задача: после разговора с Сидоровичем спавним зомби на территории фабрики в первой локации. Для того, чтобы не повредить оригинальный сюжет игры, задание будет выдаваться после прохождения квеста с флешкой Шустрого, так как появись там зомби одновременно с бандитами и Шустрым... я думаю, исход боя предрешен
Реализация: Постараюсь описать все действия максимально подробно, буквально по шагам. Первым делом запустите игру
В консоли введите команду:
rs_stats on или rs_stats 1
Тем самым мы включаем вывод информации на экран. Далее вводим еще одну команду:
demo_record 1
И «летим» на фабрику. Нам нужно выбрать место для спавна объектов и данный режим как нельзя лучше подходит для реализации задуманного. Помещаем камеру в точке предполагаемого спавна и записываем координаты - у меня получились 115, -6, -16.
Для выхода из режима demo_record нажимаем Esc, в консоли пишем rs_stats off или rs_stats 0 (убираем вывод информации).
Другой способ получения тех же сведений - прийти в нужное место и запустить там скрипт, который выдаст все нужные координаты. Я пользуюсь следующим скриптом (вызываю общеизвестным способом, через main_menu):
function main_menu:main_cheat_f3() -- Выдадим сообщение о нашем местоположении local text local vid local gvid local a = vector() -- Тип переменной local text
a = db.actor:position() -- Наше положение в координатах vid = db.actor:level_vertex_id() gvid = db.actor:game_vertex_id() text = "Позиция:\\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
В результате не нужно эксперементировать мы сразу получаем все, в том числе и level_vertex и game_vertex. Imp 22:38, 23 июля 2007 (EEST)
Выходим из игры, идем в папку с установленной игрой и создаем каталог gamedata (предполагается, что «лепим» свой «мод» на «чистую» игру, без установленных модов, и имеем распакованные ресурсы игры в папке, скажем, gamedata source).
В папке gamedata создаем папку config, а в ней - папку creatures. Скопируем из оригинальной папки файл m_zombie.ltx и откроем его на редактирование.
В файлах игры присутствуют 5 моделей гражданских зомби:
2. Пишем скрипт спавна. В папке gamedata создаем новую папку scripts, в ней создаем новый текстовый документ и называем его esc_zombie.script.
Отступление третье:
При написании статьи использовался оригинальный скрипт zombie_story.script из horror-mod’а. Концепция спавна перенесена практически без изменений, поэтому на авторство этого способа спавна я никоим образом не претендую
Итак, открываем наш пустой файл на редактирование, первой строкой объявляем переменную, в которой хранятся наши зомби:
local zombie_types = {"zombie_weak", "zombie_normal", "zombie_strong", "zombie_immortal", "zombie_ghost"}
Далее пишем функцию:
function spawn_zombies( position, total ) local zombie_index -- тип зомби из массива zombie_types local new_pos, x_offset, z_offset -- объявляем переменные for zombie_index=1, total do -- крутим цикл столько раз, сколько задает переменная total x_offset = math.random(5) -- случайное (рандомное) x от 1 до 5 z_offset = math.random(5) -- случайное (рандомное) z от 1 до 5 new_pos = position -- передаем координаты в функцию new_pos.x = new_pos.x + x_offset -- прибавляем к указанной нами координате x полученное выше рандомное x new_pos.z = new_pos.z + z_offset -- прибавляем к указанной нами координате z полученное выше рандомное z -- Ниже, собственно и вызывается функция спавна случайного типа зомби zombie_types[math.random(5)] привязанного к нашим координатам alife():create(zombie_types[math.random(5)],new_pos,db.actor:level_vertex_id(),db.actor:game_vertex_id()) end end
И последнее:
function zombie_story_1( actor, npc ) -- десять зомби на фабрике (Кордон) local spawn_point = vector():set( 115, -6, -16 ) -- здесь указываем координаты, выбранные нами для спавна, когда «летали» камерой spawn_zombies( spawn_point, 10 ) -- собственно вызов предыдущей функции с передачей ей координат и количества объектов end
Все. Сохраняем и закрываем файл.
Продолжаем разговор
Для того, чтобы игра не вылетала после того, как мы добавили новый тип монстров, их нужно добавить в файл xr_statistic.script. Итак, скопируем этот файл из папки игры scripts в нашу папку к файлу esc_zombie.script и откроем на редактирование.
Добавим в local killCountProps к монстрам строчку:
elseif npc:character_community() == "zombie" then community = "zombie"
Сохраняем изменения и закрываем файл.
Все будет работать на ура, пока мы не попробуем обыскать убитого зомби. Как только мы это сделаем, игра вылетит с примерно такой ошибкой.
Expression : fatal error Function : CInifile::r_string File : D:\xray-svn\xrCore\Xr_ini.cpp Line : 351 Description : <no expression> Arguments : Can't find variable icon in [zombie_weak]
Все верно – игра не знает какую иконку нам показывать для зомби. Иконки монстров хранятся в файле ui_npc_monster.dds. Здесь есть два варианта:
* Если дружите с Фотошопом, отредактировать этот файл (нарисовать, добавить иконки); * Взять готовый из любого мода, естественно, с разрешения авторов мода. Сейчас мы пропустим данный аспект и присвоим нашим зомби иконки контролера
Вернемся к файлу m_zombie.ltx и в секцию [m_zombie_e]:monster_base впишем параметр
icon = ui_npc_monster_kontroler
Все. Вылетов не будет.
3. Тема данной статьи не предусматривает подробного описания того, как сделать новый диалог. В начале статьи я упомянул источник, где можно найти исчерпывающую информацию по созданию диалогов, могу также привести в пример статью по созданию диалогов от BAC9-FLCL.
Нам нужно просто проверить работоспособность скриптового спавна, поэтому я приведу просто собственно сам измененный диалог из файла dialogs_escape.xml:
И также связанный с ним файл stable_dialogs_escape.xml. В самом начале файла пишем следующее:
<string id="escape_trader_talk_info_7770"> <text>Происшествий никаких не было?</text> </string> <string id="escape_trader_talk_info_7771"> <text>Да знаешь... Вроде как тихо все у нас. Хотя, вот, вспомнил! Говорили мне на днях, что на фабрике, ну, там, где бандюки околачиваются постоянно, видели какиих-то то ли людей, то ли призраков... Мало ли что спьяну почудится - я и сказал этим паникерам, мол, закусывать надо! Хех, блин, алкаши...</text> </string> <string id="escape_trader_talk_info_7772"> <text>Дык мне по любому мимо фабрики топать - заодно и посмотрю на этих "людей-призраков".</text> </string> <string id="escape_trader_talk_info_7773"> <text>Да я как-то не собирался в ту сторону...</text> </string> <string id="escape_trader_talk_info_7779"> <text>Ну, смотри сам, все равно будь осторожен.</text> </string> <string id="escape_trader_talk_info_7777"> <text>Ага. Сходи, проветрись. Потом зайдешь, расскажешь, что там и как.</text> </string> <string id="esc_bridge_soldiers_start_11"> <text>Здесь проход воспрещён, сталкер.</text> </string>
Все. Можно запускать игру, идти на Кордон, после разговороа с Сидоровичем, в зависимости от выбранного Меченным решения, бежим на фабрику и … смотрим сами
Готовые файлы примера(перезалито) Spawn Lib
Домашнее задание - вернуть в игру 6-ой тип гражданского зомби
Продолжение следует… [править] Практика (часть 2)
4. Сегодня мы закончим с зомби в полном объеме – добавим их описания в энциклопедию, добавим иконки, и разберемся с «домашним заданием»:) Думаю, что внимательно изучив эту статью, вы сами сможете через скриптовые функции восстановить любого персонажа, не вошедшего в финальный релиз игры. Если у кого хватит времени и желания, те могут даже написать что-то типа «Ночи живых мертвецов» - серию квестов, связанную своим собственным сюжетом. Итак, «домашнее задание» - добавляем в игру шестого зомби.
* Создаем в папке gamedata папку meshes, в ней папку monsters, а там – папку zombi. В папке meshes хранятся модели персонажей, объектов, окружения, присутствующих в игре. Как я уже говорил выше, в игре представлено 5 моделей гражданских зомби, а вот текстур – 6. Также немного смутила нумерация моделей – 1, 2, 4... А где третий? Наверное, сбежал
* Скопируем из папки с оригинальными файлами игры в созданную нами папку zombi файл zombi_2.ogf и переименуем его в zombi_3.ogf. Откроем файл нашей новой модели любым HexEditor’ом, я использую BiEd (Binary Editor 1.00). Так как данная статья рассчитана не только на «продвинутых юзеров», но и на «обычных чайников», которые, тем не менее, хотят «что-нить замутить» и при этом не сильно «парить моск», я не буду рассказывать здесь про адресацию, двухбайтовую запись и т.д., я просто наглядно покажу, где что поправить
Файл модели до редактирования
Файл модели после редактирования
На скринах видно, что мы просто изменили для этой модели путь к текстуре. Все. Без использования 3D-редакторов и затраты кучи времени на обработку модели в них, мы получили абсолютно новую (на внешний вид) модель.
5. Теперь пропишем нашего нового зомби во все файлы, которые мы создали ранее. В файл m_zombie.ltx в самый конец добавляем секцию:
И в связанный с ним файл string_table_enc_mutants.xml в папке gamedata\config\text\rus\ добавляем:
<string id="Zombie"> <text>Зомби, гражданский</text> </string> <string id="Zombieg"> <text>Зомби-призрак, гражданский</text> </string> <string id="enc_mutant_zombieg_general"> <text>Зомби-привидение отличается от обычного зомби лишь тем, что воздействие Выжигателя мозгов полностью разрушило не только структуру личности, но и тело, поэтому зомби-призрак несколько более живуч по сравнению с обычным зомби.</text> </string> <string id="enc_mutant_zombie_general"> <text>Воздействие Выжигателя мозгов полностью разрушает структуру личности, оставляя только телесную оболочку.\n\n Побродив немного по Зоне, лишённые разума тела начинают превращаться в настоящих зомби. Из рефлексов у них остаются лишь самые примитивные, оружие и экипировка скоро приходят в негодность. В результате зомби становятся собой ни чем иным, как медлительными полутрупами, которых наличествуют лишь два эффективных раздражителя: еда и сон. Зомби совершенно неразборчивы в выборе пищи и питья, поэтому их тела буквально пропитаны радиацией и токсинами. Как правило, эти существа бесцельно бродят по Зоне или, словно трупы, валяются внутри заброшенных построек. Однако, лишь только зомби почует близкое присутствие живого человека, он сразу же пытается атаковать. Умудрённые опытом сталкеры стараются обходить эти неуклюжие опустошённые оболочки.</text> </string>
Копируем сюда же файл stable_statistic_caption.xml и изменяем в нем 3 строчки:
7. И последнее – добавим иконки. Скажу сразу, воспользовался готовым файлом, уже содержащим иконки зомби и других «восстановленных монстров» (спасибо Fr3nzy). Поэтому просто скопируйте файл ui_npc_monster.dds из архива в папку gamedata\textures\ui\, а файл ui_npc_monster.xml – в папку gamedata\config\ui\. Если вы хотите сделать собственные - прочитайте урок по изменению текстур.
Вкратце, что описывает файл ui_npc_monster.xml: в нем задаются координаты иконок, расположенных в файле ui_npc_monster.dds, применительно к каждому типу монстров в игре.
Заключительный штрих. Откройте файл m_zombie.ltx и в первой секции замените строку
icon = ui_npc_monster_kontroler
На:
icon = ui_npc_monster_zombie
В секцию [zombie_ghost] добавьте строку:
icon = ui_npc_monster_zombieg
Сохраняйте изменения. Всё.
Вот готовые файлы примера. Удачи и спасибо за внимание [править] Спавн NPC
Эта часть статьи написана Arhet и создана на примере того, как в SRP Mod были созданы NPC группировки "Грех".
<class>esc_dark_stalker_01</class> - вот тут наш новый класс кстати. <community>dark_stalker</community> <terrain_sect>stalker_terrain</terrain_sect> <money min="200" max="600" infinitive="0"></money>
Теперь надо заняться spawn_sections.ltx. Скрипт будет «брать NPC» как раз из этого файла. Пишем туда:
* [esc_dark_stalker_1]:stalker – имя секции для скрипта.. * $spawn = "respawn\esc_dark_stalker_1" * character_profile = esc_dark_stalker_1 – ссылка на описание нашего NPC * spec_rank = regular – спец ранг * community = dark_stalker – группировка.
Теперь берем любой скрипт спавна NPC, вгоняем туда имя секции из spawn_sections.ltx и ву-а-ля.
Тока забыли что данному НПС будет присвоенная дефолтовая логика (т.е. тупо хожу куда сам не знаю) забыли упомянуть про (ххх - лока): ххх gulag.script (действия НПС! Где можно: где можно присвоить статус кампера; волкера; и.д.т) ххх gulag.ltx (дублер логики т.е. дублирует кратко действия НПС) [/spoiler]
[spoiler]Инструкция по добавлению анимок: Нужны два скрипта: state_mgr_animation_list и state_lib. В первом каталог анимок, во втором библиотека анимок для использования в игре. В state_mgr_animation_list добавляется новые раздел в котором указываются названия анимок дла idle, in , out и rnd (rnd - это для рандомного воспроизведения анимок) Потом пишется новый раздел в state_lib, в котором указывается название раздела из state_mgr_animation_list (строчка animation). Потом анимация ставиться на нпц через all.spawn или ltx на который стоит ссылка в all.spawn. Текст выглядит так:
[meet] use = false use_wpn = false meet_talk_enabled = true
Выйпоинты ставяться свои, там где probe_stand название анимки из state_lib. Правда с нпц нельзя будет поговорить, но это поправимо: use = false поменять на use = true.[/spoiler]
Работа в гулаге для сталкера. Днем он гуляет (walker), а ночью сидит у костра (kamp).
Автор IG-2007
[spoiler]1) Пропишите в all.spawn своему смарту такую custom_data:
custom_data = <<END [smart_terrain] type = esc_new_lager capacity = 1 END
2) Пропишите в all.spawn два пути: один из нескольких точек для схемы walker (esc_new_lager_npc1_walk), другой из одной точки (центр кампа) для kamp (esc_new_lager_npc1_kamp)
3) Откройте файл config\misc\gulag_escape.ltx и добавьте в самый конец работу для своего сталкера:
[logic@esc_new_lager_npc1] active = walker@esc_new_lager_npc1
4) Откройте файл gulag_escape.script и добавьте в него:
4.1) в функцию load_job
if type == "esc_new_lager" then t = { section = "logic@esc_new_lager_npc1", idle = 0, prior = 5, state = {0}, online = false, in_rest = "", out_rest = "" } table.insert(sj, t) end
4.2) в функцию load_states
if type == "esc_new_lager" then return function (gulag) return 0 end end
4.3) в функцию checkStalker
if gulag_type == "esc_new_lager" then return npc_community == "stalker" end[/spoiler]
Настройка SDK от KostyaV
Автор KostyaV
[spoiler]Настройка СДК. 1. Установите СДК на свой компьютер. Лучше полную версию. Читал некоторые отзывы, что облегченная версия глючит. 2. Лучше всего устанавливать СДК по такому адресу (в будущем тогда будет меньше мороки с настройками): C:\Program Files\X-Ray SDK 3. Установите патч для СДК от Neo. Называется SDK Update v 0.1. 4. Возьмите распакованную версию игры Сталкер ТЧ версии 1.0004 (gamedata) и поставьте с заменой в X-Ray SDK\level_editor. Это упростит работу в будущем. 5. Теперь понадобятся инструменты от Бардака xray_re-tools-10sep2008. 6. Из этого набора инструментов необходим сейчас конвертер. С помощью его преобразовываем текстуры деревьев dds2tga. Как - читаем ридми. Необходимо только запустить конвертер на преобразование, остальное он сделает сам. Это необходимо для того, чтобы в СДК появились недостающие текстуры, которых будет много не хватать, если этого не сделать. 7. Открываем СДК. Это делается путем запуска батника LevelEditor в X-Ray SDK\level_editor. 8. Создаем ЛОДы для деревьев. Нажимаем Objects, Library Editor. Открывается окно Object Library. Находим закладку trees\new_trees. Выделяем какой-нибудь куст и нажимаем Make LOD (качество выбираете сами). Открывается окно Select Library Object. Здесь ставим галочки напротив всех деревьев и кустов и нажимаем ОК. Все ЛОДы деревьев готовы. Таким же образом можно сделать ЛОДы камней. 9. Все, теперь камни и деревья настроены.
Настройка конвертера. Создаем папку X-Ray SDK\converter. Из папки xray_re-tools-10sep2008 от Бардака копируем файлы converter.exe, fsconverter.ltx в эту папку. Это делается для удобства, чтобы все было в одном месте.Файл converter.ini помещаем в папку x-ray sdk\level_editor Затем настраиваем конвертер. Если установили СДК, как я говорил в C:\Program Files\X-Ray SDK, то в файле fsconverter.ltx ничего уже настраивать не надо. В файле converter.ini находим такие строки и исправляем их вот так:
Я не уверен, что это на 100% процентов точно. Но я сделал так и у меня все работает. Все, теперь конвертер настроен. Как им пользоваться, читаем ридми.
Настройка аиврапера. Создаем папку X-Ray SDK\aiwrapper. Из папки xray_re-tools-10sep2008 от Бардака копируем файлы aiwrapper.exe, aiwrapper.ini, fsaiwrapper.ltx в эту папку. Настраиваем аиврапер. 1. Если установили, как говорил выше, то в файле fsaiwrapper.ltx ничего менять не надо. 2. Потом надо скопировать из папки xray_re-tools-10sep2008 папку 2215 в X-Ray SDK\level_editor.
Аивраппер настроен. Можно пользоваться. Как – читаем ридми. Все очень просто, главное соблюдать инструкции.[/spoiler]
Подключение нового уровня к игре (небольшой тутор)
Автор KostyaV [spoiler]Настало время обобщить уроки по подключению нового уровня к игре.
Для начала скачайте СДК, лучше оригинальную английскую версию. Затем Глобальный патч v0.3 (14 Feb 2009) для X-Ray SDK v0.4. Потом инструменты от Бардака по этой ссылке http://stalkerin.gameru.net/index.php Там надо скачать X-ray asset tools pack FINAL окончательная версия пака утилит от bardak'а
Теперь надо настроить СДК и инструменты.
Настройка инструментов
Настройка СДК. 1. Установите СДК на свой компьютер. Лучше полную версию. Читал некоторые отзывы, что облегченная версия глючит. 2. Лучше всего устанавливать СДК по такому адресу (в будущем тогда будет меньше мороки с настройками): C:\Program Files\X-Ray SDK 3. Установите Глобальный патч v0.3 (14 Feb 2009) для X-Ray SDK v0.4 4. Возьмите распакованную версию игры Сталкер ТЧ версии 1.0004 (gamedata) и поставьте с заменой в X-Ray SDK\level_editor. Это упростит работу в будущем. 5. Теперь понадобятся инструменты от Бардака xray_re-tools-10sep2008. 6. Из этого набора инструментов необходим сейчас конвертер. С помощью его преобразовываем текстуры деревьев dds2tga. Как - читаем ридми. Необходимо только запустить конвертер на преобразование, остальное он сделает сам. Это необходимо для того, чтобы в СДК появились недостающие текстуры, которых будет много не хватать, если этого не сделать. 7. Открываем СДК. Это делается путем запуска батника LevelEditor в X-Ray SDK\level_editor. 8. Создаем ЛОДы для деревьев. Нажимаем Objects, Library Editor. Открывается окно Object Library. Находим закладку trees\new_trees. Выделяем какой-нибудь куст и нажимаем Make LOD (качество выбираете сами). Открывается окно Select Library Object. Здесь ставим галочки напротив всех деревьев и кустов и нажимаем ОК. Все ЛОДы деревьев готовы. Таким же образом можно сделать ЛОДы камней. 9. Все, теперь камни и деревья настроены.
Настройка конвертера. Создаем папку X-Ray SDK\converter. Из папки xray_re-tools-10sep2008 от Бардака копируем файлы converter.exe, fsconverter.ltx в эту папку. Это делается для удобства, чтобы все было в одном месте.Файл converter.ini помещаем в папку x-ray sdk\level_editor Затем настраиваем конвертер. Если установили СДК, как я говорил в C:\Program Files\X-Ray SDK, то в файле fsconverter.ltx ничего уже настраивать не надо. В файле converter.ini находим такие строки и исправляем их вот так:
Все, теперь конвертер настроен. Как им пользоваться, читаем ридми.
Настройка аиврапера. Создаем папку X-Ray SDK\aiwrapper. Из папки xray_re-tools-10sep2008 от Бардака копируем файлы aiwrapper.exe, aiwrapper.ini, fsaiwrapper.ltx в эту папку. Настраиваем аиврапер. 1. Если установили, как говорил выше, то в файле fsaiwrapper.ltx ничего менять не надо. 2. Потом надо скопировать из папки xray_re-tools-10sep2008 папку 2215 в X-Ray SDK\level_editor.
Аивраппер настроен. Можно пользоваться. Как – читаем ридми. Все очень просто, главное соблюдать инструкции.
Теперь можно приступить к подготовке уровня к компиляции. Я сейчас обобщаю эту информацию. Для более подробного изучения надо прочитать вот эту статью: http://tinyurl.com/b3osf3
Подготовка уровня
1. Сделайте в 3Д редакторе какой-нибудь террейн. Затекстурьте его и эспортируйте в СДК. 2. Открываем наш новый уровень в Левел Едиторе. 3. Заходим в Scene\Options и меняем Name prefix и Level path на нужные нам названия. Выбираем Quality. 4. Добавляем Glow. Назначаем ему текстуру. 5. Затем жмем Edit Mode\Light и добавляем Light на уровень. Можно поставить 3 штуки в разных углах и хватит. 6. Далее добавляем переход с уровня. Edit Mode\Spawn Element\ai\level changer и ставим этот level changer в любом месте, где хотим сделать переход. Потом жмем Edit Mode\Shape выбираем, допустим, сферу и ставим ее в том же месте, где и level changer. Затем обратно на Edit Mode\Spawn Element и нажимаем Commands\Attach Object, а потом опять на сферу. После этого сфера и level changer объединяться. 7. Теперь нажимаем на level changer правой кнопкой мыши и выбираем properties. В нем выбираем в Level to change уровень, на который хотим перейти. В Level point to change пишем start_actor_01. Заходим в custom data перехода и пишем там: [pt_move_if_reject] path = название уровня_way_if_reject
8. Нажимаем Edit Mode\Way Points, ставим 1 вейпоинт рядом с level changer, теперь жмем point mode и ставим второй. Теперь у нас получился путь, который мы прописали в custom data level changer, заходим в свойства и обзываем его также как и в custom data, то есть название уровня_way_if_reject. 9. Расставляем графпоинты. Edit Mode\Spawn Element\ai\graph point. Ставим один графпоинт рядом с переходом и в свойствах прописываем ему название start_actor_01. 10. Далее расставляем графпоинты по уровню. Необходимо ставить их там, где предполагаются места стоянок, а также по периметру уровня. 11. Далее идем в Edit Mode\Spawn Element\weapons и спавним рядом со вторым вейпоинтом, который до этого создали, какое-нибудь оружие (например, винторез). Это надо для того, чтобы позже, когда скомпилируем уровень, снять координаты места перехода на эту локацию. 12. Теперь надо сделать АИ-сетку. Нажимаем Edit Mode\Object и выделяем все объекты на уровне. Далее Edit Mode\AI Map и вносим все выделенные объекты в список. Snap List\Comands\Add Selected To List. Расставляем АИ-ноды по уровню. Необходимо поставить везде по одному АИ-ноду, где предполагается наличие каких-нибудь спавн-объектов. После расставления нажимаем Generate Full. 13. Все, приготовления закончились. Теперь начнем компиляцию.
Компиляция
1. В СДК делается Make Game, Make AI Map, Make Details, Build этого уровня. 2. Затем делаем компиляцию xr LC, xrDo_light 3. Далее прописываем в конфигах свой уровень. Прописать надо в файлах game_graphs.ltx, game_levels.ltx, game_maps_single.ltx 4. Теперь переходим к работе с аиврапером. Можно или через команду cmd выйти в папку с аивраппером, или Тотал Коммандером открыть эту папку. И потом вводить в командную строку нужные команды. 5. Сначала надо ввести команду aiwrapper -split_spawns. Зачем - читаем ридми к аиврапперу. 6. А потом выполнить последовательно команды из ридми от Бардака для аивраппера.
Цитата 3) Сборка черновой сетки ИИ: > aiwrapper -draft -f <имя_уровня> На выходе: gamedata\levels\<имя_уровня>\level.ai. 4) Проверка связности сетки ИИ: > aiwrapper -verify <имя_уровня> В случае ошибки поправить ячейки в LE и повторить с п.2. 5) Просчёт укрытий для сетки ИИ. Предварительно необходимо произвести сборку геометрии для получения build.cform (xrLC, здесь это не рассматривается). Команда: > aiwrapper -f <имя_уровня> Вообще, этот шаг необязателен на ранних этапах тестирования карты. 6) Сборка ИИ-графа: > aiwrapper -g <имя_уровня> На выходе: gamedata\levels\<имя_уровня>\level.{graph|gct.raw} 7) Склейка ИИ-графов карт в глобальный игровой граф: > aiwrapper -m На выходе: gamedata\game.graph и gamedata\levels\*\level.gct (см. ниже для случая с картами без исходников) 8) Сборка all.spawn > aiwrapper -s На выходе: gamedata\spawns\all.spawn
Все карта скомпилирована. Теперь надо собрать геймдату своего уровня. Обязательно необходимо скопировать из level_editor\gamedata в свою геймдату следующие файлы: - config\game_graphs.ltx, config\game_levels.ltx, config\game_maps_single.ltx - spawns\all.spawn (только предварительно надо добавить в этот all.spawn переход на новую локацию со старой локации, с которой хотим заходить на нее. А также в переходах с новой локации надо прописать точку выхода на старой локации.) - из папки levels необходимо скопировать в соответствующие папки файлы level.gct для каждого уровня. И не забыть из этой же папки скопировать папку с новым уровнем. - game.graph - в папку textures скопировать все свои новые текстуры, которые использовали для своего уровня. Также скопировать файл textures.ltx
Теперь получившуюся папку gamedata помещаем в папку с игрой и запускаем новую игру. Все.
Вроде все. Осталось опробовать это на деле и задавать вопросы, если что не получается.[/spoiler]
Декомпиляция уровней в формат СДК
[spoiler]Итак пытаюсь очень подробно расписать процесс декомпиляции уровней в формат СДК,надеюсь все те кто не мог понять теперь разберется. Расписываю по пунктам:
1)Распаковать утилиту Бардака в нужную папку
2)Там находим и открываем любым текстовым редакором converter.ini в нем находим строчки:
[3456_config]:2947_config $game_data$ = c:\temp\1\gamedata.3502\ $game_levels$ = c:\temp\1\gamedata.3502\levels\ fake_mu_gamemtls = 34xx_fake_mu_gamemtls fake_gamemtls = 34xx_fake_gamemtls Тут $game_data$-путь до gamedata и $game_levels$-до папки levels в gamedata соответственно.
3)Находим fsconverter.ltx там находим строчку : $sdk_root$ = false| false| c:\program files\x-ray sdk\level_editor\ где $sdk_root$ путь до полного СДК(покоцанный не работает нормально с этой утилитой)т.е. после строчек false| false| пишем полный путь и именно со строчкой level_editor\ в конце как на примере(многие забывают).
4)Ну вот конвертер полностью настроен теперь ключь для конвертирования в формат СДК: Для этого создаем текстовой фаил в него вписываем этот параметр и меняем формат(переименованием)с .txt на .bat. converter -level <имя_карты> -out <имя_сцены> -mode le pause где <имя_карты> точное название папки с картой пример:l08_yantar(локация янтарь из ТЧ), <имя_сцены> то как карта будет назваться после конвертирования, можно не писать в этом случае карта будет называться также как и до конвертирования в нашем случае l08_yantar,ну и ключь mode в нашем примере le т.е. конвертирование карты в формат СДК,также можно использовать ключи maya(Конвертирование геометрии в формат Майи),le2(Формат использующийся для карты l12_stancia_2(может быть еще для каких не проверял)),raw(Опять же формат СДК но уже в отладочном режиме).
5)ну вот если все сделанно правильно после запуска батника пойдет процесс декомпиляции.
6)Найти карту можно будет по адресу $sdk_root$\maps-фаил читаемый СДК и $sdk_root$\rawdata\objects\levels обьекты используемые данным уровнем. [/spoiler]
[spoiler]Делается это так: в файле xr_effects.script ищем строку :function after_credits(actor, npc) и ниже находим вот что c:execute("disconnect")
Меняем "disconnect" например на hud_crosshair 1 и все вместо того чтобы после концовок (похоже даже фальшивых) будет возможно продолжить игру...
Только осталось добавить level_changer (например на Припять и все freeplay работает.)[/spoiler]
Добавление в главное меню нескольких фоновых мелодий
[spoiler]Данный урок довольно прост. Для реализации сего дива нам понадобится парочка музыкальных треков (music_1, music_2...), предварительно разбитых на два моно канала и переведенных в OGG формат с частотой 44kHz(64kbps). В этом может помочь Adobe Audition 2.0(по крайней мере я ним пользуюсь). Также есть еще один вариант: Если уж очень лень - Музычку можно вытащить из различных МОДов, обычно в каждом, разработчики, как правило, засовывают новую музыку, которая лежит в "gamedata\sounds\music". И так берем наши OGG треки и засовываем, в выше указанную папку, gamedata\sounds\music, не забывая про то, что каждая дорожка должна состоять из левого и правого моно канала "magnitofon_l.ogg" - левый канал и "magnitofon_r.ogg" - правый! Причем количество дорожек не ограничено . Далее нам понадобится ui_mm_main.xml, который лежит в "gamedata\config\ui" и находим там вот такой текст: Код <menu_sound random="0" > <!--whell_sound>car\apc_run</whell_sound> <whell_click>car\test_car_stop</whell_click-->
И проводим с ним некоторые манипуляции: 1. - В строчке Код <menu_sound random="0" > и цифру "0" меняем на число соответствующие количеству наших муз. композиций, правда на одну единицу больше. 2. - Далее после строчки Код <menu_music>music\Terrapack-Empty_noise</menu_music> ниже, на ее примере прописываем новые композиции Код <menu_music>music\music_1</menu_music>
И в конечном итоге получится примерно так Код <menu_sound random="7" > <!--whell_sound>car\apc_run</whell_sound> <whell_click>car\test_car_stop</whell_click-->
Сохраняем. И теперь при каждом входе в главное меню у нас будут играть радомно 7 музыкальных композиций![/spoiler]
Немного о Худе
Автор: Serafim12 [spoiler]Раздел первый:файлы. Для работы над худом нам нужны следующие файлы(не обязательно все конешно) Текстуры: Папка - 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 - хз что это..предполагаю что реч о точках на миникарте
__________________________________
Советы: Если вам нужно убрать текстуру - просто убираем в конфиге путь к текстуре. Если нужно убрать текст - либо убираем сам текст либо ставим а="0" Многие элементы передвигаются в связке.К примеру патроны - окно,количество и иконку можно двигать меняя координаты окна.Координаты остального подразумеваются в рамках размера окна(а не всего экрана) [/spoiler]
Немного о утилите от бардака и декомпиляции уровня
1)Распаковать утилиту Бардака в нужную папку 2)Там находим и открываем любым текстовым редакором converter.ini в нем находим строчки: ; 2947+ (финалка включая обновления) [2947_config]:2945_config $game_data$ = c:\temp\1\gamedata.3312\ $game_levels$ = c:\temp\1\gamedata.3312\levels\ ------------------------------------------------------------------------------------------------------- ; 3456+ (Clear Sky включая обновления) [3456_config]:2947_config $game_data$ = c:\temp\1\gamedata.3502\ $game_levels$ = c:\temp\1\gamedata.3502\levels\ fake_mu_gamemtls = 34xx_fake_mu_gamemtls fake_gamemtls = 34xx_fake_gamemtls Тут $game_data$-путь до gamedata и $game_levels$-до папки levels в gamedata соответственно. 3)Находим fsconverter.ltx там находим строчку : $sdk_root$ = false| false| c:\program files\x-ray sdk\level_editor\ где $sdk_root$ путь до полного СДК(покоцанный не работает нормально с этой утилитой)т.е. после строчек false| false| пишем полный путь и именно со строчкой level_editor\ в конце как на примере(многие забывают). 4)Ну вот конвертер полностью настроен теперь ключь для конвертирования в формат СДК: Для этого создаем текстовой фаил в него вписываем этот параметр и меняем формат(переименованием)с .txt на .bat. converter -level <имя_карты> -out <имя_сцены> -mode le pause где <имя_карты> точное название папки с картой пример:l08_yantar(локация янтарь из ТЧ), <имя_сцены> то как карта будет назваться после конвертирования, можно не писать в этом случае карта будет называться также как и до конвертирования в нашем случае l08_yantar,ну и ключь mode в нашем примере le т.е. конвертирование карты в формат СДК,также можно использовать ключи maya(Конвертирование геометрии в формат Майи),le2(Формат использующийся для карты l12_stancia_2(может быть еще для каких не проверял)),raw(Опять же формат СДК но уже в отладочном режиме). 5)ну вот если все сделанно правильно после запуска батника пойдет процесс декомпиляции. 6)Найти карту можно будет по адресу $sdk_root$\maps-фаил читаемый СДК и $sdk_root$\rawdata\objects\levels обьекты используемые данным уровнем.
Многие задавали вопросы такого плана: как увеличить прыжок, как увеличить максимальный носимый вес, как увеличить обойму. Отвечаю полностью на все. НО сделать свой мод могут только те, у кого игра разархивирована, т.е. имеется папка gamedata. Если её нету, скачайте программу для разархивации файлов игры (она была на июньской игромании), либо найдите именно такую версию игры (какую не знаю ), а может быть вы сами знаете какой-то способ получить доступ к файлам игры. Так вот вам понадобится папка gamedata и умение работать в блокноте. Как увеличить скорость передвижения: Открываем все тот же файл actor.ltx, находим строчки: run_coef - строчка содержит параметр простого бега (а точнее ходьбы) sprint_koef - строчка содержит параметр спринта (бег при нажатии клавишы Х) run_back_coef - строчка указывает параметр ходьбы назад walk_back_coef - строчка указывает параметр ходьбы назад при зажатой клавише shift. Как хотите, так и изменяйте. Как увеличить максимальный носимый вес: Заходим сюда gamedata\config находим файл system.ltx в нем строчку max_weight - она указывает какой максимальный вес вы можете носить так, что при этом вы сможете бегать спринт с минимальной потерей выносливости. Ставьте сколько хотите. Далее заходим опять сюда gamedata\config\creatures опять находим файл actor.ltx в нем строчку max_walk_weight - эта строчка указывает, после какого веса вы не сможете передвигаться а тупо встанете на месте с вежливой надписью внизу выбросить что-то. Ясное дело, что параметр этой строчки должен быть больше параметра строчки max_weight в файле system.ltx. Как увеличить обойму вашего любимого ствола: Заходим сюда gamedata\config\weapons находим файл с вашим любимым оружием. Например w_abakan.ltx в нем строчку ammo_mag_size – именно она указывает сколько патронев в вашем магазине. Думаю, в пределах разумного поставить 50-60 единиц. Также вы можете понизить износ вашего оружия строчка condition_shot_dec (разрабы даже потрудились написать напротив неё что она обозначает ) добавьте после точки побольше нулей или вообще поставьте там всего один нуль, тогда ваще оружие будет бессмертно. Как проапгрейдить вашу любимую пижамку: Забираемся сюда gamedata\config\misc находим файл outfit.ltx, в нем находим ваш любимый костюмчик. Например вы любите куртку сталкера – костюм новичка Ищем строчки: burn_protection - защита от огня strike_protection - защита от удара shock_protection - защита от электрического удара wound_protection - защита от разрыва radiation_protection - защита от радиации telepatic_protection - защита от телепатических волн chemical_burn_protection - защита от химических реактивов explosion_protection - защита от взрыва fire_wound_protection - защита от выстрела значение 0.0 говорит о том что от костюм ни на сколько процентов не защищает вас от такого воздействия, значение 1.0 обозначает что ваш костюм на 100 % защитит вас от этого недуга. Далее чтоб понизить износ костюма ищем строчки: burn_immunity strike_immunity shock_immunity wound_immunity radiation_immunity telepatic_immunity chemical_burn_immunity ex plosion_immunity fire_wound_immunity все эти строчки соответственно показывают защищенность самого костюма от воздействий. Чем больше нулей после точки тем больше костюм устойчив к эдакой заразе. Ставить только нули не советую. Есть ещё масса методов изменить игру под вас но всех их не рассказать Одно главное правило: не удаляйте никаких точек, запятых, скобочек, ибо, если они там стоят значит это кому-нибудь нужно.
Продолжаем тему модификации оружия. На примере того же Абакана: gamedata\config\weapons файл по вашему желанию. Наше желание остановилось на w_abakan.ltx. Строчка ammo_class – можно перепрошить патроны для ствола на любые по желанию, главное правильно их прописать (именно так сделано для уникальных пушек). Строчка grenade_class – можно перепрошить гранаты для подстволки. Гранат для натовского оружия дефицит, поэтому можно прописать натовским стволам гранаты от советских пушек. Строчка inv_weight – если вам совесть не позволяет увеличить максимальный носимый вес, но вы любите таскать много стволов, то можно уменьшить параметр этой строчки, ибо он означает вес оружия. Строчка cam_dispersion - содержит параметр показывающий так называемую вертикальную отдачу. Какая там стоит цифра, на такое кол-во градусов увеличивается угол при каждом вылете пули. Можно понизить этот параметр путем добавления нулей после точки. Тогда ствол будет меньше скакать в руках. Строчка condition_shot_dec - как я говорил уже, содержит параметр, указывающий на сколько единиц будет ваше оружие портиться при каждом выстреле. Лучше понизить путем добавления нулей после точки. Строчка hit_power содержит параметр, указывающий какой размер дырки от пули будет в том в кого вы стреляли из этого ствола. Это один из тех важных параметров, повышающих мощность оружия, но в косвенном смысле: чем больше дыра тем быстрее дохнет жертва. Строчка bullet_speed содержит начальную скорость, с которой пуля покидает ствол оружия. Изменять её надо с осторожностью и в комплексе с другими параметрами, ибо вместо желаемого можно добиться обратного эффекта. Эти строчки больше к выпендрежу относятся: light_color - цвета пламени при выстреле light_range - радиус пламени light_var_color - цвет варьирующий среди представленных light_var_range - радиус варьирующего цвета light_time - время Впринципе, этого хватит чтобы улучшить ствол, хотя есНа примере того же Абакана: gamedata\config\weapons файл по вашему желанию. Наше желание остановилось на w_abakan.ltx. Строчка ammo_class – можно перепрошить патроны для ствола на любые по желанию, главное правильно их прописать (именно так сделано для уникальных пушек). Строчка grenade_class – можно перепрошить гранаты для подстволки. Гранат для натовского оружия дефицит, поэтому можно прописать натовским стволам гранаты от советских пушек. Строчка inv_weight – если вам совесть не позволяет увеличить максимальный носимый вес, но вы любите таскать много стволов, то можно уменьшить параметр этой строчки, ибо он означает вес оружия. Строчка cam_dispersion - содержит параметр показывающий так называемую вертикальную отдачу. Какая там стоит цифра, на такое кол-во градусов увеличивается угол при каждом вылете пули. Можно понизить этот параметр путем добавления нулей после точки. Тогда ствол будет меньше скакать в руках. Строчка condition_shot_dec - как я говорил уже, содержит параметр, указывающий на сколько единиц будет ваше оружие портиться при каждом выстреле. Лучше понизить путем добавления нулей после точки. Строчка hit_power содержит параметр, указывающий какой размер дырки от пули будет в том в кого вы стреляли из этого ствола. Это один из тех важных параметров, повышающих мощность оружия, но в косвенном смысле: чем больше дыра тем быстрее дохнет жертва. Строчка bullet_speed содержит начальную скорость, с которой пуля покидает ствол оружия. Изменять её надо с осторожностью и в комплексе с другими параметрами, ибо вместо желаемого можно добиться обратного эффекта. Эти строчки больше к выпендрежу относятся: light_color - цвета пламени при выстреле light_range - радиус пламени light_var_color - цвет варьирующий среди представленных light_var_range - радиус варьирующего цвета light_time - время Впринципе, этого хватит чтобы улучшить ствол, хотя есть ещё параметры. Разберусь, напишу о них. Могуть быть неточности, но надеюсь их нет
Продолжаем обучение. Сейчас вы узнаете, как убрать или добавить эффект лечения у пищи, как изменить её сытность.
Открываем gamedata\config\misc\items.ltx. Там сразу по порядку идет перечисление пищи. Название еды ищите в строчках типа [kolbasa]:identity_immunities. Смотрим в конфигах для найденного типа пищи. Для той же колбасы видим такие строки: GroupControlSection = spawn_group discovery_dependency = $spawn = "food and drugs\kolbasa" $prefetch = 8 class = II_FOOD cform = skeleton visual = weapons\kolbasa\kolbasa.ogf description = enc_equipment_food_kolbasa1
Выделенные красным строки нам и нужны. Параметр eat_health отвечает за восстановление здоровья при съедении - повышаем или понижаем его. Параметр eat_satiety отвечает за убавление голода. Редактируем... Также есть интересный параметр eat_radiation - он отвечает за убавление радиации при съедении пищи.
Действуя таким образом мы можем отыскать параметры любой еды и изменить их. Вперёд!
Теперь учимся менять некоторые характеристики модернизированного оружия.
Открываем файл gamedata\config\misc\unique_items.ltx. Сначала в этом файле идет броня. Пролистываем до строчки ;-----------Weapons-----------. Здесь мы видим некоторые характеристики модернизированного оружия. [*название оружия*]:*название прототипа оружия* ;Скорострельный АК-74 $spawn = "weapons\uniq\*файл оружия" description = enc_weapons1_wpn-ak74_m1 inv_name = *имя оружия* inv_name_short = *имя оружия* rpm = 850 condition_shot_dec = 0.0001 cam_dispersion = 0.05 cam_dispersion_inc = 0.1 inv_grid_x = 0 inv_grid_y = 30
Вначале обратите внимание на строчку condition_shot_dec . Это - параметр износа при выстреле, который можно повысить или понизить на свое усмотрение.
Ещё можно изменить тип патронов для этого оружия. Для этого ищем строчку ammo_class (если её нет, прописываем её под строкой inv_name_short) и после знака = прописываем тип патронов, которыми будет стрелять оружие. Типы патронов: ammo_12x70_buck - под дробан, дробь ammo_12x76_dart - под дробан, дротик ammo_12x76_zhekan - под дробан, жекан ammo_5.45x39_ap - под калаш, бронебойные ammo_5.45x39_fmj - под калаш, простые ammo_og-7b - под РПГ (базуку) ammo_vog-25 и ammo_vog-25p - под подствольник или простой гранатомет ammo_gauss - под Гаусс. Потом закончу список.
Сразу предупреждаю: смена типа патронов не изменит убойности пушки или визуального эффекта высстрела - это совсем другие файлы и параметры! Смена патронов приведет лишь к тому, что вместо прежних будут расходоваться другие боеприпасы!
Так же всем тем,кто хочет играть от 3-его лица делаем так: в папке Documents and Settings/All Users/Общие документы/STALKER-SHOC,а в ней файл user.ltx,открываем его блокнотом и прописываем в самом конце эти строчки: bind cam_1 kF1 bind cam_2 kF2 bind cam_3 kF3 bind cam_4 kF4 Теперь играем и клавишами F1,F2,F3,F4 меняем позицию камеры на вид от третьего лица.
Увеличение артефактов с 5 до 16 inventory_new.xml и system.ltx В system.ltx изменяем только параметр max_belt с 5 на 16 В inventory_new.xml <dragdrop_belt x="590" y="118" width="410" height="104" cell_width = "52" cell_height="52" rows_num="2" cols_num="8"/>
dragdrop_belt - эта параметры слотовой сетки ремня <x y> - координаты ее расположения <width,height> - ее размеры <cell_width cell_height> - размеры одной ее ячейки <rows_num cols_num> - число строк и столбцов в ней
ЛАЗЕРНАЯ ВИНТОВКА
Теперь займемся созданием футуристических стволов. Первый из них - лазерная винтовка. Делать её мы будем на основе снайперки СВУмк2, которая детально описана в файле w_svu.ltx. Начните опять же с цены, подняв число, соответствующее показателю cost, до 12000. А вот запас патронов следует ограничить, задав характеристикам ammo_limit, ammo_current, ammo_mag_size и startup_ammo значения 40 (первой из них) и 6 (остальным трем. Не помешает также чуточку утяжелить винтовку (пропишите параметру inv_weight значение 5.2) и усилить её ( в этом нам поможет регулировка параметров hit_power и hit_impulse). Первой теперь должно соответствовать значение 1.20, 1.30, 1.40, 1.50, а второй - 180. Скорость полета снаряда и дальность стрельбы тоже увеличиваем: параметрам bullet_speed и fire_distance пропишите 1130. А вот скорострельность (rpm) лучше снизить до 150. Ослабим у пушки зум, приписав атрибуту scope_zoom_factor число 30 - увеличение из трехкратного станет двухкратным. Значение же показателя shell_particles следует обнулить, удалив прежнее weapons\generic_shells. В результате при стрельбе из винтовки больше не будут видны падающие на землю гильзы, что нам и нужно. Стреляет-то она теперь лазером. Наконец, слегка повысьте быстроту изнашиваемости ствола: у показателя condition_shot_dec пропишите число 0.00035. Лазерная винтовка готова. Она дает большой урон, имеет высокую точность стрельбы, бешеную скорость полета заряда, но вот перезарядка происходит медленно. Это открывает совершенно новые тактики ведения боя. Можно притаиться за каким-либо сооружением, стоящим на возвышенности, дождаться группы бандитов, подпустить их на дистанцию выстрела и начать постепенно отступать, отстреливая догоняющих вас врагов. До этого подобная тактика со снайперкой не работала, потому что бегущие впереди противники догоняли вас раньше, чем вы их уничтожали. Но с лазерной винтовкой можно убивать незащищенных врагов с одного выстрела. Главное, научиться метко стрелять. А вот пытать засесть с лазерной винтовкой на верхотуре явно не стоит. Из-за того, что она долго перезаряжается, враги успеют подобраться к вам в промежутке между выстрелами.
АТОМНАЯ ПУШКА На десерт у нас атомная пушка. Её мы получим из ракетницы (РПГ-7у). Следовательно, править нужно файл w_rpg7.ltx, и первое, что стоит сделать, - поднять цену на оружие (cost) до 14000. Показателю ammo_limit следует придать значение 10, дабы понизить скорость полета снаряда, к характеристикам launch_speed, bullet_speed и fragment_speed подставьте соответственно числа 3, 5 и 30. Скорострельность тоже снижаем: сбавляем обороты параметра rpm до отметки 100, а дальнобойность (fire_distance) уменьшаем до 300. Теперь поработаем над отдачей. У столь мощной пушки она должна быть весьма ощутимой. Посему настройкам cam_relax_speed, cam_dispersion и cam_max_angle следует задать значения 1, 8 и 12 соответственно. Но баланс пока все равно остается перекошенным: слишком уж мощная штука у нас получилась. Добавим стволу ещё один серьёзный недостаток - сделаем его быстро изнашиваемым. Атрибуту condition_shot_dec логично будет поставить значение 0.00150. Кроме того, вероятность осечки при максимальном износе (misfire_probability) надо сделать равной 0.01. Понятно, что вес у громоздкой новинки будет соответствующий: этого можно добиться, прописав показателю inv_weight число 8. Повреждения же от новой пушки будут поистине громадными. Задайте параметрам hit_power, hit_impulse и explode_duration значения 5, 600 и 8. Также необходимо отредактировать третий раздел файла wpn_rpg7_missile (все оставшиеся изменения производите именно в нем), характеризующие непосредственно ракету. Здесь вы снова встретите показатель explode_duration, которому и в этот раз надо присвоить значение 8. Чтобы сделать взрыв ракеты ещё более мощным, "привяжите" к настройке blast число 8, к blast_impulse - 450, а чтобы расширить его радиус - увеличте показатель blast_r до 18. Рекоммендуем сделать взрыв более эффектным. В этом вам поможет изменение значений параметров light_range и light_time соответственно на 50 и 2.6. Это сделает вспышку после разрыва снаряда более длительной и яркой. Увеличению не помешало бы подвергнуть и следы на стенах, остающиеся после взрыва: задайте атрибуту wm_size значение 0.3. Напоследок установите цену на снаряд (cost) в размере 300 рублей. Получившееся орудие убийства будет в игре на вес золота - по убойной силе ему просто нет равных. Один выстрел - и вокруг остаются только горы трупов.
Симптом: любой вылет со ссылкой на "out of memory" или аналогично "insufficient resources available" или "no more data is available". Кроме того, некоторые вылеты с "Can't open section" тоже могут быть связаны с нехваткой памяти.
Причина: STALKER – игра крайне требовательная к ресурсам, она перегружена даже в чистом виде, и в особенности некоторые карты – Кордон, Тёмная Долина, Армейские Склады, Красный Лес, Припять. При этом совершенно НЕ ИМЕЕТ ЗНАЧЕНИЯ сколько у вас оперативной памяти! Для процессов 32-битной версии Виндовс доступная память ограничена 2 Гб и не больше.
Лечение: снизьте качество текстур, или в особо тяжких случаях, перейдите на статичное освещение. Кроме того, можно попробовать играть с опцией командной строки " -noprefetch". Эту опцию без кавычек можно вбить в свойства ярлыка сталкера через пробел сразу за ссылкой на экзешник игры. Если же вы играете на Висте, можно попробовать играть, запустив сначала команду "bcdedit /SetIncreaseUserVA 2700", залогинившись с административными правами.
2) Вылеты рендера:
Симптом:
Код: Выделить всё stack trace:
001B:0188B3B6 xrRender_R1.dll or 001B:02C09EE6 xrRender_R2.dll
Причина: это проблема с видеодрайвером, связанная с тем, что игра передала функции драйвера неверные данные или возможно подвисшим потоком обработки видеоданных
Лечение: хорошо в этом вылете то, что он обычно только временная проблема, и лечится простой загрузкой с последнего сейва. Основная локация таких вылетов – Янтарь, они часто случаются к северо-востоку от бункера экологов.
3) Вылеты с потерянным игрой или уничтоженным оружием
Scheduler tried to update object lvl_community_respawn_xxxxx (e.g., esc_soldier_respawn_11350),
Причина: этот вылет обычно возникает когда оружие свежеубитого непися уничтожено или покинуло уровень (провалилось сквозь землю) в тот момент когда его хотел подобрать другой непись или главгерой
Лечение: обычно достаточно просто загрузить последний сейв и вылет пропадает
Добавлено спустя 2 минуты 39 секунд:
4) Вылеты с боем сейвов – большей частью исправлены в патче 1,0004 но могут возникать и в 1,0005
Симптом: примерно такой:
Код: Выделить всё stack trace:
xrGame.dll xrGame.dll
или ошибка "Can't open section"
Причина: Сейвгейм повреждён. Это например может произойти в том случае, когда игра уничтожила труп, но не очистила точку на карте, привязанную к нему. Вы также получите эту проблему если увидели в логе строку вида:
Код: Выделить всё "- Critical: SMapLocation binded to non-existent object id=xxxxx"
Её, впрочем очень легко пропустить, так как она обычно пролетает в логе намного, намного раньше того момента, как вы попробуете загрузить побитый в результате сейв. Пропадания трупов такого рода часты в модах или на Арене, однако не менее часто они происходят когда аномалия, например сильная Гравии разрывает труп.
Лечение: в этом случае придётся искать более раннее сохранение, где эта проблема ещё не возникла.
5) Некорректное место спавна:
Симптом: примерно такой:
Код: Выделить всё ! Cannot build GAME path! (object m_tushkano_normal21511) ! CURRENT LEVEL : l10_radar ! CURRENT game point position : [376.978180][-51.199860][29.992897]
FATAL ERROR
[error]Expression : I != levels().end() [error]Function : GameGraph::CHeader::level [error]File : e:\stalker\patch_1_0004\xr_3da\xrgame\game_graph_inline.h [error]Line : 171 [error]Description : there is no specified level in the game graph : 96
stack trace:
Scheduler tried to update object m_tushkano_normal21511
... или что-то навроде вот этого ...
Код: Выделить всё FATAL ERROR
[error]Expression : false [error]Function : CGameGraph::distance [error]File : e:\stalker\patch_1_0004\xr_3da\xrgame\game_graph_inline.h [error]Line : 96 [error]Description : There is no proper graph point neighbour!
stack trace:
Причина: некий мутант или непись заспавнился в некорректном месте. Причина этого в том, что А-лайф спавнит их в некотором произвольном радиусе от точки спавна, что позволяет каждый раз спавн разнообразить. К сожалению, иногда он умудряется поместить живность в точку снаружи уровня – под землю или в стену, или заспавненый объект проваливается под уровень.
Лечение: обычно достаточно просто загрузить последний сейв и вылет пропадает. В особо тяжких случаях, когда вы умудрились сохранится рядом с уже застрявшим так неписем или монстром вам придётся убежать на другую локацию, чтобы эта животина в оффлайне ушла в нормальное место.
6) Некорректное место спавна – второй вариант:
Симптом: примерно такой:
Код: Выделить всё ! DetailPathManager has failed : from [142.099976,-4.614447,445.899963] to [142.099976,-5.792273,443.799988] ! DetailPathManager has failed : from [142.099976,-4.614447,445.899963] to [142.099976,-5.792273,443.799988] ! DetailPathManager has failed : from [142.099976,-4.614447,445.899963] to [142.099976,-5.792273,443.799988] stack trace:
Причина: непись или мутант перешёл в онлайн в неудачном месте, и не может найти выход чтобы пойти в точку назначения. Игра использует для навигации существ сеть квадратов, соединённых между собой, однако некоторые из них изолированы друг от друга. Например камни на границе карты, или места на другой высоте чем точка назначения.
Лечение: обычно достаточно просто загрузить последний сейв и вылет пропадает. В особо тяжких случаях, когда вы умудрились сохранится рядом с уже застрявшим так неписем или монстром вам придётся убежать на другую локацию, чтобы эта животина в оффлайне ушла в нормальное место.
Добавлено спустя 2 минуты 49 секунд:
7) Вылеты вида «Bad argument #2 to 'format'» или аналогичные
Симптом: примерно такой:
Код: Выделить всё FATAL ERROR
[error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : D:\xray-svn\xr_3da\xrGame\script_engine.cpp [error]Line : 74 [error]Description : [error]Arguments : LUA error: e:\stalker\gamedata\scripts\_g.script:20: bad argument #2 to 'format' (string expected, got no value)
stack trace:
Причина: обычная причина этих вылетов – передача некорректных значений родным функциям игры. Эти ошибки обычно возникают когда произошёл какой-то серьёзный сбой, и о таких вылетах желательно сообщать разработчикам. Если такой вылет случился желательно так же сбросить текст выше строки FATAL ERROR из лога.
Лечение: обычно достаточно просто загрузить последний сейв и вылет пропадает. Если же этот вылет у вас происходит при загрузке сейва – сбросьте его разработчикам мода с логом вылета.
Причина: случается когда вы просматриваете в ПДА контакт в тот момент когда он переключается в оффлайн.
Лечение: обычно достаточно просто загрузить последний сейв.
9) Редкий родной вылет 2: CKinematicsAnimated
Симптом:
Код: Выделить всё stack trace: 001B:00451CE8 XR_3DA.exe, CKinematicsAnimated::ID_Cycle_Safe()
Причина: обычно связан с отработкой физики и анимации. Если происходит стабильно на каком-то специфичном персонаже – сообщите разработчикам.
Лечение: обычно достаточно просто загрузить последний сейв.
10) Редкий родной вылет 3: ParticleManager
Симптом:
Любой вылет со ссылкой на ParticleManager.
Причина: обычно происходит при воспроиведении частиц – дыма костров, огня, стрельбы и т.д.
Лечение: во многих случаях помогает обновление драйверов видеокарты
Добавлено спустя 3 минуты 28 секунд:
11) Две или более ошибки друг за другом
Симптом:
Код: Выделить всё [error][ 183] : Cannot create a file when that file already exists.
Причина: обычно это просто две одинаковых ошибки, произошедших одновременно
Лечение: в логе обычно есть и первая ошибка из серии. Разбирайтесь с ней так, как описано выше для ошибок этого вида.
12) Ошибки пути или маршрутов
Симптом: примерно такой:
Код: Выделить всё Expression : ai().level_graph().valid_vertex_id(vertex->data().level_vertex_id()) Function : CPatrolPathManager::select_point File : E:/stalker/patch_1_0004/xr_3da/xrGame/patrol_path_manager.cpp Line : 164 Description : patrol path[mil_mercs_walker_3_walk], point on path [name07],object [ros_killer_respawn_230016]
Причина: в игре даже пропатченной до версии 1,0005 всё ещё есть проблемы с маршрутами.
Лечение: обычно достаточно просто загрузить последний сейв и не сохраняться рядом с местами, где происходят такие вылеты.
В этой секции задаются параметры артефакта, начиная от внешнего вида и заканчивая коэффициентами различных эффектов вроде вывода радиации. Сделаем копию секции, принадлежающей "Медузе", и заменим её название с af_medusa на af_romashka.
Должно выйти примерно вот так: [af_romashka]:af_base GroupControlSection = spawn_group $spawn = "artifacts\moscito romashka"
Назначение некоторых параметров, влияющих на одевшего артефакт: health_restore_speed - прирост к скорости восстановления здоровья radiation_restore_speed - прирост скорость вывода радиации satiety_restore_speed - прирост к голоду power_restore_speed - прирост к выносливости bleeding_restore_speed - прирост к скорости остановки кровотечений [править] Создание описания и имени артефакта
Заходим в gamedata\config\text\rus и открываем файл string_table_enc_zone.xml. Добавим туда строку с названием артефакта. <string id="af-romashka"> <text>"Ромашка"</text> </string>
Теперь у артефакта есть имя, но одного его недостаточно. Нужно сделать описание. Поэтому добавим и его. <string id="enc_zone_artifact_af-romaska"> <text>Очень странный артефакт. Впервые появился в Зоне где-то в 2011 году, но толку от него - ноль. Ученые не обнаружили никакого влияния артефакта на организм носителя.</text> </string>
Все, поздравляю, вы только что создали свой первый артефакт! :)
Добавлено (26.09.2009, 16:18:55) --------------------------------------------- как изменить носимый вес
Начнем.Для того чтобы изменить носимый вес нам необходимо 2 файла это: gamedata\config\creatures\actor.ltx gamedata\config\system.ltx
Займемся файлом actor.ltx открываем файл блокнотом, ну или как вам удобно.Жмем F3 ищем строку max_item_mass = 50.0
Изменяем max_item_mass = 500.0 Изменяем max_walk_weight = 500.0 С этим файлом все.
Открываем system.ltx также ищем строку max_weight = 50 и меняем на max_weight = 500.0
Все можем грузить игру и проверять все ли работает.
Нужен лишь один файл: gamedata\config\creatures\actor.ltx
Открываем находим секцию [actor_condition] Рассмотрим все детально: [actor_condition] satiety_v = 0.00015 ;скорость уменьшения сытости со временем radiation_v = 0.00001 ;скорость уменьшения радиации satiety_power_v = 0.00055 ;увеличение силы при уменьшении сытости satiety_health_v = 0.00001 ;увеличение здоровья при уменьшении сытости satiety_critical = 0.00000 ;критическое значения сытости (в процентах от 0..1) когда здоровье начианает уменьшаться radiation_health_v = 0.00000 ;уменьшение здоровья при воздействии радиации morale_v = 0.00001 ;скорость восстановления морали
psy_health_v = 0.001 ;скорость восстановления psy-здоровья alcohol_v = -0.0003 health_hit_part = 1.0 ;процент хита, уходящий на отнимание здоровья power_hit_part = 0.1 ;процент хита, уходящий на отнимание силы max_power_leak_speed = 0.0 ;накопление усталости (макс граница, до которой восстанавливается сила) в секунду игрового времени max_walk_weight = 60
bleeding_v = 0.0 ;потеря крови при номинальной ране в секунду wound_incarnation_v = 1.0 ;скорость заживления раны min_wound_size = 0.256 ;минимальный размер раны, после которого она считается зажившей
Чтобы сделать бессмертие нужно:
Изменить параметр satiety_v на 0.0; Изменить параметр radiation_v на 1.0; Изменить параметр satiety_critical на 0.0; Изменить параметр health_hit_part на 0.0; Изменить параметр power_hit_part на 0.0 Изменить параметр max_power_leak_speed на 0.0;(если не изменен) Изменить параметр min_wound_size на 1.0; На этом все прост
В этой статье мы рассмотрим значения параметров костюмов. Все параметры, не упомянутые ниже, изменять строго не рекомендуется!
Итак, секции с параметрами находятся в файле: 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] ; коэффициенты иммунитета самого костюма, то есть - то, насколько сильно он сам подвержен повреждениям от различных типов воздействий. по значениям каждого типа - см. выше.
например вы хотите чтобы наемники выглядели по другому,а менять текстуры вы не умеете,тогда надо сделать следующее: вот где находятся все текстуры gamedata/textures/act
берем текстуру наемника act_stalker_merc_2.dds это комбинезон наемников берем другую текстуру наемнников(именно наемников,потому что если поставить текстуру екза на текстуру наемников ,то будет глюк,наемник будет по форме в костюме наемников,а раскраска как у екза) заменяем имя текстуры из мода на текстуру из игры и вуаля все готово например вот что сделал я
поставил текстуру наемников из SMP Mod v 1.01 (Полная cборка модов) и вот что вышло! а можете сами нарисовать что нибуть на готовой текстуре,но для этого нужен PAINT.NET или фотошоп
Добавлено (27.09.2009, 16:08:57) --------------------------------------------- езда на машинах
Для того что бы транспортом стало можно воспользоваться - в файл- ...\Documents and Settings\All Users\Документы\STALKER-SHOC\user.ltx нужно добавить следующие строки: Код: bind cam_1 kF1 bind cam_2 kF2 bind cam_3 kF3 bind turn_engine kB
После строки: Код: unbindall
Пользоваться авто: вход в авто - "использовать", запуск двигателя - "B", снятие с ручника - "перезарядить", смена видов - "F1", "F2", "F3".
Надеюсь, что игровой процесс станет с этим модом гораздо интересней и реалистичней
Внимание, мод станет полнофункиональным только после загрузки из автосохранения или начала новой игры. Из быстрого сохранения, сразу после установки мода, игру не загружать - не получите всего удовольствия от мода. После первого быстрого сохранения можно спокойно загружаться как обычно.
Настройка converter.ini под ЧН для распаковки локаций
Автор - KostyaV Правка - уа
Если хотите распаковать локацию из ЧН, то сперва распакуйте S.T.A.L.K.E.R Clear Sky, и киньте gamedata в xray-sdk\level editor обозвав ее gamedata-cs. Далее открываем любым текстовым редактором converter.ini (Как его настраивать смотрим урок Настройка SDK от KostyaV) и редактируем дефолтный профиль
; 3456+ (Clear Sky включая обновления) [3456_config]:2947_config $game_data$ = Диск\Папка в которой хранится SDK\x-ray sdk\level_editor\gamedata-cs\ $game_levels$ = Диск\Папка в которой хранится SDK\x-ray sdk\level_editor\gamedata-cs\levels\ fake_mu_gamemtls = 34xx_fake_mu_gamemtls fake_gamemtls = 34xx_fake_gamemtls
Все. Теперь можете приступать к распаковки локации из ЧН.
Делаем txt документ и прописываем в него такие строчки
Quote
converter -level название локации -mode le -with_lods pause
Далее идем в строку "Сохранить как" Ставим в "Тип файла" "Все файлы" и в строчке "Имя файла" пишем название батника.bat Все - распаковка пошла. Распакованную локацию можно найти в папке maps а также в rawdata\levels
Прежде чем приступить к обработке текстур рельефа в сталкере, необходимо ознакомиться с их строением. Не углубляясь в подробности, по стандарту, бамп состоит из карты высоты и генерируемых из нее 3-х карт нормалей, и разнообразных карт для эффектов освещения, например в сталкере присутствует карта интенсивности блика.
Рассмотрим все на примере вот такой текстуры, будем считать, будто это ребра гранаты ф-1:
Теперь подробно об картах рельефа:
Карта высоты определяет высоту каждого пикселя по отношению к остальным, т.е, светлые пятна - это выпуклости, а темныые - впадины. Если взять к примеру текстуру кирпича, то сами кирпичи на карте высот должны быть светлее, чем прослойки между ними, в результате это создаст эффект, будто кирпичи немного выставляются из стены. Карта высоты - это самый важный элемент рельефа. Так как из нее генерируются практически все остальные карты рельефа, можно понять, что от качества карты высоты напрямую зависит результат.
Карты нормалей состоят из 3 элементов: карта горизонтальных нормалей, карта вертикальных нормалей, и специфическая карта, которая так же генерируется автоматически, и определяет что то вроде отражаемости света на самых значительных перепадах высот, например, ребрах кирпичей, склонах трещин и т.д., то есть, переходных мест от высокого к низкому и наоборот.
Примерный принцип работы карт нормалей таков: серым обозначается поверхность, параллельная плоскости, на которую наложена текстура, отклонение в черный или белый определяет наклон поверхности, чем чернее/белее цвет, тем круче изгиб поверхности по отношению к горизонтали. А третья карта определяет, на сколько меньше света отражать от поверхностей, наклон которых близок к прямому углу. Честно говоря, я не совсем понимаю смысла в этой карте, но раз есть - значит нужна. Править ее вручную, как впрочем и сами карты горизонтальных и вертикальных нормалей, не стоит.
Все 3 элемента карты нормалей можно получить с помощью специализированного фильтра от Nvidia и обычно они все находятся в одном файле в таком порядке:
красный канал - карта горизонтальных нормалей зеленый канал - карта вертикальных нормалей синий канал - карта "отражаемости рельефа".
Карта интенсивности блика Она определяет, сколько света отражать от данного участка текстуры. чем белее определенный пиксель, тем больше света он будет отражать. С помощью этой карты, можно задавать свойства отражения света разных материалов. Например для бетона лучше сделать эту карту черной, так как бетон слабо отражает свет, и блики на нем никак не говорят о реализме. А вот для металлов например, или для стекол, можно сделать карту значительно светлее, и при правильной ее настройке, данные материалы будут достаточно реалистично, а главное - очень красиво блестеть на солнце.
Теперь непосредственно рассмотрим структуру файлов рельефа в игре СТАЛКЕР. Рельеф каждой текстуры представлен двумя файлами <имя текстуры>_bump.dds и <имя текстуры>_bump#.dds. порядок следования каналов в этих файлах таков:
<имя текстуры>_bump.dds: R (красный канал) - карта интенсивности блика G (зеленый канал) - карта "отражаемости рельефа" B (синий канал) - карта вертикальных нормалей A (альфа) - карта горизонтальных нормалей.
<имя текстуры>_bump#.dds: R (красный канал) - карта горизонтальных нормалей №2 G (зеленый канал) - карта вертикальных нормалей №2 B (синий канал) - карта "отражаемости рельефа" №2 A (альфа) - карта высоты
как видно, карты нормалей присутствуют в обоих файлах. Как их использовать - на вкус каждого текстурщика. Действие дубликатов одинаковое, можно использовать все, можно только в одном файле, заливая дублирующие каналы другого файла нейтральным серым. У разработчиков используются только карты рельефа в файле <имя текстуры>_bump.dds, а в _bump# они не используются, т.е. каналы RGB в нем закрашены серым.
Ну вот, со строением бампа мы ознакомились, теперь можно приступать к творчеству
Создание текстур рельефа bump и bump# Автор: Argus
------------------------- Внимание! Уроки расчитаны на пользователей, уже достаточно хорошо освоивших фотошоп.
На данном уроке попробую подробно описать порядок создания карт рельефа в игре с помощью фильтра карт нормалей от nVidia. Действия, которые описаны ниже, я не буду называть ни самыми рациональными, ни самыми простыми. Просто так делаю я сам, и не обязую следовать им в точности.
Так вот, большинство текстур в игре имеют по два одноименных собрата с индексами _BUMP и _BUMP#. так вот эти две дополнительных текстуры и являются рельефом, или "бампом".
К примеру, имеем мы текстуру STON.dds:
А сейчас будем делать для нее бампы. Как было сказано ранее, рельеф начинается с карты высоты, фильтр от nVidia здесь пока не нужен.
Карта высот
Большинство текстур имеют такое случайное свойство, как зависимость яркости от рельефа. например на большинстве фотографий кирпича прослойки либо темнее, либо светлее кирпича, чаще темнее. Так же это относится к доскам, текстурам ландшафта. Выпуклости имеют одну яркость, а впадины - другую. Этим можно сильно упростить создание карты высот. Например для основы карты высот можно взять один из каналов текстуры STON.dds. там как раз впадины темнее, выпуклости светлее - то что нам надо: если возиться с текстурами лень, и результат не важен, то следующий шаг можно пропустить, в противном случае, берем в руки весь инструментарий фотошопа, включаем фантазию и приводим карту высот к более правильному виду. Например черная тень от камней сверху не должна влиять на рельеф, камни должны быть не такими плоскими, да и прослойки не должны быть плоскими, у меня получилось что то вроде этого:
карта высоты готова. сделаем с нее дубликат, переведем в РГБ и найдем фильтр карт нормалей, он находится в самом низу списка фильтров.
Карты нормалей
вот так выглядит окно фильтра. практически ничего менять здесь не надо, важна только группа "height generation". Здесь можно выбрать тип фильтра, потыкав в разные режимы, можно увидеть в окне просмотра, что чем ниже режим, тем более размытой получается карта. В данный момент нам нужен самый первый режим "4 samples", он дает наибольшую четкость, а при низких разрешениях текстуры это очень важно. Далее стоит обратить внимание на параметр "Scale" - это, как бы назвать, "сила рельефности" что ли, чем выше число, тем более рельефной будет текстура. Я обычно выставляю значение от 5 до 10. в редких случаях выше. Все зависит от того, насколько резки перепады на карте высоты. Для данной текстуры можно выставить значение 10. Жмем ОК. Получаем изображение такого вида:
Для полного счастья сталась только карта интенсивности блика.
Карта интенсивности блика
Она показывает, насколько сильно отражает свет данный участок текстуры. Чем ярче пиксель, тем сильнее он отражает свет. Так как на данной текстуре у нас камни, карта интенсивности блика будет стремиться к черному, ведь камни - это не стекло и не металл, ни зайчиков, ни свое отражение на них не увидеть. Можно эту карту залить черным, а можно дать некоторым камушкам шанс немного побликовать: Ну вот. Теперь все для текстур бампа готово. осталось только разложить все по нужным каналам и сохранить.
Первой проще делать текстуру bump#. Для этого берем карту высоты, копируем изображение на свеже-созданную альфу, а каналы РГБ заливаем однородным серым цветом (за серый принимается цвет в середине всего диапазона яркости, т.е. лучше всего брать 127 или 128). Далее остается только сохранить ее: С текстурой bump все сложнее. По непонятной причине разработчиками игры был выставлен обратный порядок каналов. Т.е. то что фильтр nVidia располагает в порядке RGB(A), в текстуре bump порядок обратный, т.е ABGR. Это составляет определенную сложность и затрату времени при конвертировании "синенькой" текстуры, создаваемой фильтром, в "зелененькую" текстуру bump. Я обычно делаю это так: с текстуры bump# делается дубликат и сохраняется как bump, далее на нее с помощью копипаста вставляются каналы из "синенькой" текстуры, которая была недавно сгенерирована фильтром. Порядок такой:
из R в A - карта горизонтальных нормалей из G в B - карта вертикальных нормалей из B в G - белая карта
а чтобы довести текстуру bump до конца и сделать ее истинно "зелененькой", в канал R нужно вставить карту интенсивности блика. Все, можно сохранять. должно получиться вот так:
Вот и все, карты рельефа для сталкера готовы. Остается только посмотреть, как будет выглядеть в игре:
Удачи в работе!
Добавлено (25.11.2008, 17:26) --------------------------------------------- Кстати, забыл упомянуть, если исходная текстура бесшовная, то необходимо сохранять бесшовность всех карт, из которых состоит рельеф!
Внимание! Уроки расчитаны на пользователей, уже достаточно хорошо освоивших фотошоп. Различные вопросы типа "а где находится эта кнопачка???" здесь не рассматриваются. Названия функций приведены на русском языке, у кого фотошоп англоязычный, ориентируйтесь по смыслу. -------------------------
Главное требование к большинству текстур в любой игре - бесшовность. то есть, если ее много раз положить плиткой на поверхности большого размера, стыков не должно быть видно.
Для достижения это цели есть несколько способов. Но сначала нам нужна подходящая фотография. Подойдет далеко не любая. Дальше описаны требования к фотографиям, предназначенные в основном для тех, кто занимается съемкой самостоятельно. Но изучив их, будет представление о том, какую фотографию для текстуры выбрать из готового набора. Вот требования к фотографии:
- необходим снимок поверхности под углом как можно ближе к прямом; - освещенность поверхности должна быть равномерной. т.е. никаких бликов, явных теней, особенно сбоку. Лучше всего подойдет съемка в пасмурную погоду, или в неглубокой тени. - искажение перспективы должно быть минимальным. Чтобы понять, что такое "искажение перспективы", попробуйте сфотографировать вблизи кирпичную стену, или любую другую поверхность с параллельными линиями. Будет заметно, что при удалении от центра фотографии линии будут сужаться. Чтобы максимально снизить такое искажение, я снимаю с как можно большего расстояния, используя оптический (ни в коем случае не цифровой!) зум. - изображение на текстуре не должно иметь очень заметных пятен, которые при частом повторе текстуры на большой поверхности очень сильно будут броваться в глаза.В то же время фотография должна быть максимально информативной.
Вообще, не соблюдая этих требований, тоже можно добиться пристойного результата, но это уже относится к мазохизму.
Вот здесь показаны примеры подходящих и неподходящих фотографий: Относительно информативности фотографий, это скорее зависит от целей. Если нам например понадобится сделать текстуру наждачной бумаги, этот критерий примет другой смысл.
Теперь начнем непосредственно сам процесс изготовления текстуры из фотографии. Будем пробовать на той фотографии, которая была признана годной, ее можно взять отсюда http://i078.radikal.ru/0811/cd/277ef0db3a15.jpg, ее разрешение 2048х1536 пикселей. Лучше всего работать с фотографиями исходного разрешения, независимо от того, какой размер текстуры требуется. Почему? Будет ясно позже.
Так вот, открываем фотографию в фотошопе. Она прямоугольная, а нам нужен квадрат (так как большинство используемых а играх текстур квадратные, то поставим целью сделать квадратную текстуру). Чтобы получить квадрат, отсечем ненужное с помощью инструмента "Обрезка". Чтобы рамка отсечения оставалась квадратной, нужно во время операции удерживать клавишу Шифт:
Получаем квадратное изображение. Теперь найдем в Фильтрах->другое-> фильтр "Сдвиг". В открывшемся окошке установим на обоих ползунках значение, равное половине стороны квадрата. в нашем случае это 1536/2=768 пикс.:
После использования фильтра прямо в центре изображения появляются швы, те самые, которые могли появиться в игре, если бы мы всунули туда текстуру без обработки, потому что этот фильтр сдвигает изображение так, что швы, которые находились на краях изображения, стали посередине. Все, что нам требуется теперь, это чуть чуть пошаманить инструментом штамп, чтобы замаскировать все стыки. Рекомендую использовать для инструмента "штамп" кисти максимальной жесткости и 100% давления, это позволяет не разводить муть и сохранить текстуру четкой. После недолгой работы штампом может получиться что то вроде этого:
Почти готово. Теперь снова применим фильтр "Сдвиг", чтобы вернуть изображение в исходное положение. Если все сделано правильно, то уже можно не беспокоиться о том, что на текстуре появятся стыки. Единственное, что осталось сделать на данной текстуре, это убрать темное пятно вверху справа тем же штампом:
ну вот и готово. В качестве теста я попробовал разложить эти текстуры несколько в ряд: http://s41.radikal.ru/i094/0811/cf/748332b3a053.jpg Вполне пристойно. Видны правда мутные полосы по вертикали, но если очень постараться, то и их не будет.
Теперь нужно уменьшить текстуру до того размера, какой нам требуется, например до 1024х1024. Уменьшая текстуру после всех операций, а не с самого начала, мы в какой то мере сможем замаскировать муть, полученную после работы штампом. Ну вот и все.
Удачи в работе
Создание бесшовных текстур. Часть 2
Автор: Argus
Рассмотрим 2 способ избавления от стыков при создании текстур. Для сравнения с первым способом будем использовать ту же фотографию. Сейчас нам понадобится квадрат чуть меньше, чем в прошлый раз, разметим его для себя, либо мысленно, либо на отдельном слое. Необходимо, чтобы с одной стороны по вертикали и с одной стороны по горизонтали еще оставался кусок текстуры. остальное отсечем. Необходимо тщательно выбрать, какой кусок оставить, а какой пойдет под выброс:
далее выделим кусок с правой стороны квадрата по всей высоте, вырежем его и поместим поверх квадрата с левой его стороны вплотную к краям, как показано на рисунке (зеленым выделено для наглядности, так же выделять не надо):
Теперь возьмем ластик, и опять же, советую выбирать кисть максимальной жесткости и силы нажатия. С помощью ластика подотрем этот кусок так, чтобы граница перестала быть видимой. Примерно вот так:
теперь нужно обрезать пустое место справа и слить слои. Мы получили изображение, в котором убран шов по вертикали. Остался горизонтальный шов. Вспомним намеченный нами квадрат, сверху от него оставался свободный кусок. Найдем его. Для этого нужно выделить квадрат по всей ширине изображения, удерживая шифт. нужный нам кусок остался не выделенным. Теперь в меню "выделение - инвертировать выделение" или нажав ctrl+shift+I, получим выделение целевого куска, который затем вырежем на новый слой. переместим его поверх квадрата к его нижней стороне, как показано на рисунке:
далее подотрем ластиком границы, и сольем этот кусок с основным квадратом. Ну вот и все. текстура готова:
Слудет отметить, что этот способ позволяет получить более высокий результат, чем первый, так как здесь практически отсутствует потеря информации и ее дублирование, вызванные работой со штампом. Если перед слиянием кусков выровнять их яркость/контастность/тон/резкость с помощью кистей осветления/затемнения, а так же других средств балансировки изображения, можно добиться очень высоких результатов.
Непосредственно перед практической работой с текстурами в игре необходимо ознакомиться с форматом ДДС. Научиться правильно открывать файлы, обрабатываеть и сохранять. У множества людей с этим трудности, поэтому и попробую рассказать все в деталях.
Для начала нужно убедиться, что в фотошопе установлен плагин dds от nVidia. Его можно скачать с моего сайта. После его установки мы получаем возможность работать с форматом .dds в фотошопе.
А теперь немного теории.
Необходимо ознакомиться с такими понятиями как режим формата ддс, альфа, мип-уровни (MIP-maps), скайбокс (cubemap).
Мип-уровни Представим себе старый запорожец. Вот мы подходим к нему вплотную. Ржавчина внизу кузова, трещины на стекле, покосившаяся ручка на дверце, царапина на крыле. все в максимальных деталях. Отходим метров на 30, уже видим все не так четко, можем различить ржавчину, но царапину на крыле уже не увидим. Отойдем еще на 50 метров. Там уж о деталях говорить не приходится, так как видим практически только очертания. отойдем еще на 100 м, и от запора остается только пятно на горизонте.
Примерно так и работают мип уровни. Если объект находится близко, к нему подставляется текстура максимального разрешения, при удалении от объекта текстура заменяется на ее копию, но меньшего разрешения, если еще дальше отойти от объекта, разрешение текстуры будет еще меньше. Это делается для того, чтобы не отрисовывать детали, которые мы все равно не увидим с расстояния, это позволит сэкономить ресурсы системы и избавит картинку от излишней четкости.
Текстура в формате .dds может содержать в себе несколько своих дубликатов но с разным разрешением. Например, если мы сохраняем текстуру с разрешением 512*512, так же автоматически в файл сохранится эта же текстура с разрешениями 256*256, 128*128, 64*64, 32*32, и т.д. обычно число таких текстур в одном файле достигает 13. И если вспомнить тот запорожец, то когда мы находимся к нему вплотную, на него наложена текстура 512*512, отойдем на 30 метров, разрешение текстуры изменится до 256*256, еще на 30 метров - уже 128*128, и при дальнейшем удалении от запора его текстура будет уменьшаться дальше.
Но далеко не для всех текстур нужны мип-уровни. Если взять например текстуры интерфейса, например кнопки, окна, иконки инвентаря. Мы ведь не можем отойти от них на 100 метров, значит и мип-уровни для них не нужны. Этой логике и нужно следовать, указывая в настройках, сохранять мип-мапы в файл или нет.
Альфа Текстуры перед сохранением в ддс всегда должны быть в формате RGB со сведенными слоями, т.е стандартная прозрачность в ддс не поддерживается. Ее роль играет альфа (A) - 4-й канал формата RGB. Обычно она используется, когда для текстуры необходимо установить прозрачные участки или другие дополнительные свойства. В сталкере на альфу так же может быть повешан глянец для статического освещения. Важно! Текстуры рельефа состоят из 4 каналов, поэтому альфа для них нужна всегда!
Если альфа отвечает за прозрачность, то яркость пикселя обратно пропорциональна прозрачности текстуры. То есть чем темнее участок альфы - тем прозрачнее текстура на этом участке. Если альфа отвечает за глянец, то текстура в тех местах, где альфа светлее, будет блестеть слабее, а в темных местах альфы - сильнее.
Для разных целей необходима альфа разной глубины цвета. Например для всех полупрозрачных объектов, которые должны отбрасывать тень - альфа 1-битная. (т.е. альфа состоит только из черного цвета и белого) К этим объектам относится листва деревьев, сетчатый забор, решетки на полу или потолке, трава. Для объектов, тень от которых не зависит от прозрачности - используется полноцветная альфа (8 бит).
Сохранять или не сохранять альфу в ддс и с какой глубиной цвета - можно указать в настройках при сохранении текстуры.
Режимы формата .dds формат поддерживает множество вариантов сохранения текстур разного количества каналов и их глубины цвета, так же он поддерживает сжатие. При работе с текстурами сталкера не нужно разбираться во всех режимах. Достаточно знать только эти:
8:8:8 RGB - несжатый вариант сохранения текстур БЕЗ альфы 8:8:8:8 ARGB - несжатый вариант сохранения текстур С альфой DXT1 (без альфы) - сжатый формат сохранения текстур БЕЗ альфы (сжатие до 8 раз). DXT1 (с альфой 1 бит) - сжатый формат сохранения текстур С 1-битной альфой (сжатие до 8 раз). DXT3 - сжатый формат сохранения текстур С альфой, имеющей индексированную палитру меньше 256 цветов (сжатие до 4 раз). DXT5 - сжатый формат сохранения текстур С полноцветной альфой (сжатие до 4 раз).
Сжатие DXT всегда ведет к ухудшению качества текстуры, и при нескольких ее пересохранениях в сжатый формат качество падает до такого уровня, что ее уже нелья восстановить средствами фотошопа. Поэтому настоятельно рекомендую использовать сжатие только в самом последнем шаге, когда текстура полностью готова и не планируется ее дальнейшее изменение.
При работе с любой текстурой необходимо точно знать, для чего и как она будет использоваться, чтобы обработать и сохранить ее с нужными параметрами.
А теперь практика.
Попробуем открыть любой файл в формате ддс. Если текстура содержит мип-уровни (MIP-maps), то вылезет такое окно:
Если мы ответили "нет", то открывается обычная текстура, как мы привыкли видеть. Обычно следует отвечать "нет", если конечно у вас нет желания редактировать каждый мип-уровень в отдельности. Лично я никогда этим не пользуюсь, и всегда нажимаю "нет". И Вам не советую. А если мы ответим "да", то перед нами предстанет что то типа этого:
не рекомендую продолжать работу с текстурой в таком виде, исключая случаи, когда вы абсолютно уверены в своих действиях. В обычном случае лучше закрыть ее и открыть снова, ответив "нет" в вышеописанном окошке.
Далее смотрим, есть ли у текстуры альфа, если есть, то и сохранять текстуру после обработки следует с альфой.
Напоминаю. Если текстура с альфой сохраняется для дальнейших тестов, то используем режим (8:8:8:8 ARGB), а если вариант текстуры окончателен, то сохраняем в DXT5 или DXT1 (с альфой 1 бит). Для варианта текстуры без альфы используем (8:8:8 RGB) - для дальнейшей обработки, DXT1 (без альфы) - окончательный вариант.
После обработки нужно сохранить текстуру. Если обработка незначительная, и не было добавлено новых слоев, то используем меню "сохранить", а если созданы дополнительные слои, то удобно использовать "сохранить как...", при этом сведение слоев производить не нужно.
При сохранении текстуры в ддс появляется вот это окно. Здесь много кнопочек, но разобраться здесь не трудно, так как разбираться во всех не нужно.
В группе "Save format" указывается режим сохранения текстуры, а так же тип текстуры из трех: "2D texture" (обычная текстура), "cubemap" (скайбокс), "volume texture" (судя по всему текстура рельефа, я никогда этот тип не использовал). Про скайбоксы будет сказано ниже.
В группе "Mip-map generation" указывается, сохранять или нет мип-уровни в текстуру. первый флажок - сохранять, третий - не сохранять, а второй - это для спецов, тех, кто ответил "да" на вопрос "загружать ли мип-уровни" при открытии текстуры.
Далее идет несколько кнопок, позволяющих произвести более точную настройку работы плагина. Из них можно выделить:
Image options - позволяет настроить некоторые параметры сохранения текстур, например качество сохранения, сглаживание альфы, смена каналов местами и т.д. Так как эти опции не имеют прямого влияния на саму работу с форматом ддс, оставлю их вам на изучение методом тыка, понятней будет.
------------------------- Внимание! Уроки расчитаны на пользователей, уже достаточно хорошо освоивших фотошоп. Различные вопросы типа "а где находится эта кнопачка???" здесь не рассматриваются. -------------------------
Непосредственно перед практической работой с текстурами в игре необходимо ознакомиться с форматом ДДС. Научиться правильно открывать файлы, обрабатываеть и сохранять. У множества людей с этим трудности, поэтому и попробую рассказать все в деталях.
Для начала нужно убедиться, что в фотошопе установлен плагин dds от nVidia. Его можно скачать с моего сайта. После его установки мы получаем возможность работать с форматом .dds в фотошопе.
А теперь немного теории.
Необходимо ознакомиться с такими понятиями как режим формата ддс, альфа, мип-уровни (MIP-maps), скайбокс (cubemap).
Мип-уровни Представим себе старый запорожец. Вот мы подходим к нему вплотную. Ржавчина внизу кузова, трещины на стекле, покосившаяся ручка на дверце, царапина на крыле. все в максимальных деталях. Отходим метров на 30, уже видим все не так четко, можем различить ржавчину, но царапину на крыле уже не увидим. Отойдем еще на 50 метров. Там уж о деталях говорить не приходится, так как видим практически только очертания. отойдем еще на 100 м, и от запора остается только пятно на горизонте.
Примерно так и работают мип уровни. Если объект находится близко, к нему подставляется текстура максимального разрешения, при удалении от объекта текстура заменяется на ее копию, но меньшего разрешения, если еще дальше отойти от объекта, разрешение текстуры будет еще меньше. Это делается для того, чтобы не отрисовывать детали, которые мы все равно не увидим с расстояния, это позволит сэкономить ресурсы системы и избавит картинку от излишней четкости.
Текстура в формате .dds может содержать в себе несколько своих дубликатов но с разным разрешением. Например, если мы сохраняем текстуру с разрешением 512*512, так же автоматически в файл сохранится эта же текстура с разрешениями 256*256, 128*128, 64*64, 32*32, и т.д. обычно число таких текстур в одном файле достигает 13. И если вспомнить тот запорожец, то когда мы находимся к нему вплотную, на него наложена текстура 512*512, отойдем на 30 метров, разрешение текстуры изменится до 256*256, еще на 30 метров - уже 128*128, и при дальнейшем удалении от запора его текстура будет уменьшаться дальше.
Но далеко не для всех текстур нужны мип-уровни. Если взять например текстуры интерфейса, например кнопки, окна, иконки инвентаря. Мы ведь не можем отойти от них на 100 метров, значит и мип-уровни для них не нужны. Этой логике и нужно следовать, указывая в настройках, сохранять мип-мапы в файл или нет.
Альфа Текстуры перед сохранением в ддс всегда должны быть в формате RGB со сведенными слоями, т.е стандартная прозрачность в ддс не поддерживается. Ее роль играет альфа (A) - 4-й канал формата RGB. Обычно она используется, когда для текстуры необходимо установить прозрачные участки или другие дополнительные свойства. В сталкере на альфу так же может быть повешан глянец для статического освещения. Важно! Текстуры рельефа состоят из 4 каналов, поэтому альфа для них нужна всегда!
Если альфа отвечает за прозрачность, то яркость пикселя обратно пропорциональна прозрачности текстуры. То есть чем темнее участок альфы - тем прозрачнее текстура на этом участке. Если альфа отвечает за глянец, то текстура в тех местах, где альфа светлее, будет блестеть слабее, а в темных местах альфы - сильнее.
Для разных целей необходима альфа разной глубины цвета. Например для всех полупрозрачных объектов, которые должны отбрасывать тень - альфа 1-битная. (т.е. альфа состоит только из черного цвета и белого) К этим объектам относится листва деревьев, сетчатый забор, решетки на полу или потолке, трава. Для объектов, тень от которых не зависит от прозрачности - используется полноцветная альфа (8 бит).
Сохранять или не сохранять альфу в ддс и с какой глубиной цвета - можно указать в настройках при сохранении текстуры.
Режимы формата .dds формат поддерживает множество вариантов сохранения текстур разного количества каналов и их глубины цвета, так же он поддерживает сжатие. При работе с текстурами сталкера не нужно разбираться во всех режимах. Достаточно знать только эти:
8:8:8 RGB - несжатый вариант сохранения текстур БЕЗ альфы 8:8:8:8 ARGB - несжатый вариант сохранения текстур С альфой DXT1 (без альфы) - сжатый формат сохранения текстур БЕЗ альфы (сжатие до 8 раз). DXT1 (с альфой 1 бит) - сжатый формат сохранения текстур С 1-битной альфой (сжатие до 8 раз). DXT3 - сжатый формат сохранения текстур С альфой, имеющей индексированную палитру меньше 256 цветов (сжатие до 4 раз). DXT5 - сжатый формат сохранения текстур С полноцветной альфой (сжатие до 4 раз).
Сжатие DXT всегда ведет к ухудшению качества текстуры, и при нескольких ее пересохранениях в сжатый формат качество падает до такого уровня, что ее уже нелья восстановить средствами фотошопа. Поэтому настоятельно рекомендую использовать сжатие только в самом последнем шаге, когда текстура полностью готова и не планируется ее дальнейшее изменение.
При работе с любой текстурой необходимо точно знать, для чего и как она будет использоваться, чтобы обработать и сохранить ее с нужными параметрами.
А теперь практика.
Попробуем открыть любой файл в формате ддс. Если текстура содержит мип-уровни (MIP-maps), то вылезет такое окно:
Если мы ответили "нет", то открывается обычная текстура, как мы привыкли видеть. Обычно следует отвечать "нет", если конечно у вас нет желания редактировать каждый мип-уровень в отдельности. Лично я никогда этим не пользуюсь, и всегда нажимаю "нет". И Вам не советую. А если мы ответим "да", то перед нами предстанет что то типа этого:
не рекомендую продолжать работу с текстурой в таком виде, исключая случаи, когда вы абсолютно уверены в своих действиях. В обычном случае лучше закрыть ее и открыть снова, ответив "нет" в вышеописанном окошке.
Далее смотрим, есть ли у текстуры альфа, если есть, то и сохранять текстуру после обработки следует с альфой.
Напоминаю. Если текстура с альфой сохраняется для дальнейших тестов, то используем режим (8:8:8:8 ARGB), а если вариант текстуры окончателен, то сохраняем в DXT5 или DXT1 (с альфой 1 бит). Для варианта текстуры без альфы используем (8:8:8 RGB) - для дальнейшей обработки, DXT1 (без альфы) - окончательный вариант.
После обработки нужно сохранить текстуру. Если обработка незначительная, и не было добавлено новых слоев, то используем меню "сохранить", а если созданы дополнительные слои, то удобно использовать "сохранить как...", при этом сведение слоев производить не нужно.
При сохранении текстуры в ддс появляется вот это окно. Здесь много кнопочек, но разобраться здесь не трудно, так как разбираться во всех не нужно.
В группе "Save format" указывается режим сохранения текстуры, а так же тип текстуры из трех: "2D texture" (обычная текстура), "cubemap" (скайбокс), "volume texture" (судя по всему текстура рельефа, я никогда этот тип не использовал). Про скайбоксы будет сказано ниже.
В группе "Mip-map generation" указывается, сохранять или нет мип-уровни в текстуру. первый флажок - сохранять, третий - не сохранять, а второй - это для спецов, тех, кто ответил "да" на вопрос "загружать ли мип-уровни" при открытии текстуры.
Далее идет несколько кнопок, позволяющих произвести более точную настройку работы плагина. Из них можно выделить:
Image options - позволяет настроить некоторые параметры сохранения текстур, например качество сохранения, сглаживание альфы, смена каналов местами и т.д. Так как эти опции не имеют прямого влияния на саму работу с форматом ддс, оставлю их вам на изучение методом тыка, понятней будет.
Sharpening - здесь можно изменить четкость мип-уровней. Режим легкого заострения (sharpen soft) позволит немного повысить детализацию объектов вдалеке. я всегда пользуюсь этим режимом.
Config - здесь настраивается работа плагина в целом. например если мы хотим отключить вопрос при открытии текстуры "загружать или нет мип-уровни", то нужно снять галку с опции "Ask to load mip-maps".
Остальное нам не пригодится. Выставив нужные опции в вышеописанных параметрах, жмем "Save"
Теперь подробнее о некоторых специфических типах текстур:
Карты рельефа (bump и bump#) Эти текстуры сохраняются так же как и обычные текстуры с полноцветной альфой, т.е. либо (8:8:8:8 ARGB), либо DXT5. Далее, не следует буквально воспринимать цвета текстур рельефа, наподобие "в сталкире бамп зиленый, а фильтр нвидии делает синий, как быть???" Причина здесь только в порядке каналов. Обычно 3 карта нормалей, которая обычно является белой, находится на канале B, и придает тем самым синий оттенок текстуре в целом. В сталкере же эта карта находится на канале G, поэтому оттенок зеленый. При этом если карту интенсивности блика (канал R) сделать светлой, то в целом текстура bump сталкера будет выглядеть желтоватой.
Скайбоксы (cubemap) Это файлы в формате .dds, которые содержат в себе 6 разных текстур одинакового разрешения, и не имеют мип-мапов. Обычно используются для оформления небесного свода, построенного в виде куба. В фотошопе все 6 текстур для удобства работы выстроены в ряд, (например в Гимпе они расположены на разных слоях):
Как прикрепить карту локации на глобальную карту в ПДА АвторыРуся и ХМК Теория
Попробуем вначале разобраться, что такое глобальная карта и как она работает. Откуда на ней все карты локаций, и каким образом открывая ПДА в разделе карты мы видим метки Кордона на участке обозначающем Кордон, а метки например, Складов – там где они и должны быть.
Итак… Папка gamedata\config, файл game_maps_single.ltx. Откроем его. Поясню, что там внутри за что отвечает.
Эта секция перечисляет все уровни, что есть в игре. Как видно – от Кордона до ЧАЭС-2, включая все подземные уровни. Это список из ТЧ, оригинальная игра.
А вот это самое главное. Здесь определена текстура – она лежит по адресу gamedata\textures\ui, называется ui_global_map – обратите внимание, текстура без расширения указана. bound_rect – это игровые координаты текстуры, нечто вроде сетки координат на глобальной карте. Четыре числа означают крайние точки координат – верхний левый угол глобальной карты имеет координаты 0,0 а нижний правый угол глобальной карты имеет координаты 1024,2634. ОБРАТИТЕ ВНИМАНИЕ, это не пиксели! Сама текстура имеет размер 1024*2048, а может быть и любого другого – но для игры высота карты берётся равной 2634 пункта, при том что ширина сохраняется 1024. Это очень важное замечание – его важность поясним дальше. Max_zoom – тут я думаю ясно, это максимально разрешённое увеличение. То есть самое большее насколько можно «приблизить» изображение в ПДА открыв глобальную карту это в 6 раз. Попробуйте поставить другие значения – иногда получается интересно. Дальше файл заполнен однотипными секциями, описывающими уровни и расположение их карт на глобальной карте. Возьмём несколько для разбора, скажем, Кордон, Агропром, ну и пожалуй, Припять.
Texture – это текстура карты локации. Именно она показывается на мини-карте в игре, именно она же НАКЛАДЫВАЕТСЯ (да-да, сама накладывается) на глобальную карту в том месте, где мы захотим.
bound_rect – это описание крайних координат локации ВНУТРИ самой локации. Тут наверно нужно пояснить. Любой кто имел дело с координатами на уровнях, замечал что икс и игрек (высоту сейчас не будем принимать в расчет) бывают не только положительными, но и отрицательными. Точка на уровне имеющая координаты (0,0) это не угол карты, как можно было бы предположить, а где-то около её середины. Например, на Кордоне точка с координатами 0,0 расположена недалеко от поста Кузнецова под мостом. А вот возле бункера Сидоровича координата икс у игрока (или чего угодно другого, любого объекта в игре) будет отрицательная. А возле блокпоста военных (тот, что на юге, вниз по дороге от деревни новичков) координата игрек будет отрицательной. Так вот, в строке bound_rect последовательно указаны самые минимальные координаты локации и самые максимальные. То есть самый меньший икс, потом самый меньший игрек, потом самый большой икс, и четвёртое число – самый большой игрек. Обратите внимание, эти координаты – вовсе не там, где можно побегать. Нет. Речь идёт об УГЛАХ локации, там где заканчивается земля и начинается пустота. На кордоне юго-западный угол имеет координаты -317.164, -633.718, а северо-восточный 404.880, 811.627. Точность указана до сотых.
Global_rect – вот это именно то, что нам надо. Это – координаты прямоугольника на глобальной карте, тот кусочек куда будет вписана (наложена) карта локации, и где будут с учётом масштаба отображаться все метки локации. Метод указания координат аналогичен, берутся два угла, первый северо-ЗАПАДНЫЙ, второй юго-ВОСТОЧНЫЙ. Обратите внимание, при определении координат на локации отсчёт игрека идёт снизу вверх, а тут наоборот, сверху вниз. То есть точка с координатами 50, 100 будет ВЫШЕ чем точка 50, 200. А точка с координатами 50, 0 – вообще на самом верху. В то время как точка с координатами 50, 2634 – на самом низу глобальной карты. Вообще правило отсчёта координат от верхнего левого угла текстуры характерно для СТАЛКЕРа, не знаю как для других игр использующих dds формат, может так же. Посмотрим на глобальные координаты карты Кордона на большой, глобальной карте. global_rect=355.0,2011.0,576.0,2453.000000 Получается, прямоугольник куда будет вписана карта Кордона определён двумя точками. Первая с координатами (на глобальной карте!) 355.0,2011.0, а вторая с координатами 576.0,2453.000000. Зачем столько нулей – не спрашивайте. Не знаю. Но по этим координатам видно, что карта Кордона будет вписана в прямоугольник, который начинается от 355 по икс и 2011 по игрек и заканчивается на 576 по икс и 2453 по игрек. Итого на глобальной карте размер карты Кордона составит 221*442 пункта. Повторюсь – это не пиксели, а пункты, количество которых определено во второй секции конфигурационного файла, который мы сейчас разбираем.
Интересно, что подземелья Агропрома, например, на глобальной карте тоже есть – но для них отведено всего лишь 2*3 пункта, и находятся они почти посередине карты Агропрома! Именно поэтому когда игрок находится в подземке, его метка всегда светится в районе завода, где прятался Крот при первом заходе на локацию, и практически неподвижна. Похожим образом сделано и с лабораторией Х18 – она на глобальной карте расположена справа от Радара, но размер её прямоугольника всего 2*2 пункта.
Практика
Итак, у нас иметься локация, у которой имеется карты – textures\map\map_lost_villiage.dds например. bound_rect уже известен, если нет перечитайте предыдущую статью. Нам нужно расположить ее на глобальной карте, к примеру вот здесь:
Открываем файл ui_global_map.dds через Stalker Icon Viewer и снимаем координаты верхнего левого угла будущего места расположения локации:
К сожалению на скриншоте не видно курсора. Итак у нас получились координаты: x=180, y=370
Из предыдущей статьи вы возможно узнали что в конфиге глобальная карта имеет координаты 1024,2634, в то время когда текстура всего 1024x2048. Что мы делаем? Запускаем канкулятор и делим 2634 на 2048, у нас получается 1.2861328125 Далее умножаем координату y(370) на получившееся значение(1.2861328125), у нас получаться 475.86…. (округлим)
Далее все просто, скажем наша карта локации 100на100, задаем в global_rect нашей локации 180.0, 475.86, 280.0, 575.86
180.0 - координата x левого края текстуры локации 475.86 – число, которое мы получили, координата верхнего края текстуры локации 280.0 – координата x правого края текстуры локации. Прибавляем к координате левого края локации ширину карты 575.86 - координата y нижнего края текстуры локации. Прибавляем к координате верхнего края локации высоту карты
Создание квестов (базовый уровень) Авторы XiaNi,Keha,BAC9-FLCL
Небольшие правила, следуя которым, можно сберечь себе много нервов:
- всегда сохраняйте резервные копии модифицируемых файлов - старайтесь почаще тестировать внесенные изменения - так проще понять, в чем вы ошиблись (если активно работать пару часов без остановки, не разу не протетировав внесенные изменения, то потом будет очень сложно понять - почему же, черт возьми, игра вылетает при попытке поговорить с Сидоровичем?) - перед началом работы создайте новую папку gamedata, а свои моды спрячьте подальше: работать с "чистой" версией игры не в пример удобнее и проще; особенно противопоказан Repair Mod, который с новыми диалогами часто конфликтует. О том, как создать диалоги и квесты, исключающие возможность конфликта с другими подобными модами, см. часть 4. Создание базового диалога
Начнем создание квеста с написания небольшого линейного диалога.
Открываем файл gamedata\config\gameplay\character_desc_escape.xml и проводим такие манипуляции:
- находим строку "<actor_dialog>escape_trader_done_blockpost_box</actor_dialog>" - добавляем после нее новую - "<actor_dialog>escape_trader_oops</actor_dialog>" - сохраняем изменения
Мы добавили к Диалогу с Сидоровичем новую ветку, вернее, только ссылку на неё. Сама внутренняя структура ветки хранится в файле gamedata\config\gameplay\dialogs_escape.xml, который мы открываем и производим:
- находим в любом месте файла промежуток между </dialog> и <dialog id="..."> - засовываем туда такую конструкцию: <dialog id="escape_trader_oops"> <precondition>escape_dialog.trader_alredy_give_job</precondition> <has_info>tutorial_end</has_info> <phrase_list> <phrase id="0"> <text>escape_trader_oops_0</text> <next>1</next> </phrase> <phrase id="1"> <text>escape_trader_oops_1</text> <next>2</next> </phrase> <phrase id="2"> <text>escape_trader_oops_2</text> <next>1</next> </phrase> <phrase id="3"> <text>escape_trader_oops_3</text> </phrase> </phrase_list> </dialog>
- сохраняем изменения
Теперь у нас прописана структура новой ветки диалога. Осталось сделать еще одну вещь - прописать строки, которые будут отображаться вместо "escape_trader_oops_...".
Для этого откроем файл gamedata\config\text\rus\stable_dialogs_escape.xml и сделаем следующее:
- находим любой удобный промежуток между </string> и <string id="..."> - прописываем туда следующие строки: <string id="escape_trader_oops_0"> <text>Сидрыч, давай поговорим о... водке.</text> </string> <string id="escape_trader_oops_1"> <text> водке? Да какая водка? Нет её у меня, кончилась. Вроде у Волка на чердаке была, что-то он однажды об этом упоминал... Принеси, а?</text>
</string> <string id="escape_trader_oops_2"> <text>Да сбегаю я сейчас, сбегаю... алкоголик, блин.</text> </string> <string id="escape_trader_oops_3"> <text>Беги, беги... сил уж нет ждать.</text> </string>
- сохраняем изменения
Всё. Диалог готов. Можно грузить игру и смотреть, работает ли новая ветка. А теперь будем прикреплять к этому безобразию квест ""Принеси водки Сидоровичу".
Создание базового квеста
Активацию квеста в диалог прикрепить достаточно просто. Проводим с файлом gamedata\config\gameplay\ dialogs_escape.xml следующие манипуляции:
Теперь после фразы Меченого "Да сбегаю я сейчас, сбегаю..." Сидорович таки всучивает нам квест "Принеси водку". Но не спешите тестировать изменения. Мы добавили в диалог упоминание о квесте, хотя он еще не создан.
Исправим это недоразумение. Откройте файл gamedata\config\gameplay\tasks_escape.xml и в начале файла создайте такую конструкцию: <game_task id="esc_test_vodka_task"> <title>Принести водки</title> <!-- заголовок квеста --> <objective> <text>Принести водки Сидоровичу</text> <icon>ui_iconsTotal_find_item</icon> <infoportion_complete>test_quest_vodka_otdana</infoportion_complete> </objective> <objective> <text>Вернуться с водкой обратно</text> <map_location_type hint="esc_dinamit_to_volk">green_location</map_location_type> <object_story_id>Escape_novice_lager_volk</object_story_id> <infoportion_complete>test_quest_vodka_otdana</infoportion_complete> </objective> <objective> <text>Найти водку на чердаке</text> <map_location_type hint="escape_trader">blue_location</map_location_type> <object_story_id>Escape_Trader</object_story_id> <infoportion_complete>test_quest_vodka_otdana</infoportion_complete> </objective> </game_task>
Мы прописали данные о квесте: название, иконку, строки заданий, расположение маркеров и т.д.
К этому файлу мы еще вернемся, т.к. в этом варианте многое проставлялось не иначе как от балды. Я еще подумаю, как заставить задание "Вернуться с водкой обратно" появиться в PDA, а то оно что-то не желает явить себя народу... впрочем, ладно, главное, что все работает и не вылетает. А исправление столь мелких багов - дело десятое. Продолжим.
Откроем файл gamedata\config\gameplay\info_l01escape.xml и зарегистрируем до того отсутствовавшие в игре типы условий (они нам еще пригодятся для завершения работы над квестом):
- после строки <game_information_portions> прописываем: <info_portion id="test_quest_vodka_otdana"></info_portion>
Теперь займемся одной небольшой, но нужной вещью - прописыванием экранных подсказок, которые высвечиваются при получении/выполнении этапа/завершении задания.
Для этого откроем файл gamedata\config\text\rus\string_table_tasks_escape.xml и пропишем там: <string id="esc_test_prinesti_vodku"> <text>Принести бутылку водки</text> </string> <string id="esc_test_prinesti_vodku_1"> <text>Найти водку на чердаке у Волка</text> </string> <string id="esc_test_prinesti_vodku_2"> <text>Принести водку Сидоровичу</text> </string>
Теперь можно тестировать, что получилось. Сверяем результаты:
- по окончанию разговора про водку у вас появляется новое задание - в задании маркером отмечен Волк (ближайший к чердаку маркер, потому и отмечен) - при получении задания на экране высвечивается уведомление
Можно приступать к третьей стадии. Что мы забыли? Правильно - возможность выполнить квест.
Реализация возможности выполнить квест
На самом деле - все просто. Все условия и т.д. уже нами созданы, осталось только применить их в диалоге. Давайте несколько изменим его структуру, сделаем его ветвистым и функциональным:
0. Сидрыч, давай поговорим о... водке. ( переход к 1)
1. О водке? Да какая водка? Нет её у меня, кончилась. Вроде у Волка на чердаке была, что-то он однажды об этом упоминал... Принеси, а? ( выбор - переход к 2, 4, 5; изначально доступен только 2 вариант )
2. Да сбегаю я сейчас, сбегаю... алкоголик, блин. ( получение квеста, переход к 3, после этого перестает быть доступен )
3. Беги, беги... сил уж нет ждать. ( конец, переход к списку веток Сидоровича )
4. Вот она, твоя бутылка водки. Ну, вернее, не твоя, а Волка... ( появляется только при наличии водки в инвентаре, при выборе водка передается Сидоровичу, квест выполняется, идет переход к 7 )
5. Извини, Сидрыч, я пока еще не раздобыл, терпи... ( появляется только если взять квест, переход к 6 )
6. А ну марш отсюда! Без бутылки пришел... ууу, вражина... ( переход к 8 )
7. Теперь моя будет, Меченый! Ты так Волку и передай. Спасибо, выручил... держи награду. ( выдача награды, переход к 8 )
8. Ну тебя в пень... ( конец, переход к списку веток Сидоровича )
Теперь добавим в игру скрипты "передача денег" и "передача водки". Откройте файл gamedata\scripts\escape_dialog.script и перед разделителем "Trader" добавьте туда следующие строки: function transfer_deneg(first_speaker, second_speaker) dialogs.relocate_money(second_speaker, 4000, "in") end
function otday_vodku (npc, actor) dialogs.relocate_item_section(npc, "vodka", "out") end
function have_a_vodka (stalker, player) return stalker:object ("vodka") ~= nil end
Готово. Запускайте игру и любуйтесь.
Для тех, кто еще с нами - сейчас мы модифицируем квест так, чтобы исключить конфликты с другими подобными модами.
Реализация совместимости
Из-за чего наш мод не может работать вместе с аналогичными ему модами? Да потому, что файлы dialogs_escape.xml и некоторые другие у них пересекаются. Поэтому выделим их отдельно от основных диалогов:
Вместо dialogs_escape.xml мы будем испольховать новый - dialogs_new.xml Вместо stable_dialogs_escape.xml мы будем использовать файл stable_dialogs_new.xml (важно! не знаю почему, но он должен лежать в text\..., а не в text\rus\...)
Соответственно, весь реализованный нами новый контент перекидываем в пустые файлы (соблюдая форматирование), подчистив за собой на старом месте.
Единственное, что останется сделать после установки того же Repair Mod'а - заново добавить ветку диалога Сидоровичу в файле character_desc_escape.xml. Остальное в новом варианте нашего мода переписывать не придется - для диалогов отведено три файла.
Остальные файлы относятся уже к квестовой части и ни с чем пересекаться не могут - где вы видели другие моды с новыми квестами? Я - нет.
Откройте файл gamedata\config\localization.ltx и зарегистрируйте там stable_dialogs_escape.ltx. Потом откройте файл gamedata\config\system.ltx и в разделе "Dialogs" в конце строки (после dialogs_aes) пропишите dialogs_new (без ".ltx"!).
Все. Теперь ваши диалоги будут подгружаться из сторонних файлов.
Отдельное спасибо:
XiaNi - за страшный и непричесанный, но работающий пример квеста, на основе которого я и освоил принципы квестостроения =)
Keha – за урок по созданию новых диалогов Дополнения
1. Если изменить шапку нашего диалога в файле dialogs_escape.xml со старого варианта на такой, то ветка исчезнет после выполнения задания: <dialog id="escape_trader_oops"> <precondition>escape_dialog.trader_alredy_give_job</precondition> <has_info>tutorial_end</has_info> <dont_has_info>test_quest_vodka_otdana</dont_has_info> <phrase_list>
Добавлено (23.12.2009, 23:20:09) --------------------------------------------- Мануал по созданию модификаций для начинающих.Часть 1. Автор: Alex[_LP_
Если вы не знаете, как сделать невидимые аномалии, как изменить силу оружия, как изменить носимый вес и пр., то вы пришли по адресу. В этой статье мы рассмотрим структуру файлов и папок Сталкера, а также вы сможете научиться создавать свои собственные модификации.
Вступление: Как вы наверно заметили, в папке с игрой содержатся несколько файлов типа gamedata.dbN , где N – это число или буква. Это игровые архивы, в которые запакованы все файлы конфигураций, видеоролики, музыка, звуки, скрипты и прочее. Можно их править HEX-editor’ом, но лучше скачать специальную утилитку STALKER_Data_Unpacke r и распаковать в отдельную папку(с именем gamedata, позже поймёте почему) их содержимое. Вот после этого можно начать разгребать весь тот мусор, который вы извлекли.
Структура файлов и папок: Рассмотрим, что-же содержится в папке gamedata: Папка ai – в ней содержатся файлы типа *.efd, через которые очевидно управляется искусственный интеллект тех же npc например. Папка anims – здесь и так всё понятно, игровая анимация, а также эффекты камеры. Папка config содержит в себе многие игровые параметры, к ней мы ещё вернёмся. Папка levels – это игровые уровни, ака локации, на которые поделена игра (как карты в CS) Папка meshes – игровые модели, в формате .ogf Папка scripts – скрипты Папка shaders – шейдеры, для двух рендеров(DX8 и 9) Папка sounds – звуки и музыка, кот. используются в игре. Формат .ogg* Папка spawns – отвечает за самую ужасную вещь в игре – респаун противников и др. людей, животных. Папка textures – в ней содержаться текстуры домов, оружия, монстров и др. Формат - .dds(DirectDraw Surface Image) Файлы:game.graph, gamemtl.xr, lanims.xr, particles.xr, resource.h, senvironment.xr, shaders.xr, shaders_xrlc.xr, stalkergame.inf.В звуках, кстати, можно найти много интересного, например: в папке sounds\car содержатся звуки машин(которых в игре нет), а sounds\music\harmoni ca_1.ogg – файл губной гармошки. Ах да, чуть не забыл, самый главный лол, это файл sounds\car\trabantno ise.ogg
Введение в моддинг: Именно с папкой config придётся работать для редактирования многих параметров игры. Но начнём сначала: Перед тем, как начать редактирование файлов игры, нужно в каталог Сталкера поместить ту самую папку gamedata, в которую были извлечены игровые файлы. *Все файлы нам не понадобятся, поэтому можно оставить только папки config, scripts(а конкретно файл se_respawn*****ipt), textures, sounds, а всё остальное удалить(а можно и не удалять) Также хочу заметить, что если распаковать все архивы .dbN в папку с игрой, то это может дать несколько дополнительных FPS.
Текстуры:В папке textures лежат файлы формата .dds, которые можно открыть программой Nero PhotoSnap Viewer(входит в состав NERO7) например или windows texture viewer (63кб), и там же отредактировать по вкусу. Так, например, существует мод, уменьшающий размер PDA Меченого. Текстура PDA находится по адресу textures\ui\ui_pda.d ds.
Скрипты:se_respawn*****ipt – файл, отвечающий за респаун. Время респауна можно уменьшить, путём небольших изменений в этом файле. Он открывается обычным блокнотом(notepad). Ищем в нём строку idle_time:setHMSms( 0, 0, 0, math.random(self.idl e_spawn_min, self.idle_spawn_max) *1000) и меняем её на idle_time:setHMSms( math.random(X, Y), 0, 0, math.random(self.idl e_spawn_min, self.idle_spawn_max) *1000) где X и Y - числа, задают диапазон случайной переменной в часах отвечающей за респаун.
Звуки и музыка: Любой файл в папке sounds можно заменить на другой, но при этом нужно сохранить все параметры звукового файла, который был использован в игре. Например, чтобы заменить музыку в приёмнике у Сидоровича, нужно файл sounds\scripts\magni tofon\magnitofon_2.o gg, заменить на любой другой.(У оригинального файла винамп мне выдал свойства: Average bitrate : 60 kbps Nominal bitrate : 80 kbps Channels : 1 Sampling rate: 44100 Hz.
Config/Weapons: Параметры оружия вы можете найти в папке config\weapons, файлы типа w_ak74.ltx открываются тоже блокнотом. Разберём содержимое файла например w_groza.ltx Во первых стоит обратить внимание на значение пременной(буду их так называть) cost, это цена оружия, т.е. сколько гроза будет стоить у продавца. Переменная weapon_class означает, к какому классу относится оружие, в данном случае - assault_rifle. ammo_limit – лимит боеприпасов(в игре по-моему не используется) ammo_mag_size – размер магазина. Можно поставить например 900, тогда о перезарядке можно совсем не вспоминать. ammo_class – класс патронов, используемых оружием. Здесь [/b]ammo_9x39_pab9[/ b], ammo_9x39_sp5, ammo_9x39_ap. hit_power – сила оружия. Чем больше, тем лучше silencer_hit_power - сила оружия, когда на него одет глушитель. misfire_probability - вероятность осечки при максимальном износе. condition_shot_dec - увеличение износа при каждом выстреле. visual – модель оружия. zoom_enabled - поддерживается ли оптика. Config/Сreatures:actor.ltx – параметры главного героя. В этой же папке находятся файлы с параметрами npc, монстров и пр. Рассмотрим некоторые переменные на примере actor.ltx visual – модель персонажа. max_walk_weight - максимальный вес, при достижении которого игрок перестает двигаться. pickup_info_radius – радиус от ГГ, в котром над предметами выводятся их названия. camera_height_factor – высота ГГ. По умолчанию стоит 0.85, но можно увеличить рост ГГ до 0.95 например. disp_base – разброс. Если уменьшать, то и разлёт уменьшается соответственно. wound_incarnation_v - скорость заживления раны. cant_sprint_power_be gin - порог силы меньше которого актер не может бежать в спринте. hit_probability_gd_n ovice hit_probability_gd_s talker hit_probability_gd_v eteran hit_probability_gd_m aster Эти строчки отвечают за вероятность попадания по вам, при разных уровнях сложности. Хотите чтобы враги стреляли не очень метко, уменьшайте значения. Также в файле присутсвуют комментарии на русском языке, так что разобраться в остальных переменных не составит труда.
Config/System.ltx: start_blood_size - размер раны чтоб начала капать кровь. stop_blood_size - размер раны чтоб кровь остановилась. max_weight – вес, с которым ГГ может бежать. Config/Misc.ltx:В дополнение к конфигам оружия: cвойства патронов находятся в файле weapons.ltx, а бронежилетов – в outfit.ltx. Свойства артефактов находятся в файле artefacts.ltx и файлах zone_ART.ltx, предметов – items. ltx, где ART– название артефакта(напримерzone_gravi.ltx). Параметры артефактов: health_restore_speed - скорость восстановления здоровья (0.0001 = +100%) radiation_restore_sp eed - скорость накопления радиации (0.0004 = 4). Если поставить отрицательное число, то артефакт будет ускорять выведение радиации. idle_particles – если закоментить её символами «--« -, то аномалия исчезнет. Чтобы отключить звуковое оповещение, то находим строку visible_by_detector и меняем on на off. Иммунитеты:strike_immunity - удар. shock_immunity - электрошок. chemical_burn_immuni ty - химический ожог. telepatic_immunity - телепатия. radiation_immunity - радиация. wound_immunity - разрыв. explosion_immunity - взрыв. fire_wound_immunity - огнестрел. items.ltx:
Параметры предметов: В этом файле в квадратных скобках написан тот предмет, чьи параметры идут ниже, за квадр. скобками. Например: [kolbasa]:identity_i mmunities. Параметры на примере колбасы: class – к какому классу принадлежит предмет. visual – модель. cost – цена. eat_health – сколько восстанавливает здоровья.(если будет 0, то колбаса лечить не будет.) eat_power - сколько восстанавливает силы. eat_radiation - сколько выводит/или добавляет радиации. (Насчёт этого не уверен, надо тестить.) inv_weight – вес предмета.
Outfit.ltx:Параметры костюмов: actor_visual – модель костюма. inv_weight – вес костюма. cost – цена костюма. коэффициенты иммунитета самого костюма: burn_immunity см. коэффиц. ... fire_wound_immunity ; NO RESISTANCE burn_protection - коэффициент защиты от огня strike_protection - коэффициент защиты от пуль shock_protection - коэффициент защиты от молний wound_protection - коэффициент защиты от кровотечений (?) radiation_protection - коэффициент защиты от радиации telepatic_protection - коэффициент защиты от телепатии chemical_burn_protec tion - коэффициент защиты от хим. ожогов. explosion_protection - коэффициент защиты от взрыва fire_wound_protectio n - коэффициент защиты от кровотечений(от огня) nightvision_sect – тип ночного видения(плохой/хорош ий). Если ПНВ нету, то строку добавить, если его нужно убрать, строку закомментируйте(--).
Торговцы: Вещи, которые продают торговцы можно отредактировать(доба вить/убрать) в файлах с именем [b]trade_YYY.ltx[.B] , где [b]YYY[.B] – это имя торговца(например [b]trade_barman.ltx[.B]) Итак, поехали: Структура файла на самом деле очень проста, под зачком ;прописаны сами предметы, а после него – комментарий(чтоб понятно было). Например ;Аммуниция. В квадратные скобки заключены([barman_ge neric_buy]), как бы сказать, "условия". Лучше показать на примере: В самом начале(практически) файла trade_barman.ltx идёт строка содержания [barman_generic_buy] , т.е. она означает, что ниже прописанные предметы торговец может купить. Сами предметы например: ;Артефакты af_medusa = 1, 0.3 af_cristall_flower = 1, 0.3 af_night_star = 1, 0.3 af_vyvert = 1, 0.3 af_gravi = 1, 0.3 af_gold_fish = 1, 0.3 af_blood = 1, 0.3 af_mincer_meat = 1, 0.3 или ;ADDONSwpn_addon_scope = 0.7, 0.2 wpn_addon_scope_susa t = 0.7, 0.2 Посмотрим какие ещё "условия" содержит этот файл и их значение: [supplies_start] - начальный ассортимент [supplies_after_dark valley] - ассортимент, после выполнения квеста в тёмной долине [supplies_after_brai n] - ассортимент, после "выжигателя мозгов" [barman_start_sell] - цены по которым торговец(бармен в данн. сл.) продает в начале [barman_after_darkva lley_sell] - аналогично [barman_after_brain_ sell] Итак: чтобы добавить предмет к торговцу, после строки [supplies_start], находим интересующую нас категорию(а это может быть: ;Аммуниция/;Оружие/; Броники/;Медикаменты /;Еда и др.) и после всех прописанных в данной категории предметов добавляем ещё одну строчку для своего предмета(а именно название модели(т.к. оно совпадает с названием самого предмета) и после знака =параметры(о них чуть ниже)). Ну я так и знал что вы ничего не поймёте, поэтому пример: Чтобы добавить бармену винтовку Гаусса, находим строки после условия [supplies_start] - ;Оружиеwpn_pb = 3, 0.6 wpn_walther = 3, 0.6 wpn_mp5 = 3, 0.6 wpn_ak74u = 3, 0.5 и внизу прописываем wpn_gauss = N, n.n *о значениях после знака = см. ниже. Все имена оружия, амуниции, снаряжения и т.п. можно найти в папках gamedata\meshes\equi pments, gamedata\meshes\weap ons, gamedata\meshes\food .Заметьте, что wpn_gauss нужно писать без расширения .ogf Значения: После знака =у вальтера например стоит цифра 3, а после запятой – 0,6. Первое, для гаусса у нас стоит N, это количество(в штуках) предметов. Т.е. если поставить значение 999, то у бармена будет 999 гауссов. А второе:1. В разделах supplies вторая цифра это вероятность появления данного предмета. 2. В разделе buy - первая цифра максимальная цена покупки, вторая минимальная (зависит от отношения торговца к Меченному - рейтинг, репутация)[Предполож ительно. – прим.] 3. Соответственно в разделах sell - первая цифра минимальная цена продажи, вторая - максимальная (точнее множитель на "истинную цену" предмета). Tnx GreyL. В итоге должно получиться: [supplies_start] ;Оружие wpn_pb = 3, 0.6 wpn_walther = 3, 0.6 wpn_mp5 = 3, 0.6 wpn_ak74u = 3, 0.5 wpn_gauss = 6, 0.6 И тогда у торговца мы получим ровно 6 винтовок Гаусса.
Создание рандомного выбора муз. заставки главного меню: При заходе на экран главного меня муз. заставка будет выбираться случайно из добавленных вами. 1. В директорию gamedata\sounds\musi c\ положить два канальных ogg-файла с нужной музыкой, например: my_music_l.ogg (левый канал) и my_music_r.ogg (правый канал) 2. В текстовом редакторе открыть файл gamedata\config\ui\u i_mm_main.xml, найти в нем строку: и заменить на: 3. В этом же файле найти строку: music\wasteland2и ниже нее выставить следующую строку: music\my_music4. Сохранить файл. 5. Если требуется вставить больше муз. заставок, то в параметре random укажите их количество. Автор идеи - VM
NPC покупают оружие: Чтобы обычные сталкеры и др. npc могли покупать у ГГ оружие, нужно править файл gamedata\config\misc \trade_generic.ltx. Его структура точно такая же, как и у любого другого торговца. После строки [generic_buy] находим строку ;Оружие и после неё у каждого вида ставим зачения N и n.n. Можно например так: ;Оружиеwpn_pm = 0.08, 0.12 wpn_pb ;NO TRADE wpn_fort = 0.08, 0.12 wpn_hpsa = 0.08, 0.12 wpn_beretta = 0.08, 0.12 wpn_walther = 0.08, 0.12 wpn_sig220 ;NO TRADE … … А чтобы у npc продавалось оружие, нужно проделать тоже самое, только после строки [generic_sell] Метод я проверял, вроде как работает. Чтобы после покупки персонаж не выкидывал купленное оружие(а также чтобы подбирал его с земли), в файле gamedata\config\crea tures\m_stalker.ltx строку can_select_items = off меняем на can_select_items = on и строку use_single_item_rule = on меняем на use_single_item_rule = off .
Транспорт:Транспорт в игре есть! Пока способ заспаунить его не известен общественности, но тем не менее в сети появился файл all.spawn, копируйте его в папку gamedata\spawns. Мод предназначен только для пропатченной версии игры(1.0001). После начала новой игры в первой локации рядом с Сидоровичем появятся несколько машин, в т. ч. и Камаз. Чтобы включить двигатель в консоли пишем [b]bind turn_engine kb[b], закрываем консоль, жмём кнопку b и наслаждаемся…. Рассмотрим параметры машин, конфиги находятся в папке gamedata\config\mode ls\vehicles. [car_definition] – после строки идут коментарии на русском языке, перейдём сразу к следующему. … --Factory parameters of Engine -- - параметры двигателя(описание не претендует на совершенно точное) fuel_tank – вместимость бака. engine_power – мощность двигателя. hand_break_torque - сила торможения [damage_items] – повреждения частей машины back_left_wheel - заднее левое колесо back_right_wheel -заднее правое колесо front_left_wheel -переднее левое колесо front_right_wheel - переднее правое колесо left_door - левая дверь right_door - правая дверь [immunities] burn_immunity = 0.5 ;коэффициенты иммунитета strike_immunity = 0.1 shock_immunity = 0.0 wound_immunity = 0.01 radiation_immunity = 0.0 telepatic_immunity = 0.0 chemical_burn_immuni ty = 0.0 explosion_immunity = 0.4 fire_wound_immunity = 0.0005
P.S. Чтобы сделать вид от третьего лица, в файле user.ltx(ну если не знаете где он находится, то специально для вас в Microsoft сделали поиск в Windows) пишем после строки unbindall: bind cam_1 kF1 bind cam_2 kF2 bind cam_3 kF3 В игре жмём кнопки F1, F2 или F3 для смены вида. Очень нужно при езде на БТР
Объекты, которые можно перемещать: В файле system.ltx в конце есть строка [ph_capture_visuals] , после неё идёт список перетаскиваемых вещей. Например чтобы можно было таскать монстров, в конец добавляем: //Monsters monsters\mutant_boar \mutant_boar monsters\krovosos\kr ovosos monsters\kontroler\k ontroler monsters\dog\dog monsters\flesh\flesh monsters\dog\dog_cmn _1 monsters\flesh\flesh monsters\poltergeist \poltergeist monsters\pseudodog\p seudodog monsters\snork\snork monsters\burer\burer monsters\chimera\chi mera monsters\cat\cat monsters\zombi\zombi _1 monsters\rat\rat_1 monsters\tushkano\tu shkano
Как сделать так, чтоб не убиралось из рук оружие в некоторых локациях?: В файле gamedata\scripts\sr_ no_weapon*****ipt найти и закомментировать (поставить перед ними --) строки bind_stalker.hide_we apon() bind_stalker.restore _weapon() и в файле zone_no_weapon*****i pt ищем строки hide_weapon() и заменяем их на restore_weapon() Способ подходит и для предыдущего файла.
Как приделать к оружию оптику, глушитель, подствольник?: Находим в файле оружия строку ;addons и пишем после(без комментарие естественно(или перед ними ставьте + значения после знака = можно менять): ;addons scope_status = 2 0 - нет,1 - несъемный, 2 - можно ставить прицел silencer_status = 0 0 - нет,1 - несъемный, 2 - можно ставить глушитель grenade_launcher_sta tus= 0 0 - нет,1 - несъемный, 2 - можно ставить подствольник zoom_enabled = true Вкл/выкл возможность зума scope_zoom_factor = 50 значение зума scope_name = wpn_addon_scope название прицепляемого прицела scope_x = 47 положение прицела на картинке, x scope_y = 0 положение прицела на картинке, y silencer_name = wpn_addon_silencer название глушителя silencer_x = 218 положение глушителя на картинке, x silencer_y = 9 положение глушителя на картинке, y grenade_launcher_nam e= wpn_addon_grenade_la uncher название подствольника grenade_launcher_x = 126 положение подствольника на картинке, x grenade_launcher_y = 24 положение подствольника на картинке, y
Мануал по созданию модификаций для начинающих.Часть 2.
Как убрать/увеличить время для обычных квестов?: В файле gamedata\config\misc \task_manager.ltx найти и изменить все строки вида time = 86400 Чтобы совсем убрать лимит - просто закомментировать их (--)
Как убрать intro-ролики в начале?: В свойствах ярлыка прописываем после пути к exe-шнику: -nointro Получиться должно что то вроде(это как у меня): "D:\Games\S.T.A.L.K. E.R. Shadow of Chernobyl\bin\XR_3DA .exe" -nointro
Как включить motion blur?:
В свойствах ярлыка прописываем после пути к exe-шнику: -mblur В файле user.ltx(можно и в консоли) параметру r2_mblur присваиваем значение например 0.15 Работает только на DirectX 9.
Как увеличить время спринта?: В файле actor.ltx меняем параметр sprint_koef.
Как поменять кол-во жизни монстрам?: В файле m_*.ltx(где * - название монстра, например m_controller.ltx; находится в папке gamedata\config\crea tures) меняем параметр health
Оружие загораживает пол-экрана. Как это исправить?: В файле конфига выбранного оружия меняем: position = 0, -0.075, 0 ; было 0,0,0 zoom_offset = -0.112400,0.091800,- 0.115000 ; было -0.112400,0.016800,- 0.115000
Где найти файл user.ltx?: Для Windows XP в директории X:\Documents and Settings\All Users\ Общие документы \STALKER-SHOC Для Windows Vista в директории X:\Users\Public\Docu ments\STALKER-SHOC
Как изменить силу врагов?: В файле gamedata\config\crea tures\actor.ltx найти строки hit_probability_gd_n ovice = 0.20 hit_probability_gd_s talker = 0.30 hit_probability_gd_v eteran = 0.40 hit_probability_gd_m aster = 0.50 Они отвечают за вероятность попадания по вам при разных уровнях сложности.
Гармошка: Для возврата в игру губной гармошки, ищем в папке gamedata\scripts файл xr_kamp*****ipt и открываем его блокнотом. Далее ищем строку -- играть на гармошке . Сам скрипт выглядит так: -- играть на гармошке -- if npcbject("harmonica_a") then -- self.npc[npc_id].sta tes["play_harmonica" ] = true -- self.npc[npc_id].sta tes["wait_harmonica" ] = true -- self.kamp_states["pr e_harmonica"] = true -- self.kamp_states["ha rmonica"] = true -- self.kamp_states["po st_harmonica"] = true -- else self.npc[npc_id].sta tes["play_harmonica" ] = false self.npc[npc_id].sta tes["wait_harmonica" ] = false self.kamp_states["pr e_harmonica"] = false self.kamp_states["ha rmonica"] = false self.kamp_states["po st_harmonica"] = false -- end
В данном случае знак -- означает, что строки скрипта игра не использует, а просто пропускает их, переходя к следующей части. Значит нужно убрать знак – из тех строк, которые нам нужны. Должно получится: -- играть на гармошке if npcbject("harmonica_a") then self.npc[npc_id].sta tes["play_harmonica" ] = true self.npc[npc_id].sta tes["wait_harmonica" ] = true self.kamp_states["pr e_harmonica"] = true self.kamp_states["ha rmonica"] = true self.kamp_states["po st_harmonica"] = true else self.npc[npc_id].sta tes["play_harmonica" ] = false self.npc[npc_id].sta tes["wait_harmonica" ] = false self.kamp_states["pr e_harmonica"] = false self.kamp_states["ha rmonica"] = false self.kamp_states["po st_harmonica"] = false end Всё, теперь можете запускать игру и наслаждаться.*
Как менять скорострельность и удобность оружия?: В папке gamedata/config/weap ons в файлах конфигурации оружия ищи
control_inertion_fac tor
чем меньше параметр - тем выше удобство. и rpm - скорострельность.
Как положить оружие в другой слот?: В папке gamedata/config/weap ons в файлах конфигурации оружия ищи SLOT и меняй на 1 (вместо ножа) или 2 (пистолетный слот)
Добавление новых опций в меню игры?: Открываем файл gamedata\config\ui\u i_keybinding.xml. В нём находим строку
и после неё пишем:
Таким образом в меню игры добавляются 4 новых опции, а именно: смена камеры и кнопка включения двигателя. Также можно добавлять сюда др. клавиши(если знать консольные команды)
Скрипты дверей: Покажу вам на примере, как открыть дверь в саркофаге без дешифра) мы просто сделаем дверь открытой по умолчанию, этот трюк можно использовать в любом направлении, в том числе и для новых квестов Идём в gamedata\config\scri pts и ищем скрипт нужной двери или объекта, нам нужна дверь в саркофаге и это sar_door.ltx Вот вам скрипт с моими комментариями, мои комментарии после символа ;, в вашем скрипте они не нужны, так что удалите их если будете копировать отсюда...
[logic] ;Основное действие active = ph_door@locked ; При нажатии кнопки "Действия" выполняется скрипт [ph_door@locked]
[ph_door@locked] ; То что выполняется сейчас locked = true ; Закрыто на замок, значение правда ("Закрыто", при нажатии на кнопку действия ничего не произойдёт) closed = true ; Прикрыта, правда ("Прикрыта", при нажатии на кнопку действия дверь октроется) tip_open = tip_door_coded ; Всплывающая подсказка "Дверь закодирована" on_info = {=actor_has_decoder} ph_door@coded ; При нажатии на кнопку действия идёт проверка есть ли декодер
[ph_door@coded] ; Если есть декодер то... locked = true ;Закрыто, правда closed = true ;Прикрыто, правда tip_open = tip_door_decode ; Всплывающая подсказка "Декодировать" on_info = {!actor_has_decoder} ph_door@locked on_use = ph_door@decoding %+sar_access_decodin g% ; При начале декодирования, пошёл процесс декодирования и выполняется скрипт sar_access_decoding
[ph_door@decoding] ; В процессе декодирования locked = true closed = true tip_open = tip_door_decoding on_info = {+sar_finish_decodin g} ph_door@unlocked ; Завершение скрипта sar_finish_decoding и выполнение ph_door@unlocked
[ph_door@unlocked] ; Дверь разкодирована и открыта locked = false closed = false show_tips = false
Если мы хотим увидеть правдивые концовки, но мы уже в саркофаге и у нас нет дешифра, то мы просто можем изменить везде locked = false на true closed = false на true И в зависимости что вам надо и где можете менять и изменять, тут всё предельно просто и понятно... ________________________________________________________________________________ ________
Как собрать созданный мной мод в файл с расширением .db (например gamedata.db9)? Пока никак. Пускай хранится в папке gamedata.
Чем открывать файлы с расширением .ltx, .script? Текстовым редактором (например блокнотом).
Какова структура файлов и папок в игре? Папка ai - содержит в себе файлы с расширением .efd через которые управляется искусственный интеллект. Папка anims – содержит в себе файлы отвечающие за игровую анимацию, а также эффекты камеры. Папка config – содержит в себе различные игровые параметры. Папка levels – содержит в себе игровые уровни (карты/локации). Папка meshes – содержит в себе файлы с расширением .ogf - это модели (персонажи, предметы и т.д.). Папка scripts – содержит в себе скрипты игры. Папка shaders – содержит в себе шейдеры, для двух рендеров(DX8 и DX9). Папка sounds – содержит в себе файлы с расширением .ogg - это звуки и музыка. Папка spawns – содержит в себе файлы отвечающие за респаун NPC в игре (противники, люди, животные и т.д.). Папка textures – содержит в себе файлы с расширением .dds - это текстуры игры.
Чем распаковать архивы gamedata.db*? Программой S.T.A.L.K.E.R. Data Unpacker например.
Как изменить время респауна NPC? В файле S.T.A.L.K.E.R. - Shadow of Chernobyl\gamedata\scripts\se_repawn.scripts найдите строку idle_time:setHMSms( 0, 0, 0, math.random(self.idle_spawn_min, self.idle_spawn_max)*1000) и исправить на idle_time:setHMSms( math.random(Первое число, Второе число), 0, 0, math.random(self.idle_spawn_min, self.idle_spawn_max)*1000) где первое и второе числа задают диапазон случайной переменной в часах отвечающей за респаун.
Как увеличить рост персонажа? (поднять камеру) В файле S.T.A.L.K.E.R. - Shadow of Chernobyl\gamedata\config\creatures\actor.ltx найти переменную camera_height_factor и увеличить примерно до 0.95 (это нормальный рост глаза-в-глаза)
Как изменить силу оружия? В папке S.T.A.L.K.E.R. - Shadow of Chernobyl\gamedata\config\weapons\ лежат файлы конфигурации – откройте необходимый вам и найдите строку hit_power – измените её значение, как вам нужно.
Как изменить цены? Оружие – в папке S.T.A.L.K.E.R. - Shadow of Chernobyl\gamedata\config\weapons\ найдите нужный вам файл, в нём найдите строку cost и вместо указанной цены впишите такую, какую вам нужно. Патроны – в той же папаке файл weapons.ltx в нем строка cost для каждого вида патронов. Предметы – файл S.T.A.L.K.E.R. - Shadow of Chernobyl\gamedata\config\misc\items.ltx – аналогично. Броня – там же файл outfit.ltx – аналогично
Как изменить носимый вес? В файле S.T.A.L.K.E.R. - Shadow of Chernobyl\gamedata\config\creatures\actor.ltx найдите переменную max_item_mass – это максимальный вес при достижении которго игрок перестает двигаться. В файле S.T.A.L.K.E.R. - Shadow of Chernobyl\gamedata\config\system.ltx измените переменную max_weight – это вес который игрок несет не напрягаясь.
Как сделать невидимые аномалии? В папке S.T.A.L.K.E.R. - Shadow of Chernobyl\gamedata\config\misc\ найдите файл отвечающий за интересующую вас аномалию (например грави - zone_gravi.ltx) в файле найдите строку idle_particles = anomaly2\gravity_idle и закоментирйте её символами "--" - все визуально ничего нет. Что бы отключить еще и звуковое оповещение найдите строку visible_by_detector и замените значение on на off
Как сделать чтобы еда не лечила? Найдите в файле S.T.A.L.K.E.R. - Shadow of Chernobyl\gamedata\config\misc\items.ltx нужный вам продукт (например колбасу - Kolbasa), под ним найдите переменную eat_health и измените её на 0.
Как изменить силу врагов? В файле S.T.A.L.K.E.R. - Shadow of Chernobyl\gamedata\config\creatures\actor.ltx найдите строки hit_probability_gd_novice = 0.20 hit_probability_gd_stalker = 0.30 hit_probability_gd_veteran = 0.40 hit_probability_gd_master = 0.50 они отвечают за вероятность попадания по вам при разных уровнях сложности. Повышение значения до 1 увеличит силу врагов.
Как изменить разброс при стрельбе? В файле S.T.A.L.K.E.R. - Shadow of Chernobyl\gamedata\config\creatures\actor.ltx найдите переменную disp_base, уменьшение её значения уменьшит разброс при стрельбе.
Как сделать много крови? В файле S.T.A.L.K.E.R. - Shadow of Chernobyl\gamedata\config\system.ltx найдите переменную start_blood_size – это минимальный размер раны при котором идет кровь. Переменная blood_drop_size отвечает за размер капли крови, повысьте её значение и крови будет больше.
3) в файле gamedata\configs\gameplay\npc_profile.xml создаем класс нпс, вписываем его айди из профайла и класс.
Код grom_specnaz
gamedata\configs\creatures\spawn_sections_general.ltx создаем секцию для спавна
[ваше название секции]:stalker $spawn = "respawn\ваше название секции" character_profile = grom spez -айди нпс_профайла spec_rank = novice community = grom ---группировка как в профайле
4)death_manager.script
Код local community_list = { "stalker", "dolg", "freedom", "bandit", "army", "zombied", "ecolog", "killer", "monolith","grom"}
Добавляем секцию с группировкой, и прдукты для нее...., теоритичски можно не трогать этот файл, все будет по дефолту и вылетов не будет тоже, проверял.
6)Чтоб название было по русски в любом файле с текстами
Код Вольный сталкер
7)Отсалось заспавнить, берем секции из спавн_сектионс....
Разбор системы квестов в S.T.A.L.K.E.R. Зов Припяти Автор: Xmk Параметры
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
Открываем файл dialogs_zaton.xml и добавляем перед : Код
Далее добавляем наши диалоги Бороде. Открываем файл character_desc_zaton.xml Находим строчку zat_a2_stalker_barmen_actor_info и под ней пишем Код vodka_quest_dialog vodka_quest_prines
Сохраняем
Инфопоршни и скриптовые функции
Открываем файл info_zaton.xml и добавляем перед : Код
Открываем файл 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 и добавляем после Код Найти водку для бармена
Принести водку бармену
Бармен в тестовых целях попросил найти и принести ему 2 бутылки водки
Репутация: 7
Регистрация: 01.07.2010
Город: Ставропольский край
Работа с all.spawn
По распаковке алл.спавна с помощью acdc. Расскажу, как делать это без батников. Если надо распаковать алл.спавн. 1. Помещаем файл алл.спавн в папку, где находятся файлы от acdc. Лучше создать ее на диске С: 2. Нажимаем ПУСК - Выполнить. Появляется командное окно. 3. Вводим команду cmd. Появляется черное окно. 4. В нем пишем cd\ Далее нажимаем enter. Происходит перенос на другую строчку. Эта команда задает диск С для работы с ним. 5. Далее пишем cd C:\"название папки, куда поместили acdc". Нажимаем enter. Переход на другую строчку. Теперь задали папку с которой будем работать. Вот здесь и надо будет вводить команды для acdc. 6. Вводим acdc.pl -d all.spawn Нажимаем enter. 7. Если асдс подходит для данного алл.спавна, то вскоре все распакуется и распакованные файлы можно будет обнаружить в папке с асдс. 8. Если асдс не подходит, то он выдаст ошибку. Тут же в этом черном окне. Надо будет внимательно прочитать о чем ошибка. Обычно для разных модов не хватает какого-нибудь описания чего-нибудь. Например, может ругаться что не может найти af_soul. Тогда надо будет открыть файл acdc.pl блокнотом. Там найти, где описываются артефакты и в конце строк с артефактами сделать запись для af_soul, напримере других артефактов. После сохранить файл и заново набрать команду по распаковке. 9. После того, как сделали изменения в алл.спавне, надо будет таким же образом войти в папку с acdc, как описывалось раньше. 10. Набрать следующую команду: acdc.pl -c all.ltx 11. Если все сделали правильно в алл.спавне, то через некоторе время в папке с асдс появится файл all.spawn.new. Его надо будет переименовать в all.spawn 12. Правило при работе с алл.спавном - не забывайте правильно пронумеровывать вновь создаваемые секции. Для этого надо найти самый большой номер секции в алл.спавне. И присваивать своим секциям номера по порядку за этим номером.
Работа с ACDC
Сегодня мы разберем основу работы с ACDC. Но... Для начала небольшое отступление. Вы зададите вопрос, почему же лучше работать с ACDC нежели чем с xrSpawner? Отвечаю: xrSpawner при всех его преимуществах имеет множество более значительных минусов. Во первых, xrSpawner не определяет не game_vertex, ни level_vertex. А также он измеряет только позицию. Я думаю работающие с xrSpawner, замечали что, порой обьекты которые они спаунят спаунером не всегда появляются на месте. Или вообще не появляются. Потому что повторяю xrSpawner не определяет вертексы т.е. точная позиция и распределение по АИ-сетке. Итак начнём работу! У нас есть программа ACDC, руки и мозги в голове. Кладём all.spawn в папку utils и жмём на батник "распаковка". Итак all.spawn распакован!Мы там видим файлы alife и way. В файлах alife только обьекты которые спаунятся. А в way только пути. Я думаю с алайфом всё понятно. Разберем way. Пути. Путь это и ест путь. По которому может двигаться живой обьект.Сейчас мы это рассмотрим: Для начала устроим текстовый беспредел Найдём файл alife_l01_escape, а в нём Код [869] ; cse_abstract properties section_name = actor name = level_prefix_actor_0001 s_rp = 0 position = -139.449829101563,-29.6908683776855,-351.492797851563 direction = 0,0.00895109120756388,0 s_flags = 0x29
Получиться что мы подарим Меченому при начале игры Винторез, 600 патронов к нему, пистолет USP и 420 патронов к нему. Так. Теперь Меченый у нас будет крутым рэмбо Теперь ещё и подарим ему денежек. Код ; cse_alife_trader_abstract properties money = 40 trader_flags = 0 character_profile = actor
В строчке money напишем любое число. Тока астрономические не надо(не проверял). Ну теперь Меченый не только рэмбо но и миллионер. Теперь займемся кординатами. У нас они такие: Код position = -139.449829101563,-29.6908683776855,-351.492797851563 direction = 0,0.00895109120756388,0
Это наши позиция и дирекция. Код ; cse_alife_object properties game_vertex_id = 19 (Тот самный вертекс на игре) distance = 0.699999988079071 level_vertex_id = 111256 (вертекс на уровне) object_flags = 0xffffffbf custom_data = < А теперь пропишем туда такие кординаты: Код position = -167.232299804688,-25.4363708496094,-354.692901611328 direction = 0,-0.365248799324036,0
Тепер игра начнётся в здании блокпоста на 2 этаже. С этим мы закончим. Теперь создадим нового НПС: Код [871] ; cse_abstract properties section_name = stalker name = esc_bridge_soldier1 position = -133.27989196777,-30.146812438965,-372.0263671875 direction = 0.028013030067086,0,0.9996075630188
Так вот он наш друг НПС солдат на блокпосте Тут уже знакомы строки. Позиция, дирекция вертексы... Но есть кое что новое Код [logic] active = walker
[walker] path_walk = hodim_dvor
Элементарная логика НПС. hodim_dvor-Это путь по которому будет ходить НПС. НПС есть всё готово. Но путя то у нас нет Создадим его в файле way_l01_escape. Припишем вот такие строчки. [hodim_dvor] points = p0,p1 p0:name = name00 p0:position = -120.44634246826,-30.15016746521,-363.68786621094 p0:game_vertex_id = 24 p0:level_vertex_id = 132887 p0:links = p1(1)
p1:name = name01 номер точки p1:position = -132.61611938477,-30.142726898193,-363.87365722656 - только позиция p1:game_vertex_id = 19 вертекс на игре p1:level_vertex_id = 118862 вертекс на уровне p1:links = p0(1) на какую точку после этой перейдёт НПС. (тут он будет ходить туда сюда, если не написать линкс то он остановиться на месте)
Так тоже будет работать я не спорю но опций не будет видно в настройках игры и если вы собираетесь делать мод то тот кто будет в него играть не поймет и это просто будет не удобно, так как чтобы поменять клавиши нужно будет лезть в тот же user.ltx.
Я предлагаю зделать так:
Нам понадобятся всего 2 файла
1 - ui_keybinding.xml, который находится в папке:
gamedata/config/ui/ui_keybinding.xml
2 - ui_st_keybinding.xml который находится в :
gamedata/config/text/rus/ ui_st_keybinding.xml
ПРАКТИКА:
В файле ui_keybinding.xml в столбце пишем это:
В итоге будет вот что :
А во 2 файле
Пишем где желаете это:
Вид от первого лица
Вид от второго лица
Вид от третьего лица
Завести двигатель
Только это надо записать между другими string id , или просто можно записать в конце файла только чтобы было в конце . ВСЕ! как видете не чего сложного нет теперь заходите в игру в настройки и ставьте нужные клавиши.
Автор strelok-3 то есть я!
В разработке I.T.S. mod v2.0
Сообщение отредактировал [STREL0K] - Суббота, 07.08.2010, 11:59:10
для начала откроем gamedata\config\weapons\weapons.ltx. Вверху будет написано #include "w_ak74.ltx" и т.п. нам это не надо мотает до [ammo_base]:identity_immunities и после этого идут все все патроны. Возьмём например стандартный патрон ПМа [ammo_9x18_fmj]:ammo_base GroupControlSection = spawn_group discovery_dependency = $spawn = "weapons\ammo\ammo_9x18_fmj"это то как будет называться предмет в спавне ; option for Level Editor class = AMMO класс объекта cform = skeleton visual = weapons\ammo\ammo_9x18_fmj.ogf путь к модэле description enc_weapons1_ammo_ammo-9x18-fmj $prefetch = 64
cost = 70 цена
box_size = 20 ;50 сколько патронов в 1 пачке (1 число)
например мы хотим сделать калибр 9х17 для этого сначала скопируем и вставим всё в этот же файл.Теперь меняем самую верхнею строку [ammo_9x18_fmj]:ammo_base на [ammo_9x17]:ammo_base
можно поменять и визуал
открываем модель Notepab ом вводи в поиск *wpn_ammo* (сразу поменяйте на wpn_amo1) это текстура всех калибров, она лежит в gamedata\textures\wpn. Легче всего поменять общую текстуру. Переводим модель в bmp формат (DDS конвертор в помощь) и меняем 2 таблички 9х18 на 9х17. сохраняем, переводим в DDS формат и называем wpn_amo1 . Кидаем в textures\wpn. Сохраняем модель и кидаем в meshes\weapons\ammo . теперь меняем строку visual = weapons\ammo\ammo_9x18_fmj.ogf на visual = weapons\ammo\ammo_9x17.ogf и все 9х18 на 9х17 и секцию $spawn на "weapons\ammo\ammo_9x17" всё! у нас должно получится ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[ammo_9x17]:ammo_base GroupControlSection = spawn_group discovery_dependency = $spawn = "weapons\ammo\ammo_9x17" ; option for Level Editor class = AMMO cform = skeleton visual = weapons\ammo\ammo_9x17.ogf description = enc_weapons1_ammo_ammo-9x17 $prefetch = 64
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ах да чуть не забыл заходим в config\txt\rus\string_table_enc_weapons и пишем <string id="ammo-7x18"> <text>9x17</text> </string> <strinf id "enc_weapons1_ammo_ammo-9x17"> <txt>ВАШЕ ОПИСАНИЕ </txt> </string>
автор я
_!
Сообщение отредактировал stаrt - Среда, 25.08.2010, 02:59:21