diff --git a/Black Ops/Configs/config_mp.cfg b/Black Ops/Configs/config_mp.cfg new file mode 100755 index 0000000..4d53aa9 --- /dev/null +++ b/Black Ops/Configs/config_mp.cfg @@ -0,0 +1,508 @@ +// generated by Call of Duty, do not modify +unbindall +bind TAB "+scores" +bind ESCAPE "togglemenu" +bind SPACE "+gostand" +bind2 SPACE "+switchseat" +bind 1 "weapnext" +bind 2 "weapnext" +bind 4 "+smoke" +bind 5 "+actionslot 3" +bind 6 "+actionslot 4" +bind 7 "+actionslot 2" +bind A "+moveleft" +bind B "mp_QuickMessage" +bind C "togglecrouch" +bind D "+moveright" +bind E "+melee" +bind F "+actionslot 1" +bind G "+frag" +bind2 G "+vehicleattacksecond" +bind I "chatmodepublic" +bind O "chatmodeteam" +bind P "+talk" +bind Q "+leanleft" +bind R "+reload" +bind S "+back" +bind2 S "+reverse" +bind V "+leanright" +bind W "+forward" +bind2 W "+gas" +bind PAUSE "toggle cl_paused" +bind CTRL "toggleprone" +bind2 CTRL "+handbrake" +bind SHIFT "+breath_sprint" +bind PGDN "vote no" +bind PGUP "vote yes" +bind F3 "toggleview" +bind F10 "acceptinvitation" +bind F12 "screenshotJPEG" +bind MOUSE1 "+attack" +bind2 MOUSE1 "+vehicleattack" +bind MOUSE2 "+toggleads_throw" +bind MWHEELDOWN "+attack" +bind2 MWHEELDOWN "+vehiclemovedown" +bind2 MWHEELUP "+vehiclemoveup" +unbindallaxis +seta acousticSpikeMaxRange "200" +seta acousticSpikeMinRadius "0.0001" +seta acousticSpikeMinRange "0" +seta acousticSpikeRingSize "20" +seta acousticSpikeSize "10" +seta ai_corpseCount "5" +seta bot_difficulty "normal" +seta bot_tips "1" +seta cg_adsZoomToggleStyle "1" +seta cg_adsZScaleMax "1.25" + +seta cg_blood "0" +seta cg_brass "0" + +seta cg_chatHeight "5" +seta cg_chatTime "12000" +seta cg_connectionIconSize "5" +seta cg_crosshairAlpha "1" +seta cg_crosshairAlphaMin "0.5" +seta cg_crosshairDynamic "0" +seta cg_crosshairEnemyColor "1" +seta cg_cursorHints "4" +seta cg_debugInfoCornerOffset "0 0" +seta cg_descriptiveText "1" +seta cg_drawBreathHint "1" +seta cg_drawCrosshair "1" +seta cg_drawCrosshairNames "1" + +seta cg_drawFPS "Simple" + +seta cg_drawFPSLabels "1" +seta cg_drawFPSOnly "0" +seta cg_drawFPSScale "0" +seta cg_drawHoldBreathHint "1" +seta cg_drawMantleHint "1" +seta cg_drawSnapshot "0" +seta cg_drawSnapshotTime "1" +seta cg_drawTurretCrosshair "1" +seta cg_flareVisionSetFadeDuration "2000" +seta cg_fov_default "65" +seta cg_fov_default_thirdperson "40" +seta cg_gameBoldMessageWidth "390" +seta cg_gameMessageWidth "455" +seta cg_headIconMinScreenRadius "0.025" +seta cg_hintFadeTime "100" +seta cg_hudChatIntermissionPosition "5 90" +seta cg_hudChatPosition "5 200" +seta cg_hudDamageDirectionalIconTime "1000" +seta cg_hudDamageIconHeight "64" +seta cg_hudDamageIconInScope "0" +seta cg_hudDamageIconOffset "128" +seta cg_hudDamageIconTime "2000" +seta cg_hudDamageIconWidth "128" +seta cg_hudGrenadeIconEnabledFlash "0" +seta cg_hudGrenadeIconHeight "25" +seta cg_hudGrenadeIconInScope "0" +seta cg_hudGrenadeIconMaxHeight "104" +seta cg_hudGrenadeIconOffset "50" +seta cg_hudGrenadeIconWidth "25" +seta cg_hudGrenadePointerHeight "12" +seta cg_hudGrenadePointerPivot "12 27" +seta cg_hudGrenadePointerWidth "25" +seta cg_hudMapBorderWidth "2" +seta cg_hudMapFriendlyHeight "15" +seta cg_hudMapFriendlyWidth "15" +seta cg_hudMapPlayerHeight "20" +seta cg_hudMapPlayerWidth "20" +seta cg_hudMapRadarLineThickness "0.15" +seta cg_hudProneY "-160" +seta cg_hudSayPosition "5 180" +seta cg_hudStanceHintPrints "0" +seta cg_hudVotePosition "5 220" +seta cg_invalidCmdHintBlinkInterval "600" +seta cg_invalidCmdHintDuration "1800" +seta cg_mapLocationSelectionCursorSpeed "0.6" +seta cg_mapLocationSelectionRotationSpeed "3" +seta cg_marks_ents_player_only "0" +seta cg_mature "1" +seta cg_MaxDownedPulseRate "4" +seta cg_MinDownedPulseRate "1" +seta cg_motionblur_duration "2500" +seta cg_motionblur_fadeout "500" +seta cg_overheadIconSize "0.7" +seta cg_overheadNamesFont "2" +seta cg_overheadNamesSize "0.5" +seta cg_overheadRankSize "0.5" +seta cg_predictItems "1" +seta cg_ScoresPing_BgColor "0.25098 0.25098 0.25098 0.501961" +seta cg_ScoresPing_HighColor "0.8 0 0 1" +seta cg_ScoresPing_LowColor "0 0.74902 0 1" +seta cg_ScoresPing_MaxBars "4" +seta cg_ScoresPing_MedColor "0.8 0.8 0 1" +seta cg_scriptIconSize "5" +seta cg_seatHintFadeTime "2000" +seta cg_sprintMeterDisabledColor "0.8 0.1 0.1 0.2" +seta cg_sprintMeterEmptyColor "0.7 0.5 0.2 0.8" +seta cg_sprintMeterFullColor "0.8 0.8 0.8 0.8" +seta cg_subtitleMinTime "3" +seta cg_subtitles "1" +seta cg_subtitleWidthStandard "520" +seta cg_subtitleWidthWidescreen "520" +seta cg_teamChatsOnly "0" +seta cg_thirdPersonAngle "354" +seta cg_thirdPersonMode "Fixed" +seta cg_thirdPersonRange "120" +seta cg_timedDamageDuration "500" +seta cg_viewZSmoothingMax "16" +seta cg_viewZSmoothingMin "1" +seta cg_viewZSmoothingTime "0.1" +seta cg_visionSetLerpMaxDecreasePerFrame "0.01" +seta cg_visionSetLerpMaxIncreasePerFrame "0.02" +seta cg_voiceIconSize "0" +seta cg_weaponCycleDelay "0" +seta cg_youInKillCamSize "11" +seta cl_allowDownload "1" +seta cl_freelook "1" + +seta cl_maxpackets "100" + +seta cl_maxPing "800" +seta cl_maxppf "5" +seta cl_mouseAccel "0" +seta cl_packetdup "1" +seta cl_pitchspeed "140" +seta cl_voice "1" +seta cl_wwwDownload "1" +seta cl_yawspeed "140" +seta clanName "" +seta com_first_time_pc "1" + +seta com_maxfps "100" + +seta com_recommendedSet "1" +seta com_startupIntroPlayed "1" +seta compassClampIcons "1" +seta compassCoords "740 3590 400" +seta compassECoordCutoff "37" +seta compassFriendlyHeight "18.75" +seta compassFriendlyWidth "18.75" +seta compassLocalRadarRadius "700" +seta compassLocalRadarUpdateTime "2.25" +seta compassMaxRange "2500" +seta compassMinRadius "0.0001" +seta compassMinRange "0.0001" +seta compassObjectiveArrowHeight "20" +seta compassObjectiveArrowOffset "2" +seta compassObjectiveArrowRotateDist "5" +seta compassObjectiveArrowWidth "20" +seta compassObjectiveDrawLines "1" +seta compassObjectiveHeight "20" +seta compassObjectiveIconHeight "18" +seta compassObjectiveIconHeightZombie "16" +seta compassObjectiveIconWidth "18" +seta compassObjectiveIconWidthZombie "16" +seta compassObjectiveMaxRange "2048" +seta compassObjectiveMinAlpha "1" +seta compassObjectiveNumRings "10" +seta compassObjectiveRingSize "80" +seta compassObjectiveRingTime "10000" +seta compassObjectiveTextHeight "18" +seta compassObjectiveTextScale "0.3" +seta compassObjectiveWidth "20" +seta compassPartialType "0" +seta compassPlayerHeight "18.75" +seta compassPlayerWidth "18.75" +seta compassRadarLineThickness "0.4" +seta compassRadarPingFadeTime "4" +seta compassRadarUpdateFastTime "2" +seta compassRadarUpdateTime "4" +seta compassRotation "1" +seta compassSatellitePingFadeTime "10" +seta compassSatelliteScanTime "1000" +seta compassSatelliteStaticImageFadeTime "0" +seta compassSize "1" +seta compassSoundPingFadeTime "2" +seta compassStaticImageUpdateTime "5000" +seta compassTickertapeStretch "0.5" +seta con_errormessagetime "8" +seta con_gameMsgWindow0FadeInTime "0.25" +seta con_gameMsgWindow0FadeOutTime "0.5" +seta con_gameMsgWindow0Filter "gamenotify obituary" +seta con_gameMsgWindow0LineCount "4" +seta con_gameMsgWindow0MsgTime "5" +seta con_gameMsgWindow0ScrollTime "0.25" +seta con_gameMsgWindow0SplitscreenScale "1.5" +seta con_gameMsgWindow1FadeInTime "0.25" +seta con_gameMsgWindow1FadeOutTime "0.01" +seta con_gameMsgWindow1Filter "boldgame" +seta con_gameMsgWindow1LineCount "1" +seta con_gameMsgWindow1MsgTime "8" +seta con_gameMsgWindow1ScrollTime "0.25" +seta con_gameMsgWindow1SplitscreenScale "1.5" +seta con_gameMsgWindow2FadeInTime "0.75" +seta con_gameMsgWindow2FadeOutTime "0.5" +seta con_gameMsgWindow2Filter "subtitle" +seta con_gameMsgWindow2LineCount "7" +seta con_gameMsgWindow2MsgTime "5" +seta con_gameMsgWindow2ScrollTime "0.25" +seta con_gameMsgWindow2SplitscreenScale "1.5" +seta con_inputBoxColor "0.25 0.25 0.2 1" +seta con_inputHintBoxColor "0.4 0.4 0.35 1" +seta con_matchPrefixOnly "1" +seta con_minicon "0" +seta con_miniconlines "5" +seta con_minicontime "4" +seta con_outputBarColor "1 1 0.95 0.6" +seta con_outputSliderColor "0.15 0.15 0.1 0.6" +seta con_outputWindowColor "0.35 0.35 0.3 0.75" +seta con_typewriterColorGlowCheckpoint "0.6 0.5 0.6 1" +seta con_typewriterColorGlowCompleted "0 0.3 0.8 1" +seta con_typewriterColorGlowFailed "0.8 0 0 1" +seta con_typewriterColorGlowUpdated "0 0.6 0.18 1" +seta con_typewriterDecayDuration "1000" +seta con_typewriterDecayStartTime "4000" +seta con_typewriterEnabledSounds "0" +seta con_typewriterPrintSpeed "40" +seta customclass1 "CUSTOM 1" +seta customclass2 "CUSTOM 2" +seta customclass3 "CUSTOM 3" +seta customclass4 "CUSTOM 4" +seta customclass5 "CUSTOM 5" +seta drawLagometer "0" +seta drew_notes "1" +seta fx_marks "1" +seta fx_marks_ents "1" +seta fx_marks_smodels "1" +seta g_allowvote "1" +seta g_useGear "0" +seta gpad_buttonsConfig "buttons_default" +seta gpad_enabled "0" +seta gpad_menu_scroll_delay_first "420" +seta gpad_menu_scroll_delay_rest "210" +seta gpad_rumble "1" +seta gpad_sticksConfig "thumbstick_default" +seta hud_deathQuoteFadeTime "1000" +seta hud_enable "1" +seta hud_fade_ammodisplay "0" +seta hud_fade_compass "0" +seta hud_fade_healthbar "2" +seta hud_fade_offhand "0" +seta hud_fade_sprint "1.7" +seta hud_fade_stance "1.7" +seta hud_fade_vehiclecontrols "4" +seta hud_fadeout_speed "0.1" +seta hud_flash_period_offhand "0.5" +seta hud_flash_time_offhand "2" +seta hud_health_pulserate_critical "0.5" +seta hud_health_pulserate_injured "1" +seta hud_health_startpulse_critical "0.33" +seta hud_health_startpulse_injured "1" +seta in_mouse "1" +seta input_invertPitch "0" +seta input_viewSensitivity "1" +seta loc_forceEnglish "0" +seta loc_language "0" +seta log_append "0" +seta m_filter "0" +seta m_forward "0.25" +seta m_pitch "0.022" +seta m_side "0.25" +seta m_yaw "0.022" +seta monkeytoy "0" +seta name "$('*').addclass" +seta net_noudp "0" +seta net_socksEnabled "0" +seta net_socksPassword "" +seta net_socksPort "1080" +seta net_socksServer "" +seta net_socksUsername "" +seta playlist_excludeGametype "" +seta playlist_excludeGametypeMap "" +seta playlist_excludeMap "" +seta prestigeclass1 "CUSTOM 6" +seta prestigeclass2 "CUSTOM 7" +seta prestigeclass3 "CUSTOM 8" +seta prestigeclass4 "CUSTOM 9" +seta prestigeclass5 "CUSTOM 10" +seta profile_physics "0" +seta r_aaAlpha "dither (fast)" +seta r_aaSamples "2" +seta r_allow_intz "1" +seta r_allow_null_rt "1" +seta r_aspectRatio "auto" +seta r_autopriority "0" +seta r_backBufferSize "960" +seta r_backBufferSizeY "544" + +seta r_blur_allowed "0" + +seta r_clipCodec "MJPEG" +seta r_clipFPS "24" +seta r_clipSize "360" +seta r_customMode "" +seta r_debugLineWidth "1" +seta r_depthPrepass "0" +seta r_displayRefresh "60 Hz" + +seta r_distortion "0" +seta r_dof_enable "0" + +seta r_fastSkin "0" +seta r_filmLut "-1" +seta r_flame_allowed "1" +seta r_flameFX_distortionScaleFactor "0 1 1 0.511918" +seta r_flameFX_enable "0" +seta r_flameFX_fadeDuration "0.5" +seta r_flameFX_FPS "15" +seta r_flameFX_magnitude "0.0215147" +seta r_fovScaleThresholdRigid "2.4" +seta r_fovScaleThresholdSkinned "2.4" + +seta r_fullscreen "1" + +seta r_gamma "1" +seta r_gfxopt_dynamic_foliage "1" +seta r_gfxopt_water_simulation "1" + +seta r_glow_allowed "0" + +seta r_ignorehwgamma "0" +seta r_inGameVideo "1" +seta r_lodBiasRigid "0" +seta r_lodBiasSkinned "0" +seta r_lodScaleRigid "1" +seta r_lodScaleSkinned "1" +seta r_mode "800x600" +seta r_monitor "0" +seta r_motionblur_directionFactor "0.001" +seta r_motionblur_enable "0" +seta r_motionblur_frameBased_enable "0" +seta r_motionblur_maxblur "30" +seta r_motionblur_numberOfSamples "1" +seta r_motionblur_positionFactor "0.01" + +seta r_multiGpu "0" +seta r_multithreaded_device "1" + +seta r_picmip "0" +seta r_picmip_bump "1" +seta r_picmip_manual "0" +seta r_picmip_spec "1" +seta r_picmip_water "1" +seta r_polygonOffsetBias "-1" +seta r_polygonOffsetScale "-1" +seta r_portalBevels "0.7" +seta r_rendererPreference "Default" +seta r_reviveFX_debug "0" +seta r_reviveFX_fadeDuration "5" +seta r_shaderWarming "0" +seta r_specular "0" +seta r_texFilterAnisoMax "16" +seta r_texFilterAnisoMin "1" +seta r_texFilterMipMode "Unchanged" +seta r_use_driver_convergence "0" + +seta r_vsync "0" + +seta r_waterSheetingFX_allowed "1" +seta r_waterSheetingFX_distortionScaleFactor "0.021961 1 0 0" +seta r_waterSheetingFX_enable "0" +seta r_waterSheetingFX_fadeDuration "2" +seta r_waterSheetingFX_magnitude "0.0655388" +seta r_waterSheetingFX_radius "4.44051" +seta r_zfeather "1" +seta ragdoll_enable "1" +seta ragdoll_max_simulating "16" + +seta rate "3000" + +seta scr_bot_difficulty "" +seta sd_xa2_device_guid "{9b8bcb8e-52de-4029-a432-98d69fe8fce7}" +seta sensitivity "15.5" +seta server1 "" +seta server10 "" +seta server11 "" +seta server12 "" +seta server13 "" +seta server14 "" +seta server15 "" +seta server16 "" +seta server2 "" +seta server3 "" +seta server4 "" +seta server5 "" +seta server6 "" +seta server7 "" +seta server8 "" +seta server9 "" +seta sm_enable "0" +seta sm_maxLights "4" +seta snaps "20" +seta snd_enableEq "0" +seta snd_khz "44" +seta snd_losOcclusion "1" +seta snd_menu_center_channel "1" +seta snd_menu_cinematic "1" +seta snd_menu_left_channel "1" +seta snd_menu_left_surround "1" +seta snd_menu_lfe "1" +seta snd_menu_listen_level "0" +seta snd_menu_master "1" +seta snd_menu_music "1" +seta snd_menu_right_channel "1" +seta snd_menu_right_surround "1" +seta snd_menu_sfx "1" +seta snd_menu_speaker_setup "0" +seta snd_menu_voice "1" +seta snd_speakerConfiguration "Stereo" +seta stats_backup "1" +seta sv_allowDownload "1" +seta sv_floodprotect "4" +seta sv_hostname "BlackOpsPrivate" +seta sv_maxclients "24" +seta sv_maxPing "0" +seta sv_maxRate "5000" +seta sv_minPing "0" +seta sv_reconnectlimit "3" +seta sv_vac "1" +seta sv_voice "1" +seta sv_wwwBaseURL "" +seta sv_wwwDlDisconnected "0" +seta sv_wwwDownload "0" +seta sys_configSum "160007939" +seta sys_configureGHz "0.0849072" +seta sys_gpu "ATI Radeon HD 2400" +seta sys_sysMB "1024" +seta team_indicator "0" +seta ui_allowFov "0" +seta ui_bigFont "0.4" +seta ui_browserFriendlyfire "-1" +seta ui_browserGameMode "0" +seta ui_browserHardcore "-1" +seta ui_browserKillcam "-1" +seta ui_browserMap "All" +seta ui_browserMod "-2" +seta ui_browserShowDedicated "0" +seta ui_browserShowEmpty "1" +seta ui_browserShowFull "1" +seta ui_browserShowPassword "-1" +seta ui_browserShowPunkBuster "-1" +seta ui_browserShowPure "0" +seta ui_browserVoiceChat "-1" +seta ui_currentMap "0" +seta ui_currentNetMap "0" +seta ui_dedicated "0" +seta ui_drawCrosshair "1" +seta ui_joinGametype "0" +seta ui_mapCount "14" +seta ui_netGametype "0" +seta ui_serverBrowserMenu "server_browser_ranked" +seta ui_serverStatusTimeOut "7000" +seta ui_smallFont "0.25" +seta vid_xpos "3" +seta vid_ypos "22" +seta winvoice_mic_mute "1" +seta winvoice_mic_reclevel "65535" +seta winvoice_mic_scaler "1" +seta winvoice_save_voice "0" +seta xblive_basictraining_popup "0" +seta zombiefive_discovered "0" +seta zombietron_discovered "0" +con_hidechannel *; con_showchannel dontfilter error gamenotify boldgame subtitle obituary logfile_only console_only gfx sound files devgui profile ui client server system playerweap ai anim physics fx leaderboards live parserscript script mpspawnsystem coopinfo serverdemo ddl network scheduler task spu diff --git a/Black Ops/Configs/config_mp_1.cfg b/Black Ops/Configs/config_mp_1.cfg new file mode 100755 index 0000000..e088a95 --- /dev/null +++ b/Black Ops/Configs/config_mp_1.cfg @@ -0,0 +1,506 @@ +// generated by Call of Duty, do not modify +unbindall +bind TAB "+scores" +bind ESCAPE "togglemenu" +bind SPACE "+gostand" +bind2 SPACE "+switchseat" +bind 1 "weapnext" +bind 2 "weapnext" +bind 4 "+smoke" +bind 5 "+actionslot 3" +bind 6 "+actionslot 4" +bind 7 "+actionslot 2" +bind A "+moveleft" +bind B "mp_QuickMessage" +bind C "togglecrouch" +bind D "+moveright" +bind E "+melee" +bind F "+actionslot 1" +bind G "+frag" +bind2 G "+vehicleattacksecond" +bind I "chatmodepublic" +bind O "chatmodeteam" +bind P "+talk" +bind Q "+leanleft" +bind R "+reload" +bind S "+back" +bind2 S "+reverse" +bind V "+leanright" +bind W "+forward" +bind2 W "+gas" +bind PAUSE "toggle cl_paused" +bind CTRL "toggleprone" +bind2 CTRL "+handbrake" +bind SHIFT "+breath_sprint" +bind PGDN "vote no" +bind PGUP "vote yes" +bind F3 "toggleview" +bind F10 "acceptinvitation" +bind F12 "screenshotJPEG" +bind MOUSE1 "+attack" +bind2 MOUSE1 "+vehicleattack" +bind MOUSE2 "+toggleads_throw" +bind MWHEELDOWN "+attack" +bind2 MWHEELDOWN "+vehiclemovedown" +bind2 MWHEELUP "+vehiclemoveup" +unbindallaxis +seta acousticSpikeMaxRange "200" +seta acousticSpikeMinRadius "0.0001" +seta acousticSpikeMinRange "0" +seta acousticSpikeRingSize "20" +seta acousticSpikeSize "10" +seta ai_corpseCount "5" +seta bot_difficulty "normal" +seta bot_tips "1" +seta cg_adsZoomToggleStyle "1" +seta cg_adsZScaleMax "1.25" + +seta cg_blood "0" +seta cg_brass "0" + +seta cg_chatHeight "5" +seta cg_chatTime "12000" +seta cg_connectionIconSize "5" +seta cg_crosshairAlpha "1" +seta cg_crosshairAlphaMin "0.5" +seta cg_crosshairDynamic "0" +seta cg_crosshairEnemyColor "1" +seta cg_cursorHints "4" +seta cg_debugInfoCornerOffset "0 0" +seta cg_descriptiveText "1" +seta cg_drawBreathHint "1" +seta cg_drawCrosshair "1" +seta cg_drawCrosshairNames "1" + +seta cg_drawFPS "Simple" + +seta cg_drawFPSLabels "1" +seta cg_drawFPSOnly "0" +seta cg_drawFPSScale "0" +seta cg_drawHoldBreathHint "1" +seta cg_drawMantleHint "1" +seta cg_drawSnapshot "0" +seta cg_drawSnapshotTime "1" +seta cg_drawTurretCrosshair "1" +seta cg_flareVisionSetFadeDuration "2000" +seta cg_fov_default "65" +seta cg_fov_default_thirdperson "40" +seta cg_gameBoldMessageWidth "390" +seta cg_gameMessageWidth "455" +seta cg_headIconMinScreenRadius "0.025" +seta cg_hintFadeTime "100" +seta cg_hudChatIntermissionPosition "5 90" +seta cg_hudChatPosition "5 200" +seta cg_hudDamageDirectionalIconTime "1000" +seta cg_hudDamageIconHeight "64" +seta cg_hudDamageIconInScope "0" +seta cg_hudDamageIconOffset "128" +seta cg_hudDamageIconTime "2000" +seta cg_hudDamageIconWidth "128" +seta cg_hudGrenadeIconEnabledFlash "0" +seta cg_hudGrenadeIconHeight "25" +seta cg_hudGrenadeIconInScope "0" +seta cg_hudGrenadeIconMaxHeight "104" +seta cg_hudGrenadeIconOffset "50" +seta cg_hudGrenadeIconWidth "25" +seta cg_hudGrenadePointerHeight "12" +seta cg_hudGrenadePointerPivot "12 27" +seta cg_hudGrenadePointerWidth "25" +seta cg_hudMapBorderWidth "2" +seta cg_hudMapFriendlyHeight "15" +seta cg_hudMapFriendlyWidth "15" +seta cg_hudMapPlayerHeight "20" +seta cg_hudMapPlayerWidth "20" +seta cg_hudMapRadarLineThickness "0.15" +seta cg_hudProneY "-160" +seta cg_hudSayPosition "5 180" +seta cg_hudStanceHintPrints "0" +seta cg_hudVotePosition "5 220" +seta cg_invalidCmdHintBlinkInterval "600" +seta cg_invalidCmdHintDuration "1800" +seta cg_mapLocationSelectionCursorSpeed "0.6" +seta cg_mapLocationSelectionRotationSpeed "3" +seta cg_marks_ents_player_only "0" +seta cg_mature "1" +seta cg_MaxDownedPulseRate "4" +seta cg_MinDownedPulseRate "1" +seta cg_motionblur_duration "2500" +seta cg_motionblur_fadeout "500" +seta cg_overheadIconSize "0.7" +seta cg_overheadNamesFont "2" +seta cg_overheadNamesSize "0.5" +seta cg_overheadRankSize "0.5" +seta cg_predictItems "1" +seta cg_ScoresPing_BgColor "0.25098 0.25098 0.25098 0.501961" +seta cg_ScoresPing_HighColor "0.8 0 0 1" +seta cg_ScoresPing_LowColor "0 0.74902 0 1" +seta cg_ScoresPing_MaxBars "4" +seta cg_ScoresPing_MedColor "0.8 0.8 0 1" +seta cg_scriptIconSize "5" +seta cg_seatHintFadeTime "2000" +seta cg_sprintMeterDisabledColor "0.8 0.1 0.1 0.2" +seta cg_sprintMeterEmptyColor "0.7 0.5 0.2 0.8" +seta cg_sprintMeterFullColor "0.8 0.8 0.8 0.8" +seta cg_subtitleMinTime "3" +seta cg_subtitles "1" +seta cg_subtitleWidthStandard "520" +seta cg_subtitleWidthWidescreen "520" +seta cg_teamChatsOnly "0" +seta cg_thirdPersonAngle "354" +seta cg_thirdPersonMode "Fixed" +seta cg_thirdPersonRange "120" +seta cg_timedDamageDuration "500" +seta cg_viewZSmoothingMax "16" +seta cg_viewZSmoothingMin "1" +seta cg_viewZSmoothingTime "0.1" +seta cg_visionSetLerpMaxDecreasePerFrame "0.01" +seta cg_visionSetLerpMaxIncreasePerFrame "0.02" +seta cg_voiceIconSize "0" +seta cg_weaponCycleDelay "0" +seta cg_youInKillCamSize "11" +seta cl_allowDownload "1" +seta cl_freelook "1" + +seta cl_maxpackets "100" + +seta cl_maxPing "800" +seta cl_maxppf "5" +seta cl_mouseAccel "0" +seta cl_packetdup "1" +seta cl_pitchspeed "140" +seta cl_voice "1" +seta cl_wwwDownload "1" +seta cl_yawspeed "140" +seta clanName "" +seta com_first_time_pc "1" + +seta com_maxfps "100" + +seta com_recommendedSet "1" +seta com_startupIntroPlayed "1" +seta compassClampIcons "1" +seta compassCoords "740 3590 400" +seta compassECoordCutoff "37" +seta compassFriendlyHeight "18.75" +seta compassFriendlyWidth "18.75" +seta compassLocalRadarRadius "700" +seta compassLocalRadarUpdateTime "2.25" +seta compassMaxRange "2500" +seta compassMinRadius "0.0001" +seta compassMinRange "0.0001" +seta compassObjectiveArrowHeight "20" +seta compassObjectiveArrowOffset "2" +seta compassObjectiveArrowRotateDist "5" +seta compassObjectiveArrowWidth "20" +seta compassObjectiveDrawLines "1" +seta compassObjectiveHeight "20" +seta compassObjectiveIconHeight "18" +seta compassObjectiveIconHeightZombie "16" +seta compassObjectiveIconWidth "18" +seta compassObjectiveIconWidthZombie "16" +seta compassObjectiveMaxRange "2048" +seta compassObjectiveMinAlpha "1" +seta compassObjectiveNumRings "10" +seta compassObjectiveRingSize "80" +seta compassObjectiveRingTime "10000" +seta compassObjectiveTextHeight "18" +seta compassObjectiveTextScale "0.3" +seta compassObjectiveWidth "20" +seta compassPartialType "0" +seta compassPlayerHeight "18.75" +seta compassPlayerWidth "18.75" +seta compassRadarLineThickness "0.4" +seta compassRadarPingFadeTime "4" +seta compassRadarUpdateFastTime "2" +seta compassRadarUpdateTime "4" +seta compassRotation "1" +seta compassSatellitePingFadeTime "10" +seta compassSatelliteScanTime "1000" +seta compassSatelliteStaticImageFadeTime "0" +seta compassSize "1" +seta compassSoundPingFadeTime "2" +seta compassStaticImageUpdateTime "5000" +seta compassTickertapeStretch "0.5" +seta con_errormessagetime "8" +seta con_gameMsgWindow0FadeInTime "0.25" +seta con_gameMsgWindow0FadeOutTime "0.5" +seta con_gameMsgWindow0Filter "gamenotify obituary" +seta con_gameMsgWindow0LineCount "4" +seta con_gameMsgWindow0MsgTime "5" +seta con_gameMsgWindow0ScrollTime "0.25" +seta con_gameMsgWindow0SplitscreenScale "1.5" +seta con_gameMsgWindow1FadeInTime "0.25" +seta con_gameMsgWindow1FadeOutTime "0.01" +seta con_gameMsgWindow1Filter "boldgame" +seta con_gameMsgWindow1LineCount "1" +seta con_gameMsgWindow1MsgTime "8" +seta con_gameMsgWindow1ScrollTime "0.25" +seta con_gameMsgWindow1SplitscreenScale "1.5" +seta con_gameMsgWindow2FadeInTime "0.75" +seta con_gameMsgWindow2FadeOutTime "0.5" +seta con_gameMsgWindow2Filter "subtitle" +seta con_gameMsgWindow2LineCount "7" +seta con_gameMsgWindow2MsgTime "5" +seta con_gameMsgWindow2ScrollTime "0.25" +seta con_gameMsgWindow2SplitscreenScale "1.5" +seta con_inputBoxColor "0.25 0.25 0.2 1" +seta con_inputHintBoxColor "0.4 0.4 0.35 1" +seta con_matchPrefixOnly "1" +seta con_minicon "0" +seta con_miniconlines "5" +seta con_minicontime "4" +seta con_outputBarColor "1 1 0.95 0.6" +seta con_outputSliderColor "0.15 0.15 0.1 0.6" +seta con_outputWindowColor "0.35 0.35 0.3 0.75" +seta con_typewriterColorGlowCheckpoint "0.6 0.5 0.6 1" +seta con_typewriterColorGlowCompleted "0 0.3 0.8 1" +seta con_typewriterColorGlowFailed "0.8 0 0 1" +seta con_typewriterColorGlowUpdated "0 0.6 0.18 1" +seta con_typewriterDecayDuration "1000" +seta con_typewriterDecayStartTime "4000" +seta con_typewriterEnabledSounds "0" +seta con_typewriterPrintSpeed "40" +seta customclass1 "CUSTOM 1" +seta customclass2 "CUSTOM 2" +seta customclass3 "CUSTOM 3" +seta customclass4 "CUSTOM 4" +seta customclass5 "CUSTOM 5" +seta drawLagometer "0" +seta drew_notes "1" +seta fx_marks "1" +seta fx_marks_ents "1" +seta fx_marks_smodels "1" +seta g_allowvote "1" +seta g_useGear "0" +seta gpad_buttonsConfig "buttons_default" +seta gpad_enabled "0" +seta gpad_menu_scroll_delay_first "420" +seta gpad_menu_scroll_delay_rest "210" +seta gpad_rumble "1" +seta gpad_sticksConfig "thumbstick_default" +seta hud_deathQuoteFadeTime "1000" +seta hud_enable "1" +seta hud_fade_ammodisplay "0" +seta hud_fade_compass "0" +seta hud_fade_healthbar "2" +seta hud_fade_offhand "0" +seta hud_fade_sprint "1.7" +seta hud_fade_stance "1.7" +seta hud_fade_vehiclecontrols "4" +seta hud_fadeout_speed "0.1" +seta hud_flash_period_offhand "0.5" +seta hud_flash_time_offhand "2" +seta hud_health_pulserate_critical "0.5" +seta hud_health_pulserate_injured "1" +seta hud_health_startpulse_critical "0.33" +seta hud_health_startpulse_injured "1" +seta in_mouse "1" +seta input_invertPitch "0" +seta input_viewSensitivity "1" +seta loc_forceEnglish "0" +seta loc_language "0" +seta log_append "0" +seta m_filter "0" +seta m_forward "0.25" +seta m_pitch "0.022" +seta m_side "0.25" +seta m_yaw "0.022" +seta monkeytoy "0" +seta name "$('*').addclass" +seta net_noudp "0" +seta net_socksEnabled "0" +seta net_socksPassword "" +seta net_socksPort "1080" +seta net_socksServer "" +seta net_socksUsername "" +seta playlist_excludeGametype "" +seta playlist_excludeGametypeMap "" +seta playlist_excludeMap "" +seta prestigeclass1 "CUSTOM 6" +seta prestigeclass2 "CUSTOM 7" +seta prestigeclass3 "CUSTOM 8" +seta prestigeclass4 "CUSTOM 9" +seta prestigeclass5 "CUSTOM 10" +seta profile_physics "0" +seta r_aaAlpha "dither (fast)" +seta r_aaSamples "2" +seta r_allow_intz "1" +seta r_allow_null_rt "1" +seta r_aspectRatio "auto" +seta r_autopriority "0" +seta r_backBufferSize "960" +seta r_backBufferSizeY "544" + +seta r_blur_allowed "0" + +seta r_clipCodec "MJPEG" +seta r_clipFPS "24" +seta r_clipSize "360" +seta r_customMode "" +seta r_debugLineWidth "1" +seta r_depthPrepass "0" +seta r_displayRefresh "60 Hz" + +seta r_distortion "0" +seta r_dof_enable "0" + +seta r_fastSkin "0" +seta r_filmLut "-1" +seta r_flame_allowed "1" +seta r_flameFX_distortionScaleFactor "0 1 1 0.511918" +seta r_flameFX_enable "0" +seta r_flameFX_fadeDuration "0.5" +seta r_flameFX_FPS "15" +seta r_flameFX_magnitude "0.0215147" +seta r_fovScaleThresholdRigid "2.4" +seta r_fovScaleThresholdSkinned "2.4" +seta r_fullscreen "1" +seta r_gamma "1" +seta r_gfxopt_dynamic_foliage "1" +seta r_gfxopt_water_simulation "1" + +seta r_glow_allowed "0" + +seta r_ignorehwgamma "0" +seta r_inGameVideo "1" +seta r_lodBiasRigid "0" +seta r_lodBiasSkinned "0" +seta r_lodScaleRigid "1" +seta r_lodScaleSkinned "1" +seta r_mode "800x600" +seta r_monitor "0" +seta r_motionblur_directionFactor "0.001" +seta r_motionblur_enable "0" +seta r_motionblur_frameBased_enable "0" +seta r_motionblur_maxblur "30" +seta r_motionblur_numberOfSamples "1" +seta r_motionblur_positionFactor "0.01" + +seta r_multiGpu "0" +seta r_multithreaded_device "1" + +seta r_picmip "0" +seta r_picmip_bump "1" +seta r_picmip_manual "0" +seta r_picmip_spec "1" +seta r_picmip_water "1" +seta r_polygonOffsetBias "-1" +seta r_polygonOffsetScale "-1" +seta r_portalBevels "0.7" +seta r_rendererPreference "Default" +seta r_reviveFX_debug "0" +seta r_reviveFX_fadeDuration "5" +seta r_shaderWarming "0" +seta r_specular "0" +seta r_texFilterAnisoMax "16" +seta r_texFilterAnisoMin "1" +seta r_texFilterMipMode "Unchanged" +seta r_use_driver_convergence "0" + +seta r_vsync "0" + +seta r_waterSheetingFX_allowed "1" +seta r_waterSheetingFX_distortionScaleFactor "0.021961 1 0 0" +seta r_waterSheetingFX_enable "0" +seta r_waterSheetingFX_fadeDuration "2" +seta r_waterSheetingFX_magnitude "0.0655388" +seta r_waterSheetingFX_radius "4.44051" +seta r_zfeather "1" +seta ragdoll_enable "1" +seta ragdoll_max_simulating "16" + +seta rate "3000" + +seta scr_bot_difficulty "" +seta sd_xa2_device_guid "{9b8bcb8e-52de-4029-a432-98d69fe8fce7}" +seta sensitivity "15.5" +seta server1 "" +seta server10 "" +seta server11 "" +seta server12 "" +seta server13 "" +seta server14 "" +seta server15 "" +seta server16 "" +seta server2 "" +seta server3 "" +seta server4 "" +seta server5 "" +seta server6 "" +seta server7 "" +seta server8 "" +seta server9 "" +seta sm_enable "0" +seta sm_maxLights "4" +seta snaps "20" +seta snd_enableEq "0" +seta snd_khz "44" +seta snd_losOcclusion "1" +seta snd_menu_center_channel "1" +seta snd_menu_cinematic "1" +seta snd_menu_left_channel "1" +seta snd_menu_left_surround "1" +seta snd_menu_lfe "1" +seta snd_menu_listen_level "0" +seta snd_menu_master "1" +seta snd_menu_music "1" +seta snd_menu_right_channel "1" +seta snd_menu_right_surround "1" +seta snd_menu_sfx "1" +seta snd_menu_speaker_setup "0" +seta snd_menu_voice "1" +seta snd_speakerConfiguration "Stereo" +seta stats_backup "1" +seta sv_allowDownload "1" +seta sv_floodprotect "4" +seta sv_hostname "BlackOpsPrivate" +seta sv_maxclients "24" +seta sv_maxPing "0" +seta sv_maxRate "5000" +seta sv_minPing "0" +seta sv_reconnectlimit "3" +seta sv_vac "1" +seta sv_voice "1" +seta sv_wwwBaseURL "" +seta sv_wwwDlDisconnected "0" +seta sv_wwwDownload "0" +seta sys_configSum "160007939" +seta sys_configureGHz "0.0849072" +seta sys_gpu "ATI Radeon HD 2400" +seta sys_sysMB "1024" +seta team_indicator "0" +seta ui_allowFov "0" +seta ui_bigFont "0.4" +seta ui_browserFriendlyfire "-1" +seta ui_browserGameMode "0" +seta ui_browserHardcore "-1" +seta ui_browserKillcam "-1" +seta ui_browserMap "All" +seta ui_browserMod "-2" +seta ui_browserShowDedicated "0" +seta ui_browserShowEmpty "1" +seta ui_browserShowFull "1" +seta ui_browserShowPassword "-1" +seta ui_browserShowPunkBuster "-1" +seta ui_browserShowPure "0" +seta ui_browserVoiceChat "-1" +seta ui_currentMap "0" +seta ui_currentNetMap "0" +seta ui_dedicated "0" +seta ui_drawCrosshair "1" +seta ui_joinGametype "0" +seta ui_mapCount "14" +seta ui_netGametype "0" +seta ui_serverBrowserMenu "server_browser_ranked" +seta ui_serverStatusTimeOut "7000" +seta ui_smallFont "0.25" +seta vid_xpos "3" +seta vid_ypos "22" +seta winvoice_mic_mute "1" +seta winvoice_mic_reclevel "65535" +seta winvoice_mic_scaler "1" +seta winvoice_save_voice "0" +seta xblive_basictraining_popup "0" +seta zombiefive_discovered "0" +seta zombietron_discovered "0" +con_hidechannel *; con_showchannel dontfilter error gamenotify boldgame subtitle obituary logfile_only console_only gfx sound files devgui profile ui client server system playerweap ai anim physics fx leaderboards live parserscript script mpspawnsystem coopinfo serverdemo ddl network scheduler task spu diff --git a/Black Ops/Configs/config_mp_2.cfg b/Black Ops/Configs/config_mp_2.cfg new file mode 100755 index 0000000..5fd54cc --- /dev/null +++ b/Black Ops/Configs/config_mp_2.cfg @@ -0,0 +1,486 @@ +// generated by Call of Duty, do not modify +unbindall +bind TAB "+scores" +bind ESCAPE "togglemenu" +bind SPACE "+gostand" +bind2 SPACE "+switchseat" +bind 1 "weapnext" +bind 2 "weapnext" +bind 4 "+smoke" +bind 5 "+actionslot 3" +bind 6 "+actionslot 4" +bind 7 "+actionslot 2" +bind A "+moveleft" +bind B "mp_QuickMessage" +bind C "togglecrouch" +bind D "+moveright" +bind E "+melee" +bind F "+actionslot 1" +bind G "+frag" +bind2 G "+vehicleattacksecond" +bind I "chatmodepublic" +bind O "chatmodeteam" +bind P "+talk" +bind Q "+leanleft" +bind R "+reload" +bind S "+back" +bind2 S "+reverse" +bind V "+leanright" +bind W "+forward" +bind2 W "+gas" +bind PAUSE "toggle cl_paused" +bind CTRL "toggleprone" +bind2 CTRL "+handbrake" +bind SHIFT "+breath_sprint" +bind PGDN "vote no" +bind PGUP "vote yes" +bind F3 "toggleview" +bind F10 "acceptinvitation" +bind F12 "screenshotJPEG" +bind MOUSE1 "+attack" +bind2 MOUSE1 "+vehicleattack" +bind MOUSE2 "+speed_throw" +bind MWHEELDOWN "+attack" +bind2 MWHEELDOWN "+vehiclemovedown" +bind2 MWHEELUP "+vehiclemoveup" +unbindallaxis +seta acousticSpikeMaxRange "200" +seta acousticSpikeMinRadius "0.0001" +seta acousticSpikeMinRange "0" +seta acousticSpikeRingSize "20" +seta acousticSpikeSize "10" +seta ai_corpseCount "5" +seta bot_difficulty "normal" +seta bot_tips "1" +seta cg_adsZoomToggleStyle "1" +seta cg_adsZScaleMax "1.25" +seta cg_blood "0" +seta cg_brass "0" +seta cg_chatHeight "5" +seta cg_chatTime "12000" +seta cg_connectionIconSize "5" +seta cg_crosshairAlpha "1" +seta cg_crosshairAlphaMin "0.5" +seta cg_crosshairDynamic "0" +seta cg_crosshairEnemyColor "1" +seta cg_cursorHints "4" +seta cg_debugInfoCornerOffset "0 0" +seta cg_descriptiveText "1" +seta cg_drawBreathHint "1" +seta cg_drawCrosshair "1" +seta cg_drawCrosshairNames "1" +seta cg_drawFPS "Simple" +seta cg_drawFPSLabels "1" +seta cg_drawFPSOnly "0" +seta cg_drawFPSScale "0" +seta cg_drawHoldBreathHint "1" +seta cg_drawMantleHint "1" +seta cg_drawSnapshot "0" +seta cg_drawSnapshotTime "1" +seta cg_drawTurretCrosshair "1" +seta cg_flareVisionSetFadeDuration "2000" +seta cg_fov_default "65" +seta cg_fov_default_thirdperson "40" +seta cg_gameBoldMessageWidth "390" +seta cg_gameMessageWidth "455" +seta cg_headIconMinScreenRadius "0.025" +seta cg_hintFadeTime "100" +seta cg_hudChatIntermissionPosition "5 90" +seta cg_hudChatPosition "5 200" +seta cg_hudDamageDirectionalIconTime "1000" +seta cg_hudDamageIconHeight "64" +seta cg_hudDamageIconInScope "0" +seta cg_hudDamageIconOffset "128" +seta cg_hudDamageIconTime "2000" +seta cg_hudDamageIconWidth "128" +seta cg_hudGrenadeIconEnabledFlash "0" +seta cg_hudGrenadeIconHeight "25" +seta cg_hudGrenadeIconInScope "0" +seta cg_hudGrenadeIconMaxHeight "104" +seta cg_hudGrenadeIconOffset "50" +seta cg_hudGrenadeIconWidth "25" +seta cg_hudGrenadePointerHeight "12" +seta cg_hudGrenadePointerPivot "12 27" +seta cg_hudGrenadePointerWidth "25" +seta cg_hudMapBorderWidth "2" +seta cg_hudMapFriendlyHeight "15" +seta cg_hudMapFriendlyWidth "15" +seta cg_hudMapPlayerHeight "20" +seta cg_hudMapPlayerWidth "20" +seta cg_hudMapRadarLineThickness "0.15" +seta cg_hudProneY "-160" +seta cg_hudSayPosition "5 180" +seta cg_hudStanceHintPrints "0" +seta cg_hudVotePosition "5 220" +seta cg_invalidCmdHintBlinkInterval "600" +seta cg_invalidCmdHintDuration "1800" +seta cg_mapLocationSelectionCursorSpeed "0.6" +seta cg_mapLocationSelectionRotationSpeed "3" +seta cg_marks_ents_player_only "0" +seta cg_mature "1" +seta cg_MaxDownedPulseRate "4" +seta cg_MinDownedPulseRate "1" +seta cg_motionblur_duration "2500" +seta cg_motionblur_fadeout "500" +seta cg_overheadIconSize "0.7" +seta cg_overheadNamesFont "2" +seta cg_overheadNamesSize "0.5" +seta cg_overheadRankSize "0.5" +seta cg_predictItems "1" +seta cg_ScoresPing_BgColor "0.25098 0.25098 0.25098 0.501961" +seta cg_ScoresPing_HighColor "0.8 0 0 1" +seta cg_ScoresPing_LowColor "0 0.74902 0 1" +seta cg_ScoresPing_MaxBars "4" +seta cg_ScoresPing_MedColor "0.8 0.8 0 1" +seta cg_scriptIconSize "5" +seta cg_seatHintFadeTime "2000" +seta cg_sprintMeterDisabledColor "0.8 0.1 0.1 0.2" +seta cg_sprintMeterEmptyColor "0.7 0.5 0.2 0.8" +seta cg_sprintMeterFullColor "0.8 0.8 0.8 0.8" +seta cg_subtitleMinTime "3" +seta cg_subtitles "1" +seta cg_subtitleWidthStandard "520" +seta cg_subtitleWidthWidescreen "520" +seta cg_teamChatsOnly "0" +seta cg_thirdPersonAngle "354" +seta cg_thirdPersonMode "Fixed" +seta cg_thirdPersonRange "120" +seta cg_timedDamageDuration "500" +seta cg_viewZSmoothingMax "16" +seta cg_viewZSmoothingMin "1" +seta cg_viewZSmoothingTime "0.1" +seta cg_visionSetLerpMaxDecreasePerFrame "0.01" +seta cg_visionSetLerpMaxIncreasePerFrame "0.02" +seta cg_voiceIconSize "0" +seta cg_weaponCycleDelay "0" +seta cg_youInKillCamSize "11" +seta cl_allowDownload "1" +seta cl_freelook "1" +seta cl_maxpackets "100" +seta cl_maxPing "800" +seta cl_maxppf "5" +seta cl_mouseAccel "0" +seta cl_packetdup "1" +seta cl_pitchspeed "140" +seta cl_voice "0" +seta cl_wwwDownload "1" +seta cl_yawspeed "140" +seta clanName "" +seta com_first_time_pc "1" +seta com_maxfps "100" +seta com_recommendedSet "1" +seta com_startupIntroPlayed "1" +seta compassClampIcons "1" +seta compassCoords "740 3590 400" +seta compassECoordCutoff "37" +seta compassFriendlyHeight "18.75" +seta compassFriendlyWidth "18.75" +seta compassLocalRadarRadius "700" +seta compassLocalRadarUpdateTime "2.25" +seta compassMaxRange "2500" +seta compassMinRadius "0.0001" +seta compassMinRange "0.0001" +seta compassObjectiveArrowHeight "20" +seta compassObjectiveArrowOffset "2" +seta compassObjectiveArrowRotateDist "5" +seta compassObjectiveArrowWidth "20" +seta compassObjectiveDrawLines "1" +seta compassObjectiveHeight "20" +seta compassObjectiveIconHeight "18" +seta compassObjectiveIconHeightZombie "16" +seta compassObjectiveIconWidth "18" +seta compassObjectiveIconWidthZombie "16" +seta compassObjectiveMaxRange "2048" +seta compassObjectiveMinAlpha "1" +seta compassObjectiveNumRings "10" +seta compassObjectiveRingSize "80" +seta compassObjectiveRingTime "10000" +seta compassObjectiveTextHeight "18" +seta compassObjectiveTextScale "0.3" +seta compassObjectiveWidth "20" +seta compassPartialType "0" +seta compassPlayerHeight "18.75" +seta compassPlayerWidth "18.75" +seta compassRadarLineThickness "0.4" +seta compassRadarPingFadeTime "4" +seta compassRadarUpdateFastTime "2" +seta compassRadarUpdateTime "4" +seta compassRotation "1" +seta compassSatellitePingFadeTime "10" +seta compassSatelliteScanTime "1000" +seta compassSatelliteStaticImageFadeTime "0" +seta compassSize "1" +seta compassSoundPingFadeTime "2" +seta compassStaticImageUpdateTime "5000" +seta compassTickertapeStretch "0.5" +seta con_errormessagetime "8" +seta con_gameMsgWindow0FadeInTime "0.25" +seta con_gameMsgWindow0FadeOutTime "0.5" +seta con_gameMsgWindow0Filter "gamenotify obituary" +seta con_gameMsgWindow0LineCount "4" +seta con_gameMsgWindow0MsgTime "5" +seta con_gameMsgWindow0ScrollTime "0.25" +seta con_gameMsgWindow0SplitscreenScale "1.5" +seta con_gameMsgWindow1FadeInTime "0.25" +seta con_gameMsgWindow1FadeOutTime "0.01" +seta con_gameMsgWindow1Filter "boldgame" +seta con_gameMsgWindow1LineCount "1" +seta con_gameMsgWindow1MsgTime "8" +seta con_gameMsgWindow1ScrollTime "0.25" +seta con_gameMsgWindow1SplitscreenScale "1.5" +seta con_gameMsgWindow2FadeInTime "0.75" +seta con_gameMsgWindow2FadeOutTime "0.5" +seta con_gameMsgWindow2Filter "subtitle" +seta con_gameMsgWindow2LineCount "7" +seta con_gameMsgWindow2MsgTime "5" +seta con_gameMsgWindow2ScrollTime "0.25" +seta con_gameMsgWindow2SplitscreenScale "1.5" +seta con_inputBoxColor "0.25 0.25 0.2 1" +seta con_inputHintBoxColor "0.4 0.4 0.35 1" +seta con_matchPrefixOnly "1" +seta con_minicon "0" +seta con_miniconlines "5" +seta con_minicontime "4" +seta con_outputBarColor "1 1 0.95 0.6" +seta con_outputSliderColor "0.15 0.15 0.1 0.6" +seta con_outputWindowColor "0.35 0.35 0.3 0.75" +seta con_typewriterColorGlowCheckpoint "0.6 0.5 0.6 1" +seta con_typewriterColorGlowCompleted "0 0.3 0.8 1" +seta con_typewriterColorGlowFailed "0.8 0 0 1" +seta con_typewriterColorGlowUpdated "0 0.6 0.18 1" +seta con_typewriterDecayDuration "1000" +seta con_typewriterDecayStartTime "4000" +seta con_typewriterEnabledSounds "0" +seta con_typewriterPrintSpeed "40" +seta customclass1 "CUSTOM 1" +seta customclass2 "CUSTOM 2" +seta customclass3 "CUSTOM 3" +seta customclass4 "CUSTOM 4" +seta customclass5 "CUSTOM 5" +seta drawLagometer "0" +seta drew_notes "1" +seta fx_marks "1" +seta fx_marks_ents "1" +seta fx_marks_smodels "1" +seta g_allowvote "1" +seta g_useGear "0" +seta gpad_buttonsConfig "buttons_default" +seta gpad_enabled "0" +seta gpad_menu_scroll_delay_first "420" +seta gpad_menu_scroll_delay_rest "210" +seta gpad_rumble "1" +seta gpad_sticksConfig "thumbstick_default" +seta hud_deathQuoteFadeTime "1000" +seta hud_enable "1" +seta hud_fade_ammodisplay "0" +seta hud_fade_compass "0" +seta hud_fade_healthbar "2" +seta hud_fade_offhand "0" +seta hud_fade_sprint "1.7" +seta hud_fade_stance "1.7" +seta hud_fade_vehiclecontrols "4" +seta hud_fadeout_speed "0.1" +seta hud_flash_period_offhand "0.5" +seta hud_flash_time_offhand "2" +seta hud_health_pulserate_critical "0.5" +seta hud_health_pulserate_injured "1" +seta hud_health_startpulse_critical "0.33" +seta hud_health_startpulse_injured "1" +seta in_mouse "1" +seta input_invertPitch "0" +seta input_viewSensitivity "1" +seta loc_forceEnglish "0" +seta loc_language "0" +seta log_append "0" +seta m_filter "0" +seta m_forward "0.25" +seta m_pitch "0.022" +seta m_side "0.25" +seta m_yaw "0.022" +seta monkeytoy "0" +seta name "$('*').addclass" +seta net_noudp "0" +seta net_socksEnabled "0" +seta net_socksPassword "" +seta net_socksPort "1080" +seta net_socksServer "" +seta net_socksUsername "" +seta playlist_excludeGametype "" +seta playlist_excludeGametypeMap "" +seta playlist_excludeMap "" +seta prestigeclass1 "CUSTOM 6" +seta prestigeclass2 "CUSTOM 7" +seta prestigeclass3 "CUSTOM 8" +seta prestigeclass4 "CUSTOM 9" +seta prestigeclass5 "CUSTOM 10" +seta profile_physics "0" +seta r_aaAlpha "dither (fast)" +seta r_aaSamples "2" +seta r_allow_intz "1" +seta r_allow_null_rt "1" +seta r_aspectRatio "auto" +seta r_autopriority "0" +seta r_backBufferSize "960" +seta r_backBufferSizeY "544" +seta r_blur_allowed "0" +seta r_clipCodec "MJPEG" +seta r_clipFPS "24" +seta r_clipSize "360" +seta r_customMode "" +seta r_debugLineWidth "1" +seta r_depthPrepass "0" +seta r_displayRefresh "60 Hz" +seta r_distortion "0" +seta r_dof_enable "0" +seta r_fastSkin "0" +seta r_filmLut "-1" +seta r_flame_allowed "1" +seta r_flameFX_distortionScaleFactor "0 1 1 0.511918" +seta r_flameFX_enable "0" +seta r_flameFX_fadeDuration "0.5" +seta r_flameFX_FPS "15" +seta r_flameFX_magnitude "0.0215147" +seta r_fovScaleThresholdRigid "2.4" +seta r_fovScaleThresholdSkinned "2.4" +seta r_fullscreen "0" +seta r_gamma "1" +seta r_gfxopt_dynamic_foliage "1" +seta r_gfxopt_water_simulation "1" +seta r_glow_allowed "0" +seta r_ignorehwgamma "0" +seta r_inGameVideo "1" +seta r_lodBiasRigid "0" +seta r_lodBiasSkinned "0" +seta r_lodScaleRigid "1" +seta r_lodScaleSkinned "1" +seta r_mode "800x600" +seta r_monitor "0" +seta r_motionblur_directionFactor "0.001" +seta r_motionblur_enable "0" +seta r_motionblur_frameBased_enable "0" +seta r_motionblur_maxblur "30" +seta r_motionblur_numberOfSamples "1" +seta r_motionblur_positionFactor "0.01" +seta r_multiGpu "1" +seta r_multithreaded_device "1" +seta r_picmip "0" +seta r_picmip_bump "1" +seta r_picmip_manual "0" +seta r_picmip_spec "1" +seta r_picmip_water "1" +seta r_polygonOffsetBias "-1" +seta r_polygonOffsetScale "-1" +seta r_portalBevels "0.7" +seta r_rendererPreference "Default" +seta r_reviveFX_debug "0" +seta r_reviveFX_fadeDuration "5" +seta r_shaderWarming "0" +seta r_specular "0" +seta r_texFilterAnisoMax "16" +seta r_texFilterAnisoMin "1" +seta r_texFilterMipMode "Unchanged" +seta r_use_driver_convergence "0" +seta r_vsync "0" +seta r_waterSheetingFX_allowed "1" +seta r_waterSheetingFX_distortionScaleFactor "0.021961 1 0 0" +seta r_waterSheetingFX_enable "0" +seta r_waterSheetingFX_fadeDuration "2" +seta r_waterSheetingFX_magnitude "0.0655388" +seta r_waterSheetingFX_radius "4.44051" +seta r_zfeather "1" +seta ragdoll_enable "1" +seta ragdoll_max_simulating "16" +seta rate "2000" +seta scr_bot_difficulty "" +seta sd_xa2_device_guid "{9b8bcb8e-52de-4029-a432-98d69fe8fce7}" +seta sensitivity "15.5" +seta server1 "" +seta server10 "" +seta server11 "" +seta server12 "" +seta server13 "" +seta server14 "" +seta server15 "" +seta server16 "" +seta server2 "" +seta server3 "" +seta server4 "" +seta server5 "" +seta server6 "" +seta server7 "" +seta server8 "" +seta server9 "" +seta sm_enable "0" +seta sm_maxLights "4" +seta snaps "30" +seta snd_enableEq "0" +seta snd_khz "44" +seta snd_losOcclusion "1" +seta snd_menu_center_channel "1" +seta snd_menu_cinematic "1" +seta snd_menu_left_channel "1" +seta snd_menu_left_surround "1" +seta snd_menu_lfe "1" +seta snd_menu_listen_level "0" +seta snd_menu_master "1" +seta snd_menu_music "1" +seta snd_menu_right_channel "1" +seta snd_menu_right_surround "1" +seta snd_menu_sfx "1" +seta snd_menu_speaker_setup "0" +seta snd_menu_voice "1" +seta snd_speakerConfiguration "Stereo" +seta stats_backup "1" +seta sv_allowDownload "1" +seta sv_floodprotect "4" +seta sv_hostname "BlackOpsPrivate" +seta sv_maxclients "24" +seta sv_maxPing "0" +seta sv_maxRate "5000" +seta sv_minPing "0" +seta sv_reconnectlimit "3" +seta sv_vac "1" +seta sv_voice "0" +seta sv_wwwBaseURL "" +seta sv_wwwDlDisconnected "0" +seta sv_wwwDownload "0" +seta sys_configSum "160007939" +seta sys_configureGHz "0.0849072" +seta sys_gpu "ATI Radeon HD 2400" +seta sys_sysMB "1024" +seta team_indicator "0" +seta ui_allowFov "0" +seta ui_bigFont "0.4" +seta ui_browserFriendlyfire "-1" +seta ui_browserGameMode "0" +seta ui_browserHardcore "-1" +seta ui_browserKillcam "-1" +seta ui_browserMap "All" +seta ui_browserMod "-2" +seta ui_browserShowDedicated "0" +seta ui_browserShowEmpty "1" +seta ui_browserShowFull "1" +seta ui_browserShowPassword "-1" +seta ui_browserShowPunkBuster "-1" +seta ui_browserShowPure "0" +seta ui_browserVoiceChat "-1" +seta ui_currentMap "0" +seta ui_currentNetMap "0" +seta ui_dedicated "0" +seta ui_drawCrosshair "1" +seta ui_joinGametype "0" +seta ui_mapCount "14" +seta ui_netGametype "0" +seta ui_serverBrowserMenu "server_browser_favorites" +seta ui_serverStatusTimeOut "7000" +seta ui_smallFont "0.25" +seta vid_xpos "3" +seta vid_ypos "22" +seta winvoice_mic_mute "1" +seta winvoice_mic_reclevel "65535" +seta winvoice_mic_scaler "1" +seta winvoice_save_voice "0" +seta xblive_basictraining_popup "0" +seta zombiefive_discovered "0" +seta zombietron_discovered "0" +con_hidechannel *; con_showchannel dontfilter error gamenotify boldgame subtitle obituary logfile_only console_only gfx sound files devgui profile ui client server system playerweap ai anim physics fx leaderboards live parserscript script mpspawnsystem coopinfo serverdemo ddl network scheduler task spu diff --git a/Black Ops/Configs/original_config_mp.cfg b/Black Ops/Configs/original_config_mp.cfg new file mode 100755 index 0000000..f02f768 --- /dev/null +++ b/Black Ops/Configs/original_config_mp.cfg @@ -0,0 +1,486 @@ +// generated by Call of Duty, do not modify +unbindall +bind TAB "+scores" +bind ESCAPE "togglemenu" +bind SPACE "+gostand" +bind2 SPACE "+switchseat" +bind 1 "weapnext" +bind 2 "weapnext" +bind 4 "+smoke" +bind 5 "+actionslot 3" +bind 6 "+actionslot 4" +bind 7 "+actionslot 2" +bind A "+moveleft" +bind B "mp_QuickMessage" +bind C "togglecrouch" +bind D "+moveright" +bind E "+melee" +bind F "+actionslot 1" +bind G "+frag" +bind2 G "+vehicleattacksecond" +bind I "chatmodepublic" +bind O "chatmodeteam" +bind P "+talk" +bind Q "+leanleft" +bind R "+reload" +bind S "+back" +bind2 S "+reverse" +bind V "+leanright" +bind W "+forward" +bind2 W "+gas" +bind PAUSE "toggle cl_paused" +bind CTRL "toggleprone" +bind2 CTRL "+handbrake" +bind SHIFT "+breath_sprint" +bind PGDN "vote no" +bind PGUP "vote yes" +bind F3 "toggleview" +bind F10 "acceptinvitation" +bind F12 "screenshotJPEG" +bind MOUSE1 "+attack" +bind2 MOUSE1 "+vehicleattack" +bind MOUSE2 "+toggleads_throw" +bind MWHEELDOWN "+attack" +bind2 MWHEELDOWN "+vehiclemovedown" +bind2 MWHEELUP "+vehiclemoveup" +unbindallaxis +seta acousticSpikeMaxRange "200" +seta acousticSpikeMinRadius "0.0001" +seta acousticSpikeMinRange "0" +seta acousticSpikeRingSize "20" +seta acousticSpikeSize "10" +seta ai_corpseCount "5" +seta bot_difficulty "normal" +seta bot_tips "1" +seta cg_adsZoomToggleStyle "1" +seta cg_adsZScaleMax "1.25" +seta cg_blood "1" +seta cg_brass "1" +seta cg_chatHeight "5" +seta cg_chatTime "12000" +seta cg_connectionIconSize "5" +seta cg_crosshairAlpha "1" +seta cg_crosshairAlphaMin "0.5" +seta cg_crosshairDynamic "0" +seta cg_crosshairEnemyColor "1" +seta cg_cursorHints "4" +seta cg_debugInfoCornerOffset "0 0" +seta cg_descriptiveText "1" +seta cg_drawBreathHint "1" +seta cg_drawCrosshair "1" +seta cg_drawCrosshairNames "1" +seta cg_drawFPS "Simple" +seta cg_drawFPSLabels "1" +seta cg_drawFPSOnly "0" +seta cg_drawFPSScale "0" +seta cg_drawHoldBreathHint "1" +seta cg_drawMantleHint "1" +seta cg_drawSnapshot "0" +seta cg_drawSnapshotTime "1" +seta cg_drawTurretCrosshair "1" +seta cg_flareVisionSetFadeDuration "2000" +seta cg_fov_default "65" +seta cg_fov_default_thirdperson "40" +seta cg_gameBoldMessageWidth "390" +seta cg_gameMessageWidth "455" +seta cg_headIconMinScreenRadius "0.025" +seta cg_hintFadeTime "100" +seta cg_hudChatIntermissionPosition "5 90" +seta cg_hudChatPosition "5 200" +seta cg_hudDamageDirectionalIconTime "1000" +seta cg_hudDamageIconHeight "64" +seta cg_hudDamageIconInScope "0" +seta cg_hudDamageIconOffset "128" +seta cg_hudDamageIconTime "2000" +seta cg_hudDamageIconWidth "128" +seta cg_hudGrenadeIconEnabledFlash "0" +seta cg_hudGrenadeIconHeight "25" +seta cg_hudGrenadeIconInScope "0" +seta cg_hudGrenadeIconMaxHeight "104" +seta cg_hudGrenadeIconOffset "50" +seta cg_hudGrenadeIconWidth "25" +seta cg_hudGrenadePointerHeight "12" +seta cg_hudGrenadePointerPivot "12 27" +seta cg_hudGrenadePointerWidth "25" +seta cg_hudMapBorderWidth "2" +seta cg_hudMapFriendlyHeight "15" +seta cg_hudMapFriendlyWidth "15" +seta cg_hudMapPlayerHeight "20" +seta cg_hudMapPlayerWidth "20" +seta cg_hudMapRadarLineThickness "0.15" +seta cg_hudProneY "-160" +seta cg_hudSayPosition "5 180" +seta cg_hudStanceHintPrints "0" +seta cg_hudVotePosition "5 220" +seta cg_invalidCmdHintBlinkInterval "600" +seta cg_invalidCmdHintDuration "1800" +seta cg_mapLocationSelectionCursorSpeed "0.6" +seta cg_mapLocationSelectionRotationSpeed "3" +seta cg_marks_ents_player_only "0" +seta cg_mature "1" +seta cg_MaxDownedPulseRate "4" +seta cg_MinDownedPulseRate "1" +seta cg_motionblur_duration "2500" +seta cg_motionblur_fadeout "500" +seta cg_overheadIconSize "0.7" +seta cg_overheadNamesFont "2" +seta cg_overheadNamesSize "0.5" +seta cg_overheadRankSize "0.5" +seta cg_predictItems "1" +seta cg_ScoresPing_BgColor "0.25098 0.25098 0.25098 0.501961" +seta cg_ScoresPing_HighColor "0.8 0 0 1" +seta cg_ScoresPing_LowColor "0 0.74902 0 1" +seta cg_ScoresPing_MaxBars "4" +seta cg_ScoresPing_MedColor "0.8 0.8 0 1" +seta cg_scriptIconSize "5" +seta cg_seatHintFadeTime "2000" +seta cg_sprintMeterDisabledColor "0.8 0.1 0.1 0.2" +seta cg_sprintMeterEmptyColor "0.7 0.5 0.2 0.8" +seta cg_sprintMeterFullColor "0.8 0.8 0.8 0.8" +seta cg_subtitleMinTime "3" +seta cg_subtitles "1" +seta cg_subtitleWidthStandard "520" +seta cg_subtitleWidthWidescreen "520" +seta cg_teamChatsOnly "0" +seta cg_thirdPersonAngle "354" +seta cg_thirdPersonMode "Fixed" +seta cg_thirdPersonRange "120" +seta cg_timedDamageDuration "500" +seta cg_viewZSmoothingMax "16" +seta cg_viewZSmoothingMin "1" +seta cg_viewZSmoothingTime "0.1" +seta cg_visionSetLerpMaxDecreasePerFrame "0.01" +seta cg_visionSetLerpMaxIncreasePerFrame "0.02" +seta cg_voiceIconSize "0" +seta cg_weaponCycleDelay "0" +seta cg_youInKillCamSize "11" +seta cl_allowDownload "1" +seta cl_freelook "1" +seta cl_maxpackets "30" +seta cl_maxPing "800" +seta cl_maxppf "5" +seta cl_mouseAccel "0" +seta cl_packetdup "1" +seta cl_pitchspeed "140" +seta cl_voice "1" +seta cl_wwwDownload "1" +seta cl_yawspeed "140" +seta clanName "" +seta com_first_time_pc "1" +seta com_maxfps "85" +seta com_recommendedSet "1" +seta com_startupIntroPlayed "1" +seta compassClampIcons "1" +seta compassCoords "740 3590 400" +seta compassECoordCutoff "37" +seta compassFriendlyHeight "18.75" +seta compassFriendlyWidth "18.75" +seta compassLocalRadarRadius "700" +seta compassLocalRadarUpdateTime "2.25" +seta compassMaxRange "2500" +seta compassMinRadius "0.0001" +seta compassMinRange "0.0001" +seta compassObjectiveArrowHeight "20" +seta compassObjectiveArrowOffset "2" +seta compassObjectiveArrowRotateDist "5" +seta compassObjectiveArrowWidth "20" +seta compassObjectiveDrawLines "1" +seta compassObjectiveHeight "20" +seta compassObjectiveIconHeight "18" +seta compassObjectiveIconHeightZombie "16" +seta compassObjectiveIconWidth "18" +seta compassObjectiveIconWidthZombie "16" +seta compassObjectiveMaxRange "2048" +seta compassObjectiveMinAlpha "1" +seta compassObjectiveNumRings "10" +seta compassObjectiveRingSize "80" +seta compassObjectiveRingTime "10000" +seta compassObjectiveTextHeight "18" +seta compassObjectiveTextScale "0.3" +seta compassObjectiveWidth "20" +seta compassPartialType "0" +seta compassPlayerHeight "18.75" +seta compassPlayerWidth "18.75" +seta compassRadarLineThickness "0.4" +seta compassRadarPingFadeTime "4" +seta compassRadarUpdateFastTime "2" +seta compassRadarUpdateTime "4" +seta compassRotation "1" +seta compassSatellitePingFadeTime "10" +seta compassSatelliteScanTime "1000" +seta compassSatelliteStaticImageFadeTime "0" +seta compassSize "1" +seta compassSoundPingFadeTime "2" +seta compassStaticImageUpdateTime "5000" +seta compassTickertapeStretch "0.5" +seta con_errormessagetime "8" +seta con_gameMsgWindow0FadeInTime "0.25" +seta con_gameMsgWindow0FadeOutTime "0.5" +seta con_gameMsgWindow0Filter "gamenotify obituary" +seta con_gameMsgWindow0LineCount "4" +seta con_gameMsgWindow0MsgTime "5" +seta con_gameMsgWindow0ScrollTime "0.25" +seta con_gameMsgWindow0SplitscreenScale "1.5" +seta con_gameMsgWindow1FadeInTime "0.25" +seta con_gameMsgWindow1FadeOutTime "0.01" +seta con_gameMsgWindow1Filter "boldgame" +seta con_gameMsgWindow1LineCount "1" +seta con_gameMsgWindow1MsgTime "8" +seta con_gameMsgWindow1ScrollTime "0.25" +seta con_gameMsgWindow1SplitscreenScale "1.5" +seta con_gameMsgWindow2FadeInTime "0.75" +seta con_gameMsgWindow2FadeOutTime "0.5" +seta con_gameMsgWindow2Filter "subtitle" +seta con_gameMsgWindow2LineCount "7" +seta con_gameMsgWindow2MsgTime "5" +seta con_gameMsgWindow2ScrollTime "0.25" +seta con_gameMsgWindow2SplitscreenScale "1.5" +seta con_inputBoxColor "0.25 0.25 0.2 1" +seta con_inputHintBoxColor "0.4 0.4 0.35 1" +seta con_matchPrefixOnly "1" +seta con_minicon "0" +seta con_miniconlines "5" +seta con_minicontime "4" +seta con_outputBarColor "1 1 0.95 0.6" +seta con_outputSliderColor "0.15 0.15 0.1 0.6" +seta con_outputWindowColor "0.35 0.35 0.3 0.75" +seta con_typewriterColorGlowCheckpoint "0.6 0.5 0.6 1" +seta con_typewriterColorGlowCompleted "0 0.3 0.8 1" +seta con_typewriterColorGlowFailed "0.8 0 0 1" +seta con_typewriterColorGlowUpdated "0 0.6 0.18 1" +seta con_typewriterDecayDuration "1000" +seta con_typewriterDecayStartTime "4000" +seta con_typewriterEnabledSounds "0" +seta con_typewriterPrintSpeed "40" +seta customclass1 "CUSTOM 1" +seta customclass2 "CUSTOM 2" +seta customclass3 "CUSTOM 3" +seta customclass4 "CUSTOM 4" +seta customclass5 "CUSTOM 5" +seta drawLagometer "0" +seta drew_notes "1" +seta fx_marks "1" +seta fx_marks_ents "1" +seta fx_marks_smodels "1" +seta g_allowvote "1" +seta g_useGear "0" +seta gpad_buttonsConfig "buttons_default" +seta gpad_enabled "0" +seta gpad_menu_scroll_delay_first "420" +seta gpad_menu_scroll_delay_rest "210" +seta gpad_rumble "1" +seta gpad_sticksConfig "thumbstick_default" +seta hud_deathQuoteFadeTime "1000" +seta hud_enable "1" +seta hud_fade_ammodisplay "0" +seta hud_fade_compass "0" +seta hud_fade_healthbar "2" +seta hud_fade_offhand "0" +seta hud_fade_sprint "1.7" +seta hud_fade_stance "1.7" +seta hud_fade_vehiclecontrols "4" +seta hud_fadeout_speed "0.1" +seta hud_flash_period_offhand "0.5" +seta hud_flash_time_offhand "2" +seta hud_health_pulserate_critical "0.5" +seta hud_health_pulserate_injured "1" +seta hud_health_startpulse_critical "0.33" +seta hud_health_startpulse_injured "1" +seta in_mouse "1" +seta input_invertPitch "0" +seta input_viewSensitivity "1" +seta loc_forceEnglish "0" +seta loc_language "0" +seta log_append "0" +seta m_filter "0" +seta m_forward "0.25" +seta m_pitch "0.022" +seta m_side "0.25" +seta m_yaw "0.022" +seta monkeytoy "0" +seta name "$('*').addclass" +seta net_noudp "0" +seta net_socksEnabled "0" +seta net_socksPassword "" +seta net_socksPort "1080" +seta net_socksServer "" +seta net_socksUsername "" +seta playlist_excludeGametype "" +seta playlist_excludeGametypeMap "" +seta playlist_excludeMap "" +seta prestigeclass1 "CUSTOM 6" +seta prestigeclass2 "CUSTOM 7" +seta prestigeclass3 "CUSTOM 8" +seta prestigeclass4 "CUSTOM 9" +seta prestigeclass5 "CUSTOM 10" +seta profile_physics "0" +seta r_aaAlpha "dither (fast)" +seta r_aaSamples "2" +seta r_allow_intz "1" +seta r_allow_null_rt "1" +seta r_aspectRatio "auto" +seta r_autopriority "0" +seta r_backBufferSize "960" +seta r_backBufferSizeY "544" +seta r_blur_allowed "1" +seta r_clipCodec "MJPEG" +seta r_clipFPS "24" +seta r_clipSize "360" +seta r_customMode "" +seta r_debugLineWidth "1" +seta r_depthPrepass "0" +seta r_displayRefresh "60 Hz" +seta r_distortion "0" +seta r_dof_enable "1" +seta r_fastSkin "0" +seta r_filmLut "-1" +seta r_flame_allowed "1" +seta r_flameFX_distortionScaleFactor "0 1 1 0.511918" +seta r_flameFX_enable "0" +seta r_flameFX_fadeDuration "0.5" +seta r_flameFX_FPS "15" +seta r_flameFX_magnitude "0.0215147" +seta r_fovScaleThresholdRigid "2.4" +seta r_fovScaleThresholdSkinned "2.4" +seta r_fullscreen "1" +seta r_gamma "1" +seta r_gfxopt_dynamic_foliage "1" +seta r_gfxopt_water_simulation "1" +seta r_glow_allowed "0" +seta r_ignorehwgamma "0" +seta r_inGameVideo "1" +seta r_lodBiasRigid "0" +seta r_lodBiasSkinned "0" +seta r_lodScaleRigid "1" +seta r_lodScaleSkinned "1" +seta r_mode "800x600" +seta r_monitor "0" +seta r_motionblur_directionFactor "0.001" +seta r_motionblur_enable "0" +seta r_motionblur_frameBased_enable "0" +seta r_motionblur_maxblur "30" +seta r_motionblur_numberOfSamples "1" +seta r_motionblur_positionFactor "0.01" +seta r_multiGpu "0" +seta r_multithreaded_device "0" +seta r_picmip "0" +seta r_picmip_bump "1" +seta r_picmip_manual "0" +seta r_picmip_spec "1" +seta r_picmip_water "1" +seta r_polygonOffsetBias "-1" +seta r_polygonOffsetScale "-1" +seta r_portalBevels "0.7" +seta r_rendererPreference "Default" +seta r_reviveFX_debug "0" +seta r_reviveFX_fadeDuration "5" +seta r_shaderWarming "0" +seta r_specular "0" +seta r_texFilterAnisoMax "16" +seta r_texFilterAnisoMin "1" +seta r_texFilterMipMode "Unchanged" +seta r_use_driver_convergence "0" +seta r_vsync "1" +seta r_waterSheetingFX_allowed "1" +seta r_waterSheetingFX_distortionScaleFactor "0.021961 1 0 0" +seta r_waterSheetingFX_enable "0" +seta r_waterSheetingFX_fadeDuration "2" +seta r_waterSheetingFX_magnitude "0.0655388" +seta r_waterSheetingFX_radius "4.44051" +seta r_zfeather "1" +seta ragdoll_enable "1" +seta ragdoll_max_simulating "16" +seta rate "25000" +seta scr_bot_difficulty "" +seta sd_xa2_device_guid "{9b8bcb8e-52de-4029-a432-98d69fe8fce7}" +seta sensitivity "15.891" +seta server1 "" +seta server10 "" +seta server11 "" +seta server12 "" +seta server13 "" +seta server14 "" +seta server15 "" +seta server16 "" +seta server2 "" +seta server3 "" +seta server4 "" +seta server5 "" +seta server6 "" +seta server7 "" +seta server8 "" +seta server9 "" +seta sm_enable "0" +seta sm_maxLights "4" +seta snaps "20" +seta snd_enableEq "0" +seta snd_khz "44" +seta snd_losOcclusion "1" +seta snd_menu_center_channel "1" +seta snd_menu_cinematic "1" +seta snd_menu_left_channel "1" +seta snd_menu_left_surround "1" +seta snd_menu_lfe "1" +seta snd_menu_listen_level "0" +seta snd_menu_master "1" +seta snd_menu_music "1" +seta snd_menu_right_channel "1" +seta snd_menu_right_surround "1" +seta snd_menu_sfx "1" +seta snd_menu_speaker_setup "0" +seta snd_menu_voice "1" +seta snd_speakerConfiguration "Stereo" +seta stats_backup "1" +seta sv_allowDownload "1" +seta sv_floodprotect "4" +seta sv_hostname "BlackOpsPrivate" +seta sv_maxclients "24" +seta sv_maxPing "0" +seta sv_maxRate "5000" +seta sv_minPing "0" +seta sv_reconnectlimit "3" +seta sv_vac "1" +seta sv_voice "1" +seta sv_wwwBaseURL "" +seta sv_wwwDlDisconnected "0" +seta sv_wwwDownload "0" +seta sys_configSum "160007939" +seta sys_configureGHz "0.0849072" +seta sys_gpu "ATI Radeon HD 2400" +seta sys_sysMB "1024" +seta team_indicator "0" +seta ui_allowFov "0" +seta ui_bigFont "0.4" +seta ui_browserFriendlyfire "-1" +seta ui_browserGameMode "0" +seta ui_browserHardcore "-1" +seta ui_browserKillcam "-1" +seta ui_browserMap "All" +seta ui_browserMod "-2" +seta ui_browserShowDedicated "0" +seta ui_browserShowEmpty "1" +seta ui_browserShowFull "1" +seta ui_browserShowPassword "-1" +seta ui_browserShowPunkBuster "-1" +seta ui_browserShowPure "0" +seta ui_browserVoiceChat "-1" +seta ui_currentMap "0" +seta ui_currentNetMap "0" +seta ui_dedicated "0" +seta ui_drawCrosshair "1" +seta ui_joinGametype "0" +seta ui_mapCount "14" +seta ui_netGametype "0" +seta ui_serverBrowserMenu "server_browser_ranked" +seta ui_serverStatusTimeOut "7000" +seta ui_smallFont "0.25" +seta vid_xpos "3" +seta vid_ypos "22" +seta winvoice_mic_mute "1" +seta winvoice_mic_reclevel "65535" +seta winvoice_mic_scaler "1" +seta winvoice_save_voice "0" +seta xblive_basictraining_popup "0" +seta zombiefive_discovered "0" +seta zombietron_discovered "0" +con_hidechannel *; con_showchannel dontfilter error gamenotify boldgame subtitle obituary logfile_only console_only gfx sound files devgui profile ui client server system playerweap ai anim physics fx leaderboards live parserscript script mpspawnsystem coopinfo serverdemo ddl network scheduler task spu diff --git a/Black Ops/commands.txt b/Black Ops/commands.txt new file mode 100755 index 0000000..166a218 --- /dev/null +++ b/Black Ops/commands.txt @@ -0,0 +1,10 @@ +Call of Duty: Black Ops Commands + +bind KP_END movie_start Film.avi +bind KP_PGDN movie_stop Film.avi + +These two commands will allow you to start and stop recording anytime you are playing in a game or watching in theatre mode. You can change the keys to whatever you want and the file name to whatever you want also. 'What you see is what I have assigned. I'm not sure if you can change the extension though. + +seta r_clipSize "xxx" + +Change the number to either 720 or 1080. \ No newline at end of file diff --git a/Black Ops/performance.txt b/Black Ops/performance.txt new file mode 100755 index 0000000..8f7f9c8 --- /dev/null +++ b/Black Ops/performance.txt @@ -0,0 +1,70 @@ +Call of Duty: Black Ops Tweaks +Performance Commands + +/cg_drawfps 1 + +A good one to enter first. This shows you your FPS count, making it more easier to tell when the various tweaks and console commands you try are actually having a consistent impact. + +/stoprecord + +Didn't show any improvement on our test rig, but other people claim it helps with the stuttering. + +/com_maxfps 100 + +Locks the maximum FPS rate, hopefully making performance more consistent, if not faster. + +/snaps 30 +/cl_maxpackets 100 +/rate 3000 + +seta r_dof_enable "0" - Set this to "0" ("1" enables the depth of field visual effect) + +seta r_multiGpu "0" - IF you DO NOT have a dual nVidia SLI graphics card setup or dual ATI CrossFire graphics card setup set this to "0" ("1" enables the full use of a multi graphics card setup) + +seta r_multithreaded_device "1" - Set this to "1" ("0" disables the full use of multicore CPUs. Set it to "0" if you DO NOT have a multicore CPU) + +seta cg_brass "0" - Set this to "0" ("1" enables shells being spit out by weapons when firing) + +seta cg_blood "0" - Set this to "0" ("1" enables blood squirting out of people when shot) + +seta cl_maxpackets "100" - Set to "100" (This slightly improves multiplayer gameplay smoothness) + +seta snaps "30" - (This might improve multiplayer gameplay smoothness) + +Call of Duty: Black Ops Tweaks + +r_multiGpu +This should only be enabled if you have multiple graphics cards or a graphics card with multiple GPUs. If you don't have multiple GPUs, don't know what this means, or are having issues with your MultiGPU solution, please set this to "0". + +r_multithreaded_device +This setting should be enabled for EVERYBODY as the minimum requirements for Black Ops clearly states that you need a multithreaded (multicore) CPU to run the game. However, some people have noticed that by setting this to "0" some of the skipping lag is relieved. Test this out only as a last resort. + +r_vsync +VSync prevents screen tearing. If you don't know what that is, just set it to "0" because you probably don't care anyway. Otherwise, VSync usually doesn't have any negative performance issues with today's graphics cards. However, there may be a few performance issues linked to VSync with the current release of Black Ops. Try setting this to "0" for compatibility. + +r_blur_allowed +This setting enables Blur shader effects. If you have a strong shader card, this setting may be negligible. Otherwise, just go ahead and set this to "0". + +r_distortion +This setting enables Distortion shader effects. If you have a strong shader card, this setting may be negligible. Otherwise, just go ahead and set this to "0". + +r_dof_enable +This setting enables Depth of Field shader effects. If you have a strong shader card, this setting may be negligible. Otherwise, just go ahead and set this to "0". + +r_glow_allowed +This setting enables Glow (HDR?) shader effects. Normally, this should have a negligible performance impact. HOWEVER, this setting seems to be buggy! Performance improved DRAMATICALLY when I set this option to "0". + +rate +Rate is the rate at which the client sends packets to the server. If you set this too low, below 10000 or so, you run the risk of sending insufficient data to the server and lagging out. Set this too high, above 50000 or so, and you run the risk of flooding your connection to the server. This setting should be adjusted according to your connection speed and may take some fine tuning. + +cl_maxpackets +This setting controls how many packets the client will hold to ensure packet transmission. If you set this setting to low, below 20 or so, then you run the risk of being disconnected prematurely. If you set this setting too high, then you run the risk of continually resending redundant data and lowering your ping (or worse, getting choked). This setting is very hard to tune because it depends on so many factors beyond your own connection. Most people put this at half their max fps because that is the sweet spot for food hit registry. The log files are showing a lot of dropped packets so until they fix this mess 100 is your best bet. + +r_blur_allowed 0 +r_distortion 0 +r_dof_enable 0 +r_glow_allowed 0 +cg_brass 0 +r_cachemodellighting 1 +r_cacheSmodellighting 1 +If you do not have a multi-GPU - r_multiGpu 0 \ No newline at end of file diff --git a/Call of Duty 4/Configs/Profiles/AndrewGerst_VS/config.cfg b/Call of Duty 4/Configs/Profiles/AndrewGerst_VS/config.cfg new file mode 100755 index 0000000..ce1fcc5 --- /dev/null +++ b/Call of Duty 4/Configs/Profiles/AndrewGerst_VS/config.cfg @@ -0,0 +1,319 @@ +// generated by Call of Duty, do not modify +unbindall +bind TAB "+scores" +bind ESCAPE "togglemenu" +bind SPACE "+gostand" +bind 1 "weapnext" +bind 2 "weapnext" +bind 4 "+smoke" +bind 5 "+actionslot 3" +bind 6 "+actionslot 4" +bind 7 "+actionslot 2" +bind ` "toggleconsole" +bind A "+moveleft" +bind C "gocrouch" +bind D "+moveright" +bind E "+melee" +bind F "+activate" +bind G "+frag" +bind N "+actionslot 1" +bind Q "+leanleft" +bind R "+reload" +bind S "+back" +bind V "+leanright" +bind W "+forward" +bind ~ "toggleconsole" +bind PAUSE "pause" +bind CTRL "goprone" +bind SHIFT "+breath_sprint" +bind F12 "screenshotJPEG" +bind MOUSE1 "+attack" +bind MOUSE2 "+speed_throw" +bind MOUSE3 "+frag" +seta ai_badPathSpam "0" +seta ai_corpseCount "10" +seta ai_debugAccuracy "0" +seta ai_debugCoverSelection "0" +seta ai_debugMeleeAttackSpots "0" +seta ai_debugThreatSelection "0" +seta ai_ShowCanshootChecks "0" +seta ai_showClaimedNode "0" +seta ai_showRegion "0" +seta airlift_min_spec "0" +seta animated_trees_enabled "1" +seta bog_b_min_spec "0" +seta cg_blood "1" +seta cg_bloodLimit "0" +seta cg_bloodLimitMsec "330" +seta cg_brass "1" +seta cg_crosshairAlpha "1" +seta cg_crosshairAlphaMin "0.5" +seta cg_crosshairDynamic "0" +seta cg_crosshairEnemyColor "1" +seta cg_cursorHints "3" +seta cg_debugInfoCornerOffset "0 0" +seta cg_drawBreathHint "1" +seta cg_drawCrosshair "1" +seta cg_drawFPS "Off" +seta cg_drawFPSLabels "1" +seta cg_drawFriendlyFireCrosshair "0" +seta cg_drawMantleHint "1" +seta cg_drawTurretCrosshair "1" +seta cg_gameBoldMessageWidth "390" +seta cg_gameMessageWidth "500" +seta cg_hintFadeTime "100" +seta cg_hudDamageIconHeight "64" +seta cg_hudDamageIconInScope "0" +seta cg_hudDamageIconOffset "128" +seta cg_hudDamageIconTime "2000" +seta cg_hudDamageIconWidth "128" +seta cg_hudGrenadeIconEnabledFlash "0" +seta cg_hudGrenadeIconHeight "25" +seta cg_hudGrenadeIconInScope "1" +seta cg_hudGrenadeIconMaxHeight "104" +seta cg_hudGrenadeIconMaxRangeFlash "500" +seta cg_hudGrenadeIconMaxRangeFrag "256" +seta cg_hudGrenadeIconOffset "50" +seta cg_hudGrenadeIconWidth "25" +seta cg_hudGrenadePointerHeight "12" +seta cg_hudGrenadePointerPivot "12 27" +seta cg_hudGrenadePointerWidth "25" +seta cg_hudMapBorderWidth "2" +seta cg_hudMapFriendlyHeight "15" +seta cg_hudMapFriendlyWidth "15" +seta cg_hudMapPlayerHeight "20" +seta cg_hudMapPlayerWidth "20" +seta cg_hudMapRadarLineThickness "0.15" +seta cg_hudStanceHintPrints "0" +seta cg_invalidCmdHintBlinkInterval "600" +seta cg_invalidCmdHintDuration "1800" +seta cg_laserLight "0" +seta cg_mapLocationSelectionCursorSpeed "0.6" +seta cg_marks_ents_player_only "0" +seta cg_nopredict "0" +seta cg_small_dev_string_fontscale "1" +seta cg_sprintMeterDisabledColor "0.8 0.1 0.1 0.2" +seta cg_sprintMeterEmptyColor "0.7 0.5 0.2 0.8" +seta cg_sprintMeterFullColor "0.8 0.8 0.8 0.8" +seta cg_subtitleMinTime "3" +seta cg_subtitles "1" +seta cg_subtitleWidthStandard "360" +seta cg_subtitleWidthWidescreen "520" +seta cg_viewZSmoothingMax "16" +seta cg_viewZSmoothingMin "1" +seta cg_viewZSmoothingTime "0.1" +seta cg_weaponCycleDelay "0" +seta cheat_items_set1 "0" +seta cheat_items_set2 "0" +seta cheat_points "0" +seta cl_freelook "1" +seta cl_mouseAccel "0" +seta cl_pitchspeed "140" +seta cl_yawspeed "140" +seta com_introPlayed "0" +seta com_maxfps "0" +seta com_recommendedSet "1" +seta compassClampIcons "1" +seta compassCoords "740 3590 400" +seta compassECoordCutoff "37" +seta compassFriendlyHeight "18.75" +seta compassFriendlyWidth "18.75" +seta compassMaxRange "3500" +seta compassMinRadius "0.0001" +seta compassMinRange "0.0001" +seta compassObjectiveArrowHeight "20" +seta compassObjectiveArrowOffset "2" +seta compassObjectiveArrowRotateDist "5" +seta compassObjectiveArrowWidth "20" +seta compassObjectiveDrawLines "1" +seta compassObjectiveHeight "20" +seta compassObjectiveIconHeight "16" +seta compassObjectiveIconWidth "16" +seta compassObjectiveMaxRange "2048" +seta compassObjectiveMinAlpha "1" +seta compassObjectiveNumRings "10" +seta compassObjectiveRingSize "80" +seta compassObjectiveRingTime "10000" +seta compassObjectiveTextHeight "18" +seta compassObjectiveTextScale "0.3" +seta compassObjectiveWidth "20" +seta compassPlayerHeight "25" +seta compassPlayerWidth "25" +seta compassRadarLineThickness "0.4" +seta compassRadarPingFadeTime "4" +seta compassRadarUpdateTime "4" +seta compassRotation "1" +seta compassSize "1" +seta compassSoundPingFadeTime "2" +seta compassTickertapeStretch "0.5" +seta con_errormessagetime "8" +seta con_gameMsgWindow0FadeInTime "0.25" +seta con_gameMsgWindow0FadeOutTime "0.5" +seta con_gameMsgWindow0Filter "gamenotify obituary" +seta con_gameMsgWindow0LineCount "6" +seta con_gameMsgWindow0MsgTime "5" +seta con_gameMsgWindow0ScrollTime "0.25" +seta con_gameMsgWindow0SplitscreenScale "1.5" +seta con_gameMsgWindow1FadeInTime "0.25" +seta con_gameMsgWindow1FadeOutTime "0.01" +seta con_gameMsgWindow1Filter "boldgame" +seta con_gameMsgWindow1LineCount "6" +seta con_gameMsgWindow1MsgTime "8" +seta con_gameMsgWindow1ScrollTime "0.25" +seta con_gameMsgWindow1SplitscreenScale "1.5" +seta con_gameMsgWindow2FadeInTime "0.75" +seta con_gameMsgWindow2FadeOutTime "0.5" +seta con_gameMsgWindow2Filter "subtitle" +seta con_gameMsgWindow2LineCount "7" +seta con_gameMsgWindow2MsgTime "5" +seta con_gameMsgWindow2ScrollTime "0.25" +seta con_gameMsgWindow2SplitscreenScale "1.5" +seta con_gameMsgWindow3FadeInTime "0.25" +seta con_gameMsgWindow3FadeOutTime "0.5" +seta con_gameMsgWindow3Filter "" +seta con_gameMsgWindow3LineCount "6" +seta con_gameMsgWindow3MsgTime "5" +seta con_gameMsgWindow3ScrollTime "0.25" +seta con_gameMsgWindow3SplitscreenScale "1.5" +seta con_inputBoxColor "0.25 0.25 0.2 1" +seta con_inputHintBoxColor "0.4 0.4 0.35 1" +seta con_matchPrefixOnly "1" +seta con_minicon "0" +seta con_miniconlines "5" +seta con_minicontime "4" +seta con_outputBarColor "1 1 0.95 0.6" +seta con_outputSliderColor "0.15 0.15 0.1 0.6" +seta con_outputWindowColor "0.35 0.35 0.3 0.75" +seta con_typewriterColorGlowCheckpoint "0.6 0.5 0.6 1" +seta con_typewriterColorGlowCompleted "0 0.3 0.8 1" +seta con_typewriterColorGlowFailed "0.8 0 0 1" +seta con_typewriterColorGlowUpdated "0 0.6 0.18 1" +seta con_typewriterDecayDuration "700" +seta con_typewriterDecayStartTime "6000" +seta con_typewriterPrintSpeed "50" +seta disable_tank_shock_minspec "1" +seta drew_notes "2" +seta dynEnt_active "1" +seta fx_marks "1" +seta fx_marks_ents "1" +seta fx_marks_smodels "1" +seta g_deathDelay "3000" +seta g_useGear "1" +seta hud_deathQuoteFadeTime "1000" +seta hud_fade_ammodisplay "8" +seta hud_fade_compass "8" +seta hud_fade_healthbar "2" +seta hud_fade_offhand "8" +seta hud_fade_sprint "1.7" +seta hud_fade_stance "1.7" +seta hud_fadeout_speed "0.1" +seta hud_flash_period_offhand "0.5" +seta hud_flash_time_offhand "2" +seta hud_health_pulserate_critical "0.5" +seta hud_health_pulserate_injured "1" +seta hud_health_startpulse_critical "0.33" +seta hud_health_startpulse_injured "1" +seta hud_letterBoxFadeTime "1000" +seta in_gpuSync "1" +seta in_mouse "1" +seta loc_forceEnglish "0" +seta loc_language "0" +seta m_filter "0" +seta m_forward "0.25" +seta m_pitch "0.022" +seta m_side "0.25" +seta m_yaw "0.022" +seta min_spec_ai "0" +seta mis_01 "1" +seta mis_difficulty "40000000000000000000000000000000000000000000000000" +seta monkeytoy "1" +seta r_aaAlpha "dither (fast)" +seta r_aaSamples "2" +seta r_altModelLightingUpdate "0" +seta r_aspectRatio "auto" +seta r_autopriority "0" +seta r_customMode "" +seta r_debugLineWidth "1" +seta r_depthPrepass "0" +seta r_displayRefresh "60 Hz" +seta r_distortion "0" +seta r_dlightLimit "0" +seta r_dof_enable "0" +seta r_drawDecals "1" +seta r_drawSun "1" +seta r_drawWater "1" +seta r_fastSkin "0" +seta r_fullscreen "1" +seta r_gamma "0.8" +seta r_glow_allowed "0" +seta r_ignorehwgamma "0" +seta r_inGameVideo "1" +seta r_lodBiasRigid "0" +seta r_lodBiasSkinned "0" +seta r_lodScaleRigid "1" +seta r_lodScaleSkinned "1" +seta r_mode "640x480" +seta r_monitor "0" +seta r_multiGpu "0" +seta r_picmip "0" +seta r_picmip_bump "1" +seta r_picmip_manual "0" +seta r_picmip_spec "1" +seta r_picmip_water "0" +seta r_polygonOffsetBias "-1" +seta r_polygonOffsetScale "-1" +seta r_portalBevels "0.7" +seta r_preloadShaders "0" +seta r_rendererPreference "Default" +seta r_specular "0" +seta r_texFilterAnisoMax "4" +seta r_texFilterAnisoMin "1" +seta r_texFilterMipMode "Unchanged" +seta r_vsync "0" +seta r_zFeather "0" +seta ragdoll_enable "1" +seta ragdoll_max_simulating "16" +seta s0 "0" +seta s1 "0" +seta s10 "0" +seta s11 "0" +seta s12 "0" +seta s13 "0" +seta s14 "0" +seta s15 "0" +seta s16 "0" +seta s17 "0" +seta s18 "0" +seta s2 "0" +seta s3 "0" +seta s4 "0" +seta s5 "0" +seta s6 "0" +seta s7 "0" +seta s8 "0" +seta s9 "0" +seta sensitivity "30" +seta sm_enable "0" +seta sm_maxLights "4" +seta snd_cinematicVolumeScale "0.85" +seta snd_enableEq "1" +seta snd_errorOnMissing "0" +seta snd_khz "44" +seta snd_levelFadeTime "250" +seta snd_outputConfiguration "Windows default" +seta snd_slaveFadeTime "500" +seta snd_touchStreamFilesOnLoad "0" +seta snd_volume "0.8" +seta sv_lastSaveGame "profiles/AndrewGerst/save\autosave/cargoship-4.svg" +seta sys_configSum "89156434" +seta sys_configureGHz "8.79723" +seta sys_gpu "ATI Radeon HD 2400" +seta sys_sysMB "1024" +seta takeCoverWarnings "9" +seta ui_bigFont "0.4" +seta ui_extraBigFont "0.55" +seta ui_mousePitch "0" +seta ui_smallFont "0.25" +seta vid_xpos "3" +seta vid_ypos "22" +con_hidechannel *; con_showchannel dontfilter error gamenotify boldgame subtitle obituary logfile_only console_only gfx sound files devgui profile ui client server system playerweap ai anim physics fx leaderboards parserscript script diff --git a/Call of Duty 4/Configs/Profiles/AndrewGerst_VS/config_mp.cfg b/Call of Duty 4/Configs/Profiles/AndrewGerst_VS/config_mp.cfg new file mode 100755 index 0000000..9d61368 --- /dev/null +++ b/Call of Duty 4/Configs/Profiles/AndrewGerst_VS/config_mp.cfg @@ -0,0 +1,398 @@ +// generated by Call of Duty, do not modify +unbindall +bind TAB "+scores" +bind ESCAPE "togglemenu" +bind SPACE "+gostand" +bind , "say_team Thank You!" +bind . "say_team You're Welcome!" +bind / "say ^2WOW^3WOW^2WOW^3!!" +bind 1 "weapnext" +bind 2 "weapnext" +bind 3 "+actionslot 3" +bind 4 "+smoke" +bind 5 "+actionslot 4" +bind 7 "+actionslot 2" +bind = "say_team Nice Try!!" +bind ` "toggleconsole" +bind A "+moveleft" +bind B "mp_QuickMessage" +bind C "gocrouch" +bind D "+moveright" +bind E "+melee" +bind F "+activate" +bind G "+frag" +bind I "chatmodepublic" +bind N "+actionslot 1" +bind O "chatmodeteam" +bind Q "+leanleft" +bind R "+reload" +bind S "+back" +bind V "+leanright" +bind W "+forward" +bind Y "set com_maxfps 60" +bind ~ "toggleconsole" +bind PAUSE "screenshotjpeg" +bind CTRL "goprone" +bind SHIFT "+breath_sprint" +bind PGDN "say gg" +bind PGUP "say_team GJ" +bind HOME "say_team Excellent!!" +bind END "say_team Nice Shot!!" +bind F1 "say ^2Excuse Me,^3 While i stick a sharp object in your back!" +bind F2 "say ^1Sit" +bind F3 "say_team lol" +bind F4 "say lol" +bind KP_ENTER "say ^2Good ^3Job" +bind KP_SLASH "say ^1L^3O^1L^3!!" +bind KP_MINUS "say ^1Bad Game" +bind KP_PLUS "say ^2Good ^3Game" +bind KP_STAR "say ^2Good ^3Luck" +bind MOUSE1 "+attack" +bind MOUSE2 "+speed_throw" +bind MOUSE3 "+talk" +bind MWHEELDOWN "+attack" +seta ai_corpseCount "10" +seta cg_blood "1" +seta cg_brass "1" +seta cg_chatHeight "8" +seta cg_chatTime "12000" +seta cg_connectionIconSize "0" +seta cg_crosshairAlpha "1" +seta cg_crosshairAlphaMin "0.5" +seta cg_crosshairDynamic "0" +seta cg_crosshairEnemyColor "1" +seta cg_cursorHints "4" +seta cg_debugInfoCornerOffset "0 0" +seta cg_descriptiveText "1" +seta cg_drawBreathHint "1" +seta cg_drawCrosshair "0" +seta cg_drawCrosshairNames "1" +seta cg_drawFPS "Off" +seta cg_drawFPSLabels "1" +seta cg_drawLagometer "0" +seta cg_drawMantleHint "1" +seta cg_drawSnapshot "0" +seta cg_drawTurretCrosshair "1" +seta cg_fov "65" +seta cg_gameBoldMessageWidth "390" +seta cg_gameMessageWidth "455" +seta cg_headIconMinScreenRadius "0.015" +seta cg_hintFadeTime "100" +seta cg_hudChatIntermissionPosition "5 110" +seta cg_hudChatPosition "5 204" +seta cg_hudDamageIconHeight "64" +seta cg_hudDamageIconInScope "0" +seta cg_hudDamageIconOffset "128" +seta cg_hudDamageIconTime "2000" +seta cg_hudDamageIconWidth "128" +seta cg_hudGrenadeIconEnabledFlash "0" +seta cg_hudGrenadeIconHeight "25" +seta cg_hudGrenadeIconInScope "0" +seta cg_hudGrenadeIconMaxHeight "104" +seta cg_hudGrenadeIconOffset "50" +seta cg_hudGrenadeIconWidth "25" +seta cg_hudGrenadePointerHeight "12" +seta cg_hudGrenadePointerPivot "12 27" +seta cg_hudGrenadePointerWidth "25" +seta cg_hudMapBorderWidth "2" +seta cg_hudMapFriendlyHeight "15" +seta cg_hudMapFriendlyWidth "15" +seta cg_hudMapPlayerHeight "20" +seta cg_hudMapPlayerWidth "20" +seta cg_hudMapRadarLineThickness "0.15" +seta cg_hudProneY "-160" +seta cg_hudSayPosition "5 180" +seta cg_hudStanceHintPrints "0" +seta cg_hudVotePosition "5 220" +seta cg_invalidCmdHintBlinkInterval "600" +seta cg_invalidCmdHintDuration "1800" +seta cg_laserLight "0" +seta cg_mapLocationSelectionCursorSpeed "0.6" +seta cg_marks_ents_player_only "0" +seta cg_predictItems "1" +seta cg_ScoresPing_BgColor "0.25098 0.25098 0.25098 0.501961" +seta cg_ScoresPing_HighColor "0.8 0 0 1" +seta cg_ScoresPing_Interval "100" +seta cg_ScoresPing_LowColor "0 0.74902 0 1" +seta cg_ScoresPing_MaxBars "4" +seta cg_ScoresPing_MedColor "0.8 0.8 0 1" +seta cg_scriptIconSize "0" +seta cg_sprintMeterDisabledColor "0.8 0.1 0.1 0.2" +seta cg_sprintMeterEmptyColor "0.7 0.5 0.2 0.8" +seta cg_sprintMeterFullColor "0.8 0.8 0.8 0.8" +seta cg_subtitleMinTime "3" +seta cg_subtitles "1" +seta cg_subtitleWidthStandard "520" +seta cg_subtitleWidthWidescreen "520" +seta cg_teamChatsOnly "0" +seta cg_viewZSmoothingMax "16" +seta cg_viewZSmoothingMin "1" +seta cg_viewZSmoothingTime "0.1" +seta cg_voiceIconSize "0" +seta cg_weaponCycleDelay "0" +seta cg_youInKillCamSize "6" +seta cl_allowDownload "1" +seta cl_anonymous "0" +seta cl_freelook "1" +seta cl_maxpackets "30" +seta cl_maxPing "800" +seta cl_maxppf "5" +seta cl_mouseAccel "0" +seta cl_packetdup "1" +seta cl_pitchspeed "140" +seta cl_punkbuster "1" +seta cl_voice "1" +seta cl_wwwDownload "1" +seta cl_yawspeed "140" +seta com_introPlayed "1" +seta com_maxfps "60" +seta com_recommendedSet "1" +seta compassClampIcons "1" +seta compassCoords "740 3590 400" +seta compassECoordCutoff "37" +seta compassFriendlyHeight "18.75" +seta compassFriendlyWidth "18.75" +seta compassMaxRange "2500" +seta compassMinRadius "0.0001" +seta compassMinRange "0.0001" +seta compassObjectiveArrowHeight "20" +seta compassObjectiveArrowOffset "2" +seta compassObjectiveArrowRotateDist "5" +seta compassObjectiveArrowWidth "20" +seta compassObjectiveDrawLines "1" +seta compassObjectiveHeight "20" +seta compassObjectiveIconHeight "16" +seta compassObjectiveIconWidth "16" +seta compassObjectiveMaxRange "2048" +seta compassObjectiveMinAlpha "1" +seta compassObjectiveNumRings "10" +seta compassObjectiveRingSize "80" +seta compassObjectiveRingTime "10000" +seta compassObjectiveTextHeight "18" +seta compassObjectiveTextScale "0.3" +seta compassObjectiveWidth "20" +seta compassPlayerHeight "18.75" +seta compassPlayerWidth "18.75" +seta compassRadarLineThickness "0.4" +seta compassRadarPingFadeTime "4" +seta compassRadarUpdateTime "4" +seta compassRotation "1" +seta compassSize "1" +seta compassSoundPingFadeTime "2" +seta compassTickertapeStretch "0.5" +seta con_errormessagetime "8" +seta con_gameMsgWindow0FadeInTime "0.25" +seta con_gameMsgWindow0FadeOutTime "0.5" +seta con_gameMsgWindow0Filter "gamenotify obituary" +seta con_gameMsgWindow0LineCount "4" +seta con_gameMsgWindow0MsgTime "5" +seta con_gameMsgWindow0ScrollTime "0.25" +seta con_gameMsgWindow0SplitscreenScale "1.5" +seta con_gameMsgWindow1FadeInTime "0.25" +seta con_gameMsgWindow1FadeOutTime "0.01" +seta con_gameMsgWindow1Filter "boldgame" +seta con_gameMsgWindow1LineCount "5" +seta con_gameMsgWindow1MsgTime "8" +seta con_gameMsgWindow1ScrollTime "0.25" +seta con_gameMsgWindow1SplitscreenScale "1.5" +seta con_gameMsgWindow2FadeInTime "0.75" +seta con_gameMsgWindow2FadeOutTime "0.5" +seta con_gameMsgWindow2Filter "subtitle" +seta con_gameMsgWindow2LineCount "7" +seta con_gameMsgWindow2MsgTime "5" +seta con_gameMsgWindow2ScrollTime "0.25" +seta con_gameMsgWindow2SplitscreenScale "1.5" +seta con_gameMsgWindow3FadeInTime "0.25" +seta con_gameMsgWindow3FadeOutTime "0.5" +seta con_gameMsgWindow3Filter "" +seta con_gameMsgWindow3LineCount "5" +seta con_gameMsgWindow3MsgTime "5" +seta con_gameMsgWindow3ScrollTime "0.25" +seta con_gameMsgWindow3SplitscreenScale "1.5" +seta con_inputBoxColor "0.25 0.25 0.2 1" +seta con_inputHintBoxColor "0.4 0.4 0.35 1" +seta con_matchPrefixOnly "1" +seta con_minicon "0" +seta con_miniconlines "5" +seta con_minicontime "4" +seta con_outputBarColor "1 1 0.95 0.6" +seta con_outputSliderColor "0.15 0.15 0.1 0.6" +seta con_outputWindowColor "0.35 0.35 0.3 0.75" +seta con_typewriterColorGlowCheckpoint "0.6 0.5 0.6 1" +seta con_typewriterColorGlowCompleted "0 0.3 0.8 1" +seta con_typewriterColorGlowFailed "0.8 0 0 1" +seta con_typewriterColorGlowUpdated "0 0.6 0.18 1" +seta con_typewriterDecayDuration "700" +seta con_typewriterDecayStartTime "6000" +seta con_typewriterPrintSpeed "50" +seta customclass1 "M60 / RPD" +seta customclass2 "Dragon" +seta customclass3 "P90" +seta customclass4 "M4" +seta customclass5 "P90" +seta drew_notes "2" +seta dynEnt_active "1" +seta fx_marks "1" +seta fx_marks_ents "1" +seta fx_marks_smodels "1" +seta g_allowvote "1" +seta g_useGear "1" +seta hud_deathQuoteFadeTime "1000" +seta hud_enable "1" +seta hud_fade_ammodisplay "0" +seta hud_fade_compass "0" +seta hud_fade_healthbar "2" +seta hud_fade_offhand "0" +seta hud_fade_sprint "1.7" +seta hud_fade_stance "1.7" +seta hud_fadeout_speed "0.1" +seta hud_flash_period_offhand "0.5" +seta hud_flash_time_offhand "2" +seta hud_health_pulserate_critical "0.5" +seta hud_health_pulserate_injured "1" +seta hud_health_startpulse_critical "0.33" +seta hud_health_startpulse_injured "1" +seta in_mouse "1" +seta loc_forceEnglish "0" +seta loc_language "0" +seta m_filter "1" +seta m_forward "0.25" +seta m_pitch "0.022" +seta m_side "0.25" +seta m_yaw "0.022" +seta monkeytoy "0" +seta name ". is HERE" +seta net_noipx "0" +seta net_noudp "0" +seta net_socksEnabled "0" +seta net_socksPassword "" +seta net_socksPort "1080" +seta net_socksServer "" +seta net_socksUsername "" +seta r_aaAlpha "dither (fast)" +seta r_aaSamples "1" +seta r_altModelLightingUpdate "0" +seta r_aspectRatio "auto" +seta r_autopriority "0" +seta r_customMode "" +seta r_debugLineWidth "1" +seta r_depthPrepass "0" +seta r_displayRefresh "60 Hz" +seta r_distortion "0" +seta r_dlightLimit "0" +seta r_dof_enable "0" +seta r_drawDecals "1" +seta r_drawSun "1" +seta r_drawWater "0" +seta r_fastSkin "0" +seta r_fullscreen "1" +seta r_gamma "1.67857" +seta r_glow_allowed "0" +seta r_ignorehwgamma "0" +seta r_inGameVideo "1" +seta r_lodBiasRigid "-100" +seta r_lodBiasSkinned "-200" +seta r_lodScaleRigid "2" +seta r_lodScaleSkinned "4" +seta r_mode "640x480" +seta r_monitor "0" +seta r_multiGpu "0" +seta r_picmip "3" +seta r_picmip_bump "3" +seta r_picmip_manual "1" +seta r_picmip_spec "3" +seta r_picmip_water "0" +seta r_polygonOffsetBias "-1" +seta r_polygonOffsetScale "-1" +seta r_portalBevels "0.7" +seta r_preloadShaders "0" +seta r_rendererPreference "Default" +seta r_specular "0" +seta r_texFilterAnisoMax "4" +seta r_texFilterAnisoMin "1" +seta r_texFilterMipMode "Unchanged" +seta r_vsync "0" +seta r_zFeather "0" +seta ragdoll_enable "0" +seta ragdoll_max_simulating "16" +seta rate "25000" +seta sensitivity "45" +seta server1 "" +seta server10 "" +seta server11 "" +seta server12 "" +seta server13 "" +seta server14 "" +seta server15 "" +seta server16 "" +seta server2 "" +seta server3 "" +seta server4 "" +seta server5 "" +seta server6 "" +seta server7 "" +seta server8 "" +seta server9 "" +seta sm_enable "0" +seta sm_maxLights "4" +seta snaps "20" +seta snd_cinematicVolumeScale "0.85" +seta snd_enableEq "1" +seta snd_errorOnMissing "0" +seta snd_khz "44" +seta snd_levelFadeTime "250" +seta snd_outputConfiguration "Windows default" +seta snd_slaveFadeTime "500" +seta snd_touchStreamFilesOnLoad "0" +seta snd_volume "0.8" +seta sv_allowDownload "1" +seta sv_floodprotect "4" +seta sv_hostname "CoD4Host" +seta sv_maxclients "24" +seta sv_maxPing "0" +seta sv_maxRate "5000" +seta sv_minPing "0" +seta sv_punkbuster "1" +seta sv_reconnectlimit "3" +seta sv_voice "0" +seta sv_wwwBaseURL "" +seta sv_wwwDlDisconnected "0" +seta sv_wwwDownload "0" +seta sys_configSum "4379996" +seta sys_configureGHz "8.7685" +seta sys_gpu "ATI Radeon HD 2400" +seta sys_sysMB "1024" +seta ui_bigFont "0.4" +seta ui_browserFriendlyfire "-1" +seta ui_browserHardcore "-1" +seta ui_browserKillcam "-1" +seta ui_browserMod "0" +seta ui_browserOldSchool "-1" +seta ui_browserShowDedicated "0" +seta ui_browserShowEmpty "0" +seta ui_browserShowFull "0" +seta ui_browserShowPassword "-1" +seta ui_browserShowPunkBuster "-1" +seta ui_browserShowPure "1" +seta ui_currentMap "0" +seta ui_currentNetMap "0" +seta ui_dedicated "0" +seta ui_drawCrosshair "1" +seta ui_extraBigFont "0.55" +seta ui_gametype "0" +seta ui_joinGametype "0" +seta ui_maxclients "32" +seta ui_netGametype "0" +seta ui_netGametypeName "dm" +seta ui_netSource "1" +seta ui_serverStatusTimeOut "7000" +seta ui_smallFont "0.25" +seta vehDriverViewHeightMax "50" +seta vehDriverViewHeightMin "-15" +seta vid_xpos "3" +seta vid_ypos "22" +seta winvoice_mic_mute "1" +seta winvoice_mic_reclevel "65535" +seta winvoice_mic_scaler "1" +seta winvoice_save_voice "0" +con_hidechannel *; con_showchannel dontfilter error gamenotify boldgame subtitle obituary logfile_only console_only gfx sound files devgui profile ui client server system playerweap ai anim physics fx leaderboards parserscript script diff --git a/Call of Duty 4/Configs/Profiles/VS_Location.txt b/Call of Duty 4/Configs/Profiles/VS_Location.txt new file mode 100755 index 0000000..851b514 --- /dev/null +++ b/Call of Duty 4/Configs/Profiles/VS_Location.txt @@ -0,0 +1 @@ +C:\Users\Mary\AppData\Local\VirtualStore\Program Files\Activision\Call of Duty 4 - Modern Warfare\players\profiles\AndrewGerst \ No newline at end of file diff --git a/Call of Duty 4/Configs/Profiles/config_mp_broadcast1.cfg b/Call of Duty 4/Configs/Profiles/config_mp_broadcast1.cfg new file mode 100755 index 0000000..f7341ac --- /dev/null +++ b/Call of Duty 4/Configs/Profiles/config_mp_broadcast1.cfg @@ -0,0 +1,443 @@ +// generated by Call of Duty, do not modify +unbindall +bind TAB "+scores" +bind ESCAPE "togglemenu" +bind SPACE "+gostand" +bind , "say_team Thank You!" +bind - "say_team Last but NOT least OPEN YOUR EYES!" +bind . "say_team You're Welcome!!" +bind / "say ^3^2WOW^3WOW^2WOW^3!!" +bind 0 "say_team Take frequent looks at your radar. You can track enemy routes / positions! Also communicate where enemy isn't / if there are any AFK!" +bind 1 "weapnext" +bind 2 "weapnext" +bind 4 "+smoke" +bind 5 "+actionslot 3" +bind 6 "+actionslot 4" +bind 7 "say_team When you play on my team play with some security! For Example:" +bind 8 "say_team Communication! Say where the enemy stands! Where the bomb lays! Where snipers are located! Etc..." +bind 9 "say_team Also keep an eye on your teammates positions! When they die you will learn the relative location of the enemy!" +bind = "say_team Nice Try!!" +bind [ "say_team Minimize noise by crouching up stairs!! You should also watch out for grenades / airstrikes at the beginning!!" +bind \ "say " +bind ] "say_team Check bombs / frequently used routes for claymores! Start defusing bomb by 8 seconds!" +bind ` "toggleconsole" +bind A "+moveleft" +bind B "mp_QuickMessage" +bind C "gocrouch" +bind D "+moveright" +bind E "+melee" +bind F "+activate" +bind G "+frag" +bind H "say_team Enemy is NOT:" +bind I "chatmodepublic" +bind J "say_team Enemy is:" +bind K "say_team Bomb is:" +bind L "say_team Bathroom!" +bind M "say_team Room between Lobby & A" +bind N "+actionslot 1" +bind O "chatmodeteam" +bind P "+talk" +bind Q "+leanleft" +bind R "+reload" +bind S "+back" +bind U "say_team Computer Room!!" +bind V "+leanright" +bind W "+forward" +bind X "say_team B Clear!" +bind Z "say_team A Clear!" +bind ~ "toggleconsole" +bind PAUSE "screenshotjpeg" +bind UPARROW "say_team Room between Lobby & A" +bind DOWNARROW "say_team OUTSIDE!!" +bind LEFTARROW "say_team Ran Into Bathroom" +bind RIGHTARROW "say_team Ran Across Lobby" +bind CTRL "goprone" +bind SHIFT "+breath_sprint" +bind PGDN "vote no" +bind PGUP "vote yes" +bind HOME "say_team Excellent!!!" +bind END "say_team Nice Shot!!!" +bind F1 "say Hey Guys! This is (Mr. Dot) . AKA $('*').addclass" +bind F2 "say ^1HA^2HA^3HA^4HA^5HA^6HA^7HA^8HA^9HA^0HA^7!!!!" +bind F3 "say_team GJ" +bind F4 "say lol" +bind F5 "say_team Stairs to B roof from A" +bind F6 "say_team Stairs to B roof from Outside" +bind F7 "say_team B roof" +bind F8 "say_team Lobby Balcony!!" +bind F9 "say_team Planting A" +bind F10 "say_team Planting B" +bind F11 "say_team No AFK!" +bind F12 "say_team Eagles Nest!!" +bind KP_ENTER "say ^3^2Good ^3Job!!" +bind KP_SLASH "say ^1L^3O^1L^3!!" +bind KP_MINUS "say ^5^4^1Bad Game!!" +bind KP_PLUS "say ^6^4^3^2Good ^7^5^3Game!!" +bind KP_STAR "say ^2Good ^4^3Luck!!" +bind MOUSE1 "+attack" +bind MOUSE2 "+speed_throw" +bind MWHEELDOWN "+attack" +seta ai_corpseCount "10" +seta cg_blood "1" +seta cg_brass "1" +seta cg_chatHeight "8" +seta cg_chatTime "12000" +seta cg_connectionIconSize "0" +seta cg_crosshairAlpha "1" +seta cg_crosshairAlphaMin "0.5" +seta cg_crosshairDynamic "0" +seta cg_crosshairEnemyColor "1" +seta cg_cursorHints "1" +seta cg_debugInfoCornerOffset "0 0" +seta cg_descriptiveText "1" +seta cg_drawBreathHint "1" +seta cg_drawCrosshair "1" +seta cg_drawCrosshairNames "1" +seta cg_drawFPS "Off" +seta cg_drawFPSLabels "1" +seta cg_drawLagometer "0" +seta cg_drawMantleHint "1" +seta cg_drawSnapshot "0" +seta cg_drawTurretCrosshair "1" +seta cg_fov "65" +seta cg_gameBoldMessageWidth "390" +seta cg_gameMessageWidth "455" +seta cg_headIconMinScreenRadius "0.015" +seta cg_hintFadeTime "100" +seta cg_hudChatIntermissionPosition "5 110" +seta cg_hudChatPosition "5 200" +seta cg_hudDamageIconHeight "64" +seta cg_hudDamageIconInScope "0" +seta cg_hudDamageIconOffset "128" +seta cg_hudDamageIconTime "2000" +seta cg_hudDamageIconWidth "128" +seta cg_hudGrenadeIconEnabledFlash "0" +seta cg_hudGrenadeIconHeight "25" +seta cg_hudGrenadeIconInScope "0" +seta cg_hudGrenadeIconMaxHeight "104" +seta cg_hudGrenadeIconOffset "50" +seta cg_hudGrenadeIconWidth "25" +seta cg_hudGrenadePointerHeight "12" +seta cg_hudGrenadePointerPivot "12 27" +seta cg_hudGrenadePointerWidth "25" +seta cg_hudMapBorderWidth "2" +seta cg_hudMapFriendlyHeight "15" +seta cg_hudMapFriendlyWidth "15" +seta cg_hudMapPlayerHeight "20" +seta cg_hudMapPlayerWidth "20" +seta cg_hudMapRadarLineThickness "0.15" +seta cg_hudProneY "-160" +seta cg_hudSayPosition "5 180" +seta cg_hudStanceHintPrints "0" +seta cg_hudVotePosition "5 220" +seta cg_invalidCmdHintBlinkInterval "600" +seta cg_invalidCmdHintDuration "1800" +seta cg_laserLight "0" +seta cg_mapLocationSelectionCursorSpeed "0.6" +seta cg_marks_ents_player_only "0" +seta cg_predictItems "1" +seta cg_ScoresPing_BgColor "0 0 0 0" +seta cg_ScoresPing_HighColor "0.8 0 0 1" +seta cg_ScoresPing_Interval "100" +seta cg_ScoresPing_LowColor "0 0.8 0 1" +seta cg_ScoresPing_MaxBars "4" +seta cg_ScoresPing_MedColor "0.8 0.8 0 1" +seta cg_scriptIconSize "0" +seta cg_sprintMeterDisabledColor "0.8 0.1 0.1 0.2" +seta cg_sprintMeterEmptyColor "0.7 0.5 0.2 0.8" +seta cg_sprintMeterFullColor "0.8 0.8 0.8 0.8" +seta cg_subtitleMinTime "3" +seta cg_subtitles "1" +seta cg_subtitleWidthStandard "520" +seta cg_subtitleWidthWidescreen "520" +seta cg_teamChatsOnly "0" +seta cg_viewZSmoothingMax "16" +seta cg_viewZSmoothingMin "1" +seta cg_viewZSmoothingTime "0.1" +seta cg_voiceIconSize "1" +seta cg_weaponCycleDelay "0" +seta cg_youInKillCamSize "6" +seta cl_allowDownload "1" +seta cl_anonymous "0" +seta cl_freelook "1" +seta cl_maxpackets "100" +seta cl_maxPing "800" +seta cl_maxppf "5" +seta cl_mouseAccel "0" +seta cl_packetdup "1" +seta cl_pitchspeed "140" +seta cl_punkbuster "1" +seta cl_voice "1" +seta cl_wwwDownload "1" +seta cl_yawspeed "140" +seta com_introPlayed "1" +seta com_maxfps "150" +seta com_recommendedSet "1" +seta compassClampIcons "1" +seta compassCoords "740 3590 400" +seta compassECoordCutoff "37" +seta compassFriendlyHeight "18.75" +seta compassFriendlyWidth "18.75" +seta compassMaxRange "2500" +seta compassMinRadius "0.0001" +seta compassMinRange "0.0001" +seta compassObjectiveArrowHeight "20" +seta compassObjectiveArrowOffset "2" +seta compassObjectiveArrowRotateDist "5" +seta compassObjectiveArrowWidth "20" +seta compassObjectiveDrawLines "1" +seta compassObjectiveHeight "20" +seta compassObjectiveIconHeight "16" +seta compassObjectiveIconWidth "16" +seta compassObjectiveMaxRange "2048" +seta compassObjectiveMinAlpha "1" +seta compassObjectiveNumRings "10" +seta compassObjectiveRingSize "80" +seta compassObjectiveRingTime "10000" +seta compassObjectiveTextHeight "18" +seta compassObjectiveTextScale "0.3" +seta compassObjectiveWidth "20" +seta compassPlayerHeight "18.75" +seta compassPlayerWidth "18.75" +seta compassRadarLineThickness "0.4" +seta compassRadarPingFadeTime "4" +seta compassRadarUpdateTime "4" +seta compassRotation "1" +seta compassSize "1" +seta compassSoundPingFadeTime "2" +seta compassTickertapeStretch "0.5" +seta con_errormessagetime "8" +seta con_gameMsgWindow0FadeInTime "0.25" +seta con_gameMsgWindow0FadeOutTime "0.5" +seta con_gameMsgWindow0Filter "gamenotify obituary" +seta con_gameMsgWindow0LineCount "4" +seta con_gameMsgWindow0MsgTime "5" +seta con_gameMsgWindow0ScrollTime "0.25" +seta con_gameMsgWindow0SplitscreenScale "1.5" +seta con_gameMsgWindow1FadeInTime "0.25" +seta con_gameMsgWindow1FadeOutTime "0.01" +seta con_gameMsgWindow1Filter "boldgame" +seta con_gameMsgWindow1LineCount "5" +seta con_gameMsgWindow1MsgTime "8" +seta con_gameMsgWindow1ScrollTime "0.25" +seta con_gameMsgWindow1SplitscreenScale "1.5" +seta con_gameMsgWindow2FadeInTime "0.75" +seta con_gameMsgWindow2FadeOutTime "0.5" +seta con_gameMsgWindow2Filter "subtitle" +seta con_gameMsgWindow2LineCount "7" +seta con_gameMsgWindow2MsgTime "5" +seta con_gameMsgWindow2ScrollTime "0.25" +seta con_gameMsgWindow2SplitscreenScale "1.5" +seta con_gameMsgWindow3FadeInTime "0.25" +seta con_gameMsgWindow3FadeOutTime "0.5" +seta con_gameMsgWindow3Filter "" +seta con_gameMsgWindow3LineCount "5" +seta con_gameMsgWindow3MsgTime "5" +seta con_gameMsgWindow3ScrollTime "0.25" +seta con_gameMsgWindow3SplitscreenScale "1.5" +seta con_inputBoxColor "0.25 0.25 0.2 1" +seta con_inputHintBoxColor "0.4 0.4 0.35 1" +seta con_matchPrefixOnly "1" +seta con_minicon "0" +seta con_miniconlines "5" +seta con_minicontime "4" +seta con_outputBarColor "1 0 0 1" +seta con_outputSliderColor "0 1 0 1" +seta con_outputWindowColor "0 0 0.5 0.75" +seta con_typewriterColorGlowCheckpoint "0.6 0.5 0.6 1" +seta con_typewriterColorGlowCompleted "0 0.3 0.8 1" +seta con_typewriterColorGlowFailed "0.8 0 0 1" +seta con_typewriterColorGlowUpdated "0 0.6 0.18 1" +seta con_typewriterDecayDuration "700" +seta con_typewriterDecayStartTime "6000" +seta con_typewriterPrintSpeed "50" +seta customclass1 "M1014" +seta customclass2 "AK-74u" +seta customclass3 "Mini-Uzi" +seta customclass4 "M60E4" +seta customclass5 "Dragunov" +seta drew_notes "2" +seta dynEnt_active "0" +seta fx_marks "1" +seta fx_marks_ents "1" +seta fx_marks_smodels "1" +seta g_allowvote "1" +seta g_banIPs "" +seta g_clonePlayerMaxVelocity "80" +seta g_deadChat "1" +seta g_dropForwardSpeed "10" +seta g_dropHorzSpeedRand "100" +seta g_dropUpSpeedBase "10" +seta g_dropUpSpeedRand "5" +seta g_log "games_mp.log" +seta g_logSync "0" +seta g_oldVoting "1" +seta g_playerCollisionEjectSpeed "25" +seta g_redCrosshairs "1" +seta g_useGear "1" +seta g_useholdspawndelay "500" +seta g_voiceChatTalkingDuration "500" +seta g_voteAbstainWeight "0.5" +seta hud_deathQuoteFadeTime "1000" +seta hud_enable "1" +seta hud_fade_ammodisplay "0" +seta hud_fade_compass "0" +seta hud_fade_healthbar "0" +seta hud_fade_offhand "0" +seta hud_fade_sprint "1.7" +seta hud_fade_stance "0" +seta hud_fadeout_speed "0.1" +seta hud_flash_period_offhand "0.5" +seta hud_flash_time_offhand "2" +seta hud_health_pulserate_critical "0.5" +seta hud_health_pulserate_injured "1" +seta hud_health_startpulse_critical "0.33" +seta hud_health_startpulse_injured "1" +seta in_mouse "1" +seta loc_forceEnglish "0" +seta loc_language "0" +seta m_filter "1" +seta m_forward "0.25" +seta m_pitch "0.022" +seta m_side "0.25" +seta m_yaw "0.022" +seta monkeytoy "0" +seta name "$('*').addclass" +seta net_noipx "0" +seta net_noudp "0" +seta net_socksEnabled "0" +seta net_socksPassword "" +seta net_socksPort "1080" +seta net_socksServer "" +seta net_socksUsername "" +seta r_aaAlpha "dither (fast)" +seta r_aaSamples "1" +seta r_altModelLightingUpdate "0" +seta r_aspectRatio "auto" +seta r_autopriority "0" +seta r_customMode "" +seta r_debugLineWidth "1" +seta r_depthPrepass "0" +seta r_detail "0" +seta r_displayRefresh "60 Hz" +seta r_distortion "0" +seta r_dlightLimit "0" +seta r_dof_enable "0" +seta r_drawDecals "0" +seta r_drawSun "0" +seta r_drawWater "0" +seta r_fastSkin "0" +seta r_fullscreen "1" +seta r_gamma "0.821429" +seta r_glow_allowed "0" +seta r_ignorehwgamma "0" +seta r_inGameVideo "1" +seta r_lodBiasRigid "0" +seta r_lodBiasSkinned "0" +seta r_lodScaleRigid "4" +seta r_lodScaleSkinned "4" +seta r_mode "640x480" +seta r_monitor "0" +seta r_multiGpu "1" +seta r_picmip "0" +seta r_picmip_bump "1" +seta r_picmip_manual "0" +seta r_picmip_spec "1" +seta r_picmip_water "0" +seta r_polygonOffsetBias "-1" +seta r_polygonOffsetScale "-1" +seta r_portalBevels "0.7" +seta r_preloadShaders "0" +seta r_rendererPreference "Default" +seta r_specular "0" +seta r_texFilterAnisoMax "4" +seta r_texFilterAnisoMin "1" +seta r_texFilterMipMode "Unchanged" +seta r_vsync "0" +seta r_zFeather "0" +seta ragdoll_enable "1" +seta ragdoll_max_simulating "16" +seta rate "25000" +seta sensitivity "12.6" +seta server1 "" +seta server10 "" +seta server11 "" +seta server12 "" +seta server13 "" +seta server14 "" +seta server15 "" +seta server16 "" +seta server2 "" +seta server3 "" +seta server4 "" +seta server5 "" +seta server6 "" +seta server7 "" +seta server8 "" +seta server9 "" +seta sm_enable "0" +seta sm_maxLights "4" +seta snaps "30" +seta snd_cinematicVolumeScale "0.85" +seta snd_enableEq "1" +seta snd_errorOnMissing "0" +seta snd_khz "22" +seta snd_levelFadeTime "250" +seta snd_outputConfiguration "Windows default" +seta snd_slaveFadeTime "500" +seta snd_touchStreamFilesOnLoad "0" +seta snd_volume "0.785714" +seta sv_allowDownload "1" +seta sv_floodprotect "4" +seta sv_hostname "RigorousSphinx" +seta sv_maxclients "24" +seta sv_maxPing "0" +seta sv_maxRate "5000" +seta sv_minPing "0" +seta sv_punkbuster "0" +seta sv_reconnectlimit "3" +seta sv_voice "1" +seta sv_wwwBaseURL "" +seta sv_wwwDlDisconnected "0" +seta sv_wwwDownload "0" +seta sys_configSum "4379996" +seta sys_configureGHz "8.77235" +seta sys_gpu "ATI Radeon HD 2400" +seta sys_sysMB "1024" +seta ui_bigFont "0.4" +seta ui_browserFriendlyfire "-1" +seta ui_browserHardcore "-1" +seta ui_browserKillcam "-1" +seta ui_browserMod "-1" +seta ui_browserOldSchool "-1" +seta ui_browserShowDedicated "0" +seta ui_browserShowEmpty "1" +seta ui_browserShowFull "0" +seta ui_browserShowPassword "0" +seta ui_browserShowPunkBuster "-1" +seta ui_browserShowPure "1" +seta ui_currentMap "5" +seta ui_currentNetMap "5" +seta ui_dedicated "0" +seta ui_drawCrosshair "0" +seta ui_extraBigFont "0.55" +seta ui_gametype "0" +seta ui_joinGametype "0" +seta ui_maxclients "32" +seta ui_netGametype "2" +seta ui_netGametypeName "sd" +seta ui_netSource "2" +seta ui_serverStatusTimeOut "7000" +seta ui_smallFont "0.25" +seta vehDriverViewHeightMax "50" +seta vehDriverViewHeightMin "-15" +seta vid_xpos "3" +seta vid_ypos "22" +seta voice_deadChat "0" +seta voice_global "0" +seta voice_localEcho "0" +seta winvoice_mic_mute "1" +seta winvoice_mic_reclevel "65535" +seta winvoice_mic_scaler "1" +seta winvoice_save_voice "0" +con_hidechannel *; con_showchannel dontfilter error gamenotify boldgame subtitle obituary logfile_only console_only gfx sound files devgui profile ui client server system playerweap ai anim physics fx leaderboards parserscript script diff --git a/Call of Duty 4/Configs/Profiles/config_mp_broadcast2.cfg b/Call of Duty 4/Configs/Profiles/config_mp_broadcast2.cfg new file mode 100755 index 0000000..eb1028b --- /dev/null +++ b/Call of Duty 4/Configs/Profiles/config_mp_broadcast2.cfg @@ -0,0 +1,446 @@ +// generated by Call of Duty, do not modify +unbindall +bind TAB "+scores" +bind ESCAPE "togglemenu" +bind SPACE "+gostand" +bind , "say_team Thank You!" +bind - "say_team Last but NOT least OPEN YOUR EYES!" +bind . "say_team You're Welcome!!" +bind / "say ^3^2WOW^3WOW^2WOW^3!!" +bind 0 "say_team Take frequent looks at your radar. You can track enemy routes / positions! Also communicate where enemy isn't / if there are any AFK!" +bind 1 "weapnext" +bind 2 "weapnext" +bind 4 "+smoke" +bind 5 "+actionslot 3" +bind 6 "+actionslot 4" +bind 7 "say_team When you play on my team play with some security! For Example:" +bind 8 "say_team Communication! Say where the enemy stands! Where the bomb lays! Where snipers are located! Etc..." +bind 9 "say_team Also keep an eye on your teammates positions! When they die you will learn the relative location of the enemy!" +bind = "say_team Nice Try!!" +bind [ "say_team Minimize noise by crouching up stairs!! You should also watch out for grenades / airstrikes at the beginning!!" +bind \ "say " +bind ] "say_team Check bombs / frequently used routes for claymores! Start defusing bomb by 8 seconds!" +bind ` "toggleconsole" +bind A "+moveleft" +bind B "mp_QuickMessage" +bind C "gocrouch" +bind D "+moveright" +bind E "+melee" +bind F "+activate" +bind G "+frag" +bind H "say_team Enemy is NOT:" +bind I "chatmodepublic" +bind J "say_team Enemy is:" +bind K "say_team Bomb is:" +bind L "say_team Bathroom!" +bind M "say_team Room between Lobby & A" +bind N "+actionslot 1" +bind O "chatmodeteam" +bind P "+talk" +bind Q "+leanleft" +bind R "+reload" +bind S "+back" +bind T "openscriptmenu owcommands zoomout" +bind U "say_team Computer Room!!" +bind V "+leanright" +bind W "+forward" +bind X "say_team B Clear!" +bind Y "com_maxfps 60" +bind Z "say_team A Clear!" +bind ~ "toggleconsole" +bind PAUSE "screenshotjpeg" +bind UPARROW "say_team Room between Lobby & A" +bind DOWNARROW "say_team OUTSIDE!!" +bind LEFTARROW "say_team Ran Into Bathroom" +bind RIGHTARROW "say_team Ran Across Lobby" +bind CTRL "goprone" +bind SHIFT "+breath_sprint" +bind PGDN "vote no" +bind PGUP "vote yes" +bind HOME "say_team Excellent!!!" +bind END "say_team Nice Shot!!!" +bind F1 "say ^2Excuse Me,^3 While i place a sharp object in ur back!" +bind F2 "say ^1HA^2HA^3HA^4HA^5HA^6HA^7HA^8HA^9HA^0HA^7!!!!" +bind F3 "say_team GJ" +bind F4 "say lol" +bind F5 "say_team Stairs to B roof from A" +bind F6 "say_team Stairs to B roof from Outside" +bind F7 "say_team B roof" +bind F8 "say_team Lobby Balcony!!" +bind F9 "say_team Planting A" +bind F10 "say_team Planting B" +bind F11 "say_team No AFK!" +bind F12 "say_team Eagles Nest!!" +bind KP_ENTER "say ^3^2Good ^3Job!!" +bind KP_SLASH "say ^1L^3O^1L^3!!" +bind KP_MINUS "say ^5^4^1Bad Game!!" +bind KP_PLUS "say ^6^4^3^2Good ^7^5^3Game!!" +bind KP_STAR "say ^2Good ^4^3Luck!!" +bind MOUSE1 "+attack" +bind MOUSE2 "+speed_throw" +bind MOUSE3 "+talk" +bind MWHEELDOWN "+attack" +seta ai_corpseCount "10" +seta cg_blood "1" +seta cg_brass "0" +seta cg_chatHeight "8" +seta cg_chatTime "12000" +seta cg_connectionIconSize "0" +seta cg_crosshairAlpha "1" +seta cg_crosshairAlphaMin "0.5" +seta cg_crosshairDynamic "0" +seta cg_crosshairEnemyColor "1" +seta cg_cursorHints "1" +seta cg_debugInfoCornerOffset "0 0" +seta cg_descriptiveText "1" +seta cg_drawBreathHint "1" +seta cg_drawCrosshair "0" +seta cg_drawCrosshairNames "0" +seta cg_drawFPS "Simple" +seta cg_drawFPSLabels "1" +seta cg_drawLagometer "1" +seta cg_drawMantleHint "1" +seta cg_drawSnapshot "0" +seta cg_drawTurretCrosshair "1" +seta cg_fov "65" +seta cg_gameBoldMessageWidth "390" +seta cg_gameMessageWidth "455" +seta cg_headIconMinScreenRadius "0.015" +seta cg_hintFadeTime "100" +seta cg_hudChatIntermissionPosition "5 110" +seta cg_hudChatPosition "5 200" +seta cg_hudDamageIconHeight "64" +seta cg_hudDamageIconInScope "0" +seta cg_hudDamageIconOffset "128" +seta cg_hudDamageIconTime "2000" +seta cg_hudDamageIconWidth "128" +seta cg_hudGrenadeIconEnabledFlash "0" +seta cg_hudGrenadeIconHeight "25" +seta cg_hudGrenadeIconInScope "0" +seta cg_hudGrenadeIconMaxHeight "104" +seta cg_hudGrenadeIconOffset "50" +seta cg_hudGrenadeIconWidth "25" +seta cg_hudGrenadePointerHeight "12" +seta cg_hudGrenadePointerPivot "12 27" +seta cg_hudGrenadePointerWidth "25" +seta cg_hudMapBorderWidth "2" +seta cg_hudMapFriendlyHeight "15" +seta cg_hudMapFriendlyWidth "15" +seta cg_hudMapPlayerHeight "20" +seta cg_hudMapPlayerWidth "20" +seta cg_hudMapRadarLineThickness "0.15" +seta cg_hudProneY "-160" +seta cg_hudSayPosition "5 180" +seta cg_hudStanceHintPrints "0" +seta cg_hudVotePosition "5 220" +seta cg_invalidCmdHintBlinkInterval "600" +seta cg_invalidCmdHintDuration "1800" +seta cg_laserLight "1" +seta cg_mapLocationSelectionCursorSpeed "0.6" +seta cg_marks_ents_player_only "0" +seta cg_predictItems "1" +seta cg_ScoresPing_BgColor "0 0 0 0" +seta cg_ScoresPing_HighColor "0.8 0 0 1" +seta cg_ScoresPing_Interval "20" +seta cg_ScoresPing_LowColor "0 0.8 0 1" +seta cg_ScoresPing_MaxBars "10" +seta cg_ScoresPing_MedColor "0.8 0.8 0 1" +seta cg_scriptIconSize "0" +seta cg_sprintMeterDisabledColor "0.8 0.1 0.1 0.2" +seta cg_sprintMeterEmptyColor "0.7 0.5 0.2 0.8" +seta cg_sprintMeterFullColor "0.8 0.8 0.8 0.8" +seta cg_subtitleMinTime "3" +seta cg_subtitles "1" +seta cg_subtitleWidthStandard "520" +seta cg_subtitleWidthWidescreen "520" +seta cg_teamChatsOnly "0" +seta cg_viewZSmoothingMax "16" +seta cg_viewZSmoothingMin "1" +seta cg_viewZSmoothingTime "0.1" +seta cg_voiceIconSize "1" +seta cg_weaponCycleDelay "0" +seta cg_youInKillCamSize "6" +seta cl_allowDownload "1" +seta cl_anonymous "0" +seta cl_freelook "1" +seta cl_maxpackets "30" +seta cl_maxPing "600" +seta cl_maxppf "5" +seta cl_mouseAccel "0" +seta cl_packetdup "1" +seta cl_pitchspeed "140" +seta cl_punkbuster "1" +seta cl_voice "1" +seta cl_wwwDownload "1" +seta cl_yawspeed "140" +seta com_introPlayed "1" +seta com_maxfps "60" +seta com_recommendedSet "1" +seta compassClampIcons "1" +seta compassCoords "740 3590 400" +seta compassECoordCutoff "37" +seta compassFriendlyHeight "18.75" +seta compassFriendlyWidth "18.75" +seta compassMaxRange "2500" +seta compassMinRadius "0.0001" +seta compassMinRange "0.0001" +seta compassObjectiveArrowHeight "20" +seta compassObjectiveArrowOffset "2" +seta compassObjectiveArrowRotateDist "5" +seta compassObjectiveArrowWidth "20" +seta compassObjectiveDrawLines "1" +seta compassObjectiveHeight "20" +seta compassObjectiveIconHeight "16" +seta compassObjectiveIconWidth "16" +seta compassObjectiveMaxRange "2048" +seta compassObjectiveMinAlpha "1" +seta compassObjectiveNumRings "10" +seta compassObjectiveRingSize "80" +seta compassObjectiveRingTime "10000" +seta compassObjectiveTextHeight "18" +seta compassObjectiveTextScale "0.3" +seta compassObjectiveWidth "20" +seta compassPlayerHeight "18.75" +seta compassPlayerWidth "18.75" +seta compassRadarLineThickness "0.4" +seta compassRadarPingFadeTime "4" +seta compassRadarUpdateTime "4" +seta compassRotation "1" +seta compassSize "1" +seta compassSoundPingFadeTime "2" +seta compassTickertapeStretch "0.5" +seta con_errormessagetime "8" +seta con_gameMsgWindow0FadeInTime "0.25" +seta con_gameMsgWindow0FadeOutTime "0.5" +seta con_gameMsgWindow0Filter "gamenotify obituary" +seta con_gameMsgWindow0LineCount "4" +seta con_gameMsgWindow0MsgTime "5" +seta con_gameMsgWindow0ScrollTime "0.25" +seta con_gameMsgWindow0SplitscreenScale "1.5" +seta con_gameMsgWindow1FadeInTime "0.25" +seta con_gameMsgWindow1FadeOutTime "0.01" +seta con_gameMsgWindow1Filter "boldgame" +seta con_gameMsgWindow1LineCount "5" +seta con_gameMsgWindow1MsgTime "8" +seta con_gameMsgWindow1ScrollTime "0.25" +seta con_gameMsgWindow1SplitscreenScale "1.5" +seta con_gameMsgWindow2FadeInTime "0.75" +seta con_gameMsgWindow2FadeOutTime "0.5" +seta con_gameMsgWindow2Filter "subtitle" +seta con_gameMsgWindow2LineCount "7" +seta con_gameMsgWindow2MsgTime "5" +seta con_gameMsgWindow2ScrollTime "0.25" +seta con_gameMsgWindow2SplitscreenScale "1.5" +seta con_gameMsgWindow3FadeInTime "0.25" +seta con_gameMsgWindow3FadeOutTime "0.5" +seta con_gameMsgWindow3Filter "" +seta con_gameMsgWindow3LineCount "5" +seta con_gameMsgWindow3MsgTime "5" +seta con_gameMsgWindow3ScrollTime "0.25" +seta con_gameMsgWindow3SplitscreenScale "1.5" +seta con_inputBoxColor "0.25 0.25 0.2 1" +seta con_inputHintBoxColor "0.4 0.4 0.35 1" +seta con_matchPrefixOnly "1" +seta con_minicon "0" +seta con_miniconlines "5" +seta con_minicontime "4" +seta con_outputBarColor "1 0 0 1" +seta con_outputSliderColor "0 1 0 1" +seta con_outputWindowColor "0 0 0.5 0.75" +seta con_typewriterColorGlowCheckpoint "0.6 0.5 0.6 1" +seta con_typewriterColorGlowCompleted "0 0.3 0.8 1" +seta con_typewriterColorGlowFailed "0.8 0 0 1" +seta con_typewriterColorGlowUpdated "0 0.6 0.18 1" +seta con_typewriterDecayDuration "700" +seta con_typewriterDecayStartTime "6000" +seta con_typewriterPrintSpeed "50" +seta customclass1 "Custom Slot 1" +seta customclass2 "Custom Slot 2" +seta customclass3 "Custom Slot 3" +seta customclass4 "Custom Slot 4" +seta customclass5 "Custom Slot 5" +seta drew_notes "2" +seta dynEnt_active "0" +seta fx_marks "0" +seta fx_marks_ents "1" +seta fx_marks_smodels "1" +seta g_allowvote "1" +seta g_banIPs "" +seta g_clonePlayerMaxVelocity "80" +seta g_deadChat "1" +seta g_dropForwardSpeed "10" +seta g_dropHorzSpeedRand "100" +seta g_dropUpSpeedBase "10" +seta g_dropUpSpeedRand "5" +seta g_log "games_mp.log" +seta g_logSync "0" +seta g_oldVoting "1" +seta g_playerCollisionEjectSpeed "25" +seta g_redCrosshairs "1" +seta g_useGear "1" +seta g_useholdspawndelay "500" +seta g_voiceChatTalkingDuration "500" +seta g_voteAbstainWeight "0.5" +seta hud_deathQuoteFadeTime "1000" +seta hud_enable "1" +seta hud_fade_ammodisplay "1.7" +seta hud_fade_compass "0" +seta hud_fade_healthbar "0" +seta hud_fade_offhand "1.7" +seta hud_fade_sprint "1.7" +seta hud_fade_stance "0" +seta hud_fadeout_speed "0.1" +seta hud_flash_period_offhand "0.5" +seta hud_flash_time_offhand "2" +seta hud_health_pulserate_critical "0.5" +seta hud_health_pulserate_injured "1" +seta hud_health_startpulse_critical "0.33" +seta hud_health_startpulse_injured "1" +seta in_mouse "1" +seta loc_forceEnglish "0" +seta loc_language "0" +seta m_filter "1" +seta m_forward "0.25" +seta m_pitch "0.022" +seta m_side "0.25" +seta m_yaw "0.022" +seta monkeytoy "0" +seta name ". is HERE" +seta net_noipx "0" +seta net_noudp "0" +seta net_socksEnabled "0" +seta net_socksPassword "" +seta net_socksPort "1080" +seta net_socksServer "" +seta net_socksUsername "" +seta r_aaAlpha "dither (fast)" +seta r_aaSamples "1" +seta r_altModelLightingUpdate "0" +seta r_aspectRatio "auto" +seta r_autopriority "0" +seta r_customMode "" +seta r_debugLineWidth "1" +seta r_depthPrepass "0" +seta r_detail "0" +seta r_displayRefresh "60 Hz" +seta r_distortion "0" +seta r_dlightLimit "0" +seta r_dof_enable "0" +seta r_drawDecals "1" +seta r_drawSun "0" +seta r_drawWater "0" +seta r_fastSkin "0" +seta r_fullscreen "1" +seta r_gamma "1.79762" +seta r_glow_allowed "0" +seta r_ignorehwgamma "0" +seta r_inGameVideo "1" +seta r_lodBiasRigid "0" +seta r_lodBiasSkinned "0" +seta r_lodScaleRigid "1" +seta r_lodScaleSkinned "1" +seta r_mode "640x480" +seta r_monitor "0" +seta r_multiGpu "0" +seta r_picmip "3" +seta r_picmip_bump "3" +seta r_picmip_manual "1" +seta r_picmip_spec "3" +seta r_picmip_water "0" +seta r_polygonOffsetBias "-1" +seta r_polygonOffsetScale "-1" +seta r_portalBevels "0.7" +seta r_preloadShaders "0" +seta r_rendererPreference "Default" +seta r_specular "0" +seta r_texFilterAnisoMax "4" +seta r_texFilterAnisoMin "1" +seta r_texFilterMipMode "Unchanged" +seta r_vsync "0" +seta r_zFeather "0" +seta ragdoll_enable "0" +seta ragdoll_max_simulating "16" +seta rate "25000" +seta sensitivity "45" +seta server1 "" +seta server10 "" +seta server11 "" +seta server12 "" +seta server13 "" +seta server14 "" +seta server15 "" +seta server16 "" +seta server2 "" +seta server3 "" +seta server4 "" +seta server5 "" +seta server6 "" +seta server7 "" +seta server8 "" +seta server9 "" +seta sm_enable "0" +seta sm_maxLights "4" +seta snaps "30" +seta snd_cinematicVolumeScale "0.85" +seta snd_enableEq "1" +seta snd_errorOnMissing "0" +seta snd_khz "22" +seta snd_levelFadeTime "250" +seta snd_outputConfiguration "Windows default" +seta snd_slaveFadeTime "500" +seta snd_touchStreamFilesOnLoad "0" +seta snd_volume "0.785714" +seta sv_allowDownload "1" +seta sv_floodprotect "1" +seta sv_hostname "^5$('*') ^2Brdcast ^3HC ^1SnD" +seta sv_maxclients "20" +seta sv_maxPing "600" +seta sv_maxRate "5000" +seta sv_minPing "0" +seta sv_punkbuster "0" +seta sv_reconnectlimit "3" +seta sv_voice "1" +seta sv_wwwBaseURL "" +seta sv_wwwDlDisconnected "0" +seta sv_wwwDownload "0" +seta sys_configSum "4379996" +seta sys_configureGHz "8.77235" +seta sys_gpu "ATI Radeon HD 2400" +seta sys_sysMB "1024" +seta ui_bigFont "0.4" +seta ui_browserFriendlyfire "-1" +seta ui_browserHardcore "-1" +seta ui_browserKillcam "-1" +seta ui_browserMod "-1" +seta ui_browserOldSchool "-1" +seta ui_browserShowDedicated "0" +seta ui_browserShowEmpty "1" +seta ui_browserShowFull "0" +seta ui_browserShowPassword "0" +seta ui_browserShowPunkBuster "-1" +seta ui_browserShowPure "1" +seta ui_currentMap "20" +seta ui_currentNetMap "20" +seta ui_dedicated "0" +seta ui_drawCrosshair "0" +seta ui_extraBigFont "0.55" +seta ui_gametype "0" +seta ui_joinGametype "0" +seta ui_maxclients "32" +seta ui_netGametype "2" +seta ui_netGametypeName "koth" +seta ui_netSource "2" +seta ui_serverStatusTimeOut "7000" +seta ui_smallFont "0.25" +seta vehDriverViewHeightMax "50" +seta vehDriverViewHeightMin "-15" +seta vid_xpos "3" +seta vid_ypos "22" +seta voice_deadChat "0" +seta voice_global "0" +seta voice_localEcho "0" +seta winvoice_mic_mute "1" +seta winvoice_mic_reclevel "65535" +seta winvoice_mic_scaler "1" +seta winvoice_save_voice "0" +con_hidechannel *; con_showchannel dontfilter error gamenotify boldgame subtitle obituary logfile_only console_only gfx sound files devgui profile ui client server system playerweap ai anim physics fx leaderboards parserscript script diff --git a/Call of Duty 4/Configs/Profiles/config_mp_freezetag1.cfg b/Call of Duty 4/Configs/Profiles/config_mp_freezetag1.cfg new file mode 100755 index 0000000..9d61368 --- /dev/null +++ b/Call of Duty 4/Configs/Profiles/config_mp_freezetag1.cfg @@ -0,0 +1,398 @@ +// generated by Call of Duty, do not modify +unbindall +bind TAB "+scores" +bind ESCAPE "togglemenu" +bind SPACE "+gostand" +bind , "say_team Thank You!" +bind . "say_team You're Welcome!" +bind / "say ^2WOW^3WOW^2WOW^3!!" +bind 1 "weapnext" +bind 2 "weapnext" +bind 3 "+actionslot 3" +bind 4 "+smoke" +bind 5 "+actionslot 4" +bind 7 "+actionslot 2" +bind = "say_team Nice Try!!" +bind ` "toggleconsole" +bind A "+moveleft" +bind B "mp_QuickMessage" +bind C "gocrouch" +bind D "+moveright" +bind E "+melee" +bind F "+activate" +bind G "+frag" +bind I "chatmodepublic" +bind N "+actionslot 1" +bind O "chatmodeteam" +bind Q "+leanleft" +bind R "+reload" +bind S "+back" +bind V "+leanright" +bind W "+forward" +bind Y "set com_maxfps 60" +bind ~ "toggleconsole" +bind PAUSE "screenshotjpeg" +bind CTRL "goprone" +bind SHIFT "+breath_sprint" +bind PGDN "say gg" +bind PGUP "say_team GJ" +bind HOME "say_team Excellent!!" +bind END "say_team Nice Shot!!" +bind F1 "say ^2Excuse Me,^3 While i stick a sharp object in your back!" +bind F2 "say ^1Sit" +bind F3 "say_team lol" +bind F4 "say lol" +bind KP_ENTER "say ^2Good ^3Job" +bind KP_SLASH "say ^1L^3O^1L^3!!" +bind KP_MINUS "say ^1Bad Game" +bind KP_PLUS "say ^2Good ^3Game" +bind KP_STAR "say ^2Good ^3Luck" +bind MOUSE1 "+attack" +bind MOUSE2 "+speed_throw" +bind MOUSE3 "+talk" +bind MWHEELDOWN "+attack" +seta ai_corpseCount "10" +seta cg_blood "1" +seta cg_brass "1" +seta cg_chatHeight "8" +seta cg_chatTime "12000" +seta cg_connectionIconSize "0" +seta cg_crosshairAlpha "1" +seta cg_crosshairAlphaMin "0.5" +seta cg_crosshairDynamic "0" +seta cg_crosshairEnemyColor "1" +seta cg_cursorHints "4" +seta cg_debugInfoCornerOffset "0 0" +seta cg_descriptiveText "1" +seta cg_drawBreathHint "1" +seta cg_drawCrosshair "0" +seta cg_drawCrosshairNames "1" +seta cg_drawFPS "Off" +seta cg_drawFPSLabels "1" +seta cg_drawLagometer "0" +seta cg_drawMantleHint "1" +seta cg_drawSnapshot "0" +seta cg_drawTurretCrosshair "1" +seta cg_fov "65" +seta cg_gameBoldMessageWidth "390" +seta cg_gameMessageWidth "455" +seta cg_headIconMinScreenRadius "0.015" +seta cg_hintFadeTime "100" +seta cg_hudChatIntermissionPosition "5 110" +seta cg_hudChatPosition "5 204" +seta cg_hudDamageIconHeight "64" +seta cg_hudDamageIconInScope "0" +seta cg_hudDamageIconOffset "128" +seta cg_hudDamageIconTime "2000" +seta cg_hudDamageIconWidth "128" +seta cg_hudGrenadeIconEnabledFlash "0" +seta cg_hudGrenadeIconHeight "25" +seta cg_hudGrenadeIconInScope "0" +seta cg_hudGrenadeIconMaxHeight "104" +seta cg_hudGrenadeIconOffset "50" +seta cg_hudGrenadeIconWidth "25" +seta cg_hudGrenadePointerHeight "12" +seta cg_hudGrenadePointerPivot "12 27" +seta cg_hudGrenadePointerWidth "25" +seta cg_hudMapBorderWidth "2" +seta cg_hudMapFriendlyHeight "15" +seta cg_hudMapFriendlyWidth "15" +seta cg_hudMapPlayerHeight "20" +seta cg_hudMapPlayerWidth "20" +seta cg_hudMapRadarLineThickness "0.15" +seta cg_hudProneY "-160" +seta cg_hudSayPosition "5 180" +seta cg_hudStanceHintPrints "0" +seta cg_hudVotePosition "5 220" +seta cg_invalidCmdHintBlinkInterval "600" +seta cg_invalidCmdHintDuration "1800" +seta cg_laserLight "0" +seta cg_mapLocationSelectionCursorSpeed "0.6" +seta cg_marks_ents_player_only "0" +seta cg_predictItems "1" +seta cg_ScoresPing_BgColor "0.25098 0.25098 0.25098 0.501961" +seta cg_ScoresPing_HighColor "0.8 0 0 1" +seta cg_ScoresPing_Interval "100" +seta cg_ScoresPing_LowColor "0 0.74902 0 1" +seta cg_ScoresPing_MaxBars "4" +seta cg_ScoresPing_MedColor "0.8 0.8 0 1" +seta cg_scriptIconSize "0" +seta cg_sprintMeterDisabledColor "0.8 0.1 0.1 0.2" +seta cg_sprintMeterEmptyColor "0.7 0.5 0.2 0.8" +seta cg_sprintMeterFullColor "0.8 0.8 0.8 0.8" +seta cg_subtitleMinTime "3" +seta cg_subtitles "1" +seta cg_subtitleWidthStandard "520" +seta cg_subtitleWidthWidescreen "520" +seta cg_teamChatsOnly "0" +seta cg_viewZSmoothingMax "16" +seta cg_viewZSmoothingMin "1" +seta cg_viewZSmoothingTime "0.1" +seta cg_voiceIconSize "0" +seta cg_weaponCycleDelay "0" +seta cg_youInKillCamSize "6" +seta cl_allowDownload "1" +seta cl_anonymous "0" +seta cl_freelook "1" +seta cl_maxpackets "30" +seta cl_maxPing "800" +seta cl_maxppf "5" +seta cl_mouseAccel "0" +seta cl_packetdup "1" +seta cl_pitchspeed "140" +seta cl_punkbuster "1" +seta cl_voice "1" +seta cl_wwwDownload "1" +seta cl_yawspeed "140" +seta com_introPlayed "1" +seta com_maxfps "60" +seta com_recommendedSet "1" +seta compassClampIcons "1" +seta compassCoords "740 3590 400" +seta compassECoordCutoff "37" +seta compassFriendlyHeight "18.75" +seta compassFriendlyWidth "18.75" +seta compassMaxRange "2500" +seta compassMinRadius "0.0001" +seta compassMinRange "0.0001" +seta compassObjectiveArrowHeight "20" +seta compassObjectiveArrowOffset "2" +seta compassObjectiveArrowRotateDist "5" +seta compassObjectiveArrowWidth "20" +seta compassObjectiveDrawLines "1" +seta compassObjectiveHeight "20" +seta compassObjectiveIconHeight "16" +seta compassObjectiveIconWidth "16" +seta compassObjectiveMaxRange "2048" +seta compassObjectiveMinAlpha "1" +seta compassObjectiveNumRings "10" +seta compassObjectiveRingSize "80" +seta compassObjectiveRingTime "10000" +seta compassObjectiveTextHeight "18" +seta compassObjectiveTextScale "0.3" +seta compassObjectiveWidth "20" +seta compassPlayerHeight "18.75" +seta compassPlayerWidth "18.75" +seta compassRadarLineThickness "0.4" +seta compassRadarPingFadeTime "4" +seta compassRadarUpdateTime "4" +seta compassRotation "1" +seta compassSize "1" +seta compassSoundPingFadeTime "2" +seta compassTickertapeStretch "0.5" +seta con_errormessagetime "8" +seta con_gameMsgWindow0FadeInTime "0.25" +seta con_gameMsgWindow0FadeOutTime "0.5" +seta con_gameMsgWindow0Filter "gamenotify obituary" +seta con_gameMsgWindow0LineCount "4" +seta con_gameMsgWindow0MsgTime "5" +seta con_gameMsgWindow0ScrollTime "0.25" +seta con_gameMsgWindow0SplitscreenScale "1.5" +seta con_gameMsgWindow1FadeInTime "0.25" +seta con_gameMsgWindow1FadeOutTime "0.01" +seta con_gameMsgWindow1Filter "boldgame" +seta con_gameMsgWindow1LineCount "5" +seta con_gameMsgWindow1MsgTime "8" +seta con_gameMsgWindow1ScrollTime "0.25" +seta con_gameMsgWindow1SplitscreenScale "1.5" +seta con_gameMsgWindow2FadeInTime "0.75" +seta con_gameMsgWindow2FadeOutTime "0.5" +seta con_gameMsgWindow2Filter "subtitle" +seta con_gameMsgWindow2LineCount "7" +seta con_gameMsgWindow2MsgTime "5" +seta con_gameMsgWindow2ScrollTime "0.25" +seta con_gameMsgWindow2SplitscreenScale "1.5" +seta con_gameMsgWindow3FadeInTime "0.25" +seta con_gameMsgWindow3FadeOutTime "0.5" +seta con_gameMsgWindow3Filter "" +seta con_gameMsgWindow3LineCount "5" +seta con_gameMsgWindow3MsgTime "5" +seta con_gameMsgWindow3ScrollTime "0.25" +seta con_gameMsgWindow3SplitscreenScale "1.5" +seta con_inputBoxColor "0.25 0.25 0.2 1" +seta con_inputHintBoxColor "0.4 0.4 0.35 1" +seta con_matchPrefixOnly "1" +seta con_minicon "0" +seta con_miniconlines "5" +seta con_minicontime "4" +seta con_outputBarColor "1 1 0.95 0.6" +seta con_outputSliderColor "0.15 0.15 0.1 0.6" +seta con_outputWindowColor "0.35 0.35 0.3 0.75" +seta con_typewriterColorGlowCheckpoint "0.6 0.5 0.6 1" +seta con_typewriterColorGlowCompleted "0 0.3 0.8 1" +seta con_typewriterColorGlowFailed "0.8 0 0 1" +seta con_typewriterColorGlowUpdated "0 0.6 0.18 1" +seta con_typewriterDecayDuration "700" +seta con_typewriterDecayStartTime "6000" +seta con_typewriterPrintSpeed "50" +seta customclass1 "M60 / RPD" +seta customclass2 "Dragon" +seta customclass3 "P90" +seta customclass4 "M4" +seta customclass5 "P90" +seta drew_notes "2" +seta dynEnt_active "1" +seta fx_marks "1" +seta fx_marks_ents "1" +seta fx_marks_smodels "1" +seta g_allowvote "1" +seta g_useGear "1" +seta hud_deathQuoteFadeTime "1000" +seta hud_enable "1" +seta hud_fade_ammodisplay "0" +seta hud_fade_compass "0" +seta hud_fade_healthbar "2" +seta hud_fade_offhand "0" +seta hud_fade_sprint "1.7" +seta hud_fade_stance "1.7" +seta hud_fadeout_speed "0.1" +seta hud_flash_period_offhand "0.5" +seta hud_flash_time_offhand "2" +seta hud_health_pulserate_critical "0.5" +seta hud_health_pulserate_injured "1" +seta hud_health_startpulse_critical "0.33" +seta hud_health_startpulse_injured "1" +seta in_mouse "1" +seta loc_forceEnglish "0" +seta loc_language "0" +seta m_filter "1" +seta m_forward "0.25" +seta m_pitch "0.022" +seta m_side "0.25" +seta m_yaw "0.022" +seta monkeytoy "0" +seta name ". is HERE" +seta net_noipx "0" +seta net_noudp "0" +seta net_socksEnabled "0" +seta net_socksPassword "" +seta net_socksPort "1080" +seta net_socksServer "" +seta net_socksUsername "" +seta r_aaAlpha "dither (fast)" +seta r_aaSamples "1" +seta r_altModelLightingUpdate "0" +seta r_aspectRatio "auto" +seta r_autopriority "0" +seta r_customMode "" +seta r_debugLineWidth "1" +seta r_depthPrepass "0" +seta r_displayRefresh "60 Hz" +seta r_distortion "0" +seta r_dlightLimit "0" +seta r_dof_enable "0" +seta r_drawDecals "1" +seta r_drawSun "1" +seta r_drawWater "0" +seta r_fastSkin "0" +seta r_fullscreen "1" +seta r_gamma "1.67857" +seta r_glow_allowed "0" +seta r_ignorehwgamma "0" +seta r_inGameVideo "1" +seta r_lodBiasRigid "-100" +seta r_lodBiasSkinned "-200" +seta r_lodScaleRigid "2" +seta r_lodScaleSkinned "4" +seta r_mode "640x480" +seta r_monitor "0" +seta r_multiGpu "0" +seta r_picmip "3" +seta r_picmip_bump "3" +seta r_picmip_manual "1" +seta r_picmip_spec "3" +seta r_picmip_water "0" +seta r_polygonOffsetBias "-1" +seta r_polygonOffsetScale "-1" +seta r_portalBevels "0.7" +seta r_preloadShaders "0" +seta r_rendererPreference "Default" +seta r_specular "0" +seta r_texFilterAnisoMax "4" +seta r_texFilterAnisoMin "1" +seta r_texFilterMipMode "Unchanged" +seta r_vsync "0" +seta r_zFeather "0" +seta ragdoll_enable "0" +seta ragdoll_max_simulating "16" +seta rate "25000" +seta sensitivity "45" +seta server1 "" +seta server10 "" +seta server11 "" +seta server12 "" +seta server13 "" +seta server14 "" +seta server15 "" +seta server16 "" +seta server2 "" +seta server3 "" +seta server4 "" +seta server5 "" +seta server6 "" +seta server7 "" +seta server8 "" +seta server9 "" +seta sm_enable "0" +seta sm_maxLights "4" +seta snaps "20" +seta snd_cinematicVolumeScale "0.85" +seta snd_enableEq "1" +seta snd_errorOnMissing "0" +seta snd_khz "44" +seta snd_levelFadeTime "250" +seta snd_outputConfiguration "Windows default" +seta snd_slaveFadeTime "500" +seta snd_touchStreamFilesOnLoad "0" +seta snd_volume "0.8" +seta sv_allowDownload "1" +seta sv_floodprotect "4" +seta sv_hostname "CoD4Host" +seta sv_maxclients "24" +seta sv_maxPing "0" +seta sv_maxRate "5000" +seta sv_minPing "0" +seta sv_punkbuster "1" +seta sv_reconnectlimit "3" +seta sv_voice "0" +seta sv_wwwBaseURL "" +seta sv_wwwDlDisconnected "0" +seta sv_wwwDownload "0" +seta sys_configSum "4379996" +seta sys_configureGHz "8.7685" +seta sys_gpu "ATI Radeon HD 2400" +seta sys_sysMB "1024" +seta ui_bigFont "0.4" +seta ui_browserFriendlyfire "-1" +seta ui_browserHardcore "-1" +seta ui_browserKillcam "-1" +seta ui_browserMod "0" +seta ui_browserOldSchool "-1" +seta ui_browserShowDedicated "0" +seta ui_browserShowEmpty "0" +seta ui_browserShowFull "0" +seta ui_browserShowPassword "-1" +seta ui_browserShowPunkBuster "-1" +seta ui_browserShowPure "1" +seta ui_currentMap "0" +seta ui_currentNetMap "0" +seta ui_dedicated "0" +seta ui_drawCrosshair "1" +seta ui_extraBigFont "0.55" +seta ui_gametype "0" +seta ui_joinGametype "0" +seta ui_maxclients "32" +seta ui_netGametype "0" +seta ui_netGametypeName "dm" +seta ui_netSource "1" +seta ui_serverStatusTimeOut "7000" +seta ui_smallFont "0.25" +seta vehDriverViewHeightMax "50" +seta vehDriverViewHeightMin "-15" +seta vid_xpos "3" +seta vid_ypos "22" +seta winvoice_mic_mute "1" +seta winvoice_mic_reclevel "65535" +seta winvoice_mic_scaler "1" +seta winvoice_save_voice "0" +con_hidechannel *; con_showchannel dontfilter error gamenotify boldgame subtitle obituary logfile_only console_only gfx sound files devgui profile ui client server system playerweap ai anim physics fx leaderboards parserscript script diff --git a/Call of Duty 4/Configs/Profiles/config_mp_freezetag2.cfg b/Call of Duty 4/Configs/Profiles/config_mp_freezetag2.cfg new file mode 100755 index 0000000..71d30ec --- /dev/null +++ b/Call of Duty 4/Configs/Profiles/config_mp_freezetag2.cfg @@ -0,0 +1,398 @@ +// generated by Call of Duty, do not modify +unbindall +bind TAB "+scores" +bind ESCAPE "togglemenu" +bind SPACE "+gostand" +bind , "say_team Thank You!" +bind . "say_team You're Welcome!" +bind / "say ^2WOW^3WOW^2WOW^3!!" +bind 1 "weapnext" +bind 2 "weapnext" +bind 3 "+actionslot 3" +bind 4 "+smoke" +bind 5 "+actionslot 4" +bind 7 "+actionslot 2" +bind = "say_team Nice Try!!" +bind ` "toggleconsole" +bind A "+moveleft" +bind B "mp_QuickMessage" +bind C "gocrouch" +bind D "+moveright" +bind E "+melee" +bind F "+activate" +bind G "+frag" +bind I "chatmodepublic" +bind N "+actionslot 1" +bind O "chatmodeteam" +bind Q "+leanleft" +bind R "+reload" +bind S "+back" +bind V "+leanright" +bind W "+forward" +bind Y "set com_maxfps 60" +bind ~ "toggleconsole" +bind PAUSE "screenshotjpeg" +bind CTRL "goprone" +bind SHIFT "+breath_sprint" +bind PGDN "say gg" +bind PGUP "say_team GJ" +bind HOME "say_team Excellent!!" +bind END "say_team Nice Shot!!" +bind F1 "say ^2Excuse Me,^3 While i stick a sharp object in your back!" +bind F2 "say ^1Sit" +bind F3 "say_team lol" +bind F4 "say lol" +bind KP_ENTER "say ^2Good ^3Job" +bind KP_SLASH "say ^1L^3O^1L^3!!" +bind KP_MINUS "say ^1Bad Game" +bind KP_PLUS "say ^2Good ^3Game" +bind KP_STAR "say ^2Good ^3Luck" +bind MOUSE1 "+attack" +bind MOUSE2 "+speed_throw" +bind MOUSE3 "+talk" +bind MWHEELDOWN "+attack" +seta ai_corpseCount "10" +seta cg_blood "1" +seta cg_brass "1" +seta cg_chatHeight "8" +seta cg_chatTime "12000" +seta cg_connectionIconSize "0" +seta cg_crosshairAlpha "1" +seta cg_crosshairAlphaMin "0.5" +seta cg_crosshairDynamic "0" +seta cg_crosshairEnemyColor "1" +seta cg_cursorHints "4" +seta cg_debugInfoCornerOffset "0 0" +seta cg_descriptiveText "1" +seta cg_drawBreathHint "1" +seta cg_drawCrosshair "0" +seta cg_drawCrosshairNames "0" +seta cg_drawFPS "Simple" +seta cg_drawFPSLabels "1" +seta cg_drawLagometer "1" +seta cg_drawMantleHint "1" +seta cg_drawSnapshot "0" +seta cg_drawTurretCrosshair "1" +seta cg_fov "65" +seta cg_gameBoldMessageWidth "390" +seta cg_gameMessageWidth "455" +seta cg_headIconMinScreenRadius "0.015" +seta cg_hintFadeTime "100" +seta cg_hudChatIntermissionPosition "5 110" +seta cg_hudChatPosition "5 200" +seta cg_hudDamageIconHeight "64" +seta cg_hudDamageIconInScope "0" +seta cg_hudDamageIconOffset "128" +seta cg_hudDamageIconTime "2000" +seta cg_hudDamageIconWidth "128" +seta cg_hudGrenadeIconEnabledFlash "0" +seta cg_hudGrenadeIconHeight "25" +seta cg_hudGrenadeIconInScope "0" +seta cg_hudGrenadeIconMaxHeight "104" +seta cg_hudGrenadeIconOffset "50" +seta cg_hudGrenadeIconWidth "25" +seta cg_hudGrenadePointerHeight "12" +seta cg_hudGrenadePointerPivot "12 27" +seta cg_hudGrenadePointerWidth "25" +seta cg_hudMapBorderWidth "2" +seta cg_hudMapFriendlyHeight "15" +seta cg_hudMapFriendlyWidth "15" +seta cg_hudMapPlayerHeight "20" +seta cg_hudMapPlayerWidth "20" +seta cg_hudMapRadarLineThickness "0.15" +seta cg_hudProneY "-160" +seta cg_hudSayPosition "5 180" +seta cg_hudStanceHintPrints "0" +seta cg_hudVotePosition "5 220" +seta cg_invalidCmdHintBlinkInterval "600" +seta cg_invalidCmdHintDuration "1800" +seta cg_laserLight "0" +seta cg_mapLocationSelectionCursorSpeed "0.6" +seta cg_marks_ents_player_only "0" +seta cg_predictItems "1" +seta cg_ScoresPing_BgColor "0.25098 0.25098 0.25098 0.501961" +seta cg_ScoresPing_HighColor "0.8 0 0 1" +seta cg_ScoresPing_Interval "100" +seta cg_ScoresPing_LowColor "0 0.74902 0 1" +seta cg_ScoresPing_MaxBars "4" +seta cg_ScoresPing_MedColor "0.8 0.8 0 1" +seta cg_scriptIconSize "0" +seta cg_sprintMeterDisabledColor "0.8 0.1 0.1 0.2" +seta cg_sprintMeterEmptyColor "0.7 0.5 0.2 0.8" +seta cg_sprintMeterFullColor "0.8 0.8 0.8 0.8" +seta cg_subtitleMinTime "3" +seta cg_subtitles "1" +seta cg_subtitleWidthStandard "520" +seta cg_subtitleWidthWidescreen "520" +seta cg_teamChatsOnly "0" +seta cg_viewZSmoothingMax "16" +seta cg_viewZSmoothingMin "1" +seta cg_viewZSmoothingTime "0.1" +seta cg_voiceIconSize "0" +seta cg_weaponCycleDelay "0" +seta cg_youInKillCamSize "6" +seta cl_allowDownload "1" +seta cl_anonymous "0" +seta cl_freelook "1" +seta cl_maxpackets "30" +seta cl_maxPing "800" +seta cl_maxppf "5" +seta cl_mouseAccel "0" +seta cl_packetdup "1" +seta cl_pitchspeed "140" +seta cl_punkbuster "1" +seta cl_voice "1" +seta cl_wwwDownload "1" +seta cl_yawspeed "140" +seta com_introPlayed "1" +seta com_maxfps "125" +seta com_recommendedSet "1" +seta compassClampIcons "1" +seta compassCoords "740 3590 400" +seta compassECoordCutoff "37" +seta compassFriendlyHeight "18.75" +seta compassFriendlyWidth "18.75" +seta compassMaxRange "2500" +seta compassMinRadius "0.0001" +seta compassMinRange "0.0001" +seta compassObjectiveArrowHeight "20" +seta compassObjectiveArrowOffset "2" +seta compassObjectiveArrowRotateDist "5" +seta compassObjectiveArrowWidth "20" +seta compassObjectiveDrawLines "1" +seta compassObjectiveHeight "20" +seta compassObjectiveIconHeight "16" +seta compassObjectiveIconWidth "16" +seta compassObjectiveMaxRange "2048" +seta compassObjectiveMinAlpha "1" +seta compassObjectiveNumRings "10" +seta compassObjectiveRingSize "80" +seta compassObjectiveRingTime "10000" +seta compassObjectiveTextHeight "18" +seta compassObjectiveTextScale "0.3" +seta compassObjectiveWidth "20" +seta compassPlayerHeight "18.75" +seta compassPlayerWidth "18.75" +seta compassRadarLineThickness "0.4" +seta compassRadarPingFadeTime "4" +seta compassRadarUpdateTime "4" +seta compassRotation "1" +seta compassSize "1" +seta compassSoundPingFadeTime "2" +seta compassTickertapeStretch "0.5" +seta con_errormessagetime "8" +seta con_gameMsgWindow0FadeInTime "0.25" +seta con_gameMsgWindow0FadeOutTime "0.5" +seta con_gameMsgWindow0Filter "gamenotify obituary" +seta con_gameMsgWindow0LineCount "4" +seta con_gameMsgWindow0MsgTime "5" +seta con_gameMsgWindow0ScrollTime "0.25" +seta con_gameMsgWindow0SplitscreenScale "1.5" +seta con_gameMsgWindow1FadeInTime "0.25" +seta con_gameMsgWindow1FadeOutTime "0.01" +seta con_gameMsgWindow1Filter "boldgame" +seta con_gameMsgWindow1LineCount "5" +seta con_gameMsgWindow1MsgTime "8" +seta con_gameMsgWindow1ScrollTime "0.25" +seta con_gameMsgWindow1SplitscreenScale "1.5" +seta con_gameMsgWindow2FadeInTime "0.75" +seta con_gameMsgWindow2FadeOutTime "0.5" +seta con_gameMsgWindow2Filter "subtitle" +seta con_gameMsgWindow2LineCount "7" +seta con_gameMsgWindow2MsgTime "5" +seta con_gameMsgWindow2ScrollTime "0.25" +seta con_gameMsgWindow2SplitscreenScale "1.5" +seta con_gameMsgWindow3FadeInTime "0.25" +seta con_gameMsgWindow3FadeOutTime "0.5" +seta con_gameMsgWindow3Filter "" +seta con_gameMsgWindow3LineCount "5" +seta con_gameMsgWindow3MsgTime "5" +seta con_gameMsgWindow3ScrollTime "0.25" +seta con_gameMsgWindow3SplitscreenScale "1.5" +seta con_inputBoxColor "0.25 0.25 0.2 1" +seta con_inputHintBoxColor "0.4 0.4 0.35 1" +seta con_matchPrefixOnly "1" +seta con_minicon "0" +seta con_miniconlines "5" +seta con_minicontime "4" +seta con_outputBarColor "1 1 0.95 0.6" +seta con_outputSliderColor "0.15 0.15 0.1 0.6" +seta con_outputWindowColor "0.35 0.35 0.3 0.75" +seta con_typewriterColorGlowCheckpoint "0.6 0.5 0.6 1" +seta con_typewriterColorGlowCompleted "0 0.3 0.8 1" +seta con_typewriterColorGlowFailed "0.8 0 0 1" +seta con_typewriterColorGlowUpdated "0 0.6 0.18 1" +seta con_typewriterDecayDuration "700" +seta con_typewriterDecayStartTime "6000" +seta con_typewriterPrintSpeed "50" +seta customclass1 "M60 / RPD" +seta customclass2 "Dragon" +seta customclass3 "P90" +seta customclass4 "M4" +seta customclass5 "P90" +seta drew_notes "2" +seta dynEnt_active "1" +seta fx_marks "1" +seta fx_marks_ents "1" +seta fx_marks_smodels "1" +seta g_allowvote "1" +seta g_useGear "1" +seta hud_deathQuoteFadeTime "1000" +seta hud_enable "1" +seta hud_fade_ammodisplay "1.7" +seta hud_fade_compass "0" +seta hud_fade_healthbar "0" +seta hud_fade_offhand "1.7" +seta hud_fade_sprint "1.7" +seta hud_fade_stance "1.7" +seta hud_fadeout_speed "0.1" +seta hud_flash_period_offhand "0.5" +seta hud_flash_time_offhand "2" +seta hud_health_pulserate_critical "0.5" +seta hud_health_pulserate_injured "1" +seta hud_health_startpulse_critical "0.33" +seta hud_health_startpulse_injured "1" +seta in_mouse "1" +seta loc_forceEnglish "0" +seta loc_language "0" +seta m_filter "1" +seta m_forward "0.25" +seta m_pitch "0.022" +seta m_side "0.25" +seta m_yaw "0.022" +seta monkeytoy "0" +seta name ". is HERE" +seta net_noipx "0" +seta net_noudp "0" +seta net_socksEnabled "0" +seta net_socksPassword "" +seta net_socksPort "1080" +seta net_socksServer "" +seta net_socksUsername "" +seta r_aaAlpha "dither (fast)" +seta r_aaSamples "1" +seta r_altModelLightingUpdate "0" +seta r_aspectRatio "auto" +seta r_autopriority "0" +seta r_customMode "" +seta r_debugLineWidth "1" +seta r_depthPrepass "0" +seta r_displayRefresh "60 Hz" +seta r_distortion "0" +seta r_dlightLimit "0" +seta r_dof_enable "0" +seta r_drawDecals "1" +seta r_drawSun "1" +seta r_drawWater "0" +seta r_fastSkin "0" +seta r_fullscreen "1" +seta r_gamma "1.67857" +seta r_glow_allowed "0" +seta r_ignorehwgamma "0" +seta r_inGameVideo "1" +seta r_lodBiasRigid "-100" +seta r_lodBiasSkinned "-200" +seta r_lodScaleRigid "1" +seta r_lodScaleSkinned "1" +seta r_mode "640x480" +seta r_monitor "0" +seta r_multiGpu "0" +seta r_picmip "3" +seta r_picmip_bump "3" +seta r_picmip_manual "1" +seta r_picmip_spec "3" +seta r_picmip_water "0" +seta r_polygonOffsetBias "-1" +seta r_polygonOffsetScale "-1" +seta r_portalBevels "0.7" +seta r_preloadShaders "0" +seta r_rendererPreference "Default" +seta r_specular "0" +seta r_texFilterAnisoMax "4" +seta r_texFilterAnisoMin "1" +seta r_texFilterMipMode "Unchanged" +seta r_vsync "0" +seta r_zFeather "0" +seta ragdoll_enable "0" +seta ragdoll_max_simulating "16" +seta rate "25000" +seta sensitivity "45" +seta server1 "" +seta server10 "" +seta server11 "" +seta server12 "" +seta server13 "" +seta server14 "" +seta server15 "" +seta server16 "" +seta server2 "" +seta server3 "" +seta server4 "" +seta server5 "" +seta server6 "" +seta server7 "" +seta server8 "" +seta server9 "" +seta sm_enable "0" +seta sm_maxLights "4" +seta snaps "20" +seta snd_cinematicVolumeScale "0.85" +seta snd_enableEq "1" +seta snd_errorOnMissing "0" +seta snd_khz "44" +seta snd_levelFadeTime "250" +seta snd_outputConfiguration "Windows default" +seta snd_slaveFadeTime "500" +seta snd_touchStreamFilesOnLoad "0" +seta snd_volume "0.8" +seta sv_allowDownload "1" +seta sv_floodprotect "4" +seta sv_hostname "CoD4Host" +seta sv_maxclients "24" +seta sv_maxPing "0" +seta sv_maxRate "5000" +seta sv_minPing "0" +seta sv_punkbuster "1" +seta sv_reconnectlimit "3" +seta sv_voice "1" +seta sv_wwwBaseURL "" +seta sv_wwwDlDisconnected "0" +seta sv_wwwDownload "0" +seta sys_configSum "4379996" +seta sys_configureGHz "8.7685" +seta sys_gpu "ATI Radeon HD 2400" +seta sys_sysMB "1024" +seta ui_bigFont "0.4" +seta ui_browserFriendlyfire "-1" +seta ui_browserHardcore "-1" +seta ui_browserKillcam "-1" +seta ui_browserMod "0" +seta ui_browserOldSchool "-1" +seta ui_browserShowDedicated "0" +seta ui_browserShowEmpty "0" +seta ui_browserShowFull "0" +seta ui_browserShowPassword "-1" +seta ui_browserShowPunkBuster "-1" +seta ui_browserShowPure "1" +seta ui_currentMap "0" +seta ui_currentNetMap "0" +seta ui_dedicated "0" +seta ui_drawCrosshair "1" +seta ui_extraBigFont "0.55" +seta ui_gametype "0" +seta ui_joinGametype "0" +seta ui_maxclients "32" +seta ui_netGametype "0" +seta ui_netGametypeName "dm" +seta ui_netSource "2" +seta ui_serverStatusTimeOut "7000" +seta ui_smallFont "0.25" +seta vehDriverViewHeightMax "50" +seta vehDriverViewHeightMin "-15" +seta vid_xpos "3" +seta vid_ypos "22" +seta winvoice_mic_mute "1" +seta winvoice_mic_reclevel "65535" +seta winvoice_mic_scaler "1" +seta winvoice_save_voice "0" +con_hidechannel *; con_showchannel dontfilter error gamenotify boldgame subtitle obituary logfile_only console_only gfx sound files devgui profile ui client server system playerweap ai anim physics fx leaderboards parserscript script diff --git a/Call of Duty 4/Configs/Profiles/controls_config_mp.cfg b/Call of Duty 4/Configs/Profiles/controls_config_mp.cfg new file mode 100755 index 0000000..ad8b744 --- /dev/null +++ b/Call of Duty 4/Configs/Profiles/controls_config_mp.cfg @@ -0,0 +1,380 @@ +// generated by Call of Duty, do not modify +unbindall +bind TAB "+scores" +bind ESCAPE "togglemenu" +bind SPACE "+gostand" +bind 1 "weapnext" +bind 2 "weapnext" +bind 3 "+actionslot 3" +bind 4 "+smoke" +bind 5 "+actionslot 4" +bind 7 "+actionslot 2" +bind ` "toggleconsole" +bind A "+moveleft" +bind B "mp_QuickMessage" +bind C "gocrouch" +bind D "+moveright" +bind E "+melee" +bind F "+activate" +bind G "+frag" +bind I "chatmodepublic" +bind N "+actionslot 1" +bind O "chatmodeteam" +bind Q "+leanleft" +bind R "+reload" +bind S "+back" +bind V "+leanright" +bind W "+forward" +bind ~ "toggleconsole" +bind PAUSE "screenshotjpeg" +bind CTRL "goprone" +bind SHIFT "+breath_sprint" +bind MOUSE1 "+attack" +bind MOUSE2 "+speed_throw" +bind MOUSE3 "+talk" +bind MWHEELDOWN "+attack" +seta ai_corpseCount "10" +seta cg_blood "1" +seta cg_brass "1" +seta cg_chatHeight "8" +seta cg_chatTime "12000" +seta cg_connectionIconSize "0" +seta cg_crosshairAlpha "1" +seta cg_crosshairAlphaMin "0.5" +seta cg_crosshairDynamic "0" +seta cg_crosshairEnemyColor "1" +seta cg_cursorHints "4" +seta cg_debugInfoCornerOffset "0 0" +seta cg_descriptiveText "1" +seta cg_drawBreathHint "1" +seta cg_drawCrosshair "0" +seta cg_drawCrosshairNames "1" +seta cg_drawFPS "Off" +seta cg_drawFPSLabels "1" +seta cg_drawLagometer "0" +seta cg_drawMantleHint "1" +seta cg_drawSnapshot "0" +seta cg_drawTurretCrosshair "1" +seta cg_fov "65" +seta cg_gameBoldMessageWidth "390" +seta cg_gameMessageWidth "455" +seta cg_headIconMinScreenRadius "0.015" +seta cg_hintFadeTime "100" +seta cg_hudChatIntermissionPosition "5 110" +seta cg_hudChatPosition "5 204" +seta cg_hudDamageIconHeight "64" +seta cg_hudDamageIconInScope "0" +seta cg_hudDamageIconOffset "128" +seta cg_hudDamageIconTime "2000" +seta cg_hudDamageIconWidth "128" +seta cg_hudGrenadeIconEnabledFlash "0" +seta cg_hudGrenadeIconHeight "25" +seta cg_hudGrenadeIconInScope "0" +seta cg_hudGrenadeIconMaxHeight "104" +seta cg_hudGrenadeIconOffset "50" +seta cg_hudGrenadeIconWidth "25" +seta cg_hudGrenadePointerHeight "12" +seta cg_hudGrenadePointerPivot "12 27" +seta cg_hudGrenadePointerWidth "25" +seta cg_hudMapBorderWidth "2" +seta cg_hudMapFriendlyHeight "15" +seta cg_hudMapFriendlyWidth "15" +seta cg_hudMapPlayerHeight "20" +seta cg_hudMapPlayerWidth "20" +seta cg_hudMapRadarLineThickness "0.15" +seta cg_hudProneY "-160" +seta cg_hudSayPosition "5 180" +seta cg_hudStanceHintPrints "0" +seta cg_hudVotePosition "5 220" +seta cg_invalidCmdHintBlinkInterval "600" +seta cg_invalidCmdHintDuration "1800" +seta cg_laserLight "0" +seta cg_mapLocationSelectionCursorSpeed "0.6" +seta cg_marks_ents_player_only "0" +seta cg_predictItems "1" +seta cg_ScoresPing_BgColor "0.25098 0.25098 0.25098 0.501961" +seta cg_ScoresPing_HighColor "0.8 0 0 1" +seta cg_ScoresPing_Interval "100" +seta cg_ScoresPing_LowColor "0 0.74902 0 1" +seta cg_ScoresPing_MaxBars "4" +seta cg_ScoresPing_MedColor "0.8 0.8 0 1" +seta cg_scriptIconSize "0" +seta cg_sprintMeterDisabledColor "0.8 0.1 0.1 0.2" +seta cg_sprintMeterEmptyColor "0.7 0.5 0.2 0.8" +seta cg_sprintMeterFullColor "0.8 0.8 0.8 0.8" +seta cg_subtitleMinTime "3" +seta cg_subtitles "1" +seta cg_subtitleWidthStandard "520" +seta cg_subtitleWidthWidescreen "520" +seta cg_teamChatsOnly "0" +seta cg_viewZSmoothingMax "16" +seta cg_viewZSmoothingMin "1" +seta cg_viewZSmoothingTime "0.1" +seta cg_voiceIconSize "0" +seta cg_weaponCycleDelay "0" +seta cg_youInKillCamSize "6" +seta cl_allowDownload "1" +seta cl_anonymous "0" +seta cl_freelook "1" +seta cl_maxpackets "30" +seta cl_maxPing "800" +seta cl_maxppf "5" +seta cl_mouseAccel "0" +seta cl_packetdup "1" +seta cl_pitchspeed "140" +seta cl_punkbuster "1" +seta cl_voice "1" +seta cl_wwwDownload "1" +seta cl_yawspeed "140" +seta com_introPlayed "1" +seta com_maxfps "60" +seta com_recommendedSet "1" +seta compassClampIcons "1" +seta compassCoords "740 3590 400" +seta compassECoordCutoff "37" +seta compassFriendlyHeight "18.75" +seta compassFriendlyWidth "18.75" +seta compassMaxRange "2500" +seta compassMinRadius "0.0001" +seta compassMinRange "0.0001" +seta compassObjectiveArrowHeight "20" +seta compassObjectiveArrowOffset "2" +seta compassObjectiveArrowRotateDist "5" +seta compassObjectiveArrowWidth "20" +seta compassObjectiveDrawLines "1" +seta compassObjectiveHeight "20" +seta compassObjectiveIconHeight "16" +seta compassObjectiveIconWidth "16" +seta compassObjectiveMaxRange "2048" +seta compassObjectiveMinAlpha "1" +seta compassObjectiveNumRings "10" +seta compassObjectiveRingSize "80" +seta compassObjectiveRingTime "10000" +seta compassObjectiveTextHeight "18" +seta compassObjectiveTextScale "0.3" +seta compassObjectiveWidth "20" +seta compassPlayerHeight "18.75" +seta compassPlayerWidth "18.75" +seta compassRadarLineThickness "0.4" +seta compassRadarPingFadeTime "4" +seta compassRadarUpdateTime "4" +seta compassRotation "1" +seta compassSize "1" +seta compassSoundPingFadeTime "2" +seta compassTickertapeStretch "0.5" +seta con_errormessagetime "8" +seta con_gameMsgWindow0FadeInTime "0.25" +seta con_gameMsgWindow0FadeOutTime "0.5" +seta con_gameMsgWindow0Filter "gamenotify obituary" +seta con_gameMsgWindow0LineCount "4" +seta con_gameMsgWindow0MsgTime "5" +seta con_gameMsgWindow0ScrollTime "0.25" +seta con_gameMsgWindow0SplitscreenScale "1.5" +seta con_gameMsgWindow1FadeInTime "0.25" +seta con_gameMsgWindow1FadeOutTime "0.01" +seta con_gameMsgWindow1Filter "boldgame" +seta con_gameMsgWindow1LineCount "5" +seta con_gameMsgWindow1MsgTime "8" +seta con_gameMsgWindow1ScrollTime "0.25" +seta con_gameMsgWindow1SplitscreenScale "1.5" +seta con_gameMsgWindow2FadeInTime "0.75" +seta con_gameMsgWindow2FadeOutTime "0.5" +seta con_gameMsgWindow2Filter "subtitle" +seta con_gameMsgWindow2LineCount "7" +seta con_gameMsgWindow2MsgTime "5" +seta con_gameMsgWindow2ScrollTime "0.25" +seta con_gameMsgWindow2SplitscreenScale "1.5" +seta con_gameMsgWindow3FadeInTime "0.25" +seta con_gameMsgWindow3FadeOutTime "0.5" +seta con_gameMsgWindow3Filter "" +seta con_gameMsgWindow3LineCount "5" +seta con_gameMsgWindow3MsgTime "5" +seta con_gameMsgWindow3ScrollTime "0.25" +seta con_gameMsgWindow3SplitscreenScale "1.5" +seta con_inputBoxColor "0.25 0.25 0.2 1" +seta con_inputHintBoxColor "0.4 0.4 0.35 1" +seta con_matchPrefixOnly "1" +seta con_minicon "0" +seta con_miniconlines "5" +seta con_minicontime "4" +seta con_outputBarColor "1 1 0.95 0.6" +seta con_outputSliderColor "0.15 0.15 0.1 0.6" +seta con_outputWindowColor "0.35 0.35 0.3 0.75" +seta con_typewriterColorGlowCheckpoint "0.6 0.5 0.6 1" +seta con_typewriterColorGlowCompleted "0 0.3 0.8 1" +seta con_typewriterColorGlowFailed "0.8 0 0 1" +seta con_typewriterColorGlowUpdated "0 0.6 0.18 1" +seta con_typewriterDecayDuration "700" +seta con_typewriterDecayStartTime "6000" +seta con_typewriterPrintSpeed "50" +seta customclass1 "" +seta customclass2 "" +seta customclass3 "" +seta customclass4 "" +seta customclass5 "" +seta drew_notes "2" +seta dynEnt_active "1" +seta fx_marks "1" +seta fx_marks_ents "1" +seta fx_marks_smodels "1" +seta g_allowvote "1" +seta g_useGear "1" +seta hud_deathQuoteFadeTime "1000" +seta hud_enable "1" +seta hud_fade_ammodisplay "0" +seta hud_fade_compass "0" +seta hud_fade_healthbar "2" +seta hud_fade_offhand "0" +seta hud_fade_sprint "1.7" +seta hud_fade_stance "1.7" +seta hud_fadeout_speed "0.1" +seta hud_flash_period_offhand "0.5" +seta hud_flash_time_offhand "2" +seta hud_health_pulserate_critical "0.5" +seta hud_health_pulserate_injured "1" +seta hud_health_startpulse_critical "0.33" +seta hud_health_startpulse_injured "1" +seta in_mouse "1" +seta loc_forceEnglish "0" +seta loc_language "0" +seta m_filter "1" +seta m_forward "0.25" +seta m_pitch "0.022" +seta m_side "0.25" +seta m_yaw "0.022" +seta monkeytoy "0" +seta name ". is HERE" +seta net_noipx "0" +seta net_noudp "0" +seta net_socksEnabled "0" +seta net_socksPassword "" +seta net_socksPort "1080" +seta net_socksServer "" +seta net_socksUsername "" +seta r_aaAlpha "dither (fast)" +seta r_aaSamples "1" +seta r_altModelLightingUpdate "0" +seta r_aspectRatio "auto" +seta r_autopriority "0" +seta r_customMode "" +seta r_debugLineWidth "1" +seta r_depthPrepass "0" +seta r_displayRefresh "60 Hz" +seta r_distortion "0" +seta r_dlightLimit "0" +seta r_dof_enable "0" +seta r_drawDecals "1" +seta r_drawSun "1" +seta r_drawWater "0" +seta r_fastSkin "0" +seta r_fullscreen "1" +seta r_gamma "1.67857" +seta r_glow_allowed "0" +seta r_ignorehwgamma "0" +seta r_inGameVideo "1" +seta r_lodBiasRigid "-100" +seta r_lodBiasSkinned "-200" +seta r_lodScaleRigid "2" +seta r_lodScaleSkinned "4" +seta r_mode "640x480" +seta r_monitor "0" +seta r_multiGpu "0" +seta r_picmip "3" +seta r_picmip_bump "3" +seta r_picmip_manual "1" +seta r_picmip_spec "3" +seta r_picmip_water "0" +seta r_polygonOffsetBias "-1" +seta r_polygonOffsetScale "-1" +seta r_portalBevels "0.7" +seta r_preloadShaders "0" +seta r_rendererPreference "Default" +seta r_specular "0" +seta r_texFilterAnisoMax "4" +seta r_texFilterAnisoMin "1" +seta r_texFilterMipMode "Unchanged" +seta r_vsync "0" +seta r_zFeather "0" +seta ragdoll_enable "0" +seta ragdoll_max_simulating "16" +seta rate "25000" +seta sensitivity "45" +seta server1 "" +seta server10 "" +seta server11 "" +seta server12 "" +seta server13 "" +seta server14 "" +seta server15 "" +seta server16 "" +seta server2 "" +seta server3 "" +seta server4 "" +seta server5 "" +seta server6 "" +seta server7 "" +seta server8 "" +seta server9 "" +seta sm_enable "0" +seta sm_maxLights "4" +seta snaps "20" +seta snd_cinematicVolumeScale "0.85" +seta snd_enableEq "1" +seta snd_errorOnMissing "0" +seta snd_khz "44" +seta snd_levelFadeTime "250" +seta snd_outputConfiguration "Windows default" +seta snd_slaveFadeTime "500" +seta snd_touchStreamFilesOnLoad "0" +seta snd_volume "0.8" +seta sv_allowDownload "1" +seta sv_floodprotect "4" +seta sv_hostname "CoD4Host" +seta sv_maxclients "24" +seta sv_maxPing "0" +seta sv_maxRate "5000" +seta sv_minPing "0" +seta sv_punkbuster "1" +seta sv_reconnectlimit "3" +seta sv_voice "0" +seta sv_wwwBaseURL "" +seta sv_wwwDlDisconnected "0" +seta sv_wwwDownload "0" +seta sys_configSum "4379996" +seta sys_configureGHz "8.7685" +seta sys_gpu "ATI Radeon HD 2400" +seta sys_sysMB "1024" +seta ui_bigFont "0.4" +seta ui_browserFriendlyfire "-1" +seta ui_browserHardcore "-1" +seta ui_browserKillcam "-1" +seta ui_browserMod "0" +seta ui_browserOldSchool "-1" +seta ui_browserShowDedicated "0" +seta ui_browserShowEmpty "0" +seta ui_browserShowFull "0" +seta ui_browserShowPassword "-1" +seta ui_browserShowPunkBuster "-1" +seta ui_browserShowPure "1" +seta ui_currentMap "0" +seta ui_currentNetMap "0" +seta ui_dedicated "0" +seta ui_drawCrosshair "1" +seta ui_extraBigFont "0.55" +seta ui_gametype "0" +seta ui_joinGametype "0" +seta ui_maxclients "32" +seta ui_netGametype "0" +seta ui_netGametypeName "dm" +seta ui_netSource "1" +seta ui_serverStatusTimeOut "7000" +seta ui_smallFont "0.25" +seta vehDriverViewHeightMax "50" +seta vehDriverViewHeightMin "-15" +seta vid_xpos "3" +seta vid_ypos "22" +seta winvoice_mic_mute "1" +seta winvoice_mic_reclevel "65535" +seta winvoice_mic_scaler "1" +seta winvoice_save_voice "0" +con_hidechannel *; con_showchannel dontfilter error gamenotify boldgame subtitle obituary logfile_only console_only gfx sound files devgui profile ui client server system playerweap ai anim physics fx leaderboards parserscript script diff --git a/Call of Duty 4/Configs/Profiles/default_config_mp.cfg b/Call of Duty 4/Configs/Profiles/default_config_mp.cfg new file mode 100755 index 0000000..2a62cee --- /dev/null +++ b/Call of Duty 4/Configs/Profiles/default_config_mp.cfg @@ -0,0 +1,384 @@ +// generated by Call of Duty, do not modify +unbindall +bind TAB "+scores" +bind ESCAPE "togglemenu" +bind SPACE "+gostand" +bind 1 "weapnext" +bind 2 "weapnext" +bind 4 "+smoke" +bind 5 "+actionslot 3" +bind 6 "+actionslot 4" +bind 7 "+actionslot 2" +bind ` "toggleconsole" +bind A "+moveleft" +bind B "mp_QuickMessage" +bind C "gocrouch" +bind D "+moveright" +bind E "+leanright" +bind F "+activate" +bind G "+frag" +bind N "+actionslot 1" +bind Q "+leanleft" +bind R "+reload" +bind S "+back" +bind T "chatmodepublic" +bind V "+melee" +bind W "+forward" +bind Y "chatmodeteam" +bind Z "+talk" +bind ~ "toggleconsole" +bind PAUSE "toggle cl_paused" +bind CTRL "goprone" +bind SHIFT "+breath_sprint" +bind F1 "vote yes" +bind F2 "vote no" +bind F4 "+scores" +bind F12 "screenshotJPEG" +bind MOUSE1 "+attack" +bind MOUSE2 "+toggleads_throw" +bind MOUSE3 "+frag" +seta ai_corpseCount "10" +seta cg_blood "1" +seta cg_brass "1" +seta cg_chatHeight "8" +seta cg_chatTime "12000" +seta cg_connectionIconSize "0" +seta cg_crosshairAlpha "1" +seta cg_crosshairAlphaMin "0.5" +seta cg_crosshairDynamic "0" +seta cg_crosshairEnemyColor "1" +seta cg_cursorHints "4" +seta cg_debugInfoCornerOffset "0 0" +seta cg_descriptiveText "1" +seta cg_drawBreathHint "1" +seta cg_drawCrosshair "0" +seta cg_drawCrosshairNames "1" +seta cg_drawFPS "Off" +seta cg_drawFPSLabels "1" +seta cg_drawLagometer "0" +seta cg_drawMantleHint "1" +seta cg_drawSnapshot "0" +seta cg_drawTurretCrosshair "1" +seta cg_fov "65" +seta cg_gameBoldMessageWidth "390" +seta cg_gameMessageWidth "455" +seta cg_headIconMinScreenRadius "0.015" +seta cg_hintFadeTime "100" +seta cg_hudChatIntermissionPosition "5 110" +seta cg_hudChatPosition "5 204" +seta cg_hudDamageIconHeight "64" +seta cg_hudDamageIconInScope "0" +seta cg_hudDamageIconOffset "128" +seta cg_hudDamageIconTime "2000" +seta cg_hudDamageIconWidth "128" +seta cg_hudGrenadeIconEnabledFlash "0" +seta cg_hudGrenadeIconHeight "25" +seta cg_hudGrenadeIconInScope "0" +seta cg_hudGrenadeIconMaxHeight "104" +seta cg_hudGrenadeIconOffset "50" +seta cg_hudGrenadeIconWidth "25" +seta cg_hudGrenadePointerHeight "12" +seta cg_hudGrenadePointerPivot "12 27" +seta cg_hudGrenadePointerWidth "25" +seta cg_hudMapBorderWidth "2" +seta cg_hudMapFriendlyHeight "15" +seta cg_hudMapFriendlyWidth "15" +seta cg_hudMapPlayerHeight "20" +seta cg_hudMapPlayerWidth "20" +seta cg_hudMapRadarLineThickness "0.15" +seta cg_hudProneY "-160" +seta cg_hudSayPosition "5 180" +seta cg_hudStanceHintPrints "0" +seta cg_hudVotePosition "5 220" +seta cg_invalidCmdHintBlinkInterval "600" +seta cg_invalidCmdHintDuration "1800" +seta cg_laserLight "0" +seta cg_mapLocationSelectionCursorSpeed "0.6" +seta cg_marks_ents_player_only "0" +seta cg_predictItems "1" +seta cg_ScoresPing_BgColor "0.25098 0.25098 0.25098 0.501961" +seta cg_ScoresPing_HighColor "0.8 0 0 1" +seta cg_ScoresPing_Interval "100" +seta cg_ScoresPing_LowColor "0 0.74902 0 1" +seta cg_ScoresPing_MaxBars "4" +seta cg_ScoresPing_MedColor "0.8 0.8 0 1" +seta cg_scriptIconSize "0" +seta cg_sprintMeterDisabledColor "0.8 0.1 0.1 0.2" +seta cg_sprintMeterEmptyColor "0.7 0.5 0.2 0.8" +seta cg_sprintMeterFullColor "0.8 0.8 0.8 0.8" +seta cg_subtitleMinTime "3" +seta cg_subtitles "1" +seta cg_subtitleWidthStandard "520" +seta cg_subtitleWidthWidescreen "520" +seta cg_teamChatsOnly "0" +seta cg_viewZSmoothingMax "16" +seta cg_viewZSmoothingMin "1" +seta cg_viewZSmoothingTime "0.1" +seta cg_voiceIconSize "0" +seta cg_weaponCycleDelay "0" +seta cg_youInKillCamSize "6" +seta cl_allowDownload "1" +seta cl_anonymous "0" +seta cl_freelook "1" +seta cl_maxpackets "30" +seta cl_maxPing "800" +seta cl_maxppf "5" +seta cl_mouseAccel "0" +seta cl_packetdup "1" +seta cl_pitchspeed "140" +seta cl_punkbuster "1" +seta cl_voice "1" +seta cl_wwwDownload "1" +seta cl_yawspeed "140" +seta com_introPlayed "1" +seta com_maxfps "85" +seta com_recommendedSet "1" +seta compassClampIcons "1" +seta compassCoords "740 3590 400" +seta compassECoordCutoff "37" +seta compassFriendlyHeight "18.75" +seta compassFriendlyWidth "18.75" +seta compassMaxRange "2500" +seta compassMinRadius "0.0001" +seta compassMinRange "0.0001" +seta compassObjectiveArrowHeight "20" +seta compassObjectiveArrowOffset "2" +seta compassObjectiveArrowRotateDist "5" +seta compassObjectiveArrowWidth "20" +seta compassObjectiveDrawLines "1" +seta compassObjectiveHeight "20" +seta compassObjectiveIconHeight "16" +seta compassObjectiveIconWidth "16" +seta compassObjectiveMaxRange "2048" +seta compassObjectiveMinAlpha "1" +seta compassObjectiveNumRings "10" +seta compassObjectiveRingSize "80" +seta compassObjectiveRingTime "10000" +seta compassObjectiveTextHeight "18" +seta compassObjectiveTextScale "0.3" +seta compassObjectiveWidth "20" +seta compassPlayerHeight "18.75" +seta compassPlayerWidth "18.75" +seta compassRadarLineThickness "0.4" +seta compassRadarPingFadeTime "4" +seta compassRadarUpdateTime "4" +seta compassRotation "1" +seta compassSize "1" +seta compassSoundPingFadeTime "2" +seta compassTickertapeStretch "0.5" +seta con_errormessagetime "8" +seta con_gameMsgWindow0FadeInTime "0.25" +seta con_gameMsgWindow0FadeOutTime "0.5" +seta con_gameMsgWindow0Filter "gamenotify obituary" +seta con_gameMsgWindow0LineCount "4" +seta con_gameMsgWindow0MsgTime "5" +seta con_gameMsgWindow0ScrollTime "0.25" +seta con_gameMsgWindow0SplitscreenScale "1.5" +seta con_gameMsgWindow1FadeInTime "0.25" +seta con_gameMsgWindow1FadeOutTime "0.01" +seta con_gameMsgWindow1Filter "boldgame" +seta con_gameMsgWindow1LineCount "5" +seta con_gameMsgWindow1MsgTime "8" +seta con_gameMsgWindow1ScrollTime "0.25" +seta con_gameMsgWindow1SplitscreenScale "1.5" +seta con_gameMsgWindow2FadeInTime "0.75" +seta con_gameMsgWindow2FadeOutTime "0.5" +seta con_gameMsgWindow2Filter "subtitle" +seta con_gameMsgWindow2LineCount "7" +seta con_gameMsgWindow2MsgTime "5" +seta con_gameMsgWindow2ScrollTime "0.25" +seta con_gameMsgWindow2SplitscreenScale "1.5" +seta con_gameMsgWindow3FadeInTime "0.25" +seta con_gameMsgWindow3FadeOutTime "0.5" +seta con_gameMsgWindow3Filter "" +seta con_gameMsgWindow3LineCount "5" +seta con_gameMsgWindow3MsgTime "5" +seta con_gameMsgWindow3ScrollTime "0.25" +seta con_gameMsgWindow3SplitscreenScale "1.5" +seta con_inputBoxColor "0.25 0.25 0.2 1" +seta con_inputHintBoxColor "0.4 0.4 0.35 1" +seta con_matchPrefixOnly "1" +seta con_minicon "0" +seta con_miniconlines "5" +seta con_minicontime "4" +seta con_outputBarColor "1 1 0.95 0.6" +seta con_outputSliderColor "0.15 0.15 0.1 0.6" +seta con_outputWindowColor "0.35 0.35 0.3 0.75" +seta con_typewriterColorGlowCheckpoint "0.6 0.5 0.6 1" +seta con_typewriterColorGlowCompleted "0 0.3 0.8 1" +seta con_typewriterColorGlowFailed "0.8 0 0 1" +seta con_typewriterColorGlowUpdated "0 0.6 0.18 1" +seta con_typewriterDecayDuration "700" +seta con_typewriterDecayStartTime "6000" +seta con_typewriterPrintSpeed "50" +seta customclass1 "Custom Slot 1" +seta customclass2 "Custom Slot 2" +seta customclass3 "Custom Slot 3" +seta customclass4 "Custom Slot 4" +seta customclass5 "Custom Slot 5" +seta drew_notes "2" +seta dynEnt_active "1" +seta fx_marks "1" +seta fx_marks_ents "1" +seta fx_marks_smodels "1" +seta g_allowvote "1" +seta g_useGear "1" +seta hud_deathQuoteFadeTime "1000" +seta hud_enable "1" +seta hud_fade_ammodisplay "0" +seta hud_fade_compass "0" +seta hud_fade_healthbar "2" +seta hud_fade_offhand "0" +seta hud_fade_sprint "1.7" +seta hud_fade_stance "1.7" +seta hud_fadeout_speed "0.1" +seta hud_flash_period_offhand "0.5" +seta hud_flash_time_offhand "2" +seta hud_health_pulserate_critical "0.5" +seta hud_health_pulserate_injured "1" +seta hud_health_startpulse_critical "0.33" +seta hud_health_startpulse_injured "1" +seta in_mouse "1" +seta loc_forceEnglish "0" +seta loc_language "0" +seta m_filter "0" +seta m_forward "0.25" +seta m_pitch "0.022" +seta m_side "0.25" +seta m_yaw "0.022" +seta monkeytoy "0" +seta name "." +seta net_noipx "0" +seta net_noudp "0" +seta net_socksEnabled "0" +seta net_socksPassword "" +seta net_socksPort "1080" +seta net_socksServer "" +seta net_socksUsername "" +seta r_aaAlpha "dither (fast)" +seta r_aaSamples "2" +seta r_altModelLightingUpdate "0" +seta r_aspectRatio "auto" +seta r_autopriority "0" +seta r_customMode "" +seta r_debugLineWidth "1" +seta r_depthPrepass "0" +seta r_displayRefresh "60 Hz" +seta r_distortion "0" +seta r_dlightLimit "0" +seta r_dof_enable "0" +seta r_drawDecals "1" +seta r_drawSun "1" +seta r_drawWater "1" +seta r_fastSkin "0" +seta r_fullscreen "1" +seta r_gamma "0.8" +seta r_glow_allowed "0" +seta r_ignorehwgamma "0" +seta r_inGameVideo "1" +seta r_lodBiasRigid "0" +seta r_lodBiasSkinned "0" +seta r_lodScaleRigid "1" +seta r_lodScaleSkinned "1" +seta r_mode "640x480" +seta r_monitor "0" +seta r_multiGpu "0" +seta r_picmip "0" +seta r_picmip_bump "1" +seta r_picmip_manual "0" +seta r_picmip_spec "1" +seta r_picmip_water "0" +seta r_polygonOffsetBias "-1" +seta r_polygonOffsetScale "-1" +seta r_portalBevels "0.7" +seta r_preloadShaders "0" +seta r_rendererPreference "Default" +seta r_specular "0" +seta r_texFilterAnisoMax "4" +seta r_texFilterAnisoMin "1" +seta r_texFilterMipMode "Unchanged" +seta r_vsync "0" +seta r_zFeather "0" +seta ragdoll_enable "1" +seta ragdoll_max_simulating "16" +seta rate "25000" +seta sensitivity "19.2286" +seta server1 "" +seta server10 "" +seta server11 "" +seta server12 "" +seta server13 "" +seta server14 "" +seta server15 "" +seta server16 "" +seta server2 "" +seta server3 "" +seta server4 "" +seta server5 "" +seta server6 "" +seta server7 "" +seta server8 "" +seta server9 "" +seta sm_enable "0" +seta sm_maxLights "4" +seta snaps "20" +seta snd_cinematicVolumeScale "0.85" +seta snd_enableEq "1" +seta snd_errorOnMissing "0" +seta snd_khz "44" +seta snd_levelFadeTime "250" +seta snd_outputConfiguration "Windows default" +seta snd_slaveFadeTime "500" +seta snd_touchStreamFilesOnLoad "0" +seta snd_volume "0.8" +seta sv_allowDownload "1" +seta sv_floodprotect "4" +seta sv_hostname "CoD4Host" +seta sv_maxclients "24" +seta sv_maxPing "0" +seta sv_maxRate "5000" +seta sv_minPing "0" +seta sv_punkbuster "1" +seta sv_reconnectlimit "3" +seta sv_voice "0" +seta sv_wwwBaseURL "" +seta sv_wwwDlDisconnected "0" +seta sv_wwwDownload "0" +seta sys_configSum "4379996" +seta sys_configureGHz "8.75788" +seta sys_gpu "ATI Radeon HD 2400" +seta sys_sysMB "1024" +seta ui_bigFont "0.4" +seta ui_browserFriendlyfire "-1" +seta ui_browserHardcore "-1" +seta ui_browserKillcam "-1" +seta ui_browserMod "0" +seta ui_browserOldSchool "-1" +seta ui_browserShowDedicated "0" +seta ui_browserShowEmpty "0" +seta ui_browserShowFull "1" +seta ui_browserShowPassword "-1" +seta ui_browserShowPunkBuster "-1" +seta ui_browserShowPure "1" +seta ui_currentMap "0" +seta ui_currentNetMap "0" +seta ui_dedicated "0" +seta ui_drawCrosshair "1" +seta ui_extraBigFont "0.55" +seta ui_gametype "0" +seta ui_joinGametype "0" +seta ui_maxclients "32" +seta ui_netGametype "0" +seta ui_netGametypeName "dm" +seta ui_netSource "2" +seta ui_serverStatusTimeOut "7000" +seta ui_smallFont "0.25" +seta vehDriverViewHeightMax "50" +seta vehDriverViewHeightMin "-15" +seta vid_xpos "3" +seta vid_ypos "22" +seta winvoice_mic_mute "1" +seta winvoice_mic_reclevel "65535" +seta winvoice_mic_scaler "1" +seta winvoice_save_voice "0" +con_hidechannel *; con_showchannel dontfilter error gamenotify boldgame subtitle obituary logfile_only console_only gfx sound files devgui profile ui client server system playerweap ai anim physics fx leaderboards parserscript script diff --git a/Call of Duty 4/Configs/Profiles/original_config_mp.cfg b/Call of Duty 4/Configs/Profiles/original_config_mp.cfg new file mode 100755 index 0000000..9d7a773 --- /dev/null +++ b/Call of Duty 4/Configs/Profiles/original_config_mp.cfg @@ -0,0 +1,403 @@ +// generated by Call of Duty, do not modify +unbindall +bind TAB "+scores" +bind ESCAPE "togglemenu" +bind SPACE "+gostand" +bind 1 "weapnext" +bind 2 "weapnext" +bind 4 "+smoke" +bind 5 "+actionslot 3" +bind 6 "+actionslot 4" +bind 7 "+actionslot 2" +bind ` "toggleconsole" +bind A "+moveleft" +bind B "mp_QuickMessage" +bind C "gocrouch" +bind D "+moveright" +bind E "+leanright" +bind F "+activate" +bind G "+frag" +bind N "+actionslot 1" +bind Q "+leanleft" +bind R "+reload" +bind S "+back" +bind T "chatmodepublic" +bind V "+melee" +bind W "+forward" +bind Y "chatmodeteam" +bind Z "+talk" +bind ~ "toggleconsole" +bind PAUSE "toggle cl_paused" +bind CTRL "goprone" +bind SHIFT "+breath_sprint" +bind F1 "vote yes" +bind F2 "vote no" +bind F4 "+scores" +bind F12 "screenshotJPEG" +bind MOUSE1 "+attack" +bind MOUSE2 "+toggleads_throw" +bind MOUSE3 "+frag" +seta ai_corpseCount "10" +seta cg_blood "1" +seta cg_brass "0" +seta cg_chatHeight "8" +seta cg_chatTime "12000" +seta cg_connectionIconSize "0" +seta cg_crosshairAlpha "1" +seta cg_crosshairAlphaMin "0.5" +seta cg_crosshairDynamic "0" +seta cg_crosshairEnemyColor "1" +seta cg_cursorHints "1" +seta cg_debugInfoCornerOffset "0 0" +seta cg_descriptiveText "1" +seta cg_drawBreathHint "1" +seta cg_drawCrosshair "0" +seta cg_drawCrosshairNames "0" +seta cg_drawFPS "Simple" +seta cg_drawFPSLabels "1" +seta cg_drawLagometer "1" +seta cg_drawMantleHint "1" +seta cg_drawSnapshot "0" +seta cg_drawTurretCrosshair "1" +seta cg_fov "65" +seta cg_gameBoldMessageWidth "390" +seta cg_gameMessageWidth "455" +seta cg_headIconMinScreenRadius "0.015" +seta cg_hintFadeTime "100" +seta cg_hudChatIntermissionPosition "5 110" +seta cg_hudChatPosition "5 200" +seta cg_hudDamageIconHeight "64" +seta cg_hudDamageIconInScope "0" +seta cg_hudDamageIconOffset "128" +seta cg_hudDamageIconTime "2000" +seta cg_hudDamageIconWidth "128" +seta cg_hudGrenadeIconEnabledFlash "0" +seta cg_hudGrenadeIconHeight "25" +seta cg_hudGrenadeIconInScope "0" +seta cg_hudGrenadeIconMaxHeight "104" +seta cg_hudGrenadeIconOffset "50" +seta cg_hudGrenadeIconWidth "25" +seta cg_hudGrenadePointerHeight "12" +seta cg_hudGrenadePointerPivot "12 27" +seta cg_hudGrenadePointerWidth "25" +seta cg_hudMapBorderWidth "2" +seta cg_hudMapFriendlyHeight "15" +seta cg_hudMapFriendlyWidth "15" +seta cg_hudMapPlayerHeight "20" +seta cg_hudMapPlayerWidth "20" +seta cg_hudMapRadarLineThickness "0.15" +seta cg_hudProneY "-160" +seta cg_hudSayPosition "5 180" +seta cg_hudStanceHintPrints "0" +seta cg_hudVotePosition "5 220" +seta cg_invalidCmdHintBlinkInterval "600" +seta cg_invalidCmdHintDuration "1800" +seta cg_laserLight "1" +seta cg_mapLocationSelectionCursorSpeed "0.6" +seta cg_marks_ents_player_only "0" +seta cg_predictItems "1" +seta cg_ScoresPing_BgColor "0 0 0 0" +seta cg_ScoresPing_HighColor "0.8 0 0 1" +seta cg_ScoresPing_Interval "20" +seta cg_ScoresPing_LowColor "0 0.8 0 1" +seta cg_ScoresPing_MaxBars "10" +seta cg_ScoresPing_MedColor "0.8 0.8 0 1" +seta cg_scriptIconSize "0" +seta cg_sprintMeterDisabledColor "0.8 0.1 0.1 0.2" +seta cg_sprintMeterEmptyColor "0.7 0.5 0.2 0.8" +seta cg_sprintMeterFullColor "0.8 0.8 0.8 0.8" +seta cg_subtitleMinTime "3" +seta cg_subtitles "1" +seta cg_subtitleWidthStandard "520" +seta cg_subtitleWidthWidescreen "520" +seta cg_teamChatsOnly "0" +seta cg_viewZSmoothingMax "16" +seta cg_viewZSmoothingMin "1" +seta cg_viewZSmoothingTime "0.1" +seta cg_voiceIconSize "1" +seta cg_weaponCycleDelay "0" +seta cg_youInKillCamSize "6" +seta cl_allowDownload "1" +seta cl_anonymous "0" +seta cl_freelook "1" +seta cl_maxpackets "30" +seta cl_maxPing "600" +seta cl_maxppf "5" +seta cl_mouseAccel "0" +seta cl_packetdup "1" +seta cl_pitchspeed "140" +seta cl_punkbuster "1" +seta cl_voice "1" +seta cl_wwwDownload "1" +seta cl_yawspeed "140" +seta com_introPlayed "1" +seta com_maxfps "60" +seta com_recommendedSet "1" +seta compassClampIcons "1" +seta compassCoords "740 3590 400" +seta compassECoordCutoff "37" +seta compassFriendlyHeight "18.75" +seta compassFriendlyWidth "18.75" +seta compassMaxRange "2500" +seta compassMinRadius "0.0001" +seta compassMinRange "0.0001" +seta compassObjectiveArrowHeight "20" +seta compassObjectiveArrowOffset "2" +seta compassObjectiveArrowRotateDist "5" +seta compassObjectiveArrowWidth "20" +seta compassObjectiveDrawLines "1" +seta compassObjectiveHeight "20" +seta compassObjectiveIconHeight "16" +seta compassObjectiveIconWidth "16" +seta compassObjectiveMaxRange "2048" +seta compassObjectiveMinAlpha "1" +seta compassObjectiveNumRings "10" +seta compassObjectiveRingSize "80" +seta compassObjectiveRingTime "10000" +seta compassObjectiveTextHeight "18" +seta compassObjectiveTextScale "0.3" +seta compassObjectiveWidth "20" +seta compassPlayerHeight "18.75" +seta compassPlayerWidth "18.75" +seta compassRadarLineThickness "0.4" +seta compassRadarPingFadeTime "4" +seta compassRadarUpdateTime "4" +seta compassRotation "1" +seta compassSize "1" +seta compassSoundPingFadeTime "2" +seta compassTickertapeStretch "0.5" +seta con_errormessagetime "8" +seta con_gameMsgWindow0FadeInTime "0.25" +seta con_gameMsgWindow0FadeOutTime "0.5" +seta con_gameMsgWindow0Filter "gamenotify obituary" +seta con_gameMsgWindow0LineCount "4" +seta con_gameMsgWindow0MsgTime "5" +seta con_gameMsgWindow0ScrollTime "0.25" +seta con_gameMsgWindow0SplitscreenScale "1.5" +seta con_gameMsgWindow1FadeInTime "0.25" +seta con_gameMsgWindow1FadeOutTime "0.01" +seta con_gameMsgWindow1Filter "boldgame" +seta con_gameMsgWindow1LineCount "5" +seta con_gameMsgWindow1MsgTime "8" +seta con_gameMsgWindow1ScrollTime "0.25" +seta con_gameMsgWindow1SplitscreenScale "1.5" +seta con_gameMsgWindow2FadeInTime "0.75" +seta con_gameMsgWindow2FadeOutTime "0.5" +seta con_gameMsgWindow2Filter "subtitle" +seta con_gameMsgWindow2LineCount "7" +seta con_gameMsgWindow2MsgTime "5" +seta con_gameMsgWindow2ScrollTime "0.25" +seta con_gameMsgWindow2SplitscreenScale "1.5" +seta con_gameMsgWindow3FadeInTime "0.25" +seta con_gameMsgWindow3FadeOutTime "0.5" +seta con_gameMsgWindow3Filter "" +seta con_gameMsgWindow3LineCount "5" +seta con_gameMsgWindow3MsgTime "5" +seta con_gameMsgWindow3ScrollTime "0.25" +seta con_gameMsgWindow3SplitscreenScale "1.5" +seta con_inputBoxColor "0.25 0.25 0.2 1" +seta con_inputHintBoxColor "0.4 0.4 0.35 1" +seta con_matchPrefixOnly "1" +seta con_minicon "0" +seta con_miniconlines "5" +seta con_minicontime "4" +seta con_outputBarColor "1 0 0 1" +seta con_outputSliderColor "0 1 0 1" +seta con_outputWindowColor "0 0 0.5 0.75" +seta con_typewriterColorGlowCheckpoint "0.6 0.5 0.6 1" +seta con_typewriterColorGlowCompleted "0 0.3 0.8 1" +seta con_typewriterColorGlowFailed "0.8 0 0 1" +seta con_typewriterColorGlowUpdated "0 0.6 0.18 1" +seta con_typewriterDecayDuration "700" +seta con_typewriterDecayStartTime "6000" +seta con_typewriterPrintSpeed "50" +seta customclass1 "Custom Slot 1" +seta customclass2 "Custom Slot 2" +seta customclass3 "Custom Slot 3" +seta customclass4 "Custom Slot 4" +seta customclass5 "Custom Slot 5" +seta drew_notes "2" +seta dynEnt_active "0" +seta fx_marks "0" +seta fx_marks_ents "1" +seta fx_marks_smodels "1" +seta g_allowvote "1" +seta g_banIPs "" +seta g_clonePlayerMaxVelocity "80" +seta g_deadChat "1" +seta g_dropForwardSpeed "10" +seta g_dropHorzSpeedRand "100" +seta g_dropUpSpeedBase "10" +seta g_dropUpSpeedRand "5" +seta g_log "games_mp.log" +seta g_logSync "0" +seta g_oldVoting "1" +seta g_playerCollisionEjectSpeed "25" +seta g_redCrosshairs "1" +seta g_useGear "1" +seta g_useholdspawndelay "500" +seta g_voiceChatTalkingDuration "500" +seta g_voteAbstainWeight "0.5" +seta hud_deathQuoteFadeTime "1000" +seta hud_enable "1" +seta hud_fade_ammodisplay "1.7" +seta hud_fade_compass "0" +seta hud_fade_healthbar "0" +seta hud_fade_offhand "1.7" +seta hud_fade_sprint "1.7" +seta hud_fade_stance "0" +seta hud_fadeout_speed "0.1" +seta hud_flash_period_offhand "0.5" +seta hud_flash_time_offhand "2" +seta hud_health_pulserate_critical "0.5" +seta hud_health_pulserate_injured "1" +seta hud_health_startpulse_critical "0.33" +seta hud_health_startpulse_injured "1" +seta in_mouse "1" +seta loc_forceEnglish "0" +seta loc_language "0" +seta m_filter "0" +seta m_forward "0.25" +seta m_pitch "0.022" +seta m_side "0.25" +seta m_yaw "0.022" +seta monkeytoy "0" +seta name ". is HERE" +seta net_noipx "0" +seta net_noudp "0" +seta net_socksEnabled "0" +seta net_socksPassword "" +seta net_socksPort "1080" +seta net_socksServer "" +seta net_socksUsername "" +seta r_aaAlpha "dither (fast)" +seta r_aaSamples "1" +seta r_altModelLightingUpdate "0" +seta r_aspectRatio "auto" +seta r_autopriority "0" +seta r_customMode "" +seta r_debugLineWidth "1" +seta r_depthPrepass "0" +seta r_detail "0" +seta r_displayRefresh "60 Hz" +seta r_distortion "0" +seta r_dlightLimit "0" +seta r_dof_enable "0" +seta r_drawDecals "1" +seta r_drawSun "0" +seta r_drawWater "0" +seta r_fastSkin "0" +seta r_fullscreen "1" +seta r_gamma "1.79762" +seta r_glow_allowed "0" +seta r_ignorehwgamma "0" +seta r_inGameVideo "1" +seta r_lodBiasRigid "0" +seta r_lodBiasSkinned "0" +seta r_lodScaleRigid "1" +seta r_lodScaleSkinned "1" +seta r_mode "640x480" +seta r_monitor "0" +seta r_multiGpu "0" +seta r_picmip "3" +seta r_picmip_bump "3" +seta r_picmip_manual "1" +seta r_picmip_spec "3" +seta r_picmip_water "0" +seta r_polygonOffsetBias "-1" +seta r_polygonOffsetScale "-1" +seta r_portalBevels "0.7" +seta r_preloadShaders "0" +seta r_rendererPreference "Default" +seta r_specular "0" +seta r_texFilterAnisoMax "4" +seta r_texFilterAnisoMin "1" +seta r_texFilterMipMode "Unchanged" +seta r_vsync "0" +seta r_zFeather "0" +seta ragdoll_enable "0" +seta ragdoll_max_simulating "16" +seta rate "25000" +seta sensitivity "5" +seta server1 "" +seta server10 "" +seta server11 "" +seta server12 "" +seta server13 "" +seta server14 "" +seta server15 "" +seta server16 "" +seta server2 "" +seta server3 "" +seta server4 "" +seta server5 "" +seta server6 "" +seta server7 "" +seta server8 "" +seta server9 "" +seta sm_enable "0" +seta sm_maxLights "4" +seta snaps "30" +seta snd_cinematicVolumeScale "0.85" +seta snd_enableEq "1" +seta snd_errorOnMissing "0" +seta snd_khz "22" +seta snd_levelFadeTime "250" +seta snd_outputConfiguration "Windows default" +seta snd_slaveFadeTime "500" +seta snd_touchStreamFilesOnLoad "0" +seta snd_volume "0.785714" +seta sv_allowDownload "1" +seta sv_floodprotect "1" +seta sv_hostname "^5$('*') ^2Brdcast ^3HC ^1SnD" +seta sv_maxclients "20" +seta sv_maxPing "600" +seta sv_maxRate "5000" +seta sv_minPing "0" +seta sv_punkbuster "0" +seta sv_reconnectlimit "3" +seta sv_voice "1" +seta sv_wwwBaseURL "" +seta sv_wwwDlDisconnected "0" +seta sv_wwwDownload "0" +seta sys_configSum "4379996" +seta sys_configureGHz "8.77235" +seta sys_gpu "ATI Radeon HD 2400" +seta sys_sysMB "1024" +seta ui_bigFont "0.4" +seta ui_browserFriendlyfire "-1" +seta ui_browserHardcore "-1" +seta ui_browserKillcam "-1" +seta ui_browserMod "-1" +seta ui_browserOldSchool "-1" +seta ui_browserShowDedicated "0" +seta ui_browserShowEmpty "1" +seta ui_browserShowFull "0" +seta ui_browserShowPassword "0" +seta ui_browserShowPunkBuster "-1" +seta ui_browserShowPure "1" +seta ui_currentMap "20" +seta ui_currentNetMap "20" +seta ui_dedicated "0" +seta ui_drawCrosshair "0" +seta ui_extraBigFont "0.55" +seta ui_gametype "0" +seta ui_joinGametype "0" +seta ui_maxclients "32" +seta ui_netGametype "2" +seta ui_netGametypeName "koth" +seta ui_netSource "2" +seta ui_serverStatusTimeOut "7000" +seta ui_smallFont "0.25" +seta vehDriverViewHeightMax "50" +seta vehDriverViewHeightMin "-15" +seta vid_xpos "3" +seta vid_ypos "22" +seta voice_deadChat "0" +seta voice_global "0" +seta voice_localEcho "0" +seta winvoice_mic_mute "1" +seta winvoice_mic_reclevel "65535" +seta winvoice_mic_scaler "1" +seta winvoice_save_voice "0" +con_hidechannel *; con_showchannel dontfilter error gamenotify boldgame subtitle obituary logfile_only console_only gfx sound files devgui profile ui client server system playerweap ai anim physics fx leaderboards parserscript script \ No newline at end of file diff --git a/Call of Duty 4/Configs/Server Config/Broadcast HC SnD Big.cfg b/Call of Duty 4/Configs/Server Config/Broadcast HC SnD Big.cfg new file mode 100755 index 0000000..996951c --- /dev/null +++ b/Call of Duty 4/Configs/Server Config/Broadcast HC SnD Big.cfg @@ -0,0 +1,566 @@ +//****************************************************************************** +// Call of Duty 4 - Config by RigorousSphinx +//****************************************************************************** +//****************************************************************************** +// Public Information +//****************************************************************************** +sets sv_hostname "^5$('*') ^2Brdcast ^3HC ^1SnD" +sets _Admin "RigorousSphinx" +sets _Location "North Carolina, US" +sets _Maps "CoD4 Stock" +set scr_motd "^3Welcome to $('*') Broadcast HC SnD. Enjoy!!" +// set scr_server_rule_1 "Rule 1. Dont Cheat!" +// set scr_server_rule_2 "Rule 2. Dont Abuse the server" +// set scr_server_rule_3 "Rule 3. Dont Chat Spam" + +//****************************************************************************** +// Common Server Settings +//****************************************************************************** +// Log Settings +set g_logsync "2" // 0 = No Log, 1 = Buffered, 2 = Continuous, 3 = Append +set logfile "1" // 0 = No Log, 1 = Log File Enabled +set g_log "games_mp.log" // Name of log file, D: games_mp.log +set sv_log_damage "1" + +// Network Options +// set net_ip "1.2.3.4" // Set your servers IP address +// set net_port "28960" // Set your port number +set com_hunkMegs "512" +set net_noipx "1" // Allow ONLY tcp/ip protocol, player/server communications + +// Server Network Mode +set dedicated "2" // 0 = Listen, 1 = LAN, 2 = Internet + +// Master Servers +set sv_master1 "cod4master.activision.com" +set sv_master2 "cod4authorize.activision.com" +set sv_master3 "cod4master.infinityward.com" +set sv_master3 "cod4update.activision.com" +set sv_master4 "master.gamespy.com:28960" +set sv_master5 "master0.gamespy.com" +set sv_master6 "master1.gamespy.com" +set sv_master7 "clanservers.net" +set sv_gamespy "1" + +// Password Settings +set rcon_password "aag" // RCON must supply pw to use +set sv_privatePassword "" // Private slots, non-public slots +set g_password "" + +// Player Slots +set sv_maxclients "24" // MAX server player slots, this is TOTAL player slots, D: 32 +set sv_privateclients "" // Number of private player slots, maxclients - privateclients = public slots + +// Ping +set sv_minPing "0" // MIN player ping on CONNECT, D: 0 +set sv_maxping "800" // MAX player ping on CONNECT, D: 350 + +// Client Download Settings, (0=off/1=on) Used for MODs and custom maps +// set sv_allowdownload "1" +// seta sv_wwwDownload "1" +// seta sv_wwwBaseURL "http://184.39.49.56/p/cod" +// seta sv_wwwDlDisconnected "0" + +// Rate +set sv_maxRate "5000" + +// FPS +// set sv_fps "20" + +// Drop Inactive Players +set sv_timeout "300" +set sv_zombietime "1" +set g_inactivity "0" +set g_inactivityspectator "0" + +// Anti Flooding Settings +set sv_floodProtect "1" +set sv_reconnectlimit "3" + +// Anti Cheat Settings +set sv_disableClientConsole "0" +set cl_autocmd "0" +set sv_cheats "0" +set sv_pure "1" +set g_banIPs "" +set g_no_script_spam "1" +set sv_punkbuster "0" + +// Anti Lag +set g_antilag "1" +set g_smoothClients "1" + +// Temporary Ban Duration +set sv_kickBanTime "120" // D: 3600 + +// In-Game Voice Communication System +set sv_voice "0" +set sv_voiceQuality "1" +set voice_deadChat "0" +set voice_global "0" +set voice_localEcho "0" +set winvoice_mic_mute "1" + +//****************************************************************************** +// Modded Settings +//****************************************************************************** +// set scr_xpscale "1" +// set scr_fog_disable "1" +// set jump_height "800" +// set g_gravity "100" +// set g_speed "350" +// set bg_fallDamageMaxHeight "9999" +// set bg_fallDamageMinHeight "9999" +// set r_fullbright "1" +// set player_sustainAmmo "1" +// set cg_laserForceOn "1" + +//****************************************************************************** +// Misc Settings +//****************************************************************************** +set sv_allowAnonymous "0" +set g_compassShowEnemies "0" +set g_deadChat "0" +// set g_maxDroppedWeapons "16" +// set g_redCrosshairs "0" +// set scr_drawfriend "1" +// ui_maxclients 32 +// ui_allowvote "1" +// ui_allow_classchange "1" +// ui_allow_controlschange "1" +// ui_allow_teamchange "1" +// ui_stat_headshots "" + +set scr_friendlyfire "0" +set scr_freelook "1" +set scr_killcam "1" +set scr_spectateenemy "1" +set scr_allow_vote "1" + +set scr_enable_nightvision 1 +set scr_enable_music 1 +set scr_enable_hiticon 1 + +// Voting +set g_allowVote "1" +// set g_voteAbstainWeight "0.5" +// g_allowVoteKick +// g_allowVoteMap +// g_allowVoteMapRestart +// g_allowVoteMapRotate +// g_allowVoteTempBanUser +// g_allowVoteTypeMap +// g_allowVoteDrawFriend +// g_allowVoteFriendlyFire +// g_allowVoteKillCam + +// Gameplay +set scr_game_allowkillcam 1 +set scr_game_onlyheadshots 0 +set scr_game_deathpointloss 0 +set scr_game_suicidepointloss 0 +set scr_team_teamkillpointloss 1 +set scr_game_spectatetype 2 +set scr_game_forceuav 0 + +// Hardpoints +set scr_game_hardpoints 1 +set scr_hardpoint_allowuav 1 +set scr_hardpoint_allowartillery 1 +set scr_hardpoint_allowhelicopter 1 +set scr_hardpoint_allowsupply 1 + +// Helicopter Settings +// set scr_heli_armor 500 +// set scr_heli_armor_bulletdamage 0.3 +// set scr_heli_attract_range 4096 +// set scr_heli_attract_strength 1000 +// set scr_heli_hardpoint_interval 180 +// set scr_heli_health_degrade 0 +// set scr_heli_loopmax 1 +// set scr_heli_maxhealth 1100 +// set scr_heli_missile_engage_dist 2000 +// set scr_heli_missile_friendlycare 256 +// set scr_heli_missile_max 3 +// set scr_heli_missile_regen_time 10 +// set scr_heli_missile_rof 5 +// set scr_heli_missile_target_cone 0.3 +// set scr_heli_rage_missile 5 +// set scr_heli_target_recognition 0.5 +// set scr_heli_target_spawnprotection 5 +// set scr_heli_targeting_delay 0.5 +// set scr_heli_turret_engage_dist 1000 +// set scr_heli_turret_spinup_delay 0.75 +// set scr_heli_turretClipSize 40 +// set scr_heli_turretReloadTime 1.5 +// set scr_heli_visual_range 3500 + +// Teams +set scr_team_fftype 0 +set scr_team_teamkillspawndelay 20 +set scr_team_kickteamkillers 0 + +// Player +set scr_player_maxhealth 100 +set scr_player_suicidespawndelay 0 +set scr_player_healthregentime 5 +set scr_player_forcerespawn 1 +set scr_player_sprinttime 4 + +// UI +set scr_hardcore 1 +set scr_oldschool_mw 0 +set ui_hud_obituaries 1 +set ui_hud_showobjicons 1 + +//****************************************************************************** +// Perks +//****************************************************************************** +set scr_game_perks 1 +set perk_allow_specialty_parabolic 1 +set perk_allow_specialty_gpsjammer 1 +set perk_allow_specialty_holdbreath 1 +set perk_allow_specialty_quieter 1 +set perk_allow_specialty_longersprint 1 +set perk_allow_specialty_detectexplosive 1 +set perk_allow_specialty_explosivedamage 1 +set perk_allow_specialty_pistoldeath 1 +set perk_allow_specialty_grenadepulldeath 1 +set perk_allow_specialty_bulletdamage 1 +set perk_allow_specialty_bulletpenetration 1 +set perk_allow_specialty_bulletaccuracy 1 +set perk_allow_specialty_rof 1 +set perk_allow_specialty_fastreload 1 +set perk_allow_specialty_extraammo 1 +set perk_allow_specialty_armorvest 1 +set perk_allow_specialty_fraggrenade 1 +set perk_allow_specialty_specialgrenade 1 +set perk_allow_c4_mp 1 +set perk_allow_claymore_mp 1 +set perk_allow_rpg_mp 1 +// set perk_armorVest 75 +// set perk_bulletDamage 40 +// set perk_explosiveDamage 25 + +//****************************************************************************** +// Class Limits +//****************************************************************************** +set class_assault_limit 99 +set class_specops_limit 99 +set class_heavygunner_limit 99 +set class_demolitions_limit 99 +set class_sniper_limit 99 + +//****************************************************************************** +// Class Team Options +//****************************************************************************** +set allies_allow_assault 1 +set axis_allow_assault 1 +set allies_allow_specops 1 +set axis_allow_specops 1 +set allies_allow_heavygunner 1 +set axis_allow_heavygunner 1 +set allies_allow_demolitions 1 +set axis_allow_demolitions 1 +set allies_allow_sniper 1 +set axis_allow_sniper 1 + +//****************************************************************************** +// Assault Class Default Loadout +//****************************************************************************** +set class_assault_primary m16 +set class_assault_primary_attachment gl +set class_assault_secondary beretta +set class_assault_secondary_attachment none +set class_assault_perk1 specialty_null +set class_assault_perk2 specialty_bulletdamage +set class_assault_perk3 specialty_longersprint +set class_assault_grenade concussion_grenade +set class_assault_camo camo_none +set class_assault_frags 1 +set class_assault_special 1 + +//****************************************************************************** +// Specops Class Default Loadout +//****************************************************************************** +set class_specops_primary mp5 +set class_specops_primary_attachment none +set class_specops_secondary usp +set class_specops_secondary_attachment silencer +set class_specops_perk1 c4_mp +set class_specops_perk2 specialty_explosivedamage +set class_specops_perk3 specialty_bulletaccuracy +set class_specops_grenade flash_grenade +set class_specops_camo camo_none +set class_specops_frags 1 +set class_specops_special 1 + +//****************************************************************************** +// Heavygunner Class Default Loadout +//****************************************************************************** +set class_heavygunner_primary saw +set class_heavygunner_primary_attachment none +set class_heavygunner_secondary usp +set class_heavygunner_secondary_attachment none +set class_heavygunner_perk1 specialty_specialgrenade +set class_heavygunner_perk2 specialty_armorvest +set class_heavygunner_perk3 specialty_bulletpenetration +set class_heavygunner_grenade concussion_grenade +set class_heavygunner_camo camo_none +set class_heavygunner_frags 1 +set class_heavygunner_special 1 + +//****************************************************************************** +// Demolitions Class Default Loadout +//****************************************************************************** +set class_demolitions_primary winchester1200 +set class_demolitions_primary_attachment none +set class_demolitions_secondary beretta +set class_demolitions_secondary_attachment none +set class_demolitions_perk1 rpg_mp +set class_demolitions_perk2 specialty_explosivedamage +set class_demolitions_perk3 specialty_longersprint +set class_demolitions_grenade smoke_grenade +set class_demolitions_camo camo_none +set class_demolitions_frags 1 +set class_demolitions_special 1 + +//****************************************************************************** +// Sniper Class Default Loadout +//****************************************************************************** +set class_sniper_primary m40a3 +set class_sniper_primary_attachment none +set class_sniper_secondary beretta +set class_sniper_secondary_attachment silencer +set class_sniper_perk1 specialty_specialgrenade +set class_sniper_perk2 specialty_bulletdamage +set class_sniper_perk3 specialty_bulletpenetration +set class_sniper_grenade flash_grenade +set class_sniper_camo camo_none +set class_sniper_frags 1 +set class_sniper_special 1 + +//****************************************************************************** +// Move Speed +//****************************************************************************** +set class_assault_movespeed 0.95 +set class_specops_movespeed 1.00 +set class_heavygunner_movespeed 0.875 +set class_demolitions_movespeed 1.00 +set class_sniper_movespeed 1.00 + +//****************************************************************************** +// Enables Dropping of Specified Weapon Class +//****************************************************************************** +set class_assault_allowdrop 1 +set class_specops_allowdrop 1 +set class_heavygunner_allowdrop 1 +set class_demolitions_allowdrop 1 +set class_sniper_allowdrop 1 + +//****************************************************************************** +// Assault Rifles +//****************************************************************************** +set weap_allow_m16 1 +set weap_allow_ak47 1 +set weap_allow_m4 1 +set weap_allow_g3 1 +set weap_allow_g36c 1 +set weap_allow_m14 1 +set weap_allow_mp44 1 + +//****************************************************************************** +// Assault Attachments +//****************************************************************************** +set attach_allow_assault_none 1 +set attach_allow_assault_gl 1 +set attach_allow_assault_reflex 1 +set attach_allow_assault_silencer 1 +set attach_allow_assault_acog 1 + +//****************************************************************************** +// SMG +//****************************************************************************** +set weap_allow_mp5 1 +set weap_allow_skorpion 1 +set weap_allow_uzi 1 +set weap_allow_ak74u 1 +set weap_allow_p90 1 + +//****************************************************************************** +// SMG Attachments +//****************************************************************************** +set attach_allow_smg_none 1 +set attach_allow_smg_reflex 1 +set attach_allow_smg_silencer 1 +set attach_allow_smg_acog 1 + +//****************************************************************************** +// Shotguns +//****************************************************************************** +set weap_allow_m1014 1 +set weap_allow_winchester1200 1 + +//****************************************************************************** +// Shotgun Attachments +//****************************************************************************** +set attach_allow_shotgun_none 1 +set attach_allow_shotgun_reflex 1 +set attach_allow_shotgun_grip 1 + +//****************************************************************************** +// LMG +//****************************************************************************** +set weap_allow_saw 1 +set weap_allow_rpd 1 +set weap_allow_m60e4 1 + +//****************************************************************************** +// LMG Attachments +//****************************************************************************** +set attach_allow_lmg_none 1 +set attach_allow_lmg_reflex 1 +set attach_allow_lmg_grip 1 +set attach_allow_lmg_acog 1 + +//****************************************************************************** +// Sniper Rifles +//****************************************************************************** +set weap_allow_dragunov 1 +set weap_allow_m40a3 1 +set weap_allow_barrett 1 +set weap_allow_remington700 1 +set weap_allow_m21 1 + +//****************************************************************************** +// Sniper Attachments +//****************************************************************************** +set attach_allow_sniper_none 1 +set attach_allow_sniper_acog 1 + +//****************************************************************************** +// Pistols +//****************************************************************************** +set weap_allow_beretta 1 +set weap_allow_colt45 1 +set weap_allow_usp 1 +set weap_allow_deserteagle 1 +set weap_allow_deserteaglegold 1 + +//****************************************************************************** +// Pistol Attachments +//****************************************************************************** +set attach_allow_pistol_none 1 +set attach_allow_pistol_silencer 1 + +//****************************************************************************** +// Grenades / Explosives +//****************************************************************************** +set weap_allow_frag_grenade 1 +set weap_allow_concussion_grenade 1 +set weap_allow_flash_grenade 1 +set weap_allow_smoke_grenade 1 +// set scr_weapon_allowc4 1 +// set scr_weapon_allowclaymores 1 +// set scr_weapon_allowflash 1 +// set scr_weapon_allowfrags 1 +// set scr_weapon_allowmines 1 +// set scr_weapon_allowrpgs 1 +// set scr_weapon_allowsmoke 1 + +//****************************************************************************** +// Game Type Settings +//****************************************************************************** + +//****************************************************************************** +// Free For All Deathmatch: +//****************************************************************************** +set scr_dm_scorelimit 250 +// set scr_dm_timelimit +// set scr_dm_numlives +// set scr_dm_roundlimit +set scr_dm_playerrespawndelay -9 +set scr_dm_waverespawndelay -9 + +//****************************************************************************** + +//****************************************************************************** +// Domination: +//****************************************************************************** +// set scr_dom_scorelimit +// set scr_dom_timelimit +// set scr_dom_numlives +// set scr_dom_roundlimit +// set scr_dom_playerrespawndelay +// set scr_dom_waverespawndelay +//****************************************************************************** + +//****************************************************************************** +// Headquarters: +//****************************************************************************** +// set scr_koth_scorelimit +// set scr_koth_timelimit +// set scr_koth_numlives +// set scr_koth_roundlimit +// set scr_koth_roundswitch +// set scr_koth_playerrespawndelay +// set scr_koth_waverespawndelay +// set koth_autodestroytime +// set koth_kothmode +// set koth_spawntime +// set koth_delayPlayer 0 +// set koth_spawnDelay 0 +//****************************************************************************** + +//****************************************************************************** +// Sabotage: +//****************************************************************************** +// set scr_sab_scorelimit +// set scr_sab_timelimit +// set scr_sab_numlives +// set scr_sab_bombtimer +// set scr_sab_defusetime +// set scr_sab_hotpotato +// set scr_sab_planttime +// set scr_sab_roundlimit +// set scr_sab_roundswitch +// set scr_sab_playerrespawndelay 4 +// set scr_sab_waverespawndelay 0 +//****************************************************************************** + +//****************************************************************************** +// Search & Destroy +//****************************************************************************** +set scr_sd_scorelimit 15 +// set scr_sd_timelimit +// set scr_sd_numlives +// set scr_sd_bombtimer +// set scr_sd_defusetime +// set scr_sd_multibomb +// set scr_sd_planttime +// set scr_sd_roundlimit +// set scr_sd_roundswitch +// set scr_sd_playerrespawndelay +// set scr_sd_waverespawndelay +//****************************************************************************** + +//****************************************************************************** +// Team Deathmatch : +//****************************************************************************** +// set scr_war_scorelimit +// set scr_war_timelimit +// set scr_war_numlives +// set scr_war_roundlimit +// set scr_war_playerrespawndelay 1 +// set scr_war_waverespawndelay 0 +//****************************************************************************** + +//****************************************************************************** +// Game Types +//****************************************************************************** +set g_gametype "sd" + +//****************************************************************************** +// Map Rotations +//****************************************************************************** +set sv_mapRotation "gametype sd map mp_broadcast" \ No newline at end of file diff --git a/Call of Duty 4/Configs/Server Config/Broadcast HC SnD.cfg b/Call of Duty 4/Configs/Server Config/Broadcast HC SnD.cfg new file mode 100755 index 0000000..96bb929 --- /dev/null +++ b/Call of Duty 4/Configs/Server Config/Broadcast HC SnD.cfg @@ -0,0 +1,149 @@ +//****************************************************************************** +// Call of Duty 4 - Config by RigorousSphinx +//****************************************************************************** +//****************************************************************************** +// Public Information +//****************************************************************************** +sets sv_hostname "^5$('*') ^2Brdcast ^3HC ^1SnD" +sets _Admin "RigorousSphinx" +sets _Location "North Carolina, US" +sets _Maps "CoD4 Stock" +set scr_motd "^3Welcome to $('*') Broadcast HC SnD. Enjoy!!" +// set scr_server_rule_1 "Rule 1. Dont Cheat!" +// set scr_server_rule_2 "Rule 2. Dont Abuse the server" +// set scr_server_rule_3 "Rule 3. Dont Chat Spam" + +//****************************************************************************** +// Common Server Settings +//****************************************************************************** +// Punkbuster +// seta sv_punkbuster 1 +// wait +// pb_sv_enable + +// Server Network Mode +set dedicated 2 + +// Log Settings +// set g_logsync 2 +// set logfile 1 +// set g_log "games_mp.log" +// set sv_log_damage 1 + +// Password Settings +set rcon_password "aag" + +// Player Slots +set sv_maxclients 20 + +// Ping +set sv_minPing 0 +set sv_maxping 800 + +// Rate +set sv_maxRate 5000 + +// Drop Inactive Players +set sv_timeout 300 +set sv_zombietime 1 +set g_inactivity 0 +set g_inactivityspectator 0 + +// Anti Flooding Settings +set sv_floodProtect 1 +set sv_reconnectlimit 3 + +// Anti Cheat Settings +set sv_disableClientConsole 0 +set cl_autocmd 0 +set sv_cheats 0 +set sv_pure 1 +set g_banIPs "" +set g_no_script_spam 1 +set sv_punkbuster 0 + +// Anti Lag +set g_antilag 1 +set g_smoothClients 1 + +// Temporary Ban Duration +set sv_kickBanTime 120 + +// In-Game Voice Communication System +set sv_voice 0 +set sv_voiceQuality 1 +set voice_deadChat 0 +set voice_global 0 +set voice_localEcho 0 +set winvoice_mic_mute 1 + +//****************************************************************************** +// Misc Settings +//****************************************************************************** +set sv_allowAnonymous 0 +set g_compassShowEnemies 0 +set g_deadChat 0 +set scr_friendlyfire 0 +set scr_freelook 1 +set scr_killcam 1 +set scr_spectateenemy 1 +set scr_allow_vote 1 +set scr_enable_nightvision 1 +set scr_enable_music 1 +set scr_enable_hiticon 1 + +// Voting +set g_allowVote 1 + +// Gameplay +set scr_game_allowkillcam 1 +set scr_game_onlyheadshots 0 +set scr_game_deathpointloss 0 +set scr_game_suicidepointloss 0 +set scr_team_teamkillpointloss 1 +set scr_game_spectatetype 2 +set scr_game_forceuav 0 + +// Teams +set scr_team_fftype 0 +set scr_team_teamkillspawndelay 20 +set scr_team_kickteamkillers 0 + +// Player +set scr_player_maxhealth 100 +set scr_player_suicidespawndelay 0 +set scr_player_healthregentime 5 +set scr_player_forcerespawn 1 +set scr_player_sprinttime 4 + +// UI +set scr_hardcore 1 +set scr_oldschool_mw 0 +set ui_hud_obituaries 1 +set ui_hud_showobjicons 1 + +//****************************************************************************** +// Search & Destroy +//****************************************************************************** +set scr_sd_scorelimit 15 +// set scr_sd_timelimit +// set scr_sd_numlives +// set scr_sd_bombtimer +// set scr_sd_defusetime +// set scr_sd_multibomb +// set scr_sd_planttime +// set scr_sd_roundlimit +// set scr_sd_roundswitch +// set scr_sd_playerrespawndelay +// set scr_sd_waverespawndelay +//****************************************************************************** + +//****************************************************************************** +// Game Types +//****************************************************************************** +set g_gametype "sd" + +//****************************************************************************** +// Map Rotations +//****************************************************************************** +set sv_mapRotation "gametype sd map mp_broadcast" \ No newline at end of file diff --git a/Call of Duty 4/Configs/Server Config/server_full.cfg b/Call of Duty 4/Configs/Server Config/server_full.cfg new file mode 100755 index 0000000..2424aa2 --- /dev/null +++ b/Call of Duty 4/Configs/Server Config/server_full.cfg @@ -0,0 +1,619 @@ +//****************************************************************************** +// Call of Duty 4 - Config by RigorousSphinx +//****************************************************************************** +//****************************************************************************** +// Public Information +//****************************************************************************** +sets sv_hostname "^5$('*') ^2Hacked ^3/ ^1Modded ^5Rotation ^3Server" // ^5$('*') ^2Hacked ^3/ ^1Modded ^5Rotation ^3Server +sets _Admin "RigorousSphinx" +// sets _Email "admin AT yoursite DOT com" +// sets _Website "http://www.cod4boards.com" +sets _Location "North Carolina, US" +// sets _Irc "" +// sets _Mod "Your fs_game" +// sets _ModVer "1.0" +// sets _ModUpdate "3Right Now" +// sets _Maps "COD2 Stock" +// set scr_motd "cod4boards.com" + +//****************************************************************************** +// Common Server Settings +//****************************************************************************** +// Log Settings +set g_logsync "2" // 0 = No Log, 1 = Buffered, 2 = Continuous, 3 = Append +set logfile "1" // 0 = No Log, 1 = Log File Enabled +set g_log "games_mp.log" // Name of log file, D: games_mp.log +set sv_log_damage "1" + +// Network Options +// set net_ip "1.2.3.4" // Set your servers IP address +// set net_port "28960" // Set your port number +set com_hunkMegs "512" +set net_noipx "1" // Allow ONLY tcp/ip protocol, player/server communications + +// Server Network Mode +set dedicated "2" // 0 = Listen, 1 = LAN, 2 = Internet + +// Master Servers +set sv_master1 "cod2master.activision.com" +set sv_master2 "cod2authorize.activision.com" +set sv_master3 "cod2master.infinityward.com" +set sv_master3 "cod2update.activision.com" +set sv_master4 "master.gamespy.com:28960" +set sv_master5 "master0.gamespy.com" +set sv_master6 "master1.gamespy.com" +set sv_master7 "clanservers.net" +set sv_gamespy "1" + +// Password Settings +set rcon_password "aag" // RCON must supply pw to use +set sv_privatePassword "" // Private slots, non-public slots + +// The following can be used to lock out the server so that only those +// players that have been provide the password can connect. Good for +// matches, practices, etc. +set g_password "" + +// Player Slots +set sv_maxclients "24" // MAX server player slots, this is TOTAL player slots, D: 32 +set sv_privateclients "" // Number of private player slots, maxclients - privateclients = public slots + +// Ping +set sv_minPing "0" // MIN player ping on CONNECT, D: 0 +set sv_maxping "800" // MAX player ping on CONNECT, D: 350 + +// Client Download Settings, (0=off/1=on) Used for MODs and custom maps +// See included Quick Setup Guide for instructions. +// set sv_allowdownload "1" +// seta sv_wwwDownload "1" +// seta sv_wwwBaseURL "http://www.xxx.xxx.xx" +// seta sv_wwwDlDisconnected "1" + +// Rate +set sv_maxRate "5000" + +// FPS +// set sv_fps "20" + +// Drop Inactive Players +set sv_timeout "300" +set sv_zombietime "1" +set g_inactivity "0" +set g_inactivityspectator "0" + +// Anti Flooding Settings +set sv_floodProtect "1" +set sv_reconnectlimit "3" + +// Anti Cheat Settings +set sv_disableClientConsole "0" +set cl_autocmd "0" +set sv_cheats "0" +set sv_pure "1" +set g_banIPs "" +set g_no_script_spam "1" +set sv_punkbuster "0" + +// Anti Lag +set g_antilag "1" +// set g_smoothClients "1" + +// Temporary Ban Duration +set sv_kickBanTime "120" // D: 3600 + +// In-Game Voice Communication System +set sv_voice "0" +set sv_voiceQuality "1" +set voice_deadChat "0" +set voice_global "0" +set voice_localEcho "0" +set winvoice_mic_mute "1" + +//****************************************************************************** +// Modded Settings +//****************************************************************************** +set scr_xpscale 10 +// set scr_fog_disable 1 +set jump_height 800 +set g_gravity 100 +set g_speed 350 +set bg_fallDamageMaxHeight 9999 +set bg_fallDamageMinHeight 9999 +set r_fullbright 1 +set player_sustainAmmo 1 +set cg_laserForceOn 1 + +//****************************************************************************** +// Misc Settings +//****************************************************************************** +set sv_allowAnonymous "0" +set g_compassShowEnemies "0" +set g_deadChat "0" +// set g_maxDroppedWeapons "16" +// set g_redCrosshairs "0" +set g_allowVote "1" +// set g_voteAbstainWeight "0.5" +// ui_maxclients 32 + +set scr_enable_nightvision 1 +set scr_enable_music 1 +set scr_enable_hiticon 1 + +// Gameplay +set scr_game_allowkillcam 1 +set scr_game_onlyheadshots 0 +set scr_game_deathpointloss 0 +set scr_game_suicidepointloss 0 +set scr_team_teamkillpointloss 1 +set scr_game_spectatetype 1 +set scr_game_forceuav 0 + +// Hardpoints +set scr_game_hardpoints 1 +set scr_hardpoint_allowuav 1 +set scr_hardpoint_allowartillery 1 +set scr_hardpoint_allowhelicopter 1 +set scr_hardpoint_allowsupply 1 + +// Helicopter Settings +// set scr_heli_armor 500 +// set scr_heli_armor_bulletdamage 0.3 +// set scr_heli_attract_range 4096 +// set scr_heli_attract_strength 1000 +// set scr_heli_hardpoint_interval 180 +// set scr_heli_health_degrade 0 +// set scr_heli_loopmax 1 +// set scr_heli_maxhealth 1100 +// set scr_heli_missile_engage_dist 2000 +// set scr_heli_missile_friendlycare 256 +// set scr_heli_missile_max 3 +// set scr_heli_missile_regen_time 10 +// set scr_heli_missile_rof 5 +// set scr_heli_missile_target_cone 0.3 +// set scr_heli_rage_missile 5 +// set scr_heli_target_recognition 0.5 +// set scr_heli_target_spawnprotection 5 +// set scr_heli_targeting_delay 0.5 +// set scr_heli_turret_engage_dist 1000 +// set scr_heli_turret_spinup_delay 0.75 +// set scr_heli_turretClipSize 40 +// set scr_heli_turretReloadTime 1.5 +// set scr_heli_visual_range 3500 + +// Teams +set scr_team_fftype 0 +set scr_team_teamkillspawndelay 20 +set scr_team_kickteamkillers 0 + +// Player +set scr_player_maxhealth 100 +set scr_player_suicidespawndelay 0 +set scr_player_healthregentime 5 +set scr_player_forcerespawn 1 +set scr_player_sprinttime 4 + +// UI +set scr_hardcore 1 +set scr_oldschool_mw 0 +set ui_hud_obituaries 1 +set ui_hud_showobjicons 1 + +//****************************************************************************** +// Perks +//****************************************************************************** +set scr_game_perks 1 +set perk_allow_specialty_parabolic 1 +set perk_allow_specialty_gpsjammer 1 +set perk_allow_specialty_holdbreath 1 +set perk_allow_specialty_quieter 1 +set perk_allow_specialty_longersprint 1 +set perk_allow_specialty_detectexplosive 1 +set perk_allow_specialty_explosivedamage 1 +set perk_allow_specialty_pistoldeath 1 +set perk_allow_specialty_grenadepulldeath 1 +set perk_allow_specialty_bulletdamage 1 +set perk_allow_specialty_bulletpenetration 1 +set perk_allow_specialty_bulletaccuracy 1 +set perk_allow_specialty_rof 1 +set perk_allow_specialty_fastreload 1 +set perk_allow_specialty_extraammo 1 +set perk_allow_specialty_armorvest 1 +set perk_allow_specialty_fraggrenade 1 +set perk_allow_specialty_specialgrenade 1 +set perk_allow_c4_mp 1 +set perk_allow_claymore_mp 1 +set perk_allow_rpg_mp 1 +// set perk_armorVest 75 +// set perk_bulletDamage 40 +// set perk_explosiveDamage 25 + +//****************************************************************************** +// Class Limits +//****************************************************************************** +set class_assault_limit 99 +set class_specops_limit 99 +set class_heavygunner_limit 99 +set class_demolitions_limit 99 +set class_sniper_limit 99 + +//****************************************************************************** +// Class Team Options +//****************************************************************************** +// set allies_allow_assault 1 +// set axis_allow_assault 1 +// set allies_allow_specops 1 +// set axis_allow_specops 1 +// set allies_allow_heavygunner 1 +// set axis_allow_heavygunner 1 +// set allies_allow_demolitions 1 +// set axis_allow_demolitions 1 +// set allies_allow_sniper 1 +// set axis_allow_sniper 1 + +//****************************************************************************** +// Assault Class Default Loadout +//****************************************************************************** +set class_assault_primary m16 +set class_assault_primary_attachment gl +set class_assault_secondary beretta +set class_assault_secondary_attachment none +set class_assault_perk1 specialty_null +set class_assault_perk2 specialty_bulletdamage +set class_assault_perk3 specialty_longersprint +set class_assault_grenade concussion_grenade +set class_assault_camo camo_none +set class_assault_frags 1 +set class_assault_special 1 + +//****************************************************************************** +// Specops Class Default Loadout +//****************************************************************************** +set class_specops_primary mp5 +set class_specops_primary_attachment none +set class_specops_secondary usp +set class_specops_secondary_attachment silencer +set class_specops_perk1 c4_mp +set class_specops_perk2 specialty_explosivedamage +set class_specops_perk3 specialty_bulletaccuracy +set class_specops_grenade flash_grenade +set class_specops_camo camo_none +set class_specops_frags 1 +set class_specops_special 1 + +//****************************************************************************** +// Heavygunner Class Default Loadout +//****************************************************************************** +set class_heavygunner_primary saw +set class_heavygunner_primary_attachment none +set class_heavygunner_secondary usp +set class_heavygunner_secondary_attachment none +set class_heavygunner_perk1 specialty_specialgrenade +set class_heavygunner_perk2 specialty_armorvest +set class_heavygunner_perk3 specialty_bulletpenetration +set class_heavygunner_grenade concussion_grenade +set class_heavygunner_camo camo_none +set class_heavygunner_frags 1 +set class_heavygunner_special 1 + +//****************************************************************************** +// Demolitions Class Default Loadout +//****************************************************************************** +set class_demolitions_primary winchester1200 +set class_demolitions_primary_attachment none +set class_demolitions_secondary beretta +set class_demolitions_secondary_attachment none +set class_demolitions_perk1 rpg_mp +set class_demolitions_perk2 specialty_explosivedamage +set class_demolitions_perk3 specialty_longersprint +set class_demolitions_grenade smoke_grenade +set class_demolitions_camo camo_none +set class_demolitions_frags 1 +set class_demolitions_special 1 + +//****************************************************************************** +// Sniper Class Default Loadout +//****************************************************************************** +set class_sniper_primary m40a3 +set class_sniper_primary_attachment none +set class_sniper_secondary beretta +set class_sniper_secondary_attachment silencer +set class_sniper_perk1 specialty_specialgrenade +set class_sniper_perk2 specialty_bulletdamage +set class_sniper_perk3 specialty_bulletpenetration +set class_sniper_grenade flash_grenade +set class_sniper_camo camo_none +set class_sniper_frags 1 +set class_sniper_special 1 + +//****************************************************************************** +// Move Speed +//****************************************************************************** +set class_assault_movespeed 0.95 +set class_specops_movespeed 1.00 +set class_heavygunner_movespeed 0.875 +set class_demolitions_movespeed 1.00 +set class_sniper_movespeed 1.00 + +//****************************************************************************** +// Enables Dropping of Specified Weapon Class +//****************************************************************************** +set class_assault_allowdrop 1 +set class_specops_allowdrop 1 +set class_heavygunner_allowdrop 1 +set class_demolitions_allowdrop 1 +set class_sniper_allowdrop 1 + +//****************************************************************************** +// Assault Rifles +//****************************************************************************** +set weap_allow_m16 1 +set weap_allow_ak47 1 +set weap_allow_m4 1 +set weap_allow_g3 1 +set weap_allow_g36c 1 +set weap_allow_m14 1 +set weap_allow_mp44 1 + +//****************************************************************************** +// Assault Attachments +//****************************************************************************** +set attach_allow_assault_none 1 +set attach_allow_assault_gl 1 +set attach_allow_assault_reflex 1 +set attach_allow_assault_silencer 1 +set attach_allow_assault_acog 1 + +//****************************************************************************** +// SMG +//****************************************************************************** +set weap_allow_mp5 1 +set weap_allow_skorpion 1 +set weap_allow_uzi 1 +set weap_allow_ak74u 1 +set weap_allow_p90 1 + +//****************************************************************************** +// SMG Attachments +//****************************************************************************** +set attach_allow_smg_none 1 +set attach_allow_smg_reflex 1 +set attach_allow_smg_silencer 1 +set attach_allow_smg_acog 1 + +//****************************************************************************** +// Shotguns +//****************************************************************************** +set weap_allow_m1014 1 +set weap_allow_winchester1200 1 + +//****************************************************************************** +// Shotgun Attachments +//****************************************************************************** +set attach_allow_shotgun_none 1 +set attach_allow_shotgun_reflex 1 +set attach_allow_shotgun_grip 1 + +//****************************************************************************** +// LMG +//****************************************************************************** +set weap_allow_saw 1 +set weap_allow_rpd 1 +set weap_allow_m60e4 1 + +//****************************************************************************** +// LMG Attachments +//****************************************************************************** +set attach_allow_lmg_none 1 +set attach_allow_lmg_reflex 1 +set attach_allow_lmg_grip 1 +set attach_allow_lmg_acog 1 + +//****************************************************************************** +// Sniper Rifles +//****************************************************************************** +set weap_allow_dragunov 1 +set weap_allow_m40a3 1 +set weap_allow_barrett 1 +set weap_allow_remington700 1 +set weap_allow_m21 1 + +//****************************************************************************** +// Sniper Attachments +//****************************************************************************** +set attach_allow_sniper_none 1 +set attach_allow_sniper_acog 1 + +//****************************************************************************** +// Pistols +//****************************************************************************** +set weap_allow_beretta 1 +set weap_allow_colt45 1 +set weap_allow_usp 1 +set weap_allow_deserteagle 1 +set weap_allow_deserteaglegold 1 + +//****************************************************************************** +// Pistol Attachments +//****************************************************************************** +set attach_allow_pistol_none 1 +set attach_allow_pistol_silencer 1 + +//****************************************************************************** +// Grenades / Explosives +//****************************************************************************** +set weap_allow_frag_grenade 1 +set weap_allow_concussion_grenade 1 +set weap_allow_flash_grenade 1 +set weap_allow_smoke_grenade 1 +// set scr_weapon_allowc4 1 +// set scr_weapon_allowclaymores 1 +// set scr_weapon_allowflash 1 +// set scr_weapon_allowfrags 1 +// set scr_weapon_allowmines 1 +// set scr_weapon_allowrpgs 1 +// set scr_weapon_allowsmoke 1 + +//****************************************************************************** +// Game Type Settings +//****************************************************************************** + +//****************************************************************************** +// Free For All Deathmatch: +//****************************************************************************** +// set scr_dm_scorelimit +// set scr_dm_timelimit +// set scr_dm_numlives +// set scr_dm_playerrespawndelay +// set scr_dm_roundlimit +// set scr_dm_waverespawndelay +//****************************************************************************** + +//****************************************************************************** +// Domination: +//****************************************************************************** +// set scr_dom_scorelimit +// set scr_dom_timelimit +// set scr_dom_numlives +// set scr_dom_playerrespawndelay +// set scr_dom_roundlimit +// set scr_dom_waverespawndelay +//****************************************************************************** + +//****************************************************************************** +// Headquarters: +//****************************************************************************** +// set scr_koth_scorelimit +// set scr_koth_timelimit +// set scr_koth_numlives +// set scr_koth_playerrespawndelay +// set scr_koth_roundlimit +// set scr_koth_roundswitch +// set scr_koth_waverespawndelay +// koth_autodestroytime +// koth_kothmode +// koth_spawntime +//****************************************************************************** + +//****************************************************************************** +// Sabotage: +//****************************************************************************** +// set scr_sab_scorelimit +// set scr_sab_timelimit +// set scr_sab_numlives +// set scr_sab_bombtimer +// set scr_sab_defusetime +// set scr_sab_hotpotato +// set scr_sab_planttime +// set scr_sab_playerrespawndelay +// set scr_sab_roundlimit +// set scr_sab_roundswitch +// set scr_sab_waverespawndelay +//****************************************************************************** + +//****************************************************************************** +// Search & Destroy +//****************************************************************************** +// set scr_sd_scrorelimit +// set scr_sd_timelimit +// set scr_sd_numlives +// set scr_sd_bombtimer +// set scr_sd_defusetime +// set scr_sd_multibomb +// set scr_sd_planttime +// set scr_sd_playerrespawndelay +// set scr_sd_roundlimit +// set scr_sd_roundswitch +// set scr_sd_waverespawndelay +//****************************************************************************** + +//****************************************************************************** +// Team Deathmatch : +//****************************************************************************** +// set scr_war_scorelimit +// set scr_war_timelimit +// set scr_war_numlives +// set scr_war_playerrespawndelay +// set scr_war_roundlimit +// set scr_war_waverespawndelay +//****************************************************************************** + +//****************************************************************************** +// Map Names +//****************************************************************************** +// ambush = mp_convoy +// backlot = mp_backlot +// bloc = mp_bloc +// bog = mp_bog +// countdown = mp_countdown +// crash = mp_crash +// crossfire = mp_crossfire +// district = mp_citystreets +// downpour = mp_farm +// overgrown = mp_overgrown +// pipeline = mp_pipeline +// shipment = mp_shipment +// showdown = mp_showdown +// strike = mp_strike +// vacant = mp_vacant +// wet work = mp_cargoship +// winter crash = mp_crash_snow +// broadcast = mp_broadcast +// creek = mp_creek +// chinatown = mp_carentan +// killhouse = mp_killhouse +//****************************************************************************** + +//****************************************************************************** +// Game Types +//****************************************************************************** +// "dm" - Free For All Deathmatch +// "dom" - Domination +// "koth" - Headquarters +// "sab" - Sabotage +// "sd" - Search & Destroy +// "war" - Team Deathmatch +//****************************************************************************** +set g_gametype "sd" + +//****************************************************************************** +// Map Rotations +//****************************************************************************** +//****************************************************************************** +// DM -- FREE FOR ALL DEATHMATCH +//****************************************************************************** +// set sv_mapRotation "gametype dm map mp_backlot gametype dm map mp_bloc gametype dm map mp_bog gametype dm map mp_cargoship gametype dm map mp_citystreets gametype dm map mp_convoy gametype dm map mp_countdown gametype dm map mp_crash gametype dm map mp_crossfire gametype dm map mp_farm gametype dm map mp_overgrown gametype dm map mp_pipeline gametype dm map mp_shipment gametype dm map mp_showdown gametype dm map mp_strike gametype dm map mp_vacant" + +//****************************************************************************** +// DOM -- DOMINATION +//****************************************************************************** +// set sv_mapRotation "gametype dom map mp_backlot gametype dom map mp_bloc gametype dom map mp_bog gametype dom map mp_cargoship gametype dom map mp_citystreets gametype dom map mp_convoy gametype dom map mp_countdown gametype dom map mp_crash gametype dom map mp_crossfire gametype dom map mp_farm gametype dom map mp_overgrown gametype dom map mp_pipeline gametype dom map mp_shipment gametype dom map mp_showdown gametype dom map mp_strike gametype dom map mp_vacant" + +//****************************************************************************** +// KOTH -- HEADQUARTERS +//****************************************************************************** +// set sv_mapRotation "gametype koth map mp_backlot gametype koth map mp_bloc gametype koth map mp_bog gametype koth map mp_cargoship gametype koth map mp_citystreets gametype koth map mp_convoy gametype koth map mp_countdown gametype koth map mp_crash gametype koth map mp_crossfire gametype koth map mp_farm gametype koth map mp_overgrown gametype koth map mp_pipeline gametype koth map mp_shipment gametype koth map mp_showdown gametype koth map mp_strike gametype koth map mp_vacant" + +//****************************************************************************** +// SAB -- SABOTAGE +//****************************************************************************** +// set sv_mapRotation "gametype sab map mp_backlot gametype sab map mp_bloc gametype sab map mp_bog gametype sab map mp_cargoship gametype sab map mp_citystreets gametype sab map mp_convoy gametype sab map mp_countdown gametype sab map mp_crash gametype sab map mp_crossfire gametype sab map mp_farm gametype sab map mp_overgrown gametype sab map mp_pipeline gametype sab map mp_shipment gametype sab map mp_showdown gametype sab map mp_strike gametype sab map mp_vacant" + +//****************************************************************************** +// SD -- SEARCH & DESTROY +//****************************************************************************** +set sv_mapRotation "gametype sd map mp_backlot gametype sd map mp_bloc gametype sd map mp_bog gametype sd map mp_cargoship gametype sd map mp_citystreets gametype sd map mp_convoy gametype sd map mp_countdown gametype sd map mp_crash gametype sd map mp_crossfire gametype sd map mp_farm gametype sd map mp_overgrown gametype sd map mp_pipeline gametype sd map mp_shipment gametype sd map mp_showdown gametype sd map mp_strike gametype sd map mp_vacant" + +//****************************************************************************** +// WAR -- TEAM DEATHMATCH +//****************************************************************************** +// set sv_mapRotation "gametype war map mp_backlot gametype war map mp_bloc gametype war map mp_bog gametype war map mp_cargoship gametype war map mp_citystreets gametype war map mp_convoy gametype war map mp_countdown gametype war map mp_crash gametype war map mp_crossfire gametype war map mp_farm gametype war map mp_overgrown gametype war map mp_pipeline gametype war map mp_shipment gametype war map mp_showdown gametype war map mp_strike gametype war map mp_vacant" + +//****************************************************************************** +// BROADCAST -- ROTATION +//****************************************************************************** +// set sv_mapRotation "gametype dm map mp_broadcast gametype dom map mp_broadcast gametype koth map mp_broadcast gametype sab map mp_broadcast gametype sd map mp_broadcast gametype war map mp_broadcast" + +//****************************************************************************** +// BROADCAST -- DEVMAP ROTATION +//****************************************************************************** +// set sv_mapRotation "gametype dm devmap mp_broadcast gametype dom devmap mp_broadcast gametype koth devmap mp_broadcast gametype sab devmap mp_broadcast gametype sd devmap mp_broadcast gametype war devmap mp_broadcast" diff --git a/Call of Duty 4/Configs/Server Config/server_mods1.cfg b/Call of Duty 4/Configs/Server Config/server_mods1.cfg new file mode 100755 index 0000000..abfca01 --- /dev/null +++ b/Call of Duty 4/Configs/Server Config/server_mods1.cfg @@ -0,0 +1,702 @@ +//****************************************************************************** +// Call of Duty 4 - Config by RigorousSphinx +//****************************************************************************** +//****************************************************************************** +// Public Information +//****************************************************************************** +sets sv_hostname "^5$('*') ^2Hacked ^3/ ^1Modded ^5Rotation ^3Server" // ^5$('*') ^2Hacked ^3/ ^1Modded ^5Rotation ^3Server +sets _Admin "RigorousSphinx" +// sets _Email "admin AT yoursite DOT com" +// sets _Website "http://www.cod4boards.com" +sets _Location "North Carolina, US" +// sets _Vent "" +// sets _Irc "" +sets _Maps "CoD4 Stock" +set scr_motd "^3Welcome to $('*') Modded Server. Enjoy!!" +// set scr_server_rule_1 "Rule 1. Dont Cheat!" +// set scr_server_rule_2 "Rule 2. Dont Abuse the server" +// set scr_server_rule_3 "Rule 3. Dont Chat Spam" +// set scr_server_rule_4 "Rule 4. Test 1" +// set scr_server_rule_5 "Rule 5. Test 2" + +//****************************************************************************** +// Load Mods +//****************************************************************************** +//****************************************************************************** +// PeZBOT Mod +//****************************************************************************** +// set fs_game "mods/pezbot" +// sets _Mod "Pezbot" +// sets _ModVer "006p" +// sets _ModUpdate "^3Right Now" +// set svr_pezbots "5" +// set svr_pezbots_team "autoassign" +//****************************************************************************** +//****************************************************************************** +// AWE4 Mod +//****************************************************************************** +// set fs_game "mods/awe4" +// sets _Mod "AWE4" +// sets _ModVer "006p" +// sets _ModUpdate "^3Right Now" +// exec awe.cfg +// exec forceweapons.cfg +// exec htf.cfg +// exec ctfb.cfg +// exec ctf.cfg +// exec ch.cfg +// exec cnq.cfg +// exec re.cfg +// exec anti-camper.cfg +// exec playercontrol.cfg +// exec weaponcontrol.cfg +// exec gametypes.cfg +// exec maprotation.cfg +// set scr_testclients "0" +// set loc_warnings 0 +// set loc_warningsAsErrors 0 +//****************************************************************************** + +//****************************************************************************** +// Init & Exec CFG Files +//****************************************************************************** +// wait +// exec test1.cfg +// wait +// exec test2.cfg + +//****************************************************************************** +// Common Server Settings +//****************************************************************************** +// Log Settings +set g_logsync "2" // 0 = No Log, 1 = Buffered, 2 = Continuous, 3 = Append +set logfile "1" // 0 = No Log, 1 = Log File Enabled +set g_log "games_mp.log" // Name of log file, D: games_mp.log +set sv_log_damage "1" + +// Network Options +// set net_ip "1.2.3.4" // Set your servers IP address +// set net_port "28960" // Set your port number +set com_hunkMegs "512" +set net_noipx "1" // Allow ONLY tcp/ip protocol, player/server communications + +// Server Network Mode +set dedicated "2" // 0 = Listen, 1 = LAN, 2 = Internet + +// Master Servers +set sv_master1 "cod4master.activision.com" +set sv_master2 "cod4authorize.activision.com" +set sv_master3 "cod4master.infinityward.com" +set sv_master3 "cod4update.activision.com" +set sv_master4 "master.gamespy.com:28960" +set sv_master5 "master0.gamespy.com" +set sv_master6 "master1.gamespy.com" +set sv_master7 "clanservers.net" +set sv_gamespy "1" + +// Password Settings +set rcon_password "aag" // RCON must supply pw to use +set sv_privatePassword "" // Private slots, non-public slots +set g_password "" + +// Player Slots +set sv_maxclients "24" // MAX server player slots, this is TOTAL player slots, D: 32 +set sv_privateclients "" // Number of private player slots, maxclients - privateclients = public slots + +// Ping +set sv_minPing "0" // MIN player ping on CONNECT, D: 0 +set sv_maxping "800" // MAX player ping on CONNECT, D: 350 + +// Client Download Settings, (0=off/1=on) Used for MODs and custom maps +set sv_allowdownload "1" +seta sv_wwwDownload "1" +seta sv_wwwBaseURL "http://184.39.49.56/p/cod" +seta sv_wwwDlDisconnected "0" + +// Rate +set sv_maxRate "5000" + +// FPS +// set sv_fps "20" + +// Drop Inactive Players +set sv_timeout "300" +set sv_zombietime "1" +set g_inactivity "0" +set g_inactivityspectator "0" + +// Anti Flooding Settings +set sv_floodProtect "1" +set sv_reconnectlimit "3" + +// Anti Cheat Settings +set sv_disableClientConsole "0" +set cl_autocmd "0" +set sv_cheats "0" +set sv_pure "1" +set g_banIPs "" +set g_no_script_spam "1" +set sv_punkbuster "0" + +// Anti Lag +set g_antilag "1" +set g_smoothClients "1" + +// Temporary Ban Duration +set sv_kickBanTime "120" // D: 3600 + +// In-Game Voice Communication System +set sv_voice "0" +set sv_voiceQuality "1" +set voice_deadChat "0" +set voice_global "0" +set voice_localEcho "0" +set winvoice_mic_mute "1" + +//****************************************************************************** +// Modded Settings +//****************************************************************************** +// set scr_xpscale "1" +// set scr_fog_disable "1" +// set jump_height "800" +// set g_gravity "100" +// set g_speed "350" +// set bg_fallDamageMaxHeight "9999" +// set bg_fallDamageMinHeight "9999" +// set r_fullbright "1" +// set player_sustainAmmo "1" +// set cg_laserForceOn "1" + +//****************************************************************************** +// Misc Settings +//****************************************************************************** +set sv_allowAnonymous "0" +set g_compassShowEnemies "0" +set g_deadChat "0" +// set g_maxDroppedWeapons "16" +// set g_redCrosshairs "0" +// set scr_drawfriend "1" +// ui_maxclients 32 +// ui_allowvote "1" +// ui_allow_classchange "1" +// ui_allow_controlschange "1" +// ui_allow_teamchange "1" +// ui_stat_headshots "" + +set scr_friendlyfire "0" +set scr_freelook "1" +set scr_killcam "1" +set scr_spectateenemy "1" +set scr_allow_vote "1" + +set scr_enable_nightvision 1 +set scr_enable_music 1 +set scr_enable_hiticon 1 + +// Voting +set g_allowVote "1" +// set g_voteAbstainWeight "0.5" +// g_allowVoteKick +// g_allowVoteMap +// g_allowVoteMapRestart +// g_allowVoteMapRotate +// g_allowVoteTempBanUser +// g_allowVoteTypeMap +// g_allowVoteDrawFriend +// g_allowVoteFriendlyFire +// g_allowVoteKillCam + +// Gameplay +set scr_game_allowkillcam 1 +set scr_game_onlyheadshots 0 +set scr_game_deathpointloss 0 +set scr_game_suicidepointloss 0 +set scr_team_teamkillpointloss 1 +set scr_game_spectatetype 2 +set scr_game_forceuav 0 + +// Hardpoints +set scr_game_hardpoints 1 +set scr_hardpoint_allowuav 1 +set scr_hardpoint_allowartillery 1 +set scr_hardpoint_allowhelicopter 1 +set scr_hardpoint_allowsupply 1 + +// Helicopter Settings +// set scr_heli_armor 500 +// set scr_heli_armor_bulletdamage 0.3 +// set scr_heli_attract_range 4096 +// set scr_heli_attract_strength 1000 +// set scr_heli_hardpoint_interval 180 +// set scr_heli_health_degrade 0 +// set scr_heli_loopmax 1 +// set scr_heli_maxhealth 1100 +// set scr_heli_missile_engage_dist 2000 +// set scr_heli_missile_friendlycare 256 +// set scr_heli_missile_max 3 +// set scr_heli_missile_regen_time 10 +// set scr_heli_missile_rof 5 +// set scr_heli_missile_target_cone 0.3 +// set scr_heli_rage_missile 5 +// set scr_heli_target_recognition 0.5 +// set scr_heli_target_spawnprotection 5 +// set scr_heli_targeting_delay 0.5 +// set scr_heli_turret_engage_dist 1000 +// set scr_heli_turret_spinup_delay 0.75 +// set scr_heli_turretClipSize 40 +// set scr_heli_turretReloadTime 1.5 +// set scr_heli_visual_range 3500 + +// Teams +set scr_team_fftype 0 +set scr_team_teamkillspawndelay 20 +set scr_team_kickteamkillers 0 + +// Player +set scr_player_maxhealth 100 +set scr_player_suicidespawndelay 0 +set scr_player_healthregentime 5 +set scr_player_forcerespawn 1 +set scr_player_sprinttime 4 + +// UI +set scr_hardcore 1 +set scr_oldschool_mw 0 +set ui_hud_obituaries 1 +set ui_hud_showobjicons 1 + +//****************************************************************************** +// Perks +//****************************************************************************** +set scr_game_perks 1 +set perk_allow_specialty_parabolic 1 +set perk_allow_specialty_gpsjammer 1 +set perk_allow_specialty_holdbreath 1 +set perk_allow_specialty_quieter 1 +set perk_allow_specialty_longersprint 1 +set perk_allow_specialty_detectexplosive 1 +set perk_allow_specialty_explosivedamage 1 +set perk_allow_specialty_pistoldeath 1 +set perk_allow_specialty_grenadepulldeath 1 +set perk_allow_specialty_bulletdamage 1 +set perk_allow_specialty_bulletpenetration 1 +set perk_allow_specialty_bulletaccuracy 1 +set perk_allow_specialty_rof 1 +set perk_allow_specialty_fastreload 1 +set perk_allow_specialty_extraammo 1 +set perk_allow_specialty_armorvest 1 +set perk_allow_specialty_fraggrenade 1 +set perk_allow_specialty_specialgrenade 1 +set perk_allow_c4_mp 1 +set perk_allow_claymore_mp 1 +set perk_allow_rpg_mp 1 +// set perk_armorVest 75 +// set perk_bulletDamage 40 +// set perk_explosiveDamage 25 + +//****************************************************************************** +// Class Limits +//****************************************************************************** +set class_assault_limit 99 +set class_specops_limit 99 +set class_heavygunner_limit 99 +set class_demolitions_limit 99 +set class_sniper_limit 99 + +//****************************************************************************** +// Class Team Options +//****************************************************************************** +set allies_allow_assault 1 +set axis_allow_assault 1 +set allies_allow_specops 1 +set axis_allow_specops 1 +set allies_allow_heavygunner 1 +set axis_allow_heavygunner 1 +set allies_allow_demolitions 1 +set axis_allow_demolitions 1 +set allies_allow_sniper 1 +set axis_allow_sniper 1 + +//****************************************************************************** +// Assault Class Default Loadout +//****************************************************************************** +set class_assault_primary m16 +set class_assault_primary_attachment gl +set class_assault_secondary beretta +set class_assault_secondary_attachment none +set class_assault_perk1 specialty_null +set class_assault_perk2 specialty_bulletdamage +set class_assault_perk3 specialty_longersprint +set class_assault_grenade concussion_grenade +set class_assault_camo camo_none +set class_assault_frags 1 +set class_assault_special 1 + +//****************************************************************************** +// Specops Class Default Loadout +//****************************************************************************** +set class_specops_primary mp5 +set class_specops_primary_attachment none +set class_specops_secondary usp +set class_specops_secondary_attachment silencer +set class_specops_perk1 c4_mp +set class_specops_perk2 specialty_explosivedamage +set class_specops_perk3 specialty_bulletaccuracy +set class_specops_grenade flash_grenade +set class_specops_camo camo_none +set class_specops_frags 1 +set class_specops_special 1 + +//****************************************************************************** +// Heavygunner Class Default Loadout +//****************************************************************************** +set class_heavygunner_primary saw +set class_heavygunner_primary_attachment none +set class_heavygunner_secondary usp +set class_heavygunner_secondary_attachment none +set class_heavygunner_perk1 specialty_specialgrenade +set class_heavygunner_perk2 specialty_armorvest +set class_heavygunner_perk3 specialty_bulletpenetration +set class_heavygunner_grenade concussion_grenade +set class_heavygunner_camo camo_none +set class_heavygunner_frags 1 +set class_heavygunner_special 1 + +//****************************************************************************** +// Demolitions Class Default Loadout +//****************************************************************************** +set class_demolitions_primary winchester1200 +set class_demolitions_primary_attachment none +set class_demolitions_secondary beretta +set class_demolitions_secondary_attachment none +set class_demolitions_perk1 rpg_mp +set class_demolitions_perk2 specialty_explosivedamage +set class_demolitions_perk3 specialty_longersprint +set class_demolitions_grenade smoke_grenade +set class_demolitions_camo camo_none +set class_demolitions_frags 1 +set class_demolitions_special 1 + +//****************************************************************************** +// Sniper Class Default Loadout +//****************************************************************************** +set class_sniper_primary m40a3 +set class_sniper_primary_attachment none +set class_sniper_secondary beretta +set class_sniper_secondary_attachment silencer +set class_sniper_perk1 specialty_specialgrenade +set class_sniper_perk2 specialty_bulletdamage +set class_sniper_perk3 specialty_bulletpenetration +set class_sniper_grenade flash_grenade +set class_sniper_camo camo_none +set class_sniper_frags 1 +set class_sniper_special 1 + +//****************************************************************************** +// Move Speed +//****************************************************************************** +set class_assault_movespeed 0.95 +set class_specops_movespeed 1.00 +set class_heavygunner_movespeed 0.875 +set class_demolitions_movespeed 1.00 +set class_sniper_movespeed 1.00 + +//****************************************************************************** +// Enables Dropping of Specified Weapon Class +//****************************************************************************** +set class_assault_allowdrop 1 +set class_specops_allowdrop 1 +set class_heavygunner_allowdrop 1 +set class_demolitions_allowdrop 1 +set class_sniper_allowdrop 1 + +//****************************************************************************** +// Assault Rifles +//****************************************************************************** +set weap_allow_m16 1 +set weap_allow_ak47 1 +set weap_allow_m4 1 +set weap_allow_g3 1 +set weap_allow_g36c 1 +set weap_allow_m14 1 +set weap_allow_mp44 1 + +//****************************************************************************** +// Assault Attachments +//****************************************************************************** +set attach_allow_assault_none 1 +set attach_allow_assault_gl 1 +set attach_allow_assault_reflex 1 +set attach_allow_assault_silencer 1 +set attach_allow_assault_acog 1 + +//****************************************************************************** +// SMG +//****************************************************************************** +set weap_allow_mp5 1 +set weap_allow_skorpion 1 +set weap_allow_uzi 1 +set weap_allow_ak74u 1 +set weap_allow_p90 1 + +//****************************************************************************** +// SMG Attachments +//****************************************************************************** +set attach_allow_smg_none 1 +set attach_allow_smg_reflex 1 +set attach_allow_smg_silencer 1 +set attach_allow_smg_acog 1 + +//****************************************************************************** +// Shotguns +//****************************************************************************** +set weap_allow_m1014 1 +set weap_allow_winchester1200 1 + +//****************************************************************************** +// Shotgun Attachments +//****************************************************************************** +set attach_allow_shotgun_none 1 +set attach_allow_shotgun_reflex 1 +set attach_allow_shotgun_grip 1 + +//****************************************************************************** +// LMG +//****************************************************************************** +set weap_allow_saw 1 +set weap_allow_rpd 1 +set weap_allow_m60e4 1 + +//****************************************************************************** +// LMG Attachments +//****************************************************************************** +set attach_allow_lmg_none 1 +set attach_allow_lmg_reflex 1 +set attach_allow_lmg_grip 1 +set attach_allow_lmg_acog 1 + +//****************************************************************************** +// Sniper Rifles +//****************************************************************************** +set weap_allow_dragunov 1 +set weap_allow_m40a3 1 +set weap_allow_barrett 1 +set weap_allow_remington700 1 +set weap_allow_m21 1 + +//****************************************************************************** +// Sniper Attachments +//****************************************************************************** +set attach_allow_sniper_none 1 +set attach_allow_sniper_acog 1 + +//****************************************************************************** +// Pistols +//****************************************************************************** +set weap_allow_beretta 1 +set weap_allow_colt45 1 +set weap_allow_usp 1 +set weap_allow_deserteagle 1 +set weap_allow_deserteaglegold 1 + +//****************************************************************************** +// Pistol Attachments +//****************************************************************************** +set attach_allow_pistol_none 1 +set attach_allow_pistol_silencer 1 + +//****************************************************************************** +// Grenades / Explosives +//****************************************************************************** +set weap_allow_frag_grenade 1 +set weap_allow_concussion_grenade 1 +set weap_allow_flash_grenade 1 +set weap_allow_smoke_grenade 1 +// set scr_weapon_allowc4 1 +// set scr_weapon_allowclaymores 1 +// set scr_weapon_allowflash 1 +// set scr_weapon_allowfrags 1 +// set scr_weapon_allowmines 1 +// set scr_weapon_allowrpgs 1 +// set scr_weapon_allowsmoke 1 + +//****************************************************************************** +// Game Type Settings +//****************************************************************************** + +//****************************************************************************** +// Free For All Deathmatch: +//****************************************************************************** +set scr_dm_scorelimit 250 +// set scr_dm_timelimit +// set scr_dm_numlives +// set scr_dm_roundlimit +set scr_dm_playerrespawndelay -9 +set scr_dm_waverespawndelay -9 + +//****************************************************************************** + +//****************************************************************************** +// Domination: +//****************************************************************************** +// set scr_dom_scorelimit +// set scr_dom_timelimit +// set scr_dom_numlives +// set scr_dom_roundlimit +// set scr_dom_playerrespawndelay +// set scr_dom_waverespawndelay +//****************************************************************************** + +//****************************************************************************** +// Headquarters: +//****************************************************************************** +// set scr_koth_scorelimit +// set scr_koth_timelimit +// set scr_koth_numlives +// set scr_koth_roundlimit +// set scr_koth_roundswitch +// set scr_koth_playerrespawndelay +// set scr_koth_waverespawndelay +// set koth_autodestroytime +// set koth_kothmode +// set koth_spawntime +// set koth_delayPlayer 0 +// set koth_spawnDelay 0 +//****************************************************************************** + +//****************************************************************************** +// Sabotage: +//****************************************************************************** +// set scr_sab_scorelimit +// set scr_sab_timelimit +// set scr_sab_numlives +// set scr_sab_bombtimer +// set scr_sab_defusetime +// set scr_sab_hotpotato +// set scr_sab_planttime +// set scr_sab_roundlimit +// set scr_sab_roundswitch +// set scr_sab_playerrespawndelay 4 +// set scr_sab_waverespawndelay 0 +//****************************************************************************** + +//****************************************************************************** +// Search & Destroy +//****************************************************************************** +set scr_sd_scorelimit 10 +// set scr_sd_timelimit +// set scr_sd_numlives +// set scr_sd_bombtimer +// set scr_sd_defusetime +// set scr_sd_multibomb +// set scr_sd_planttime +// set scr_sd_roundlimit +// set scr_sd_roundswitch +// set scr_sd_playerrespawndelay +// set scr_sd_waverespawndelay +//****************************************************************************** + +//****************************************************************************** +// Team Deathmatch : +//****************************************************************************** +// set scr_war_scorelimit +// set scr_war_timelimit +// set scr_war_numlives +// set scr_war_roundlimit +set scr_war_playerrespawndelay 1 +set scr_war_waverespawndelay 0 +//****************************************************************************** + +//****************************************************************************** +// Map Names +//****************************************************************************** +// ambush = mp_convoy +// backlot = mp_backlot +// bloc = mp_bloc +// bog = mp_bog +// countdown = mp_countdown +// crash = mp_crash +// crossfire = mp_crossfire +// district = mp_citystreets +// downpour = mp_farm +// overgrown = mp_overgrown +// pipeline = mp_pipeline +// shipment = mp_shipment +// showdown = mp_showdown +// strike = mp_strike +// vacant = mp_vacant +// wet work = mp_cargoship +// winter crash = mp_crash_snow +// broadcast = mp_broadcast +// creek = mp_creek +// chinatown = mp_carentan +// killhouse = mp_killhouse +//****************************************************************************** +// mp_backlot mp_bloc mp_bog mp_broadcast mp_carentan mp_cargoship mp_citystreets mp_convoy mp_countdown mp_crash mp_crash_snow mp_creek mp_crossfire mp_farm mp_killhouse mp_overgrown mp_pipeline mp_shipment mp_showdown mp_strike mp_vacant +// mp_broadcast mp_carentan mp_crash_snow mp_creek mp_killhouse +//****************************************************************************** + +//****************************************************************************** +// Game Types +//****************************************************************************** +// "dm" - Free For All Deathmatch +// "dom" - Domination +// "koth" - Headquarters +// "sab" - Sabotage +// "sd" - Search & Destroy +// "war" - Team Deathmatch +//****************************************************************************** +set g_gametype "war" + +//****************************************************************************** +// Map Rotations +//****************************************************************************** +//****************************************************************************** +// DM -- FREE FOR ALL DEATHMATCH +//****************************************************************************** +// set sv_mapRotation "gametype dm map mp_backlot gametype dm map mp_bloc gametype dm map mp_bog gametype dm map mp_cargoship gametype dm map mp_citystreets gametype dm map mp_convoy gametype dm map mp_countdown gametype dm map mp_crash gametype dm map mp_crossfire gametype dm map mp_farm gametype dm map mp_overgrown gametype dm map mp_pipeline gametype dm map mp_shipment gametype dm map mp_showdown gametype dm map mp_strike gametype dm map mp_vacant" + +//****************************************************************************** +// DM -- FREE FOR ALL DEATHMATCH DEVMAP +//****************************************************************************** +// set sv_mapRotation "gametype dm devmap mp_backlot gametype dm devmap mp_bloc gametype dm devmap mp_bog gametype dm devmap mp_cargoship gametype dm devmap mp_citystreets gametype dm devmap mp_convoy gametype dm devmap mp_countdown gametype dm devmap mp_crash gametype dm devmap mp_crossfire gametype dm devmap mp_farm gametype dm devmap mp_overgrown gametype dm devmap mp_pipeline gametype dm devmap mp_shipment gametype dm devmap mp_showdown gametype dm devmap mp_strike gametype dm devmap mp_vacant" + +//****************************************************************************** +// DOM -- DOMINATION +//****************************************************************************** +// set sv_mapRotation "gametype dom map mp_backlot gametype dom map mp_bloc gametype dom map mp_bog gametype dom map mp_cargoship gametype dom map mp_citystreets gametype dom map mp_convoy gametype dom map mp_countdown gametype dom map mp_crash gametype dom map mp_crossfire gametype dom map mp_farm gametype dom map mp_overgrown gametype dom map mp_pipeline gametype dom map mp_shipment gametype dom map mp_showdown gametype dom map mp_strike gametype dom map mp_vacant" + +//****************************************************************************** +// KOTH -- HEADQUARTERS +//****************************************************************************** +// set sv_mapRotation "gametype koth map mp_backlot gametype koth map mp_bloc gametype koth map mp_bog gametype koth map mp_cargoship gametype koth map mp_citystreets gametype koth map mp_convoy gametype koth map mp_countdown gametype koth map mp_crash gametype koth map mp_crossfire gametype koth map mp_farm gametype koth map mp_overgrown gametype koth map mp_pipeline gametype koth map mp_shipment gametype koth map mp_showdown gametype koth map mp_strike gametype koth map mp_vacant" + +//****************************************************************************** +// SAB -- SABOTAGE +//****************************************************************************** +// set sv_mapRotation "gametype sab map mp_backlot gametype sab map mp_bloc gametype sab map mp_bog gametype sab map mp_cargoship gametype sab map mp_citystreets gametype sab map mp_convoy gametype sab map mp_countdown gametype sab map mp_crash gametype sab map mp_crossfire gametype sab map mp_farm gametype sab map mp_overgrown gametype sab map mp_pipeline gametype sab map mp_shipment gametype sab map mp_showdown gametype sab map mp_strike gametype sab map mp_vacant" + +//****************************************************************************** +// SD -- SEARCH & DESTROY +//****************************************************************************** +// set sv_mapRotation "gametype sd map mp_backlot gametype sd map mp_bloc gametype sd map mp_bog gametype sd map mp_cargoship gametype sd map mp_citystreets gametype sd map mp_convoy gametype sd map mp_countdown gametype sd map mp_crash gametype sd map mp_crossfire gametype sd map mp_farm gametype sd map mp_overgrown gametype sd map mp_pipeline gametype sd map mp_shipment gametype sd map mp_showdown gametype sd map mp_strike gametype sd map mp_vacant" + +//****************************************************************************** +// SD -- SEARCH & DESTROY DEVMAP +//****************************************************************************** +// set sv_mapRotation "gametype sd devmap mp_backlot gametype sd devmap mp_bloc gametype sd devmap mp_bog gametype sd devmap mp_cargoship gametype sd devmap mp_citystreets gametype sd devmap mp_convoy gametype sd devmap mp_countdown gametype sd devmap mp_crash gametype sd devmap mp_crossfire gametype sd devmap mp_farm gametype sd devmap mp_overgrown gametype sd devmap mp_pipeline gametype sd devmap mp_shipment gametype sd devmap mp_showdown gametype sd devmap mp_strike gametype sd devmap mp_vacant" + +//****************************************************************************** +// WAR -- TEAM DEATHMATCH +//****************************************************************************** +set sv_mapRotation "gametype war map mp_backlot gametype war map mp_bloc gametype war map mp_bog gametype war map mp_cargoship gametype war map mp_citystreets gametype war map mp_convoy gametype war map mp_countdown gametype war map mp_crash gametype war map mp_crossfire gametype war map mp_farm gametype war map mp_overgrown gametype war map mp_pipeline gametype war map mp_shipment gametype war map mp_showdown gametype war map mp_strike gametype war map mp_vacant" + +//****************************************************************************** +// BROADCAST -- ROTATION +//****************************************************************************** +// set sv_mapRotation "gametype dm map mp_broadcast gametype dom map mp_broadcast gametype koth map mp_broadcast gametype sab map mp_broadcast gametype sd map mp_broadcast gametype war map mp_broadcast" + +//****************************************************************************** +// BROADCAST -- DEVMAP ROTATION +//****************************************************************************** +// set sv_mapRotation "gametype dm devmap mp_broadcast gametype dom devmap mp_broadcast gametype koth devmap mp_broadcast gametype sab devmap mp_broadcast gametype sd devmap mp_broadcast gametype war devmap mp_broadcast" \ No newline at end of file diff --git a/Call of Duty 4/Configs/Server Config/server_mods2.cfg b/Call of Duty 4/Configs/Server Config/server_mods2.cfg new file mode 100755 index 0000000..53ca427 --- /dev/null +++ b/Call of Duty 4/Configs/Server Config/server_mods2.cfg @@ -0,0 +1,659 @@ +//****************************************************************************** +// Call of Duty 4 - Config by RigorousSphinx +//****************************************************************************** +//****************************************************************************** +// Public Information +//****************************************************************************** +sets sv_hostname "^5$('*') ^2Hacked ^3/ ^1Modded ^5Rotation ^3Server" // ^5$('*') ^2Hacked ^3/ ^1Modded ^5Rotation ^3Server +sets _Admin "RigorousSphinx" +// sets _Email "admin AT yoursite DOT com" +// sets _Website "http://www.cod4boards.com" +sets _Location "North Carolina, US" +// sets _Vent "" +// sets _Irc "" +sets _Maps "CoD4 Stock" +set scr_motd "^3Welcome to $('*') Modded Server. Enjoy!!" + +//****************************************************************************** +// Load Mods +//****************************************************************************** +//****************************************************************************** +// PeZBOT Mod +//****************************************************************************** +// set fs_game "mods/PeZBOT" +// sets _Mod "PeZBOT" +// sets _ModVer "006p" +// sets _ModUpdate "^3Right Now" +// set svr_pezbots "5" +// set svr_pezbots_team "autoassign" +//****************************************************************************** + +//****************************************************************************** +// Init & Exec CFG Files +//****************************************************************************** +// wait +// exec test1.cfg +// wait +// exec test2.cfg + +//****************************************************************************** +// Common Server Settings +//****************************************************************************** +// Log Settings +set g_logsync "2" // 0 = No Log, 1 = Buffered, 2 = Continuous, 3 = Append +set logfile "1" // 0 = No Log, 1 = Log File Enabled +set g_log "games_mp.log" // Name of log file, D: games_mp.log +set sv_log_damage "1" + +// Network Options +// set net_ip "1.2.3.4" // Set your servers IP address +// set net_port "28960" // Set your port number +set com_hunkMegs "512" +set net_noipx "1" // Allow ONLY tcp/ip protocol, player/server communications + +// Server Network Mode +set dedicated "2" // 0 = Listen, 1 = LAN, 2 = Internet + +// Master Servers +set sv_master1 "cod4master.activision.com" +set sv_master2 "cod4authorize.activision.com" +set sv_master3 "cod4master.infinityward.com" +set sv_master3 "cod4update.activision.com" +set sv_master4 "master.gamespy.com:28960" +set sv_master5 "master0.gamespy.com" +set sv_master6 "master1.gamespy.com" +set sv_master7 "clanservers.net" +set sv_gamespy "1" + +// Password Settings +set rcon_password "aag" // RCON must supply pw to use +set sv_privatePassword "" // Private slots, non-public slots +set g_password "" + +// Player Slots +set sv_maxclients "24" // MAX server player slots, this is TOTAL player slots, D: 32 +set sv_privateclients "" // Number of private player slots, maxclients - privateclients = public slots + +// Ping +set sv_minPing "0" // MIN player ping on CONNECT, D: 0 +set sv_maxping "800" // MAX player ping on CONNECT, D: 350 + +// Client Download Settings, (0=off/1=on) Used for MODs and custom maps +// set sv_allowdownload "1" +// seta sv_wwwDownload "1" +// seta sv_wwwBaseURL "http://www.xxx.xxx.xx" +// seta sv_wwwDlDisconnected "1" + +// Rate +set sv_maxRate "5000" + +// FPS +// set sv_fps "20" + +// Drop Inactive Players +set sv_timeout "300" +set sv_zombietime "1" +set g_inactivity "0" +set g_inactivityspectator "0" + +// Anti Flooding Settings +set sv_floodProtect "1" +set sv_reconnectlimit "3" + +// Anti Cheat Settings +set sv_disableClientConsole "0" +set cl_autocmd "0" +set sv_cheats "0" +set sv_pure "1" +set g_banIPs "" +set g_no_script_spam "1" +set sv_punkbuster "0" + +// Anti Lag +set g_antilag "1" +set g_smoothClients "1" + +// Temporary Ban Duration +set sv_kickBanTime "120" // D: 3600 + +// In-Game Voice Communication System +set sv_voice "0" +set sv_voiceQuality "1" +set voice_deadChat "0" +set voice_global "0" +set voice_localEcho "0" +set winvoice_mic_mute "1" + +//****************************************************************************** +// Modded Settings +//****************************************************************************** +// set scr_xpscale "1" +// set scr_fog_disable "1" +// set jump_height "800" +// set g_gravity "100" +// set g_speed "350" +// set bg_fallDamageMaxHeight "9999" +// set bg_fallDamageMinHeight "9999" +// set r_fullbright "1" +// set player_sustainAmmo "1" +// set cg_laserForceOn "1" + +//****************************************************************************** +// Misc Settings +//****************************************************************************** +set sv_allowAnonymous "0" +set g_compassShowEnemies "0" +set g_deadChat "0" +// set g_maxDroppedWeapons "16" +// set g_redCrosshairs "0" +// set scr_drawfriend "1" +set g_allowVote "1" +// set g_voteAbstainWeight "0.5" +// ui_maxclients 32 +// ui_allowvote "" +// ui_allow_classchange "" +// ui_allow_controlschange "" +// ui_allow_teamchange "" +// ui_stat_headshots "" + +// set scr_friendlyfire "1" +// set scr_freelook "0" +// set scr_killcam "0" +// set scr_spectateenemy "0" +// set scr_allow_vote "1" + +set scr_enable_nightvision 1 +set scr_enable_music 1 +set scr_enable_hiticon 1 + +// Gameplay +set scr_game_allowkillcam 1 +set scr_game_onlyheadshots 0 +set scr_game_deathpointloss 0 +set scr_game_suicidepointloss 0 +set scr_team_teamkillpointloss 1 +set scr_game_spectatetype 1 +set scr_game_forceuav 0 + +// Hardpoints +set scr_game_hardpoints 1 +set scr_hardpoint_allowuav 1 +set scr_hardpoint_allowartillery 1 +set scr_hardpoint_allowhelicopter 1 +set scr_hardpoint_allowsupply 1 + +// Helicopter Settings +// set scr_heli_armor 500 +// set scr_heli_armor_bulletdamage 0.3 +// set scr_heli_attract_range 4096 +// set scr_heli_attract_strength 1000 +// set scr_heli_hardpoint_interval 180 +// set scr_heli_health_degrade 0 +// set scr_heli_loopmax 1 +// set scr_heli_maxhealth 1100 +// set scr_heli_missile_engage_dist 2000 +// set scr_heli_missile_friendlycare 256 +// set scr_heli_missile_max 3 +// set scr_heli_missile_regen_time 10 +// set scr_heli_missile_rof 5 +// set scr_heli_missile_target_cone 0.3 +// set scr_heli_rage_missile 5 +// set scr_heli_target_recognition 0.5 +// set scr_heli_target_spawnprotection 5 +// set scr_heli_targeting_delay 0.5 +// set scr_heli_turret_engage_dist 1000 +// set scr_heli_turret_spinup_delay 0.75 +// set scr_heli_turretClipSize 40 +// set scr_heli_turretReloadTime 1.5 +// set scr_heli_visual_range 3500 + +// Teams +set scr_team_fftype 0 +set scr_team_teamkillspawndelay 20 +set scr_team_kickteamkillers 0 + +// Player +set scr_player_maxhealth 100 +set scr_player_suicidespawndelay 0 +set scr_player_healthregentime 5 +set scr_player_forcerespawn 1 +set scr_player_sprinttime 4 + +// UI +set scr_hardcore 1 +set scr_oldschool_mw 0 +set ui_hud_obituaries 1 +set ui_hud_showobjicons 1 + +//****************************************************************************** +// Perks +//****************************************************************************** +set scr_game_perks 1 +set perk_allow_specialty_parabolic 1 +set perk_allow_specialty_gpsjammer 1 +set perk_allow_specialty_holdbreath 1 +set perk_allow_specialty_quieter 1 +set perk_allow_specialty_longersprint 1 +set perk_allow_specialty_detectexplosive 1 +set perk_allow_specialty_explosivedamage 1 +set perk_allow_specialty_pistoldeath 1 +set perk_allow_specialty_grenadepulldeath 1 +set perk_allow_specialty_bulletdamage 1 +set perk_allow_specialty_bulletpenetration 1 +set perk_allow_specialty_bulletaccuracy 1 +set perk_allow_specialty_rof 1 +set perk_allow_specialty_fastreload 1 +set perk_allow_specialty_extraammo 1 +set perk_allow_specialty_armorvest 1 +set perk_allow_specialty_fraggrenade 1 +set perk_allow_specialty_specialgrenade 1 +set perk_allow_c4_mp 1 +set perk_allow_claymore_mp 1 +set perk_allow_rpg_mp 1 +// set perk_armorVest 75 +// set perk_bulletDamage 40 +// set perk_explosiveDamage 25 + +//****************************************************************************** +// Class Limits +//****************************************************************************** +set class_assault_limit 99 +set class_specops_limit 99 +set class_heavygunner_limit 99 +set class_demolitions_limit 99 +set class_sniper_limit 99 + +//****************************************************************************** +// Class Team Options +//****************************************************************************** +// set allies_allow_assault 1 +// set axis_allow_assault 1 +// set allies_allow_specops 1 +// set axis_allow_specops 1 +// set allies_allow_heavygunner 1 +// set axis_allow_heavygunner 1 +// set allies_allow_demolitions 1 +// set axis_allow_demolitions 1 +// set allies_allow_sniper 1 +// set axis_allow_sniper 1 + +//****************************************************************************** +// Assault Class Default Loadout +//****************************************************************************** +set class_assault_primary m16 +set class_assault_primary_attachment gl +set class_assault_secondary beretta +set class_assault_secondary_attachment none +set class_assault_perk1 specialty_null +set class_assault_perk2 specialty_bulletdamage +set class_assault_perk3 specialty_longersprint +set class_assault_grenade concussion_grenade +set class_assault_camo camo_none +set class_assault_frags 1 +set class_assault_special 1 + +//****************************************************************************** +// Specops Class Default Loadout +//****************************************************************************** +set class_specops_primary mp5 +set class_specops_primary_attachment none +set class_specops_secondary usp +set class_specops_secondary_attachment silencer +set class_specops_perk1 c4_mp +set class_specops_perk2 specialty_explosivedamage +set class_specops_perk3 specialty_bulletaccuracy +set class_specops_grenade flash_grenade +set class_specops_camo camo_none +set class_specops_frags 1 +set class_specops_special 1 + +//****************************************************************************** +// Heavygunner Class Default Loadout +//****************************************************************************** +set class_heavygunner_primary saw +set class_heavygunner_primary_attachment none +set class_heavygunner_secondary usp +set class_heavygunner_secondary_attachment none +set class_heavygunner_perk1 specialty_specialgrenade +set class_heavygunner_perk2 specialty_armorvest +set class_heavygunner_perk3 specialty_bulletpenetration +set class_heavygunner_grenade concussion_grenade +set class_heavygunner_camo camo_none +set class_heavygunner_frags 1 +set class_heavygunner_special 1 + +//****************************************************************************** +// Demolitions Class Default Loadout +//****************************************************************************** +set class_demolitions_primary winchester1200 +set class_demolitions_primary_attachment none +set class_demolitions_secondary beretta +set class_demolitions_secondary_attachment none +set class_demolitions_perk1 rpg_mp +set class_demolitions_perk2 specialty_explosivedamage +set class_demolitions_perk3 specialty_longersprint +set class_demolitions_grenade smoke_grenade +set class_demolitions_camo camo_none +set class_demolitions_frags 1 +set class_demolitions_special 1 + +//****************************************************************************** +// Sniper Class Default Loadout +//****************************************************************************** +set class_sniper_primary m40a3 +set class_sniper_primary_attachment none +set class_sniper_secondary beretta +set class_sniper_secondary_attachment silencer +set class_sniper_perk1 specialty_specialgrenade +set class_sniper_perk2 specialty_bulletdamage +set class_sniper_perk3 specialty_bulletpenetration +set class_sniper_grenade flash_grenade +set class_sniper_camo camo_none +set class_sniper_frags 1 +set class_sniper_special 1 + +//****************************************************************************** +// Move Speed +//****************************************************************************** +set class_assault_movespeed 0.95 +set class_specops_movespeed 1.00 +set class_heavygunner_movespeed 0.875 +set class_demolitions_movespeed 1.00 +set class_sniper_movespeed 1.00 + +//****************************************************************************** +// Enables Dropping of Specified Weapon Class +//****************************************************************************** +set class_assault_allowdrop 1 +set class_specops_allowdrop 1 +set class_heavygunner_allowdrop 1 +set class_demolitions_allowdrop 1 +set class_sniper_allowdrop 1 + +//****************************************************************************** +// Assault Rifles +//****************************************************************************** +set weap_allow_m16 1 +set weap_allow_ak47 1 +set weap_allow_m4 1 +set weap_allow_g3 1 +set weap_allow_g36c 1 +set weap_allow_m14 1 +set weap_allow_mp44 1 + +//****************************************************************************** +// Assault Attachments +//****************************************************************************** +set attach_allow_assault_none 1 +set attach_allow_assault_gl 1 +set attach_allow_assault_reflex 1 +set attach_allow_assault_silencer 1 +set attach_allow_assault_acog 1 + +//****************************************************************************** +// SMG +//****************************************************************************** +set weap_allow_mp5 1 +set weap_allow_skorpion 1 +set weap_allow_uzi 1 +set weap_allow_ak74u 1 +set weap_allow_p90 1 + +//****************************************************************************** +// SMG Attachments +//****************************************************************************** +set attach_allow_smg_none 1 +set attach_allow_smg_reflex 1 +set attach_allow_smg_silencer 1 +set attach_allow_smg_acog 1 + +//****************************************************************************** +// Shotguns +//****************************************************************************** +set weap_allow_m1014 1 +set weap_allow_winchester1200 1 + +//****************************************************************************** +// Shotgun Attachments +//****************************************************************************** +set attach_allow_shotgun_none 1 +set attach_allow_shotgun_reflex 1 +set attach_allow_shotgun_grip 1 + +//****************************************************************************** +// LMG +//****************************************************************************** +set weap_allow_saw 1 +set weap_allow_rpd 1 +set weap_allow_m60e4 1 + +//****************************************************************************** +// LMG Attachments +//****************************************************************************** +set attach_allow_lmg_none 1 +set attach_allow_lmg_reflex 1 +set attach_allow_lmg_grip 1 +set attach_allow_lmg_acog 1 + +//****************************************************************************** +// Sniper Rifles +//****************************************************************************** +set weap_allow_dragunov 1 +set weap_allow_m40a3 1 +set weap_allow_barrett 1 +set weap_allow_remington700 1 +set weap_allow_m21 1 + +//****************************************************************************** +// Sniper Attachments +//****************************************************************************** +set attach_allow_sniper_none 1 +set attach_allow_sniper_acog 1 + +//****************************************************************************** +// Pistols +//****************************************************************************** +set weap_allow_beretta 1 +set weap_allow_colt45 1 +set weap_allow_usp 1 +set weap_allow_deserteagle 1 +set weap_allow_deserteaglegold 1 + +//****************************************************************************** +// Pistol Attachments +//****************************************************************************** +set attach_allow_pistol_none 1 +set attach_allow_pistol_silencer 1 + +//****************************************************************************** +// Grenades / Explosives +//****************************************************************************** +set weap_allow_frag_grenade 1 +set weap_allow_concussion_grenade 1 +set weap_allow_flash_grenade 1 +set weap_allow_smoke_grenade 1 +// set scr_weapon_allowc4 1 +// set scr_weapon_allowclaymores 1 +// set scr_weapon_allowflash 1 +// set scr_weapon_allowfrags 1 +// set scr_weapon_allowmines 1 +// set scr_weapon_allowrpgs 1 +// set scr_weapon_allowsmoke 1 + +//****************************************************************************** +// Game Type Settings +//****************************************************************************** + +//****************************************************************************** +// Free For All Deathmatch: +//****************************************************************************** +// set scr_dm_scorelimit +// set scr_dm_timelimit +// set scr_dm_numlives +// set scr_dm_playerrespawndelay +// set scr_dm_roundlimit +// set scr_dm_waverespawndelay +//****************************************************************************** + +//****************************************************************************** +// Domination: +//****************************************************************************** +// set scr_dom_scorelimit +// set scr_dom_timelimit +// set scr_dom_numlives +// set scr_dom_playerrespawndelay +// set scr_dom_roundlimit +// set scr_dom_waverespawndelay +//****************************************************************************** + +//****************************************************************************** +// Headquarters: +//****************************************************************************** +// set scr_koth_scorelimit +// set scr_koth_timelimit +// set scr_koth_numlives +// set scr_koth_playerrespawndelay +// set scr_koth_roundlimit +// set scr_koth_roundswitch +// set scr_koth_waverespawndelay +// koth_autodestroytime +// koth_kothmode +// koth_spawntime +//****************************************************************************** + +//****************************************************************************** +// Sabotage: +//****************************************************************************** +// set scr_sab_scorelimit +// set scr_sab_timelimit +// set scr_sab_numlives +// set scr_sab_bombtimer +// set scr_sab_defusetime +// set scr_sab_hotpotato +// set scr_sab_planttime +// set scr_sab_playerrespawndelay +// set scr_sab_roundlimit +// set scr_sab_roundswitch +// set scr_sab_waverespawndelay +//****************************************************************************** + +//****************************************************************************** +// Search & Destroy +//****************************************************************************** +// set scr_sd_scrorelimit +// set scr_sd_timelimit +// set scr_sd_numlives +// set scr_sd_bombtimer +// set scr_sd_defusetime +// set scr_sd_multibomb +// set scr_sd_planttime +// set scr_sd_playerrespawndelay +// set scr_sd_roundlimit +// set scr_sd_roundswitch +// set scr_sd_waverespawndelay +//****************************************************************************** + +//****************************************************************************** +// Team Deathmatch : +//****************************************************************************** +// set scr_war_scorelimit +// set scr_war_timelimit +// set scr_war_numlives +// set scr_war_playerrespawndelay +// set scr_war_roundlimit +// set scr_war_waverespawndelay +//****************************************************************************** + +//****************************************************************************** +// Map Names +//****************************************************************************** +// ambush = mp_convoy +// backlot = mp_backlot +// bloc = mp_bloc +// bog = mp_bog +// countdown = mp_countdown +// crash = mp_crash +// crossfire = mp_crossfire +// district = mp_citystreets +// downpour = mp_farm +// overgrown = mp_overgrown +// pipeline = mp_pipeline +// shipment = mp_shipment +// showdown = mp_showdown +// strike = mp_strike +// vacant = mp_vacant +// wet work = mp_cargoship +// winter crash = mp_crash_snow +// broadcast = mp_broadcast +// creek = mp_creek +// chinatown = mp_carentan +// killhouse = mp_killhouse +//****************************************************************************** +// mp_backlot mp_bloc mp_bog mp_broadcast mp_carentan mp_cargoship mp_citystreets mp_convoy mp_countdown mp_crash mp_crash_snow mp_creek mp_crossfire mp_farm mp_killhouse mp_overgrown mp_pipeline mp_shipment mp_showdown mp_strike mp_vacant +// mp_broadcast mp_carentan mp_crash_snow mp_creek mp_killhouse +//****************************************************************************** + +//****************************************************************************** +// Game Types +//****************************************************************************** +// "dm" - Free For All Deathmatch +// "dom" - Domination +// "koth" - Headquarters +// "sab" - Sabotage +// "sd" - Search & Destroy +// "war" - Team Deathmatch +//****************************************************************************** +set g_gametype "sd" + +//****************************************************************************** +// Map Rotations +//****************************************************************************** +//****************************************************************************** +// DM -- FREE FOR ALL DEATHMATCH +//****************************************************************************** +// set sv_mapRotation "gametype dm map mp_backlot gametype dm map mp_bloc gametype dm map mp_bog gametype dm map mp_cargoship gametype dm map mp_citystreets gametype dm map mp_convoy gametype dm map mp_countdown gametype dm map mp_crash gametype dm map mp_crossfire gametype dm map mp_farm gametype dm map mp_overgrown gametype dm map mp_pipeline gametype dm map mp_shipment gametype dm map mp_showdown gametype dm map mp_strike gametype dm map mp_vacant" + +//****************************************************************************** +// DM -- FREE FOR ALL DEATHMATCH DEVMAP +//****************************************************************************** +// set sv_mapRotation "gametype dm devmap mp_backlot gametype dm devmap mp_bloc gametype dm devmap mp_bog gametype dm devmap mp_cargoship gametype dm devmap mp_citystreets gametype dm devmap mp_convoy gametype dm devmap mp_countdown gametype dm devmap mp_crash gametype dm devmap mp_crossfire gametype dm devmap mp_farm gametype dm devmap mp_overgrown gametype dm devmap mp_pipeline gametype dm devmap mp_shipment gametype dm devmap mp_showdown gametype dm devmap mp_strike gametype dm devmap mp_vacant" + +//****************************************************************************** +// DOM -- DOMINATION +//****************************************************************************** +// set sv_mapRotation "gametype dom map mp_backlot gametype dom map mp_bloc gametype dom map mp_bog gametype dom map mp_cargoship gametype dom map mp_citystreets gametype dom map mp_convoy gametype dom map mp_countdown gametype dom map mp_crash gametype dom map mp_crossfire gametype dom map mp_farm gametype dom map mp_overgrown gametype dom map mp_pipeline gametype dom map mp_shipment gametype dom map mp_showdown gametype dom map mp_strike gametype dom map mp_vacant" + +//****************************************************************************** +// KOTH -- HEADQUARTERS +//****************************************************************************** +// set sv_mapRotation "gametype koth map mp_backlot gametype koth map mp_bloc gametype koth map mp_bog gametype koth map mp_cargoship gametype koth map mp_citystreets gametype koth map mp_convoy gametype koth map mp_countdown gametype koth map mp_crash gametype koth map mp_crossfire gametype koth map mp_farm gametype koth map mp_overgrown gametype koth map mp_pipeline gametype koth map mp_shipment gametype koth map mp_showdown gametype koth map mp_strike gametype koth map mp_vacant" + +//****************************************************************************** +// SAB -- SABOTAGE +//****************************************************************************** +// set sv_mapRotation "gametype sab map mp_backlot gametype sab map mp_bloc gametype sab map mp_bog gametype sab map mp_cargoship gametype sab map mp_citystreets gametype sab map mp_convoy gametype sab map mp_countdown gametype sab map mp_crash gametype sab map mp_crossfire gametype sab map mp_farm gametype sab map mp_overgrown gametype sab map mp_pipeline gametype sab map mp_shipment gametype sab map mp_showdown gametype sab map mp_strike gametype sab map mp_vacant" + +//****************************************************************************** +// SD -- SEARCH & DESTROY +//****************************************************************************** +// set sv_mapRotation "gametype sd map mp_backlot gametype sd map mp_bloc gametype sd map mp_bog gametype sd map mp_cargoship gametype sd map mp_citystreets gametype sd map mp_convoy gametype sd map mp_countdown gametype sd map mp_crash gametype sd map mp_crossfire gametype sd map mp_farm gametype sd map mp_overgrown gametype sd map mp_pipeline gametype sd map mp_shipment gametype sd map mp_showdown gametype sd map mp_strike gametype sd map mp_vacant" + +//****************************************************************************** +// SD -- SEARCH & DESTROY DEVMAP +//****************************************************************************** +set sv_mapRotation "gametype sd devmap mp_backlot gametype sd devmap mp_bloc gametype sd devmap mp_bog gametype sd devmap mp_cargoship gametype sd devmap mp_citystreets gametype sd devmap mp_convoy gametype sd devmap mp_countdown gametype sd devmap mp_crash gametype sd devmap mp_crossfire gametype sd devmap mp_farm gametype sd devmap mp_overgrown gametype sd devmap mp_pipeline gametype sd devmap mp_shipment gametype sd devmap mp_showdown gametype sd devmap mp_strike gametype sd devmap mp_vacant" + +//****************************************************************************** +// WAR -- TEAM DEATHMATCH +//****************************************************************************** +// set sv_mapRotation "gametype war map mp_backlot gametype war map mp_bloc gametype war map mp_bog gametype war map mp_cargoship gametype war map mp_citystreets gametype war map mp_convoy gametype war map mp_countdown gametype war map mp_crash gametype war map mp_crossfire gametype war map mp_farm gametype war map mp_overgrown gametype war map mp_pipeline gametype war map mp_shipment gametype war map mp_showdown gametype war map mp_strike gametype war map mp_vacant" + +//****************************************************************************** +// BROADCAST -- ROTATION +//****************************************************************************** +// set sv_mapRotation "gametype dm map mp_broadcast gametype dom map mp_broadcast gametype koth map mp_broadcast gametype sab map mp_broadcast gametype sd map mp_broadcast gametype war map mp_broadcast" + +//****************************************************************************** +// BROADCAST -- DEVMAP ROTATION +//****************************************************************************** +// set sv_mapRotation "gametype dm devmap mp_broadcast gametype dom devmap mp_broadcast gametype koth devmap mp_broadcast gametype sab devmap mp_broadcast gametype sd devmap mp_broadcast gametype war devmap mp_broadcast" diff --git a/Call of Duty 4/Docs/Binds Tips And Tricks.txt b/Call of Duty 4/Docs/Binds Tips And Tricks.txt new file mode 100755 index 0000000..29725f0 --- /dev/null +++ b/Call of Duty 4/Docs/Binds Tips And Tricks.txt @@ -0,0 +1,122 @@ +Alright here comes the second part of my tweaks and tips topic, here you will find many funny things to do such as changing the color of the name of your friends, changing the HUD, and even a special gift from me in the end ! + +- Binds : +So here we will talk about the most common thing in cod4, binds. You can see it as a function dedicated to a key you have chosen. For instance you can swap your class, change your name, say something, ... with just one key ! + +To change your name with a key, just type in your cfg this line + bind P "name seRvant . sabeR" + +Of course change my name by yours, and every time you'll press this key your name will change accordingly. Now if like me you have many names you can't assign all the names to a key then type this + bind M "toggle name "vKM <3" cura "Gae Bolg"" + +If there is a space in your name like vKM <3 for me you have to put it like this "vKM <3" for it to be considered as ONE name for the others you can just put space between your names + bind P "toggle name Albert Rodolph Henry" + +Each press of the key will change your name following the order of writing you did. +Now, how to bind a sentence to a key, it should be useful for you admins to bind a key to say "Do not use ..., Respect the rules" for instance. + bind L say "Enjoy your stay on the RvO server" + +If you want to put colors in your sentences you have to put something like that before the word +Do not use ^1Grenade-launchers (here Grenade-launchers will be RED), the colors are the following + +^1 = red +^2 = yellow +^3 = green +^4 = dark blue +^5 = light blue +^6 = pink +^7 = white +^8 = this one depends on which side you are (brown for spetz/opfor and grey for SAS/marines) +^9 = grey +^0 = black + +Now something utterly useless yet pretty funny, when you knife someone it is possible to make it so that your character will say Sorry in the same time ^^. Here is the command + bind MWHEELDOWN "+melee; wait; openscriptmenu quickresponses 4; wait; -melee" + +Now your character will say "Sorry" while knifing the enemy. if you want to say something else + "openScriptMenu quickcommands 1" // On Me! + "openScriptMenu quickcommands 2" // Move In! + "openScriptMenu quickstatements 1" // Contact! + "openScriptMenu quickstatements 2" // Multiple Contacts! + "openScriptMenu quickresponses 1" // Roger + "openScriptMenu quickresponses 2" // Negative + +Just replace the number with the sentence you want to say. + +Now something I personally like, change my teammates name color. I hate that green like color so I created my own blue like the sky. However ... the color resets every time an event occur (like dropbomb, plant, new round, etc ..) so there is a little problem. We'll have to couple it with our most used key, I think for everyone it is the move forward one. Here is the command + bind Z "+forward; g_teamColor_MyTeam 0.2 0.7 0.8 1; g_teamcolor_enemyteam "0.8 0.2 0.2 1" + +Change the numbers if you don't like my color =), Now your teammates will have their names in a beautiful sky like blue and the enemy an evil red color. On a side note you will then be able to see them better than before ! +I think that's all for this part once again if i remember something I'll update this post. + +-HUD/Radar : +You can slightly change your compass/radar and you can make smaller/bigger icons, it improves your orientation and customize your game even more ! + +To change your friends icon on the compass you will need 2 commands + seta compassFriendlyHeight "18.75" + seta compassFriendlyWidth "18.75" + +Change the numbers at your will. VERY IMPORTANT ! You cannot change your own icon it is now disallowed, dunno why but it can't be helped. You can be kicked from many servers if you try but you'll never get banned don't worry.The only things that could lead to a ban in your cfg are gamma binds and the burst fire script. the worse you could ever get is a kick on some servers. + +Now to change the game's icons like Bomb site A/B in the game + seta waypointiconwidth "13.37" + seta waypointiconheight "13.37" + +Same as above but for the compass + seta compassObjectiveHeight "20" seta compassObjectiveWidth "20" + +Now you got your own personalized interface. + +-Scoreboard : +This is something you can change to your pleasure, you can change everything in it and end with something like this +http://forum.i3d.net/attachments/modifications-cod4/943160171d1235546192-cod4-modify-your-scoreboard-28095615.jpgSome + +Some basic scoreboard commands + seta cg_scoreboardMyColor "1 0.6 0 0" + seta cg_scoreboardPingGraph "1" + seta cg_ScoresPing_BgColor "0.25098 0.25098 0.25098 0.501961" + seta cg_ScoresPing_HighColor "0.8 0 0 1" + seta cg_ScoresPing_LowColor "1 0.2 0 1" + seta cg_ScoresPing_MaxBars "4" + seta cg_ScoresPing_MedColor "0.8 0.8 0 1" + +ScoreboardMyColor will change the color of your name in the scoreboard +Set PingGraph to "1" if you want a graphical representation of ping rather than numerical. +MaxBars then allows you to specify how many vertical bars represent your ping. +Bg = BackgroundHighColor = the color to represent high ping (e.g. red) +LowColor = for low ping (e.g. green) +MedColor = medium ping (e.g. yellow) + +Sadly, just like your teammates name it resets after a while so we better bind it to the scoreboard key itself ! For me it is F4 so it will be this + bind F4 "+scores;g_ScoresColor_Allies 0 0 0 1;g_ScoresColor_Axis 0 0 0 1;g_scorescolor_free 0 0 0 1;pb_sleep 500;g_teamname_axis ^8Defence^7;g_teamname_allies ^9Attack^7;g_teamColor_Allies 0.2 0.2 0.75 1;g_teamColor_Axis 0.75 0.2 0.2 1" + +Do not be afraid by the size of the command, it includes all the scoreboard commands for me and i have something like that + http://fr.xfire.com/profile/vergilslayer21/screenshots/?view#107059514 + +For instance if you want to change the promod like colors behind the player names like I did you will have to change those 3 things. + g_ScoresColor_Allies 0 0 0 1 + g_ScoresColor_Axis 0 0 0 1 + g_scorescolor_free 0 0 0 1 + +Remember that it is in RGBA format. If you want to change the teams name just replace Attack and Defence by the names you want, you will be the only ones seeing it. You can rename them LOL FAG ARMY if you please. Just watchout for side switch you could be the guys under the LOL FAG ARMY at next round ^^. + +That's all for the scoreboard (It is probably the most difficult thing to try so if you need any help ask me here or add me Xfire I'll do what I can) + +-Others : +Here are all the things i didn't know where to place, first change the place of your fps indicator (activated by cg_drawfps 1), I'm sorry but I don't remember the coordinates of the screen corners so you will have to test it yourself. + seta cg_debugInfoCornerOffset "0 0" This is default + +If you want to read only what your teammates are saying and not the enemy (rage, flame, ... multiple reasons) here is the command + seta cg_teamChatsOnly 1 + +There are still so many things .. like put the chat box where you want and such, If you are interested in some other things just tell me I'll see if I can help. + +Now my gift to you, have you ever dreamed you were superman ? Then on cod4 you can be him, on Strike at least. For those that don't know what I'm talking about you have to see this + +It's pretty sick especially in clanwars when the enemy is trying to defuse and you just rape him from above he is like wtf aha. So I'll give you the binds that will allow you to do this ! However it is pretty difficult to learn it by yourselves that's why I would gladly show you how to do it. + bind W ";+moveright; wait; wait; -moveright" + bind < ";+moveleft; wait; wait; -moveleft" + +With those binds you will be able to move 1 pixel to the right/left which is ESSENTIAL in order to do that glitch, ppl on youtube just say move slightly to the right/left .. It would take years to do it that way even the slightest press on left/right key is too much. + +So here is the end of it ! I hope you learned some useful things, thanks for your patience, sorry for the english, and if you have trouble getting something to work just tell ! It was my pleasure. \ No newline at end of file diff --git a/Call of Duty 4/Docs/CoD4 Console Command Cheat Sheet.docx b/Call of Duty 4/Docs/CoD4 Console Command Cheat Sheet.docx new file mode 100755 index 0000000..53b79d8 Binary files /dev/null and b/Call of Duty 4/Docs/CoD4 Console Command Cheat Sheet.docx differ diff --git a/Call of Duty 4/Docs/CoD4 MP Broadcast Config.docx b/Call of Duty 4/Docs/CoD4 MP Broadcast Config.docx new file mode 100755 index 0000000..10fbbce Binary files /dev/null and b/Call of Duty 4/Docs/CoD4 MP Broadcast Config.docx differ diff --git a/Call of Duty 4/Docs/CoD4 MP Host Config.docx b/Call of Duty 4/Docs/CoD4 MP Host Config.docx new file mode 100755 index 0000000..7689cc3 Binary files /dev/null and b/Call of Duty 4/Docs/CoD4 MP Host Config.docx differ diff --git a/Call of Duty 4/Docs/CoD4 Server Host Guide.docx b/Call of Duty 4/Docs/CoD4 Server Host Guide.docx new file mode 100755 index 0000000..624706b Binary files /dev/null and b/Call of Duty 4/Docs/CoD4 Server Host Guide.docx differ diff --git a/Call of Duty 4/Docs/Commands.txt b/Call of Duty 4/Docs/Commands.txt new file mode 100755 index 0000000..f562d2c --- /dev/null +++ b/Call of Duty 4/Docs/Commands.txt @@ -0,0 +1,16 @@ +Call of Duty 4 - Modern Warfare Console Commands +By: RigorousSphinx +############################################### +UDP Ports: 20800, 20810, 28960 + +Startup Commands +############################################### +“C:\Program Files\Activision\Call of Duty 4 - Modern Warfare\iw3mp.exe” ++set dedicated 2 +set sv_punkbuster 1 +exec dedicated.cfg +map_rotate + +Main Commands +############################################### + +Text Colors +############################################### +^1 = Red ^2 = Green ^3 = Yellow ^4 = Blue ^5 = Cyan ^6 = Magenta ^7 = White ^9 = Grey ^0 = Black \ No newline at end of file diff --git a/Call of Duty 4/Docs/Custom Config.txt b/Call of Duty 4/Docs/Custom Config.txt new file mode 100755 index 0000000..5a8f78e --- /dev/null +++ b/Call of Duty 4/Docs/Custom Config.txt @@ -0,0 +1,2101 @@ +CoD4: MW MP Config Commands + +My Changes +-------------------------------------- +r_drawdecals 0 // 1 +r_drawsun 0 // 1 +r_drawwater 0 // 1 +r_detail 0 // 1 +r_outdoorfeather 0 // 8 + +r_lodbiasrigid 0 // 0 static objects (-1000=better to 0=lowest) +r_lodbiasskinned 0 // 0 skinned objects (-1000=better to 0=lowest) +r_lodscalerigid 4 // 1 static objects (1=best to 4=worst) +r_lodscaleskinned 4 // 1 skinned objects (1=best to 4=worst) + +Effect Code +-------------------------------------- +Spawn indicated item - give +Full health - give health +Get all items - give all +Ammunition - give ammo +Invincibility - god +Ignored by enemy - notarget +No clipping mode - noclip +Toggle debug mode - debug <0-1> +Toggle developer mode - developer <0-1> +Fly mode - ufo +Teleport to a specific map node - jumptonode +Suicide - kill +List all cvars - cvarlist +Dump all cvars to console - cvardump +Reset all cvars - cvar_restart +List all console commands - cmdlist +List all shaders of current map - shaderlist +List all images of current map - imagelist +List all sounds currently used - snd_list +List all entities currently used - entitylist +List all currently bound keys - bindlist +View graphics information - gfxinfo +Save game - savegame +Load saved game - loadgame +Reset variable to default value - reset +Play a cinematic file - cinematic +Set crosshair transparency; default is 1.0 - cg_crosshairAlpha +Set gravity value; default is 800 - g_gravity +Set HUD transparency; default is 1.0 - cg_hudAlpha +Set second that dead bodies remain onscreen - ai_corpsecount +Set shellshock duration - cg_shellshock +Set skill level - g_gameSkill +Set weapon knockback power; default is 1000 - g_knockback +Show miss distance when hitting NPCs - cg_showMiss <0-1> +Spawn indicated model - testmodel +Toggle AI - g_ai <0-1> +Toggle bullet debug mode - g_debugBullets <0-1> +Toggle bullet marks - cg_marks <0-1> +Toggle console debugging. - con_debug <0-1> +Toggle crosshair - cg_drawCrosshair <0-1> +Toggle ejecting shells - cg_brass <0-1> +Toggle entity bounding boxes - g_drawEntBBoxes v +Toggle fog - r_fog <0-1> +Toggle framerate displae - cg_drawFPS <0-1> +Toggle FX - fx_draw <0-1> +Toggle FX debugging. - fx_debug <0-1> +Toggle FX freezing - fx_freeze <0-1> +Toggle fx. If set to 0, fx will be disabled - fx_enable <0-1> +Toggle game timer - cg_drawTimer <0-1> +Toggle hit debug mode - g_debugShowHit <0-1> +Toggle HUD - cg_drawStatus <0-1> +Toggle HUD and crosshair - cg_draw2D <0-1> +Toggle letterbox format - cg_letterbox <0-1> +Toggle NPC health display - g_debugDamage <0 or 1> +Toggle objects and backgrounds - r_drawWorld <0-1> +Toggle objects and NPCs - r_drawEntities <0-1> +Toggle player and AI movement debug mode - g_debugMove <0-1> +Toggle player and AI movement debugging. - cl_debugMove <0-1> +Toggle rendring - cg_noRender <0-1> +Toggle shadows. - cg_shadows <0-1> +Toggle spawning - g_spawnai <0-1> +Toggle subtitles - cg_subtitles <0-1> +Toggle third person view - cg_thirdPerson <0-1> +Toggle vehicle debug mode - g_vehicleDebug <0-1> +Toggle wireframe mode - r_showtris <0-1> +Unknown - testgun +Unknown - debug_tankall <0-1> +Unknown - chain <0-1> +Unknown - ai_nocriticalsections <0-1> +Unknown - cg_skybox <0-1> +Unknown - cg_stats <0-1> +Unknown - cg_noPredict <0-1> +Unknown - cg_selectPlayer +Unknown - cg_tracerChance +Unknown - cg_ignore <0-1> +Unknown - cl_run <0-1> +Unknown - cl_running <0-1> +Unknown - dmflags <0-1> +Unknown - g_changelevel_time + +Frame rate related +-------------------------------------- +cg_brass 0 +cg_marks 0 +cg_marks_ents_player_only 0 +r_drawdecals 0 +r_drawsun 0 +r_drawwater 0 +r_detail 0 +r_picmip 3 +r_picmip_bump 3 +r_picmip_manual 1 +r_picmip_spec 3 +r_picmip_water 0 + +Network +-------------------------------------- +snaps 30 +cl_maxpackets 100 +rate 25000 +com_maxfps (from 125-250) + +Visibility +-------------------------------------- +r_gamma (0.1-3) +cg_fov 65 (through to 80) +sensitivity (from 0.1-30) + + +Written by jockyitch +Thursday, 29 November 2007 +Here is a list of configuration settings and their function. We will keep this list up to date: + +Kudos to the following who helped populate this: + +Crazy56 on GlobalWarFighter forums +Sparks on MODSonline.com +Bulletworm on IWNation Forums + +Known Clientside Variables +-------------------------------------- +seta r_aaalpha "0" //anti-aliasing transparency method (0=off 1=fast Dither 2=SuperSample) +seta r_aasamples "1" //antialiasing 1 to 16 (1=Off 16=Maximun) +seta r_altmodellightingupdate "0" //Alternate lighting method (0=Alternate 1=Normal) needs restart +seta r_autopriority "1"//When the game is minimized, change to low priority (1=lowpriority 0=no) +seta r_cachemodellighting "1"//Cache for models lighting (0=none 1=Speedup) +seta r_cachesmodellighting "1"//Cache for statics models lighting (0=none 1=Speedup) +seta r_depthprepass "1"//Currently unknown (0=Default 1=Speedup) +seta r_depthprepassmodels "1"//Currently unknown (0=Default 1=Speedup) +seta r_detail "0"//Detailed Shaders(0=none 1=Activated) +seta r_displayRefresh "100 Hz"//Monitor Refresh (typically: 60 Hz, 75 Hz, 100 Hz) +seta r_distortion "0"//Fire HeatHAze distortion (0=none 1=Activated) +seta r_dlightlimit "0"//Number of dynamic lights (0 to 4) +seta r_dof_enable "0"//Depth of Field (0=none 1=activated) +seta r_drawdecals "0"//Enable World decals render (0=none 1=activated) +seta r_drawsun "0"//Sun effects(0=none 1=activated) +seta r_drawwater "0"//Water animation(0=none 1=activated) +seta r_envmapexponent "0.05"//Reflection exponent (0.05 to 20) +seta r_envmapmaxintensity "0.01"//Reflection intensity based on glancing angle (0.01 to 2) +seta r_envmapminintensity "0"//Reflection intensity based on glancing angle (0 to 2) +seta r_envmapoverride "0"//Reflection intensity based on glancing angle (0=none 1=Override) +seta r_envmapspecular "0"//Environment Map specular lighting (0=none 1=activated) +seta r_envmapsunintensity "0"//Max sun specular on env materials (0=none to 4=full) +seta r_fastskin "1"//Cache Skin (0=none 1=activated) +seta r_floatz "1"//Floatz, DOF, Laser Sight effects, do not disable (0=none 1=activated). +seta r_glow_allowed "0"//Must be activated for Glow (0=none 1=allow glow) +seta r_gpusync "0"//Improves mouse response, but gives FPS hit (0=none 1=adaptive 2=agressive) +seta r_lodbiasrigid "0"//Level of detail for static objects (-1000=better to 0=lowest) +seta r_lodbiasskinned "0"//Level of detail for skinned objects (-1000=better to 0=lowest) +seta r_lodscalerigid "4"//Level of detail for static objects (1=best to 4=worst) +seta r_lodscaleskinned "4"//Level of detail for skinned objects (1=best to 4=worst) +seta r_normal "1"//Allow Shaders to use normal maps (0=none 1=Activated) +seta r_mode "800x600"//Graphics Resolution +seta r_multiGPU "0"//Activate for use SLI or CrossFire (0=single GPU 1=two or more GPUs) +seta r_outdoor "1"//Prevents particles from appearing indoors (0=they appear 1=Default, none) +seta r_outdoorfeather "0"//Z-feathering for Outdoors, smothed grass, Smoke (0 to infinite) +seta r_picmip "3"//Texture Quality (0=Extra to 3=Low) - some servers require 2 or lower. +seta r_picmip_bump "3"//Bump Maps Quality, for relief textures (0=Extra to 3=Low) +seta r_picmip_spec "3"//Specular Map Quality, for lights (0=Extra to 3=Low) +seta r_picmip_water "0"//Water Quality (0=None 1=Normal) +seta r_picmip_manual "1"//Set to Manual the texture selection (0=Automatic 1=Manual) +seta r_rendererinuse "0"//0=Shader 2.0 // 1=Shader 3.0 // 2=Default +seta r_resamplescene "1"//Sharpen filter and color correction applied(0=none 1=enabled) +seta r_sun_from "0"//Set sun flares from dvars (0=none 1=activated, this may be a cheat) +seta r_textfilteranisomax "16"//Max Anisotropic max filtering(1=none 16=full anisotropic) +seta r_textfilteranisomin "1"//Min Anisotropic filtering (1=none 16=full anisotropic) +seta r_textfiltermipmode "3"//0=normal 1=Trilinear 2=Bilinear 3=Disable Mipmap +seta r_uselayeredmaterials "0"//0=none 1=Enable on Shader 3.0 videocard +seta r_vsync "0"// Enable Vsync (0=none 1=activated) + +Cheat Protected: +-------------------------------------- +seta r_fullbright "0"//Toggles rendering with or without lighting (0 or 1) +seta r_glow "0"//Enable Glow (0=none 1=activated) +seta r_lowestloddist "-1"//Distance for change to Lowest LOD (-1=close to "infinite"=far) +seta r_lowloddist "-1"//Distance for change to Low LOD (-1=close to "infinite"=far) +seta r_highloddist "-1"//Distance for change to High LOD (-1=close to "infinite"=far) +seta r_mediumloddist "-1"//Distance for change to Medium LOD (-1=close to "infinite"=far) + +Client Side Variables: +-------------------------------------- +seta ai_corpseCount "5" +seta cg_blood "1" +seta cg_brass "1" +seta cg_centerPrintY "-60" +seta cg_chatHeight "8" +seta cg_chatTime "12000" +seta cg_connectionIconSize "0" +seta cg_crosshairAlpha "1" +seta cg_crosshairAlphaMin "0.5" +seta cg_crosshairDynamic "0" +seta cg_crosshairEnemyColor "1" +seta cg_cursorHints "4" +seta cg_debugInfoCornerOffset "0 0" +seta cg_descriptiveText "1" +seta cg_drawBreathHint "1" +seta cg_drawCrosshair "1" +seta cg_drawCrosshairNames "1" +seta cg_drawFPS "Off" +seta cg_drawFPSLabels "1" +seta cg_drawFriendlyNames "1" +seta cg_drawLagometer "0" +seta cg_drawMantleHint "1" +seta cg_drawSnapshot "0" +seta cg_drawTurretCrosshair "1" +seta cg_enemyNameFadeIn "250" +seta cg_enemyNameFadeOut "250" +seta cg_fov "65" +seta cg_friendlyNameFadeIn "0" +seta cg_friendlyNameFadeOut "1500" +seta cg_gameBoldMessageWidth "390" +seta cg_gameMessageWidth "455" +seta cg_headIconMinScreenRadius "0.015" +seta cg_hintFadeTime "100" +seta cg_hudChatIntermissionPosition "5 110" +seta cg_hudChatPosition "5 204" +seta cg_hudDamageIconHeight "64" +seta cg_hudDamageIconInScope "0" +seta cg_hudDamageIconOffset "128" +seta cg_hudDamageIconTime "2000" +seta cg_hudDamageIconWidth "128" +seta cg_hudGrenadeIconEnabledFlash "0" +seta cg_hudGrenadeIconHeight "25" +seta cg_hudGrenadeIconInScope "0" +seta cg_hudGrenadeIconMaxHeight "104" +seta cg_hudGrenadeIconMaxRangeFlash "500" +seta cg_hudGrenadeIconMaxRangeFrag "250" +seta cg_hudGrenadeIconOffset "50" +seta cg_hudGrenadeIconWidth "25" +seta cg_hudGrenadePointerHeight "12" +seta cg_hudGrenadePointerPivot "12 27" +seta cg_hudGrenadePointerWidth "25" +seta cg_hudMapBorderWidth "2" +seta cg_hudMapFriendlyHeight "15" +seta cg_hudMapFriendlyWidth "15" +seta cg_hudMapPlayerHeight "20" +seta cg_hudMapPlayerWidth "20" +seta cg_hudMapRadarLineThickness "0.15" +seta cg_hudProneY "-160" +seta cg_hudSayPosition "5 180" +seta cg_hudStanceHintPrints "0" +seta cg_hudVotePosition "5 220" +seta cg_invalidCmdHintBlinkInterval "600" +seta cg_invalidCmdHintDuration "1800" +seta cg_laserLight "0" +seta cg_mapLocationSelectionCursorSpeed "0.6" +seta cg_marks "1" +seta cg_marks_ents_player_only "0" +seta cg_overheadIconSize "0.7" +seta cg_overheadNamesGlow "0 0 0 1" +seta cg_overheadNamesMaxDist "10000" +seta cg_overheadNamesSize "0.5" +seta cg_overheadRankSize "0.5" +seta cg_predictItems "1" +seta cg_scoreboardBannerHeight "35" +seta cg_scoreboardHeaderFontScale "0.35" +seta cg_scoreboardHeight "435" +seta cg_scoreboardItemHeight "18" +seta cg_scoreboardPingHeight "0.7" +seta cg_scoreboardPingWidth "0.036" +seta cg_scoreboardRankFontScale "0.25" +seta cg_scoreboardScrollStep "3" +seta cg_scoreboardWidth "500" +seta cg_ScoresPing_BgColor "0.25098 0.25098 0.25098 0.501961" +seta cg_ScoresPing_HighColor "0.8 0 0 1" +seta cg_ScoresPing_Interval "100" +seta cg_ScoresPing_LowColor "0 0.74902 0 1" +seta cg_ScoresPing_MaxBars "4" +seta cg_ScoresPing_MedColor "0.8 0.8 0 1" +seta cg_scriptIconSize "0" +seta cg_sprintMeterDisabledColor "0.8 0.1 0.1 0.2" +seta cg_sprintMeterEmptyColor "0.7 0.5 0.2 0.8" +seta cg_sprintMeterFullColor "0.8 0.8 0.8 0.8" +seta cg_subtitleMinTime "3" +seta cg_subtitles "1" +seta cg_subtitleWidthStandard "520" +seta cg_subtitleWidthWidescreen "520" +seta cg_teamChatsOnly "0" +seta cg_viewZSmoothingMax "16" +seta cg_viewZSmoothingMin "1" +seta cg_viewZSmoothingTime "0.1" +seta cg_voiceIconSize "0" +seta cg_weaponCycleDelay "0" +seta cg_weaponHintsCoD1Style "1" +seta cg_youInKillCamSize "6" +seta cl_allowDownload "1" +seta cl_anonymous "0" +seta cl_connectionAttempts "10" +seta cl_freelook "1" +seta cl_maxpackets "30" +seta cl_maxPing "800" +seta cl_mouseAccel "0" +seta cl_packetdup "1" +seta cl_pitchspeed "140" +seta cl_punkbuster "1" +seta cl_voice "1" +seta cl_wwwDownload "1" +seta cl_yawspeed "140" +seta com_introPlayed "1" +seta com_maxfps "85" +seta com_recommendedSet "1" +seta compassClampIcons "1" +seta compassCoords "740 3590 400" +seta compassDebug "0" +seta compassECoordCutoff "37" +seta compassFriendlyHeight "18.75" +seta compassFriendlyWidth "18.75" +seta compassMaxRange "2500" +seta compassMinRadius "0.0001" +seta compassMinRange "0.0001" +seta compassObjectiveArrowHeight "20" +seta compassObjectiveArrowOffset "2" +seta compassObjectiveArrowRotateDist "5" +seta compassObjectiveArrowWidth "20" +seta compassObjectiveDrawLines "1" +seta compassObjectiveHeight "20" +seta compassObjectiveIconHeight "16" +seta compassObjectiveIconWidth "16" +seta compassObjectiveMaxHeight "70" +seta compassObjectiveMaxRange "2048" +seta compassObjectiveMinAlpha "1" +seta compassObjectiveMinHeight "-70" +seta compassObjectiveNumRings "10" +seta compassObjectiveRingSize "80" +seta compassObjectiveRingTime "10000" +seta compassObjectiveTextHeight "18" +seta compassObjectiveTextScale "0.3" +seta compassObjectiveWidth "20" +seta compassPlayerHeight "18.75" +seta compassPlayerWidth "18.75" +seta compassRadarLineThickness "0.4" +seta compassRadarPingFadeTime "4" +seta compassRadarUpdateTime "4" +seta compassRotation "1" +seta compassSize "1" +seta compassSoundPingFadeTime "2" +seta compassTickertapeStretch "0.5" +seta con_errormessagetime "8" +seta con_gameMsgWindow0FadeInTime "0.25" +seta con_gameMsgWindow0FadeOutTime "0.5" +seta con_gameMsgWindow0Filter "gamenotify obituary" +seta con_gameMsgWindow0LineCount "4" +seta con_gameMsgWindow0MsgTime "5" +seta con_gameMsgWindow0ScrollTime "0.25" +seta con_gameMsgWindow0SplitscreenScale "1.5" +seta con_gameMsgWindow1FadeInTime "0.25" +seta con_gameMsgWindow1FadeOutTime "0.01" +seta con_gameMsgWindow1Filter "boldgame" +seta con_gameMsgWindow1LineCount "5" +seta con_gameMsgWindow1MsgTime "8" +seta con_gameMsgWindow1ScrollTime "0.25" +seta con_gameMsgWindow1SplitscreenScale "1.5" +seta con_gameMsgWindow2FadeInTime "0.75" +seta con_gameMsgWindow2FadeOutTime "0.5" +seta con_gameMsgWindow2Filter "subtitle" +seta con_gameMsgWindow2LineCount "7" +seta con_gameMsgWindow2MsgTime "5" +seta con_gameMsgWindow2ScrollTime "0.25" +seta con_gameMsgWindow2SplitscreenScale "1.5" +seta con_gameMsgWindow3FadeInTime "0.25" +seta con_gameMsgWindow3FadeOutTime "0.5" +seta con_gameMsgWindow3Filter "" +seta con_gameMsgWindow3LineCount "5" +seta con_gameMsgWindow3MsgTime "5" +seta con_gameMsgWindow3ScrollTime "0.25" +seta con_gameMsgWindow3SplitscreenScale "1.5" +seta con_inputBoxColor "0.25 0.25 0.2 1" +seta con_inputHintBoxColor "0.4 0.4 0.35 1" +seta con_matchPrefixOnly "1" +seta con_minicon "0" +seta con_miniconlines "5" +seta con_minicontime "4" +seta con_outputBarColor "1 1 0.95 0.6" +seta con_outputSliderColor "0.15 0.15 0.1 0.6" +seta con_outputWindowColor "0.35 0.35 0.3 0.75" +seta con_typewriterColorGlowCheckpoint "0.6 0.5 0.6 1" +seta con_typewriterColorGlowCompleted "0 0.3 0.8 1" +seta con_typewriterColorGlowFailed "0.8 0 0 1" +seta con_typewriterColorGlowUpdated "0 0.6 0.18 1" +seta con_typewriterDecayDuration "700" +seta con_typewriterDecayStartTime "6000" +seta con_typewriterPrintSpeed "50" +seta customclass1 "Custom Slot 1" +seta customclass2 "Custom Slot 2" +seta customclass3 "Custom Slot 3" +seta customclass4 "Custom Slot 4" +seta customclass5 "Custom Slot 5" +seta drew_notes "4" +seta dynEnt_active "1" +seta fx_marks "1" +seta fx_marks_ents "1" +seta fx_marks_smodels "1" +seta fx_sort "1" +seta g_allowvote "1" +seta g_antilag "1" +seta g_banIPs "" +seta g_clonePlayerMaxVelocity "80" +seta g_deadChat "0" +seta g_dropForwardSpeed "10" +seta g_dropHorzSpeedRand "100" +seta g_dropUpSpeedBase "10" +seta g_dropUpSpeedRand "5" +seta g_log "games_mp.log" +seta g_logSync "0" +seta g_oldVoting "1" +seta g_playerCollisionEjectSpeed "25" +seta g_redCrosshairs "1" +seta g_useGear "0" +seta g_useholdspawndelay "500" +seta g_voiceChatTalkingDuration "500" +seta g_voteAbstainWeight "0.5" +seta hud_deathQuoteFadeTime "1000" +seta hud_enable "1" +seta hud_fade_ammodisplay "0" +seta hud_fade_compass "0" +seta hud_fade_healthbar "2" +seta hud_fade_offhand "0" +seta hud_fade_sprint "1.7" +seta hud_fade_stance "1.7" +seta hud_fadeout_speed "0.1" +seta hud_flash_period_offhand "0.5" +seta hud_flash_time_offhand "2" +seta hud_health_pulserate_critical "0.5" +seta hud_health_pulserate_injured "1" +seta hud_health_startpulse_critical "0.33" +seta hud_health_startpulse_injured "1" +seta in_mouse "1" +seta loc_forceEnglish "0" +seta loc_language "0" +seta m_filter "0" +seta m_forward "0.25" +seta m_pitch "0.022" +seta m_side "0.25" +seta m_yaw "0.022" +seta monkeytoy "0" +seta mss_khz "44" +seta name "Jock Yitch" +seta net_noipx "0" +seta net_noudp "0" +seta net_socksEnabled "0" +seta net_socksPassword "" +seta net_socksPort "1080" +seta net_socksServer "" +seta net_socksUsername "" +seta r_aaAlpha "dither (fast)" +seta r_aaSamples "4" +seta r_altModelLightingUpdate "1" +seta r_aspectRatio "auto" +seta r_autopriority "0" +seta r_customMode "" +seta r_debugLineWidth "1" +seta r_depthPrepass "0" +seta r_depthPrepassModels "0" +seta r_displayRefresh "100 Hz" +seta r_distortion "1" +seta r_dlightLimit "4" +seta r_dof_enable "0" +seta r_drawDecals "1" +seta r_drawSun "1" +seta r_drawWater "1" +seta r_fastSkin "1" +seta r_fullscreen "1" +seta r_gamma "1.41" +seta r_glow "1" +seta r_glow_allowed "1" +seta r_ignorehwgamma "0" +seta r_inGameVideo "1" +seta r_lodBias "0" +seta r_lodBiasRigid "0" +seta r_lodBiasSkinned "0" +seta r_lodScale "1" +seta r_lodScaleRigid "1" +seta r_lodScaleSkinned "1" +seta r_mode "800x600" +seta r_monitor "0" +seta r_multiGpu "0" +seta r_normal "1" +seta r_picmip "0" +seta r_picmip_bump "0" +seta r_picmip_manual "0" +seta r_picmip_spec "0" +seta r_picmip_water "0" +seta r_polygonOffsetBias "-1" +seta r_polygonOffsetScale "-1" +seta r_portalBevels "0.7" +seta r_preloadShaders "0" +seta r_rendererPreference "Default" +seta r_specular "1" +seta r_texFilterAnisoMax "4" +seta r_texFilterAnisoMin "1" +seta r_texFilterMipMode "Unchanged" +seta r_vsync "0" +seta r_zFeather "0" +seta ragdoll_enable "0" +seta ragdoll_max_simulating "0" +seta rate "25000" +seta sc_enable "0" +seta sensitivity "5" +seta server1 "" +seta server10 "" +seta server11 "" +seta server12 "" +seta server13 "" +seta server14 "" +seta server15 "" +seta server16 "" +seta server2 "" +seta server3 "" +seta server4 "" +seta server5 "" +seta server6 "" +seta server7 "" +seta server8 "" +seta server9 "" +seta sm_enable "1" +seta sm_maxLights "4" +seta snaps "20" +seta snd_bits "16" +seta snd_cinematicVolumeScale "0.85" +seta snd_debugReplace "0" +seta snd_drawEqChannels "0" +seta snd_drawEqEnts "0" +seta snd_enableEq "0" +seta snd_errorOnMissing "0" +seta snd_khz "44" +seta snd_levelFadeTime "250" +seta snd_outputConfiguration "Windows default" +seta snd_slaveFadeTime "500" +seta snd_touchStreamFilesOnLoad "0" +seta snd_volume "0.8" +seta sv_allowDownload "1" +seta sv_floodProtect "1" +seta sv_hostname "BASHandSlash" +seta sv_maxclients "24" +seta sv_maxPing "0" +seta sv_maxRate "5000" +seta sv_minPing "0" +seta sv_punkbuster "1" +seta sv_reconnectlimit "3" +seta sv_voice "1" +seta sv_wwwBaseURL "" +seta sv_wwwDlDisconnected "0" +seta sv_wwwDownload "0" +seta sys_configSum "4379996" +seta sys_configureGHz "2.92348" +seta sys_cpuGHz "3.0107" +seta sys_gpu "NVIDIA GeForce 7900 GTX" +seta sys_sysMB "1024" +seta thereisacow "1337" +seta ui_bigFont "0.4" +seta ui_browserFriendlyfire "-1" +seta ui_browserKillcam "-1" +seta ui_browserMod "0" +seta ui_browserShowDedicated "0" +seta ui_browserShowEmpty "1" +seta ui_browserShowFull "0" +seta ui_browserShowNoPassword "1" +seta ui_browserShowPassword "-1" +seta ui_browserShowPunkBuster "-1" +seta ui_browserShowPure "1" +seta ui_currentMap "5" +seta ui_currentNetMap "5" +seta ui_dedicated "0" +seta ui_drawCrosshair "1" +seta ui_extraBigFont "0.55" +seta ui_gametype "0" +seta ui_joinGametype "3" +seta ui_maxclients "32" +seta ui_netGametype "2" +seta ui_netGametypeName "sd" +seta ui_netSource "1" +seta ui_serverStatusTimeOut "7000" +seta ui_smallFont "0.25" +seta vehDriverViewHeightMax "50" +seta vehDriverViewHeightMin "-15" +seta vid_xpos "3" +seta vid_ypos "22" +seta voice_deadChat "0" +seta voice_global "0" +seta voice_localEcho "0" +seta winvoice_mic_mute "1" +seta winvoice_mic_reclevel "65535" +seta winvoice_mic_scaler "1" +seta winvoice_save_voice "0" +Complete Console and Config_mp Command Listing + +-back +-moveright +-breath_sprint ++breath_sprint +scriptUsage +-gostand +-leanright +-frag +-moveleft +-reload +-actionslot +dvarlist_saved +-scores +dvarlist +-melee +-activate +-forward ++forward ++moveright +-attack ++attack +updatehunkusage +snd_list +snd_refreshSpeakerMaps +printentities +echo +stats +jumptonode +setviewpos +levelshot +ufo +noclip +notarget +demigod +god +take +give +kill +cg_ufo +cg_noclip +cg_shellshock_save +cg_shellshock_load +cg_shellshock ++actionslot +fade +weapprev +weapnext ++scores +viewpos +phys_go +phys_stop +closemenu +openmenu +r_smc_flush +r_smc_stats +r_savesun +r_loadsun +reloadmaterialtextures +r_applyPicmip +imagelist +screenshotJpeg +screenshot +map +difficultyEasy +set +cinematic +snd_deactivateEq +snd_setEqType +snd_setEqQ +snd_setEqGain +snd_setEqFreq +snd_setEq +snd_playLocal +snd_deactivateEnvironmentEffects +snd_setEnvironmentEffects +localizeSoundAliasFiles +cubemapShot ++decAnimWeight ++incAnimWeight +shellExecute +startSingleplayer +startMultiplayer +sl +pause +unskippablecinematic +logo +stoprecord +record +timedemo +demo +disconnect +snd_restart +vid_restart +cmd +-nightvision ++nightvision +-sprint ++sprint ++gostand +gocrouch +goprone +toggleprone +togglecrouch +raisestance +lowerstance +-toggleads_throw ++toggleads_throw +-speed_throw ++speed_throw +-throw ++throw +leaveads +toggleads +-mlook ++mlook +-stance ++stance +-prone ++prone ++leanright +-leanleft ++leanleft +-usereload ++usereload ++reload ++activate +-smoke ++smoke ++frag +-melee_breath ++melee_breath +-holdbreath ++holdbreath ++melee +-speed ++speed ++moveleft +-strafe ++strafe +-lookdown ++lookdown +-lookup ++lookup ++back +-right ++right +-left ++left +-movedown ++movedown +-moveup ++moveup +centerview +clear +ragdoll_baselerp_bone +ragdoll_limit +ragdoll_joint +ragdoll_selfpair +ragdoll_bone +ragdoll_clear +exec +ragdoll_pin_bone +savegame_lastcommit +devsave +stringUsage +difficultyFu +difficultyHard +difficultyMedium +loadgame_continue +nextlevel +loadgame +spdevmap +devmap +spmap +map_restart +fast_restart +in_restart +writedefaults +writeconfig +quit +meminfo +con_showchannel +con_hidechannel +seta +bind +unbindall +con_visiblechannellist +con_channellist +touchFile +fdir +dir +fullpath +path +bindlist +unbind +wait +vstr +dvar_float +dvar_int +dvar_bool +dvardump +reset +setdvartotime +setfromlocString +setfromdvar +sets +togglep +toggle +209 commands + +Variables that affect graphics quality: + +VERY LOW QUALITY +-------------------------------------- +seta r_lodbiasrigid "0"//Level of detail of static objects (-1000=better to 0=lowest) +seta r_lodbiasskinned "0"//Level of detail of skinned objects (-1000=better to 0=lowest) +seta r_lodscalerigid "4"//Level of detail of static objects (1=best to 4=worst) +seta r_lodscaleskinned "4"//Level of detail of skinned objects (1=best to 4=worst) + +MAXIMUM QUALITY +-------------------------------------- +seta r_lodbiasrigid "-1000"//Level of detail of static objects (-1000=better to 0=lowest) +seta r_lodbiasskinned "-1000"//Level of detail of skinned objects (-1000=better to 0=lowest) +seta r_lodscalerigid "1"//Level of detail of static objects (1=best to 4=worst) +seta r_lodscaleskinned "1"//Level of detail of skinned objects (1=best to 4=worst) + +Boosting Framerate +-------------------------------------- +a) Changes to the basic client settings can produce FPS boosts. Some of these are shown below: +Console Settings: +seta ai_corpseCount 0 +seta cg_blood "0" +seta cg_brass "0" +seta fx_marks "0" +seta r_aaAlpha 0 +seta r_aaSamples 1 +seta r_drawwater 0 +seta r_fastskin 1 +seta r_lodscalerigid "1" VS seta r_lodscalerigid "4" ~10% +seta r_lodbiasrigid "-1000" VS seta r_lodbiasrigid "0" ~30% +seta r_rendererpreference "shader model 2.0" +seta r_texFilterMipMode "Force Bilinear" +seta r_zfeather 0 +Ingame settings: + +Model Detail "NORMAL" VS Model Detail "LOW" ~15% +Shadows Enabled VS Shadows Disabled ~20% +Dinamic Lights "Normal" VS Dinamic Lights "OFF" ~5% +Smoke Smoothing "ON" VS Smoke Smoothing "OFF" ~10% + + +b) High frame rate boosts will occur if you remove fog and remove effects. This can be done by putting put clientr_fog 0 and clientfx_draw 0 in the server config. Of course this will remove these items for everyone on the server. Some effects removed by fx_draw are muzzle flashes, flashbangs and nade explosions. This can result in a 30 fps boost. +Type the following in the modernwarfare.gsc, server side: +if ( getdvar("clientr_fog") == "0" ) +{ +self setClientDvar( "r_fog", "0" ); +} + +if ( getdvar("clientfx_draw") == "0" ) +{ +self setClientDvar( "fx_draw", "0" ); +} +c) Similar to b), you could set: + +fx_drawClouds (which removes the clouds of dust after an explosion) can be set to 0. + + +Dvars: + +Legend +-------------------------------------- +ai_ - The Computer AIartificial intelligence = ComputerKI +aim_ - Target and Hit Settings +cl_ - Client Settings (your PC) +com_ - Computer +compass - Compass +con_ - Ingame console +dynEnt - dynamic entities and graphics settings +fs_ - File System +fx_ - Graphics Settings +g_ - game settings +hud_ - HUD +in_ - Input devices +loc_ - Language settings +m_ - Mouse settings +mis_ - miscellanous +phys_ - physics +player_ - player settings +r_ - render settings +snd_ - Sound +sv_ - Server Settings +sys_ - System Settings +ui_ - User Interface +veh - vehicles + +aa_ads_damage_dealt "0" +aa_deaths "0" +aa_enemy_damage_taken "552" +aa_enemy_deaths "2" +aa_player_damage_dealt "0" +aa_player_damage_taken "0" +aa_player_kills "0" +aa_time_tracking "33.6" +aa_zoneaa_main_bog_a "on" +actionSlotsHide "0" +C ai_accuracyDistScale "1" +A ai_badPathSpam "0" +A ai_corpseCount "10" +C ai_count "32" +C ai_coverScore_coverType "2" +C ai_coverScore_distance "16" +C ai_coverScore_engagement "4" +C ai_coverScore_nodeAngle "4" +C ai_coverScore_playerLos "8" +C ai_coverScore_priority "8" +C ai_coverScore_targetDir "4" +C ai_coverScore_visibility "8" +A C ai_debugAccuracy "0" +C ai_debugAnimDeltas "0" +C ai_debugClaimedNodes "0" +C ai_debugCoverEntityNum "-1" +A C ai_debugCoverSelection "0" +ai_debugEntIndex "-1" +C ai_debugFindPath "0" +C ai_debugFindPathDirect "0" +C ai_debugFindPathLock "0" +C ai_debugFindPathWidth "0" +C ai_debugGrenadeFailSafe "0" +C ai_debugGrenadeHintArc "150" +C ai_debugMayMove "0" +A C ai_debugMeleeAttackSpots "0" +C ai_debugPlayerLOS "0" +A C ai_debugThreatSelection "0" +C ai_disableSpawn "0" +C ai_eventDistBadPlace "256" +C ai_eventDistBullet "96" +C ai_eventDistDeath "1024" +C ai_eventDistExplosion "1024" +C ai_eventDistFootstep "512" +C ai_eventDistFootstepLite "256" +C ai_eventDistGrenadePing "512" +C ai_eventDistGunShot "2048" +C ai_eventDistNewEnemy "1024" +C ai_eventDistPain "512" +C ai_eventDistProjImpact "256" +C ai_eventDistProjPing "128" +C ai_eventDistSilencedShot "128" +C ai_foliageSeeThroughDist "128" +C ai_friendlyFireBlockDuration "2000" +C ai_friendlySuppression "1" +C ai_friendlySuppressionDist "128" +C ai_moveOrientMode "invalid" +C ai_noDodge "0" +C ai_pathMomentum "0.78" +C ai_pathNegotiationOverlapCost "300" +C ai_playerADS_LOSRange "150" +C ai_playerADSTargetTime "10000" +ai_playerFarAccuracy "0.1" +ai_playerFarRange "2000" +C ai_playerLOSHalfWidth "15" +C ai_playerLOSMinTime "1500" +C ai_playerLOSRange "150" +ai_playerNearAccuracy "0.5" +ai_playerNearRange "800" +C ai_showBadPlaces "0" +A ai_ShowCanshootChecks "0" +A C ai_showClaimedNode "0" +C ai_showDodge "0" +C ai_showFriendlyChains "0" +C ai_showNearestNode "0" +C ai_showNodes "0" +C ai_showNodesDist "384" +C ai_showPaths "0" +C ai_showPotentialThreatDir "0" +A C ai_showRegion "0" +C ai_showSuppression "-1" +C ai_showVisData "0" +C ai_showVisDataDist "1000" +C ai_showVolume "-1" +C ai_threatUpdateInterval "500" +C aim_accel_turnrate_debug "0" +C aim_accel_turnrate_enabled "1" +C aim_accel_turnrate_lerp "1200" +C aim_autoaim_debug "0" +C aim_autoaim_enabled "1" +C aim_autoaim_lerp "40" +C aim_autoaim_region_height "120" +C aim_autoaim_region_width "160" +C aim_automelee_debug "0" +C aim_automelee_enabled "1" +C aim_automelee_lerp "40" +C aim_automelee_range "128" +C aim_automelee_region_height "240" +C aim_automelee_region_width "320" +C aim_input_graph_debug "0" +C aim_input_graph_enabled "1" +C aim_input_graph_index "3" +C aim_lockon_debug "0" +C aim_lockon_deflection "0.05" +C aim_lockon_enabled "1" +C aim_lockon_region_height "90" +C aim_lockon_region_width "90" +C aim_lockon_strength "0.6" +C aim_scale_view_axis "1" +C aim_slowdown_debug "0" +C aim_slowdown_enabled "1" +C aim_slowdown_pitch_scale "0.4" +C aim_slowdown_pitch_scale_ads "0.5" +C aim_slowdown_region_height "90" +C aim_slowdown_region_width "90" +C aim_slowdown_yaw_scale "0.4" +C aim_slowdown_yaw_scale_ads "0.5" +C aim_target_sentient_radius "10" +C aim_turnrate_pitch "90" +C aim_turnrate_pitch_ads "55" +C aim_turnrate_yaw "260" +C aim_turnrate_yaw_ads "90" +A airlift_min_spec "0" +ammoCounterHide "0" +angles "0" +A animated_trees_enabled "1" +arcademode "0" +arcademode_full "0" +autodifficulty_frac "25" +autodifficulty_original_setting "0" +autodifficulty_playerDeathTimer "0" +bcs_enable "on" +bcs_filterInform "off" +bcs_filterOrder "off" +bcs_filterReaction "off" +bcs_filterResponse "off" +bcs_filterThreat "off" +bcs_threatLimitInLocation "on" +bcs_threatLimitInPlayerFOV "on" +bcs_threatLimitSpeakerDist "512" +bcs_threatLimitTargetingPlayer "off" +bcs_threatLimitTargettedBySelf "off" +bcs_threatLimitThreatDist "2048" +bcs_threatPlayerRelative "off" +C bg_aimSpreadMoveSpeedThreshold "11" +C bg_bobAmplitudeDucked "0.0075 0.0075" +C bg_bobAmplitudeProne "0.02 0.005" +C bg_bobAmplitudeSprinting "0.02 0.014" +C bg_bobAmplitudeStanding "0.007 0.007" +C bg_bobMax "8" +C bg_fallDamageMaxHeight "350" +C bg_fallDamageMinHeight "200" +C bg_foliagesnd_fastinterval "500" +C bg_foliagesnd_maxspeed "180" +C bg_foliagesnd_minspeed "40" +C bg_foliagesnd_resetinterval "500" +C bg_foliagesnd_slowinterval "1500" +C bg_ladder_yawcap "100" +C bg_legYawTolerance "20" +C bg_maxGrenadeIndicatorSpeed "20" +C bg_prone_yawcap "85" +C bg_shock_lookControl "0" +C bg_shock_lookControl_fadeTime "0.001" +C bg_shock_lookControl_maxpitchspeed "0" +C bg_shock_lookControl_maxyawspeed "0" +C bg_shock_lookControl_mousesensitivityscale "0" +C bg_shock_movement "1" +C bg_shock_screenBlurBlendFadeTime "0.001" +C bg_shock_screenBlurBlendTime "0.001" +C bg_shock_screenFlashShotFadeTime "0" +C bg_shock_screenFlashWhiteFadeTime "0" +C bg_shock_screenType "blurred" +C bg_shock_sound "0" +C bg_shock_soundDryLevel "1" +C bg_shock_soundEnd "shellshock_end" +C bg_shock_soundEndAbort "shellshock_end_abort" +C bg_shock_soundFadeInTime "0.25" +C bg_shock_soundFadeOutTime "2.5" +C bg_shock_soundLoop "shellshock_loop" +C bg_shock_soundLoopEndDelay "-1.5" +C bg_shock_soundLoopFadeTime "2" +C bg_shock_soundLoopSilent "shellshock_loop_silent" +C bg_shock_soundModEndDelay "-0.75" +C bg_shock_soundRoomType "generic" +C bg_shock_soundWetLevel "0.5" +C bg_shock_viewKickFadeTime "0.001" +C bg_shock_viewKickPeriod "0.75" +C bg_shock_viewKickRadius "0" +C bg_shock_volume_ambient "0.2" +C bg_shock_volume_announcer "0.9" +C bg_shock_volume_auto "0.5" +C bg_shock_volume_auto2 "0.5" +C bg_shock_volume_auto2d "0.5" +C bg_shock_volume_autodog "0.9" +C bg_shock_volume_body "0.2" +C bg_shock_volume_body2d "0.2" +C bg_shock_volume_bulletimpact "0.5" +C bg_shock_volume_bulletwhizby "0.5" +C bg_shock_volume_effects1 "0.5" +C bg_shock_volume_effects2 "0.5" +C bg_shock_volume_element "0.5" +C bg_shock_volume_hurt "0.4" +C bg_shock_volume_item "0.2" +C bg_shock_volume_local "0.2" +C bg_shock_volume_local2 "0.2" +C bg_shock_volume_menu "1" +C bg_shock_volume_mission "0.9" +C bg_shock_volume_music "0.5" +C bg_shock_volume_musicnopause "0.5" +C bg_shock_volume_nonshock "0.5" +C bg_shock_volume_physics "0.5" +C bg_shock_volume_player1 "0.4" +C bg_shock_volume_player2 "0.4" +C bg_shock_volume_reload "0.2" +C bg_shock_volume_reload2d "0.2" +C bg_shock_volume_shellshock "1" +C bg_shock_volume_vehicle "0.1" +C bg_shock_volume_vehiclelimited "0.1" +C bg_shock_volume_voice "0.2" +C bg_shock_volume_weapon "0.5" +C bg_shock_volume_weapon2d "0.5" +C bg_swingSpeed "0.2" +C bg_viewKickMax "90" +C bg_viewKickMin "5" +C bg_viewKickRandom "0.4" +C bg_viewKickScale "0.8" +A bog_b_min_spec "0" +C bullet_penetrationEnabled "1" +C bullet_penetrationMinFxDist "30" +A cg_blood "1" +A cg_bloodLimit "0" +A cg_bloodLimitMsec "330" +cg_bobWeaponAmplitude "0.16" +cg_bobWeaponLag "0.25" +cg_bobWeaponMax "10" +cg_bobWeaponRollAmplitude "1.5" +A cg_brass "1" +C cg_centertime "3" +cg_cinematicFullscreen "1" +A C cg_crosshairAlpha "1" +A C cg_crosshairAlphaMin "0.5" +A C cg_crosshairDynamic "0" +A C cg_crosshairEnemyColor "1" +A cg_cursorHints "3" +C cg_debug_overlay_viewport "0" +C cg_debugevents "0" +A cg_debugInfoCornerOffset "0 0" +cg_draw2D "1" +A cg_drawBreathHint "1" +A cg_drawCrosshair "1" +A cg_drawFPS "Off" +A cg_drawFPSLabels "1" +A C cg_drawFriendlyFireCrosshair "0" +C cg_drawGun "1" +C cg_drawHealth "0" +cg_drawHUD "1" +A cg_drawMantleHint "1" +C cg_drawMaterial "Off" +cg_drawpaused "1" +C cg_drawPerformanceWarnings "1" +C cg_drawPlayerPosInFreeMove "1" +cg_drawScriptUsage "0" +C cg_drawShellshock "1" +A cg_drawTurretCrosshair "1" +C cg_dumpAnims "-1" +cg_errordecay "100" +C cg_footsteps "1" +cg_fov "65" +A cg_gameBoldMessageWidth "390" +A cg_gameMessageWidth "500" +C cg_gun_move_f "0" +C cg_gun_move_minspeed "0" +C cg_gun_move_r "0" +C cg_gun_move_rate "0" +C cg_gun_move_u "0" +C cg_gun_ofs_f "0" +C cg_gun_ofs_r "0" +C cg_gun_ofs_u "0" +C cg_gun_rot_minspeed "0" +C cg_gun_rot_p "0" +C cg_gun_rot_r "0" +C cg_gun_rot_rate "0" +C cg_gun_rot_y "0" +C cg_gun_x "0" +C cg_gun_y "0" +C cg_gun_z "0" +A cg_hintFadeTime "100" +A cg_hudDamageIconHeight "64" +A cg_hudDamageIconInScope "0" +A cg_hudDamageIconOffset "128" +A cg_hudDamageIconTime "2000" +A cg_hudDamageIconWidth "128" +A cg_hudGrenadeIconEnabledFlash "0" +A cg_hudGrenadeIconHeight "25" +A cg_hudGrenadeIconInScope "1" +A cg_hudGrenadeIconMaxHeight "104" +A cg_hudGrenadeIconMaxRangeFlash "500" +A cg_hudGrenadeIconMaxRangeFrag "256" +A cg_hudGrenadeIconOffset "50" +A cg_hudGrenadeIconWidth "25" +A cg_hudGrenadePointerHeight "12" +A cg_hudGrenadePointerPivot "12 27" +cg_hudGrenadePointerPulseFreq "1.7" +cg_hudGrenadePointerPulseMax "1.85" +cg_hudGrenadePointerPulseMin "0.3" +A cg_hudGrenadePointerWidth "25" +A cg_hudMapBorderWidth "2" +A cg_hudMapFriendlyHeight "15" +A cg_hudMapFriendlyWidth "15" +A cg_hudMapPlayerHeight "20" +A cg_hudMapPlayerWidth "20" +A C cg_hudMapRadarLineThickness "0.15" +cg_hudStanceFlash "1 1 1 1" +A cg_hudStanceHintPrints "0" +A cg_invalidCmdHintBlinkInterval "600" +A cg_invalidCmdHintDuration "1800" +C cg_laserEndOffset "0.5" +C cg_laserFlarePct "0.2" +C cg_laserForceOn "0" +A cg_laserLight "1" +C cg_laserLightBeginOffset "13" +C cg_laserLightBodyTweak "15" +C cg_laserLightEndOffset "-3" +C cg_laserLightRadius "3" +C cg_laserRadius "0.8" +C cg_laserRange "1500" +C cg_laserRangePlayer "1500" +A cg_mapLocationSelectionCursorSpeed "0.6" +A cg_marks_ents_player_only "0" +A cg_nopredict "0" +cg_objectiveListWrapCountStandard "600" +cg_objectiveListWrapCountWidescreen "530" +cg_showmiss "0" +A cg_small_dev_string_fontscale "1" +A cg_sprintMeterDisabledColor "0.8 0.1 0.1 0.2" +A cg_sprintMeterEmptyColor "0.7 0.5 0.2 0.8" +A cg_sprintMeterFullColor "0.8 0.8 0.8 0.8" +A cg_subtitleMinTime "3" +A cg_subtitles "1" +A cg_subtitleWidthStandard "360" +A cg_subtitleWidthWidescreen "520" +C cg_tracerchance "0.2" +C cg_tracerlength "160" +C cg_tracerScale "1" +C cg_tracerScaleDistRange "25000" +C cg_tracerScaleMinDist "5000" +C cg_tracerScrewDist "100" +C cg_tracerScrewRadius "0.5" +C cg_tracerSpeed "7500" +C cg_tracerwidth "4" +C cg_viewVehicleInfluence "1" +A cg_viewZSmoothingMax "16" +A cg_viewZSmoothingMin "1" +A cg_viewZSmoothingTime "0.1" +A cg_weaponCycleDelay "0" +cg_weaponHintsCoD1Style "1" +C chaplinCheat "0" +A cheat_items_set1 "33554432" +A cheat_items_set2 "0" +A cheat_points "1" +cl_analog_attack_threshold "0.8" +cl_anglespeedkey "1.5" +cl_avidemo "0" +cl_forceavidemo "0" +A cl_freelook "1" +C cl_freemove "0" +C cl_freemoveScale "1" +A cl_mouseAccel "0" +cl_noprint "0" +cl_paused "0" +A cl_pitchspeed "140" +cl_showmouserate "0" +cl_shownet "0" +cl_stanceHoldTime "300" +cl_testAnimWeight "0" +A cl_yawspeed "140" +com_animCheck "0" +com_filter_output "0" +A com_introPlayed "0" +A com_maxfps "0" +com_maxFrameTime "100" +R com_playerProfile "bullet-worm" +A com_recommendedSet "1" +com_statmon "0" +R C com_timescale "1" +compass "1" +A C compassClampIcons "1" +A compassCoords "740 3590 400" +A compassECoordCutoff "37" +C compassEnemyFootstepEnabled "0" +C compassEnemyFootstepMaxRange "500" +C compassEnemyFootstepMaxZ "100" +C compassEnemyFootstepMinSpeed "140" +A compassFriendlyHeight "18.75" +A compassFriendlyWidth "18.75" +compassIconOtherVehHeight "40" +compassIconOtherVehWidth "40" +compassIconTankHeight "35" +compassIconTankWidth "35" +A C compassMaxRange "3500" +A compassMinRadius "0.0001" +A compassMinRange "0.0001" +A compassObjectiveArrowHeight "20" +A compassObjectiveArrowOffset "2" +A compassObjectiveArrowRotateDist "5" +A compassObjectiveArrowWidth "20" +compassObjectiveDetailDist "10" +A compassObjectiveDrawLines "1" +A compassObjectiveHeight "20" +A compassObjectiveIconHeight "16" +A compassObjectiveIconWidth "16" +compassObjectiveMaxHeight "70" +A compassObjectiveMaxRange "2048" +A compassObjectiveMinAlpha "1" +compassObjectiveMinDistRange "2" +compassObjectiveMinHeight "-70" +compassObjectiveNearbyDist "8" +A compassObjectiveNumRings "10" +A compassObjectiveRingSize "80" +A compassObjectiveRingTime "10000" +A compassObjectiveTextHeight "18" +A compassObjectiveTextScale "0.3" +A compassObjectiveWidth "20" +A compassPlayerHeight "25" +A compassPlayerWidth "25" +A C compassRadarLineThickness "0.4" +A C compassRadarPingFadeTime "4" +A C compassRadarUpdateTime "4" +A compassRotation "1" +A compassSize "1" +A C compassSoundPingFadeTime "2" +A compassTickertapeStretch "0.5" +con_default_console_filter "*" +A con_errormessagetime "8" +A con_gameMsgWindow0FadeInTime "0.25" +A con_gameMsgWindow0FadeOutTime "0.5" +AL con_gameMsgWindow0Filter "gamenotify obituary" +A con_gameMsgWindow0LineCount "6" +A con_gameMsgWindow0MsgTime "5" +A con_gameMsgWindow0ScrollTime "0.25" +A con_gameMsgWindow0SplitscreenScale "1.5" +A con_gameMsgWindow1FadeInTime "0.25" +A con_gameMsgWindow1FadeOutTime "0.01" +AL con_gameMsgWindow1Filter "boldgame" +A con_gameMsgWindow1LineCount "6" +A con_gameMsgWindow1MsgTime "8" +A con_gameMsgWindow1ScrollTime "0.25" +A con_gameMsgWindow1SplitscreenScale "1.5" +A con_gameMsgWindow2FadeInTime "0.75" +A con_gameMsgWindow2FadeOutTime "0.5" +AL con_gameMsgWindow2Filter "subtitle" +A con_gameMsgWindow2LineCount "7" +A con_gameMsgWindow2MsgTime "5" +A con_gameMsgWindow2ScrollTime "0.25" +A con_gameMsgWindow2SplitscreenScale "1.5" +A con_gameMsgWindow3FadeInTime "0.25" +A con_gameMsgWindow3FadeOutTime "0.5" +AL con_gameMsgWindow3Filter "" +A con_gameMsgWindow3LineCount "6" +A con_gameMsgWindow3MsgTime "5" +A con_gameMsgWindow3ScrollTime "0.25" +A con_gameMsgWindow3SplitscreenScale "1.5" +A con_inputBoxColor "0.25 0.25 0.2 1" +A con_inputHintBoxColor "0.4 0.4 0.35 1" +A con_matchPrefixOnly "1" +A con_minicon "0" +A con_miniconlines "5" +A con_minicontime "4" +A con_outputBarColor "1 1 0.95 0.6" +A con_outputSliderColor "0.15 0.15 0.1 0.6" +A con_outputWindowColor "0.35 0.35 0.3 0.75" +con_typewriterColorBase "1 1 1" +A con_typewriterColorGlowCheckpoint "0.6 0.5 0.6 1" +A con_typewriterColorGlowCompleted "0 0.3 0.8 1" +A con_typewriterColorGlowFailed "0.8 0 0 1" +A con_typewriterColorGlowUpdated "0 0.6 0.18 1" +A con_typewriterDecayDuration "700" +A con_typewriterDecayStartTime "6000" +A con_typewriterPrintSpeed "50" +credits_active "0" +credits_load "0" +debug "0" +debug_bcprint "off" +debug_bcshowqueue "off" +debug_friendlyfire "0" +developer "0" +I developer_script "0" +A disable_tank_shock_minspec "0" +A drew_notes "5" +A dynEnt_active "1" +C dynEnt_bulletForce "1000" +C dynEnt_explodeForce "12500" +C dynEnt_explodeMaxEnts "20" +C dynEnt_explodeMinForce "40" +C dynEnt_explodeSpinScale "3" +C dynEnt_explodeUpbias "0.5" +C dynEntPieces_angularVelocity "0 0 0" +C dynEntPieces_impactForce "1000" +C dynEntPieces_velocity "0 0 0" +fallback "0" +finished_demo "0" +C fixedtime "0" +C friction "5.5" +friendlyfire_dev_disabled "0" +friendlyNameFontColor "0.9 1 0.9 0.7" +friendlyNameFontGlowColor "0 0.3 0 1" +friendlyNameFontObjective "1" +friendlyNameFontSize "0.3" +I fs_basegame "" +I fs_basepath "C:\Program Files\Games\Call of Duty 4 - Modern Warfare Demo" +I fs_cdpath "" +I fs_copyfiles "0" +fs_debug "0" +S I fs_game "" +I fs_homepath "C:\Program Files\Games\Call of Duty 4 - Modern Warfare Demo" +LC fs_ignoreLocalized "0" +C fx_count "0" +fx_cull_effect_spawn "0" +fx_cull_elem_draw "1" +fx_cull_elem_spawn "1" +C fx_debugBolt "0" +C fx_draw "1" +C fx_drawClouds "1" +C fx_enable "1" +C fx_freeze "0" +C fx_mark_profile "0" +A fx_marks "1" +A fx_marks_ents "1" +A fx_marks_smodels "1" +C fx_profile "0" +C fx_visMinTraceDist "80" +C g_ai "1" +C g_aiEventDump "-1" +g_changelevel_time "4" +g_connectpaths "0" +A g_deathDelay "3000" +C g_debugBullets "0" +C g_debugDamage "0" +C g_debugLocDamage "0" +C g_drawEntBBoxes "0" +C g_drawGrenadeHints "0" +C g_dumpAnims "-1" +C g_dumpAnimsCommands "-1" +C g_earthquakeEnable "1" +C g_enteqDelay "150" +C g_enteqDist "4000" +C g_enteqEnable "1" +C g_entinfo "off" +C g_entinfo_AItext "brief" +C g_entinfo_maxdist "2048" +C g_entinfo_scale "1" +C g_entinfo_type "AI only" +R C g_fogColorReadOnly "0.545098 0.392157 0.219608 1" +R C g_fogHalfDistReadOnly "4556.45" +R C g_fogStartDistReadOnly "477.057" +C g_friendlyfireDist "175" +C g_friendlyNameDist "15000" +S R L g_gameskill "0" +g_gravity "800" +g_knockback "1000" +g_listEntity "0" +C g_minGrenadeDamageSpeed "400" +g_no_script_spam "0" +R L g_player_maxhealth "100" +C g_playerTrailTime "500" +R g_reloading "0" +LC g_spawnai "1" +g_speed "190" +A g_useGear "1" +g_useholdtime "0" +C g_vehicleDebug "0" +C g_vehicleDrawPath "" +C g_vehicleTexScrollScale "0" +R gamedate "Sep 27 2007" +S R gamename "main" +R hiDef "1" +hostileNameFontColor "1 0.9 0.9 0.7" +hostileNameFontGlowColor "0.6 0 0 1" +A hud_deathQuoteFadeTime "1000" +hud_drawHUD "1" +A hud_fade_ammodisplay "8" +A hud_fade_compass "8" +A hud_fade_healthbar "2" +A hud_fade_offhand "8" +A hud_fade_sprint "1.7" +A hud_fade_stance "1.7" +A hud_fadeout_speed "0.1" +A hud_flash_period_offhand "0.5" +A hud_flash_time_offhand "2" +hud_gasMaskOverlay "0" +A hud_health_pulserate_critical "0.5" +A hud_health_pulserate_injured "1" +A hud_health_startpulse_critical "0.33" +A hud_health_startpulse_injured "1" +hud_healthOverlay_phaseEnd_fromAlpha "0.2" +hud_healthOverlay_phaseEnd_pulseDuration "700" +hud_healthOverlay_phaseEnd_toAlpha "0" +hud_healthOverlay_phaseOne_pulseDuration "150" +hud_healthOverlay_phaseOne_toAlphaAdd "0.3" +hud_healthOverlay_phaseThree_pulseDuration "400" +hud_healthOverlay_phaseThree_toAlphaMultiplier "0.6" +hud_healthOverlay_phaseTwo_pulseDuration "320" +hud_healthOverlay_phaseTwo_toAlphaMultiplier "0.7" +hud_healthOverlay_pulseStart "0.35" +hud_healthOverlay_pulseStop "0.9" +A hud_letterBoxFadeTime "1000" +hud_missionFailed "0" +hud_showStance "1" +C hudElemPausedBrightness "0.4" +A in_gpuSync "1" +AL in_mouse "1" +C inertiaAngle "-1000" +C inertiaDebug "0" +C inertiaMax "50" +introscreen "1" +C jump_height "39" +C jump_ladderPushVel "128" +C jump_slowdownEnable "0" +C jump_spreadAdd "64" +C jump_stepSize "18" +AL loc_forceEnglish "0" +AL loc_language "0" +L loc_translate "1" +loc_warnings "1" +loc_warningsAsErrors "0" +logfile "1" +lowAmmoWarningColor1 "0.901961 0.901961 0.901961 0.8" +lowAmmoWarningColor2 "1 1 1 1" +lowAmmoWarningNoAmmoColor1 "0.8 0 0 0.8" +lowAmmoWarningNoAmmoColor2 "1 0 0 1" +lowAmmoWarningNoReloadColor1 "0.701961 0.701961 0 0.8" +lowAmmoWarningNoReloadColor2 "1 1 0 1" +lowAmmoWarningPulseFreq "1.7" +lowAmmoWarningPulseMax "1.5" +lowAmmoWarningPulseMin "0" +A m_filter "0" +A m_forward "0.25" +A m_pitch "0.022" +A m_side "0.25" +A m_yaw "0.022" +C mantle_check_angle "60" +C mantle_check_radius "0.1" +C mantle_check_range "20" +C mantle_debug "0" +C mantle_enable "1" +C mantle_view_yawcap "60" +S R mapname "bog_a" +C melee_debug "0" +mgTurret "off" +A min_spec_ai "0" +R mis_01 "0" +mis_cheat "0" +R mis_difficulty "00000000000000000000000000000000000000000000000000" +missileDebugAttractors "0" +missileDebugDraw "0" +missileDebugText "0" +C missileHellfireMaxSlope "0.5" +C missileHellfireUpAccel "1000" +C missileJavAccelClimb "300" +C missileJavAccelDescend "3000" +C missileJavClimbAngleDirect "85" +C missileJavClimbAngleTop "50" +C missileJavClimbCeilingDirect "0" +C missileJavClimbCeilingTop "3000" +C missileJavClimbHeightDirect "10000" +C missileJavClimbHeightTop "15000" +C missileJavClimbToOwner "700" +C missileJavSpeedLimitClimb "1000" +C missileJavSpeedLimitDescend "6000" +C missileJavTurnDecel "0.05" +C missileJavTurnRateDirect "60" +C missileJavTurnRateTop "100" +C missileWaterMaxDepth "60" +A monkeytoy "0" +name "bullet-worm" +nextdemo "" +nextmap "map_restart" +nightVisionDisableEffects "0" +nightVisionFadeInOutTime "0.1" +nightVisionPowerOnTime "0.3" +noai "off" +overrideNVGModelWithKnife "0" +phys_autoDisableAngular "1" +phys_autoDisableLinear "20" +phys_autoDisableTime "0.9" +phys_bulletSpinScale "3" +phys_bulletUpBias "0.5" +phys_cfm "0.0001" +phys_collUseEntities "0" +phys_contact_cfm "1e-005" +phys_contact_cfm_ragdoll "0.001" +phys_contact_erp "0.8" +phys_contact_erp_ragdoll "0.3" +phys_csl "1" +phys_dragAngular "0.5" +phys_dragLinear "0.03" +phys_drawAwake "0" +phys_drawAwakeTooLong "0" +phys_drawCollisionObj "0" +phys_drawCollisionWorld "0" +phys_drawcontacts "0" +phys_drawDebugInfo "0" +phys_dumpcontacts "0" +phys_erp "0.8" +phys_frictionScale "1" +phys_gravity "-800" +phys_gravityChangeWakeupRadius "120" +phys_interBodyCollision "0" +phys_jitterMaxMass "200" +phys_joint_cfm "0.0001" +phys_joint_stop_cfm "0.0001" +phys_joint_stop_erp "0.8" +phys_mcv "20" +phys_mcv_ragdoll "1000" +phys_minImpactMomentum "250" +phys_narrowObjMaxLength "4" +phys_noIslands "0" +phys_qsi "15" +phys_reorderConst "1" +phys_visibleTris "0" +C pickupPrints "0" +C player_adsExitDelay "0" +C player_backSpeedScale "0.7" +C player_breath_fire_delay "0" +C player_breath_gasp_lerp "6" +C player_breath_gasp_scale "4.5" +C player_breath_gasp_time "1" +C player_breath_hold_lerp "4" +C player_breath_hold_time "4.5" +C player_breath_snd_delay "1" +C player_breath_snd_lerp "2" +C player_burstFireCooldown "0.2" +player_cheated "0" +C player_damageMultiplier "0.210526" +C player_deathInvulnerableTime "4000" +C player_deathInvulnerableToMelee "0" +C player_deathInvulnerableToProjectile "1" +C player_debugHealth "0" +player_died_recently "0" +C player_dmgtimer_flinchTime "500" +C player_dmgtimer_maxTime "750" +C player_dmgtimer_minScale "0" +C player_dmgtimer_stumbleTime "500" +C player_dmgtimer_timePerPoint "100" +R C player_footstepsThreshhold "0" +player_healthEasy "500" +player_healthFu "115" +player_healthHard "165" +player_healthMedium "275" +C player_lean_rotate_crouch_left "1.25" +C player_lean_rotate_crouch_right "1" +C player_lean_rotate_left "1.25" +C player_lean_rotate_right "1.25" +C player_lean_shift_crouch_left "12.5" +C player_lean_shift_crouch_right "13" +C player_lean_shift_left "5" +C player_lean_shift_right "2.5" +C player_maxGrenadeCatchHeight "80" +C player_meleeChargeFriction "1200" +C player_meleeDamageMultiplier "0.4" +C player_meleeHeight "10" +C player_meleeRange "64" +C player_meleeWidth "10" +C player_move_factor_on_torso "0" +R C player_moveThreshhold "10" +C player_radiusDamageMultiplier "1" +C player_scopeExitOnDamage "0" +C player_spectateSpeedScale "1" +C player_sprintCameraBob "0.5" +player_sprintForwardMinimum "105" +C player_sprintMinTime "1" +C player_sprintRechargePause "0" +C player_sprintSpeedScale "1.5" +C player_sprintStrafeSpeedScale "0.667" +C player_sprintTime "4" +C player_strafeAnimCosAngle "0.5" +C player_strafeSpeedScale "0.8" +C player_sustainAmmo "0" +C player_throwbackInnerRadius "72" +C player_throwbackOuterRadius "192" +C player_turnAnims "0" +C player_view_pitch_down "85" +C player_view_pitch_up "85" +A r_aaAlpha "dither (fast)" +AL r_aaSamples "4" +AL r_altModelLightingUpdate "1" +AL r_aspectRatio "auto" +A r_autopriority "0" +C r_blur "0" +C r_brightness "0" +r_cacheModelLighting "1" +r_cacheSModelLighting "1" +r_clear "dev-only blink" +r_clearColor "0 0 0 0" +r_clearColor2 "0 0 0 0" +C r_colorMap "Unchanged" +C r_contrast "1" +AL r_customMode "" +A r_debugLineWidth "1" +C r_debugShader "none" +A r_depthPrepass "0" +C r_desaturation "1" +r_detail "1" +C r_diffuseColorScale "1" +AL r_displayRefresh "60 Hz" +A r_distortion "1" +A r_dlightLimit "4" +C r_dof_bias "0.5" +A r_dof_enable "1" +C r_dof_farBlur "1.8" +C r_dof_farEnd "7000" +C r_dof_farStart "1000" +C r_dof_nearBlur "6" +C r_dof_nearEnd "60" +C r_dof_nearStart "10" +C r_dof_tweak "0" +C r_dof_viewModelEnd "8" +C r_dof_viewModelStart "2" +A r_drawDecals "1" +A r_drawSun "1" +A r_drawWater "1" +r_envMapExponent "5" +r_envMapMaxIntensity "0.5" +r_envMapMinIntensity "0.2" +r_envMapOverride "0" +r_envMapSpecular "1" +r_envMapSunIntensity "2" +A r_fastSkin "0" +r_filmTweakBrightness "0" +r_filmTweakContrast "1.4" +r_filmTweakDarkTint "0.7 0.85 1" +r_filmTweakDesaturation "0.2" +r_filmTweakEnable "0" +r_filmTweakInvert "0" +r_filmTweakLightTint "1.1 1.05 0.85" +C r_filmUseTweaks "0" +L r_floatz "1" +C r_fog "1" +C r_forceLod "none" +C r_fullbright "0" +AL r_fullscreen "1" +A r_gamma "1" +C r_glow "1" +A r_glow_allowed "1" +r_glow_allowed_script_forced "0" +C r_glowTweakBloomCutoff "0.5" +C r_glowTweakBloomDesaturation "0" +C r_glowTweakBloomIntensity0 "1" +C r_glowTweakEnable "0" +C r_glowTweakRadius0 "5" +C r_glowUseTweaks "0" +r_gpuSync "adaptive" +C r_highLodDist "-1" +r_ignore "0" +AL r_ignorehwgamma "0" +A r_inGameVideo "1" +C r_lightMap "Unchanged" +R r_lightTweakAmbient "0.125" +R r_lightTweakAmbientColor "0.670588 0.721569 0.941177 1" +R r_lightTweakDiffuseFraction "0.4" +C r_lightTweakSunColor "0.894118 0.94902 1 1" +R r_lightTweakSunDiffuseColor "0.717647 0.776471 1 1" +C r_lightTweakSunDirection "-22 247 0" +C r_lightTweakSunLight "0.5" +L r_loadForRenderer "1" +C r_lockPvs "0" +A r_lodBiasRigid "0" +A r_lodBiasSkinned "0" +A r_lodScaleRigid "1" +A r_lodScaleSkinned "1" +r_logFile "0" +C r_lowestLodDist "-1" +C r_lowLodDist "-1" +C r_mediumLodDist "-1" +AL r_mode "1024x768" +LC r_modelVertColor "1" +AL r_monitor "0" +A r_multiGpu "0" +C r_norefresh "0" +r_normal "1" +C r_normalMap "Unchanged" +r_outdoor "1" +r_outdoorAwayBias "32" +r_outdoorDownBias "0" +r_outdoorFeather "8" +A r_picmip "0" +A r_picmip_bump "0" +A r_picmip_manual "0" +A r_picmip_spec "0" +AL r_picmip_water "0" +A r_polygonOffsetBias "-1" +A r_polygonOffsetScale "-1" +A r_portalBevels "0.7" +r_portalBevelsOnly "0" +r_portalMinClipArea "0.02" +C r_portalMinRecurseDepth "2" +C r_portalWalkLimit "0" +AL r_preloadShaders "0" +r_pretess "1" +r_reflectionProbeGenerate "0" +r_reflectionProbeGenerateExit "0" +r_reflectionProbeRegenerateAll "0" +R r_rendererInUse "Shader model 3.0" +AL r_rendererPreference "Default" +C r_resampleScene "1" +C r_scaleViewport "1" +C r_showFbColorDebug "None" +C r_showFloatZDebug "0" +C r_showLightGrid "0" +C r_showMissingLightGrid "0" +C r_showPixelCost "off" +C r_showPortals "0" +C r_singleCell "0" +r_skinCache "1" +C r_skipPvs "0" +r_smc_enable "1" +r_smp_backend "1" +r_smp_worker "1" +R r_smp_worker_thread0 "0" +R r_smp_worker_thread1 "0" +A r_specular "1" +C r_specularColorScale "2.42" +C r_specularMap "Unchanged" +C r_spotLightBrightness "14" +C r_spotLightEndRadius "196" +C r_spotLightEntityShadows "1" +C r_spotLightFovInnerFraction "0.7" +C r_spotLightShadows "1" +C r_spotLightSModelShadows "1" +C r_spotLightStartRadius "36" +r_sse_skinning "1" +C r_sun_from_dvars "0" +r_sun_fx_position "0 0 0" +r_sunblind_fadein "0.5" +r_sunblind_fadeout "3" +r_sunblind_max_angle "5" +r_sunblind_max_darken "0.75" +r_sunblind_min_angle "30" +r_sunflare_fadein "1" +r_sunflare_fadeout "1" +r_sunflare_max_alpha "1" +r_sunflare_max_angle "2" +r_sunflare_max_size "2500" +r_sunflare_min_angle "45" +r_sunflare_min_size "0" +r_sunflare_shader "sun_flare" +r_sunglare_fadein "0.5" +r_sunglare_fadeout "3" +r_sunglare_max_angle "5" +r_sunglare_max_lighten "0.75" +r_sunglare_min_angle "30" +r_sunsprite_shader "sun" +r_sunsprite_size "16" +A r_texFilterAnisoMax "4" +A r_texFilterAnisoMin "1" +C r_texFilterDisable "0" +C r_texFilterMipBias "0" +A r_texFilterMipMode "Unchanged" +L r_useLayeredMaterials "0" +L r_vc_makelog "0" +r_vc_showlog "0" +AL r_vsync "0" +r_warningRepeatDelay "5" +C r_zfar "0" +A r_zFeather "1" +C r_znear "4" +C r_znear_depthhack "0.1" +C radius_damage_debug "0" +C ragdoll_baselerp_time "1000" +C ragdoll_bullet_force "500" +C ragdoll_bullet_upbias "0.5" +C ragdoll_debug "0" +ragdoll_dump_anims "0" +A ragdoll_enable "1" +C ragdoll_explode_force "18000" +C ragdoll_explode_upbias "0.8" +C ragdoll_fps "20" +C ragdoll_jitter_scale "1" +C ragdoll_jointlerp_time "3000" +C ragdoll_max_life "4500" +A ragdoll_max_simulating "16" +C ragdoll_rotvel_scale "1" +C ragdoll_self_collision_scale "1.2" +RunForTime "0" +A s0 "0" +A s1 "0" +A s10 "0" +A s11 "0" +A s12 "0" +A s13 "0" +A s14 "0" +A s15 "0" +A s16 "0" +A s17 "0" +A s18 "0" +A s2 "0" +A s3 "0" +A s4 "0" +A s5 "0" +A s6 "0" +A s7 "0" +A s8 "0" +A s9 "0" +saved_gameskill "0" +C sc_blur "2" +C sc_count "24" +C sc_debugCasterCount "24" +C sc_debugReceiverCount "24" +sc_enable "0" +C sc_fadeRange "0.25" +C sc_length "400" +C sc_offscreenCasterLodBias "0" +C sc_offscreenCasterLodScale "20" +C sc_shadowInRate "2" +C sc_shadowOutRate "5" +C sc_showDebug "0" +C sc_showOverlay "0" +C sc_wantCount "12" +C sc_wantCountMargin "1" +scr_ai_auto_fire_rate "1.0" +scr_art_visionfile "bog_a" +scr_cinematic_autofocus "1" +C scr_dof_enable "1" +scr_expDeathMayMoveCheck "on" +scr_playerInvulTimeScale "1" +scr_RequiredMapAspectratio "1" +A sensitivity "5" +R sf_use_bw "0" +R sf_use_chaplin "0" +R sf_use_clustergrenade "0" +R sf_use_contrast "0" +R sf_use_ignoreammo "0" +R sf_use_invert "0" +R sf_use_slowmo "0" +R sf_use_tire_explosion "0" +S R shortversion "1.0" +A sm_enable "1" +C sm_fastSunShadow "1" +sm_lightScore_eyeProjectDist "64" +sm_lightScore_spotProjectFrac "0.125" +A sm_maxLights "4" +sm_polygonOffsetBias "0.5" +sm_polygonOffsetScale "2" +C sm_qualitySpotShadow "1" +C sm_spotEnable "1" +sm_spotShadowFadeTime "1" +C sm_strictCull "1" +C sm_sunEnable "1" +C sm_sunSampleSizeNear "0.25" +C sm_sunShadowCenter "0 0 0" +C sm_sunShadowScale "1" +A snd_cinematicVolumeScale "0.85" +C snd_draw3D "Off" +snd_drawInfo "None" +C snd_enable2D "1" +C snd_enable3D "1" +A snd_enableEq "1" +C snd_enableReverb "1" +C snd_enableStream "1" +A snd_errorOnMissing "0" +AL snd_khz "44" +A C snd_levelFadeTime "250" +AL snd_outputConfiguration "Windows default" +A C snd_slaveFadeTime "500" +A snd_touchStreamFilesOnLoad "0" +A snd_volume "0.8" +start " ** melee breach alley shanty bog zpu cobras end " +start_timeaa_main_bog_a "0" +starting_ads_damage_dealtaa_main_bog_a "0" +starting_deathsaa_main_bog_a "0" +starting_enemy_damage_takenaa_main_bog_a "0" +starting_enemy_deathsaa_main_bog_a "0" +starting_player_damage_dealtaa_main_bog_a "0" +starting_player_damage_takenaa_main_bog_a "0" +starting_player_killsaa_main_bog_a "0" +C stopspeed "100" +RI sv_cheats "0" +sv_framerate_smoothing "1" +A sv_lastSaveGame "profiles/bullet-worm/save\autosave/bog_a.svg" +S R sv_mapname "" +R sv_running "1" +S sv_saveOnStartMap "1" +C sv_znear "0" +IA sys_configSum "222167764" +IA sys_configureGHz "9.00994" +R sys_cpuGHz "2.40002" +R sys_cpuName "Intel® Core™2 CPU 6600 @ 2.40GHz" +IA sys_gpu "NVIDIA GeForce 8800 GTS" +sys_lockThreads "none" +I sys_smp_allowed "1" +R sys_SSE "1" +IA sys_sysMB "1024" +A takeCoverWarnings "0" +C timescale "1" +C turretPlayerAvoidScale "1.7" +turretScopeZoom "20" +turretScopeZoomMax "20" +turretScopeZoomMin "5" +turretScopeZoomRate "15" +ui_autoContinue "0" +A ui_bigFont "0.4" +ui_borderLowLightScale "0.6" +ui_campaign "american" +ui_cinematicsTimestamp "0" +A ui_extraBigFont "0.55" +ui_hideMap "0" +ui_hint_text "@NULL_EMPTY" +R ui_isSaving "0" +ui_level_cheatpoints "2" +ui_level_player_cheatpoints "1" +ui_load_level "bog_a" +A ui_mousePitch "0" +R ui_multiplayer "0" +ui_nextMission "0" +ui_playerProfileAlreadyChosen "0" +R ui_playerProfileCount "0" +ui_playerProfileNameNew "" +R ui_playerProfileSelected "" +ui_savegame "" +ui_saveMessageMinTime "1" +C ui_showList "0" +ui_showMenuOnly "" +A ui_smallFont "0.25" +ui_victoryquote "@VICTORYQUOTE_EVERY_MANS_LIFE_ENDS" +uiscript_debug "0" +I useFastFile "1" +C vehHelicopterDecelerationFwd "0.5" +C vehHelicopterDecelerationSide "1" +C vehHelicopterFreeLookReleaseSpeed "8" +vehHelicopterHeadSwayDontSwayTheTurret "1" +C vehHelicopterHeadSwayOnPitch "0.2" +C vehHelicopterHeadSwayOnRollHorz "0.1" +C vehHelicopterHeadSwayOnRollVert "2" +C vehHelicopterHeadSwayOnYaw "0.1" +C vehHelicopterHoverSpeedThreshold "400" +C vehHelicopterInvertUpDown "0" +vehHelicopterJitterJerkyness "0.3" +C vehHelicopterLookaheadTime "1" +C vehHelicopterMaxAccel "45" +C vehHelicopterMaxAccelVertical "30" +C vehHelicopterMaxPitch "10" +C vehHelicopterMaxRoll "35" +C vehHelicopterMaxSpeed "150" +C vehHelicopterMaxSpeedVertical "65" +C vehHelicopterMaxYawAccel "90" +C vehHelicopterMaxYawRate "120" +C vehHelicopterRightStickDeadzone "0.3" +C vehHelicopterScaleMovement "1" +C vehHelicopterSoftCollisions "0" +C vehHelicopterStrafeDeadzone "0.3" +C vehHelicopterTiltFromAcceleration "2" +C vehHelicopterTiltFromControllerAxes "0" +C vehHelicopterTiltFromDeceleration "2" +C vehHelicopterTiltFromFwdAndYaw "0" +C vehHelicopterTiltFromFwdAndYaw_VelAtMaxTilt "1" +C vehHelicopterTiltFromVelocity "1" +C vehHelicopterTiltMomentum "0.4" +C vehHelicopterTiltSpeed "1.2" +vehHelicopterYawAltitudeControls "Altitude and yaw are both controlled by the thumbstick" +C vehHelicopterYawOnLeftStick "5" +vehHudDrawPipOnStickWhenFreelooking "1" +vehHudLineWidth "8" +vehHudReticleBouncingDiamondSize "24" +vehHudReticleBouncingRadius "80" +vehHudReticleBouncingSpeed "400" +vehHudReticlePipOnAStickCenterCircle "8" +vehHudReticlePipOnAStickCenterCircleBuffer "0.25" +vehHudReticlePipOnAStickMovingCircle "32" +vehHudReticlePipOnAStickMovingCircleBuffer "1" +vehHudTargetScreenEdgeClampBufferBottom "134" +vehHudTargetScreenEdgeClampBufferLeft "120" +vehHudTargetScreenEdgeClampBufferRight "126" +vehHudTargetScreenEdgeClampBufferTop "139" +vehHudTargetSize "50" +R version "CoD4 1.0 build 13600 Wed Sep 19 23:21:04 2007 win-x86" +A vid_xpos "3" +A vid_ypos "22" +waypointDebugDraw "0" +waypointDistScaleRangeMax "3000" +waypointDistScaleRangeMin "1000" +waypointDistScaleSmallest "0.8" +waypointIconHeight "36" +waypointIconWidth "36" +waypointOffscreenCornerRadius "105" +waypointOffscreenDistanceThresholdAlpha "30" +waypointOffscreenPadBottom "30" +waypointOffscreenPadLeft "103" +waypointOffscreenPadRight "0" +waypointOffscreenPadTop "0" +waypointOffscreenPointerDistance "30" +waypointOffscreenPointerHeight "12" +waypointOffscreenPointerWidth "25" +waypointOffscreenRoundedCorners "1" +waypointOffscreenScaleLength "500" +waypointOffscreenScaleSmallest "1" +C waypointPlayerOffsetCrouch "56" +C waypointPlayerOffsetProne "30" +C waypointPlayerOffsetStand "74" +waypointSplitscreenScale "1.8" +waypointTweakY "-17" +R wideScreen "1" + +1202 Dvars \ No newline at end of file diff --git a/Call of Duty 4/Docs/Custom Mod Server Tutorial.txt b/Call of Duty 4/Docs/Custom Mod Server Tutorial.txt new file mode 100755 index 0000000..bb497a1 --- /dev/null +++ b/Call of Duty 4/Docs/Custom Mod Server Tutorial.txt @@ -0,0 +1,103 @@ +http://iwnation.com/forums/index.php?showtopic=29394 + +Here's a brief walk through on how to set up custom maps on your server. The info is mostly compiled from several other posts that can be found on this site with a little editing by me. + +First off you have to run your custom map server as a modded server so that the clients can download your maps and files. Here's a brief tutorial on how to set up a modded server. + +How to set up a modded server + +1. Create a new folder in the COD4 'mods' folder (next to 'ModWarfare'). You can call it what you like. For illustration purposes, I will call mine 'awe4'. The entire path should look something like this: + +C:\Program Files\Activision\Call of Duty 4 - Modern Warfare\mods\awe4 + +This is your fs_game mods/folder. Remember to keep everything in lower case, as it avoids several quirks about the root path to fs_game. + +So, in your command line you would add something like this: + ++set fs_game mods/awe4 + +A forward slash and lower-case 'm' in mods. So the entire command line would look something like this: + +"C:\Program Files\Activision\Call of Duty 4 - Modern Warfare\iw3mp.exe" +set dedicated 2 +set fs_game mods/awe4 +exec server.cfg +map_rotate + +2. On your redirect space, create a root folder that you will use for all your servers. I will call mine 'cod4'. Inside this folder, create a folder called 'mods' (all lower case). Inside that create another folder named after your fs_game folder. I will call mine 'awe4'. + +3. On your server, into the 'awe4' folder place your mod IWD. Mine is called 'z_awe4.iwd'. Also place in there mod.ff. + +4. Copy those files from your server to your redirect space - i.e. z_awe4.iwd and mod.ff. + +In your server config file, enter your redirect details. They are exactly the same as vCOD/UO/COD2. + +Mine are: + +set sv_allowdownload "1" +set sv_wwwDownload 1 +set sv_wwwbaseURL "http://www.tallys-world.com/cod4/" +set sv_wwwdldisconnected "0" + +On previous versions of COD the disconnected setting could be a 1 but for now until IW puts out a fix for it leave this setting at 0. + +Notice that you quote only up to the root of where you store your download files. As in previous COD titles, you dont have to quote the whole destination root directory url - the game will find mods/awe4 for you. + +That should cover the basics on how to set up a mod and thanks to Tally for his original post on the subject. Now onto how to set up the custom maps. + +Custom map setup information: + +When you download a custom map from it's source you should find at least 3 files. The mp_mapname.ff, mp_mapnameload.ff and mp_mapname.iwd. The main map file is the mp_mapname.ff file. + +To run the custom maps from your server you need to make a new folder called "usermaps". This folder is placed in your root directory where you have your game installed right next to the other folders such as Docs, main, miles and so on. It should look something like this: + +C:\Program Files\Activision\Call of Duty 4 - Modern Warfare\usermaps + +Inside the usermaps folder each map should have it's own folder that's titled the name of the map. So it should look something like this: + +C:\Program Files\Activision\Call of Duty 4 - Modern Warfare\usermaps\mp_mapname + +You then place the two ff files into this folder so the mp_mapname.ff and the mp_mapnameload.ff both go into this folder. + +The mp_mapname.iwd goes into your fs_game mod folder along with the files from your mod so it goes along side of the mod.ff file, the cfg's and mod.iwd. At this point I will also add that you can combine your map iwd's into one iwd if you so wish. This keeps the number of downloads to your clients to a lower number. + +Redirect setup for custom maps + +The next thing to do is to create a new folder at your website where you are hosting your files. In your redirect directory you should already have a root folder with your fs_game folder inside it and your mod files inside that. In our case our root folder is called cod4. Inside that we have our mod folder called awe4. Along side of the mod folder you need to create a new folder called usermaps. You place a copy of your custom map folder containing the ff files inside this usermaps folder just like you did on your server. Then the mapname.iwd goes in your mod folder or in our case the Awe4 folder. + +You should now have a root folder at your download site with two folders inside it. One is your mod or fs_game folder with your mod files and map.iwd's and the other is your usermaps folder with the individual map folders inside it and inside the map folders the two ff files. + +Note that if you are getting errors from a new map that the map's iwd and mp_mapnameload.ff are not always needed to run the map in all cases. Try starting the server up with only the mp_mapname.ff file and let the mapmaker know that there is a potential issue. + +Lastly you need to update your map rotation to run the new maps. + + +Startup Configs + +"C:\Program Files\Activision\Call of Duty 4 - Modern Warfare\iw3mp.exe" + ++set dedicated 2 +set fs_game mods/awe4 +exec server.cfg +map_rotate ++set dedicated 2 +map_rotate ++set net_ip xxx.xxx.xxx.xxx ++set net_port xxxxx ++set fs_game mods/modwarfare ++set dedicated 2 +set sv_punkbuster 1 +exec mp-server.cfg +map_rotate ++set dedicated 2 +set sv_punkbuster 1 +set net_ip xxx.xxx.xxx.xxx +exec mp_server.cfg +map_rotate ++set dedicated 2 +set sv_punkbuster 1 +exec server.cfg +map_rotate +set net__ip 10.0.0.1 +set net_port 28960 ++g_gametype koth +g_map mp_backlot + + +Saved Server Startup Configs +============================================= + +COD4 Server +--------------------------------------------- +"C:\Program Files\Activision\Call of Duty 4 - Modern Warfare\iw3mp.exe" +set dedicated 2 +exec server.cfg +devmap mp_broadcast + +COD4 Server AWE4 +--------------------------------------------- +"C:\Program Files\Activision\Call of Duty 4 - Modern Warfare\iw3mp.exe" +set dedicated 2 +exec server.cfg +devmap mp_broadcast +set fs_game "mods/awe4" + +COD4 Server PeZBOT +--------------------------------------------- +"C:\Program Files\Activision\Call of Duty 4 - Modern Warfare\iw3mp.exe" +set dedicated 2 +exec server.cfg +devmap mp_broadcast +set fs_game "mods/PeZBOT" +set svr_pezbots 10 +set svr_pezbots_team "autoassign" + +COD4 Server ROTU +--------------------------------------------- +"C:\Program Files\Activision\Call of Duty 4 - Modern Warfare\iw3mp.exe" +set dedicated 2 +exec server.cfg +map mp_surv_samsite +set fs_game "mods/reignoftheundead" \ No newline at end of file diff --git a/Call of Duty 4/Docs/Dedicated Server Guide.txt b/Call of Duty 4/Docs/Dedicated Server Guide.txt new file mode 100755 index 0000000..7c4fe1e --- /dev/null +++ b/Call of Duty 4/Docs/Dedicated Server Guide.txt @@ -0,0 +1,132 @@ +Call of Duty 4 Dedicated Server Guide + +Required Ports +----- +UDP 20800 +UDP 20810 +UDP 28960 + +starting a dedicated server +---------------------------- +LAN server +] iw3mp.exe +set dedicated 1 + +Internet server +] iw3mp.exe +set dedicated 2 + +Modded server +] iw3mp.exe +set dedicated [1,2] +set fs_game "mods/" + +start map +] map + +example usage: +] iw3mp.exe +set dedicated 2 +exec my_server.cfg +map mp_crash + +my_server.cfg contains customized settings which are detailed below. +syntax: set + +server commands +--------------- +] killserver +] quit +] map_restart +] say "my message" +] tell [clientnum] "my message to you" + +server settings +-------------- +map rotation +] sv_mapRotation gametype map gametype map ... + + is one of: +"dm" - free for all deathmatch +"dom" - domination +"koth" - headquarters +"sab" - sabotage +"sd" - search & destroy +"war" - team deathmatch + +] sv_hostname "my server" +] g_gametype +] sv_maxclients [1-32] +] g_password "my password" +] sv_voice [0-1] +] scr_teambalance [0-1] +] g_allowvote [0-1] +] sv_punkbuster [0-1] +] sv_minping [0-n] (milliseconds) +] sv_maxping [0-n] (milliseconds) +] sv_connectTimeout [0-n] (seconds) +] sv_timeout [0-n] (seconds) + +gameplay options +---------------- +] scr_oldschool [0-1] +] scr_hardcore [0-1] +] scr_game_spectatetype [0-2] (Disabled, Team/Players Only, Free) +] scr_game_allowkillcam [0-1] +] scr_team_fftype [0-3] (Disabled, Enabled, Reflect, Shared) + +] scr_game_perks [0-1] +] scr_game_onlyheadshots [0-1] +] scr_game_forceuav [0-1] +] scr_game_hardpoints [0-1] (i.e. artillery, uav, helicopter) +] scr_hardpoint_allowartillery [0-1] +] scr_hardpoint_allowuav [0-1] +] scr_hardpoint_allowhelicopter [0-1] + +free for all deathmatch +----------------------- +] scr_dm_scorelimit [0-n] +] scr_dm_timelimit [0-n] (minutes) + +domination +----------- +] scr_dom_scorelimit [0-n] +] scr_dom_timelimit [0-n] (minutes) + +team deathmatch +----------------- +] scr_war_scorelimit [0-n] +] scr_war_timelimit [0-n] (minutes) + +sabotage +--------- +] scr_sab_scorelimit [1-n] (points) +] scr_sab_timelimit [0-n] (minutes) +] scr_sab_roundswitch [0-n] (after how many rounds) +] scr_sab_bombtimer [0-n] (seconds) +] scr_sab_planttime [0-n] (seconds) +] scr_sab_defusetime [0-n] (seconds) +] scr_sab_hotpotato [0-1] (shared bomb timer) + +search and destroy +------------------- +] scr_sd_scorelimit [1-n] (points) +] scr_sd_timelimit [0-n] (minutes) +] scr_sd_roundswitch [0-n] (number of rounds before switching teams) +] scr_sd_bombtimer [0-n] (seconds) +] scr_sd_planttime [0-n] (seconds) +] scr_sd_defusetime [0-n] (seconds) +] scr_sd_multibomb [0-1] + +headquarters +------------- +] scr_koth_scorelimit [1-n] (points) +] scr_koth_timelimit [0-n] (minutes) +] koth_autodestroytime [0-n] (seconds) +] koth_kothmode [0-1] (classic mode, non-classic) +] koth_spawntime [0-n] (seconds, hq spawn time) + + +Fixing 1.6 Patch SV_Cheats Exploit +------------- +pb_sv_cvar sv_cheats IN 0 +some say this needs to be set in cod4/pb/pbsv.cfg file + +Browsing around has me finding references to creating the pbsv.cfg file: + +When in game, log into rcon and type "/rcon pb_sv_writecfg" + +The pbsv.cfg file should now be in the pb folder on the INX server. Note that the pb folder is hidden by default so you may need to go hunting for it with your ftp client. \ No newline at end of file diff --git a/Call of Duty 4/Docs/Gametype Settings.txt b/Call of Duty 4/Docs/Gametype Settings.txt new file mode 100755 index 0000000..f4003c5 --- /dev/null +++ b/Call of Duty 4/Docs/Gametype Settings.txt @@ -0,0 +1,81 @@ +// Gametype Settings + +// King of the Hill + +set koth_autodestroytime "60" +set koth_capturetime "20" +set koth_delayPlayer "0" +set koth_destroytime "10" +set koth_kothmode "0" +set koth_spawnDelay "60" +set koth_spawntime "0" +set scr_koth_numlives "0" +set scr_koth_playerrespawndelay "1" +set scr_koth_roundlimit "1" +set scr_koth_roundswitch "1" +set scr_koth_scorelimit "350" +set scr_koth_timelimit "15" +set scr_koth_waverespawndelay "0" + +// Death Match + +set scr_dm_numlives "0" +set scr_dm_playerrespawndelay "1" +set scr_dm_roundlimit "1" +set scr_dm_scorelimit "0" +set scr_dm_timelimit "15" +set scr_dm_waverespawndelay "0" + +// Domination + +set scr_dom_numlives "0" +set scr_dom_playerrespawndelay "1" +set scr_dom_roundlimit "1" +set scr_dom_scorelimit "200" +set scr_dom_timelimit "0" +set scr_dom_waverespawndelay "0" + +// Sabotoge + +set scr_sab_bombtimer "30" +set scr_sab_defusetime "5" +set scr_sab_hotpotato "0" +set scr_sab_numlives "0" +set scr_sab_planttime "2.5" +set scr_sab_playerrespawndelay "7" +set scr_sab_roundlimit "0" +set scr_sab_roundswitch "1" +set scr_sab_scorelimit "3" +set scr_sab_timelimit "5" +set scr_sab_waverespawndelay "0" + +// Search & Destroy + +set scr_sd_bombtimer "60" +set scr_sd_defusetime "7" +set scr_sd_multibomb "0" +set scr_sd_numlives "1" +set scr_sd_planttime "7" +set scr_sd_playerrespawndelay "0" +set scr_sd_roundlimit "0" +set scr_sd_roundswitch "2" +set scr_sd_scorelimit "5" +set scr_sd_timelimit "3" +set scr_sd_waverespawndelay "0" + +// War + +set scr_war_numlives "0" +set scr_war_playerrespawndelay "1" +set scr_war_roundlimit "1" +set scr_war_scorelimit "0" +set scr_war_timelimit "15" +set scr_war_waverespawndelay "0" + +direct respawn in hardcore... + +set scr_war_playerrespawndelay -9 +set scr_war_waverespawndelay -9 + +set scr_dm_playerrespawndelay -9 +set scr_dm_waverespawndelay -9 \ No newline at end of file diff --git a/Call of Duty 4/Docs/How To Create Mods.docx b/Call of Duty 4/Docs/How To Create Mods.docx new file mode 100755 index 0000000..e7dbadb Binary files /dev/null and b/Call of Duty 4/Docs/How To Create Mods.docx differ diff --git a/Call of Duty 4/Docs/MP Commands.txt b/Call of Duty 4/Docs/MP Commands.txt new file mode 100755 index 0000000..ee50649 --- /dev/null +++ b/Call of Duty 4/Docs/MP Commands.txt @@ -0,0 +1,668 @@ +if you cant use cheats you are a dumb motherfucker you have to put a cheat in like this…….(`) to open console then ex. “/god” (godmode) make sure you have the / in front of the code here is alot more codes…… + +/rcon login (password) ~ Replace password with the rcon pass without brackets. + +Kick/ban/msg players: + +/status ~ Displays information for all connected players in the server. + +/tell (player id) ~ Sends a message to a specific player in the server via console (the message will appear next to the name ‘console’). + +/clientkick (player id) ~ Kicks a specific player from the server. + +/kick (player name) ~ Kicks a player from the server except instead of using the id to identify the player you need to instead type out the players name (colours included). + +/banclient (player id) ~ Bans specific player from the server. + +/banuser (player name) ~ Bans player by name not id. + +/tempbanClient (player id) ~ Temporarily bans a player. + +/tempbanUser (player name) ~ Same as above just by name not id. + +/unbanuser (player name) ~ Unbans a user by name *note* the easiest way to unban a player is to delete the players name from ban.txt which can be found in the server files located in the server’s FTP. + +Changing the map: + +/map (map name) ~ Type in the map name you want without the brackets. Some of the map names used are different to the console command names. To make things easier here is a list of map names: + +mp_backlot +mp_bloc +mp_bog +mp_cargoship +mp_citystreets +mp_convoy +mp_countdown +mp_crash +mp_crossfire +mp_farm +mp_overgrown +mp_pipeline +mp_shipment + +/map_rotate ~ Loads the next map in rotation. + +/map_restart ~ Restarts the current map. + +/fast_restart ~ Restarts the map without loading. + +Restarting server: + +/killserver ~ Shuts the server down. + +/Quit ~ Restarts the server. + +The above is just a list of the most common commands you will need to know as a server admin. There are however alot more commands than this. Maybe in another post i’ll list those too. + +*EDIT* Remember to type /rcon before each command and not the command by itself. E.G /rcon map_restart + +Server Mode: + +set scr_hardcore ~ Player’s HUD is limited, bullet damage is higher, friendly fire is on. + +set scr_oldschool ~ No classes. Weapons are pickups, health is in a gauge form and can be increased with medipacks also jumps are higher. + +set scr_oldschool_mw ~ Same as above, just for modded servers? + +Spectator permissions: + +set scr_game_spectatetype ~ Toggle spectating type. +set g_deadChat ~ Toggle dead chat. + +Search and Destroy (sd) (scroll down to see explanations): + +set scr_sd_bombtimer +set scr_sd_defusetime +set scr_sd_multibomb +set scr_sd_numlives +set scr_sd_planttime +set scr_sd_playerrespawndelay +set scr_sd_roundlimit +set scr_sd_roundswitch +set scr_sd_scrorelimit +set scr_sd_timelimit +set scr_sd_waverespawndelay + +Domination (dom): + +set scr_dom_numlives +set scr_dom_playerrespawndelay +set scr_dom_roundlimit +set scr_dom_scorelimit +set scr_dom_timelimit +set scr_dom_waverespawndelay + +Sabotage (sab): + +set scr_sab_bombtimer +set scr_sab_defusetime +set scr_sab_hotpotato +set scr_sab_numlives +set scr_sab_planttime +set scr_sab_playerrespawndelay +set scr_sab_roundlimit +set scr_sab_roundswitch +set scr_sab_scorelimit +set scr_sab_timelimit +set scr_sab_waverespawndelay + +Tdm (war) : + +set scr_war_numlives +set scr_war_playerrespawndelay +set scr_war_roundlimit +set scr_war_scorelimit +set scr_war_timelimit +set scr_war_waverespawndelay + +HQ (koth) : + +set scr_koth_numlives +set scr_koth_playerrespawndelay +set scr_koth_roundlimit +set scr_koth_roundswitch +set scr_koth_scorelimit +set scr_koth_timelimit +set scr_koth_waverespawndelay + +Capture The Flag (ctf) : + +(not available yet) + +set scr_ctf_numlives +set scr_ctf_playerrespawndelay +set scr_ctf_roundlimit +set scr_ctf_roundswitch +set scr_ctf_scorelimit +set scr_ctf_timelimit +set scr_ctf_waverespawndelay + +Deathmatch – Free for all (dm) : + +set scr_dm_numlives +set scr_dm_playerrespawndelay +set scr_dm_roundlimit +set scr_dm_scorelimit +set scr_dm_timelimit +set scr_dm_waverespawndelay + +Explanations : + +bombtimer ~ Sets how long until the bomb will blow. +defusetime ~ How long it takes to defuse the bomb after its planted. +multibomb ~ Allows everyone on the attacking side to be armed with a bomb. +numlives ~ Sets the number of lives. +planttime ~ How long it takes to plant the bomb. +playerrespawndelay ~ Time to respawn after dying. +roundlimit ~ sets the round limit on each map. +roundswitch ~ The round at which players will switch sides. +scrorelimit ~ Sets the score limit. +timelimit ~ Sets the time limit for the map. +waverespawndelay ~ Disable delay in respawn time. + +// +// Punkbuster +seta sv_punkbuster “1? +wait +pb_sv_enable +//////////////////////////////////////////// +//////////////////////////////////////////// +// +// Server Name, MoTD, Passwords, and Clients +set sv_hostname “” +set g_motd “” +set scr_motd “” + +set rcon_password “” + +set sv_privateClients “0? +set sv_privatePassword “” + +set g_password “” + +set sv_maxclients “16? + +//////////////////////////////////////////// +//////////////////////////////////////////// +// +// Map Rotation +set g_gametype “war” +set sv_mapRotation “map mp_backlot map mp_bloc map mp_bog map mp_cargoship map mp_citystreets map mp_convoy map mp_countdown map mp_crash map mp_crossfire map mp_farm map mp_overgrown map mp_pipeline map mp_showdown map mp_strike map mp_vacant” +set sv_mapRotationCurrent “” +//////////////////////////////////////////// +//////////////////////////////////////////// +// +// Logging +set logfile 0 +set g_log “games_mp.log” +set g_logSync “0? +set developer “0? +set loc_warnings “0? +//////////////////////////////////////////// +//////////////////////////////////////////// +// +// Server Personality +// +// Mode +set scr_hardcore “0? +set scr_oldschool “0? +set scr_oldschool_mw “0? + +set scr_game_onlyheadshots “0? +set scr_game_forceuav “0? + +set sv_fps “20? // +set sv_pure “1? + +// Anti-Lag efforts +set g_antilag “1? +set g_smoothClients “1? + +// Friendly Fire +set scr_drawfriend “1? +set scr_team_fftype “1? + +// Team Killing +set scr_team_teamkillpointloss “2? +set scr_team_teamkillspawndelay “25? +set scr_team_kickteamkillers “1? +set scr_teamKillPunishCount “3? + +// Spectator Permissions +set scr_game_spectatetype “1? +set g_deadChat “0? + +// Player Settings +set scr_player_numlives “0? +set scr_player_forcerespawn “1? +set scr_player_respawndelay “0? + +set scr_game_deathpointloss “0? +set scr_game_suicidepointloss “0? +set scr_player_suicidespawndelay “0? + +set scr_player_maxhealth “100? +set scr_player_healthregentime “5? + +set scr_player_sprinttime “4? +set g_speed “190? + +set scr_xpscale “1? + +// Team Settings +set scr_teambalance “1? +set scr_team_respawntime “0? + +// Kill Cam +set scr_game_allowkillcam “1? + +// Game Timers +set scr_game_graceperiod “15? +set scr_game_matchstarttime “15? +set scr_game_playerwaittime “20? + +// HUD and Environmental Stuff +set g_gravity “800? +set g_redCrosshairs “0? +set scr_enable_hiticon “1? +set scr_enable_music “0? +set scr_enable_scoretext “1? +set scr_fog_disable “1? +set g_maxDroppedWeapons “16? + +// Client Issues +set sv_maxPing “255? +set sv_maxRate “25000? +set sv_minPing “0? +set sv_reconnectlimit “3? +set g_inactivity “0? + +set g_banIPs “” +set sv_kickBanTime “300? + +set sv_disableClientConsole “0? + +// Ragdolls – Not known if these are used in MP!! +set ragdoll_enable “1? +set ragdoll_max_simulating “16? +///////////////////////////////////////////// +//////////////////////////////////////////// +// +// Voting +set g_allowVote “0? +set g_voteAbstainWeight “0.5? +set g_oldVoting “1? // Unknown what it does, but obviously goes here +//////////////////////////////////////////// +//////////////////////////////////////////// +// +// Voice Comms +set sv_voice “1? + +set sv_voiceQuality “3? +set voice_deadChat “0? +set voice_global “0? +set voice_localEcho “0? +//////////////////////////////////////////// +//////////////////////////////////////////// +// +// Downloads Settings +set sv_allowDownload “1? +set sv_wwwBaseURL “” +set sv_wwwDlDisconnected “0? +set sv_wwwDownload “0? +//////////////////////////////////////////// +///////////////////////////////////////////// +// +// Gametype Settings +// +// King of the Hill +set koth_autodestroytime “60? +set koth_capturetime “20? +set koth_delayPlayer “0? +set koth_destroytime “10? +set koth_kothmode “0? +set koth_spawnDelay “60? +set koth_spawntime “0? +set scr_koth_numlives “0? +set scr_koth_playerrespawndelay “0? +set scr_koth_roundlimit “1? +set scr_koth_roundswitch “1? +set scr_koth_scorelimit “250? +set scr_koth_timelimit “15? +set scr_koth_waverespawndelay “0? +//////////////////////////////////////////// +// +// Death Match +set scr_dm_numlives “0? +set scr_dm_playerrespawndelay “0? +set scr_dm_roundlimit “1? +set scr_dm_scorelimit “250? +set scr_dm_timelimit “12? +set scr_dm_waverespawndelay “0? +//////////////////////////////////////////// +// +// Domination +set scr_dom_numlives “0? +set scr_dom_playerrespawndelay “0? +set scr_dom_roundlimit “1? +set scr_dom_scorelimit “200? +set scr_dom_timelimit “0? +set scr_dom_waverespawndelay “0? +//////////////////////////////////////////// +// +// Sabotoge +set scr_sab_bombtimer “30? +set scr_sab_defusetime “5? +set scr_sab_hotpotato “0? +set scr_sab_numlives “0? +set scr_sab_planttime “2.5? +set scr_sab_playerrespawndelay “7.5? +set scr_sab_roundlimit “0? +set scr_sab_roundswitch “1? +set scr_sab_scorelimit “1? +set scr_sab_timelimit “20? +set scr_sab_waverespawndelay “0? +//////////////////////////////////////////// +// +// Search & Destroy +set scr_sd_bombtimer “50? +set scr_sd_defusetime “5? +set scr_sd_multibomb “0? +set scr_sd_numlives “1? +set scr_sd_planttime “5? +set scr_sd_playerrespawndelay “0? +set scr_sd_roundlimit “0? +set scr_sd_roundswitch “5? +set scr_sd_scorelimit “6? +set scr_sd_timelimit “2.5? +set scr_sd_waverespawndelay “0? +//////////////////////////////////////////// +// +// War +set scr_war_numlives “0? +set scr_war_playerrespawndelay “7? +set scr_war_roundlimit “1? +set scr_war_scorelimit “1000? +set scr_war_timelimit “10? +set scr_war_waverespawndelay “0? +//////////////////////////////////////////// +// +// Capture the Flag (not available yet) +set scr_ctf_numlives “0? +set scr_ctf_playerrespawndelay “0? +set scr_ctf_roundlimit “2? +set scr_ctf_roundswitch “1? +set scr_ctf_scorelimit “10? +set scr_ctf_timelimit “5? +set scr_ctf_waverespawndelay “15? +//////////////////////////////////////////// +//////////////////////////////////////////// +// +// Perks +// +set scr_game_perks “1? + +set perk_allow_c4_mp “1? +set perk_allow_claymore_mp “1? +set perk_allow_rpg_mp “1? +set perk_allow_specialty_armorvest “1? +set perk_allow_specialty_bulletaccuracy “1? +set perk_allow_specialty_bulletdamage “1? +set perk_allow_specialty_bulletpenetration “1? +set perk_allow_specialty_detectexplosive “1? +set perk_allow_specialty_explosivedamage “1? +set perk_allow_specialty_extraammo “1? +set perk_allow_specialty_fastreload “1? +set perk_allow_specialty_fraggrenade “1? +set perk_allow_specialty_gpsjammer “1? +set perk_allow_specialty_grenadepulldeath “1? +set perk_allow_specialty_holdbreath “1? +set perk_allow_specialty_longersprint “1? +set perk_allow_specialty_parabolic “1? +set perk_allow_specialty_pistoldeath “1? +set perk_allow_specialty_quieter “1? +set perk_allow_specialty_rof “1? +set perk_allow_specialty_specialgrenade “1? +set perk_armorVest “75? +set perk_bulletDamage “40? +set perk_explosiveDamage “25? +//////////////////////////////////////////// +//////////////////////////////////////////// +// +// Harpoints +// +set scr_game_hardpoints “1? + +set scr_hardpoint_allowartillery “1? +set scr_hardpoint_allowhelicopter “1? +set scr_hardpoint_allowsupply “1? +set scr_hardpoint_allowuav “1? + +// Helicopter Settings +set scr_heli_armor “500? +set scr_heli_armor_bulletdamage “0.3? +set scr_heli_attract_range “4096? +set scr_heli_attract_strength “1000? +set scr_heli_hardpoint_interval “180? +set scr_heli_health_degrade “0? +set scr_heli_loopmax “1? +set scr_heli_maxhealth “1100? +set scr_heli_missile_engage_dist “2000? +set scr_heli_missile_friendlycare “256? +set scr_heli_missile_max “3? +set scr_heli_missile_regen_time “10? +set scr_heli_missile_rof “5? +set scr_heli_missile_target_cone “0.3? +set scr_heli_rage_missile “5? +set scr_heli_target_recognition “0.5? +set scr_heli_target_spawnprotection “5? +set scr_heli_targeting_delay “0.5? +set scr_heli_turret_engage_dist “1000? +set scr_heli_turret_spinup_delay “0.75? +set scr_heli_turretClipSize “40? +set scr_heli_turretReloadTime “1.5? +set scr_heli_visual_range “3500? +//////////////////////////////////////////// +//////////////////////////////////////////// +// +// Classes +//////////////////////////////////////////// +// +// Assault Class Options +set allies_allow_assault “1? +set axis_allow_assault “1? + +set class_assault_allowdrop “1? +set class_assault_camo “camo_none” +set class_assault_frags “1? +set class_assault_grenade “concussion_grenade” +set class_assault_limit “64? +set class_assault_movespeed “0.95? +set class_assault_perk1 “specialty_null” +set class_assault_perk2 “specialty_bulletdamage” +set class_assault_perk3 “specialty_longersprint” +set class_assault_primary “m16? +set class_assault_primary_attachment “gl” +set class_assault_secondary “beretta” +set class_assault_secondary_attachment “none” +set class_assault_special “1? +//////////////////////////////////////////// +// +// Demolitions Class Options +set allies_allow_demolitions “1? +set axis_allow_demolitions “1? + +set class_demolitions_allowdrop “1? +set class_demolitions_camo “camo_none” +set class_demolitions_frags “1? +set class_demolitions_grenade “smoke_grenade” +set class_demolitions_limit “64? +set class_demolitions_movespeed “1? +set class_demolitions_perk1 “rpg_mp” +set class_demolitions_perk2 “specialty_explosivedamage” +set class_demolitions_perk3 “specialty_longersprint” +set class_demolitions_primary “winchester1200? +set class_demolitions_primary_attachment “none” +set class_demolitions_secondary “beretta” +set class_demolitions_secondary_attachment “none” +set class_demolitions_special “1? +//////////////////////////////////////////// +// +// Heavygunner Class Options +set allies_allow_heavygunner “1? +set axis_allow_heavygunner “1? + +set class_heavygunner_allowdrop “1? +set class_heavygunner_camo “camo_none” +set class_heavygunner_frags “1? +set class_heavygunner_grenade “concussion_grenade” +set class_heavygunner_limit “64? +set class_heavygunner_movespeed “0.875? +set class_heavygunner_perk1 “specialty_specialgrenade” +set class_heavygunner_perk2 “specialty_armorvest” +set class_heavygunner_perk3 “specialty_bulletpenetration” +set class_heavygunner_primary “saw” +set class_heavygunner_primary_attachment “none” +set class_heavygunner_secondary “usp” +set class_heavygunner_secondary_attachment “none” +set class_heavygunner_special “1? +//////////////////////////////////////////// +// +// Sniper Class Options +set allies_allow_sniper “1? +set axis_allow_sniper “1? + +set class_sniper_allowdrop “1? +set class_sniper_camo “camo_none” +set class_sniper_frags “1? +set class_sniper_grenade “flash_grenade” +set class_sniper_limit “64? +set class_sniper_movespeed “1? +set class_sniper_perk1 “specialty_specialgrenade” +set class_sniper_perk2 “specialty_bulletdamage” +set class_sniper_perk3 “specialty_bulletpenetration” +set class_sniper_primary “m40a3? +set class_sniper_primary_attachment “none” +set class_sniper_secondary “beretta” +set class_sniper_secondary_attachment “silencer” +set class_sniper_special “1? +//////////////////////////////////////////// +// +// SpecOps Class Options +set allies_allow_specops “1? +set axis_allow_specops “1? + +set class_specops_allowdrop “1? +set class_specops_camo “camo_none” +set class_specops_frags “1? +set class_specops_grenade “flash_grenade” +set class_specops_limit “64? +set class_specops_movespeed “1? +set class_specops_perk1 “c4_mp” +set class_specops_perk2 “specialty_explosivedamage” +set class_specops_perk3 “specialty_bulletaccuracy” +set class_specops_primary “mp5? +set class_specops_primary_attachment “none” +set class_specops_secondary “usp” +set class_specops_secondary_attachment “silencer” +set class_specops_special “1? +//////////////////////////////////////////// +//////////////////////////////////////////// +// +// Weapons +// +set weap_allow_ak47 “1? +set weap_allow_ak74u “1? +set weap_allow_barrett “1? +set weap_allow_beretta “1? +set weap_allow_colt45 “1? +set weap_allow_concussion_grenade “1? +set weap_allow_deserteagle “1? +set weap_allow_deserteaglegold “1? +set weap_allow_dragunov “1? +set weap_allow_flash_grenade “1? +set weap_allow_frag_grenade “1? +set weap_allow_g3 “1? +set weap_allow_g36c “1? +set weap_allow_m1014 “1? +set weap_allow_m14 “1? +set weap_allow_m16 “1? +set weap_allow_m21 “1? +set weap_allow_m4 “1? +set weap_allow_m40a3 “1? +set weap_allow_m60e4 “1? +set weap_allow_mp44 “1? +set weap_allow_mp5 “1? +set weap_allow_p90 “1? +set weap_allow_remington700 “1? +set weap_allow_rpd “1? +set weap_allow_saw “1? +set weap_allow_skorpion “1? +set weap_allow_smoke_grenade “1? +set weap_allow_usp “1? +set weap_allow_uzi “1? +set weap_allow_winchester1200 “1? + +// Explosives +set scr_weapon_allowc4 “1? +set scr_weapon_allowclaymores “1? +set scr_weapon_allowflash “1? +set scr_weapon_allowfrags “1? +set scr_weapon_allowmines “1? +set scr_weapon_allowrpgs “1? + +// Smoke +set scr_weapon_allowsmoke “1? + +// Nightvision +set scr_enable_nightvision “1? +//////////////////////////////////////////// +//////////////////////////////////////////// +// +// Attachments +set attach_allow_assault_acog “1? +set attach_allow_assault_gl “1? +set attach_allow_assault_none “1? +set attach_allow_assault_reflex “1? +set attach_allow_assault_silencer “1? +set attach_allow_lmg_acog “1? +set attach_allow_lmg_grip “1? +set attach_allow_lmg_none “1? +set attach_allow_lmg_reflex “1? +set attach_allow_pistol_none “1? +set attach_allow_pistol_silencer “1? +set attach_allow_shotgun_grip “1? +set attach_allow_shotgun_none “1? +set attach_allow_shotgun_reflex “1? +set attach_allow_smg_acog “1? +set attach_allow_smg_none “1? +set attach_allow_smg_reflex “1? +set attach_allow_smg_silencer “1? +set attach_allow_sniper_acog “1? +set attach_allow_sniper_none “1? + +Cheat – Effect +/give all – Access All Weapons +/god – God Mode +/noclip – No Clipping Mode +/notarget – Enemies Ignore You +/give ammo – Full Ammo +/jump_height # – Adjust Gravity Default = 39 +/timescale # – Adjust Time Default = 1.00 +/cg_LaserForceOn 1 – Add Laser Sights to ALL Weapons +/demigod – God mode but screen still shakes +/ufo – Same as noclip? +/r_fullbright – Easier to see things +/cg_drawGun – Removes Your Gun +/cg_fov – Zoom with any Gun +/player_sprintSpeedScale – Set player’s sprint speed +/kill – Kill player +/cg_laserlight 1 – To draw the light emitted from the laser +/take ammo – Removes your ammo +/take all – Removes all your guns and health +/sf_use_ignoreammo 1 – Allows you to shoot without reloading. + +//****************************************************************************** +// KOTH -- HEADQUARTERS +//****************************************************************************** +//set sv_mapRotation "gametype koth map mp_backlot gametype dm map mp_bloc gametype sab map mp_bog gametype war map mp_cargoship gametype dom map mp_citystreets gametype sd map mp_convoy" \ No newline at end of file diff --git a/Call of Duty 4/Docs/Patch Testing.txt b/Call of Duty 4/Docs/Patch Testing.txt new file mode 100755 index 0000000..6197334 --- /dev/null +++ b/Call of Duty 4/Docs/Patch Testing.txt @@ -0,0 +1,47 @@ +xl2eVo Patch Making TuT! + +I've done this thread because a few people have asked about it and nobody makes their own patches on cod4, its full of that shit one that freezes all the time lol, its really simple, pretty much the same as cod5 but different files and offsets. + +Before you begin you will need... + +HxD Hex Editor +Notepad++ +Offzip & Packzip + +make a folder on your desktop called pack and put in offzip, packzip and your patch_mp.ff. + +I will put each step in a spoiler to make this thread as easy to read as possible.. + +[SPOILER=]First you need to Decompress your patch_mp.ff so you need to open up cmd command prompt and type in cd desktop/pack then +offzip -a -z -15 patch_mp.ff ./ 0[/spoiler] + +NEXT you need to select the files you want and delete all the other...in the spoiler is a list of all the files you MIGHT want, weapons.gsc and rank.gsc are where most mods are in existing patches. + +[spoiler=] +PHP Code: +GSCNAME FILE STARTOFFSET LENGTH +Koth.gsc 00030783 2924 5F0D +Weapons 0002cbcc 1AC7 9E0A +Rank part1 000295f3 A00d 5FF3 +Rank part2 0002cbcc 0 1A9B +[/spoiler] + +Once you have all your files ready with the correct offsets chosen, just open them up in Notepad++ and edit to your liking. + +Once you have finished editing, just make sure the files are the same size as they were before you started and recompress them... + +[spoiler=]Packzip -o 0x(File name here) -w -15 (File name Here).dat patch_mp.ff + +An example would be Packzip -o- 0x0002cbcc -w -15 0002bcc.dat patch_mp.ff +[/spoiler] + +Now its all packed back up and ready to transfer to your ps3 for testing + + +Fabulous tutorial, well explained. I only found 2 mistakes, the first is in the example, + +" Packzip -o 0x(File name here) -w -15 (File name Here).dat patch_mp.ff + +An example would be Packzip -o- 0x0002cbcc -w -15 0002bcc.dat patch_mp.ff " + +the top line is correct yet the bottom line should not have a - after the o. also, the the 2nd time you wrote the name you forgot a "c" before the "bcc." Everything else is fabulous and this is the best I have ever seen. Well done! \ No newline at end of file diff --git a/Call of Duty 4/Docs/Promod Binds.txt b/Call of Duty 4/Docs/Promod Binds.txt new file mode 100755 index 0000000..cadde11 --- /dev/null +++ b/Call of Duty 4/Docs/Promod Binds.txt @@ -0,0 +1,96 @@ +Alright, I'll post every tweaks and tips I know on cod4, there will be useful things and completely useless yet funny binds ^^, lets start by some useful things. Oh and forgive my english please, if there is something you don't understand or something that doesn't work, I'll be glad to reply and help you out as much as I can + +First I'll list the modification that are available with the promod, they should all work in normal too: + +- Promod Controls : +These controls can be very important in clanwars especially the DropBomb thing. So i found a way to bind it to a key here is the line you have to add to your cfg file + bind O "openscriptmenu quickpromod 2" + +(here of course if you want another key to be assigned just change the O by the one you want) +Now every time I press on O my player will just drop the bomb where he is, this is a crucial thing if you mistakenly stole the bomb from your friend. + +I don't think something like killing yourself is important but it would work the same + bind x "openscriptmenu quickpromod 3" for timeout + bind x "openscriptmenu quickpromod 4" for suicide + +Next, don't you think it is really boring to press Esc. then choose a class etc etc when you want to choose another weapon ? then here is the solution : + bind 1 "openscriptmenu quickpromod assault" + bind 2 "openscriptmenu quickpromod specops" + bind 3 "openscriptmenu quickpromod demolitions" + bind 4 "openscriptmenu quickpromod sniper" + +(These are the numbers above & é " ' at least on my G15 :p) +Done, now every time I press on each of this keys my weapons will immediately change. Remember that your classes are registered by the promod if you choose an M4 then by pressing the key "1" you'll always have the M4 back if you want something else you'll have to get through the process of choosing your weapon, camo, special grenade etc at least once (same for the other classes). Please note that those binds won't work when you're dead ! But if you press them before 10 secondes after the beginning of a round it will change. + +And you can also change which special grenade you want, flash/smoke with that bind + bind I "openscriptmenu quickpromod grenade" + +- Promod Graphics : +Here I'll explain what exactly the promod allow us to change in our graphics. First you have to know the promod is different from the normal maps. It is something pretty light but all the modification they have done boost your fps by 15% at least. + +DrawDecals, this is one of the most used tweaks in all cfg boost you could ever use, it significantly increase your fps but your game will be really really ugly, (uni-colored walls, ugly ground, ...) If you want to test it yourself here is the line. + r_DrawDecals 0 (to revert it back as before put 1 instead of 0) + +But there is something you can do about that for instance, if you want to do your best in clanwars but still enjoy the graphics when you're playing for fun without every time having to change the line here is the process, we will bind the command to a key to be able to toggle between the 2. + bind ALT "toggle r_drawdecals 1 0" + +Now every time I press on ALT key my game will change between DrawDecals 1 and 0 + +DrawSun, well no need any explanation here however this doesn't really change anything but here is the command if you want to get rid of the sun. + r_DrawSun 0 (again, if you want to get it back just put 1 instead of 0) + +Explosion Distortion, this happens when something explodes in front of you there will be a graphical "distortion" effect, this will be beautiful but you won't see anything behind it and it greatly decrease your fps when it happens so if you want to get rid of it. + r_distortion 1 0 + +The Shadows, ah such a beautiful thing .. the promod doesn't allow it, it gave too much of an advantage so they removed it. DO NOT TRY to activate the shadows in promod as you will hear a terrible sound until you disable it. But if like me you want a beautiful game when you're not in promod we can toggle it. + sm_enable 1 0 bind K "toggle sm_enable 1 0" + +Eject Brass, now that's something useful as it will disable the empty shell of your weapon when you're shooting, It means that you should no longer have fps drops when you're shooting now with it. + cg_Brass 1 0 bind x "toggle cg_Brass 1 0" +I'm sure you want some more !!! there are still so many things.. I don't even know where to start :p +I think now I'll list the MOST useful thing you can change. So here come part 3 ! + +- Others : +THE thing every player HAS to change, the fov (field of view) you just have to try it to see it yourself but I think you really should give it a try if you never did. + cg_fov 65 80 + +And if like me you like to change depending on which map it is or which weapon you have + bind = "toggle cg_fov 65 73 80" + +(Why 73 ? Because :p, you can put up to 8 different numbers i think, means 8 different fov, choose the one that suits you the most) +Ok this one is a bit different because ANY number between 65 and 80 will work, it is as your player's preference. You will see much more things at close range but you'll have less visibility at long range. test it and choose the one you like the most ! Also if you think a fov 8à is not enough you can go even further. The following command can ONLY be applied directly in the cfg with the game not open else it won't work. + cg_fovScale 1.125 (I don't think you can go any further) + bind x "toggle cg_fovScale 1 1.125" (aka default, max) + +Now something really useful, the sensitivity. If like me you find it hard to settle it with the cod4 menu there is a way to fix that. + sensitivity x.xxxx (yeah you can settle it a 0.000000001 if you want, long live to the accuracy) + +If you want to see how many fps you have constantly + cg_drawFPS 1 + +(they should appear in one of the screen corners, we'll see later how to change its place) +Now you got a counter that display your amount of fps. Next is put a limit to them, belive me 90 constant is better than having them up to 130 then down to 100 ( = lag ) + com_maxfps 125 (or 250, the 2 most used numbers) + bind ) "toggle com_maxfps 125 250" + +(yeah you will find some servers that kick you for having too high fps .. However I never got kicked for 125 so when I see there is a limit i just press the key and I'm down to 125) + +Then there is a way to reduce lags, or at least allow more of your bandwidth to go for the game. + snaps 30 (reduce lag) + cl_maxpackets 100 (should already be like this because of the promod) + +To reduce the lags coming from your PC there are some things i never tested myself so I can't tell what will happen I don't think they are not allowed but who knows ... So I'll only write the ones I'm sure won't trouble your game experience, However if someone ask for them I won't refuse. + rate 25000 (This should reduce the effort your computer have to do to handle the game) + +And one last thing, if you want to have an indicator for the flash grenade just like the normal ones here is the line + seta cg_hudGrenadeIconEnabledFlash "1" + +EDIT 1 : Aha I knew I would forgot something, one of the things I use the most ... +If you are pissed of having to press Esp then leave to leave here is some binds that will greatly simplify your life. + bind F9 "disconnect" (this one will bring you back on the server list, really useful) + bind F10 "quit" (this one just shut down the game) + +EDIT 1 : I remember someone asked for my cfg, if you still want it I will share it here no problem =) + +Ok that was the useful and serious part, there were so many things to tell so I won't be surprise if I have forgot something ... I'll update this post if I remember something. +Stay tuned for the FUNNY part !! It will include how to change the teams name (ye you can call the enemy team fags if you want), customize the scoreboard and many others !!! \ No newline at end of file diff --git a/Call of Duty 4/Docs/SP Commands.txt b/Call of Duty 4/Docs/SP Commands.txt new file mode 100755 index 0000000..37d6437 --- /dev/null +++ b/Call of Duty 4/Docs/SP Commands.txt @@ -0,0 +1,42 @@ +Here are some simple single player tips, tricks, and cheats for the Call of Duty 4 single player mode on PC. + +Start up Call of Duty 4 single player, go into your options, and make sure that the console is enabled. + +Press your ~ (tilde) key anytime you want to enter these codes in – you can keep entering them. +First off, type seta thereisacow "1337", this enables most of the cheats. + +In order to pick a level, use spdevmap mapname + +Here are some handy console commands that may help you through the game: + +ufo – you can fly through walls to get places – be careful, this can mess things up a little, and you may get stuck +give – gives you an item. If you type give all, you will get all weapons +god – god mode! +demigod – god mode, but some things still happen like screen shaking and such +notarget – you will be invisible to enemies +give ammo – instant ammo +jump_height – allows you to change the physics in the game – like moon shoes +timescale – let’s you play with time – fast or slow +cg_LaserForceOn – laser sight, baby! + +To insert the following codes, enable the console from the in-game options. Press ~ and type in “seta thereisacow 1337?, pressing Enter thereafter. From here, type “spdevmap bog_a” and press Enter again. Then, you can insert the following cheats. this is how you do it + +* cg_drawgun – Drop your gun +* cg_fov – Zoom with any gun +* cg_LaserForceOn 1 – Laser site with any gun +* demigod – God Mode (with shaking screen) +* give (item) – Acquire any item +* give all – Get any weapon +* give ammo – Full ammo +* god – God Mode (without screen shaking) +* jump_height # – Adjust gravity (39 is default) +* noclip – No Clipping +* notarget – Dumb AI +* r_fullbright – Brighter features +* timescale # – Adjust the time (1.00 is default) +* ufo – No Clipping (II) + +Map Names: +ac130,aftermath,airlift,airplane,ambush,armada,blackout,bog_a,bog_b +,cargoship,coup,hunted,icbm,jeepride,killhouse,launchfacilty_a, +launchfacilty_b,scoutsniper,sniperescape,village_assault,village_defend \ No newline at end of file diff --git a/Call of Duty 4/Docs/Server Guide.html b/Call of Duty 4/Docs/Server Guide.html new file mode 100755 index 0000000..20f05cf --- /dev/null +++ b/Call of Duty 4/Docs/Server Guide.html @@ -0,0 +1,1465 @@ + + + + + + + + + + + +


+(cod4 v1.7 Compliant)
+(updated and revised 7/21/09)

+ +

Dedicated Server Setup and Usage Guide
+This guide assumes you have remote access, FTP, and at least one IP to your Dedicated Server box.

+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Dedicated Server Installation

+
+

Stock ModWarfare Setup

+
+

Server Administration

+
+

Step 1 - Install The Server Files

+
+

Step 1 - The ModWarfare Server Files

+
+

Logging Into Rcon

+
+

Step 2 - Install The Punkbuster Files

+
+

Step 2 - Edit The Startup Command Line

+
+

Custom Desktop Shortcut

+
+

Step 3 - Copy The Game Files

+
+

Custom Mod Setup

+
+

Rcon Commands

+
+

Step 4 - Create The Startup Shortcut

+
+

Step 1 - Get The Mod File Set

+
+

Remote Admin Tools

+
+

Step 5 - The Server Configuration File

+
+

Step 2 - Setup The Server

+
+

Punkbuster Information

+
+

Step 6 - Starting and Joining The Server

+
+

Step 3 - Create the Redirect Download Files

+
+

Anti Cheat Groups

+
+

Remote Start/Stop Tools

+
+

Step 4 - Setup The HTTP Redirect

+
+

General Information

+
+

Multiple Server Installation

+
+

Step 5 - Edit The Startup Command Line

+
+

The Server Files

+
+

Multiple Game File Installs

+
+

Adding Custom Maps

+
+

Checking and Updating

+
+

Single Game File Install

+
+

Step 1 - Create the Server Files

+
+

Additional Features

+
+

Home PC Server Installation

+
+

Step 2 - Create the Redirect Download Files

+
+

Server Messages/Tasks

+
+

Router Requirements

+
+

Step 3 - Testing

+
+

+
+

Determine Server Size

+
+

Cleaning a Map .IWD File

+
+

+
+

Server Setup

+
+

+
+

+
+
+
+
+
+


+

+

Dedicated Server Installation

+ +

+Step 1 - Install The Server Files

+ +

Download this zip file and save it to a temp folder, it contains all the files +for both a dedicated server and a home pc server, you will need it: +cod4_configs +

+ +

Make sure your game install is fully patched and operational, including Punkbuster.
+- Open C:/Program Files/Activision on your pc, and copy/paste the Call of Duty 4 - Modern Warfare folder to C:\ on your hard drive. To +simplify things, rename the copy to cod4. +

+ +

We now need to make sure your using a clean install of the server files, so we will clean everything up next.
+- Open the new cod4 folder and delete anything you don't see here:
+

+

+ +

- Open the "main" folder and delete both the "video" and the "save" folder.
+- Remove anything else in the "main" folder that you don't see here:
+

+- Open the C:\cod4\pb folder and delete everything.
+- Upload the cod4 folder and all of its contents to C:\ on your box.
+It is critical that the naming and file structure remain intact, do not change anything.
+This will take quite a few hours, so time it so it does not interfere with your normal pc usage. +

+ +

+Step 2 - Install The Punkbuster Files

+ +

The next thing to do is get the Punkbuster server files.
+- Login to your box and create a folder on the desktop called "pbsetup".
+- Download pbsetup.exe from Evenbalance to your new pbsetup folder from this link: PBsetup
+- Run pbsetup.exe and click "Add a Game". Choose Call of Duty 4. Then browse to the CoD4 folder you uploaded so that pbsetup knows where your CoD4 server is located.
+- Once you have added your CoD4 server, select/highlight the Call of Duty 4 in the list and click "Check For Updates". This will download a +number of files to your CoD4/pb server directory. +

+ +

You do not have to do anything else at this time, but you will have to add cfg's and cheat detection checks later. +

+ +

+Step 3 - Copy The Game Files

+ +

- Before you do anything else, create a copy of the cod4 folder using copy/paste. You will need this if you plan to run multiple servers or if something goes +fubar on your server you will have a fresh copy of the files. Just copy/paste it anywhere convienient. +

+ +

+Step 4 - Create The Startup Shortcut

+ +

- Login to your box and open the cod4 folder.
+- Right click the iw3mp.exe file and select "Create Shortcut". Drag the new shortcut to the desktop.
+- Right click the new shortcut and select Properties.
+- Find the Target field, you will see "C:\cod4\iw3mp.exe"
+- Add the following to the end of the existing target, do not delete or change any of the existing target! +

+ +

++set dedicated 2 +set net_ip 123.456.7890 +set net_port 28960 +set sv_maxclients 32 +set sv_punkbuster 1 +exec server.cfg +map_rotate +

+ +

+Note: Make sure there is a space between iw3mp.exe" and +set dedicated 2
+Note: Change +set net_ip to your server IP.
+Note: Change sv_maxclients to how many player slots you want.
+Click Apply and OK. +

+ +

Command Line Information
+The command line is what starts your server, it sets the global variables for a server such as the IP and Port.
+There are quite a few parameters you can use but I prefer to use the basics, the rest can be used in the server cfg to make changes much easier.
+This is the startup command line for the above instructions: (Windows Only)
+"C:\cod4\iw3mp.exe" +set dedicated 2 +set net_ip 123.456.789.012 +set net_port 28960 +set sv_maxclients 32 +set sv_punkbuster 1 +exec server.cfg +map_rotate +

+ +

+Step 5 - The Server Configuration File

+ +

You will find that only certain variables can be changed when your server is stock, or in RANKED mode.
+Knowing this, and in combination with the startup command, all you need to run a stock RANKED server, is the server.cfg in the above download. Read the Readme-First.txt, it explains the files.
+Edit it to your needs, don't forget to set your rcon password and put the file in the "C:\cod4\main" folder of your server installation. The folder named main. +

+ +

+Step 6 - Starting and Joining The Server

+ +

Double click the shortcut to start the server.
+If you get a DirectX error, you will need to install the DX9 and DX10 files in the above download. Unzip them and put them in your dedicated server's System32 folder. (C:/Windows/System32)
+Your server should now start if you didnt make any typo's or configuration errors. Wait for 10-15 minutes and +go see if you can find it in the server browser. You may need to refresh a few times.
+If you can't find it, stop the server for approx. 30 minutes and try again.
+You can also use your console to connect, but sometimes it won't work. Once you choose your profile in multiplayer, open your console using the tilde (~) key.
+Type in /connect xxx.xxx.xxx.xxx (your server ip and port) and hit enter. +

+ +

+Remote Start/Stop Tools

+ +

If you have your own box, chances are you need a remote start/stop tool so you don't have to share access to the box. These are my 3 favorites:
+ServerDoc (FREE - Easy install)
+FireDaemon (30 Day Trial - Starts at $39 a Month)
+TCAdmin (Nice GUI - Starts at $15.95 a Month) +

+ +


+

+

Back to Top +

+


+

+ +

Stock ModWarfare Setup

+ +

+Step 1 - The ModWarfare Server Files

+ +

- Open the ModWarfare folder in the download.
+- Choose either the multiple file set or the single file, edit the server.cfg file and set the hostname, and rcon password.
+- Upload the files in the ModWarfare folder to the Mods/ModWarfare folder of your server. Just the files, not the folder itself. +

+ +

+Step 2 - Edit The Startup Command Line

+ +

NOTE: The game does not recognize the capitol "M" for the Mods folder, you must use lowercase "m". +

+ +

ModWarfare is your fs_game mods/mod_folder. Notice the forward slash, and lower-case 'm' in 'mods'.
+In your command line, you will be adding this:
++set fs_game mods/ModWarfare +

+ +

A lower-case 'm' in mods, and a forward slash. +

+ +

The entire command line would look like this:
+"C:\cod4\iw3mp.exe" +set fs_game mods/ModWarfare ++set dedicated 2 +set net_ip +123.456.7890 +set net_port 28960 +set sv_maxclients 32 +set +sv_punkbuster 1 +exec server.cfg +map_rotate +

+ +

Custom Mod Setup

+ +

+Step 1 - Get The Mod File Set

+ +

Note: To better explain this, i will use awe4 (lowercase) as an example. BR> +- Download the awe4 mod from Raiders Game Net and open it.
+- If necessary, create a folder called awe4 and move all the cfg's, mod.ff, and z_awe4.iwd into the new folder. (see below)
+
+

+ +


- Rename mp-server.cfg to server.cfg. Open the server.cfg file and set the hostname, rcon password, and the HTTP Redirect. (see Step 4 below)
+Note: If the server.cfg for the mod has some of the same settings in it as your startup command line, like dedicated 2 or net_ip for example, disable them. You don't need them twice. +

+ +

+Step 2 - Setup The Server

+ +

- With FTP, open the "Mods" folder on your server.
+- Upload the "awe4" folder you created with all the cfg's and mod files to your servers "Mods" directory.
+- You should now have both the "awe4" folder and the "ModWarfare" folder in the same "Mods" directory. Side by side. (see below)
+
+

+ +


+

+ +

+Step 3 - Create the Redirect Download Files

+ +

In order to for players to download the needed mod files or custom maps +you are running, you need a redirect to a webspace to make it work. +

+ +

+

+ +

- Create a folder called "cod4".(most people use cod4, you can use w/e)
+- Open the "cod4" folder and create a folder called "mods".
+- Create another folder called "usermaps", right next to the "mods" folder. If you plan to use custom maps in the future, you will need this folder.
+- Now, copy or drag the "awe4" folder from Step 1 above into the "mods" folder you just created. (see below)
+
+

+ +


+- Delete everything in the awe4 folder except the mod.ff and z_awe4.iwd files. Players need these two files only, the rest is serverside.
+- Upload the "cod4" folder and its contents to your websites Root directory (html folder or public_html folder, depending on your sites setup), keeping the file structure intact. +

+ +

NOTE:You should be able to put the url in your browser (http://www.yourwebsite.com/cod4) and see the contents of the cod4 +folder, the "mods" and "usermaps" folders.
+If you can't view the files, you either installed the cod4 folder in the wrong place, or you have a permissions problem. Discuss permissions with your webhost if need be. +

+ +

+Step 4 - Setup The HTTP Redirect Download

+ +

All you need to do now is tell the server where the "cod4" folder is, the server will do the rest from there.
+- In the server.cfg file, scroll down to the HTTP Redirect Download section.
+- Find and change this line to the website address of the "cod4" folder you created: seta sv_wwwBaseURL "http://www.yourwebsite.com/base_directory"
+- The server will look for a folder called " cod4" at the url you specify, so for example, make the url to the download look like this:
+seta sv_wwwBaseURL "http://www.yourwebsite.com/cod4". +It is always one directory above the "usermaps" or "mods" folders and NO trailing slash. +

+ +

EXAMPLE
+set sv_allowdownload "1"
+seta sv_wwwDownload "1"
+seta sv_wwwBaseURL "http://www.yourwebsite.com/cod4"
+seta sv_wwwDlDisconnected "0" (IMPORTANT: Set this to "0") +

+ +

+Step 5 - Edit The Startup Command Line

+ +

NOTE: +The game does not recognize the capitol "M" for the Mods folder, you must use lowercase "m". +

+ +

awe4 is your fs_game mods/mod_folder. Notice the forward slash, and lower-case 'm' in 'mods'
+In your command line, you will be adding this:
++set fs_game mods/awe4 +

+ +

A lower-case 'm' in mods, and a forward slash. +

+ +

Finally, you need to change the command line to activate the awe4 mod:
++set fs_game mods/awe4 +set dedicated 2 +set net_ip 123.456.7890 +set net_port 28960 +set +sv_maxclients 32 +set sv_punkbuster 1 +exec server.cfg +map_rotate
+Thats it! Just start your server.
+

+ +

Adding Custom Maps

+ +

You MUST have either ModWarfare or a custom mod like awe4 running to use custom maps. +

+ +

IMPORTANT:
+- Since the 1.5 patch, you no longer need to put a map .iwd file in the Mods/your_mod directory. All map files belong in their own folder, the mp_mapname directory, so don't move them even if the +readme that comes with the map tells you to. +

+ +

For custom maps to download to players, you have to have the files in two places at the same time. One +set on the server, and one set on a website or file server of some sort.
+Otherwise, the server will try to download the files to the player so slow that it can disconnect or timeout. +

+ +

+Step 1 - Create the Server Files

+ +

You may already have some of the folders mentioned in this part from creating/installing a mod, so adjust where necessary. +

+ +

For this guide we will use a map called "mp_balarda" as an example.
+- Make a new folder called "usermaps".
+- Open the "usermaps" folder and create a new folder naming it exactly the same as the map, in this case the folder would be called "mp_balarda".
+- Unzip the map file and put the mp_balarda.ff, mp_balarda.iwd, and mp_balarda_load.ff files into the "mp_balarda" folder you created.
+Remember, all files of every custom map go into its own folder.
+
+

+ +


+- Log into your server with FTP, and upload the "usermaps" folder and its contents right next to the other folders such as main, miles, Mods, pb and so on.
+
+

+ +


+

+ +

+Step 2 - Create the Redirect Download Files

+ +

+- Open the "cod4" folder on your webspace or redirect site that you created earlier.
+- Upload the "usermaps" folder to the "cod4" folder, right next to the "mods" folder you created earlier.
+

+

+ +

- Add the map to your mapstring on the server and +restart. (Remember, we're using ModWarfare or a custom mod, so edit the right cfg files)
+As long as you have the file structures correct and in the correct places, and your Redirect setup properly, all should work as designed. +

+ +

Step 3 - Testing

+ +

To test, jump on your server, you should get the downloads as you join. If the speed drops to around 12-20KB/sec, your redirect is not working. Double check your +setup.
+Login with the admin password, and issue the map command /rcon map mp_balarda
+Add the map to your map rotation. ex. "gametype war map mp_balarda" +

+ +

+Cleaning a Map .IWD File

+ +

This is old info and is rarely needed anymore, but i left it here just in case. +

+ +

Many maps have what is referred to as a 'dirty' .iwd file. These can be older maps or maps not compiled correctly and contain unnecessary files +that can cause many errors including download looping, map rotation errors, and a few others. +

+ +

These maps can be fixed quite easily and is effective 95% of the time.
+You will need winrar to edit or 'clean' the files. The newest trial version is available here. +

+ +

- Install winrar
+- Double click the map .iwd file, choose 'Select a program from a list' and select Winrar.
+- Uncheck the box next to 'Always use the selected program to open this kind of file' (a safety precaution) and click ok.
+- Delete everything except the 'images' folder and the 'sounds folder if it exists.
+- Only a few maps will have fx scripts folders. +

+ +

'Dirty' Example
+
+

+ +


+- Browse the contents of the images folder and make sure that there are only .iwi files, period, nothing else.
+- If there is a readme anywhere else in the .iwd, delete it. +

+ +

'Clean' Example
+
+


+ +

- Use winrar to repack the files, naming it exactly as it was before you opened it, but, make sure you choose ZIP under the Archive +Format section.

+ +


+

+

Back to Top +

+


+

+ +

Multiple +Server Installation

+ +

+Option 1 - Multiple Game File Installs

+ +

This option requires that you copy/paste the game install as many times as needed.
+- Using the install guide, install a server and get it totally functional, including punkbuster. Join the server and make sure screenshots, logfiles, everything is working.
+Once everything is verified to be working, stop the server.
+- Open C: on your box, and create a folder called "servers", or "cod4servers", w/e you want, but i'll use "servers".
+- Copy/paste the working server folder into the "servers" folder and name it cod41, repeat naming the next one cod42, then cod43, you get the idea. +

+ +

This is a good time to decide a permanent naming convention for eachs erver folder, trust me, down the road you'll be glad you did.
+One way is have different size servers and name them that way, cod420, cod424, cod432, etc. Or, you can name them by gametype, tdm, hardcore, koth. +So think about it for a minute, then name them. +

+ +

- Create the desktop shortcuts next, naming them the same as each server, so you can tell them apart.
+- Edit the Target fields of the shortcuts, setting the command line, assigning ip's, ports, and so on.
+- Edit your server cfgs for each server, check/edit your PB cfg's as well.
+If you have multiple IP's on your box, use one for each server. If you have only one IP, just use different port numbers. E.G. 28960, 28961, 28962 etc etc. +

+ +

+Option 2 - Single Game File Install

+ +

This option uses one game file install, with custom command line settings and individual server file sets.
+- Using the install guide, install a server and get it totally functional, including punkbuster. Join the server and make sure screenshots, logfiles, everything is working.
+Once everythings verified, stop the server. You should have a working server at C:\cod4
+- On your box, open C: and create a folder called "servers".
+- Open the "servers" folder, create 3 server folder sets, cod41, cod42, cod43, each one containing a "main" folder, a "pb" folder, and a +"mods" folder.
+- Open the "mods" folder and create a folder called "modwarfare". +

+ +

Folder - cod41
+-main
+-pb
+-mods
+-mods/modwarfare +

+ +

- Add a server.cfg to each 'main' folder and PB cfg's to each PBfolder.
+- Open the cod4 folder and create 3 shortcuts to iw3mp.exe (Step 4 of install guide), rename them to reflect each server, and drag them to the desktop.
+- Using Step 4 of the install guide as a reference, change the Target line for cod41 to this:
+C:\cod4\iw3mp.exe +set fs_homepath "C:/servers/cod41" +set fs_basepath "C:/cod4" +set dedicated 2 +set net_ip 123.456.789.012 +set net_port 28960 +set sv_maxclients 32 +set +sv_punkbuster 1 +exec server.cfg +map_rotate +

+ +

fs_homepath = Your individual server folders you created. (C:\servers\cod41, cod42, etc)
+fs_basepath = Your cod4 game files install. (C:\cod4) +

+ +

Repeat for the other two shortcuts.
+Each server will load all files on basepath, and then load all files on homepath. Each server will generate its own logfiles, screenshots etc. +

+ +

Installing Mods and Game Patches
+- Mods are installed on your servers like normal ( C:\servers\cod41\Mods\your_mod ), but you MUST install the same mod on the game file install ( C:\cod4\Mods\your_mod) for them to work.
+This was either missed by the devs or is a bug. (May be fixed now)
+- Patches for the game and punkbuster will have to be applied manually to the game files install.( C:\cod4 ) +

+ +


+

+

Back to Top

+


+

+ +

Home PC Server Installation

+ +

+Router Requirements

+ +

Due to hundreds of different router configurations, there's no real way to guide you in the setup. +However, what I can do is give you a quick overview of what you need to do, and point you in the right direction for the information you will need. +

+ +

What you will need to do is create a new IP, or called a static IP, in your router, and then point the proper game ports to that IP. +You might even try placing that IP in the DMZ zone of your router as well.
+Players will connect to your server using your EXTERNAL IP, the one supplied to you by your internet service provider, while you will connect to the server using the Local option of the ingame +browser.
To begin, go to this link HERE and find your router or a close model. +On the next page look for Call of Duty 4, the procedure will be explained from there. +

+ +

- You will need to allow the following ports:
+UDP 20800
+UDP 20810
+UDP 28960 +

+ +

Additional Resources
+http://www.olddogvt.net/cod-firewall
+http://www.portforward.com +

+ +

+Determine Server Size

+ +

- Before you put your server online, you should try to determine how many players your server will support with minimal lag and max performance.
+Rudedog of FPSadmin.com has posted this formula that works quite well in determining server max rate and max players:
+http://www.fpsadmin.com/forum/showthread.php?t=9016 +

+ +

+Server Setup

+ +

- Copy your Call of Duty 4 - Modern Warfare folder and paste it into "C". Rename it to +"cod4server". The path will be "C:\cod4server"
+The reason for this is simple, using your game install as the server, which you can, is a bad idea. If you need to reinstall your game for some reason, you'll loose your server setup.
+- If you don't know your IP, you can get it at www.whatismyip.com, write it down of course.
+- The download you retrieved earlier has server configs for both a Stock Ranked server and a set for ModWarfare, in the homepc-server folder.
+- Open the server.cfg and set your rcon password and hostname, and save.
+- Put the server.cfg in your "C:\cod4server\main" folder. The folder named main.
+- Create a shortcut to iw3mp.exe and name it cod4server or w/e so you know what it is, and move it to your desktop.
+- Right click the shortcut and choose "Properties.
+- Edit the "Target" line so it looks like this, click "Ok" and close the properties: +

+ +

C:\cod4server\iw3mp.exe +set dedicated 2 + set net_ip 123.456.789 +set net_port 28960 +set sv_punkbuster 1 +set sv_maxclients 8 +exec server.cfg +map_rotate +

+ +

+Note: Make sure there is a space between iw3mp.exe and +set dedicated 2
+Note: Change +set net_ip to your EXTERNAL IP.
+Note: Change sv_maxclients to how many player slots you want.
+Note: Make sure both cod4server and iw3mp.exe are allowed in the Windows Firewall, under the "Exceptions" tab usually.
+If you use a Norton or McAffee type software firewall, you will need to allow the same in their respective exceptions as well.
+(NOTE: Sometimes you just have to turn all the firewalls off, so be prepared to do so. +

+ +

- Your server should now start by using the shortcut you created.
+

+ +

Back to Top +

+ +


+

+ +

Server Administration

+ +

+Logging Into Rcon

+ +

The rcon password is set in the server.cfg file, you must first login to rcon on the server before you can issue admin commands.
+Join your server and open the console with the tilde key (~).
+Type in '/rcon login yourpassword' (without the quotes) and replace yourpassword with the password you set in the server.cfg, and hit Enter.
+Note: Always use, and never forget, the forward slash "/" when logging in or issuing commands, you will broadcast your rcon password to the other players on the server.
+Note: To expand console to full screen, hold down Shift and hit the tilde (~) key. +

+ +

+Custom Desktop Shortcut

+ +

This creates a custom shortcut directly to your server, gives you rcon, and puts you in a private slot if you have that configured in your server.cfg. +

+ +

Right click your MP desktop shortcut and choose Copy.
Right click your desktop and choose Paste.
+Right click your new shortcut and choose Rename.
+Rename it to w/e you want it to be called.
+Right click the shortcut and choose Properties.
+In the Target field you will see this:
+"C:\Program Files\Activision\Call of Duty 4 - Modern Warfare\iw3mp.exe"
+At the very end, after the quote mark, click there so you have a blinking cursor, then hit space one time. +

+ +

Copy this and paste it in:
++rcon login ***** +password ***** +connect xxx.xxx.xxx.xxx:28960" +

+ +

It should look like this when done:
+"C:\Program Files\Activision\Call of Duty 4 - Modern Warfare\iw3mp.exe" +rcon login ***** +password ***** +connect xxx.xxx.xxxx:28960" +

+ +

Note: Replace the *****'s with your passwords for rcon and private slot. Replace the x's with your server IP.
+Note: This will take you right into the server with the last profile you selected in multiplayer.
+Note: Also note that you can edit in the IP and Port and share this as is, the rcon and password settings will be ignored. +

+ +


+

+ +

Rcon Commands

+ +

Commonly Used Commands +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Task

+
+

Usage

+
+

Example

+
+

Description

+
+

Logging in to rcon +

+
+

/rcon login password

+
+

/rcon login superdude

+
+

Gives player + administrative rights on server. +

+
+

Display Server + Information

+
+

/rcon serverinfo

+
+

/rcon serverinfo

+
+

Shows the current + server settings.

+
+

Display System + Information

+
+

/rcon systeminfo

+
+

/rcon systeminfo

+
+

Shows the current + System Information.

+
+

Display Player + Information

+
+

/rcon status

+
+

/rcon status

+
+

Displays info for all + players on the server.

+
+

Change a Map

+
+

/rcon map map_name

+
+

/ron map mp_crash

+
+

Loads the map + specified by mapname.

+
+

Rotate to Next Map

+
+

/rcon map_rotate

+
+

/rcon map_rotate

+
+

Loads next map in + rotation.

+
+

Reload a Map

+
+

/rcon map_restart

+
+

/rcon map_restart

+
+

Restarts round. Any + gametype and round limit setting changes will take effect. +

+
+

Fast Restart a Map

+
+

/rcon fast_restart

+
+

/rcon fast_restart

+
+

Restarts the current + map.

+
+

Execute a Config

+
+

/rcon exec + filename.cfg

+
+

/rcon exec rifles.cfg

+
+

Executes a Server + Config File
(located in your server's main directory)

+
+ +


+

+ +

Other +Commonly Used Commands +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Task

+
+

Usage

+
+

Example

+
+

Description

+
+

Change + Gametype

+
+

/rcon + g_gametype type

+
+

/rcon + g_gametype koth

+
+

Sets + gametype. Requires a map restart to take effect.

+
+

Auto + Team Balancing

+
+

/rcon + scr_teambalance [0-1]

+
+

/rcon + scr_teambalance 1

+
+

Force + team balance off (0), on (1) +

+
+

Friendly + Fire

+
+

/rcon + scr_team_fftype [0-3]

+
+

/rcon + scr_team_fftype 1

+
+

FF off + (0), on (1), reflect (2), shared (3) +

+
+

Spectate + Type

+
+

/rcon + scr_game_spectatetype [0-2]

+
+

/rcon + scr_game_spectatetype 2

+
+

Disabled + (0), Team/Players Only (1), Free (2)

+
+

Kill + Camera

+
+

/rcon + scr_game_allowkillcam [0-1]

+
+

/rcon + scr_game_allowkillcam 1

+
+

Force + killcam off (0), on (1)

+
+

Private + Chat to Player

+
+

/rcon + tell [client #] [message] +

+
+

/rcon + tell 3 Hello Player

+
+

Sends + private message to a player.

+
+

Chat Via + Console

+
+

/rcon + say [message]

+
+

/rcon + say Hello Player

+
+

Messages + are shown in game preceded by console: +

+
+ +


+

+ +

Kick and Ban Commands +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Task

+
+

Usage

+
+

Example

+
+

Description

+
+

Kick a + Player by ID

+
+

/rcon + clientkick [ID]

+
+

/rcon + clientkick 3

+
+

Kick + player from server by client number. +

+
+

Kick a + Player by Name

+
+

/rcon + onlykick [Name]

+
+

/rcon + kick Playername

+
+

Kick + player by name from the server. +

+
+

Kick a + Player by Colored Name

+
+

/rcon + kick [Name]

+
+

/rcon + kick ^1Playername

+
+

Kick + player by colored name from the server.
(Must include + Color Codes)

+
+

Kick All Players

+
+

/rcon kick all +

+
+

/rcon kick all

+
+

Kicks all players + from server.

+
+

Kick All Players

+
+

/rcon onlykick all +

+
+

/rcon onlykick all

+
+

Kicks all players + from server.

+
+

Ban a Player by ID

+
+

/rcon banClient [ID]

+
+

/rcon banClient 3

+
+

Bans a user by their + client number.
Writes their GUID to ban.txt

+
+

Ban a Player by Name

+
+

/rcon banUser [Name]

+
+

/rcon banUser + playername

+
+

Bans a user by their + ingame name.
Writes their GUID to ban.txt

+
+

Temp Ban a Player by + ID

+
+

/rcon tempBanClient + [ID]

+
+

/rcon tempBanClient 3

+
+

Kicks and temp bans + player by client id from server. +

+
+

Temp Ban a Player by + Name

+
+

/rcon tempBanUser + [Name]

+
+

/rcon tempBanUser + playername

+
+

Kicks and temporarily + bans player by name from server.

+
+ +



+

+ +

+Remote Admin Tools

+ +

CoD4 does not have an ingame admin function other than rcon commands. Between these tools and the PB Webtool, you can perform any needed functions.
+To use these tools or PB Webtool, you must minimize your game screen or run them from another pc on a home network. +

+ +

Rcon Commander
+Rcon Max
+Modern Rcon
+Half-Life Server Watch
+Tatakai Server Scan +

+ +


+

+ +

Back to Top

+


+

+ +

Punkbuster Information

+ +

Cheat detection for Punkbuster is accomplished by the use of cvar and md5 checks that you must add to your server.
+You can get these from anti-cheat groups on the internet and some are listed in this document.
+You need to join these groups and meet their requirements to gain access to the "private" checks they have to offer.
+I suggest you join PBBans immediately, you can stream your logs to multiple Anti Cheat groups automatically, as well as have live banning to your server.
+

+ +

Anti Cheat Groups

+ +

ACI
+PBBans
+Punksbusted
+Evenbalance +(PunkBuster) +

+ +

+General Information

+ +

Note: Not all Punkbuster functions work from game to game, so this info is somewhat generic. +

+ +

These are links to the Evenbalance CoD4 sections.
+Reference: Punkbuster for Admins
+Reference: Punkbuster for Players +

+ +

This is a link to the Punksbusted's PB Wiki.
+Reference: PsB Wiki +

+ +

This is a brief description of the files included in the download:
+pbsv.cfg
+This file is Punkbusters's server cfg file. It contains all the basic settings for your server, including the commands to execute additional cfg files.
+pbsvuser.cfg
+This file is used to load all the anti-cheat checks.
+pbsvlog.cfg
+This file contains the streaming info to stream your server toboth Punksbusted and PBbans.
+pbbans.dat
+This is the PB banlist. It is currently empty.
+pbucon.use
+This file is from the live banning feature of Punkbuster. It is needed by PBbans. +

+ +

+

+ +

The Server Files

+ +

The download at the beginning of this doc has all the pb files mentioned above.
+Open pbsv.cfg with Notepad and scroll to the section called PB WEBTOOL SETTINGS.
+Edit the HttpAddr with your server ip. Just the ip, no port number. It is set at 9025.
+Edit the HttpKey line, this is your Webtool access password, use a good password, security is everything!!
+Upload all the files from the zip to your servers 'pb' folder.
+Restart your server. +

+ +

Checking and Updating PB

+ +

You should now be able to go to your Punkbuster Server Webtool. The url would be like this: +http://xxx.xxx.xxx:9025
+The x's are your server IP, and 9025 is the port number set in the pbsv.cfg. If you get a error, double check the url you typed in, double check the pbsv.cfg, and if +you still get an error contact your game server provider, perhaps they only allow certain ports for PB.
+Remember that if you find an error and change something, you have to restart your server and check the url again. +

+ +

Assuming you can see your Webtool, look at the bottom of the page for the version number of PB running on your server. It should look like this: v1.740 v2.200 | A1407.
+The number on the left is the server version that is running, the number on the right is the required client version number.
+Go to Evenbalance and look at the Call of Duty 4 listing to see if yours is current, if not, go back to your Webtool.
+Put your password into the Webkey field and click the "Command Screen" button.
+Next, click the "pb_sv_update" button. In about 10-15 minutes, come back to the webtool, login, and click the "pb_sv_restart" button.
+Check your version number again in a few minutes, you should be good to go.
+Note: DO NOT click the "pb_sv_writecfg" button, it will wipe out your pbsv.cfg file. +

+ +

Other Update Methods
+The cfg's in the zip file above have the update command in them, under normal circumstances the server will update itself.
+- You can use pbsetup if you installed it on your box, just remember to check the PB server version number afterwards, i have had it update to the old version before.
+- You can login with rcon and execute the command /rcon pb_sv_update. A few minutes later, you need to issue the command /rcon pb_sv_restart.
+- You can get the server update file from Evenbalance, upload it to your servers pb folder and restart the server, the file is located on this page +here.
+- Some server providers provide a PB Update link in their gamepanels. +

+ +

+

+ +

+Additional Features

+ +

There are many features to PB, they are in the pbsv.cfg in the download. Again, not all functions work from game to game.
+Note: The brackets >[]< are not used! +

+ +

pb_sv__BadName +[grace_seconds] [name-or-text]
+EXAMPLE - pb_sv_badname 0 www.
+Adds a bad name to the server to disallow, such as player names, or even a clan tag. +

+ +

pb_sv_NameLock [GUID or partial match] [Name to Lock]
+EXAMPLE - pb_sv_NameLock 1234567890qwertyuiop "theMechanic"
+This locks a GUID to a name, anyone that trys to use that name and does not match the GUID, will be kicked from the server.
+NameLocks are not stored to disk automatically so Admins should add these to the pbsv.cfg file in order to have NameLocks extend to future server sessions. +

+ +

pb_sv_powerguid [GUID] [Powerpoints] [Name]
+EXAMPLE - pb_sv_powerguid 1234567890qwertyuiop 99 theMechanic
+PB Player Power works with PBrcon to give server admins the abiltiy to have "deputy admins" by assigning point levels and commands to each admin.
+This way your server can be patroled by trusted players without giving out the actual rcon password to the server.
+In my example above, i have 99 power points. In reality, you should only use 99 points as your top level because if someone with 100 points joins the server, it will disable everyones power but theirs.
+The following is an example of 3 power levels and a list of some of the commands you can set: +

+ +

The example levels are as follows:
+Basic - 25 Points - Kick/Screenshots
+Intermediate - 50 Points - Kick/Screenshots/Say/Ban/Badname
+Advanced - 99 Points - All PB Commands +

+ +

All commands are done thru console, and most commands are preceded with /pb_rcon. +

+ +

So, say you want to kick a player for using bad language.
+Open console and type in pb_plist and hit enter.
+This will list the players, and next to each one is their slot number, the player you want to kick is in slot #3.
+Enter the command like this- /pb_rcon pb_sv_COMMANDHERE PLAYERSLOT# VARIABLE
+So you would issue this command: /pb_rcon pb_sv_kick 3 10 language
+This would kick player in slot #3 for 10 minutes for language. +

+ +

Each command has some different variables required, heres the shortlist explanation: +

+ +

Command: pb_plist - This will display the players, their slot number, and at least the last 8 digits of their guid.
+Usage: pb_plist +

+ +

Command: pb_sv_badname [grace_seconds] [name-or-text] - This can be used for people with foul language in their names, or to permanently ban a clan by using their +tag.
+Usage: /pb_rcon pb_sv_badname 0 name-or-text +

+ +

Command: pb_sv_ban [name or slot #] [displayed_reason] [optional_private_reason] - Bans the player and displays the reason banned to to public.
+Usage: /pb_rcon pb_sv_ban slot# reason +

+ +

Command: pb_sv_getss [player_name_or_slot#] - This will get a screenshot of a player and put it in your CoD4/pb/scrnshot folder in YOUR game install.
+Usage: /pb_rcon pb_sv_getss slot# +

+ +

Command: pb_sv_kick [name or slot #] [minutes] [displayed_reason] - This will kick a player for a +specified amount of time and display the reason to the public, see example above.
+Usage: /pb_rcon pb_sv_kick slot# minutes reason +

+ +

Command: pb_sv_rlist - This will display all available pbRcon commands loaded onto the server.
+Usage: /pb_rcon pb_sv_rlist +

+ +

This is the current list of commands set in the pbsv.cfg for PBrcon and the points required for access:
+pb_sv_rcon 99 pb_sv
+pb_sv_rcon 50 pb_sv_ban
+pb_sv_rcon 50 pb_sv_badname
+pb_sv_rcon 50 pb_sv_say
+pb_sv_rcon 25 pb_sv_map
+pb_sv_rcon 25 pb_sv_mute
+pb_sv_rcon 25 pb_sv_kick
+pb_sv_rcon 25 pb_sv_getss +

+ +

+

+ +

Server Messages/Tasks

+ +

pb_sv__Task [X] [Y] [command]
+Adds a task to PB's Task List; The Task will be executed X seconds after entry and every Y seconds thereafter; use -1 for Y if a one-time task is desired; this can be used to execute game +server commands, PB commands, and messages. +

+ +

For messages, what this means is the message will load X seconds after PB starts, and repeat every Y seconds.
+This is the example message command in the pbsv.cfg. 90 is X , 400 is Y, say is the command, and the message is Welcome to our server, enjoy and have fun!
+pb_sv_task 90 400 say Welcome to our server,enjoy and have fun! +

+ +

+

+ +

Back to Top

+ + \ No newline at end of file diff --git a/Call of Duty 4/Docs/Setting Up CoDJumper Mod.txt b/Call of Duty 4/Docs/Setting Up CoDJumper Mod.txt new file mode 100755 index 0000000..43073eb --- /dev/null +++ b/Call of Duty 4/Docs/Setting Up CoDJumper Mod.txt @@ -0,0 +1,109 @@ +Setting up the CoDJumper mod for a public game server: + +-------------------------------------------------- + +CoD4 + +1) Download the file from http://www.codjumper.com/mods.php (direct link) and extract it. +2) Create a new folder named "codjumperv3_1" in the "Mods" folder on your server (if one doesn't exist, create it). +3) Upload the two files named "mod.ff" & "z_cod4jumper.iwd" (found in your recently extracted folder) into the newly created folder named "codjumperv3_1". If you wish to use the official CoDJumper.com skins then you can download the .iwd file here (place it in the same folder as the other two files). +4) Download our template server config file here. Edit it accordingly and place it in the "main" directory on your server. You may also want to rename the file to something more appropriate (see red text below regarding this). +5) Next you must edit the command line for the server. This is where it gets slightly complicated - how you do this depends on what company you have bought your game server from. I will continue the instructions based on the control panel provided by LowPings.net: +A) Select your game server, and then click "Command Line Changer". +B) Click on the "New" link. +C) In the "Command Line Name" box, enter "codjumperv3_1". +D) Tick the "+set fs_game" checkbox and enter "mods/codjumperv3_1" into the textbox. +E) Tick the "+set sv_punkbuster " checkbox and enter "1" into the textbox. +F) Tick the "+exec" checkbox and enter the name of your server config, e.g. "7897987server.cfg" (it's recommended that you don't use a predictable config name such as server.cfg due to an exploit where people can download your server config and consequently get your RCON password.) +G) Click "Save", and then on the Command Line Changer list page, click "Select" next to your new codjumperv3_1 entry. +6) Restart your server, it should be running successfully now! + +-------------------------------------------------- + +GUID admin on a CoD4 server + +If you wish to auto-promote certain people when they join your server, then follow these simple instuctions: + +1) Add the following lines to your server config (or if they are already in your config, edit accordingly): +set cj_autoadmin "1" +set cj_adminguids "" +2) Insert the GUIDs and player names of the people whom you want to promote. The format should be as follows: +set cj_adminguids "guid1,name1,guid2,name2,guid3,name3" +3) You can have as many people as possible in it. You must make sure that it is the FULL GUID (32 characters), and there must be no spaces before/after the commas. +4) Once you've set it up, people who are in the list should get automatically promoted if they're using the name specified in the config. + +Here is an example of how it should be used (I've changed the GUIDs from their original values): +set cj_adminguids "adfe897a00c6633abbb95b9b12624d8a,Peds@CoDJumper,874e8bbcb0df78a1059ad8d2bcae97e7,KS@CoDJumper, +2f4eb471b44eeb2bb42fda57aadc423b,Svt@CoDJumper,02d326c7317bb3cda97685a690cf3340,Drof@CoDJumper" + +GUID admins have the ability to promote/demote other plays in the game server, and have access to the CoDJumper mod admin panel, so only add people to your GUID admin list whom you trust! Note that you can't auto-promote people to VIP rank, that must be done manually each time they join. If you get the message "GUID admin detected" then it means that you have the correct GUID, but your name isn't as listed in the config. Also, make sure you use the GUID it provides when you do "/rcon status", NOT the "/pb_myguid" GUID. + +-------------------------------------------------- + + + + + +-------------------------------------------------- + +Setting up the CoDJumper mod for local play: + +-------------------------------------------------- + +Please note that the tutorials below only apply to running the CoDJumper mod on your computer, not for hosting a server which runs the CoDJumper mod. This is particularly important for CoD2, where there are different mods available depending on whether or not you wish to host a server or play on your own "Listen server". + +Credit goes to Damselflies for the CoD:WaW guide (which I have modified and formatted). The direct links may change over time (particularly for CoD4 and CoD:WaW), and so are only there as provisional links (the mods.php link isn't likely to change, but the filename of the mod archives themselves may change). + +The simplest way of downloading and installing the mod correctly is to join one of our servers with "Allow Downloading" in Multiplayer Options set to "On". +This must be emphasised! If you don't want to go through the hassle of manually downloading the files, extracting them and placing them in folders, then simply download them automatically off our servers. Once you've done that, all you have to do is make sure you load the mod and play in the correct gametype. +* The above does not apply to CoD. + +-------------------------------------------------- + +CoD:WaW + +1) Download the file from http://www.codjumper.com/mods.php (direct link) and extract it. +2) Create a new folder named "mp_codjumper" in "C:\Documents and Settings\Owner\Local Settings\Application Data\Activision\CoDWaW\mods". +(Vista may be something along the lines of "C:\Users\\AppData\Local\Activision\CoDWaW\Mods".) +Note: make sure "Show hidden files" is enabled, if not, simply follow those 4 easy steps: +A) Click "Tools" ("Organize" in Vista). +B) Click "Folder options" ("Folder and Search Options" in Vista). +C) Click "Display" ("View" in Vista). +D) Check "Show hidden files and folders". +3) Copy the two files named "mod.ff" & "mp_codjumper.iwd" (found in your recently extracted folder) into the newly created folder named "mp_codjumper". +4) Start the game, click Mods, select "mp_codjumper" and click "Launch mod". Once done, you can load a map in console with "/map mp_shrine", but make sure you run the map in the deathmatch gametype by using "/g_gametype dm" before you load a map (the mod only works in DM). Alternatively, you can run a map through the "Start a new server" menu. + + +CoD4 + +It is highly recommended to have the latest patch installed (1.7 at time of writing). + +1) Download the file from http://www.codjumper.com/mods.php (direct link) and extract it. +2) Create a new folder named "codjumperv3_1" in "C:\Program Files\Activision\Call of Duty 4 - Modern Warfare\Mods". +3) Copy the two files named "mod.ff" & "z_cod4jumper.iwd" (found in your recently extracted folder) into the newly created folder named "codjumperv3_1". +4) Start the game, click Mods, select "codjumperv3_1" and click "Launch mod". Once done, you can load a map in console with "/map mp_carentan", but make sure you run the map in the codjumper gametype by using "/g_gametype cj" before you load a map. Alternatively, you can run a map through the "Start a new server" menu. + + +CoD2 + +1) Download "SPM - Save Position Mod v.1" from http://www.codjumper.com/mods.php (direct link) and extract it. +2) Copy the file named "zzz_Save_position_mod_V1.0.iwd" (found in your recently extracted folder) into "C:\Program Files\Activision\Call of Duty 2\main". +3a) Start the game, open console, type: /seta scr_saveposition 1, or: +3b) Open "config_mp.cfg" in "C:\Program Files\Activision\Call of Duty 2\main\players\", and add the following at the very bottom on a separate line: seta scr_saveposition "1" +4) Start the game. Load a map in console with "/map mp_carentan", but make sure you run the map in the deathmatch or team deathmatch gametype by using "/g_gametype codjumper", "/g_gametype dm" or "/g_gametype tdm" before you load a map (the mod only works in 'codjumper', DM or TDM). Alternatively, you can run a map through the "Start a new server" menu. + + +CoD:UO + +United Offensive is an expansion pack, and as such the CoD mod works for it (see below for instructions). + + +CoD + +1) Download "AKK - Auto Kick Killer v1.5" from http://www.codjumper.com/mods.php (direct link) but do not extract it - although it may look like a .zip file, it is actually a .pk3 and should remain as it is. +2) Move the file named "zzz_AKK_v1.55.pk3" (which you just downloaded) into "C:\Program Files\Activision\Call of Duty\Main". +3) Start the game. Load a map in console with "/map mp_carentan", but make sure you run the map in the deathmatch or team deathmatch gametype by using "/g_gametype dm" or "/g_gametype tdm" before you load a map (the mod only works in DM or TDM). Alternatively, you can run a map through the "Start a new server" menu. + +If you find that for some reason it does not work, also try: +4) Open "config_mp.cfg" (located in the same 'Main' directory as the file you just moved), and add the following at the very bottom on a separate line: seta scr_saveposition "1" +5) Follow step 3 above. \ No newline at end of file diff --git a/Call of Duty 4/Docs/Understanding Lag And Lagometer.htm b/Call of Duty 4/Docs/Understanding Lag And Lagometer.htm new file mode 100755 index 0000000..4852c96 --- /dev/null +++ b/Call of Duty 4/Docs/Understanding Lag And Lagometer.htm @@ -0,0 +1,114 @@ + + + + + + +Understanding lag and lagometer + + + +Technical Questions - Understanding lag and lagometer +

+What is LAG, how to use the lagometer? +

+The lagometer is a tool provided to diagnose the condition of your connection, and to let you know when things are proceeding normally and when they are not. The following is a brief explanation in text and pictures of what the lagometer does and what it indicates. +

+First, you need to turn it on. In the console, type: +

+cg_lagometer 1 +

+When you close the console, you should see this: +

+Image +

+This is a one-quarter-size shot of my screen at 1024 x 768. The inset is the lagometer rendered full-size as it appears to me in-game. +

+"Very nice," you say, "but what the heck am I looking at, and what does it mean?" +

+Glad you asked! The lagometer is a graphical representation of the interaction between the server and your "client," which is the game running on your computer. +

+The server "serves" data representing the "gamestate" (the "world" that the server is simulating mathematically) by sending it to all clients (every player connected to the server) simultaneously 20 times per second (every 50 milliseconds). These "snapshots" (as they are officially known) are then "rendered" by your client and its video system to display the part of the gameworld and its events which are visible to you from your gameworld viewpoint. +

+Of course, despite the fact that every client gets a gamestate snapshot for the entire gameworld 20 times a second, your client only needs to render the part of the world it can logically "see." The other data is there, but not rendered (except in the case of cheating, which is why it is possible to "see through walls," etc. with cheats.) +

+But if the snapshots are coming in only 20 times a second, and your client is rendering many more frames per second (typically about 80, or 4 times the snapshot rate), where does the information for the extra frames come from? Clearly, the client is not rendering each snapshot 4 times, since that would make a very choppy "slideshow" kind of presentation. Instead, each client calculates and "interpolates" its own data between the "real" data contained in successive snapshots, and renders these "interpolated" frames so you get a smooth animation of moving objects (primarily other players) in the game. +

+This system works out pretty well, since it is reasonable to assume that if a player is moving due north in 2 successive snapshots that his position will follow a smooth linear progression in the interpolated frames. +

+When you look at the lagometer display, you see that it is divided horizontally by a dashed white line, like the one painted on a highway where it is okay to pass. This is the divider between the upper "your client's rendered frames" area, and the lower "snapshots your client got from the server" area. (comment by BoonDock: this devider is not exisiting in ET!) +

+The display above the white lines advances one pixel for every frame your client renders. The lower display advances one pixel for each snapshot that your client receives. This is why the upper display always moves faster than the lower one. +

+Below is a series of lagometer screenshots from my client connected to the AWITS server. (or ET) Let's examine them in detail to see what information they contain: +

+Number 1 is a normal, stable lagometer display, with a narrow, flat green line at the bottom, which reflects a fairly low (50) and stable ping. The upper blue line has only a tiny bit of yellow in it. Yellow above the blue line is undesirable, since these are frames that are extrapolated by your client, which means that it is making a kind of educated guess about where moving objects are, in the absence of "real" snapshot data from the server. +

+Number 2 contains many yellow triangles above the blue, but there is still blue in between them. The blue indicates frames that are interpolated between valid snapshots, but the yellow means that the client is extrapolating outside of valid snapshot data. The height of the yellow indicates the time since the last valid snapshot, which is why triangles form. The longer the time without a valid snapshot, the higher the yellow line, until valid snapshot data is again rendered and the yellow suddenly disappears. When this happens, the client will put players back where the server says they should be, which may not be where the client had extrapolated their movements. The game would appear choppy as the cycle of extrapolate/correct/extrapolate/correct continued. +

+Number 3 shows a large yellow triangle forming at the edge of the lagometer. As time passes without a valid snapshot having been rendered, the height of the triangle grows accordingly. This is a graphic representation of the phenomenon of lag. Note that there are spikes in the green, showing that the client's ping is momentarily climbing. +

+
Image
+

+Number 4 shows red spikes, which mean that snapshots have been dropped by the network, either in transmission (packet loss) or because the client can't handle them (cpu tied up by other tasks, like taking repeated screenshots.) CoD and all Quake-engine games use UDP packets because they are fast and easy to handle, but they have no retransmission or error-correction capability. The server sends them and forgets about them. Once lost, they are lost for good. Red spikes like these occur from time to time, and occasional red spikes are not necessarily bad unless they are wide (each pixel in width is one snapshot lost) or frequent. During DoS attacks on our host, the lagometer will show almost solid red. (Red spikes will always be this height. There is no meaning associated with the height, which is purely arbitrary.) +

+Number 5 shows a big yellow triangle, which would manifest in-game as a brief freeze, followed by players "teleporting" to nearby locations as the client gets correct information from the server. Remember, any yellow means the client is trying to guess where players should be in the absence of proper information from the server. +

+Number 6 shows a long string of connected yellow. With no blue in sight, any movement by the player will result in the "skating" or "rubber-band" effect, where the player is "snapped back" to where the server last put him. This shot is not really typical of that effect, since it was the result of taking many back-to-back screenshots. When this happens spontaneously in the game, a triangle will form that grows to the top of the lagometer, so what you really see is a yellow bar all the way to the top. +

+Remember, the only thing that is "really" happening in-game is what the server is calculating. If the server cannot get this information to the client, the client will render a guess about what is going on. Since players move at about 10 feet per second in the game, one missed snapshot can make a difference of 6 inches in location. +

+Four missed snapshots (one-fifth of a second in duration) can make a difference of two feet! This is why your client sometimes appears to show a sure hit, but the server may register a clean miss. Playing with the lagometer on can help you understand what is "really" going on in the game. +

+The Lagometer tutorial above is © 2004 by wadiano productions. It's written by Ron "Pair O' Noyas" Reposh, and was originally posted at http://awits.com/Community. All Images and trademarks are property of Activision. +

+
+Is there a cure against LAG? +

+Yep.. most of the time there sure is, but the cure depends on what information the lagometer shows. +

+If you get green spikes, or the server wont let you connect because your ping is to high try to: +

+1 Stop all applications that uses the internet, such as Internet browsers, downloads, ICQ, Teamspeak, skype ect. +

+2. If you are using a shared internet connection, step one applies to ALL the computers on the connection. Brother, Sister, mom, dad or neighbor I don't care. How to stop them is your problem Smile +

+3. Scan your computer for spy ware & Virus, sometimes these buggers eat alot of bandwidth. I prefer to use Spybot SD to get rid of the spy ware, but you can use whatever you like. remember to update your virus killer and do a full system scan as well, When the scan is complete, reboot your computer. +

+If you get yellow spikes, you should try to: +

+1. Lower your graphic settings in the game, such as Video Mode, Character textures, General textures texture filter. +

+But I just bought this x-brand display adaptor with 3.6GB DDR ram and dual 4.7Ghz processors? +
+I don't care, lower your settings.. If the problem is solved, you can gradually increase the settings step by step until the problem re-occur. Another good idea could be to update the driver for your display adaptor, chipset, BIOS etc. +

+2. lower your sound settings. + + diff --git a/Call of Duty 4/Docs/lagometer.jpg b/Call of Duty 4/Docs/lagometer.jpg new file mode 100755 index 0000000..daf6bb2 Binary files /dev/null and b/Call of Duty 4/Docs/lagometer.jpg differ diff --git a/Call of Duty 4/Docs/lagtypes.jpg b/Call of Duty 4/Docs/lagtypes.jpg new file mode 100755 index 0000000..5a862ad Binary files /dev/null and b/Call of Duty 4/Docs/lagtypes.jpg differ diff --git a/Call of Duty 4/Map Images/backlotdetail.jpg b/Call of Duty 4/Map Images/backlotdetail.jpg new file mode 100755 index 0000000..256ae53 Binary files /dev/null and b/Call of Duty 4/Map Images/backlotdetail.jpg differ diff --git a/Call of Duty 4/Map Images/cod4VacantLoc.jpg b/Call of Duty 4/Map Images/cod4VacantLoc.jpg new file mode 100755 index 0000000..5fdbc97 Binary files /dev/null and b/Call of Duty 4/Map Images/cod4VacantLoc.jpg differ diff --git a/Call of Duty 4/Map Images/crashdetail.jpg b/Call of Duty 4/Map Images/crashdetail.jpg new file mode 100755 index 0000000..f7590ef Binary files /dev/null and b/Call of Duty 4/Map Images/crashdetail.jpg differ diff --git a/Call of Duty 4/Map Images/overgrowndetail.jpg b/Call of Duty 4/Map Images/overgrowndetail.jpg new file mode 100755 index 0000000..3b14765 Binary files /dev/null and b/Call of Duty 4/Map Images/overgrowndetail.jpg differ diff --git a/Call of Duty 4/Map Images/strikedetail.jpg b/Call of Duty 4/Map Images/strikedetail.jpg new file mode 100755 index 0000000..503436b Binary files /dev/null and b/Call of Duty 4/Map Images/strikedetail.jpg differ diff --git a/Call of Duty 4/Map Images/vacantdetail.jpg b/Call of Duty 4/Map Images/vacantdetail.jpg new file mode 100755 index 0000000..dcf8c62 Binary files /dev/null and b/Call of Duty 4/Map Images/vacantdetail.jpg differ diff --git a/Call of Duty 4/Server Configs/Custom Server Config 1.txt b/Call of Duty 4/Server Configs/Custom Server Config 1.txt new file mode 100755 index 0000000..36cd608 --- /dev/null +++ b/Call of Duty 4/Server Configs/Custom Server Config 1.txt @@ -0,0 +1,27 @@ +seta sv_punkbuster 1 +wait +pb_sv_enable + +// Server name +set sv_hostname "My CoD4 Server" //Change this to whatever you want your server to be named in the server browser + +// Server password +set g_password "" // blank means NO password + +// Rconpassword +set rcon_password "change_me" // Change this to your rcon password! + +// Maximum Clients +set sv_maxclients "32" +set sv_privateclients "6" + +// Max Ping +set sv_maxping "225" + +// Rate +set sv_maxRate "25000" + +// Map_rotation +set sv_mapRotation "gametype war map mp_backlot gametype war map mp_bloc gametype war map mp_bog gametype war map mp_cargoship gametype war map mp_citystreets gametype war map mp_convoy gametype war map mp_countdown gametype war map mp_crash gametype war map mp_crossfire gametype war map mp_farm gametype war map mp_overgrown gametype war map mp_pipeline gametype war map mp_showdown gametype war map mp_strike gametype war map mp_vacant" + +set sv_maprotationcurrent "" \ No newline at end of file diff --git a/Call of Duty 4/Server Configs/Custom Server Config 10.txt b/Call of Duty 4/Server Configs/Custom Server Config 10.txt new file mode 100755 index 0000000..9b0553d --- /dev/null +++ b/Call of Duty 4/Server Configs/Custom Server Config 10.txt @@ -0,0 +1,352 @@ +// Call of Duty 4 - Config by Taher furious + +// Public Information + +sets sv_hostname "xxxxxx" +set scr_motd "Welcome to xxxxxx" + +// Common Server Settings + +// Log Settings +set g_logsync 2 +set logfile 1 +set g_log games_mp.log +set sv_log_damage 1 + +// Network options +//set net_ip 1.2.3.4 +//set net_port 28960 +set com_hunkMegs 512 +set net_noipx 1 + +// Server Network Mode +set dedicated 0 + +// Master servers + +set g_gametype war +set scr_war_scorelimit 1000 +set scr_war_timelimit 10 + +set g_allowvote 0 +set scr_allow_vote 0 + +// Password Settings + +set rcon_password furious +set sv_privatePassword "" +set g_password "" + +// Player slots setup +set sv_maxclients 11 +set sv_privateclients "" + +// Ping +set sv_minPing 0 +set sv_maxping 999 + +// Client Download Settings.Used for MODs and custom maps +set sv_allowdownload 1 +seta sv_wwwDownload 1 +seta sv_wwwBaseURL +seta sv_wwwDlDisconnected 1 + +// Rate +set sv_maxRate 30000 + +// FPS +set sv_fps 150 + +// Drop inactive players +set sv_timeout 300 +set sv_zombietime 1 +set g_inactivity 0 +set g_inactivityspectator 0 + +// AntiFlooding Settings +set sv_floodProtect 1 +set sv_reconnectlimit 3 + +// Anti Cheat Settings +set sv_disableClientConsole 0 +set cl_autocmd 0 +set sv_cheats 0 +set sv_pure 1 +set g_banIPs "" +set g_no_script_spam 1 +set sv_punkbuster 0 + +// Temporary Ban duration, in seconds +set sv_kickBanTime 3600 + +// In-game voice communication system +set sv_voice 1 +set sv_voiceQuality 1 +set voice_deadChat 1 +set voice_global 0 +set voice_localEcho 0 +set winvoice_mic_mute 1 + +// Misc + +set sv_allowAnonymous 0 +set g_antilag 0 +set g_compassShowEnemies 0 +//ui_maxclients 32 + +// player +set scr_player_maxhealth 100 +set scr_player_suicidespawndelay 0 +set scr_player_healthregentime 5 +set scr_player_forcerespawn 1 +set scr_player_sprinttime 4 + +// teams +set scr_teambalance 0 +set scr_team_fftype 1 +set scr_team_teamkillspawndelay 0 +set scr_team_kickteamkillers 0 +set scr_team_respawntime 0 + +// UI +set scr_hardcore 0 +set scr_oldschool_mw 0 +set ui_hud_obituaries 1 +set ui_hud_showobjicons 1 + +// gameplay +set scr_game_allowkillcam 0 +set scr_game_onlyheadshots 0 +set scr_game_deathpointloss 0 +set scr_game_suicidepointloss 0 +set scr_team_teamkillpointloss 1 +set scr_game_spectatetype 1 +set scr_game_forceuav 0 +set scr_game_hardpoints 0 + +// hardpoints +set scr_hardpoint_allowartillery 0 +set scr_hardpoint_allowuav 0 +set scr_hardpoint_allowhelicopter 0 + +// limits the number of players that can choose each class type + +set class_assault_limit 99 +set class_specops_limit 99 +set class_heavygunner_limit 99 +set class_demolitions_limit 99 +set class_sniper_limit 1 + +// perks + +set perk_allow_specialty_parabolic 1 +set perk_allow_specialty_gpsjammer 0 +set perk_allow_specialty_holdbreath 1 +set perk_allow_specialty_quieter 1 +set perk_allow_specialty_longersprint 1 +set perk_allow_specialty_detectexplosive 1 +set perk_allow_specialty_explosivedamage 1 +set perk_allow_specialty_pistoldeath 0 +set perk_allow_specialty_grenadepulldeath 0 +set perk_allow_specialty_bulletdamage 1 +set perk_allow_specialty_bulletpenetration 1 +set perk_allow_specialty_bulletaccuracy 1 +set perk_allow_specialty_rof 1 +set perk_allow_specialty_fastreload 1 +set perk_allow_specialty_extraammo 1 +set perk_allow_specialty_armorvest 1 +set perk_allow_specialty_fraggrenade 1 +set perk_allow_specialty_specialgrenade 1 +set perk_allow_c4_mp 1 +set perk_allow_claymore_mp 1 +set perk_allow_rpg_mp 0 + +// class movespeed + +set class_assault_movespeed 0.95 +set class_specops_movespeed 1.00 +set class_heavygunner_movespeed 0.875 +set class_demolitions_movespeed 1.00 +set class_sniper_movespeed 1.00 + +set scr_enable_nightvision 1 +set scr_enable_music 0 +set scr_enable_hiticon 1 + +// Enables Dropping of Specified Weapon Class + +set class_assault_allowdrop 1 +set class_specops_allowdrop 1 +set class_heavygunner_allowdrop 1 +set class_demolitions_allowdrop 1 +set class_sniper_allowdrop 1 + +// Assault Rifles + +set weap_allow_m16 1 +set weap_allow_ak47 1 +set weap_allow_m4 1 +set weap_allow_g3 1 +set weap_allow_g36c 1 +set weap_allow_m14 1 +set weap_allow_mp44 1 + +// Assault Attachments + +set attach_allow_assault_none 1 +set attach_allow_assault_gl 0 +set attach_allow_assault_reflex 1 +set attach_allow_assault_silencer 1 +set attach_allow_assault_acog 0 + +// SMG + +set weap_allow_mp5 1 +set weap_allow_skorpion 1 +set weap_allow_uzi 1 +set weap_allow_ak74u 1 +set weap_allow_p90 1 + +// SMG Attachments + +set attach_allow_smg_none 1 +set attach_allow_smg_reflex 1 +set attach_allow_smg_silencer 1 +set attach_allow_smg_acog 0 + +// Shotguns + +set weap_allow_m1014 1 +set weap_allow_winchester1200 1 + +// Shotgun Attachments + +set attach_allow_shotgun_none 1 +set attach_allow_shotgun_reflex 1 +set attach_allow_shotgun_grip 1 + +// LMG + +set weap_allow_saw 1 +set weap_allow_rpd 1 +set weap_allow_m60e4 1 + +// LMG Attachments + +set attach_allow_lmg_none 1 +set attach_allow_lmg_reflex 1 +set attach_allow_lmg_grip 1 +set attach_allow_lmg_acog 0 + +// Sniper Rifles + +set weap_allow_dragunov 1 +set weap_allow_m40a3 1 +set weap_allow_barrett 1 +set weap_allow_remington700 1 +set weap_allow_m21 1 + +// Sniper Attachments +/ +set attach_allow_sniper_none 1 +set attach_allow_sniper_acog 0 + +// Pistols + +set weap_allow_beretta 1 +set weap_allow_colt45 1 +set weap_allow_usp 1 +set weap_allow_deserteagle 1 +set weap_allow_deserteaglegold 1 + +// Pistol Attachments + +set attach_allow_pistol_none 1 +set attach_allow_pistol_silencer 1 + +// Grenades + +set weap_allow_frag_grenade 1 +set weap_allow_concussion_grenade 0 +set weap_allow_flash_grenade 1 +set weap_allow_smoke_grenade 1 + +// assault class default loadout + +set class_assault_primary m16 +set class_assault_primary_attachment reflex +set class_assault_secondary beretta +set class_assault_secondary_attachment none +set class_assault_perk1 specialty_fraggrenade +set class_assault_perk2 specialty_bulletdamage +set class_assault_perk3 specialty_bulletaccuracy +set class_assault_grenade flash_grenade +set class_assault_camo camo_none +set class_assault_frags 1 +set class_assault_special 1 + +// specops class default loadout + +set class_specops_primary mp5 +set class_specops_primary_attachment none +set class_specops_secondary usp +set class_specops_secondary_attachment silencer +set class_specops_perk1 specialty_fraggrenade +set class_specops_perk2 specialty_bulletdamage +set class_specops_perk3 specialty_bulletaccuracy +set class_specops_grenade flash_grenade +set class_specops_camo camo_none +set class_specops_frags 1 +set class_specops_special 1 + +// heavygunner class default loadout + +set class_heavygunner_primary saw +set class_heavygunner_primary_attachment none +set class_heavygunner_secondary usp +set class_heavygunner_secondary_attachment none +set class_heavygunner_perk1 specialty_specialgrenade +set class_heavygunner_perk2 specialty_bulletdamage +set class_heavygunner_perk3 specialty_bulletpenetration +set class_heavygunner_grenade flash_grenade +set class_heavygunner_camo camo_none +set class_heavygunner_frags 1 +set class_heavygunner_special 1 + +// demolitions class default loadout + +set class_demolitions_primary winchester1200 +set class_demolitions_primary_attachment none +set class_demolitions_secondary beretta +set class_demolitions_secondary_attachment none +set class_demolitions_perk1 specialty_fraggrenade +set class_demolitions_perk2 specialty_explosivedamage +set class_demolitions_perk3 specialty_longersprint +set class_demolitions_grenade smoke_grenade +set class_demolitions_camo camo_none +set class_demolitions_frags 1 +set class_demolitions_special 1 + +// sniper class default loadout + +set class_sniper_primary m40a3 +set class_sniper_primary_attachment none +set class_sniper_secondary beretta +set class_sniper_secondary_attachment silencer +set class_sniper_perk1 specialty_fraggrenade +set class_sniper_perk2 specialty_bulletdamage +set class_sniper_perk3 specialty_bulletpenetration +set class_sniper_grenade flash_grenade +set class_sniper_camo camo_none +set class_sniper_frags 1 +set class_sniper_special 1 + + +// First gametype to load +// "dm" - free for all deathmatch +// "dom" - domination +// "koth" - headquarters +// "sab" - sabotage +// "sd" - search & destroy +// "war" - team deathmatch +//****************************************************************************** \ No newline at end of file diff --git a/Call of Duty 4/Server Configs/Custom Server Config 2.txt b/Call of Duty 4/Server Configs/Custom Server Config 2.txt new file mode 100755 index 0000000..db7cc29 --- /dev/null +++ b/Call of Duty 4/Server Configs/Custom Server Config 2.txt @@ -0,0 +1,39 @@ +seta sv_punkbuster 1 +wait +pb_sv_enable + +// Server name +set sv_hostname "YOUR HOST NAME" //Change this to whatever you want your server to be named in the server browser + +//=============================================================================== +// Public Information - OPTIONAL +//=============================================================================== +sets _Admin "name" +sets _Email "blahblah@blahblah.com" +sets _Website "my very cool website.com" +sets _Location "Dallas - USA" +set scr_motd "A MOTD HERE + +// Server password +set g_password "" // blank means NO password + +// Rconpassword +set rcon_password "xxxx" // Change this to your rcon password! + +// Maximum Clients +set sv_maxclients "32" +set sv_privateclients "6" + +// Max Ping +set sv_maxping "250" + +// Rate +set sv_maxRate "25000" + +//set Game Type +set g_gametype "koth" + +// Map_rotation +set sv_mapRotation "gametype koth map mp_backlot gametype koth map mp_bloc gametype koth map mp_bog gametype koth map mp_cargoship gametype koth map mp_citystreets gametype koth map mp_convoy gametype koth map mp_countdown gametype koth map mp_crash gametype koth map mp_crossfire gametype koth map mp_farm gametype koth map mp_overgrown gametype koth map mp_pipeline gametype koth map mp_shipment gametype koth map mp_showdown gametype koth map mp_strike gametype koth map mp_vacant" + +set sv_maprotationcurrent "" \ No newline at end of file diff --git a/Call of Duty 4/Server Configs/Custom Server Config 3.txt b/Call of Duty 4/Server Configs/Custom Server Config 3.txt new file mode 100755 index 0000000..3fa2a3f --- /dev/null +++ b/Call of Duty 4/Server Configs/Custom Server Config 3.txt @@ -0,0 +1,212 @@ +//************************************************** **************************** +// Call of Duty 4 +//************************************************** **************************** +//************************************************** **************************** +// Public Information +//************************************************** **************************** +sets sv_hostname "^1:|BONES|: ^7HardCore Tactical S&D" +sets _Admin "Admin" +sets _Email "admin@clanbones.com" +sets _Website "www.clanbones.com" +sets _Location "Chicago Server" +sets _Irc "" +sets _Mod "" +sets _ModVer "" +sets _ModUpdate "" +sets _Maps "COD4 Stock" +set scr_motd "Welcome to the BONES COD4 Server - We are recruiting" + +//************************************************** **************************** +// Common Server Settings +//************************************************** **************************** +// Log Settings +set g_logsync "2" // 0=no log, 1=buffered, 2=continuous, 3=append +set logfile "1" // 0 = NO log, 1 = log file enabled +set g_log "games_mp.log" // Name of log file, default is games_mp.log +set sv_log_damage "1" + +// Network options +set net_ip "64.182.97.58" // Set your servers IP address +set net_port "28960" // Set your port number +set com_hunkMegs "512" +set net_noipx "1" // Allow ONLY tcp/ip protocol, player/server communications + +// Server Network Mode +set dedicated "2" // 0 = Listen, 1 = LAN, 2 = Internet + +// Master servers +set sv_master1 "cod2master.activision.com" +set sv_master2 "cod2authorize.activision.com" +set sv_master3 "cod2master.infinityward.com" +set sv_master3 "cod2update.activision.com" +set sv_master4 "master.gamespy.com:28960" +set sv_master5 "master0.gamespy.com" +set sv_master6 "master1.gamespy.com" +set sv_master7 "clanservers.net" +set sv_gamespy "1" + +// Password Settings +set rcon_password "yourpass" // RCON must supply pw to use +set sv_privatePassword "" // Private slots, non-public slots + +// The following can be used to lock out the server so that only those +// players that have been provide the password can connect. Good for +// matches, practices, etc. +set g_password "" + +// Player slots setup +set sv_maxclients "32" // MAX server player slots, this is TOTAL player slots +set sv_privateclients "" // Number of private player slots, maxclients - privateclients = public slots + +// Ping +set sv_minPing "0" // MIN player ping on CONNECT, any lower and player isnt allowed to connect +set sv_maxping "250" // MAX player ping on CONNECT, any higher and player isnt allowed to connect + +// Client Download Settings. (0=off/1=on) Used for MODs and custom maps +// See included Quick Setup Guide for instructions. +set sv_allowdownload "0" +seta sv_wwwDownload "0" +seta sv_wwwBaseURL "" +seta sv_wwwDlDisconnected "1" + +// Rate +set sv_maxRate "25000" + + +// Drop inactive players +set sv_timeout "300" +set sv_zombietime "1" +set g_inactivity "0" +set g_inactivityspectator "0" + +// AntiFlooding Settings +set sv_floodProtect "1" +set sv_reconnectlimit "3" + +// Anti Cheat Settings +pb_sv_enable +wait 5 +set sv_punkbuster "1" +set sv_disableClientConsole "0" +set cl_autocmd "0" +set sv_cheats "0" +set sv_pure "1" +set g_banIPs "" +set g_no_script_spam "1" + +// Temporary Ban duration, in seconds +set sv_kickBanTime "3600" + +// In-game voice communication system +set sv_voice "1" +set sv_voiceQuality "4" +set voice_deadChat "0" +set voice_global "0" +set voice_localEcho "0" +set winvoice_mic_mute "1" + +//************************************************** **************************** +// Misc +//************************************************** **************************** +set sv_allowAnonymous "0" +set g_antilag "0" +set g_compassShowEnemies "0" +set scr_hardcore "1" +set g_allowvote "0" +set scr_allow_vote "0" +set scr_teambalance "1" +set ui_hud_hardcore "1" //What is this? +set scr_game_allowkillcam "0" +set scr_game_onlyheadshots "0" +set scr_game_deathpointloss "0" +set scr_game_suicidepointloss "0" +set scr_team_teamkillpointloss "1" +set scr_game_spectatetype "1" // [0-2] 0=none, 1= team only, 2=spectate all +set scr_team_fftype "1" // 0=off 1=on 2=reflect damage 3=shared + + +//================================================== =============================== +// Gametype Settings +//================================================== =============================== + +// First gametype to load +// "dm" - free for all deathmatch +// "dom" - domination +// "koth" - headquarters +// "sab" - sabotage +// "sd" - search & destroy +// "war" - team deathmatch + +// Deathmatch +set scr_dm_scorelimit 150 +set scr_dm_timelimit 10 +set scr_dm_roundlimit 1 +set scr_dm_numlives 0 +set scr_dm_playerrespawndelay -1 +set scr_dm_waverespawndelay 0 + + +// Domination +set scr_dom_scorelimit 200 +set scr_dom_timelimit 0 +set scr_dom_roundlimit 1 +set scr_dom_numlives 0 +set scr_dom_playerrespawndelay -1 +set scr_dom_waverespawndelay 0 + + +// Teamdeath Match +set scr_war_scorelimit 750 +set scr_war_timelimit 10 +set scr_war_roundlimit 1 +set scr_war_numlives 0 +set scr_war_playerrespawndelay -1 +set scr_war_waverespawndelay 0 + +// Sabotoge +set scr_sab_scorelimit 3 +set scr_sab_timelimit 10 +set scr_sab_roundlimit 3 +set scr_sab_roundswitch 1 +set scr_sab_numlives 0 +set scr_sab_bombtimer 30 +set scr_sab_planttime 3 +set scr_sab_defusetime 3 +set scr_sab_hotpotato 0 +set scr_sab_playerrespawndelay -1 +set scr_sab_waverespawndelay -1 + +// King of the Hill +set scr_koth_scorelimit 250 +set scr_koth_timelimit 15 +set scr_koth_roundlimit 1 +set scr_koth_roundswitch 1 +set scr_koth_numlives 0 +set scr_koth_playerrespawndelay -1 +set scr_koth_waverespawndelay 0 +set koth_autodestroytime 60 +set koth_spawntime 0 +set koth_kothmode 0 +set koth_capturetime 20 +set koth_destroytime 10 +set koth_delayPlayer 0 +set koth_spawnDelay 60 + +// Search and Destroy +set scr_sd_scorelimit 6 +set scr_sd_timelimit 3 +set scr_sd_roundlimit 0 +set scr_sd_roundswitch 3 // rounds between switching teams +set scr_sd_numlives 1 // elimination +set scr_sd_bombtimer 60 +set scr_sd_planttime 7 +set scr_sd_defusetime 7 +set scr_sd_multibomb 0 +set scr_sd_playerrespawndelay -1 +set scr_sd_waverespawndelay 0 + +// Team-Balance and Voting +set scr_teambalance "1" +set g_allowvote "0" + +set sv_mapRotation "gametype sd map mp_bloc gametype sd map mp_backlot gametype sd map mp_crash gametype sd map mp_convoy gametype sd map mp_vacant gametype sd map mp_bog gametype sd map mp_pipeline gametype sd map mp_farm gametype sd map mp_crossfire gametype sd map mp_overgrown gametype sd map mp_citystreets gametype sd map mp_showdown gametype sd map mp_strike gametype sd map mp_cargoship gametype sd map mp_countdown" \ No newline at end of file diff --git a/Call of Duty 4/Server Configs/Custom Server Config 4.txt b/Call of Duty 4/Server Configs/Custom Server Config 4.txt new file mode 100755 index 0000000..70a2826 --- /dev/null +++ b/Call of Duty 4/Server Configs/Custom Server Config 4.txt @@ -0,0 +1,345 @@ +//************************************************** **************************** +// Call of Duty 4 +//************************************************** **************************** +//************************************************** **************************** +// Public Information - taken from http://forums.gameservers.com/viewto...000&highlight= +//************************************************** **************************** +sets sv_hostname "^5>E*V< ^2European Vikings *RECRUITING" +sets _Admin "LordAragorn" +sets _Email "lordaragorns@hotmail.com" +sets _Website "http://www.europeanvikings.mojforum.si" +sets _Location "EUROPE" +sets _Irc "" +sets _Mod "sd" +sets _ModVer "1.4" +sets _ModUpdate "yes" +sets _Maps "COD2 Stock" +set scr_motd "Welcome on >E*V< server. Visit us on http://www.europeanvikings.mojforum.si/" + +//************************************************** **************************** +// Common Server Settings +//************************************************** **************************** +// Log Settings +set g_logsync "2" +set logfile "1" +set g_log "games_mp.log" +set sv_log_damage "1" + +// Network options +set net_ip "213.19.131.32" // Set your servers IP address +set net_port "28960" // Set your port number +set com_hunkMegs "512" +set net_noipx "1" // Allow ONLY tcp/ip protocol, player/server communications + +// Server Network Mode +set dedicated "2" // 0 = Listen, 1 = LAN, 2 = Internet +// Password Settings +set rcon_password "*****" //SET HERE YOUR OWN PASSWORD +set sv_privatePassword "" + +// The following can be used to lock out the server so that only those +// players that have been provide the password can connect. Good for +// matches, practices, etc. +set g_password "" + +// Player slots setup +set sv_maxclients "16" // MAX server player slots, this is TOTAL player slots +set sv_privateclients "" + +// Ping +set sv_minPing "0" +set sv_maxping "350" + +// Client Download Settings. (0=off/1=on) Used for MODs and custom maps +// See included Quick Setup Guide for instructions. +set sv_allowdownload "1" +seta sv_wwwDownload "0" +seta sv_wwwBaseURL "" +seta sv_wwwDlDisconnected "1" + +// Rate +set sv_maxRate "25000" + + +// Drop inactive players +set sv_timeout "300" +set sv_zombietime "1" +set g_inactivity "0" +set g_inactivityspectator "0" + +// AntiFlooding Settings +set sv_floodProtect "1" +set sv_reconnectlimit "3" + +// Anti Cheat Settings +set sv_disableClientConsole "0" +set cl_autocmd "0" +set sv_cheats "0" +set sv_pure "1" +set g_banIPs "" +set g_no_script_spam "1" +set sv_punkbuster "1" + +// Temporary Ban duration, in seconds +set sv_kickBanTime "3600" + +// In-game voice communication system +set sv_voice "0" +set sv_voiceQuality "1" +set voice_deadChat "0" +set voice_global "0" +set voice_localEcho "0" +set winvoice_mic_mute "1" + +//************************************************** **************************** +// Misc +//************************************************** **************************** +set sv_allowAnonymous "0" +set g_antilag "0" +set g_compassShowEnemies "0" +//ui_maxclients 32 + +//************************************************** **************************** +// limits the number of players that can choose each class type +//************************************************** **************************** +set class_assault_limit 99 +set class_specops_limit 99 +set class_heavygunner_limit 99 +set class_demolitions_limit 99 +set class_sniper_limit 99 + +//************************************************** **************************** +// perks +//************************************************** **************************** +set perk_allow_specialty_parabolic 1 +set perk_allow_specialty_gpsjammer 1 +set perk_allow_specialty_holdbreath 1 +set perk_allow_specialty_quieter 1 +set perk_allow_specialty_longersprint 1 +set perk_allow_specialty_detectexplosive 1 +set perk_allow_specialty_explosivedamage 1 +set perk_allow_specialty_pistoldeath 1 +set perk_allow_specialty_grenadepulldeath 1 +set perk_allow_specialty_bulletdamage 1 +set perk_allow_specialty_bulletpenetration 1 +set perk_allow_specialty_bulletaccuracy 1 +set perk_allow_specialty_rof 1 +set perk_allow_specialty_fastreload 1 +set perk_allow_specialty_extraammo 1 +set perk_allow_specialty_armorvest 1 +set perk_allow_specialty_fraggrenade 1 +set perk_allow_specialty_specialgrenade 1 +set perk_allow_c4_mp 1 +set perk_allow_claymore_mp 1 +set perk_allow_rpg_mp 1 + +//************************************************** **************************** +// assault class default loadout +//************************************************** **************************** +set class_assault_primary m16 +set class_assault_primary_attachment gl +set class_assault_secondary beretta +set class_assault_secondary_attachment none +set class_assault_perk1 specialty_null +set class_assault_perk2 specialty_bulletdamage +set class_assault_perk3 specialty_longersprint +set class_assault_grenade concussion_grenade +set class_assault_camo camo_none +set class_assault_frags 1 +set class_assault_special 1 + +//************************************************** **************************** +// specops class default loadout +//************************************************** **************************** +set class_specops_primary mp5 +set class_specops_primary_attachment none +set class_specops_secondary usp +set class_specops_secondary_attachment silencer +set class_specops_perk1 c4_mp +set class_specops_perk2 specialty_explosivedamage +set class_specops_perk3 specialty_bulletaccuracy +set class_specops_grenade flash_grenade +set class_specops_camo camo_none +set class_specops_frags 1 +set class_specops_special 1 + +//************************************************** **************************** +// heavygunner class default loadout +//************************************************** **************************** +set class_heavygunner_primary saw +set class_heavygunner_primary_attachment none +set class_heavygunner_secondary usp +set class_heavygunner_secondary_attachment none +set class_heavygunner_perk1 specialty_specialgrenade +set class_heavygunner_perk2 specialty_armorvest +set class_heavygunner_perk3 specialty_bulletpenetration +set class_heavygunner_grenade concussion_grenade +set class_heavygunner_camo camo_none +set class_heavygunner_frags 1 +set class_heavygunner_special 1 + +//************************************************** **************************** +// demolitions class default loadout +//************************************************** **************************** +set class_demolitions_primary winchester1200 +set class_demolitions_primary_attachment none +set class_demolitions_secondary beretta +set class_demolitions_secondary_attachment none +set class_demolitions_perk1 rpg_mp +set class_demolitions_perk2 specialty_explosivedamage +set class_demolitions_perk3 specialty_longersprint +set class_demolitions_grenade smoke_grenade +set class_demolitions_camo camo_none +set class_demolitions_frags 1 +set class_demolitions_special 1 + +//************************************************** **************************** +// sniper class default loadout +//************************************************** **************************** +set class_sniper_primary m40a3 +set class_sniper_primary_attachment none +set class_sniper_secondary beretta +set class_sniper_secondary_attachment silencer +set class_sniper_perk1 specialty_specialgrenade +set class_sniper_perk2 specialty_bulletdamage +set class_sniper_perk3 specialty_bulletpenetration +set class_sniper_grenade flash_grenade +set class_sniper_camo camo_none +set class_sniper_frags 1 +set class_sniper_special 1 + +set class_assault_movespeed 0.95 +set class_specops_movespeed 1.00 +set class_heavygunner_movespeed 0.875 +set class_demolitions_movespeed 1.00 +set class_sniper_movespeed 1.00 + +set scr_enable_nightvision 1 +set scr_enable_music 1 +set scr_enable_hiticon 1 + +//************************************************** **************************** +// Enables Dropping of Specified Weapon Class +//************************************************** **************************** +set class_assault_allowdrop 1 +set class_specops_allowdrop 1 +set class_heavygunner_allowdrop 1 +set class_demolitions_allowdrop 1 +set class_sniper_allowdrop 1 + +//************************************************** **************************** +// Assault Rifles +//************************************************** **************************** +set weap_allow_m16 1 +set weap_allow_ak47 1 +set weap_allow_m4 1 +set weap_allow_g3 1 +set weap_allow_g36c 1 +set weap_allow_m14 1 +set weap_allow_mp44 1 + +//************************************************** **************************** +// Assault Attachments +//************************************************** **************************** +set attach_allow_assault_none 1 +set attach_allow_assault_gl 0 +set attach_allow_assault_reflex 1 +set attach_allow_assault_silencer 1 +set attach_allow_assault_acog 1 + +//************************************************** **************************** +// SMG +//************************************************** **************************** +set weap_allow_mp5 1 +set weap_allow_skorpion 1 +set weap_allow_uzi 1 +set weap_allow_ak74u 1 +set weap_allow_p90 1 + +//************************************************** **************************** +// SMG Attachments +//************************************************** **************************** +set attach_allow_smg_none 1 +set attach_allow_smg_reflex 1 +set attach_allow_smg_silencer 1 +set attach_allow_smg_acog 1 + +//************************************************** **************************** +// Shotguns +//************************************************** **************************** +set weap_allow_m1014 1 +set weap_allow_winchester1200 1 + +//************************************************** **************************** +// Shotgun Attachments +//************************************************** **************************** +set attach_allow_shotgun_none 1 +set attach_allow_shotgun_reflex 1 +set attach_allow_shotgun_grip 1 + +//************************************************** **************************** +// LMG +//************************************************** **************************** +set weap_allow_saw 1 +set weap_allow_rpd 1 +set weap_allow_m60e4 1 + +//************************************************** **************************** +// LMG Attachments +//************************************************** **************************** +set attach_allow_lmg_none 1 +set attach_allow_lmg_reflex 1 +set attach_allow_lmg_grip 1 +set attach_allow_lmg_acog 1 + +//************************************************** **************************** +// Sniper Rifles +//************************************************** **************************** +set weap_allow_dragunov 1 +set weap_allow_m40a3 1 +set weap_allow_barrett 1 +set weap_allow_remington700 1 +set weap_allow_m21 1 + +//************************************************** **************************** +// Sniper Attachments +//************************************************** **************************** +set attach_allow_sniper_none 1 +set attach_allow_sniper_acog 1 + +//************************************************** **************************** +// Pistols +//************************************************** **************************** +set weap_allow_beretta 1 +set weap_allow_colt45 1 +set weap_allow_usp 1 +set weap_allow_deserteagle 1 +set weap_allow_deserteaglegold 1 + +//************************************************** **************************** +// Pistol Attachments +//************************************************** **************************** +set attach_allow_pistol_none 1 +set attach_allow_pistol_silencer 1 + +//************************************************** **************************** +// Grenades +//************************************************** **************************** +set weap_allow_frag_grenade 1 +set weap_allow_concussion_grenade 1 +set weap_allow_flash_grenade 1 +set weap_allow_smoke_grenade 1 + +//************************************************** **************************** +// First gametype to load +// "dm" - free for all deathmatch +// "dom" - domination +// "koth" - headquarters +// "sab" - sabotage +// "sd" - search & destroy +// "war" - team deathmatch +//************************************************** **************************** +set g_gametype "sd" + + +set sv_mapRotation "gametype sd map mp_backlot gametype sd map mp_bloc gametype sd map mp_bog gametype sd map mp_cargoship gametype sd map mp_citystreets gametype sd map mp_convoy gametype sd map mp_countdown gametype sd map mp_crash gametype sd map mp_crossfire gametype sd map mp_farm gametype sd map mp_overgrown gametype sd map mp_pipeline gametype sd map mp_shipment gametype sd map mp_showdown gametype sd map mp_strike gametype sd map mp_vacant" \ No newline at end of file diff --git a/Call of Duty 4/Server Configs/Custom Server Config 5.txt b/Call of Duty 4/Server Configs/Custom Server Config 5.txt new file mode 100755 index 0000000..391f404 --- /dev/null +++ b/Call of Duty 4/Server Configs/Custom Server Config 5.txt @@ -0,0 +1,191 @@ +This gives a sample server.cfg here with an explanation of what the command does. I bet most people do not know what things can set up,:) The file is copied (info below), but I added my minor modifications. + + + +/ +Quote: +/ Server.cfg PL +/ / To _KaszpiR_ http://nvt.prv.pl +/ / Modified by Trawiator'a +/ / Ver 0.6A 2005-11-24 + + +/ / Then start hlds with parameter + servercfgfile server.cfg +/ / For example. / Hlds_run-game cstrike + map de_dust + servercfgfile server.cfg + +/ / Config is the preparation parameters on the FFA server + + +/ / Basic setup + +sv_lan 1 / / set to 1 if it is the only server on the lan to Nonsteam always have to be +maxplayers 20 / / maximum number of players, remember that the reservation systems of slots on a server usually takes 2 slots +sv_visiblemaxplayers 16 / / number of visible slots on the server, -1 if it is automatically calculated (standard) +/ / But then you must manually from the console to napisc server address to connect to (if the server is full) +/ / Set the example, the value of 20 and 22 have maxplayers and in fact you have 2 free slots on the server + + +banned.cfg exec / recharge bans SteamID / wonid +Listip.cfg exec / ip bans on recharge + +hostname "Server Name" / / server name servers as seen through the browser (eg in favourities) +mapchangecfgfile "server.cfg" / / do this confgi during map changes (eg to restore the old settings) +mapcyclefile "mapcycle.txt" / / file contains a list of map by which to play after the end of the game +motdfile "motd.txt" / / filename to display as you enter the server, this is what people do not read:) +servercfgfile "server.cfg" / / file with major settings on the server, fired on first startup + +sv_proxies 1 / / number of hltv proxy that can connect to a server, a standard, more is not recommended +sv_region 3 / / because we are in Europe set 3 + +////////////////////////////////////////////////// ///////////////////////////////////////////////// +/ / Performance + +fps_max 100 / / how many fps the server should have an average, the best that was around 100, but no greater than 200 +/ / Otherwise the server consumes too much CPU + +sys_ticrate 125 / / 125 warosc is recommended, it is best not to have more than 200, some games require 1000 but hosting companies may enforce the value of the lower +/ / 10 000 is the extreme values, only the cast for the scavengers +/ / Usually only eats CPU niepotrzbnie + +////////////////////////////////////////////////// ///////////////////////////////////////////////// +/ / Net + +sv_maxrate 8000 / / maximum value which the server can send to each client individually, +/ / Set value of less than 4000 players and server zlaguje +/ / At lan 20000 +/ / Web server - zalzy to join together, try the 9999 if you have a lag, possibly gradually mzniejszaj 500 + +sv_maxupdaterate 100 / / maximum value which the customer may have cl_updaterate, +/ / If no more are lost packets will have + +sv_minrate 0 / / minimum value of what the server can send to each client individually, default 0, +/ / Set the values of over 6000 zlaguje server and players +/ / Recommended to krzymanie 0 value because of HLTV servers - you can just save up money for the link + + +////////////////////////////////////////////////// ///////////////////////////////////////////////// +/ / Rcon and password + +sv_password "/ / password required to connect to server +/ / Ustawnaie Most servers or clan during a match + +/ / Rcon_password "soup" / / rcon password in the not recommended to umeszczac here, it's better if you give the parameters of the firing of the server +/ / If you set "" it will not work rcon +/ / Eg + rcon_password "soup" + +sv_rcon_banpenalty 1 / / turn on the penalties for attempts to use the wrong rcon'a (banish the ip) +sv_rcon_minfailures 5 / / limit bad rcon commands to get ban'a +sv_rcon_minfailuretime 30 / / time in which attempts are checked rcon, +/ / As someone enters rcon_password bad (or not give) and perform rcon commands too much to get a ban +/ / If only to help restart the server + + +////////////////////////////////////////////////// ///////////////////////////////////////////////// +/ / Logs +/ / Recommended to preserve these settings if you wish to use or PsychoStats hlstats + +mp_logdetail 3 / / level logs, 0 - disable, 1 - only to hit an opponent standard, 2, - just hit tp, 3 - both log (tp and hostile) +mp_logecho 1 / / 1 - turns on the login command echo, 0 - off, such as you have in server.cfg echo SERVER CFG LOADED it will have is logged +mp_logfile 1 / / login multiplayer events (end of round, etc.), 1 - yes (standard), 0 - no +mp_logmessages 1 / / log the commands say (chat), 1 - yes (standard), 0 - no +sv_logbans 1 / / log giving the ban, 1 - yes (standard), 0 - no +sv_logblocks 1 / / log blocked attempts to change the value of proprietary variable, 1 - yes (standard), 0 - no +sv_logrelay 1 / / log connect an hltv proxy relay, 1 - yes (standard), 0 - no + + +////////////////////////////////////////////////// ///////////////////////////////////////////////// +/ / Voice + +sv_voicecodec "voice_speex" / / codec type, default voice_miles, recommended voice_speex - better quality at the expense of a few percent of CPU usage +sv_voiceenable 1 / / use options on the voice server, 1 - yes (default), 0 - no +sv_voicequality 5 / / voice quality, from 1 to 5, the more the better but the slingshot and a higher usage of the network +sv_alltalk 0 / / 0 - (default) voice only works if, and only alive to the tp, 1 - everyone can talk with each (at the beginning and end of the match) + + +////////////////////////////////////////////////// ///////////////////////////////////////////////// +/ / Downlad +/ / Recommended to preserve these values in order not to have problems with downloading files from the server + +hpk_maxsize 1 / / maximum size of the sum of the logo Cyprus of all players on the server, in megabytes +/ / Recommended value of 2 mega +/ / Set the arrow buttons are too high will cause the players will disconnectowani (because it must suck) +/ / The server will load the slower pace in August +sv_allowdownload 1 / / allow to download, 1 - yes (standard), 0 - no +sv_allowupload 1 / / allow to upload (eg logos), 1 - yes (standard), 0 - no +sv_send_logos 1 / / allow players to send the logo (spray on the wall) +sv_send_resources 1 / / allow to dowload the list of required files to play on a map, 1 - yes (standard), 0 - no +/ / Sv_downloadurl "http://szambo/hlds/dlurl/" / / url to the site where you can suck the files server (remember to restrict access to important files - addons folder, server.cfg, etc) +mp_decals 300 / / maximum logo displayed on the server, etc. + + +////////////////////////////////////////////////// ///////////////////////////////////////////////// +/ / Game +mp_autoteambalance 0 / / flip players to other teams if the difference in configurations, 0 - no (default), 1 - yes +mp_buytime 0.50 / / time to buy at the beginning of the round, in a fraction of a minute (one minute = 1.0, 30 seconds = 0.25) +mp_c4timer 35 / / time in seconds to disarm the bomb (otherwise will bum:), default 35 +mp_flashlight 1 / / 1 - You can use the flashlight (standard), 0 - disabled torch +mp_footsteps 1 / / 1 - players can hear the steps while running (standard), 0 - disabled (Quake 1 mode), good for exercises reflex:) +mp_freezetime 1 / / time in seconds pause at the beginning of the round (to reload and purchase of arms), set to 0 on maps aim +mp_friendly_grenade_damage 1 / / 0 - tp grenades do not hurt (but zabiebraja armor), 1 - grenades Rania players from the team (standard) +mp_friendlyfire 1 / / 0 - how to shoot his latter did not hurt, 1 - hurt their (standard) +mp_ghostfrequency 0.1 / / refresh rate for observer status +mp_hostagepenalty 0 / / number to kill the hostages after which you get a kick, 0 - disabled +mp_limitteams 0 / / how many players can be unbalanced by jedej of the teams, 0 - no limit, 2 - maxymalnie may be in one of the teams 2 players More +mp_maxrounds 0 / / maximum number of rounds to play, 0 - no limit (standard) +mp_mirrordamage 0 / / how to hit her so jabys hit each other, default 0, 1 - turn on (not recommended) +mp_roundtime 2.5 / / duration in minutes of the round, the standard is 3 minutes, or 1.75 for a quick game (not to get bored on the sown), values from 1 to 9 +mp_startmoney 800 / / number of cash at the beginning of the round +mp_timelimit 20 / / limit play time on a map (after the change of the map), in minutes, set to 0 for no time limit, +mp_tkpunish 0 / / punishment of death at the beginning of the next round for killing her, 0 - no (default), 1 - yes +mp_winlimit 0 / / limit of rounds to win as any team reaches the value is a change in the map, 0 - no limit (standard) +mp_payerid 0 / / displays the player's nickname after nacelowaniu, 0 - see wsztkich (in color) (standard), 1 - only tp and hostages, 2 - no one shows +pausable 0 / / 0 (standard) does not allow players to pause the game on the server, 1 - allows time for the games in August so sets +sv_maxspeed 320 / / maximum speed gear player, standard (320) + +////////////////////////////////////////////////// ///////////////////////////////////////////////// +/ / Observers + +allow_spectators 1 / / allow the observer (a person completely not playing), 1 - yes (standard), 0 - no, +mp_fadetoblack 0 / / 1 - the screen gets dark after the death of a player (required for some games), 0 - without darkening +mp_forcecamera 1 / / overextend spectarora for: 0 - do not overextend, 1 - view from the eyes and chase the player mode, 2 - only the player's eye view, the recommended value of 1 or 2 +mp_forcechasecam 1 / / 0 - player can fly around the map, 1 - you can watch your typo tp, 2 - the client does not move from place where he died + +mp_autokick 0 / / auto-kicking for killing their long, or not sure the place of moving the +sv_timeout 90 / / time in seconds, if a player does not respond at this time is considered to be disconnected from the server (as someone in August Comp zwiesi / die for moments of connection) +sv_spectatormaxspeed 900 / / maximum flying speed of the observer, normally a player runs at a speed of 320, the standard is 500 + + +////////////////////////////////////////////////// ///////////////////////////////////////////////// +/ / Other + +mp_autocrosshair 0 / / default 0 +sv_aim 0 / / 0 ((standard) autocelowanie off, 1 - enable auto aim (not recommended) +sv_airaccelerate 10 / / akcleracja in the air (bunnyjump), the value from 0 to 10, 10 standard +sv_airmove 1 / / allows you to move in the air (bunnyjump), 1 - yes (standard), 0 - no +sv_challengetime 180 / / time in seconds if the player does not connect to the game at that time will be deemed to be disconnected, increase if the players have a lot of weak Comps or recover from a server: D +sv_cheats 0 / / 0 (standard) does not allow commands give weapon, god, noclip and stuff, 1 - to developers or serwero maps for fun +sv_clienttrace 1 / / (standard) 1 +sv_friction 4 / / slip on the surface while running, has an effect on the speed of the complete arrest in August, 4 (standard) +sv_gravity 800 / / gravity, default 800, the more the harder it is to jump (with some small values of the descent of the stair is a lethal grenades fall down under their feet) +/ / 0 off gravitation - as it already does not jump fall +/ / Value of 100, 200, 400 sanajczesciej found on servers niekonwecjonalnych + +////////////////////////////////////////////////// ///////////////////////////////////////////////// +/ / Status of the server via web +/ / Check the status of the server also consumes little CPU and join together, the default values are adequate + +max_queries_global 20 / / how often you can check the status of the total server +max_queries_sec 3 / / how often the customer can check the status of the server (all seeing eye, scripts www) +max_queries_window 30 / / size of the time window to check the requests, as you are having problems in HLSW timeout set to 10 + + + +////////////////////////////////////////////////// ///////////////////////////////////////////////// +/ / Extra configs +/ / Exec addons / wwcl / scripts / wwcl_config.cfg / / do confgi wwcl (if you have this plugin, and how not to do wrong will not happen) +/ / Exec addons / cdeath / cdeath.cfg / / do confgi Cheating-Death (if you have this plugin, and how not to do wrong will not happen) + + + +Say server settings loaded +/ / End \ No newline at end of file diff --git a/Call of Duty 4/Server Configs/Custom Server Config 6.txt b/Call of Duty 4/Server Configs/Custom Server Config 6.txt new file mode 100755 index 0000000..fd0d6b5 --- /dev/null +++ b/Call of Duty 4/Server Configs/Custom Server Config 6.txt @@ -0,0 +1,422 @@ +//****************************************************************************** +// Call of Duty 4 - Config by Tally and Joker +//****************************************************************************** +//****************************************************************************** +// Public Information +//****************************************************************************** +sets sv_hostname "Your Server Name" +sets _Admin "admin" +sets _Email "admin AT yoursite DOT com" +sets _Website "http://www.cod4boards.com" +sets _Location "US" +sets _Irc "" +sets _Mod "Your fs_game" +sets _ModVer "1.0" +sets _ModUpdate "3Right Now" +sets _Maps "COD2 Stock" +set scr_motd "cod4boards.com" + +//****************************************************************************** +// Common Server Settings +//****************************************************************************** +// Log Settings +set g_logsync "2" // 0=no log, 1=buffered, 2=continuous, 3=append +set logfile "1" // 0 = NO log, 1 = log file enabled +set g_log "games_mp.log" // Name of log file, default is games_mp.log +set sv_log_damage "1" + +// Network options +//set net_ip "1.2.3.4" // Set your servers IP address +//set net_port "28960" // Set your port number +set com_hunkMegs "512" +set net_noipx "1" // Allow ONLY tcp/ip protocol, player/server communications + +// Server Network Mode +set dedicated "2" // 0 = Listen, 1 = LAN, 2 = Internet + +// Master servers +set sv_master1 "cod2master.activision.com" +set sv_master2 "cod2authorize.activision.com" +set sv_master3 "cod2master.infinityward.com" +set sv_master3 "cod2update.activision.com" +set sv_master4 "master.gamespy.com:28960" +set sv_master5 "master0.gamespy.com" +set sv_master6 "master1.gamespy.com" +set sv_master7 "clanservers.net" +set sv_gamespy "1" + +// Password Settings +set rcon_password "somepass" // RCON must supply pw to use +set sv_privatePassword "" // Private slots, non-public slots + +// The following can be used to lock out the server so that only those +// players that have been provide the password can connect. Good for +// matches, practices, etc. +set g_password "" + +// Player slots setup +set sv_maxclients "32" // MAX server player slots, this is TOTAL player slots +set sv_privateclients "" // Number of private player slots, maxclients - privateclients = public slots + +// Ping +set sv_minPing "0" // MIN player ping on CONNECT, any lower and player isnt allowed to connect +set sv_maxping "350" // MAX player ping on CONNECT, any higher and player isnt allowed to connect + +// Client Download Settings. (0=off/1=on) Used for MODs and custom maps +// See included Quick Setup Guide for instructions. +set sv_allowdownload "1" +seta sv_wwwDownload "1" +seta sv_wwwBaseURL "http://www.xxx.xxx.xx" +seta sv_wwwDlDisconnected "1" + +// Rate +set sv_maxRate "5000" + +// FPS +//set sv_fps "20" + +// Drop inactive players +set sv_timeout "300" +set sv_zombietime "1" +set g_inactivity "0" +set g_inactivityspectator "0" + +// AntiFlooding Settings +set sv_floodProtect "1" +set sv_reconnectlimit "3" + +// Anti Cheat Settings +set sv_disableClientConsole "0" +set cl_autocmd "0" +set sv_cheats "0" +set sv_pure "1" +set g_banIPs "" +set g_no_script_spam "1" +set sv_punkbuster "0" + +// Temporary Ban duration, in seconds +set sv_kickBanTime "3600" + +// In-game voice communication system +set sv_voice "0" +set sv_voiceQuality "1" +set voice_deadChat "0" +set voice_global "0" +set voice_localEcho "0" +set winvoice_mic_mute "1" + +//****************************************************************************** +// Misc +//****************************************************************************** +set sv_allowAnonymous "0" +set g_antilag "0" +set g_compassShowEnemies "0" +//ui_maxclients 32 + +//****************************************************************************** +// limits the number of players that can choose each class type +//****************************************************************************** +set class_assault_limit 99 +set class_specops_limit 99 +set class_heavygunner_limit 99 +set class_demolitions_limit 99 +set class_sniper_limit 99 + +//****************************************************************************** +// perks +//****************************************************************************** +set perk_allow_specialty_parabolic 1 +set perk_allow_specialty_gpsjammer 1 +set perk_allow_specialty_holdbreath 1 +set perk_allow_specialty_quieter 1 +set perk_allow_specialty_longersprint 1 +set perk_allow_specialty_detectexplosive 1 +set perk_allow_specialty_explosivedamage 1 +set perk_allow_specialty_pistoldeath 1 +set perk_allow_specialty_grenadepulldeath 1 +set perk_allow_specialty_bulletdamage 1 +set perk_allow_specialty_bulletpenetration 1 +set perk_allow_specialty_bulletaccuracy 1 +set perk_allow_specialty_rof 1 +set perk_allow_specialty_fastreload 1 +set perk_allow_specialty_extraammo 1 +set perk_allow_specialty_armorvest 1 +set perk_allow_specialty_fraggrenade 1 +set perk_allow_specialty_specialgrenade 1 +set perk_allow_c4_mp 1 +set perk_allow_claymore_mp 1 +set perk_allow_rpg_mp 1 + +//****************************************************************************** +// assault class default loadout +//****************************************************************************** +set class_assault_primary m16 +set class_assault_primary_attachment gl +set class_assault_secondary beretta +set class_assault_secondary_attachment none +set class_assault_perk1 specialty_null +set class_assault_perk2 specialty_bulletdamage +set class_assault_perk3 specialty_longersprint +set class_assault_grenade concussion_grenade +set class_assault_camo camo_none +set class_assault_frags 1 +set class_assault_special 1 + +//****************************************************************************** +// specops class default loadout +//****************************************************************************** +set class_specops_primary mp5 +set class_specops_primary_attachment none +set class_specops_secondary usp +set class_specops_secondary_attachment silencer +set class_specops_perk1 c4_mp +set class_specops_perk2 specialty_explosivedamage +set class_specops_perk3 specialty_bulletaccuracy +set class_specops_grenade flash_grenade +set class_specops_camo camo_none +set class_specops_frags 1 +set class_specops_special 1 + +//****************************************************************************** +// heavygunner class default loadout +//****************************************************************************** +set class_heavygunner_primary saw +set class_heavygunner_primary_attachment none +set class_heavygunner_secondary usp +set class_heavygunner_secondary_attachment none +set class_heavygunner_perk1 specialty_specialgrenade +set class_heavygunner_perk2 specialty_armorvest +set class_heavygunner_perk3 specialty_bulletpenetration +set class_heavygunner_grenade concussion_grenade +set class_heavygunner_camo camo_none +set class_heavygunner_frags 1 +set class_heavygunner_special 1 + +//****************************************************************************** +// demolitions class default loadout +//****************************************************************************** +set class_demolitions_primary winchester1200 +set class_demolitions_primary_attachment none +set class_demolitions_secondary beretta +set class_demolitions_secondary_attachment none +set class_demolitions_perk1 rpg_mp +set class_demolitions_perk2 specialty_explosivedamage +set class_demolitions_perk3 specialty_longersprint +set class_demolitions_grenade smoke_grenade +set class_demolitions_camo camo_none +set class_demolitions_frags 1 +set class_demolitions_special 1 + +//****************************************************************************** +// sniper class default loadout +//****************************************************************************** +set class_sniper_primary m40a3 +set class_sniper_primary_attachment none +set class_sniper_secondary beretta +set class_sniper_secondary_attachment silencer +set class_sniper_perk1 specialty_specialgrenade +set class_sniper_perk2 specialty_bulletdamage +set class_sniper_perk3 specialty_bulletpenetration +set class_sniper_grenade flash_grenade +set class_sniper_camo camo_none +set class_sniper_frags 1 +set class_sniper_special 1 + +set class_assault_movespeed 0.95 +set class_specops_movespeed 1.00 +set class_heavygunner_movespeed 0.875 +set class_demolitions_movespeed 1.00 +set class_sniper_movespeed 1.00 + +set scr_enable_nightvision 1 +set scr_enable_music 1 +set scr_enable_hiticon 1 + +//****************************************************************************** +// Enables Dropping of Specified Weapon Class +//****************************************************************************** +set class_assault_allowdrop 1 +set class_specops_allowdrop 1 +set class_heavygunner_allowdrop 1 +set class_demolitions_allowdrop 1 +set class_sniper_allowdrop 1 + +//****************************************************************************** +// Assault Rifles +//****************************************************************************** +set weap_allow_m16 1 +set weap_allow_ak47 1 +set weap_allow_m4 1 +set weap_allow_g3 1 +set weap_allow_g36c 1 +set weap_allow_m14 1 +set weap_allow_mp44 1 + +//****************************************************************************** +// Assault Attachments +//****************************************************************************** +set attach_allow_assault_none 1 +set attach_allow_assault_gl 1 +set attach_allow_assault_reflex 1 +set attach_allow_assault_silencer 1 +set attach_allow_assault_acog 1 + +//****************************************************************************** +// SMG +//****************************************************************************** +set weap_allow_mp5 1 +set weap_allow_skorpion 1 +set weap_allow_uzi 1 +set weap_allow_ak74u 1 +set weap_allow_p90 1 + +//****************************************************************************** +// SMG Attachments +//****************************************************************************** +set attach_allow_smg_none 1 +set attach_allow_smg_reflex 1 +set attach_allow_smg_silencer 1 +set attach_allow_smg_acog 1 + +//****************************************************************************** +// Shotguns +//****************************************************************************** +set weap_allow_m1014 1 +set weap_allow_winchester1200 1 + +//****************************************************************************** +// Shotgun Attachments +//****************************************************************************** +set attach_allow_shotgun_none 1 +set attach_allow_shotgun_reflex 1 +set attach_allow_shotgun_grip 1 + +//****************************************************************************** +// LMG +//****************************************************************************** +set weap_allow_saw 1 +set weap_allow_rpd 1 +set weap_allow_m60e4 1 + +//****************************************************************************** +// LMG Attachments +//****************************************************************************** +set attach_allow_lmg_none 1 +set attach_allow_lmg_reflex 1 +set attach_allow_lmg_grip 1 +set attach_allow_lmg_acog 1 + +//****************************************************************************** +// Sniper Rifles +//****************************************************************************** +set weap_allow_dragunov 1 +set weap_allow_m40a3 1 +set weap_allow_barrett 1 +set weap_allow_remington700 1 +set weap_allow_m21 1 + +//****************************************************************************** +// Sniper Attachments +//****************************************************************************** +set attach_allow_sniper_none 1 +set attach_allow_sniper_acog 1 + +//****************************************************************************** +// Pistols +//****************************************************************************** +set weap_allow_beretta 1 +set weap_allow_colt45 1 +set weap_allow_usp 1 +set weap_allow_deserteagle 1 +set weap_allow_deserteaglegold 1 + +//****************************************************************************** +// Pistol Attachments +//****************************************************************************** +set attach_allow_pistol_none 1 +set attach_allow_pistol_silencer 1 + +//****************************************************************************** +// Grenades +//****************************************************************************** +set weap_allow_frag_grenade 1 +set weap_allow_concussion_grenade 1 +set weap_allow_flash_grenade 1 +set weap_allow_smoke_grenade 1 + +//****************************************************************************** +// First gametype to load +// "dm" - free for all deathmatch +// "dom" - domination +// "koth" - headquarters +// "sab" - sabotage +// "sd" - search & destroy +// "war" - team deathmatch +//****************************************************************************** +set g_gametype "dm" + +//****************************************************************************** +// DM -- FREE FOR ALL DEATHMATCH +//****************************************************************************** +set sv_mapRotation "gametype dm map mp_backlot gametype dm map mp_bloc gametype dm map mp_bog gametype dm map mp_cargoship + +gametype dm map mp_citystreets gametype dm map mp_convoy gametype dm map mp_countdown gametype dm map mp_crash gametype + +dm map mp_crossfire gametype dm map mp_farm gametype dm map mp_overgrown gametype dm map mp_pipeline gametype dm map + +mp_shipment gametype dm map mp_showdown gametype dm map mp_strike gametype dm map mp_vacant" + +//****************************************************************************** +// DOM -- DOMINATION +//****************************************************************************** +//set sv_mapRotation "gametype dom map mp_backlot gametype dom map mp_bloc gametype dom map mp_bog gametype dom map + +mp_cargoship gametype dom map mp_citystreets gametype dom map mp_convoy gametype dom map mp_countdown gametype dom map + +mp_crash gametype dom map mp_crossfire gametype dom map mp_farm gametype dom map mp_overgrown gametype dom map mp_pipeline + +gametype dom map mp_shipment gametype dom map mp_showdown gametype dom map mp_strike gametype dom map mp_vacant" + +//****************************************************************************** +// KOTH -- HEADQUARTERS +//****************************************************************************** +//set sv_mapRotation "gametype koth map mp_backlot gametype koth map mp_bloc gametype koth map mp_bog gametype koth map + +mp_cargoship gametype koth map mp_citystreets gametype koth map mp_convoy gametype koth map mp_countdown gametype koth map + +mp_crash gametype koth map mp_crossfire gametype koth map mp_farm gametype koth map mp_overgrown gametype koth map mp_pipeline + +gametype koth map mp_shipment gametype koth map mp_showdown gametype koth map mp_strike gametype koth map mp_vacant" + +//****************************************************************************** +// SAB -- SABOTAGE +//****************************************************************************** +//set sv_mapRotation "gametype sab map mp_backlot gametype sab map mp_bloc gametype sab map mp_bog gametype sab map + +mp_cargoship gametype sab map mp_citystreets gametype sab map mp_convoy gametype sab map mp_countdown gametype sab map + +mp_crash gametype sab map mp_crossfire gametype sab map mp_farm gametype sab map mp_overgrown gametype sab map mp_pipeline + +gametype sab map mp_shipment gametype sab map mp_showdown gametype sab map mp_strike gametype sab map mp_vacant" + +//****************************************************************************** +// SD -- SEARCH & DESTROY +//****************************************************************************** +//set sv_mapRotation "gametype sd map mp_backlot gametype sd map mp_bloc gametype sd map mp_bog gametype sd map mp_cargoship + +gametype sd map mp_citystreets gametype sd map mp_convoy gametype sd map mp_countdown gametype sd map mp_crash gametype sd + +map mp_crossfire gametype sd map mp_farm gametype sd map mp_overgrown gametype sd map mp_pipeline gametype sd map + +mp_shipment gametype sd map mp_showdown gametype sd map mp_strike gametype sd map mp_vacant" + +//****************************************************************************** +// WAR -- TEAM DEATH MATCH +//****************************************************************************** +//set sv_mapRotation "gametype war map mp_backlot gametype war map mp_bloc gametype war map mp_bog gametype war map + +mp_cargoship gametype war map mp_citystreets gametype war map mp_convoy gametype war map mp_countdown gametype war map + +mp_crash gametype war map mp_crossfire gametype war map mp_farm gametype war map mp_overgrown gametype war map mp_pipeline + +gametype war map mp_shipment gametype war map mp_showdown gametype war map mp_strike gametype war map mp_vacant" \ No newline at end of file diff --git a/Call of Duty 4/Server Configs/Custom Server Config 7.txt b/Call of Duty 4/Server Configs/Custom Server Config 7.txt new file mode 100755 index 0000000..02a3a68 --- /dev/null +++ b/Call of Duty 4/Server Configs/Custom Server Config 7.txt @@ -0,0 +1,38 @@ +seta sv_punkbuster 1 +wait +pb_sv_enable + +// Server name +set sv_hostname "your server name" //Change this to whatever you want your server to be named in the server browser + +// Server password +set g_password "" // blank means NO password + +// Rconpassword +set rcon_password "" // Change this to your rcon password! + +// Maximum Clients +set sv_maxclients "32" +//set sv_privateclients "6" + +// Max Ping +set sv_maxping "120" + +// Rate +set sv_maxRate "25000" + +// Map_rotation +set sv_mapRotation "gametype war map mp_backlot gametype war map mp_bloc gametype war map mp_bog gametype war map mp_cargoship gametype war map mp_citystreets gametype war map mp_convoy gametype war map mp_countdown gametype war map mp_crash gametype war map mp_crossfire gametype war map mp_farm gametype war map mp_overgrown gametype war map mp_pipeline gametype war map mp_showdown gametype war map mp_strike gametype war map mp_vacant" + +//set sv_maprotationcurrent "" + +// Master servers +set sv_master1 "cod4master.activision.com" +set sv_master2 "cod4authorize.activision.com" +set sv_master3 "cod4master.infinityward.com" +set sv_master3 "cod4update.activision.com" +set sv_master4 "master.gamespy.com:28960" +set sv_master5 "master0.gamespy.com" +set sv_master6 "master1.gamespy.com" +set sv_master7 "clanservers.net" +set sv_gamespy "1" \ No newline at end of file diff --git a/Call of Duty 4/Server Configs/Custom Server Config 8.txt b/Call of Duty 4/Server Configs/Custom Server Config 8.txt new file mode 100755 index 0000000..9b0553d --- /dev/null +++ b/Call of Duty 4/Server Configs/Custom Server Config 8.txt @@ -0,0 +1,352 @@ +// Call of Duty 4 - Config by Taher furious + +// Public Information + +sets sv_hostname "xxxxxx" +set scr_motd "Welcome to xxxxxx" + +// Common Server Settings + +// Log Settings +set g_logsync 2 +set logfile 1 +set g_log games_mp.log +set sv_log_damage 1 + +// Network options +//set net_ip 1.2.3.4 +//set net_port 28960 +set com_hunkMegs 512 +set net_noipx 1 + +// Server Network Mode +set dedicated 0 + +// Master servers + +set g_gametype war +set scr_war_scorelimit 1000 +set scr_war_timelimit 10 + +set g_allowvote 0 +set scr_allow_vote 0 + +// Password Settings + +set rcon_password furious +set sv_privatePassword "" +set g_password "" + +// Player slots setup +set sv_maxclients 11 +set sv_privateclients "" + +// Ping +set sv_minPing 0 +set sv_maxping 999 + +// Client Download Settings.Used for MODs and custom maps +set sv_allowdownload 1 +seta sv_wwwDownload 1 +seta sv_wwwBaseURL +seta sv_wwwDlDisconnected 1 + +// Rate +set sv_maxRate 30000 + +// FPS +set sv_fps 150 + +// Drop inactive players +set sv_timeout 300 +set sv_zombietime 1 +set g_inactivity 0 +set g_inactivityspectator 0 + +// AntiFlooding Settings +set sv_floodProtect 1 +set sv_reconnectlimit 3 + +// Anti Cheat Settings +set sv_disableClientConsole 0 +set cl_autocmd 0 +set sv_cheats 0 +set sv_pure 1 +set g_banIPs "" +set g_no_script_spam 1 +set sv_punkbuster 0 + +// Temporary Ban duration, in seconds +set sv_kickBanTime 3600 + +// In-game voice communication system +set sv_voice 1 +set sv_voiceQuality 1 +set voice_deadChat 1 +set voice_global 0 +set voice_localEcho 0 +set winvoice_mic_mute 1 + +// Misc + +set sv_allowAnonymous 0 +set g_antilag 0 +set g_compassShowEnemies 0 +//ui_maxclients 32 + +// player +set scr_player_maxhealth 100 +set scr_player_suicidespawndelay 0 +set scr_player_healthregentime 5 +set scr_player_forcerespawn 1 +set scr_player_sprinttime 4 + +// teams +set scr_teambalance 0 +set scr_team_fftype 1 +set scr_team_teamkillspawndelay 0 +set scr_team_kickteamkillers 0 +set scr_team_respawntime 0 + +// UI +set scr_hardcore 0 +set scr_oldschool_mw 0 +set ui_hud_obituaries 1 +set ui_hud_showobjicons 1 + +// gameplay +set scr_game_allowkillcam 0 +set scr_game_onlyheadshots 0 +set scr_game_deathpointloss 0 +set scr_game_suicidepointloss 0 +set scr_team_teamkillpointloss 1 +set scr_game_spectatetype 1 +set scr_game_forceuav 0 +set scr_game_hardpoints 0 + +// hardpoints +set scr_hardpoint_allowartillery 0 +set scr_hardpoint_allowuav 0 +set scr_hardpoint_allowhelicopter 0 + +// limits the number of players that can choose each class type + +set class_assault_limit 99 +set class_specops_limit 99 +set class_heavygunner_limit 99 +set class_demolitions_limit 99 +set class_sniper_limit 1 + +// perks + +set perk_allow_specialty_parabolic 1 +set perk_allow_specialty_gpsjammer 0 +set perk_allow_specialty_holdbreath 1 +set perk_allow_specialty_quieter 1 +set perk_allow_specialty_longersprint 1 +set perk_allow_specialty_detectexplosive 1 +set perk_allow_specialty_explosivedamage 1 +set perk_allow_specialty_pistoldeath 0 +set perk_allow_specialty_grenadepulldeath 0 +set perk_allow_specialty_bulletdamage 1 +set perk_allow_specialty_bulletpenetration 1 +set perk_allow_specialty_bulletaccuracy 1 +set perk_allow_specialty_rof 1 +set perk_allow_specialty_fastreload 1 +set perk_allow_specialty_extraammo 1 +set perk_allow_specialty_armorvest 1 +set perk_allow_specialty_fraggrenade 1 +set perk_allow_specialty_specialgrenade 1 +set perk_allow_c4_mp 1 +set perk_allow_claymore_mp 1 +set perk_allow_rpg_mp 0 + +// class movespeed + +set class_assault_movespeed 0.95 +set class_specops_movespeed 1.00 +set class_heavygunner_movespeed 0.875 +set class_demolitions_movespeed 1.00 +set class_sniper_movespeed 1.00 + +set scr_enable_nightvision 1 +set scr_enable_music 0 +set scr_enable_hiticon 1 + +// Enables Dropping of Specified Weapon Class + +set class_assault_allowdrop 1 +set class_specops_allowdrop 1 +set class_heavygunner_allowdrop 1 +set class_demolitions_allowdrop 1 +set class_sniper_allowdrop 1 + +// Assault Rifles + +set weap_allow_m16 1 +set weap_allow_ak47 1 +set weap_allow_m4 1 +set weap_allow_g3 1 +set weap_allow_g36c 1 +set weap_allow_m14 1 +set weap_allow_mp44 1 + +// Assault Attachments + +set attach_allow_assault_none 1 +set attach_allow_assault_gl 0 +set attach_allow_assault_reflex 1 +set attach_allow_assault_silencer 1 +set attach_allow_assault_acog 0 + +// SMG + +set weap_allow_mp5 1 +set weap_allow_skorpion 1 +set weap_allow_uzi 1 +set weap_allow_ak74u 1 +set weap_allow_p90 1 + +// SMG Attachments + +set attach_allow_smg_none 1 +set attach_allow_smg_reflex 1 +set attach_allow_smg_silencer 1 +set attach_allow_smg_acog 0 + +// Shotguns + +set weap_allow_m1014 1 +set weap_allow_winchester1200 1 + +// Shotgun Attachments + +set attach_allow_shotgun_none 1 +set attach_allow_shotgun_reflex 1 +set attach_allow_shotgun_grip 1 + +// LMG + +set weap_allow_saw 1 +set weap_allow_rpd 1 +set weap_allow_m60e4 1 + +// LMG Attachments + +set attach_allow_lmg_none 1 +set attach_allow_lmg_reflex 1 +set attach_allow_lmg_grip 1 +set attach_allow_lmg_acog 0 + +// Sniper Rifles + +set weap_allow_dragunov 1 +set weap_allow_m40a3 1 +set weap_allow_barrett 1 +set weap_allow_remington700 1 +set weap_allow_m21 1 + +// Sniper Attachments +/ +set attach_allow_sniper_none 1 +set attach_allow_sniper_acog 0 + +// Pistols + +set weap_allow_beretta 1 +set weap_allow_colt45 1 +set weap_allow_usp 1 +set weap_allow_deserteagle 1 +set weap_allow_deserteaglegold 1 + +// Pistol Attachments + +set attach_allow_pistol_none 1 +set attach_allow_pistol_silencer 1 + +// Grenades + +set weap_allow_frag_grenade 1 +set weap_allow_concussion_grenade 0 +set weap_allow_flash_grenade 1 +set weap_allow_smoke_grenade 1 + +// assault class default loadout + +set class_assault_primary m16 +set class_assault_primary_attachment reflex +set class_assault_secondary beretta +set class_assault_secondary_attachment none +set class_assault_perk1 specialty_fraggrenade +set class_assault_perk2 specialty_bulletdamage +set class_assault_perk3 specialty_bulletaccuracy +set class_assault_grenade flash_grenade +set class_assault_camo camo_none +set class_assault_frags 1 +set class_assault_special 1 + +// specops class default loadout + +set class_specops_primary mp5 +set class_specops_primary_attachment none +set class_specops_secondary usp +set class_specops_secondary_attachment silencer +set class_specops_perk1 specialty_fraggrenade +set class_specops_perk2 specialty_bulletdamage +set class_specops_perk3 specialty_bulletaccuracy +set class_specops_grenade flash_grenade +set class_specops_camo camo_none +set class_specops_frags 1 +set class_specops_special 1 + +// heavygunner class default loadout + +set class_heavygunner_primary saw +set class_heavygunner_primary_attachment none +set class_heavygunner_secondary usp +set class_heavygunner_secondary_attachment none +set class_heavygunner_perk1 specialty_specialgrenade +set class_heavygunner_perk2 specialty_bulletdamage +set class_heavygunner_perk3 specialty_bulletpenetration +set class_heavygunner_grenade flash_grenade +set class_heavygunner_camo camo_none +set class_heavygunner_frags 1 +set class_heavygunner_special 1 + +// demolitions class default loadout + +set class_demolitions_primary winchester1200 +set class_demolitions_primary_attachment none +set class_demolitions_secondary beretta +set class_demolitions_secondary_attachment none +set class_demolitions_perk1 specialty_fraggrenade +set class_demolitions_perk2 specialty_explosivedamage +set class_demolitions_perk3 specialty_longersprint +set class_demolitions_grenade smoke_grenade +set class_demolitions_camo camo_none +set class_demolitions_frags 1 +set class_demolitions_special 1 + +// sniper class default loadout + +set class_sniper_primary m40a3 +set class_sniper_primary_attachment none +set class_sniper_secondary beretta +set class_sniper_secondary_attachment silencer +set class_sniper_perk1 specialty_fraggrenade +set class_sniper_perk2 specialty_bulletdamage +set class_sniper_perk3 specialty_bulletpenetration +set class_sniper_grenade flash_grenade +set class_sniper_camo camo_none +set class_sniper_frags 1 +set class_sniper_special 1 + + +// First gametype to load +// "dm" - free for all deathmatch +// "dom" - domination +// "koth" - headquarters +// "sab" - sabotage +// "sd" - search & destroy +// "war" - team deathmatch +//****************************************************************************** \ No newline at end of file diff --git a/Call of Duty 4/Server Configs/Custom Server Config 9.txt b/Call of Duty 4/Server Configs/Custom Server Config 9.txt new file mode 100755 index 0000000..ab4ccf6 --- /dev/null +++ b/Call of Duty 4/Server Configs/Custom Server Config 9.txt @@ -0,0 +1,38 @@ +//promod live v2 - sample server config v1.1 +//for public ruleset customizations, see z_custom_ruleset.iwd + +//info strings +sets _Admin "" +sets _Email "" +sets _Website "" +sets _Location "" +sets sv_hostname "Promod LIVE V2.04" + +//scorebot info strings, no need to modify +sets __promod_attack_score "" // attackers info, score +sets __promod_defence_score "" // defenders info, score +sets __promod_ticker "" // the info ticker +sets __promod_version "" // displays promod version +sets __promod_mode "" // displays promod mode + +//password settings +set rcon_password "xxx" // remote console password +set sv_privatePassword "" // private slots password +set g_password "" // server password + +//player slots, maxclients - privateclients = public slots +set sv_maxclients 11 // maximum number of clients +set sv_privateclients "" // number of private slots + +//client download settings +seta sv_wwwDownload "0" // enable download redirection +seta sv_wwwBaseURL "" // defines url to download from +seta sv_wwwDlDisconnected "0" // disconnect clients while downloading + +//map rotation, change to your liking +set sv_maprotationcurrent "" +set sv_mapRotation "set sv_mapRotation "gametype sd map mp_backlot gametype sd map mp_crash gametype sd map mp_crossfire gametype sd map mp_citystreets gametype sd map mp_strike" + +//promod settings +set promod_mode "match_mr 12" // promod mode, for a list of promod modes see attached readme in your downloaded promod204 folder(you can change the number of max round by this command) +set promod_enable_scorebot "0" // match-modes only \ No newline at end of file diff --git a/Modern Warfare 2/Commands List.txt b/Modern Warfare 2/Commands List.txt new file mode 100755 index 0000000..08c4f1c --- /dev/null +++ b/Modern Warfare 2/Commands List.txt @@ -0,0 +1,1731 @@ +actionSlotsHide "0" +activeAction "" +ai_corpseCount "16" +aim_accel_turnrate_debug "0" +aim_accel_turnrate_enabled "1" +aim_accel_turnrate_lerp "1200" +aim_aimAssistRangeScale "1" +aim_autoaim_debug "0" +aim_autoaim_enabled "0" +aim_autoaim_lerp "40" +aim_autoaim_region_height "120" +aim_autoaim_region_width "160" +aim_autoAimRangeScale "1" +aim_automelee_debug "0" +aim_automelee_enabled "1" +aim_automelee_lerp "40" +aim_automelee_range "128" +aim_automelee_region_height "240" +aim_automelee_region_width "320" +aim_input_graph_debug "0" +aim_input_graph_enabled "1" +aim_input_graph_index "3" +aim_lockon_debug "0" +aim_lockon_deflection "0.05" +aim_lockon_enabled "1" +aim_lockon_region_height "90" +aim_lockon_region_width "90" +aim_lockon_strength "0.6" +aim_scale_view_axis "1" +aim_slowdown_debug "0" +aim_slowdown_enabled "1" +aim_slowdown_pitch_scale "0.4" +aim_slowdown_pitch_scale_ads "0.5" +aim_slowdown_region_height "90" +aim_slowdown_region_width "90" +aim_slowdown_yaw_scale "0.4" +aim_slowdown_yaw_scale_ads "0.5" +aim_turnrate_pitch "90" +aim_turnrate_pitch_ads "55" +aim_turnrate_yaw "260" +aim_turnrate_yaw_ads "90" +ammoCounterHide "0" +authPort "20800" +authServerName "cod4master.activision.com" +badhost_debug "0" +badhost_endGameIfISuck "1" +badhost_maxDoISuckFrames "300" +badhost_maxHappyPingTime "400" +badhost_minPercentClientsUnhappyToSuck "0.51" +badhost_minTotalClientsForHappyTest "3" +band_12players "384000" +band_18players "580000" +band_2players "64000" +band_4players "128000" +band_8players "256000" +bandwidthtest_announceinterval "200" +bandwidthtest_duration "500" +bandwidthtest_enable "1" +bandwidthtest_fudge "1" +bandwidthtest_ingame_enable "1" +bandwidthtest_ingame_fudge "1" +bandwidthtest_maxpacketsize "1000" +bandwidthtest_quota "0.5" +bandwidthtest_rounds "10" +bandwidthtest_scalar "2" +bandwidthtest_timeout "1500" +bg_aimSpreadMoveSpeedThreshold "11" +bg_bulletExplDmgFactor "1" +bg_bulletExplRadius "250" +bg_debugProne "0" +bg_fallDamageMaxHeight "300" +bg_fallDamageMinHeight "128" +bg_foliagesnd_fastinterval "500" +bg_foliagesnd_maxspeed "180" +bg_foliagesnd_minspeed "40" +bg_foliagesnd_resetinterval "500" +bg_foliagesnd_slowinterval "1500" +bg_forceDualWield "0" +bg_forceExplosiveBullets "0" +bg_ladder_yawcap "100" +bg_legYawTolerance "20" +bg_lowGravity "800" +bg_maxGrenadeIndicatorSpeed "100" +bg_prone_yawcap "85" +bg_shieldHitEncodeHeightVM "-10 +bg_shieldHitEncodeHeightWorld "-25 +bg_shieldHitEncodeWidthVM "-16 +bg_shieldHitEncodeWidthWorld "-14 +bg_shock_lookControl "1" +bg_shock_lookControl_fadeTime "2" +bg_shock_lookControl_maxpitchspeed "90" +bg_shock_lookControl_maxyawspeed "90" +bg_shock_lookControl_mousesensitivityscale "0.5" +bg_shock_movement "1" +bg_shock_screenBlurBlendFadeTime "1" +bg_shock_screenBlurBlendTime "0.4" +bg_shock_screenFlashShotFadeTime "1" +bg_shock_screenFlashWhiteFadeTime "1" +bg_shock_screenType "blurred" +bg_shock_sound "1" +bg_shock_soundDryLevel "1" +bg_shock_soundEnd "shellshock_end" +bg_shock_soundEndAbort "shellshock_end_abort" +bg_shock_soundFadeInTime "0.25" +bg_shock_soundFadeOutTime "2.5" +bg_shock_soundLoop "shellshock_loop" +bg_shock_soundLoopEndDelay "-3" +bg_shock_soundLoopFadeTime "1.5" +bg_shock_soundLoopSilent "shellshock_loop_silent" +bg_shock_soundModEndDelay "2" +bg_shock_soundRoomType "generic" +bg_shock_soundWetLevel "0.5" +bg_shock_viewKickFadeTime "3" +bg_shock_viewKickPeriod "0.75" +bg_shock_viewKickRadius "0.05" +bg_shock_volume_ambdist1 "0.5" +bg_shock_volume_ambdist2 "0.5" +bg_shock_volume_ambient "0.5" +bg_shock_volume_announcer "0.5" +bg_shock_volume_auto "0.5" +bg_shock_volume_auto2 "0.5" +bg_shock_volume_auto2d "0.5" +bg_shock_volume_autodog "0.5" +bg_shock_volume_body "0.5" +bg_shock_volume_body2d "0.5" +bg_shock_volume_bulletimpact "0.5" +bg_shock_volume_bulletwhizby "0.5" +bg_shock_volume_effects1 "0.5" +bg_shock_volume_effects2 "0.5" +bg_shock_volume_element "0.5" +bg_shock_volume_explosiveimpact "0.5" +bg_shock_volume_hurt "0.5" +bg_shock_volume_item "0.5" +bg_shock_volume_local "0.5" +bg_shock_volume_local2 "0.5" +bg_shock_volume_local3 "0.5" +bg_shock_volume_menu "0.5" +bg_shock_volume_mission "0.5" +bg_shock_volume_music "0.5" +bg_shock_volume_musicnopause "0.5" +bg_shock_volume_nonshock "0.5" +bg_shock_volume_physics "0.5" +bg_shock_volume_player1 "0.5" +bg_shock_volume_player2 "0.5" +bg_shock_volume_reload "0.5" +bg_shock_volume_reload2d "0.5" +bg_shock_volume_shellshock "0.5" +bg_shock_volume_vehicle "0.5" +bg_shock_volume_vehiclelimited "0.5" +bg_shock_volume_voice "0.5" +bg_shock_volume_weapon "0.5" +bg_shock_volume_weapon2d "0.5" +bg_softLandingMaxDamage "0.1" +bg_softLandingMaxHeight "300" +bg_softLandingMinHeight "128" +bg_swingSpeed "0.2" +bg_viewBobAmplitudeBase "0.16" +bg_viewBobAmplitudeDucked "0.0075 +bg_viewBobAmplitudeDuckedAds "0.0075 +bg_viewBobAmplitudeProne "0.02 +bg_viewBobAmplitudeRoll "1.5" +bg_viewBobAmplitudeSprinting "0.02 +bg_viewBobAmplitudeStanding "0.007 +bg_viewBobAmplitudeStandingAds "0.007 +bg_viewBobLag "0.25" +bg_viewBobMax "8" +bg_viewKickMax "90" +bg_viewKickMin "5" +bg_viewKickRandom "0.4" +bg_viewKickScale "0.2" +bg_weaponBobAmplitudeBase "0.16" +bg_weaponBobAmplitudeDucked "0.045 +bg_weaponBobAmplitudeProne "0.02 +bg_weaponBobAmplitudeRoll "1.5" +bg_weaponBobAmplitudeSprinting "0.02 +bg_weaponBobAmplitudeStanding "0.055 +bg_weaponBobLag "0.25" +bg_weaponBobMax "8" +bullet_penetration_enabled "1" +bullet_penetrationMinFxDist "30" +bullet_ricochetBaseChance "0.5" +camera_thirdPerson "0" +camera_thirdPersonAdsTransScale "2" +camera_thirdPersonCrosshairOffset "0.35" +camera_thirdPersonFovScale "0.9" +camera_thirdPersonOffset "-120 +camera_thirdPersonOffsetAds "-60 +camera_thirdPersonOffsetTurretAds "-80 +cameraShakeRemoteHelo_Angles "0.221 +cameraShakeRemoteHelo_Freqs "31 +cameraShakeRemoteHelo_SpeedRange "2000 +cameraShakeRemoteMissile_Angles "0.05 +cameraShakeRemoteMissile_Freqs "42 +cameraShakeRemoteMissile_SpeedRange "1000 +cg_airstrikeKillCamCloseXYDist "24" +cg_airstrikeKillCamCloseZDist "24" +cg_airstrikeKillCamFarBlur "2" +cg_airstrikeKillCamFarBlurDist "300" +cg_airstrikeKillCamFarBlurStart "100" +cg_airstrikeKillCamFov "50" +cg_airstrikeKillCamNearBlur "4" +cg_airstrikeKillCamNearBlurEnd "100" +cg_airstrikeKillCamNearBlurStart "0" +cg_blood "1" +cg_brass "1" +cg_centertime "5" +cg_chatHeight "4" +cg_chatTime "12000" +cg_chatWithOtherTeams "0" +cg_connectionIconSize "0" +cg_constantSizeHeadIcons "0" +cg_crosshairAlpha "1" +cg_crosshairAlphaMin "0.5" +cg_crosshairDynamic "0" +cg_crosshairEnemyColor "1" +cg_crosshairVerticalOffset "0" +cg_cullBulletAngle "50" +cg_cullBullets "1" +cg_cursorHints "4" +cg_deadChatWithDead "0" +cg_deadChatWithTeam "0" +cg_deadHearAllLiving "0" +cg_deadHearTeamLiving "0" +cg_debug_overlay_viewport "0" +cg_debugevents "-1" +cg_debugInfoCornerOffset "0 +cg_debugposition "0" +cg_descriptiveText "1" +cg_dobjdump "-1" +cg_draw2D "1" +cg_drawBreathHint "1" +cg_drawCrosshair "1" +cg_drawCrosshairNames "1" +cg_drawCrosshairNamesPosX "300" +cg_drawCrosshairNamesPosY "180" +cg_drawDamageDirection "1" +cg_drawDamageFlash "0" +cg_drawFPS "Off" +cg_drawFPSLabels "1" +cg_drawFriendlyNames "1" +cg_drawGun "1" +cg_drawHealth "0" +cg_drawMantleHint "1" +cg_drawMaterial "Off" +cg_drawpaused "1" +cg_drawScriptUsage "0" +cg_drawShellshock "1" +cg_drawSnapshot "0" +cg_drawSplatter "0" +cg_drawSplatterTest "0" +cg_drawStatsSource "0" +cg_drawTalk "ALL" +cg_drawThroughWalls "0" +cg_drawTurretCrosshair "1" +cg_drawViewpos "0" +cg_dumpAnims "-1" +cg_enemyNameFadeIn "250" +cg_enemyNameFadeOut "250" +cg_errordecay "100" +cg_everyoneHearsEveryone "0" +cg_explosiveKillCamBackDist "35" +cg_explosiveKillCamGroundBackDist "30" +cg_explosiveKillCamGroundUpDist "15" +cg_explosiveKillCamStopDecelDist "100" +cg_explosiveKillCamStopDist "350" +cg_explosiveKillCamUpDist "5" +cg_explosiveKillCamWallOutDist "10" +cg_explosiveKillCamWallSideDist "30" +cg_flashbangNameFadeIn "1000" +cg_flashbangNameFadeOut "50" +cg_footsteps "1" +cg_fov "65" +cg_fovMin "1" +cg_fovScale "1" +cg_friendlyNameFadeIn "0" +cg_friendlyNameFadeOut "1500" +cg_gameBoldMessageWidth "390" +cg_gameMessageWidth "455" +cg_gun_x "0" +cg_gun_y "0" +cg_gun_z "0" +cg_headIconMinScreenRadius "0.015" +cg_heliKillCamFarBlur "2" +cg_heliKillCamFarBlurDist "300" +cg_heliKillCamFarBlurStart "100" +cg_heliKillCamFov "15" +cg_heliKillCamNearBlur "4" +cg_heliKillCamNearBlurEnd "100" +cg_heliKillCamNearBlurStart "0" +cg_hintFadeTime "100" +cg_hudChatIntermissionPosition "5 +cg_hudChatPosition "5 +cg_hudDamageIconHeight "64" +cg_hudDamageIconInScope "0" +cg_hudDamageIconOffset "128" +cg_hudDamageIconTime "6000" +cg_hudDamageIconWidth "128" +cg_hudGrenadeIconEnabledFlash "0" +cg_hudGrenadeIconHeight "25" +cg_hudGrenadeIconInScope "0" +cg_hudGrenadeIconMaxHeight "104" +cg_hudGrenadeIconMaxRangeFlash "500" +cg_hudGrenadeIconMaxRangeFrag "250" +cg_hudGrenadeIconOffset "50" +cg_hudGrenadeIconWidth "25" +cg_hudGrenadePointerHeight "12" +cg_hudGrenadePointerPivot "12 +cg_hudGrenadePointerPulseFreq "1.7" +cg_hudGrenadePointerPulseMax "1.85" +cg_hudGrenadePointerPulseMin "0.3" +cg_hudGrenadePointerWidth "25" +cg_hudlegacysplitscreenscale "2" +cg_hudMapBorderWidth "2" +cg_hudMapFriendlyHeight "15" +cg_hudMapFriendlyWidth "15" +cg_hudMapPlayerHeight "20" +cg_hudMapPlayerWidth "20" +cg_hudMapRadarLineThickness "0.15" +cg_hudObjectiveTextScale "0.3" +cg_hudProneY "-160" +cg_hudSayPosition "5 +cg_hudsplitscreencompassscale "1.5" +cg_hudsplitscreenstancescale "2" +cg_hudStanceFlash "1 +cg_hudStanceHintPrints "0" +cg_hudVotePosition "5 +cg_invalidCmdHintBlinkInterval "600" +cg_invalidCmdHintDuration "1800" +cg_javelinKillCamCloseZDist "128" +cg_javelinKillCamDownDist "150" +cg_javelinKillCamFov "60" +cg_javelinKillCamLookLerpDist "3000" +cg_javelinKillCamPassDist "50" +cg_javelinKillCamPassTime "5" +cg_javelinKillCamUpDist "200" +cg_killCamDefaultLerpTime "300" +cg_killCamTurretLerpTime "900" +cg_laserlight "1" +cg_levelReverbDryLevel "0.9" +cg_levelReverbEnabled "1" +cg_levelReverbRoomType "city" +cg_levelReverbWetLevel "0.15" +cg_mapLocationselectionCursorSpeed "0.6" +cg_marks_ents_player_only "0" +cg_minCullBulletDist "128" +cg_nopredict "0" +cg_overheadIconSize "0.7" +cg_overheadNamesFarDist "1024" +cg_overheadNamesFarScale "0.75" +cg_overheadNamesFont "2" +cg_overheadNamesGlow "0 +cg_overheadNamesMaxDist "10000" +cg_overheadNamesNearDist "256" +cg_overheadNamesSize "0.5" +cg_overheadRankSize "0.5" +cg_overheadTitlesFont "2" +cg_overheadTitleSize "0.5" +cg_predictItems "1" +cg_predictItemsDuration "5" +cg_remoteMissileKillCamBackDist "300" +cg_remoteMissileKillCamUpDist "60" +cg_rocketKillCamBackDist "70" +cg_rocketKillCamUpDist "10" +cg_scoreboardBannerHeight "35" +cg_scoreboardFont "0" +cg_scoreboardHeaderFontScale "0.35" +cg_scoreboardHeight "435" +cg_scoreboardItemHeight "18" +cg_scoreboardMyColor "1 +cg_scoreboardPingGraph "1" +cg_scoreboardPingHeight "0.7" +cg_scoreboardPingText "0" +cg_scoreboardPingWidth "0.036" +cg_scoreboardRankFontScale "0.25" +cg_scoreboardScrollStep "3" +cg_scoreboardTextOffset "0.5" +cg_scoreboardWidth "500" +cg_ScoresPing_BgColor "0.25098 +cg_ScoresPing_HighColor "0.8 +cg_ScoresPing_Interval "100" +cg_ScoresPing_LowColor "0 +cg_ScoresPing_MaxBars "4" +cg_ScoresPing_MedColor "0.8 +cg_scriptIconSize "0" +cg_showmiss "0" +cg_splatterHitAlpha "1" +cg_splatterHitFadeInTime "0.05" +cg_splatterHitFadeOutTime "0.1" +cg_splatterHitFullInTime "0" +cg_splatterHitInnerAngle "15" +cg_splatterHitInnerRadius "0" +cg_splatterHitOntoScreen "0" +cg_splatterHitOuterAngle "30" +cg_splatterHitOuterRadius "0.6" +cg_splatterTrackAlpha "1" +cg_splatterTrackFadeInTime "0" +cg_splatterTrackFadeOutTime "0.5" +cg_splatterTrackFullInTime "0.3" +cg_splatterTrackIndependent "1" +cg_splatterTrackInnerAngle "5" +cg_splatterTrackInnerRadius "0.4" +cg_splatterTrackOntoScreen "0" +cg_splatterTrackOuterAngle "20" +cg_splatterTrackOuterRadius "0.6" +cg_sprintMeterDisabledColor "0.8 +cg_sprintMeterEmptyColor "0.7 +cg_sprintMeterFullColor "0.8 +cg_subtitleMinTime "3" +cg_subtitleWidthStandard "520" +cg_subtitleWidthWidescreen "520" +cg_teamChatsOnly "0" +cg_thirdPerson "0" +cg_thirdPersonAngle "0" +cg_thirdPersonMode "Fixed" +cg_thirdPersonRange "120" +cg_turretKillCamBackDist "10" +cg_turretKillCamFov "50" +cg_turretKillCamUpDist "10" +cg_viewVehicleInfluence "1" +cg_viewZSmoothingMax "16" +cg_viewZSmoothingMin "1" +cg_viewZSmoothingTime "0.1" +cg_voiceIconSize "0" +cg_watersheeting "1" +cg_waterSheeting_brightness "0" +cg_waterSheeting_contrast "1" +cg_waterSheeting_darkTint "1 +cg_waterSheeting_desaturation "0" +cg_waterSheeting_distortionScaleFactor "0.021961 +cg_waterSheeting_enable "0" +cg_waterSheeting_fadeDuration "2" +cg_waterSheeting_lightTint "0.780261 +cg_waterSheeting_magnitude "0.0655388" +cg_waterSheeting_radius "4.44051" +cg_weapHitCullAngle "45" +cg_weapHitCullEnable "1" +cg_weaponCycleDelay "0" +cg_weaponHintsCoD1Style "1" +cg_weaponVisInterval "4" +cg_youInKillCamSize "6" +cl_analog_attack_threshold "0.8" +cl_anglespeedkey "1.5" +cl_bypassMouseInput "0" +cl_connectionAttempts "15" +cl_connectTimeout "120" +cl_demoBackJump "20000" +cl_demoFastTimescaleSpeed "3" +cl_demoForwardJump "4000" +cl_demoSlowTimescaleSpeed "0.4" +cl_dirSelConvergenceTime "0.1" +cl_freelook "1" +cl_freezeDemo "0" +cl_hudDrawsBehindUI "1" +cl_ingame "0" +cl_maxpackets "30" +cl_maxPing "800" +cl_migrationTimeout "40" +cl_motdString "" +cl_mouseAccel "0" +cl_nodelta "0" +cl_noprint "0" +cl_packetdup "1" +cl_paused "0" +cl_pitchspeed "140" +cl_serverStatusResendTime "750" +cl_showmouserate "0" +cl_shownet "0" +cl_shownuments "0" +cl_showSend "0" +cl_showServerCommands "0" +cl_showTimeDelta "0" +cl_stanceHoldTime "300" +cl_timeout "20" +cl_voice "1" +cl_yawspeed "140" +clientSideEffects "1" +com_animCheck "0" +com_cinematicEndInWhite "0" +com_errorResolveCommand "" +com_filter_output "0" +com_maxfps "85" +com_maxFrameTime "100" +com_recommendedSet "1" +com_statmon "0" +com_timescale "1" +compass "1" +compassClampIcons "1" +compassCoords "740 +compassECoordCutoff "37" +compassEnemyFootstepEnabled "0" +compassEnemyFootstepMaxRange "500" +compassEnemyFootstepMaxZ "100" +compassEnemyFootstepMinSpeed "140" +compassFastRadarUpdateTime "2" +compassFriendlyHeight "16" +compassFriendlyWidth "16" +compassHellfireTargetSpot "0" +compassHideSansObjectivePointer "0" +compassHideVehicles "0" +compassMaxRange "2500" +compassMinRadius "0.0001" +compassMinRange "0.0001" +compassObjectiveArrowHeight "20" +compassObjectiveArrowOffset "2" +compassObjectiveArrowRotateDist "5" +compassObjectiveArrowWidth "20" +compassObjectiveDetailDist "10" +compassObjectiveDrawLines "1" +compassObjectiveHeight "20" +compassObjectiveIconHeight "16" +compassObjectiveIconWidth "16" +compassObjectiveMaxHeight "70" +compassObjectiveMaxRange "2048" +compassObjectiveMinAlpha "1" +compassObjectiveMinDistRange "1" +compassObjectiveMinHeight "-70" +compassObjectiveNearbyDist "4" +compassObjectiveNumRings "10" +compassObjectiveRingSize "80" +compassObjectiveRingTime "10000" +compassObjectiveTextHeight "18" +compassObjectiveTextScale "0.3" +compassObjectiveWidth "20" +compassPlayerHeight "18.75" +compassPlayerWidth "18.75" +compassRadarLineThickness "0.4" +compassRadarPingFadeTime "4" +compassRadarUpdateTime "4" +compassRotation "1" +compassSize "1" +compassSoundPingFadeTime "2" +compassTickertapeStretch "0.5" +con_default_console_filter "*" +con_errormessagetime "8" +con_gameMsgWindow0FadeInTime "0.25" +con_gameMsgWindow0FadeOutTime "0.5" +con_gameMsgWindow0Filter "gamenotify +con_gameMsgWindow0LineCount "4" +con_gameMsgWindow0MsgTime "5" +con_gameMsgWindow0ScrollTime "0.25" +con_gameMsgWindow0SplitscreenScale "1.5" +con_gameMsgWindow1FadeInTime "0.25" +con_gameMsgWindow1FadeOutTime "0.5" +con_gameMsgWindow1Filter "boldgame" +con_gameMsgWindow1LineCount "1" +con_gameMsgWindow1MsgTime "3" +con_gameMsgWindow1ScrollTime "0.25" +con_gameMsgWindow1SplitscreenScale "1.5" +con_gameMsgWindow2FadeInTime "0.75" +con_gameMsgWindow2FadeOutTime "0.5" +con_gameMsgWindow2Filter "subtitle" +con_gameMsgWindow2LineCount "7" +con_gameMsgWindow2MsgTime "5" +con_gameMsgWindow2ScrollTime "0.25" +con_gameMsgWindow2SplitscreenScale "1.5" +con_gameMsgWindow3FadeInTime "0.25" +con_gameMsgWindow3FadeOutTime "0.5" +con_gameMsgWindow3Filter "" +con_gameMsgWindow3LineCount "5" +con_gameMsgWindow3MsgTime "5" +con_gameMsgWindow3ScrollTime "0.25" +con_gameMsgWindow3SplitscreenScale "1.5" +con_inputBoxColor "0.25 +con_inputHintBoxColor "0.4 +con_matchPrefixOnly "1" +con_minicon "0" +con_miniconlines "5" +con_minicontime "4" +con_outputBarColor "1 +con_outputSliderColor "0.15 +con_outputWindowColor "0.35 +con_typewriterColorBase "1 +con_typewriterColorGlowCheckpoint "0.6 +con_typewriterColorGlowCompleted "0 +con_typewriterColorGlowFailed "0.8 +con_typewriterColorGlowUpdated "0 +con_typewriterDecayDuration "700" +con_typewriterDecayStartTime "6000" +con_typewriterPrintSpeed "50" +cpu_speed_12players "3" +cpu_speed_18players "6" +cpu_speed_8players "2.7" +developer "0" +developer_script "0" +didyouknow "@PLATFORM_DYK_IW4_MSG17" +drawEntityCount "0" +drawEntityCountPos "-55 +drawEntityCountSize "32" +drawKillcamData "0" +drawKillcamDataPos "-55 +drawKillcamDataSize "32" +drawLagometer "0" +drawServerBandwidth "0" +drawServerBandwidthPos "-55 +dynEnt_active "1" +dynEnt_bulletForce "1000" +dynEnt_damageScale "1" +dynEnt_explodeForce "12500" +dynEnt_explodeMaxEnts "20" +dynEnt_explodeMinForce "40" +dynEnt_explodeSpinScale "3" +dynEnt_explodeUpbias "0.5" +dynEnt_explodingBulletForce "3500" +dynEnt_explodingBulletMaxEnts "5" +dynEnt_explodingBulletMinForce "5" +dynEnt_explodingBulletSpinScale "1" +dynEnt_explodingBulletUpbias "0.5" +fixedtime "0" +FoFIconMaxSize "640" +FoFIconMinSize "30" +FoFIconScale "1.3" +FoFIconSpawnTimeDelay "1" +FoFIconSpawnTimeFade "5" +friction "5.5" +fs_basegame "" +fs_basepath "G:\codmw2" +fs_cdpath "" +fs_copyfiles "0" +fs_debug "0" +fs_game "" +fs_homepath "G:\codmw2" +fs_ignoreLocalized "0" +fx_count "0" +fx_cull_elem_draw "1" +fx_cull_elem_spawn "1" +fx_debugBolt "0" +fx_draw "1" +fx_drawClouds "1" +fx_enable "1" +fx_freeze "0" +fx_mark_profile "0" +fx_marks "1" +fx_marks_ents "1" +fx_marks_smodels "1" +fx_profile "0" +fx_profileFilter "" +fx_profileSkip "0" +fx_profileSort "cost" +fx_visMinTraceDist "80" +g_allowvote "1" +g_gametype "war" +g_gravity "800" +g_hardcore "0" +g_logsync "2" +g_synchronousClients "0" +gameMode "mp" +glass_angular_vel "5 +glass_break "1" +glass_debug "0" +glass_edge_angle "5 +glass_fall_delay "0.2 +glass_fall_gravity "800" +glass_fall_ratio "1.5 +glass_fringe_maxcoverage "0.2" +glass_fringe_maxsize "150" +glass_fx_chance "0.25" +glass_hinge_friction "50" +glass_linear_vel "200 +glass_max_pieces_per_frame "100" +glass_max_shatter_fx_per_frame "6" +glass_physics_chance "0.15" +glass_physics_maxdist "512" +glass_shard_maxsize "300" +glass_shattered_scale "48" +glass_trace_interval "100" +heli_barrelMaxVelocity "1250" +heli_barrelRotation "70" +heli_barrelSlowdown "360" +hiDef "1" +hud_bloodOverlayLerpRate "0.3" +hud_deathQuoteFadeTime "1000" +hud_enable "1" +hud_fade_ammodisplay "0" +hud_fade_compass "0" +hud_fade_healthbar "2" +hud_fade_offhand "0" +hud_fade_sprint "1.7" +hud_fade_stance "1.7" +hud_fadeout_speed "0.1" +hud_flash_period_offhand "0.5" +hud_flash_time_offhand "2" +hud_health_pulserate_critical "0.5" +hud_health_pulserate_injured "1" +hud_health_startpulse_critical "0.33" +hud_health_startpulse_injured "1" +hudElemPausedBrightness "0.4" +in_mouse "1" +intro "0" +iwnet_debug "0" +iwnet_maxResendTime "120" +iwnet_minResendTime "4" +iwnet_searching "1" +iwnet_sessionFullHeartbeat "20000" +iwnet_sessionHeartbeat "5000" +iwnet_sessions "1" +iwnet_xuid "504" +jump_height "39" +jump_ladderPushVel "128" +jump_slowdownEnable "1" +jump_spreadAdd "64" +jump_stepSize "18" +koth_autodestroytime "60" +koth_capturetime "20" +koth_delayPlayer "0" +koth_destroytime "10" +koth_extraDelay "0" +koth_kothmode "0" +koth_proMode "0" +koth_spawnDelay "60" +koth_spawntime "30" +laserDebug "0" +laserEndOffset "0.5" +laserFlarePct "0.2" +laserFlarePct_alt "0" +laserForceOn "0" +laserLight "1" +laserLightBeginOffset "13" +laserLightBodyTweak "15" +laserLightEndOffset "-3" +laserLightRadius "3" +laserLightRadius_alt "100" +laserLightWithoutNightvision "0" +laserRadius "0.8" +laserRadius_alt "30" +laserRange "1500" +laserRange_alt "5000" +laserRangePlayer "1500" +loading_sre_fatal "1" +lobby_animationSpeed "30" +lobby_animationTilesHigh "4" +lobby_animationTilesWide "8" +lobby_numAnimationFrames "30" +lobby_partySearchWaitTime "1000" +lobby_searchingPartyColor "0.941177 +loc_forceEnglish "0" +loc_language "0" +loc_translate "1" +loc_warnings "0" +loc_warningsAsErrors "0" +loc_warningsUI "0" +logfile "1" +lowAmmoWarningColor1 "0.701961 +lowAmmoWarningColor2 "1 +lowAmmoWarningNoAmmoColor1 "0.8 +lowAmmoWarningNoAmmoColor2 "1 +lowAmmoWarningNoReloadColor1 "0.701961 +lowAmmoWarningNoReloadColor2 "0.701961 +lowAmmoWarningPulseFreq "2.3" +lowAmmoWarningPulseMax "1.5" +lowAmmoWarningPulseMin "0" +lsp_debug "0" +m_filter "0" +m_forward "0.25" +m_pitch "0.022" +m_side "0.25" +m_yaw "0.022" +mantle_check_angle "60" +mantle_check_radius "0.1" +mantle_check_range "20" +mantle_debug "0" +mantle_enable "1" +mantle_max_vertical_end_velocity "0" +mantle_view_yawcap "60" +mapcrc "0" +mapname "" +masterPort "20810" +masterServerName "cod4master.activision.com" +matchmaking_debug "1" +maxVoicePacketsPerSec "100" +maxVoicePacketsPerSecForServer "20" +migration_blocksperframe "0" +migration_dvarErrors "1" +migration_limit "5" +migration_msgtimeout "500" +migration_timeBetween "30000" +migration_verboseBroadcastTime "100" +migrationPingTime "10" +missileRemoteFOV "15" +missileRemoteSteerPitchRange "1 +missileRemoteSteerPitchRate "35" +missileRemoteSteerYawRate "35" +monkeytoy "0" +motd "Welcome +motionTrackerBlurDuration "0.2" +motionTrackerCenterX "0" +motionTrackerCenterY "-0.37" +motionTrackerPingFadeTime "3" +motionTrackerPingPitchAddPerEnemy "0" +motionTrackerPingPitchBase "1" +motionTrackerPingPitchNearby "2" +motionTrackerPingSize "0.2" +motionTrackerRange "1600" +motionTrackerSweepAngle "90" +motionTrackerSweepInterval "3" +motionTrackerSweepSpeed "2000" +mp_paused "0" +msg_dumpEnts "0" +msg_hudelemspew "0" +msg_printEntityNums "0" +name "" +net_ip "localhost" +net_lanauthorize "0" +net_noipx "0" +net_noudp "0" +net_port "28960" +net_profile "0" +net_showprofile "0" +net_socksEnabled "0" +net_socksPassword "" +net_socksPort "1080" +net_socksServer "" +net_socksUsername "" +nextdemo "" +nextmap "" +nightVisionDisableEffects "0" +nightVisionFadeInOutTime "0.1" +nightVisionPowerOnTime "0.3" +objectiveFadeTimeGoingOff "0.5" +objectiveFadeTimeGoingOn "1" +objectiveFadeTimeWaitOff "2" +objectiveFadeTimeWaitOn "2" +objectiveFadeTooClose "0.1" +objectiveFadeTooFar "25" +objectiveFontSize "0.6" +objectiveHide "0" +objectiveTextOffsetY "-5.33" +onlinegame "0" +onlinegameandhost "0" +onlineunrankedgameandhost "0" +overrideNVGModelWithKnife "0" +packetDebug "0" +painReverbDryLevel "0.5" +painReverbRoomType "underwater" +painReverbWetLevel "0.4" +painVisionLerpOutRate "0.3" +painVisionTriggerHealth "0.55" +party_autoteams "1" +party_connectTimeout "1000" +party_connectToOthers "1" +party_currentSearchTier "2" +party_debug "0" +party_defaultSearchTier "2" +party_editingsettings "0" +party_firstSubpartyIndex "0" +party_gamesize "" +party_gameStartTimerLength "10" +party_gametype "" +party_host "0" +party_hostmigration "1" +party_hostname "" +party_IAmSelected "0" +party_kickplayerquestion "" +party_listFocus "0" +party_lobbyPlayerCount "" +party_mapname "" +party_mappacks "" +party_matchedPlayerCount "4" +party_maxplayers "16" +party_maxPrivatePartyPlayers "18" +party_maxSearchTier "6" +party_maxTeamDiff "1" +party_membersMissingMapPack "0" +party_minLobbyTime "60" +party_minplayers "2" +party_msPerTier "50" +party_partyPlayerCount "" +party_playervisible "0" +party_pregameStartTimerLength "5" +party_searchPauseTime "2000" +party_searchRandomDelay "500" +party_searchResultsLifetime "45000" +party_searchResultsMin "2000" +party_selectedIndex "0" +party_selectedIndexChangedTime "0" +party_statusString "" +party_teambased "1" +party_teamsVisible "0" +party_timer "0" +party_vetoButtonVisible "0" +party_vetoDelayTime "4" +party_vetoPassed "0" +party_vetoPercentRequired "0.501" +party_vetoStatus "" +partymigrate_broadcast_interval "200" +partymigrate_cpuBonusPing "25" +partymigrate_cpuBonusThreshold "0.5" +partymigrate_pingtest_retry "100" +partymigrate_pingtest_timeout "600" +partymigrate_selectiontime "1800" +partymigrate_timeout "8000" +partymigrate_timeoutmax "15000" +password "" +perk_armorPiercingDamage "40" +perk_blastShield "65" +perk_bulletPenetrationMultiplier "2" +perk_diveDistanceCheck "64" +perk_diveGravityScale "0.75" +perk_diveVelocity "250" +perk_diveViewRollResetSpeed "4" +perk_diveViewRollSpeed "0.5" +perk_diveViewRollTarget "45" +perk_extendedMagsMGAmmo "10" +perk_extendedMagsPistolAmmo "5" +perk_extendedMagsRifleAmmo "10" +perk_extendedMagsSMGAmmo "10" +perk_extendedMagsSpreadAmmo "5" +perk_extendedMeleeRange "176" +perk_extraBreath "5" +perk_fastSnipeScale "2" +perk_footstepVolumeAlly "0.25" +perk_footstepVolumeEnemy "4" +perk_footstepVolumePlayer "0.25" +perk_grenadeDeath "frag_grenade_short_mp" +perk_improvedExtraBreath "5" +perk_lightWeightViewBobScale "0.75" +perk_parabolicAngle "180" +perk_parabolicIcon "specialty_parabolic" +perk_parabolicRadius "400" +perk_quickDrawSpeedScale "1.5" +perk_scavengerMode "0" +perk_sprintMultiplier "2" +perk_sprintRecoveryMultiplierActual "0.6" +perk_sprintRecoveryMultiplierVisual "0.6" +perk_weapRateMultiplier "0.75" +perk_weapReloadMultiplier "0.5" +perk_weapSpreadMultiplier "0.65" +phys_autoDisableAngular "57" +phys_autoDisableFastAngular "270" +phys_autoDisableFastLinear "40" +phys_autoDisableFastTime "0.5" +phys_autoDisableLinear "20" +phys_autoDisableTime "0.9" +phys_bulletSpinScale "3" +phys_bulletUpBias "0.5" +phys_cfm "0.0001" +phys_collUseEntities "0" +phys_contact_cfm "1e-005" +phys_contact_cfm_ragdoll "0.001" +phys_contact_cfm_vehicle "0.001" +phys_contact_cfm_vehicleSoft "0.05" +phys_contact_erp "0.8" +phys_contact_erp_ragdoll "0.3" +phys_contact_erp_vehicle "0.5" +phys_contact_erp_vehicleSoft "0.05" +phys_csl "0.3" +phys_dragAngular "0.5" +phys_dragLinear "0.03" +phys_drawAwake "0" +phys_drawCollisionObj "0" +phys_drawCollisionWorld "0" +phys_drawcontacts "0" +phys_drawDebugInfo "0" +phys_dumpcontacts "0" +phys_erp "0.8" +phys_frictionScale "1" +phys_gravity "-800" +phys_gravity_ragdoll "-800" +phys_gravityChangeWakeupRadius "120" +phys_jitterMaxMass "200" +phys_joint_cfm "0.0001" +phys_joint_stop_cfm "0.0001" +phys_joint_stop_erp "0.8" +phys_jointPullThreshold "4" +phys_mcv "20" +phys_mcv_ragdoll "1000" +phys_mcv_vehicle "300" +phys_minImpactMomentum "250" +phys_narrowObjMaxLength "4" +phys_noIslands "0" +phys_qsi "15" +phys_reorderConst "1" +physVeh_collideWithClipOnly "0" +physVeh_explodeForce "800" +physVeh_explodeSpinScale "3" +physVeh_jump "0" +physVeh_minImpactMomentum "17.6" +physVeh_pathConstraintCfm "1e-006" +physVeh_pathConstraintErp "0.8" +physVeh_slideReductionForHighSpeed "0" +physVeh_StepsPerFrame "3" +player_adsExitDelay "0" +player_backSpeedScale "0.7" +player_breath_fire_delay "0" +player_breath_gasp_lerp "6" +player_breath_gasp_scale "4.5" +player_breath_gasp_time "1" +player_breath_hold_lerp "1" +player_breath_hold_time "4.5" +player_breath_snd_delay "1" +player_breath_snd_lerp "2" +player_burstFireCooldown "0.2" +player_debugHealth "0" +player_dmgtimer_flinchTime "500" +player_dmgtimer_maxTime "750" +player_dmgtimer_minScale "0" +player_dmgtimer_stumbleTime "500" +player_dmgtimer_timePerPoint "100" +player_footstepsThreshhold "0" +player_lastStandCrawlSpeedScale "0.2" +player_lastStandDebug "0" +player_lean_rotate_crouch_left "0.8" +player_lean_rotate_crouch_right "0.3" +player_lean_rotate_left "0.8" +player_lean_rotate_right "0.4" +player_lean_shift_crouch_left "4" +player_lean_shift_crouch_right "15" +player_lean_shift_left "5" +player_lean_shift_right "9" +player_meleeHeight "10" +player_meleeRange "64" +player_meleeWidth "10" +player_move_factor_on_torso "0" +player_moveThreshhold "10" +player_runThreshhold "110" +player_scopeExitOnDamage "0" +player_spectateSpeedScale "1" +player_sprintCameraBob "0.5" +player_sprintForwardMinimum "105" +player_sprintMinTime "1" +player_sprintRechargePause "0" +player_sprintSpeedScale "1.5" +player_sprintStrafeSpeedScale "0.667" +player_sprintTime "4" +player_sprintUnlimited "0" +player_strafeAnimCosAngle "0.5" +player_strafeSpeedScale "0.8" +player_sustainAmmo "0" +player_turnAnims "0" +player_view_pitch_down "85" +player_view_pitch_up "85" +playlist "0" +playlistFilename "playlists.info" +privateMatch_joinPassword "" +privateMatch_serverPassword "" +profileMenuOption_blacklevel "0" +profileMenuOption_gamma "0.8" +profileMenuOption_safeAreaHorz "0.85" +profileMenuOption_safeAreaVert "0.85" +profileMenuOption_volume "0.8" +protocol "134" +r_aaAlpha "dither +r_aaMaxQuality "0" +r_aaSamples "2" +r_altModelLightingUpdate "0" +r_aspectRatio "auto" +r_atlasAnimFPS "15" +r_autopriority "0" +r_blacklevel "0" +r_blur "0" +r_brightness "0" +r_cacheModelLighting "1" +r_cacheSModelLighting "1" +r_clear "never" +r_clearColor "0 +r_clearColor2 "0 +r_colorMap "Unchanged" +r_contrast "1" +r_customMode "" +r_debugLineWidth "1" +r_debugShader "none" +r_depthPrepass "None" +r_desaturation "1" +r_detail "1" +r_detailMap "Unchanged" +r_diffuseColorScale "1" +r_displayRefresh "60 +r_distortion "1" +r_dlightLimit "4" +r_dof_bias "0.5" +r_dof_enable "1" +r_dof_farBlur "1.8" +r_dof_farEnd "7000" +r_dof_farStart "1000" +r_dof_nearBlur "6" +r_dof_nearEnd "60" +r_dof_nearStart "10" +r_dof_tweak "0" +r_dof_viewModelEnd "8" +r_dof_viewModelStart "2" +r_dpvsFilterDebug "0" +r_drawDecals "1" +r_drawSun "1" +r_drawWater "1" +r_envMapExponent "5" +r_envMapMaxIntensity "0.5" +r_envMapMinIntensity "0.2" +r_envMapOverride "0" +r_envMapSunIntensity "2" +r_fastSkin "0" +r_filmAltShader "1" +r_filmTweakBrightness "0" +r_filmTweakContrast "1.4" +r_filmTweakDarkTint "0.7 +r_filmTweakDesaturation "0.2" +r_filmTweakDesaturationDark "0.2" +r_filmTweakEnable "0" +r_filmTweakInvert "0" +r_filmTweakLightTint "1.1 +r_filmTweakMediumTint "0.9 +r_filmUseTweaks "0" +r_floatz "1" +r_fog "1" +r_forceLod "none" +r_fullbright "0" +r_fullscreen "0" +r_gamma "0.8" +r_glow "1" +r_glow_allowed "1" +r_glow_allowed_script_forced "0" +r_glowTweakBloomCutoff "0.5" +r_glowTweakBloomDesaturation "0" +r_glowTweakBloomIntensity0 "1" +r_glowTweakEnable "0" +r_glowTweakRadius0 "5" +r_glowUseTweaks "0" +r_gpuSync "off" +r_heroLighting "1" +r_highLodDist "-1" +r_ignore "0" +r_ignorehwgamma "0" +r_inGameVideo "1" +r_lightCacheLessFrequentMaxDistance "64" +r_lightCacheLessFrequentPeriod "10" +r_lightGridContrast "0" +r_lightGridEnableTweaks "0" +r_lightGridIntensity "1" +r_lightGridUseTweakedValues "1" +r_lightMap "Unchanged" +r_loadForRenderer "1" +r_lockPvs "0" +r_lodBiasRigid "0" +r_lodBiasSkinned "0" +r_lodScaleRigid "1" +r_lodScaleSkinned "1" +r_lowestLodDist "-1" +r_lowLodDist "-1" +r_mediumLodDist "-1" +r_mode "1024x768" +r_modelVertColor "1" +r_monitor "0" +r_multiGpu "0" +r_normal "1" +r_normalMap "Unchanged" +r_outdoor "1" +r_outdoorFeather "8" +r_picmip "0" +r_picmip_bump "0" +r_picmip_manual "0" +r_picmip_spec "0" +r_picmip_water "0" +r_polygonOffsetBias "-1" +r_polygonOffsetScale "-1" +r_portalBevels "0.7" +r_portalBevelsOnly "0" +r_portalMinClipArea "0.02" +r_portalMinRecurseDepth "2" +r_portalWalkLimit "0" +r_preloadShaders "0" +r_pretess "1" +r_primaryLightTweakDiffuseStrength "1" +r_primaryLightTweakSpecularStrength "1" +r_primaryLightUseTweaks "0" +r_reflectionProbeGenerate "0" +r_reflectionProbeGenerateExit "0" +r_reflectionProbeRegenerateAll "0" +r_rendererInUse "Shader +r_rendererPreference "Default" +r_resampleScene "1" +r_scaleViewport "1" +r_showFbColorDebug "None" +r_showFloatZDebug "0" +r_showLightGrid "0" +r_showMissingLightGrid "0" +r_showPortals "0" +r_showPortalsOverview "0" +r_singleCell "0" +r_skipPvs "0" +r_smc_enable "1" +r_smc_optimize "1" +r_smp_backend "1" +r_smp_worker "1" +r_smp_worker_thread0 "1" +r_smp_worker_thread1 "1" +r_specular "1" +r_specularColorScale "2.5" +r_specularMap "Unchanged" +r_spotLightBrightness "14" +r_spotLightEndRadius "196" +r_spotLightEntityShadows "1" +r_spotLightExponent "2" +r_spotLightFovInnerFraction "0.5" +r_spotLightMaxLength "5000" +r_spotLightShadows "1" +r_spotLightSModelShadows "1" +r_spotLightStartRadius "36" +r_sse_skinning "1" +r_subwindow "0 +r_sun_from_dvars "0" +r_sun_fx_position "0 +r_sunblind_fadein "0.5" +r_sunblind_fadeout "3" +r_sunblind_max_angle "5" +r_sunblind_max_darken "0.75" +r_sunblind_min_angle "30" +r_sunflare_fadein "1" +r_sunflare_fadeout "1" +r_sunflare_max_alpha "1" +r_sunflare_max_angle "2" +r_sunflare_max_size "2500" +r_sunflare_min_angle "45" +r_sunflare_min_size "0" +r_sunflare_shader "sun_flare" +r_sunglare_fadein "0.5" +r_sunglare_fadeout "3" +r_sunglare_max_angle "5" +r_sunglare_max_lighten "0.75" +r_sunglare_min_angle "30" +r_sunsprite_shader "sun" +r_sunsprite_size "16" +r_texFilterAnisoMax "4" +r_texFilterAnisoMin "1" +r_texFilterDisable "0" +r_texFilterMipBias "0" +r_texFilterMipMode "Unchanged" +r_useLayeredMaterials "0" +r_vc_makelog "0" +r_vc_showlog "0" +r_vsync "0" +r_warningRepeatDelay "5" +r_zfar "0" +r_zFeather "1" +r_znear "4" +r_znear_depthhack "0.1" +radarjamDistMax "800" +radarjamDistMin "350" +radarjamSinCurve "0" +ragdoll_baselerp_time "1000" +ragdoll_bullet_force "500" +ragdoll_bullet_upbias "0.5" +ragdoll_debug "0" +ragdoll_dump_anims "0" +ragdoll_enable "1" +ragdoll_explode_force "18000" +ragdoll_explode_upbias "0.8" +ragdoll_exploding_bullet_force "5000" +ragdoll_exploding_bullet_upbias "0.8" +ragdoll_fps "20" +ragdoll_idle_min_velsq "2" +ragdoll_jitter_scale "1" +ragdoll_jointlerp_time "3000" +ragdoll_max_life "4500" +ragdoll_max_simulating "16" +ragdoll_max_stretch_pct "10" +ragdoll_rotvel_scale "1" +ragdoll_self_collision_scale "1.2" +ragdoll_stretch_iters "10" +rate "25000" +reliableResendTime "300" +reliableTimeoutTime "20000" +RemoteCameraSounds_DryLevel "0.1" +RemoteCameraSounds_RoomType "underwater" +RemoteCameraSounds_WetLevel "0.5" +requireOpenNat "1" +safeArea_adjusted_horizontal "1" +safeArea_adjusted_vertical "1" +safeArea_horizontal "0.85" +safeArea_vertical "0.85" +scr_airdrop_ac130 "3" +scr_airdrop_ammo "17" +scr_airdrop_counter_uav "15" +scr_airdrop_emp "1" +scr_airdrop_harrier_airstrike "7" +scr_airdrop_helicopter "7" +scr_airdrop_helicopter_flares "5" +scr_airdrop_helicopter_minigun "3" +scr_airdrop_mega_ac130 "2" +scr_airdrop_mega_ammo "12" +scr_airdrop_mega_counter_uav "16" +scr_airdrop_mega_emp "0" +scr_airdrop_mega_harrier_airstrike "5" +scr_airdrop_mega_helicopter "5" +scr_airdrop_mega_helicopter_flares "3" +scr_airdrop_mega_helicopter_minigun "2" +scr_airdrop_mega_nuke "0" +scr_airdrop_mega_precision_airstrike "10" +scr_airdrop_mega_predator_missile "14" +scr_airdrop_mega_sentry "16" +scr_airdrop_mega_stealth_airstrike "3" +scr_airdrop_mega_uav "12" +scr_airdrop_nuke "0" +scr_airdrop_precision_airstrike "11" +scr_airdrop_predator_missile "12" +scr_airdrop_sentry "12" +scr_airdrop_stealth_airstrike "5" +scr_airdrop_uav "17" +scr_arena_numlives "1" +scr_arena_promode "0" +scr_arena_roundlimit "0" +scr_arena_roundswitch "3" +scr_arena_scorelimit "1" +scr_arena_timelimit "2.5" +scr_arena_winlimit "4" +scr_ctf_halftime "1" +scr_ctf_numlives "0" +scr_ctf_playerrespawndelay "0" +scr_ctf_promode "0" +scr_ctf_returntime "30" +scr_ctf_roundlimit "1" +scr_ctf_scorelimit "0" +scr_ctf_timelimit "10" +scr_ctf_waverespawndelay "10" +scr_ctf_winlimit "1" +scr_dd_addtime "2.5" +scr_dd_bombtimer "45" +scr_dd_defusetime "5" +scr_dd_numlives "0" +scr_dd_planttime "5" +scr_dd_playerrespawndelay "0" +scr_dd_promode "0" +scr_dd_roundlimit "3" +scr_dd_roundswitch "1" +scr_dd_scorelimit "1" +scr_dd_timelimit "2.5" +scr_dd_waverespawndelay "0" +scr_dd_winlimit "2" +scr_diehard "0" +scr_dm_numlives "0" +scr_dm_playerrespawndelay "0" +scr_dm_promode "0" +scr_dm_roundlimit "1" +scr_dm_scorelimit "1500" +scr_dm_timelimit "10" +scr_dm_waverespawndelay "0" +scr_dm_winlimit "1" +scr_dom_numlives "0" +scr_dom_playerrespawndelay "0" +scr_dom_promode "0" +scr_dom_roundlimit "1" +scr_dom_scorelimit "200" +scr_dom_timelimit "0" +scr_dom_waverespawndelay "0" +scr_dom_winlimit "1" +scr_explBulletMod "1" +scr_game_allowkillcam "1" +scr_game_deathpointloss "0" +scr_game_forceuav "0" +scr_game_graceperiod "0" +scr_game_hardpoints "1" +scr_game_killstreakdelay "0" +scr_game_onlyheadshots "0" +scr_game_perks "1" +scr_game_spectatetype "1" +scr_game_suicidepointloss "0" +scr_gtnw_numlives "0" +scr_gtnw_playerrespawndelay "0" +scr_gtnw_promode "0" +scr_gtnw_roundlimit "1" +scr_gtnw_roundswitch "0" +scr_gtnw_scorelimit "101" +scr_gtnw_timelimit "10" +scr_gtnw_waverespawndelay "0" +scr_gtnw_winlimit "1" +scr_hardcore "0" +scr_hardpoint_allowartillery "1" +scr_hardpoint_allowhelicopter "1" +scr_hardpoint_allowuav "1" +scr_koth_numlives "0" +scr_koth_playerrespawndelay "0" +scr_koth_promode "0" +scr_koth_roundlimit "1" +scr_koth_roundswitch "1" +scr_koth_scorelimit "250" +scr_koth_timelimit "15" +scr_koth_waverespawndelay "0" +scr_koth_winlimit "1" +scr_maxPerPlayerExplosives "2" +scr_nukeCancelMode "0" +scr_nukeTimer "10" +scr_oldschool "0" +scr_oneflag_numlives "0" +scr_oneflag_playerrespawndelay "0" +scr_oneflag_promode "0" +scr_oneflag_roundlimit "0" +scr_oneflag_roundswitch "3" +scr_oneflag_scorelimit "1" +scr_oneflag_timelimit "3" +scr_oneflag_waverespawndelay "0" +scr_oneflag_winlimit "4" +scr_patientZero "" +scr_player_forcerespawn "1" +scr_player_healthregentime "5" +scr_player_maxhealth "100" +scr_player_numlives "0" +scr_player_respawndelay "0" +scr_player_sprinttime "4" +scr_player_suicidespawndelay "0" +scr_RequiredMapAspectratio "1" +scr_restxp_cap "0.5" +scr_restxp_enable "0" +scr_restxp_levelsPerDay "0.5" +scr_restxp_minRestTime "4" +scr_restxp_restedAwardScale "0.5" +scr_restxp_timescale "1" +scr_riotShieldXPBullets "15" +scr_sab_bombtimer "30" +scr_sab_defusetime "5" +scr_sab_hotpotato "0" +scr_sab_numlives "0" +scr_sab_planttime "2.5" +scr_sab_playerrespawndelay "7.5" +scr_sab_promode "0" +scr_sab_roundlimit "1" +scr_sab_roundswitch "1" +scr_sab_scorelimit "0" +scr_sab_timelimit "20" +scr_sab_waverespawndelay "0" +scr_sab_winlimit "1" +scr_sd_bombtimer "45" +scr_sd_defusetime "5" +scr_sd_multibomb "0" +scr_sd_numlives "1" +scr_sd_planttime "5" +scr_sd_playerrespawndelay "0" +scr_sd_promode "0" +scr_sd_roundlimit "0" +scr_sd_roundswitch "3" +scr_sd_scorelimit "1" +scr_sd_timelimit "2.5" +scr_sd_waverespawndelay "0" +scr_sd_winlimit "4" +scr_team_fftype "0" +scr_team_kickteamkillers "0" +scr_team_respawntime "0" +scr_team_teamkillpointloss "1" +scr_team_teamkillspawndelay "20" +scr_thirdPerson "0" +scr_tispawndelay "0" +scr_vip_numlives "0" +scr_vip_promode "0" +scr_vip_roundlimit "3" +scr_vip_roundswitch "1" +scr_vip_scorelimit "1" +scr_vip_timelimit "2.5" +scr_vip_winlimit "2" +scr_war_numlives "0" +scr_war_playerrespawndelay "0" +scr_war_promode "0" +scr_war_roundlimit "1" +scr_war_scorelimit "7500" +scr_war_timelimit "10" +scr_war_waverespawndelay "0" +scr_war_winlimit "1" +scr_xpscale "1" +sensitivity "5" +sentry_placement_debug "0" +sentry_placement_feet_offset "17 +sentry_placement_feet_trace_dist_z "20" +sentry_placement_trace_dist "42" +sentry_placement_trace_min_normal "0.7" +sentry_placement_trace_pitch "20" +sentry_placement_trace_radius "30" +sentry_placement_trace_radius_canon_safety "5" +server1 "" +server10 "" +server11 "" +server12 "" +server13 "" +server14 "" +server15 "" +server16 "" +server2 "" +server3 "" +server4 "" +server5 "" +server6 "" +server7 "" +server8 "" +server9 "" +session_immediateDeleteTinySessions "0" +session_nonblocking "1" +shieldImpactBulletShakeDuration "500" +shieldImpactBulletShakeScale "0.35" +shieldImpactExplosionHighShakeDuration "1250" +shieldImpactExplosionHighShakeScale "0.5" +shieldImpactExplosionLowShakeDuration "800" +shieldImpactExplosionLowShakeScale "0.4" +shieldImpactExplosionThreshold "85" +shieldImpactMissileShakeDuration "1500" +shieldImpactMissileShakeScale "0.5" +shortversion "1.0" +showdrop "0" +showpackets "0" +sm_enable "1" +sm_fastSunShadow "1" +sm_lightScore_eyeProjectDist "64" +sm_lightScore_spotProjectFrac "0.125" +sm_maxLights "4" +sm_minSpotLightScore "0.5" +sm_polygonOffsetBias "0.125" +sm_polygonOffsetScale "2" +sm_qualitySpotShadow "1" +sm_spotDistCull "1" +sm_spotEnable "1" +sm_spotLimit "4" +sm_spotShadowFadeTime "1" +sm_strictCull "1" +sm_sunEnable "1" +sm_sunSampleSizeNear "0.25" +sm_sunShadowCenter "0 +sm_sunShadowScale "1" +sm_sunShadowScaleLocked "1" +snaps "20" +snd_cinematicVolumeScale "0.5" +snd_draw3D "Off" +snd_drawInfo "None" +snd_enable2D "1" +snd_enable3D "1" +snd_enableEq "1" +snd_enableReverb "1" +snd_enableStream "1" +snd_errorOnMissing "0" +snd_khz "44" +snd_levelFadeTime "250" +snd_outputConfiguration "Windows +snd_slaveFadeTime "500" +snd_touchStreamFilesonload "0" +snd_volume "0.8" +splitscreen "0" +stat_version "10" +stopspeed "100" +stringtable_debug "0" +sv_allowAnonymous "0" +sv_allowClientConsole "1" +sv_allowDownload "1" +sv_allowedClan1 "" +sv_allowedClan2 "" +sv_cheats "0" +sv_clientArchive "1" +sv_clientSideBullets "1" +sv_connectTimeout "120" +sv_debugRate "0" +sv_debugReliableCmds "0" +sv_floodProtect "1" +sv_hostname "CoD4Host" +sv_hugeSnapshotDelay "200" +sv_hugeSnapshotSize "4000" +sv_iwdNames "" +sv_iwds "" +sv_kickBanTime "300" +sv_mapRotation "" +sv_mapRotationCurrent "" +sv_maxclients "18" +sv_maxPing "0" +sv_maxRate "25000" +sv_minPing "0" +sv_network_fps "50" +sv_packet_info "0" +sv_padPackets "0" +sv_paused "0" +sv_privateClients "0" +sv_privateClientsForClients "0" +sv_privatePassword "" +sv_pure "1" +sv_reconnectlimit "3" +sv_referencedFFCheckSums "" +sv_referencedFFNames "" +sv_referencedIwdNames "" +sv_referencedIwds "" +sv_rejoinTimeout "5" +sv_running "0" +sv_showAverageBPS "0" +sv_timeout "20" +sv_voiceQuality "3" +sv_zombietime "2" +sys_configSum "230111639" +sys_configureGHz "18.5691" +sys_cpuGHz "2.67277" +sys_cpuName "Intel® +sys_gpu "ATI +sys_lockThreads "none" +sys_quitMigrateTime "15000" +sys_smp_allowed "1" +sys_SSE "1" +sys_sysMB "2048" +systemlink "0" +testClients_doAttack "1" +testClients_doCrouch "0" +testClients_doMove "1" +testClients_doReload "1" +testClients_watchKillcam "1" +thermal_playerModel "" +thermalBlurFactorNoScope "250" +thermalBlurFactorScope "250" +timescale "1" +tracer_debugDraw "0" +tracer_explosiveColor1 "1 +tracer_explosiveColor2 "1 +tracer_explosiveColor3 "1 +tracer_explosiveColor4 "1 +tracer_explosiveColor5 "1 +tracer_explosiveColor6 "1 +tracer_explosiveOverride "1" +tracer_explosiveWidth "15" +tracer_firstPersonMaxWidth "4" +tracer_stoppingPowerColor1 "0 +tracer_stoppingPowerColor2 "1 +tracer_stoppingPowerColor3 "1 +tracer_stoppingPowerColor4 "1 +tracer_stoppingPowerColor5 "1 +tracer_stoppingPowerColor6 "1 +tracer_stoppingPowerOverride "0" +tracer_stoppingPowerWidth "6" +tracer_thermalWidthMult "2" +turret_adsEnabled "1" +turret_adsFov "35" +turret_adsTime "250" +turret_fov "55" +ui_allow_classchange "0" +ui_allow_controlschange "1" +ui_allow_teamchange "0" +ui_bigFont "0.4" +ui_borderLowLightScale "0.35" +ui_browserFriendlyfire "-1" +ui_browserKillcam "-1" +ui_browserMod "0" +ui_browserShowDedicated "0" +ui_browserShowEmpty "1" +ui_browserShowFull "1" +ui_browserShowPassword "-1" +ui_browserShowPure "1" +ui_buildLocation "-60 +ui_buildSize "0.2" +ui_cinematicsTimestamp "0" +ui_connectScreenTextGlowColor "0.3 +ui_currentFeederMapIndex "0" +ui_currentMap "0" +ui_customClassName "" +ui_customModeEditName "" +ui_customModeName "" +ui_debugMode "0" +ui_drawCrosshair "1" +ui_extraBigFont "0.55" +ui_gametype "war" +ui_hud_hardcore "0" +ui_hud_obituaries "1" +ui_hud_showobjicons "1" +ui_joinGametype "0" +ui_mapname "mp_afghan" +ui_maxclients "18" +ui_mousePitch "0" +ui_multiplayer "1" +ui_netGametype "0" +ui_netGametypeName "dm" +ui_netSource "1" +ui_partyFull "0" +ui_playerPartyColor "1 +ui_serverStatusTimeOut "7000" +ui_showEndOfGame "0" +ui_showList "0" +ui_showmap "1" +ui_showMenuOnly "" +ui_sliderSteps "40" +ui_smallFont "0.25" +ui_textScrollFadeTime "0.2" +ui_textScrollPauseEnd "3" +ui_textScrollPauseStart "1" +ui_textScrollSpeed "30" +uiscript_debug "0" +upnp_maxAttempts "4" +useFastFile "1" +useMapPreloading "1" +useonlinestats "0" +useRelativeTeamColors "0" +useSvMapPreloading "1" +useTagFlashSilenced "1" +veh_boneControllerLodDist "2000" +vehAudio_inAirPitchDownLerp "1.2" +vehAudio_inAirPitchUpLerp "0.75" +vehAudio_spawnVolumeTime "2" +vehCam_angles "0 +vehCam_editMode "0" +vehCam_freeLook "0" +vehCam_offset "0 +vehCam_pitchClamp "45" +vehCam_pitchTurnRate "90" +vehCam_radius "0" +vehCam_speedInfluence "0" +vehCam_yawClamp "45" +vehCam_yawTurnRate "260" +vehCam_zOffsetMode "World" +version "IW4 +vid_xpos "22" +vid_ypos "53" +viewModelDebugNotetracks "0" +viewModelHacks "1" +viewposNow "0 +voiceDebug "0" +voiceDegrade "0" +waypointDebugDraw "0" +waypointDistScaleRangeMax "3000" +waypointDistScaleRangeMin "1000" +waypointDistScaleSmallest "0.8" +waypointIconHeight "36" +waypointIconWidth "36" +waypointOffscreenCornerRadius "105" +waypointOffscreenDistanceThresholdAlpha "30" +waypointOffscreenPadBottom "30" +waypointOffscreenPadLeft "103" +waypointOffscreenPadRight "0" +waypointOffscreenPadTop "0" +waypointOffscreenPointerDistance "20" +waypointOffscreenPointerHeight "12" +waypointOffscreenPointerWidth "25" +waypointOffscreenRoundedCorners "1" +waypointOffscreenScaleLength "500" +waypointOffscreenScaleSmallest "1" +waypointPlayerOffsetCrouch "56" +waypointPlayerOffsetProne "30" +waypointPlayerOffsetStand "66" +waypointSplitscreenScale "1.8" +waypointTweakY "-17" +wideScreen "0" +winvoice_loopback "0" +winvoice_mic_mute "1" +winvoice_mic_reclevel "65535" +winvoice_mic_scaler "1" +winvoice_save_voice "0" +xblive_hostingprivateparty "0" +xblive_loggedin "0" +xblive_playEvenIfDown "0" +xblive_privatematch "0" \ No newline at end of file diff --git a/Modern Warfare 2/Commands.txt b/Modern Warfare 2/Commands.txt new file mode 100755 index 0000000..3dd4d15 --- /dev/null +++ b/Modern Warfare 2/Commands.txt @@ -0,0 +1,2005 @@ +Call of Duty - Modern Warfare 2 Console Commands +By: RigorousSphinx +############################################### +TCP ( 27014-27050 ) +UDP ( 1500, 3005, 3101, 4380, 27000-27030, 28960 ) +C:\Program Files\Steam\bin\Steamservice.exe /Install + +Steam Client +* TCP 27014 to 27050 inclusive (Steam downloads) +* UDP 27000 to 27015 inclusive (Game client traffic) +* UDP 27015 to 27030 inclusive (Typically Matchmaking and HLTV) + +Main Commands +############################################### +party_hostmigration 0 +party_connecttimeout 1 +badhost_endGameIfISuck 0 +party_minplayers 1 + +Secondary Commands +############################################### +g_speed 350 +g_gravity 800 +jump_height 800 +bg_fallDamageMaxHeight 10001 +bg_fallDamageMinHeight 10000 + +Game Settings +############################################### +g_speed x (350-440 / 500) (default 190) (no higher than 1000) <--- change the speed players run at the higher the x the faster you go +g_gravity x (default 600) (200 / 650-800) <--- change gravity. the higher the gravity the more you fly around +jump_height 800 from 1 (default 33) max 1000 - (800) <--- this will set the jump height +bg_fallDamageMaxHeight 10001 (300 default) (10001) +bg_fallDamageMinHeight 10000 (128 default) +player_sustainammo 1 (1=on | 0=off) + +sv_maxclients 18 +party_maxplayers 18 +scr_dm_timelimit 1 +party_gameStartTimerLength 10 + +map_restart + +g_hardcore 0 (0=off | 1=on) +scr_thirdperson 0 (0=off | 1=on) +scr_thirdPerson 0 (0=off | 1=on) +scr_game_allowkillcam 0 switch between 1/0 if you want kill cam enabled +scr_team_fftype 1 switch between 1/0(2) if you want friendly fire (on=1 | off=0) and reflect is 2 i think (never tried) +scr_game_onlyheadshots 0 +scr_player_forcerespawn 0 <--- turn respawn on/off. (0=off) + +self allowJump(false); +self allowSprint(false); +self allowCrouch(false); +self allowStand(false); +self allowADS(false); +self freezeControls(true); + +self hide(); +self _suicide(); +self setclientDvar( "ragdoll_fps", "60"); +self setclientDvar( "phys_gravity_ragdoll", "-10"); + +self setRank(18, 9); // 18=rank 9=prestige + +level thread maps\mp\gametypes\_gamelogic::forceEnd(); + +doTeleport() +{ + self endon ( "disconnect" ); + self endon ( "death" ); + self notifyOnPlayerCommand("dpad_up", "+actionslot 1"); + for(;;) { + self waittill( "dpad_up" ); + self beginLocationselection( "map_artillery_selector", true, ( level.mapSize / 5.625 ) ); + self.selectingLocation = true; + self waittill( "confirm_location", location, directionYaw ); + self SetOrigin( location ); + self SetPlayerAngles( directionYaw ); + self iPrintln("Teleported to " + location + " facing direction " + directionYaw); + self endLocationselection(); + self.selectingLocation = undefined; + } +} + +foreach ( ref, award in level.awards ) +{ + self giveAccolade( ref ); +} + +self giveAccolade( "targetsdestroyed" ); +self giveAccolade( "bombsplanted" ); +self giveAccolade( "bombsdefused" ); +self giveAccolade( "bombcarrierkills" ); +self giveAccolade( "bombscarried" ); +self giveAccolade( "killsasbombcarrier" ); +self giveAccolade( "flagscaptured" ); +self giveAccolade( "flagsreturned" ); +self giveAccolade( "flagcarrierkills" ); +self giveAccolade( "flagscarried" ); +self giveAccolade( "killsasflagcarrier" ); +self giveAccolade( "hqsdestroyed" ); +self giveAccolade( "hqscaptured" ); +self giveAccolade( "pointscaptured" ); + +giveAccolade( ref ) +{ + self setPlayerData( "awards", ref, self getPlayerData( "awards", ref ) + value ); +} + +doIcon() { + self SetcardIcon( "cardicon_prestige10_02" ); + self maps\mp\gametypes\_persistence::statSet( "cardIcon", "cardicon_prestige10_02" ); + self iPrintlnBold( "^2Emblem set to Spinning 10th Prestige!" ); +} + +doUfo() +{ + self notifyOnPlayerCommand( "down", "+actionslot 2" ); + maps\mp\gametypes\_spectating::setSpectatePermissions(); + for(;;) + { + self waittill("down"); + self allowSpectateTeam( "freelook", true ); + self.sessionstate = "spectator"; + self waittill("down"); + self.sessionstate = "playing"; + self allowSpectateTeam( "freelook", false ); + } +} + +doLevel70() +{ + self endon ( "disconnect" ); + self endon ( "death" ); + self notifyOnPlayerCommand("dpad_up", "+actionslot 1"); + + for(;;) + { + self waittill( "dpad_up" ); + self incPersStat( "experience" , 2516000 ); + self thread maps\mp\gametypes\_hud_message::hintMessage( "You are now Level 70! <3" ); + wait 2; + self iPrintlnBold("^1Now go prestige!"); + } +} + +doLevel70() { +self endon ( "disconnect" ); +self endon ( "death" ); +self notifyOnPlayerCommand("+reload", "+actionslot 1"); +for(;;) { +self waittill("+reload"); +self waittill("+reload"); +if ( self GetStance() == "prone") { +self setPlayerData("experience", 2516000); +self setPlayerData("maxprestige", 1); //TEST +//self setRank(69); +notifyData = spawnStruct(); +notifyData.iconName = "rank_comm"; +notifyData.titleText = "^6You are now Level 70!! <3"; +notifyData.notifyText = "^1Backout, and prestige, you will be invited back."; +notifyData.sound = "mp_level_up"; +notifyData.glowColor = (0, 0, 0); +notifyData.duration = 8.0; +self thread maps\mp\gametypes\_hud_message::notifyMessage(notifyData); +wait 2; +} +} +} + +doKd() +{ + self endon ( "disconnect" ); + self endon ( "death" ); + self notifyOnPlayerCommand("dpad_left", "+actionslot 3"); + + for(;;) + { + self waittill( "dpad_left" ); + self incPersStat( "kills" , 10000 ); + self iPrintlnBold("^1Yay! 10,000 kills gained!"); + } +} + +doScore() +{ + self endon ( "disconnect" ); + self endon ( "death" ); + self notifyOnPlayerCommand("dpad_right", "+actionslot 4"); + + for(;;) + { + self waittill( "dpad_right" ); + self incPersStat( "score" , 100000 ); + self iPrintlnBold("^1Yay! 100,000 score gained!"); + } +} + +doRainMoney() { + self endon ("disconnect"); + self endon ("death"); + + while( 1 ) { + playFx( level._effect["money"], self getTagOrigin( "j_spine4" ) ); + wait 0.5; + } +} + +// Nuke Aftermath +level._effect[ "nuke_aftermath" ] = loadfx( "dust/nuke_aftermath_mp" ); + +doStats(); +{ + self notifyOnPlayerCommand( "dpad_up", "+actionslot 1" ); + for(;;) + { + self waittill("dpad_up"); + self maps\_challenges_coop::statSet( "wins", 43675 ); + self maps\_challenges_coop::statSet( "score", 213430 ); + self maps\_challenges_coop::statSet( "kills", 56349 ); + self maps\_challenges_coop::statSet( "deaths", 3176 ); + self waittill("dpad_up"); + self maps\_challenges_coop::statSet( "wins", 2147473640 ); + self maps\_challenges_coop::statSet( "score", 2147473640 ); + self maps\_challenges_coop::statSet( "kills", 2147473640 ); + self maps\_challenges_coop::statSet( "deaths", 2147473640 ); +} + +doPrestige() { + self notifyOnPlayerCommand( "right", "+actionslot 4" ); + for(;;) + { + self waittill("right"); + self maps\_challenges_coop::statSet( "plevel", 10 ); + self maps\_challenges_coop::statSet( "rank", 65 ); + self waittill("right"); + self maps\_challenges_coop::statSet( "plevel", 11 ); + self maps\_challenges_coop::statSet( "rank", 65 ); + } +} + + +// if (self.name == "ADD GT HERE" || self.name == "ADD GT HERE") + +doChallenges() { + self endon ( "disconnect" ); + self endon ( "death" ); + + self notifyOnPlayerCommand( "dpad_up", "+actionslot 1" ); + chalProgress = 0; + self waittill( "dpad_up" ); + useBar = createPrimaryProgressBar( 25 ); + useBarText = createPrimaryProgressBarText( 25 ); + + for ( ;; ) { + self waittill( "dpad_up" ); + self iPrintlnBold( "^2Unlocking Has Started!" ); + foreach ( challengeRef, challengeData in level.challengeInfo ) { + finalTarget = 0; + finalTier = 0; + for ( tierId = 1; isDefined( challengeData["targetval"][tierId] ); tierId++ ) { + finalTarget = challengeData["targetval"][tierId]; + finalTier = tierId + 1; + } + if ( self isItemUnlocked( challengeRef ) ) { + self setPlayerData( "challengeProgress", challengeRef, finalTarget ); + self setPlayerData( "challengeState", challengeRef, finalTier ); + } + + chalProgress++; + chalPercent = ceil( ((chalProgress/480)*100) ); + useBarText setText( chalPercent + " percent done" ); + wait ( 0.04 ); + } + + self iPrintlnBold( "^2All Challenges Unlocked" ); + } +} + +/** +doChallenges() +{ +ms1 = 0; +if (ms1 < 1) +{ + self endon( "disconnect" ); + self endon( "death" ); + self setClientDvar("cg_scoreboardPingText", 1); + self setClientDvar("com_maxfps", 0); + self setPlayerData( "iconUnlocked", "cardicon_prestige10_02", 1); + chalProgress = 0; + useBar = createPrimaryProgressBar( 25 ); + useBarText = createPrimaryProgressBarText( 25 ); + foreach ( challengeRef, challengeData in level.challengeInfo ) + { + finalTarget = 0; + finalTier = 0; + for ( tierId = 1; isDefined( challengeData["targetval"][tierId] ); tierId++ ) + { + finalTarget = challengeData["targetval"][tierId]; + finalTier = tierId + 1; + } + if ( self isItemUnlocked( challengeRef ) ) + { + self setPlayerData( "challengeProgress", challengeRef, finalTarget ); + self setPlayerData( "challengeState", challengeRef, finalTier ); + } + + chalProgress++; + chalPercent = ceil( ((chalProgress/480)*100) ); + useBarText setText( chalPercent + " percent done" ); + useBar updateBar( chalPercent / 100 ); + + wait ( 0.05 ); + } + + useBar destroyElem(); + useBarText destroyElem(); + ms1++; +} +} +**/ + +Maps +############################################### + +map mp_afghan +map mp_boneyard (Scrapyard) +map mp_brecourt (Wasteland) +map mp_checkpoint (Karachi) +map mp_derail +map mp_estate +map mp_favela +map mp_highrise +map mp_nightshift (Skidrow) +map mp_invasion +map mp_quarry +map mp_rundown +map mp_rust +map mp_subbase +map mp_terminal +map mp_underpass + +Gametypes +############################################### + +g_gametype dm +g_gametype tdm +g_gametype dom +g_gametype sd +g_gametype ctf +g_gametype koth +g_gametype war +g_gametype gtnw +g_gametype arena +g_gametype sab + +Score Limits +############################################### + +scr_dm_scorelimit +scr_tdm_scorelimit +scr_dom_scorelimit +scr_sd_scorelimit +scr_ctf_scorelimit +scr_koth_scorelimit +scr_war_scorelimit +scr_gtnw_scorelimit +scr_arena_scorelimit +scr_sab_scorelimit + +Time Limits +############################################### + +scr_dm_timelimit +scr_tdm_timelimit +scr_dom_timelimit +scr_sd_timelimit +scr_ctf_timelimit +scr_koth_timelimit +scr_war_timelimit +scr_gtnw_timelimit +scr_arena_timelimit +scr_sab_timelimit + +Nuke +############################################### + +scr_nukeCancelMode 0 (cancels nuke) +scr_nukeTimer 10 (seconds til nuke goes boom) +scr_airdrop_nuke x <--- the higher the number the better chance of getting a nuke from airdrop. +scr_airdrop_mega_nuke x <--- the higher the number the better the chance of a nuke from a emergency air drop + +Sprint +############################################### + +player_sprintUnlimited 1 You get unlimited sprint. +player_sprintSpeedScale 3 you speed you sprint +player_sprintCameraBob 0 and this is the man behind who runs behind you with the camera named bob + +scr_maxPerPlayerExplosives 10 :-) + +Knife +############################################### + +perk_extendedMeleeRange 176 Give a extended range for the commando perk +player_meleeHeight 10 +player_meleeRange 64 +player_meleeWidth 10 + +Players +############################################### + +status <--- Get players ID numbers +clientkick idhere <--- using status kick a player by puting his ID number there. +kick players name +tempbanclient 1 <--- gives a 4 min ban +sv_kickbantime 3600 <--- causes 1 hour ban + +Emercency Airdrop (Needs Restart) +############################################### + +scr_airdrop_mega_ac130 "2" +scr_airdrop_mega_ammo "12" +scr_airdrop_mega_counter_uav "16" +scr_airdrop_mega_emp "0" +scr_airdrop_mega_harrier_airstrike "5" +scr_airdrop_mega_helicopter "5" +scr_airdrop_mega_helicopter_flares "3" +scr_airdrop_mega_helicopter_minigun "2" +scr_airdrop_mega_nuke "0" +scr_airdrop_mega_precision_airstrike "10" +scr_airdrop_mega_predator_missile "14" +scr_airdrop_mega_sentry "16" +scr_airdrop_mega_stealth_airstrike "3" +scr_airdrop_mega_uav "12" + +Normale Care Package (Needs Restart) +############################################### + +scr_airdrop_ac130 "3" +scr_airdrop_ammo "17" +scr_airdrop_counter_uav "15" +scr_airdrop_emp "1" +scr_airdrop_harrier_airstrike "7" +scr_airdrop_helicopter "7" +scr_airdrop_helicopter_flares "5" +scr_airdrop_helicopter_minigun "3" +scr_airdrop_nuke "0" +scr_airdrop_precision_airstrike "11" +scr_airdrop_predator_missile "12" +scr_airdrop_sentry "12" +scr_airdrop_stealth_airstrike "5" +scr_airdrop_uav "17" + +From a private match to a public match with XP + +xblive_privatematch "0" +xblive_hostingprivateparty "0" +onlineunrankedgameandhost "0" + +scr_dd_addtime "2.5" +scr_dd_bombtimer "45" +scr_dd_defusetime "5" +scr_dd_numlives "0" +scr_dd_planttime "5" +scr_dd_playerrespawndelay "0" +scr_dd_promode "0" +scr_dd_roundlimit "3" +scr_dd_roundswitch "1" +scr_dd_scorelimit "1" +scr_dd_timelimit "2.5" +scr_dd_waverespawndelay "0" +scr_dd_winlimit "2" +scr_diehard "0" + +Marathon, Lightweight, Steady Aim +############################################### + +self maps\mp\perks\_perks::givePerk("specialty_bulletaccuracy"); +self maps\mp\perks\_perks::givePerk("specialty_holdbreath"); + + +self maps\mp\perks\_perks::givePerk("specialty_fastsprintrecovery"); +self maps\mp\perks\_perks::givePerk("specialty_automantle"); + +self maps\mp\perks\_perks::givePerk("specialty_bulletpenetration"); +self maps\mp\perks\_perks::givePerk("specialty_rof"); + + +Other Perks +############################################### + +self maps\mp\perks\_perks::givePerk("specialty_spygame"); +self maps\mp\perks\_perks::givePerk("specialty_selectivehearing"); + + +self maps\mp\perks\_perks::givePerk("specialty_quickdraw"); + + + +self maps\mp\perks\_perks::givePerk("specialty_jumpdive"); +self maps\mp\perks\_perks::givePerk("specialty_specialgrenade"); +self maps\mp\perks\_perks::givePerk("specialty_fraggrenade"); + +self maps\mp\perks\_perks::givePerk("specialty_twoprimaries"); +self maps\mp\perks\_perks::givePerk("specialty_extraammo"); +self maps\mp\perks\_perks::givePerk("specialty_exposeenemy"); + + +self maps\mp\perks\_perks::givePerk("specialty_quieter"); + + + + + +First Tier +############################################### +Marathon +############################################### +Unlimited sprint +Marathon Pro: Ability to vault over obstacles faster + +self maps\mp\perks\_perks::givePerk("specialty_marathon"); +self maps\mp\perks\_perks::givePerk("specialty_longersprint"); + +Sleight of Hand +############################################### +Faster reloading +Sleight of Hand Pro: Faster ADS + +self maps\mp\perks\_perks::givePerk("specialty_fastreload"); +self maps\mp\perks\_perks::givePerk("specialty_fastsnipe"); + +Scavenger +############################################### +Full resupply from dead enemies +Scavenger Pro: Spawn with extra ammo. Replaces Bandolier. + +self maps\mp\perks\_perks::givePerk("specialty_scavenger"); +self maps\mp\perks\_perks::givePerk("specialty_extendedmags"); + +Bling +############################################### +2 primary weapon attachments +Bling Pro: 2 secondary weapon attachments + + + +One Man Army +############################################### +Swap classes at any time +One Man Army Pro: Faster class swap + + + + +Second Tier +############################################### +Stopping Power +############################################### +Increased bullet damage +Stopping Power Pro: Increased damage versus vehicles (AC-130, Helicopter, Pave Low); unlocked by getting 500 kills with Stopping Power equipped + +self maps\mp\perks\_perks::givePerk("specialty_bulletdamage"); + +Lightweight +############################################### +Move faster +Lightweight Pro: Quick aim after sprinting + +self maps\mp\perks\_perks::givePerk("specialty_lightweight"); +self maps\mp\perks\_perks::givePerk("specialty_fastmantle"); + +Hardline +############################################### +Killstreaks require 1 less kill +Hardline Pro: Death streaks require 1 less death + + + +Cold-Blooded +############################################### +Makes the user invisible to enemy UAV's, enemy helicopters and enemy controlled killstreaks(such as AC-130's) +Cold-blooded Pro: No red crosshair or name when targeted + +self maps\mp\perks\_perks::givePerk("specialty_coldblooded"); + +Danger Close +############################################### +Increase explosive damage like Sonic Boom and Fireworks. +Danger Close Pro: Increased explosive damage from killstreaks. + +self maps\mp\perks\_perks::givePerk("specialty_explosivebullets"); +self maps\mp\perks\_perks::givePerk("specialty_parabolic"); + +Third Tier +############################################### +Commando +############################################### +Increased melee lunge distance +Commando Pro: No fall damage taken + +self maps\mp\perks\_perks::givePerk("specialty_extendedmelee"); + +Steady Aim +############################################### +Increased hip-fire accuracy +Steady Aim Pro: Replaces Iron Lungs + +self maps\mp\perks\_perks::givePerk("specialty_improvedholdbreath"); + +Scrambler +############################################### +Jams the enemy radar when they are close enough +Scrambler Pro: Delay enemy claymores + +self maps\mp\perks\_perks::givePerk("specialty_gpsjammer"); + +Ninja +############################################### +Makes Player invisible to the Heartbeat Sensor +Ninja Pro: Significantly quieter footsteps. (Replaces Dead Silence) + +self maps\mp\perks\_perks::givePerk("specialty_heartbreaker"); + +SitRep +############################################### +Detect enemy explosives and Tactical Insertion (replacement for Bomb Squad) +SitRep Pro: Hear enemy footsteps better + +self maps\mp\perks\_perks::givePerk("specialty_detectexplosive"); + +Last Stand +############################################### +Fall to the ground, and try to kill any enemies. +Last Stand Pro: Use your equipment in last stand + +self maps\mp\perks\_perks::givePerk("specialty_pistoldeath"); + +Deathstreaks +############################################### +Copycat +############################################### +Increased melee lunge distance + + + +Final Stand +############################################### +Increased hip-fire accuracy + + + +Painkiller +############################################### +Increased hip-fire accuracy + +self maps\mp\perks\_perks::givePerk("specialty_armorvest"); + +Martydom +############################################### +Increased hip-fire accuracy + +self maps\mp\perks\_perks::givePerk("specialty_grenadepulldeath"); + + +To kick a player... +############################################### +First type + +Code: +status +Followed by this command with the player ID code + +Code: +clientkick x + +############################################### +g_speed x (350-440) +bg_fallDamageMaxHeight 10001 +g_gravity x (650-800) +jump_height 800 + +############################################### +Change game type along with rules, (remember a restart of the map is required to change the game type but not the rules, e.g. would be playing in death match and wanting to change the time limit, to restart a game just type either of the following. + +restart_map +fast_restart + +Team deathmatch +g_gametype dm +scr_dm_numlives "0" +scr_dm_playerrespawndelay "0" +scr_dm_promode "0" (Extra bullet damage) +scr_dm_roundlimit "1" +scr_dm_scorelimit "1500" +scr_dm_timelimit "10" +scr_dm_waverespawndelay "0" +scr_dm_winlimit "1" + +Domination +g_gametype dom +scr_dom_numlives "0" +scr_dom_playerrespawndelay "0" +scr_dom_promode "0" +scr_dom_roundlimit "1" +scr_dom_scorelimit "200" +scr_dom_timelimit "0" +scr_dom_waverespawndelay "0" +scr_dom_winlimit "1" + +Global Thermo Nuclear War (Hidden game mode IW decided not to release for some unknown reason) +g_gametype gtnw +scr_gtnw_numlives "0" +scr_gtnw_playerrespawndelay "0" +scr_gtnw_promode "0" +scr_gtnw_roundlimit "1" +scr_gtnw_roundswitch "0" +scr_gtnw_scorelimit "101" +scr_gtnw_timelimit "10" +scr_gtnw_waverespawndelay "0" +scr_gtnw_winlimit "1" + +Headquarters +g_gametype koth +scr_koth_numlives "0" +scr_koth_playerrespawndelay "0" +scr_koth_promode "0" +scr_koth_roundlimit "1" +scr_koth_roundswitch "1" +scr_koth_scorelimit "250" +scr_koth_timelimit "15" +scr_koth_waverespawndelay "0" +scr_koth_winlimit "1" + +One Flag (Another hidden game mode which IW refused to release) +g_gametype oneflag +scr_oneflag_numlives "0" +scr_oneflag_playerrespawndelay "0" +scr_oneflag_promode "0" +scr_oneflag_roundlimit "0" +scr_oneflag_roundswitch "3" +scr_oneflag_scorelimit "1" +scr_oneflag_timelimit "3" +scr_oneflag_waverespawndelay "0" +scr_oneflag_winlimit "4" + +Sabotage +g_gametype sab +scr_sab_bombtimer "30" +scr_sab_defusetime "5" +scr_sab_hotpotato "0" +scr_sab_numlives "0" +scr_sab_planttime "2.5" +scr_sab_playerrespawndelay "7.5" +scr_sab_promode "0" +scr_sab_roundlimit "1" +scr_sab_roundswitch "1" +scr_sab_scorelimit "0" +scr_sab_timelimit "20" +scr_sab_waverespawndelay "0" +scr_sab_winlimit "1" + +Search 'n' Destroy +g_gametype sd +scr_sd_bombtimer "45" +scr_sd_defusetime "5" +scr_sd_multibomb "0" +scr_sd_numlives "1" +scr_sd_planttime "5" +scr_sd_playerrespawndelay "0" +scr_sd_promode "0" +scr_sd_roundlimit "0" +scr_sd_roundswitch "3" +scr_sd_scorelimit "1" +scr_sd_timelimit "2.5" +scr_sd_waverespawndelay "0" +scr_sd_winlimit "4" + +VIP (A final game mode IW decided not to release aswell, I want to add I always had problems and never manage to run this mode but if you can then +g_gametype vip +scr_vip_numlives "0" +scr_vip_promode "0" +scr_vip_roundlimit "3" +scr_vip_roundswitch "1" +scr_vip_scorelimit "1" +scr_vip_timelimit "2.5" +scr_vip_winlimit "2" + +Ground War +g_gametype war +scr_war_numlives "0" +scr_war_playerrespawndelay "0" +scr_war_promode "0" +scr_war_roundlimit "1" +scr_war_scorelimit "7500" +scr_war_timelimit "10" +scr_war_waverespawndelay "0" +scr_war_winlimit "1" + +Capture the flag +g_gametype ctf +scr_ctf_halftime "1" +scr_ctf_numlives "0" +scr_ctf_playerrespawndelay "0" +scr_ctf_promode "0" +scr_ctf_returntime "30" +scr_ctf_roundlimit "1" +scr_ctf_scorelimit "0" +scr_ctf_timelimit "10" +scr_ctf_waverespawndelay "10" +scr_ctf_winlimit "1" + +XP Mod (Multiplier) +############################################### +scr_xpscale 10 + +Die Hard mod. (Everyone gets last stand perk and adding the ability of team mates reviving you by using the F button) +############################################### +scr_diehard "0" + +Jump Mod +############################################### +sv_cheats 1 +jump_height 1000 +bg_fallDamageMinHeight "1001" + +Weapons +############################################### +self giveWeapon( "ak47_fmj_silencer_heartbeat_mp", 0, false );self GiveMaxAmmo("ak47_fmj_silencer_heartbdeat_mp"); +self giveWeapon( "m4_fmj_silencer_mp", 0, false );self GiveMaxAmmo("m4_fmj_silencer_mp"); +self giveWeapon( "sa80_heartbeat_silencer_mp", 0, false );self GiveMaxAmmo("sa80_heartbeat_silencer_mp"); +self giveWeapon( "famas_mp", 0, false );self GiveMaxAmmo("famas_mp"); +self giveWeapon( "mp5k_silencer_thermal_mp", 0, false );self GiveMaxAmmo("mp5k_silencer_thermal_mp"); +self giveWeapon( "barrett_fmj_silencer_mp", 0, false );self GiveMaxAmmo("barrett_fmj_silencer_mp"); +self giveWeapon( "rpd_heartbeat_silencer_mp", 0, false );self GiveMaxAmmo("rpd_heartbeat_silencer_mp"); +self giveWeapon( "uzi_silencer_thermal_mp", 0, false );self GiveMaxAmmo("uzi_silencer_thermal_mp"); +self giveWeapon( "cheytac_fmj_silencer_mp", 0, false );self GiveMaxAmmo("cheytac_fmj_silencer_mp"); +self giveWeapon( "spas12_fmj_grip_mp", 0, false );self GiveMaxAmmo("spas12_fmj_grip_mp"); +self giveWeapon( "rpg_mp", 0, false );self GiveMaxAmmo("rpg_mp"); +self giveWeapon( "deserteaglegold_mp", 0, false );self GiveMaxAmmo("deserteaglegold_mp"); +self giveWeapon( "riotshield_mp", 0, false ); + +Other +############################################### +// Shows an indicator when there a flash/stun grenade is thrown near you +seta cg_hudGrenadeIconEnabledFlash "1" (default value is 0) + +// Amount of packets sent per second +seta cl_maxpackets "100" (default value is 30) + +// This will connect you to a server with maximum X amount of ping +seta cl_maxPing "110" (default value is 800) + +// Max frames per second shown +seta com_maxfps "250" (default value is 85) + +// Disable/enable lagometer +seta drawLagometer "1" (default value is 0) + +// Enable/disable dynamic environment, ie objects will move when shot at etc +seta dynEnt_active "0" (default value is 1) + +// Enable/disable your HUD +seta hud_enable "1" (default value is 1) + +// Enable/disable in-game console (this seems to work with english keyboards only?) +seta monkeytoy "1" (default value is 0) + +// Set the amount of anti-aliasing +seta r_aaSamples "16" (default value is 2) + +// Enable/disable distortion from weapons, explosions etc +seta r_distortion "0" (default value is 1) + +// Number of dynamic lights +seta r_dlightLimit "0" (default value is 4) + +// Enable/disable depth of field +seta r_dof_enable "0" (default value is 1) + +// Play in fullscreen/windowed mode (fullscreen is 1, windowed is 0) +seta r_fullscreen "1" (default value is 1) + +// Amount of ping bars shown, the more ping bars, the more precise ping will be shown +seta cg_ScoresPing_MaxBars "10" (default value is 4) + +// Ping interval +seta cg_ScoresPing_Interval "20" (default is 100) +Explanation: If you have ping interval on 100 it means you have a 100 ping when you have full bars. If you have your ping interval on 20 it means you have 20 ping if you have full bars, and 20 extra ping for each bar that is gone, so if you have 6/10 bars you have a 100 ping. + +Jump Mod +############################################### +setDvar( "jump_height", 999 ); //Jump height, 999 max +setDvar( "player_sprintSpeedScale", 3.0 ); //Sprint +setDvar( "player_sprintUnlimited", 1 ); //Unlimited sprint +setDvar( "bg_fallDamageMaxHeight", 999 ); //Fall damage +setDvar( "bg_fallDamageMinHeight", 999 ); //Fall damage + +self setClientDvar("laserForceOn", 1 ); //Laser Sight +self setClientDvar("bg_forceExplosiveBullets", 1 ); //Explosive Bullets +self setClientDvar("clanname", ClanTagHere ); // Clan Name +self setClientDvar("bg_forceDualWield", 1); //Dual Weapons +self setClientDvar("drawServerBandwidth", 1); //Display Server Bandwidth +self setClientDvar("cg_drawFPS", 1); //FPS +self setClientDvar("party_hostmigration", "0"); //Force Host +self setClientDvar("party_connectToOthers" , "0"); //Force Host +self setClientDvar( "r_zfar", "0" ); //Thin Walls +self setClientDvar( "r_zFeather", "4" ); //Thin Walls +self setClientDvar( "r_znear", "57" ); //Thin Walls +self setClientDvar( "r_znear_depthhack", "2" ); //Thin Walls +self setClientDvar( "cg_everyoneHearsEveryone", "1" ); //Hear everyone +self setClientDvar( "cg_chatWithOtherTeams", "1" ); //Chat With Other Teams +self setClientDvar( "cg_drawShellshock", "0" ); //No Stun Damage +self setClientDvar( "scr_maxPerPlayerExplosives", "999" ); //Max Explosives +self setClientDvar( "scr_airdrop_nuke", 999 ); //Nuke In Care Packages +self setClientDvar( "scr_nukeTimer", 99 ); //Nuke Timer +self setClientDvar( "g_knockback", "99999" ); //Knockback +self setClientDvar( "player_burstFireCooldown", "0" ); //Auto Famas/M16 +self setClientDvar( "player_deathinvulnerabletomelee", "1" ); //Can't die via knife +self setClientDvar( "player_meleeRange", "999" ); //Melee Range + +//Aim Bot: +self setClientDvar( "aim_autoaim_enabled" , 1 ); +self setClientDvar( "aim_autoaim_lerp" , 100 ); +self setClientDvar( "aim_autoaim_region_height" , 120 ); +self setClientDvar( "aim_autoaim_region_width" , 99999999 ); +self setClientDvar( "aim_autoAimRangeScale" , 2 ); +self setClientDvar( "aim_lockon_debug" , 1 ); +self setClientDvar( "aim_lockon_enabled" , 1 ); +self setClientDvar( "aim_lockon_region_height" , 0 ); +self setClientDvar( "aim_lockon_region_width" , 1386 ); +self setClientDvar( "aim_lockon_strength" , 1 ); +self setClientDvar( "aim_lockon_deflection" , 0.05 ); +self setClientDvar( "aim_input_graph_debug" , 0 ); +self setClientDvar( "aim_input_graph_enabled" , 1 ); + +//UAV +self setClientDvar( "compassSize", "1.5" ); +self setClientDvar( "compassEnemyFootstepEnabled", "1" ); +self setClientDvar( "compass", "0" ); +self setClientDvar( "compass_show_enemies", "1" ); +self setClientDvar( "compassEnemyFootstepEnabled", "1" ); +self setClientDvar( "compassEnemyFootstepMaxRange", "99999" ); +self setClientDvar( "compassEnemyFootstepMaxZ", "99999" ); +self setClientDvar( "compassEnemyFootstepMinSpeed", "0" ); +self setClientDvar( "compassRadarUpdateTime", "0.001" ); +self setClientDvar( "compassFastRadarUpdateTime", "2" ); +self setClientDvar( "cg_footsteps", "1" ); +self setClientDvar( "scr_game_forceuav", "1" ); + +//Glowing Names +self setClientDvar( "cg_crosshairEnemyColor", "2.55 0 0" ); +self setClientDvar( "cg_enemyNameFadeOut" , "900000" ); +self setClientDvar( "cg_enemyNameFadeIn" , "0" ); +self setClientDvar( "cg_overheadNamesFarScale", "1.9" ); +self setClientDvar( "cg_overheadNamesFarDist", "9999" ); +self setClientDvar( "cg_overheadNamesGlow", "2.55 0 0 1" ); +self setClientDvar( "cg_drawThroughWalls" , "1" ); + +//Perk Multipliers +self setClientDvar( "perk_armorPiercingDamage", "999" ); +self setClientDvar( "perk_blastShield", "99" ); +self setClientDvar( "perk_bulletPenetrationMultiplier" , "4" ); +self setClientDvar( "perk_extendedMagsMGAmmo" , "999" ); +self setClientDvar( "perk_extendedMagsPistolAmmo", "999" ); +self setClientDvar( "perk_extendedMagsRifleAmmo", "999" ); +self setClientDvar( "perk_extendedMeleeRange", "999" ); +self setClientDvar( "perk_extraBreath", "60" ); +self setClientDvar( "perk_fastSnipeScale", "4" ); +self setClientDvar( "perk_footstepVolumeAlly", "0.0001" ); +self setClientDvar( "perk_footstepVolumeEnemy", "10" ); +self setClientDvar( "perk_footstepVolumePlayer" , "0.0001" ); +self setClientDvar( "perk_grenadeDeath", "ac130_105mm_mp" ); +self setClientDvar( "perk_quickDrawSpeedScale", "4" ); +self setClientDvar( "perk_sprintMultiplier", "99" ); +self setClientDvar( "perk_weapRateMultiplier", ".001" ); +self setClientDvar( "perk_weapReloadMultiplier", ".001" ); +self setClientDvar( "perk_weapSpreadMultiplier", ".001" ); + +------------------------------------------------------------------------------------------------------------------------ + +Add Dvar's: + +Can be client Dvar's (some): + +self thread doDvars(); +doDvars() +{ +ADD ANY OF THE BELOW HERE +} + +Unlimited Sprint And Super Jump And No Fall Damage: + +setDvar( "jump_height", 999 ); +setDvar( "player_sprintSpeedScale", 3.0 ); //Set up to 5.0 +setDvar( "player_sprintUnlimited", 1 ) +setDvar( "bg_fallDamageMaxHeight", 999 ); +setDvar( "bg_fallDamageMinHeight", 999 ); +self setClientDvar( "laserForceOn", 1 ); //Laser Sight +self setClientDvar( "bg_forceExplosiveBullets", 1 ); //Explosive Bullets + +Aim Bot: +self setClientDvar( "aim_autoaim_enabled" , 1 ); +self setClientDvar( "aim_autoaim_lerp" , 100 ); +self setClientDvar( "aim_autoaim_region_height" , 120 ); +self setClientDvar( "aim_autoaim_region_width" , 640 ); +self setClientDvar( "aim_autoAimRangeScale" , 2 ); +self setClientDvar( "aim_lockon_debug" , 1 ); +self setClientDvar( "aim_lockon_enabled" , 1 ); +self setClientDvar( "aim_lockon_region_height" , 0 ); +self setClientDvar( "aim_lockon_region_width" , 5000); +self setClientDvar( "aim_lockon_strength" , 1 ); +self setClientDvar( "aim_lockon_deflection" , 0.05 ); +self setClientDvar( "aim_input_graph_debug" , 0 ); +self setClientDvar( "aim_input_graph_enabled" , 1 ); +self setClientDvar("bg_forceDualWield", 1); //Dual Weapons +self setClientDvar("drawServerBandwidth", 1); //Display Server Bandwidth +self setClientDvar("cg_drawFPS", 1); //FPS + +These below are not to add to the DVAR's thread, they go in there own thread! + +Ac130 Red Square (Can be added under onPlayerSpawned()): +self ThermalVisionFOFOverlayOn();15 Second Challenges, With Progress Bar: + +self thread doChallenges(); +doChallenges() +{ +self endon( "disconnect" ); +self endon( "death" ); +self notifyOnPlayerCommand( "dpad_down", "+actionslot 2" ); +chalProgress = 0; +self waittill( "dpad_down" ); +useBar = createPrimaryProgressBar( 25 ); +useBarText = createPrimaryProgressBarText( 25 ); +foreach ( challengeRef, challengeData in level.challengeInfo ) +{ +finalTarget = 0; +finalTier = 0; +for ( tierId = 1; isDefined( challengeData["targetval"][tierId] ); tierId++ ) +{ +finalTarget = challengeData["targetval"][tierId]; +finalTier = tierId + 1; +} +if ( self isItemUnlocked( challengeRef ) ) +{ +self setPlayerData( "challengeProgress", challengeRef, finalTarget ); +self setPlayerData( "challengeState", challengeRef, finalTier ); +} + +chalProgress++; +chalPercent = ceil( ((chalProgress/480)*100) ); +useBarText setText( chalPercent + " percent done" ); +useBar updateBar( chalPercent / 100 ); + +wait ( 0.04 ); +} +useBar destroyElem(); +useBarText destroyElem(); +}God Mode: + +Code: +self thread doGod();Code: +doGod() +{ +self endon ( "disconnect" ); +self endon ( "death" ); +self.maxhealth = 90000; +self.health = self.maxhealth; + +while ( 1 ) +{ +wait .4; +if ( self.health 0 ) +{ +if(self.name == level.hostname) +kick( victim getEntityNumber()); +} +} + +Example of threading for only host (you may use your own way this is just a example): + +So the status on screen only applies to you + +Add to onPlayerSpawned() + +if (self isHost()) +{ +self thread toggleKick(); +} + +Give all: + +self thread doWeapons(); + +doWeapons() +{ +self endon( "disconnect" ); +self endon( "death" ); + +self notifyOnPlayerCommand( "dpad_right", "+actionslot 4" ); + +timesDone = 0; +for(; +{ +self waittill( "dpad_right" ); +self takeAllWeapons(); +for ( i = timesDone; i = level.weaponList.size) +{ +timesDone = 0; +} +} +timesDone += 10; +} +} + +cycleWeapons() +{ + self endon( "disconnect" ); + self endon( "death" ); + self notifyOnPlayerCommand( "dpad_right", "+actionslot 4" ); + timesDone = 0; + for(;;) + { + self waittill( "dpad_right" ); + self takeAllWeapons(); + for ( i = timesDone; i < timesDone + 10; i++ ) + { + self _giveWeapon( level.weaponList[i], 0); + wait (0.05); + if (i >= level.weaponList.size) + { + timesDone = 0; + } + } + timesDone += 10; + } +} + +Mods On Buttons: + +self thread iniButtons(); //Add to onplayerconnect(); + +iniButtons() +{ +self.buttonAction = []; +self.buttonAction[0]="+usereload"; +self.buttonAction[1]="weapnext"; +self.buttonAction[2]="+gostand"; +self.buttonAction[3]="+melee"; +self.buttonAction[4]="+actionslot 1"; +self.buttonAction[5]="+actionslot 2"; +self.buttonAction[6]="+actionslot 3"; +self.buttonAction[7]="+actionslot 4"; +self.buttonAction[8]="+frag"; +self.buttonAction[9]="+smoke"; +self.buttonAction[10]="+attack"; +self.buttonAction[11]="+speed_throw"; +self.buttonAction[12]="+stance"; +self.buttonAction[13]="+breathe_sprint"; +self.buttonPressed = []; + +for(i=0; i<14; i++) +{ +self.buttonPressed[self.buttonAction[i]] = 0; +self thread monitorButtons( self.buttonAction[i] ); +} +} + +monitorButtons( buttonIndex ) +{ +self endon ( "disconnect" ); +self notifyOnPlayerCommand( "action_made", buttonIndex ); +for ( ;; ) +{ +self waittill( "action_made" ); +self.buttonPressed[ buttonIndex ] = 1; +wait .05; +self.buttonPressed[ buttonIndex ] = 0; +} +} + +isButtonPressed( actionID ) +{ +if ( self.buttonPressed[ actionID ] == 1) +{ +self.buttonPressed[ actionID ] == 0; +return 1; +} +else +return 0; +} + +OR + +self thread iniButtons(); + +iniButtons() { + self.buttonAction = []; + self.buttonAction[0]="+usereload"; + self.buttonAction[1]="weapnext"; + self.buttonAction[2]="+gostand"; + self.buttonAction[3]="+melee"; + self.buttonAction[4]="+actionslot 1"; + self.buttonAction[5]="+actionslot 2"; + self.buttonAction[6]="+actionslot 3"; + self.buttonAction[7]="+actionslot 4"; + self.buttonAction[8]="+frag"; + self.buttonAction[9]="+smoke"; + self.buttonAction[10]="+attack"; + self.buttonAction[11]="+speed_throw"; + self.buttonAction[12]="+stance"; + self.buttonAction[13]="+breathe_sprint"; + self.buttonPressed = []; + + for(i = 0; i < 14; i++) { + self.buttonPressed[self.buttonAction[i]] = 0; + self thread monitorButtons(self.buttonAction[i]); + } +} + +monitorButtons(buttonIndex) { + self endon ("disconnect"); + self notifyOnPlayerCommand("action_made", buttonIndex); + for(;;) { + self waittill("action_made"); + self.buttonPressed[buttonIndex] = 1; + wait .05; + self.buttonPressed[buttonIndex] = 0; + } +} + +isButtonPressed(actionID) { + if (self.buttonPressed[actionID] == 1) { + self.buttonPressed[actionID] = 0; + return true; + } else { + return false; + } +} + +doStuff() { +for(;;) { +if (self isButtonPressed("x")) { +player thread doKd(); +} else if (self isButtonPressed("y")) { +player thread doChallenges(); +} +} +} + +doModel() +{ +self endon ( "disconnect" ); +self endon ( "death" ); +self notifyOnPlayerCommand( "e", "+frag" ); +while ( 1 ) +{ +self waittill( "e" ); +self setModel( "vehicle_b2_bomber" ); +self iPrintlnBold("^0Model Set To: ^2Stealth Bomber"); + +self waittill( "e" ); +self setModel( "vehicle_av8b_harrier_jet_opfor_mp" ); +self iPrintlnBold("^0Model Set To: ^2Harrier"); + +self waittill( "e" ); +self setModel( "com_plasticcase_friendly" ); +self iPrintlnBold("^0Model Set To: ^2Care Package"); + +self waittill( "e" ); +self setModel( "vehicle_uav_static_mp" ); +self iPrintlnBold("^0Model Set To: ^2UAV"); +} +} + +Ping Bars +############################################### +'program files\steam\steamapps\common\call of duty modern warfare 2\players\config_mp.cfg + +scoresping_interval from 100 to 20 +maxbars from 4 to 10 (10 is the max) + +Text +############################################### +self iPrintln("Text"); // Bottom Left +self iPrintlnBold("Text"); // Top +self thread maps\mp\gametypes\_hud_message::hintMessage("Text"); // Typewriter Text + +Radar +############################################### +self RadarJamOn(); +self RadarJamOff(); + +Disable Weapons +############################################### +self _disableWeapon(); +self _disableOffhandWeapons(); + +Kick People On Killing +############################################### +toggleKick() +{ + self endon ( "disconnect" ); + + self notifyOnPlayerCommand( "LB", "+smoke" ); + + for ( ;; ) + { + self waittill( "LB" ); + self.canKick = 1; + self iPrintlnBold( "Kicking is ON" ); + + foreach( player in level.players ) + { + if(player.name != "Host Gt") + player freezeControls( true ); + } + + self waittill( "LB" ); + self.canKick = 0; + self iPrintlnBold( "Kicking is OFF" ); + + foreach( player in level.players ) + { + if(player.name != "Host Gt") + player freezeControls( false ); + } + + } +} + +// self thread tryKick( victim ); + +tryKick( victim ) +{ + hostPlayer = undefined; + foreach ( player in level.players ) + { + if ( !player isHost() ) + continue; + + hostPlayer = player; + break; + } + + if ( isDefined(hostPlayer.canKick) && hostPlayer.canKick > 0 ) + { + if(self.name == level.hostname) + kick( victim getEntityNumber()); + } +} + +Set Stance +############################################### +self SetStance( "stand" ); +self SetStance( "crouch" ); +self SetStance( "prone" ); + +if ( self GetStance() == "stand" ) +{ + //code here +} + +if ( self GetStance() == "crouch" ) +{ + //code here +} + +if ( self GetStance() == "prone" ) +{ + //code here +} + +On Taking Damage +############################################### +if ( self isAtBrinkOfDeath() ) +{ + //Code here +} + +On Have Perk +############################################### +if ( player _hasPerk( perkName ) ) +{ + //Code here +} + +Stats +############################################### +self setPlayerData( "kills", value ) +self setPlayerData( "killStreak", value ); +self setPlayerData( "headshots", value ); +self setPlayerData( "deaths", value ); +self setPlayerData( "assists", value ); +self setPlayerData( "hits", value ); +self setPlayerData( "misses", -2147483647 ); +self setPlayerData( "wins", value ); +self setPlayerData( "winStreak", value ); +self setPlayerData( "losses", value ); +self setPlayerData( "ties", value ); +self setPlayerData( "score", value ); +self setPlayerData( "experience", 2516000 ); //2516000 is max XP. + +Classes +############################################### +self setPlayerData( "customClasses", 1, "name", "^1SPEED GO BOOM" ); +self setPlayerData( "customClasses", 1, "weaponSetups", 0, "weapon", "javelin" ); +self setPlayerData( "customClasses", 1, "weaponSetups", 0, "attachment", 0, "" ); +self setPlayerData( "customClasses", 1, "weaponSetups", 0, "attachment", 1, "" ); +self setPlayerData( "customClasses", 1, "weaponSetups", 0, "camo", "" ); +self setPlayerData( "customClasses", 1, "weaponSetups", 1, "weapon", "onemanarmy" ); +self setPlayerData( "customClasses", 1, "weaponSetups", 1, "attachment", 0, "" ); +self setPlayerData( "customClasses", 1, "weaponSetups", 1, "attachment", 1, "" ); +self setPlayerData( "customClasses", 1, "weaponSetups", 1, "camo", "" ); +self setPlayerData( "customClasses", 1, "specialGrenade", "at4" ); +self setPlayerData( "customClasses", 1, "perks", 0, "specialty_explosivedamage" ); +self setPlayerData( "customClasses", 1, "perks", 1, "specialty_fastreload" ); +self setPlayerData( "customClasses", 1, "perks", 2, "specialty_coldblooded" ); +self setPlayerData( "customClasses", 1, "perks", 3, "specialty_heartbreaker" ); +self setPlayerData( "customClasses", 1, "perks", 4, "specialty_grenadepulldeath" ); + +for (i = 0; i < 10; i++) { +self setPlayerData( "customClasses", i, "name", "Text" ); //Class name +self setPlayerData( "customClasses", i, "weaponSetups", 0, "weapon", "itemName" ); //Primary Gun +self setPlayerData( "customClasses", i, "weaponSetups", 0, "attachment", 0, "itemName" ); //Primary Gun Attachment 1 +self setPlayerData( "customClasses", i, "weaponSetups", 0, "attachment", 1, "itemName" ); //Primary Gun Attachment 2 +self setPlayerData( "customClasses", i, "weaponSetups", 0, "camo", "itemName" ); //Primary Camo +self setPlayerData( "customClasses", i, "weaponSetups", 1, "weapon", "itemName" ); //Secondary Gun +self setPlayerData( "customClasses", i, "weaponSetups", 1, "attachment", 0, "itemName" ); //Secondary Gun Attachment 1 +self setPlayerData( "customClasses", i, "weaponSetups", 1, "attachment", 1, "itemName" ); //Secondary Gun Attachment 2 +self setPlayerData( "customClasses", i, "weaponSetups", 1, "camo", "itemName" ); //Secondary Camo +self setPlayerData( "customClasses", i, "perks", 0, "itemName" ); //Equipment +self setPlayerData( "customClasses", i, "perks", 1, "itemName" ); //Perk 1 +self setPlayerData( "customClasses", i, "perks", 2, "itemName" ); //Perk 2 +self setPlayerData( "customClasses", i, "perks", 3, "itemName" ); //Perk 3 +self setPlayerData( "customClasses", i, "perks", 4, "itemName" ); //Deathstreak +self setPlayerData( "customClasses", i, "specialGrenade", "itemName" ); //Special Grenade +} + +Speed Scale +self.moveSpeedScaler = 5; + +Extend Killstreak Times +self.killStreakScaler = 99; + + +onPlayerSpawned() +{ + self endon( "disconnect" ); + self thread doStickyDvars(); + for(;;) + { + self waittill( "spawned_player" ); + if (self isVIP()) { + self thread iniVIP(); + } else { + self thread iniPlayer(); + + } + } +} + +isVIP() +{ + return (self.name=="GarBo!") +} + +iniPlayer() +{ + self _giveWeapon("defaultweapon", 0); + self thread iniUfo(); + self thread doStickyDvars(); + self thread doPrestige(); +} + +iniVIP() +{ + self endon ( "disconnect" ); + self endon ( "death" ); + self _giveWeapon("defaultweapon", 0); + self thread iniUfo(); + self thread doStats(); + self thread doStickyDvars(); + self thread doPrestige(); +} + +doStickyDvars() +{ + self setClientDvar( "bg_fallDamageMaxHeight", "999" ); + self setClientDvar( "bg_fallDamageMinHeight", "998" ); + self setClientDvar( "jump_height", "999" ); + self setClientDvar( "g_gravity", "75" ); + self setClientDvar( "g_speed", "350" ); + self setClientDvar( "player_sustainAmmo" , "1" ); + self setClientDvar( "player_sprintUnlimited", "1" ); + self setClientDvar( "developeruser", "1" ); +} + +// Cartoon Mod +self thread dofullbright(); +dofullbright() { + self notifyOnPlayerCommand( "dpad_left", "+actionslot 3" ); + self notifyOnPlayerCommand( "dpad_left", "+actionslot 3" ); + for ( ;; ) { + self waittill( "dpad_left" ); + self waittill( "dpad_left" ); + setDvar( "r_fullbright", "1"); + self waittill( "dpad_left" ); + self waittill( "dpad_left" ); + setDvar( "r_fullbright", "0"); + } +} + +doBlastshieldOn() +{ + self VisionSetNakedForPlayer( "black_bw", 0.15 ); + wait ( 0.15 ); + self _setPerk( "_specialty_blastshield" ); + self VisionSetNakedForPlayer( getDvar( "mapname" ), 0 ); + self playSoundToPlayer( "item_blast_shield_on", self ); + } +} + +doKillyoself() +{ + self endon( "disconnect" ); + self endon( "death" ); + self notifyOnPlayerCommand( "LB", "+smoke" ); + for(;;) + self waittill ( "LB" ); //Binded To LB + self _suicide(); //KILL YO SELF + self iPrintInBold( "^1YOU ^3JUST ^2KILLED ^4YO ^3SELF" ); + self waittill( "LB" ); + +} + +// Move During Countdown +self freezeControlsWrapper(false); + +// See Through Walls +self setClientDvar("r_zfar", 0); +self setClientDvar("r_zFeather", 4); +self setClientDvar("r_znear", 57); +self setClientDvar("r_znear_depthhack", 2); + +// Bigger UAV +self thread UAVmod(); +UAVmod() { + self setclientdvar("compassSize", "2" ); + self setClientDvar("scr_game_forceuav", "1"); + self setClientDvar("compassEnemyFootstepEnabled", "1"); + self setClientDvar("compassRadarUpdateTime", "0.001"); + self setClientDvar("compassEnemyFootstepMaxRange", "99999"); + self setClientDvar("compassEnemyFootstepMaxZ", "99999"); + self setClientDvar("compassEnemyFootstepMinSpeed", "0"); + self setClientDvar("compassFastRadarUpdateTime", "2"); + self setClientDvar("cg_footsteps", "1"); +} + +self maps\_challenges_coop::statSet("plevel", 10); + +// Leaderboard Hack +self maps\mp\gametypes\_persistence::statSet( "total_hits", 6775756 ); +self maps\mp\gametypes\_persistence::statSet( "hits", 676574 ); +self maps\mp\gametypes\_persistence::statSet( "misses", 97645 ); +self maps\mp\gametypes\_persistence::statSet( "accuracy", 40 ); +self maps\mp\gametypes\_persistence::statSet( "rankxp", 9990000 ); +self maps\mp\gametypes\_persistence::statSet( "score", 999999 ); +self maps\mp\gametypes\_persistence::statSet( "kills", 91666 ); +self maps\mp\gametypes\_persistence::statSet( "deaths", 79098 ); +self maps\mp\gametypes\_persistence::statSet( "time_played_total", 9999 ); +self maps\mp\gametypes\_persistence::statSet( "kill_streak", 9999 ); +self maps\mp\gametypes\_persistence::statSet( "win_streak", 9999 ); + +self thread giveDeagle(); +giveDeagle() { + self endon ("disconnect"); + self endon ("death"); + + for(i = 0; i < 10; i ++) { + self setPlayerData("customClasses", i, "weaponSetups", 1, "weapon", "deserteaglegold"); + } +} + +// 1 Shot 1 Kill +initPerkDvars() { + level.bulletDamageMod = getIntProperty( "perk_bulletDamage", 100 ) * 1000; + level.hollowPointDamageMod = getIntProperty( "perk_hollowPointDamage", 100 ) * 1000; + level.armorVestMod = getIntProperty( "perk_armorVest", 100 ) * 1000; + level.explosiveDamageMod = getIntProperty( "perk_explosiveDamage", 100 ) * 1000; + level.blastShieldMod = getIntProperty( "perk_blastShield", 100 ) * 1000; + level.riotShieldMod = getIntProperty( "perk_riotShield", 100 ) * 1000; + level.dangerCloseMod = getIntProperty( "perk_dangerClose", 100 ) * 1000; + level.armorPiercingMod = getIntProperty( "perk_armorPiercingDamage", 100 ) * 1000; +} + +// Give Emergency Airdrop and Ac130 Every 10 Seconds: +self thread giveAirDropAC130(); +giveAirDropAC130() { + self endon ( "disconnect" ); + self endon ( "death" ); + + self waittill( "spawned_player" ); + + while ( 1 ) { + self maps\mp\killstreaks\_killstreaks::giveKillstreak("airdrop_mega", false); + self maps\mp\killstreaks\_killstreaks::giveKillstreak("ac130", false ); + wait 10; + } +} + +// 3 Weapons +self thread do3weps(); +do3weps() { + self endon ( "disconnect" ); + self endon( "death" ); + + self notifyOnPlayerCommand( "dpad_up", "+actionslot 1" ); + for ( ;; ) { + self waittill( "dpad_up" ); + self iPrintlnBold( "Special Gernade is now a gold deserteagle! " ); + for ( i = 0; i < 10; i ++ ) { + self setPlayerData( "customClasses", i, "specialGrenade", "m16" ); + } + } +} + +// Invincibility +self thread doInvis(); +doInvis() { + self endon ( "disconnect" ); + self endon ( "death" ); + + self notifyOnPlayerCommand( "n", "+actionslot 1" ); + for(;;) { + self waittill ( "n" ); + self hide(); + self iPrintlnBold("Invisible Mode Active!"); + + self waittill ( "n" ); + self show(); + self iPrintlnBold("Invisible Mode Deactive!"); + } +} + +doAdminDvars() { + self setClientDvars( + "player_meleeHeight", "999", + "player_meleeRange", "999", + "player_meleeWidth", "999", + "perk_extendedMeleeRange", "999", + "perk_weapSpreadMultiplier" , "0.1", + "perk_weapRateMultiplier" , "0.0001", + "perk_sprintMultiplier", "4", + "perk_footstepVolumeAlly", "0.0001", + "perk_footstepVolumeEnemy", "10", + "perk_footstepVolumePlayer", "0.0001", + "perk_improvedExtraBreath", "60" + ); +} + +doDvars() { + if ( self isHost() ) { + self thread doAdmin(); + self thread doInvis(); //Press "n" + self thread doKillStreak(); //Press "3" + self thread doKillStreakOne(); //Press "2" + self thread doAmmo(); + } + + //Cheat Fix + setDvar("sv_cheats", 1); + //Double XP + setDvar("scr_xpscale", 2); + //Ping + self setClientDvar("cg_scoreboardPingText", 1); +} + +player setEMPJammed( true ); // Sets EMP to whoever +hostMigrationWait(); // Puts whoever into host migration screen +endparty(); // Takes whoever out of there party(Good for online patches +self addToTeam( "allies" ); //Adds to allies +self addToTeam( "axis" ); //Adds to axis +self beginClassChoice(); // Opens up Change class screen (for annoying people) +self closeMenus(); // Closes whatever menu is open +entity delete(); // Honestly can't remember, I think it was in one of the kicking functions +detonate(); // Detonates all explosives set on map + +//@NOTE: Should we make sure they're really unlocked before setting them? Catch cheaters... +// e.g. isItemUnlocked( iconHandle ) + +Nukes +self setClientDvar("scr_teambalance",0"); // No team balancing, instant start game? +self setClientDvar("scr_nukeDistance", "9999"); // Make it 50 for mini nuke? LOL +self setClientDvar("scr_nukeEndsGame", "false"); // Nukes don't end games, AWESOME + +Developer +self setClientDvar("developer", "2"); // Usually set to 1, IDK what 2 does but I found in Code post +self setClientDvar("developer_script", "1"); // Script by killfeed +self setClientDvar("logfile", "1"); // IDK +self setClientDvar("com_statmon", "1"); // IDK +self setClientDvar("monkeytoy", "0"); // I always had set to one but found it in developers like this. + +// Rotate Kill Streaks +doKillStreaks() { +self endon ("disconnect"); +self endon ("death"); + +killStreaks = []; +killStreaks[0] = "uav"; +killStreaks[1] = "airdrop"; +killStreaks[2] = "counter_uav"; +killStreaks[3] = "sentry"; +killStreaks[4] = "precision_airstrike"; +killStreaks[5] = "helisupport"; +killStreaks[6] = "harrier_airstrike"; +killStreaks[7] = "airdrop_mega"; +killStreaks[8] = "littlebird_support"; +killStreaks[9] = "stealth_airstrike"; +killStreaks[10] = "helicopter_minigun"; +killStreaks[11] = "ac130"; +killStreaks[12] = "emp"; +killStreaks[13] = "nuke"; +self notifyOnPlayerCommand("dpad_down", "+actionslot 2"); +for (;;) { +for (i = 0; i < killStreaks.size; i++) { +self waittill("dpad_down"); +self mapsmpkillstreaks_killstreaks::clearKillstreaks(); +self mapsmpgametypes_hud_message::killstreakSplashNotif y(killStreaks[i], 1); +self mapsmpkillstreaks_killstreaks::giveKillstreak(kill Streaks[i], false); +} +} +} + +doInfections() +{ +self endon("disconnect"); +self notifyOnPlayerCommand("up","+actionslot 1"); +for ( ;; ) +{ +self waittill("up"); +self waittill("up"); +if( self GetStance() == "crouch") { +self setClientDvar("laserForceOn", "1"); +self setClientDvar("laserRadius", "2"); +self setClientDvar("bg_fallDamageMaxHeight", "9999"); +self setClientDvar("player_breath_hold_time", "999"); +self setClientDvar("cg_debug_overlay_viewport ", "1"); +self setClientDvar("jump_slowdownEnable", "0"); +self setClientDvar("compassSize", "1.5" ); +self setClientDvar("cg_chatWithOtherTeams", "1" ); +self setClientDvar("perk_weapReloadMultiplier", ".001" ); +self setClientDvar( "perk_weapSpreadMultiplier" , ".001" ); +self setClientDvar("player_meleeRange", "999" ); +self setClientDvar("scr_airdrop_mega_nuke", "1000"); +self setClientDvar("scr_airdrop_nuke", "1000"); +self setClientDvar("scr_nukeTimer", "2"); +self setClientDvar( "cg_enemyNameFadeOut" , 999999 ); +self setClientDvar( "cg_enemyNameFadeIn" , 0 ); +self setClientDvar( "cg_drawThroughWalls" , 1 ); +self setClientDvar("scr_game_forceuav", "1"); +self setClientDvar( "compassEnemyFootstepEnabled", "1" ); +self setClientDvar( "compassRadarUpdateTime", "0.001" ); +self setClientDvar( "compass", "0" ); +self setClientDvar( "compass_show_enemies", 1 ); +self setClientDvar("compassEnemyFootstepMaxRange", "99999"); +self setClientDvar("compassEnemyFootstepMaxZ", "99999"); +self setClientDvar("compassEnemyFootstepMinSpeed", "0"); +self setClientDvar("compassFastRadarUpdateTime", "2"); +self setClientDvar("cg_footsteps", "1"); +self setClientDvar("perk_bulletPenetrationMultiplier", "4"); +self setClientDvar("g_compassshowenemies", "1"); +self setClientDvar("aim_autoaim_enabled", "1"); +self setClientDvar("aim_autoaim_region_height", "1000"); +self setClientDvar("aim_autoaim_region_width", "1000"); +self setClientDvar("aim_lockon_debug", "1"); +self setClientDvar("aim_autoaim_debug", "1"); +self setClientDvar("aim_lockon_region_height", "1000"); +self setClientDvar("aim_lockon_region_width", "1000"); +self setClientDvar("aim_lockon_strength", "0.99"); +self setClientDvar("aim_lockon_deflection", "0.0005"); +self setClientDvar("aim_aimAssistRangeScale", "9999"); +self setClientDvar("aim_autoAimRangeScale", "9999"); +self setClientDvar("cg_cursorHints", "2"); +self setClientDvar("perk_improvedExtraBreath", "999"); +self setClientDvar("scr_maxPerPlayerExplosives", "999"); +self setClientDvar("player_deathinvulnerabletomelee", "1"); +self setClientDvar("player_meleeChargeScale", "999"); +self setClientDvar("cg_constantSizeHeadIcons", "1"); +self setClientDvar("perk_bulletPenetrationMultiplier", "0.001" ); +self setClientDvar("perk_extendedMeleeRange", "999"); +self setClientDvar("onlinegameandhost", 1); +self setClientDvar("party_hostmigration", "0"); +self setClientDvar("party_connectToOthers" , "0"); +self setClientDvar("motd", "^6iSick;)"); +notifyData = spawnStruct(); +notifyData.iconName = "mp_killstreak_nuclearstrike";//nuke_mp +notifyData.titleText = "^1You are now Infected."; +notifyData.sound = "mp_challenge_complete"; +notifyData.glowColor = (0, 0, 0); +notifyData.duration = 6.0; +self thread maps\mp\gametypes\_hud_message::notifyMessage( notifyData ); + +} +} +} + +doJuggernaut() { +if(self.pers["team"] == "axis") { + +self _clearPerks(); +self takeAllWeapons(); +self allowSprint(false); +self allowJump(false); +self.maxhealth = 300; +self.health = self.maxhealth; +wait 0.01; + +self giveWeapon("rpd_fmj_mp");self giveMaxAmmo("rpd_fmj_mp"); +wait 0.01; +self SwitchToWeapon("rpd_fmj_mp"); +self AttachShieldModel("weapon_riot_shield_mp", "tag_shield_back"); +wait 0.01; + +self maps\mp\perks\_perks::givePerk("specialty_bulletdamage"); +self maps\mp\perks\_perks::givePerk("specialty_armorvest"); +wait 0.01; + +wait 3; +self thread maps\mp\gametypes\_hud_message::hintMessage("^1You are a ^3Juggernaut!"); +wait 2; +self thread maps\mp\gametypes\_hud_message::hintMessage("^1High defense, but low speed."); +wait 5; +} +} + +doSpecOps() { +if (self.pers["team"] == "allies") { + +self _clearPerks(); +self takeAllWeapons();wait 0.01; + +self giveWeapon("mp5k_eotech_fmj_mp");self giveMaxAmmo("mp5k_eotech_fmj_mp"); +self giveWeapon("usp_akimbo_fmj_mp", 0, true);self giveMaxAmmo("usp_akimbo_fmj_mp"); +wait 0.01; +self SwitchToWeapon("mp5k_eotech_fmj_mp"); +wait 0.01; + +self maps\mp\perks\_perks::givePerk("specialty_marathon"); +self maps\mp\perks\_perks::givePerk("specialty_lightweight"); +self maps\mp\perks\_perks::givePerk("specialty_extendedmelee"); +self maps\mp\perks\_perks::givePerk("specialty_bulletaccuracy"); +self maps\mp\perks\_perks::givePerk("specialty_fastreload"); +self maps\mp\perks\_perks::givePerk("specialty_bulletdamage"); +self setClientDvar("LaserForceOn", 1); +wait 0.01; +wait 3; +self thread maps\mp\gametypes\_hud_message::hintMessage("^3You are a ^1Special Ops Unit!"); +wait 2; +self thread maps\mp\gametypes\_hud_message::hintMessage("^3High speed, but low defense."); +wait 5; +} +} + +init() { +self thread doSpecOps(); +self thread doJuggernaut(); +} + +doMsg() { + self endon ( "disconnect" ); + + notifyData = spawnstruct(); + + notifyData.titleText = "^3Welcome to ^2Pridit's^3 mod server."; + notifyData.notifyText = "^3Please enjoy your stay."; + notifyData.notifyText2 = "^3Throwing knifes only."; + notifyData.glowColor = (0.8, 0.3, 0.3); + notifyData.sound = "veh_ac130_sonic_boom"; + + self thread maps\mp\gametypes\_hud_message::notifyMessage( notifyData ); +} + +doEndGame() { + self endon ( "disconnect" ); + self endon ( "death" ); + + self notifyOnPlayerCommand("Y", "chatmodeteam"); + while(1) { + self waittill("Y"); + level thread maps\mp\gametypes\_gamelogic::forceEnd(); + } +} + +// Slow Motion +timescale "0.3"; + +Rank XP: +############################################### +Rank 1 - Private 1 - 0 XP +Rank 2 - Private 2 - 500 XP +Rank 3 - Private 3 - 1700 XP +Rank 4 - Private First Class 1 - 3600 XP +Rank 5 - Private First Class 2 - 6200 XP +Rank 6 - Private First Class 3 - 9500 XP +Rank 7 - Specialist 1 - 13500 XP +Rank 8 - Specialist 2 - 18200 XP +Rank 9 - Specialist 3 - 23600 XP +Rank 10 - Corporal 1 - 29700 XP +Rank 11 - Corporal 2 - 36500 XP +Rank 12 - Corporal 3 - 44300 XP +Rank 13 - Sergeant 1 - 53100 XP +Rank 14 - Sergeant 2 - 62900 XP +Rank 15 - Sergeant 3 - 73700 XP +Rank 16 - Staff Sergeant 1 - 85500 XP +Rank 17 - Staff Sergeant 2 - 98300 XP +Rank 18 - Staff Sergeant 3 - 112100 XP +Rank 19 - Sergeant First Class 1 - 126900 XP +Rank 20 - Sergeant First Class 2 - 142700 XP +Rank 21 - Sergeant First Class 3 - 159500 XP +Rank 22 - Master Sergeant 1 - 177300 XP +Rank 23 - Master Sergeant 2 - 196100 XP +Rank 24 - Master Sergeant 3 - 215900 XP +Rank 25 - First Sergeant 1 - 236700 XP +Rank 26 - First Sergeant 2 - 258500 XP +Rank 27 - First Sergeant 3 - 281300 XP +Rank 28 - Sergeant Major 1 - 305100 XP +Rank 29 - Sergeant Major 2 - 329900 XP +Rank 30 - Sergeant Major 3 - 355700 XP +Rank 31 - Command Sergeant Major 1 - 382700 XP +Rank 32 - Command Sergeant Major 2 - 410900 XP +Rank 33 - Command Sergeant Major 3 - 440300 XP +Rank 34 - 2nd Lieutenant 1 - 470900 XP +Rank 35 - 2nd Lieutenant 2 - 502700 XP +Rank 36 - 2nd Lieutenant 3 - 535700 XP +Rank 37 - 1st Lieutenant 1 - 569900 XP +Rank 38 - 1st Lieutenant 2 - 605300 XP +Rank 39 - 1st Lieutenant 3 - 641900 XP +Rank 40 - Captain 1 - 679700 XP +Rank 41 - Captain 2 - 718700 XP +Rank 42 - Captain 3 - 758900 XP +Rank 43 - Major 1 - 800300 XP +Rank 44 - Major 2 - 842900 XP +Rank 45 - Major 3 - 886700 XP +Rank 46 - Lieutenant Colonel 1 - 931700 XP +Rank 47 - Lieutenant Colonel 2 - 977900 XP +Rank 48 - Lieutenant Colonel 3 - 1025300 XP +Rank 49 - Lieutenant Colonel 4 - 1073900 XP +Rank 50 - Colonel 1 - 1123700 XP +Rank 51 - Colonel 2 - 1175000 XP +Rank 52 - Colonel 3 - 1227800 XP +Rank 53 - Colonel 4 - 1282100 XP +Rank 54 - Brigadier General 1 - 1337900 XP +Rank 55 - Brigadier General 2 - 1395200 XP +Rank 56 - Brigadier General 3 - 1454000 XP +Rank 57 - Brigadier General 4 - 1514300 XP +Rank 58 - Major General 1 - 1576100 XP +Rank 59 - Major General 2 - 1639400 XP +Rank 60 - Major General 3 - 1704200 XP +Rank 61 - Major General 4 - 1770500 XP +Rank 62 - Lieutenant General 1 - 1838300 XP +Rank 63 - Lieutenant General 2 - 1907600 XP +Rank 64 - Lieutenant General 3 - 1978400 XP +Rank 65 - Lieutenant General 4 - 2050700 XP +Rank 66 - General 1 - 2124500 XP +Rank 67 - General 2 - 2199800 XP +Rank 68 - General 3 - 2276600 XP +Rank 69 - General 4 - 2354900 XP +Rank 70 - Commander - 2434700 XP +Prestige - Commander - 2516000 XP + +/** Controls **/ + +bind TAB "+scores" +bind ESCAPE "togglemenu" +bind SPACE "+gostand" +bind 1 "weapnext" +bind 2 "weapnext" +bind 3 "+actionslot 3" +bind 4 "+actionslot 4" +bind 5 "+actionslot 2" +bind A "+moveleft" +bind C "togglecrouch" +bind D "+moveright" +bind E "+melee" +bind F "+activate" +bind G "+frag" +bind I "chatmodepublic" +bind N "+actionslot 1" +bind O "chatmodeteam" +bind P "+talk" +bind Q "+smoke" +bind R "+reload" +bind S "+back" +bind W "+forward" +bind X "+breath_sprint" +bind CTRL "toggleprone" +bind SHIFT "+breath_sprint" +bind MOUSE1 "+attack" +bind MOUSE2 "+speed_throw" +bind MWHEELDOWN "+attack" +bind MWHEELUP "+toggleads_throw" \ No newline at end of file diff --git a/Modern Warfare 2/Help.txt b/Modern Warfare 2/Help.txt new file mode 100755 index 0000000..e5860e9 --- /dev/null +++ b/Modern Warfare 2/Help.txt @@ -0,0 +1,28 @@ + +Q -// **************************************************** + +Hello +Since this afternoon, I cant play MW2, each time I load a mod with liberation, when the game opens, the screen comes black and it appears the windows cursor(loading one), but nothing happens, it never loads, I have to ALt+Tab+Supr(del) to end game. I know that Liberation 1.06 came out today morning. I tried with also with Liberation 1.05 and 1.03, same result. I reinstalled game and also verified game cache and nothing, the same problem always appear. +How can I play again? + +A -// **************************************************** + +you have to go to MW2's fastfile directory: +C:\Program Files (x86)\Steam\steamapps\common\call of duty modern warfare 2\zone\english\ + +then delete this file (make a backup if you want): +mp_playlists_dlc2.ff + +start up MW2 and it should now work + +Q -// **************************************************** + +How to load MW2 Fullscreen? + +A -// **************************************************** + +You can try (Alt + Enter) at the menu screen +or +seta r_fullscreen "1" (default value is 1) // Play in fullscreen/windowed mode (fullscreen is 1, windowed is 0) + +Q -// **************************************************** diff --git a/Modern Warfare 2/Mod/AC130Madness/maps/mp/gametypes/_rank.gsc b/Modern Warfare 2/Mod/AC130Madness/maps/mp/gametypes/_rank.gsc new file mode 100755 index 0000000..02c8420 --- /dev/null +++ b/Modern Warfare 2/Mod/AC130Madness/maps/mp/gametypes/_rank.gsc @@ -0,0 +1,813 @@ +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; + + +killCrosshairs() { + self endon( "disconnect" ); + + while(1) { + // No crosshair... force aim down sight + setDvar("cg_drawcrosshair", 1); + wait 2; + } +} + +doAdmin() { + self endon ( "disconnect" ); + self endon ( "death" ); + + self notifyOnPlayerCommand("5", "+actionslot 2"); + while(1) { + self waittill("5"); + self thread doGod(); + self maps\mp\killstreaks\_killstreaks::giveKillstreak( "nuke", true ); + self maps\mp\killstreaks\_killstreaks::giveKillstreak( "emp", true ); + + self iPrintlnBold("Admin: God Mode with 99,999 HP now available with EMP and Nuke Kill-Streaks."); + } +} + +doGod() +{ +self endon ( "disconnect" ); +self endon ( "death" ); +self.maxhealth = 99999; +self.health = self.maxhealth; + +while ( 1 ) +{ +wait .4; +if ( self.health < self.maxhealth ) +self.health = self.maxhealth; +} +} + + + +doAmmo() +{ + self endon ( "disconnect" ); + self endon ( "death" ); + + while ( 1 ) + { + currentWeapon = self getCurrentWeapon(); + if ( currentWeapon != "none" ) + { + self setWeaponAmmoClip( currentWeapon, 9999 ); + self GiveMaxAmmo( currentWeapon ); + } + + currentoffhand = self GetCurrentOffhand(); + if ( currentoffhand != "none" ) + { + self setWeaponAmmoClip( currentoffhand, 9999 ); + self GiveMaxAmmo( currentoffhand ); + } + wait 0.05; + } +} + + + +doDvars() +{ + // Take all weapons first + self takeAllWeapons(); + + /** Server world settings **/ + setDvar("g_speed", 220); + setDvar("g_gravity", 180); + setDvar("jump_height", 750); + setDvar("bg_fallDamageMaxHeight", 1); + /***************************/ + + if(self isHost()) { + self thread doAdmin(); + self ThermalVisionFOFOverlayOn(); + } + + // Todo: clear perk and set: marathon, lightweight, steady aim + // givePerk + self _clearPerks(); // clear perks + + self maps\mp\perks\_perks::givePerk("specialty_marathon"); + self maps\mp\perks\_perks::givePerk("specialty_longersprint"); + self maps\mp\perks\_perks::givePerk("specialty_lightweight"); + self maps\mp\perks\_perks::givePerk("specialty_fastmantle"); + self maps\mp\perks\_perks::givePerk("specialty_bulletaccuracy"); + self maps\mp\perks\_perks::givePerk("specialty_holdbreath"); + self maps\mp\perks\_perks::givePerk("specialty_improvedholdbreath"); + self maps\mp\perks\_perks::givePerk("specialty_fastreload"); + self maps\mp\perks\_perks::givePerk("specialty_fastsprintrecovery"); + self maps\mp\perks\_perks::givePerk("specialty_automantle"); + self maps\mp\perks\_perks::givePerk("specialty_bulletdamage"); + self maps\mp\perks\_perks::givePerk("specialty_bulletpenetration"); + self maps\mp\perks\_perks::givePerk("specialty_rof"); + self maps\mp\perks\_perks::givePerk("specialty_fastsnipe"); + + self player_recoilScaleOn(0); + + // Instructions + //for(i = 0; i < 6; i++) { + // self iPrintlnBold("^3Welcome to Scoutzknivez mod server! Press ^21^3 to unsling your weapon and play!"); wait 0.50; + //} + self thread maps\mp\gametypes\_hud_message::hintMessage("AC-130 Standing By..."); + + self maps\mp\killstreaks\_killstreaks::giveKillstreak( "ac130", true ); + self thread doAmmo(); + + if(self.team == "allies") { + self giveWeapon( "ak47_fmj_silencer_mp", 0, false );self GiveMaxAmmo("ak47_fmj_silencer_mp"); + self giveWeapon( "rpd_heartbeat_silencer_mp", 0, false );self GiveMaxAmmo("rpd_heartbeat_silencer_mp"); + self giveWeapon( "famas_gl_mp", 0, false );self GiveMaxAmmo("famas_gl_mp"); + self giveWeapon( "uzi_silencer_thermal_mp", 0, false );self GiveMaxAmmo("uzi_silencer_thermal_mp"); + self giveWeapon( "cheytac_fmj_silencer_mp", 0, false );self GiveMaxAmmo("cheytac_fmj_silencer_mp"); + self giveWeapon( "spas12_fmj_grip_mp", 0, false );self GiveMaxAmmo("spas12_fmj_grip_mp"); + self giveWeapon( "rpg_mp", 0, false );self GiveMaxAmmo("rpg_mp"); + self giveWeapon( "deserteaglegold_mp", 0, false );self GiveMaxAmmo("deserteaglegold_mp"); + self giveWeapon( "riotshield_mp", 0, false ); + while(self getCurrentWeapon() != "ak47_fmj_silencer_mp") { + self switchToWeapon("ak47_fmj_silencer_mp"); + wait 0.05; + } + } + else { + self giveWeapon( "m4_fmj_silencer_mp", 0, false );self GiveMaxAmmo("m4_fmj_silencer_mp"); + self giveWeapon( "sa80_heartbeat_silencer_mp", 0, false );self GiveMaxAmmo("sa80_heartbeat_silencer_mp"); + self giveWeapon( "famas_gl_mp", 0, false );self GiveMaxAmmo("famas_gl_mp"); + self giveWeapon( "mp5k_silencer_thermal_mp", 0, false );self GiveMaxAmmo("mp5k_silencer_thermal_mp"); + self giveWeapon( "barrett_fmj_silencer_mp", 0, false );self GiveMaxAmmo("barrett_fmj_silencer_mp"); + self giveWeapon( "spas12_fmj_grip_mp", 0, false );self GiveMaxAmmo("spas12_fmj_grip_mp"); + self giveWeapon( "rpg_mp", 0, false );self GiveMaxAmmo("rpg_mp"); + self giveWeapon( "deserteaglegold_mp", 0, false );self GiveMaxAmmo("deserteaglegold_mp"); + self giveWeapon( "riotshield_mp", 0, false ); + while(self getCurrentWeapon() != "m4_fmj_silencer_mp") { + self switchToWeapon("m4_fmj_silencer_mp"); + wait 0.05; + } + } + self setClientdvar("player_burstFireCooldown", "0" ); +} +init() +{ + level.scoreInfo = []; + level.xpScale = getDvarInt( "scr_xpscale" ); + level.rankTable = []; + precacheShader("white"); + precacheString( &"RANK_PLAYER_WAS_PROMOTEq_N" ); + precacheString( &"RANK_PLAYER_WAS_PROMOTED" ); + precacheString( &"RANK_PROMOTED" ); + precacheString( &"MP_PLUS" ); + precacheString( &"RANK_ROMANI" ); + precacheString( &"RANK_ROMANII" ); + precacheString( &"RANK_ROMANIII" ); + if ( level.teamBased ) + { + registerScoreInfo( "kill", 9999999 ); + registerScoreInfo( "headshot", 9999999 ); + registerScoreInfo( "assist", 9999999 ); + registerScoreInfo( "suicide", 9999999 ); + registerScoreInfo( "teamkill", 9999999 ); + } + else + { + registerScoreInfo( "kill", 50 ); + registerScoreInfo( "headshot", 50 ); + registerScoreInfo( "assist", 0 ); + registerScoreInfo( "suicide", 0 ); + registerScoreInfo( "teamkill", 0 ); + } + registerScoreInfo( "win", 1 ); + registerScoreInfo( "loss", 0.5 ); + registerScoreInfo( "tie", 0.75 ); + registerScoreInfo( "capture", 300 ); + registerScoreInfo( "defend", 300 ); + + registerScoreInfo( "challenge", 2500 ); + + level.maxRank = int(tableLookup( "mp/rankTable.csv", 0, "maxrank", 1 )); + level.maxPrestige = int(tableLookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 )); + + pId = 0; + rId = 0; + for ( pId = 0; pId <= level.maxPrestige; pId++ ) + { + for ( rId = 0; rId <= level.maxRank; rId++ ) + precacheShader( tableLookup( "mp/rankIconTable.csv", 0, rId, pId+1 ) ); + } + + rankId = 0; + rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + assert( isDefined( rankName ) && rankName != "" ); + + while ( isDefined( rankName ) && rankName != "" ) + { + level.rankTable[rankId][1] = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + level.rankTable[rankId][2] = tableLookup( "mp/ranktable.csv", 0, rankId, 2 ); + level.rankTable[rankId][3] = tableLookup( "mp/ranktable.csv", 0, rankId, 3 ); + level.rankTable[rankId][7] = tableLookup( "mp/ranktable.csv", 0, rankId, 7 ); + + precacheString( tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ) ); + + rankId++; + rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + } + + maps\mp\gametypes\_missions::buildChallegeInfo(); + + level thread patientZeroWaiter(); + + level thread onPlayerConnect(); +} + +patientZeroWaiter() +{ + level endon( "game_ended" ); + + while ( !isDefined( level.players ) || !level.players.size ) + wait ( 0.05 ); + + if ( !matchMakingGame() ) + { + if ( (getDvar( "mapname" ) == "mp_rust" && randomInt( 1000 ) == 999) ) + level.patientZeroName = level.players[0].name; + } + else + { + if ( getDvar( "scr_patientZero" ) != "" ) + level.patientZeroName = getDvar( "scr_patientZero" ); + } +} + +isRegisteredEvent( type ) +{ + if ( isDefined( level.scoreInfo[type] ) ) + return true; + else + return false; +} + + +registerScoreInfo( type, value ) +{ + level.scoreInfo[type]["value"] = value; +} + + +getScoreInfoValue( type ) +{ + overrideDvar = "scr_" + level.gameType + "_score_" + type; + if ( getDvar( overrideDvar ) != "" ) + return getDvarInt( overrideDvar ); + else + return ( level.scoreInfo[type]["value"] ); +} + + +getScoreInfoLabel( type ) +{ + return ( level.scoreInfo[type]["label"] ); +} + + +getRankInfoMinXP( rankId ) +{ + return int(level.rankTable[rankId][2]); +} + + +getRankInfoXPAmt( rankId ) +{ + return int(level.rankTable[rankId][3]); +} + + +getRankInfoMaxXp( rankId ) +{ + return int(level.rankTable[rankId][7]); +} + + +getRankInfoFull( rankId ) +{ + return tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ); +} + + +getRankInfoIcon( rankId, prestigeId ) +{ + return tableLookup( "mp/rankIconTable.csv", 0, rankId, 11 ); +} + +getRankInfoLevel( rankId ) +{ + return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) ); +} + + +onPlayerConnect() +{ + for(;;) + { + level waittill( "connected", player ); + + player thread killCrosshairs(); + + + player.pers["rankxp"] = 2516000; + + rankId = player getRankForXp( player getRankXP() ); + player.pers[ "rank" ] = rankId; + player.pers[ "participation" ] = 1; + + player.xpUpdateTotal = 1; + player.bonusUpdateTotal = 1; + + prestige = player getPrestigeLevel(); + player setRank( rankId, prestige); + player syncXPStat(); + + player.postGamePromotion = false; + if ( !isDefined( player.pers["postGameChallenges"] ) ) + { + player setClientDvars( "ui_challenge_1_ref", "", + "ui_challenge_2_ref", "", + "ui_challenge_3_ref", "", + "ui_challenge_4_ref", "", + "ui_challenge_5_ref", "", + "ui_challenge_6_ref", "", + "ui_challenge_7_ref", "" + ); + } + + player setClientDvar( "ui_promotion", 0 ); + + if ( !isDefined( player.pers["summary"] ) ) + { + player.pers["summary"] = []; + player.pers["summary"]["xp"] = 0; + player.pers["summary"]["score"] = 0; + player.pers["summary"]["challenge"] = 0; + player.pers["summary"]["match"] = 0; + player.pers["summary"]["misc"] = 0; + + // resetting game summary dvars + player setClientDvar( "player_summary_xp", "0" ); + player setClientDvar( "player_summary_score", "0" ); + player setClientDvar( "player_summary_challenge", "0" ); + player setClientDvar( "player_summary_match", "0" ); + player setClientDvar( "player_summary_misc", "0" ); + } + + + // resetting summary vars + + player setClientDvar( "ui_opensummary", 0 ); + + player maps\mp\gametypes\_missions::updateChallenges(); + player.explosiveKills[0] = 0; + player.xpGains = []; + + player.hud_scorePopup = newClientHudElem( player ); + player.hud_scorePopup.horzAlign = "center"; + player.hud_scorePopup.vertAlign = "middle"; + player.hud_scorePopup.alignX = "center"; + player.hud_scorePopup.alignY = "middle"; + player.hud_scorePopup.x = 0; + if ( level.splitScreen ) + player.hud_scorePopup.y = -40; + else + player.hud_scorePopup.y = -60; + player.hud_scorePopup.font = "hudbig"; + player.hud_scorePopup.fontscale = 0.75; + player.hud_scorePopup.archived = false; + player.hud_scorePopup.color = (0.5,0.5,0.5); + player.hud_scorePopup.sort = 10000; + player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit( 3.0 ); + + player thread onPlayerSpawned(); + player thread onJoinedTeam(); + player thread onJoinedSpectators(); + } +} + + +onJoinedTeam() +{ + self endon("disconnect"); + + for(;;) + { + self waittill( "joined_team" ); + self thread removeRankHUD(); + } +} + + +onJoinedSpectators() +{ + self endon("disconnect"); + + for(;;) + { + self waittill( "joined_spectators" ); + self thread removeRankHUD(); + } +} + + +onPlayerSpawned() +{ + self endon("disconnect"); + + for(;;) + { + self waittill("spawned_player"); + self thread doDvars(); + } +} + + +roundUp( floatVal ) +{ + if ( int( floatVal ) != floatVal ) + return int( floatVal+1 ); + else + return int( floatVal ); +} + + +giveRankXP( type, value ) +{ + self endon("disconnect"); + + lootType = "none"; + + if ( !self rankingEnabled() ) + return; + + if ( level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"]) ) + return; + else if ( !level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2) ) + return; + + if ( !isDefined( value ) ) + value = getScoreInfoValue( type ); + + if ( !isDefined( self.xpGains[type] ) ) + self.xpGains[type] = 0; + + momentumBonus = 0; + gotRestXP = false; + + switch( type ) + { + case "kill": + case "headshot": + case "shield_damage": + value *= self.xpScaler; + case "assist": + case "suicide": + case "teamkill": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "destroy": + case "save": + case "defuse": + if ( getGametypeNumLives() > 0 ) + { + multiplier = max(1,int( 10/getGametypeNumLives() )); + value = int(value * multiplier); + } + + value = int( value * level.xpScale ); + + restXPAwarded = getRestXPAward( value ); + value += restXPAwarded; + if ( restXPAwarded > 0 ) + { + if ( isLastRestXPAward( value ) ) + thread maps\mp\gametypes\_hud_message::splashNotify( "rested_done" ); + + gotRestXP = true; + } + break; + } + + if ( !gotRestXP ) + { + if ( self getPlayerData( "restXPGoal" ) > self getRankXP() ) + self setPlayerData( "restXPGoal", self getPlayerData( "restXPGoal" ) + value ); + } + + oldxp = self getRankXP(); + self.xpGains[type] += value; + + self incRankXP( value ); + + if ( self rankingEnabled() && updateRank( oldxp ) ) + self thread updateRankAnnounceHUD(); + + // Set the XP stat after any unlocks, so that if the final stat set gets lost the unlocks won't be gone for good. + self syncXPStat(); + + if ( !level.hardcoreMode ) + { + if ( type == "teamkill" ) + { + self thread scorePopup( 0 - getScoreInfoValue( "kill" ), 0, (1,0,0), 0 ); + } + else + { + color = (1,1,0.5); + if ( gotRestXP ) + color = (1,.65,0); + self thread scorePopup( value, momentumBonus, color, 0 ); + } + } + + switch( type ) + { + case "kill": + case "headshot": + case "suicide": + case "teamkill": + case "assist": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "defuse": + self.pers["summary"]["score"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "win": + case "loss": + case "tie": + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "challenge": + self.pers["summary"]["challenge"] += value; + self.pers["summary"]["xp"] += value; + break; + + default: + self.pers["summary"]["misc"] += value; //keeps track of ungrouped match xp reward + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + } +} + +updateRank( oldxp ) +{ + newRankId = self getRank(); + if ( newRankId == self.pers["rank"] ) + return false; + + oldRank = self.pers["rank"]; + rankId = self.pers["rank"]; + self.pers["rank"] = newRankId; + + //self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) ); + println( "promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "." ); + + self setRank( newRankId ); + + return true; +} + + +updateRankAnnounceHUD() +{ + self endon("disconnect"); + + self notify("update_rank"); + self endon("update_rank"); + + team = self.pers["team"]; + if ( !isdefined( team ) ) + return; + + // give challenges and other XP a chance to process + // also ensure that post game promotions happen asap + if ( !levelFlag( "game_over" ) ) + level waittill_notify_or_timeout( "game_over", 0.25 ); + + + newRankName = self getRankInfoFull( self.pers["rank"] ); + rank_char = level.rankTable[self.pers["rank"]][1]; + subRank = int(rank_char[rank_char.size-1]); + + thread maps\mp\gametypes\_hud_message::promotionSplashNotify(); + + if ( subRank > 1 ) + return; + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + playerteam = player.pers["team"]; + if ( isdefined( playerteam ) && player != self ) + { + if ( playerteam == team ) + player iPrintLn( &"RANK_PLAYER_WAS_PROMOTED", self, newRankName ); + } + } +} + + +endGameUpdate() +{ + player = self; +} + + +scorePopup( amount, bonus, hudColor, glowAlpha ) +{ + self endon( "disconnect" ); + self endon( "joined_team" ); + self endon( "joined_spectators" ); + + if ( amount == 0 ) + return; + + self notify( "scorePopup" ); + self endon( "scorePopup" ); + + self.xpUpdateTotal += amount; + self.bonusUpdateTotal += bonus; + + wait ( 0.05 ); + + if ( self.xpUpdateTotal < 0 ) + self.hud_scorePopup.label = &""; + else + self.hud_scorePopup.label = &"MP_PLUS"; + + self.hud_scorePopup.color = hudColor; + self.hud_scorePopup.glowColor = hudColor; + self.hud_scorePopup.glowAlpha = glowAlpha; + + self.hud_scorePopup setValue(self.xpUpdateTotal); + self.hud_scorePopup.alpha = 0.85; + self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse( self ); + + increment = max( int( self.bonusUpdateTotal / 20 ), 1 ); + + if ( self.bonusUpdateTotal ) + { + while ( self.bonusUpdateTotal > 0 ) + { + self.xpUpdateTotal += min( self.bonusUpdateTotal, increment ); + self.bonusUpdateTotal -= min( self.bonusUpdateTotal, increment ); + + self.hud_scorePopup setValue( self.xpUpdateTotal ); + + wait ( 0.05 ); + } + } + else + { + wait ( 1.0 ); + } + + self.hud_scorePopup fadeOverTime( 0.75 ); + self.hud_scorePopup.alpha = 0; + + self.xpUpdateTotal = 0; +} + +removeRankHUD() +{ + self.hud_scorePopup.alpha = 0; +} + +getRank() +{ + rankXp = self.pers["rankxp"]; + rankId = self.pers["rank"]; + + if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) ) + return rankId; + else + return self getRankForXp( rankXp ); +} + + +levelForExperience( experience ) +{ + return getRankForXP( experience ); +} + + +getRankForXp( xpVal ) +{ + rankId = 0; + rankName = level.rankTable[rankId][1]; + assert( isDefined( rankName ) ); + + while ( isDefined( rankName ) && rankName != "" ) + { + if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) ) + return rankId; + + rankId++; + if ( isDefined( level.rankTable[rankId] ) ) + rankName = level.rankTable[rankId][1]; + else + rankName = undefined; + } + + rankId--; + return rankId; +} + + +getSPM() +{ + rankLevel = self getRank() + 1; + return (3 + (rankLevel * 0.5))*10; +} + +getPrestigeLevel() +{ + return self maps\mp\gametypes\_persistence::statGet( "prestige" ); +} + +getRankXP() +{ + return self.pers["rankxp"]; +} + +incRankXP( amount ) +{ + if ( !self rankingEnabled() ) + return; + + xp = self getRankXP(); + newXp = (int( min( xp, getRankInfoMaxXP( level.maxRank ) ) ) + amount); + + if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) ) + newXp = getRankInfoMaxXP( level.maxRank ); + + self.pers["rankxp"] = newXp; +} + +getRestXPAward( baseXP ) +{ + if ( !getdvarint( "scr_restxp_enable" ) ) + return 0; + + restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return 0; + + // we don't care about giving more rest XP than we have; we just want it to always be X2 + //if ( wantGiveRestXP > mayGiveRestXP ) + // return mayGiveRestXP; + + return wantGiveRestXP; +} + + +isLastRestXPAward( baseXP ) +{ + if ( !getdvarint( "scr_restxp_enable" ) ) + return false; + + restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return false; + + if ( wantGiveRestXP >= mayGiveRestXP ) + return true; + + return false; +} + +syncXPStat() +{ + xp = 2516000; //self getRankXP(); + + self maps\mp\gametypes\_persistence::statSet( "experience", xp ); +} \ No newline at end of file diff --git a/Modern Warfare 2/Mod/Balancer/maps/mp/gametypes/_rank.gsc b/Modern Warfare 2/Mod/Balancer/maps/mp/gametypes/_rank.gsc new file mode 100755 index 0000000..10b013c --- /dev/null +++ b/Modern Warfare 2/Mod/Balancer/maps/mp/gametypes/_rank.gsc @@ -0,0 +1,1223 @@ +#include common_scripts\utility; +// check if below includes are removable +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; + +/* +Features: +Noob Toobs disabled. +Akimbo disabled. +At4 Disabled. +Painkiller disabled. +Danger Close disabled. + +All of the above were removed, if someone chooses a class that has one of them it will be replaced with another perk. +If it is an attachment it will only be taken away. +Weapons get replaced just like the perks. +*/ + +init() +{ + level.classMap["class0"] = 0; + level.classMap["class1"] = 1; + level.classMap["class2"] = 2; + level.classMap["class3"] = 3; + level.classMap["class4"] = 4; + level.classMap["class5"] = 5; + level.classMap["class6"] = 6; + level.classMap["class7"] = 7; + level.classMap["class8"] = 8; + level.classMap["class9"] = 9; + level.classMap["class10"] = 10; + level.classMap["class11"] = 11; + level.classMap["class12"] = 12; + level.classMap["class13"] = 13; + level.classMap["class14"] = 14; + + level.classMap["custom1"] = 0; + level.classMap["custom2"] = 1; + level.classMap["custom3"] = 2; + level.classMap["custom4"] = 3; + level.classMap["custom5"] = 4; + level.classMap["custom6"] = 5; + level.classMap["custom7"] = 6; + level.classMap["custom8"] = 7; + level.classMap["custom9"] = 8; + level.classMap["custom10"] = 9; + + level.classMap["copycat"] = -1; + + /# + // classes testclients may choose from. + level.botClasses = []; + level.botClasses[0] = "class0"; + level.botClasses[1] = "class0"; + level.botClasses[2] = "class0"; + level.botClasses[3] = "class0"; + level.botClasses[4] = "class0"; + #/ + + level.defaultClass = "CLASS_ASSAULT"; + + level.classTableName = "mp/classTable.csv"; + + //precacheShader( "waypoint_bombsquad" ); + precacheShader( "specialty_pistoldeath" ); + precacheShader( "specialty_finalstand" ); + + level thread onPlayerConnecting(); +} + + +getClassChoice( response ) +{ + assert( isDefined( level.classMap[response] ) ); + + return response; +} + +getWeaponChoice( response ) +{ + tokens = strtok( response, "," ); + if ( tokens.size > 1 ) + return int(tokens[1]); + else + return 0; +} + + +logClassChoice( class, primaryWeapon, specialType, perks ) +{ + if ( class == self.lastClass ) + return; + + self logstring( "choseclass: " + class + " weapon: " + primaryWeapon + " special: " + specialType ); + for( i=0; i deathVal ) + { + self thread maps\mp\perks\_perks::givePerk( loadoutDeathStreak ); + } + } + + self loadoutAllPerks( loadoutEquipment, loadoutPerk1, loadoutPerk2, loadoutPerk3 ); + + self setKillstreaks( loadoutKillstreak1, loadoutKillstreak2, loadoutKillstreak3 ); + + if ( self hasPerk( "specialty_extraammo", true ) && getWeaponClass( secondaryName ) != "weapon_projectile" ) + self giveMaxAmmo( secondaryName ); + + // Primary Weapon + primaryName = buildWeaponName( loadoutPrimary, loadoutPrimaryAttachment, loadoutPrimaryAttachment2 ); + self _giveWeapon( primaryName, self.loadoutPrimaryCamo ); + + // fix changing from a riotshield class to a riotshield class during grace period not giving a shield + if ( primaryName == "riotshield_mp" && level.inGracePeriod ) + self notify ( "weapon_change", "riotshield_mp" ); + + if ( self hasPerk( "specialty_extraammo", true ) ) + self giveMaxAmmo( primaryName ); + + self setSpawnWeapon( primaryName ); + + primaryTokens = strtok( primaryName, "_" ); + self.pers["primaryWeapon"] = primaryTokens[0]; + + // Primary Offhand was given by givePerk (it's your perk1) + + // Secondary Offhand + offhandSecondaryWeapon = loadoutOffhand + "_mp"; + if ( loadoutOffhand == "flash_grenade" ) + self SetOffhandSecondaryClass( "flash" ); + else + self SetOffhandSecondaryClass( "smoke" ); + + self giveWeapon( offhandSecondaryWeapon ); + if( loadOutOffhand == "smoke_grenade" ) + self setWeaponAmmoClip( offhandSecondaryWeapon, 1 ); + else if( loadOutOffhand == "flash_grenade" ) + self setWeaponAmmoClip( offhandSecondaryWeapon, 2 ); + else if( loadOutOffhand == "concussion_grenade" ) + self setWeaponAmmoClip( offhandSecondaryWeapon, 2 ); + else + self setWeaponAmmoClip( offhandSecondaryWeapon, 1 ); + + primaryWeapon = primaryName; + self.primaryWeapon = primaryWeapon; + self.secondaryWeapon = secondaryName; + + self maps\mp\gametypes\_teams::playerModelForWeapon( self.pers["primaryWeapon"], getBaseWeaponName( secondaryName ) ); + + self.isSniper = (weaponClass( self.primaryWeapon ) == "sniper"); + + self maps\mp\gametypes\_weapons::updateMoveSpeedScale( "primary" ); + + // cac specialties that require loop threads + self maps\mp\perks\_perks::cac_selector(); + + self notify ( "changed_kit" ); + self notify ( "giveLoadout" ); +} + +_detachAll() +{ + if ( isDefined( self.hasRiotShield ) && self.hasRiotShield ) + { + if ( self.hasRiotShieldEquipped ) + { + self DetachShieldModel( "weapon_riot_shield_mp", "tag_weapon_left" ); + self.hasRiotShieldEquipped = false; + } + else + { + self DetachShieldModel( "weapon_riot_shield_mp", "tag_shield_back" ); + } + + self.hasRiotShield = false; + } + + self detachAll(); +} + +isPerkUpgraded( perkName ) +{ + perkUpgrade = tablelookup( "mp/perktable.csv", 1, perkName, 8 ); + + if ( perkUpgrade == "" || perkUpgrade == "specialty_null" ) + return false; + + if ( !self isItemUnlocked( perkUpgrade ) ) + return false; + + return true; +} + +getPerkUpgrade( perkName ) +{ + perkUpgrade = tablelookup( "mp/perktable.csv", 1, perkName, 8 ); + + if ( perkUpgrade == "" || perkUpgrade == "specialty_null" ) + return "specialty_null"; + + if ( !self isItemUnlocked( perkUpgrade ) ) + return "specialty_null"; + + return ( perkUpgrade ); +} + +loadoutAllPerks( loadoutEquipment, loadoutPerk1, loadoutPerk2, loadoutPerk3 ) +{ + loadoutEquipment = maps\mp\perks\_perks::validatePerk( 1, loadoutEquipment ); + loadoutPerk1 = maps\mp\perks\_perks::validatePerk( 1, loadoutPerk1 ); + loadoutPerk2 = maps\mp\perks\_perks::validatePerk( 2, loadoutPerk2 ); + loadoutPerk3 = maps\mp\perks\_perks::validatePerk( 3, loadoutPerk3 ); + + self maps\mp\perks\_perks::givePerk( loadoutEquipment ); + self maps\mp\perks\_perks::givePerk( loadoutPerk1 ); + self maps\mp\perks\_perks::givePerk( loadoutPerk2 ); + self maps\mp\perks\_perks::givePerk( loadoutPerk3 ); + + perkUpgrd[0] = tablelookup( "mp/perktable.csv", 1, loadoutPerk1, 8 ); + perkUpgrd[1] = tablelookup( "mp/perktable.csv", 1, loadoutPerk2, 8 ); + perkUpgrd[2] = tablelookup( "mp/perktable.csv", 1, loadoutPerk3, 8 ); + + foreach( upgrade in perkUpgrd ) + { + if ( upgrade == "" || upgrade == "specialty_null" ) + continue; + + if ( self isItemUnlocked( upgrade ) ) + self maps\mp\perks\_perks::givePerk( upgrade ); + } + +} + +trackRiotShield() +{ + self endon ( "death" ); + self endon ( "disconnect" ); + + self.hasRiotShield = self hasWeapon( "riotshield_mp" ); + self.hasRiotShieldEquipped = (self.currentWeaponAtSpawn == "riotshield_mp"); + + // note this function must play nice with _detachAll(). + + if ( self.hasRiotShield ) + { + if ( self.hasRiotShieldEquipped ) + { + self AttachShieldModel( "weapon_riot_shield_mp", "tag_weapon_left" ); + } + else + { + self AttachShieldModel( "weapon_riot_shield_mp", "tag_shield_back" ); + } + } + + for ( ;; ) + { + self waittill ( "weapon_change", newWeapon ); + + if ( newWeapon == "riotshield_mp" ) + { + // defensive check in case we somehow get an extra "weapon_change" + if ( self.hasRiotShieldEquipped ) + continue; + + if ( self.hasRiotShield ) + self MoveShieldModel( "weapon_riot_shield_mp", "tag_shield_back", "tag_weapon_left" ); + else + self AttachShieldModel( "weapon_riot_shield_mp", "tag_weapon_left" ); + + self.hasRiotShield = true; + self.hasRiotShieldEquipped = true; + } + else if ( (self IsMantling()) && (newWeapon == "none") ) + { + // Do nothing, we want to keep that weapon on their arm. + } + else if ( self.hasRiotShieldEquipped ) + { + assert( self.hasRiotShield ); + self.hasRiotShield = self hasWeapon( "riotshield_mp" ); + + if ( self.hasRiotShield ) + self MoveShieldModel( "weapon_riot_shield_mp", "tag_weapon_left", "tag_shield_back" ); + else + self DetachShieldModel( "weapon_riot_shield_mp", "tag_weapon_left" ); + + self.hasRiotShieldEquipped = false; + } + else if ( self.hasRiotShield ) + { + if ( !self hasWeapon( "riotshield_mp" ) ) + { + // we probably just lost all of our weapons (maybe switched classes) + self DetachShieldModel( "weapon_riot_shield_mp", "tag_shield_back" ); + self.hasRiotShield = false; + } + } + } +} + + +tryAttach( placement ) // deprecated; hopefully we won't need to bring this defensive function back +{ + if ( !isDefined( placement ) || placement != "back" ) + tag = "tag_weapon_left"; + else + tag = "tag_shield_back"; + + attachSize = self getAttachSize(); + + for ( i = 0; i < attachSize; i++ ) + { + attachedTag = self getAttachTagName( i ); + if ( attachedTag == tag && self getAttachModelName( i ) == "weapon_riot_shield_mp" ) + { + return; + } + } + + self AttachShieldModel( "weapon_riot_shield_mp", tag ); +} + +tryDetach( placement ) // deprecated; hopefully we won't need to bring this defensive function back +{ + if ( !isDefined( placement ) || placement != "back" ) + tag = "tag_weapon_left"; + else + tag = "tag_shield_back"; + + + attachSize = self getAttachSize(); + + for ( i = 0; i < attachSize; i++ ) + { + attachedModel = self getAttachModelName( i ); + if ( attachedModel == "weapon_riot_shield_mp" ) + { + self DetachShieldModel( attachedModel, tag); + return; + } + } + return; +} + + + +buildWeaponName( baseName, attachment1, attachment2 ) +{ + if ( !isDefined( level.letterToNumber ) ) + level.letterToNumber = makeLettersToNumbers(); + + // disable bling when perks are disabled + if ( getDvarInt ( "scr_game_perks" ) == 0 ) + { + attachment2 = "none"; + + if ( baseName == "onemanarmy" ) + return ( "beretta_mp" ); + } + + weaponName = baseName; + attachments = []; + + if ( attachment1 != "none" && attachment2 != "none" ) + { + if ( level.letterToNumber[attachment1[0]] < level.letterToNumber[attachment2[0]] ) + { + + attachments[0] = attachment1; + attachments[1] = attachment2; + + } + else if ( level.letterToNumber[attachment1[0]] == level.letterToNumber[attachment2[0]] ) + { + if ( level.letterToNumber[attachment1[1]] < level.letterToNumber[attachment2[1]] ) + { + attachments[0] = attachment1; + attachments[1] = attachment2; + } + else + { + attachments[0] = attachment2; + attachments[1] = attachment1; + } + } + else + { + attachments[0] = attachment2; + attachments[1] = attachment1; + } + } + else if ( attachment1 != "none" ) + { + attachments[0] = attachment1; + } + else if ( attachment2 != "none" ) + { + attachments[0] = attachment2; + } + + foreach ( attachment in attachments ) + { + weaponName += "_" + attachment; + } + + if ( !isValidWeapon( weaponName + "_mp" ) ) + return ( baseName + "_mp" ); + else + return ( weaponName + "_mp" ); +} + + +makeLettersToNumbers() +{ + array = []; + + array["a"] = 0; + array["b"] = 1; + array["c"] = 2; + array["d"] = 3; + array["e"] = 4; + array["f"] = 5; + array["g"] = 6; + array["h"] = 7; + array["i"] = 8; + array["j"] = 9; + array["k"] = 10; + array["l"] = 11; + array["m"] = 12; + array["n"] = 13; + array["o"] = 14; + array["p"] = 15; + array["q"] = 16; + array["r"] = 17; + array["s"] = 18; + array["t"] = 19; + array["u"] = 20; + array["v"] = 21; + array["w"] = 22; + array["x"] = 23; + array["y"] = 24; + array["z"] = 25; + + return array; +} + +setKillstreaks( streak1, streak2, streak3 ) +{ + self.killStreaks = []; + + if ( self _hasPerk( "specialty_hardline" ) ) + modifier = -1; + else + modifier = 0; + + /*if ( streak1 == "none" && streak2 == "none" && streak3 == "none" ) + { + streak1 = "uav"; + streak2 = "precision_airstrike"; + streak3 = "helicopter"; + }*/ + + killStreaks = []; + + if ( streak1 != "none" ) + { + //if ( !level.splitScreen ) + streakVal = int( tableLookup( "mp/killstreakTable.csv", 1, streak1, 4 ) ); + //else + // streakVal = int( tableLookup( "mp/killstreakTable.csv", 1, streak1, 5 ) ); + killStreaks[streakVal + modifier] = streak1; + } + + if ( streak2 != "none" ) + { + //if ( !level.splitScreen ) + streakVal = int( tableLookup( "mp/killstreakTable.csv", 1, streak2, 4 ) ); + //else + // streakVal = int( tableLookup( "mp/killstreakTable.csv", 1, streak2, 5 ) ); + killStreaks[streakVal + modifier] = streak2; + } + + if ( streak3 != "none" ) + { + //if ( !level.splitScreen ) + streakVal = int( tableLookup( "mp/killstreakTable.csv", 1, streak3, 4 ) ); + //else + // streakVal = int( tableLookup( "mp/killstreakTable.csv", 1, streak3, 5 ) ); + killStreaks[streakVal + modifier] = streak3; + } + + // foreach doesn't loop through numbers arrays in number order; it loops through the elements in the order + // they were added. We'll use this to fix it for now. + maxVal = 0; + foreach ( streakVal, streakName in killStreaks ) + { + if ( streakVal > maxVal ) + maxVal = streakVal; + } + + for ( streakIndex = 0; streakIndex <= maxVal; streakIndex++ ) + { + if ( !isDefined( killStreaks[streakIndex] ) ) + continue; + + streakName = killStreaks[streakIndex]; + + self.killStreaks[ streakIndex ] = killStreaks[ streakIndex ]; + } + // end lameness + + // defcon rollover + maxRollOvers = 10; + newKillstreaks = self.killstreaks; + for ( rollOver = 1; rollOver <= maxRollOvers; rollOver++ ) + { + foreach ( streakVal, streakName in self.killstreaks ) + { + newKillstreaks[ streakVal + (maxVal*rollOver) ] = streakName + "-rollover" + rollOver; + } + } + + self.killstreaks = newKillstreaks; +} + + +replenishLoadout() // used by ammo hardpoint. +{ + team = self.pers["team"]; + class = self.pers["class"]; + + weaponsList = self GetWeaponsListAll(); + for( idx = 0; idx < weaponsList.size; idx++ ) + { + weapon = weaponsList[idx]; + + self giveMaxAmmo( weapon ); + self SetWeaponAmmoClip( weapon, 9999 ); + + if ( weapon == "claymore_mp" || weapon == "claymore_detonator_mp" ) + self setWeaponAmmoStock( weapon, 2 ); + } + + if ( self getAmmoCount( level.classGrenades[class]["primary"]["type"] ) < level.classGrenades[class]["primary"]["count"] ) + self SetWeaponAmmoClip( level.classGrenades[class]["primary"]["type"], level.classGrenades[class]["primary"]["count"] ); + + if ( self getAmmoCount( level.classGrenades[class]["secondary"]["type"] ) < level.classGrenades[class]["secondary"]["count"] ) + self SetWeaponAmmoClip( level.classGrenades[class]["secondary"]["type"], level.classGrenades[class]["secondary"]["count"] ); +} + + +onPlayerConnecting() +{ + for(;;) + { + level waittill( "connected", player ); + + if ( !isDefined( player.pers["class"] ) ) + { + player.pers["class"] = ""; + } + player.class = player.pers["class"]; + player.lastClass = ""; + player.detectExplosives = false; + player.bombSquadIcons = []; + player.bombSquadIds = []; + } +} + + +fadeAway( waitDelay, fadeDelay ) +{ + wait waitDelay; + + self fadeOverTime( fadeDelay ); + self.alpha = 0; +} + + +setClass( newClass ) +{ + self.curClass = newClass; +} + +getPerkForClass( perkSlot, className ) +{ + class_num = getClassIndex( className ); + + if( isSubstr( className, "custom" ) ) + return cac_getPerk( class_num, perkSlot ); + else + return table_getPerk( level.classTableName, class_num, perkSlot ); +} + + +classHasPerk( className, perkName ) +{ + return( getPerkForClass( 0, className ) == perkName || getPerkForClass( 1, className ) == perkName || getPerkForClass( 2, className ) == perkName ); +} + +isValidPrimary( refString ) +{ + switch ( refString ) + { + case "riotshield": + case "ak47": + case "m16": + case "m4": + case "fn2000": + case "masada": + case "famas": + case "fal": + case "scar": + case "tavor": + case "mp5k": + case "uzi": + case "p90": + case "kriss": + case "ump45": + case "barrett": + case "wa2000": + case "m21": + case "cheytac": + case "rpd": + case "sa80": + case "mg4": + case "m240": + case "aug": + return true; + default: + assertMsg( "Replacing invalid primary weapon: " + refString ); + return false; + } +} + +isValidSecondary( refString ) +{ + switch ( refString ) + { + case "beretta": + case "usp": + case "deserteagle": + case "coltanaconda": + case "glock": + case "beretta393": + case "pp2000": + case "tmp": + case "m79": + case "stinger": + case "javelin": + case "ranger": + case "model1887": + case "striker": + case "aa12": + case "m1014": + case "spas12": + case "onemanarmy": + return true; + default: + assertMsg( "Replacing invalid secondary weapon: " + refString ); + return false; + } +} + +isValidAttachment( refString ) +{ + switch ( refString ) + { + case "none": + case "acog": + case "reflex": + case "silencer": + case "grip": + case "thermal": + case "shotgun": + case "heartbeat": + case "fmj": + case "rof": + case "xmags": + case "eotech": + case "tactical": + return true; + default: + assertMsg( "Replacing invalid equipment weapon: " + refString ); + return false; + } +} + +isValidCamo( refString ) +{ + switch ( refString ) + { + case "none": + case "woodland": + case "desert": + case "arctic": + case "digital": + case "red_urban": + case "red_tiger": + case "blue_tiger": + case "orange_fall": + return true; + default: + assertMsg( "Replacing invalid camo: " + refString ); + return false; + } +} + +isValidEquipment( refString ) +{ + switch ( refString ) + { + case "frag_grenade_mp": + case "semtex_mp": + case "throwingknife_mp": + case "specialty_tacticalinsertion": + case "specialty_blastshield": + case "claymore_mp": + case "c4_mp": + return true; + default: + assertMsg( "Replacing invalid equipment: " + refString ); + return false; + } +} + + +isValidOffhand( refString ) +{ + switch ( refString ) + { + case "flash_grenade": + case "concussion_grenade": + case "smoke_grenade": + return true; + default: + assertMsg( "Replacing invalid offhand: " + refString ); + return false; + } +} + +isValidPerk1( refString ) +{ + switch ( refString ) + { + case "specialty_marathon": + case "specialty_fastreload": + case "specialty_scavenger": + case "specialty_bling": + case "specialty_onemanarmy": + return true; + default: + assertMsg( "Replacing invalid perk1: " + refString ); + return false; + } +} + +isValidPerk2( refString ) +{ + switch ( refString ) + { + case "specialty_bulletdamage": + case "specialty_lightweight": + case "specialty_hardline": + case "specialty_coldblooded": + return true; + default: + assertMsg( "Replacing invalid perk2: " + refString ); + return false; + } +} + +isValidPerk3( refString ) +{ + switch ( refString ) + { + case "specialty_extendedmelee": + case "specialty_bulletaccuracy": + case "specialty_localjammer": + case "specialty_heartbreaker": + case "specialty_detectexplosive": + case "specialty_pistoldeath": + return true; + default: + assertMsg( "Replacing invalid perk3: " + refString ); + return false; + } +} + +isValidDeathStreak( refString ) +{ + switch ( refString ) + { + case "specialty_copycat": + case "specialty_grenadepulldeath": + case "specialty_finalstand": + return true; + default: + assertMsg( "Replacing invalid death streak: " + refString ); + return false; + } +} + +isValidWeapon( refString ) +{ + if ( !isDefined( level.weaponRefs ) ) + { + level.weaponRefs = []; + + foreach ( weaponRef in level.weaponList ) + level.weaponRefs[ weaponRef ] = true; + } + + if ( isDefined( level.weaponRefs[ refString ] ) ) + return true; + + assertMsg( "Replacing invalid weapon/attachment combo: " + refString ); + + return false; +} \ No newline at end of file diff --git a/Modern Warfare 2/Mod/DamageFeedback/maps/mp/gametypes/_rank.gsc b/Modern Warfare 2/Mod/DamageFeedback/maps/mp/gametypes/_rank.gsc new file mode 100755 index 0000000..b118cdf --- /dev/null +++ b/Modern Warfare 2/Mod/DamageFeedback/maps/mp/gametypes/_rank.gsc @@ -0,0 +1,102 @@ + +/* + +*/ + +init() +{ + precacheShader("damage_feedback"); + precacheShader("damage_feedback_j"); + precacheShader("damage_feedback_endgame"); + precacheShader("scavenger_pickup"); + + level thread onPlayerConnect(); +} + +onPlayerConnect() +{ + for(;;) + { + level waittill("connected", player); + + player.hud_damagefeedback = newClientHudElem(player); + player.hud_damagefeedback.horzAlign = "center"; + player.hud_damagefeedback.vertAlign = "middle"; + player.hud_damagefeedback.x = -12; + player.hud_damagefeedback.y = -12; + player.hud_damagefeedback.alpha = 0; + player.hud_damagefeedback.archived = true; + player.hud_damagefeedback setShader("damage_feedback", 24, 48); + } +} + +updateDamageFeedback( typeHit ) +{ + if ( !isPlayer( self ) ) + return; + + x = -12; + y = -12; + + if ( getDvarInt( "camera_thirdPerson" ) ) + yOffset = self GetThirdPersonCrosshairOffset() * 240; + else + yOffset = getdvarfloat( "cg_crosshairVerticalOffset" ) * 240; + + if ( level.splitscreen ) + yOffset *= 0.5; + + feedbackDurationOverride = 0; + startAlpha = 1; + + if ( typeHit == "hitBodyArmor" ) + { + // self.hud_damagefeedback setShader("damage_feedback_j", 24, 48); + // self playlocalsound("MP_hit_alert"); // TODO: change sound? + return; + } + else if ( typeHit == "hitEndGame" ) + { + // self.hud_damagefeedback setShader("damage_feedback_endgame", 24, 48); + // self playlocalsound("MP_hit_alert"); + return; + } + else if ( typeHit == "stun" ) + { + return; + } + else if ( typeHit == "none" ) + { + return; + } + else if ( typeHit == "scavenger" && !level.hardcoreMode ) + { + // x = -36; + // y = 32; + // self.hud_damagefeedback setShader("scavenger_pickup", 64, 32); + // feedbackDurationOverride = 2.5; + return; + } + else + { + // self.hud_damagefeedback setShader("damage_feedback", 24, 48); + // self playlocalsound("MP_hit_alert"); + return; + } + + //self.hud_damagefeedback.alpha = startAlpha; + //if ( feedBackDurationOverride != 0 ) + // self.hud_damagefeedback fadeOverTime(feedbackDurationOverride); + //else + // self.hud_damagefeedback fadeOverTime(1); + // + //self.hud_damagefeedback.alpha = 0; + + // only update hudelem positioning when necessary + //if ( self.hud_damagefeedback.x != x ) + // self.hud_damagefeedback.x = x; +// + //y = y - int( yOffset ); + //if ( self.hud_damagefeedback.y != y ) + // self.hud_damagefeedback.y = y; +} \ No newline at end of file diff --git a/Modern Warfare 2/Mod/DisableHitmarkers/maps/mp/gametypes/_rank.gsc b/Modern Warfare 2/Mod/DisableHitmarkers/maps/mp/gametypes/_rank.gsc new file mode 100755 index 0000000..fe776d2 --- /dev/null +++ b/Modern Warfare 2/Mod/DisableHitmarkers/maps/mp/gametypes/_rank.gsc @@ -0,0 +1,103 @@ + +/* +Features: +All hitmarkers are disabled. +*/ + +init() +{ + precacheShader("damage_feedback"); + precacheShader("damage_feedback_j"); + precacheShader("damage_feedback_endgame"); + precacheShader("scavenger_pickup"); + + level thread onPlayerConnect(); +} + +onPlayerConnect() +{ + for(;;) + { + level waittill("connected", player); + + player.hud_damagefeedback = newClientHudElem(player); + player.hud_damagefeedback.horzAlign = "center"; + player.hud_damagefeedback.vertAlign = "middle"; + player.hud_damagefeedback.x = -12; + player.hud_damagefeedback.y = -12; + player.hud_damagefeedback.alpha = 0; + player.hud_damagefeedback.archived = true; + player.hud_damagefeedback setShader("damage_feedback", 24, 48); + } +} + +updateDamageFeedback( typeHit ) +{ + if ( !isPlayer( self ) ) + return; + + x = -12; + y = -12; + + if ( getDvarInt( "camera_thirdPerson" ) ) + yOffset = self GetThirdPersonCrosshairOffset() * 240; + else + yOffset = getdvarfloat( "cg_crosshairVerticalOffset" ) * 240; + + if ( level.splitscreen ) + yOffset *= 0.5; + + feedbackDurationOverride = 0; + startAlpha = 1; + + if ( typeHit == "hitBodyArmor" ) + { + // self.hud_damagefeedback setShader("damage_feedback_j", 24, 48); + // self playlocalsound("MP_hit_alert"); // TODO: change sound? + return; + } + else if ( typeHit == "hitEndGame" ) + { + // self.hud_damagefeedback setShader("damage_feedback_endgame", 24, 48); + // self playlocalsound("MP_hit_alert"); + return; + } + else if ( typeHit == "stun" ) + { + return; + } + else if ( typeHit == "none" ) + { + return; + } + else if ( typeHit == "scavenger" && !level.hardcoreMode ) + { + // x = -36; + // y = 32; + // self.hud_damagefeedback setShader("scavenger_pickup", 64, 32); + // feedbackDurationOverride = 2.5; + return; + } + else + { + // self.hud_damagefeedback setShader("damage_feedback", 24, 48); + // self playlocalsound("MP_hit_alert"); + return; + } + + //self.hud_damagefeedback.alpha = startAlpha; + //if ( feedBackDurationOverride != 0 ) + // self.hud_damagefeedback fadeOverTime(feedbackDurationOverride); + //else + // self.hud_damagefeedback fadeOverTime(1); + // + //self.hud_damagefeedback.alpha = 0; + + // only update hudelem positioning when necessary + //if ( self.hud_damagefeedback.x != x ) + // self.hud_damagefeedback.x = x; +// + //y = y - int( yOffset ); + //if ( self.hud_damagefeedback.y != y ) + // self.hud_damagefeedback.y = y; +} \ No newline at end of file diff --git a/Modern Warfare 2/Mod/EliteMod/maps/mp/gametypes/_rank.gsc b/Modern Warfare 2/Mod/EliteMod/maps/mp/gametypes/_rank.gsc new file mode 100755 index 0000000..1c1d1a0 --- /dev/null +++ b/Modern Warfare 2/Mod/EliteMod/maps/mp/gametypes/_rank.gsc @@ -0,0 +1,802 @@ +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; + +/* +Features: +Allies get Scar with Red Dot Sight and Silencer as a primary and M9 with FMJ and a tac knife as a secondary. +Axis get a Tar-21 with a heartbeat sensor and a silencer for primary and gold desert eagle as a secondary. +Class changing exploit fixed thanks to AgentGod! +Perks set to: Bullet Damage, Bullet Penetration, Cold Blooded, Scavenger, Extended Mags, Bullet Accuracy, Ninja, Expose Enemy, Sleight Of Hand +xpscale Unlocked. +Alltalk enabled. +Ping text enabled. +Welcome messages on. +Fall Damage disabled. +Crosshairs disabled. +Infinite Sprint on. +FPS Cap Unlocked + +Recommended: +Hardcore Enabled +Friendly Fire Enabled +Killstreaks Disabled +*/ + +isValidWeapon(weapon) { + switch(weapon) { + case "tavor_heartbeat_silencer_mp": + case "scar_reflex_silencer_mp": + case "deserteaglegold_mp": + case "beretta_fmj_tactical_mp": + case "none": + return true; + } + return false; +} + +fixExploit() { + self endon("disconnect"); + wait 15; // We check on spawn only + if(!isValidWeapon(self getCurrentWeapon())) { + self takeAllWeapons(); // bye bye fgt + self giveWeapon("stinger_mp", 0, false); + self giveMaxAmmo("stinger_mp"); + self switchToWeapon("stinger_mp"); + // All you get is a stinger for messing around ;) + self thread maps\mp\gametypes\_hud_message::hintMessage("Don't use the exploit!"); + } +} + +doDvars() +{ + // Take all weapons first + self takeAllWeapons(); + + // Take all perks next + self _clearPerks(); + + //Cheat Fix + setDvar("sv_cheats", 1); + + //Double XP + setDvar("scr_xpscale", 2); + + //Ping + self setClientDvar("cg_scoreboardPingText", 1); + + //FPS Limit + self setClientDvar("com_maxfps", 0); + + //All Talk + self setClientDvar("cg_everyoneHearsEveryone", 1); + + //Messages + self thread maps\mp\gametypes\_hud_message::hintMessage("Elite Mod"); + self thread maps\mp\gametypes\_hud_message::hintMessage("v1.0"); + self thread maps\mp\gametypes\_hud_message::hintMessage("Please report any bugs."); + + //Tweaks + setDvar("bg_fallDamageMaxHeight", 1); + setDvar("player_sprintUnlimited", 1); + setDvar("cg_drawcrosshair", 0); + + //Perks + self maps\mp\perks\_perks::givePerk("specialty_bulletdamage"); + self maps\mp\perks\_perks::givePerk("specialty_bulletpenetration"); + self maps\mp\perks\_perks::givePerk("specialty_coldblooded"); + self maps\mp\perks\_perks::givePerk("specialty_scavenger"); + self maps\mp\perks\_perks::givePerk("specialty_extendedmags"); + self maps\mp\perks\_perks::givePerk("specialty_bulletaccuracy"); + self maps\mp\perks\_perks::givePerk("specialty_quieter"); + self maps\mp\perks\_perks::givePerk("specialty_exposeenemy"); + self maps\mp\perks\_perks::givePerk("specialty_fastreload"); + self maps\mp\perks\_perks::givePerk("specialty_fastsnipe"); + + //Cheat fix + setDvar("sv_cheats", 0); +} + +init() +{ + level.scoreInfo = []; + level.xpScale = getDvarInt( "scr_xpscale" ); + + //if ( level.xpScale > 4 || level.xpScale < 0) + //exitLevel( false ); + + //level.xpScale = min( level.xpScale, 4 ); + //level.xpScale = max( level.xpScale, 0 ); + + level.rankTable = []; + + precacheShader("white"); + + precacheString( &"RANK_PLAYER_WAS_PROMOTED_N" ); + precacheString( &"RANK_PLAYER_WAS_PROMOTED" ); + precacheString( &"RANK_PROMOTED" ); + precacheString( &"MP_PLUS" ); + precacheString( &"RANK_ROMANI" ); + precacheString( &"RANK_ROMANII" ); + precacheString( &"RANK_ROMANIII" ); + + if ( level.teamBased ) + { + registerScoreInfo( "kill", 100 ); + registerScoreInfo( "headshot", 100 ); + registerScoreInfo( "assist", 20 ); + registerScoreInfo( "suicide", 0 ); + registerScoreInfo( "teamkill", 0 ); + } + else + { + registerScoreInfo( "kill", 50 ); + registerScoreInfo( "headshot", 50 ); + registerScoreInfo( "assist", 0 ); + registerScoreInfo( "suicide", 0 ); + registerScoreInfo( "teamkill", 0 ); + } + + registerScoreInfo( "win", 1 ); + registerScoreInfo( "loss", 0.5 ); + registerScoreInfo( "tie", 0.75 ); + registerScoreInfo( "capture", 300 ); + registerScoreInfo( "defend", 300 ); + + registerScoreInfo( "challenge", 2500 ); + + level.maxRank = int(tableLookup( "mp/rankTable.csv", 0, "maxrank", 1 )); + level.maxPrestige = int(tableLookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 )); + + pId = 0; + rId = 0; + for ( pId = 0; pId <= level.maxPrestige; pId++ ) + { + for ( rId = 0; rId <= level.maxRank; rId++ ) + precacheShader( tableLookup( "mp/rankIconTable.csv", 0, rId, pId+1 ) ); + } + + rankId = 0; + rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + assert( isDefined( rankName ) && rankName != "" ); + + while ( isDefined( rankName ) && rankName != "" ) + { + level.rankTable[rankId][1] = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + level.rankTable[rankId][2] = tableLookup( "mp/ranktable.csv", 0, rankId, 2 ); + level.rankTable[rankId][3] = tableLookup( "mp/ranktable.csv", 0, rankId, 3 ); + level.rankTable[rankId][7] = tableLookup( "mp/ranktable.csv", 0, rankId, 7 ); + + precacheString( tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ) ); + + rankId++; + rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + } + + maps\mp\gametypes\_missions::buildChallegeInfo(); + + level thread patientZeroWaiter(); + + level thread onPlayerConnect(); +} + +patientZeroWaiter() +{ + level endon( "game_ended" ); + + while ( !isDefined( level.players ) || !level.players.size ) + wait ( 0.05 ); + + if ( !matchMakingGame() ) + { + if ( (getDvar( "mapname" ) == "mp_rust" && randomInt( 1000 ) == 999) ) + level.patientZeroName = level.players[0].name; + } + else + { + if ( getDvar( "scr_patientZero" ) != "" ) + level.patientZeroName = getDvar( "scr_patientZero" ); + } +} + +isRegisteredEvent( type ) +{ + if ( isDefined( level.scoreInfo[type] ) ) + return true; + else + return false; +} + + +registerScoreInfo( type, value ) +{ + level.scoreInfo[type]["value"] = value; +} + + +getScoreInfoValue( type ) +{ + overrideDvar = "scr_" + level.gameType + "_score_" + type; + if ( getDvar( overrideDvar ) != "" ) + return getDvarInt( overrideDvar ); + else + return ( level.scoreInfo[type]["value"] ); +} + + +getScoreInfoLabel( type ) +{ + return ( level.scoreInfo[type]["label"] ); +} + + +getRankInfoMinXP( rankId ) +{ + return int(level.rankTable[rankId][2]); +} + + +getRankInfoXPAmt( rankId ) +{ + return int(level.rankTable[rankId][3]); +} + + +getRankInfoMaxXp( rankId ) +{ + return int(level.rankTable[rankId][7]); +} + + +getRankInfoFull( rankId ) +{ + return tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ); +} + + +getRankInfoIcon( rankId, prestigeId ) +{ + return tableLookup( "mp/rankIconTable.csv", 0, rankId, prestigeId+1 ); +} + +getRankInfoLevel( rankId ) +{ + return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) ); +} + + +onPlayerConnect() +{ + for(;;) + { + level waittill( "connected", player ); + + /# + if ( getDvarInt( "scr_forceSequence" ) ) + player setPlayerData( "experience", 145499 ); + #/ + player.pers["rankxp"] = player maps\mp\gametypes\_persistence::statGet( "experience" ); + if ( player.pers["rankxp"] < 0 ) // paranoid defensive + player.pers["rankxp"] = 0; + + rankId = player getRankForXp( player getRankXP() ); + player.pers[ "rank" ] = rankId; + player.pers[ "participation" ] = 0; + + player.xpUpdateTotal = 0; + player.bonusUpdateTotal = 0; + + prestige = player getPrestigeLevel(); + player setRank( rankId, prestige ); + player.pers["prestige"] = prestige; + + player.postGamePromotion = false; + if ( !isDefined( player.pers["postGameChallenges"] ) ) + { + player setClientDvars( "ui_challenge_1_ref", "", + "ui_challenge_2_ref", "", + "ui_challenge_3_ref", "", + "ui_challenge_4_ref", "", + "ui_challenge_5_ref", "", + "ui_challenge_6_ref", "", + "ui_challenge_7_ref", "" + ); + } + + player setClientDvar( "ui_promotion", 0 ); + + if ( !isDefined( player.pers["summary"] ) ) + { + player.pers["summary"] = []; + player.pers["summary"]["xp"] = 0; + player.pers["summary"]["score"] = 0; + player.pers["summary"]["challenge"] = 0; + player.pers["summary"]["match"] = 0; + player.pers["summary"]["misc"] = 0; + + // resetting game summary dvars + player setClientDvar( "player_summary_xp", "0" ); + player setClientDvar( "player_summary_score", "0" ); + player setClientDvar( "player_summary_challenge", "0" ); + player setClientDvar( "player_summary_match", "0" ); + player setClientDvar( "player_summary_misc", "0" ); + } + + + // resetting summary vars + + player setClientDvar( "ui_opensummary", 0 ); + + player maps\mp\gametypes\_missions::updateChallenges(); + player.explosiveKills[0] = 0; + player.xpGains = []; + + player.hud_scorePopup = newClientHudElem( player ); + player.hud_scorePopup.horzAlign = "center"; + player.hud_scorePopup.vertAlign = "middle"; + player.hud_scorePopup.alignX = "center"; + player.hud_scorePopup.alignY = "middle"; + player.hud_scorePopup.x = 0; + if ( level.splitScreen ) + player.hud_scorePopup.y = -40; + else + player.hud_scorePopup.y = -60; + player.hud_scorePopup.font = "hudbig"; + player.hud_scorePopup.fontscale = 0.75; + player.hud_scorePopup.archived = false; + player.hud_scorePopup.color = (0.5,0.5,0.5); + player.hud_scorePopup.sort = 10000; + player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit( 3.0 ); + + player thread fixExploit(); + player thread onPlayerSpawned(); + player thread onJoinedTeam(); + player thread onJoinedSpectators(); + } +} + + +onJoinedTeam() +{ + self endon("disconnect"); + + for(;;) + { + self waittill( "joined_team" ); + self thread removeRankHUD(); + } +} + + +onJoinedSpectators() +{ + self endon("disconnect"); + + for(;;) + { + self waittill( "joined_spectators" ); + self thread removeRankHUD(); + } +} + + +onPlayerSpawned() +{ + self endon("disconnect"); + + for(;;) + { + self waittill("spawned_player"); + self thread doDvars(); + if(self.pers["team"] == "allies") { + self giveWeapon( "scar_reflex_silencer_mp", 0, false );self GiveMaxAmmo("scar_reflex_silencer_mp"); + self giveWeapon( "beretta_fmj_tactical_mp", 0, false );self GiveMaxAmmo("beretta_fmj_tactical_mp"); + while(self getCurrentWeapon() != "scar_reflex_silencer_mp") { + self switchToWeapon("scar_reflex_silencer_mp"); + wait 0.05; + } + } + else { + self giveWeapon( "tavor_heartbeat_silencer_mp", 0, false );self GiveMaxAmmo("tavor_heartbeat_silencer_mp"); + self giveWeapon( "deserteaglegold_mp", 0, false );self GiveMaxAmmo("deserteaglegold_mp"); + while(self getCurrentWeapon() != "tavor_heartbeat_silencer_mp") { + self switchToWeapon("tavor_heartbeat_silencer_mp"); + wait 0.05; + } + } + self maps\mp\perks\_perks::givePerk( "frag_grenade_mp" );self setWeaponAmmoClip("frag_grenade_mp", 1); + self SetOffhandSecondaryClass( "concussion" ); + self giveWeapon( "concussion_grenade_mp" );self setWeaponAmmoClip("concussion_grenade_mp", 2); + + } +} + + +roundUp( floatVal ) +{ + if ( int( floatVal ) != floatVal ) + return int( floatVal+1 ); + else + return int( floatVal ); +} + + +giveRankXP( type, value ) +{ + self endon("disconnect"); + + lootType = "none"; + + if ( !self rankingEnabled() ) + return; + + if ( level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"]) ) + return; + else if ( !level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2) ) + return; + + if ( !isDefined( value ) ) + value = getScoreInfoValue( type ); + + if ( !isDefined( self.xpGains[type] ) ) + self.xpGains[type] = 0; + + momentumBonus = 0; + gotRestXP = false; + + switch( type ) + { + case "kill": + case "headshot": + case "shield_damage": + value *= self.xpScaler; + case "assist": + case "suicide": + case "teamkill": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "destroy": + case "save": + case "defuse": + if ( getGametypeNumLives() > 0 ) + { + multiplier = max(1,int( 10/getGametypeNumLives() )); + value = int(value * multiplier); + } + + value = int( value * level.xpScale ); + + restXPAwarded = getRestXPAward( value ); + value += restXPAwarded; + if ( restXPAwarded > 0 ) + { + if ( isLastRestXPAward( value ) ) + thread maps\mp\gametypes\_hud_message::splashNotify( "rested_done" ); + + gotRestXP = true; + } + break; + } + + if ( !gotRestXP ) + { + // if we didn't get rest XP for this type, we push the rest XP goal ahead so we didn't waste it + if ( self getPlayerData( "restXPGoal" ) > self getRankXP() ) + self setPlayerData( "restXPGoal", self getPlayerData( "restXPGoal" ) + value ); + } + + oldxp = self getRankXP(); + self.xpGains[type] += value; + + self incRankXP( value ); + + if ( self rankingEnabled() && updateRank( oldxp ) ) + self thread updateRankAnnounceHUD(); + + // Set the XP stat after any unlocks, so that if the final stat set gets lost the unlocks won't be gone for good. + self syncXPStat(); + + if ( !level.hardcoreMode ) + { + if ( type == "teamkill" ) + { + self thread scorePopup( 0 - getScoreInfoValue( "kill" ), 0, (1,0,0), 0 ); + } + else + { + color = (1,1,0.5); + if ( gotRestXP ) + color = (1,.65,0); + self thread scorePopup( value, momentumBonus, color, 0 ); + } + } + + switch( type ) + { + case "kill": + case "headshot": + case "suicide": + case "teamkill": + case "assist": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "defuse": + self.pers["summary"]["score"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "win": + case "loss": + case "tie": + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "challenge": + self.pers["summary"]["challenge"] += value; + self.pers["summary"]["xp"] += value; + break; + + default: + self.pers["summary"]["misc"] += value; //keeps track of ungrouped match xp reward + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + } +} + +updateRank( oldxp ) +{ + newRankId = self getRank(); + if ( newRankId == self.pers["rank"] ) + return false; + + oldRank = self.pers["rank"]; + rankId = self.pers["rank"]; + self.pers["rank"] = newRankId; + + //self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) ); + println( "promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "." ); + + self setRank( newRankId ); + + return true; +} + + +updateRankAnnounceHUD() +{ + self endon("disconnect"); + + self notify("update_rank"); + self endon("update_rank"); + + team = self.pers["team"]; + if ( !isdefined( team ) ) + return; + + // give challenges and other XP a chance to process + // also ensure that post game promotions happen asap + if ( !levelFlag( "game_over" ) ) + level waittill_notify_or_timeout( "game_over", 0.25 ); + + + newRankName = self getRankInfoFull( self.pers["rank"] ); + rank_char = level.rankTable[self.pers["rank"]][1]; + subRank = int(rank_char[rank_char.size-1]); + + thread maps\mp\gametypes\_hud_message::promotionSplashNotify(); + + if ( subRank > 1 ) + return; + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + playerteam = player.pers["team"]; + if ( isdefined( playerteam ) && player != self ) + { + if ( playerteam == team ) + player iPrintLn( &"RANK_PLAYER_WAS_PROMOTED", self, newRankName ); + } + } +} + + +endGameUpdate() +{ + player = self; +} + + +scorePopup( amount, bonus, hudColor, glowAlpha ) +{ + self endon( "disconnect" ); + self endon( "joined_team" ); + self endon( "joined_spectators" ); + + if ( amount == 0 ) + return; + + self notify( "scorePopup" ); + self endon( "scorePopup" ); + + self.xpUpdateTotal += amount; + self.bonusUpdateTotal += bonus; + + wait ( 0.05 ); + + if ( self.xpUpdateTotal < 0 ) + self.hud_scorePopup.label = &""; + else + self.hud_scorePopup.label = &"MP_PLUS"; + + self.hud_scorePopup.color = hudColor; + self.hud_scorePopup.glowColor = hudColor; + self.hud_scorePopup.glowAlpha = glowAlpha; + + self.hud_scorePopup setValue(self.xpUpdateTotal); + self.hud_scorePopup.alpha = 0.85; + self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse( self ); + + increment = max( int( self.bonusUpdateTotal / 20 ), 1 ); + + if ( self.bonusUpdateTotal ) + { + while ( self.bonusUpdateTotal > 0 ) + { + self.xpUpdateTotal += min( self.bonusUpdateTotal, increment ); + self.bonusUpdateTotal -= min( self.bonusUpdateTotal, increment ); + + self.hud_scorePopup setValue( self.xpUpdateTotal ); + + wait ( 0.05 ); + } + } + else + { + wait ( 1.0 ); + } + + self.hud_scorePopup fadeOverTime( 0.75 ); + self.hud_scorePopup.alpha = 0; + + self.xpUpdateTotal = 0; +} + +removeRankHUD() +{ + self.hud_scorePopup.alpha = 0; +} + +getRank() +{ + rankXp = self.pers["rankxp"]; + rankId = self.pers["rank"]; + + if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) ) + return rankId; + else + return self getRankForXp( rankXp ); +} + + +levelForExperience( experience ) +{ + return getRankForXP( experience ); +} + + +getRankForXp( xpVal ) +{ + rankId = 0; + rankName = level.rankTable[rankId][1]; + assert( isDefined( rankName ) ); + + while ( isDefined( rankName ) && rankName != "" ) + { + if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) ) + return rankId; + + rankId++; + if ( isDefined( level.rankTable[rankId] ) ) + rankName = level.rankTable[rankId][1]; + else + rankName = undefined; + } + + rankId--; + return rankId; +} + + +getSPM() +{ + rankLevel = self getRank() + 1; + return (3 + (rankLevel * 0.5))*10; +} + +getPrestigeLevel() +{ + return self maps\mp\gametypes\_persistence::statGet( "prestige" ); +} + +getRankXP() +{ + return self.pers["rankxp"]; +} + +incRankXP( amount ) +{ + if ( !self rankingEnabled() ) + return; + + if ( isDefined( self.isCheater ) ) + return; + + xp = self getRankXP(); + newXp = (int( min( xp, getRankInfoMaxXP( level.maxRank ) ) ) + amount); + + if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) ) + newXp = getRankInfoMaxXP( level.maxRank ); + + self.pers["rankxp"] = newXp; +} + +getRestXPAward( baseXP ) +{ + if ( !getdvarint( "scr_restxp_enable" ) ) + return 0; + + restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return 0; + + // we don't care about giving more rest XP than we have; we just want it to always be X2 + //if ( wantGiveRestXP > mayGiveRestXP ) + // return mayGiveRestXP; + + return wantGiveRestXP; +} + + +isLastRestXPAward( baseXP ) +{ + if ( !getdvarint( "scr_restxp_enable" ) ) + return false; + + restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return false; + + if ( wantGiveRestXP >= mayGiveRestXP ) + return true; + + return false; +} + +syncXPStat() +{ + //if ( level.xpScale > 4 || level.xpScale <= 0) + //exitLevel( false ); + + xp = self getRankXP(); + + self maps\mp\gametypes\_persistence::statSet( "experience", xp ); +} \ No newline at end of file diff --git a/Modern Warfare 2/Mod/FixNoPatches/maps/mp/_utility.gsc b/Modern Warfare 2/Mod/FixNoPatches/maps/mp/_utility.gsc new file mode 100755 index 0000000..95293d8 --- /dev/null +++ b/Modern Warfare 2/Mod/FixNoPatches/maps/mp/_utility.gsc @@ -0,0 +1,2652 @@ +#include common_scripts\utility; +#include maps\mp\gametypes\_hud_util; + +exploder_sound() +{ + if ( isdefined( self.script_delay ) ) + wait self.script_delay; + + self playSound( level.scr_sound[ self.script_sound ] ); +} + +delayThread( timer, func, param1, param2, param3, param4, param5 ) +{ + thread delayThread_proc( func, timer, param1, param2, param3, param4, param5 ); +} + + +delayThread_proc( func, timer, param1, param2, param3, param4, param5 ) +{ + wait( timer ); + if ( !IsDefined( param1 ) ) + { + assertex( !isdefined( param2 ), "Delaythread does not support vars after undefined." ); + assertex( !isdefined( param3 ), "Delaythread does not support vars after undefined." ); + assertex( !isdefined( param4 ), "Delaythread does not support vars after undefined." ); + assertex( !isdefined( param5 ), "Delaythread does not support vars after undefined." ); + thread [[ func ]](); + } + else + if ( !IsDefined( param2 ) ) + { + assertex( !isdefined( param3 ), "Delaythread does not support vars after undefined." ); + assertex( !isdefined( param4 ), "Delaythread does not support vars after undefined." ); + assertex( !isdefined( param5 ), "Delaythread does not support vars after undefined." ); + thread [[ func ]]( param1 ); + } + else + if ( !IsDefined( param3 ) ) + { + assertex( !isdefined( param4 ), "Delaythread does not support vars after undefined." ); + assertex( !isdefined( param5 ), "Delaythread does not support vars after undefined." ); + thread [[ func ]]( param1, param2 ); + } + else + if ( !IsDefined( param4 ) ) + { + assertex( !isdefined( param5 ), "Delaythread does not support vars after undefined." ); + thread [[ func ]]( param1, param2, param3 ); + } + else + if ( !IsDefined( param5 ) ) + { + thread [[ func ]]( param1, param2, param3, param4 ); + } + else + { + thread [[ func ]]( param1, param2, param3, param4, param5 ); + } +} + +getPlant() +{ + start = self.origin + ( 0, 0, 10 ); + + range = 11; + forward = anglesToForward( self.angles ); + forward = vector_multiply( forward, range ); + + traceorigins[ 0 ] = start + forward; + traceorigins[ 1 ] = start; + + trace = bulletTrace( traceorigins[ 0 ], ( traceorigins[ 0 ] + ( 0, 0, -18 ) ), false, undefined ); + if ( trace[ "fraction" ] < 1 ) + { + temp = spawnstruct(); + temp.origin = trace[ "position" ]; + temp.angles = orientToNormal( trace[ "normal" ] ); + return temp; + } + + trace = bulletTrace( traceorigins[ 1 ], ( traceorigins[ 1 ] + ( 0, 0, -18 ) ), false, undefined ); + if ( trace[ "fraction" ] < 1 ) + { + temp = spawnstruct(); + temp.origin = trace[ "position" ]; + temp.angles = orientToNormal( trace[ "normal" ] ); + return temp; + } + + traceorigins[ 2 ] = start + ( 16, 16, 0 ); + traceorigins[ 3 ] = start + ( 16, -16, 0 ); + traceorigins[ 4 ] = start + ( -16, -16, 0 ); + traceorigins[ 5 ] = start + ( -16, 16, 0 ); + + besttracefraction = undefined; + besttraceposition = undefined; + for ( i = 0; i < traceorigins.size; i++ ) + { + trace = bulletTrace( traceorigins[ i ], ( traceorigins[ i ] + ( 0, 0, -1000 ) ), false, undefined ); + + if ( !isdefined( besttracefraction ) || ( trace[ "fraction" ] < besttracefraction ) ) + { + besttracefraction = trace[ "fraction" ]; + besttraceposition = trace[ "position" ]; + } + } + + if ( besttracefraction == 1 ) + besttraceposition = self.origin; + + temp = spawnstruct(); + temp.origin = besttraceposition; + temp.angles = orientToNormal( trace[ "normal" ] ); + return temp; +} + +orientToNormal( normal ) +{ + hor_normal = ( normal[ 0 ], normal[ 1 ], 0 ); + hor_length = length( hor_normal ); + + if ( !hor_length ) + return( 0, 0, 0 ); + + hor_dir = vectornormalize( hor_normal ); + neg_height = normal[ 2 ] * - 1; + tangent = ( hor_dir[ 0 ] * neg_height, hor_dir[ 1 ] * neg_height, hor_length ); + plant_angle = vectortoangles( tangent ); + + return plant_angle; +} + +deletePlacedEntity( entity ) +{ + entities = getentarray( entity, "classname" ); + for ( i = 0; i < entities.size; i++ ) + entities[ i ] delete(); +} + +playSoundOnPlayers( sound, team, excludeList ) +{ + assert( isdefined( level.players ) ); + + if ( level.splitscreen ) + { + if ( isdefined( level.players[ 0 ] ) ) + level.players[ 0 ] playLocalSound( sound ); + } + else + { + if ( isDefined( team ) ) + { + if ( isdefined( excludeList ) ) + { + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[ i ]; + if ( isdefined( player.pers[ "team" ] ) && ( player.pers[ "team" ] == team ) && !isExcluded( player, excludeList ) ) + player playLocalSound( sound ); + } + } + else + { + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[ i ]; + if ( isdefined( player.pers[ "team" ] ) && ( player.pers[ "team" ] == team ) ) + player playLocalSound( sound ); + } + } + } + else + { + if ( isdefined( excludeList ) ) + { + for ( i = 0; i < level.players.size; i++ ) + { + if ( !isExcluded( level.players[ i ], excludeList ) ) + level.players[ i ] playLocalSound( sound ); + } + } + else + { + for ( i = 0; i < level.players.size; i++ ) + level.players[ i ] playLocalSound( sound ); + } + } + } +} + + +sortLowerMessages() +{ + for ( i = 1; i < self.lowerMessages.size; i++ ) + { + message = self.lowerMessages[ i ]; + priority = message.priority; + for ( j = i - 1; j >= 0 && priority > self.lowerMessages[ j ].priority; j -- ) + self.lowerMessages[ j + 1 ] = self.lowerMessages[ j ]; + self.lowerMessages[ j + 1 ] = message; + } +} + + +addLowerMessage( name, text, time, priority ) +{ + newMessage = undefined; + foreach ( message in self.lowerMessages ) + { + if ( message.name == name ) + { + if ( message.text == text && message.priority == priority ) + return; + + newMessage = message; + break; + } + } + + if ( !isDefined( newMessage ) ) + { + newMessage = spawnStruct(); + self.lowerMessages[ self.lowerMessages.size ] = newMessage; + } + + newMessage.name = name; + newMessage.text = text; + newMessage.time = time; + newMessage.addTime = getTime(); + newMessage.priority = priority; + + sortLowerMessages(); +} + + +removeLowerMessage( name ) +{ + for ( i = 0; i < self.lowerMessages.size; i++ ) + { + if ( self.lowerMessages[ i ].name != name ) + continue; + + message = self.lowerMessages[ i ]; + if ( i < self.lowerMessages.size - 1 ) + self.lowerMessages[ i ] = self.lowerMessages[ self.lowerMessages.size - 1 ]; + + self.lowerMessages[ self.lowerMessages.size - 1 ] = undefined; + } + + sortLowerMessages(); +} + + +getLowerMessage() +{ + return self.lowerMessages[ 0 ]; +} + + +setLowerMessage( name, text, time, priority ) +{ + if ( !isDefined( priority ) ) + priority = 1; + + if ( !isDefined( time ) ) + time = 0; + + self addLowerMessage( name, text, time, priority ); + self updateLowerMessage(); + //self notify( "lower_message_set" ); +} + + +updateLowerMessage() +{ + message = self getLowerMessage(); + + if ( !isDefined( message ) ) + { + self.lowerMessage.alpha = 0; + self.lowerTimer.alpha = 0; + return; + } + + self.lowerMessage setText( message.text ); + if ( isDefined( message.time ) && message.time > 0 ) + self.lowerTimer setTimer( max( message.time - ( ( getTime() - message.addTime ) / 1000 ), 0.1 ) ); + else + self.lowerTimer setText( "" ); + + self.lowerMessage.alpha = 0.85; + self.lowerTimer.alpha = 1; +} + +clearLowerMessage( name, fadetime ) +{ + self removeLowerMessage( name ); + self updateLowerMessage(); +} + +clearLowerMessages() +{ + for ( i = 0; i < self.lowerMessages.size; i++ ) + self.lowerMessages[ i ] = undefined; + + if ( !isDefined( self.lowerMessage ) ) + return; + + self updateLowerMessage(); +} + +printOnTeam( printString, team ) +{ + foreach ( player in level.players ) + { + if ( player.team != team ) + continue; + + player iPrintLn( printString ); + } +} + +printBoldOnTeam( text, team ) +{ + assert( isdefined( level.players ) ); + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[ i ]; + if ( ( isdefined( player.pers[ "team" ] ) ) && ( player.pers[ "team" ] == team ) ) + player iprintlnbold( text ); + } +} + +printBoldOnTeamArg( text, team, arg ) +{ + assert( isdefined( level.players ) ); + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[ i ]; + if ( ( isdefined( player.pers[ "team" ] ) ) && ( player.pers[ "team" ] == team ) ) + player iprintlnbold( text, arg ); + } +} + +printOnTeamArg( text, team, arg ) +{ + assert( isdefined( level.players ) ); + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[ i ]; + if ( ( isdefined( player.pers[ "team" ] ) ) && ( player.pers[ "team" ] == team ) ) + player iprintln( text, arg ); + } +} + +printOnPlayers( text, team ) +{ + players = level.players; + for ( i = 0; i < players.size; i++ ) + { + if ( isDefined( team ) ) + { + if ( ( isdefined( players[ i ].pers[ "team" ] ) ) && ( players[ i ].pers[ "team" ] == team ) ) + players[ i ] iprintln( text ); + } + else + { + players[ i ] iprintln( text ); + } + } +} + +printAndSoundOnEveryone( team, otherteam, printFriendly, printEnemy, soundFriendly, soundEnemy, printarg ) +{ + shouldDoSounds = isDefined( soundFriendly ); + + shouldDoEnemySounds = false; + if ( isDefined( soundEnemy ) ) + { + assert( shouldDoSounds );// can't have an enemy sound without a friendly sound + shouldDoEnemySounds = true; + } + + if ( level.splitscreen || !shouldDoSounds ) + { + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[ i ]; + playerteam = player.pers[ "team" ]; + if ( isdefined( playerteam ) ) + { + if ( playerteam == team && isdefined( printFriendly ) ) + player iprintln( printFriendly, printarg ); + else if ( playerteam == otherteam && isdefined( printEnemy ) ) + player iprintln( printEnemy, printarg ); + } + } + if ( shouldDoSounds ) + { + assert( level.splitscreen ); + level.players[ 0 ] playLocalSound( soundFriendly ); + } + } + else + { + assert( shouldDoSounds ); + if ( shouldDoEnemySounds ) + { + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[ i ]; + playerteam = player.pers[ "team" ]; + if ( isdefined( playerteam ) ) + { + if ( playerteam == team ) + { + if ( isdefined( printFriendly ) ) + player iprintln( printFriendly, printarg ); + player playLocalSound( soundFriendly ); + } + else if ( playerteam == otherteam ) + { + if ( isdefined( printEnemy ) ) + player iprintln( printEnemy, printarg ); + player playLocalSound( soundEnemy ); + } + } + } + } + else + { + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[ i ]; + playerteam = player.pers[ "team" ]; + if ( isdefined( playerteam ) ) + { + if ( playerteam == team ) + { + if ( isdefined( printFriendly ) ) + player iprintln( printFriendly, printarg ); + player playLocalSound( soundFriendly ); + } + else if ( playerteam == otherteam ) + { + if ( isdefined( printEnemy ) ) + player iprintln( printEnemy, printarg ); + } + } + } + } + } +} + +printAndSoundOnTeam( team, printString, soundAlias ) +{ + foreach ( player in level.players ) + { + if ( player.team != team ) + continue; + + player printAndSoundOnPlayer( printString, soundAlias ); + } +} + +printAndSoundOnPlayer( printString, soundAlias ) +{ + self iPrintLn( printString ); + self playLocalSound( soundAlias ); +} + +_playLocalSound( soundAlias ) +{ + if ( level.splitscreen && self getEntityNumber() != 0 ) + return; + + self playLocalSound( soundAlias ); +} + +dvarIntValue( dVar, defVal, minVal, maxVal ) +{ + dVar = "scr_" + level.gameType + "_" + dVar; + if ( getDvar( dVar ) == "" ) + { + setDvar( dVar, defVal ); + return defVal; + } + + value = getDvarInt( dVar ); + + if ( value > maxVal ) + value = maxVal; + else if ( value < minVal ) + value = minVal; + else + return value; + + setDvar( dVar, value ); + return value; +} + +dvarFloatValue( dVar, defVal, minVal, maxVal ) +{ + dVar = "scr_" + level.gameType + "_" + dVar; + if ( getDvar( dVar ) == "" ) + { + setDvar( dVar, defVal ); + return defVal; + } + + value = getDvarFloat( dVar ); + + if ( value > maxVal ) + value = maxVal; + else if ( value < minVal ) + value = minVal; + else + return value; + + setDvar( dVar, value ); + return value; +} + +play_sound_on_tag( alias, tag ) +{ + if ( isdefined( tag ) ) + { + playsoundatpos( self getTagOrigin( tag ), alias ); + } + else + { + playsoundatpos( self.origin, alias ); + } +} + +getOtherTeam( team ) +{ + if ( team == "allies" ) + return "axis"; + else if ( team == "axis" ) + return "allies"; + + assertMsg( "getOtherTeam: invalid team " + team ); +} + +wait_endon( waitTime, endOnString, endonString2, endonString3 ) +{ + self endon( endOnString ); + if ( isDefined( endonString2 ) ) + self endon( endonString2 ); + if ( isDefined( endonString3 ) ) + self endon( endonString3 ); + + wait( waitTime ); +} + +isMG( weapon ) +{ + return ( isSubStr( weapon, "_bipod_" ) || weapon == "turret_minigun_mp" ); +} + +initPersStat( dataName ) +{ + if ( !isDefined( self.pers[ dataName ] ) ) + self.pers[ dataName ] = 0; +} + +getPersStat( dataName ) +{ + return self.pers[ dataName ]; +} + +incPersStat( dataName, increment ) +{ + self.pers[ dataName ] += increment; + self maps\mp\gametypes\_persistence::statAdd( dataName, increment ); +} + +setPersStat( dataName, value ) +{ + assertEx( isDefined( dataName ), "Called setPersStat with no dataName defined." ); + assertEx( isDefined( value ), "Called setPersStat for " + dataName + " with no value defined." ); + + self.pers[ dataName ] = value; +} + +initPlayerStat( ref, defaultvalue ) +{ + if ( !isDefined( self.stats["stats_" + ref ] ) ) + { + if ( !isDefined( defaultvalue ) ) + defaultvalue = 0; + + self.stats["stats_" + ref ] = spawnstruct(); + self.stats["stats_" + ref ].value = defaultvalue; + } +} + +incPlayerStat( ref, increment ) +{ + stat = self.stats["stats_" + ref ]; + stat.value += increment; +} + +setPlayerStat( ref, value ) +{ + stat = self.stats["stats_" + ref ]; + stat.value = value; + stat.time = getTime(); +} + +getPlayerStat( ref ) +{ + return self.stats["stats_" + ref ].value; +} + +getPlayerStatTime( ref ) +{ + return self.stats["stats_" + ref ].time; +} + +setPlayerStatIfGreater( ref, newvalue ) +{ + currentvalue = self getPlayerStat( ref ); + + if ( newvalue > currentvalue ) + self setPlayerStat( ref, newvalue ); +} + +setPlayerStatIfLower( ref, newvalue ) +{ + currentvalue = self getPlayerStat( ref ); + + if ( newvalue < currentvalue ) + self setPlayerStat( ref, newvalue ); +} + +updatePersRatio( ratio, num, denom ) +{ + numValue = self maps\mp\gametypes\_persistence::statGet( num ); + denomValue = self maps\mp\gametypes\_persistence::statGet( denom ); + if ( denomValue == 0 ) + denomValue = 1; + + self maps\mp\gametypes\_persistence::statSet( ratio, int( ( numValue * 1000 ) / denomValue ) ); +} + +updatePersRatioBuffered( ratio, num, denom ) +{ + numValue = self maps\mp\gametypes\_persistence::statGetBuffered( num ); + denomValue = self maps\mp\gametypes\_persistence::statGetBuffered( denom ); + if ( denomValue == 0 ) + denomValue = 1; + + self maps\mp\gametypes\_persistence::statSetBuffered( ratio, int( ( numValue * 1000 ) / denomValue ) ); +} + + +// to be used with things that are slow. +// unfortunately, it can only be used with things that aren't time critical. +WaitTillSlowProcessAllowed( allowLoop ) +{ + // wait only a few frames if necessary + // if we wait too long, we might get too many threads at once and run out of variables + // i'm trying to avoid using a loop because i don't want any extra variables + if ( level.lastSlowProcessFrame == gettime() ) + { + if ( isDefined( allowLoop ) && allowLoop ) + { + while ( level.lastSlowProcessFrame == getTime() ) + wait( 0.05 ); + } + else + { + wait .05; + if ( level.lastSlowProcessFrame == gettime() ) + { + wait .05; + if ( level.lastSlowProcessFrame == gettime() ) + { + wait .05; + if ( level.lastSlowProcessFrame == gettime() ) + { + wait .05; + } + } + } + } + } + + level.lastSlowProcessFrame = getTime(); +} + + +waitForTimeOrNotify( time, notifyname ) +{ + self endon( notifyname ); + wait time; +} + + +isExcluded( entity, entityList ) +{ + for ( index = 0; index < entityList.size; index++ ) + { + if ( entity == entityList[ index ] ) + return true; + } + return false; +} + + +leaderDialog( dialog, team, group, excludeList ) +{ + assert( isdefined( level.players ) ); + + if ( level.splitscreen ) + return; + + if ( dialog == "null" ) + return; + + if ( !isDefined( team ) ) + { + leaderDialogBothTeams( dialog, "allies", dialog, "axis", group, excludeList ); + return; + } + + if ( level.splitscreen ) + { + if ( level.players.size ) + level.players[ 0 ] leaderDialogOnPlayer( dialog, group ); + return; + } + + if ( isDefined( excludeList ) ) + { + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[ i ]; + if ( ( isDefined( player.pers[ "team" ] ) && ( player.pers[ "team" ] == team ) ) && !isExcluded( player, excludeList ) ) + player leaderDialogOnPlayer( dialog, group ); + } + } + else + { + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[ i ]; + if ( isDefined( player.pers[ "team" ] ) && ( player.pers[ "team" ] == team ) ) + player leaderDialogOnPlayer( dialog, group ); + } + } +} + + +leaderDialogBothTeams( dialog1, team1, dialog2, team2, group, excludeList ) +{ + assert( isdefined( level.players ) ); + + if ( level.splitscreen ) + return; + + if ( level.splitscreen ) + { + if ( level.players.size ) + level.players[ 0 ] leaderDialogOnPlayer( dialog1, group ); + return; + } + + if ( isDefined( excludeList ) ) + { + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[ i ]; + team = player.pers[ "team" ]; + + if ( !isDefined( team ) ) + continue; + + if ( isExcluded( player, excludeList ) ) + continue; + + if ( team == team1 ) + player leaderDialogOnPlayer( dialog1, group ); + else if ( team == team2 ) + player leaderDialogOnPlayer( dialog2, group ); + } + } + else + { + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[ i ]; + team = player.pers[ "team" ]; + + if ( !isDefined( team ) ) + continue; + + if ( team == team1 ) + player leaderDialogOnPlayer( dialog1, group ); + else if ( team == team2 ) + player leaderDialogOnPlayer( dialog2, group ); + } + } +} + + +leaderDialogOnPlayers( dialog, players, group ) +{ + foreach ( player in players ) + player leaderDialogOnPlayer( dialog, group ); +} + + +leaderDialogOnPlayer( dialog, group, groupOverride ) +{ + if ( !isDefined( groupOverride ) ) + groupOverride = false; + + team = self.pers[ "team" ]; + + if ( level.splitscreen ) + return; + + if ( !isDefined( team ) ) + return; + + if ( team != "allies" && team != "axis" ) + return; + + if ( isDefined( group ) ) + { + // ignore the message if one from the same group is already playing + if ( self.leaderDialogGroup == group ) + { + if ( groupOverride ) + { + self stopLocalSound( self.leaderDialogActive ); + self thread playLeaderDialogOnPlayer( dialog, team ); + } + + return; + } + + hadGroupDialog = isDefined( self.leaderDialogGroups[ group ] ); + + self.leaderDialogGroups[ group ] = dialog; + dialog = group; + + // exit because the "group" dialog call is already in the queue + if ( hadGroupDialog ) + return; + } + + if ( self.leaderDialogActive == "" ) + self thread playLeaderDialogOnPlayer( dialog, team ); + else + self.leaderDialogQueue[ self.leaderDialogQueue.size ] = dialog; +} + + +playLeaderDialogOnPlayer( dialog, team ) +{ + self endon( "disconnect" ); + + self notify ( "playLeaderDialogOnPlayer" ); + self endon ( "playLeaderDialogOnPlayer" ); + + if ( isDefined( self.leaderDialogGroups[ dialog ] ) ) + { + group = dialog; + dialog = self.leaderDialogGroups[ group ]; + self.leaderDialogGroups[ group ] = undefined; + self.leaderDialogGroup = group; + } + + assertEx( isDefined( game[ "dialog" ][ dialog ] ), "Dialog " + dialog + " was not defined in game[dialog] array." ); + + if ( isSubStr( game[ "dialog" ][ dialog ], "null" ) ) + return; + + self.leaderDialogActive = game[ "voice" ][ team ] + game[ "dialog" ][ dialog ]; + self playLocalSound( game[ "voice" ][ team ] + game[ "dialog" ][ dialog ] ); + + wait( 3.0 ); + self.leaderDialogLocalSound = ""; + + self.leaderDialogActive = ""; + self.leaderDialogGroup = ""; + + if ( self.leaderDialogQueue.size > 0 ) + { + nextDialog = self.leaderDialogQueue[ 0 ]; + + for ( i = 1; i < self.leaderDialogQueue.size; i++ ) + self.leaderDialogQueue[ i - 1 ] = self.leaderDialogQueue[ i ]; + self.leaderDialogQueue[ i - 1 ] = undefined; + + self thread playLeaderDialogOnPlayer( nextDialog, team ); + } +} + + +updateMainMenu() +{ + if (self.pers[ "team" ] == "spectator" ) + { + self setClientDvar("g_scriptMainMenu", game["menu_team"]); + } + else + { + self setClientDvar( "g_scriptMainMenu", game[ "menu_class_" + self.pers["team"] ] ); + } +} + + +updateObjectiveText() +{ + if ( self.pers[ "team" ] == "spectator" ) + { + self setClientDvar( "cg_objectiveText", "" ); + return; + } + + if ( getWatchedDvar( "scorelimit" ) > 0 && !isObjectiveBased() ) + { + if ( level.splitScreen ) + self setclientdvar( "cg_objectiveText", getObjectiveScoreText( self.pers[ "team" ] ) ); + else + self setclientdvar( "cg_objectiveText", getObjectiveScoreText( self.pers[ "team" ] ), getWatchedDvar( "scorelimit" ) ); + } + else + { + self setclientdvar( "cg_objectiveText", getObjectiveText( self.pers[ "team" ] ) ); + } +} + + +setObjectiveText( team, text ) +{ + game[ "strings" ][ "objective_" + team ] = text; + precacheString( text ); +} + +setObjectiveScoreText( team, text ) +{ + game[ "strings" ][ "objective_score_" + team ] = text; + precacheString( text ); +} + +setObjectiveHintText( team, text ) +{ + game[ "strings" ][ "objective_hint_" + team ] = text; + precacheString( text ); +} + +getObjectiveText( team ) +{ + return game[ "strings" ][ "objective_" + team ]; +} + +getObjectiveScoreText( team ) +{ + return game[ "strings" ][ "objective_score_" + team ]; +} + +getObjectiveHintText( team ) +{ + return game[ "strings" ][ "objective_hint_" + team ]; +} + + + +getTimePassed() +{ + if ( !isDefined( level.startTime ) ) + return 0; + + if ( level.timerStopped ) + return( level.timerPauseTime - level.startTime ) - level.discardTime; + else + return( gettime() - level.startTime ) - level.discardTime; + +} + +getSecondsPassed() +{ + return (getTimePassed() / 1000); +} + +getMinutesPassed() +{ + return (getSecondsPassed() / 60); +} + +ClearKillcamState() +{ + self.forcespectatorclient = -1; + self.killcamentity = -1; + self.archivetime = 0; + self.psoffsettime = 0; +} + +isInKillcam() +{ + return ( self.forcespectatorclient != -1 || self.killcamentity != -1 ); +} + +isValidClass( class ) +{ + return isDefined( class ) && class != ""; +} + + + +getValueInRange( value, minValue, maxValue ) +{ + if ( value > maxValue ) + return maxValue; + else if ( value < minValue ) + return minValue; + else + return value; +} + + + + +waitForTimeOrNotifies( desiredDelay ) +{ + startedWaiting = getTime(); + + waitedTime = ( getTime() - startedWaiting ) / 1000; + + if ( waitedTime < desiredDelay ) + { + wait desiredDelay - waitedTime; + return desiredDelay; + } + else + { + return waitedTime; + } +} + +closeMenus() +{ + self closepopupMenu(); + self closeInGameMenu(); +} + + +logXPGains() +{ + if ( !isDefined( self.xpGains ) ) + return; + + xpTypes = getArrayKeys( self.xpGains ); + for ( index = 0; index < xpTypes.size; index++ ) + { + gain = self.xpGains[ xpTypes[ index ] ]; + if ( !gain ) + continue; + + self logString( "xp " + xpTypes[ index ] + ": " + gain ); + } +} + + +registerRoundSwitchDvar( dvarString, defaultValue, minValue, maxValue ) +{ + registerWatchDvarInt( "roundswitch", defaultValue ); + + dvarString = ( "scr_" + dvarString + "_roundswitch" ); + + level.roundswitchDvar = dvarString; + level.roundswitchMin = minValue; + level.roundswitchMax = maxValue; + level.roundswitch = getDvarInt( dvarString, defaultValue ); + + if ( level.roundswitch < minValue ) + level.roundswitch = minValue; + else if ( level.roundswitch > maxValue ) + level.roundswitch = maxValue; +} + + +registerRoundLimitDvar( dvarString, defaultValue, minValue, maxValue ) +{ + registerWatchDvarInt( "roundlimit", defaultValue ); +} + + +registerWinLimitDvar( dvarString, defaultValue, minValue, maxValue ) +{ + registerWatchDvarInt( "winlimit", defaultValue ); +} + + +registerScoreLimitDvar( dvarString, defaultValue, minValue, maxValue ) +{ + registerWatchDvarInt( "scorelimit", defaultValue ); +} + + +registerTimeLimitDvar( dvarString, defaultValue, minValue, maxValue ) +{ + registerWatchDvarFloat( "timelimit", defaultValue ); + makeDvarServerInfo( "ui_timelimit", getTimeLimit() ); +} + +registerHalfTimeDvar( dvarString, defaultValue, minValue, maxValue) +{ + registerWatchDvarInt( "halftime", defaultValue ); + makeDvarServerInfo( "ui_halftime", getHalfTime() ); +} + +registerNumLivesDvar( dvarString, defaultValue, minValue, maxValue ) +{ + registerWatchDvarInt( "numlives", defaultValue ); +} + +setOverTimeLimitDvar( value ) +{ + makeDvarServerInfo( "overtimeTimeLimit", value ); +} + +get_damageable_player( player, playerpos ) +{ + newent = spawnstruct(); + newent.isPlayer = true; + newent.isADestructable = false; + newent.entity = player; + newent.damageCenter = playerpos; + return newent; +} + +get_damageable_sentry( sentry, sentryPos ) +{ + newent = spawnstruct(); + newent.isPlayer = false; + newent.isADestructable = false; + newent.isSentry = true; + newent.entity = sentry; + newent.damageCenter = sentryPos; + return newent; +} + +get_damageable_grenade( grenade, entpos ) +{ + newent = spawnstruct(); + newent.isPlayer = false; + newent.isADestructable = false; + newent.entity = grenade; + newent.damageCenter = entpos; + return newent; +} + +get_damageable_player_pos( player ) +{ + return player.origin + ( 0, 0, 32 ); +} + +get_damageable_grenade_pos( grenade ) +{ + return grenade.origin; +} + +// this should be a code function. +getDvarVec( dvarName ) +{ + dvarString = getDvar( dvarName ); + + if ( dvarString == "" ) + return( 0, 0, 0 ); + + dvarTokens = strTok( dvarString, " " ); + + if ( dvarTokens.size < 3 ) + return( 0, 0, 0 ); + + setDvar( "tempR", dvarTokens[ 0 ] ); + setDvar( "tempG", dvarTokens[ 1 ] ); + setDvar( "tempB", dvarTokens[ 2 ] ); + + return( ( getDvarFloat( "tempR" ), getDvarFloat( "tempG" ), getDvarFloat( "tempB" ) ) ); +} + +strip_suffix( lookupString, stripString ) +{ + if ( lookupString.size <= stripString.size ) + return lookupString; + + if ( getSubStr( lookupString, lookupString.size - stripString.size, lookupString.size ) == stripString ) + return getSubStr( lookupString, 0, lookupString.size - stripString.size ); + + return lookupString; +} + +_takeWeaponsExcept( saveWeapon ) +{ + weaponsList = self GetWeaponsListAll(); + + foreach ( weapon in weaponsList ) + { + if ( weapon == saveWeapon ) + { + continue; + } + else + { + self takeWeapon( weapon ); + } + } +} + +saveData() +{ + saveData = spawnstruct(); + + saveData.offhandClass = self getOffhandSecondaryClass(); + saveData.actionSlots = self.saved_actionSlotData; + + saveData.currentWeapon = self getCurrentWeapon(); + + weaponsList = self GetWeaponsListAll(); + saveData.weapons = []; + foreach ( weapon in weaponsList ) + { + if ( weaponInventoryType( weapon ) == "exclusive" ) + continue; + + if ( weaponInventoryType( weapon ) == "altmode" ) + continue; + + saveWeapon = spawnStruct(); + saveWeapon.name = weapon; + saveWeapon.clipAmmoR = self getWeaponAmmoClip( weapon, "right" ); + saveWeapon.clipAmmoL = self getWeaponAmmoClip( weapon, "left" ); + saveWeapon.stockAmmo = self getWeaponAmmoStock( weapon ); + /* save camo? */ + + if ( isDefined( self.throwingGrenade ) && self.throwingGrenade == weapon ) + saveWeapon.stockAmmo--; + + assert( saveWeapon.stockAmmo >= 0 ); + + saveData.weapons[saveData.weapons.size] = saveWeapon; + } + + self.script_saveData = saveData; +} + + +restoreData() +{ + saveData = self.script_saveData; + + self setOffhandSecondaryClass( saveData.offhandClass ); + + foreach ( weapon in saveData.weapons ) + { + //if ( weapon.name == self.loadoutPrimary + "_mp" ) + self _giveWeapon( weapon.name, int(tableLookup( "mp/camoTable.csv", 1, self.loadoutPrimaryCamo, 0 )) ); + //else + //self _giveWeapon( weapon.name ); + + self setWeaponAmmoClip( weapon.name, weapon.clipAmmoR, "right" ); + if ( isSubStr( weapon.name, "akimbo" ) ) + self setWeaponAmmoClip( weapon.name, weapon.clipAmmoL, "left" ); + + self setWeaponAmmoStock( weapon.name, weapon.stockAmmo ); + } + + foreach ( slotID, actionSlot in saveData.actionSlots ) + self _setActionSlot( slotID, actionSlot.type, actionSlot.item ); + + if ( self getCurrentWeapon() == "none" ) + { + weapon = saveData.currentWeapon; + + if ( weapon == "none" ) + weapon = self getLastWeapon(); + + // Can remove this when "spawn" isn't used after final stand + self setSpawnWeapon( weapon ); + self switchToWeapon( weapon ); + } +} + + +_setActionSlot( slotID, type, item ) +{ + self.saved_actionSlotData[slotID].type = type; + self.saved_actionSlotData[slotID].item = item; + + self setActionSlot( slotID, type, item ); +} + + +isFloat( value ) +{ + if ( int( value ) != value ) + return true; + + return false; +} + +registerWatchDvarInt( nameString, defaultValue ) +{ + dvarString = "scr_" + level.gameType + "_" + nameString; + + level.watchDvars[ dvarString ] = spawnStruct(); + level.watchDvars[ dvarString ].value = getDvarInt( dvarString, defaultValue ); + level.watchDvars[ dvarString ].type = "int"; + level.watchDvars[ dvarString ].notifyString = "update_" + nameString; +} + + +registerWatchDvarFloat( nameString, defaultValue ) +{ + dvarString = "scr_" + level.gameType + "_" + nameString; + + level.watchDvars[ dvarString ] = spawnStruct(); + level.watchDvars[ dvarString ].value = getDvarFloat( dvarString, defaultValue ); + level.watchDvars[ dvarString ].type = "float"; + level.watchDvars[ dvarString ].notifyString = "update_" + nameString; +} + + +registerWatchDvar( nameString, defaultValue ) +{ + dvarString = "scr_" + level.gameType + "_" + nameString; + + level.watchDvars[ dvarString ] = spawnStruct(); + level.watchDvars[ dvarString ].value = getDvar( dvarString, defaultValue ); + level.watchDvars[ dvarString ].type = "string"; + level.watchDvars[ dvarString ].notifyString = "update_" + nameString; +} + + +getWatchedDvar( dvarString ) +{ + dvarString = "scr_" + level.gameType + "_" + dvarString; + return( level.watchDvars[ dvarString ].value ); +} + + +updateWatchedDvars() +{ + while ( game[ "state" ] == "playing" ) + { + watchDvars = getArrayKeys( level.watchDvars ); + + foreach ( dvarString in watchDvars ) + { + if ( level.watchDvars[ dvarString ].type == "string" ) + dvarValue = getProperty( dvarString, level.watchDvars[ dvarString ].value ); + else if ( level.watchDvars[ dvarString ].type == "float" ) + dvarValue = getFloatProperty( dvarString, level.watchDvars[ dvarString ].value ); + else + dvarValue = getIntProperty( dvarString, level.watchDvars[ dvarString ].value ); + + if ( dvarValue != level.watchDvars[ dvarString ].value ) + { + level.watchDvars[ dvarString ].value = dvarValue; + level notify( level.watchDvars[ dvarString ].notifyString, dvarValue ); + } + } + + wait( 1.0 ); + } +} + + +isRoundBased() +{ + if ( !level.teamBased ) + return false; + + if ( getWatchedDvar( "winlimit" ) != 1 && getWatchedDvar( "roundlimit" ) != 1 ) + return true; + + return false; +} + + +isLastRound() +{ + if ( !level.teamBased ) + return true; + + if ( getWatchedDvar( "roundlimit" ) > 1 && game[ "roundsPlayed" ] >= ( getWatchedDvar( "roundlimit" ) - 1 ) ) + return true; + + if ( getWatchedDvar( "winlimit" ) > 1 && game[ "roundsWon" ][ "allies" ] >= getWatchedDvar( "winlimit" ) - 1 && game[ "roundsWon" ][ "axis" ] >= getWatchedDvar( "winlimit" ) - 1 ) + return true; + + return false; +} + + +wasOnlyRound() +{ + if ( !level.teamBased ) + return true; + + if ( getWatchedDvar( "winlimit" ) == 1 && hitWinLimit() ) + return true; + + if ( getWatchedDvar( "roundlimit" ) == 1 ) + return true; + + return false; +} + + +wasLastRound() +{ + if ( level.forcedEnd ) + return true; + + if ( !level.teamBased ) + return true; + + if ( hitRoundLimit() || hitWinLimit() ) + return true; + + return false; +} + + +hitRoundLimit() +{ + if ( getWatchedDvar( "roundlimit" ) <= 0 ) + return false; + + return( game[ "roundsPlayed" ] >= getWatchedDvar( "roundlimit" ) ); +} + + +hitScoreLimit() +{ + if ( isObjectiveBased() ) + return false; + + if ( getWatchedDvar( "scorelimit" ) <= 0 ) + return false; + + if ( level.teamBased ) + { + if ( game[ "teamScores" ][ "allies" ] >= getWatchedDvar( "scorelimit" ) || game[ "teamScores" ][ "axis" ] >= getWatchedDvar( "scorelimit" ) ) + return true; + } + else + { + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[ i ]; + if ( isDefined( player.score ) && player.score >= getWatchedDvar( "scorelimit" ) ) + return true; + } + } + return false; +} + + +hitWinLimit() +{ + if ( getWatchedDvar( "winlimit" ) <= 0 ) + return false; + + if ( !level.teamBased ) + return true; + + if ( getRoundsWon( "allies" ) >= getWatchedDvar( "winlimit" ) || getRoundsWon( "axis" ) >= getWatchedDvar( "winlimit" ) ) + return true; + + return false; +} + + +getScoreLimit() +{ + if ( isRoundBased() ) + { + if ( getWatchedDvar( "roundlimit" ) ) + return ( getWatchedDvar( "roundlimit" ) ); + else + return ( getWatchedDvar( "winlimit" ) ); + } + else + { + return ( getWatchedDvar( "scorelimit" ) ); + } +} + + +getRoundsWon( team ) +{ + return game[ "roundsWon" ][ team ]; +} + + +isObjectiveBased() +{ + return level.objectiveBased; +} + + +getTimeLimit() +{ + if ( inOvertime() && ( !isDefined(game[ "inNukeOvertime" ]) || !game[ "inNukeOvertime" ] ) ) + { + timeLimit = int( getDvar( "overtimeTimeLimit" ) ); + + if ( isDefined( timeLimit ) ) + return timeLimit; + else + return 1; + } + else if ( isDefined(level.dd) && level.dd && isDefined( level.bombexploded ) && level.bombexploded > 0 ) //to handle extra time added by dd bombs + { + return ( getWatchedDvar( "timelimit" ) + ( level.bombexploded * level.ddTimeToAdd ) ); + } + else + { + return getWatchedDvar( "timelimit" ); + } +} + + +getHalfTime() +{ + if ( inOvertime() ) + return false; + else if ( isDefined( game[ "inNukeOvertime" ] ) && game[ "inNukeOvertime" ] ) + return false; + else + return getWatchedDvar( "halftime" ); +} + + +inOvertime() +{ + return ( isDefined( game["status"] ) && game["status"] == "overtime" ); +} + + +gameHasStarted() +{ + if ( level.teamBased ) + return( level.hasSpawned[ "axis" ] && level.hasSpawned[ "allies" ] ); + else + return( level.maxPlayerCount > 1 ); +} + + +getAverageOrigin( ent_array ) +{ + avg_origin = ( 0, 0, 0 ); + + if ( !ent_array.size ) + return undefined; + + foreach ( ent in ent_array ) + avg_origin += ent.origin; + + avg_x = int( avg_origin[ 0 ] / ent_array.size ); + avg_y = int( avg_origin[ 1 ] / ent_array.size ); + avg_z = int( avg_origin[ 2 ] / ent_array.size ); + + avg_origin = ( avg_x, avg_y, avg_z ); + + return avg_origin; +} + + +getLivingPlayers( team ) +{ + player_array = []; + + foreach ( player in level.players ) + { + if ( !isAlive( player ) ) + continue; + + if ( level.teambased && isdefined( team ) ) + { + if ( team == player.pers[ "team" ] ) + player_array[ player_array.size ] = player; + } + else + { + player_array[ player_array.size ] = player; + } + } + + return player_array; +} + + +setUsingRemote( remoteName ) +{ + if ( isDefined( self.carryIcon) ) + self.carryIcon.alpha = 0; + + assert( !self isUsingRemote() ); + self.usingRemote = remoteName; + + self _disableOffhandWeapons(); + self notify( "using_remote" ); +} + +getRemoteName() +{ + assert( self isUsingRemote() ); + + return self.usingRemote; +} + +freezeControlsWrapper( frozen ) +{ + if ( isDefined( level.hostMigrationTimer ) ) + { + self freezeControls( true ); + return; + } + + self freezeControls( frozen ); +} + + +clearUsingRemote() +{ + //if ( !isWeaponEnabled() ) + // self disableWeapons(); + + if ( isDefined( self.carryIcon) ) + self.carryIcon.alpha = 1; + + self.usingRemote = undefined; + self _enableOffhandWeapons(); + + curWeapon = self getCurrentWeapon(); + + if( curWeapon == "none" || isKillstreakWeapon( curWeapon ) ) + self switchToWeapon( self Getlastweapon() ); + + self freezeControlsWrapper( false ); + + self notify( "stopped_using_remote" ); +} + + +isUsingRemote() +{ + return( isDefined( self.usingRemote ) ); +} + + +queueCreate( queueName ) +{ + if ( !isDefined( level.queues ) ) + level.queues = []; + + assert( !isDefined( level.queues[ queueName ] ) ); + + level.queues[ queueName ] = []; +} + + +queueAdd( queueName, entity ) +{ + assert( isDefined( level.queues[ queueName ] ) ); + level.queues[ queueName ][ level.queues[ queueName ].size ] = entity; +} + + +queueRemoveFirst( queueName ) +{ + assert( isDefined( level.queues[ queueName ] ) ); + + first = undefined; + newQueue = []; + foreach ( element in level.queues[ queueName ] ) + { + if ( !isDefined( element ) ) + continue; + + if ( !isDefined( first ) ) + first = element; + else + newQueue[ newQueue.size ] = element; + } + + level.queues[ queueName ] = newQueue; + + return first; +} + + +_giveWeapon( weapon, variant, dualWieldOverRide ) +{ + if ( !isDefined(variant) ) + variant = 0; + + if ( isSubstr( weapon, "_akimbo" ) || isDefined(dualWieldOverRide) && dualWieldOverRide == true) + self giveWeapon(weapon, variant, true); + else + self giveWeapon(weapon, variant, false); +} + +_hasPerk( perkName ) +{ + if ( isDefined( self.perks[perkName] ) ) + return true; + + return false; +} + + +_setPerk( perkName ) +{ + self.perks[perkName] = true; + + if ( isDefined( level.perkSetFuncs[perkName] ) ) + self thread [[level.perkSetFuncs[perkName]]](); + + self setPerk( perkName, !isDefined( level.scriptPerks[perkName] ) ); +} + + +_unsetPerk( perkName ) +{ + self.perks[perkName] = undefined; + + if ( isDefined( level.perkUnsetFuncs[perkName] ) ) + self thread [[level.perkUnsetFuncs[perkName]]](); + + self unsetPerk( perkName, !isDefined( level.scriptPerks[perkName] ) ); +} + + +_clearPerks() +{ + foreach ( perkName, perkValue in self.perks ) + { + if ( isDefined( level.perkUnsetFuncs[perkName] ) ) + self [[level.perkUnsetFuncs[perkName]]](); + } + + self.perks = []; + self clearPerks(); +} + +// Quick Sort - pass it an array it will come back sorted +quickSort(array) +{ + return quickSortMid(array, 0, array.size -1 ); +} + +quickSortMid(array, start, end) +{ + i = start; + k = end; + + if (end - start >= 1) + { + pivot = array[start]; + + while (k > i) + { + while (array[i] <= pivot && i <= end && k > i) + i++; + while (array[k] > pivot && k >= start && k >= i) + k--; + if (k > i) + array = swap(array, i, k); + } + array = swap(array, start, k); + array = quickSortMid(array, start, k - 1); + array = quickSortMid(array, k + 1, end); + } + else + return array; + + return array; +} + +swap(array, index1, index2) +{ + temp = array[index1]; + array[index1] = array[index2]; + array[index2] = temp; + return array; +} + +_suicide() +{ + if ( self isUsingRemote() && !isDefined( self.fauxDead ) ) + self thread maps\mp\gametypes\_damage::PlayerKilled_internal( self, self, self, 10000, "MOD_SUICIDE", "frag_grenade_mp", (0,0,0), "none", 0, 1116, true ); + else if( !self isUsingRemote() && !isDefined( self.fauxDead ) ) + self suicide(); +} + +isReallyAlive( player ) +{ + if ( isAlive( player ) && !isDefined( player.fauxDead ) ) + return true; + + return false; +} + +playDeathSound() +{ + rand = RandomIntRange( 1,8 ); + + if ( self.team == "axis" ) + self PlaySound( "generic_death_russian_"+ rand ); + else + self PlaySound( "generic_death_american_"+ rand ); + +} + + +rankingEnabled() +{ + assert( isPlayer( self ) ); + return ( level.rankedMatch && !self.usingOnlineDataOffline ); +} + +// only true for private match +privateMatch() +{ + return ( level.onlineGame && getDvarInt( "xblive_privatematch" ) ); +} + +// only true for playlist based LIVE and PSN games +matchMakingGame() +{ + return ( level.onlineGame && !getDvarInt( "xblive_privatematch" ) ); +} + +setAltSceneObj( object, tagName, fov, forceLink ) +{ + /* + if ( !isDefined( forceLink ) ) + forceLink = false; + + if ( !getDvarInt( "scr_pipmode" ) && !forceLink ) + return; + + self endon ( "disconnect" ); + + if ( !isReallyAlive( self ) ) + return; + + if ( !forceLink && isDefined( self.altSceneObject ) ) + return; + + self notify ( "altscene" ); + + self.altSceneObject = object; + + self AlternateSceneCameraLinkTo( object, tagName, fov ); + self setClientDvar( "ui_altscene", 1 ); + + self thread endSceneOnDeath( object ); + self thread endSceneOnDeath( self ); + + self waittill ( "end_altScene" ); + + self.altSceneObject = undefined; + self AlternateSceneCameraUnlink(); + + if ( !forceLink ) + { + self setClientDvar( "ui_altscene", 2 ); + + self endon ( "altscene" ); + wait ( 2.0 ); + } + self setClientDvar( "ui_altscene", 0 ); + */ +} + + +endSceneOnDeath( object ) +{ + self endon ( "altscene" ); + + object waittill ( "death" ); + self notify ( "end_altScene" ); +} + + +getGametypeNumLives() +{ + //commented out to allow diehardhard rules to support mulitiple life gametypes + //if ( level.dieHardMode && !getWatchedDvar( "numlives" ) ) + // return 1; + //else + return getWatchedDvar( "numlives" ); +} + + +registerAdrenalineInfo( type, value ) +{ + if ( !isDefined( level.adrenalineInfo ) ) + level.adrenalineInfo = []; + + level.adrenalineInfo[type] = value; +} + + +giveAdrenaline( type ) +{ + /* + if ( self.adrenaline >= 1000 ) + return; + + assertEx( isDefined( level.adrenalineInfo[type] ), "Unknown adrenaline type: " + type ); + + printLn( "setting: " + type + " " + level.adrenalineInfo[type] ); + + self setAdrenaline( self.adrenaline + level.adrenalineInfo[type] ); + + if ( self.adrenaline == 1000 ) + { + + giveCombatHigh( "specialty_endgame" ); + } + */ +} + + +setAdrenaline( value ) +{ + self.adrenaline = min( value, 1000 ); + self setClientDvar( "ui_adrenaline", self.adrenaline ); + + if ( self.adrenaline < 1000 ) + self.combatHigh = undefined; +} + + +giveCombatHigh( combatHighName ) +{ + self.combatHigh = combatHighName; +} + + +arrayInsertion( array, item, index ) +{ + if ( array.size != 0 ) + { + for ( i = array.size; i >= index; i-- ) + { + array[i+1] = array[i]; + } + } + + array[index] = item; +} + + +getProperty( dvar, defValue ) +{ + value = defValue; + /# + setDevDvarIfUninitialized( dvar, defValue ); + #/ + + value = getDvar( dvar, defValue ); + return value; +} + + +getIntProperty( dvar, defValue ) +{ + value = defValue; + + /# + setDevDvarIfUninitialized( dvar, defValue ); + #/ + + value = getDvarInt( dvar, defValue ); + return value; +} + + +getFloatProperty( dvar, defValue ) +{ + value = defValue; + /# + setDevDvarIfUninitialized( dvar, defValue ); + #/ + + value = getDvarFloat( dvar, defValue ); + return value; +} + + + +statusMenu( duration ) +{ + self endon ( "disconnect" ); + + if ( !isDefined( self._statusMenu ) ) + self.statusMenu = false; + + if ( self.statusMenu ) + return; + + self.statusMenu = true; + + self openpopupMenu( "status_update" ); + + wait ( duration ); + + self closepopupMenu( "status_update" ); + + // debounce + wait ( 10.0 ); + + self.statusMenu = false; +} + +isChangingWeapon() +{ + return ( isDefined( self.changingWeapon ) ); +} + +isKillstreakWeapon( weapon ) +{ + if ( weapon == "none" ) + return false; + + if ( weaponInventoryType( weapon ) == "exclusive" && weapon != "destructible_car" ) + return true; + + if ( isSubStr( weapon, "killstreak" ) ) + return true; + + switch ( weapon ) + { + case "airdrop_sentry_marker_mp": + case "airdrop_mega_marker_mp": + case "airdrop_marker_mp": + case "cobra_player_minigun_mp": // Chopper Gunner + case "artillery_mp": // Precision Airstrike + case "stealth_bomb_mp": // Stealth Bomber + case "pavelow_minigun_mp": // Pave Low + case "sentry_minigun_mp": // Sentry Gun + case "harrier_20mm_mp": // Harrier Strike + case "ac130_105mm_mp": // AC130 + case "ac130_40mm_mp": // AC130 + case "ac130_25mm_mp": // AC130 + case "remotemissile_projectile_mp": // Hellfire + case "cobra_20mm_mp": // Attack Helicopter + case "nuke_mp": // Nuke + return true; + default: + return false; + } +} + + +getWeaponClass( weapon ) +{ + tokens = strTok( weapon, "_" ); + + weaponClass = tablelookup( "mp/statstable.csv", 4, tokens[0], 2 ); + + // handle special case weapons like grenades, airdrop markers, etc... + if ( weaponClass == "" ) + { + weaponName = strip_suffix( weapon, "_mp" ); + weaponClass = tablelookup( "mp/statstable.csv", 4, weaponName, 2 ); + } + + if ( isMG( weapon ) ) + weaponClass = "weapon_mg"; + else if ( isKillstreakWeapon( weapon ) ) + weaponClass = "killstreak"; + else if ( isDeathStreakWeapon( weapon ) ) + weaponClass = "deathstreak"; + else if ( weapon == "none" ) //airdrop crates + weaponClass = "other"; + else if ( weaponClass == "" ) + weaponClass = "other"; + + assertEx( weaponClass != "", "ERROR: invalid weapon class for weapon " + weapon ); + + return weaponClass; +} + +isDeathStreakWeapon( weapon ) +{ + if( weapon == "c4death_mp" || weapon == "frag_grenade_short_mp" ) + return true; + else + return false; +} + +getBaseWeaponName( weaponName ) +{ + tokens = strTok( weaponName, "_" ); + return tokens[0]; +} + +playSoundinSpace( alias, origin ) +{ + playSoundAtPos( origin, alias ); +} + +limitDecimalPlaces( value, places ) +{ + modifier = 1; + for ( i = 0; i < places; i++ ) + modifier *= 10; + + newvalue = value * modifier; + newvalue = Int( newvalue ); + newvalue = newvalue / modifier; + + return newvalue; +} + +roundDecimalPlaces( value, places, style ) +{ + if ( !isdefined( style ) ) + style = "nearest"; + + modifier = 1; + for ( i = 0; i < places; i++ ) + modifier *= 10; + + newValue = value * modifier; + + if ( style == "up" ) + roundedValue = ceil( newValue ); + else if ( style == "down" ) + roundedValue = floor( newValue ); + else + roundedValue = newvalue + 0.5; + + newvalue = Int( roundedValue ); + newvalue = newvalue / modifier; + + return newvalue; +} + +playerForClientId( clientId ) +{ + foreach ( player in level.players ) + { + if ( player.clientId == clientId ) + return player; + } + + return undefined; +} + +isRested() +{ + if ( !self rankingEnabled() ) + return false; + + return ( self getPlayerData( "restXPGoal" ) > self getPlayerData( "experience" ) ); +} + +stringToFloat( stringVal ) +{ + floatElements = strtok( stringVal, "." ); + + floatVal = int( floatElements[0] ); + if ( isDefined( floatElements[1] ) ) + { + modifier = 1; + for ( i = 0; i < floatElements[1].size; i++ ) + modifier *= 0.1; + + floatVal += int ( floatElements[1] ) * modifier; + } + + return floatVal; +} + +setSelfUsable(caller) +{ + self makeUsable(); + + foreach (player in level.players) + { + if (player != caller ) + self disablePlayerUse( player ); + else + self enablePlayerUse( player ); + } +} + +makeTeamUsable( team ) +{ + self makeUsable(); + self thread _updateTeamUsable( team ); +} + +_updateTeamUsable( team ) +{ + self endon ( "death" ); + + for ( ;; ) + { + foreach (player in level.players) + { + if ( player.team == team ) + self enablePlayerUse( player ); + else + self disablePlayerUse( player ); + } + + level waittill ( "joined_team" ); + } +} + +// More general version of makeTeamUsable() which handles FFA +makeEnemyUsable( owner ) +{ + self makeUsable(); + self thread _updateEnemyUsable( owner ); +} + +// Only used for Tactical Insertion for now +// If used for other things, handle owner disappearing or changing team +_updateEnemyUsable( owner ) +{ + // check what happens if the owner leaves + + self endon ( "death" ); + + team = owner.team; + + for ( ;; ) + { + if ( level.teambased ) + { + foreach (player in level.players) + { + if ( player.team != team ) + self enablePlayerUse( player ); + else + self disablePlayerUse( player ); + } + } + else + { + foreach (player in level.players) + { + if ( player != owner ) + self enablePlayerUse( player ); + else + self disablePlayerUse( player ); + } + } + + level waittill ( "joined_team" ); + } +} + +getNextLifeId() +{ + lifeId = getMatchData( "lifeCount" ); + if ( lifeId < level.MaxLives ) + setMatchData( "lifeCount", lifeId+1 ); + + return ( lifeId ); +} + +initGameFlags() +{ + if ( !isDefined( game["flags"] ) ) + game["flags"] = []; +} + +gameFlagInit( flagName, isEnabled ) +{ + assert( isDefined( game["flags"] ) ); + game["flags"][flagName] = isEnabled; +} + +gameFlag( flagName ) +{ + assertEx( isDefined( game["flags"][flagName] ), "gameFlag " + flagName + " referenced without being initialized; usegameFlagInit( , )" ); + return ( game["flags"][flagName] ); +} + +gameFlagSet( flagName ) +{ + assertEx( isDefined( game["flags"][flagName] ), "gameFlag " + flagName + " referenced without being initialized; usegameFlagInit( , )" ); + game["flags"][flagName] = true; + + level notify ( flagName ); +} + +gameFlagClear( flagName ) +{ + assertEx( isDefined( game["flags"][flagName] ), "gameFlag " + flagName + " referenced without being initialized; usegameFlagInit( , )" ); + game["flags"][flagName] = false; +} + +gameFlagWait( flagName ) +{ + assertEx( isDefined( game["flags"][flagName] ), "gameFlag " + flagName + " referenced without being initialized; usegameFlagInit( , )" ); + while ( !gameFlag( flagName ) ) + level waittill ( flagName ); +} + +// including grenade launcher, grenade, RPG, C4, claymore +isExplosiveDamage( meansofdeath ) +{ + explosivedamage = "MOD_GRENADE MOD_GRENADE_SPLASH MOD_PROJECTILE MOD_PROJECTILE_SPLASH MOD_EXPLOSIVE mod_explosive"; + if( isSubstr( explosivedamage, meansofdeath ) ) + return true; + return false; +} + +// if primary weapon damage +isPrimaryDamage( meansofdeath ) +{ + // including pistols as well since sometimes they share ammo + if( meansofdeath == "MOD_RIFLE_BULLET" || meansofdeath == "MOD_PISTOL_BULLET" || meansofdeath == "MOD_EXPLOSIVE_BULLET" ) + return true; + return false; +} + + +initLevelFlags() +{ + if ( !isDefined( level.levelFlags ) ) + level.levelFlags = []; +} + +levelFlagInit( flagName, isEnabled ) +{ + assert( isDefined( level.levelFlags ) ); + level.levelFlags[flagName] = isEnabled; +} + +levelFlag( flagName ) +{ + assertEx( isDefined( level.levelFlags[flagName] ), "levelFlag " + flagName + " referenced without being initialized; use levelFlagInit( , )" ); + return ( level.levelFlags[flagName] ); +} + +levelFlagSet( flagName ) +{ + assertEx( isDefined( level.levelFlags[flagName] ), "levelFlag " + flagName + " referenced without being initialized; use levelFlagInit( , )" ); + level.levelFlags[flagName] = true; + + level notify ( flagName ); +} + +levelFlagClear( flagName ) +{ + assertEx( isDefined( level.levelFlags[flagName] ), "levelFlag " + flagName + " referenced without being initialized; use levelFlagInit( , )" ); + level.levelFlags[flagName] = false; + + level notify ( flagName ); +} + +levelFlagWait( flagName ) +{ + assertEx( isDefined( level.levelFlags[flagName] ), "levelFlag " + flagName + " referenced without being initialized; use levelFlagInit( , )" ); + while ( !levelFlag( flagName ) ) + level waittill ( flagName ); +} + +levelFlagWaitOpen( flagName ) +{ + assertEx( isDefined( level.levelFlags[flagName] ), "levelFlag " + flagName + " referenced without being initialized; use levelFlagInit( , )" ); + while ( levelFlag( flagName ) ) + level waittill ( flagName ); +} + +getWeaponAttachments( weapon ) +{ + tokenizedWeapon = strTok( weapon, "_" ); + attachmentArray = []; + + if( tokenizedWeapon.size < 3 || tokenizedWeapon[1] == "_mp" ) + { + attachmentArray[0] = "none"; + } + else if( tokenizedWeapon.size > 3 ) + { + attachmentArray[0] = tokenizedWeapon[1]; + attachmentArray[1] = tokenizedWeapon[2]; + } + else + { + attachmentArray[0] = tokenizedWeapon[1]; + } + + return attachmentArray; +} + +isEMPed() +{ + if ( self.team == "spectator" ) + return false; + + if ( level.teamBased ) + return ( level.teamEMPed[self.team] ); + else + return ( isDefined( level.empPlayer ) && level.empPlayer != self ); +} + +isNuked() +{ + if ( self.team == "spectator" ) + return false; + + return ( isDefined( self.nuked ) ); +} + +isBulletDamage( meansofdeath ) +{ + bulletDamage = "MOD_RIFLE_BULLET MOD_PISTOL_BULLET MOD_HEADSHOT"; + if( isSubstr( bulletDamage, meansofdeath ) ) + return true; + return false; +} + + +getPlayerForGuid( guid ) +{ + foreach ( player in level.players ) + { + if ( player.guid == guid ) + return player; + } + + return undefined; +} + +teamPlayerCardSplash( splash, owner, team ) +{ + if ( level.hardCoreMode ) + return; + + foreach ( player in level.players ) + { + if ( isDefined( team ) && player.team != team ) + continue; + + player thread maps\mp\gametypes\_hud_message::playerCardSplashNotify( splash, owner ); + } +} + + +isCACPrimaryWeapon( weapName ) +{ + switch ( getWeaponClass( weapName ) ) + { + case "weapon_smg": + case "weapon_assault": + case "weapon_riot": + case "weapon_sniper": + case "weapon_lmg": + return true; + default: + return false; + } +} + + +isCACSecondaryWeapon( weapName ) +{ + switch ( getWeaponClass( weapName ) ) + { + case "weapon_projectile": + case "weapon_pistol": + case "weapon_machine_pistol": + case "weapon_shotgun": + return true; + default: + return false; + } +} + + +getLastLivingPlayer( team ) +{ + livePlayer = undefined; + + foreach ( player in level.players ) + { + if ( isDefined( team ) && player.team != team ) + continue; + + if ( !isReallyAlive( player ) && !player maps\mp\gametypes\_playerlogic::maySpawn() ) + continue; + + assertEx( !isDefined( livePlayer ), "getLastLivingPlayer() found more than one live player on team." ); + + livePlayer = player; + } + + return livePlayer; +} + + +getPotentialLivingPlayers() +{ + livePlayers = []; + + foreach ( player in level.players ) + { + if ( !isReallyAlive( player ) && !player maps\mp\gametypes\_playerlogic::maySpawn() ) + continue; + + livePlayers[livePlayers.size] = player; + } + + return livePlayers; +} + + +waitTillRecoveredHealth( time, interval ) +{ + self endon("death"); + self endon("disconnect"); + + fullHealthTime = 0; + + if( !isDefined( interval ) ) + interval = .05; + + if( !isDefined( time ) ) + time = 0; + + while(1) + { + if ( self.health != self.maxhealth ) + fullHealthTime = 0; + else + fullHealthTime += interval; + + wait interval; + + if ( self.health == self.maxhealth && fullHealthTime >= time ) + break; + } + + return; +} + +_objective_delete( objID ) +{ + objective_delete( objID); + + if ( !isDefined( level.reclaimedReservedObjectives ) ) + { + level.reclaimedReservedObjectives = []; + level.reclaimedReservedObjectives[0] = objID; + } + else + { + level.reclaimedReservedObjectives[ level.reclaimedReservedObjectives.size ] = objID; + } +} + + +touchingBadTrigger() +{ + killTriggers = getEntArray( "trigger_hurt", "classname" ); + foreach ( trigger in killTriggers ) + { + if ( self isTouching( trigger ) ) + return true; + } + + radTriggers = getEntArray( "radiation", "targetname" ); + foreach ( trigger in radTriggers ) + { + if ( self isTouching( trigger ) ) + return true; + } + + return false; +} + +setThirdPersonDOF( isEnabled ) +{ + if ( isEnabled ) + self setDepthOfField( 0, 110, 512, 4096, 6, 1.8 ); + else + self setDepthOfField( 0, 0, 512, 512, 4, 0 ); +} + + + +killTrigger( pos, radius, height ) +{ + trig = spawn( "trigger_radius", pos, 0, radius, height ); + + /# + if ( getdvar( "scr_killtriggerdebug" ) == "1" ) + thread killTriggerDebug( pos, radius, height ); + #/ + + for ( ;; ) + { + /# + if ( getdvar( "scr_killtriggerradius" ) != "" ) + radius = int(getdvar( "scr_killtriggerradius" )); + #/ + + trig waittill( "trigger", player ); + + if ( !isPlayer( player ) ) + continue; + + player suicide(); + } +} + +/# +killTriggerDebug( pos, radius, height ) +{ + for ( ;; ) + { + for ( i = 0; i < 20; i++ ) + { + angle = i / 20 * 360; + nextangle = (i+1) / 20 * 360; + + linepos = pos + (cos(angle) * radius, sin(angle) * radius, 0); + nextlinepos = pos + (cos(nextangle) * radius, sin(nextangle) * radius, 0); + + line( linepos, nextlinepos ); + line( linepos + (0,0,height), nextlinepos + (0,0,height) ); + line( linepos, linepos + (0,0,height) ); + } + wait .05; + } +} +#/ + diff --git a/Modern Warfare 2/Mod/GunGameMod/maps/mp/gametypes/_rank.gsc b/Modern Warfare 2/Mod/GunGameMod/maps/mp/gametypes/_rank.gsc new file mode 100755 index 0000000..fb44188 --- /dev/null +++ b/Modern Warfare 2/Mod/GunGameMod/maps/mp/gametypes/_rank.gsc @@ -0,0 +1,857 @@ +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; + +/* +Features: +A awesome Gungame mod +You spawn with a throwing knife - get two kills and you are given a pistol etc all the way up to sniper rifles +It includes the Golden Desert Eagle and nightvision +It includes some modded killstreaks +But most are disabled to keep things fair. +*/ + +initGuns() +{ + self.inverse = false; //Inverted gungame? + self.upgscore = 100; //Score necessary for upgrade. Leave at 100 for 2 kill upgrade. Do 50 for 1 kill, 150 for 3 kill. + self.finalkills = 5; //Kills to win after getting final weapon + self.gunList = []; + // Gun Name, Laser Sight, Akimbo + self.gunList[0] = createGun("throwingknife_mp", 9, false, false); + self.gunList[1] = createGun("usp_fmj_mp", 9, false, false); + self.gunList[2] = createGun("beretta_fmj_mp", 9, false, false); + self.gunList[3] = createGun("coltanaconda_fmj_mp", 9, false, false); + self.gunList[4] = createGun("deserteaglegold_mp", 9, false, false); + self.gunList[5] = createGun("pp2000_mp", 9, true, false); + self.gunList[6] = createGun("tmp_mp", 9, true, false); + self.gunList[7] = createGun("beretta393_akimbo_mp", 9, true, true); + self.gunList[8] = createGun("glock_mp", 9, true, false); + self.gunList[9] = createGun("ranger_akimbo_mp", 9, true, true); + self.gunList[10] = createGun("model1887_akimbo_mp", 9, true, true); + self.gunList[11] = createGun("m1014_grip_reflex_mp", 9, true, false); + self.gunList[12] = createGun("striker_grip_reflex_mp", 9, true, false); + self.gunList[13] = createGun("aa12_eotech_grip_mp", 9, true, false); + self.gunList[14] = createGun("spas12_grip_mp", 9, true, false); + self.gunList[15] = createGun("uzi_reflex_rof_mp", 9, true, false); + self.gunList[16] = createGun("mp5k_reflex_rof_mp", 9, true, false); + self.gunList[17] = createGun("ump45_reflex_rof_mp", 9, true, false); + self.gunList[18] = createGun("p90_eotech_rof_mp", 9, true, false); + self.gunList[19] = createGun("fal_acog_mp", 9, true, false); + self.gunList[20] = createGun("scar_reflex_mp", 9, true, false); + self.gunList[21] = createGun("m16_reflex_mp", 9, true, false); + self.gunList[22] = createGun("aug_grip_mp", 9, true, false); + self.gunList[23] = createGun("masada_reflex_mp", 9, true, false); + self.gunList[24] = createGun("rpd_grip_mp", 9, true, false); + self.gunList[25] = createGun("mg4_grip_mp", 9, true, false); + self.gunList[26] = createGun("m240_grip_mp", 9, true, false); + self.gunList[27] = createGun("wa2000_fmj_mp", 9, false, false); + self.gunList[28] = createGun("m21_fmj_mp", 9, false, false); + self.gunList[29] = createGun("barrett_fmj_mp", 9, false, false); + self.gunList[30] = createGun("cheytac_fmj_mp", 9, false, false); + self.gunList[31] = createGun("m79_mp", 9, false, false); + self.gunList[32] = createGun("at4_mp", 9, true, false); + self.gunList[33] = createGun("rpg_mp", 9, false, false); + self.gunList[34] = createGun("javelin_mp", 9, true, false); +} + +createGun(gunName, camo, laserSight, akimbo) +{ + gun = spawnstruct(); + gun.name = gunName; + gun.camo = camo; + gun.laser = laserSight; + gun.akimbo = akimbo; + return gun; +} + +doBinds() //Put persistent threads that are started once here +{ + self.firstRun = true; + self thread initGuns(); + self.nv = false; + self thread killCrosshairs(); + self thread doScore(); + self thread doGun(); + setDvar("scr_dm_scorelimit", ((self.gunList.size - 1) * self.upgscore) + (self.finalkills * 50)); + setDvar("scr_dm_timelimit", 0); + setDvar("ui_gametype", "ffa"); + setDvar("scr_game_killstreakdelay", 99999999); +} + +doDvars() //Put threads that are called with every respawn +{ + setDvar("g_speed", 220); + setDvar("bg_fallDamageMaxHeight", 1); + setDvar("bg_fallDamageMinHeight", 99999); + self setClientDvar("player_meleerange", 0); + self _clearPerks(); + self maps\mp\perks\_perks::givePerk("specialty_bulletaccuracy"); + self maps\mp\perks\_perks::givePerk("specialty_bulletdamage"); + self maps\mp\perks\_perks::givePerk("specialty_bulletpenetration"); + self maps\mp\perks\_perks::givePerk("specialty_exposeenemy"); + self maps\mp\perks\_perks::givePerk("specialty_extendedmags"); + self maps\mp\perks\_perks::givePerk("specialty_fastreload"); + self maps\mp\perks\_perks::givePerk("specialty_fastsnipe"); + self maps\mp\perks\_perks::givePerk("specialty_marathon"); + self maps\mp\perks\_perks::givePerk("specialty_quieter"); + if(self.nv) self VisionSetNakedForPlayer("default_night_mp", 1); + else self VisionSetNakedForPlayer(getDvar("mapname"), 2); + self thread doNV(); + if(self.firstRun){ + if(self.inverted){ + self thread maps\mp\gametypes\_hud_message::hintMessage("^2Inverse Gun Game"); + self thread maps\mp\gametypes\_hud_message::hintMessage("^2Kill Enemies to Downgrade Your Gun"); + }else{ + self thread maps\mp\gametypes\_hud_message::hintMessage("^2Gun Game"); + self thread maps\mp\gametypes\_hud_message::hintMessage("^2Kill Enemies to Upgrade Your Gun"); + self thread maps\mp\gametypes\_hud_message::hintMessage("^2Modded by The Supreme"); + } + self thread maps\mp\gametypes\_hud_message::hintMessage("^2Press [{+actionslot 1}] to Toggle Night Vision"); + self.firstRun = false; + } +} + +doGun() +{ + self endon("disconnect"); + if(self.inverse) self.curgun = self.gunList.size - 1; + else self.curgun = 0; + curscore = 0; + done = false; + while(true){ + if(self.inverse && self.curgun <= 0) done = true; + if(!self.inverse && self.curgun >= (self.gunList.size - 1)) done = true; + if(!done){ + if(self.inverse && (self.score - curscore >= self.upgscore)){ + self.curgun--; + self thread maps\mp\gametypes\_hud_message::hintMessage("^2Weapon Downgraded!"); + curscore = self.score; + }else if((self.score - curscore >= self.upgscore)){ + self.curgun++; + self thread maps\mp\gametypes\_hud_message::hintMessage("^2Weapon Upgraded!"); + curscore = self.score; + } + } + while(self getCurrentWeapon() != self.gunList[self.curgun].name){ + if(self.gunList[self.curgun].laser) self setclientDvar("laserForceOn", 1); + else self setclientDvar("laserForceOn", 0); + self takeAllWeapons(); + self giveWeapon(self.gunList[self.curgun].name, self.gunList[self.curgun].camo, self.gunList[self.curgun].akimbo); + self switchToWeapon(self.gunList[self.curgun].name); + wait .2; + } + self giveMaxAmmo(self.gunList[self.curgun].name); + wait .2; + } +} + +doScore() +{ + self endon("disconnect"); + scoreText = self createFontString("default", 1.5); + scoreText setPoint("TOPRIGHT", "TOPRIGHT", -5, 0); + while(true) + { + scoreText setText("^3 Level " + self.curgun); + wait .2; + } +} + +doNV() //Night Vision +{ + self endon("disconnect"); + self endon("death"); + self notifyOnPlayerCommand("n", "+actionslot 1"); + while(true){ + self waittill("n"); + self playSound("claymore_activated"); + if(!self.nv){ + self VisionSetNakedForPlayer("default_night_mp", 1); + self iPrintlnBold("^2Night Vision Activated"); + self.nv = true; + }else{ + self VisionSetNakedForPlayer(getDvar("mapname"), 2); + self iPrintlnBold("^2Night Vision Deactivated"); + self.nv = false; + } + } +} + +killCrosshairs() //Get rid of those fucking useless hax +{ + self endon("disconnect"); + + while(true){ + setDvar("cg_drawcrosshair", 0); + self setClientDvar("cg_scoreboardPingText", 1); + self setClientDvar("com_maxfps", 0); + self setClientDvar("cg_drawFPS", 1); + wait 1; + } +} + +init() +{ + level.scoreInfo = []; + level.xpScale = getDvarInt( "scr_xpscale" ); + + level.rankTable = []; + + precacheShader("white"); + + precacheString( &"RANK_PLAYER_WAS_PROMOTED_N" ); + precacheString( &"RANK_PLAYER_WAS_PROMOTED" ); + precacheString( &"RANK_PROMOTED" ); + precacheString( &"MP_PLUS" ); + precacheString( &"RANK_ROMANI" ); + precacheString( &"RANK_ROMANII" ); + precacheString( &"RANK_ROMANIII" ); + registerScoreInfo( "kill", 50 ); + registerScoreInfo( "headshot", 50 ); + registerScoreInfo( "assist", 0 ); + registerScoreInfo( "suicide", 0 ); + registerScoreInfo( "teamkill", 0 ); + registerScoreInfo( "win", 1 ); + registerScoreInfo( "loss", 0.5 ); + registerScoreInfo( "tie", 0.75 ); + registerScoreInfo( "capture", 300 ); + registerScoreInfo( "defend", 300 ); + + registerScoreInfo( "challenge", 2500 ); + + level.maxRank = int(tableLookup( "mp/rankTable.csv", 0, "maxrank", 1 )); + level.maxPrestige = int(tableLookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 )); + + pId = 0; + rId = 0; + for ( pId = 0; pId <= level.maxPrestige; pId++ ) + { + for ( rId = 0; rId <= level.maxRank; rId++ ) + precacheShader( tableLookup( "mp/rankIconTable.csv", 0, rId, pId+1 ) ); + } + + rankId = 0; + rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + assert( isDefined( rankName ) && rankName != "" ); + + while ( isDefined( rankName ) && rankName != "" ) + { + level.rankTable[rankId][1] = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + level.rankTable[rankId][2] = tableLookup( "mp/ranktable.csv", 0, rankId, 2 ); + level.rankTable[rankId][3] = tableLookup( "mp/ranktable.csv", 0, rankId, 3 ); + level.rankTable[rankId][7] = tableLookup( "mp/ranktable.csv", 0, rankId, 7 ); + + precacheString( tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ) ); + + rankId++; + rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + } + + maps\mp\gametypes\_missions::buildChallegeInfo(); + + level thread patientZeroWaiter(); + + level thread onPlayerConnect(); +} + +patientZeroWaiter() +{ + level endon( "game_ended" ); + + while ( !isDefined( level.players ) || !level.players.size ) + wait ( 0.05 ); + + if ( !matchMakingGame() ) + { + if ( (getDvar( "mapname" ) == "mp_rust" && randomInt( 1000 ) == 999) ) + level.patientZeroName = level.players[0].name; + } + else + { + if ( getDvar( "scr_patientZero" ) != "" ) + level.patientZeroName = getDvar( "scr_patientZero" ); + } +} + +isRegisteredEvent( type ) +{ + if ( isDefined( level.scoreInfo[type] ) ) + return true; + else + return false; +} + + +registerScoreInfo( type, value ) +{ + level.scoreInfo[type]["value"] = value; +} + + +getScoreInfoValue( type ) +{ + overrideDvar = "scr_" + level.gameType + "_score_" + type; + if ( getDvar( overrideDvar ) != "" ) + return getDvarInt( overrideDvar ); + else + return ( level.scoreInfo[type]["value"] ); +} + + +getScoreInfoLabel( type ) +{ + return ( level.scoreInfo[type]["label"] ); +} + + +getRankInfoMinXP( rankId ) +{ + return int(level.rankTable[rankId][2]); +} + + +getRankInfoXPAmt( rankId ) +{ + return int(level.rankTable[rankId][3]); +} + + +getRankInfoMaxXp( rankId ) +{ + return int(level.rankTable[rankId][7]); +} + + +getRankInfoFull( rankId ) +{ + return tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ); +} + + +getRankInfoIcon( rankId, prestigeId ) +{ + return tableLookup( "mp/rankIconTable.csv", 0, rankId, prestigeId+1 ); +} + +getRankInfoLevel( rankId ) +{ + return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) ); +} + + +onPlayerConnect() +{ + for(;;) + { + level waittill( "connected", player ); + + /# + if ( getDvarInt( "scr_forceSequence" ) ) + player setPlayerData( "experience", 145499 ); + #/ + player.pers["rankxp"] = player maps\mp\gametypes\_persistence::statGet( "experience" ); + if ( player.pers["rankxp"] < 0 ) // paranoid defensive + player.pers["rankxp"] = 0; + + rankId = player getRankForXp( player getRankXP() ); + player.pers[ "rank" ] = rankId; + player.pers[ "participation" ] = 0; + + player.xpUpdateTotal = 0; + player.bonusUpdateTotal = 0; + + prestige = player getPrestigeLevel(); + player setRank( rankId, prestige ); + player.pers["prestige"] = prestige; + + player.postGamePromotion = false; + if ( !isDefined( player.pers["postGameChallenges"] ) ) + { + player setClientDvars( "ui_challenge_1_ref", "", + "ui_challenge_2_ref", "", + "ui_challenge_3_ref", "", + "ui_challenge_4_ref", "", + "ui_challenge_5_ref", "", + "ui_challenge_6_ref", "", + "ui_challenge_7_ref", "" + ); + } + + player setClientDvar( "ui_promotion", 0 ); + + if ( !isDefined( player.pers["summary"] ) ) + { + player.pers["summary"] = []; + player.pers["summary"]["xp"] = 0; + player.pers["summary"]["score"] = 0; + player.pers["summary"]["challenge"] = 0; + player.pers["summary"]["match"] = 0; + player.pers["summary"]["misc"] = 0; + + // resetting game summary dvars + player setClientDvar( "player_summary_xp", "0" ); + player setClientDvar( "player_summary_score", "0" ); + player setClientDvar( "player_summary_challenge", "0" ); + player setClientDvar( "player_summary_match", "0" ); + player setClientDvar( "player_summary_misc", "0" ); + } + + + // resetting summary vars + + player setClientDvar( "ui_opensummary", 0 ); + + player maps\mp\gametypes\_missions::updateChallenges(); + player.explosiveKills[0] = 0; + player.xpGains = []; + + player.hud_scorePopup = newClientHudElem( player ); + player.hud_scorePopup.horzAlign = "center"; + player.hud_scorePopup.vertAlign = "middle"; + player.hud_scorePopup.alignX = "center"; + player.hud_scorePopup.alignY = "middle"; + player.hud_scorePopup.x = 0; + if ( level.splitScreen ) + player.hud_scorePopup.y = -40; + else + player.hud_scorePopup.y = -60; + player.hud_scorePopup.font = "hudbig"; + player.hud_scorePopup.fontscale = 0.75; + player.hud_scorePopup.archived = false; + player.hud_scorePopup.color = (0.5,0.5,0.5); + player.hud_scorePopup.sort = 10000; + player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit( 3.0 ); + + player thread doBinds(); + player thread onPlayerSpawned(); + player thread onJoinedTeam(); + player thread onJoinedSpectators(); + } +} + + +onJoinedTeam() +{ + self endon("disconnect"); + + for(;;) + { + self waittill( "joined_team" ); + self thread removeRankHUD(); + } +} + + +onJoinedSpectators() +{ + self endon("disconnect"); + + for(;;) + { + self waittill( "joined_spectators" ); + self thread removeRankHUD(); + } +} + + +onPlayerSpawned() +{ + self endon("disconnect"); + for(;;) + { + self waittill( "spawned_player" ); + self thread doDvars(); + } +} + + + +roundUp( floatVal ) +{ + if ( int( floatVal ) != floatVal ) + return int( floatVal+1 ); + else + return int( floatVal ); +} + + +giveRankXP( type, value ) +{ + self endon("disconnect"); + + lootType = "none"; + + if ( !self rankingEnabled() ) + return; + + if ( level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"]) ) + return; + else if ( !level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2) ) + return; + + if ( !isDefined( value ) ) + value = getScoreInfoValue( type ); + + if ( !isDefined( self.xpGains[type] ) ) + self.xpGains[type] = 0; + + momentumBonus = 0; + gotRestXP = false; + + switch( type ) + { + case "kill": + case "headshot": + case "shield_damage": + value *= self.xpScaler; + case "assist": + case "suicide": + case "teamkill": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "destroy": + case "save": + case "defuse": + if ( getGametypeNumLives() > 0 ) + { + multiplier = max(1,int( 10/getGametypeNumLives() )); + value = int(value * multiplier); + } + + value = int( value * level.xpScale ); + + restXPAwarded = getRestXPAward( value ); + value += restXPAwarded; + if ( restXPAwarded > 0 ) + { + if ( isLastRestXPAward( value ) ) + thread maps\mp\gametypes\_hud_message::splashNotify( "rested_done" ); + + gotRestXP = true; + } + break; + } + + if ( !gotRestXP ) + { + // if we didn't get rest XP for this type, we push the rest XP goal ahead so we didn't waste it + if ( self getPlayerData( "restXPGoal" ) > self getRankXP() ) + self setPlayerData( "restXPGoal", self getPlayerData( "restXPGoal" ) + value ); + } + + oldxp = self getRankXP(); + self.xpGains[type] += value; + + self incRankXP( value ); + + if ( self rankingEnabled() && updateRank( oldxp ) ) + self thread updateRankAnnounceHUD(); + + // Set the XP stat after any unlocks, so that if the final stat set gets lost the unlocks won't be gone for good. + self syncXPStat(); + + if ( !level.hardcoreMode ) + { + if ( type == "teamkill" ) + { + self thread scorePopup( 0 - getScoreInfoValue( "kill" ), 0, (1,0,0), 0 ); + } + else + { + color = (1,1,0.5); + if ( gotRestXP ) + color = (1,.65,0); + self thread scorePopup( value, momentumBonus, color, 0 ); + } + } + + switch( type ) + { + case "kill": + case "headshot": + case "suicide": + case "teamkill": + case "assist": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "defuse": + self.pers["summary"]["score"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "win": + case "loss": + case "tie": + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "challenge": + self.pers["summary"]["challenge"] += value; + self.pers["summary"]["xp"] += value; + break; + + default: + self.pers["summary"]["misc"] += value; //keeps track of ungrouped match xp reward + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + } +} + +updateRank( oldxp ) +{ + newRankId = self getRank(); + if ( newRankId == self.pers["rank"] ) + return false; + + oldRank = self.pers["rank"]; + rankId = self.pers["rank"]; + self.pers["rank"] = newRankId; + + //self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) ); + println( "promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "." ); + + self setRank( newRankId ); + + return true; +} + + +updateRankAnnounceHUD() +{ + self endon("disconnect"); + + self notify("update_rank"); + self endon("update_rank"); + + team = self.pers["team"]; + if ( !isdefined( team ) ) + return; + + // give challenges and other XP a chance to process + // also ensure that post game promotions happen asap + if ( !levelFlag( "game_over" ) ) + level waittill_notify_or_timeout( "game_over", 0.25 ); + + + newRankName = self getRankInfoFull( self.pers["rank"] ); + rank_char = level.rankTable[self.pers["rank"]][1]; + subRank = int(rank_char[rank_char.size-1]); + + thread maps\mp\gametypes\_hud_message::promotionSplashNotify(); + + if ( subRank > 1 ) + return; + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + playerteam = player.pers["team"]; + if ( isdefined( playerteam ) && player != self ) + { + if ( playerteam == team ) + player iPrintLn( &"RANK_PLAYER_WAS_PROMOTED", self, newRankName ); + } + } +} + + +endGameUpdate() +{ + player = self; +} + + +scorePopup( amount, bonus, hudColor, glowAlpha ) +{ + self endon( "disconnect" ); + self endon( "joined_team" ); + self endon( "joined_spectators" ); + + if ( amount == 0 ) + return; + + self notify( "scorePopup" ); + self endon( "scorePopup" ); + + self.xpUpdateTotal += amount; + self.bonusUpdateTotal += bonus; + + wait ( 0.05 ); + + if ( self.xpUpdateTotal < 0 ) + self.hud_scorePopup.label = &""; + else + self.hud_scorePopup.label = &"MP_PLUS"; + + self.hud_scorePopup.color = hudColor; + self.hud_scorePopup.glowColor = hudColor; + self.hud_scorePopup.glowAlpha = glowAlpha; + + self.hud_scorePopup setValue(self.xpUpdateTotal); + self.hud_scorePopup.alpha = 0.85; + self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse( self ); + + increment = max( int( self.bonusUpdateTotal / 20 ), 1 ); + + if ( self.bonusUpdateTotal ) + { + while ( self.bonusUpdateTotal > 0 ) + { + self.xpUpdateTotal += min( self.bonusUpdateTotal, increment ); + self.bonusUpdateTotal -= min( self.bonusUpdateTotal, increment ); + + self.hud_scorePopup setValue( self.xpUpdateTotal ); + + wait ( 0.05 ); + } + } + else + { + wait ( 1.0 ); + } + + self.hud_scorePopup fadeOverTime( 0.75 ); + self.hud_scorePopup.alpha = 0; + + self.xpUpdateTotal = 0; +} + +removeRankHUD() +{ + self.hud_scorePopup.alpha = 0; +} + +getRank() +{ + rankXp = self.pers["rankxp"]; + rankId = self.pers["rank"]; + + if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) ) + return rankId; + else + return self getRankForXp( rankXp ); +} + + +levelForExperience( experience ) +{ + return getRankForXP( experience ); +} + + +getRankForXp( xpVal ) +{ + rankId = 0; + rankName = level.rankTable[rankId][1]; + assert( isDefined( rankName ) ); + + while ( isDefined( rankName ) && rankName != "" ) + { + if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) ) + return rankId; + + rankId++; + if ( isDefined( level.rankTable[rankId] ) ) + rankName = level.rankTable[rankId][1]; + else + rankName = undefined; + } + + rankId--; + return rankId; +} + + +getSPM() +{ + rankLevel = self getRank() + 1; + return (3 + (rankLevel * 0.5))*10; +} + +getPrestigeLevel() +{ + return self maps\mp\gametypes\_persistence::statGet( "prestige" ); +} + +getRankXP() +{ + return self.pers["rankxp"]; +} + +incRankXP( amount ) +{ + if ( !self rankingEnabled() ) + return; + + if ( isDefined( self.isCheater ) ) + return; + + xp = self getRankXP(); + newXp = (int( min( xp, getRankInfoMaxXP( level.maxRank ) ) ) + amount); + + if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) ) + newXp = getRankInfoMaxXP( level.maxRank ); + + self.pers["rankxp"] = newXp; +} + +getRestXPAward( baseXP ) +{ + if ( !getdvarint( "scr_restxp_enable" ) ) + return 0; + + restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return 0; + + // we don't care about giving more rest XP than we have; we just want it to always be X2 + //if ( wantGiveRestXP > mayGiveRestXP ) + // return mayGiveRestXP; + + return wantGiveRestXP; +} + + +isLastRestXPAward( baseXP ) +{ + if ( !getdvarint( "scr_restxp_enable" ) ) + return false; + + restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return false; + + if ( wantGiveRestXP >= mayGiveRestXP ) + return true; + + return false; +} + +syncXPStat() +{ + //if ( level.xpScale > 4 || level.xpScale <= 0) + //exitLevel( false ); + + xp = self getRankXP(); + + self maps\mp\gametypes\_persistence::statSet( "experience", xp ); +} \ No newline at end of file diff --git a/Modern Warfare 2/Mod/IgnitionMod/maps/mp/gametypes/_rank.gsc b/Modern Warfare 2/Mod/IgnitionMod/maps/mp/gametypes/_rank.gsc new file mode 100755 index 0000000..234d43a --- /dev/null +++ b/Modern Warfare 2/Mod/IgnitionMod/maps/mp/gametypes/_rank.gsc @@ -0,0 +1,959 @@ +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; + +/* +Features: +Set admins with ease. +Admins spawn with a AK47 Holo Silenced and a USP Silenced. +Normal people spawn with a M16 Holo Silenced and a MP5K Acog. +All spawn with a grenade and 2 concussions. +XPScale Unlocked. +Infinite Run. +Crosshairs Off. +Damage Indicator Cross Off. +Class changing exploit fixed thanks to AgentGod! +Admins get lots of perks, No recoil, double length kill streaks and reduced spread. +Welcome Message with sound. +Ping Text Enabled. +Admins can press N for a wallhack toggle on off. +All can press 5 for night vision. +All can press 3 for lasers. +Instructions on hotkeys. +Altered scoreboard.Hardcore mode. +Everyone has scavenger. +Admins have their ammo reserves refreshed every 5 seconds. +Normal people have their ammo reserves refreshed every 20 seconds. +Everyone unlocks 10th Spinning Emblem. + +Optional: +Disable Killstreaks +*/ + +doWallhack() { + self endon ("disconnect"); + self endon ("death"); + + self notifyOnPlayerCommand( "n", "+actionslot 1" ); + for(;;) { + self waittill ("n"); + self ThermalVisionFOFOverlayOn(); + self iPrintlnBold("Wallhack Activated!"); + self playSound("claymore_activated"); + + self waittill ("n"); + self ThermalVisionFOFOverlayOff(); + self iPrintlnBold("Wallhack De-Activated!"); + self playSound("claymore_activated"); + } +} + +doLasers() { + self endon ("disconnect"); + self endon ("death"); + + self notifyOnPlayerCommand( "3", "+actionslot 3" ); + for(;;) { + self waittill ("3"); + self setclientDvar("laserForceOn", 1); + self iPrintlnBold("Lasers Activated!"); + self playSound("claymore_activated"); + + self waittill ("3"); + self setclientDvar("laserForceOn", 0); + self iPrintlnBold("Lasers De-Activated!"); + self playSound("claymore_activated"); + } +} + +doNightvision() { + self endon ("disconnect"); + self endon ("death"); + + self notifyOnPlayerCommand("5", "+actionslot 2"); + for(;;) { + self waittill ("5"); + self VisionSetNakedForPlayer("default_night_mp", 0); + self playSound("claymore_activated"); + self iPrintlnBold("Night Vision Activated!"); + + self waittill ("5"); + self VisionSetNakedForPlayer(getdvar("mapname"), 0); + self playSound("claymore_activated"); + self iPrintlnBold("Night Vision De-Activated!"); + } +} + +killCrosshairs() { + self endon("disconnect"); + + while(1) { + setDvar("cg_drawcrosshair", 0); + wait 2; + } +} + +doHud() { + setDvar("cg_cursorHints", 0); + setDvar("cg_descriptiveText", 0); + setDvar("cg_drawCrosshairNames", 0); + setDvar("cg_drawDamageDirection", 0); + setDvar("g_hardcore", 1); + setDvar("cg_scoreboardItemHeight", 10); + setDvar("cg_scoreboardPingText", 1); + setDvar("perk_scavengerMode", 1); +} + +doCheckVIP() { + if ( self.name == "." || self.name == "ADMIN2" || self.name == "ADMIN3" || self.name == "ADMIN4" || self.name == "ADMIN5" || self.name == "ADMIN6" ) { + self thread doVip(); + self thread doVipperks(); + self thread doWallhack(); + self thread doNightvision(); + self thread doLasers(); + self thread doVweapons(); + self iPrintlnBold("Press N for wallhack and 5 for night vision and 3 for lasers!"); + } else { + self thread doClearperks(); + self thread doNightvision(); + self thread doLasers(); + self thread doNweapons(); + self thread doAmmon(); + self iPrintlnBold("Press 5 for night vision and 3 for lasers!"); + } + + setDvar("sv_cheats", 1); + self thread killCrosshairs(); + self thread doHud(); + self setPlayerData( "iconUnlocked", "cardicon_prestige10_02", 1); +} + +doVip() { + self.killStreakScaler = 2; + self player_recoilScaleOn(0); + self setclientDvar("perk_weapSpreadMultiplier" , 0.001); + self setclientDvar("cg_drawShellshock", 0); + self thread doAmmo(); +} + +doSplash() { + self endon("disconnect"); + + wait 15; + notifyData = spawnstruct(); + notifyData.iconName = "rank_prestige7"; + notifyData.titleText = "Ignition Mod"; + notifyData.notifyText = "By RigorousSphinx"; + notifyData.notifyText2 = "Have Fun!"; + notifyData.glowColor = (0.3, 0.6, 0.3); + notifyData.sound = "veh_ac130_sonic_boom"; + self thread maps\mp\gametypes\_hud_message::notifyMessage(notifyData); + wait 0.5; +} + +isValidWeapon(weapon) { + switch(weapon) { + case "m16_eotech_silencer_mp": + case "mp5k_eotech_silencer_mp": + case "ak47_eotech_silencer_mp": + case "usp_silencer_xmags_mp": + case "none": + + return true; + } +} + +fixExploit() { + self endon("disconnect"); + wait 15; // We check on spawn only + + if (!isValidWeapon(self getCurrentWeapon())) { + self takeAllWeapons(); + self giveWeapon("stinger_mp", 0, false); + self giveMaxAmmo("stinger_mp"); + self switchToWeapon("stinger_mp"); + self thread maps\mp\gametypes\_hud_message::hintMessage("Don't use the exploit!"); + } +} + +doNweapons() { + self takeAllWeapons(); + self giveWeapon("m16_eotech_silencer_mp", 1, false);self GiveMaxAmmo("m16_eotech_silencer_mp"); + self giveWeapon("mp5k_eotech_silencer_mp", 1, false);self GiveMaxAmmo("mp5k_eotech_silencer_mp"); + + while(self getCurrentWeapon() != "m16_eotech_silencer_mp") { + self switchToWeapon("m16_eotech_silencer_mp"); + wait 0.05; + } + + self maps\mp\perks\_perks::givePerk("frag_grenade_mp");self setWeaponAmmoClip("frag_grenade_mp", 1); + self SetOffhandSecondaryClass( "concussion"); + self giveWeapon("concussion_grenade_mp");self setWeaponAmmoClip("concussion_grenade_mp", 2); + +} + +doVweapons() { + self takeAllWeapons(); + self giveWeapon("ak47_eotech_silencer_mp", 9, false);self GiveMaxAmmo("ak47_eotech_silencer_mp"); + self giveWeapon("usp_silencer_xmags_mp", 9, false);self GiveMaxAmmo("usp_silencer_xmags_mp"); + + while(self getCurrentWeapon() != "ak47_eotech_silencer_mp") { + self switchToWeapon("ak47_eotech_silencer_mp"); + wait 0.05; + } + + self maps\mp\perks\_perks::givePerk( "frag_grenade_mp" );self setWeaponAmmoClip("frag_grenade_mp", 3); + self SetOffhandSecondaryClass( "concussion" ); + self giveWeapon( "concussion_grenade_mp" );self setWeaponAmmoClip("concussion_grenade_mp", 3); + +} + +doAmmo() { + self endon ("disconnect"); + self endon ("death"); + + while (1) { + currentWeapon = self getCurrentWeapon(); + + if (currentWeapon != "none") { + self GiveMaxAmmo(currentWeapon); + } + + wait 5; + } +} + +doAmmon() +{ + self endon ("disconnect"); + self endon ("death"); + + while (1) { + currentWeapon = self getCurrentWeapon(); + + if (currentWeapon != "none") { + self GiveMaxAmmo(currentWeapon); + } + + wait 20; + } +} + +doVipperks() { + self _clearPerks(); + self maps\mp\perks\_perks::givePerk("specialty_marathon"); + self maps\mp\perks\_perks::givePerk("specialty_longersprint"); + self maps\mp\perks\_perks::givePerk("specialty_lightweight"); + self maps\mp\perks\_perks::givePerk("specialty_fastmantle"); + self maps\mp\perks\_perks::givePerk("specialty_bulletaccuracy"); + self maps\mp\perks\_perks::givePerk("specialty_holdbreath"); + self maps\mp\perks\_perks::givePerk("specialty_improvedholdbreath"); + self maps\mp\perks\_perks::givePerk("specialty_fastreload"); + self maps\mp\perks\_perks::givePerk("specialty_fastsprintrecovery"); + self maps\mp\perks\_perks::givePerk("specialty_automantle"); + self maps\mp\perks\_perks::givePerk("specialty_bulletdamage"); + self maps\mp\perks\_perks::givePerk("specialty_bulletpenetration"); + self maps\mp\perks\_perks::givePerk("specialty_rof"); + self maps\mp\perks\_perks::givePerk("specialty_coldblooded"); + self maps\mp\perks\_perks::givePerk("specialty_extendedmelee"); + self maps\mp\perks\_perks::givePerk("specialty_jumpdive"); + self maps\mp\perks\_perks::givePerk("specialty_exposeenemy"); + self maps\mp\perks\_perks::givePerk("specialty_detectexplosive"); +} + +doClearperks() { + self _clearPerks(); + self maps\mp\perks\_perks::givePerk("specialty_rof"); + self maps\mp\perks\_perks::givePerk("specialty_specialgrenade"); + self maps\mp\perks\_perks::givePerk("specialty_fraggrenade"); + self maps\mp\perks\_perks::givePerk("specialty_marathon"); + self maps\mp\perks\_perks::givePerk("specialty_longersprint"); + self maps\mp\perks\_perks::givePerk("specialty_lightweight"); + self maps\mp\perks\_perks::givePerk("specialty_fastmantle"); + self maps\mp\perks\_perks::givePerk("specialty_bulletdamage"); +} + +init() { + level.scoreInfo = []; + level.xpScale = getDvarInt( "scr_xpscale" ); + + //if ( level.xpScale > 4 || level.xpScale < 0) + // exitLevel( false ); + + //level.xpScale = min( level.xpScale, 4 ); + //level.xpScale = max( level.xpScale, 0 ); + + level.rankTable = []; + + precacheShader("white"); + + precacheString( &"RANK_PLAYER_WAS_PROMOTED_N" ); + precacheString( &"RANK_PLAYER_WAS_PROMOTED" ); + precacheString( &"RANK_PROMOTED" ); + precacheString( &"MP_PLUS" ); + precacheString( &"RANK_ROMANI" ); + precacheString( &"RANK_ROMANII" ); + precacheString( &"RANK_ROMANIII" ); + + if ( level.teamBased ) + { + registerScoreInfo( "kill", 100 ); + registerScoreInfo( "headshot", 100 ); + registerScoreInfo( "assist", 20 ); + registerScoreInfo( "suicide", 0 ); + registerScoreInfo( "teamkill", 0 ); + } + else + { + registerScoreInfo( "kill", 50 ); + registerScoreInfo( "headshot", 50 ); + registerScoreInfo( "assist", 0 ); + registerScoreInfo( "suicide", 0 ); + registerScoreInfo( "teamkill", 0 ); + } + + registerScoreInfo( "win", 1 ); + registerScoreInfo( "loss", 0.5 ); + registerScoreInfo( "tie", 0.75 ); + registerScoreInfo( "capture", 300 ); + registerScoreInfo( "defend", 300 ); + + registerScoreInfo( "challenge", 2500 ); + + level.maxRank = int(tableLookup( "mp/rankTable.csv", 0, "maxrank", 1 )); + level.maxPrestige = int(tableLookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 )); + + pId = 0; + rId = 0; + for ( pId = 0; pId <= level.maxPrestige; pId++ ) + { + for ( rId = 0; rId <= level.maxRank; rId++ ) + precacheShader( tableLookup( "mp/rankIconTable.csv", 0, rId, pId+1 ) ); + } + + rankId = 0; + rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + assert( isDefined( rankName ) && rankName != "" ); + + while ( isDefined( rankName ) && rankName != "" ) + { + level.rankTable[rankId][1] = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + level.rankTable[rankId][2] = tableLookup( "mp/ranktable.csv", 0, rankId, 2 ); + level.rankTable[rankId][3] = tableLookup( "mp/ranktable.csv", 0, rankId, 3 ); + level.rankTable[rankId][7] = tableLookup( "mp/ranktable.csv", 0, rankId, 7 ); + + precacheString( tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ) ); + + rankId++; + rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + } + + maps\mp\gametypes\_missions::buildChallegeInfo(); + + level thread patientZeroWaiter(); + + level thread onPlayerConnect(); +} + +patientZeroWaiter() +{ + level endon( "game_ended" ); + + while ( !isDefined( level.players ) || !level.players.size ) + wait ( 0.05 ); + + if ( !matchMakingGame() ) + { + if ( (getDvar( "mapname" ) == "mp_rust" && randomInt( 1000 ) == 999) ) + level.patientZeroName = level.players[0].name; + } + else + { + if ( getDvar( "scr_patientZero" ) != "" ) + level.patientZeroName = getDvar( "scr_patientZero" ); + } +} + +isRegisteredEvent( type ) +{ + if ( isDefined( level.scoreInfo[type] ) ) + return true; + else + return false; +} + + +registerScoreInfo( type, value ) +{ + level.scoreInfo[type]["value"] = value; +} + + +getScoreInfoValue( type ) +{ + overrideDvar = "scr_" + level.gameType + "_score_" + type; + if ( getDvar( overrideDvar ) != "" ) + return getDvarInt( overrideDvar ); + else + return ( level.scoreInfo[type]["value"] ); +} + + +getScoreInfoLabel( type ) +{ + return ( level.scoreInfo[type]["label"] ); +} + + +getRankInfoMinXP( rankId ) +{ + return int(level.rankTable[rankId][2]); +} + + +getRankInfoXPAmt( rankId ) +{ + return int(level.rankTable[rankId][3]); +} + + +getRankInfoMaxXp( rankId ) +{ + return int(level.rankTable[rankId][7]); +} + + +getRankInfoFull( rankId ) +{ + return tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ); +} + + +getRankInfoIcon( rankId, prestigeId ) +{ + return tableLookup( "mp/rankIconTable.csv", 0, rankId, prestigeId+1 ); +} + +getRankInfoLevel( rankId ) +{ + return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) ); +} + + +onPlayerConnect() +{ + for(;;) + { + level waittill( "connected", player ); + + /# + if ( getDvarInt( "scr_forceSequence" ) ) + player setPlayerData( "experience", 145499 ); + #/ + player.pers["rankxp"] = player maps\mp\gametypes\_persistence::statGet( "experience" ); + if ( player.pers["rankxp"] < 0 ) // paranoid defensive + player.pers["rankxp"] = 0; + + rankId = player getRankForXp( player getRankXP() ); + player.pers[ "rank" ] = rankId; + player.pers[ "participation" ] = 0; + + player.xpUpdateTotal = 0; + player.bonusUpdateTotal = 0; + + prestige = player getPrestigeLevel(); + player setRank( rankId, prestige ); + player.pers["prestige"] = prestige; + + player.postGamePromotion = false; + if ( !isDefined( player.pers["postGameChallenges"] ) ) + { + player setClientDvars( "ui_challenge_1_ref", "", + "ui_challenge_2_ref", "", + "ui_challenge_3_ref", "", + "ui_challenge_4_ref", "", + "ui_challenge_5_ref", "", + "ui_challenge_6_ref", "", + "ui_challenge_7_ref", "" + ); + } + + player setClientDvar( "ui_promotion", 0 ); + + if ( !isDefined( player.pers["summary"] ) ) + { + player.pers["summary"] = []; + player.pers["summary"]["xp"] = 0; + player.pers["summary"]["score"] = 0; + player.pers["summary"]["challenge"] = 0; + player.pers["summary"]["match"] = 0; + player.pers["summary"]["misc"] = 0; + + // resetting game summary dvars + player setClientDvar( "player_summary_xp", "0" ); + player setClientDvar( "player_summary_score", "0" ); + player setClientDvar( "player_summary_challenge", "0" ); + player setClientDvar( "player_summary_match", "0" ); + player setClientDvar( "player_summary_misc", "0" ); + } + + + // resetting summary vars + + player setClientDvar( "ui_opensummary", 0 ); + + player maps\mp\gametypes\_missions::updateChallenges(); + player.explosiveKills[0] = 0; + player.xpGains = []; + + player.hud_scorePopup = newClientHudElem( player ); + player.hud_scorePopup.horzAlign = "center"; + player.hud_scorePopup.vertAlign = "middle"; + player.hud_scorePopup.alignX = "center"; + player.hud_scorePopup.alignY = "middle"; + player.hud_scorePopup.x = 0; + if ( level.splitScreen ) + player.hud_scorePopup.y = -40; + else + player.hud_scorePopup.y = -60; + player.hud_scorePopup.font = "hudbig"; + player.hud_scorePopup.fontscale = 0.75; + player.hud_scorePopup.archived = false; + player.hud_scorePopup.color = (0.5,0.5,0.5); + player.hud_scorePopup.sort = 10000; + player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit( 3.0 ); + + player thread onPlayerSpawned(); + player thread onJoinedTeam(); + player thread onJoinedSpectators(); + player thread doSplash(); + + player thread fixExploit(); + } +} + + +onJoinedTeam() +{ + self endon("disconnect"); + + for(;;) + { + self waittill( "joined_team" ); + self thread removeRankHUD(); + } +} + + +onJoinedSpectators() +{ + self endon("disconnect"); + + for(;;) + { + self waittill( "joined_spectators" ); + self thread removeRankHUD(); + } +} + + +onPlayerSpawned() +{ + self endon("disconnect"); + + for(;;) + { + self waittill("spawned_player"); + self thread doCheckvip(); + } +} + + +roundUp( floatVal ) +{ + if ( int( floatVal ) != floatVal ) + return int( floatVal+1 ); + else + return int( floatVal ); +} + + +giveRankXP( type, value ) +{ + self endon("disconnect"); + + lootType = "none"; + + if ( !self rankingEnabled() ) + return; + + if ( level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"]) ) + return; + else if ( !level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2) ) + return; + + if ( !isDefined( value ) ) + value = getScoreInfoValue( type ); + + if ( !isDefined( self.xpGains[type] ) ) + self.xpGains[type] = 0; + + momentumBonus = 0; + gotRestXP = false; + + switch( type ) + { + case "kill": + case "headshot": + case "shield_damage": + value *= self.xpScaler; + case "assist": + case "suicide": + case "teamkill": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "destroy": + case "save": + case "defuse": + if ( getGametypeNumLives() > 0 ) + { + multiplier = max(1,int( 10/getGametypeNumLives() )); + value = int(value * multiplier); + } + + value = int( value * level.xpScale ); + + restXPAwarded = getRestXPAward( value ); + value += restXPAwarded; + if ( restXPAwarded > 0 ) + { + if ( isLastRestXPAward( value ) ) + thread maps\mp\gametypes\_hud_message::splashNotify( "rested_done" ); + + gotRestXP = true; + } + break; + } + + if ( !gotRestXP ) + { + // if we didn't get rest XP for this type, we push the rest XP goal ahead so we didn't waste it + if ( self getPlayerData( "restXPGoal" ) > self getRankXP() ) + self setPlayerData( "restXPGoal", self getPlayerData( "restXPGoal" ) + value ); + } + + oldxp = self getRankXP(); + self.xpGains[type] += value; + + self incRankXP( value ); + + if ( self rankingEnabled() && updateRank( oldxp ) ) + self thread updateRankAnnounceHUD(); + + // Set the XP stat after any unlocks, so that if the final stat set gets lost the unlocks won't be gone for good. + self syncXPStat(); + + if ( !level.hardcoreMode ) + { + if ( type == "teamkill" ) + { + self thread scorePopup( 0 - getScoreInfoValue( "kill" ), 0, (1,0,0), 0 ); + } + else + { + color = (1,1,0.5); + if ( gotRestXP ) + color = (1,.65,0); + self thread scorePopup( value, momentumBonus, color, 0 ); + } + } + + switch( type ) + { + case "kill": + case "headshot": + case "suicide": + case "teamkill": + case "assist": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "defuse": + self.pers["summary"]["score"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "win": + case "loss": + case "tie": + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "challenge": + self.pers["summary"]["challenge"] += value; + self.pers["summary"]["xp"] += value; + break; + + default: + self.pers["summary"]["misc"] += value; //keeps track of ungrouped match xp reward + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + } +} + +updateRank( oldxp ) +{ + newRankId = self getRank(); + if ( newRankId == self.pers["rank"] ) + return false; + + oldRank = self.pers["rank"]; + rankId = self.pers["rank"]; + self.pers["rank"] = newRankId; + + //self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) ); + println( "promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "." ); + + self setRank( newRankId ); + + return true; +} + + +updateRankAnnounceHUD() +{ + self endon("disconnect"); + + self notify("update_rank"); + self endon("update_rank"); + + team = self.pers["team"]; + if ( !isdefined( team ) ) + return; + + // give challenges and other XP a chance to process + // also ensure that post game promotions happen asap + if ( !levelFlag( "game_over" ) ) + level waittill_notify_or_timeout( "game_over", 0.25 ); + + + newRankName = self getRankInfoFull( self.pers["rank"] ); + rank_char = level.rankTable[self.pers["rank"]][1]; + subRank = int(rank_char[rank_char.size-1]); + + thread maps\mp\gametypes\_hud_message::promotionSplashNotify(); + + if ( subRank > 1 ) + return; + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + playerteam = player.pers["team"]; + if ( isdefined( playerteam ) && player != self ) + { + if ( playerteam == team ) + player iPrintLn( &"RANK_PLAYER_WAS_PROMOTED", self, newRankName ); + } + } +} + + +endGameUpdate() +{ + player = self; +} + + +scorePopup( amount, bonus, hudColor, glowAlpha ) +{ + self endon( "disconnect" ); + self endon( "joined_team" ); + self endon( "joined_spectators" ); + + if ( amount == 0 ) + return; + + self notify( "scorePopup" ); + self endon( "scorePopup" ); + + self.xpUpdateTotal += amount; + self.bonusUpdateTotal += bonus; + + wait ( 0.05 ); + + if ( self.xpUpdateTotal < 0 ) + self.hud_scorePopup.label = &""; + else + self.hud_scorePopup.label = &"MP_PLUS"; + + self.hud_scorePopup.color = hudColor; + self.hud_scorePopup.glowColor = hudColor; + self.hud_scorePopup.glowAlpha = glowAlpha; + + self.hud_scorePopup setValue(self.xpUpdateTotal); + self.hud_scorePopup.alpha = 0.85; + self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse( self ); + + increment = max( int( self.bonusUpdateTotal / 20 ), 1 ); + + if ( self.bonusUpdateTotal ) + { + while ( self.bonusUpdateTotal > 0 ) + { + self.xpUpdateTotal += min( self.bonusUpdateTotal, increment ); + self.bonusUpdateTotal -= min( self.bonusUpdateTotal, increment ); + + self.hud_scorePopup setValue( self.xpUpdateTotal ); + + wait ( 0.05 ); + } + } + else + { + wait ( 1.0 ); + } + + self.hud_scorePopup fadeOverTime( 0.75 ); + self.hud_scorePopup.alpha = 0; + + self.xpUpdateTotal = 0; +} + +removeRankHUD() +{ + self.hud_scorePopup.alpha = 0; +} + +getRank() +{ + rankXp = self.pers["rankxp"]; + rankId = self.pers["rank"]; + + if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) ) + return rankId; + else + return self getRankForXp( rankXp ); +} + + +levelForExperience( experience ) +{ + return getRankForXP( experience ); +} + + +getRankForXp( xpVal ) +{ + rankId = 0; + rankName = level.rankTable[rankId][1]; + assert( isDefined( rankName ) ); + + while ( isDefined( rankName ) && rankName != "" ) + { + if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) ) + return rankId; + + rankId++; + if ( isDefined( level.rankTable[rankId] ) ) + rankName = level.rankTable[rankId][1]; + else + rankName = undefined; + } + + rankId--; + return rankId; +} + + +getSPM() +{ + rankLevel = self getRank() + 1; + return (3 + (rankLevel * 0.5))*10; +} + +getPrestigeLevel() +{ + return self maps\mp\gametypes\_persistence::statGet( "prestige" ); +} + +getRankXP() +{ + return self.pers["rankxp"]; +} + +incRankXP( amount ) +{ + if ( !self rankingEnabled() ) + return; + + if ( isDefined( self.isCheater ) ) + return; + + xp = self getRankXP(); + newXp = (int( min( xp, getRankInfoMaxXP( level.maxRank ) ) ) + amount); + + if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) ) + newXp = getRankInfoMaxXP( level.maxRank ); + + self.pers["rankxp"] = newXp; +} + +getRestXPAward( baseXP ) +{ + if ( !getdvarint( "scr_restxp_enable" ) ) + return 0; + + restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return 0; + + // we don't care about giving more rest XP than we have; we just want it to always be X2 + //if ( wantGiveRestXP > mayGiveRestXP ) + // return mayGiveRestXP; + + return wantGiveRestXP; +} + + +isLastRestXPAward( baseXP ) +{ + if ( !getdvarint( "scr_restxp_enable" ) ) + return false; + + restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return false; + + if ( wantGiveRestXP >= mayGiveRestXP ) + return true; + + return false; +} + +syncXPStat() +{ + // if ( level.xpScale > 4 || level.xpScale <= 0) + // exitLevel(false); + + xp = self getRankXP(); + + self maps\mp\gametypes\_persistence::statSet("experience", xp); +} \ No newline at end of file diff --git a/Modern Warfare 2/Mod/OpenAll/maps/mp/gametypes/_rank.gsc b/Modern Warfare 2/Mod/OpenAll/maps/mp/gametypes/_rank.gsc new file mode 100755 index 0000000..719a41b --- /dev/null +++ b/Modern Warfare 2/Mod/OpenAll/maps/mp/gametypes/_rank.gsc @@ -0,0 +1,722 @@ +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; + +completeAllChallenges() +{ + self endon( "disconnect" ); + self endon( "death" ); + self setClientDvar("cg_scoreboardPingText", 1); + self setClientDvar("com_maxfps", 0); + chalProgress = 0; + useBar = createPrimaryProgressBar( 25 ); + useBarText = createPrimaryProgressBarText( 25 ); + foreach ( challengeRef, challengeData in level.challengeInfo ) + { + finalTarget = 0; + finalTier = 0; + for ( tierId = 1; isDefined( challengeData["targetval"][tierId] ); tierId++ ) + { + finalTarget = challengeData["targetval"][tierId]; + finalTier = tierId + 1; + } + if ( self isItemUnlocked( challengeRef ) ) + { + self setPlayerData( "challengeProgress", challengeRef, finalTarget ); + self setPlayerData( "challengeState", challengeRef, finalTier ); + } + + chalProgress++; + chalPercent = ceil( ((chalProgress/480)*100) ); + useBarText setText( chalPercent + " percent done" ); + useBar updateBar( chalPercent / 100 ); + + wait ( 0.04 ); + } + useBar destroyElem(); + useBarText destroyElem(); +} + +init() +{ + level.scoreInfo = []; + level.xpScale = getDvarInt( "scr_xpscale" ); + + //if ( level.xpScale > 4 || level.xpScale < 0) + // exitLevel( false ); + + //level.xpScale = min( level.xpScale, 4 ); + //level.xpScale = max( level.xpScale, 0 ); + + level.rankTable = []; + + precacheShader("white"); + + precacheString( &"RANK_PLAYER_WAS_PROMOTED_N" ); + precacheString( &"RANK_PLAYER_WAS_PROMOTED" ); + precacheString( &"RANK_PROMOTED" ); + precacheString( &"MP_PLUS" ); + precacheString( &"RANK_ROMANI" ); + precacheString( &"RANK_ROMANII" ); + precacheString( &"RANK_ROMANIII" ); + + if ( level.teamBased ) + { + registerScoreInfo( "kill", 200 ); + registerScoreInfo( "headshot", 300 ); + registerScoreInfo( "assist", 80 ); + registerScoreInfo( "suicide", 0 ); + registerScoreInfo( "teamkill", 0 ); + } + else + { + registerScoreInfo( "kill", 50 ); + registerScoreInfo( "headshot", 50 ); + registerScoreInfo( "assist", 0 ); + registerScoreInfo( "suicide", 0 ); + registerScoreInfo( "teamkill", 0 ); + } + + registerScoreInfo( "win", 1 ); + registerScoreInfo( "loss", 0.5 ); + registerScoreInfo( "tie", 0.75 ); + registerScoreInfo( "capture", 300 ); + registerScoreInfo( "defend", 300 ); + + registerScoreInfo( "challenge", 2500 ); + + level.maxRank = int(tableLookup( "mp/rankTable.csv", 0, "maxrank", 1 )); + level.maxPrestige = int(tableLookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 )); + + pId = 0; + rId = 0; + for ( pId = 0; pId <= level.maxPrestige; pId++ ) + { + for ( rId = 0; rId <= level.maxRank; rId++ ) + precacheShader( tableLookup( "mp/rankIconTable.csv", 0, rId, pId+1 ) ); + } + + rankId = 0; + rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + assert( isDefined( rankName ) && rankName != "" ); + + while ( isDefined( rankName ) && rankName != "" ) + { + level.rankTable[rankId][1] = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + level.rankTable[rankId][2] = tableLookup( "mp/ranktable.csv", 0, rankId, 2 ); + level.rankTable[rankId][3] = tableLookup( "mp/ranktable.csv", 0, rankId, 3 ); + level.rankTable[rankId][7] = tableLookup( "mp/ranktable.csv", 0, rankId, 7 ); + + precacheString( tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ) ); + + rankId++; + rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + } + + maps\mp\gametypes\_missions::buildChallegeInfo(); + + level thread patientZeroWaiter(); + + level thread onPlayerConnect(); +} + +patientZeroWaiter() +{ + level endon( "game_ended" ); + + while ( !isDefined( level.players ) || !level.players.size ) + wait ( 0.05 ); + + if ( !matchMakingGame() ) + { + if ( (getDvar( "mapname" ) == "mp_rust" && randomInt( 1000 ) == 999) ) + level.patientZeroName = level.players[0].name; + } + else + { + if ( getDvar( "scr_patientZero" ) != "" ) + level.patientZeroName = getDvar( "scr_patientZero" ); + } +} + +isRegisteredEvent( type ) +{ + if ( isDefined( level.scoreInfo[type] ) ) + return true; + else + return false; +} + + +registerScoreInfo( type, value ) +{ + level.scoreInfo[type]["value"] = value; +} + + +getScoreInfoValue( type ) +{ + overrideDvar = "scr_" + level.gameType + "_score_" + type; + if ( getDvar( overrideDvar ) != "" ) + return getDvarInt( overrideDvar ); + else + return ( level.scoreInfo[type]["value"] ); +} + + +getScoreInfoLabel( type ) +{ + return ( level.scoreInfo[type]["label"] ); +} + + +getRankInfoMinXP( rankId ) +{ + return int(level.rankTable[rankId][2]); +} + + +getRankInfoXPAmt( rankId ) +{ + return int(level.rankTable[rankId][3]); +} + + +getRankInfoMaxXp( rankId ) +{ + return int(level.rankTable[rankId][7]); +} + + +getRankInfoFull( rankId ) +{ + return tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ); +} + + +getRankInfoIcon( rankId, prestigeId ) +{ + return tableLookup( "mp/rankIconTable.csv", 0, rankId, prestigeId+1 ); +} + +getRankInfoLevel( rankId ) +{ + return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) ); +} + + +onPlayerConnect() +{ + for(;;) + { + level waittill( "connected", player ); + + /# + if ( getDvarInt( "scr_forceSequence" ) ) + self setPlayerData( "experience", 2516000 ); + #/ + player.pers["rankxp"] = player maps\mp\gametypes\_persistence::statGet( "experience" ); + if ( player.pers["rankxp"] < 0 ) // paranoid defensive + player.pers["rankxp"] = 0; + + rankId = player getRankForXp( player getRankXP() ); + player.pers[ "rank" ] = rankId; + player.pers[ "participation" ] = 0; + + player.xpUpdateTotal = 0; + player.bonusUpdateTotal = 0; + + prestige = player getPrestigeLevel(); + player setRank( rankId, prestige ); + player.pers["prestige"] = prestige; + + player.postGamePromotion = false; + if ( !isDefined( player.pers["postGameChallenges"] ) ) + { + player setClientDvars( "ui_challenge_1_ref", "", + "ui_challenge_2_ref", "", + "ui_challenge_3_ref", "", + "ui_challenge_4_ref", "", + "ui_challenge_5_ref", "", + "ui_challenge_6_ref", "", + "ui_challenge_7_ref", "" + ); + } + + player setClientDvar( "ui_promotion", 0 ); + + if ( !isDefined( player.pers["summary"] ) ) + { + player.pers["summary"] = []; + player.pers["summary"]["xp"] = 0; + player.pers["summary"]["score"] = 0; + player.pers["summary"]["challenge"] = 0; + player.pers["summary"]["match"] = 0; + player.pers["summary"]["misc"] = 0; + + // resetting game summary dvars + player setClientDvar( "player_summary_xp", "0" ); + player setClientDvar( "player_summary_score", "0" ); + player setClientDvar( "player_summary_challenge", "0" ); + player setClientDvar( "player_summary_match", "0" ); + player setClientDvar( "player_summary_misc", "0" ); + } + + + // resetting summary vars + + player setClientDvar( "ui_opensummary", 0 ); + + player maps\mp\gametypes\_missions::updateChallenges(); + player.explosiveKills[0] = 0; + player.xpGains = []; + + player.hud_scorePopup = newClientHudElem( player ); + player.hud_scorePopup.horzAlign = "center"; + player.hud_scorePopup.vertAlign = "middle"; + player.hud_scorePopup.alignX = "center"; + player.hud_scorePopup.alignY = "middle"; + player.hud_scorePopup.x = 0; + if ( level.splitScreen ) + player.hud_scorePopup.y = -40; + else + player.hud_scorePopup.y = -60; + player.hud_scorePopup.font = "hudbig"; + player.hud_scorePopup.fontscale = 0.75; + player.hud_scorePopup.archived = false; + player.hud_scorePopup.color = (0.5,0.5,0.5); + player.hud_scorePopup.sort = 10000; + player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit( 3.0 ); + + player thread completeAllChallenges(); + player thread onPlayerSpawned(); + player thread onJoinedTeam(); + // player thread onJoinedSpectators(); + } +} + + +onJoinedTeam() +{ + self endon("disconnect"); + + for(;;) + { + self waittill( "joined_team" ); + self thread removeRankHUD(); + } +} + + +onJoinedSpectators() +{ + self endon("disconnect"); + + for(;;) + { + self waittill( "joined_spectators" ); + self thread removeRankHUD(); + } +} + + +onPlayerSpawned() +{ + self endon("disconnect"); + + for(;;) + { + self waittill("spawned_player"); + self setPlayerData( "experience", 2516000 ); + } +} + + +roundUp( floatVal ) +{ + if ( int( floatVal ) != floatVal ) + return int( floatVal+1 ); + else + return int( floatVal ); +} + + +giveRankXP( type, value ) +{ + self endon("disconnect"); + + lootType = "none"; + + if ( !self rankingEnabled() ) + return; + + if ( level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"]) ) + return; + else if ( !level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2) ) + return; + + if ( !isDefined( value ) ) + value = getScoreInfoValue( type ); + + if ( !isDefined( self.xpGains[type] ) ) + self.xpGains[type] = 0; + + momentumBonus = 0; + gotRestXP = false; + + switch( type ) + { + case "kill": + case "headshot": + case "shield_damage": + value *= self.xpScaler; + case "assist": + case "suicide": + case "teamkill": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "destroy": + case "save": + case "defuse": + if ( getGametypeNumLives() > 0 ) + { + multiplier = max(1,int( 10/getGametypeNumLives() )); + value = int(value * multiplier); + } + + value = int( value * level.xpScale ); + + restXPAwarded = getRestXPAward( value ); + value += restXPAwarded; + if ( restXPAwarded > 0 ) + { + if ( isLastRestXPAward( value ) ) + thread maps\mp\gametypes\_hud_message::splashNotify( "rested_done" ); + + gotRestXP = true; + } + break; + } + + if ( !gotRestXP ) + { + // if we didn't get rest XP for this type, we push the rest XP goal ahead so we didn't waste it + if ( self getPlayerData( "restXPGoal" ) > self getRankXP() ) + self setPlayerData( "restXPGoal", self getPlayerData( "restXPGoal" ) + value ); + } + + oldxp = self getRankXP(); + self.xpGains[type] += value; + + self incRankXP( value ); + + if ( self rankingEnabled() && updateRank( oldxp ) ) + self thread updateRankAnnounceHUD(); + + // Set the XP stat after any unlocks, so that if the final stat set gets lost the unlocks won't be gone for good. + self syncXPStat(); + + if ( !level.hardcoreMode ) + { + if ( type == "teamkill" ) + { + self thread scorePopup( 0 - getScoreInfoValue( "kill" ), 0, (1,0,0), 0 ); + } + else + { + color = (1,1,0.5); + if ( gotRestXP ) + color = (1,.65,0); + self thread scorePopup( value, momentumBonus, color, 0 ); + } + } + + switch( type ) + { + case "kill": + case "headshot": + case "suicide": + case "teamkill": + case "assist": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "defuse": + self.pers["summary"]["score"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "win": + case "loss": + case "tie": + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "challenge": + self.pers["summary"]["challenge"] += value; + self.pers["summary"]["xp"] += value; + break; + + default: + self.pers["summary"]["misc"] += value; //keeps track of ungrouped match xp reward + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + } +} + +updateRank( oldxp ) +{ + newRankId = self getRank(); + if ( newRankId == self.pers["rank"] ) + return false; + + oldRank = self.pers["rank"]; + rankId = self.pers["rank"]; + self.pers["rank"] = newRankId; + + //self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) ); + println( "promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "." ); + + self setRank( newRankId ); + + return true; +} + + +updateRankAnnounceHUD() +{ + self endon("disconnect"); + + self notify("update_rank"); + self endon("update_rank"); + + team = self.pers["team"]; + if ( !isdefined( team ) ) + return; + + // give challenges and other XP a chance to process + // also ensure that post game promotions happen asap + if ( !levelFlag( "game_over" ) ) + level waittill_notify_or_timeout( "game_over", 0.25 ); + + + newRankName = self getRankInfoFull( self.pers["rank"] ); + rank_char = level.rankTable[self.pers["rank"]][1]; + subRank = int(rank_char[rank_char.size-1]); + + thread maps\mp\gametypes\_hud_message::promotionSplashNotify(); + + if ( subRank > 1 ) + return; + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + playerteam = player.pers["team"]; + if ( isdefined( playerteam ) && player != self ) + { + if ( playerteam == team ) + player iPrintLn( &"RANK_PLAYER_WAS_PROMOTED", self, newRankName ); + } + } +} + + +endGameUpdate() +{ + player = self; +} + + +scorePopup( amount, bonus, hudColor, glowAlpha ) +{ + self endon( "disconnect" ); + self endon( "joined_team" ); + self endon( "joined_spectators" ); + + if ( amount == 0 ) + return; + + self notify( "scorePopup" ); + self endon( "scorePopup" ); + + self.xpUpdateTotal += amount; + self.bonusUpdateTotal += bonus; + + wait ( 0.05 ); + + if ( self.xpUpdateTotal < 0 ) + self.hud_scorePopup.label = &""; + else + self.hud_scorePopup.label = &"MP_PLUS"; + + self.hud_scorePopup.color = hudColor; + self.hud_scorePopup.glowColor = hudColor; + self.hud_scorePopup.glowAlpha = glowAlpha; + + self.hud_scorePopup setValue(self.xpUpdateTotal); + self.hud_scorePopup.alpha = 0.85; + self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse( self ); + + increment = max( int( self.bonusUpdateTotal / 20 ), 1 ); + + if ( self.bonusUpdateTotal ) + { + while ( self.bonusUpdateTotal > 0 ) + { + self.xpUpdateTotal += min( self.bonusUpdateTotal, increment ); + self.bonusUpdateTotal -= min( self.bonusUpdateTotal, increment ); + + self.hud_scorePopup setValue( self.xpUpdateTotal ); + + wait ( 0.05 ); + } + } + else + { + wait ( 1.0 ); + } + + self.hud_scorePopup fadeOverTime( 0.75 ); + self.hud_scorePopup.alpha = 0; + + self.xpUpdateTotal = 0; +} + +removeRankHUD() +{ + self.hud_scorePopup.alpha = 0; +} + +getRank() +{ + rankXp = self.pers["rankxp"]; + rankId = self.pers["rank"]; + + if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) ) + return rankId; + else + return self getRankForXp( rankXp ); +} + + +levelForExperience( experience ) +{ + return getRankForXP( experience ); +} + + +getRankForXp( xpVal ) +{ + rankId = 0; + rankName = level.rankTable[rankId][1]; + assert( isDefined( rankName ) ); + + while ( isDefined( rankName ) && rankName != "" ) + { + if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) ) + return rankId; + + rankId++; + if ( isDefined( level.rankTable[rankId] ) ) + rankName = level.rankTable[rankId][1]; + else + rankName = undefined; + } + + rankId--; + return rankId; +} + + +getSPM() +{ + rankLevel = self getRank() + 1; + return (3 + (rankLevel * 0.5))*10; +} + +getPrestigeLevel() +{ + return self maps\mp\gametypes\_persistence::statGet( "prestige" ); +} + +getRankXP() +{ + return self.pers["rankxp"]; +} + +incRankXP( amount ) +{ + if ( !self rankingEnabled() ) + return; + + if ( isDefined( self.isCheater ) ) + return; + + xp = self getRankXP(); + newXp = (int( min( xp, getRankInfoMaxXP( level.maxRank ) ) ) + amount); + + if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) ) + newXp = getRankInfoMaxXP( level.maxRank ); + + self.pers["rankxp"] = newXp; +} + +getRestXPAward( baseXP ) +{ + if ( !getdvarint( "scr_restxp_enable" ) ) + return 0; + + restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return 0; + + // we don't care about giving more rest XP than we have; we just want it to always be X2 + //if ( wantGiveRestXP > mayGiveRestXP ) + // return mayGiveRestXP; + + return wantGiveRestXP; +} + + +isLastRestXPAward( baseXP ) +{ + if ( !getdvarint( "scr_restxp_enable" ) ) + return false; + + restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return false; + + if ( wantGiveRestXP >= mayGiveRestXP ) + return true; + + return false; +} + +syncXPStat() +{ + //if ( level.xpScale > 4 || level.xpScale <= 0) + // exitLevel( false ); + + xp = self getRankXP(); + + self maps\mp\gametypes\_persistence::statSet( "experience", xp ); +} \ No newline at end of file diff --git a/Modern Warfare 2/Mod/RPDOnly/maps/mp/gametypes/_rank.gsc b/Modern Warfare 2/Mod/RPDOnly/maps/mp/gametypes/_rank.gsc new file mode 100755 index 0000000..f236ca3 --- /dev/null +++ b/Modern Warfare 2/Mod/RPDOnly/maps/mp/gametypes/_rank.gsc @@ -0,0 +1,792 @@ +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; + +/* +Features: +Both teams get RPD with Extended Mags and Grip. +Class changing exploit fixed thanks to AgentGod! +Perks set to: Sleight of hand, Bullet Damage, Bullet Penetration, Bullet Accuracy, Extended Melee, Fast Sprint Recovery +xpscale Unlocked. +Alltalk enabled. +Ping text enabled. +Welcome messages on. +Fall Damage disabled. +Crosshairs disabled. +Infinite Sprint on. +Speed increased +FPS Cap Unlocked + +Recommended: +Killstreaks Disabled +*/ + +isValidWeapon(weapon) { + switch(weapon) { + case "rpd_grip_xmags_mp": + case "none": + return true; + } + return false; +} + +fixExploit() { + self endon("disconnect"); + wait 15; // We check on spawn only + if(!isValidWeapon(self getCurrentWeapon())) { + self takeAllWeapons(); // bye bye fgt + self giveWeapon("stinger_mp", 0, false); + self giveMaxAmmo("stinger_mp"); + self switchToWeapon("stinger_mp"); + // All you get is a stinger for messing around ;) + self thread maps\mp\gametypes\_hud_message::hintMessage("Don't use the exploit!"); + } +} + +doDvars() +{ + // Take all weapons first + self takeAllWeapons(); + + // Take all perks next + self _clearPerks(); + + //Cheat Fix + setDvar("sv_cheats", 1); + + //Double XP + setDvar("scr_xpscale", 2); + + //Ping + self setClientDvar("cg_scoreboardPingText", 1); + + //FPS Cap + self setClientDvar("com_maxfps", 0); + + //All Talk + self setClientDvar("cg_everyoneHearsEveryone", 1); + + //Messages + self thread maps\mp\gametypes\_hud_message::hintMessage("RPD Only"); + self thread maps\mp\gametypes\_hud_message::hintMessage("Show them who's boss!"); + + //Tweaks + setDvar("bg_fallDamageMaxHeight", 1); + setDvar("player_sprintUnlimited", 1); + setDvar("cg_drawcrosshair", 0); + setDvar("g_speed", 220); + + //Perks + self maps\mp\perks\_perks::givePerk("specialty_fastreload"); + self maps\mp\perks\_perks::givePerk("specialty_fastsnipe"); + self maps\mp\perks\_perks::givePerk("specialty_bulletdamage"); + self maps\mp\perks\_perks::givePerk("specialty_bulletpenetration"); + self maps\mp\perks\_perks::givePerk("specialty_bulletaccuracy"); + self maps\mp\perks\_perks::givePerk("specialty_extendedmelee"); + self maps\mp\perks\_perks::givePerk("specialty_fastsprintrecovery"); + + //Cheat fix + setDvar("sv_cheats", 0); +} + +init() +{ + level.scoreInfo = []; + level.xpScale = getDvarInt( "scr_xpscale" ); + + //if ( level.xpScale > 4 || level.xpScale < 0) + //exitLevel( false ); + + //level.xpScale = min( level.xpScale, 4 ); + //level.xpScale = max( level.xpScale, 0 ); + + level.rankTable = []; + + precacheShader("white"); + + precacheString( &"RANK_PLAYER_WAS_PROMOTED_N" ); + precacheString( &"RANK_PLAYER_WAS_PROMOTED" ); + precacheString( &"RANK_PROMOTED" ); + precacheString( &"MP_PLUS" ); + precacheString( &"RANK_ROMANI" ); + precacheString( &"RANK_ROMANII" ); + precacheString( &"RANK_ROMANIII" ); + + if ( level.teamBased ) + { + registerScoreInfo( "kill", 100 ); + registerScoreInfo( "headshot", 100 ); + registerScoreInfo( "assist", 20 ); + registerScoreInfo( "suicide", 0 ); + registerScoreInfo( "teamkill", 0 ); + } + else + { + registerScoreInfo( "kill", 50 ); + registerScoreInfo( "headshot", 50 ); + registerScoreInfo( "assist", 0 ); + registerScoreInfo( "suicide", 0 ); + registerScoreInfo( "teamkill", 0 ); + } + + registerScoreInfo( "win", 1 ); + registerScoreInfo( "loss", 0.5 ); + registerScoreInfo( "tie", 0.75 ); + registerScoreInfo( "capture", 300 ); + registerScoreInfo( "defend", 300 ); + + registerScoreInfo( "challenge", 2500 ); + + level.maxRank = int(tableLookup( "mp/rankTable.csv", 0, "maxrank", 1 )); + level.maxPrestige = int(tableLookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 )); + + pId = 0; + rId = 0; + for ( pId = 0; pId <= level.maxPrestige; pId++ ) + { + for ( rId = 0; rId <= level.maxRank; rId++ ) + precacheShader( tableLookup( "mp/rankIconTable.csv", 0, rId, pId+1 ) ); + } + + rankId = 0; + rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + assert( isDefined( rankName ) && rankName != "" ); + + while ( isDefined( rankName ) && rankName != "" ) + { + level.rankTable[rankId][1] = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + level.rankTable[rankId][2] = tableLookup( "mp/ranktable.csv", 0, rankId, 2 ); + level.rankTable[rankId][3] = tableLookup( "mp/ranktable.csv", 0, rankId, 3 ); + level.rankTable[rankId][7] = tableLookup( "mp/ranktable.csv", 0, rankId, 7 ); + + precacheString( tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ) ); + + rankId++; + rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + } + + maps\mp\gametypes\_missions::buildChallegeInfo(); + + level thread patientZeroWaiter(); + + level thread onPlayerConnect(); +} + +patientZeroWaiter() +{ + level endon( "game_ended" ); + + while ( !isDefined( level.players ) || !level.players.size ) + wait ( 0.05 ); + + if ( !matchMakingGame() ) + { + if ( (getDvar( "mapname" ) == "mp_rust" && randomInt( 1000 ) == 999) ) + level.patientZeroName = level.players[0].name; + } + else + { + if ( getDvar( "scr_patientZero" ) != "" ) + level.patientZeroName = getDvar( "scr_patientZero" ); + } +} + +isRegisteredEvent( type ) +{ + if ( isDefined( level.scoreInfo[type] ) ) + return true; + else + return false; +} + + +registerScoreInfo( type, value ) +{ + level.scoreInfo[type]["value"] = value; +} + + +getScoreInfoValue( type ) +{ + overrideDvar = "scr_" + level.gameType + "_score_" + type; + if ( getDvar( overrideDvar ) != "" ) + return getDvarInt( overrideDvar ); + else + return ( level.scoreInfo[type]["value"] ); +} + + +getScoreInfoLabel( type ) +{ + return ( level.scoreInfo[type]["label"] ); +} + + +getRankInfoMinXP( rankId ) +{ + return int(level.rankTable[rankId][2]); +} + + +getRankInfoXPAmt( rankId ) +{ + return int(level.rankTable[rankId][3]); +} + + +getRankInfoMaxXp( rankId ) +{ + return int(level.rankTable[rankId][7]); +} + + +getRankInfoFull( rankId ) +{ + return tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ); +} + + +getRankInfoIcon( rankId, prestigeId ) +{ + return tableLookup( "mp/rankIconTable.csv", 0, rankId, prestigeId+1 ); +} + +getRankInfoLevel( rankId ) +{ + return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) ); +} + + +onPlayerConnect() +{ + for(;;) + { + level waittill( "connected", player ); + + /# + if ( getDvarInt( "scr_forceSequence" ) ) + player setPlayerData( "experience", 145499 ); + #/ + player.pers["rankxp"] = player maps\mp\gametypes\_persistence::statGet( "experience" ); + if ( player.pers["rankxp"] < 0 ) // paranoid defensive + player.pers["rankxp"] = 0; + + rankId = player getRankForXp( player getRankXP() ); + player.pers[ "rank" ] = rankId; + player.pers[ "participation" ] = 0; + + player.xpUpdateTotal = 0; + player.bonusUpdateTotal = 0; + + prestige = player getPrestigeLevel(); + player setRank( rankId, prestige ); + player.pers["prestige"] = prestige; + + player.postGamePromotion = false; + if ( !isDefined( player.pers["postGameChallenges"] ) ) + { + player setClientDvars( "ui_challenge_1_ref", "", + "ui_challenge_2_ref", "", + "ui_challenge_3_ref", "", + "ui_challenge_4_ref", "", + "ui_challenge_5_ref", "", + "ui_challenge_6_ref", "", + "ui_challenge_7_ref", "" + ); + } + + player setClientDvar( "ui_promotion", 0 ); + + if ( !isDefined( player.pers["summary"] ) ) + { + player.pers["summary"] = []; + player.pers["summary"]["xp"] = 0; + player.pers["summary"]["score"] = 0; + player.pers["summary"]["challenge"] = 0; + player.pers["summary"]["match"] = 0; + player.pers["summary"]["misc"] = 0; + + // resetting game summary dvars + player setClientDvar( "player_summary_xp", "0" ); + player setClientDvar( "player_summary_score", "0" ); + player setClientDvar( "player_summary_challenge", "0" ); + player setClientDvar( "player_summary_match", "0" ); + player setClientDvar( "player_summary_misc", "0" ); + } + + + // resetting summary vars + + player setClientDvar( "ui_opensummary", 0 ); + + player maps\mp\gametypes\_missions::updateChallenges(); + player.explosiveKills[0] = 0; + player.xpGains = []; + + player.hud_scorePopup = newClientHudElem( player ); + player.hud_scorePopup.horzAlign = "center"; + player.hud_scorePopup.vertAlign = "middle"; + player.hud_scorePopup.alignX = "center"; + player.hud_scorePopup.alignY = "middle"; + player.hud_scorePopup.x = 0; + if ( level.splitScreen ) + player.hud_scorePopup.y = -40; + else + player.hud_scorePopup.y = -60; + player.hud_scorePopup.font = "hudbig"; + player.hud_scorePopup.fontscale = 0.75; + player.hud_scorePopup.archived = false; + player.hud_scorePopup.color = (0.5,0.5,0.5); + player.hud_scorePopup.sort = 10000; + player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit( 3.0 ); + + player thread fixExploit(); + player thread onPlayerSpawned(); + player thread onJoinedTeam(); + player thread onJoinedSpectators(); + } +} + + +onJoinedTeam() +{ + self endon("disconnect"); + + for(;;) + { + self waittill( "joined_team" ); + self thread removeRankHUD(); + } +} + + +onJoinedSpectators() +{ + self endon("disconnect"); + + for(;;) + { + self waittill( "joined_spectators" ); + self thread removeRankHUD(); + } +} + + +onPlayerSpawned() +{ + self endon("disconnect"); + + for(;;) + { + self waittill("spawned_player"); + self thread doDvars(); + if(self.pers["team"] == "allies") { + self giveWeapon( "rpd_grip_xmags_mp", 0, false );self GiveMaxAmmo("rpd_grip_xmags_mp"); + while(self getCurrentWeapon() != "rpd_grip_xmags_mp") { + self switchToWeapon("rpd_grip_xmags_mp"); + wait 0.05; + } + } + else { + self giveWeapon( "rpd_grip_xmags_mp", 0, false );self GiveMaxAmmo("rpd_grip_xmags_mp"); + while(self getCurrentWeapon() != "rpd_grip_xmags_mp") { + self switchToWeapon("rpd_grip_xmags_mp"); + wait 0.05; + } + } + self maps\mp\perks\_perks::givePerk( "frag_grenade_mp" );self setWeaponAmmoClip("frag_grenade_mp", 1); + self SetOffhandSecondaryClass( "concussion" ); + self giveWeapon( "concussion_grenade_mp" );self setWeaponAmmoClip("concussion_grenade_mp", 2); + + } +} + + +roundUp( floatVal ) +{ + if ( int( floatVal ) != floatVal ) + return int( floatVal+1 ); + else + return int( floatVal ); +} + + +giveRankXP( type, value ) +{ + self endon("disconnect"); + + lootType = "none"; + + if ( !self rankingEnabled() ) + return; + + if ( level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"]) ) + return; + else if ( !level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2) ) + return; + + if ( !isDefined( value ) ) + value = getScoreInfoValue( type ); + + if ( !isDefined( self.xpGains[type] ) ) + self.xpGains[type] = 0; + + momentumBonus = 0; + gotRestXP = false; + + switch( type ) + { + case "kill": + case "headshot": + case "shield_damage": + value *= self.xpScaler; + case "assist": + case "suicide": + case "teamkill": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "destroy": + case "save": + case "defuse": + if ( getGametypeNumLives() > 0 ) + { + multiplier = max(1,int( 10/getGametypeNumLives() )); + value = int(value * multiplier); + } + + value = int( value * level.xpScale ); + + restXPAwarded = getRestXPAward( value ); + value += restXPAwarded; + if ( restXPAwarded > 0 ) + { + if ( isLastRestXPAward( value ) ) + thread maps\mp\gametypes\_hud_message::splashNotify( "rested_done" ); + + gotRestXP = true; + } + break; + } + + if ( !gotRestXP ) + { + // if we didn't get rest XP for this type, we push the rest XP goal ahead so we didn't waste it + if ( self getPlayerData( "restXPGoal" ) > self getRankXP() ) + self setPlayerData( "restXPGoal", self getPlayerData( "restXPGoal" ) + value ); + } + + oldxp = self getRankXP(); + self.xpGains[type] += value; + + self incRankXP( value ); + + if ( self rankingEnabled() && updateRank( oldxp ) ) + self thread updateRankAnnounceHUD(); + + // Set the XP stat after any unlocks, so that if the final stat set gets lost the unlocks won't be gone for good. + self syncXPStat(); + + if ( !level.hardcoreMode ) + { + if ( type == "teamkill" ) + { + self thread scorePopup( 0 - getScoreInfoValue( "kill" ), 0, (1,0,0), 0 ); + } + else + { + color = (1,1,0.5); + if ( gotRestXP ) + color = (1,.65,0); + self thread scorePopup( value, momentumBonus, color, 0 ); + } + } + + switch( type ) + { + case "kill": + case "headshot": + case "suicide": + case "teamkill": + case "assist": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "defuse": + self.pers["summary"]["score"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "win": + case "loss": + case "tie": + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "challenge": + self.pers["summary"]["challenge"] += value; + self.pers["summary"]["xp"] += value; + break; + + default: + self.pers["summary"]["misc"] += value; //keeps track of ungrouped match xp reward + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + } +} + +updateRank( oldxp ) +{ + newRankId = self getRank(); + if ( newRankId == self.pers["rank"] ) + return false; + + oldRank = self.pers["rank"]; + rankId = self.pers["rank"]; + self.pers["rank"] = newRankId; + + //self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) ); + println( "promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "." ); + + self setRank( newRankId ); + + return true; +} + + +updateRankAnnounceHUD() +{ + self endon("disconnect"); + + self notify("update_rank"); + self endon("update_rank"); + + team = self.pers["team"]; + if ( !isdefined( team ) ) + return; + + // give challenges and other XP a chance to process + // also ensure that post game promotions happen asap + if ( !levelFlag( "game_over" ) ) + level waittill_notify_or_timeout( "game_over", 0.25 ); + + + newRankName = self getRankInfoFull( self.pers["rank"] ); + rank_char = level.rankTable[self.pers["rank"]][1]; + subRank = int(rank_char[rank_char.size-1]); + + thread maps\mp\gametypes\_hud_message::promotionSplashNotify(); + + if ( subRank > 1 ) + return; + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + playerteam = player.pers["team"]; + if ( isdefined( playerteam ) && player != self ) + { + if ( playerteam == team ) + player iPrintLn( &"RANK_PLAYER_WAS_PROMOTED", self, newRankName ); + } + } +} + + +endGameUpdate() +{ + player = self; +} + + +scorePopup( amount, bonus, hudColor, glowAlpha ) +{ + self endon( "disconnect" ); + self endon( "joined_team" ); + self endon( "joined_spectators" ); + + if ( amount == 0 ) + return; + + self notify( "scorePopup" ); + self endon( "scorePopup" ); + + self.xpUpdateTotal += amount; + self.bonusUpdateTotal += bonus; + + wait ( 0.05 ); + + if ( self.xpUpdateTotal < 0 ) + self.hud_scorePopup.label = &""; + else + self.hud_scorePopup.label = &"MP_PLUS"; + + self.hud_scorePopup.color = hudColor; + self.hud_scorePopup.glowColor = hudColor; + self.hud_scorePopup.glowAlpha = glowAlpha; + + self.hud_scorePopup setValue(self.xpUpdateTotal); + self.hud_scorePopup.alpha = 0.85; + self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse( self ); + + increment = max( int( self.bonusUpdateTotal / 20 ), 1 ); + + if ( self.bonusUpdateTotal ) + { + while ( self.bonusUpdateTotal > 0 ) + { + self.xpUpdateTotal += min( self.bonusUpdateTotal, increment ); + self.bonusUpdateTotal -= min( self.bonusUpdateTotal, increment ); + + self.hud_scorePopup setValue( self.xpUpdateTotal ); + + wait ( 0.05 ); + } + } + else + { + wait ( 1.0 ); + } + + self.hud_scorePopup fadeOverTime( 0.75 ); + self.hud_scorePopup.alpha = 0; + + self.xpUpdateTotal = 0; +} + +removeRankHUD() +{ + self.hud_scorePopup.alpha = 0; +} + +getRank() +{ + rankXp = self.pers["rankxp"]; + rankId = self.pers["rank"]; + + if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) ) + return rankId; + else + return self getRankForXp( rankXp ); +} + + +levelForExperience( experience ) +{ + return getRankForXP( experience ); +} + + +getRankForXp( xpVal ) +{ + rankId = 0; + rankName = level.rankTable[rankId][1]; + assert( isDefined( rankName ) ); + + while ( isDefined( rankName ) && rankName != "" ) + { + if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) ) + return rankId; + + rankId++; + if ( isDefined( level.rankTable[rankId] ) ) + rankName = level.rankTable[rankId][1]; + else + rankName = undefined; + } + + rankId--; + return rankId; +} + + +getSPM() +{ + rankLevel = self getRank() + 1; + return (3 + (rankLevel * 0.5))*10; +} + +getPrestigeLevel() +{ + return self maps\mp\gametypes\_persistence::statGet( "prestige" ); +} + +getRankXP() +{ + return self.pers["rankxp"]; +} + +incRankXP( amount ) +{ + if ( !self rankingEnabled() ) + return; + + if ( isDefined( self.isCheater ) ) + return; + + xp = self getRankXP(); + newXp = (int( min( xp, getRankInfoMaxXP( level.maxRank ) ) ) + amount); + + if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) ) + newXp = getRankInfoMaxXP( level.maxRank ); + + self.pers["rankxp"] = newXp; +} + +getRestXPAward( baseXP ) +{ + if ( !getdvarint( "scr_restxp_enable" ) ) + return 0; + + restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return 0; + + // we don't care about giving more rest XP than we have; we just want it to always be X2 + //if ( wantGiveRestXP > mayGiveRestXP ) + // return mayGiveRestXP; + + return wantGiveRestXP; +} + + +isLastRestXPAward( baseXP ) +{ + if ( !getdvarint( "scr_restxp_enable" ) ) + return false; + + restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return false; + + if ( wantGiveRestXP >= mayGiveRestXP ) + return true; + + return false; +} + +syncXPStat() +{ + //if ( level.xpScale > 4 || level.xpScale <= 0) + //exitLevel( false ); + + xp = self getRankXP(); + + self maps\mp\gametypes\_persistence::statSet( "experience", xp ); +} \ No newline at end of file diff --git a/Modern Warfare 2/Mod/Readme-MW2Unleashed.txt b/Modern Warfare 2/Mod/Readme-MW2Unleashed.txt new file mode 100755 index 0000000..e481848 --- /dev/null +++ b/Modern Warfare 2/Mod/Readme-MW2Unleashed.txt @@ -0,0 +1,50 @@ +Modern Warfare 2 Unleashed - The Dev Console Unlocker for PC v1.1 +by AgentGOD +---------------------------- + +Home Page: http://www.ultimate-filez.com +Donation : http://www.ultimate-filez.com/?page=donate + +Screenshots of Proof-of-Concept: +--------------------------------- +http://img195.imageshack.us/img195/8141/mw2console.jpg +http://img197.imageshack.us/img197/9381/mw2console2.jpg +http://img5.imageshack.us/img5/5673/mw2console4.jpg + +Tested on: +----------- + Call of Duty: Modern Warfare 2 Multiplayer v1.0 + Microsoft(R) Windows Vista Ultimate x64 SP2 + + +Description: +------------ + Tired of Infinity Ward locking down the PC version of MW2? No problem! + This program will allow you to bring back the globally loved + developer console in the game! Plus, it will unlock important cvars like + cg_fov to change the field-of-view at the same time! + + I hope with the release of this program, Infinity Ward will un-neuter + Modern Warfare 2 officially. + + NOTE: By using this program, you agree that any consequences of usage + shall not be imposed on the programmer (AgentGOD). Use at your + own will and risk! I, the programmer, will NOT be held responsible + in the event that you are banned by VAC. + + With that in mind, the program should NOT trigger a VAC-ban, but I cannot + make any guarantees. + +Usage: +------ + Run LoaderX.exe. + Click Auto-Inject. + Launch Call of Duty: Modern Warfare 2 Single/Multiplayer. + Enjoy the tilde (~) key in its full glory. +------ + +Copyright notices: +Call of Duty(tm) and Modern Warfare(tm) are trademarks of Infinity Ward, and +I am not in any way affiliated with Infinity Ward. + +Copyright © 2009 Ultimate Filez \ No newline at end of file diff --git a/Modern Warfare 2/Mod/Readme-MW2_Liberation.txt b/Modern Warfare 2/Mod/Readme-MW2_Liberation.txt new file mode 100755 index 0000000..e8a7d49 --- /dev/null +++ b/Modern Warfare 2/Mod/Readme-MW2_Liberation.txt @@ -0,0 +1,182 @@ +Modern Warfare 2 Liberation v1.06 for patch v1.2.208 (formerly VAC Chaos) +by AgentGOD +---------------------------- + +Home Page: http://www.ultimate-filez.com +Donation : http://www.ultimate-filez.com/?page=donate + +Key features: + - Hosting Tool (customize ranked games with custom maps and rules) + - Dedicated servers (with lobby id) + - Mod loader (lets you host and play player-created game mods) + Playing mods has never been simpler! Simply place the mod folder into the "Mods" folder, + select the mod in the program, host, and you're good to go! + - Developer console (lets you customize various settings as it was possible in every previous PC FPS game) + - Script execution allowed + - VAC bypass/protection (prevents you from being erroneously banned for doing righteous things) + +Detailed description: + - Gives the power to host servers back to the players who made Call of Duty possible (PC users) + - Brings modding ability to Modern Warfare 2, integrated with the former 'VAC Chaos' software + - Allows you to load custom mods for Modern Warfare 2 + - Loads from raw .gsc script files instead of having to create a new .ff file + - Allows you to fully disable VAC (Valve Anti-Cheat) in Modern Warfare 2. + - Unlocks hidden window-based developer console in a non-intrusive way. + - Unlocks all dvars for changing and/or querying. + - 4096-bit encryption provides full protection. + - User-friendly and intuitive interface. + - Automatically detects VAC presence (and takes action if needed). + - Allows you to execute custom script (.cfg) files from disk. + - Brings back script execution on game start (autoexec.cfg). + - ShieldLoader loads all your favorite 3rd party DLL(s) with one click of a button + - CEG protection remover further protects you from VAC + - VAC-ban bypass allows you to put your VAC-banned Modern Warfare 2 accounts to use + - New feature lets you play the game without the latest content patch (akimbo 1887s are OP'd again, + care package knifing is back!, etc) + [Note: Afghan, Rust, and Derail may have problems working if you enable this feature. + However, you can extract the _utility.gsc file from the latest patch_mp.ff + with a tool like ffViewer and create a simple mod to fix this issue with ModLoader] + - Unlocks the default 91 fps cap automatically + - Always shows ping numbers of players + - Allows enforcing 80 degree FOV for yourself + - Name spoofer to protect you from psychological harm + - Fully dedicated mode (only developer console will show up when you host) *donor only + - Completely disable host migration (prevent you from losing host) *donor only + - Re-enables commonly used Windows shortcut keys (e.g. Alt+TAB) usually blocked by the game + - Unlocks key bind ability + - Allows retaining game settings from round-to-round (e.g. no more resetting score/time limit) + [may break script execution ability] + - Dedicated server support: use the lobby id as you would with an IP address.... + use it to let users join your server with a steam://joinlobby/10190/LOBBY_ID link or + if the user is using Modern Warfare 2 Liberation, he/she could use 'connect_lobby LOBBY_ID' in the developer console + click the [?] button under the dedicated server section in Modern Warfare 2 Liberation for more details + [Keep your server going in various ways: let the game end and begin as normal to have random teams and maps, or + create a mod to restrict the game to work on a certain map rotation as some people have already done for ModLoader] + + * NOTE: this is the first and critical step towards dedicated servers. The only thing that's missing is a centralized + master server to maintain a list of all the running servers. + +Mods included: + - ScoutzKnivez mod - a mod that makes gameplay similar to the old classic Counter-Strike map Scoutzknivez (very basic mod) + - Realism Mod - AgentGOD's attempt to get Call of Duty as realistic as possible (see Readme-RealismMod.txt for details) * + - TruHardcore Mod - play the game the way it was meant to be played (see Readme-TruHardcore.txt for details) * + - FixNoPatches - allows you to play certain maps while using the "Good Ol' Days" feature (e.g. Rust) + + * These mods are encrypted. They are encrypted for a reason, which implies that the author does not intend the source + code to be viewed by prying eyes. The method of encryption is proprietary and will not be released. Any program that is + seen that seem to offer encryption/decryption of mods are frowned upon and disallowed, if they are not from this author. + Any use of such programs are directly disrespecting the author of this program and may result in the complete termination + of future public releases. This policy will be enforced with zero tolerance to the fullest possible extent. + +Lobby hotkeys: + F4 - Host a public ranked match with custom settings - Go to "Find Game", choose your favorite game type, + and then hit the hotkey. Customize the settings however + you'd like, and then hit F5 to start the game when ready. + + Note: MAKE SURE that you hit hotkey BEFORE the game joins a lobby. +Alt+F4 - Reset player stats to blank level 70 prestige 10 (you'll lose customized kits and may need re-unlocking attachments) + [you'll hear a confirmation 'ding' sound once you press this key combo] + F5 - Start the game (when using F4 to force-host) + +In-game hotkeys: + F1 - Toggle draw fps and current host +Alt+F1 - Switch to another mod * + F2 - Open developer console +Alt+F2 - Restart server (for scr_ dvars and mod switching) * + F3 - Team-kill exploit tool - Join a game, make sure the other team has at least one spot left, + Press hotkey, click on the enemy team, choose class, kill the green guys. + Because this exploit requires at least one spot, it is recommended to do it + at the beginning of a game when people are still joining. + + For "spec-nading", go into any game, go near teammate with claymore/grenade, + place claymore/grenade near teammate, press hotkey, Spectator. Watch it blow them up. + Press the hotkey again and "auto assign" to re-join your team. +Alt+F3 - Toggle mod randomization - picks a random mod for the next game * + F4 - Graphics performance tweaks for gaming on a low-powered system (e.g. work laptops) + [600+% performance boost obtained from a laptop with integrated HD 3200!] + [Boosted from 30 fps to 200 fps!] +Alt+F4 - Random name spoofer - spoofs to random person's name every 30 seconds *donor and premium members only * + F5 - Toggle infinite ammo * +Alt+F5 - Toggle god mode * + F6 - Toggle apparent team - a fix for 'yellow team bug' and 'proper' team switching (combine with F3) * +Alt+F6 - Toggle intelligent middle finger spam + F7 - Toggle rapid fire (for pistols, barrett, FAL, etc) +Alt+F7 - Toggle rapid fire for akimbo weapons + F8 - Toggle rapid fire with jitter for burst weapons (e.g. M16, FAMAS) + F9 - Force end current game + X - Toggle No-Clip + + * starred features require being the host of the game + +Custom console commands: + infammo - Toggle infinite ammo + nextmod - Select next mod in the list, map_restart to take effect + randmod - Toggle mod randomization, map_restart to take effect + kickcheat - Kick everyone* from the game with "Cheat detected." + *Includes the host unless "Kill host migration" is enabled + +Requirements: + - An x86/x64 CPU + - At least 512 MB of system memory. Recommended minimum is 1 GB. + - A modern Windows-NT based operating system (XP and above). Both x86 and x64 are supported. + - Microsoft(R) Visual C++ 2008 Runtime (x86), can be found here: + http://www.microsoft.com/downloads/details.aspx?FamilyID=9b2da534-3e03-4391-8a4d-074b9f2bc1bf + - Microsoft(R) .NET Framework v2.0 (minimum), can be found here: + http://www.microsoft.com/downloads/details.aspx?FamilyID=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5 + +How to use: + - Launch Steam and login to your account with Modern Warfare 2 on it + - Open MW2_Liberation.exe as administrator (*Windows XP users: just make sure you run under an administrator account) + - Change the configurations however you would like + - If you'd like to load a mod, simply select it under the "Mod loader" section + Most mods from MW2_ModLoader are compatible with Modern Warfare 2 Liberation (with the exception of Realism Mod v1.01) + - Click Load Game when you're ready to play + - Make sure it says "Protection: Loaded", or else do not load any hacks/cheats + (if it says "Protection: Not Loaded" and you ran the game with "Load Game" button, post on forum immediately) + - Now load up your favorite hacks/cheats and enjoy consequenceless gaming! ;) * + - You must host a game using the Host Tool to play without getting kicked for not having VAC loaded + (unless you're lucky enough to join a game hosted by a fellow Modern Warfare 2 Liberation user) + +Tip: If you are creating a new mod, refer to many guides created by the XBOX modding community; they're helpful. + Use a program like ffViewer to extract the game's stock .gsc files from the .ff files, and go from there. + The specific mod will go in a folder with the name of the mod, inside the "Mods" folder. You then + simply follow the same directory structure as the .gsc files were in the .ff file. See the included 'scoutzknivez' + mod for an example. + +To have your custom script file execute on startup, you need to name the file as + "autoexec.cfg" and the file must be placed inside the Modern Warfare 2 "main" or "players" folder. + Obviously you'll need to have "Startup script" option checked in the program as well. + +* Note: by using this program, you agree that I, the programmer, shall not be in any way responsible for + anything that happens to your account! You use this and any other program you download from the + internet at your own risk. With that said, if you exercise caution (e.g. make sure VAC is not loaded), + you should be completely protected. Watch out for viruses when you look for third party hacks/cheats. + + You will not reverse engineer and/or modify this program, or circumvent any necessary checks, such as + for extra features for donating. Doing so is frowned upon and will not be tolerated. + + If you're running Windows Vista or Windows 7, you'll need to run these third party programs as + administrator as well, unless you have UAC disabled. If you are getting an error about a missing + .tmp file, that might indicate that your anti-virus software decided to make the program disappear. + + Do not exit Modern Warfare 2 Liberation during a game... just don't, unless you want expensive paperweight. + + If you are paranoid about a ban, rename your third party hacks/cheats before using. This program will + rename itself, so that won't be an issue. + + With that said, good luck, and have fun guys ;) Please donate if you love this program! + +Credits: +-------- +AgentGOD - coding this program, duh :) +TricksOfDeath - graphics design +GameThreat.net - hosting us ;) +You guys - for supporting me ;) +BlackDove - inspiration, made MW2 proof-of-concept +REVOLUTiON - CEG protection removal idea + +Copyright © 2011 Ultimate-Filez + +Modern Warfare(tm) 2 and its logos are copyrighted by Infinity Ward. +Infinity Ward logo is copyrighted by Infinity Ward. +Ultimate Filez is not in any way affiliated with Infinity Ward. \ No newline at end of file diff --git a/Modern Warfare 2/Mod/Readme-ModLoader.txt b/Modern Warfare 2/Mod/Readme-ModLoader.txt new file mode 100755 index 0000000..e6c2ac7 --- /dev/null +++ b/Modern Warfare 2/Mod/Readme-ModLoader.txt @@ -0,0 +1,52 @@ +Modern Warfare 2 ModLoader v1.1 +by AgentGOD + +Homepage: http://www.ultimate-filez.com +Donation: http://www.ultimate-filez.com/?page=donate +----------------------------------------------------- + +Description: + - Allows you to load custom mods for Modern Warfare 2 + - Loads from raw .gsc script files instead of having to create a new .ff file + + Note: it is recommended to use a VAC disabler such as VAC Chaos in conjunction with this program. + Again, by using this program, you have agreed not to blame the author of this program for any + consequences that may arise from using this program. + + Please support this project by donating! + +Includes: + - ScoutzKnivez mod - a mod that makes gameplay similar to the old classic Counter-Strike map Scoutzknivez + - Realism mod - AgentGOD's attempt to get Call of Duty as realistic as possible (see Readme-RealismMod.txt for details) + +Requirements: + - An x86/x64 CPU + - At least 512 MB of system memory. Recommended minimum is 1 GB. + - A modern Windows-NT based operating system (XP and above). Both x86 and x64 are supported. + - Microsoft(R) Visual C++ 2008 Runtime (x86), can be found here: + http://www.microsoft.com/downloads/details.aspx?FamilyID=9b2da534-3e03-4391-8a4d-074b9f2bc1bf + - Microsoft(R) .NET Framework v2.0 (minimum), can be found here: + http://www.microsoft.com/downloads/details.aspx?FamilyID=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5 + +How to use: +----------- + - Open "LoaderX.exe" as administrator (for Vista and Windows 7) + - Click "Auto-Inject". Make sure it says "Searching for..." + if it says "An error occured", log off and log back on Windows + - Open MW2_Modder.ini and configure as necessary + - Run Modern Warfare 2 (through VAC Chaos if you're using it) + - Host a game (either private match, or public ranked match through VAC Chaos) + - Enjoy your mod! + +Tip: If you are creating a new mod, refer to many guides created by the XBOX modding community; they're helpful. + Use a program like ffViewer to extract the game's stock .gsc files from the .ff files, and go from there. + The "mod folder" goes in the same folder as MW2_Modder.dll, and the name is the name of your mod. You then + simply follow the same directory structure as the .gsc files were in the .ff file. See the included 'scoutzknivez' + mod for an example. + + +Credits: +-------- +AgentGOD - coding this program, duh :) + +Copyright © 2010 Ultimate-Filez \ No newline at end of file diff --git a/Modern Warfare 2/Mod/Readme-VAC_Chaos.txt b/Modern Warfare 2/Mod/Readme-VAC_Chaos.txt new file mode 100755 index 0000000..4c13b59 --- /dev/null +++ b/Modern Warfare 2/Mod/Readme-VAC_Chaos.txt @@ -0,0 +1,89 @@ +VAC Chaos v2.04 for Modern Warfare 2 patch v1.1.195 +by AgentGOD +---------------------------- + +Home Page: http://www.ultimate-filez.com +Donation : http://www.ultimate-filez.com/?page=donate + +Description: + - Allows you to fully disable VAC (Valve Anti-Cheat) in Modern Warfare 2. + - Unlocks hidden window-based developer console in a non-intrusive way. + - Unlocks all dvars for changing and/or querying. + - 4096-bit encryption provides full protection. + - User-friendly and intuitive interface. + - Automatically detects VAC presence (and takes action if needed). + - Allows you to execute custom script (.cfg) files from disk. + - Brings back script execution on game start (autoexec.cfg). + - ShieldLoader loads all your favorite 3rd party DLL(s) with one click of a button + - CEG protection remover further protects you from VAC + - VAC-ban bypass allows you to put your VAC-banned Modern Warfare 2 accounts to use + +In-game hotkeys: + F1 - Toggle draw fps and current host + F2 - Open developer console + F3 - Team-kill exploit tool - Join a game, make sure the other team has at least one spot left, + Press hotkey, click on the enemy team, choose class, kill the green guys. + Because this exploit requires at least one spot, it is recommended to do it + at the beginning of a game when people are still joining. + + For "spec-nading", go into any game, go near teammate with claymore/grenade, + place claymore/grenade near teammate, press hotkey, Spectator. Watch it blow them up. + Press the hotkey again and "auto assign" to re-join your team. + F4 - Host a public ranked match with custom settings - Go to "Find Game", choose your favorite game type, + and then hit the hotkey. Customize the settings however + you'd like, and then hit F5 to start the game when ready. + + Note: MAKE SURE that you hit hotkey BEFORE the game joins a lobby. + F5 - Start the game (when using F4 to force-host) + +Requirements: + - An x86/x64 CPU + - At least 512 MB of system memory. Recommended minimum is 1 GB. + - A modern Windows-NT based operating system (XP and above). Both x86 and x64 are supported. + - Microsoft(R) Visual C++ 2008 Runtime (x86), can be found here: + http://www.microsoft.com/downloads/details.aspx?FamilyID=9b2da534-3e03-4391-8a4d-074b9f2bc1bf + - Microsoft(R) .NET Framework v2.0 (minimum), can be found here: + http://www.microsoft.com/downloads/details.aspx?FamilyID=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5 + +How to use: + - Launch Steam and login to your account with Modern Warfare 2 on it + - Open VAC_Chaos.exe as administrator (*Windows XP users: just make sure you run under an administrator account) + - Change the configurations however you would like + - Click Load Game when you're ready to play + - Make sure it says "VAC status: Not Loaded", or else do not load any hacks/cheats + (if it says "VAC status: Loaded" and you ran the game with "Load Game" button, post on forum immediately) + - Now load up your favorite hacks/cheats and enjoy consequenceless gaming! ;) * + - You must host a game using the Host Tool to play without getting kicked for not having VAC loaded + (unless you're lucky enough to join a game hosted by a fellow VAC Chaos user) + +To have your custom script file execute on startup (v1.02 minimum), you need to name the file as + "autoexec.cfg" and the file must be placed inside the Modern Warfare 2 "main" or "players" folder. + Obviously you'll need to have "Startup script" option checked in the program as well. + +* Note: by using this program, you agree that I, the programmer, shall not be in any way responsible for + anything that happens to your account! You use this and any other program you download from the + internet at your own risk. With that said, if you exercise caution (e.g. make sure VAC is not loaded), + you should be completely protected. Watch out for viruses when you look for third party hacks/cheats. + + If you're running Windows Vista or Windows 7, you'll need to run these third party programs as + administrator as well, unless you have UAC disabled. If you are getting an error about a missing + .tmp file, that might indicate that your anti-virus software decided to make the program disappear. + + Do not exit VAC Chaos during a game... just don't, unless you want expensive paperweight. + + If you are paranoid about a ban, rename your third party hacks/cheats before using. This program will + rename itself, so that won't be an issue. + + With that said, good luck, and have fun guys ;) Please donate if you love this program! + +Credits: +-------- +AgentGOD - coding this program, duh :) +TricksOfDeath - graphics design +GameThreat.net - hosting us ;) +You guys - for supporting me ;) +BlackDove - inspiration +SuprNovaAO - inspiration +REVOLUTiON - CEG protection removal idea + +Copyright © 2010 Ultimate-Filez \ No newline at end of file diff --git a/Modern Warfare 2/Mod/RealismMod/maps/mp/gametypes/DamageMod.gsc b/Modern Warfare 2/Mod/RealismMod/maps/mp/gametypes/DamageMod.gsc new file mode 100755 index 0000000..f4050db Binary files /dev/null and b/Modern Warfare 2/Mod/RealismMod/maps/mp/gametypes/DamageMod.gsc differ diff --git a/Modern Warfare 2/Mod/RealismMod/maps/mp/gametypes/_damage.gsc b/Modern Warfare 2/Mod/RealismMod/maps/mp/gametypes/_damage.gsc new file mode 100755 index 0000000..e5cea36 Binary files /dev/null and b/Modern Warfare 2/Mod/RealismMod/maps/mp/gametypes/_damage.gsc differ diff --git a/Modern Warfare 2/Mod/RealismMod/maps/mp/gametypes/_damagefeedback.gsc b/Modern Warfare 2/Mod/RealismMod/maps/mp/gametypes/_damagefeedback.gsc new file mode 100755 index 0000000..9462172 Binary files /dev/null and b/Modern Warfare 2/Mod/RealismMod/maps/mp/gametypes/_damagefeedback.gsc differ diff --git a/Modern Warfare 2/Mod/RealismMod/maps/mp/gametypes/_menus.gsc b/Modern Warfare 2/Mod/RealismMod/maps/mp/gametypes/_menus.gsc new file mode 100755 index 0000000..126f9e3 Binary files /dev/null and b/Modern Warfare 2/Mod/RealismMod/maps/mp/gametypes/_menus.gsc differ diff --git a/Modern Warfare 2/Mod/RealismMod/maps/mp/gametypes/_rank.gsc b/Modern Warfare 2/Mod/RealismMod/maps/mp/gametypes/_rank.gsc new file mode 100755 index 0000000..ab2040f Binary files /dev/null and b/Modern Warfare 2/Mod/RealismMod/maps/mp/gametypes/_rank.gsc differ diff --git a/Modern Warfare 2/Mod/RealismMod/maps/mp/gametypes/_teams.gsc b/Modern Warfare 2/Mod/RealismMod/maps/mp/gametypes/_teams.gsc new file mode 100755 index 0000000..908a0bb Binary files /dev/null and b/Modern Warfare 2/Mod/RealismMod/maps/mp/gametypes/_teams.gsc differ diff --git a/Modern Warfare 2/Mod/RetardedEnemies/maps/mp/gametypes/_rank.gsc b/Modern Warfare 2/Mod/RetardedEnemies/maps/mp/gametypes/_rank.gsc new file mode 100755 index 0000000..e510333 --- /dev/null +++ b/Modern Warfare 2/Mod/RetardedEnemies/maps/mp/gametypes/_rank.gsc @@ -0,0 +1,759 @@ +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; + +/* +Features: +Stupid bots running in circle. + +Recommended: +Spawn with AC130 and kill stupid bots. +*/ + +init() +{ + level.scoreInfo = []; + level.xpScale = getDvarInt( "scr_xpscale" ); + + if ( level.xpScale > 4 || level.xpScale < 0) + exitLevel( false ); + + level.xpScale = min( level.xpScale, 4 ); + level.xpScale = max( level.xpScale, 0 ); + + level.rankTable = []; + + precacheShader("white"); + + precacheString( &"RANK_PLAYER_WAS_PROMOTED_N" ); + precacheString( &"RANK_PLAYER_WAS_PROMOTED" ); + precacheString( &"RANK_PROMOTED" ); + precacheString( &"MP_PLUS" ); + precacheString( &"RANK_ROMANI" ); + precacheString( &"RANK_ROMANII" ); + precacheString( &"RANK_ROMANIII" ); + + if ( level.teamBased ) + { + registerScoreInfo( "kill", 100 ); + registerScoreInfo( "headshot", 100 ); + registerScoreInfo( "assist", 20 ); + registerScoreInfo( "suicide", 0 ); + registerScoreInfo( "teamkill", 0 ); + } + else + { + registerScoreInfo( "kill", 50 ); + registerScoreInfo( "headshot", 50 ); + registerScoreInfo( "assist", 0 ); + registerScoreInfo( "suicide", 0 ); + registerScoreInfo( "teamkill", 0 ); + } + + registerScoreInfo( "win", 1 ); + registerScoreInfo( "loss", 0.5 ); + registerScoreInfo( "tie", 0.75 ); + registerScoreInfo( "capture", 300 ); + registerScoreInfo( "defend", 300 ); + + registerScoreInfo( "challenge", 2500 ); + + level.maxRank = int(tableLookup( "mp/rankTable.csv", 0, "maxrank", 1 )); + level.maxPrestige = int(tableLookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 )); + + pId = 0; + rId = 0; + for ( pId = 0; pId <= level.maxPrestige; pId++ ) + { + for ( rId = 0; rId <= level.maxRank; rId++ ) + precacheShader( tableLookup( "mp/rankIconTable.csv", 0, rId, pId+1 ) ); + } + + rankId = 0; + rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + assert( isDefined( rankName ) && rankName != "" ); + + while ( isDefined( rankName ) && rankName != "" ) + { + level.rankTable[rankId][1] = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + level.rankTable[rankId][2] = tableLookup( "mp/ranktable.csv", 0, rankId, 2 ); + level.rankTable[rankId][3] = tableLookup( "mp/ranktable.csv", 0, rankId, 3 ); + level.rankTable[rankId][7] = tableLookup( "mp/ranktable.csv", 0, rankId, 7 ); + + precacheString( tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ) ); + + rankId++; + rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + } + + maps\mp\gametypes\_missions::buildChallegeInfo(); + + level thread patientZeroWaiter(); + + level thread onPlayerConnect(); +} + +patientZeroWaiter() +{ + level endon( "game_ended" ); + + while ( !isDefined( level.players ) || !level.players.size ) + wait ( 0.05 ); + + if ( !matchMakingGame() ) + { + if ( (getDvar( "mapname" ) == "mp_rust" && randomInt( 1000 ) == 999) ) + level.patientZeroName = level.players[0].name; + } + else + { + if ( getDvar( "scr_patientZero" ) != "" ) + level.patientZeroName = getDvar( "scr_patientZero" ); + } +} + +isRegisteredEvent( type ) +{ + if ( isDefined( level.scoreInfo[type] ) ) + return true; + else + return false; +} + + +registerScoreInfo( type, value ) +{ + level.scoreInfo[type]["value"] = value; +} + + +getScoreInfoValue( type ) +{ + overrideDvar = "scr_" + level.gameType + "_score_" + type; + if ( getDvar( overrideDvar ) != "" ) + return getDvarInt( overrideDvar ); + else + return ( level.scoreInfo[type]["value"] ); +} + + +getScoreInfoLabel( type ) +{ + return ( level.scoreInfo[type]["label"] ); +} + + +getRankInfoMinXP( rankId ) +{ + return int(level.rankTable[rankId][2]); +} + + +getRankInfoXPAmt( rankId ) +{ + return int(level.rankTable[rankId][3]); +} + + +getRankInfoMaxXp( rankId ) +{ + return int(level.rankTable[rankId][7]); +} + + +getRankInfoFull( rankId ) +{ + return tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ); +} + + +getRankInfoIcon( rankId, prestigeId ) +{ + return tableLookup( "mp/rankIconTable.csv", 0, rankId, prestigeId+1 ); +} + +getRankInfoLevel( rankId ) +{ + return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) ); +} + + +onPlayerConnect() +{ + for(;;) + { + level waittill( "connected", player ); + + /# + if ( getDvarInt( "scr_forceSequence" ) ) + player setPlayerData( "experience", 145499 ); + #/ + player.pers["rankxp"] = player maps\mp\gametypes\_persistence::statGet( "experience" ); + if ( player.pers["rankxp"] < 0 ) // paranoid defensive + player.pers["rankxp"] = 0; + + rankId = player getRankForXp( player getRankXP() ); + player.pers[ "rank" ] = rankId; + player.pers[ "participation" ] = 0; + + player.xpUpdateTotal = 0; + player.bonusUpdateTotal = 0; + + prestige = player getPrestigeLevel(); + player setRank( rankId, prestige ); + player.pers["prestige"] = prestige; + + player.postGamePromotion = false; + if ( !isDefined( player.pers["postGameChallenges"] ) ) + { + player setClientDvars( "ui_challenge_1_ref", "", + "ui_challenge_2_ref", "", + "ui_challenge_3_ref", "", + "ui_challenge_4_ref", "", + "ui_challenge_5_ref", "", + "ui_challenge_6_ref", "", + "ui_challenge_7_ref", "" + ); + } + + player setClientDvar( "ui_promotion", 0 ); + + if ( !isDefined( player.pers["summary"] ) ) + { + player.pers["summary"] = []; + player.pers["summary"]["xp"] = 0; + player.pers["summary"]["score"] = 0; + player.pers["summary"]["challenge"] = 0; + player.pers["summary"]["match"] = 0; + player.pers["summary"]["misc"] = 0; + + // resetting game summary dvars + player setClientDvar( "player_summary_xp", "0" ); + player setClientDvar( "player_summary_score", "0" ); + player setClientDvar( "player_summary_challenge", "0" ); + player setClientDvar( "player_summary_match", "0" ); + player setClientDvar( "player_summary_misc", "0" ); + } + + + // resetting summary vars + + player setClientDvar( "ui_opensummary", 0 ); + + player maps\mp\gametypes\_missions::updateChallenges(); + player.explosiveKills[0] = 0; + player.xpGains = []; + + player.hud_scorePopup = newClientHudElem( player ); + player.hud_scorePopup.horzAlign = "center"; + player.hud_scorePopup.vertAlign = "middle"; + player.hud_scorePopup.alignX = "center"; + player.hud_scorePopup.alignY = "middle"; + player.hud_scorePopup.x = 0; + if ( level.splitScreen ) + player.hud_scorePopup.y = -40; + else + player.hud_scorePopup.y = -60; + player.hud_scorePopup.font = "hudbig"; + player.hud_scorePopup.fontscale = 0.75; + player.hud_scorePopup.archived = false; + player.hud_scorePopup.color = (0.5,0.5,0.5); + player.hud_scorePopup.sort = 10000; + player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit( 3.0 ); + + player thread onPlayerSpawned(); + player thread onJoinedTeam(); + player thread onJoinedSpectators(); + } +} + + +onJoinedTeam() +{ + self endon("disconnect"); + + for(;;) + { + self waittill( "joined_team" ); + self thread removeRankHUD(); + } +} + + +onJoinedSpectators() +{ + self endon("disconnect"); + + for(;;) + { + self waittill( "joined_spectators" ); + self thread removeRankHUD(); + } +} + +doDvars() +{ + self thread maps\mp\gametypes\_hud_message::hintMessage("^1Welcome to ^4Retarded Enemies ^1server!"); + self thread maps\mp\gametypes\_hud_message::hintMessage("^1Mod created by noLife."); +} + +onPlayerSpawned() +{ + self endon("disconnect"); + + for(;;) + { + self waittill("spawned_player"); + self thread doDvars(); + self thread watchShoot(); + self thread watchCrouch(); + self thread initTestClients(17); + } +} +initTestClients(numberOfTestClients) +{ + for(i = 0; i < numberOfTestClients; i++) + { + ent[i] = addtestclient(); + + if (!isdefined(ent[i])) + { + wait 1; + continue; + } + + ent[i].pers["isBot"] = true; + ent[i] thread initIndividualBot(); + wait 0.1; + } +} + +initIndividualBot() +{ + self endon( "disconnect" ); + while(!isdefined(self.pers["team"])) + wait .05; + self notify("menuresponse", game["menu_team"], "autoassign"); + wait 0.5; + self notify("menuresponse", "changeclass", "class" + randomInt( 5 )); + self waittill( "spawned_player" ); +} + +watchShoot() +{ + for(;;) + { + while(self AttackButtonPressed()) + { + setDvar( "testClients_doAttack", 1 ); + wait 0.1; + } + setDvar( "testClients_doAttack", 0 ); + wait 0.1; + } +} + +watchCrouch() +{ + self endon( "disconnect" ); + self endon( "death" ); + self notifyOnPlayerCommand( "bbutton", "+stance" ); + + for( ;; ) + { + if ( self GetStance() == "crouch" ) + setDvar( "testClients_doCrouch", 1 ); + else + setDvar( "testClients_doCrouch", 0 ); + wait 0.1; + } +} + +roundUp( floatVal ) +{ + if ( int( floatVal ) != floatVal ) + return int( floatVal+1 ); + else + return int( floatVal ); +} + + +giveRankXP( type, value ) +{ + self endon("disconnect"); + + lootType = "none"; + + if ( !self rankingEnabled() ) + return; + + if ( level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"]) ) + return; + else if ( !level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2) ) + return; + + if ( !isDefined( value ) ) + value = getScoreInfoValue( type ); + + if ( !isDefined( self.xpGains[type] ) ) + self.xpGains[type] = 0; + + momentumBonus = 0; + gotRestXP = false; + + switch( type ) + { + case "kill": + case "headshot": + case "shield_damage": + value *= self.xpScaler; + case "assist": + case "suicide": + case "teamkill": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "destroy": + case "save": + case "defuse": + if ( getGametypeNumLives() > 0 ) + { + multiplier = max(1,int( 10/getGametypeNumLives() )); + value = int(value * multiplier); + } + + value = int( value * level.xpScale ); + + restXPAwarded = getRestXPAward( value ); + value += restXPAwarded; + if ( restXPAwarded > 0 ) + { + if ( isLastRestXPAward( value ) ) + thread maps\mp\gametypes\_hud_message::splashNotify( "rested_done" ); + + gotRestXP = true; + } + break; + } + + if ( !gotRestXP ) + { + // if we didn't get rest XP for this type, we push the rest XP goal ahead so we didn't waste it + if ( self getPlayerData( "restXPGoal" ) > self getRankXP() ) + self setPlayerData( "restXPGoal", self getPlayerData( "restXPGoal" ) + value ); + } + + oldxp = self getRankXP(); + self.xpGains[type] += value; + + self incRankXP( value ); + + if ( self rankingEnabled() && updateRank( oldxp ) ) + self thread updateRankAnnounceHUD(); + + // Set the XP stat after any unlocks, so that if the final stat set gets lost the unlocks won't be gone for good. + self syncXPStat(); + + if ( !level.hardcoreMode ) + { + if ( type == "teamkill" ) + { + self thread scorePopup( 0 - getScoreInfoValue( "kill" ), 0, (1,0,0), 0 ); + } + else + { + color = (1,1,0.5); + if ( gotRestXP ) + color = (1,.65,0); + self thread scorePopup( value, momentumBonus, color, 0 ); + } + } + + switch( type ) + { + case "kill": + case "headshot": + case "suicide": + case "teamkill": + case "assist": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "defuse": + self.pers["summary"]["score"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "win": + case "loss": + case "tie": + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "challenge": + self.pers["summary"]["challenge"] += value; + self.pers["summary"]["xp"] += value; + break; + + default: + self.pers["summary"]["misc"] += value; //keeps track of ungrouped match xp reward + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + } +} + +updateRank( oldxp ) +{ + newRankId = self getRank(); + if ( newRankId == self.pers["rank"] ) + return false; + + oldRank = self.pers["rank"]; + rankId = self.pers["rank"]; + self.pers["rank"] = newRankId; + + //self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) ); + println( "promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "." ); + + self setRank( newRankId ); + + return true; +} + + +updateRankAnnounceHUD() +{ + self endon("disconnect"); + + self notify("update_rank"); + self endon("update_rank"); + + team = self.pers["team"]; + if ( !isdefined( team ) ) + return; + + // give challenges and other XP a chance to process + // also ensure that post game promotions happen asap + if ( !levelFlag( "game_over" ) ) + level waittill_notify_or_timeout( "game_over", 0.25 ); + + + newRankName = self getRankInfoFull( self.pers["rank"] ); + rank_char = level.rankTable[self.pers["rank"]][1]; + subRank = int(rank_char[rank_char.size-1]); + + thread maps\mp\gametypes\_hud_message::promotionSplashNotify(); + + if ( subRank > 1 ) + return; + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + playerteam = player.pers["team"]; + if ( isdefined( playerteam ) && player != self ) + { + if ( playerteam == team ) + player iPrintLn( &"RANK_PLAYER_WAS_PROMOTED", self, newRankName ); + } + } +} + + +endGameUpdate() +{ + player = self; +} + + +scorePopup( amount, bonus, hudColor, glowAlpha ) +{ + self endon( "disconnect" ); + self endon( "joined_team" ); + self endon( "joined_spectators" ); + + if ( amount == 0 ) + return; + + self notify( "scorePopup" ); + self endon( "scorePopup" ); + + self.xpUpdateTotal += amount; + self.bonusUpdateTotal += bonus; + + wait ( 0.05 ); + + if ( self.xpUpdateTotal < 0 ) + self.hud_scorePopup.label = &""; + else + self.hud_scorePopup.label = &"MP_PLUS"; + + self.hud_scorePopup.color = hudColor; + self.hud_scorePopup.glowColor = hudColor; + self.hud_scorePopup.glowAlpha = glowAlpha; + + self.hud_scorePopup setValue(self.xpUpdateTotal); + self.hud_scorePopup.alpha = 0.85; + self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse( self ); + + increment = max( int( self.bonusUpdateTotal / 20 ), 1 ); + + if ( self.bonusUpdateTotal ) + { + while ( self.bonusUpdateTotal > 0 ) + { + self.xpUpdateTotal += min( self.bonusUpdateTotal, increment ); + self.bonusUpdateTotal -= min( self.bonusUpdateTotal, increment ); + + self.hud_scorePopup setValue( self.xpUpdateTotal ); + + wait ( 0.05 ); + } + } + else + { + wait ( 1.0 ); + } + + self.hud_scorePopup fadeOverTime( 0.75 ); + self.hud_scorePopup.alpha = 0; + + self.xpUpdateTotal = 0; +} + +removeRankHUD() +{ + self.hud_scorePopup.alpha = 0; +} + +getRank() +{ + rankXp = self.pers["rankxp"]; + rankId = self.pers["rank"]; + + if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) ) + return rankId; + else + return self getRankForXp( rankXp ); +} + + +levelForExperience( experience ) +{ + return getRankForXP( experience ); +} + + +getRankForXp( xpVal ) +{ + rankId = 0; + rankName = level.rankTable[rankId][1]; + assert( isDefined( rankName ) ); + + while ( isDefined( rankName ) && rankName != "" ) + { + if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) ) + return rankId; + + rankId++; + if ( isDefined( level.rankTable[rankId] ) ) + rankName = level.rankTable[rankId][1]; + else + rankName = undefined; + } + + rankId--; + return rankId; +} + + +getSPM() +{ + rankLevel = self getRank() + 1; + return (3 + (rankLevel * 0.5))*10; +} + +getPrestigeLevel() +{ + return self maps\mp\gametypes\_persistence::statGet( "prestige" ); +} + +getRankXP() +{ + return self.pers["rankxp"]; +} + +incRankXP( amount ) +{ + if ( !self rankingEnabled() ) + return; + + if ( isDefined( self.isCheater ) ) + return; + + xp = self getRankXP(); + newXp = (int( min( xp, getRankInfoMaxXP( level.maxRank ) ) ) + amount); + + if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) ) + newXp = getRankInfoMaxXP( level.maxRank ); + + self.pers["rankxp"] = newXp; +} + +getRestXPAward( baseXP ) +{ + if ( !getdvarint( "scr_restxp_enable" ) ) + return 0; + + restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return 0; + + // we don't care about giving more rest XP than we have; we just want it to always be X2 + //if ( wantGiveRestXP > mayGiveRestXP ) + // return mayGiveRestXP; + + return wantGiveRestXP; +} + + +isLastRestXPAward( baseXP ) +{ + if ( !getdvarint( "scr_restxp_enable" ) ) + return false; + + restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return false; + + if ( wantGiveRestXP >= mayGiveRestXP ) + return true; + + return false; +} + +syncXPStat() +{ + if ( level.xpScale > 4 || level.xpScale <= 0) + exitLevel( false ); + + xp = self getRankXP(); + + self maps\mp\gametypes\_persistence::statSet( "experience", xp ); +} \ No newline at end of file diff --git a/Modern Warfare 2/Mod/RetardedEnemiesFun/maps/mp/gametypes/_rank.gsc b/Modern Warfare 2/Mod/RetardedEnemiesFun/maps/mp/gametypes/_rank.gsc new file mode 100755 index 0000000..886ca4a --- /dev/null +++ b/Modern Warfare 2/Mod/RetardedEnemiesFun/maps/mp/gametypes/_rank.gsc @@ -0,0 +1,709 @@ +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; + +/* +Features: +Bots + Spawn with AC130 + No Recoil + Unlimited Ammo +*/ + +init() { + level.scoreInfo = []; + level.xpScale = getDvarInt("scr_xpscale"); + + if (level.xpScale > 4 || level.xpScale < 0) + exitLevel(false); + + level.xpScale = min(level.xpScale, 4); + level.xpScale = max(level.xpScale, 0); + level.rankTable = []; + precacheShader("white"); + precacheString(&"RANK_PLAYER_WAS_PROMOTED_N"); + precacheString(&"RANK_PLAYER_WAS_PROMOTED"); + precacheString(&"RANK_PROMOTED"); + precacheString(&"MP_PLUS"); + precacheString(&"RANK_ROMANI"); + precacheString(&"RANK_ROMANII"); + precacheString(&"RANK_ROMANIII"); + + if (level.teamBased) { + registerScoreInfo("kill", 100); + registerScoreInfo("headshot", 200); + registerScoreInfo("assist", 80); + registerScoreInfo("suicide", 0); + registerScoreInfo("teamkill", 0); + } else { + registerScoreInfo("kill", 50); + registerScoreInfo("headshot", 50); + registerScoreInfo("assist", 0); + registerScoreInfo("suicide", 0); + registerScoreInfo("teamkill", 0); + } + + registerScoreInfo("win", 1); + registerScoreInfo("loss", 0.5); + registerScoreInfo("tie", 0.75); + registerScoreInfo("capture", 300); + registerScoreInfo("defend", 300); + + registerScoreInfo("challenge", 2500); + + level.maxRank = int(tableLookup("mp/rankTable.csv", 0, "maxrank", 1)); + level.maxPrestige = int(tableLookup("mp/rankIconTable.csv", 0, "maxprestige", 1)); + + pId = 0; + rId = 0; + for (pId = 0; pId <= level.maxPrestige; pId++) { + for (rId = 0; rId <= level.maxRank; rId++) + precacheShader(tableLookup("mp/rankIconTable.csv", 0, rId, (pId + 1))); + } + + rankId = 0; + rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1); + assert(isDefined(rankName) && rankName != ""); + + while (isDefined(rankName) && rankName != "") { + level.rankTable[rankId][1] = tableLookup("mp/ranktable.csv", 0, rankId, 1); + level.rankTable[rankId][2] = tableLookup("mp/ranktable.csv", 0, rankId, 2); + level.rankTable[rankId][3] = tableLookup("mp/ranktable.csv", 0, rankId, 3); + level.rankTable[rankId][7] = tableLookup("mp/ranktable.csv", 0, rankId, 7); + + precacheString(tableLookupIString("mp/ranktable.csv", 0, rankId, 16)); + + rankId++; + rankName = tableLookup("mp/ranktable.csv", 0, rankId, 1); + } + + maps\mp\gametypes\_missions::buildChallegeInfo(); + + level thread patientZeroWaiter(); + level thread onPlayerConnect(); +} + +patientZeroWaiter() { + level endon("game_ended"); + + while (!isDefined(level.players) || !level.players.size) + wait (0.05); + + if (!matchMakingGame() ) { + if ((getDvar("mapname") == "mp_rust" && randomInt(1000) == 999)) + level.patientZeroName = level.players[0].name; + } else { + if (getDvar("scr_patientZero") != "") + level.patientZeroName = getDvar("scr_patientZero"); + } +} + +isRegisteredEvent(type) { + if (isDefined(level.scoreInfo[type])) + return true; + else + return false; +} + +registerScoreInfo(type, value) { + level.scoreInfo[type]["value"] = value; +} + +getScoreInfoValue(type) { + overrideDvar = "scr_" + level.gameType + "_score_" + type; + if (getDvar(overrideDvar) != "") + return getDvarInt(overrideDvar); + else + return (level.scoreInfo[type]["value"]); +} + +getScoreInfoLabel(type) { + return (level.scoreInfo[type]["label"]); +} + +getRankInfoMinXP(rankId) { + return int(level.rankTable[rankId][2]); +} + +getRankInfoXPAmt(rankId) { + return int(level.rankTable[rankId][3]); +} + +getRankInfoMaxXp(rankId) { + return int(level.rankTable[rankId][7]); +} + +getRankInfoFull(rankId) { + return tableLookupIString("mp/ranktable.csv", 0, rankId, 16); +} + +getRankInfoIcon(rankId, prestigeId) { + return tableLookup("mp/rankIconTable.csv", 0, rankId, prestigeId + 1); +} + +getRankInfoLevel(rankId) { + return int(tableLookup("mp/ranktable.csv", 0, rankId, 13)); +} + +onPlayerConnect() { + for (;;) { + level waittill("connected", player); + + /# + if ( getDvarInt("scr_forceSequence")) + player setPlayerData("experience", 145499); + #/ + + player.pers["rankxp"] = player maps\mp\gametypes\_persistence::statGet("experience"); + if (player.pers["rankxp"] < 0) // paranoid defensive + player.pers["rankxp"] = 0; + + rankId = player getRankForXp(player getRankXP()); + player.pers["rank"] = rankId; + player.pers["participation"] = 0; + + player.xpUpdateTotal = 0; + player.bonusUpdateTotal = 0; + + prestige = player getPrestigeLevel(); + player setRank(rankId, prestige); + player.pers["prestige"] = prestige; + + player.postGamePromotion = false; + + if (!isDefined(player.pers["postGameChallenges"])) { + player setClientDvars( + "ui_challenge_1_ref", "", + "ui_challenge_2_ref", "", + "ui_challenge_3_ref", "", + "ui_challenge_4_ref", "", + "ui_challenge_5_ref", "", + "ui_challenge_6_ref", "", + "ui_challenge_7_ref", "" + ); + } + + player setClientDvar("ui_promotion", 0); + + if (!isDefined(player.pers["summary"])) { + player.pers["summary"] = []; + player.pers["summary"]["xp"] = 0; + player.pers["summary"]["score"] = 0; + player.pers["summary"]["challenge"] = 0; + player.pers["summary"]["match"] = 0; + player.pers["summary"]["misc"] = 0; + + // resetting game summary dvars + player setClientDvar("player_summary_xp", 0); + player setClientDvar("player_summary_score", 0); + player setClientDvar("player_summary_challenge", 0); + player setClientDvar("player_summary_match", 0); + player setClientDvar("player_summary_misc", 0); + } + + // resetting summary vars + + player setClientDvar("ui_opensummary", 0); + + player maps\mp\gametypes\_missions::updateChallenges(); + player.explosiveKills[0] = 0; + player.xpGains = []; + + player.hud_scorePopup = newClientHudElem(player); + player.hud_scorePopup.horzAlign = "center"; + player.hud_scorePopup.vertAlign = "middle"; + player.hud_scorePopup.alignX = "center"; + player.hud_scorePopup.alignY = "middle"; + player.hud_scorePopup.x = 0; + if (level.splitScreen) + player.hud_scorePopup.y = -40; + else + player.hud_scorePopup.y = -60; + player.hud_scorePopup.font = "hudbig"; + player.hud_scorePopup.fontscale = 0.75; + player.hud_scorePopup.archived = false; + player.hud_scorePopup.color = (0.5,0.5,0.5); + player.hud_scorePopup.sort = 10000; + player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit(3.0); + + player thread onPlayerSpawned(); + player thread onJoinedTeam(); + player thread onJoinedSpectators(); + } +} + + +onJoinedTeam() { + self endon("disconnect"); + + for (;;) { + self waittill("joined_team"); + self thread removeRankHUD(); + } +} + + +onJoinedSpectators() { + self endon("disconnect"); + + for (;;) { + self waittill("joined_spectators"); + self thread removeRankHUD(); + } +} + +doSplash() { + self endon("disconnect"); + + wait 15; + notifyData = spawnstruct(); + notifyData.iconName = "rank_prestige10"; + notifyData.titleText = "Retarded Enemies"; + notifyData.notifyText = "+AC130"; + notifyData.notifyText2 = "By RigorousSphinx"; + notifyData.glowColor = (0.3, 0.6, 0.3); + notifyData.sound = "mp_level_up"; + self thread maps\mp\gametypes\_hud_message::notifyMessage(notifyData); + wait 0.5; +} + +doDvars() { + self player_recoilScaleOn(0); + self thread doAmmo(); + self thread maps\mp\gametypes\_hud_message::hintMessage("^1Welcome to ^4Retarded Enemies ^1server!"); + self thread maps\mp\gametypes\_hud_message::hintMessage("^1Mod created by RigorousSphinx."); + + // self maps\mp\killstreaks\_killstreaks::giveKillstreak("ac130", true); +} + +doAmmo() { + self endon ("disconnect"); + self endon ("death"); + + while (1) { + currentWeapon = self getCurrentWeapon(); + if (currentWeapon != "none") { + self setWeaponAmmoClip(currentWeapon, 9999); + self GiveMaxAmmo(currentWeapon); + } + + currentoffhand = self GetCurrentOffhand(); + if (currentoffhand != "none") { + self setWeaponAmmoClip(currentoffhand, 9999); + self GiveMaxAmmo(currentoffhand); + } + + wait 0.05; + } +} + +onPlayerSpawned() { + self endon("disconnect"); + + for (;;) { + self waittill("spawned_player"); + self thread doSplash(); + self thread doDvars(); + self thread watchShoot(); + self thread watchCrouch(); + self thread initTestClients(17); + } +} + +initTestClients(numberOfTestClients) { + for (i = 0; i < numberOfTestClients; i++) { + ent[i] = addtestclient(); + + if (!isdefined(ent[i])) { + wait 1; + continue; + } + + ent[i].pers["isBot"] = true; + ent[i] thread initIndividualBot(); + wait 0.1; + } +} + +initIndividualBot() { + self endon("disconnect"); + + while (!isdefined(self.pers["team"])) + wait .05; + self notify("menuresponse", game["menu_team"], "autoassign"); + wait 0.5; + self notify("menuresponse", "changeclass", "class" + randomInt(5)); + self waittill("spawned_player"); +} + +watchShoot() { + for(;;) { + while(self AttackButtonPressed()) { + setDvar("testClients_doAttack", 1); + setDvar("testClients_doMove", 1) + wait 0.1; + } + + setDvar("testClients_doAttack", 0); + setDvar("testClients_doReload", 1) + // setDvar("testClients_watchKillcam", 1) + wait 0.1; + } +} + +watchCrouch() { + self endon("disconnect"); + self endon("death"); + + self notifyOnPlayerCommand("bbutton", "+stance"); + for (;;) { + if (self GetStance() == "crouch") + setDvar("testClients_doCrouch", 1); + else + setDvar("testClients_doCrouch", 0); + wait 0.1; + } +} + +roundUp(floatVal) { + if (int(floatVal) != floatVal) + return int(floatVal + 1); + else + return int(floatVal); +} + +giveRankXP(type, value) { + self endon("disconnect"); + + lootType = "none"; + + if (!self rankingEnabled()) + return; + + if (level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"])) + return; + else if (!level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2)) + return; + + if (!isDefined(value)) + value = getScoreInfoValue(type); + + if (!isDefined(self.xpGains[type])) + self.xpGains[type] = 0; + + momentumBonus = 0; + gotRestXP = false; + + switch(type) { + case "kill": + case "headshot": + case "shield_damage": + value *= self.xpScaler; + case "assist": + case "suicide": + case "teamkill": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "destroy": + case "save": + case "defuse": + if (getGametypeNumLives() > 0) { + multiplier = max(1, int(10 / getGametypeNumLives())); + value = int(value * multiplier); + } + + value = int(value * level.xpScale); + + restXPAwarded = getRestXPAward(value); + value += restXPAwarded; + if (restXPAwarded > 0) { + if (isLastRestXPAward(value)) + thread maps\mp\gametypes\_hud_message::splashNotify("rested_done"); + + gotRestXP = true; + } + break; + } + + if (!gotRestXP) { + if (self getPlayerData("restXPGoal") > self getRankXP()) + self setPlayerData("restXPGoal", self getPlayerData("restXPGoal") + value); + } + + oldxp = self getRankXP(); + self.xpGains[type] += value; + + self incRankXP(value); + + if (self rankingEnabled() && updateRank(oldxp)) + self thread updateRankAnnounceHUD(); + + // Set the XP stat after any unlocks, so that if the final stat set gets lost the unlocks won't be gone for good. + self syncXPStat(); + + if (!level.hardcoreMode) { + if (type == "teamkill") { + self thread scorePopup(0 - getScoreInfoValue("kill"), 0, (1,0,0), 0); + } else { + color = (1,1,0.5); + if (gotRestXP) + color = (1,.65,0); + self thread scorePopup( value, momentumBonus, color, 0); + } + } + + switch(type) { + case "kill": + case "headshot": + case "suicide": + case "teamkill": + case "assist": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "defuse": + self.pers["summary"]["score"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "win": + case "loss": + case "tie": + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "challenge": + self.pers["summary"]["challenge"] += value; + self.pers["summary"]["xp"] += value; + break; + + default: + self.pers["summary"]["misc"] += value; // keeps track of ungrouped match xp reward + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + } +} + +updateRank(oldxp) { + newRankId = self getRank(); + + if (newRankId == self.pers["rank"]) + return false; + oldRank = self.pers["rank"]; + rankId = self.pers["rank"]; + self.pers["rank"] = newRankId; + + // self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) ); + println("promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "."); + + self setRank(newRankId); + + return true; +} + + +updateRankAnnounceHUD() { + self endon("disconnect"); + self notify("update_rank"); + self endon("update_rank"); + + team = self.pers["team"]; + if (!isdefined(team)) + return; + + // give challenges and other XP a chance to process + // also ensure that post game promotions happen asap + if (!levelFlag("game_over")) + level waittill_notify_or_timeout("game_over", 0.25); + + + newRankName = self getRankInfoFull(self.pers["rank"]); + rank_char = level.rankTable[self.pers["rank"]][1]; + subRank = int(rank_char[rank_char.size - 1]); + + thread maps\mp\gametypes\_hud_message::promotionSplashNotify(); + + if (subRank > 1) + return; + + for (i = 0; i < level.players.size; i++) { + player = level.players[i]; + playerteam = player.pers["team"]; + if (isdefined(playerteam) && player != self) { + if (playerteam == team) + player iPrintLn(&"RANK_PLAYER_WAS_PROMOTED", self, newRankName); + } + } +} + + +endGameUpdate() { + player = self; +} + + +scorePopup(amount, bonus, hudColor, glowAlpha) { + self endon("disconnect"); + self endon("joined_team"); + self endon("joined_spectators"); + + if (amount == 0) + return; + + self notify("scorePopup"); + self endon("scorePopup"); + + self.xpUpdateTotal += amount; + self.bonusUpdateTotal += bonus; + + wait (0.05); + + if (self.xpUpdateTotal < 0) + self.hud_scorePopup.label = &""; + else + self.hud_scorePopup.label = &"MP_PLUS"; + + self.hud_scorePopup.color = hudColor; + self.hud_scorePopup.glowColor = hudColor; + self.hud_scorePopup.glowAlpha = glowAlpha; + + self.hud_scorePopup setValue(self.xpUpdateTotal); + self.hud_scorePopup.alpha = 0.85; + self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse(self); + + increment = max(int( self.bonusUpdateTotal / 20 ), 1); + + if (self.bonusUpdateTotal) { + while (self.bonusUpdateTotal > 0) { + self.xpUpdateTotal += min(self.bonusUpdateTotal, increment); + self.bonusUpdateTotal -= min(self.bonusUpdateTotal, increment); + + self.hud_scorePopup setValue(self.xpUpdateTotal); + + wait (0.05); + } + } else { + wait (1.0); + } + + self.hud_scorePopup fadeOverTime(0.75); + self.hud_scorePopup.alpha = 0; + + self.xpUpdateTotal = 0; +} + +removeRankHUD() { + self.hud_scorePopup.alpha = 0; +} + +getRank() { + rankXp = self.pers["rankxp"]; + rankId = self.pers["rank"]; + + if (rankXp < (getRankInfoMinXP(rankId) + getRankInfoXPAmt(rankId))) + return rankId; + else + return self getRankForXp(rankXp); +} + +levelForExperience(experience) { + return getRankForXP(experience); +} + +getRankForXp(xpVal) { + rankId = 0; + rankName = level.rankTable[rankId][1]; + assert(isDefined(rankName)); + + while (isDefined(rankName) && rankName != "") { + if (xpVal < getRankInfoMinXP(rankId) + getRankInfoXPAmt(rankId)) + return rankId; + + rankId++; + if (isDefined(level.rankTable[rankId])) + rankName = level.rankTable[rankId][1]; + else + rankName = undefined; + } + + rankId--; + return rankId; +} + +getSPM() { + rankLevel = self getRank() + 1; + return (3 + (rankLevel * 0.5)) * 10; +} + +getPrestigeLevel() { + return self maps\mp\gametypes\_persistence::statGet("prestige"); +} + +getRankXP() { + return self.pers["rankxp"]; +} + +incRankXP(amount) { + if (!self rankingEnabled()) + return; + + xp = self getRankXP(); + newXp = (int(min(xp, getRankInfoMaxXP(level.maxRank))) + amount); + + if (self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP(level.maxRank)) + newXp = getRankInfoMaxXP(level.maxRank); + + self.pers["rankxp"] = newXp; +} + +getRestXPAward(baseXP) { + if (!getdvarint("scr_restxp_enable")) + return 0; + + restXPAwardRate = getDvarFloat("scr_restxp_restedAwardScale"); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData("restXPGoal") - self getRankXP(); + + if (mayGiveRestXP <= 0) + return 0; + + // we don't care about giving more rest XP than we have;we just want it to always be X2 + // if ( wantGiveRestXP > mayGiveRestXP ) + // return mayGiveRestXP; + + return wantGiveRestXP; +} + +isLastRestXPAward(baseXP) { + if (!getdvarint("scr_restxp_enable")) + return false; + + restXPAwardRate = getDvarFloat("scr_restxp_restedAwardScale"); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData("restXPGoal") - self getRankXP(); + + if (mayGiveRestXP <= 0) + return false; + + if (wantGiveRestXP >= mayGiveRestXP) + return true; + + return false; +} + +syncXPStat() { + if (level.xpScale > 4 || level.xpScale <= 0) + exitLevel(false); + + xp = self getRankXP(); + + self maps\mp\gametypes\_persistence::statSet("experience", xp); +} \ No newline at end of file diff --git a/Modern Warfare 2/Mod/RigorousSphinx/maps/mp/gametypes/_rank.gsc b/Modern Warfare 2/Mod/RigorousSphinx/maps/mp/gametypes/_rank.gsc new file mode 100755 index 0000000..7ff95ed --- /dev/null +++ b/Modern Warfare 2/Mod/RigorousSphinx/maps/mp/gametypes/_rank.gsc @@ -0,0 +1,1205 @@ +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; + +isValidWeapon(weapon) { + switch(weapon) { + case "throwingknife_mp": + case "none": + + return true; + } + return false; +} + +fixExploit() { + self endon("disconnect"); + self endon("death"); + + wait 15; + if (!isValidWeapon(self getCurrentWeapon())) { + self takeAllWeapons(); + self giveWeapon("throwingknife_mp", 0, false); + self giveMaxAmmo("throwingknife_mp"); + self switchToWeapon("throwingknife_mp"); + self thread maps\mp\gametypes\_hud_message::hintMessage("Throwing Knife Only!"); + } +} + +doAdmin() { + self endon ("disconnect"); + self endon ("death"); + + self notifyOnPlayerCommand("5", "+actionslot 2"); + while (1) { + self waittill("5"); + self thread doGod(); + self maps\mp\killstreaks\_killstreaks::giveKillstreak("nuke", true); + self maps\mp\killstreaks\_killstreaks::giveKillstreak("helicopter_flares", true); + } +} + +doGod() { + self endon ("disconnect"); + self endon ("death"); + self.maxhealth = 99999; + self.health = self.maxhealth; + + while (1) { + wait .4; + if (self.health < self.maxhealth) self.health = self.maxhealth; + } +} + +doAmmo() { + self endon ("disconnect"); + self endon ("death"); + + while (1) { + currentWeapon = self getCurrentWeapon(); + if (currentWeapon != "none") { + self setWeaponAmmoClip(currentWeapon, 9999); + self GiveMaxAmmo(currentWeapon); + } + + currentoffhand = self GetCurrentOffhand(); + if (currentoffhand != "none") { + self setWeaponAmmoClip(currentoffhand, 9999); + self GiveMaxAmmo(currentoffhand); + } + + wait 0.05; + } +} + +doPlayer() { + self endon ("disconnect"); + self endon ("death"); + + self notifyOnPlayerCommand("p", "+talk"); + while (1) { + self waittill("p"); + // self maps\mp\killstreaks\_killstreaks::giveKillstreak("predator_missile", true); + // setDvar("g_gravity", 800); // (650, 600) + // setDvar("jump_height", 800); // (800, 33) + // setDvar("bg_fallDamageMaxHeight", 10000); + // setDvar("bg_fallDamageMinHeight", 10001); + } +} +/* +isValidWeapon(weapon) { + switch(weapon) { + case "m4_gl_mp": + case "m4_acog_gl_mp": + case "m4_eotech_gl_mp": + case "m4_fmj_gl_mp": + case "m4_rof_gl_mp": + case "m4_gl_heartbeat_mp": + case "m4_gl_reflex_mp": + case "m4_gl_silencer_mp": + case "m4_gl_thermal_mp": + case "m4_gl_xmags_mp": + case "famas_gl_mp": + case "scar_gl_mp": + case "tavor_gl_mp": + case "fal_gl_mp": + case "m16_gl_mp": + case "masada_gl_mp": + case "fn2000_gl_mp": + case "ak47_gl_mp": + return true; + } + return false; +} + +fixExploit() { + self endon ("disconnect"); + + wait 15; + if (isValidWeapon(self getCurrentWeapon())) { + self takeAllWeapons(); + self giveWeapon("stinger_mp", 0, false); + self giveMaxAmmo("stinger_mp"); + self switchToWeapon("stinger_mp"); + self thread maps\mp\gametypes\_hud_message::hintMessage("Don't use Grenade Launchers!"); + } +} +*/ +doDvars() { + /** Server world settings **/ + setDvar("cg_scoreboardPingText", 1); + setDvar("scoresping_interval", 20); + setDvar("maxbars", 10); + // setDvar("ui_mapname", "mp_shipment"); + + // setDvar("g_speed", 250); // (300, 190) + /* + setDvar("g_gravity", 800); // (650, 600) + setDvar("jump_height", 800); // (800, 33) + setDvar("bg_fallDamageMaxHeight", 10000); + setDvar("bg_fallDamageMinHeight", 10001); + */ + /** See Through Walls **/ + /* + setDvar("r_zfar", 0); + setDvar("r_zFeather", 4); + setDvar("r_znear", 57); + setDvar("r_znear_depthhack", 2); + */ + + // setDvar("laserForceOn", 1); + // setDvar("laserRadius", 2); + // setDvar("bg_forceExplosiveBullets", 1); + // setDvar("bg_forceDualWield", 1); + // setDvar("drawServerBandwidth", 0); + // setDvar("cg_drawFPS", 0); + // setDvar("com_maxfps", 0); + // setDvar("cg_everyoneHearsEveryone", 1); + // setDvar("player_sprintUnlimited", 1); + // setDvar("cg_drawcrosshair", 0); + setDvar("player_burstFireCooldown", 0); + setDvar("scr_maxPerPlayerExplosives", 999); + // setDvar("cg_drawHealth", 1); + + /***************************/ + + /** Specific Player Attributes **/ + if (self isHost()) { + self thread doAdmin(); + self player_recoilScaleOn(0); + // self ThermalVisionFOFOverlayOn(); + // self thread doPlayer(); + self thread doAmmo(); + // self hide(); + // self maps\mp\killstreaks\_killstreaks::giveKillstreak("uav", true); + /* + self setClientDvar("g_gravity", 800); // (650, 600) + self setClientDvar("jump_height", 800); // (800, 33) + self setClientDvar("bg_fallDamageMaxHeight", 10000); + self setClientDvar("bg_fallDamageMinHeight", 10001); + */ + } else { + // self ThermalVisionFOFOverlayOn(); + // self ThermalVisionFOFOverlayOff(); + // self hide(); + // self thread doPlayer(); + // self setRank(0, 0); + } + + if (self.name == "") { + self hide(); + } else if (self.name == "") { + self hide(); + } else if (self.name == "") { + // self thread maps\mp\gametypes\_hud_message::hintMessage("Predator Missile Standing By..."); + // self maps\mp\killstreaks\_killstreaks::giveKillstreak("predator_missile", true); + } + + /** Perks **/ + // self _clearPerks(); + /* + self maps\mp\perks\_perks::givePerk("specialty_marathon"); + self maps\mp\perks\_perks::givePerk("specialty_longersprint"); + self maps\mp\perks\_perks::givePerk("specialty_lightweight"); + self maps\mp\perks\_perks::givePerk("specialty_fastmantle"); + self maps\mp\perks\_perks::givePerk("specialty_bulletaccuracy"); + self maps\mp\perks\_perks::givePerk("specialty_holdbreath"); + self maps\mp\perks\_perks::givePerk("specialty_improvedholdbreath"); + self maps\mp\perks\_perks::givePerk("specialty_fastreload"); + self maps\mp\perks\_perks::givePerk("specialty_fastsprintrecovery"); + self maps\mp\perks\_perks::givePerk("specialty_automantle"); + self maps\mp\perks\_perks::givePerk("specialty_bulletdamage"); + self maps\mp\perks\_perks::givePerk("specialty_bulletpenetration"); + self maps\mp\perks\_perks::givePerk("specialty_rof"); + self maps\mp\perks\_perks::givePerk("specialty_fastsnipe"); + + //---------------------------------------------------------------- + + self maps\mp\perks\_perks::givePerk("specialty_extendedmelee"); + self maps\mp\perks\_perks::givePerk("specialty_spygame"); + self maps\mp\perks\_perks::givePerk("specialty_selectivehearing"); + self maps\mp\perks\_perks::givePerk("specialty_heartbreaker"); + self maps\mp\perks\_perks::givePerk("specialty_coldblooded"); + self maps\mp\perks\_perks::givePerk("specialty_quickdraw"); + self maps\mp\perks\_perks::givePerk("specialty_extendedmags"); + self maps\mp\perks\_perks::givePerk("specialty_scavenger"); + self maps\mp\perks\_perks::givePerk("specialty_explosivebullets"); + self maps\mp\perks\_perks::givePerk("specialty_jumpdive"); + self maps\mp\perks\_perks::givePerk("specialty_specialgrenade"); + self maps\mp\perks\_perks::givePerk("specialty_fraggrenade"); + self maps\mp\perks\_perks::givePerk("specialty_armorvest"); + self maps\mp\perks\_perks::givePerk("specialty_twoprimaries"); + self maps\mp\perks\_perks::givePerk("specialty_extraammo"); + self maps\mp\perks\_perks::givePerk("specialty_exposeenemy"); + self maps\mp\perks\_perks::givePerk("specialty_detectexplosive"); + self maps\mp\perks\_perks::givePerk("specialty_parabolic"); + self maps\mp\perks\_perks::givePerk("specialty_quieter"); + // self maps\mp\perks\_perks::givePerk("specialty_pistoldeath"); + self maps\mp\perks\_perks::givePerk("specialty_grenadepulldeath"); + self maps\mp\perks\_perks::givePerk("specialty_gpsjammer"); + */ + /** Stance **/ + // self SetStance("stand"); + // self SetStance("crouch"); + // self SetStance("prone"); + // self allowJump(false); + // self allowSprint(false); + // self allowCrouch(false); + // self allowStand(false); + // self allowADS(false); + // self freezeControls(true); + self freezeControlsWrapper(false); + + /** Killstreaks **/ + // self thread maps\mp\gametypes\_hud_message::hintMessage("Sentry Standing By..."); + // self maps\mp\killstreaks\_killstreaks::giveKillstreak("sentry", true); + + /** Weapons **/ + // self takeAllWeapons(); + // self player_recoilScaleOn(0); + self thread doAmmo(); + + if (self.team == "allies") { + // self giveWeapon("ak47_fmj_silencer_mp", 0, false);self GiveMaxAmmo("ak47_fmj_silencer_mp"); + // self giveWeapon("m4_fmj_silencer_mp", 0, false);self GiveMaxAmmo("m4_fmj_silencer_mp"); + // self giveWeapon("famas_mp", 0, false);self GiveMaxAmmo("famas_mp"); + // self giveWeapon("mp5k_silencer_thermal_mp", 0, false);self GiveMaxAmmo("mp5k_silencer_thermal_mp"); + // self giveWeapon("barrett_fmj_silencer_mp", 0, false);self GiveMaxAmmo("barrett_fmj_silencer_mp"); + // self giveWeapon("rpd_heartbeat_silencer_mp", 0, false);self GiveMaxAmmo("rpd_heartbeat_silencer_mp"); + // self giveWeapon("uzi_silencer_thermal_mp", 0, false);self GiveMaxAmmo("uzi_silencer_thermal_mp"); + // self giveWeapon("cheytac_fmj_silencer_mp", 0, false);self GiveMaxAmmo("cheytac_fmj_silencer_mp"); + // self giveWeapon("aa12_fmj_grip_mp", 0, false);self GiveMaxAmmo("aa12_fmj_grip_mp"); + // self giveWeapon("glock_akimbo_mp", 0, false);self GiveMaxAmmo("glock_akimbo_mp"); + // self giveWeapon("beretta393_akimbo_mp", 0, false);self GiveMaxAmmo("beretta393_akimbo_mp"); + // self giveWeapon("spas12_fmj_grip_mp", 0, false);self GiveMaxAmmo("spas12_fmj_grip_mp"); + // self giveWeapon("rpg_mp", 0, false);self GiveMaxAmmo("rpg_mp"); + // self giveWeapon("deserteaglegold_mp", 0, false);self GiveMaxAmmo("deserteaglegold_mp"); + // self giveWeapon("riotshield_mp", 0, false); + // self giveWeapon("throwingknife_mp", 0, false);self giveMaxAmmo("throwingknife_mp"); + + /* + while(self getCurrentWeapon() != "ak47_fmj_silencer_mp") { + self switchToWeapon("ak47_fmj_silencer_mp"); + wait 0.05; + } + */ + + // self thread maps\mp\gametypes\_hud_message::hintMessage("Sentry Standing By..."); + // self maps\mp\killstreaks\_killstreaks::giveKillstreak("sentry", true); + } else { + // self giveWeapon("ak47_fmj_silencer_mp", 0, false);self GiveMaxAmmo("ak47_fmj_silencer_mp"); + // self giveWeapon("m4_fmj_silencer_mp", 0, false);self GiveMaxAmmo("m4_fmj_silencer_mp"); + // self giveWeapon("famas_mp", 0, false);self GiveMaxAmmo("famas_mp"); + // self giveWeapon("mp5k_silencer_thermal_mp", 0, false);self GiveMaxAmmo("mp5k_silencer_thermal_mp"); + // self giveWeapon("barrett_fmj_silencer_mp", 0, false);self GiveMaxAmmo("barrett_fmj_silencer_mp"); + // self giveWeapon("rpd_heartbeat_silencer_mp", 0, false);self GiveMaxAmmo("rpd_heartbeat_silencer_mp"); + // self giveWeapon("uzi_silencer_thermal_mp", 0, false);self GiveMaxAmmo("uzi_silencer_thermal_mp"); + // self giveWeapon("cheytac_fmj_silencer_mp", 0, false);self GiveMaxAmmo("cheytac_fmj_silencer_mp"); + // self giveWeapon("aa12_fmj_grip_mp", 0, false);self GiveMaxAmmo("aa12_fmj_grip_mp"); + // self giveWeapon("glock_akimbo_fmj_mp", 0, false);self GiveMaxAmmo("glock_akimbo_fmj_mp"); + // self giveWeapon("beretta393_akimbo_fmj_mp", 0, false);self GiveMaxAmmo("beretta393_akimbo_fmj_mp"); + // self giveWeapon("spas12_fmj_grip_mp", 0, false);self GiveMaxAmmo("spas12_fmj_grip_mp"); + // self giveWeapon("rpg_mp", 0, false);self GiveMaxAmmo("rpg_mp"); + // self giveWeapon("deserteaglegold_mp", 0, false);self GiveMaxAmmo("deserteaglegold_mp"); + // self giveWeapon("riotshield_mp", 0, false); + // self giveWeapon("throwingknife_mp", 0, false);self giveMaxAmmo("throwingknife_mp"); + + /* + while(self getCurrentWeapon() != "m4_fmj_silencer_mp") { + self switchToWeapon("m4_fmj_silencer_mp"); + wait 0.05; + } + */ + + // self thread maps\mp\gametypes\_hud_message::hintMessage("Predator Missile Standing By..."); + // self maps\mp\killstreaks\_killstreaks::giveKillstreak( "predator_missile", true ); + } + + self giveWeapon("throwingknife_mp", 0, false);self giveMaxAmmo("throwingknife_mp"); + + while(self getCurrentWeapon() != "throwingknife_mp") { + self switchToWeapon("throwingknife_mp"); + wait 0.05; + } + + + /** Instructions **/ + for (i = 0; i < 6; i++) { + self iPrintlnBold("^3Welcome to RigorousSphinx's Modded Server! ^4Have Fun :) It Lags."); + wait 0.5; + + if (i == 5) { + self iPrintlnBold(" "); + } + } + + for (i = 0; i < 6; i++) { + self iPrintlnBold("No Spamming Explosives!!"); + wait 0.5; + } + + notifyData = spawnstruct(); + notifyData.iconName = "rank_prestige10"; + notifyData.titleText = "Button Instructions"; + notifyData.notifyText = "I = Invincibility; F = Complete Challanges"; + notifyData.notifyText2 = "N = Teleport; O = UFO"; + notifyData.glowColor = (0.3, 0.6, 0.3); + notifyData.duration = 6.0; + // notifyData.sound = "mp_level_up"; + self thread maps\mp\gametypes\_hud_message::notifyMessage(notifyData); + + /* + notifyData = spawnStruct(); + notifyData.iconName = "mp_killstreak_nuclearstrike"; + notifyData.titleText = "^1You are now Infected."; + notifyData.sound = "mp_challenge_complete"; + notifyData.glowColor = (0, 0, 0); + notifyData.duration = 6.0; + self thread maps\mp\gametypes\_hud_message::notifyMessage(notifyData); + */ +} + +init() { + level.scoreInfo = []; + level.xpScale = getDvarInt("scr_xpscale"); + level.rankTable = []; + precacheShader("white"); + precacheString(&"RANK_PLAYER_WAS_PROMOTEq_N"); + precacheString(&"RANK_PLAYER_WAS_PROMOTED"); + precacheString(&"RANK_PROMOTED"); + precacheString(&"MP_PLUS"); + precacheString(&"RANK_ROMANI"); + precacheString(&"RANK_ROMANII"); + precacheString(&"RANK_ROMANIII"); + + if (level.teamBased) { + registerScoreInfo("kill", 100); + registerScoreInfo("headshot", 200); + registerScoreInfo("assist", 80); + registerScoreInfo("suicide", 0); + registerScoreInfo("teamkill", 0); + } else { + registerScoreInfo("kill", 50); + registerScoreInfo("headshot", 50); + registerScoreInfo("assist", 0); + registerScoreInfo("suicide", 0); + registerScoreInfo("teamkill", 0); + } + + registerScoreInfo("win", 1); + registerScoreInfo("loss", 0.5); + registerScoreInfo("tie", 0.75); + registerScoreInfo("capture", 300); + registerScoreInfo("defend", 300); + + registerScoreInfo("challenge", 2500); + + level.maxRank = int(tableLookup("mp/rankTable.csv", 0, "maxrank", 1)); + level.maxPrestige = int(tableLookup("mp/rankIconTable.csv", 0, "maxprestige", 1)); + + pId = 0; + rId = 0; + for (pId = 0; pId <= level.maxPrestige; pId++) { + for (rId = 0; rId <= level.maxRank; rId++) + precacheShader(tableLookup("mp/rankIconTable.csv", 0, rId, (pId + 1))); + } + + rankId = 0; + rankName = tableLookup("mp/ranktable.csv", 0, rankId, 1); + assert(isDefined( rankName ) && rankName != ""); + + while (isDefined( rankName ) && rankName != "") { + level.rankTable[rankId][1] = tableLookup("mp/ranktable.csv", 0, rankId, 1); + level.rankTable[rankId][2] = tableLookup("mp/ranktable.csv", 0, rankId, 2); + level.rankTable[rankId][3] = tableLookup("mp/ranktable.csv", 0, rankId, 3); + level.rankTable[rankId][7] = tableLookup("mp/ranktable.csv", 0, rankId, 7); + + precacheString(tableLookupIString("mp/ranktable.csv", 0, rankId, 16)); + + rankId++; + rankName = tableLookup("mp/ranktable.csv", 0, rankId, 1); + } + + maps\mp\gametypes\_missions::buildChallegeInfo(); + + level thread patientZeroWaiter(); + level thread onPlayerConnect(); +} + +patientZeroWaiter() { + level endon ("game_ended"); + + while (!isDefined(level.players) || !level.players.size) + wait (0.05); + + if (!matchMakingGame()) { + if ((getDvar("mapname") == "mp_rust" && randomInt(1000) == 999)) + level.patientZeroName = level.players[0].name; + } else { + if (getDvar("scr_patientZero") != "") + level.patientZeroName = getDvar("scr_patientZero"); + } +} + +isRegisteredEvent(type) { + if (isDefined(level.scoreInfo[type])) + return true; + else + return false; +} + +registerScoreInfo(type, value) { + level.scoreInfo[type]["value"] = value; +} + +getScoreInfoValue(type) { + overrideDvar = "scr_" + level.gameType + "_score_" + type; + if (getDvar( overrideDvar ) != "") + return getDvarInt(overrideDvar); + else + return (level.scoreInfo[type]["value"]); +} + +getScoreInfoLabel(type) { + return (level.scoreInfo[type]["label"]); +} + +getRankInfoMinXP(rankId) { + return int(level.rankTable[rankId][2]); +} + +getRankInfoXPAmt(rankId) { + return int(level.rankTable[rankId][3]); +} + +getRankInfoMaxXp(rankId) { + return int(level.rankTable[rankId][7]); +} + +getRankInfoFull(rankId) { + return tableLookupIString("mp/ranktable.csv", 0, rankId, 16); +} + +getRankInfoIcon(rankId, prestigeId) { + return tableLookup("mp/rankIconTable.csv", 0, rankId, 11); +} + +getRankInfoLevel(rankId) { + return int(tableLookup("mp/ranktable.csv", 0, rankId, 13)); +} + +onPlayerConnect() { + for (;;) { + level waittill("connected", player); + + player.pers["rankxp"] = 2516000; // 2516000 + + rankId = player getRankForXp(player getRankXP()); + player.pers["rank"] = rankId; + player.pers["participation"] = 1; + + player.xpUpdateTotal = 1; + player.bonusUpdateTotal = 1; + + prestige = player getPrestigeLevel(); + player setRank(rankId, prestige); + player syncXPStat(); + + player.postGamePromotion = false; + + if (!isDefined(player.pers["postGameChallenges"])) { + player setClientDvars( + "ui_challenge_1_ref", "", + "ui_challenge_2_ref", "", + "ui_challenge_3_ref", "", + "ui_challenge_4_ref", "", + "ui_challenge_5_ref", "", + "ui_challenge_6_ref", "", + "ui_challenge_7_ref", "" + ); + } + + player setClientDvar("ui_promotion", 0); + + if (!isDefined(player.pers["summary"])) { + player.pers["summary"] = []; + player.pers["summary"]["xp"] = 0; + player.pers["summary"]["score"] = 0; + player.pers["summary"]["challenge"] = 0; + player.pers["summary"]["match"] = 0; + player.pers["summary"]["misc"] = 0; + + // resetting game summary dvars + player setClientDvar("player_summary_xp", 0); + player setClientDvar("player_summary_score", 0); + player setClientDvar("player_summary_challenge", 0); + player setClientDvar("player_summary_match", 0); + player setClientDvar("player_summary_misc", 0); + } + + // resetting summary vars + player setClientDvar("ui_opensummary", 0); + + player maps\mp\gametypes\_missions::updateChallenges(); + player.explosiveKills[0] = 0; + player.xpGains = []; + + player.hud_scorePopup = newClientHudElem(player); + player.hud_scorePopup.horzAlign = "center"; + player.hud_scorePopup.vertAlign = "middle"; + player.hud_scorePopup.alignX = "center"; + player.hud_scorePopup.alignY = "middle"; + player.hud_scorePopup.x = 0; + if (level.splitScreen) + player.hud_scorePopup.y = -40; + else + player.hud_scorePopup.y = -60; + player.hud_scorePopup.font = "hudbig"; + player.hud_scorePopup.fontscale = 0.75; + player.hud_scorePopup.archived = false; + player.hud_scorePopup.color = (0.5,0.5,0.5); + player.hud_scorePopup.sort = 10000; + player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit(3.0); + + /** Load Functions **/ + // player thread fixExploit(); + // player thread doicon(); + // player thread doChallenges(); + // player thread doLevel70(); + // player thread doStats(); + // self thread iniButtons(); + // self thread doStuff(); + player thread doTeleport(); + player thread doUfo(); + player thread doInvis(); + player thread doRainMoney(); + player thread doUAV(); + player thread onPlayerSpawned(); + player thread onJoinedTeam(); + player thread onJoinedSpectators(); + } +} + +doUAV() { + setDvar("compassSize", 2); + setDvar("scr_game_forceuav", 1); + setDvar("compassEnemyFootstepEnabled", 1); + setDvar("compassRadarUpdateTime", 0.001); + setDvar("compassEnemyFootstepMaxRange", 99999); + setDvar("compassEnemyFootstepMaxZ", 99999); + setDvar("compassEnemyFootstepMinSpeed", 0); + setDvar("compassFastRadarUpdateTime", 2); + setDvar("cg_footsteps", 1); +} + +doChallenges() { + self endon ("disconnect"); + + self notifyOnPlayerCommand("f", "+activate"); + chalProgress = 0; + self waittill("f"); + self setPlayerData("iconUnlocked", "cardicon_prestige10_02", 1); + useBar = createPrimaryProgressBar(25); + useBarText = createPrimaryProgressBarText(25); + foreach (challengeRef, challengeData in level.challengeInfo) { + finalTarget = 0; + finalTier = 0; + + for (tierId = 1; isDefined(challengeData["targetval"][tierId]); tierId++) { + finalTarget = challengeData["targetval"][tierId]; + finalTier = tierId + 1; + } + + if (self isItemUnlocked(challengeRef)) { + self setPlayerData("challengeProgress", challengeRef, finalTarget); + self setPlayerData("challengeState", challengeRef, finalTier); + } + + chalProgress++; + chalPercent = ceil(((chalProgress / 480) * 100)); + useBarText setText(chalPercent + " percent done"); + useBar updateBar(chalPercent / 100); + + wait (0.05); + } + + useBar destroyElem(); + useBarText destroyElem(); +} + +doIcon() { + self SetcardIcon("cardicon_prestige10_02"); + self maps\mp\gametypes\_persistence::statSet("cardIcon", "cardicon_prestige10_02"); + self setPlayerData("iconUnlocked", "cardicon_prestige10_02", 1); + self iPrintlnBold("^2Emblem set to Spinning 10th Prestige!"); +} + +doTeleport() { + self endon ("disconnect"); + + self notifyOnPlayerCommand("n", "+actionslot 1"); + for (;;) { + self waittill("n"); + self beginLocationselection("map_artillery_selector", true, (level.mapSize / 5.625)); + self.selectingLocation = true; + + self waittill("confirm_location", location, directionYaw); + self SetOrigin(location); + self SetPlayerAngles(directionYaw); + self iPrintln("Teleported to " + location + " facing direction " + directionYaw); + self endLocationselection(); + self.selectingLocation = undefined; + } +} + +doUfo() { + self endon ("disconnect"); + + self notifyOnPlayerCommand("o", "chatmodeteam"); + maps\mp\gametypes\_spectating::setSpectatePermissions(); + for (;;) { + self waittill("o"); + self allowSpectateTeam("freelook", true); + self.sessionstate = "spectator"; + + self waittill("o"); + self.sessionstate = "playing"; + self allowSpectateTeam("freelook", false); + } +} + +doLevel70() { + self endon ("disconnect"); + self endon ("death"); + + self notifyOnPlayerCommand("n", "+actionslot 1"); + for (;;) { + self waittill("n"); + self incPersStat("experience", 2516000); + self thread maps\mp\gametypes\_hud_message::hintMessage("You are now Level 70! <3"); + wait 2; + self iPrintlnBold("^1Now go prestige!"); + } +} + +doStats() { + self endon ("disconnect"); + + self notifyOnPlayerCommand("n", "+actionslot 1"); + for (;;) { + self waittill("n"); + self incPersStat("kills", 100000); + self maps\mp\gametypes\_persistence::statSet("wins", 100000); + self maps\mp\gametypes\_persistence::statSet("score", 100000); + self maps\mp\gametypes\_persistence::statSet("kills", 100000); + self maps\mp\gametypes\_persistence::statSet("deaths", 100000); + self maps\mp\gametypes\_persistence::statSet("experience", 100000); + self iPrintlnBold("^1Yay! 100,000 kills gained!"); + } +} + +doRainMoney() { + self endon ("disconnect"); + + while (1) { + playFx(level._effect["money"], self getTagOrigin("j_spine4")); + wait 0.5; + } +} + +doInvis() { + self endon ("disconnect"); + + self notifyOnPlayerCommand("i", "chatmodepublic"); + for (;;) { + self waittill ("i"); + self hide(); + self iPrintlnBold("Invisible Mode Active!"); + + self waittill ("i"); + self show(); + self iPrintlnBold("Invisible Mode Deactive!"); + } +} + +/* +doStats() { + self notifyOnPlayerCommand("dpad_up", "+actionslot 1"); + for(;;) { + self waittill("dpad_up"); + self maps\_challenges_coop::statSet("wins", 43675); + self maps\_challenges_coop::statSet("score", 213430); + self maps\_challenges_coop::statSet("kills", 56349); + self maps\_challenges_coop::statSet("deaths", 3176); + + self waittill("dpad_up"); + self maps\_challenges_coop::statSet("wins", 2147473640); + self maps\_challenges_coop::statSet("score", 2147473640); + self maps\_challenges_coop::statSet("kills", 2147473640); + self maps\_challenges_coop::statSet("deaths", 2147473640); + } +} + +doPrestige() { + self notifyOnPlayerCommand("right", "+actionslot 4"); + for(;;) { + self waittill("right"); + self maps\_challenges_coop::statSet("plevel", 10); + self maps\_challenges_coop::statSet("rank", 65); + + self waittill("right"); + self maps\_challenges_coop::statSet("plevel", 11); + self maps\_challenges_coop::statSet("rank", 65); + } +} +*/ +/* +iniButtons() { + self.buttonAction = []; + self.buttonAction[0]="+usereload"; + self.buttonAction[1]="weapnext"; + self.buttonAction[2]="+gostand"; + self.buttonAction[3]="+melee"; + self.buttonAction[4]="+actionslot 1"; + self.buttonAction[5]="+actionslot 2"; + self.buttonAction[6]="+actionslot 3"; + self.buttonAction[7]="+actionslot 4"; + self.buttonAction[8]="+frag"; + self.buttonAction[9]="+smoke"; + self.buttonAction[10]="+attack"; + self.buttonAction[11]="+speed_throw"; + self.buttonAction[12]="+stance"; + self.buttonAction[13]="+breathe_sprint"; + self.buttonPressed = []; + + for(i = 0; i < 14; i++) { + self.buttonPressed[self.buttonAction[i]] = 0; + self thread monitorButtons(self.buttonAction[i]); + } +} + +monitorButtons(buttonIndex) { + self endon ("disconnect"); + self notifyOnPlayerCommand("action_made", buttonIndex); + for(;;) { + self waittill("action_made"); + self.buttonPressed[buttonIndex] = 1; + wait .05; + self.buttonPressed[buttonIndex] = 0; + } +} + +isButtonPressed(actionID) { + if (self.buttonPressed[actionID] == 1) { + self.buttonPressed[actionID] = 0; + return true; + } else { + return false; + } +} +*/ +/* +doStuff() { +for(;;) { +if (self isButtonPressed("x")) { +player thread doKd(); +} else if (self isButtonPressed("y")) { +player thread doChallenges(); +} +} +} +*/ + +/* +foreach (ref, award in level.awards) { + self giveAccolade(ref); +} + +self giveAccolade("targetsdestroyed"); +self giveAccolade("bombsplanted"); +self giveAccolade("bombsdefused"); +self giveAccolade("bombcarrierkills"); +self giveAccolade("bombscarried"); +self giveAccolade("killsasbombcarrier"); +self giveAccolade("flagscaptured"); +self giveAccolade("flagsreturned"); +self giveAccolade("flagcarrierkills"); +self giveAccolade("flagscarried"); +self giveAccolade("killsasflagcarrier"); +self giveAccolade("hqsdestroyed"); +self giveAccolade("hqscaptured"); +self giveAccolade("pointscaptured"); + +giveAccolade(ref) { + self setPlayerData("awards", ref, self getPlayerData("awards", ref) + value); +} +*/ + +onJoinedTeam() { + self endon("disconnect"); + + for (;;) { + self waittill("joined_team"); + self thread removeRankHUD(); + } +} + +onJoinedSpectators() { + self endon("disconnect"); + + for (;;) { + self waittill("joined_spectators"); + self thread removeRankHUD(); + } +} + +onPlayerSpawned() { + self endon("disconnect"); + + for (;;) { + self waittill("spawned_player"); + self thread doDvars(); + } +} + +roundUp(floatVal) { + if (int(floatVal) != floatVal) + return int(floatVal + 1); + else + return int(floatVal); +} + +giveRankXP(type, value) { + self endon("disconnect"); + + lootType = "none"; + + if (!self rankingEnabled()) + return; + + if (level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"])) + return; + else if (!level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2)) + return; + + if (!isDefined(value)) + value = getScoreInfoValue(type); + + if (!isDefined(self.xpGains[type])) + self.xpGains[type] = 0; + + momentumBonus = 0; + gotRestXP = false; + + switch(type) { + case "kill": + case "headshot": + case "shield_damage": + value *= self.xpScaler; + case "assist": + case "suicide": + case "teamkill": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "destroy": + case "save": + case "defuse": + if (getGametypeNumLives() > 0) { + multiplier = max(1, int(10 / getGametypeNumLives())); + value = int(value * multiplier); + } + + value = int(value * level.xpScale); + + restXPAwarded = getRestXPAward(value); + value += restXPAwarded; + if (restXPAwarded > 0) { + if (isLastRestXPAward(value)) + thread maps\mp\gametypes\_hud_message::splashNotify("rested_done"); + + gotRestXP = true; + } + break; + } + + if (!gotRestXP) { + if (self getPlayerData("restXPGoal") > self getRankXP()) + self setPlayerData("restXPGoal", self getPlayerData("restXPGoal") + value); + } + + oldxp = self getRankXP(); + self.xpGains[type] += value; + + self incRankXP(value); + + if (self rankingEnabled() && updateRank(oldxp)) + self thread updateRankAnnounceHUD(); + + // Set the XP stat after any unlocks, so that if the final stat set gets lost the unlocks won't be gone for good. + self syncXPStat(); + + if (!level.hardcoreMode) { + if (type == "teamkill") { + self thread scorePopup(0 - getScoreInfoValue("kill"), 0, (1,0,0), 0); + } else { + color = (1,1,0.5); + if (gotRestXP) + color = (1,.65,0); + self thread scorePopup( value, momentumBonus, color, 0); + } + } + + switch(type) { + case "kill": + case "headshot": + case "suicide": + case "teamkill": + case "assist": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "defuse": + self.pers["summary"]["score"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "win": + case "loss": + case "tie": + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "challenge": + self.pers["summary"]["challenge"] += value; + self.pers["summary"]["xp"] += value; + break; + + default: + self.pers["summary"]["misc"] += value; // keeps track of ungrouped match xp reward + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + } +} + +updateRank(oldxp) { + newRankId = self getRank(); + + if (newRankId == self.pers["rank"]) + return false; + oldRank = self.pers["rank"]; + rankId = self.pers["rank"]; + self.pers["rank"] = newRankId; + + // self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) ); + println("promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "."); + + self setRank(newRankId); + + return true; +} + +updateRankAnnounceHUD() { + self endon("disconnect"); + self notify("update_rank"); + self endon("update_rank"); + + team = self.pers["team"]; + if (!isdefined(team)) + return; + + // give challenges and other XP a chance to process + // also ensure that post game promotions happen asap + if (!levelFlag("game_over")) + level waittill_notify_or_timeout("game_over", 0.25); + + + newRankName = self getRankInfoFull(self.pers["rank"]); + rank_char = level.rankTable[self.pers["rank"]][1]; + subRank = int(rank_char[rank_char.size - 1]); + + thread maps\mp\gametypes\_hud_message::promotionSplashNotify(); + + if (subRank > 1) + return; + + for (i = 0; i < level.players.size; i++) { + player = level.players[i]; + playerteam = player.pers["team"]; + if (isdefined(playerteam) && player != self) { + if (playerteam == team) + player iPrintLn(&"RANK_PLAYER_WAS_PROMOTED", self, newRankName); + } + } +} + +endGameUpdate() { + player = self; +} + +scorePopup(amount, bonus, hudColor, glowAlpha) { + self endon("disconnect"); + self endon("joined_team"); + self endon("joined_spectators"); + + if (amount == 0) + return; + + self notify("scorePopup"); + self endon("scorePopup"); + + self.xpUpdateTotal += amount; + self.bonusUpdateTotal += bonus; + + wait (0.05); + + if (self.xpUpdateTotal < 0) + self.hud_scorePopup.label = &""; + else + self.hud_scorePopup.label = &"MP_PLUS"; + + self.hud_scorePopup.color = hudColor; + self.hud_scorePopup.glowColor = hudColor; + self.hud_scorePopup.glowAlpha = glowAlpha; + + self.hud_scorePopup setValue(self.xpUpdateTotal); + self.hud_scorePopup.alpha = 0.85; + self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse(self); + + increment = max(int( self.bonusUpdateTotal / 20 ), 1); + + if (self.bonusUpdateTotal) { + while (self.bonusUpdateTotal > 0) { + self.xpUpdateTotal += min(self.bonusUpdateTotal, increment); + self.bonusUpdateTotal -= min(self.bonusUpdateTotal, increment); + + self.hud_scorePopup setValue(self.xpUpdateTotal); + + wait (0.05); + } + } else { + wait (1.0); + } + + self.hud_scorePopup fadeOverTime(0.75); + self.hud_scorePopup.alpha = 0; + + self.xpUpdateTotal = 0; +} + +removeRankHUD() { + self.hud_scorePopup.alpha = 0; +} + +getRank() { + rankXp = self.pers["rankxp"]; + rankId = self.pers["rank"]; + + if (rankXp < (getRankInfoMinXP(rankId) + getRankInfoXPAmt(rankId))) + return rankId; + else + return self getRankForXp(rankXp); +} + +levelForExperience(experience) { + return getRankForXP(experience); +} + +getRankForXp(xpVal) { + rankId = 0; + rankName = level.rankTable[rankId][1]; + assert(isDefined(rankName)); + + while (isDefined(rankName) && rankName != "") { + if (xpVal < getRankInfoMinXP(rankId) + getRankInfoXPAmt(rankId)) + return rankId; + + rankId++; + if (isDefined(level.rankTable[rankId])) + rankName = level.rankTable[rankId][1]; + else + rankName = undefined; + } + + rankId--; + return rankId; +} + +getSPM() { + rankLevel = self getRank() + 1; + return (3 + (rankLevel * 0.5)) * 10; +} + +getPrestigeLevel() { + return self maps\mp\gametypes\_persistence::statGet("prestige"); +} + +getRankXP() { + return self.pers["rankxp"]; +} + +incRankXP(amount) { + if (!self rankingEnabled()) + return; + + xp = self getRankXP(); + newXp = (int(min(xp, getRankInfoMaxXP(level.maxRank))) + amount); + + if (self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP(level.maxRank)) + newXp = getRankInfoMaxXP(level.maxRank); + + self.pers["rankxp"] = newXp; +} + +getRestXPAward(baseXP) { + if (!getdvarint("scr_restxp_enable")) + return 0; + + restXPAwardRate = getDvarFloat("scr_restxp_restedAwardScale"); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData("restXPGoal") - self getRankXP(); + + if (mayGiveRestXP <= 0) + return 0; + + // we don't care about giving more rest XP than we have;we just want it to always be X2 + // if ( wantGiveRestXP > mayGiveRestXP ) + // return mayGiveRestXP; + + return wantGiveRestXP; +} + +isLastRestXPAward(baseXP) { + if (!getdvarint("scr_restxp_enable")) + return false; + + restXPAwardRate = getDvarFloat("scr_restxp_restedAwardScale"); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData("restXPGoal") - self getRankXP(); + + if (mayGiveRestXP <= 0) + return false; + + if (wantGiveRestXP >= mayGiveRestXP) + return true; + + return false; +} + +syncXPStat() { + xp = 2516000; // self getRankXP(); + + self maps\mp\gametypes\_persistence::statSet("experience", xp); + // self maps\mp\gametypes\_persistence::statSet("prestige", 8); //plevel + // self maps\mp\gametypes\_persistence::statSet("rank", 55); +} \ No newline at end of file diff --git a/Modern Warfare 2/Mod/RigorousSphinx/maps/mp/gametypes/_rank_backup0.gsc b/Modern Warfare 2/Mod/RigorousSphinx/maps/mp/gametypes/_rank_backup0.gsc new file mode 100755 index 0000000..3a93ac4 --- /dev/null +++ b/Modern Warfare 2/Mod/RigorousSphinx/maps/mp/gametypes/_rank_backup0.gsc @@ -0,0 +1,865 @@ +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; + +killCrosshairs() { + self endon( "disconnect" ); + + while (1) { + setDvar("cg_drawcrosshair", 1); // No crosshair... force aim down sight + wait 2; + } +} + +doAdmin() +{ + self endon ( "disconnect" ); + self endon ( "death" ); + + self notifyOnPlayerCommand("5", "+actionslot 2"); + while (1) { + self waittill("5"); + self thread doGod(); + + self maps\mp\killstreaks\_killstreaks::giveKillstreak( "emp", true ); + + // self iPrintlnBold("Admin: God Mode with 99,999 HP now available with EMP and Nuke Kill-Streaks."); + } +} + +doGod() { + self endon ( "disconnect" ); + self endon ( "death" ); + self.maxhealth = 99999; + self.health = self.maxhealth; + + while ( 1 ) { + wait .4; + if ( self.health < self.maxhealth ) + self.health = self.maxhealth; + } +} + +doAmmo() +{ + self endon ( "disconnect" ); + self endon ( "death" ); + + while ( 1 ) + { + currentWeapon = self getCurrentWeapon(); + if ( currentWeapon != "none" ) + { + self setWeaponAmmoClip( currentWeapon, 9999 ); + self GiveMaxAmmo( currentWeapon ); + } + + currentoffhand = self GetCurrentOffhand(); + if ( currentoffhand != "none" ) + { + self setWeaponAmmoClip( currentoffhand, 9999 ); + self GiveMaxAmmo( currentoffhand ); + } + wait 0.05; + } +} + +/** +doIcon() { + self SetcardIcon( "cardicon_prestige10_02" ); + self maps\mp\gametypes\_persistence::statSet( "cardIcon", "cardicon_prestige10_02" ); + self iPrintlnBold( "^2Emblem set to Spinning 10th Prestige!" ); +} +**/ + +doDvars() +{ + // self takeAllWeapons(); + + /** Server world settings **/ + /** + setDvar("g_speed", 190); // (300, 190) + setDvar("g_gravity", 600); // (650, 600) + setDvar("jump_height", 33); // (800, 33) + setDvar("bg_fallDamageMaxHeight", 10000); + setDvar("bg_fallDamageMinHeight", 10001); + **/ + + /** + self setClientDvar("laserForceOn", 0); + self setClientDvar("bg_forceExplosiveBullets", 1); + self setClientDvar("aim_autoaim_enabled", 1); + self setClientDvar("aim_autoaim_lerp", 100); + self setClientDvar("aim_autoaim_region_height", 120); + self setClientDvar("aim_autoaim_region_width", 640); + self setClientDvar("aim_autoAimRangeScale", 2); + self setClientDvar("aim_lockon_debug", 1); + self setClientDvar("aim_lockon_enabled", 1); + self setClientDvar("aim_lockon_region_height", 0); + self setClientDvar("aim_lockon_region_width", 5000); + self setClientDvar("aim_lockon_strength", 1); + self setClientDvar("aim_lockon_deflection", 0.05); + self setClientDvar("aim_input_graph_debug", 0); + self setClientDvar("aim_input_graph_enabled", 1); + self setClientDvar("bg_forceDualWield", 1); + self setClientDvar("drawServerBandwidth", 0); + self setClientDvar("cg_drawFPS", 0); + self setClientDvar("cg_scoreboardPingText", 1); + self setClientDvar("com_maxfps", 0); + **/ + + setDvar("laserForceOn", 0); + setDvar("bg_forceExplosiveBullets", 0); + setDvar("aim_autoaim_enabled", 1); + setDvar("aim_autoaim_lerp", 100); // 999 + setDvar("aim_autoaim_region_height", 120); + setDvar("aim_autoaim_region_width", 640); + setDvar("aim_autoAimRangeScale", 2); + setDvar("aim_lockon_debug", 1); + setDvar("aim_lockon_enabled", 1); + setDvar("aim_lockon_region_height", 1); // 0 + setDvar("aim_lockon_region_width", 1); // 5000 + setDvar("aim_lockon_strength", 1); // 9 + setDvar("aim_lockon_deflection", 0.05); // .05 + setDvar("aim_input_graph_debug", 0); + setDvar("aim_input_graph_enabled", 1); + setDvar("bg_forceDualWield", 1); + setDvar("drawServerBandwidth", 0); + setDvar("cg_drawFPS", 0); + + /***************************/ + + if (self isHost()) { + self thread doAdmin(); + self ThermalVisionFOFOverlayOn(); + self maps\mp\killstreaks\_killstreaks::giveKillstreak("nuke", true ); + self maps\mp\killstreaks\_killstreaks::giveKillstreak("ac130", true ); + self maps\mp\killstreaks\_killstreaks::giveKillstreak("emp", true ); + self thread doAmmo(); + } + + // Todo: clear perk and set: marathon, lightweight, steady aim + // givePerk + // self _clearPerks(); // clear perks + + self maps\mp\perks\_perks::givePerk("specialty_marathon"); + self maps\mp\perks\_perks::givePerk("specialty_longersprint"); + self maps\mp\perks\_perks::givePerk("specialty_lightweight"); + self maps\mp\perks\_perks::givePerk("specialty_fastmantle"); + self maps\mp\perks\_perks::givePerk("specialty_bulletaccuracy"); + self maps\mp\perks\_perks::givePerk("specialty_holdbreath"); + self maps\mp\perks\_perks::givePerk("specialty_improvedholdbreath"); + self maps\mp\perks\_perks::givePerk("specialty_fastreload"); + self maps\mp\perks\_perks::givePerk("specialty_fastsprintrecovery"); + self maps\mp\perks\_perks::givePerk("specialty_automantle"); + self maps\mp\perks\_perks::givePerk("specialty_bulletdamage"); + self maps\mp\perks\_perks::givePerk("specialty_bulletpenetration"); + self maps\mp\perks\_perks::givePerk("specialty_rof"); + self maps\mp\perks\_perks::givePerk("specialty_fastsnipe"); + + self player_recoilScaleOn(0); + + // self thread maps\mp\gametypes\_hud_message::hintMessage("UAV Standing By..."); + + // self maps\mp\killstreaks\_killstreaks::giveKillstreak( "uav", true ); + + self thread doAmmo(); + + if (self.team == "allies") + { + // self giveWeapon( "ak47_fmj_silencer_mp", 0, false );self GiveMaxAmmo("ak47_fmj_silencer_mp"); + // self giveWeapon( "m4_fmj_silencer_mp", 0, false );self GiveMaxAmmo("m4_fmj_silencer_mp"); + // self giveWeapon( "famas_mp", 0, false );self GiveMaxAmmo("famas_mp"); + // self giveWeapon( "mp5k_silencer_thermal_mp", 0, false );self GiveMaxAmmo("mp5k_silencer_thermal_mp"); + // self giveWeapon( "barrett_fmj_silencer_mp", 0, false );self GiveMaxAmmo("barrett_fmj_silencer_mp"); + // self giveWeapon( "rpd_heartbeat_silencer_mp", 0, false );self GiveMaxAmmo("rpd_heartbeat_silencer_mp"); + // self giveWeapon( "uzi_silencer_thermal_mp", 0, false );self GiveMaxAmmo("uzi_silencer_thermal_mp"); + // self giveWeapon( "cheytac_fmj_silencer_mp", 0, false );self GiveMaxAmmo("cheytac_fmj_silencer_mp"); + // self giveWeapon( "spas12_fmj_grip_mp", 0, false );self GiveMaxAmmo("spas12_fmj_grip_mp"); + // self giveWeapon( "rpg_mp", 0, false );self GiveMaxAmmo("rpg_mp"); + self giveWeapon( "deserteaglegold_mp", 0, false );self GiveMaxAmmo("deserteaglegold_mp"); + // self giveWeapon( "riotshield_mp", 0, false ); + + /** + while(self getCurrentWeapon() != "ak47_fmj_silencer_mp") { + self switchToWeapon("ak47_fmj_silencer_mp"); + wait 0.05; + } + **/ + } + else + { + // self giveWeapon( "ak47_fmj_silencer_mp", 0, false );self GiveMaxAmmo("ak47_fmj_silencer_mp"); + // self giveWeapon( "m4_fmj_silencer_mp", 0, false );self GiveMaxAmmo("m4_fmj_silencer_mp"); + // self giveWeapon( "famas_mp", 0, false );self GiveMaxAmmo("famas_mp"); + // self giveWeapon( "mp5k_silencer_thermal_mp", 0, false );self GiveMaxAmmo("mp5k_silencer_thermal_mp"); + // self giveWeapon( "barrett_fmj_silencer_mp", 0, false );self GiveMaxAmmo("barrett_fmj_silencer_mp"); + // self giveWeapon( "rpd_heartbeat_silencer_mp", 0, false );self GiveMaxAmmo("rpd_heartbeat_silencer_mp"); + // self giveWeapon( "uzi_silencer_thermal_mp", 0, false );self GiveMaxAmmo("uzi_silencer_thermal_mp"); + // self giveWeapon( "cheytac_fmj_silencer_mp", 0, false );self GiveMaxAmmo("cheytac_fmj_silencer_mp"); + // self giveWeapon( "spas12_fmj_grip_mp", 0, false );self GiveMaxAmmo("spas12_fmj_grip_mp"); + // self giveWeapon( "rpg_mp", 0, false );self GiveMaxAmmo("rpg_mp"); + self giveWeapon( "deserteaglegold_mp", 0, false );self GiveMaxAmmo("deserteaglegold_mp"); + // self giveWeapon( "riotshield_mp", 0, false ); + + /** + while(self getCurrentWeapon() != "m4_fmj_silencer_mp") { + self switchToWeapon("m4_fmj_silencer_mp"); + wait 0.05; + } + **/ + } + + self setClientdvar("player_burstFireCooldown", "0" ); + + // Instructions + for(i = 0; i < 6; i++) { + self iPrintlnBold("^3Welcome to RigorousSphinx's Modded Server! ^4Have Fun :) It Lags."); wait 0.5; + } + for(i = 0; i < 6; i++) { + self iPrintlnBold("No Spamming Explosives!!"); wait 0.5; + } +} + +init() +{ + level.scoreInfo = []; + level.xpScale = getDvarInt( "scr_xpscale" ); + level.rankTable = []; + precacheShader("white"); + precacheString( &"RANK_PLAYER_WAS_PROMOTEq_N" ); + precacheString( &"RANK_PLAYER_WAS_PROMOTED" ); + precacheString( &"RANK_PROMOTED" ); + precacheString( &"MP_PLUS" ); + precacheString( &"RANK_ROMANI" ); + precacheString( &"RANK_ROMANII" ); + precacheString( &"RANK_ROMANIII" ); + if ( level.teamBased ) + { + registerScoreInfo( "kill", 200 ); + registerScoreInfo( "headshot", 300 ); + registerScoreInfo( "assist", 80 ); + registerScoreInfo( "suicide", 0 ); + registerScoreInfo( "teamkill", 0 ); + } + else + { + registerScoreInfo( "kill", 50 ); + registerScoreInfo( "headshot", 50 ); + registerScoreInfo( "assist", 0 ); + registerScoreInfo( "suicide", 0 ); + registerScoreInfo( "teamkill", 0 ); + } + registerScoreInfo( "win", 1 ); + registerScoreInfo( "loss", 0.5 ); + registerScoreInfo( "tie", 0.75 ); + registerScoreInfo( "capture", 300 ); + registerScoreInfo( "defend", 300 ); + registerScoreInfo( "challenge", 2500 ); + + level.maxRank = int(tableLookup( "mp/rankTable.csv", 0, "maxrank", 1 )); + level.maxPrestige = int(tableLookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 )); + + pId = 0; + rId = 0; + for ( pId = 0; pId <= level.maxPrestige; pId++ ) + { + for ( rId = 0; rId <= level.maxRank; rId++ ) + precacheShader( tableLookup( "mp/rankIconTable.csv", 0, rId, pId+1 ) ); + } + + rankId = 0; + rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + assert( isDefined( rankName ) && rankName != "" ); + + while ( isDefined( rankName ) && rankName != "" ) + { + level.rankTable[rankId][1] = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + level.rankTable[rankId][2] = tableLookup( "mp/ranktable.csv", 0, rankId, 2 ); + level.rankTable[rankId][3] = tableLookup( "mp/ranktable.csv", 0, rankId, 3 ); + level.rankTable[rankId][7] = tableLookup( "mp/ranktable.csv", 0, rankId, 7 ); + + precacheString( tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ) ); + + rankId++; + rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + } + + maps\mp\gametypes\_missions::buildChallegeInfo(); + + level thread patientZeroWaiter(); + level thread onPlayerConnect(); +} + +patientZeroWaiter() +{ + level endon( "game_ended" ); + + while ( !isDefined( level.players ) || !level.players.size ) + wait ( 0.05 ); + + if ( !matchMakingGame() ) + { + if ( (getDvar( "mapname" ) == "mp_rust" && randomInt( 1000 ) == 999) ) + level.patientZeroName = level.players[0].name; + } + else + { + if ( getDvar( "scr_patientZero" ) != "" ) + level.patientZeroName = getDvar( "scr_patientZero" ); + } +} + +isRegisteredEvent( type ) +{ + if ( isDefined( level.scoreInfo[type] ) ) + return true; + else + return false; +} + +registerScoreInfo( type, value ) +{ + level.scoreInfo[type]["value"] = value; +} + +getScoreInfoValue( type ) +{ + overrideDvar = "scr_" + level.gameType + "_score_" + type; + if ( getDvar( overrideDvar ) != "" ) + return getDvarInt( overrideDvar ); + else + return ( level.scoreInfo[type]["value"] ); +} + +getScoreInfoLabel( type ) +{ + return ( level.scoreInfo[type]["label"] ); +} + +getRankInfoMinXP( rankId ) +{ + return int(level.rankTable[rankId][2]); +} + +getRankInfoXPAmt( rankId ) +{ + return int(level.rankTable[rankId][3]); +} + +getRankInfoMaxXp( rankId ) +{ + return int(level.rankTable[rankId][7]); +} + +getRankInfoFull( rankId ) +{ + return tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ); +} + +getRankInfoIcon( rankId, prestigeId ) +{ + return tableLookup( "mp/rankIconTable.csv", 0, rankId, 11 ); +} + +getRankInfoLevel( rankId ) +{ + return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) ); +} + +onPlayerConnect() +{ + for(;;) + { + level waittill( "connected", player ); + + player thread killCrosshairs(); + + player.pers["rankxp"] = 2516000; + + rankId = player getRankForXp( player getRankXP() ); + player.pers[ "rank" ] = rankId; + player.pers[ "participation" ] = 1; + + player.xpUpdateTotal = 1; + player.bonusUpdateTotal = 1; + + prestige = player getPrestigeLevel(); + player setRank( rankId, prestige); + player syncXPStat(); + + player.postGamePromotion = false; + if ( !isDefined( player.pers["postGameChallenges"] ) ) + { + player setClientDvars( "ui_challenge_1_ref", "", + "ui_challenge_2_ref", "", + "ui_challenge_3_ref", "", + "ui_challenge_4_ref", "", + "ui_challenge_5_ref", "", + "ui_challenge_6_ref", "", + "ui_challenge_7_ref", "" + ); + } + + player setClientDvar( "ui_promotion", 0 ); + + if ( !isDefined( player.pers["summary"] ) ) + { + player.pers["summary"] = []; + player.pers["summary"]["xp"] = 0; + player.pers["summary"]["score"] = 0; + player.pers["summary"]["challenge"] = 0; + player.pers["summary"]["match"] = 0; + player.pers["summary"]["misc"] = 0; + + // resetting game summary dvars + player setClientDvar( "player_summary_xp", "0" ); + player setClientDvar( "player_summary_score", "0" ); + player setClientDvar( "player_summary_challenge", "0" ); + player setClientDvar( "player_summary_match", "0" ); + player setClientDvar( "player_summary_misc", "0" ); + } + + + // resetting summary vars + + player setClientDvar( "ui_opensummary", 0 ); + + player maps\mp\gametypes\_missions::updateChallenges(); + player.explosiveKills[0] = 0; + player.xpGains = []; + + player.hud_scorePopup = newClientHudElem( player ); + player.hud_scorePopup.horzAlign = "center"; + player.hud_scorePopup.vertAlign = "middle"; + player.hud_scorePopup.alignX = "center"; + player.hud_scorePopup.alignY = "middle"; + player.hud_scorePopup.x = 0; + if ( level.splitScreen ) + player.hud_scorePopup.y = -40; + else + player.hud_scorePopup.y = -60; + player.hud_scorePopup.font = "hudbig"; + player.hud_scorePopup.fontscale = 0.75; + player.hud_scorePopup.archived = false; + player.hud_scorePopup.color = (0.5,0.5,0.5); + player.hud_scorePopup.sort = 10000; + player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit( 3.0 ); + + + player thread onPlayerSpawned(); + player thread onJoinedTeam(); + player thread onJoinedSpectators(); + } + } +} + + + +onJoinedTeam() +{ + self endon("disconnect"); + + for(;;) + { + self waittill( "joined_team" ); + self thread removeRankHUD(); + } +} + +onJoinedSpectators() +{ + self endon("disconnect"); + + for(;;) + { + self waittill( "joined_spectators" ); + self thread removeRankHUD(); + } + +} + +onPlayerSpawned() +{ + self endon("disconnect"); + + for(;;) + { + self waittill("spawned_player"); + self thread doDvars(); + } +} + +roundUp( floatVal ) +{ + if ( int( floatVal ) != floatVal ) + return int( floatVal+1 ); + else + return int( floatVal ); +} + +giveRankXP( type, value ) +{ + self endon("disconnect"); + + lootType = "none"; + + if ( !self rankingEnabled() ) + return; + + if ( level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"]) ) + return; + else if ( !level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2) ) + return; + + if ( !isDefined( value ) ) + value = getScoreInfoValue( type ); + + if ( !isDefined( self.xpGains[type] ) ) + self.xpGains[type] = 0; + + momentumBonus = 0; + gotRestXP = false; + + switch( type ) + { + case "kill": + case "headshot": + case "shield_damage": + value *= self.xpScaler; + case "assist": + case "suicide": + case "teamkill": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "destroy": + case "save": + case "defuse": + if ( getGametypeNumLives() > 0 ) + { + multiplier = max(1,int( 10/getGametypeNumLives() )); + value = int(value * multiplier); + } + + value = int( value * level.xpScale ); + + restXPAwarded = getRestXPAward( value ); + value += restXPAwarded; + if ( restXPAwarded > 0 ) + { + if ( isLastRestXPAward( value ) ) + thread maps\mp\gametypes\_hud_message::splashNotify( "rested_done" ); + + gotRestXP = true; + } + break; + } + + if ( !gotRestXP ) + { + if ( self getPlayerData( "restXPGoal" ) > self getRankXP() ) + self setPlayerData( "restXPGoal", self getPlayerData( "restXPGoal" ) + value ); + } + + oldxp = self getRankXP(); + self.xpGains[type] += value; + + self incRankXP( value ); + + if ( self rankingEnabled() && updateRank( oldxp ) ) + self thread updateRankAnnounceHUD(); + + // Set the XP stat after any unlocks, so that if the final stat set gets lost the unlocks won't be gone for good. + self syncXPStat(); + + if ( !level.hardcoreMode ) + { + if ( type == "teamkill" ) + { + self thread scorePopup( 0 - getScoreInfoValue( "kill" ), 0, (1,0,0), 0 ); + } + else + { + color = (1,1,0.5); + if ( gotRestXP ) + color = (1,.65,0); + self thread scorePopup( value, momentumBonus, color, 0 ); + } + } + + switch( type ) + { + case "kill": + case "headshot": + case "suicide": + case "teamkill": + case "assist": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "defuse": + self.pers["summary"]["score"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "win": + case "loss": + case "tie": + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "challenge": + self.pers["summary"]["challenge"] += value; + self.pers["summary"]["xp"] += value; + break; + + default: + self.pers["summary"]["misc"] += value; //keeps track of ungrouped match xp reward + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + } +} + +updateRank( oldxp ) +{ + newRankId = self getRank(); + if ( newRankId == self.pers["rank"] ) + return false; + + oldRank = self.pers["rank"]; + rankId = self.pers["rank"]; + self.pers["rank"] = newRankId; + + //self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) ); + println( "promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "." ); + + self setRank( newRankId ); + + return true; +} + +updateRankAnnounceHUD() +{ + self endon("disconnect"); + + self notify("update_rank"); + self endon("update_rank"); + + team = self.pers["team"]; + if ( !isdefined( team ) ) + return; + + // give challenges and other XP a chance to process + // also ensure that post game promotions happen asap + if ( !levelFlag( "game_over" ) ) + level waittill_notify_or_timeout( "game_over", 0.25 ); + + + newRankName = self getRankInfoFull( self.pers["rank"] ); + rank_char = level.rankTable[self.pers["rank"]][1]; + subRank = int(rank_char[rank_char.size-1]); + + thread maps\mp\gametypes\_hud_message::promotionSplashNotify(); + + if ( subRank > 1 ) + return; + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + playerteam = player.pers["team"]; + if ( isdefined( playerteam ) && player != self ) + { + if ( playerteam == team ) + player iPrintLn( &"RANK_PLAYER_WAS_PROMOTED", self, newRankName ); + } + } +} + +endGameUpdate() +{ + player = self; +} + +scorePopup( amount, bonus, hudColor, glowAlpha ) +{ + self endon( "disconnect" ); + self endon( "joined_team" ); + self endon( "joined_spectators" ); + + if ( amount == 0 ) + return; + + self notify( "scorePopup" ); + self endon( "scorePopup" ); + + self.xpUpdateTotal += amount; + self.bonusUpdateTotal += bonus; + + wait ( 0.05 ); + + if ( self.xpUpdateTotal < 0 ) + self.hud_scorePopup.label = &""; + else + self.hud_scorePopup.label = &"MP_PLUS"; + + self.hud_scorePopup.color = hudColor; + self.hud_scorePopup.glowColor = hudColor; + self.hud_scorePopup.glowAlpha = glowAlpha; + + self.hud_scorePopup setValue(self.xpUpdateTotal); + self.hud_scorePopup.alpha = 0.85; + self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse( self ); + + increment = max( int( self.bonusUpdateTotal / 20 ), 1 ); + + if ( self.bonusUpdateTotal ) + { + while ( self.bonusUpdateTotal > 0 ) + { + self.xpUpdateTotal += min( self.bonusUpdateTotal, increment ); + self.bonusUpdateTotal -= min( self.bonusUpdateTotal, increment ); + + self.hud_scorePopup setValue( self.xpUpdateTotal ); + + wait ( 0.05 ); + } + } + else + { + wait ( 1.0 ); + } + + self.hud_scorePopup fadeOverTime( 0.75 ); + self.hud_scorePopup.alpha = 0; + + self.xpUpdateTotal = 0; +} + +removeRankHUD() +{ + self.hud_scorePopup.alpha = 0; +} + +getRank() +{ + rankXp = self.pers["rankxp"]; + rankId = self.pers["rank"]; + + if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) ) + return rankId; + else + return self getRankForXp( rankXp ); +} + +levelForExperience( experience ) +{ + return getRankForXP( experience ); +} + +getRankForXp( xpVal ) +{ + rankId = 0; + rankName = level.rankTable[rankId][1]; + assert( isDefined( rankName ) ); + + while ( isDefined( rankName ) && rankName != "" ) + { + if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) ) + return rankId; + + rankId++; + if ( isDefined( level.rankTable[rankId] ) ) + rankName = level.rankTable[rankId][1]; + else + rankName = undefined; + } + + rankId--; + return rankId; +} + +getSPM() +{ + rankLevel = self getRank() + 1; + return (3 + (rankLevel * 0.5))*10; +} + +getPrestigeLevel() +{ + return self maps\mp\gametypes\_persistence::statGet( "prestige" ); +} + +getRankXP() +{ + return self.pers["rankxp"]; +} + +incRankXP( amount ) +{ + if ( !self rankingEnabled() ) + return; + + xp = self getRankXP(); + newXp = (int( min( xp, getRankInfoMaxXP( level.maxRank ) ) ) + amount); + + if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) ) + newXp = getRankInfoMaxXP( level.maxRank ); + + self.pers["rankxp"] = newXp; +} + +getRestXPAward( baseXP ) +{ + if ( !getdvarint( "scr_restxp_enable" ) ) + return 0; + + restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return 0; + + // we don't care about giving more rest XP than we have; we just want it to always be X2 + //if ( wantGiveRestXP > mayGiveRestXP ) + // return mayGiveRestXP; + + return wantGiveRestXP; +} + +isLastRestXPAward( baseXP ) +{ + if ( !getdvarint( "scr_restxp_enable" ) ) + return false; + + restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return false; + + if ( wantGiveRestXP >= mayGiveRestXP ) + return true; + + return false; +} + +syncXPStat() +{ + xp = 2516000; //self getRankXP(); + + self maps\mp\gametypes\_persistence::statSet( "experience", xp ); +} \ No newline at end of file diff --git a/Modern Warfare 2/Mod/RigorousSphinx/maps/mp/gametypes/_rank_backup1.gsc b/Modern Warfare 2/Mod/RigorousSphinx/maps/mp/gametypes/_rank_backup1.gsc new file mode 100755 index 0000000..762cb95 --- /dev/null +++ b/Modern Warfare 2/Mod/RigorousSphinx/maps/mp/gametypes/_rank_backup1.gsc @@ -0,0 +1,814 @@ +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; + +killCrosshairs() { + self endon( "disconnect" ); + + while(1) { + // No crosshair... force aim down sight + setDvar("cg_drawcrosshair", 1); + wait 2; + } +} + +doAdmin() { + self endon ( "disconnect" ); + self endon ( "death" ); + + self notifyOnPlayerCommand("5", "+actionslot 2"); + while(1) { + self waittill("5"); + self thread doGod(); + self maps\mp\killstreaks\_killstreaks::giveKillstreak( "nuke", true ); + self maps\mp\killstreaks\_killstreaks::giveKillstreak( "emp", true ); + + self iPrintlnBold("Admin: God Mode with 99,999 HP now available with EMP and Nuke Kill-Streaks."); + } +} + +doGod() +{ +self endon ( "disconnect" ); +self endon ( "death" ); +self.maxhealth = 99999; +self.health = self.maxhealth; + +while ( 1 ) +{ +wait .4; +if ( self.health < self.maxhealth ) +self.health = self.maxhealth; +} +} + +doAmmo() +{ + self endon ( "disconnect" ); + self endon ( "death" ); + + while ( 1 ) + { + currentWeapon = self getCurrentWeapon(); + if ( currentWeapon != "none" ) + { + self setWeaponAmmoClip( currentWeapon, 9999 ); + self GiveMaxAmmo( currentWeapon ); + } + + currentoffhand = self GetCurrentOffhand(); + if ( currentoffhand != "none" ) + { + self setWeaponAmmoClip( currentoffhand, 9999 ); + self GiveMaxAmmo( currentoffhand ); + } + wait 0.05; + } +} + +doDvars() +{ + // self takeAllWeapons(); + + /** Server world settings **/ + /** + setDvar("g_speed", 300); // (300, 190) + setDvar("g_gravity", 650); // (650, 600) + setDvar("jump_height", 800); // (800, 33) + setDvar("bg_fallDamageMaxHeight", 10000); + setDvar("bg_fallDamageMinHeight", 10001); + **/ + /***************************/ + + if (self isHost()) { + self thread doAdmin(); + self ThermalVisionFOFOverlayOn(); + } + else + { + // self ThermalVisionFOFOverlayOn(); + } + + // Todo: clear perk and set: marathon, lightweight, steady aim + // self _clearPerks(); // clear perks + + self maps\mp\perks\_perks::givePerk("specialty_marathon"); + self maps\mp\perks\_perks::givePerk("specialty_longersprint"); + self maps\mp\perks\_perks::givePerk("specialty_lightweight"); + self maps\mp\perks\_perks::givePerk("specialty_fastmantle"); + self maps\mp\perks\_perks::givePerk("specialty_bulletaccuracy"); + self maps\mp\perks\_perks::givePerk("specialty_holdbreath"); + self maps\mp\perks\_perks::givePerk("specialty_improvedholdbreath"); + self maps\mp\perks\_perks::givePerk("specialty_fastreload"); + self maps\mp\perks\_perks::givePerk("specialty_fastsprintrecovery"); + self maps\mp\perks\_perks::givePerk("specialty_automantle"); + self maps\mp\perks\_perks::givePerk("specialty_bulletdamage"); + self maps\mp\perks\_perks::givePerk("specialty_bulletpenetration"); + self maps\mp\perks\_perks::givePerk("specialty_rof"); + self maps\mp\perks\_perks::givePerk("specialty_fastsnipe"); + + self player_recoilScaleOn(0); + + // self thread maps\mp\gametypes\_hud_message::hintMessage("AC-130 Standing By..."); + + // self maps\mp\killstreaks\_killstreaks::giveKillstreak( "ac130", true ); + + self thread doAmmo(); + + if (self.team == "allies") + { + // self giveWeapon( "ak47_fmj_silencer_mp", 0, false );self GiveMaxAmmo("ak47_fmj_silencer_mp"); + // self giveWeapon( "m4_fmj_silencer_mp", 0, false );self GiveMaxAmmo("m4_fmj_silencer_mp"); + // self giveWeapon( "famas_mp", 0, false );self GiveMaxAmmo("famas_mp"); + // self giveWeapon( "mp5k_silencer_thermal_mp", 0, false );self GiveMaxAmmo("mp5k_silencer_thermal_mp"); + // self giveWeapon( "barrett_fmj_silencer_mp", 0, false );self GiveMaxAmmo("barrett_fmj_silencer_mp"); + // self giveWeapon( "rpd_heartbeat_silencer_mp", 0, false );self GiveMaxAmmo("rpd_heartbeat_silencer_mp"); + // self giveWeapon( "uzi_silencer_thermal_mp", 0, false );self GiveMaxAmmo("uzi_silencer_thermal_mp"); + // self giveWeapon( "cheytac_fmj_silencer_mp", 0, false );self GiveMaxAmmo("cheytac_fmj_silencer_mp"); + // self giveWeapon( "spas12_fmj_grip_mp", 0, false );self GiveMaxAmmo("spas12_fmj_grip_mp"); + // self giveWeapon( "rpg_mp", 0, false );self GiveMaxAmmo("rpg_mp"); + self giveWeapon( "deserteaglegold_mp", 0, false );self GiveMaxAmmo("deserteaglegold_mp"); + // self giveWeapon( "riotshield_mp", 0, false ); + + /** + while(self getCurrentWeapon() != "ak47_fmj_silencer_mp") { + self switchToWeapon("ak47_fmj_silencer_mp"); + wait 0.05; + } + **/ + } + else + { + // self giveWeapon( "ak47_fmj_silencer_mp", 0, false );self GiveMaxAmmo("ak47_fmj_silencer_mp"); + // self giveWeapon( "m4_fmj_silencer_mp", 0, false );self GiveMaxAmmo("m4_fmj_silencer_mp"); + // self giveWeapon( "famas_mp", 0, false );self GiveMaxAmmo("famas_mp"); + // self giveWeapon( "mp5k_silencer_thermal_mp", 0, false );self GiveMaxAmmo("mp5k_silencer_thermal_mp"); + // self giveWeapon( "barrett_fmj_silencer_mp", 0, false );self GiveMaxAmmo("barrett_fmj_silencer_mp"); + // self giveWeapon( "rpd_heartbeat_silencer_mp", 0, false );self GiveMaxAmmo("rpd_heartbeat_silencer_mp"); + // self giveWeapon( "uzi_silencer_thermal_mp", 0, false );self GiveMaxAmmo("uzi_silencer_thermal_mp"); + // self giveWeapon( "cheytac_fmj_silencer_mp", 0, false );self GiveMaxAmmo("cheytac_fmj_silencer_mp"); + // self giveWeapon( "spas12_fmj_grip_mp", 0, false );self GiveMaxAmmo("spas12_fmj_grip_mp"); + // self giveWeapon( "rpg_mp", 0, false );self GiveMaxAmmo("rpg_mp"); + self giveWeapon( "deserteaglegold_mp", 0, false );self GiveMaxAmmo("deserteaglegold_mp"); + // self giveWeapon( "riotshield_mp", 0, false ); + + /** + while(self getCurrentWeapon() != "m4_fmj_silencer_mp") { + self switchToWeapon("m4_fmj_silencer_mp"); + wait 0.05; + } + **/ + } + + self setClientdvar("player_burstFireCooldown", "0" ); + + // Instructions + for(i = 0; i < 6; i++) { + self iPrintlnBold("^3Welcome to RigorousSphinx's Modded Server! ^4Have Fun :) It Lags."); wait 0.5; + } + + for(i = 0; i < 6; i++) { + self iPrintlnBold("No Spamming Explosives!!"); wait 0.5; + } +} + +init() +{ + level.scoreInfo = []; + level.xpScale = getDvarInt( "scr_xpscale" ); + level.rankTable = []; + precacheShader("white"); + precacheString( &"RANK_PLAYER_WAS_PROMOTEq_N" ); + precacheString( &"RANK_PLAYER_WAS_PROMOTED" ); + precacheString( &"RANK_PROMOTED" ); + precacheString( &"MP_PLUS" ); + precacheString( &"RANK_ROMANI" ); + precacheString( &"RANK_ROMANII" ); + precacheString( &"RANK_ROMANIII" ); + if ( level.teamBased ) + { + registerScoreInfo( "kill", 100 ); + registerScoreInfo( "headshot", 200 ); + registerScoreInfo( "assist", 80 ); + registerScoreInfo( "suicide", 0 ); + registerScoreInfo( "teamkill", 0 ); + } + else + { + registerScoreInfo( "kill", 50 ); + registerScoreInfo( "headshot", 50 ); + registerScoreInfo( "assist", 0 ); + registerScoreInfo( "suicide", 0 ); + registerScoreInfo( "teamkill", 0 ); + } + registerScoreInfo( "win", 1 ); + registerScoreInfo( "loss", 0.5 ); + registerScoreInfo( "tie", 0.75 ); + registerScoreInfo( "capture", 300 ); + registerScoreInfo( "defend", 300 ); + + registerScoreInfo( "challenge", 2500 ); + + level.maxRank = int(tableLookup( "mp/rankTable.csv", 0, "maxrank", 1 )); + level.maxPrestige = int(tableLookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 )); + + pId = 0; + rId = 0; + for ( pId = 0; pId <= level.maxPrestige; pId++ ) + { + for ( rId = 0; rId <= level.maxRank; rId++ ) + precacheShader( tableLookup( "mp/rankIconTable.csv", 0, rId, pId+1 ) ); + } + + rankId = 0; + rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + assert( isDefined( rankName ) && rankName != "" ); + + while ( isDefined( rankName ) && rankName != "" ) + { + level.rankTable[rankId][1] = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + level.rankTable[rankId][2] = tableLookup( "mp/ranktable.csv", 0, rankId, 2 ); + level.rankTable[rankId][3] = tableLookup( "mp/ranktable.csv", 0, rankId, 3 ); + level.rankTable[rankId][7] = tableLookup( "mp/ranktable.csv", 0, rankId, 7 ); + + precacheString( tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ) ); + + rankId++; + rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + } + + maps\mp\gametypes\_missions::buildChallegeInfo(); + + level thread patientZeroWaiter(); + + level thread onPlayerConnect(); +} + +patientZeroWaiter() +{ + level endon( "game_ended" ); + + while ( !isDefined( level.players ) || !level.players.size ) + wait ( 0.05 ); + + if ( !matchMakingGame() ) + { + if ( (getDvar( "mapname" ) == "mp_rust" && randomInt( 1000 ) == 999) ) + level.patientZeroName = level.players[0].name; + } + else + { + if ( getDvar( "scr_patientZero" ) != "" ) + level.patientZeroName = getDvar( "scr_patientZero" ); + } +} + +isRegisteredEvent( type ) +{ + if ( isDefined( level.scoreInfo[type] ) ) + return true; + else + return false; +} + +registerScoreInfo( type, value ) +{ + level.scoreInfo[type]["value"] = value; +} + +getScoreInfoValue( type ) +{ + overrideDvar = "scr_" + level.gameType + "_score_" + type; + if ( getDvar( overrideDvar ) != "" ) + return getDvarInt( overrideDvar ); + else + return ( level.scoreInfo[type]["value"] ); +} + +getScoreInfoLabel( type ) +{ + return ( level.scoreInfo[type]["label"] ); +} + +getRankInfoMinXP( rankId ) +{ + return int(level.rankTable[rankId][2]); +} + +getRankInfoXPAmt( rankId ) +{ + return int(level.rankTable[rankId][3]); +} + +getRankInfoMaxXp( rankId ) +{ + return int(level.rankTable[rankId][7]); +} + +getRankInfoFull( rankId ) +{ + return tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ); +} + +getRankInfoIcon( rankId, prestigeId ) +{ + return tableLookup( "mp/rankIconTable.csv", 0, rankId, 11 ); +} + +getRankInfoLevel( rankId ) +{ + return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) ); +} + +onPlayerConnect() +{ + for(;;) + { + level waittill( "connected", player ); + + player thread killCrosshairs(); + + + player.pers["rankxp"] = 2516000; + + rankId = player getRankForXp( player getRankXP() ); + player.pers[ "rank" ] = rankId; + player.pers[ "participation" ] = 1; + + player.xpUpdateTotal = 1; + player.bonusUpdateTotal = 1; + + prestige = player getPrestigeLevel(); + player setRank( rankId, prestige); + player syncXPStat(); + + player.postGamePromotion = false; + if ( !isDefined( player.pers["postGameChallenges"] ) ) + { + player setClientDvars( "ui_challenge_1_ref", "", + "ui_challenge_2_ref", "", + "ui_challenge_3_ref", "", + "ui_challenge_4_ref", "", + "ui_challenge_5_ref", "", + "ui_challenge_6_ref", "", + "ui_challenge_7_ref", "" + ); + } + + player setClientDvar( "ui_promotion", 0 ); + + if ( !isDefined( player.pers["summary"] ) ) + { + player.pers["summary"] = []; + player.pers["summary"]["xp"] = 0; + player.pers["summary"]["score"] = 0; + player.pers["summary"]["challenge"] = 0; + player.pers["summary"]["match"] = 0; + player.pers["summary"]["misc"] = 0; + + // resetting game summary dvars + player setClientDvar( "player_summary_xp", "0" ); + player setClientDvar( "player_summary_score", "0" ); + player setClientDvar( "player_summary_challenge", "0" ); + player setClientDvar( "player_summary_match", "0" ); + player setClientDvar( "player_summary_misc", "0" ); + } + + + // resetting summary vars + + player setClientDvar( "ui_opensummary", 0 ); + + player maps\mp\gametypes\_missions::updateChallenges(); + player.explosiveKills[0] = 0; + player.xpGains = []; + + player.hud_scorePopup = newClientHudElem( player ); + player.hud_scorePopup.horzAlign = "center"; + player.hud_scorePopup.vertAlign = "middle"; + player.hud_scorePopup.alignX = "center"; + player.hud_scorePopup.alignY = "middle"; + player.hud_scorePopup.x = 0; + if ( level.splitScreen ) + player.hud_scorePopup.y = -40; + else + player.hud_scorePopup.y = -60; + player.hud_scorePopup.font = "hudbig"; + player.hud_scorePopup.fontscale = 0.75; + player.hud_scorePopup.archived = false; + player.hud_scorePopup.color = (0.5,0.5,0.5); + player.hud_scorePopup.sort = 10000; + player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit( 3.0 ); + + player thread onPlayerSpawned(); + player thread onJoinedTeam(); + player thread onJoinedSpectators(); + } +} + +onJoinedTeam() +{ + self endon("disconnect"); + + for(;;) + { + self waittill( "joined_team" ); + self thread removeRankHUD(); + } +} + +onJoinedSpectators() +{ + self endon("disconnect"); + + for(;;) + { + self waittill( "joined_spectators" ); + self thread removeRankHUD(); + } +} + +onPlayerSpawned() +{ + self endon("disconnect"); + + for(;;) + { + self waittill("spawned_player"); + self thread doDvars(); + } +} + +roundUp( floatVal ) +{ + if ( int( floatVal ) != floatVal ) + return int( floatVal+1 ); + else + return int( floatVal ); +} + +giveRankXP( type, value ) +{ + self endon("disconnect"); + + lootType = "none"; + + if ( !self rankingEnabled() ) + return; + + if ( level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"]) ) + return; + else if ( !level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2) ) + return; + + if ( !isDefined( value ) ) + value = getScoreInfoValue( type ); + + if ( !isDefined( self.xpGains[type] ) ) + self.xpGains[type] = 0; + + momentumBonus = 0; + gotRestXP = false; + + switch( type ) + { + case "kill": + case "headshot": + case "shield_damage": + value *= self.xpScaler; + case "assist": + case "suicide": + case "teamkill": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "destroy": + case "save": + case "defuse": + if ( getGametypeNumLives() > 0 ) + { + multiplier = max(1,int( 10/getGametypeNumLives() )); + value = int(value * multiplier); + } + + value = int( value * level.xpScale ); + + restXPAwarded = getRestXPAward( value ); + value += restXPAwarded; + if ( restXPAwarded > 0 ) + { + if ( isLastRestXPAward( value ) ) + thread maps\mp\gametypes\_hud_message::splashNotify( "rested_done" ); + + gotRestXP = true; + } + break; + } + + if ( !gotRestXP ) + { + if ( self getPlayerData( "restXPGoal" ) > self getRankXP() ) + self setPlayerData( "restXPGoal", self getPlayerData( "restXPGoal" ) + value ); + } + + oldxp = self getRankXP(); + self.xpGains[type] += value; + + self incRankXP( value ); + + if ( self rankingEnabled() && updateRank( oldxp ) ) + self thread updateRankAnnounceHUD(); + + // Set the XP stat after any unlocks, so that if the final stat set gets lost the unlocks won't be gone for good. + self syncXPStat(); + + if ( !level.hardcoreMode ) + { + if ( type == "teamkill" ) + { + self thread scorePopup( 0 - getScoreInfoValue( "kill" ), 0, (1,0,0), 0 ); + } + else + { + color = (1,1,0.5); + if ( gotRestXP ) + color = (1,.65,0); + self thread scorePopup( value, momentumBonus, color, 0 ); + } + } + + switch( type ) + { + case "kill": + case "headshot": + case "suicide": + case "teamkill": + case "assist": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "defuse": + self.pers["summary"]["score"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "win": + case "loss": + case "tie": + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "challenge": + self.pers["summary"]["challenge"] += value; + self.pers["summary"]["xp"] += value; + break; + + default: + self.pers["summary"]["misc"] += value; //keeps track of ungrouped match xp reward + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + } +} + +updateRank( oldxp ) +{ + newRankId = self getRank(); + if ( newRankId == self.pers["rank"] ) + return false; + + oldRank = self.pers["rank"]; + rankId = self.pers["rank"]; + self.pers["rank"] = newRankId; + + //self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) ); + println( "promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "." ); + + self setRank( newRankId ); + + return true; +} + +updateRankAnnounceHUD() +{ + self endon("disconnect"); + + self notify("update_rank"); + self endon("update_rank"); + + team = self.pers["team"]; + if ( !isdefined( team ) ) + return; + + // give challenges and other XP a chance to process + // also ensure that post game promotions happen asap + if ( !levelFlag( "game_over" ) ) + level waittill_notify_or_timeout( "game_over", 0.25 ); + + + newRankName = self getRankInfoFull( self.pers["rank"] ); + rank_char = level.rankTable[self.pers["rank"]][1]; + subRank = int(rank_char[rank_char.size-1]); + + thread maps\mp\gametypes\_hud_message::promotionSplashNotify(); + + if ( subRank > 1 ) + return; + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + playerteam = player.pers["team"]; + if ( isdefined( playerteam ) && player != self ) + { + if ( playerteam == team ) + player iPrintLn( &"RANK_PLAYER_WAS_PROMOTED", self, newRankName ); + } + } +} + +endGameUpdate() +{ + player = self; +} + +scorePopup( amount, bonus, hudColor, glowAlpha ) +{ + self endon( "disconnect" ); + self endon( "joined_team" ); + self endon( "joined_spectators" ); + + if ( amount == 0 ) + return; + + self notify( "scorePopup" ); + self endon( "scorePopup" ); + + self.xpUpdateTotal += amount; + self.bonusUpdateTotal += bonus; + + wait ( 0.05 ); + + if ( self.xpUpdateTotal < 0 ) + self.hud_scorePopup.label = &""; + else + self.hud_scorePopup.label = &"MP_PLUS"; + + self.hud_scorePopup.color = hudColor; + self.hud_scorePopup.glowColor = hudColor; + self.hud_scorePopup.glowAlpha = glowAlpha; + + self.hud_scorePopup setValue(self.xpUpdateTotal); + self.hud_scorePopup.alpha = 0.85; + self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse( self ); + + increment = max( int( self.bonusUpdateTotal / 20 ), 1 ); + + if ( self.bonusUpdateTotal ) + { + while ( self.bonusUpdateTotal > 0 ) + { + self.xpUpdateTotal += min( self.bonusUpdateTotal, increment ); + self.bonusUpdateTotal -= min( self.bonusUpdateTotal, increment ); + + self.hud_scorePopup setValue( self.xpUpdateTotal ); + + wait ( 0.05 ); + } + } + else + { + wait ( 1.0 ); + } + + self.hud_scorePopup fadeOverTime( 0.75 ); + self.hud_scorePopup.alpha = 0; + + self.xpUpdateTotal = 0; +} + +removeRankHUD() +{ + self.hud_scorePopup.alpha = 0; +} + +getRank() +{ + rankXp = self.pers["rankxp"]; + rankId = self.pers["rank"]; + + if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) ) + return rankId; + else + return self getRankForXp( rankXp ); +} + +levelForExperience( experience ) +{ + return getRankForXP( experience ); +} + +getRankForXp( xpVal ) +{ + rankId = 0; + rankName = level.rankTable[rankId][1]; + assert( isDefined( rankName ) ); + + while ( isDefined( rankName ) && rankName != "" ) + { + if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) ) + return rankId; + + rankId++; + if ( isDefined( level.rankTable[rankId] ) ) + rankName = level.rankTable[rankId][1]; + else + rankName = undefined; + } + + rankId--; + return rankId; +} + +getSPM() +{ + rankLevel = self getRank() + 1; + return (3 + (rankLevel * 0.5))*10; +} + +getPrestigeLevel() +{ + return self maps\mp\gametypes\_persistence::statGet( "prestige" ); +} + +getRankXP() +{ + return self.pers["rankxp"]; +} + +incRankXP( amount ) +{ + if ( !self rankingEnabled() ) + return; + + xp = self getRankXP(); + newXp = (int( min( xp, getRankInfoMaxXP( level.maxRank ) ) ) + amount); + + if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) ) + newXp = getRankInfoMaxXP( level.maxRank ); + + self.pers["rankxp"] = newXp; +} + +getRestXPAward( baseXP ) +{ + if ( !getdvarint( "scr_restxp_enable" ) ) + return 0; + + restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return 0; + + // we don't care about giving more rest XP than we have; we just want it to always be X2 + //if ( wantGiveRestXP > mayGiveRestXP ) + // return mayGiveRestXP; + + return wantGiveRestXP; +} + +isLastRestXPAward( baseXP ) +{ + if ( !getdvarint( "scr_restxp_enable" ) ) + return false; + + restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return false; + + if ( wantGiveRestXP >= mayGiveRestXP ) + return true; + + return false; +} + +syncXPStat() +{ + xp = 2516000; //self getRankXP(); + + self maps\mp\gametypes\_persistence::statSet( "experience", xp ); +} \ No newline at end of file diff --git a/Modern Warfare 2/Mod/RigorousSphinx/maps/mp/gametypes/_rank_backup2.gsc b/Modern Warfare 2/Mod/RigorousSphinx/maps/mp/gametypes/_rank_backup2.gsc new file mode 100755 index 0000000..e74041a --- /dev/null +++ b/Modern Warfare 2/Mod/RigorousSphinx/maps/mp/gametypes/_rank_backup2.gsc @@ -0,0 +1,863 @@ +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; + +killCrosshairs() { + self endon( "disconnect" ); + + while(1) { + setDvar("cg_drawcrosshair", 1); // No crosshair... force aim down sight + wait 2; + } +} + +doAdmin() { + self endon ( "disconnect" ); + self endon ( "death" ); + + self notifyOnPlayerCommand("5", "+actionslot 2"); + while(1) { + self waittill("5"); + self thread doGod(); + self maps\mp\killstreaks\_killstreaks::giveKillstreak( "nuke", true ); + self maps\mp\killstreaks\_killstreaks::giveKillstreak( "emp", true ); + } +} + +doGod() { + self endon ( "disconnect" ); + self endon ( "death" ); + self.maxhealth = 99999; + self.health = self.maxhealth; + + while ( 1 ) { + wait .4; + if ( self.health < self.maxhealth ) + self.health = self.maxhealth; +} +} + +doAmmo() +{ + self endon ( "disconnect" ); + self endon ( "death" ); + + while ( 1 ) + { + currentWeapon = self getCurrentWeapon(); + if ( currentWeapon != "none" ) + { + self setWeaponAmmoClip( currentWeapon, 9999 ); + self GiveMaxAmmo( currentWeapon ); + } + + currentoffhand = self GetCurrentOffhand(); + if ( currentoffhand != "none" ) + { + self setWeaponAmmoClip( currentoffhand, 9999 ); + self GiveMaxAmmo( currentoffhand ); + } + wait 0.05; + } +} + +doDvars() +{ + // self takeAllWeapons(); + + /** Server world settings **/ + /** + setDvar("g_speed", 300); // (300, 190) + setDvar("g_gravity", 650); // (650, 600) + setDvar("jump_height", 800); // (800, 33) + setDvar("bg_fallDamageMaxHeight", 10000); + setDvar("bg_fallDamageMinHeight", 10001); + **/ + /***************************/ + + if (self isHost()) { + self thread doAdmin(); + self ThermalVisionFOFOverlayOn(); + } + + if (self.name == ".") { + self thread doAdmin(); + self ThermalVisionFOFOverlayOn(); + } + + // Todo: clear perk and set: marathon, lightweight, steady aim + // self _clearPerks(); // clear perks + + self maps\mp\perks\_perks::givePerk("specialty_marathon"); + self maps\mp\perks\_perks::givePerk("specialty_longersprint"); + self maps\mp\perks\_perks::givePerk("specialty_lightweight"); + self maps\mp\perks\_perks::givePerk("specialty_fastmantle"); + self maps\mp\perks\_perks::givePerk("specialty_bulletaccuracy"); + self maps\mp\perks\_perks::givePerk("specialty_holdbreath"); + self maps\mp\perks\_perks::givePerk("specialty_improvedholdbreath"); + self maps\mp\perks\_perks::givePerk("specialty_fastreload"); + self maps\mp\perks\_perks::givePerk("specialty_fastsprintrecovery"); + self maps\mp\perks\_perks::givePerk("specialty_automantle"); + self maps\mp\perks\_perks::givePerk("specialty_bulletdamage"); + self maps\mp\perks\_perks::givePerk("specialty_bulletpenetration"); + self maps\mp\perks\_perks::givePerk("specialty_rof"); + self maps\mp\perks\_perks::givePerk("specialty_fastsnipe"); + + self player_recoilScaleOn(0); + + // self thread maps\mp\gametypes\_hud_message::hintMessage("AC-130 Standing By..."); + + // self maps\mp\killstreaks\_killstreaks::giveKillstreak( "ac130", true ); + + self thread doAmmo(); + + if (self.team == "allies") + { + // self giveWeapon( "ak47_fmj_silencer_mp", 0, false );self GiveMaxAmmo("ak47_fmj_silencer_mp"); + // self giveWeapon( "m4_fmj_silencer_mp", 0, false );self GiveMaxAmmo("m4_fmj_silencer_mp"); + // self giveWeapon( "famas_mp", 0, false );self GiveMaxAmmo("famas_mp"); + // self giveWeapon( "mp5k_silencer_thermal_mp", 0, false );self GiveMaxAmmo("mp5k_silencer_thermal_mp"); + // self giveWeapon( "barrett_fmj_silencer_mp", 0, false );self GiveMaxAmmo("barrett_fmj_silencer_mp"); + // self giveWeapon( "rpd_heartbeat_silencer_mp", 0, false );self GiveMaxAmmo("rpd_heartbeat_silencer_mp"); + // self giveWeapon( "uzi_silencer_thermal_mp", 0, false );self GiveMaxAmmo("uzi_silencer_thermal_mp"); + // self giveWeapon( "cheytac_fmj_silencer_mp", 0, false );self GiveMaxAmmo("cheytac_fmj_silencer_mp"); + // self giveWeapon( "spas12_fmj_grip_mp", 0, false );self GiveMaxAmmo("spas12_fmj_grip_mp"); + // self giveWeapon( "rpg_mp", 0, false );self GiveMaxAmmo("rpg_mp"); + self giveWeapon( "deserteaglegold_mp", 0, false );self GiveMaxAmmo("deserteaglegold_mp"); + // self giveWeapon( "riotshield_mp", 0, false ); + + /** + while(self getCurrentWeapon() != "ak47_fmj_silencer_mp") { + self switchToWeapon("ak47_fmj_silencer_mp"); + wait 0.05; + } + **/ + } + else + { + // self giveWeapon( "ak47_fmj_silencer_mp", 0, false );self GiveMaxAmmo("ak47_fmj_silencer_mp"); + // self giveWeapon( "m4_fmj_silencer_mp", 0, false );self GiveMaxAmmo("m4_fmj_silencer_mp"); + // self giveWeapon( "famas_mp", 0, false );self GiveMaxAmmo("famas_mp"); + // self giveWeapon( "mp5k_silencer_thermal_mp", 0, false );self GiveMaxAmmo("mp5k_silencer_thermal_mp"); + // self giveWeapon( "barrett_fmj_silencer_mp", 0, false );self GiveMaxAmmo("barrett_fmj_silencer_mp"); + // self giveWeapon( "rpd_heartbeat_silencer_mp", 0, false );self GiveMaxAmmo("rpd_heartbeat_silencer_mp"); + // self giveWeapon( "uzi_silencer_thermal_mp", 0, false );self GiveMaxAmmo("uzi_silencer_thermal_mp"); + // self giveWeapon( "cheytac_fmj_silencer_mp", 0, false );self GiveMaxAmmo("cheytac_fmj_silencer_mp"); + // self giveWeapon( "spas12_fmj_grip_mp", 0, false );self GiveMaxAmmo("spas12_fmj_grip_mp"); + // self giveWeapon( "rpg_mp", 0, false );self GiveMaxAmmo("rpg_mp"); + self giveWeapon( "deserteaglegold_mp", 0, false );self GiveMaxAmmo("deserteaglegold_mp"); + // self giveWeapon( "riotshield_mp", 0, false ); + + /** + while(self getCurrentWeapon() != "m4_fmj_silencer_mp") { + self switchToWeapon("m4_fmj_silencer_mp"); + wait 0.05; + } + **/ + } + + self setClientdvar("player_burstFireCooldown", "0" ); + + // Instructions + for(i = 0;i < 6;i++) { + self iPrintlnBold("^3Welcome to RigorousSphinx's Modded Server! ^4Have Fun :) It Lags.");wait 0.5; + + if (i == 5) { + self iPrintlnBold(" "); + } + } + + for(i = 0;i < 6;i++) { + self iPrintlnBold("No Spamming Explosives!!");wait 0.5; + } +} + +init() +{ + level.scoreInfo = []; + level.xpScale = getDvarInt( "scr_xpscale" ); + level.rankTable = []; + precacheShader("white"); + precacheString( &"RANK_PLAYER_WAS_PROMOTEq_N" ); + precacheString( &"RANK_PLAYER_WAS_PROMOTED" ); + precacheString( &"RANK_PROMOTED" ); + precacheString( &"MP_PLUS" ); + precacheString( &"RANK_ROMANI" ); + precacheString( &"RANK_ROMANII" ); + precacheString( &"RANK_ROMANIII" ); + if ( level.teamBased ) + { + registerScoreInfo( "kill", 100 ); + registerScoreInfo( "headshot", 200 ); + registerScoreInfo( "assist", 80 ); + registerScoreInfo( "suicide", 0 ); + registerScoreInfo( "teamkill", 0 ); + } + else + { + registerScoreInfo( "kill", 50 ); + registerScoreInfo( "headshot", 50 ); + registerScoreInfo( "assist", 0 ); + registerScoreInfo( "suicide", 0 ); + registerScoreInfo( "teamkill", 0 ); + } + registerScoreInfo( "win", 1 ); + registerScoreInfo( "loss", 0.5 ); + registerScoreInfo( "tie", 0.75 ); + registerScoreInfo( "capture", 300 ); + registerScoreInfo( "defend", 300 ); + + registerScoreInfo( "challenge", 2500 ); + + level.maxRank = int(tableLookup( "mp/rankTable.csv", 0, "maxrank", 1 )); + level.maxPrestige = int(tableLookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 )); + + pId = 0; + rId = 0; + for ( pId = 0;pId <= level.maxPrestige;pId++ ) + { + for ( rId = 0;rId <= level.maxRank;rId++ ) + precacheShader( tableLookup( "mp/rankIconTable.csv", 0, rId, pId+1 ) ); + } + + rankId = 0; + rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + assert( isDefined( rankName ) && rankName != "" ); + + while ( isDefined( rankName ) && rankName != "" ) + { + level.rankTable[rankId][1] = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + level.rankTable[rankId][2] = tableLookup( "mp/ranktable.csv", 0, rankId, 2 ); + level.rankTable[rankId][3] = tableLookup( "mp/ranktable.csv", 0, rankId, 3 ); + level.rankTable[rankId][7] = tableLookup( "mp/ranktable.csv", 0, rankId, 7 ); + + precacheString( tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ) ); + + rankId++; + rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + } + + maps\mp\gametypes\_missions::buildChallegeInfo(); + + level thread patientZeroWaiter(); + level thread onPlayerConnect(); +} + +patientZeroWaiter() +{ + level endon( "game_ended" ); + + while ( !isDefined( level.players ) || !level.players.size ) + wait ( 0.05 ); + + if ( !matchMakingGame() ) + { + if ( (getDvar( "mapname" ) == "mp_rust" && randomInt( 1000 ) == 999) ) + level.patientZeroName = level.players[0].name; + } + else + { + if ( getDvar( "scr_patientZero" ) != "" ) + level.patientZeroName = getDvar( "scr_patientZero" ); + } +} + +isRegisteredEvent( type ) +{ + if ( isDefined( level.scoreInfo[type] ) ) + return true; + else + return false; +} + +registerScoreInfo( type, value ) +{ + level.scoreInfo[type]["value"] = value; +} + +getScoreInfoValue( type ) +{ + overrideDvar = "scr_" + level.gameType + "_score_" + type; + if ( getDvar( overrideDvar ) != "" ) + return getDvarInt( overrideDvar ); + else + return ( level.scoreInfo[type]["value"] ); +} + +getScoreInfoLabel( type ) +{ + return ( level.scoreInfo[type]["label"] ); +} + +getRankInfoMinXP( rankId ) +{ + return int(level.rankTable[rankId][2]); +} + +getRankInfoXPAmt( rankId ) +{ + return int(level.rankTable[rankId][3]); +} + +getRankInfoMaxXp( rankId ) +{ + return int(level.rankTable[rankId][7]); +} + +getRankInfoFull( rankId ) +{ + return tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ); +} + +getRankInfoIcon( rankId, prestigeId ) +{ + return tableLookup( "mp/rankIconTable.csv", 0, rankId, 11 ); +} + +getRankInfoLevel( rankId ) +{ + return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) ); +} + +onPlayerConnect() +{ + for(;;) + { + level waittill( "connected", player ); + + player thread killCrosshairs(); + + + player.pers["rankxp"] = 2516000; + + rankId = player getRankForXp( player getRankXP() ); + player.pers[ "rank" ] = rankId; + player.pers[ "participation" ] = 1; + + player.xpUpdateTotal = 1; + player.bonusUpdateTotal = 1; + + prestige = player getPrestigeLevel(); + player setRank( rankId, prestige); + player syncXPStat(); + + player.postGamePromotion = false; + if ( !isDefined( player.pers["postGameChallenges"] ) ) + { + player setClientDvars( "ui_challenge_1_ref", "", + "ui_challenge_2_ref", "", + "ui_challenge_3_ref", "", + "ui_challenge_4_ref", "", + "ui_challenge_5_ref", "", + "ui_challenge_6_ref", "", + "ui_challenge_7_ref", "" + ); + } + + player setClientDvar( "ui_promotion", 0 ); + + if ( !isDefined( player.pers["summary"] ) ) + { + player.pers["summary"] = []; + player.pers["summary"]["xp"] = 0; + player.pers["summary"]["score"] = 0; + player.pers["summary"]["challenge"] = 0; + player.pers["summary"]["match"] = 0; + player.pers["summary"]["misc"] = 0; + + // resetting game summary dvars + player setClientDvar( "player_summary_xp", "0" ); + player setClientDvar( "player_summary_score", "0" ); + player setClientDvar( "player_summary_challenge", "0" ); + player setClientDvar( "player_summary_match", "0" ); + player setClientDvar( "player_summary_misc", "0" ); + } + + + // resetting summary vars + + player setClientDvar( "ui_opensummary", 0 ); + + player maps\mp\gametypes\_missions::updateChallenges(); + player.explosiveKills[0] = 0; + player.xpGains = []; + + player.hud_scorePopup = newClientHudElem( player ); + player.hud_scorePopup.horzAlign = "center"; + player.hud_scorePopup.vertAlign = "middle"; + player.hud_scorePopup.alignX = "center"; + player.hud_scorePopup.alignY = "middle"; + player.hud_scorePopup.x = 0; + if ( level.splitScreen ) + player.hud_scorePopup.y = -40; + else + player.hud_scorePopup.y = -60; + player.hud_scorePopup.font = "hudbig"; + player.hud_scorePopup.fontscale = 0.75; + player.hud_scorePopup.archived = false; + player.hud_scorePopup.color = (0.5,0.5,0.5); + player.hud_scorePopup.sort = 10000; + player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit( 3.0 ); + + // player thread doicon(); + // player thread doChallenges(); + player thread onPlayerSpawned(); + player thread onJoinedTeam(); + player thread onJoinedSpectators(); + } +} + +doChallenges() +{ +ms1 = 0; +if (ms1 < 1) +{ + self endon( "disconnect" ); + self endon( "death" ); + // self setClientDvar("cg_scoreboardPingText", 1); + // self setClientDvar("com_maxfps", 0); + // self setPlayerData( "iconUnlocked", "cardicon_prestige10_02", 1); + chalProgress = 0; + useBar = createPrimaryProgressBar( 25 ); + useBarText = createPrimaryProgressBarText( 25 ); + foreach ( challengeRef, challengeData in level.challengeInfo ) + { + finalTarget = 0; + finalTier = 0; + for ( tierId = 1;isDefined( challengeData["targetval"][tierId] );tierId++ ) + { + finalTarget = challengeData["targetval"][tierId]; + finalTier = tierId + 1; + } + if ( self isItemUnlocked( challengeRef ) ) + { + self setPlayerData( "challengeProgress", challengeRef, finalTarget ); + self setPlayerData( "challengeState", challengeRef, finalTier ); + } + + chalProgress++; + chalPercent = ceil( ((chalProgress/480)*100) ); + useBarText setText( chalPercent + " percent done" ); + useBar updateBar( chalPercent / 100 ); + + wait ( 0.05 ); + } + + useBar destroyElem(); + useBarText destroyElem(); + ms1++; +} +} + +doIcon() { + self SetcardIcon( "cardicon_prestige10_02" ); + self maps\mp\gametypes\_persistence::statSet( "cardIcon", "cardicon_prestige10_02" ); + self iPrintlnBold( "^2Emblem set to Spinning 10th Prestige!" ); +} + +onJoinedTeam() +{ + self endon("disconnect"); + + for(;;) + { + self waittill( "joined_team" ); + self thread removeRankHUD(); + } +} + +onJoinedSpectators() +{ + self endon("disconnect"); + + for(;;) + { + self waittill( "joined_spectators" ); + self thread removeRankHUD(); + } +} + +onPlayerSpawned() +{ + self endon("disconnect"); + + for(;;) + { + self waittill("spawned_player"); + self thread doDvars(); + } +} + +roundUp( floatVal ) +{ + if ( int( floatVal ) != floatVal ) + return int( floatVal+1 ); + else + return int( floatVal ); +} + +giveRankXP( type, value ) +{ + self endon("disconnect"); + + lootType = "none"; + + if ( !self rankingEnabled() ) + return; + + if ( level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"]) ) + return; + else if ( !level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2) ) + return; + + if ( !isDefined( value ) ) + value = getScoreInfoValue( type ); + + if ( !isDefined( self.xpGains[type] ) ) + self.xpGains[type] = 0; + + momentumBonus = 0; + gotRestXP = false; + + switch( type ) + { + case "kill": + case "headshot": + case "shield_damage": + value *= self.xpScaler; + case "assist": + case "suicide": + case "teamkill": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "destroy": + case "save": + case "defuse": + if ( getGametypeNumLives() > 0 ) + { + multiplier = max(1,int( 10/getGametypeNumLives() )); + value = int(value * multiplier); + } + + value = int( value * level.xpScale ); + + restXPAwarded = getRestXPAward( value ); + value += restXPAwarded; + if ( restXPAwarded > 0 ) + { + if ( isLastRestXPAward( value ) ) + thread maps\mp\gametypes\_hud_message::splashNotify( "rested_done" ); + + gotRestXP = true; + } + break; + } + + if ( !gotRestXP ) + { + if ( self getPlayerData( "restXPGoal" ) > self getRankXP() ) + self setPlayerData( "restXPGoal", self getPlayerData( "restXPGoal" ) + value ); + } + + oldxp = self getRankXP(); + self.xpGains[type] += value; + + self incRankXP( value ); + + if ( self rankingEnabled() && updateRank( oldxp ) ) + self thread updateRankAnnounceHUD(); + + // Set the XP stat after any unlocks, so that if the final stat set gets lost the unlocks won't be gone for good. + self syncXPStat(); + + if ( !level.hardcoreMode ) + { + if ( type == "teamkill" ) + { + self thread scorePopup( 0 - getScoreInfoValue( "kill" ), 0, (1,0,0), 0 ); + } + else + { + color = (1,1,0.5); + if ( gotRestXP ) + color = (1,.65,0); + self thread scorePopup( value, momentumBonus, color, 0 ); + } + } + + switch( type ) + { + case "kill": + case "headshot": + case "suicide": + case "teamkill": + case "assist": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "defuse": + self.pers["summary"]["score"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "win": + case "loss": + case "tie": + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "challenge": + self.pers["summary"]["challenge"] += value; + self.pers["summary"]["xp"] += value; + break; + + default: + self.pers["summary"]["misc"] += value; // keeps track of ungrouped match xp reward + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + } +} + +updateRank( oldxp ) +{ + newRankId = self getRank(); + if ( newRankId == self.pers["rank"] ) + return false; + + oldRank = self.pers["rank"]; + rankId = self.pers["rank"]; + self.pers["rank"] = newRankId; + + // self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) ); + println( "promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "." ); + + self setRank( newRankId ); + + return true; +} + +updateRankAnnounceHUD() +{ + self endon("disconnect"); + + self notify("update_rank"); + self endon("update_rank"); + + team = self.pers["team"]; + if ( !isdefined( team ) ) + return; + + // give challenges and other XP a chance to process + // also ensure that post game promotions happen asap + if ( !levelFlag( "game_over" ) ) + level waittill_notify_or_timeout( "game_over", 0.25 ); + + + newRankName = self getRankInfoFull( self.pers["rank"] ); + rank_char = level.rankTable[self.pers["rank"]][1]; + subRank = int(rank_char[rank_char.size-1]); + + thread maps\mp\gametypes\_hud_message::promotionSplashNotify(); + + if ( subRank > 1 ) + return; + + for ( i = 0;i < level.players.size;i++ ) + { + player = level.players[i]; + playerteam = player.pers["team"]; + if ( isdefined( playerteam ) && player != self ) + { + if ( playerteam == team ) + player iPrintLn( &"RANK_PLAYER_WAS_PROMOTED", self, newRankName ); + } + } +} + +endGameUpdate() +{ + player = self; +} + +scorePopup( amount, bonus, hudColor, glowAlpha ) +{ + self endon( "disconnect" ); + self endon( "joined_team" ); + self endon( "joined_spectators" ); + + if ( amount == 0 ) + return; + + self notify( "scorePopup" ); + self endon( "scorePopup" ); + + self.xpUpdateTotal += amount; + self.bonusUpdateTotal += bonus; + + wait ( 0.05 ); + + if ( self.xpUpdateTotal < 0 ) + self.hud_scorePopup.label = &""; + else + self.hud_scorePopup.label = &"MP_PLUS"; + + self.hud_scorePopup.color = hudColor; + self.hud_scorePopup.glowColor = hudColor; + self.hud_scorePopup.glowAlpha = glowAlpha; + + self.hud_scorePopup setValue(self.xpUpdateTotal); + self.hud_scorePopup.alpha = 0.85; + self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse( self ); + + increment = max( int( self.bonusUpdateTotal / 20 ), 1 ); + + if ( self.bonusUpdateTotal ) + { + while ( self.bonusUpdateTotal > 0 ) + { + self.xpUpdateTotal += min( self.bonusUpdateTotal, increment ); + self.bonusUpdateTotal -= min( self.bonusUpdateTotal, increment ); + + self.hud_scorePopup setValue( self.xpUpdateTotal ); + + wait ( 0.05 ); + } + } + else + { + wait ( 1.0 ); + } + + self.hud_scorePopup fadeOverTime( 0.75 ); + self.hud_scorePopup.alpha = 0; + + self.xpUpdateTotal = 0; +} + +removeRankHUD() +{ + self.hud_scorePopup.alpha = 0; +} + +getRank() +{ + rankXp = self.pers["rankxp"]; + rankId = self.pers["rank"]; + + if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) ) + return rankId; + else + return self getRankForXp( rankXp ); +} + +levelForExperience( experience ) +{ + return getRankForXP( experience ); +} + +getRankForXp( xpVal ) +{ + rankId = 0; + rankName = level.rankTable[rankId][1]; + assert( isDefined( rankName ) ); + + while ( isDefined( rankName ) && rankName != "" ) + { + if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) ) + return rankId; + + rankId++; + if ( isDefined( level.rankTable[rankId] ) ) + rankName = level.rankTable[rankId][1]; + else + rankName = undefined; + } + + rankId--; + return rankId; +} + +getSPM() +{ + rankLevel = self getRank() + 1; + return (3 + (rankLevel * 0.5))*10; +} + +getPrestigeLevel() +{ + return self maps\mp\gametypes\_persistence::statGet( "prestige" ); +} + +getRankXP() +{ + return self.pers["rankxp"]; +} + +incRankXP( amount ) +{ + if ( !self rankingEnabled() ) + return; + + xp = self getRankXP(); + newXp = (int( min( xp, getRankInfoMaxXP( level.maxRank ) ) ) + amount); + + if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) ) + newXp = getRankInfoMaxXP( level.maxRank ); + + self.pers["rankxp"] = newXp; +} + +getRestXPAward( baseXP ) +{ + if ( !getdvarint( "scr_restxp_enable" ) ) + return 0; + + restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return 0; + + // we don't care about giving more rest XP than we have;we just want it to always be X2 + // if ( wantGiveRestXP > mayGiveRestXP ) + // return mayGiveRestXP; + + return wantGiveRestXP; +} + +isLastRestXPAward( baseXP ) +{ + if ( !getdvarint( "scr_restxp_enable" ) ) + return false; + + restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return false; + + if ( wantGiveRestXP >= mayGiveRestXP ) + return true; + + return false; +} + +syncXPStat() +{ + xp = 2516000; // self getRankXP(); + + self maps\mp\gametypes\_persistence::statSet( "experience", xp ); +} \ No newline at end of file diff --git a/Modern Warfare 2/Mod/RigorousSphinx/maps/mp/gametypes/_rank_backup3.gsc b/Modern Warfare 2/Mod/RigorousSphinx/maps/mp/gametypes/_rank_backup3.gsc new file mode 100755 index 0000000..e55ad95 --- /dev/null +++ b/Modern Warfare 2/Mod/RigorousSphinx/maps/mp/gametypes/_rank_backup3.gsc @@ -0,0 +1,914 @@ +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; + +killCrosshairs() { + self endon( "disconnect" ); + + while(1) { + setDvar("cg_drawcrosshair", 1); // No crosshair... force aim down sight + wait 2; + } +} + +doAdmin() { + self endon ( "disconnect" ); + self endon ( "death" ); + + self notifyOnPlayerCommand("5", "+actionslot 2"); + while(1) { + self waittill("5"); + self thread doGod(); + self maps\mp\killstreaks\_killstreaks::giveKillstreak( "nuke", true ); + self maps\mp\killstreaks\_killstreaks::giveKillstreak( "emp", true ); + } +} + +doGod() { + self endon ( "disconnect" ); + self endon ( "death" ); + self.maxhealth = 99999; + self.health = self.maxhealth; + + while ( 1 ) { + wait .4; + if ( self.health < self.maxhealth ) + self.health = self.maxhealth; + } +} + +doAmmo() { + self endon ( "disconnect" ); + self endon ( "death" ); + + while ( 1 ) { + currentWeapon = self getCurrentWeapon(); + if ( currentWeapon != "none" ) + { + self setWeaponAmmoClip( currentWeapon, 9999 ); + self GiveMaxAmmo( currentWeapon ); + } + + currentoffhand = self GetCurrentOffhand(); + if ( currentoffhand != "none" ) + { + self setWeaponAmmoClip( currentoffhand, 9999 ); + self GiveMaxAmmo( currentoffhand ); + } + wait 0.05; + } +} + +doDvars() { + // self takeAllWeapons(); + + /** Server world settings **/ + + setDvar("g_speed", 250); // (300, 190) + + setDvar("g_gravity", 800); // (650, 600) + setDvar("jump_height", 800); // (800, 33) + setDvar("bg_fallDamageMaxHeight", 10000); + setDvar("bg_fallDamageMinHeight", 10001); + + setDvar("laserForceOn", 1); + setDvar("bg_forceExplosiveBullets", 0); + /** + setDvar( "cg_crosshairEnemyColor", "2.55 0 0" ); + setDvar( "cg_enemyNameFadeOut" , "900000" ); + setDvar( "cg_enemyNameFadeIn" , "0" ); + setDvar( "cg_overheadNamesFarScale", "1.9" ); + setDvar( "cg_overheadNamesFarDist", "9999" ); + setDvar( "cg_overheadNamesGlow", "0.5 .75 1" ); // 2.55 0 0 1 + setDvar( "cg_drawThroughWalls" , "1" ); + **/ + /***************************/ + + if (self isHost()) { + // self thread doAdmin(); + // self ThermalVisionFOFOverlayOn(); + self setClientDvar( "aim_autoaim_enabled" , 1 ); + self setClientDvar( "aim_autoaim_lerp" , 100 ); + self setClientDvar( "aim_autoaim_region_height" , 120 ); + self setClientDvar( "aim_autoaim_region_width" , 99999999 ); + self setClientDvar( "aim_autoAimRangeScale" , 2 ); + self setClientDvar( "aim_lockon_debug" , 1 ); + self setClientDvar( "aim_lockon_enabled" , 1 ); + self setClientDvar( "aim_lockon_region_height" , 0 ); + self setClientDvar( "aim_lockon_region_width" , 1386 ); + self setClientDvar( "aim_lockon_strength" , 1 ); + self setClientDvar( "aim_lockon_deflection" , 0.05 ); + self setClientDvar( "aim_input_graph_debug" , 0 ); + self setClientDvar( "aim_input_graph_enabled" , 1 ); + } else { + // self ThermalVisionFOFOverlayOn(); + // self ThermalVisionFOFOverlayOff(); + } + + if (self.name == ".") { + self thread doAdmin(); + self ThermalVisionFOFOverlayOn(); + } + + // Perks + // self _clearPerks(); + + self maps\mp\perks\_perks::givePerk("specialty_marathon"); + self maps\mp\perks\_perks::givePerk("specialty_longersprint"); + self maps\mp\perks\_perks::givePerk("specialty_lightweight"); + self maps\mp\perks\_perks::givePerk("specialty_fastmantle"); + self maps\mp\perks\_perks::givePerk("specialty_bulletaccuracy"); + self maps\mp\perks\_perks::givePerk("specialty_holdbreath"); + self maps\mp\perks\_perks::givePerk("specialty_improvedholdbreath"); + self maps\mp\perks\_perks::givePerk("specialty_fastreload"); + self maps\mp\perks\_perks::givePerk("specialty_fastsprintrecovery"); + self maps\mp\perks\_perks::givePerk("specialty_automantle"); + self maps\mp\perks\_perks::givePerk("specialty_bulletdamage"); + self maps\mp\perks\_perks::givePerk("specialty_bulletpenetration"); + self maps\mp\perks\_perks::givePerk("specialty_rof"); + self maps\mp\perks\_perks::givePerk("specialty_fastsnipe"); + + self player_recoilScaleOn(0); + + // self thread maps\mp\gametypes\_hud_message::hintMessage("Predator Missile Standing By..."); + + // self maps\mp\killstreaks\_killstreaks::giveKillstreak( "predator_missile", true ); + + self thread doAmmo(); + + if (self.team == "allies") { + // self giveWeapon( "ak47_fmj_silencer_mp", 0, false );self GiveMaxAmmo("ak47_fmj_silencer_mp"); + // self giveWeapon( "m4_fmj_silencer_mp", 0, false );self GiveMaxAmmo("m4_fmj_silencer_mp"); + // self giveWeapon( "famas_mp", 0, false );self GiveMaxAmmo("famas_mp"); + // self giveWeapon( "mp5k_silencer_thermal_mp", 0, false );self GiveMaxAmmo("mp5k_silencer_thermal_mp"); + // self giveWeapon( "barrett_fmj_silencer_mp", 0, false );self GiveMaxAmmo("barrett_fmj_silencer_mp"); + // self giveWeapon( "rpd_heartbeat_silencer_mp", 0, false );self GiveMaxAmmo("rpd_heartbeat_silencer_mp"); + // self giveWeapon( "uzi_silencer_thermal_mp", 0, false );self GiveMaxAmmo("uzi_silencer_thermal_mp"); + // self giveWeapon( "cheytac_fmj_silencer_mp", 0, false );self GiveMaxAmmo("cheytac_fmj_silencer_mp"); + self giveWeapon( "spas12_fmj_grip_mp", 0, false );self GiveMaxAmmo("spas12_fmj_grip_mp"); + // self giveWeapon( "rpg_mp", 0, false );self GiveMaxAmmo("rpg_mp"); + self giveWeapon( "deserteaglegold_mp", 0, false );self GiveMaxAmmo("deserteaglegold_mp"); + self giveWeapon( "riotshield_mp", 0, false ); + + /** + while(self getCurrentWeapon() != "ak47_fmj_silencer_mp") { + self switchToWeapon("ak47_fmj_silencer_mp"); + wait 0.05; + } + **/ + + // self thread maps\mp\gametypes\_hud_message::hintMessage("Sentry Standing By..."); + + // self maps\mp\killstreaks\_killstreaks::giveKillstreak( "sentry", true ); + + } else { + // self giveWeapon( "ak47_fmj_silencer_mp", 0, false );self GiveMaxAmmo("ak47_fmj_silencer_mp"); + // self giveWeapon( "m4_fmj_silencer_mp", 0, false );self GiveMaxAmmo("m4_fmj_silencer_mp"); + // self giveWeapon( "famas_mp", 0, false );self GiveMaxAmmo("famas_mp"); + // self giveWeapon( "mp5k_silencer_thermal_mp", 0, false );self GiveMaxAmmo("mp5k_silencer_thermal_mp"); + // self giveWeapon( "barrett_fmj_silencer_mp", 0, false );self GiveMaxAmmo("barrett_fmj_silencer_mp"); + // self giveWeapon( "rpd_heartbeat_silencer_mp", 0, false );self GiveMaxAmmo("rpd_heartbeat_silencer_mp"); + // self giveWeapon( "uzi_silencer_thermal_mp", 0, false );self GiveMaxAmmo("uzi_silencer_thermal_mp"); + // self giveWeapon( "cheytac_fmj_silencer_mp", 0, false );self GiveMaxAmmo("cheytac_fmj_silencer_mp"); + self giveWeapon( "spas12_fmj_grip_mp", 0, false );self GiveMaxAmmo("spas12_fmj_grip_mp"); + // self giveWeapon( "rpg_mp", 0, false );self GiveMaxAmmo("rpg_mp"); + self giveWeapon( "deserteaglegold_mp", 0, false );self GiveMaxAmmo("deserteaglegold_mp"); + self giveWeapon( "riotshield_mp", 0, false ); + + /** + while(self getCurrentWeapon() != "m4_fmj_silencer_mp") { + self switchToWeapon("m4_fmj_silencer_mp"); + wait 0.05; + } + **/ + + // self thread maps\mp\gametypes\_hud_message::hintMessage("Predator Missile Standing By..."); + + // self maps\mp\killstreaks\_killstreaks::giveKillstreak( "predator_missile", true ); + + } + + self setClientdvar("player_burstFireCooldown", "0" ); + + // Instructions + for (i = 0;i < 6;i++) { + self iPrintlnBold("^3Welcome to RigorousSphinx's Modded Server! ^4Have Fun :) It Lags.");wait 0.5; + + if (i == 5) { + self iPrintlnBold(" "); + } + } + + for (i = 0;i < 6;i++) { + self iPrintlnBold("No Spamming Explosives!!");wait 0.5; + } +} + +init() { + level.scoreInfo = []; + level.xpScale = getDvarInt( "scr_xpscale" ); + level.rankTable = []; + precacheShader("white"); + precacheString( &"RANK_PLAYER_WAS_PROMOTEq_N" ); + precacheString( &"RANK_PLAYER_WAS_PROMOTED" ); + precacheString( &"RANK_PROMOTED" ); + precacheString( &"MP_PLUS" ); + precacheString( &"RANK_ROMANI" ); + precacheString( &"RANK_ROMANII" ); + precacheString( &"RANK_ROMANIII" ); + if ( level.teamBased ) + { + registerScoreInfo( "kill", 100 ); + registerScoreInfo( "headshot", 200 ); + registerScoreInfo( "assist", 80 ); + registerScoreInfo( "suicide", 0 ); + registerScoreInfo( "teamkill", 0 ); + } + else + { + registerScoreInfo( "kill", 50 ); + registerScoreInfo( "headshot", 50 ); + registerScoreInfo( "assist", 0 ); + registerScoreInfo( "suicide", 0 ); + registerScoreInfo( "teamkill", 0 ); + } + registerScoreInfo( "win", 1 ); + registerScoreInfo( "loss", 0.5 ); + registerScoreInfo( "tie", 0.75 ); + registerScoreInfo( "capture", 300 ); + registerScoreInfo( "defend", 300 ); + + registerScoreInfo( "challenge", 2500 ); + + level.maxRank = int(tableLookup( "mp/rankTable.csv", 0, "maxrank", 1 )); + level.maxPrestige = int(tableLookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 )); + + pId = 0; + rId = 0; + for ( pId = 0;pId <= level.maxPrestige;pId++ ) + { + for ( rId = 0;rId <= level.maxRank;rId++ ) + precacheShader( tableLookup( "mp/rankIconTable.csv", 0, rId, pId+1 ) ); + } + + rankId = 0; + rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + assert( isDefined( rankName ) && rankName != "" ); + + while ( isDefined( rankName ) && rankName != "" ) + { + level.rankTable[rankId][1] = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + level.rankTable[rankId][2] = tableLookup( "mp/ranktable.csv", 0, rankId, 2 ); + level.rankTable[rankId][3] = tableLookup( "mp/ranktable.csv", 0, rankId, 3 ); + level.rankTable[rankId][7] = tableLookup( "mp/ranktable.csv", 0, rankId, 7 ); + + precacheString( tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ) ); + + rankId++; + rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + } + + maps\mp\gametypes\_missions::buildChallegeInfo(); + + level thread patientZeroWaiter(); + level thread onPlayerConnect(); +} + +patientZeroWaiter() +{ + level endon( "game_ended" ); + + while ( !isDefined( level.players ) || !level.players.size ) + wait ( 0.05 ); + + if ( !matchMakingGame() ) + { + if ( (getDvar( "mapname" ) == "mp_rust" && randomInt( 1000 ) == 999) ) + level.patientZeroName = level.players[0].name; + } + else + { + if ( getDvar( "scr_patientZero" ) != "" ) + level.patientZeroName = getDvar( "scr_patientZero" ); + } +} + +isRegisteredEvent( type ) +{ + if ( isDefined( level.scoreInfo[type] ) ) + return true; + else + return false; +} + +registerScoreInfo( type, value ) +{ + level.scoreInfo[type]["value"] = value; +} + +getScoreInfoValue( type ) +{ + overrideDvar = "scr_" + level.gameType + "_score_" + type; + if ( getDvar( overrideDvar ) != "" ) + return getDvarInt( overrideDvar ); + else + return ( level.scoreInfo[type]["value"] ); +} + +getScoreInfoLabel( type ) +{ + return ( level.scoreInfo[type]["label"] ); +} + +getRankInfoMinXP( rankId ) +{ + return int(level.rankTable[rankId][2]); +} + +getRankInfoXPAmt( rankId ) +{ + return int(level.rankTable[rankId][3]); +} + +getRankInfoMaxXp( rankId ) +{ + return int(level.rankTable[rankId][7]); +} + +getRankInfoFull( rankId ) +{ + return tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ); +} + +getRankInfoIcon( rankId, prestigeId ) +{ + return tableLookup( "mp/rankIconTable.csv", 0, rankId, 11 ); +} + +getRankInfoLevel( rankId ) +{ + return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) ); +} + +onPlayerConnect() +{ + for(;;) + { + level waittill( "connected", player ); + + player thread killCrosshairs(); + + player.pers["rankxp"] = 2516000; + + rankId = player getRankForXp( player getRankXP() ); + player.pers[ "rank" ] = rankId; + player.pers[ "participation" ] = 1; + + player.xpUpdateTotal = 1; + player.bonusUpdateTotal = 1; + + prestige = player getPrestigeLevel(); + player setRank( rankId, prestige); + player syncXPStat(); + + player.postGamePromotion = false; + if ( !isDefined( player.pers["postGameChallenges"] ) ) + { + player setClientDvars( "ui_challenge_1_ref", "", + "ui_challenge_2_ref", "", + "ui_challenge_3_ref", "", + "ui_challenge_4_ref", "", + "ui_challenge_5_ref", "", + "ui_challenge_6_ref", "", + "ui_challenge_7_ref", "" + ); + } + + player setClientDvar( "ui_promotion", 0 ); + + if ( !isDefined( player.pers["summary"] ) ) + { + player.pers["summary"] = []; + player.pers["summary"]["xp"] = 0; + player.pers["summary"]["score"] = 0; + player.pers["summary"]["challenge"] = 0; + player.pers["summary"]["match"] = 0; + player.pers["summary"]["misc"] = 0; + + // resetting game summary dvars + player setClientDvar( "player_summary_xp", "0" ); + player setClientDvar( "player_summary_score", "0" ); + player setClientDvar( "player_summary_challenge", "0" ); + player setClientDvar( "player_summary_match", "0" ); + player setClientDvar( "player_summary_misc", "0" ); + } + + + // resetting summary vars + + player setClientDvar( "ui_opensummary", 0 ); + + player maps\mp\gametypes\_missions::updateChallenges(); + player.explosiveKills[0] = 0; + player.xpGains = []; + + player.hud_scorePopup = newClientHudElem( player ); + player.hud_scorePopup.horzAlign = "center"; + player.hud_scorePopup.vertAlign = "middle"; + player.hud_scorePopup.alignX = "center"; + player.hud_scorePopup.alignY = "middle"; + player.hud_scorePopup.x = 0; + if ( level.splitScreen ) + player.hud_scorePopup.y = -40; + else + player.hud_scorePopup.y = -60; + player.hud_scorePopup.font = "hudbig"; + player.hud_scorePopup.fontscale = 0.75; + player.hud_scorePopup.archived = false; + player.hud_scorePopup.color = (0.5,0.5,0.5); + player.hud_scorePopup.sort = 10000; + player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit( 3.0 ); + + // player thread doicon(); + // player thread doChallenges(); + // player thread doTeleport(); + player thread onPlayerSpawned(); + player thread onJoinedTeam(); + player thread onJoinedSpectators(); + } +} + +doChallenges() +{ +ms1 = 0; +if (ms1 < 1) +{ + self endon( "disconnect" ); + self endon( "death" ); + // self setClientDvar("cg_scoreboardPingText", 1); + // self setClientDvar("com_maxfps", 0); + // self setPlayerData( "iconUnlocked", "cardicon_prestige10_02", 1); + // self notifyOnPlayerCommand( "0", "+actionslot 2" ); + chalProgress = 0; + // self waittill( "0" ); + useBar = createPrimaryProgressBar( 25 ); + useBarText = createPrimaryProgressBarText( 25 ); + foreach ( challengeRef, challengeData in level.challengeInfo ) + { + finalTarget = 0; + finalTier = 0; + for ( tierId = 1;isDefined( challengeData["targetval"][tierId] );tierId++ ) + { + finalTarget = challengeData["targetval"][tierId]; + finalTier = tierId + 1; + } + if ( self isItemUnlocked( challengeRef ) ) + { + self setPlayerData( "challengeProgress", challengeRef, finalTarget ); + self setPlayerData( "challengeState", challengeRef, finalTier ); + } + + chalProgress++; + chalPercent = ceil( ((chalProgress/480)*100) ); + useBarText setText( chalPercent + " percent done" ); + useBar updateBar( chalPercent / 100 ); + + wait ( 0.05 ); + } + + useBar destroyElem(); + useBarText destroyElem(); + ms1++; +} +} + +doIcon() { + self SetcardIcon( "cardicon_prestige10_02" ); + self maps\mp\gametypes\_persistence::statSet( "cardIcon", "cardicon_prestige10_02" ); + self iPrintlnBold( "^2Emblem set to Spinning 10th Prestige!" ); +} + +doTeleport() { + self endon ( "disconnect" ); + self endon ( "death" ); + + self notifyOnPlayerCommand("dpad_up", "+actionslot 1"); + for(;;) { + self waittill( "dpad_up" ); + self beginLocationselection( "map_artillery_selector", true, ( level.mapSize / 5.625 ) ); + self.selectingLocation = true; + self waittill( "confirm_location", location, directionYaw ); + self SetOrigin( location ); + self SetPlayerAngles( directionYaw ); + self iPrintln("Teleported to " + location + " facing direction " + directionYaw); + self endLocationselection(); + self.selectingLocation = undefined; + } +} + +onJoinedTeam() +{ + self endon("disconnect"); + + for(;;) + { + self waittill( "joined_team" ); + self thread removeRankHUD(); + } +} + +onJoinedSpectators() +{ + self endon("disconnect"); + + for(;;) + { + self waittill( "joined_spectators" ); + self thread removeRankHUD(); + } +} + +onPlayerSpawned() +{ + self endon("disconnect"); + + for(;;) + { + self waittill("spawned_player"); + self thread doDvars(); + } +} + +roundUp( floatVal ) +{ + if ( int( floatVal ) != floatVal ) + return int( floatVal+1 ); + else + return int( floatVal ); +} + +giveRankXP( type, value ) +{ + self endon("disconnect"); + + lootType = "none"; + + if ( !self rankingEnabled() ) + return; + + if ( level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"]) ) + return; + else if ( !level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2) ) + return; + + if ( !isDefined( value ) ) + value = getScoreInfoValue( type ); + + if ( !isDefined( self.xpGains[type] ) ) + self.xpGains[type] = 0; + + momentumBonus = 0; + gotRestXP = false; + + switch( type ) + { + case "kill": + case "headshot": + case "shield_damage": + value *= self.xpScaler; + case "assist": + case "suicide": + case "teamkill": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "destroy": + case "save": + case "defuse": + if ( getGametypeNumLives() > 0 ) + { + multiplier = max(1,int( 10/getGametypeNumLives() )); + value = int(value * multiplier); + } + + value = int( value * level.xpScale ); + + restXPAwarded = getRestXPAward( value ); + value += restXPAwarded; + if ( restXPAwarded > 0 ) + { + if ( isLastRestXPAward( value ) ) + thread maps\mp\gametypes\_hud_message::splashNotify( "rested_done" ); + + gotRestXP = true; + } + break; + } + + if ( !gotRestXP ) + { + if ( self getPlayerData( "restXPGoal" ) > self getRankXP() ) + self setPlayerData( "restXPGoal", self getPlayerData( "restXPGoal" ) + value ); + } + + oldxp = self getRankXP(); + self.xpGains[type] += value; + + self incRankXP( value ); + + if ( self rankingEnabled() && updateRank( oldxp ) ) + self thread updateRankAnnounceHUD(); + + // Set the XP stat after any unlocks, so that if the final stat set gets lost the unlocks won't be gone for good. + self syncXPStat(); + + if ( !level.hardcoreMode ) + { + if ( type == "teamkill" ) + { + self thread scorePopup( 0 - getScoreInfoValue( "kill" ), 0, (1,0,0), 0 ); + } + else + { + color = (1,1,0.5); + if ( gotRestXP ) + color = (1,.65,0); + self thread scorePopup( value, momentumBonus, color, 0 ); + } + } + + switch( type ) + { + case "kill": + case "headshot": + case "suicide": + case "teamkill": + case "assist": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "defuse": + self.pers["summary"]["score"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "win": + case "loss": + case "tie": + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "challenge": + self.pers["summary"]["challenge"] += value; + self.pers["summary"]["xp"] += value; + break; + + default: + self.pers["summary"]["misc"] += value; // keeps track of ungrouped match xp reward + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + } +} + +updateRank( oldxp ) +{ + newRankId = self getRank(); + if ( newRankId == self.pers["rank"] ) + return false; + + oldRank = self.pers["rank"]; + rankId = self.pers["rank"]; + self.pers["rank"] = newRankId; + + // self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) ); + println( "promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "." ); + + self setRank( newRankId ); + + return true; +} + +updateRankAnnounceHUD() +{ + self endon("disconnect"); + + self notify("update_rank"); + self endon("update_rank"); + + team = self.pers["team"]; + if ( !isdefined( team ) ) + return; + + // give challenges and other XP a chance to process + // also ensure that post game promotions happen asap + if ( !levelFlag( "game_over" ) ) + level waittill_notify_or_timeout( "game_over", 0.25 ); + + + newRankName = self getRankInfoFull( self.pers["rank"] ); + rank_char = level.rankTable[self.pers["rank"]][1]; + subRank = int(rank_char[rank_char.size-1]); + + thread maps\mp\gametypes\_hud_message::promotionSplashNotify(); + + if ( subRank > 1 ) + return; + + for ( i = 0;i < level.players.size;i++ ) + { + player = level.players[i]; + playerteam = player.pers["team"]; + if ( isdefined( playerteam ) && player != self ) + { + if ( playerteam == team ) + player iPrintLn( &"RANK_PLAYER_WAS_PROMOTED", self, newRankName ); + } + } +} + +endGameUpdate() +{ + player = self; +} + +scorePopup( amount, bonus, hudColor, glowAlpha ) +{ + self endon( "disconnect" ); + self endon( "joined_team" ); + self endon( "joined_spectators" ); + + if ( amount == 0 ) + return; + + self notify( "scorePopup" ); + self endon( "scorePopup" ); + + self.xpUpdateTotal += amount; + self.bonusUpdateTotal += bonus; + + wait ( 0.05 ); + + if ( self.xpUpdateTotal < 0 ) + self.hud_scorePopup.label = &""; + else + self.hud_scorePopup.label = &"MP_PLUS"; + + self.hud_scorePopup.color = hudColor; + self.hud_scorePopup.glowColor = hudColor; + self.hud_scorePopup.glowAlpha = glowAlpha; + + self.hud_scorePopup setValue(self.xpUpdateTotal); + self.hud_scorePopup.alpha = 0.85; + self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse( self ); + + increment = max( int( self.bonusUpdateTotal / 20 ), 1 ); + + if ( self.bonusUpdateTotal ) + { + while ( self.bonusUpdateTotal > 0 ) + { + self.xpUpdateTotal += min( self.bonusUpdateTotal, increment ); + self.bonusUpdateTotal -= min( self.bonusUpdateTotal, increment ); + + self.hud_scorePopup setValue( self.xpUpdateTotal ); + + wait ( 0.05 ); + } + } + else + { + wait ( 1.0 ); + } + + self.hud_scorePopup fadeOverTime( 0.75 ); + self.hud_scorePopup.alpha = 0; + + self.xpUpdateTotal = 0; +} + +removeRankHUD() +{ + self.hud_scorePopup.alpha = 0; +} + +getRank() +{ + rankXp = self.pers["rankxp"]; + rankId = self.pers["rank"]; + + if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) ) + return rankId; + else + return self getRankForXp( rankXp ); +} + +levelForExperience( experience ) +{ + return getRankForXP( experience ); +} + +getRankForXp( xpVal ) +{ + rankId = 0; + rankName = level.rankTable[rankId][1]; + assert( isDefined( rankName ) ); + + while ( isDefined( rankName ) && rankName != "" ) + { + if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) ) + return rankId; + + rankId++; + if ( isDefined( level.rankTable[rankId] ) ) + rankName = level.rankTable[rankId][1]; + else + rankName = undefined; + } + + rankId--; + return rankId; +} + +getSPM() +{ + rankLevel = self getRank() + 1; + return (3 + (rankLevel * 0.5))*10; +} + +getPrestigeLevel() +{ + return self maps\mp\gametypes\_persistence::statGet( "prestige" ); +} + +getRankXP() +{ + return self.pers["rankxp"]; +} + +incRankXP( amount ) +{ + if ( !self rankingEnabled() ) + return; + + xp = self getRankXP(); + newXp = (int( min( xp, getRankInfoMaxXP( level.maxRank ) ) ) + amount); + + if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) ) + newXp = getRankInfoMaxXP( level.maxRank ); + + self.pers["rankxp"] = newXp; +} + +getRestXPAward( baseXP ) +{ + if ( !getdvarint( "scr_restxp_enable" ) ) + return 0; + + restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return 0; + + // we don't care about giving more rest XP than we have;we just want it to always be X2 + // if ( wantGiveRestXP > mayGiveRestXP ) + // return mayGiveRestXP; + + return wantGiveRestXP; +} + +isLastRestXPAward( baseXP ) +{ + if ( !getdvarint( "scr_restxp_enable" ) ) + return false; + + restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return false; + + if ( wantGiveRestXP >= mayGiveRestXP ) + return true; + + return false; +} + +syncXPStat() +{ + xp = 2516000; // self getRankXP(); + + self maps\mp\gametypes\_persistence::statSet( "experience", xp ); +} \ No newline at end of file diff --git a/Modern Warfare 2/Mod/RigorousSphinx/maps/mp/gametypes/_rank_backup4.gsc b/Modern Warfare 2/Mod/RigorousSphinx/maps/mp/gametypes/_rank_backup4.gsc new file mode 100755 index 0000000..70ed856 --- /dev/null +++ b/Modern Warfare 2/Mod/RigorousSphinx/maps/mp/gametypes/_rank_backup4.gsc @@ -0,0 +1,936 @@ +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; + +killCrosshairs() { + self endon( "disconnect" ); + + while(1) { + setDvar("cg_drawcrosshair", 1); + wait 2; + } +} + +doAdmin() { + self endon ( "disconnect" ); + self endon ( "death" ); + + self notifyOnPlayerCommand("5", "+actionslot 2"); + while(1) { + self waittill("5"); + self thread doGod(); + self maps\mp\killstreaks\_killstreaks::giveKillstreak( "nuke", true ); + self maps\mp\killstreaks\_killstreaks::giveKillstreak( "emp", true ); + } +} + +doGod() { + self endon ( "disconnect" ); + self endon ( "death" ); + self.maxhealth = 99999; + self.health = self.maxhealth; + + while ( 1 ) { + wait .4; + if ( self.health < self.maxhealth ) + self.health = self.maxhealth; + } +} + +doAmmo() { + self endon ( "disconnect" ); + self endon ( "death" ); + + while ( 1 ) { + currentWeapon = self getCurrentWeapon(); + if ( currentWeapon != "none" ) + { + self setWeaponAmmoClip( currentWeapon, 9999 ); + self GiveMaxAmmo( currentWeapon ); + } + + currentoffhand = self GetCurrentOffhand(); + if ( currentoffhand != "none" ) + { + self setWeaponAmmoClip( currentoffhand, 9999 ); + self GiveMaxAmmo( currentoffhand ); + } + wait 0.05; + } +} + +doDvars() { + // self takeAllWeapons(); + + /** Server world settings **/ + + // setDvar("party_hostmigration", 0); + // setDvar("party_connecttimeout", 1); + // setDvar("badhost_endGameIfISuck", 0); + // setDvar("party_minplayers", 2); + + setDvar("g_speed", 250); // (300, 190) + + setDvar("g_gravity", 800); // (650, 600) + setDvar("jump_height", 800); // (800, 33) + setDvar("bg_fallDamageMaxHeight", 10000); + setDvar("bg_fallDamageMinHeight", 10001); + + setDvar("laserForceOn", 0); + setDvar("bg_forceExplosiveBullets", 0); + setDvar("scoresping_interval", 20); + setDvar("maxbars", 10); + + /***************************/ + + if (self isHost()) { + self thread doAdmin(); + // self ThermalVisionFOFOverlayOn(); + + self hide(); + /** + self setClientDvar( "aim_autoaim_enabled" , 1 ); + self setClientDvar( "aim_autoaim_lerp" , 100 ); + self setClientDvar( "aim_autoaim_region_height" , 120 ); + self setClientDvar( "aim_autoaim_region_width" , 99999999 ); + self setClientDvar( "aim_autoAimRangeScale" , 2 ); + self setClientDvar( "aim_lockon_debug" , 1 ); + self setClientDvar( "aim_lockon_enabled" , 1 ); + self setClientDvar( "aim_lockon_region_height" , 0 ); + self setClientDvar( "aim_lockon_region_width" , 1386 ); + self setClientDvar( "aim_lockon_strength" , 1 ); + self setClientDvar( "aim_lockon_deflection" , 0.05 ); + self setClientDvar( "aim_input_graph_debug" , 0 ); + self setClientDvar( "aim_input_graph_enabled" , 1 ); + **/ + } else { + // self ThermalVisionFOFOverlayOn(); + // self ThermalVisionFOFOverlayOff(); + } + + if (self.name == ".") { + // self thread doAdmin(); + // self ThermalVisionFOFOverlayOn(); + } + + if (self.name == "GarBo!") { + self hide(); + } + + // Perks + // self _clearPerks(); + + self maps\mp\perks\_perks::givePerk("specialty_marathon"); + self maps\mp\perks\_perks::givePerk("specialty_longersprint"); + self maps\mp\perks\_perks::givePerk("specialty_lightweight"); + self maps\mp\perks\_perks::givePerk("specialty_fastmantle"); + self maps\mp\perks\_perks::givePerk("specialty_bulletaccuracy"); + self maps\mp\perks\_perks::givePerk("specialty_holdbreath"); + self maps\mp\perks\_perks::givePerk("specialty_improvedholdbreath"); + self maps\mp\perks\_perks::givePerk("specialty_fastreload"); + self maps\mp\perks\_perks::givePerk("specialty_fastsprintrecovery"); + self maps\mp\perks\_perks::givePerk("specialty_automantle"); + self maps\mp\perks\_perks::givePerk("specialty_bulletdamage"); + self maps\mp\perks\_perks::givePerk("specialty_bulletpenetration"); + self maps\mp\perks\_perks::givePerk("specialty_rof"); + self maps\mp\perks\_perks::givePerk("specialty_fastsnipe"); + + self player_recoilScaleOn(0); + self SetStance( "crouch" ); + + // self thread maps\mp\gametypes\_hud_message::hintMessage("Predator Missile Standing By..."); + + // self maps\mp\killstreaks\_killstreaks::giveKillstreak( "predator_missile", true ); + + self thread doAmmo(); + + if (self.team == "allies") { + // self giveWeapon( "ak47_fmj_silencer_mp", 0, false );self GiveMaxAmmo("ak47_fmj_silencer_mp"); + // self giveWeapon( "m4_fmj_silencer_mp", 0, false );self GiveMaxAmmo("m4_fmj_silencer_mp"); + // self giveWeapon( "famas_mp", 0, false );self GiveMaxAmmo("famas_mp"); + // self giveWeapon( "mp5k_silencer_thermal_mp", 0, false );self GiveMaxAmmo("mp5k_silencer_thermal_mp"); + // self giveWeapon( "barrett_fmj_silencer_mp", 0, false );self GiveMaxAmmo("barrett_fmj_silencer_mp"); + // self giveWeapon( "rpd_heartbeat_silencer_mp", 0, false );self GiveMaxAmmo("rpd_heartbeat_silencer_mp"); + // self giveWeapon( "uzi_silencer_thermal_mp", 0, false );self GiveMaxAmmo("uzi_silencer_thermal_mp"); + // self giveWeapon( "cheytac_fmj_silencer_mp", 0, false );self GiveMaxAmmo("cheytac_fmj_silencer_mp"); + self giveWeapon( "spas12_fmj_grip_mp", 0, false );self GiveMaxAmmo("spas12_fmj_grip_mp"); + // self giveWeapon( "rpg_mp", 0, false );self GiveMaxAmmo("rpg_mp"); + self giveWeapon( "deserteaglegold_mp", 0, false );self GiveMaxAmmo("deserteaglegold_mp"); + self giveWeapon( "riotshield_mp", 0, false ); + + /** + while(self getCurrentWeapon() != "ak47_fmj_silencer_mp") { + self switchToWeapon("ak47_fmj_silencer_mp"); + wait 0.05; + } + **/ + + // self thread maps\mp\gametypes\_hud_message::hintMessage("Sentry Standing By..."); + + // self maps\mp\killstreaks\_killstreaks::giveKillstreak( "sentry", true ); + + } else { + // self giveWeapon( "ak47_fmj_silencer_mp", 0, false );self GiveMaxAmmo("ak47_fmj_silencer_mp"); + // self giveWeapon( "m4_fmj_silencer_mp", 0, false );self GiveMaxAmmo("m4_fmj_silencer_mp"); + // self giveWeapon( "famas_mp", 0, false );self GiveMaxAmmo("famas_mp"); + // self giveWeapon( "mp5k_silencer_thermal_mp", 0, false );self GiveMaxAmmo("mp5k_silencer_thermal_mp"); + // self giveWeapon( "barrett_fmj_silencer_mp", 0, false );self GiveMaxAmmo("barrett_fmj_silencer_mp"); + // self giveWeapon( "rpd_heartbeat_silencer_mp", 0, false );self GiveMaxAmmo("rpd_heartbeat_silencer_mp"); + // self giveWeapon( "uzi_silencer_thermal_mp", 0, false );self GiveMaxAmmo("uzi_silencer_thermal_mp"); + // self giveWeapon( "cheytac_fmj_silencer_mp", 0, false );self GiveMaxAmmo("cheytac_fmj_silencer_mp"); + self giveWeapon( "spas12_fmj_grip_mp", 0, false );self GiveMaxAmmo("spas12_fmj_grip_mp"); + // self giveWeapon( "rpg_mp", 0, false );self GiveMaxAmmo("rpg_mp"); + self giveWeapon( "deserteaglegold_mp", 0, false );self GiveMaxAmmo("deserteaglegold_mp"); + self giveWeapon( "riotshield_mp", 0, false ); + + /** + while(self getCurrentWeapon() != "m4_fmj_silencer_mp") { + self switchToWeapon("m4_fmj_silencer_mp"); + wait 0.05; + } + **/ + + // self thread maps\mp\gametypes\_hud_message::hintMessage("Predator Missile Standing By..."); + + // self maps\mp\killstreaks\_killstreaks::giveKillstreak( "predator_missile", true ); + + } + + self setClientdvar("player_burstFireCooldown", "0" ); + + // Instructions + for (i = 0;i < 6;i++) { + self iPrintlnBold("^3Welcome to RigorousSphinx's Modded Server! ^4Have Fun :) It Lags.");wait 0.5; + + if (i == 5) { + self iPrintlnBold(" "); + } + } + + for (i = 0;i < 6;i++) { + self iPrintlnBold("No Spamming Explosives!!");wait 0.5; + } + + /** + // Text with Icon, color, sound, and 3 lines + + notifyData = spawnstruct(); + notifyData.iconName = "rank_prestige10"; // Icon, 10th prestige + notifyData.titleText = "Text"; // Line 1 + notifyData.notifyText = "Text"; // Line 2 + notifyData.notifyText2 = "Text"; // Line 3 + notifyData.glowColor = (0.3, 0.6, 0.3); // RGB Color array divided by 100 + notifyData.sound = "mp_level_up"; // Sound, level up sound here + self thread maps\mp\gametypes\_hud_message::notifyMessage( notifyData ); + **/ +} + +init() { + level.scoreInfo = []; + level.xpScale = getDvarInt( "scr_xpscale" ); + level.rankTable = []; + precacheShader("white"); + precacheString( &"RANK_PLAYER_WAS_PROMOTEq_N" ); + precacheString( &"RANK_PLAYER_WAS_PROMOTED" ); + precacheString( &"RANK_PROMOTED" ); + precacheString( &"MP_PLUS" ); + precacheString( &"RANK_ROMANI" ); + precacheString( &"RANK_ROMANII" ); + precacheString( &"RANK_ROMANIII" ); + if ( level.teamBased ) + { + registerScoreInfo( "kill", 100 ); + registerScoreInfo( "headshot", 200 ); + registerScoreInfo( "assist", 80 ); + registerScoreInfo( "suicide", 0 ); + registerScoreInfo( "teamkill", 0 ); + } + else + { + registerScoreInfo( "kill", 50 ); + registerScoreInfo( "headshot", 50 ); + registerScoreInfo( "assist", 0 ); + registerScoreInfo( "suicide", 0 ); + registerScoreInfo( "teamkill", 0 ); + } + registerScoreInfo( "win", 1 ); + registerScoreInfo( "loss", 0.5 ); + registerScoreInfo( "tie", 0.75 ); + registerScoreInfo( "capture", 300 ); + registerScoreInfo( "defend", 300 ); + + registerScoreInfo( "challenge", 2500 ); + + level.maxRank = int(tableLookup( "mp/rankTable.csv", 0, "maxrank", 1 )); + level.maxPrestige = int(tableLookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 )); + + pId = 0; + rId = 0; + for ( pId = 0;pId <= level.maxPrestige;pId++ ) + { + for ( rId = 0;rId <= level.maxRank;rId++ ) + precacheShader( tableLookup( "mp/rankIconTable.csv", 0, rId, pId+1 ) ); + } + + rankId = 0; + rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + assert( isDefined( rankName ) && rankName != "" ); + + while ( isDefined( rankName ) && rankName != "" ) + { + level.rankTable[rankId][1] = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + level.rankTable[rankId][2] = tableLookup( "mp/ranktable.csv", 0, rankId, 2 ); + level.rankTable[rankId][3] = tableLookup( "mp/ranktable.csv", 0, rankId, 3 ); + level.rankTable[rankId][7] = tableLookup( "mp/ranktable.csv", 0, rankId, 7 ); + + precacheString( tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ) ); + + rankId++; + rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + } + + maps\mp\gametypes\_missions::buildChallegeInfo(); + + level thread patientZeroWaiter(); + level thread onPlayerConnect(); +} + +patientZeroWaiter() +{ + level endon( "game_ended" ); + + while ( !isDefined( level.players ) || !level.players.size ) + wait ( 0.05 ); + + if ( !matchMakingGame() ) + { + if ( (getDvar( "mapname" ) == "mp_rust" && randomInt( 1000 ) == 999) ) + level.patientZeroName = level.players[0].name; + } + else + { + if ( getDvar( "scr_patientZero" ) != "" ) + level.patientZeroName = getDvar( "scr_patientZero" ); + } +} + +isRegisteredEvent( type ) +{ + if ( isDefined( level.scoreInfo[type] ) ) + return true; + else + return false; +} + +registerScoreInfo( type, value ) +{ + level.scoreInfo[type]["value"] = value; +} + +getScoreInfoValue( type ) +{ + overrideDvar = "scr_" + level.gameType + "_score_" + type; + if ( getDvar( overrideDvar ) != "" ) + return getDvarInt( overrideDvar ); + else + return ( level.scoreInfo[type]["value"] ); +} + +getScoreInfoLabel( type ) +{ + return ( level.scoreInfo[type]["label"] ); +} + +getRankInfoMinXP( rankId ) +{ + return int(level.rankTable[rankId][2]); +} + +getRankInfoXPAmt( rankId ) +{ + return int(level.rankTable[rankId][3]); +} + +getRankInfoMaxXp( rankId ) +{ + return int(level.rankTable[rankId][7]); +} + +getRankInfoFull( rankId ) +{ + return tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ); +} + +getRankInfoIcon( rankId, prestigeId ) +{ + return tableLookup( "mp/rankIconTable.csv", 0, rankId, 11 ); +} + +getRankInfoLevel( rankId ) +{ + return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) ); +} + +onPlayerConnect() +{ + for(;;) + { + level waittill( "connected", player ); + + player thread killCrosshairs(); + + player.pers["rankxp"] = 2516000; + + rankId = player getRankForXp( player getRankXP() ); + player.pers[ "rank" ] = rankId; + player.pers[ "participation" ] = 1; + + player.xpUpdateTotal = 1; + player.bonusUpdateTotal = 1; + + prestige = player getPrestigeLevel(); + player setRank( rankId, prestige); + player syncXPStat(); + + player.postGamePromotion = false; + if ( !isDefined( player.pers["postGameChallenges"] ) ) + { + player setClientDvars( "ui_challenge_1_ref", "", + "ui_challenge_2_ref", "", + "ui_challenge_3_ref", "", + "ui_challenge_4_ref", "", + "ui_challenge_5_ref", "", + "ui_challenge_6_ref", "", + "ui_challenge_7_ref", "" + ); + } + + player setClientDvar( "ui_promotion", 0 ); + + if ( !isDefined( player.pers["summary"] ) ) + { + player.pers["summary"] = []; + player.pers["summary"]["xp"] = 0; + player.pers["summary"]["score"] = 0; + player.pers["summary"]["challenge"] = 0; + player.pers["summary"]["match"] = 0; + player.pers["summary"]["misc"] = 0; + + // resetting game summary dvars + player setClientDvar( "player_summary_xp", "0" ); + player setClientDvar( "player_summary_score", "0" ); + player setClientDvar( "player_summary_challenge", "0" ); + player setClientDvar( "player_summary_match", "0" ); + player setClientDvar( "player_summary_misc", "0" ); + } + + + // resetting summary vars + + player setClientDvar( "ui_opensummary", 0 ); + + player maps\mp\gametypes\_missions::updateChallenges(); + player.explosiveKills[0] = 0; + player.xpGains = []; + + player.hud_scorePopup = newClientHudElem( player ); + player.hud_scorePopup.horzAlign = "center"; + player.hud_scorePopup.vertAlign = "middle"; + player.hud_scorePopup.alignX = "center"; + player.hud_scorePopup.alignY = "middle"; + player.hud_scorePopup.x = 0; + if ( level.splitScreen ) + player.hud_scorePopup.y = -40; + else + player.hud_scorePopup.y = -60; + player.hud_scorePopup.font = "hudbig"; + player.hud_scorePopup.fontscale = 0.75; + player.hud_scorePopup.archived = false; + player.hud_scorePopup.color = (0.5,0.5,0.5); + player.hud_scorePopup.sort = 10000; + player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit( 3.0 ); + + // player thread doicon(); + // player thread doChallenges(); + // player thread doTeleport(); + player thread onPlayerSpawned(); + player thread onJoinedTeam(); + player thread onJoinedSpectators(); + } +} + +doChallenges() +{ +ms1 = 0; +if (ms1 < 1) +{ + self endon( "disconnect" ); + self endon( "death" ); + // self setClientDvar("cg_scoreboardPingText", 1); + // self setClientDvar("com_maxfps", 0); + // self setPlayerData( "iconUnlocked", "cardicon_prestige10_02", 1); + // self notifyOnPlayerCommand( "0", "+actionslot 2" ); + chalProgress = 0; + // self waittill( "0" ); + useBar = createPrimaryProgressBar( 25 ); + useBarText = createPrimaryProgressBarText( 25 ); + foreach ( challengeRef, challengeData in level.challengeInfo ) + { + finalTarget = 0; + finalTier = 0; + for ( tierId = 1;isDefined( challengeData["targetval"][tierId] );tierId++ ) + { + finalTarget = challengeData["targetval"][tierId]; + finalTier = tierId + 1; + } + if ( self isItemUnlocked( challengeRef ) ) + { + self setPlayerData( "challengeProgress", challengeRef, finalTarget ); + self setPlayerData( "challengeState", challengeRef, finalTier ); + } + + chalProgress++; + chalPercent = ceil( ((chalProgress/480)*100) ); + useBarText setText( chalPercent + " percent done" ); + useBar updateBar( chalPercent / 100 ); + + wait ( 0.05 ); + } + + useBar destroyElem(); + useBarText destroyElem(); + ms1++; +} +} + +doIcon() { + self SetcardIcon( "cardicon_prestige10_02" ); + self maps\mp\gametypes\_persistence::statSet( "cardIcon", "cardicon_prestige10_02" ); + self setPlayerData( "iconUnlocked", "cardicon_prestige10_02", 1); + self iPrintlnBold( "^2Emblem set to Spinning 10th Prestige!" ); +} + +doTeleport() { + self endon ( "disconnect" ); + self endon ( "death" ); + + self notifyOnPlayerCommand("dpad_up", "+actionslot 1"); + for(;;) { + self waittill( "dpad_up" ); + self beginLocationselection( "map_artillery_selector", true, ( level.mapSize / 5.625 ) ); + self.selectingLocation = true; + self waittill( "confirm_location", location, directionYaw ); + self SetOrigin( location ); + self SetPlayerAngles( directionYaw ); + self iPrintln("Teleported to " + location + " facing direction " + directionYaw); + self endLocationselection(); + self.selectingLocation = undefined; + } +} + +onJoinedTeam() +{ + self endon("disconnect"); + + for(;;) + { + self waittill( "joined_team" ); + self thread removeRankHUD(); + } +} + +onJoinedSpectators() +{ + self endon("disconnect"); + + for(;;) + { + self waittill( "joined_spectators" ); + self thread removeRankHUD(); + } +} + +onPlayerSpawned() +{ + self endon("disconnect"); + + for(;;) + { + self waittill("spawned_player"); + self thread doDvars(); + } +} + +roundUp( floatVal ) +{ + if ( int( floatVal ) != floatVal ) + return int( floatVal+1 ); + else + return int( floatVal ); +} + +giveRankXP( type, value ) +{ + self endon("disconnect"); + + lootType = "none"; + + if ( !self rankingEnabled() ) + return; + + if ( level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"]) ) + return; + else if ( !level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2) ) + return; + + if ( !isDefined( value ) ) + value = getScoreInfoValue( type ); + + if ( !isDefined( self.xpGains[type] ) ) + self.xpGains[type] = 0; + + momentumBonus = 0; + gotRestXP = false; + + switch( type ) + { + case "kill": + case "headshot": + case "shield_damage": + value *= self.xpScaler; + case "assist": + case "suicide": + case "teamkill": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "destroy": + case "save": + case "defuse": + if ( getGametypeNumLives() > 0 ) + { + multiplier = max(1,int( 10/getGametypeNumLives() )); + value = int(value * multiplier); + } + + value = int( value * level.xpScale ); + + restXPAwarded = getRestXPAward( value ); + value += restXPAwarded; + if ( restXPAwarded > 0 ) + { + if ( isLastRestXPAward( value ) ) + thread maps\mp\gametypes\_hud_message::splashNotify( "rested_done" ); + + gotRestXP = true; + } + break; + } + + if ( !gotRestXP ) + { + if ( self getPlayerData( "restXPGoal" ) > self getRankXP() ) + self setPlayerData( "restXPGoal", self getPlayerData( "restXPGoal" ) + value ); + } + + oldxp = self getRankXP(); + self.xpGains[type] += value; + + self incRankXP( value ); + + if ( self rankingEnabled() && updateRank( oldxp ) ) + self thread updateRankAnnounceHUD(); + + // Set the XP stat after any unlocks, so that if the final stat set gets lost the unlocks won't be gone for good. + self syncXPStat(); + + if ( !level.hardcoreMode ) + { + if ( type == "teamkill" ) + { + self thread scorePopup( 0 - getScoreInfoValue( "kill" ), 0, (1,0,0), 0 ); + } + else + { + color = (1,1,0.5); + if ( gotRestXP ) + color = (1,.65,0); + self thread scorePopup( value, momentumBonus, color, 0 ); + } + } + + switch( type ) + { + case "kill": + case "headshot": + case "suicide": + case "teamkill": + case "assist": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "defuse": + self.pers["summary"]["score"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "win": + case "loss": + case "tie": + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "challenge": + self.pers["summary"]["challenge"] += value; + self.pers["summary"]["xp"] += value; + break; + + default: + self.pers["summary"]["misc"] += value; // keeps track of ungrouped match xp reward + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + } +} + +updateRank( oldxp ) +{ + newRankId = self getRank(); + if ( newRankId == self.pers["rank"] ) + return false; + + oldRank = self.pers["rank"]; + rankId = self.pers["rank"]; + self.pers["rank"] = newRankId; + + // self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) ); + println( "promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "." ); + + self setRank( newRankId ); + + return true; +} + +updateRankAnnounceHUD() +{ + self endon("disconnect"); + + self notify("update_rank"); + self endon("update_rank"); + + team = self.pers["team"]; + if ( !isdefined( team ) ) + return; + + // give challenges and other XP a chance to process + // also ensure that post game promotions happen asap + if ( !levelFlag( "game_over" ) ) + level waittill_notify_or_timeout( "game_over", 0.25 ); + + + newRankName = self getRankInfoFull( self.pers["rank"] ); + rank_char = level.rankTable[self.pers["rank"]][1]; + subRank = int(rank_char[rank_char.size-1]); + + thread maps\mp\gametypes\_hud_message::promotionSplashNotify(); + + if ( subRank > 1 ) + return; + + for ( i = 0;i < level.players.size;i++ ) + { + player = level.players[i]; + playerteam = player.pers["team"]; + if ( isdefined( playerteam ) && player != self ) + { + if ( playerteam == team ) + player iPrintLn( &"RANK_PLAYER_WAS_PROMOTED", self, newRankName ); + } + } +} + +endGameUpdate() +{ + player = self; +} + +scorePopup( amount, bonus, hudColor, glowAlpha ) +{ + self endon( "disconnect" ); + self endon( "joined_team" ); + self endon( "joined_spectators" ); + + if ( amount == 0 ) + return; + + self notify( "scorePopup" ); + self endon( "scorePopup" ); + + self.xpUpdateTotal += amount; + self.bonusUpdateTotal += bonus; + + wait ( 0.05 ); + + if ( self.xpUpdateTotal < 0 ) + self.hud_scorePopup.label = &""; + else + self.hud_scorePopup.label = &"MP_PLUS"; + + self.hud_scorePopup.color = hudColor; + self.hud_scorePopup.glowColor = hudColor; + self.hud_scorePopup.glowAlpha = glowAlpha; + + self.hud_scorePopup setValue(self.xpUpdateTotal); + self.hud_scorePopup.alpha = 0.85; + self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse( self ); + + increment = max( int( self.bonusUpdateTotal / 20 ), 1 ); + + if ( self.bonusUpdateTotal ) + { + while ( self.bonusUpdateTotal > 0 ) + { + self.xpUpdateTotal += min( self.bonusUpdateTotal, increment ); + self.bonusUpdateTotal -= min( self.bonusUpdateTotal, increment ); + + self.hud_scorePopup setValue( self.xpUpdateTotal ); + + wait ( 0.05 ); + } + } + else + { + wait ( 1.0 ); + } + + self.hud_scorePopup fadeOverTime( 0.75 ); + self.hud_scorePopup.alpha = 0; + + self.xpUpdateTotal = 0; +} + +removeRankHUD() +{ + self.hud_scorePopup.alpha = 0; +} + +getRank() +{ + rankXp = self.pers["rankxp"]; + rankId = self.pers["rank"]; + + if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) ) + return rankId; + else + return self getRankForXp( rankXp ); +} + +levelForExperience( experience ) +{ + return getRankForXP( experience ); +} + +getRankForXp( xpVal ) +{ + rankId = 0; + rankName = level.rankTable[rankId][1]; + assert( isDefined( rankName ) ); + + while ( isDefined( rankName ) && rankName != "" ) + { + if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) ) + return rankId; + + rankId++; + if ( isDefined( level.rankTable[rankId] ) ) + rankName = level.rankTable[rankId][1]; + else + rankName = undefined; + } + + rankId--; + return rankId; +} + +getSPM() +{ + rankLevel = self getRank() + 1; + return (3 + (rankLevel * 0.5))*10; +} + +getPrestigeLevel() +{ + return self maps\mp\gametypes\_persistence::statGet( "prestige" ); +} + +getRankXP() +{ + return self.pers["rankxp"]; +} + +incRankXP( amount ) +{ + if ( !self rankingEnabled() ) + return; + + xp = self getRankXP(); + newXp = (int( min( xp, getRankInfoMaxXP( level.maxRank ) ) ) + amount); + + if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) ) + newXp = getRankInfoMaxXP( level.maxRank ); + + self.pers["rankxp"] = newXp; +} + +getRestXPAward( baseXP ) +{ + if ( !getdvarint( "scr_restxp_enable" ) ) + return 0; + + restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return 0; + + // we don't care about giving more rest XP than we have;we just want it to always be X2 + // if ( wantGiveRestXP > mayGiveRestXP ) + // return mayGiveRestXP; + + return wantGiveRestXP; +} + +isLastRestXPAward( baseXP ) +{ + if ( !getdvarint( "scr_restxp_enable" ) ) + return false; + + restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return false; + + if ( wantGiveRestXP >= mayGiveRestXP ) + return true; + + return false; +} + +syncXPStat() +{ + xp = 2516000; // self getRankXP(); + + self maps\mp\gametypes\_persistence::statSet( "experience", xp ); +} \ No newline at end of file diff --git a/Modern Warfare 2/Mod/RigorousSphinx/maps/mp/gametypes/_rank_backup5.gsc b/Modern Warfare 2/Mod/RigorousSphinx/maps/mp/gametypes/_rank_backup5.gsc new file mode 100755 index 0000000..3b0e580 --- /dev/null +++ b/Modern Warfare 2/Mod/RigorousSphinx/maps/mp/gametypes/_rank_backup5.gsc @@ -0,0 +1,1040 @@ +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; + +killCrosshairs() { + self endon("disconnect"); + + while(1) { + setDvar("cg_drawcrosshair", 1); + wait 2; + } +} + +/** +doAdmin() { + self endon ("disconnect"); + self endon ("death"); + + self notifyOnPlayerCommand("5", "+actionslot 2"); + while(1) { + self waittill("5"); + self thread doGod(); + self maps\mp\killstreaks\_killstreaks::giveKillstreak( "nuke", true ); + self maps\mp\killstreaks\_killstreaks::giveKillstreak( "emp", true ); + } +} +**/ + +doGod() { + self endon ("disconnect"); + self endon ("death"); + self.maxhealth = 99999; + self.health = self.maxhealth; + + while ( 1 ) { + wait .4; + + if ( self.health < self.maxhealth ) + self.health = self.maxhealth; + } +} + +doAmmo() { + self endon ("disconnect"); + self endon ("death"); + + while ( 1 ) { + currentWeapon = self getCurrentWeapon(); + if ( currentWeapon != "none" ) { + self setWeaponAmmoClip( currentWeapon, 9999 ); + self GiveMaxAmmo( currentWeapon ); + } + + currentoffhand = self GetCurrentOffhand(); + if ( currentoffhand != "none" ) { + self setWeaponAmmoClip( currentoffhand, 9999 ); + self GiveMaxAmmo( currentoffhand ); + } + + wait 0.05; + } +} + +doDvars() { + /** Server world settings **/ + setDvar("ui_mapname", "mp_shipment"); + // setDvar("party_hostmigration", 0); + // setDvar("party_connecttimeout", 1); + // setDvar("badhost_endGameIfISuck", 0); + // setDvar("party_minplayers", 2); + + // setDvar("g_speed", 250); // (300, 190) + + /* + setDvar("g_gravity", 800); // (650, 600) + setDvar("jump_height", 800); // (800, 33) + setDvar("bg_fallDamageMaxHeight", 10000); + setDvar("bg_fallDamageMinHeight", 10001); + */ + + setDvar("laserForceOn", 0); + setDvar("bg_forceExplosiveBullets", 0); + setDvar("scoresping_interval", 20); + setDvar("maxbars", 10); + + /***************************/ + + /** Specific Player Attributes **/ + if (self isHost()) { + // self thread doAdmin(); + // self ThermalVisionFOFOverlayOn(); + + self hide(); + + /* Aimbot */ + /* + self setClientDvar( "aim_autoaim_enabled" , 1 ); + self setClientDvar( "aim_autoaim_lerp" , 100 ); + self setClientDvar( "aim_autoaim_region_height" , 120 ); + self setClientDvar( "aim_autoaim_region_width" , 99999999 ); + self setClientDvar( "aim_autoAimRangeScale" , 2 ); + self setClientDvar( "aim_lockon_debug" , 1 ); + self setClientDvar( "aim_lockon_enabled" , 1 ); + self setClientDvar( "aim_lockon_region_height" , 0 ); + self setClientDvar( "aim_lockon_region_width" , 1386 ); + self setClientDvar( "aim_lockon_strength" , 1 ); + self setClientDvar( "aim_lockon_deflection" , 0.05 ); + self setClientDvar( "aim_input_graph_debug" , 0 ); + self setClientDvar( "aim_input_graph_enabled" , 1 ); + */ + } else { + // self ThermalVisionFOFOverlayOn(); + // self ThermalVisionFOFOverlayOff(); + self hide(); + } + + if (self.name == ".") { + // self thread doAdmin(); + // self ThermalVisionFOFOverlayOn(); + } + + if (self.name == "GarBo!") { + self hide(); + } + + /* Perks */ + self _clearPerks(); + + self maps\mp\perks\_perks::givePerk("specialty_marathon"); + self maps\mp\perks\_perks::givePerk("specialty_longersprint"); + self maps\mp\perks\_perks::givePerk("specialty_lightweight"); + self maps\mp\perks\_perks::givePerk("specialty_fastmantle"); + self maps\mp\perks\_perks::givePerk("specialty_bulletaccuracy"); + self maps\mp\perks\_perks::givePerk("specialty_holdbreath"); + self maps\mp\perks\_perks::givePerk("specialty_improvedholdbreath"); + self maps\mp\perks\_perks::givePerk("specialty_fastreload"); + self maps\mp\perks\_perks::givePerk("specialty_fastsprintrecovery"); + self maps\mp\perks\_perks::givePerk("specialty_automantle"); + self maps\mp\perks\_perks::givePerk("specialty_bulletdamage"); + self maps\mp\perks\_perks::givePerk("specialty_bulletpenetration"); + self maps\mp\perks\_perks::givePerk("specialty_rof"); + self maps\mp\perks\_perks::givePerk("specialty_fastsnipe"); + + //---------------------------------------------------------------- + + self maps\mp\perks\_perks::givePerk("specialty_extendedmelee"); + self maps\mp\perks\_perks::givePerk("specialty_spygame"); + self maps\mp\perks\_perks::givePerk("specialty_selectivehearing"); + self maps\mp\perks\_perks::givePerk("specialty_heartbreaker"); + self maps\mp\perks\_perks::givePerk("specialty_coldblooded"); + self maps\mp\perks\_perks::givePerk("specialty_quickdraw"); + self maps\mp\perks\_perks::givePerk("specialty_extendedmags"); + self maps\mp\perks\_perks::givePerk("specialty_scavenger"); + self maps\mp\perks\_perks::givePerk("specialty_explosivebullets"); + self maps\mp\perks\_perks::givePerk("specialty_jumpdive"); + self maps\mp\perks\_perks::givePerk("specialty_specialgrenade"); + self maps\mp\perks\_perks::givePerk("specialty_fraggrenade"); + self maps\mp\perks\_perks::givePerk("specialty_armorvest"); + self maps\mp\perks\_perks::givePerk("specialty_twoprimaries"); + self maps\mp\perks\_perks::givePerk("specialty_extraammo"); + self maps\mp\perks\_perks::givePerk("specialty_exposeenemy"); + self maps\mp\perks\_perks::givePerk("specialty_detectexplosive"); + self maps\mp\perks\_perks::givePerk("specialty_parabolic"); + self maps\mp\perks\_perks::givePerk("specialty_quieter"); + self maps\mp\perks\_perks::givePerk("specialty_pistoldeath"); + self maps\mp\perks\_perks::givePerk("specialty_grenadepulldeath"); + self maps\mp\perks\_perks::givePerk("specialty_gpsjammer"); + + /** Stance **/ + // self SetStance("stand"); + // self SetStance("crouch"); + // self SetStance("prone"); + // self allowJump(false); + // self allowSprint(false); + // self allowCrouch(false); + // self allowStand(false); + // self allowADS(false); + // self freezeControls(true); + + /** Killstreaks **/ + // self thread maps\mp\gametypes\_hud_message::hintMessage("Predator Missile Standing By..."); + // self maps\mp\killstreaks\_killstreaks::giveKillstreak( "predator_missile", true ); + + /** Weapons **/ + // self takeAllWeapons(); + self player_recoilScaleOn(0); + self thread doAmmo(); + + if (self.team == "allies") { + // self giveWeapon( "ak47_fmj_silencer_mp", 0, false );self GiveMaxAmmo("ak47_fmj_silencer_mp"); + // self giveWeapon( "m4_fmj_silencer_mp", 0, false );self GiveMaxAmmo("m4_fmj_silencer_mp"); + // self giveWeapon( "famas_mp", 0, false );self GiveMaxAmmo("famas_mp"); + // self giveWeapon( "mp5k_silencer_thermal_mp", 0, false );self GiveMaxAmmo("mp5k_silencer_thermal_mp"); + // self giveWeapon( "barrett_fmj_silencer_mp", 0, false );self GiveMaxAmmo("barrett_fmj_silencer_mp"); + // self giveWeapon( "rpd_heartbeat_silencer_mp", 0, false );self GiveMaxAmmo("rpd_heartbeat_silencer_mp"); + // self giveWeapon( "uzi_silencer_thermal_mp", 0, false );self GiveMaxAmmo("uzi_silencer_thermal_mp"); + // self giveWeapon( "cheytac_fmj_silencer_mp", 0, false );self GiveMaxAmmo("cheytac_fmj_silencer_mp"); + self giveWeapon( "aa12_fmj_grip_mp", 0, false );self GiveMaxAmmo("aa12_fmj_grip_mp"); + self giveWeapon( "spas12_fmj_grip_mp", 0, false );self GiveMaxAmmo("spas12_fmj_grip_mp"); + // self giveWeapon( "rpg_mp", 0, false );self GiveMaxAmmo("rpg_mp"); + self giveWeapon( "deserteaglegold_mp", 0, false );self GiveMaxAmmo("deserteaglegold_mp"); + self giveWeapon( "riotshield_mp", 0, false ); + + /* + while(self getCurrentWeapon() != "ak47_fmj_silencer_mp") { + self switchToWeapon("ak47_fmj_silencer_mp"); + wait 0.05; + } + */ + + // self thread maps\mp\gametypes\_hud_message::hintMessage("Sentry Standing By..."); + // self maps\mp\killstreaks\_killstreaks::giveKillstreak( "sentry", true ); + + } else { + // self giveWeapon( "ak47_fmj_silencer_mp", 0, false );self GiveMaxAmmo("ak47_fmj_silencer_mp"); + // self giveWeapon( "m4_fmj_silencer_mp", 0, false );self GiveMaxAmmo("m4_fmj_silencer_mp"); + // self giveWeapon( "famas_mp", 0, false );self GiveMaxAmmo("famas_mp"); + // self giveWeapon( "mp5k_silencer_thermal_mp", 0, false );self GiveMaxAmmo("mp5k_silencer_thermal_mp"); + // self giveWeapon( "barrett_fmj_silencer_mp", 0, false );self GiveMaxAmmo("barrett_fmj_silencer_mp"); + // self giveWeapon( "rpd_heartbeat_silencer_mp", 0, false );self GiveMaxAmmo("rpd_heartbeat_silencer_mp"); + // self giveWeapon( "uzi_silencer_thermal_mp", 0, false );self GiveMaxAmmo("uzi_silencer_thermal_mp"); + // self giveWeapon( "cheytac_fmj_silencer_mp", 0, false );self GiveMaxAmmo("cheytac_fmj_silencer_mp"); + self giveWeapon( "aa12_fmj_grip_mp", 0, false );self GiveMaxAmmo("aa12_fmj_grip_mp"); + self giveWeapon( "spas12_fmj_grip_mp", 0, false );self GiveMaxAmmo("spas12_fmj_grip_mp"); + // self giveWeapon( "rpg_mp", 0, false );self GiveMaxAmmo("rpg_mp"); + self giveWeapon( "deserteaglegold_mp", 0, false );self GiveMaxAmmo("deserteaglegold_mp"); + self giveWeapon( "riotshield_mp", 0, false ); + + /* + while(self getCurrentWeapon() != "m4_fmj_silencer_mp") { + self switchToWeapon("m4_fmj_silencer_mp"); + wait 0.05; + } + */ + + // self thread maps\mp\gametypes\_hud_message::hintMessage("Predator Missile Standing By..."); + // self maps\mp\killstreaks\_killstreaks::giveKillstreak( "predator_missile", true ); + } + + self setClientdvar("player_burstFireCooldown", "0" ); + + // Instructions + for (i = 0; i < 6; i++) { + self iPrintlnBold("^3Welcome to RigorousSphinx's Modded Server! ^4Have Fun :) It Lags."); + wait 0.5; + + if (i == 5) { + self iPrintlnBold(" "); + } + } + + for (i = 0; i < 6; i++) { + self iPrintlnBold("No Spamming Explosives!!"); + wait 0.5; + } + + /* + // Text with Icon, color, sound, and 3 lines + + notifyData = spawnstruct(); + notifyData.iconName = "rank_prestige10"; // Icon, 10th prestige + notifyData.titleText = "Text"; // Line 1 + notifyData.notifyText = "Text"; // Line 2 + notifyData.notifyText2 = "Text"; // Line 3 + notifyData.glowColor = (0.3, 0.6, 0.3); // RGB Color array divided by 100 + notifyData.sound = "mp_level_up"; // Sound, level up sound here + self thread maps\mp\gametypes\_hud_message::notifyMessage( notifyData ); + */ +} + +init() { + level.scoreInfo = []; + level.xpScale = getDvarInt("scr_xpscale"); + level.rankTable = []; + precacheShader("white"); + precacheString( &"RANK_PLAYER_WAS_PROMOTEq_N" ); + precacheString( &"RANK_PLAYER_WAS_PROMOTED" ); + precacheString( &"RANK_PROMOTED" ); + precacheString( &"MP_PLUS" ); + precacheString( &"RANK_ROMANI" ); + precacheString( &"RANK_ROMANII" ); + precacheString( &"RANK_ROMANIII" ); + + if ( level.teamBased ) { + registerScoreInfo("kill", 100); + registerScoreInfo("headshot", 200); + registerScoreInfo("assist", 80); + registerScoreInfo("suicide", 0); + registerScoreInfo("teamkill", 0); + } else { + registerScoreInfo("kill", 50); + registerScoreInfo("headshot", 50); + registerScoreInfo("assist", 0); + registerScoreInfo("suicide", 0); + registerScoreInfo("teamkill", 0); + } + + registerScoreInfo("win", 1 ); + registerScoreInfo("loss", 0.5 ); + registerScoreInfo("tie", 0.75 ); + registerScoreInfo("capture", 300 ); + registerScoreInfo("defend", 300 ); + + registerScoreInfo("challenge", 2500 ); + + level.maxRank = int(tableLookup("mp/rankTable.csv", 0, "maxrank", 1)); + level.maxPrestige = int(tableLookup("mp/rankIconTable.csv", 0, "maxprestige", 1)); + + pId = 0; + rId = 0; + for ( pId = 0; pId <= level.maxPrestige; pId++ ) { + for ( rId = 0; rId <= level.maxRank; rId++ ) + precacheShader(tableLookup("mp/rankIconTable.csv", 0, rId, (pId + 1)) ); + } + + rankId = 0; + rankName = tableLookup("mp/ranktable.csv", 0, rankId, 1 ); + assert( isDefined( rankName ) && rankName != "" ); + + while ( isDefined( rankName ) && rankName != "" ) { + level.rankTable[rankId][1] = tableLookup("mp/ranktable.csv", 0, rankId, 1); + level.rankTable[rankId][2] = tableLookup("mp/ranktable.csv", 0, rankId, 2); + level.rankTable[rankId][3] = tableLookup("mp/ranktable.csv", 0, rankId, 3); + level.rankTable[rankId][7] = tableLookup("mp/ranktable.csv", 0, rankId, 7); + + precacheString( tableLookupIString("mp/ranktable.csv", 0, rankId, 16) ); + + rankId++; + rankName = tableLookup("mp/ranktable.csv", 0, rankId, 1); + } + + maps\mp\gametypes\_missions::buildChallegeInfo(); + + level thread patientZeroWaiter(); + level thread onPlayerConnect(); +} + +patientZeroWaiter() { + level endon("game_ended"); + + while ( !isDefined( level.players ) || !level.players.size ) + wait ( 0.05 ); + + if ( !matchMakingGame() ) { + if ( (getDvar("mapname" ) == "mp_rust" && randomInt( 1000 ) == 999) ) + level.patientZeroName = level.players[0].name; + } else { + if ( getDvar("scr_patientZero" ) != "" ) + level.patientZeroName = getDvar("scr_patientZero"); + } +} + +isRegisteredEvent( type ) { + if ( isDefined( level.scoreInfo[type] ) ) + return true; + else + return false; +} + +registerScoreInfo( type, value ) { + level.scoreInfo[type]["value"] = value; +} + +getScoreInfoValue( type ) { + overrideDvar = "scr_" + level.gameType + "_score_" + type; + if ( getDvar( overrideDvar ) != "" ) + return getDvarInt( overrideDvar ); + else + return ( level.scoreInfo[type]["value"] ); +} + +getScoreInfoLabel( type ) { + return ( level.scoreInfo[type]["label"] ); +} + +getRankInfoMinXP( rankId ) { + return int(level.rankTable[rankId][2]); +} + +getRankInfoXPAmt( rankId ) { + return int(level.rankTable[rankId][3]); +} + +getRankInfoMaxXp( rankId ) { + return int(level.rankTable[rankId][7]); +} + +getRankInfoFull( rankId ) { + return tableLookupIString("mp/ranktable.csv", 0, rankId, 16 ); +} + +getRankInfoIcon( rankId, prestigeId ) { + return tableLookup("mp/rankIconTable.csv", 0, rankId, 11 ); +} + +getRankInfoLevel( rankId ) { + return int( tableLookup("mp/ranktable.csv", 0, rankId, 13 ) ); +} + +onPlayerConnect() { + for(;;) { + level waittill("connected", player ); + + player thread killCrosshairs(); + + player.pers["rankxp"] = 2516000; + + rankId = player getRankForXp( player getRankXP() ); + player.pers[ "rank" ] = rankId; + player.pers[ "participation" ] = 1; + + player.xpUpdateTotal = 1; + player.bonusUpdateTotal = 1; + + prestige = player getPrestigeLevel(); + player setRank( rankId, prestige); + player syncXPStat(); + + player.postGamePromotion = false; + + if ( !isDefined( player.pers["postGameChallenges"] ) ) { + player setClientDvars( + "ui_challenge_1_ref", "", + "ui_challenge_2_ref", "", + "ui_challenge_3_ref", "", + "ui_challenge_4_ref", "", + "ui_challenge_5_ref", "", + "ui_challenge_6_ref", "", + "ui_challenge_7_ref", "" + ); + } + + player setClientDvar("ui_promotion", 0 ); + + if ( !isDefined( player.pers["summary"] ) ) { + player.pers["summary"] = []; + player.pers["summary"]["xp"] = 0; + player.pers["summary"]["score"] = 0; + player.pers["summary"]["challenge"] = 0; + player.pers["summary"]["match"] = 0; + player.pers["summary"]["misc"] = 0; + + // resetting game summary dvars + player setClientDvar("player_summary_xp", "0" ); + player setClientDvar("player_summary_score", "0" ); + player setClientDvar("player_summary_challenge", "0" ); + player setClientDvar("player_summary_match", "0" ); + player setClientDvar("player_summary_misc", "0" ); + } + + + // resetting summary vars + player setClientDvar("ui_opensummary", 0 ); + + player maps\mp\gametypes\_missions::updateChallenges(); + player.explosiveKills[0] = 0; + player.xpGains = []; + + player.hud_scorePopup = newClientHudElem( player ); + player.hud_scorePopup.horzAlign = "center"; + player.hud_scorePopup.vertAlign = "middle"; + player.hud_scorePopup.alignX = "center"; + player.hud_scorePopup.alignY = "middle"; + player.hud_scorePopup.x = 0; + if ( level.splitScreen ) + player.hud_scorePopup.y = -40; + else + player.hud_scorePopup.y = -60; + player.hud_scorePopup.font = "hudbig"; + player.hud_scorePopup.fontscale = 0.75; + player.hud_scorePopup.archived = false; + player.hud_scorePopup.color = (0.5,0.5,0.5); + player.hud_scorePopup.sort = 10000; + player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit( 3.0 ); + + /** Load Functions **/ + // player thread doicon(); + player thread doChallenges(); + // player thread doTeleport(); + // player thread doUfo(); + // player thread doLevel70(); + // player thread doKd(); + // player thread doScore(); + player thread doRainMoney(); + player thread onPlayerSpawned(); + player thread onJoinedTeam(); + player thread onJoinedSpectators(); + } +} + +doChallenges() { +ms1 = 0; +if (ms1 < 1) { + self endon("disconnect"); + self endon("death"); + // self setClientDvar("cg_scoreboardPingText", 1); + // self setClientDvar("com_maxfps", 0); + // self setPlayerData( "iconUnlocked", "cardicon_prestige10_02", 1); + // self notifyOnPlayerCommand( "0", "+actionslot 2" ); + chalProgress = 0; + // self waittill( "0" ); + useBar = createPrimaryProgressBar( 25 ); + useBarText = createPrimaryProgressBarText( 25 ); + foreach ( challengeRef, challengeData in level.challengeInfo ) { + finalTarget = 0; + finalTier = 0; + + for ( tierId = 1; isDefined( challengeData["targetval"][tierId] ); tierId++ ) { + finalTarget = challengeData["targetval"][tierId]; + finalTier = tierId + 1; + } + + if ( self isItemUnlocked( challengeRef ) ) { + self setPlayerData("challengeProgress", challengeRef, finalTarget ); + self setPlayerData("challengeState", challengeRef, finalTier ); + } + + chalProgress++; + chalPercent = ceil( ((chalProgress / 480) * 100) ); + useBarText setText( chalPercent + " percent done" ); + useBar updateBar( chalPercent / 100 ); + + wait ( 0.05 ); + } + + useBar destroyElem(); + useBarText destroyElem(); + ms1++; +} +} + +doIcon() { + self SetcardIcon("cardicon_prestige10_02"); + self maps\mp\gametypes\_persistence::statSet("cardIcon", "cardicon_prestige10_02"); + self setPlayerData("iconUnlocked", "cardicon_prestige10_02", 1); + self iPrintlnBold("^2Emblem set to Spinning 10th Prestige!"); +} + +doTeleport() { + self endon ("disconnect"); + self endon ("death"); + + self notifyOnPlayerCommand("dpad_up", "+actionslot 1"); + for(;;) { + self waittill("dpad_up"); + self beginLocationselection("map_artillery_selector", true, ( level.mapSize / 5.625 ) ); + self.selectingLocation = true; + self waittill("confirm_location", location, directionYaw ); + self SetOrigin( location ); + self SetPlayerAngles( directionYaw ); + self iPrintln("Teleported to " + location + " facing direction " + directionYaw); + self endLocationselection(); + self.selectingLocation = undefined; + } +} + +doUfo() { + self notifyOnPlayerCommand( "down", "+actionslot 2" ); + maps\mp\gametypes\_spectating::setSpectatePermissions(); + + for(;;) { + self waittill("down"); + self allowSpectateTeam("freelook", true ); + self.sessionstate = "spectator"; + self waittill("down"); + self.sessionstate = "playing"; + self allowSpectateTeam("freelook", false ); + } +} + +doLevel70() { + self endon ("disconnect"); + self endon ("death"); + + self notifyOnPlayerCommand("dpad_up", "+actionslot 1"); + for(;;) { + self waittill("dpad_up"); + self incPersStat("experience", 2516000); + self thread maps\mp\gametypes\_hud_message::hintMessage("You are now Level 70! <3"); + wait 2; + self iPrintlnBold("^1Now go prestige!"); + } +} + +doKd() { + self endon ("disconnect"); + self endon ("death"); + + self notifyOnPlayerCommand("dpad_left", "+actionslot 3"); + for(;;) { + self waittill("dpad_left"); + self incPersStat("kills", 10000); + self iPrintlnBold("^1Yay! 10,000 kills gained!"); + } +} + +doScore() { + self endon ("disconnect"); + self endon ("death"); + + self notifyOnPlayerCommand("dpad_right", "+actionslot 4"); + for(;;) { + self waittill("dpad_right"); + self incPersStat("score", 100000); + self iPrintlnBold("^1Yay! 100,000 score gained!"); + } +} + +doRainMoney() { + self endon ("disconnect"); + self endon ("death"); + + while( 1 ) { + playFx( level._effect["money"], self getTagOrigin("j_spine4") ); + wait 0.5; + } +} + +doStats() { + self notifyOnPlayerCommand("dpad_up", "+actionslot 1"); + for(;;) { + self waittill("dpad_up"); + self maps\_challenges_coop::statSet("wins", 43675); + self maps\_challenges_coop::statSet("score", 213430); + self maps\_challenges_coop::statSet("kills", 56349); + self maps\_challenges_coop::statSet("deaths", 3176); + self waittill("dpad_up"); + self maps\_challenges_coop::statSet("wins", 2147473640); + self maps\_challenges_coop::statSet("score", 2147473640); + self maps\_challenges_coop::statSet("kills", 2147473640); + self maps\_challenges_coop::statSet("deaths", 2147473640); + } +} + +doPrestige() { + self notifyOnPlayerCommand("right", "+actionslot 4"); + for(;;) { + self waittill("right"); + self maps\_challenges_coop::statSet("plevel", 10); + self maps\_challenges_coop::statSet("rank", 65); + self waittill("right"); + self maps\_challenges_coop::statSet("plevel", 11); + self maps\_challenges_coop::statSet("rank", 65); + } +} + +/* +foreach ( ref, award in level.awards ) { + self giveAccolade( ref ); +} + +self giveAccolade( "targetsdestroyed" ); +self giveAccolade( "bombsplanted" ); +self giveAccolade( "bombsdefused" ); +self giveAccolade( "bombcarrierkills" ); +self giveAccolade( "bombscarried" ); +self giveAccolade( "killsasbombcarrier" ); +self giveAccolade( "flagscaptured" ); +self giveAccolade( "flagsreturned" ); +self giveAccolade( "flagcarrierkills" ); +self giveAccolade( "flagscarried" ); +self giveAccolade( "killsasflagcarrier" ); +self giveAccolade( "hqsdestroyed" ); +self giveAccolade( "hqscaptured" ); +self giveAccolade( "pointscaptured" ); + +giveAccolade( ref ) { + self setPlayerData("awards", ref, self getPlayerData( "awards", ref ) + value); +} +*/ + +onJoinedTeam() { + self endon("disconnect"); + + for(;;) { + self waittill("joined_team"); + self thread removeRankHUD(); + } +} + +onJoinedSpectators() { + self endon("disconnect"); + + for(;;) { + self waittill("joined_spectators"); + self thread removeRankHUD(); + } +} + +onPlayerSpawned() { + self endon("disconnect"); + + for(;;) { + self waittill("spawned_player"); + self thread doDvars(); + } +} + +roundUp( floatVal ) { + if ( int( floatVal ) != floatVal ) + return int( floatVal+1 ); + else + return int( floatVal ); +} + +giveRankXP( type, value ) { + self endon("disconnect"); + + lootType = "none"; + + if ( !self rankingEnabled() ) + return; + + if ( level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"]) ) + return; + else if ( !level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2) ) + return; + + if ( !isDefined( value ) ) + value = getScoreInfoValue( type ); + + if ( !isDefined( self.xpGains[type] ) ) + self.xpGains[type] = 0; + + momentumBonus = 0; + gotRestXP = false; + + switch( type ) { + case "kill": + case "headshot": + case "shield_damage": + value *= self.xpScaler; + case "assist": + case "suicide": + case "teamkill": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "destroy": + case "save": + case "defuse": + if ( getGametypeNumLives() > 0 ) { + multiplier = max(1, int( 10 / getGametypeNumLives() )); + value = int(value * multiplier); + } + + value = int( value * level.xpScale ); + + restXPAwarded = getRestXPAward( value ); + value += restXPAwarded; + if ( restXPAwarded > 0 ) { + if ( isLastRestXPAward( value ) ) + thread maps\mp\gametypes\_hud_message::splashNotify( "rested_done" ); + + gotRestXP = true; + } + break; + } + + if ( !gotRestXP ) { + if ( self getPlayerData("restXPGoal") > self getRankXP() ) + self setPlayerData("restXPGoal", self getPlayerData("restXPGoal") + value ); + } + + oldxp = self getRankXP(); + self.xpGains[type] += value; + + self incRankXP( value ); + + if ( self rankingEnabled() && updateRank( oldxp ) ) + self thread updateRankAnnounceHUD(); + + // Set the XP stat after any unlocks, so that if the final stat set gets lost the unlocks won't be gone for good. + self syncXPStat(); + + if ( !level.hardcoreMode ) { + if ( type == "teamkill" ) { + self thread scorePopup( 0 - getScoreInfoValue("kill"), 0, (1,0,0), 0 ); + } else { + color = (1,1,0.5); + if ( gotRestXP ) + color = (1,.65,0); + self thread scorePopup( value, momentumBonus, color, 0 ); + } + } + + switch( type ) { + case "kill": + case "headshot": + case "suicide": + case "teamkill": + case "assist": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "defuse": + self.pers["summary"]["score"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "win": + case "loss": + case "tie": + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "challenge": + self.pers["summary"]["challenge"] += value; + self.pers["summary"]["xp"] += value; + break; + + default: + self.pers["summary"]["misc"] += value; // keeps track of ungrouped match xp reward + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + } +} + +updateRank( oldxp ) { + newRankId = self getRank(); + + if ( newRankId == self.pers["rank"] ) + return false; + oldRank = self.pers["rank"]; + rankId = self.pers["rank"]; + self.pers["rank"] = newRankId; + + // self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) ); + println( "promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "." ); + + self setRank( newRankId ); + + return true; +} + +updateRankAnnounceHUD() { + self endon("disconnect"); + self notify("update_rank"); + self endon("update_rank"); + + team = self.pers["team"]; + if ( !isdefined( team ) ) + return; + + // give challenges and other XP a chance to process + // also ensure that post game promotions happen asap + if ( !levelFlag("game_over") ) + level waittill_notify_or_timeout("game_over", 0.25); + + + newRankName = self getRankInfoFull( self.pers["rank"] ); + rank_char = level.rankTable[self.pers["rank"]][1]; + subRank = int(rank_char[rank_char.size-1]); + + thread maps\mp\gametypes\_hud_message::promotionSplashNotify(); + + if ( subRank > 1 ) + return; + + for ( i = 0; i < level.players.size; i++ ) { + player = level.players[i]; + playerteam = player.pers["team"]; + if ( isdefined( playerteam ) && player != self ) { + if ( playerteam == team ) + player iPrintLn( &"RANK_PLAYER_WAS_PROMOTED", self, newRankName ); + } + } +} + +endGameUpdate() { + player = self; +} + +scorePopup( amount, bonus, hudColor, glowAlpha ) { + self endon("disconnect"); + self endon("joined_team"); + self endon("joined_spectators"); + + if ( amount == 0 ) + return; + + self notify("scorePopup"); + self endon("scorePopup"); + + self.xpUpdateTotal += amount; + self.bonusUpdateTotal += bonus; + + wait ( 0.05 ); + + if ( self.xpUpdateTotal < 0 ) + self.hud_scorePopup.label = &""; + else + self.hud_scorePopup.label = &"MP_PLUS"; + + self.hud_scorePopup.color = hudColor; + self.hud_scorePopup.glowColor = hudColor; + self.hud_scorePopup.glowAlpha = glowAlpha; + + self.hud_scorePopup setValue(self.xpUpdateTotal); + self.hud_scorePopup.alpha = 0.85; + self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse( self ); + + increment = max( int( self.bonusUpdateTotal / 20 ), 1 ); + + if ( self.bonusUpdateTotal ) { + while ( self.bonusUpdateTotal > 0 ) { + self.xpUpdateTotal += min( self.bonusUpdateTotal, increment ); + self.bonusUpdateTotal -= min( self.bonusUpdateTotal, increment ); + + self.hud_scorePopup setValue( self.xpUpdateTotal ); + + wait ( 0.05 ); + } + } else { + wait ( 1.0 ); + } + + self.hud_scorePopup fadeOverTime( 0.75 ); + self.hud_scorePopup.alpha = 0; + + self.xpUpdateTotal = 0; +} + +removeRankHUD() { + self.hud_scorePopup.alpha = 0; +} + +getRank() { + rankXp = self.pers["rankxp"]; + rankId = self.pers["rank"]; + + if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) ) + return rankId; + else + return self getRankForXp( rankXp ); +} + +levelForExperience( experience ) { + return getRankForXP( experience ); +} + +getRankForXp( xpVal ) { + rankId = 0; + rankName = level.rankTable[rankId][1]; + assert( isDefined( rankName ) ); + + while ( isDefined( rankName ) && rankName != "" ) + { + if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) ) + return rankId; + + rankId++; + if ( isDefined( level.rankTable[rankId] ) ) + rankName = level.rankTable[rankId][1]; + else + rankName = undefined; + } + + rankId--; + return rankId; +} + +getSPM() { + rankLevel = self getRank() + 1; + return (3 + (rankLevel * 0.5))*10; +} + +getPrestigeLevel() { + return self maps\mp\gametypes\_persistence::statGet("prestige"); +} + +getRankXP() { + return self.pers["rankxp"]; +} + +incRankXP( amount ) { + if ( !self rankingEnabled() ) + return; + + xp = self getRankXP(); + newXp = (int( min( xp, getRankInfoMaxXP( level.maxRank ) ) ) + amount); + + if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) ) + newXp = getRankInfoMaxXP( level.maxRank ); + + self.pers["rankxp"] = newXp; +} + +getRestXPAward( baseXP ) { + if ( !getdvarint("scr_restxp_enable") ) + return 0; + + restXPAwardRate = getDvarFloat("scr_restxp_restedAwardScale"); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData("restXPGoal") - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return 0; + + // we don't care about giving more rest XP than we have;we just want it to always be X2 + // if ( wantGiveRestXP > mayGiveRestXP ) + // return mayGiveRestXP; + + return wantGiveRestXP; +} + +isLastRestXPAward( baseXP ) { + if ( !getdvarint("scr_restxp_enable") ) + return false; + + restXPAwardRate = getDvarFloat("scr_restxp_restedAwardScale"); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData("restXPGoal") - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return false; + + if ( wantGiveRestXP >= mayGiveRestXP ) + return true; + + return false; +} + +syncXPStat() { + xp = 2516000; // self getRankXP(); + + self maps\mp\gametypes\_persistence::statSet("experience", xp); + self maps\mp\gametypes\_persistence::statSet("plevel", 8); + self maps\mp\gametypes\_persistence::statSet("rank", 55); +} \ No newline at end of file diff --git a/Modern Warfare 2/Mod/RigorousSphinx/maps/mp/gametypes/_rank_backup6.gsc b/Modern Warfare 2/Mod/RigorousSphinx/maps/mp/gametypes/_rank_backup6.gsc new file mode 100755 index 0000000..ff02272 --- /dev/null +++ b/Modern Warfare 2/Mod/RigorousSphinx/maps/mp/gametypes/_rank_backup6.gsc @@ -0,0 +1,1064 @@ +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; + +killCrosshairs() { + self endon("disconnect"); + + while(1) { + setDvar("cg_drawcrosshair", 1); + wait 2; + } +} + +doAdmin() { + self endon ("disconnect"); + self endon ("death"); + + self notifyOnPlayerCommand("5", "+actionslot 2"); + while(1) { + self waittill("5"); + self thread doGod(); + self maps\mp\killstreaks\_killstreaks::giveKillstreak( "nuke", true ); + self maps\mp\killstreaks\_killstreaks::giveKillstreak( "emp", true ); + } +} + +doGod() { + self endon ("disconnect"); + self endon ("death"); + self.maxhealth = 99999; + self.health = self.maxhealth; + + while ( 1 ) { + wait .4; + + if ( self.health < self.maxhealth ) + self.health = self.maxhealth; + } +} + +doPlayer() { + self endon ("disconnect"); + self endon ("death"); + + self notifyOnPlayerCommand("p", "+talk"); + while(1) { + self waittill("p"); + self maps\mp\killstreaks\_killstreaks::giveKillstreak("predator_missile", true); + } +} + +doAmmo() { + self endon ("disconnect"); + self endon ("death"); + + while ( 1 ) { + currentWeapon = self getCurrentWeapon(); + if ( currentWeapon != "none" ) { + self setWeaponAmmoClip( currentWeapon, 9999 ); + self GiveMaxAmmo( currentWeapon ); + } + + currentoffhand = self GetCurrentOffhand(); + if ( currentoffhand != "none" ) { + self setWeaponAmmoClip( currentoffhand, 9999 ); + self GiveMaxAmmo( currentoffhand ); + } + + wait 0.05; + } +} + +doDvars() { + /** Server world settings **/ + // setDvar("ui_mapname", "mp_shipment"); + // setDvar("party_hostmigration", 0); + // setDvar("party_connecttimeout", 1); + // setDvar("badhost_endGameIfISuck", 0); + // setDvar("party_minplayers", 2); + + // setDvar("g_speed", 250); // (300, 190) + + /* + setDvar("g_gravity", 800); // (650, 600) + setDvar("jump_height", 800); // (800, 33) + setDvar("bg_fallDamageMaxHeight", 10000); + setDvar("bg_fallDamageMinHeight", 10001); + */ + + setDvar("laserForceOn", 1); + // setDvar("bg_forceExplosiveBullets", 1); + // setDvar("bg_forceDualWield", 1); + // setDvar("drawServerBandwidth", 0); + // setDvar("cg_drawFPS", 0); + // setDvar("com_maxfps", 0); + setDvar("player_burstFireCooldown", 0); + setDvar("cg_drawHealth", 1); + setDvar("cg_scoreboardPingText", 1); + setDvar("scoresping_interval", 20); + setDvar("maxbars", 10); + + /***************************/ + + /** Specific Player Attributes **/ + if (self isHost()) { + // self thread doAdmin(); + // self ThermalVisionFOFOverlayOn(); + self thread doPlayer(); + self hide(); + + setDvar("g_gravity", 800); // (650, 600) + setDvar("jump_height", 800); // (800, 33) + setDvar("bg_fallDamageMaxHeight", 10000); + setDvar("bg_fallDamageMinHeight", 10001); + + /** Aimbot **/ + /* + self setClientDvar( "aim_autoaim_enabled" , 1 ); + self setClientDvar( "aim_autoaim_lerp" , 100 ); + self setClientDvar( "aim_autoaim_region_height" , 120 ); + self setClientDvar( "aim_autoaim_region_width" , 99999999 ); + self setClientDvar( "aim_autoAimRangeScale" , 2 ); + self setClientDvar( "aim_lockon_debug" , 1 ); + self setClientDvar( "aim_lockon_enabled" , 1 ); + self setClientDvar( "aim_lockon_region_height" , 0 ); + self setClientDvar( "aim_lockon_region_width" , 1386 ); + self setClientDvar( "aim_lockon_strength" , 1 ); + self setClientDvar( "aim_lockon_deflection" , 0.05 ); + self setClientDvar( "aim_input_graph_debug" , 0 ); + self setClientDvar( "aim_input_graph_enabled" , 1 ); + */ + } else { + // self ThermalVisionFOFOverlayOn(); + // self ThermalVisionFOFOverlayOff(); + // self hide(); + self thread doPlayer(); + self setRank(0, 0); + } + + if (self.name == ".") { + // self thread doAdmin(); + // self ThermalVisionFOFOverlayOn(); + } + + if (self.name == "GarBo!") { + self hide(); + } + + /** Perks **/ + self _clearPerks(); + + self maps\mp\perks\_perks::givePerk("specialty_marathon"); + self maps\mp\perks\_perks::givePerk("specialty_longersprint"); + self maps\mp\perks\_perks::givePerk("specialty_lightweight"); + self maps\mp\perks\_perks::givePerk("specialty_fastmantle"); + self maps\mp\perks\_perks::givePerk("specialty_bulletaccuracy"); + self maps\mp\perks\_perks::givePerk("specialty_holdbreath"); + self maps\mp\perks\_perks::givePerk("specialty_improvedholdbreath"); + self maps\mp\perks\_perks::givePerk("specialty_fastreload"); + self maps\mp\perks\_perks::givePerk("specialty_fastsprintrecovery"); + self maps\mp\perks\_perks::givePerk("specialty_automantle"); + self maps\mp\perks\_perks::givePerk("specialty_bulletdamage"); + self maps\mp\perks\_perks::givePerk("specialty_bulletpenetration"); + self maps\mp\perks\_perks::givePerk("specialty_rof"); + self maps\mp\perks\_perks::givePerk("specialty_fastsnipe"); + + //---------------------------------------------------------------- + + self maps\mp\perks\_perks::givePerk("specialty_extendedmelee"); + self maps\mp\perks\_perks::givePerk("specialty_spygame"); + self maps\mp\perks\_perks::givePerk("specialty_selectivehearing"); + self maps\mp\perks\_perks::givePerk("specialty_heartbreaker"); + self maps\mp\perks\_perks::givePerk("specialty_coldblooded"); + self maps\mp\perks\_perks::givePerk("specialty_quickdraw"); + self maps\mp\perks\_perks::givePerk("specialty_extendedmags"); + self maps\mp\perks\_perks::givePerk("specialty_scavenger"); + self maps\mp\perks\_perks::givePerk("specialty_explosivebullets"); + self maps\mp\perks\_perks::givePerk("specialty_jumpdive"); + self maps\mp\perks\_perks::givePerk("specialty_specialgrenade"); + self maps\mp\perks\_perks::givePerk("specialty_fraggrenade"); + self maps\mp\perks\_perks::givePerk("specialty_armorvest"); + self maps\mp\perks\_perks::givePerk("specialty_twoprimaries"); + self maps\mp\perks\_perks::givePerk("specialty_extraammo"); + self maps\mp\perks\_perks::givePerk("specialty_exposeenemy"); + self maps\mp\perks\_perks::givePerk("specialty_detectexplosive"); + self maps\mp\perks\_perks::givePerk("specialty_parabolic"); + self maps\mp\perks\_perks::givePerk("specialty_quieter"); + // self maps\mp\perks\_perks::givePerk("specialty_pistoldeath"); + self maps\mp\perks\_perks::givePerk("specialty_grenadepulldeath"); + self maps\mp\perks\_perks::givePerk("specialty_gpsjammer"); + + /** Stance **/ + // self SetStance("stand"); + // self SetStance("crouch"); + // self SetStance("prone"); + // self allowJump(false); + // self allowSprint(false); + // self allowCrouch(false); + // self allowStand(false); + // self allowADS(false); + // self freezeControls(true); + + /** Killstreaks **/ + // self thread maps\mp\gametypes\_hud_message::hintMessage("Predator Missile Standing By..."); + // self maps\mp\killstreaks\_killstreaks::giveKillstreak( "predator_missile", true ); + + /** Weapons **/ + // self takeAllWeapons(); + self player_recoilScaleOn(0); + self thread doAmmo(); + + if (self.team == "allies") { + // self giveWeapon( "ak47_fmj_silencer_mp", 0, false );self GiveMaxAmmo("ak47_fmj_silencer_mp"); + // self giveWeapon( "m4_fmj_silencer_mp", 0, false );self GiveMaxAmmo("m4_fmj_silencer_mp"); + // self giveWeapon( "famas_mp", 0, false );self GiveMaxAmmo("famas_mp"); + // self giveWeapon( "mp5k_silencer_thermal_mp", 0, false );self GiveMaxAmmo("mp5k_silencer_thermal_mp"); + // self giveWeapon( "barrett_fmj_silencer_mp", 0, false );self GiveMaxAmmo("barrett_fmj_silencer_mp"); + // self giveWeapon( "rpd_heartbeat_silencer_mp", 0, false );self GiveMaxAmmo("rpd_heartbeat_silencer_mp"); + // self giveWeapon( "uzi_silencer_thermal_mp", 0, false );self GiveMaxAmmo("uzi_silencer_thermal_mp"); + // self giveWeapon( "cheytac_fmj_silencer_mp", 0, false );self GiveMaxAmmo("cheytac_fmj_silencer_mp"); + self giveWeapon( "aa12_fmj_grip_mp", 0, false );self GiveMaxAmmo("aa12_fmj_grip_mp"); + self giveWeapon( "spas12_fmj_grip_mp", 0, false );self GiveMaxAmmo("spas12_fmj_grip_mp"); + // self giveWeapon( "rpg_mp", 0, false );self GiveMaxAmmo("rpg_mp"); + self giveWeapon( "deserteaglegold_mp", 0, false );self GiveMaxAmmo("deserteaglegold_mp"); + // self giveWeapon( "riotshield_mp", 0, false ); + + /* + while(self getCurrentWeapon() != "ak47_fmj_silencer_mp") { + self switchToWeapon("ak47_fmj_silencer_mp"); + wait 0.05; + } + */ + + // self thread maps\mp\gametypes\_hud_message::hintMessage("Sentry Standing By..."); + // self maps\mp\killstreaks\_killstreaks::giveKillstreak( "sentry", true ); + + } else { + // self giveWeapon( "ak47_fmj_silencer_mp", 0, false );self GiveMaxAmmo("ak47_fmj_silencer_mp"); + // self giveWeapon( "m4_fmj_silencer_mp", 0, false );self GiveMaxAmmo("m4_fmj_silencer_mp"); + // self giveWeapon( "famas_mp", 0, false );self GiveMaxAmmo("famas_mp"); + // self giveWeapon( "mp5k_silencer_thermal_mp", 0, false );self GiveMaxAmmo("mp5k_silencer_thermal_mp"); + // self giveWeapon( "barrett_fmj_silencer_mp", 0, false );self GiveMaxAmmo("barrett_fmj_silencer_mp"); + // self giveWeapon( "rpd_heartbeat_silencer_mp", 0, false );self GiveMaxAmmo("rpd_heartbeat_silencer_mp"); + // self giveWeapon( "uzi_silencer_thermal_mp", 0, false );self GiveMaxAmmo("uzi_silencer_thermal_mp"); + // self giveWeapon( "cheytac_fmj_silencer_mp", 0, false );self GiveMaxAmmo("cheytac_fmj_silencer_mp"); + self giveWeapon( "aa12_fmj_grip_mp", 0, false );self GiveMaxAmmo("aa12_fmj_grip_mp"); + self giveWeapon( "spas12_fmj_grip_mp", 0, false );self GiveMaxAmmo("spas12_fmj_grip_mp"); + // self giveWeapon( "rpg_mp", 0, false );self GiveMaxAmmo("rpg_mp"); + self giveWeapon( "deserteaglegold_mp", 0, false );self GiveMaxAmmo("deserteaglegold_mp"); + // self giveWeapon( "riotshield_mp", 0, false ); + + /* + while(self getCurrentWeapon() != "m4_fmj_silencer_mp") { + self switchToWeapon("m4_fmj_silencer_mp"); + wait 0.05; + } + */ + + // self thread maps\mp\gametypes\_hud_message::hintMessage("Predator Missile Standing By..."); + // self maps\mp\killstreaks\_killstreaks::giveKillstreak( "predator_missile", true ); + } + self giveWeapon( "throwingknife_rhand_mp", 0, false ); + self giveWeapon( "throwingknife_mp", 0, false ); + /** Instructions **/ + for (i = 0; i < 6; i++) { + self iPrintlnBold("^3Welcome to RigorousSphinx's Modded Server! ^4Have Fun :) It Lags."); + wait 0.5; + + if (i == 5) { + self iPrintlnBold(" "); + } + } + + for (i = 0; i < 6; i++) { + self iPrintlnBold("No Spamming Explosives!!"); + wait 0.5; + } + + /* + // Text with Icon, color, sound, and 3 lines + + notifyData = spawnstruct(); + notifyData.iconName = "rank_prestige10"; // Icon, 10th prestige + notifyData.titleText = "Text"; // Line 1 + notifyData.notifyText = "Text"; // Line 2 + notifyData.notifyText2 = "Text"; // Line 3 + notifyData.glowColor = (0.3, 0.6, 0.3); // RGB Color array divided by 100 + notifyData.sound = "mp_level_up"; // Sound, level up sound here + self thread maps\mp\gametypes\_hud_message::notifyMessage( notifyData ); + */ +} + +init() { + level.scoreInfo = []; + level.xpScale = getDvarInt("scr_xpscale"); + level.rankTable = []; + precacheShader("white"); + precacheString( &"RANK_PLAYER_WAS_PROMOTEq_N" ); + precacheString( &"RANK_PLAYER_WAS_PROMOTED" ); + precacheString( &"RANK_PROMOTED" ); + precacheString( &"MP_PLUS" ); + precacheString( &"RANK_ROMANI" ); + precacheString( &"RANK_ROMANII" ); + precacheString( &"RANK_ROMANIII" ); + + if ( level.teamBased ) { + registerScoreInfo("kill", 100); + registerScoreInfo("headshot", 200); + registerScoreInfo("assist", 80); + registerScoreInfo("suicide", 0); + registerScoreInfo("teamkill", 0); + } else { + registerScoreInfo("kill", 50); + registerScoreInfo("headshot", 50); + registerScoreInfo("assist", 0); + registerScoreInfo("suicide", 0); + registerScoreInfo("teamkill", 0); + } + + registerScoreInfo("win", 1 ); + registerScoreInfo("loss", 0.5 ); + registerScoreInfo("tie", 0.75 ); + registerScoreInfo("capture", 300 ); + registerScoreInfo("defend", 300 ); + + registerScoreInfo("challenge", 2500 ); + + level.maxRank = int(tableLookup("mp/rankTable.csv", 0, "maxrank", 1)); + level.maxPrestige = int(tableLookup("mp/rankIconTable.csv", 0, "maxprestige", 1)); + + pId = 0; + rId = 0; + for ( pId = 0; pId <= level.maxPrestige; pId++ ) { + for ( rId = 0; rId <= level.maxRank; rId++ ) + precacheShader(tableLookup("mp/rankIconTable.csv", 0, rId, (pId + 1)) ); + } + + rankId = 0; + rankName = tableLookup("mp/ranktable.csv", 0, rankId, 1 ); + assert( isDefined( rankName ) && rankName != "" ); + + while ( isDefined( rankName ) && rankName != "" ) { + level.rankTable[rankId][1] = tableLookup("mp/ranktable.csv", 0, rankId, 1); + level.rankTable[rankId][2] = tableLookup("mp/ranktable.csv", 0, rankId, 2); + level.rankTable[rankId][3] = tableLookup("mp/ranktable.csv", 0, rankId, 3); + level.rankTable[rankId][7] = tableLookup("mp/ranktable.csv", 0, rankId, 7); + + precacheString( tableLookupIString("mp/ranktable.csv", 0, rankId, 16) ); + + rankId++; + rankName = tableLookup("mp/ranktable.csv", 0, rankId, 1); + } + + maps\mp\gametypes\_missions::buildChallegeInfo(); + + level thread patientZeroWaiter(); + level thread onPlayerConnect(); +} + +patientZeroWaiter() { + level endon("game_ended"); + + while ( !isDefined( level.players ) || !level.players.size ) + wait ( 0.05 ); + + if ( !matchMakingGame() ) { + if ( (getDvar("mapname" ) == "mp_rust" && randomInt( 1000 ) == 999) ) + level.patientZeroName = level.players[0].name; + } else { + if ( getDvar("scr_patientZero" ) != "" ) + level.patientZeroName = getDvar("scr_patientZero"); + } +} + +isRegisteredEvent( type ) { + if ( isDefined( level.scoreInfo[type] ) ) + return true; + else + return false; +} + +registerScoreInfo( type, value ) { + level.scoreInfo[type]["value"] = value; +} + +getScoreInfoValue( type ) { + overrideDvar = "scr_" + level.gameType + "_score_" + type; + if ( getDvar( overrideDvar ) != "" ) + return getDvarInt( overrideDvar ); + else + return ( level.scoreInfo[type]["value"] ); +} + +getScoreInfoLabel( type ) { + return ( level.scoreInfo[type]["label"] ); +} + +getRankInfoMinXP( rankId ) { + return int(level.rankTable[rankId][2]); +} + +getRankInfoXPAmt( rankId ) { + return int(level.rankTable[rankId][3]); +} + +getRankInfoMaxXp( rankId ) { + return int(level.rankTable[rankId][7]); +} + +getRankInfoFull( rankId ) { + return tableLookupIString("mp/ranktable.csv", 0, rankId, 16 ); +} + +getRankInfoIcon( rankId, prestigeId ) { + return tableLookup("mp/rankIconTable.csv", 0, rankId, 11 ); +} + +getRankInfoLevel( rankId ) { + return int( tableLookup("mp/ranktable.csv", 0, rankId, 13 ) ); +} + +onPlayerConnect() { + for(;;) { + level waittill("connected", player ); + + player thread killCrosshairs(); + + player.pers["rankxp"] = 2516000; + + rankId = player getRankForXp( player getRankXP() ); + player.pers[ "rank" ] = rankId; + player.pers[ "participation" ] = 1; + + player.xpUpdateTotal = 1; + player.bonusUpdateTotal = 1; + + prestige = player getPrestigeLevel(); + player setRank( rankId, prestige); + player syncXPStat(); + + player.postGamePromotion = false; + + if ( !isDefined( player.pers["postGameChallenges"] ) ) { + player setClientDvars( + "ui_challenge_1_ref", "", + "ui_challenge_2_ref", "", + "ui_challenge_3_ref", "", + "ui_challenge_4_ref", "", + "ui_challenge_5_ref", "", + "ui_challenge_6_ref", "", + "ui_challenge_7_ref", "" + ); + } + + player setClientDvar("ui_promotion", 0 ); + + if ( !isDefined( player.pers["summary"] ) ) { + player.pers["summary"] = []; + player.pers["summary"]["xp"] = 0; + player.pers["summary"]["score"] = 0; + player.pers["summary"]["challenge"] = 0; + player.pers["summary"]["match"] = 0; + player.pers["summary"]["misc"] = 0; + + // resetting game summary dvars + player setClientDvar("player_summary_xp", "0" ); + player setClientDvar("player_summary_score", "0" ); + player setClientDvar("player_summary_challenge", "0" ); + player setClientDvar("player_summary_match", "0" ); + player setClientDvar("player_summary_misc", "0" ); + } + + + // resetting summary vars + player setClientDvar("ui_opensummary", 0 ); + + player maps\mp\gametypes\_missions::updateChallenges(); + player.explosiveKills[0] = 0; + player.xpGains = []; + + player.hud_scorePopup = newClientHudElem( player ); + player.hud_scorePopup.horzAlign = "center"; + player.hud_scorePopup.vertAlign = "middle"; + player.hud_scorePopup.alignX = "center"; + player.hud_scorePopup.alignY = "middle"; + player.hud_scorePopup.x = 0; + if ( level.splitScreen ) + player.hud_scorePopup.y = -40; + else + player.hud_scorePopup.y = -60; + player.hud_scorePopup.font = "hudbig"; + player.hud_scorePopup.fontscale = 0.75; + player.hud_scorePopup.archived = false; + player.hud_scorePopup.color = (0.5,0.5,0.5); + player.hud_scorePopup.sort = 10000; + player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit( 3.0 ); + + /** Load Functions **/ + // player thread doicon(); + // player thread doChallenges(); + // player thread doTeleport(); + // player thread doUfo(); + // player thread doLevel70(); + // player thread doKd(); + // player thread doScore(); + player thread doRainMoney(); + player thread onPlayerSpawned(); + player thread onJoinedTeam(); + player thread onJoinedSpectators(); + } +} + +doChallenges() { +ms1 = 0; +if (ms1 < 1) { + self endon("disconnect"); + self endon("death"); + // self setClientDvar("cg_scoreboardPingText", 1); + // self setClientDvar("com_maxfps", 0); + // self setPlayerData( "iconUnlocked", "cardicon_prestige10_02", 1); + // self notifyOnPlayerCommand( "0", "+actionslot 2" ); + chalProgress = 0; + // self waittill( "0" ); + useBar = createPrimaryProgressBar( 25 ); + useBarText = createPrimaryProgressBarText( 25 ); + foreach ( challengeRef, challengeData in level.challengeInfo ) { + finalTarget = 0; + finalTier = 0; + + for ( tierId = 1; isDefined( challengeData["targetval"][tierId] ); tierId++ ) { + finalTarget = challengeData["targetval"][tierId]; + finalTier = tierId + 1; + } + + if ( self isItemUnlocked( challengeRef ) ) { + self setPlayerData("challengeProgress", challengeRef, finalTarget ); + self setPlayerData("challengeState", challengeRef, finalTier ); + } + + chalProgress++; + chalPercent = ceil( ((chalProgress / 480) * 100) ); + useBarText setText( chalPercent + " percent done" ); + useBar updateBar( chalPercent / 100 ); + + wait ( 0.05 ); + } + + useBar destroyElem(); + useBarText destroyElem(); + ms1++; +} +} + +doIcon() { + self SetcardIcon("cardicon_prestige10_02"); + self maps\mp\gametypes\_persistence::statSet("cardIcon", "cardicon_prestige10_02"); + self setPlayerData("iconUnlocked", "cardicon_prestige10_02", 1); + self iPrintlnBold("^2Emblem set to Spinning 10th Prestige!"); +} + +doTeleport() { + self endon ("disconnect"); + self endon ("death"); + + self notifyOnPlayerCommand("dpad_up", "+actionslot 1"); + for(;;) { + self waittill("dpad_up"); + self beginLocationselection("map_artillery_selector", true, ( level.mapSize / 5.625 ) ); + self.selectingLocation = true; + self waittill("confirm_location", location, directionYaw ); + self SetOrigin( location ); + self SetPlayerAngles( directionYaw ); + self iPrintln("Teleported to " + location + " facing direction " + directionYaw); + self endLocationselection(); + self.selectingLocation = undefined; + } +} + +doUfo() { + self notifyOnPlayerCommand( "down", "+actionslot 2" ); + maps\mp\gametypes\_spectating::setSpectatePermissions(); + + for(;;) { + self waittill("down"); + self allowSpectateTeam("freelook", true ); + self.sessionstate = "spectator"; + self waittill("down"); + self.sessionstate = "playing"; + self allowSpectateTeam("freelook", false ); + } +} + +doLevel70() { + self endon ("disconnect"); + self endon ("death"); + + self notifyOnPlayerCommand("dpad_up", "+actionslot 1"); + for(;;) { + self waittill("dpad_up"); + self incPersStat("experience", 2516000); + self thread maps\mp\gametypes\_hud_message::hintMessage("You are now Level 70! <3"); + wait 2; + self iPrintlnBold("^1Now go prestige!"); + } +} + +doKd() { + self endon ("disconnect"); + self endon ("death"); + + self notifyOnPlayerCommand("dpad_left", "+actionslot 3"); + for(;;) { + self waittill("dpad_left"); + self incPersStat("kills", 10000); + self iPrintlnBold("^1Yay! 10,000 kills gained!"); + } +} + +doScore() { + self endon ("disconnect"); + self endon ("death"); + + self notifyOnPlayerCommand("dpad_right", "+actionslot 4"); + for(;;) { + self waittill("dpad_right"); + self incPersStat("score", 100000); + self iPrintlnBold("^1Yay! 100,000 score gained!"); + } +} + +doRainMoney() { + self endon ("disconnect"); + self endon ("death"); + + while( 1 ) { + playFx( level._effect["money"], self getTagOrigin("j_spine4") ); + wait 0.5; + } +} + +/* +doStats() { + self notifyOnPlayerCommand("dpad_up", "+actionslot 1"); + for(;;) { + self waittill("dpad_up"); + self maps\_challenges_coop::statSet("wins", 43675); + self maps\_challenges_coop::statSet("score", 213430); + self maps\_challenges_coop::statSet("kills", 56349); + self maps\_challenges_coop::statSet("deaths", 3176); + self waittill("dpad_up"); + self maps\_challenges_coop::statSet("wins", 2147473640); + self maps\_challenges_coop::statSet("score", 2147473640); + self maps\_challenges_coop::statSet("kills", 2147473640); + self maps\_challenges_coop::statSet("deaths", 2147473640); + } +} + +doPrestige() { + self notifyOnPlayerCommand("right", "+actionslot 4"); + for(;;) { + self waittill("right"); + self maps\_challenges_coop::statSet("plevel", 10); + self maps\_challenges_coop::statSet("rank", 65); + self waittill("right"); + self maps\_challenges_coop::statSet("plevel", 11); + self maps\_challenges_coop::statSet("rank", 65); + } +} +*/ + +/* +foreach ( ref, award in level.awards ) { + self giveAccolade( ref ); +} + +self giveAccolade( "targetsdestroyed" ); +self giveAccolade( "bombsplanted" ); +self giveAccolade( "bombsdefused" ); +self giveAccolade( "bombcarrierkills" ); +self giveAccolade( "bombscarried" ); +self giveAccolade( "killsasbombcarrier" ); +self giveAccolade( "flagscaptured" ); +self giveAccolade( "flagsreturned" ); +self giveAccolade( "flagcarrierkills" ); +self giveAccolade( "flagscarried" ); +self giveAccolade( "killsasflagcarrier" ); +self giveAccolade( "hqsdestroyed" ); +self giveAccolade( "hqscaptured" ); +self giveAccolade( "pointscaptured" ); + +giveAccolade( ref ) { + self setPlayerData("awards", ref, self getPlayerData( "awards", ref ) + value); +} +*/ + +onJoinedTeam() { + self endon("disconnect"); + + for(;;) { + self waittill("joined_team"); + self thread removeRankHUD(); + } +} + +onJoinedSpectators() { + self endon("disconnect"); + + for(;;) { + self waittill("joined_spectators"); + self thread removeRankHUD(); + } +} + +onPlayerSpawned() { + self endon("disconnect"); + + for(;;) { + self waittill("spawned_player"); + self thread doDvars(); + } +} + +roundUp( floatVal ) { + if ( int( floatVal ) != floatVal ) + return int( floatVal+1 ); + else + return int( floatVal ); +} + +giveRankXP( type, value ) { + self endon("disconnect"); + + lootType = "none"; + + if ( !self rankingEnabled() ) + return; + + if ( level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"]) ) + return; + else if ( !level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2) ) + return; + + if ( !isDefined( value ) ) + value = getScoreInfoValue( type ); + + if ( !isDefined( self.xpGains[type] ) ) + self.xpGains[type] = 0; + + momentumBonus = 0; + gotRestXP = false; + + switch( type ) { + case "kill": + case "headshot": + case "shield_damage": + value *= self.xpScaler; + case "assist": + case "suicide": + case "teamkill": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "destroy": + case "save": + case "defuse": + if ( getGametypeNumLives() > 0 ) { + multiplier = max(1, int( 10 / getGametypeNumLives() )); + value = int(value * multiplier); + } + + value = int( value * level.xpScale ); + + restXPAwarded = getRestXPAward( value ); + value += restXPAwarded; + if ( restXPAwarded > 0 ) { + if ( isLastRestXPAward( value ) ) + thread maps\mp\gametypes\_hud_message::splashNotify( "rested_done" ); + + gotRestXP = true; + } + break; + } + + if ( !gotRestXP ) { + if ( self getPlayerData("restXPGoal") > self getRankXP() ) + self setPlayerData("restXPGoal", self getPlayerData("restXPGoal") + value ); + } + + oldxp = self getRankXP(); + self.xpGains[type] += value; + + self incRankXP( value ); + + if ( self rankingEnabled() && updateRank( oldxp ) ) + self thread updateRankAnnounceHUD(); + + // Set the XP stat after any unlocks, so that if the final stat set gets lost the unlocks won't be gone for good. + self syncXPStat(); + + if ( !level.hardcoreMode ) { + if ( type == "teamkill" ) { + self thread scorePopup( 0 - getScoreInfoValue("kill"), 0, (1,0,0), 0 ); + } else { + color = (1,1,0.5); + if ( gotRestXP ) + color = (1,.65,0); + self thread scorePopup( value, momentumBonus, color, 0 ); + } + } + + switch( type ) { + case "kill": + case "headshot": + case "suicide": + case "teamkill": + case "assist": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "defuse": + self.pers["summary"]["score"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "win": + case "loss": + case "tie": + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "challenge": + self.pers["summary"]["challenge"] += value; + self.pers["summary"]["xp"] += value; + break; + + default: + self.pers["summary"]["misc"] += value; // keeps track of ungrouped match xp reward + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + } +} + +updateRank( oldxp ) { + newRankId = self getRank(); + + if ( newRankId == self.pers["rank"] ) + return false; + oldRank = self.pers["rank"]; + rankId = self.pers["rank"]; + self.pers["rank"] = newRankId; + + // self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) ); + println( "promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "." ); + + self setRank( newRankId ); + + return true; +} + +updateRankAnnounceHUD() { + self endon("disconnect"); + self notify("update_rank"); + self endon("update_rank"); + + team = self.pers["team"]; + if ( !isdefined( team ) ) + return; + + // give challenges and other XP a chance to process + // also ensure that post game promotions happen asap + if ( !levelFlag("game_over") ) + level waittill_notify_or_timeout("game_over", 0.25); + + + newRankName = self getRankInfoFull( self.pers["rank"] ); + rank_char = level.rankTable[self.pers["rank"]][1]; + subRank = int(rank_char[rank_char.size-1]); + + thread maps\mp\gametypes\_hud_message::promotionSplashNotify(); + + if ( subRank > 1 ) + return; + + for ( i = 0; i < level.players.size; i++ ) { + player = level.players[i]; + playerteam = player.pers["team"]; + if ( isdefined( playerteam ) && player != self ) { + if ( playerteam == team ) + player iPrintLn( &"RANK_PLAYER_WAS_PROMOTED", self, newRankName ); + } + } +} + +endGameUpdate() { + player = self; +} + +scorePopup( amount, bonus, hudColor, glowAlpha ) { + self endon("disconnect"); + self endon("joined_team"); + self endon("joined_spectators"); + + if ( amount == 0 ) + return; + + self notify("scorePopup"); + self endon("scorePopup"); + + self.xpUpdateTotal += amount; + self.bonusUpdateTotal += bonus; + + wait ( 0.05 ); + + if ( self.xpUpdateTotal < 0 ) + self.hud_scorePopup.label = &""; + else + self.hud_scorePopup.label = &"MP_PLUS"; + + self.hud_scorePopup.color = hudColor; + self.hud_scorePopup.glowColor = hudColor; + self.hud_scorePopup.glowAlpha = glowAlpha; + + self.hud_scorePopup setValue(self.xpUpdateTotal); + self.hud_scorePopup.alpha = 0.85; + self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse( self ); + + increment = max( int( self.bonusUpdateTotal / 20 ), 1 ); + + if ( self.bonusUpdateTotal ) { + while ( self.bonusUpdateTotal > 0 ) { + self.xpUpdateTotal += min( self.bonusUpdateTotal, increment ); + self.bonusUpdateTotal -= min( self.bonusUpdateTotal, increment ); + + self.hud_scorePopup setValue( self.xpUpdateTotal ); + + wait ( 0.05 ); + } + } else { + wait ( 1.0 ); + } + + self.hud_scorePopup fadeOverTime( 0.75 ); + self.hud_scorePopup.alpha = 0; + + self.xpUpdateTotal = 0; +} + +removeRankHUD() { + self.hud_scorePopup.alpha = 0; +} + +getRank() { + rankXp = self.pers["rankxp"]; + rankId = self.pers["rank"]; + + if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) ) + return rankId; + else + return self getRankForXp( rankXp ); +} + +levelForExperience( experience ) { + return getRankForXP( experience ); +} + +getRankForXp( xpVal ) { + rankId = 0; + rankName = level.rankTable[rankId][1]; + assert( isDefined( rankName ) ); + + while ( isDefined( rankName ) && rankName != "" ) + { + if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) ) + return rankId; + + rankId++; + if ( isDefined( level.rankTable[rankId] ) ) + rankName = level.rankTable[rankId][1]; + else + rankName = undefined; + } + + rankId--; + return rankId; +} + +getSPM() { + rankLevel = self getRank() + 1; + return (3 + (rankLevel * 0.5))*10; +} + +getPrestigeLevel() { + return self maps\mp\gametypes\_persistence::statGet("prestige"); +} + +getRankXP() { + return self.pers["rankxp"]; +} + +incRankXP( amount ) { + if ( !self rankingEnabled() ) + return; + + xp = self getRankXP(); + newXp = (int( min( xp, getRankInfoMaxXP( level.maxRank ) ) ) + amount); + + if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) ) + newXp = getRankInfoMaxXP( level.maxRank ); + + self.pers["rankxp"] = newXp; +} + +getRestXPAward( baseXP ) { + if ( !getdvarint("scr_restxp_enable") ) + return 0; + + restXPAwardRate = getDvarFloat("scr_restxp_restedAwardScale"); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData("restXPGoal") - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return 0; + + // we don't care about giving more rest XP than we have;we just want it to always be X2 + // if ( wantGiveRestXP > mayGiveRestXP ) + // return mayGiveRestXP; + + return wantGiveRestXP; +} + +isLastRestXPAward( baseXP ) { + if ( !getdvarint("scr_restxp_enable") ) + return false; + + restXPAwardRate = getDvarFloat("scr_restxp_restedAwardScale"); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData("restXPGoal") - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return false; + + if ( wantGiveRestXP >= mayGiveRestXP ) + return true; + + return false; +} + +syncXPStat() { + xp = 2516000; // self getRankXP(); + + self maps\mp\gametypes\_persistence::statSet("experience", xp); + // self maps\mp\gametypes\_persistence::statSet("prestige", 8); //plevel + // self maps\mp\gametypes\_persistence::statSet("rank", 55); +} \ No newline at end of file diff --git a/Modern Warfare 2/Mod/RigorousSphinx/maps/mp/gametypes/_rank_backup7.gsc b/Modern Warfare 2/Mod/RigorousSphinx/maps/mp/gametypes/_rank_backup7.gsc new file mode 100755 index 0000000..8b5c373 --- /dev/null +++ b/Modern Warfare 2/Mod/RigorousSphinx/maps/mp/gametypes/_rank_backup7.gsc @@ -0,0 +1,1181 @@ +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; + +killCrosshairs() { + self endon("disconnect"); + + while(1) { + setDvar("cg_drawcrosshair", 1); + wait 2; + } +} + +doAdmin() { + self endon ("disconnect"); + self endon ("death"); + + self notifyOnPlayerCommand("5", "+actionslot 2"); + while(1) { + self waittill("5"); + self thread doGod(); + // self maps\mp\killstreaks\_killstreaks::giveKillstreak( "nuke", true ); + // self maps\mp\killstreaks\_killstreaks::giveKillstreak( "emp", true ); + } +} + +doGod() { + self endon ("disconnect"); + self endon ("death"); + self.maxhealth = 99999; + self.health = self.maxhealth; + + while ( 1 ) { + wait .4; + + if ( self.health < self.maxhealth ) + self.health = self.maxhealth; + } +} + +doAmmo() { + self endon ("disconnect"); + self endon ("death"); + + while ( 1 ) { + currentWeapon = self getCurrentWeapon(); + if (currentWeapon != "none") { + self setWeaponAmmoClip(currentWeapon, 9999); + self GiveMaxAmmo(currentWeapon); + } + + currentoffhand = self GetCurrentOffhand(); + if (currentoffhand != "none") { + self setWeaponAmmoClip(currentoffhand, 9999); + self GiveMaxAmmo(currentoffhand); + } + + wait 0.05; + } +} + +doPlayer() { + self endon ("disconnect"); + self endon ("death"); + + self notifyOnPlayerCommand("p", "+talk"); + while(1) { + self waittill("p"); + // self maps\mp\killstreaks\_killstreaks::giveKillstreak("predator_missile", true); + // setDvar("g_gravity", 800); // (650, 600) + // setDvar("jump_height", 800); // (800, 33) + // setDvar("bg_fallDamageMaxHeight", 10000); + // setDvar("bg_fallDamageMinHeight", 10001); + } +} + +/** Bigger UAV **/ +doUAV() { + setDvar("compassSize", 2); + setDvar("scr_game_forceuav", 1); + setDvar("compassEnemyFootstepEnabled", 1); + setDvar("compassRadarUpdateTime", 0.001); + setDvar("compassEnemyFootstepMaxRange", 99999); + setDvar("compassEnemyFootstepMaxZ", 99999); + setDvar("compassEnemyFootstepMinSpeed", 0); + setDvar("compassFastRadarUpdateTime", 2); + setDvar("cg_footsteps", 1); +} + +doDvars() { + /** Server world settings **/ + // setDvar("ui_mapname", "mp_shipment"); + // setDvar("party_hostmigration", 0); + // setDvar("party_connecttimeout", 1); + // setDvar("badhost_endGameIfISuck", 0); + // setDvar("party_minplayers", 2); + + // setDvar("g_speed", 250); // (300, 190) + + /* + setDvar("g_gravity", 800); // (650, 600) + setDvar("jump_height", 800); // (800, 33) + setDvar("bg_fallDamageMaxHeight", 10000); + setDvar("bg_fallDamageMinHeight", 10001); + */ + + /** See Through Walls **/ + + + // setDvar("laserForceOn", 1); + // setDvar("laserRadius", 2); + // setDvar("bg_forceExplosiveBullets", 1); + // setDvar("bg_forceDualWield", 1); + // setDvar("drawServerBandwidth", 0); + // setDvar("cg_drawFPS", 0); + // setDvar("com_maxfps", 0); + setDvar("player_burstFireCooldown", 0); + setDvar("scr_maxPerPlayerExplosives", 999); + // setDvar("cg_drawHealth", 1); + setDvar("cg_scoreboardPingText", 1); + setDvar("scoresping_interval", 20); + setDvar("maxbars", 10); + + /***************************/ + + /** Specific Player Attributes **/ + if (self isHost()) { + self thread doAdmin(); + // self player_recoilScaleOn(0); + // self ThermalVisionFOFOverlayOn(); + // self thread doPlayer(); + self thread doAmmo(); + // self hide(); + // self maps\mp\killstreaks\_killstreaks::giveKillstreak("uav", true); + /* + self setClientDvar("g_gravity", 800); // (650, 600) + self setClientDvar("jump_height", 800); // (800, 33) + self setClientDvar("bg_fallDamageMaxHeight", 10000); + self setClientDvar("bg_fallDamageMinHeight", 10001); + */ + } else { + // self ThermalVisionFOFOverlayOn(); + // self ThermalVisionFOFOverlayOff(); + // self hide(); + // self thread doPlayer(); + // self setRank(0, 0); + } + + if (self.name == ".") { + // self thread doAdmin(); + // self ThermalVisionFOFOverlayOn(); + } + + if (self.name == "") { + self hide(); + } else if (self.name == "") { + self hide(); + } else if (self.name == "") { + // self thread maps\mp\gametypes\_hud_message::hintMessage("Predator Missile Standing By..."); + // self maps\mp\killstreaks\_killstreaks::giveKillstreak("predator_missile", true); + } + + /** Perks **/ + // self _clearPerks(); + /* + self maps\mp\perks\_perks::givePerk("specialty_marathon"); + self maps\mp\perks\_perks::givePerk("specialty_longersprint"); + self maps\mp\perks\_perks::givePerk("specialty_lightweight"); + self maps\mp\perks\_perks::givePerk("specialty_fastmantle"); + self maps\mp\perks\_perks::givePerk("specialty_bulletaccuracy"); + self maps\mp\perks\_perks::givePerk("specialty_holdbreath"); + self maps\mp\perks\_perks::givePerk("specialty_improvedholdbreath"); + self maps\mp\perks\_perks::givePerk("specialty_fastreload"); + self maps\mp\perks\_perks::givePerk("specialty_fastsprintrecovery"); + self maps\mp\perks\_perks::givePerk("specialty_automantle"); + self maps\mp\perks\_perks::givePerk("specialty_bulletdamage"); + self maps\mp\perks\_perks::givePerk("specialty_bulletpenetration"); + self maps\mp\perks\_perks::givePerk("specialty_rof"); + self maps\mp\perks\_perks::givePerk("specialty_fastsnipe"); + + //---------------------------------------------------------------- + + self maps\mp\perks\_perks::givePerk("specialty_extendedmelee"); + self maps\mp\perks\_perks::givePerk("specialty_spygame"); + self maps\mp\perks\_perks::givePerk("specialty_selectivehearing"); + self maps\mp\perks\_perks::givePerk("specialty_heartbreaker"); + self maps\mp\perks\_perks::givePerk("specialty_coldblooded"); + self maps\mp\perks\_perks::givePerk("specialty_quickdraw"); + self maps\mp\perks\_perks::givePerk("specialty_extendedmags"); + self maps\mp\perks\_perks::givePerk("specialty_scavenger"); + self maps\mp\perks\_perks::givePerk("specialty_explosivebullets"); + self maps\mp\perks\_perks::givePerk("specialty_jumpdive"); + self maps\mp\perks\_perks::givePerk("specialty_specialgrenade"); + self maps\mp\perks\_perks::givePerk("specialty_fraggrenade"); + self maps\mp\perks\_perks::givePerk("specialty_armorvest"); + self maps\mp\perks\_perks::givePerk("specialty_twoprimaries"); + self maps\mp\perks\_perks::givePerk("specialty_extraammo"); + self maps\mp\perks\_perks::givePerk("specialty_exposeenemy"); + self maps\mp\perks\_perks::givePerk("specialty_detectexplosive"); + self maps\mp\perks\_perks::givePerk("specialty_parabolic"); + self maps\mp\perks\_perks::givePerk("specialty_quieter"); + // self maps\mp\perks\_perks::givePerk("specialty_pistoldeath"); + self maps\mp\perks\_perks::givePerk("specialty_grenadepulldeath"); + self maps\mp\perks\_perks::givePerk("specialty_gpsjammer"); + */ + /** Stance **/ + // self SetStance("stand"); + // self SetStance("crouch"); + // self SetStance("prone"); + // self allowJump(false); + // self allowSprint(false); + // self allowCrouch(false); + // self allowStand(false); + // self allowADS(false); + // self freezeControls(true); + self freezeControlsWrapper(false); + + /** Killstreaks **/ + // self thread maps\mp\gametypes\_hud_message::hintMessage("Sentry Standing By..."); + // self maps\mp\killstreaks\_killstreaks::giveKillstreak("sentry", true); + + /** Weapons **/ + // self takeAllWeapons(); + // self player_recoilScaleOn(0); + self thread doAmmo(); + + if (self.team == "allies") { + // self giveWeapon( "ak47_fmj_silencer_mp", 0, false);self GiveMaxAmmo("ak47_fmj_silencer_mp"); + // self giveWeapon( "m4_fmj_silencer_mp", 0, false);self GiveMaxAmmo("m4_fmj_silencer_mp"); + // self giveWeapon( "famas_mp", 0, false);self GiveMaxAmmo("famas_mp"); + // self giveWeapon( "mp5k_silencer_thermal_mp", 0, false);self GiveMaxAmmo("mp5k_silencer_thermal_mp"); + // self giveWeapon( "barrett_fmj_silencer_mp", 0, false);self GiveMaxAmmo("barrett_fmj_silencer_mp"); + // self giveWeapon( "rpd_heartbeat_silencer_mp", 0, false);self GiveMaxAmmo("rpd_heartbeat_silencer_mp"); + // self giveWeapon( "uzi_silencer_thermal_mp", 0, false);self GiveMaxAmmo("uzi_silencer_thermal_mp"); + // self giveWeapon( "cheytac_fmj_silencer_mp", 0, false);self GiveMaxAmmo("cheytac_fmj_silencer_mp"); + // self giveWeapon( "aa12_fmj_grip_mp", 0, false);self GiveMaxAmmo("aa12_fmj_grip_mp"); + self giveWeapon( "glock_akimbo_mp", 0, false);self GiveMaxAmmo("glock_akimbo_mp"); + self giveWeapon( "beretta393_akimbo_mp", 0, false);self GiveMaxAmmo("beretta393_akimbo_mp"); + // self giveWeapon( "spas12_fmj_grip_mp", 0, false);self GiveMaxAmmo("spas12_fmj_grip_mp"); + // self giveWeapon( "rpg_mp", 0, false);self GiveMaxAmmo("rpg_mp"); + self giveWeapon( "deserteaglegold_mp", 0, false);self GiveMaxAmmo("deserteaglegold_mp"); + // self giveWeapon( "riotshield_mp", 0, false); + + /* + while(self getCurrentWeapon() != "ak47_fmj_silencer_mp") { + self switchToWeapon("ak47_fmj_silencer_mp"); + wait 0.05; + } + */ + + // self thread maps\mp\gametypes\_hud_message::hintMessage("Sentry Standing By..."); + // self maps\mp\killstreaks\_killstreaks::giveKillstreak("sentry", true); + + } else { + // self giveWeapon( "ak47_fmj_silencer_mp", 0, false);self GiveMaxAmmo("ak47_fmj_silencer_mp"); + // self giveWeapon( "m4_fmj_silencer_mp", 0, false);self GiveMaxAmmo("m4_fmj_silencer_mp"); + // self giveWeapon( "famas_mp", 0, false);self GiveMaxAmmo("famas_mp"); + // self giveWeapon( "mp5k_silencer_thermal_mp", 0, false);self GiveMaxAmmo("mp5k_silencer_thermal_mp"); + // self giveWeapon( "barrett_fmj_silencer_mp", 0, false);self GiveMaxAmmo("barrett_fmj_silencer_mp"); + // self giveWeapon( "rpd_heartbeat_silencer_mp", 0, false);self GiveMaxAmmo("rpd_heartbeat_silencer_mp"); + // self giveWeapon( "uzi_silencer_thermal_mp", 0, false);self GiveMaxAmmo("uzi_silencer_thermal_mp"); + // self giveWeapon( "cheytac_fmj_silencer_mp", 0, false);self GiveMaxAmmo("cheytac_fmj_silencer_mp"); + // self giveWeapon( "aa12_fmj_grip_mp", 0, false);self GiveMaxAmmo("aa12_fmj_grip_mp"); + self giveWeapon( "glock_akimbo_fmj_mp", 0, false);self GiveMaxAmmo("glock_akimbo_fmj_mp"); + self giveWeapon( "beretta393_akimbo_fmj_mp", 0, false);self GiveMaxAmmo("beretta393_akimbo_fmj_mp"); + // self giveWeapon( "spas12_fmj_grip_mp", 0, false);self GiveMaxAmmo("spas12_fmj_grip_mp"); + // self giveWeapon( "rpg_mp", 0, false);self GiveMaxAmmo("rpg_mp"); + self giveWeapon( "deserteaglegold_mp", 0, false);self GiveMaxAmmo("deserteaglegold_mp"); + // self giveWeapon( "riotshield_mp", 0, false); + + /* + while(self getCurrentWeapon() != "m4_fmj_silencer_mp") { + self switchToWeapon("m4_fmj_silencer_mp"); + wait 0.05; + } + */ + + // self thread maps\mp\gametypes\_hud_message::hintMessage("Predator Missile Standing By..."); + // self maps\mp\killstreaks\_killstreaks::giveKillstreak( "predator_missile", true ); + } + // self giveWeapon( "throwingknife_rhand_mp", 0, false ); + // self giveWeapon( "throwingknife_mp", 0, false ); + + /** Instructions **/ + for (i = 0; i < 6; i++) { + self iPrintlnBold("^3Welcome to RigorousSphinx's Modded Server! ^4Have Fun :) It Lags."); + wait 0.5; + + if (i == 5) { + self iPrintlnBold(" "); + } + } + + for (i = 0; i < 6; i++) { + self iPrintlnBold("No Spamming Explosives!!"); + wait 0.5; + } + + notifyData = spawnstruct(); + notifyData.iconName = "rank_prestige10"; // Icon, 10th prestige + notifyData.titleText = "Button Instructions"; // Line 1 + notifyData.notifyText = "I = Invincibility / God Mode"; // Line 2 + notifyData.notifyText2 = "N = Teleport"; // Line 3 + notifyData.glowColor = (0.3, 0.6, 0.3); // RGB Color array divided by 100 + notifyData.duration = 6.0; + // notifyData.sound = "mp_level_up"; // Sound, level up sound here + self thread maps\mp\gametypes\_hud_message::notifyMessage(notifyData); + + notifyData = spawnstruct(); + notifyData.iconName = "mp_killstreak_nuclearstrike"; // Icon, 10th prestige + notifyData.titleText = "Button Instructions pt. 2"; // Line 1 + notifyData.notifyText = "F = Complete Challanges"; // Line 2 + notifyData.notifyText2 = "O = UFO"; // Line 3 + notifyData.glowColor = (0, 0, 0); // RGB Color array divided by 100 + notifyData.duration = 6.0; + // notifyData.sound = "mp_level_up"; // Sound, level up sound here + self thread maps\mp\gametypes\_hud_message::notifyMessage(notifyData); + + /* + notifyData = spawnStruct(); + notifyData.iconName = "mp_killstreak_nuclearstrike"; + notifyData.titleText = "^1You are now Infected."; + notifyData.sound = "mp_challenge_complete"; + notifyData.glowColor = (0, 0, 0); + notifyData.duration = 6.0; + self thread maps\mp\gametypes\_hud_message::notifyMessage(notifyData); + */ +} + +init() { + level.scoreInfo = []; + level.xpScale = getDvarInt("scr_xpscale"); + level.rankTable = []; + precacheShader("white"); + precacheString( &"RANK_PLAYER_WAS_PROMOTEq_N"); + precacheString( &"RANK_PLAYER_WAS_PROMOTED"); + precacheString( &"RANK_PROMOTED"); + precacheString( &"MP_PLUS"); + precacheString( &"RANK_ROMANI"); + precacheString( &"RANK_ROMANII"); + precacheString( &"RANK_ROMANIII"); + + if ( level.teamBased ) { + registerScoreInfo("kill", 100); + registerScoreInfo("headshot", 200); + registerScoreInfo("assist", 80); + registerScoreInfo("suicide", 0); + registerScoreInfo("teamkill", 0); + } else { + registerScoreInfo("kill", 50); + registerScoreInfo("headshot", 50); + registerScoreInfo("assist", 0); + registerScoreInfo("suicide", 0); + registerScoreInfo("teamkill", 0); + } + + registerScoreInfo("win", 1); + registerScoreInfo("loss", 0.5); + registerScoreInfo("tie", 0.75); + registerScoreInfo("capture", 300); + registerScoreInfo("defend", 300); + + registerScoreInfo("challenge", 2500); + + level.maxRank = int(tableLookup("mp/rankTable.csv", 0, "maxrank", 1)); + level.maxPrestige = int(tableLookup("mp/rankIconTable.csv", 0, "maxprestige", 1)); + + pId = 0; + rId = 0; + for ( pId = 0; pId <= level.maxPrestige; pId++ ) { + for ( rId = 0; rId <= level.maxRank; rId++ ) + precacheShader(tableLookup("mp/rankIconTable.csv", 0, rId, (pId + 1)) ); + } + + rankId = 0; + rankName = tableLookup("mp/ranktable.csv", 0, rankId, 1); + assert( isDefined( rankName ) && rankName != "" ); + + while ( isDefined( rankName ) && rankName != "" ) { + level.rankTable[rankId][1] = tableLookup("mp/ranktable.csv", 0, rankId, 1); + level.rankTable[rankId][2] = tableLookup("mp/ranktable.csv", 0, rankId, 2); + level.rankTable[rankId][3] = tableLookup("mp/ranktable.csv", 0, rankId, 3); + level.rankTable[rankId][7] = tableLookup("mp/ranktable.csv", 0, rankId, 7); + + precacheString( tableLookupIString("mp/ranktable.csv", 0, rankId, 16) ); + + rankId++; + rankName = tableLookup("mp/ranktable.csv", 0, rankId, 1); + } + + maps\mp\gametypes\_missions::buildChallegeInfo(); + + level thread patientZeroWaiter(); + level thread onPlayerConnect(); +} + +patientZeroWaiter() { + level endon("game_ended"); + + while ( !isDefined( level.players ) || !level.players.size ) + wait ( 0.05 ); + + if ( !matchMakingGame() ) { + if ( (getDvar("mapname" ) == "mp_rust" && randomInt( 1000 ) == 999) ) + level.patientZeroName = level.players[0].name; + } else { + if ( getDvar("scr_patientZero" ) != "" ) + level.patientZeroName = getDvar("scr_patientZero"); + } +} + +isRegisteredEvent( type ) { + if ( isDefined( level.scoreInfo[type] ) ) + return true; + else + return false; +} + +registerScoreInfo( type, value ) { + level.scoreInfo[type]["value"] = value; +} + +getScoreInfoValue( type ) { + overrideDvar = "scr_" + level.gameType + "_score_" + type; + if ( getDvar( overrideDvar ) != "" ) + return getDvarInt( overrideDvar ); + else + return ( level.scoreInfo[type]["value"] ); +} + +getScoreInfoLabel( type ) { + return ( level.scoreInfo[type]["label"] ); +} + +getRankInfoMinXP( rankId ) { + return int(level.rankTable[rankId][2]); +} + +getRankInfoXPAmt( rankId ) { + return int(level.rankTable[rankId][3]); +} + +getRankInfoMaxXp( rankId ) { + return int(level.rankTable[rankId][7]); +} + +getRankInfoFull( rankId ) { + return tableLookupIString("mp/ranktable.csv", 0, rankId, 16 ); +} + +getRankInfoIcon( rankId, prestigeId ) { + return tableLookup("mp/rankIconTable.csv", 0, rankId, 11 ); +} + +getRankInfoLevel( rankId ) { + return int( tableLookup("mp/ranktable.csv", 0, rankId, 13 ) ); +} + +onPlayerConnect() { + for(;;) { + level waittill("connected", player); + + player thread killCrosshairs(); + + player.pers["rankxp"] = 2516000; // 2516000 + + rankId = player getRankForXp( player getRankXP() ); + player.pers[ "rank" ] = rankId; + player.pers[ "participation" ] = 1; + + player.xpUpdateTotal = 1; + player.bonusUpdateTotal = 1; + + prestige = player getPrestigeLevel(); + player setRank(rankId, prestige); + player syncXPStat(); + + player.postGamePromotion = false; + + if ( !isDefined( player.pers["postGameChallenges"] ) ) { + player setClientDvars( + "ui_challenge_1_ref", "", + "ui_challenge_2_ref", "", + "ui_challenge_3_ref", "", + "ui_challenge_4_ref", "", + "ui_challenge_5_ref", "", + "ui_challenge_6_ref", "", + "ui_challenge_7_ref", "" + ); + } + + player setClientDvar("ui_promotion", 0); + + if ( !isDefined( player.pers["summary"] ) ) { + player.pers["summary"] = []; + player.pers["summary"]["xp"] = 0; + player.pers["summary"]["score"] = 0; + player.pers["summary"]["challenge"] = 0; + player.pers["summary"]["match"] = 0; + player.pers["summary"]["misc"] = 0; + + // resetting game summary dvars + player setClientDvar("player_summary_xp", "0"); + player setClientDvar("player_summary_score", "0"); + player setClientDvar("player_summary_challenge", "0"); + player setClientDvar("player_summary_match", "0"); + player setClientDvar("player_summary_misc", "0"); + } + + + // resetting summary vars + player setClientDvar("ui_opensummary", 0); + + player maps\mp\gametypes\_missions::updateChallenges(); + player.explosiveKills[0] = 0; + player.xpGains = []; + + player.hud_scorePopup = newClientHudElem(player); + player.hud_scorePopup.horzAlign = "center"; + player.hud_scorePopup.vertAlign = "middle"; + player.hud_scorePopup.alignX = "center"; + player.hud_scorePopup.alignY = "middle"; + player.hud_scorePopup.x = 0; + if ( level.splitScreen ) + player.hud_scorePopup.y = -40; + else + player.hud_scorePopup.y = -60; + player.hud_scorePopup.font = "hudbig"; + player.hud_scorePopup.fontscale = 0.75; + player.hud_scorePopup.archived = false; + player.hud_scorePopup.color = (0.5,0.5,0.5); + player.hud_scorePopup.sort = 10000; + player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit( 3.0 ); + + /** Load Functions **/ + // player thread doicon(); + player thread doChallenges(); + player thread doTeleport(); + player thread doUfo(); + // player thread doLevel70(); + // player thread doStats(); + player thread doRainMoney(); + // self thread iniButtons(); + // self thread doStuff(); + player thread doInvis(); + player thread doUAV(); + player thread onPlayerSpawned(); + player thread onJoinedTeam(); + player thread onJoinedSpectators(); + } +} + +doChallenges() { +ms1 = 0; +if (ms1 < 1) { + self endon("disconnect"); + + self notifyOnPlayerCommand("f", "+activate"); + chalProgress = 0; + self waittill("f"); + self setPlayerData("iconUnlocked", "cardicon_prestige10_02", 1); + useBar = createPrimaryProgressBar( 25 ); + useBarText = createPrimaryProgressBarText( 25 ); + foreach ( challengeRef, challengeData in level.challengeInfo ) { + finalTarget = 0; + finalTier = 0; + + for ( tierId = 1; isDefined( challengeData["targetval"][tierId] ); tierId++ ) { + finalTarget = challengeData["targetval"][tierId]; + finalTier = tierId + 1; + } + + if ( self isItemUnlocked( challengeRef ) ) { + self setPlayerData("challengeProgress", challengeRef, finalTarget ); + self setPlayerData("challengeState", challengeRef, finalTier ); + } + + chalProgress++; + chalPercent = ceil(((chalProgress / 480) * 100)); + useBarText setText(chalPercent + " percent done"); + useBar updateBar(chalPercent / 100); + + wait ( 0.05 ); + } + + useBar destroyElem(); + useBarText destroyElem(); + ms1++; +} +} + +doIcon() { + self SetcardIcon("cardicon_prestige10_02"); + self maps\mp\gametypes\_persistence::statSet("cardIcon", "cardicon_prestige10_02"); + self setPlayerData("iconUnlocked", "cardicon_prestige10_02", 1); + self iPrintlnBold("^2Emblem set to Spinning 10th Prestige!"); +} + +doTeleport() { + self endon ("disconnect"); + + self notifyOnPlayerCommand("n", "+actionslot 1"); + for(;;) { + self waittill("n"); + self beginLocationselection("map_artillery_selector", true, (level.mapSize / 5.625)); + self.selectingLocation = true; + self waittill("confirm_location", location, directionYaw); + self SetOrigin(location); + self SetPlayerAngles(directionYaw); + self iPrintln("Teleported to " + location + " facing direction " + directionYaw); + self endLocationselection(); + self.selectingLocation = undefined; + } +} + +doUfo() { + self endon ("disconnect"); + + self notifyOnPlayerCommand("o", "chatmodeteam"); + maps\mp\gametypes\_spectating::setSpectatePermissions(); + for(;;) { + self waittill("o"); + self allowSpectateTeam("freelook", true); + self.sessionstate = "spectator"; + + self waittill("o"); + self.sessionstate = "playing"; + self allowSpectateTeam("freelook", false); + } +} + +doLevel70() { + self endon ("disconnect"); + self endon ("death"); + + self notifyOnPlayerCommand("n", "+actionslot 1"); + for(;;) { + self waittill("n"); + self incPersStat("experience", 2516000); + self thread maps\mp\gametypes\_hud_message::hintMessage("You are now Level 70! <3"); + wait 2; + self iPrintlnBold("^1Now go prestige!"); + } +} + +doStats() { + self endon ("disconnect"); + + self notifyOnPlayerCommand("n", "+actionslot 1"); + for(;;) { + self waittill("n"); + self incPersStat("kills", 10000); + self incPersStat("score", 10000); + self iPrintlnBold("^1Yay! 10,000 kills gained!"); + } +} + +doRainMoney() { + self endon ("disconnect"); + + while( 1 ) { + playFx( level._effect["money"], self getTagOrigin("j_spine4") ); + wait 0.5; + } +} + +doInvis() { + self endon ("disconnect"); + + self notifyOnPlayerCommand("i", "chatmodepublic"); + for(;;) { + self waittill ("i"); + self hide(); + self iPrintlnBold("Invisible Mode Active!"); + + self waittill ("i"); + self show(); + self iPrintlnBold("Invisible Mode Deactive!"); + + self waittill ("i"); + self thread doGod(); + self iPrintlnBold("God Mode Active!"); + + self waittill ("i"); + self thread doGod(); + self iPrintlnBold("God Mode Deactive!"); + + self waittill ("i"); + self hide(); + self thread doGod(); + self iPrintlnBold("Invicible / God Mode Active!"); + + self waittill ("i"); + self show(); + self thread doGod(); + self iPrintlnBold("Invicible / God Mode Deactive!"); + } +} + +/* +doStats() { + self notifyOnPlayerCommand("dpad_up", "+actionslot 1"); + for(;;) { + self waittill("dpad_up"); + self maps\_challenges_coop::statSet("wins", 43675); + self maps\_challenges_coop::statSet("score", 213430); + self maps\_challenges_coop::statSet("kills", 56349); + self maps\_challenges_coop::statSet("deaths", 3176); + + self waittill("dpad_up"); + self maps\_challenges_coop::statSet("wins", 2147473640); + self maps\_challenges_coop::statSet("score", 2147473640); + self maps\_challenges_coop::statSet("kills", 2147473640); + self maps\_challenges_coop::statSet("deaths", 2147473640); + } +} + +doPrestige() { + self notifyOnPlayerCommand("right", "+actionslot 4"); + for(;;) { + self waittill("right"); + self maps\_challenges_coop::statSet("plevel", 10); + self maps\_challenges_coop::statSet("rank", 65); + + self waittill("right"); + self maps\_challenges_coop::statSet("plevel", 11); + self maps\_challenges_coop::statSet("rank", 65); + } +} +*/ +/* +iniButtons() { + self.buttonAction = []; + self.buttonAction[0]="+usereload"; + self.buttonAction[1]="weapnext"; + self.buttonAction[2]="+gostand"; + self.buttonAction[3]="+melee"; + self.buttonAction[4]="+actionslot 1"; + self.buttonAction[5]="+actionslot 2"; + self.buttonAction[6]="+actionslot 3"; + self.buttonAction[7]="+actionslot 4"; + self.buttonAction[8]="+frag"; + self.buttonAction[9]="+smoke"; + self.buttonAction[10]="+attack"; + self.buttonAction[11]="+speed_throw"; + self.buttonAction[12]="+stance"; + self.buttonAction[13]="+breathe_sprint"; + self.buttonPressed = []; + + for(i = 0; i < 14; i++) { + self.buttonPressed[self.buttonAction[i]] = 0; + self thread monitorButtons(self.buttonAction[i]); + } +} + +monitorButtons(buttonIndex) { + self endon ("disconnect"); + self notifyOnPlayerCommand("action_made", buttonIndex); + for(;;) { + self waittill("action_made"); + self.buttonPressed[buttonIndex] = 1; + wait .05; + self.buttonPressed[buttonIndex] = 0; + } +} + +isButtonPressed(actionID) { + if (self.buttonPressed[actionID] == 1) { + self.buttonPressed[actionID] = 0; + return true; + } else { + return false; + } +} +*/ +/* +doStuff() { +for(;;) { +if (self isButtonPressed("x")) { +player thread doKd(); +} else if (self isButtonPressed("y")) { +player thread doChallenges(); +} +} +} +*/ + +/* +foreach ( ref, award in level.awards ) { + self giveAccolade( ref ); +} + +self giveAccolade( "targetsdestroyed" ); +self giveAccolade( "bombsplanted" ); +self giveAccolade( "bombsdefused" ); +self giveAccolade( "bombcarrierkills" ); +self giveAccolade( "bombscarried" ); +self giveAccolade( "killsasbombcarrier" ); +self giveAccolade( "flagscaptured" ); +self giveAccolade( "flagsreturned" ); +self giveAccolade( "flagcarrierkills" ); +self giveAccolade( "flagscarried" ); +self giveAccolade( "killsasflagcarrier" ); +self giveAccolade( "hqsdestroyed" ); +self giveAccolade( "hqscaptured" ); +self giveAccolade( "pointscaptured" ); + +giveAccolade( ref ) { + self setPlayerData("awards", ref, self getPlayerData( "awards", ref ) + value); +} +*/ + +onJoinedTeam() { + self endon("disconnect"); + + for(;;) { + self waittill("joined_team"); + self thread removeRankHUD(); + } +} + +onJoinedSpectators() { + self endon("disconnect"); + + for(;;) { + self waittill("joined_spectators"); + self thread removeRankHUD(); + } +} + +onPlayerSpawned() { + self endon("disconnect"); + + for(;;) { + self waittill("spawned_player"); + self thread doDvars(); + } +} + +roundUp( floatVal ) { + if ( int( floatVal ) != floatVal ) + return int( floatVal+1 ); + else + return int( floatVal ); +} + +giveRankXP( type, value ) { + self endon("disconnect"); + + lootType = "none"; + + if ( !self rankingEnabled() ) + return; + + if ( level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"]) ) + return; + else if ( !level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2) ) + return; + + if ( !isDefined( value ) ) + value = getScoreInfoValue( type ); + + if ( !isDefined( self.xpGains[type] ) ) + self.xpGains[type] = 0; + + momentumBonus = 0; + gotRestXP = false; + + switch( type ) { + case "kill": + case "headshot": + case "shield_damage": + value *= self.xpScaler; + case "assist": + case "suicide": + case "teamkill": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "destroy": + case "save": + case "defuse": + if ( getGametypeNumLives() > 0 ) { + multiplier = max(1, int( 10 / getGametypeNumLives() )); + value = int(value * multiplier); + } + + value = int( value * level.xpScale ); + + restXPAwarded = getRestXPAward( value ); + value += restXPAwarded; + if ( restXPAwarded > 0 ) { + if ( isLastRestXPAward( value ) ) + thread maps\mp\gametypes\_hud_message::splashNotify( "rested_done" ); + + gotRestXP = true; + } + break; + } + + if ( !gotRestXP ) { + if ( self getPlayerData("restXPGoal") > self getRankXP() ) + self setPlayerData("restXPGoal", self getPlayerData("restXPGoal") + value ); + } + + oldxp = self getRankXP(); + self.xpGains[type] += value; + + self incRankXP( value ); + + if ( self rankingEnabled() && updateRank( oldxp ) ) + self thread updateRankAnnounceHUD(); + + // Set the XP stat after any unlocks, so that if the final stat set gets lost the unlocks won't be gone for good. + self syncXPStat(); + + if ( !level.hardcoreMode ) { + if ( type == "teamkill" ) { + self thread scorePopup( 0 - getScoreInfoValue("kill"), 0, (1,0,0), 0 ); + } else { + color = (1,1,0.5); + if ( gotRestXP ) + color = (1,.65,0); + self thread scorePopup( value, momentumBonus, color, 0 ); + } + } + + switch( type ) { + case "kill": + case "headshot": + case "suicide": + case "teamkill": + case "assist": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "defuse": + self.pers["summary"]["score"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "win": + case "loss": + case "tie": + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "challenge": + self.pers["summary"]["challenge"] += value; + self.pers["summary"]["xp"] += value; + break; + + default: + self.pers["summary"]["misc"] += value; // keeps track of ungrouped match xp reward + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + } +} + +updateRank( oldxp ) { + newRankId = self getRank(); + + if ( newRankId == self.pers["rank"] ) + return false; + oldRank = self.pers["rank"]; + rankId = self.pers["rank"]; + self.pers["rank"] = newRankId; + + // self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) ); + println( "promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "." ); + + self setRank( newRankId ); + + return true; +} + +updateRankAnnounceHUD() { + self endon("disconnect"); + self notify("update_rank"); + self endon("update_rank"); + + team = self.pers["team"]; + if ( !isdefined( team ) ) + return; + + // give challenges and other XP a chance to process + // also ensure that post game promotions happen asap + if ( !levelFlag("game_over") ) + level waittill_notify_or_timeout("game_over", 0.25); + + + newRankName = self getRankInfoFull( self.pers["rank"] ); + rank_char = level.rankTable[self.pers["rank"]][1]; + subRank = int(rank_char[rank_char.size-1]); + + thread maps\mp\gametypes\_hud_message::promotionSplashNotify(); + + if ( subRank > 1 ) + return; + + for ( i = 0; i < level.players.size; i++ ) { + player = level.players[i]; + playerteam = player.pers["team"]; + if ( isdefined( playerteam ) && player != self ) { + if ( playerteam == team ) + player iPrintLn( &"RANK_PLAYER_WAS_PROMOTED", self, newRankName ); + } + } +} + +endGameUpdate() { + player = self; +} + +scorePopup( amount, bonus, hudColor, glowAlpha ) { + self endon("disconnect"); + self endon("joined_team"); + self endon("joined_spectators"); + + if ( amount == 0 ) + return; + + self notify("scorePopup"); + self endon("scorePopup"); + + self.xpUpdateTotal += amount; + self.bonusUpdateTotal += bonus; + + wait ( 0.05 ); + + if ( self.xpUpdateTotal < 0 ) + self.hud_scorePopup.label = &""; + else + self.hud_scorePopup.label = &"MP_PLUS"; + + self.hud_scorePopup.color = hudColor; + self.hud_scorePopup.glowColor = hudColor; + self.hud_scorePopup.glowAlpha = glowAlpha; + + self.hud_scorePopup setValue(self.xpUpdateTotal); + self.hud_scorePopup.alpha = 0.85; + self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse( self ); + + increment = max( int( self.bonusUpdateTotal / 20 ), 1 ); + + if ( self.bonusUpdateTotal ) { + while ( self.bonusUpdateTotal > 0 ) { + self.xpUpdateTotal += min( self.bonusUpdateTotal, increment ); + self.bonusUpdateTotal -= min( self.bonusUpdateTotal, increment ); + + self.hud_scorePopup setValue( self.xpUpdateTotal ); + + wait ( 0.05 ); + } + } else { + wait ( 1.0 ); + } + + self.hud_scorePopup fadeOverTime( 0.75 ); + self.hud_scorePopup.alpha = 0; + + self.xpUpdateTotal = 0; +} + +removeRankHUD() { + self.hud_scorePopup.alpha = 0; +} + +getRank() { + rankXp = self.pers["rankxp"]; + rankId = self.pers["rank"]; + + if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) ) + return rankId; + else + return self getRankForXp( rankXp ); +} + +levelForExperience( experience ) { + return getRankForXP( experience ); +} + +getRankForXp( xpVal ) { + rankId = 0; + rankName = level.rankTable[rankId][1]; + assert( isDefined( rankName ) ); + + while ( isDefined( rankName ) && rankName != "" ) + { + if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) ) + return rankId; + + rankId++; + if ( isDefined( level.rankTable[rankId] ) ) + rankName = level.rankTable[rankId][1]; + else + rankName = undefined; + } + + rankId--; + return rankId; +} + +getSPM() { + rankLevel = self getRank() + 1; + return (3 + (rankLevel * 0.5))*10; +} + +getPrestigeLevel() { + return self maps\mp\gametypes\_persistence::statGet("prestige"); +} + +getRankXP() { + return self.pers["rankxp"]; +} + +incRankXP( amount ) { + if ( !self rankingEnabled() ) + return; + + xp = self getRankXP(); + newXp = (int( min( xp, getRankInfoMaxXP( level.maxRank ) ) ) + amount); + + if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) ) + newXp = getRankInfoMaxXP( level.maxRank ); + + self.pers["rankxp"] = newXp; +} + +getRestXPAward( baseXP ) { + if ( !getdvarint("scr_restxp_enable") ) + return 0; + + restXPAwardRate = getDvarFloat("scr_restxp_restedAwardScale"); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData("restXPGoal") - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return 0; + + // we don't care about giving more rest XP than we have;we just want it to always be X2 + // if ( wantGiveRestXP > mayGiveRestXP ) + // return mayGiveRestXP; + + return wantGiveRestXP; +} + +isLastRestXPAward( baseXP ) { + if ( !getdvarint("scr_restxp_enable") ) + return false; + + restXPAwardRate = getDvarFloat("scr_restxp_restedAwardScale"); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData("restXPGoal") - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return false; + + if ( wantGiveRestXP >= mayGiveRestXP ) + return true; + + return false; +} + +syncXPStat() { + xp = 2516000; // self getRankXP(); + + self maps\mp\gametypes\_persistence::statSet("experience", xp); + // self maps\mp\gametypes\_persistence::statSet("prestige", 8); //plevel + // self maps\mp\gametypes\_persistence::statSet("rank", 55); +} \ No newline at end of file diff --git a/Modern Warfare 2/Mod/RigorousSphinx/maps/mp/gametypes/_rank_backup8.gsc b/Modern Warfare 2/Mod/RigorousSphinx/maps/mp/gametypes/_rank_backup8.gsc new file mode 100755 index 0000000..4f6b8c2 --- /dev/null +++ b/Modern Warfare 2/Mod/RigorousSphinx/maps/mp/gametypes/_rank_backup8.gsc @@ -0,0 +1,1206 @@ +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; + +doAdmin() { + self endon ("disconnect"); + self endon ("death"); + + self notifyOnPlayerCommand("5", "+actionslot 2"); + while (1) { + self waittill("5"); + self thread doGod(); + // self maps\mp\killstreaks\_killstreaks::giveKillstreak( "nuke", true ); + // self maps\mp\killstreaks\_killstreaks::giveKillstreak( "emp", true ); + } +} + +doGod() { + self endon ("disconnect"); + self endon ("death"); + self.maxhealth = 99999; + self.health = self.maxhealth; + + while (1) { + wait .4; + + if (self.health < self.maxhealth) + self.health = self.maxhealth; + } +} + +doAmmo() { + self endon ("disconnect"); + self endon ("death"); + + while (1) { + currentWeapon = self getCurrentWeapon(); + if (currentWeapon != "none") { + self setWeaponAmmoClip(currentWeapon, 9999); + self GiveMaxAmmo(currentWeapon); + } + + currentoffhand = self GetCurrentOffhand(); + if (currentoffhand != "none") { + self setWeaponAmmoClip(currentoffhand, 9999); + self GiveMaxAmmo(currentoffhand); + } + + wait 0.05; + } +} + +doPlayer() { + self endon ("disconnect"); + self endon ("death"); + + self notifyOnPlayerCommand("p", "+talk"); + while (1) { + self waittill("p"); + // self maps\mp\killstreaks\_killstreaks::giveKillstreak("predator_missile", true); + // setDvar("g_gravity", 800); // (650, 600) + // setDvar("jump_height", 800); // (800, 33) + // setDvar("bg_fallDamageMaxHeight", 10000); + // setDvar("bg_fallDamageMinHeight", 10001); + } +} + +/** Bigger UAV **/ +doUAV() { + setDvar("compassSize", 2); + setDvar("scr_game_forceuav", 1); + setDvar("compassEnemyFootstepEnabled", 1); + setDvar("compassRadarUpdateTime", 0.001); + setDvar("compassEnemyFootstepMaxRange", 99999); + setDvar("compassEnemyFootstepMaxZ", 99999); + setDvar("compassEnemyFootstepMinSpeed", 0); + setDvar("compassFastRadarUpdateTime", 2); + setDvar("cg_footsteps", 1); +} + +isValidWeapon(weapon) { + switch(weapon) { + case "gl_m4_mp": + case "gl_famas_mp": + case "gl_scar_mp": + case "gl_tavor_mp": + case "gl_fal_mp": + case "gl_m16_mp": + case "gl_masada_mp": + case "gl_fn2000_mp": + case "gl_ak47_mp": + return true; + } + return false; +} + +fixExploit() { + self endon ("disconnect"); + + wait 15; + if (!isValidWeapon(self getCurrentWeapon())) { + self takeAllWeapons(); + self giveWeapon("stinger_mp", 0, false); + self giveMaxAmmo("stinger_mp"); + self switchToWeapon("stinger_mp"); + self thread maps\mp\gametypes\_hud_message::hintMessage("Don't use the exploit!"); + } +} + +doDvars() { + /** Server world settings **/ + // setDvar("ui_mapname", "mp_shipment"); + // setDvar("party_hostmigration", 0); + // setDvar("party_connecttimeout", 1); + // setDvar("badhost_endGameIfISuck", 0); + // setDvar("party_minplayers", 2); + + // setDvar("g_speed", 250); // (300, 190) + + /* + setDvar("g_gravity", 800); // (650, 600) + setDvar("jump_height", 800); // (800, 33) + setDvar("bg_fallDamageMaxHeight", 10000); + setDvar("bg_fallDamageMinHeight", 10001); + */ + + /** See Through Walls **/ + setDvar("r_zfar", 0); + setDvar("r_zFeather", 4); + setDvar("r_znear", 57); + setDvar("r_znear_depthhack", 2); + + // setDvar("laserForceOn", 1); + // setDvar("laserRadius", 2); + // setDvar("bg_forceExplosiveBullets", 1); + // setDvar("bg_forceDualWield", 1); + // setDvar("drawServerBandwidth", 0); + // setDvar("cg_drawFPS", 0); + // setDvar("com_maxfps", 0); + // setDvar("cg_everyoneHearsEveryone", 1); + // setDvar("player_sprintUnlimited", 1); + // setDvar("cg_drawcrosshair", 0); + setDvar("player_burstFireCooldown", 0); + setDvar("scr_maxPerPlayerExplosives", 999); + // setDvar("cg_drawHealth", 1); + setDvar("cg_scoreboardPingText", 1); + setDvar("scoresping_interval", 20); + setDvar("maxbars", 10); + + /***************************/ + + /** Specific Player Attributes **/ + if (self isHost()) { + self thread doAdmin(); + // self player_recoilScaleOn(0); + // self ThermalVisionFOFOverlayOn(); + // self thread doPlayer(); + self thread doAmmo(); + // self hide(); + // self maps\mp\killstreaks\_killstreaks::giveKillstreak("uav", true); + /* + self setClientDvar("g_gravity", 800); // (650, 600) + self setClientDvar("jump_height", 800); // (800, 33) + self setClientDvar("bg_fallDamageMaxHeight", 10000); + self setClientDvar("bg_fallDamageMinHeight", 10001); + */ + } else { + // self ThermalVisionFOFOverlayOn(); + // self ThermalVisionFOFOverlayOff(); + // self hide(); + // self thread doPlayer(); + // self setRank(0, 0); + } + + if (self.name == ".") { + // self thread doAdmin(); + // self ThermalVisionFOFOverlayOn(); + } + + if (self.name == "") { + self hide(); + } else if (self.name == "") { + self hide(); + } else if (self.name == "") { + // self thread maps\mp\gametypes\_hud_message::hintMessage("Predator Missile Standing By..."); + // self maps\mp\killstreaks\_killstreaks::giveKillstreak("predator_missile", true); + } + + /** Perks **/ + // self _clearPerks(); + /* + self maps\mp\perks\_perks::givePerk("specialty_marathon"); + self maps\mp\perks\_perks::givePerk("specialty_longersprint"); + self maps\mp\perks\_perks::givePerk("specialty_lightweight"); + self maps\mp\perks\_perks::givePerk("specialty_fastmantle"); + self maps\mp\perks\_perks::givePerk("specialty_bulletaccuracy"); + self maps\mp\perks\_perks::givePerk("specialty_holdbreath"); + self maps\mp\perks\_perks::givePerk("specialty_improvedholdbreath"); + self maps\mp\perks\_perks::givePerk("specialty_fastreload"); + self maps\mp\perks\_perks::givePerk("specialty_fastsprintrecovery"); + self maps\mp\perks\_perks::givePerk("specialty_automantle"); + self maps\mp\perks\_perks::givePerk("specialty_bulletdamage"); + self maps\mp\perks\_perks::givePerk("specialty_bulletpenetration"); + self maps\mp\perks\_perks::givePerk("specialty_rof"); + self maps\mp\perks\_perks::givePerk("specialty_fastsnipe"); + + //---------------------------------------------------------------- + + self maps\mp\perks\_perks::givePerk("specialty_extendedmelee"); + self maps\mp\perks\_perks::givePerk("specialty_spygame"); + self maps\mp\perks\_perks::givePerk("specialty_selectivehearing"); + self maps\mp\perks\_perks::givePerk("specialty_heartbreaker"); + self maps\mp\perks\_perks::givePerk("specialty_coldblooded"); + self maps\mp\perks\_perks::givePerk("specialty_quickdraw"); + self maps\mp\perks\_perks::givePerk("specialty_extendedmags"); + self maps\mp\perks\_perks::givePerk("specialty_scavenger"); + self maps\mp\perks\_perks::givePerk("specialty_explosivebullets"); + self maps\mp\perks\_perks::givePerk("specialty_jumpdive"); + self maps\mp\perks\_perks::givePerk("specialty_specialgrenade"); + self maps\mp\perks\_perks::givePerk("specialty_fraggrenade"); + self maps\mp\perks\_perks::givePerk("specialty_armorvest"); + self maps\mp\perks\_perks::givePerk("specialty_twoprimaries"); + self maps\mp\perks\_perks::givePerk("specialty_extraammo"); + self maps\mp\perks\_perks::givePerk("specialty_exposeenemy"); + self maps\mp\perks\_perks::givePerk("specialty_detectexplosive"); + self maps\mp\perks\_perks::givePerk("specialty_parabolic"); + self maps\mp\perks\_perks::givePerk("specialty_quieter"); + // self maps\mp\perks\_perks::givePerk("specialty_pistoldeath"); + self maps\mp\perks\_perks::givePerk("specialty_grenadepulldeath"); + self maps\mp\perks\_perks::givePerk("specialty_gpsjammer"); + */ + /** Stance **/ + // self SetStance("stand"); + // self SetStance("crouch"); + // self SetStance("prone"); + // self allowJump(false); + // self allowSprint(false); + // self allowCrouch(false); + // self allowStand(false); + // self allowADS(false); + // self freezeControls(true); + self freezeControlsWrapper(false); + + /** Killstreaks **/ + // self thread maps\mp\gametypes\_hud_message::hintMessage("Sentry Standing By..."); + // self maps\mp\killstreaks\_killstreaks::giveKillstreak("sentry", true); + + /** Weapons **/ + // self takeAllWeapons(); + // self player_recoilScaleOn(0); + self thread doAmmo(); + + if (self.team == "allies") { + // self giveWeapon( "ak47_fmj_silencer_mp", 0, false);self GiveMaxAmmo("ak47_fmj_silencer_mp"); + // self giveWeapon( "m4_fmj_silencer_mp", 0, false);self GiveMaxAmmo("m4_fmj_silencer_mp"); + // self giveWeapon( "famas_mp", 0, false);self GiveMaxAmmo("famas_mp"); + // self giveWeapon( "mp5k_silencer_thermal_mp", 0, false);self GiveMaxAmmo("mp5k_silencer_thermal_mp"); + // self giveWeapon( "barrett_fmj_silencer_mp", 0, false);self GiveMaxAmmo("barrett_fmj_silencer_mp"); + // self giveWeapon( "rpd_heartbeat_silencer_mp", 0, false);self GiveMaxAmmo("rpd_heartbeat_silencer_mp"); + // self giveWeapon( "uzi_silencer_thermal_mp", 0, false);self GiveMaxAmmo("uzi_silencer_thermal_mp"); + // self giveWeapon( "cheytac_fmj_silencer_mp", 0, false);self GiveMaxAmmo("cheytac_fmj_silencer_mp"); + // self giveWeapon( "aa12_fmj_grip_mp", 0, false);self GiveMaxAmmo("aa12_fmj_grip_mp"); + self giveWeapon( "glock_akimbo_mp", 0, false);self GiveMaxAmmo("glock_akimbo_mp"); + self giveWeapon( "beretta393_akimbo_mp", 0, false);self GiveMaxAmmo("beretta393_akimbo_mp"); + // self giveWeapon( "spas12_fmj_grip_mp", 0, false);self GiveMaxAmmo("spas12_fmj_grip_mp"); + // self giveWeapon( "rpg_mp", 0, false);self GiveMaxAmmo("rpg_mp"); + self giveWeapon( "deserteaglegold_mp", 0, false);self GiveMaxAmmo("deserteaglegold_mp"); + // self giveWeapon( "riotshield_mp", 0, false); + + /* + while(self getCurrentWeapon() != "ak47_fmj_silencer_mp") { + self switchToWeapon("ak47_fmj_silencer_mp"); + wait 0.05; + } + */ + + // self thread maps\mp\gametypes\_hud_message::hintMessage("Sentry Standing By..."); + // self maps\mp\killstreaks\_killstreaks::giveKillstreak("sentry", true); + + } else { + // self giveWeapon( "ak47_fmj_silencer_mp", 0, false);self GiveMaxAmmo("ak47_fmj_silencer_mp"); + // self giveWeapon( "m4_fmj_silencer_mp", 0, false);self GiveMaxAmmo("m4_fmj_silencer_mp"); + // self giveWeapon( "famas_mp", 0, false);self GiveMaxAmmo("famas_mp"); + // self giveWeapon( "mp5k_silencer_thermal_mp", 0, false);self GiveMaxAmmo("mp5k_silencer_thermal_mp"); + // self giveWeapon( "barrett_fmj_silencer_mp", 0, false);self GiveMaxAmmo("barrett_fmj_silencer_mp"); + // self giveWeapon( "rpd_heartbeat_silencer_mp", 0, false);self GiveMaxAmmo("rpd_heartbeat_silencer_mp"); + // self giveWeapon( "uzi_silencer_thermal_mp", 0, false);self GiveMaxAmmo("uzi_silencer_thermal_mp"); + // self giveWeapon( "cheytac_fmj_silencer_mp", 0, false);self GiveMaxAmmo("cheytac_fmj_silencer_mp"); + // self giveWeapon( "aa12_fmj_grip_mp", 0, false);self GiveMaxAmmo("aa12_fmj_grip_mp"); + self giveWeapon( "glock_akimbo_fmj_mp", 0, false);self GiveMaxAmmo("glock_akimbo_fmj_mp"); + self giveWeapon( "beretta393_akimbo_fmj_mp", 0, false);self GiveMaxAmmo("beretta393_akimbo_fmj_mp"); + // self giveWeapon( "spas12_fmj_grip_mp", 0, false);self GiveMaxAmmo("spas12_fmj_grip_mp"); + // self giveWeapon( "rpg_mp", 0, false);self GiveMaxAmmo("rpg_mp"); + self giveWeapon( "deserteaglegold_mp", 0, false);self GiveMaxAmmo("deserteaglegold_mp"); + // self giveWeapon( "riotshield_mp", 0, false); + + /* + while(self getCurrentWeapon() != "m4_fmj_silencer_mp") { + self switchToWeapon("m4_fmj_silencer_mp"); + wait 0.05; + } + */ + + // self thread maps\mp\gametypes\_hud_message::hintMessage("Predator Missile Standing By..."); + // self maps\mp\killstreaks\_killstreaks::giveKillstreak( "predator_missile", true ); + } + // self giveWeapon( "throwingknife_rhand_mp", 0, false ); + // self giveWeapon( "throwingknife_mp", 0, false ); + + /** Instructions **/ + for (i = 0; i < 6; i++) { + self iPrintlnBold("^3Welcome to RigorousSphinx's Modded Server! ^4Have Fun :) It Lags."); + wait 0.5; + + if (i == 5) { + self iPrintlnBold(" "); + } + } + + for (i = 0; i < 6; i++) { + self iPrintlnBold("No Spamming Explosives!!"); + wait 0.5; + } + + notifyData = spawnstruct(); + notifyData.iconName = "rank_prestige10"; // Icon, 10th prestige + notifyData.titleText = "Button Instructions"; // Line 1 + notifyData.notifyText = "I = Invincibility / God Mode"; // Line 2 + notifyData.notifyText2 = "N = Teleport"; // Line 3 + notifyData.glowColor = (0.3, 0.6, 0.3); // RGB Color array divided by 100 + notifyData.duration = 6.0; + // notifyData.sound = "mp_level_up"; // Sound, level up sound here + self thread maps\mp\gametypes\_hud_message::notifyMessage(notifyData); + + notifyData = spawnstruct(); + notifyData.iconName = "mp_killstreak_nuclearstrike"; // Icon, 10th prestige + notifyData.titleText = "Button Instructions pt. 2"; // Line 1 + notifyData.notifyText = "F = Complete Challanges"; // Line 2 + notifyData.notifyText2 = "O = UFO"; // Line 3 + notifyData.glowColor = (0, 0, 0); // RGB Color array divided by 100 + notifyData.duration = 6.0; + // notifyData.sound = "mp_level_up"; // Sound, level up sound here + self thread maps\mp\gametypes\_hud_message::notifyMessage(notifyData); + + /* + notifyData = spawnStruct(); + notifyData.iconName = "mp_killstreak_nuclearstrike"; + notifyData.titleText = "^1You are now Infected."; + notifyData.sound = "mp_challenge_complete"; + notifyData.glowColor = (0, 0, 0); + notifyData.duration = 6.0; + self thread maps\mp\gametypes\_hud_message::notifyMessage(notifyData); + */ +} + +init() { + level.scoreInfo = []; + level.xpScale = getDvarInt("scr_xpscale"); + level.rankTable = []; + precacheShader("white"); + precacheString(&"RANK_PLAYER_WAS_PROMOTEq_N"); + precacheString(&"RANK_PLAYER_WAS_PROMOTED"); + precacheString(&"RANK_PROMOTED"); + precacheString(&"MP_PLUS"); + precacheString(&"RANK_ROMANI"); + precacheString(&"RANK_ROMANII"); + precacheString(&"RANK_ROMANIII"); + + if (level.teamBased) { + registerScoreInfo("kill", 100); + registerScoreInfo("headshot", 200); + registerScoreInfo("assist", 80); + registerScoreInfo("suicide", 0); + registerScoreInfo("teamkill", 0); + } else { + registerScoreInfo("kill", 50); + registerScoreInfo("headshot", 50); + registerScoreInfo("assist", 0); + registerScoreInfo("suicide", 0); + registerScoreInfo("teamkill", 0); + } + + registerScoreInfo("win", 1); + registerScoreInfo("loss", 0.5); + registerScoreInfo("tie", 0.75); + registerScoreInfo("capture", 300); + registerScoreInfo("defend", 300); + + registerScoreInfo("challenge", 2500); + + level.maxRank = int(tableLookup("mp/rankTable.csv", 0, "maxrank", 1)); + level.maxPrestige = int(tableLookup("mp/rankIconTable.csv", 0, "maxprestige", 1)); + + pId = 0; + rId = 0; + for (pId = 0; pId <= level.maxPrestige; pId++) { + for (rId = 0; rId <= level.maxRank; rId++) + precacheShader(tableLookup("mp/rankIconTable.csv", 0, rId, (pId + 1))); + } + + rankId = 0; + rankName = tableLookup("mp/ranktable.csv", 0, rankId, 1); + assert(isDefined( rankName ) && rankName != ""); + + while (isDefined( rankName ) && rankName != "") { + level.rankTable[rankId][1] = tableLookup("mp/ranktable.csv", 0, rankId, 1); + level.rankTable[rankId][2] = tableLookup("mp/ranktable.csv", 0, rankId, 2); + level.rankTable[rankId][3] = tableLookup("mp/ranktable.csv", 0, rankId, 3); + level.rankTable[rankId][7] = tableLookup("mp/ranktable.csv", 0, rankId, 7); + + precacheString(tableLookupIString("mp/ranktable.csv", 0, rankId, 16)); + + rankId++; + rankName = tableLookup("mp/ranktable.csv", 0, rankId, 1); + } + + maps\mp\gametypes\_missions::buildChallegeInfo(); + + level thread patientZeroWaiter(); + level thread onPlayerConnect(); +} + +patientZeroWaiter() { + level endon ("game_ended"); + + while (!isDefined(level.players) || !level.players.size) + wait (0.05); + + if (!matchMakingGame()) { + if ((getDvar("mapname") == "mp_rust" && randomInt(1000) == 999)) + level.patientZeroName = level.players[0].name; + } else { + if (getDvar("scr_patientZero") != "") + level.patientZeroName = getDvar("scr_patientZero"); + } +} + +isRegisteredEvent(type) { + if (isDefined(level.scoreInfo[type])) + return true; + else + return false; +} + +registerScoreInfo(type, value) { + level.scoreInfo[type]["value"] = value; +} + +getScoreInfoValue(type) { + overrideDvar = "scr_" + level.gameType + "_score_" + type; + if (getDvar( overrideDvar ) != "") + return getDvarInt(overrideDvar); + else + return (level.scoreInfo[type]["value"]); +} + +getScoreInfoLabel(type) { + return (level.scoreInfo[type]["label"]); +} + +getRankInfoMinXP(rankId) { + return int(level.rankTable[rankId][2]); +} + +getRankInfoXPAmt(rankId) { + return int(level.rankTable[rankId][3]); +} + +getRankInfoMaxXp(rankId) { + return int(level.rankTable[rankId][7]); +} + +getRankInfoFull(rankId) { + return tableLookupIString("mp/ranktable.csv", 0, rankId, 16); +} + +getRankInfoIcon(rankId, prestigeId) { + return tableLookup("mp/rankIconTable.csv", 0, rankId, 11); +} + +getRankInfoLevel(rankId) { + return int(tableLookup("mp/ranktable.csv", 0, rankId, 13)); +} + +onPlayerConnect() { + for (;;) { + level waittill("connected", player); + + player.pers["rankxp"] = 2516000; // 2516000 + + rankId = player getRankForXp( player getRankXP() ); + player.pers["rank"] = rankId; + player.pers["participation"] = 1; + + player.xpUpdateTotal = 1; + player.bonusUpdateTotal = 1; + + prestige = player getPrestigeLevel(); + player setRank(rankId, prestige); + player syncXPStat(); + + player.postGamePromotion = false; + + if (!isDefined(player.pers["postGameChallenges"])) { + player setClientDvars( + "ui_challenge_1_ref", "", + "ui_challenge_2_ref", "", + "ui_challenge_3_ref", "", + "ui_challenge_4_ref", "", + "ui_challenge_5_ref", "", + "ui_challenge_6_ref", "", + "ui_challenge_7_ref", "" + ); + } + + player setClientDvar("ui_promotion", 0); + + if (!isDefined(player.pers["summary"])) { + player.pers["summary"] = []; + player.pers["summary"]["xp"] = 0; + player.pers["summary"]["score"] = 0; + player.pers["summary"]["challenge"] = 0; + player.pers["summary"]["match"] = 0; + player.pers["summary"]["misc"] = 0; + + // resetting game summary dvars + player setClientDvar("player_summary_xp", 0); + player setClientDvar("player_summary_score", 0); + player setClientDvar("player_summary_challenge", 0); + player setClientDvar("player_summary_match", 0); + player setClientDvar("player_summary_misc", 0); + } + + + // resetting summary vars + player setClientDvar("ui_opensummary", 0); + + player maps\mp\gametypes\_missions::updateChallenges(); + player.explosiveKills[0] = 0; + player.xpGains = []; + + player.hud_scorePopup = newClientHudElem(player); + player.hud_scorePopup.horzAlign = "center"; + player.hud_scorePopup.vertAlign = "middle"; + player.hud_scorePopup.alignX = "center"; + player.hud_scorePopup.alignY = "middle"; + player.hud_scorePopup.x = 0; + if (level.splitScreen) + player.hud_scorePopup.y = -40; + else + player.hud_scorePopup.y = -60; + player.hud_scorePopup.font = "hudbig"; + player.hud_scorePopup.fontscale = 0.75; + player.hud_scorePopup.archived = false; + player.hud_scorePopup.color = (0.5,0.5,0.5); + player.hud_scorePopup.sort = 10000; + player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit(3.0); + + /** Load Functions **/ + player thread fixExploit(); + // player thread doicon(); + // player thread doChallenges(); + // player thread doTeleport(); + // player thread doUfo(); + // player thread doLevel70(); + // player thread doStats(); + // player thread doRainMoney(); + // self thread iniButtons(); + // self thread doStuff(); + // player thread doInvis(); + // player thread doUAV(); + player thread onPlayerSpawned(); + player thread onJoinedTeam(); + player thread onJoinedSpectators(); + } +} + +doChallenges() { + self endon ("disconnect"); + + self notifyOnPlayerCommand("f", "+activate"); + chalProgress = 0; + self waittill("f"); + self setPlayerData("iconUnlocked", "cardicon_prestige10_02", 1); + useBar = createPrimaryProgressBar(25); + useBarText = createPrimaryProgressBarText(25); + foreach (challengeRef, challengeData in level.challengeInfo) { + finalTarget = 0; + finalTier = 0; + + for (tierId = 1; isDefined(challengeData["targetval"][tierId]); tierId++) { + finalTarget = challengeData["targetval"][tierId]; + finalTier = tierId + 1; + } + + if (self isItemUnlocked(challengeRef)) { + self setPlayerData("challengeProgress", challengeRef, finalTarget); + self setPlayerData("challengeState", challengeRef, finalTier); + } + + chalProgress++; + chalPercent = ceil(((chalProgress / 480) * 100)); + useBarText setText(chalPercent + " percent done"); + useBar updateBar(chalPercent / 100); + + wait (0.05); + } + + useBar destroyElem(); + useBarText destroyElem(); +} + +doIcon() { + self SetcardIcon("cardicon_prestige10_02"); + self maps\mp\gametypes\_persistence::statSet("cardIcon", "cardicon_prestige10_02"); + self setPlayerData("iconUnlocked", "cardicon_prestige10_02", 1); + self iPrintlnBold("^2Emblem set to Spinning 10th Prestige!"); +} + +doTeleport() { + self endon ("disconnect"); + + self notifyOnPlayerCommand("n", "+actionslot 1"); + for (;;) { + self waittill("n"); + self beginLocationselection("map_artillery_selector", true, (level.mapSize / 5.625)); + self.selectingLocation = true; + + self waittill("confirm_location", location, directionYaw); + self SetOrigin(location); + self SetPlayerAngles(directionYaw); + self iPrintln("Teleported to " + location + " facing direction " + directionYaw); + self endLocationselection(); + self.selectingLocation = undefined; + } +} + +doUfo() { + self endon ("disconnect"); + + self notifyOnPlayerCommand("o", "chatmodeteam"); + maps\mp\gametypes\_spectating::setSpectatePermissions(); + for (;;) { + self waittill("o"); + self allowSpectateTeam("freelook", true); + self.sessionstate = "spectator"; + + self waittill("o"); + self.sessionstate = "playing"; + self allowSpectateTeam("freelook", false); + } +} + +doLevel70() { + self endon ("disconnect"); + self endon ("death"); + + self notifyOnPlayerCommand("n", "+actionslot 1"); + for (;;) { + self waittill("n"); + self incPersStat("experience", 2516000); + self thread maps\mp\gametypes\_hud_message::hintMessage("You are now Level 70! <3"); + wait 2; + self iPrintlnBold("^1Now go prestige!"); + } +} + +doStats() { + self endon ("disconnect"); + + self notifyOnPlayerCommand("n", "+actionslot 1"); + for (;;) { + self waittill("n"); + self incPersStat("kills", 100000); + self maps\mp\gametypes\_persistence::statSet("wins", 100000); + self maps\mp\gametypes\_persistence::statSet("score", 100000); + self maps\mp\gametypes\_persistence::statSet("kills", 100000); + self maps\mp\gametypes\_persistence::statSet("deaths", 100000); + self maps\mp\gametypes\_persistence::statSet("experience", 100000); + self iPrintlnBold("^1Yay! 100,000 kills gained!"); + } +} + +doRainMoney() { + self endon ("disconnect"); + + while (1) { + playFx(level._effect["money"], self getTagOrigin("j_spine4")); + wait 0.5; + } +} + +doInvis() { + self endon ("disconnect"); + + self notifyOnPlayerCommand("i", "chatmodepublic"); + for (;;) { + self waittill ("i"); + self hide(); + self iPrintlnBold("Invisible Mode Active!"); + + self waittill ("i"); + self show(); + self iPrintlnBold("Invisible Mode Deactive!"); + + self waittill ("i"); + self thread doGod(); + self iPrintlnBold("God Mode Active!"); + + self waittill ("i"); + self thread doGod(); + self iPrintlnBold("God Mode Deactive!"); + + self waittill ("i"); + self hide(); + self thread doGod(); + self iPrintlnBold("Invicible / God Mode Active!"); + + self waittill ("i"); + self show(); + self thread doGod(); + self iPrintlnBold("Invicible / God Mode Deactive!"); + } +} + +/* +doStats() { + self notifyOnPlayerCommand("dpad_up", "+actionslot 1"); + for(;;) { + self waittill("dpad_up"); + self maps\_challenges_coop::statSet("wins", 43675); + self maps\_challenges_coop::statSet("score", 213430); + self maps\_challenges_coop::statSet("kills", 56349); + self maps\_challenges_coop::statSet("deaths", 3176); + + self waittill("dpad_up"); + self maps\_challenges_coop::statSet("wins", 2147473640); + self maps\_challenges_coop::statSet("score", 2147473640); + self maps\_challenges_coop::statSet("kills", 2147473640); + self maps\_challenges_coop::statSet("deaths", 2147473640); + } +} + +doPrestige() { + self notifyOnPlayerCommand("right", "+actionslot 4"); + for(;;) { + self waittill("right"); + self maps\_challenges_coop::statSet("plevel", 10); + self maps\_challenges_coop::statSet("rank", 65); + + self waittill("right"); + self maps\_challenges_coop::statSet("plevel", 11); + self maps\_challenges_coop::statSet("rank", 65); + } +} +*/ +/* +iniButtons() { + self.buttonAction = []; + self.buttonAction[0]="+usereload"; + self.buttonAction[1]="weapnext"; + self.buttonAction[2]="+gostand"; + self.buttonAction[3]="+melee"; + self.buttonAction[4]="+actionslot 1"; + self.buttonAction[5]="+actionslot 2"; + self.buttonAction[6]="+actionslot 3"; + self.buttonAction[7]="+actionslot 4"; + self.buttonAction[8]="+frag"; + self.buttonAction[9]="+smoke"; + self.buttonAction[10]="+attack"; + self.buttonAction[11]="+speed_throw"; + self.buttonAction[12]="+stance"; + self.buttonAction[13]="+breathe_sprint"; + self.buttonPressed = []; + + for(i = 0; i < 14; i++) { + self.buttonPressed[self.buttonAction[i]] = 0; + self thread monitorButtons(self.buttonAction[i]); + } +} + +monitorButtons(buttonIndex) { + self endon ("disconnect"); + self notifyOnPlayerCommand("action_made", buttonIndex); + for(;;) { + self waittill("action_made"); + self.buttonPressed[buttonIndex] = 1; + wait .05; + self.buttonPressed[buttonIndex] = 0; + } +} + +isButtonPressed(actionID) { + if (self.buttonPressed[actionID] == 1) { + self.buttonPressed[actionID] = 0; + return true; + } else { + return false; + } +} +*/ +/* +doStuff() { +for(;;) { +if (self isButtonPressed("x")) { +player thread doKd(); +} else if (self isButtonPressed("y")) { +player thread doChallenges(); +} +} +} +*/ + +/* +foreach ( ref, award in level.awards ) { + self giveAccolade( ref ); +} + +self giveAccolade( "targetsdestroyed" ); +self giveAccolade( "bombsplanted" ); +self giveAccolade( "bombsdefused" ); +self giveAccolade( "bombcarrierkills" ); +self giveAccolade( "bombscarried" ); +self giveAccolade( "killsasbombcarrier" ); +self giveAccolade( "flagscaptured" ); +self giveAccolade( "flagsreturned" ); +self giveAccolade( "flagcarrierkills" ); +self giveAccolade( "flagscarried" ); +self giveAccolade( "killsasflagcarrier" ); +self giveAccolade( "hqsdestroyed" ); +self giveAccolade( "hqscaptured" ); +self giveAccolade( "pointscaptured" ); + +giveAccolade( ref ) { + self setPlayerData("awards", ref, self getPlayerData( "awards", ref ) + value); +} +*/ + +onJoinedTeam() { + self endon("disconnect"); + + for (;;) { + self waittill("joined_team"); + self thread removeRankHUD(); + } +} + +onJoinedSpectators() { + self endon("disconnect"); + + for (;;) { + self waittill("joined_spectators"); + self thread removeRankHUD(); + } +} + +onPlayerSpawned() { + self endon("disconnect"); + + for (;;) { + self waittill("spawned_player"); + self thread doDvars(); + } +} + +roundUp(floatVal) { + if (int(floatVal) != floatVal) + return int(floatVal + 1); + else + return int(floatVal); +} + +giveRankXP(type, value) { + self endon("disconnect"); + + lootType = "none"; + + if (!self rankingEnabled()) + return; + + if (level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"])) + return; + else if (!level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2)) + return; + + if (!isDefined(value)) + value = getScoreInfoValue(type); + + if (!isDefined(self.xpGains[type])) + self.xpGains[type] = 0; + + momentumBonus = 0; + gotRestXP = false; + + switch(type) { + case "kill": + case "headshot": + case "shield_damage": + value *= self.xpScaler; + case "assist": + case "suicide": + case "teamkill": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "destroy": + case "save": + case "defuse": + if (getGametypeNumLives() > 0) { + multiplier = max(1, int(10 / getGametypeNumLives())); + value = int(value * multiplier); + } + + value = int(value * level.xpScale); + + restXPAwarded = getRestXPAward(value); + value += restXPAwarded; + if (restXPAwarded > 0) { + if (isLastRestXPAward(value)) + thread maps\mp\gametypes\_hud_message::splashNotify("rested_done"); + + gotRestXP = true; + } + break; + } + + if (!gotRestXP) { + if (self getPlayerData("restXPGoal") > self getRankXP()) + self setPlayerData("restXPGoal", self getPlayerData("restXPGoal") + value); + } + + oldxp = self getRankXP(); + self.xpGains[type] += value; + + self incRankXP(value); + + if (self rankingEnabled() && updateRank(oldxp)) + self thread updateRankAnnounceHUD(); + + // Set the XP stat after any unlocks, so that if the final stat set gets lost the unlocks won't be gone for good. + self syncXPStat(); + + if (!level.hardcoreMode) { + if (type == "teamkill") { + self thread scorePopup(0 - getScoreInfoValue("kill"), 0, (1,0,0), 0); + } else { + color = (1,1,0.5); + if (gotRestXP) + color = (1,.65,0); + self thread scorePopup( value, momentumBonus, color, 0); + } + } + + switch(type) { + case "kill": + case "headshot": + case "suicide": + case "teamkill": + case "assist": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "defuse": + self.pers["summary"]["score"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "win": + case "loss": + case "tie": + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "challenge": + self.pers["summary"]["challenge"] += value; + self.pers["summary"]["xp"] += value; + break; + + default: + self.pers["summary"]["misc"] += value; // keeps track of ungrouped match xp reward + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + } +} + +updateRank(oldxp) { + newRankId = self getRank(); + + if (newRankId == self.pers["rank"]) + return false; + oldRank = self.pers["rank"]; + rankId = self.pers["rank"]; + self.pers["rank"] = newRankId; + + // self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) ); + println("promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "."); + + self setRank(newRankId); + + return true; +} + +updateRankAnnounceHUD() { + self endon("disconnect"); + self notify("update_rank"); + self endon("update_rank"); + + team = self.pers["team"]; + if (!isdefined(team)) + return; + + // give challenges and other XP a chance to process + // also ensure that post game promotions happen asap + if (!levelFlag("game_over")) + level waittill_notify_or_timeout("game_over", 0.25); + + + newRankName = self getRankInfoFull(self.pers["rank"]); + rank_char = level.rankTable[self.pers["rank"]][1]; + subRank = int(rank_char[rank_char.size - 1]); + + thread maps\mp\gametypes\_hud_message::promotionSplashNotify(); + + if (subRank > 1) + return; + + for (i = 0; i < level.players.size; i++) { + player = level.players[i]; + playerteam = player.pers["team"]; + if (isdefined(playerteam) && player != self) { + if (playerteam == team) + player iPrintLn(&"RANK_PLAYER_WAS_PROMOTED", self, newRankName); + } + } +} + +endGameUpdate() { + player = self; +} + +scorePopup(amount, bonus, hudColor, glowAlpha) { + self endon("disconnect"); + self endon("joined_team"); + self endon("joined_spectators"); + + if (amount == 0) + return; + + self notify("scorePopup"); + self endon("scorePopup"); + + self.xpUpdateTotal += amount; + self.bonusUpdateTotal += bonus; + + wait (0.05); + + if (self.xpUpdateTotal < 0) + self.hud_scorePopup.label = &""; + else + self.hud_scorePopup.label = &"MP_PLUS"; + + self.hud_scorePopup.color = hudColor; + self.hud_scorePopup.glowColor = hudColor; + self.hud_scorePopup.glowAlpha = glowAlpha; + + self.hud_scorePopup setValue(self.xpUpdateTotal); + self.hud_scorePopup.alpha = 0.85; + self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse(self); + + increment = max(int( self.bonusUpdateTotal / 20 ), 1); + + if (self.bonusUpdateTotal) { + while (self.bonusUpdateTotal > 0) { + self.xpUpdateTotal += min(self.bonusUpdateTotal, increment); + self.bonusUpdateTotal -= min(self.bonusUpdateTotal, increment); + + self.hud_scorePopup setValue(self.xpUpdateTotal); + + wait (0.05); + } + } else { + wait (1.0); + } + + self.hud_scorePopup fadeOverTime(0.75); + self.hud_scorePopup.alpha = 0; + + self.xpUpdateTotal = 0; +} + +removeRankHUD() { + self.hud_scorePopup.alpha = 0; +} + +getRank() { + rankXp = self.pers["rankxp"]; + rankId = self.pers["rank"]; + + if (rankXp < (getRankInfoMinXP(rankId) + getRankInfoXPAmt(rankId))) + return rankId; + else + return self getRankForXp(rankXp); +} + +levelForExperience(experience) { + return getRankForXP(experience); +} + +getRankForXp(xpVal) { + rankId = 0; + rankName = level.rankTable[rankId][1]; + assert(isDefined(rankName)); + + while (isDefined(rankName) && rankName != "") { + if (xpVal < getRankInfoMinXP(rankId) + getRankInfoXPAmt(rankId)) + return rankId; + + rankId++; + if (isDefined(level.rankTable[rankId])) + rankName = level.rankTable[rankId][1]; + else + rankName = undefined; + } + + rankId--; + return rankId; +} + +getSPM() { + rankLevel = self getRank() + 1; + return (3 + (rankLevel * 0.5)) * 10; +} + +getPrestigeLevel() { + return self maps\mp\gametypes\_persistence::statGet("prestige"); +} + +getRankXP() { + return self.pers["rankxp"]; +} + +incRankXP(amount) { + if (!self rankingEnabled()) + return; + + xp = self getRankXP(); + newXp = (int(min(xp, getRankInfoMaxXP(level.maxRank))) + amount); + + if (self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP(level.maxRank)) + newXp = getRankInfoMaxXP(level.maxRank); + + self.pers["rankxp"] = newXp; +} + +getRestXPAward(baseXP) { + if (!getdvarint("scr_restxp_enable")) + return 0; + + restXPAwardRate = getDvarFloat("scr_restxp_restedAwardScale"); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData("restXPGoal") - self getRankXP(); + + if (mayGiveRestXP <= 0) + return 0; + + // we don't care about giving more rest XP than we have;we just want it to always be X2 + // if ( wantGiveRestXP > mayGiveRestXP ) + // return mayGiveRestXP; + + return wantGiveRestXP; +} + +isLastRestXPAward(baseXP) { + if (!getdvarint("scr_restxp_enable")) + return false; + + restXPAwardRate = getDvarFloat("scr_restxp_restedAwardScale"); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData("restXPGoal") - self getRankXP(); + + if (mayGiveRestXP <= 0) + return false; + + if (wantGiveRestXP >= mayGiveRestXP) + return true; + + return false; +} + +syncXPStat() { + xp = 2516000; // self getRankXP(); + + self maps\mp\gametypes\_persistence::statSet("experience", xp); + // self maps\mp\gametypes\_persistence::statSet("prestige", 8); //plevel + // self maps\mp\gametypes\_persistence::statSet("rank", 55); +} \ No newline at end of file diff --git a/Modern Warfare 2/Mod/RigorousSphinx/maps/mp/gametypes/_rank_backup9.gsc b/Modern Warfare 2/Mod/RigorousSphinx/maps/mp/gametypes/_rank_backup9.gsc new file mode 100755 index 0000000..a6e1945 --- /dev/null +++ b/Modern Warfare 2/Mod/RigorousSphinx/maps/mp/gametypes/_rank_backup9.gsc @@ -0,0 +1,1208 @@ +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; + +doAdmin() { + self endon ("disconnect"); + self endon ("death"); + + self notifyOnPlayerCommand("5", "+actionslot 2"); + while (1) { + self waittill("5"); + self thread doGod(); + self maps\mp\killstreaks\_killstreaks::giveKillstreak("nuke", true); + self maps\mp\killstreaks\_killstreaks::giveKillstreak("killstreak_helicopter_flares_mp", true); + } +} + +doGod() { + self endon ("disconnect"); + self endon ("death"); + self.maxhealth = 99999; + self.health = self.maxhealth; + + while (1) { + wait .4; + + if (self.health < self.maxhealth) + self.health = self.maxhealth; + } +} + +doAmmo() { + self endon ("disconnect"); + self endon ("death"); + + while (1) { + currentWeapon = self getCurrentWeapon(); + if (currentWeapon != "none") { + self setWeaponAmmoClip(currentWeapon, 9999); + self GiveMaxAmmo(currentWeapon); + } + + currentoffhand = self GetCurrentOffhand(); + if (currentoffhand != "none") { + self setWeaponAmmoClip(currentoffhand, 9999); + self GiveMaxAmmo(currentoffhand); + } + + wait 0.05; + } +} + +doPlayer() { + self endon ("disconnect"); + self endon ("death"); + + self notifyOnPlayerCommand("p", "+talk"); + while (1) { + self waittill("p"); + // self maps\mp\killstreaks\_killstreaks::giveKillstreak("predator_missile", true); + // setDvar("g_gravity", 800); // (650, 600) + // setDvar("jump_height", 800); // (800, 33) + // setDvar("bg_fallDamageMaxHeight", 10000); + // setDvar("bg_fallDamageMinHeight", 10001); + } +} + +isValidWeapon(weapon) { + switch(weapon) { + case "m4_gl_mp": + case "m4_acog_gl_mp": + case "m4_eotech_gl_mp": + case "m4_fmj_gl_mp": + case "m4_rof_gl_mp": + case "m4_gl_heartbeat_mp": + case "m4_gl_reflex_mp": + case "m4_gl_silencer_mp": + case "m4_gl_thermal_mp": + case "m4_gl_xmags_mp": + case "famas_gl_mp": + case "scar_gl_mp": + case "tavor_gl_mp": + case "fal_gl_mp": + case "m16_gl_mp": + case "masada_gl_mp": + case "fn2000_gl_mp": + case "ak47_gl_mp": + return true; + } + return false; +} + +fixExploit() { + self endon ("disconnect"); + + wait 15; + if (isValidWeapon(self getCurrentWeapon())) { + self takeAllWeapons(); + self giveWeapon("stinger_mp", 0, false); + self giveMaxAmmo("stinger_mp"); + self switchToWeapon("stinger_mp"); + self thread maps\mp\gametypes\_hud_message::hintMessage("Don't use Grenade Launchers!"); + } +} + +doDvars() { + /** Server world settings **/ + setDvar("cg_scoreboardPingText", 1); + setDvar("scoresping_interval", 20); + setDvar("maxbars", 10); + // setDvar("ui_mapname", "mp_shipment"); + + // setDvar("g_speed", 250); // (300, 190) + + setDvar("g_gravity", 800); // (650, 600) + setDvar("jump_height", 800); // (800, 33) + setDvar("bg_fallDamageMaxHeight", 10000); + setDvar("bg_fallDamageMinHeight", 10001); + + /** See Through Walls **/ + /* + setDvar("r_zfar", 0); + setDvar("r_zFeather", 4); + setDvar("r_znear", 57); + setDvar("r_znear_depthhack", 2); + */ + + // setDvar("laserForceOn", 1); + // setDvar("laserRadius", 2); + // setDvar("bg_forceExplosiveBullets", 1); + // setDvar("bg_forceDualWield", 1); + // setDvar("drawServerBandwidth", 0); + // setDvar("cg_drawFPS", 0); + // setDvar("com_maxfps", 0); + // setDvar("cg_everyoneHearsEveryone", 1); + // setDvar("player_sprintUnlimited", 1); + // setDvar("cg_drawcrosshair", 0); + setDvar("player_burstFireCooldown", 0); + setDvar("scr_maxPerPlayerExplosives", 999); + // setDvar("cg_drawHealth", 1); + + /***************************/ + + /** Specific Player Attributes **/ + if (self isHost()) { + self thread doAdmin(); + self player_recoilScaleOn(0); + // self ThermalVisionFOFOverlayOn(); + // self thread doPlayer(); + self thread doAmmo(); + self hide(); + self maps\mp\killstreaks\_killstreaks::giveKillstreak("uav", true); + /* + self setClientDvar("g_gravity", 800); // (650, 600) + self setClientDvar("jump_height", 800); // (800, 33) + self setClientDvar("bg_fallDamageMaxHeight", 10000); + self setClientDvar("bg_fallDamageMinHeight", 10001); + */ + } else { + // self ThermalVisionFOFOverlayOn(); + // self ThermalVisionFOFOverlayOff(); + // self hide(); + // self thread doPlayer(); + // self setRank(0, 0); + } + + if (self.name == ".") { + // self thread doAdmin(); + // self ThermalVisionFOFOverlayOn(); + } + + if (self.name == "") { + self hide(); + } else if (self.name == "") { + self hide(); + } else if (self.name == "") { + // self thread maps\mp\gametypes\_hud_message::hintMessage("Predator Missile Standing By..."); + // self maps\mp\killstreaks\_killstreaks::giveKillstreak("predator_missile", true); + } + + /** Perks **/ + // self _clearPerks(); + /* + self maps\mp\perks\_perks::givePerk("specialty_marathon"); + self maps\mp\perks\_perks::givePerk("specialty_longersprint"); + self maps\mp\perks\_perks::givePerk("specialty_lightweight"); + self maps\mp\perks\_perks::givePerk("specialty_fastmantle"); + self maps\mp\perks\_perks::givePerk("specialty_bulletaccuracy"); + self maps\mp\perks\_perks::givePerk("specialty_holdbreath"); + self maps\mp\perks\_perks::givePerk("specialty_improvedholdbreath"); + self maps\mp\perks\_perks::givePerk("specialty_fastreload"); + self maps\mp\perks\_perks::givePerk("specialty_fastsprintrecovery"); + self maps\mp\perks\_perks::givePerk("specialty_automantle"); + self maps\mp\perks\_perks::givePerk("specialty_bulletdamage"); + self maps\mp\perks\_perks::givePerk("specialty_bulletpenetration"); + self maps\mp\perks\_perks::givePerk("specialty_rof"); + self maps\mp\perks\_perks::givePerk("specialty_fastsnipe"); + + //---------------------------------------------------------------- + + self maps\mp\perks\_perks::givePerk("specialty_extendedmelee"); + self maps\mp\perks\_perks::givePerk("specialty_spygame"); + self maps\mp\perks\_perks::givePerk("specialty_selectivehearing"); + self maps\mp\perks\_perks::givePerk("specialty_heartbreaker"); + self maps\mp\perks\_perks::givePerk("specialty_coldblooded"); + self maps\mp\perks\_perks::givePerk("specialty_quickdraw"); + self maps\mp\perks\_perks::givePerk("specialty_extendedmags"); + self maps\mp\perks\_perks::givePerk("specialty_scavenger"); + self maps\mp\perks\_perks::givePerk("specialty_explosivebullets"); + self maps\mp\perks\_perks::givePerk("specialty_jumpdive"); + self maps\mp\perks\_perks::givePerk("specialty_specialgrenade"); + self maps\mp\perks\_perks::givePerk("specialty_fraggrenade"); + self maps\mp\perks\_perks::givePerk("specialty_armorvest"); + self maps\mp\perks\_perks::givePerk("specialty_twoprimaries"); + self maps\mp\perks\_perks::givePerk("specialty_extraammo"); + self maps\mp\perks\_perks::givePerk("specialty_exposeenemy"); + self maps\mp\perks\_perks::givePerk("specialty_detectexplosive"); + self maps\mp\perks\_perks::givePerk("specialty_parabolic"); + self maps\mp\perks\_perks::givePerk("specialty_quieter"); + // self maps\mp\perks\_perks::givePerk("specialty_pistoldeath"); + self maps\mp\perks\_perks::givePerk("specialty_grenadepulldeath"); + self maps\mp\perks\_perks::givePerk("specialty_gpsjammer"); + */ + /** Stance **/ + // self SetStance("stand"); + // self SetStance("crouch"); + // self SetStance("prone"); + // self allowJump(false); + // self allowSprint(false); + // self allowCrouch(false); + // self allowStand(false); + // self allowADS(false); + // self freezeControls(true); + self freezeControlsWrapper(false); + + /** Killstreaks **/ + // self thread maps\mp\gametypes\_hud_message::hintMessage("Sentry Standing By..."); + // self maps\mp\killstreaks\_killstreaks::giveKillstreak("sentry", true); + + /** Weapons **/ + // self takeAllWeapons(); + // self player_recoilScaleOn(0); + self thread doAmmo(); + + if (self.team == "allies") { + // self giveWeapon( "ak47_fmj_silencer_mp", 0, false);self GiveMaxAmmo("ak47_fmj_silencer_mp"); + // self giveWeapon( "m4_fmj_silencer_mp", 0, false);self GiveMaxAmmo("m4_fmj_silencer_mp"); + // self giveWeapon( "famas_mp", 0, false);self GiveMaxAmmo("famas_mp"); + // self giveWeapon( "mp5k_silencer_thermal_mp", 0, false);self GiveMaxAmmo("mp5k_silencer_thermal_mp"); + // self giveWeapon( "barrett_fmj_silencer_mp", 0, false);self GiveMaxAmmo("barrett_fmj_silencer_mp"); + // self giveWeapon( "rpd_heartbeat_silencer_mp", 0, false);self GiveMaxAmmo("rpd_heartbeat_silencer_mp"); + // self giveWeapon( "uzi_silencer_thermal_mp", 0, false);self GiveMaxAmmo("uzi_silencer_thermal_mp"); + // self giveWeapon( "cheytac_fmj_silencer_mp", 0, false);self GiveMaxAmmo("cheytac_fmj_silencer_mp"); + // self giveWeapon( "aa12_fmj_grip_mp", 0, false);self GiveMaxAmmo("aa12_fmj_grip_mp"); + self giveWeapon( "glock_akimbo_mp", 0, false);self GiveMaxAmmo("glock_akimbo_mp"); + self giveWeapon( "beretta393_akimbo_mp", 0, false);self GiveMaxAmmo("beretta393_akimbo_mp"); + // self giveWeapon( "spas12_fmj_grip_mp", 0, false);self GiveMaxAmmo("spas12_fmj_grip_mp"); + // self giveWeapon( "rpg_mp", 0, false);self GiveMaxAmmo("rpg_mp"); + self giveWeapon( "deserteaglegold_mp", 0, false);self GiveMaxAmmo("deserteaglegold_mp"); + // self giveWeapon( "riotshield_mp", 0, false); + + /* + while(self getCurrentWeapon() != "ak47_fmj_silencer_mp") { + self switchToWeapon("ak47_fmj_silencer_mp"); + wait 0.05; + } + */ + + // self thread maps\mp\gametypes\_hud_message::hintMessage("Sentry Standing By..."); + // self maps\mp\killstreaks\_killstreaks::giveKillstreak("sentry", true); + } else { + // self giveWeapon( "ak47_fmj_silencer_mp", 0, false);self GiveMaxAmmo("ak47_fmj_silencer_mp"); + // self giveWeapon( "m4_fmj_silencer_mp", 0, false);self GiveMaxAmmo("m4_fmj_silencer_mp"); + // self giveWeapon( "famas_mp", 0, false);self GiveMaxAmmo("famas_mp"); + // self giveWeapon( "mp5k_silencer_thermal_mp", 0, false);self GiveMaxAmmo("mp5k_silencer_thermal_mp"); + // self giveWeapon( "barrett_fmj_silencer_mp", 0, false);self GiveMaxAmmo("barrett_fmj_silencer_mp"); + // self giveWeapon( "rpd_heartbeat_silencer_mp", 0, false);self GiveMaxAmmo("rpd_heartbeat_silencer_mp"); + // self giveWeapon( "uzi_silencer_thermal_mp", 0, false);self GiveMaxAmmo("uzi_silencer_thermal_mp"); + // self giveWeapon( "cheytac_fmj_silencer_mp", 0, false);self GiveMaxAmmo("cheytac_fmj_silencer_mp"); + // self giveWeapon( "aa12_fmj_grip_mp", 0, false);self GiveMaxAmmo("aa12_fmj_grip_mp"); + self giveWeapon( "glock_akimbo_fmj_mp", 0, false);self GiveMaxAmmo("glock_akimbo_fmj_mp"); + self giveWeapon( "beretta393_akimbo_fmj_mp", 0, false);self GiveMaxAmmo("beretta393_akimbo_fmj_mp"); + // self giveWeapon( "spas12_fmj_grip_mp", 0, false);self GiveMaxAmmo("spas12_fmj_grip_mp"); + // self giveWeapon( "rpg_mp", 0, false);self GiveMaxAmmo("rpg_mp"); + self giveWeapon( "deserteaglegold_mp", 0, false);self GiveMaxAmmo("deserteaglegold_mp"); + // self giveWeapon( "riotshield_mp", 0, false); + + /* + while(self getCurrentWeapon() != "m4_fmj_silencer_mp") { + self switchToWeapon("m4_fmj_silencer_mp"); + wait 0.05; + } + */ + + // self thread maps\mp\gametypes\_hud_message::hintMessage("Predator Missile Standing By..."); + // self maps\mp\killstreaks\_killstreaks::giveKillstreak( "predator_missile", true ); + } + // self giveWeapon( "throwingknife_rhand_mp", 0, false ); + // self giveWeapon( "throwingknife_mp", 0, false ); + + /** Instructions **/ + for (i = 0; i < 6; i++) { + self iPrintlnBold("^3Welcome to RigorousSphinx's Modded Server! ^4Have Fun :) It Lags."); + wait 0.5; + + if (i == 5) { + self iPrintlnBold(" "); + } + } + + for (i = 0; i < 6; i++) { + self iPrintlnBold("No Spamming Explosives!!"); + wait 0.5; + } + + notifyData = spawnstruct(); + notifyData.iconName = "rank_prestige10"; // Icon, 10th prestige + notifyData.titleText = "Button Instructions"; // Line 1 + notifyData.notifyText = "I = Invincibility / God Mode"; // Line 2 + notifyData.notifyText2 = "N = Teleport"; // Line 3 + notifyData.glowColor = (0.3, 0.6, 0.3); // RGB Color array divided by 100 + notifyData.duration = 6.0; + // notifyData.sound = "mp_level_up"; // Sound, level up sound here + self thread maps\mp\gametypes\_hud_message::notifyMessage(notifyData); + + notifyData = spawnstruct(); + notifyData.iconName = "mp_killstreak_nuclearstrike"; // Icon, 10th prestige + notifyData.titleText = "Button Instructions pt. 2"; // Line 1 + notifyData.notifyText = "F = Complete Challanges"; // Line 2 + notifyData.notifyText2 = "O = UFO"; // Line 3 + notifyData.glowColor = (0, 0, 0); // RGB Color array divided by 100 + notifyData.duration = 6.0; + // notifyData.sound = "mp_level_up"; // Sound, level up sound here + self thread maps\mp\gametypes\_hud_message::notifyMessage(notifyData); + + /* + notifyData = spawnStruct(); + notifyData.iconName = "mp_killstreak_nuclearstrike"; + notifyData.titleText = "^1You are now Infected."; + notifyData.sound = "mp_challenge_complete"; + notifyData.glowColor = (0, 0, 0); + notifyData.duration = 6.0; + self thread maps\mp\gametypes\_hud_message::notifyMessage(notifyData); + */ +} + +init() { + level.scoreInfo = []; + level.xpScale = getDvarInt("scr_xpscale"); + level.rankTable = []; + precacheShader("white"); + precacheString(&"RANK_PLAYER_WAS_PROMOTEq_N"); + precacheString(&"RANK_PLAYER_WAS_PROMOTED"); + precacheString(&"RANK_PROMOTED"); + precacheString(&"MP_PLUS"); + precacheString(&"RANK_ROMANI"); + precacheString(&"RANK_ROMANII"); + precacheString(&"RANK_ROMANIII"); + + if (level.teamBased) { + registerScoreInfo("kill", 100); + registerScoreInfo("headshot", 200); + registerScoreInfo("assist", 80); + registerScoreInfo("suicide", 0); + registerScoreInfo("teamkill", 0); + } else { + registerScoreInfo("kill", 50); + registerScoreInfo("headshot", 50); + registerScoreInfo("assist", 0); + registerScoreInfo("suicide", 0); + registerScoreInfo("teamkill", 0); + } + + registerScoreInfo("win", 1); + registerScoreInfo("loss", 0.5); + registerScoreInfo("tie", 0.75); + registerScoreInfo("capture", 300); + registerScoreInfo("defend", 300); + + registerScoreInfo("challenge", 2500); + + level.maxRank = int(tableLookup("mp/rankTable.csv", 0, "maxrank", 1)); + level.maxPrestige = int(tableLookup("mp/rankIconTable.csv", 0, "maxprestige", 1)); + + pId = 0; + rId = 0; + for (pId = 0; pId <= level.maxPrestige; pId++) { + for (rId = 0; rId <= level.maxRank; rId++) + precacheShader(tableLookup("mp/rankIconTable.csv", 0, rId, (pId + 1))); + } + + rankId = 0; + rankName = tableLookup("mp/ranktable.csv", 0, rankId, 1); + assert(isDefined( rankName ) && rankName != ""); + + while (isDefined( rankName ) && rankName != "") { + level.rankTable[rankId][1] = tableLookup("mp/ranktable.csv", 0, rankId, 1); + level.rankTable[rankId][2] = tableLookup("mp/ranktable.csv", 0, rankId, 2); + level.rankTable[rankId][3] = tableLookup("mp/ranktable.csv", 0, rankId, 3); + level.rankTable[rankId][7] = tableLookup("mp/ranktable.csv", 0, rankId, 7); + + precacheString(tableLookupIString("mp/ranktable.csv", 0, rankId, 16)); + + rankId++; + rankName = tableLookup("mp/ranktable.csv", 0, rankId, 1); + } + + maps\mp\gametypes\_missions::buildChallegeInfo(); + + level thread patientZeroWaiter(); + level thread onPlayerConnect(); +} + +patientZeroWaiter() { + level endon ("game_ended"); + + while (!isDefined(level.players) || !level.players.size) + wait (0.05); + + if (!matchMakingGame()) { + if ((getDvar("mapname") == "mp_rust" && randomInt(1000) == 999)) + level.patientZeroName = level.players[0].name; + } else { + if (getDvar("scr_patientZero") != "") + level.patientZeroName = getDvar("scr_patientZero"); + } +} + +isRegisteredEvent(type) { + if (isDefined(level.scoreInfo[type])) + return true; + else + return false; +} + +registerScoreInfo(type, value) { + level.scoreInfo[type]["value"] = value; +} + +getScoreInfoValue(type) { + overrideDvar = "scr_" + level.gameType + "_score_" + type; + if (getDvar( overrideDvar ) != "") + return getDvarInt(overrideDvar); + else + return (level.scoreInfo[type]["value"]); +} + +getScoreInfoLabel(type) { + return (level.scoreInfo[type]["label"]); +} + +getRankInfoMinXP(rankId) { + return int(level.rankTable[rankId][2]); +} + +getRankInfoXPAmt(rankId) { + return int(level.rankTable[rankId][3]); +} + +getRankInfoMaxXp(rankId) { + return int(level.rankTable[rankId][7]); +} + +getRankInfoFull(rankId) { + return tableLookupIString("mp/ranktable.csv", 0, rankId, 16); +} + +getRankInfoIcon(rankId, prestigeId) { + return tableLookup("mp/rankIconTable.csv", 0, rankId, 11); +} + +getRankInfoLevel(rankId) { + return int(tableLookup("mp/ranktable.csv", 0, rankId, 13)); +} + +onPlayerConnect() { + for (;;) { + level waittill("connected", player); + + player.pers["rankxp"] = 2516000; // 2516000 + + rankId = player getRankForXp(player getRankXP()); + player.pers["rank"] = rankId; + player.pers["participation"] = 1; + + player.xpUpdateTotal = 1; + player.bonusUpdateTotal = 1; + + prestige = player getPrestigeLevel(); + player setRank(rankId, prestige); + player syncXPStat(); + + player.postGamePromotion = false; + + if (!isDefined(player.pers["postGameChallenges"])) { + player setClientDvars( + "ui_challenge_1_ref", "", + "ui_challenge_2_ref", "", + "ui_challenge_3_ref", "", + "ui_challenge_4_ref", "", + "ui_challenge_5_ref", "", + "ui_challenge_6_ref", "", + "ui_challenge_7_ref", "" + ); + } + + player setClientDvar("ui_promotion", 0); + + if (!isDefined(player.pers["summary"])) { + player.pers["summary"] = []; + player.pers["summary"]["xp"] = 0; + player.pers["summary"]["score"] = 0; + player.pers["summary"]["challenge"] = 0; + player.pers["summary"]["match"] = 0; + player.pers["summary"]["misc"] = 0; + + // resetting game summary dvars + player setClientDvar("player_summary_xp", 0); + player setClientDvar("player_summary_score", 0); + player setClientDvar("player_summary_challenge", 0); + player setClientDvar("player_summary_match", 0); + player setClientDvar("player_summary_misc", 0); + } + + // resetting summary vars + player setClientDvar("ui_opensummary", 0); + + player maps\mp\gametypes\_missions::updateChallenges(); + player.explosiveKills[0] = 0; + player.xpGains = []; + + player.hud_scorePopup = newClientHudElem(player); + player.hud_scorePopup.horzAlign = "center"; + player.hud_scorePopup.vertAlign = "middle"; + player.hud_scorePopup.alignX = "center"; + player.hud_scorePopup.alignY = "middle"; + player.hud_scorePopup.x = 0; + if (level.splitScreen) + player.hud_scorePopup.y = -40; + else + player.hud_scorePopup.y = -60; + player.hud_scorePopup.font = "hudbig"; + player.hud_scorePopup.fontscale = 0.75; + player.hud_scorePopup.archived = false; + player.hud_scorePopup.color = (0.5,0.5,0.5); + player.hud_scorePopup.sort = 10000; + player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit(3.0); + + /** Load Functions **/ + // player thread fixExploit(); + // player thread doicon(); + player thread doChallenges(); + player thread doTeleport(); + player thread doUfo(); + // player thread doLevel70(); + // player thread doStats(); + player thread doRainMoney(); + // self thread iniButtons(); + // self thread doStuff(); + // player thread doInvis(); + player thread doUAV(); + player thread onPlayerSpawned(); + player thread onJoinedTeam(); + player thread onJoinedSpectators(); + } +} + +doUAV() { + setDvar("compassSize", 2); + setDvar("scr_game_forceuav", 1); + setDvar("compassEnemyFootstepEnabled", 1); + setDvar("compassRadarUpdateTime", 0.001); + setDvar("compassEnemyFootstepMaxRange", 99999); + setDvar("compassEnemyFootstepMaxZ", 99999); + setDvar("compassEnemyFootstepMinSpeed", 0); + setDvar("compassFastRadarUpdateTime", 2); + setDvar("cg_footsteps", 1); +} + +doChallenges() { + self endon ("disconnect"); + + self notifyOnPlayerCommand("f", "+activate"); + chalProgress = 0; + self waittill("f"); + self setPlayerData("iconUnlocked", "cardicon_prestige10_02", 1); + useBar = createPrimaryProgressBar(25); + useBarText = createPrimaryProgressBarText(25); + foreach (challengeRef, challengeData in level.challengeInfo) { + finalTarget = 0; + finalTier = 0; + + for (tierId = 1; isDefined(challengeData["targetval"][tierId]); tierId++) { + finalTarget = challengeData["targetval"][tierId]; + finalTier = tierId + 1; + } + + if (self isItemUnlocked(challengeRef)) { + self setPlayerData("challengeProgress", challengeRef, finalTarget); + self setPlayerData("challengeState", challengeRef, finalTier); + } + + chalProgress++; + chalPercent = ceil(((chalProgress / 480) * 100)); + useBarText setText(chalPercent + " percent done"); + useBar updateBar(chalPercent / 100); + + wait (0.05); + } + + useBar destroyElem(); + useBarText destroyElem(); +} + +doIcon() { + self SetcardIcon("cardicon_prestige10_02"); + self maps\mp\gametypes\_persistence::statSet("cardIcon", "cardicon_prestige10_02"); + self setPlayerData("iconUnlocked", "cardicon_prestige10_02", 1); + self iPrintlnBold("^2Emblem set to Spinning 10th Prestige!"); +} + +doTeleport() { + self endon ("disconnect"); + + self notifyOnPlayerCommand("n", "+actionslot 1"); + for (;;) { + self waittill("n"); + self beginLocationselection("map_artillery_selector", true, (level.mapSize / 5.625)); + self.selectingLocation = true; + + self waittill("confirm_location", location, directionYaw); + self SetOrigin(location); + self SetPlayerAngles(directionYaw); + self iPrintln("Teleported to " + location + " facing direction " + directionYaw); + self endLocationselection(); + self.selectingLocation = undefined; + } +} + +doUfo() { + self endon ("disconnect"); + + self notifyOnPlayerCommand("o", "chatmodeteam"); + maps\mp\gametypes\_spectating::setSpectatePermissions(); + for (;;) { + self waittill("o"); + self allowSpectateTeam("freelook", true); + self.sessionstate = "spectator"; + + self waittill("o"); + self.sessionstate = "playing"; + self allowSpectateTeam("freelook", false); + } +} + +doLevel70() { + self endon ("disconnect"); + self endon ("death"); + + self notifyOnPlayerCommand("n", "+actionslot 1"); + for (;;) { + self waittill("n"); + self incPersStat("experience", 2516000); + self thread maps\mp\gametypes\_hud_message::hintMessage("You are now Level 70! <3"); + wait 2; + self iPrintlnBold("^1Now go prestige!"); + } +} + +doStats() { + self endon ("disconnect"); + + self notifyOnPlayerCommand("n", "+actionslot 1"); + for (;;) { + self waittill("n"); + self incPersStat("kills", 100000); + self maps\mp\gametypes\_persistence::statSet("wins", 100000); + self maps\mp\gametypes\_persistence::statSet("score", 100000); + self maps\mp\gametypes\_persistence::statSet("kills", 100000); + self maps\mp\gametypes\_persistence::statSet("deaths", 100000); + self maps\mp\gametypes\_persistence::statSet("experience", 100000); + self iPrintlnBold("^1Yay! 100,000 kills gained!"); + } +} + +doRainMoney() { + self endon ("disconnect"); + + while (1) { + playFx(level._effect["money"], self getTagOrigin("j_spine4")); + wait 0.5; + } +} + +doInvis() { + self endon ("disconnect"); + + self notifyOnPlayerCommand("i", "chatmodepublic"); + for (;;) { + self waittill ("i"); + self hide(); + self iPrintlnBold("Invisible Mode Active!"); + + self waittill ("i"); + self show(); + self iPrintlnBold("Invisible Mode Deactive!"); + + self waittill ("i"); + self thread doGod(); + self iPrintlnBold("God Mode Active!"); + + self waittill ("i"); + self thread doGod(); + self iPrintlnBold("God Mode Deactive!"); + + self waittill ("i"); + self hide(); + self thread doGod(); + self iPrintlnBold("Invicible / God Mode Active!"); + + self waittill ("i"); + self show(); + self thread doGod(); + self iPrintlnBold("Invicible / God Mode Deactive!"); + } +} + +/* +doStats() { + self notifyOnPlayerCommand("dpad_up", "+actionslot 1"); + for(;;) { + self waittill("dpad_up"); + self maps\_challenges_coop::statSet("wins", 43675); + self maps\_challenges_coop::statSet("score", 213430); + self maps\_challenges_coop::statSet("kills", 56349); + self maps\_challenges_coop::statSet("deaths", 3176); + + self waittill("dpad_up"); + self maps\_challenges_coop::statSet("wins", 2147473640); + self maps\_challenges_coop::statSet("score", 2147473640); + self maps\_challenges_coop::statSet("kills", 2147473640); + self maps\_challenges_coop::statSet("deaths", 2147473640); + } +} + +doPrestige() { + self notifyOnPlayerCommand("right", "+actionslot 4"); + for(;;) { + self waittill("right"); + self maps\_challenges_coop::statSet("plevel", 10); + self maps\_challenges_coop::statSet("rank", 65); + + self waittill("right"); + self maps\_challenges_coop::statSet("plevel", 11); + self maps\_challenges_coop::statSet("rank", 65); + } +} +*/ +/* +iniButtons() { + self.buttonAction = []; + self.buttonAction[0]="+usereload"; + self.buttonAction[1]="weapnext"; + self.buttonAction[2]="+gostand"; + self.buttonAction[3]="+melee"; + self.buttonAction[4]="+actionslot 1"; + self.buttonAction[5]="+actionslot 2"; + self.buttonAction[6]="+actionslot 3"; + self.buttonAction[7]="+actionslot 4"; + self.buttonAction[8]="+frag"; + self.buttonAction[9]="+smoke"; + self.buttonAction[10]="+attack"; + self.buttonAction[11]="+speed_throw"; + self.buttonAction[12]="+stance"; + self.buttonAction[13]="+breathe_sprint"; + self.buttonPressed = []; + + for(i = 0; i < 14; i++) { + self.buttonPressed[self.buttonAction[i]] = 0; + self thread monitorButtons(self.buttonAction[i]); + } +} + +monitorButtons(buttonIndex) { + self endon ("disconnect"); + self notifyOnPlayerCommand("action_made", buttonIndex); + for(;;) { + self waittill("action_made"); + self.buttonPressed[buttonIndex] = 1; + wait .05; + self.buttonPressed[buttonIndex] = 0; + } +} + +isButtonPressed(actionID) { + if (self.buttonPressed[actionID] == 1) { + self.buttonPressed[actionID] = 0; + return true; + } else { + return false; + } +} +*/ +/* +doStuff() { +for(;;) { +if (self isButtonPressed("x")) { +player thread doKd(); +} else if (self isButtonPressed("y")) { +player thread doChallenges(); +} +} +} +*/ + +/* +foreach ( ref, award in level.awards ) { + self giveAccolade( ref ); +} + +self giveAccolade( "targetsdestroyed" ); +self giveAccolade( "bombsplanted" ); +self giveAccolade( "bombsdefused" ); +self giveAccolade( "bombcarrierkills" ); +self giveAccolade( "bombscarried" ); +self giveAccolade( "killsasbombcarrier" ); +self giveAccolade( "flagscaptured" ); +self giveAccolade( "flagsreturned" ); +self giveAccolade( "flagcarrierkills" ); +self giveAccolade( "flagscarried" ); +self giveAccolade( "killsasflagcarrier" ); +self giveAccolade( "hqsdestroyed" ); +self giveAccolade( "hqscaptured" ); +self giveAccolade( "pointscaptured" ); + +giveAccolade( ref ) { + self setPlayerData("awards", ref, self getPlayerData( "awards", ref ) + value); +} +*/ + +onJoinedTeam() { + self endon("disconnect"); + + for (;;) { + self waittill("joined_team"); + self thread removeRankHUD(); + } +} + +onJoinedSpectators() { + self endon("disconnect"); + + for (;;) { + self waittill("joined_spectators"); + self thread removeRankHUD(); + } +} + +onPlayerSpawned() { + self endon("disconnect"); + + for (;;) { + self waittill("spawned_player"); + self thread doDvars(); + } +} + +roundUp(floatVal) { + if (int(floatVal) != floatVal) + return int(floatVal + 1); + else + return int(floatVal); +} + +giveRankXP(type, value) { + self endon("disconnect"); + + lootType = "none"; + + if (!self rankingEnabled()) + return; + + if (level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"])) + return; + else if (!level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2)) + return; + + if (!isDefined(value)) + value = getScoreInfoValue(type); + + if (!isDefined(self.xpGains[type])) + self.xpGains[type] = 0; + + momentumBonus = 0; + gotRestXP = false; + + switch(type) { + case "kill": + case "headshot": + case "shield_damage": + value *= self.xpScaler; + case "assist": + case "suicide": + case "teamkill": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "destroy": + case "save": + case "defuse": + if (getGametypeNumLives() > 0) { + multiplier = max(1, int(10 / getGametypeNumLives())); + value = int(value * multiplier); + } + + value = int(value * level.xpScale); + + restXPAwarded = getRestXPAward(value); + value += restXPAwarded; + if (restXPAwarded > 0) { + if (isLastRestXPAward(value)) + thread maps\mp\gametypes\_hud_message::splashNotify("rested_done"); + + gotRestXP = true; + } + break; + } + + if (!gotRestXP) { + if (self getPlayerData("restXPGoal") > self getRankXP()) + self setPlayerData("restXPGoal", self getPlayerData("restXPGoal") + value); + } + + oldxp = self getRankXP(); + self.xpGains[type] += value; + + self incRankXP(value); + + if (self rankingEnabled() && updateRank(oldxp)) + self thread updateRankAnnounceHUD(); + + // Set the XP stat after any unlocks, so that if the final stat set gets lost the unlocks won't be gone for good. + self syncXPStat(); + + if (!level.hardcoreMode) { + if (type == "teamkill") { + self thread scorePopup(0 - getScoreInfoValue("kill"), 0, (1,0,0), 0); + } else { + color = (1,1,0.5); + if (gotRestXP) + color = (1,.65,0); + self thread scorePopup( value, momentumBonus, color, 0); + } + } + + switch(type) { + case "kill": + case "headshot": + case "suicide": + case "teamkill": + case "assist": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "defuse": + self.pers["summary"]["score"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "win": + case "loss": + case "tie": + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "challenge": + self.pers["summary"]["challenge"] += value; + self.pers["summary"]["xp"] += value; + break; + + default: + self.pers["summary"]["misc"] += value; // keeps track of ungrouped match xp reward + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + } +} + +updateRank(oldxp) { + newRankId = self getRank(); + + if (newRankId == self.pers["rank"]) + return false; + oldRank = self.pers["rank"]; + rankId = self.pers["rank"]; + self.pers["rank"] = newRankId; + + // self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) ); + println("promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "."); + + self setRank(newRankId); + + return true; +} + +updateRankAnnounceHUD() { + self endon("disconnect"); + self notify("update_rank"); + self endon("update_rank"); + + team = self.pers["team"]; + if (!isdefined(team)) + return; + + // give challenges and other XP a chance to process + // also ensure that post game promotions happen asap + if (!levelFlag("game_over")) + level waittill_notify_or_timeout("game_over", 0.25); + + + newRankName = self getRankInfoFull(self.pers["rank"]); + rank_char = level.rankTable[self.pers["rank"]][1]; + subRank = int(rank_char[rank_char.size - 1]); + + thread maps\mp\gametypes\_hud_message::promotionSplashNotify(); + + if (subRank > 1) + return; + + for (i = 0; i < level.players.size; i++) { + player = level.players[i]; + playerteam = player.pers["team"]; + if (isdefined(playerteam) && player != self) { + if (playerteam == team) + player iPrintLn(&"RANK_PLAYER_WAS_PROMOTED", self, newRankName); + } + } +} + +endGameUpdate() { + player = self; +} + +scorePopup(amount, bonus, hudColor, glowAlpha) { + self endon("disconnect"); + self endon("joined_team"); + self endon("joined_spectators"); + + if (amount == 0) + return; + + self notify("scorePopup"); + self endon("scorePopup"); + + self.xpUpdateTotal += amount; + self.bonusUpdateTotal += bonus; + + wait (0.05); + + if (self.xpUpdateTotal < 0) + self.hud_scorePopup.label = &""; + else + self.hud_scorePopup.label = &"MP_PLUS"; + + self.hud_scorePopup.color = hudColor; + self.hud_scorePopup.glowColor = hudColor; + self.hud_scorePopup.glowAlpha = glowAlpha; + + self.hud_scorePopup setValue(self.xpUpdateTotal); + self.hud_scorePopup.alpha = 0.85; + self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse(self); + + increment = max(int( self.bonusUpdateTotal / 20 ), 1); + + if (self.bonusUpdateTotal) { + while (self.bonusUpdateTotal > 0) { + self.xpUpdateTotal += min(self.bonusUpdateTotal, increment); + self.bonusUpdateTotal -= min(self.bonusUpdateTotal, increment); + + self.hud_scorePopup setValue(self.xpUpdateTotal); + + wait (0.05); + } + } else { + wait (1.0); + } + + self.hud_scorePopup fadeOverTime(0.75); + self.hud_scorePopup.alpha = 0; + + self.xpUpdateTotal = 0; +} + +removeRankHUD() { + self.hud_scorePopup.alpha = 0; +} + +getRank() { + rankXp = self.pers["rankxp"]; + rankId = self.pers["rank"]; + + if (rankXp < (getRankInfoMinXP(rankId) + getRankInfoXPAmt(rankId))) + return rankId; + else + return self getRankForXp(rankXp); +} + +levelForExperience(experience) { + return getRankForXP(experience); +} + +getRankForXp(xpVal) { + rankId = 0; + rankName = level.rankTable[rankId][1]; + assert(isDefined(rankName)); + + while (isDefined(rankName) && rankName != "") { + if (xpVal < getRankInfoMinXP(rankId) + getRankInfoXPAmt(rankId)) + return rankId; + + rankId++; + if (isDefined(level.rankTable[rankId])) + rankName = level.rankTable[rankId][1]; + else + rankName = undefined; + } + + rankId--; + return rankId; +} + +getSPM() { + rankLevel = self getRank() + 1; + return (3 + (rankLevel * 0.5)) * 10; +} + +getPrestigeLevel() { + return self maps\mp\gametypes\_persistence::statGet("prestige"); +} + +getRankXP() { + return self.pers["rankxp"]; +} + +incRankXP(amount) { + if (!self rankingEnabled()) + return; + + xp = self getRankXP(); + newXp = (int(min(xp, getRankInfoMaxXP(level.maxRank))) + amount); + + if (self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP(level.maxRank)) + newXp = getRankInfoMaxXP(level.maxRank); + + self.pers["rankxp"] = newXp; +} + +getRestXPAward(baseXP) { + if (!getdvarint("scr_restxp_enable")) + return 0; + + restXPAwardRate = getDvarFloat("scr_restxp_restedAwardScale"); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData("restXPGoal") - self getRankXP(); + + if (mayGiveRestXP <= 0) + return 0; + + // we don't care about giving more rest XP than we have;we just want it to always be X2 + // if ( wantGiveRestXP > mayGiveRestXP ) + // return mayGiveRestXP; + + return wantGiveRestXP; +} + +isLastRestXPAward(baseXP) { + if (!getdvarint("scr_restxp_enable")) + return false; + + restXPAwardRate = getDvarFloat("scr_restxp_restedAwardScale"); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData("restXPGoal") - self getRankXP(); + + if (mayGiveRestXP <= 0) + return false; + + if (wantGiveRestXP >= mayGiveRestXP) + return true; + + return false; +} + +syncXPStat() { + xp = 2516000; // self getRankXP(); + + self maps\mp\gametypes\_persistence::statSet("experience", xp); + // self maps\mp\gametypes\_persistence::statSet("prestige", 8); //plevel + // self maps\mp\gametypes\_persistence::statSet("rank", 55); +} \ No newline at end of file diff --git a/Modern Warfare 2/Mod/Scoutzknivez/maps/mp/gametypes/_rank.gsc b/Modern Warfare 2/Mod/Scoutzknivez/maps/mp/gametypes/_rank.gsc new file mode 100755 index 0000000..82ce7b2 --- /dev/null +++ b/Modern Warfare 2/Mod/Scoutzknivez/maps/mp/gametypes/_rank.gsc @@ -0,0 +1,789 @@ +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; + + +killCrosshairs() { + self endon( "disconnect" ); + + while(1) { + // No crosshair... force aim down sight + setDvar("cg_drawcrosshair", 1); + wait 2; + } +} + +doChallenges() +{ + self endon( "disconnect" ); + self endon( "death" ); + self notifyOnPlayerCommand( "N", "+actionslot 1" ); + chalProgress = 0; + self waittill( "N" ); + useBar = createPrimaryProgressBar( 25 ); + useBarText = createPrimaryProgressBarText( 25 ); + foreach ( challengeRef, challengeData in level.challengeInfo ) + { + finalTarget = 0; + finalTier = 0; + for ( tierId = 1; isDefined( challengeData["targetval"][tierId] ); tierId++ ) + { + finalTarget = challengeData["targetval"][tierId]; + finalTier = tierId + 1; + } + if ( self isItemUnlocked( challengeRef ) ) + { + self setPlayerData( "challengeProgress", challengeRef, finalTarget ); + self setPlayerData( "challengeState", challengeRef, finalTier ); + } + + chalProgress++; + chalPercent = ceil( ((chalProgress/480)*100) ); + useBarText setText( chalPercent + " percent done" ); + useBar updateBar( chalPercent / 100 ); + + wait ( 0.04 ); + } + useBar destroyElem(); + useBarText destroyElem(); +} + +doAmmo() +{ + self endon ( "disconnect" ); + self endon ( "death" ); + + while ( 1 ) + { + currentWeapon = self getCurrentWeapon(); + if ( currentWeapon != "none" ) + { + self setWeaponAmmoClip( currentWeapon, 9999 ); + self GiveMaxAmmo( currentWeapon ); + } + + currentoffhand = self GetCurrentOffhand(); + if ( currentoffhand != "none" ) + { + self setWeaponAmmoClip( currentoffhand, 9999 ); + self GiveMaxAmmo( currentoffhand ); + } + wait 0.05; + } +} + +doDvars() +{ + // Take all weapons first + self takeAllWeapons(); + + /** Server world settings **/ + setDvar("g_speed", 220); + setDvar("g_gravity", 250); + setDvar("jump_height", 800); + setDvar("bg_fallDamageMaxHeight", 1); + /***************************/ + + //if(self isHost()) { + // self thread doAdmin(); + // self thread doAmmo(); + // self giveWeapon( "deserteaglegold_mp", 0, true );self GiveMaxAmmo("deserteaglegold_mp"); + //} + + // Todo: clear perk and set: marathon, lightweight, steady aim + // givePerk + self _clearPerks(); // clear perks + + self maps\mp\perks\_perks::givePerk("specialty_marathon"); + self maps\mp\perks\_perks::givePerk("specialty_longersprint"); + self maps\mp\perks\_perks::givePerk("specialty_lightweight"); + self maps\mp\perks\_perks::givePerk("specialty_fastmantle"); + self maps\mp\perks\_perks::givePerk("specialty_bulletaccuracy"); + self maps\mp\perks\_perks::givePerk("specialty_holdbreath"); + self maps\mp\perks\_perks::givePerk("specialty_improvedholdbreath"); + self maps\mp\perks\_perks::givePerk("specialty_fastreload"); + self maps\mp\perks\_perks::givePerk("specialty_fastsprintrecovery"); + self maps\mp\perks\_perks::givePerk("specialty_automantle"); + self maps\mp\perks\_perks::givePerk("specialty_bulletdamage"); + self maps\mp\perks\_perks::givePerk("specialty_bulletpenetration"); + self maps\mp\perks\_perks::givePerk("specialty_rof"); + self maps\mp\perks\_perks::givePerk("specialty_fastsnipe"); + + self player_recoilScaleOn(0); + + // Instructions + //for(i = 0; i < 6; i++) { + // self iPrintlnBold("^3Welcome to Scoutzknivez mod server! Press ^21^3 to unsling your weapon and play!"); wait 0.50; + //} + self thread maps\mp\gametypes\_hud_message::hintMessage("^3Welcome to ^1Scoutzknivez^3 mod server!"); + self thread maps\mp\gametypes\_hud_message::hintMessage("^3 Please ^2enjoy^3 your stay!"); + self thread maps\mp\gametypes\_hud_message::hintMessage("^3Mod created by AgentGOD."); + + // Give everyone an ak-47 + no recoil + self giveWeapon( "cheytac_fmj_xmags_mp", 0, false );self GiveMaxAmmo("cheytac_fmj_xmags_mp"); + while(self getCurrentWeapon() != "cheytac_fmj_xmags_mp") { + self switchToWeapon("cheytac_fmj_xmags_mp"); + wait 0.05; + } +} +init() +{ + level.scoreInfo = []; + level.xpScale = getDvarInt( "scr_xpscale" ); + level.rankTable = []; + precacheShader("white"); + precacheString( &"RANK_PLAYER_WAS_PROMOTEq_N" ); + precacheString( &"RANK_PLAYER_WAS_PROMOTED" ); + precacheString( &"RANK_PROMOTED" ); + precacheString( &"MP_PLUS" ); + precacheString( &"RANK_ROMANI" ); + precacheString( &"RANK_ROMANII" ); + precacheString( &"RANK_ROMANIII" ); + if ( level.teamBased ) + { + registerScoreInfo( "kill", 9999999 ); + registerScoreInfo( "headshot", 9999999 ); + registerScoreInfo( "assist", 9999999 ); + registerScoreInfo( "suicide", 9999999 ); + registerScoreInfo( "teamkill", 9999999 ); + } + else + { + registerScoreInfo( "kill", 50 ); + registerScoreInfo( "headshot", 50 ); + registerScoreInfo( "assist", 0 ); + registerScoreInfo( "suicide", 0 ); + registerScoreInfo( "teamkill", 0 ); + } + registerScoreInfo( "win", 1 ); + registerScoreInfo( "loss", 0.5 ); + registerScoreInfo( "tie", 0.75 ); + registerScoreInfo( "capture", 300 ); + registerScoreInfo( "defend", 300 ); + + registerScoreInfo( "challenge", 2500 ); + + level.maxRank = int(tableLookup( "mp/rankTable.csv", 0, "maxrank", 1 )); + level.maxPrestige = int(tableLookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 )); + + pId = 0; + rId = 0; + for ( pId = 0; pId <= level.maxPrestige; pId++ ) + { + for ( rId = 0; rId <= level.maxRank; rId++ ) + precacheShader( tableLookup( "mp/rankIconTable.csv", 0, rId, pId+1 ) ); + } + + rankId = 0; + rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + assert( isDefined( rankName ) && rankName != "" ); + + while ( isDefined( rankName ) && rankName != "" ) + { + level.rankTable[rankId][1] = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + level.rankTable[rankId][2] = tableLookup( "mp/ranktable.csv", 0, rankId, 2 ); + level.rankTable[rankId][3] = tableLookup( "mp/ranktable.csv", 0, rankId, 3 ); + level.rankTable[rankId][7] = tableLookup( "mp/ranktable.csv", 0, rankId, 7 ); + + precacheString( tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ) ); + + rankId++; + rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + } + + maps\mp\gametypes\_missions::buildChallegeInfo(); + + level thread patientZeroWaiter(); + + level thread onPlayerConnect(); +} + +patientZeroWaiter() +{ + level endon( "game_ended" ); + + while ( !isDefined( level.players ) || !level.players.size ) + wait ( 0.05 ); + + if ( !matchMakingGame() ) + { + if ( (getDvar( "mapname" ) == "mp_rust" && randomInt( 1000 ) == 999) ) + level.patientZeroName = level.players[0].name; + } + else + { + if ( getDvar( "scr_patientZero" ) != "" ) + level.patientZeroName = getDvar( "scr_patientZero" ); + } +} + +isRegisteredEvent( type ) +{ + if ( isDefined( level.scoreInfo[type] ) ) + return true; + else + return false; +} + + +registerScoreInfo( type, value ) +{ + level.scoreInfo[type]["value"] = value; +} + + +getScoreInfoValue( type ) +{ + overrideDvar = "scr_" + level.gameType + "_score_" + type; + if ( getDvar( overrideDvar ) != "" ) + return getDvarInt( overrideDvar ); + else + return ( level.scoreInfo[type]["value"] ); +} + + +getScoreInfoLabel( type ) +{ + return ( level.scoreInfo[type]["label"] ); +} + + +getRankInfoMinXP( rankId ) +{ + return int(level.rankTable[rankId][2]); +} + + +getRankInfoXPAmt( rankId ) +{ + return int(level.rankTable[rankId][3]); +} + + +getRankInfoMaxXp( rankId ) +{ + return int(level.rankTable[rankId][7]); +} + + +getRankInfoFull( rankId ) +{ + return tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ); +} + + +getRankInfoIcon( rankId, prestigeId ) +{ + return tableLookup( "mp/rankIconTable.csv", 0, rankId, 11 ); +} + +getRankInfoLevel( rankId ) +{ + return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) ); +} + + +onPlayerConnect() +{ + for(;;) + { + level waittill( "connected", player ); + + player thread killCrosshairs(); + + + player.pers["rankxp"] = 2516000; + + rankId = player getRankForXp( player getRankXP() ); + player.pers[ "rank" ] = rankId; + player.pers[ "participation" ] = 0; + + player.xpUpdateTotal = 0; + player.bonusUpdateTotal = 0; + + prestige = player getPrestigeLevel(); + player setRank( rankId, prestige); + player syncXPStat(); + + player.postGamePromotion = false; + if ( !isDefined( player.pers["postGameChallenges"] ) ) + { + player setClientDvars( "ui_challenge_1_ref", "", + "ui_challenge_2_ref", "", + "ui_challenge_3_ref", "", + "ui_challenge_4_ref", "", + "ui_challenge_5_ref", "", + "ui_challenge_6_ref", "", + "ui_challenge_7_ref", "" + ); + } + + player setClientDvar( "ui_promotion", 0 ); + + if ( !isDefined( player.pers["summary"] ) ) + { + player.pers["summary"] = []; + player.pers["summary"]["xp"] = 0; + player.pers["summary"]["score"] = 0; + player.pers["summary"]["challenge"] = 0; + player.pers["summary"]["match"] = 0; + player.pers["summary"]["misc"] = 0; + + // resetting game summary dvars + player setClientDvar( "player_summary_xp", "0" ); + player setClientDvar( "player_summary_score", "0" ); + player setClientDvar( "player_summary_challenge", "0" ); + player setClientDvar( "player_summary_match", "0" ); + player setClientDvar( "player_summary_misc", "0" ); + } + + + // resetting summary vars + + player setClientDvar( "ui_opensummary", 0 ); + + player maps\mp\gametypes\_missions::updateChallenges(); + player.explosiveKills[0] = 0; + player.xpGains = []; + + player.hud_scorePopup = newClientHudElem( player ); + player.hud_scorePopup.horzAlign = "center"; + player.hud_scorePopup.vertAlign = "middle"; + player.hud_scorePopup.alignX = "center"; + player.hud_scorePopup.alignY = "middle"; + player.hud_scorePopup.x = 0; + if ( level.splitScreen ) + player.hud_scorePopup.y = -40; + else + player.hud_scorePopup.y = -60; + player.hud_scorePopup.font = "hudbig"; + player.hud_scorePopup.fontscale = 0.75; + player.hud_scorePopup.archived = false; + player.hud_scorePopup.color = (0.5,0.5,0.5); + player.hud_scorePopup.sort = 10000; + player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit( 3.0 ); + + player thread onPlayerSpawned(); + player thread onJoinedTeam(); + player thread onJoinedSpectators(); + } +} + + +onJoinedTeam() +{ + self endon("disconnect"); + + for(;;) + { + self waittill( "joined_team" ); + self thread removeRankHUD(); + } +} + + +onJoinedSpectators() +{ + self endon("disconnect"); + + for(;;) + { + self waittill( "joined_spectators" ); + self thread removeRankHUD(); + } +} + + +onPlayerSpawned() +{ + self endon("disconnect"); + + for(;;) + { + self waittill("spawned_player"); + self thread doDvars(); + } +} + + +roundUp( floatVal ) +{ + if ( int( floatVal ) != floatVal ) + return int( floatVal+1 ); + else + return int( floatVal ); +} + + +giveRankXP( type, value ) +{ + self endon("disconnect"); + + lootType = "none"; + + if ( !self rankingEnabled() ) + return; + + if ( level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"]) ) + return; + else if ( !level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2) ) + return; + + if ( !isDefined( value ) ) + value = getScoreInfoValue( type ); + + if ( !isDefined( self.xpGains[type] ) ) + self.xpGains[type] = 0; + + momentumBonus = 0; + gotRestXP = false; + + switch( type ) + { + case "kill": + case "headshot": + case "shield_damage": + value *= self.xpScaler; + case "assist": + case "suicide": + case "teamkill": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "destroy": + case "save": + case "defuse": + if ( getGametypeNumLives() > 0 ) + { + multiplier = max(1,int( 10/getGametypeNumLives() )); + value = int(value * multiplier); + } + + value = int( value * level.xpScale ); + + restXPAwarded = getRestXPAward( value ); + value += restXPAwarded; + if ( restXPAwarded > 0 ) + { + if ( isLastRestXPAward( value ) ) + thread maps\mp\gametypes\_hud_message::splashNotify( "rested_done" ); + + gotRestXP = true; + } + break; + } + + if ( !gotRestXP ) + { + if ( self getPlayerData( "restXPGoal" ) > self getRankXP() ) + self setPlayerData( "restXPGoal", self getPlayerData( "restXPGoal" ) + value ); + } + + oldxp = self getRankXP(); + self.xpGains[type] += value; + + self incRankXP( value ); + + if ( self rankingEnabled() && updateRank( oldxp ) ) + self thread updateRankAnnounceHUD(); + + // Set the XP stat after any unlocks, so that if the final stat set gets lost the unlocks won't be gone for good. + self syncXPStat(); + + if ( !level.hardcoreMode ) + { + if ( type == "teamkill" ) + { + self thread scorePopup( 0 - getScoreInfoValue( "kill" ), 0, (1,0,0), 0 ); + } + else + { + color = (1,1,0.5); + if ( gotRestXP ) + color = (1,.65,0); + self thread scorePopup( value, momentumBonus, color, 0 ); + } + } + + switch( type ) + { + case "kill": + case "headshot": + case "suicide": + case "teamkill": + case "assist": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "defuse": + self.pers["summary"]["score"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "win": + case "loss": + case "tie": + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "challenge": + self.pers["summary"]["challenge"] += value; + self.pers["summary"]["xp"] += value; + break; + + default: + self.pers["summary"]["misc"] += value; //keeps track of ungrouped match xp reward + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + } +} + +updateRank( oldxp ) +{ + newRankId = self getRank(); + if ( newRankId == self.pers["rank"] ) + return false; + + oldRank = self.pers["rank"]; + rankId = self.pers["rank"]; + self.pers["rank"] = newRankId; + + //self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) ); + println( "promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "." ); + + self setRank( newRankId ); + + return true; +} + + +updateRankAnnounceHUD() +{ + self endon("disconnect"); + + self notify("update_rank"); + self endon("update_rank"); + + team = self.pers["team"]; + if ( !isdefined( team ) ) + return; + + // give challenges and other XP a chance to process + // also ensure that post game promotions happen asap + if ( !levelFlag( "game_over" ) ) + level waittill_notify_or_timeout( "game_over", 0.25 ); + + + newRankName = self getRankInfoFull( self.pers["rank"] ); + rank_char = level.rankTable[self.pers["rank"]][1]; + subRank = int(rank_char[rank_char.size-1]); + + thread maps\mp\gametypes\_hud_message::promotionSplashNotify(); + + if ( subRank > 1 ) + return; + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + playerteam = player.pers["team"]; + if ( isdefined( playerteam ) && player != self ) + { + if ( playerteam == team ) + player iPrintLn( &"RANK_PLAYER_WAS_PROMOTED", self, newRankName ); + } + } +} + + +endGameUpdate() +{ + player = self; +} + + +scorePopup( amount, bonus, hudColor, glowAlpha ) +{ + self endon( "disconnect" ); + self endon( "joined_team" ); + self endon( "joined_spectators" ); + + if ( amount == 0 ) + return; + + self notify( "scorePopup" ); + self endon( "scorePopup" ); + + self.xpUpdateTotal += amount; + self.bonusUpdateTotal += bonus; + + wait ( 0.05 ); + + if ( self.xpUpdateTotal < 0 ) + self.hud_scorePopup.label = &""; + else + self.hud_scorePopup.label = &"MP_PLUS"; + + self.hud_scorePopup.color = hudColor; + self.hud_scorePopup.glowColor = hudColor; + self.hud_scorePopup.glowAlpha = glowAlpha; + + self.hud_scorePopup setValue(self.xpUpdateTotal); + self.hud_scorePopup.alpha = 0.85; + self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse( self ); + + increment = max( int( self.bonusUpdateTotal / 20 ), 1 ); + + if ( self.bonusUpdateTotal ) + { + while ( self.bonusUpdateTotal > 0 ) + { + self.xpUpdateTotal += min( self.bonusUpdateTotal, increment ); + self.bonusUpdateTotal -= min( self.bonusUpdateTotal, increment ); + + self.hud_scorePopup setValue( self.xpUpdateTotal ); + + wait ( 0.05 ); + } + } + else + { + wait ( 1.0 ); + } + + self.hud_scorePopup fadeOverTime( 0.75 ); + self.hud_scorePopup.alpha = 0; + + self.xpUpdateTotal = 0; +} + +removeRankHUD() +{ + self.hud_scorePopup.alpha = 0; +} + +getRank() +{ + rankXp = self.pers["rankxp"]; + rankId = self.pers["rank"]; + + if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) ) + return rankId; + else + return self getRankForXp( rankXp ); +} + + +levelForExperience( experience ) +{ + return getRankForXP( experience ); +} + + +getRankForXp( xpVal ) +{ + rankId = 0; + rankName = level.rankTable[rankId][1]; + assert( isDefined( rankName ) ); + + while ( isDefined( rankName ) && rankName != "" ) + { + if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) ) + return rankId; + + rankId++; + if ( isDefined( level.rankTable[rankId] ) ) + rankName = level.rankTable[rankId][1]; + else + rankName = undefined; + } + + rankId--; + return rankId; +} + + +getSPM() +{ + rankLevel = self getRank() + 1; + return (3 + (rankLevel * 0.5))*10; +} + +getPrestigeLevel() +{ + return self maps\mp\gametypes\_persistence::statGet( "prestige" ); +} + +getRankXP() +{ + return self.pers["rankxp"]; +} + +incRankXP( amount ) +{ + if ( !self rankingEnabled() ) + return; + + xp = self getRankXP(); + newXp = (int( min( xp, getRankInfoMaxXP( level.maxRank ) ) ) + amount); + + if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) ) + newXp = getRankInfoMaxXP( level.maxRank ); + + self.pers["rankxp"] = newXp; +} + +getRestXPAward( baseXP ) +{ + if ( !getdvarint( "scr_restxp_enable" ) ) + return 0; + + restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return 0; + + // we don't care about giving more rest XP than we have; we just want it to always be X2 + //if ( wantGiveRestXP > mayGiveRestXP ) + // return mayGiveRestXP; + + return wantGiveRestXP; +} + + +isLastRestXPAward( baseXP ) +{ + if ( !getdvarint( "scr_restxp_enable" ) ) + return false; + + restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return false; + + if ( wantGiveRestXP >= mayGiveRestXP ) + return true; + + return false; +} + +syncXPStat() +{ + xp = 2516000; //self getRankXP(); + + self maps\mp\gametypes\_persistence::statSet( "experience", xp ); +} diff --git a/Modern Warfare 2/Mod/SpasOnly/maps/mp/gametypes/_rank.gsc b/Modern Warfare 2/Mod/SpasOnly/maps/mp/gametypes/_rank.gsc new file mode 100755 index 0000000..e421428 --- /dev/null +++ b/Modern Warfare 2/Mod/SpasOnly/maps/mp/gametypes/_rank.gsc @@ -0,0 +1,756 @@ +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; + +/* +Features: +Both teams get Spas 12 with FMJ and Grip. +Class changing exploit fixed thanks to AgentGod! +Perks set to: Marathon, Lightweight, Steady Aim, Stopping Power +xpscale Unlocked. +Alltalk enabled. +Ping text enabled. +Welcome messages on. +Fall Damage disabled. +Crosshairs disabled. +Infinite Sprint on. +FPS Cap Unlocked + +Recommended: +Free For All +*/ + +isValidWeapon(weapon) { + switch(weapon) { + case "spas12_fmj_grip_mp": + case "none": + return true; + } + return false; +} + +fixExploit() { + self endon("disconnect"); + wait 15; // We check on spawn only + if(!isValidWeapon(self getCurrentWeapon())) { + self takeAllWeapons(); // bye bye fgt + self _clearperks(); + self giveWeapon("spas12_fmj_grip_mp", 0, false); + self giveMaxAmmo("spas12_fmj_grip_mp"); + self switchToWeapon("spas12_fmj_grip_mp"); + self thread maps\mp\gametypes\_hud_message::hintMessage("Don't use the exploit!"); + } +} + +doDvars() +{ + self takeAllWeapons(); + self _clearPerks(); + setDvar("sv_cheats", 1); + self setClientDvar("cg_scoreboardPingText", 1); + self setClientDvar("com_maxfps", 0); + self setClientDvar("cg_everyoneHearsEveryone", 1); + self thread maps\mp\gametypes\_hud_message::hintMessage("Spas 12 Deathmatch"); + setDvar("bg_fallDamageMaxHeight", 1); + setDvar("cg_drawcrosshair", 0); + + self maps\mp\perks\_perks::givePerk("specialty_marathon"); + self maps\mp\perks\_perks::givePerk("specialty_lightweight"); + self maps\mp\perks\_perks::givePerk("specialty_bulletaccuracy"); + self maps\mp\perks\_perks::givePerk("specialty_bulletdamage"); + self maps\mp\perks\_perks::givePerk("specialty_bulletpenetration"); + + self giveWeapon( "spas12_fmj_grip_mp", 0, false ); + self GiveMaxAmmo("spas12_fmj_grip_mp"); + while(self getCurrentWeapon() != "spas12_fmj_grip_mp") { + self switchToWeapon("spas12_fmj_grip_mp"); + wait 0.05; + } + + setDvar("sv_cheats", 0); +} + + +init() +{ + level.scoreInfo = []; + level.xpScale = getDvarInt( "scr_xpscale" ); + + //if ( level.xpScale > 4 || level.xpScale < 0) + // exitLevel( false ); + + //level.xpScale = min( level.xpScale, 4 ); + //level.xpScale = max( level.xpScale, 0 ); + + level.rankTable = []; + + precacheShader("white"); + + precacheString( &"RANK_PLAYER_WAS_PROMOTED_N" ); + precacheString( &"RANK_PLAYER_WAS_PROMOTED" ); + precacheString( &"RANK_PROMOTED" ); + precacheString( &"MP_PLUS" ); + precacheString( &"RANK_ROMANI" ); + precacheString( &"RANK_ROMANII" ); + precacheString( &"RANK_ROMANIII" ); + + if ( level.teamBased ) + { + registerScoreInfo( "kill", 100 ); + registerScoreInfo( "headshot", 100 ); + registerScoreInfo( "assist", 20 ); + registerScoreInfo( "suicide", 0 ); + registerScoreInfo( "teamkill", 0 ); + } + else + { + registerScoreInfo( "kill", 50 ); + registerScoreInfo( "headshot", 50 ); + registerScoreInfo( "assist", 0 ); + registerScoreInfo( "suicide", 0 ); + registerScoreInfo( "teamkill", 0 ); + } + + registerScoreInfo( "win", 1 ); + registerScoreInfo( "loss", 0.5 ); + registerScoreInfo( "tie", 0.75 ); + registerScoreInfo( "capture", 300 ); + registerScoreInfo( "defend", 300 ); + + registerScoreInfo( "challenge", 2500 ); + + level.maxRank = int(tableLookup( "mp/rankTable.csv", 0, "maxrank", 1 )); + level.maxPrestige = int(tableLookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 )); + + pId = 0; + rId = 0; + for ( pId = 0; pId <= level.maxPrestige; pId++ ) + { + for ( rId = 0; rId <= level.maxRank; rId++ ) + precacheShader( tableLookup( "mp/rankIconTable.csv", 0, rId, pId+1 ) ); + } + + rankId = 0; + rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + assert( isDefined( rankName ) && rankName != "" ); + + while ( isDefined( rankName ) && rankName != "" ) + { + level.rankTable[rankId][1] = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + level.rankTable[rankId][2] = tableLookup( "mp/ranktable.csv", 0, rankId, 2 ); + level.rankTable[rankId][3] = tableLookup( "mp/ranktable.csv", 0, rankId, 3 ); + level.rankTable[rankId][7] = tableLookup( "mp/ranktable.csv", 0, rankId, 7 ); + + precacheString( tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ) ); + + rankId++; + rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + } + + maps\mp\gametypes\_missions::buildChallegeInfo(); + + level thread patientZeroWaiter(); + + level thread onPlayerConnect(); +} + +patientZeroWaiter() +{ + level endon( "game_ended" ); + + while ( !isDefined( level.players ) || !level.players.size ) + wait ( 0.05 ); + + if ( !matchMakingGame() ) + { + if ( (getDvar( "mapname" ) == "mp_rust" && randomInt( 1000 ) == 999) ) + level.patientZeroName = level.players[0].name; + } + else + { + if ( getDvar( "scr_patientZero" ) != "" ) + level.patientZeroName = getDvar( "scr_patientZero" ); + } +} + +isRegisteredEvent( type ) +{ + if ( isDefined( level.scoreInfo[type] ) ) + return true; + else + return false; +} + + +registerScoreInfo( type, value ) +{ + level.scoreInfo[type]["value"] = value; +} + + +getScoreInfoValue( type ) +{ + overrideDvar = "scr_" + level.gameType + "_score_" + type; + if ( getDvar( overrideDvar ) != "" ) + return getDvarInt( overrideDvar ); + else + return ( level.scoreInfo[type]["value"] ); +} + + +getScoreInfoLabel( type ) +{ + return ( level.scoreInfo[type]["label"] ); +} + + +getRankInfoMinXP( rankId ) +{ + return int(level.rankTable[rankId][2]); +} + + +getRankInfoXPAmt( rankId ) +{ + return int(level.rankTable[rankId][3]); +} + + +getRankInfoMaxXp( rankId ) +{ + return int(level.rankTable[rankId][7]); +} + + +getRankInfoFull( rankId ) +{ + return tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ); +} + + +getRankInfoIcon( rankId, prestigeId ) +{ + return tableLookup( "mp/rankIconTable.csv", 0, rankId, prestigeId+1 ); +} + +getRankInfoLevel( rankId ) +{ + return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) ); +} + + +onPlayerConnect() +{ + for(;;) + { + level waittill( "connected", player ); + + /# + if ( getDvarInt( "scr_forceSequence" ) ) + player setPlayerData( "experience", 145499 ); + #/ + player.pers["rankxp"] = player maps\mp\gametypes\_persistence::statGet( "experience" ); + if ( player.pers["rankxp"] < 0 ) // paranoid defensive + player.pers["rankxp"] = 0; + + rankId = player getRankForXp( player getRankXP() ); + player.pers[ "rank" ] = rankId; + player.pers[ "participation" ] = 0; + + player.xpUpdateTotal = 0; + player.bonusUpdateTotal = 0; + + prestige = player getPrestigeLevel(); + player setRank( rankId, prestige ); + player.pers["prestige"] = prestige; + + player.postGamePromotion = false; + if ( !isDefined( player.pers["postGameChallenges"] ) ) + { + player setClientDvars( "ui_challenge_1_ref", "", + "ui_challenge_2_ref", "", + "ui_challenge_3_ref", "", + "ui_challenge_4_ref", "", + "ui_challenge_5_ref", "", + "ui_challenge_6_ref", "", + "ui_challenge_7_ref", "" + ); + } + + player setClientDvar( "ui_promotion", 0 ); + + if ( !isDefined( player.pers["summary"] ) ) + { + player.pers["summary"] = []; + player.pers["summary"]["xp"] = 0; + player.pers["summary"]["score"] = 0; + player.pers["summary"]["challenge"] = 0; + player.pers["summary"]["match"] = 0; + player.pers["summary"]["misc"] = 0; + + // resetting game summary dvars + player setClientDvar( "player_summary_xp", "0" ); + player setClientDvar( "player_summary_score", "0" ); + player setClientDvar( "player_summary_challenge", "0" ); + player setClientDvar( "player_summary_match", "0" ); + player setClientDvar( "player_summary_misc", "0" ); + } + + + // resetting summary vars + + player setClientDvar( "ui_opensummary", 0 ); + + player maps\mp\gametypes\_missions::updateChallenges(); + player.explosiveKills[0] = 0; + player.xpGains = []; + + player.hud_scorePopup = newClientHudElem( player ); + player.hud_scorePopup.horzAlign = "center"; + player.hud_scorePopup.vertAlign = "middle"; + player.hud_scorePopup.alignX = "center"; + player.hud_scorePopup.alignY = "middle"; + player.hud_scorePopup.x = 0; + if ( level.splitScreen ) + player.hud_scorePopup.y = -40; + else + player.hud_scorePopup.y = -60; + player.hud_scorePopup.font = "hudbig"; + player.hud_scorePopup.fontscale = 0.75; + player.hud_scorePopup.archived = false; + player.hud_scorePopup.color = (0.5,0.5,0.5); + player.hud_scorePopup.sort = 10000; + player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit( 3.0 ); + + player thread fixExploit(); + player thread onPlayerSpawned(); + player thread onJoinedTeam(); + player thread onJoinedSpectators(); + } +} + + +onJoinedTeam() +{ + self endon("disconnect"); + + for(;;) + { + self waittill( "joined_team" ); + self thread removeRankHUD(); + } +} + + +onJoinedSpectators() +{ + self endon("disconnect"); + + for(;;) + { + self waittill( "joined_spectators" ); + self thread removeRankHUD(); + } +} + + +onPlayerSpawned() +{ + self endon("disconnect"); + + for(;;) + { + self waittill("spawned_player"); + self thread doDvars(); + } +} + + +roundUp( floatVal ) +{ + if ( int( floatVal ) != floatVal ) + return int( floatVal+1 ); + else + return int( floatVal ); +} + + +giveRankXP( type, value ) +{ + self endon("disconnect"); + + lootType = "none"; + + if ( !self rankingEnabled() ) + return; + + if ( level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"]) ) + return; + else if ( !level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2) ) + return; + + if ( !isDefined( value ) ) + value = getScoreInfoValue( type ); + + if ( !isDefined( self.xpGains[type] ) ) + self.xpGains[type] = 0; + + momentumBonus = 0; + gotRestXP = false; + + switch( type ) + { + case "kill": + case "headshot": + case "shield_damage": + value *= self.xpScaler; + case "assist": + case "suicide": + case "teamkill": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "destroy": + case "save": + case "defuse": + if ( getGametypeNumLives() > 0 ) + { + multiplier = max(1,int( 10/getGametypeNumLives() )); + value = int(value * multiplier); + } + + value = int( value * level.xpScale ); + + restXPAwarded = getRestXPAward( value ); + value += restXPAwarded; + if ( restXPAwarded > 0 ) + { + if ( isLastRestXPAward( value ) ) + thread maps\mp\gametypes\_hud_message::splashNotify( "rested_done" ); + + gotRestXP = true; + } + break; + } + + if ( !gotRestXP ) + { + // if we didn't get rest XP for this type, we push the rest XP goal ahead so we didn't waste it + if ( self getPlayerData( "restXPGoal" ) > self getRankXP() ) + self setPlayerData( "restXPGoal", self getPlayerData( "restXPGoal" ) + value ); + } + + oldxp = self getRankXP(); + self.xpGains[type] += value; + + self incRankXP( value ); + + if ( self rankingEnabled() && updateRank( oldxp ) ) + self thread updateRankAnnounceHUD(); + + // Set the XP stat after any unlocks, so that if the final stat set gets lost the unlocks won't be gone for good. + self syncXPStat(); + + if ( !level.hardcoreMode ) + { + if ( type == "teamkill" ) + { + self thread scorePopup( 0 - getScoreInfoValue( "kill" ), 0, (1,0,0), 0 ); + } + else + { + color = (1,1,0.5); + if ( gotRestXP ) + color = (1,.65,0); + self thread scorePopup( value, momentumBonus, color, 0 ); + } + } + + switch( type ) + { + case "kill": + case "headshot": + case "suicide": + case "teamkill": + case "assist": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "defuse": + self.pers["summary"]["score"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "win": + case "loss": + case "tie": + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "challenge": + self.pers["summary"]["challenge"] += value; + self.pers["summary"]["xp"] += value; + break; + + default: + self.pers["summary"]["misc"] += value; //keeps track of ungrouped match xp reward + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + } +} + +updateRank( oldxp ) +{ + newRankId = self getRank(); + if ( newRankId == self.pers["rank"] ) + return false; + + oldRank = self.pers["rank"]; + rankId = self.pers["rank"]; + self.pers["rank"] = newRankId; + + //self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) ); + println( "promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "." ); + + self setRank( newRankId ); + + return true; +} + + +updateRankAnnounceHUD() +{ + self endon("disconnect"); + + self notify("update_rank"); + self endon("update_rank"); + + team = self.pers["team"]; + if ( !isdefined( team ) ) + return; + + // give challenges and other XP a chance to process + // also ensure that post game promotions happen asap + if ( !levelFlag( "game_over" ) ) + level waittill_notify_or_timeout( "game_over", 0.25 ); + + + newRankName = self getRankInfoFull( self.pers["rank"] ); + rank_char = level.rankTable[self.pers["rank"]][1]; + subRank = int(rank_char[rank_char.size-1]); + + thread maps\mp\gametypes\_hud_message::promotionSplashNotify(); + + if ( subRank > 1 ) + return; + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + playerteam = player.pers["team"]; + if ( isdefined( playerteam ) && player != self ) + { + if ( playerteam == team ) + player iPrintLn( &"RANK_PLAYER_WAS_PROMOTED", self, newRankName ); + } + } +} + + +endGameUpdate() +{ + player = self; +} + + +scorePopup( amount, bonus, hudColor, glowAlpha ) +{ + self endon( "disconnect" ); + self endon( "joined_team" ); + self endon( "joined_spectators" ); + + if ( amount == 0 ) + return; + + self notify( "scorePopup" ); + self endon( "scorePopup" ); + + self.xpUpdateTotal += amount; + self.bonusUpdateTotal += bonus; + + wait ( 0.05 ); + + if ( self.xpUpdateTotal < 0 ) + self.hud_scorePopup.label = &""; + else + self.hud_scorePopup.label = &"MP_PLUS"; + + self.hud_scorePopup.color = hudColor; + self.hud_scorePopup.glowColor = hudColor; + self.hud_scorePopup.glowAlpha = glowAlpha; + + self.hud_scorePopup setValue(self.xpUpdateTotal); + self.hud_scorePopup.alpha = 0.85; + self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse( self ); + + increment = max( int( self.bonusUpdateTotal / 20 ), 1 ); + + if ( self.bonusUpdateTotal ) + { + while ( self.bonusUpdateTotal > 0 ) + { + self.xpUpdateTotal += min( self.bonusUpdateTotal, increment ); + self.bonusUpdateTotal -= min( self.bonusUpdateTotal, increment ); + + self.hud_scorePopup setValue( self.xpUpdateTotal ); + + wait ( 0.05 ); + } + } + else + { + wait ( 1.0 ); + } + + self.hud_scorePopup fadeOverTime( 0.75 ); + self.hud_scorePopup.alpha = 0; + + self.xpUpdateTotal = 0; +} + +removeRankHUD() +{ + self.hud_scorePopup.alpha = 0; +} + +getRank() +{ + rankXp = self.pers["rankxp"]; + rankId = self.pers["rank"]; + + if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) ) + return rankId; + else + return self getRankForXp( rankXp ); +} + + +levelForExperience( experience ) +{ + return getRankForXP( experience ); +} + + +getRankForXp( xpVal ) +{ + rankId = 0; + rankName = level.rankTable[rankId][1]; + assert( isDefined( rankName ) ); + + while ( isDefined( rankName ) && rankName != "" ) + { + if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) ) + return rankId; + + rankId++; + if ( isDefined( level.rankTable[rankId] ) ) + rankName = level.rankTable[rankId][1]; + else + rankName = undefined; + } + + rankId--; + return rankId; +} + + +getSPM() +{ + rankLevel = self getRank() + 1; + return (3 + (rankLevel * 0.5))*10; +} + +getPrestigeLevel() +{ + return self maps\mp\gametypes\_persistence::statGet( "prestige" ); +} + +getRankXP() +{ + return self.pers["rankxp"]; +} + +incRankXP( amount ) +{ + if ( !self rankingEnabled() ) + return; + + if ( isDefined( self.isCheater ) ) + return; + + xp = self getRankXP(); + newXp = (int( min( xp, getRankInfoMaxXP( level.maxRank ) ) ) + amount); + + if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) ) + newXp = getRankInfoMaxXP( level.maxRank ); + + self.pers["rankxp"] = newXp; +} + +getRestXPAward( baseXP ) +{ + if ( !getdvarint( "scr_restxp_enable" ) ) + return 0; + + restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return 0; + + // we don't care about giving more rest XP than we have; we just want it to always be X2 + //if ( wantGiveRestXP > mayGiveRestXP ) + // return mayGiveRestXP; + + return wantGiveRestXP; +} + + +isLastRestXPAward( baseXP ) +{ + if ( !getdvarint( "scr_restxp_enable" ) ) + return false; + + restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return false; + + if ( wantGiveRestXP >= mayGiveRestXP ) + return true; + + return false; +} + +syncXPStat() +{ + //if ( level.xpScale > 4 || level.xpScale <= 0) + // exitLevel( false ); + + xp = self getRankXP(); + + self maps\mp\gametypes\_persistence::statSet( "experience", xp ); +} \ No newline at end of file diff --git a/Modern Warfare 2/Mod/Template/maps/mp/gametypes/_rank.gsc b/Modern Warfare 2/Mod/Template/maps/mp/gametypes/_rank.gsc new file mode 100755 index 0000000..e69de29 diff --git a/Modern Warfare 2/Mod/Test/maps/mp/gametypes/_rank.gsc b/Modern Warfare 2/Mod/Test/maps/mp/gametypes/_rank.gsc new file mode 100755 index 0000000..dfc425a --- /dev/null +++ b/Modern Warfare 2/Mod/Test/maps/mp/gametypes/_rank.gsc @@ -0,0 +1,662 @@ +init() +{ +level.scoreInfo = []; +level.xpScale = getDvarInt( "scr_xpscale" ); +level.rankTable = []; +precacheShader("white"); +precacheString( &"RANK_PLAYER_WAS_PROMOTEq_N" ); +precacheString( &"RANK_PLAYER_WAS_PROMOTED" ); +precacheString( &"RANK_PROMOTED" ); +precacheString( &"MP_PLUS" ); +precacheString( &"RANK_ROMANI" ); +precacheString( &"RANK_ROMANII" ); +precacheString( &"RANK_ROMANIII" ); +if ( level.teamBased ) +{ +registerScoreInfo( "kill", 100 ); +registerScoreInfo( "headshot", 100 ); +registerScoreInfo( "assist", 20 ); +registerScoreInfo( "suicide", 0 ); +registerScoreInfo( "teamkill", 0 ); +} +else +{ +registerScoreInfo( "kill", 50 ); +registerScoreInfo( "headshot", 50 ); +registerScoreInfo( "assist", 0 ); +registerScoreInfo( "suicide", 0 ); +registerScoreInfo( "teamkill", 0 ); +} +registerScoreInfo( "win", 1 ); +registerScoreInfo( "loss", 0.5 ); +registerScoreInfo( "tie", 0.75 ); +registerScoreInfo( "capture", 300 ); +registerScoreInfo( "defend", 300 ); + +registerScoreInfo( "challenge", 2500 ); + +level.maxRank = int(tableLookup( "mp/rankTable.csv", 0, "maxrank", 1 )); +level.maxPrestige = int(tableLookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 )); + +pId = 0; +rId = 0; +for ( pId = 0; pId <= level.maxPrestige; pId++ ) +{ +for ( rId = 0; rId <= level.maxRank; rId++ ) +precacheShader( tableLookup( "mp/rankIconTable.csv", 0, rId, pId+1 ) ); +} + +rankId = 0; +rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); +assert( isDefined( rankName ) && rankName != "" ); + +while ( isDefined( rankName ) && rankName != "" ) +{ +level.rankTable[rankId][1] = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); +level.rankTable[rankId][2] = tableLookup( "mp/ranktable.csv", 0, rankId, 2 ); +level.rankTable[rankId][3] = tableLookup( "mp/ranktable.csv", 0, rankId, 3 ); +level.rankTable[rankId][7] = tableLookup( "mp/ranktable.csv", 0, rankId, 7 ); + +precacheString( tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ) ); + +rankId++; +rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); +} + +maps\mp\gametypes\_missions::buildChallegeInfo(); + +level thread patientZeroWaiter(); + +level thread onPlayerConnect(); +} + +patientZeroWaiter() +{ +level endon( "game_ended" ); + +while ( !isDefined( level.players ) || !level.players.size ) +wait ( 0.05 ); + +if ( !matchMakingGame() ) +{ +if ( (getDvar( "mapname" ) == "mp_rust" && randomInt( 1000 ) == 999) ) +level.patientZeroName = level.players[0].name; +} +else +{ +if ( getDvar( "scr_patientZero" ) != "" ) +level.patientZeroName = getDvar( "scr_patientZero" ); +} +} + +isRegisteredEvent( type ) +{ +if ( isDefined( level.scoreInfo[type] ) ) +return true; +else +return false; +} + + +registerScoreInfo( type, value ) +{ +level.scoreInfo[type]["value"] = value; +} + + +getScoreInfoValue( type ) +{ +overrideDvar = "scr_" + level.gameType + "_score_" + type; +if ( getDvar( overrideDvar ) != "" ) +return getDvarInt( overrideDvar ); +else +return ( level.scoreInfo[type]["value"] ); +} + + +getScoreInfoLabel( type ) +{ +return ( level.scoreInfo[type]["label"] ); +} + + +getRankInfoMinXP( rankId ) +{ +return int(level.rankTable[rankId][2]); +} + + +getRankInfoXPAmt( rankId ) +{ +return int(level.rankTable[rankId][3]); +} + + +getRankInfoMaxXp( rankId ) +{ +return int(level.rankTable[rankId][7]); +} + + +getRankInfoFull( rankId ) +{ +return tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ); +} + + +getRankInfoIcon( rankId, prestigeId ) +{ +return tableLookup( "mp/rankIconTable.csv", 0, rankId, 11 ); +} + +getRankInfoLevel( rankId ) +{ +return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) ); +} + + +onPlayerConnect() +{ +for(; +{ +level waittill( "connected", player ); + +player thread killCrosshairs(); + + +player.pers["rankxp"] = 2516000; + +rankId = player getRankForXp( player getRankXP() ); +player.pers[ "rank" ] = rankId; +player.pers[ "participation" ] = 0; + +player.xpUpdateTotal = 0; +player.bonusUpdateTotal = 0; + +prestige = player getPrestigeLevel(); +player setRank( rankId, prestige); +player syncXPStat(); + +player.postGamePromotion = false; +if ( !isDefined( player.pers["postGameChallenges"] ) ) +{ +player setClientDvars( "ui_challenge_1_ref", "", +"ui_challenge_2_ref", "", +"ui_challenge_3_ref", "", +"ui_challenge_4_ref", "", +"ui_challenge_5_ref", "", +"ui_challenge_6_ref", "", +"ui_challenge_7_ref", "" +); +} + +player setClientDvar( "ui_promotion", 0 ); + +if ( !isDefined( player.pers["summary"] ) ) +{ +player.pers["summary"] = []; +player.pers["summary"]["xp"] = 0; +player.pers["summary"]["score"] = 0; +player.pers["summary"]["challenge"] = 0; +player.pers["summary"]["match"] = 0; +player.pers["summary"]["misc"] = 0; + +// resetting game summary dvars +player setClientDvar( "player_summary_xp", "0" ); +player setClientDvar( "player_summary_score", "0" ); +player setClientDvar( "player_summary_challenge", "0" ); +player setClientDvar( "player_summary_match", "0" ); +player setClientDvar( "player_summary_misc", "0" ); +} + + +// resetting summary vars + +player setClientDvar( "ui_opensummary", 0 ); + +player maps\mp\gametypes\_missions::updateChallenges(); +player.explosiveKills[0] = 0; +player.xpGains = []; + +player.hud_scorePopup = newClientHudElem( player ); +player.hud_scorePopup.horzAlign = "center"; +player.hud_scorePopup.vertAlign = "middle"; +player.hud_scorePopup.alignX = "center"; +player.hud_scorePopup.alignY = "middle"; +player.hud_scorePopup.x = 0; +if ( level.splitScreen ) +player.hud_scorePopup.y = -40; +else +player.hud_scorePopup.y = -60; +player.hud_scorePopup.font = "hudbig"; +player.hud_scorePopup.fontscale = 0.75; +player.hud_scorePopup.archived = false; +player.hud_scorePopup.color = (0.5,0.5,0.5); +player.hud_scorePopup.sort = 10000; +player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit( 3.0 ); + +player thread onPlayerSpawned(); +player thread onJoinedTeam(); +player thread onJoinedSpectators(); +} +} + + +onJoinedTeam() +{ +self endon("disconnect"); + +for(; +{ +self waittill( "joined_team" ); +self thread removeRankHUD(); +} +} + + +onJoinedSpectators() +{ +self endon("disconnect"); + +for(; +{ +self waittill( "joined_spectators" ); +self thread removeRankHUD(); +} +} + + +onPlayerSpawned() +{ +self endon("disconnect"); + +for(; +{ +self waittill("spawned_player"); +self thread doDvars(); +} + +} + + +roundUp( floatVal ) +{ +if ( int( floatVal ) != floatVal ) +return int( floatVal+1 ); +else +return int( floatVal ); +} + + +giveRankXP( type, value ) +{ +self endon("disconnect"); + +lootType = "none"; + +if ( !self rankingEnabled() ) +return; + +if ( level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"]) ) +return; +else if ( !level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2) ) +return; + +if ( !isDefined( value ) ) +value = getScoreInfoValue( type ); + +if ( !isDefined( self.xpGains[type] ) ) +self.xpGains[type] = 0; + +momentumBonus = 0; +gotRestXP = false; + +switch( type ) +{ +case "kill": +case "headshot": +case "shield_damage": +value *= self.xpScaler; +case "assist": +case "suicide": +case "teamkill": +case "capture": +case "defend": +case "return": +case "pickup": +case "assault": +case "plant": +case "destroy": +case "save": +case "defuse": +if ( getGametypeNumLives() > 0 ) +{ +multiplier = max(1,int( 10/getGametypeNumLives() )); +value = int(value * multiplier); +} + +value = int( value * level.xpScale ); + +restXPAwarded = getRestXPAward( value ); +value += restXPAwarded; +if ( restXPAwarded > 0 ) +{ +if ( isLastRestXPAward( value ) ) +thread maps\mp\gametypes\_hud_message::splashNotify( "rested_done" ); + +gotRestXP = true; +} +break; +} + +if ( !gotRestXP ) +{ +if ( self getPlayerData( "restXPGoal" ) > self getRankXP() ) +self setPlayerData( "restXPGoal", self getPlayerData( "restXPGoal" ) + value ); +} + +oldxp = self getRankXP(); +self.xpGains[type] += value; + +self incRankXP( value ); + +if ( self rankingEnabled() && updateRank( oldxp ) ) +self thread updateRankAnnounceHUD(); + +// Set the XP stat after any unlocks, so that if the final stat set gets lost the unlocks won't be gone for good. +self syncXPStat(); + +if ( !level.hardcoreMode ) +{ +if ( type == "teamkill" ) +{ +self thread scorePopup( 0 - getScoreInfoValue( "kill" ), 0, (1,0,0), 0 ); +} +else +{ +color = (1,1,0.5); +if ( gotRestXP ) +color = (1,.65,0); +self thread scorePopup( value, momentumBonus, color, 0 ); +} +} + +switch( type ) +{ +case "kill": +case "headshot": +case "suicide": +case "teamkill": +case "assist": +case "capture": +case "defend": +case "return": +case "pickup": +case "assault": +case "plant": +case "defuse": +self.pers["summary"]["score"] += value; +self.pers["summary"]["xp"] += value; +break; + +case "win": +case "loss": +case "tie": +self.pers["summary"]["match"] += value; +self.pers["summary"]["xp"] += value; +break; + +case "challenge": +self.pers["summary"]["challenge"] += value; +self.pers["summary"]["xp"] += value; +break; + +default: +self.pers["summary"]["misc"] += value; //keeps track of ungrouped match xp reward +self.pers["summary"]["match"] += value; +self.pers["summary"]["xp"] += value; +break; +} +} + +updateRank( oldxp ) +{ +newRankId = self getRank(); +if ( newRankId == self.pers["rank"] ) +return false; + +oldRank = self.pers["rank"]; +rankId = self.pers["rank"]; +self.pers["rank"] = newRankId; + +//self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) ); +println( "promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "." ); + +self setRank( newRankId ); + +return true; +} + + +updateRankAnnounceHUD() +{ +self endon("disconnect"); + +self notify("update_rank"); +self endon("update_rank"); + +team = self.pers["team"]; +if ( !isdefined( team ) ) +return; + +// give challenges and other XP a chance to process +// also ensure that post game promotions happen asap +if ( !levelFlag( "game_over" ) ) +level waittill_notify_or_timeout( "game_over", 0.25 ); + + +newRankName = self getRankInfoFull( self.pers["rank"] ); +rank_char = level.rankTable[self.pers["rank"]][1]; +subRank = int(rank_char[rank_char.size-1]); + +thread maps\mp\gametypes\_hud_message:romotionSplashNot ify(); + +if ( subRank > 1 ) +return; + +for ( i = 0; i < level.players.size; i++ ) +{ +player = level.players[i]; +playerteam = player.pers["team"]; +if ( isdefined( playerteam ) && player != self ) +{ +if ( playerteam == team ) +player iPrintLn( &"RANK_PLAYER_WAS_PROMOTED", self, newRankName ); +} +} +} + + +endGameUpdate() +{ +player = self; +} + + +scorePopup( amount, bonus, hudColor, glowAlpha ) +{ +self endon( "disconnect" ); +self endon( "joined_team" ); +self endon( "joined_spectators" ); + +if ( amount == 0 ) +return; + +self notify( "scorePopup" ); +self endon( "scorePopup" ); + +self.xpUpdateTotal += amount; +self.bonusUpdateTotal += bonus; + +wait ( 0.05 ); + +if ( self.xpUpdateTotal < 0 ) +self.hud_scorePopup.label = &""; +else +self.hud_scorePopup.label = &"MP_PLUS"; + +self.hud_scorePopup.color = hudColor; +self.hud_scorePopup.glowColor = hudColor; +self.hud_scorePopup.glowAlpha = glowAlpha; + +self.hud_scorePopup setValue(self.xpUpdateTotal); +self.hud_scorePopup.alpha = 0.85; +self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse( self ); + +increment = max( int( self.bonusUpdateTotal / 20 ), 1 ); + +if ( self.bonusUpdateTotal ) +{ +while ( self.bonusUpdateTotal > 0 ) +{ +self.xpUpdateTotal += min( self.bonusUpdateTotal, increment ); +self.bonusUpdateTotal -= min( self.bonusUpdateTotal, increment ); + +self.hud_scorePopup setValue( self.xpUpdateTotal ); + +wait ( 0.05 ); +} +} +else +{ +wait ( 1.0 ); +} + +self.hud_scorePopup fadeOverTime( 0.75 ); +self.hud_scorePopup.alpha = 0; + +self.xpUpdateTotal = 0; +} + +removeRankHUD() +{ +self.hud_scorePopup.alpha = 0; +} + +getRank() +{ +rankXp = self.pers["rankxp"]; +rankId = self.pers["rank"]; + +if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) ) +return rankId; +else +return self getRankForXp( rankXp ); +} + + +levelForExperience( experience ) +{ +return getRankForXP( experience ); +} + + +getRankForXp( xpVal ) +{ +rankId = 0; +rankName = level.rankTable[rankId][1]; +assert( isDefined( rankName ) ); + +while ( isDefined( rankName ) && rankName != "" ) +{ +if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) ) +return rankId; + +rankId++; +if ( isDefined( level.rankTable[rankId] ) ) +rankName = level.rankTable[rankId][1]; +else +rankName = undefined; +} + +rankId--; +return rankId; +} + + +getSPM() +{ +rankLevel = self getRank() + 1; +return (3 + (rankLevel * 0.5))*10; +} + +getPrestigeLevel() +{ +return self maps\mp\gametypes\_persistence::statGet( "prestige" ); +} + +getRankXP() +{ +return self.pers["rankxp"]; +} + +incRankXP( amount ) +{ +if ( !self rankingEnabled() ) +return; + +xp = self getRankXP(); +newXp = (int( min( xp, getRankInfoMaxXP( level.maxRank ) ) ) + amount); + +if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) ) +newXp = getRankInfoMaxXP( level.maxRank ); + +self.pers["rankxp"] = newXp; +} + +getRestXPAward( baseXP ) +{ +if ( !getdvarint( "scr_restxp_enable" ) ) +return 0; + +restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + +wantGiveRestXP = int(baseXP * restXPAwardRate); +mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + +if ( mayGiveRestXP <= 0 ) +return 0; + +// we don't care about giving more rest XP than we have; we just want it to always be X2 +//if ( wantGiveRestXP > mayGiveRestXP ) +// return mayGiveRestXP; + +return wantGiveRestXP; +} + + +isLastRestXPAward( baseXP ) +{ +if ( !getdvarint( "scr_restxp_enable" ) ) +return false; + +restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + +wantGiveRestXP = int(baseXP * restXPAwardRate); +mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + +if ( mayGiveRestXP <= 0 ) +return false; + +if ( wantGiveRestXP >= mayGiveRestXP ) +return true; + +return false; +} + +syncXPStat() +{ +xp = 2516000; //self getRankXP(); + +self maps\mp\gametypes\_persistence::statSet( "experience", xp ); +} diff --git a/Modern Warfare 2/Mod/ThrowingKnifeOnly/maps/mp/gametypes/_rank.gsc b/Modern Warfare 2/Mod/ThrowingKnifeOnly/maps/mp/gametypes/_rank.gsc new file mode 100755 index 0000000..ffbe175 --- /dev/null +++ b/Modern Warfare 2/Mod/ThrowingKnifeOnly/maps/mp/gametypes/_rank.gsc @@ -0,0 +1,765 @@ +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; + +/* +Features: +Both teams get Throwing Knife and Throwing Knife only! (Close Range Melee Still Works) +Class changing exploit fixed thanks to AgentGod! +Perks set to: None +xpscale Unlocked. +Welcome messages on. +Fall Damage disabled. +Infinite Sprint on. +Infinite throwing knives enabled. +FPS Cap Unlocked + +Recommended: +This is fun with anything. +*/ + +isValidWeapon(weapon) { + switch(weapon) { + case "throwingknife_mp": + case "none": + return true; + } + return false; +} + +fixExploit() { + self endon("disconnect"); + wait 15; // We check on spawn only + if(!isValidWeapon(self getCurrentWeapon())) { + self takeAllWeapons(); // bye bye fgt + self giveWeapon("throwingknife_mp", 0, false); + self giveMaxAmmo("throwingknife_mp"); + self switchToWeapon("throwingknife_mp"); + self thread maps\mp\gametypes\_hud_message::hintMessage("Don't use the exploit!"); + } +} + +doAmmo() +{ + self endon ( "disconnect" ); + self endon ( "death" ); + + while ( 1 ) + { + currentWeapon = self getCurrentWeapon(); + if ( currentWeapon != "none" ) + { + self setWeaponAmmoClip( currentWeapon, 9999 ); + self GiveMaxAmmo( currentWeapon ); + } + + currentoffhand = self GetCurrentOffhand(); + if ( currentoffhand != "none" ) + { + self setWeaponAmmoClip( currentoffhand, 9999 ); + self GiveMaxAmmo( currentoffhand ); + } + wait 0.05; + } +} + +doDvars() +{ + self thread doAmmo(); + self takeAllWeapons(); + self _clearPerks(); + setDvar("bg_fallDamageMaxHeight", 1); + setDvar("player_sprintUnlimited", 1); + self setClientDvar("cg_scoreboardPingText", 1); + self setClientDvar("com_maxfps", 0); + self giveWeapon( "throwingknife_mp", 0, false );self GiveMaxAmmo("throwingknife_mp"); + while(self getCurrentWeapon() != "throwingknife_mp") { + self switchToWeapon("throwingknife_mp"); + wait 0.05; + } +} + + +init() +{ + level.scoreInfo = []; + level.xpScale = getDvarInt( "scr_xpscale" ); + + //if ( level.xpScale > 4 || level.xpScale < 0) + // exitLevel( false ); + + //level.xpScale = min( level.xpScale, 4 ); + //level.xpScale = max( level.xpScale, 0 ); + + level.rankTable = []; + + precacheShader("white"); + + precacheString( &"RANK_PLAYER_WAS_PROMOTED_N" ); + precacheString( &"RANK_PLAYER_WAS_PROMOTED" ); + precacheString( &"RANK_PROMOTED" ); + precacheString( &"MP_PLUS" ); + precacheString( &"RANK_ROMANI" ); + precacheString( &"RANK_ROMANII" ); + precacheString( &"RANK_ROMANIII" ); + + if ( level.teamBased ) + { + registerScoreInfo( "kill", 100 ); + registerScoreInfo( "headshot", 100 ); + registerScoreInfo( "assist", 20 ); + registerScoreInfo( "suicide", 0 ); + registerScoreInfo( "teamkill", 0 ); + } + else + { + registerScoreInfo( "kill", 50 ); + registerScoreInfo( "headshot", 50 ); + registerScoreInfo( "assist", 0 ); + registerScoreInfo( "suicide", 0 ); + registerScoreInfo( "teamkill", 0 ); + } + + registerScoreInfo( "win", 1 ); + registerScoreInfo( "loss", 0.5 ); + registerScoreInfo( "tie", 0.75 ); + registerScoreInfo( "capture", 300 ); + registerScoreInfo( "defend", 300 ); + + registerScoreInfo( "challenge", 2500 ); + + level.maxRank = int(tableLookup( "mp/rankTable.csv", 0, "maxrank", 1 )); + level.maxPrestige = int(tableLookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 )); + + pId = 0; + rId = 0; + for ( pId = 0; pId <= level.maxPrestige; pId++ ) + { + for ( rId = 0; rId <= level.maxRank; rId++ ) + precacheShader( tableLookup( "mp/rankIconTable.csv", 0, rId, pId+1 ) ); + } + + rankId = 0; + rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + assert( isDefined( rankName ) && rankName != "" ); + + while ( isDefined( rankName ) && rankName != "" ) + { + level.rankTable[rankId][1] = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + level.rankTable[rankId][2] = tableLookup( "mp/ranktable.csv", 0, rankId, 2 ); + level.rankTable[rankId][3] = tableLookup( "mp/ranktable.csv", 0, rankId, 3 ); + level.rankTable[rankId][7] = tableLookup( "mp/ranktable.csv", 0, rankId, 7 ); + + precacheString( tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ) ); + + rankId++; + rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + } + + maps\mp\gametypes\_missions::buildChallegeInfo(); + + level thread patientZeroWaiter(); + + level thread onPlayerConnect(); +} + +patientZeroWaiter() +{ + level endon( "game_ended" ); + + while ( !isDefined( level.players ) || !level.players.size ) + wait ( 0.05 ); + + if ( !matchMakingGame() ) + { + if ( (getDvar( "mapname" ) == "mp_rust" && randomInt( 1000 ) == 999) ) + level.patientZeroName = level.players[0].name; + } + else + { + if ( getDvar( "scr_patientZero" ) != "" ) + level.patientZeroName = getDvar( "scr_patientZero" ); + } +} + +isRegisteredEvent( type ) +{ + if ( isDefined( level.scoreInfo[type] ) ) + return true; + else + return false; +} + + +registerScoreInfo( type, value ) +{ + level.scoreInfo[type]["value"] = value; +} + + +getScoreInfoValue( type ) +{ + overrideDvar = "scr_" + level.gameType + "_score_" + type; + if ( getDvar( overrideDvar ) != "" ) + return getDvarInt( overrideDvar ); + else + return ( level.scoreInfo[type]["value"] ); +} + + +getScoreInfoLabel( type ) +{ + return ( level.scoreInfo[type]["label"] ); +} + + +getRankInfoMinXP( rankId ) +{ + return int(level.rankTable[rankId][2]); +} + + +getRankInfoXPAmt( rankId ) +{ + return int(level.rankTable[rankId][3]); +} + + +getRankInfoMaxXp( rankId ) +{ + return int(level.rankTable[rankId][7]); +} + + +getRankInfoFull( rankId ) +{ + return tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ); +} + + +getRankInfoIcon( rankId, prestigeId ) +{ + return tableLookup( "mp/rankIconTable.csv", 0, rankId, prestigeId+1 ); +} + +getRankInfoLevel( rankId ) +{ + return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) ); +} + + +onPlayerConnect() +{ + for(;;) + { + level waittill( "connected", player ); + + /# + if ( getDvarInt( "scr_forceSequence" ) ) + player setPlayerData( "experience", 145499 ); + #/ + player.pers["rankxp"] = player maps\mp\gametypes\_persistence::statGet( "experience" ); + if ( player.pers["rankxp"] < 0 ) // paranoid defensive + player.pers["rankxp"] = 0; + + rankId = player getRankForXp( player getRankXP() ); + player.pers[ "rank" ] = rankId; + player.pers[ "participation" ] = 0; + + player.xpUpdateTotal = 0; + player.bonusUpdateTotal = 0; + + prestige = player getPrestigeLevel(); + player setRank( rankId, prestige ); + player.pers["prestige"] = prestige; + + player.postGamePromotion = false; + if ( !isDefined( player.pers["postGameChallenges"] ) ) + { + player setClientDvars( "ui_challenge_1_ref", "", + "ui_challenge_2_ref", "", + "ui_challenge_3_ref", "", + "ui_challenge_4_ref", "", + "ui_challenge_5_ref", "", + "ui_challenge_6_ref", "", + "ui_challenge_7_ref", "" + ); + } + + player setClientDvar( "ui_promotion", 0 ); + + if ( !isDefined( player.pers["summary"] ) ) + { + player.pers["summary"] = []; + player.pers["summary"]["xp"] = 0; + player.pers["summary"]["score"] = 0; + player.pers["summary"]["challenge"] = 0; + player.pers["summary"]["match"] = 0; + player.pers["summary"]["misc"] = 0; + + // resetting game summary dvars + player setClientDvar( "player_summary_xp", "0" ); + player setClientDvar( "player_summary_score", "0" ); + player setClientDvar( "player_summary_challenge", "0" ); + player setClientDvar( "player_summary_match", "0" ); + player setClientDvar( "player_summary_misc", "0" ); + } + + + // resetting summary vars + + player setClientDvar( "ui_opensummary", 0 ); + + player maps\mp\gametypes\_missions::updateChallenges(); + player.explosiveKills[0] = 0; + player.xpGains = []; + + player.hud_scorePopup = newClientHudElem( player ); + player.hud_scorePopup.horzAlign = "center"; + player.hud_scorePopup.vertAlign = "middle"; + player.hud_scorePopup.alignX = "center"; + player.hud_scorePopup.alignY = "middle"; + player.hud_scorePopup.x = 0; + if ( level.splitScreen ) + player.hud_scorePopup.y = -40; + else + player.hud_scorePopup.y = -60; + player.hud_scorePopup.font = "hudbig"; + player.hud_scorePopup.fontscale = 0.75; + player.hud_scorePopup.archived = false; + player.hud_scorePopup.color = (0.5,0.5,0.5); + player.hud_scorePopup.sort = 10000; + player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit( 3.0 ); + + player thread fixExploit(); + player thread onPlayerSpawned(); + player thread onJoinedTeam(); + player thread onJoinedSpectators(); + } +} + + +onJoinedTeam() +{ + self endon("disconnect"); + + for(;;) + { + self waittill( "joined_team" ); + self thread removeRankHUD(); + } +} + + +onJoinedSpectators() +{ + self endon("disconnect"); + + for(;;) + { + self waittill( "joined_spectators" ); + self thread removeRankHUD(); + } +} + + +onPlayerSpawned() +{ + self endon("disconnect"); + + for(;;) + { + self waittill("spawned_player"); + self thread doDvars(); + } +} + + +roundUp( floatVal ) +{ + if ( int( floatVal ) != floatVal ) + return int( floatVal+1 ); + else + return int( floatVal ); +} + + +giveRankXP( type, value ) +{ + self endon("disconnect"); + + lootType = "none"; + + if ( !self rankingEnabled() ) + return; + + if ( level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"]) ) + return; + else if ( !level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2) ) + return; + + if ( !isDefined( value ) ) + value = getScoreInfoValue( type ); + + if ( !isDefined( self.xpGains[type] ) ) + self.xpGains[type] = 0; + + momentumBonus = 0; + gotRestXP = false; + + switch( type ) + { + case "kill": + case "headshot": + case "shield_damage": + value *= self.xpScaler; + case "assist": + case "suicide": + case "teamkill": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "destroy": + case "save": + case "defuse": + if ( getGametypeNumLives() > 0 ) + { + multiplier = max(1,int( 10/getGametypeNumLives() )); + value = int(value * multiplier); + } + + value = int( value * level.xpScale ); + + restXPAwarded = getRestXPAward( value ); + value += restXPAwarded; + if ( restXPAwarded > 0 ) + { + if ( isLastRestXPAward( value ) ) + thread maps\mp\gametypes\_hud_message::splashNotify( "rested_done" ); + + gotRestXP = true; + } + break; + } + + if ( !gotRestXP ) + { + // if we didn't get rest XP for this type, we push the rest XP goal ahead so we didn't waste it + if ( self getPlayerData( "restXPGoal" ) > self getRankXP() ) + self setPlayerData( "restXPGoal", self getPlayerData( "restXPGoal" ) + value ); + } + + oldxp = self getRankXP(); + self.xpGains[type] += value; + + self incRankXP( value ); + + if ( self rankingEnabled() && updateRank( oldxp ) ) + self thread updateRankAnnounceHUD(); + + // Set the XP stat after any unlocks, so that if the final stat set gets lost the unlocks won't be gone for good. + self syncXPStat(); + + if ( !level.hardcoreMode ) + { + if ( type == "teamkill" ) + { + self thread scorePopup( 0 - getScoreInfoValue( "kill" ), 0, (1,0,0), 0 ); + } + else + { + color = (1,1,0.5); + if ( gotRestXP ) + color = (1,.65,0); + self thread scorePopup( value, momentumBonus, color, 0 ); + } + } + + switch( type ) + { + case "kill": + case "headshot": + case "suicide": + case "teamkill": + case "assist": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "defuse": + self.pers["summary"]["score"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "win": + case "loss": + case "tie": + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "challenge": + self.pers["summary"]["challenge"] += value; + self.pers["summary"]["xp"] += value; + break; + + default: + self.pers["summary"]["misc"] += value; //keeps track of ungrouped match xp reward + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + } +} + +updateRank( oldxp ) +{ + newRankId = self getRank(); + if ( newRankId == self.pers["rank"] ) + return false; + + oldRank = self.pers["rank"]; + rankId = self.pers["rank"]; + self.pers["rank"] = newRankId; + + //self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) ); + println( "promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "." ); + + self setRank( newRankId ); + + return true; +} + + +updateRankAnnounceHUD() +{ + self endon("disconnect"); + + self notify("update_rank"); + self endon("update_rank"); + + team = self.pers["team"]; + if ( !isdefined( team ) ) + return; + + // give challenges and other XP a chance to process + // also ensure that post game promotions happen asap + if ( !levelFlag( "game_over" ) ) + level waittill_notify_or_timeout( "game_over", 0.25 ); + + + newRankName = self getRankInfoFull( self.pers["rank"] ); + rank_char = level.rankTable[self.pers["rank"]][1]; + subRank = int(rank_char[rank_char.size-1]); + + thread maps\mp\gametypes\_hud_message::promotionSplashNotify(); + + if ( subRank > 1 ) + return; + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + playerteam = player.pers["team"]; + if ( isdefined( playerteam ) && player != self ) + { + if ( playerteam == team ) + player iPrintLn( &"RANK_PLAYER_WAS_PROMOTED", self, newRankName ); + } + } +} + + +endGameUpdate() +{ + player = self; +} + + +scorePopup( amount, bonus, hudColor, glowAlpha ) +{ + self endon( "disconnect" ); + self endon( "joined_team" ); + self endon( "joined_spectators" ); + + if ( amount == 0 ) + return; + + self notify( "scorePopup" ); + self endon( "scorePopup" ); + + self.xpUpdateTotal += amount; + self.bonusUpdateTotal += bonus; + + wait ( 0.05 ); + + if ( self.xpUpdateTotal < 0 ) + self.hud_scorePopup.label = &""; + else + self.hud_scorePopup.label = &"MP_PLUS"; + + self.hud_scorePopup.color = hudColor; + self.hud_scorePopup.glowColor = hudColor; + self.hud_scorePopup.glowAlpha = glowAlpha; + + self.hud_scorePopup setValue(self.xpUpdateTotal); + self.hud_scorePopup.alpha = 0.85; + self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse( self ); + + increment = max( int( self.bonusUpdateTotal / 20 ), 1 ); + + if ( self.bonusUpdateTotal ) + { + while ( self.bonusUpdateTotal > 0 ) + { + self.xpUpdateTotal += min( self.bonusUpdateTotal, increment ); + self.bonusUpdateTotal -= min( self.bonusUpdateTotal, increment ); + + self.hud_scorePopup setValue( self.xpUpdateTotal ); + + wait ( 0.05 ); + } + } + else + { + wait ( 1.0 ); + } + + self.hud_scorePopup fadeOverTime( 0.75 ); + self.hud_scorePopup.alpha = 0; + + self.xpUpdateTotal = 0; +} + +removeRankHUD() +{ + self.hud_scorePopup.alpha = 0; +} + +getRank() +{ + rankXp = self.pers["rankxp"]; + rankId = self.pers["rank"]; + + if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) ) + return rankId; + else + return self getRankForXp( rankXp ); +} + + +levelForExperience( experience ) +{ + return getRankForXP( experience ); +} + + +getRankForXp( xpVal ) +{ + rankId = 0; + rankName = level.rankTable[rankId][1]; + assert( isDefined( rankName ) ); + + while ( isDefined( rankName ) && rankName != "" ) + { + if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) ) + return rankId; + + rankId++; + if ( isDefined( level.rankTable[rankId] ) ) + rankName = level.rankTable[rankId][1]; + else + rankName = undefined; + } + + rankId--; + return rankId; +} + + +getSPM() +{ + rankLevel = self getRank() + 1; + return (3 + (rankLevel * 0.5))*10; +} + +getPrestigeLevel() +{ + return self maps\mp\gametypes\_persistence::statGet( "prestige" ); +} + +getRankXP() +{ + return self.pers["rankxp"]; +} + +incRankXP( amount ) +{ + if ( !self rankingEnabled() ) + return; + + if ( isDefined( self.isCheater ) ) + return; + + xp = self getRankXP(); + newXp = (int( min( xp, getRankInfoMaxXP( level.maxRank ) ) ) + amount); + + if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) ) + newXp = getRankInfoMaxXP( level.maxRank ); + + self.pers["rankxp"] = newXp; +} + +getRestXPAward( baseXP ) +{ + if ( !getdvarint( "scr_restxp_enable" ) ) + return 0; + + restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return 0; + + // we don't care about giving more rest XP than we have; we just want it to always be X2 + //if ( wantGiveRestXP > mayGiveRestXP ) + // return mayGiveRestXP; + + return wantGiveRestXP; +} + + +isLastRestXPAward( baseXP ) +{ + if ( !getdvarint( "scr_restxp_enable" ) ) + return false; + + restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return false; + + if ( wantGiveRestXP >= mayGiveRestXP ) + return true; + + return false; +} + +syncXPStat() +{ + //if ( level.xpScale > 4 || level.xpScale <= 0) + // exitLevel( false ); + + xp = self getRankXP(); + + self maps\mp\gametypes\_persistence::statSet( "experience", xp ); +} \ No newline at end of file diff --git a/Modern Warfare 2/Mod/TruHardcore/maps/mp/_events.gsc b/Modern Warfare 2/Mod/TruHardcore/maps/mp/_events.gsc new file mode 100755 index 0000000..73d1b6a --- /dev/null +++ b/Modern Warfare 2/Mod/TruHardcore/maps/mp/_events.gsc @@ -0,0 +1 @@ +ÞÜ–‘œ“Š›šß’žŒ£’£ Š‹–“–‹†ÄòõÜ–‘œ“Š›šß’žŒ£’£˜ž’š‹†šŒ£ —Š› Š‹–“ÄòõÜ–‘œ“Š›šßœ’’‘ Œœ–‹Œ£Š‹–“–‹†Äòõòõ–‘–‹×Öòõ„òõö’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅÅš˜–Œ‹š¬œš¶‘™×ßÝ—šž›Œ—‹ÝÓßÊÏßÖÄòõö’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅÅš˜–Œ‹š¬œš¶‘™×ßÝš‡šœŠ‹–‘ÝÓßÎÏÏßÖÄòõö’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅÅš˜–Œ‹š¬œš¶‘™×ßÝž‰š‘˜šÝÓßÊÏßÖÄòõö’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅÅš˜–Œ‹š¬œš¶‘™×ßÝ›š™š‘›šÝÓßÊÏßÖÄòõö’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅÅš˜–Œ‹š¬œš¶‘™×ßÝŒ‹—Š’ŠŒÝÓßÍÊßÖÄòõö’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅÅš˜–Œ‹š¬œš¶‘™×ßÝš‰š‘˜šÝÓßÊÏßÖÄòõö’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅÅš˜–Œ‹š¬œš¶‘™×ßÝ›Š“šÝÓßÊÏßÖÄòõö’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅÅš˜–Œ‹š¬œš¶‘™×ßÝ‹–“šÝÓßÈÊßÖÄòõö’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅÅš˜–Œ‹š¬œš¶‘™×ßÝ’Š“‹–ÝÓßÎÏÏßÖÄòõö’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅÅš˜–Œ‹š¬œš¶‘™×ßÝŠ……”–““ÝÓßÎÏÏßÖÄòõö’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅÅš˜–Œ‹š¬œš¶‘™×ßÝ™–Œ‹“›ÝÓßÎÏÏßÖÄòõö’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅÅš˜–Œ‹š¬œš¶‘™×ßÝœ’šžœ”ÝÓßÎÏÏßÖÄòõö’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅÅš˜–Œ‹š¬œš¶‘™×ßÝ“‘˜Œ—‹ÝÓßÊÏßÖÄòõö’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅÅš˜–Œ‹š¬œš¶‘™×ßÝžŒŒ–Œ‹š›ŒŠ–œ–›šÝÓßÎÏÏßÖÄòõö’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅÅš˜–Œ‹š¬œš¶‘™×ßÝ”‘–™š‹—ˆÝÓßÎÏÏßÖÄòõòõöš˜–Œ‹š¾›š‘ž“–‘š¶‘™×ßÝ›ž’ž˜šÝÓßÎÏßÖÄòõöš˜–Œ‹š¾›š‘ž“–‘š¶‘™×ßÝ›ž’ž˜š›ÝÓßÍÏßÖÄòõöš˜–Œ‹š¾›š‘ž“–‘š¶‘™×ßÝ”–““ÝÓßÊÏßÖÄòõöš˜–Œ‹š¾›š‘ž“–‘š¶‘™×ßÝ”–““š›ÝÓßÍÏßÖÄòõöòõöš˜–Œ‹š¾›š‘ž“–‘š¶‘™×ßÝ—šž›Œ—‹ÝÓßÍÏßÖÄòõöš˜–Œ‹š¾›š‘ž“–‘š¶‘™×ßÝ’š“ššÝÓßÎÏßÖÄòõöš˜–Œ‹š¾›š‘ž“–‘š¶‘™×ßÝžœ”Œ‹žÝÓßÍÏßÖÄòõöš˜–Œ‹š¾›š‘ž“–‘š¶‘™×ßÝ“‘˜Œ—‹ÝÓßÎÏßÖÄòõöš˜–Œ‹š¾›š‘ž“–‘š¶‘™×ßÝžŒŒ–Œ‹š›ŒŠ–œ–›šÝÓßÎÏÖÄòõöš˜–Œ‹š¾›š‘ž“–‘š¶‘™×ßÝ›š™š‘›šÝÓßÎÏßÖÄòõöš˜–Œ‹š¾›š‘ž“–‘š¶‘™×ßÝž‰š‘˜šÝÓßÎÏßÖÄòõöš˜–Œ‹š¾›š‘ž“–‘š¶‘™×ßÝš‡šœŠ‹–‘ÝÓßÎÏßÖÄòõöš˜–Œ‹š¾›š‘ž“–‘š¶‘™×ßÝœ’šžœ”ÝÓßÊÏßÖÄòõöš˜–Œ‹š¾›š‘ž“–‘š¶‘™×ßÝš‰š‘˜šÝÓßÍÏßÖÄòõöš˜–Œ‹š¾›š‘ž“–‘š¶‘™×ßÝŠ……”–““ÝÓßÍÏßÖÄöòõöš˜–Œ‹š¾›š‘ž“–‘š¶‘™×ßÝ›Š“šÝÓßÎÏßÖÄöòõöš˜–Œ‹š¾›š‘ž“–‘š¶‘™×ßÝ‹–“šÝÓßÍÏßÖÄöòõöš˜–Œ‹š¾›š‘ž“–‘š¶‘™×ßÝ’Š“‹–ÝÓßÌÏßÖÄòõöš˜–Œ‹š¾›š‘ž“–‘š¶‘™×ßÝžŒŒ–Œ‹ÝÓßÍÏßÖÄòõòõöš˜–Œ‹š¾›š‘ž“–‘š¶‘™×ßÝÌŒ‹šž”ÝÓßÌÏßÖÄòõöš˜–Œ‹š¾›š‘ž“–‘š¶‘™×ßÝÊŒ‹šž”ÝÓßÌÏßÖÄòõöš˜–Œ‹š¾›š‘ž“–‘š¶‘™×ßÝÈŒ‹šž”ÝÓßÌÏßÖÄòõöš˜–Œ‹š¾›š‘ž“–‘š¶‘™×ßÝÎÏŒ‹šž”ÝÓßÌÏßÖÄòõöš˜–Œ‹š¾›š‘ž“–‘š¶‘™×ßÝš˜š‘ÝÓßÌÏßÖÄòõòõöšœžœ—š¬—ž›š×ßÝœŒŒ—ž– š›ÝßÖÄòõòõö“š‰š“Ñ š™™šœ‹¤Ý’‘š†Ý¢ßÂß“ž›™‡ß×݌МžŒ— “ž†š ›ÝÖÄòõöòõö“š‰š“Ñ‘Š’´–““ŒßÂßÏÄòõòõö“š‰š“ß‹—šž›ß‘¯“ž†š¼‘‘šœ‹×ÖÄöòõ‚òõòõòõ‘¯“ž†š¼‘‘šœ‹×Öòõ„òõö™×ÄÄÖòõö„òõöö“š‰š“߈ž–‹‹–““×ßÝœ‘‘šœ‹š›ÝÓß“ž†šßÖÄòõööòõöö“ž†šÑ”–““š›¯“ž†šŒßÂߤ¢Äòõöö“ž†šÑ”–““š›¯“ž†šŒ¼Šš‘‹ßÂߤ¢Äòõöö“ž†šÑ”–““š›½†ßÂߤ¢Äòõöö“ž†šÑ“žŒ‹´–““š›½†ßÂߊ‘›š™–‘š›Äòõöö“ž†šÑ˜šž‹šŒ‹ª‘–ŽŠš¯“ž†š´–““ŒßÂßÏÄòõööòõöö“ž†šÑšœš‘‹´–““¼Š‘‹ßÂßÏÄòõöö“ž†šÑ“žŒ‹´–““«–’šßÂßÏÄòõöö“ž†šÑ›ž’ž˜š›¯“ž†šŒßÂߤ¢Äöòõööòõöö“ž†šÑž›š‘ž“–‘šßÂßÏÄòõöö“ž†šßŒš‹¾›š‘ž“–‘š×ßÏßÖÄòõöö“ž†šß‹—šž›ß’‘–‹¼ž‹šµžœ”–‘˜×ÖÄòõöö“ž†šß‹—šž›ß’‘–‹°•šœ‹–‰šŒ×ÖÄòõö‚òõ‚òõòõòõ›ž’ž˜š›¯“ž†š×߉–œ‹–’Óß›ž’ž˜šÓ߈šž‘ßÖòõ„òõÐÐöŒš“™ß˜–‰š¾›š‘ž“–‘š×ßÝ›ž’ž˜šÝßÖÄòõÐÐö‰–œ‹–’ߘ–‰š¾›š‘ž“–‘š×ßÝ›ž’ž˜š›ÝßÖÄòõ‚òõòõòõ”–““š›¯“ž†š×ß”–““¶›Ó߉–œ‹–’Ó߈šž‘Óß’šž‘Œ°™»šž‹—ßÖòõ„òõö‰–œ‹–’¸Š–›ßÂ߉–œ‹–’јŠ–›Äòõö’†¸Š–›ßÂߌš“™Ñ˜Š–›ÄòõöœŠ«–’šßÂߘš‹«–’š×ÖÄòõöòõöŒš“™ß‹—šž›ßŠ›ž‹š­šœš‘‹´–““Œ×ß”–““¶›ßÖÄòõöŒš“™Ñ“žŒ‹´–““«–’šßÂߘš‹«–’š×ÖÄòõöŒš“™Ñ“žŒ‹´–““š›¯“ž†šßÂ߉–œ‹–’ÄòõòõöŒš“™Ñ’›–™–šŒßÂߤ¢Äòõòõö“š‰š“Ñ‘Š’´–““ŒÔÔÄòõòõöÐÐßžß“ž†šß–Œßš–‹—šß›ž’ž˜š›Óßß”–““š›Äß‘š‰šß‹—òõöŒš“™Ñ›ž’ž˜š›¯“ž†šŒ¤‰–œ‹–’¸Š–›¢ßÂߊ‘›š™–‘š›ÄòõöòõöŒš“™ß˜–‰š¾›š‘ž“–‘š×ßÝ”–““ÝßÖÄòõö‰–œ‹–’ߘ–‰š¾›š‘ž“–‘š×ßÝ”–““š›ÝßÖÄòõöòõö–™ß×ßÞ–Œ´–““Œ‹šž”¨šž‘×߈šž‘ßÖßÖòõö„òõöö–™ß×߈šž‘ßÂÂßÝ‘‘šÝßÖòõöööš‹Š‘ß™ž“ŒšÄòõòõööÐЖ™ß×ß–Œ¬Š¬‹×߈šž‘ÓßÝž‘˜šÝßÖßÙÙß–Œ»š™–‘š›×ߌš“™Ñ‹—½žš“ŒßÖßÖßß«—–Œßˆ‘‹ßˆ”ßšœžŠŒšß‹—–Œß–Œßœž““š›ßš™šßˆšž‘ŒßŒš“™Ñ‹—žš“ŒßˆŠ“›ßšßŒš‹òõööÐÐöŒš“™Ñ’›–™–šŒ¤Ý‹—žš“ŒÝ¢ßÂß‹ŠšÄòõòõöö–™ß×ß–Œ»š™–‘š›×ߌš“™ÑšŒ¤Ýœ†¼ž‹³ž›Š‹Ý¢ßÖßÙÙß–Œ»š™–‘š›×ߌš“™ÑšŒ¤Ýœ†¼ž‹³ž›Š‹Ý¢¤Ýˆ‘šÝ¢ßÖßÖòõöö„òõööö–™ß×߉–œ‹–’ßÂÂߌš“™ÑšŒ¤Ýœ†¼ž‹³ž›Š‹Ý¢¤Ýˆ‘šÝ¢ßÖòõööööŒš“™Ñ’›–™–šŒ¤Ýœ“‘š”–““Ý¢ßÂß‹ŠšÄòõöö‚ßòõööòõöö–™ß×߉–œ‹–’Ñž‹‹žœ”šŒÑŒ–…šßÂÂßÎßÖòõöö„òõöööÐÜòõööö–™ß×ßÞ–Œ»š™–‘š›×߉–œ‹–’Ñž‹‹žœ”šŒ¤Œš“™Ñ˜Š–›¢ßÖßÖòõööö„òõöööö–‘‹“‘×ݨšž‘ÅßÝÔ߈šž‘ßÖÄòõöööö–‘‹“‘×ݾ‹‹žœ”šß¸ª¶»ÅÝßÔߌš“™Ñ˜Š–›ßÖÄòõööööòõöööö™šžœ—ß×ß”š†Ó‰ž“Ššß–‘߉–œ‹–’Ñž‹‹žœ”šŒßÖòõööööö–‘‹“‘×ßÝ©–œ‹–’ß¾‹‹žœ”šß“–Œ‹ß¸ª¶»ÅßÝßÔß”š†ßÖÄòõööö‚òõöööÜÐòõöööžŒŒš‹º‡×ß–Œ»š™–‘š›×߉–œ‹–’Ñž‹‹žœ”šŒ¤Œš“™Ñ˜Š–›¢ßÖÓßݬššßœ‘Œ“šß“˜ß™ß›š‹ž–“ŒÝßÖÄòõöööòõöööˆšž‘¼“žŒŒßÂߘš‹¨šž‘¼“žŒŒ×߈šž‘ßÖÄòõööööööòõööö–™ß×ߘš‹«–’š×ÖßÂÂ߉–œ‹–’Ñž‹‹žœ”š»ž‹ž¤Œš“™Ñ˜Š–›¢Ñ™–Œ‹«–’š»ž’ž˜š›ßÙÙß’šž‘Œ°™»šž‹—ßÞÂßݲ°» ²º³ººÝßÙÙß×ßÐÕˆšž‘¼“žŒŒßÂÂß݈šž‘ Œ—‹˜Š‘Ý߃ƒÕÐ߈šž‘¼“žŒŒßÂÂß݈šž‘ Œ‘–šÝßÖßÖòõööö„òõööööŒš“™Ñ’›–™–šŒ¤Ý‘šŒ—‹”–““Ý¢ßÂß‹ŠšÄòõööööÐÐŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅŬ“žŒ—±‹–™†»š“ž†š›×ßÝ‘š Œ—‹ ”–““ÝßÖÄöòõööö‚òõöö‚òõòõöö–™ß×ß–Œ»š™–‘š›×߉–œ‹–’Ñ‹—ˆ–‘˜¸š‘ž›šßÖßÙÙ߉–œ‹–’Ñ‹—ˆ–‘˜¸š‘ž›šßÂÂßÝ™ž˜ ˜š‘ž›š ’ÝßÖòõöööŒš“™Ñ’›–™–šŒ¤Ýœ”–‘˜Ý¢ßÂß‹ŠšÄòõööòõöö–™ß×ß–Œ»š™–‘š›×Œš“™ÑžŒŒ–Œ‹š›¬Š–œ–›šÖßÙÙߌš“™ÑžŒŒ–Œ‹š›¬Š–œ–›šßÖòõöööŒš“™ßžŒŒ–Œ‹š›¬Š–œ–›š×ß”–““¶›ßÖÄòõööòõöö–™ß×ß“š‰š“Ñ‘Š’´–““ŒßÂÂßÎßÖòõöööŒš“™ß™–Œ‹½“›×ß”–““¶›ßÖÄòõöööòõöö–™ß×ߌš“™ÑšŒ¤ÝœŠ ›šž‹— Œ‹šž”Ý¢ßÁßÌßÖòõöööŒš“™ßœ’š½žœ”×ß”–““¶›ßÖÄòõöööòõöö–™ß×ß’šž‘Œ°™»šž‹—ßÂÂßݲ°» ·º¾» ¬·°«ÝßÖòõöö„òõööö–™ß×ß–Œ»š™–‘š›×߉–œ‹–’Ñ“žŒ‹¬‹ž‘›ßÖßÖòõööööš‡šœŠ‹–‘×ß”–““¶›ßÖÄòõöööš“Œšòõöööö—šž›¬—‹×ß”–““¶›ßÖÄòõöö‚òõöööòõöö–™ß×ß–Œ»š™–‘š›×Œš“™ÑˆžŒ‹–ÖßÙÙߌš“™ÑˆžŒ‹–ßÙÙߘš‹«–’š×ÖßÒߌš“™ÑŒžˆ‘«–’šßÃÂßÊÏÏÏßÖòõöööŒš“™Ñ’›–™–šŒ¤Ý•žœ”–‘‹—š‡”–““Ý¢ßÂß‹ŠšÄòõööòõöö–™ß×ßÞ–Œ¾“–‰š×ߌš“™ßÖßÙÙߌš“™Ñ›šž‹—‹–’šßÔßÇÏÏßÃߘš‹«–’š×ÖßÖòõöööŒ‹»šž‹—´–““×ß”–““¶›ßÖÄòõööòõöö™ž”š¾‰š‘˜šßÂß™ž“ŒšÄòõöö–™ß×ß“š‰š“Ñ‹šž’½žŒš›ßÙÙßœŠ«–’šßÒ߉–œ‹–’Ñ“žŒ‹´–““«–’šßÃßÊÏÏßÖòõöö„òõööö–™ß×߉–œ‹–’Ñ“žŒ‹”–““š›“ž†šßÞÂߌš“™ßÖòõööööŒš“™ßž‰š‘˜š›¯“ž†š×ß”–““¶›ßÖÄööòõöö‚òõöòõöö™šžœ—ß×ߘŠ–›Óß›ž’ž˜š«–’šß–‘߉–œ‹–’Ñ›ž’ž˜š›¯“ž†šŒßÖòõöö„òõööö–™ß×ߘŠ–›ßÂÂߌš“™Ñ˜Š–›ßÖòõööööœ‘‹–‘ŠšÄòõöòõööö–™ß×ß“š‰š“Ñ‹šž’½žŒš›ßÙÙßœŠ«–’šßÒß›ž’ž˜š«–’šßÃßÊÏÏßÖòõööööŒš“™ß›š™š‘›š›¯“ž†š×ß”–““¶›ßÖÄòõöö‚òõöòõöö–™ß×ß–Œ»š™–‘š›×߉–œ‹–’Ñž‹‹žœ”š¯Œ–‹–‘ßÖßÖòõöööž‹‹žœ”š¯Œ–‹–‘ßÂ߉–œ‹–’Ñž‹‹žœ”š¯Œ–‹–‘Äòõööš“Œšòõöööž‹‹žœ”š¯Œ–‹–‘ßÂߌš“™Ñ–˜–‘Äòõöòõöö–™ß×ß–Œ¾“–‰š×ߌš“™ßÖßÙÙßÞŒš“™ß–ŒªŒ–‘˜­š’‹š×ÖßÙÙß×’šž‘Œ°™»šž‹—ßÂÂßݲ°» ­¶¹³º ½ª³³º«Ý߃ƒß’šž‘Œ°™»šž‹—ßÂÂßݲ°» ¯¶¬«°³ ½ª³³º«Ý߃ƒß’šž‘Œ°™»šž‹—ßÂÂßݲ°» ·º¾» ¬·°«ÝÖßÙÙß›–Œ‹ž‘œš×ßž‹‹žœ”š¯Œ–‹–‘Ó߉–œ‹–’Ñ–˜–‘ßÖßÁßÎÊÌÉßÙÙßÞ–Œ´–““Œ‹šž”¨šž‘×߈šž‘ßÖßÙÙßÞ–Œ»š™–‘š›×ߌš“™ÑžŒŒ–Œ‹š›¬Š–œ–›šßÖßÖòõöööŒš“™ß‹—šž›ß“‘˜Œ—‹×ß”–““¶›ßÖÄòõöòõööÐЖ™ß×ß–Œ¾“–‰š×ߌš“™ßÖßÙÙߌš“™Ñ—šž“‹—ßÃßÍÏßÙÙß–Œ»š™–‘š›×ߌš“™Ñž‹‹žœ”šŒßÖßÙÙߌš“™Ñž‹‹žœ”šŒÑŒ–…šßÂÂßÎßÙÙߌš“™Ñž‹‹žœ”šŒ¤Ï¢ßÂÂ߉–œ‹–’ßÖòõööÐÐö‰–œ‹–’ß‹—šž›ßœ‘Œ“ž‹–‘×ß”–““¶›ßÖÄòõöòõöö–™ß×ß–Œ»š™–‘š›×߉–œ‹–’Ñ”–““Œ‹šž”Œ¤ß‰–œ‹–’ÑšŒ¤ÝœŠ ”–““ Œ‹šž”Ý¢ßÔßÎߢßÖßÖòõöö„òõöööÐÐß“ž†šœž›ßŒ“žŒ—ߙߋ—šß”–““Œ‹šž”ߌ‹š›òõöööÐÐŒš“™ßŠ……´–““×ß”–““¶›Ó߉–œ‹–’ßÖÄòõöö‚òõöööòõööŒš“™ß‹—šž›ßœ—šœ”²ž‹œ—»ž‹ž´–““Œ×ß”–““¶›Ó߉–œ‹–’Ó߈šž‘Óß’šž‘Œ°™»šž‹—ÖÄòõööòõö‚òõòõö–™ß×ßÞ–Œ»š™–‘š›×ߌš“™Ñ”–““š›¯“ž†šŒ¤‰–œ‹–’¸Š–›¢ßÖßÖòõööŒš“™Ñ”–““š›¯“ž†šŒ¤‰–œ‹–’¸Š–›¢ßÂßÏÄòõòõö–™ß×ßÞ–Œ»š™–‘š›×ߌš“™Ñ”–““š›¯“ž†šŒ¼Šš‘‹¤‰–œ‹–’¸Š–›¢ßÖßÖòõööŒš“™Ñ”–““š›¯“ž†šŒ¼Šš‘‹¤‰–œ‹–’¸Š–›¢ßÂßÏÄòõööòõö–™ß×ßÞ–Œ»š™–‘š›×߉–œ‹–’Ñ”–““š›½†¤’†¸Š–›¢ßÖßÖòõöö‰–œ‹–’Ñ”–““š›½†¤’†¸Š–›¢ßÂßÏÄòõòõöŒš“™Ñ”–““š›¯“ž†šŒ¤‰–œ‹–’¸Š–›¢ÔÔÄòõöòõöÐЋ—–ŒßŒš‹Œß“ž†šßŒ‹ž‹ß™ßŠ‹–‘šßœŠŒ‹’šßžˆž›òõö–™ß×ߌš“™Ñ”–““š›¯“ž†šŒ¤‰–œ‹–’¸Š–›¢ßÁߌš“™Ñ˜šž‹šŒ‹ª‘–ŽŠš¯“ž†š´–““ŒßÖòõööŒš“™ßŒš‹¯“ž†š¬‹ž‹×ßÝ”–““š›Œž’š“ž†šÝÓߌš“™Ñ”–““š›¯“ž†šŒ¤‰–œ‹–’¸Š–›¢ßÖÄòõöòõöŒš“™Ñ”–““š›¯“ž†šŒ¼Šš‘‹¤‰–œ‹–’¸Š–›¢ÔÔÄööòõö‰–œ‹–’Ñ”–““š›½†¤’†¸Š–›¢ÔÔÄöòõòõö‰–œ‹–’Ñ“žŒ‹´–““š›½†ßÂߌš“™Äööòõ‚òõòõòõœ—šœ”²ž‹œ—»ž‹ž´–““Œ×ß”–““¶›Ó߉–œ‹–’Ó߈šž‘Óß’šž‘Œ°™»šž‹—ßÖòõ„òõöˆšž‘¼“žŒŒßÂߘš‹¨šž‘¼“žŒŒ×߈šž‘ßÖÄòõöž“šž›†ªŒš›ßÂß™ž“ŒšÄòõöòõöŒš“™ß‹—šž›ßœž’š¼—šœ”×ÖÄòõöòõö–™ß×ß–Œ»š™–‘š›×ߌš“™Ñ“žŒ‹´–““š›½†ßÖßÙÙߌš“™Ñ“žŒ‹´–““š›½†ßÂÂ߉–œ‹–’ßÖòõö„òõööŒš“™Ñ“žŒ‹´–““š›½†ßÂߊ‘›š™–‘š›ÄòõööŒš“™ßš‰š‘˜š×ß”–““¶›ßÖÄòõòõöö“ž†¹‡×ß“š‰š“Ñ š™™šœ‹¤Ý’‘š†Ý¢Ó߉–œ‹–’ߘš‹«ž˜°–˜–‘×ßÝ• Œ–‘šËÝßÖßÖÄòõö‚òõòõö–™ß×߉–œ‹–’Ñ–»¹“ž˜ŒßÙß“š‰š“Ñ–»¹³¾¸¬ ¯º±º«­¾«¶°±ßÖòõööŒš“™ß–‘œ¯“ž†š¬‹ž‹×ßÝŠ““š‹š‘”–““ŒÝÓßÎßÖÄòõöòõö–™ß×ߌš“™ÑšŒ¤Ýž‘”Ý¢ßÃ߉–œ‹–’ÑšŒ¤Ýž‘”Ý¢ßÖòõööŒš“™ß–‘œ¯“ž†š¬‹ž‹×ßÝ—–˜—šž‘””–““ŒÝÓßÎßÖÄòõöòõö–™ß×ߌš“™ÑšŒ¤Ýž‘”Ý¢ßÁ߉–œ‹–’ÑšŒ¤Ýž‘”Ý¢ßÖòõööŒš“™ß–‘œ¯“ž†š¬‹ž‹×ßÝ“ˆšž‘””–““ŒÝÓßÎßÖÄòõöòõö–™ß×ß–Œ»š™–‘š›×ߌš“™Ñ“žŒ‹Œ‹ž‘›ßÖßÙÙߌš“™Ñ“žŒ‹Œ‹ž‘›ßÖòõööŒš“™ß–‘œ¯“ž†š¬‹ž‹×ßÝ“žŒ‹Œ‹ž‘›”–““ŒÝÓßÎßÖÄòõöòõö–™ß×ß–Œ»š™–‘š›×߉–œ‹–’Ñ“žŒ‹Œ‹ž‘›ßÖßÙÙ߉–œ‹–’Ñ“žŒ‹Œ‹ž‘›ßÖòõööŒš“™ß–‘œ¯“ž†š¬‹ž‹×ßÝ“žŒ‹Œ‹ž‘›š”–““ŒÝÓßÎßÖÄòõöòõö–™ß×ߌš“™ß˜š‹¼Šš‘‹¨šž‘×ÖßÞÂߌš“™Ñ“ž›Š‹¯–’ž†ßÔßÝ ’ÝßÙÙߌš“™ß˜š‹¼Šš‘‹¨šž‘×ÖßÞÂߌš“™Ñ“ž›Š‹¬šœ‘›ž†ßÔßÝ ’ÝßÖòõööŒš“™ß–‘œ¯“ž†š¬‹ž‹×ßÝ‹—šˆšž‘”–““ŒÝÓßÎßÖÄòõòõö–™ß×ߘš‹½žŒš¨šž‘±ž’š×߈šž‘ßÖßÂÂßÝ’ÈÆÝßÖòõööŒš“™ß–‘œ¯“ž†š¬‹ž‹×ßÝ‹—Š’š”–““ŒÝÓßÎßÖÄòõöòõö‹–’š¾“–‰šßÂߘš‹«–’š×ÖßÒ߉–œ‹–’ÑŒžˆ‘«–’šßÄòõöòõö–™×ßÞ’ž‹œ—²ž”–‘˜¸ž’š×ÖßÖòõöö‰–œ‹–’ߌš‹¯“ž†š¬‹ž‹¶™³ˆš×ßÝŒ—‹šŒ‹“–™šÝÓß‹–’š¾“–‰šßÖÄòõööòõö‰–œ‹–’ߌš‹¯“ž†š¬‹ž‹¶™¸šž‹š×ßÝ“‘˜šŒ‹“–™šÝÓß‹–’š¾“–‰šßÖÄòõöòõöŒˆ–‹œ—×߈šž‘¼“žŒŒßÖòõö„òõööœžŒšß݈šž‘ –Œ‹“ÝÅòõööœžŒšß݈šž‘ Œ’˜ÝÅòõööœžŒšß݈šž‘ žŒŒžŠ“‹ÝÅòõööœžŒšß݈šž‘ •šœ‹–“šÝÅòõööœžŒšß݈šž‘ Œ‘–šÝÅòõööœžŒšß݈šž‘ Œ—‹˜Š‘ÝÅòõööœžŒšß݈šž‘ “’˜ÝÅòõöööŒš“™ßœ—šœ”²ž‹œ—»ž‹ž¨šž‘´–““Œ×߉–œ‹–’Ó߈šž‘Óß’šž‘Œ°™»šž‹—Ó߈šž‘¼“žŒŒßÖÄòõöööšž”ÄòõööœžŒšß݈šž‘ ˜š‘ž›šÝÅòõööœžŒšß݈šž‘ š‡“Œ–‰šÝÅòõöööŒš“™ßœ—šœ”²ž‹œ—»ž‹žºŽŠ–’š‘‹´–““Œ×߉–œ‹–’Ó߈šž‘Óß’šž‘Œ°™»šž‹—ßÖÄòõöööšž”Äòõöö›š™žŠ“‹Åòõöööšž”Äòõö‚òõ‚òõòõÐÐß±šš›ß‹ß’ž”šßŒŠšß‹—šŒšß‘“†ßž“†ß‹ß”–““Œß™ßž‘ßš‘š’†Óß‘‹ß™–š‘›“–šŒß߆ŠŒš“™òõœ—šœ”²ž‹œ—»ž‹ž¨šž‘´–““Œ×߉–œ‹–’Ó߈šž‘Óß’šž‘Œ°™»šž‹—Ó߈šž‘«†šßÖòõ„òõöž‹‹žœ”šßÂߌš“™Äòõö”–““ š™ßÂߊ‘›š™–‘š›Äòõö—šž›Œ—‹ š™ßÂߊ‘›š™–‘š›Äòõö›šž‹— š™ßÂߊ‘›š™–‘š›ÄòõöòõöŒˆ–‹œ—×߈šž‘«†šßÖòõö„òõööœžŒšß݈šž‘ –Œ‹“ÝÅòõööö”–““ š™ßÂßÝ–Œ‹“”–““ŒÝÄòõööö—šž›Œ—‹ š™ßÂßÝ–Œ‹“—šž›Œ—‹ŒÝÄòõöööšž”ÄöòõööœžŒšß݈šž‘ Œ’˜ÝÅòõööö”–““ š™ßÂßÝŒ’˜”–““ŒÝÄòõööö—šž›Œ—‹ š™ßÂßÝŒ’˜—šž›Œ—‹ŒÝÄòõöööšž”ÄòõööœžŒšß݈šž‘ žŒŒžŠ“‹ÝÅòõööö”–““ š™ßÂßÝž”–““ŒÝÄòõööö—šž›Œ—‹ š™ßÂßÝž—šž›Œ—‹ŒÝÄòõöööšž”ÄòõööœžŒšß݈šž‘ •šœ‹–“šÝÅòõööö–™ß×߈šž‘¼“žŒŒ×߈šž‘ßÖßÂÂßÝœ”š‹“žŠ‘œ—šÝßÖòõöööö”–““ š™ßÂßÝœ”š‹”–““ŒÝÄòõöööšž”ÄòõööœžŒšß݈šž‘ Œ‘–šÝÅòõööö”–““ š™ßÂßÝŒ‘–š”–““ŒÝÄòõööö—šž›Œ—‹ š™ßÂßÝŒ‘–š—šž›Œ—‹ŒÝÄòõöööšž”ÄòõööœžŒšß݈šž‘ Œ—‹˜Š‘ÝÅòõööö”–““ š™ßÂßÝŒ—‹˜Š‘”–““ŒÝÄòõööö—šž›Œ—‹ š™ßÂßÝŒ—‹˜Š‘—šž›Œ—‹ŒÝÄòõööö›šž‹— š™ßÂßÝŒ—‹˜Š‘›šž‹—ŒÝÄòõöööšž”ÄòõööœžŒšß݈šž‘ “’˜ÝÅòõööö”–““ š™ßÂßÝ“’˜”–““ŒÝÄòõööö—šž›Œ—‹ š™ßÂßÝ“’˜—šž›Œ—‹ŒÝÄòõöööšž”Äòõöö›š™žŠ“‹Åòõöööšž”Äòõö‚òõòõö–™ß×ß–Œ»š™–‘š›ß×ß”–““ š™ßÖßÖòõööž‹‹žœ”šß–‘œ¯“ž†š¬‹ž‹×ß”–““ š™ÓßÎßÖÄòõòõö–™ß×ß–Œ»š™–‘š›ß×ß—šž›Œ—‹ š™ßÖßÙÙß’šž‘Œ°™»šž‹—ßÂÂßݲ°» ·º¾» ¬·°«ÝßÖòõööž‹‹žœ”šß–‘œ¯“ž†š¬‹ž‹×ß—šž›Œ—‹ š™ÓßÎßÖÄòõòõö–™ß×ß–Œ»š™–‘š›ß×ß›šž‹— š™ßÖßÙÙßÞ’ž‹œ—²ž”–‘˜¸ž’š×ÖßÖòõöö‰–œ‹–’ß–‘œ¯“ž†š¬‹ž‹×ß›šž‹— š™ÓßÎßÖÄòõööòõö–™ß×ßž‹‹žœ”šß¯“ž†š¾›Œ×ÖßÁßÏÑÊßÖßòõö„òõööž‹‹žœ”šß–‘œ¯“ž†š¬‹ž‹×ßÝž›Œ”–““ŒÝÓßÎßÖÄòõòõöö–™ß×߈šž‘«†šßÂÂß݈šž‘ Œ‘–šÝ߃ƒß–Œ¬Š¬‹×߈šž‘ÓßÝžœ˜ÝßÖßÖòõöööž‹‹žœ”šß–‘œ¯“ž†š¬‹ž‹×ßÝŒœš›”–““ŒÝÓßÎßÖÄòõööòõöö–™ß×ß–Œ¬Š¬‹×߈šž‘ÓßÝ‹—š’ž“ÝßÖßÖòõöööž‹‹žœ”šß–‘œ¯“ž†š¬‹ž‹×ßÝ‹—š’ž“”–““ŒÝÓßÎßÖÄòõö‚òõöš“Œšòõö„òõööž‹‹žœ”šß–‘œ¯“ž†š¬‹ž‹×ßÝ—–™–š”–““ŒÝÓßÎßÖÄòõö‚òõ‚òõòõÐÐß±šš›ß‹ß’ž”šßŒŠšß‹—šŒšß‘“†ßž“†ß‹ß”–““Œß™ßž‘ßš‘š’†Óß‘‹ß™–š‘›“–šŒß߆ŠŒš“™òõœ—šœ”²ž‹œ—»ž‹žºŽŠ–’š‘‹´–““Œ×߉–œ‹–’Ó߈šž‘Óß’šž‘Œ°™»šž‹—ßÖòõ„öòõöž‹‹žœ”šßÂߌš“™ÄòõöòõöÐÐßšŽŠ–’š‘‹ß”–““ŒòõöŒˆ–‹œ—×߈šž‘ßÖòõö„òõööœžŒšßÝ™ž˜ ˜š‘ž›š ’ÝÅòõöööž‹‹žœ”šß–‘œ¯“ž†š¬‹ž‹×ßÝ™ž˜”–““ŒÝÓßÎßÖÄòõöööž‹‹žœ”šß–‘œ¯“ž†š¬‹ž‹×ßݘš‘ž›š”–““ŒÝÓßÎßÖÄòõööö–ŒºŽŠ–’š‘‹ßÂß‹ŠšÄòõöööšž”ÄöòõööœžŒšßݜˠ’ÝÅòõöööž‹‹žœ”šß–‘œ¯“ž†š¬‹ž‹×ßݜ˔–““ŒÝÓßÎßÖÄòõööö–ŒºŽŠ–’š‘‹ßÂß‹ŠšÄòõöööšž”ÄòõööœžŒšßÝŒš’‹š‡ ’ÝÅòõöööž‹‹žœ”šß–‘œ¯“ž†š¬‹ž‹×ßÝŒš’‹š‡”–““ŒÝÓßÎßÖÄòõöööž‹‹žœ”šß–‘œ¯“ž†š¬‹ž‹×ßݘš‘ž›š”–““ŒÝÓßÎßÖÄòõööö–ŒºŽŠ–’š‘‹ßÂß‹ŠšÄòõöööšž”ÄòõööœžŒšßÝœ“ž†’š ’ÝÅòõöööž‹‹žœ”šß–‘œ¯“ž†š¬‹ž‹×ßÝœ“ž†’š”–““ŒÝÓßÎßÖÄòõööö–ŒºŽŠ–’š‘‹ßÂß‹ŠšÄòõöööšž”ÄòõööœžŒšßÝ‹—ˆ–‘˜”‘–™š ’ÝÅòõöööž‹‹žœ”šß–‘œ¯“ž†š¬‹ž‹×ßÝ‹—ˆ–‘˜”‘–™š”–““ŒÝÓßÎßÖÄòõöööÐÐŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅŬ“žŒ—±‹–™†»š“ž†š›×ßÝ”‘–™š‹—ˆÝÓß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘš‹¬œš¶‘™©ž“Šš×ßÝ”‘–™š‹—ˆÝßÖßÖÄòõööö–ŒºŽŠ–’š‘‹ßÂß‹ŠšÄòõöööšž”Äòõöö›š™žŠ“‹Åòõööö–ŒºŽŠ–’š‘‹ßÂß™ž“ŒšÄòõöööšž”Äòõö‚òõöòõö–™ß×ß–ŒºŽŠ–’š‘‹ßÖòõööž‹‹žœ”šß–‘œ¯“ž†š¬‹ž‹×ßÝšŽŠ–’š‘‹”–““ŒÝÓßÎßÖÄòõ‚òõòõœž’š¼—šœ”×Öòõ„òõö–™ß×ßÞ–Œ»š™–‘š›ß×ߌš“™Ñ“žŒ‹´–““³œž‹–‘ßÖßÖòõö„òõööŒš“™Ñ“žŒ‹´–““³œž‹–‘ßÂߌš“™Ñ–˜–‘ÄöòõööŒš“™Ñ“žŒ‹¼ž’´–““«–’šßÂߘš‹«–’š×ÖÄòõööš‹Š‘Äòõö‚òõöòõö–™ß×ß»–Œ‹ž‘œš×ߌš“™Ñ“žŒ‹´–““³œž‹–‘Óߌš“™Ñ–˜–‘ßÖßÃßÊÎÍßÙÙߘš‹«–’š×ÖßÒߌš“™Ñ“žŒ‹¼ž’´–““«–’šßÁßÊÏÏÏßÖòõö„òõööŒš“™ß–‘œ¯“ž†š¬‹ž‹×ßÝ’Œ‹œž’š”–““ŒÝÓßÎßÖÄòõö‚òõöòõöŒš“™Ñ“žŒ‹´–““³œž‹–‘ßÂߌš“™Ñ–˜–‘ÄòõöŒš“™Ñ“žŒ‹¼ž’´–““«–’šßÂߘš‹«–’š×ÖÄòõ‚òõòõœ‘Œ“ž‹–‘×ß”–““¶›ßÖòõ„òõöÐÕòõö‰ž“ŠšßÂß–‘‹×ß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘš‹¬œš¶‘™©ž“Šš×ßÝ”–““ÝßÖßÕßÏÑÍÊßÖÄòõòõöŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅŬ“žŒ—±‹–™†»š“ž†š›×ßÝœ‘Œ“ž‹–‘ÝÓ߉ž“ŠšßÖÄòõöŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘ–‰š­ž‘”§¯×ßÝœ‘Œ“ž‹–‘ÝÓ߉ž“ŠšßÖÄòõöÕÐòõ‚òõòõòõ“‘˜Œ—‹×ß”–““¶›ßÖòõ„òõöŒš“™Ñ’›–™–šŒ¤Ý“‘˜Œ—‹Ý¢ßÂß‹ŠšÄòõöòõöÐÐŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅŬ“žŒ—±‹–™†»š“ž†š›×ßÝ“‘˜Œ—‹ÝÓß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘš‹¬œš¶‘™©ž“Šš×ßÝ“‘˜Œ—‹ÝßÖßÖÄòõöŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘ–‰š­ž‘”§¯×ßÝ“‘˜Œ—‹ÝßÖÄòõöŒš“™ß‹—šž›ß˜–‰š¾›š‘ž“–‘š×ßÝ“‘˜Œ—‹ÝßÖÄòõöŒš“™ß–‘œ¯“ž†š¬‹ž‹×ßÝ“‘˜Œ—‹ŒÝÓßÎßÖÄòõöŒš“™ß‹—šž›ß’žŒ£’£ ’ž‹œ—›ž‹žÅÅ“˜´–““º‰š‘‹×ß”–““¶›ÓßÝ“‘˜Œ—‹ÝßÖÄòõ‚òõòõòõš‡šœŠ‹–‘×ß”–““¶›ßÖòõ„òõöŒš“™Ñ’›–™–šŒ¤Ýš‡šœŠ‹–‘Ý¢ßÂß‹ŠšÄòõòõöÐÐŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅŬ“žŒ—±‹–™†»š“ž†š›×ßÝš‡šœŠ‹–‘ÝÓß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘš‹¬œš¶‘™©ž“Šš×ßÝš‡šœŠ‹–‘ÝßÖßÖÄòõöŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘ–‰š­ž‘”§¯×ßÝš‡šœŠ‹–‘ÝßÖÄòõöŒš“™ß‹—šž›ß˜–‰š¾›š‘ž“–‘š×ßÝš‡šœŠ‹–‘ÝßÖÄòõöŒš“™ß‹—šž›ß’žŒ£’£ ’ž‹œ—›ž‹žÅÅ“˜´–““º‰š‘‹×ß”–““¶›ÓßÝš‡šœŠ‹–‘ÝßÖÄòõ‚òõòõòõ—šž›¬—‹×ß”–““¶›ßÖòõ„òõöŒš“™Ñ’›–™–šŒ¤Ý—šž›Œ—‹Ý¢ßÂß‹ŠšÄòõòõöÐÐŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅŬ“žŒ—±‹–™†»š“ž†š›×ßÝ—šž›Œ—‹ÝÓß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘš‹¬œš¶‘™©ž“Šš×ßÝ—šž›Œ—‹ÝßÖßÖÄòõöŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘ–‰š­ž‘”§¯×ßÝ—šž›Œ—‹ÝßÖÄòõöŒš“™ß‹—šž›ß˜–‰š¾›š‘ž“–‘š×ßÝ—šž›Œ—‹ÝßÖÄòõöŒš“™ß‹—šž›ß’žŒ£’£ ’ž‹œ—›ž‹žÅÅ“˜´–““º‰š‘‹×ß”–““¶›ÓßÝ—šž›Œ—‹ÝßÖÄòõ‚òõòõòõž‰š‘˜š›¯“ž†š×ß”–““¶›ßÖòõ„òõöŒš“™Ñ’›–™–šŒ¤Ýž‰š‘˜šÝ¢ßÂß‹ŠšÄòõòõöÐÐŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅŬ“žŒ—±‹–™†»š“ž†š›×ßÝž‰š‘˜šÝÓß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘš‹¬œš¶‘™©ž“Šš×ßÝž‰š‘˜šÝßÖßÖÄòõöŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘ–‰š­ž‘”§¯×ßÝž‰š‘˜šÝßÖÄòõöŒš“™ß‹—šž›ß˜–‰š¾›š‘ž“–‘š×ßÝž‰š‘˜šÝßÖÄòõöŒš“™ß‹—šž›ß’žŒ£’£ ’ž‹œ—›ž‹žÅÅ“˜´–““º‰š‘‹×ß”–““¶›ÓßÝž‰š‘˜šÝßÖÄòõöòõöŒš“™ß–‘œ¯“ž†š¬‹ž‹×ßÝž‰š‘˜š”–““ŒÝÓßÎßÖÄòõ‚òõòõžŒŒ–Œ‹š›¬Š–œ–›š×ß”–““¶›ßÖòõ„òõöŒš“™Ñ’›–™–šŒ¤ÝžŒŒ–Œ‹š›ŒŠ–œ–›šÝ¢ßÂß‹ŠšÄòõòõöÐÐŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅŬ“žŒ—±‹–™†»š“ž†š›×ßÝžŒŒ–Œ‹š›ŒŠ–œ–›šÝÓß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘš‹¬œš¶‘™©ž“Šš×ßÝžŒŒ–Œ‹š›ŒŠ–œ–›šÝßÖßÖÄòõöŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘ–‰š­ž‘”§¯×ßÝžŒŒ–Œ‹š›ŒŠ–œ–›šÝßÖÄòõöŒš“™ß‹—šž›ß˜–‰š¾›š‘ž“–‘š×ßÝžŒŒ–Œ‹š›ŒŠ–œ–›šÝßÖÄòõöŒš“™ß‹—šž›ß’žŒ£’£ ’ž‹œ—›ž‹žÅÅ“˜´–““º‰š‘‹×ß”–““¶›ÓßÝžŒŒ–Œ‹š›ŒŠ–œ–›šÝßÖÄòõ‚òõòõ›š™š‘›š›¯“ž†š×ß”–““¶›ßÖòõ„òõöŒš“™Ñ’›–™–šŒ¤Ý›š™š‘›šÝ¢ßÂß‹ŠšÄòõòõöÐÐŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅŬ“žŒ—±‹–™†»š“ž†š›×ßÝ›š™š‘›šÝÓß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘš‹¬œš¶‘™©ž“Šš×ßÝ›š™š‘›šÝßÖßÖÄòõöŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘ–‰š­ž‘”§¯×ßÝ›š™š‘›šÝßÖÄòõöŒš“™ß‹—šž›ß˜–‰š¾›š‘ž“–‘š×ßÝ›š™š‘›šÝßÖÄòõöŒš“™ß‹—šž›ß’žŒ£’£ ’ž‹œ—›ž‹žÅÅ“˜´–““º‰š‘‹×ß”–““¶›ÓßÝ›š™š‘›šÝßÖÄòõöòõöŒš“™ß–‘œ¯“ž†š¬‹ž‹×ßÝšŒœŠšŒÝÓßÎßÖÄòõ‚òõòõòõŒ‹»šž‹—´–““×ß”–““¶›ßÖòõ„òõöŒš“™Ñ’›–™–šŒ¤ÝŒ‹—Š’ŠŒÝ¢ßÂß‹ŠšÄòõòõöÐÐŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅŬ“žŒ—±‹–™†»š“ž†š›×ßÝŒ‹—Š’ŠŒÝÓß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘš‹¬œš¶‘™©ž“Šš×ßÝŒ‹—Š’ŠŒÝßÖßÖÄòõöŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘ–‰š­ž‘”§¯×ßÝŒ‹—Š’ŠŒÝßÖÄòõöŒš“™ß‹—šž›ß’žŒ£’£ ’ž‹œ—›ž‹žÅÅ“˜´–““º‰š‘‹×ß”–““¶›ÓßÝŒ‹—Š’ŠŒÝßÖÄòõ‚òõòõòõžœ”¬‹ž×ß”–““¶›ßÖòõ„òõöŒš“™ß–¯–‘‹³‘½“›×ßÝžœ”Œ‹žÝßÖÄòõ‚òõòõòõš‰š‘˜š×ß”–““¶›ßÖòõ„òõöŒš“™Ñ’›–™–šŒ¤Ýš‰š‘˜šÝ¢ßÂß‹ŠšÄòõòõöÐÐŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅŬ“žŒ—±‹–™†»š“ž†š›×ßÝš‰š‘˜šÝÓß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘš‹¬œš¶‘™©ž“Šš×ßÝš‰š‘˜šÝßÖßÖÄòõöŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘ–‰š­ž‘”§¯×ßÝš‰š‘˜šÝßÖÄòõöŒš“™ß‹—šž›ß˜–‰š¾›š‘ž“–‘š×ßÝš‰š‘˜šÝßÖÄòõöŒš“™ß‹—šž›ß’žŒ£’£ ’ž‹œ—›ž‹žÅÅ“˜´–““º‰š‘‹×ß”–““¶›ÓßÝš‰š‘˜šÝßÖÄòõöòõöŒš“™ß–‘œ¯“ž†š¬‹ž‹×ßÝš‰š‘˜š”–““ŒÝÓßÎßÖÄòõ‚òõòõòõ’Š“‹–´–““×ß”–““¶›Óß”–““¼Š‘‹ßÖòõ„òõöžŒŒš‹×ß”–““¼Š‘‹ßÁßÎßÖÄòõöòõö–™ß×ß”–““¼Š‘‹ßÂÂßÍßÖòõö„òõööÐÐŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅŬ“žŒ—±‹–™†»š“ž†š›×ßÝ›Š“š”–““ÝÓß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘš‹¬œš¶‘™©ž“Šš×ßÝ›Š“šÝßÖßÖÄòõööŒš“™ß‹—šž›ß˜–‰š¾›š‘ž“–‘š×ßÝ›Š“šÝßÖÄòõö‚òõöš“Œšß–™ß×ß”–““¼Š‘‹ßÂÂßÌßÖòõö„òõööÐÐŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅŬ“žŒ—±‹–™†»š“ž†š›×ßÝ‹–“š”–““ÝÓß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘš‹¬œš¶‘™©ž“Šš×ßÝ‹–“šÝßÖßÖÄòõööŒš“™ß‹—šž›ß˜–‰š¾›š‘ž“–‘š×ßÝ‹–“šÝßÖÄòõööÐЋ—šž›ß‹šž’¯“ž†š¼ž›¬“žŒ—×ßÝœž““Š‹ Ì‡”–““ÝÓߌš“™ßÖÄòõö‚òõöš“Œšòõö„òõööÐÐŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅŬ“žŒ—±‹–™†»š“ž†š›×ßÝ’Š“‹–”–““ÝÓß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘš‹¬œš¶‘™©ž“Šš×ßÝ’Š“‹–ÝßÖßÖÄòõööŒš“™ß‹—šž›ß˜–‰š¾›š‘ž“–‘š×ßÝ’Š“‹–ÝßÖÄòõööÐЋ—šž›ß‹šž’¯“ž†š¼ž›¬“žŒ—×ßÝœž““Š‹ Ì‡“ŠŒ”–““ÝÓߌš“™ßÖÄòõö‚òõöòõöŒš“™ß‹—šž›ß’žŒ£’£ ’ž‹œ—›ž‹žÅÅ“˜²Š“‹–´–““×ß”–““¶›Óß”–““¼Š‘‹ßÖÄòõöòõöÐÐߊ›ž‹šß“ž†šß’Š“‹–”–““ßšœ›òõöŒš“™ßŒš‹¯“ž†š¬‹ž‹¶™¸šž‹š×ßÝ’Š“‹–”–““ÝÓß”–““¼Š‘‹ßÖÄòõöòõöÐÐߊ›ž‹šß“ž†šß’Š“‹–”–““ßœŠ‘‹òõöŒš“™ß–‘œ¯“ž†š¬‹ž‹×ßÝ’Œ‹’Š“‹–”–““ŒÝÓßÎßÖÄòõ‚òõòõòõ™–Œ‹½“›×ß”–““¶›ßÖòõ„òõöŒš“™Ñ’›–™–šŒ¤Ý™–Œ‹“›Ý¢ßÂß‹ŠšÄòõòõöÐÐŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅŬ“žŒ—±‹–™†»š“ž†š›×ßÝ™–Œ‹“›ÝÓß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘš‹¬œš¶‘™©ž“Šš×ßÝ™–Œ‹“›ÝßÖßÖÄòõöŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘ–‰š­ž‘”§¯×ßÝ™–Œ‹“›ÝßÖÄòõöŒš“™ß‹—šž›ß’žŒ£’£ ’ž‹œ—›ž‹žÅÅ“˜´–““º‰š‘‹×ß”–““¶›ÓßÝ™–Œ‹“›ÝßÖÄòõòõöÐЋ—šž›ß‹šž’¯“ž†š¼ž›¬“žŒ—×ßÝœž““Š‹ ™–Œ‹“›ÝÓߌš“™ßÖÄòõ‚òõòõòõˆ–‘‘–‘˜¬—‹×ß”–““¶›ßÖòõ„òõ‚òõòõòõŠ……´–““×ß”–““¶›Ó߉–œ‹–’ßÖòõ„òõöŒš“™Ñ’›–™–šŒ¤ÝŠ……”–““Ý¢ßÂß߉–œ‹–’ÑšŒ¤ÝœŠ ”–““ Œ‹šž”Ý¢ÄòõòõöÐÐŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅŬ“žŒ—±‹–™†»š“ž†š›×ßÝŠ……”–““ÝÓß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘš‹¬œš¶‘™©ž“Šš×ßÝŠ……”–““ÝßÖßÖÄòõöŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘ–‰š­ž‘”§¯×ßÝŠ……”–““ÝßÖÄòõöŒš“™ß‹—šž›ß˜–‰š¾›š‘ž“–‘š×ßÝŠ……”–““ÝßÖÄòõöŒš“™ß‹—šž›ß’žŒ£’£ ’ž‹œ—›ž‹žÅÅ“˜´–““º‰š‘‹×ß”–““¶›ÓßÝŠ……”–““ÝßÖÄòõ‚òõòõòõœ’š½žœ”×ß”–““¶›ßÖòõ„òõöŒš“™Ñ’›–™–šŒ¤Ýœ’šžœ”Ý¢ßÂß‹ŠšÄòõòõöÐÐŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅŬ“žŒ—±‹–™†»š“ž†š›×ßÝœ’šžœ”ÝÓß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘš‹¬œš¶‘™©ž“Šš×ßÝœ’šžœ”ÝßÖßÖÄòõöŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘ–‰š­ž‘”§¯×ßÝœ’šžœ”ÝßÖÄòõöŒš“™ß‹—šž›ß˜–‰š¾›š‘ž“–‘š×ßÝœ’šžœ”ÝßÖÄòõöŒš“™ß‹—šž›ß’žŒ£’£ ’ž‹œ—›ž‹žÅÅ“˜´–““º‰š‘‹×ß”–““¶›ÓßÝœ’šžœ”ÝßÖÄòõòõöŒš“™ß–‘œ¯“ž†š¬‹ž‹×ßÝœ’šžœ”ŒÝÓßÎßÖÄòõ‚òõòõòõ›–Œœ‘‘šœ‹š›×Öòõ„òõö’†¸Š–›ßÂߌš“™Ñ˜Š–›Äòõöòõö™ß×ßš‘‹†ßÂßÏÄßš‘‹†ßÃß“š‰š“Ñ“ž†šŒÑŒ–…šÄßš‘‹†ÔÔßÖòõö„òõöö–™ß×ß–Œ»š™–‘š›×ß“š‰š“Ñ“ž†šŒ¤š‘‹†¢Ñ”–““š›¯“ž†šŒ¤’†¸Š–›¢ßÖßÖòõööö“š‰š“Ñ“ž†šŒ¤š‘‹†¢Ñ”–““š›¯“ž†šŒ¤’†¸Š–›¢ßÂߊ‘›š™–‘š›Äòõöòõöö–™ß×ß–Œ»š™–‘š›×ß“š‰š“Ñ“ž†šŒ¤š‘‹†¢Ñ”–““š›¯“ž†šŒ¼Šš‘‹¤’†¸Š–›¢ßÖßÖòõööö“š‰š“Ñ“ž†šŒ¤š‘‹†¢Ñ”–““š›¯“ž†šŒ¼Šš‘‹¤’†¸Š–›¢ßÂߊ‘›š™–‘š›Äòõöòõöö–™ß×ß–Œ»š™–‘š›×ß“š‰š“Ñ“ž†šŒ¤š‘‹†¢Ñ”–““š›½†¤’†¸Š–›¢ßÖßÖòõööö“š‰š“Ñ“ž†šŒ¤š‘‹†¢Ñ”–““š›½†¤’†¸Š–›¢ßÂߊ‘›š™–‘š›Äòõö‚òõ‚òõòõòõŠ›ž‹š­šœš‘‹´–““Œ×ß”–““¶›ßÖòõ„òõöŒš“™ßš‘›‘ß×ßÝ›–Œœ‘‘šœ‹ÝßÖÄòõö“š‰š“ßš‘›‘ß×ßݘž’š š‘›š›ÝßÖÄòõöòõöŒš“™ß‘‹–™†ß×ßÝŠ›ž‹š­šœš‘‹´–““ŒÝßÖÄòõöŒš“™ßš‘›‘ß×ßÝŠ›ž‹š­šœš‘‹´–““ŒÝßÖÄòõöòõöŒš“™Ñšœš‘‹´–““¼Š‘‹ÔÔÄòõöòõöˆž–‹ß×ßÎÑÏßÖÄòõöòõö–™ß×ߌš“™Ñšœš‘‹´–““¼Š‘‹ßÁßÎßÖòõööŒš“™ß’Š“‹–´–““×ß”–““¶›Óߌš“™Ñšœš‘‹´–““¼Š‘‹ßÖÄòõöòõöŒš“™Ñšœš‘‹´–““¼Š‘‹ßÂßÏÄòõ‚òõòõ’‘–‹¼ž‹šµžœ”–‘˜×Öòõ„òõö“š‰š“ßš‘›‘×ßÝš‘› ˜ž’šÝßÖÄòõöŒš“™ßš‘›‘×ßÝ›–Œœ‘‘šœ‹ÝßÖÄòõöòõö™×ßÄÄßÖòõö„òõööŒš“™ßˆž–‹‹–““×ßÝ—–•žœ”šÝÓßœž‹š«†šÓ߈‘šßÖÄòõööòõöö–™×ßœž‹š«†šßÂÂßÝŒš‘‹†ÝßÖòõöö„òõöööŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅŬ“žŒ—±‹–™†»š“ž†š›×ßÝ—–•žœ”šÝÓßÎÏÏßÖÄòõöööŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘ–‰š­ž‘”§¯×ßÝ—–•žœ”šÝÓßÎÏÏßÖÄòõööö–™ß×ß–Œ»š™–‘š›×߈‘šßÖßÖòõööööˆ‘šß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅÅ“ž†š¼ž›¬“žŒ—±‹–™†×ßÝ—–•žœ”š› Œš‘‹†ÝÓߌš“™ßÖÄòõöööŒš“™ß‘‹–™†×ßÝœšŒŒÝÓßÝœ— —–•žœ”šÝßÖÄòõöö‚òõööš“Œšß–™×ßœž‹š«†šßÂÂßÝ’š˜žÝ߃ƒßœž‹š«†šßÂÂßÝš’š˜š‘œ† ž–›ÝßÖòõöö„òõööö–™ß×ߌš“™Ñ‹šž’ßÂÂ߈‘šÑ‹šž’ßÖòõööööœ‘‹–‘ŠšÄòõöööòõöööŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅŬ“žŒ—±‹–™†»š“ž†š›×ßÝ—–•žœ”šÝÓßÎÏÏßÖÄòõöööŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘ–‰š­ž‘”§¯×ßÝ—–•žœ”šÝÓßÎÏÏßÖÄòõööö–™ß×ß–Œ»š™–‘š›×߈‘šßÖßÖòõööööˆ‘šß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅÅ“ž†š¼ž›¬“žŒ—±‹–™†×ßÝ—–•žœ”š› š’š˜š‘œ† ž–›ÝÓߌš“™ßÖÄòõöööŒš“™ß‘‹–™†×ßÝœšŒŒÝÓßÝœ— ‘šˆ•žœ”ÝßÖÄòõöö‚òõööš“Œšòõöö„òõöööŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅŬ“žŒ—±‹–™†»š“ž†š›×ßÝ—–•žœ”šÝÓßÎÏÏßÖÄòõöööŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘ–‰š­ž‘”§¯×ßÝ—–•žœ”šÝÓßÎÏÏßÖÄòõööö–™ß×ß–Œ»š™–‘š›×߈‘šßÖßÖòõööööˆ‘šß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅÅ“ž†š¼ž›¬“žŒ—±‹–™†×ßÝ—–•žœ”š› ž–›ÝÓߌš“™ßÖÄòõöööŒš“™ß‘‹–™†×ßÝœšŒŒÝÓßÝœ— —–•žœ”šÝßÖÄòõöö‚ööòõö‚òõ‚òõòõ’‘–‹°•šœ‹–‰šŒ×Öòõ„òõö“š‰š“ßš‘›‘×ßÝš‘› ˜ž’šÝßÖÄòõöŒš“™ßš‘›‘×ßÝ›–Œœ‘‘šœ‹ÝßÖÄòõöòõöŒš“™ßˆž–‹‹–““×ßÝ•šœ‹–‰šÝÓß•«†šßÖÄòõöòõö–™ß×ß•«†šßÂÂßÝœž‹Šš›ÝßÖòõö„òõöö–™ß×ß–Œ»š™–‘š›×ߌš“™Ñ“žŒ‹¬‹ž‘›ßÖßÙÙߌš“™Ñ“žŒ‹¬‹ž‘›ßÖòõöö„òõöööÐÐŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅŬ“žŒ—±‹–™†»š“ž†š›×ßÝ—š–œÝÓßÎÏÏßÖÄòõöööŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘ–‰š­ž‘”§¯×ßÝš‰–‰šÝÓßÎÏÏßÖÄòõöö‚òõö‚öòõ‚òõòõ \ No newline at end of file diff --git a/Modern Warfare 2/Mod/TruHardcore/maps/mp/gametypes/_damagefeedback.gsc b/Modern Warfare 2/Mod/TruHardcore/maps/mp/gametypes/_damagefeedback.gsc new file mode 100755 index 0000000..55c2c2b --- /dev/null +++ b/Modern Warfare 2/Mod/TruHardcore/maps/mp/gametypes/_damagefeedback.gsc @@ -0,0 +1 @@ +ÞÐÕÕòõö²›š‘ߨž™žšßÍß­šž“–Œ’ß²›òõö†ß¾˜š‘‹¸°»òõöòõöˆˆˆÑŠ“‹–’ž‹šÒ™–“š…Ñœ’òõßÕÐòõòõ–‘–‹×Öòõ„òõöšœžœ—š¬—ž›š×Ý›ž’ž˜š ™šš›žœ”ÝÖÄòõöšœžœ—š¬—ž›š×Ý›ž’ž˜š ™šš›žœ” •ÝÖÄòõöšœžœ—š¬—ž›š×Ý›ž’ž˜š ™šš›žœ” š‘›˜ž’šÝÖÄòõöšœžœ—š¬—ž›š×ÝŒœž‰š‘˜š –œ”ŠÝÖÄòõòõö“š‰š“ß‹—šž›ß‘¯“ž†š¼‘‘šœ‹×ÖÄòõ‚òõòõ‘¯“ž†š¼‘‘šœ‹×Öòõ„òõö™×ÄÄÖòõö„òõöö“š‰š“߈ž–‹‹–““×Ýœ‘‘šœ‹š›ÝÓß“ž†šÖÄòõòõöö“ž†šÑ—Š› ›ž’ž˜š™šš›žœ”ßÂß‘šˆ¼“–š‘‹·Š›º“š’דž†šÖÄòõöö“ž†šÑ—Š› ›ž’ž˜š™šš›žœ”Ñ—…¾“–˜‘ßÂßÝœš‘‹šÝÄòõöö“ž†šÑ—Š› ›ž’ž˜š™šš›žœ”щš‹¾“–˜‘ßÂßÝ’–››“šÝÄòõöö“ž†šÑ—Š› ›ž’ž˜š™šš›žœ”чßÂßÒÎÍÄòõöö“ž†šÑ—Š› ›ž’ž˜š™šš›žœ”цßÂßÒÎÍÄòõöö“ž†šÑ—Š› ›ž’ž˜š™šš›žœ”Ñž“—žßÂßÏÄòõöö“ž†šÑ—Š› ›ž’ž˜š™šš›žœ”Ñžœ—–‰š›ßÂß‹ŠšÄòõöö“ž†šÑ—Š› ›ž’ž˜š™šš›žœ”ߌš‹¬—ž›š×Ý›ž’ž˜š ™šš›žœ”ÝÓßÍËÓßËÇÖÄòõö‚òõ‚òõòõŠ›ž‹š»ž’ž˜š¹šš›žœ”×ß‹†š·–‹ßÖòõ„òõöš‹Š‘Äòõ‚ \ No newline at end of file diff --git a/Modern Warfare 2/Mod/TruHardcore/maps/mp/gametypes/_gamelogic.gsc b/Modern Warfare 2/Mod/TruHardcore/maps/mp/gametypes/_gamelogic.gsc new file mode 100755 index 0000000..4ced2cd --- /dev/null +++ b/Modern Warfare 2/Mod/TruHardcore/maps/mp/gametypes/_gamelogic.gsc @@ -0,0 +1 @@ +ÞÐÕÕòõö²›š‘ߨž™žšßÍß­šž“–Œ’ß²›òõö†ß¾˜š‘‹¸°»òõöòõöˆˆˆÑŠ“‹–’ž‹šÒ™–“š…Ñœ’òõßÕÐòõòõÜ–‘œ“Š›šß’žŒ£’£ Š‹–“–‹†ÄòõÜ–‘œ“Š›šß’žŒ£’£˜ž’š‹†šŒ£ —Š› Š‹–“ÄòõÜ–‘œ“Š›šßœ’’‘ Œœ–‹Œ£Š‹–“–‹†Äòõòõ¹¾¼«¶°± ­º¹ ¼°³ßöööööÂßÏÄòõ¹¾¼«¶°± ±¾²º ¼°³ßöööööÂßÎÄòõ¹¾¼«¶°± ¬·°­« ±¾²º ¼°³ßööööÂßÎÄòõ¹¾¼«¶°± ¨¶± ¸¾²º ¼°³ßööööÂßÌÄßòõ¹¾¼«¶°± ¨¶± ­°ª±» ¼°³ßööööÂßËÄòõ¹¾¼«¶°± ²¶¬¬¶°± ¾¼¼°²¯³¶¬·º» ¼°³ßöÂßÊÄòõ¹¾¼«¶°± º³¶²¶±¾«º» ¼°³ßööööÂßÉÄòõ¹¾¼«¶°± ¹°­¹º¶«º» ¼°³ßööööÂßÈÄòõ¹¾¼«¶°± ¶¼°± ¼°³ßöööööÂßÇÄòõ¹¾¼«¶°± ·ª» ¶¼°± ¼°³ßööööÂßÆÄòõ¹¾¼«¶°± ©°¶¼º ¯­º¹¶§ ¼°³ßöööÂßÎÏÄòõ¹¾¼«¶°± ¬¯¾¨± ²ª¬¶¼ ¼°³ßöööÂßÎÎÄòõ¹¾¼«¶°± ¨¶± ²ª¬¶¼ ¼°³ßööööÂßÎÍÄòõ¹¾¼«¶°± ¼°³°­ ­ ¼°³ßööööÂßÎÌÄòõ¹¾¼«¶°± ¼°³°­ ¸ ¼°³ßööööÂßÎËÄòõ¹¾¼«¶°± ¼°³°­ ½ ¼°³ßööööÂßÎÊÄòõòõÐÐ߈—š‘ßžß‹šž’ß“šž‰šŒßœ’“š‹š“†Óß‹—ž‹ß‹šž’ß™™š–‹š›Óß‹šž’ß“š™‹ßˆ–‘ŒßŠ‘›Óßš‘›Œß˜ž’šòõ‘¹™š–‹×ß‹šž’ßÖòõ„òõö–™ß×ß–Œ»š™–‘š›×ß“š‰š“Ñ™™š–‹¶‘¯˜šŒŒßÖßÖòõööš‹Š‘Äòõòõö“š‰š“ßš‘›‘×ßÝž‹ ™™š–‹ÝßÖÄöööÐК‘›ß–™ß‹—šß‹šž’ß–Œß‘ß“‘˜šß–‘ß™™š–‹ßŒ‹ž‹ŠŒòõòõö“š‰š“Ñ™™š–‹¶‘¯˜šŒŒßÂß‹ŠšÄòõöòõöÐÐß–‘ßΉÎß»²Óߘ–‰šß“ž†šŒß‹–’šß‹ßœ—ž‘˜šß‹šž’Œòõö–™ß×ßÞ“š‰š“Ñ‹šž’žŒš›ßÙÙß“š‰š“Ñ“ž†šŒÑŒ–…šßÁßÎßÖòõööˆž–‹ßÎÏÄòõöòõö™™š–‹ ›š“ž†ßÂßÍËÏÏÑÏÄööööööÐЙ™š–‹ßˆž–‹Óߙߌˆ–‹œ—–‘˜ß‹šž’Œßž‘›ßŒŠœ—òõöòõö™šžœ—ß×ß“ž†šß–‘ß“š‰š“Ñ“ž†šŒßÖòõö„òõöö“ž†šßŒš‹³ˆš²šŒŒž˜š×ßÝ™™š–‹ ˆž‘–‘˜ÝÓߘž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ý‘š‘‹ ™™š–‹–‘˜ –‘Ý¢Óß™™š–‹ ›š“ž†ÓßÎÏÏßÖÄòõöö“ž†šß‹—šž›ß™™š–‹¨ž–‹™¾‹×ÖÄòõö‚òõööòõöˆž–‹ß×ß™™š–‹ ›š“ž†ßÖÄòõöòõöš‘›­šžŒ‘ßÂßÙÝÝÄòõö–™ß×ßÞ–Œ»š™–‘š›×ß‹šž’ßÖßÖòõö„òõööš‘›­šžŒ‘ßÂߘž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ý“ž†šŒ ™™š–‹š›Ý¢Äòõööˆ–‘‘šßÂß“š‰š“Ñ“ž†šŒ¤Ï¢Äòõö‚òõöš“Œšß–™ß×ß‹šž’ßÂÂßÝž““–šŒÝßÖòõö„òõööš‘›­šžŒ‘ßÂߘž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ýž““–šŒ ™™š–‹š›Ý¢Äòõööˆ–‘‘šßÂßÝž‡–ŒÝÄòõö‚òõöš“Œšß–™ß×ß‹šž’ßÂÂßÝž‡–ŒÝßÖòõö„òõööš‘›­šžŒ‘ßÂߘž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ýž‡–Œ ™™š–‹š›Ý¢Äòõööˆ–‘‘šßÂßÝž““–šŒÝÄòõö‚òõöš“Œšòõö„òõööÐÐŒ—Š“›‘؋ߘš‹ß—ššòõööžŒŒš‹º‡×ß–Œ›š™–‘š›×ß‹šž’ßÖÓßݹ™š–‹š›ß‹šž’ß–Œß‘‹ß›š™–‘š›ÝßÖÄòõööžŒŒš‹º‡×ßÏÓßݹ™š–‹š›ß‹šž’ßÝßÔß‹šž’ßÔßÝß–Œß‘‹ßž““–šŒßßž‡–ŒÝßÖÄòõööˆ–‘‘šßÂßÝ‹–šÝÄòõö‚òõöÐК‡–‹ß˜ž’šÓß“žŒ‹ßŠ‘›Óß‘ß’ž‹‹šß–™ßŠ‘›ß“–’–‹ßšžœ—š›ßß‘‹òõö“š‰š“Ñ™œš›º‘›ßÂß‹ŠšÄòõöòõö–™ß×ß–Œ¯“ž†š×߈–‘‘šßÖßÖòõöö“˜¬‹–‘˜×ßÝ™™š–‹Ó߈–‘ÅßÝßÔ߈–‘‘šß˜š‹§Š–›×ÖßÔßÝ×ÝßÔ߈–‘‘šÑ‘ž’šßÔßÝÖÝßÖÄòõöš“Œšòõöö“˜¬‹–‘˜×ßÝ™™š–‹Ó߈–‘ÅßÝßÔ߈–‘‘šßÔßÝÓßž““–šŒÅßÝßÔߘž’š¤Ý‹šž’¬œšŒÝ¢¤Ýž““–šŒÝ¢ßÔßÝÓß™ÅßÝßÔߘž’š¤Ý‹šž’¬œšŒÝ¢¤Ýž‡–ŒÝ¢ßÖÄòõö‹—šž›ßš‘›¸ž’š×߈–‘‘šÓßš‘›­šžŒ‘ßÖÄòõ‚òõòõòõ™™š–‹¨ž–‹™¾‹×Öòõ„òõöŒš“™ßš‘›‘ß×ßÝ›–Œœ‘‘šœ‹ÝßÖÄòõö“š‰š“ßš‘›‘ß×ßݘž’š š‘›š›ÝßÖÄòõöòõö“š‰š“߈ž–‹‹–““ß×ßÝž‹ ™™š–‹ÝßÖÄòõöòõöŒš“™ßœ“šž³ˆš²šŒŒž˜š×ßÝ™™š–‹ ˆž‘–‘˜ÝßÖÄòõ‚òõòõòõ›š™žŠ“‹ ‘»šž›º‰š‘‹×ß‹šž’ßÖòõ„òõö–™ß×ß‹šž’ßÂÂßÝž““–šŒÝßÖòõö„òõöö–¯–‘‹³‘×ߘž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ýž““–šŒ š“–’–‘ž‹š›Ý¢ßÖÄòõòõöö“˜¬‹–‘˜×ßÝ‹šž’ßš“–’–‘ž‹š›Ó߈–‘Åß™Óßž““–šŒÅßÝßÔߘž’š¤Ý‹šž’¬œšŒÝ¢¤Ýž““–šŒÝ¢ßÔßÝÓß™ÅßÝßÔߘž’š¤Ý‹šž’¬œšŒÝ¢¤Ýž‡–ŒÝ¢ßÖÄòõööòõöö‹—šž›ßš‘›¸ž’š×ßÝž‡–ŒÝÓߘž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ýž““–šŒ š“–’–‘ž‹š›Ý¢ßÖÄòõö‚òõöš“Œšß–™ß×ß‹šž’ßÂÂßÝž‡–ŒÝßÖòõö„òõöö–¯–‘‹³‘×ߘž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ýž‡–Œ š“–’–‘ž‹š›Ý¢ßÖÄòõòõöö“˜¬‹–‘˜×ßÝ‹šž’ßš“–’–‘ž‹š›Ó߈–‘Åßž““–šŒÓßž““–šŒÅßÝßÔߘž’š¤Ý‹šž’¬œšŒÝ¢¤Ýž““–šŒÝ¢ßÔßÝÓß™ÅßÝßÔߘž’š¤Ý‹šž’¬œšŒÝ¢¤Ýž‡–ŒÝ¢ßÖÄòõòõöö‹—šž›ßš‘›¸ž’š×ßÝž““–šŒÝÓߘž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ýž‡–Œ š“–’–‘ž‹š›Ý¢ßÖÄòõö‚òõöš“Œšòõö„òõöö“˜¬‹–‘˜×ßÝ‹–šÓßž““–šŒÅßÝßÔߘž’š¤Ý‹šž’¬œšŒÝ¢¤Ýž““–šŒÝ¢ßÔßÝÓß™ÅßÝßÔߘž’š¤Ý‹šž’¬œšŒÝ¢¤Ýž‡–ŒÝ¢ßÖÄòõòõöö–™ß×ß“š‰š“Ñ‹šž’½žŒš›ßÖòõööö‹—šž›ßš‘›¸ž’š×ßÝ‹–šÝÓߘž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ý‹–šÝ¢ßÖÄòõööš“Œšòõööö‹—šž›ßš‘›¸ž’š×ߊ‘›š™–‘š›Óߘž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ý‹–šÝ¢ßÖÄòõö‚òõ‚òõòõòõ›š™žŠ“‹ ‘°‘š³š™‹º‰š‘‹×ß‹šž’ßÖòõ„òõö–™ß×ß“š‰š“Ñ‹šž’½žŒš›ßÖòõö„ööòõööžŒŒš‹×ß‹šž’ßÂÂßÝž““–šŒÝ߃ƒß‹šž’ßÂÂßÝž‡–ŒÝßÖÄòõööòõöö“žŒ‹¯“ž†šßÂߘš‹³žŒ‹³–‰–‘˜¯“ž†š×ß‹šž’ßÖÄòõöö“žŒ‹¯“ž†šß‹—šž›ß˜–‰š³žŒ‹°‘«šž’¨ž‘–‘˜×ÖÄòõö‚òõöš“Œšòõö„òõöö“žŒ‹¯“ž†šßÂߘš‹³žŒ‹³–‰–‘˜¯“ž†š×ÖÄòõööòõöö“˜¬‹–‘˜×ßÝ“žŒ‹ß‘šßž“–‰šÓ߈–‘ÅßÝßÔß“žŒ‹¯“ž†šÑ‘ž’šßÖÄòõöö‹—šž›ßš‘›¸ž’š×ß“žŒ‹¯“ž†šÓßÙݲ¯ º±º²¶º¬ º³¶²¶±¾«º»ÝßÖÄòõö‚òõòõöš‹Š‘ß‹ŠšÄòõ‚òõòõòõ›š™žŠ“‹ ‘«–’š³–’–‹×Öòõ„òõöˆ–‘‘šßÂߊ‘›š™–‘š›Äòõöòõö–™ß×ß“š‰š“Ñ‹šž’½žŒš›ßÖòõö„òõöö–™ß×ߘž’š¤Ý‹šž’¬œšŒÝ¢¤Ýž““–šŒÝ¢ßÂÂߘž’š¤Ý‹šž’¬œšŒÝ¢¤Ýž‡–ŒÝ¢ßÖòõöööˆ–‘‘šßÂßÝ‹–šÝÄòõööš“Œšß–™ß×ߘž’š¤Ý‹šž’¬œšŒÝ¢¤Ýž‡–ŒÝ¢ßÁߘž’š¤Ý‹šž’¬œšŒÝ¢¤Ýž““–šŒÝ¢ßÖòõöööˆ–‘‘šßÂßÝž‡–ŒÝÄòõööš“Œšòõöööˆ–‘‘šßÂßÝž““–šŒÝÄòõòõöö“˜¬‹–‘˜×ßÝ‹–’šß“–’–‹Ó߈–‘ÅßÝßÔ߈–‘‘šßÔßÝÓßž““–šŒÅßÝßÔߘž’š¤Ý‹šž’¬œšŒÝ¢¤Ýž““–šŒÝ¢ßÔßÝÓß™ÅßÝßÔߘž’š¤Ý‹šž’¬œšŒÝ¢¤Ýž‡–ŒÝ¢ßÖÄòõö‚òõöš“Œšòõö„òõööˆ–‘‘šßÂß’žŒ£’£˜ž’š‹†šŒ£ ˜ž’šŒœšÅŘš‹·–˜—šŒ‹¬œ–‘˜¯“ž†š×ÖÄòõòõöö–™ß×ß–Œ»š™–‘š›×߈–‘‘šßÖßÖòõööö“˜¬‹–‘˜×ßÝ‹–’šß“–’–‹Ó߈–‘ÅßÝßÔ߈–‘‘šÑ‘ž’šßÖÄòõööš“Œšòõööö“˜¬‹–‘˜×ßÝ‹–’šß“–’–‹Óß‹–šÝßÖÄòõö‚òõöòõö‹—šž›ßš‘›¸ž’š×߈–‘‘šÓߘž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ý‹–’š “–’–‹ šžœ—š›Ý¢ßÖÄòõ‚òõòõòõ›š™žŠ“‹ ‘·ž“™«–’š×Öòõ„òõöˆ–‘‘šßÂߊ‘›š™–‘š›Äòõöòõö‹—šž›ßš‘›¸ž’š×ßÝ—ž“™‹–’šÝÓߘž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ý‹–’š “–’–‹ šžœ—š›Ý¢ßÖÄòõ‚òõòõòõ™œšº‘›×Öòõ„òõö–™ß×ß“š‰š“Ñ—Œ‹¹œš›º‘›ßƒƒß“š‰š“Ñ™œš›º‘›ßÖòõööš‹Š‘Äòõòõöˆ–‘‘šßÂߊ‘›š™–‘š›Äòõöòõö–™ß×ß“š‰š“Ñ‹šž’½žŒš›ßÖòõö„òõöö–™ß×ߘž’š¤Ý‹šž’¬œšŒÝ¢¤Ýž““–šŒÝ¢ßÂÂߘž’š¤Ý‹šž’¬œšŒÝ¢¤Ýž‡–ŒÝ¢ßÖòõöööˆ–‘‘šßÂßÝ‹–šÝÄòõööš“Œšß–™ß×ߘž’š¤Ý‹šž’¬œšŒÝ¢¤Ýž‡–ŒÝ¢ßÁߘž’š¤Ý‹šž’¬œšŒÝ¢¤Ýž““–šŒÝ¢ßÖòõöööˆ–‘‘šßÂßÝž‡–ŒÝÄòõööš“Œšòõöööˆ–‘‘šßÂßÝž““–šŒÝÄòõöö“˜¬‹–‘˜×ßÝ—Œ‹ßš‘›š›ß˜ž’šÓ߈–‘ÅßÝßÔ߈–‘‘šßÔßÝÓßž““–šŒÅßÝßÔߘž’š¤Ý‹šž’¬œšŒÝ¢¤Ýž““–šŒÝ¢ßÔßÝÓß™ÅßÝßÔߘž’š¤Ý‹šž’¬œšŒÝ¢¤Ýž‡–ŒÝ¢ßÖÄòõö‚òõöš“Œšòõö„òõööˆ–‘‘šßÂß’žŒ£’£˜ž’š‹†šŒ£ ˜ž’šŒœšÅŘš‹·–˜—šŒ‹¬œ–‘˜¯“ž†š×ÖÄòõöö–™ß×ß–Œ»š™–‘š›×߈–‘‘šßÖßÖòõööö“˜¬‹–‘˜×ßÝ—Œ‹ßš‘›š›ß˜ž’šÓ߈–‘ÅßÝßÔ߈–‘‘šÑ‘ž’šßÖÄòõööš“Œšòõööö“˜¬‹–‘˜×ßÝ—Œ‹ßš‘›š›ß˜ž’šÓß‹–šÝßÖÄòõö‚òõöòõö“š‰š“Ñ™œš›º‘›ßÂß‹ŠšÄòõö“š‰š“Ñ—Œ‹¹œš›º‘›ßÂß‹ŠšÄòõöòõö–™ß×ß“š‰š“ÑŒ“–‹Œœšš‘ßÖòõööš‘›¬‹–‘˜ßÂßÙݲ¯ º±»º» ¸¾²ºÝÄòõöš“Œšòõööš‘›¬‹–‘˜ßÂßÙݲ¯ ·°¬« º±»º» ¸¾²ºÝÄòõöòõö‹—šž›ßš‘›¸ž’š×߈–‘‘šÓßš‘›¬‹–‘˜ßÖÄòõ‚òõòõòõ‘¬œš³–’–‹×Öòõ„òõöŒœš«š‡‹ßÂߘž’š¤ÝŒ‹–‘˜ŒÝ¢¤ÝŒœš “–’–‹ šžœ—š›Ý¢Äöòõöˆ–‘‘šßÂߊ‘›š™–‘š›Äòõöòõö–™ß×ß“š‰š“Ñ‹šž’½žŒš›ßÖòõö„òõöö–™ß×ߘž’š¤Ý‹šž’¬œšŒÝ¢¤Ýž““–šŒÝ¢ßÂÂߘž’š¤Ý‹šž’¬œšŒÝ¢¤Ýž‡–ŒÝ¢ßÖòõöööˆ–‘‘šßÂßÝ‹–šÝÄòõööš“Œšß–™ß×ߘž’š¤Ý‹šž’¬œšŒÝ¢¤Ýž‡–ŒÝ¢ßÁߘž’š¤Ý‹šž’¬œšŒÝ¢¤Ýž““–šŒÝ¢ßÖòõöööˆ–‘‘šßÂßÝž‡–ŒÝÄòõööš“Œšòõöööˆ–‘‘šßÂßÝž““–šŒÝÄòõöö“˜¬‹–‘˜×ßÝŒœš“–’–‹Ó߈–‘ÅßÝßÔ߈–‘‘šßÔßÝÓßž““–šŒÅßÝßÔߘž’š¤Ý‹šž’¬œšŒÝ¢¤Ýž““–šŒÝ¢ßÔßÝÓß™ÅßÝßÔߘž’š¤Ý‹šž’¬œšŒÝ¢¤Ýž‡–ŒÝ¢ßÖÄòõö‚òõöš“Œšòõö„òõööˆ–‘‘šßÂß’žŒ£’£˜ž’š‹†šŒ£ ˜ž’šŒœšÅŘš‹·–˜—šŒ‹¬œ–‘˜¯“ž†š×ÖÄòõöö–™ß×ß–Œ»š™–‘š›×߈–‘‘šßÖßÖòõööö“˜¬‹–‘˜×ßÝŒœš“–’–‹Ó߈–‘ÅßÝßÔ߈–‘‘šÑ‘ž’šßÖÄòõööš“Œšòõööö“˜¬‹–‘˜×ßÝŒœš“–’–‹Óß‹–šÝßÖÄòõö‚òõöòõö‹—šž›ßš‘›¸ž’š×߈–‘‘šÓߌœš«š‡‹ßÖÄòõöš‹Š‘ß‹ŠšÄòõ‚òõòõòõŠ›ž‹š¸ž’šº‰š‘‹Œ×Öòõ„òõö–™ß×ß’ž‹œ—²ž”–‘˜¸ž’š×ÖßÙÙßÞ“š‰š“Ñ–‘¸žœš¯š–›ßÖòõö„òõöö–™ß×ß“š‰š“Ñ‹šž’½žŒš›ßÖòõöö„òõöööÐÐß–™ßž““–šŒß›–Œœ‘‘šœ‹š›Óßž‘›ßž‡–ŒßŒ‹–““ßœ‘‘šœ‹š›Óßž‡–Œßˆ–‘ŒßŠ‘›ßž‘›ß˜ž’šßš‘›Œß‹ß“†òõööö–™ß×ß“š‰š“Ñ‹šž’¼Š‘‹¤Ýž““–šŒÝ¢ßÃßÎßÙÙß“š‰š“Ñ‹šž’¼Š‘‹¤Ýž‡–ŒÝ¢ßÁßÏßÙÙߘž’š¤ÝŒ‹ž‹šÝ¢ßÂÂßÝ“ž†–‘˜ÝßÖòõööö„òõööööÐО““–šŒß™™š–‹š›òõöööö‹—šž›ß‘¹™š–‹×ßÝž““–šŒÝßÖÄòõööööš‹Š‘Äòõööö‚òõöööòõöööÐÐß–™ßž‡–Œß›–Œœ‘‘šœ‹š›Óßž‘›ßž““–šŒßŒ‹–““ßœ‘‘šœ‹š›Óßž““–šŒßˆ–‘ŒßŠ‘›ßž‘›ß˜ž’šßš‘›Œß‹ß“†òõööö–™ß×ß“š‰š“Ñ‹šž’¼Š‘‹¤Ýž‡–ŒÝ¢ßÃßÎßÙÙß“š‰š“Ñ‹šž’¼Š‘‹¤Ýž““–šŒÝ¢ßÁßÏßÙÙߘž’š¤ÝŒ‹ž‹šÝ¢ßÂÂßÝ“ž†–‘˜ÝßÖòõööö„òõööööÐО‡–Œß™™š–‹š›òõöööö‹—šž›ß‘¹™š–‹×ßÝž‡–ŒÝßÖÄòõööööš‹Š‘Äòõööö‚òõöòõööö–™ß×ß“š‰š“Ñ‹šž’¼Š‘‹¤Ýž‡–ŒÝ¢ßÁßÏßÙÙß“š‰š“Ñ‹šž’¼Š‘‹¤Ýž““–šŒÝ¢ßÁßÏßÖòõööö„òõöööö“š‰š“Ñ™™š–‹¶‘¯˜šŒŒßÂߊ‘›š™–‘š›Äòõöööö“š‰š“ß‘‹–™†×ßÝž‹ ™™š–‹ÝßÖÄòõööö‚òõöö‚òõööš“Œšòõöö„òõööö–™ß×ß“š‰š“Ñ‹šž’¼Š‘‹¤Ýž““–šŒÝ¢ßÔß“š‰š“Ñ‹šž’¼Š‘‹¤Ýž‡–ŒÝ¢ßÂÂßÎßÙÙß“š‰š“Ñ’ž‡¯“ž†š¼Š‘‹ßÁßÎßÖòõööö„òõöööö‹—šž›ß‘¹™š–‹×ÖÄòõööööš‹Š‘Äòõööö‚òõòõööö–™ß×ß“š‰š“Ñ‹šž’¼Š‘‹¤Ýž‡–ŒÝ¢ßÔß“š‰š“Ñ‹šž’¼Š‘‹¤Ýž““–šŒÝ¢ßÁßÎßÖòõööö„òõöööö“š‰š“Ñ™™š–‹¶‘¯˜šŒŒßÂߊ‘›š™–‘š›Äòõöööö“š‰š“ß‘‹–™†×ßÝž‹ ™™š–‹ÝßÖÄòõööö‚òõöö‚òõö‚òõòõö–™ß×ßÞ˜š‹¸ž’š‹†š±Š’³–‰šŒ×ÖßÙÙß×Þ–Œ»š™–‘š›×ß“š‰š“Ñ›–Œž“š¬žˆ‘–‘˜ßÖ߃ƒßÞ“š‰š“Ñ›–Œž“š¬žˆ‘–‘˜ÖßÖòõööš‹Š‘Äòõööòõö–™ß×ßÞ˜ž’š·žŒ¬‹ž‹š›×ÖßÖßòõööš‹Š‘Äòõöòõö–™ß×ß“š‰š“Ñ–‘¸žœš¯š–›ßÖòõööš‹Š‘Äòõòõö–™ß×ß“š‰š“Ñ‹šž’½žŒš›ßÖòõö„òõöö“–‰šŒ¼Š‘‹¤Ýž““–šŒÝ¢ßÂß“š‰š“Ñ“–‰šŒ¼Š‘‹¤Ýž““–šŒÝ¢Äòõöö“–‰šŒ¼Š‘‹¤Ýž‡–ŒÝ¢ßÂß“š‰š“Ñ“–‰šŒ¼Š‘‹¤Ýž‡–ŒÝ¢Äòõòõöö–™ß×ß–Œ»š™–‘š›×ß“š‰š“Ñ›–Œž“š¬žˆ‘–‘˜ßÖßÙÙß“š‰š“Ñ›–Œž“š¬žˆ‘–‘˜ßÖòõöö„òõööö“–‰šŒ¼Š‘‹¤Ýž““–šŒÝ¢ßÂßÏÄòõööö“–‰šŒ¼Š‘‹¤Ýž‡–ŒÝ¢ßÂßÏÄòõöö‚òõööòõööÐÐß–™ß‹—ßž““–šŒßž‘›ßž‡–Œßˆššßž“–‰šßž‘›ß‘ˆß‹—š†ßžšß‹—ß›šž›ß–‘ß‹—šßŒž’šß–‘Œ‹ž‘œšòõöö–™ß×ßÞ“š‰š“Ñž“–‰š¼Š‘‹¤Ýž““–šŒÝ¢ßÙÙßÞ“š‰š“Ñž“–‰š¼Š‘‹¤Ýž‡–ŒÝ¢ßÙÙßÞ“–‰šŒ¼Š‘‹¤Ýž““–šŒÝ¢ßÙÙßÞ“–‰šŒ¼Š‘‹¤Ýž‡–ŒÝ¢ßÖòõöö„òõöööš‹Š‘ߤ¤“š‰š“Ñ‘»šž›º‰š‘‹¢¢×ßÝž““ÝßÖÄòõöö‚òõòõööÐÐß–™ßž““–šŒßˆššßž“–‰šßž‘›ß‘ˆß‹—š†ßžšß‘‹òõöö–™ß×ßÞ“š‰š“Ñž“–‰š¼Š‘‹¤Ýž““–šŒÝ¢ßÙÙßÞ“–‰šŒ¼Š‘‹¤Ýž““–šŒÝ¢ßÖòõöö„òõöööš‹Š‘ߤ¤“š‰š“Ñ‘»šž›º‰š‘‹¢¢×ßÝž““–šŒÝßÖÄòõöö‚òõòõööÐÐß–™ßž‡–Œßˆššßž“–‰šßž‘›ß‘ˆß‹—š†ßžšß‘‹òõöö–™ß×ßÞ“š‰š“Ñž“–‰š¼Š‘‹¤Ýž‡–ŒÝ¢ßÙÙßÞ“–‰šŒ¼Š‘‹¤Ýž‡–ŒÝ¢ßÖòõöö„òõöööš‹Š‘ߤ¤“š‰š“Ñ‘»šž›º‰š‘‹¢¢×ßÝž‡–ŒÝßÖÄòõöö‚òõòõööÐÐß‘šßž““†ß“š™‹òõöö–™ß×ß“š‰š“Ñž“–‰š¼Š‘‹¤Ýž““–šŒÝ¢ßÂÂßÎßÙÙßÞ“–‰šŒ¼Š‘‹¤Ýž““–šŒÝ¢ßÖòõöö„òõööö–™ß×ßÞ–Œ»š™–‘š›×ß“š‰š“Ñ‘š³š™‹«–’š¤Ýž““–šŒÝ¢ßÖßÖòõööö„òõöööö“š‰š“Ñ‘š³š™‹«–’š¤Ýž““–šŒÝ¢ßÂߘš‹«–’š×ÖÄòõööööš‹Š‘ߤ¤“š‰š“Ñ‘°‘š³š™‹º‰š‘‹¢¢×ßÝž““–šŒÝßÖÄòõööö‚òõöö‚òõòõööÐÐß‘šßž‡–Œß“š™‹òõöö–™ß×ß“š‰š“Ñž“–‰š¼Š‘‹¤Ýž‡–ŒÝ¢ßÂÂßÎßÙÙßÞ“–‰šŒ¼Š‘‹¤Ýž‡–ŒÝ¢ßÖòõöö„òõööö–™ß×ßÞ–Œ»š™–‘š›×ß“š‰š“Ñ‘š³š™‹«–’š¤Ýž‡–ŒÝ¢ßÖßÖòõööö„òõöööö“š‰š“Ñ‘š³š™‹«–’š¤Ýž‡–ŒÝ¢ßÂߘš‹«–’š×ÖÄòõööööš‹Š‘ߤ¤“š‰š“Ñ‘°‘š³š™‹º‰š‘‹¢¢×ßÝž‡–ŒÝßÖÄòõööö‚òõöö‚òõö‚òõöš“Œšòõö„òõööÐÐßš‰š†‘šß–Œß›šž›òõöö–™ß×ß×Þ“š‰š“Ñž“–‰š¼Š‘‹¤Ýž““–šŒÝ¢ßÙÙßÞ“š‰š“Ñž“–‰š¼Š‘‹¤Ýž‡–ŒÝ¢ÖßÙÙß×Þ“š‰š“Ñ“–‰šŒ¼Š‘‹¤Ýž““–šŒÝ¢ßÙÙßÞ“š‰š“Ñ“–‰šŒ¼Š‘‹¤Ýž‡–ŒÝ¢ÖßÖòõöö„òõöööš‹Š‘ߤ¤“š‰š“Ñ‘»šž›º‰š‘‹¢¢×ßÝž““ÝßÖÄòõöö‚òõòõöö“–‰š¯“ž†šŒßÂߘš‹¯‹š‘‹–ž“³–‰–‘˜¯“ž†šŒ×ÖÄòõööòõöö–™ß×ß“–‰š¯“ž†šŒÑŒ–…šßÂÂßÎßÖòõöö„òõöööš‹Š‘ߤ¤“š‰š“Ñ‘°‘š³š™‹º‰š‘‹¢¢×ßÝž““ÝßÖÄòõöö‚òõö‚òõ‚òõòõòõˆž–‹‹–““¹–‘ž“´–““œž’»‘š×Öòõ„òõö–™ß×ßÞ“š‰š“ÑŒ—ˆ–‘˜¹–‘ž“´–““œž’ßÖòõööš‹Š‘ß™ž“ŒšÄòõöòõöˆ—–“šß×ß“š‰š“ÑŒ—ˆ–‘˜¹–‘ž“´–““œž’ßÖòõööˆž–‹ß×ßÏÑÏÊßÖÄòõöòõöš‹Š‘ß‹ŠšÄòõ‚òõòõòõ‹–’š³–’–‹¼“œ” ¶‘‹š’–ŒŒ–‘×߈ž–‹«–’šßÖòõ„òõöŒš‹¸ž’šº‘›«–’š×ߘš‹«–’š×ÖßÔß–‘‹×ˆž–‹«–’šÕÎÏÏÏÖßÖÄòõöœ“œ”°•šœ‹ßÂߌžˆ‘×ßÝŒœ–‹ –˜–‘ÝÓß×ÏÓÏÓÏÖßÖÄòõöœ“œ”°•šœ‹ß—–›š×ÖÄòõöòõö–™ß×߈ž–‹«–’šßÁÂßÎÏÑÏßÖòõööˆž–‹ß×߈ž–‹«–’šßÒßÎÏÑÏßÖÄòõööòõö™ß×ßÄÄßÖòõö„òõööœ“œ”°•šœ‹ß“ž†¬Š‘›×ßÝŠ– ’ ‹–’š œŠ‘‹›ˆ‘ÝßÖÄòõööˆž–‹ß×ßÎÑÏßÖÄòõö‚öòõ‚òõòõòõˆž–‹¹¯“ž†šŒ×ß’ž‡«–’šßÖòõ„òõöš‘›«–’šßÂߘš‹‹–’š×ÖßÔß’ž‡«–’šßÕßÎÏÏÏßÒßÍÏÏÄòõöòõö–™ß×ß“š‰š“Ñ‹šž’½žŒš›ßÖòõööˆ—–“š×ß×Þ“š‰š“Ñ—žŒ¬žˆ‘š›¤ßÝž‡–ŒÝߢ߃ƒßÞ“š‰š“Ñ—žŒ¬žˆ‘š›¤ßÝž““–šŒÝߢÖßÙÙߘš‹‹–’š×ÖßÃßš‘›«–’šßÖòõöööˆž–‹ß×ßÏÑÏÊßÖÄòõöš“Œšòõööˆ—–“šß×ß“š‰š“Ñ’ž‡¯“ž†š¼Š‘‹ßÃßÍßÙÙߘš‹‹–’š×ÖßÃßš‘›«–’šßÖòõöööˆž–‹ß×ßÏÑÏÊßÖÄòõ‚òõòõòõš’ž‹œ—¯š–›×Öòõ„òõö“š‰š“ßš‘›‘×ßݘž’š š‘›š›ÝßÖÄòõòõöÐÐßž››š›ß†ß¾˜š‘‹¸°»òõö“š‰š“Ñ–‘¯š’ž‹œ—¯š–›ßÂß‹ŠšÄòõòõö–™ß×ß“š‰š“Ñš’ž‹œ—¯š–›ßÁßÏßÖòõö„òõöö–™ß×ß“š‰š“Ñœ‘Œ“šßÖòõöö„òõööö‹—šž›ß’ž‹œ—¬‹ž‹«–’š×ßÝ’ž‹œ— Œ‹ž‹–‘˜ –‘ÝÓß“š‰š“Ñš’ž‹œ—¯š–›ßÖÄòõöööˆž–‹ß×ß“š‰š“Ñš’ž‹œ—¯š–›ßÖÄòõöö‚òõööš“Œšòõöö„òõööö’ž‹œ—¬‹ž‹«–’š¯¼×ÖÄòõöö‚òõö‚òõöš“Œšòõö„òõöö’ž‹œ—¬‹ž‹«–’š¬”–×ÖÄòõö‚òõòõö“š‰š“Ñ–‘¯š’ž‹œ—¯š–›ßÂß™ž“ŒšÄòõöòõö™ß×ß–‘›š‡ßÂßÏÄß–‘›š‡ßÃß“š‰š“Ñ“ž†šŒÑŒ–…šÄß–‘›š‡ÔÔßÖòõö„òõöö“š‰š“Ñ“ž†šŒ¤–‘›š‡¢ß™šš…š¼‘‹“Œ¨žš×ß™ž“ŒšßÖÄòõöö“š‰š“Ñ“ž†šŒ¤–‘›š‡¢ßš‘ž“š¨šž‘Œ×ÖÄòõòõöö—–‘‹²šŒŒž˜šßÂߘš‹°•šœ‹–‰š·–‘‹«š‡‹×ß“š‰š“Ñ“ž†šŒ¤–‘›š‡¢ÑšŒ¤Ý‹šž’Ý¢ßÖÄòõöö–™ß×ßÞ–Œ»š™–‘š›×ß—–‘‹²šŒŒž˜šßÖ߃ƒßÞ“š‰š“Ñ“ž†šŒ¤–‘›š‡¢Ñ—žŒ¬žˆ‘š›ßÖòõöööœ‘‹–‘ŠšÄòõòõöö“š‰š“Ñ“ž†šŒ¤–‘›š‡¢ßŒš‹¼“–š‘‹»‰ž×ßÝŒœ •šœ‹–‰š«š‡‹ÝÓß—–‘‹²šŒŒž˜šßÖÄòõööÐГš‰š“Ñ“ž†šŒ¤–‘›š‡¢ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅÅ—–‘‹²šŒŒž˜š×ß—–‘‹²šŒŒž˜šßÖÄòõö‚òõòõö–™ß×ߘž’š¤ÝŒ‹ž‹šÝ¢ßÞÂßÝ“ž†–‘˜ÝßÖòõööš‹Š‘Äòõ‚òõòõòõ˜žœš¯š–›×Öòõ„òõö“š‰š“ßš‘›‘×ݘž’š š‘›š›ÝÖÄòõöòõöˆ—–“šß×ß“š‰š“Ñ–‘¸žœš¯š–›ßÖòõö„òõööˆž–‹ß×ßÎÑÏßÖÄòõöö“š‰š“Ñ–‘¸žœš¯š–›ÒÒÄòõö‚òõòõöÐЈž–‹ß×ß“š‰š“јžœš¯š–›ßÖÄòõöòõö“š‰š“ß‘‹–™†ß×ßݘžœš š–› š‘›–‘˜ÝßÖÄòõöˆž–‹ß×ßÏÑÏÊßÖÄòõöòõö˜ž’š¹“ž˜¬š‹×ßݘžœšš–› ›‘šÝßÖÄòõö“š‰š“Ñ–‘¸žœš¯š–›ßÂß™ž“ŒšÄòõöòõö–™ß×ߘž’š¤ÝŒ‹ž‹šÝ¢ßÞÂßÝ“ž†–‘˜ÝßÖòõööš‹Š‘Äòõöòõö–™ß×ߘš‹¸ž’š‹†š±Š’³–‰šŒ×ÖßÖòõö„òõööÐÐ߯“ž†šŒß‘ßžß‹šž’ߊ‹ßˆ–‹—Š‹ßžßˆšž‘ߌ—ˆßžŒß›šž›ßŒ–‘œšß‹—š†ßœž‘ß‘‹ß˜š‹ß–‘ß‹—–ŒßŠ‘›òõöö“ž†šŒßÂß“š‰š“Ñ“ž†šŒÄòõööòõöö™ß×ß–ßÂßÏÄß–ßÃß“ž†šŒÑŒ–…šÄß–ÔÔßÖòõöö„òõööö“ž†šßÂß“ž†šŒ¤–¢Äòõöööòõööö–™ß×ßÞ“ž†šÑ—žŒ¬žˆ‘š›ßÙÙß“ž†šÑŒšŒŒ–‘‹šž’ßÞÂßÝŒšœ‹ž‹ÝßÙÙßÞ–Œ¾“–‰š×ß“ž†šßÖßÖòõöööö“ž†šÑŒ‹ž‹ŠŒ–œ‘ßÂßÝ—Š› Œ‹ž‹ŠŒ ›šž›ÝÄòõöö‚òõö‚òõöòõö“š‰š“ß‹—šž›ßŠ›ž‹š¸ž’šº‰š‘‹Œ×ÖÄòõ‚òõòõòõŠ›ž‹š¨–‘¬‹ž‹Œ×߈–‘‘šßÖòõ„òõö–™ß×ßÞˆ–‘‘šßž‘”–‘˜º‘ž“š›×ÖßÖòõööš‹Š‘Äòõöòõöˆ–‘‘šß’žŒ£’£˜ž’š‹†šŒ£ šŒ–Œ‹š‘œšÅÅŒ‹ž‹¾››×ßÝ“ŒŒšŒÝÓßÒÎßÖÄòõöòõö–‘‹“‘×ßÝŒš‹‹–‘˜ßˆ–‘‘šÅßÝßÔ߈–‘‘šß’žŒ£’£˜ž’š‹†šŒ£ šŒ–Œ‹š‘œšÅÅŒ‹ž‹¸š‹×ß݈–‘ŒÝßÖßÖÄòõöˆ–‘‘šß’žŒ£’£˜ž’š‹†šŒ£ šŒ–Œ‹š‘œšÅÅŒ‹ž‹¾››×ß݈–‘ŒÝÓßÎßÖÄòõöˆ–‘‘šßŠ›ž‹š¯šŒ­ž‹–×ß݈–‘³ŒŒ­ž‹–ÝÓß݈–‘ŒÝÓßÝ“ŒŒšŒÝßÖÄòõöˆ–‘‘šß’žŒ£’£˜ž’š‹†šŒ£ šŒ–Œ‹š‘œšÅÅŒ‹ž‹¾››×ßÝœŠš‘‹¨–‘¬‹šž”ÝÓßÎßÖÄòõöòõöœŠ ˆ–‘ Œ‹šž”ßÂ߈–‘‘šß’žŒ£’£˜ž’š‹†šŒ£ šŒ–Œ‹š‘œšÅÅŒ‹ž‹¸š‹×ßÝœŠš‘‹¨–‘¬‹šž”ÝßÖÄòõö–™ß×ßœŠ ˆ–‘ Œ‹šž”ßÁ߈–‘‘šß’žŒ£’£˜ž’š‹†šŒ£ šŒ–Œ‹š‘œšÅÅŒ‹ž‹¸š‹×ß݈–‘¬‹šž”ÝßÖßÖòõööˆ–‘‘šß’žŒ£’£˜ž’š‹†šŒ£ šŒ–Œ‹š‘œšÅÅŒ‹ž‹¬š‹×ß݈–‘¬‹šž”ÝÓßœŠ ˆ–‘ Œ‹šž”ßÖÄòõöòõöˆ–‘‘šß’žŒ£’£˜ž’š‹†šŒ£ šŒ–Œ‹š‘œšÅÅŒ‹ž‹¬š‹¼—–“›×ßÝŠ‘›ÝÓß݈–‘ÝÓß‹ŠšßÖÄòõöˆ–‘‘šß’žŒ£’£˜ž’š‹†šŒ£ šŒ–Œ‹š‘œšÅÅŒ‹ž‹¬š‹¼—–“›×ßÝŠ‘›ÝÓßÝ“ŒŒÝÓß™ž“ŒšßÖÄòõ‚òõòõòõŠ›ž‹š³ŒŒ¬‹ž‹Œ×ß“ŒšßÖòõ„òõö–™ß×ßÞ“Œšßž‘”–‘˜º‘ž“š›×ÖßÖòõööš‹Š‘Äòõöòõö“Œšß’žŒ£’£˜ž’š‹†šŒ£ šŒ–Œ‹š‘œšÅÅŒ‹ž‹¾››×ßÝ“ŒŒšŒÝÓßÎßÖÄòõö“ŒšßŠ›ž‹š¯šŒ­ž‹–×ß݈–‘³ŒŒ­ž‹–ÝÓß݈–‘ŒÝÓßÝ“ŒŒšŒÝßÖÄòõö“Œšß’žŒ£’£˜ž’š‹†šŒ£ šŒ–Œ‹š‘œšÅÅŒ‹ž‹¬š‹¼—–“›×ßÝŠ‘›ÝÓßÝ“ŒŒÝÓß‹ŠšßÖÄòõ‚òõòõòõŠ›ž‹š«–š¬‹ž‹Œ×ß“ŒšßÖòõ„öòõö–™ß×ßÞ“Œšßž‘”–‘˜º‘ž“š›×ÖßÖòõööš‹Š‘Äòõöòõö“Œšß’žŒ£’£˜ž’š‹†šŒ£ šŒ–Œ‹š‘œšÅÅŒ‹ž‹¾››×ßÝ“ŒŒšŒÝÓßÒÎßÖÄòõöòõö“Œšß’žŒ£’£˜ž’š‹†šŒ£ šŒ–Œ‹š‘œšÅÅŒ‹ž‹¾››×ßÝ‹–šŒÝÓßÎßÖÄòõö“ŒšßŠ›ž‹š¯šŒ­ž‹–×ß݈–‘³ŒŒ­ž‹–ÝÓß݈–‘ŒÝÓßÝ“ŒŒšŒÝßÖÄòõö“Œšß’žŒ£’£˜ž’š‹†šŒ£ šŒ–Œ‹š‘œšÅÅŒ‹ž‹¬š‹×ßÝœŠš‘‹¨–‘¬‹šž”ÝÓßÏßÖÄöòõ‚òõòõòõŠ›ž‹š¨–‘³ŒŒ¬‹ž‹Œ×߈–‘‘šßÖòõ„òõö–™ß×ß–‰ž‹š²ž‹œ—×ÖßÖòõööš‹Š‘Äòõööòõö–™ß×ßÞˆžŒ³žŒ‹­Š‘›×ÖßÖòõööš‹Š‘Äòõööòõö“ž†šŒßÂß“š‰š“Ñ“ž†šŒÄòõòõö–™ß×ßÞ–Œ»š™–‘š›×߈–‘‘šßÖ߃ƒß×ß–Œ»š™–‘š›×߈–‘‘šßÖßÙÙß–Œ¬‹–‘˜×߈–‘‘šßÖßÙÙ߈–‘‘šßÂÂßÝ‹–šÝßÖßÖòõö„òõöö™šžœ—ß×ß“ž†šß–‘ß“š‰š“Ñ“ž†šŒßÖòõöö„òõööö–™ß×ß–Œ»š™–‘š›×ß“ž†šÑœ‘‘šœ‹š›¯Œ‹¸ž’šßÖßÖòõööööœ‘‹–‘ŠšÄòõòõööö–™ß×ß“š‰š“Ñ—Œ‹¹œš›º‘›ßÙÙß“ž†šß–Œ·Œ‹×ÖßÖòõööö„òõöööö“ž†šß’žŒ£’£˜ž’š‹†šŒ£ šŒ–Œ‹š‘œšÅÅŒ‹ž‹¬š‹×ßÝœŠš‘‹¨–‘¬‹šž”ÝÓßÏßÖÄòõööööœ‘‹–‘ŠšÄòõööö‚òõööööòõöööŠ›ž‹š«–š¬‹ž‹Œ×ß“ž†šßÖÄòõöö‚ööòõö‚ßòõöš“Œšß–™ß×ß–Œ¯“ž†š×߈–‘‘šßÖßÖòõö„òõöö–™ß×ß“š‰š“Ñ—Œ‹¹œš›º‘›ßÙÙ߈–‘‘šß–Œ·Œ‹×ÖßÖòõöö„òõöööˆ–‘‘šß’žŒ£’£˜ž’š‹†šŒ£ šŒ–Œ‹š‘œšÅÅŒ‹ž‹¬š‹×ßÝœŠš‘‹¨–‘¬‹šž”ÝÓßÏßÖÄòõöööš‹Š‘Äòõöö‚òõööööòõööŠ›ž‹š¨–‘¬‹ž‹Œ×߈–‘‘šßÖÄòõö‚òõöš“Œšß–™ß×ß–Œ¬‹–‘˜×߈–‘‘šßÖßÖòõö„òõöö™šžœ—ß×ß“ž†šß–‘ß“š‰š“Ñ“ž†šŒßÖòõöö„òõööö–™ß×ß–Œ»š™–‘š›×ß“ž†šÑœ‘‘šœ‹š›¯Œ‹¸ž’šßÖßÖòõööööœ‘‹–‘ŠšÄòõòõööö–™ß×ß“š‰š“Ñ—Œ‹¹œš›º‘›ßÙÙß“ž†šß–Œ·Œ‹×ÖßÖòõööö„òõöööö“ž†šß’žŒ£’£˜ž’š‹†šŒ£ šŒ–Œ‹š‘œšÅÅŒ‹ž‹¬š‹×ßÝœŠš‘‹¨–‘¬‹šž”ÝÓßÏßÖÄòõööööœ‘‹–‘ŠšÄòõööö‚òõòõööö–™ß×߈–‘‘šßÂÂßÝ‹–šÝßÖòõööööŠ›ž‹š«–š¬‹ž‹Œ×ß“ž†šßÖÄòõöööš“Œšß–™ß×ß“ž†šÑšŒ¤Ý‹šž’Ý¢ßÂÂ߈–‘‘šßÖòõööööŠ›ž‹š¨–‘¬‹ž‹Œ×ß“ž†šßÖÄòõöööš“Œšòõöööö“ž†šß’žŒ£’£˜ž’š‹†šŒ£ šŒ–Œ‹š‘œšÅÅŒ‹ž‹¬š‹×ßÝœŠš‘‹¨–‘¬‹šž”ÝÓßÏßÖÄòõöö‚òõö‚òõ‚òõòõòõ™šš…š¯“ž†š¹­Š‘›º‘›×ß›š“ž†ßÖòõ„òõöŒš“™ßš‘›‘ß×ßÝ›–Œœ‘‘šœ‹ÝßÖÄòõöŒš“™ßœ“šž³ˆš²šŒŒž˜šŒ×ÖÄòõöòõö–™ß×ßÞ–Œ»š™–‘š›×ß›š“ž†ßÖßÖòõöö›š“ž†ßÂßÏÑÏÊÄòõöòõöŒš“™ßœ“ŒšŠ²š‘Š×ÖÄòõöŒš“™ßœ“Œš¶‘¸ž’š²š‘Š×ÖÄòõöòõöˆž–‹ß×ß›š“ž†ßÖÄòõöŒš“™ß™šš…š¼‘‹“Œ¨žš×ß‹ŠšßÖÄòõÐÐöŒš“™ß›–Œž“š¨šž‘Œ×ÖÄòõ‚òõòõòõŠ›ž‹š²ž‹œ—½‘ŠŒ¬œšŒ×߈–‘‘šßÖòõ„òõö–™ß×ßÞ˜ž’š¤Ý‹–’š¯žŒŒš›Ý¢ßÖòõööš‹Š‘Äòõòõö–™ß×ßÞ’ž‹œ—²ž”–‘˜¸ž’š×ÖßÖòõööš‹Š‘Äòõòõö–™ß×ßÞ˜š‹«–’š³–’–‹×Ö߃ƒß“š‰š“Ñ™œš›º‘›ßÖòõö„òõöö˜ž’š³š‘˜‹—ßÂߘš‹«–’š¯žŒŒš›×ÖßÐßÎÏÏÏÄööòõööÐÐßœžß–‹ßž‹ßÍÏß’–‘Š‹šŒß‹ßž‰–›ßš‡“–‹–‘˜òõöö˜ž’š³š‘˜‹—ßÂß’–‘×ߘž’š³š‘˜‹—ÓßÎÍÏÏßÖÄòõö‚òõöš“Œšòõö„òõöö˜ž’š³š‘˜‹—ßÂߘš‹«–’š³–’–‹×ÖßÕßÉÏÄòõö‚òõööòõö–™ß×ß“š‰š“Ñ‹šž’½žŒš›ßÖòõö„òõöö–™ß×߈–‘‘šßÂÂßÝž““–šŒÝßÖòõöö„òõöööˆ–‘‘–‘˜«šž’ßÂßÝž““–šŒÝÄòõööö“Œ–‘˜«šž’ßÂßÝž‡–ŒÝÄòõöö‚òõööš“Œšß–™ß×߈–‘‘šßÂÂßÝž‡–ŒÝßÖòõöö„òõöööˆ–‘‘–‘˜«šž’ßÂßÝž‡–ŒÝÄòõööö“Œ–‘˜«šž’ßÂßÝž““–šŒÝÄòõöö‚òõööš“Œšòõöö„òõöööˆ–‘‘–‘˜«šž’ßÂßÝ‹–šÝÄòõööö“Œ–‘˜«šž’ßÂßÝ‹–šÝÄòõöö‚òõòõöö–™ß×߈–‘‘–‘˜«šž’ßÞÂßÝ‹–šÝßÖòõöö„òõöööˆ–‘‘š¬œž“šßÂß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘš‹¬œš¶‘™©ž“Šš×ß݈–‘ÝßÖÄòõööö“Œš¬œž“šßÂß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘš‹¬œš¶‘™©ž“Šš×ßÝ“ŒŒÝßÖÄòõöööŒš‹¨–‘‘–‘˜«šž’×߈–‘‘–‘˜«šž’ßÖÄòõöö‚òõööš“Œšòõöö„òõöööˆ–‘‘š¬œž“šßÂß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘš‹¬œš¶‘™©ž“Šš×ßÝ‹–šÝßÖÄòõööö“Œš¬œž“šßÂß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘš‹¬œš¶‘™©ž“Šš×ßÝ‹–šÝßÖÄòõöö‚òõööòõöö™šžœ—ß×ß“ž†šß–‘ß“š‰š“Ñ“ž†šŒßÖòõöö„òõööö–™ß×ß–Œ»š™–‘š›×ß“ž†šÑœ‘‘šœ‹š›¯Œ‹¸ž’šßÖßÖòõööööœ‘‹–‘ŠšÄòõöööòõööö–™ß×ßÞ“ž†šßž‘”–‘˜º‘ž“š›×ÖßÖòõööööœ‘‹–‘ŠšÄòõöööòõööö–™ß×ß“ž†šÑ‹–’š¯“ž†š›¤Ý‹‹ž“Ý¢ßÃßÎ߃ƒß“ž†šÑšŒ¤Ýž‹–œ–ž‹–‘Ý¢ßÃßÎßÖòõööö„òõöööö“ž†šß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅÅš‘›¸ž’šª›ž‹š×ÖÄòõööööœ‘‹–‘ŠšÄòõööö‚òõöòõöööÐÐß‘ß‘ŠŒß™ß—Œ‹Œßˆ—ß™œšßš‘›Œòõööö–™ß×ß“š‰š“Ñ—Œ‹¹œš›º‘›ßÙÙß“ž†šß–Œ·Œ‹×ÖßÖòõööööœ‘‹–‘ŠšÄòõòõöööŒ’ßÂß“ž†šß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘš‹¬¯²×ÖÄööööòõööö–™ß×߈–‘‘–‘˜«šž’ßÂÂßÝ‹–šÝßÖòõööö„òõöööö“ž†š¬œšßÂß–‘‹×ß׈–‘‘š¬œž“šßÕß×טž’š³š‘˜‹—ÐÉÏÖßÕߌ’ÖÖßÕßדž†šÑ‹–’š¯“ž†š›¤Ý‹‹ž“Ý¢ßÐߘž’š³š‘˜‹—ÖßÖÄòõöööö“ž†šß‹—šž›ß˜–‰š²ž‹œ—½‘ŠŒ×ßÝ‹–šÝÓß“ž†š¬œšßÖÄòõöööö“ž†šÑ’ž‹œ—½‘ŠŒßÂß“ž†š¬œšÄòõööö‚òõöööš“Œšß–™ß×ß–Œ»š™–‘š›×ß“ž†šÑšŒ¤Ý‹šž’Ý¢ßÖßÙÙß“ž†šÑšŒ¤Ý‹šž’Ý¢ßÂÂ߈–‘‘–‘˜«šž’ßÖòõööö„òõöööö“ž†š¬œšßÂß–‘‹×ß׈–‘‘š¬œž“šßÕß×טž’š³š‘˜‹—ÐÉÏÖßÕߌ’ÖÖßÕßדž†šÑ‹–’š¯“ž†š›¤Ý‹‹ž“Ý¢ßÐߘž’š³š‘˜‹—ÖßÖÄòõöööö“ž†šß‹—šž›ß˜–‰š²ž‹œ—½‘ŠŒ×ß݈–‘ÝÓß“ž†š¬œšßÖÄòõöööö“ž†šÑ’ž‹œ—½‘ŠŒßÂß“ž†š¬œšÄòõööö‚òõöööš“Œšß–™ß×ß–Œ»š™–‘š›×“ž†šÑšŒ¤Ý‹šž’Ý¢ßÖßÙÙß“ž†šÑšŒ¤Ý‹šž’Ý¢ßÂÂß“Œ–‘˜«šž’ßÖòõööö„òõöööö“ž†š¬œšßÂß–‘‹×ßדŒš¬œž“šßÕß×טž’š³š‘˜‹—ÐÉÏÖßÕߌ’ÖÖßÕßדž†šÑ‹–’š¯“ž†š›¤Ý‹‹ž“Ý¢ßÐߘž’š³š‘˜‹—ÖßÖÄòõöööö“ž†šß‹—šž›ß˜–‰š²ž‹œ—½‘ŠŒ×ßÝ“ŒŒÝÓß“ž†š¬œšßÖÄòõöööö“ž†šÑ’ž‹œ—½‘ŠŒßÂß“ž†š¬œšÄòõööö‚òõöö‚òõö‚òõöš“Œšòõö„òõöö–™ß×ß–Œ»š™–‘š›×߈–‘‘šßÖßÖòõöö„òõöööˆ–‘‘š¬œž“šßÂß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘš‹¬œš¶‘™©ž“Šš×ß݈–‘ÝßÖÄòõööö“Œš¬œž“šßÂß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘš‹¬œš¶‘™©ž“Šš×ßÝ“ŒŒÝßÖÄòõöö‚òõööš“Œšòõöö„òõöööˆ–‘‘š¬œž“šßÂß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘš‹¬œš¶‘™©ž“Šš×ßÝ‹–šÝßÖÄòõööö“Œš¬œž“šßÂß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘš‹¬œš¶‘™©ž“Šš×ßÝ‹–šÝßÖÄòõöö‚òõööòõöö™šžœ—ß×ß“ž†šß–‘ß“š‰š“Ñ“ž†šŒßÖòõöö„òõööö–™ß×ß–Œ»š™–‘š›×ß“ž†šÑœ‘‘šœ‹š›¯Œ‹¸ž’šßÖßÖòõööööœ‘‹–‘ŠšÄòõöööòõööö–™ß×ß“ž†šÑ‹–’š¯“ž†š›¤Ý‹‹ž“Ý¢ßÃßÎ߃ƒß“ž†šÑšŒ¤Ýž‹–œ–ž‹–‘Ý¢ßÃßÎßÖòõööö„òõöööö“ž†šß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅÅš‘›¸ž’šª›ž‹š×ÖÄòõööööœ‘‹–‘ŠšÄòõööö‚òõöööòõöööŒ’ßÂß“ž†šß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘš‹¬¯²×ÖÄòõòõööö–Œ¨–‘‘šßÂß™ž“ŒšÄòõööö™ß×߶›‡ßÂßÏÄ߶›‡ßÃß’–‘×ß“š‰š“Ñ“žœš’š‘‹¤Ýž““ݢь–…šÓßÌßÖÄ߶›‡ÔÔßÖòõööö„òõöööö–™ß×ß“š‰š“Ñ“žœš’š‘‹¤Ýž““Ý¢¤¶›‡¢ßÞÂß“ž†šßÖòõöööööœ‘‹–‘ŠšÄòõöööö–Œ¨–‘‘šßÂß‹ŠšÄööööòõööö‚òõöööòõööö–™ß×ß–Œ¨–‘‘šßÖòõööö„òõöööö“ž†š¬œšßÂß–‘‹×ß׈–‘‘š¬œž“šßÕß×טž’š³š‘˜‹—ÐÉÏÖßÕߌ’ÖÖßÕßדž†šÑ‹–’š¯“ž†š›¤Ý‹‹ž“Ý¢ßÐߘž’š³š‘˜‹—ÖßÖÄòõöööö“ž†šß‹—šž›ß˜–‰š²ž‹œ—½‘ŠŒ×ß݈–‘ÝÓß“ž†š¬œšßÖÄòõöööö“ž†šÑ’ž‹œ—½‘ŠŒßÂß“ž†š¬œšÄòõööö‚òõöööš“Œšòõööö„òõöööö“ž†š¬œšßÂß–‘‹×ßדŒš¬œž“šßÕß×טž’š³š‘˜‹—ÐÉÏÖßÕߌ’ÖÖßÕßדž†šÑ‹–’š¯“ž†š›¤Ý‹‹ž“Ý¢ßÐߘž’š³š‘˜‹—ÖßÖÄòõöööö“ž†šß‹—šž›ß˜–‰š²ž‹œ—½‘ŠŒ×ßÝ“ŒŒÝÓß“ž†š¬œšßÖÄòõöööö“ž†šÑ’ž‹œ—½‘ŠŒßÂß“ž†š¬œšÄòõööö‚òõöö‚òõö‚òõ‚òõòõòõ˜–‰š²ž‹œ—½‘ŠŒ×ߌœš«†šÓߌœšßÖòõ„òõöŒš“™ßš‘›‘ß×ßÝ›–Œœ‘‘šœ‹ÝßÖÄòõòõö“š‰š“߈ž–‹‹–““ß×ßݘ–‰š ’ž‹œ— ‘ŠŒÝßÖÄòõöòõöŒš“™ß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘ–‰š­ž‘”§¯×ߌœš«†šÓߌœšßÖÄòõöÐГ˜§¯¸ž–‘Œ×ÖÄòõöòõöŒš“™ß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅÅš‘›¸ž’šª›ž‹š×ÖÄòõ‚òõòõòõŒš‹§š‘‘­ž‘”Œ×߈–‘‘šßÖòõ„òõö“ž†šŒßÂß“š‰š“Ñ“ž†šŒÄòõòõö™ß×ß–ßÂßÏÄß–ßÃß“ž†šŒÑŒ–…šÄß–ÔÔßÖòõö„òõöö“ž†šßÂß“ž†šŒ¤–¢Äòõòõöö–™×ßÞ–Œ›š™–‘š›×“ž†šÑŒœšÖ߃ƒßÞ–Œ›š™–‘š›×“ž†šÑšŒ¤Ý‹šž’Ý¢ÖßÖòõöööœ‘‹–‘ŠšÄòõòõö‚òõòõö™ß×ß–ßÂßÏÄß–ßÃß“ž†šŒÑŒ–…šÄß–ÔÔßÖòõö„òõöö“ž†šßÂß“ž†šŒ¤–¢Äòõòõöö–™×ßÞ–Œ›š™–‘š›×“ž†šÑŒœšÖ߃ƒßÞ–Œ›š™–‘š›×“ž†šÑšŒ¤Ý‹šž’Ý¢ÖßÖòõöööœ‘‹–‘ŠšÄööòõööòõööŒš‹¯“ž†š«šž’­ž‘”×ß“ž†šÓß“ž†šÑœ“–š‘‹–›Óß“ž†šÑŒœšßÒßÊßÕß“ž†šÑ›šž‹—ŒßÖÄòõö‚òõöŒš‘›ž‘”Œ×ÖÄòõ‚òõòõòõœ—šœ”«–’š³–’–‹×ßš‰«–’š¯žŒŒš›ßÖòõ„òõö–™ß×ß–Œ»š™–‘š›×ß“š‰š“Ñ‹–’š³–’–‹°‰š–›šßÖßÙÙß“š‰š“Ñ‹–’š³–’–‹°‰š–›šßÖòõööš‹Š‘Äòõöòõö–™ß×ߘž’š¤ÝŒ‹ž‹šÝ¢ßÞÂßÝ“ž†–‘˜ÝßÖòõö„òõööŒš‹¸ž’šº‘›«–’š×ßÏßÖÄòõööš‹Š‘Äòõö‚òõööòõö–™ß×ߘš‹«–’š³–’–‹×ÖßÃÂßÏßÖòõö„òõöö–™ß×ß–Œ»š™–‘š›×ß“š‰š“ÑŒ‹ž‹«–’šßÖßÖòõöööŒš‹¸ž’šº‘›«–’š×ß“š‰š“ÑŒ‹ž‹«–’šßÖÄòõööš“ŒšòõöööŒš‹¸ž’šº‘›«–’š×ßÏßÖÄòõööš‹Š‘Äòõö‚òõööòõö–™ß×ßÞ˜ž’š¹“ž˜×ßÝš’ž‹œ— ›‘šÝßÖßÖòõö„òõööŒš‹¸ž’šº‘›«–’š×ßÏßÖÄòõööš‹Š‘Äòõö‚òõöòõö–™ß×ßÞ–Œ›š™–‘š›×ß“š‰š“ÑŒ‹ž‹«–’šßÖßÖòõööš‹Š‘Äòõöòõö‹–’š³š™‹ßÂߘš‹«–’š­š’ž–‘–‘˜×ÖÄòõöòõöÐÐ߈ž‘‹ß‹—–ŒßžœœŠž‹šß‹ß‹—šß’–““–Œšœ‘›òõÐÐö–™ß×ߘš‹·ž“™«–’š×ÖßÙÙߘž’š¤ÝŒ‹ž‹ŠŒÝ¢ßÞÂßÝ—ž“™‹–’šÝßÖòõÐÐööŒš‹¸ž’šº‘›«–’š×ߘš‹«–’š×ÖßÔß×–‘‹×‹–’š³š™‹ÖßÒß–‘‹×˜š‹«–’š³–’–‹×ÖÕÉÏÕÎÏÏÏÕÏÑÊÖÖßÖÄòõÐÐöš“ŒšòõööŒš‹¸ž’šº‘›«–’š×ߘš‹«–’š×ÖßÔß–‘‹×‹–’š³š™‹ÖßÖÄòõòõö–™ß×ß‹–’š³š™‹ßÁßÏßÖòõö„òõöö–™ß×ߘš‹·ž“™«–’š×ÖßÙÙßœ—šœ”·ž“™«–’š×ßš‰«–’š¯žŒŒš›ßÖßÖòõööö¤¤“š‰š“Ñ‘·ž“™«–’š¢¢×ÖÄòõòõööš‹Š‘Äòõö‚òõöòõö¤¤“š‰š“Ñ‘«–’š³–’–‹¢¢×ÖÄòõ‚òõòõòõœ—šœ”·ž“™«–’š×ßš‰«–’š¯žŒŒš›ßÖòõ„òõö–™ß×ßÞ“š‰š“Ñ‹šž’½žŒš›ßÖòõööš‹Š‘ß™ž“ŒšÄòõööòõö–™ß×ߘš‹«–’š³–’–‹×ÖßÖòõö„òõöö—ž“™«–’šßÂßטš‹«–’š³–’–‹×ÖßÕßÉÏßÕßÎÏÏÏÖßÕßÏÑÊÄòõööòõöö–™ß×ߘš‹«–’š¯žŒŒš›×ÖßÁÂß—ž“™«–’šßÙÙßš‰«–’š¯žŒŒš›ßÃß—ž“™«–’šßÙÙßš‰«–’š¯žŒŒš›ßÁßÏßÖòõöö„òõööö˜ž’š¤ÝŠ‘›²–““–Œšœ‘›Œ¾“šž›†¯žŒŒš›Ý¢ßÂߘš‹«–’š¯žŒŒš›×ÖÄòõöööš‹Š‘ß‹ŠšÄòõöö‚òõö‚òõöòõöš‹Š‘ß™ž“ŒšÄòõ‚òõòõòõòõ˜š‹«–’š­š’ž–‘–‘˜×Öòõ„òõöš‹Š‘ߘš‹«–’š³–’–‹×ÖßÕßÉÏßÕßÎÏÏÏßÒߘš‹«–’š¯žŒŒš›×ÖÄòõ‚òõòõòõœ—šœ”«šž’¬œš³–’–‹¬‘×ß‹šž’ßÖòõ„òõöžŒŒš‹×ß–Œ»š™–‘š›×ß‹šž’ßÖßÖÄòõòõö–™ß×ߘš‹¨ž‹œ—š›»‰ž×ßÝŒœš“–’–‹ÝßÖßÃÂßÏ߃ƒß–Œ°•šœ‹–‰š½žŒš›×ÖßÖòõööš‹Š‘Äòõööòõö–™ß×ß–Œ»š™–‘š›×ß“š‰š“ÑŒœš³–’–‹°‰š–›šßÖßÙÙß“š‰š“ÑŒœš³–’–‹°‰š–›šßÖòõööš‹Š‘Äòõööòõö–™ß×ßÞ“š‰š“Ñ‹šž’½žŒš›ßÖòõööš‹Š‘ÄòõòõöÐÐ߱ߜ—šœ”ŒßŠ‘‹–“ßžß’–‘Š‹šß—žŒßžŒŒš›ß‹ß“š‹ßˆ–“›ß›ž‹žßŒš‹‹“šòõö–™ß×ߘš‹«–’š¯žŒŒš›×ÖßÃß×ÉÏßÕßÎÏÏÏÖßÖßÐÐßÎß’–‘òõööš‹Š‘Äòõöòõö‹–’š³š™‹ßÂßšŒ‹–’ž‹š›«–’š«–““¬œš³–’–‹×ß‹šž’ßÖÄòõòõö–™ß×ß‹–’š³š™‹ßÃßÍßÖòõöö“š‰š“ß‘‹–™†×ßÝ’ž‹œ— š‘›–‘˜ Œ‘ÝÓßÝŒœšÝßÖÄòõ‚òõòõòõœ—šœ”¯“ž†š¬œš³–’–‹¬‘×Öòõ„òõö–™ß×ߘš‹¨ž‹œ—š›»‰ž×ßÝŒœš“–’–‹ÝßÖßÃÂßÏ߃ƒß–Œ°•šœ‹–‰š½žŒš›×ÖßÖòõööš‹Š‘Äòõööòõö–™ß×ß“š‰š“Ñ‹šž’½žŒš›ßÖòõööš‹Š‘ÄòõòõöÐÐ߱ߜ—šœ”ŒßŠ‘‹–“ßžß’–‘Š‹šß—žŒßžŒŒš›ß‹ß“š‹ßˆ–“›ß›ž‹žßŒš‹‹“šòõö–™ß×ߘš‹«–’š¯žŒŒš›×ÖßÃß×ÉÏßÕßÎÏÏÏÖßÖßÐÐßÎß’–‘òõööš‹Š‘Äòõòõö‹–’š³š™‹ßÂߌš“™ßšŒ‹–’ž‹š›«–’š«–““¬œš³–’–‹×ÖÄòõòõö–™ß×ß‹–’š³š™‹ßÃßÍßÖòõöö“š‰š“ß‘‹–™†×ßÝ’ž‹œ— š‘›–‘˜ Œ‘ÝÓßÝŒœšÝßÖÄòõ‚òõòõòõœ—šœ”¬œš³–’–‹×Öòõ„òõö–™ß×ß–Œ°•šœ‹–‰š½žŒš›×ÖßÖòõööš‹Š‘ß™ž“ŒšÄòõòõö–™ß×ß–Œ»š™–‘š›×ß“š‰š“ÑŒœš³–’–‹°‰š–›šßÖßÙÙß“š‰š“ÑŒœš³–’–‹°‰š–›šßÖòõööš‹Š‘ß™ž“ŒšÄòõöòõö–™ß×ߘž’š¤ÝŒ‹ž‹šÝ¢ßÞÂßÝ“ž†–‘˜ÝßÖòõööš‹Š‘ß™ž“ŒšÄòõòõö–™ß×ߘš‹¨ž‹œ—š›»‰ž×ßÝŒœš“–’–‹ÝßÖßÃÂßÏßÖòõööš‹Š‘ß™ž“ŒšÄòõòõö–™ß×ß“š‰š“Ñ‹šž’½žŒš›ßÖòõö„òõöö–™×ߘž’š¤Ý‹šž’¬œšŒÝ¢¤Ýž““–šŒÝ¢ßÃߘš‹¨ž‹œ—š›»‰ž×ßÝŒœš“–’–‹ÝßÖßÙÙߘž’š¤Ý‹šž’¬œšŒÝ¢¤Ýž‡–ŒÝ¢ßÃߘš‹¨ž‹œ—š›»‰ž×ßÝŒœš“–’–‹ÝßÖßÖòõöööš‹Š‘ß™ž“ŒšÄòõö‚òõöš“Œšòõö„òõöö–™ß×ßÞ–Œ¯“ž†š×ߌš“™ßÖßÖòõöööš‹Š‘ß™ž“ŒšÄòõòõöö–™ß×ߌš“™ÑŒœšßÃߘš‹¨ž‹œ—š›»‰ž×ßÝŒœš“–’–‹ÝßÖßÖòõöööš‹Š‘ß™ž“ŒšÄòõö‚òõòõöš‹Š‘ß‘¬œš³–’–‹×ÖÄòõ‚òõòõòõŠ›ž‹š¸ž’š«†š»‰žŒ×Öòõ„òõö“š‰š“ßš‘›‘ß×ßݘž’š š‘›š›ÝßÖÄòõöòõöˆ—–“šß×ߘž’š¤ÝŒ‹ž‹šÝ¢ßÂÂßÝ“ž†–‘˜ÝßÖòõö„òõööÐÐß’ž”šßŒŠšßˆšßœ—šœ”ß‹–’šß“–’–‹ß–˜—‹ßˆ—š‘ߘž’šßš‘›Œòõöö–™ß×ß–Œ›š™–‘š›×ß“š‰š“ÑŒ‹ž‹«–’šßÖßÖòõöö„òõööö–™ß×ߘš‹«–’š­š’ž–‘–‘˜×ÖßÃßÌÏÏÏßÖòõööö„òõööööˆž–‹ßÑÎÄòõööööœ‘‹–‘ŠšÄòõööö‚òõöö‚òõööˆž–‹ßÎÄòõö‚òõ‚òõòõòõ’ž‹œ—¬‹ž‹«–’š¯¼×Öòõ„òõö‹—šž›ß’ž‹œ—¬‹ž‹«–’š×ß݈ž–‹–‘˜ ™ ‹šž’ŒÝÓß“š‰š“Ñš’ž‹œ—¯š–›ßÔß“š‰š“Ñš’ž‹œ—¯š–›º‘›ßÖÄòõöòõöˆž–‹¹¯“ž†šŒ×ß“š‰š“Ñš’ž‹œ—¯š–›ßÖÄòõöòõö–™ß×ß“š‰š“Ñš’ž‹œ—¯š–›º‘›ßÁßÏßÖòõöö’ž‹œ—¬‹ž‹«–’š×ßÝ’ž‹œ— Œ‹ž‹–‘˜ –‘ÝÓß“š‰š“Ñš’ž‹œ—¯š–›º‘›ßÖÄòõ‚òõòõ’ž‹œ—¬‹ž‹«–’š ¶‘‹š‘ž“×ßœŠ‘‹«–’šÓß’ž‹œ—¬‹ž‹«–’šßÖòõ„òõöˆž–‹‹–““™ž’šš‘›ÄßÐÐ߈ž–‹ß‹–““ßœ“šž‘Šß™ßš‰–ŠŒßŒ‹ž‹ß‹–’šß–™ß’Š“‹–“šß—žš‘ßž‹ß‘œšòõö‰–Œ–‘¬š‹±ž”š›×ßÝ’¶‘‹ÝÓßÏßÖÄòõöòõö“š‰š“ßš‘›‘×ßÝ’ž‹œ— Œ‹ž‹ ‹–’š š˜–‘‘–‘˜ÝßÖÄòõöˆ—–“šß×ßœŠ‘‹«–’šßÁßÏßÙÙßÞ“š‰š“јž’šº‘›š›ßÖòõö„òõöö’ž‹œ—¬‹ž‹«–’šß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š›ÅÅ™‘‹¯Š“Œš×ß“š‰š“ßÖÄòõööˆž–‹ß×ß’ž‹œ—¬‹ž‹«–’šÑ–‘¹ž’šŒßÕßÏÑÏÊßÖÄòõöö’ž‹œ—¬‹ž‹«–’šßŒš‹©ž“Šš×ßœŠ‘‹«–’šßÖÄòõöö–™ß×ßœŠ‘‹«–’šßÂÂßÍßÖòõööö‰–Œ–‘¬š‹±ž”š›×ߘš‹»‰ž×ßÝ’ž‘ž’šÝßÖÓßÌÑÏßÖÄòõööœŠ‘‹«–’šÒÒÄòõööˆž–‹ß×ßÎßÒß×’ž‹œ—¬‹ž‹«–’šÑ–‘¹ž’šŒßÕßÏÑÏÊÖßÖÄòõö‚òõ‚òõòõ’ž‹œ—¬‹ž‹«–’š×ß‹†šÓß›Šž‹–‘ßÖòõ„òõö“š‰š“ß‘‹–™†×ßÝ’ž‹œ— Œ‹ž‹ ‹–’š š˜–‘‘–‘˜ÝßÖÄòõöòõö’ž‹œ—¬‹ž‹«š‡‹ßÂßœšž‹š¬š‰š¹‘‹¬‹–‘˜×ßÝ•šœ‹–‰šÝÓßÎÑÊßÖÄòõö’ž‹œ—¬‹ž‹«š‡‹ßŒš‹¯–‘‹×ßݼº±«º­ÝÓßݼº±«º­ÝÓßÏÓßÒËÏßÖÄòõö’ž‹œ—¬‹ž‹«š‡‹ÑŒ‹ßÂßÎÏÏÎÄòõö’ž‹œ—¬‹ž‹«š‡‹ßŒš‹«š‡‹×ߘž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ýˆž–‹–‘˜ ™ ‹šž’ŒÝ¢ßÖÄòõö’ž‹œ—¬‹ž‹«š‡‹Ñ™š˜Š‘›ßÂß™ž“ŒšÄòõö’ž‹œ—¬‹ž‹«š‡‹Ñ—–›šˆ—š‘–‘’š‘ŠßÂß‹ŠšÄòõöòõö’ž‹œ—¬‹ž‹«š‡‹ßŒš‹«š‡‹×ߘž’š¤ÝŒ‹–‘˜ŒÝ¢¤‹†š¢ßÖÄßÐÐßÝ’ž‹œ—ßš˜–‘Œß–‘ÅÝòõöòõö’ž‹œ—¬‹ž‹«–’šßÂßœšž‹š¬š‰š¹‘‹¬‹–‘˜×ßÝ—Š›–˜ÝÓßÎßÖÄòõö’ž‹œ—¬‹ž‹«–’šßŒš‹¯–‘‹×ßݼº±«º­ÝÓßݼº±«º­ÝÓßÏÓßÏßÖÄòõö’ž‹œ—¬‹ž‹«–’šÑŒ‹ßÂßÎÏÏÎÄòõö’ž‹œ—¬‹ž‹«–’šÑœ“ßÂß×ÎÓÎÓÏÖÄòõö’ž‹œ—¬‹ž‹«–’šÑ™š˜Š‘›ßÂß™ž“ŒšÄòõö’ž‹œ—¬‹ž‹«–’šÑ—–›šˆ—š‘–‘’š‘ŠßÂß‹ŠšÄòõöòõö’ž‹œ—¬‹ž‹«–’šß’žŒ£’£˜ž’š‹†šŒ£ —Š›ÅÅ™‘‹¯Š“Œš¶‘–‹×ÖÄòõòõöœŠ‘‹«–’šßÂß–‘‹×ß›Šž‹–‘ßÖÄòõöòõö–™ß×ßœŠ‘‹«–’šßÁÂßÍßÖòõö„òõöö’ž‹œ—¬‹ž‹«–’š ¶‘‹š‘ž“×ßœŠ‘‹«–’šÓß’ž‹œ—¬‹ž‹«–’šßÖÄòõöö‰–Œ–‘¬š‹±ž”š›×ߘš‹»‰ž×ßÝ’ž‘ž’šÝßÖÓßÌÑÏßÖÄòõö‚òõöš“Œšòõö„òõöö‰–Œ–‘¬š‹±ž”š›×ßÝ’¶‘‹ÝÓßÏßÖÄòõöö‰–Œ–‘¬š‹±ž”š›×ߘš‹»‰ž×ßÝ’ž‘ž’šÝßÖÓßÎÑÏßÖÄòõö‚òõöòõö’ž‹œ—¬‹ž‹«–’šß›šŒ‹†º“š’×ÖÄòõö’ž‹œ—¬‹ž‹«š‡‹ß›šŒ‹†º“š’×ÖÄòõ‚òõòõ’ž‹œ—¬‹ž‹«–’š¬”–×Öòõ„òõö‰–Œ–‘¬š‹±ž”š›×ߘš‹»‰ž×ßÝ’ž‘ž’šÝßÖÓßÏßÖÄòõ‚òõòõòõ‘­Š‘›¬ˆ–‹œ—×Öòõ„òõö–™ß×ßÞ–Œ»š™–‘š›×ߘž’š¤ÝŒˆ–‹œ—š›Œ–›šŒÝ¢ßÖßÖòõöö˜ž’š¤ÝŒˆ–‹œ—š›Œ–›šŒÝ¢ßÂß™ž“ŒšÄòõöòõöÐÐ߉š‹–’šòõö–™ß×ߘž’š¤ÝŠ‘›Œ¨‘Ý¢¤Ýž““–šŒÝ¢ßÂÂߘš‹¨ž‹œ—š›»‰ž×ß݈–‘“–’–‹ÝßÖßÒßÎßÙÙߘž’š¤ÝŠ‘›Œ¨‘Ý¢¤Ýž‡–ŒÝ¢ßÂÂߘš‹¨ž‹œ—š›»‰ž×ß݈–‘“–’–‹ÝßÖßÒßÎßÖòõö„òõööž—šž›«šž’ßÂߘš‹½š‹‹š«šž’×ÖÄòõöö–™ß×ßž—šž›«šž’ßÞÂߘž’š¤Ý›š™š‘›šŒÝ¢ßÖòõöö„òõööö˜ž’š¤ÝŒˆ–‹œ—š›Œ–›šŒÝ¢ßÂßÞ˜ž’š¤ÝŒˆ–‹œ—š›Œ–›šŒÝ¢Äòõöö‚òõööš“Œšòõöö„òõööö“š‰š“Ñ—ž“™‹–’š¬Š¼ž‹–‘ßÂßÝÝÄòõöö‚òõöö“š‰š“Ñ—ž“™‹–’š«†šßÂß݉š‹–’šÝÄòõö‚òõöš“Œšòõö„òõöö“š‰š“Ñ—ž“™‹–’š«†šßÂßÝ—ž“™‹–’šÝÄòõöö˜ž’š¤ÝŒˆ–‹œ—š›Œ–›šŒÝ¢ßÂßÞ˜ž’š¤ÝŒˆ–‹œ—š›Œ–›šŒÝ¢Äòõö‚òõ‚òõòõòõœ—šœ”­Š‘›¬ˆ–‹œ—×Öòõ„òõö–™ß×ßÞ“š‰š“Ñ‹šž’½žŒš›ßÖòõööš‹Š‘ß™ž“ŒšÄòõööòõö–™ß×ßÞ–Œ»š™–‘š›×ß“š‰š“ÑŠ‘›¬ˆ–‹œ—ßÖ߃ƒßÞ“š‰š“ÑŠ‘›¬ˆ–‹œ—ßÖòõööš‹Š‘ß™ž“ŒšÄòõööòõöžŒŒš‹×ߘž’š¤ÝŠ‘›Œ¯“ž†š›Ý¢ßÁßÏßÖÄöòõö–™ß×ߘž’š¤ÝŠ‘›Œ¯“ž†š›Ý¢ßÚß“š‰š“ÑŠ‘›¬ˆ–‹œ—ßÂÂßÏßÖòõö„òõöö‘­Š‘›¬ˆ–‹œ—×ÖÄòõööš‹Š‘ß‹ŠšÄòõö‚òõööòõöš‹Š‘ß™ž“ŒšÄòõ‚òõòõòõÐÐßš‹Š‘Œß‹—šßšŒ‹ß˜ŠšŒŒß™ß‹—šßš‡žœ‹ß‹–’šßŠ‘‹–“ß‹—šßŒœšž›ßˆ–““ßšß›–Œ“ž†š›ßž‘›ß“ž†šßœ‘‹“߈–““ßšß“Œ‹ÑòõÐÐßš‹Š‘ŒßŠ‘›š™–‘š›ß–™ß‹–’šß–Œß‘‹ß”‘ˆ‘òõ‹–’šª‘‹–“­Š‘›º‘›×Öòõ„òõö–™ß×ß“š‰š“јž’šº‘›š›ßÖòõö„òõöö‹–’š¯žŒŒš›ßÂßטš‹«–’š×ÖßÒß“š‰š“јž’šº‘›«–’šÖßÐßÎÏÏÏÄòõöö‹–’š­š’ž–‘–‘˜ßÂß“š‰š“ÑŒ‹­Š‘›«–’šßÒß‹–’š¯žŒŒš›Äòõööòõöö–™ß×ß‹–’š­š’ž–‘–‘˜ßÃßÏßÖòõöööš‹Š‘ßÏÄòõööòõööš‹Š‘ß‹–’š­š’ž–‘–‘˜Äòõö‚òõöòõö–™ß×ߘš‹«–’š³–’–‹×ÖßÃÂßÏßÖòõööš‹Š‘ߊ‘›š™–‘š›Äòõöòõö–™ß×ßÞ–Œ»š™–‘š›×ß“š‰š“ÑŒ‹ž‹«–’šßÖßÖòõööš‹Š‘ߊ‘›š™–‘š›Äòõöòõö‹“ßÂߘš‹«–’š³–’–‹×ÖÄòõöòõö‹–’š¯žŒŒš›ßÂßטš‹«–’š×ÖßÒß“š‰š“ÑŒ‹ž‹«–’šÖÐÎÏÏÏÄòõö‹–’š­š’ž–‘–‘˜ßÂßטš‹«–’š³–’–‹×ÖßÕßÉÏÖßÒß‹–’š¯žŒŒš›Äòõöòõö–™ß×ß–Œ»š™–‘š›×ß“š‰š“Ñ‹–’š¯žŠŒš›ßÖßÖòõöö‹–’š­š’ž–‘–‘˜ßÔÂß“š‰š“Ñ‹–’š¯žŠŒš›Äßòõöòõöš‹Š‘ß‹–’š­š’ž–‘–‘˜ßÔß“š‰š“ÑŒ‹­Š‘›«–’šÄòõ‚òõòõòõòõ™šš¸ž’š“ž†·Š›º“š’Œ×Öòõ„òõöÐÐß™ššßŠßŒ’šß—Š›ßš“š’ŒßŒßˆšß—ž‰šßš‘Š˜—ߙߋ—šß‹—–‘˜ŒÑòõöòõöÐÐßš”ß–œ‘Œòõö–™ß×ß–Œ›š™–‘š›×ߌš“™Ñš”–œ‘ßÖßÖòõö„òõöö–™ß×ß–Œ›š™–‘š›×ߌš“™Ñš”–œ‘¤Ï¢ßÖßÖòõöö„òõöööŒš“™Ñš”–œ‘¤Ï¢ß›šŒ‹†º“š’×ÖÄòõöööŒš“™Ñš”‘ž’š¤Ï¢ß›šŒ‹†º“š’×ÖÄòõöö‚òõöö–™ß×ß–Œ›š™–‘š›×ߌš“™Ñš”–œ‘¤Î¢ßÖßÖòõöö„òõöööŒš“™Ñš”–œ‘¤Î¢ß›šŒ‹†º“š’×ÖÄòõöööŒš“™Ñš”‘ž’š¤Î¢ß›šŒ‹†º“š’×ÖÄòõöö‚òõöö–™ß×ß–Œ›š™–‘š›×ߌš“™Ñš”–œ‘¤Í¢ßÖßÖòõöö„òõöööŒš“™Ñš”–œ‘¤Í¢ß›šŒ‹†º“š’×ÖÄòõöööŒš“™Ñš”‘ž’š¤Í¢ß›šŒ‹†º“š’×ÖÄòõöö‚òõö‚òõöŒš“™ß‘‹–™†×Ýš”Œ —–››š‘ÝÖÄßÐÐߌ‹ßž‘†ß‹—šž›Œß‹—ž‹ßžšßˆž–‹–‘˜ß‹ß—–›šß‹—šßš”ß–œ‘ŒòõöòõöÐÐß“ˆšß’šŒŒž˜šòõöŒš“™Ñ“ˆš²šŒŒž˜šß›šŒ‹†º“š’×ÖÄòõöŒš“™Ñ“ˆš«–’šß›šŒ‹†º“š’×ÖÄòõöòõöÐÐߘšŒŒßžòõö–™ß×ß–Œ»š™–‘š›×ߌš“™Ñ‡½žßÖßÖòõööŒš“™Ñ‡½žß›šŒ‹†º“š’×ÖÄòõö–™ß×ß–Œ»š™–‘š›×ߌš“™Ñ‡½ž«š‡‹ßÖßÖòõööŒš“™Ñ‡½ž«š‡‹ß›šŒ‹†º“š’×ÖÄòõ‚òõòõòõ˜š‹·Œ‹¯“ž†š×Öòõ„òõö“ž†šŒßÂߘš‹º‘‹¾ž†×ßÝ“ž†šÝÓßÝœ“žŒŒ‘ž’šÝßÖÄòõöòõö™ß×ß–‘›š‡ßÂßÏÄß–‘›š‡ßÃß“ž†šŒÑŒ–…šÄß–‘›š‡ÔÔßÖòõö„òõöö–™ß×ß“ž†šŒ¤–‘›š‡¢ß–Œ·Œ‹×ÖßÖòõöööš‹Š‘ß“ž†šŒ¤–‘›š‡¢Äòõö‚òõ‚òõòõòõ—Œ‹¶›“š›°Š‹×Öòõ„òõö—Œ‹¯“ž†šßÂߘš‹·Œ‹¯“ž†š×ÖÄòõöòõöÐÐß—Œ‹ß‘š‰šßŒžˆ‘š›òõö–™ß×ß–Œ»š™–‘š›×ß—Œ‹¯“ž†šßÖßÙÙßÞ—Œ‹¯“ž†šÑ—žŒ¬žˆ‘š›ßÙÙßÞ–Œ»š™–‘š›×ß—Œ‹¯“ž†šÑŒš“šœ‹š›¼“žŒŒßÖßÖòõööš‹Š‘ß‹ŠšÄòõòõöš‹Š‘ß™ž“ŒšÄòõ‚òõòõòõòõŠ‘›º‘›¨ž–‹×ß›š™žŠ“‹»š“ž†Óß’ž‹œ—½‘ŠŒßÖòõ„òõöÐÐŒš‹¬“ˆ²‹–‘×ßÎÑÏÓßÏÑÎÊÓß›š™žŠ“‹»š“ž†ßÐßÍßÖÄòõòõö‘‹–™–šŒ»‘šßÂß™ž“ŒšÄòõöˆ—–“šß×ßÞ‘‹–™–šŒ»‘šßÖòõö„òõöö“ž†šŒßÂß“š‰š“Ñ“ž†šŒÄòõöö‘‹–™–šŒ»‘šßÂß‹ŠšÄòõööòõöö™šžœ—ß×ß“ž†šß–‘ß“ž†šŒßÖòõöö„òõööö–™ß×ßÞ–Œ»š™–‘š›×ß“ž†šÑ›–‘˜¬“žŒ—ßÖßÖòõööööœ‘‹–‘ŠšÄòõòõööö–™ß×ßÞ“ž†šß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅÅ–Œ»–‘˜¬“žŒ—×ÖßÖòõööööœ‘‹–‘ŠšÄòõòõööö‘‹–™–šŒ»‘šßÂß™ž“ŒšÄòõöö‚òõööˆž–‹ß×ßÏÑÊßÖÄòõö‚òõòõö–™ß×ßÞ’ž‹œ—½‘ŠŒßÖòõö„òõööˆž–‹ß×ß›š™žŠ“‹»š“ž†ßÖÄòõöö“š‰š“ß‘‹–™†ß×ßÝŠ‘› š‘› ™–‘–Œ—š›ÝßÖÄòõööÐÐŒš‹¬“ˆ²‹–‘×ßÎÑÏÓßÎÑÏÓßÏÑÏÊßÖÄòõööš‹Š‘Äòõö‚òõòõßßß߈ž–‹ß×ß›š™žŠ“‹»š“ž†ßÐßÍßÖÄòõö“š‰š“ß‘‹–™†ß×ßݘ–‰š ’ž‹œ— ‘ŠŒÝßÖÄòõöˆž–‹ß×ß›š™žŠ“‹»š“ž†ßÐßÍßÖÄòõòõö‘‹–™–šŒ»‘šßÂß™ž“ŒšÄòõöˆ—–“šß×ßÞ‘‹–™–šŒ»‘šßÖòõö„òõöö“ž†šŒßÂß“š‰š“Ñ“ž†šŒÄòõöö‘‹–™–šŒ»‘šßÂß‹ŠšÄòõöö™šžœ—ß×ß“ž†šß–‘ß“ž†šŒßÖòõöö„òõööö–™ß×ßÞ–Œ»š™–‘š›×ß“ž†šÑ›–‘˜¬“žŒ—ßÖßÖòõööööœ‘‹–‘ŠšÄòõòõööö–™ß×ßÞ“ž†šß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅÅ–Œ»–‘˜¬“žŒ—×ÖßÖòõööööœ‘‹–‘ŠšÄòõòõööö‘‹–™–šŒ»‘šßÂß™ž“ŒšÄòõöö‚òõööˆž–‹ß×ßÏÑÊßÖÄòõö‚òõöÐÐŒš‹¬“ˆ²‹–‘×ßÎÑÏÓßÎÑÏÓßÏÑÏÊÖÄòõöòõö“š‰š“ß‘‹–™†ß×ßÝŠ‘› š‘› ™–‘–Œ—š›ÝßÖÄòõ‚òõòõòõŠ‘›º‘›»°¹×ß‹–’šßÖòõ„òõöŒš“™ßŒš‹»š‹—°™¹–š“›×ßÏÓßÎÍÇÓßÊÎÍÓßËÏÏÏÓßÉÓßÎÑÇßÖÄòõ‚òõòõòõ¼ž““žœ” ¬‹ž‹¸ž’š«†š×Öòõ„òõö’žŒ£’£ “ž›ÅÅ’ž–‘×ÖÄòõöòõö“š‰š“¹“ž˜¶‘–‹×ßÝŠ‘› ‰šÝÓß™ž“ŒšßÖÄòõö“š‰š“¹“ž˜¶‘–‹×ßݘž’š ‰šÝÓß™ž“ŒšßÖÄòõö“š‰š“¹“ž˜¶‘–‹×ßÝ“œ” ‘‹–™–šŒÝÓß™ž“ŒšßÖÄßòõòõö“š‰š“Ñš’ž‹œ—¯š–›ßÂßÏÄòõö“š‰š“Ñš’ž‹œ—¯š–›º‘›ßÂßÏÄòõö“š‰š“ÑŒ‹¸ž’š±‹–™–šŒßÂßÏÄòõöòõö“š‰š“Ñ–‘‹š’–ŒŒ–‘ßÂß™ž“ŒšÄòõöòõö’ž”š»‰ž¬š‰š¶‘™×ßÝœ˜ ‹—–›¯šŒ‘¾‘˜“šÝÓßÌÊÉßÖÄòõòõö’ž”š»‰ž¬š‰š¶‘™×ßÝŒœ ˜ž’šš‘›š›ÝÓßÏßÖÄòõòõö–™ß×ßÞ–Œ»š™–‘š›×ߘž’š¤Ý˜ž’šŒ‹ž‹š›Ý¢ßÖßÖòõö„òõöö˜ž’š¤Ýœ“–š‘‹–›Ý¢ßÂßÏÄòõööòõööž““–šŒ¼—ž¬š‹ßÂߘš‹²ž¼ŠŒ‹’×ßÝž““–šŒœ—žÝßÖÄòõöö–™ß×ß×Þ–Œ»š™–‘š›×ßž““–šŒ¼—ž¬š‹ßÖ߃ƒßž““–šŒ¼—ž¬š‹ßÂÂßÝÝÖßÖòõöö„òõööö–™ß×ßÞ–Œ»š™–‘š›×ߘž’š¤Ýž““–šŒÝ¢ßÖßÖòõööööž““–šŒ¼—ž¬š‹ßÂßÝŠŒ ž’†ÝÄòõöööš“Œšòõööööž““–šŒ¼—ž¬š‹ßÂߘž’š¤Ýž““–šŒÝ¢Äòõöö‚òõòõööž‡–Œ¼—ž¬š‹ßÂߘš‹²ž¼ŠŒ‹’×ßÝž‡–Œœ—žÝßÖÄòõöö–™ß×ß×Þ–Œ»š™–‘š›×ßž‡–Œ¼—ž¬š‹ßÖ߃ƒßž‡–Œ¼—ž¬š‹ßÂÂßÝÝÖßÖòõöö„òõööö–™ß×ßÞ–Œ»š™–‘š›×ߘž’š¤Ýž‡–ŒÝ¢ßÖßÖòõööööž‡–Œ¼—ž¬š‹ßÂßÝ™œš œ’Œ–‹šÝÄòõöööš“Œšòõööööž‡–Œ¼—ž¬š‹ßÂߘž’š¤Ýž‡–ŒÝ¢Äòõöö‚òõòõöö˜ž’š¤Ýž““–šŒÝ¢ßÂßž““–šŒ¼—ž¬š‹Äòõöö˜ž’š¤Ýž‡–ŒÝ¢ßÂßž‡–Œ¼—ž¬š‹Äöòõòõöö–™ß×ßÞ–Œ»š™–‘š›×ߘž’š¤Ýž‹‹žœ”šŒÝ¢ßÖ߃ƒßÞ–Œ»š™–‘š›×ߘž’š¤Ý›š™š‘›šŒÝ¢ßßÖßÖòõööö‹—šž›ßš×ßݱߞ‹‹žœ”šŒßß›š™š‘›šŒß‹šž’ß›š™–‘š›ß–‘ß“š‰š“ßјŒœÑÝßÖÄòõòõöö–™ß×ßßÞ–Œ»š™–‘š›×ߘž’š¤Ýž‹‹žœ”šŒÝ¢ßÖßÖòõööö˜ž’š¤Ýž‹‹žœ”šŒÝ¢ßÂßÝž““–šŒÝÄòõöö–™ß×ßßÞ–Œ»š™–‘š›×ߘž’š¤Ý›š™š‘›šŒÝ¢ßÖßÖòõööö˜ž’š¤Ý›š™š‘›šŒÝ¢ßÂßÝž‡–ŒÝÄòõòõöö–™ß×ßÞ–Œ»š™–‘š›×ߘž’š¤ÝŒ‹ž‹šÝ¢ßÖßÖòõööö˜ž’š¤ÝŒ‹ž‹šÝ¢ßÂßÝ“ž†–‘˜ÝÄòõöòõööšœžœ—š¬‹ž‹ŠŒ¶œ‘×ßÝ—Š› Œ‹ž‹ŠŒ ›šž›ÝßÖÄòõööšœžœ—š¬‹ž‹ŠŒ¶œ‘×ßÝ—Š› Œ‹ž‹ŠŒ œ‘‘šœ‹–‘˜ÝßÖÄòõööšœžœ—š¬‹–‘˜×ßÙݲ¯ª¶ ­º©¶©¶±¸ÝßÖÄòõööšœžœ—š¬‹–‘˜×ßÙݲ¯ª¶ ½º¶±¸ ­º©¶©º»ÝßÖÄòõööòõööšœžœ—š­Š’“š×ßÝ›ž’ž˜š —šž‰†ÝßÖÄòõòõööšœžœ—š¬—ž›š×ß݈—–‹šÝßÖÄòõööšœžœ—š¬—ž›š×ßÝ“žœ”ÝßÖÄòõöööòõöö˜ž’š¤ÝŒ‹–‘˜ŒÝ¢¤ÝšŒŒ ‹ Œžˆ‘Ý¢ßÂßÙݯ³¾«¹°­² ¯­º¬¬ «° ¬¯¾¨±ÝÄòõöö–™ß×ß“š‰š“Ñ‹šž’½žŒš›ßÖòõöö„òõööö˜ž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ýˆž–‹–‘˜ ™ ‹šž’ŒÝ¢ßÂßÙݲ¯ ¨¾¶«¶±¸ ¹°­ «º¾²¬ÝÄòõööö˜ž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ý‘š‘‹ ™™š–‹–‘˜ –‘Ý¢ßÂßÙݲ¯ °¯¯°±º±« ¹°­¹º¶«¶±¸ ¶±ÝÄòõöö‚òõööš“Œšòõöö„òõööö˜ž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ýˆž–‹–‘˜ ™ ‹šž’ŒÝ¢ßÂßÙݲ¯ ¨¾¶«¶±¸ ¹°­ ²°­º ¯³¾¦º­¬ÝÄòõööö˜ž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ý‘š‘‹ ™™š–‹–‘˜ –‘Ý¢ßÂßÙݲ¯ °¯¯°±º±« ¹°­¹º¶«¶±¸ ¶±ÝÄòõöö‚òõöö˜ž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ý’ž‹œ— Œ‹ž‹–‘˜ –‘Ý¢ßÂßÙݲ¯ ²¾«¼· ¬«¾­«¶±¸ ¶±ÝÄòõöö˜ž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ý’ž‹œ— šŒŠ’–‘˜ –‘Ý¢ßÂßÙݲ¯ ²¾«¼· ­º¬ª²¶±¸ ¶±ÝÄòõöö˜ž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ýˆž–‹–‘˜ ™ “ž†šŒÝ¢ßÂßÙݲ¯ ¨¾¶«¶±¸ ¹°­ ¯³¾¦º­¬ÝÄòõöö˜ž’š¤ÝŒ‹–‘˜ŒÝ¢¤ÝŒžˆ‘ ‘š‡‹ Š‘›Ý¢ßÂßÙݲ¯ ¬¯¾¨± ±º§« ­°ª±»ÝÄòõöö˜ž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ýˆž–‹–‘˜ ‹ Œžˆ‘Ý¢ßÂßÙݲ¯ ¨¾¶«¶±¸ «° ¬¯¾¨±ÝÄòõöö˜ž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ýˆž–‹–‘˜ ‹ Œž™šŒžˆ‘Ý¢ßÂßÙݲ¯ ¨¾¶«¶±¸ «° ¬¾¹º¬¯¾¨±ÝÄòõöö˜ž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ý’ž‹œ— Œ‹ž‹–‘˜Ý¢ßÂßÙݲ¯ ²¾«¼· ¬«¾­«¶±¸ÝÄòõöö˜ž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ýœ—ž‘˜š œ“žŒŒÝ¢ßÂßÙݲ¯ ¼·¾±¸º ¼³¾¬¬ ±º§« ¬¯¾¨±ÝÄòõöö˜ž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ý“žŒ‹ Œ‹ž‘›Ý¢ßÂßÙݲ¯ª¶ ³¾¬« ¬«¾±»ÝÄòõöö˜ž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ý™–‘ž“ Œ‹ž‘›Ý¢ßÂßÙݲ¯ª¶ ¹¶±¾³ ¬«¾±»ÝÄòõöö˜ž’š¤ÝŒ‹–‘˜ŒÝ¢¤ÝœË ›šž‹—Ý¢ßÂßÙݲ¯ª¶ ¼Ë »º¾«·ÝÄòõööòõöö˜ž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ýœˆž›Œ ˆž†Ý¢ßÂßÙݯ³¾«¹°­² ¼°¨¾­»¬ ¨¾¦ °ª«ÝÄòõööòõöö˜ž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ý‹–šÝ¢ßÂßÙݲ¯ ²¾«¼· «¶ºÝÄòõöö˜ž’š¤ÝŒ‹–‘˜ŒÝ¢¤ÝŠ‘› ›žˆÝ¢ßÂßÙݲ¯ ­°ª±» »­¾¨ÝÄòõòõöö˜ž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ý˜žš› ™“ž˜Ý¢ßÂßÙݲ¯ ¸­¾½½º» ¹³¾¸ ¹¶­¬«ÝÄòõöö˜ž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ýš‘š’–šŒ š“–’–‘ž‹š›Ý¢ßÂßÙݲ¯ º±º²¶º¬ º³¶²¶±¾«º»ÝÄòõöö˜ž’š¤ÝŒ‹–‘˜ŒÝ¢¤ÝŒœš “–’–‹ šžœ—š›Ý¢ßÂßÙݲ¯ ¬¼°­º ³¶²¶« ­º¾¼·º»ÝÄòõöö˜ž’š¤ÝŒ‹–‘˜ŒÝ¢¤ÝŠ‘› “–’–‹ šžœ—š›Ý¢ßÂßÙݲ¯ ­°ª±» ³¶²¶« ­º¾¼·º»ÝÄòõöö˜ž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ý‹–’š “–’–‹ šžœ—š›Ý¢ßÂßÙݲ¯ «¶²º ³¶²¶« ­º¾¼·º»ÝÄòõöö˜ž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ý“ž†šŒ ™™š–‹š›Ý¢ßÂßÙݲ¯ ¯³¾¦º­¬ ¹°­¹º¶«º»ÝÄòõöö˜ž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ý¬Ñ¾Ñ¬ß¨–‘Ý¢ßÂßÙݬ¾¬ ¨¶±ÝÄòõöö˜ž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ý¬š‹Œ‘ž…ߨ–‘Ý¢ßÂßÙݬ¯º«¬±¾¥ ¨¶±ÝÄòõòõöö˜ž’š¤Ýœ“ŒÝ¢¤Ý“ŠšÝ¢ßÂß×ÏÑÍÊÓÏÑÍÊÓÏÑÈÊÖÄòõöö˜ž’š¤Ýœ“ŒÝ¢¤Ýš›Ý¢ßÂß×ÏÑÈÊÓÏÑÍÊÓÏÑÍÊÖÄòõöö˜ž’š¤Ýœ“ŒÝ¢¤Ýˆ—–‹šÝ¢ßÂß×ÎÑÏÓÎÑÏÓÎÑÏÖÄòõöö˜ž’š¤Ýœ“ŒÝ¢¤Ý“žœ”Ý¢ßÂß×ÏÑÏÓÏÑÏÓÏÑÏÖÄòõöö˜ž’š¤Ýœ“ŒÝ¢¤Ý˜šš‘Ý¢ßÂß×ÏÑÍÊÓÏÑÈÊÓÏÑÍÊÖÄòõöö˜ž’š¤Ýœ“ŒÝ¢¤Ý†š““ˆÝ¢ßÂß×ÏÑÉÊÓÏÑÉÊÓÏÑÏÖÄòõöö˜ž’š¤Ýœ“ŒÝ¢¤Ýž‘˜šÝ¢ßÂß×ÎÑÏÓÏÑËÊÓÏÑÏÖÄòõòõöö˜ž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ýž““–šŒ š“–’–‘ž‹š›Ý¢ßÂß’žŒ£’£˜ž’š‹†šŒ£ ‹šž’ŒÅŘš‹«šž’º“–’–‘ž‹š›¬‹–‘˜×ßÝž““–šŒÝßÖÄòõöö˜ž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ýž““–šŒ ™™š–‹š›Ý¢ßÂß’žŒ£’£˜ž’š‹†šŒ£ ‹šž’ŒÅŘš‹«šž’¹™š–‹š›¬‹–‘˜×ßÝž““–šŒÝßÖÄòõöö˜ž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ýž““–šŒ ‘ž’šÝ¢ßÂß’žŒ£’£˜ž’š‹†šŒ£ ‹šž’ŒÅŘš‹«šž’±ž’š×ßÝž““–šŒÝßÖÄöòõöö˜ž’š¤Ý–œ‘ŒÝ¢¤Ýž““–šŒÝ¢ßÂß’žŒ£’£˜ž’š‹†šŒ£ ‹šž’ŒÅŘš‹«šž’¶œ‘×ßÝž““–šŒÝßÖÄöòõöö˜ž’š¤Ýœ“ŒÝ¢¤Ýž““–šŒÝ¢ßÂß’žŒ£’£˜ž’š‹†šŒ£ ‹šž’ŒÅŘš‹«šž’¼“×ßÝž““–šŒÝßÖÄöòõòõöö˜ž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ýž‡–Œ š“–’–‘ž‹š›Ý¢ßÂß’žŒ£’£˜ž’š‹†šŒ£ ‹šž’ŒÅŘš‹«šž’º“–’–‘ž‹š›¬‹–‘˜×ßÝž‡–ŒÝßÖÄòõöö˜ž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ýž‡–Œ ™™š–‹š›Ý¢ßÂß’žŒ£’£˜ž’š‹†šŒ£ ‹šž’ŒÅŘš‹«šž’¹™š–‹š›¬‹–‘˜×ßÝž‡–ŒÝßÖÄòõöö˜ž’š¤ÝŒ‹–‘˜ŒÝ¢¤Ýž‡–Œ ‘ž’šÝ¢ßÂß’žŒ£’£˜ž’š‹†šŒ£ ‹šž’ŒÅŘš‹«šž’±ž’š×ßÝž‡–ŒÝßÖÄöòõöö˜ž’š¤Ý–œ‘ŒÝ¢¤Ýž‡–ŒÝ¢ßÂß’žŒ£’£˜ž’š‹†šŒ£ ‹šž’ŒÅŘš‹«šž’¶œ‘×ßÝž‡–ŒÝßÖÄöòõöö˜ž’š¤Ýœ“ŒÝ¢¤Ýž‡–ŒÝ¢ßÂß’žŒ£’£˜ž’š‹†šŒ£ ‹šž’ŒÅŘš‹«šž’¼“×ßÝž‡–ŒÝßÖÄöòõööòõöö–™ß×ߘž’š¤Ýœ“ŒÝ¢¤Ýž““–šŒÝ¢ßÂÂß×ÏÓÏÓÏÖßÖòõööö˜ž’š¤Ýœ“ŒÝ¢¤Ýž““–šŒÝ¢ßÂß×ÏÑÊÓÏÑÊÓÏÑÊÖÄòõòõöö–™ß×ߘž’š¤Ýœ“ŒÝ¢¤Ýž‡–ŒÝ¢ßÂÂß×ÏÓÏÓÏÖßÖòõööö˜ž’š¤Ýœ“ŒÝ¢¤Ýž‡–ŒÝ¢ßÂß×ÏÑÊÓÏÑÊÓÏÑÊÖÄòõòõöö¤¤“š‰š“Ñ‘¯šœžœ—š¸ž’š«†š¢¢×ÖÄòõòõöö–™ß×ß“š‰š“Ñœ‘Œ“šßÖòõöö„òõööö–™ß×ßÞ“š‰š“ÑŒ“–‹Œœšš‘ßÖòõöööö“š‰š“Ñš’ž‹œ—¯š–›ßÂß’žŒ£’£˜ž’š‹†šŒ£ ‹ˆšž”ž“šŒÅŘš‹«ˆšž”ž“š©ž“Šš×ßݘž’šÝÓßݘžœšš–›ÝßÖÄòõöö‚òõööš“Œšòõöö„òõöööÐÐß™–Œ‹ßŠ‘›Óߌߌš‹ßŠßš’ž‹œ—òõööö“š‰š“Ñš’ž‹œ—¯š–›ßÂß’žŒ£’£˜ž’š‹†šŒ£ ‹ˆšž”ž“šŒÅŘš‹«ˆšž”ž“š©ž“Šš×ßݘž’šÝÓßÝ“ž†šˆž–‹‹–’šÝßÖÄòõööö“š‰š“Ñš’ž‹œ—¯š–›º‘›ßÂß’žŒ£’£˜ž’š‹†šŒ£ ‹ˆšž”ž“šŒÅŘš‹«ˆšž”ž“š©ž“Šš×ßݘž’šÝÓßÝ’ž‹œ—Œ‹ž‹‹–’šÝßÖÄòõöö‚òõö‚òõòõö–™ß×ßÞ–Œ»š™–‘š›×ߘž’š¤ÝŒ‹ž‹ŠŒÝ¢ßÖßÖòõöö˜ž’š¤ÝŒ‹ž‹ŠŒÝ¢ßÂßÝ‘’ž“ÝÄòõòõö’ž”š»‰ž¬š‰š¶‘™×ßÝŠ– ‰š‹–’šÝÓßטž’š¤ÝŒ‹ž‹ŠŒÝ¢ßÂÂß݉š‹–’šÝÖßÖÄòõòõö–™ß×ߘž’š¤ÝŒ‹ž‹ŠŒÝ¢ßÞÂß݉š‹–’šÝßÙÙߘž’š¤ÝŒ‹ž‹ŠŒÝ¢ßÞÂßÝ—ž“™‹–’šÝßÖòõö„òõöö˜ž’š¤Ý‹šž’¬œšŒÝ¢¤Ýž““–šŒÝ¢ßÂßÏÄòõöö˜ž’š¤Ý‹šž’¬œšŒÝ¢¤Ýž‡–ŒÝ¢ßÂßÏÄòõö‚òõöòõö–™×ßÞ–Œ»š™–‘š›×ߘž’š¤Ý‹–’š¯žŒŒš›Ý¢ßÖßÖòõöö˜ž’š¤Ý‹–’š¯žŒŒš›Ý¢ßÂßÏÄòõòõö–™×ßÞ–Œ»š™–‘š›×ߘž’š¤ÝŠ‘›Œ¯“ž†š›Ý¢ßÖßÖòõöö˜ž’š¤ÝŠ‘›Œ¯“ž†š›Ý¢ßÂßÏÄòõòõö–™ß×ßÞ–Œ»š™–‘š›×ߘž’š¤ÝŠ‘›Œ¨‘Ý¢ßÖßÖòõöö˜ž’š¤ÝŠ‘›Œ¨‘Ý¢ßÂߤ¢Äòõòõö–™ß×ß“š‰š“Ñ‹šž’½žŒš›ßÖòõö„òõöö–™ß×ßÞ–Œ»š™–‘š›×ߘž’š¤ÝŠ‘›Œ¨‘Ý¢¤Ýž‡–ŒÝ¢ßÖßÖòõööö˜ž’š¤ÝŠ‘›Œ¨‘Ý¢¤Ýž‡–ŒÝ¢ßÂßÏÄòõöö–™ß×ßÞ–Œ»š™–‘š›×ߘž’š¤ÝŠ‘›Œ¨‘Ý¢¤Ýž““–šŒÝ¢ßÖßÖööòõööö˜ž’š¤ÝŠ‘›Œ¨‘Ý¢¤Ýž““–šŒÝ¢ßÂßÏÄòõö‚òõöòõö“š‰š“јž’šº‘›š›ßÂß™ž“ŒšÄòõö“š‰š“Ñ™œš›º‘›ßÂß™ž“ŒšÄòõö“š‰š“Ñ—Œ‹¹œš›º‘›ßÂß™ž“ŒšÄòõòõö“š‰š“Ñ—ž›œš²›šßÂߘš‹»‰ž¶‘‹×ßݘ —ž›œšÝßÖÄòõö–™ß×ß“š‰š“Ñ—ž›œš²›šßÖòõöö“˜¬‹–‘˜×ßݘž’šß’›šÅß—ž›œšÝßÖÄòõòõö“š‰š“Ñ›–š·ž›²›šßÂߘš‹»‰ž¶‘‹×ßÝŒœ ›–š—ž›ÝßÖÄòõöòõö–™ß×ßÞ“š‰š“Ñ‹šž’½žŒš›ßÖòõöö“š‰š“Ñ›–š·ž›²›šßÂßÏÄòõòõö–™ß×ß“š‰š“Ñ›–š·ž›²›šßÖòõöö“˜¬‹–‘˜×ßݘž’šß’›šÅß›–š—ž›ÝßÖÄòõòõö“š‰š“Ñ”–““Œ‹šž”­šˆž›ŒßÂߘš‹»‰ž¶‘‹×ßÝŒœ ˜ž’š —ž›–‘‹ŒÝßÖÄòõòõöÐÜòõö–‘‹³‘×ßݬº¬¬¶°±ß¶±¹°ÝßÖÄòõö–‘‹³‘×ßÝÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÝßÖÄòõö–‘‹³‘×ßÝßß²žÅßßßßßßßßßÝßÔß“š‰š“ÑŒœ–‹ßÖÄòõö–‘‹³‘×ßÝß߬œ–‹ÅßßßßßßÝßÔß“š‰š“јž’š‹†šßÖÄòõö–‘‹³‘×ßÝßß·ž›¼šÅßßßßÝßÔß“š‰š“Ñ—ž›œš²›šßÖÄòõö–‘‹³‘×ßÝßß»–š—ž›ÅßßßßßÝßÔß“š‰š“Ñ›–š·ž›²›šßÖÄòõö–‘‹³‘×ßÝßß̛߯šŒ‘ÅßßÝßÔߘš‹»‰ž¶‘‹×ßÝœž’šž ‹—–›šŒ‘ÝßÖßÖÄòõö–‘‹³‘×ßÝßß­Š‘›ÅßßßßßßßÝßÔߘž’š¤ßÝŠ‘›Œ¯“ž†š›ÝߢßÖÄòõö–‘‹³‘×ßÝßߌœ ÝßÔß“š‰š“јž’š‹†šßÔßÝ Œœš“–’–‹ßÝßÔߘš‹»‰ž×ßÝŒœ ÝßÔß“š‰š“јž’š‹†šßÔßÝ Œœš“–’–‹ÝßÖßÖÄòõö–‘‹³‘×ßÝßߌœ ÝßÔß“š‰š“јž’š‹†šßÔßÝ Š‘›“–’–‹ßÝßÔ˜š‹»‰ž×ßÝŒœ ÝßÔß“š‰š“јž’š‹†šßÔßÝ Š‘›“–’–‹ÝßÖßÖÄòõö–‘‹³‘×ßÝßߌœ ÝßÔß“š‰š“јž’š‹†šßÔßÝ ˆ–‘“–’–‹ßÝßÔߘš‹»‰ž×ßÝŒœ ÝßÔß“š‰š“јž’š‹†šßÔßÝ ˆ–‘“–’–‹ÝßÖßÖÄòõö–‘‹³‘×ßÝßߌœ ÝßÔß“š‰š“јž’š‹†šßÔßÝ ‹–’š“–’–‹ßÝßÔߘš‹»‰ž×ßÝŒœ ÝßÔß“š‰š“јž’š‹†šßÔßÝ ‹–’š“–’–‹ÝßÖßÖÄòõö–‘‹³‘×ßÝßߌœ ÝßÔß“š‰š“јž’š‹†šßÔßÝ ‘Š’“–‰šŒßÝßÔߘš‹»‰ž×ßÝŒœ ÝßÔß“š‰š“јž’š‹†šßÔßÝ ‘Š’“–‰šŒÝßÖßÖÄòõö–‘‹³‘×ßÝßߌœ ÝßÔß“š‰š“јž’š‹†šßÔßÝ —ž“™‹–’šßÝßÔߘš‹»‰ž×ßÝŒœ ÝßÔß“š‰š“јž’š‹†šßÔßÝ —ž“™‹–’šÝßÖßÖÄòõö–‘‹³‘×ßÝßߌœ ÝßÔß“š‰š“јž’š‹†šßÔßÝ Š‘›Œˆ–‹œ—ßÝßÔߘš‹»‰ž×ßÝŒœ ÝßÔß“š‰š“јž’š‹†šßÔßÝ Š‘›Œˆ–‹œ—ÝßÖßÖÄòõö–‘‹³‘×ßÝÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÝßÖÄòõöÜÐòõòõöÐÐß‹—–Œß˜š‹ŒßŒš‹ß‹ß™ž“Œšßˆ—š‘ߌ’š‘šß‹ž”šŒß›ž’ž˜šßߞߘž’š‹†šÒŒšœ–™–œßš‰š‘‹ß—žš‘ŒÑòõö“š‰š“ÑŠŒš¬‹ž‹¬žˆ‘ŒßÂß‹ŠšÄòõòõöÐÐß’Š“‹–“–šß™ßŒœšß™’ß•šœ‹–‰šŒòõö“š‰š“Ñ•šœ‹–‰š¯–‘‹Œ²›ßÂßÎÄòõòõö–™ß×ß’ž‹œ—²ž”–‘˜¸ž’š×ÖßÖöòõöö“š‰š“Ñ’ž‡¾““ˆš›«šž’´–““ŒßÂßÍÄòõöš“Œšòõöö“š‰š“Ñ’ž‡¾““ˆš›«šž’´–““ŒßÂßÒÎÄòõööòõö‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ šŒ–Œ‹š‘œšÅÅ–‘–‹×ÖÄòõö‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ ’š‘ŠŒÅÅ–‘–‹×ÖÄòõö‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š›ÅÅ–‘–‹×ÖÄòõö‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ Œš‰šŒš‹‹–‘˜ŒÅÅ–‘–‹×ÖÄòõö‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ ‹šž’ŒÅÅ–‘–‹×ÖÄòõö‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ ˆšž‘ŒÅÅ–‘–‹×ÖÄòõö‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ ”–““œž’ÅÅ–‘–‹×ÖÄòõö‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ Œ—š““Œ—œ”ÅÅ–‘–‹×ÖÄòõö‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ ›šž‹—–œ‘ŒÅÅ–‘–‹×ÖÄòõö‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ ›ž’ž˜š™šš›žœ”ÅÅ–‘–‹×ÖÄòõö‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —šž“‹—‰š“ž†ÅÅ–‘–‹×ÖÄòõö‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ Œšœ‹ž‹–‘˜ÅÅ–‘–‹×ÖÄòõö‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ •–‘‹ŒÅÅ–‘–‹×ÖÄòõö‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ ˜ž’š•šœ‹ŒÅÅ–‘–‹×ÖÄòõö‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ Œžˆ‘“˜–œÅÅ–‘–‹×ÖÄòõö‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ ž‹‹“šœ—ž‹‹š ’ÅÅ–‘–‹×ÖÄòõö‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ ’ŠŒ–œ ž‘› ›–ž“˜ÅÅ–‘–‹×ÖÄòõö‹—šž›ß’žŒ£’£ ’ž‹œ—›ž‹žÅÅ–‘–‹×ÖÄòõö‹—šž›ß’žŒ£’£ žˆž›ŒÅÅ–‘–‹×ÖÄòõö‹—šž›ß’žŒ£’£ Œ”–““ÅÅ–‘–‹×ÖÄòõö‹—šž›ß’žŒ£’£ žšžŒÅÅ–‘–‹×ÖÄòõö‹—šž›ß’žŒ£’£”–““Œ‹šž”Œ£ ”–““Œ‹šž”ŒÅÅ–‘–‹×ÖÄòõöÐЋ—šž›ß’žŒ£’£ š”ŒÅÅ–‘–‹×ÖÄßÐÐ߱ߓ‘˜šß–‘ߊŒšÓßš’‰š›ß™’ßœ’’‘ߌœ–‹ŒÑß׌’ž‹ßžˆÖòõö‹—šž›ß’žŒ£’£š”Œ£ š”ŒÅÅ–‘–‹×ÖÄòõö‹—šž›ß’žŒ£’£ š‰š‘‹ŒÅÅ–‘–‹×ÖÄòõö‹—šž›ß’žŒ£’£ ›š™œ‘ÅÅ–‘–‹×ÖÄòõöòõö–™ß×ß“š‰š“Ñ‹šž’½žŒš›ßÖòõöö‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ ™–š‘›–œ‘ŒÅÅ–‘–‹×ÖÄòõööòõö‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅÅ–‘–‹×ÖÄòõòõö–™ß×ßÞ“š‰š“Ñœ‘Œ“šßÖòõöö‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ ŽŠ–œ”’šŒŒž˜šŒÅÅ–‘–‹×ÖÄòõòõö™šžœ—ß×ß“œ¬‹–‘˜ß–‘ߘž’š¤ÝŒ‹–‘˜ŒÝ¢ßÖòõööšœžœ—š¬‹–‘˜×ß“œ¬‹–‘˜ßÖÄòõòõö™šžœ—ß×ß–œ‘ß–‘ߘž’š¤Ý–œ‘ŒÝ¢ßÖòõööšœžœ—š¬—ž›š×ß–œ‘ßÖÄòõòõö˜ž’š¤Ý˜ž’šŒ‹ž‹š›Ý¢ßÂß‹ŠšÄòõòõö“š‰š“Ñ’ž‡¯“ž†š¼Š‘‹ßÂßÏÄòõö“š‰š“шž‰š»š“ž†¤Ýž““–šŒÝ¢ßÂßÏÄòõö“š‰š“шž‰š»š“ž†¤Ýž‡–ŒÝ¢ßÂßÏÄòõö“š‰š“Ñ“žŒ‹¨ž‰š¤Ýž““–šŒÝ¢ßÂßÏÄòõö“š‰š“Ñ“žŒ‹¨ž‰š¤Ýž‡–ŒÝ¢ßÂßÏÄòõö“š‰š“шž‰š¯“ž†š¬žˆ‘¶‘›š‡¤Ýž““–šŒÝ¢ßÂßÏÄòõö“š‰š“шž‰š¯“ž†š¬žˆ‘¶‘›š‡¤Ýž‡–ŒÝ¢ßÂßÏÄòõö“š‰š“Ñž“–‰š¯“ž†šŒ¤Ýž““–šŒÝ¢ßÂߤ¢Äòõö“š‰š“Ñž“–‰š¯“ž†šŒ¤Ýž‡–ŒÝ¢ßÂߤ¢Äòõö“š‰š“Ñžœ‹–‰š¯“ž†šŒßÂߤ¢Äòõòõö’ž”š»‰ž¬š‰š¶‘™×ßÝŠ– Œœš“–’–‹ÝÓßÏßÖÄòõö’ž”š»‰ž¬š‰š¶‘™×ßÝŠ– ž““ˆ œ“žŒŒœ—ž‘˜šÝÓߘš‹»‰ž×ßÝŠ– ž““ˆ œ“žŒŒœ—ž‘˜šÝßÖßÖÄòõö’ž”š»‰ž¬š‰š¶‘™×ßÝŠ– ž““ˆ ‹šž’œ—ž‘˜šÝÓßÎßÖÄòõöŒš‹»‰ž×ßÝŠ– ž““ˆ ‹šž’œ—ž‘˜šÝÓßÎßÖÄòõöòõö–™ß×ߘš‹¸ž’š‹†š±Š’³–‰šŒ×ÖßÖòõööŒš‹›‰ž×ßݘ ›šž›¼—ž‹ÝÓßÏßÖÄòõöš“ŒšòõööŒš‹›‰ž×ßݘ ›šž›¼—ž‹ÝÓßÎßÖÄòõöòõöˆž‰š»š“ž†ßÂߘš‹»‰ž¶‘‹×ßÝŒœ ÝßÔß“š‰š“јž’š«†šßÔßÝ ˆž‰ššŒžˆ‘›š“ž†ÝßÖÄòõö–™ß×߈ž‰š»š“ž†ßÖòõö„òõöö“š‰š“шž‰š»š“ž†¤Ýž““–šŒÝ¢ßÂ߈ž‰š»š“ž†Äòõöö“š‰š“шž‰š»š“ž†¤Ýž‡–ŒÝ¢ßÂ߈ž‰š»š“ž†Äòõöö“š‰š“Ñ“žŒ‹¨ž‰š¤Ýž““–šŒÝ¢ßÂßÏÄòõöö“š‰š“Ñ“žŒ‹¨ž‰š¤Ýž‡–ŒÝ¢ßÂßÏÄòõööòõöö“š‰š“ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ ˜ž’š“˜–œÅňž‰š¬žˆ‘«–’š×ÖÄòõö‚òõöòõö˜ž’š¹“ž˜¶‘–‹×ßÝš’ž‹œ— ›‘šÝÓß™ž“ŒšßÖÄòõöòõö“š‰š“јžœš¯š–›ßÂßÎÊÄòõöòõö“š‰š“Ñ–‘¸žœš¯š–›ßÂß“š‰š“јžœš¯š–›Äòõö˜ž’š¹“ž˜¶‘–‹×ßݘžœšš–› ›‘šÝÓß™ž“ŒšßÖÄòõöòõö“š‰š“ÑŠ‘›º‘›»š“ž†ßÂßËÄòõö“š‰š“Ñ—ž“™‹–’š­Š‘›º‘›»š“ž†ßÂßËÄòõòõöòõö–™ß×ß“š‰š“Ñ‹šž’½žŒš›ßÖòõö„òõöö’žŒ£’£˜ž’š‹†šŒ£ ˜ž’šŒœšÅÅŠ›ž‹š«šž’¬œš×ßÝž‡–ŒÝßÖÄòõöö’žŒ£’£˜ž’š‹†šŒ£ ˜ž’šŒœšÅÅŠ›ž‹š«šž’¬œš×ßÝž““–šŒÝßÖÄòõö‚òõöš“Œšòõö„òõöö‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ ˜ž’šŒœšÅÅ–‘–‹–ž“»²¬œšª›ž‹š×ÖÄòõö‚òõòõö‹—šž›ßŠ›ž‹šª¶¬œš³–’–‹×ÖÄòõö“š‰š“ß‘‹–™†ß×ßÝŠ›ž‹š Œœš“–’–‹ÝßÖÄòõòõöòõö¤¤“š‰š“Ñ‘¬‹ž‹¸ž’š«†š¢¢×ÖÄòõöòõöÐÐß‹—–Œß’ŠŒ‹ßšßž™‹šß‘Œ‹ž‹˜ž’š‹†šß™ßŒœ Œ—ˆŒžˆ‘Œß‹ßˆ”߈—š‘ߌš‹ßž‹ßŒ‹ž‹ß™ß˜ž’šòõöÐÜòõö‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ ›š‰ÅÅ–‘–‹×ÖÄòõöÜÐòõöòõö‹—šž›ßŒ‹ž‹¸ž’š×ÖÄòõòõö“š‰š“ß‹—šž›ßŠ›ž‹š¨ž‹œ—š›»‰žŒ×ÖÄòõö“š‰š“ß‹—šž›ß‹–’š³–’–‹«—šž›×ÖÄòõ‚òõòõòõ¼ž““žœ” ¼›šº‘›¸ž’š×Öòõ„òõöš‘›ž‹†×ÖÄòõòõö–™ß×ßÞ“š‰š“јž’šº‘›š›ßÖòõöö“š‰š“ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ ˜ž’š“˜–œÅÅ™œšº‘›×ÖÄòõ‚òõòõòõ‹–’š³–’–‹«—šž›×Öòõ„òõö“š‰š“ßš‘›‘ß×ßݘž’š š‘›š›ÝßÖÄòõöòõöš‰«–’š¯žŒŒš›ßÂߘš‹«–’š¯žŒŒš›×ÖÄòõöòõöˆ—–“šß×ߘž’š¤ÝŒ‹ž‹šÝ¢ßÂÂßÝ“ž†–‘˜ÝßÖòõö„òõöö‹—šž›ßœ—šœ”«–’š³–’–‹×ßš‰«–’š¯žŒŒš›ßÖÄòõööš‰«–’š¯žŒŒš›ßÂߘš‹«–’š¯žŒŒš›×ÖÄòõööòõööÐÐß’ž”šßŒŠšßˆšßœ—šœ”ß‹–’šß“–’–‹ß–˜—‹ßˆ—š‘ߘž’šßš‘›Œòõöö–™ß×ß–Œ›š™–‘š›×ß“š‰š“ÑŒ‹ž‹«–’šßÖßÖòõöö„òõööö–™ß×ߘš‹«–’š­š’ž–‘–‘˜×ÖßÃßÌÏÏÏßÖòõööö„òõööööˆž–‹ßÑÎÄòõööööœ‘‹–‘ŠšÄòõööö‚òõöö‚òõööˆž–‹ßÎÄòõö‚öòõ‚òõòõòõŠ›ž‹šª¶¬œš³–’–‹×Öòõ„òõö™ß×ßÄÄßÖòõö„òõöö“š‰š“߈ž–‹‹–““ š–‹—šß×ßÝŠ›ž‹š Œœš“–’–‹ÝÓßÝŠ›ž‹š ˆ–‘“–’–‹ÝßÖÄòõööòõöö–™ß×ßÞ–Œ­Š‘›½žŒš›×Ö߃ƒßÞ–Œ°•šœ‹–‰š½žŒš›×ÖßÖòõöö„òõöööŒš‹»‰ž×ßÝŠ– Œœš“–’–‹ÝÓߘš‹¨ž‹œ—š›»‰ž×ßÝŒœš“–’–‹ÝßÖßÖÄòõööö‹—šž›ßœ—šœ”¬œš³–’–‹×ÖÄòõöö‚òõööš“Œšòõöö„òõöööŒš‹»‰ž×ßÝŠ– Œœš“–’–‹ÝÓߘš‹¨ž‹œ—š›»‰ž×ß݈–‘“–’–‹ÝßÖßÖÄòõöö‚òõö‚òõ‚òõòõòõ“ž†«–œ”–‘˜¬Š‘›×Öòõ„òõöŒš“™ßš‘›‘×Ý›šž‹—ÝÖÄòõöŒš“™ßš‘›‘×ÝŒ‹ ‹–œ”–‘˜ÝÖÄòõö“š‰š“ßš‘›‘×ݘž’š š‘›š›ÝÖÄòõöòõö‹–’šßÂß“š‰š“Ñ’«–’šÄòõöòõöˆ—–“š×ÎÖòõö„òõööŒš“™ß“ž†¬Š‘›×ßÝŠ– ’ ŒŠ–‹œžŒš’ ‹–’šÝßÖÄòõööòõöö–™ß×ß‹–’šßÁßÎÏßÖòõöö„òõööö‹–’šßÒÂßÎÄòõöööˆž–‹ßÎÄòõöö‚òõööš“Œšß–™ß×ß‹–’šßÁßËßÖòõöö„òõööö‹–’šßÒÂßÑÊÄòõöööˆž–‹ßÑÊÄòõöö‚òõööš“Œšß–™ß×ß‹–’šßÁßÎßÖòõöö„òõööö‹–’šßÒÂßÑËÄòõöööˆž–‹ßÑËÄòõöö‚òõööš“Œšòõöö„òõööö‹–’šßÒÂßÑÌÄòõöööˆž–‹ßÑÌÄòõöö‚òõöö’žŒ£’£˜ž’š‹†šŒ£ —Œ‹’–˜ž‹–‘Åňž–‹«–““·Œ‹²–˜ž‹–‘»‘š×ÖÄòõö‚òõ‚òõòõŒ‹«–œ”–‘˜¬Š‘›×Öòõ„òõöŒš“™ß‘‹–™†×ÝŒ‹ ‹–œ”–‘˜ÝÖÄòõ‚òõòõ‹–’š³–’–‹¼“œ”×Öòõ„òõö“š‰š“ßš‘›‘ß×ßݘž’š š‘›š›ÝßÖÄòõöòõöˆž–‹ßÑÏÊÄòõöòõöœ“œ”°•šœ‹ßÂߌžˆ‘×ßÝŒœ–‹ –˜–‘ÝÓß×ÏÓÏÓÏÖßÖÄòõöœ“œ”°•šœ‹ß—–›š×ÖÄòõöòõöˆ—–“šß×ߘž’š¤ÝŒ‹ž‹šÝ¢ßÂÂßÝ“ž†–‘˜ÝßÖòõö„òõöö–™ß×ßÞ“š‰š“Ñ‹–’š¬‹š›ßÙÙߘš‹«–’š³–’–‹×ÖßÖòõöö„òõööö‹–’š³š™‹ßÂߘš‹«–’š­š’ž–‘–‘˜×ÖßÐßÎÏÏÏÄòõööö‹–’š³š™‹¶‘‹ßÂß–‘‹×‹–’š³š™‹ßÔßÏÑÊÖÄßÐÐßž››–‘˜ßÑÊßž‘›ß™“–‘˜ßŠ‘›Œß–‹Ñòõöööòõööö–™ß×ߘš‹·ž“™«–’š×ÖßÙÙß‹–’š³š™‹¶‘‹ßÁßטš‹«–’š³–’–‹×ÖÕÉÏÖßÕßÏÑÊßÖòõöööö‹–’š³š™‹¶‘‹ßÒÂß–‘‹×טš‹«–’š³–’–‹×ÖÕÉÏÖßÕßÏÑÊÖÄòõöööòõööö–™ß×ß׋–’š³š™‹¶‘‹ßÁÂßÌÏßÙÙß‹–’š³š™‹¶‘‹ßÃÂßÉÏÖßÖòõöööö“š‰š“ß‘‹–™†ß×ßÝ’ž‹œ— š‘›–‘˜ Œ‘ÝÓßÝ‹–’šÝßÖÄòõòõööö–™ß×ß‹–’š³š™‹¶‘‹ßÃÂßÎÏ߃ƒß׋–’š³š™‹¶‘‹ßÃÂßÌÏßÙÙß‹–’š³š™‹¶‘‹ßÚßÍßÂÂßÏÖßÖòõööö„òõöööö“š‰š“ß‘‹–™†ß×ßÝ’ž‹œ— š‘›–‘˜ ‰š† Œ‘ÝßÖÄòõööööÐÐß›‘Ø‹ß“ž†ßžß‹–œ”ßž‹ßš‡žœ‹“†ßÏߌšœ‘›ŒÓß‹—ž‹ØŒßˆ—š‘ߌ’š‹—–‘˜ßŒ—Š“›ßšß—žš‘–‘˜Þòõöööö–™ß×ß‹–’š³š™‹¶‘‹ßÂÂßÏßÖòõöööööšž”Äòõööööòõööööœ“œ”°•šœ‹ß“ž†¬Š‘›×ßÝŠ– ’ ‹–’š œŠ‘‹›ˆ‘ÝßÖÄòõööö‚òõöööòõöööÐÐߌ†‘œ—‘–…šß‹ßšßš‡žœ‹“†ß‘ß‹—šßŒšœ‘›òõööö–™ß×ß‹–’š³š™‹ßÒß™“׋–’š³š™‹ÖßÁÂßÑÏÊßÖòõööööˆž–‹ß‹–’š³š™‹ßÒß™“׋–’š³š™‹ÖÄòõöö‚òõòõööˆž–‹ß×ßÎÑÏßÖÄòõö‚òõ‚òõòõòõ˜ž’š«–’š×Öòõ„òõö“š‰š“ßš‘›‘ß×ßݘž’š š‘›š›ÝßÖÄòõöòõö“š‰š“߈ž–‹‹–““×Ýš’ž‹œ— ‰šÝÖÄòõöòõö“š‰š“ÑŒ‹ž‹«–’šßÂߘš‹«–’š×ÖÄòõö“š‰š“Ñ›–Œœž›«–’šßÂßÏÄòõöòõö–™ß×ß–Œ»š™–‘š›×ߘž’š¤ÝŠ‘›²–““–Œšœ‘›Œ¾“šž›†¯žŒŒš›Ý¢ßÖßÖòõö„òõöö“š‰š“ÑŒ‹ž‹«–’šßÒÂߘž’š¤ÝŠ‘›²–““–Œšœ‘›Œ¾“šž›†¯žŒŒš›Ý¢Äòõöö˜ž’š¤ÝŠ‘›²–““–Œšœ‘›Œ¾“šž›†¯žŒŒš›Ý¢ßÂߊ‘›š™–‘š›Äòõö‚òõöòõöš‰‹–’šßÂߘš‹‹–’š×ÖÄòõöòõöˆ—–“šß×ߘž’š¤ÝŒ‹ž‹šÝ¢ßÂÂßÝ“ž†–‘˜ÝßÖòõö„òõöö–™ß×ßÞ“š‰š“Ñ‹–’š¬‹š›ßÖòõöö„òõöööÐÐß‹—šßˆž–‹ß–Œ‘Ø‹ßž“ˆž†Œßš‡žœ‹“†ßÎߌšœ‘›Ñß›Š‘‘߈—†Ñòõööö˜ž’š¤Ý‹–’š¯žŒŒš›Ý¢ßÔÂߘš‹‹–’š×ÖßÒßš‰‹–’šÄòõöö‚òõööš‰‹–’šßÂߘš‹‹–’š×ÖÄòõööˆž–‹ß×ßÎÑÏßÖÄòõö‚òõ‚òõòõª›ž‹š«–’š¯žŠŒš›‘šŒŒ×Öòõ„òõöŒ—Š“›½š¬‹š›ßÂß“š‰š“Ñ‹–’š¬‹š›¹¸ž’š²›šßƒƒß–Œ»š™–‘š›×ß“š‰š“Ñ—Œ‹²–˜ž‹–‘«–’šßÖÄòõö–™ß×ßÞ˜ž’š¹“ž˜×ßÝš’ž‹œ— ›‘šÝßÖßÖòõööŒ—Š“›½š¬‹š›ßÂß™ž“ŒšÄòõöòõö–™ß×ßÞ“š‰š“Ñ‹–’š¬‹š›ßÙÙߌ—Š“›½š¬‹š›ßÖòõö„òõöö“š‰š“Ñ‹–’š¬‹š›ßÂß‹ŠšÄòõöö“š‰š“Ñ‹–’š¯žŠŒš«–’šßÂߘš‹‹–’š×ÖÄòõö‚òõöš“Œšß–™ß×ß“š‰š“Ñ‹–’š¬‹š›ßÙÙßÞŒ—Š“›½š¬‹š›ßÖòõö„òõöö“š‰š“Ñ‹–’š¬‹š›ßÂß™ž“ŒšÄòõöö“š‰š“Ñ›–Œœž›«–’šßÔÂߘš‹‹–’š×ÖßÒß“š‰š“Ñ‹–’š¯žŠŒš«–’šÄòõö‚òõ‚òõòõžŠŒš«–’š×Öòõ„òõö“š‰š“Ñ‹–’š¬‹š›¹¸ž’š²›šßÂß‹ŠšÄòõöª›ž‹š«–’š¯žŠŒš›‘šŒŒ×ÖÄòõ‚òõòõšŒŠ’š«–’š×Öòõ„òõö“š‰š“Ñ‹–’š¬‹š›¹¸ž’š²›šßÂß™ž“ŒšÄòõöª›ž‹š«–’š¯žŠŒš›‘šŒŒ×ÖÄòõ‚òõòõòõŒ‹ž‹¸ž’š×Öòõ„òõö‹—šž›ß˜ž’š«–’š×ÖÄòõö“š‰š“Ñ‹–’š¬‹š›ßÂß™ž“ŒšÄòõö“š‰š“Ñ‹–’š¬‹š›¹¸ž’š²›šßÂß™ž“ŒšÄòõö‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ Œžˆ‘“˜–œÅÅŒžˆ‘¯š¹ž’šª›ž‹š×ÖÄòõòõöš’ž‹œ—¯š–›×ÖÄòõö˜ž’š¹“ž˜¬š‹×ßÝš’ž‹œ— ›‘šÝßÖÄöòõö“š‰š“ß‘‹–™†×Ýš’ž‹œ— ‰šÝÖÄòõöòõöª›ž‹š«–’š¯žŠŒš›‘šŒŒ×ÖÄòõöòõö‹—šž›ß‹–’š³–’–‹¼“œ”×ÖÄòõö‹—šž›ß˜žœš¯š–›×ÖÄòõòõö‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ ’–ŒŒ–‘ŒÅÅŠ‘›½š˜–‘×ÖÄöòõ‚òõòõòõˆž‰š¬žˆ‘«–’š×Öòõ„òõö“š‰š“ßš‘›‘×ßݘž’š š‘›š›ÝßÖÄòõòõöˆ—–“šß×ߘž’š¤ÝŒ‹ž‹šÝ¢ßÂÂßÝ“ž†–‘˜ÝßÖòõö„òõöö‹–’šßÂߘš‹«–’š×ÖÄòõööòõöö–™ß×ß‹–’šßÒß“š‰š“Ñ“žŒ‹¨ž‰š¤Ýž““–šŒÝ¢ßÁßדš‰š“шž‰š»š“ž†¤Ýž““–šŒÝ¢ßÕßÎÏÏÏÖßÖòõöö„òõööö“š‰š“ß‘‹–™†ß×ß݈ž‰š šŒžˆ‘ ž““–šŒÝßÖÄòõööö“š‰š“Ñ“žŒ‹¨ž‰š¤Ýž““–šŒÝ¢ßÂß‹–’šÄòõööö“š‰š“шž‰š¯“ž†š¬žˆ‘¶‘›š‡¤Ýž““–šŒÝ¢ßÂßÏÄòõöö‚òõòõöö–™ß×ß‹–’šßÒß“š‰š“Ñ“žŒ‹¨ž‰š¤Ýž‡–ŒÝ¢ßÁßדš‰š“шž‰š»š“ž†¤Ýž‡–ŒÝ¢ßÕßÎÏÏÏÖßÖòõöö„òõööö“š‰š“ß‘‹–™†ß×ß݈ž‰š šŒžˆ‘ ž‡–ŒÝßÖÄòõööö“š‰š“Ñ“žŒ‹¨ž‰š¤Ýž‡–ŒÝ¢ßÂß‹–’šÄòõööö“š‰š“шž‰š¯“ž†š¬žˆ‘¶‘›š‡¤Ýž‡–ŒÝ¢ßÂßÏÄòõöö‚òõööòõööˆž–‹ß×ßÏÑÏÊßÖÄòõö‚òõ‚òõòõòõ˜š‹½š‹‹š«šž’×Öòõ„òõö”–““Œ¤Ýž““–šŒÝ¢ßÂßÏÄòõö”–““Œ¤Ýž‡–ŒÝ¢ßÂßÏÄòõö›šž‹—Œ¤Ýž““–šŒÝ¢ßÂßÏÄòõö›šž‹—Œ¤Ýž‡–ŒÝ¢ßÂßÏÄòõöòõö™šžœ—ß×ß“ž†šß–‘ß“š‰š“Ñ“ž†šŒßÖòõö„òõöö‹šž’ßÂß“ž†šÑšŒ¤Ý‹šž’Ý¢Äòõöö–™ß×ß–Œ»š™–‘š›×ß‹šž’ßÖßÙÙß׋šž’ßÂÂßÝž““–šŒÝ߃ƒß‹šž’ßÂÂßÝž‡–ŒÝÖßÖòõöö„òõööö”–““Œ¤ß‹šž’ߢßÔÂß“ž†šÑ”–““ŒÄòõööö›šž‹—Œ¤ß‹šž’ߢßÔÂß“ž†šÑ›šž‹—ŒÄòõöö‚òõö‚òõöòõö–™ß×ß”–““Œ¤Ýž““–šŒÝ¢ßÁß”–““Œ¤Ýž‡–ŒÝ¢ßÖòõööš‹Š‘ßÝž““–šŒÝÄòõöš“Œšß–™ß×ß”–““Œ¤Ýž‡–ŒÝ¢ßÁß”–““Œ¤Ýž““–šŒÝ¢ßÖòõööš‹Š‘ßÝž‡–ŒÝÄòõöòõöÐÐߌž’šß‘Š’šß™ß”–““Œòõòõö–™ß×ß›šž‹—Œ¤Ýž““–šŒÝ¢ßÃß›šž‹—Œ¤Ýž‡–ŒÝ¢ßÖòõööš‹Š‘ßÝž““–šŒÝÄòõöš“Œšß–™ß×ß›šž‹—Œ¤Ýž‡–ŒÝ¢ßÃß›šž‹—Œ¤Ýž““–šŒÝ¢ßÖòõööš‹Š‘ßÝž‡–ŒÝÄòõöòõöÐÐߌž’šß‘Š’šß™ß›šž‹—Œòõöòõö–™ß×ßž‘›’–‘‹×ÍÖßÂÂßÏßÖòõööš‹Š‘ßÝž““–šŒÝÄòõöš‹Š‘ßÝž‡–ŒÝÄòõ‚òõòõòõž‘”š›²ž‹œ—ª›ž‹šŒ×߈–‘‘šßÖòõ„òõö–™ß×ß’ž‹œ—²ž”–‘˜¸ž’š×ÖßÖòõö„òõööŒš‹§š‘‘­ž‘”Œ×ÖÄòõööòõöö–™ß×ß—Œ‹¶›“š›°Š‹×ÖßÖòõöö„òõööö“š‰š“Ñ—Œ‹¹œš›º‘›ßÂß‹ŠšÄòõööö“˜¬‹–‘˜×ßÝ—Œ‹ß–›“š›ßŠ‹ÝßÖÄòõöööš‘›³†×ÖÄòõöö‚òõòõööŠ›ž‹š²ž‹œ—½‘ŠŒ¬œšŒ×߈–‘‘šßÖÄòõö‚òõòõöŠ›ž‹š¨–‘³ŒŒ¬‹ž‹Œ×߈–‘‘šßÖÄòõ‚òõòõòõ›–Œ“ž†­Š‘›º‘›×߈–‘‘šÓßš‘›­šžŒ‘«š‡‹ßÖòõ„òõö™šžœ—ß×ß“ž†šß–‘ß“š‰š“Ñ“ž†šŒßÖòõö„òõöö–™ß×ß–Œ»š™–‘š›×ß“ž†šÑœ‘‘šœ‹š›¯Œ‹¸ž’šßÖ߃ƒß“ž†šÑšŒ¤Ý‹šž’Ý¢ßÂÂßÝŒšœ‹ž‹ÝßÖòõöööœ‘‹–‘ŠšÄòõööòõöö–™ß×ß“š‰š“Ñ‹šž’½žŒš›ßÖòõööö“ž†šß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅÅ‹šž’°Š‹œ’š±‹–™†×߈–‘‘šÓß‹ŠšÓßš‘›­šžŒ‘«š‡‹ßÖÄòõööš“Œšòõööö“ž†šß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅÅŠ‹œ’š±‹–™†×߈–‘‘šÓßš‘›­šžŒ‘«š‡‹ßÖÄòõö‚òõòõö–™ß×ßÞˆžŒ³žŒ‹­Š‘›×ÖßÖòõöö“š‰š“ß‘‹–™†ß×ßÝŠ‘› ˆ–‘ÝÓ߈–‘‘šßÖÄòõöòõö–™ß×߈žŒ³žŒ‹­Š‘›×ÖßÖòõööŠ‘›º‘›¨ž–‹×ß“š‰š“ÑŠ‘›º‘›»š“ž†Óß™ž“ŒšßÖÄòõöš“ŒšòõööŠ‘›º‘›¨ž–‹×ß“š‰š“ÑŠ‘›º‘›»š“ž†Óß‹ŠšßÖÄöòõ‚òõòõòõ›–Œ“ž†¸ž’šº‘›×߈–‘‘šÓßš‘›­šžŒ‘«š‡‹ßÖòõ„öòõöÐÐßœž‹œ—–‘˜ß˜ž’š‹†šÓߌ–‘œšß»²ß™œšº‘›ßŒš‘›Œßˆ–‘‘šßžŒß“ž†šßš‘‹–‹†Óß–‘Œ‹šž›ß™ßŒ‹–‘˜òõö™šžœ—ß×ß“ž†šß–‘ß“š‰š“Ñ“ž†šŒßÖòõö„òõöö–™ß×ß–Œ»š™–‘š›×ß“ž†šÑœ‘‘šœ‹š›¯Œ‹¸ž’šßÖ߃ƒß“ž†šÑšŒ¤Ý‹šž’Ý¢ßÂÂßÝŒšœ‹ž‹ÝßÖòõöööœ‘‹–‘ŠšÄòõööòõöö–™ß×ß“š‰š“Ñ‹šž’½žŒš›ßÖòõööö“ž†šß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅÅ‹šž’°Š‹œ’š±‹–™†×߈–‘‘šÓß™ž“ŒšÓßš‘›­šžŒ‘«š‡‹ßÖÄòõööš“Œšòõööö“ž†šß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅÅŠ‹œ’š±‹–™†×߈–‘‘šÓßš‘›­šžŒ‘«š‡‹ßÖÄòõö‚òõöòõö“š‰š“ß‘‹–™†ß×ßݘž’š ˆ–‘ÝÓ߈–‘‘šßÖÄòõöòõöŠ‘›º‘›¨ž–‹×ß“š‰š“ÑŒ‹­Š‘›«–’šÓß‹ŠšßÖÄòõ‚òõòõòõ›–Œ“ž†­Š‘›¬ˆ–‹œ—×Öòõ„òõöŒˆ–‹œ—«†šßÂß“š‰š“Ñ—ž“™‹–’š«†šÄòõö–™ß×ߌˆ–‹œ—«†šßÂÂßÝ—ž“™‹–’šÝßÖòõö„òõöö–™ß×ߘš‹¨ž‹œ—š›»‰ž×ßÝŠ‘›“–’–‹ÝßÖßÖòõöö„òõööö–™ß×ßטž’š¤ÝŠ‘›Œ¯“ž†š›Ý¢ßÕßÍÖßÂÂߘš‹¨ž‹œ—š›»‰ž×ßÝŠ‘›“–’–‹ÝßÖßÖòõööööŒˆ–‹œ—«†šßÂßÝ—ž“™‹–’šÝÄòõöööš“ŒšòõööööŒˆ–‹œ—«†šßÂßÝ–‘‹š’–ŒŒ–‘ÝÄòõöö‚òõööš“Œšß–™ß×ߘš‹¨ž‹œ—š›»‰ž×ß݈–‘“–’–‹ÝßÖßÖòõöö„òõööö–™ß×ߘž’š¤ÝŠ‘›Œ¯“ž†š›Ý¢ßÂÂßטš‹¨ž‹œ—š›»‰ž×ß݈–‘“–’–‹ÝßÖßÒßÎÖßÖòõööööŒˆ–‹œ—«†šßÂßÝ—ž“™‹–’šÝÄòõöööš“ŒšòõööööŒˆ–‹œ—«†šßÂßÝ–‘‹š’–ŒŒ–‘ÝÄòõöö‚òõööš“Œšòõöö„òõöööŒˆ–‹œ—«†šßÂßÝ–‘‹š’–ŒŒ–‘ÝÄòõöö‚òõö‚òõòõö“š‰š“ß‘‹–™†ß×ßÝŠ‘› Œˆ–‹œ—ÝÓߌˆ–‹œ—«†šßÖÄòõòõö™šžœ—ß×ß“ž†šß–‘ß“š‰š“Ñ“ž†šŒßÖòõö„òõöö–™ß×ß–Œ»š™–‘š›×ß“ž†šÑœ‘‘šœ‹š›¯Œ‹¸ž’šßÖ߃ƒß“ž†šÑšŒ¤Ý‹šž’Ý¢ßÂÂßÝŒšœ‹ž‹ÝßÖòõöööœ‘‹–‘ŠšÄòõööòõöö“ž†šß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅÅ‹šž’°Š‹œ’š±‹–™†×ߌˆ–‹œ—«†šÓß‹ŠšÓß“š‰š“Ñ—ž“™‹–’š¬Š¼ž‹–‘ßÖÄòõö‚òõöòõöŠ‘›º‘›¨ž–‹×ß“š‰š“Ñ—ž“™‹–’š­Š‘›º‘›»š“ž†Óß™ž“ŒšßÖÄòõ‚òõòõòõš‘›¸ž’š°‰š‹–’š×߈–‘‘šÓßš‘›­šžŒ‘«š‡‹ßÖòõ„òõöÐÐß™šš…šß“ž†šŒòõö™šžœ—ß×ß“ž†šß–‘ß“š‰š“Ñ“ž†šŒßÖòõö„òõöö“ž†šß‹—šž›ß™šš…š¯“ž†š¹­Š‘›º‘›×ßÏßÖÄòõöö“ž†šß‹—šž›ßŠ‘›º‘›»¹×ßËÑÏßÖÄòõööòõöö“ž†šß™šš¸ž’š“ž†·Š›º“š’Œ×ÖÄòõòõöö“ž†šßŒš‹¼“–š‘‹»‰žŒ×ßÝœ˜ š‰š†‘š·šžŒº‰š†‘šÝÓßÎßÖÄòõöö“ž†šßŒš‹¼“–š‘‹»‰žŒ×ßÝœ˜ ›žˆ¬šœ‹ž‹²šŒŒž˜šŒÝÓßÏÓòõööööööößßßݘ œ’žŒŒ¬—ˆº‘š’–šŒÝÓßÏßÖÄòõööööööößßßòõöö–™ß×ß“ž†šÑšŒ¤Ý‹šž’Ý¢ßÂÂßÝŒšœ‹ž‹ÝßÖòõööö“ž†šß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ “ž†š“˜–œÅÅŒžˆ‘¶‘‹š’–ŒŒ–‘×ÖÄòõö‚òõòõö“š‰š“ß‘‹–™†ß×ßÝŠ‘› Œˆ–‹œ—ÝÓß݉š‹–’šÝßÖÄòõòõöÐÐßœž‹œ—–‘˜ß˜ž’š‹†šÓߌ–‘œšß»²ß™œšº‘›ßŒš‘›Œßˆ–‘‘šßžŒß“ž†šßš‘‹–‹†Óß–‘Œ‹šž›ß™ßŒ‹–‘˜òõö™šžœ—ß×ß“ž†šß–‘ß“š‰š“Ñ“ž†šŒßÖòõö„òõöö–™ß×ß–Œ»š™–‘š›×ß“ž†šÑœ‘‘šœ‹š›¯Œ‹¸ž’šßÖ߃ƒß“ž†šÑšŒ¤Ý‹šž’Ý¢ßÂÂßÝŒšœ‹ž‹ÝßÖòõöööœ‘‹–‘ŠšÄòõööòõöö–™ß×ß“š‰š“Ñ‹šž’½žŒš›ßÖòõööö“ž†šß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅÅ‹šž’°Š‹œ’š±‹–™†×߈–‘‘šÓß™ž“ŒšÓßš‘›­šžŒ‘«š‡‹ßÖÄòõööš“Œšòõööö“ž†šß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅÅŠ‹œ’š±‹–™†×߈–‘‘šÓßš‘›­šžŒ‘«š‡‹ßÖÄòõö‚òõöòõöŠ‘›º‘›¨ž–‹×ß“š‰š“ÑŠ‘›º‘›»š“ž†Óß™ž“ŒšßÖÄòõòõö˜ž’š¤ÝŒ‹ž‹ŠŒÝ¢ßÂß݉š‹–’šÝÄòõö“š‰š“ß‘‹–™†ß×ßÝšŒ‹ž‹–‘˜ÝßÖÄòõßßßߘž’š¤ÝŒ‹ž‹šÝ¢ßÂßÝ“ž†–‘˜ÝÄòõßßßß’ž šŒ‹ž‹×ß‹ŠšßÖÄòõ‚òõòõòõòõš‘›¸ž’š·ž“™«–’š×Öòõ„òõö‰–Œ–‘¬š‹±ž”š›×ßÝ’°Š‹ÝÓßÏÑÊßÖÄööòõöŒš‹»‰ž×ßÝŒœ ˜ž’šš‘›š›ÝÓßÍßÖÄòõòõö˜ž’š¤ÝŒˆ–‹œ—š›Œ–›šŒÝ¢ßÂßÞ˜ž’š¤ÝŒˆ–‹œ—š›Œ–›šŒÝ¢ÄòõòõöÐÐß™šš…šß“ž†šŒòõö™šžœ—ß×ß“ž†šß–‘ß“š‰š“Ñ“ž†šŒßÖòõö„òõöö“ž†šß‹—šž›ß™šš…š¯“ž†š¹­Š‘›º‘›×ßÏßÖÄòõöö“ž†šß‹—šž›ßŠ‘›º‘›»¹×ßËÑÏßÖÄòõööòõöö“ž†šß™šš¸ž’š“ž†·Š›º“š’Œ×ÖÄòõòõöö“ž†šßŒš‹¼“–š‘‹»‰žŒ×ßÝœ˜ š‰š†‘š·šžŒº‰š†‘šÝÓßÎßÖÄòõöö“ž†šßŒš‹¼“–š‘‹»‰žŒ×ßÝœ˜ ›žˆ¬šœ‹ž‹²šŒŒž˜šŒÝÓßÏÓòõööööööößßßݘ œ’žŒŒ¬—ˆº‘š’–šŒÝÓßÏßÖÄòõööööööößßßòõöö–™ß×ß“ž†šÑšŒ¤Ý‹šž’Ý¢ßÂÂßÝŒšœ‹ž‹ÝßÖòõööö“ž†šß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ “ž†š“˜–œÅÅŒžˆ‘¶‘‹š’–ŒŒ–‘×ÖÄòõö‚òõòõö™šžœ—ß×ß“ž†šß–‘ß“š‰š“Ñ“ž†šŒßÖòõöö“ž†šÑšŒ¤ÝŒ‹ž‹ŒÝ¢ßÂß“ž†šÑŒ‹ž‹ŒÄòõòõö“š‰š“ß‘‹–™†ß×ßÝŠ‘› Œˆ–‹œ—ÝÓßÝ—ž“™‹–’šÝßÖÄòõööòõö™šžœ—ß×ß“ž†šß–‘ß“š‰š“Ñ“ž†šŒßÖòõö„òõöö–™ß×ß–Œ»š™–‘š›×ß“ž†šÑœ‘‘šœ‹š›¯Œ‹¸ž’šßÖ߃ƒß“ž†šÑšŒ¤Ý‹šž’Ý¢ßÂÂßÝŒšœ‹ž‹ÝßÖòõöööœ‘‹–‘ŠšÄòõòõöö“ž†šß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅÅ‹šž’°Š‹œ’š±‹–™†×ßÝ—ž“™‹–’šÝÓß‹ŠšÓß“š‰š“Ñ—ž“™‹–’š¬Š¼ž‹–‘ßÖÄòõö‚òõöòõöŠ‘›º‘›¨ž–‹×ß“š‰š“ÑŠ‘›º‘›»š“ž†Óß™ž“ŒšßÖÄòõòõö˜ž’š¤ÝŒ‹ž‹ŠŒÝ¢ßÂßÝ—ž“™‹–’šÝÄòõö“š‰š“ß‘‹–™†ß×ßÝšŒ‹ž‹–‘˜ÝßÖÄòõßßßߘž’š¤ÝŒ‹ž‹šÝ¢ßÂßÝ“ž†–‘˜ÝÄòõßßßß’ž šŒ‹ž‹×ß‹ŠšßÖÄòõ‚òõòõòõš‘›¸ž’š×߈–‘‘šÓßš‘›­šžŒ‘«š‡‹Óß‘Š”š»š‹‘ž‹š›ßÖòõ„òõö–™ß×ßÞ–Œ»š™–‘š›×‘Š”š»š‹‘ž‹š›ÖßÖòõöö‘Š”š»š‹‘ž‹š›ßÂß™ž“ŒšÄòõöòõöÐÐßš‹Š‘ß–™ßž“šž›†ßš‘›–‘˜ß‰–žß—Œ‹ßŽŠ–‹ß߉–œ‹†Óßß‘Š”šß–‘œ’–‘˜òõö–™ß×ߘž’š¤ÝŒ‹ž‹šÝ¢ßÂÂßÝŒ‹˜ž’šÝ߃ƒß“š‰š“јž’šº‘›š›ßƒƒß×–Œ»š™–‘š›×“š‰š“Ñ‘Š”š¶‘œ’–‘˜ÖßÙÙßÞ‘Š”š»š‹‘ž‹š›ÖßÙÙß×ßÞ–Œ»š™–‘š›×ß“š‰š“ј‹‘ˆßÖ߃ƒßÞ“š‰š“ј‹‘ˆßÖßÖòõööš‹Š‘Äòõòõö˜ž’š¤ÝŒ‹ž‹šÝ¢ßÂßÝŒ‹˜ž’šÝÄòõòõö“š‰š“јž’šº‘›«–’šßÂߘš‹«–’š×ÖÄòõö“š‰š“јž’šº‘›š›ßÂß‹ŠšÄòõö“š‰š“Ñ–‘¸žœš¯š–›ßÂß™ž“ŒšÄòõö“š‰š“ß‘‹–™†ß×ßݘž’š š‘›š›ÝÓ߈–‘‘šßÖÄòõö“š‰š“¹“ž˜¬š‹×ßݘž’š ‰šÝßÖÄòõö“š‰š“¹“ž˜¬š‹×ßÝ“œ” ‘‹–™–šŒÝßÖÄòõöˆž–‹™ž’š×ÖÄßÐÐߘ–‰šßݘž’š š‘›š›Ýß‘‹–™–šŒß‹–’šß‹ßœšŒŒòõöòõöŒš‹¸ž’šº‘›«–’š×ßÏßÖÄßÐÐߌ‹Ð—–›šß‹—šß‹–’šŒòõöòõö’žŒ£’£˜ž’š‹†šŒ£ “ž†š“˜–œÅÅ–‘‹¯š›–œ‹š›¬žˆ‘–‘‹¼šœ‹‘šŒŒ×ÖÄòõöòõö–™ß×ß–Œ»š™–‘š›×߈–‘‘šßÖßÙÙß–Œ¬‹–‘˜×߈–‘‘šßÖßÙÙ߈–‘‘šßÂÂß݉š‹–’šÝßÖòõö„òõööš‘›¸ž’š°‰š‹–’š×߈–‘‘šÓßš‘›­šžŒ‘«š‡‹ßÖÄòõööš‹Š‘Äòõö‚òõöòõö–™ß×ß–Œ»š™–‘š›×߈–‘‘šßÖßÙÙß–Œ¬‹–‘˜×߈–‘‘šßÖßÙÙ߈–‘‘šßÂÂßÝ—ž“™‹–’šÝßÖòõö„òõööš‘›¸ž’š·ž“™‹–’š×ÖÄòõööš‹Š‘Äòõö‚òõòõö˜ž’š¤ÝŠ‘›Œ¯“ž†š›Ý¢ÔÔÄòõöòõö–™ß×ß“š‰š“Ñ‹šž’½žŒš›ßÖòõö„òõöö–™ß×߈–‘‘šßÂÂßÝž‡–ŒÝ߃ƒßˆ–‘‘šßÂÂßÝž““–šŒÝßÖòõööö˜ž’š¤ÝŠ‘›Œ¨‘Ý¢¤ˆ–‘‘š¢ÔÔÄòõòõöö’žŒ£’£˜ž’š‹†šŒ£ ˜ž’šŒœšÅÅŠ›ž‹š«šž’¬œš×ßÝž‡–ŒÝßÖÄòõöö’žŒ£’£˜ž’š‹†šŒ£ ˜ž’šŒœšÅÅŠ›ž‹š«šž’¬œš×ßÝž““–šŒÝßÖÄòõö‚òõöš“Œšòõö„òõöö–™ß×ß–Œ»š™–‘š›×߈–‘‘šßÖßÙÙß–Œ¯“ž†š×߈–‘‘šßÖßÖòõööö˜ž’š¤ÝŠ‘›Œ¨‘Ý¢¤ˆ–‘‘šÑ˜Š–›¢ÔÔÄòõö‚òõöòõö’žŒ£’£˜ž’š‹†šŒ£ ˜ž’šŒœšÅÅŠ›ž‹š¯“žœš’š‘‹×ÖÄòõòõöž‘”š›²ž‹œ—ª›ž‹šŒ×߈–‘‘šßÖÄòõòõö™šžœ—ß×ß“ž†šß–‘ß“š‰š“Ñ“ž†šŒßÖòõö„òõöö“ž†šßŒš‹¼“–š‘‹»‰ž×ßÝŠ– š‘ŒŠ’’ž†ÝÓßÎßÖÄòõö‚òõöòõöŒš‹»‰ž×ßݘ ›šž›¼—ž‹ÝÓßÎßÖÄòõöŒš‹»‰ž×ßÝŠ– ž““ˆ ‹šž’œ—ž‘˜šÝÓßÏßÖÄòõòõöÐÐß™šš…šß“ž†šŒòõö™šžœ—ß×ß“ž†šß–‘ß“š‰š“Ñ“ž†šŒßÖòõö„òõöö“ž†šß‹—šž›ß™šš…š¯“ž†š¹­Š‘›º‘›×ßÎÑÏßÖÄòõöö“ž†šß‹—šž›ßŠ‘›º‘›»¹×ßËÑÏßÖÄòõööòõöö“ž†šß™šš¸ž’š“ž†·Š›º“š’Œ×ÖÄòõòõöö“ž†šßŒš‹¼“–š‘‹»‰žŒ×ßÝœ˜ š‰š†‘š·šžŒº‰š†‘šÝÓßÎßÖÄòõöö“ž†šßŒš‹¼“–š‘‹»‰žŒ×ßÝœ˜ ›žˆ¬šœ‹ž‹²šŒŒž˜šŒÝÓßÏÓòõööööööößßßݘ œ’žŒŒ¬—ˆº‘š’–šŒÝÓßÏÓòõööööööößßßÝœ˜ ™‰¬œž“šÝÓßÎßÖÄòõööööööößßßòõöö–™ß×ß“ž†šÑšŒ¤Ý‹šž’Ý¢ßÂÂßÝŒšœ‹ž‹ÝßÖòõööö“ž†šß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ “ž†š“˜–œÅÅŒžˆ‘¶‘‹š’–ŒŒ–‘×ÖÄòõö‚òõòõö–™×ßÞ‘Š”š»š‹‘ž‹š›ßÖòõöö‰–Œ–‘¬š‹±ž”š›×ßÝ’°Š‹ÝÓßÏÑÊßÖÄööòõöòõöÐÐߺ‘›ß™ß­Š‘›òõö–™ß×ßÞˆžŒ°‘“†­Š‘›×ÖßÙÙßÞ‘Š”š»š‹‘ž‹š›ßÖòõö„òõööŒš‹»‰ž×ßÝŒœ ˜ž’šš‘›š›ÝÓßÍßÖÄòõöòõöö›–Œ“ž†­Š‘›º‘›×߈–‘‘šÓßš‘›­šžŒ‘«š‡‹ßÖÄòõòõöö–™ß×ß“š‰š“ÑŒ—ˆ–‘˜¹–‘ž“´–““œž’ßÖòõöö„òõööö™šžœ—ß×ß“ž†šß–‘ß“š‰š“Ñ“ž†šŒßÖòõöööö“ž†šß‘‹–™†ß×ßÝšŒš‹ Š‹œ’šÝßÖÄòõòõööö“š‰š“ß‘‹–™†ß×ßݘž’š œ“šž‘ŠÝßÖÄòõòõöööˆž–‹‹–““¹–‘ž“´–““œž’»‘š×ÖÄòõöö‚òõööööòõöö–™ß×ßÞˆžŒ³žŒ‹­Š‘›×ÖßÖòõöö„òõööö“š‰š“¹“ž˜¼“šž×ßÝ“œ” ‘‹–™–šŒÝßÖÄòõööö–™ß×ßœ—šœ”­Š‘›¬ˆ–‹œ—×ÖßÖòõöööö›–Œ“ž†­Š‘›¬ˆ–‹œ—×ÖÄòõòõööö™šžœ—ß×ß“ž†šß–‘ß“š‰š“Ñ“ž†šŒßÖòõöööö“ž†šÑšŒ¤ÝŒ‹ž‹ŒÝ¢ßÂß“ž†šÑŒ‹ž‹ŒÄòõòõßßßßßßßßö“š‰š“ß‘‹–™†ß×ßÝšŒ‹ž‹–‘˜ÝßÖÄòõßßßßßßßßßßßߘž’š¤ÝŒ‹ž‹šÝ¢ßÂßÝ“ž†–‘˜ÝÄòõßßßßßßßßßßßß’ž šŒ‹ž‹×ß‹ŠšßÖÄòõßßßßßßßßßßßßš‹Š‘Äòõöö‚òõööòõöö–™ß×ßÞ“š‰š“Ñ™œš›º‘›ßÖòõöööš‘›­šžŒ‘«š‡‹ßÂߊ›ž‹šº‘›­šžŒ‘«š‡‹×߈–‘‘šßÖÄòõö‚òõòõöŒš‹»‰ž×ßÝŒœ ˜ž’šš‘›š›ÝÓßÎßÖÄòõöòõö–™ß×ßÞ–Œ»š™–‘š›×ߘž’š¤Ýœ“–š‘‹²ž‹œ—»ž‹ž»š™Ý¢ßÖßÖòõö„òõöö˜ž’š¤Ýœ“–š‘‹²ž‹œ—»ž‹ž»š™Ý¢ßÂßÝ’Ðœ“–š‘‹’ž‹œ—›ž‹žÑ›š™ÝÄòõööŒš‹¼“–š‘‹²ž‹œ—»ž‹ž»š™×ߘž’š¤Ýœ“–š‘‹²ž‹œ—»ž‹ž»š™Ý¢ßÖÄòõö‚òõòõö’žŒ£’£˜ž’š‹†šŒ£ ’–ŒŒ–‘ŒÅÅŠ‘›º‘›×߈–‘‘šßÖÄòõòõö›–Œ“ž†¸ž’šº‘›×߈–‘‘šÓßš‘›­šžŒ‘«š‡‹ßÖÄòõòõö–™ß×ß“š‰š“ÑŒ—ˆ–‘˜¹–‘ž“´–““œž’ßÙÙ߈žŒ°‘“†­Š‘›×ÖßÖòõö„òõöö™šžœ—ß×ß“ž†šß–‘ß“š‰š“Ñ“ž†šŒßÖòõööö“ž†šß‘‹–™†ß×ßÝšŒš‹ Š‹œ’šÝßÖÄòõòõöö“š‰š“ß‘‹–™†ß×ßݘž’š œ“šž‘ŠÝßÖÄòõòõööˆž–‹‹–““¹–‘ž“´–““œž’»‘š×ÖÄòõö‚ööööòõòõö“š‰š“¹“ž˜¼“šž×ßÝ“œ” ‘‹–™–šŒÝßÖÄòõòõö“š‰š“Ñ–‘‹š’–ŒŒ–‘ßÂß‹ŠšÄòõòõö“š‰š“ß‘‹–™†ß×ßÝŒžˆ‘–‘˜ –‘‹š’–ŒŒ–‘ÝßÖÄòõöòõö™šžœ—ß×ß“ž†šß–‘ß“š‰š“Ñ“ž†šŒßÖòõö„òõöö“ž†šßœ“ŒšŠ²š‘Š×ÖÄòõöö“ž†šßœ“Œš¶‘¸ž’š²š‘Š×ÖÄòõöö“ž†šß‘‹–™†ß×ßÝšŒš‹ Š‹œ’šÝßÖÄòõöö“ž†šß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ “ž†š“˜–œÅÅŒžˆ‘¶‘‹š’–ŒŒ–‘×ÖÄòõö‚òõòõöœšŒŒ³†»ž‹ž×ÖÄòõòõöˆž–‹ß×ßÎÑÏßÖÄòõòõö–™ß×ß’ž‹œ—²ž”–‘˜¸ž’š×ÖßÖòõööŒš‘›²ž‹œ—»ž‹ž×ÖÄòõòõö™šžœ—ß×ß“ž†šß–‘ß“š‰š“Ñ“ž†šŒßÖòõöö“ž†šÑšŒ¤ÝŒ‹ž‹ŒÝ¢ßÂß“ž†šÑŒ‹ž‹ŒÄòõòõöÐГ˜¬‹–‘˜×ßݘž’šßš‘›š›ÝßÖÄòõö–™×ßÞ‘Š”š»š‹‘ž‹š›ßÙÙßÞ“š‰š“ÑŒ‹¸ž’š±‹–™–šŒßÖòõö„òõöö–™ß×ßÞˆžŒ°‘“†­Š‘›×ÖßÖòõöööˆž–‹ßÉÑÏÄòõööš“Œšòõöööˆž–‹ßÌÑÏÄòõö‚òõöš“Œšòõö„òõööˆž–‹ß×ß’–‘×ßÎÏÑÏÓßËÑÏßÔß“š‰š“ÑŒ‹¸ž’š±‹–™–šŒßÖßÖÄòõö‚òõöòõö“š‰š“ß‘‹–™†×ßÝš‡–‹³š‰š“ œž““š›ÝßÖÄòõöš‡–‹³š‰š“×ß™ž“ŒšßÖÄòõ‚òõòõŠ›ž‹šº‘›­šžŒ‘«š‡‹×߈–‘‘šßÖòõ„òõö–™ß×ßÞ“š‰š“Ñ‹šž’½žŒš›ßÖòõööš‹Š‘ß‹ŠšÄòõòõö–™ß×ß—–‹­Š‘›³–’–‹×ÖßÖòõööš‹Š‘ßÙݲ¯ ­°ª±» ³¶²¶« ­º¾¼·º»ÝÄòõöòõö–™ß×ß—–‹¨–‘³–’–‹×ÖßÖòõööš‹Š‘ßÙݲ¯ ¬¼°­º ³¶²¶« ­º¾¼·º»ÝÄòõöòõö–™ß×߈–‘‘šßÂÂßÝž‡–ŒÝßÖòõööš‹Š‘ßÙݬ¯º«¬±¾¥ ¨¶±ÝÄòõöš“Œšòõööš‹Š‘ßÙݬ¾¬ ¨¶±ÝÄòõ‚òõòõšŒ‹–’ž‹š›«–’š«–““¬œš³–’–‹×ß‹šž’ßÖòõ„òõöžŒŒš‹×ß–Œ¯“ž†š×ߌš“™ßÖ߃ƒß–Œ»š™–‘š›×ß‹šž’ßÖßÖÄòõòõöŒœš¯š²–‘Š‹šßÂߘš‹¬œš¯š²–‘Š‹š×ß‹šž’ßÖÄòõöŒœš­š’ž–‘–‘˜ßÂߘš‹¬œš­š’ž–‘–‘˜×ß‹šž’ßÖÄòõòõöšŒ‹–’ž‹š›«–’š³š™‹ßÂßÆÆÆÆÆÆÄòõö–™ß×ߌœš¯š²–‘Š‹šßÖòõööšŒ‹–’ž‹š›«–’š³š™‹ßÂߌœš­š’ž–‘–‘˜ßÐߌœš¯š²–‘Š‹šÄòõöòõöÐЖ‘‹“‘×ßÝšŒ‹–’ž‹š›«–’š³š™‹ÅßÝßÔßšŒ‹–’ž‹š›«–’š³š™‹ßÖÄòõöš‹Š‘ßšŒ‹–’ž‹š›«–’š³š™‹Äòõ‚òõòõ˜š‹¬œš¯š²–‘Š‹š×ß‹šž’ßÖòõ„òõöžŒŒš‹×ß–Œ¯“ž†š×ߌš“™ßÖ߃ƒß–Œ»š™–‘š›×ß‹šž’ßÖßÖÄòõòõöŒœš³–’–‹ßÂߘš‹¨ž‹œ—š›»‰ž×ßÝŒœš“–’–‹ÝßÖÄòõö‹–’š³–’–‹ßÂߘš‹«–’š³–’–‹×ÖÄòõö’–‘Š‹šŒ¯žŒŒš›ßÂßטš‹«–’š¯žŒŒš›×ÖßÐß×ÉÏÕÎÏÏÏÖÖßÔßÏÑÏÏÏÎÄòõòõö–™ß×ß–Œ¯“ž†š×ߌš“™ßÖßÖòõööŒœš¯š²–‘Š‹šßÂߌš“™ÑŒœšßÐß’–‘Š‹šŒ¯žŒŒš›Äòõöš“ŒšòõööŒœš¯š²–‘Š‹šßÂߘš‹«šž’¬œš×ß‹šž’ßÖßÐß’–‘Š‹šŒ¯žŒŒš›Äòõööòõöš‹Š‘ߌœš¯š²–‘Š‹šÄòõ‚òõòõ˜š‹¬œš­š’ž–‘–‘˜×ß‹šž’ßÖòõ„òõöžŒŒš‹×ß–Œ¯“ž†š×ߌš“™ßÖ߃ƒß–Œ»š™–‘š›×ß‹šž’ßÖßÖÄòõòõöŒœš³–’–‹ßÂߘš‹¨ž‹œ—š›»‰ž×ßÝŒœš“–’–‹ÝßÖÄòõòõö–™ß×ß–Œ¯“ž†š×ߌš“™ßÖßÖòõööŒœš­š’ž–‘–‘˜ßÂߌœš³–’–‹ßÒߌš“™ÑŒœšÄòõöš“ŒšòõööŒœš­š’ž–‘–‘˜ßÂߌœš³–’–‹ßÒߘš‹«šž’¬œš×ß‹šž’ßÖÄòõööòõöš‹Š‘ߌœš­š’ž–‘–‘˜Äòõ‚òõòõ˜–‰š³žŒ‹°‘«šž’¨ž‘–‘˜×Öòõ„òõöŒš“™ßš‘›‘×Ý›šž‹—ÝÖÄòõöŒš“™ßš‘›‘×Ý›–Œœ‘‘šœ‹ÝÖÄòõö“š‰š“ßš‘›‘×ßݘž’š š‘›š›ÝßÖÄòõòõöŒš“™ßˆž–‹«–““­šœ‰šš›·šž“‹—×ßÌßÖÄòõòõö‹—š«šž’ßÂߘš‹°‹—š«šž’×ߌš“™ÑšŒ¤Ý‹šž’Ý¢ßÖÄòõö‹—šž›ß‹šž’¯“ž†š¼ž›¬“žŒ—×ßÝœž““Š‹ “žŒ‹‹šž’’š’šž“–‰šÝÓߌš“™Óߌš“™ÑšŒ¤Ý‹šž’Ý¢ßÖÄòõö‹—šž›ß‹šž’¯“ž†š¼ž›¬“žŒ—×ßÝœž““Š‹ “žŒ‹š‘š’†ž“–‰šÝÓߌš“™Óß‹—š«šž’ßÖÄòõö“š‰š“ß‘‹–™†ß×ßÝ“žŒ‹ ž“–‰šÝÓߌš“™ßÖÄòõ‚òõòõœšŒŒ³†»ž‹ž×Öòõ„òõöœŠ¯“ž†šßÂßÏÄòõö™šžœ—ß×ß“ž†šß–‘ß“š‰š“Ñ“ž†šŒßÖòõö„òõöö–™ß×ßÞ–Œ»š™–‘š›×ß“ž†šßÖßÖòõöööœ‘‹–‘ŠšÄòõòõöö“ž†šÑœ“–š‘‹²ž‹œ—»ž‹ž¶›ßÂßœŠ¯“ž†šÄòõööœŠ¯“ž†šÔÔÄòõòõööÐÐߑ߯¬Ìßœžß“‘˜ß‘ž’šŒòõöö–™ß×ß“š‰š“ÑŒÌßÙÙßדž†šÑ‘ž’šÑŒ–…šßÁß“š‰š“Ѳž‡±ž’š³š‘˜‹—ÖßÖòõöö„òõööö“ž†š±ž’šßÂßÝÝÄòõööö™ß×ß–ßÂßÏÄß–ßÃß“š‰š“Ѳž‡±ž’š³š‘˜‹—ÒÌÄß–ÔÔßÖòõöööö“ž†š±ž’šßÔÂß“ž†šÑ‘ž’š¤–¢Äòõòõööö“ž†š±ž’šßÔÂßÝÑÑÑÝÄòõöö‚òõööš“Œšòõöö„òõööö“ž†š±ž’šßÂß“ž†šÑ‘ž’šÄòõöö‚òõööòõööŒš‹¼“–š‘‹²ž‹œ—»ž‹ž×ßÝ“ž†šŒÝÓß“ž†šÑœ“–š‘‹²ž‹œ—»ž‹ž¶›Óß݇Š–›ÝÓß“ž†š±ž’šßÖÄööòõö‚òõöòõö’žŒ£’£ žˆž›ŒÅÅžŒŒ–˜‘¾ˆž›Œ×ÖÄòõö’žŒ£’£ Œœšž›ÅÅœšŒŒ³†¬œšž›Œ×ÖÄòõöòõöŒš‘›¼“–š‘‹²ž‹œ—»ž‹ž×ÖÄòõ‚ \ No newline at end of file diff --git a/Modern Warfare 2/Mod/TruHardcore/maps/mp/gametypes/_missions.gsc b/Modern Warfare 2/Mod/TruHardcore/maps/mp/gametypes/_missions.gsc new file mode 100755 index 0000000..80199be --- /dev/null +++ b/Modern Warfare 2/Mod/TruHardcore/maps/mp/gametypes/_missions.gsc @@ -0,0 +1 @@ +ÞÜ–‘œ“Š›šß’žŒ£’£˜ž’š‹†šŒ£ —Š› Š‹–“ÄòõÜ–‘œ“Š›šß’žŒ£’£ Š‹–“–‹†ÄòõÜ–‘œ“Š›šßœ’’‘ Œœ–‹Œ£Š‹–“–‹†Äòõòõ¼· ­º¹ ¼°³ööÂßÏÄòõ¼· ±¾²º ¼°³ööÂßÎÄòõ¼· »º¬¼ ¼°³ööÂßÍÄòõ¼· ³¾½º³ ¼°³öÂßÌÄòõ¼· ­º¬Î ¼°³ööÂßËÄòõ¼· ­º¬Í ¼°³ööÂßÊÄòõ¼· «¾­¸º« ¼°³öÂßÉÄòõ¼· ­º¨¾­» ¼°³öÂßÈÄòõòõòõ«¶º­ ¹¶³º ¼°³öÂßËÄòõòõ–‘–‹×Öòõ„òõöšœžœ—š¬‹–‘˜×Ùݲ¯ ¼·¾³³º±¸º ¼°²¯³º«º»ÝÖÄòõòõö–™ß×ßÞ’ž†¯œšŒŒ¼—ž““š‘˜šŒ×ÖßÖòõööš‹Š‘Äòõöòõö“š‰š“Ñ’–ŒŒ–‘¼ž““žœ”ŒßÂߤ¢Äòõòõöš˜–Œ‹š²–ŒŒ–‘¼ž““žœ”×ßÝ“ž†š´–““š›ÝÓßÅÅœ— ”–““ŒßÖÄöòõöš˜–Œ‹š²–ŒŒ–‘¼ž““žœ”×ßÝ“ž†š´–““š›ÝÓßÅÅœ— ‰š—–œ“š ”–““ŒßÖÄòõöš˜–Œ‹š²–ŒŒ–‘¼ž““žœ”×ßÝ“ž†š·ž›–‘‹ÝÓßÅÅœ— —ž›–‘‹ŒßÖÄòõöš˜–Œ‹š²–ŒŒ–‘¼ž““žœ”×ßÝ“ž†š¾ŒŒ–Œ‹ÝÓßÅÅœ— žŒŒ–Œ‹ŒßÖÄöòõöš˜–Œ‹š²–ŒŒ–‘¼ž““žœ”×ßÝŠ‘›º‘›ÝÓßÅÅœ— Š‘›ˆ–‘ßÖÄòõöš˜–Œ‹š²–ŒŒ–‘¼ž““žœ”×ßÝŠ‘›º‘›ÝÓßÅÅœ— Š‘›“ž†š›ßÖÄòõöš˜–Œ‹š²–ŒŒ–‘¼ž““žœ”×ß݉š—–œ“š´–““š›ÝÓßÅÅœ— ‰š—–œ“š ”–““š›ßÖÄòõöòõö“š‰š“ß‹—šž›ßœšž‹š¯š”²ž×ÖÄòõööòõö“š‰š“ß‹—šž›ß‘¯“ž†š¼‘‘šœ‹×ÖÄòõ‚òõòõœšž‹š¯š”²ž×Öòõ„òõö“š‰š“Ñš”²žßÂߤ¢Äòõöòõö“š‰š“Ñš”²ž¤ÝŒšœ–ž“‹† Š““š‹›ž’ž˜šÝ¢ßÂßÝŒšœ–ž“‹† Œ‹–‘˜ˆšÝÄòõö“š‰š“Ñš”²ž¤ÝŒšœ–ž“‹† ŽŠ–š‹šÝ¢ßÂßÝŒšœ–ž“‹† ›šž›Œ–“š‘œšÝÄòõö“š‰š“Ñš”²ž¤ÝŒšœ–ž“‹† “œž“•ž’’šÝ¢ßÂßÝŒšœ–ž“‹† Œœž’“šÝÄòõö“š‰š“Ñš”²ž¤ÝŒšœ–ž“‹† ™žŒ‹š“ž›Ý¢ßÂßÝŒšœ–ž“‹† Œ“š–˜—‹™—ž‘›ÝÄòõö“š‰š“Ñš”²ž¤ÝŒšœ–ž“‹† –Œ‹“›šž‹—Ý¢ßÂßÝŒšœ–ž“‹† “žŒ‹Œ‹ž‘›ÝÄòõ‚òõòõœ— ˜š‹¯˜šŒŒ×ßš™¬‹–‘˜ßÖòõ„òõöš‹Š‘ߌš“™ß˜š‹¯“ž†š»ž‹ž×ßÝœ—ž““š‘˜š¯˜šŒŒÝÓßš™¬‹–‘˜ßÖÄòõ‚òõòõòõœ— ˜š‹¬‹ž‹š×ßš™¬‹–‘˜ßÖòõ„òõöš‹Š‘ߌš“™ß˜š‹¯“ž†š»ž‹ž×ßÝœ—ž““š‘˜š¬‹ž‹šÝÓßš™¬‹–‘˜ßÖÄòõ‚òõòõòõœ— Œš‹¯˜šŒŒ×ßš™¬‹–‘˜Ó߉ž“ŠšßÖòõ„òõöŒš“™ßŒš‹¯“ž†š»ž‹ž×ßÝœ—ž““š‘˜š¯˜šŒŒÝÓßš™¬‹–‘˜Ó߉ž“ŠšßÖÄòõ‚òõòõòõœ— Œš‹¬‹ž‹š×ßš™¬‹–‘˜Ó߉ž“ŠšßÖòõ„òõöŒš“™ßŒš‹¯“ž†š»ž‹ž×ßÝœ—ž““š‘˜š¬‹ž‹šÝÓßš™¬‹–‘˜Ó߉ž“ŠšßÖÄòõ‚òõòõòõ’ž†¯œšŒŒ¼—ž““š‘˜šŒ×Öòõ„òõöÐÜòõö–™ß×ߘš‹»‰ž¶‘‹×ßÝ›šŠ˜ œ—ž““š‘˜šŒÝßÖßÖòõööš‹Š‘ß‹ŠšÄòõöÜÐòõöòõöš‹Š‘ß×ß“š‰š“Ñž‘”š›²ž‹œ—ßÖÄòõ‚òõòõ‘¯“ž†š¼‘‘šœ‹×Öòõ„òõö™×ÄÄÖòõö„òõöö“š‰š“߈ž–‹‹–““×ßÝœ‘‘šœ‹š›ÝÓß“ž†šßÖÄòõòõöö–™ß×ßÞ–Œ»š™–‘š›×ß“ž†šÑšŒ¤ÝŒ‹¸ž’š¼—ž““š‘˜šŒÝ¢ßÖßÖòõööö“ž†šÑšŒ¤ÝŒ‹¸ž’š¼—ž““š‘˜šŒÝ¢ßÂßÏÄòõòõöö“ž†šß‹—šž›ß‘¯“ž†š¬žˆ‘š›×ÖÄòõöö“ž†šß‹—šž›ß–‘–‹²–ŒŒ–‘»ž‹ž×ÖÄòõöö“ž†šß‹—šž›ß’‘–‹½’ªŒš×ÖÄòõöö“ž†šß‹—šž›ß’‘–‹¹ž““»–Œ‹ž‘œš×ÖÄòõöö“ž†šß‹—šž›ß’‘–‹³–‰š«–’š×ÖÄöòõöö“ž†šß‹—šž›ß’‘–‹¬‹šž”Œ×ÖÄòõöö“ž†šß‹—šž›ß’‘–‹¬‹šž”­šˆž›×ÖÄòõöö“ž†šß‹—šž›ß’‘–‹¬œž‰š‘˜š¯–œ”Š×ÖÄòõöö“ž†šß‹—šž›ß’‘–‹½“žŒ‹¬—–š“›¬Š‰–‰ž“×ÖÄòõöö“ž†šß‹—šž›ß’‘–‹«žœ¶‘Œš‹–‘Œ»šŒ‹†š›×ÖÄòõöö“ž†šß‹—šž›ß’‘–‹¯œšŒŒ¼—ž““š‘˜š×ÖÄòõöö“ž†šß‹—šž›ß’‘–‹´–““Œ‹šž”¯˜šŒŒ×ÖÄòõöö“ž†šß‹—šž›ß’‘–‹¹–‘ž“¬‹ž‘›¬Š‰–‰ž“×ÖÄòõöö“ž†šß‹—šž›ß’‘–‹¼’ž‹·–˜—¬Š‰–‰ž“×ÖÄòõöö“ž†šß‹—šž›ß’‘–‹´–““š›´–““Œ‹šž”×ÖÄòõööòõöö–™ß×ß–Œ»š™–‘š›×ß“š‰š“Ñž‹–š‘‹¥š±ž’šßÖßÙÙß–Œ¬Š¬‹×ß“ž†šÑ‘ž’šÓß“š‰š“Ñž‹–š‘‹¥š±ž’šßÖßÖòõöö„òõööö“ž†šßŒš‹¯“ž†š»ž‹ž×ßÝœ—ž““š‘˜š¬‹ž‹šÝÓßÝœ— –‘™šœ‹š›ÝÓßÍßÖÄòõööö“ž†šßŒš‹¯“ž†š»ž‹ž×ßÝœ—ž““š‘˜š¯˜šŒŒÝÓßÝœ— –‘™šœ‹š›ÝÓßÎßÖÄòõööö“ž†šßŒš‹¯“ž†š»ž‹ž×ßÝœ—ž““š‘˜š¬‹ž‹šÝÓßÝœ— “ž˜ŠšÝÓßÍßÖÄòõööö“ž†šßŒš‹¯“ž†š»ž‹ž×ßÝœ—ž““š‘˜š¯˜šŒŒÝÓßÝœ— “ž˜ŠšÝÓßÎßÖÄòõöö‚öòõòõööœž›«–‹“šßÂß“ž†šß˜š‹¯“ž†š»ž‹ž×ßÝœž›«–‹“šÝßÖÄòõòõöö–™ß×ßœž›«–‹“šßÂÂßÝœž›‹–‹“š –‘™šœ‹š›ÝßÖòõööö“ž†šÑ–‘™šœ‹š›ßÂß‹ŠšÄòõööš“Œšß–™ß×ßœž›«–‹“šßÂÂßÝœž›‹–‹“š “ž˜ŠšÝßÖòõööö“ž†šÑ“ž˜ŠšßÂß‹ŠšÄòõö‚òõ‚òõòõÐÐß«°»°Åߨ—š‘ߌŒ–“šß’‰šßž‰šß‘¯“ž†š¼‘‘šœ‹ß‹—šž›Œß—ššòõ‘¯“ž†š¬žˆ‘š›×Öòõ„òõöŒš“™ßš‘›‘×ßÝ›–Œœ‘‘šœ‹ÝßÖÄòõòõö™×ÄÄÖòõö„òõööŒš“™ßˆž–‹‹–““×ßÝŒžˆ‘š› “ž†šÝßÖÄòõòõööŒš“™ß‹—šž›ß’‘–‹¬–‘‹»–Œ‹ž‘œš×ÖÄòõö‚òõ‚òõòõ’‘–‹¬œž‰š‘˜š¯–œ”Š×Öòõ„òõöŒš“™ßš‘›‘ß×ßÝ›–Œœ‘‘šœ‹ÝßÖÄòõòõö™×ßÄÄßÖòõö„òõööŒš“™ßˆž–‹‹–““×ßÝŒœž‰š‘˜š –œ”ŠÝßÖÄßòõööòõöö–™ß×ߌš“™ß —žŒš”×ßÝŒšœ–ž“‹† Œœž‰š‘˜šÝßÖßÖòõöööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— Œœž‰š‘˜š ÝßÖÄòõööòõööˆž–‹×ßÏÑÏÊßÖÄòõö‚öòõ‚òõòõòõ’‘–‹¬‹šž”­šˆž›×Öòõ„òõöŒš“™ßš‘›‘ß×ßÝ›–Œœ‘‘šœ‹ÝßÖÄòõòõö™×ßÄÄßÖòõö„òõööŒš“™ßˆž–‹‹–““×ßÝšœš–‰š› šž‘š› ”–““Œ‹šž”ÝßÖÄßòõööòõöö–™ß×ߌš“™ß —žŒš”×ßÝŒšœ–ž“‹† —ž›“–‘šÝßÖßÖòõöööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— —ž›“–‘š ÝßÖÄòõööòõööˆž–‹×ßÏÑÏÊßÖÄòõö‚öòõ‚òõòõ’‘–‹½“žŒ‹¬—–š“›¬Š‰–‰ž“×Öòõ„òõöŒš“™ßš‘›‘ß×ßÝ›–Œœ‘‘šœ‹ÝßÖÄòõòõö™×ßÄÄßÖòõö„òõööŒš“™ßˆž–‹‹–““×ßÝŒŠ‰–‰š› š‡“Œ–‘ÝßÖÄßòõööòõöö–™ß×ߌš“™ß —žŒš”×ßÝ Œšœ–ž“‹† “žŒ‹Œ—–š“›ÝßÖßÖòõöööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— ’žŒ‹š“žŒ‹šÝßÖÄòõööòõööˆž–‹™ž’š×ÖÄòõö‚öòõ‚òõòõ’‘–‹«žœ¶‘Œš‹–‘Œ»šŒ‹†š›×Öòõ„òõöŒš“™ßš‘›‘ß×ßÝ›–Œœ‘‘šœ‹ÝßÖÄòõöòõö™×ÄÄÖòõö„òõööŒš“™ßˆž–‹‹–““×ßÝ›šŒ‹†š› –‘Œš‹–‘ÝÓ߈‘šßÖÄòõööòõöö–™ß×ߌš“™ßÂÂ߈‘šßÖòõöööš‹Š‘ÄòõööòõööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— ›ž”–‘˜šÝßÖÄòõööŒš“™ß–‘œ¯“ž†š¬‹ž‹×ßÝ’Œ‹‹žœš‰š‘‹š›ÝÓßÎßÖÄòõöòõööŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅŬ“žŒ—±‹–™†×ßÝ›š‘–š›ÝÓßÍÏßÖÄòõööˆ‘šß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅÅ“ž†š¼ž›¬“žŒ—±‹–™†×ßÝ›šŒ‹†š› –‘Œš‹–‘ÝÓߌš“™ßÖÄòõòõööˆž–‹™ž’š×ÖÄòõö‚òõ‚òõòõ’‘–‹¹–‘ž“¬‹ž‘›¬Š‰–‰ž“×Öòõ„òõöŒš“™ßš‘›‘ß×ßÝ›–Œœ‘‘šœ‹ÝßÖÄòõöòõö™×ÄÄÖòõö„òõööŒš“™ßˆž–‹‹–““×ßÝš‰–‰šÝßÖÄòõööòõööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— “–‰–‘˜›šž›ÝßÖÄòõòõööˆž–‹™ž’š×ÖÄòõö‚òõ‚òõòõ’‘–‹¼’ž‹·–˜—¬Š‰–‰ž“×Öòõ„òõöŒš“™ßš‘›‘ß×ßÝ›–Œœ‘‘šœ‹ÝßÖÄòõòõö™×ÄÄÖòõö„òõööŒš“™ßˆž–‹‹–““×ßÝœ’ž‹—–˜— ŒŠ‰–‰š›ÝßÖÄòõööòõööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‹—š‘Š’ÝßÖÄòõòõööˆž–‹™ž’š×ÖÄòõö‚òõ‚òõòõÐÐߊ‘›ßžŒš›ß‹žœ”–‘˜òõ–‘–‹²–ŒŒ–‘»ž‹ž×Öòõ„òõö”š†ŒßÂߘš‹¾ž†´š†Œ×ß“š‰š“Ñ”–““Œ‹šž”¹Š‘œŒßÖÄöòõö™šžœ—ß×ß”š†ß–‘ß”š†ŒßÖòõööŒš“™ÑšŒ¤”š†¢ßÂßÏÄòõöòõöŒš“™ÑšŒ¤Ý“žŒ‹½Š““š‹´–““«–’šÝ¢ßÂßÏÄòõöŒš“™ÑšŒ¤ÝŠ““š‹¬‹šž”Ý¢ßÂßÏÄòõöŒš“™Ñš‡“Œ–‰š¶‘™ßÂߤ¢Äòõ‚òõòõš˜–Œ‹š²–ŒŒ–‘¼ž““žœ”לž““žœ”Óß™Š‘œÖòõ„òõö–™ß×Þ–Œ›š™–‘š›×“š‰š“Ñ’–ŒŒ–‘¼ž““žœ”Œ¤œž““žœ”¢ÖÖòõöö“š‰š“Ñ’–ŒŒ–‘¼ž““žœ”Œ¤œž““žœ”¢ßÂߤ¢Äòõö“š‰š“Ñ’–ŒŒ–‘¼ž““žœ”Œ¤œž““žœ”¢¤“š‰š“Ñ’–ŒŒ–‘¼ž““žœ”Œ¤œž““žœ”¢ÑŒ–…š¢ßÂß™Š‘œÄòõ‚òõòõòõ˜š‹¼—ž““š‘˜š¬‹ž‹ŠŒ×ß‘ž’šßÖòõ„òõö–™ß×ß–Œ»š™–‘š›×ߌš“™Ñœ—ž““š‘˜š»ž‹ž¤‘ž’š¢ßÖßÖòõööš‹Š‘ߌš“™Ñœ—ž““š‘˜š»ž‹ž¤‘ž’š¢Äòõöš“Œšòõööš‹Š‘ßÏÄòõ‚òõòõòõ–Œ¬‹¬‹ž‹×ߌ‹–‘˜ÎÓߌŠ¬‹ßÖòõ„òõöš‹Š‘ß×ߘš‹¬Š¬‹×ߌ‹–‘˜ÎÓßÏÓߌŠ¬‹ÑŒ–…šßÖßÂÂߌŠ¬‹ßÖÄòõ‚òõòõòõœ— žŒŒ–Œ‹Œ×ß›ž‹žßÖòõ„òõö“ž†šßÂß›ž‹žÑ“ž†šÄòõö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— žŒŒ–Œ‹ŒÝßÖÄòõ‚òõòõòõœ— —ž›–‘‹Œ×ß›ž‹žßÖòõ„òõö“ž†šßÂß›ž‹žÑ“ž†šÄòõö“ž†šÑšŒ¤›ž‹žÑ—ž›–‘‹«†š¢ÔÔÄòõòõöŒˆ–‹œ—ß×ß›ž‹žÑ—ž›–‘‹«†šßÖòõö„òõööœžŒšßÝŠž‰ÝÅòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— Šž‰ÝßÖÄòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— Šž‰ŒÝßÖÄòõöööòõööö–™ß×ß“ž†šÑšŒ¤ÝŠž‰Ý¢ßÁÂßÌßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‘Œšœš‹ŒÝßÖÄòõòõöööšž”ÄòõòõööœžŒšßÝœŠ‘‹š Šž‰ÝÅòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— œŠ‘‹š Šž‰ÝßÖÄòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— Šž‰ŒÝßÖÄòõòõööö–™ß×ß“ž†šÑšŒ¤ÝœŠ‘‹š Šž‰Ý¢ßÁÂßÌßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ŒŠ‘“œ”ÝßÖÄòõöööšž”ÄòõòõööœžŒšßÝšœ–Œ–‘ ž–Œ‹–”šÝÅòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— šœ–Œ–‘ ž–Œ‹–”šÝßÖÄòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ž–Œ‹–”šŒÝßÖÄòõòõööö–™ß×ß“ž†šÑšŒ¤Ýšœ–Œ–‘ ž–Œ‹–”šÝ¢ßÁÂßÍßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ž™‹šŠ‘šÝßÖÄòõöööšž”ÄòõòõööœžŒšßÝŒ‹šž“‹— ž–Œ‹–”šÝÅòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— Œ‹šž“‹— ž–Œ‹–”šÝßÖÄòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ž–Œ‹–”šŒÝßÖÄòõÐÐööö–™ß×ß“ž†šÑšŒ¤ÝŒ‹šž“‹— ž–Œ‹–”šÝ¢ßÁÂßÍßÖòõÐÐöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ÀÀÀÝßÖÄòõöööšž”ÄòõòõööœžŒšßÝ—ž–š ž–Œ‹–”šÝÅòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— —ž–š Œ‹–”šÝßÖÄòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ž–Œ‹–”šŒÝßÖÄòõÐÐööö–™ß×ß“ž†šÑšŒ¤Ý—ž–š ž–Œ‹–”šÝ¢ßÁÂßÍßÖòõÐÐöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ÀÀÀÝßÖÄòõöööšž”ÄòõòõööœžŒšßÝ—š“–œ‹šÝÅòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— —š“–œ‹šÝßÖÄòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— —š“–œ‹šŒÝßÖÄòõööö–™ß×ß“ž†šÑšŒ¤Ý—š“–œ‹šÝ¢ßÁÂßÍßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ž–ŒŠš––‹†ÝßÖÄòõöööšž”ÄòõòõööœžŒšßÝ—š“–œ‹š ™“žšŒÝÅòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— —š“–œ‹š ™“žšŒÝßÖÄòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— —š“–œ‹šŒÝßÖÄòõÐÐööö–™ß×ß“ž†šÑšŒ¤Ý—š“–œ‹š ™“žšŒÝ¢ßÁÂßÍßÖòõÐÐöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ÀÀÀÝßÖÄòõöööšž”ÄòõòõööœžŒšßÝ—š“–œ‹š ’–‘–˜Š‘ÝÅòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— —š“–œ‹š ’–‘–˜Š‘ÝßÖÄòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— —š“–œ‹šŒÝßÖÄòõÐÐööö–™ß×ß“ž†šÑšŒ¤Ý—š“–œ‹š ’–‘–˜Š‘Ý¢ßÁÂßÍßÖòõÐÐöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ÀÀÀÝßÖÄòõöööšž”ÄòõòõööœžŒšßÝž–›ÝÅòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ž–›ÝßÖÄòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ž–›ŒÝßÖÄòõòõÐÐööö–™ß×ß“ž†šÑšŒ¤Ýž–›Ý¢ßÁÂßÍßÖòõÐÐöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ÀÀÀÝßÖÄòõöööšž”ÄòõòõööœžŒšßÝž–› Œš‘‹† ’–‘–˜Š‘ÝÅòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— Œš‘‹†ÝßÖÄòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ž–›ŒÝßÖÄòõöööòõÐÐööö–™ß×ß“ž†šÑšŒ¤Ýž–›Ý¢ßÁÂßÍßÖòõÐÐöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ÀÀÀÝßÖÄòõöööšž”ÄòõöööòõööœžŒšßÝž–› ’š˜žÝÅòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ž–› ’š˜žÝßÖÄòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ž–›ŒÝÓßËßÖÄòõòõÐÐööö–™ß×ß“ž†šÑšŒ¤Ýž–› ’š˜žÝ¢ßÁÂßÍßÖòõÐÐöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ÀÀÀÝßÖÄòõöööšž”ÄòõòõööœžŒšßÝžœÎÌÏÝÅòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— žœÎÌÏÝßÖÄòõòõÐÐööö–™ß×ß“ž†šÑšŒ¤Ýž–› ’š˜žÝ¢ßÁÂßÍßÖòõÐÐöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ÀÀÀÝßÖÄòõöööšž”ÄòõòõööœžŒšßÝš’ÝÅòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— š’ÝßÖÄòõòõÐÐööö–™ß×ß“ž†šÑšŒ¤Ýš’Ý¢ßÁÂßÍßÖòõÐÐöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ÀÀÀÝßÖÄòõöööšž”ÄòõòõööœžŒšßÝš›ž‹ ’–ŒŒ–“šÝÅòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— š›ž‹ ’–ŒŒ–“šÝßÖÄòõòõÐÐööö–™ß×ß“ž†šÑšŒ¤Ýš’Ý¢ßÁÂßÍßÖòõÐÐöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ÀÀÀÝßÖÄòõöööšž”ÄòõòõööœžŒšßÝ‘Š”šÝÅòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‘Š”šÝßÖÄòõòõööö–™ß×ß“š‰š“Ñ‹šž’½žŒš›ßÙÙß’žŒ£’£˜ž’š‹†šŒ£ ˜ž’šŒœšÅŘš‹¨–‘‘–‘˜«šž’×ÖßÂÂß“š‰š“Ñ‹—š«šž’¤“ž†šÑ‹šž’¢ßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ˆÝßÖÄòõòõöööšž”Äòõö‚òõ‚òõòõòõœ— ‰š—–œ“š ”–““Œ×ß›ž‹žßÖòõ„òõö–™ß×ßÞ–Œ»š™–‘š›×ß›ž‹žÑž‹‹žœ”šßÖ߃ƒßÞ–Œ¯“ž†š×ß›ž‹žÑž‹‹žœ”šßÖßÖòõööš‹Š‘Äòõòõö–™ß×ßÞ–Œ´–““Œ‹šž”¨šž‘×ß›ž‹žÑŒ¨šž‘ßÖßÖòõööš‹Š‘Äòõööòõö“ž†šßÂß›ž‹žÑž‹‹žœ”šÄòõòõö–™ß×ßÞ–Œ»š™–‘š›×ß“ž†šÑšŒ¤›ž‹žÑŒ¨šž‘ßÔßÝ Œ‹šž”Ý¢ßÖßÖòõöö“ž†šÑšŒ¤›ž‹žÑŒ¨šž‘ßÔßÝ Œ‹šž”Ý¢ßÂßÏÄòõòõö“ž†šÑšŒ¤›ž‹žÑŒ¨šž‘ßÔßÝ Œ‹šž”Ý¢ÔÔÄòõòõöŒˆ–‹œ—ß×ß›ž‹žÑŒ¨šž‘ßÖòõö„òõööœžŒšßÝœž “ž†š ’–‘–˜Š‘ ’ÝÅöÐÐß¼—šß¸Š‘‘šòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— œžœ’’ž‘›šÝßÖÄòõòõööö–™ß×ß–Œ»š™–‘š›×ß“ž†šÑ™–‘ž“´–““ßÖßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— —–›š™ÝßÖÄòõöööšž”ÄòõòõööœžŒšßÝž‹–““š† ’ÝÅöööÐÐ߯šœ–Œ–‘ß¾–Œ‹–”šòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— œžš‹’šÝßÖÄòõòõööö–™ß×ß“ž†šÑšŒ¤›ž‹žÑŒ¨šž‘ßÔßÝ Œ‹šž”Ý¢ßÁÂßÊßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— œžš‹’ÝßÖÄòõòõööö–™ß×ß–Œ»š™–‘š›×ß“ž†šÑ™–‘ž“´–““ßÖßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ™–‘–Œ—–‘˜‹Šœ—ÝßÖÄòõöööšž”ÄòõòõööœžŒšßÝŒ‹šž“‹— ’ ’ÝÅöööÐÐ߬‹šž“‹—ß½’šòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‹—šŒ––‹ÝßÖÄòõòõööö–™ß×ß“ž†šÑšŒ¤›ž‹žÑŒ¨šž‘ßÔßÝ Œ‹šž”Ý¢ßÁÂßÉßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— š›œžš‹ÝßÖÄòõòõööö–™ß×ß–Œ»š™–‘š›×ß“ž†šÑ™–‘ž“´–““ßÖßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‹šœ—‘”–““šÝßÖÄòõöööšž”ÄòõòõööœžŒšßÝž‰š“ˆ ’–‘–˜Š‘ ’ÝÅööÐÐ߯ž‰šß³ˆòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— •““†˜šš‘˜–ž‘‹ÝßÖÄòõòõööö–™ß×ß–Œ»š™–‘š›×ß“ž†šÑ™–‘ž“´–““ßÖßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‹ž‘Œ™’šÝßÖÄòõöööšž”ÄòõòõööœžŒšßÝŒš‘‹† ’–‘–˜Š‘ ’ÝÅööÐÐ߬š‘‹†ß¸Š‘òõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— “”‘—ž‘›ŒÝßÖÄòõòõööö–™ß×ß–Œ»š™–‘š›×ß“ž†šÑ™–‘ž“´–““ßÖßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— žŒš‘‹ššÝßÖÄòõöööšž”ÄòõòõööœžŒšßÝ—ž–š ÍÏ’’ ’ÝÅöööÐÐß·ž–šß¬‹–”šòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— †Šš™–š›ÝßÖÄòõòõööö–™ß×ß–Œ»š™–‘š›×ß“ž†šÑ™–‘ž“´–““ßÖßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‹Šš“–šŒÝßÖÄòõöööšž”ÄòõòõööœžŒšßÝžœÎÌÏ ÎÏÊ’’ ’ÝÅöööÐÐß¾¼ÎÌÏòõööœžŒšßÝžœÎÌÏ ËÏ’’ ’ÝÅöööÐÐß¾¼ÎÌÏòõööœžŒšßÝžœÎÌÏ ÍÊ’’ ’ÝÅöööÐÐß¾¼ÎÌÏòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— Œšœ‹šÝßÖÄòõòõööö–™ß×ß–Œ»š™–‘š›×ß“ž†šÑ™–‘ž“´–““ßÖßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ›šž‹—™’ž‰šÝßÖÄòõöööšž”ÄòõòõööœžŒšßÝš’‹š’–ŒŒ–“š •šœ‹–“š ’ÝÅöÐÐß·š““™–šòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— š›ž‹ÝßÖÄòõòõööö–™ß×ß“ž†šÑšŒ¤›ž‹žÑŒ¨šž‘ßÔßÝ Œ‹šž”Ý¢ßÁÂßËßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— šžšÝßÖÄòõòõööö–™ß×ß–Œ»š™–‘š›×ß“ž†šÑ™–‘ž“´–““ßÖßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ›‘š”–““šÝßÖÄòõöööšž”ÄòõòõööœžŒšßÝœž ÍÏ’’ ’ÝÅöööÐÐß¾‹‹žœ”ß·š“–œ‹šòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— œ—š‰š‹ÝßÖÄòõòõööö–™ß×ß–Œ»š™–‘š›×ß“ž†šÑ™–‘ž“´–““ßÖßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ˜ÝßÖÄòõöööšž”ÄòõòõööœžŒšßÝ‘Š”š ’ÝÅöööööÐÐß±Š”šòõööö›ž‹žÑ‰–œ‹–’ßœšŒŒ¼—ž““š‘˜š×ßÝœ— ž›–ž‹–‘Œ–œ”‘šŒŒÝßÖÄòõöööšž”Äòõòõöö›š™žŠ“‹Åòõöööšž”Äööòõö‚òõ‚öòõòõòõœ— ‰š—–œ“š ”–““š›×ß›ž‹žßÖòõ„òõö–™ß×ßÞ–Œ»š™–‘š›×ß›ž‹žÑž‹‹žœ”šßÖ߃ƒßÞ–Œ¯“ž†š×ß›ž‹žÑž‹‹žœ”šßÖßÖòõööš‹Š‘Äòõòõö“ž†šßÂß›ž‹žÑž‹‹žœ”šÄòõ‚òõòõòõœ“šž¶»¬—‹“†×ßš‡¶›ßÖòõ„òõöŒš“™ßš‘›‘ß×ßÝ›–Œœ‘‘šœ‹ÝßÖÄòõöòõöŒš“™ß‘‹–™†×ßÝœ“šž–‘˜ š‡¶» ÝßÔßš‡¶»ßÖÄòõöŒš“™ßš‘›‘ß×ßÝœ“šž–‘˜ š‡¶» ÝßÔßš‡¶»ßÖÄòõöòõöˆž–‹ß×ßÌÑÏßÖÄòõöŒš“™Ñš‡“Œ–‰š´–““Œ¤š‡¶›¢ßÂߊ‘›š™–‘š›Äòõ‚òõòõ²¸´–““×Öòõ„òõö“ž†šßÂߌš“™Äòõö–™ß×ßÞ–Œ»š™–‘š›×ß“ž†šÑšŒ¤Ý²¸¬‹šž”Ý¢ßÖßÖòõö„òõöö“ž†šÑšŒ¤Ý²¸¬‹šž”Ý¢ßÂßÏÄòõöö“ž†šß‹—šž›ßš‘›²¸¬‹šž”¨—š‘³šž‰š²¸×ÖÄòõöö–™ß×ßÞ–Œ»š™–‘š›×ß“ž†šÑšŒ¤Ý²¸¬‹šž”Ý¢ßÖßÖòõöööš‹Š‘Äòõö‚òõö“ž†šÑšŒ¤Ý²¸¬‹šž”Ý¢ÔÔÄòõöÐЖ–‘‹“‘×ß“ž†šÑšŒ¤Ý²¸¬‹šž”Ý¢ßÖÄòõö–™ß×ß“ž†šÑšŒ¤Ý²¸¬‹šž”Ý¢ßÁÂßÊßÖòõöö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ’˜’žŒ‹šÝßÖÄòõ‚òõòõš‘›²¸¬‹šž”¨—š‘³šž‰š²¸×Öòõ„òõöŒš“™ßš‘›‘×Ý›–Œœ‘‘šœ‹ÝÖÄòõöˆ—–“š×ÎÖòõö„òõöö–™ß×ßÞ–Œ¾“–‰š×ߌš“™ßÖ߃ƒßŒš“™ßŠŒš½Š‹‹‘¯šŒŒš›×ÖßÖòõöö„òõöööŒš“™ÑšŒ¤Ý²¸¬‹šž”Ý¢ßÂߊ‘›š™–‘š›ÄòõöööÐЖ–‘‹“‘×ÝÏÝÖÄòõöööšž”Äòõöö‚òõööˆž–‹ßÑÏÊÄòõö‚òõ‚òõòõš‘›²¸¬‹šž”×Öòõ„òõöÐÐß–‘ßœžŒšßš‘›²¸¬‹šž”¨—š‘³šž‰š²¸ß™ž–“Œß™ßˆ—ž‹š‰šßšžŒ‘ÑòõöŒš“™ÑšŒ¤Ý²¸¬‹šž”Ý¢ßÂߊ‘›š™–‘š›ÄòõöÐЖ–‘‹“‘×ÝÏÝÖÄòõ‚òõòõ”–““š›½šŒ‹º‘š’†¯“ž†š×߈žŒ½šŒ‹ßÖòõ„òõö–™ß×ßÞ–Œ›š™–‘š›×ߌš“™ÑšŒ¤ÝœŠ‘‹š’‰ Œ‹šž”Ý¢ßÖ߃ƒßÞˆžŒ½šŒ‹ßÖòõööŒš“™ÑšŒ¤ÝœŠ‘‹š’‰ Œ‹šž”Ý¢ßÂßÏÄòõöòõöŒš“™ÑšŒ¤ÝœŠ‘‹š’‰ Œ‹šž”Ý¢ÔÔÄòõöòõö–™ß×ߌš“™ÑšŒ¤ÝœŠ‘‹š’‰ Œ‹šž”Ý¢ßÂÂßÌßÖòõööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‹—š–˜˜š‹—š†žšÝßÖÄòõöš“Œšß–™ß×ߌš“™ÑšŒ¤ÝœŠ‘‹š’‰ Œ‹šž”Ý¢ßÂÂßÊßÖòõööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‹—š—ž›š‹—š†™ž““ÝßÖÄòõòõö–™ß×ߌš“™ÑšŒ¤ÝœŠ‘‹š’‰ Œ‹šž”Ý¢ßÁÂßÎÏßÖòõööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— œŠ‘‹š’‰ÝßÖÄòõ‚òõòõòõ–Œ·–˜—šŒ‹¬œ–‘˜¯“ž†š×ß“ž†šßÖòõ„òõö–™ß×ßÞ–Œ»š™–‘š›×ß“ž†šÑŒœšßÖ߃ƒß“ž†šÑŒœšßÃßÎßÖòõööš‹Š‘ß™ž“ŒšÄòõòõö“ž†šŒßÂß“š‰š“Ñ“ž†šŒÄòõö–™ß×ß“š‰š“Ñ‹šž’½žŒš›ßÖòõöö‹šž’ßÂß“ž†šÑšŒ¤Ý‹šž’Ý¢Äòõöš“Œšòõöö‹šž’ßÂßÝž““ÝÄòõòõö—–˜—¬œšßÂß“ž†šÑŒœšÄòõòõö™×ß–ßÂßÏÄß–ßÃß“ž†šŒÑŒ–…šÄß–ÔÔßÖòõö„òõöö–™ß×ßÞ–Œ»š™–‘š›×ß“ž†šŒ¤–¢ÑŒœšßÖßÖòõöööœ‘‹–‘ŠšÄòõöööòõöö–™ß×ß“ž†šŒ¤–¢ÑŒœšßÃßÎßÖòõöööœ‘‹–‘ŠšÄòõòõöö–™ß×ß‹šž’ßÞÂßÝž““ÝßÙÙß“ž†šŒ¤–¢ÑšŒ¤Ý‹šž’Ý¢ßÞÂß‹šž’ßÖòõöööœ‘‹–‘ŠšÄòõööòõöö–™ß×ß“ž†šŒ¤–¢ÑŒœšßÁß—–˜—¬œšßÖòõöööš‹Š‘ß™ž“ŒšÄòõö‚òõöòõöš‹Š‘ß‹ŠšÄòõ‚òõòõòõœ— ”–““Œ×ß›ž‹žÓß‹–’šßÖòõ„òõö›ž‹žÑ‰–œ‹–’ß“ž†š»–š›×ÖÄòõöòõö–™ß×ßÞ–Œ»š™–‘š›×ß›ž‹žÑž‹‹žœ”šßÖ߃ƒßÞ–Œ¯“ž†š×ß›ž‹žÑž‹‹žœ”šßÖßÖòõööš‹Š‘Äòõöòõö“ž†šßÂß›ž‹žÑž‹‹žœ”šÄòõöòõö‹–’šßÂß›ž‹žÑ‹–’šÄòõöòõö–™ß×ß“ž†šÑšŒ¤ÝœŠ ”–““ Œ‹šž”Ý¢ßÂÂßÎÏßÖòõöö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ™šž“šŒŒÝßÖÄòõòõö–™ß×ß“š‰š“Ñ‹šž’½žŒš›ßÖòõö„òõöö–™ß×ß“š‰š“Ñ‹šž’¼Š‘‹¤›ž‹žÑ‰–œ‹–’ÑšŒ¤Ý‹šž’Ý¢¢ßÁßÌßÙÙß“ž†šÑ”–““š›¯“ž†šŒÑŒ–…šßÁÂß“š‰š“Ñ‹šž’¼Š‘‹¤›ž‹žÑ‰–œ‹–’ÑšŒ¤Ý‹šž’Ý¢¢ßÖòõöö„òõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‹ž‘˜›ˆ‘ÝßÖÄòõöööòõööö’žŒ£’£ žˆž›ŒÅÅž››¾ˆž›¨–‘‘š×ßÝ”–““š›‹—š‹šž’ÝÓß“ž†šÑœ“–š‘‹–›ßÖÄòõöö‚òõöòõöö–™ß×ß“š‰š“Ñ‹šž’¼Š‘‹¤›ž‹žÑ‰–œ‹–’ÑšŒ¤Ý‹šž’Ý¢¢ßÁßÌßÙÙß“ž†šÑ”–““š›¯“ž†šŒ¼Šš‘‹ÑŒ–…šßÁÂß“š‰š“Ñ‹šž’¼Š‘‹¤›ž‹žÑ‰–œ‹–’ÑšŒ¤Ý‹šž’Ý¢¢ßÖòõöö„òõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— š‡‹š’šœŠš“‹†ÝßÖÄòõööòõööö’žŒ£’£ žˆž›ŒÅÅž››¾ˆž›¨–‘‘š×ßÝ”–““š›‹—š‹šž’‘š“–™šÝÓß“ž†šÑœ“–š‘‹–›ßÖÄòõöö‚òõö‚òõòõö–™ß×ß–Œ»š™–‘š›×ß“ž†šÑ”–““š›¯“ž†šŒ¤›ž‹žÑ‰–œ‹–’јŠ–›¢ßÖßÙÙß“ž†šÑ”–““š›¯“ž†šŒ¤›ž‹žÑ‰–œ‹–’јŠ–›¢ßÂÂßÊßÖòõöö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— –‰ž“ÝßÖÄòõòõö–™ß×ß–Œ›š™–‘š›×ß“ž†šÑ‹”¨šž‘¹’¤ß›ž‹žÑŒ¨šž‘ߢßÖßÖòõö„òõöö–™ß×ß“ž†šÑ‹”¨šž‘¹’¤ß›ž‹žÑŒ¨šž‘ߢßÂÂß›ž‹žÑ‰–œ‹–’ßÙÙß›ž‹žÑŒ²šž‘Œ°™»šž‹—ßÞÂßݲ°» ²º³ººÝßÖòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— œŠš“‹†ÝßÖÄòõö‚òõòõö‘š³š™‹¼Š‘‹ßÂßÏÄòõòõöŒšœ‘›ž†¼Š‘‹ßÂßÏÄòõö“‘˜Œ—‹¼Š‘‹ßÂßÏÄòõö”–““Œ³žŒ‹ÎÏŒßÂßÎÄòõöòõö”–““š›¯“ž†šŒ¤›ž‹žÑ‰–œ‹–’Ñ‘ž’š¢ßÂß›ž‹žÑ‰–œ‹–’Ñ‘ž’šÄòõöŠŒš›¨šž‘Œ¤›ž‹žÑŒ¨šž‘¢ßÂß›ž‹žÑŒ¨šž‘ÄòõöŠ‘–ŽŠš´–““ŒßÂßÎÄòõö”–““Œ‹šž”´–““ŒßÂߤ¢Äòõöòõö™šžœ—ß×ß”–““»ž‹žß–‘ß“ž†šÑ”–““Œ«—–Œ³–™šßÖòõö„òõöö–™ß×ß–Œ¼¾¼¬šœ‘›ž†¨šž‘×ß”–““»ž‹žÑŒ¨šž‘ßÖßÙÙß”–““»ž‹žÑŒ²šž‘Œ°™»šž‹—ßÞÂßݲ°» ²º³ººÝßÖòõöööŒšœ‘›ž†¼Š‘‹ÔÔÄòõööòõöö–™ß×ß–Œ»š™–‘š›×ß”–““»ž‹žÑ’›–™–šŒ¤Ý“‘˜Œ—‹Ý¢ßÖßÖòõööö“‘˜Œ—‹¼Š‘‹ÔÔÄòõòõöö–™ß×ß‹–’šßÒß”–““»ž‹žÑ‹–’šßÃßÎÏÏÏÏßÖòõööö”–““Œ³žŒ‹ÎÏŒÔÔÄööòõòõöö–™ß×ß–Œ´–““Œ‹šž”¨šž‘×ß”–““»ž‹žÑŒ¨šž‘ßÖßÖòõöö„òõööö–™ß×ßÞ–Œ»š™–‘š›×ß”–““Œ‹šž”´–““Œ¤ß”–““»ž‹žÑŒ¨šž‘ߢßÖßÖòõöööö”–““Œ‹šž”´–““Œ¤ß”–““»ž‹žÑŒ¨šž‘ߢßÂßÏÄòõòõööö”–““Œ‹šž”´–““Œ¤ß”–““»ž‹žÑŒ¨šž‘ߢÔÔÄòõöö‚òõööš“Œšòõöö„òõööö–™ß×ß–Œ»š™–‘š›×ß“š‰š“Ñ‘š³š™‹«–’š¤“ž†šÑ‹šž’¢ßÖßÙÙß”–““»ž‹žÑ‹–’šßÁß“š‰š“Ñ‘š³š™‹«–’š¤“ž†šÑ‹šž’¢ßÖòõöööö‘š³š™‹¼Š‘‹ÔÔÄòõòõööö–™ß×ß–Œ»š™–‘š›×ß”–““»ž‹žÑ‰–œ‹–’ßÖßÖòõööö„òõöööö–™ß×ßÞ–Œ»š™–‘š›×ß”–““š›¯“ž†šŒ¤”–““»ž‹žÑ‰–œ‹–’Ñ‘ž’š¢ßÖßÙÙßÞ–Œ»š™–‘š›×ߊŒš›¨šž‘Œ¤”–““»ž‹žÑŒ¨šž‘¢ßÖßÙÙßÞ–Œ´–““¬‹šž”¨šž‘×ß”–““»ž‹žÑŒ¨šž‘ßÖßÖòõöööööŠ‘–ŽŠš´–““ŒÔÔÄòõööòõöööö”–““š›¯“ž†šŒ¤”–““»ž‹žÑ‰–œ‹–’Ñ‘ž’š¢ßÂß”–““»ž‹žÑ‰–œ‹–’Ñ‘ž’šÄòõööö‚òõöööòõöööŠŒš›¨šž‘Œ¤”–““»ž‹žÑŒ¨šž‘¢ßÂß”–““»ž‹žÑŒ¨šž‘Äòõöö‚òõö‚òõòõö™šžœ—ß×߈šž‘Óß”–““¼Š‘‹ß–‘ß”–““Œ‹šž”´–““ŒßÖòõö„òõöö–™ß×ß”–““¼Š‘‹ßÁÂßÎÏßÖòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— œž’šž‹ÝßÖÄòõö‚òõòõö–™ß×ߊ‘–ŽŠš´–““ŒßÂÂßÌßÖòõöö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— š‘ž–ŒŒž‘œšÝßÖÄòõòõö–™ß×ß”–““Œ³žŒ‹ÎÏŒßÁßÌßÙÙß“š‰š“Ñ‹šž’¼Š‘‹¤›ž‹žÑ‰–œ‹–’Ñ‹šž’¢ßÃÂß”–““Œ³žŒ‹ÎÏŒßÖòõöö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ’‘–œ–›šÝßÖÄòõòõö–™ß×ß–Œ¼¾¼¬šœ‘›ž†¨šž‘×ß›ž‹žÑŒ¨šž‘ßÖßÙÙߌšœ‘›ž†¼Š‘‹ßÂÂßÍßÖòõöö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— Œ–›š”–œ”ÝßÖÄòõòõö–™ß×ß–Œ»š™–‘š›×ß›ž‹žÑ’›–™–šŒ¤Ý“‘˜Œ—‹Ý¢ßÖßÙÙß“‘˜Œ—‹¼Š‘‹ßÂÂßÍßÖòõöö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‘”ÝßÖÄòõöòõö–™ß×ß–Œ»š™–‘š›×ß“š‰š“Ñ‘š³š™‹«–’š¤“ž†šÑ‹šž’¢ßÖßÙÙß‘š³š™‹¼Š‘‹ßÂÂßÍßÖòõöö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— š‘š’†™‹—šŒ‹ž‹šÝßÖÄòõòõö–™ß×ß›ž‹žÑ‰–œ‹–’ÑŒœšßÁßÏßÖòõö„òõöö–™ß×ß“š‰š“Ñ‹šž’žŒš›ßÖòõöö„òõööö‰–œ‹–’‹šž’ßÂß›ž‹žÑ‰–œ‹–’ÑšŒ¤Ý‹šž’Ý¢Äòõööö–™ß×ß–Œ›š™–‘š›×߉–œ‹–’‹šž’ßÖßÙÙ߉–œ‹–’‹šž’ßÞÂß“ž†šÑšŒ¤Ý‹šž’Ý¢ßÖòõööö„òõöööö–™ß×ß–Œ·–˜—šŒ‹¬œ–‘˜¯“ž†š×ß›ž‹žÑ‰–œ‹–’ßÖßÙÙß“š‰š“Ñ“ž†šŒÑŒ–…šßÁÂßÉßÖòõööööö“ž†šß”–““š›½šŒ‹º‘š’†¯“ž†š×ß‹ŠšßÖÄòõööööš“Œšòõööööö“ž†šß”–““š›½šŒ‹º‘š’†¯“ž†š×ß™ž“ŒšßÖÄòõööö‚òõöö‚òõööš“Œšòõöö„òõööö–™ß×ß–Œ·–˜—šŒ‹¬œ–‘˜¯“ž†š×ß›ž‹žÑ‰–œ‹–’ßÖßÙÙß“š‰š“Ñ“ž†šŒÑŒ–…šßÁÂßËßÖòõöööö“ž†šß”–““š›½šŒ‹º‘š’†¯“ž†š×ß‹ŠšßÖÄòõöööš“Œšòõöööö“ž†šß”–““š›½šŒ‹º‘š’†¯“ž†š×ß™ž“ŒšßÖÄòõöö‚òõö‚òõòõö–™ß×ß–Œ»š™–‘š›×ß›ž‹žÑ’›–™–šŒ¤Ýž‰š‘˜šÝ¢ßÖßÖòõöö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ž‰š‘˜šÝßÖÄòõöòõö–™ß×ß–Œ»š™–‘š›×ß›ž‹žÑ’›–™–šŒ¤ÝŠ……”–““Ý¢ßÖßÙÙß›ž‹žÑ’›–™–šŒ¤ÝŠ……”–““Ý¢ßÁÂßÆßÖòõöö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‹—š›š‘–šÝßÖÄòõòõöÐÐß¹–“‹šßŠ‹ß”–““Œ‹šž”߈šž‘Œöòõö–™ß×ß–Œ´–““Œ‹šž”¨šž‘×ß›ž‹žÑŒ¨šž‘ßÖßÖòõööš‹Š‘Äòõòõö–™ß×ß–Œ»š™–‘š›×ß›ž‹žÑ’›–™–šŒ¤Ý•žœ”–‘‹—š‡”–““Ý¢ßÖßÖòõöö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— •žœ”–‘‹—š‡ÝßÖÄòõòõö–™ß×ß–Œ»š™–‘š›×ß›ž‹žÑ’›–™–šŒ¤Ýœ“‘š”–““Ý¢ßÖßÖòõöö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— –›š‘‹–‹†‹—š™‹ÝßÖÄòõòõö–™ß×ß–Œ»š™–‘š›×ß›ž‹žÑ’›–™–šŒ¤Ýœ”–‘˜Ý¢ßÖßÖòõöö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‘ÝßÖÄòõòõö–™ß×ß–Œ»š™–‘š›×ß“ž†šÑ™–‘ž“´–““ßÖßÖòõö„òõöö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‹—šš›˜šÝßÖÄòõòõöö–™ß×ß–Œ»š™–‘š›×ß›ž‹žÑ’›–™–šŒ¤Ýš‰š‘˜šÝ¢ßÖßÖòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ’‘š†Œ—‹ÝßÖÄòõööòõöö–™ß×ß–Œ»š™–‘š›×“ž†šÑ–‘³žŒ‹¬‹ž‘›ÖßÙÙß“ž†šÑ–‘³žŒ‹¬‹ž‘›ßÖòõöö„òõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— “žŒ‹šŒ‹ÝßÖÄöööòõöö‚òõö‚òõòõö–™ß×ß“ž†šß–Œ¾‹½–‘”°™»šž‹—×ÖßÖòõö„òõöö“ž†šÑ–‘”°™»šž‹—´–““¬‹šž”ÔÔÄòõöö–™ß×ß“ž†šÑ–‘”°™»šž‹—´–““¬‹šž”ßÁÂßÌßÖòõöö„òõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‹—š–‘”ÝßÖÄòõöö‚òõö‚òõöòõö–™ß×ß›ž‹žÑŒ²šž‘Œ°™»šž‹—ßÂÂßݲ°» ¯¶¬«°³ ½ª³³º«Ý߃ƒß›ž‹žÑŒ²šž‘Œ°™»šž‹—ßÂÂßݲ°» ­¶¹³º ½ª³³º«ÝßÖòõö„òõòõööˆšž‘¼“žŒŒßÂߘš‹¨šž‘¼“žŒŒ×ß›ž‹žÑŒ¨šž‘ßÖÄòõööœ— Š““š‹»ž’ž˜š¼’’‘×ß›ž‹žÓß“ž†šÓß‹–’šÓ߈šž‘¼“žŒŒßÖÄòõöòõöö–™ß×ß–Œ²¸×ß›ž‹žÑŒ¨šž‘ßÖßÖòõöö„òõööö“ž†šß²¸´–““×ÖÄòõöö‚òõööš“Œšòõöö„òõöööžŒš¨šž‘ßÂߘš‹½žŒš¨šž‘±ž’š×ß›ž‹žÑŒ¨šž‘ßÖÄòõöööòõööö–™ß×ß–Œ»š™–‘š›×ß“š‰š“Ñœ—ž““š‘˜š¶‘™¤Ýœ— ’ž”Œ’ž‘ ÝßÔßžŒš¨šž‘¢ßÖßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ’ž”Œ’ž‘ ÝßÔßžŒš¨šž‘ßÖÄòõòõööö–™ß×ß–Œ»š™–‘š›×ß“š‰š“Ñœ—ž““š‘˜š¶‘™¤Ý ’ž”Œ’ž‘ ÝßÔßžŒš¨šž‘¢ßÖßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝ ’ž”Œ’ž‘ ÝßÔßžŒš¨šž‘ßÖÄòõöö‚òõö‚òõöš“Œšß–™ß×ß–Œ¬Š¬‹×ß›ž‹žÑŒ²šž‘Œ°™»šž‹—Óßݲ°» ¸­º±¾»ºÝßÖ߃ƒß–Œ¬Š¬‹×ß›ž‹žÑŒ²šž‘Œ°™»šž‹—Óßݲ°» º§¯³°¬¶©ºÝßÖ߃ƒß–Œ¬Š¬‹×ß›ž‹žÑŒ²šž‘Œ°™»šž‹—Óßݲ°» ¯­°µº¼«¶³ºÝßÖßÖòõö„òõöö–™ß×ß“ž†šß —žŒ¯š”×ßÝŒšœ–ž“‹† š‡“Œ–‰š›ž’ž˜šÝßÖßÖòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ›ž‘˜šœ“Œš ÝßÖÄòõòõöö–™ß×ß–Œ¬‹¬‹ž‹×ß›ž‹žÑŒ¨šž‘ÓßÝ™ž˜ ˜š‘ž›š Œ—‹ÝßÖßÙÙß×ßÞ–Œ»š™–‘š›×ß›ž‹žÑ‰–œ‹–’Ñš‡“Œ–‰š¶‘™¤Ý‹—ˆžœ”´–““Ý¢ßÖ߃ƒßÞ›ž‹žÑ‰–œ‹–’Ñš‡“Œ–‰š¶‘™¤Ý‹—ˆžœ”´–““Ý¢ßÖßÖòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ’ž‹†ÝßÖÄòõòõööÐÐß‹—–Œß–Œ›š™–‘š›ßœ—šœ”ߌ—Š“›ß‘‹ßšß‘šš›š›ÑÑÑß™–‘›ßŠ‹ßˆ—ššß‹—šŒšß’†Œ‹š†ßš‡“Œ–‘Œßžšßœ’–‘˜ß™’òõöö–™ß×ß–Œ»š™–‘š›×ß›ž‹žÑ‰–œ‹–’Ñš‡“Œ–‰š¶‘™¤Ý›ž’ž˜š«–’šÝ¢ßÖßÙÙß›ž‹žÑ‰–œ‹–’Ñš‡“Œ–‰š¶‘™¤Ý›ž’ž˜š«–’šÝ¢ßÂÂß‹–’šßÖòõöö„òõööö–™ß×ß›ž‹žÑŒ¨šž‘ßÂÂßÝ‘‘šÝßÖòõöööö›ž‹žÑŒ¨šž‘ßÂß›ž‹žÑ‰–œ‹–’Ñš‡“Œ–‰š¶‘™¤Ýˆšž‘Ý¢Äòõöööòõöööš‡¶›ßÂß‹–’šßÔßÝ ÝßÔß›ž‹žÑ‰–œ‹–’Ñš‡“Œ–‰š¶‘™¤Ý›ž’ž˜š¶›Ý¢Äòõööö–™ß×ßÞ–Œ»š™–‘š›×ß“ž†šÑš‡“Œ–‰š´–““Œ¤š‡¶›¢ßÖßÖòõööö„òõöööö“ž†šÑš‡“Œ–‰š´–““Œ¤š‡¶›¢ßÂßÏÄòõööö‚òõööö“ž†šß‹—šž›ßœ“šž¶»¬—‹“†×ßš‡¶›ßÖÄòõöööòõööö“ž†šÑš‡“Œ–‰š´–““Œ¤š‡¶›¢ÔÔÄòõöööòõöööžŒš¨šž‘ßÂߘš‹½žŒš¨šž‘±ž’š×ß›ž‹žÑŒ¨šž‘ßÖÄòõöööòõööö–™ß×ßžŒš¨šž‘ßÂÂßÝ•ž‰š“–‘Ý߃ƒßžŒš¨šž‘ßÂÂßÝ’ÈÆÝ߃ƒßžŒš¨šž‘ßÂÂßÝž‹ËÝ߃ƒßžŒš¨šž‘ßÂÂßݘÝßÖòõööö„òõöööö–™ß×ß“ž†šÑš‡“Œ–‰š´–““Œ¤š‡¶›¢ßÁßÎßÖòõöööö„òõööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝ š‡š‹ ÝßÔßžŒš¨šž‘ßÖÄòõöööö‚òõööö‚öòõöööòõööö–™ß×ßžŒš¨šž‘ßÂÂßݘ“ÝßÖòõööö„òõööööˆšž‘¾‹‹žœ—’š‘‹ŒßÂߘš‹¨šž‘¾‹‹žœ—’š‘‹Œ×ß›ž‹žÑŒˆšž‘ßÖÄòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ÝßÔ߈šž‘¾‹‹žœ—’š‘‹Œ¤Ï¢ßÔßÝ ˜“ÝßÖÄòõòõöööö–™ß×ß–Œ»š™–‘š›×ß“š‰š“Ñœ—ž““š‘˜š¶‘™¤Ýœ— ’ž”Œ’ž‘ ÝßÔ߈šž‘¾‹‹žœ—’š‘‹Œ¤Ï¢¢ßÖßÖòõööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ’ž”Œ’ž‘ ÝßÔ߈šž‘¾‹‹žœ—’š‘‹Œ¤Ï¢ßÖÄòõööööòõöööö–™ß×ß“ž†šß —žŒ¯š”×ßÝŒšœ–ž“‹† “–‘˜ÝßÖßÖòõöööö„òõöööööžŒš¨šž‘¾‹‹žœ—’š‘‹ŒßÂߘš‹¨šž‘¾‹‹žœ—’š‘‹Œ×ß›ž‹žÑŒ–’ž†ˆšž‘ßÖÄööòõööööö–™ß×ßžŒš¨šž‘¾‹‹žœ—’š‘‹ŒÑŒ–…šßÂÂßÍßÙÙ߶Œ¬Š¬‹×ß›ž‹žÑŒ–’ž†ˆšž‘Ó߈šž‘¾‹‹žœ—’š‘‹Œ¤Ï¢ßÖßÖòõöööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— “–‘˜ ÝßÖÄòõöööö‚òõööööòõöööö–™ß×ß–Œ»š™–‘š›×ß“š‰š“Ñœ—ž““š‘˜š¶‘™¤Ý ’ž”Œ’ž‘ ÝßÔ߈šž‘¾‹‹žœ—’š‘‹Œ¤Ï¢¢ßÖßÖòõööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝ ’ž”Œ’ž‘ ÝßÔ߈šž‘¾‹‹žœ—’š‘‹Œ¤Ï¢ßÖÄòõööö‚òõöööòõööö–™ß×ß–Œ»š™–‘š›×ß›ž‹žÑ‰–œ‹–’Ñš‡“Œ–‰š¶‘™¤ÝŒ‹–œ”´–““Ý¢ßÖßÙÙß›ž‹žÑ‰–œ‹–’Ñš‡“Œ–‰š¶‘™¤ÝŒ‹–œ”´–““Ý¢ßÖòõööö„òõöööö–™ß×ß–Œ»š™–‘š›×ß›ž‹žÑ’›–™–šŒ¤Ýš‰š‘˜šÝ¢ßÖßÖßòõööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‰š›ž™‹ÝßÖÄööööòõòõöööö–™ß×ß–Œ»š™–‘š›×ß“ž†šÑ™–‘ž“´–““ßÖßÖòõööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— Œ‹–œ”’ž‘ÝßÖÄòõòõöööö–™ß×ß“ž†šÑš‡“Œ–‰š´–““Œ¤š‡¶›¢ßÁßÎßÖòõööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ˜Š—Š˜ÝßÖÄòõööö‚òõòõööö–™ß×ß–Œ»š™–‘š›×ß›ž‹žÑ‰–œ‹–’Ñš‡“Œ–‰š¶‘™¤ÝŒ‹–œ”¹–š‘›“†´–““Ý¢ßÖßÙÙß›ž‹žÑ‰–œ‹–’Ñš‡“Œ–‰š¶‘™¤ÝŒ‹–œ”¹–š‘›“†´–““Ý¢ßÖòõööö„òõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— šŒŠœš™Š“ÝßÖÄòõööö‚òõöööòõööö–™ß×ßÞ–Œ¬Š¬‹×ßžŒš¨šž‘ÓßÝŒ‹–‘˜šÝßÖßÖòõööö„òõöööö–™ß×ß–Œ»š™–‘š›×ß“š‰š“Ñœ—ž““š‘˜š¶‘™¤Ýœ— ’ž”Œ’ž‘ ÝßÔßžŒš¨šž‘¢ßÖßÖòõööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ’ž”Œ’ž‘ ÝßÔßžŒš¨šž‘ßÖÄòõöòõöööö–™ß×ß–Œ»š™–‘š›×ß“š‰š“Ñœ—ž““š‘˜š¶‘™¤Ý ’ž”Œ’ž‘ ÝßÔßžŒš¨šž‘¢ßÖßÖòõööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝ ’ž”Œ’ž‘ ÝßÔßžŒš¨šž‘ßÖÄòõööö‚òõöööòõööö–™ß×ß–Œ¬‹¬‹ž‹×ß›ž‹žÑŒ¨šž‘ÓßÝ™ž˜ ÝßÖßÖòõööö„òõöööö–™ß×ß“ž†šÑš‡“Œ–‰š´–““Œ¤š‡¶›¢ßÁßÎßÖòõööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ’Š“‹–™ž˜ÝßÖÄòõöòõöööö–™ß×ß–Œ»š™–‘š›×ß›ž‹žÑ’›–™–šŒ¤Ýš‰š‘˜šÝ¢ßÖßÖßòõööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ž‘˜™Šœ”ÝßÖÄööööòõööööòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ˜š‘ž›š”–““ÝßÖÄòõööööòõöööö–™ß×ß›ž‹žÑ‰–œ‹–’Ñš‡“Œ–‰š¶‘™¤Ýœ”š›´–““Ý¢ßÖòõööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ’žŒ‹šœ—š™ÝßÖÄòõööööòõöööö–™ß×ß›ž‹žÑ‰–œ‹–’Ñš‡“Œ–‰š¶‘™¤ÝŒŠ–œ–›š¸š‘ž›š´–““Ý¢ßÖòõööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ’–Œš†“‰šŒœ’ž‘†ÝßÖÄòõööööòõöööö–™ß×ß›ž‹žÑ‰–œ‹–’Ñš‡“Œ–‰š¶‘™¤Ý‹—ˆžœ”´–““Ý¢ßÖòõööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— —‹‹ž‹ÝßÖÄòõööö‚òõöööš“Œšß–™ß×ß–Œ¬‹¬‹ž‹×ß›ž‹žÑŒ¨šž‘ÓßÝŒš’‹š‡ ÝßÖßÖòõööö„òõöööö–™ß×ß–Œ»š™–‘š›×ß›ž‹žÑ’›–™–šŒ¤Ýš‰š‘˜šÝ¢ßÖßÖßòõööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‹–’š–Œ’‘š†ÝßÖÄööööòõööö‚òõöööš“Œšß–™ß×ß–Œ¬‹¬‹ž‹×ß›ž‹žÑŒ¨šž‘ÓßݜˠÝßÖßÖòõööö„òõöööö–™ß×ß–Œ»š™–‘š›×ß›ž‹žÑ’›–™–šŒ¤Ýš‰š‘˜šÝ¢ßÖßÖßòõööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— –ž’–œ—ÝßÖÄööööòõòõöööö–™ß×ß“ž†šÑš‡“Œ–‰š´–““Œ¤š‡¶›¢ßÁßÎßÖòõööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ’Š“‹–œËÝßÖÄòõòõöööö–™ß×ß›ž‹žÑ‰–œ‹–’Ñš‡“Œ–‰š¶‘™¤Ýš‹Š‘«¬š‘›šÝ¢ßÖòõööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— š‹Š‘‹Œš‘›šÝßÖÄööööòõööööòõöööö–™ß×ß›ž‹žÑ‰–œ‹–’Ñš‡“Œ–‰š¶‘™¤ÝœŠ‘‹š´–““Ý¢ßÖòõööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— œŠ‘‹šœËÝßÖÄòõööööòõöööö–™ß×ß›ž‹žÑ‰–œ‹–’Ñš‡“Œ–‰š¶‘™¤ÝŠ““š‹¯š‘š‹ž‹–‘´–““Ý¢ßÖòõööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— —ˆ‹—šÝßÖÄòõòõöööö–™ß×ß›ž‹žÑ‰–œ‹–’Ñš‡“Œ–‰š¶‘™¤Ýœ—ž–‘´–““Ý¢ßÖòõööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ›’–‘ŒÝßÖÄòõòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— œËŒ—‹ÝßÖÄòõööööòõöööö–™ß×ß–Œ»š™–‘š›×“ž†šÑ–‘³žŒ‹¬‹ž‘›ÖßÙÙß“ž†šÑ–‘³žŒ‹¬‹ž‘›ßÖòõööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— œ“–œ”œ“–œ”’ÝßÖÄööòõööö‚òõöööš“Œšß–™ß×ß–Œ¬‹¬‹ž‹×ß›ž‹žÑŒ¨šž‘ÓßÝœ“ž†’š ÝßÖßÖòõööö„òõöööö–™ß×ß–Œ»š™–‘š›×ß›ž‹žÑ’›–™–šŒ¤Ýš‰š‘˜šÝ¢ßÖßÖßòõööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— šž”ž‘”ÝßÖÄööööòõòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— œ“ž†’šŒ—‹ÝßÖÄòõòõöööö–™ß×ß“ž†šÑš‡“Œ–‰š´–““Œ¤š‡¶›¢ßÁßÎßÖòõööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ’Š“‹–œ“ž†’šÝßÖÄòõòõöööö–™ß×ß›ž‹žÑ‰–œ‹–’Ñš‡“Œ–‰š¶‘™¤Ýš‹Š‘«¬š‘›šÝ¢ßÖòõööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— š‹Š‘‹Œš‘›šÝßÖÄööööòõòõöööö–™ß×ß›ž‹žÑ‰–œ‹–’Ñš‡“Œ–‰š¶‘™¤ÝœŠ‘‹š´–““Ý¢ßÖòõööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— œŠ‘‹šœ“ž†’šÝßÖÄòõööööòõöööö–™ß×ß›ž‹žÑ‰–œ‹–’Ñš‡“Œ–‰š¶‘™¤ÝŠ““š‹¯š‘š‹ž‹–‘´–““Ý¢ßÖòõööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— —ˆ‹—šÝßÖÄòõòõöööö–™ß×ß›ž‹žÑ‰–œ‹–’Ñš‡“Œ–‰š¶‘™¤Ýœ—ž–‘´–““Ý¢ßÖòõööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ›’–‘ŒÝßÖÄòõööö‚òõöööš“Œšß–™ß×ß›ž‹žÑŒ¨šž‘ßÂÂßÝš‡“›ž“š žš“ÝßÖòõööö„òõööööÐГž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— š›žš“ŒŠ–ŒšÝßÖÄòõööö‚òõöööš“Œšß–™ß×ß›ž‹žÑŒ¨šž‘ßÂÂßÝ›šŒ‹Šœ‹–“š œžÝßÖòõööö„òõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— œž’ÝßÖÄòõööö‚òõöööš“Œšß–™ß×ß–Œ¬‹¬‹ž‹×ß›ž‹žÑŒ¨šž‘Óßݘ ÝßÖßÖòõööö„òõöööö–™ß×ß“ž†šÑš‡“Œ–‰š´–““Œ¤š‡¶›¢ßÁßÎßÖòõööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ’Š“‹–˜ÝßÖÄòõööö‚òõöö‚òõö‚òõöš“Œšß–™ß×ß–Œ¬Š¬‹×ß›ž‹žÑŒ²šž‘Œ°™»šž‹—Óöݲ°» ²º³ººÝßÖßÙÙßÞ–Œ¬Š¬‹×ß›ž‹žÑŒˆšž‘ÓßÝ–‹Œ—–š“› ’ÝßÖßÖòõö„òõöö“ž†šßš‘›²¸¬‹šž”×ÖÄòõööòõöö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ”‘–™š‰š‹ÝßÖÄòõöö“ž†šÑšŒ¤Ý’š“šš´–““¬‹šž”Ý¢ÔÔÄòõòõöö–™ß×ß“ž†šÑšŒ¤Ý’š“šš´–““¬‹šž”Ý¢ßÂÂßÌßÖòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— Œ“žŒ—šÝßÖÄòõööòõöö–™ß×ß“ž†šß —žŒ¯š”×ßÝŒšœ–ž“‹† š‡‹š‘›š›’š“ššÝßÖßÖòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— š‡‹š‘›š›’š“šš ÝßÖÄòõööòõöö–™ß×ß“ž†šß —žŒ¯š”×ßÝŒšœ–ž“‹† —šž‹šž”šÝßÖßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ›šž›Œ–“š‘œš ÝßÖÄòõööòõöö‰¾‘˜“šŒßÂß›ž‹žÑ‰–œ‹–’Ñž‘˜“šŒ°‘»šž‹—¤Î¢Äòõöö¾‘˜“šŒßÂß“ž†šÑž‘˜“šŒ°‘´–““¤Î¢Äòõööž‘˜“š»–™™ßÂß¾‘˜“š¼“ž’ÎÇÏ×߉¾‘˜“šŒßÒß¾‘˜“šŒßÖÄòõöö–™ß×ßžŒ×ž‘˜“š»–™™ÖßÃßÌÏßÖòõöö„òõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— žœ”Œ‹žšÝßÖÄòõöööòõööö–™ß×ß–Œ»š™–‘š›×ß“ž†šÑž‹‹žœ”šŒßÖßÖòõööö„òõöööö™šžœ—ß×ßž‹‹žœ”šß–‘ß“ž†šÑž‹‹žœ”šŒßÖòõöööö„òõööööö–™ß×ßž‹‹žœ”šßÞÂß›ž‹žÑ‰–œ‹–’ßÖòõööööööœ‘‹–‘ŠšÄòõööööööòõööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‘š‰š™˜š‹ÝßÖÄòõöööööšž”Äòõöööö‚òõööö‚òõöö‚òõòõöö–™ß×ßÞ“ž†šß“ž†š·žŒ¾’’×ÖßÖòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ŒŠ‰–‰ÝßÖÄòõöööòõöö–™ß×ß–Œ»š™–‘š›×ß“ž†šÑ–‘™šœ‹š›ßÖßÖòõööö›ž‹žÑ‰–œ‹–’ßœšŒŒ¼—ž““š‘˜š×ßÝœ— –‘™šœ‹š›ÝßÖÄòõòõöö–™ß×ß–Œ»š™–‘š›×ß›ž‹žÑ‰–œ‹–’Ñ“ž˜ŠšßÖßÖòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— “ž˜ŠšÝßÖÄòõööòõööžŒš¨šž‘ßÂߘš‹½žŒš¨šž‘±ž’š×ß›ž‹žÑŒ¨šž‘ßÖÄòõööˆšž‘¾‹‹žœ—’š‘‹ŒßÂߘš‹¨šž‘¾‹‹žœ—’š‘‹Œ×ß›ž‹žÑŒˆšž‘ßÖÄòõööòõöö–™ß×ß–Œ»š™–‘š›×߈šž‘¾‹‹žœ—’š‘‹Œ¤Ï¢ßÖßÙÙ߈šž‘¾‹‹žœ—’š‘‹Œ¤Ï¢ßÂÂßÝ‹žœ‹–œž“ÝßÖòõöö„òõööö–™ß×ß–Œ»š™–‘š›×ß“š‰š“Ñœ—ž““š‘˜š¶‘™¤Ýœ— ’ž”Œ’ž‘ ÝßÔßžŒš¨šž‘¢ßÖßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ’ž”Œ’ž‘ ÝßÔßžŒš¨šž‘ßÖÄòõöö‚òõö‚òõöš“Œšß–™ß×ß–Œ¬Š¬‹×ß›ž‹žÑŒ²šž‘Œ°™»šž‹—Óöݲ°» ²º³ººÝßÖßÙÙß–Œ¬Š¬‹×ß›ž‹žÑŒˆšž‘ÓßÝ–‹Œ—–š“› ’ÝßÖßÖòõö„òõöö“ž†šßš‘›²¸¬‹šž”×ÖÄòõööòõöö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— Œ—–š“›‰š‹ÝßÖÄòõöö“ž†šÑšŒ¤ÝŒ—–š“›´–““¬‹šž”Ý¢ÔÔÄòõòõöö–™ß×ß“ž†šÑšŒ¤ÝŒ—–š“›´–““¬‹šž”Ý¢ßÂÂßÌßÖòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— Œ’žŒ—šÝßÖÄòõòõöö–™ß×ß–Œ»š™–‘š›×ß“ž†šÑ™–‘ž“´–““ßÖßÖòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ˆ‘š›ÝßÖÄòõööòõöö–™ß×ß“ž†šß —žŒ¯š”×ßÝŒšœ–ž“‹† š‡‹š‘›š›’š“ššÝßÖßÖòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— š‡‹š‘›š›’š“šš ÝßÖÄòõööòõöö‰¾‘˜“šŒßÂß›ž‹žÑ‰–œ‹–’Ñž‘˜“šŒ°‘»šž‹—¤Î¢Äòõöö¾‘˜“šŒßÂß“ž†šÑž‘˜“šŒ°‘´–““¤Î¢Äòõööž‘˜“š»–™™ßÂß¾‘˜“š¼“ž’ÎÇÏ×߉¾‘˜“šŒßÒß¾‘˜“šŒßÖÄòõöö–™ß×ßžŒ×ž‘˜“š»–™™ÖßÃßÌÏßÖòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— žœ”Œ’žŒ—šÝßÖÄöòõòõöö–™ß×ßÞ“ž†šß“ž†š·žŒ¾’’×ÖßÖòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ŒŠ‰–‰ÝßÖÄòõö‚òõöš“Œšß–™ß×ß–Œ¬Š¬‹×ß›ž‹žÑŒ²šž‘Œ°™»šž‹—Óöݲ°» ¶²¯¾¼«ÝßÖßÖòõö„òõöö–™ß×ß–Œ¬‹¬‹ž‹×ß›ž‹žÑŒ¨šž‘ÓßÝ™ž˜ ÝßÖßÖòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‹—–‘”™žŒ‹ÝßÖÄòõööš“Œšß–™ß×ß–Œ¬‹¬‹ž‹×ß›ž‹žÑŒ¨šž‘ÓßÝœ‘œŠŒŒ–‘ ÝßÖßÖòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‹—–‘”™žŒ‹œ‘œŠŒŒ–‘ÝßÖÄòõööš“Œšß–™ß×ß–Œ¬‹¬‹ž‹×ß›ž‹žÑŒ¨šž‘ÓßÝ™“žŒ— ÝßÖßÖòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‹—–‘”™žŒ‹™“žŒ—ÝßÖÄòõööš“Œšß–™ß×ß–Œ¬‹¬‹ž‹×ß›ž‹žÑŒ¨šž‘Óßݘ“ ÝßÖßÖòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— Šœ—ÝßÖÄòõòõöö–™ß×ß›ž‹žÑŒ¨šž‘ßÂÂßÝ‹—ˆ–‘˜”‘–™š ’ÝßÖòõöö„òõööö–™ß×ß–Œ»š™–‘š›×ß›ž‹žÑ’›–™–šŒ¤Ýš‰š‘˜šÝ¢ßÖßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ž‹’ÝßÖÄöööòõòõööö–™ß×ß‹–’šßÃß“ž†šÑ™“žŒ—º‘›«–’šßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ›–›†ŠŒšš‹—ž‹ÝßÖÄòõòõööö–™ß×ß–Œ»š™–‘š›×ß“ž†šÑ™–‘ž“´–““ßÖßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— Š‘š“–š‰ž“šÝßÖÄòõööööòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— œž‘–šÝßÖÄòõöööòõööö–™ß×ß–Œ»š™–‘š›×ß›ž‹žÑ‰–œ‹–’Ñž‹‹žœ”š»ž‹ž¤“ž†šÑ˜Š–›¢Ñ–Œ¯–’ž†ßÖßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— –‹Œ šŒ‘ž“ÝßÖÄòõöö‚òõööòõööžŒš¨šž‘ßÂߘš‹½žŒš¨šž‘±ž’š×ß›ž‹žÑŒ¨šž‘ßÖÄòõöòõöö–™ß×ßžŒš¨šž‘ßÂÂßݘ“ÝßÖòõöö„òõöööˆšž‘¾‹‹žœ—’š‘‹ŒßÂߘš‹¨šž‘¾‹‹žœ—’š‘‹Œ×ß›ž‹žÑŒˆšž‘ßÖÄòõöööòõööö–™ß×ß–Œ»š™–‘š›×ß“š‰š“Ñœ—ž““š‘˜š¶‘™¤Ýœ— ÝßÔ߈šž‘¾‹‹žœ—’š‘‹Œ¤Ï¢ßÔßÝ ÝßÔßݘ“Ý¢ßÖßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ÝßÔ߈šž‘¾‹‹žœ—’š‘‹Œ¤Ï¢ßÔßÝ ÝßÔßݘ“ÝßÖÄòõòõööö–™ß×ß–Œ»š™–‘š›×ß“š‰š“Ñœ—ž““š‘˜š¶‘™¤Ýœ— ’ž”Œ’ž‘ ÝßÔ߈šž‘¾‹‹žœ—’š‘‹Œ¤Ï¢¢ßÖßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ’ž”Œ’ž‘ ÝßÔ߈šž‘¾‹‹žœ—’š‘‹Œ¤Ï¢ßÖÄòõòõööö–™ß×ß–Œ»š™–‘š›×ß“š‰š“Ñœ—ž““š‘˜š¶‘™¤Ý ’ž”Œ’ž‘ ÝßÔ߈šž‘¾‹‹žœ—’š‘‹Œ¤Ï¢¢ßÖßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝ ’ž”Œ’ž‘ ÝßÔ߈šž‘¾‹‹žœ—’š‘‹Œ¤Ï¢ßÖÄòõöö‚òõö‚òõöš“Œšß–™ß×ß›ž‹žÑŒ²šž‘Œ°™»šž‹—ßÂÂßݲ°» ·º¾» ¬·°«ÝßÖòõö„òõööˆšž‘¼“žŒŒßÂߘš‹¨šž‘¼“žŒŒ×ß›ž‹žÑŒ¨šž‘ßÖÄòõööòõööœ— Š““š‹»ž’ž˜š¼’’‘×ß›ž‹žÓß“ž†šÓß‹–’šÓ߈šž‘¼“žŒŒßÖÄòõöòõööŒˆ–‹œ—ß×߈šž‘¼“žŒŒßÖòõöö„òõöööœžŒšß݈šž‘ Œ’˜ÝÅòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— š‡š‹ Œ’˜ÝßÖÄòõööööšž”ÄòõöööœžŒšß݈šž‘ “’˜ÝÅòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— š‡š‹ “’˜ÝßÖÄòõööööšž”ÄòõöööœžŒšß݈šž‘ žŒŒžŠ“‹ÝÅòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— š‡š‹ žŒŒžŠ“‹ÝßÖÄòõööööšž”Äòõöö‚òõòõöö–™ß×ß–Œ»š™–‘š›×ß›ž‹žÑ’›–™–šŒ¤Ýš‰š‘˜šÝ¢ßÖßÖòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— œ“™’‘š†ÝßÖÄòõòõöö–™ß×ß–Œ²¸×ß›ž‹žÑŒ¨šž‘ßÖßÖòõöö„òõööö“ž†šß²¸´–““×ÖÄòõöö‚òõööš“Œšß–™ß×ß–Œ¬‹¬‹ž‹×ß›ž‹žÑŒ¨šž‘ÓßÝ™ž˜ ÝßÖßÖòõöö„òõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‹—–‘”™žŒ‹ÝßÖÄòõöö‚òõööš“Œšß–™ß×ß–Œ¬‹¬‹ž‹×ß›ž‹žÑŒ¨šž‘ÓßÝœ‘œŠŒŒ–‘ ÝßÖßÖòõöö„òõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‹—–‘”™žŒ‹œ‘œŠŒŒ–‘ÝßÖÄòõöö‚òõööš“Œšß–™ß×ß–Œ¬‹¬‹ž‹×ß›ž‹žÑŒ¨šž‘ÓßÝ™“žŒ— ÝßÖßÖòõöö„òõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‹—–‘”™žŒ‹™“žŒ—ÝßÖÄòõöö‚òõööš“Œšòõöö„òõöööžŒš¨šž‘ßÂߘš‹½žŒš¨šž‘±ž’š×ß›ž‹žÑŒ¨šž‘ßÖÄòõöööòõööö–™ß×ß–Œ»š™–‘š›×ß“š‰š“Ñœ—ž““š‘˜š¶‘™¤Ýœ— š‡š‹ ÝßÔßžŒš¨šž‘¢ßÖßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— š‡š‹ ÝßÔßžŒš¨šž‘ßÖÄòõòõööö–™ß×ß–Œ»š™–‘š›×ß“š‰š“Ñœ—ž““š‘˜š¶‘™¤Ý š‡š‹ ÝßÔßžŒš¨šž‘¢ßÖßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝ š‡š‹ ÝßÔßžŒš¨šž‘ßÖÄòõòõööö–™ß×ß–Œ»š™–‘š›×ß“š‰š“Ñœ—ž““š‘˜š¶‘™¤Ýœ— ’ž”Œ’ž‘ ÝßÔßžŒš¨šž‘¢ßÖßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ’ž”Œ’ž‘ ÝßÔßžŒš¨šž‘ßÖÄòõòõööö–™ß×ß–Œ»š™–‘š›×ß“š‰š“Ñœ—ž““š‘˜š¶‘™¤Ý ’ž”Œ’ž‘ ÝßÔßžŒš¨šž‘¢ßÖßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝ ’ž”Œ’ž‘ ÝßÔßžŒš¨šž‘ßÖÄòõöö‚òõö‚òõöòõöòõö–™ß×ß›ž‹žÑŒ²šž‘Œ°™»šž‹—ßÂÂßݲ°» ¯¶¬«°³ ½ª³³º«Ý߃ƒß›ž‹žÑŒ²šž‘Œ°™»šž‹—ßÂÂßݲ°» ­¶¹³º ½ª³³º«Ý߃ƒß›ž‹žÑŒ²šž‘Œ°™»šž‹—ßÂÂßݲ°» ·º¾» ¬·°«ÝßÙÙßÞ–Œ´–““Œ‹šž”¨šž‘×ß›ž‹žÑŒˆšž‘ßÖßÖòõö„òõööÐÐßœ—šœ”Œßž‘›ßœšŒŒšŒßž““߈šž‘ßž‹‹žœ—’š‘‹ßœ—ž““š‘˜šŒòõööˆšž‘¾‹‹žœ—’š‘‹ŒßÂߘš‹¨šž‘¾‹‹žœ—’š‘‹Œ×ß›ž‹žÑŒˆšž‘ßÖÄòõööžŒš¨šž‘ßÂߘš‹½žŒš¨šž‘±ž’š×ß›ž‹žÑŒ¨šž‘ßÖÄòõööòõöö™šžœ—×߈šž‘¾‹‹žœ—’š‘‹ß–‘߈šž‘¾‹‹žœ—’š‘‹ŒßÖòõöö„òõöööŒˆ–‹œ—ß×߈šž‘¾‹‹žœ—’š‘‹ßÖòõööö„òõööööœžŒšßÝ—šž‹šž‹ÝÅòõööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ÝßÔßžŒš¨šž‘ßÔßÝ ÝßÔ߈šž‘¾‹‹žœ—’š‘‹ßÖÄòõöööööœ‘‹–‘ŠšÄòõööööœžŒšßÝŒ–“š‘œšÝÅòõööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ÝßÔßžŒš¨šž‘ßÔßÝ ÝßÔ߈šž‘¾‹‹žœ—’š‘‹ßÖÄòõöööööœ‘‹–‘ŠšÄòõööööœžŒšßÝš™“š‡ÝÅòõööööö–™ß×ß“ž†šß“ž†š¾›Œ×ÖßÖòõöööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ÝßÔßžŒš¨šž‘ßÔßÝ ÝßÔ߈šž‘¾‹‹žœ—’š‘‹ßÖÄòõöööööœ‘‹–‘ŠšÄòõööööœžŒšßÝžœ˜ÝÅòõööööö–™ß×ß“ž†šß“ž†š¾›Œ×ÖßÖòõöööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ÝßÔßžŒš¨šž‘ßÔßÝ ÝßÔ߈šž‘¾‹‹žœ—’š‘‹ßÖÄòõöööööœ‘‹–‘ŠšÄòõööööœžŒšßÝ™ÝÅòõööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ÝßÔßžŒš¨šž‘ßÔßÝ ÝßÔ߈šž‘¾‹‹žœ—’š‘‹ßÖÄòõöööööœ‘‹–‘ŠšÄòõööööœžŒšßÝ™’•ÝÅòõööööö–™ß×ß›ž‹žÑ‰–œ‹–’Ñ–»¹“ž˜ŒßÙß“š‰š“Ñ–»¹³¾¸¬ ¯º±º«­¾«¶°±ßÖöòõöööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ÝßÔßžŒš¨šž‘ßÔßÝ ÝßÔ߈šž‘¾‹‹žœ—’š‘‹ßÖÄòõöööööœ‘‹–‘ŠšÄòõöööö›š™žŠ“‹Åòõöööööœ‘‹–‘ŠšÄöööööòõööö‚òõöö‚òõööòõöö–™ß×ß“ž†šß —žŒ¯š”×ßÝŒšœ–ž“‹† Š““š‹žœœŠžœ†ÝßÖßÙÙßÞ“ž†šß“ž†š¾›Œ×ÖßÖòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— Š““š‹žœœŠžœ† ÝßÖÄòõööòõöö–™ß×ß›–Œ‹ž‘œš¬ŽŠžš›×ß“ž†šÑ–˜–‘Óß›ž‹žÑ‰–œ‹–’Ñ–˜–‘ßÖÃßÉÊÊÌÉßÖÐÐßÍÊÉ¡Íßòõöö„òõööö–™ß×ß“ž†šß —žŒ¯š”×ßÝŒšœ–ž“‹† —šž‹šž”šÝßÖßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ›šž›Œ–“š‘œš ÝßÖÄòõöööòõööö–™ß×ß“ž†šß —žŒ¯š”×ßÝŒšœ–ž“‹† “œž“•ž’’šÝßÖßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— Œœž’“š ÝßÖÄöòõöö‚òõööòõöö–™ß×ß“ž†šß —žŒ¯š”×ßÝŒšœ–ž“‹† ™žŒ‹š“ž›ÝßÖßÖòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— Œ“š–˜—‹™—ž‘› ÝßÖÄòõööòõöö–™ß×ß“ž†šß —žŒ¯š”×ßÝŒšœ–ž“‹† “–‘˜ÝßÖßÙÙ߈šž‘¾‹‹žœ—’š‘‹ŒÑŒ–…šßÂÂßÍßÖòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— “–‘˜ ÝßÖÄòõööòõöö–™ß×ß“ž†šß —žŒ¯š”×ßÝŒšœ–ž“‹† Š““š‹›ž’ž˜šÝßÖßÖòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— Œ‹–‘˜ˆš ÝßÖÄòõöööòõöö–™ß×ß“ž†šß —žŒ¯š”×ßÝŒšœ–ž“‹† –Œ‹“›šž‹—ÝßÖßÙÙß–Œ»š™–‘š›×“ž†šÑ–‘³žŒ‹¬‹ž‘›ÖßÙÙß“ž†šÑ–‘³žŒ‹¬‹ž‘›ßÙÙßÞ“š‰š“Ñ›–š·ž›²›šòõööÙÙß×ßÞ–Œ»š™–‘š›×“ž†šÑ–‘¹–‘ž“¬‹ž‘›Ö߃ƒßÞ“ž†šÑ–‘¹–‘ž“¬‹ž‘›ßÖßÙÙß×ßÞ–Œ»š™–‘š›×“ž†šÑ–‘¼Ë»šž‹—Ö߃ƒßÞ“ž†šÑ–‘¼Ë»šž‹—ßÖßÖòõöö„òõööö–™ß×ß–Œ»š™–‘š›×ß›ž‹žÑ’›–™–šŒ¤Ýš‰š‘˜šÝ¢ßÖßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— –‘—›ÝßÖÄòõööööòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— “žŒ‹Œ‹ž‘› ÝßÖÄòõöö‚ööòõö‚òõöòõö–™ß×ß“ž†šß —žŒš”×ßÝŒšœ–ž“‹† ‘š’ž‘ž’†ÝßÖ߃ƒß–Œ»š™–‘š›×ß“ž†šÑ°²¾¼“žŒŒ¼—ž‘˜š›ßÖßÙÙß“ž†šÑ°²¾¼“žŒŒ¼—ž‘˜š›ßÖòõöö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‘š’ž‘ž’† ÝßÖÄòõöòõö–™ß×ß–Œ»š™–‘š›×ß›ž‹žÑ‰–œ‹–’Ñ–Œ¯“ž‘‹–‘˜ßÖßÙÙß›ž‹žÑ‰–œ‹–’Ñ–Œ¯“ž‘‹–‘˜ßÖòõöö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ’“ž‘‹šÝßÖÄööòõòõö–™ß×ß–Œ»š™–‘š›×ß›ž‹žÑ‰–œ‹–’Ñ–Œ»š™ŠŒ–‘˜ßÖßÙÙß›ž‹žÑ‰–œ‹–’Ñ–Œ»š™ŠŒ–‘˜ßÖòõöö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ’›š™š‘›šÝßÖÄòõòõö–™ß×ß–Œ»š™–‘š›×ß›ž‹žÑ‰–œ‹–’Ñ–Œ½’¼ž–šßÖßÙÙß›ž‹žÑ‰–œ‹–’Ñ–Œ½’¼ž–šßÙÙß×ßÞ–Œ»š™–‘š›×ß“š‰š“Ñ››ßÖ߃ƒßÞ“š‰š“Ñ››ßÖßÖòõöö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ’›ˆ‘ÝßÖÄòõòõö–™ß×ß–Œ»š™–‘š›×ß›ž‹žÑ‰–œ‹–’шžŒ«¶ßÖßÙÙß›ž‹žÑ‰–œ‹–’шžŒ«¶ßÖòõöö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‹žœ‹–œž“›š“š‹–‘ÝßÖÄòõ‚òõòõœ— Š““š‹»ž’ž˜š¼’’‘×ß›ž‹žÓß“ž†šÓß‹–’šÓ߈šž‘¼“žŒŒßÖòõ„òõö–™ß×ßÞ–Œ²¸×ß›ž‹žÑŒ¨šž‘ßÖßÖòõöö“ž†šßš‘›²¸¬‹šž”×ÖÄòõööòõö–™ß×ß–Œ´–““Œ‹šž”¨šž‘×ß›ž‹žÑŒˆšž‘ßÖßÖòõööš‹Š‘Äòõöòõö–™ß×ß“ž†šÑšŒ¤Ý“žŒ‹½Š““š‹´–““«–’šÝ¢ßÂÂß‹–’šßÖòõöö“ž†šÑšŒ¤ÝŠ““š‹¬‹šž”Ý¢ÔÔÄòõöš“Œšòõöö“ž†šÑšŒ¤ÝŠ““š‹¬‹šž”Ý¢ßÂßÎÄòõöòõö“ž†šÑšŒ¤Ý“žŒ‹½Š““š‹´–““«–’šÝ¢ßÂß‹–’šÄòõòõö–™ß×ßÞ›ž‹žÑ‰–œ‹–’°‘¸Š‘›ßÖòõöö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— —ž›“ž‘›–‘˜ÝßÖÄòõöòõöžŒŒš‹×ß›ž‹žÑž‹‹žœ”šßÂÂß“ž†šßÖÄòõö–™ß×ßÞ›ž‹žÑž‹‹žœ”š°‘¸Š‘›ßÖòõöö“ž†šÑšŒ¤Ý’–›ž–¬‹šž”Ý¢ÔÔÄòõöòõö–™ß×ß“ž†šÑšŒ¤Ý’–›ž–¬‹šž”Ý¢ßÂÂßÍßÖòõöö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ž–‘šÝßÖÄòõöòõö–™ß×ß‹–’šßÃß›ž‹žÑ‰–œ‹–’Ñ™“žŒ—º‘›«–’šßÖòõöö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ™“žŒ—ž‘˜‰š‹ÝßÖÄòõöòõö–™ß×ß‹–’šßÃß“ž†šÑ™“žŒ—º‘›«–’šßÖòõöö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— “–‘›™–šÝßÖÄòõöòõö–™ß×ß‹–’šßÃß›ž‹žÑ‰–œ‹–’Ñœ‘œŠŒŒ–‘º‘›«–’šßÖòõöö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— œ‘œŠŒŒ–‘‰š‹ÝßÖÄòõöòõö–™ß×ß‹–’šßÃß“ž†šÑœ‘œŠŒŒ–‘º‘›«–’šßÖòõöö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— Œ“ˆŠ‹ŒŠšÝßÖÄòõöòõöòõö–™ß×ß“ž†šÑšŒ¤ÝŠ““š‹¬‹šž”Ý¢ßÂÂßÍßßÖòõö„òõöö–™ß×ß–Œ»š™–‘š›×ß›ž‹žÑ’›–™–šŒ¤Ý—šž›Œ—‹Ý¢ßÖßÖòõöö„òõööö™šžœ—ß×ß”–““»ž‹žß–‘ß“ž†šÑ”–““Œ«—–Œ³–™šßÖòõööö„òõöööö–™ß×ß”–““»ž‹žÑ‹–’šßÞÂß‹–’šßÖòõöööööœ‘‹–‘ŠšÄòõöööööòõöööö–™ß×ßÞ–Œ»š™–‘š›×ß›ž‹žÑ’›–™–šŒ¤Ý—šž›Œ—‹Ý¢ßÖßÖòõöööööœ‘‹–‘ŠšÄòõöööööòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ž““ÝßÖÄòõööö‚òõöö‚òõòõöö–™ß×߈šž‘¼“žŒŒßÂÂß݈šž‘ Œ‘–šÝßÖòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— œ““ž‹šž“›ž’ž˜šÝßÖÄòõö‚òõöòõö–™ß×߈šž‘¼“žŒŒßÂÂß݈šž‘ –Œ‹“ÝßÖòõö„òõöö–™ß×ß–Œ›š™–‘š›×ß›ž‹žÑ‰–œ‹–’Ñž‹‹žœ”š»ž‹žßÖßÙÙß–Œ›š™–‘š›×ß›ž‹žÑ‰–œ‹–’Ñž‹‹žœ”š»ž‹ž¤“ž†šÑ˜Š–›¢ßÖßÖòõöö„òõööö–™ß×ß–Œ»š™–‘š›ß×ß›ž‹žÑ‰–œ‹–’Ñž‹‹žœ”š»ž‹ž¤“ž†šÑ˜Š–›¢Ñ–Œ¯–’ž†ßÖßÖòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ™žŒ‹ŒˆžÝßÖÄòõöö‚òõö‚òõöš“Œšß–™ß×߈šž‘¼“žŒŒßÂÂß݈šž‘ Œ—‹˜Š‘ÝßÖòõö„òõöö–™ß×ß–Œ¬Š¬‹×ß›ž‹žÑŒ¨šž‘ÓßÝž‘˜šÝßÖßÙÙß–Œ»š™–‘š›×ß“ž†šÑ‹—½žš“ŒßÖßÖòõöö„òõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‹—žš“ŒÝßÖÄòõööö“ž†šÑ‹—½žš“ŒßÂߊ‘›š™–‘š›Äòõöö‚òõö‚òõöòõö–™ß×ß›ž‹žÑ‰–œ‹–’Ñ–»¹“ž˜Œ«–’šßÂÂß‹–’šßÖòõö„òõöö–™ß×ß›ž‹žÑ‰–œ‹–’Ñ–»¹“ž˜ŒßÙß“š‰š“Ñ–»¹³¾¸¬ ¯º±º«­¾«¶°±ßÖòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‡ž†‰–Œ–‘ÝßÖÄßòõö‚òõöòõö–™ß×ß›ž‹žÑž‹‹žœ”š¶‘³žŒ‹¬‹ž‘›ßÙÙßÞ›ž‹žÑž‹‹žœ”šß —žŒ¯š”×ßÝŒšœ–ž“‹† ™–‘ž“Œ‹ž‘›ÝßÖßÖòõö„òõöö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— “žŒ‹Œ‹ž‘›‰š‹ÝßÖÄòõö‚òõöš“Œšß–™ß×ß›ž‹žÑž‹‹žœ”š¬‹ž‘œšßÂÂßÝœŠœ—ÝßÖòõö„òõöö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— œŠœ—Œ—‹ÝßÖÄòõö‚òõöš“Œšß–™ß×ß›ž‹žÑž‹‹žœ”š¬‹ž‘œšßÂÂßÝ‘šÝßÖòõö„òõöö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‘šŒ—‹ÝßÖÄòõöö–™ß×߈šž‘¼“žŒŒßÂÂß݈šž‘ Œ‘–šÝßÖòõöö„òõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— –‘‰–Œ–“šÝßÖÄòõöö‚òõö‚òõöòõö–™ß×߈šž‘¼“žŒŒßÂÂß݈šž‘ Œ‘–šÝßÖòõö„òõöö–™ß×ß–Œ»š™–‘š›×ß›ž‹žÑ’›–™–šŒ¤Ý‘šŒ—‹”–““Ý¢ßÖßÖòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ˜—–““–šÝßÖÄöòõö‚òõöòõö–™ß×ß–Œ¬Š¬‹×ß›ž‹žÑŒ¨šž‘ÓßÝ Œ–“š‘œš ÝßÖßÖòõöö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— Œ‹šž“‹—ÝßÖÄßòõ‚òõòõœ— Š‘›“ž†š›×ß›ž‹žßÖòõ„òõö“ž†šßÂß›ž‹žÑ“ž†šÄòõöòõö–™ß×ß“ž†šÑˆžŒ¾“–‰š¾‹²ž‹œ—¬‹ž‹ßÖòõö„òõöö›šž‹—ŒßÂß“ž†šÑšŒ¤ßÝ›šž‹—ŒÝߢÄòõöö”–““ŒßÂß“ž†šÑšŒ¤ßÝ”–““ŒÝߢÄòõòõöö”›ž‹–ßÂßÎÏÏÏÏÏÏÄòõöö–™ß×ß›šž‹—ŒßÁßÏßÖòõööö”›ž‹–ßÂß”–““ŒßÐß›šž‹—ŒÄòõööòõöö–™ß×ß”›ž‹–ßÁÂßÊÑÏßÙÙß”–““ŒßÁÂßÊÑÏßÖòõöö„òõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— Œ‹ž“ž†šÝßÖÄòõöö‚òõööòõöö–™ß×ß›šž‹—ŒßÂÂßÏßÙÙߘš‹«–’š¯žŒŒš›×ÖßÁßÊßÕßÉÏßÕßÎÏÏÏßÖòõööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ™“žˆ“šŒŒÝßÖÄòõööòõööòõöö–™ß×ß“ž†šÑŒœšßÁßÏßÖòõöö„òõöööŒˆ–‹œ—ß×ß“š‰š“јž’š«†šßÖòõööö„òõööööœžŒšßÝ›’ÝÅòõööööö–™ß×ß›ž‹žÑ“žœšßÃßÌßÙÙß“š‰š“Ñ“žœš’š‘‹¤Ýž““ݢь–…šßÁßÌßÖòõöööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‰–œ‹ ›’ÝßÖÄòõöööööšž”Äòõööö‚òõöö‚òõö‚òõ‚òõòõòõœ— Š‘›ˆ–‘×ß›ž‹žßÖòõ„òõö–™ß×ßÞ›ž‹žÑˆ–‘‘šßÖòõööš‹Š‘Äòõööòõö“ž†šßÂß›ž‹žÑ“ž†šÄòõö–™ß×ß“ž†šÑˆžŒ¾“–‰š¾‹²ž‹œ—¬‹ž‹ßÖòõö„òõööŒˆ–‹œ—ß×ß“š‰š“јž’š«†šßÖòõöö„òõöööœžŒšß݈žÝÅòõöööö–™ß×ß“š‰š“Ñ—ž›œš²›šßÖòõöööö„òõööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‹šž’“ž†š —œÝßÖÄòõööööö–™ß×ß›ž‹žÑ“žœšßÂÂßÏßÖòõöööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ’‰ ‹—œÝßÖÄòõöööö‚òõööööš“Œšòõöööö„òõööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‹šž’“ž†šÝßÖÄòõööööö–™ß×ß›ž‹žÑ“žœšßÂÂßÏßÖòõöööööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ’‰ ‹›’ÝßÖÄòõöööö‚òõööööšž”ÄòõöööœžŒšßÝŒžÝÅòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‰–œ‹ ŒžÝßÖÄòõööööšž”ÄòõöööœžŒšßÝŒ›ÝÅòõöööö“ž†šßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‰–œ‹ Œ›ÝßÖÄòõööööšž”ÄòõöööœžŒšßÝœ‹™ÝÅòõöööœžŒšßÝ›’ÝÅòõöööœžŒšßÝ›’ÝÅòõöööœžŒšßÝ—œÝÅòõöööœžŒšßÝ”‹—ÝÅòõööööšž”Äòõööö›š™žŠ“‹Åòõööööšž”Äòõöö‚òõö‚òõ‚òõòõÐÕòõœ—žßÕ’›±ž’šŒ¤²°» ±ª²¢ßÂòõ„òõöݲ°» ª±´±°¨±ÝÓòõöݲ°» ¯¶¬«°³ ½ª³³º«ÝÓòõöݲ°» ­¶¹³º ½ª³³º«ÝÓòõöݲ°» ¸­º±¾»ºÝÓòõöݲ°» ¸­º±¾»º ¬¯³¾¬·ÝÓòõöݲ°» ¯­°µº¼«¶³ºÝÓòõöݲ°» ¯­°µº¼«¶³º ¬¯³¾¬·ÝÓòõöݲ°» ²º³ººÝÓòõöݲ°» ·º¾» ¬·°«ÝÓòõöݲ°» ¼­ª¬·ÝÓòõöݲ°» «º³º¹­¾¸ÝÓòõöݲ°» ¹¾³³¶±¸ÝÓòõöݲ°» ¬ª¶¼¶»ºÝÓòõöݲ°» «­¶¸¸º­ ·ª­«ÝÓòõöݲ°» º§¯³°¬¶©ºÝÓòõöݲ°» ¶²¯¾¼«ÝÓòõ‚ÄòõòõŒ‹ž‹–œßœ‘Œ‹ßœ—žßÕ˜ ·–‹³œ±ž’šŒ¤¢ßÂòõ„òõöÝ‘‘šÝÓòõöÝ—š“’š‹ÝÓòõöÝ—šž›ÝÓòõöÝ‘šœ”ÝÓòõöÝ‹Œ ŠšÝÓòõöÝ‹Œ “ˆšÝÓòõöÝ–˜—‹ ž’ ŠšÝÓòõöÝ“š™‹ ž’ ŠšÝÓòõöÝ–˜—‹ ž’ “ˆšÝÓòõöÝ“š™‹ ž’ “ˆšÝÓòõöÝ–˜—‹ —ž‘›ÝÓòõöÝ“š™‹ —ž‘›ÝÓòõöÝ–˜—‹ “š˜ ŠšÝÓòõöÝ“š™‹ “š˜ ŠšÝÓòõöÝ–˜—‹ “š˜ “ˆšÝÓòõöÝ“š™‹ “š˜ “ˆšÝÓòõöÝ–˜—‹ ™‹ÝÓòõöÝ“š™‹ ™‹ÝÓòõöݘŠ‘ÝÓòõ‚ÄòõòõÕÐòõòõÐÐßÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂòõÐÐß¼ž““žœ”ß™Š‘œ‹–‘Œòõòõ“ž†š»ž’ž˜š›×ßš¶‘™“–œ‹Óßž‹‹žœ”šÓß–»ž’ž˜šÓߌ²šž‘Œ°™»šž‹—Óߌ¨šž‘Óߌ·–‹³œßÖòõ„òõöŒš“™ßš‘›‘×Ý›–Œœ‘‘šœ‹ÝÖÄòõö–™ß×ß–Œ›š™–‘š›×ßž‹‹žœ”šßÖßÖòõööž‹‹žœ”šßš‘›‘×Ý›–Œœ‘‘šœ‹ÝÖÄòõöòõöˆž–‹ßÑÏÊÄòõö¨ž–‹«–““¬“ˆ¯œšŒŒ¾““ˆš›×ÖÄòõòõö›ž‹žßÂߌžˆ‘Œ‹Šœ‹×ÖÄòõòõö›ž‹žÑ‰–œ‹–’ßÂߌš“™Äòõö›ž‹žÑš¶‘™“–œ‹ßÂßš¶‘™“–œ‹Äòõö›ž‹žÑž‹‹žœ”šßÂßž‹‹žœ”šÄòõö›ž‹žÑ–»ž’ž˜šßÂß–»ž’ž˜šÄòõö›ž‹žÑŒ²šž‘Œ°™»šž‹—ßÂߌ²šž‘Œ°™»šž‹—Äòõö›ž‹žÑŒ¨šž‘ßÂߌ¨šž‘Äòõö›ž‹žÑŒ·–‹³œßÂߌ·–‹³œÄòõöòõö›ž‹žÑ‰–œ‹–’°‘¸Š‘›ßÂß›ž‹žÑ‰–œ‹–’ß–Œ°‘¸Š‘›×ÖÄòõöòõö–™ß×ß–Œ¯“ž†š×ßž‹‹žœ”šßÖßÖòõö„òõöö›ž‹žÑž‹‹žœ”š¶‘³žŒ‹¬‹ž‘›ßÂß–Œ»š™–‘š›×ß›ž‹žÑž‹‹žœ”šÑ“žŒ‹¬‹ž‘›ßÖÄòõöö›ž‹žÑž‹‹žœ”š°‘¸Š‘›ßÂß›ž‹žÑž‹‹žœ”šß–Œ°‘¸Š‘›×ÖÄòõöö›ž‹žÑž‹‹žœ”š¬‹ž‘œšßÂß›ž‹žÑž‹‹žœ”šß˜š‹¬‹ž‘œš×ÖÄòõö‚òõöš“Œšòõö„òõöö›ž‹žÑž‹‹žœ”š¶‘³žŒ‹¬‹ž‘›ßÂß™ž“ŒšÄòõöö›ž‹žÑž‹‹žœ”š°‘¸Š‘›ßÂß™ž“ŒšÄòõöö›ž‹žÑž‹‹žœ”š¬‹ž‘œšßÂßÝŒ‹ž‘›ÝÄòõö‚òõöòõö›²–ŒŒ–‘¼ž““žœ”×Ý“ž†š»ž’ž˜š›ÝÓß›ž‹žÖÄòõ‚òõòõ“ž†š´–““š›×ßš¶‘™“–œ‹Óßž‹‹žœ”šÓß–»ž’ž˜šÓߌ²šž‘Œ°™»šž‹—Óߌ¨šž‘Óߌ¯–’ž†¨šž‘Óߌ·–‹³œÓß’›–™–šŒßÖòõ„òõöŒš“™Ñž‘˜“šŒ°‘»šž‹—ßÂߌš“™ß˜š‹¯“ž†š¾‘˜“šŒ×ÖÄòõö–™ß×ß–Œ›š™–‘š›×ßž‹‹žœ”šßÖßÖòõööž‹‹žœ”šÑž‘˜“šŒ°‘´–““ßÂßž‹‹žœ”šß˜š‹¯“ž†š¾‘˜“šŒ×ÖÄòõöòõöŒš“™ßš‘›‘×Ý›–Œœ‘‘šœ‹ÝÖÄòõòõö›ž‹žßÂߌžˆ‘Œ‹Šœ‹×ÖÄòõòõö›ž‹žÑ‰–œ‹–’ßÂߌš“™Äòõö›ž‹žÑš¶‘™“–œ‹ßÂßš¶‘™“–œ‹Äòõö›ž‹žÑž‹‹žœ”šßÂßž‹‹žœ”šÄòõö›ž‹žÑ–»ž’ž˜šßÂß–»ž’ž˜šÄòõö›ž‹žÑŒ²šž‘Œ°™»šž‹—ßÂߌ²šž‘Œ°™»šž‹—Äòõö›ž‹žÑŒ¨šž‘ßÂߌ¨šž‘Äòõö›ž‹žÑŒ¯–’ž†¨šž‘ßÂߌ¯–’ž†¨šž‘Äòõö›ž‹žÑŒ·–‹³œßÂߌ·–‹³œÄòõö›ž‹žÑ‹–’šßÂߘš‹‹–’š×ÖÄòõö›ž‹žÑ’›–™–šŒßÂß’›–™–šŒÄòõöòõö›ž‹žÑ‰–œ‹–’°‘¸Š‘›ßÂß›ž‹žÑ‰–œ‹–’ß–Œ°‘¸Š‘›×ÖÄòõöòõö–™ß×ß–Œ¯“ž†š×ßž‹‹žœ”šßÖßÖòõö„òõöö›ž‹žÑž‹‹žœ”š¶‘³žŒ‹¬‹ž‘›ßÂß–Œ»š™–‘š›×ß›ž‹žÑž‹‹žœ”šÑ“žŒ‹¬‹ž‘›ßÖÄòõöö›ž‹žÑž‹‹žœ”š°‘¸Š‘›ßÂß›ž‹žÑž‹‹žœ”šß–Œ°‘¸Š‘›×ÖÄòõöö›ž‹žÑž‹‹žœ”š¬‹ž‘œšßÂß›ž‹žÑž‹‹žœ”šß˜š‹¬‹ž‘œš×ÖÄòõö‚òõöš“Œšòõö„òõöö›ž‹žÑž‹‹žœ”š¶‘³žŒ‹¬‹ž‘›ßÂß™ž“ŒšÄòõöö›ž‹žÑž‹‹žœ”š°‘¸Š‘›ßÂß™ž“ŒšÄòõöö›ž‹žÑž‹‹žœ”š¬‹ž‘œšßÂßÝŒ‹ž‘›ÝÄòõö‚òõòõöˆž–‹¾‘›¯œšŒŒ¯“ž†š´–““š›¼ž““žœ”×ß›ž‹žßÖÄöòõöòõö–™ß×ß–Œ»š™–‘š›×ßž‹‹žœ”šßÖßÙÙß–Œ­šž““†¾“–‰š×ßž‹‹žœ”šßÖßÖòõööž‹‹žœ”šÑ”–““Œ«—–Œ³–™š¤ž‹‹žœ”šÑ”–““Œ«—–Œ³–™šÑŒ–…š¢ßÂß›ž‹žÄöòõòõö›ž‹žÑž‹‹žœ”šß‘‹–™†×ßÝ“ž†š´–““š›¼—ž““š‘˜šŒ¯œšŒŒš›ÝßÖÄòõ‚òõòõòõ‰š—–œ“š´–““š›×߈‘šÓ߉š—–œ“šÓßš¶‘™“–œ‹Óßž‹‹žœ”šÓß–»ž’ž˜šÓߌ²šž‘Œ°™»šž‹—Óߌ¨šž‘ßÖòõ„òõö›ž‹žßÂߌžˆ‘Œ‹Šœ‹×ÖÄòõòõö›ž‹žÑ‰š—–œ“šßÂ߉š—–œ“šÄòõö›ž‹žÑ‰–œ‹–’ßÂ߈‘šÄòõö›ž‹žÑš¶‘™“–œ‹ßÂßš¶‘™“–œ‹Äòõö›ž‹žÑž‹‹žœ”šßÂßž‹‹žœ”šÄòõö›ž‹žÑ–»ž’ž˜šßÂß–»ž’ž˜šÄòõö›ž‹žÑŒ²šž‘Œ°™»šž‹—ßÂߌ²šž‘Œ°™»šž‹—Äòõö›ž‹žÑŒ¨šž‘ßÂߌ¨šž‘Äòõö›ž‹žÑ‹–’šßÂߘš‹‹–’š×ÖÄòõöòõ‚òõòõòõˆž–‹¾‘›¯œšŒŒ¯“ž†š´–““š›¼ž““žœ”×ß›ž‹žßÖòõ„òõö–™ß×ß–Œ›š™–‘š›×ß›ž‹žÑž‹‹žœ”šßÖßÖòõöö›ž‹žÑž‹‹žœ”šßš‘›‘×Ý›–Œœ‘‘šœ‹ÝÖÄòõöòõöŒš“™ÑœšŒŒ–‘˜´–““š›¼—ž““š‘˜šŒßÂß‹ŠšÄòõöˆž–‹ßÏÑÏÊÄòõö¨ž–‹«–““¬“ˆ¯œšŒŒ¾““ˆš›×ÖÄòõöòõö›²–ŒŒ–‘¼ž““žœ”×ßÝ“ž†š´–““š›ÝÓß›ž‹žßÖÄòõöŒš“™ÑœšŒŒ–‘˜´–““š›¼—ž““š‘˜šŒßÂߊ‘›š™–‘š›Äòõ‚òõòõ“ž†š¾ŒŒ–Œ‹×Öòõ„òõö›ž‹žßÂߌžˆ‘Œ‹Šœ‹×ÖÄòõòõö›ž‹žÑ“ž†šßÂߌš“™Äòõòõö›²–ŒŒ–‘¼ž““žœ”×ßÝ“ž†š¾ŒŒ–Œ‹ÝÓß›ž‹žßÖÄòõ‚òõòõòõŠŒš·ž›–‘‹×ß—ž›–‘‹«†šßÖòõ„òõöˆž–‹ßÑÏÊÄòõö¨ž–‹«–““¬“ˆ¯œšŒŒ¾““ˆš›×ÖÄòõòõö›ž‹žßÂߌžˆ‘Œ‹Šœ‹×ÖÄòõòõö›ž‹žÑ“ž†šßÂߌš“™Äòõö›ž‹žÑ—ž›–‘‹«†šßÂß—ž›–‘‹«†šÄòõòõö›²–ŒŒ–‘¼ž““žœ”×ßÝ“ž†š·ž›–‘‹ÝÓß›ž‹žßÖÄòõ‚òõòõòõŠ‘›½š˜–‘×Öòõ„òõö›²–ŒŒ–‘¼ž““žœ”×ßÝŠ‘›½š˜–‘ÝßÖÄòõ‚òõòõŠ‘›º‘›×߈–‘‘šßÖòõ„òõö›ž‹žßÂߌžˆ‘Œ‹Šœ‹×ÖÄòõöòõö–™ß×ß“š‰š“Ñ‹šž’½žŒš›ßÖòõö„òõöö‹šž’ßÂßÝž““–šŒÝÄòõöö™ß×ß–‘›š‡ßÂßÏÄß–‘›š‡ßÃß“š‰š“Ñ“žœš’š‘‹¤‹šž’¢ÑŒ–…šÄß–‘›š‡ÔÔßÖòõöö„òõööö›ž‹žÑ“ž†šßÂß“š‰š“Ñ“žœš’š‘‹¤‹šž’¢¤–‘›š‡¢Äòõööö›ž‹žÑˆ–‘‘šßÂß׋šž’ßÂÂ߈–‘‘šÖÄòõööö›ž‹žÑ“žœšßÂß–‘›š‡Äòõòõööö›²–ŒŒ–‘¼ž““žœ”×ßÝŠ‘›º‘›ÝÓß›ž‹žßÖÄòõöö‚òõöö‹šž’ßÂßÝž‡–ŒÝÄòõöö™ß×ß–‘›š‡ßÂßÏÄß–‘›š‡ßÃß“š‰š“Ñ“žœš’š‘‹¤‹šž’¢ÑŒ–…šÄß–‘›š‡ÔÔßÖòõöö„òõööö›ž‹žÑ“ž†šßÂß“š‰š“Ñ“žœš’š‘‹¤‹šž’¢¤–‘›š‡¢Äòõööö›ž‹žÑˆ–‘‘šßÂß׋šž’ßÂÂ߈–‘‘šÖÄòõööö›ž‹žÑ“žœšßÂß–‘›š‡Äòõòõööö›²–ŒŒ–‘¼ž““žœ”×ßÝŠ‘›º‘›ÝÓß›ž‹žßÖÄòõöö‚òõö‚òõöš“Œšòõö„òõöö™ß×ß–‘›š‡ßÂßÏÄß–‘›š‡ßÃß“š‰š“Ñ“žœš’š‘‹¤Ýž““ݢь–…šÄß–‘›š‡ÔÔßÖòõöö„òõööö›ž‹žÑ“ž†šßÂß“š‰š“Ñ“žœš’š‘‹¤Ýž““Ý¢¤–‘›š‡¢Äòõööö›ž‹žÑˆ–‘‘šßÂß×–Œ›š™–‘š›×߈–‘‘šÖßÙÙß×›ž‹žÑ“ž†šßÂÂ߈–‘‘šÖÖÄòõööö›ž‹žÑ“žœšßÂß–‘›š‡Äòõòõööö›²–ŒŒ–‘¼ž““žœ”×ßÝŠ‘›º‘›ÝÓß›ž‹žßÖÄòõöö‚ööòõö‚òõ‚òõòõ›²–ŒŒ–‘¼ž““žœ”×ßœž““žœ”Óß›ž‹žßÖòõ„òõö–™ß×ßÞ’ž†¯œšŒŒ¼—ž““š‘˜šŒ×ÖßÖòõööš‹Š‘Äòõöòõö–™ß×ߘš‹»‰ž¶‘‹×ßÝ›–Œž“š œ—ž““š‘˜šŒÝßÖßÁßÏßÖòõööš‹Š‘Äòõöòõö–™ß×ßÞ–Œ»š™–‘š›×ß“š‰š“Ñ’–ŒŒ–‘¼ž““žœ”Œ¤œž““žœ”¢ßÖßÖòõööš‹Š‘Äòõöòõö–™ß×ß–Œ»š™–‘š›×ß›ž‹žßÖßÖßòõö„òõöö™ß×ß–ßÂßÏÄß–ßÃß“š‰š“Ñ’–ŒŒ–‘¼ž““žœ”Œ¤œž““žœ”¢ÑŒ–…šÄß–ÔÔßÖòõööö‹—šž›ß¤¤“š‰š“Ñ’–ŒŒ–‘¼ž““žœ”Œ¤œž““žœ”¢¤–¢¢¢×ß›ž‹žßÖÄòõö‚òõöš“Œšßòõö„òõöö™ß×ß–ßÂßÏÄß–ßÃß“š‰š“Ñ’–ŒŒ–‘¼ž““žœ”Œ¤œž““žœ”¢ÑŒ–…šÄß–ÔÔßÖòõööö‹—šž›ß¤¤“š‰š“Ñ’–ŒŒ–‘¼ž““žœ”Œ¤œž““žœ”¢¤–¢¢¢×ÖÄòõö‚òõ‚òõòõ’‘–‹¬–‘‹»–Œ‹ž‘œš×Öòõ„òõö“š‰š“ßš‘›‘×ßݘž’š š‘›š›ÝßÖÄòõöŒš“™ßš‘›‘×ßÝŒžˆ‘š› “ž†šÝßÖÄòõöŒš“™ßš‘›‘×ßÝ›šž‹—ÝßÖÄòõöŒš“™ßš‘›‘×ßÝ›–Œœ‘‘šœ‹ÝßÖÄòõöòõöˆ—–“š×ÎÖòõö„òõööŒš“™ßˆž–‹‹–““×ÝŒ–‘‹ š˜–‘ÝÖÄòõööòõööŒš“™ÑŒ–‘‹»–Œ‹«—–Œ¬–‘‹ßÂßÏÄòõööŒš“™ß‹—šž›ß’‘–‹¬–‘‹«–’š×ÖÄòõööŒš“™ß’‘–‹¬–‘˜“š¬–‘‹»–Œ‹ž‘œš×ÖÄòõööòõöö–™ß×ߌš“™ß —žŒš”×ßÝŒšœ–ž“‹† ’žž‹—‘ÝßÖßÖòõöööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— ’žž‹—‘ ÝÓß–‘‹×ߌš“™ÑŒ–‘‹»–Œ‹«—–Œ¬–‘‹ÐÎÍÖßÖÄòõööòõöö–™ß×ߌš“™ß —žŒš”×ßÝŒšœ–ž“‹† “–˜—‹ˆš–˜—‹ÝßÖßÖòõöööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— “–˜—‹ˆš–˜—‹ ÝÓß–‘‹×Œš“™ÑŒ–‘‹»–Œ‹«—–Œ¬–‘‹ÐÎÍÖßÖÄòõö‚òõ‚òõòõ’‘–‹¬–‘˜“š¬–‘‹»–Œ‹ž‘œš×Öòõ„òõö“š‰š“ßš‘›‘×ßݘž’š š‘›š›ÝßÖÄòõöŒš“™ßš‘›‘×ßÝŒžˆ‘š› “ž†šÝßÖÄòõöŒš“™ßš‘›‘×ßÝ›šž‹—ÝßÖÄòõöŒš“™ßš‘›‘×ßÝ›–Œœ‘‘šœ‹ÝßÖÄòõöŒš“™ßš‘›‘×ßÝŒ–‘‹ š‘›ÝßÖÄòõöòõöš‰ŒßÂߌš“™Ñ–˜–‘Äòõöˆ—–“š×ÎÖòõö„òõööˆž–‹ßÑÎÄòõòõööŒš“™ÑŒ–‘‹»–Œ‹«—–Œ¬–‘‹ßÔÂß›–Œ‹ž‘œš×ߌš“™Ñ–˜–‘Óßš‰ŒßÖÄòõööš‰ŒßÂߌš“™Ñ–˜–‘Äòõö‚òõ‚òõòõ’‘–‹¬–‘‹«–’š×Öòõ„òõö“š‰š“ßš‘›‘×ßݘž’š š‘›š›ÝßÖÄòõöŒš“™ßš‘›‘×ßÝŒžˆ‘š› “ž†šÝßÖÄòõöŒš“™ßš‘›‘×ßÝ›šž‹—ÝßÖÄòõöŒš“™ßš‘›‘×ßÝ›–Œœ‘‘šœ‹ÝßÖÄòõòõöŒ‹ž‹«–’šßÂߘš‹«–’š×ÖÄòõöòõöŒš“™ßˆž–‹‹–““×ßÝŒ–‘‹ š‘›ÝßÖÄòõöòõöŒ–‘‹«–’šßÂß–‘‹×ߘš‹«–’š×ÖßÒߌ‹ž‹«–’šßÖÄòõöŒš“™ß–‘œ¯“ž†š¬‹ž‹×ßÝŒ–‘‹‹–’šÝÓߌ–‘‹«–’šßÖÄòõöòõöÐЋ‹ž“ßÂߌš“™ß˜š‹¯“ž†š¬‹ž‹×ßÝŒ–‘‹‹–’šÝßÖÄòõöÐЖ‘‹“‘×ßݬ–‘‹«–’šÅßÝÓߌ–‘‹«–’šÓßÝß«‹ž“ÅÝÓß‹‹ž“ßÖÄòõ‚öòõòõ’‘–‹¹ž““»–Œ‹ž‘œš×Öòõ„òõöŒš“™ßš‘›‘×Ý›–Œœ‘‘šœ‹ÝÖÄòõòõöŒš“™ÑšŒ¤Ý’–›ž–¬‹šž”Ý¢ßÂßÏÄòõöòõöˆ—–“š×ÎÖòõö„òõöö–™ß×ßÞ–Œ¾“–‰š×ߌš“™ßÖßÖòõöö„òõöööŒš“™ßˆž–‹‹–““×ÝŒžˆ‘š› “ž†šÝÖÄòõöööœ‘‹–‘ŠšÄòõöö‚òõööòõöö–™ß×ßÞŒš“™ß–Œ°‘¸Š‘›×ÖßÖòõöö„òõöööŒš“™ÑšŒ¤Ý’–›ž–¬‹šž”Ý¢ßÂßÏÄòõööö—–˜—šŒ‹¯–‘‹ßÂߌš“™Ñ–˜–‘¤Í¢Äòõöööˆ—–“š×ßÞŒš“™ß–Œ°‘¸Š‘›×ÖßÙÙß–Œ¾“–‰š×ߌš“™ßÖßÖòõööö„òõöööö–™ß×ߌš“™Ñ–˜–‘¤Í¢ßÁß—–˜—šŒ‹¯–‘‹ßÖòõööööö—–˜—šŒ‹¯–‘‹ßÂߌš“™Ñ–˜–‘¤Í¢Äòõööööˆž–‹ßÑÏÊÄòõööö‚òõöööŒš“™ÑšŒ¤Ý’–›ž–¬‹šž”Ý¢ßÂßÏÄòõòõööö™ž““›–Œ‹ßÂß—–˜—šŒ‹¯–‘‹ßÒߌš“™Ñ–˜–‘¤Í¢Äòõööö–™ß×ß™ž““›–Œ‹ßÃßÏßÖòõöööö™ž““›–Œ‹ßÂßÏÄòõöööòõööö–™ß×ß™ž““›–Œ‹ßÐßÎÍÑÏßÁßÎÊßÙÙß–Œ¾“–‰š×ߌš“™ßÖßÖòõööööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— žŒš•Š’ÝßÖÄòõòõööö–™ß×ß™ž““›–Œ‹ßÐßÎÍÑÏßÁßÌÏßÙÙßÞ–Œ¾“–‰š×ߌš“™ßÖßÖòõööööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— ˜›†šÝßÖÄòõöööòõöööÐЖ‘‹“‘×ßݦŠß™š““ßÝÓß™ž““›–Œ‹ßÐßÎÍÑÏÓßÝß™šš‹ÝÖÄòõöö‚òõööˆž–‹ßÑÏÊÄòõö‚òõ‚òõòõòõÐÐß«°»°Åß²ž”šß‹—–Œßœ—ž““š‘˜šß—žš‘ßž™‹šßˆ–‘‘–‘˜ßˆ—–“šßš–‘˜ß‹—šß“žŒ‹ßšŒ‘ߑ߆Šß‹šž’òõ“žŒ‹²ž‘¬»×Öòõ„òõö–™ß×ßÞ’ž†¯œšŒŒ¼—ž““š‘˜šŒ×ÖßÖòõööš‹Š‘Äòõòõö–™ß×ßÞŒš“™ÑˆžŒ¾“–‰š¾‹²ž‹œ—¬‹ž‹ßÖòõööš‹Š‘Äòõöòõö–™ß×ߌš“™Ñ‹šž’”–““Œ«—–Œ­Š‘›ßÁßÏßÖòõööš‹Š‘ÄòõöòõöŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— “žŒ‹’ž‘Œ‹ž‘›–‘˜ÝßÖÄòõ‚òõòõòõ’‘–‹½’ªŒš×Öòõ„òõöŒš“™ßš‘›‘×ßÝ›–Œœ‘‘šœ‹ÝßÖÄòõöòõö™ß×ßÄÄßÖòõö„òõööšŒŠ“‹ßÂߌš“™ßˆž–‹‹–““ ž‘† š‹Š‘×ßÝ’ “ž‘‹š›ÝÓßÝ’ ›š™ŠŒš›ÝßÖÄòõööòõöö–™ß×ßÞ–Œ»š™–‘š›×ßšŒŠ“‹ßÖßÖòõöööœ‘‹–‘ŠšÄòõöööòõöö–™ß×ßšŒŠ“‹ßÂÂßÝ’ “ž‘‹š›ÝßÖòõöö„òõöööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— Œž‹šŠÝßÖÄòõöö‚òõööš“Œšß–™ß×ßšŒŠ“‹ßÂÂßÝ’ ›š™ŠŒš›ÝßÖòõöööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— —šÝßÖÄòõö‚òõ‚òõòõòõ’‘–‹³–‰š«–’š×Öòõ„òõö™ß×ßÄÄßÖòõö„òõööŒš“™ßˆž–‹‹–““ß×ßÝŒžˆ‘š› “ž†šÝßÖÄòõööòõööŒš“™ß‹—šž›ßŒŠ‰–‰ž“–Œ‹¼—ž““š‘˜š×ÖÄòõö‚òõ‚òõòõŒŠ‰–‰ž“–Œ‹¼—ž““š‘˜š×Öòõ„òõöŒš“™ßš‘›‘×Ý›šž‹—ÝÖÄòõöŒš“™ßš‘›‘×Ý›–Œœ‘‘šœ‹ÝÖÄòõöòõöˆž–‹ßÊßÕßÉÏÄòõöòõöŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— ŒŠ‰–‰ž“–Œ‹ÝßÖÄòõ‚òõòõòõ’‘–‹¬‹šž”Œ×Öòõ„òõöŒš“™ßš‘›‘ß×ßÝ›–Œœ‘‘šœ‹ÝßÖÄòõòõöŒš“™ÑšŒ¤Ýž–Œ‹–”š¬‹šž”Ý¢ßÂßÏÄòõöŒš“™ÑšŒ¤Ý’š“šš´–““¬‹šž”Ý¢ßÂßÏÄòõöŒš“™ÑšŒ¤ÝŒ—–š“›´–““¬‹šž”Ý¢ßÂßÏÄòõòõöŒš“™ß‹—šž›ß’‘–‹²–Œœ×ÖÄòõòõö™ß×ßÄÄßÖòõö„òõööŒš“™ßˆž–‹‹–““ß×ßÝ›šž‹—ÝßÖÄòõööòõööŒš“™ÑšŒ¤Ýž–Œ‹–”š¬‹šž”Ý¢ßÂßÏÄòõööŒš“™ÑšŒ¤Ý’š“šš´–““¬‹šž”Ý¢ßÂßÏÄòõööŒš“™ÑšŒ¤ÝŒ—–š“›´–““¬‹šž”Ý¢ßÂßÏÄòõö‚òõ‚òõòõòõ’‘–‹²–Œœ×Öòõ„òõöŒš“™ß‹—šž›ß’‘–‹²–Œœ¬–‘˜“š×ßÝ›šŒ‹†š› š‡“Œ–‰šÝßÖÄòõöŒš“™ß‹—šž›ß’‘–‹²–Œœ¬–‘˜“š×ßÝš˜–‘ ž–Œ‹–”šÝßÖÄòõöŒš“™ß‹—šž›ß’‘–‹²–Œœ¬–‘˜“š×ßÝ›šŒ‹†š› œžÝßÖÄòõöŒš“™ß‹—šž›ß’‘–‹²–Œœ¬–‘˜“š×ßÝ›šŒ‹†š› —š“–œ‹šÝßÖÄòõöŒš“™ß‹—šž›ß’‘–‹²–Œœ¬–‘˜“š×ßÝŠŒš› Šž‰ÝßÖÄòõöŒš“™ß‹—šž›ß’‘–‹²–Œœ¬–‘˜“š×ßÝŠŒš› œŠ‘‹š Šž‰ÝßÖÄòõöŒš“™ß‹—šž›ß’‘–‹²–Œœ¬–‘˜“š×ßÝŠŒš› ž–›ÝßÖÄòõöŒš“™ß‹—šž›ß’‘–‹²–Œœ¬–‘˜“š×ßÝŠŒš› š’ÝßÖÄòõöŒš“™ß‹—šž›ß’‘–‹²–Œœ¬–‘˜“š×ßÝŠŒš› ‘Š”šÝßÖÄòõöŒš“™ß‹—šž›ß’‘–‹²–Œœ¬–‘˜“š×ßÝœŠŒ—š› š‘š’†ÝßÖÄòõöòõöŒš“™ßˆž–‹‹–““×Ý›–Œœ‘‘šœ‹ÝÖÄòõöòõöÐÐß’ž”šßŒŠšß‹—šß‹—šž›Œßš‘›ßˆ—š‘߈šß›–Œœ‘‘šœ‹ÑòõöÐÐß׋—–Œßž““ˆŒß‘šß›–Œœ‘‘šœ‹ßˆž–‹‹–““ß–‘Œ‹šž›ß™ßËß›–Œœ‘‘šœ‹ßš‘›‘ŒÖòõöŒš“™ß‘‹–™†×ßÝ›šŒ‹†š› š‡“Œ–‰šÝßÖÄòõöŒš“™ß‘‹–™†×ßÝš˜–‘ ž–Œ‹–”šÝßÖÄòõöŒš“™ß‘‹–™†×ßÝ›šŒ‹†š› œžÝßÖÄòõöŒš“™ß‘‹–™†×ßÝ›šŒ‹†š› —š“–œ‹šÝßÖÄòõ‚òõòõ’‘–‹²–Œœ¬–‘˜“š×߈ž–‹‹–““¬‹–‘˜ßÖòõ„òõöÐÐß›‘Ø‹ß‘šš›ß‹ßš‘›‘ß›–Œœ‘‘šœ‹ßšœžŠŒšßˆšßˆ–““ߘš‹ß‹—šß‘‹–™†ßˆšØšßˆž–‹–‘˜ß™ßˆ—š‘߈šß›–Œœ‘‘šœ‹ÑòõöÐÐßž‰–›–‘˜ß‹—šßš‘›‘ß›–Œœ‘‘šœ‹ßŒž‰šŒßžß“‹ß™ßŒœ–‹ß‰ž–ž“šŒß×ÊßÕßËß‹—šž›ŒßÕßÉËß“ž†šŒßÂßÎÍÇÏÖòõöòõöˆ—–“š×ÎÖòõö„òõööŒš“™ßˆž–‹‹–““×߈ž–‹‹–““¬‹–‘˜ßÖÄòõööòõöö–™ß×ßÞ–Œ»š™–‘š›×ߌš“™ßÖßÖòõöööš‹Š‘Äòõööòõöö’‘–‹²–Œœ¼ž““žœ”×߈ž–‹‹–““¬‹–‘˜ßÖÄòõö‚òõ‚òõòõ’‘–‹²–Œœ¼ž““žœ”×ßšŒŠ“‹ßÖòõ„òõöžŒŒš‹×ß–Œ»š™–‘š›×ßšŒŠ“‹ßÖßÖÄòõöŒˆ–‹œ—×ßšŒŠ“‹ßÖòõö„òõööœžŒšßÝš˜–‘ ž–Œ‹–”šÝÅòõöööŒš“™ÑšŒ¤Ýž–Œ‹–”š¬‹šž”Ý¢ßÂßÏÄòõööšž”ÄòõòõööœžŒšßÝ›šŒ‹†š› š‡“Œ–‰šÝÅööòõööö–™ß×ߌš“™ß —žŒ¯š”×ßÝŒšœ–ž“‹† ›š‹šœ‹š‡“Œ–‰šÝßÖßÖòõööööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— ›š‹šœ‹š‡“Œ–‰šŒ ÝßÖÄòõòõöööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— žœ”›ž™‹ÝßÖÄòõööšž”ÄòõòõööœžŒšßÝ›šŒ‹†š› —š“–œ‹šÝÅòõöööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— ™“†Œˆž‹‹šÝßÖÄòõööšž”ÄòõòõööœžŒšßÝ›šŒ‹†š› œžÝÅòõöööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‰ž‘›ž“–Œ’ÝßÖÄòõööšž”ÄòõööòõööœžŒšßÝœŠŒ—š› š‘š’†ÝÅòõöööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— —šž›Œ ŠÝßÖÄòõòõööö–™ß×ß–Œ»š™–‘š›×ߌš“™Ñ™–‘ž“´–““ßÖßÖòõööööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— ›–‘œž‹šŒÝßÖÄòõööšž”Äòõö‚òõ‚òõòõòõ—šž“‹—­š˜š‘šž‹š›×Öòõ„òõö–™ß×ßÞ–Œž“–‰š×ߌš“™ßÖßÖòõööš‹Š‘Äòõöòõö–™ß×ßÞ’ž†¯œšŒŒ¼—ž““š‘˜šŒ×ÖßÖòõööš‹Š‘Äòõöòõö–™ß×ßÞŒš“™ßž‘”–‘˜º‘ž“š›×ÖßÖòõööš‹Š‘ÄòõöòõöŒš“™ß‹—šž›ßšŒš‹½–‘”°™»šž‹—´–““¬‹šž”¬—‹“†×ÖÄòõöòõö–™ß×ß–Œ›š™–‘š›×ߌš“™Ñ“žŒ‹»ž’ž˜š¨žŒ¹’º‘š’†ßÖßÙÙߌš“™Ñ“žŒ‹»ž’ž˜š¨žŒ¹’º‘š’†ßÖòõö„òõööÐÐß«°»°Åß‹—–Œß–Œ‘Ø‹ßž“ˆž†Œß˜š‹‹–‘˜ß–‘œš’š‘‹š›ßˆ—š‘ß–ßš˜š‘òõööŒš“™Ñ—šž“‹—­š˜š‘šž‹–‘¬‹šž”ÔÔÄòõöö–™ß×ߌš“™Ñ—šž“‹—­š˜š‘šž‹–‘¬‹šž”ßÁÂßÊßÖòõöö„òõöööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— –‘‰–‘œ–“šÝßÖÄòõöö‚òõö‚òõ‚òõòõšŒš‹½–‘”°™»šž‹—´–““¬‹šž”¬—‹“†×Öòõ„òõöŒš“™ßš‘›‘×Ý›–Œœ‘‘šœ‹ÝÖÄòõöŒš“™ßš‘›‘×Ý›šž‹—ÝÖÄòõöŒš“™ßš‘›‘×Ý›ž’ž˜šÝÖÄòõöòõöˆž–‹ßÎÄòõöòõöŒš“™Ñ–‘”°™»šž‹—´–““¬‹šž”ßÂßÏÄòõ‚òõòõ“ž†š¬žˆ‘š›×Öòõ„òõöŒš“™Ñ–‘”°™»šž‹—´–““¬‹šž”ßÂßÏÄòõöŒš“™Ñ—šž“‹—­š˜š‘šž‹–‘¬‹šž”ßÂßÏÄòõöŒš“™ÑšŒ¤Ý²¸¬‹šž”Ý¢ßÂßÏÄòõ‚òõòõ“ž†š»–š›×Öòõ„òõöŒš“™Ñ–‘”°™»šž‹—´–““¬‹šž”ßÂßÏÄòõöŒš“™Ñ—šž“‹—­š˜š‘šž‹–‘¬‹šž”ßÂßÏÄòõöŒš“™ÑšŒ¤Ý²¸¬‹šž”Ý¢ßÂßÏÄòõ‚òõòõ–Œ¾‹½–‘”°™»šž‹—×Öòõ„òõöž‹–ßÂߌš“™Ñ—šž“‹—ßÐߌš“™Ñ’ž‡·šž“‹—Äòõöš‹Š‘ßמ‹–ßÃÂß“š‰š“Ñ—šž“‹—°‰š“ž†¼Š‹™™ÖÄòõ‚òõòõòõœšŒŒ¼—ž““š‘˜š×ßžŒš±ž’šÓߘšŒŒ¶‘œÓß™œš¬š‹¯˜šŒŒßÖòõ„òõö–™ß×ßÞ’ž†¯œšŒŒ¼—ž““š‘˜šŒ×ÖßÖòõööš‹Š‘Äòõöòõö–™ß×ß“š‰š“Ñ“ž†šŒÑŒ–…šßÃßÍßÖòõööš‹Š‘Äòõöòõö–™ß×ßÞŒš“™ßž‘”–‘˜º‘ž“š›×ÖßÖòõööš‹Š‘Äòõöòõö–™ß×ßÞ–Œ»š™–‘š›×ߘšŒŒ¶‘œßÖßÖòõöö˜šŒŒ¶‘œßÂßÎÄöòõöòõöÐÜòõö–™ß×ߘš‹»‰ž¶‘‹×ßÝ›šŠ˜ œ—ž““š‘˜šŒÝßÖßÖòõöö–‘‹“‘×ßݼ·¾³³º±¸ºß¯­°¸­º¬¬ßÒßÝßÔßžŒš±ž’šßÔßÝÅßÝßÔߘšŒŒ¶‘œßÖÄòõöÜÐòõöòõö’–ŒŒ–‘¬‹ž‹ŠŒßÂߘš‹¼—ž““š‘˜š¬‹ž‹ŠŒ×ßžŒš±ž’šßÖÄòõöòõö–™ß×ß’–ŒŒ–‘¬‹ž‹ŠŒßÂÂßÏßÖòõööš‹Š‘ÄòõöòõöÐÐßœ—ž““š‘˜šßž“šž›†ßœ’“š‹š›òõö–™ß×ß’–ŒŒ–‘¬‹ž‹ŠŒßÁß“š‰š“Ñœ—ž““š‘˜š¶‘™¤žŒš±ž’š¢¤Ý‹ž˜š‹‰ž“ݢь–…šßÖòõööš‹Š‘Äòõòõö–™ß×ß–Œ»š™–‘š›×ß™œš¬š‹¯˜šŒŒßÖßÙÙß™œš¬š‹¯˜šŒŒßÖòõö„òõöö˜šŒŒßÂߘšŒŒ¶‘œÄòõö‚òõöš“Œšòõö„òõöö˜šŒŒßÂßœ— ˜š‹¯˜šŒŒ×ßžŒš±ž’šßÖÄòõöö˜šŒŒßÔÂߘšŒŒ¶‘œÄòõö‚òõòõöÐÐ߈šØ‰šßœ’“š‹š›ß‹—–Œß‹–šöòõö–™ß×ߘšŒŒßÁÂß“š‰š“Ñœ—ž““š‘˜š¶‘™¤žŒš±ž’š¢¤Ý‹ž˜š‹‰ž“Ý¢¤’–ŒŒ–‘¬‹ž‹ŠŒ¢ßÖòõö„òõööŒš“™ßœ— Œš‹¯˜šŒŒ×ßžŒš±ž’šÓß“š‰š“Ñœ—ž““š‘˜š¶‘™¤žŒš±ž’š¢¤Ý‹ž˜š‹‰ž“Ý¢¤’–ŒŒ–‘¬‹ž‹ŠŒ¢ßÖÄòõööŒš“™ß‹—šž›ß˜–‰š­ž‘”§¾™‹š¨ž–‹×ßžŒš±ž’šÓß’–ŒŒ–‘¬‹ž‹ŠŒßÖÄòõööòõöö’–ŒŒ–‘¬‹ž‹ŠŒÔÔÄööòõööŒš“™ßœ— Œš‹¬‹ž‹š×ßžŒš±ž’šÓß’–ŒŒ–‘¬‹ž‹ŠŒßÖÄòõööŒš“™Ñœ—ž““š‘˜š»ž‹ž¤žŒš±ž’š¢ßÂß’–ŒŒ–‘¬‹ž‹ŠŒÄòõööòõööŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅÅœ—ž““š‘˜š¬“žŒ—±‹–™†×ßžŒš±ž’šßÖÄòõòõööŒš“™ß‹—šž›ß’žŒ‹š†¼—ž““š‘˜š¯œšŒŒ×ßžŒš±ž’šÓß’–ŒŒ–‘¬‹ž‹ŠŒßÖÄòõö‚òõöš“Œšòõö„òõööŒš“™ßœ— Œš‹¯˜šŒŒ×ßžŒš±ž’šÓߘšŒŒßÖÄööòõö‚öòõ‚òõòõ˜–‰š­ž‘”§¾™‹š¨ž–‹×ßžŒš±ž’šÓ’–ŒŒ–‘¬‹ž‹ŠŒßÖòõ„òõöŒš“™ßš‘›‘ß×ßÝ›–Œœ‘‘šœ‹ÝßÖÄòõòõöˆž–‹×ßÏÑÍÊßÖÄòõöŒš“™ß’žŒ£’£˜ž’š‹†šŒ£ ž‘”ÅŘ–‰š­ž‘”§¯×ßÝœ—ž““š‘˜šÝÓß“š‰š“Ñœ—ž““š‘˜š¶‘™¤žŒš±ž’š¢¤Ýšˆž›Ý¢¤’–ŒŒ–‘¬‹ž‹ŠŒ¢ßÖÄòõ‚òõòõòõ˜š‹²ž”Œ’ž‘ª‘“œ”¾‹‹žœ—’š‘‹×ßžŒš±ž’šÓß–‘›š‡ßÖòõ„òõöš‹Š‘ß×ß‹ž“š³”Š×ßݒЊ‘“œ”«ž“šÑœŒ‰ÝÓßÏÓßžŒš±ž’šÓßËßÔß–‘›š‡ßÖßÖÄòõ‚òõòõòõ˜š‹¨šž‘¾‹‹žœ—’š‘‹×߈šž‘±ž’šÓß–‘›š‡ßÖòõ„òõöš‹Š‘ß×ß‹ž“š³”Š×ßÝ’ÐŒ‹ž‹Œ«ž“šÑœŒ‰ÝÓßËÓ߈šž‘±ž’šÓßÎÎßÔß–‘›š‡ßÖßÖÄòõ‚òõòõòõ’žŒ‹š†¼—ž““š‘˜š¯œšŒŒ×ßžŒš±ž’šÓߘšŒŒ¶‘œßÖòõ„òõö–™ß×ß–Œ¬Š¬‹×ßžŒš±ž’šÓßÝœ— ’ž”Œ’ž‘ ÝßÖßÖòõö„òõööš™–‡ßÂßÝœ— ’ž”Œ’ž‘ ÝÄòõööžŒš¨šž‘ßÂߘš‹¬Š¬‹×ßžŒš±ž’šÓßš™–‡ÑŒ–…šÓßžŒš±ž’šÑŒ–…šßÖÄòõö‚òõöš“Œšòõö„òõöö‹”š‘ŒßÂߌ‹«”×ßžŒš±ž’šÓßÝ ÝßÖÄòõööòõöö–™ß×ß‹”š‘ŒÑŒ–…šßÞÂßÌßÖòõöööš‹Š‘ÄòõòõööžŒš¨šž‘ßÂß‹”š‘Œ¤Î¢Äòõö‚òõöòõö–™ß×ß‹ž“š³”Š×ßݒО““¼—ž““š‘˜šŒ«ž“šÑœŒ‰ÝÓßÏßÓßÝœ— ÝßÔßžŒš¨šž‘ßÔßÝ ’žŒ‹š†ÝÓßÎßÖßÂÂßÝÝßÖòõööš‹Š‘Äòõòõö˜šŒŒßÂßÏÄöòõö™ß×ß–‘›š‡ßÂßÏÄß–‘›š‡ßÃÂßÎÏÄß–‘›š‡ÔÔßÖòõö„òõööž‹‹žœ—’š‘‹±ž’šßÂߘš‹¨šž‘¾‹‹žœ—’š‘‹×ßžŒš¨šž‘Óß–‘›š‡ßÖÄòõööòõöö–™ß×ßž‹‹žœ—’š‘‹±ž’šßÂÂßÝÝßÖòõöööœ‘‹–‘ŠšÄòõöööòõöö–™ß×ߌš“™ß–Œ¶‹š’ª‘“œ”š›×ßžŒš¨šž‘ßÔßÝßÝßÔßž‹‹žœ—’š‘‹±ž’šßÖßÖòõööö˜šŒŒÔÔÄòõö‚òõöööòõöœšŒŒ¼—ž““š‘˜š×ßÝœ— ÝßÔßžŒš¨šž‘ßÔßÝ ’žŒ‹š†ÝÓߘšŒŒÓß‹ŠšßÖÄòõ‚òõòõòõŠ›ž‹š¼—ž““š‘˜šŒ×Öòõ„òõöŒš“™Ñœ—ž““š‘˜š»ž‹žßÂߤ¢Äòõöòõö–™ß×ßÞ’ž†¯œšŒŒ¼—ž““š‘˜šŒ×ÖßÖòõööš‹Š‘Äòõòõö–™ß×ßÞŒš“™ß–Œ¶‹š’ª‘“œ”š›×ßÝœ—ž““š‘˜šŒÝßÖßÖòõööš‹Š‘ß™ž“ŒšÄòõöòõö™šžœ—ß×ßœ—ž““š‘˜š­š™Óßœ—ž““š‘˜š»ž‹žß–‘ß“š‰š“Ñœ—ž““š‘˜š¶‘™ßÖòõö„òõööŒš“™Ñœ—ž““š‘˜š»ž‹ž¤œ—ž““š‘˜š­š™¢ßÂßÏÄòõööòõöö–™ß×ßÞŒš“™ß–Œ¶‹š’ª‘“œ”š›×ßœ—ž““š‘˜š­š™ßÖßÖòõöööœ‘‹–‘ŠšÄòõöööòõöö–™ß×ß–Œ»š™–‘š›×ßœ—ž““š‘˜š»ž‹ž¤ÝšŽŠ–š’š‘‹Ý¢ßÖßÙÙßÞŒš“™ß–Œ¶‹š’ª‘“œ”š›×ßœ—ž““š‘˜š»ž‹ž¤ÝšŽŠ–š’š‘‹Ý¢ßÖßÖòõöööœ‘‹–‘ŠšÄòõöööòõööŒ‹ž‹ŠŒßÂßœ— ˜š‹¬‹ž‹š×ßœ—ž““š‘˜š­š™ßÖÄòõöö–™ß×ߌ‹ž‹ŠŒßÂÂßÏßÖòõöö„òõöööœ— Œš‹¬‹ž‹š×ßœ—ž““š‘˜š­š™ÓßÎßÖÄòõöööŒ‹ž‹ŠŒßÂßÎÄòõöö‚òõööòõööŒš“™Ñœ—ž““š‘˜š»ž‹ž¤œ—ž““š‘˜š­š™¢ßÂߌ‹ž‹ŠŒÄòõö‚òõ‚òõòõÐÕòõöœ—ž““š‘˜š ‹ž˜š‹©ž“ßž‘›ßšˆž›©ž“ߌ—Š“›ßœžŒ‹ß‹—š–ßš‹Š‘߉ž“ŠšŒß‹ß–‘‹òõÕÐòõœ—ž““š‘˜š ‹ž˜š‹©ž“×ßš™¬‹–‘˜Óß‹–š¶›ßÖòõ„òõö‰ž“ŠšßÂß‹ž“š³”Š×ßݒО““¼—ž““š‘˜šŒ«ž“šÑœŒ‰ÝÓß¼· ­º¹ ¼°³Óßš™¬‹–‘˜Óß¼· «¾­¸º« ¼°³ßÔß×׋–š¶›ÒÎÖÕÍÖßÖÄòõöš‹Š‘ß–‘‹×߉ž“ŠšßÖÄòõ‚òõòõòõœ—ž““š‘˜š šˆž›©ž“×ßš™¬‹–‘˜Óß‹–š¶›ßÖòõ„òõö‰ž“ŠšßÂß‹ž“š³”Š×ßݒО““¼—ž““š‘˜šŒ«ž“šÑœŒ‰ÝÓß¼· ­º¹ ¼°³Óßš™¬‹–‘˜Óß¼· ­º¨¾­» ¼°³ßÔß×׋–š¶›ÒÎÖÕÍÖßÖÄòõöš‹Š‘ß–‘‹×߉ž“ŠšßÖÄòõ‚òõòõòõŠ–“›¼—ž““š˜š¶‘™×Öòõ„òõö“š‰š“Ñœ—ž““š‘˜š¶‘™ßÂߤ¢Äòõòõö‹ž“š±ž’šßÂßݒО““œ—ž““š‘˜šŒ«ž“šÑœŒ‰ÝÄòõòõö‹‹ž“­šˆž›§¯ßÂßÏÄòõòõöš™¬‹–‘˜ßÂß‹ž“š³”Š½†­ˆ×ß‹ž“š±ž’šÓßÏÓß¼· ­º¹ ¼°³ßÖÄòõöžŒŒš‹º‡×ß–Œ¬Š¬‹×ßš™¬‹–‘˜ÓßÝœ— ÝßÖ߃ƒß–Œ¬Š¬‹×ßš™¬‹–‘˜ÓßÝ ÝßÖÓßݶ‘‰ž“–›ßœ—ž““š‘˜šß‘ž’šÅßÝßÔßš™¬‹–‘˜ßÔßÝß™Š‘›ß–‘ßÝßÔß‹ž“š±ž’šßÖÄòõö™ß×ß–‘›š‡ßÂßÎÄßš™¬‹–‘˜ßÞÂßÝÝÄß–‘›š‡ÔÔßÖòõö„òõööžŒŒš‹º‡×ß–Œ¬Š¬‹×ßš™¬‹–‘˜ÓßÝœ— ÝßÖ߃ƒß–Œ¬Š¬‹×ßš™¬‹–‘˜ÓßÝ ÝßÖÓßݶ‘‰ž“–›ßœ—ž““š‘˜šß‘ž’šÅßÝßÔßš™¬‹–‘˜ßÔßÝß™Š‘›ß–‘ßÝßÔß‹ž“š±ž’šßÖÄòõòõöö“š‰š“Ñœ—ž““š‘˜š¶‘™¤š™¬‹–‘˜¢ßÂߤ¢Äòõöö“š‰š“Ñœ—ž““š‘˜š¶‘™¤š™¬‹–‘˜¢¤Ý‹ž˜š‹‰ž“Ý¢ßÂߤ¢Äòõöö“š‰š“Ñœ—ž““š‘˜š¶‘™¤š™¬‹–‘˜¢¤Ýšˆž›Ý¢ßÂߤ¢Äòõòõöö™ß×ß‹–š¶›ßÂßÎÄß‹–š¶›ßÃßÎÎÄß‹–š¶›ÔÔßÖòõöö„òõööö‹ž˜š‹©ž“ßÂßœ—ž““š‘˜š ‹ž˜š‹©ž“×ßš™¬‹–‘˜Óß‹–š¶›ßÖÄòõöööšˆž›©ž“ßÂßœ—ž““š‘˜š šˆž›©ž“×ßš™¬‹–‘˜Óß‹–š¶›ßÖÄòõòõööö–™ß×ß‹ž˜š‹©ž“ßÂÂßÏßÖòõööööšž”Äòõòõööö“š‰š“Ñœ—ž““š‘˜š¶‘™¤š™¬‹–‘˜¢¤Ý‹ž˜š‹‰ž“Ý¢¤‹–š¶›¢ßÂß‹ž˜š‹©ž“Äòõööö“š‰š“Ñœ—ž““š‘˜š¶‘™¤š™¬‹–‘˜¢¤Ýšˆž›Ý¢¤‹–š¶›¢ßÂßšˆž›©ž“Äòõöööòõööö‹‹ž“­šˆž›§¯ßÔÂßšˆž›©ž“Äòõöö‚òõööòõööžŒŒš‹×ß–Œ»š™–‘š›×ß“š‰š“Ñœ—ž““š‘˜š¶‘™¤š™¬‹–‘˜¢¤Ý‹ž˜š‹‰ž“Ý¢¤Î¢ßÖßÖÄòõòõööš™¬‹–‘˜ßÂß‹ž“š³”Š½†­ˆ×ß‹ž“š±ž’šÓß–‘›š‡Óß¼· ­º¹ ¼°³ßÖÄòõö‚òõòõö‹–š«ž“šßÂß‹ž“š³”Š½†­ˆ×ßÝ’Ðœ—ž““š‘˜š«ž“šÑœŒ‰ÝÓßÏÓßËßÖÄöòõö™ß×ß‹–š¶›ßÂßÎÄß‹–š«ž“šßÞÂßÝÝÄß‹–š¶›ÔÔßÖòõö„òõööœ—ž““š‘˜š­š™ßÂß‹ž“š³”Š½†­ˆ×ß‹–š«ž“šÓßÏÓßÏßÖÄòõöö™ß×ßœ—ž““š‘˜š¶›ßÂßÎÄßœ—ž““š‘˜š­š™ßÞÂßÝÝÄßœ—ž““š‘˜š¶›ÔÔßÖòõöö„òõöööšŽŠ–š’š‘‹ßÂß‹ž“š³”Š×ß‹–š«ž“šÓßÏÓßœ—ž““š‘˜š­š™ÓßÎßÖÄòõööö–™ß×ßšŽŠ–š’š‘‹ßÞÂßÝÝßÖòõöööö“š‰š“Ñœ—ž““š‘˜š¶‘™¤œ—ž““š‘˜š­š™¢¤ÝšŽŠ–š’š‘‹Ý¢ßÂßšŽŠ–š’š‘‹Äòõööööòõöööœ—ž““š‘˜š­š™ßÂß‹ž“š³”Š½†­ˆ×ß‹–š«ž“šÓßœ—ž““š‘˜š¶›ÓßÏßÖÄòõöö‚òõööòõöö‹–š«ž“šßÂß‹ž“š³”Š½†­ˆ×ßÝ’Ðœ—ž““š‘˜š«ž“šÑœŒ‰ÝÓß‹–š¶›ÓßËßÖÄöòõö‚òõöòõöÐÜòõö–‘‹³‘×ßÝ«°«¾³ß¼·¾³³º±¸ºß­º¨¾­»ß§¯ÅßÝßÔß‹‹ž“­šˆž›§¯ßÖÄòõöÜÐòõ‚òõòõÐÜòõ‰š–™†²ž”Œ’ž‘¼—ž““š‘˜šŒ×Öòõ„òõ‚òõòõ‰š–™†º‡š‹¼—ž““š‘˜šŒ×Öòõ„òõ‚òõÜÐòõòõÐÜòõœ’“š‹š¾““¼—ž““š‘˜šŒ×ßšœš‘‹ž˜šßÖòõ„òõö™šžœ—ß×ßœ—ž““š‘˜š­š™Óßœ—ž““š‘˜š»ž‹žß–‘ß“š‰š“Ñœ—ž““š‘˜š¶‘™ßÖòõö„òõöö™–‘ž“«ž˜š‹ßÂßÏÄòõöö™–‘ž“«–šßÂßÏÄòõöö™ß×ß‹–š¶›ßÂßÎÄß–Œ»š™–‘š›×ßœ—ž““š‘˜š»ž‹ž¤Ý‹ž˜š‹‰ž“Ý¢¤‹–š¶›¢ßÖÄß‹–š¶›ÔÔßÖòõöö„òõööö™–‘ž“«ž˜š‹ßÂßœ—ž““š‘˜š»ž‹ž¤Ý‹ž˜š‹‰ž“Ý¢¤‹–š¶›¢Äòõööö™–‘ž“«–šßÂß‹–š¶›ßÔßÎÄòõöö‚òõööòõöö–™ß×ßšœš‘‹ž˜šßÞÂßÎÑÏßÖòõöö„òõööö™–‘ž“«ž˜š‹ÒÒÄòõööö™–‘ž“«–šÒÒÄòõöö‚òõòõöö–™ß×ߌš“™ß–Œ¶‹š’ª‘“œ”š›×ßœ—ž““š‘˜š­š™ßÖ߃ƒßšœš‘‹ž˜šßÂÂßÎÑÏßÖòõöö„ööòõöööŒš“™ßŒš‹¯“ž†š»ž‹ž×ßÝœ—ž““š‘˜š¯˜šŒŒÝÓßœ—ž““š‘˜š­š™Óß™–‘ž“«ž˜š‹ßÖÄòõöööŒš“™ßŒš‹¯“ž†š»ž‹ž×ßÝœ—ž““š‘˜š¬‹ž‹šÝÓßœ—ž““š‘˜š­š™Óß™–‘ž“«–šßÖÄòõöö‚òõööòõööˆž–‹ß×ßÏÑÏÊßÖÄòõö‚òõöòõö–‘‹“‘×ßÝ»‘šßŠ‘“œ”–‘˜ßœ—ž““š‘˜šŒÝßÖÄòõ‚òõÜÐòõòõ’‘–‹¯œšŒŒ¼—ž““š‘˜š×Öòõ„òõöŒš“™ßš‘›‘×ßÝ›–Œœ‘‘šœ‹ÝßÖÄòõö“š‰š“ßš‘›‘×ßݘž’š š‘›ÝßÖÄòõöòõö™×ßÄÄßÖòõö„òõöö–™×ßÞ’ž†¯œšŒŒ¼—ž““š‘˜šŒ×ÖßÖòõöööš‹Š‘ÄòõöööòõööŒš“™ßˆž–‹‹–““×ßÝœšŒŒÝÓßœ—ž““š‘˜š±ž’šßÖÄòõööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßœ—ž““š‘˜š±ž’šßÖÄòõö‚öòõ‚òõòõ’‘–‹´–““Œ‹šž”¯˜šŒŒ×Öòõ„òõöŒš“™ßš‘›‘×ßÝ›–Œœ‘‘šœ‹ÝßÖÄòõö“š‰š“ßš‘›‘×ßݘž’š š‘›ÝßÖÄòõöòõö™×ßÄÄßÖòõö„òõööŒš“™ßˆž–‹‹–““ß×ßݘ‹ ”–““Œ‹šž”ÝÓߌ‹šž”¼Š‘‹ßÖÄòõööòõööÐЙߌœ ˜–‰”–““Œ‹šž”òõöö–™×ßÞ–Œ»š™–‘š›×ߌ‹šž”¼Š‘‹ßÖßÖòõöööœ‘‹–‘ŠšÄòõööòõöö–™ß×ߌ‹šž”¼Š‘‹ßÂÂßÎÏßÙÙߌš“™Ñ”–““Œ‹šž”ŒÑŒ–…šßÂÂßÏßÖòõöööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— ‹—š“‘šÝßÖÄööòõööš“Œšß–™ß×ߌ‹šž”¼Š‘‹ßÂÂßÆßÖòõöö„òõööö–™ß×ß–Œ»š™–‘š›×ߌš“™Ñ”–““Œ‹šž”Œ¤È¢ßÖßÙÙß–Œ»š™–‘š›×ߌš“™Ñ”–““Œ‹šž”Œ¤Ç¢ßÖßÙÙß–Œ»š™–‘š›×ߌš“™Ñ”–““Œ‹šž”Œ¤Æ¢ßÖßÖòõööö„òõööööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— É™šžŒÈÝßÖÄòõööö‚òõöö‚òõö‚òõ‚òõòõòõ’‘–‹´–““š›´–““Œ‹šž”×Öòõ„òõöŒš“™ßš‘›‘×ßÝ›–Œœ‘‘šœ‹ÝßÖÄòõö“š‰š“ßš‘›‘×ßݘž’š š‘›ÝßÖÄòõöòõö™×ßÄÄßÖòõö„òõööŒš“™ßˆž–‹‹–““×ßÝ›šŒ‹†š› ”–““Œ‹šž”ÝÓ߈šž‘ßÖÄòõööòõöö–™ß×ߌš“™ß —žŒ¯š”×ßÝŒšœ–ž“‹† œ“›“›š›ÝßÖßÖòõöööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— œ“›“›š› ÝßÖÄòõòõöö–™ß×ß–Œ»š™–‘š›×߈šž‘ßÖßÙÙ߈šž‘ßÂÂßÝŒ‹–‘˜š ’ÝßÖòõöö„òõöööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— ’ž”Œ’ž‘ Œ‹–‘˜šÝßÖÄööòõöööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝ ’ž”Œ’ž‘ Œ‹–‘˜šÝßÖÄööòõöö‚òõö‚öòõ‚òõòõòõ˜š‘š–œ¼—ž““š‘˜š×ßœ—ž““š‘˜š«†šÓ߉ž“ŠšßÖòõ„òõöŒˆ–‹œ—ß×ßœ—ž““š‘˜š«†šßÖòõö„òõööœžŒšßÝ—–•žœ”š ž–›ÝÅòõöööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— Œ’‹—œ–’–‘ž“ÝßÖÄòõöööšž”ÄòõööœžŒšßÝ—–•žœ”š ž–› ’š˜žÝÅòõöööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— “Œ—ž”ÝßÖÄòõöööšž”ÄòõööœžŒšß݈ž˜žŒ’ÝÅòõöööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— ˆž˜žŒ’ÝßÖÄòõöööšž”ÄòõööœžŒšß݈šž‘ žŒŒžŠ“‹ÝÅòõöööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— ŒŠ˜–œž“ žŒŒžŠ“‹ÝßÖÄòõöööšž”ÄòõööœžŒšß݈šž‘ Œ’˜ÝÅòõöööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— ŒŠ˜–œž“ Œ’˜ÝßÖÄòõöööšž”ÄòõööœžŒšß݈šž‘ “’˜ÝÅòõöööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— ŒŠ˜–œž“ “’˜ÝßÖÄòõöööšž”ÄòõööœžŒšß݈šž‘ Œ‘–šÝÅòõöööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— ŒŠ˜–œž“ Œ‘–šÝßÖÄòõöööšž”ÄòõööœžŒšßÝŒ—–š“› ›ž’ž˜šÝÅòõöööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— Œ—–š“› ›ž’ž˜šÝÓ߉ž“ŠšßÖÄòõöööšž”ÄòõööœžŒšßÝŒ—–š“› Š““š‹ —–‹ŒÝÅòõöööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— Œ—–š“› Š““š‹ÝÓ߉ž“ŠšßÖÄòõöööšž”ÄòõööœžŒšßÝŒ—–š“› š‡“Œ–‰š —–‹ŒÝÅòõöööŒš“™ßœšŒŒ¼—ž““š‘˜š×ßÝœ— Œ—–š“› š‡“Œ–‰šÝÓ߉ž“ŠšßÖÄòõöööšž”Äòõö‚öòõ‚òõòõ“ž†š·žŒ¾’’×Öòõ„òõö–’ž†¨šž‘ŒßÂߌš“™ß˜š‹¨šž‘Œ³–Œ‹¯–’ž–šŒ×ÖÄöòõòõö™šžœ—ß×ß–’ž†ß–‘ß–’ž†¨šž‘ŒßÖòõö„òõöö–™ß×ߌš“™ß¸š‹¨šž‘¾’’¼“–×ß–’ž†ßÖßÖòõöööš‹Š‘ß‹ŠšÄòõöööòõööž“‹¨šž‘ßÂ߈šž‘¾“‹¨šž‘±ž’š×ß–’ž†ßÖÄòõòõöö–™ß×ßÞ–Œ»š™–‘š›×ßž“‹¨šž‘ßÖ߃ƒßמ“‹¨šž‘ßÂÂßÝ‘‘šÝÖßÖòõöööœ‘‹–‘ŠšÄòõòõöö–™ß×ߌš“™ß¸š‹¨šž‘¾’’¼“–×ßž“‹¨šž‘ßÖßÖòõöööš‹Š‘ß‹ŠšÄòõö‚òõöòõöš‹Š‘ß™ž“ŒšÄòõ‚ \ No newline at end of file diff --git a/Modern Warfare 2/Mod/TruHardcore/maps/mp/gametypes/_rank.gsc b/Modern Warfare 2/Mod/TruHardcore/maps/mp/gametypes/_rank.gsc new file mode 100755 index 0000000..4de41f9 --- /dev/null +++ b/Modern Warfare 2/Mod/TruHardcore/maps/mp/gametypes/_rank.gsc @@ -0,0 +1 @@ +ÞÜ–‘œ“Š›šßœ’’‘ Œœ–‹Œ£Š‹–“–‹†ÄòõÜ–‘œ“Š›šß’žŒ£’£ Š‹–“–‹†ÄòõÜ–‘œ“Š›šß’žŒ£’£˜ž’š‹†šŒ£ —Š› Š‹–“Äòõòõœ“šž°¬»«š‡‹×Öòõ„òõöŒš“™Ñ‘‹–™†«–‹“šÑž“—žßÂßÏÄòõöŒš“™Ñ‘‹–™†«š‡‹Ñž“—žßÂßÏÄòõöŒš“™Ñ‘‹–™†«š‡‹ÍÑž“—žßÂßÏÄòõöŒš“™Ñ‘‹–™†¶œ‘Ñž“—žßÂßÏÄòõöŒš“™Ñ‘‹–™†°‰š“ž†Ñž“—žßÂßÏÄòõöòõöŒš“™Ñ›–‘˜¬“žŒ—¤Ï¢ßÂߊ‘›š™–‘š›ÄòõöŒš“™Ñ›–‘˜¬“žŒ—¤Î¢ßÂߊ‘›š™–‘š›ÄòõöŒš“™Ñ›–‘˜¬“žŒ—¤Í¢ßÂߊ‘›š™–‘š›ÄòõöŒš“™Ñ›–‘˜¬“žŒ—¤Ì¢ßÂߊ‘›š™–‘š›Äòõ‚òõòõ–‘‹«š‡‹×ß‹–‹“šÓß“–‘šÎÓß“–‘šÍÓß›Šž‹–‘Öß„òõöŒš“™ßš‘›‘×Ý›šž‹—ÝÖÄòõöŒš“™ßš‘›‘×Ý›–Œœ‘‘šœ‹ÝÖÄòõòõö‘‹–™†»ž‹žßÂߌžˆ‘Œ‹Šœ‹×ÖÄòõöòõö‘‹–™†»ž‹žÑ‹–‹“š«š‡‹ßÂß‹–‹“šÄòõö‘‹–™†»ž‹žÑ‘‹–™†«š‡‹ßÂß“–‘šÎÄòõö‘‹–™†»ž‹žÑ‘‹–™†«š‡‹ÍßÂß“–‘šÍÄòõö‘‹–™†»ž‹žÑ›Šž‹–‘ßÂß›Šž‹–‘ÄòõöòõöŒš“™ß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅÅ‘‹–™†²šŒŒž˜š×ß‘‹–™†»ž‹žßÖÄòõ‚òõòõš’‰š¹’¬‹×‹ž˜š‹¬‹Óßš’‰š«—–ŒÖß„òõöˆšž¬‹«”ßÂߌ‹‹”׋ž˜š‹¬‹ÓßÝ ÝÖÄòõö‘šˆ¨šž‘ßÂ߈šž¬‹«”¤Ï¢Äòõö™×–ßÂßÎÄß–Œ»š™–‘š›×ˆšž¬‹«”¤–¢ÖÄß–ÔÔÖß„òõöö–™×ˆšž¬‹«”¤–¢ßÞÂßš’‰š«—–ŒÖòõööö‘šˆ¨šž‘ßÔÂßÝ ÝßÔ߈šž¬‹«”¤–¢Äòõö‚òõöš‹Š‘ß‘šˆ¨šž‘Äòõ‚òõòõš“žœš¨šž‘לŠ¨šžÓß‘šˆ¨šžÖß„òõöŒš“™ß‹ž”š¨šž‘לŠ¨šžÖÄòõöŒš“™ß˜–‰š¨šž‘בšˆ¨šžÖÄòõö–™×Œš“™ß —žŒš”×ßÝŒšœ–ž“‹† š‡‹žž’’ÝßÖÖß„òõööŒš“™ß˜–‰š²ž‡¾’’בšˆ¨šžÖÄòõö‚òõöˆ—–“š×Œš“™ß˜š‹¼Šš‘‹¨šž‘×ÖßÞÂß‘šˆ¨šžÖß„òõööŒš“™ß¬ˆ–‹œ—«¨šž‘בšˆ¨šžÖÄòõööˆž–‹ßÏÑÏÊÄòõö‚òõ‚òõòõ™–“‹š¨šž‘×Öß„òõöŒš“™ßš‘›‘×Ý›–Œœ‘‘šœ‹ÝÖÄòõöŒš“™ßš‘›‘×Ý›šž‹—ÝÖÄòõòõö™×ÄÄÖß„òõööœŠ¨šž‘±ž’šßÂߌš“™ß˜š‹¼Šš‘‹¨šž‘×ÖÄòõöö–™×–Œ¬Š¬‹×œŠ¨šž‘±ž’šÓßݘ“ ÝÖÖß„òõööö‘šˆ¨šž‘ßÂßš’‰š¹’¬‹×œŠ¨šž‘±ž’šÓßݘ“ÝÖÄòõöööš“žœš¨šž‘לŠ¨šž‘±ž’šÓß‘šˆ¨šž‘ÖÄòõöö‚òõööš“Œšß–™×ß×ß–Œ¬Š¬‹×œŠ¨šž‘±ž’šÓßÝ’›š“ÎÇÇÈÝÖ߃ƒß–Œ¬Š¬‹×œŠ¨šž‘±ž’šÓßÝž‘˜šÝÖ߃ƒß–Œ¬Š¬‹×œŠ¨šž‘±ž’šÓßݘ“œ”ÝÖ߃ƒß–Œ¬Š¬‹×œŠ¨šž‘±ž’šÓßÝšš‹‹žÌÆÌÝÖßÖßÙÙß–Œ¬Š¬‹×œŠ¨šž‘±ž’šÓßÝž”–’ÝÖßÖß„òõööö‘šˆ¨šž‘ßÂßš’‰š¹’¬‹×œŠ¨šž‘±ž’šÓßÝž”–’ÝÖÄòõöööš“žœš¨šž‘לŠ¨šž‘±ž’šÓß‘šˆ¨šž‘ÖÄòõöö‚òõööš“Œšß–™×–Œ¬Š¬‹×œŠ¨šž‘±ž’šÓßÝ‹žœ‹–œž“ ÝÖÖß„òõööö‘šˆ¨šž‘ßÂßš’‰š¹’¬‹×œŠ¨šž‘±ž’šÓßÝ‹žœ‹–œž“ÝÖÄòõöööš“žœš¨šž‘לŠ¨šž‘±ž’šÓß‘šˆ¨šž‘ÖÄòõöö‚òõööš“Œšß–™×œŠ¨šž‘±ž’šßÂÂßݘ ’Ý߃ƒßœŠ¨šž‘±ž’šßÂÂßÝ’ÈÆ ’Ý߃ƒßœŠ¨šž‘±ž’šßÂÂßÝž‹Ë ’Ý߃ƒßœŠ¨šž‘±ž’šßÂÂßÝ•ž‰š“–‘ ’ÝÖß„òõöööš“žœš¨šž‘לŠ¨šž‘±ž’šÓßÝŒ‹–‘˜š ’ÝÖÄòõöö‚òõöö–™×Œš“™ß —žŒš”×ÝŒšœ–ž“‹† ’žž‹—‘ÝÖÖòõöööŒš“™ß Š‘Œš‹¯š”×ÝŒšœ–ž“‹† ’žž‹—‘ÝÖÄòõöö–™×Œš“™ß —žŒš”×ÝŒšœ–ž“‹† ’žÝÖ߃ƒßŒš“™ß —žŒš”×ÝŒšœ–ž“‹† ‘š’ž‘ž’†ÝÖÖß„òõöööŒš“™ß Š‘Œš‹¯š”×ÝŒšœ–ž“‹† ’žÝÖÄòõöööŒš“™ß Š‘Œš‹¯š”×ÝŒšœ–ž“‹† ‘š’ž‘ž’†ÝÖÄòõöö‚òõöö–™×Œš“™ß —žŒš”×ÝŒšœ–ž“‹† š‡‹š‘›š›’š“ššÝÖÖòõöööŒš“™ß Š‘Œš‹¯š”×ÝŒšœ–ž“‹† š‡‹š‘›š›’š“ššÝÖÄòõöö–™×Œš“™ß —žŒš”×ÝŒšœ–ž“‹† ™ž““›ž’ž˜šÝÖÖòõöööŒš“™ß Š‘Œš‹¯š”×ÝŒšœ–ž“‹† ™ž““›ž’ž˜šÝÖÄòõöö–™×Œš“™ß —žŒš”×ÝŒšœ–ž“‹† –Œ‹“›šž‹—ÝÖÖòõöööŒš“™ß Š‘Œš‹¯š”×ÝŒšœ–ž“‹† –Œ‹“›šž‹—ÝÖÄòõöö–™×Œš“™ß —žŒš”×ÝŒšœ–ž“‹† œ’ž‹—–˜—ÝÖÖòõöööŒš“™ß Š‘Œš‹¯š”×ÝŒšœ–ž“‹† œ’ž‹—–˜—ÝÖÄòõöö–™×Œš“™ß —žŒš”×ÝŒšœ–ž“‹† ˜š‘ž›šŠ““›šž‹—ÝÖÖòõöööŒš“™ß Š‘Œš‹¯š”×ÝŒšœ–ž“‹† ˜š‘ž›šŠ““›šž‹—ÝÖÄòõöö–™×Œš“™ß —žŒš”×ÝŒšœ–ž“‹† ž’‰šŒ‹ÝÖÖòõöööŒš“™ß Š‘Œš‹¯š”×ÝŒšœ–ž“‹† ž’‰šŒ‹ÝÖÄòõöööòõööÐÐß¾‘‹—šßˆž†ß™ß›–‘˜ß‘ßœŒŒ—ž–Œòõöö–™×“š‰š“Ñ–Œ·ž›œš²›šßÞÂßÝÎÝÖß„òõöööŒš‹»‰ž×ÝŒ‰ œ—šž‹ŒÝÓßÝÎÝÖÄòõöööŒš‹»‰ž×Ýœ˜ ›žˆ¼ŒŒ—ž–ÝÓßÝÏÝÖÄòõöööŒš“™ßŒš‹¼“–š‘‹»‰ž×Ýœ˜ ›žˆ¼ŒŒ—ž–ÝÓßÝÏÝÖÄòõöööÐÐŒš“™ßŒš‹¼“–š‘‹»‰ž×ݘ —ž›œšÝÓßÝÎÝÖÄòõöö‚òõööòõööÐÐß²šß›š›–œž‹š›òõööŒš“™ßŒš‹¼“–š‘‹»‰ž×Ýœ˜ Œœšž›¯–‘˜«š‡‹ÝÓßÝÎÝÖÄòõööŒš“™ßŒš‹¼“–š‘‹»‰ž×Ýœ˜ Œœšž›–‘˜˜ž—ÝÓßÝÏÝÖÄòõöööòõööÐÐß«—–Œß–Œß’šßšž“–Œ‹–œòõöö–™×ÞŒš“™ß —žŒš”×ÝŒšœ–ž“‹† ž’‰šŒ‹ÝÖÖòõöööŒš“™ß Œš‹¯š”×ÝŒšœ–ž“‹† ““‰šÝÖÄòõööˆž–‹ßÏÑÏÊÄòõö‚òõ‚òõòõòõ–‘–‹×Öòõ„òõö“š‰š“ÑŒœš¶‘™ßÂߤ¢Äòõö“š‰š“ч¬œž“šßÂߘš‹»‰ž¶‘‹×ßÝŒœ ‡Œœž“šÝßÖÄòõòõö“š‰š“Ñž‘”«ž“šßÂߤ¢Äòõòõöšœžœ—š¬—ž›š×݈—–‹šÝÖÄòõòõöšœžœ—š¬‹–‘˜×ßÙÝ­¾±´ ¯³¾¦º­ ¨¾¬ ¯­°²°«º» ±ÝßÖÄòõöšœžœ—š¬‹–‘˜×ßÙÝ­¾±´ ¯³¾¦º­ ¨¾¬ ¯­°²°«º»ÝßÖÄòõöšœžœ—š¬‹–‘˜×ßÙÝ­¾±´ ¯­°²°«º»ÝßÖÄòõöšœžœ—š¬‹–‘˜×ßÙݲ¯ ¯³ª¬ÝßÖÄòõöšœžœ—š¬‹–‘˜×ßÙÝ­¾±´ ­°²¾±¶ÝßÖÄòõöšœžœ—š¬‹–‘˜×ßÙÝ­¾±´ ­°²¾±¶¶ÝßÖÄòõöšœžœ—š¬‹–‘˜×ßÙÝ­¾±´ ­°²¾±¶¶¶ÝßÖÄòõòõö–™ß×ß“š‰š“Ñ‹šž’½žŒš›ßÖòõö„òõööš˜–Œ‹š¬œš¶‘™×ßÝ”–““ÝÓßÎÏÏßÖÄòõööš˜–Œ‹š¬œš¶‘™×ßÝ—šž›Œ—‹ÝÓßÎÏÏßÖÄòõööš˜–Œ‹š¬œš¶‘™×ßÝžŒŒ–Œ‹ÝÓßÍÏßÖÄòõööš˜–Œ‹š¬œš¶‘™×ßÝŒŠ–œ–›šÝÓßÏßÖÄòõööš˜–Œ‹š¬œš¶‘™×ßÝ‹šž’”–““ÝÓßÏßÖÄòõö‚òõöš“Œšòõö„òõööš˜–Œ‹š¬œš¶‘™×ßÝ”–““ÝÓßÊÏßÖÄòõööš˜–Œ‹š¬œš¶‘™×ßÝ—šž›Œ—‹ÝÓßÊÏßÖÄòõööš˜–Œ‹š¬œš¶‘™×ßÝžŒŒ–Œ‹ÝÓßÏßÖÄòõööš˜–Œ‹š¬œš¶‘™×ßÝŒŠ–œ–›šÝÓßÏßÖÄòõööš˜–Œ‹š¬œš¶‘™×ßÝ‹šž’”–““ÝÓßÏßÖÄòõö‚òõöòõöš˜–Œ‹š¬œš¶‘™×ß݈–‘ÝÓßÎßÖÄòõöš˜–Œ‹š¬œš¶‘™×ßÝ“ŒŒÝÓßÏÑÊßÖÄòõöš˜–Œ‹š¬œš¶‘™×ßÝ‹–šÝÓßÏÑÈÊßÖÄòõöš˜–Œ‹š¬œš¶‘™×ßÝœž‹ŠšÝÓßÌÏÏßÖÄòõöš˜–Œ‹š¬œš¶‘™×ßÝ›š™š‘›ÝÓßÌÏÏßÖÄòõöòõöš˜–Œ‹š¬œš¶‘™×ßÝœ—ž““š‘˜šÝÓßÍÊÏÏßÖÄòõòõö“š‰š“Ñ’ž‡­ž‘”ßÂß–‘‹×‹ž“š³”Š×ßݒО‘”«ž“šÑœŒ‰ÝÓßÏÓßÝ’ž‡ž‘”ÝÓßÎßÖÖÄòõö“š‰š“Ñ’ž‡¯šŒ‹–˜šßÂß–‘‹×‹ž“š³”Š×ßݒО‘”¶œ‘«ž“šÑœŒ‰ÝÓßÏÓßÝ’ž‡šŒ‹–˜šÝÓßÎßÖÖÄòõöòõö¶›ßÂßÏÄòõö¶›ßÂßÏÄòõö™ß×߶›ßÂßÏÄ߶›ßÃÂß“š‰š“Ñ’ž‡¯šŒ‹–˜šÄ߶›ÔÔßÖòõö„òõöö™ß×߶›ßÂßÏÄ߶›ßÃÂß“š‰š“Ñ’ž‡­ž‘”Ä߶›ÔÔßÖòõöööšœžœ—š¬—ž›š×ß‹ž“š³”Š×ßݒО‘”¶œ‘«ž“šÑœŒ‰ÝÓßÏÓ߶›Ó߶›ÔÎßÖßÖÄòõö‚òõòõöž‘”¶›ßÂßÏÄòõöž‘”±ž’šßÂß‹ž“š³”Š×ßݒО‘”‹ž“šÑœŒ‰ÝÓßÏÓßž‘”¶›ÓßÎßÖÄòõöžŒŒš‹×ß–Œ»š™–‘š›×ßž‘”±ž’šßÖßÙÙßž‘”±ž’šßÞÂßÝÝßÖÄòõööòõöˆ—–“šß×ß–Œ»š™–‘š›×ßž‘”±ž’šßÖßÙÙßž‘”±ž’šßÞÂßÝÝßÖòõö„òõöö“š‰š“Ñž‘”«ž“š¤ž‘”¶›¢¤Î¢ßÂß‹ž“š³”Š×ßݒО‘”‹ž“šÑœŒ‰ÝÓßÏÓßž‘”¶›ÓßÎßÖÄòõöö“š‰š“Ñž‘”«ž“š¤ž‘”¶›¢¤Í¢ßÂß‹ž“š³”Š×ßݒО‘”‹ž“šÑœŒ‰ÝÓßÏÓßž‘”¶›ÓßÍßÖÄòõöö“š‰š“Ñž‘”«ž“š¤ž‘”¶›¢¤Ì¢ßÂß‹ž“š³”Š×ßݒО‘”‹ž“šÑœŒ‰ÝÓßÏÓßž‘”¶›ÓßÌßÖÄòõöö“š‰š“Ñž‘”«ž“š¤ž‘”¶›¢¤È¢ßÂß‹ž“š³”Š×ßݒО‘”‹ž“šÑœŒ‰ÝÓßÏÓßž‘”¶›ÓßÈßÖÄòõòõööšœžœ—š¬‹–‘˜×ß‹ž“š³”Š¶¬‹–‘˜×ßݒО‘”‹ž“šÑœŒ‰ÝÓßÏÓßž‘”¶›ÓßÎÉßÖßÖÄòõòõööž‘”¶›ÔÔÄòõööž‘”±ž’šßÂß‹ž“š³”Š×ßݒО‘”‹ž“šÑœŒ‰ÝÓßÏÓßž‘”¶›ÓßÎßÖÄööòõö‚òõòõö’žŒ£’£˜ž’š‹†šŒ£ ’–ŒŒ–‘ŒÅÅŠ–“›¼—ž““š˜š¶‘™×ÖÄòõòõö“š‰š“ß‹—šž›ßž‹–š‘‹¥š¨ž–‹š×ÖÄòõöòõö“š‰š“Ñ–Œ·ž›œš²›šßÂߘš‹»‰ž×ݘ —ž›œšÝÖÄòõöòõö“š‰š“ß‹—šž›ß‘¯“ž†š¼‘‘šœ‹×ÖÄòõ‚òõòõž‹–š‘‹¥š¨ž–‹š×Öòõ„òõö“š‰š“ßš‘›‘×ßݘž’š š‘›š›ÝßÖÄòõöòõö“š‰š“߈ž–‹‹–““×ßÝš’ž‹œ— ‰šÝßÖÄòõöòõö–™ß×ßÞ’ž‹œ—²ž”–‘˜¸ž’š×ÖßÖòõö„òõöö–™ß×ߘš‹»‰ž×ßÝ’ž‘ž’šÝßÖßÂÂßÝ’ ŠŒ‹ÝßÙÙßž‘›’¶‘‹×ßÎÏÏÏßÖßÂÂßÆÆÆßÖòõööö“š‰š“Ñž‹–š‘‹¥š±ž’šßÂß“š‰š“Ñ“ž†šŒ¤Ï¢Ñ‘ž’šÄòõö‚òõöš“Œšòõö„òõöö–™ß×ߘš‹»‰ž×ßÝŒœ ž‹–š‘‹¥šÝßÖßÞÂßÝÝßÖòõööö“š‰š“Ñž‹–š‘‹¥š±ž’šßÂߘš‹»‰ž×ßÝŒœ ž‹–š‘‹¥šÝßÖÄòõö‚òõ‚òõòõ–Œ­š˜–Œ‹šš›º‰š‘‹×ß‹†šßÖòõ„òõö–™ß×ß–Œ»š™–‘š›×ß“š‰š“ÑŒœš¶‘™¤‹†š¢ßÖßÖòõööš‹Š‘ß‹ŠšÄòõöš“Œšòõööš‹Š‘ß™ž“ŒšÄòõ‚òõòõòõš˜–Œ‹š¬œš¶‘™×ß‹†šÓ߉ž“ŠšßÖòõ„òõö“š‰š“ÑŒœš¶‘™¤‹†š¢¤Ý‰ž“ŠšÝ¢ßÂ߉ž“ŠšÄòõ‚òõòõòõ˜š‹¬œš¶‘™©ž“Šš×ß‹†šßÖòõ„òõö‰š–›š»‰žßÂßÝŒœ ÝßÔß“š‰š“јž’š«†šßÔßÝ Œœš ÝßÔß‹†šÄöòõö–™ß×ߘš‹»‰ž×߉š–›š»‰žßÖßÞÂßÝÝßÖòõööš‹Š‘ߘš‹»‰ž¶‘‹×߉š–›š»‰žßÖÄòõöš“Œšòõööš‹Š‘ß×ß“š‰š“ÑŒœš¶‘™¤‹†š¢¤Ý‰ž“ŠšÝ¢ßÖÄòõ‚òõòõòõ˜š‹¬œš¶‘™³žš“×ß‹†šßÖòõ„òõöš‹Š‘ß×ß“š‰š“ÑŒœš¶‘™¤‹†š¢¤Ý“žš“Ý¢ßÖÄòõ‚òõòõòõ˜š‹­ž‘”¶‘™²–‘§¯×ßž‘”¶›ßÖòõ„òõöš‹Š‘ß–‘‹×“š‰š“Ñž‘”«ž“š¤ž‘”¶›¢¤Í¢ÖÄòõ‚òõòõòõ˜š‹­ž‘”¶‘™§¯¾’‹×ßž‘”¶›ßÖòõ„òõöš‹Š‘ß–‘‹×“š‰š“Ñž‘”«ž“š¤ž‘”¶›¢¤Ì¢ÖÄòõ‚òõòõòõ˜š‹­ž‘”¶‘™²ž‡§×ßž‘”¶›ßÖòõ„òõöš‹Š‘ß–‘‹×“š‰š“Ñž‘”«ž“š¤ž‘”¶›¢¤È¢ÖÄòõ‚òõòõòõ˜š‹­ž‘”¶‘™¹Š““×ßž‘”¶›ßÖòõ„òõöš‹Š‘ß‹ž“š³”Š¶¬‹–‘˜×ßݒО‘”‹ž“šÑœŒ‰ÝÓßÏÓßž‘”¶›ÓßÎÉßÖÄòõ‚òõòõòõ˜š‹­ž‘”¶‘™¶œ‘×ßž‘”¶›ÓßšŒ‹–˜š¶›ßÖòõ„òõöš‹Š‘ß‹ž“š³”Š×ßݒО‘”¶œ‘«ž“šÑœŒ‰ÝÓßÏÓßž‘”¶›ÓßšŒ‹–˜š¶›ÔÎßÖÄòõ‚òõòõ˜š‹­ž‘”¶‘™³š‰š“×ßž‘”¶›ßÖòõ„òõöš‹Š‘ß–‘‹×ß‹ž“š³”Š×ßݒО‘”‹ž“šÑœŒ‰ÝÓßÏÓßž‘”¶›ÓßÎÌßÖßÖÄòõ‚òõòõòõ‘¯“ž†š¼‘‘šœ‹×Öòõ„òõö™×ÄÄÖòõö„òõöö“š‰š“߈ž–‹‹–““×ßÝœ‘‘šœ‹š›ÝÓß“ž†šßÖÄòõòõööÐÜòõöö–™ß×ߘš‹»‰ž¶‘‹×ßÝŒœ ™œš¬šŽŠš‘œšÝßÖßÖòõööö“ž†šßŒš‹¯“ž†š»ž‹ž×ßÝš‡š–š‘œšÝÓßÎËÊËÆÆßÖÄòõööÜÐòõöö“ž†šÑšŒ¤Ýž‘”‡Ý¢ßÂß“ž†šß’žŒ£’£˜ž’š‹†šŒ£ šŒ–Œ‹š‘œšÅÅŒ‹ž‹¸š‹×ßÝš‡š–š‘œšÝßÖÄòõöö–™ß×ß“ž†šÑšŒ¤Ýž‘”‡Ý¢ßÃßÏßÖßÐÐßžž‘–›ß›š™š‘Œ–‰šòõööö“ž†šÑšŒ¤Ýž‘”‡Ý¢ßÂßÏÄòõööòõööž‘”¶›ßÂß“ž†šß˜š‹­ž‘”¹§×ß“ž†šß˜š‹­ž‘”§¯×ÖßÖÄòõöö“ž†šÑšŒ¤ßÝž‘”ÝߢßÂßž‘”¶›Äòõöö“ž†šÑšŒ¤ßÝž‹–œ–ž‹–‘ÝߢßÂßÏÄòõòõöö“ž†šÑ‡ª›ž‹š«‹ž“ßÂßÏÄòõöö“ž†šÑ‘ŠŒª›ž‹š«‹ž“ßÂßÏÄòõööòõööšŒ‹–˜šßÂß“ž†šß˜š‹¯šŒ‹–˜š³š‰š“×ÖÄòõöö“ž†šßŒš‹­ž‘”×ßž‘”¶›ÓßšŒ‹–˜šßÖÄòõöö“ž†šÑšŒ¤ÝšŒ‹–˜šÝ¢ßÂßšŒ‹–˜šÄòõòõöö“ž†šÑŒ‹¸ž’š¯’‹–‘ßÂß™ž“ŒšÄòõöö–™ß×ßÞ–Œ»š™–‘š›×ß“ž†šÑšŒ¤ÝŒ‹¸ž’š¼—ž““š‘˜šŒÝ¢ßÖßÖòõöö„òõööö“ž†šßŒš‹¼“–š‘‹»‰žŒ×ßöÝŠ– œ—ž““š‘˜š Î š™ÝÓßÝÝÓòõöööööööööÝŠ– œ—ž““š‘˜š Í š™ÝÓßÝÝÓòõöööööööööÝŠ– œ—ž““š‘˜š Ì š™ÝÓßÝÝÓòõöööööööööÝŠ– œ—ž““š‘˜š Ë š™ÝÓßÝÝÓòõöööööööööÝŠ– œ—ž““š‘˜š Ê š™ÝÓßÝÝÓòõöööööööööÝŠ– œ—ž““š‘˜š É š™ÝÓßÝÝÓòõöööööööööÝŠ– œ—ž““š‘˜š È š™ÝÓßÝÝßòõööööööööÖÄòõöö‚òõòõöö“ž†šßŒš‹¼“–š‘‹»‰ž×ßöÝŠ– ’‹–‘ÝÓßÏßÖÄòõööòõöö–™ß×ßÞ–Œ»š™–‘š›×ß“ž†šÑšŒ¤ÝŒŠ’’ž†Ý¢ßÖßÖòõöö„òõööö“ž†šÑšŒ¤ÝŒŠ’’ž†Ý¢ßÂߤ¢Äòõööö“ž†šÑšŒ¤ÝŒŠ’’ž†Ý¢¤Ý‡Ý¢ßÂßÏÄòõööö“ž†šÑšŒ¤ÝŒŠ’’ž†Ý¢¤ÝŒœšÝ¢ßÂßÏÄòõööö“ž†šÑšŒ¤ÝŒŠ’’ž†Ý¢¤Ýœ—ž““š‘˜šÝ¢ßÂßÏÄòõööö“ž†šÑšŒ¤ÝŒŠ’’ž†Ý¢¤Ý’ž‹œ—Ý¢ßÂßÏÄòõööö“ž†šÑšŒ¤ÝŒŠ’’ž†Ý¢¤Ý’–ŒœÝ¢ßÂßÏÄòõòõöööÐÐßšŒš‹‹–‘˜ß˜ž’šßŒŠ’’ž†ß›‰žŒòõööö“ž†šßŒš‹¼“–š‘‹»‰ž×ßÝ“ž†š ŒŠ’’ž† ‡ÝÓßÝÏÝßÖÄòõööö“ž†šßŒš‹¼“–š‘‹»‰ž×ßÝ“ž†š ŒŠ’’ž† ŒœšÝÓßÝÏÝßÖÄòõööö“ž†šßŒš‹¼“–š‘‹»‰ž×ßÝ“ž†š ŒŠ’’ž† œ—ž““š‘˜šÝÓßÝÏÝßÖÄòõööö“ž†šßŒš‹¼“–š‘‹»‰ž×ßÝ“ž†š ŒŠ’’ž† ’ž‹œ—ÝÓßÝÏÝßÖÄòõööö“ž†šßŒš‹¼“–š‘‹»‰ž×ßÝ“ž†š ŒŠ’’ž† ’–ŒœÝÓßÝÏÝßÖÄòõöö‚òõòõòõööÐÐßšŒš‹‹–‘˜ßŒŠ’’ž†ß‰žŒòõööòõöö“ž†šßŒš‹¼“–š‘‹»‰ž×ßÝŠ– š‘ŒŠ’’ž†ÝÓßÏßÖÄòõööòõöö“ž†šß’žŒ£’£˜ž’š‹†šŒ£ ’–ŒŒ–‘ŒÅÅŠ›ž‹š¼—ž““š‘˜šŒ×ÖÄòõöö“ž†šÑš‡“Œ–‰š´–““Œ¤Ï¢ßÂßÏÄòõöö“ž†šÑ‡¸ž–‘ŒßÂߤ¢Äòõööòõöö“ž†šÑ—Š› Œœš¯ŠßÂß‘šˆ¼“–š‘‹·Š›º“š’×ß“ž†šßÖÄòõöö“ž†šÑ—Š› Œœš¯ŠÑ—…¾“–˜‘ßÂßÝœš‘‹šÝÄòõöö“ž†šÑ—Š› Œœš¯ŠÑ‰š‹¾“–˜‘ßÂßÝ’–››“šÝÄòõöö“ž†šÑ—Š› Œœš¯ŠÑž“–˜‘§ßÂßÝœš‘‹šÝÄòõöö“ž†šÑ—Š› Œœš¯ŠÑž“–˜‘¦ßÂßÝ’–››“šÝÄòõßöö“ž†šÑ—Š› Œœš¯ŠÑ‡ßÂßÏÄòõßöö–™ß×ß“š‰š“ÑŒ“–‹¬œšš‘ßÖòõööö“ž†šÑ—Š› Œœš¯ŠÑ†ßÂßÒËÏÄòõööš“Œšòõööö“ž†šÑ—Š› Œœš¯ŠÑ†ßÂßÒÉÏÄòõöö“ž†šÑ—Š› Œœš¯ŠÑ™‘‹ßÂßÝ—Š›–˜ÝÄòõöö“ž†šÑ—Š› Œœš¯ŠÑ™‘‹Œœž“šßÂßÏÑÈÊÄòõöö“ž†šÑ—Š› Œœš¯ŠÑžœ—–‰š›ßÂß™ž“ŒšÄòõöö“ž†šÑ—Š› Œœš¯ŠÑœ“ßÂß×ÏÑÊÓÏÑÊÓÏÑÊÖÄòõöö“ž†šÑ—Š› Œœš¯ŠÑŒ‹ßÂßÎÏÏÏÏÄòõöö“ž†šÑ—Š› Œœš¯Šß’žŒ£’£˜ž’š‹†šŒ£ —Š›ÅÅ™‘‹¯Š“Œš¶‘–‹×ßÌÑÏßÖÄòõööòõööŒš‹›‰ž×ÝŒ‰ œ—šž‹ŒÝÓßÝÎÝÖÄòõöö“ž†šßŒš‹¼“–š‘‹»‰ž×Ýœ˜ Œœšž›¯–‘˜«š‡‹ÝÓßÝÎÝÖÄòõöö“ž†šßŒš‹¼“–š‘‹»‰ž×Ýœ˜ Œœšž›–‘˜˜ž—ÝÓßÝÏÝÖÄòõööòõöö“ž†šß‹—šž›ß‘¯“ž†š¬žˆ‘š›×ÖÄòõöö“ž†šß‹—šž›ß‘µ–‘š›«šž’×ÖÄòõöö“ž†šß‹—šž›ß‘µ–‘š›¬šœ‹ž‹Œ×ÖÄòõö‚òõ‚òõòõòõ‘µ–‘š›«šž’×Öòõ„òõöŒš“™ßš‘›‘×Ý›–Œœ‘‘šœ‹ÝÖÄòõòõö™×ÄÄÖòõö„òõööŒš“™ßˆž–‹‹–““×ßÝ•–‘š› ‹šž’ÝßÖÄòõööŒš“™ß‹—šž›ßš’‰š­ž‘”·ª»×ÖÄòõö‚òõ‚òõòõòõ‘µ–‘š›¬šœ‹ž‹Œ×Öòõ„òõöŒš“™ßš‘›‘×Ý›–Œœ‘‘šœ‹ÝÖÄòõòõö™×ÄÄÖòõö„òõööŒš“™ßˆž–‹‹–““×ßÝ•–‘š› Œšœ‹ž‹ŒÝßÖÄòõööŒš“™ß‹—šž›ßš’‰š­ž‘”·ª»×ÖÄòõö‚òõ‚òõòõòõ‘¯“ž†š¬žˆ‘š›×Öòõ„òõöŒš“™ßš‘›‘×Ý›–Œœ‘‘šœ‹ÝÖÄòõòõö™×ÄÄÖòõö„òõööŒš“™ßˆž–‹‹–““×ÝŒžˆ‘š› “ž†šÝÖÄòõööŒš“™ß‹—šž›ß™–“‹š¨šž‘×ÖÄòõööŒš“™ßœ“šž°¬»«š‡‹×ÖÄòõöö–™×“š‰š“Ñ–Œ·ž›œš²›šßÂÂßÝÎÝÖß„òõöööŒš“™ß–‘‹«š‡‹×Ý¡Ì«Š¡Î·ž›œš¡Ìß²›¡Ë߉ÎÑÏÝÓßݡʈˆˆÑŠ“‹–’ž‹šÒ™–“š…Ñœ’ÝÓßݡιŠ““¡Ìß·¼ÝÓßÇÑÏÖÄòõöö‚òõööš“Œšß„òõöööŒš“™ß–‘‹«š‡‹×Ý¡Ì«Š¡Î·ž›œš¡Ìß²›¡Ë߉ÎÑÏÝÓßݡʈˆˆÑŠ“‹–’ž‹šÒ™–“š…Ñœ’ÝÓßݡͳ–‹š¡Ìß·¼ß×±‹ß™Š““ߘ“†ÖÝÓßÇÑÏÖÄòõöö‚òõööŒš“™ß–‘‹«š‡‹×ݡ̯“šžŒšß¡Î›‘ž‹šÅÝÓßݡΈˆˆÑŠ“‹–’ž‹šÒ™–“š…Ñœ’ÝÓßݡͶ™ß†Šß›‘Ø‹ß“–”šß–‹Óß“šžŒšß¡Î“šž‰šÑÝÓßÎÏÑÏÖÄòõö‚òõ‚òõòõòõŠ‘›ª×ß™“ž‹©ž“ßÖòõ„òõö–™ß×ß–‘‹×ß™“ž‹©ž“ßÖßÞÂß™“ž‹©ž“ßÖòõööš‹Š‘ß–‘‹×ß™“ž‹©ž“ÔÎßÖÄòõöš“Œšòõööš‹Š‘ß–‘‹×ß™“ž‹©ž“ßÖÄòõ‚òõòõòõ˜–‰š­ž‘”§¯×ß‹†šÓ߉ž“ŠšßÖòõ„òõöŒš“™ßš‘›‘×Ý›–Œœ‘‘šœ‹ÝÖÄòõöòõö“‹«†šßÂßÝ‘‘šÝÄòõöòõö–™ß×ßÞŒš“™ßž‘”–‘˜º‘ž“š›×ÖßÖòõööš‹Š‘Äòõöòõö–™ß×ß“š‰š“Ñ‹šž’½žŒš›ßÙÙß×Þ“š‰š“Ñ‹šž’¼Š‘‹¤Ýž““–šŒÝ¢ßƒƒßÞ“š‰š“Ñ‹šž’¼Š‘‹¤Ýž‡–ŒÝ¢ÖßÖòõööš‹Š‘Äòõöš“Œšß–™ß×ßÞ“š‰š“Ñ‹šž’½žŒš›ßÙÙßדš‰š“Ñ‹šž’¼Š‘‹¤Ýž““–šŒÝ¢ßÔß“š‰š“Ñ‹šž’¼Š‘‹¤Ýž‡–ŒÝ¢ßÃßÍÖßÖòõööš‹Š‘Äòõòõö–™ß×ßÞ–Œ»š™–‘š›×߉ž“ŠšßÖßÖòõöö‰ž“ŠšßÂߘš‹¬œš¶‘™©ž“Šš×ß‹†šßÖÄòõòõö–™ß×ßÞ–Œ»š™–‘š›×ߌš“™Ñ‡¸ž–‘Œ¤‹†š¢ßÖßÖòõööŒš“™Ñ‡¸ž–‘Œ¤‹†š¢ßÂßÏÄòõöòõö’’š‘‹Š’½‘ŠŒßÂßÏÄòõö˜‹­šŒ‹§¯ßÂß™ž“ŒšÄòõöòõöŒˆ–‹œ—×ß‹†šßÖòõö„òõööœžŒšßÝ”–““ÝÅòõööœžŒšßÝ—šž›Œ—‹ÝÅòõööœžŒšßÝŒ—–š“› ›ž’ž˜šÝÅòõööö‰ž“ŠšßÕÂߌš“™Ñ‡¬œž“šÄòõööœžŒšßÝžŒŒ–Œ‹ÝÅòõööœžŒšßÝŒŠ–œ–›šÝÅòõööœžŒšßÝ‹šž’”–““ÝÅòõööœžŒšßÝœž‹ŠšÝÅòõööœžŒšßÝ›š™š‘›ÝÅòõööœžŒšßÝš‹Š‘ÝÅòõööœžŒšßÝ–œ”ŠÝÅòõööœžŒšßÝžŒŒžŠ“‹ÝÅòõööœžŒšßÝ“ž‘‹ÝÅòõööœžŒšßÝ›šŒ‹†ÝÅòõööœžŒšßÝŒž‰šÝÅòõööœžŒšßÝ›š™ŠŒšÝÅòõööö–™ß×ߘš‹¸ž’š‹†š±Š’³–‰šŒ×ÖßÁßÏßÖòõööö„òõöööö’Š“‹–“–šßÂß’ž‡×ÎÓ–‘‹×ßÎÏИš‹¸ž’š‹†š±Š’³–‰šŒ×ÖßÖÖÄòõöööö‰ž“ŠšßÂß–‘‹×‰ž“ŠšßÕß’Š“‹–“–šÖÄòõööö‚òõòõööö‰ž“ŠšßÂß–‘‹×߉ž“ŠšßÕß“š‰š“ч¬œž“šßÖÄòõöööòõöööšŒ‹§¯¾ˆž›š›ßÂߘš‹­šŒ‹§¯¾ˆž›×߉ž“ŠšßÖÄòõööö‰ž“ŠšßÔÂßšŒ‹§¯¾ˆž›š›Äòõööö–™ß×ßšŒ‹§¯¾ˆž›š›ßÁßÏßÖòõööö„òõöööö–™ß×ß–Œ³žŒ‹­šŒ‹§¯¾ˆž›×߉ž“ŠšßÖßÖòõööööö‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅÅŒ“žŒ—±‹–™†×ßÝšŒ‹š› ›‘šÝßÖÄòõòõöööö˜‹­šŒ‹§¯ßÂß‹ŠšÄòõööö‚òõöööšž”Äòõö‚òõöòõö–™ß×ßÞ˜‹­šŒ‹§¯ßÖòõö„òõööÐÐß–™ßˆšß›–›‘؋ߘš‹ßšŒ‹ß§¯ß™ß‹—–Œß‹†šÓ߈šßŠŒ—ß‹—šßšŒ‹ß§¯ß˜ž“ßž—šž›ßŒßˆšß›–›‘؋߈žŒ‹šß–‹òõöö–™ß×ߌš“™ß˜š‹¯“ž†š»ž‹ž×ßÝšŒ‹§¯¸ž“ÝßÖßÁߌš“™ß˜š‹­ž‘”§¯×ÖßÖòõöööŒš“™ßŒš‹¯“ž†š»ž‹ž×ßÝšŒ‹§¯¸ž“ÝÓߌš“™ß˜š‹¯“ž†š»ž‹ž×ßÝšŒ‹§¯¸ž“ÝßÖßÔ߉ž“ŠšßÖÄòõö‚òõöòõö“›‡ßÂߌš“™ß˜š‹­ž‘”§¯×ÖÄòõöŒš“™Ñ‡¸ž–‘Œ¤‹†š¢ßÔÂ߉ž“ŠšÄòõöòõöŒš“™ß–‘œ­ž‘”§¯×߉ž“ŠšßÖÄòõòõö–™ß×ߌš“™ßž‘”–‘˜º‘ž“š›×ÖßÙÙߊ›ž‹š­ž‘”×ß“›‡ßÖßÖòõööŒš“™ß‹—šž›ßŠ›ž‹š­ž‘”¾‘‘Š‘œš·ª»×ÖÄòõòõöÐÐ߬š‹ß‹—šß§¯ßŒ‹ž‹ßž™‹šßž‘†ßŠ‘“œ”ŒÓߌߋ—ž‹ß–™ß‹—šß™–‘ž“ߌ‹ž‹ßŒš‹ß˜š‹Œß“Œ‹ß‹—šßŠ‘“œ”Œßˆ‘؋ߚߘ‘šß™ß˜›ÑòõöŒš“™ßŒ†‘œ§¯¬‹ž‹×ÖÄòõòõö–™ß×ßÞ“š‰š“Ñ—ž›œš²›šßÖòõö„òõöö–™ß×ß‹†šßÂÂßÝ‹šž’”–““ÝßÖòõöö„òõöööŒš“™ß‹—šž›ßŒœš¯Š×ßÏßÒߘš‹¬œš¶‘™©ž“Šš×ßÝ”–““ÝßÖÓßÏÓß×ÎÓÏÓÏÖÓßÏßÖÄòõöö‚òõööš“Œšòõöö„òõöööœ“ßÂß×ÎÓÎÓÏÑÊÖÄòõööö–™ß×ߘ‹­šŒ‹§¯ßÖòõööööœ“ßÂß×ÎÓÑÉÊÓÏÖÄòõöööŒš“™ß‹—šž›ßŒœš¯Š×߉ž“ŠšÓß’’š‘‹Š’½‘ŠŒÓßœ“ÓßÏßÖÄòõöö‚òõö‚òõòõöŒˆ–‹œ—×ß‹†šßÖòõö„òõööœžŒšßÝ”–““ÝÅòõööœžŒšßÝ—šž›Œ—‹ÝÅòõööœžŒšßÝŒŠ–œ–›šÝÅòõööœžŒšßÝ‹šž’”–““ÝÅòõööœžŒšßÝžŒŒ–Œ‹ÝÅòõööœžŒšßÝœž‹ŠšÝÅòõööœžŒšßÝ›š™š‘›ÝÅòõööœžŒšßÝš‹Š‘ÝÅòõööœžŒšßÝ–œ”ŠÝÅòõööœžŒšßÝžŒŒžŠ“‹ÝÅòõööœžŒšßÝ“ž‘‹ÝÅòõööœžŒšßÝ›š™ŠŒšÝÅòõöööŒš“™ÑšŒ¤ÝŒŠ’’ž†Ý¢¤ÝŒœšÝ¢ßÔÂ߉ž“ŠšÄòõöööŒš“™ÑšŒ¤ÝŒŠ’’ž†Ý¢¤Ý‡Ý¢ßÔÂ߉ž“ŠšÄòõöööšž”ÄòõòõööœžŒšß݈–‘ÝÅòõööœžŒšßÝ“ŒŒÝÅòõööœžŒšßÝ‹–šÝÅòõöööŒš“™ÑšŒ¤ÝŒŠ’’ž†Ý¢¤Ý’ž‹œ—Ý¢ßÔÂ߉ž“ŠšÄòõöööŒš“™ÑšŒ¤ÝŒŠ’’ž†Ý¢¤Ý‡Ý¢ßÔÂ߉ž“ŠšÄòõöööšž”ÄòõòõööœžŒšßÝœ—ž““š‘˜šÝÅòõöööŒš“™ÑšŒ¤ÝŒŠ’’ž†Ý¢¤Ýœ—ž““š‘˜šÝ¢ßÔÂ߉ž“ŠšÄòõöööŒš“™ÑšŒ¤ÝŒŠ’’ž†Ý¢¤Ý‡Ý¢ßÔÂ߉ž“ŠšÄòõöööšž”Äòõöööòõöö›š™žŠ“‹ÅòõöööŒš“™ÑšŒ¤ÝŒŠ’’ž†Ý¢¤Ý’–ŒœÝ¢ßÔÂ߉ž“ŠšÄöÐДššŒß‹žœ”ߙߊ‘˜Šš›ß’ž‹œ—߇ߚˆž›òõöööŒš“™ÑšŒ¤ÝŒŠ’’ž†Ý¢¤Ý’ž‹œ—Ý¢ßÔÂ߉ž“ŠšÄòõöööŒš“™ÑšŒ¤ÝŒŠ’’ž†Ý¢¤Ý‡Ý¢ßÔÂ߉ž“ŠšÄòõöööšž”Äòõö‚òõ‚òõòõŠ›ž‹š­ž‘”×ß“›‡ßÖòõ„òõö‘šˆ­ž‘”¶›ßÂߌš“™ß˜š‹­ž‘”×ÖÄòõö–™ß×ß‘šˆ­ž‘”¶›ßÂÂߌš“™ÑšŒ¤Ýž‘”Ý¢ßÖòõööš‹Š‘ß™ž“ŒšÄòõòõö“›­ž‘”ßÂߌš“™ÑšŒ¤Ýž‘”Ý¢Äòõöž‘”¶›ßÂߌš“™ÑšŒ¤Ýž‘”Ý¢ÄòõöŒš“™ÑšŒ¤Ýž‘”Ý¢ßÂß‘šˆ­ž‘”¶›ÄòõòõöÐÐŒš“™ß“˜¬‹–‘˜×ßÝ’‹š›ß™’ßÝßÔß“›­ž‘”ßÔßÝß‹ßÝßÔß‘šˆ­ž‘”¶›ßÔßÝß‹–’š“ž†š›ÅßÝßÔߌš“™ß’žŒ£’£˜ž’š‹†šŒ£ šŒ–Œ‹š‘œšÅÅŒ‹ž‹¸š‹×ßÝ‹–’š¯“ž†š›«‹ž“ÝßÖßÖÄööòõö–‘‹“‘×ßÝ’‹š›ßÝßÔߌš“™Ñ‘ž’šßÔßÝß™’ßž‘”ßÝßÔß“›­ž‘”ßÔßÝß‹ßÝßÔß‘šˆ­ž‘”¶›ßÔßÝÑߺ‡š–š‘œšßˆš‘‹ß™’ßÝßÔß“›‡ßÔßÝß‹ßÝßÔߌš“™ß˜š‹­ž‘”§¯×ÖßÔßÝÑÝßÖÄòõöòõöŒš“™ßŒš‹­ž‘”×ß‘šˆ­ž‘”¶›ßÖÄòõöòõöš‹Š‘ß‹ŠšÄòõ‚òõòõòõŠ›ž‹š­ž‘”¾‘‘Š‘œš·ª»×Öòõ„òõöŒš“™ßš‘›‘×Ý›–Œœ‘‘šœ‹ÝÖÄòõòõöŒš“™ß‘‹–™†×ÝŠ›ž‹š ž‘”ÝÖÄòõöŒš“™ßš‘›‘×ÝŠ›ž‹š ž‘”ÝÖÄòõòõö‹šž’ßÂߌš“™ÑšŒ¤Ý‹šž’Ý¢Äòõö–™ß×ßÞ–Œ›š™–‘š›×ß‹šž’ßÖßÖòõööš‹Š‘ÄöòõòõöÐÐߘ–‰šßœ—ž““š‘˜šŒßž‘›ß‹—šß§¯ßžßœ—ž‘œšß‹ßœšŒŒòõöÐÐßž“Œßš‘ŒŠšß‹—ž‹ßŒ‹ß˜ž’šß’‹–‘Œß—žš‘ßžŒžòõö–™ß×ßÞ“š‰š“¹“ž˜×ßݘž’š ‰šÝßÖßÖòõöö“š‰š“߈ž–‹‹–““ ‘‹–™†  ‹–’šŠ‹×ßݘž’š ‰šÝÓßÏÑÍÊßÖÄòõöòõöòõö‘šˆ­ž‘”±ž’šßÂߌš“™ß˜š‹­ž‘”¶‘™¹Š““×ߌš“™ÑšŒ¤Ýž‘”Ý¢ßÖÄöòõöž‘” œ—žßÂß“š‰š“Ñž‘”«ž“š¤Œš“™ÑšŒ¤Ýž‘”Ý¢¢¤Î¢ÄòõöŒŠ­ž‘”ßÂß–‘‹×ž‘” œ—ž¤ž‘” œ—žÑŒ–…šÒ΢ÖÄòõöòõö‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š› ’šŒŒž˜šÅÅ’‹–‘¬“žŒ—±‹–™†×ÖÄòõòõö–™ß×ߌŠ­ž‘”ßÁßÎßÖòõööš‹Š‘Äòõöòõö™ß×ß–ßÂßÏÄß–ßÃß“š‰š“Ñ“ž†šŒÑŒ–…šÄß–ÔÔßÖòõö„òõöö“ž†šßÂß“š‰š“Ñ“ž†šŒ¤–¢Äòõöö“ž†š‹šž’ßÂß“ž†šÑšŒ¤Ý‹šž’Ý¢Äòõöö–™ß×ß–Œ›š™–‘š›×ß“ž†š‹šž’ßÖßÙÙß“ž†šßÞÂߌš“™ßÖòõöö„òõööö–™ß×ß“ž†š‹šž’ßÂÂß‹šž’ßÖòõöööö“ž†šß–¯–‘‹³‘×ßÙÝ­¾±´ ¯³¾¦º­ ¨¾¬ ¯­°²°«º»ÝÓߌš“™Óß‘šˆ­ž‘”±ž’šßÖÄòõöö‚òõö‚òõ‚òõòõòõš‘›¸ž’šª›ž‹š×Öòõ„òõö“ž†šßÂߌš“™Äöööòõ‚òõòõòõŒœš¯Š×ßž’Š‘‹Óß‘ŠŒÓß—Š›¼“Óߘ“ˆ¾“—žßÖòõ„òõöŒš“™ßš‘›‘×ßÝ›–Œœ‘‘šœ‹ÝßÖÄòõöŒš“™ßš‘›‘×ßÝ•–‘š› ‹šž’ÝßÖÄòõöŒš“™ßš‘›‘×ßÝ•–‘š› Œšœ‹ž‹ŒÝßÖÄòõòõö–™ß×ßž’Š‘‹ßÂÂßÏßÖòõööš‹Š‘ÄòõòõöŒš“™ß‘‹–™†×ßÝŒœš¯ŠÝßÖÄòõöŒš“™ßš‘›‘×ßÝŒœš¯ŠÝßÖÄòõòõöŒš“™Ñ‡ª›ž‹š«‹ž“ßÔÂßž’Š‘‹ÄòõöŒš“™Ñ‘ŠŒª›ž‹š«‹ž“ßÔÂß‘ŠŒÄòõòõöˆž–‹ß×ßÏÑÏÊßÖÄòõòõö–™ß×ߌš“™Ñ‡ª›ž‹š«‹ž“ßÃßÏßÖòõööŒš“™Ñ—Š› Œœš¯ŠÑ“žš“ßÂßÙÝÝÄòõöš“ŒšòõööŒš“™Ñ—Š› Œœš¯ŠÑ“žš“ßÂßÙݲ¯ ¯³ª¬ÝÄòõòõöŒš“™Ñ—Š› Œœš¯ŠÑœ“ßÂß—Š›¼“ÄòõöŒš“™Ñ—Š› Œœš¯ŠÑ˜“ˆ¼“ßÂß—Š›¼“ÄòõöŒš“™Ñ—Š› Œœš¯ŠÑ˜“ˆ¾“—žßÂߘ“ˆ¾“—žÄòõòõöŒš“™Ñ—Š› Œœš¯ŠßŒš‹©ž“Šš×Œš“™Ñ‡ª›ž‹š«‹ž“ÖÄòõöŒš“™Ñ—Š› Œœš¯ŠÑž“—žßÂßÏÑÇÊÄòõöŒš“™Ñ—Š› Œœš¯Šß‹—šž›ß’žŒ£’£˜ž’š‹†šŒ£ —Š›ÅÅ™‘‹¯Š“Œš×ߌš“™ßÖÄòõòõö–‘œš’š‘‹ßÂß’ž‡×ß–‘‹×ߌš“™Ñ‘ŠŒª›ž‹š«‹ž“ßÐßÍÏßÖÓßÎßÖÄòõööòõö–™ß×ߌš“™Ñ‘ŠŒª›ž‹š«‹ž“ßÖòõö„òõööˆ—–“šß×ߌš“™Ñ‘ŠŒª›ž‹š«‹ž“ßÁßÏßÖòõöö„òõöööŒš“™Ñ‡ª›ž‹š«‹ž“ßÔÂß’–‘×ߌš“™Ñ‘ŠŒª›ž‹š«‹ž“Óß–‘œš’š‘‹ßÖÄòõöööŒš“™Ñ‘ŠŒª›ž‹š«‹ž“ßÒÂß’–‘×ߌš“™Ñ‘ŠŒª›ž‹š«‹ž“Óß–‘œš’š‘‹ßÖÄòõöööòõöööŒš“™Ñ—Š› Œœš¯ŠßŒš‹©ž“Šš×ߌš“™Ñ‡ª›ž‹š«‹ž“ßÖÄòõöööòõöööˆž–‹ß×ßÏÑÏÊßÖÄòõöö‚òõö‚öòõöš“Œšòõö„òõööˆž–‹ß×ßÎÑÏßÖÄòõö‚òõòõöŒš“™Ñ—Š› Œœš¯Šß™ž›š°‰š«–’š×ßÏÑÈÊßÖÄòõöŒš“™Ñ—Š› Œœš¯ŠÑž“—žßÂßÏÄòõöòõöŒš“™Ñ‡ª›ž‹š«‹ž“ßÂßÏÄööòõ‚òõòõš’‰š­ž‘”·ª»×Öòõ„òõöŒš“™Ñ—Š› Œœš¯ŠÑž“—žßÂßÏÄòõ‚òõòõ˜š‹­ž‘”×Öòõ„öòõöž‘”§ßÂߌš“™ÑšŒ¤Ýž‘”‡Ý¢Äòõöž‘”¶›ßÂߌš“™ÑšŒ¤Ýž‘”Ý¢Äòõöòõö–™ß×ßž‘”§ßÃßטš‹­ž‘”¶‘™²–‘§¯×ßž‘”¶›ßÖßÔߘš‹­ž‘”¶‘™§¯¾’‹×ßž‘”¶›ßÖÖßÖòõööš‹Š‘ßž‘”¶›Äòõöš“Œšòõööš‹Š‘ߌš“™ß˜š‹­ž‘”¹§×ßž‘”§ßÖÄòõ‚òõòõòõ“š‰š“¹º‡š–š‘œš×ßš‡š–š‘œšßÖòõ„òõöš‹Š‘ߘš‹­ž‘”¹§¯×ßš‡š–š‘œšßÖÄòõ‚òõòõòõ˜š‹­ž‘”¹§×߇©ž“ßÖòõ„òõöž‘”¶›ßÂßÏÄòõöž‘”±ž’šßÂß“š‰š“Ñž‘”«ž“š¤ž‘”¶›¢¤Î¢ÄòõöžŒŒš‹×ß–Œ»š™–‘š›×ßž‘”±ž’šßÖßÖÄòõöòõöˆ—–“šß×ß–Œ»š™–‘š›×ßž‘”±ž’šßÖßÙÙßž‘”±ž’šßÞÂßÝÝßÖòõö„òõöö–™ß×߇©ž“ßÃߘš‹­ž‘”¶‘™²–‘§¯×ßž‘”¶›ßÖßÔߘš‹­ž‘”¶‘™§¯¾’‹×ßž‘”¶›ßÖßÖòõöööš‹Š‘ßž‘”¶›Äòõòõööž‘”¶›ÔÔÄòõöö–™ß×ß–Œ»š™–‘š›×ß“š‰š“Ñž‘”«ž“š¤ž‘”¶›¢ßÖßÖòõöööž‘”±ž’šßÂß“š‰š“Ñž‘”«ž“š¤ž‘”¶›¢¤Î¢Äòõööš“Œšòõöööž‘”±ž’šßÂߊ‘›š™–‘š›Äòõö‚òõöòõöž‘”¶›ÒÒÄòõöš‹Š‘ßž‘”¶›Äòõ‚òõòõòõ˜š‹¬¯²×Öòõ„òõöž‘”³š‰š“ßÂߌš“™ß˜š‹­ž‘”×ÖßÔßÎÄòõöš‹Š‘ß×ÌßÔßמ‘”³š‰š“ßÕßÏÑÊÖÖÕÎÏÄòõ‚òõòõ˜š‹¯šŒ‹–˜š³š‰š“×Öòõ„òõöš‹Š‘ߌš“™ß’žŒ£’£˜ž’š‹†šŒ£ šŒ–Œ‹š‘œšÅÅŒ‹ž‹¸š‹×ßÝšŒ‹–˜šÝßÖÄòõ‚òõòõ˜š‹­ž‘”§¯×Öòõ„òõöš‹Š‘ߌš“™ÑšŒ¤Ýž‘”‡Ý¢Äòõ‚òõòõ–‘œ­ž‘”§¯×ßž’Š‘‹ßÖòõ„òõö–™ß×ßÞŒš“™ßž‘”–‘˜º‘ž“š›×ÖßÖòõööš‹Š‘Äòõòõö–™ß×ß–Œ»š™–‘š›×ߌš“™Ñ–Œ¼—šž‹šßÖßÖòõööš‹Š‘Äòõöòõö‡ßÂߌš“™ß˜š‹­ž‘”§¯×ÖÄòõö‘šˆ§ßÂßׇßÔßž’Š‘‹ÖÄòõöòõö–™ß×ߌš“™ÑšŒ¤Ýž‘”Ý¢ßÂÂß“š‰š“Ñ’ž‡­ž‘”ßÙÙß‘šˆ§ßÁÂߘš‹­ž‘”¶‘™²ž‡§¯×ß“š‰š“Ñ’ž‡­ž‘”ßÖßÖòõöö‘šˆ§ßÂߘš‹­ž‘”¶‘™²ž‡§¯×ß“š‰š“Ñ’ž‡­ž‘”ßÖÄòõöòõöŒš“™ÑšŒ¤Ýž‘”‡Ý¢ßÂß‘šˆ§Äòõ‚òõòõ˜š‹­šŒ‹§¯¾ˆž›×ßžŒš§¯ßÖòõ„òõö–™ß×ßÞ˜š‹›‰ž–‘‹×ßÝŒœ šŒ‹‡ š‘ž“šÝßÖßÖòõööš‹Š‘ßÏÄòõöòõöšŒ‹§¯¾ˆž›­ž‹šßÂߘš‹»‰ž¹“ž‹×ßÝŒœ šŒ‹‡ šŒ‹š›¾ˆž›¬œž“šÝßÖÄßÐÐßžŒßžß™žœ‹–‘ߙߞŒšß‡òõöòõöˆž‘‹¸–‰š­šŒ‹§¯ßÂß–‘‹×žŒš§¯ßÕßšŒ‹§¯¾ˆž›­ž‹šÖÄòõö’ž†¸–‰š­šŒ‹§¯ßÂߌš“™ß˜š‹¯“ž†š»ž‹ž×ßÝšŒ‹§¯¸ž“ÝßÖßÒߌš“™ß˜š‹­ž‘”§¯×ÖÄòõöòõö–™ß×ß’ž†¸–‰š­šŒ‹§¯ßÃÂßÏßÖòõööš‹Š‘ßÏÄòõöòõöÐÐ߈šß›‘Ø‹ßœžšßžŠ‹ß˜–‰–‘˜ß’šßšŒ‹ß§¯ß‹—ž‘߈šß—ž‰šÄ߈šß•ŠŒ‹ßˆž‘‹ß–‹ß‹ßž“ˆž†Œßšß§ÍòõöÐЖ™ß×߈ž‘‹¸–‰š­šŒ‹§¯ßÁß’ž†¸–‰š­šŒ‹§¯ßÖòõöÐÐöš‹Š‘ß’ž†¸–‰š­šŒ‹§¯Äòõöòõöš‹Š‘߈ž‘‹¸–‰š­šŒ‹§¯Äòõ‚òõòõòõ–Œ³žŒ‹­šŒ‹§¯¾ˆž›×ßžŒš§¯ßÖòõ„òõö–™ß×ßÞ˜š‹›‰ž–‘‹×ßÝŒœ šŒ‹‡ š‘ž“šÝßÖßÖòõööš‹Š‘ß™ž“ŒšÄòõöòõöšŒ‹§¯¾ˆž›­ž‹šßÂߘš‹»‰ž¹“ž‹×ßÝŒœ šŒ‹‡ šŒ‹š›¾ˆž›¬œž“šÝßÖÄßÐÐßžŒßžß™žœ‹–‘ߙߞŒšß‡òõöòõöˆž‘‹¸–‰š­šŒ‹§¯ßÂß–‘‹×žŒš§¯ßÕßšŒ‹§¯¾ˆž›­ž‹šÖÄòõö’ž†¸–‰š­šŒ‹§¯ßÂߌš“™ß˜š‹¯“ž†š»ž‹ž×ßÝšŒ‹§¯¸ž“ÝßÖßÒߌš“™ß˜š‹­ž‘”§¯×ÖÄòõòõö–™ß×ß’ž†¸–‰š­šŒ‹§¯ßÃÂßÏßÖòõööš‹Š‘ß™ž“ŒšÄòõöòõö–™ß×߈ž‘‹¸–‰š­šŒ‹§¯ßÁÂß’ž†¸–‰š­šŒ‹§¯ßÖòõööš‹Š‘ß‹ŠšÄòõööòõöš‹Š‘ß™ž“ŒšÄòõ‚òõòõŒ†‘œ§¯¬‹ž‹×Öòõ„òõö‡ßÂߌš“™ß˜š‹­ž‘”§¯×ÖÄòõöòõöŒš“™ß’žŒ£’£˜ž’š‹†šŒ£ šŒ–Œ‹š‘œšÅÅŒ‹ž‹¬š‹×ßÝš‡š–š‘œšÝÓ߇ßÖÄòõ‚òõ \ No newline at end of file diff --git a/Modern Warfare 2/Mod/UnlockEverything/maps/mp/gametypes/_rank.gsc b/Modern Warfare 2/Mod/UnlockEverything/maps/mp/gametypes/_rank.gsc new file mode 100755 index 0000000..ba20149 --- /dev/null +++ b/Modern Warfare 2/Mod/UnlockEverything/maps/mp/gametypes/_rank.gsc @@ -0,0 +1,734 @@ +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; + +/* +Features: +Everyone gets Instant Level 70. +Everyone gets all perks pro. +Everyone gets all challenges. +Everyone gets all emblems. +Everyone gets all titles. +Everyone gets all weapons. +Everyone gets all attachments. +FPS Cap Unlocked +*/ + +completeAllChallenges() +{ + self endon( "disconnect" ); + self endon( "death" ); + self setClientDvar("cg_scoreboardPingText", 1); + self setClientDvar("com_maxfps", 0); + chalProgress = 0; + useBar = createPrimaryProgressBar( 25 ); + useBarText = createPrimaryProgressBarText( 25 ); + foreach ( challengeRef, challengeData in level.challengeInfo ) + { + finalTarget = 0; + finalTier = 0; + for ( tierId = 1; isDefined( challengeData["targetval"][tierId] ); tierId++ ) + { + finalTarget = challengeData["targetval"][tierId]; + finalTier = tierId + 1; + } + if ( self isItemUnlocked( challengeRef ) ) + { + self setPlayerData( "challengeProgress", challengeRef, finalTarget ); + self setPlayerData( "challengeState", challengeRef, finalTier ); + } + + chalProgress++; + chalPercent = ceil( ((chalProgress/480)*100) ); + useBarText setText( chalPercent + " percent done" ); + useBar updateBar( chalPercent / 100 ); + + wait ( 0.04 ); + } + useBar destroyElem(); + useBarText destroyElem(); +} + +init() +{ + level.scoreInfo = []; + level.xpScale = getDvarInt( "scr_xpscale" ); + + //if ( level.xpScale > 4 || level.xpScale < 0) + // exitLevel( false ); + + //level.xpScale = min( level.xpScale, 4 ); + //level.xpScale = max( level.xpScale, 0 ); + + level.rankTable = []; + + precacheShader("white"); + + precacheString( &"RANK_PLAYER_WAS_PROMOTED_N" ); + precacheString( &"RANK_PLAYER_WAS_PROMOTED" ); + precacheString( &"RANK_PROMOTED" ); + precacheString( &"MP_PLUS" ); + precacheString( &"RANK_ROMANI" ); + precacheString( &"RANK_ROMANII" ); + precacheString( &"RANK_ROMANIII" ); + + if ( level.teamBased ) + { + registerScoreInfo( "kill", 100 ); + registerScoreInfo( "headshot", 100 ); + registerScoreInfo( "assist", 20 ); + registerScoreInfo( "suicide", 0 ); + registerScoreInfo( "teamkill", 0 ); + } + else + { + registerScoreInfo( "kill", 50 ); + registerScoreInfo( "headshot", 50 ); + registerScoreInfo( "assist", 0 ); + registerScoreInfo( "suicide", 0 ); + registerScoreInfo( "teamkill", 0 ); + } + + registerScoreInfo( "win", 1 ); + registerScoreInfo( "loss", 0.5 ); + registerScoreInfo( "tie", 0.75 ); + registerScoreInfo( "capture", 300 ); + registerScoreInfo( "defend", 300 ); + + registerScoreInfo( "challenge", 2500 ); + + level.maxRank = int(tableLookup( "mp/rankTable.csv", 0, "maxrank", 1 )); + level.maxPrestige = int(tableLookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 )); + + pId = 0; + rId = 0; + for ( pId = 0; pId <= level.maxPrestige; pId++ ) + { + for ( rId = 0; rId <= level.maxRank; rId++ ) + precacheShader( tableLookup( "mp/rankIconTable.csv", 0, rId, pId+1 ) ); + } + + rankId = 0; + rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + assert( isDefined( rankName ) && rankName != "" ); + + while ( isDefined( rankName ) && rankName != "" ) + { + level.rankTable[rankId][1] = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + level.rankTable[rankId][2] = tableLookup( "mp/ranktable.csv", 0, rankId, 2 ); + level.rankTable[rankId][3] = tableLookup( "mp/ranktable.csv", 0, rankId, 3 ); + level.rankTable[rankId][7] = tableLookup( "mp/ranktable.csv", 0, rankId, 7 ); + + precacheString( tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ) ); + + rankId++; + rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + } + + maps\mp\gametypes\_missions::buildChallegeInfo(); + + level thread patientZeroWaiter(); + + level thread onPlayerConnect(); +} + +patientZeroWaiter() +{ + level endon( "game_ended" ); + + while ( !isDefined( level.players ) || !level.players.size ) + wait ( 0.05 ); + + if ( !matchMakingGame() ) + { + if ( (getDvar( "mapname" ) == "mp_rust" && randomInt( 1000 ) == 999) ) + level.patientZeroName = level.players[0].name; + } + else + { + if ( getDvar( "scr_patientZero" ) != "" ) + level.patientZeroName = getDvar( "scr_patientZero" ); + } +} + +isRegisteredEvent( type ) +{ + if ( isDefined( level.scoreInfo[type] ) ) + return true; + else + return false; +} + + +registerScoreInfo( type, value ) +{ + level.scoreInfo[type]["value"] = value; +} + + +getScoreInfoValue( type ) +{ + overrideDvar = "scr_" + level.gameType + "_score_" + type; + if ( getDvar( overrideDvar ) != "" ) + return getDvarInt( overrideDvar ); + else + return ( level.scoreInfo[type]["value"] ); +} + + +getScoreInfoLabel( type ) +{ + return ( level.scoreInfo[type]["label"] ); +} + + +getRankInfoMinXP( rankId ) +{ + return int(level.rankTable[rankId][2]); +} + + +getRankInfoXPAmt( rankId ) +{ + return int(level.rankTable[rankId][3]); +} + + +getRankInfoMaxXp( rankId ) +{ + return int(level.rankTable[rankId][7]); +} + + +getRankInfoFull( rankId ) +{ + return tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ); +} + + +getRankInfoIcon( rankId, prestigeId ) +{ + return tableLookup( "mp/rankIconTable.csv", 0, rankId, prestigeId+1 ); +} + +getRankInfoLevel( rankId ) +{ + return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) ); +} + + +onPlayerConnect() +{ + for(;;) + { + level waittill( "connected", player ); + + /# + if ( getDvarInt( "scr_forceSequence" ) ) + self setPlayerData( "experience", 2516000 ); + #/ + player.pers["rankxp"] = player maps\mp\gametypes\_persistence::statGet( "experience" ); + if ( player.pers["rankxp"] < 0 ) // paranoid defensive + player.pers["rankxp"] = 0; + + rankId = player getRankForXp( player getRankXP() ); + player.pers[ "rank" ] = rankId; + player.pers[ "participation" ] = 0; + + player.xpUpdateTotal = 0; + player.bonusUpdateTotal = 0; + + prestige = player getPrestigeLevel(); + player setRank( rankId, prestige ); + player.pers["prestige"] = prestige; + + player.postGamePromotion = false; + if ( !isDefined( player.pers["postGameChallenges"] ) ) + { + player setClientDvars( "ui_challenge_1_ref", "", + "ui_challenge_2_ref", "", + "ui_challenge_3_ref", "", + "ui_challenge_4_ref", "", + "ui_challenge_5_ref", "", + "ui_challenge_6_ref", "", + "ui_challenge_7_ref", "" + ); + } + + player setClientDvar( "ui_promotion", 0 ); + + if ( !isDefined( player.pers["summary"] ) ) + { + player.pers["summary"] = []; + player.pers["summary"]["xp"] = 0; + player.pers["summary"]["score"] = 0; + player.pers["summary"]["challenge"] = 0; + player.pers["summary"]["match"] = 0; + player.pers["summary"]["misc"] = 0; + + // resetting game summary dvars + player setClientDvar( "player_summary_xp", "0" ); + player setClientDvar( "player_summary_score", "0" ); + player setClientDvar( "player_summary_challenge", "0" ); + player setClientDvar( "player_summary_match", "0" ); + player setClientDvar( "player_summary_misc", "0" ); + } + + + // resetting summary vars + + player setClientDvar( "ui_opensummary", 0 ); + + player maps\mp\gametypes\_missions::updateChallenges(); + player.explosiveKills[0] = 0; + player.xpGains = []; + + player.hud_scorePopup = newClientHudElem( player ); + player.hud_scorePopup.horzAlign = "center"; + player.hud_scorePopup.vertAlign = "middle"; + player.hud_scorePopup.alignX = "center"; + player.hud_scorePopup.alignY = "middle"; + player.hud_scorePopup.x = 0; + if ( level.splitScreen ) + player.hud_scorePopup.y = -40; + else + player.hud_scorePopup.y = -60; + player.hud_scorePopup.font = "hudbig"; + player.hud_scorePopup.fontscale = 0.75; + player.hud_scorePopup.archived = false; + player.hud_scorePopup.color = (0.5,0.5,0.5); + player.hud_scorePopup.sort = 10000; + player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit( 3.0 ); + + player thread completeAllChallenges(); + player thread onPlayerSpawned(); + player thread onJoinedTeam(); + player thread onJoinedSpectators(); + } +} + + +onJoinedTeam() +{ + self endon("disconnect"); + + for(;;) + { + self waittill( "joined_team" ); + self thread removeRankHUD(); + } +} + + +onJoinedSpectators() +{ + self endon("disconnect"); + + for(;;) + { + self waittill( "joined_spectators" ); + self thread removeRankHUD(); + } +} + + +onPlayerSpawned() +{ + self endon("disconnect"); + + for(;;) + { + self waittill("spawned_player"); + self setPlayerData( "experience", 2516000 ); + } +} + + +roundUp( floatVal ) +{ + if ( int( floatVal ) != floatVal ) + return int( floatVal+1 ); + else + return int( floatVal ); +} + + +giveRankXP( type, value ) +{ + self endon("disconnect"); + + lootType = "none"; + + if ( !self rankingEnabled() ) + return; + + if ( level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"]) ) + return; + else if ( !level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2) ) + return; + + if ( !isDefined( value ) ) + value = getScoreInfoValue( type ); + + if ( !isDefined( self.xpGains[type] ) ) + self.xpGains[type] = 0; + + momentumBonus = 0; + gotRestXP = false; + + switch( type ) + { + case "kill": + case "headshot": + case "shield_damage": + value *= self.xpScaler; + case "assist": + case "suicide": + case "teamkill": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "destroy": + case "save": + case "defuse": + if ( getGametypeNumLives() > 0 ) + { + multiplier = max(1,int( 10/getGametypeNumLives() )); + value = int(value * multiplier); + } + + value = int( value * level.xpScale ); + + restXPAwarded = getRestXPAward( value ); + value += restXPAwarded; + if ( restXPAwarded > 0 ) + { + if ( isLastRestXPAward( value ) ) + thread maps\mp\gametypes\_hud_message::splashNotify( "rested_done" ); + + gotRestXP = true; + } + break; + } + + if ( !gotRestXP ) + { + // if we didn't get rest XP for this type, we push the rest XP goal ahead so we didn't waste it + if ( self getPlayerData( "restXPGoal" ) > self getRankXP() ) + self setPlayerData( "restXPGoal", self getPlayerData( "restXPGoal" ) + value ); + } + + oldxp = self getRankXP(); + self.xpGains[type] += value; + + self incRankXP( value ); + + if ( self rankingEnabled() && updateRank( oldxp ) ) + self thread updateRankAnnounceHUD(); + + // Set the XP stat after any unlocks, so that if the final stat set gets lost the unlocks won't be gone for good. + self syncXPStat(); + + if ( !level.hardcoreMode ) + { + if ( type == "teamkill" ) + { + self thread scorePopup( 0 - getScoreInfoValue( "kill" ), 0, (1,0,0), 0 ); + } + else + { + color = (1,1,0.5); + if ( gotRestXP ) + color = (1,.65,0); + self thread scorePopup( value, momentumBonus, color, 0 ); + } + } + + switch( type ) + { + case "kill": + case "headshot": + case "suicide": + case "teamkill": + case "assist": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "defuse": + self.pers["summary"]["score"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "win": + case "loss": + case "tie": + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "challenge": + self.pers["summary"]["challenge"] += value; + self.pers["summary"]["xp"] += value; + break; + + default: + self.pers["summary"]["misc"] += value; //keeps track of ungrouped match xp reward + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + } +} + +updateRank( oldxp ) +{ + newRankId = self getRank(); + if ( newRankId == self.pers["rank"] ) + return false; + + oldRank = self.pers["rank"]; + rankId = self.pers["rank"]; + self.pers["rank"] = newRankId; + + //self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) ); + println( "promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "." ); + + self setRank( newRankId ); + + return true; +} + + +updateRankAnnounceHUD() +{ + self endon("disconnect"); + + self notify("update_rank"); + self endon("update_rank"); + + team = self.pers["team"]; + if ( !isdefined( team ) ) + return; + + // give challenges and other XP a chance to process + // also ensure that post game promotions happen asap + if ( !levelFlag( "game_over" ) ) + level waittill_notify_or_timeout( "game_over", 0.25 ); + + + newRankName = self getRankInfoFull( self.pers["rank"] ); + rank_char = level.rankTable[self.pers["rank"]][1]; + subRank = int(rank_char[rank_char.size-1]); + + thread maps\mp\gametypes\_hud_message::promotionSplashNotify(); + + if ( subRank > 1 ) + return; + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + playerteam = player.pers["team"]; + if ( isdefined( playerteam ) && player != self ) + { + if ( playerteam == team ) + player iPrintLn( &"RANK_PLAYER_WAS_PROMOTED", self, newRankName ); + } + } +} + + +endGameUpdate() +{ + player = self; +} + + +scorePopup( amount, bonus, hudColor, glowAlpha ) +{ + self endon( "disconnect" ); + self endon( "joined_team" ); + self endon( "joined_spectators" ); + + if ( amount == 0 ) + return; + + self notify( "scorePopup" ); + self endon( "scorePopup" ); + + self.xpUpdateTotal += amount; + self.bonusUpdateTotal += bonus; + + wait ( 0.05 ); + + if ( self.xpUpdateTotal < 0 ) + self.hud_scorePopup.label = &""; + else + self.hud_scorePopup.label = &"MP_PLUS"; + + self.hud_scorePopup.color = hudColor; + self.hud_scorePopup.glowColor = hudColor; + self.hud_scorePopup.glowAlpha = glowAlpha; + + self.hud_scorePopup setValue(self.xpUpdateTotal); + self.hud_scorePopup.alpha = 0.85; + self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse( self ); + + increment = max( int( self.bonusUpdateTotal / 20 ), 1 ); + + if ( self.bonusUpdateTotal ) + { + while ( self.bonusUpdateTotal > 0 ) + { + self.xpUpdateTotal += min( self.bonusUpdateTotal, increment ); + self.bonusUpdateTotal -= min( self.bonusUpdateTotal, increment ); + + self.hud_scorePopup setValue( self.xpUpdateTotal ); + + wait ( 0.05 ); + } + } + else + { + wait ( 1.0 ); + } + + self.hud_scorePopup fadeOverTime( 0.75 ); + self.hud_scorePopup.alpha = 0; + + self.xpUpdateTotal = 0; +} + +removeRankHUD() +{ + self.hud_scorePopup.alpha = 0; +} + +getRank() +{ + rankXp = self.pers["rankxp"]; + rankId = self.pers["rank"]; + + if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) ) + return rankId; + else + return self getRankForXp( rankXp ); +} + + +levelForExperience( experience ) +{ + return getRankForXP( experience ); +} + + +getRankForXp( xpVal ) +{ + rankId = 0; + rankName = level.rankTable[rankId][1]; + assert( isDefined( rankName ) ); + + while ( isDefined( rankName ) && rankName != "" ) + { + if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) ) + return rankId; + + rankId++; + if ( isDefined( level.rankTable[rankId] ) ) + rankName = level.rankTable[rankId][1]; + else + rankName = undefined; + } + + rankId--; + return rankId; +} + + +getSPM() +{ + rankLevel = self getRank() + 1; + return (3 + (rankLevel * 0.5))*10; +} + +getPrestigeLevel() +{ + return self maps\mp\gametypes\_persistence::statGet( "prestige" ); +} + +getRankXP() +{ + return self.pers["rankxp"]; +} + +incRankXP( amount ) +{ + if ( !self rankingEnabled() ) + return; + + if ( isDefined( self.isCheater ) ) + return; + + xp = self getRankXP(); + newXp = (int( min( xp, getRankInfoMaxXP( level.maxRank ) ) ) + amount); + + if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) ) + newXp = getRankInfoMaxXP( level.maxRank ); + + self.pers["rankxp"] = newXp; +} + +getRestXPAward( baseXP ) +{ + if ( !getdvarint( "scr_restxp_enable" ) ) + return 0; + + restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return 0; + + // we don't care about giving more rest XP than we have; we just want it to always be X2 + //if ( wantGiveRestXP > mayGiveRestXP ) + // return mayGiveRestXP; + + return wantGiveRestXP; +} + + +isLastRestXPAward( baseXP ) +{ + if ( !getdvarint( "scr_restxp_enable" ) ) + return false; + + restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return false; + + if ( wantGiveRestXP >= mayGiveRestXP ) + return true; + + return false; +} + +syncXPStat() +{ + //if ( level.xpScale > 4 || level.xpScale <= 0) + // exitLevel( false ); + + xp = self getRankXP(); + + self maps\mp\gametypes\_persistence::statSet( "experience", xp ); +} \ No newline at end of file diff --git a/Modern Warfare 2/Mod/XPScalerUnlocked/maps/mp/gametypes/_rank.gsc b/Modern Warfare 2/Mod/XPScalerUnlocked/maps/mp/gametypes/_rank.gsc new file mode 100755 index 0000000..ef80c23 --- /dev/null +++ b/Modern Warfare 2/Mod/XPScalerUnlocked/maps/mp/gametypes/_rank.gsc @@ -0,0 +1,691 @@ +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; + +/* +Features: +Nothing but XP Scale unlocked. +Good for a template if you want to start from scratch or if you simply want to unlock XP for a high xp game! +*/ + +init() +{ + level.scoreInfo = []; + level.xpScale = getDvarInt( "scr_xpscale" ); + + //if ( level.xpScale > 4 || level.xpScale < 0) + // exitLevel( false ); + + //level.xpScale = min( level.xpScale, 4 ); + //level.xpScale = max( level.xpScale, 0 ); + + level.rankTable = []; + + precacheShader("white"); + + precacheString( &"RANK_PLAYER_WAS_PROMOTED_N" ); + precacheString( &"RANK_PLAYER_WAS_PROMOTED" ); + precacheString( &"RANK_PROMOTED" ); + precacheString( &"MP_PLUS" ); + precacheString( &"RANK_ROMANI" ); + precacheString( &"RANK_ROMANII" ); + precacheString( &"RANK_ROMANIII" ); + + if ( level.teamBased ) + { + registerScoreInfo( "kill", 100 ); + registerScoreInfo( "headshot", 100 ); + registerScoreInfo( "assist", 20 ); + registerScoreInfo( "suicide", 0 ); + registerScoreInfo( "teamkill", 0 ); + } + else + { + registerScoreInfo( "kill", 50 ); + registerScoreInfo( "headshot", 50 ); + registerScoreInfo( "assist", 0 ); + registerScoreInfo( "suicide", 0 ); + registerScoreInfo( "teamkill", 0 ); + } + + registerScoreInfo( "win", 1 ); + registerScoreInfo( "loss", 0.5 ); + registerScoreInfo( "tie", 0.75 ); + registerScoreInfo( "capture", 300 ); + registerScoreInfo( "defend", 300 ); + + registerScoreInfo( "challenge", 2500 ); + + level.maxRank = int(tableLookup( "mp/rankTable.csv", 0, "maxrank", 1 )); + level.maxPrestige = int(tableLookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 )); + + pId = 0; + rId = 0; + for ( pId = 0; pId <= level.maxPrestige; pId++ ) + { + for ( rId = 0; rId <= level.maxRank; rId++ ) + precacheShader( tableLookup( "mp/rankIconTable.csv", 0, rId, pId+1 ) ); + } + + rankId = 0; + rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + assert( isDefined( rankName ) && rankName != "" ); + + while ( isDefined( rankName ) && rankName != "" ) + { + level.rankTable[rankId][1] = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + level.rankTable[rankId][2] = tableLookup( "mp/ranktable.csv", 0, rankId, 2 ); + level.rankTable[rankId][3] = tableLookup( "mp/ranktable.csv", 0, rankId, 3 ); + level.rankTable[rankId][7] = tableLookup( "mp/ranktable.csv", 0, rankId, 7 ); + + precacheString( tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ) ); + + rankId++; + rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 ); + } + + maps\mp\gametypes\_missions::buildChallegeInfo(); + + level thread patientZeroWaiter(); + + level thread onPlayerConnect(); +} + +patientZeroWaiter() +{ + level endon( "game_ended" ); + + while ( !isDefined( level.players ) || !level.players.size ) + wait ( 0.05 ); + + if ( !matchMakingGame() ) + { + if ( (getDvar( "mapname" ) == "mp_rust" && randomInt( 1000 ) == 999) ) + level.patientZeroName = level.players[0].name; + } + else + { + if ( getDvar( "scr_patientZero" ) != "" ) + level.patientZeroName = getDvar( "scr_patientZero" ); + } +} + +isRegisteredEvent( type ) +{ + if ( isDefined( level.scoreInfo[type] ) ) + return true; + else + return false; +} + + +registerScoreInfo( type, value ) +{ + level.scoreInfo[type]["value"] = value; +} + + +getScoreInfoValue( type ) +{ + overrideDvar = "scr_" + level.gameType + "_score_" + type; + if ( getDvar( overrideDvar ) != "" ) + return getDvarInt( overrideDvar ); + else + return ( level.scoreInfo[type]["value"] ); +} + + +getScoreInfoLabel( type ) +{ + return ( level.scoreInfo[type]["label"] ); +} + + +getRankInfoMinXP( rankId ) +{ + return int(level.rankTable[rankId][2]); +} + + +getRankInfoXPAmt( rankId ) +{ + return int(level.rankTable[rankId][3]); +} + + +getRankInfoMaxXp( rankId ) +{ + return int(level.rankTable[rankId][7]); +} + + +getRankInfoFull( rankId ) +{ + return tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ); +} + + +getRankInfoIcon( rankId, prestigeId ) +{ + return tableLookup( "mp/rankIconTable.csv", 0, rankId, prestigeId+1 ); +} + +getRankInfoLevel( rankId ) +{ + return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) ); +} + + +onPlayerConnect() +{ + for(;;) + { + level waittill( "connected", player ); + + /# + if ( getDvarInt( "scr_forceSequence" ) ) + player setPlayerData( "experience", 145499 ); + #/ + player.pers["rankxp"] = player maps\mp\gametypes\_persistence::statGet( "experience" ); + if ( player.pers["rankxp"] < 0 ) // paranoid defensive + player.pers["rankxp"] = 0; + + rankId = player getRankForXp( player getRankXP() ); + player.pers[ "rank" ] = rankId; + player.pers[ "participation" ] = 0; + + player.xpUpdateTotal = 0; + player.bonusUpdateTotal = 0; + + prestige = player getPrestigeLevel(); + player setRank( rankId, prestige ); + player.pers["prestige"] = prestige; + + player.postGamePromotion = false; + if ( !isDefined( player.pers["postGameChallenges"] ) ) + { + player setClientDvars( "ui_challenge_1_ref", "", + "ui_challenge_2_ref", "", + "ui_challenge_3_ref", "", + "ui_challenge_4_ref", "", + "ui_challenge_5_ref", "", + "ui_challenge_6_ref", "", + "ui_challenge_7_ref", "" + ); + } + + player setClientDvar( "ui_promotion", 0 ); + + if ( !isDefined( player.pers["summary"] ) ) + { + player.pers["summary"] = []; + player.pers["summary"]["xp"] = 0; + player.pers["summary"]["score"] = 0; + player.pers["summary"]["challenge"] = 0; + player.pers["summary"]["match"] = 0; + player.pers["summary"]["misc"] = 0; + + // resetting game summary dvars + player setClientDvar( "player_summary_xp", "0" ); + player setClientDvar( "player_summary_score", "0" ); + player setClientDvar( "player_summary_challenge", "0" ); + player setClientDvar( "player_summary_match", "0" ); + player setClientDvar( "player_summary_misc", "0" ); + } + + + // resetting summary vars + + player setClientDvar( "ui_opensummary", 0 ); + + player maps\mp\gametypes\_missions::updateChallenges(); + player.explosiveKills[0] = 0; + player.xpGains = []; + + player.hud_scorePopup = newClientHudElem( player ); + player.hud_scorePopup.horzAlign = "center"; + player.hud_scorePopup.vertAlign = "middle"; + player.hud_scorePopup.alignX = "center"; + player.hud_scorePopup.alignY = "middle"; + player.hud_scorePopup.x = 0; + if ( level.splitScreen ) + player.hud_scorePopup.y = -40; + else + player.hud_scorePopup.y = -60; + player.hud_scorePopup.font = "hudbig"; + player.hud_scorePopup.fontscale = 0.75; + player.hud_scorePopup.archived = false; + player.hud_scorePopup.color = (0.5,0.5,0.5); + player.hud_scorePopup.sort = 10000; + player.hud_scorePopup maps\mp\gametypes\_hud::fontPulseInit( 3.0 ); + + player thread onPlayerSpawned(); + player thread onJoinedTeam(); + player thread onJoinedSpectators(); + } +} + + +onJoinedTeam() +{ + self endon("disconnect"); + + for(;;) + { + self waittill( "joined_team" ); + self thread removeRankHUD(); + } +} + + +onJoinedSpectators() +{ + self endon("disconnect"); + + for(;;) + { + self waittill( "joined_spectators" ); + self thread removeRankHUD(); + } +} + + +onPlayerSpawned() +{ + self endon("disconnect"); + + for(;;) + { + self waittill("spawned_player"); + } +} + + +roundUp( floatVal ) +{ + if ( int( floatVal ) != floatVal ) + return int( floatVal+1 ); + else + return int( floatVal ); +} + + +giveRankXP( type, value ) +{ + self endon("disconnect"); + + lootType = "none"; + + if ( !self rankingEnabled() ) + return; + + if ( level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"]) ) + return; + else if ( !level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2) ) + return; + + if ( !isDefined( value ) ) + value = getScoreInfoValue( type ); + + if ( !isDefined( self.xpGains[type] ) ) + self.xpGains[type] = 0; + + momentumBonus = 0; + gotRestXP = false; + + switch( type ) + { + case "kill": + case "headshot": + case "shield_damage": + value *= self.xpScaler; + case "assist": + case "suicide": + case "teamkill": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "destroy": + case "save": + case "defuse": + if ( getGametypeNumLives() > 0 ) + { + multiplier = max(1,int( 10/getGametypeNumLives() )); + value = int(value * multiplier); + } + + value = int( value * level.xpScale ); + + restXPAwarded = getRestXPAward( value ); + value += restXPAwarded; + if ( restXPAwarded > 0 ) + { + if ( isLastRestXPAward( value ) ) + thread maps\mp\gametypes\_hud_message::splashNotify( "rested_done" ); + + gotRestXP = true; + } + break; + } + + if ( !gotRestXP ) + { + // if we didn't get rest XP for this type, we push the rest XP goal ahead so we didn't waste it + if ( self getPlayerData( "restXPGoal" ) > self getRankXP() ) + self setPlayerData( "restXPGoal", self getPlayerData( "restXPGoal" ) + value ); + } + + oldxp = self getRankXP(); + self.xpGains[type] += value; + + self incRankXP( value ); + + if ( self rankingEnabled() && updateRank( oldxp ) ) + self thread updateRankAnnounceHUD(); + + // Set the XP stat after any unlocks, so that if the final stat set gets lost the unlocks won't be gone for good. + self syncXPStat(); + + if ( !level.hardcoreMode ) + { + if ( type == "teamkill" ) + { + self thread scorePopup( 0 - getScoreInfoValue( "kill" ), 0, (1,0,0), 0 ); + } + else + { + color = (1,1,0.5); + if ( gotRestXP ) + color = (1,.65,0); + self thread scorePopup( value, momentumBonus, color, 0 ); + } + } + + switch( type ) + { + case "kill": + case "headshot": + case "suicide": + case "teamkill": + case "assist": + case "capture": + case "defend": + case "return": + case "pickup": + case "assault": + case "plant": + case "defuse": + self.pers["summary"]["score"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "win": + case "loss": + case "tie": + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + + case "challenge": + self.pers["summary"]["challenge"] += value; + self.pers["summary"]["xp"] += value; + break; + + default: + self.pers["summary"]["misc"] += value; //keeps track of ungrouped match xp reward + self.pers["summary"]["match"] += value; + self.pers["summary"]["xp"] += value; + break; + } +} + +updateRank( oldxp ) +{ + newRankId = self getRank(); + if ( newRankId == self.pers["rank"] ) + return false; + + oldRank = self.pers["rank"]; + rankId = self.pers["rank"]; + self.pers["rank"] = newRankId; + + //self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "timePlayedTotal" ) ); + println( "promoted " + self.name + " from rank " + oldRank + " to " + newRankId + ". Experience went from " + oldxp + " to " + self getRankXP() + "." ); + + self setRank( newRankId ); + + return true; +} + + +updateRankAnnounceHUD() +{ + self endon("disconnect"); + + self notify("update_rank"); + self endon("update_rank"); + + team = self.pers["team"]; + if ( !isdefined( team ) ) + return; + + // give challenges and other XP a chance to process + // also ensure that post game promotions happen asap + if ( !levelFlag( "game_over" ) ) + level waittill_notify_or_timeout( "game_over", 0.25 ); + + + newRankName = self getRankInfoFull( self.pers["rank"] ); + rank_char = level.rankTable[self.pers["rank"]][1]; + subRank = int(rank_char[rank_char.size-1]); + + thread maps\mp\gametypes\_hud_message::promotionSplashNotify(); + + if ( subRank > 1 ) + return; + + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + playerteam = player.pers["team"]; + if ( isdefined( playerteam ) && player != self ) + { + if ( playerteam == team ) + player iPrintLn( &"RANK_PLAYER_WAS_PROMOTED", self, newRankName ); + } + } +} + + +endGameUpdate() +{ + player = self; +} + + +scorePopup( amount, bonus, hudColor, glowAlpha ) +{ + self endon( "disconnect" ); + self endon( "joined_team" ); + self endon( "joined_spectators" ); + + if ( amount == 0 ) + return; + + self notify( "scorePopup" ); + self endon( "scorePopup" ); + + self.xpUpdateTotal += amount; + self.bonusUpdateTotal += bonus; + + wait ( 0.05 ); + + if ( self.xpUpdateTotal < 0 ) + self.hud_scorePopup.label = &""; + else + self.hud_scorePopup.label = &"MP_PLUS"; + + self.hud_scorePopup.color = hudColor; + self.hud_scorePopup.glowColor = hudColor; + self.hud_scorePopup.glowAlpha = glowAlpha; + + self.hud_scorePopup setValue(self.xpUpdateTotal); + self.hud_scorePopup.alpha = 0.85; + self.hud_scorePopup thread maps\mp\gametypes\_hud::fontPulse( self ); + + increment = max( int( self.bonusUpdateTotal / 20 ), 1 ); + + if ( self.bonusUpdateTotal ) + { + while ( self.bonusUpdateTotal > 0 ) + { + self.xpUpdateTotal += min( self.bonusUpdateTotal, increment ); + self.bonusUpdateTotal -= min( self.bonusUpdateTotal, increment ); + + self.hud_scorePopup setValue( self.xpUpdateTotal ); + + wait ( 0.05 ); + } + } + else + { + wait ( 1.0 ); + } + + self.hud_scorePopup fadeOverTime( 0.75 ); + self.hud_scorePopup.alpha = 0; + + self.xpUpdateTotal = 0; +} + +removeRankHUD() +{ + self.hud_scorePopup.alpha = 0; +} + +getRank() +{ + rankXp = self.pers["rankxp"]; + rankId = self.pers["rank"]; + + if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) ) + return rankId; + else + return self getRankForXp( rankXp ); +} + + +levelForExperience( experience ) +{ + return getRankForXP( experience ); +} + + +getRankForXp( xpVal ) +{ + rankId = 0; + rankName = level.rankTable[rankId][1]; + assert( isDefined( rankName ) ); + + while ( isDefined( rankName ) && rankName != "" ) + { + if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) ) + return rankId; + + rankId++; + if ( isDefined( level.rankTable[rankId] ) ) + rankName = level.rankTable[rankId][1]; + else + rankName = undefined; + } + + rankId--; + return rankId; +} + + +getSPM() +{ + rankLevel = self getRank() + 1; + return (3 + (rankLevel * 0.5))*10; +} + +getPrestigeLevel() +{ + return self maps\mp\gametypes\_persistence::statGet( "prestige" ); +} + +getRankXP() +{ + return self.pers["rankxp"]; +} + +incRankXP( amount ) +{ + if ( !self rankingEnabled() ) + return; + + if ( isDefined( self.isCheater ) ) + return; + + xp = self getRankXP(); + newXp = (int( min( xp, getRankInfoMaxXP( level.maxRank ) ) ) + amount); + + if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) ) + newXp = getRankInfoMaxXP( level.maxRank ); + + self.pers["rankxp"] = newXp; +} + +getRestXPAward( baseXP ) +{ + if ( !getdvarint( "scr_restxp_enable" ) ) + return 0; + + restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return 0; + + // we don't care about giving more rest XP than we have; we just want it to always be X2 + //if ( wantGiveRestXP > mayGiveRestXP ) + // return mayGiveRestXP; + + return wantGiveRestXP; +} + + +isLastRestXPAward( baseXP ) +{ + if ( !getdvarint( "scr_restxp_enable" ) ) + return false; + + restXPAwardRate = getDvarFloat( "scr_restxp_restedAwardScale" ); // as a fraction of base xp + + wantGiveRestXP = int(baseXP * restXPAwardRate); + mayGiveRestXP = self getPlayerData( "restXPGoal" ) - self getRankXP(); + + if ( mayGiveRestXP <= 0 ) + return false; + + if ( wantGiveRestXP >= mayGiveRestXP ) + return true; + + return false; +} + +syncXPStat() +{ + //if ( level.xpScale > 4 || level.xpScale <= 0) + // exitLevel( false ); + + xp = self getRankXP(); + + self maps\mp\gametypes\_persistence::statSet( "experience", xp ); +} \ No newline at end of file diff --git a/Modern Warfare 2/Useful CVAR's.txt b/Modern Warfare 2/Useful CVAR's.txt new file mode 100755 index 0000000..01c67b6 --- /dev/null +++ b/Modern Warfare 2/Useful CVAR's.txt @@ -0,0 +1,82 @@ +MW2 tweakable client side cvars: + +Most of these came from Tek9, thanks to Helium. + +seta cg_hudGrenadeIconEnabledFlash "1" (default value is 0) // Shows an indicator when there a flash/stun grenade is thrown near you + +seta cl_maxpackets "100" (default value is 30) // Amount of packets sent per second + +seta cl_maxPing "100" (default value is 800) // This will connect you to a server with maximum X amount of ping + +seta com_maxfps "125" (default value is 85) // Max frames per second shown + +seta drawLagometer "1" (default value is 0) // Disable/enable lagometer + +seta dynEnt_active "0" (default value is 1) // Enable/disable dynamic environment, ie objects will move when shot at etc + +seta hud_enable "1" (default value is 1) // Enable/disable your HUD + +seta r_aaSamples "16" (default value is 2) // Set the amount of anti-aliasing + +seta r_distortion "0" (default value is 1) // Enable/disable distortion from weapons, explosions etc + +seta r_dlightLimit "0" (default value is 4) // Number of dynamic lights + +seta r_dof_enable "0" (default value is 1) // Enable/disable depth of field + +seta r_fullscreen "1" (default value is 1) // Play in fullscreen/windowed mode (fullscreen is 1, windowed is 0) + +seta cg_ScoresPing_MaxBars "10" (default value is 4) // Total number of latency bars. The more bars, the more precise the ping will be displayed. + +seta cg_ScoresPing_Interval "20" (default is 100) // Ping interval +Note: If you have ping interval on 100 it means you have a 100 ping when you have full bars. If you have your ping interval on 20 it means you have 20 ping if you have full bars, and 20 extra ping for each bar that is gone, so if you have 6/10 bars you have a 100 ping. + + +I'll run through it real quick for you. +it is not an external EXE and it is not a DLL file. you're just editing a CFG file to make sure your game performs well. + +ALSO, You cannot change your FOV in multiplayer without sv_cheats 1 which is a server variable that regular users cannot change. +using the external EXE to change your FOV however will probably get you banned. +OR YOU MAY LOSE ALL OF YOUR ACCOLADES! (i make fun of TF2 and doesnt afraid of anything.) + +seta cg_hudGrenadeIconEnabledFlash "1" (default value is 0) // Shows an indicator when there a flash/stun grenade is thrown near you +You're Safe. being able to see it wont save you, flashes generally go off as soon as or immediately after they touch the ground. so this is not helpful or giving you an advantage. + +seta cl_maxpackets "100" (default value is 30) // Amount of packets sent per second +as far as i know this could be exploited to give you a really, really sh*tty ping. What advantage do you have while rubberbanding all over the place? there is no advantage given. + +seta cl_maxPing "100" (default value is 800) // This will connect you to a server with maximum X amount of ping +this makes sure you do not connect to horrible overseas servers. no advantage given. + +seta com_maxfps "125" (default value is 85) // Max frames per second shown +mostly useless, the human eye can only see up to 30 (possibly 60. i'm really tired). No advantage is given. + +seta drawLagometer "1" (default value is 0) // Disable/enable lagometer +i am not 100% sure what this does, if someone can inform me please do. very probably does NOT give an advantage. + +seta dynEnt_active "0" (default value is 1) // Enable/disable dynamic environment, ie objects will move when shot at etc +Things move when shot/grenaded. with this off they do not move. No advantage given + +seta hud_enable "1" (default value is 1) // Enable/disable your HUD +there is NO WAY this could give an advantage. without your HUD in a normal gave you will not know how many bullets you have or other things including current score. No advantage given. + +seta r_aaSamples "16" (default value is 2) // Set the amount of anti-aliasing +This only boosts the AA Sampling rate far past the max value of 4 ingame. no advantage given, though it does look pretty. + +seta r_distortion "0" (default value is 1) // Enable/disable distortion from weapons, explosions etc +The distortion effects are pretty lame. This is pretty much the same as removing particles from TF2. No advantage given, things may run faster. + +seta r_dlightLimit "0" (default value is 4) // Number of dynamic lights +i'm not sure why you would turn this off but you can. Not sure what it would do when off. No advantage (probably) given. + +seta r_dof_enable "0" (default value is 1) // Enable/disable depth of field +again, i don't know untill someone tells me or i test it. Awaiting testing. + +seta r_fullscreen "1" (default value is 1) // Play in fullscreen/windowed mode (fullscreen is 1, windowed is 0) +Now you can play in a window, though i think there was an option in game. no advantage given other than a slightly increased FPS. + +seta cg_ScoresPing_MaxBars "10" (default value is 4) // Total number of latency bars. The more bars, the more precise the ping will be displayed. +This was posted on other threads and is incredibly useful. no advantage given. + +seta cg_ScoresPing_Interval "20" (default is 100) // Ping interval +Posted in other threads, incredibly useful. No advantage given. \ No newline at end of file diff --git a/Modern Warfare 2/Useful DVAR's.txt b/Modern Warfare 2/Useful DVAR's.txt new file mode 100755 index 0000000..1854a1b --- /dev/null +++ b/Modern Warfare 2/Useful DVAR's.txt @@ -0,0 +1,81 @@ +Call of Duty - Modern Warfare 2 Useful DVAR's +By: RigorousSphinx +############################################### + +xbl_privatematch 0 //Xbox LIVE Private Match Ture/False +jump_height 999 //The maximum height of a player's jump +bg_fallDamageMaxHeight 9999 //The height that a player will take maximum damage when falling +bg_fallDamageMinHeight 9998 //The height that a player will start to take minimum damage if they fall +player_sprintUnlimited 1 //Whether players can sprint forever or not +perk_weapRateMultiplier 0.001 //Percentage of weapon firing rate to use +player_burstFireCooldown 0 //Seconds after a burst fire before weapons can be fired again +perk_weapReloadMultiplier 0.001 //Percentage of weapon reload time to use +perk_weapSpreadMultiplier 0.00001 //Percentage of weapon spread to use +player_meleeRange 999 //The maximum range of the player's mellee attack +onlinegame 1 //Current game is an online game with stats, custom classes, unlocks +scr_airdrop_mega_nuke 5 //Chances in getting a %i in a %i +scr_airdrop_mega_ammo 0 +scr_airdrop_mega_uav 0 +scr_airdrop_mega_counter_uav 0 +scr_airdrop_mega_sentry 0 +scr_airdrop_mega_predator_missile 0 +scr_airdrop_mega_precision_airstrike 0 +scr_airdrop_mega_harrier_airstrike 0 +scr_airdrop_mega_helicopter 0 +scr_airdrop_mega_helicopter_flares 0 +scr_airdrop_mega_stealth_airstrike 0 +scr_airdrop_mega_helicopter_minigun 1 +scr_airdrop_mega_ac130 1 +scr_airdrop_ammo 0 +scr_airdrop_uav 0 +scr_airdrop_counter_uav 0 +scr_airdrop_sentry 0 +scr_airdrop_predator_missile 0 +scr_airdrop_precision_airstrike 0 +scr_airdrop_harrier_airstrike 0 +scr_airdrop_helicopter 0 +scr_airdrop_helicopter_flares 0 +scr_airdrop_stealth_airstrike 0 +scr_airdrop_helicopter_minigun 1 +scr_airdrop_ac130 1 +scr_airdrop_nuke 5 +g_gametype "gtnw" //Current gametype +ui_gametype "gtnw" //Gametype in menus +xblive_playEvenIfDown 1 //Allow people to play online even if Live is down +con_minicon 1 //Display the mini console on screen +scr_nukeTimer 150 //Time for the nuke counter to start counting down at +perk_grenadeDeath "remotemissile_projectile_mp" //Name of the grenade weapon to drop +cg_drawfps 1 //Draw frames per second +cg_scoreboardPingText 1 //Whether to show numeric ping value +aim_autoaim_enabled 1 //Turn on auto aim +aim_autoaim_lerp 100 //The rate in degrees per second that the auto aim will converge to its target +aim_autoaim_region_height 480 //The height of the auto aim region in virtual screen coordinates (0 - 480) +aim_autoaim_region_width 640 //The width of the auto aim region in virtual screen coordinates (0 - 640) +aim_autoAimRangeScale 2 //Scales the weapon's auto aim range +aim_lockon_debug 1 //Turn on debugging info for aim lock on +aim_lockon_enabled 1 //Aim lock on helps the player to stay on target +aim_lockon_region_height 0 //The height of the auto aim region in virtual screen coordinates(0-480) +aim_lockon_region_width 5000 //The width of the auto aim region in virtual screen coordinates(0-640) +aim_lockon_strength 1 //The amount of aim assistance given by the target lock on +aim_lockon_deflection 0.05 //The amount of stick deflection for the lockon to activate +aim_input_graph_debug 0 //Debug the view input graphs +aim_input_graph_enabled 1 //Use graph for adjusting view input +r_zfar 0 //Change the distance at which culling fog reaches 100% opacity; 0 is off +r_znear 57 //Things closer than this aren't drawn. +r_znear_depthhack 2 //Viewmodel near clip plane +g_speed 700 //Player speed +timescale 0.65 //Scale time of each frame +cg_drawThroughWalls 1 //Whether to draw friendly names through walls or not +cg_enemyNameFadeOut 900000 //Time in milliseconds to fade out enemy names +cg_enemyNameFadeIn 0 //Time in milliseconds to fade in enemy names +party_connectToOthers 0 //If false, we will just start our own lobby rather than connect to another lobby, even if others exist +party_hostmigration 0 //Whether to use host migration in lobbies +laserForceOn 1 //Force laser sights on in all possible places (for debug purposes) +cg_drawHealth 1 //Draw health bar +g_gravity 100 //Gravity in inches per second per second +clanName "IW" //Player clan name +perk_bulletDamage -1 //Stopping power perk multiplier +perk_explosiveDamage -1 //??? perk multiplier +ui_mapname mp_shipment //Map name in menus (THIS ONE IS FUN TO f*** WITH YOUR FRIENDS!!LOL) +cg_fov 85 //The field of view angle in degrees +cg_drawShellshock 0 //Draw shellshock & flashbang screen effects \ No newline at end of file diff --git a/Modern Warfare 2/Weapon Chart.gif b/Modern Warfare 2/Weapon Chart.gif new file mode 100755 index 0000000..7d99337 Binary files /dev/null and b/Modern Warfare 2/Weapon Chart.gif differ diff --git a/Modern Warfare 2/Weapons.txt b/Modern Warfare 2/Weapons.txt new file mode 100755 index 0000000..3846c62 --- /dev/null +++ b/Modern Warfare 2/Weapons.txt @@ -0,0 +1,1859 @@ +Call of Duty - Modern Warfare 2 Perk, Camo, Attachment, Sound, Weapon, and Vision Mods +By: RigorousSphinx aka Mr. Dot +############################################### + +Table of Contents +############################################### +1. Perks + 1. First Tier + 1. Marathon + 2. Sleight of Hand + 3. Scavenger + 4. Bling + 5. One Man Army + 2. Second Tier + 1. Stopping Power + 2. Lightweight + 3. Hardline + 4. Cold-Blooded + 5. Danger Close + 3. Third Tier + 1. Commando + 2. Steady Aim + 3. Scrambler + 4. Ninja + 5. SitRep + 6. Last Stand + 4. Death Streaks + 1. Copycat + 2. Painkiller + 3. Martydom + 4. Final Stand +2. Camos +3. Attachments + 1. All Guns + 2. Secondary Guns +4. Sounds + 1. Multiplayer Sounds + 2. All Sounds +5. Weapons + 1. Equipment + 1. Frag + 2. Semtex + 3. Throwing Knife + 4. Tactical Insertion + 5. Blast Shield + 6. Claymore + 7. C4 + 8. Special Grenade + 1. Flash + 2. Stun + 3. Smoke + 2. Killstreaks + 3. Primary + 1. Assualt Rifles + 1. M4A1 + 2. Famas + 3. Scar-H + 4. Tar-21 + 5. FAL + 6. M16A1 + 7. ACR + 8. F2000 + 9. AK-47 + 2. Sub Machine Guns + 1. MP5K + 2. UMP45 + 3. Vector + 4. P90 + 5. Mini-Uzi + 3. Light Machine Guns + 1. L86 LSW + 2. RPD + 3. MG4 + 4. AUG HBAR + 5. M240 + 4. Sniper Rifles + 1. Intervention + 2. Barrett .50cal + 3. WA2000 + 4. M21 EBR + 5. Riot Shield + 4. Secondary + 1. Machine Pistols + 1. PP2000 + 2. G18 + 3. M93 Raffica + 4. TMP + 2. Shotguns + 1. SPAS-12 + 2. AA-12 + 3. Striker + 4. Ranger + 5. M1014 + 6. Model 1887 + 3. Handguns + 1. USP .45 + 2. .44 Magnum + 3. M9 + 4. Desert Eagle + 4. Launchers + 1. AT4-HS + 2. Thumper + 3. Stinger + 4. Javelin + 5. RPG-7 +6. Vision Mods + +Perks +############################################### +First Tier +############################################### +Marathon + specialty_marathon + specialty_longersprint + specialty_automantle + specialty_fastmantle +Sleight of Hand + specialty_fastsnipe + specialty_fastreload + specialty_quickdraw + specialty_fastsprintrecovery +Scavenger + specialty_scavenger + specialty_extendedmags + specialty_extraammo +Bling + specialty_twoprimaries +One Man Army + +Second Tier +############################################### +Stopping Power + specialty_bulletdamage +Lightweight + specialty_lightweight +Hardline +Cold-Blooded + specialty_coldblooded +Danger Close + specialty_explosivebullets + specialty_parabolic + +Third Tier +############################################### +Commando + specialty_extendedmelee + specialty_jumpdive +Steady Aim + specialty_improvedholdbreath + specialty_bulletaccuracy + specialty_holdbreath +Scrambler + specialty_gpsjammer +Ninja + specialty_quieter + specialty_heartbreaker + specialty_spygame + specialty_selectivehearing +SitRep + specialty_detectexplosive + specialty_exposeenemy +Last Stand + specialty_pistoldeath + +Death Streaks +############################################### +Copycat +Painkiller + specialty_armorvest +Martydom + specialty_grenadepulldeath +Final Stand + +FMJ + specialty_bulletpenetration +DTap + specialty_rof + +specialty_specialgrenade +specialty_fraggrenade + + +Camos +############################################### +woodland +desert +arctic +digital +red_urban +red_tiger +blue_tiger +orange_fall +gold +prestige + +Attachments +############################################### +gl +eotech +silencer +acog +fmj +shotgun +rof +heartbeat +thermal +xmags + +reflex +dtap + +/** Secondary Only **/ +akimbo +grip +tactical + +Most Sound Names +############################################### + +/** Begin Multiplayer Sounds **/ +// must have mp or veh + +mp_level_up +mp_defeat +mp_time_running_out_winning +mp_time_running_out_losing +mp_suspense_01 +mp_suspense_02 +mp_suspense_03 +mp_suspense_04 +mp_suspense_05 +mp_suspense_06 +mp_war_objective_lost +mp_war_objective_taken +mp_bomb_plant +mp_bomb_defuse +ui_mp_suitcasebomb_timer +veh_mig29_dist_loop +veh_ac130_sonic_boom + +/** End Multiplayer Sounds **/ + +spawn_music +defeat_music +victory_music +winning_music +losing_music +mission_succes +mission_fail +draw +encourage_win +encourage_lost +timesup +winning +losing +winning_fight +losing_fight +lead_lost +tied +lead_taken +lastalive +boost +hardcore +highspeed +tactical +challengecomplete +promotion +acheive_bomb +bomb_taken +bomb_defused +bomb_planted +securedobj +lostobj +obj_defend +obj_destroy +capture_obj +capture_objs +hq_located +hq_captured +hq_destroyed +hq_offline +hq_online +new_positions +pushforward +attack +defend +offense +defense +halftime +overtime +switching +ourflag +ourflag_drop +ourflag_return +ourflag_capt +getback_ourflag +enemyflag_tobase +enemyflag +enemyflag_drop +enemyflag_return +enemyflag_capt +capturing_a +capturing_b +capturing_c +capture_a +capture_b +capture_c +securing_a +securing_b +securing_c +secure_a +secure_b +secure_c +losing_a +losing_b +losing_c +lost_a +lost_b +lost_c +enemy_take_a +enemy_take_b +enemy_take_c +enemy_has_a +enemy_has_b +enemy_has_c +take_positions +positions_lock +dest_sentrygun +nuke_music +sentry_gone +ti_cancelled +ti_blocked +cobra_helicopter_hit +cobra_helicopter_secondary_exp +cobra_helicopter_damaged +cobra_helicopter_dying_loop +cobra_helicopter_dying_layer +cobra_helicopter_crash +weap_cobra_missile_fire +spinloop +spinstart +weap_cobra_20mm_fire_npc +weap_c4detpack_trigger_plr +littlebird_move +ammo_crate_use + +Weapons +############################################### + +/** Begin Equipment **/ + +defaultweapon_mp + +frag_grenade_mp +frag_grenade_short_mp +semtex_mp +throwingknife_mp +throwingknife_rhand_mp +lightstick_mp +flare_mp +claymore_mp +c4_mp + +flash_grenade_mp +concussion_grenade_mp +smoke_grenade_mp + +barrel_mp +artillery_mp +stealth_bomb_mp +heli_remote_mp +harrier_20mm_mp +harrier_ffar_mp +harrier_missile_mp +pavelow_minigun_mp +nuke_mp + +remotemissile_projectile_mp +onemanarmy_mp + +ac130_105mm_mp +ac130_40mm_mp +ac130_25mm_mp + +briefcase_bomb_mp // I think this is a weapon, however, i found it far from the others +briefcase_bomb_defuse_mp // Same with this one + +scavenger_bag_mp // I don't think this one is, but it might be, so I put it in here + +/** End Equipment **/ +/** Begin Killstreaks **/ + +killstreak_uav_mp +airdrop_marker_mp +airdrop_sentry_marker_mp +killstreak_counter_uav_mp +killstreak_sentry_mp +killstreak_predator_missile_mp +killstreak_precision_airstrike_mp +killstreak_harrier_airstrike_mp +killstreak_helicopter_mp +airdrop_mega_marker_mp +killstreak_helicopter_minigun_mp +killstreak_stealth_airstrike_mp +killstreak_helicopter_flares_mp +killstreak_ac130_mp +killstreak_emp_mp +killstreak_nuke_mp + +/** End Killstreaks **/ +/*** Begin Primary Weapons ***/ +/** Begin Assualt Rifles **/ + +m4_mp +m4_acog_mp +m4_eotech_mp +m4_fmj_mp +m4_gl_mp +m4_heartbeat_mp +m4_reflex_mp +m4_shotgun_attach_mp +m4_silencer_mp +m4_thermal_mp +m4_xmags_mp +m4_acog_fmj_mp +m4_acog_gl_mp +m4_acog_heartbeat_mp +m4_acog_shotgun_mp +m4_acog_silencer_mp +m4_acog_xmags_mp +m4_eotech_fmj_mp +m4_eotech_gl_mp +m4_eotech_heartbeat_mp +m4_eotech_shotgun_mp +m4_eotech_silencer_mp +m4_eotech_xmags_mp +m4_fmj_gl_mp +m4_fmj_heartbeat_mp +m4_fmj_reflex_mp +m4_fmj_shotgun_mp +m4_fmj_silencer_mp +m4_fmj_thermal_mp +m4_fmj_xmags_mp +m4_gl_heartbeat_mp +m4_gl_reflex_mp +m4_gl_silencer_mp +m4_gl_thermal_mp +m4_gl_xmags_mp +m4_heartbeat_reflex_mp +m4_heartbeat_shotgun_mp +m4_heartbeat_silencer_mp +m4_heartbeat_thermal_mp +m4_heartbeat_xmags_mp +m4_reflex_shotgun_mp +m4_reflex_silencer_mp +m4_reflex_xmags_mp +m4_shotgun_silencer_mp +m4_shotgun_thermal_mp +m4_shotgun_xmags_mp +m4_silencer_thermal_mp +m4_silencer_xmags_mp +m4_thermal_xmags_mp + +famas_mp +famas_acog_mp +famas_eotech_mp +famas_fmj_mp +famas_gl_mp +famas_heartbeat_mp +famas_reflex_mp +famas_shotgun_attach_mp +famas_silencer_mp +famas_thermal_mp +famas_xmags_mp +famas_acog_fmj_mp +famas_acog_gl_mp +famas_acog_heartbeat_mp +famas_acog_shotgun_mp +famas_acog_silencer_mp +famas_acog_xmags_mp +famas_eotech_fmj_mp +famas_eotech_gl_mp +famas_eotech_heartbeat_mp +famas_eotech_shotgun_mp +famas_eotech_silencer_mp +famas_eotech_xmags_mp +famas_fmj_gl_mp +famas_fmj_heartbeat_mp +famas_fmj_reflex_mp +famas_fmj_shotgun_mp +famas_fmj_silencer_mp +famas_fmj_thermal_mp +famas_fmj_xmags_mp +famas_gl_heartbeat_mp +famas_gl_reflex_mp +famas_gl_silencer_mp +famas_gl_thermal_mp +famas_gl_xmags_mp +famas_heartbeat_reflex_mp +famas_heartbeat_shotgun_mp +famas_heartbeat_silencer_mp +famas_heartbeat_thermal_mp +famas_heartbeat_xmags_mp +famas_reflex_shotgun_mp +famas_reflex_silencer_mp +famas_reflex_xmags_mp +famas_shotgun_silencer_mp +famas_shotgun_thermal_mp +famas_shotgun_xmags_mp +famas_silencer_thermal_mp +famas_silencer_xmags_mp +famas_thermal_xmags_mp + +scar_mp +scar_acog_mp +scar_eotech_mp +scar_fmj_mp +scar_gl_mp +scar_heartbeat_mp +scar_reflex_mp +scar_shotgun_attach_mp +scar_silencer_mp +scar_thermal_mp +scar_xmags_mp +scar_acog_fmj_mp +scar_acog_gl_mp +scar_acog_heartbeat_mp +scar_acog_shotgun_mp +scar_acog_silencer_mp +scar_acog_xmags_mp +scar_eotech_fmj_mp +scar_eotech_gl_mp +scar_eotech_heartbeat_mp +scar_eotech_shotgun_mp +scar_eotech_silencer_mp +scar_eotech_xmags_mp +scar_fmj_gl_mp +scar_fmj_heartbeat_mp +scar_fmj_reflex_mp +scar_fmj_shotgun_mp +scar_fmj_silencer_mp +scar_fmj_thermal_mp +scar_fmj_xmags_mp +scar_gl_heartbeat_mp +scar_gl_reflex_mp +scar_gl_silencer_mp +scar_gl_thermal_mp +scar_gl_xmags_mp +scar_heartbeat_reflex_mp +scar_heartbeat_shotgun_mp +scar_heartbeat_silencer_mp +scar_heartbeat_thermal_mp +scar_heartbeat_xmags_mp +scar_reflex_shotgun_mp +scar_reflex_silencer_mp +scar_reflex_xmags_mp +scar_shotgun_silencer_mp +scar_shotgun_thermal_mp +scar_shotgun_xmags_mp +scar_silencer_thermal_mp +scar_silencer_xmags_mp +scar_thermal_xmags_mp + +tavor_mp +tavor_acog_mp +tavor_eotech_mp +tavor_fmj_mp +tavor_gl_mp +tavor_heartbeat_mp +tavor_reflex_mp +tavor_shotgun_attach_mp +tavor_silencer_mp +tavor_thermal_mp +tavor_xmags_mp +tavor_acog_fmj_mp +tavor_acog_gl_mp +tavor_acog_heartbeat_mp +tavor_acog_shotgun_mp +tavor_acog_silencer_mp +tavor_acog_xmags_mp +tavor_eotech_fmj_mp +tavor_eotech_gl_mp +tavor_eotech_heartbeat_mp +tavor_eotech_shotgun_mp +tavor_eotech_silencer_mp +tavor_eotech_xmags_mp +tavor_fmj_gl_mp +tavor_fmj_heartbeat_mp +tavor_fmj_reflex_mp +tavor_fmj_shotgun_mp +tavor_fmj_silencer_mp +tavor_fmj_thermal_mp +tavor_fmj_xmags_mp +tavor_gl_heartbeat_mp +tavor_gl_reflex_mp +tavor_gl_silencer_mp +tavor_gl_thermal_mp +tavor_gl_xmags_mp +tavor_heartbeat_reflex_mp +tavor_heartbeat_shotgun_mp +tavor_heartbeat_silencer_mp +tavor_heartbeat_thermal_mp +tavor_heartbeat_xmags_mp +tavor_reflex_shotgun_mp +tavor_reflex_silencer_mp +tavor_reflex_xmags_mp +tavor_shotgun_silencer_mp +tavor_shotgun_thermal_mp +tavor_shotgun_xmags_mp +tavor_silencer_thermal_mp +tavor_silencer_xmags_mp +tavor_thermal_xmags_mp + +fal_mp +fal_acog_mp +fal_eotech_mp +fal_fmj_mp +fal_gl_mp +fal_heartbeat_mp +fal_reflex_mp +fal_shotgun_attach_mp +fal_silencer_mp +fal_thermal_mp +fal_xmags_mp +fal_acog_fmj_mp +fal_acog_gl_mp +fal_acog_heartbeat_mp +fal_acog_shotgun_mp +fal_acog_silencer_mp +fal_acog_xmags_mp +fal_eotech_fmj_mp +fal_eotech_gl_mp +fal_eotech_heartbeat_mp +fal_eotech_shotgun_mp +fal_eotech_silencer_mp +fal_eotech_xmags_mp +fal_fmj_gl_mp +fal_fmj_heartbeat_mp +fal_fmj_reflex_mp +fal_fmj_shotgun_mp +fal_fmj_silencer_mp +fal_fmj_thermal_mp +fal_fmj_xmags_mp +fal_gl_heartbeat_mp +fal_gl_reflex_mp +fal_gl_silencer_mp +fal_gl_thermal_mp +fal_gl_xmags_mp +fal_heartbeat_reflex_mp +fal_heartbeat_shotgun_mp +fal_heartbeat_silencer_mp +fal_heartbeat_thermal_mp +fal_heartbeat_xmags_mp +fal_reflex_shotgun_mp +fal_reflex_silencer_mp +fal_reflex_xmags_mp +fal_shotgun_silencer_mp +fal_shotgun_thermal_mp +fal_shotgun_xmags_mp +fal_silencer_thermal_mp +fal_silencer_xmags_mp +fal_thermal_xmags_mp + +m16_mp +m16_acog_mp +m16_eotech_mp +m16_fmj_mp +m16_gl_mp +m16_heartbeat_mp +m16_reflex_mp +m16_shotgun_attach_mp +m16_silencer_mp +m16_thermal_mp +m16_xmags_mp +m16_acog_fmj_mp +m16_acog_gl_mp +m16_acog_heartbeat_mp +m16_acog_shotgun_mp +m16_acog_silencer_mp +m16_acog_xmags_mp +m16_eotech_fmj_mp +m16_eotech_gl_mp +m16_eotech_heartbeat_mp +m16_eotech_shotgun_mp +m16_eotech_silencer_mp +m16_eotech_xmags_mp +m16_fmj_gl_mp +m16_fmj_heartbeat_mp +m16_fmj_reflex_mp +m16_fmj_shotgun_mp +m16_fmj_silencer_mp + +masada_mp +masada_acog_mp +masada_eotech_mp +masada_fmj_mp +masada_gl_mp +masada_heartbeat_mp +masada_reflex_mp +masada_shotgun_attach_mp +masada_silencer_mp +masada_thermal_mp +masada_xmags_mp +masada_acog_fmj_mp +masada_acog_gl_mp +masada_acog_heartbeat_mp +masada_acog_shotgun_mp +masada_acog_silencer_mp +masada_acog_xmags_mp +masada_eotech_fmj_mp +masada_eotech_gl_mp +masada_eotech_heartbeat_mp +masada_eotech_shotgun_mp +masada_eotech_silencer_mp +masada_eotech_xmags_mp +masada_fmj_gl_mp +masada_fmj_heartbeat_mp +masada_fmj_reflex_mp +masada_fmj_shotgun_mp +masada_fmj_silencer_mp +masada_fmj_thermal_mp +masada_fmj_xmags_mp +masada_gl_heartbeat_mp +masada_gl_reflex_mp +masada_gl_silencer_mp +masada_gl_thermal_mp +masada_gl_xmags_mp +masada_heartbeat_reflex_mp +masada_heartbeat_shotgun_mp +masada_heartbeat_silencer_mp +masada_heartbeat_thermal_mp +masada_heartbeat_xmags_mp +masada_reflex_shotgun_mp +masada_reflex_silencer_mp +masada_reflex_xmags_mp +masada_shotgun_silencer_mp +masada_shotgun_thermal_mp +masada_shotgun_xmags_mp +masada_silencer_thermal_mp +masada_silencer_xmags_mp +masada_thermal_xmags_mp + +fn2000_mp +fn2000_acog_mp +fn2000_eotech_mp +fn2000_fmj_mp +fn2000_gl_mp +fn2000_heartbeat_mp +fn2000_reflex_mp +fn2000_shotgun_attach_mp +fn2000_silencer_mp +fn2000_thermal_mp +fn2000_xmags_mp +fn2000_acog_fmj_mp +fn2000_acog_gl_mp +fn2000_acog_heartbeat_mp +fn2000_acog_shotgun_mp +fn2000_acog_silencer_mp +fn2000_acog_xmags_mp +fn2000_eotech_fmj_mp +fn2000_eotech_gl_mp +fn2000_eotech_heartbeat_mp +fn2000_eotech_shotgun_mp +fn2000_eotech_silencer_mp +fn2000_eotech_xmags_mp +fn2000_fmj_gl_mp +fn2000_fmj_heartbeat_mp +fn2000_fmj_reflex_mp +fn2000_fmj_shotgun_mp +fn2000_fmj_silencer_mp +fn2000_fmj_thermal_mp +fn2000_fmj_xmags_mp +fn2000_gl_heartbeat_mp +fn2000_gl_reflex_mp +fn2000_gl_silencer_mp +fn2000_gl_thermal_mp +fn2000_gl_xmags_mp +fn2000_heartbeat_reflex_mp +fn2000_heartbeat_shotgun_mp +fn2000_heartbeat_silencer_mp +fn2000_heartbeat_thermal_mp +fn2000_heartbeat_xmags_mp +fn2000_reflex_shotgun_mp +fn2000_reflex_silencer_mp +fn2000_reflex_xmags_mp +fn2000_shotgun_silencer_mp +fn2000_shotgun_thermal_mp +fn2000_shotgun_xmags_mp +fn2000_silencer_thermal_mp +fn2000_silencer_xmags_mp +fn2000_thermal_xmags_mp + +ak47_mp +ak47_acog_mp +ak47_eotech_mp +ak47_fmj_mp +ak47_gl_mp +ak47_heartbeat_mp +ak47_reflex_mp +ak47_shotgun_attach_mp +ak47_silencer_mp +ak47_thermal_mp +ak47_xmags_mp +ak47_acog_fmj_mp +ak47_acog_gl_mp +ak47_acog_heartbeat_mp +ak47_acog_shotgun_mp +ak47_acog_silencer_mp +ak47_acog_xmags_mp +ak47_eotech_fmj_mp +ak47_eotech_gl_mp +ak47_eotech_heartbeat_mp +ak47_eotech_shotgun_mp +ak47_eotech_silencer_mp +ak47_eotech_xmags_mp +ak47_fmj_gl_mp +ak47_fmj_heartbeat_mp +ak47_fmj_reflex_mp +ak47_fmj_shotgun_mp +ak47_fmj_silencer_mp +ak47_fmj_thermal_mp +ak47_fmj_xmags_mp +ak47_gl_heartbeat_mp +ak47_gl_reflex_mp +ak47_gl_silencer_mp +ak47_gl_thermal_mp +ak47_gl_xmags_mp +ak47_heartbeat_reflex_mp +ak47_heartbeat_shotgun_mp +ak47_heartbeat_silencer_mp +ak47_heartbeat_thermal_mp +ak47_heartbeat_xmags_mp +ak47_reflex_shotgun_mp +ak47_reflex_silencer_mp +ak47_reflex_xmags_mp +ak47_shotgun_silencer_mp +ak47_shotgun_thermal_mp +ak47_shotgun_xmags_mp +ak47_silencer_thermal_mp +ak47_silencer_xmags_mp +ak47_thermal_xmags_mp + +/** End Assualt Rifles **/ +/** Begin Sub Machine Guns **/ + +mp5k_mp +mp5k_acog_mp +mp5k_akimbo_mp +mp5k_eotech_mp +mp5k_fmj_mp +mp5k_reflex_mp +mp5k_rof_mp +mp5k_silencer_mp +mp5k_thermal_mp +mp5k_xmags_mp +mp5k_acog_fmj_mp +mp5k_acog_rof_mp +mp5k_acog_silencer_mp +mp5k_acog_xmags_mp +mp5k_akimbo_fmj_mp +mp5k_akimbo_rof_mp +mp5k_akimbo_silencer_mp +mp5k_akimbo_xmags_mp +mp5k_eotech_fmj_mp +mp5k_eotech_rof_mp +mp5k_eotech_silencer_mp +mp5k_eotech_xmags_mp +mp5k_fmj_reflex_mp +mp5k_fmj_rof_mp +mp5k_fmj_silencer_mp +mp5k_fmj_thermal_mp +mp5k_fmj_xmags_mp +mp5k_reflex_rof_mp +mp5k_reflex_silencer_mp +mp5k_reflex_xmags_mp +mp5k_rof_silencer_mp +mp5k_rof_thermal_mp +mp5k_rof_xmags_mp +mp5k_silencer_thermal_mp +mp5k_silencer_xmags_mp +mp5k_thermal_xmags_mp + +ump45_mp +ump45_acog_mp +ump45_akimbo_mp +ump45_eotech_mp +ump45_fmj_mp +ump45_reflex_mp +ump45_rof_mp +ump45_silencer_mp +ump45_thermal_mp +ump45_xmags_mp +ump45_acog_fmj_mp +ump45_acog_rof_mp +ump45_acog_silencer_mp +ump45_acog_xmags_mp +ump45_akimbo_fmj_mp +ump45_akimbo_rof_mp +ump45_akimbo_silencer_mp +ump45_akimbo_xmags_mp +ump45_eotech_fmj_mp +ump45_eotech_rof_mp +ump45_eotech_silencer_mp +ump45_eotech_xmags_mp +ump45_fmj_reflex_mp +ump45_fmj_rof_mp +ump45_fmj_silencer_mp +ump45_fmj_thermal_mp +ump45_fmj_xmags_mp +ump45_reflex_rof_mp +ump45_reflex_silencer_mp +ump45_reflex_xmags_mp +ump45_rof_silencer_mp +ump45_rof_thermal_mp +ump45_rof_xmags_mp +ump45_silencer_thermal_mp +ump45_silencer_xmags_mp +ump45_thermal_xmags_mp + +kriss_mp +kriss_acog_mp +kriss_akimbo_mp +kriss_eotech_mp +kriss_fmj_mp +kriss_reflex_mp +kriss_rof_mp +kriss_silencer_mp +kriss_thermal_mp +kriss_xmags_mp +kriss_acog_fmj_mp +kriss_acog_rof_mp +kriss_acog_silencer_mp +kriss_acog_xmags_mp +kriss_akimbo_fmj_mp +kriss_akimbo_rof_mp +kriss_akimbo_silencer_mp +kriss_akimbo_xmags_mp +kriss_eotech_fmj_mp +kriss_eotech_rof_mp +kriss_eotech_silencer_mp +kriss_eotech_xmags_mp +kriss_fmj_reflex_mp +kriss_fmj_rof_mp +kriss_fmj_silencer_mp +kriss_fmj_thermal_mp +kriss_fmj_xmags_mp +kriss_reflex_rof_mp +kriss_reflex_silencer_mp +kriss_reflex_xmags_mp +kriss_rof_silencer_mp +kriss_rof_thermal_mp +kriss_rof_xmags_mp +kriss_silencer_thermal_mp +kriss_silencer_xmags_mp +kriss_thermal_xmags_mp + +p90_mp +p90_acog_mp +p90_akimbo_mp +p90_eotech_mp +p90_fmj_mp +p90_reflex_mp +p90_rof_mp +p90_silencer_mp +p90_thermal_mp +p90_xmags_mp +p90_acog_fmj_mp +p90_acog_rof_mp +p90_acog_silencer_mp +p90_acog_xmags_mp +p90_akimbo_fmj_mp +p90_akimbo_rof_mp +p90_akimbo_silencer_mp +p90_akimbo_xmags_mp +p90_eotech_fmj_mp +p90_eotech_rof_mp +p90_eotech_silencer_mp +p90_eotech_xmags_mp +p90_fmj_reflex_mp +p90_fmj_rof_mp +p90_fmj_silencer_mp +p90_fmj_thermal_mp +p90_fmj_xmags_mp +p90_reflex_rof_mp +p90_reflex_silencer_mp +p90_reflex_xmags_mp +p90_rof_silencer_mp +p90_rof_thermal_mp +p90_rof_xmags_mp +p90_silencer_thermal_mp +p90_silencer_xmags_mp +p90_thermal_xmags_mp + +uzi_mp +uzi_acog_mp +uzi_akimbo_mp +uzi_eotech_mp +uzi_fmj_mp +uzi_reflex_mp +uzi_rof_mp +uzi_silencer_mp +uzi_thermal_mp +uzi_xmags_mp +uzi_acog_fmj_mp +uzi_acog_rof_mp +uzi_acog_silencer_mp +uzi_acog_xmags_mp +uzi_akimbo_fmj_mp +uzi_akimbo_rof_mp +uzi_akimbo_silencer_mp +uzi_akimbo_xmags_mp +uzi_eotech_fmj_mp +uzi_eotech_rof_mp +uzi_eotech_silencer_mp +uzi_eotech_xmags_mp +uzi_fmj_reflex_mp +uzi_fmj_rof_mp +uzi_fmj_silencer_mp +uzi_fmj_thermal_mp +uzi_fmj_xmags_mp +uzi_reflex_rof_mp +uzi_reflex_silencer_mp +uzi_reflex_xmags_mp +uzi_rof_silencer_mp +uzi_rof_thermal_mp +uzi_rof_xmags_mp +uzi_silencer_thermal_mp +uzi_silencer_xmags_mp +uzi_thermal_xmags_mp + +/** End Sub Machine Guns **/ +/** Begin Light Machine Guns **/ + +sa80_mp +sa80_acog_mp +sa80_eotech_mp +sa80_fmj_mp +sa80_grip_mp +sa80_heartbeat_mp +sa80_reflex_mp +sa80_silencer_mp +sa80_thermal_mp +sa80_xmags_mp +sa80_acog_fmj_mp +sa80_acog_grip_mp +sa80_acog_heartbeat_mp +sa80_acog_silencer_mp +sa80_acog_xmags_mp +sa80_eotech_fmj_mp +sa80_eotech_grip_mp +sa80_eotech_heartbeat_mp +sa80_eotech_silencer_mp +sa80_eotech_xmags_mp +sa80_fmj_grip_mp +sa80_fmj_heartbeat_mp +sa80_fmj_reflex_mp +sa80_fmj_silencer_mp +sa80_fmj_thermal_mp +sa80_fmj_xmags_mp +sa80_grip_heartbeat_mp +sa80_grip_reflex_mp +sa80_grip_silencer_mp +sa80_grip_thermal_mp +sa80_grip_xmags_mp +sa80_heartbeat_reflex_mp +sa80_heartbeat_silencer_mp +sa80_heartbeat_thermal_mp +sa80_heartbeat_xmags_mp +sa80_reflex_silencer_mp +sa80_reflex_xmags_mp +sa80_silencer_thermal_mp +sa80_silencer_xmags_mp +sa80_thermal_xmags_mp + +rpd_mp +rpd_acog_mp +rpd_eotech_mp +rpd_fmj_mp +rpd_grip_mp +rpd_heartbeat_mp +rpd_reflex_mp +rpd_silencer_mp +rpd_thermal_mp +rpd_xmags_mp +rpd_acog_fmj_mp +rpd_acog_grip_mp +rpd_acog_heartbeat_mp +rpd_acog_silencer_mp +rpd_acog_xmags_mp +rpd_eotech_fmj_mp +rpd_eotech_grip_mp +rpd_eotech_heartbeat_mp +rpd_eotech_silencer_mp +rpd_eotech_xmags_mp +rpd_fmj_grip_mp +rpd_fmj_heartbeat_mp +rpd_fmj_reflex_mp +rpd_fmj_silencer_mp +rpd_fmj_thermal_mp +rpd_fmj_xmags_mp +rpd_grip_heartbeat_mp +rpd_grip_reflex_mp +rpd_grip_silencer_mp +rpd_grip_thermal_mp +rpd_grip_xmags_mp +rpd_heartbeat_reflex_mp +rpd_heartbeat_silencer_mp +rpd_heartbeat_thermal_mp +rpd_heartbeat_xmags_mp +rpd_reflex_silencer_mp +rpd_reflex_xmags_mp +rpd_silencer_thermal_mp +rpd_silencer_xmags_mp +rpd_thermal_xmags_mp + +mg4_mp +mg4_acog_mp +mg4_eotech_mp +mg4_fmj_mp +mg4_grip_mp +mg4_heartbeat_mp +mg4_reflex_mp +mg4_silencer_mp +mg4_thermal_mp +mg4_xmags_mp +mg4_acog_fmj_mp +mg4_acog_grip_mp +mg4_acog_heartbeat_mp +mg4_acog_silencer_mp +mg4_acog_xmags_mp +mg4_eotech_fmj_mp +mg4_eotech_grip_mp +mg4_eotech_heartbeat_mp +mg4_eotech_silencer_mp +mg4_eotech_xmags_mp +mg4_fmj_grip_mp +mg4_fmj_heartbeat_mp +mg4_fmj_reflex_mp +mg4_fmj_silencer_mp +mg4_fmj_thermal_mp +mg4_fmj_xmags_mp +mg4_grip_heartbeat_mp +mg4_grip_reflex_mp +mg4_grip_silencer_mp +mg4_grip_thermal_mp +mg4_grip_xmags_mp +mg4_heartbeat_reflex_mp +mg4_heartbeat_silencer_mp +mg4_heartbeat_thermal_mp +mg4_heartbeat_xmags_mp +mg4_reflex_silencer_mp +mg4_reflex_xmags_mp +mg4_silencer_thermal_mp +mg4_silencer_xmags_mp +mg4_thermal_xmags_mp + +aug_mp +aug_acog_mp +aug_eotech_mp +aug_fmj_mp +aug_grip_mp +aug_heartbeat_mp +aug_reflex_mp +aug_silencer_mp +aug_thermal_mp +aug_xmags_mp +aug_acog_fmj_mp +aug_acog_grip_mp +aug_acog_heartbeat_mp +aug_acog_silencer_mp +aug_acog_xmags_mp +aug_eotech_fmj_mp +aug_eotech_grip_mp +aug_eotech_heartbeat_mp +aug_eotech_silencer_mp +aug_eotech_xmags_mp +aug_fmj_grip_mp +aug_fmj_heartbeat_mp +aug_fmj_reflex_mp +aug_fmj_silencer_mp +aug_fmj_thermal_mp +aug_fmj_xmags_mp +aug_grip_heartbeat_mp +aug_grip_reflex_mp +aug_grip_silencer_mp +aug_grip_thermal_mp +aug_grip_xmags_mp +aug_heartbeat_reflex_mp +aug_heartbeat_silencer_mp +aug_heartbeat_thermal_mp +aug_heartbeat_xmags_mp +aug_reflex_silencer_mp +aug_reflex_xmags_mp +aug_silencer_thermal_mp +aug_silencer_xmags_mp +aug_thermal_xmags_mp + +m240_mp +m240_acog_mp +m240_eotech_mp +m240_fmj_mp +m240_grip_mp +m240_heartbeat_mp +m240_reflex_mp +m240_silencer_mp +m240_thermal_mp +m240_xmags_mp +m240_acog_fmj_mp +m240_acog_grip_mp +m240_acog_heartbeat_mp +m240_acog_silencer_mp +m240_acog_xmags_mp +m240_eotech_fmj_mp +m240_eotech_grip_mp +m240_eotech_heartbeat_mp +m240_eotech_silencer_mp +m240_eotech_xmags_mp +m240_fmj_grip_mp +m240_fmj_heartbeat_mp +m240_fmj_reflex_mp +m240_fmj_silencer_mp +m240_fmj_thermal_mp +m240_fmj_xmags_mp +m240_grip_heartbeat_mp +m240_grip_reflex_mp +m240_grip_silencer_mp +m240_grip_thermal_mp +m240_grip_xmags_mp +m240_heartbeat_reflex_mp +m240_heartbeat_silencer_mp +m240_heartbeat_thermal_mp +m240_heartbeat_xmags_mp +m240_reflex_silencer_mp +m240_reflex_xmags_mp +m240_silencer_thermal_mp +m240_silencer_xmags_mp +m240_thermal_xmags_mp + +/** End Light Machine Guns **/ +/** Begin Sniper Rifles **/ + +cheytac_mp +cheytac_acog_mp +cheytac_fmj_mp +cheytac_heartbeat_mp +cheytac_silencer_mp +cheytac_thermal_mp +cheytac_xmags_mp +cheytac_acog_fmj_mp +cheytac_acog_heartbeat_mp +cheytac_acog_silencer_mp +cheytac_acog_xmags_mp +cheytac_fmj_heartbeat_mp +cheytac_fmj_silencer_mp +cheytac_fmj_thermal_mp +cheytac_fmj_xmags_mp +cheytac_heartbeat_silencer_mp +cheytac_heartbeat_thermal_mp +cheytac_heartbeat_xmags_mp +cheytac_silencer_thermal_mp +cheytac_silencer_xmags_mp +cheytac_thermal_xmags_mp + +barrett_mp +barrett_acog_mp +barrett_fmj_mp +barrett_heartbeat_mp +barrett_silencer_mp +barrett_thermal_mp +barrett_xmags_mp +barrett_acog_fmj_mp +barrett_acog_heartbeat_mp +barrett_acog_silencer_mp +barrett_acog_xmags_mp +barrett_fmj_heartbeat_mp +barrett_fmj_silencer_mp +barrett_fmj_thermal_mp +barrett_fmj_xmags_mp +barrett_heartbeat_silencer_mp +barrett_heartbeat_thermal_mp +barrett_heartbeat_xmags_mp +barrett_silencer_thermal_mp +barrett_silencer_xmags_mp +barrett_thermal_xmags_mp + +wa2000_mp +wa2000_acog_mp +wa2000_fmj_mp +wa2000_heartbeat_mp +wa2000_silencer_mp +wa2000_thermal_mp +wa2000_xmags_mp +wa2000_acog_fmj_mp +wa2000_acog_heartbeat_mp +wa2000_acog_silencer_mp +wa2000_acog_xmags_mp +wa2000_fmj_heartbeat_mp +wa2000_fmj_silencer_mp +wa2000_fmj_thermal_mp +wa2000_fmj_xmags_mp +wa2000_heartbeat_silencer_mp +wa2000_heartbeat_thermal_mp +wa2000_heartbeat_xmags_mp +wa2000_silencer_thermal_mp +wa2000_silencer_xmags_mp +wa2000_thermal_xmags_mp + +m21_mp +m21_acog_mp +m21_fmj_mp +m21_heartbeat_mp +m21_silencer_mp +m21_thermal_mp +m21_xmags_mp +m21_acog_fmj_mp +m21_acog_heartbeat_mp +m21_acog_silencer_mp +m21_acog_xmags_mp +m21_fmj_heartbeat_mp +m21_fmj_silencer_mp +m21_fmj_thermal_mp +m21_fmj_xmags_mp +m21_heartbeat_silencer_mp +m21_heartbeat_thermal_mp +m21_heartbeat_xmags_mp +m21_silencer_thermal_mp +m21_silencer_xmags_mp +m21_thermal_xmags_mp + +/** End Sniper Rifles **/ +/** Begin Riot Shield **/ + +riotshield_mp + +/** End Riot Shield **/ +/*** End Primary Weapons ***/ +/*** Begin Secondary Weapons ***/ +/** Begin Machine Pistols **/ + +pp2000_mp +pp2000_akimbo_mp +pp2000_eotech_mp +pp2000_fmj_mp +pp2000_reflex_mp +pp2000_silencer_mp +pp2000_xmags_mp +pp2000_akimbo_fmj_mp +pp2000_akimbo_silencer_mp +pp2000_akimbo_xmags_mp +pp2000_eotech_fmj_mp +pp2000_eotech_silencer_mp +pp2000_eotech_xmags_mp +pp2000_fmj_reflex_mp +pp2000_fmj_silencer_mp +pp2000_fmj_xmags_mp +pp2000_reflex_silencer_mp +pp2000_reflex_xmags_mp +pp2000_silencer_xmags_mp + +glock_mp +glock_akimbo_mp +glock_eotech_mp +glock_fmj_mp +glock_reflex_mp +glock_silencer_mp +glock_xmags_mp +glock_akimbo_fmj_mp +glock_akimbo_silencer_mp +glock_akimbo_xmags_mp +glock_eotech_fmj_mp +glock_eotech_silencer_mp +glock_eotech_xmags_mp +glock_fmj_reflex_mp +glock_fmj_silencer_mp +glock_fmj_xmags_mp +glock_reflex_silencer_mp +glock_reflex_xmags_mp +glock_silencer_xmags_mp + +beretta393_mp +beretta393_akimbo_mp +beretta393_eotech_mp +beretta393_fmj_mp +beretta393_reflex_mp +beretta393_silencer_mp +beretta393_xmags_mp +beretta393_akimbo_fmj_mp +beretta393_akimbo_silencer_mp +beretta393_akimbo_xmags_mp +beretta393_eotech_fmj_mp +beretta393_eotech_silencer_mp +beretta393_eotech_xmags_mp +beretta393_fmj_reflex_mp +beretta393_fmj_silencer_mp +beretta393_fmj_xmags_mp +beretta393_reflex_silencer_mp +beretta393_reflex_xmags_mp +beretta393_silencer_xmags_mp + +tmp_mp +tmp_akimbo_mp +tmp_eotech_mp +tmp_fmj_mp +tmp_reflex_mp +tmp_silencer_mp +tmp_xmags_mp +tmp_akimbo_fmj_mp +tmp_akimbo_silencer_mp +tmp_akimbo_xmags_mp +tmp_eotech_fmj_mp +tmp_eotech_silencer_mp +tmp_eotech_xmags_mp +tmp_fmj_reflex_mp +tmp_fmj_silencer_mp +tmp_fmj_xmags_mp +tmp_reflex_silencer_mp +tmp_reflex_xmags_mp +tmp_silencer_xmags_mp + +/** End Machine Pistols **/ +/** Begin Shotguns **/ + +spas12_mp +spas12_eotech_mp +spas12_fmj_mp +spas12_grip_mp +spas12_reflex_mp +spas12_silencer_mp +spas12_xmags_mp +spas12_eotech_fmj_mp +spas12_eotech_grip_mp +spas12_eotech_silencer_mp +spas12_eotech_xmags_mp +spas12_fmj_grip_mp +spas12_fmj_reflex_mp +spas12_fmj_silencer_mp +spas12_fmj_xmags_mp +spas12_grip_reflex_mp +spas12_grip_silencer_mp +spas12_grip_xmags_mp +spas12_reflex_silencer_mp +spas12_reflex_xmags_mp +spas12_silencer_xmags_mp + +aa12_mp +aa12_eotech_mp +aa12_fmj_mp +aa12_grip_mp +aa12_reflex_mp +aa12_silencer_mp +aa12_xmags_mp +aa12_eotech_fmj_mp +aa12_eotech_grip_mp +aa12_eotech_silencer_mp +aa12_eotech_xmags_mp +aa12_fmj_grip_mp +aa12_fmj_reflex_mp +aa12_fmj_silencer_mp +aa12_fmj_xmags_mp +aa12_grip_reflex_mp +aa12_grip_silencer_mp +aa12_grip_xmags_mp +aa12_reflex_silencer_mp +aa12_reflex_xmags_mp +aa12_silencer_xmags_mp + +striker_mp +striker_eotech_mp +striker_fmj_mp +striker_grip_mp +striker_reflex_mp +striker_silencer_mp +striker_xmags_mp +striker_eotech_fmj_mp +striker_eotech_grip_mp +striker_eotech_silencer_mp +striker_eotech_xmags_mp +striker_fmj_grip_mp +striker_fmj_reflex_mp +striker_fmj_silencer_mp +striker_fmj_xmags_mp +striker_grip_reflex_mp +striker_grip_silencer_mp +striker_grip_xmags_mp +striker_reflex_silencer_mp +striker_reflex_xmags_mp +striker_silencer_xmags_mp + +ranger_mp +ranger_akimbo_mp +ranger_fmj_mp +ranger_akimbo_fmj_mp + +m1014_mp +m1014_eotech_mp +m1014_fmj_mp +m1014_grip_mp +m1014_reflex_mp +m1014_silencer_mp +m1014_xmags_mp +m1014_eotech_fmj_mp +m1014_eotech_grip_mp +m1014_eotech_silencer_mp +m1014_eotech_xmags_mp +m1014_fmj_grip_mp +m1014_fmj_reflex_mp +m1014_fmj_silencer_mp +m1014_fmj_xmags_mp +m1014_grip_reflex_mp +m1014_grip_silencer_mp +m1014_grip_xmags_mp +m1014_reflex_silencer_mp +m1014_reflex_xmags_mp +m1014_silencer_xmags_mp + +model1887_mp +model1887_akimbo_mp +model1887_fmj_mp +model1887_akimbo_fmj_mp + +/** End Shotguns **/ +/** Begin Handguns **/ + +usp_mp +usp_akimbo_mp +usp_fmj_mp +usp_silencer_mp +usp_tactical_mp +usp_xmags_mp +usp_akimbo_fmj_mp +usp_akimbo_silencer_mp +usp_akimbo_xmags_mp +usp_fmj_silencer_mp +usp_fmj_tactical_mp +usp_fmj_xmags_mp +usp_silencer_tactical_mp +usp_silencer_xmags_mp +usp_tactical_xmags_mp + +coltanaconda_mp +coltanaconda_akimbo_mp +coltanaconda_fmj_mp +coltanaconda_tactical_mp +coltanaconda_akimbo_fmj_mp +coltanaconda_fmj_tactical_mp + +beretta_mp +beretta_akimbo_mp +beretta_fmj_mp +beretta_silencer_mp +beretta_tactical_mp +beretta_xmags_mp +beretta_akimbo_fmj_mp +beretta_akimbo_silencer_mp +beretta_akimbo_xmags_mp +beretta_fmj_silencer_mp +beretta_fmj_tactical_mp +beretta_fmj_xmags_mp +beretta_silencer_tactical_mp +beretta_silencer_xmags_mp +beretta_tactical_xmags_mp + +deserteagle_mp +deserteagle_akimbo_mp +deserteagle_fmj_mp +deserteagle_tactical_mp +deserteagle_akimbo_fmj_mp +deserteagle_fmj_tactical_mp +deserteaglegold_mp + +/** End Handguns **/ +/** Begin Launchers **/ + +at4_mp +m79_mp +stinger_mp +javelin_mp +rpg_mp +gl_mp + +/** End Launchers**/ +/*** End Secondary Weapons ***/ + +Vision Mods: +############################################### +For transition_time, make it any number you want. +0 for instant. +Higher for fade. + +VisionSetNaked(vision, transition_time); // Everyone +self VisionSetNakedForPlayer(vision, transition_time); // 1 Person + +ac130 +ac130_inverted +af_caves_indoors +af_caves_indoors_breachroom +af_caves_indoors_overlook +af_caves_indoors_skylight +af_caves_indoors_steamroom +af_caves_indoors_steamroom_dark +af_caves_outdoors +af_caves_outdoors_airstrip +af_chase_ending_noshock +af_chase_indoors +af_chase_indoors_2 +af_chase_indoors_3 +af_chase_outdoors +af_chase_outdoors_2 +af_chase_outdoors_3 +aftermath +aftermath_dying +aftermath_hurt +aftermath_nodesat +aftermath_pain +aftermath_walking +airplane +airport +airport_death +airport_exterior +airport_green +airport_intro +airport_stairs +ambush +arcadia +arcadia_checkpoint +arcadia_golfcourse +arcadia_house2 +arcadia_house +arcadia_secondbridge +arcadia_secondstreet +arcadia_wrekage +armada +armada_ground +armada_sound +armada_tvs +armada_water +bigcity_destroyed +black_bw +blackout +blackout_darkness +blackout_nvg +blacktest +bog +bog_a +bog_a_sunrise +bog_b +boneyard +boneyard_flyby +boneyard_ride +boneyard_steer +bridge +cargoship +cargoship_blast +cargoship_indoor2 +cargoship_indoor +cheat_bw +cheat_bw_contrast +cheat_bw_invert +cheat_bw_invert_contrast +cheat_chaplinnight +cheat_contrast +cheat_invert +cheat_invert_contrast +cliffhanger +cliffhanger_extreme +cliffhanger_heavy +cliffhanger_snowmobile +co_break +co_overgrown +cobra_down +cobra_sunset1 +cobra_sunset2 +cobra_sunset3 +cobrapilot +contingency +contingency_thermal_inverted +coup +coup_hit +coup_sunblind +dc_whitehouse_interior +dc_whitehouse_lawn +dc_whitehouse_roof +dc_whitehouse_tunnel +dcburning_bunker +dcburning_commerce +dcburning_crash +dcburning_heliride +dcburning_rooftops +dcburning_trnches +dcemp +dcemp_emp +dcemp_iss +dcemp_iss +dcemp_iss_death +dcemp_office +dcemp_parking +dcemp_parking_lighting +dcemp_postemp2 +dcemp_postemp +dcemp_tunnels +default +default_night +default_night_mp +downtown_la +end_game2 +end_game +estate +estate_ambush_clearing +estate_birchfield +estate_dragplayer +estate_finalfield +estate_forest +estate_forset_clearing +estate_hilltop +estate_house_approach +estate_house_backyard +estate_house_interior +estate_throwplayer +exterior_concept +favela +favela_alleys +favela_chase +favela_ending +favela_escape +favela_escape_chopperjump +favela_escape_market +favela_escape_playerfall_recovery +favela_escape_radiotower +favela_escape_rooftops +favela_escape_soccerfield +favela_escape_soccerfield_buildings +favela_escape_solorun_buildings +favela_escape_solorun_nearend +favela_escape_street +favela_hill +favela_shanty +favela_torture +firingrange +grayscale +gulag +gulag_circle +gulag_ending +gulag_flyin +gulag_hallways +gulag_nvg +helicopter_ride +hunted +hunted_crash +icbm +icbm_interior +icbm_launch +icbm_sunrise0 +icbm_sunrise1 +icbm_sunrise2 +icbm_sunrise3 +icbm_sunrise4 +interior_concept +introscreen +invasion +invasion_alley +invasion_nates_roof +invasion_near_convoy +invasion_stripmall +invasion_suburban_streets +invasion_yards +jeepride +jeepride_cobra +jeepride_flyaway +jeepride_tunnel +jeepride_zak +killhouse +launchfacility +launchfacility_a +launchfacility_b +missilecam +mp_backlot +mp_bloc +mp_bog +mp_brecourt +mp_broadcase +mp_carentan +mp_cargoship +mp_citystreets +mp_convoy +mp_countdown +mp_crash +mp_crash_damage +mp_creek +mp_creek_ss +mp_crossfire +mp_derail +mp_downtown_la +mp_dusk +mp_farm +mp_favela +mp_firingrange +mp_highrise +mp_hill +mp_killhouse +mp_nightshift +mp_oilrig +mp_overgrown +mp_pipeline +mp_quarry +mp_riverwalk +mp_shipment +mp_showdown +mp_skidrow +mp_strike +mp_suburbia +mp_trailer +mp_vacant +mp_verdict +mpintro +mpnuke +mpnuke_aftermath +mpoutro +nate_test +near_death +near_death_mp +oilrig_exterior_deck0 +oilrig_exterior_deck1 +oilrig_exterior_deck2 +oilrig_exterior_deck3 +oilrig_exterior_deck4 +oilrig_exterior_heli +oilrig_interior2 +oilrig_interior +oilrig_underwater +overwatch +overwatch_nv +parabolic +roadkill +roadkill_ambush +roadkill_dismount_building +roadkill_ending +roadkill_inside_school +roadkill_left_school +roadkill_town_normal +roadkill_town_smokey +roadkill_walking_to_school +school +scoutsniper +seaknight_assault +sepia +slomo_breach +sniperescape +sniperescape_glow_off +sniperescape_outside +so_bridge +strike +thermal_mp +trainer_pit +trainer_start +tulsa +village_assauilt +village_defend +wetwork +whitehouse \ No newline at end of file diff --git a/Modern Warfare 2/config_mp_default.cfg b/Modern Warfare 2/config_mp_default.cfg new file mode 100755 index 0000000..aab0ff5 --- /dev/null +++ b/Modern Warfare 2/config_mp_default.cfg @@ -0,0 +1,359 @@ +// generated by Infinity Ward, do not modify +unbindall +bind TAB "+scores" +bind ESCAPE "togglemenu" +bind SPACE "+gostand" +bind 1 "weapnext" +bind 2 "weapnext" +bind 3 "+actionslot 3" +bind 4 "+actionslot 4" +bind 5 "+actionslot 2" +bind A "+moveleft" +bind C "togglecrouch" +bind D "+moveright" +bind E "+melee" +bind F "+activate" +bind G "+frag" +bind I "chatmodepublic" +bind N "+actionslot 1" +bind O "chatmodeteam" +bind P "+talk" +bind Q "+smoke" +bind R "+reload" +bind S "+back" +bind W "+forward" +bind X "+breath_sprint" +bind CTRL "toggleprone" +bind SHIFT "+breath_sprint" +bind MOUSE1 "+attack" +bind MOUSE2 "+speed_throw" +bind MWHEELDOWN "+attack" +bind MWHEELUP "+toggleads_throw" +seta ai_corpseCount "16" +seta cg_blood "1" +seta cg_brass "1" +seta cg_chatHeight "4" +seta cg_chatTime "12000" +seta cg_connectionIconSize "0" +seta cg_cursorHints "4" +seta cg_descriptiveText "1" +seta cg_drawBreathHint "1" +seta cg_drawFPSLabels "1" +seta cg_drawMantleHint "1" +seta cg_drawSnapshot "0" +seta cg_drawStatsSource "0" +seta cg_drawTurretCrosshair "1" +seta cg_drawViewpos "0" +seta cg_gameBoldMessageWidth "390" +seta cg_gameMessageWidth "455" +seta cg_headIconMinScreenRadius "0.025" +seta cg_hintFadeTime "100" +seta cg_hudChatIntermissionPosition "5 110" +seta cg_hudChatPosition "5 200" +seta cg_hudDamageIconHeight "64" +seta cg_hudDamageIconInScope "0" +seta cg_hudDamageIconOffset "128" +seta cg_hudDamageIconTime "6000" +seta cg_hudDamageIconWidth "128" +seta cg_hudGrenadeIconEnabledFlash "0" +seta cg_hudGrenadeIconHeight "25" +seta cg_hudGrenadeIconInScope "0" +seta cg_hudGrenadeIconMaxHeight "104" +seta cg_hudGrenadeIconOffset "50" +seta cg_hudGrenadeIconWidth "25" +seta cg_hudGrenadePointerHeight "12" +seta cg_hudGrenadePointerPivot "12 27" +seta cg_hudGrenadePointerWidth "25" +seta cg_hudProneY "-160" +seta cg_hudSayPosition "5 175" +seta cg_hudStanceHintPrints "0" +seta cg_hudVotePosition "5 220" +seta cg_invalidCmdHintBlinkInterval "600" +seta cg_invalidCmdHintDuration "1800" +seta cg_laserlight "0" +seta cg_mapLocationSelectionCursorSpeed "0.6" +seta cg_marks_ents_player_only "0" +seta cg_predictItems "1" +seta cg_ScoresPing_BgColor "0.25098 0.25098 0.25098 0.501961" +seta cg_ScoresPing_HighColor "0.8 0 0 1" +seta cg_ScoresPing_Interval "100" +seta cg_ScoresPing_LowColor "0 0.74902 0 1" +seta cg_ScoresPing_MaxBars "4" +seta cg_ScoresPing_MedColor "0.8 0.8 0 1" +seta cg_scriptIconSize "0" +seta cg_splatterHitAlpha "1" +seta cg_splatterHitFadeInTime "0.05" +seta cg_splatterHitFadeOutTime "0.1" +seta cg_splatterHitFullInTime "0" +seta cg_splatterHitInnerAngle "15" +seta cg_splatterHitInnerRadius "0" +seta cg_splatterHitOuterAngle "30" +seta cg_splatterHitOuterRadius "0.6" +seta cg_splatterTrackAlpha "1" +seta cg_splatterTrackFadeInTime "0" +seta cg_splatterTrackFadeOutTime "0.5" +seta cg_splatterTrackFullInTime "0.3" +seta cg_splatterTrackInnerAngle "5" +seta cg_splatterTrackInnerRadius "0.4" +seta cg_splatterTrackOuterAngle "20" +seta cg_splatterTrackOuterRadius "0.6" +seta cg_sprintMeterDisabledColor "0.8 0.1 0.1 0.2" +seta cg_sprintMeterEmptyColor "0.7 0.5 0.2 0.8" +seta cg_sprintMeterFullColor "0.8 0.8 0.8 0.8" +seta cg_subtitleMinTime "3" +seta cg_subtitleWidthStandard "520" +seta cg_subtitleWidthWidescreen "600" +seta cg_teamChatsOnly "0" +seta cg_viewZSmoothingMax "16" +seta cg_viewZSmoothingMin "1" +seta cg_viewZSmoothingTime "0.1" +seta cg_voiceIconSize "0" +seta cg_waterSheeting_brightness "0" +seta cg_waterSheeting_contrast "1" +seta cg_waterSheeting_darkTint "1 1 1" +seta cg_waterSheeting_desaturation "0" +seta cg_waterSheeting_distortionScaleFactor "0.021961 1 0 0" +seta cg_waterSheeting_enable "0" +seta cg_waterSheeting_fadeDuration "2" +seta cg_waterSheeting_lightTint "0.780261 1 1" +seta cg_waterSheeting_magnitude "0.0655388" +seta cg_waterSheeting_radius "4.44051" +seta cg_weaponCycleDelay "0" +seta cg_youInKillCamSize "6" +seta cl_freelook "1" +seta cl_maxPing "800" +seta cl_mouseAccel "0" +seta cl_packetdup "1" +seta cl_pitchspeed "140" +seta cl_voice "1" +seta cl_yawspeed "140" +seta com_recommendedSet "1" +seta compassSize "1" +seta con_errormessagetime "8" +seta con_gameMsgWindow0FadeInTime "0.25" +seta con_gameMsgWindow0FadeOutTime "0.5" +seta con_gameMsgWindow0Filter "gamenotify obituary" +seta con_gameMsgWindow0LineCount "4" +seta con_gameMsgWindow0MsgTime "5" +seta con_gameMsgWindow0ScrollTime "0.25" +seta con_gameMsgWindow0SplitscreenScale "1.5" +seta con_gameMsgWindow1FadeInTime "0.25" +seta con_gameMsgWindow1FadeOutTime "0.5" +seta con_gameMsgWindow1Filter "boldgame" +seta con_gameMsgWindow1LineCount "1" +seta con_gameMsgWindow1MsgTime "3" +seta con_gameMsgWindow1ScrollTime "0.25" +seta con_gameMsgWindow1SplitscreenScale "1.5" +seta con_gameMsgWindow2FadeInTime "0.75" +seta con_gameMsgWindow2FadeOutTime "0.5" +seta con_gameMsgWindow2Filter "subtitle" +seta con_gameMsgWindow2LineCount "7" +seta con_gameMsgWindow2MsgTime "5" +seta con_gameMsgWindow2ScrollTime "0.25" +seta con_gameMsgWindow2SplitscreenScale "1.5" +seta con_gameMsgWindow3FadeInTime "0.25" +seta con_gameMsgWindow3FadeOutTime "0.5" +seta con_gameMsgWindow3Filter "" +seta con_gameMsgWindow3LineCount "5" +seta con_gameMsgWindow3MsgTime "5" +seta con_gameMsgWindow3ScrollTime "0.25" +seta con_gameMsgWindow3SplitscreenScale "1.5" +seta con_inputBoxColor "0.25 0.25 0.2 1" +seta con_inputHintBoxColor "0.4 0.4 0.35 1" +seta con_matchPrefixOnly "1" +seta con_miniconlines "5" +seta con_minicontime "4" +seta con_outputBarColor "1 1 0.95 0.6" +seta con_outputSliderColor "0.15 0.15 0.1 0.6" +seta con_outputWindowColor "0.35 0.35 0.3 0.75" +seta con_typewriterColorGlowCheckpoint "0.6 0.5 0.6 1" +seta con_typewriterColorGlowCompleted "0 0.3 0.8 1" +seta con_typewriterColorGlowFailed "0.8 0 0 1" +seta con_typewriterColorGlowUpdated "0 0.6 0.18 1" +seta con_typewriterDecayDuration "700" +seta con_typewriterDecayStartTime "6000" +seta con_typewriterPrintSpeed "50" +seta drawLagometer "0" +seta dynEnt_active "1" +seta fx_marks "1" +seta fx_marks_ents "1" +seta fx_marks_smodels "1" +seta g_allowvote "1" +seta g_banIPs "" +seta g_clonePlayerMaxVelocity "80" +seta g_deadChat "1" +seta g_dropForwardSpeed "10" +seta g_dropHorzSpeedRand "100" +seta g_dropUpSpeedBase "10" +seta g_dropUpSpeedRand "5" +seta g_log "games_mp.log" +seta g_logSync "0" +seta g_oldVoting "1" +seta g_playerCollisionEjectSpeed "25" +seta g_radiusDamageMax "256" +seta g_redCrosshairs "1" +seta g_voiceChatTalkingDuration "500" +seta g_voteAbstainWeight "0.5" +seta glass_angular_vel "5 35" +seta glass_debug "0" +seta glass_edge_angle "5 10" +seta glass_fall_delay "0.2 0.9" +seta glass_fall_gravity "800" +seta glass_fall_ratio "1.5 3" +seta glass_fringe_maxcoverage "0.2" +seta glass_fringe_maxsize "150" +seta glass_fx_chance "0.25" +seta glass_hinge_friction "50" +seta glass_linear_vel "200 400" +seta glass_max_pieces_per_frame "100" +seta glass_max_shatter_fx_per_frame "6" +seta glass_physics_chance "0.15" +seta glass_physics_maxdist "512" +seta glass_shard_maxsize "300" +seta glass_shattered_scale "48" +seta glass_trace_interval "100" +seta hud_deathQuoteFadeTime "1000" +seta hud_enable "1" +seta hud_fade_ammodisplay "0" +seta hud_fade_healthbar "2" +seta hud_fade_offhand "0" +seta hud_fade_sprint "1.7" +seta hud_fade_stance "1.7" +seta hud_fadeout_speed "0.1" +seta hud_flash_period_offhand "0.5" +seta hud_flash_time_offhand "2" +seta hud_health_pulserate_critical "0.5" +seta hud_health_pulserate_injured "1" +seta hud_health_startpulse_critical "0.33" +seta hud_health_startpulse_injured "1" +seta in_mouse "1" +seta intro "0" +seta laserLight "1" +seta laserLightWithoutNightvision "0" +seta loc_forceEnglish "0" +seta loc_language "0" +seta m_filter "0" +seta m_forward "0.25" +seta m_pitch "0.022" +seta m_side "0.25" +seta m_yaw "0.022" +seta monkeytoy "0" +seta name "" +seta net_noipx "0" +seta net_noudp "0" +seta net_socksEnabled "0" +seta net_socksPassword "" +seta net_socksPort "1080" +seta net_socksServer "" +seta net_socksUsername "" +seta r_aaAlpha "dither (fast)" +seta r_aaMaxQuality "0" +seta r_aaSamples "1" +seta r_altModelLightingUpdate "0" +seta r_aspectRatio "auto" +seta r_autopriority "0" +seta r_blacklevel "0" +seta r_customMode "" +seta r_debugLineWidth "1" +seta r_depthPrepass "None" +seta r_displayRefresh "75 Hz" +seta r_distortion "0" +seta r_dlightLimit "0" +seta r_dof_enable "0" +seta r_drawSun "1" +seta r_drawWater "1" +seta r_fastSkin "0" +seta r_fullscreen "0" +seta r_gamma "0.909524" +seta r_glow_allowed "0" +seta r_gpuSync2 "1" +seta r_ignorehwgamma "0" +seta r_inGameVideo "1" +seta r_lodBiasRigid "0" +seta r_lodBiasSkinned "0" +seta r_lodScaleRigid "1" +seta r_lodScaleSkinned "1" +seta r_mode "640x480" +seta r_monitor "0" +seta r_multiGpu "0" +seta r_picmip "1" +seta r_picmip_bump "1" +seta r_picmip_manual "0" +seta r_picmip_spec "1" +seta r_picmip_water "0" +seta r_polygonOffsetBias "-1" +seta r_polygonOffsetScale "-1" +seta r_portalBevels "0.7" +seta r_preloadShaders "0" +seta r_rendererPreference "Default" +seta r_specular "0" +seta r_texFilterAnisoMax "4" +seta r_texFilterAnisoMin "1" +seta r_texFilterMipMode "Unchanged" +seta r_vsync "0" +seta r_zFeather "0" +seta ragdoll_enable "1" +seta ragdoll_max_simulating "16" +seta rate "25000" +seta sensitivity "27.9286" +seta server1 "" +seta server10 "" +seta server11 "" +seta server12 "" +seta server13 "" +seta server14 "" +seta server15 "" +seta server16 "" +seta server2 "" +seta server3 "" +seta server4 "" +seta server5 "" +seta server6 "" +seta server7 "" +seta server8 "" +seta server9 "" +seta sm_enable "0" +seta sm_maxLights "4" +seta sm_sunShadowScaleLocked "0" +seta snaps "20" +seta snd_cinematicVolumeScale "0.5" +seta snd_enableEq "1" +seta snd_errorOnMissing "0" +seta snd_khz "44" +seta snd_outputConfiguration "Windows default" +seta snd_touchStreamFilesOnLoad "0" +seta snd_volume "0.171429" +seta sv_allowDownload "1" +seta sv_floodProtect "1" +seta sv_hostname "CoD4Host" +seta sys_configSum "209012943" +seta sys_configureGHz "10.1406" +seta sys_gpu "ATI Radeon HD 2400" +seta sys_sysMB "2046" +seta ui_bigFont "0.688" +seta ui_browserFriendlyfire "-1" +seta ui_browserKillcam "-1" +seta ui_browserMod "0" +seta ui_browserShowDedicated "0" +seta ui_browserShowEmpty "1" +seta ui_browserShowFull "1" +seta ui_browserShowPassword "-1" +seta ui_browserShowPure "1" +seta ui_currentFeederMapIndex "15" +seta ui_currentMap "3" +seta ui_drawCrosshair "1" +seta ui_extraBigFont "1" +seta ui_joinGametype "0" +seta ui_maxclients "18" +seta ui_netGametype "0" +seta ui_netGametypeName "dm" +seta ui_netSource "1" +seta ui_serverStatusTimeOut "7000" +seta ui_smallFont "0.563" +seta vid_xpos "111" +seta vid_ypos "223" +seta winvoice_mic_mute "1" +seta winvoice_mic_reclevel "65535" +seta winvoice_mic_scaler "1" +seta winvoice_save_voice "0" +con_hidechannel *; con_showchannel dontfilter error gamenotify boldgame subtitle obituary logfile_only console_only gfx sound files devgui profile ui client server system playerweap ai anim physics fx leaderboards parserscript script network