Создание нового оружия — различия между версиями — S.T.A.L.K.E.R. Inside Wiki

Создание нового оружия — различия между версиями

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск
м (restored)
Строка 1: Строка 1:
Создание нового оружия
+
В этой статье мы научимся создавать новые образцы вооружения. Для начала, мы будем использовать модели из оригинальной игры. Если вы хотите создать оружие, имеющее уникальный внешний вид, ознакомьтесь с [[Создание моделей и их добавление в игру|уроком]] по созданию моделей.
В этой статье мы научимся создавать новые образцы вооружения. Для начала, мы будем использовать модели из оригинальной игры. Если вы хотите создать оружие, имеющее уникальный внешний вид, ознакомьтесь с уроком по созданию моделей.
+
Добавим в игру АК101.
+
Внешний вид
+
Позаботимся о том, чтобы наше оружие отличалось внешне от того же АК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'''.
Новое оружие мы будем делать на базе оригинальных конфигурационных файлов. Создадим АК101 на базе конфигов АК74.
+
Свойства оружия
+
Скопируем файл из папки:
+
gamedata\config\ak74.ltx
+
Назовем его ak101.ltx.
+
  
Отредактируем свойства по своему усмотрению (но лучше - в соответствии с достоверной информацией о характеристиках оружия, т.к. АК101 - всё-таки оружие реально существующее). Редактирование конфигов оружия подробно описано в отдельном уроке. В данном случае конфиг был составлен таким образом:
+
==Внешний вид==
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
<code>[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
+
Позаботимся о том, чтобы наше оружие отличалось внешне от того же '''АК74'''.
ef_weapon_type = 6
+
  
;-----------------------------------------------------------------------------------
+
===Текстуры===
holder_range_modifier = 1.0   ; во сколько раз увеличивается eye_range
+
holder_fov_modifier = 0.7  ; во сколько раз увеличивается eye_fov
+
;-----------------------------------------------------------------------------------
+
  
cost = 2;4000
+
Нарисуем для оружия новую текстуру. Подробно останавливаться на этом процессе не буду, ознакомьтесь с примером, приведенным [[Изменение текстур#Изменение текстур моделей|здесь]]. Итак, основываясь на текстуре '''АК74''', мы сделали вот такую текстуру:
weapon_class = assault_rifle
+
  
ammo_limit = 210
+
[[Изображение:500px-AK101 texture.jpg]]
ammo_elapsed = 30
+
  
ammo_mag_size = 30
+
Файлы текстур мы назвали:
fire_modes = 1, -1
+
  
ammo_class = ammo_5.56x45_ss190, ammo_5.56x45_ap
+
* '''wpn_ak10.dds'''
grenade_class = ammo_vog-25, ammo_vog-25p
+
* '''wpn_ak10_bump#.dds'''
launch_speed = 0
+
* '''wpn_ak10_bump.dds'''
  
hand_dependence = 1
+
===Модели===
single_handed = 0
+
  
slot = 2
+
Новых моделей мы пока делать не станем, просто воспользуемся дублированными моделями от '''АК74'''. Скопируем папку:
animation_slot = 2
+
inv_name = wpn-ak101
+
inv_name_short = wpn-ak101
+
inv_weight = 3.3
+
  
inv_grid_width = 5
+
'''gamedata\meshes\weapons\ak74\'''
inv_grid_height = 2
+
inv_grid_x = 11
+
inv_grid_y = 29
+
  
kill_msg_x = 0
+
И назовем её '''ak-101'''. Содержимое, соответственно, переименуем в:
kill_msg_y = 28
+
kill_msg_width = 84
+
kill_msg_height = 28
+
  
;-----------------------------------------------------------------------------------
+
* '''wpn_ak101.ogf'''
;params of weapon recoil
+
* '''wpn_ak101_hud.ogf'''.
  
fire_dispersion_base = 0.15;0.2
+
Теперь пропишем в эти модели созданные нами текстуры. Способ описан [[Изменение текстур#Создание новых visual для использования с новыми объектами|здесь]]'''.
control_inertion_factor = 1.1f;1.25f
+
  
;отдача
+
P.S. от Кепа: Вобще, если вы создаёте новое оружие на основе старой модели, то удобней будет прописывать его через файл gamedata\config\misc\unique_items.ltx (в Тени чернобыля). В Чистом небе уникальные стволы лежат в файлах оружия.
cam_relax_speed =6;5;3.5; 0.15
+
Смысл в том, что вам не нужно бутет переписывать все значения оружия в новый файл, а просто надо добавить ссылки на новые текстуры и описания, и перечислить свойства, которые Вы хотите заменить. Кроме того, создавая отдельный файл модели для нового оружия Вы тупо загружаете одну и туже информацию в память по второму кругу (это нехорошо, да). Всё остальное надо делать также как написано далее.
cam_dispersion = 0.1;0.15
+
 
cam_dispersion_inc = 0.2;0.3
+
Если создаете оружие с новой моделью то обязательно не оставляйте её без изменений.Почему-то в игре не может быть двух оружий с одинаковыми моделями.И еще-если вы создаете прототипное оружие(меняете часть конфигов) то обязательно ложите конфиг в соответствующий файл(в ЧН и ЗП это файл с оружием-прототипом,а в ТЧ unique_items) иначе при загрузке игра будет вылетать,примерно так:
cam_dispertion_frac = 0.8;0.9
+
argument:can not find section 'название вашего оружия'
cam_max_angle = 10.0
+
 
cam_max_angle_horz = 20.0
+
===Иконки===
cam_step_angle_horz = 1.1;1
+
 
 +
Добавим в игру иконки, которыми оружие будет отображаться в инвентаре. Способ подробно описан [[Изменение текстур#Изменение иконок предметов|здесь]].
 +
 
 +
Вот, что получилось в конечном итоге:
 +
 
 +
[[Изображение:500px-AK101 icon.jpg]]
 +
 
 +
==Конфиги==
 +
 
 +
Новое оружие мы будем делать на базе оригинальных конфигурационных файлов. Создадим '''АК101''' на базе конфигов '''АК74'''.  
 +
 
 +
===Свойства оружия===
 +
 
 +
Скопируем файл из папки:
 +
 
 +
'''gamedata\config\weapons\ak74.ltx'''
 +
 
 +
Назовем его '''ak101.ltx'''.
 +
 
 +
 
 +
Отредактируем свойства по своему усмотрению (но лучше - в соответствии с достоверной информацией о характеристиках оружия, т.к. '''АК101''' - всё-таки оружие реально существующее). Редактирование конфигов оружия подробно описано в отдельном [[Редактирование оружия|уроке]]. В данном случае конфиг был составлен таким образом:
 +
 
 +
<pre>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +
[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
  
fire_dispersion_condition_factor = 5.7;5
+
;-----------------------------------------------------------------------------------
misfire_probability = 0.0055;0.003
+
holder_range_modifier = 1.0       ; во сколько раз увеличивается eye_range
misfire_condition_k = 0.06;0.05
+
holder_fov_modifier = 0.7              ; во сколько раз увеличивается eye_fov
condition_shot_dec = 0.00035;0.0001
+
 
;-----------------------------------------------------------------------------------
 
;-----------------------------------------------------------------------------------
  
fire_point = 0,0.216,0.638
+
cost = 2;4000
fire_point2 = 0,0.216,0.730
+
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
 +
;-----------------------------------------------------------------------------------
  
flame_particles = weapons\generic_weapon05
+
fire_point            = 0,0.216,0.638
smoke_particles = weapons\generic_shoot_00
+
fire_point2            0,0.216,0.730
grenade_flame_particles = weapons\generic_weapon01
+
  
shell_point = 0,0.216,0.174
+
flame_particles = weapons\generic_weapon05
shell_particles = weapons\generic_shells
+
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_base = 1.0
PDM_disp_vel_factor = 1.3  
+
PDM_disp_vel_factor = 1.3
PDM_disp_accel_factor = 1.3  
+
PDM_disp_accel_factor = 1.3
PDM_crouch = 1.0  
+
PDM_crouch = 1.0
PDM_crouch_no_acc = 1.0
+
PDM_crouch_no_acc = 1.0
  
; ttc  
+
; ttc
hit_power = 0.36, 0.4, 0.43, 0.46
+
hit_power               = 0.36, 0.4, 0.43, 0.46
hit_impulse = 140
+
hit_impulse = 140
hit_type = fire_wound  
+
hit_type = fire_wound
fire_distance = 1700
+
fire_distance           = 1700
bullet_speed = 1000
+
bullet_speed = 1000
rpm = 750
+
rpm                     = 750
  
use_aim_bullet = true
+
use_aim_bullet = true
time_to_aim = 1.0
+
time_to_aim = 1.0
  
 
;params when silencer is attached  
 
;params when silencer is attached  
 
;similar to corresponding params without prefix silencer_
 
;similar to corresponding params without prefix silencer_
  
silencer_hit_power = 0.38  
+
silencer_hit_power       = 0.38
silencer_hit_impulse = 120  
+
silencer_hit_impulse = 120
silencer_fire_distance = 250  
+
silencer_fire_distance   = 250
silencer_bullet_speed = 600
+
silencer_bullet_speed = 600
  
hud = wpn_ak101_hud
+
hud                     = wpn_ak101_hud
  
position = -0.026,-0.172,0
+
position                 = -0.026,-0.172,0
orientation = 0,0,0
+
orientation             = 0,0,0
  
;--STRAP PARAMETERS-----------------------------------------------------------------  
+
;--STRAP PARAMETERS-----------------------------------------------------------------
strap_position = -0.16,-0.40,0.15
+
strap_position         = -0.16,-0.40,0.15
strap_orientation = -10,-5,10
+
strap_orientation     = -10,-5,10
strap_bone0 = bip01_spine2  
+
strap_bone0 = bip01_spine2
strap_bone1 = bip01_spine1
+
strap_bone1 = bip01_spine1
  
visual = weapons\ak-101\wpn_ak101
+
visual                 = weapons\ak-101\wpn_ak101
  
light_color = 0.6,0.5,0.3
+
light_color = 0.6,0.5,0.3
light_range = 5
+
light_range = 5
light_var_color = 0.05
+
light_var_color = 0.05
light_var_range = 0.5  
+
light_var_range = 0.5
light_time = 0.2
+
light_time = 0.2
  
ph_mass = 5
+
ph_mass = 5
  
;addons  
+
;addons
scope_status = 2
+
scope_status = 2
silencer_status = 2
+
silencer_status = 2
grenade_launcher_status = 0;2
+
grenade_launcher_status = 0;2
  
zoom_enabled = true
+
zoom_enabled = true
scope_zoom_factor = 50
+
scope_zoom_factor     = 50
  
scope_name = wpn_addon_scope
+
scope_name = wpn_addon_scope
scope_x = 42
+
scope_x = 42
scope_y = 3  
+
scope_y = 3
silencer_name = wpn_addon_silencer
+
silencer_name = wpn_addon_silencer
silencer_x = 218
+
silencer_x = 218
silencer_y = 13
+
silencer_y = 13
grenade_launcher_name = wpn_addon_grenade_launcher  
+
grenade_launcher_name = wpn_addon_grenade_launcher
grenade_launcher_x = 116
+
grenade_launcher_x = 116
grenade_launcher_y = 23
+
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
  
;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  
 
;params when silencer is attached  
 
;similar to corresponding params without prefix silencer_
 
;similar to corresponding params without prefix silencer_
  
;silencer_flame_particles = weapons\generic_weapon01  
+
;silencer_flame_particles = weapons\generic_weapon01
silencer_smoke_particles = weapons\generic_shoot_00
+
silencer_smoke_particles = weapons\generic_shoot_00
  
snd_silncer_shot = weapons\w_ak74_shot1
+
snd_silncer_shot = weapons\w_ak74_shot1  
  
silencer_light_color = 0.6,0.5,0.3  
+
silencer_light_color = 0.6,0.5,0.3
silencer_light_range = 0.01  
+
silencer_light_range = 0.01
silencer_light_var_color = 0.05  
+
silencer_light_var_color = 0.05
silencer_light_var_range = 0.5  
+
silencer_light_var_range = 0.5
silencer_light_time = 0.2
+
silencer_light_time = 0.2
  
;-----------------------------------------------------------------------------
 
;-- HUD DESCRIPTION
 
;-----------------------------------------------------------------------------
 
  
[wpn_ak101_hud]  
+
;-----------------------------------------------------------------------------
allow_inertion = true
+
;-- HUD DESCRIPTION
 +
;-----------------------------------------------------------------------------
 +
 +
[wpn_ak101_hud]
 +
allow_inertion = true
  
 
;similar to corresponding params in weapon section but for 1st person view
 
;similar to corresponding params in weapon section but for 1st person view
  
shell_point = -0.065000,0.000000,-0.045000  
+
shell_point = -0.065000,0.000000,-0.045000
shell_dir = 0.0, 1.0, 0.0
+
shell_dir     = 0.0, 1.0, 0.0
  
fire_point = 0.09,0.020,-0.06  
+
fire_point               = 0.09,0.020,-0.06
fire_point2 = 0.30, 0.00, 0.05  
+
fire_point2             = 0.30, 0.00, 0.05
fire_bone = wpn_body
+
fire_bone               = wpn_body
  
orientation = 0, 0, 0
+
orientation             = 0, 0, 0
position = 0, 0, 0.05  
+
position               = 0, 0, 0.05
visual = weapons\ak-101\wpn_ak101_hud
+
visual                 = weapons\ak-101\wpn_ak101_hud
  
grenade_bone = wpn_grenade
+
grenade_bone           = wpn_grenade
  
 
; animation names
 
; animation names
  
anim_idle = idle  
+
anim_idle = idle
anim_idle_aim = idle_aim  
+
anim_idle_aim = idle_aim
anim_reload = reload  
+
anim_reload = reload
anim_draw = draw_wo_gl  
+
anim_draw = draw_wo_gl
anim_holster = holster_wo_gl  
+
anim_holster = holster_wo_gl
anim_shoot = shoot  
+
anim_shoot = shoot
 
+
; animation names  
+
; animation names
; attached grenade launcher [GRENADE fire mode]  
+
; attached grenade launcher [GRENADE fire mode]
anim_idle_g = idle_grenade  
+
anim_idle_g = idle_grenade
anim_idle_g_aim = idle_g_aim  
+
anim_idle_g_aim = idle_g_aim
anim_reload_g = reload_grenade  
+
anim_reload_g = reload_grenade
anim_shoot_g = shoot_grenade  
+
anim_shoot_g = shoot_grenade
anim_switch_grenade_on = switch_grenade  
+
anim_switch_grenade_on = switch_grenade
anim_switch_grenade_off = switch_grenade_off  
+
anim_switch_grenade_off = switch_grenade_off
anim_draw_g = draw_grenade_mode  
+
anim_draw_g = draw_grenade_mode
anim_holster_g = holster_grenade_mode
+
anim_holster_g = holster_grenade_mode
  
; attached grenade launcher [NORMAL fire mode]  
+
; attached grenade launcher [NORMAL fire mode]
anim_idle_gl = idle_w_gl  
+
anim_idle_gl = idle_w_gl
anim_idle_gl_aim = idle_w_gl_aim  
+
anim_idle_gl_aim = idle_w_gl_aim
anim_reload_gl = reload_w_gl  
+
anim_reload_gl = reload_w_gl
anim_draw_gl = draw_w_gl  
+
anim_draw_gl = draw_w_gl
anim_holster_gl = holster_w_gl  
+
anim_holster_gl = holster_w_gl
anim_shoot_gl = shoot_w_gl  
+
anim_shoot_gl = shoot_w_gl
anim_idle_sprint = idle_sprint
+
anim_idle_sprint = idle_sprint
  
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;HUD offset in zoom mode (to all)  
+
;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)
 
;(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_offset = -0.112400,0.016800,-0.115000
zoom_rotate_x = 0.000200  
+
zoom_rotate_x = 0.000200
zoom_rotate_y = 0.017500
+
zoom_rotate_y = 0.017500
  
zoom_hide_crosshair = true
+
zoom_hide_crosshair = true
  
; same as above, but for attached grenade launcher for  
+
 
 +
; same as above, but for attached grenade launcher for
 
; in NORMAL shoot mode
 
; in NORMAL shoot mode
  
grenade_normal_zoom_offset = -0.112500,0.014000,0.000000  
+
grenade_normal_zoom_offset = -0.112500,0.014000,0.000000
grenade_normal_zoom_rotate_x = -0.000900  
+
grenade_normal_zoom_rotate_x = -0.000900
grenade_normal_zoom_rotate_y = 0.017200
+
grenade_normal_zoom_rotate_y = 0.017200
  
; same as above, but for attached grenade launcher for  
+
; same as above, but for attached grenade launcher for
 
; in GRENADE mode
 
; in GRENADE mode
  
grenade_zoom_offset = -0.039600,-0.433100,0.000000  
+
grenade_zoom_offset = -0.039600,-0.433100,0.000000
grenade_zoom_rotate_x = -0.538700  
+
grenade_zoom_rotate_x = -0.538700
grenade_zoom_rotate_y = -0.03380</code>  
+
grenade_zoom_rotate_y = -0.033800</pre>
Регистрация  
+
 
Итак, с характеристиками разобрались. Теперь зарегистрируем оружие в файле weapons.ltx. Для этого пропишем в него строку следующего вида:  
+
===Регистрация===
#include "w_ak101.ltx"  
+
 
Также, необходимо прописать модели, используемые для отображения оружия, в prefetch.ltx:  
+
Итак, с характеристиками разобрались. Теперь зарегистрируем оружие в файле '''weapons.ltx'''. Для этого пропишем в него строку следующего вида:
[...]  
+
 
weapons\abakan\wpn_abakan  
+
<pre>#include "w_ak101.ltx"</pre>
weapons\abakan\wpn_abakan_hud  
+
 
weapons\ak-101\wpn_ak101  
+
Также, необходимо прописать модели, используемые для отображения оружия, в '''prefetch.ltx''':
weapons\ak-101\wpn_ak101_hud  
+
 
weapons\ak74\wpn_ak74  
+
<pre>[...]
w eapons\ak74\wpn_ak74_hud  
+
weapons\abakan\wpn_abakan
[...]  
+
weapons\abakan\wpn_abakan_hud
Так же не забудте в файле mp_ranks.ltx прописать после available_items (которое внизу) прописать название своего оружия. Это предотвратит вылет при убийстве ГГ.  
+
weapons\ak-101\wpn_ak101
Добавление в игру  
+
weapons\ak-101\wpn_ak101_hud
 +
weapons\ak74\wpn_ak74
 +
weapons\ak74\wpn_ak74_hud
 +
[...]</pre>
 +
 
 +
Так же не забудте в файле '''mp_ranks.ltx''' прописать после '''available_items''' (которое внизу)
 +
прописать название своего оружия. Это предотвратит вылет при убийстве ГГ а также вылет при выкидывании оружия из инвентаря.
 +
 
 +
==Добавление в игру==
 +
 
 
Осталось добавить оружие в игру.  
 
Осталось добавить оружие в игру.  
Выдайте его некоторым NPC, расширьте ассортимент торговцев
+
 
                                                       
+
Выдайте его некоторым NPC ([[Редактирование NPC#Практика|как это сделать?]]), расширьте ассортимент торговцев ([[Редактирование торговцев#Расширяем ассортимент|как это сделать?]]).
Восстановил:Palladium (хоть как-то восстановил))
+
 
 +
А вот как оно будет выглядеть в игре:
 +
 
 +
[[Изображение:Russian_Guns_3.jpeg]]
 +
 
 +
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  : <no expression>
 +
 
 +
Arguments    : Can't find model file 'weapons\gaussmod\wpn_gauss_hud.ogf'.»
 +
 
 +
В данном примере видно, что либо вы не создали папку с необходимой моделью оружия, либо неправильно прописан путь к нужному файлу...
 +
 
 +
(Чтобы в игре название и описание оружия были не от АК-74 а от нашей АК-101 делаем как написано в этой [http://stalkerin.gameru.net/wiki/index.php/%D0%A1%D0%BF%D0%B0%D0%B2%D0%BD_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BE%D0%B2 статье], всё начиная с "''И description = enc_equipment_food_bread1 на description = enc_equipment_food_bread1_test''" вам понадобится.)
 +
Информацию о оружии можно найти [http://world.guns.ru здесь.]
 +
 
 +
'''АК-101''' - ''Автомат Калашникова АК-101 является экспортной модификацией штатного автомата Российской армии АК-74М. Главным (и фактически единственным) отличием АК-101 от АК-74М является калибр - автомат "сотой" серии использует патроны калибра 5.56мм (5.56х45 НАТО) и соответствующие магазины, в остальном автоматы идентичны.''
 +
 
 
==Авторы==
 
==Авторы==
  
Строка 311: Строка 384:
  
 
Когда будете прописыватьв конфиге значения "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". То что и соответствует тому, что мы высчитали. :) Удачи.
 
Когда будете прописыватьв конфиге значения "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". То что и соответствует тому, что мы высчитали. :) Удачи.
До правки статья получше выглядела...
 

Версия 14:34, 21 мая 2011

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

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

Внешний вид

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

Текстуры

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

500px-AK101 texture.jpg

Файлы текстур мы назвали:

  • 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.

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

P.S. от Кепа: Вобще, если вы создаёте новое оружие на основе старой модели, то удобней будет прописывать его через файл gamedata\config\misc\unique_items.ltx (в Тени чернобыля). В Чистом небе уникальные стволы лежат в файлах оружия. Смысл в том, что вам не нужно бутет переписывать все значения оружия в новый файл, а просто надо добавить ссылки на новые текстуры и описания, и перечислить свойства, которые Вы хотите заменить. Кроме того, создавая отдельный файл модели для нового оружия Вы тупо загружаете одну и туже информацию в память по второму кругу (это нехорошо, да). Всё остальное надо делать также как написано далее.

Если создаете оружие с новой моделью то обязательно не оставляйте её без изменений.Почему-то в игре не может быть двух оружий с одинаковыми моделями.И еще-если вы создаете прототипное оружие(меняете часть конфигов) то обязательно ложите конфиг в соответствующий файл(в ЧН и ЗП это файл с оружием-прототипом,а в ТЧ unique_items) иначе при загрузке игра будет вылетать,примерно так: argument:can not find section 'название вашего оружия'

Иконки

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

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

500px-AK101 icon.jpg

Конфиги

Новое оружие мы будем делать на базе оригинальных конфигурационных файлов. Создадим АК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 (которое внизу) прописать название своего оружия. Это предотвратит вылет при убийстве ГГ а также вылет при выкидывании оружия из инвентаря.

Добавление в игру

Осталось добавить оружие в игру.

Выдайте его некоторым NPC (как это сделать?), расширьте ассортимент торговцев (как это сделать?).

А вот как оно будет выглядеть в игре:

Russian Guns 3.jpeg

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  : <no expression>

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 НАТО) и соответствующие магазины, в остальном автоматы идентичны.

Авторы

Статья создана:

Статья подправлена:

По материалам мода Russian Guns за авторством:

Когда будете прописыватьв конфиге значения "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". То что и соответствует тому, что мы высчитали. :) Удачи.

Другие места
LANGUAGE