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

Файлы текстур мы назвали:
wpn_ak10.dds
wpn_ak10_bump#.dds
wpn_ak10_bump.dds МоделиНовых моделей мы пока делать не станем, просто воспользуемся дублированными моделями от
АК74. Скопируем папку:
gamedata\meshes\weapons\ak74\И назовем её
ak-101. Содержимое, соответственно, переименуем в:
wpn_ak101.ogf
wpn_ak101_hud.ogf. Теперь пропишем в эти модели созданные нами текстуры. Способ описан здесь
Создание новых visual для использования с новыми объектами
К чему изменять текстуры обычных предметов, лучше сделать свои - с собственной внешностью. Сделаем новый visual (модель+текстура), который можно будет указать в свойствах нового предмета.
--
Возьмем модель банки энергетика drink_nonstop.ogf, сделаем её копию и назовем, скажем, drink_green.ogf, после чего откроем в Hex-редакторе (в принципе, можно и Блокнотом). Метод кустарный, но работающий.
--
В начале файла вы увидите имя текстуры:
item\item_drink_nonstop
Изменим эту строку на:
item\item_drink_green_1
Внимание! Очень важно, чтобы длина строки с текстурой осталась той же, иначе файл не будет работать.
Всё, теперь вы можете указать в конфиге своего нового предмета новый visual:
[energy_drink_green]:vodka
$spawn = "food and drugs\energy_drink"
inv_name = energy_drink_green_name
inv_name_short = energy_drink_green_short_name
visual = '''equipments\drink_green.ogf''' ;equipments\drink_stalker.ogf
description = enc_equipment_energy_drink_green
cost = 75
[...]
.S. от Кепа: Вобще, если вы создаёте новое оружие на основе старой модели, то удобней будет прописывать его через файл gamedata\config\misc\unique_items.ltx (в Тени чернобыля). В Чистом небе уникальные стволы лежат в файлах оружия. Смысл в том, что вам не нужно бутет переписывать все значения оружия в новый файл, а просто надо добавить ссылки на новые текстуры и описания, и перечислить свойства, которые Вы хотите заменить. Кроме того, создавая отдельный файл модели для нового оружия Вы тупо загружаете одну и туже информацию в память по второму кругу (это нехорошо, да). Всё остальное надо делать также как написано далее.
Если создаете оружие с новой моделью то обязательно не оставляйте её без изменений.Почему-то в игре не может быть двух оружий с одинаковыми моделями.И еще-если вы создаете прототипное оружие(меняете часть конфигов) то обязательно ложите конфиг в соответствующий файл(в ЧН и ЗП это файл с оружием-прототипом,а в ТЧ unique_items) иначе при загрузке игра будет вылетать,примерно так: argument:can not find section 'название вашего оружия'
ИконкиДобавим в игру иконки, которыми оружие будет отображаться в инвентаре. Способ подробно описан здесь
Изменение иконок предметовВнимание! Данный урок предполагает наличие у вас базовых навыков работы в Photoshop. Детальный пошаговый разбор работы в Photoshop в данном уроке производится не будет.
Разберем изменение файла:
...\gamedata\textures\ui\ui_icon_equipment.dds
Он содержит иконки предметов, отображаемые в инвентаре. Допустим, вы сделали новый вид оружия, и хотите присвоить ему новую иконку.
Нам понадобится следующее:
Adobe Photoshop (я использовал CS2, CS и 7.0 различаются незначительно)
плагин для работы с .dds-изображениями
Внешка фриспис )Итак, мы установили плагин и запустили Photoshop. Откройте в нем наш файл.

Иконки расположены по сетке 50х50 пикселей.
Чтобы включить её отображение, зайдите в меню:
Редактирование -> Установки -> Направляющие, сетка и фрагменты
И установите в нем следующие значения:
Линия через каждые: 50
Единицы измерения: пиксели
Внутреннее деление на: 1
После чего выберите пункт:
Просмотр -> Показать -> Сетку ( Ctrl+' )
Всё, сетка теперь правильно настроена и отображается. Выберем место для иконки.

конка будет размером 4х2, то есть 200х100 пикселей - это обычный размер иконки для автоматических винтовок. Нарисуем её:

Иконка АК47У была нарисована следующим образом: я нашел качественную фотографию с однородным фоном (благо, фотографий АК в интернете немерено), открыл её в Photoshop, выделил с помощью второго вида инструмента "Лассо", нажал Ctrl+C, открыл файл с иконками, нажал Ctrl+V, нажал Ctrl+T, зажал Shift ("Сохранение пропорций") и потянул за край выделения, сжимая изображение до нужного размера.
После чего применил трансформацию, перетащил изображение на нужное место и нажал Shift+Ctrl+E ("Слить слои").
Теперь соответственно иконке изменим и альфа-канал.

Выделим иконку оружия, и перейдем в окне со слоями на закладку:
Каналы -> Alpha

После чего залейте выделение белым. Всё, мы сделали иконке альфа-канал.
Теперь нужно сохранить файл в правильном формате. Выберите:
Файл -> Сохранить
И выставьте в появившемся окне окне следующие настройки:

райне важно выставить следующие параметры:
Save Format: DXT5 (Interpolated Alpha)
MIP maps: No MIP maps
Нажмите Save. Вот всё, мы добавили новую иконку.
Теперь присвоим её предмету.
Допустим, вы создали файл
wpn_ak47u, которому и нарисовали иконку. Зайдем в его конфиг:
gamedata\config\weapons\w_ak47u.ltxИ найдем такие строки:
inv_grid_width = 4
inv_grid_height = 2
inv_grid_x = ...
inv_grid_y = ...Где:
inv_grid_width - ширина в сетке 50х50
inv_grid_height - высота в сетке 50х50
inv_grid_x - местонахождение по х
inv_grid_y - местонахождение по y Вот, что получилось в конечном итоге:
Конфигиовое оружие мы будем делать на базе оригинальных конфигурационных файлов. Создадим
АК101 на базе конфигов
АК74.
Свойства оружияСкопируем файл из папки:
gamedata\config\weapons\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 (которое внизу) прописать название своего оружия. Это предотвратит вылет при убийстве ГГ а также вылет при выкидывании оружия из инвентаря.
Добавление в игруОсталось добавить оружие в игру.
А вот как оно будет выглядеть в игре:

P.S. При создании нового оружия можно допустить некоторые ошибки в конфиге, что приведёт к вылету игры. При таком случае сразу после вылета игры заходим в любой текстовый редактор и нажимаем клавиши Ctrl+V (вставить) и внизу можно увидеть из-за какой ошибки вылетела игра, а там уже дело техники исправить ошибку...
«Expression : fatal error
Function : CModelPool::Instance_Load
File : E:\stalker\patch_1_0004\xr_3da\xrRender\ModelPool.cpp
Line : 111
Description :
Arguments : Can't find model file 'weapons\gaussmod\wpn_gauss_hud.ogf'.»
В данном примере видно, что либо вы не создали папку с необходимой моделью оружия, либо неправильно прописан путь к нужному файлу...
(Чтобы в игре название и описание оружия были не от АК-74 а от нашей АК-101 делаем как написано в этой статье, всё начиная с "И description = enc_equipment_food_bread1 на description = enc_equipment_food_bread1_test" вам понадобится.) Информацию о оружии можно найти здесь.
АК-101 - Автомат Калашникова АК-101 является экспортной модификацией штатного автомата Российской армии АК-74М. Главным (и фактически единственным) отличием АК-101 от АК-74М является калибр - автомат "сотой" серии использует патроны калибра 5.56мм (5.56х45 НАТО) и соответствующие магазины, в остальном автоматы идентичны.
АвторыСтатья создана:
BAC9-FLCLСтатья подправлена:
Хемуль04
Relax
Когда будете прописыватьв конфиге значения "inv_grid_y" и "inv_grid_x" имейте в виду, что отсчет по сетке идет с верхнего левого угла и указывать нужно верхний левый угол картинки, которая должна отображатся в инвентаре. То есть координаты самого первого угла будут 0;0. Самая первая винтовка в файле ...\S.T.A.L.K.E.R\gamedata\textures\ui\ui_icon_equipment.dds это - СВД. И если вы посмотрите ее конфигурационный файл то увидете, что там указаны значения inv_grid_x = 0 inv_grid_y = 0. Отсчет по оси X идет по горизонтали с лева на право, а по оси Y - сверху вниз по возрастающей. Но считать с начала сетки - очень не удобно, поэтому вычисляйте координаты вашего обьекта по известным координатам уже существующего и реально правильно отображаемого файла в игре. Например мы имеем inv_grid_x= 5 inv_grid_y= 9 для fn2000(координаты верхнего левого угла) и мы хотим узнать координаты гранатф ф1, которая находится рядом. Для этого удобно использовать фотошоп с сеткой 50 на 50 пикселей. (как ее сделать описано по ссылке в статье к которой написана эта поправка.) И так мы видим что граната находится сразу справа порсле винтовки. То есть на 4-й клетке после квадрата угла винтовки без его учета. Она находится спраа, а значит нужно по оси X к 5 прибавить 4, и получится 9. По оси Y координтаы не изменились так как они находятся на одной линии с винтовкой. Таким образом получает коордитаны гранаты 9 по Х и 9 по Y. Если мы посмотрим конфиг гранаты то увидим там "inv_grid_x= 9" "inv_grid_y= 9". То что и соответствует тому, что мы высчитали. :) Удачи.