Правки игровых файлов

Страница 1 из 2 1, 2  Следующий

Перейти вниз

Нужна ли эта тема?

Правки игровых файлов Vote_lcap89%Правки игровых файлов Vote_rcap 89% 
[ 8 ]
Правки игровых файлов Vote_lcap11%Правки игровых файлов Vote_rcap 11% 
[ 1 ]
Правки игровых файлов Vote_lcap0%Правки игровых файлов Vote_rcap 0% 
[ 0 ]
 
Всего проголосовало : 9

Правки игровых файлов Empty Правки игровых файлов

Сообщение автор PRO100 STALKER в Чт Апр 03 2014, 22:31

В этой теме будут обсуждаться основные азы модостроения и вопросы. например: В каком файле находятся тексты...
PRO100 STALKER
PRO100 STALKER
новичок

Сообщения : 28
Дата регистрации : 2014-03-29
Возраст : 33
Откуда : Рязань

http://logowo.ucoz.ru/

Вернуться к началу Перейти вниз

Правки игровых файлов Empty Re: Правки игровых файлов

Сообщение автор PRO100 STALKER в Чт Апр 03 2014, 22:35

Добавление оружия:

Добавим в игру АК101.

Внешний вид

Позаботимся о том, чтобы наше оружие отличалось внешне от того же АК74.
Текстуры

Нарисуем для оружия новую текстуру. Подробно останавливаться на этом процессе не буду, ознакомьтесь с примером, приведенным здесь. Итак, основываясь на текстуре АК74, мы сделали вот такую текстуру:



Файлы текстур мы назвали:
wpn_ak10.dds
wpn_ak10_bump#.dds
wpn_ak10_bump.dds
Модели

Новых моделей мы пока делать не станем, просто воспользуемся дублированными моделями от АК74. Скопируем папку:

gamedata\meshes\weapons\ak47\

И назовем её ak-101. Содержимое, соответственно, переименуем в:
wpn_ak101.ogf
wpn_ak101_hud.ogf.

Теперь пропишем в эти модели созданные нами текстуры. Способ описан здесь.
Иконки

Добавим в игру иконки, которыми оружие будет отображаться в инвентаре. Способ подробно описан здесь.

Вот, что получилось в конечном итоге:


Конфиги

Новое оружие мы будем делать на базе оригинальных конфигурационных файлов. Создадим АК101 на базе конфигов АК74.
Свойства оружия

Скопируем файл из папки:

gamedata\config\ak74.ltx

Назовем его ak101.ltx.


Отредактируем свойства по своему усмотрению (но лучше - в соответствии с достоверной информацией о характеристиках оружия, т.к. АК101 - всё-таки оружие реально существующее). Редактирование конфигов оружия подробно описано в отдельном уроке. В данном случае конфиг был составлен таким образом:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[wpn_ak101]:identity_immunities
GroupControlSection = spawn_group
discovery_dependency =
$spawn = "weapons\ak-101" ; name and section in level editor
$npc = on
$prefetch = 8
scheduled = off ;[] option for ALife Simulator
cform = skeleton
class = WP_AK74 ; class of the weapon that corresponding to CPP class
min_radius = 30 ; [] for AI
max_radius = 100 ; [] for AI
description = enc_weapons1_wpn-ak101

ef_main_weapon_type = 2
ef_weapon_type = 6

;-----------------------------------------------------------------------------------
holder_range_modifier = 1.0 ; во сколько раз увеличивается eye_range
holder_fov_modifier = 0.7 ; во сколько раз увеличивается eye_fov
;-----------------------------------------------------------------------------------

cost = 2;4000
weapon_class = assault_rifle

ammo_limit = 210
ammo_elapsed = 30

ammo_mag_size = 30
fire_modes = 1, -1

ammo_class = ammo_5.56x45_ss190, ammo_5.56x45_ap
grenade_class = ammo_vog-25, ammo_vog-25p
launch_speed = 0

hand_dependence = 1
single_handed = 0

slot = 2
animation_slot = 2
inv_name = wpn-ak101
inv_name_short = wpn-ak101
inv_weight = 3.3

inv_grid_width = 5
inv_grid_height = 2
inv_grid_x = 11
inv_grid_y = 29

kill_msg_x = 0
kill_msg_y = 28
kill_msg_width = 84
kill_msg_height = 28


;-----------------------------------------------------------------------------------
;params of weapon recoil

fire_dispersion_base = 0.15;0.2
control_inertion_factor = 1.1f;1.25f

;отдача
cam_relax_speed =6;5;3.5; 0.15
cam_dispersion = 0.1;0.15
cam_dispersion_inc = 0.2;0.3
cam_dispertion_frac = 0.8;0.9
cam_max_angle = 10.0
cam_max_angle_horz = 20.0
cam_step_angle_horz = 1.1;1

fire_dispersion_condition_factor = 5.7;5
misfire_probability = 0.0055;0.003
misfire_condition_k = 0.06;0.05
condition_shot_dec = 0.00035;0.0001
;-----------------------------------------------------------------------------------

fire_point = 0,0.216,0.638
fire_point2 = 0,0.216,0.730

flame_particles = weapons\generic_weapon05
smoke_particles = weapons\generic_shoot_00
grenade_flame_particles = weapons\generic_weapon01

shell_point = 0,0.216,0.174
shell_particles = weapons\generic_shells

PDM_disp_base = 1.0
PDM_disp_vel_factor = 1.3
PDM_disp_accel_factor = 1.3
PDM_crouch = 1.0
PDM_crouch_no_acc = 1.0

; ttc
hit_power = 0.36, 0.4, 0.43, 0.46
hit_impulse = 140
hit_type = fire_wound
fire_distance = 1700
bullet_speed = 1000
rpm = 750

use_aim_bullet = true
time_to_aim = 1.0

;params when silencer is attached
;similar to corresponding params without prefix silencer_

silencer_hit_power = 0.38
silencer_hit_impulse = 120
silencer_fire_distance = 250
silencer_bullet_speed = 600

hud = wpn_ak101_hud

position = -0.026,-0.172,0
orientation = 0,0,0

;--STRAP PARAMETERS-----------------------------------------------------------------
strap_position = -0.16,-0.40,0.15
strap_orientation = -10,-5,10
strap_bone0 = bip01_spine2
strap_bone1 = bip01_spine1

visual = weapons\ak-101\wpn_ak101

light_color = 0.6,0.5,0.3
light_range = 5
light_var_color = 0.05
light_var_range = 0.5
light_time = 0.2

ph_mass = 5

;addons
scope_status = 2
silencer_status = 2
grenade_launcher_status = 0;2

zoom_enabled = true
scope_zoom_factor = 50

scope_name = wpn_addon_scope
scope_x = 42
scope_y = 3
silencer_name = wpn_addon_silencer
silencer_x = 218
silencer_y = 13
grenade_launcher_name = wpn_addon_grenade_launcher
grenade_launcher_x = 116
grenade_launcher_y = 23

;sounds (name of the sound, volume (0.0 - 1.0), delay (sec))
snd_draw = weapons\ak74_draw
snd_holster = weapons\generic_holster
snd_shoot = weapons\ak74_shot_0
snd_shoot1 = weapons\ak74_shot_1
snd_shoot2 = weapons\ak74_shot_2
snd_shoot3 = weapons\ak74_shot_3
snd_empty = weapons\gen_empty, 0.5
snd_reload = weapons\ak74_reload, 0.7, 0.35
snd_shoot_grenade = weapons\gen_grenshoot
snd_reload_grenade = weapons\gen_grenload, 1.0, 0.8
snd_switch = weapons\groza_switch, 1.0, 0.5


;params when silencer is attached
;similar to corresponding params without prefix silencer_

;silencer_flame_particles = weapons\generic_weapon01
silencer_smoke_particles = weapons\generic_shoot_00

snd_silncer_shot = weapons\w_ak74_shot1

silencer_light_color = 0.6,0.5,0.3
silencer_light_range = 0.01
silencer_light_var_color = 0.05
silencer_light_var_range = 0.5
silencer_light_time = 0.2


;-----------------------------------------------------------------------------
;-- HUD DESCRIPTION
;-----------------------------------------------------------------------------

[wpn_ak101_hud]
allow_inertion = true

;similar to corresponding params in weapon section but for 1st person view

shell_point = -0.065000,0.000000,-0.045000
shell_dir = 0.0, 1.0, 0.0

fire_point = 0.09,0.020,-0.06
fire_point2 = 0.30, 0.00, 0.05
fire_bone = wpn_body

orientation = 0, 0, 0
position = 0, 0, 0.05
visual = weapons\ak-101\wpn_ak101_hud

grenade_bone = wpn_grenade

; animation names

anim_idle = idle
anim_idle_aim = idle_aim
anim_reload = reload
anim_draw = draw_wo_gl
anim_holster = holster_wo_gl
anim_shoot = shoot

; animation names
; attached grenade launcher [GRENADE fire mode]
anim_idle_g = idle_grenade
anim_idle_g_aim = idle_g_aim
anim_reload_g = reload_grenade
anim_shoot_g = shoot_grenade
anim_switch_grenade_on = switch_grenade
anim_switch_grenade_off = switch_grenade_off
anim_draw_g = draw_grenade_mode
anim_holster_g = holster_grenade_mode

; attached grenade launcher [NORMAL fire mode]
anim_idle_gl = idle_w_gl
anim_idle_gl_aim = idle_w_gl_aim
anim_reload_gl = reload_w_gl
anim_draw_gl = draw_w_gl
anim_holster_gl = holster_w_gl
anim_shoot_gl = shoot_w_gl
anim_idle_sprint = idle_sprint

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;HUD offset in zoom mode (to all)
;(use CONSOLE: hud_adjust_mode 0,1,2, then keys WSADQE and P to show current value in console)

zoom_offset = -0.112400,0.016800,-0.115000
zoom_rotate_x = 0.000200
zoom_rotate_y = 0.017500

zoom_hide_crosshair = true


; same as above, but for attached grenade launcher for
; in NORMAL shoot mode

grenade_normal_zoom_offset = -0.112500,0.014000,0.000000
grenade_normal_zoom_rotate_x = -0.000900
grenade_normal_zoom_rotate_y = 0.017200

; same as above, but for attached grenade launcher for
; in GRENADE mode

grenade_zoom_offset = -0.039600,-0.433100,0.000000
grenade_zoom_rotate_x = -0.538700
grenade_zoom_rotate_y = -0.033800
Регистрация

Итак, с характеристиками разобрались. Теперь зарегистрируем оружие в файле weapons.ltx. Для этого пропишем в него строку следующего вида:
#include "w_ak101.ltx"

Также, необходимо прописать модели, используемые для отображения оружия, в prefetch.ltx:
[...]
weapons\abakan\wpn_abakan
weapons\abakan\wpn_abakan_hud
weapons\ak-101\wpn_ak101
weapons\ak-101\wpn_ak101_hud
weapons\ak74\wpn_ak74
weapons\ak74\wpn_ak74_hud
[...]

Так же не забудте в файле mp_ranks.ltx прописать после available_items (которое внизу) прописать название своего оружия. Это предотвратит вылет при убийстве ГГ.
Добавление в игру

Осталось добавить оружие в игру.
PRO100 STALKER
PRO100 STALKER
новичок

Сообщения : 28
Дата регистрации : 2014-03-29
Возраст : 33
Откуда : Рязань

http://logowo.ucoz.ru/

Вернуться к началу Перейти вниз

Правки игровых файлов Empty Re: Правки игровых файлов

Сообщение автор PRO100 STALKER в Чт Апр 03 2014, 22:42

Создание НПС:

Создание НПС

Для того, чтобы создать нового НПС нам понадобятся координаты нужного места, где и будет заспаунен наш NPC. Возьмём Кордон, лагерь новичков. Можете снять координаты сами, а можете взять мною уже снятые: (-218.20,-20.2,-145.63),35362,47). Далее. Создаём файл в папке gamedata/scripts файл, скажем esc_unik_npc.script. В нём создаём функцию. Код: function esc_unik_npc () alife():create("esc_unik_npc",vector():set(-218.20,-20.2,-145.63),35362,47) end

Теперь мы в файле npc_profile.xml (в папке gameplay) добавляем нашего НПС. Код: Trader escape_trader

esc_unik_npc esc_unik_npc

Копируем или создаём по образцу только нижний блок Второго торговца нам ненадо. Теперь моздадим секцию нашего персоонажа. В файле spawn_section.ltx (gamedata/config/creatures) в блоке:

--------Escape--------------
--------neutrals------------

Создаём секцию. Код: [esc_unik_npc]:stalker $spawn = "respawn\esc_unik_npc" character_profile = esc_unik_npc spec_rank = regular community = dolg

В строке community можете вместо долга вписать другую группировку. Однако если мы хотим, чтоба наш персоонаж не гулял по Зоне, пока не наткнётся на первуюю аномалию, то пропишем чтобы он стоял на месте. Для этого под community вставляем: custom_data = scripts\esc_unik_npc.ltx Далее создаём в gamedata/config папку scripts в в папке создаём файл esc_unik_npc.ltx В наш созданый файл вставляем: Код: [logic] active = remark1 danger = danger_ignore

[danger_ignore] ignore_distance = 5

[remark1] no_move = true

Всё наш НПС будет стоять на месте своего спауна. Едем дальше. Нам надо активировать нашего персоонажа. для этого мы должны вставить строку: esc_unik_npc.esc_unik_npc Либо в диалог, либо в какой-нибудь квест. Давайте вставим строку в файл info_portions.xml (gamedata/gameplay) под Код:


storyline_eliminate_gunslinger

Выклядеть это будет так:

Код:


storyline_eliminate_gunslinger
esc_unik_npc.esc_unik_npc


Однако мы не прописали самого НПС, как личность В файле character_desc_escape.xml (gamedata/gameplay) добавляем: Код: GENERATE_NAME_bandit ui_npc_u_stalker_bandit_3 esc_wolf_bio

esc_otbrosi_1 dolg stalker_terrain

367 -60

characters_voice\human_01\monolith\ -1

actors\bandit\stalker_bandit_3 [spawn] \n

wpn_groza \n

ammo_9x39_pab9 \n

1. include "gameplay\character_items.xml" \n
2. include "gameplay\character_food.xml"



1. include "gameplay\character_criticals_3.xml"

1. include "gameplay\character_dialogs.xml"



Правда тут получится у нас долговец в одежде бандита и говорящего голосом монолитовца xD Всё сохроняем. НПС готов.

Но так же можно добавить нашему НПС диалог) Как добавлять диалоги написано в нашем факе) Если хотяте сделать нашему НПС своё имя то в файле stable_bio_name.xml (gamedata/config/text/rus) добавляем: Код: Факер-мазафакер

А в файле сharacter_desc_escape.xml (gamedata/gameplay) находим нашего уже прописаного НПС и вставляем в секцию (у нас в ней написано GENERATE_NAME_bandit) esc_unik_npc Всё Поздравляю)
PRO100 STALKER
PRO100 STALKER
новичок

Сообщения : 28
Дата регистрации : 2014-03-29
Возраст : 33
Откуда : Рязань

http://logowo.ucoz.ru/

Вернуться к началу Перейти вниз

Правки игровых файлов Empty Re: Правки игровых файлов

Сообщение автор PRO100 STALKER в Чт Апр 03 2014, 22:44

Создание группировки:
Сегодня мы создадим новую группировку. Назовем её, скажем, "Ветер". Не суть важно.
Практика
Базовый уровень

1. Для начала в game_relations.ltx и в таблицу отношений группировок в конце и в заголовке добавляем название своей группировки и коэффициенты отношений к ней у других группировок. Также, не забываем прописать её собственное отношение к другим группировкам:
[communities_relations]
;|actor |act_dol|act_fre|stalker|monolit|militar|killer |ecolog |dolg |freedom|bandit |zombied|strange|trader|arena_enemy|wind|
;=================================================================================================================================
actor = 0, 0, 0, 0, -5000, -5000, -5000, 0, 0, 0, -5000, -5000, 0, 0, -5000, 0
actor_dolg = 0, 0, 0, 0, -5000, -500, -5000, 5000, 600, -5000, -5000, -5000, 0, 0, -5000
actor_freedom = 0, 0, 0, 0, -5000, -5000, -5000, -1500, -5000, 5000, 0, -5000, 0, 0, -5000, 0

stalker = 0, 0, 0, 0, -5000, -5000, -5000, 0, 0, 0, -5000, -5000, 0, 0, -5000, 0
monolith = -5000, -5000, -5000, -5000, 5000, -5000, -5000, -5000, -5000, -5000, 5000, 5000, -5000, 0, -5000, 0
military = -5000, -5000, -5000, -5000, -5000, 5000, -5000, 0, -5000, -5000, -5000, -5000, 0, 0, -5000, 0
killer = -5000, -5000, 0, -5000, -5000, -5000, 5000, -5000, -5000, -5000, 0, -5000, -5000, 0, -5000, 0
ecolog = 0, 600, -5000, 0, -5000, 1000, -5000, 5000, 500, -5000, -500, -5000, 0, 0, 0, 0
dolg = 0, 600, -5000, 0, -5000, -500, -5000, 5000, 5000, -5000, -5000, -5000, 0, 0, 0, 0
freedom = 0, -5000, 600, 0, -5000, -5000, -5000, -1500, -5000, 5000, 0, -5000, 0, 0, 0, 0
bandit = -5000, -5000, 0, -5000, -5000, -500, 0, -5000, -5000, 0, 0, -5000, -5000, 0, -5000, 0
zombied = -5000, -5000, -5000, -5000, 5000, -5000, -5000, -5000, -5000, -5000, -5000, 5000, -5000, 0, -5000, 0
stranger = 0, 0, 0, 0, -5000, -5000, -5000, 0, 0, 0, -500, -5000, 0, 0, 0, 0
trader = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
arena_enemy = -5000, -5000, -5000, -5000, -5000, -5000, 0, 0, 0, -5000, -5000, 0, 0, 0, 0, 0

wind = 0, 0, 0, 0, -5000, -5000, -5000, 0, 0, 0, -5000, -5000, 0, 0, -5000, 0

Также, изменим эту строку, добавив туда имя и номер группировки:
;названия группировок
communities = actor, 0, actor_dolg, 1, actor_freedom, 2, stalker, 5, monolith, 6, military, 7, killer, 8, ecolog, 9, dolg, 10,
freedom, 11, bandit, 12, zombied, 13, stranger, 14, trader, 15, arena_enemy, 16, wind, 18,

Отсчет идет построчно начиная сверху. Хотя есть небольшой нюанс. У первых трех строк - нумерация начинается с нуля, с остальных группировок она идет как надо. Для wind выставили 18, так как мы эту группировку отделили от других.

Далее, в разделе [communities_sympathy] в конце добавляем свою группировку и коэффициент "впечатлительности" - чем он меньше, тем меньше отношение группировки будет меняться к вам в целом:
[communities_sympathy]
actor = 0.0
actor_dolg = 0.0
actor_freedom = 0.0
stalker = 0.0
monolith = 0.0
military = 0.0
killer = 0.0
ecolog = 0.0
dolg = 0.1
freedom = 0.1
bandit = 0.0
zombied = 0.0
trader = 0.0
stranger = 0.0
arena_enemy = 0.0
wind = 0.0

2. После этого в файле death_manager.script ищем строку local community_list и в скобках добавляем название своей группировки:
function init_drop_settings()
local community_list = { "stalker", "dolg", "freedom", "bandit", "military", "zombied", "ecolog", "killer", "monolith",
"arena_enemy", "actor_dolg", "wind" }

3. В файле death_items_by_communities.ltx пишем [x]:stalker (вместо x - название вашей группировки):
[...]
af_dummy_spring = 0
af_fuzz_kolobok = 0

;Еда
vodka = 0

[arena_enemy]
[actor_dolg]

[wind]: stalker
bread = 0
kolbasa = 0
vodka = 0
energy_drink = 0.3

4. Если предусматривается респавн бойцов новой группировки, в se_respawn.script прописываем в local simMaxCount = { после строчек с зомбированными сталкерами строку:
wind_novice = 20, wind_regular = 20, wind_veteran = 20, wind_master = 6,

5. Чтобы при убийстве непися новой группировки игра не вылетала в xr_statistic.script,

после строки:
zombied_novice = 1, zombied_experienced = 2, zombied_veteran = 3, zombied_master = 4,

пишем
dark_stalker_novice = 1, dark_stalker_experienced = 2, dark_stalker_veteran = 3, dark_stalker_master = 4,


6. Ну а в character_desc_x.xml выбираем любого NPC (или группу) и меняем группировку на свою:


esc_wolf_name
ui_npc_u_stalker_neytral_balon_1
esc_wolf_bio

esc_wolf
wind
[...]

7. Чтобы у персонажа в графе "Группировка" отображалось не "wind", а "Ветер", зарегистрируем соответствующую строку в файле string_table_general.xml:



Ветер


Одиночка

[...]

8. Существует возможность создать для нашей новой группировки места, где они будут ходить (*_terrain брать из m_stalker.ltx):

То есть, к примеру, существует секция:
[stalker_terrain]
255,000,255,255
008,001,255,255 ;Разрешено ходить по опасным местам на баре
012,001,255,255 ;Разрешено ходить по опасным местам на Милитари

Тогда можно создать новую, по аналогии:
[wind_terrain]
255,000,255,255
008,001,255,255 ;Разрешено ходить по опасным местам на баре
012,001,255,255 ;Разрешено ходить по опасным местам на Милитари
010,001,255,255 ;Разрешено ходить по опасным местам на янтаре


Здесь, очевидно, указаны координаты самого уровня. Для каждого уровня существует своя начальная координата.
Продвинутый уровень

Такой метод достаточно примитивен. Это не полноценная группировка. Нам нужны соответствующие диалоги, возможность получения квестов и вступления в группировку, уникальные NPC.
Квесты

Добавим квесты, которые нужно выполнить для группировки. Пока - простые поручения распространенных типов.

Во-первых, пропишите в список диалогов персонажа следующие строки:
[что-нибудь]_dialog
[что-нибудь]_reward

Примеры названий: tm_trader_dialog, tm_wolf_dialog...

Внимание! Метод не проверен.

Этим мы добавили ему ветку диалога "Есть работа?", а также ветку для награды за квест/отказа от него. Теперь зарегистрируем в task_manager.ltx набор новых заданий.
[list]

[...]

;--------Wind------------------------
;----------Kill Stalker----
wind_kill_stalker
;----------Find Item----
wind_find_item

[...]

;tasks for Wind

[wind_find_item]
type = find_item
community = actor
text = [ссылка на текст с рассказом заказчика о задании]
description = [ссылка на текст с описанием задания]
parent = [имя NPC-заказчика]
target = scientific_outfit
reward_money = 5000
reward_reputation = +5
reward_rank = 4
reward_item = wpn_sig_m1
time = 86400


[wind_kill_stalker]
type = kill_stalker
community = actor
text = [ссылка на текст с рассказом заказчика о задании]
description = [ссылка на текст с описанием задания]
parent = [имя NPC-заказчика]
target = sim_stalker_master_master
reward_money = 4000
reward_reputation = +5
reward_rank = 9
reward_item = ammo_5.56x45_ap, ammo_5.56x45_ap, ammo_5.56x45_ap
time = 86400

Не забудьте прописать описания заданий в текстовые массивы. Подробнее о редактировании task_manager.ltx читайте в уроке, посвященном однотипным квестам.

Да, и зарегистрируйте сами ветки диалогов в файле dialogs.xml. Вот пример того, как это сделано для заданий "Долга":

task_manager.init_dolg_task_dialog


task_manager.init_dolg_reward_dialog
task_manager.has_active_vendor_task


Соответственно, пройдем туда, куда указывает строка task_manager.init_dolg_task_dialog - в task_manager.script:
function init_dolg_task_dialog(dlg)
get_random_task():init_task_dialog(dlg, "dolg")

По аналогии делаем и с нашим "Ветром".
Вступление в группировку

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

Прописываем в dialogs.script такие action'ы:
-----------------------------------------------------------------------------------
-- Community
-----------------------------------------------------------------------------------

[...]

function actor_set_wind (actor, npc)
printf ("ACTOR NOW IN WIND COMMUNITY"
if db.actor then
db.actor:set_character_community ("actor_wind", 0, 0)
end
return true
end

После чего создадим диалог, и сделаем в нем фразу с action'ом вида actor_set_wind. Советую изучить урок, посвященный диалогам.
Новые NPC

Лучше всего всё вышеприведенное повесить на нового, уникального персонажа. Способ его спавна описан выше.
PRO100 STALKER
PRO100 STALKER
новичок

Сообщения : 28
Дата регистрации : 2014-03-29
Возраст : 33
Откуда : Рязань

http://logowo.ucoz.ru/

Вернуться к началу Перейти вниз

Правки игровых файлов Empty Re: Правки игровых файлов

Сообщение автор PRO100 STALKER в Чт Апр 03 2014, 23:03

Разное поведение НПС:
Недавно решил поэкспериментировать с анимками НПС, и теперь выкладываю результаты моих опытов над "людьми". Разумеется, опытные модмейкеры все это давно знают – поэтому материал предназначен для новичков, которые еще не освоили как прописывать неписям разные прикольные анимки, а заодно и озвучку через логику. Все анимки взяты из файла state_lib. script. Анимки, которые имеются в движке, но не вписаны в указанный файл, не рассматриваются. Это тема для отдельной статьи. Озвучка взята из файла sound_script (папка misc). Конечно, хотелось использовать и звуковые темы не вписанные в этот файл, но имеющиеся в папке sounds - но с этим еще надо разобраться.
[править]
Часть первая.

Вся изложенная ниже схема является единым целым и ее можно ставить в ltx –ный файл логики любому вашему НПС целиком. Она будет зациклена и повторяться по кругу если кое-где поставить другие варианты перехода от одной ремарки к другой.

[logic]
active = remark@base
danger = danger_condition
meet = meet

[remark@base]
anim = hello_wpn
no_move = true
target = actor
meet = meet
on_actor_dist_le = 2| remark@sit

[meet]
meet_state = 10|salut@esc_bridge_soldiers| 5|salut_free@esc_lager_killer
meet_state_wpn = 10|ward@cit_base_guard_talk_to_actor2| 5|probe_2@gar_bandits_seryi
victim = 10|actor
victim_wpn = 10|actor
use = true
use_wpn = true
meet_dialog = escape_lager_guard_start_dialog

В базовой ремарке мой чувак использует анимку Волка - hello_wpn – одной рукой машет ГГ, другой держит ствол. Это начальная анимка, которая будет отрабатываться НПС, пока ГГ не подойдет на дистанцию встречи. В секции meet задается схема реагирования НПС при подходе к нему эктора. В строчке meet_state – реакция при подходе безоружного ГГ. На расстоянии 10 метров НПС отдает честь, затем встает в позицию «смирно» - руки по швам. Это анимка salut. Ближе 5 метров – тоже самое, дальше переходит в позицию «вольно». Это анимка salut_free. В секции meet можно задавать и то, что НПС будет базарить при виде эктора. В моей схеме: «чего стоишь сталкер, подходи, будем разговаривать» (esc_bridge_soldiers) отдавая салют, и на второй дистанции - «разбежались сосунки и т.д». (esc_lager_killer) В строчке meet_state_wpn - реакция НПС если эктор с пушкой в руках. У меня в этой схеме он встает в позу ward – руки за спиной, голова наклонена вниз. Словом поза тюремщика или надсмотрщика (ward примерно так и переводится). В этой позе НПС на дистанции ближе 10 метров орет «повторяю для тупых - отошел к дальней стене камеры…» (cit_base_guard_talk_to_actor2), а если ГГ подойдет еще ближе - «ты щас сдохнешь падла, понял…» (gar_bandits_seryi) и еще несколько рандомных фраз, которые заданы звуковой темой gar_bandits_seryi. К начальной анимке также можно добавлять любую звуковую тему через строчку snd. В данной ремарке ее нет.

Переходим к следующей схеме. Так как все эти схему у меня завязаны вместе, то переход ко второй ремарке произойдет, когда ГГ подойдет к НПС на дистанцию ближе двух метров. Прописано этой в строчке on_actor_dist_le = 2| remark@sit


[remark@sit]
anim = sit_ass
snd = mil_guard_to_max
no_move = true
target = actor
meet = no_meet
;on_actor_dist_le = 2| remark@raciya
;on_timer = 30000| remark@ raciya
on_signal = sound_end| remark@raciya
danger = danger_condition


Итак, что делает НПС в этой ремарке. Сидит на заднице - sit_ass, орет - mil_guard_to_max – «макс, у нас тут проблема на хуторе нарисовалась, собирай народ…» В секции meet прописано отсутствие встречи, так как задано no_meet . Так что разговаривать с ГГ непись не будет. После отработки заданной звуковой темы идет переход к к ремарке remark@ raciya. Сделано это через строчку on_signal = sound_end| remark@raciya. Переведу: на сигнал «конец звуковой темы» переходим к схеме remark@raciya.

Следующая схема.

[remark@raciya]
anim = choose
snd = bar_arena_public
no_move = true
target = actor
meet = meet@raciya
on_timer = 120000| remark@work
;on_actor_dist_ge = 35| remark@work
danger = danger_condition

[meet@raciya]
meet_state = 7|binocular@val_escort_guards| 5|guard_rac@mil_pavlik_to_ara
meet_state_wpn = 7|hide_rac@mil_ara_ambush
victim = 7|actor
victim_wpn = 7|actor
use = true
use_wpn = true
meet_dialog = escape_lager_guard_start_dialog

Анимка choose – ГГ что-то высматривает: оглядывается по сторонам, прикладывает руку ко лбу, так же как это делам мы, когда смотрим вдаль против солнца. Звуковая тема – что то там из реплик на арене. При встрече – смотрит в бинокль (если он у него есть) и издевательски базарит - «скоро ты будешь работать обедом для мутантов» (в этой теме реплик несколько). На 5 метрах достает рацию (если есть) - анимка guard_rac и базарит реплики из темы предателя Павлика на милитари «все чисто можете подходить». При угрозе стволом - анимка hide_rac («сидит с рацией»), базар - «это засада, уходим» Через 120 секунд - переход к следующей ремарке: on_timer = 120000| remark@work

[remark@work]
anim = caution
no_move = true
snd = mil_max_before_collect
target = actor
on_timer = 30000| remark@work2
meet = no_meet
danger = danger_condition

Анимка caution – ГГ слегка согнувшись, что-то внимательно высматривает на земле, руки прикладывает к коленям. А затем радостно сообщает - «ребята у нас появилась работа». Видимо, что-то высмотрел интересное. Через 30 секунд - снова переход.

[remark@work2]
anim = search
no_move = true
snd = mil_collect_phrase3
target = actor
on_timer = 30000| remark@zombied
meet = no_meet
danger = danger_condition

Анимка search - поиск, только более развернутый. ГГ встает на колени или на корточки и начинает что-то искать. Что он при этом произносит – узнаете, когда послушаете. Через 30 секунд переход к схеме зомби.

[remark@zombied]
anim = trans_zombied
snd = pri_followers_leader_phrase1_1
no_move = true
target = actor
on_timer = 60000| remark@wounded
meet = meet@zombied
danger = danger_condition

[meet@zombied]
meet_state = 5|trans_0@hail
meet_state_wpn = 5|trans_1@hail
victim = 5|actor
victim_wpn = 5|actor
use = true
use_wpn = true
meet_dialog = escape_lager_guard_start_dialog

Анимка trans_zombied - падает на колени, головой двигает вверх-вниз. trans_1 - также стоит на коленях, только головой вращает по кругу. trans_0 – то же самое, только более энергичней. Или наоборот - извиняюсь если перепутал.

Схема раненый. Тут все понятно.

[remark@wounded]
anim = wounded_heavy_3
snd = help_heavy
target = actor
meet = no_meet
on_timer = 30000| remark@dinner
danger = danger_condition


wounded_heavy_3 – это анимка тяжелораненого. (есть еще и другие анимки раненого). Чувак скрючившись, грохнется на землю. Но на ней не остается, а тут же встает и бежит в сторону в денжере. Что и понятно – здоровье то у него норм. Остальные неписи видевшие как чувак упал, так же срываются в денжере с места. Ищут того, кто «стрелял». Не удивляйтесь, но так они запрограммированы.

Схема обед.

[remark@dinner]
anim = sit_knee
no_move = true
target = actor
meet = meet@dinner
danger = danger_condition
on_actor_dist_ge = 15| remark@dynamite

[meet@dinner]
meet_state = 5|eat_bread@wait| 3|eat_energy@wait
meet_state_wpn = 5|eat_kolbasa@wait| 3|eat_vodka@val_escort_dead
victim = 8|actor
victim_wpn = 8|actor
use = true
use_wpn = true
meet_dialog = escape_lager_guard_start_dialog

sit_knee - чувак сидит на заднице, опираясь на руку. eat_bread, eat_kolbasa, eat_energy, eat_vodka - тут я думаю ничего объяснять не надо. Чувак хавает и пьет. Пригубив водки, произносит – «пусть земля тебе будет пухом» При отходе эктора на дистанцию больше 15 метров - переход к схеме динамит. Звуковая тема wait – это пауза, в которой непись ничего не говорит.

[remark@dynamite]
anim = dynamite
no_move = true
target = actor
meet = no_meet
on_timer = 30000| remark@claim
danger = danger_condition

dynamite – закладка динамита. Как это выглядит – помните долговца на милитари у стены с динамитом?


[remark@claim]
anim = claim
snd = esc_wolf_thanks
target = actor
meet = meet@claim
danger = danger_condition
on_timer = 60000| remark@story


Анимка claim - НПС подзывает ГГ рукой. snd = esc_wolf_thanks - здесь НПС произносит фразу волка: «меченый теперь тебе проход в лагерь открыт, подходи».


[meet@claim]
meet_state = 7|refuse@mil_collect_phrase5| 5|probe_2@mil_collect_phrase6
meet_state_wpn = 7|backoff@gar_dm_bandit_demand
victim = 7|actor
victim_wpn = 7|actor
use = true
use_wpn = true
meet_dialog = escape_lager_guard_start_dialog

Анимка refuse - непись пожимает плечами и произносит mil_collect_phrase5 - «не срать». probe_2 - судя по сопровождающим ее звукам (независимо от прописанной мной звуковой темы) – это анимка Круглова (его манипуляции с прибором, а может Сахарова - впрочем, это не важно). Если у вашего НПС будет в руках оружие - то смотреться она будет куда интереснее, так как выглядит будто непись проверяет свой ствол, совершая массу интересных движений. Фраза mil_collect_phrase6 - «опа – с нами новое мясо».

backoff - обычная анимка. Непись начинает махать стволом в разные стороны – типа убери ствол, меченый. Фраза - gar_dm_bandit_demand - «бабки артефакты гони», «ты че козел не врубаешься», «гони бабло или бошку отстрелим». Так как тема рандомная (с окончанием rnd в имени темы в файле sound_script – то и фраз несколько)


[remark@story]
anim = mode_shlem
no_move = true
target = actor
meet = meet@story
danger = danger_condition
on_actor_dist_ge = 30| %+passage_to_story_end%
on_info = {+passage_to_story_end} remark@story_end

[meet@story]
meet_state = 10|probe@wait| 5|probe_1@hail
meet_state_wpn = 10|probe_2@wait| 5|suicide@mil_crazy
victim = 10|actor
victim_wpn = 10|actor
use = true
use_wpn = true
meet_dialog = escape_lager_guard_start_dialog


mode_shlem - анимка то ли Круглова, то ли Сахарова. Непись будет что то вертеть в руках. probe_1 – тоже самое что и probe_2 , только здесь он плечами вроде бы не дергает. suicide - самоубийство. Советую посмотреть – тем более с озвучкой mil_crazy. probe - укороченный вариант probe_2 и probe_1

[remark@story_end]
anim = probe_3
no_move = true
snd = agr_doctor_1
target = actor
on_signal = sound_end| remark@base
;on_timer = 180000| remark@ base
meet = no_meet
danger = danger_condition

[danger_condition]
ignore_distance = 10

probe_3 - интересная анимка (похоже что кругловская)- чувак срывается с места в панике, затем сгибается как будто от боли, хватается за голову. agr_doctor_1 - базар доктора в тайнике стрелка.

Теперь поясню строчки

on_actor_dist_ge = 30| %+passage_to_story_end%
on_info = {+passage_to_story_end} remark@story_end

Когда эктор отойдет от НПС дальше чем 30 метров, ГГ выдается инфопоршень passage_to_story_end. После его получения - on_info - произойдет переход к базовой ремарке. Сам инфопоршень необходимо регистрировать в соответствующих файлах. Так как мой НПС находится на кордоне, то поршень я сунул в файл info_l01escape. Сообственно инфопоршень в строчке on_actor_dist_ge писать не обязательно(я его использовал только для примера) - можно просто поставить имя следующей ремарки - и в нужный момент произойдет переход. Но инфопоршень может понадобиться для других случаев.

Как я уже говорил в начале, схему можно сделать полностью зацикленной. Нужно лишь в тех блоках, где идет переход к следующей схеме через on_signal поставить таймер или дистанцию. Почему так - не знаю. Но у меня по второму кругу схема стопорилась на тех блоках, где шел переход через on_signal = sound_end|. По таймеру же все прекрасно крутится. Схема из второй части - как раз зацикленная.

P.S. : Кажется понял почему у меня стопорилась схема при использовании перехода on_signal = sound_end|. Дело в том, что если в имени звука, по завершении которого схема должна перейти к новому блоку стоит флажок seq, то он вроде как отыграется только один раз (если в этой теме нет дополнительных реплик). Следовательно по второму кругу он просто не будет срабатывать, а значит и схема застопорится. Так что для этого нужно ставить звук в имени которого в файле sound_script есть флажок rnd. Тема mil_guard_to_max как раз с флажком seq (и реплика только одна - без вариантов). Потому здесь (в схеме sit) она и будет стопориться на втором круге, если не заменить тему на другую. Но это еще надо проверить. Закоментированные строчки - пред которыми стоит ; - может смело выкидывать - это остатки проб разных вариантов.
[править]
Часть вторая.

Еще одна схема. На этот раз в нее добавлены еще постэффекты.

[logic]
active = remark@base
danger = danger_condition
meet = meet

[remark@base]
anim = hello_wpn
no_move = true
target = actor
meet = meet
on_actor_dist_le = 2| remark@punch
danger = danger_condition

С первой ремаркой все понятно. Переход ко второй на дистанции ближе 2 метров.

[remark@punch]
anim = punch
snd = cit_jail_guard_sneer
meet = meet@punch
target = actor
on_signal = sound_end| %=run_cam_effector(fatigue)%
on_timer = 60000| remark@doctor_wakeup %=run_postprocess(deadcity_wake:1777:false)%
danger = danger_condition

[meet@punch]
meet_state = 5|hide_s_left@wait| 4|hide_s_right@wait
meet_state_wpn = 5|backoff2@threat_back
victim = 10|actor
victim_wpn = 10|actor
use = true
use_wpn = true
meet_dialog = escape_lager_guard_start_dialog

punch– анимка удара рукой (или прикладом). Так как я не специалист по боксу, то не скажу точно как именно называется этот удар с правой в челюсть. Если поставите ее в meet_state_wpn на дистанции 2 метра - ГГ получит реальный удар в морду прикладом ствола. Так как я эксперементировал на своем торговце - то он (будучи безоружным) бил чисто кулаком. А если вместо запуска анимации камеры %=run_cam_effector(fatigue)% поставите запуск функции %=killactor%, то НПС кинется вас убивать.

hide_s_left и hide_s_right - непись присядет с разворотом ствола вправо или влево. backoff2 - более веселая анимка backoff. НПС покажет ГГ что-то вроде фака, перед тем как помахать стволом и при этом скажет что-то весьма нелицеприятное. %=run_cam_effector(fatigue)% - это вызов анимации камеры fatigue из папки anims. Земля уйдет из под ног ГГ. Ненадолго. Сработает сразу же после окончания фразы cit_jail_guard_sneer. А ровно через минуту от начала работы схемы – запуск постпроцесса %=run_postprocess(deadcity_wake:1777:false)% и переход к следующей схеме.

deadcity_wake – это постпроцесс, который должен был использоваться в Мертвом городе, если бы разрабы МГ все таки доделали. Если не видели - обязательно посмотрите.Сначала черный экран, затем прояснение с раздвоением картинки и красным фоном.

В следующей схеме идет продолжение постпроцесса – первые 15 секунд. Потом его остановка: on_timer = 15000| %=stop_postprocess(1777)%.

[remark@doctor_wakeup]
anim = doctor_wakeup
snd = cit_doctor_start_dlg
meet = meet@doctor_wakeup
target = actor
on_timer = 15000| %=stop_postprocess(1777)%
on_timer2 = 180000| remark@prisoner
danger = danger_condition

[meet@doctor_wakeup]
meet_state = 3|sleep@cit_jail_guard_sleep| 2|sleep_sit@wait
meet_state_wpn = 3|wounded_zombie@wait
victim = 10|actor
victim_wpn = 10|actor
use = true
use_wpn = true
meet_dialog = escape_lager_guard_start_dialog

Начальная анимация - doctor_wakeup – доктор в мертвом городе. НПС склонится вниз – как будто над чьим то телом (по задумке – над меченым) и начнет базарить. Но совсем не то, что стоит у меня в строчке snd. Видимо, данная анимка завязана со звуком, и иначе не идет. Фразу прописанную мною - cit_doctor_start_dlg – нпс произнесет потом. Обе озвучки длинные – та, что идет с анимкой – монолог доктора в подземелье агропрома в тайнике Стрелка – типа, «что ж ты меченый в растяжку полез, сам же придумал эту хрень…» Моя озвучка - cit_doctor_start_dlg – неиспользованный монолог доктора в мертвом городе. Через 180 секунд – завершение схемы и переход к следующей.


Схема – пленный.

[remark@prisoner]
anim = prisoner
snd = agr_krot_fear
meet = meet@prisoner
target = actor
on_timer = 60000| remark@base
danger = danger_condition

[meet@prisoner]
meet_state = 5|help_me@gar_dm_newbie_no_money
meet_state_wpn = 5|hands_up@agr_dont_shoot
victim = 10|actor
victim_wpn = 10|actor
use = true
use_wpn = true
meet_dialog = escape_lager_guard_start_dialog

[danger_condition]
ignore_distance = 10


Анимка – prisoner – пленный. Помните Шустрого у бандитов? Вот это она и есть. Фраза - agr_krot_fear – не смотря на то, что в названии звуковой темы имя Крота, орет ее Шустрый: типа братцы я тут, спасите.

help_me - машет рукой сидя на одном колене и орет, что у него "нет денег" - gar_dm_newbie_no_money . hands_up - руки кверху и орет "не убивай дяденька" (или типа того) - agr_dont_shoot.

Через 60 секунд возврат к базовой ремарке.
[править]
Часть третья.

В файле state_lib – большая библиотека анимок. Я успел попробовать только часть. У одного бармена их 12. Правда, из пяти опробованных мной сработала только одна bar_sleep - НПС положит голову на руки сложенные перед лицом и будет спать стоя.

Анимки - barman_talk_freу, barman_shock, barman_wait_danger, barman_walk_danger - никакого эффекта не дали. Видимо, они работают только на бармене. Остальные пробуйте сами.

Анимка psy_pain – пораженный пси-излучением. Чувак сядет на колени, начнет трясти головой и бить себе руками по голове.

psycho_pain – вроде бы тоже самое, только чувак обхватывает голову руками и так сидит.


Анимки psy_shoot, psy_armed, psycho_pain, psycho_shoot– пока остаются на стадии исследования. Так как с ними либо глючит, либо вылетает.

я сам новичек в этом деле но это легко поэтому знаю во первых инфопоршн не нужен
нужно прописать ему логику
[logic]
active=sleeper
trade = misc\trade_prapor.ltx---основная логика
on_death = death

[sleeper]
path_main=esc_blokpost_prapor_main1
on_actor_dist_le_nvis = 2 |remark@esc_prapor--------если актер ближе двух метров выполнить

[remark@esc_prapor]
snd = esc_saw--вот сдесь название звуковой схемы
anim = eat_vodka---------------------------------что выполнить (сесеть,выпить водки ,сказать фразу)
target = actor
meet = no_meet
on_signal = sound_end| remark@esc_prapor_go------по окончании проигрыша звука выполнить

[remark@esc_prapor_go]
path_rest=rest-------все что угодно(просто у меня так)
anim = sit
target = actor
meet = meet@esc_prapor_meet
--пользоваться сполером не умею

Svoboда,

custom_data = <[smart_terrain]
none = true

cfg = scripts\az_patrul_1.ltx
END

А чтобы ходил не тупо по маршруту, если такая простая логика, то лучше так - а тайминги и вероятности проставишь сам.
"=="

[piyan_kapitan_look]
points = p0,p1,p2
p0:name = wp00|t=1000
p0:flags = 0x1
p0:position = -147.18115234375,-0.584499299526215,-305.457458496094
p0:game_vertex_id = 447
p0:level_vertex_id = 90847

p1:name = wp01|t=1000
p1:flags = 0x2
p1:position = -151.469772338867,1.54915750026703,-294.154266357422
p1:game_vertex_id = 447
p1:level_vertex_id = 86489

p2:name = wp02|t=1000
p2:flags = 0x3
p2:position = -154.860473632813,0.0715790092945099,-300.463287353516
p2:game_vertex_id = 447
p2:level_vertex_id = 82560


[piyan_kapitan_walk]
points = p0,p1,p2
p0:name = wp00
p0:flags = 0x1
p0:position = -146.631423950195,-0.615138828754425,-305.455871582031
p0:game_vertex_id = 447
p0:level_vertex_id = 91609
p0:links = p1(1),p2(1)

p1:name = wp01
p1:flags = 0x2
p1:position = -150.6865234375,1.56070673465729,-293.817443847656
p1:game_vertex_id = 447
p1:level_vertex_id = 87210
p1:links = p0(1),p2(1)

p2:name = wp02
p2:flags = 0x3
p2:position = -155.097885131836,0.12029841542244,-300.179504394531
p2:game_vertex_id = 447
p2:level_vertex_id = 81791
p2:links = p0(1),p1(1)
PRO100 STALKER
PRO100 STALKER
новичок

Сообщения : 28
Дата регистрации : 2014-03-29
Возраст : 33
Откуда : Рязань

http://logowo.ucoz.ru/

Вернуться к началу Перейти вниз

Правки игровых файлов Empty Re: Правки игровых файлов

Сообщение автор PRO100 STALKER в Чт Апр 03 2014, 23:07

Добавление статей в ПДА:
Добавление статей в PDA
Добавление статьи
На примере статьи из Artefact Activation Mod разберем их добавление в PDA:
• Добавим в файл config\gameplay\encyclopedia_zone.xml новую статью:



ui_icon_photo
enc_zone_anomalies_activation_basic

Здесь:

o article id - внутреннее имя статьи, именно на него ссылаются в файлах игры
o name - имя статьи, отображаемое в игре, подгружается из строкового массива
o texture - картинка и её позиция в статье, в данном случае мы использовали обычный белый шум
o text - текст статьи, отображаемый в игре, подгружается из строкового массива
• Добавим в, например, config\gameplay\info_l01escape.xml (инфопорции уровня "Кордон") ссылку на получение статьи - скажем, к трупу у туннеля, при обыске которого выдается информация о аномалиях в туннеле (вы его обнаруживаете, проходя второе спецзадание от Сидоровича). Найдем эти строки и дополним их:


tutorial_moving_anomaly

'''
zone_anomalies_activation_basic
'''

Главное - никогда не путайте article id, name и text статьи. Я в данном примере это сделать легко. Лучше называйте их непохожими друг на друга названиями.
• Так как в статье у нас есть такое поле:
enc_zone_anomalies_activation_basic
Да и название тоже не написано прямо, а ссылается на определенную строку, то добавим этот самый text в config\text\rus\string_table_enc_zone.xml, в нашем случае:

Активация - базис


С артефактами связана, помимо всего прочего, ''(ну, и так далее, там большой текст)''...

Дополнительно
Чтобы статья добавлялась при получении определенного задания, в ..._task.xml (вместо ... стоит название уровня) нужно прописать конструкцию вида:
название_задания_descr

PRO100 STALKER
PRO100 STALKER
новичок

Сообщения : 28
Дата регистрации : 2014-03-29
Возраст : 33
Откуда : Рязань

http://logowo.ucoz.ru/

Вернуться к началу Перейти вниз

Правки игровых файлов Empty Re: Правки игровых файлов

Сообщение автор PRO100 STALKER в Чт Апр 03 2014, 23:09

Делаем новую еду:

Характеристики


В директории <Каталог игры>\temp появится все содержимое архива gamedata.db0. Сегодня нас из всего этого великолепия интересует только файл items.ltx, посвященный всяческим полезным вещичкам из инвентаря главного героя. Находится этот файл в субдиректории \config\misc. Его мы и будем править. Для этих целей подойдет обычный «Блокнот».

Файл разделен на три части (имена каждой из них отмечены рядами точек с запятыми): FOOD, MEDICAL и DEVICES. Каждая из них содержит характеристики различных видов предметов: первая — продуктов питания, вторая — медицинских принадлежностей, третья — всевозможных девайсов.

Каждой отдельной вещи отводится свой раздел (блок), имя которого заключено в квадратные скобки. Практически во всех блоках из первых двух частей файла вы сможете встретить следующие атрибуты:

cost — стоимость предмета;

inv_name — название вещи; обратите внимание, что здесь прописывается не то наименование, которые вы видите в игре, а лишь ссылка на него (имя раздела в файле string_table_enc_equipment.xml, в нем содержится само название);

inv_weight — вес;

inv_grid_width — количество клеток по горизонтали, которое занимает вещь в инвентаре;

inv_grid_height — число клеток по вертикали;

description — описание предмета; как и в случае с показателем inv_name, здесь содержится не сам текст, а лишь указание на него (а точнее — название соответствующего раздела в файле string_table_enc_equipment.xml).

Следующие шесть характеристик определяют прирост, который ваш герой получает к тому или иному показателю после использования вещи. Значения могут быть и отрицательными — в этом случае характеристики ухудшаются.

eat_health — прибавка к здоровью;

eat_satiety — насыщение организма (сытость);

eat_power — бонус к силе (энергии);

eat_radiation — защита от радиации; в данном случае отрицательное значение параметра улучшает защиту (при положительном значении ваш герой будет переносить радиацию еще тяжелее, чем обычно);

eat_alcohol — действие алкоголя; чем выше число, тем большие проблемы со зрением и координацией испытывает герой;

wounds_heal_perc — остановка кровотечения.

Пиво и ром — почувствуйте разницу. После употребления пива вашего героя лишь слегка заносит на поворотах. Ром куда крепче — перед глазами все буквально плывет.

Готовка

Путем редактирования файла items.ltx добавим в игру ряд уникальных полезных вещиц, которые здорово разнообразят джентльменский набор сталкера и окажут вам неоценимую помощь в сложных игровых ситуациях.

Алкоголь

Водку описывает блок под названием vodka (кто бы мог подумать?!). Ее мы преобразуем в ром или там пиво — как вам угодно. В первом случае понадобятся следующие изменения: cost — 200, eat_satiety — 0, eat_health — -0.03, eat_radiation — -0.5, eat_alcohol — 0.3.

В оригинале водка слегка сбивает у вас аппетит и чуть-чуть укрепляет здоровье — все это, согласитесь, не совсем естественно. У нас же в моде заменяющий ее ром никакого насыщения организму не дает, а здоровье, наоборот, заметно подсаживает. Да и крепкий он очень — в глазах от него плывет еще сильнее, чем он водки (так что будьте с ним осторожнее). Зато он намного эффективнее борется с радиацией.

Если вы желаете заменить водку пивом, изменения должны быть такими: cost — 50, eat_health — 0, eat_radiation — -0.2, eat_alcohol — 0.05. Этот пенный напиток в нашем моде, по сути, является облегченной версией водки: от радиации предохраняет похуже, но и опьянение от него слабое.
Энергетик

Энергетический напиток Non Stop несложно переделать в алкогольно-энергетический. Для того чтобы изготовить этот чудный коктейль, нужно перейти в раздел energy_drink и смешать ингредиенты в следующих пропорциях: cost — 80, eat_power — 0.7, eat_alcohol — 0.08, eat_radiation — -0.3. Готово — можно пробовать. Однако учтите, что эта гремучая смесь немного опьяняет, зато является средством защиты от радиации и энергетиком в одном флаконе. Хотя, конечно, оба этих полезных качества в данном случае не столь эффективны, как при использовании узкоспециализированных водки и Non Stop.
Наркотик

Обычную же консерву мы превратим в... мощный наркотик-стимулятор (благо консервы в игре не очень-то и нужны, ведь есть другая еда — хлеб и колбаса). Все, что для этого нужно, — внести следующие преобразования в блок conserva: cost — 120, inv_weight — 0.2, eat_health — -0.05, eat_satiety — 0.1, eat_power — 1.8. Получившаяся смесь губительно сказывается на здоровье, но дает просто фантастический прилив энергии, да и весит всего ничего. Кроме того, этот наркотик немного отбивает аппетит.

После того как корректировка файла items.ltx будет завершена, скопируйте его в <Каталог игры>\gamedata\config\misc (для этого вам понадобится предварительно создать в папке \gamedata подкаталог \config\misc).
Упаковка

С «начинкой» покончено. Осталось придать продуктам питания подходящий внешний вид, а также сделать соответствующие названия и описания.

Переименование

Чтобы изменить описания, вам придется поработать с архивом gamedata.db9. Распаковать его можно следующим образом: находясь в директории игры, наберите в командной строке: STALKER_Data_Unpacker_RU.exe gamedata.db9 \temp. Теперь отправляйтесь в папку <Каталог игры>\temp\config\text\rus, где вас уже поджидает файл string_table_enc_equipment.xml, содержащий наименования и описания предметов. Его также можно редактировать в «Блокноте».

Наркотик дает столь мощный прилив энергии, что враги подчас просто не поспевают за действиями главного героя.


Все xml-файлы устроены следующим образом. Каждой надписи соответствует небольшой раздел вида:



Y



Здесь X — название блока, то есть кодовое наименование объекта, к которому относится надпись. Y — сам текст.

Сначала исправьте названия переделанных нами ранее вещей. Отыщите блок со словом Vodka. На месте Y в нем стоят слова «водка «Казаки». Исправьте ее на «Ром» или «Пиво» (без кавычек) — в зависимости от того, какой напиток вы добавили в игру.

В разделах energy_drink_name и energy_drink_short_name сочетание «Энергетический напиток Non Stop» следует заменить, скажем, на «Алкогольно-энергетический напиток». Наконец, в блоке Conserva исходный текст «Радость туриста» следует исправить на «Наркотик-стимулятор».

Далее подредактируйте описания экс-водки (раздел enc_equipment_food_vodka1), экс-энергетика (enc_equipment_energydrink) и экс-консервов (enc_equipment_food_conserva1).

После завершения всех текстовых преобразований файл string_table_enc_equipment.xml следует скопировать в <Каталог игры>\gamedata\config\text\rus (предварительно создав в папке \gamedata\config субдиректорию \text\rus).
Перевоплощение

Самое время изменить внешний вид наших крайне полезных продуктов питания. На этот раз нам понадобится архив gamedata.db7. Распакуйте его, напечатав в командной строке следующий текст: STALKER_Data_Unpacker_RU.exe gamedata.db7 \temp. В директории <Каталог игры>\temp\textures\ui вы обнаружите файл ui_icon_equipment.dds. Он содержит изображения вещей из инвентаря. Чтобы увидеть и подкорректировать эти картинки, файл нужно перевести в стандартный формат. В этом вам поможет набор утилит DXT Tools (находится на нашем диске в разделе «Игрострой»).

Ром значительнее лучше водки защищает от радиации. Но лучше им не злоупотреблять.


Скопируйте файл ui_icon_equipment.dds в каталог, в который вы установили DXT Tools. Находясь в этом каталоге, наберите в командной строке: readdxt.exe ui_icon_equipment.dds. В результате вы получите искомую картинку в виде файла test.tga. Открывайте его в Photoshop (или в каком-то другом мощном графическом редакторе) и готовьте кисти.

Полученный файл содержит альфа-канал. Чтобы его увидеть, в списке каналов (меню Channels) программы выберите пункт Alpha 1 (вместо прежнего RGB). Вашему взору предстанут знакомые вам по игре изображения, но закрашенные в белый цвет. Эти шаблоны задают форму каждого отдельного предмета и его границы. Если вы задались целью хоть чуточку изменить размер объекта, не забудьте отредактировать и альфа-канал. Например, если вы подрисовываете к вещи какой-то новый элемент, перейдите в режим в Alpha 1 и обязательно залейте его белым цветом.

Впрочем, если вы не планируете глобальных изменений, можно и вообще не трогать альфа-канал. Например, для трансформации водки в ром или пиво совершенно необязательно менять форму бутылки. Достаточно просто-напросто «переклеить» этикетку и нанести какую-то новую надпись (название напитка или производителя) или логотип. То же самое и с банкой энергетика. Только учтите, что новые рисунки должны быть максимально крупными, иначе вы их просто не разглядите в игре.

Консервную банку можно преобразовать в... таблетку. Здесь-то вам как раз и пригодится альфа-канал. Совсем несложно закрасить черным цветом (именно тем его оттенком, что разграничивает предметы в файле) консерву и на ее месте с использованием инструмента «Эллипс» (Ellipse Tool) нарисовать одну или лучше несколько таблеточек. После этого, перейдя в режим альфа-канала, закрасьте получившиеся кружки белым цветом.

Когда все графические экзерсисы будет закончены, сконвертируйте файл test.tga обратно в формат dds. Для этого в папке DXT Tools пропишите в командной строке: nvdxt test.tga. Переименуйте сформированный файл test.dds в ui_icon_equipment.dds и скопируйте в <Каталог игры>\gamedata\textures\ui.
* * *

Мы добавили в игру четыре невиданных ранее продукта: ром, пиво, алкогольно-энергетический напиток и наркотик-стимулятор. При желании вы можете сотворить еще несколько не менее полезных продуктов, изменяющих характеристики главного героя. Описанным в статье способом очень легко создавать небольшие, но крайне интересные модификации. Главное — не забывать о балансе
PRO100 STALKER
PRO100 STALKER
новичок

Сообщения : 28
Дата регистрации : 2014-03-29
Возраст : 33
Откуда : Рязань

http://logowo.ucoz.ru/

Вернуться к началу Перейти вниз

Правки игровых файлов Empty Re: Правки игровых файлов

Сообщение автор grifon в Чт Апр 03 2014, 23:23

Я конечно не врубился, но прошелся с удовольствием класс Хотелось бы, Никита - чтобы у тебя появилось побольше читателей хихи 

_________________
Правки игровых файлов 711a6de9e6bbc0f18eec498ecfdd6d20
grifon
grifon
СТРАННИК БРАТСТВА

Сообщения : 17606
Дата регистрации : 2012-08-03
Возраст : 63
Откуда : Украина

Вернуться к началу Перейти вниз

Правки игровых файлов Empty Re: Правки игровых файлов

Сообщение автор PRO100 STALKER в Пт Апр 04 2014, 00:08

Тёмная ночь:
Тёмная ночь Вам потребуется:
config/weathers/weather_default.ltx

Вначале список - это время, потом характеристики
для каждого часа.

Темная ночь:
[default_weather_02]
ambient = 0.0025, 0.005, 0.0075
hemi_color = 0.025, 0.05, 0.075, 0.1
PRO100 STALKER
PRO100 STALKER
новичок

Сообщения : 28
Дата регистрации : 2014-03-29
Возраст : 33
Откуда : Рязань

http://logowo.ucoz.ru/

Вернуться к началу Перейти вниз

Правки игровых файлов Empty Re: Правки игровых файлов

Сообщение автор PRO100 STALKER в Пт Апр 04 2014, 00:09

Диалоги:

Создание новых веток диалогов

1) В файле gamedata/config/gameplay/character_desc_escape.xml в конце списка веток для trader припишем свою ветку с произвольным названием. Это будет, например, escape_trader_letat_gusi.

Т.е у нас получится так:

...
escape_trader_start_dialog
escape_trader_talk_info
escape_trader_jobs
tm_trader_dialog
tm_trader_reward
escape_trader_done_blockpost_box
escape_trader_letat_gusi



Записываем изменения, с этим файлом пока всё.

2) Теперь берем файл gamedata/config/gameplay/dialogs_escape.xml

Диалогу:
Меченый: Сидрыч а почему это у тебя зеленые человечки, что по столу бегают, такие худые?
Сидорович: Чего?!!
Меченый: Ты их совсем, совсем не кормишь?
Сидорович: В следующий раз, как пойдешь в зону, бери-ка вместо водяры побольше антирада. А то
мало что таким перегаром дышишь, уже до зеленых человечков долечился... Шутник.

Будет соответствовать такая структура:

escape_trader_letat_gusi_0
1


escape_trader_letat_gusi_1
2


escape_trader_letat_gusi_2
3


escape_trader_letat_gusi_3


Условия наличия ветки в диалоге можно взять из ветки .

Т.е берем условия escape_dialog.trader_has_talk_info_wr и tutorial_end. Можно было, конечно, прописать в скрипте еще одно условие для ветки, чтобы она появилась только один раз, а потом больше не возникала. Но об этом как-нибудь позже.

В итоге у нас получилась такая структура:

escape_dialog.trader_has_talk_info_wr
tutorial_end


escape_trader_letat_gusi_0
1


escape_trader_letat_gusi_1
2


escape_trader_letat_gusi_2
3


escape_trader_letat_gusi_3




Её нужно вставить в любом месте между dialog id'ами других веток в файле dialogs_escape.xml. Главное - не промахнутся и засунуть именно между, а не внутрь одного из dialog id.

После сохранения внесенных изменений с файлом dialogs_escape.xml все.

3) Теперь вбиваем сами текстовички в файле gamedata/config/text/rus/stable_dialogs_escape.xml

Т.е нам надо в файле stable_dialogs_escape.xml вставить такую конструкцию:

Сидрыч, а чего это у тебя зеленые человечки, что по столу бегают, такие худые?


Чего?!


Ты их совсем, совсем не кормишь?


В следующий раз, как пойдешь в зону, бери-ка вместо водяры побольше
антирада. А то мало что таким перегаром дышишь, уже до зеленых человечков долечился...
Шутник.




В любом месте между уже существующими string id. После сохранения изменений, у нас все готово. Можно загружать игру и смотреть что получилось.
Дополнительно

Внимание! После патча 1.002 данный урок перестал работать. Причина - со вторым патчем несовместимо это условие:
escape_dialog.trader_has_talk_info_wr

Дело в том, что во втором патче из файла escape_dialog.script была удалена функция:
function trader_has_talk_info_wr( trader, actor )
return true
end

Можно либо записать эту функцию обратно в escape_dialog.script, либо использовать другие более-менее подходящие условия, например:
escape_dialog.trader_alredy_give_job

Всё. Мы научились писать простые диалоги.


Последний раз редактировалось: PRO100 STALKER (Пт Апр 04 2014, 00:14), всего редактировалось 2 раз(а)
PRO100 STALKER
PRO100 STALKER
новичок

Сообщения : 28
Дата регистрации : 2014-03-29
Возраст : 33
Откуда : Рязань

http://logowo.ucoz.ru/

Вернуться к началу Перейти вниз

Правки игровых файлов Empty Re: Правки игровых файлов

Сообщение автор PRO100 STALKER в Пт Апр 04 2014, 00:10

Новые миссии:
На PDA Меченого поступило очередное задание — найти и уничтожить в глухой чащобе волка-отшельника. Темный-темный лес. Звенящая тишина. Отсутствие видимых признаков жизни. Внезапно Меченый видит на опушке домик, заходит внутрь и встречается с хозяином, который рассказывает главному герою обо всех ужасах, творящихся в здешних местах.

Нет, это не сюжет продолжения «Сталкера», а всего лишь одна дополнительная миссия, разработанная в нашей игрострой-лаборатории. В прошлых статьях по модифицированию «Сталкера» мы изучили интерфейс редактора карт из официального SDK, а также научились конструировать несложные уровни для игры на основе стандартных объектов и новых сцен, изготовленных в 3DS Max. Сегодня мы двинемся дальше — осветим тему написания несложных типовых квестов для игры.
Быстрый старт

Поскольку официальный редактор не позволяет править уровни одиночной игры, а как следствие — редактировать файлы скриптов, путей следования NPC и другие ресурсы, мы будем писать квесты в... обычном «Блокноте». У данного подхода есть всего лишь один минус, который отпугивает большинство модмейкеров, — отсутствие удобной оболочки, редактора для просмотра содержимого файлов просто нет. Зато плюсов куда больше: возможность правки любых параметров, открытые для редактирования исходные коды и многое другое. Игра стоит свеч.


С чего же начать? Первым делом попрактикуемся в создании несложных типовых заданий типа «убить сталкера», «уничтожить лагерь», «найди ценный артефакт».

Запустите «Блокнот» и подгрузите в него файл task_manager.ltx из директории gamedata\config\misc с распакованной игрой (если у вас есть лишь недавно установленная версия «Сталкера», разархивируйте базы данных игры при помощи утилиты S.T.A.L.K.E.R. Data Unpacker).

Файл содержит информацию о простейших игровых заданиях. Структура его следующая. В первой части файла — от оператора [list] до кейворда sar_monolith — объявляются специальные метки, ответственные за подключение новых квестов к игре. Пример одной из таких конструкций — буквосочетание tm_kill_stalker_5, это название типовой миссии. Во второй части файла — после ключевого слова sar_monolith — размещаются тексты заданий: цели, задачи, ссылки на диалоги. Разберем структуру одного из квестов, начинающегося со специальной метки [tm_kill_stalker_3] (обратите внимание, что при объявлении задания в первой части файла квадратные скобки ставить не нужно):

[tm_kill_stalker_3]

type = kill_stalker

community = actor

text = tm_kill_stalker_3_text

description = tm_kill_stalker_3_descr

parent = trader

target = sim_stalker_novice

;reward_money = 1000

reward_reputation = -5

reward_rank = 2

reward_item = af_blood

time = 86400

prior = 2

Рассмотрим основные параметры. Самый первый — type — отвечает за тип задания, в данном случае — уничтожить сталкера (kill_stalker). В игре предусмотрено несколько видов стандартных заданий: уничтожение/защита лагеря (параметр eliminate_lager/defend_lager), убийство сталкера (kill_stalker), поиск артефакта/конечности монстра/предмета (artifact/monster_part/find_item).
Поскольку специальных редакторов и утилит для изменения «Сталкера» нет, приходится править скрипты в «Блокноте», а игровые тексты — в табличном редакторе Excel. Не очень удобно, но альтернативы просто нет.



Параметр community определяет группировку, к которой принадлежит главный герой. По умолчанию во всех миссиях в качестве значения данной характеристики используется ключевое слово actor (персонаж).

text — название записи в файле stable_task_manager.xml, содержащей текст задания. Текст отображается в диалогах.

description — запись в файле stable_task_manager.xml. Здесь собран текст миссии, выводимый на PDA Меченого.

Следующая настройка — атрибут parent — определяет имя заказчика, в данном случае trader (торговец Сидорович).

target — цель миссии, в текущем квесте — убийство одного из сталкеров — novice (sim_stalker_novice).

reward_money — награда, которую получит игрок после выполнения задания.

reward_reputation — число очков репутации, добавляемое игроку после прохождения квеста. Вы можете понизить Меченому репутацию за выполнение задания, выставив в качестве значения атрибута любое целое отрицательное число.

reward_rank — количество ранговых очков за выполнение миссии.

reward_item — бонусные предметы, вручаемые главному герою, за прохождение квеста.

time — время (в секундах), в течение которого игрок должен пройти миссию.

prior — приоритет данного задания перед остальными. Цифра 1 ставится в том случае, если задание крайне важно, и далее по нисходящей.

Самое время попрактиковаться и модифицировать какой-нибудь оригинальный игровой квест. Отыщите строку [tm_kill_stalker_5] (для вызова меню поиска в «Блокноте» воспользуйтесь комбинацией горячих клавиш Ctrl+F) и модифицируйте параметры данной миссии. Например, вы можете просто повысить/понизить сложность игры, увеличив или уменьшив время, отведенное игроку на выполнение задания (параметр time), снять значок блокировки строки (символ ;), reward_money (денежное вознаграждение) или, скажем, придать параметру reward_reputation значение ноль, чтобы Меченый не терял репутацию в Зоне.
Текстовый беспредел

С правкой исходного кода миссии мы разобрались. Движемся дальше и приступаем к модификации игровых текстов. Загляните в каталог gamedata\config\text\rus установленной игры, отыщите в директории файл stable_task_manager.xml и откройте его при помощи табличного редактора Microsoft Excel.

После запуска программы вы увидите, что вся информация из XML-файла будет распределена по двум столбцам — A и B, которым соответствуют названия id (идентификационный номер) и text (текст). Если спускаться плавно вниз по столбцу id, то нетрудно установить так называемую закономерность. Строки 3, 6, 9 и далее в арифметической прогрессии содержат заголовок типовой миссии. Строки 4, 7, 10, 13, 16 с окончанием _descr — краткое описание (цель задания), выводимое на PDA главного героя. Ну а строки 5, 8, 11, 14 и далее, заканчивающаяся на _text, содержат текст, отображаемый во время диалога с персонажем, у которого вы получили задание.

Таким образом, для изменения текстов того или иного одноуровневого задания, прописанного в файле task_manager.ltx, вам нужно проделать следующие нехитрые манипуляции. Первым делом скопируйте в «Блокнот» название определенной миссии из task_manager.ltx (без квадратных скобок), ее описание для вывода на PDA (параметр description) и текст диалога (text). Затем поочередно отыщите выписанные ключевые слова в XML-файле stable_task_manager.xml и модифицируйте текст каждой из записей. Закончив правку задания, сохраните все изменения и протестируйте квест в игре.Тонкости квестостроения


Чтобы оставить свой собственный авторский след в файле task_manager.ltx, да и вообще в любом конфигурационном файле «Сталкера», нужно всего-то лишь поставить в нужном месте (после кода или с новой строки) символ точки с запятой и после него вживить комментарий, например: tm_eliminate_camp_4 ; игроманский комментарий, не удалять.
Далеко не все квесты, написанные разработчиками, вошли в оригинальную игру. Что, никогда о таком не слышали? Тогда имейте в виду, что, например, в файле task_manager.ltx содержится ряд закомментированных, но вполне рабочих заданий, цель которых сводится к убийству сталкеров и поиску полезных вещиц. После тщательного прочесывания документа на наличие такого рода заданий мы обнаружили следующие заблокированные квесты:

;--[barmen_eliminate_camp_3]

;--[barmen_find_item_1]

;--[barmen_find_item_2]

;--[barmen_find_item_3]
Для преобразования геймплея S.T.A.L.K.E.R. достаточно поправить всего лишь несколько параметров каждой типовой миссии в файле task_manager.ltx. Как вариант, вы можете значительно сократить время, отведенное на выполнение каждого квеста, занизить очки репутации за прохождение той или иной миссии, но в то же время в несколько раз увеличить число бонусов и денежных средств.

Квестострой

Теперь, когда вы изучили основы редактирования однотипных игровых заданий, можно попробовать силы в написании своего собственного квеста — создать необходимые записи в менеджере заданий (файл task_manager.ltx), а также снабдить квест текстовыми описаниями.

Запустите «Блокнот» и подгрузите в него файл task_manager.ltx из директории gamedata\config\misc. Отыщите ключевое слово sar_monolith и после него с новой строки добавьте следующую конструкцию:

; Ваш авторский комментарий

[mission_name]

Здесь [mission_name] — произвольное наименование квеста, например, tm_kill_stalker_7.

Для изменения игрового баланса нужно отредактировать коды типовых заданий.


Далее скопируйте какое-нибудь типовое задание, например, [tm_kill_stalker_2] в буфер обмена и поместите дубликат в самый конец документа. Измените название клонированной миссии, заключенное в квадратные скобки, на название квеста, объявленного вами в списке заданий. Модифицируйте параметры оригинальной миссии, при необходимости добавьте в код миссии дополнительные команды. Самое главное — не забудьте поправить значения параметров text и description, которые соответствуют названиям текстовых записей в файлах gamedata\config\gameplay\storyline_info_taskmanager.xml и gamedata\config\text\rus\stable_task_manager.xml. Затем откройте «Блокнотом» XML-файл storyline_info_taskmanager.xml из каталога gamedata\config\gameplay с игрой и добавьте в конец файла следующий блок:



[descr]



В данном фрагменте кода [descr] — значение параметра description в теле миссии, (в нашем случае — tm_kill_stalker_7_descr).

Осталось внести изменения в файл stable_task_manager.xml, содержащий тексты заданий на русском языке. Перейдите в каталог gamedata\config\text\rus и при помощи любого табличного редактора — скажем, Excel — откройте файл stable_task_manager.xml. Передвиньте ползунок в правой части программы в нижнюю часть документа. В ячейке на пересечении 391 строки и первого столбца введите ключевое слово, соответствующее названию вашего квеста в файле task_manager.ltx. После этого в поле напротив (ячейка B-391) напечатайте название будущего задания.

В поле A-392 (A — название столбца, 392 — порядковый номер строки) вбейте название, прописанное в качестве параметра description вашей миссии, а в области B-392 — текст сообщения, который будет подан на PDA главного героя. В ячейке A-393 пропишите значение характеристики text вашей миссии и в поле напротив наберите текст задания для отображения во время беседы между Меченым и работодателем. Сохраните изменения и закройте табличный редактор.
* * *

Мы изучили азы создания несложных квестов для S.T.A.L.K.E.R. и попутно разобрали структуру скриптовых файлов. Если тема создания новых миссий для «Сталкера» вам интересна, обязательно загляните в раздел «Игрострой» на нашем DVD. Там вас поджидает подробное руководство по разработке сложных миссий и написанию нелинейных диалогов для S.T.A.L.K.E.R.. Заранее предупреждаем — материал рассчитан на модмейкеров со стажем.
PRO100 STALKER
PRO100 STALKER
новичок

Сообщения : 28
Дата регистрации : 2014-03-29
Возраст : 33
Откуда : Рязань

http://logowo.ucoz.ru/

Вернуться к началу Перейти вниз

Правки игровых файлов Empty Re: Правки игровых файлов

Сообщение автор PRO100 STALKER в Пт Апр 04 2014, 00:16

Новые мисии(немного изменил):
Создание квестов (базовый уровень) Вступление

Небольшие правила, следуя которым, можно сберечь себе много нервов:

- всегда сохраняйте резервные копии модифицируемых файлов - старайтесь почаще тестировать внесенные изменения - так проще понять, в чем вы ошиблись (если активно работать пару часов без остановки, не разу не протетировав внесенные изменения, то потом будет очень сложно понять - почему же, черт возьми, игра вылетает при попытке поговорить с Сидоровичем?) - перед началом работы создайте новую папку gamedata, а свои моды спрячьте подальше: работать с "чистой" версией игры не в пример удобнее и проще; особенно противопоказан Repair Mod, который с новыми диалогами часто конфликтует. О том, как создать диалоги и квесты, исключающие возможность конфликта с другими подобными модами, см. часть 4.
Создание базового диалога

Начнем создание квеста с написания небольшого линейного диалога.

Открываем файл gamedata\config\gameplay\character_desc_escape.xml и проводим такие манипуляции:

- находим строку "escape_trader_done_blockpost_box" - добавляем после нее новую - "escape_trader_oops" - сохраняем изменения

Мы добавили к Диалогу с Сидоровичем новую ветку, вернее, только ссылку на неё. Сама внутренняя структура ветки хранится в файле gamedata\config\gameplay\dialogs_escape.xml, который мы открываем и производим:

- находим в любом месте файла промежуток между и - засовываем туда такую конструкцию:

escape_dialog.trader_alredy_give_job
tutorial_end


escape_trader_oops_0
1


escape_trader_oops_1
2


escape_trader_oops_2
1


escape_trader_oops_3




- сохраняем изменения

Теперь у нас прописана структура новой ветки диалога. Осталось сделать еще одну вещь - прописать строки, которые будут отображаться вместо "escape_trader_oops_...".

Для этого откроем файл gamedata\config\text\rus\stable_dialogs_escape.xml и сделаем следующее:

- находим любой удобный промежуток между и - прописываем туда следующие строки:

Сидрыч, давай поговорим о... водке.


водке? Да какая водка? Нет её у меня, кончилась. Вроде у Волка на чердаке была, что-то он
однажды об этом упоминал... Принеси, а?




Да сбегаю я сейчас, сбегаю... алкоголик, блин.


Беги, беги... сил уж нет ждать.


- сохраняем изменения

Всё. Диалог готов. Можно грузить игру и смотреть, работает ли новая ветка. А теперь будем прикреплять к этому безобразию квест ""Принеси водки Сидоровичу".


Создание базового квеста

Активацию квеста в диалог прикрепить достаточно просто. Проводим с файлом gamedata\config\gameplay\ dialogs_escape.xml следующие манипуляции:

- добавляем содержимое фразы следующим:


escape_trader_oops_2
kvest_vodka_started
3


- сохраняем изменения

Теперь после фразы Меченого "Да сбегаю я сейчас, сбегаю..." Сидорович таки всучивает нам квест "Принеси водку". Но не спешите тестировать изменения. Мы добавили в диалог упоминание о квесте, хотя он еще не создан.

Исправим это недоразумение. Откройте файл gamedata\config\gameplay\tasks_escape.xml и в начале файла создайте такую конструкцию:

Принести водки

Принести водки Сидоровичу
ui_iconsTotal_find_item
test_quest_vodka_otdana


Вернуться с водкой обратно
green_location
Escape_novice_lager_volk
test_quest_vodka_otdana


Найти водку на чердаке
blue_location
Escape_Trader
test_quest_vodka_otdana



Мы прописали данные о квесте: название, иконку, строки заданий, расположение маркеров и т.д.

К этому файлу мы еще вернемся, т.к. в этом варианте многое проставлялось не иначе как от балды. Я еще подумаю, как заставить задание "Вернуться с водкой обратно" появиться в PDA, а то оно что-то не желает явить себя народу... впрочем, ладно, главное, что все работает и не вылетает. А исправление столь мелких багов - дело десятое. Продолжим.

Откроем файл gamedata\config\gameplay\info_l01escape.xml и зарегистрируем до того отсутствовавшие в игре типы условий (они нам еще пригодятся для завершения работы над квестом):

- после строки прописываем:



esc_test_vodka_task




С прописыванием условий - всё.

Теперь займемся одной небольшой, но нужной вещью - прописыванием экранных подсказок, которые высвечиваются при получении/выполнении этапа/завершении задания.

Для этого откроем файл gamedata\config\text\rus\string_table_tasks_escape.xml и пропишем там:

Принести бутылку водки


Найти водку на чердаке у Волка


Принести водку Сидоровичу


Теперь можно тестировать, что получилось. Сверяем результаты:

- по окончанию разговора про водку у вас появляется новое задание - в задании маркером отмечен Волк (ближайший к чердаку маркер, потому и отмечен) - при получении задания на экране высвечивается уведомление

Можно приступать к третьей стадии. Что мы забыли? Правильно - возможность выполнить квест.


Реализация возможности выполнить квест

На самом деле - все просто. Все условия и т.д. уже нами созданы, осталось только применить их в диалоге. Давайте несколько изменим его структуру, сделаем его ветвистым и функциональным:

0. Сидрыч, давай поговорим о... водке. ( переход к 1)

1. О водке? Да какая водка? Нет её у меня, кончилась. Вроде у Волка на чердаке была, что-то он однажды об этом упоминал... Принеси, а? ( выбор - переход к 2, 4, 5; изначально доступен только 2 вариант )

2. Да сбегаю я сейчас, сбегаю... алкоголик, блин. ( получение квеста, переход к 3, после этого перестает быть доступен )

3. Беги, беги... сил уж нет ждать. ( конец, переход к списку веток Сидоровича )

4. Вот она, твоя бутылка водки. Ну, вернее, не твоя, а Волка... ( появляется только при наличии водки в инвентаре, при выборе водка передается Сидоровичу, квест выполняется, идет переход к 7 )

5. Извини, Сидрыч, я пока еще не раздобыл, терпи... ( появляется только если взять квест, переход к 6 )

6. А ну марш отсюда! Без бутылки пришел... ууу, вражина... ( переход к 8 )

7. Теперь моя будет, Меченый! Ты так Волку и передай. Спасибо, выручил... держи награду. ( выдача награды, переход к 8 )

8. Ну тебя в пень... ( конец, переход к списку веток Сидоровича )

А вот так это будет выглядеть в файле gamedata\config\gameplay\dialogs_escape.xml:

escape_dialog.trader_alredy_give_job
tutorial_end


escape_trader_oops_0
1


escape_trader_oops_1
2
4
5


kvest_vodka_started
escape_trader_oops_2
kvest_vodka_started
3


escape_trader_oops_3
dialogs.break_dialog


escape_trader_oops_4
escape_dialog.have_a_vodka
escape_dialog.otday_vodku
7


kvest_vodka_started
escape_trader_oops_5
6


escape_trader_oops_6
8


escape_trader_oops_7
test_quest_vodka_otdana
escape_dialog.transfer_deneg
8


escape_trader_oops_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

Готово. Запускайте игру и любуйтесь.
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
С водкой эта функцыя проканала,а с пистолетом пришлось заменить ее на
function otday_pist(first_speaker, second_speaker)
dialogs.relocate_item_section(second_speaker, "wpn_fort", "out")

,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Для тех, кто еще с нами - сейчас мы модифицируем квест так, чтобы исключить конфликты с другими подобными модами.


Реализация совместимости

Из-за чего наш мод не может работать вместе с аналогичными ему модами? Да потому, что файлы 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"!).

Все. Теперь ваши диалоги будут подгружаться из сторонних файлов.
PRO100 STALKER
PRO100 STALKER
новичок

Сообщения : 28
Дата регистрации : 2014-03-29
Возраст : 33
Откуда : Рязань

http://logowo.ucoz.ru/

Вернуться к началу Перейти вниз

Правки игровых файлов Empty Re: Правки игровых файлов

Сообщение автор luxs в Пт Апр 04 2014, 19:04

Для меня это конечно тёмный лес, но труд конечно адский.

_________________
Правки игровых файлов 365d213d7db5ed304badc9ae2ce90e4d
luxs
luxs
Тень

Сообщения : 9016
Дата регистрации : 2012-08-04
Возраст : 55

Вернуться к началу Перейти вниз

Правки игровых файлов Empty Re: Правки игровых файлов

Сообщение автор PRO100 STALKER в Пт Апр 04 2014, 19:33

luxs, Это как раз и нужно для таких как ты( для которых "тёмный лес") там всё подробно расписано..
PRO100 STALKER
PRO100 STALKER
новичок

Сообщения : 28
Дата регистрации : 2014-03-29
Возраст : 33
Откуда : Рязань

http://logowo.ucoz.ru/

Вернуться к началу Перейти вниз

Правки игровых файлов Empty Re: Правки игровых файлов

Сообщение автор luxs в Пт Апр 04 2014, 19:35

PRO100 STALKER пишет:как раз и нужно для таких как ты

Спасибо )

_________________
Правки игровых файлов 365d213d7db5ed304badc9ae2ce90e4d
luxs
luxs
Тень

Сообщения : 9016
Дата регистрации : 2012-08-04
Возраст : 55

Вернуться к началу Перейти вниз

Правки игровых файлов Empty Re: Правки игровых файлов

Сообщение автор PRO100 STALKER в Пт Апр 04 2014, 19:38

luxs пишет:Спасибо )
Извини, что так грубо...Просто не знал как ещё написать
PRO100 STALKER
PRO100 STALKER
новичок

Сообщения : 28
Дата регистрации : 2014-03-29
Возраст : 33
Откуда : Рязань

http://logowo.ucoz.ru/

Вернуться к началу Перейти вниз

Правки игровых файлов Empty Re: Правки игровых файлов

Сообщение автор luxs в Пт Апр 04 2014, 19:46

PRO100 STALKER пишет:Извини

Ладно, проехали.

_________________
Правки игровых файлов 365d213d7db5ed304badc9ae2ce90e4d
luxs
luxs
Тень

Сообщения : 9016
Дата регистрации : 2012-08-04
Возраст : 55

Вернуться к началу Перейти вниз

Правки игровых файлов Empty Re: Правки игровых файлов

Сообщение автор снайпер в Пт Апр 04 2014, 20:33

PRO100 STALKER, Никита , РЕСПЕКТ !!! ок 

_________________
Пуля снайпера - точка в любом споре

Правки игровых файлов 711a6de9e6bbc0f18eec498ecfdd6d20 Правки игровых файлов 723788616db83c5998b70b65b154cc5f
снайпер
снайпер
СТРАННИК БРАТСТВА

Сообщения : 15551
Дата регистрации : 2012-08-03
Возраст : 59
Откуда : Белая Русь

http://bar-stalk.forum2x2.com

Вернуться к началу Перейти вниз

Правки игровых файлов Empty Re: Правки игровых файлов

Сообщение автор PRO100 STALKER в Пт Апр 04 2014, 20:48

Как изменить хар-ки мутантов:
gamedata\config\creatures файлы:
m_bloodsucker
m_boar
m_burer
m_cat
m_chimera и т.д.

Расшифровка строк:
Attack parameters -параметры атаки
Jump parameters -параметры прыжков
Entity Conditions -действия радиации, пулевых ранений на мутанта
Sounds and sound parameters -Пути к звукам для мутанта
Vision -настройки вида мутанта
Attack Animation Parameters Анимации мутанта
IMMUNITIES -имунитет мутанта к различным воздействиям
DOG Terrain -ранги мутанта(сильный слабый средний)
PRO100 STALKER
PRO100 STALKER
новичок

Сообщения : 28
Дата регистрации : 2014-03-29
Возраст : 33
Откуда : Рязань

http://logowo.ucoz.ru/

Вернуться к началу Перейти вниз

Правки игровых файлов Empty Re: Правки игровых файлов

Сообщение автор PRO100 STALKER в Пт Апр 04 2014, 22:45

Без сюжета:
Как вырезать сюжет
Начнём с ответа на вопрос «а зачем?». Рано или поздно любой, даже самый криворукий (но достаточно упорный) модмейкер осиливает создание квестов. И вот с созданием своего квеста, у некоторых возникает желание создать новый сюжет. Нужно признать, что этим, нас модмейкеры не особо балуют.
Полностью разбирать все шаги в этом деле я не буду, ибо очень много объяснять, впрочем , это и не нужно. Если модмейкер не обладает аналитическим складом ума, и делает моды только по статьям или берёт файлы из чужих модов, далеко он всё равно не зайдёт.
Для некоторых начинающих модмейкеров, достаточно просто указать «где копать» и они сами всё сделают. Вот для них статья и предназначена.
Начнём с того что создание сюжетного мода в разных частях игры требует разного кол-ва времени и усилий. Проще всего создать сюжетный мод в ЗП, практически так же просто в ЧН, ну и малость по сложнее в ТЧ.
Содержание [убрать]
1 Что такое сюжет
1.1 ТЧ
1.2 ЧН
1.3 ЗП
2 Как вырезать диалоги
3 Логика
[править]Что такое сюжет

Перед тем как вырезать из Сталкера сюжет, нужно для начала определится, что это такое.
Я для себя определил это как совокупность квестов, диалогов, действий ГГ и NPC.
[править]ТЧ

В ТЧ сюжет находится в файлах диалогов, скриптах и all.spawne
Процесс удаления старого сюжета ТЧ потребует от вас умения править all.spawn, много времени и терпения.!!!
[править]ЧН

В ЧН разрабы очень удачно вынесли из all.spawn почти все логики в configs\scripts\локация\
и соответственно упростили нам задачу.
Правда, некоторые логики (типа логики двери в бункер учёных на Янтаре) остались в all.spawne
[править]ЗП

В ЗП, вместе со всем, что было нам интересно в Сталкере, разрабы убили и множество технических недоработок.
В том числе и логики из all.spawn все вынесены в папку с конфигами - configs\scripts\локация\, за что им отдельное спасибо.
[править]Как вырезать диалоги

Начнём с диалогов:
Тут проще некуда. Сюжетные диалоги доступные персонажам прописаны у них в профилях.
Заходим в config\gameplay\, редактируем файлы character_desc_****.xml
Наша задача закомментировать следующие теги:




Надеюсь, как комментировать xml-теги вы знаете.
ПРИМЕЧАНИЕ: проще и быстрее всего побороть все эти теги можно с помощью текстовых редакторов типа Notepad++.
Пользуемся функцией замены текста. Небольшое уточнение от ASD: при комментировании xml тегов, не забывайте в конце ставить -- , т.к. это завершает комментирование.
Образец

или

[править]Логика

Теперь нужно побороть логику, которая отвечает за выдачу инфопорций, квестов и т.д.
В ТЧ они находятся в all.spawne, в аддонах в configs\scripts\локация\.
Чтобы вы долго не искали я напишу какие строчки нужно комментировать (желательно делать всё это с помощью замены текста, иначе вы состаритесь пока всё в ручную закомментируете).
Итак, комментируем следующие строчки:
on_actor_dist_le =
on_actor_dist_le_nvis =
on_actor_dist_ge =
on_actor_dist_ge_nvis =
on_signal =
on_info =
on_info2 =
on_info3 =
on_info4 =
on_timer =
on_game_timer =
on_actor_in_zone =
on_actor_not_in_zone =
on_actor_inside =
on_actor_outside =
on_npc_in_zone =
on_npc_not_in_zone =
allow_break = false
meet_dialog =
ПРИМЕЧАНИЕ: некоторые логики (типа логик дверей или баз) нужно потом будет восстановить (то есть раскомментировать).
Всё, удачи.
PRO100 STALKER
PRO100 STALKER
новичок

Сообщения : 28
Дата регистрации : 2014-03-29
Возраст : 33
Откуда : Рязань

http://logowo.ucoz.ru/

Вернуться к началу Перейти вниз

Правки игровых файлов Empty Re: Правки игровых файлов

Сообщение автор PRO100 STALKER в Пт Апр 04 2014, 22:47

Новые переходы:
Спавн точек перехода между уровнями

В этой статье я попытаюсь передать практический опыт скриптового создания точек перехода между уровнями. Файл all.spawn меняться не будет, поэтому такой механизм более удобен для совмещения модов и не требует начала новой игры.

В качестве примера попробуем реализовать режим freeplay - продолжение игры после уничтожения О-Сознания. Для этого нужно создать как минимум две точки — возврат на ЧАЭС-1 со внутреннего дворика (после уничтожения О-Сознания) и переход из ЧАЭС-1 в Припять. К слову сказать, если вернуться на ЧАЭС-1, то там будет продолжать действовать таймер "выброса", который в конце-концов включит "deadzone". Отключить счетчик мне пока не удалось, но зато можно легко отключить сам "выброс" и всласть побегать по уровню.



Часть 1. Генерация работающего LEVEL_CHANGER

Стандартной функции alife():create(…) недостаточно для создания полноценного level_changer. Собственно методика создания сложных объектов описана в статье Один из методов спавна. Сложность заключалась лишь в порядке полей и свойствах Shape. Неоценимую помощь в этом вопросе оказала утилита ACDC (created by bardak).

Ниже я привожу код функции, которая создает и инициализирует level_changer:
function create_level_changer(
p_story_id, -- STORY_ID нового level_changer (понадобится нам позже)
p_position, -- вектор, координаты точки, в которой будет располагаться центр нового level_changer
p_lvertex_id, -- level_vertext_id - идентифицируют уровень, на котором будет создан level_changer
p_gvertex_id, -- game_vertext_id

p_gest_lv, -- level_vertex_id - идентифицируют уровень, на который level_changer будет перебрасывать игрока
p_dest_gv, -- game_vertex_id
p_dest_pos, -- координаты точки, в которой на новом уровне окажется игрок
p_dest_dir, -- направрение взгляда игрока
p_dest_level, -- название уровня, например "L11_Pripyat"
p_silent -- следует задать 1, чтобы подавить вопрос о смене уровня (автоматический переход)
)
local obj = alife():create("level_changer", p_position, p_lvertex_id, p_gvertex_id)

level.map_add_object_spot(obj.id, "level_changer", "")

local packet = net_packet()
obj:STATE_Write(packet)

-- свойства cse_alife_object
local game_vertex_id = packet:r_u16()
local cse_alife_object__unk1_f32 = packet:r_float()
local cse_alife_object__unk2_u32 = packet:r_u32()
local level_vertex_id = packet:r_u32()
local object_flags = packet:r_u32()
local custom_data = packet:r_stringZ()
local story_id = packet:r_u32()
local spawn_story_id = packet:r_u32()

-- свойства cse_shape
local shape_count = packet:r_u8()
for i=1,shape_count do
local shape_type = packet:r_u8()
if shape_type == 0 then
-- sphere
local center = packet:r_vec3()
local radius = packet:r_float()
else
-- box
local axis_x_x = packet:r_float()
local axis_x_y = packet:r_float()
local axis_x_z = packet:r_float()
local axis_y_x = packet:r_float()
local axis_y_y = packet:r_float()
local axis_y_z = packet:r_float()
local axis_z_x = packet:r_float()
local axis_z_y = packet:r_float()
local axis_z_z = packet:r_float()
local offset_x = packet:r_float()
local offset_y = packet:r_float()
local offset_z = packet:r_float()
end
end

-- свойства cse_alife_space_restrictor
local restrictor_type = packet:r_u8()

-- свойства cse_level_changer
local dest_game_vertex_id = packet:r_u16()
local dest_level_vertex_id = packet:r_u32()
local dest_position = packet:r_vec3()
local dest_direction = packet:r_vec3()
local dest_level_name = packet:r_stringZ()
local dest_graph_point = packet:r_stringZ()
local silent_mode = packet:r_u8()


packet:w_begin(game_vertex_id) -- game_vertex_id
packet:w_float(cse_alife_object__unk1_f32)
packet:w_u32(cse_alife_object__unk2_u32)
packet:w_u32(level_vertex_id) -- level_vertex_id
packet:w_u32( bit_not(193) ) -- object_flags = -193 = 0xFFFFFF3E
packet:w_stringZ(custom_data)
packet:w_u32(p_story_id) -- story_id
packet:w_u32(spawn_story_id)

packet:w_u8(1) -- количество фигур
-- packet:w_u8(0) -- тип фигуры: сфера
-- packet:w_vec3(vector():set(0, 0, 0)) -- sphere_center
-- packet:w_float(3.0)
packet:w_u8(1) -- тип фигуры: box
packet:w_float(2) -- axis_x_x
packet:w_float(0) -- axis_x_y
packet:w_float(0) -- axis_x_z
packet:w_float(0) -- axis_y_x
packet:w_float(4) -- axis_y_y
packet:w_float(0) -- axis_y_z
packet:w_float(0) -- axis_z_x
packet:w_float(0) -- axis_z_y
packet:w_float(4) -- axis_z_z
packet:w_float(0) -- offset_x
packet:w_float(0) -- offset_y
packet:w_float(0) -- offset_z

packet:w_u8(3) -- restrictor_type

packet:w_u16(p_gest_gv) -- destination game_vertex_id
packet:w_u32(p_dest_lv) -- destination level_vertex_id
packet:w_vec3(p_dest_pos) -- destination position
packet:w_vec3(p_dest_dir) -- destination direction (направление взгляда)
packet:w_stringZ(p_dest_level) -- destination level name
packet:w_stringZ("start_actor_99") -- some string, always const
packet:w_u8(p_silent) -- 1 for silent level changing

packet:r_seek(0)
obj:STATE_Read(packet, packet:w_tell())

-- news_manager.send_tip(db.actor, "LC creation finished", nil, nil, 30000)
end
Для shape типа "box" загрузка координат методом packet:r_matrix() окончилась неудачей. Я подозреваю, что не был прочитан вектор "offset", но точной уверенности нет, поэтому пока остановился на покомпонентной выборке и сохранении координат.

Часть 2. Создание точек перехода

Теперь следует написать функции создания нужных точек перехода и подключить их к игре. Сами функции просты:
function exit_monolit()
if (not has_alife_info("freeplay_activated1")) then
create_level_changer(11410, vector():set(-13.26, 47.71, 46.57), 200, 2417,
2384,
162109,
vector():set( 375.615, 0.224, 27.737 ),
vector():set( 0.0, 0.0 , 0.0 ),
"L12_Stancia",
1)

db.actor:give_info_portion("freeplay_activated1")
end

-- создается переход из ЧАЭС в Припять
create_chaes2pripyat_exit()

-- актер перебрасывается в level_changer, возвращающий его на ЧАЭС, ко входу в бункер
db.actor:set_actor_position( vector():set(-13.26, 47.71, 46.57) )
end

function refuze_o_sozn()
if (not has_alife_info("freeplay_activated2")) then
create_level_changer(21410, vector():set(946.872, 6.0, 167.66), 240852, 2637,
2280,
472710,
vector():set( 1062.15, -0.0982, -3.512 ),
vector():set( 0.0 , 0.0 , -1.0 ),
"L12_Stancia",
1)

db.actor:give_info_portion("freeplay_activated2")
end

-- создается переход из ЧАЭС в Припять
create_chaes2pripyat_exit()

-- актер перебрасывается в level_changer, возвращающий его к правым воротам ЧАЭС
db.actor:set_actor_position( vector():set(946.872, 6.0, 167.66) )
end

function create_chaes2pripyat_exit()
-- создается переход из ЧАЭС в Припять
if (not has_alife_info( "exit_chaes2pripyat_created" )) then
create_level_changer(31410, vector():set( 917.35, 0.419, -316.35 ), 403866, 2401,
2117,
73868,
vector():set( 31.3, 3.0, 240.0 ),
vector():set( 0.0, 0.0, -1.0 ),
"L11_Pripyat",
0)

db.actor:give_info_portion("exit_chaes2pripyat_created")
end
end
Функцию exit_monolit я создал исключительно для тестирования, но решил оставить и тут. Вдруг кто-то захочет реализовать более сложный возврат: Меченого грузят в "грузовик смерти" и он снова приходит в себя на кордоне...

Функция exit_monolit создает «тихий» переход на уровень ЧАЭС-1 и обычный - в начале уровня ЧАЭС-1 для возврата в Припять, после чего перебрасывает актера прямо внутрь созданного перехода. Функция refuze_o_sozn делает тоже самое, только игрок появляется перед воротами в правом верхем углу карты (мне кажется, что так более логично). Все телепорты защищаются уникальными info_portions, дабы избежать их повторного создания, ведь игрок может захотеть «закончить» игру несколько раз.

Теперь подключение. Во-первых надо добавить новые info-portions. Я решил не изменять оригинальные файлы игры, а сделал для них (ну и для других тоже) отдельный файл
config\gameplay\_info_sa.xml

следующего вида:










Теперь в этот файл можно будет добавлять новые info_portion, которые вы будете использовать в своих сюжетах. Подключается этот файл в system.ltx в секции «info_portions»:
[info_portions]
;список xml файлов, содержащих info_portions
files = _info_sa, info_portions, ....................

Кстати, именно так я рекомендую добавлять новые диалоги и новых персонажей. Это упростит процессы совмещения модов и аддонов.


Следующий шаг - подключение наших скриптов к игре. Для этого откройте файл
config\ui\ui_movies.xml

найдите элементы «mov_desire_» (их пять, по количеству ложных концовок игры - все варианты общения с Монолитом). Внутри каждого элемента есть дочерние элементы «function_on_stop», которые задают функцию, запускающуюся сразу после ролика. Стандартное содержимое:
xr_effects.game_credits

Функция xr_effects.game_credits запускает финальные титры. Именно ее и нужно заменить на вызов нашей функции _freeplay_sa.exit_monolit. Вот что должно получиться:
_freeplay_sa.exit_monolit

Старый элемент я советую не удалять, а закомментировать.

Чуть ниже «mov_desire_5» находится тэг ролика для концовки «Присоединение к О-Сознанию». Его мы трогать не будем - Меченый станет медузой. А вот после него - тэг для ролика «Отказ от О-Сознания»: «mov_refuse_osoznanie». Функцию завершения в нем заменим следующим образом:
_freeplay_sa.refuze_o_sozn



Можно запускать и, если есть сохранения перед монолитом и/или о-сознанием, тестировать. Первые переходы срабатывают «тихо» - запрос на смену уровня не выдается (в параметре p_silent задана 1). До перехода в Припять можно успеть добежать, пока не сработал выброс... Но это как-то неправильно, выброс надо остановить (он же произошел, пока мы были внутри станции). «По-честному» (скриптом, без модификации all.spawn) таймер выброса отключить не получится, но зато выброс можно подавить небольшим «хаком». Найдите файл xr_logic.script, а в нем - функцию switch_to_section. Ее нужно модифицировать следующим образом:
-- Выполняет переключение на указанную секцию, если задана.
-- Если section == nil, остается работать старая секция.
function switch_to_section(npc, st, section)
if section == nil or section == "" then
return false
end

-- 15.03.2008 by SA:
-- отключает "смертельные зоны" на ЧАЭС после запуска режима FREEPLAY
-- таймер не отключается, но сам "выброс" не происходит
if (section == "sr_aes_deadzone") then
if (has_alife_info("freeplay_activated1") or has_alife_info("freeplay_activated2")) then
return false
end
end

... далее без изменений ...
end

Данный способ оставляет висящий на нулях таймер и все эффекты начала выброса, но сам «выброс» отключается.

И последнее: переход ЧАЭС1-Припять необходимо отметить на карте. Для этого существует вполне «легальный» механизм. Находим файл level_tasks.script и в конце функции add_lchanger_location дописываем следующее:
-- aes (++16.03.2008 by SA):
obj = sim:story_object(31410)
if obj then
level.map_add_object_spot(obj.id, "level_changer", "To Pripyat")
end

Здесь 31410 - story_id нашего level_changer, который создается нашей функцией create_chaes2pripyat_exit.

На этом пока все (мелкие огрехи типа направления взгляда игрока после смены уровня исправлю позже). Прошу тестировать и дополнять.
PRO100 STALKER
PRO100 STALKER
новичок

Сообщения : 28
Дата регистрации : 2014-03-29
Возраст : 33
Откуда : Рязань

http://logowo.ucoz.ru/

Вернуться к началу Перейти вниз

Правки игровых файлов Empty Re: Правки игровых файлов

Сообщение автор Dedsorokanyk в Чт Дек 17 2015, 09:13

Доброго здоровья камрады!
Случайно набрёл, прошу прощения улыбка Тема отличная но хотелось бы что бы были советы по параметрам- как увеличить яркость фонаря, причём на все игры- Т.Ч., Ч.Н., З.Пр. Как увеличить убойность оружия, тоже на все игры, как увеличить освещённость в играх. Почему именно на все игры? Допустим у меня есть правка фонаря на Ч.Н., попробовал вставить в Т.Ч, не пошла, мод не запускается. Есть правка фонаря от Каравана для Т.Ч. 1.006, попробовал для 1.004, не пошла, т/е нужно наверное знать папку и какие именно параметры менять. С оружием допустим я разобрался, а вот с фонарём и освещением локаций нет. А моды многие делают так что вроде дневное время а ни черта не видно и даже с фонарём, сильно устают глаза, уже не до игры.
Dedsorokanyk
Dedsorokanyk
F.O.R.E.S.T.E.R.
F.O.R.E.S.T.E.R.

Сообщения : 7999
Дата регистрации : 2012-08-06
Возраст : 71
Откуда : Россия , Краснодарский край ,Армавир

Вернуться к началу Перейти вниз

Правки игровых файлов Empty Re: Правки игровых файлов

Сообщение автор Dedsorokanyk в Чт Дек 17 2015, 09:17

PRO100 STALKER пишет:Темная ночь:
[default_weather_02]
ambient = 0.0025, 0.005, 0.0075
hemi_color = 0.025, 0.05, 0.075, 0.1
А какие цифры нужны что была светлая ночь, а лучше без ночи, всё время светло улыбка
Dedsorokanyk
Dedsorokanyk
F.O.R.E.S.T.E.R.
F.O.R.E.S.T.E.R.

Сообщения : 7999
Дата регистрации : 2012-08-06
Возраст : 71
Откуда : Россия , Краснодарский край ,Армавир

Вернуться к началу Перейти вниз

Правки игровых файлов Empty Re: Правки игровых файлов

Сообщение автор avakadog в Чт Дек 17 2015, 17:18

Dedsorokanyk пишет:всё время светло
Так не бывает, ты же не за Полярным кругом, Ну, уморил! да к тому же летом!

_________________
Нелёгкий путь , ночной костёр ,
Звучит гитары перебор ....
avakadog
avakadog
БАРД

Сообщения : 11750
Дата регистрации : 2012-09-07
Возраст : 69
Откуда : Москва РФ

Вернуться к началу Перейти вниз

Правки игровых файлов Empty Re: Правки игровых файлов

Сообщение автор Dedsorokanyk в Чт Дек 17 2015, 17:34

avakadog, Саша, в Зоне всё бывает улыбка Есть моды в которых и ночью без фонаря видно на приличное растояние, без труда играю 2.52, а есть и днём и с фонарём и ПНВ не пройти, ни черта не видно. И каждый из авторов утверждает что его атмосфера и освещение самое правильное. Мне, ну лично мне, очень интересны такие утверждения- а где же вы братцы видели то Зоны которые в ваших модах. Насколько я знаю в Чернобыльской Зоне самая обычная погода, как и везде по шарику, т/е бывают и лунные ночи и облачные, и день солнечный,яркий, и облачный,чуть серее. Фэнтази? Но каждый из авторов кричит и стучит себя в грудь что у него самая Зонная атмосфера и освещённость. Он её где? В своей спальне под койкой видел? Молчу про оружие. Три диска, 90 патронов, выпустил в игре с АК 74, и моно выбрасывать, имею виду в модах, типа это реальность. Ну вот этот вопрос хотя бы я знаю точно. Каждый автомат после Т.О.х отстреливается парой рожков на очередях и одним рожком на одиночных, если АК отработает в норме, то он чистится, консервируется и укладывается на хранение. А то что пытаются авторы впихать нам, это ну по крайней мере незнание вопроса.
Dedsorokanyk
Dedsorokanyk
F.O.R.E.S.T.E.R.
F.O.R.E.S.T.E.R.

Сообщения : 7999
Дата регистрации : 2012-08-06
Возраст : 71
Откуда : Россия , Краснодарский край ,Армавир

Вернуться к началу Перейти вниз

Правки игровых файлов Empty Re: Правки игровых файлов

Сообщение автор Mikhalych в Чт Дек 17 2015, 20:19

Dedsorokanyk пишет:есть правка фонаря на Ч.Н., попробовал вставить в Т.Ч
Не получится, там названия папок отличаются. Если пофайлово вставлять то подойдёт(ЧН-ТЧ). В идеале сделать три фонаря и ставить их на любой мод. На ТЧ и ЧН есть готовые. В скайп скину если надо. Да и из ЗП вытяну, у меня они везде свои стоят.
Dedsorokanyk пишет:Три диска, 90 патронов, выпустил в игре с АК 74, и моно выбрасывать
Володь, а оно тебе надо вообще этот износ ? Обнули его и всех делов, но, в разных сталкерах разные строчки опять же. Лично я его для себя убираю полностью, гемор этот. Нет, можно конечно настроить по человечески, но этот головняк мне уже надоел и так под каждый ствол.
Dedsorokanyk пишет:какие цифры нужны что была светлая ночь
По поводу ночи там очень много таких строчек и файлов(особо если погода динамика), и править придётся все. Проще проставить одну секцию по дефолту а остальное отключить. То бишь прописать один час на весь дефолт(остановить время). Но это для чистых игр, с модами нужно отдельно делать.

_________________
Правки игровых файлов 41abb7241dbaae88555d78095c1cc71b
Mikhalych
Mikhalych
Доктор

Сообщения : 3337
Дата регистрации : 2012-08-10
Возраст : 53
Откуда : Россия

Вернуться к началу Перейти вниз

Правки игровых файлов Empty Re: Правки игровых файлов

Сообщение автор Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Страница 1 из 2 1, 2  Следующий

Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения