Сповіщення
Очистити все

Додання нових графічних опцій


Ранг:
Майстер
Роль:
Гість
Записи:
752
Приєднався:
2 роки тому
 

Вчимося додавати нові опції в меню графіки.
Нам знадобляться файли:
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 = 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 = xml:InitStatic			 ( "video_adv:templ_item" , self.scroll_v ) 
	xml:InitStatic								 ( "video_adv:cap_detail_density" , _st ) 
	xml:InitTrackBar							 ( "video_adv: track_detail_dens
 
	_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 = 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 " 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_ta conditions [ 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_distan = 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 = xml:InitStatic			 ( "video_adv:templ_item" , self.scroll_v ) 
	xml:InitStatic								 ( "video_adv:cap_particles_distance" , _st ) ctl 
	= xml:InitTrackBar			 ( "video_adv: 
	track_particle 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 >

Розберемо докладно

Назва нашої кнопки, і кординати її розташування *
другий рядок *
Тут все просто. Шрифт, та URL на текст
<check_r2gi x="194" y="0" width="30" height="21">
Погано знаю навіщо потрібна, але завжди потрібно заповнювати. Пов'язана з перевіркою
<options_item>
А ось тут все дуже цікаво. Перше, вказаний параметр (з user.ltx) і група (клас) скрипта, в якому записана обробна функція
Ось і все. Тепер йдемо в ui_st_mm.xml

<string  id = "ui_mm_r2gi" > 
		<text > Продати все </text >
	 </string >

Записуємо в кінець цю тему, і все. Додана функція.


   
Цитата