Добавление новых графических опций — различия между версиями
Материал из S.T.A.L.K.E.R. Inside Wiki
(Мы платим за лайки! - Оплата по требованию!) |
(Отмена правки 14867, сделанной участником 77.37.156.23 (обс.)) |
||
Строка 1: | Строка 1: | ||
− | + | Будем учиться добавлять новые опции в меню графики. | |
− | + | <br />Нам понадобятся файлы: | |
− | + | <br />'''user.ltx''' | |
− | + | <br />'''ui_mm_opt_video.script''' | |
− | + | <br />'''ui_mm_opt_video_adv.script''' | |
− | + | <br />'''ui_mm_opt.xml''' | |
− | + | <br />'''ui_st_mm.xml''' | |
− | + | ||
− | + | Для начала, идём в '''user.ltx''' и ищем там графические параметры. | |
+ | <pre>_preset Extreme | ||
+ | ai_use_torch_dynamic_lights on | ||
+ | unbindall | ||
+ | bind left kLEFT | ||
+ | bind right kRIGHT | ||
+ | bind up kUP | ||
+ | bind down kDOWN | ||
+ | bind jump kSPACE | ||
+ | bind crouch kLCONTROL | ||
+ | bind accel kLSHIFT | ||
+ | bind sprint_toggle kX | ||
+ | bind forward kW | ||
+ | bind back kS | ||
+ | bind lstrafe kA | ||
+ | bind rstrafe kD | ||
+ | bind llookout kQ | ||
+ | bind rlookout kE | ||
+ | bind cam_zoom_in kADD | ||
+ | bind cam_zoom_out kSUBTRACT | ||
+ | bind torch kL | ||
+ | bind night_vision kN | ||
+ | bind wpn_1 k1 | ||
+ | bind wpn_2 k2 | ||
+ | bind wpn_3 k3 | ||
+ | bind wpn_4 k4 | ||
+ | bind wpn_5 k5 | ||
+ | bind wpn_6 k6 | ||
+ | bind artefact k7 | ||
+ | bind wpn_next kY | ||
+ | bind wpn_fire mouse1 | ||
+ | bind wpn_zoom mouse2 | ||
+ | bind wpn_reload kR | ||
+ | bind wpn_func kV | ||
+ | bind wpn_firemode_prev k9 | ||
+ | bind wpn_firemode_next k0 | ||
+ | bind pause kPAUSE | ||
+ | bind drop kG | ||
+ | bind use kF | ||
+ | bind scores kTAB | ||
+ | bind chat kCOMMA | ||
+ | bind chat_team kPERIOD | ||
+ | bind screenshot kF12 | ||
+ | bind quit kESCAPE | ||
+ | bind console kGRAVE | ||
+ | bind inventory kI | ||
+ | bind buy_menu kB | ||
+ | bind skin_menu kO | ||
+ | bind team_menu kU | ||
+ | bind active_jobs kP | ||
+ | bind map kM | ||
+ | bind contacts kH | ||
+ | bind vote_begin kF5 | ||
+ | bind vote kF6 | ||
+ | bind vote_yes kF7 | ||
+ | bind vote_no kF8 | ||
+ | bind speech_menu_0 kC | ||
+ | bind speech_menu_1 kZ | ||
+ | bind use_bandage kRBRACKET | ||
+ | bind use_medkit kLBRACKET | ||
+ | bind quick_save kF6 | ||
+ | bind quick_load kF7 | ||
+ | cam_inert 0. | ||
+ | cam_slide_inert 0.25 | ||
+ | cl_cod_pickup_mode 1 | ||
+ | cl_dynamiccrosshair on | ||
+ | g_always_run on | ||
+ | g_autopickup on | ||
+ | g_backrun on | ||
+ | g_corpsenum 10 | ||
+ | g_eventdelay 0 | ||
+ | g_game_difficulty gd_novice | ||
+ | hud_crosshair on | ||
+ | hud_crosshair_dist off | ||
+ | hud_info on | ||
+ | hud_weapon on | ||
+ | load_last_save all | ||
+ | mm_mm_net_srv_dedicated off | ||
+ | mm_net_con_publicserver off | ||
+ | mm_net_con_spectator 20 | ||
+ | mm_net_con_spectator_on off | ||
+ | mm_net_filter_empty on | ||
+ | mm_net_filter_full on | ||
+ | mm_net_filter_listen on | ||
+ | mm_net_filter_pass on | ||
+ | mm_net_filter_wo_ff on | ||
+ | mm_net_filter_wo_pass on | ||
+ | mm_net_srv_gamemode st_deathmatch | ||
+ | mm_net_srv_maxplayers 32 | ||
+ | mm_net_srv_name MICROSOF-80B663 | ||
+ | mm_net_srv_reinforcement_type 1 | ||
+ | mm_net_weather_rateofchange 1. | ||
+ | mouse_invert off | ||
+ | mouse_sens 0.12 | ||
+ | net_cl_icurvesize 0 | ||
+ | net_cl_icurvetype 0 | ||
+ | net_cl_interpolation 0. | ||
+ | net_cl_log_data off | ||
+ | net_dbg_dump_export_obj 0 | ||
+ | net_dbg_dump_import_obj 0 | ||
+ | net_dbg_dump_update_read 0 | ||
+ | net_dbg_dump_update_write 0 | ||
+ | net_dedicated_sleep 5 | ||
+ | net_sv_gpmode 0 | ||
+ | net_sv_log_data off | ||
+ | net_sv_pending_lim 3 | ||
+ | net_sv_update_rate 30 | ||
+ | ph_frequency 100.00000 | ||
+ | ph_iterations 38 | ||
+ | r1_dlights on | ||
+ | r1_dlights_clip 75. | ||
+ | r1_glows_per_frame 16 | ||
+ | r1_lmodel_lerp 0.1 | ||
+ | r1_pps_u 0. | ||
+ | r1_pps_v 0. | ||
+ | r1_ssa_lod_a 64. | ||
+ | r1_ssa_lod_b 48. | ||
+ | r1_tf_mipbias 0. | ||
+ | r2_aa off | ||
+ | r2_aa_break 0.800000,0.500000,0.000000 | ||
+ | r2_aa_kernel 0.5 | ||
+ | r2_aa_weight 0.250000,0.250000,0.000000 | ||
+ | r2_allow_r1_lights off | ||
+ | r2_gi off | ||
+ | r2_gi_clip 0.001 | ||
+ | r2_gi_depth 1 | ||
+ | r2_gi_photons 16 | ||
+ | r2_gi_refl 0.9 | ||
+ | r2_gloss_factor 1.5 | ||
+ | r2_ls_bloom_fast off | ||
+ | r2_ls_bloom_kernel_b 0.7 | ||
+ | r2_ls_bloom_kernel_g 3. | ||
+ | r2_ls_bloom_kernel_scale 0.7 | ||
+ | r2_ls_bloom_speed 100. | ||
+ | r2_ls_bloom_threshold 0.001 | ||
+ | r2_ls_depth_bias -0.0003 | ||
+ | r2_ls_depth_scale 1.00001 | ||
+ | r2_ls_dsm_kernel 0.7 | ||
+ | r2_ls_psm_kernel 0.7 | ||
+ | r2_ls_squality 1. | ||
+ | r2_ls_ssm_kernel 0.7 | ||
+ | r2_mblur 0. | ||
+ | r2_parallax_h 0.02 | ||
+ | r2_slight_fade 0.3333 | ||
+ | r2_ssa_lod_a 64. | ||
+ | r2_ssa_lod_b 48. | ||
+ | r2_sun on | ||
+ | r2_sun_depth_far_bias -0.00001 | ||
+ | r2_sun_depth_far_scale 1. | ||
+ | r2_sun_depth_near_bias 0.00001 | ||
+ | r2_sun_depth_near_scale 1. | ||
+ | r2_sun_details off | ||
+ | r2_sun_focus on | ||
+ | r2_sun_lumscale 1. | ||
+ | r2_sun_lumscale_amb 0.5 | ||
+ | r2_sun_lumscale_hemi 1. | ||
+ | r2_sun_near 12. | ||
+ | r2_sun_near_border 0.75 | ||
+ | r2_sun_tsm on | ||
+ | r2_sun_tsm_bias -0.01 | ||
+ | r2_sun_tsm_proj 0.3 | ||
+ | r2_tf_mipbias 0. | ||
+ | r2_tonemap on | ||
+ | r2_tonemap_adaptation 1. | ||
+ | r2_tonemap_amount 0.7 | ||
+ | r2_tonemap_lowlum 0.0001 | ||
+ | r2_tonemap_middlegray 0.6 | ||
+ | r2_wait_sleep 0 | ||
+ | r2_zfill off | ||
+ | r2_zfill_depth 0.5 | ||
+ | r2em 2.2 | ||
+ | r__detail_density 0.2 | ||
+ | r__geometry_lod 1. | ||
+ | r__supersample 2 | ||
+ | r__tf_aniso 16 | ||
+ | renderer renderer_r2 | ||
+ | rs_c_brightness 1. | ||
+ | rs_c_contrast 1. | ||
+ | rs_c_gamma 1. | ||
+ | rs_fullscreen on | ||
+ | rs_refresh_60hz on | ||
+ | rs_stats off | ||
+ | rs_v_sync off | ||
+ | rs_vis_distance 1. | ||
+ | snd_acceleration on | ||
+ | snd_cache_size 16 | ||
+ | snd_efx on | ||
+ | snd_targets 24 | ||
+ | snd_volume_eff 1. | ||
+ | snd_volume_music 1. | ||
+ | sv_anomalies_enabled 1 | ||
+ | sv_anomalies_length 3 | ||
+ | sv_artefact_respawn_delta 30 | ||
+ | sv_artefact_spawn_force 0 | ||
+ | sv_artefact_stay_time 3 | ||
+ | sv_artefacts_count 10 | ||
+ | sv_auto_team_balance 0 | ||
+ | sv_auto_team_swap 1 | ||
+ | sv_bearercantsprint 1 | ||
+ | sv_client_reconnect_time 60 | ||
+ | sv_console_update_rate 1 | ||
+ | sv_dedicated_server_update_rate 100 | ||
+ | sv_dmgblockindicator 1 | ||
+ | sv_dmgblocktime 0 | ||
+ | sv_forcerespawn 0 | ||
+ | sv_fraglimit 10 | ||
+ | sv_friendly_indicators 0 | ||
+ | sv_friendly_names 0 | ||
+ | sv_friendlyfire 1. | ||
+ | sv_hail_to_winner_time 7 | ||
+ | sv_max_ping_limit 2000 | ||
+ | sv_pda_hunt 1 | ||
+ | sv_reinforcement_time 0 | ||
+ | sv_remove_corpse 1 | ||
+ | sv_remove_weapon 1 | ||
+ | sv_returnplayers 1 | ||
+ | sv_rpoint_freeze_time 0 | ||
+ | sv_shieldedbases 1 | ||
+ | sv_spectr_firsteye 1 | ||
+ | sv_spectr_freefly 0 | ||
+ | sv_spectr_freelook 1 | ||
+ | sv_spectr_lookat 1 | ||
+ | sv_spectr_teamcamera 1 | ||
+ | sv_statistic_collect 1 | ||
+ | sv_statistic_save_auto 0 | ||
+ | sv_teamkill_limit 3 | ||
+ | sv_teamkill_punish 1 | ||
+ | sv_timelimit 0 | ||
+ | sv_vote_enabled 255 | ||
+ | sv_vote_participants 0 | ||
+ | sv_vote_quota 0.51 | ||
+ | sv_vote_time 1. | ||
+ | sv_warm_up 0 | ||
+ | texture_lod 0 | ||
+ | vid_mode 1280x1024 | ||
+ | </pre> | ||
+ | <br />Это мой полный. | ||
+ | <br />Возмём к примеру графический параметр '''r2_gi''' | ||
+ | <br />Префикс r2 означает что он будет работать только на полном динамическом освещении. | ||
+ | <br />Далее идём в файл '''ui_mm_opt_video_adv.script | ||
+ | ''' | ||
+ | <lua>class "opt_video_adv" (CUIWindow) | ||
+ | |||
+ | function opt_video_adv:__init() super() | ||
+ | end | ||
+ | |||
+ | function opt_video_adv:__finalize() | ||
+ | end | ||
+ | |||
+ | function only_2_mode(ctrl, _id) | ||
+ | local bEnabled = _id==2 | ||
+ | ctrl:Enable (bEnabled) | ||
+ | end | ||
+ | |||
+ | function only_12_mode(ctrl, _id) | ||
+ | local bEnabled = _id==1 or _id==2 | ||
+ | ctrl:Enable (bEnabled) | ||
+ | end | ||
+ | |||
+ | function opt_video_adv:InitControls(x, y, xml, handler) | ||
+ | local ctl | ||
+ | self:Init (x,y, 738, 416) | ||
+ | self:SetAutoDelete (true) | ||
+ | |||
+ | self.bk = xml:InitFrame ("frame_videoadv", self) | ||
+ | self.scroll_v = xml:InitScrollView ("video_adv:scroll_v", self) | ||
+ | |||
+ | local _st = xml:InitStatic ("video_adv:templ_item", self.scroll_v) | ||
+ | xml:InitStatic ("video_adv:cap_vis_dist", _st) | ||
+ | xml:InitTrackBar ("video_adv:track_vis_dist", _st) | ||
+ | |||
+ | _st = xml:InitStatic ("video_adv:templ_item", self.scroll_v) | ||
+ | xml:InitStatic ("video_adv:cap_geometry_lod", _st) | ||
+ | xml:InitTrackBar ("video_adv:track_geometry_lod", _st) | ||
+ | |||
+ | _st = xml:InitStatic ("video_adv:templ_item", self.scroll_v) | ||
+ | xml:InitStatic ("video_adv:cap_detail_density", _st) | ||
+ | xml:InitTrackBar ("video_adv:track_detail_density", _st) | ||
+ | |||
+ | _st = xml:InitStatic ("video_adv:templ_item", self.scroll_v) | ||
+ | xml:InitStatic ("video_adv:cap_texture_lod", _st) | ||
+ | xml:InitTrackBar ("video_adv:track_texture_lod", _st) | ||
+ | |||
+ | _st = xml:InitStatic ("video_adv:templ_item", self.scroll_v) | ||
+ | xml:InitStatic ("video_adv:cap_aniso", _st) | ||
+ | xml:InitTrackBar ("video_adv:track_aniso", _st) | ||
+ | |||
+ | _st = xml:InitStatic ("video_adv:templ_item", self.scroll_v) | ||
+ | xml:InitStatic ("video_adv:cap_ssample", _st) | ||
+ | xml:InitTrackBar ("video_adv:track_ssample", _st) | ||
+ | |||
+ | |||
+ | _st = xml:InitStatic ("video_adv:templ_item", self.scroll_v) | ||
+ | xml:InitStatic ("video_adv:cap_r2_sun", _st) | ||
+ | ctl = xml:InitCheck ("video_adv:check_r2_sun", _st) | ||
+ | handler.m_preconditions[ctl] = only_2_mode | ||
+ | |||
+ | _st = xml:InitStatic ("video_adv:templ_item", self.scroll_v) | ||
+ | xml:InitStatic ("video_adv:cap_r2_sun_details", _st) | ||
+ | ctl = xml:InitCheck ("video_adv:check_r2_sun_details", _st) | ||
+ | handler.m_preconditions[ctl] = only_2_mode | ||
+ | |||
+ | _st = xml:InitStatic ("video_adv:templ_item", self.scroll_v) | ||
+ | xml:InitStatic ("video_adv:cap_light_distance", _st) | ||
+ | ctl = xml:InitTrackBar ("video_adv:track_light_distance", _st) | ||
+ | handler.m_preconditions[ctl] = only_12_mode | ||
+ | |||
+ | _st = xml:InitStatic ("video_adv:templ_item", self.scroll_v) | ||
+ | xml:InitStatic ("video_adv:cap_npc_torch", _st) | ||
+ | xml:InitCheck ("video_adv:check_npc_torch", _st) | ||
+ | |||
+ | _st = xml:InitStatic ("video_adv:templ_item", self.scroll_v) | ||
+ | xml:InitStatic ("video_adv:cap_particles_distance", _st) | ||
+ | ctl = xml:InitTrackBar ("video_adv:track_particles_distance", _st) | ||
+ | handler.m_preconditions[ctl] = only_12_mode | ||
+ | |||
+ | _st = xml:InitStatic ("video_adv:templ_item", self.scroll_v) | ||
+ | xml:InitStatic ("video_adv:cap_vsync", _st) | ||
+ | xml:InitCheck ("video_adv:check_vsync", _st) | ||
+ | |||
+ | _st = xml:InitStatic ("video_adv:templ_item", self.scroll_v) | ||
+ | xml:InitStatic ("video_adv:cap_60hz", _st) | ||
+ | xml:InitCheck ("video_adv:check_60hz", _st) | ||
+ | |||
+ | btn = xml:Init3tButton ("video_adv:btn_to_simply", self) | ||
+ | handler:Register (btn, "btn_simply_graphic") | ||
+ | end | ||
+ | </lua> | ||
+ | <br />Как нам хорошо видно, тут выписаны функции всех параметров в видео опциях игры. Обратите внимание, что существует два вида опции. Ползунок и кнопка. Ползунок используется для опций, где необходимо числовое вычисление. А кнопка, где функция работает | ||
+ | |||
+ | <br />Копируем, вставляем с новым именем перед концом скрипта. | ||
+ | |||
+ | |||
+ | <lua><br /> _st = xml:InitStatic | ||
+ | <br /> ("video_adv:templ_item", self.scroll_v) | ||
+ | <br /> xml:InitStatic | ||
+ | <br /> ("video_adv:cap_r2gi", _st) | ||
+ | <br /> xml:InitCheck | ||
+ | <br /> ("video_adv:check_r2gi", _st)</lua> | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | Переписываем вот так и вставляем перед | ||
+ | <lua> btn = xml:Init3tButton ("video_adv:btn_to_simply", self) </lua> | ||
+ | |||
+ | Сохраняем и закрываем. | ||
+ | <br /> Идём в''' ui_mm_opt.xml''' | ||
+ | |||
+ | <br /> Вписываем в любое место каркас | ||
+ | <xml><cap_r2gi x="20" y="0" width="143" height="21"> | ||
+ | <text font="letterica16" r="215" g="195" b="170">ui_mm_r2gi</text> | ||
+ | </cap_r2gi> | ||
+ | <check_r2gi x="194" y="0" width="30" height="21"> | ||
+ | <options_item entry="r2_gi" group="mm_opt_video_adv"/> | ||
+ | </check_r2gi></xml> | ||
+ | <br /> Разберём подробно | ||
+ | |||
+ | <br /> '''<cap_r2gi x="20" y="0" width="143" height="21">''' | ||
+ | <br /> Название нашей кнопки, и кординаты её расположения | ||
+ | <br /> '''*вторая строчка*''' | ||
+ | <br /> Тут всё просто. Шрифт, и URL на текст | ||
+ | <br /> '''<check_r2gi x="194" y="0" width="30" height="21">''' | ||
+ | <br /> Плохо знаю зачем нужна, но всегда нужно заполнять. Связана с проверкой | ||
+ | <br /> '''<options_item entry="r2_gi" group="mm_opt_video_adv"/>''' | ||
+ | <br /> А вот тут всё очень интересно. Первое, указан изменяемый параметр(из user.ltx) и группа(класс) скрипта, в котором записана обрабатывающая функция | ||
+ | <br /> Вот и всё. Теперь идём в '''ui_st_mm.xml''' | ||
+ | <xml><string id="ui_mm_r2gi"> | ||
+ | <text>Продать все</text> | ||
+ | </string></xml> | ||
+ | <br /> Записываем в самый конец эту тему, и всё. Функция добавлена. | ||
+ | [[Категория:Скрипты]] |
Версия 21:25, 9 февраля 2017
Будем учиться добавлять новые опции в меню графики.
Нам понадобятся файлы:
user.ltx
ui_mm_opt_video.script
ui_mm_opt_video_adv.script
ui_mm_opt.xml
ui_st_mm.xml
Для начала, идём в user.ltx и ищем там графические параметры.
_preset Extreme ai_use_torch_dynamic_lights on unbindall bind left kLEFT bind right kRIGHT bind up kUP bind down kDOWN bind jump kSPACE bind crouch kLCONTROL bind accel kLSHIFT bind sprint_toggle kX bind forward kW bind back kS bind lstrafe kA bind rstrafe kD bind llookout kQ bind rlookout kE bind cam_zoom_in kADD bind cam_zoom_out kSUBTRACT bind torch kL bind night_vision kN bind wpn_1 k1 bind wpn_2 k2 bind wpn_3 k3 bind wpn_4 k4 bind wpn_5 k5 bind wpn_6 k6 bind artefact k7 bind wpn_next kY bind wpn_fire mouse1 bind wpn_zoom mouse2 bind wpn_reload kR bind wpn_func kV bind wpn_firemode_prev k9 bind wpn_firemode_next k0 bind pause kPAUSE bind drop kG bind use kF bind scores kTAB bind chat kCOMMA bind chat_team kPERIOD bind screenshot kF12 bind quit kESCAPE bind console kGRAVE bind inventory kI bind buy_menu kB bind skin_menu kO bind team_menu kU bind active_jobs kP bind map kM bind contacts kH bind vote_begin kF5 bind vote kF6 bind vote_yes kF7 bind vote_no kF8 bind speech_menu_0 kC bind speech_menu_1 kZ bind use_bandage kRBRACKET bind use_medkit kLBRACKET bind quick_save kF6 bind quick_load kF7 cam_inert 0. cam_slide_inert 0.25 cl_cod_pickup_mode 1 cl_dynamiccrosshair on g_always_run on g_autopickup on g_backrun on g_corpsenum 10 g_eventdelay 0 g_game_difficulty gd_novice hud_crosshair on hud_crosshair_dist off hud_info on hud_weapon on load_last_save all mm_mm_net_srv_dedicated off mm_net_con_publicserver off mm_net_con_spectator 20 mm_net_con_spectator_on off mm_net_filter_empty on mm_net_filter_full on mm_net_filter_listen on mm_net_filter_pass on mm_net_filter_wo_ff on mm_net_filter_wo_pass on mm_net_srv_gamemode st_deathmatch mm_net_srv_maxplayers 32 mm_net_srv_name MICROSOF-80B663 mm_net_srv_reinforcement_type 1 mm_net_weather_rateofchange 1. mouse_invert off mouse_sens 0.12 net_cl_icurvesize 0 net_cl_icurvetype 0 net_cl_interpolation 0. net_cl_log_data off net_dbg_dump_export_obj 0 net_dbg_dump_import_obj 0 net_dbg_dump_update_read 0 net_dbg_dump_update_write 0 net_dedicated_sleep 5 net_sv_gpmode 0 net_sv_log_data off net_sv_pending_lim 3 net_sv_update_rate 30 ph_frequency 100.00000 ph_iterations 38 r1_dlights on r1_dlights_clip 75. r1_glows_per_frame 16 r1_lmodel_lerp 0.1 r1_pps_u 0. r1_pps_v 0. r1_ssa_lod_a 64. r1_ssa_lod_b 48. r1_tf_mipbias 0. r2_aa off r2_aa_break 0.800000,0.500000,0.000000 r2_aa_kernel 0.5 r2_aa_weight 0.250000,0.250000,0.000000 r2_allow_r1_lights off r2_gi off r2_gi_clip 0.001 r2_gi_depth 1 r2_gi_photons 16 r2_gi_refl 0.9 r2_gloss_factor 1.5 r2_ls_bloom_fast off r2_ls_bloom_kernel_b 0.7 r2_ls_bloom_kernel_g 3. r2_ls_bloom_kernel_scale 0.7 r2_ls_bloom_speed 100. r2_ls_bloom_threshold 0.001 r2_ls_depth_bias -0.0003 r2_ls_depth_scale 1.00001 r2_ls_dsm_kernel 0.7 r2_ls_psm_kernel 0.7 r2_ls_squality 1. r2_ls_ssm_kernel 0.7 r2_mblur 0. r2_parallax_h 0.02 r2_slight_fade 0.3333 r2_ssa_lod_a 64. r2_ssa_lod_b 48. r2_sun on r2_sun_depth_far_bias -0.00001 r2_sun_depth_far_scale 1. r2_sun_depth_near_bias 0.00001 r2_sun_depth_near_scale 1. r2_sun_details off r2_sun_focus on r2_sun_lumscale 1. r2_sun_lumscale_amb 0.5 r2_sun_lumscale_hemi 1. r2_sun_near 12. r2_sun_near_border 0.75 r2_sun_tsm on r2_sun_tsm_bias -0.01 r2_sun_tsm_proj 0.3 r2_tf_mipbias 0. r2_tonemap on r2_tonemap_adaptation 1. r2_tonemap_amount 0.7 r2_tonemap_lowlum 0.0001 r2_tonemap_middlegray 0.6 r2_wait_sleep 0 r2_zfill off r2_zfill_depth 0.5 r2em 2.2 r__detail_density 0.2 r__geometry_lod 1. r__supersample 2 r__tf_aniso 16 renderer renderer_r2 rs_c_brightness 1. rs_c_contrast 1. rs_c_gamma 1. rs_fullscreen on rs_refresh_60hz on rs_stats off rs_v_sync off rs_vis_distance 1. snd_acceleration on snd_cache_size 16 snd_efx on snd_targets 24 snd_volume_eff 1. snd_volume_music 1. sv_anomalies_enabled 1 sv_anomalies_length 3 sv_artefact_respawn_delta 30 sv_artefact_spawn_force 0 sv_artefact_stay_time 3 sv_artefacts_count 10 sv_auto_team_balance 0 sv_auto_team_swap 1 sv_bearercantsprint 1 sv_client_reconnect_time 60 sv_console_update_rate 1 sv_dedicated_server_update_rate 100 sv_dmgblockindicator 1 sv_dmgblocktime 0 sv_forcerespawn 0 sv_fraglimit 10 sv_friendly_indicators 0 sv_friendly_names 0 sv_friendlyfire 1. sv_hail_to_winner_time 7 sv_max_ping_limit 2000 sv_pda_hunt 1 sv_reinforcement_time 0 sv_remove_corpse 1 sv_remove_weapon 1 sv_returnplayers 1 sv_rpoint_freeze_time 0 sv_shieldedbases 1 sv_spectr_firsteye 1 sv_spectr_freefly 0 sv_spectr_freelook 1 sv_spectr_lookat 1 sv_spectr_teamcamera 1 sv_statistic_collect 1 sv_statistic_save_auto 0 sv_teamkill_limit 3 sv_teamkill_punish 1 sv_timelimit 0 sv_vote_enabled 255 sv_vote_participants 0 sv_vote_quota 0.51 sv_vote_time 1. sv_warm_up 0 texture_lod 0 vid_mode 1280x1024
Это мой полный.
Возмём к примеру графический параметр r2_gi
Префикс r2 означает что он будет работать только на полном динамическом освещении.
Далее идём в файл ui_mm_opt_video_adv.script
class "opt_video_adv" (CUIWindow) function opt_video_adv:__init() super() end function opt_video_adv:__finalize() end function only_2_mode(ctrl, _id) local bEnabled = _id==2 ctrl:Enable (bEnabled) end function only_12_mode(ctrl, _id) local bEnabled = _id==1 or _id==2 ctrl:Enable (bEnabled) end function opt_video_adv:InitControls(x, y, xml, handler) local ctl self:Init (x,y, 738, 416) self:SetAutoDelete (true) self.bk = xml:InitFrame ("frame_videoadv", self) self.scroll_v = xml:InitScrollView ("video_adv:scroll_v", self) local _st = xml:InitStatic ("video_adv:templ_item", self.scroll_v) xml:InitStatic ("video_adv:cap_vis_dist", _st) xml:InitTrackBar ("video_adv:track_vis_dist", _st) _st = xml:InitStatic ("video_adv:templ_item", self.scroll_v) xml:InitStatic ("video_adv:cap_geometry_lod", _st) xml:InitTrackBar ("video_adv:track_geometry_lod", _st) _st = xml:InitStatic ("video_adv:templ_item", self.scroll_v) xml:InitStatic ("video_adv:cap_detail_density", _st) xml:InitTrackBar ("video_adv:track_detail_density", _st) _st = xml:InitStatic ("video_adv:templ_item", self.scroll_v) xml:InitStatic ("video_adv:cap_texture_lod", _st) xml:InitTrackBar ("video_adv:track_texture_lod", _st) _st = xml:InitStatic ("video_adv:templ_item", self.scroll_v) xml:InitStatic ("video_adv:cap_aniso", _st) xml:InitTrackBar ("video_adv:track_aniso", _st) _st = xml:InitStatic ("video_adv:templ_item", self.scroll_v) xml:InitStatic ("video_adv:cap_ssample", _st) xml:InitTrackBar ("video_adv:track_ssample", _st) _st = xml:InitStatic ("video_adv:templ_item", self.scroll_v) xml:InitStatic ("video_adv:cap_r2_sun", _st) ctl = xml:InitCheck ("video_adv:check_r2_sun", _st) handler.m_preconditions[ctl] = only_2_mode _st = xml:InitStatic ("video_adv:templ_item", self.scroll_v) xml:InitStatic ("video_adv:cap_r2_sun_details", _st) ctl = xml:InitCheck ("video_adv:check_r2_sun_details", _st) handler.m_preconditions[ctl] = only_2_mode _st = xml:InitStatic ("video_adv:templ_item", self.scroll_v) xml:InitStatic ("video_adv:cap_light_distance", _st) ctl = xml:InitTrackBar ("video_adv:track_light_distance", _st) handler.m_preconditions[ctl] = only_12_mode _st = xml:InitStatic ("video_adv:templ_item", self.scroll_v) xml:InitStatic ("video_adv:cap_npc_torch", _st) xml:InitCheck ("video_adv:check_npc_torch", _st) _st = xml:InitStatic ("video_adv:templ_item", self.scroll_v) xml:InitStatic ("video_adv:cap_particles_distance", _st) ctl = xml:InitTrackBar ("video_adv:track_particles_distance", _st) handler.m_preconditions[ctl] = only_12_mode _st = xml:InitStatic ("video_adv:templ_item", self.scroll_v) xml:InitStatic ("video_adv:cap_vsync", _st) xml:InitCheck ("video_adv:check_vsync", _st) _st = xml:InitStatic ("video_adv:templ_item", self.scroll_v) xml:InitStatic ("video_adv:cap_60hz", _st) xml:InitCheck ("video_adv:check_60hz", _st) btn = xml:Init3tButton ("video_adv:btn_to_simply", self) handler:Register (btn, "btn_simply_graphic") end
Как нам хорошо видно, тут выписаны функции всех параметров в видео опциях игры. Обратите внимание, что существует два вида опции. Ползунок и кнопка. Ползунок используется для опций, где необходимо числовое вычисление. А кнопка, где функция работает
Копируем, вставляем с новым именем перед концом скрипта.
<br /> _st = xml:InitStatic <br /> ("video_adv:templ_item", self.scroll_v) <br /> xml:InitStatic <br /> ("video_adv:cap_r2gi", _st) <br /> xml:InitCheck <br /> ("video_adv:check_r2gi", _st)
Переписываем вот так и вставляем перед
btn = xml:Init3tButton ("video_adv:btn_to_simply", self)
Сохраняем и закрываем.
Идём в ui_mm_opt.xml
Вписываем в любое место каркас
<cap_r2gi x="20" y="0" width="143" height="21"> <text font="letterica16" r="215" g="195" b="170">ui_mm_r2gi</text> </cap_r2gi> <check_r2gi x="194" y="0" width="30" height="21"> <options_item entry="r2_gi" group="mm_opt_video_adv"/> </check_r2gi>
Разберём подробно
<cap_r2gi x="20" y="0" width="143" height="21">
Название нашей кнопки, и кординаты её расположения
*вторая строчка*
Тут всё просто. Шрифт, и URL на текст
<check_r2gi x="194" y="0" width="30" height="21">
Плохо знаю зачем нужна, но всегда нужно заполнять. Связана с проверкой
<options_item entry="r2_gi" group="mm_opt_video_adv"/>
А вот тут всё очень интересно. Первое, указан изменяемый параметр(из user.ltx) и группа(класс) скрипта, в котором записана обрабатывающая функция
Вот и всё. Теперь идём в ui_st_mm.xml
<string id="ui_mm_r2gi"> <text>Продать все</text> </string>
Записываем в самый конец эту тему, и всё. Функция добавлена.